diff --git a/config.js b/config.js
new file mode 100644
index 0000000..96dea8c
--- /dev/null
+++ b/config.js
@@ -0,0 +1,79 @@
+System.config({
+ defaultJSExtensions: true,
+ transpiler: "babel",
+ babelOptions: {
+ "optional": [
+ "runtime",
+ "optimisation.modules.system"
+ ]
+ },
+ paths: {
+ "github:*": "jspm_packages/github/*",
+ "npm:*": "jspm_packages/npm/*"
+ },
+
+ map: {
+ "babel": "npm:babel-core@5.8.38",
+ "babel-runtime": "npm:babel-runtime@5.8.38",
+ "core-js": "npm:core-js@1.2.7",
+ "github:jspm/nodelibs-assert@0.1.0": {
+ "assert": "npm:assert@1.4.1"
+ },
+ "github:jspm/nodelibs-buffer@0.1.0": {
+ "buffer": "npm:buffer@3.6.0"
+ },
+ "github:jspm/nodelibs-path@0.1.0": {
+ "path-browserify": "npm:path-browserify@0.0.0"
+ },
+ "github:jspm/nodelibs-process@0.1.2": {
+ "process": "npm:process@0.11.9"
+ },
+ "github:jspm/nodelibs-util@0.1.0": {
+ "util": "npm:util@0.10.3"
+ },
+ "github:jspm/nodelibs-vm@0.1.0": {
+ "vm-browserify": "npm:vm-browserify@0.0.4"
+ },
+ "npm:assert@1.4.1": {
+ "assert": "github:jspm/nodelibs-assert@0.1.0",
+ "buffer": "github:jspm/nodelibs-buffer@0.1.0",
+ "process": "github:jspm/nodelibs-process@0.1.2",
+ "util": "npm:util@0.10.3"
+ },
+ "npm:babel-runtime@5.8.38": {
+ "process": "github:jspm/nodelibs-process@0.1.2"
+ },
+ "npm:buffer@3.6.0": {
+ "base64-js": "npm:base64-js@0.0.8",
+ "child_process": "github:jspm/nodelibs-child_process@0.1.0",
+ "fs": "github:jspm/nodelibs-fs@0.1.2",
+ "ieee754": "npm:ieee754@1.1.8",
+ "isarray": "npm:isarray@1.0.0",
+ "process": "github:jspm/nodelibs-process@0.1.2"
+ },
+ "npm:core-js@1.2.7": {
+ "fs": "github:jspm/nodelibs-fs@0.1.2",
+ "path": "github:jspm/nodelibs-path@0.1.0",
+ "process": "github:jspm/nodelibs-process@0.1.2",
+ "systemjs-json": "github:systemjs/plugin-json@0.1.2"
+ },
+ "npm:inherits@2.0.1": {
+ "util": "github:jspm/nodelibs-util@0.1.0"
+ },
+ "npm:path-browserify@0.0.0": {
+ "process": "github:jspm/nodelibs-process@0.1.2"
+ },
+ "npm:process@0.11.9": {
+ "assert": "github:jspm/nodelibs-assert@0.1.0",
+ "fs": "github:jspm/nodelibs-fs@0.1.2",
+ "vm": "github:jspm/nodelibs-vm@0.1.0"
+ },
+ "npm:util@0.10.3": {
+ "inherits": "npm:inherits@2.0.1",
+ "process": "github:jspm/nodelibs-process@0.1.2"
+ },
+ "npm:vm-browserify@0.0.4": {
+ "indexof": "npm:indexof@0.0.1"
+ }
+ }
+});
diff --git a/jspm_packages/.dependencies.json b/jspm_packages/.dependencies.json
new file mode 100644
index 0000000..109bd99
--- /dev/null
+++ b/jspm_packages/.dependencies.json
@@ -0,0 +1,69 @@
+{
+ "npm:babel-runtime@5.8.38": {
+ "process": "github:jspm/nodelibs-process@^0.1.0"
+ },
+ "npm:babel-core@5.8.38": {},
+ "github:jspm/nodelibs-process@0.1.2": {
+ "process": "npm:process@^0.11.0"
+ },
+ "npm:core-js@1.2.7": {
+ "systemjs-json": "github:systemjs/plugin-json@^0.1.0",
+ "process": "github:jspm/nodelibs-process@^0.1.0",
+ "fs": "github:jspm/nodelibs-fs@^0.1.0",
+ "path": "github:jspm/nodelibs-path@^0.1.0"
+ },
+ "npm:process@0.11.9": {
+ "assert": "github:jspm/nodelibs-assert@^0.1.0",
+ "vm": "github:jspm/nodelibs-vm@^0.1.0",
+ "fs": "github:jspm/nodelibs-fs@^0.1.0"
+ },
+ "github:jspm/nodelibs-path@0.1.0": {
+ "path-browserify": "npm:path-browserify@0.0.0"
+ },
+ "github:jspm/nodelibs-fs@0.1.2": {},
+ "github:systemjs/plugin-json@0.1.2": {},
+ "npm:path-browserify@0.0.0": {
+ "process": "github:jspm/nodelibs-process@^0.1.0"
+ },
+ "github:jspm/nodelibs-vm@0.1.0": {
+ "vm-browserify": "npm:vm-browserify@0.0.4"
+ },
+ "github:jspm/nodelibs-assert@0.1.0": {
+ "assert": "npm:assert@^1.3.0"
+ },
+ "npm:vm-browserify@0.0.4": {
+ "indexof": "npm:indexof@0.0.1"
+ },
+ "npm:indexof@0.0.1": {},
+ "npm:assert@1.4.1": {
+ "util": "npm:util@0.10.3",
+ "buffer": "github:jspm/nodelibs-buffer@^0.1.0",
+ "assert": "github:jspm/nodelibs-assert@^0.1.0",
+ "process": "github:jspm/nodelibs-process@^0.1.0"
+ },
+ "npm:util@0.10.3": {
+ "inherits": "npm:inherits@2.0.1",
+ "process": "github:jspm/nodelibs-process@^0.1.0"
+ },
+ "npm:inherits@2.0.1": {
+ "util": "github:jspm/nodelibs-util@^0.1.0"
+ },
+ "github:jspm/nodelibs-util@0.1.0": {
+ "util": "npm:util@^0.10.3"
+ },
+ "github:jspm/nodelibs-buffer@0.1.0": {
+ "buffer": "npm:buffer@^3.0.1"
+ },
+ "npm:buffer@3.6.0": {
+ "base64-js": "npm:base64-js@0.0.8",
+ "ieee754": "npm:ieee754@^1.1.4",
+ "isarray": "npm:isarray@^1.0.0",
+ "fs": "github:jspm/nodelibs-fs@^0.1.0",
+ "child_process": "github:jspm/nodelibs-child_process@^0.1.0",
+ "process": "github:jspm/nodelibs-process@^0.1.0"
+ },
+ "npm:isarray@1.0.0": {},
+ "npm:base64-js@0.0.8": {},
+ "npm:ieee754@1.1.8": {},
+ "github:jspm/nodelibs-child_process@0.1.0": {}
+}
\ No newline at end of file
diff --git a/jspm_packages/.loaderversions b/jspm_packages/.loaderversions
new file mode 100644
index 0000000..9ef232f
--- /dev/null
+++ b/jspm_packages/.loaderversions
@@ -0,0 +1 @@
+0.19.39
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-assert@0.1.0.js b/jspm_packages/github/jspm/nodelibs-assert@0.1.0.js
new file mode 100644
index 0000000..93fa283
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-assert@0.1.0.js
@@ -0,0 +1 @@
+module.exports = require("github:jspm/nodelibs-assert@0.1.0/index");
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-assert@0.1.0/.jspm-hash b/jspm_packages/github/jspm/nodelibs-assert@0.1.0/.jspm-hash
new file mode 100644
index 0000000..615c0e7
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-assert@0.1.0/.jspm-hash
@@ -0,0 +1 @@
+3df1642a7cf401eacbb46a1d8bfe246ab79b57c299914b932bd37a50b983c5e7c90ae93bjspm-github@0.13.10.16.1
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-assert@0.1.0/index.js b/jspm_packages/github/jspm/nodelibs-assert@0.1.0/index.js
new file mode 100644
index 0000000..b8a2f1a
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-assert@0.1.0/index.js
@@ -0,0 +1,2 @@
+/* */
+module.exports = System._nodeRequire ? System._nodeRequire('assert') : require('assert');
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-assert@0.1.0/package.json b/jspm_packages/github/jspm/nodelibs-assert@0.1.0/package.json
new file mode 100644
index 0000000..61d704a
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-assert@0.1.0/package.json
@@ -0,0 +1,6 @@
+{
+ "registry": "npm",
+ "dependencies": {
+ "assert": "^1.3.0"
+ }
+}
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-buffer@0.1.0.js b/jspm_packages/github/jspm/nodelibs-buffer@0.1.0.js
new file mode 100644
index 0000000..e18e5fe
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-buffer@0.1.0.js
@@ -0,0 +1 @@
+module.exports = require("github:jspm/nodelibs-buffer@0.1.0/index");
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-buffer@0.1.0/.jspm-hash b/jspm_packages/github/jspm/nodelibs-buffer@0.1.0/.jspm-hash
new file mode 100644
index 0000000..c344374
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-buffer@0.1.0/.jspm-hash
@@ -0,0 +1 @@
+59c7427feb449b75ff772d899fbb79766b75f78299914b932bd37a50b983c5e7c90ae93bjspm-github@0.13.10.16.1
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-buffer@0.1.0/index.js b/jspm_packages/github/jspm/nodelibs-buffer@0.1.0/index.js
new file mode 100644
index 0000000..955b54d
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-buffer@0.1.0/index.js
@@ -0,0 +1,2 @@
+/* */
+module.exports = System._nodeRequire ? System._nodeRequire('buffer') : require('buffer');
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-buffer@0.1.0/package.json b/jspm_packages/github/jspm/nodelibs-buffer@0.1.0/package.json
new file mode 100644
index 0000000..d29b215
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-buffer@0.1.0/package.json
@@ -0,0 +1,6 @@
+{
+ "registry": "npm",
+ "dependencies": {
+ "buffer": "^3.0.1"
+ }
+}
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-child_process@0.1.0.js b/jspm_packages/github/jspm/nodelibs-child_process@0.1.0.js
new file mode 100644
index 0000000..f675414
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-child_process@0.1.0.js
@@ -0,0 +1 @@
+module.exports = require("github:jspm/nodelibs-child_process@0.1.0/index");
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-child_process@0.1.0/.jspm-hash b/jspm_packages/github/jspm/nodelibs-child_process@0.1.0/.jspm-hash
new file mode 100644
index 0000000..5b3d017
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-child_process@0.1.0/.jspm-hash
@@ -0,0 +1 @@
+ed0ce91afafb6c567874b3e890aa0c353c84c97199914b932bd37a50b983c5e7c90ae93bjspm-github@0.13.10.16.1
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-child_process@0.1.0/index.js b/jspm_packages/github/jspm/nodelibs-child_process@0.1.0/index.js
new file mode 100644
index 0000000..47aa000
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-child_process@0.1.0/index.js
@@ -0,0 +1,5 @@
+/* */
+if (System._nodeRequire)
+ module.exports = System._nodeRequire('child_process');
+else
+ throw "Node child_process module not supported in browsers.";
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-child_process@0.1.0/package.json b/jspm_packages/github/jspm/nodelibs-child_process@0.1.0/package.json
new file mode 100644
index 0000000..7e4082d
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-child_process@0.1.0/package.json
@@ -0,0 +1,3 @@
+{
+ "registry": "npm"
+}
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-fs@0.1.2.js b/jspm_packages/github/jspm/nodelibs-fs@0.1.2.js
new file mode 100644
index 0000000..d6649f6
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-fs@0.1.2.js
@@ -0,0 +1 @@
+module.exports = require("github:jspm/nodelibs-fs@0.1.2/index");
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-fs@0.1.2/.jspm-hash b/jspm_packages/github/jspm/nodelibs-fs@0.1.2/.jspm-hash
new file mode 100644
index 0000000..fb5d342
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-fs@0.1.2/.jspm-hash
@@ -0,0 +1 @@
+e295454174ed9e95b9383f8184859d76c610d19c99914b932bd37a50b983c5e7c90ae93bjspm-github@0.13.10.16.1
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-fs@0.1.2/index.js b/jspm_packages/github/jspm/nodelibs-fs@0.1.2/index.js
new file mode 100644
index 0000000..3894a05
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-fs@0.1.2/index.js
@@ -0,0 +1,25 @@
+/* */
+if (System._nodeRequire) {
+ module.exports = System._nodeRequire('fs');
+}
+else {
+
+ exports.readFileSync = function(address) {
+ var output;
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', address, false);
+ xhr.onreadystatechange = function(e) {
+ if (xhr.readyState == 4) {
+ var status = xhr.status;
+ if ((status > 399 && status < 600) || status == 400) {
+ throw 'File read error on ' + address;
+ }
+ else
+ output = xhr.responseText;
+ }
+ }
+ xhr.send(null);
+ return output;
+ };
+
+}
diff --git a/jspm_packages/github/jspm/nodelibs-fs@0.1.2/package.json b/jspm_packages/github/jspm/nodelibs-fs@0.1.2/package.json
new file mode 100644
index 0000000..c514fda
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-fs@0.1.2/package.json
@@ -0,0 +1,3 @@
+{
+ "registry": "npm"
+}
diff --git a/jspm_packages/github/jspm/nodelibs-path@0.1.0.js b/jspm_packages/github/jspm/nodelibs-path@0.1.0.js
new file mode 100644
index 0000000..b4ff4c5
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-path@0.1.0.js
@@ -0,0 +1 @@
+module.exports = require("github:jspm/nodelibs-path@0.1.0/index");
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-path@0.1.0/.jspm-hash b/jspm_packages/github/jspm/nodelibs-path@0.1.0/.jspm-hash
new file mode 100644
index 0000000..d7dc1ee
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-path@0.1.0/.jspm-hash
@@ -0,0 +1 @@
+11c0cdcfe4abdec26b2847ed816ed4507544fca899914b932bd37a50b983c5e7c90ae93bjspm-github@0.13.10.16.1
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-path@0.1.0/index.js b/jspm_packages/github/jspm/nodelibs-path@0.1.0/index.js
new file mode 100644
index 0000000..1b384e8
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-path@0.1.0/index.js
@@ -0,0 +1,2 @@
+/* */
+module.exports = System._nodeRequire ? System._nodeRequire('path') : require('path-browserify');
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-path@0.1.0/package.json b/jspm_packages/github/jspm/nodelibs-path@0.1.0/package.json
new file mode 100644
index 0000000..609c780
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-path@0.1.0/package.json
@@ -0,0 +1,6 @@
+{
+ "registry": "npm",
+ "dependencies": {
+ "path-browserify": "0.0.0"
+ }
+}
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-process@0.1.2.js b/jspm_packages/github/jspm/nodelibs-process@0.1.2.js
new file mode 100644
index 0000000..6b37edd
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-process@0.1.2.js
@@ -0,0 +1 @@
+module.exports = require("github:jspm/nodelibs-process@0.1.2/index");
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-process@0.1.2/.jspm-hash b/jspm_packages/github/jspm/nodelibs-process@0.1.2/.jspm-hash
new file mode 100644
index 0000000..ef88f25
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-process@0.1.2/.jspm-hash
@@ -0,0 +1 @@
+32790c950d3f375e4beff9c8bdbc3b3837c355e699914b932bd37a50b983c5e7c90ae93bjspm-github@0.13.10.16.1
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-process@0.1.2/index.js b/jspm_packages/github/jspm/nodelibs-process@0.1.2/index.js
new file mode 100644
index 0000000..448b6e7
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-process@0.1.2/index.js
@@ -0,0 +1 @@
+module.exports = System._nodeRequire ? process : require('process');
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-process@0.1.2/package.json b/jspm_packages/github/jspm/nodelibs-process@0.1.2/package.json
new file mode 100644
index 0000000..2cc5be8
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-process@0.1.2/package.json
@@ -0,0 +1,6 @@
+{
+ "registry": "jspm",
+ "dependencies": {
+ "process": "npm:process@^0.11.0"
+ }
+}
diff --git a/jspm_packages/github/jspm/nodelibs-util@0.1.0.js b/jspm_packages/github/jspm/nodelibs-util@0.1.0.js
new file mode 100644
index 0000000..1811521
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-util@0.1.0.js
@@ -0,0 +1 @@
+module.exports = require("github:jspm/nodelibs-util@0.1.0/index");
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-util@0.1.0/.jspm-hash b/jspm_packages/github/jspm/nodelibs-util@0.1.0/.jspm-hash
new file mode 100644
index 0000000..ba8bfe8
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-util@0.1.0/.jspm-hash
@@ -0,0 +1 @@
+108d15fdf020621a254a7f09bdc94001e5a8dbcb99914b932bd37a50b983c5e7c90ae93bjspm-github@0.13.10.16.1
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-util@0.1.0/index.js b/jspm_packages/github/jspm/nodelibs-util@0.1.0/index.js
new file mode 100644
index 0000000..e670e97
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-util@0.1.0/index.js
@@ -0,0 +1,2 @@
+/* */
+module.exports = System._nodeRequire ? System._nodeRequire('util') : require('util');
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-util@0.1.0/package.json b/jspm_packages/github/jspm/nodelibs-util@0.1.0/package.json
new file mode 100644
index 0000000..9bdeecd
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-util@0.1.0/package.json
@@ -0,0 +1,6 @@
+{
+ "registry": "npm",
+ "dependencies": {
+ "util": "^0.10.3"
+ }
+}
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-vm@0.1.0.js b/jspm_packages/github/jspm/nodelibs-vm@0.1.0.js
new file mode 100644
index 0000000..6fadeb2
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-vm@0.1.0.js
@@ -0,0 +1 @@
+module.exports = require("github:jspm/nodelibs-vm@0.1.0/index");
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-vm@0.1.0/.jspm-hash b/jspm_packages/github/jspm/nodelibs-vm@0.1.0/.jspm-hash
new file mode 100644
index 0000000..319d9a2
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-vm@0.1.0/.jspm-hash
@@ -0,0 +1 @@
+bcb9e18f996339f584b41883ed6fe6cf4ec9676199914b932bd37a50b983c5e7c90ae93bjspm-github@0.13.10.16.1
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-vm@0.1.0/index.js b/jspm_packages/github/jspm/nodelibs-vm@0.1.0/index.js
new file mode 100644
index 0000000..a0b1ff6
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-vm@0.1.0/index.js
@@ -0,0 +1,2 @@
+/* */
+module.exports = System._nodeRequire ? System._nodeRequire('vm') : require('vm-browserify');
\ No newline at end of file
diff --git a/jspm_packages/github/jspm/nodelibs-vm@0.1.0/package.json b/jspm_packages/github/jspm/nodelibs-vm@0.1.0/package.json
new file mode 100644
index 0000000..15b571e
--- /dev/null
+++ b/jspm_packages/github/jspm/nodelibs-vm@0.1.0/package.json
@@ -0,0 +1,6 @@
+{
+ "registry": "npm",
+ "dependencies": {
+ "vm-browserify": "0.0.4"
+ }
+}
\ No newline at end of file
diff --git a/jspm_packages/github/systemjs/plugin-json@0.1.2.js b/jspm_packages/github/systemjs/plugin-json@0.1.2.js
new file mode 100644
index 0000000..c39e5d3
--- /dev/null
+++ b/jspm_packages/github/systemjs/plugin-json@0.1.2.js
@@ -0,0 +1,3 @@
+define(["github:systemjs/plugin-json@0.1.2/json"], function(main) {
+ return main;
+});
\ No newline at end of file
diff --git a/jspm_packages/github/systemjs/plugin-json@0.1.2/.jspm-hash b/jspm_packages/github/systemjs/plugin-json@0.1.2/.jspm-hash
new file mode 100644
index 0000000..f72e0ab
--- /dev/null
+++ b/jspm_packages/github/systemjs/plugin-json@0.1.2/.jspm-hash
@@ -0,0 +1 @@
+bb56c5eac541ee264d607900bb9a901efe22275299914b932bd37a50b983c5e7c90ae93bjspm-github@0.13.10.16.1
\ No newline at end of file
diff --git a/jspm_packages/github/systemjs/plugin-json@0.1.2/LICENSE b/jspm_packages/github/systemjs/plugin-json@0.1.2/LICENSE
new file mode 100644
index 0000000..7167772
--- /dev/null
+++ b/jspm_packages/github/systemjs/plugin-json@0.1.2/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2013 jspm
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/jspm_packages/github/systemjs/plugin-json@0.1.2/README.md b/jspm_packages/github/systemjs/plugin-json@0.1.2/README.md
new file mode 100644
index 0000000..e2a6441
--- /dev/null
+++ b/jspm_packages/github/systemjs/plugin-json@0.1.2/README.md
@@ -0,0 +1,5 @@
+plugin-json
+===========
+
+JSON loader plugin
+
diff --git a/jspm_packages/github/systemjs/plugin-json@0.1.2/json.js b/jspm_packages/github/systemjs/plugin-json@0.1.2/json.js
new file mode 100644
index 0000000..e2a23e6
--- /dev/null
+++ b/jspm_packages/github/systemjs/plugin-json@0.1.2/json.js
@@ -0,0 +1,16 @@
+/*
+ JSON plugin
+*/
+
+define({
+ translate: function(load) {
+ if (this.builder) {
+ load.metadata.format = 'cjs';
+ return 'module.exports = ' + JSON.stringify(JSON.parse(load.source));
+ }
+ },
+ instantiate: function(load) {
+ if (!this.builder)
+ return JSON.parse(load.source);
+ }
+});
\ No newline at end of file
diff --git a/jspm_packages/github/systemjs/plugin-json@0.1.2/json.json b/jspm_packages/github/systemjs/plugin-json@0.1.2/json.json
new file mode 100644
index 0000000..0294a88
--- /dev/null
+++ b/jspm_packages/github/systemjs/plugin-json@0.1.2/json.json
@@ -0,0 +1,3 @@
+{
+ "some": "json"
+}
\ No newline at end of file
diff --git a/jspm_packages/github/systemjs/plugin-json@0.1.2/package.json b/jspm_packages/github/systemjs/plugin-json@0.1.2/package.json
new file mode 100644
index 0000000..aba857e
--- /dev/null
+++ b/jspm_packages/github/systemjs/plugin-json@0.1.2/package.json
@@ -0,0 +1,14 @@
+{
+ "name": "systemjs-plugin-json",
+ "version": "0.1.0",
+ "main": "json",
+ "repository": {
+ "type": "git",
+ "url": "http://github.com/systemjs/plugin-json.git"
+ },
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/systemjs/plugin-json/issues"
+ },
+ "homepage": "https://github.com/systemjs/plugin-json"
+}
diff --git a/jspm_packages/github/systemjs/plugin-json@0.1.2/test.html b/jspm_packages/github/systemjs/plugin-json@0.1.2/test.html
new file mode 100644
index 0000000..7ee3dc3
--- /dev/null
+++ b/jspm_packages/github/systemjs/plugin-json@0.1.2/test.html
@@ -0,0 +1,5 @@
+
+
+
\ No newline at end of file
diff --git a/jspm_packages/npm/assert@1.4.1.js b/jspm_packages/npm/assert@1.4.1.js
new file mode 100644
index 0000000..f10d85f
--- /dev/null
+++ b/jspm_packages/npm/assert@1.4.1.js
@@ -0,0 +1 @@
+module.exports = require("npm:assert@1.4.1/assert.js");
\ No newline at end of file
diff --git a/jspm_packages/npm/assert@1.4.1/.jspm-hash b/jspm_packages/npm/assert@1.4.1/.jspm-hash
new file mode 100644
index 0000000..fe4a36c
--- /dev/null
+++ b/jspm_packages/npm/assert@1.4.1/.jspm-hash
@@ -0,0 +1 @@
+99912d591836b5a6f5b345c0f07eefc08fc65d9199914b932bd37a50b983c5e7c90ae93bjspm-npm@0.260.16.1
\ No newline at end of file
diff --git a/jspm_packages/npm/assert@1.4.1/.npmignore b/jspm_packages/npm/assert@1.4.1/.npmignore
new file mode 100644
index 0000000..3c3629e
--- /dev/null
+++ b/jspm_packages/npm/assert@1.4.1/.npmignore
@@ -0,0 +1 @@
+node_modules
diff --git a/jspm_packages/npm/assert@1.4.1/.travis.yml b/jspm_packages/npm/assert@1.4.1/.travis.yml
new file mode 100644
index 0000000..a690ffd
--- /dev/null
+++ b/jspm_packages/npm/assert@1.4.1/.travis.yml
@@ -0,0 +1,31 @@
+language: node_js
+before_install:
+ - npm install -g npm@2
+ - npm install -g npm
+matrix:
+ include:
+ - node_js: '0.8'
+ env: TASK=test-node
+ - node_js: '0.10'
+ env: TASK=test-node
+ - node_js: '0.11'
+ env: TASK=test-node
+ - node_js: '0.12'
+ env: TASK=test-node
+ - node_js: 1
+ env: TASK=test-node
+ - node_js: 2
+ env: TASK=test-node
+ - node_js: 3
+ env: TASK=test-node
+ - node_js: 4
+ env: TASK=test-node
+ - node_js: 5
+ env: TASK=test-node
+ - node_js: '0.10'
+ env: TASK=test-browser
+script: "npm run $TASK"
+env:
+ global:
+ - secure: qThuKBZQtkooAvzaYldECGNqvKGPRTnXx62IVyhSbFlsCY1VCmjhLldhyPDiZQ3JqL1XvSkK8OMDupiHqZnNE0nGijoO4M/kaEdjBB+jpjg3f8I6te2SNU935SbkfY9KHAaFXMZwdcq7Fk932AxWEu+FMSDM+080wNKpEATXDe4=
+ - secure: O/scKjHLRcPN5ILV5qsSkksQ7qcZQdHWEUUPItmj/4+vmCc28bHpicoUxXG5A96iHvkBbdmky/nGCg464ZaNLk68m6hfEMDAR3J6mhM2Pf5C4QI/LlFlR1fob9sQ8lztwSGOItwdK8Rfrgb30RRVV71f6FxnaJ6PKMuMNT5S1AQ=
diff --git a/jspm_packages/npm/assert@1.4.1/.zuul.yml b/jspm_packages/npm/assert@1.4.1/.zuul.yml
new file mode 100644
index 0000000..9353eb7
--- /dev/null
+++ b/jspm_packages/npm/assert@1.4.1/.zuul.yml
@@ -0,0 +1,13 @@
+ui: mocha-qunit
+tunnel: ngrok
+browsers:
+ - name: chrome
+ version: latest
+ - name: firefox
+ version: latest
+ - name: safari
+ version: latest
+ - name: ie
+ version: 9..latest
+ - name: microsoftedge
+ version: latest
diff --git a/jspm_packages/npm/assert@1.4.1/LICENSE b/jspm_packages/npm/assert@1.4.1/LICENSE
new file mode 100644
index 0000000..e3d4e69
--- /dev/null
+++ b/jspm_packages/npm/assert@1.4.1/LICENSE
@@ -0,0 +1,18 @@
+Copyright Joyent, Inc. and other Node contributors. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
diff --git a/jspm_packages/npm/assert@1.4.1/README.md b/jspm_packages/npm/assert@1.4.1/README.md
new file mode 100644
index 0000000..6d252ab
--- /dev/null
+++ b/jspm_packages/npm/assert@1.4.1/README.md
@@ -0,0 +1,64 @@
+# assert
+
+[](https://travis-ci.org/defunctzombie/commonjs-assert)
+
+This module is used for writing unit tests for your applications, you can access it with require('assert').
+
+The API is derived from the [commonjs 1.0 unit testing](http://wiki.commonjs.org/wiki/Unit_Testing/1.0) spec and the [node.js assert module](http://nodejs.org/api/assert.html)
+
+## assert.fail(actual, expected, message, operator)
+Throws an exception that displays the values for actual and expected separated by the provided operator.
+
+## assert(value, message), assert.ok(value, [message])
+Tests if value is truthy, it is equivalent to assert.equal(true, !!value, message);
+
+## assert.equal(actual, expected, [message])
+Tests shallow, coercive equality with the equal comparison operator ( == ).
+
+## assert.notEqual(actual, expected, [message])
+Tests shallow, coercive non-equality with the not equal comparison operator ( != ).
+
+## assert.deepEqual(actual, expected, [message])
+Tests for deep equality.
+
+## assert.notDeepEqual(actual, expected, [message])
+Tests for any deep inequality.
+
+## assert.strictEqual(actual, expected, [message])
+Tests strict equality, as determined by the strict equality operator ( === )
+
+## assert.notStrictEqual(actual, expected, [message])
+Tests strict non-equality, as determined by the strict not equal operator ( !== )
+
+## assert.throws(block, [error], [message])
+Expects block to throw an error. error can be constructor, regexp or validation function.
+
+Validate instanceof using constructor:
+
+```javascript
+assert.throws(function() { throw new Error("Wrong value"); }, Error);
+```
+
+Validate error message using RegExp:
+
+```javascript
+assert.throws(function() { throw new Error("Wrong value"); }, /value/);
+```
+
+Custom error validation:
+
+```javascript
+assert.throws(function() {
+ throw new Error("Wrong value");
+}, function(err) {
+ if ( (err instanceof Error) && /value/.test(err) ) {
+ return true;
+ }
+}, "unexpected error");
+```
+
+## assert.doesNotThrow(block, [message])
+Expects block not to throw an error, see assert.throws for details.
+
+## assert.ifError(value)
+Tests if value is not a false value, throws if it is a true value. Useful when testing the first argument, error in callbacks.
diff --git a/jspm_packages/npm/assert@1.4.1/assert.js b/jspm_packages/npm/assert@1.4.1/assert.js
new file mode 100644
index 0000000..6a532df
--- /dev/null
+++ b/jspm_packages/npm/assert@1.4.1/assert.js
@@ -0,0 +1,315 @@
+/* */
+(function(Buffer) {
+ 'use strict';
+ function compare(a, b) {
+ if (a === b) {
+ return 0;
+ }
+ var x = a.length;
+ var y = b.length;
+ for (var i = 0,
+ len = Math.min(x, y); i < len; ++i) {
+ if (a[i] !== b[i]) {
+ x = a[i];
+ y = b[i];
+ break;
+ }
+ }
+ if (x < y) {
+ return -1;
+ }
+ if (y < x) {
+ return 1;
+ }
+ return 0;
+ }
+ function isBuffer(b) {
+ if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
+ return global.Buffer.isBuffer(b);
+ }
+ return !!(b != null && b._isBuffer);
+ }
+ var util = require('util');
+ var hasOwn = Object.prototype.hasOwnProperty;
+ var pSlice = Array.prototype.slice;
+ var functionsHaveNames = (function() {
+ return function foo() {}.name === 'foo';
+ }());
+ function pToString(obj) {
+ return Object.prototype.toString.call(obj);
+ }
+ function isView(arrbuf) {
+ if (isBuffer(arrbuf)) {
+ return false;
+ }
+ if (typeof global.ArrayBuffer !== 'function') {
+ return false;
+ }
+ if (typeof ArrayBuffer.isView === 'function') {
+ return ArrayBuffer.isView(arrbuf);
+ }
+ if (!arrbuf) {
+ return false;
+ }
+ if (arrbuf instanceof DataView) {
+ return true;
+ }
+ if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
+ return true;
+ }
+ return false;
+ }
+ var assert = module.exports = ok;
+ var regex = /\s*function\s+([^\(\s]*)\s*/;
+ function getName(func) {
+ if (!util.isFunction(func)) {
+ return;
+ }
+ if (functionsHaveNames) {
+ return func.name;
+ }
+ var str = func.toString();
+ var match = str.match(regex);
+ return match && match[1];
+ }
+ assert.AssertionError = function AssertionError(options) {
+ this.name = 'AssertionError';
+ this.actual = options.actual;
+ this.expected = options.expected;
+ this.operator = options.operator;
+ if (options.message) {
+ this.message = options.message;
+ this.generatedMessage = false;
+ } else {
+ this.message = getMessage(this);
+ this.generatedMessage = true;
+ }
+ var stackStartFunction = options.stackStartFunction || fail;
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(this, stackStartFunction);
+ } else {
+ var err = new Error();
+ if (err.stack) {
+ var out = err.stack;
+ var fn_name = getName(stackStartFunction);
+ var idx = out.indexOf('\n' + fn_name);
+ if (idx >= 0) {
+ var next_line = out.indexOf('\n', idx + 1);
+ out = out.substring(next_line + 1);
+ }
+ this.stack = out;
+ }
+ }
+ };
+ util.inherits(assert.AssertionError, Error);
+ function truncate(s, n) {
+ if (typeof s === 'string') {
+ return s.length < n ? s : s.slice(0, n);
+ } else {
+ return s;
+ }
+ }
+ function inspect(something) {
+ if (functionsHaveNames || !util.isFunction(something)) {
+ return util.inspect(something);
+ }
+ var rawname = getName(something);
+ var name = rawname ? ': ' + rawname : '';
+ return '[Function' + name + ']';
+ }
+ function getMessage(self) {
+ return truncate(inspect(self.actual), 128) + ' ' + self.operator + ' ' + truncate(inspect(self.expected), 128);
+ }
+ function fail(actual, expected, message, operator, stackStartFunction) {
+ throw new assert.AssertionError({
+ message: message,
+ actual: actual,
+ expected: expected,
+ operator: operator,
+ stackStartFunction: stackStartFunction
+ });
+ }
+ assert.fail = fail;
+ function ok(value, message) {
+ if (!value)
+ fail(value, true, message, '==', assert.ok);
+ }
+ assert.ok = ok;
+ assert.equal = function equal(actual, expected, message) {
+ if (actual != expected)
+ fail(actual, expected, message, '==', assert.equal);
+ };
+ assert.notEqual = function notEqual(actual, expected, message) {
+ if (actual == expected) {
+ fail(actual, expected, message, '!=', assert.notEqual);
+ }
+ };
+ assert.deepEqual = function deepEqual(actual, expected, message) {
+ if (!_deepEqual(actual, expected, false)) {
+ fail(actual, expected, message, 'deepEqual', assert.deepEqual);
+ }
+ };
+ assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
+ if (!_deepEqual(actual, expected, true)) {
+ fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
+ }
+ };
+ function _deepEqual(actual, expected, strict, memos) {
+ if (actual === expected) {
+ return true;
+ } else if (isBuffer(actual) && isBuffer(expected)) {
+ return compare(actual, expected) === 0;
+ } else if (util.isDate(actual) && util.isDate(expected)) {
+ return actual.getTime() === expected.getTime();
+ } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
+ return actual.source === expected.source && actual.global === expected.global && actual.multiline === expected.multiline && actual.lastIndex === expected.lastIndex && actual.ignoreCase === expected.ignoreCase;
+ } else if ((actual === null || typeof actual !== 'object') && (expected === null || typeof expected !== 'object')) {
+ return strict ? actual === expected : actual == expected;
+ } else if (isView(actual) && isView(expected) && pToString(actual) === pToString(expected) && !(actual instanceof Float32Array || actual instanceof Float64Array)) {
+ return compare(new Uint8Array(actual.buffer), new Uint8Array(expected.buffer)) === 0;
+ } else if (isBuffer(actual) !== isBuffer(expected)) {
+ return false;
+ } else {
+ memos = memos || {
+ actual: [],
+ expected: []
+ };
+ var actualIndex = memos.actual.indexOf(actual);
+ if (actualIndex !== -1) {
+ if (actualIndex === memos.expected.indexOf(expected)) {
+ return true;
+ }
+ }
+ memos.actual.push(actual);
+ memos.expected.push(expected);
+ return objEquiv(actual, expected, strict, memos);
+ }
+ }
+ function isArguments(object) {
+ return Object.prototype.toString.call(object) == '[object Arguments]';
+ }
+ function objEquiv(a, b, strict, actualVisitedObjects) {
+ if (a === null || a === undefined || b === null || b === undefined)
+ return false;
+ if (util.isPrimitive(a) || util.isPrimitive(b))
+ return a === b;
+ if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
+ return false;
+ var aIsArgs = isArguments(a);
+ var bIsArgs = isArguments(b);
+ if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
+ return false;
+ if (aIsArgs) {
+ a = pSlice.call(a);
+ b = pSlice.call(b);
+ return _deepEqual(a, b, strict);
+ }
+ var ka = objectKeys(a);
+ var kb = objectKeys(b);
+ var key,
+ i;
+ if (ka.length !== kb.length)
+ return false;
+ ka.sort();
+ kb.sort();
+ for (i = ka.length - 1; i >= 0; i--) {
+ if (ka[i] !== kb[i])
+ return false;
+ }
+ for (i = ka.length - 1; i >= 0; i--) {
+ key = ka[i];
+ if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
+ return false;
+ }
+ return true;
+ }
+ assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
+ if (_deepEqual(actual, expected, false)) {
+ fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
+ }
+ };
+ assert.notDeepStrictEqual = notDeepStrictEqual;
+ function notDeepStrictEqual(actual, expected, message) {
+ if (_deepEqual(actual, expected, true)) {
+ fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
+ }
+ }
+ assert.strictEqual = function strictEqual(actual, expected, message) {
+ if (actual !== expected) {
+ fail(actual, expected, message, '===', assert.strictEqual);
+ }
+ };
+ assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
+ if (actual === expected) {
+ fail(actual, expected, message, '!==', assert.notStrictEqual);
+ }
+ };
+ function expectedException(actual, expected) {
+ if (!actual || !expected) {
+ return false;
+ }
+ if (Object.prototype.toString.call(expected) == '[object RegExp]') {
+ return expected.test(actual);
+ }
+ try {
+ if (actual instanceof expected) {
+ return true;
+ }
+ } catch (e) {}
+ if (Error.isPrototypeOf(expected)) {
+ return false;
+ }
+ return expected.call({}, actual) === true;
+ }
+ function _tryBlock(block) {
+ var error;
+ try {
+ block();
+ } catch (e) {
+ error = e;
+ }
+ return error;
+ }
+ function _throws(shouldThrow, block, expected, message) {
+ var actual;
+ if (typeof block !== 'function') {
+ throw new TypeError('"block" argument must be a function');
+ }
+ if (typeof expected === 'string') {
+ message = expected;
+ expected = null;
+ }
+ actual = _tryBlock(block);
+ message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + (message ? ' ' + message : '.');
+ if (shouldThrow && !actual) {
+ fail(actual, expected, 'Missing expected exception' + message);
+ }
+ var userProvidedMessage = typeof message === 'string';
+ var isUnwantedException = !shouldThrow && util.isError(actual);
+ var isUnexpectedException = !shouldThrow && actual && !expected;
+ if ((isUnwantedException && userProvidedMessage && expectedException(actual, expected)) || isUnexpectedException) {
+ fail(actual, expected, 'Got unwanted exception' + message);
+ }
+ if ((shouldThrow && actual && expected && !expectedException(actual, expected)) || (!shouldThrow && actual)) {
+ throw actual;
+ }
+ }
+ assert.throws = function(block, error, message) {
+ _throws(true, block, error, message);
+ };
+ assert.doesNotThrow = function(block, error, message) {
+ _throws(false, block, error, message);
+ };
+ assert.ifError = function(err) {
+ if (err)
+ throw err;
+ };
+ var objectKeys = Object.keys || function(obj) {
+ var keys = [];
+ for (var key in obj) {
+ if (hasOwn.call(obj, key))
+ keys.push(key);
+ }
+ return keys;
+ };
+})(require('buffer').Buffer);
diff --git a/jspm_packages/npm/assert@1.4.1/package.json b/jspm_packages/npm/assert@1.4.1/package.json
new file mode 100644
index 0000000..bc6a405
--- /dev/null
+++ b/jspm_packages/npm/assert@1.4.1/package.json
@@ -0,0 +1,30 @@
+{
+ "name": "assert",
+ "description": "commonjs assert - node.js api compatible",
+ "keywords": [
+ "assert"
+ ],
+ "version": "1.4.1",
+ "homepage": "https://github.com/defunctzombie/commonjs-assert",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/defunctzombie/commonjs-assert.git"
+ },
+ "main": "./assert.js",
+ "dependencies": {
+ "util": "0.10.3"
+ },
+ "devDependencies": {
+ "mocha": "~1.21.4",
+ "zuul": "~3.10.0",
+ "zuul-ngrok": "^4.0.0"
+ },
+ "license": "MIT",
+ "scripts": {
+ "test-node": "mocha --ui qunit test.js",
+ "test-browser": "zuul -- test.js",
+ "test": "npm run test-node && npm run test-browser",
+ "test-native": "TEST_NATIVE=true mocha --ui qunit test.js",
+ "browser-local": "zuul --no-coverage --local 8000 -- test.js"
+ }
+}
diff --git a/jspm_packages/npm/assert@1.4.1/test.js b/jspm_packages/npm/assert@1.4.1/test.js
new file mode 100644
index 0000000..9b0a15e
--- /dev/null
+++ b/jspm_packages/npm/assert@1.4.1/test.js
@@ -0,0 +1,275 @@
+/* */
+(function(Buffer, process) {
+ var nodeAssert = require('assert');
+ var ourAssert = require('./assert');
+ var keys = Object.keys;
+ if (process.env.TEST_NATIVE === true) {
+ tests(nodeAssert, 'node assert');
+ } else {
+ tests(ourAssert, 'our assert');
+ }
+ function makeBlock(f) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return function() {
+ return f.apply(this, args);
+ };
+ }
+ function tests(assert, what) {
+ test('assert.ok', function() {
+ assert.throws(makeBlock(assert, false), assert.AssertionError, 'ok(false)');
+ assert.doesNotThrow(makeBlock(assert, true), assert.AssertionError, 'ok(true)');
+ assert.doesNotThrow(makeBlock(assert, 'test', 'ok(\'test\')'));
+ assert.throws(makeBlock(assert.ok, false), assert.AssertionError, 'ok(false)');
+ assert.doesNotThrow(makeBlock(assert.ok, true), assert.AssertionError, 'ok(true)');
+ assert.doesNotThrow(makeBlock(assert.ok, 'test'), 'ok(\'test\')');
+ });
+ test('assert.equal', function() {
+ assert.throws(makeBlock(assert.equal, true, false), assert.AssertionError, 'equal');
+ assert.doesNotThrow(makeBlock(assert.equal, null, null), 'equal');
+ assert.doesNotThrow(makeBlock(assert.equal, undefined, undefined), 'equal');
+ assert.doesNotThrow(makeBlock(assert.equal, null, undefined), 'equal');
+ assert.doesNotThrow(makeBlock(assert.equal, true, true), 'equal');
+ assert.doesNotThrow(makeBlock(assert.equal, 2, '2'), 'equal');
+ assert.doesNotThrow(makeBlock(assert.notEqual, true, false), 'notEqual');
+ assert.throws(makeBlock(assert.notEqual, true, true), assert.AssertionError, 'notEqual');
+ });
+ test('assert.strictEqual', function() {
+ assert.throws(makeBlock(assert.strictEqual, 2, '2'), assert.AssertionError, 'strictEqual');
+ assert.throws(makeBlock(assert.strictEqual, null, undefined), assert.AssertionError, 'strictEqual');
+ assert.doesNotThrow(makeBlock(assert.notStrictEqual, 2, '2'), 'notStrictEqual');
+ });
+ test('assert.deepStrictEqual', function() {
+ assert.throws(makeBlock(assert.deepStrictEqual, [2], ['2']), assert.AssertionError, 'deepStrictEqual');
+ assert.throws(makeBlock(assert.deepStrictEqual, [null], [undefined]), assert.AssertionError, 'deepStrictEqual');
+ assert.doesNotThrow(makeBlock(assert.notDeepStrictEqual, [2], ['2']), 'notDeepStrictEqual');
+ });
+ test('assert.deepEqual - 7.2', function() {
+ assert.doesNotThrow(makeBlock(assert.deepEqual, new Date(2000, 3, 14), new Date(2000, 3, 14)), 'deepEqual date');
+ assert.throws(makeBlock(assert.deepEqual, new Date(), new Date(2000, 3, 14)), assert.AssertionError, 'deepEqual date');
+ });
+ test('assert.deepEqual - 7.3', function() {
+ assert.doesNotThrow(makeBlock(assert.deepEqual, /a/, /a/));
+ assert.doesNotThrow(makeBlock(assert.deepEqual, /a/g, /a/g));
+ assert.doesNotThrow(makeBlock(assert.deepEqual, /a/i, /a/i));
+ assert.doesNotThrow(makeBlock(assert.deepEqual, /a/m, /a/m));
+ assert.doesNotThrow(makeBlock(assert.deepEqual, /a/igm, /a/igm));
+ assert.throws(makeBlock(assert.deepEqual, /ab/, /a/));
+ assert.throws(makeBlock(assert.deepEqual, /a/g, /a/));
+ assert.throws(makeBlock(assert.deepEqual, /a/i, /a/));
+ assert.throws(makeBlock(assert.deepEqual, /a/m, /a/));
+ assert.throws(makeBlock(assert.deepEqual, /a/igm, /a/im));
+ var re1 = /a/;
+ re1.lastIndex = 3;
+ assert.throws(makeBlock(assert.deepEqual, re1, /a/));
+ });
+ test('assert.deepEqual - 7.4', function() {
+ assert.doesNotThrow(makeBlock(assert.deepEqual, 4, '4'), 'deepEqual == check');
+ assert.doesNotThrow(makeBlock(assert.deepEqual, true, 1), 'deepEqual == check');
+ assert.throws(makeBlock(assert.deepEqual, 4, '5'), assert.AssertionError, 'deepEqual == check');
+ });
+ test('assert.deepEqual - 7.5', function() {
+ assert.doesNotThrow(makeBlock(assert.deepEqual, {a: 4}, {a: 4}));
+ assert.doesNotThrow(makeBlock(assert.deepEqual, {
+ a: 4,
+ b: '2'
+ }, {
+ a: 4,
+ b: '2'
+ }));
+ assert.doesNotThrow(makeBlock(assert.deepEqual, [4], ['4']));
+ assert.throws(makeBlock(assert.deepEqual, {a: 4}, {
+ a: 4,
+ b: true
+ }), assert.AssertionError);
+ assert.doesNotThrow(makeBlock(assert.deepEqual, ['a'], {0: 'a'}));
+ assert.doesNotThrow(makeBlock(assert.deepEqual, {
+ a: 4,
+ b: '1'
+ }, {
+ b: '1',
+ a: 4
+ }));
+ var a1 = [1, 2, 3];
+ var a2 = [1, 2, 3];
+ a1.a = 'test';
+ a1.b = true;
+ a2.b = true;
+ a2.a = 'test';
+ assert.throws(makeBlock(assert.deepEqual, keys(a1), keys(a2)), assert.AssertionError);
+ assert.doesNotThrow(makeBlock(assert.deepEqual, a1, a2));
+ });
+ test('assert.deepEqual - ES6 primitives', function() {
+ assert.throws(makeBlock(assert.deepEqual, null, {}), assert.AssertionError);
+ assert.throws(makeBlock(assert.deepEqual, undefined, {}), assert.AssertionError);
+ assert.throws(makeBlock(assert.deepEqual, 'a', ['a']), assert.AssertionError);
+ assert.throws(makeBlock(assert.deepEqual, 'a', {0: 'a'}), assert.AssertionError);
+ assert.throws(makeBlock(assert.deepEqual, 1, {}), assert.AssertionError);
+ assert.throws(makeBlock(assert.deepEqual, true, {}), assert.AssertionError);
+ if (typeof Symbol === 'symbol') {
+ assert.throws(makeBlock(assert.deepEqual, Symbol(), {}), assert.AssertionError);
+ }
+ });
+ test('assert.deepEqual - object wrappers', function() {
+ assert.doesNotThrow(makeBlock(assert.deepEqual, new String('a'), ['a']));
+ assert.doesNotThrow(makeBlock(assert.deepEqual, new String('a'), {0: 'a'}));
+ assert.doesNotThrow(makeBlock(assert.deepEqual, new Number(1), {}));
+ assert.doesNotThrow(makeBlock(assert.deepEqual, new Boolean(true), {}));
+ });
+ test('assert.deepEqual - Buffers', function() {
+ assert.doesNotThrow(makeBlock(assert.deepEqual, new Buffer([1, 2, 3]), new Buffer([1, 2, 3])));
+ if (typeof global.Uint8Array === 'function') {
+ assert.throws(makeBlock(assert.deepEqual, new Buffer([1, 2, 3]), new Uint8Array([1, 2, 3])));
+ }
+ if (typeof global.Uint16Array === 'function') {
+ assert.doesNotThrow(makeBlock(assert.deepEqual, new Uint16Array([1, 2, 3]), new Uint16Array([1, 2, 3])));
+ }
+ });
+ function thrower(errorConstructor) {
+ throw new errorConstructor('test');
+ }
+ test('assert - Testing the throwing', function() {
+ var aethrow = makeBlock(thrower, assert.AssertionError);
+ aethrow = makeBlock(thrower, assert.AssertionError);
+ assert.throws(makeBlock(thrower, assert.AssertionError), assert.AssertionError, 'message');
+ assert.throws(makeBlock(thrower, assert.AssertionError), assert.AssertionError);
+ assert.throws(makeBlock(thrower, assert.AssertionError));
+ assert.throws(makeBlock(thrower, TypeError));
+ var threw = false;
+ try {
+ assert.throws(makeBlock(thrower, TypeError), assert.AssertionError);
+ } catch (e) {
+ threw = true;
+ assert.ok(e instanceof TypeError, 'type');
+ }
+ assert.equal(true, threw, 'a.throws with an explicit error is eating extra errors', assert.AssertionError);
+ threw = false;
+ try {
+ assert.doesNotThrow(makeBlock(thrower, TypeError), assert.AssertionError);
+ } catch (e) {
+ threw = true;
+ assert.ok(e instanceof TypeError);
+ }
+ assert.equal(true, threw, 'a.doesNotThrow with an explicit error is eating extra errors');
+ try {
+ assert.doesNotThrow(makeBlock(thrower, TypeError), TypeError);
+ } catch (e) {
+ threw = true;
+ assert.ok(e instanceof assert.AssertionError);
+ }
+ assert.equal(true, threw, 'a.doesNotThrow is not catching type matching errors');
+ });
+ test('assert.ifError', function() {
+ assert.throws(function() {
+ assert.ifError(new Error('test error'));
+ });
+ assert.doesNotThrow(function() {
+ assert.ifError(null);
+ });
+ assert.doesNotThrow(function() {
+ assert.ifError();
+ });
+ });
+ test('assert - make sure that validating using constructor really works', function() {
+ var threw = false;
+ try {
+ assert.throws(function() {
+ throw ({});
+ }, Array);
+ } catch (e) {
+ threw = true;
+ }
+ assert.ok(threw, 'wrong constructor validation');
+ });
+ test('assert - use a RegExp to validate error message', function() {
+ assert.throws(makeBlock(thrower, TypeError), /test/);
+ });
+ test('assert - se a fn to validate error object', function() {
+ assert.throws(makeBlock(thrower, TypeError), function(err) {
+ if ((err instanceof TypeError) && /test/.test(err)) {
+ return true;
+ }
+ });
+ });
+ test('assert - Make sure deepEqual doesn\'t loop forever on circular refs', function() {
+ var b = {};
+ b.b = b;
+ var c = {};
+ c.b = c;
+ var gotError = false;
+ var equal = true;
+ try {
+ equal = assert.deepEqual(b, c);
+ } catch (e) {
+ gotError = true;
+ }
+ assert.ok(gotError || !equal, gotError ? 'got error' : 'are equal');
+ });
+ test('assert - Ensure reflexivity of deepEqual with `arguments` objects', function() {
+ var args = (function() {
+ return arguments;
+ })();
+ assert.throws(makeBlock(assert.deepEqual, [], args), assert.AssertionError);
+ assert.throws(makeBlock(assert.deepEqual, args, []), assert.AssertionError);
+ });
+ test('assert - test assertion message', function() {
+ function testAssertionMessage(actual, expected) {
+ try {
+ assert.equal(actual, '');
+ } catch (e) {
+ assert.equal(e.toString(), ['AssertionError:', expected, '==', '\'\''].join(' '));
+ }
+ }
+ testAssertionMessage(undefined, 'undefined');
+ testAssertionMessage(null, 'null');
+ testAssertionMessage(true, 'true');
+ testAssertionMessage(false, 'false');
+ testAssertionMessage(0, '0');
+ testAssertionMessage(100, '100');
+ testAssertionMessage(NaN, 'NaN');
+ testAssertionMessage(Infinity, 'Infinity');
+ testAssertionMessage(-Infinity, '-Infinity');
+ testAssertionMessage('', '""');
+ testAssertionMessage('foo', '\'foo\'');
+ testAssertionMessage([], '[]');
+ testAssertionMessage([1, 2, 3], '[ 1, 2, 3 ]');
+ testAssertionMessage(new Buffer([1, 2, 3]), '');
+ if (typeof global.Uint8Array === 'function' && Object.getOwnPropertyNames(new Uint8Array([])).length === 0) {
+ testAssertionMessage(new Uint8Array([1, 2, 3]), '{ \'0\': 1, \'1\': 2, \'2\': 3 }');
+ }
+ testAssertionMessage(/a/, '/a/');
+ testAssertionMessage(function f() {}, '[Function: f]');
+ testAssertionMessage({}, '{}');
+ testAssertionMessage({
+ a: undefined,
+ b: null
+ }, '{ a: undefined, b: null }');
+ testAssertionMessage({
+ a: NaN,
+ b: Infinity,
+ c: -Infinity
+ }, '{ a: NaN, b: Infinity, c: -Infinity }');
+ });
+ test('assert - regressions from node.js testcase', function() {
+ var threw = false;
+ try {
+ assert.throws(function() {
+ assert.ifError(null);
+ });
+ } catch (e) {
+ threw = true;
+ assert.equal(e.message, 'Missing expected exception..');
+ }
+ assert.ok(threw);
+ try {
+ assert.equal(1, 2);
+ } catch (e) {
+ assert.equal(e.toString().split('\n')[0], 'AssertionError: 1 == 2');
+ }
+ try {
+ assert.equal(1, 2, 'oh no');
+ } catch (e) {
+ assert.equal(e.toString().split('\n')[0], 'AssertionError: oh no');
+ }
+ });
+ }
+})(require('buffer').Buffer, require('process'));
diff --git a/jspm_packages/npm/babel-core@5.8.38.js b/jspm_packages/npm/babel-core@5.8.38.js
new file mode 100644
index 0000000..2e013d0
--- /dev/null
+++ b/jspm_packages/npm/babel-core@5.8.38.js
@@ -0,0 +1 @@
+module.exports = require("npm:babel-core@5.8.38/browser.js");
\ No newline at end of file
diff --git a/jspm_packages/npm/babel-core@5.8.38/.jspm-hash b/jspm_packages/npm/babel-core@5.8.38/.jspm-hash
new file mode 100644
index 0000000..8cedbd5
--- /dev/null
+++ b/jspm_packages/npm/babel-core@5.8.38/.jspm-hash
@@ -0,0 +1 @@
+1fcaee79d7e61b750b00b8e54f6dfc9d0af865582615f3cffc60555b3aeaacf1dd14b06ejspm-npm@0.260.16.1
\ No newline at end of file
diff --git a/jspm_packages/npm/babel-core@5.8.38/browser-polyfill.js b/jspm_packages/npm/babel-core@5.8.38/browser-polyfill.js
new file mode 100644
index 0000000..99919b6
--- /dev/null
+++ b/jspm_packages/npm/babel-core@5.8.38/browser-polyfill.js
@@ -0,0 +1,4414 @@
+/* */
+"format cjs";
+(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 2 ? $$[2] : undefined
+ , count = Math.min((end === undefined ? len : toIndex(end, len)) - from, len - to)
+ , inc = 1;
+ if(from < to && to < from + count){
+ inc = -1;
+ from += count - 1;
+ to += count - 1;
+ }
+ while(count-- > 0){
+ if(from in O)O[to] = O[from];
+ else delete O[to];
+ to += inc;
+ from += inc;
+ } return O;
+};
+},{"76":76,"79":79,"80":80}],6:[function(_dereq_,module,exports){
+// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)
+'use strict';
+var toObject = _dereq_(80)
+ , toIndex = _dereq_(76)
+ , toLength = _dereq_(79);
+module.exports = [].fill || function fill(value /*, start = 0, end = @length */){
+ var O = toObject(this)
+ , length = toLength(O.length)
+ , $$ = arguments
+ , $$len = $$.length
+ , index = toIndex($$len > 1 ? $$[1] : undefined, length)
+ , end = $$len > 2 ? $$[2] : undefined
+ , endPos = end === undefined ? length : toIndex(end, length);
+ while(endPos > index)O[index++] = value;
+ return O;
+};
+},{"76":76,"79":79,"80":80}],7:[function(_dereq_,module,exports){
+// false -> Array#indexOf
+// true -> Array#includes
+var toIObject = _dereq_(78)
+ , toLength = _dereq_(79)
+ , toIndex = _dereq_(76);
+module.exports = function(IS_INCLUDES){
+ return function($this, el, fromIndex){
+ var O = toIObject($this)
+ , length = toLength(O.length)
+ , index = toIndex(fromIndex, length)
+ , value;
+ // Array#includes uses SameValueZero equality algorithm
+ if(IS_INCLUDES && el != el)while(length > index){
+ value = O[index++];
+ if(value != value)return true;
+ // Array#toIndex ignores holes, Array#includes - not
+ } else for(;length > index; index++)if(IS_INCLUDES || index in O){
+ if(O[index] === el)return IS_INCLUDES || index;
+ } return !IS_INCLUDES && -1;
+ };
+};
+},{"76":76,"78":78,"79":79}],8:[function(_dereq_,module,exports){
+// 0 -> Array#forEach
+// 1 -> Array#map
+// 2 -> Array#filter
+// 3 -> Array#some
+// 4 -> Array#every
+// 5 -> Array#find
+// 6 -> Array#findIndex
+var ctx = _dereq_(17)
+ , IObject = _dereq_(34)
+ , toObject = _dereq_(80)
+ , toLength = _dereq_(79)
+ , asc = _dereq_(9);
+module.exports = function(TYPE){
+ var IS_MAP = TYPE == 1
+ , IS_FILTER = TYPE == 2
+ , IS_SOME = TYPE == 3
+ , IS_EVERY = TYPE == 4
+ , IS_FIND_INDEX = TYPE == 6
+ , NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
+ return function($this, callbackfn, that){
+ var O = toObject($this)
+ , self = IObject(O)
+ , f = ctx(callbackfn, that, 3)
+ , length = toLength(self.length)
+ , index = 0
+ , result = IS_MAP ? asc($this, length) : IS_FILTER ? asc($this, 0) : undefined
+ , val, res;
+ for(;length > index; index++)if(NO_HOLES || index in self){
+ val = self[index];
+ res = f(val, index, O);
+ if(TYPE){
+ if(IS_MAP)result[index] = res; // map
+ else if(res)switch(TYPE){
+ case 3: return true; // some
+ case 5: return val; // find
+ case 6: return index; // findIndex
+ case 2: result.push(val); // filter
+ } else if(IS_EVERY)return false; // every
+ }
+ }
+ return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;
+ };
+};
+},{"17":17,"34":34,"79":79,"80":80,"9":9}],9:[function(_dereq_,module,exports){
+// 9.4.2.3 ArraySpeciesCreate(originalArray, length)
+var isObject = _dereq_(38)
+ , isArray = _dereq_(36)
+ , SPECIES = _dereq_(83)('species');
+module.exports = function(original, length){
+ var C;
+ if(isArray(original)){
+ C = original.constructor;
+ // cross-realm fallback
+ if(typeof C == 'function' && (C === Array || isArray(C.prototype)))C = undefined;
+ if(isObject(C)){
+ C = C[SPECIES];
+ if(C === null)C = undefined;
+ }
+ } return new (C === undefined ? Array : C)(length);
+};
+},{"36":36,"38":38,"83":83}],10:[function(_dereq_,module,exports){
+// getting tag from 19.1.3.6 Object.prototype.toString()
+var cof = _dereq_(11)
+ , TAG = _dereq_(83)('toStringTag')
+ // ES3 wrong here
+ , ARG = cof(function(){ return arguments; }()) == 'Arguments';
+
+module.exports = function(it){
+ var O, T, B;
+ return it === undefined ? 'Undefined' : it === null ? 'Null'
+ // @@toStringTag case
+ : typeof (T = (O = Object(it))[TAG]) == 'string' ? T
+ // builtinTag case
+ : ARG ? cof(O)
+ // ES3 arguments fallback
+ : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
+};
+},{"11":11,"83":83}],11:[function(_dereq_,module,exports){
+var toString = {}.toString;
+
+module.exports = function(it){
+ return toString.call(it).slice(8, -1);
+};
+},{}],12:[function(_dereq_,module,exports){
+'use strict';
+var $ = _dereq_(46)
+ , hide = _dereq_(31)
+ , redefineAll = _dereq_(60)
+ , ctx = _dereq_(17)
+ , strictNew = _dereq_(69)
+ , defined = _dereq_(18)
+ , forOf = _dereq_(27)
+ , $iterDefine = _dereq_(42)
+ , step = _dereq_(44)
+ , ID = _dereq_(82)('id')
+ , $has = _dereq_(30)
+ , isObject = _dereq_(38)
+ , setSpecies = _dereq_(65)
+ , DESCRIPTORS = _dereq_(19)
+ , isExtensible = Object.isExtensible || isObject
+ , SIZE = DESCRIPTORS ? '_s' : 'size'
+ , id = 0;
+
+var fastKey = function(it, create){
+ // return primitive with prefix
+ if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
+ if(!$has(it, ID)){
+ // can't set id to frozen object
+ if(!isExtensible(it))return 'F';
+ // not necessary to add id
+ if(!create)return 'E';
+ // add missing object id
+ hide(it, ID, ++id);
+ // return object id with prefix
+ } return 'O' + it[ID];
+};
+
+var getEntry = function(that, key){
+ // fast case
+ var index = fastKey(key), entry;
+ if(index !== 'F')return that._i[index];
+ // frozen object case
+ for(entry = that._f; entry; entry = entry.n){
+ if(entry.k == key)return entry;
+ }
+};
+
+module.exports = {
+ getConstructor: function(wrapper, NAME, IS_MAP, ADDER){
+ var C = wrapper(function(that, iterable){
+ strictNew(that, C, NAME);
+ that._i = $.create(null); // index
+ that._f = undefined; // first entry
+ that._l = undefined; // last entry
+ that[SIZE] = 0; // size
+ if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);
+ });
+ redefineAll(C.prototype, {
+ // 23.1.3.1 Map.prototype.clear()
+ // 23.2.3.2 Set.prototype.clear()
+ clear: function clear(){
+ for(var that = this, data = that._i, entry = that._f; entry; entry = entry.n){
+ entry.r = true;
+ if(entry.p)entry.p = entry.p.n = undefined;
+ delete data[entry.i];
+ }
+ that._f = that._l = undefined;
+ that[SIZE] = 0;
+ },
+ // 23.1.3.3 Map.prototype.delete(key)
+ // 23.2.3.4 Set.prototype.delete(value)
+ 'delete': function(key){
+ var that = this
+ , entry = getEntry(that, key);
+ if(entry){
+ var next = entry.n
+ , prev = entry.p;
+ delete that._i[entry.i];
+ entry.r = true;
+ if(prev)prev.n = next;
+ if(next)next.p = prev;
+ if(that._f == entry)that._f = next;
+ if(that._l == entry)that._l = prev;
+ that[SIZE]--;
+ } return !!entry;
+ },
+ // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)
+ // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)
+ forEach: function forEach(callbackfn /*, that = undefined */){
+ var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3)
+ , entry;
+ while(entry = entry ? entry.n : this._f){
+ f(entry.v, entry.k, this);
+ // revert to the last existing entry
+ while(entry && entry.r)entry = entry.p;
+ }
+ },
+ // 23.1.3.7 Map.prototype.has(key)
+ // 23.2.3.7 Set.prototype.has(value)
+ has: function has(key){
+ return !!getEntry(this, key);
+ }
+ });
+ if(DESCRIPTORS)$.setDesc(C.prototype, 'size', {
+ get: function(){
+ return defined(this[SIZE]);
+ }
+ });
+ return C;
+ },
+ def: function(that, key, value){
+ var entry = getEntry(that, key)
+ , prev, index;
+ // change existing entry
+ if(entry){
+ entry.v = value;
+ // create new entry
+ } else {
+ that._l = entry = {
+ i: index = fastKey(key, true), // <- index
+ k: key, // <- key
+ v: value, // <- value
+ p: prev = that._l, // <- previous entry
+ n: undefined, // <- next entry
+ r: false // <- removed
+ };
+ if(!that._f)that._f = entry;
+ if(prev)prev.n = entry;
+ that[SIZE]++;
+ // add to index
+ if(index !== 'F')that._i[index] = entry;
+ } return that;
+ },
+ getEntry: getEntry,
+ setStrong: function(C, NAME, IS_MAP){
+ // add .keys, .values, .entries, [@@iterator]
+ // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11
+ $iterDefine(C, NAME, function(iterated, kind){
+ this._t = iterated; // target
+ this._k = kind; // kind
+ this._l = undefined; // previous
+ }, function(){
+ var that = this
+ , kind = that._k
+ , entry = that._l;
+ // revert to the last existing entry
+ while(entry && entry.r)entry = entry.p;
+ // get next entry
+ if(!that._t || !(that._l = entry = entry ? entry.n : that._t._f)){
+ // or finish the iteration
+ that._t = undefined;
+ return step(1);
+ }
+ // return step by kind
+ if(kind == 'keys' )return step(0, entry.k);
+ if(kind == 'values')return step(0, entry.v);
+ return step(0, [entry.k, entry.v]);
+ }, IS_MAP ? 'entries' : 'values' , !IS_MAP, true);
+
+ // add [@@species], 23.1.2.2, 23.2.2.2
+ setSpecies(NAME);
+ }
+};
+},{"17":17,"18":18,"19":19,"27":27,"30":30,"31":31,"38":38,"42":42,"44":44,"46":46,"60":60,"65":65,"69":69,"82":82}],13:[function(_dereq_,module,exports){
+// https://github.com/DavidBruant/Map-Set.prototype.toJSON
+var forOf = _dereq_(27)
+ , classof = _dereq_(10);
+module.exports = function(NAME){
+ return function toJSON(){
+ if(classof(this) != NAME)throw TypeError(NAME + "#toJSON isn't generic");
+ var arr = [];
+ forOf(this, false, arr.push, arr);
+ return arr;
+ };
+};
+},{"10":10,"27":27}],14:[function(_dereq_,module,exports){
+'use strict';
+var hide = _dereq_(31)
+ , redefineAll = _dereq_(60)
+ , anObject = _dereq_(4)
+ , isObject = _dereq_(38)
+ , strictNew = _dereq_(69)
+ , forOf = _dereq_(27)
+ , createArrayMethod = _dereq_(8)
+ , $has = _dereq_(30)
+ , WEAK = _dereq_(82)('weak')
+ , isExtensible = Object.isExtensible || isObject
+ , arrayFind = createArrayMethod(5)
+ , arrayFindIndex = createArrayMethod(6)
+ , id = 0;
+
+// fallback for frozen keys
+var frozenStore = function(that){
+ return that._l || (that._l = new FrozenStore);
+};
+var FrozenStore = function(){
+ this.a = [];
+};
+var findFrozen = function(store, key){
+ return arrayFind(store.a, function(it){
+ return it[0] === key;
+ });
+};
+FrozenStore.prototype = {
+ get: function(key){
+ var entry = findFrozen(this, key);
+ if(entry)return entry[1];
+ },
+ has: function(key){
+ return !!findFrozen(this, key);
+ },
+ set: function(key, value){
+ var entry = findFrozen(this, key);
+ if(entry)entry[1] = value;
+ else this.a.push([key, value]);
+ },
+ 'delete': function(key){
+ var index = arrayFindIndex(this.a, function(it){
+ return it[0] === key;
+ });
+ if(~index)this.a.splice(index, 1);
+ return !!~index;
+ }
+};
+
+module.exports = {
+ getConstructor: function(wrapper, NAME, IS_MAP, ADDER){
+ var C = wrapper(function(that, iterable){
+ strictNew(that, C, NAME);
+ that._i = id++; // collection id
+ that._l = undefined; // leak store for frozen objects
+ if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);
+ });
+ redefineAll(C.prototype, {
+ // 23.3.3.2 WeakMap.prototype.delete(key)
+ // 23.4.3.3 WeakSet.prototype.delete(value)
+ 'delete': function(key){
+ if(!isObject(key))return false;
+ if(!isExtensible(key))return frozenStore(this)['delete'](key);
+ return $has(key, WEAK) && $has(key[WEAK], this._i) && delete key[WEAK][this._i];
+ },
+ // 23.3.3.4 WeakMap.prototype.has(key)
+ // 23.4.3.4 WeakSet.prototype.has(value)
+ has: function has(key){
+ if(!isObject(key))return false;
+ if(!isExtensible(key))return frozenStore(this).has(key);
+ return $has(key, WEAK) && $has(key[WEAK], this._i);
+ }
+ });
+ return C;
+ },
+ def: function(that, key, value){
+ if(!isExtensible(anObject(key))){
+ frozenStore(that).set(key, value);
+ } else {
+ $has(key, WEAK) || hide(key, WEAK, {});
+ key[WEAK][that._i] = value;
+ } return that;
+ },
+ frozenStore: frozenStore,
+ WEAK: WEAK
+};
+},{"27":27,"30":30,"31":31,"38":38,"4":4,"60":60,"69":69,"8":8,"82":82}],15:[function(_dereq_,module,exports){
+'use strict';
+var global = _dereq_(29)
+ , $export = _dereq_(22)
+ , redefine = _dereq_(61)
+ , redefineAll = _dereq_(60)
+ , forOf = _dereq_(27)
+ , strictNew = _dereq_(69)
+ , isObject = _dereq_(38)
+ , fails = _dereq_(24)
+ , $iterDetect = _dereq_(43)
+ , setToStringTag = _dereq_(66);
+
+module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){
+ var Base = global[NAME]
+ , C = Base
+ , ADDER = IS_MAP ? 'set' : 'add'
+ , proto = C && C.prototype
+ , O = {};
+ var fixMethod = function(KEY){
+ var fn = proto[KEY];
+ redefine(proto, KEY,
+ KEY == 'delete' ? function(a){
+ return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
+ } : KEY == 'has' ? function has(a){
+ return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
+ } : KEY == 'get' ? function get(a){
+ return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);
+ } : KEY == 'add' ? function add(a){ fn.call(this, a === 0 ? 0 : a); return this; }
+ : function set(a, b){ fn.call(this, a === 0 ? 0 : a, b); return this; }
+ );
+ };
+ if(typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function(){
+ new C().entries().next();
+ }))){
+ // create collection constructor
+ C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);
+ redefineAll(C.prototype, methods);
+ } else {
+ var instance = new C
+ // early implementations not supports chaining
+ , HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance
+ // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false
+ , THROWS_ON_PRIMITIVES = fails(function(){ instance.has(1); })
+ // most early implementations doesn't supports iterables, most modern - not close it correctly
+ , ACCEPT_ITERABLES = $iterDetect(function(iter){ new C(iter); }) // eslint-disable-line no-new
+ // for early implementations -0 and +0 not the same
+ , BUGGY_ZERO;
+ if(!ACCEPT_ITERABLES){
+ C = wrapper(function(target, iterable){
+ strictNew(target, C, NAME);
+ var that = new Base;
+ if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);
+ return that;
+ });
+ C.prototype = proto;
+ proto.constructor = C;
+ }
+ IS_WEAK || instance.forEach(function(val, key){
+ BUGGY_ZERO = 1 / key === -Infinity;
+ });
+ if(THROWS_ON_PRIMITIVES || BUGGY_ZERO){
+ fixMethod('delete');
+ fixMethod('has');
+ IS_MAP && fixMethod('get');
+ }
+ if(BUGGY_ZERO || HASNT_CHAINING)fixMethod(ADDER);
+ // weak collections should not contains .clear method
+ if(IS_WEAK && proto.clear)delete proto.clear;
+ }
+
+ setToStringTag(C, NAME);
+
+ O[NAME] = C;
+ $export($export.G + $export.W + $export.F * (C != Base), O);
+
+ if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP);
+
+ return C;
+};
+},{"22":22,"24":24,"27":27,"29":29,"38":38,"43":43,"60":60,"61":61,"66":66,"69":69}],16:[function(_dereq_,module,exports){
+var core = module.exports = {version: '1.2.6'};
+if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
+},{}],17:[function(_dereq_,module,exports){
+// optional / simple context binding
+var aFunction = _dereq_(2);
+module.exports = function(fn, that, length){
+ aFunction(fn);
+ if(that === undefined)return fn;
+ switch(length){
+ case 1: return function(a){
+ return fn.call(that, a);
+ };
+ case 2: return function(a, b){
+ return fn.call(that, a, b);
+ };
+ case 3: return function(a, b, c){
+ return fn.call(that, a, b, c);
+ };
+ }
+ return function(/* ...args */){
+ return fn.apply(that, arguments);
+ };
+};
+},{"2":2}],18:[function(_dereq_,module,exports){
+// 7.2.1 RequireObjectCoercible(argument)
+module.exports = function(it){
+ if(it == undefined)throw TypeError("Can't call method on " + it);
+ return it;
+};
+},{}],19:[function(_dereq_,module,exports){
+// Thank's IE8 for his funny defineProperty
+module.exports = !_dereq_(24)(function(){
+ return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
+});
+},{"24":24}],20:[function(_dereq_,module,exports){
+var isObject = _dereq_(38)
+ , document = _dereq_(29).document
+ // in old IE typeof document.createElement is 'object'
+ , is = isObject(document) && isObject(document.createElement);
+module.exports = function(it){
+ return is ? document.createElement(it) : {};
+};
+},{"29":29,"38":38}],21:[function(_dereq_,module,exports){
+// all enumerable object keys, includes symbols
+var $ = _dereq_(46);
+module.exports = function(it){
+ var keys = $.getKeys(it)
+ , getSymbols = $.getSymbols;
+ if(getSymbols){
+ var symbols = getSymbols(it)
+ , isEnum = $.isEnum
+ , i = 0
+ , key;
+ while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))keys.push(key);
+ }
+ return keys;
+};
+},{"46":46}],22:[function(_dereq_,module,exports){
+var global = _dereq_(29)
+ , core = _dereq_(16)
+ , hide = _dereq_(31)
+ , redefine = _dereq_(61)
+ , ctx = _dereq_(17)
+ , PROTOTYPE = 'prototype';
+
+var $export = function(type, name, source){
+ var IS_FORCED = type & $export.F
+ , IS_GLOBAL = type & $export.G
+ , IS_STATIC = type & $export.S
+ , IS_PROTO = type & $export.P
+ , IS_BIND = type & $export.B
+ , target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]
+ , exports = IS_GLOBAL ? core : core[name] || (core[name] = {})
+ , expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {})
+ , key, own, out, exp;
+ if(IS_GLOBAL)source = name;
+ for(key in source){
+ // contains in native
+ own = !IS_FORCED && target && key in target;
+ // export native or passed
+ out = (own ? target : source)[key];
+ // bind timers to global for call from export context
+ exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
+ // extend global
+ if(target && !own)redefine(target, key, out);
+ // export
+ if(exports[key] != out)hide(exports, key, exp);
+ if(IS_PROTO && expProto[key] != out)expProto[key] = out;
+ }
+};
+global.core = core;
+// type bitmap
+$export.F = 1; // forced
+$export.G = 2; // global
+$export.S = 4; // static
+$export.P = 8; // proto
+$export.B = 16; // bind
+$export.W = 32; // wrap
+module.exports = $export;
+},{"16":16,"17":17,"29":29,"31":31,"61":61}],23:[function(_dereq_,module,exports){
+var MATCH = _dereq_(83)('match');
+module.exports = function(KEY){
+ var re = /./;
+ try {
+ '/./'[KEY](re);
+ } catch(e){
+ try {
+ re[MATCH] = false;
+ return !'/./'[KEY](re);
+ } catch(f){ /* empty */ }
+ } return true;
+};
+},{"83":83}],24:[function(_dereq_,module,exports){
+module.exports = function(exec){
+ try {
+ return !!exec();
+ } catch(e){
+ return true;
+ }
+};
+},{}],25:[function(_dereq_,module,exports){
+'use strict';
+var hide = _dereq_(31)
+ , redefine = _dereq_(61)
+ , fails = _dereq_(24)
+ , defined = _dereq_(18)
+ , wks = _dereq_(83);
+
+module.exports = function(KEY, length, exec){
+ var SYMBOL = wks(KEY)
+ , original = ''[KEY];
+ if(fails(function(){
+ var O = {};
+ O[SYMBOL] = function(){ return 7; };
+ return ''[KEY](O) != 7;
+ })){
+ redefine(String.prototype, KEY, exec(defined, SYMBOL, original));
+ hide(RegExp.prototype, SYMBOL, length == 2
+ // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)
+ // 21.2.5.11 RegExp.prototype[@@split](string, limit)
+ ? function(string, arg){ return original.call(string, this, arg); }
+ // 21.2.5.6 RegExp.prototype[@@match](string)
+ // 21.2.5.9 RegExp.prototype[@@search](string)
+ : function(string){ return original.call(string, this); }
+ );
+ }
+};
+},{"18":18,"24":24,"31":31,"61":61,"83":83}],26:[function(_dereq_,module,exports){
+'use strict';
+// 21.2.5.3 get RegExp.prototype.flags
+var anObject = _dereq_(4);
+module.exports = function(){
+ var that = anObject(this)
+ , result = '';
+ if(that.global) result += 'g';
+ if(that.ignoreCase) result += 'i';
+ if(that.multiline) result += 'm';
+ if(that.unicode) result += 'u';
+ if(that.sticky) result += 'y';
+ return result;
+};
+},{"4":4}],27:[function(_dereq_,module,exports){
+var ctx = _dereq_(17)
+ , call = _dereq_(40)
+ , isArrayIter = _dereq_(35)
+ , anObject = _dereq_(4)
+ , toLength = _dereq_(79)
+ , getIterFn = _dereq_(84);
+module.exports = function(iterable, entries, fn, that){
+ var iterFn = getIterFn(iterable)
+ , f = ctx(fn, that, entries ? 2 : 1)
+ , index = 0
+ , length, step, iterator;
+ if(typeof iterFn != 'function')throw TypeError(iterable + ' is not iterable!');
+ // fast case for arrays with default iterator
+ if(isArrayIter(iterFn))for(length = toLength(iterable.length); length > index; index++){
+ entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
+ } else for(iterator = iterFn.call(iterable); !(step = iterator.next()).done; ){
+ call(iterator, f, step.value, entries);
+ }
+};
+},{"17":17,"35":35,"4":4,"40":40,"79":79,"84":84}],28:[function(_dereq_,module,exports){
+// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
+var toIObject = _dereq_(78)
+ , getNames = _dereq_(46).getNames
+ , toString = {}.toString;
+
+var windowNames = typeof window == 'object' && Object.getOwnPropertyNames
+ ? Object.getOwnPropertyNames(window) : [];
+
+var getWindowNames = function(it){
+ try {
+ return getNames(it);
+ } catch(e){
+ return windowNames.slice();
+ }
+};
+
+module.exports.get = function getOwnPropertyNames(it){
+ if(windowNames && toString.call(it) == '[object Window]')return getWindowNames(it);
+ return getNames(toIObject(it));
+};
+},{"46":46,"78":78}],29:[function(_dereq_,module,exports){
+// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+var global = module.exports = typeof window != 'undefined' && window.Math == Math
+ ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
+if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
+},{}],30:[function(_dereq_,module,exports){
+var hasOwnProperty = {}.hasOwnProperty;
+module.exports = function(it, key){
+ return hasOwnProperty.call(it, key);
+};
+},{}],31:[function(_dereq_,module,exports){
+var $ = _dereq_(46)
+ , createDesc = _dereq_(59);
+module.exports = _dereq_(19) ? function(object, key, value){
+ return $.setDesc(object, key, createDesc(1, value));
+} : function(object, key, value){
+ object[key] = value;
+ return object;
+};
+},{"19":19,"46":46,"59":59}],32:[function(_dereq_,module,exports){
+module.exports = _dereq_(29).document && document.documentElement;
+},{"29":29}],33:[function(_dereq_,module,exports){
+// fast apply, http://jsperf.lnkit.com/fast-apply/5
+module.exports = function(fn, args, that){
+ var un = that === undefined;
+ switch(args.length){
+ case 0: return un ? fn()
+ : fn.call(that);
+ case 1: return un ? fn(args[0])
+ : fn.call(that, args[0]);
+ case 2: return un ? fn(args[0], args[1])
+ : fn.call(that, args[0], args[1]);
+ case 3: return un ? fn(args[0], args[1], args[2])
+ : fn.call(that, args[0], args[1], args[2]);
+ case 4: return un ? fn(args[0], args[1], args[2], args[3])
+ : fn.call(that, args[0], args[1], args[2], args[3]);
+ } return fn.apply(that, args);
+};
+},{}],34:[function(_dereq_,module,exports){
+// fallback for non-array-like ES3 and non-enumerable old V8 strings
+var cof = _dereq_(11);
+module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){
+ return cof(it) == 'String' ? it.split('') : Object(it);
+};
+},{"11":11}],35:[function(_dereq_,module,exports){
+// check on default Array iterator
+var Iterators = _dereq_(45)
+ , ITERATOR = _dereq_(83)('iterator')
+ , ArrayProto = Array.prototype;
+
+module.exports = function(it){
+ return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
+};
+},{"45":45,"83":83}],36:[function(_dereq_,module,exports){
+// 7.2.2 IsArray(argument)
+var cof = _dereq_(11);
+module.exports = Array.isArray || function(arg){
+ return cof(arg) == 'Array';
+};
+},{"11":11}],37:[function(_dereq_,module,exports){
+// 20.1.2.3 Number.isInteger(number)
+var isObject = _dereq_(38)
+ , floor = Math.floor;
+module.exports = function isInteger(it){
+ return !isObject(it) && isFinite(it) && floor(it) === it;
+};
+},{"38":38}],38:[function(_dereq_,module,exports){
+module.exports = function(it){
+ return typeof it === 'object' ? it !== null : typeof it === 'function';
+};
+},{}],39:[function(_dereq_,module,exports){
+// 7.2.8 IsRegExp(argument)
+var isObject = _dereq_(38)
+ , cof = _dereq_(11)
+ , MATCH = _dereq_(83)('match');
+module.exports = function(it){
+ var isRegExp;
+ return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');
+};
+},{"11":11,"38":38,"83":83}],40:[function(_dereq_,module,exports){
+// call something on iterator step with safe closing on error
+var anObject = _dereq_(4);
+module.exports = function(iterator, fn, value, entries){
+ try {
+ return entries ? fn(anObject(value)[0], value[1]) : fn(value);
+ // 7.4.6 IteratorClose(iterator, completion)
+ } catch(e){
+ var ret = iterator['return'];
+ if(ret !== undefined)anObject(ret.call(iterator));
+ throw e;
+ }
+};
+},{"4":4}],41:[function(_dereq_,module,exports){
+'use strict';
+var $ = _dereq_(46)
+ , descriptor = _dereq_(59)
+ , setToStringTag = _dereq_(66)
+ , IteratorPrototype = {};
+
+// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
+_dereq_(31)(IteratorPrototype, _dereq_(83)('iterator'), function(){ return this; });
+
+module.exports = function(Constructor, NAME, next){
+ Constructor.prototype = $.create(IteratorPrototype, {next: descriptor(1, next)});
+ setToStringTag(Constructor, NAME + ' Iterator');
+};
+},{"31":31,"46":46,"59":59,"66":66,"83":83}],42:[function(_dereq_,module,exports){
+'use strict';
+var LIBRARY = _dereq_(48)
+ , $export = _dereq_(22)
+ , redefine = _dereq_(61)
+ , hide = _dereq_(31)
+ , has = _dereq_(30)
+ , Iterators = _dereq_(45)
+ , $iterCreate = _dereq_(41)
+ , setToStringTag = _dereq_(66)
+ , getProto = _dereq_(46).getProto
+ , ITERATOR = _dereq_(83)('iterator')
+ , BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`
+ , FF_ITERATOR = '@@iterator'
+ , KEYS = 'keys'
+ , VALUES = 'values';
+
+var returnThis = function(){ return this; };
+
+module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){
+ $iterCreate(Constructor, NAME, next);
+ var getMethod = function(kind){
+ if(!BUGGY && kind in proto)return proto[kind];
+ switch(kind){
+ case KEYS: return function keys(){ return new Constructor(this, kind); };
+ case VALUES: return function values(){ return new Constructor(this, kind); };
+ } return function entries(){ return new Constructor(this, kind); };
+ };
+ var TAG = NAME + ' Iterator'
+ , DEF_VALUES = DEFAULT == VALUES
+ , VALUES_BUG = false
+ , proto = Base.prototype
+ , $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]
+ , $default = $native || getMethod(DEFAULT)
+ , methods, key;
+ // Fix native
+ if($native){
+ var IteratorPrototype = getProto($default.call(new Base));
+ // Set @@toStringTag to native iterators
+ setToStringTag(IteratorPrototype, TAG, true);
+ // FF fix
+ if(!LIBRARY && has(proto, FF_ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);
+ // fix Array#{values, @@iterator}.name in V8 / FF
+ if(DEF_VALUES && $native.name !== VALUES){
+ VALUES_BUG = true;
+ $default = function values(){ return $native.call(this); };
+ }
+ }
+ // Define iterator
+ if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){
+ hide(proto, ITERATOR, $default);
+ }
+ // Plug for library
+ Iterators[NAME] = $default;
+ Iterators[TAG] = returnThis;
+ if(DEFAULT){
+ methods = {
+ values: DEF_VALUES ? $default : getMethod(VALUES),
+ keys: IS_SET ? $default : getMethod(KEYS),
+ entries: !DEF_VALUES ? $default : getMethod('entries')
+ };
+ if(FORCED)for(key in methods){
+ if(!(key in proto))redefine(proto, key, methods[key]);
+ } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
+ }
+ return methods;
+};
+},{"22":22,"30":30,"31":31,"41":41,"45":45,"46":46,"48":48,"61":61,"66":66,"83":83}],43:[function(_dereq_,module,exports){
+var ITERATOR = _dereq_(83)('iterator')
+ , SAFE_CLOSING = false;
+
+try {
+ var riter = [7][ITERATOR]();
+ riter['return'] = function(){ SAFE_CLOSING = true; };
+ Array.from(riter, function(){ throw 2; });
+} catch(e){ /* empty */ }
+
+module.exports = function(exec, skipClosing){
+ if(!skipClosing && !SAFE_CLOSING)return false;
+ var safe = false;
+ try {
+ var arr = [7]
+ , iter = arr[ITERATOR]();
+ iter.next = function(){ safe = true; };
+ arr[ITERATOR] = function(){ return iter; };
+ exec(arr);
+ } catch(e){ /* empty */ }
+ return safe;
+};
+},{"83":83}],44:[function(_dereq_,module,exports){
+module.exports = function(done, value){
+ return {value: value, done: !!done};
+};
+},{}],45:[function(_dereq_,module,exports){
+module.exports = {};
+},{}],46:[function(_dereq_,module,exports){
+var $Object = Object;
+module.exports = {
+ create: $Object.create,
+ getProto: $Object.getPrototypeOf,
+ isEnum: {}.propertyIsEnumerable,
+ getDesc: $Object.getOwnPropertyDescriptor,
+ setDesc: $Object.defineProperty,
+ setDescs: $Object.defineProperties,
+ getKeys: $Object.keys,
+ getNames: $Object.getOwnPropertyNames,
+ getSymbols: $Object.getOwnPropertySymbols,
+ each: [].forEach
+};
+},{}],47:[function(_dereq_,module,exports){
+var $ = _dereq_(46)
+ , toIObject = _dereq_(78);
+module.exports = function(object, el){
+ var O = toIObject(object)
+ , keys = $.getKeys(O)
+ , length = keys.length
+ , index = 0
+ , key;
+ while(length > index)if(O[key = keys[index++]] === el)return key;
+};
+},{"46":46,"78":78}],48:[function(_dereq_,module,exports){
+module.exports = false;
+},{}],49:[function(_dereq_,module,exports){
+// 20.2.2.14 Math.expm1(x)
+module.exports = Math.expm1 || function expm1(x){
+ return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;
+};
+},{}],50:[function(_dereq_,module,exports){
+// 20.2.2.20 Math.log1p(x)
+module.exports = Math.log1p || function log1p(x){
+ return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);
+};
+},{}],51:[function(_dereq_,module,exports){
+// 20.2.2.28 Math.sign(x)
+module.exports = Math.sign || function sign(x){
+ return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;
+};
+},{}],52:[function(_dereq_,module,exports){
+var global = _dereq_(29)
+ , macrotask = _dereq_(75).set
+ , Observer = global.MutationObserver || global.WebKitMutationObserver
+ , process = global.process
+ , Promise = global.Promise
+ , isNode = _dereq_(11)(process) == 'process'
+ , head, last, notify;
+
+var flush = function(){
+ var parent, domain, fn;
+ if(isNode && (parent = process.domain)){
+ process.domain = null;
+ parent.exit();
+ }
+ while(head){
+ domain = head.domain;
+ fn = head.fn;
+ if(domain)domain.enter();
+ fn(); // <- currently we use it only for Promise - try / catch not required
+ if(domain)domain.exit();
+ head = head.next;
+ } last = undefined;
+ if(parent)parent.enter();
+};
+
+// Node.js
+if(isNode){
+ notify = function(){
+ process.nextTick(flush);
+ };
+// browsers with MutationObserver
+} else if(Observer){
+ var toggle = 1
+ , node = document.createTextNode('');
+ new Observer(flush).observe(node, {characterData: true}); // eslint-disable-line no-new
+ notify = function(){
+ node.data = toggle = -toggle;
+ };
+// environments with maybe non-completely correct, but existent Promise
+} else if(Promise && Promise.resolve){
+ notify = function(){
+ Promise.resolve().then(flush);
+ };
+// for other environments - macrotask based on:
+// - setImmediate
+// - MessageChannel
+// - window.postMessag
+// - onreadystatechange
+// - setTimeout
+} else {
+ notify = function(){
+ // strange IE + webpack dev server bug - use .call(global)
+ macrotask.call(global, flush);
+ };
+}
+
+module.exports = function asap(fn){
+ var task = {fn: fn, next: undefined, domain: isNode && process.domain};
+ if(last)last.next = task;
+ if(!head){
+ head = task;
+ notify();
+ } last = task;
+};
+},{"11":11,"29":29,"75":75}],53:[function(_dereq_,module,exports){
+// 19.1.2.1 Object.assign(target, source, ...)
+var $ = _dereq_(46)
+ , toObject = _dereq_(80)
+ , IObject = _dereq_(34);
+
+// should work with symbols and should have deterministic property order (V8 bug)
+module.exports = _dereq_(24)(function(){
+ var a = Object.assign
+ , A = {}
+ , B = {}
+ , S = Symbol()
+ , K = 'abcdefghijklmnopqrst';
+ A[S] = 7;
+ K.split('').forEach(function(k){ B[k] = k; });
+ return a({}, A)[S] != 7 || Object.keys(a({}, B)).join('') != K;
+}) ? function assign(target, source){ // eslint-disable-line no-unused-vars
+ var T = toObject(target)
+ , $$ = arguments
+ , $$len = $$.length
+ , index = 1
+ , getKeys = $.getKeys
+ , getSymbols = $.getSymbols
+ , isEnum = $.isEnum;
+ while($$len > index){
+ var S = IObject($$[index++])
+ , keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)
+ , length = keys.length
+ , j = 0
+ , key;
+ while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];
+ }
+ return T;
+} : Object.assign;
+},{"24":24,"34":34,"46":46,"80":80}],54:[function(_dereq_,module,exports){
+// most Object methods by ES6 should accept primitives
+var $export = _dereq_(22)
+ , core = _dereq_(16)
+ , fails = _dereq_(24);
+module.exports = function(KEY, exec){
+ var fn = (core.Object || {})[KEY] || Object[KEY]
+ , exp = {};
+ exp[KEY] = exec(fn);
+ $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);
+};
+},{"16":16,"22":22,"24":24}],55:[function(_dereq_,module,exports){
+var $ = _dereq_(46)
+ , toIObject = _dereq_(78)
+ , isEnum = $.isEnum;
+module.exports = function(isEntries){
+ return function(it){
+ var O = toIObject(it)
+ , keys = $.getKeys(O)
+ , length = keys.length
+ , i = 0
+ , result = []
+ , key;
+ while(length > i)if(isEnum.call(O, key = keys[i++])){
+ result.push(isEntries ? [key, O[key]] : O[key]);
+ } return result;
+ };
+};
+},{"46":46,"78":78}],56:[function(_dereq_,module,exports){
+// all object keys, includes non-enumerable and symbols
+var $ = _dereq_(46)
+ , anObject = _dereq_(4)
+ , Reflect = _dereq_(29).Reflect;
+module.exports = Reflect && Reflect.ownKeys || function ownKeys(it){
+ var keys = $.getNames(anObject(it))
+ , getSymbols = $.getSymbols;
+ return getSymbols ? keys.concat(getSymbols(it)) : keys;
+};
+},{"29":29,"4":4,"46":46}],57:[function(_dereq_,module,exports){
+'use strict';
+var path = _dereq_(58)
+ , invoke = _dereq_(33)
+ , aFunction = _dereq_(2);
+module.exports = function(/* ...pargs */){
+ var fn = aFunction(this)
+ , length = arguments.length
+ , pargs = Array(length)
+ , i = 0
+ , _ = path._
+ , holder = false;
+ while(length > i)if((pargs[i] = arguments[i++]) === _)holder = true;
+ return function(/* ...args */){
+ var that = this
+ , $$ = arguments
+ , $$len = $$.length
+ , j = 0, k = 0, args;
+ if(!holder && !$$len)return invoke(fn, pargs, that);
+ args = pargs.slice();
+ if(holder)for(;length > j; j++)if(args[j] === _)args[j] = $$[k++];
+ while($$len > k)args.push($$[k++]);
+ return invoke(fn, args, that);
+ };
+};
+},{"2":2,"33":33,"58":58}],58:[function(_dereq_,module,exports){
+module.exports = _dereq_(29);
+},{"29":29}],59:[function(_dereq_,module,exports){
+module.exports = function(bitmap, value){
+ return {
+ enumerable : !(bitmap & 1),
+ configurable: !(bitmap & 2),
+ writable : !(bitmap & 4),
+ value : value
+ };
+};
+},{}],60:[function(_dereq_,module,exports){
+var redefine = _dereq_(61);
+module.exports = function(target, src){
+ for(var key in src)redefine(target, key, src[key]);
+ return target;
+};
+},{"61":61}],61:[function(_dereq_,module,exports){
+// add fake Function#toString
+// for correct work wrapped methods / constructors with methods like LoDash isNative
+var global = _dereq_(29)
+ , hide = _dereq_(31)
+ , SRC = _dereq_(82)('src')
+ , TO_STRING = 'toString'
+ , $toString = Function[TO_STRING]
+ , TPL = ('' + $toString).split(TO_STRING);
+
+_dereq_(16).inspectSource = function(it){
+ return $toString.call(it);
+};
+
+(module.exports = function(O, key, val, safe){
+ if(typeof val == 'function'){
+ val.hasOwnProperty(SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
+ val.hasOwnProperty('name') || hide(val, 'name', key);
+ }
+ if(O === global){
+ O[key] = val;
+ } else {
+ if(!safe)delete O[key];
+ hide(O, key, val);
+ }
+})(Function.prototype, TO_STRING, function toString(){
+ return typeof this == 'function' && this[SRC] || $toString.call(this);
+});
+},{"16":16,"29":29,"31":31,"82":82}],62:[function(_dereq_,module,exports){
+module.exports = function(regExp, replace){
+ var replacer = replace === Object(replace) ? function(part){
+ return replace[part];
+ } : replace;
+ return function(it){
+ return String(it).replace(regExp, replacer);
+ };
+};
+},{}],63:[function(_dereq_,module,exports){
+// 7.2.9 SameValue(x, y)
+module.exports = Object.is || function is(x, y){
+ return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;
+};
+},{}],64:[function(_dereq_,module,exports){
+// Works with __proto__ only. Old v8 can't work with null proto objects.
+/* eslint-disable no-proto */
+var getDesc = _dereq_(46).getDesc
+ , isObject = _dereq_(38)
+ , anObject = _dereq_(4);
+var check = function(O, proto){
+ anObject(O);
+ if(!isObject(proto) && proto !== null)throw TypeError(proto + ": can't set as prototype!");
+};
+module.exports = {
+ set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line
+ function(test, buggy, set){
+ try {
+ set = _dereq_(17)(Function.call, getDesc(Object.prototype, '__proto__').set, 2);
+ set(test, []);
+ buggy = !(test instanceof Array);
+ } catch(e){ buggy = true; }
+ return function setPrototypeOf(O, proto){
+ check(O, proto);
+ if(buggy)O.__proto__ = proto;
+ else set(O, proto);
+ return O;
+ };
+ }({}, false) : undefined),
+ check: check
+};
+},{"17":17,"38":38,"4":4,"46":46}],65:[function(_dereq_,module,exports){
+'use strict';
+var global = _dereq_(29)
+ , $ = _dereq_(46)
+ , DESCRIPTORS = _dereq_(19)
+ , SPECIES = _dereq_(83)('species');
+
+module.exports = function(KEY){
+ var C = global[KEY];
+ if(DESCRIPTORS && C && !C[SPECIES])$.setDesc(C, SPECIES, {
+ configurable: true,
+ get: function(){ return this; }
+ });
+};
+},{"19":19,"29":29,"46":46,"83":83}],66:[function(_dereq_,module,exports){
+var def = _dereq_(46).setDesc
+ , has = _dereq_(30)
+ , TAG = _dereq_(83)('toStringTag');
+
+module.exports = function(it, tag, stat){
+ if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});
+};
+},{"30":30,"46":46,"83":83}],67:[function(_dereq_,module,exports){
+var global = _dereq_(29)
+ , SHARED = '__core-js_shared__'
+ , store = global[SHARED] || (global[SHARED] = {});
+module.exports = function(key){
+ return store[key] || (store[key] = {});
+};
+},{"29":29}],68:[function(_dereq_,module,exports){
+// 7.3.20 SpeciesConstructor(O, defaultConstructor)
+var anObject = _dereq_(4)
+ , aFunction = _dereq_(2)
+ , SPECIES = _dereq_(83)('species');
+module.exports = function(O, D){
+ var C = anObject(O).constructor, S;
+ return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);
+};
+},{"2":2,"4":4,"83":83}],69:[function(_dereq_,module,exports){
+module.exports = function(it, Constructor, name){
+ if(!(it instanceof Constructor))throw TypeError(name + ": use the 'new' operator!");
+ return it;
+};
+},{}],70:[function(_dereq_,module,exports){
+var toInteger = _dereq_(77)
+ , defined = _dereq_(18);
+// true -> String#at
+// false -> String#codePointAt
+module.exports = function(TO_STRING){
+ return function(that, pos){
+ var s = String(defined(that))
+ , i = toInteger(pos)
+ , l = s.length
+ , a, b;
+ if(i < 0 || i >= l)return TO_STRING ? '' : undefined;
+ a = s.charCodeAt(i);
+ return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
+ ? TO_STRING ? s.charAt(i) : a
+ : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
+ };
+};
+},{"18":18,"77":77}],71:[function(_dereq_,module,exports){
+// helper for String#{startsWith, endsWith, includes}
+var isRegExp = _dereq_(39)
+ , defined = _dereq_(18);
+
+module.exports = function(that, searchString, NAME){
+ if(isRegExp(searchString))throw TypeError('String#' + NAME + " doesn't accept regex!");
+ return String(defined(that));
+};
+},{"18":18,"39":39}],72:[function(_dereq_,module,exports){
+// https://github.com/ljharb/proposal-string-pad-left-right
+var toLength = _dereq_(79)
+ , repeat = _dereq_(73)
+ , defined = _dereq_(18);
+
+module.exports = function(that, maxLength, fillString, left){
+ var S = String(defined(that))
+ , stringLength = S.length
+ , fillStr = fillString === undefined ? ' ' : String(fillString)
+ , intMaxLength = toLength(maxLength);
+ if(intMaxLength <= stringLength)return S;
+ if(fillStr == '')fillStr = ' ';
+ var fillLen = intMaxLength - stringLength
+ , stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));
+ if(stringFiller.length > fillLen)stringFiller = stringFiller.slice(0, fillLen);
+ return left ? stringFiller + S : S + stringFiller;
+};
+},{"18":18,"73":73,"79":79}],73:[function(_dereq_,module,exports){
+'use strict';
+var toInteger = _dereq_(77)
+ , defined = _dereq_(18);
+
+module.exports = function repeat(count){
+ var str = String(defined(this))
+ , res = ''
+ , n = toInteger(count);
+ if(n < 0 || n == Infinity)throw RangeError("Count can't be negative");
+ for(;n > 0; (n >>>= 1) && (str += str))if(n & 1)res += str;
+ return res;
+};
+},{"18":18,"77":77}],74:[function(_dereq_,module,exports){
+var $export = _dereq_(22)
+ , defined = _dereq_(18)
+ , fails = _dereq_(24)
+ , spaces = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' +
+ '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'
+ , space = '[' + spaces + ']'
+ , non = '\u200b\u0085'
+ , ltrim = RegExp('^' + space + space + '*')
+ , rtrim = RegExp(space + space + '*$');
+
+var exporter = function(KEY, exec){
+ var exp = {};
+ exp[KEY] = exec(trim);
+ $export($export.P + $export.F * fails(function(){
+ return !!spaces[KEY]() || non[KEY]() != non;
+ }), 'String', exp);
+};
+
+// 1 -> String#trimLeft
+// 2 -> String#trimRight
+// 3 -> String#trim
+var trim = exporter.trim = function(string, TYPE){
+ string = String(defined(string));
+ if(TYPE & 1)string = string.replace(ltrim, '');
+ if(TYPE & 2)string = string.replace(rtrim, '');
+ return string;
+};
+
+module.exports = exporter;
+},{"18":18,"22":22,"24":24}],75:[function(_dereq_,module,exports){
+var ctx = _dereq_(17)
+ , invoke = _dereq_(33)
+ , html = _dereq_(32)
+ , cel = _dereq_(20)
+ , global = _dereq_(29)
+ , process = global.process
+ , setTask = global.setImmediate
+ , clearTask = global.clearImmediate
+ , MessageChannel = global.MessageChannel
+ , counter = 0
+ , queue = {}
+ , ONREADYSTATECHANGE = 'onreadystatechange'
+ , defer, channel, port;
+var run = function(){
+ var id = +this;
+ if(queue.hasOwnProperty(id)){
+ var fn = queue[id];
+ delete queue[id];
+ fn();
+ }
+};
+var listner = function(event){
+ run.call(event.data);
+};
+// Node.js 0.9+ & IE10+ has setImmediate, otherwise:
+if(!setTask || !clearTask){
+ setTask = function setImmediate(fn){
+ var args = [], i = 1;
+ while(arguments.length > i)args.push(arguments[i++]);
+ queue[++counter] = function(){
+ invoke(typeof fn == 'function' ? fn : Function(fn), args);
+ };
+ defer(counter);
+ return counter;
+ };
+ clearTask = function clearImmediate(id){
+ delete queue[id];
+ };
+ // Node.js 0.8-
+ if(_dereq_(11)(process) == 'process'){
+ defer = function(id){
+ process.nextTick(ctx(run, id, 1));
+ };
+ // Browsers with MessageChannel, includes WebWorkers
+ } else if(MessageChannel){
+ channel = new MessageChannel;
+ port = channel.port2;
+ channel.port1.onmessage = listner;
+ defer = ctx(port.postMessage, port, 1);
+ // Browsers with postMessage, skip WebWorkers
+ // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
+ } else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){
+ defer = function(id){
+ global.postMessage(id + '', '*');
+ };
+ global.addEventListener('message', listner, false);
+ // IE8-
+ } else if(ONREADYSTATECHANGE in cel('script')){
+ defer = function(id){
+ html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){
+ html.removeChild(this);
+ run.call(id);
+ };
+ };
+ // Rest old browsers
+ } else {
+ defer = function(id){
+ setTimeout(ctx(run, id, 1), 0);
+ };
+ }
+}
+module.exports = {
+ set: setTask,
+ clear: clearTask
+};
+},{"11":11,"17":17,"20":20,"29":29,"32":32,"33":33}],76:[function(_dereq_,module,exports){
+var toInteger = _dereq_(77)
+ , max = Math.max
+ , min = Math.min;
+module.exports = function(index, length){
+ index = toInteger(index);
+ return index < 0 ? max(index + length, 0) : min(index, length);
+};
+},{"77":77}],77:[function(_dereq_,module,exports){
+// 7.1.4 ToInteger
+var ceil = Math.ceil
+ , floor = Math.floor;
+module.exports = function(it){
+ return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
+};
+},{}],78:[function(_dereq_,module,exports){
+// to indexed object, toObject with fallback for non-array-like ES3 strings
+var IObject = _dereq_(34)
+ , defined = _dereq_(18);
+module.exports = function(it){
+ return IObject(defined(it));
+};
+},{"18":18,"34":34}],79:[function(_dereq_,module,exports){
+// 7.1.15 ToLength
+var toInteger = _dereq_(77)
+ , min = Math.min;
+module.exports = function(it){
+ return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
+};
+},{"77":77}],80:[function(_dereq_,module,exports){
+// 7.1.13 ToObject(argument)
+var defined = _dereq_(18);
+module.exports = function(it){
+ return Object(defined(it));
+};
+},{"18":18}],81:[function(_dereq_,module,exports){
+// 7.1.1 ToPrimitive(input [, PreferredType])
+var isObject = _dereq_(38);
+// instead of the ES6 spec version, we didn't implement @@toPrimitive case
+// and the second argument - flag - preferred type is a string
+module.exports = function(it, S){
+ if(!isObject(it))return it;
+ var fn, val;
+ if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+ if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;
+ if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+ throw TypeError("Can't convert object to primitive value");
+};
+},{"38":38}],82:[function(_dereq_,module,exports){
+var id = 0
+ , px = Math.random();
+module.exports = function(key){
+ return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
+};
+},{}],83:[function(_dereq_,module,exports){
+var store = _dereq_(67)('wks')
+ , uid = _dereq_(82)
+ , Symbol = _dereq_(29).Symbol;
+module.exports = function(name){
+ return store[name] || (store[name] =
+ Symbol && Symbol[name] || (Symbol || uid)('Symbol.' + name));
+};
+},{"29":29,"67":67,"82":82}],84:[function(_dereq_,module,exports){
+var classof = _dereq_(10)
+ , ITERATOR = _dereq_(83)('iterator')
+ , Iterators = _dereq_(45);
+module.exports = _dereq_(16).getIteratorMethod = function(it){
+ if(it != undefined)return it[ITERATOR]
+ || it['@@iterator']
+ || Iterators[classof(it)];
+};
+},{"10":10,"16":16,"45":45,"83":83}],85:[function(_dereq_,module,exports){
+'use strict';
+var $ = _dereq_(46)
+ , $export = _dereq_(22)
+ , DESCRIPTORS = _dereq_(19)
+ , createDesc = _dereq_(59)
+ , html = _dereq_(32)
+ , cel = _dereq_(20)
+ , has = _dereq_(30)
+ , cof = _dereq_(11)
+ , invoke = _dereq_(33)
+ , fails = _dereq_(24)
+ , anObject = _dereq_(4)
+ , aFunction = _dereq_(2)
+ , isObject = _dereq_(38)
+ , toObject = _dereq_(80)
+ , toIObject = _dereq_(78)
+ , toInteger = _dereq_(77)
+ , toIndex = _dereq_(76)
+ , toLength = _dereq_(79)
+ , IObject = _dereq_(34)
+ , IE_PROTO = _dereq_(82)('__proto__')
+ , createArrayMethod = _dereq_(8)
+ , arrayIndexOf = _dereq_(7)(false)
+ , ObjectProto = Object.prototype
+ , ArrayProto = Array.prototype
+ , arraySlice = ArrayProto.slice
+ , arrayJoin = ArrayProto.join
+ , defineProperty = $.setDesc
+ , getOwnDescriptor = $.getDesc
+ , defineProperties = $.setDescs
+ , factories = {}
+ , IE8_DOM_DEFINE;
+
+if(!DESCRIPTORS){
+ IE8_DOM_DEFINE = !fails(function(){
+ return defineProperty(cel('div'), 'a', {get: function(){ return 7; }}).a != 7;
+ });
+ $.setDesc = function(O, P, Attributes){
+ if(IE8_DOM_DEFINE)try {
+ return defineProperty(O, P, Attributes);
+ } catch(e){ /* empty */ }
+ if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');
+ if('value' in Attributes)anObject(O)[P] = Attributes.value;
+ return O;
+ };
+ $.getDesc = function(O, P){
+ if(IE8_DOM_DEFINE)try {
+ return getOwnDescriptor(O, P);
+ } catch(e){ /* empty */ }
+ if(has(O, P))return createDesc(!ObjectProto.propertyIsEnumerable.call(O, P), O[P]);
+ };
+ $.setDescs = defineProperties = function(O, Properties){
+ anObject(O);
+ var keys = $.getKeys(Properties)
+ , length = keys.length
+ , i = 0
+ , P;
+ while(length > i)$.setDesc(O, P = keys[i++], Properties[P]);
+ return O;
+ };
+}
+$export($export.S + $export.F * !DESCRIPTORS, 'Object', {
+ // 19.1.2.6 / 15.2.3.3 Object.getOwnPropertyDescriptor(O, P)
+ getOwnPropertyDescriptor: $.getDesc,
+ // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
+ defineProperty: $.setDesc,
+ // 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)
+ defineProperties: defineProperties
+});
+
+ // IE 8- don't enum bug keys
+var keys1 = ('constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,' +
+ 'toLocaleString,toString,valueOf').split(',')
+ // Additional keys for getOwnPropertyNames
+ , keys2 = keys1.concat('length', 'prototype')
+ , keysLen1 = keys1.length;
+
+// Create object with `null` prototype: use iframe Object with cleared prototype
+var createDict = function(){
+ // Thrash, waste and sodomy: IE GC bug
+ var iframe = cel('iframe')
+ , i = keysLen1
+ , gt = '>'
+ , iframeDocument;
+ iframe.style.display = 'none';
+ html.appendChild(iframe);
+ iframe.src = 'javascript:'; // eslint-disable-line no-script-url
+ // createDict = iframe.contentWindow.Object;
+ // html.removeChild(iframe);
+ iframeDocument = iframe.contentWindow.document;
+ iframeDocument.open();
+ iframeDocument.write(' i)if(has(O, key = names[i++])){
+ ~arrayIndexOf(result, key) || result.push(key);
+ }
+ return result;
+ };
+};
+var Empty = function(){};
+$export($export.S, 'Object', {
+ // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
+ getPrototypeOf: $.getProto = $.getProto || function(O){
+ O = toObject(O);
+ if(has(O, IE_PROTO))return O[IE_PROTO];
+ if(typeof O.constructor == 'function' && O instanceof O.constructor){
+ return O.constructor.prototype;
+ } return O instanceof Object ? ObjectProto : null;
+ },
+ // 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
+ getOwnPropertyNames: $.getNames = $.getNames || createGetKeys(keys2, keys2.length, true),
+ // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
+ create: $.create = $.create || function(O, /*?*/Properties){
+ var result;
+ if(O !== null){
+ Empty.prototype = anObject(O);
+ result = new Empty();
+ Empty.prototype = null;
+ // add "__proto__" for Object.getPrototypeOf shim
+ result[IE_PROTO] = O;
+ } else result = createDict();
+ return Properties === undefined ? result : defineProperties(result, Properties);
+ },
+ // 19.1.2.14 / 15.2.3.14 Object.keys(O)
+ keys: $.getKeys = $.getKeys || createGetKeys(keys1, keysLen1, false)
+});
+
+var construct = function(F, len, args){
+ if(!(len in factories)){
+ for(var n = [], i = 0; i < len; i++)n[i] = 'a[' + i + ']';
+ factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');
+ }
+ return factories[len](F, args);
+};
+
+// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)
+$export($export.P, 'Function', {
+ bind: function bind(that /*, args... */){
+ var fn = aFunction(this)
+ , partArgs = arraySlice.call(arguments, 1);
+ var bound = function(/* args... */){
+ var args = partArgs.concat(arraySlice.call(arguments));
+ return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);
+ };
+ if(isObject(fn.prototype))bound.prototype = fn.prototype;
+ return bound;
+ }
+});
+
+// fallback for not array-like ES3 strings and DOM objects
+$export($export.P + $export.F * fails(function(){
+ if(html)arraySlice.call(html);
+}), 'Array', {
+ slice: function(begin, end){
+ var len = toLength(this.length)
+ , klass = cof(this);
+ end = end === undefined ? len : end;
+ if(klass == 'Array')return arraySlice.call(this, begin, end);
+ var start = toIndex(begin, len)
+ , upTo = toIndex(end, len)
+ , size = toLength(upTo - start)
+ , cloned = Array(size)
+ , i = 0;
+ for(; i < size; i++)cloned[i] = klass == 'String'
+ ? this.charAt(start + i)
+ : this[start + i];
+ return cloned;
+ }
+});
+$export($export.P + $export.F * (IObject != Object), 'Array', {
+ join: function join(separator){
+ return arrayJoin.call(IObject(this), separator === undefined ? ',' : separator);
+ }
+});
+
+// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)
+$export($export.S, 'Array', {isArray: _dereq_(36)});
+
+var createArrayReduce = function(isRight){
+ return function(callbackfn, memo){
+ aFunction(callbackfn);
+ var O = IObject(this)
+ , length = toLength(O.length)
+ , index = isRight ? length - 1 : 0
+ , i = isRight ? -1 : 1;
+ if(arguments.length < 2)for(;;){
+ if(index in O){
+ memo = O[index];
+ index += i;
+ break;
+ }
+ index += i;
+ if(isRight ? index < 0 : length <= index){
+ throw TypeError('Reduce of empty array with no initial value');
+ }
+ }
+ for(;isRight ? index >= 0 : length > index; index += i)if(index in O){
+ memo = callbackfn(memo, O[index], index, this);
+ }
+ return memo;
+ };
+};
+
+var methodize = function($fn){
+ return function(arg1/*, arg2 = undefined */){
+ return $fn(this, arg1, arguments[1]);
+ };
+};
+
+$export($export.P, 'Array', {
+ // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])
+ forEach: $.each = $.each || methodize(createArrayMethod(0)),
+ // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])
+ map: methodize(createArrayMethod(1)),
+ // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])
+ filter: methodize(createArrayMethod(2)),
+ // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])
+ some: methodize(createArrayMethod(3)),
+ // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])
+ every: methodize(createArrayMethod(4)),
+ // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])
+ reduce: createArrayReduce(false),
+ // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])
+ reduceRight: createArrayReduce(true),
+ // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])
+ indexOf: methodize(arrayIndexOf),
+ // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])
+ lastIndexOf: function(el, fromIndex /* = @[*-1] */){
+ var O = toIObject(this)
+ , length = toLength(O.length)
+ , index = length - 1;
+ if(arguments.length > 1)index = Math.min(index, toInteger(fromIndex));
+ if(index < 0)index = toLength(length + index);
+ for(;index >= 0; index--)if(index in O)if(O[index] === el)return index;
+ return -1;
+ }
+});
+
+// 20.3.3.1 / 15.9.4.4 Date.now()
+$export($export.S, 'Date', {now: function(){ return +new Date; }});
+
+var lz = function(num){
+ return num > 9 ? num : '0' + num;
+};
+
+// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()
+// PhantomJS / old WebKit has a broken implementations
+$export($export.P + $export.F * (fails(function(){
+ return new Date(-5e13 - 1).toISOString() != '0385-07-25T07:06:39.999Z';
+}) || !fails(function(){
+ new Date(NaN).toISOString();
+})), 'Date', {
+ toISOString: function toISOString(){
+ if(!isFinite(this))throw RangeError('Invalid time value');
+ var d = this
+ , y = d.getUTCFullYear()
+ , m = d.getUTCMilliseconds()
+ , s = y < 0 ? '-' : y > 9999 ? '+' : '';
+ return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +
+ '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +
+ 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +
+ ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';
+ }
+});
+},{"11":11,"19":19,"2":2,"20":20,"22":22,"24":24,"30":30,"32":32,"33":33,"34":34,"36":36,"38":38,"4":4,"46":46,"59":59,"7":7,"76":76,"77":77,"78":78,"79":79,"8":8,"80":80,"82":82}],86:[function(_dereq_,module,exports){
+// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)
+var $export = _dereq_(22);
+
+$export($export.P, 'Array', {copyWithin: _dereq_(5)});
+
+_dereq_(3)('copyWithin');
+},{"22":22,"3":3,"5":5}],87:[function(_dereq_,module,exports){
+// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)
+var $export = _dereq_(22);
+
+$export($export.P, 'Array', {fill: _dereq_(6)});
+
+_dereq_(3)('fill');
+},{"22":22,"3":3,"6":6}],88:[function(_dereq_,module,exports){
+'use strict';
+// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)
+var $export = _dereq_(22)
+ , $find = _dereq_(8)(6)
+ , KEY = 'findIndex'
+ , forced = true;
+// Shouldn't skip holes
+if(KEY in [])Array(1)[KEY](function(){ forced = false; });
+$export($export.P + $export.F * forced, 'Array', {
+ findIndex: function findIndex(callbackfn/*, that = undefined */){
+ return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
+ }
+});
+_dereq_(3)(KEY);
+},{"22":22,"3":3,"8":8}],89:[function(_dereq_,module,exports){
+'use strict';
+// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)
+var $export = _dereq_(22)
+ , $find = _dereq_(8)(5)
+ , KEY = 'find'
+ , forced = true;
+// Shouldn't skip holes
+if(KEY in [])Array(1)[KEY](function(){ forced = false; });
+$export($export.P + $export.F * forced, 'Array', {
+ find: function find(callbackfn/*, that = undefined */){
+ return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
+ }
+});
+_dereq_(3)(KEY);
+},{"22":22,"3":3,"8":8}],90:[function(_dereq_,module,exports){
+'use strict';
+var ctx = _dereq_(17)
+ , $export = _dereq_(22)
+ , toObject = _dereq_(80)
+ , call = _dereq_(40)
+ , isArrayIter = _dereq_(35)
+ , toLength = _dereq_(79)
+ , getIterFn = _dereq_(84);
+$export($export.S + $export.F * !_dereq_(43)(function(iter){ Array.from(iter); }), 'Array', {
+ // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)
+ from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){
+ var O = toObject(arrayLike)
+ , C = typeof this == 'function' ? this : Array
+ , $$ = arguments
+ , $$len = $$.length
+ , mapfn = $$len > 1 ? $$[1] : undefined
+ , mapping = mapfn !== undefined
+ , index = 0
+ , iterFn = getIterFn(O)
+ , length, result, step, iterator;
+ if(mapping)mapfn = ctx(mapfn, $$len > 2 ? $$[2] : undefined, 2);
+ // if object isn't iterable or it's array with default iterator - use simple case
+ if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){
+ for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){
+ result[index] = mapping ? call(iterator, mapfn, [step.value, index], true) : step.value;
+ }
+ } else {
+ length = toLength(O.length);
+ for(result = new C(length); length > index; index++){
+ result[index] = mapping ? mapfn(O[index], index) : O[index];
+ }
+ }
+ result.length = index;
+ return result;
+ }
+});
+
+},{"17":17,"22":22,"35":35,"40":40,"43":43,"79":79,"80":80,"84":84}],91:[function(_dereq_,module,exports){
+'use strict';
+var addToUnscopables = _dereq_(3)
+ , step = _dereq_(44)
+ , Iterators = _dereq_(45)
+ , toIObject = _dereq_(78);
+
+// 22.1.3.4 Array.prototype.entries()
+// 22.1.3.13 Array.prototype.keys()
+// 22.1.3.29 Array.prototype.values()
+// 22.1.3.30 Array.prototype[@@iterator]()
+module.exports = _dereq_(42)(Array, 'Array', function(iterated, kind){
+ this._t = toIObject(iterated); // target
+ this._i = 0; // next index
+ this._k = kind; // kind
+// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
+}, function(){
+ var O = this._t
+ , kind = this._k
+ , index = this._i++;
+ if(!O || index >= O.length){
+ this._t = undefined;
+ return step(1);
+ }
+ if(kind == 'keys' )return step(0, index);
+ if(kind == 'values')return step(0, O[index]);
+ return step(0, [index, O[index]]);
+}, 'values');
+
+// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
+Iterators.Arguments = Iterators.Array;
+
+addToUnscopables('keys');
+addToUnscopables('values');
+addToUnscopables('entries');
+},{"3":3,"42":42,"44":44,"45":45,"78":78}],92:[function(_dereq_,module,exports){
+'use strict';
+var $export = _dereq_(22);
+
+// WebKit Array.of isn't generic
+$export($export.S + $export.F * _dereq_(24)(function(){
+ function F(){}
+ return !(Array.of.call(F) instanceof F);
+}), 'Array', {
+ // 22.1.2.3 Array.of( ...items)
+ of: function of(/* ...args */){
+ var index = 0
+ , $$ = arguments
+ , $$len = $$.length
+ , result = new (typeof this == 'function' ? this : Array)($$len);
+ while($$len > index)result[index] = $$[index++];
+ result.length = $$len;
+ return result;
+ }
+});
+},{"22":22,"24":24}],93:[function(_dereq_,module,exports){
+_dereq_(65)('Array');
+},{"65":65}],94:[function(_dereq_,module,exports){
+'use strict';
+var $ = _dereq_(46)
+ , isObject = _dereq_(38)
+ , HAS_INSTANCE = _dereq_(83)('hasInstance')
+ , FunctionProto = Function.prototype;
+// 19.2.3.6 Function.prototype[@@hasInstance](V)
+if(!(HAS_INSTANCE in FunctionProto))$.setDesc(FunctionProto, HAS_INSTANCE, {value: function(O){
+ if(typeof this != 'function' || !isObject(O))return false;
+ if(!isObject(this.prototype))return O instanceof this;
+ // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:
+ while(O = $.getProto(O))if(this.prototype === O)return true;
+ return false;
+}});
+},{"38":38,"46":46,"83":83}],95:[function(_dereq_,module,exports){
+var setDesc = _dereq_(46).setDesc
+ , createDesc = _dereq_(59)
+ , has = _dereq_(30)
+ , FProto = Function.prototype
+ , nameRE = /^\s*function ([^ (]*)/
+ , NAME = 'name';
+// 19.2.4.2 name
+NAME in FProto || _dereq_(19) && setDesc(FProto, NAME, {
+ configurable: true,
+ get: function(){
+ var match = ('' + this).match(nameRE)
+ , name = match ? match[1] : '';
+ has(this, NAME) || setDesc(this, NAME, createDesc(5, name));
+ return name;
+ }
+});
+},{"19":19,"30":30,"46":46,"59":59}],96:[function(_dereq_,module,exports){
+'use strict';
+var strong = _dereq_(12);
+
+// 23.1 Map Objects
+_dereq_(15)('Map', function(get){
+ return function Map(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };
+}, {
+ // 23.1.3.6 Map.prototype.get(key)
+ get: function get(key){
+ var entry = strong.getEntry(this, key);
+ return entry && entry.v;
+ },
+ // 23.1.3.9 Map.prototype.set(key, value)
+ set: function set(key, value){
+ return strong.def(this, key === 0 ? 0 : key, value);
+ }
+}, strong, true);
+},{"12":12,"15":15}],97:[function(_dereq_,module,exports){
+// 20.2.2.3 Math.acosh(x)
+var $export = _dereq_(22)
+ , log1p = _dereq_(50)
+ , sqrt = Math.sqrt
+ , $acosh = Math.acosh;
+
+// V8 bug https://code.google.com/p/v8/issues/detail?id=3509
+$export($export.S + $export.F * !($acosh && Math.floor($acosh(Number.MAX_VALUE)) == 710), 'Math', {
+ acosh: function acosh(x){
+ return (x = +x) < 1 ? NaN : x > 94906265.62425156
+ ? Math.log(x) + Math.LN2
+ : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));
+ }
+});
+},{"22":22,"50":50}],98:[function(_dereq_,module,exports){
+// 20.2.2.5 Math.asinh(x)
+var $export = _dereq_(22);
+
+function asinh(x){
+ return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));
+}
+
+$export($export.S, 'Math', {asinh: asinh});
+},{"22":22}],99:[function(_dereq_,module,exports){
+// 20.2.2.7 Math.atanh(x)
+var $export = _dereq_(22);
+
+$export($export.S, 'Math', {
+ atanh: function atanh(x){
+ return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;
+ }
+});
+},{"22":22}],100:[function(_dereq_,module,exports){
+// 20.2.2.9 Math.cbrt(x)
+var $export = _dereq_(22)
+ , sign = _dereq_(51);
+
+$export($export.S, 'Math', {
+ cbrt: function cbrt(x){
+ return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);
+ }
+});
+},{"22":22,"51":51}],101:[function(_dereq_,module,exports){
+// 20.2.2.11 Math.clz32(x)
+var $export = _dereq_(22);
+
+$export($export.S, 'Math', {
+ clz32: function clz32(x){
+ return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;
+ }
+});
+},{"22":22}],102:[function(_dereq_,module,exports){
+// 20.2.2.12 Math.cosh(x)
+var $export = _dereq_(22)
+ , exp = Math.exp;
+
+$export($export.S, 'Math', {
+ cosh: function cosh(x){
+ return (exp(x = +x) + exp(-x)) / 2;
+ }
+});
+},{"22":22}],103:[function(_dereq_,module,exports){
+// 20.2.2.14 Math.expm1(x)
+var $export = _dereq_(22);
+
+$export($export.S, 'Math', {expm1: _dereq_(49)});
+},{"22":22,"49":49}],104:[function(_dereq_,module,exports){
+// 20.2.2.16 Math.fround(x)
+var $export = _dereq_(22)
+ , sign = _dereq_(51)
+ , pow = Math.pow
+ , EPSILON = pow(2, -52)
+ , EPSILON32 = pow(2, -23)
+ , MAX32 = pow(2, 127) * (2 - EPSILON32)
+ , MIN32 = pow(2, -126);
+
+var roundTiesToEven = function(n){
+ return n + 1 / EPSILON - 1 / EPSILON;
+};
+
+
+$export($export.S, 'Math', {
+ fround: function fround(x){
+ var $abs = Math.abs(x)
+ , $sign = sign(x)
+ , a, result;
+ if($abs < MIN32)return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;
+ a = (1 + EPSILON32 / EPSILON) * $abs;
+ result = a - (a - $abs);
+ if(result > MAX32 || result != result)return $sign * Infinity;
+ return $sign * result;
+ }
+});
+},{"22":22,"51":51}],105:[function(_dereq_,module,exports){
+// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])
+var $export = _dereq_(22)
+ , abs = Math.abs;
+
+$export($export.S, 'Math', {
+ hypot: function hypot(value1, value2){ // eslint-disable-line no-unused-vars
+ var sum = 0
+ , i = 0
+ , $$ = arguments
+ , $$len = $$.length
+ , larg = 0
+ , arg, div;
+ while(i < $$len){
+ arg = abs($$[i++]);
+ if(larg < arg){
+ div = larg / arg;
+ sum = sum * div * div + 1;
+ larg = arg;
+ } else if(arg > 0){
+ div = arg / larg;
+ sum += div * div;
+ } else sum += arg;
+ }
+ return larg === Infinity ? Infinity : larg * Math.sqrt(sum);
+ }
+});
+},{"22":22}],106:[function(_dereq_,module,exports){
+// 20.2.2.18 Math.imul(x, y)
+var $export = _dereq_(22)
+ , $imul = Math.imul;
+
+// some WebKit versions fails with big numbers, some has wrong arity
+$export($export.S + $export.F * _dereq_(24)(function(){
+ return $imul(0xffffffff, 5) != -5 || $imul.length != 2;
+}), 'Math', {
+ imul: function imul(x, y){
+ var UINT16 = 0xffff
+ , xn = +x
+ , yn = +y
+ , xl = UINT16 & xn
+ , yl = UINT16 & yn;
+ return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);
+ }
+});
+},{"22":22,"24":24}],107:[function(_dereq_,module,exports){
+// 20.2.2.21 Math.log10(x)
+var $export = _dereq_(22);
+
+$export($export.S, 'Math', {
+ log10: function log10(x){
+ return Math.log(x) / Math.LN10;
+ }
+});
+},{"22":22}],108:[function(_dereq_,module,exports){
+// 20.2.2.20 Math.log1p(x)
+var $export = _dereq_(22);
+
+$export($export.S, 'Math', {log1p: _dereq_(50)});
+},{"22":22,"50":50}],109:[function(_dereq_,module,exports){
+// 20.2.2.22 Math.log2(x)
+var $export = _dereq_(22);
+
+$export($export.S, 'Math', {
+ log2: function log2(x){
+ return Math.log(x) / Math.LN2;
+ }
+});
+},{"22":22}],110:[function(_dereq_,module,exports){
+// 20.2.2.28 Math.sign(x)
+var $export = _dereq_(22);
+
+$export($export.S, 'Math', {sign: _dereq_(51)});
+},{"22":22,"51":51}],111:[function(_dereq_,module,exports){
+// 20.2.2.30 Math.sinh(x)
+var $export = _dereq_(22)
+ , expm1 = _dereq_(49)
+ , exp = Math.exp;
+
+// V8 near Chromium 38 has a problem with very small numbers
+$export($export.S + $export.F * _dereq_(24)(function(){
+ return !Math.sinh(-2e-17) != -2e-17;
+}), 'Math', {
+ sinh: function sinh(x){
+ return Math.abs(x = +x) < 1
+ ? (expm1(x) - expm1(-x)) / 2
+ : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);
+ }
+});
+},{"22":22,"24":24,"49":49}],112:[function(_dereq_,module,exports){
+// 20.2.2.33 Math.tanh(x)
+var $export = _dereq_(22)
+ , expm1 = _dereq_(49)
+ , exp = Math.exp;
+
+$export($export.S, 'Math', {
+ tanh: function tanh(x){
+ var a = expm1(x = +x)
+ , b = expm1(-x);
+ return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));
+ }
+});
+},{"22":22,"49":49}],113:[function(_dereq_,module,exports){
+// 20.2.2.34 Math.trunc(x)
+var $export = _dereq_(22);
+
+$export($export.S, 'Math', {
+ trunc: function trunc(it){
+ return (it > 0 ? Math.floor : Math.ceil)(it);
+ }
+});
+},{"22":22}],114:[function(_dereq_,module,exports){
+'use strict';
+var $ = _dereq_(46)
+ , global = _dereq_(29)
+ , has = _dereq_(30)
+ , cof = _dereq_(11)
+ , toPrimitive = _dereq_(81)
+ , fails = _dereq_(24)
+ , $trim = _dereq_(74).trim
+ , NUMBER = 'Number'
+ , $Number = global[NUMBER]
+ , Base = $Number
+ , proto = $Number.prototype
+ // Opera ~12 has broken Object#toString
+ , BROKEN_COF = cof($.create(proto)) == NUMBER
+ , TRIM = 'trim' in String.prototype;
+
+// 7.1.3 ToNumber(argument)
+var toNumber = function(argument){
+ var it = toPrimitive(argument, false);
+ if(typeof it == 'string' && it.length > 2){
+ it = TRIM ? it.trim() : $trim(it, 3);
+ var first = it.charCodeAt(0)
+ , third, radix, maxCode;
+ if(first === 43 || first === 45){
+ third = it.charCodeAt(2);
+ if(third === 88 || third === 120)return NaN; // Number('+0x1') should be NaN, old V8 fix
+ } else if(first === 48){
+ switch(it.charCodeAt(1)){
+ case 66 : case 98 : radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i
+ case 79 : case 111 : radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i
+ default : return +it;
+ }
+ for(var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++){
+ code = digits.charCodeAt(i);
+ // parseInt parses a string to a first unavailable symbol
+ // but ToNumber should return NaN if a string contains unavailable symbols
+ if(code < 48 || code > maxCode)return NaN;
+ } return parseInt(digits, radix);
+ }
+ } return +it;
+};
+
+if(!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')){
+ $Number = function Number(value){
+ var it = arguments.length < 1 ? 0 : value
+ , that = this;
+ return that instanceof $Number
+ // check on 1..constructor(foo) case
+ && (BROKEN_COF ? fails(function(){ proto.valueOf.call(that); }) : cof(that) != NUMBER)
+ ? new Base(toNumber(it)) : toNumber(it);
+ };
+ $.each.call(_dereq_(19) ? $.getNames(Base) : (
+ // ES3:
+ 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +
+ // ES6 (in case, if modules with ES6 Number statics required before):
+ 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +
+ 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'
+ ).split(','), function(key){
+ if(has(Base, key) && !has($Number, key)){
+ $.setDesc($Number, key, $.getDesc(Base, key));
+ }
+ });
+ $Number.prototype = proto;
+ proto.constructor = $Number;
+ _dereq_(61)(global, NUMBER, $Number);
+}
+},{"11":11,"19":19,"24":24,"29":29,"30":30,"46":46,"61":61,"74":74,"81":81}],115:[function(_dereq_,module,exports){
+// 20.1.2.1 Number.EPSILON
+var $export = _dereq_(22);
+
+$export($export.S, 'Number', {EPSILON: Math.pow(2, -52)});
+},{"22":22}],116:[function(_dereq_,module,exports){
+// 20.1.2.2 Number.isFinite(number)
+var $export = _dereq_(22)
+ , _isFinite = _dereq_(29).isFinite;
+
+$export($export.S, 'Number', {
+ isFinite: function isFinite(it){
+ return typeof it == 'number' && _isFinite(it);
+ }
+});
+},{"22":22,"29":29}],117:[function(_dereq_,module,exports){
+// 20.1.2.3 Number.isInteger(number)
+var $export = _dereq_(22);
+
+$export($export.S, 'Number', {isInteger: _dereq_(37)});
+},{"22":22,"37":37}],118:[function(_dereq_,module,exports){
+// 20.1.2.4 Number.isNaN(number)
+var $export = _dereq_(22);
+
+$export($export.S, 'Number', {
+ isNaN: function isNaN(number){
+ return number != number;
+ }
+});
+},{"22":22}],119:[function(_dereq_,module,exports){
+// 20.1.2.5 Number.isSafeInteger(number)
+var $export = _dereq_(22)
+ , isInteger = _dereq_(37)
+ , abs = Math.abs;
+
+$export($export.S, 'Number', {
+ isSafeInteger: function isSafeInteger(number){
+ return isInteger(number) && abs(number) <= 0x1fffffffffffff;
+ }
+});
+},{"22":22,"37":37}],120:[function(_dereq_,module,exports){
+// 20.1.2.6 Number.MAX_SAFE_INTEGER
+var $export = _dereq_(22);
+
+$export($export.S, 'Number', {MAX_SAFE_INTEGER: 0x1fffffffffffff});
+},{"22":22}],121:[function(_dereq_,module,exports){
+// 20.1.2.10 Number.MIN_SAFE_INTEGER
+var $export = _dereq_(22);
+
+$export($export.S, 'Number', {MIN_SAFE_INTEGER: -0x1fffffffffffff});
+},{"22":22}],122:[function(_dereq_,module,exports){
+// 20.1.2.12 Number.parseFloat(string)
+var $export = _dereq_(22);
+
+$export($export.S, 'Number', {parseFloat: parseFloat});
+},{"22":22}],123:[function(_dereq_,module,exports){
+// 20.1.2.13 Number.parseInt(string, radix)
+var $export = _dereq_(22);
+
+$export($export.S, 'Number', {parseInt: parseInt});
+},{"22":22}],124:[function(_dereq_,module,exports){
+// 19.1.3.1 Object.assign(target, source)
+var $export = _dereq_(22);
+
+$export($export.S + $export.F, 'Object', {assign: _dereq_(53)});
+},{"22":22,"53":53}],125:[function(_dereq_,module,exports){
+// 19.1.2.5 Object.freeze(O)
+var isObject = _dereq_(38);
+
+_dereq_(54)('freeze', function($freeze){
+ return function freeze(it){
+ return $freeze && isObject(it) ? $freeze(it) : it;
+ };
+});
+},{"38":38,"54":54}],126:[function(_dereq_,module,exports){
+// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
+var toIObject = _dereq_(78);
+
+_dereq_(54)('getOwnPropertyDescriptor', function($getOwnPropertyDescriptor){
+ return function getOwnPropertyDescriptor(it, key){
+ return $getOwnPropertyDescriptor(toIObject(it), key);
+ };
+});
+},{"54":54,"78":78}],127:[function(_dereq_,module,exports){
+// 19.1.2.7 Object.getOwnPropertyNames(O)
+_dereq_(54)('getOwnPropertyNames', function(){
+ return _dereq_(28).get;
+});
+},{"28":28,"54":54}],128:[function(_dereq_,module,exports){
+// 19.1.2.9 Object.getPrototypeOf(O)
+var toObject = _dereq_(80);
+
+_dereq_(54)('getPrototypeOf', function($getPrototypeOf){
+ return function getPrototypeOf(it){
+ return $getPrototypeOf(toObject(it));
+ };
+});
+},{"54":54,"80":80}],129:[function(_dereq_,module,exports){
+// 19.1.2.11 Object.isExtensible(O)
+var isObject = _dereq_(38);
+
+_dereq_(54)('isExtensible', function($isExtensible){
+ return function isExtensible(it){
+ return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;
+ };
+});
+},{"38":38,"54":54}],130:[function(_dereq_,module,exports){
+// 19.1.2.12 Object.isFrozen(O)
+var isObject = _dereq_(38);
+
+_dereq_(54)('isFrozen', function($isFrozen){
+ return function isFrozen(it){
+ return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;
+ };
+});
+},{"38":38,"54":54}],131:[function(_dereq_,module,exports){
+// 19.1.2.13 Object.isSealed(O)
+var isObject = _dereq_(38);
+
+_dereq_(54)('isSealed', function($isSealed){
+ return function isSealed(it){
+ return isObject(it) ? $isSealed ? $isSealed(it) : false : true;
+ };
+});
+},{"38":38,"54":54}],132:[function(_dereq_,module,exports){
+// 19.1.3.10 Object.is(value1, value2)
+var $export = _dereq_(22);
+$export($export.S, 'Object', {is: _dereq_(63)});
+},{"22":22,"63":63}],133:[function(_dereq_,module,exports){
+// 19.1.2.14 Object.keys(O)
+var toObject = _dereq_(80);
+
+_dereq_(54)('keys', function($keys){
+ return function keys(it){
+ return $keys(toObject(it));
+ };
+});
+},{"54":54,"80":80}],134:[function(_dereq_,module,exports){
+// 19.1.2.15 Object.preventExtensions(O)
+var isObject = _dereq_(38);
+
+_dereq_(54)('preventExtensions', function($preventExtensions){
+ return function preventExtensions(it){
+ return $preventExtensions && isObject(it) ? $preventExtensions(it) : it;
+ };
+});
+},{"38":38,"54":54}],135:[function(_dereq_,module,exports){
+// 19.1.2.17 Object.seal(O)
+var isObject = _dereq_(38);
+
+_dereq_(54)('seal', function($seal){
+ return function seal(it){
+ return $seal && isObject(it) ? $seal(it) : it;
+ };
+});
+},{"38":38,"54":54}],136:[function(_dereq_,module,exports){
+// 19.1.3.19 Object.setPrototypeOf(O, proto)
+var $export = _dereq_(22);
+$export($export.S, 'Object', {setPrototypeOf: _dereq_(64).set});
+},{"22":22,"64":64}],137:[function(_dereq_,module,exports){
+'use strict';
+// 19.1.3.6 Object.prototype.toString()
+var classof = _dereq_(10)
+ , test = {};
+test[_dereq_(83)('toStringTag')] = 'z';
+if(test + '' != '[object z]'){
+ _dereq_(61)(Object.prototype, 'toString', function toString(){
+ return '[object ' + classof(this) + ']';
+ }, true);
+}
+},{"10":10,"61":61,"83":83}],138:[function(_dereq_,module,exports){
+'use strict';
+var $ = _dereq_(46)
+ , LIBRARY = _dereq_(48)
+ , global = _dereq_(29)
+ , ctx = _dereq_(17)
+ , classof = _dereq_(10)
+ , $export = _dereq_(22)
+ , isObject = _dereq_(38)
+ , anObject = _dereq_(4)
+ , aFunction = _dereq_(2)
+ , strictNew = _dereq_(69)
+ , forOf = _dereq_(27)
+ , setProto = _dereq_(64).set
+ , same = _dereq_(63)
+ , SPECIES = _dereq_(83)('species')
+ , speciesConstructor = _dereq_(68)
+ , asap = _dereq_(52)
+ , PROMISE = 'Promise'
+ , process = global.process
+ , isNode = classof(process) == 'process'
+ , P = global[PROMISE]
+ , Wrapper;
+
+var testResolve = function(sub){
+ var test = new P(function(){});
+ if(sub)test.constructor = Object;
+ return P.resolve(test) === test;
+};
+
+var USE_NATIVE = function(){
+ var works = false;
+ function P2(x){
+ var self = new P(x);
+ setProto(self, P2.prototype);
+ return self;
+ }
+ try {
+ works = P && P.resolve && testResolve();
+ setProto(P2, P);
+ P2.prototype = $.create(P.prototype, {constructor: {value: P2}});
+ // actual Firefox has broken subclass support, test that
+ if(!(P2.resolve(5).then(function(){}) instanceof P2)){
+ works = false;
+ }
+ // actual V8 bug, https://code.google.com/p/v8/issues/detail?id=4162
+ if(works && _dereq_(19)){
+ var thenableThenGotten = false;
+ P.resolve($.setDesc({}, 'then', {
+ get: function(){ thenableThenGotten = true; }
+ }));
+ works = thenableThenGotten;
+ }
+ } catch(e){ works = false; }
+ return works;
+}();
+
+// helpers
+var sameConstructor = function(a, b){
+ // library wrapper special case
+ if(LIBRARY && a === P && b === Wrapper)return true;
+ return same(a, b);
+};
+var getConstructor = function(C){
+ var S = anObject(C)[SPECIES];
+ return S != undefined ? S : C;
+};
+var isThenable = function(it){
+ var then;
+ return isObject(it) && typeof (then = it.then) == 'function' ? then : false;
+};
+var PromiseCapability = function(C){
+ var resolve, reject;
+ this.promise = new C(function($$resolve, $$reject){
+ if(resolve !== undefined || reject !== undefined)throw TypeError('Bad Promise constructor');
+ resolve = $$resolve;
+ reject = $$reject;
+ });
+ this.resolve = aFunction(resolve),
+ this.reject = aFunction(reject)
+};
+var perform = function(exec){
+ try {
+ exec();
+ } catch(e){
+ return {error: e};
+ }
+};
+var notify = function(record, isReject){
+ if(record.n)return;
+ record.n = true;
+ var chain = record.c;
+ asap(function(){
+ var value = record.v
+ , ok = record.s == 1
+ , i = 0;
+ var run = function(reaction){
+ var handler = ok ? reaction.ok : reaction.fail
+ , resolve = reaction.resolve
+ , reject = reaction.reject
+ , result, then;
+ try {
+ if(handler){
+ if(!ok)record.h = true;
+ result = handler === true ? value : handler(value);
+ if(result === reaction.promise){
+ reject(TypeError('Promise-chain cycle'));
+ } else if(then = isThenable(result)){
+ then.call(result, resolve, reject);
+ } else resolve(result);
+ } else reject(value);
+ } catch(e){
+ reject(e);
+ }
+ };
+ while(chain.length > i)run(chain[i++]); // variable length - can't use forEach
+ chain.length = 0;
+ record.n = false;
+ if(isReject)setTimeout(function(){
+ var promise = record.p
+ , handler, console;
+ if(isUnhandled(promise)){
+ if(isNode){
+ process.emit('unhandledRejection', value, promise);
+ } else if(handler = global.onunhandledrejection){
+ handler({promise: promise, reason: value});
+ } else if((console = global.console) && console.error){
+ console.error('Unhandled promise rejection', value);
+ }
+ } record.a = undefined;
+ }, 1);
+ });
+};
+var isUnhandled = function(promise){
+ var record = promise._d
+ , chain = record.a || record.c
+ , i = 0
+ , reaction;
+ if(record.h)return false;
+ while(chain.length > i){
+ reaction = chain[i++];
+ if(reaction.fail || !isUnhandled(reaction.promise))return false;
+ } return true;
+};
+var $reject = function(value){
+ var record = this;
+ if(record.d)return;
+ record.d = true;
+ record = record.r || record; // unwrap
+ record.v = value;
+ record.s = 2;
+ record.a = record.c.slice();
+ notify(record, true);
+};
+var $resolve = function(value){
+ var record = this
+ , then;
+ if(record.d)return;
+ record.d = true;
+ record = record.r || record; // unwrap
+ try {
+ if(record.p === value)throw TypeError("Promise can't be resolved itself");
+ if(then = isThenable(value)){
+ asap(function(){
+ var wrapper = {r: record, d: false}; // wrap
+ try {
+ then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));
+ } catch(e){
+ $reject.call(wrapper, e);
+ }
+ });
+ } else {
+ record.v = value;
+ record.s = 1;
+ notify(record, false);
+ }
+ } catch(e){
+ $reject.call({r: record, d: false}, e); // wrap
+ }
+};
+
+// constructor polyfill
+if(!USE_NATIVE){
+ // 25.4.3.1 Promise(executor)
+ P = function Promise(executor){
+ aFunction(executor);
+ var record = this._d = {
+ p: strictNew(this, P, PROMISE), // <- promise
+ c: [], // <- awaiting reactions
+ a: undefined, // <- checked in isUnhandled reactions
+ s: 0, // <- state
+ d: false, // <- done
+ v: undefined, // <- value
+ h: false, // <- handled rejection
+ n: false // <- notify
+ };
+ try {
+ executor(ctx($resolve, record, 1), ctx($reject, record, 1));
+ } catch(err){
+ $reject.call(record, err);
+ }
+ };
+ _dereq_(60)(P.prototype, {
+ // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)
+ then: function then(onFulfilled, onRejected){
+ var reaction = new PromiseCapability(speciesConstructor(this, P))
+ , promise = reaction.promise
+ , record = this._d;
+ reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
+ reaction.fail = typeof onRejected == 'function' && onRejected;
+ record.c.push(reaction);
+ if(record.a)record.a.push(reaction);
+ if(record.s)notify(record, false);
+ return promise;
+ },
+ // 25.4.5.1 Promise.prototype.catch(onRejected)
+ 'catch': function(onRejected){
+ return this.then(undefined, onRejected);
+ }
+ });
+}
+
+$export($export.G + $export.W + $export.F * !USE_NATIVE, {Promise: P});
+_dereq_(66)(P, PROMISE);
+_dereq_(65)(PROMISE);
+Wrapper = _dereq_(16)[PROMISE];
+
+// statics
+$export($export.S + $export.F * !USE_NATIVE, PROMISE, {
+ // 25.4.4.5 Promise.reject(r)
+ reject: function reject(r){
+ var capability = new PromiseCapability(this)
+ , $$reject = capability.reject;
+ $$reject(r);
+ return capability.promise;
+ }
+});
+$export($export.S + $export.F * (!USE_NATIVE || testResolve(true)), PROMISE, {
+ // 25.4.4.6 Promise.resolve(x)
+ resolve: function resolve(x){
+ // instanceof instead of internal slot check because we should fix it without replacement native Promise core
+ if(x instanceof P && sameConstructor(x.constructor, this))return x;
+ var capability = new PromiseCapability(this)
+ , $$resolve = capability.resolve;
+ $$resolve(x);
+ return capability.promise;
+ }
+});
+$export($export.S + $export.F * !(USE_NATIVE && _dereq_(43)(function(iter){
+ P.all(iter)['catch'](function(){});
+})), PROMISE, {
+ // 25.4.4.1 Promise.all(iterable)
+ all: function all(iterable){
+ var C = getConstructor(this)
+ , capability = new PromiseCapability(C)
+ , resolve = capability.resolve
+ , reject = capability.reject
+ , values = [];
+ var abrupt = perform(function(){
+ forOf(iterable, false, values.push, values);
+ var remaining = values.length
+ , results = Array(remaining);
+ if(remaining)$.each.call(values, function(promise, index){
+ var alreadyCalled = false;
+ C.resolve(promise).then(function(value){
+ if(alreadyCalled)return;
+ alreadyCalled = true;
+ results[index] = value;
+ --remaining || resolve(results);
+ }, reject);
+ });
+ else resolve(results);
+ });
+ if(abrupt)reject(abrupt.error);
+ return capability.promise;
+ },
+ // 25.4.4.4 Promise.race(iterable)
+ race: function race(iterable){
+ var C = getConstructor(this)
+ , capability = new PromiseCapability(C)
+ , reject = capability.reject;
+ var abrupt = perform(function(){
+ forOf(iterable, false, function(promise){
+ C.resolve(promise).then(capability.resolve, reject);
+ });
+ });
+ if(abrupt)reject(abrupt.error);
+ return capability.promise;
+ }
+});
+},{"10":10,"16":16,"17":17,"19":19,"2":2,"22":22,"27":27,"29":29,"38":38,"4":4,"43":43,"46":46,"48":48,"52":52,"60":60,"63":63,"64":64,"65":65,"66":66,"68":68,"69":69,"83":83}],139:[function(_dereq_,module,exports){
+// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)
+var $export = _dereq_(22)
+ , _apply = Function.apply;
+
+$export($export.S, 'Reflect', {
+ apply: function apply(target, thisArgument, argumentsList){
+ return _apply.call(target, thisArgument, argumentsList);
+ }
+});
+},{"22":22}],140:[function(_dereq_,module,exports){
+// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])
+var $ = _dereq_(46)
+ , $export = _dereq_(22)
+ , aFunction = _dereq_(2)
+ , anObject = _dereq_(4)
+ , isObject = _dereq_(38)
+ , bind = Function.bind || _dereq_(16).Function.prototype.bind;
+
+// MS Edge supports only 2 arguments
+// FF Nightly sets third argument as `new.target`, but does not create `this` from it
+$export($export.S + $export.F * _dereq_(24)(function(){
+ function F(){}
+ return !(Reflect.construct(function(){}, [], F) instanceof F);
+}), 'Reflect', {
+ construct: function construct(Target, args /*, newTarget*/){
+ aFunction(Target);
+ var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);
+ if(Target == newTarget){
+ // w/o altered newTarget, optimization for 0-4 arguments
+ if(args != undefined)switch(anObject(args).length){
+ case 0: return new Target;
+ case 1: return new Target(args[0]);
+ case 2: return new Target(args[0], args[1]);
+ case 3: return new Target(args[0], args[1], args[2]);
+ case 4: return new Target(args[0], args[1], args[2], args[3]);
+ }
+ // w/o altered newTarget, lot of arguments case
+ var $args = [null];
+ $args.push.apply($args, args);
+ return new (bind.apply(Target, $args));
+ }
+ // with altered newTarget, not support built-in constructors
+ var proto = newTarget.prototype
+ , instance = $.create(isObject(proto) ? proto : Object.prototype)
+ , result = Function.apply.call(Target, instance, args);
+ return isObject(result) ? result : instance;
+ }
+});
+},{"16":16,"2":2,"22":22,"24":24,"38":38,"4":4,"46":46}],141:[function(_dereq_,module,exports){
+// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)
+var $ = _dereq_(46)
+ , $export = _dereq_(22)
+ , anObject = _dereq_(4);
+
+// MS Edge has broken Reflect.defineProperty - throwing instead of returning false
+$export($export.S + $export.F * _dereq_(24)(function(){
+ Reflect.defineProperty($.setDesc({}, 1, {value: 1}), 1, {value: 2});
+}), 'Reflect', {
+ defineProperty: function defineProperty(target, propertyKey, attributes){
+ anObject(target);
+ try {
+ $.setDesc(target, propertyKey, attributes);
+ return true;
+ } catch(e){
+ return false;
+ }
+ }
+});
+},{"22":22,"24":24,"4":4,"46":46}],142:[function(_dereq_,module,exports){
+// 26.1.4 Reflect.deleteProperty(target, propertyKey)
+var $export = _dereq_(22)
+ , getDesc = _dereq_(46).getDesc
+ , anObject = _dereq_(4);
+
+$export($export.S, 'Reflect', {
+ deleteProperty: function deleteProperty(target, propertyKey){
+ var desc = getDesc(anObject(target), propertyKey);
+ return desc && !desc.configurable ? false : delete target[propertyKey];
+ }
+});
+},{"22":22,"4":4,"46":46}],143:[function(_dereq_,module,exports){
+'use strict';
+// 26.1.5 Reflect.enumerate(target)
+var $export = _dereq_(22)
+ , anObject = _dereq_(4);
+var Enumerate = function(iterated){
+ this._t = anObject(iterated); // target
+ this._i = 0; // next index
+ var keys = this._k = [] // keys
+ , key;
+ for(key in iterated)keys.push(key);
+};
+_dereq_(41)(Enumerate, 'Object', function(){
+ var that = this
+ , keys = that._k
+ , key;
+ do {
+ if(that._i >= keys.length)return {value: undefined, done: true};
+ } while(!((key = keys[that._i++]) in that._t));
+ return {value: key, done: false};
+});
+
+$export($export.S, 'Reflect', {
+ enumerate: function enumerate(target){
+ return new Enumerate(target);
+ }
+});
+},{"22":22,"4":4,"41":41}],144:[function(_dereq_,module,exports){
+// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)
+var $ = _dereq_(46)
+ , $export = _dereq_(22)
+ , anObject = _dereq_(4);
+
+$export($export.S, 'Reflect', {
+ getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey){
+ return $.getDesc(anObject(target), propertyKey);
+ }
+});
+},{"22":22,"4":4,"46":46}],145:[function(_dereq_,module,exports){
+// 26.1.8 Reflect.getPrototypeOf(target)
+var $export = _dereq_(22)
+ , getProto = _dereq_(46).getProto
+ , anObject = _dereq_(4);
+
+$export($export.S, 'Reflect', {
+ getPrototypeOf: function getPrototypeOf(target){
+ return getProto(anObject(target));
+ }
+});
+},{"22":22,"4":4,"46":46}],146:[function(_dereq_,module,exports){
+// 26.1.6 Reflect.get(target, propertyKey [, receiver])
+var $ = _dereq_(46)
+ , has = _dereq_(30)
+ , $export = _dereq_(22)
+ , isObject = _dereq_(38)
+ , anObject = _dereq_(4);
+
+function get(target, propertyKey/*, receiver*/){
+ var receiver = arguments.length < 3 ? target : arguments[2]
+ , desc, proto;
+ if(anObject(target) === receiver)return target[propertyKey];
+ if(desc = $.getDesc(target, propertyKey))return has(desc, 'value')
+ ? desc.value
+ : desc.get !== undefined
+ ? desc.get.call(receiver)
+ : undefined;
+ if(isObject(proto = $.getProto(target)))return get(proto, propertyKey, receiver);
+}
+
+$export($export.S, 'Reflect', {get: get});
+},{"22":22,"30":30,"38":38,"4":4,"46":46}],147:[function(_dereq_,module,exports){
+// 26.1.9 Reflect.has(target, propertyKey)
+var $export = _dereq_(22);
+
+$export($export.S, 'Reflect', {
+ has: function has(target, propertyKey){
+ return propertyKey in target;
+ }
+});
+},{"22":22}],148:[function(_dereq_,module,exports){
+// 26.1.10 Reflect.isExtensible(target)
+var $export = _dereq_(22)
+ , anObject = _dereq_(4)
+ , $isExtensible = Object.isExtensible;
+
+$export($export.S, 'Reflect', {
+ isExtensible: function isExtensible(target){
+ anObject(target);
+ return $isExtensible ? $isExtensible(target) : true;
+ }
+});
+},{"22":22,"4":4}],149:[function(_dereq_,module,exports){
+// 26.1.11 Reflect.ownKeys(target)
+var $export = _dereq_(22);
+
+$export($export.S, 'Reflect', {ownKeys: _dereq_(56)});
+},{"22":22,"56":56}],150:[function(_dereq_,module,exports){
+// 26.1.12 Reflect.preventExtensions(target)
+var $export = _dereq_(22)
+ , anObject = _dereq_(4)
+ , $preventExtensions = Object.preventExtensions;
+
+$export($export.S, 'Reflect', {
+ preventExtensions: function preventExtensions(target){
+ anObject(target);
+ try {
+ if($preventExtensions)$preventExtensions(target);
+ return true;
+ } catch(e){
+ return false;
+ }
+ }
+});
+},{"22":22,"4":4}],151:[function(_dereq_,module,exports){
+// 26.1.14 Reflect.setPrototypeOf(target, proto)
+var $export = _dereq_(22)
+ , setProto = _dereq_(64);
+
+if(setProto)$export($export.S, 'Reflect', {
+ setPrototypeOf: function setPrototypeOf(target, proto){
+ setProto.check(target, proto);
+ try {
+ setProto.set(target, proto);
+ return true;
+ } catch(e){
+ return false;
+ }
+ }
+});
+},{"22":22,"64":64}],152:[function(_dereq_,module,exports){
+// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])
+var $ = _dereq_(46)
+ , has = _dereq_(30)
+ , $export = _dereq_(22)
+ , createDesc = _dereq_(59)
+ , anObject = _dereq_(4)
+ , isObject = _dereq_(38);
+
+function set(target, propertyKey, V/*, receiver*/){
+ var receiver = arguments.length < 4 ? target : arguments[3]
+ , ownDesc = $.getDesc(anObject(target), propertyKey)
+ , existingDescriptor, proto;
+ if(!ownDesc){
+ if(isObject(proto = $.getProto(target))){
+ return set(proto, propertyKey, V, receiver);
+ }
+ ownDesc = createDesc(0);
+ }
+ if(has(ownDesc, 'value')){
+ if(ownDesc.writable === false || !isObject(receiver))return false;
+ existingDescriptor = $.getDesc(receiver, propertyKey) || createDesc(0);
+ existingDescriptor.value = V;
+ $.setDesc(receiver, propertyKey, existingDescriptor);
+ return true;
+ }
+ return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);
+}
+
+$export($export.S, 'Reflect', {set: set});
+},{"22":22,"30":30,"38":38,"4":4,"46":46,"59":59}],153:[function(_dereq_,module,exports){
+var $ = _dereq_(46)
+ , global = _dereq_(29)
+ , isRegExp = _dereq_(39)
+ , $flags = _dereq_(26)
+ , $RegExp = global.RegExp
+ , Base = $RegExp
+ , proto = $RegExp.prototype
+ , re1 = /a/g
+ , re2 = /a/g
+ // "new" creates a new object, old webkit buggy here
+ , CORRECT_NEW = new $RegExp(re1) !== re1;
+
+if(_dereq_(19) && (!CORRECT_NEW || _dereq_(24)(function(){
+ re2[_dereq_(83)('match')] = false;
+ // RegExp constructor can alter flags and IsRegExp works correct with @@match
+ return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';
+}))){
+ $RegExp = function RegExp(p, f){
+ var piRE = isRegExp(p)
+ , fiU = f === undefined;
+ return !(this instanceof $RegExp) && piRE && p.constructor === $RegExp && fiU ? p
+ : CORRECT_NEW
+ ? new Base(piRE && !fiU ? p.source : p, f)
+ : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f);
+ };
+ $.each.call($.getNames(Base), function(key){
+ key in $RegExp || $.setDesc($RegExp, key, {
+ configurable: true,
+ get: function(){ return Base[key]; },
+ set: function(it){ Base[key] = it; }
+ });
+ });
+ proto.constructor = $RegExp;
+ $RegExp.prototype = proto;
+ _dereq_(61)(global, 'RegExp', $RegExp);
+}
+
+_dereq_(65)('RegExp');
+},{"19":19,"24":24,"26":26,"29":29,"39":39,"46":46,"61":61,"65":65,"83":83}],154:[function(_dereq_,module,exports){
+// 21.2.5.3 get RegExp.prototype.flags()
+var $ = _dereq_(46);
+if(_dereq_(19) && /./g.flags != 'g')$.setDesc(RegExp.prototype, 'flags', {
+ configurable: true,
+ get: _dereq_(26)
+});
+},{"19":19,"26":26,"46":46}],155:[function(_dereq_,module,exports){
+// @@match logic
+_dereq_(25)('match', 1, function(defined, MATCH){
+ // 21.1.3.11 String.prototype.match(regexp)
+ return function match(regexp){
+ 'use strict';
+ var O = defined(this)
+ , fn = regexp == undefined ? undefined : regexp[MATCH];
+ return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));
+ };
+});
+},{"25":25}],156:[function(_dereq_,module,exports){
+// @@replace logic
+_dereq_(25)('replace', 2, function(defined, REPLACE, $replace){
+ // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)
+ return function replace(searchValue, replaceValue){
+ 'use strict';
+ var O = defined(this)
+ , fn = searchValue == undefined ? undefined : searchValue[REPLACE];
+ return fn !== undefined
+ ? fn.call(searchValue, O, replaceValue)
+ : $replace.call(String(O), searchValue, replaceValue);
+ };
+});
+},{"25":25}],157:[function(_dereq_,module,exports){
+// @@search logic
+_dereq_(25)('search', 1, function(defined, SEARCH){
+ // 21.1.3.15 String.prototype.search(regexp)
+ return function search(regexp){
+ 'use strict';
+ var O = defined(this)
+ , fn = regexp == undefined ? undefined : regexp[SEARCH];
+ return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));
+ };
+});
+},{"25":25}],158:[function(_dereq_,module,exports){
+// @@split logic
+_dereq_(25)('split', 2, function(defined, SPLIT, $split){
+ // 21.1.3.17 String.prototype.split(separator, limit)
+ return function split(separator, limit){
+ 'use strict';
+ var O = defined(this)
+ , fn = separator == undefined ? undefined : separator[SPLIT];
+ return fn !== undefined
+ ? fn.call(separator, O, limit)
+ : $split.call(String(O), separator, limit);
+ };
+});
+},{"25":25}],159:[function(_dereq_,module,exports){
+'use strict';
+var strong = _dereq_(12);
+
+// 23.2 Set Objects
+_dereq_(15)('Set', function(get){
+ return function Set(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };
+}, {
+ // 23.2.3.1 Set.prototype.add(value)
+ add: function add(value){
+ return strong.def(this, value = value === 0 ? 0 : value, value);
+ }
+}, strong);
+},{"12":12,"15":15}],160:[function(_dereq_,module,exports){
+'use strict';
+var $export = _dereq_(22)
+ , $at = _dereq_(70)(false);
+$export($export.P, 'String', {
+ // 21.1.3.3 String.prototype.codePointAt(pos)
+ codePointAt: function codePointAt(pos){
+ return $at(this, pos);
+ }
+});
+},{"22":22,"70":70}],161:[function(_dereq_,module,exports){
+// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])
+'use strict';
+var $export = _dereq_(22)
+ , toLength = _dereq_(79)
+ , context = _dereq_(71)
+ , ENDS_WITH = 'endsWith'
+ , $endsWith = ''[ENDS_WITH];
+
+$export($export.P + $export.F * _dereq_(23)(ENDS_WITH), 'String', {
+ endsWith: function endsWith(searchString /*, endPosition = @length */){
+ var that = context(this, searchString, ENDS_WITH)
+ , $$ = arguments
+ , endPosition = $$.length > 1 ? $$[1] : undefined
+ , len = toLength(that.length)
+ , end = endPosition === undefined ? len : Math.min(toLength(endPosition), len)
+ , search = String(searchString);
+ return $endsWith
+ ? $endsWith.call(that, search, end)
+ : that.slice(end - search.length, end) === search;
+ }
+});
+},{"22":22,"23":23,"71":71,"79":79}],162:[function(_dereq_,module,exports){
+var $export = _dereq_(22)
+ , toIndex = _dereq_(76)
+ , fromCharCode = String.fromCharCode
+ , $fromCodePoint = String.fromCodePoint;
+
+// length should be 1, old FF problem
+$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {
+ // 21.1.2.2 String.fromCodePoint(...codePoints)
+ fromCodePoint: function fromCodePoint(x){ // eslint-disable-line no-unused-vars
+ var res = []
+ , $$ = arguments
+ , $$len = $$.length
+ , i = 0
+ , code;
+ while($$len > i){
+ code = +$$[i++];
+ if(toIndex(code, 0x10ffff) !== code)throw RangeError(code + ' is not a valid code point');
+ res.push(code < 0x10000
+ ? fromCharCode(code)
+ : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)
+ );
+ } return res.join('');
+ }
+});
+},{"22":22,"76":76}],163:[function(_dereq_,module,exports){
+// 21.1.3.7 String.prototype.includes(searchString, position = 0)
+'use strict';
+var $export = _dereq_(22)
+ , context = _dereq_(71)
+ , INCLUDES = 'includes';
+
+$export($export.P + $export.F * _dereq_(23)(INCLUDES), 'String', {
+ includes: function includes(searchString /*, position = 0 */){
+ return !!~context(this, searchString, INCLUDES)
+ .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);
+ }
+});
+},{"22":22,"23":23,"71":71}],164:[function(_dereq_,module,exports){
+'use strict';
+var $at = _dereq_(70)(true);
+
+// 21.1.3.27 String.prototype[@@iterator]()
+_dereq_(42)(String, 'String', function(iterated){
+ this._t = String(iterated); // target
+ this._i = 0; // next index
+// 21.1.5.2.1 %StringIteratorPrototype%.next()
+}, function(){
+ var O = this._t
+ , index = this._i
+ , point;
+ if(index >= O.length)return {value: undefined, done: true};
+ point = $at(O, index);
+ this._i += point.length;
+ return {value: point, done: false};
+});
+},{"42":42,"70":70}],165:[function(_dereq_,module,exports){
+var $export = _dereq_(22)
+ , toIObject = _dereq_(78)
+ , toLength = _dereq_(79);
+
+$export($export.S, 'String', {
+ // 21.1.2.4 String.raw(callSite, ...substitutions)
+ raw: function raw(callSite){
+ var tpl = toIObject(callSite.raw)
+ , len = toLength(tpl.length)
+ , $$ = arguments
+ , $$len = $$.length
+ , res = []
+ , i = 0;
+ while(len > i){
+ res.push(String(tpl[i++]));
+ if(i < $$len)res.push(String($$[i]));
+ } return res.join('');
+ }
+});
+},{"22":22,"78":78,"79":79}],166:[function(_dereq_,module,exports){
+var $export = _dereq_(22);
+
+$export($export.P, 'String', {
+ // 21.1.3.13 String.prototype.repeat(count)
+ repeat: _dereq_(73)
+});
+},{"22":22,"73":73}],167:[function(_dereq_,module,exports){
+// 21.1.3.18 String.prototype.startsWith(searchString [, position ])
+'use strict';
+var $export = _dereq_(22)
+ , toLength = _dereq_(79)
+ , context = _dereq_(71)
+ , STARTS_WITH = 'startsWith'
+ , $startsWith = ''[STARTS_WITH];
+
+$export($export.P + $export.F * _dereq_(23)(STARTS_WITH), 'String', {
+ startsWith: function startsWith(searchString /*, position = 0 */){
+ var that = context(this, searchString, STARTS_WITH)
+ , $$ = arguments
+ , index = toLength(Math.min($$.length > 1 ? $$[1] : undefined, that.length))
+ , search = String(searchString);
+ return $startsWith
+ ? $startsWith.call(that, search, index)
+ : that.slice(index, index + search.length) === search;
+ }
+});
+},{"22":22,"23":23,"71":71,"79":79}],168:[function(_dereq_,module,exports){
+'use strict';
+// 21.1.3.25 String.prototype.trim()
+_dereq_(74)('trim', function($trim){
+ return function trim(){
+ return $trim(this, 3);
+ };
+});
+},{"74":74}],169:[function(_dereq_,module,exports){
+'use strict';
+// ECMAScript 6 symbols shim
+var $ = _dereq_(46)
+ , global = _dereq_(29)
+ , has = _dereq_(30)
+ , DESCRIPTORS = _dereq_(19)
+ , $export = _dereq_(22)
+ , redefine = _dereq_(61)
+ , $fails = _dereq_(24)
+ , shared = _dereq_(67)
+ , setToStringTag = _dereq_(66)
+ , uid = _dereq_(82)
+ , wks = _dereq_(83)
+ , keyOf = _dereq_(47)
+ , $names = _dereq_(28)
+ , enumKeys = _dereq_(21)
+ , isArray = _dereq_(36)
+ , anObject = _dereq_(4)
+ , toIObject = _dereq_(78)
+ , createDesc = _dereq_(59)
+ , getDesc = $.getDesc
+ , setDesc = $.setDesc
+ , _create = $.create
+ , getNames = $names.get
+ , $Symbol = global.Symbol
+ , $JSON = global.JSON
+ , _stringify = $JSON && $JSON.stringify
+ , setter = false
+ , HIDDEN = wks('_hidden')
+ , isEnum = $.isEnum
+ , SymbolRegistry = shared('symbol-registry')
+ , AllSymbols = shared('symbols')
+ , useNative = typeof $Symbol == 'function'
+ , ObjectProto = Object.prototype;
+
+// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
+var setSymbolDesc = DESCRIPTORS && $fails(function(){
+ return _create(setDesc({}, 'a', {
+ get: function(){ return setDesc(this, 'a', {value: 7}).a; }
+ })).a != 7;
+}) ? function(it, key, D){
+ var protoDesc = getDesc(ObjectProto, key);
+ if(protoDesc)delete ObjectProto[key];
+ setDesc(it, key, D);
+ if(protoDesc && it !== ObjectProto)setDesc(ObjectProto, key, protoDesc);
+} : setDesc;
+
+var wrap = function(tag){
+ var sym = AllSymbols[tag] = _create($Symbol.prototype);
+ sym._k = tag;
+ DESCRIPTORS && setter && setSymbolDesc(ObjectProto, tag, {
+ configurable: true,
+ set: function(value){
+ if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;
+ setSymbolDesc(this, tag, createDesc(1, value));
+ }
+ });
+ return sym;
+};
+
+var isSymbol = function(it){
+ return typeof it == 'symbol';
+};
+
+var $defineProperty = function defineProperty(it, key, D){
+ if(D && has(AllSymbols, key)){
+ if(!D.enumerable){
+ if(!has(it, HIDDEN))setDesc(it, HIDDEN, createDesc(1, {}));
+ it[HIDDEN][key] = true;
+ } else {
+ if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;
+ D = _create(D, {enumerable: createDesc(0, false)});
+ } return setSymbolDesc(it, key, D);
+ } return setDesc(it, key, D);
+};
+var $defineProperties = function defineProperties(it, P){
+ anObject(it);
+ var keys = enumKeys(P = toIObject(P))
+ , i = 0
+ , l = keys.length
+ , key;
+ while(l > i)$defineProperty(it, key = keys[i++], P[key]);
+ return it;
+};
+var $create = function create(it, P){
+ return P === undefined ? _create(it) : $defineProperties(_create(it), P);
+};
+var $propertyIsEnumerable = function propertyIsEnumerable(key){
+ var E = isEnum.call(this, key);
+ return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key]
+ ? E : true;
+};
+var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){
+ var D = getDesc(it = toIObject(it), key);
+ if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;
+ return D;
+};
+var $getOwnPropertyNames = function getOwnPropertyNames(it){
+ var names = getNames(toIObject(it))
+ , result = []
+ , i = 0
+ , key;
+ while(names.length > i)if(!has(AllSymbols, key = names[i++]) && key != HIDDEN)result.push(key);
+ return result;
+};
+var $getOwnPropertySymbols = function getOwnPropertySymbols(it){
+ var names = getNames(toIObject(it))
+ , result = []
+ , i = 0
+ , key;
+ while(names.length > i)if(has(AllSymbols, key = names[i++]))result.push(AllSymbols[key]);
+ return result;
+};
+var $stringify = function stringify(it){
+ if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined
+ var args = [it]
+ , i = 1
+ , $$ = arguments
+ , replacer, $replacer;
+ while($$.length > i)args.push($$[i++]);
+ replacer = args[1];
+ if(typeof replacer == 'function')$replacer = replacer;
+ if($replacer || !isArray(replacer))replacer = function(key, value){
+ if($replacer)value = $replacer.call(this, key, value);
+ if(!isSymbol(value))return value;
+ };
+ args[1] = replacer;
+ return _stringify.apply($JSON, args);
+};
+var buggyJSON = $fails(function(){
+ var S = $Symbol();
+ // MS Edge converts symbol values to JSON as {}
+ // WebKit converts symbol values to JSON as null
+ // V8 throws on boxed symbols
+ return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';
+});
+
+// 19.4.1.1 Symbol([description])
+if(!useNative){
+ $Symbol = function Symbol(){
+ if(isSymbol(this))throw TypeError('Symbol is not a constructor');
+ return wrap(uid(arguments.length > 0 ? arguments[0] : undefined));
+ };
+ redefine($Symbol.prototype, 'toString', function toString(){
+ return this._k;
+ });
+
+ isSymbol = function(it){
+ return it instanceof $Symbol;
+ };
+
+ $.create = $create;
+ $.isEnum = $propertyIsEnumerable;
+ $.getDesc = $getOwnPropertyDescriptor;
+ $.setDesc = $defineProperty;
+ $.setDescs = $defineProperties;
+ $.getNames = $names.get = $getOwnPropertyNames;
+ $.getSymbols = $getOwnPropertySymbols;
+
+ if(DESCRIPTORS && !_dereq_(48)){
+ redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
+ }
+}
+
+var symbolStatics = {
+ // 19.4.2.1 Symbol.for(key)
+ 'for': function(key){
+ return has(SymbolRegistry, key += '')
+ ? SymbolRegistry[key]
+ : SymbolRegistry[key] = $Symbol(key);
+ },
+ // 19.4.2.5 Symbol.keyFor(sym)
+ keyFor: function keyFor(key){
+ return keyOf(SymbolRegistry, key);
+ },
+ useSetter: function(){ setter = true; },
+ useSimple: function(){ setter = false; }
+};
+// 19.4.2.2 Symbol.hasInstance
+// 19.4.2.3 Symbol.isConcatSpreadable
+// 19.4.2.4 Symbol.iterator
+// 19.4.2.6 Symbol.match
+// 19.4.2.8 Symbol.replace
+// 19.4.2.9 Symbol.search
+// 19.4.2.10 Symbol.species
+// 19.4.2.11 Symbol.split
+// 19.4.2.12 Symbol.toPrimitive
+// 19.4.2.13 Symbol.toStringTag
+// 19.4.2.14 Symbol.unscopables
+$.each.call((
+ 'hasInstance,isConcatSpreadable,iterator,match,replace,search,' +
+ 'species,split,toPrimitive,toStringTag,unscopables'
+).split(','), function(it){
+ var sym = wks(it);
+ symbolStatics[it] = useNative ? sym : wrap(sym);
+});
+
+setter = true;
+
+$export($export.G + $export.W, {Symbol: $Symbol});
+
+$export($export.S, 'Symbol', symbolStatics);
+
+$export($export.S + $export.F * !useNative, 'Object', {
+ // 19.1.2.2 Object.create(O [, Properties])
+ create: $create,
+ // 19.1.2.4 Object.defineProperty(O, P, Attributes)
+ defineProperty: $defineProperty,
+ // 19.1.2.3 Object.defineProperties(O, Properties)
+ defineProperties: $defineProperties,
+ // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
+ getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
+ // 19.1.2.7 Object.getOwnPropertyNames(O)
+ getOwnPropertyNames: $getOwnPropertyNames,
+ // 19.1.2.8 Object.getOwnPropertySymbols(O)
+ getOwnPropertySymbols: $getOwnPropertySymbols
+});
+
+// 24.3.2 JSON.stringify(value [, replacer [, space]])
+$JSON && $export($export.S + $export.F * (!useNative || buggyJSON), 'JSON', {stringify: $stringify});
+
+// 19.4.3.5 Symbol.prototype[@@toStringTag]
+setToStringTag($Symbol, 'Symbol');
+// 20.2.1.9 Math[@@toStringTag]
+setToStringTag(Math, 'Math', true);
+// 24.3.3 JSON[@@toStringTag]
+setToStringTag(global.JSON, 'JSON', true);
+},{"19":19,"21":21,"22":22,"24":24,"28":28,"29":29,"30":30,"36":36,"4":4,"46":46,"47":47,"48":48,"59":59,"61":61,"66":66,"67":67,"78":78,"82":82,"83":83}],170:[function(_dereq_,module,exports){
+'use strict';
+var $ = _dereq_(46)
+ , redefine = _dereq_(61)
+ , weak = _dereq_(14)
+ , isObject = _dereq_(38)
+ , has = _dereq_(30)
+ , frozenStore = weak.frozenStore
+ , WEAK = weak.WEAK
+ , isExtensible = Object.isExtensible || isObject
+ , tmp = {};
+
+// 23.3 WeakMap Objects
+var $WeakMap = _dereq_(15)('WeakMap', function(get){
+ return function WeakMap(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };
+}, {
+ // 23.3.3.3 WeakMap.prototype.get(key)
+ get: function get(key){
+ if(isObject(key)){
+ if(!isExtensible(key))return frozenStore(this).get(key);
+ if(has(key, WEAK))return key[WEAK][this._i];
+ }
+ },
+ // 23.3.3.5 WeakMap.prototype.set(key, value)
+ set: function set(key, value){
+ return weak.def(this, key, value);
+ }
+}, weak, true, true);
+
+// IE11 WeakMap frozen keys fix
+if(new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7){
+ $.each.call(['delete', 'has', 'get', 'set'], function(key){
+ var proto = $WeakMap.prototype
+ , method = proto[key];
+ redefine(proto, key, function(a, b){
+ // store frozen objects on leaky map
+ if(isObject(a) && !isExtensible(a)){
+ var result = frozenStore(this)[key](a, b);
+ return key == 'set' ? this : result;
+ // store all the rest on native weakmap
+ } return method.call(this, a, b);
+ });
+ });
+}
+},{"14":14,"15":15,"30":30,"38":38,"46":46,"61":61}],171:[function(_dereq_,module,exports){
+'use strict';
+var weak = _dereq_(14);
+
+// 23.4 WeakSet Objects
+_dereq_(15)('WeakSet', function(get){
+ return function WeakSet(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };
+}, {
+ // 23.4.3.1 WeakSet.prototype.add(value)
+ add: function add(value){
+ return weak.def(this, value, true);
+ }
+}, weak, false, true);
+},{"14":14,"15":15}],172:[function(_dereq_,module,exports){
+'use strict';
+var $export = _dereq_(22)
+ , $includes = _dereq_(7)(true);
+
+$export($export.P, 'Array', {
+ // https://github.com/domenic/Array.prototype.includes
+ includes: function includes(el /*, fromIndex = 0 */){
+ return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
+ }
+});
+
+_dereq_(3)('includes');
+},{"22":22,"3":3,"7":7}],173:[function(_dereq_,module,exports){
+// https://github.com/DavidBruant/Map-Set.prototype.toJSON
+var $export = _dereq_(22);
+
+$export($export.P, 'Map', {toJSON: _dereq_(13)('Map')});
+},{"13":13,"22":22}],174:[function(_dereq_,module,exports){
+// http://goo.gl/XkBrjD
+var $export = _dereq_(22)
+ , $entries = _dereq_(55)(true);
+
+$export($export.S, 'Object', {
+ entries: function entries(it){
+ return $entries(it);
+ }
+});
+},{"22":22,"55":55}],175:[function(_dereq_,module,exports){
+// https://gist.github.com/WebReflection/9353781
+var $ = _dereq_(46)
+ , $export = _dereq_(22)
+ , ownKeys = _dereq_(56)
+ , toIObject = _dereq_(78)
+ , createDesc = _dereq_(59);
+
+$export($export.S, 'Object', {
+ getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object){
+ var O = toIObject(object)
+ , setDesc = $.setDesc
+ , getDesc = $.getDesc
+ , keys = ownKeys(O)
+ , result = {}
+ , i = 0
+ , key, D;
+ while(keys.length > i){
+ D = getDesc(O, key = keys[i++]);
+ if(key in result)setDesc(result, key, createDesc(0, D));
+ else result[key] = D;
+ } return result;
+ }
+});
+},{"22":22,"46":46,"56":56,"59":59,"78":78}],176:[function(_dereq_,module,exports){
+// http://goo.gl/XkBrjD
+var $export = _dereq_(22)
+ , $values = _dereq_(55)(false);
+
+$export($export.S, 'Object', {
+ values: function values(it){
+ return $values(it);
+ }
+});
+},{"22":22,"55":55}],177:[function(_dereq_,module,exports){
+// https://github.com/benjamingr/RexExp.escape
+var $export = _dereq_(22)
+ , $re = _dereq_(62)(/[\\^$*+?.()|[\]{}]/g, '\\$&');
+
+$export($export.S, 'RegExp', {escape: function escape(it){ return $re(it); }});
+
+},{"22":22,"62":62}],178:[function(_dereq_,module,exports){
+// https://github.com/DavidBruant/Map-Set.prototype.toJSON
+var $export = _dereq_(22);
+
+$export($export.P, 'Set', {toJSON: _dereq_(13)('Set')});
+},{"13":13,"22":22}],179:[function(_dereq_,module,exports){
+'use strict';
+// https://github.com/mathiasbynens/String.prototype.at
+var $export = _dereq_(22)
+ , $at = _dereq_(70)(true);
+
+$export($export.P, 'String', {
+ at: function at(pos){
+ return $at(this, pos);
+ }
+});
+},{"22":22,"70":70}],180:[function(_dereq_,module,exports){
+'use strict';
+var $export = _dereq_(22)
+ , $pad = _dereq_(72);
+
+$export($export.P, 'String', {
+ padLeft: function padLeft(maxLength /*, fillString = ' ' */){
+ return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);
+ }
+});
+},{"22":22,"72":72}],181:[function(_dereq_,module,exports){
+'use strict';
+var $export = _dereq_(22)
+ , $pad = _dereq_(72);
+
+$export($export.P, 'String', {
+ padRight: function padRight(maxLength /*, fillString = ' ' */){
+ return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);
+ }
+});
+},{"22":22,"72":72}],182:[function(_dereq_,module,exports){
+'use strict';
+// https://github.com/sebmarkbage/ecmascript-string-left-right-trim
+_dereq_(74)('trimLeft', function($trim){
+ return function trimLeft(){
+ return $trim(this, 1);
+ };
+});
+},{"74":74}],183:[function(_dereq_,module,exports){
+'use strict';
+// https://github.com/sebmarkbage/ecmascript-string-left-right-trim
+_dereq_(74)('trimRight', function($trim){
+ return function trimRight(){
+ return $trim(this, 2);
+ };
+});
+},{"74":74}],184:[function(_dereq_,module,exports){
+// JavaScript 1.6 / Strawman array statics shim
+var $ = _dereq_(46)
+ , $export = _dereq_(22)
+ , $ctx = _dereq_(17)
+ , $Array = _dereq_(16).Array || Array
+ , statics = {};
+var setStatics = function(keys, length){
+ $.each.call(keys.split(','), function(key){
+ if(length == undefined && key in $Array)statics[key] = $Array[key];
+ else if(key in [])statics[key] = $ctx(Function.call, [][key], length);
+ });
+};
+setStatics('pop,reverse,shift,keys,values,entries', 1);
+setStatics('indexOf,every,some,forEach,map,filter,find,findIndex,includes', 3);
+setStatics('join,slice,concat,push,splice,unshift,sort,lastIndexOf,' +
+ 'reduce,reduceRight,copyWithin,fill');
+$export($export.S, 'Array', statics);
+},{"16":16,"17":17,"22":22,"46":46}],185:[function(_dereq_,module,exports){
+_dereq_(91);
+var global = _dereq_(29)
+ , hide = _dereq_(31)
+ , Iterators = _dereq_(45)
+ , ITERATOR = _dereq_(83)('iterator')
+ , NL = global.NodeList
+ , HTC = global.HTMLCollection
+ , NLProto = NL && NL.prototype
+ , HTCProto = HTC && HTC.prototype
+ , ArrayValues = Iterators.NodeList = Iterators.HTMLCollection = Iterators.Array;
+if(NLProto && !NLProto[ITERATOR])hide(NLProto, ITERATOR, ArrayValues);
+if(HTCProto && !HTCProto[ITERATOR])hide(HTCProto, ITERATOR, ArrayValues);
+},{"29":29,"31":31,"45":45,"83":83,"91":91}],186:[function(_dereq_,module,exports){
+var $export = _dereq_(22)
+ , $task = _dereq_(75);
+$export($export.G + $export.B, {
+ setImmediate: $task.set,
+ clearImmediate: $task.clear
+});
+},{"22":22,"75":75}],187:[function(_dereq_,module,exports){
+// ie9- setTimeout & setInterval additional parameters fix
+var global = _dereq_(29)
+ , $export = _dereq_(22)
+ , invoke = _dereq_(33)
+ , partial = _dereq_(57)
+ , navigator = global.navigator
+ , MSIE = !!navigator && /MSIE .\./.test(navigator.userAgent); // <- dirty ie9- check
+var wrap = function(set){
+ return MSIE ? function(fn, time /*, ...args */){
+ return set(invoke(
+ partial,
+ [].slice.call(arguments, 2),
+ typeof fn == 'function' ? fn : Function(fn)
+ ), time);
+ } : set;
+};
+$export($export.G + $export.B + $export.F * MSIE, {
+ setTimeout: wrap(global.setTimeout),
+ setInterval: wrap(global.setInterval)
+});
+},{"22":22,"29":29,"33":33,"57":57}],188:[function(_dereq_,module,exports){
+_dereq_(85);
+_dereq_(169);
+_dereq_(124);
+_dereq_(132);
+_dereq_(136);
+_dereq_(137);
+_dereq_(125);
+_dereq_(135);
+_dereq_(134);
+_dereq_(130);
+_dereq_(131);
+_dereq_(129);
+_dereq_(126);
+_dereq_(128);
+_dereq_(133);
+_dereq_(127);
+_dereq_(95);
+_dereq_(94);
+_dereq_(114);
+_dereq_(115);
+_dereq_(116);
+_dereq_(117);
+_dereq_(118);
+_dereq_(119);
+_dereq_(120);
+_dereq_(121);
+_dereq_(122);
+_dereq_(123);
+_dereq_(97);
+_dereq_(98);
+_dereq_(99);
+_dereq_(100);
+_dereq_(101);
+_dereq_(102);
+_dereq_(103);
+_dereq_(104);
+_dereq_(105);
+_dereq_(106);
+_dereq_(107);
+_dereq_(108);
+_dereq_(109);
+_dereq_(110);
+_dereq_(111);
+_dereq_(112);
+_dereq_(113);
+_dereq_(162);
+_dereq_(165);
+_dereq_(168);
+_dereq_(164);
+_dereq_(160);
+_dereq_(161);
+_dereq_(163);
+_dereq_(166);
+_dereq_(167);
+_dereq_(90);
+_dereq_(92);
+_dereq_(91);
+_dereq_(93);
+_dereq_(86);
+_dereq_(87);
+_dereq_(89);
+_dereq_(88);
+_dereq_(153);
+_dereq_(154);
+_dereq_(155);
+_dereq_(156);
+_dereq_(157);
+_dereq_(158);
+_dereq_(138);
+_dereq_(96);
+_dereq_(159);
+_dereq_(170);
+_dereq_(171);
+_dereq_(139);
+_dereq_(140);
+_dereq_(141);
+_dereq_(142);
+_dereq_(143);
+_dereq_(146);
+_dereq_(144);
+_dereq_(145);
+_dereq_(147);
+_dereq_(148);
+_dereq_(149);
+_dereq_(150);
+_dereq_(152);
+_dereq_(151);
+_dereq_(172);
+_dereq_(179);
+_dereq_(180);
+_dereq_(181);
+_dereq_(182);
+_dereq_(183);
+_dereq_(177);
+_dereq_(175);
+_dereq_(176);
+_dereq_(174);
+_dereq_(173);
+_dereq_(178);
+_dereq_(184);
+_dereq_(187);
+_dereq_(186);
+_dereq_(185);
+module.exports = _dereq_(16);
+},{"100":100,"101":101,"102":102,"103":103,"104":104,"105":105,"106":106,"107":107,"108":108,"109":109,"110":110,"111":111,"112":112,"113":113,"114":114,"115":115,"116":116,"117":117,"118":118,"119":119,"120":120,"121":121,"122":122,"123":123,"124":124,"125":125,"126":126,"127":127,"128":128,"129":129,"130":130,"131":131,"132":132,"133":133,"134":134,"135":135,"136":136,"137":137,"138":138,"139":139,"140":140,"141":141,"142":142,"143":143,"144":144,"145":145,"146":146,"147":147,"148":148,"149":149,"150":150,"151":151,"152":152,"153":153,"154":154,"155":155,"156":156,"157":157,"158":158,"159":159,"16":16,"160":160,"161":161,"162":162,"163":163,"164":164,"165":165,"166":166,"167":167,"168":168,"169":169,"170":170,"171":171,"172":172,"173":173,"174":174,"175":175,"176":176,"177":177,"178":178,"179":179,"180":180,"181":181,"182":182,"183":183,"184":184,"185":185,"186":186,"187":187,"85":85,"86":86,"87":87,"88":88,"89":89,"90":90,"91":91,"92":92,"93":93,"94":94,"95":95,"96":96,"97":97,"98":98,"99":99}],189:[function(_dereq_,module,exports){
+(function (global){
+/**
+ * Copyright (c) 2014, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * https://raw.github.com/facebook/regenerator/master/LICENSE file. An
+ * additional grant of patent rights can be found in the PATENTS file in
+ * the same directory.
+ */
+
+!(function(global) {
+ "use strict";
+
+ var hasOwn = Object.prototype.hasOwnProperty;
+ var undefined; // More compressible than void 0.
+ var iteratorSymbol =
+ typeof Symbol === "function" && Symbol.iterator || "@@iterator";
+
+ var inModule = typeof module === "object";
+ var runtime = global.regeneratorRuntime;
+ if (runtime) {
+ if (inModule) {
+ // If regeneratorRuntime is defined globally and we're in a module,
+ // make the exports object identical to regeneratorRuntime.
+ module.exports = runtime;
+ }
+ // Don't bother evaluating the rest of this file if the runtime was
+ // already defined globally.
+ return;
+ }
+
+ // Define the runtime globally (as expected by generated code) as either
+ // module.exports (if we're in a module) or a new, empty object.
+ runtime = global.regeneratorRuntime = inModule ? module.exports : {};
+
+ function wrap(innerFn, outerFn, self, tryLocsList) {
+ // If outerFn provided, then outerFn.prototype instanceof Generator.
+ var generator = Object.create((outerFn || Generator).prototype);
+ var context = new Context(tryLocsList || []);
+
+ // The ._invoke method unifies the implementations of the .next,
+ // .throw, and .return methods.
+ generator._invoke = makeInvokeMethod(innerFn, self, context);
+
+ return generator;
+ }
+ runtime.wrap = wrap;
+
+ // Try/catch helper to minimize deoptimizations. Returns a completion
+ // record like context.tryEntries[i].completion. This interface could
+ // have been (and was previously) designed to take a closure to be
+ // invoked without arguments, but in all the cases we care about we
+ // already have an existing method we want to call, so there's no need
+ // to create a new function object. We can even get away with assuming
+ // the method takes exactly one argument, since that happens to be true
+ // in every case, so we don't have to touch the arguments object. The
+ // only additional allocation required is the completion record, which
+ // has a stable shape and so hopefully should be cheap to allocate.
+ function tryCatch(fn, obj, arg) {
+ try {
+ return { type: "normal", arg: fn.call(obj, arg) };
+ } catch (err) {
+ return { type: "throw", arg: err };
+ }
+ }
+
+ var GenStateSuspendedStart = "suspendedStart";
+ var GenStateSuspendedYield = "suspendedYield";
+ var GenStateExecuting = "executing";
+ var GenStateCompleted = "completed";
+
+ // Returning this object from the innerFn has the same effect as
+ // breaking out of the dispatch switch statement.
+ var ContinueSentinel = {};
+
+ // Dummy constructor functions that we use as the .constructor and
+ // .constructor.prototype properties for functions that return Generator
+ // objects. For full spec compliance, you may wish to configure your
+ // minifier not to mangle the names of these two functions.
+ function Generator() {}
+ function GeneratorFunction() {}
+ function GeneratorFunctionPrototype() {}
+
+ var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;
+ GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
+ GeneratorFunctionPrototype.constructor = GeneratorFunction;
+ GeneratorFunction.displayName = "GeneratorFunction";
+
+ // Helper for defining the .next, .throw, and .return methods of the
+ // Iterator interface in terms of a single ._invoke method.
+ function defineIteratorMethods(prototype) {
+ ["next", "throw", "return"].forEach(function(method) {
+ prototype[method] = function(arg) {
+ return this._invoke(method, arg);
+ };
+ });
+ }
+
+ runtime.isGeneratorFunction = function(genFun) {
+ var ctor = typeof genFun === "function" && genFun.constructor;
+ return ctor
+ ? ctor === GeneratorFunction ||
+ // For the native GeneratorFunction constructor, the best we can
+ // do is to check its .name property.
+ (ctor.displayName || ctor.name) === "GeneratorFunction"
+ : false;
+ };
+
+ runtime.mark = function(genFun) {
+ if (Object.setPrototypeOf) {
+ Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
+ } else {
+ genFun.__proto__ = GeneratorFunctionPrototype;
+ }
+ genFun.prototype = Object.create(Gp);
+ return genFun;
+ };
+
+ // Within the body of any async function, `await x` is transformed to
+ // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
+ // `value instanceof AwaitArgument` to determine if the yielded value is
+ // meant to be awaited. Some may consider the name of this method too
+ // cutesy, but they are curmudgeons.
+ runtime.awrap = function(arg) {
+ return new AwaitArgument(arg);
+ };
+
+ function AwaitArgument(arg) {
+ this.arg = arg;
+ }
+
+ function AsyncIterator(generator) {
+ // This invoke function is written in a style that assumes some
+ // calling function (or Promise) will handle exceptions.
+ function invoke(method, arg) {
+ var result = generator[method](arg);
+ var value = result.value;
+ return value instanceof AwaitArgument
+ ? Promise.resolve(value.arg).then(invokeNext, invokeThrow)
+ : Promise.resolve(value).then(function(unwrapped) {
+ // When a yielded Promise is resolved, its final value becomes
+ // the .value of the Promise<{value,done}> result for the
+ // current iteration. If the Promise is rejected, however, the
+ // result for this iteration will be rejected with the same
+ // reason. Note that rejections of yielded Promises are not
+ // thrown back into the generator function, as is the case
+ // when an awaited Promise is rejected. This difference in
+ // behavior between yield and await is important, because it
+ // allows the consumer to decide what to do with the yielded
+ // rejection (swallow it and continue, manually .throw it back
+ // into the generator, abandon iteration, whatever). With
+ // await, by contrast, there is no opportunity to examine the
+ // rejection reason outside the generator function, so the
+ // only option is to throw it from the await expression, and
+ // let the generator function handle the exception.
+ result.value = unwrapped;
+ return result;
+ });
+ }
+
+ if (typeof process === "object" && process.domain) {
+ invoke = process.domain.bind(invoke);
+ }
+
+ var invokeNext = invoke.bind(generator, "next");
+ var invokeThrow = invoke.bind(generator, "throw");
+ var invokeReturn = invoke.bind(generator, "return");
+ var previousPromise;
+
+ function enqueue(method, arg) {
+ function callInvokeWithMethodAndArg() {
+ return invoke(method, arg);
+ }
+
+ return previousPromise =
+ // If enqueue has been called before, then we want to wait until
+ // all previous Promises have been resolved before calling invoke,
+ // so that results are always delivered in the correct order. If
+ // enqueue has not been called before, then it is important to
+ // call invoke immediately, without waiting on a callback to fire,
+ // so that the async generator function has the opportunity to do
+ // any necessary setup in a predictable way. This predictability
+ // is why the Promise constructor synchronously invokes its
+ // executor callback, and why async functions synchronously
+ // execute code before the first await. Since we implement simple
+ // async functions in terms of async generators, it is especially
+ // important to get this right, even though it requires care.
+ previousPromise ? previousPromise.then(
+ callInvokeWithMethodAndArg,
+ // Avoid propagating failures to Promises returned by later
+ // invocations of the iterator.
+ callInvokeWithMethodAndArg
+ ) : new Promise(function (resolve) {
+ resolve(callInvokeWithMethodAndArg());
+ });
+ }
+
+ // Define the unified helper method that is used to implement .next,
+ // .throw, and .return (see defineIteratorMethods).
+ this._invoke = enqueue;
+ }
+
+ defineIteratorMethods(AsyncIterator.prototype);
+
+ // Note that simple async functions are implemented on top of
+ // AsyncIterator objects; they just return a Promise for the value of
+ // the final result produced by the iterator.
+ runtime.async = function(innerFn, outerFn, self, tryLocsList) {
+ var iter = new AsyncIterator(
+ wrap(innerFn, outerFn, self, tryLocsList)
+ );
+
+ return runtime.isGeneratorFunction(outerFn)
+ ? iter // If outerFn is a generator, return the full iterator.
+ : iter.next().then(function(result) {
+ return result.done ? result.value : iter.next();
+ });
+ };
+
+ function makeInvokeMethod(innerFn, self, context) {
+ var state = GenStateSuspendedStart;
+
+ return function invoke(method, arg) {
+ if (state === GenStateExecuting) {
+ throw new Error("Generator is already running");
+ }
+
+ if (state === GenStateCompleted) {
+ if (method === "throw") {
+ throw arg;
+ }
+
+ // Be forgiving, per 25.3.3.3.3 of the spec:
+ // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
+ return doneResult();
+ }
+
+ while (true) {
+ var delegate = context.delegate;
+ if (delegate) {
+ if (method === "return" ||
+ (method === "throw" && delegate.iterator[method] === undefined)) {
+ // A return or throw (when the delegate iterator has no throw
+ // method) always terminates the yield* loop.
+ context.delegate = null;
+
+ // If the delegate iterator has a return method, give it a
+ // chance to clean up.
+ var returnMethod = delegate.iterator["return"];
+ if (returnMethod) {
+ var record = tryCatch(returnMethod, delegate.iterator, arg);
+ if (record.type === "throw") {
+ // If the return method threw an exception, let that
+ // exception prevail over the original return or throw.
+ method = "throw";
+ arg = record.arg;
+ continue;
+ }
+ }
+
+ if (method === "return") {
+ // Continue with the outer return, now that the delegate
+ // iterator has been terminated.
+ continue;
+ }
+ }
+
+ var record = tryCatch(
+ delegate.iterator[method],
+ delegate.iterator,
+ arg
+ );
+
+ if (record.type === "throw") {
+ context.delegate = null;
+
+ // Like returning generator.throw(uncaught), but without the
+ // overhead of an extra function call.
+ method = "throw";
+ arg = record.arg;
+ continue;
+ }
+
+ // Delegate generator ran and handled its own exceptions so
+ // regardless of what the method was, we continue as if it is
+ // "next" with an undefined arg.
+ method = "next";
+ arg = undefined;
+
+ var info = record.arg;
+ if (info.done) {
+ context[delegate.resultName] = info.value;
+ context.next = delegate.nextLoc;
+ } else {
+ state = GenStateSuspendedYield;
+ return info;
+ }
+
+ context.delegate = null;
+ }
+
+ if (method === "next") {
+ if (state === GenStateSuspendedYield) {
+ context.sent = arg;
+ } else {
+ context.sent = undefined;
+ }
+
+ } else if (method === "throw") {
+ if (state === GenStateSuspendedStart) {
+ state = GenStateCompleted;
+ throw arg;
+ }
+
+ if (context.dispatchException(arg)) {
+ // If the dispatched exception was caught by a catch block,
+ // then let that catch block handle the exception normally.
+ method = "next";
+ arg = undefined;
+ }
+
+ } else if (method === "return") {
+ context.abrupt("return", arg);
+ }
+
+ state = GenStateExecuting;
+
+ var record = tryCatch(innerFn, self, context);
+ if (record.type === "normal") {
+ // If an exception is thrown from innerFn, we leave state ===
+ // GenStateExecuting and loop back for another invocation.
+ state = context.done
+ ? GenStateCompleted
+ : GenStateSuspendedYield;
+
+ var info = {
+ value: record.arg,
+ done: context.done
+ };
+
+ if (record.arg === ContinueSentinel) {
+ if (context.delegate && method === "next") {
+ // Deliberately forget the last sent value so that we don't
+ // accidentally pass it on to the delegate.
+ arg = undefined;
+ }
+ } else {
+ return info;
+ }
+
+ } else if (record.type === "throw") {
+ state = GenStateCompleted;
+ // Dispatch the exception by looping back around to the
+ // context.dispatchException(arg) call above.
+ method = "throw";
+ arg = record.arg;
+ }
+ }
+ };
+ }
+
+ // Define Generator.prototype.{next,throw,return} in terms of the
+ // unified ._invoke helper method.
+ defineIteratorMethods(Gp);
+
+ Gp[iteratorSymbol] = function() {
+ return this;
+ };
+
+ Gp.toString = function() {
+ return "[object Generator]";
+ };
+
+ function pushTryEntry(locs) {
+ var entry = { tryLoc: locs[0] };
+
+ if (1 in locs) {
+ entry.catchLoc = locs[1];
+ }
+
+ if (2 in locs) {
+ entry.finallyLoc = locs[2];
+ entry.afterLoc = locs[3];
+ }
+
+ this.tryEntries.push(entry);
+ }
+
+ function resetTryEntry(entry) {
+ var record = entry.completion || {};
+ record.type = "normal";
+ delete record.arg;
+ entry.completion = record;
+ }
+
+ function Context(tryLocsList) {
+ // The root entry object (effectively a try statement without a catch
+ // or a finally block) gives us a place to store values thrown from
+ // locations where there is no enclosing try statement.
+ this.tryEntries = [{ tryLoc: "root" }];
+ tryLocsList.forEach(pushTryEntry, this);
+ this.reset(true);
+ }
+
+ runtime.keys = function(object) {
+ var keys = [];
+ for (var key in object) {
+ keys.push(key);
+ }
+ keys.reverse();
+
+ // Rather than returning an object with a next method, we keep
+ // things simple and return the next function itself.
+ return function next() {
+ while (keys.length) {
+ var key = keys.pop();
+ if (key in object) {
+ next.value = key;
+ next.done = false;
+ return next;
+ }
+ }
+
+ // To avoid creating an additional object, we just hang the .value
+ // and .done properties off the next function object itself. This
+ // also ensures that the minifier will not anonymize the function.
+ next.done = true;
+ return next;
+ };
+ };
+
+ function values(iterable) {
+ if (iterable) {
+ var iteratorMethod = iterable[iteratorSymbol];
+ if (iteratorMethod) {
+ return iteratorMethod.call(iterable);
+ }
+
+ if (typeof iterable.next === "function") {
+ return iterable;
+ }
+
+ if (!isNaN(iterable.length)) {
+ var i = -1, next = function next() {
+ while (++i < iterable.length) {
+ if (hasOwn.call(iterable, i)) {
+ next.value = iterable[i];
+ next.done = false;
+ return next;
+ }
+ }
+
+ next.value = undefined;
+ next.done = true;
+
+ return next;
+ };
+
+ return next.next = next;
+ }
+ }
+
+ // Return an iterator with no values.
+ return { next: doneResult };
+ }
+ runtime.values = values;
+
+ function doneResult() {
+ return { value: undefined, done: true };
+ }
+
+ Context.prototype = {
+ constructor: Context,
+
+ reset: function(skipTempReset) {
+ this.prev = 0;
+ this.next = 0;
+ this.sent = undefined;
+ this.done = false;
+ this.delegate = null;
+
+ this.tryEntries.forEach(resetTryEntry);
+
+ if (!skipTempReset) {
+ for (var name in this) {
+ // Not sure about the optimal order of these conditions:
+ if (name.charAt(0) === "t" &&
+ hasOwn.call(this, name) &&
+ !isNaN(+name.slice(1))) {
+ this[name] = undefined;
+ }
+ }
+ }
+ },
+
+ stop: function() {
+ this.done = true;
+
+ var rootEntry = this.tryEntries[0];
+ var rootRecord = rootEntry.completion;
+ if (rootRecord.type === "throw") {
+ throw rootRecord.arg;
+ }
+
+ return this.rval;
+ },
+
+ dispatchException: function(exception) {
+ if (this.done) {
+ throw exception;
+ }
+
+ var context = this;
+ function handle(loc, caught) {
+ record.type = "throw";
+ record.arg = exception;
+ context.next = loc;
+ return !!caught;
+ }
+
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+ var entry = this.tryEntries[i];
+ var record = entry.completion;
+
+ if (entry.tryLoc === "root") {
+ // Exception thrown outside of any try block that could handle
+ // it, so set the completion value of the entire function to
+ // throw the exception.
+ return handle("end");
+ }
+
+ if (entry.tryLoc <= this.prev) {
+ var hasCatch = hasOwn.call(entry, "catchLoc");
+ var hasFinally = hasOwn.call(entry, "finallyLoc");
+
+ if (hasCatch && hasFinally) {
+ if (this.prev < entry.catchLoc) {
+ return handle(entry.catchLoc, true);
+ } else if (this.prev < entry.finallyLoc) {
+ return handle(entry.finallyLoc);
+ }
+
+ } else if (hasCatch) {
+ if (this.prev < entry.catchLoc) {
+ return handle(entry.catchLoc, true);
+ }
+
+ } else if (hasFinally) {
+ if (this.prev < entry.finallyLoc) {
+ return handle(entry.finallyLoc);
+ }
+
+ } else {
+ throw new Error("try statement without catch or finally");
+ }
+ }
+ }
+ },
+
+ abrupt: function(type, arg) {
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+ var entry = this.tryEntries[i];
+ if (entry.tryLoc <= this.prev &&
+ hasOwn.call(entry, "finallyLoc") &&
+ this.prev < entry.finallyLoc) {
+ var finallyEntry = entry;
+ break;
+ }
+ }
+
+ if (finallyEntry &&
+ (type === "break" ||
+ type === "continue") &&
+ finallyEntry.tryLoc <= arg &&
+ arg <= finallyEntry.finallyLoc) {
+ // Ignore the finally entry if control is not jumping to a
+ // location outside the try/catch block.
+ finallyEntry = null;
+ }
+
+ var record = finallyEntry ? finallyEntry.completion : {};
+ record.type = type;
+ record.arg = arg;
+
+ if (finallyEntry) {
+ this.next = finallyEntry.finallyLoc;
+ } else {
+ this.complete(record);
+ }
+
+ return ContinueSentinel;
+ },
+
+ complete: function(record, afterLoc) {
+ if (record.type === "throw") {
+ throw record.arg;
+ }
+
+ if (record.type === "break" ||
+ record.type === "continue") {
+ this.next = record.arg;
+ } else if (record.type === "return") {
+ this.rval = record.arg;
+ this.next = "end";
+ } else if (record.type === "normal" && afterLoc) {
+ this.next = afterLoc;
+ }
+ },
+
+ finish: function(finallyLoc) {
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+ var entry = this.tryEntries[i];
+ if (entry.finallyLoc === finallyLoc) {
+ this.complete(entry.completion, entry.afterLoc);
+ resetTryEntry(entry);
+ return ContinueSentinel;
+ }
+ }
+ },
+
+ "catch": function(tryLoc) {
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+ var entry = this.tryEntries[i];
+ if (entry.tryLoc === tryLoc) {
+ var record = entry.completion;
+ if (record.type === "throw") {
+ var thrown = record.arg;
+ resetTryEntry(entry);
+ }
+ return thrown;
+ }
+ }
+
+ // The context.catch method must only be called with a location
+ // argument that corresponds to a known catch block.
+ throw new Error("illegal catch attempt");
+ },
+
+ delegateYield: function(iterable, resultName, nextLoc) {
+ this.delegate = {
+ iterator: values(iterable),
+ resultName: resultName,
+ nextLoc: nextLoc
+ };
+
+ return ContinueSentinel;
+ }
+ };
+})(
+ // Among the various tricks for obtaining a reference to the global
+ // object, this seems to be the most reliable technique that does not
+ // use indirect eval (which violates Content Security Policy).
+ typeof global === "object" ? global :
+ typeof window === "object" ? window :
+ typeof self === "object" ? self : this
+);
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}]},{},[1]);
diff --git a/jspm_packages/npm/babel-core@5.8.38/browser-polyfill.min.js b/jspm_packages/npm/babel-core@5.8.38/browser-polyfill.min.js
new file mode 100644
index 0000000..809e6a5
--- /dev/null
+++ b/jspm_packages/npm/babel-core@5.8.38/browser-polyfill.min.js
@@ -0,0 +1,4 @@
+/* */
+"format global";
+!function t(n,r,e){function o(u,c){if(!r[u]){if(!n[u]){var a="function"==typeof require&&require;if(!c&&a)return a(u,!0);if(i)return i(u,!0);var f=new Error("Cannot find module '"+u+"'");throw f.code="MODULE_NOT_FOUND",f}var s=r[u]={exports:{}};n[u][0].call(s.exports,function(t){var r=n[u][1][t];return o(r?r:t)},s,s.exports,t,n,r,e)}return r[u].exports}for(var i="function"==typeof require&&require,u=0;u2?f[2]:void 0,l=Math.min((void 0===s?u:o(s,u))-a,u-c),h=1;for(c>a&&a+l>c&&(h=-1,a+=l-1,c+=l-1);l-- >0;)a in r?r[c]=r[a]:delete r[c],c+=h,a+=h;return r}},{76:76,79:79,80:80}],6:[function(t,n,r){"use strict";var e=t(80),o=t(76),i=t(79);n.exports=[].fill||function(t){for(var n=e(this),r=i(n.length),u=arguments,c=u.length,a=o(c>1?u[1]:void 0,r),f=c>2?u[2]:void 0,s=void 0===f?r:o(f,r);s>a;)n[a++]=t;return n}},{76:76,79:79,80:80}],7:[function(t,n,r){var e=t(78),o=t(79),i=t(76);n.exports=function(t){return function(n,r,u){var c,a=e(n),f=o(a.length),s=i(u,f);if(t&&r!=r){for(;f>s;)if(c=a[s++],c!=c)return!0}else for(;f>s;s++)if((t||s in a)&&a[s]===r)return t||s;return!t&&-1}}},{76:76,78:78,79:79}],8:[function(t,n,r){var e=t(17),o=t(34),i=t(80),u=t(79),c=t(9);n.exports=function(t){var n=1==t,r=2==t,a=3==t,f=4==t,s=6==t,l=5==t||s;return function(h,p,v){for(var g,y,d=i(h),m=o(d),S=e(p,v,3),b=u(m.length),x=0,w=n?c(h,b):r?c(h,0):void 0;b>x;x++)if((l||x in m)&&(g=m[x],y=S(g,x,d),t))if(n)w[x]=y;else if(y)switch(t){case 3:return!0;case 5:return g;case 6:return x;case 2:w.push(g)}else if(f)return!1;return s?-1:a||f?f:w}}},{17:17,34:34,79:79,80:80,9:9}],9:[function(t,n,r){var e=t(38),o=t(36),i=t(83)("species");n.exports=function(t,n){var r;return o(t)&&(r=t.constructor,"function"!=typeof r||r!==Array&&!o(r.prototype)||(r=void 0),e(r)&&(r=r[i],null===r&&(r=void 0))),new(void 0===r?Array:r)(n)}},{36:36,38:38,83:83}],10:[function(t,n,r){var e=t(11),o=t(83)("toStringTag"),i="Arguments"==e(function(){return arguments}());n.exports=function(t){var n,r,u;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=(n=Object(t))[o])?r:i?e(n):"Object"==(u=e(n))&&"function"==typeof n.callee?"Arguments":u}},{11:11,83:83}],11:[function(t,n,r){var e={}.toString;n.exports=function(t){return e.call(t).slice(8,-1)}},{}],12:[function(t,n,r){"use strict";var e=t(46),o=t(31),i=t(60),u=t(17),c=t(69),a=t(18),f=t(27),s=t(42),l=t(44),h=t(82)("id"),p=t(30),v=t(38),g=t(65),y=t(19),d=Object.isExtensible||v,m=y?"_s":"size",S=0,b=function(t,n){if(!v(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!p(t,h)){if(!d(t))return"F";if(!n)return"E";o(t,h,++S)}return"O"+t[h]},x=function(t,n){var r,e=b(n);if("F"!==e)return t._i[e];for(r=t._f;r;r=r.n)if(r.k==n)return r};n.exports={getConstructor:function(t,n,r,o){var s=t(function(t,i){c(t,s,n),t._i=e.create(null),t._f=void 0,t._l=void 0,t[m]=0,void 0!=i&&f(i,r,t[o],t)});return i(s.prototype,{clear:function(){for(var t=this,n=t._i,r=t._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete n[r.i];t._f=t._l=void 0,t[m]=0},"delete":function(t){var n=this,r=x(n,t);if(r){var e=r.n,o=r.p;delete n._i[r.i],r.r=!0,o&&(o.n=e),e&&(e.p=o),n._f==r&&(n._f=e),n._l==r&&(n._l=o),n[m]--}return!!r},forEach:function(t){for(var n,r=u(t,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(r(n.v,n.k,this);n&&n.r;)n=n.p},has:function(t){return!!x(this,t)}}),y&&e.setDesc(s.prototype,"size",{get:function(){return a(this[m])}}),s},def:function(t,n,r){var e,o,i=x(t,n);return i?i.v=r:(t._l=i={i:o=b(n,!0),k:n,v:r,p:e=t._l,n:void 0,r:!1},t._f||(t._f=i),e&&(e.n=i),t[m]++,"F"!==o&&(t._i[o]=i)),t},getEntry:x,setStrong:function(t,n,r){s(t,n,function(t,n){this._t=t,this._k=n,this._l=void 0},function(){for(var t=this,n=t._k,r=t._l;r&&r.r;)r=r.p;return t._t&&(t._l=r=r?r.n:t._t._f)?"keys"==n?l(0,r.k):"values"==n?l(0,r.v):l(0,[r.k,r.v]):(t._t=void 0,l(1))},r?"entries":"values",!r,!0),g(n)}}},{17:17,18:18,19:19,27:27,30:30,31:31,38:38,42:42,44:44,46:46,60:60,65:65,69:69,82:82}],13:[function(t,n,r){var e=t(27),o=t(10);n.exports=function(t){return function(){if(o(this)!=t)throw TypeError(t+"#toJSON isn't generic");var n=[];return e(this,!1,n.push,n),n}}},{10:10,27:27}],14:[function(t,n,r){"use strict";var e=t(31),o=t(60),i=t(4),u=t(38),c=t(69),a=t(27),f=t(8),s=t(30),l=t(82)("weak"),h=Object.isExtensible||u,p=f(5),v=f(6),g=0,y=function(t){return t._l||(t._l=new d)},d=function(){this.a=[]},m=function(t,n){return p(t.a,function(t){return t[0]===n})};d.prototype={get:function(t){var n=m(this,t);return n?n[1]:void 0},has:function(t){return!!m(this,t)},set:function(t,n){var r=m(this,t);r?r[1]=n:this.a.push([t,n])},"delete":function(t){var n=v(this.a,function(n){return n[0]===t});return~n&&this.a.splice(n,1),!!~n}},n.exports={getConstructor:function(t,n,r,e){var i=t(function(t,o){c(t,i,n),t._i=g++,t._l=void 0,void 0!=o&&a(o,r,t[e],t)});return o(i.prototype,{"delete":function(t){return u(t)?h(t)?s(t,l)&&s(t[l],this._i)&&delete t[l][this._i]:y(this)["delete"](t):!1},has:function(t){return u(t)?h(t)?s(t,l)&&s(t[l],this._i):y(this).has(t):!1}}),i},def:function(t,n,r){return h(i(n))?(s(n,l)||e(n,l,{}),n[l][t._i]=r):y(t).set(n,r),t},frozenStore:y,WEAK:l}},{27:27,30:30,31:31,38:38,4:4,60:60,69:69,8:8,82:82}],15:[function(t,n,r){"use strict";var e=t(29),o=t(22),i=t(61),u=t(60),c=t(27),a=t(69),f=t(38),s=t(24),l=t(43),h=t(66);n.exports=function(t,n,r,p,v,g){var y=e[t],d=y,m=v?"set":"add",S=d&&d.prototype,b={},x=function(t){var n=S[t];i(S,t,"delete"==t?function(t){return g&&!f(t)?!1:n.call(this,0===t?0:t)}:"has"==t?function(t){return g&&!f(t)?!1:n.call(this,0===t?0:t)}:"get"==t?function(t){return g&&!f(t)?void 0:n.call(this,0===t?0:t)}:"add"==t?function(t){return n.call(this,0===t?0:t),this}:function(t,r){return n.call(this,0===t?0:t,r),this})};if("function"==typeof d&&(g||S.forEach&&!s(function(){(new d).entries().next()}))){var w,_=new d,E=_[m](g?{}:-0,1)!=_,O=s(function(){_.has(1)}),M=l(function(t){new d(t)});M||(d=n(function(n,r){a(n,d,t);var e=new y;return void 0!=r&&c(r,v,e[m],e),e}),d.prototype=S,S.constructor=d),g||_.forEach(function(t,n){w=1/n===-(1/0)}),(O||w)&&(x("delete"),x("has"),v&&x("get")),(w||E)&&x(m),g&&S.clear&&delete S.clear}else d=p.getConstructor(n,t,v,m),u(d.prototype,r);return h(d,t),b[t]=d,o(o.G+o.W+o.F*(d!=y),b),g||p.setStrong(d,t,v),d}},{22:22,24:24,27:27,29:29,38:38,43:43,60:60,61:61,66:66,69:69}],16:[function(t,n,r){var e=n.exports={version:"1.2.6"};"number"==typeof __e&&(__e=e)},{}],17:[function(t,n,r){var e=t(2);n.exports=function(t,n,r){if(e(t),void 0===n)return t;switch(r){case 1:return function(r){return t.call(n,r)};case 2:return function(r,e){return t.call(n,r,e)};case 3:return function(r,e,o){return t.call(n,r,e,o)}}return function(){return t.apply(n,arguments)}}},{2:2}],18:[function(t,n,r){n.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},{}],19:[function(t,n,r){n.exports=!t(24)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{24:24}],20:[function(t,n,r){var e=t(38),o=t(29).document,i=e(o)&&e(o.createElement);n.exports=function(t){return i?o.createElement(t):{}}},{29:29,38:38}],21:[function(t,n,r){var e=t(46);n.exports=function(t){var n=e.getKeys(t),r=e.getSymbols;if(r)for(var o,i=r(t),u=e.isEnum,c=0;i.length>c;)u.call(t,o=i[c++])&&n.push(o);return n}},{46:46}],22:[function(t,n,r){var e=t(29),o=t(16),i=t(31),u=t(61),c=t(17),a="prototype",f=function(t,n,r){var s,l,h,p,v=t&f.F,g=t&f.G,y=t&f.S,d=t&f.P,m=t&f.B,S=g?e:y?e[n]||(e[n]={}):(e[n]||{})[a],b=g?o:o[n]||(o[n]={}),x=b[a]||(b[a]={});g&&(r=n);for(s in r)l=!v&&S&&s in S,h=(l?S:r)[s],p=m&&l?c(h,e):d&&"function"==typeof h?c(Function.call,h):h,S&&!l&&u(S,s,h),b[s]!=h&&i(b,s,p),d&&x[s]!=h&&(x[s]=h)};e.core=o,f.F=1,f.G=2,f.S=4,f.P=8,f.B=16,f.W=32,n.exports=f},{16:16,17:17,29:29,31:31,61:61}],23:[function(t,n,r){var e=t(83)("match");n.exports=function(t){var n=/./;try{"/./"[t](n)}catch(r){try{return n[e]=!1,!"/./"[t](n)}catch(o){}}return!0}},{83:83}],24:[function(t,n,r){n.exports=function(t){try{return!!t()}catch(n){return!0}}},{}],25:[function(t,n,r){"use strict";var e=t(31),o=t(61),i=t(24),u=t(18),c=t(83);n.exports=function(t,n,r){var a=c(t),f=""[t];i(function(){var n={};return n[a]=function(){return 7},7!=""[t](n)})&&(o(String.prototype,t,r(u,a,f)),e(RegExp.prototype,a,2==n?function(t,n){return f.call(t,this,n)}:function(t){return f.call(t,this)}))}},{18:18,24:24,31:31,61:61,83:83}],26:[function(t,n,r){"use strict";var e=t(4);n.exports=function(){var t=e(this),n="";return t.global&&(n+="g"),t.ignoreCase&&(n+="i"),t.multiline&&(n+="m"),t.unicode&&(n+="u"),t.sticky&&(n+="y"),n}},{4:4}],27:[function(t,n,r){var e=t(17),o=t(40),i=t(35),u=t(4),c=t(79),a=t(84);n.exports=function(t,n,r,f){var s,l,h,p=a(t),v=e(r,f,n?2:1),g=0;if("function"!=typeof p)throw TypeError(t+" is not iterable!");if(i(p))for(s=c(t.length);s>g;g++)n?v(u(l=t[g])[0],l[1]):v(t[g]);else for(h=p.call(t);!(l=h.next()).done;)o(h,v,l.value,n)}},{17:17,35:35,4:4,40:40,79:79,84:84}],28:[function(t,n,r){var e=t(78),o=t(46).getNames,i={}.toString,u="object"==typeof window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],c=function(t){try{return o(t)}catch(n){return u.slice()}};n.exports.get=function(t){return u&&"[object Window]"==i.call(t)?c(t):o(e(t))}},{46:46,78:78}],29:[function(t,n,r){var e=n.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=e)},{}],30:[function(t,n,r){var e={}.hasOwnProperty;n.exports=function(t,n){return e.call(t,n)}},{}],31:[function(t,n,r){var e=t(46),o=t(59);n.exports=t(19)?function(t,n,r){return e.setDesc(t,n,o(1,r))}:function(t,n,r){return t[n]=r,t}},{19:19,46:46,59:59}],32:[function(t,n,r){n.exports=t(29).document&&document.documentElement},{29:29}],33:[function(t,n,r){n.exports=function(t,n,r){var e=void 0===r;switch(n.length){case 0:return e?t():t.call(r);case 1:return e?t(n[0]):t.call(r,n[0]);case 2:return e?t(n[0],n[1]):t.call(r,n[0],n[1]);case 3:return e?t(n[0],n[1],n[2]):t.call(r,n[0],n[1],n[2]);case 4:return e?t(n[0],n[1],n[2],n[3]):t.call(r,n[0],n[1],n[2],n[3])}return t.apply(r,n)}},{}],34:[function(t,n,r){var e=t(11);n.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==e(t)?t.split(""):Object(t)}},{11:11}],35:[function(t,n,r){var e=t(45),o=t(83)("iterator"),i=Array.prototype;n.exports=function(t){return void 0!==t&&(e.Array===t||i[o]===t)}},{45:45,83:83}],36:[function(t,n,r){var e=t(11);n.exports=Array.isArray||function(t){return"Array"==e(t)}},{11:11}],37:[function(t,n,r){var e=t(38),o=Math.floor;n.exports=function(t){return!e(t)&&isFinite(t)&&o(t)===t}},{38:38}],38:[function(t,n,r){n.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},{}],39:[function(t,n,r){var e=t(38),o=t(11),i=t(83)("match");n.exports=function(t){var n;return e(t)&&(void 0!==(n=t[i])?!!n:"RegExp"==o(t))}},{11:11,38:38,83:83}],40:[function(t,n,r){var e=t(4);n.exports=function(t,n,r,o){try{return o?n(e(r)[0],r[1]):n(r)}catch(i){var u=t["return"];throw void 0!==u&&e(u.call(t)),i}}},{4:4}],41:[function(t,n,r){"use strict";var e=t(46),o=t(59),i=t(66),u={};t(31)(u,t(83)("iterator"),function(){return this}),n.exports=function(t,n,r){t.prototype=e.create(u,{next:o(1,r)}),i(t,n+" Iterator")}},{31:31,46:46,59:59,66:66,83:83}],42:[function(t,n,r){"use strict";var e=t(48),o=t(22),i=t(61),u=t(31),c=t(30),a=t(45),f=t(41),s=t(66),l=t(46).getProto,h=t(83)("iterator"),p=!([].keys&&"next"in[].keys()),v="@@iterator",g="keys",y="values",d=function(){return this};n.exports=function(t,n,r,m,S,b,x){f(r,n,m);var w,_,E=function(t){if(!p&&t in j)return j[t];switch(t){case g:return function(){return new r(this,t)};case y:return function(){return new r(this,t)}}return function(){return new r(this,t)}},O=n+" Iterator",M=S==y,P=!1,j=t.prototype,N=j[h]||j[v]||S&&j[S],F=N||E(S);if(N){var A=l(F.call(new t));s(A,O,!0),!e&&c(j,v)&&u(A,h,d),M&&N.name!==y&&(P=!0,F=function(){return N.call(this)})}if(e&&!x||!p&&!P&&j[h]||u(j,h,F),a[n]=F,a[O]=d,S)if(w={values:M?F:E(y),keys:b?F:E(g),entries:M?E("entries"):F},x)for(_ in w)_ in j||i(j,_,w[_]);else o(o.P+o.F*(p||P),n,w);return w}},{22:22,30:30,31:31,41:41,45:45,46:46,48:48,61:61,66:66,83:83}],43:[function(t,n,r){var e=t(83)("iterator"),o=!1;try{var i=[7][e]();i["return"]=function(){o=!0},Array.from(i,function(){throw 2})}catch(u){}n.exports=function(t,n){if(!n&&!o)return!1;var r=!1;try{var i=[7],u=i[e]();u.next=function(){r=!0},i[e]=function(){return u},t(i)}catch(c){}return r}},{83:83}],44:[function(t,n,r){n.exports=function(t,n){return{value:n,done:!!t}}},{}],45:[function(t,n,r){n.exports={}},{}],46:[function(t,n,r){var e=Object;n.exports={create:e.create,getProto:e.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:e.getOwnPropertyDescriptor,setDesc:e.defineProperty,setDescs:e.defineProperties,getKeys:e.keys,getNames:e.getOwnPropertyNames,getSymbols:e.getOwnPropertySymbols,each:[].forEach}},{}],47:[function(t,n,r){var e=t(46),o=t(78);n.exports=function(t,n){for(var r,i=o(t),u=e.getKeys(i),c=u.length,a=0;c>a;)if(i[r=u[a++]]===n)return r}},{46:46,78:78}],48:[function(t,n,r){n.exports=!1},{}],49:[function(t,n,r){n.exports=Math.expm1||function(t){return 0==(t=+t)?t:t>-1e-6&&1e-6>t?t+t*t/2:Math.exp(t)-1}},{}],50:[function(t,n,r){n.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&1e-8>t?t-t*t/2:Math.log(1+t)}},{}],51:[function(t,n,r){n.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:0>t?-1:1}},{}],52:[function(t,n,r){var e,o,i,u=t(29),c=t(75).set,a=u.MutationObserver||u.WebKitMutationObserver,f=u.process,s=u.Promise,l="process"==t(11)(f),h=function(){var t,n,r;for(l&&(t=f.domain)&&(f.domain=null,t.exit());e;)n=e.domain,r=e.fn,n&&n.enter(),r(),n&&n.exit(),e=e.next;o=void 0,t&&t.enter()};if(l)i=function(){f.nextTick(h)};else if(a){var p=1,v=document.createTextNode("");new a(h).observe(v,{characterData:!0}),i=function(){v.data=p=-p}}else i=s&&s.resolve?function(){s.resolve().then(h)}:function(){c.call(u,h)};n.exports=function(t){var n={fn:t,next:void 0,domain:l&&f.domain};o&&(o.next=n),e||(e=n,i()),o=n}},{11:11,29:29,75:75}],53:[function(t,n,r){var e=t(46),o=t(80),i=t(34);n.exports=t(24)(function(){var t=Object.assign,n={},r={},e=Symbol(),o="abcdefghijklmnopqrst";return n[e]=7,o.split("").forEach(function(t){r[t]=t}),7!=t({},n)[e]||Object.keys(t({},r)).join("")!=o})?function(t,n){for(var r=o(t),u=arguments,c=u.length,a=1,f=e.getKeys,s=e.getSymbols,l=e.isEnum;c>a;)for(var h,p=i(u[a++]),v=s?f(p).concat(s(p)):f(p),g=v.length,y=0;g>y;)l.call(p,h=v[y++])&&(r[h]=p[h]);return r}:Object.assign},{24:24,34:34,46:46,80:80}],54:[function(t,n,r){var e=t(22),o=t(16),i=t(24);n.exports=function(t,n){var r=(o.Object||{})[t]||Object[t],u={};u[t]=n(r),e(e.S+e.F*i(function(){r(1)}),"Object",u)}},{16:16,22:22,24:24}],55:[function(t,n,r){var e=t(46),o=t(78),i=e.isEnum;n.exports=function(t){return function(n){for(var r,u=o(n),c=e.getKeys(u),a=c.length,f=0,s=[];a>f;)i.call(u,r=c[f++])&&s.push(t?[r,u[r]]:u[r]);return s}}},{46:46,78:78}],56:[function(t,n,r){var e=t(46),o=t(4),i=t(29).Reflect;n.exports=i&&i.ownKeys||function(t){var n=e.getNames(o(t)),r=e.getSymbols;return r?n.concat(r(t)):n}},{29:29,4:4,46:46}],57:[function(t,n,r){"use strict";var e=t(58),o=t(33),i=t(2);n.exports=function(){for(var t=i(this),n=arguments.length,r=Array(n),u=0,c=e._,a=!1;n>u;)(r[u]=arguments[u++])===c&&(a=!0);return function(){var e,i=this,u=arguments,f=u.length,s=0,l=0;if(!a&&!f)return o(t,r,i);if(e=r.slice(),a)for(;n>s;s++)e[s]===c&&(e[s]=u[l++]);for(;f>l;)e.push(u[l++]);return o(t,e,i)}}},{2:2,33:33,58:58}],58:[function(t,n,r){n.exports=t(29)},{29:29}],59:[function(t,n,r){n.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},{}],60:[function(t,n,r){var e=t(61);n.exports=function(t,n){for(var r in n)e(t,r,n[r]);return t}},{61:61}],61:[function(t,n,r){var e=t(29),o=t(31),i=t(82)("src"),u="toString",c=Function[u],a=(""+c).split(u);t(16).inspectSource=function(t){return c.call(t)},(n.exports=function(t,n,r,u){"function"==typeof r&&(r.hasOwnProperty(i)||o(r,i,t[n]?""+t[n]:a.join(String(n))),r.hasOwnProperty("name")||o(r,"name",n)),t===e?t[n]=r:(u||delete t[n],o(t,n,r))})(Function.prototype,u,function(){return"function"==typeof this&&this[i]||c.call(this)})},{16:16,29:29,31:31,82:82}],62:[function(t,n,r){n.exports=function(t,n){var r=n===Object(n)?function(t){return n[t]}:n;return function(n){return String(n).replace(t,r)}}},{}],63:[function(t,n,r){n.exports=Object.is||function(t,n){return t===n?0!==t||1/t===1/n:t!=t&&n!=n}},{}],64:[function(t,n,r){var e=t(46).getDesc,o=t(38),i=t(4),u=function(t,n){if(i(t),!o(n)&&null!==n)throw TypeError(n+": can't set as prototype!")};n.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(n,r,o){try{o=t(17)(Function.call,e(Object.prototype,"__proto__").set,2),o(n,[]),r=!(n instanceof Array)}catch(i){r=!0}return function(t,n){return u(t,n),r?t.__proto__=n:o(t,n),t}}({},!1):void 0),check:u}},{17:17,38:38,4:4,46:46}],65:[function(t,n,r){"use strict";var e=t(29),o=t(46),i=t(19),u=t(83)("species");n.exports=function(t){var n=e[t];i&&n&&!n[u]&&o.setDesc(n,u,{configurable:!0,get:function(){return this}})}},{19:19,29:29,46:46,83:83}],66:[function(t,n,r){var e=t(46).setDesc,o=t(30),i=t(83)("toStringTag");n.exports=function(t,n,r){t&&!o(t=r?t:t.prototype,i)&&e(t,i,{configurable:!0,value:n})}},{30:30,46:46,83:83}],67:[function(t,n,r){var e=t(29),o="__core-js_shared__",i=e[o]||(e[o]={});n.exports=function(t){return i[t]||(i[t]={})}},{29:29}],68:[function(t,n,r){var e=t(4),o=t(2),i=t(83)("species");n.exports=function(t,n){var r,u=e(t).constructor;return void 0===u||void 0==(r=e(u)[i])?n:o(r)}},{2:2,4:4,83:83}],69:[function(t,n,r){n.exports=function(t,n,r){if(!(t instanceof n))throw TypeError(r+": use the 'new' operator!");return t}},{}],70:[function(t,n,r){var e=t(77),o=t(18);n.exports=function(t){return function(n,r){var i,u,c=String(o(n)),a=e(r),f=c.length;return 0>a||a>=f?t?"":void 0:(i=c.charCodeAt(a),55296>i||i>56319||a+1===f||(u=c.charCodeAt(a+1))<56320||u>57343?t?c.charAt(a):i:t?c.slice(a,a+2):(i-55296<<10)+(u-56320)+65536)}}},{18:18,77:77}],71:[function(t,n,r){var e=t(39),o=t(18);n.exports=function(t,n,r){if(e(n))throw TypeError("String#"+r+" doesn't accept regex!");return String(o(t))}},{18:18,39:39}],72:[function(t,n,r){var e=t(79),o=t(73),i=t(18);n.exports=function(t,n,r,u){var c=String(i(t)),a=c.length,f=void 0===r?" ":String(r),s=e(n);if(a>=s)return c;""==f&&(f=" ");var l=s-a,h=o.call(f,Math.ceil(l/f.length));return h.length>l&&(h=h.slice(0,l)),u?h+c:c+h}},{18:18,73:73,79:79}],73:[function(t,n,r){"use strict";var e=t(77),o=t(18);n.exports=function(t){var n=String(o(this)),r="",i=e(t);if(0>i||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(n+=n))1&i&&(r+=n);return r}},{18:18,77:77}],74:[function(t,n,r){var e=t(22),o=t(18),i=t(24),u=" \n\x0B\f\r \u2028\u2029\ufeff",c="["+u+"]",a="
",f=RegExp("^"+c+c+"*"),s=RegExp(c+c+"*$"),l=function(t,n){var r={};r[t]=n(h),e(e.P+e.F*i(function(){return!!u[t]()||a[t]()!=a}),"String",r)},h=l.trim=function(t,n){return t=String(o(t)),1&n&&(t=t.replace(f,"")),2&n&&(t=t.replace(s,"")),t};n.exports=l},{18:18,22:22,24:24}],75:[function(t,n,r){var e,o,i,u=t(17),c=t(33),a=t(32),f=t(20),s=t(29),l=s.process,h=s.setImmediate,p=s.clearImmediate,v=s.MessageChannel,g=0,y={},d="onreadystatechange",m=function(){var t=+this;if(y.hasOwnProperty(t)){var n=y[t];delete y[t],n()}},S=function(t){m.call(t.data)};h&&p||(h=function(t){for(var n=[],r=1;arguments.length>r;)n.push(arguments[r++]);return y[++g]=function(){c("function"==typeof t?t:Function(t),n)},e(g),g},p=function(t){delete y[t]},"process"==t(11)(l)?e=function(t){l.nextTick(u(m,t,1))}:v?(o=new v,i=o.port2,o.port1.onmessage=S,e=u(i.postMessage,i,1)):s.addEventListener&&"function"==typeof postMessage&&!s.importScripts?(e=function(t){s.postMessage(t+"","*")},s.addEventListener("message",S,!1)):e=d in f("script")?function(t){a.appendChild(f("script"))[d]=function(){a.removeChild(this),m.call(t)}}:function(t){setTimeout(u(m,t,1),0)}),n.exports={set:h,clear:p}},{11:11,17:17,20:20,29:29,32:32,33:33}],76:[function(t,n,r){var e=t(77),o=Math.max,i=Math.min;n.exports=function(t,n){return t=e(t),0>t?o(t+n,0):i(t,n)}},{77:77}],77:[function(t,n,r){var e=Math.ceil,o=Math.floor;n.exports=function(t){return isNaN(t=+t)?0:(t>0?o:e)(t)}},{}],78:[function(t,n,r){var e=t(34),o=t(18);n.exports=function(t){return e(o(t))}},{18:18,34:34}],79:[function(t,n,r){var e=t(77),o=Math.min;n.exports=function(t){return t>0?o(e(t),9007199254740991):0}},{77:77}],80:[function(t,n,r){var e=t(18);n.exports=function(t){return Object(e(t))}},{18:18}],81:[function(t,n,r){var e=t(38);n.exports=function(t,n){if(!e(t))return t;var r,o;if(n&&"function"==typeof(r=t.toString)&&!e(o=r.call(t)))return o;if("function"==typeof(r=t.valueOf)&&!e(o=r.call(t)))return o;if(!n&&"function"==typeof(r=t.toString)&&!e(o=r.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},{38:38}],82:[function(t,n,r){var e=0,o=Math.random();n.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++e+o).toString(36))}},{}],83:[function(t,n,r){var e=t(67)("wks"),o=t(82),i=t(29).Symbol;n.exports=function(t){return e[t]||(e[t]=i&&i[t]||(i||o)("Symbol."+t))}},{29:29,67:67,82:82}],84:[function(t,n,r){var e=t(10),o=t(83)("iterator"),i=t(45);n.exports=t(16).getIteratorMethod=function(t){return void 0!=t?t[o]||t["@@iterator"]||i[e(t)]:void 0}},{10:10,16:16,45:45,83:83}],85:[function(t,n,r){"use strict";var e,o=t(46),i=t(22),u=t(19),c=t(59),a=t(32),f=t(20),s=t(30),l=t(11),h=t(33),p=t(24),v=t(4),g=t(2),y=t(38),d=t(80),m=t(78),S=t(77),b=t(76),x=t(79),w=t(34),_=t(82)("__proto__"),E=t(8),O=t(7)(!1),M=Object.prototype,P=Array.prototype,j=P.slice,N=P.join,F=o.setDesc,A=o.getDesc,D=o.setDescs,I={};u||(e=!p(function(){return 7!=F(f("div"),"a",{get:function(){return 7}}).a}),o.setDesc=function(t,n,r){if(e)try{return F(t,n,r)}catch(o){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(v(t)[n]=r.value),t},o.getDesc=function(t,n){if(e)try{return A(t,n)}catch(r){}return s(t,n)?c(!M.propertyIsEnumerable.call(t,n),t[n]):void 0},o.setDescs=D=function(t,n){v(t);for(var r,e=o.getKeys(n),i=e.length,u=0;i>u;)o.setDesc(t,r=e[u++],n[r]);return t}),i(i.S+i.F*!u,"Object",{getOwnPropertyDescriptor:o.getDesc,defineProperty:o.setDesc,defineProperties:D});var k="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),L=k.concat("length","prototype"),T=k.length,R=function(){var t,n=f("iframe"),r=T,e=">";for(n.style.display="none",a.appendChild(n),n.src="/service/javascript:",t=n.contentWindow.document,t.open(),t.write("i;)s(o,e=t[i++])&&(~O(u,e)||u.push(e));return u}},G=function(){};i(i.S,"Object",{getPrototypeOf:o.getProto=o.getProto||function(t){return t=d(t),s(t,_)?t[_]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?M:null},getOwnPropertyNames:o.getNames=o.getNames||C(L,L.length,!0),create:o.create=o.create||function(t,n){var r;return null!==t?(G.prototype=v(t),r=new G,G.prototype=null,r[_]=t):r=R(),void 0===n?r:D(r,n)},keys:o.getKeys=o.getKeys||C(k,T,!1)});var W=function(t,n,r){if(!(n in I)){for(var e=[],o=0;n>o;o++)e[o]="a["+o+"]";I[n]=Function("F,a","return new F("+e.join(",")+")")}return I[n](t,r)};i(i.P,"Function",{bind:function(t){var n=g(this),r=j.call(arguments,1),e=function(){var o=r.concat(j.call(arguments));return this instanceof e?W(n,o.length,o):h(n,o,t)};return y(n.prototype)&&(e.prototype=n.prototype),e}}),i(i.P+i.F*p(function(){a&&j.call(a)}),"Array",{slice:function(t,n){var r=x(this.length),e=l(this);if(n=void 0===n?r:n,"Array"==e)return j.call(this,t,n);for(var o=b(t,r),i=b(n,r),u=x(i-o),c=Array(u),a=0;u>a;a++)c[a]="String"==e?this.charAt(o+a):this[o+a];return c}}),i(i.P+i.F*(w!=Object),"Array",{join:function(t){return N.call(w(this),void 0===t?",":t)}}),i(i.S,"Array",{isArray:t(36)});var U=function(t){return function(n,r){g(n);var e=w(this),o=x(e.length),i=t?o-1:0,u=t?-1:1;if(arguments.length<2)for(;;){if(i in e){r=e[i],i+=u;break}if(i+=u,t?0>i:i>=o)throw TypeError("Reduce of empty array with no initial value")}for(;t?i>=0:o>i;i+=u)i in e&&(r=n(r,e[i],i,this));return r}},K=function(t){return function(n){return t(this,n,arguments[1])}};i(i.P,"Array",{forEach:o.each=o.each||K(E(0)),map:K(E(1)),filter:K(E(2)),some:K(E(3)),every:K(E(4)),reduce:U(!1),reduceRight:U(!0),indexOf:K(O),lastIndexOf:function(t,n){var r=m(this),e=x(r.length),o=e-1;for(arguments.length>1&&(o=Math.min(o,S(n))),0>o&&(o=x(e+o));o>=0;o--)if(o in r&&r[o]===t)return o;return-1}}),i(i.S,"Date",{now:function(){return+new Date}});var z=function(t){return t>9?t:"0"+t};i(i.P+i.F*(p(function(){return"0385-07-25T07:06:39.999Z"!=new Date(-5e13-1).toISOString()})||!p(function(){new Date(NaN).toISOString()})),"Date",{toISOString:function(){if(!isFinite(this))throw RangeError("Invalid time value");var t=this,n=t.getUTCFullYear(),r=t.getUTCMilliseconds(),e=0>n?"-":n>9999?"+":"";return e+("00000"+Math.abs(n)).slice(e?-6:-4)+"-"+z(t.getUTCMonth()+1)+"-"+z(t.getUTCDate())+"T"+z(t.getUTCHours())+":"+z(t.getUTCMinutes())+":"+z(t.getUTCSeconds())+"."+(r>99?r:"0"+z(r))+"Z"}})},{11:11,19:19,2:2,20:20,22:22,24:24,30:30,32:32,33:33,34:34,36:36,38:38,4:4,46:46,59:59,7:7,76:76,77:77,78:78,79:79,8:8,80:80,82:82}],86:[function(t,n,r){var e=t(22);e(e.P,"Array",{copyWithin:t(5)}),t(3)("copyWithin")},{22:22,3:3,5:5}],87:[function(t,n,r){var e=t(22);e(e.P,"Array",{fill:t(6)}),t(3)("fill")},{22:22,3:3,6:6}],88:[function(t,n,r){"use strict";var e=t(22),o=t(8)(6),i="findIndex",u=!0;i in[]&&Array(1)[i](function(){u=!1}),e(e.P+e.F*u,"Array",{findIndex:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),t(3)(i)},{22:22,3:3,8:8}],89:[function(t,n,r){"use strict";var e=t(22),o=t(8)(5),i="find",u=!0;i in[]&&Array(1)[i](function(){u=!1}),e(e.P+e.F*u,"Array",{find:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),t(3)(i)},{22:22,3:3,8:8}],90:[function(t,n,r){"use strict";var e=t(17),o=t(22),i=t(80),u=t(40),c=t(35),a=t(79),f=t(84);o(o.S+o.F*!t(43)(function(t){Array.from(t)}),"Array",{from:function(t){var n,r,o,s,l=i(t),h="function"==typeof this?this:Array,p=arguments,v=p.length,g=v>1?p[1]:void 0,y=void 0!==g,d=0,m=f(l);if(y&&(g=e(g,v>2?p[2]:void 0,2)),void 0==m||h==Array&&c(m))for(n=a(l.length),r=new h(n);n>d;d++)r[d]=y?g(l[d],d):l[d];else for(s=m.call(l),r=new h;!(o=s.next()).done;d++)r[d]=y?u(s,g,[o.value,d],!0):o.value;return r.length=d,r}})},{17:17,22:22,35:35,40:40,43:43,79:79,80:80,84:84}],91:[function(t,n,r){"use strict";var e=t(3),o=t(44),i=t(45),u=t(78);n.exports=t(42)(Array,"Array",function(t,n){this._t=u(t),this._i=0,this._k=n},function(){var t=this._t,n=this._k,r=this._i++;return!t||r>=t.length?(this._t=void 0,o(1)):"keys"==n?o(0,r):"values"==n?o(0,t[r]):o(0,[r,t[r]])},"values"),i.Arguments=i.Array,e("keys"),e("values"),e("entries")},{3:3,42:42,44:44,45:45,78:78}],92:[function(t,n,r){"use strict";var e=t(22);e(e.S+e.F*t(24)(function(){function t(){}return!(Array.of.call(t)instanceof t)}),"Array",{of:function(){for(var t=0,n=arguments,r=n.length,e=new("function"==typeof this?this:Array)(r);r>t;)e[t]=n[t++];return e.length=r,e}})},{22:22,24:24}],93:[function(t,n,r){t(65)("Array")},{65:65}],94:[function(t,n,r){"use strict";var e=t(46),o=t(38),i=t(83)("hasInstance"),u=Function.prototype;i in u||e.setDesc(u,i,{value:function(t){if("function"!=typeof this||!o(t))return!1;if(!o(this.prototype))return t instanceof this;for(;t=e.getProto(t);)if(this.prototype===t)return!0;return!1}})},{38:38,46:46,83:83}],95:[function(t,n,r){var e=t(46).setDesc,o=t(59),i=t(30),u=Function.prototype,c=/^\s*function ([^ (]*)/,a="name";a in u||t(19)&&e(u,a,{configurable:!0,get:function(){var t=(""+this).match(c),n=t?t[1]:"";return i(this,a)||e(this,a,o(5,n)),n}})},{19:19,30:30,46:46,59:59}],96:[function(t,n,r){"use strict";var e=t(12);t(15)("Map",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){var n=e.getEntry(this,t);return n&&n.v},set:function(t,n){return e.def(this,0===t?0:t,n)}},e,!0)},{12:12,15:15}],97:[function(t,n,r){var e=t(22),o=t(50),i=Math.sqrt,u=Math.acosh;e(e.S+e.F*!(u&&710==Math.floor(u(Number.MAX_VALUE))),"Math",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:o(t-1+i(t-1)*i(t+1))}})},{22:22,50:50}],98:[function(t,n,r){function e(t){return isFinite(t=+t)&&0!=t?0>t?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}var o=t(22);o(o.S,"Math",{asinh:e})},{22:22}],99:[function(t,n,r){var e=t(22);e(e.S,"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},{22:22}],100:[function(t,n,r){var e=t(22),o=t(51);e(e.S,"Math",{cbrt:function(t){return o(t=+t)*Math.pow(Math.abs(t),1/3)}})},{22:22,51:51}],101:[function(t,n,r){var e=t(22);e(e.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},{22:22}],102:[function(t,n,r){var e=t(22),o=Math.exp;e(e.S,"Math",{cosh:function(t){return(o(t=+t)+o(-t))/2}})},{22:22}],103:[function(t,n,r){var e=t(22);e(e.S,"Math",{expm1:t(49)})},{22:22,49:49}],104:[function(t,n,r){var e=t(22),o=t(51),i=Math.pow,u=i(2,-52),c=i(2,-23),a=i(2,127)*(2-c),f=i(2,-126),s=function(t){return t+1/u-1/u};e(e.S,"Math",{fround:function(t){var n,r,e=Math.abs(t),i=o(t);return f>e?i*s(e/f/c)*f*c:(n=(1+c/u)*e,r=n-(n-e),r>a||r!=r?i*(1/0):i*r)}})},{22:22,51:51}],105:[function(t,n,r){var e=t(22),o=Math.abs;e(e.S,"Math",{hypot:function(t,n){for(var r,e,i=0,u=0,c=arguments,a=c.length,f=0;a>u;)r=o(c[u++]),r>f?(e=f/r,i=i*e*e+1,f=r):r>0?(e=r/f,i+=e*e):i+=r;return f===1/0?1/0:f*Math.sqrt(i)}})},{22:22}],106:[function(t,n,r){var e=t(22),o=Math.imul;e(e.S+e.F*t(24)(function(){return-5!=o(4294967295,5)||2!=o.length}),"Math",{imul:function(t,n){var r=65535,e=+t,o=+n,i=r&e,u=r&o;return 0|i*u+((r&e>>>16)*u+i*(r&o>>>16)<<16>>>0)}})},{22:22,24:24}],107:[function(t,n,r){var e=t(22);e(e.S,"Math",{log10:function(t){return Math.log(t)/Math.LN10}})},{22:22}],108:[function(t,n,r){var e=t(22);e(e.S,"Math",{log1p:t(50)})},{22:22,50:50}],109:[function(t,n,r){var e=t(22);e(e.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},{22:22}],110:[function(t,n,r){var e=t(22);e(e.S,"Math",{sign:t(51)})},{22:22,51:51}],111:[function(t,n,r){var e=t(22),o=t(49),i=Math.exp;e(e.S+e.F*t(24)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(o(t)-o(-t))/2:(i(t-1)-i(-t-1))*(Math.E/2)}})},{22:22,24:24,49:49}],112:[function(t,n,r){var e=t(22),o=t(49),i=Math.exp;e(e.S,"Math",{tanh:function(t){var n=o(t=+t),r=o(-t);return n==1/0?1:r==1/0?-1:(n-r)/(i(t)+i(-t))}})},{22:22,49:49}],113:[function(t,n,r){var e=t(22);e(e.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}})},{22:22}],114:[function(t,n,r){"use strict";var e=t(46),o=t(29),i=t(30),u=t(11),c=t(81),a=t(24),f=t(74).trim,s="Number",l=o[s],h=l,p=l.prototype,v=u(e.create(p))==s,g="trim"in String.prototype,y=function(t){
+var n=c(t,!1);if("string"==typeof n&&n.length>2){n=g?n.trim():f(n,3);var r,e,o,i=n.charCodeAt(0);if(43===i||45===i){if(r=n.charCodeAt(2),88===r||120===r)return NaN}else if(48===i){switch(n.charCodeAt(1)){case 66:case 98:e=2,o=49;break;case 79:case 111:e=8,o=55;break;default:return+n}for(var u,a=n.slice(2),s=0,l=a.length;l>s;s++)if(u=a.charCodeAt(s),48>u||u>o)return NaN;return parseInt(a,e)}}return+n};l(" 0o1")&&l("0b1")&&!l("+0x1")||(l=function(t){var n=arguments.length<1?0:t,r=this;return r instanceof l&&(v?a(function(){p.valueOf.call(r)}):u(r)!=s)?new h(y(n)):y(n)},e.each.call(t(19)?e.getNames(h):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),function(t){i(h,t)&&!i(l,t)&&e.setDesc(l,t,e.getDesc(h,t))}),l.prototype=p,p.constructor=l,t(61)(o,s,l))},{11:11,19:19,24:24,29:29,30:30,46:46,61:61,74:74,81:81}],115:[function(t,n,r){var e=t(22);e(e.S,"Number",{EPSILON:Math.pow(2,-52)})},{22:22}],116:[function(t,n,r){var e=t(22),o=t(29).isFinite;e(e.S,"Number",{isFinite:function(t){return"number"==typeof t&&o(t)}})},{22:22,29:29}],117:[function(t,n,r){var e=t(22);e(e.S,"Number",{isInteger:t(37)})},{22:22,37:37}],118:[function(t,n,r){var e=t(22);e(e.S,"Number",{isNaN:function(t){return t!=t}})},{22:22}],119:[function(t,n,r){var e=t(22),o=t(37),i=Math.abs;e(e.S,"Number",{isSafeInteger:function(t){return o(t)&&i(t)<=9007199254740991}})},{22:22,37:37}],120:[function(t,n,r){var e=t(22);e(e.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},{22:22}],121:[function(t,n,r){var e=t(22);e(e.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},{22:22}],122:[function(t,n,r){var e=t(22);e(e.S,"Number",{parseFloat:parseFloat})},{22:22}],123:[function(t,n,r){var e=t(22);e(e.S,"Number",{parseInt:parseInt})},{22:22}],124:[function(t,n,r){var e=t(22);e(e.S+e.F,"Object",{assign:t(53)})},{22:22,53:53}],125:[function(t,n,r){var e=t(38);t(54)("freeze",function(t){return function(n){return t&&e(n)?t(n):n}})},{38:38,54:54}],126:[function(t,n,r){var e=t(78);t(54)("getOwnPropertyDescriptor",function(t){return function(n,r){return t(e(n),r)}})},{54:54,78:78}],127:[function(t,n,r){t(54)("getOwnPropertyNames",function(){return t(28).get})},{28:28,54:54}],128:[function(t,n,r){var e=t(80);t(54)("getPrototypeOf",function(t){return function(n){return t(e(n))}})},{54:54,80:80}],129:[function(t,n,r){var e=t(38);t(54)("isExtensible",function(t){return function(n){return e(n)?t?t(n):!0:!1}})},{38:38,54:54}],130:[function(t,n,r){var e=t(38);t(54)("isFrozen",function(t){return function(n){return e(n)?t?t(n):!1:!0}})},{38:38,54:54}],131:[function(t,n,r){var e=t(38);t(54)("isSealed",function(t){return function(n){return e(n)?t?t(n):!1:!0}})},{38:38,54:54}],132:[function(t,n,r){var e=t(22);e(e.S,"Object",{is:t(63)})},{22:22,63:63}],133:[function(t,n,r){var e=t(80);t(54)("keys",function(t){return function(n){return t(e(n))}})},{54:54,80:80}],134:[function(t,n,r){var e=t(38);t(54)("preventExtensions",function(t){return function(n){return t&&e(n)?t(n):n}})},{38:38,54:54}],135:[function(t,n,r){var e=t(38);t(54)("seal",function(t){return function(n){return t&&e(n)?t(n):n}})},{38:38,54:54}],136:[function(t,n,r){var e=t(22);e(e.S,"Object",{setPrototypeOf:t(64).set})},{22:22,64:64}],137:[function(t,n,r){"use strict";var e=t(10),o={};o[t(83)("toStringTag")]="z",o+""!="[object z]"&&t(61)(Object.prototype,"toString",function(){return"[object "+e(this)+"]"},!0)},{10:10,61:61,83:83}],138:[function(t,n,r){"use strict";var e,o=t(46),i=t(48),u=t(29),c=t(17),a=t(10),f=t(22),s=t(38),l=t(4),h=t(2),p=t(69),v=t(27),g=t(64).set,y=t(63),d=t(83)("species"),m=t(68),S=t(52),b="Promise",x=u.process,w="process"==a(x),_=u[b],E=function(t){var n=new _(function(){});return t&&(n.constructor=Object),_.resolve(n)===n},O=function(){function n(t){var r=new _(t);return g(r,n.prototype),r}var r=!1;try{if(r=_&&_.resolve&&E(),g(n,_),n.prototype=o.create(_.prototype,{constructor:{value:n}}),n.resolve(5).then(function(){})instanceof n||(r=!1),r&&t(19)){var e=!1;_.resolve(o.setDesc({},"then",{get:function(){e=!0}})),r=e}}catch(i){r=!1}return r}(),M=function(t,n){return i&&t===_&&n===e?!0:y(t,n)},P=function(t){var n=l(t)[d];return void 0!=n?n:t},j=function(t){var n;return s(t)&&"function"==typeof(n=t.then)?n:!1},N=function(t){var n,r;this.promise=new t(function(t,e){if(void 0!==n||void 0!==r)throw TypeError("Bad Promise constructor");n=t,r=e}),this.resolve=h(n),this.reject=h(r)},F=function(t){try{t()}catch(n){return{error:n}}},A=function(t,n){if(!t.n){t.n=!0;var r=t.c;S(function(){for(var e=t.v,o=1==t.s,i=0,c=function(n){var r,i,u=o?n.ok:n.fail,c=n.resolve,a=n.reject;try{u?(o||(t.h=!0),r=u===!0?e:u(e),r===n.promise?a(TypeError("Promise-chain cycle")):(i=j(r))?i.call(r,c,a):c(r)):a(e)}catch(f){a(f)}};r.length>i;)c(r[i++]);r.length=0,t.n=!1,n&&setTimeout(function(){var n,r,o=t.p;D(o)&&(w?x.emit("unhandledRejection",e,o):(n=u.onunhandledrejection)?n({promise:o,reason:e}):(r=u.console)&&r.error&&r.error("Unhandled promise rejection",e)),t.a=void 0},1)})}},D=function(t){var n,r=t._d,e=r.a||r.c,o=0;if(r.h)return!1;for(;e.length>o;)if(n=e[o++],n.fail||!D(n.promise))return!1;return!0},I=function(t){var n=this;n.d||(n.d=!0,n=n.r||n,n.v=t,n.s=2,n.a=n.c.slice(),A(n,!0))},k=function(t){var n,r=this;if(!r.d){r.d=!0,r=r.r||r;try{if(r.p===t)throw TypeError("Promise can't be resolved itself");(n=j(t))?S(function(){var e={r:r,d:!1};try{n.call(t,c(k,e,1),c(I,e,1))}catch(o){I.call(e,o)}}):(r.v=t,r.s=1,A(r,!1))}catch(e){I.call({r:r,d:!1},e)}}};O||(_=function(t){h(t);var n=this._d={p:p(this,_,b),c:[],a:void 0,s:0,d:!1,v:void 0,h:!1,n:!1};try{t(c(k,n,1),c(I,n,1))}catch(r){I.call(n,r)}},t(60)(_.prototype,{then:function(t,n){var r=new N(m(this,_)),e=r.promise,o=this._d;return r.ok="function"==typeof t?t:!0,r.fail="function"==typeof n&&n,o.c.push(r),o.a&&o.a.push(r),o.s&&A(o,!1),e},"catch":function(t){return this.then(void 0,t)}})),f(f.G+f.W+f.F*!O,{Promise:_}),t(66)(_,b),t(65)(b),e=t(16)[b],f(f.S+f.F*!O,b,{reject:function(t){var n=new N(this),r=n.reject;return r(t),n.promise}}),f(f.S+f.F*(!O||E(!0)),b,{resolve:function(t){if(t instanceof _&&M(t.constructor,this))return t;var n=new N(this),r=n.resolve;return r(t),n.promise}}),f(f.S+f.F*!(O&&t(43)(function(t){_.all(t)["catch"](function(){})})),b,{all:function(t){var n=P(this),r=new N(n),e=r.resolve,i=r.reject,u=[],c=F(function(){v(t,!1,u.push,u);var r=u.length,c=Array(r);r?o.each.call(u,function(t,o){var u=!1;n.resolve(t).then(function(t){u||(u=!0,c[o]=t,--r||e(c))},i)}):e(c)});return c&&i(c.error),r.promise},race:function(t){var n=P(this),r=new N(n),e=r.reject,o=F(function(){v(t,!1,function(t){n.resolve(t).then(r.resolve,e)})});return o&&e(o.error),r.promise}})},{10:10,16:16,17:17,19:19,2:2,22:22,27:27,29:29,38:38,4:4,43:43,46:46,48:48,52:52,60:60,63:63,64:64,65:65,66:66,68:68,69:69,83:83}],139:[function(t,n,r){var e=t(22),o=Function.apply;e(e.S,"Reflect",{apply:function(t,n,r){return o.call(t,n,r)}})},{22:22}],140:[function(t,n,r){var e=t(46),o=t(22),i=t(2),u=t(4),c=t(38),a=Function.bind||t(16).Function.prototype.bind;o(o.S+o.F*t(24)(function(){function t(){}return!(Reflect.construct(function(){},[],t)instanceof t)}),"Reflect",{construct:function(t,n){i(t);var r=arguments.length<3?t:i(arguments[2]);if(t==r){if(void 0!=n)switch(u(n).length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3])}var o=[null];return o.push.apply(o,n),new(a.apply(t,o))}var f=r.prototype,s=e.create(c(f)?f:Object.prototype),l=Function.apply.call(t,s,n);return c(l)?l:s}})},{16:16,2:2,22:22,24:24,38:38,4:4,46:46}],141:[function(t,n,r){var e=t(46),o=t(22),i=t(4);o(o.S+o.F*t(24)(function(){Reflect.defineProperty(e.setDesc({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(t,n,r){i(t);try{return e.setDesc(t,n,r),!0}catch(o){return!1}}})},{22:22,24:24,4:4,46:46}],142:[function(t,n,r){var e=t(22),o=t(46).getDesc,i=t(4);e(e.S,"Reflect",{deleteProperty:function(t,n){var r=o(i(t),n);return r&&!r.configurable?!1:delete t[n]}})},{22:22,4:4,46:46}],143:[function(t,n,r){"use strict";var e=t(22),o=t(4),i=function(t){this._t=o(t),this._i=0;var n,r=this._k=[];for(n in t)r.push(n)};t(41)(i,"Object",function(){var t,n=this,r=n._k;do if(n._i>=r.length)return{value:void 0,done:!0};while(!((t=r[n._i++])in n._t));return{value:t,done:!1}}),e(e.S,"Reflect",{enumerate:function(t){return new i(t)}})},{22:22,4:4,41:41}],144:[function(t,n,r){var e=t(46),o=t(22),i=t(4);o(o.S,"Reflect",{getOwnPropertyDescriptor:function(t,n){return e.getDesc(i(t),n)}})},{22:22,4:4,46:46}],145:[function(t,n,r){var e=t(22),o=t(46).getProto,i=t(4);e(e.S,"Reflect",{getPrototypeOf:function(t){return o(i(t))}})},{22:22,4:4,46:46}],146:[function(t,n,r){function e(t,n){var r,u,f=arguments.length<3?t:arguments[2];return a(t)===f?t[n]:(r=o.getDesc(t,n))?i(r,"value")?r.value:void 0!==r.get?r.get.call(f):void 0:c(u=o.getProto(t))?e(u,n,f):void 0}var o=t(46),i=t(30),u=t(22),c=t(38),a=t(4);u(u.S,"Reflect",{get:e})},{22:22,30:30,38:38,4:4,46:46}],147:[function(t,n,r){var e=t(22);e(e.S,"Reflect",{has:function(t,n){return n in t}})},{22:22}],148:[function(t,n,r){var e=t(22),o=t(4),i=Object.isExtensible;e(e.S,"Reflect",{isExtensible:function(t){return o(t),i?i(t):!0}})},{22:22,4:4}],149:[function(t,n,r){var e=t(22);e(e.S,"Reflect",{ownKeys:t(56)})},{22:22,56:56}],150:[function(t,n,r){var e=t(22),o=t(4),i=Object.preventExtensions;e(e.S,"Reflect",{preventExtensions:function(t){o(t);try{return i&&i(t),!0}catch(n){return!1}}})},{22:22,4:4}],151:[function(t,n,r){var e=t(22),o=t(64);o&&e(e.S,"Reflect",{setPrototypeOf:function(t,n){o.check(t,n);try{return o.set(t,n),!0}catch(r){return!1}}})},{22:22,64:64}],152:[function(t,n,r){function e(t,n,r){var u,s,l=arguments.length<4?t:arguments[3],h=o.getDesc(a(t),n);if(!h){if(f(s=o.getProto(t)))return e(s,n,r,l);h=c(0)}return i(h,"value")?h.writable!==!1&&f(l)?(u=o.getDesc(l,n)||c(0),u.value=r,o.setDesc(l,n,u),!0):!1:void 0===h.set?!1:(h.set.call(l,r),!0)}var o=t(46),i=t(30),u=t(22),c=t(59),a=t(4),f=t(38);u(u.S,"Reflect",{set:e})},{22:22,30:30,38:38,4:4,46:46,59:59}],153:[function(t,n,r){var e=t(46),o=t(29),i=t(39),u=t(26),c=o.RegExp,a=c,f=c.prototype,s=/a/g,l=/a/g,h=new c(s)!==s;!t(19)||h&&!t(24)(function(){return l[t(83)("match")]=!1,c(s)!=s||c(l)==l||"/a/i"!=c(s,"i")})||(c=function(t,n){var r=i(t),e=void 0===n;return this instanceof c||!r||t.constructor!==c||!e?h?new a(r&&!e?t.source:t,n):a((r=t instanceof c)?t.source:t,r&&e?u.call(t):n):t},e.each.call(e.getNames(a),function(t){t in c||e.setDesc(c,t,{configurable:!0,get:function(){return a[t]},set:function(n){a[t]=n}})}),f.constructor=c,c.prototype=f,t(61)(o,"RegExp",c)),t(65)("RegExp")},{19:19,24:24,26:26,29:29,39:39,46:46,61:61,65:65,83:83}],154:[function(t,n,r){var e=t(46);t(19)&&"g"!=/./g.flags&&e.setDesc(RegExp.prototype,"flags",{configurable:!0,get:t(26)})},{19:19,26:26,46:46}],155:[function(t,n,r){t(25)("match",1,function(t,n){return function(r){"use strict";var e=t(this),o=void 0==r?void 0:r[n];return void 0!==o?o.call(r,e):new RegExp(r)[n](String(e))}})},{25:25}],156:[function(t,n,r){t(25)("replace",2,function(t,n,r){return function(e,o){"use strict";var i=t(this),u=void 0==e?void 0:e[n];return void 0!==u?u.call(e,i,o):r.call(String(i),e,o)}})},{25:25}],157:[function(t,n,r){t(25)("search",1,function(t,n){return function(r){"use strict";var e=t(this),o=void 0==r?void 0:r[n];return void 0!==o?o.call(r,e):new RegExp(r)[n](String(e))}})},{25:25}],158:[function(t,n,r){t(25)("split",2,function(t,n,r){return function(e,o){"use strict";var i=t(this),u=void 0==e?void 0:e[n];return void 0!==u?u.call(e,i,o):r.call(String(i),e,o)}})},{25:25}],159:[function(t,n,r){"use strict";var e=t(12);t(15)("Set",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return e.def(this,t=0===t?0:t,t)}},e)},{12:12,15:15}],160:[function(t,n,r){"use strict";var e=t(22),o=t(70)(!1);e(e.P,"String",{codePointAt:function(t){return o(this,t)}})},{22:22,70:70}],161:[function(t,n,r){"use strict";var e=t(22),o=t(79),i=t(71),u="endsWith",c=""[u];e(e.P+e.F*t(23)(u),"String",{endsWith:function(t){var n=i(this,t,u),r=arguments,e=r.length>1?r[1]:void 0,a=o(n.length),f=void 0===e?a:Math.min(o(e),a),s=String(t);return c?c.call(n,s,f):n.slice(f-s.length,f)===s}})},{22:22,23:23,71:71,79:79}],162:[function(t,n,r){var e=t(22),o=t(76),i=String.fromCharCode,u=String.fromCodePoint;e(e.S+e.F*(!!u&&1!=u.length),"String",{fromCodePoint:function(t){for(var n,r=[],e=arguments,u=e.length,c=0;u>c;){if(n=+e[c++],o(n,1114111)!==n)throw RangeError(n+" is not a valid code point");r.push(65536>n?i(n):i(((n-=65536)>>10)+55296,n%1024+56320))}return r.join("")}})},{22:22,76:76}],163:[function(t,n,r){"use strict";var e=t(22),o=t(71),i="includes";e(e.P+e.F*t(23)(i),"String",{includes:function(t){return!!~o(this,t,i).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},{22:22,23:23,71:71}],164:[function(t,n,r){"use strict";var e=t(70)(!0);t(42)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,n=this._t,r=this._i;return r>=n.length?{value:void 0,done:!0}:(t=e(n,r),this._i+=t.length,{value:t,done:!1})})},{42:42,70:70}],165:[function(t,n,r){var e=t(22),o=t(78),i=t(79);e(e.S,"String",{raw:function(t){for(var n=o(t.raw),r=i(n.length),e=arguments,u=e.length,c=[],a=0;r>a;)c.push(String(n[a++])),u>a&&c.push(String(e[a]));return c.join("")}})},{22:22,78:78,79:79}],166:[function(t,n,r){var e=t(22);e(e.P,"String",{repeat:t(73)})},{22:22,73:73}],167:[function(t,n,r){"use strict";var e=t(22),o=t(79),i=t(71),u="startsWith",c=""[u];e(e.P+e.F*t(23)(u),"String",{startsWith:function(t){var n=i(this,t,u),r=arguments,e=o(Math.min(r.length>1?r[1]:void 0,n.length)),a=String(t);return c?c.call(n,a,e):n.slice(e,e+a.length)===a}})},{22:22,23:23,71:71,79:79}],168:[function(t,n,r){"use strict";t(74)("trim",function(t){return function(){return t(this,3)}})},{74:74}],169:[function(t,n,r){"use strict";var e=t(46),o=t(29),i=t(30),u=t(19),c=t(22),a=t(61),f=t(24),s=t(67),l=t(66),h=t(82),p=t(83),v=t(47),g=t(28),y=t(21),d=t(36),m=t(4),S=t(78),b=t(59),x=e.getDesc,w=e.setDesc,_=e.create,E=g.get,O=o.Symbol,M=o.JSON,P=M&&M.stringify,j=!1,N=p("_hidden"),F=e.isEnum,A=s("symbol-registry"),D=s("symbols"),I="function"==typeof O,k=Object.prototype,L=u&&f(function(){return 7!=_(w({},"a",{get:function(){return w(this,"a",{value:7}).a}})).a})?function(t,n,r){var e=x(k,n);e&&delete k[n],w(t,n,r),e&&t!==k&&w(k,n,e)}:w,T=function(t){var n=D[t]=_(O.prototype);return n._k=t,u&&j&&L(k,t,{configurable:!0,set:function(n){i(this,N)&&i(this[N],t)&&(this[N][t]=!1),L(this,t,b(1,n))}}),n},R=function(t){return"symbol"==typeof t},C=function(t,n,r){return r&&i(D,n)?(r.enumerable?(i(t,N)&&t[N][n]&&(t[N][n]=!1),r=_(r,{enumerable:b(0,!1)})):(i(t,N)||w(t,N,b(1,{})),t[N][n]=!0),L(t,n,r)):w(t,n,r)},G=function(t,n){m(t);for(var r,e=y(n=S(n)),o=0,i=e.length;i>o;)C(t,r=e[o++],n[r]);return t},W=function(t,n){return void 0===n?_(t):G(_(t),n)},U=function(t){var n=F.call(this,t);return n||!i(this,t)||!i(D,t)||i(this,N)&&this[N][t]?n:!0},K=function(t,n){var r=x(t=S(t),n);return!r||!i(D,n)||i(t,N)&&t[N][n]||(r.enumerable=!0),r},z=function(t){for(var n,r=E(S(t)),e=[],o=0;r.length>o;)i(D,n=r[o++])||n==N||e.push(n);return e},q=function(t){for(var n,r=E(S(t)),e=[],o=0;r.length>o;)i(D,n=r[o++])&&e.push(D[n]);return e},J=function(t){if(void 0!==t&&!R(t)){for(var n,r,e=[t],o=1,i=arguments;i.length>o;)e.push(i[o++]);return n=e[1],"function"==typeof n&&(r=n),!r&&d(n)||(n=function(t,n){return r&&(n=r.call(this,t,n)),R(n)?void 0:n}),e[1]=n,P.apply(M,e)}},B=f(function(){var t=O();return"[null]"!=P([t])||"{}"!=P({a:t})||"{}"!=P(Object(t))});I||(O=function(){if(R(this))throw TypeError("Symbol is not a constructor");return T(h(arguments.length>0?arguments[0]:void 0))},a(O.prototype,"toString",function(){return this._k}),R=function(t){return t instanceof O},e.create=W,e.isEnum=U,e.getDesc=K,e.setDesc=C,e.setDescs=G,e.getNames=g.get=z,e.getSymbols=q,u&&!t(48)&&a(k,"propertyIsEnumerable",U,!0));var V={"for":function(t){return i(A,t+="")?A[t]:A[t]=O(t)},keyFor:function(t){return v(A,t)},useSetter:function(){j=!0},useSimple:function(){j=!1}};e.each.call("hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),function(t){var n=p(t);V[t]=I?n:T(n)}),j=!0,c(c.G+c.W,{Symbol:O}),c(c.S,"Symbol",V),c(c.S+c.F*!I,"Object",{create:W,defineProperty:C,defineProperties:G,getOwnPropertyDescriptor:K,getOwnPropertyNames:z,getOwnPropertySymbols:q}),M&&c(c.S+c.F*(!I||B),"JSON",{stringify:J}),l(O,"Symbol"),l(Math,"Math",!0),l(o.JSON,"JSON",!0)},{19:19,21:21,22:22,24:24,28:28,29:29,30:30,36:36,4:4,46:46,47:47,48:48,59:59,61:61,66:66,67:67,78:78,82:82,83:83}],170:[function(t,n,r){"use strict";var e=t(46),o=t(61),i=t(14),u=t(38),c=t(30),a=i.frozenStore,f=i.WEAK,s=Object.isExtensible||u,l={},h=t(15)("WeakMap",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){if(u(t)){if(!s(t))return a(this).get(t);if(c(t,f))return t[f][this._i]}},set:function(t,n){return i.def(this,t,n)}},i,!0,!0);7!=(new h).set((Object.freeze||Object)(l),7).get(l)&&e.each.call(["delete","has","get","set"],function(t){var n=h.prototype,r=n[t];o(n,t,function(n,e){if(u(n)&&!s(n)){var o=a(this)[t](n,e);return"set"==t?this:o}return r.call(this,n,e)})})},{14:14,15:15,30:30,38:38,46:46,61:61}],171:[function(t,n,r){"use strict";var e=t(14);t(15)("WeakSet",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return e.def(this,t,!0)}},e,!1,!0)},{14:14,15:15}],172:[function(t,n,r){"use strict";var e=t(22),o=t(7)(!0);e(e.P,"Array",{includes:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),t(3)("includes")},{22:22,3:3,7:7}],173:[function(t,n,r){var e=t(22);e(e.P,"Map",{toJSON:t(13)("Map")})},{13:13,22:22}],174:[function(t,n,r){var e=t(22),o=t(55)(!0);e(e.S,"Object",{entries:function(t){return o(t)}})},{22:22,55:55}],175:[function(t,n,r){var e=t(46),o=t(22),i=t(56),u=t(78),c=t(59);o(o.S,"Object",{getOwnPropertyDescriptors:function(t){for(var n,r,o=u(t),a=e.setDesc,f=e.getDesc,s=i(o),l={},h=0;s.length>h;)r=f(o,n=s[h++]),n in l?a(l,n,c(0,r)):l[n]=r;return l}})},{22:22,46:46,56:56,59:59,78:78}],176:[function(t,n,r){var e=t(22),o=t(55)(!1);e(e.S,"Object",{values:function(t){return o(t)}})},{22:22,55:55}],177:[function(t,n,r){var e=t(22),o=t(62)(/[\\^$*+?.()|[\]{}]/g,"\\$&");e(e.S,"RegExp",{escape:function(t){return o(t)}})},{22:22,62:62}],178:[function(t,n,r){var e=t(22);e(e.P,"Set",{toJSON:t(13)("Set")})},{13:13,22:22}],179:[function(t,n,r){"use strict";var e=t(22),o=t(70)(!0);e(e.P,"String",{at:function(t){return o(this,t)}})},{22:22,70:70}],180:[function(t,n,r){"use strict";var e=t(22),o=t(72);e(e.P,"String",{padLeft:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0,!0)}})},{22:22,72:72}],181:[function(t,n,r){"use strict";var e=t(22),o=t(72);e(e.P,"String",{padRight:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0,!1)}})},{22:22,72:72}],182:[function(t,n,r){"use strict";t(74)("trimLeft",function(t){return function(){return t(this,1)}})},{74:74}],183:[function(t,n,r){"use strict";t(74)("trimRight",function(t){return function(){return t(this,2)}})},{74:74}],184:[function(t,n,r){var e=t(46),o=t(22),i=t(17),u=t(16).Array||Array,c={},a=function(t,n){e.each.call(t.split(","),function(t){void 0==n&&t in u?c[t]=u[t]:t in[]&&(c[t]=i(Function.call,[][t],n))})};a("pop,reverse,shift,keys,values,entries",1),a("indexOf,every,some,forEach,map,filter,find,findIndex,includes",3),a("join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill"),o(o.S,"Array",c)},{16:16,17:17,22:22,46:46}],185:[function(t,n,r){t(91);var e=t(29),o=t(31),i=t(45),u=t(83)("iterator"),c=e.NodeList,a=e.HTMLCollection,f=c&&c.prototype,s=a&&a.prototype,l=i.NodeList=i.HTMLCollection=i.Array;f&&!f[u]&&o(f,u,l),s&&!s[u]&&o(s,u,l)},{29:29,31:31,45:45,83:83,91:91}],186:[function(t,n,r){var e=t(22),o=t(75);e(e.G+e.B,{setImmediate:o.set,clearImmediate:o.clear})},{22:22,75:75}],187:[function(t,n,r){var e=t(29),o=t(22),i=t(33),u=t(57),c=e.navigator,a=!!c&&/MSIE .\./.test(c.userAgent),f=function(t){return a?function(n,r){return t(i(u,[].slice.call(arguments,2),"function"==typeof n?n:Function(n)),r)}:t};o(o.G+o.B+o.F*a,{setTimeout:f(e.setTimeout),setInterval:f(e.setInterval)})},{22:22,29:29,33:33,57:57}],188:[function(t,n,r){t(85),t(169),t(124),t(132),t(136),t(137),t(125),t(135),t(134),t(130),t(131),t(129),t(126),t(128),t(133),t(127),t(95),t(94),t(114),t(115),t(116),t(117),t(118),t(119),t(120),t(121),t(122),t(123),t(97),t(98),t(99),t(100),t(101),t(102),t(103),t(104),t(105),t(106),t(107),t(108),t(109),t(110),t(111),t(112),t(113),t(162),t(165),t(168),t(164),t(160),t(161),t(163),t(166),t(167),t(90),t(92),t(91),t(93),t(86),t(87),t(89),t(88),t(153),t(154),t(155),t(156),t(157),t(158),t(138),t(96),t(159),t(170),t(171),t(139),t(140),t(141),t(142),t(143),t(146),t(144),t(145),t(147),t(148),t(149),t(150),t(152),t(151),t(172),t(179),t(180),t(181),t(182),t(183),t(177),t(175),t(176),t(174),t(173),t(178),t(184),t(187),t(186),t(185),n.exports=t(16)},{100:100,101:101,102:102,103:103,104:104,105:105,106:106,107:107,108:108,109:109,110:110,111:111,112:112,113:113,114:114,115:115,116:116,117:117,118:118,119:119,120:120,121:121,122:122,123:123,124:124,125:125,126:126,127:127,128:128,129:129,130:130,131:131,132:132,133:133,134:134,135:135,136:136,137:137,138:138,139:139,140:140,141:141,142:142,143:143,144:144,145:145,146:146,147:147,148:148,149:149,150:150,151:151,152:152,153:153,154:154,155:155,156:156,157:157,158:158,159:159,16:16,160:160,161:161,162:162,163:163,164:164,165:165,166:166,167:167,168:168,169:169,170:170,171:171,172:172,173:173,174:174,175:175,176:176,177:177,178:178,179:179,180:180,181:181,182:182,183:183,184:184,185:185,186:186,187:187,85:85,86:86,87:87,88:88,89:89,90:90,91:91,92:92,93:93,94:94,95:95,96:96,97:97,98:98,99:99}],189:[function(t,n,r){(function(t){!function(t){"use strict";function r(t,n,r,e){var i=Object.create((n||o).prototype),u=new p(e||[]);return i._invoke=s(t,r,u),i}function e(t,n,r){try{return{type:"normal",arg:t.call(n,r)}}catch(e){return{type:"throw",arg:e}}}function o(){}function i(){}function u(){}function c(t){["next","throw","return"].forEach(function(n){t[n]=function(t){return this._invoke(n,t)}})}function a(t){this.arg=t}function f(t){function n(n,r){var e=t[n](r),u=e.value;return u instanceof a?Promise.resolve(u.arg).then(o,i):Promise.resolve(u).then(function(t){return e.value=t,e})}function r(t,r){function o(){return n(t,r)}return e=e?e.then(o,o):new Promise(function(t){t(o())})}"object"==typeof process&&process.domain&&(n=process.domain.bind(n));var e,o=n.bind(t,"next"),i=n.bind(t,"throw");n.bind(t,"return");this._invoke=r}function s(t,n,r){var o=x;return function(i,u){if(o===_)throw new Error("Generator is already running");if(o===E){if("throw"===i)throw u;return g()}for(;;){var c=r.delegate;if(c){if("return"===i||"throw"===i&&c.iterator[i]===y){r.delegate=null;var a=c.iterator["return"];if(a){var f=e(a,c.iterator,u);if("throw"===f.type){i="throw",u=f.arg;continue}}if("return"===i)continue}var f=e(c.iterator[i],c.iterator,u);if("throw"===f.type){r.delegate=null,i="throw",u=f.arg;continue}i="next",u=y;var s=f.arg;if(!s.done)return o=w,s;r[c.resultName]=s.value,r.next=c.nextLoc,r.delegate=null}if("next"===i)o===w?r.sent=u:r.sent=y;else if("throw"===i){if(o===x)throw o=E,u;r.dispatchException(u)&&(i="next",u=y)}else"return"===i&&r.abrupt("return",u);o=_;var f=e(t,n,r);if("normal"===f.type){o=r.done?E:w;var s={value:f.arg,done:r.done};if(f.arg!==O)return s;r.delegate&&"next"===i&&(u=y)}else"throw"===f.type&&(o=E,i="throw",u=f.arg)}}}function l(t){var n={tryLoc:t[0]};1 in t&&(n.catchLoc=t[1]),2 in t&&(n.finallyLoc=t[2],n.afterLoc=t[3]),this.tryEntries.push(n)}function h(t){var n=t.completion||{};n.type="normal",delete n.arg,t.completion=n}function p(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(l,this),this.reset(!0)}function v(t){if(t){var n=t[m];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,e=function o(){for(;++r=0;--e){var o=this.tryEntries[e],i=o.completion;if("root"===o.tryLoc)return n("end");if(o.tryLoc<=this.prev){var u=d.call(o,"catchLoc"),c=d.call(o,"finallyLoc");if(u&&c){if(this.prev=0;--r){var e=this.tryEntries[r];if(e.tryLoc<=this.prev&&d.call(e,"finallyLoc")&&this.prev=0;--n){var r=this.tryEntries[n];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),h(r),O}},"catch":function(t){for(var n=this.tryEntries.length-1;n>=0;--n){var r=this.tryEntries[n];if(r.tryLoc===t){var e=r.completion;if("throw"===e.type){var o=e.arg;h(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:v(t),resultName:n,nextLoc:r},O}}}("object"==typeof t?t:"object"==typeof window?window:"object"==typeof self?self:this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[1]);
diff --git a/jspm_packages/npm/babel-core@5.8.38/browser.js b/jspm_packages/npm/babel-core@5.8.38/browser.js
new file mode 100644
index 0000000..56280dc
--- /dev/null
+++ b/jspm_packages/npm/babel-core@5.8.38/browser.js
@@ -0,0 +1,68451 @@
+/* */
+"format global";
+"exports babel";
+
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.babel = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the 'Software'), to
+// deal in the Software without restriction, including without limitation the
+// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+// sell copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// when used in node, this will actually load the util module we depend on
+// versus loading the builtin util module as happens otherwise
+// this is a bug in node module loading as far as I am concerned
+var util = _dereq_(13);
+
+var pSlice = Array.prototype.slice;
+var hasOwn = Object.prototype.hasOwnProperty;
+
+// 1. The assert module provides functions that throw
+// AssertionError's when particular conditions are not met. The
+// assert module must conform to the following interface.
+
+var assert = module.exports = ok;
+
+// 2. The AssertionError is defined in assert.
+// new assert.AssertionError({ message: message,
+// actual: actual,
+// expected: expected })
+
+assert.AssertionError = function AssertionError(options) {
+ this.name = 'AssertionError';
+ this.actual = options.actual;
+ this.expected = options.expected;
+ this.operator = options.operator;
+ if (options.message) {
+ this.message = options.message;
+ this.generatedMessage = false;
+ } else {
+ this.message = getMessage(this);
+ this.generatedMessage = true;
+ }
+ var stackStartFunction = options.stackStartFunction || fail;
+
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(this, stackStartFunction);
+ }
+ else {
+ // non v8 browsers so we can have a stacktrace
+ var err = new Error();
+ if (err.stack) {
+ var out = err.stack;
+
+ // try to strip useless frames
+ var fn_name = stackStartFunction.name;
+ var idx = out.indexOf('\n' + fn_name);
+ if (idx >= 0) {
+ // once we have located the function frame
+ // we need to strip out everything before it (and its line)
+ var next_line = out.indexOf('\n', idx + 1);
+ out = out.substring(next_line + 1);
+ }
+
+ this.stack = out;
+ }
+ }
+};
+
+// assert.AssertionError instanceof Error
+util.inherits(assert.AssertionError, Error);
+
+function replacer(key, value) {
+ if (util.isUndefined(value)) {
+ return '' + value;
+ }
+ if (util.isNumber(value) && !isFinite(value)) {
+ return value.toString();
+ }
+ if (util.isFunction(value) || util.isRegExp(value)) {
+ return value.toString();
+ }
+ return value;
+}
+
+function truncate(s, n) {
+ if (util.isString(s)) {
+ return s.length < n ? s : s.slice(0, n);
+ } else {
+ return s;
+ }
+}
+
+function getMessage(self) {
+ return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
+ self.operator + ' ' +
+ truncate(JSON.stringify(self.expected, replacer), 128);
+}
+
+// At present only the three keys mentioned above are used and
+// understood by the spec. Implementations or sub modules can pass
+// other keys to the AssertionError's constructor - they will be
+// ignored.
+
+// 3. All of the following functions must throw an AssertionError
+// when a corresponding condition is not met, with a message that
+// may be undefined if not provided. All assertion methods provide
+// both the actual and expected values to the assertion error for
+// display purposes.
+
+function fail(actual, expected, message, operator, stackStartFunction) {
+ throw new assert.AssertionError({
+ message: message,
+ actual: actual,
+ expected: expected,
+ operator: operator,
+ stackStartFunction: stackStartFunction
+ });
+}
+
+// EXTENSION! allows for well behaved errors defined elsewhere.
+assert.fail = fail;
+
+// 4. Pure assertion tests whether a value is truthy, as determined
+// by !!guard.
+// assert.ok(guard, message_opt);
+// This statement is equivalent to assert.equal(true, !!guard,
+// message_opt);. To test strictly for the value true, use
+// assert.strictEqual(true, guard, message_opt);.
+
+function ok(value, message) {
+ if (!value) fail(value, true, message, '==', assert.ok);
+}
+assert.ok = ok;
+
+// 5. The equality assertion tests shallow, coercive equality with
+// ==.
+// assert.equal(actual, expected, message_opt);
+
+assert.equal = function equal(actual, expected, message) {
+ if (actual != expected) fail(actual, expected, message, '==', assert.equal);
+};
+
+// 6. The non-equality assertion tests for whether two objects are not equal
+// with != assert.notEqual(actual, expected, message_opt);
+
+assert.notEqual = function notEqual(actual, expected, message) {
+ if (actual == expected) {
+ fail(actual, expected, message, '!=', assert.notEqual);
+ }
+};
+
+// 7. The equivalence assertion tests a deep equality relation.
+// assert.deepEqual(actual, expected, message_opt);
+
+assert.deepEqual = function deepEqual(actual, expected, message) {
+ if (!_deepEqual(actual, expected)) {
+ fail(actual, expected, message, 'deepEqual', assert.deepEqual);
+ }
+};
+
+function _deepEqual(actual, expected) {
+ // 7.1. All identical values are equivalent, as determined by ===.
+ if (actual === expected) {
+ return true;
+
+ } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
+ if (actual.length != expected.length) return false;
+
+ for (var i = 0; i < actual.length; i++) {
+ if (actual[i] !== expected[i]) return false;
+ }
+
+ return true;
+
+ // 7.2. If the expected value is a Date object, the actual value is
+ // equivalent if it is also a Date object that refers to the same time.
+ } else if (util.isDate(actual) && util.isDate(expected)) {
+ return actual.getTime() === expected.getTime();
+
+ // 7.3 If the expected value is a RegExp object, the actual value is
+ // equivalent if it is also a RegExp object with the same source and
+ // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
+ } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
+ return actual.source === expected.source &&
+ actual.global === expected.global &&
+ actual.multiline === expected.multiline &&
+ actual.lastIndex === expected.lastIndex &&
+ actual.ignoreCase === expected.ignoreCase;
+
+ // 7.4. Other pairs that do not both pass typeof value == 'object',
+ // equivalence is determined by ==.
+ } else if (!util.isObject(actual) && !util.isObject(expected)) {
+ return actual == expected;
+
+ // 7.5 For all other Object pairs, including Array objects, equivalence is
+ // determined by having the same number of owned properties (as verified
+ // with Object.prototype.hasOwnProperty.call), the same set of keys
+ // (although not necessarily the same order), equivalent values for every
+ // corresponding key, and an identical 'prototype' property. Note: this
+ // accounts for both named and indexed properties on Arrays.
+ } else {
+ return objEquiv(actual, expected);
+ }
+}
+
+function isArguments(object) {
+ return Object.prototype.toString.call(object) == '[object Arguments]';
+}
+
+function objEquiv(a, b) {
+ if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
+ return false;
+ // an identical 'prototype' property.
+ if (a.prototype !== b.prototype) return false;
+ // if one is a primitive, the other must be same
+ if (util.isPrimitive(a) || util.isPrimitive(b)) {
+ return a === b;
+ }
+ var aIsArgs = isArguments(a),
+ bIsArgs = isArguments(b);
+ if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
+ return false;
+ if (aIsArgs) {
+ a = pSlice.call(a);
+ b = pSlice.call(b);
+ return _deepEqual(a, b);
+ }
+ var ka = objectKeys(a),
+ kb = objectKeys(b),
+ key, i;
+ // having the same number of owned properties (keys incorporates
+ // hasOwnProperty)
+ if (ka.length != kb.length)
+ return false;
+ //the same set of keys (although not necessarily the same order),
+ ka.sort();
+ kb.sort();
+ //~~~cheap key test
+ for (i = ka.length - 1; i >= 0; i--) {
+ if (ka[i] != kb[i])
+ return false;
+ }
+ //equivalent values for every corresponding key, and
+ //~~~possibly expensive deep test
+ for (i = ka.length - 1; i >= 0; i--) {
+ key = ka[i];
+ if (!_deepEqual(a[key], b[key])) return false;
+ }
+ return true;
+}
+
+// 8. The non-equivalence assertion tests for any deep inequality.
+// assert.notDeepEqual(actual, expected, message_opt);
+
+assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
+ if (_deepEqual(actual, expected)) {
+ fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
+ }
+};
+
+// 9. The strict equality assertion tests strict equality, as determined by ===.
+// assert.strictEqual(actual, expected, message_opt);
+
+assert.strictEqual = function strictEqual(actual, expected, message) {
+ if (actual !== expected) {
+ fail(actual, expected, message, '===', assert.strictEqual);
+ }
+};
+
+// 10. The strict non-equality assertion tests for strict inequality, as
+// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
+
+assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
+ if (actual === expected) {
+ fail(actual, expected, message, '!==', assert.notStrictEqual);
+ }
+};
+
+function expectedException(actual, expected) {
+ if (!actual || !expected) {
+ return false;
+ }
+
+ if (Object.prototype.toString.call(expected) == '[object RegExp]') {
+ return expected.test(actual);
+ } else if (actual instanceof expected) {
+ return true;
+ } else if (expected.call({}, actual) === true) {
+ return true;
+ }
+
+ return false;
+}
+
+function _throws(shouldThrow, block, expected, message) {
+ var actual;
+
+ if (util.isString(expected)) {
+ message = expected;
+ expected = null;
+ }
+
+ try {
+ block();
+ } catch (e) {
+ actual = e;
+ }
+
+ message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
+ (message ? ' ' + message : '.');
+
+ if (shouldThrow && !actual) {
+ fail(actual, expected, 'Missing expected exception' + message);
+ }
+
+ if (!shouldThrow && expectedException(actual, expected)) {
+ fail(actual, expected, 'Got unwanted exception' + message);
+ }
+
+ if ((shouldThrow && actual && expected &&
+ !expectedException(actual, expected)) || (!shouldThrow && actual)) {
+ throw actual;
+ }
+}
+
+// 11. Expected to throw an error:
+// assert.throws(block, Error_opt, message_opt);
+
+assert.throws = function(block, /*optional*/error, /*optional*/message) {
+ _throws.apply(this, [true].concat(pSlice.call(arguments)));
+};
+
+// EXTENSION! This is annoying to write outside this module.
+assert.doesNotThrow = function(block, /*optional*/message) {
+ _throws.apply(this, [false].concat(pSlice.call(arguments)));
+};
+
+assert.ifError = function(err) { if (err) {throw err;}};
+
+var objectKeys = Object.keys || function (obj) {
+ var keys = [];
+ for (var key in obj) {
+ if (hasOwn.call(obj, key)) keys.push(key);
+ }
+ return keys;
+};
+
+},{"13":13}],2:[function(_dereq_,module,exports){
+var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+
+;(function (exports) {
+ 'use strict';
+
+ var Arr = (typeof Uint8Array !== 'undefined')
+ ? Uint8Array
+ : Array
+
+ var PLUS = '+'.charCodeAt(0)
+ var SLASH = '/'.charCodeAt(0)
+ var NUMBER = '0'.charCodeAt(0)
+ var LOWER = 'a'.charCodeAt(0)
+ var UPPER = 'A'.charCodeAt(0)
+ var PLUS_URL_SAFE = '-'.charCodeAt(0)
+ var SLASH_URL_SAFE = '_'.charCodeAt(0)
+
+ function decode (elt) {
+ var code = elt.charCodeAt(0)
+ if (code === PLUS ||
+ code === PLUS_URL_SAFE)
+ return 62 // '+'
+ if (code === SLASH ||
+ code === SLASH_URL_SAFE)
+ return 63 // '/'
+ if (code < NUMBER)
+ return -1 //no match
+ if (code < NUMBER + 10)
+ return code - NUMBER + 26 + 26
+ if (code < UPPER + 26)
+ return code - UPPER
+ if (code < LOWER + 26)
+ return code - LOWER + 26
+ }
+
+ function b64ToByteArray (b64) {
+ var i, j, l, tmp, placeHolders, arr
+
+ if (b64.length % 4 > 0) {
+ throw new Error('Invalid string. Length must be a multiple of 4')
+ }
+
+ // the number of equal signs (place holders)
+ // if there are two placeholders, than the two characters before it
+ // represent one byte
+ // if there is only one, then the three characters before it represent 2 bytes
+ // this is just a cheap hack to not do indexOf twice
+ var len = b64.length
+ placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
+
+ // base64 is 4/3 + up to two characters of the original data
+ arr = new Arr(b64.length * 3 / 4 - placeHolders)
+
+ // if there are placeholders, only get up to the last complete 4 chars
+ l = placeHolders > 0 ? b64.length - 4 : b64.length
+
+ var L = 0
+
+ function push (v) {
+ arr[L++] = v
+ }
+
+ for (i = 0, j = 0; i < l; i += 4, j += 3) {
+ tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
+ push((tmp & 0xFF0000) >> 16)
+ push((tmp & 0xFF00) >> 8)
+ push(tmp & 0xFF)
+ }
+
+ if (placeHolders === 2) {
+ tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
+ push(tmp & 0xFF)
+ } else if (placeHolders === 1) {
+ tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
+ push((tmp >> 8) & 0xFF)
+ push(tmp & 0xFF)
+ }
+
+ return arr
+ }
+
+ function uint8ToBase64 (uint8) {
+ var i,
+ extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
+ output = "",
+ temp, length
+
+ function encode (num) {
+ return lookup.charAt(num)
+ }
+
+ function tripletToBase64 (num) {
+ return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
+ }
+
+ // go through the array every three bytes, we'll deal with trailing stuff later
+ for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
+ temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
+ output += tripletToBase64(temp)
+ }
+
+ // pad the end with zeros, but make sure to not forget the extra bytes
+ switch (extraBytes) {
+ case 1:
+ temp = uint8[uint8.length - 1]
+ output += encode(temp >> 2)
+ output += encode((temp << 4) & 0x3F)
+ output += '=='
+ break
+ case 2:
+ temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
+ output += encode(temp >> 10)
+ output += encode((temp >> 4) & 0x3F)
+ output += encode((temp << 2) & 0x3F)
+ output += '='
+ break
+ }
+
+ return output
+ }
+
+ exports.toByteArray = b64ToByteArray
+ exports.fromByteArray = uint8ToBase64
+}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
+
+},{}],3:[function(_dereq_,module,exports){
+
+},{}],4:[function(_dereq_,module,exports){
+(function (global){
+/*!
+ * The buffer module from node.js, for the browser.
+ *
+ * @author Feross Aboukhadijeh
+ * @license MIT
+ */
+/* eslint-disable no-proto */
+
+'use strict'
+
+var base64 = _dereq_(2)
+var ieee754 = _dereq_(6)
+var isArray = _dereq_(5)
+
+exports.Buffer = Buffer
+exports.SlowBuffer = SlowBuffer
+exports.INSPECT_MAX_BYTES = 50
+Buffer.poolSize = 8192 // not used by this implementation
+
+var rootParent = {}
+
+/**
+ * If `Buffer.TYPED_ARRAY_SUPPORT`:
+ * === true Use Uint8Array implementation (fastest)
+ * === false Use Object implementation (most compatible, even IE6)
+ *
+ * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
+ * Opera 11.6+, iOS 4.2+.
+ *
+ * Due to various browser bugs, sometimes the Object implementation will be used even
+ * when the browser supports typed arrays.
+ *
+ * Note:
+ *
+ * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
+ * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
+ *
+ * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
+ * on objects.
+ *
+ * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
+ *
+ * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
+ * incorrect length in some situations.
+
+ * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
+ * get the Object implementation, which is slower but behaves correctly.
+ */
+Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
+ ? global.TYPED_ARRAY_SUPPORT
+ : typedArraySupport()
+
+function typedArraySupport () {
+ function Bar () {}
+ try {
+ var arr = new Uint8Array(1)
+ arr.foo = function () { return 42 }
+ arr.constructor = Bar
+ return arr.foo() === 42 && // typed array instances can be augmented
+ arr.constructor === Bar && // constructor can be set
+ typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
+ arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
+ } catch (e) {
+ return false
+ }
+}
+
+function kMaxLength () {
+ return Buffer.TYPED_ARRAY_SUPPORT
+ ? 0x7fffffff
+ : 0x3fffffff
+}
+
+/**
+ * Class: Buffer
+ * =============
+ *
+ * The Buffer constructor returns instances of `Uint8Array` that are augmented
+ * with function properties for all the node `Buffer` API functions. We use
+ * `Uint8Array` so that square bracket notation works as expected -- it returns
+ * a single octet.
+ *
+ * By augmenting the instances, we can avoid modifying the `Uint8Array`
+ * prototype.
+ */
+function Buffer (arg) {
+ if (!(this instanceof Buffer)) {
+ // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
+ if (arguments.length > 1) return new Buffer(arg, arguments[1])
+ return new Buffer(arg)
+ }
+
+ if (!Buffer.TYPED_ARRAY_SUPPORT) {
+ this.length = 0
+ this.parent = undefined
+ }
+
+ // Common case.
+ if (typeof arg === 'number') {
+ return fromNumber(this, arg)
+ }
+
+ // Slightly less common case.
+ if (typeof arg === 'string') {
+ return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
+ }
+
+ // Unusual.
+ return fromObject(this, arg)
+}
+
+function fromNumber (that, length) {
+ that = allocate(that, length < 0 ? 0 : checked(length) | 0)
+ if (!Buffer.TYPED_ARRAY_SUPPORT) {
+ for (var i = 0; i < length; i++) {
+ that[i] = 0
+ }
+ }
+ return that
+}
+
+function fromString (that, string, encoding) {
+ if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
+
+ // Assumption: byteLength() return value is always < kMaxLength.
+ var length = byteLength(string, encoding) | 0
+ that = allocate(that, length)
+
+ that.write(string, encoding)
+ return that
+}
+
+function fromObject (that, object) {
+ if (Buffer.isBuffer(object)) return fromBuffer(that, object)
+
+ if (isArray(object)) return fromArray(that, object)
+
+ if (object == null) {
+ throw new TypeError('must start with number, buffer, array or string')
+ }
+
+ if (typeof ArrayBuffer !== 'undefined') {
+ if (object.buffer instanceof ArrayBuffer) {
+ return fromTypedArray(that, object)
+ }
+ if (object instanceof ArrayBuffer) {
+ return fromArrayBuffer(that, object)
+ }
+ }
+
+ if (object.length) return fromArrayLike(that, object)
+
+ return fromJsonObject(that, object)
+}
+
+function fromBuffer (that, buffer) {
+ var length = checked(buffer.length) | 0
+ that = allocate(that, length)
+ buffer.copy(that, 0, 0, length)
+ return that
+}
+
+function fromArray (that, array) {
+ var length = checked(array.length) | 0
+ that = allocate(that, length)
+ for (var i = 0; i < length; i += 1) {
+ that[i] = array[i] & 255
+ }
+ return that
+}
+
+// Duplicate of fromArray() to keep fromArray() monomorphic.
+function fromTypedArray (that, array) {
+ var length = checked(array.length) | 0
+ that = allocate(that, length)
+ // Truncating the elements is probably not what people expect from typed
+ // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
+ // of the old Buffer constructor.
+ for (var i = 0; i < length; i += 1) {
+ that[i] = array[i] & 255
+ }
+ return that
+}
+
+function fromArrayBuffer (that, array) {
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ // Return an augmented `Uint8Array` instance, for best performance
+ array.byteLength
+ that = Buffer._augment(new Uint8Array(array))
+ } else {
+ // Fallback: Return an object instance of the Buffer class
+ that = fromTypedArray(that, new Uint8Array(array))
+ }
+ return that
+}
+
+function fromArrayLike (that, array) {
+ var length = checked(array.length) | 0
+ that = allocate(that, length)
+ for (var i = 0; i < length; i += 1) {
+ that[i] = array[i] & 255
+ }
+ return that
+}
+
+// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
+// Returns a zero-length buffer for inputs that don't conform to the spec.
+function fromJsonObject (that, object) {
+ var array
+ var length = 0
+
+ if (object.type === 'Buffer' && isArray(object.data)) {
+ array = object.data
+ length = checked(array.length) | 0
+ }
+ that = allocate(that, length)
+
+ for (var i = 0; i < length; i += 1) {
+ that[i] = array[i] & 255
+ }
+ return that
+}
+
+if (Buffer.TYPED_ARRAY_SUPPORT) {
+ Buffer.prototype.__proto__ = Uint8Array.prototype
+ Buffer.__proto__ = Uint8Array
+} else {
+ // pre-set for values that may exist in the future
+ Buffer.prototype.length = undefined
+ Buffer.prototype.parent = undefined
+}
+
+function allocate (that, length) {
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ // Return an augmented `Uint8Array` instance, for best performance
+ that = Buffer._augment(new Uint8Array(length))
+ that.__proto__ = Buffer.prototype
+ } else {
+ // Fallback: Return an object instance of the Buffer class
+ that.length = length
+ that._isBuffer = true
+ }
+
+ var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
+ if (fromPool) that.parent = rootParent
+
+ return that
+}
+
+function checked (length) {
+ // Note: cannot use `length < kMaxLength` here because that fails when
+ // length is NaN (which is otherwise coerced to zero.)
+ if (length >= kMaxLength()) {
+ throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
+ 'size: 0x' + kMaxLength().toString(16) + ' bytes')
+ }
+ return length | 0
+}
+
+function SlowBuffer (subject, encoding) {
+ if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
+
+ var buf = new Buffer(subject, encoding)
+ delete buf.parent
+ return buf
+}
+
+Buffer.isBuffer = function isBuffer (b) {
+ return !!(b != null && b._isBuffer)
+}
+
+Buffer.compare = function compare (a, b) {
+ if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
+ throw new TypeError('Arguments must be Buffers')
+ }
+
+ if (a === b) return 0
+
+ var x = a.length
+ var y = b.length
+
+ var i = 0
+ var len = Math.min(x, y)
+ while (i < len) {
+ if (a[i] !== b[i]) break
+
+ ++i
+ }
+
+ if (i !== len) {
+ x = a[i]
+ y = b[i]
+ }
+
+ if (x < y) return -1
+ if (y < x) return 1
+ return 0
+}
+
+Buffer.isEncoding = function isEncoding (encoding) {
+ switch (String(encoding).toLowerCase()) {
+ case 'hex':
+ case 'utf8':
+ case 'utf-8':
+ case 'ascii':
+ case 'binary':
+ case 'base64':
+ case 'raw':
+ case 'ucs2':
+ case 'ucs-2':
+ case 'utf16le':
+ case 'utf-16le':
+ return true
+ default:
+ return false
+ }
+}
+
+Buffer.concat = function concat (list, length) {
+ if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
+
+ if (list.length === 0) {
+ return new Buffer(0)
+ }
+
+ var i
+ if (length === undefined) {
+ length = 0
+ for (i = 0; i < list.length; i++) {
+ length += list[i].length
+ }
+ }
+
+ var buf = new Buffer(length)
+ var pos = 0
+ for (i = 0; i < list.length; i++) {
+ var item = list[i]
+ item.copy(buf, pos)
+ pos += item.length
+ }
+ return buf
+}
+
+function byteLength (string, encoding) {
+ if (typeof string !== 'string') string = '' + string
+
+ var len = string.length
+ if (len === 0) return 0
+
+ // Use a for loop to avoid recursion
+ var loweredCase = false
+ for (;;) {
+ switch (encoding) {
+ case 'ascii':
+ case 'binary':
+ // Deprecated
+ case 'raw':
+ case 'raws':
+ return len
+ case 'utf8':
+ case 'utf-8':
+ return utf8ToBytes(string).length
+ case 'ucs2':
+ case 'ucs-2':
+ case 'utf16le':
+ case 'utf-16le':
+ return len * 2
+ case 'hex':
+ return len >>> 1
+ case 'base64':
+ return base64ToBytes(string).length
+ default:
+ if (loweredCase) return utf8ToBytes(string).length // assume utf8
+ encoding = ('' + encoding).toLowerCase()
+ loweredCase = true
+ }
+ }
+}
+Buffer.byteLength = byteLength
+
+function slowToString (encoding, start, end) {
+ var loweredCase = false
+
+ start = start | 0
+ end = end === undefined || end === Infinity ? this.length : end | 0
+
+ if (!encoding) encoding = 'utf8'
+ if (start < 0) start = 0
+ if (end > this.length) end = this.length
+ if (end <= start) return ''
+
+ while (true) {
+ switch (encoding) {
+ case 'hex':
+ return hexSlice(this, start, end)
+
+ case 'utf8':
+ case 'utf-8':
+ return utf8Slice(this, start, end)
+
+ case 'ascii':
+ return asciiSlice(this, start, end)
+
+ case 'binary':
+ return binarySlice(this, start, end)
+
+ case 'base64':
+ return base64Slice(this, start, end)
+
+ case 'ucs2':
+ case 'ucs-2':
+ case 'utf16le':
+ case 'utf-16le':
+ return utf16leSlice(this, start, end)
+
+ default:
+ if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
+ encoding = (encoding + '').toLowerCase()
+ loweredCase = true
+ }
+ }
+}
+
+Buffer.prototype.toString = function toString () {
+ var length = this.length | 0
+ if (length === 0) return ''
+ if (arguments.length === 0) return utf8Slice(this, 0, length)
+ return slowToString.apply(this, arguments)
+}
+
+Buffer.prototype.equals = function equals (b) {
+ if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
+ if (this === b) return true
+ return Buffer.compare(this, b) === 0
+}
+
+Buffer.prototype.inspect = function inspect () {
+ var str = ''
+ var max = exports.INSPECT_MAX_BYTES
+ if (this.length > 0) {
+ str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
+ if (this.length > max) str += ' ... '
+ }
+ return ''
+}
+
+Buffer.prototype.compare = function compare (b) {
+ if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
+ if (this === b) return 0
+ return Buffer.compare(this, b)
+}
+
+Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
+ if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
+ else if (byteOffset < -0x80000000) byteOffset = -0x80000000
+ byteOffset >>= 0
+
+ if (this.length === 0) return -1
+ if (byteOffset >= this.length) return -1
+
+ // Negative offsets start from the end of the buffer
+ if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
+
+ if (typeof val === 'string') {
+ if (val.length === 0) return -1 // special case: looking for empty string always fails
+ return String.prototype.indexOf.call(this, val, byteOffset)
+ }
+ if (Buffer.isBuffer(val)) {
+ return arrayIndexOf(this, val, byteOffset)
+ }
+ if (typeof val === 'number') {
+ if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
+ return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
+ }
+ return arrayIndexOf(this, [ val ], byteOffset)
+ }
+
+ function arrayIndexOf (arr, val, byteOffset) {
+ var foundIndex = -1
+ for (var i = 0; byteOffset + i < arr.length; i++) {
+ if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
+ if (foundIndex === -1) foundIndex = i
+ if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
+ } else {
+ foundIndex = -1
+ }
+ }
+ return -1
+ }
+
+ throw new TypeError('val must be string, number or Buffer')
+}
+
+// `get` is deprecated
+Buffer.prototype.get = function get (offset) {
+ console.log('.get() is deprecated. Access using array indexes instead.')
+ return this.readUInt8(offset)
+}
+
+// `set` is deprecated
+Buffer.prototype.set = function set (v, offset) {
+ console.log('.set() is deprecated. Access using array indexes instead.')
+ return this.writeUInt8(v, offset)
+}
+
+function hexWrite (buf, string, offset, length) {
+ offset = Number(offset) || 0
+ var remaining = buf.length - offset
+ if (!length) {
+ length = remaining
+ } else {
+ length = Number(length)
+ if (length > remaining) {
+ length = remaining
+ }
+ }
+
+ // must be an even number of digits
+ var strLen = string.length
+ if (strLen % 2 !== 0) throw new Error('Invalid hex string')
+
+ if (length > strLen / 2) {
+ length = strLen / 2
+ }
+ for (var i = 0; i < length; i++) {
+ var parsed = parseInt(string.substr(i * 2, 2), 16)
+ if (isNaN(parsed)) throw new Error('Invalid hex string')
+ buf[offset + i] = parsed
+ }
+ return i
+}
+
+function utf8Write (buf, string, offset, length) {
+ return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
+}
+
+function asciiWrite (buf, string, offset, length) {
+ return blitBuffer(asciiToBytes(string), buf, offset, length)
+}
+
+function binaryWrite (buf, string, offset, length) {
+ return asciiWrite(buf, string, offset, length)
+}
+
+function base64Write (buf, string, offset, length) {
+ return blitBuffer(base64ToBytes(string), buf, offset, length)
+}
+
+function ucs2Write (buf, string, offset, length) {
+ return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
+}
+
+Buffer.prototype.write = function write (string, offset, length, encoding) {
+ // Buffer#write(string)
+ if (offset === undefined) {
+ encoding = 'utf8'
+ length = this.length
+ offset = 0
+ // Buffer#write(string, encoding)
+ } else if (length === undefined && typeof offset === 'string') {
+ encoding = offset
+ length = this.length
+ offset = 0
+ // Buffer#write(string, offset[, length][, encoding])
+ } else if (isFinite(offset)) {
+ offset = offset | 0
+ if (isFinite(length)) {
+ length = length | 0
+ if (encoding === undefined) encoding = 'utf8'
+ } else {
+ encoding = length
+ length = undefined
+ }
+ // legacy write(string, encoding, offset, length) - remove in v0.13
+ } else {
+ var swap = encoding
+ encoding = offset
+ offset = length | 0
+ length = swap
+ }
+
+ var remaining = this.length - offset
+ if (length === undefined || length > remaining) length = remaining
+
+ if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
+ throw new RangeError('attempt to write outside buffer bounds')
+ }
+
+ if (!encoding) encoding = 'utf8'
+
+ var loweredCase = false
+ for (;;) {
+ switch (encoding) {
+ case 'hex':
+ return hexWrite(this, string, offset, length)
+
+ case 'utf8':
+ case 'utf-8':
+ return utf8Write(this, string, offset, length)
+
+ case 'ascii':
+ return asciiWrite(this, string, offset, length)
+
+ case 'binary':
+ return binaryWrite(this, string, offset, length)
+
+ case 'base64':
+ // Warning: maxLength not taken into account in base64Write
+ return base64Write(this, string, offset, length)
+
+ case 'ucs2':
+ case 'ucs-2':
+ case 'utf16le':
+ case 'utf-16le':
+ return ucs2Write(this, string, offset, length)
+
+ default:
+ if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
+ encoding = ('' + encoding).toLowerCase()
+ loweredCase = true
+ }
+ }
+}
+
+Buffer.prototype.toJSON = function toJSON () {
+ return {
+ type: 'Buffer',
+ data: Array.prototype.slice.call(this._arr || this, 0)
+ }
+}
+
+function base64Slice (buf, start, end) {
+ if (start === 0 && end === buf.length) {
+ return base64.fromByteArray(buf)
+ } else {
+ return base64.fromByteArray(buf.slice(start, end))
+ }
+}
+
+function utf8Slice (buf, start, end) {
+ end = Math.min(buf.length, end)
+ var res = []
+
+ var i = start
+ while (i < end) {
+ var firstByte = buf[i]
+ var codePoint = null
+ var bytesPerSequence = (firstByte > 0xEF) ? 4
+ : (firstByte > 0xDF) ? 3
+ : (firstByte > 0xBF) ? 2
+ : 1
+
+ if (i + bytesPerSequence <= end) {
+ var secondByte, thirdByte, fourthByte, tempCodePoint
+
+ switch (bytesPerSequence) {
+ case 1:
+ if (firstByte < 0x80) {
+ codePoint = firstByte
+ }
+ break
+ case 2:
+ secondByte = buf[i + 1]
+ if ((secondByte & 0xC0) === 0x80) {
+ tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
+ if (tempCodePoint > 0x7F) {
+ codePoint = tempCodePoint
+ }
+ }
+ break
+ case 3:
+ secondByte = buf[i + 1]
+ thirdByte = buf[i + 2]
+ if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
+ tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
+ if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
+ codePoint = tempCodePoint
+ }
+ }
+ break
+ case 4:
+ secondByte = buf[i + 1]
+ thirdByte = buf[i + 2]
+ fourthByte = buf[i + 3]
+ if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
+ tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
+ if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
+ codePoint = tempCodePoint
+ }
+ }
+ }
+ }
+
+ if (codePoint === null) {
+ // we did not generate a valid codePoint so insert a
+ // replacement char (U+FFFD) and advance only 1 byte
+ codePoint = 0xFFFD
+ bytesPerSequence = 1
+ } else if (codePoint > 0xFFFF) {
+ // encode to utf16 (surrogate pair dance)
+ codePoint -= 0x10000
+ res.push(codePoint >>> 10 & 0x3FF | 0xD800)
+ codePoint = 0xDC00 | codePoint & 0x3FF
+ }
+
+ res.push(codePoint)
+ i += bytesPerSequence
+ }
+
+ return decodeCodePointsArray(res)
+}
+
+// Based on http://stackoverflow.com/a/22747272/680742, the browser with
+// the lowest limit is Chrome, with 0x10000 args.
+// We go 1 magnitude less, for safety
+var MAX_ARGUMENTS_LENGTH = 0x1000
+
+function decodeCodePointsArray (codePoints) {
+ var len = codePoints.length
+ if (len <= MAX_ARGUMENTS_LENGTH) {
+ return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
+ }
+
+ // Decode in chunks to avoid "call stack size exceeded".
+ var res = ''
+ var i = 0
+ while (i < len) {
+ res += String.fromCharCode.apply(
+ String,
+ codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
+ )
+ }
+ return res
+}
+
+function asciiSlice (buf, start, end) {
+ var ret = ''
+ end = Math.min(buf.length, end)
+
+ for (var i = start; i < end; i++) {
+ ret += String.fromCharCode(buf[i] & 0x7F)
+ }
+ return ret
+}
+
+function binarySlice (buf, start, end) {
+ var ret = ''
+ end = Math.min(buf.length, end)
+
+ for (var i = start; i < end; i++) {
+ ret += String.fromCharCode(buf[i])
+ }
+ return ret
+}
+
+function hexSlice (buf, start, end) {
+ var len = buf.length
+
+ if (!start || start < 0) start = 0
+ if (!end || end < 0 || end > len) end = len
+
+ var out = ''
+ for (var i = start; i < end; i++) {
+ out += toHex(buf[i])
+ }
+ return out
+}
+
+function utf16leSlice (buf, start, end) {
+ var bytes = buf.slice(start, end)
+ var res = ''
+ for (var i = 0; i < bytes.length; i += 2) {
+ res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
+ }
+ return res
+}
+
+Buffer.prototype.slice = function slice (start, end) {
+ var len = this.length
+ start = ~~start
+ end = end === undefined ? len : ~~end
+
+ if (start < 0) {
+ start += len
+ if (start < 0) start = 0
+ } else if (start > len) {
+ start = len
+ }
+
+ if (end < 0) {
+ end += len
+ if (end < 0) end = 0
+ } else if (end > len) {
+ end = len
+ }
+
+ if (end < start) end = start
+
+ var newBuf
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ newBuf = Buffer._augment(this.subarray(start, end))
+ } else {
+ var sliceLen = end - start
+ newBuf = new Buffer(sliceLen, undefined)
+ for (var i = 0; i < sliceLen; i++) {
+ newBuf[i] = this[i + start]
+ }
+ }
+
+ if (newBuf.length) newBuf.parent = this.parent || this
+
+ return newBuf
+}
+
+/*
+ * Need to make sure that buffer isn't trying to write out of bounds.
+ */
+function checkOffset (offset, ext, length) {
+ if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
+ if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
+}
+
+Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
+ offset = offset | 0
+ byteLength = byteLength | 0
+ if (!noAssert) checkOffset(offset, byteLength, this.length)
+
+ var val = this[offset]
+ var mul = 1
+ var i = 0
+ while (++i < byteLength && (mul *= 0x100)) {
+ val += this[offset + i] * mul
+ }
+
+ return val
+}
+
+Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
+ offset = offset | 0
+ byteLength = byteLength | 0
+ if (!noAssert) {
+ checkOffset(offset, byteLength, this.length)
+ }
+
+ var val = this[offset + --byteLength]
+ var mul = 1
+ while (byteLength > 0 && (mul *= 0x100)) {
+ val += this[offset + --byteLength] * mul
+ }
+
+ return val
+}
+
+Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 1, this.length)
+ return this[offset]
+}
+
+Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 2, this.length)
+ return this[offset] | (this[offset + 1] << 8)
+}
+
+Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 2, this.length)
+ return (this[offset] << 8) | this[offset + 1]
+}
+
+Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 4, this.length)
+
+ return ((this[offset]) |
+ (this[offset + 1] << 8) |
+ (this[offset + 2] << 16)) +
+ (this[offset + 3] * 0x1000000)
+}
+
+Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 4, this.length)
+
+ return (this[offset] * 0x1000000) +
+ ((this[offset + 1] << 16) |
+ (this[offset + 2] << 8) |
+ this[offset + 3])
+}
+
+Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
+ offset = offset | 0
+ byteLength = byteLength | 0
+ if (!noAssert) checkOffset(offset, byteLength, this.length)
+
+ var val = this[offset]
+ var mul = 1
+ var i = 0
+ while (++i < byteLength && (mul *= 0x100)) {
+ val += this[offset + i] * mul
+ }
+ mul *= 0x80
+
+ if (val >= mul) val -= Math.pow(2, 8 * byteLength)
+
+ return val
+}
+
+Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
+ offset = offset | 0
+ byteLength = byteLength | 0
+ if (!noAssert) checkOffset(offset, byteLength, this.length)
+
+ var i = byteLength
+ var mul = 1
+ var val = this[offset + --i]
+ while (i > 0 && (mul *= 0x100)) {
+ val += this[offset + --i] * mul
+ }
+ mul *= 0x80
+
+ if (val >= mul) val -= Math.pow(2, 8 * byteLength)
+
+ return val
+}
+
+Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 1, this.length)
+ if (!(this[offset] & 0x80)) return (this[offset])
+ return ((0xff - this[offset] + 1) * -1)
+}
+
+Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 2, this.length)
+ var val = this[offset] | (this[offset + 1] << 8)
+ return (val & 0x8000) ? val | 0xFFFF0000 : val
+}
+
+Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 2, this.length)
+ var val = this[offset + 1] | (this[offset] << 8)
+ return (val & 0x8000) ? val | 0xFFFF0000 : val
+}
+
+Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 4, this.length)
+
+ return (this[offset]) |
+ (this[offset + 1] << 8) |
+ (this[offset + 2] << 16) |
+ (this[offset + 3] << 24)
+}
+
+Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 4, this.length)
+
+ return (this[offset] << 24) |
+ (this[offset + 1] << 16) |
+ (this[offset + 2] << 8) |
+ (this[offset + 3])
+}
+
+Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 4, this.length)
+ return ieee754.read(this, offset, true, 23, 4)
+}
+
+Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 4, this.length)
+ return ieee754.read(this, offset, false, 23, 4)
+}
+
+Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 8, this.length)
+ return ieee754.read(this, offset, true, 52, 8)
+}
+
+Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 8, this.length)
+ return ieee754.read(this, offset, false, 52, 8)
+}
+
+function checkInt (buf, value, offset, ext, max, min) {
+ if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
+ if (value > max || value < min) throw new RangeError('value is out of bounds')
+ if (offset + ext > buf.length) throw new RangeError('index out of range')
+}
+
+Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
+ value = +value
+ offset = offset | 0
+ byteLength = byteLength | 0
+ if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
+
+ var mul = 1
+ var i = 0
+ this[offset] = value & 0xFF
+ while (++i < byteLength && (mul *= 0x100)) {
+ this[offset + i] = (value / mul) & 0xFF
+ }
+
+ return offset + byteLength
+}
+
+Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
+ value = +value
+ offset = offset | 0
+ byteLength = byteLength | 0
+ if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
+
+ var i = byteLength - 1
+ var mul = 1
+ this[offset + i] = value & 0xFF
+ while (--i >= 0 && (mul *= 0x100)) {
+ this[offset + i] = (value / mul) & 0xFF
+ }
+
+ return offset + byteLength
+}
+
+Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
+ if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
+ this[offset] = (value & 0xff)
+ return offset + 1
+}
+
+function objectWriteUInt16 (buf, value, offset, littleEndian) {
+ if (value < 0) value = 0xffff + value + 1
+ for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
+ buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
+ (littleEndian ? i : 1 - i) * 8
+ }
+}
+
+Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = (value & 0xff)
+ this[offset + 1] = (value >>> 8)
+ } else {
+ objectWriteUInt16(this, value, offset, true)
+ }
+ return offset + 2
+}
+
+Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = (value >>> 8)
+ this[offset + 1] = (value & 0xff)
+ } else {
+ objectWriteUInt16(this, value, offset, false)
+ }
+ return offset + 2
+}
+
+function objectWriteUInt32 (buf, value, offset, littleEndian) {
+ if (value < 0) value = 0xffffffff + value + 1
+ for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
+ buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
+ }
+}
+
+Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset + 3] = (value >>> 24)
+ this[offset + 2] = (value >>> 16)
+ this[offset + 1] = (value >>> 8)
+ this[offset] = (value & 0xff)
+ } else {
+ objectWriteUInt32(this, value, offset, true)
+ }
+ return offset + 4
+}
+
+Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = (value >>> 24)
+ this[offset + 1] = (value >>> 16)
+ this[offset + 2] = (value >>> 8)
+ this[offset + 3] = (value & 0xff)
+ } else {
+ objectWriteUInt32(this, value, offset, false)
+ }
+ return offset + 4
+}
+
+Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) {
+ var limit = Math.pow(2, 8 * byteLength - 1)
+
+ checkInt(this, value, offset, byteLength, limit - 1, -limit)
+ }
+
+ var i = 0
+ var mul = 1
+ var sub = value < 0 ? 1 : 0
+ this[offset] = value & 0xFF
+ while (++i < byteLength && (mul *= 0x100)) {
+ this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
+ }
+
+ return offset + byteLength
+}
+
+Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) {
+ var limit = Math.pow(2, 8 * byteLength - 1)
+
+ checkInt(this, value, offset, byteLength, limit - 1, -limit)
+ }
+
+ var i = byteLength - 1
+ var mul = 1
+ var sub = value < 0 ? 1 : 0
+ this[offset + i] = value & 0xFF
+ while (--i >= 0 && (mul *= 0x100)) {
+ this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
+ }
+
+ return offset + byteLength
+}
+
+Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
+ if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
+ if (value < 0) value = 0xff + value + 1
+ this[offset] = (value & 0xff)
+ return offset + 1
+}
+
+Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = (value & 0xff)
+ this[offset + 1] = (value >>> 8)
+ } else {
+ objectWriteUInt16(this, value, offset, true)
+ }
+ return offset + 2
+}
+
+Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = (value >>> 8)
+ this[offset + 1] = (value & 0xff)
+ } else {
+ objectWriteUInt16(this, value, offset, false)
+ }
+ return offset + 2
+}
+
+Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = (value & 0xff)
+ this[offset + 1] = (value >>> 8)
+ this[offset + 2] = (value >>> 16)
+ this[offset + 3] = (value >>> 24)
+ } else {
+ objectWriteUInt32(this, value, offset, true)
+ }
+ return offset + 4
+}
+
+Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
+ if (value < 0) value = 0xffffffff + value + 1
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = (value >>> 24)
+ this[offset + 1] = (value >>> 16)
+ this[offset + 2] = (value >>> 8)
+ this[offset + 3] = (value & 0xff)
+ } else {
+ objectWriteUInt32(this, value, offset, false)
+ }
+ return offset + 4
+}
+
+function checkIEEE754 (buf, value, offset, ext, max, min) {
+ if (value > max || value < min) throw new RangeError('value is out of bounds')
+ if (offset + ext > buf.length) throw new RangeError('index out of range')
+ if (offset < 0) throw new RangeError('index out of range')
+}
+
+function writeFloat (buf, value, offset, littleEndian, noAssert) {
+ if (!noAssert) {
+ checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
+ }
+ ieee754.write(buf, value, offset, littleEndian, 23, 4)
+ return offset + 4
+}
+
+Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
+ return writeFloat(this, value, offset, true, noAssert)
+}
+
+Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
+ return writeFloat(this, value, offset, false, noAssert)
+}
+
+function writeDouble (buf, value, offset, littleEndian, noAssert) {
+ if (!noAssert) {
+ checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
+ }
+ ieee754.write(buf, value, offset, littleEndian, 52, 8)
+ return offset + 8
+}
+
+Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
+ return writeDouble(this, value, offset, true, noAssert)
+}
+
+Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
+ return writeDouble(this, value, offset, false, noAssert)
+}
+
+// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
+Buffer.prototype.copy = function copy (target, targetStart, start, end) {
+ if (!start) start = 0
+ if (!end && end !== 0) end = this.length
+ if (targetStart >= target.length) targetStart = target.length
+ if (!targetStart) targetStart = 0
+ if (end > 0 && end < start) end = start
+
+ // Copy 0 bytes; we're done
+ if (end === start) return 0
+ if (target.length === 0 || this.length === 0) return 0
+
+ // Fatal error conditions
+ if (targetStart < 0) {
+ throw new RangeError('targetStart out of bounds')
+ }
+ if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
+ if (end < 0) throw new RangeError('sourceEnd out of bounds')
+
+ // Are we oob?
+ if (end > this.length) end = this.length
+ if (target.length - targetStart < end - start) {
+ end = target.length - targetStart + start
+ }
+
+ var len = end - start
+ var i
+
+ if (this === target && start < targetStart && targetStart < end) {
+ // descending copy from end
+ for (i = len - 1; i >= 0; i--) {
+ target[i + targetStart] = this[i + start]
+ }
+ } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
+ // ascending copy from start
+ for (i = 0; i < len; i++) {
+ target[i + targetStart] = this[i + start]
+ }
+ } else {
+ target._set(this.subarray(start, start + len), targetStart)
+ }
+
+ return len
+}
+
+// fill(value, start=0, end=buffer.length)
+Buffer.prototype.fill = function fill (value, start, end) {
+ if (!value) value = 0
+ if (!start) start = 0
+ if (!end) end = this.length
+
+ if (end < start) throw new RangeError('end < start')
+
+ // Fill 0 bytes; we're done
+ if (end === start) return
+ if (this.length === 0) return
+
+ if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
+ if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
+
+ var i
+ if (typeof value === 'number') {
+ for (i = start; i < end; i++) {
+ this[i] = value
+ }
+ } else {
+ var bytes = utf8ToBytes(value.toString())
+ var len = bytes.length
+ for (i = start; i < end; i++) {
+ this[i] = bytes[i % len]
+ }
+ }
+
+ return this
+}
+
+/**
+ * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
+ * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
+ */
+Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
+ if (typeof Uint8Array !== 'undefined') {
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ return (new Buffer(this)).buffer
+ } else {
+ var buf = new Uint8Array(this.length)
+ for (var i = 0, len = buf.length; i < len; i += 1) {
+ buf[i] = this[i]
+ }
+ return buf.buffer
+ }
+ } else {
+ throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
+ }
+}
+
+// HELPER FUNCTIONS
+// ================
+
+var BP = Buffer.prototype
+
+/**
+ * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
+ */
+Buffer._augment = function _augment (arr) {
+ arr.constructor = Buffer
+ arr._isBuffer = true
+
+ // save reference to original Uint8Array set method before overwriting
+ arr._set = arr.set
+
+ // deprecated
+ arr.get = BP.get
+ arr.set = BP.set
+
+ arr.write = BP.write
+ arr.toString = BP.toString
+ arr.toLocaleString = BP.toString
+ arr.toJSON = BP.toJSON
+ arr.equals = BP.equals
+ arr.compare = BP.compare
+ arr.indexOf = BP.indexOf
+ arr.copy = BP.copy
+ arr.slice = BP.slice
+ arr.readUIntLE = BP.readUIntLE
+ arr.readUIntBE = BP.readUIntBE
+ arr.readUInt8 = BP.readUInt8
+ arr.readUInt16LE = BP.readUInt16LE
+ arr.readUInt16BE = BP.readUInt16BE
+ arr.readUInt32LE = BP.readUInt32LE
+ arr.readUInt32BE = BP.readUInt32BE
+ arr.readIntLE = BP.readIntLE
+ arr.readIntBE = BP.readIntBE
+ arr.readInt8 = BP.readInt8
+ arr.readInt16LE = BP.readInt16LE
+ arr.readInt16BE = BP.readInt16BE
+ arr.readInt32LE = BP.readInt32LE
+ arr.readInt32BE = BP.readInt32BE
+ arr.readFloatLE = BP.readFloatLE
+ arr.readFloatBE = BP.readFloatBE
+ arr.readDoubleLE = BP.readDoubleLE
+ arr.readDoubleBE = BP.readDoubleBE
+ arr.writeUInt8 = BP.writeUInt8
+ arr.writeUIntLE = BP.writeUIntLE
+ arr.writeUIntBE = BP.writeUIntBE
+ arr.writeUInt16LE = BP.writeUInt16LE
+ arr.writeUInt16BE = BP.writeUInt16BE
+ arr.writeUInt32LE = BP.writeUInt32LE
+ arr.writeUInt32BE = BP.writeUInt32BE
+ arr.writeIntLE = BP.writeIntLE
+ arr.writeIntBE = BP.writeIntBE
+ arr.writeInt8 = BP.writeInt8
+ arr.writeInt16LE = BP.writeInt16LE
+ arr.writeInt16BE = BP.writeInt16BE
+ arr.writeInt32LE = BP.writeInt32LE
+ arr.writeInt32BE = BP.writeInt32BE
+ arr.writeFloatLE = BP.writeFloatLE
+ arr.writeFloatBE = BP.writeFloatBE
+ arr.writeDoubleLE = BP.writeDoubleLE
+ arr.writeDoubleBE = BP.writeDoubleBE
+ arr.fill = BP.fill
+ arr.inspect = BP.inspect
+ arr.toArrayBuffer = BP.toArrayBuffer
+
+ return arr
+}
+
+var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
+
+function base64clean (str) {
+ // Node strips out invalid characters like \n and \t from the string, base64-js does not
+ str = stringtrim(str).replace(INVALID_BASE64_RE, '')
+ // Node converts strings with length < 2 to ''
+ if (str.length < 2) return ''
+ // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
+ while (str.length % 4 !== 0) {
+ str = str + '='
+ }
+ return str
+}
+
+function stringtrim (str) {
+ if (str.trim) return str.trim()
+ return str.replace(/^\s+|\s+$/g, '')
+}
+
+function toHex (n) {
+ if (n < 16) return '0' + n.toString(16)
+ return n.toString(16)
+}
+
+function utf8ToBytes (string, units) {
+ units = units || Infinity
+ var codePoint
+ var length = string.length
+ var leadSurrogate = null
+ var bytes = []
+
+ for (var i = 0; i < length; i++) {
+ codePoint = string.charCodeAt(i)
+
+ // is surrogate component
+ if (codePoint > 0xD7FF && codePoint < 0xE000) {
+ // last char was a lead
+ if (!leadSurrogate) {
+ // no lead yet
+ if (codePoint > 0xDBFF) {
+ // unexpected trail
+ if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+ continue
+ } else if (i + 1 === length) {
+ // unpaired lead
+ if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+ continue
+ }
+
+ // valid lead
+ leadSurrogate = codePoint
+
+ continue
+ }
+
+ // 2 leads in a row
+ if (codePoint < 0xDC00) {
+ if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+ leadSurrogate = codePoint
+ continue
+ }
+
+ // valid surrogate pair
+ codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
+ } else if (leadSurrogate) {
+ // valid bmp char, but last char was a lead
+ if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+ }
+
+ leadSurrogate = null
+
+ // encode utf8
+ if (codePoint < 0x80) {
+ if ((units -= 1) < 0) break
+ bytes.push(codePoint)
+ } else if (codePoint < 0x800) {
+ if ((units -= 2) < 0) break
+ bytes.push(
+ codePoint >> 0x6 | 0xC0,
+ codePoint & 0x3F | 0x80
+ )
+ } else if (codePoint < 0x10000) {
+ if ((units -= 3) < 0) break
+ bytes.push(
+ codePoint >> 0xC | 0xE0,
+ codePoint >> 0x6 & 0x3F | 0x80,
+ codePoint & 0x3F | 0x80
+ )
+ } else if (codePoint < 0x110000) {
+ if ((units -= 4) < 0) break
+ bytes.push(
+ codePoint >> 0x12 | 0xF0,
+ codePoint >> 0xC & 0x3F | 0x80,
+ codePoint >> 0x6 & 0x3F | 0x80,
+ codePoint & 0x3F | 0x80
+ )
+ } else {
+ throw new Error('Invalid code point')
+ }
+ }
+
+ return bytes
+}
+
+function asciiToBytes (str) {
+ var byteArray = []
+ for (var i = 0; i < str.length; i++) {
+ // Node's code seems to be doing this and not & 0x7F..
+ byteArray.push(str.charCodeAt(i) & 0xFF)
+ }
+ return byteArray
+}
+
+function utf16leToBytes (str, units) {
+ var c, hi, lo
+ var byteArray = []
+ for (var i = 0; i < str.length; i++) {
+ if ((units -= 2) < 0) break
+
+ c = str.charCodeAt(i)
+ hi = c >> 8
+ lo = c % 256
+ byteArray.push(lo)
+ byteArray.push(hi)
+ }
+
+ return byteArray
+}
+
+function base64ToBytes (str) {
+ return base64.toByteArray(base64clean(str))
+}
+
+function blitBuffer (src, dst, offset, length) {
+ for (var i = 0; i < length; i++) {
+ if ((i + offset >= dst.length) || (i >= src.length)) break
+ dst[i + offset] = src[i]
+ }
+ return i
+}
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"2":2,"5":5,"6":6}],5:[function(_dereq_,module,exports){
+var toString = {}.toString;
+
+module.exports = Array.isArray || function (arr) {
+ return toString.call(arr) == '[object Array]';
+};
+
+},{}],6:[function(_dereq_,module,exports){
+exports.read = function (buffer, offset, isLE, mLen, nBytes) {
+ var e, m
+ var eLen = nBytes * 8 - mLen - 1
+ var eMax = (1 << eLen) - 1
+ var eBias = eMax >> 1
+ var nBits = -7
+ var i = isLE ? (nBytes - 1) : 0
+ var d = isLE ? -1 : 1
+ var s = buffer[offset + i]
+
+ i += d
+
+ e = s & ((1 << (-nBits)) - 1)
+ s >>= (-nBits)
+ nBits += eLen
+ for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
+
+ m = e & ((1 << (-nBits)) - 1)
+ e >>= (-nBits)
+ nBits += mLen
+ for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
+
+ if (e === 0) {
+ e = 1 - eBias
+ } else if (e === eMax) {
+ return m ? NaN : ((s ? -1 : 1) * Infinity)
+ } else {
+ m = m + Math.pow(2, mLen)
+ e = e - eBias
+ }
+ return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
+}
+
+exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
+ var e, m, c
+ var eLen = nBytes * 8 - mLen - 1
+ var eMax = (1 << eLen) - 1
+ var eBias = eMax >> 1
+ var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
+ var i = isLE ? 0 : (nBytes - 1)
+ var d = isLE ? 1 : -1
+ var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
+
+ value = Math.abs(value)
+
+ if (isNaN(value) || value === Infinity) {
+ m = isNaN(value) ? 1 : 0
+ e = eMax
+ } else {
+ e = Math.floor(Math.log(value) / Math.LN2)
+ if (value * (c = Math.pow(2, -e)) < 1) {
+ e--
+ c *= 2
+ }
+ if (e + eBias >= 1) {
+ value += rt / c
+ } else {
+ value += rt * Math.pow(2, 1 - eBias)
+ }
+ if (value * c >= 2) {
+ e++
+ c /= 2
+ }
+
+ if (e + eBias >= eMax) {
+ m = 0
+ e = eMax
+ } else if (e + eBias >= 1) {
+ m = (value * c - 1) * Math.pow(2, mLen)
+ e = e + eBias
+ } else {
+ m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
+ e = 0
+ }
+ }
+
+ for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
+
+ e = (e << mLen) | m
+ eLen += mLen
+ for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
+
+ buffer[offset + i - d] |= s * 128
+}
+
+},{}],7:[function(_dereq_,module,exports){
+if (typeof Object.create === 'function') {
+ // implementation from standard node.js 'util' module
+ module.exports = function inherits(ctor, superCtor) {
+ ctor.super_ = superCtor
+ ctor.prototype = Object.create(superCtor.prototype, {
+ constructor: {
+ value: ctor,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ }
+ });
+ };
+} else {
+ // old school shim for old browsers
+ module.exports = function inherits(ctor, superCtor) {
+ ctor.super_ = superCtor
+ var TempCtor = function () {}
+ TempCtor.prototype = superCtor.prototype
+ ctor.prototype = new TempCtor()
+ ctor.prototype.constructor = ctor
+ }
+}
+
+},{}],8:[function(_dereq_,module,exports){
+exports.endianness = function () { return 'LE' };
+
+exports.hostname = function () {
+ if (typeof location !== 'undefined') {
+ return location.hostname
+ }
+ else return '';
+};
+
+exports.loadavg = function () { return [] };
+
+exports.uptime = function () { return 0 };
+
+exports.freemem = function () {
+ return Number.MAX_VALUE;
+};
+
+exports.totalmem = function () {
+ return Number.MAX_VALUE;
+};
+
+exports.cpus = function () { return [] };
+
+exports.type = function () { return 'Browser' };
+
+exports.release = function () {
+ if (typeof navigator !== 'undefined') {
+ return navigator.appVersion;
+ }
+ return '';
+};
+
+exports.networkInterfaces
+= exports.getNetworkInterfaces
+= function () { return {} };
+
+exports.arch = function () { return 'javascript' };
+
+exports.platform = function () { return 'browser' };
+
+exports.tmpdir = exports.tmpDir = function () {
+ return '/tmp';
+};
+
+exports.EOL = '\n';
+
+},{}],9:[function(_dereq_,module,exports){
+(function (process){
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// resolves . and .. elements in a path array with directory names there
+// must be no slashes, empty elements, or device names (c:\) in the array
+// (so also no leading and trailing slashes - it does not distinguish
+// relative and absolute paths)
+function normalizeArray(parts, allowAboveRoot) {
+ // if the path tries to go above the root, `up` ends up > 0
+ var up = 0;
+ for (var i = parts.length - 1; i >= 0; i--) {
+ var last = parts[i];
+ if (last === '.') {
+ parts.splice(i, 1);
+ } else if (last === '..') {
+ parts.splice(i, 1);
+ up++;
+ } else if (up) {
+ parts.splice(i, 1);
+ up--;
+ }
+ }
+
+ // if the path is allowed to go above the root, restore leading ..s
+ if (allowAboveRoot) {
+ for (; up--; up) {
+ parts.unshift('..');
+ }
+ }
+
+ return parts;
+}
+
+// Split a filename into [root, dir, basename, ext], unix version
+// 'root' is just a slash, or nothing.
+var splitPathRe =
+ /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
+var splitPath = function(filename) {
+ return splitPathRe.exec(filename).slice(1);
+};
+
+// path.resolve([from ...], to)
+// posix version
+exports.resolve = function() {
+ var resolvedPath = '',
+ resolvedAbsolute = false;
+
+ for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
+ var path = (i >= 0) ? arguments[i] : process.cwd();
+
+ // Skip empty and invalid entries
+ if (typeof path !== 'string') {
+ throw new TypeError('Arguments to path.resolve must be strings');
+ } else if (!path) {
+ continue;
+ }
+
+ resolvedPath = path + '/' + resolvedPath;
+ resolvedAbsolute = path.charAt(0) === '/';
+ }
+
+ // At this point the path should be resolved to a full absolute path, but
+ // handle relative paths to be safe (might happen when process.cwd() fails)
+
+ // Normalize the path
+ resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {
+ return !!p;
+ }), !resolvedAbsolute).join('/');
+
+ return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
+};
+
+// path.normalize(path)
+// posix version
+exports.normalize = function(path) {
+ var isAbsolute = exports.isAbsolute(path),
+ trailingSlash = substr(path, -1) === '/';
+
+ // Normalize the path
+ path = normalizeArray(filter(path.split('/'), function(p) {
+ return !!p;
+ }), !isAbsolute).join('/');
+
+ if (!path && !isAbsolute) {
+ path = '.';
+ }
+ if (path && trailingSlash) {
+ path += '/';
+ }
+
+ return (isAbsolute ? '/' : '') + path;
+};
+
+// posix version
+exports.isAbsolute = function(path) {
+ return path.charAt(0) === '/';
+};
+
+// posix version
+exports.join = function() {
+ var paths = Array.prototype.slice.call(arguments, 0);
+ return exports.normalize(filter(paths, function(p, index) {
+ if (typeof p !== 'string') {
+ throw new TypeError('Arguments to path.join must be strings');
+ }
+ return p;
+ }).join('/'));
+};
+
+
+// path.relative(from, to)
+// posix version
+exports.relative = function(from, to) {
+ from = exports.resolve(from).substr(1);
+ to = exports.resolve(to).substr(1);
+
+ function trim(arr) {
+ var start = 0;
+ for (; start < arr.length; start++) {
+ if (arr[start] !== '') break;
+ }
+
+ var end = arr.length - 1;
+ for (; end >= 0; end--) {
+ if (arr[end] !== '') break;
+ }
+
+ if (start > end) return [];
+ return arr.slice(start, end - start + 1);
+ }
+
+ var fromParts = trim(from.split('/'));
+ var toParts = trim(to.split('/'));
+
+ var length = Math.min(fromParts.length, toParts.length);
+ var samePartsLength = length;
+ for (var i = 0; i < length; i++) {
+ if (fromParts[i] !== toParts[i]) {
+ samePartsLength = i;
+ break;
+ }
+ }
+
+ var outputParts = [];
+ for (var i = samePartsLength; i < fromParts.length; i++) {
+ outputParts.push('..');
+ }
+
+ outputParts = outputParts.concat(toParts.slice(samePartsLength));
+
+ return outputParts.join('/');
+};
+
+exports.sep = '/';
+exports.delimiter = ':';
+
+exports.dirname = function(path) {
+ var result = splitPath(path),
+ root = result[0],
+ dir = result[1];
+
+ if (!root && !dir) {
+ // No dirname whatsoever
+ return '.';
+ }
+
+ if (dir) {
+ // It has a dirname, strip trailing slash
+ dir = dir.substr(0, dir.length - 1);
+ }
+
+ return root + dir;
+};
+
+
+exports.basename = function(path, ext) {
+ var f = splitPath(path)[2];
+ // TODO: make this comparison case-insensitive on windows?
+ if (ext && f.substr(-1 * ext.length) === ext) {
+ f = f.substr(0, f.length - ext.length);
+ }
+ return f;
+};
+
+
+exports.extname = function(path) {
+ return splitPath(path)[3];
+};
+
+function filter (xs, f) {
+ if (xs.filter) return xs.filter(f);
+ var res = [];
+ for (var i = 0; i < xs.length; i++) {
+ if (f(xs[i], i, xs)) res.push(xs[i]);
+ }
+ return res;
+}
+
+// String.prototype.substr - negative index don't work in IE8
+var substr = 'ab'.substr(-1) === 'b'
+ ? function (str, start, len) { return str.substr(start, len) }
+ : function (str, start, len) {
+ if (start < 0) start = str.length + start;
+ return str.substr(start, len);
+ }
+;
+
+}).call(this,_dereq_(10))
+},{"10":10}],10:[function(_dereq_,module,exports){
+// shim for using process in browser
+
+var process = module.exports = {};
+var queue = [];
+var draining = false;
+var currentQueue;
+var queueIndex = -1;
+
+function cleanUpNextTick() {
+ draining = false;
+ if (currentQueue.length) {
+ queue = currentQueue.concat(queue);
+ } else {
+ queueIndex = -1;
+ }
+ if (queue.length) {
+ drainQueue();
+ }
+}
+
+function drainQueue() {
+ if (draining) {
+ return;
+ }
+ var timeout = setTimeout(cleanUpNextTick);
+ draining = true;
+
+ var len = queue.length;
+ while(len) {
+ currentQueue = queue;
+ queue = [];
+ while (++queueIndex < len) {
+ if (currentQueue) {
+ currentQueue[queueIndex].run();
+ }
+ }
+ queueIndex = -1;
+ len = queue.length;
+ }
+ currentQueue = null;
+ draining = false;
+ clearTimeout(timeout);
+}
+
+process.nextTick = function (fun) {
+ var args = new Array(arguments.length - 1);
+ if (arguments.length > 1) {
+ for (var i = 1; i < arguments.length; i++) {
+ args[i - 1] = arguments[i];
+ }
+ }
+ queue.push(new Item(fun, args));
+ if (queue.length === 1 && !draining) {
+ setTimeout(drainQueue, 0);
+ }
+};
+
+// v8 likes predictible objects
+function Item(fun, array) {
+ this.fun = fun;
+ this.array = array;
+}
+Item.prototype.run = function () {
+ this.fun.apply(null, this.array);
+};
+process.title = 'browser';
+process.browser = true;
+process.env = {};
+process.argv = [];
+process.version = ''; // empty string to avoid regexp issues
+process.versions = {};
+
+function noop() {}
+
+process.on = noop;
+process.addListener = noop;
+process.once = noop;
+process.off = noop;
+process.removeListener = noop;
+process.removeAllListeners = noop;
+process.emit = noop;
+
+process.binding = function (name) {
+ throw new Error('process.binding is not supported');
+};
+
+process.cwd = function () { return '/' };
+process.chdir = function (dir) {
+ throw new Error('process.chdir is not supported');
+};
+process.umask = function() { return 0; };
+
+},{}],11:[function(_dereq_,module,exports){
+exports.isatty = function () { return false; };
+
+function ReadStream() {
+ throw new Error('tty.ReadStream is not implemented');
+}
+exports.ReadStream = ReadStream;
+
+function WriteStream() {
+ throw new Error('tty.ReadStream is not implemented');
+}
+exports.WriteStream = WriteStream;
+
+},{}],12:[function(_dereq_,module,exports){
+module.exports = function isBuffer(arg) {
+ return arg && typeof arg === 'object'
+ && typeof arg.copy === 'function'
+ && typeof arg.fill === 'function'
+ && typeof arg.readUInt8 === 'function';
+}
+},{}],13:[function(_dereq_,module,exports){
+(function (process,global){
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+var formatRegExp = /%[sdj%]/g;
+exports.format = function(f) {
+ if (!isString(f)) {
+ var objects = [];
+ for (var i = 0; i < arguments.length; i++) {
+ objects.push(inspect(arguments[i]));
+ }
+ return objects.join(' ');
+ }
+
+ var i = 1;
+ var args = arguments;
+ var len = args.length;
+ var str = String(f).replace(formatRegExp, function(x) {
+ if (x === '%%') return '%';
+ if (i >= len) return x;
+ switch (x) {
+ case '%s': return String(args[i++]);
+ case '%d': return Number(args[i++]);
+ case '%j':
+ try {
+ return JSON.stringify(args[i++]);
+ } catch (_) {
+ return '[Circular]';
+ }
+ default:
+ return x;
+ }
+ });
+ for (var x = args[i]; i < len; x = args[++i]) {
+ if (isNull(x) || !isObject(x)) {
+ str += ' ' + x;
+ } else {
+ str += ' ' + inspect(x);
+ }
+ }
+ return str;
+};
+
+
+// Mark that a method should not be used.
+// Returns a modified function which warns once by default.
+// If --no-deprecation is set, then it is a no-op.
+exports.deprecate = function(fn, msg) {
+ // Allow for deprecating things in the process of starting up.
+ if (isUndefined(global.process)) {
+ return function() {
+ return exports.deprecate(fn, msg).apply(this, arguments);
+ };
+ }
+
+ if (process.noDeprecation === true) {
+ return fn;
+ }
+
+ var warned = false;
+ function deprecated() {
+ if (!warned) {
+ if (process.throwDeprecation) {
+ throw new Error(msg);
+ } else if (process.traceDeprecation) {
+ console.trace(msg);
+ } else {
+ console.error(msg);
+ }
+ warned = true;
+ }
+ return fn.apply(this, arguments);
+ }
+
+ return deprecated;
+};
+
+
+var debugs = {};
+var debugEnviron;
+exports.debuglog = function(set) {
+ if (isUndefined(debugEnviron))
+ debugEnviron = process.env.NODE_DEBUG || '';
+ set = set.toUpperCase();
+ if (!debugs[set]) {
+ if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
+ var pid = process.pid;
+ debugs[set] = function() {
+ var msg = exports.format.apply(exports, arguments);
+ console.error('%s %d: %s', set, pid, msg);
+ };
+ } else {
+ debugs[set] = function() {};
+ }
+ }
+ return debugs[set];
+};
+
+
+/**
+ * Echos the value of a value. Trys to print the value out
+ * in the best way possible given the different types.
+ *
+ * @param {Object} obj The object to print out.
+ * @param {Object} opts Optional options object that alters the output.
+ */
+/* legacy: obj, showHidden, depth, colors*/
+function inspect(obj, opts) {
+ // default options
+ var ctx = {
+ seen: [],
+ stylize: stylizeNoColor
+ };
+ // legacy...
+ if (arguments.length >= 3) ctx.depth = arguments[2];
+ if (arguments.length >= 4) ctx.colors = arguments[3];
+ if (isBoolean(opts)) {
+ // legacy...
+ ctx.showHidden = opts;
+ } else if (opts) {
+ // got an "options" object
+ exports._extend(ctx, opts);
+ }
+ // set default options
+ if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
+ if (isUndefined(ctx.depth)) ctx.depth = 2;
+ if (isUndefined(ctx.colors)) ctx.colors = false;
+ if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
+ if (ctx.colors) ctx.stylize = stylizeWithColor;
+ return formatValue(ctx, obj, ctx.depth);
+}
+exports.inspect = inspect;
+
+
+// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
+inspect.colors = {
+ 'bold' : [1, 22],
+ 'italic' : [3, 23],
+ 'underline' : [4, 24],
+ 'inverse' : [7, 27],
+ 'white' : [37, 39],
+ 'grey' : [90, 39],
+ 'black' : [30, 39],
+ 'blue' : [34, 39],
+ 'cyan' : [36, 39],
+ 'green' : [32, 39],
+ 'magenta' : [35, 39],
+ 'red' : [31, 39],
+ 'yellow' : [33, 39]
+};
+
+// Don't use 'blue' not visible on cmd.exe
+inspect.styles = {
+ 'special': 'cyan',
+ 'number': 'yellow',
+ 'boolean': 'yellow',
+ 'undefined': 'grey',
+ 'null': 'bold',
+ 'string': 'green',
+ 'date': 'magenta',
+ // "name": intentionally not styling
+ 'regexp': 'red'
+};
+
+
+function stylizeWithColor(str, styleType) {
+ var style = inspect.styles[styleType];
+
+ if (style) {
+ return '\u001b[' + inspect.colors[style][0] + 'm' + str +
+ '\u001b[' + inspect.colors[style][1] + 'm';
+ } else {
+ return str;
+ }
+}
+
+
+function stylizeNoColor(str, styleType) {
+ return str;
+}
+
+
+function arrayToHash(array) {
+ var hash = {};
+
+ array.forEach(function(val, idx) {
+ hash[val] = true;
+ });
+
+ return hash;
+}
+
+
+function formatValue(ctx, value, recurseTimes) {
+ // Provide a hook for user-specified inspect functions.
+ // Check that value is an object with an inspect function on it
+ if (ctx.customInspect &&
+ value &&
+ isFunction(value.inspect) &&
+ // Filter out the util module, it's inspect function is special
+ value.inspect !== exports.inspect &&
+ // Also filter out any prototype objects using the circular check.
+ !(value.constructor && value.constructor.prototype === value)) {
+ var ret = value.inspect(recurseTimes, ctx);
+ if (!isString(ret)) {
+ ret = formatValue(ctx, ret, recurseTimes);
+ }
+ return ret;
+ }
+
+ // Primitive types cannot have properties
+ var primitive = formatPrimitive(ctx, value);
+ if (primitive) {
+ return primitive;
+ }
+
+ // Look up the keys of the object.
+ var keys = Object.keys(value);
+ var visibleKeys = arrayToHash(keys);
+
+ if (ctx.showHidden) {
+ keys = Object.getOwnPropertyNames(value);
+ }
+
+ // IE doesn't make error fields non-enumerable
+ // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
+ if (isError(value)
+ && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
+ return formatError(value);
+ }
+
+ // Some type of object without properties can be shortcutted.
+ if (keys.length === 0) {
+ if (isFunction(value)) {
+ var name = value.name ? ': ' + value.name : '';
+ return ctx.stylize('[Function' + name + ']', 'special');
+ }
+ if (isRegExp(value)) {
+ return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
+ }
+ if (isDate(value)) {
+ return ctx.stylize(Date.prototype.toString.call(value), 'date');
+ }
+ if (isError(value)) {
+ return formatError(value);
+ }
+ }
+
+ var base = '', array = false, braces = ['{', '}'];
+
+ // Make Array say that they are Array
+ if (isArray(value)) {
+ array = true;
+ braces = ['[', ']'];
+ }
+
+ // Make functions say that they are functions
+ if (isFunction(value)) {
+ var n = value.name ? ': ' + value.name : '';
+ base = ' [Function' + n + ']';
+ }
+
+ // Make RegExps say that they are RegExps
+ if (isRegExp(value)) {
+ base = ' ' + RegExp.prototype.toString.call(value);
+ }
+
+ // Make dates with properties first say the date
+ if (isDate(value)) {
+ base = ' ' + Date.prototype.toUTCString.call(value);
+ }
+
+ // Make error with message first say the error
+ if (isError(value)) {
+ base = ' ' + formatError(value);
+ }
+
+ if (keys.length === 0 && (!array || value.length == 0)) {
+ return braces[0] + base + braces[1];
+ }
+
+ if (recurseTimes < 0) {
+ if (isRegExp(value)) {
+ return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
+ } else {
+ return ctx.stylize('[Object]', 'special');
+ }
+ }
+
+ ctx.seen.push(value);
+
+ var output;
+ if (array) {
+ output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
+ } else {
+ output = keys.map(function(key) {
+ return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
+ });
+ }
+
+ ctx.seen.pop();
+
+ return reduceToSingleString(output, base, braces);
+}
+
+
+function formatPrimitive(ctx, value) {
+ if (isUndefined(value))
+ return ctx.stylize('undefined', 'undefined');
+ if (isString(value)) {
+ var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
+ .replace(/'/g, "\\'")
+ .replace(/\\"/g, '"') + '\'';
+ return ctx.stylize(simple, 'string');
+ }
+ if (isNumber(value))
+ return ctx.stylize('' + value, 'number');
+ if (isBoolean(value))
+ return ctx.stylize('' + value, 'boolean');
+ // For some reason typeof null is "object", so special case here.
+ if (isNull(value))
+ return ctx.stylize('null', 'null');
+}
+
+
+function formatError(value) {
+ return '[' + Error.prototype.toString.call(value) + ']';
+}
+
+
+function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
+ var output = [];
+ for (var i = 0, l = value.length; i < l; ++i) {
+ if (hasOwnProperty(value, String(i))) {
+ output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
+ String(i), true));
+ } else {
+ output.push('');
+ }
+ }
+ keys.forEach(function(key) {
+ if (!key.match(/^\d+$/)) {
+ output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
+ key, true));
+ }
+ });
+ return output;
+}
+
+
+function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
+ var name, str, desc;
+ desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
+ if (desc.get) {
+ if (desc.set) {
+ str = ctx.stylize('[Getter/Setter]', 'special');
+ } else {
+ str = ctx.stylize('[Getter]', 'special');
+ }
+ } else {
+ if (desc.set) {
+ str = ctx.stylize('[Setter]', 'special');
+ }
+ }
+ if (!hasOwnProperty(visibleKeys, key)) {
+ name = '[' + key + ']';
+ }
+ if (!str) {
+ if (ctx.seen.indexOf(desc.value) < 0) {
+ if (isNull(recurseTimes)) {
+ str = formatValue(ctx, desc.value, null);
+ } else {
+ str = formatValue(ctx, desc.value, recurseTimes - 1);
+ }
+ if (str.indexOf('\n') > -1) {
+ if (array) {
+ str = str.split('\n').map(function(line) {
+ return ' ' + line;
+ }).join('\n').substr(2);
+ } else {
+ str = '\n' + str.split('\n').map(function(line) {
+ return ' ' + line;
+ }).join('\n');
+ }
+ }
+ } else {
+ str = ctx.stylize('[Circular]', 'special');
+ }
+ }
+ if (isUndefined(name)) {
+ if (array && key.match(/^\d+$/)) {
+ return str;
+ }
+ name = JSON.stringify('' + key);
+ if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
+ name = name.substr(1, name.length - 2);
+ name = ctx.stylize(name, 'name');
+ } else {
+ name = name.replace(/'/g, "\\'")
+ .replace(/\\"/g, '"')
+ .replace(/(^"|"$)/g, "'");
+ name = ctx.stylize(name, 'string');
+ }
+ }
+
+ return name + ': ' + str;
+}
+
+
+function reduceToSingleString(output, base, braces) {
+ var numLinesEst = 0;
+ var length = output.reduce(function(prev, cur) {
+ numLinesEst++;
+ if (cur.indexOf('\n') >= 0) numLinesEst++;
+ return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
+ }, 0);
+
+ if (length > 60) {
+ return braces[0] +
+ (base === '' ? '' : base + '\n ') +
+ ' ' +
+ output.join(',\n ') +
+ ' ' +
+ braces[1];
+ }
+
+ return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
+}
+
+
+// NOTE: These type checking functions intentionally don't use `instanceof`
+// because it is fragile and can be easily faked with `Object.create()`.
+function isArray(ar) {
+ return Array.isArray(ar);
+}
+exports.isArray = isArray;
+
+function isBoolean(arg) {
+ return typeof arg === 'boolean';
+}
+exports.isBoolean = isBoolean;
+
+function isNull(arg) {
+ return arg === null;
+}
+exports.isNull = isNull;
+
+function isNullOrUndefined(arg) {
+ return arg == null;
+}
+exports.isNullOrUndefined = isNullOrUndefined;
+
+function isNumber(arg) {
+ return typeof arg === 'number';
+}
+exports.isNumber = isNumber;
+
+function isString(arg) {
+ return typeof arg === 'string';
+}
+exports.isString = isString;
+
+function isSymbol(arg) {
+ return typeof arg === 'symbol';
+}
+exports.isSymbol = isSymbol;
+
+function isUndefined(arg) {
+ return arg === void 0;
+}
+exports.isUndefined = isUndefined;
+
+function isRegExp(re) {
+ return isObject(re) && objectToString(re) === '[object RegExp]';
+}
+exports.isRegExp = isRegExp;
+
+function isObject(arg) {
+ return typeof arg === 'object' && arg !== null;
+}
+exports.isObject = isObject;
+
+function isDate(d) {
+ return isObject(d) && objectToString(d) === '[object Date]';
+}
+exports.isDate = isDate;
+
+function isError(e) {
+ return isObject(e) &&
+ (objectToString(e) === '[object Error]' || e instanceof Error);
+}
+exports.isError = isError;
+
+function isFunction(arg) {
+ return typeof arg === 'function';
+}
+exports.isFunction = isFunction;
+
+function isPrimitive(arg) {
+ return arg === null ||
+ typeof arg === 'boolean' ||
+ typeof arg === 'number' ||
+ typeof arg === 'string' ||
+ typeof arg === 'symbol' || // ES6 symbol
+ typeof arg === 'undefined';
+}
+exports.isPrimitive = isPrimitive;
+
+exports.isBuffer = _dereq_(12);
+
+function objectToString(o) {
+ return Object.prototype.toString.call(o);
+}
+
+
+function pad(n) {
+ return n < 10 ? '0' + n.toString(10) : n.toString(10);
+}
+
+
+var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
+ 'Oct', 'Nov', 'Dec'];
+
+// 26 Feb 16:19:34
+function timestamp() {
+ var d = new Date();
+ var time = [pad(d.getHours()),
+ pad(d.getMinutes()),
+ pad(d.getSeconds())].join(':');
+ return [d.getDate(), months[d.getMonth()], time].join(' ');
+}
+
+
+// log is just a thin wrapper to console.log that prepends a timestamp
+exports.log = function() {
+ console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
+};
+
+
+/**
+ * Inherit the prototype methods from one constructor into another.
+ *
+ * The Function.prototype.inherits from lang.js rewritten as a standalone
+ * function (not on Function.prototype). NOTE: If this file is to be loaded
+ * during bootstrapping this function needs to be rewritten using some native
+ * functions as prototype setup using normal JavaScript does not work as
+ * expected during bootstrapping (see mirror.js in r114903).
+ *
+ * @param {function} ctor Constructor function which needs to inherit the
+ * prototype.
+ * @param {function} superCtor Constructor function to inherit prototype from.
+ */
+exports.inherits = _dereq_(7);
+
+exports._extend = function(origin, add) {
+ // Don't do anything if add isn't an object
+ if (!add || !isObject(add)) return origin;
+
+ var keys = Object.keys(add);
+ var i = keys.length;
+ while (i--) {
+ origin[keys[i]] = add[keys[i]];
+ }
+ return origin;
+};
+
+function hasOwnProperty(obj, prop) {
+ return Object.prototype.hasOwnProperty.call(obj, prop);
+}
+
+}).call(this,_dereq_(10),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"10":10,"12":12,"7":7}],14:[function(_dereq_,module,exports){
+(function (global){
+/* eslint no-new-func: 0 */
+
+"use strict";
+
+_dereq_(15);
+var transform = module.exports = _dereq_(66);
+
+/**
+ * Add `options` and `version` to `babel` global.
+ */
+
+transform.options = _dereq_(49);
+transform.version = _dereq_(610).version;
+
+/**
+ * Add `transform` api to `babel` global.
+ */
+
+transform.transform = transform;
+
+/**
+ * Tranform and execute script, adding in inline sourcemaps.
+ */
+
+transform.run = function (code) {
+ var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+ opts.sourceMaps = "inline";
+ return new Function(transform(code, opts).code)();
+};
+
+/**
+ * Load scripts via xhr, and `transform` when complete (optional).
+ */
+
+transform.load = function (url, callback, opts, hold) {
+ if (opts === undefined) opts = {};
+
+ opts.filename = opts.filename || url;
+
+ var xhr = global.ActiveXObject ? new global.ActiveXObject("Microsoft.XMLHTTP") : new global.XMLHttpRequest();
+ xhr.open("GET", url, true);
+ if ("overrideMimeType" in xhr) xhr.overrideMimeType("text/plain");
+
+ /**
+ * When successfully loaded, transform (optional), and call `callback`.
+ */
+
+ xhr.onreadystatechange = function () {
+ if (xhr.readyState !== 4) return;
+
+ var status = xhr.status;
+ if (status === 0 || status === 200) {
+ var param = [xhr.responseText, opts];
+ if (!hold) transform.run.apply(transform, param);
+ if (callback) callback(param);
+ } else {
+ throw new Error("Could not load " + url);
+ }
+ };
+
+ xhr.send(null);
+};
+
+/**
+ * Load and transform all scripts of `types`.
+ *
+ * @example
+ *
+ */
+
+var runScripts = function runScripts() {
+ var scripts = [];
+ var types = ["text/ecmascript-6", "text/6to5", "text/babel", "module"];
+ var index = 0;
+
+ /**
+ * Transform and execute script. Ensures correct load order.
+ */
+
+ var exec = function exec() {
+ var param = scripts[index];
+ if (param instanceof Array) {
+ transform.run.apply(transform, param);
+ index++;
+ exec();
+ }
+ };
+
+ /**
+ * Load, transform, and execute all scripts.
+ */
+
+ var run = function run(script, i) {
+ var opts = {};
+
+ if (script.src) {
+ transform.load(script.src, function (param) {
+ scripts[i] = param;
+ exec();
+ }, opts, true);
+ } else {
+ opts.filename = "embedded";
+ scripts[i] = [script.innerHTML, opts];
+ }
+ };
+
+ // Collect scripts with Babel `types`.
+
+ var _scripts = global.document.getElementsByTagName("script");
+
+ for (var i = 0; i < _scripts.length; ++i) {
+ var _script = _scripts[i];
+ if (types.indexOf(_script.type) >= 0) scripts.push(_script);
+ }
+
+ for (i in scripts) {
+ run(scripts[i], i);
+ }
+
+ exec();
+};
+
+/**
+ * Register load event to transform and execute scripts.
+ */
+
+if (global.addEventListener) {
+ global.addEventListener("DOMContentLoaded", runScripts, false);
+} else if (global.attachEvent) {
+ global.attachEvent("onload", runScripts);
+}
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"15":15,"49":49,"610":610,"66":66}],15:[function(_dereq_,module,exports){
+"use strict";
+
+exports.__esModule = true;
+exports.register = register;
+exports.polyfill = polyfill;
+exports.transformFile = transformFile;
+exports.transformFileSync = transformFileSync;
+exports.parse = parse;
+// istanbul ignore next
+
+function _interopRequire(obj) { return obj && obj.__esModule ? obj["default"] : obj; }
+
+// istanbul ignore next
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj["default"] = obj; return newObj; } }
+
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+var _lodashLangIsFunction = _dereq_(533);
+
+var _lodashLangIsFunction2 = _interopRequireDefault(_lodashLangIsFunction);
+
+var _transformation = _dereq_(66);
+
+var _transformation2 = _interopRequireDefault(_transformation);
+
+var _babylon = _dereq_(612);
+
+var babylon = _interopRequireWildcard(_babylon);
+
+var _util = _dereq_(182);
+
+var util = _interopRequireWildcard(_util);
+
+var _fs = _dereq_(3);
+
+var _fs2 = _interopRequireDefault(_fs);
+
+var _types = _dereq_(179);
+
+var t = _interopRequireWildcard(_types);
+
+exports.util = util;
+exports.acorn = babylon;
+exports.transform = _transformation2["default"];
+exports.pipeline = _transformation.pipeline;
+exports.canCompile = _util.canCompile;
+
+var _transformationFile = _dereq_(46);
+
+exports.File = _interopRequire(_transformationFile);
+
+var _transformationFileOptionsConfig = _dereq_(48);
+
+exports.options = _interopRequire(_transformationFileOptionsConfig);
+
+var _transformationPlugin = _dereq_(82);
+
+exports.Plugin = _interopRequire(_transformationPlugin);
+
+var _transformationTransformer = _dereq_(83);
+
+exports.Transformer = _interopRequire(_transformationTransformer);
+
+var _transformationPipeline = _dereq_(80);
+
+exports.Pipeline = _interopRequire(_transformationPipeline);
+
+var _traversal = _dereq_(148);
+
+exports.traverse = _interopRequire(_traversal);
+
+var _toolsBuildExternalHelpers = _dereq_(45);
+
+exports.buildExternalHelpers = _interopRequire(_toolsBuildExternalHelpers);
+
+var _package = _dereq_(610);
+
+exports.version = _package.version;
+exports.types = t;
+
+/**
+ * Register Babel and polyfill globally.
+ */
+
+function register(opts) {
+ var callback = _dereq_(17);
+ if (opts != null) callback(opts);
+ return callback;
+}
+
+/**
+ * Register polyfill globally.
+ */
+
+function polyfill() {
+ _dereq_(44);
+}
+
+/**
+ * Asynchronously transform `filename` with optional `opts`, calls `callback` when complete.
+ */
+
+function transformFile(filename, opts, callback) {
+ if (_lodashLangIsFunction2["default"](opts)) {
+ callback = opts;
+ opts = {};
+ }
+
+ opts.filename = filename;
+
+ _fs2["default"].readFile(filename, function (err, code) {
+ if (err) return callback(err);
+
+ var result;
+
+ try {
+ result = _transformation2["default"](code, opts);
+ } catch (err) {
+ return callback(err);
+ }
+
+ callback(null, result);
+ });
+}
+
+/**
+ * Synchronous form of `transformFile`.
+ */
+
+function transformFileSync(filename) {
+ var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+ opts.filename = filename;
+ return _transformation2["default"](_fs2["default"].readFileSync(filename, "utf8"), opts);
+}
+
+/**
+ * Parse script with Babel's parser.
+ */
+
+function parse(code) {
+ var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+ opts.allowHashBang = true;
+ opts.sourceType = "module";
+ opts.ecmaVersion = Infinity;
+ opts.plugins = {
+ jsx: true,
+ flow: true
+ };
+ opts.features = {};
+
+ for (var key in _transformation2["default"].pipeline.transformers) {
+ opts.features[key] = true;
+ }
+
+ var ast = babylon.parse(code, opts);
+
+ if (opts.onToken) {
+ // istanbul ignore next
+
+ var _opts$onToken;
+
+ (_opts$onToken = opts.onToken).push.apply(_opts$onToken, ast.tokens);
+ }
+
+ if (opts.onComment) {
+ // istanbul ignore next
+
+ var _opts$onComment;
+
+ (_opts$onComment = opts.onComment).push.apply(_opts$onComment, ast.comments);
+ }
+
+ return ast.program;
+}
+},{"148":148,"17":17,"179":179,"182":182,"3":3,"44":44,"45":45,"46":46,"48":48,"533":533,"610":610,"612":612,"66":66,"80":80,"82":82,"83":83}],16:[function(_dereq_,module,exports){
+// required to safely use babel/register within a browserify codebase
+
+"use strict";
+
+exports.__esModule = true;
+
+_dereq_(44);
+
+exports["default"] = function () {};
+
+module.exports = exports["default"];
+},{"44":44}],17:[function(_dereq_,module,exports){
+"use strict";
+
+exports.__esModule = true;
+// istanbul ignore next
+
+function _interopRequire(obj) { return obj && obj.__esModule ? obj["default"] : obj; }
+
+_dereq_(44);
+
+var _node = _dereq_(16);
+
+exports["default"] = _interopRequire(_node);
+module.exports = exports["default"];
+},{"16":16,"44":44}],18:[function(_dereq_,module,exports){
+"use strict";
+
+exports.__esModule = true;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+// istanbul ignore next
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var _repeating = _dereq_(586);
+
+var _repeating2 = _interopRequireDefault(_repeating);
+
+var _trimRight = _dereq_(608);
+
+var _trimRight2 = _interopRequireDefault(_trimRight);
+
+var _lodashLangIsBoolean = _dereq_(531);
+
+var _lodashLangIsBoolean2 = _interopRequireDefault(_lodashLangIsBoolean);
+
+var _lodashCollectionIncludes = _dereq_(446);
+
+var _lodashCollectionIncludes2 = _interopRequireDefault(_lodashCollectionIncludes);
+
+var _lodashLangIsNumber = _dereq_(535);
+
+var _lodashLangIsNumber2 = _interopRequireDefault(_lodashLangIsNumber);
+
+/**
+ * Buffer for collecting generated output.
+ */
+
+var Buffer = (function () {
+ function Buffer(position, format) {
+ _classCallCheck(this, Buffer);
+
+ this.parenPushNewlineState = null;
+
+ this.position = position;
+ this._indent = format.indent.base;
+ this.format = format;
+ this.buf = "";
+ }
+
+ /**
+ * Get the current trimmed buffer.
+ */
+
+ Buffer.prototype.get = function get() {
+ return _trimRight2["default"](this.buf);
+ };
+
+ /**
+ * Get the current indent.
+ */
+
+ Buffer.prototype.getIndent = function getIndent() {
+ if (this.format.compact || this.format.concise) {
+ return "";
+ } else {
+ return _repeating2["default"](this.format.indent.style, this._indent);
+ }
+ };
+
+ /**
+ * Get the current indent size.
+ */
+
+ Buffer.prototype.indentSize = function indentSize() {
+ return this.getIndent().length;
+ };
+
+ /**
+ * Increment indent size.
+ */
+
+ Buffer.prototype.indent = function indent() {
+ this._indent++;
+ };
+
+ /**
+ * Decrement indent size.
+ */
+
+ Buffer.prototype.dedent = function dedent() {
+ this._indent--;
+ };
+
+ /**
+ * Add a semicolon to the buffer.
+ */
+
+ Buffer.prototype.semicolon = function semicolon() {
+ this.push(";");
+ };
+
+ /**
+ * Ensure last character is a semicolon.
+ */
+
+ Buffer.prototype.ensureSemicolon = function ensureSemicolon() {
+ if (!this.isLast(";")) this.semicolon();
+ };
+
+ /**
+ * Add a right brace to the buffer.
+ */
+
+ Buffer.prototype.rightBrace = function rightBrace() {
+ this.newline(true);
+ //if (this.format.compact) this._removeLast(";");
+ this.push("}");
+ };
+
+ /**
+ * Add a keyword to the buffer.
+ */
+
+ Buffer.prototype.keyword = function keyword(name) {
+ this.push(name);
+ this.space();
+ };
+
+ /**
+ * Add a space to the buffer unless it is compact (override with force).
+ */
+
+ Buffer.prototype.space = function space(force) {
+ if (!force && this.format.compact) return;
+
+ if (force || this.buf && !this.isLast(" ") && !this.isLast("\n")) {
+ this.push(" ");
+ }
+ };
+
+ /**
+ * Remove the last character.
+ */
+
+ Buffer.prototype.removeLast = function removeLast(cha) {
+ if (this.format.compact) return;
+ return this._removeLast(cha);
+ };
+
+ Buffer.prototype._removeLast = function _removeLast(cha) {
+ if (!this._isLast(cha)) return;
+ this.buf = this.buf.substr(0, this.buf.length - 1);
+ this.position.unshift(cha);
+ };
+
+ /**
+ * Set some state that will be modified if a newline has been inserted before any
+ * non-space characters.
+ *
+ * This is to prevent breaking semantics for terminatorless separator nodes. eg:
+ *
+ * return foo;
+ *
+ * returns `foo`. But if we do:
+ *
+ * return
+ * foo;
+ *
+ * `undefined` will be returned and not `foo` due to the terminator.
+ */
+
+ Buffer.prototype.startTerminatorless = function startTerminatorless() {
+ return this.parenPushNewlineState = {
+ printed: false
+ };
+ };
+
+ /**
+ * Print an ending parentheses if a starting one has been printed.
+ */
+
+ Buffer.prototype.endTerminatorless = function endTerminatorless(state) {
+ if (state.printed) {
+ this.dedent();
+ this.newline();
+ this.push(")");
+ }
+ };
+
+ /**
+ * Add a newline (or many newlines), maintaining formatting.
+ * Strips multiple newlines if removeLast is true.
+ */
+
+ Buffer.prototype.newline = function newline(i, removeLast) {
+ if (this.format.compact || this.format.retainLines) return;
+
+ if (this.format.concise) {
+ this.space();
+ return;
+ }
+
+ removeLast = removeLast || false;
+
+ if (_lodashLangIsNumber2["default"](i)) {
+ i = Math.min(2, i);
+
+ if (this.endsWith("{\n") || this.endsWith(":\n")) i--;
+ if (i <= 0) return;
+
+ while (i > 0) {
+ this._newline(removeLast);
+ i--;
+ }
+ return;
+ }
+
+ if (_lodashLangIsBoolean2["default"](i)) {
+ removeLast = i;
+ }
+
+ this._newline(removeLast);
+ };
+
+ /**
+ * Adds a newline unless there is already two previous newlines.
+ */
+
+ Buffer.prototype._newline = function _newline(removeLast) {
+ // never allow more than two lines
+ if (this.endsWith("\n\n")) return;
+
+ // remove the last newline
+ if (removeLast && this.isLast("\n")) this.removeLast("\n");
+
+ this.removeLast(" ");
+ this._removeSpacesAfterLastNewline();
+ this._push("\n");
+ };
+
+ /**
+ * If buffer ends with a newline and some spaces after it, trim those spaces.
+ */
+
+ Buffer.prototype._removeSpacesAfterLastNewline = function _removeSpacesAfterLastNewline() {
+ var lastNewlineIndex = this.buf.lastIndexOf("\n");
+ if (lastNewlineIndex === -1) {
+ return;
+ }
+
+ var index = this.buf.length - 1;
+ while (index > lastNewlineIndex) {
+ if (this.buf[index] !== " ") {
+ break;
+ }
+
+ index--;
+ }
+
+ if (index === lastNewlineIndex) {
+ this.buf = this.buf.substring(0, index + 1);
+ }
+ };
+
+ /**
+ * Push a string to the buffer, maintaining indentation and newlines.
+ */
+
+ Buffer.prototype.push = function push(str, noIndent) {
+ if (!this.format.compact && this._indent && !noIndent && str !== "\n") {
+ // we have an indent level and we aren't pushing a newline
+ var indent = this.getIndent();
+
+ // replace all newlines with newlines with the indentation
+ str = str.replace(/\n/g, "\n" + indent);
+
+ // we've got a newline before us so prepend on the indentation
+ if (this.isLast("\n")) this._push(indent);
+ }
+
+ this._push(str);
+ };
+
+ /**
+ * Push a string to the buffer.
+ */
+
+ Buffer.prototype._push = function _push(str) {
+ // see startTerminatorless() instance method
+ var parenPushNewlineState = this.parenPushNewlineState;
+ if (parenPushNewlineState) {
+ for (var i = 0; i < str.length; i++) {
+ var cha = str[i];
+
+ // we can ignore spaces since they wont interupt a terminatorless separator
+ if (cha === " ") continue;
+
+ this.parenPushNewlineState = null;
+
+ if (cha === "\n" || cha === "/") {
+ // we're going to break this terminator expression so we need to add a parentheses
+ this._push("(");
+ this.indent();
+ parenPushNewlineState.printed = true;
+ }
+
+ break;
+ }
+ }
+
+ //
+ this.position.push(str);
+ this.buf += str;
+ };
+
+ /**
+ * Test if the buffer ends with a string.
+ */
+
+ Buffer.prototype.endsWith = function endsWith(str) {
+ var buf = arguments.length <= 1 || arguments[1] === undefined ? this.buf : arguments[1];
+
+ if (str.length === 1) {
+ return buf[buf.length - 1] === str;
+ } else {
+ return buf.slice(-str.length) === str;
+ }
+ };
+
+ /**
+ * Test if a character is last in the buffer.
+ */
+
+ Buffer.prototype.isLast = function isLast(cha) {
+ if (this.format.compact) return false;
+ return this._isLast(cha);
+ };
+
+ Buffer.prototype._isLast = function _isLast(cha) {
+ var buf = this.buf;
+ var last = buf[buf.length - 1];
+
+ if (Array.isArray(cha)) {
+ return _lodashCollectionIncludes2["default"](cha, last);
+ } else {
+ return cha === last;
+ }
+ };
+
+ return Buffer;
+})();
+
+exports["default"] = Buffer;
+module.exports = exports["default"];
+},{"446":446,"531":531,"535":535,"586":586,"608":608}],19:[function(_dereq_,module,exports){
+/**
+ * Print File.program
+ */
+
+"use strict";
+
+exports.__esModule = true;
+exports.File = File;
+exports.Program = Program;
+exports.BlockStatement = BlockStatement;
+exports.Noop = Noop;
+
+function File(node, print) {
+ print.plain(node.program);
+}
+
+/**
+ * Print all nodes in a Program.body.
+ */
+
+function Program(node, print) {
+ print.sequence(node.body);
+}
+
+/**
+ * Print BlockStatement, collapses empty blocks, prints body.
+ */
+
+function BlockStatement(node, print) {
+ this.push("{");
+ if (node.body.length) {
+ this.newline();
+ print.sequence(node.body, { indent: true });
+ if (!this.format.retainLines) this.removeLast("\n");
+ this.rightBrace();
+ } else {
+ print.printInnerComments();
+ this.push("}");
+ }
+}
+
+/**
+ * What is my purpose?
+ * Why am I here?
+ * Why are any of us here?
+ * Does any of this really matter?
+ */
+
+function Noop() {}
+},{}],20:[function(_dereq_,module,exports){
+/**
+ * Print ClassDeclaration, prints decorators, typeParameters, extends, implements, and body.
+ */
+
+"use strict";
+
+exports.__esModule = true;
+exports.ClassDeclaration = ClassDeclaration;
+exports.ClassBody = ClassBody;
+exports.ClassProperty = ClassProperty;
+exports.MethodDefinition = MethodDefinition;
+
+function ClassDeclaration(node, print) {
+ print.list(node.decorators, { separator: "" });
+ this.push("class");
+
+ if (node.id) {
+ this.push(" ");
+ print.plain(node.id);
+ }
+
+ print.plain(node.typeParameters);
+
+ if (node.superClass) {
+ this.push(" extends ");
+ print.plain(node.superClass);
+ print.plain(node.superTypeParameters);
+ }
+
+ if (node["implements"]) {
+ this.push(" implements ");
+ print.join(node["implements"], { separator: ", " });
+ }
+
+ this.space();
+ print.plain(node.body);
+}
+
+/**
+ * Alias ClassDeclaration printer as ClassExpression.
+ */
+
+exports.ClassExpression = ClassDeclaration;
+
+/**
+ * Print ClassBody, collapses empty blocks, prints body.
+ */
+
+function ClassBody(node, print) {
+ this.push("{");
+ if (node.body.length === 0) {
+ print.printInnerComments();
+ this.push("}");
+ } else {
+ this.newline();
+
+ this.indent();
+ print.sequence(node.body);
+ this.dedent();
+
+ this.rightBrace();
+ }
+}
+
+/**
+ * Print ClassProperty, prints decorators, static, key, typeAnnotation, and value.
+ * Also: semicolons, deal with it.
+ */
+
+function ClassProperty(node, print) {
+ print.list(node.decorators, { separator: "" });
+
+ if (node["static"]) this.push("static ");
+ print.plain(node.key);
+ print.plain(node.typeAnnotation);
+ if (node.value) {
+ this.space();
+ this.push("=");
+ this.space();
+ print.plain(node.value);
+ }
+ this.semicolon();
+}
+
+/**
+ * Print MethodDefinition, prints decorations, static, and method.
+ */
+
+function MethodDefinition(node, print) {
+ print.list(node.decorators, { separator: "" });
+
+ if (node["static"]) {
+ this.push("static ");
+ }
+
+ this._method(node, print);
+}
+},{}],21:[function(_dereq_,module,exports){
+/**
+ * Prints ComprehensionBlock, prints left and right.
+ */
+
+"use strict";
+
+exports.__esModule = true;
+exports.ComprehensionBlock = ComprehensionBlock;
+exports.ComprehensionExpression = ComprehensionExpression;
+
+function ComprehensionBlock(node, print) {
+ this.keyword("for");
+ this.push("(");
+ print.plain(node.left);
+ this.push(" of ");
+ print.plain(node.right);
+ this.push(")");
+}
+
+/**
+ * Prints ComprehensionExpression, prints blocks, filter, and body. Handles generators.
+ */
+
+function ComprehensionExpression(node, print) {
+ this.push(node.generator ? "(" : "[");
+
+ print.join(node.blocks, { separator: " " });
+ this.space();
+
+ if (node.filter) {
+ this.keyword("if");
+ this.push("(");
+ print.plain(node.filter);
+ this.push(")");
+ this.space();
+ }
+
+ print.plain(node.body);
+
+ this.push(node.generator ? ")" : "]");
+}
+},{}],22:[function(_dereq_,module,exports){
+"use strict";
+
+exports.__esModule = true;
+exports.UnaryExpression = UnaryExpression;
+exports.DoExpression = DoExpression;
+exports.ParenthesizedExpression = ParenthesizedExpression;
+exports.UpdateExpression = UpdateExpression;
+exports.ConditionalExpression = ConditionalExpression;
+exports.NewExpression = NewExpression;
+exports.SequenceExpression = SequenceExpression;
+exports.ThisExpression = ThisExpression;
+exports.Super = Super;
+exports.Decorator = Decorator;
+exports.CallExpression = CallExpression;
+exports.EmptyStatement = EmptyStatement;
+exports.ExpressionStatement = ExpressionStatement;
+exports.AssignmentPattern = AssignmentPattern;
+exports.AssignmentExpression = AssignmentExpression;
+exports.BindExpression = BindExpression;
+exports.MemberExpression = MemberExpression;
+exports.MetaProperty = MetaProperty;
+// istanbul ignore next
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj["default"] = obj; return newObj; } }
+
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+var _isInteger = _dereq_(434);
+
+var _isInteger2 = _interopRequireDefault(_isInteger);
+
+var _lodashLangIsNumber = _dereq_(535);
+
+var _lodashLangIsNumber2 = _interopRequireDefault(_lodashLangIsNumber);
+
+var _node = _dereq_(31);
+
+var _node2 = _interopRequireDefault(_node);
+
+var _types = _dereq_(179);
+
+var t = _interopRequireWildcard(_types);
+
+/**
+ * RegExp for testing scientific notation in literals.
+ */
+
+var SCIENTIFIC_NOTATION = /e/i;
+var ZERO_DECIMAL_INTEGER = /\.0+$/;
+
+/**
+ * RegExp for testing if a numeric literal is
+ * a BinaryIntegerLiteral, OctalIntegerLiteral or HexIntegerLiteral.
+ */
+
+var NON_DECIMAL_NUMERIC_LITERAL = /^0(b|o|x)/i;
+
+/**
+ * Prints UnaryExpression, prints operator and argument.
+ */
+
+function UnaryExpression(node, print) {
+ var needsSpace = /[a-z]$/.test(node.operator);
+ var arg = node.argument;
+
+ if (t.isUpdateExpression(arg) || t.isUnaryExpression(arg)) {
+ needsSpace = true;
+ }
+
+ if (t.isUnaryExpression(arg) && arg.operator === "!") {
+ needsSpace = false;
+ }
+
+ this.push(node.operator);
+ if (needsSpace) this.push(" ");
+ print.plain(node.argument);
+}
+
+/**
+ * Prints DoExpression, prints body.
+ */
+
+function DoExpression(node, print) {
+ this.push("do");
+ this.space();
+ print.plain(node.body);
+}
+
+/**
+ * Prints ParenthesizedExpression, prints expression.
+ */
+
+function ParenthesizedExpression(node, print) {
+ this.push("(");
+ print.plain(node.expression);
+ this.push(")");
+}
+
+/**
+ * Prints UpdateExpression, prints operator and argument.
+ */
+
+function UpdateExpression(node, print) {
+ if (node.prefix) {
+ this.push(node.operator);
+ print.plain(node.argument);
+ } else {
+ print.plain(node.argument);
+ this.push(node.operator);
+ }
+}
+
+/**
+ * Prints ConditionalExpression, prints test, consequent, and alternate.
+ */
+
+function ConditionalExpression(node, print) {
+ print.plain(node.test);
+ this.space();
+ this.push("?");
+ this.space();
+ print.plain(node.consequent);
+ this.space();
+ this.push(":");
+ this.space();
+ print.plain(node.alternate);
+}
+
+/**
+ * Prints NewExpression, prints callee and arguments.
+ */
+
+function NewExpression(node, print) {
+ this.push("new ");
+ print.plain(node.callee);
+ this.push("(");
+ print.list(node.arguments);
+ this.push(")");
+}
+
+/**
+ * Prints SequenceExpression.expressions.
+ */
+
+function SequenceExpression(node, print) {
+ print.list(node.expressions);
+}
+
+/**
+ * Prints ThisExpression.
+ */
+
+function ThisExpression() {
+ this.push("this");
+}
+
+/**
+ * Prints Super.
+ */
+
+function Super() {
+ this.push("super");
+}
+
+/**
+ * Prints Decorator, prints expression.
+ */
+
+function Decorator(node, print) {
+ this.push("@");
+ print.plain(node.expression);
+ this.newline();
+}
+
+/**
+ * Prints CallExpression, prints callee and arguments.
+ */
+
+function CallExpression(node, print) {
+ print.plain(node.callee);
+
+ this.push("(");
+
+ var isPrettyCall = node._prettyCall && !this.format.retainLines && !this.format.compact;
+
+ var separator;
+ if (isPrettyCall) {
+ separator = ",\n";
+ this.newline();
+ this.indent();
+ }
+
+ print.list(node.arguments, { separator: separator });
+
+ if (isPrettyCall) {
+ this.newline();
+ this.dedent();
+ }
+
+ this.push(")");
+}
+
+/**
+ * Builds yield or await expression printer.
+ * Prints delegate, all, and argument.
+ */
+
+var buildYieldAwait = function buildYieldAwait(keyword) {
+ return function (node, print) {
+ this.push(keyword);
+
+ if (node.delegate || node.all) {
+ this.push("*");
+ }
+
+ if (node.argument) {
+ this.push(" ");
+ var terminatorState = this.startTerminatorless();
+ print.plain(node.argument);
+ this.endTerminatorless(terminatorState);
+ }
+ };
+};
+
+/**
+ * Create YieldExpression and AwaitExpression printers.
+ */
+
+var YieldExpression = buildYieldAwait("yield");
+exports.YieldExpression = YieldExpression;
+var AwaitExpression = buildYieldAwait("await");
+
+exports.AwaitExpression = AwaitExpression;
+/**
+ * Prints EmptyStatement.
+ */
+
+function EmptyStatement() {
+ this.semicolon();
+}
+
+/**
+ * Prints ExpressionStatement, prints expression.
+ */
+
+function ExpressionStatement(node, print) {
+ print.plain(node.expression);
+ this.semicolon();
+}
+
+/**
+ * Prints AssignmentPattern, prints left and right.
+ */
+
+function AssignmentPattern(node, print) {
+ print.plain(node.left);
+ this.push(" = ");
+ print.plain(node.right);
+}
+
+/**
+ * Prints AssignmentExpression, prints left, operator, and right.
+ */
+
+function AssignmentExpression(node, print, parent) {
+ // Somewhere inside a for statement `init` node but doesn't usually
+ // needs a paren except for `in` expressions: `for (a in b ? a : b;;)`
+ var parens = this._inForStatementInit && node.operator === "in" && !_node2["default"].needsParens(node, parent);
+
+ if (parens) {
+ this.push("(");
+ }
+
+ // todo: add cases where the spaces can be dropped when in compact mode
+ print.plain(node.left);
+
+ var spaces = node.operator === "in" || node.operator === "instanceof";
+ spaces = true; // todo: https://github.com/babel/babel/issues/1835
+ this.space(spaces);
+
+ this.push(node.operator);
+
+ if (!spaces) {
+ // space is mandatory to avoid outputting regexps
+ set = set.map(function (s, si, set) {
+ return s.map(this.parse, this)
+ }, this)
+
+ this.debug(this.pattern, set)
+
+ // filter out everything that didn't compile properly.
+ set = set.filter(function (s) {
+ return s.indexOf(false) === -1
+ })
+
+ this.debug(this.pattern, set)
+
+ this.set = set
+}
+
+Minimatch.prototype.parseNegate = parseNegate
+function parseNegate () {
+ var pattern = this.pattern
+ var negate = false
+ var options = this.options
+ var negateOffset = 0
+
+ if (options.nonegate) return
+
+ for (var i = 0, l = pattern.length
+ ; i < l && pattern.charAt(i) === '!'
+ ; i++) {
+ negate = !negate
+ negateOffset++
+ }
+
+ if (negateOffset) this.pattern = pattern.substr(negateOffset)
+ this.negate = negate
+}
+
+// Brace expansion:
+// a{b,c}d -> abd acd
+// a{b,}c -> abc ac
+// a{0..3}d -> a0d a1d a2d a3d
+// a{b,c{d,e}f}g -> abg acdfg acefg
+// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg
+//
+// Invalid sets are not expanded.
+// a{2..}b -> a{2..}b
+// a{b}c -> a{b}c
+minimatch.braceExpand = function (pattern, options) {
+ return braceExpand(pattern, options)
+}
+
+Minimatch.prototype.braceExpand = braceExpand
+
+function braceExpand (pattern, options) {
+ if (!options) {
+ if (this instanceof Minimatch) {
+ options = this.options
+ } else {
+ options = {}
+ }
+ }
+
+ pattern = typeof pattern === 'undefined'
+ ? this.pattern : pattern
+
+ if (typeof pattern === 'undefined') {
+ throw new Error('undefined pattern')
+ }
+
+ if (options.nobrace ||
+ !pattern.match(/\{.*\}/)) {
+ // shortcut. no need to expand.
+ return [pattern]
+ }
+
+ return expand(pattern)
+}
+
+// parse a component of the expanded set.
+// At this point, no pattern may contain "/" in it
+// so we're going to return a 2d array, where each entry is the full
+// pattern, split on '/', and then turned into a regular expression.
+// A regexp is made at the end which joins each array with an
+// escaped /, and another full one which joins each regexp with |.
+//
+// Following the lead of Bash 4.1, note that "**" only has special meaning
+// when it is the *only* thing in a path portion. Otherwise, any series
+// of * is equivalent to a single *. Globstar behavior is enabled by
+// default, and can be disabled by setting options.noglobstar.
+Minimatch.prototype.parse = parse
+var SUBPARSE = {}
+function parse (pattern, isSub) {
+ var options = this.options
+
+ // shortcuts
+ if (!options.noglobstar && pattern === '**') return GLOBSTAR
+ if (pattern === '') return ''
+
+ var re = ''
+ var hasMagic = !!options.nocase
+ var escaping = false
+ // ? => one single character
+ var patternListStack = []
+ var negativeLists = []
+ var plType
+ var stateChar
+ var inClass = false
+ var reClassStart = -1
+ var classStart = -1
+ // . and .. never match anything that doesn't start with .,
+ // even when options.dot is set.
+ var patternStart = pattern.charAt(0) === '.' ? '' // anything
+ // not (start or / followed by . or .. followed by / or end)
+ : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))'
+ : '(?!\\.)'
+ var self = this
+
+ function clearStateChar () {
+ if (stateChar) {
+ // we had some state-tracking character
+ // that wasn't consumed by this pass.
+ switch (stateChar) {
+ case '*':
+ re += star
+ hasMagic = true
+ break
+ case '?':
+ re += qmark
+ hasMagic = true
+ break
+ default:
+ re += '\\' + stateChar
+ break
+ }
+ self.debug('clearStateChar %j %j', stateChar, re)
+ stateChar = false
+ }
+ }
+
+ for (var i = 0, len = pattern.length, c
+ ; (i < len) && (c = pattern.charAt(i))
+ ; i++) {
+ this.debug('%s\t%s %s %j', pattern, i, re, c)
+
+ // skip over any that are escaped.
+ if (escaping && reSpecials[c]) {
+ re += '\\' + c
+ escaping = false
+ continue
+ }
+
+ switch (c) {
+ case '/':
+ // completely not allowed, even escaped.
+ // Should already be path-split by now.
+ return false
+
+ case '\\':
+ clearStateChar()
+ escaping = true
+ continue
+
+ // the various stateChar values
+ // for the "extglob" stuff.
+ case '?':
+ case '*':
+ case '+':
+ case '@':
+ case '!':
+ this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c)
+
+ // all of those are literals inside a class, except that
+ // the glob [!a] means [^a] in regexp
+ if (inClass) {
+ this.debug(' in class')
+ if (c === '!' && i === classStart + 1) c = '^'
+ re += c
+ continue
+ }
+
+ // if we already have a stateChar, then it means
+ // that there was something like ** or +? in there.
+ // Handle the stateChar, then proceed with this one.
+ self.debug('call clearStateChar %j', stateChar)
+ clearStateChar()
+ stateChar = c
+ // if extglob is disabled, then +(asdf|foo) isn't a thing.
+ // just clear the statechar *now*, rather than even diving into
+ // the patternList stuff.
+ if (options.noext) clearStateChar()
+ continue
+
+ case '(':
+ if (inClass) {
+ re += '('
+ continue
+ }
+
+ if (!stateChar) {
+ re += '\\('
+ continue
+ }
+
+ plType = stateChar
+ patternListStack.push({
+ type: plType,
+ start: i - 1,
+ reStart: re.length
+ })
+ // negation is (?:(?!js)[^/]*)
+ re += stateChar === '!' ? '(?:(?!(?:' : '(?:'
+ this.debug('plType %j %j', stateChar, re)
+ stateChar = false
+ continue
+
+ case ')':
+ if (inClass || !patternListStack.length) {
+ re += '\\)'
+ continue
+ }
+
+ clearStateChar()
+ hasMagic = true
+ re += ')'
+ var pl = patternListStack.pop()
+ plType = pl.type
+ // negation is (?:(?!js)[^/]*)
+ // The others are (?:)
+ switch (plType) {
+ case '!':
+ negativeLists.push(pl)
+ re += ')[^/]*?)'
+ pl.reEnd = re.length
+ break
+ case '?':
+ case '+':
+ case '*':
+ re += plType
+ break
+ case '@': break // the default anyway
+ }
+ continue
+
+ case '|':
+ if (inClass || !patternListStack.length || escaping) {
+ re += '\\|'
+ escaping = false
+ continue
+ }
+
+ clearStateChar()
+ re += '|'
+ continue
+
+ // these are mostly the same in regexp and glob
+ case '[':
+ // swallow any state-tracking char before the [
+ clearStateChar()
+
+ if (inClass) {
+ re += '\\' + c
+ continue
+ }
+
+ inClass = true
+ classStart = i
+ reClassStart = re.length
+ re += c
+ continue
+
+ case ']':
+ // a right bracket shall lose its special
+ // meaning and represent itself in
+ // a bracket expression if it occurs
+ // first in the list. -- POSIX.2 2.8.3.2
+ if (i === classStart + 1 || !inClass) {
+ re += '\\' + c
+ escaping = false
+ continue
+ }
+
+ // handle the case where we left a class open.
+ // "[z-a]" is valid, equivalent to "\[z-a\]"
+ if (inClass) {
+ // split where the last [ was, make sure we don't have
+ // an invalid re. if so, re-walk the contents of the
+ // would-be class to re-translate any characters that
+ // were passed through as-is
+ // TODO: It would probably be faster to determine this
+ // without a try/catch and a new RegExp, but it's tricky
+ // to do safely. For now, this is safe and works.
+ var cs = pattern.substring(classStart + 1, i)
+ try {
+ RegExp('[' + cs + ']')
+ } catch (er) {
+ // not a valid class!
+ var sp = this.parse(cs, SUBPARSE)
+ re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]'
+ hasMagic = hasMagic || sp[1]
+ inClass = false
+ continue
+ }
+ }
+
+ // finish up the class.
+ hasMagic = true
+ inClass = false
+ re += c
+ continue
+
+ default:
+ // swallow any state char that wasn't consumed
+ clearStateChar()
+
+ if (escaping) {
+ // no need
+ escaping = false
+ } else if (reSpecials[c]
+ && !(c === '^' && inClass)) {
+ re += '\\'
+ }
+
+ re += c
+
+ } // switch
+ } // for
+
+ // handle the case where we left a class open.
+ // "[abc" is valid, equivalent to "\[abc"
+ if (inClass) {
+ // split where the last [ was, and escape it
+ // this is a huge pita. We now have to re-walk
+ // the contents of the would-be class to re-translate
+ // any characters that were passed through as-is
+ cs = pattern.substr(classStart + 1)
+ sp = this.parse(cs, SUBPARSE)
+ re = re.substr(0, reClassStart) + '\\[' + sp[0]
+ hasMagic = hasMagic || sp[1]
+ }
+
+ // handle the case where we had a +( thing at the *end*
+ // of the pattern.
+ // each pattern list stack adds 3 chars, and we need to go through
+ // and escape any | chars that were passed through as-is for the regexp.
+ // Go through and escape them, taking care not to double-escape any
+ // | chars that were already escaped.
+ for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {
+ var tail = re.slice(pl.reStart + 3)
+ // maybe some even number of \, then maybe 1 \, followed by a |
+ tail = tail.replace(/((?:\\{2})*)(\\?)\|/g, function (_, $1, $2) {
+ if (!$2) {
+ // the | isn't already escaped, so escape it.
+ $2 = '\\'
+ }
+
+ // need to escape all those slashes *again*, without escaping the
+ // one that we need for escaping the | character. As it works out,
+ // escaping an even number of slashes can be done by simply repeating
+ // it exactly after itself. That's why this trick works.
+ //
+ // I am sorry that you have to see this.
+ return $1 + $1 + $2 + '|'
+ })
+
+ this.debug('tail=%j\n %s', tail, tail)
+ var t = pl.type === '*' ? star
+ : pl.type === '?' ? qmark
+ : '\\' + pl.type
+
+ hasMagic = true
+ re = re.slice(0, pl.reStart) + t + '\\(' + tail
+ }
+
+ // handle trailing things that only matter at the very end.
+ clearStateChar()
+ if (escaping) {
+ // trailing \\
+ re += '\\\\'
+ }
+
+ // only need to apply the nodot start if the re starts with
+ // something that could conceivably capture a dot
+ var addPatternStart = false
+ switch (re.charAt(0)) {
+ case '.':
+ case '[':
+ case '(': addPatternStart = true
+ }
+
+ // Hack to work around lack of negative lookbehind in JS
+ // A pattern like: *.!(x).!(y|z) needs to ensure that a name
+ // like 'a.xyz.yz' doesn't match. So, the first negative
+ // lookahead, has to look ALL the way ahead, to the end of
+ // the pattern.
+ for (var n = negativeLists.length - 1; n > -1; n--) {
+ var nl = negativeLists[n]
+
+ var nlBefore = re.slice(0, nl.reStart)
+ var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)
+ var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)
+ var nlAfter = re.slice(nl.reEnd)
+
+ nlLast += nlAfter
+
+ // Handle nested stuff like *(*.js|!(*.json)), where open parens
+ // mean that we should *not* include the ) in the bit that is considered
+ // "after" the negated section.
+ var openParensBefore = nlBefore.split('(').length - 1
+ var cleanAfter = nlAfter
+ for (i = 0; i < openParensBefore; i++) {
+ cleanAfter = cleanAfter.replace(/\)[+*?]?/, '')
+ }
+ nlAfter = cleanAfter
+
+ var dollar = ''
+ if (nlAfter === '' && isSub !== SUBPARSE) {
+ dollar = '$'
+ }
+ var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast
+ re = newRe
+ }
+
+ // if the re is not "" at this point, then we need to make sure
+ // it doesn't match against an empty path part.
+ // Otherwise a/* will match a/, which it should not.
+ if (re !== '' && hasMagic) {
+ re = '(?=.)' + re
+ }
+
+ if (addPatternStart) {
+ re = patternStart + re
+ }
+
+ // parsing just a piece of a larger pattern.
+ if (isSub === SUBPARSE) {
+ return [re, hasMagic]
+ }
+
+ // skip the regexp for non-magical patterns
+ // unescape anything in it, though, so that it'll be
+ // an exact match against a file etc.
+ if (!hasMagic) {
+ return globUnescape(pattern)
+ }
+
+ var flags = options.nocase ? 'i' : ''
+ var regExp = new RegExp('^' + re + '$', flags)
+
+ regExp._glob = pattern
+ regExp._src = re
+
+ return regExp
+}
+
+minimatch.makeRe = function (pattern, options) {
+ return new Minimatch(pattern, options || {}).makeRe()
+}
+
+Minimatch.prototype.makeRe = makeRe
+function makeRe () {
+ if (this.regexp || this.regexp === false) return this.regexp
+
+ // at this point, this.set is a 2d array of partial
+ // pattern strings, or "**".
+ //
+ // It's better to use .match(). This function shouldn't
+ // be used, really, but it's pretty convenient sometimes,
+ // when you just want to work with a regex.
+ var set = this.set
+
+ if (!set.length) {
+ this.regexp = false
+ return this.regexp
+ }
+ var options = this.options
+
+ var twoStar = options.noglobstar ? star
+ : options.dot ? twoStarDot
+ : twoStarNoDot
+ var flags = options.nocase ? 'i' : ''
+
+ var re = set.map(function (pattern) {
+ return pattern.map(function (p) {
+ return (p === GLOBSTAR) ? twoStar
+ : (typeof p === 'string') ? regExpEscape(p)
+ : p._src
+ }).join('\\\/')
+ }).join('|')
+
+ // must match entire pattern
+ // ending in a * or ** will make it less strict.
+ re = '^(?:' + re + ')$'
+
+ // can match anything, as long as it's not this.
+ if (this.negate) re = '^(?!' + re + ').*$'
+
+ try {
+ this.regexp = new RegExp(re, flags)
+ } catch (ex) {
+ this.regexp = false
+ }
+ return this.regexp
+}
+
+minimatch.match = function (list, pattern, options) {
+ options = options || {}
+ var mm = new Minimatch(pattern, options)
+ list = list.filter(function (f) {
+ return mm.match(f)
+ })
+ if (mm.options.nonull && !list.length) {
+ list.push(pattern)
+ }
+ return list
+}
+
+Minimatch.prototype.match = match
+function match (f, partial) {
+ this.debug('match', f, this.pattern)
+ // short-circuit in the case of busted things.
+ // comments, etc.
+ if (this.comment) return false
+ if (this.empty) return f === ''
+
+ if (f === '/' && partial) return true
+
+ var options = this.options
+
+ // windows: need to use /, not \
+ if (path.sep !== '/') {
+ f = f.split(path.sep).join('/')
+ }
+
+ // treat the test path as a set of pathparts.
+ f = f.split(slashSplit)
+ this.debug(this.pattern, 'split', f)
+
+ // just ONE of the pattern sets in this.set needs to match
+ // in order for it to be valid. If negating, then just one
+ // match means that we have failed.
+ // Either way, return on the first hit.
+
+ var set = this.set
+ this.debug(this.pattern, 'set', set)
+
+ // Find the basename of the path by looking for the last non-empty segment
+ var filename
+ var i
+ for (i = f.length - 1; i >= 0; i--) {
+ filename = f[i]
+ if (filename) break
+ }
+
+ for (i = 0; i < set.length; i++) {
+ var pattern = set[i]
+ var file = f
+ if (options.matchBase && pattern.length === 1) {
+ file = [filename]
+ }
+ var hit = this.matchOne(file, pattern, partial)
+ if (hit) {
+ if (options.flipNegate) return true
+ return !this.negate
+ }
+ }
+
+ // didn't get any hits. this is success if it's a negative
+ // pattern, failure otherwise.
+ if (options.flipNegate) return false
+ return this.negate
+}
+
+// set partial to true to test if, for example,
+// "/a/b" matches the start of "/*/b/*/d"
+// Partial means, if you run out of file before you run
+// out of pattern, then that's fine, as long as all
+// the parts match.
+Minimatch.prototype.matchOne = function (file, pattern, partial) {
+ var options = this.options
+
+ this.debug('matchOne',
+ { 'this': this, file: file, pattern: pattern })
+
+ this.debug('matchOne', file.length, pattern.length)
+
+ for (var fi = 0,
+ pi = 0,
+ fl = file.length,
+ pl = pattern.length
+ ; (fi < fl) && (pi < pl)
+ ; fi++, pi++) {
+ this.debug('matchOne loop')
+ var p = pattern[pi]
+ var f = file[fi]
+
+ this.debug(pattern, p, f)
+
+ // should be impossible.
+ // some invalid regexp stuff in the set.
+ if (p === false) return false
+
+ if (p === GLOBSTAR) {
+ this.debug('GLOBSTAR', [pattern, p, f])
+
+ // "**"
+ // a/**/b/**/c would match the following:
+ // a/b/x/y/z/c
+ // a/x/y/z/b/c
+ // a/b/x/b/x/c
+ // a/b/c
+ // To do this, take the rest of the pattern after
+ // the **, and see if it would match the file remainder.
+ // If so, return success.
+ // If not, the ** "swallows" a segment, and try again.
+ // This is recursively awful.
+ //
+ // a/**/b/**/c matching a/b/x/y/z/c
+ // - a matches a
+ // - doublestar
+ // - matchOne(b/x/y/z/c, b/**/c)
+ // - b matches b
+ // - doublestar
+ // - matchOne(x/y/z/c, c) -> no
+ // - matchOne(y/z/c, c) -> no
+ // - matchOne(z/c, c) -> no
+ // - matchOne(c, c) yes, hit
+ var fr = fi
+ var pr = pi + 1
+ if (pr === pl) {
+ this.debug('** at the end')
+ // a ** at the end will just swallow the rest.
+ // We have found a match.
+ // however, it will not swallow /.x, unless
+ // options.dot is set.
+ // . and .. are *never* matched by **, for explosively
+ // exponential reasons.
+ for (; fi < fl; fi++) {
+ if (file[fi] === '.' || file[fi] === '..' ||
+ (!options.dot && file[fi].charAt(0) === '.')) return false
+ }
+ return true
+ }
+
+ // ok, let's see if we can swallow whatever we can.
+ while (fr < fl) {
+ var swallowee = file[fr]
+
+ this.debug('\nglobstar while', file, fr, pattern, pr, swallowee)
+
+ // XXX remove this slice. Just pass the start index.
+ if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
+ this.debug('globstar found match!', fr, fl, swallowee)
+ // found a match.
+ return true
+ } else {
+ // can't swallow "." or ".." ever.
+ // can only swallow ".foo" when explicitly asked.
+ if (swallowee === '.' || swallowee === '..' ||
+ (!options.dot && swallowee.charAt(0) === '.')) {
+ this.debug('dot detected!', file, fr, pattern, pr)
+ break
+ }
+
+ // ** swallows a segment, and continue.
+ this.debug('globstar swallow a segment, and continue')
+ fr++
+ }
+ }
+
+ // no match was found.
+ // However, in partial mode, we can't say this is necessarily over.
+ // If there's more *pattern* left, then
+ if (partial) {
+ // ran out of file
+ this.debug('\n>>> no match, partial?', file, fr, pattern, pr)
+ if (fr === fl) return true
+ }
+ return false
+ }
+
+ // something other than **
+ // non-magic patterns just have to match exactly
+ // patterns with magic have been turned into regexps.
+ var hit
+ if (typeof p === 'string') {
+ if (options.nocase) {
+ hit = f.toLowerCase() === p.toLowerCase()
+ } else {
+ hit = f === p
+ }
+ this.debug('string match', p, f, hit)
+ } else {
+ hit = f.match(p)
+ this.debug('pattern match', p, f, hit)
+ }
+
+ if (!hit) return false
+ }
+
+ // Note: ending in / means that we'll get a final ""
+ // at the end of the pattern. This can only match a
+ // corresponding "" at the end of the file.
+ // If the file ends in /, then it can only match a
+ // a pattern that ends in /, unless the pattern just
+ // doesn't have any more for it. But, a/b/ should *not*
+ // match "a/b/*", even though "" matches against the
+ // [^/]*? pattern, except in partial mode, where it might
+ // simply not be reached yet.
+ // However, a/b/ should still satisfy a/*
+
+ // now either we fell off the end of the pattern, or we're done.
+ if (fi === fl && pi === pl) {
+ // ran out of pattern and filename at the same time.
+ // an exact hit!
+ return true
+ } else if (fi === fl) {
+ // ran out of file, but still had pattern left.
+ // this is ok if we're doing the match as part of
+ // a glob fs traversal.
+ return partial
+ } else if (pi === pl) {
+ // ran out of pattern, still have file left.
+ // this is only acceptable if we're on the very last
+ // empty segment of a file with a trailing slash.
+ // a/* should match a/b/
+ var emptyFileEnd = (fi === fl - 1) && (file[fi] === '')
+ return emptyFileEnd
+ }
+
+ // should be unreachable.
+ throw new Error('wtf?')
+}
+
+// replace stuff like \* with *
+function globUnescape (s) {
+ return s.replace(/\\(.)/g, '$1')
+}
+
+function regExpEscape (s) {
+ return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&')
+}
+
+},{"220":220,"9":9}],556:[function(_dereq_,module,exports){
+/**
+ * Helpers.
+ */
+
+var s = 1000;
+var m = s * 60;
+var h = m * 60;
+var d = h * 24;
+var y = d * 365.25;
+
+/**
+ * Parse or format the given `val`.
+ *
+ * Options:
+ *
+ * - `long` verbose formatting [false]
+ *
+ * @param {String|Number} val
+ * @param {Object} options
+ * @return {String|Number}
+ * @api public
+ */
+
+module.exports = function(val, options){
+ options = options || {};
+ if ('string' == typeof val) return parse(val);
+ return options.long
+ ? long(val)
+ : short(val);
+};
+
+/**
+ * Parse the given `str` and return milliseconds.
+ *
+ * @param {String} str
+ * @return {Number}
+ * @api private
+ */
+
+function parse(str) {
+ str = '' + str;
+ if (str.length > 10000) return;
+ var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str);
+ if (!match) return;
+ var n = parseFloat(match[1]);
+ var type = (match[2] || 'ms').toLowerCase();
+ switch (type) {
+ case 'years':
+ case 'year':
+ case 'yrs':
+ case 'yr':
+ case 'y':
+ return n * y;
+ case 'days':
+ case 'day':
+ case 'd':
+ return n * d;
+ case 'hours':
+ case 'hour':
+ case 'hrs':
+ case 'hr':
+ case 'h':
+ return n * h;
+ case 'minutes':
+ case 'minute':
+ case 'mins':
+ case 'min':
+ case 'm':
+ return n * m;
+ case 'seconds':
+ case 'second':
+ case 'secs':
+ case 'sec':
+ case 's':
+ return n * s;
+ case 'milliseconds':
+ case 'millisecond':
+ case 'msecs':
+ case 'msec':
+ case 'ms':
+ return n;
+ }
+}
+
+/**
+ * Short format for `ms`.
+ *
+ * @param {Number} ms
+ * @return {String}
+ * @api private
+ */
+
+function short(ms) {
+ if (ms >= d) return Math.round(ms / d) + 'd';
+ if (ms >= h) return Math.round(ms / h) + 'h';
+ if (ms >= m) return Math.round(ms / m) + 'm';
+ if (ms >= s) return Math.round(ms / s) + 's';
+ return ms + 'ms';
+}
+
+/**
+ * Long format for `ms`.
+ *
+ * @param {Number} ms
+ * @return {String}
+ * @api private
+ */
+
+function long(ms) {
+ return plural(ms, d, 'day')
+ || plural(ms, h, 'hour')
+ || plural(ms, m, 'minute')
+ || plural(ms, s, 'second')
+ || ms + ' ms';
+}
+
+/**
+ * Pluralization helper.
+ */
+
+function plural(ms, n, name) {
+ if (ms < n) return;
+ if (ms < n * 1.5) return Math.floor(ms / n) + ' ' + name;
+ return Math.ceil(ms / n) + ' ' + name + 's';
+}
+
+},{}],557:[function(_dereq_,module,exports){
+'use strict';
+module.exports = Number.isNaN || function (x) {
+ return x !== x;
+};
+
+},{}],558:[function(_dereq_,module,exports){
+'use strict';
+var fs = _dereq_(3)
+
+module.exports = function (pth, cb) {
+ var fn = typeof fs.access === 'function' ? fs.access : fs.stat;
+
+ fn(pth, function (err) {
+ cb(null, !err);
+ });
+};
+
+module.exports.sync = function (pth) {
+ var fn = typeof fs.accessSync === 'function' ? fs.accessSync : fs.statSync;
+
+ try {
+ fn(pth);
+ return true;
+ } catch (err) {
+ return false;
+ }
+};
+
+},{"3":3}],559:[function(_dereq_,module,exports){
+(function (process){
+'use strict';
+
+function posix(path) {
+ return path.charAt(0) === '/';
+};
+
+function win32(path) {
+ // https://github.com/joyent/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56
+ var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/;
+ var result = splitDeviceRe.exec(path);
+ var device = result[1] || '';
+ var isUnc = !!device && device.charAt(1) !== ':';
+
+ // UNC paths are always absolute
+ return !!result[2] || isUnc;
+};
+
+module.exports = process.platform === 'win32' ? win32 : posix;
+module.exports.posix = posix;
+module.exports.win32 = win32;
+
+}).call(this,_dereq_(10))
+},{"10":10}],560:[function(_dereq_,module,exports){
+"use strict";
+
+var originalObject = Object;
+var originalDefProp = Object.defineProperty;
+var originalCreate = Object.create;
+
+function defProp(obj, name, value) {
+ if (originalDefProp) try {
+ originalDefProp.call(originalObject, obj, name, { value: value });
+ } catch (definePropertyIsBrokenInIE8) {
+ obj[name] = value;
+ } else {
+ obj[name] = value;
+ }
+}
+
+// For functions that will be invoked using .call or .apply, we need to
+// define those methods on the function objects themselves, rather than
+// inheriting them from Function.prototype, so that a malicious or clumsy
+// third party cannot interfere with the functionality of this module by
+// redefining Function.prototype.call or .apply.
+function makeSafeToCall(fun) {
+ if (fun) {
+ defProp(fun, "call", fun.call);
+ defProp(fun, "apply", fun.apply);
+ }
+ return fun;
+}
+
+makeSafeToCall(originalDefProp);
+makeSafeToCall(originalCreate);
+
+var hasOwn = makeSafeToCall(Object.prototype.hasOwnProperty);
+var numToStr = makeSafeToCall(Number.prototype.toString);
+var strSlice = makeSafeToCall(String.prototype.slice);
+
+var cloner = function(){};
+function create(prototype) {
+ if (originalCreate) {
+ return originalCreate.call(originalObject, prototype);
+ }
+ cloner.prototype = prototype || null;
+ return new cloner;
+}
+
+var rand = Math.random;
+var uniqueKeys = create(null);
+
+function makeUniqueKey() {
+ // Collisions are highly unlikely, but this module is in the business of
+ // making guarantees rather than safe bets.
+ do var uniqueKey = internString(strSlice.call(numToStr.call(rand(), 36), 2));
+ while (hasOwn.call(uniqueKeys, uniqueKey));
+ return uniqueKeys[uniqueKey] = uniqueKey;
+}
+
+function internString(str) {
+ var obj = {};
+ obj[str] = true;
+ return Object.keys(obj)[0];
+}
+
+// External users might find this function useful, but it is not necessary
+// for the typical use of this module.
+defProp(exports, "makeUniqueKey", makeUniqueKey);
+
+// Object.getOwnPropertyNames is the only way to enumerate non-enumerable
+// properties, so if we wrap it to ignore our secret keys, there should be
+// no way (except guessing) to access those properties.
+var originalGetOPNs = Object.getOwnPropertyNames;
+Object.getOwnPropertyNames = function getOwnPropertyNames(object) {
+ for (var names = originalGetOPNs(object),
+ src = 0,
+ dst = 0,
+ len = names.length;
+ src < len;
+ ++src) {
+ if (!hasOwn.call(uniqueKeys, names[src])) {
+ if (src > dst) {
+ names[dst] = names[src];
+ }
+ ++dst;
+ }
+ }
+ names.length = dst;
+ return names;
+};
+
+function defaultCreatorFn(object) {
+ return create(null);
+}
+
+function makeAccessor(secretCreatorFn) {
+ var brand = makeUniqueKey();
+ var passkey = create(null);
+
+ secretCreatorFn = secretCreatorFn || defaultCreatorFn;
+
+ function register(object) {
+ var secret; // Created lazily.
+
+ function vault(key, forget) {
+ // Only code that has access to the passkey can retrieve (or forget)
+ // the secret object.
+ if (key === passkey) {
+ return forget
+ ? secret = null
+ : secret || (secret = secretCreatorFn(object));
+ }
+ }
+
+ defProp(object, brand, vault);
+ }
+
+ function accessor(object) {
+ if (!hasOwn.call(object, brand))
+ register(object);
+ return object[brand](passkey);
+ }
+
+ accessor.forget = function(object) {
+ if (hasOwn.call(object, brand))
+ object[brand](passkey, true);
+ };
+
+ return accessor;
+}
+
+defProp(exports, "makeAccessor", makeAccessor);
+
+},{}],561:[function(_dereq_,module,exports){
+var assert = _dereq_(1);
+var types = _dereq_(569);
+var n = types.namedTypes;
+var isArray = types.builtInTypes.array;
+var isObject = types.builtInTypes.object;
+var linesModule = _dereq_(563);
+var fromString = linesModule.fromString;
+var Lines = linesModule.Lines;
+var concat = linesModule.concat;
+var util = _dereq_(570);
+var comparePos = util.comparePos;
+var childNodesCacheKey = _dereq_(560).makeUniqueKey();
+
+// TODO Move a non-caching implementation of this function into ast-types,
+// and implement a caching wrapper function here.
+function getSortedChildNodes(node, resultArray) {
+ if (!node) {
+ return;
+ }
+
+ // The .loc checks below are sensitive to some of the problems that
+ // are fixed by this utility function. Specifically, if it decides to
+ // set node.loc to null, indicating that the node's .loc information
+ // is unreliable, then we don't want to add node to the resultArray.
+ util.fixFaultyLocations(node);
+
+ if (resultArray) {
+ if (n.Node.check(node) &&
+ n.SourceLocation.check(node.loc)) {
+ // This reverse insertion sort almost always takes constant
+ // time because we almost always (maybe always?) append the
+ // nodes in order anyway.
+ for (var i = resultArray.length - 1; i >= 0; --i) {
+ if (comparePos(resultArray[i].loc.end,
+ node.loc.start) <= 0) {
+ break;
+ }
+ }
+ resultArray.splice(i + 1, 0, node);
+ return;
+ }
+ } else if (node[childNodesCacheKey]) {
+ return node[childNodesCacheKey];
+ }
+
+ var names;
+ if (isArray.check(node)) {
+ names = Object.keys(node);
+ } else if (isObject.check(node)) {
+ names = types.getFieldNames(node);
+ } else {
+ return;
+ }
+
+ if (!resultArray) {
+ Object.defineProperty(node, childNodesCacheKey, {
+ value: resultArray = [],
+ enumerable: false
+ });
+ }
+
+ for (var i = 0, nameCount = names.length; i < nameCount; ++i) {
+ getSortedChildNodes(node[names[i]], resultArray);
+ }
+
+ return resultArray;
+}
+
+// As efficiently as possible, decorate the comment object with
+// .precedingNode, .enclosingNode, and/or .followingNode properties, at
+// least one of which is guaranteed to be defined.
+function decorateComment(node, comment) {
+ var childNodes = getSortedChildNodes(node);
+
+ // Time to dust off the old binary search robes and wizard hat.
+ var left = 0, right = childNodes.length;
+ while (left < right) {
+ var middle = (left + right) >> 1;
+ var child = childNodes[middle];
+
+ if (comparePos(child.loc.start, comment.loc.start) <= 0 &&
+ comparePos(comment.loc.end, child.loc.end) <= 0) {
+ // The comment is completely contained by this child node.
+ decorateComment(comment.enclosingNode = child, comment);
+ return; // Abandon the binary search at this level.
+ }
+
+ if (comparePos(child.loc.end, comment.loc.start) <= 0) {
+ // This child node falls completely before the comment.
+ // Because we will never consider this node or any nodes
+ // before it again, this node must be the closest preceding
+ // node we have encountered so far.
+ var precedingNode = child;
+ left = middle + 1;
+ continue;
+ }
+
+ if (comparePos(comment.loc.end, child.loc.start) <= 0) {
+ // This child node falls completely after the comment.
+ // Because we will never consider this node or any nodes after
+ // it again, this node must be the closest following node we
+ // have encountered so far.
+ var followingNode = child;
+ right = middle;
+ continue;
+ }
+
+ throw new Error("Comment location overlaps with node location");
+ }
+
+ if (precedingNode) {
+ comment.precedingNode = precedingNode;
+ }
+
+ if (followingNode) {
+ comment.followingNode = followingNode;
+ }
+}
+
+exports.attach = function(comments, ast, lines) {
+ if (!isArray.check(comments)) {
+ return;
+ }
+
+ var tiesToBreak = [];
+
+ comments.forEach(function(comment) {
+ comment.loc.lines = lines;
+ decorateComment(ast, comment);
+
+ var pn = comment.precedingNode;
+ var en = comment.enclosingNode;
+ var fn = comment.followingNode;
+
+ if (pn && fn) {
+ var tieCount = tiesToBreak.length;
+ if (tieCount > 0) {
+ var lastTie = tiesToBreak[tieCount - 1];
+
+ assert.strictEqual(
+ lastTie.precedingNode === comment.precedingNode,
+ lastTie.followingNode === comment.followingNode
+ );
+
+ if (lastTie.followingNode !== comment.followingNode) {
+ breakTies(tiesToBreak, lines);
+ }
+ }
+
+ tiesToBreak.push(comment);
+
+ } else if (pn) {
+ // No contest: we have a trailing comment.
+ breakTies(tiesToBreak, lines);
+ addTrailingComment(pn, comment);
+
+ } else if (fn) {
+ // No contest: we have a leading comment.
+ breakTies(tiesToBreak, lines);
+ addLeadingComment(fn, comment);
+
+ } else if (en) {
+ // The enclosing node has no child nodes at all, so what we
+ // have here is a dangling comment, e.g. [/* crickets */].
+ breakTies(tiesToBreak, lines);
+ addDanglingComment(en, comment);
+
+ } else {
+ throw new Error("AST contains no nodes at all?");
+ }
+ });
+
+ breakTies(tiesToBreak, lines);
+
+ comments.forEach(function(comment) {
+ // These node references were useful for breaking ties, but we
+ // don't need them anymore, and they create cycles in the AST that
+ // may lead to infinite recursion if we don't delete them here.
+ delete comment.precedingNode;
+ delete comment.enclosingNode;
+ delete comment.followingNode;
+ });
+};
+
+function breakTies(tiesToBreak, lines) {
+ var tieCount = tiesToBreak.length;
+ if (tieCount === 0) {
+ return;
+ }
+
+ var pn = tiesToBreak[0].precedingNode;
+ var fn = tiesToBreak[0].followingNode;
+ var gapEndPos = fn.loc.start;
+
+ // Iterate backwards through tiesToBreak, examining the gaps
+ // between the tied comments. In order to qualify as leading, a
+ // comment must be separated from fn by an unbroken series of
+ // whitespace-only gaps (or other comments).
+ for (var indexOfFirstLeadingComment = tieCount;
+ indexOfFirstLeadingComment > 0;
+ --indexOfFirstLeadingComment) {
+ var comment = tiesToBreak[indexOfFirstLeadingComment - 1];
+ assert.strictEqual(comment.precedingNode, pn);
+ assert.strictEqual(comment.followingNode, fn);
+
+ var gap = lines.sliceString(comment.loc.end, gapEndPos);
+ if (/\S/.test(gap)) {
+ // The gap string contained something other than whitespace.
+ break;
+ }
+
+ gapEndPos = comment.loc.start;
+ }
+
+ while (indexOfFirstLeadingComment <= tieCount &&
+ (comment = tiesToBreak[indexOfFirstLeadingComment]) &&
+ // If the comment is a //-style comment and indented more
+ // deeply than the node itself, reconsider it as trailing.
+ comment.type === "Line" &&
+ comment.loc.start.column > fn.loc.start.column) {
+ ++indexOfFirstLeadingComment;
+ }
+
+ tiesToBreak.forEach(function(comment, i) {
+ if (i < indexOfFirstLeadingComment) {
+ addTrailingComment(pn, comment);
+ } else {
+ addLeadingComment(fn, comment);
+ }
+ });
+
+ tiesToBreak.length = 0;
+}
+
+function addCommentHelper(node, comment) {
+ var comments = node.comments || (node.comments = []);
+ comments.push(comment);
+}
+
+function addLeadingComment(node, comment) {
+ comment.leading = true;
+ comment.trailing = false;
+ addCommentHelper(node, comment);
+}
+
+function addDanglingComment(node, comment) {
+ comment.leading = false;
+ comment.trailing = false;
+ addCommentHelper(node, comment);
+}
+
+function addTrailingComment(node, comment) {
+ comment.leading = false;
+ comment.trailing = true;
+ addCommentHelper(node, comment);
+}
+
+function printLeadingComment(commentPath, print) {
+ var comment = commentPath.getValue();
+ n.Comment.assert(comment);
+
+ var loc = comment.loc;
+ var lines = loc && loc.lines;
+ var parts = [print(commentPath)];
+
+ if (comment.trailing) {
+ // When we print trailing comments as leading comments, we don't
+ // want to bring any trailing spaces along.
+ parts.push("\n");
+
+ } else if (lines instanceof Lines) {
+ var trailingSpace = lines.slice(
+ loc.end,
+ lines.skipSpaces(loc.end)
+ );
+
+ if (trailingSpace.length === 1) {
+ // If the trailing space contains no newlines, then we want to
+ // preserve it exactly as we found it.
+ parts.push(trailingSpace);
+ } else {
+ // If the trailing space contains newlines, then replace it
+ // with just that many newlines, with all other spaces removed.
+ parts.push(new Array(trailingSpace.length).join("\n"));
+ }
+
+ } else {
+ parts.push("\n");
+ }
+
+ return concat(parts);
+}
+
+function printTrailingComment(commentPath, print) {
+ var comment = commentPath.getValue(commentPath);
+ n.Comment.assert(comment);
+
+ var loc = comment.loc;
+ var lines = loc && loc.lines;
+ var parts = [];
+
+ if (lines instanceof Lines) {
+ var fromPos = lines.skipSpaces(loc.start, true) || lines.firstPos();
+ var leadingSpace = lines.slice(fromPos, loc.start);
+
+ if (leadingSpace.length === 1) {
+ // If the leading space contains no newlines, then we want to
+ // preserve it exactly as we found it.
+ parts.push(leadingSpace);
+ } else {
+ // If the leading space contains newlines, then replace it
+ // with just that many newlines, sans all other spaces.
+ parts.push(new Array(leadingSpace.length).join("\n"));
+ }
+ }
+
+ parts.push(print(commentPath));
+
+ return concat(parts);
+}
+
+exports.printComments = function(path, print) {
+ var value = path.getValue();
+ var innerLines = print(path);
+ var comments = n.Node.check(value) &&
+ types.getFieldValue(value, "comments");
+
+ if (!comments || comments.length === 0) {
+ return innerLines;
+ }
+
+ var leadingParts = [];
+ var trailingParts = [innerLines];
+
+ path.each(function(commentPath) {
+ var comment = commentPath.getValue();
+ var leading = types.getFieldValue(comment, "leading");
+ var trailing = types.getFieldValue(comment, "trailing");
+
+ if (leading || (trailing && comment.type !== "Block")) {
+ leadingParts.push(printLeadingComment(commentPath, print));
+ } else if (trailing) {
+ assert.strictEqual(comment.type, "Block");
+ trailingParts.push(printTrailingComment(commentPath, print));
+ }
+ }, "comments");
+
+ leadingParts.push.apply(leadingParts, trailingParts);
+ return concat(leadingParts);
+};
+
+},{"1":1,"560":560,"563":563,"569":569,"570":570}],562:[function(_dereq_,module,exports){
+var assert = _dereq_(1);
+var types = _dereq_(569);
+var n = types.namedTypes;
+var Node = n.Node;
+var isArray = types.builtInTypes.array;
+var isNumber = types.builtInTypes.number;
+
+function FastPath(value) {
+ assert.ok(this instanceof FastPath);
+ this.stack = [value];
+}
+
+var FPp = FastPath.prototype;
+module.exports = FastPath;
+
+// Static convenience function for coercing a value to a FastPath.
+FastPath.from = function(obj) {
+ if (obj instanceof FastPath) {
+ // Return a defensive copy of any existing FastPath instances.
+ return obj.copy();
+ }
+
+ if (obj instanceof types.NodePath) {
+ // For backwards compatibility, unroll NodePath instances into
+ // lightweight FastPath [..., name, value] stacks.
+ var copy = Object.create(FastPath.prototype);
+ var stack = [obj.value];
+ for (var pp; (pp = obj.parentPath); obj = pp)
+ stack.push(obj.name, pp.value);
+ copy.stack = stack.reverse();
+ return copy;
+ }
+
+ // Otherwise use obj as the value of the new FastPath instance.
+ return new FastPath(obj);
+};
+
+FPp.copy = function copy() {
+ var copy = Object.create(FastPath.prototype);
+ copy.stack = this.stack.slice(0);
+ return copy;
+};
+
+// The name of the current property is always the penultimate element of
+// this.stack, and always a String.
+FPp.getName = function getName() {
+ var s = this.stack;
+ var len = s.length;
+ if (len > 1) {
+ return s[len - 2];
+ }
+ // Since the name is always a string, null is a safe sentinel value to
+ // return if we do not know the name of the (root) value.
+ return null;
+};
+
+// The value of the current property is always the final element of
+// this.stack.
+FPp.getValue = function getValue() {
+ var s = this.stack;
+ return s[s.length - 1];
+};
+
+function getNodeHelper(path, count) {
+ var s = path.stack;
+
+ for (var i = s.length - 1; i >= 0; i -= 2) {
+ var value = s[i];
+ if (n.Node.check(value) && --count < 0) {
+ return value;
+ }
+ }
+
+ return null;
+}
+
+FPp.getNode = function getNode(count) {
+ return getNodeHelper(this, ~~count);
+};
+
+FPp.getParentNode = function getParentNode(count) {
+ return getNodeHelper(this, ~~count + 1);
+};
+
+// The length of the stack can be either even or odd, depending on whether
+// or not we have a name for the root value. The difference between the
+// index of the root value and the index of the final value is always
+// even, though, which allows us to return the root value in constant time
+// (i.e. without iterating backwards through the stack).
+FPp.getRootValue = function getRootValue() {
+ var s = this.stack;
+ if (s.length % 2 === 0) {
+ return s[1];
+ }
+ return s[0];
+};
+
+// Temporarily push properties named by string arguments given after the
+// callback function onto this.stack, then call the callback with a
+// reference to this (modified) FastPath object. Note that the stack will
+// be restored to its original state after the callback is finished, so it
+// is probably a mistake to retain a reference to the path.
+FPp.call = function call(callback/*, name1, name2, ... */) {
+ var s = this.stack;
+ var origLen = s.length;
+ var value = s[origLen - 1];
+ var argc = arguments.length;
+ for (var i = 1; i < argc; ++i) {
+ var name = arguments[i];
+ value = value[name];
+ s.push(name, value);
+ }
+ var result = callback(this);
+ s.length = origLen;
+ return result;
+};
+
+// Similar to FastPath.prototype.call, except that the value obtained by
+// accessing this.getValue()[name1][name2]... should be array-like. The
+// callback will be called with a reference to this path object for each
+// element of the array.
+FPp.each = function each(callback/*, name1, name2, ... */) {
+ var s = this.stack;
+ var origLen = s.length;
+ var value = s[origLen - 1];
+ var argc = arguments.length;
+
+ for (var i = 1; i < argc; ++i) {
+ var name = arguments[i];
+ value = value[name];
+ s.push(name, value);
+ }
+
+ for (var i = 0; i < value.length; ++i) {
+ if (i in value) {
+ s.push(i, value[i]);
+ // If the callback needs to know the value of i, call
+ // path.getName(), assuming path is the parameter name.
+ callback(this);
+ s.length -= 2;
+ }
+ }
+
+ s.length = origLen;
+};
+
+// Similar to FastPath.prototype.each, except that the results of the
+// callback function invocations are stored in an array and returned at
+// the end of the iteration.
+FPp.map = function map(callback/*, name1, name2, ... */) {
+ var s = this.stack;
+ var origLen = s.length;
+ var value = s[origLen - 1];
+ var argc = arguments.length;
+
+ for (var i = 1; i < argc; ++i) {
+ var name = arguments[i];
+ value = value[name];
+ s.push(name, value);
+ }
+
+ var result = new Array(value.length);
+
+ for (var i = 0; i < value.length; ++i) {
+ if (i in value) {
+ s.push(i, value[i]);
+ result[i] = callback(this, i);
+ s.length -= 2;
+ }
+ }
+
+ s.length = origLen;
+
+ return result;
+};
+
+// Inspired by require("ast-types").NodePath.prototype.needsParens, but
+// more efficient because we're iterating backwards through a stack.
+FPp.needsParens = function(assumeExpressionContext) {
+ var parent = this.getParentNode();
+ if (!parent) {
+ return false;
+ }
+
+ var name = this.getName();
+ var node = this.getNode();
+
+ // If the value of this path is some child of a Node and not a Node
+ // itself, then it doesn't need parentheses. Only Node objects (in
+ // fact, only Expression nodes) need parentheses.
+ if (this.getValue() !== node) {
+ return false;
+ }
+
+ // Only expressions need parentheses.
+ if (!n.Expression.check(node)) {
+ return false;
+ }
+
+ // Identifiers never need parentheses.
+ if (node.type === "Identifier") {
+ return false;
+ }
+
+ if (parent.type === "ParenthesizedExpression") {
+ return false;
+ }
+
+ switch (node.type) {
+ case "UnaryExpression":
+ case "SpreadElement":
+ case "SpreadProperty":
+ return parent.type === "MemberExpression"
+ && name === "object"
+ && parent.object === node;
+
+ case "BinaryExpression":
+ case "LogicalExpression":
+ switch (parent.type) {
+ case "CallExpression":
+ return name === "callee"
+ && parent.callee === node;
+
+ case "UnaryExpression":
+ case "SpreadElement":
+ case "SpreadProperty":
+ return true;
+
+ case "MemberExpression":
+ return name === "object"
+ && parent.object === node;
+
+ case "BinaryExpression":
+ case "LogicalExpression":
+ var po = parent.operator;
+ var pp = PRECEDENCE[po];
+ var no = node.operator;
+ var np = PRECEDENCE[no];
+
+ if (pp > np) {
+ return true;
+ }
+
+ if (pp === np && name === "right") {
+ assert.strictEqual(parent.right, node);
+ return true;
+ }
+
+ default:
+ return false;
+ }
+
+ case "SequenceExpression":
+ switch (parent.type) {
+ case "ForStatement":
+ // Although parentheses wouldn't hurt around sequence
+ // expressions in the head of for loops, traditional style
+ // dictates that e.g. i++, j++ should not be wrapped with
+ // parentheses.
+ return false;
+
+ case "ExpressionStatement":
+ return name !== "expression";
+
+ default:
+ // Otherwise err on the side of overparenthesization, adding
+ // explicit exceptions above if this proves overzealous.
+ return true;
+ }
+
+ case "YieldExpression":
+ switch (parent.type) {
+ case "BinaryExpression":
+ case "LogicalExpression":
+ case "UnaryExpression":
+ case "SpreadElement":
+ case "SpreadProperty":
+ case "CallExpression":
+ case "MemberExpression":
+ case "NewExpression":
+ case "ConditionalExpression":
+ case "YieldExpression":
+ return true;
+
+ default:
+ return false;
+ }
+
+ case "Literal":
+ return parent.type === "MemberExpression"
+ && isNumber.check(node.value)
+ && name === "object"
+ && parent.object === node;
+
+ case "AssignmentExpression":
+ case "ConditionalExpression":
+ switch (parent.type) {
+ case "UnaryExpression":
+ case "SpreadElement":
+ case "SpreadProperty":
+ case "BinaryExpression":
+ case "LogicalExpression":
+ return true;
+
+ case "CallExpression":
+ return name === "callee"
+ && parent.callee === node;
+
+ case "ConditionalExpression":
+ return name === "test"
+ && parent.test === node;
+
+ case "MemberExpression":
+ return name === "object"
+ && parent.object === node;
+
+ default:
+ return false;
+ }
+
+ case "ArrowFunctionExpression":
+ return isBinary(parent);
+
+ case "ObjectExpression":
+ if (parent.type === "ArrowFunctionExpression" &&
+ name === "body") {
+ return true;
+ }
+
+ default:
+ if (parent.type === "NewExpression" &&
+ name === "callee" &&
+ parent.callee === node) {
+ return containsCallExpression(node);
+ }
+ }
+
+ if (assumeExpressionContext !== true &&
+ !this.canBeFirstInStatement() &&
+ this.firstInStatement())
+ return true;
+
+ return false;
+};
+
+function isBinary(node) {
+ return n.BinaryExpression.check(node)
+ || n.LogicalExpression.check(node);
+}
+
+function isUnaryLike(node) {
+ return n.UnaryExpression.check(node)
+ // I considered making SpreadElement and SpreadProperty subtypes
+ // of UnaryExpression, but they're not really Expression nodes.
+ || (n.SpreadElement && n.SpreadElement.check(node))
+ || (n.SpreadProperty && n.SpreadProperty.check(node));
+}
+
+var PRECEDENCE = {};
+[["||"],
+ ["&&"],
+ ["|"],
+ ["^"],
+ ["&"],
+ ["==", "===", "!=", "!=="],
+ ["<", ">", "<=", ">=", "in", "instanceof"],
+ [">>", "<<", ">>>"],
+ ["+", "-"],
+ ["*", "/", "%"]
+].forEach(function(tier, i) {
+ tier.forEach(function(op) {
+ PRECEDENCE[op] = i;
+ });
+});
+
+function containsCallExpression(node) {
+ if (n.CallExpression.check(node)) {
+ return true;
+ }
+
+ if (isArray.check(node)) {
+ return node.some(containsCallExpression);
+ }
+
+ if (n.Node.check(node)) {
+ return types.someField(node, function(name, child) {
+ return containsCallExpression(child);
+ });
+ }
+
+ return false;
+}
+
+FPp.canBeFirstInStatement = function() {
+ var node = this.getNode();
+ return !n.FunctionExpression.check(node)
+ && !n.ObjectExpression.check(node);
+};
+
+FPp.firstInStatement = function() {
+ var s = this.stack;
+ var parentName, parent;
+ var childName, child;
+
+ for (var i = s.length - 1; i >= 0; i -= 2) {
+ if (n.Node.check(s[i])) {
+ childName = parentName;
+ child = parent;
+ parentName = s[i - 1];
+ parent = s[i];
+ }
+
+ if (!parent || !child) {
+ continue;
+ }
+
+ if (n.BlockStatement.check(parent) &&
+ parentName === "body" &&
+ childName === 0) {
+ assert.strictEqual(parent.body[0], child);
+ return true;
+ }
+
+ if (n.ExpressionStatement.check(parent) &&
+ childName === "expression") {
+ assert.strictEqual(parent.expression, child);
+ return true;
+ }
+
+ if (n.SequenceExpression.check(parent) &&
+ parentName === "expressions" &&
+ childName === 0) {
+ assert.strictEqual(parent.expressions[0], child);
+ continue;
+ }
+
+ if (n.CallExpression.check(parent) &&
+ childName === "callee") {
+ assert.strictEqual(parent.callee, child);
+ continue;
+ }
+
+ if (n.MemberExpression.check(parent) &&
+ childName === "object") {
+ assert.strictEqual(parent.object, child);
+ continue;
+ }
+
+ if (n.ConditionalExpression.check(parent) &&
+ childName === "test") {
+ assert.strictEqual(parent.test, child);
+ continue;
+ }
+
+ if (isBinary(parent) &&
+ childName === "left") {
+ assert.strictEqual(parent.left, child);
+ continue;
+ }
+
+ if (n.UnaryExpression.check(parent) &&
+ !parent.prefix &&
+ childName === "argument") {
+ assert.strictEqual(parent.argument, child);
+ continue;
+ }
+
+ return false;
+ }
+
+ return true;
+};
+
+},{"1":1,"569":569}],563:[function(_dereq_,module,exports){
+var assert = _dereq_(1);
+var sourceMap = _dereq_(601);
+var normalizeOptions = _dereq_(565).normalize;
+var secretKey = _dereq_(560).makeUniqueKey();
+var types = _dereq_(569);
+var isString = types.builtInTypes.string;
+var comparePos = _dereq_(570).comparePos;
+var Mapping = _dereq_(564);
+
+// Goals:
+// 1. Minimize new string creation.
+// 2. Keep (de)identation O(lines) time.
+// 3. Permit negative indentations.
+// 4. Enforce immutability.
+// 5. No newline characters.
+
+function getSecret(lines) {
+ return lines[secretKey];
+}
+
+function Lines(infos, sourceFileName) {
+ assert.ok(this instanceof Lines);
+ assert.ok(infos.length > 0);
+
+ if (sourceFileName) {
+ isString.assert(sourceFileName);
+ } else {
+ sourceFileName = null;
+ }
+
+ Object.defineProperty(this, secretKey, {
+ value: {
+ infos: infos,
+ mappings: [],
+ name: sourceFileName,
+ cachedSourceMap: null
+ }
+ });
+
+ if (sourceFileName) {
+ getSecret(this).mappings.push(new Mapping(this, {
+ start: this.firstPos(),
+ end: this.lastPos()
+ }));
+ }
+}
+
+// Exposed for instanceof checks. The fromString function should be used
+// to create new Lines objects.
+exports.Lines = Lines;
+var Lp = Lines.prototype;
+
+// These properties used to be assigned to each new object in the Lines
+// constructor, but we can more efficiently stuff them into the secret and
+// let these lazy accessors compute their values on-the-fly.
+Object.defineProperties(Lp, {
+ length: {
+ get: function() {
+ return getSecret(this).infos.length;
+ }
+ },
+
+ name: {
+ get: function() {
+ return getSecret(this).name;
+ }
+ }
+});
+
+function copyLineInfo(info) {
+ return {
+ line: info.line,
+ indent: info.indent,
+ sliceStart: info.sliceStart,
+ sliceEnd: info.sliceEnd
+ };
+}
+
+var fromStringCache = {};
+var hasOwn = fromStringCache.hasOwnProperty;
+var maxCacheKeyLen = 10;
+
+function countSpaces(spaces, tabWidth) {
+ var count = 0;
+ var len = spaces.length;
+
+ for (var i = 0; i < len; ++i) {
+ switch (spaces.charCodeAt(i)) {
+ case 9: // '\t'
+ assert.strictEqual(typeof tabWidth, "number");
+ assert.ok(tabWidth > 0);
+
+ var next = Math.ceil(count / tabWidth) * tabWidth;
+ if (next === count) {
+ count += tabWidth;
+ } else {
+ count = next;
+ }
+
+ break;
+
+ case 11: // '\v'
+ case 12: // '\f'
+ case 13: // '\r'
+ case 0xfeff: // zero-width non-breaking space
+ // These characters contribute nothing to indentation.
+ break;
+
+ case 32: // ' '
+ default: // Treat all other whitespace like ' '.
+ count += 1;
+ break;
+ }
+ }
+
+ return count;
+}
+exports.countSpaces = countSpaces;
+
+var leadingSpaceExp = /^\s*/;
+
+// As specified here: http://www.ecma-international.org/ecma-262/6.0/#sec-line-terminators
+var lineTerminatorSeqExp =
+ /\u000D\u000A|\u000D(?!\u000A)|\u000A|\u2028|\u2029/;
+
+/**
+ * @param {Object} options - Options object that configures printing.
+ */
+function fromString(string, options) {
+ if (string instanceof Lines)
+ return string;
+
+ string += "";
+
+ var tabWidth = options && options.tabWidth;
+ var tabless = string.indexOf("\t") < 0;
+ var cacheable = !options && tabless && (string.length <= maxCacheKeyLen);
+
+ assert.ok(tabWidth || tabless, "No tab width specified but encountered tabs in string\n" + string);
+
+ if (cacheable && hasOwn.call(fromStringCache, string))
+ return fromStringCache[string];
+
+ var lines = new Lines(string.split(lineTerminatorSeqExp).map(function(line) {
+ var spaces = leadingSpaceExp.exec(line)[0];
+ return {
+ line: line,
+ indent: countSpaces(spaces, tabWidth),
+ sliceStart: spaces.length,
+ sliceEnd: line.length
+ };
+ }), normalizeOptions(options).sourceFileName);
+
+ if (cacheable)
+ fromStringCache[string] = lines;
+
+ return lines;
+}
+exports.fromString = fromString;
+
+function isOnlyWhitespace(string) {
+ return !/\S/.test(string);
+}
+
+Lp.toString = function(options) {
+ return this.sliceString(this.firstPos(), this.lastPos(), options);
+};
+
+Lp.getSourceMap = function(sourceMapName, sourceRoot) {
+ if (!sourceMapName) {
+ // Although we could make up a name or generate an anonymous
+ // source map, instead we assume that any consumer who does not
+ // provide a name does not actually want a source map.
+ return null;
+ }
+
+ var targetLines = this;
+
+ function updateJSON(json) {
+ json = json || {};
+
+ isString.assert(sourceMapName);
+ json.file = sourceMapName;
+
+ if (sourceRoot) {
+ isString.assert(sourceRoot);
+ json.sourceRoot = sourceRoot;
+ }
+
+ return json;
+ }
+
+ var secret = getSecret(targetLines);
+ if (secret.cachedSourceMap) {
+ // Since Lines objects are immutable, we can reuse any source map
+ // that was previously generated. Nevertheless, we return a new
+ // JSON object here to protect the cached source map from outside
+ // modification.
+ return updateJSON(secret.cachedSourceMap.toJSON());
+ }
+
+ var smg = new sourceMap.SourceMapGenerator(updateJSON());
+ var sourcesToContents = {};
+
+ secret.mappings.forEach(function(mapping) {
+ var sourceCursor = mapping.sourceLines.skipSpaces(
+ mapping.sourceLoc.start
+ ) || mapping.sourceLines.lastPos();
+
+ var targetCursor = targetLines.skipSpaces(
+ mapping.targetLoc.start
+ ) || targetLines.lastPos();
+
+ while (comparePos(sourceCursor, mapping.sourceLoc.end) < 0 &&
+ comparePos(targetCursor, mapping.targetLoc.end) < 0) {
+
+ var sourceChar = mapping.sourceLines.charAt(sourceCursor);
+ var targetChar = targetLines.charAt(targetCursor);
+ assert.strictEqual(sourceChar, targetChar);
+
+ var sourceName = mapping.sourceLines.name;
+
+ // Add mappings one character at a time for maximum resolution.
+ smg.addMapping({
+ source: sourceName,
+ original: { line: sourceCursor.line,
+ column: sourceCursor.column },
+ generated: { line: targetCursor.line,
+ column: targetCursor.column }
+ });
+
+ if (!hasOwn.call(sourcesToContents, sourceName)) {
+ var sourceContent = mapping.sourceLines.toString();
+ smg.setSourceContent(sourceName, sourceContent);
+ sourcesToContents[sourceName] = sourceContent;
+ }
+
+ targetLines.nextPos(targetCursor, true);
+ mapping.sourceLines.nextPos(sourceCursor, true);
+ }
+ });
+
+ secret.cachedSourceMap = smg;
+
+ return smg.toJSON();
+};
+
+Lp.bootstrapCharAt = function(pos) {
+ assert.strictEqual(typeof pos, "object");
+ assert.strictEqual(typeof pos.line, "number");
+ assert.strictEqual(typeof pos.column, "number");
+
+ var line = pos.line,
+ column = pos.column,
+ strings = this.toString().split(lineTerminatorSeqExp),
+ string = strings[line - 1];
+
+ if (typeof string === "undefined")
+ return "";
+
+ if (column === string.length &&
+ line < strings.length)
+ return "\n";
+
+ if (column >= string.length)
+ return "";
+
+ return string.charAt(column);
+};
+
+Lp.charAt = function(pos) {
+ assert.strictEqual(typeof pos, "object");
+ assert.strictEqual(typeof pos.line, "number");
+ assert.strictEqual(typeof pos.column, "number");
+
+ var line = pos.line,
+ column = pos.column,
+ secret = getSecret(this),
+ infos = secret.infos,
+ info = infos[line - 1],
+ c = column;
+
+ if (typeof info === "undefined" || c < 0)
+ return "";
+
+ var indent = this.getIndentAt(line);
+ if (c < indent)
+ return " ";
+
+ c += info.sliceStart - indent;
+
+ if (c === info.sliceEnd &&
+ line < this.length)
+ return "\n";
+
+ if (c >= info.sliceEnd)
+ return "";
+
+ return info.line.charAt(c);
+};
+
+Lp.stripMargin = function(width, skipFirstLine) {
+ if (width === 0)
+ return this;
+
+ assert.ok(width > 0, "negative margin: " + width);
+
+ if (skipFirstLine && this.length === 1)
+ return this;
+
+ var secret = getSecret(this);
+
+ var lines = new Lines(secret.infos.map(function(info, i) {
+ if (info.line && (i > 0 || !skipFirstLine)) {
+ info = copyLineInfo(info);
+ info.indent = Math.max(0, info.indent - width);
+ }
+ return info;
+ }));
+
+ if (secret.mappings.length > 0) {
+ var newMappings = getSecret(lines).mappings;
+ assert.strictEqual(newMappings.length, 0);
+ secret.mappings.forEach(function(mapping) {
+ newMappings.push(mapping.indent(width, skipFirstLine, true));
+ });
+ }
+
+ return lines;
+};
+
+Lp.indent = function(by) {
+ if (by === 0)
+ return this;
+
+ var secret = getSecret(this);
+
+ var lines = new Lines(secret.infos.map(function(info) {
+ if (info.line) {
+ info = copyLineInfo(info);
+ info.indent += by;
+ }
+ return info
+ }));
+
+ if (secret.mappings.length > 0) {
+ var newMappings = getSecret(lines).mappings;
+ assert.strictEqual(newMappings.length, 0);
+ secret.mappings.forEach(function(mapping) {
+ newMappings.push(mapping.indent(by));
+ });
+ }
+
+ return lines;
+};
+
+Lp.indentTail = function(by) {
+ if (by === 0)
+ return this;
+
+ if (this.length < 2)
+ return this;
+
+ var secret = getSecret(this);
+
+ var lines = new Lines(secret.infos.map(function(info, i) {
+ if (i > 0 && info.line) {
+ info = copyLineInfo(info);
+ info.indent += by;
+ }
+
+ return info;
+ }));
+
+ if (secret.mappings.length > 0) {
+ var newMappings = getSecret(lines).mappings;
+ assert.strictEqual(newMappings.length, 0);
+ secret.mappings.forEach(function(mapping) {
+ newMappings.push(mapping.indent(by, true));
+ });
+ }
+
+ return lines;
+};
+
+Lp.getIndentAt = function(line) {
+ assert.ok(line >= 1, "no line " + line + " (line numbers start from 1)");
+ var secret = getSecret(this),
+ info = secret.infos[line - 1];
+ return Math.max(info.indent, 0);
+};
+
+Lp.guessTabWidth = function() {
+ var secret = getSecret(this);
+ if (hasOwn.call(secret, "cachedTabWidth")) {
+ return secret.cachedTabWidth;
+ }
+
+ var counts = []; // Sparse array.
+ var lastIndent = 0;
+
+ for (var line = 1, last = this.length; line <= last; ++line) {
+ var info = secret.infos[line - 1];
+ var sliced = info.line.slice(info.sliceStart, info.sliceEnd);
+
+ // Whitespace-only lines don't tell us much about the likely tab
+ // width of this code.
+ if (isOnlyWhitespace(sliced)) {
+ continue;
+ }
+
+ var diff = Math.abs(info.indent - lastIndent);
+ counts[diff] = ~~counts[diff] + 1;
+ lastIndent = info.indent;
+ }
+
+ var maxCount = -1;
+ var result = 2;
+
+ for (var tabWidth = 1;
+ tabWidth < counts.length;
+ tabWidth += 1) {
+ if (hasOwn.call(counts, tabWidth) &&
+ counts[tabWidth] > maxCount) {
+ maxCount = counts[tabWidth];
+ result = tabWidth;
+ }
+ }
+
+ return secret.cachedTabWidth = result;
+};
+
+Lp.isOnlyWhitespace = function() {
+ return isOnlyWhitespace(this.toString());
+};
+
+Lp.isPrecededOnlyByWhitespace = function(pos) {
+ var secret = getSecret(this);
+ var info = secret.infos[pos.line - 1];
+ var indent = Math.max(info.indent, 0);
+
+ var diff = pos.column - indent;
+ if (diff <= 0) {
+ // If pos.column does not exceed the indentation amount, then
+ // there must be only whitespace before it.
+ return true;
+ }
+
+ var start = info.sliceStart;
+ var end = Math.min(start + diff, info.sliceEnd);
+ var prefix = info.line.slice(start, end);
+
+ return isOnlyWhitespace(prefix);
+};
+
+Lp.getLineLength = function(line) {
+ var secret = getSecret(this),
+ info = secret.infos[line - 1];
+ return this.getIndentAt(line) + info.sliceEnd - info.sliceStart;
+};
+
+Lp.nextPos = function(pos, skipSpaces) {
+ var l = Math.max(pos.line, 0),
+ c = Math.max(pos.column, 0);
+
+ if (c < this.getLineLength(l)) {
+ pos.column += 1;
+
+ return skipSpaces
+ ? !!this.skipSpaces(pos, false, true)
+ : true;
+ }
+
+ if (l < this.length) {
+ pos.line += 1;
+ pos.column = 0;
+
+ return skipSpaces
+ ? !!this.skipSpaces(pos, false, true)
+ : true;
+ }
+
+ return false;
+};
+
+Lp.prevPos = function(pos, skipSpaces) {
+ var l = pos.line,
+ c = pos.column;
+
+ if (c < 1) {
+ l -= 1;
+
+ if (l < 1)
+ return false;
+
+ c = this.getLineLength(l);
+
+ } else {
+ c = Math.min(c - 1, this.getLineLength(l));
+ }
+
+ pos.line = l;
+ pos.column = c;
+
+ return skipSpaces
+ ? !!this.skipSpaces(pos, true, true)
+ : true;
+};
+
+Lp.firstPos = function() {
+ // Trivial, but provided for completeness.
+ return { line: 1, column: 0 };
+};
+
+Lp.lastPos = function() {
+ return {
+ line: this.length,
+ column: this.getLineLength(this.length)
+ };
+};
+
+Lp.skipSpaces = function(pos, backward, modifyInPlace) {
+ if (pos) {
+ pos = modifyInPlace ? pos : {
+ line: pos.line,
+ column: pos.column
+ };
+ } else if (backward) {
+ pos = this.lastPos();
+ } else {
+ pos = this.firstPos();
+ }
+
+ if (backward) {
+ while (this.prevPos(pos)) {
+ if (!isOnlyWhitespace(this.charAt(pos)) &&
+ this.nextPos(pos)) {
+ return pos;
+ }
+ }
+
+ return null;
+
+ } else {
+ while (isOnlyWhitespace(this.charAt(pos))) {
+ if (!this.nextPos(pos)) {
+ return null;
+ }
+ }
+
+ return pos;
+ }
+};
+
+Lp.trimLeft = function() {
+ var pos = this.skipSpaces(this.firstPos(), false, true);
+ return pos ? this.slice(pos) : emptyLines;
+};
+
+Lp.trimRight = function() {
+ var pos = this.skipSpaces(this.lastPos(), true, true);
+ return pos ? this.slice(this.firstPos(), pos) : emptyLines;
+};
+
+Lp.trim = function() {
+ var start = this.skipSpaces(this.firstPos(), false, true);
+ if (start === null)
+ return emptyLines;
+
+ var end = this.skipSpaces(this.lastPos(), true, true);
+ assert.notStrictEqual(end, null);
+
+ return this.slice(start, end);
+};
+
+Lp.eachPos = function(callback, startPos, skipSpaces) {
+ var pos = this.firstPos();
+
+ if (startPos) {
+ pos.line = startPos.line,
+ pos.column = startPos.column
+ }
+
+ if (skipSpaces && !this.skipSpaces(pos, false, true)) {
+ return; // Encountered nothing but spaces.
+ }
+
+ do callback.call(this, pos);
+ while (this.nextPos(pos, skipSpaces));
+};
+
+Lp.bootstrapSlice = function(start, end) {
+ var strings = this.toString().split(
+ lineTerminatorSeqExp
+ ).slice(
+ start.line - 1,
+ end.line
+ );
+
+ strings.push(strings.pop().slice(0, end.column));
+ strings[0] = strings[0].slice(start.column);
+
+ return fromString(strings.join("\n"));
+};
+
+Lp.slice = function(start, end) {
+ if (!end) {
+ if (!start) {
+ // The client seems to want a copy of this Lines object, but
+ // Lines objects are immutable, so it's perfectly adequate to
+ // return the same object.
+ return this;
+ }
+
+ // Slice to the end if no end position was provided.
+ end = this.lastPos();
+ }
+
+ var secret = getSecret(this);
+ var sliced = secret.infos.slice(start.line - 1, end.line);
+
+ if (start.line === end.line) {
+ sliced[0] = sliceInfo(sliced[0], start.column, end.column);
+ } else {
+ assert.ok(start.line < end.line);
+ sliced[0] = sliceInfo(sliced[0], start.column);
+ sliced.push(sliceInfo(sliced.pop(), 0, end.column));
+ }
+
+ var lines = new Lines(sliced);
+
+ if (secret.mappings.length > 0) {
+ var newMappings = getSecret(lines).mappings;
+ assert.strictEqual(newMappings.length, 0);
+ secret.mappings.forEach(function(mapping) {
+ var sliced = mapping.slice(this, start, end);
+ if (sliced) {
+ newMappings.push(sliced);
+ }
+ }, this);
+ }
+
+ return lines;
+};
+
+function sliceInfo(info, startCol, endCol) {
+ var sliceStart = info.sliceStart;
+ var sliceEnd = info.sliceEnd;
+ var indent = Math.max(info.indent, 0);
+ var lineLength = indent + sliceEnd - sliceStart;
+
+ if (typeof endCol === "undefined") {
+ endCol = lineLength;
+ }
+
+ startCol = Math.max(startCol, 0);
+ endCol = Math.min(endCol, lineLength);
+ endCol = Math.max(endCol, startCol);
+
+ if (endCol < indent) {
+ indent = endCol;
+ sliceEnd = sliceStart;
+ } else {
+ sliceEnd -= lineLength - endCol;
+ }
+
+ lineLength = endCol;
+ lineLength -= startCol;
+
+ if (startCol < indent) {
+ indent -= startCol;
+ } else {
+ startCol -= indent;
+ indent = 0;
+ sliceStart += startCol;
+ }
+
+ assert.ok(indent >= 0);
+ assert.ok(sliceStart <= sliceEnd);
+ assert.strictEqual(lineLength, indent + sliceEnd - sliceStart);
+
+ if (info.indent === indent &&
+ info.sliceStart === sliceStart &&
+ info.sliceEnd === sliceEnd) {
+ return info;
+ }
+
+ return {
+ line: info.line,
+ indent: indent,
+ sliceStart: sliceStart,
+ sliceEnd: sliceEnd
+ };
+}
+
+Lp.bootstrapSliceString = function(start, end, options) {
+ return this.slice(start, end).toString(options);
+};
+
+Lp.sliceString = function(start, end, options) {
+ if (!end) {
+ if (!start) {
+ // The client seems to want a copy of this Lines object, but
+ // Lines objects are immutable, so it's perfectly adequate to
+ // return the same object.
+ return this;
+ }
+
+ // Slice to the end if no end position was provided.
+ end = this.lastPos();
+ }
+
+ options = normalizeOptions(options);
+
+ var infos = getSecret(this).infos;
+ var parts = [];
+ var tabWidth = options.tabWidth;
+
+ for (var line = start.line; line <= end.line; ++line) {
+ var info = infos[line - 1];
+
+ if (line === start.line) {
+ if (line === end.line) {
+ info = sliceInfo(info, start.column, end.column);
+ } else {
+ info = sliceInfo(info, start.column);
+ }
+ } else if (line === end.line) {
+ info = sliceInfo(info, 0, end.column);
+ }
+
+ var indent = Math.max(info.indent, 0);
+
+ var before = info.line.slice(0, info.sliceStart);
+ if (options.reuseWhitespace &&
+ isOnlyWhitespace(before) &&
+ countSpaces(before, options.tabWidth) === indent) {
+ // Reuse original spaces if the indentation is correct.
+ parts.push(info.line.slice(0, info.sliceEnd));
+ continue;
+ }
+
+ var tabs = 0;
+ var spaces = indent;
+
+ if (options.useTabs) {
+ tabs = Math.floor(indent / tabWidth);
+ spaces -= tabs * tabWidth;
+ }
+
+ var result = "";
+
+ if (tabs > 0) {
+ result += new Array(tabs + 1).join("\t");
+ }
+
+ if (spaces > 0) {
+ result += new Array(spaces + 1).join(" ");
+ }
+
+ result += info.line.slice(info.sliceStart, info.sliceEnd);
+
+ parts.push(result);
+ }
+
+ return parts.join(options.lineTerminator);
+};
+
+Lp.isEmpty = function() {
+ return this.length < 2 && this.getLineLength(1) < 1;
+};
+
+Lp.join = function(elements) {
+ var separator = this;
+ var separatorSecret = getSecret(separator);
+ var infos = [];
+ var mappings = [];
+ var prevInfo;
+
+ function appendSecret(secret) {
+ if (secret === null)
+ return;
+
+ if (prevInfo) {
+ var info = secret.infos[0];
+ var indent = new Array(info.indent + 1).join(" ");
+ var prevLine = infos.length;
+ var prevColumn = Math.max(prevInfo.indent, 0) +
+ prevInfo.sliceEnd - prevInfo.sliceStart;
+
+ prevInfo.line = prevInfo.line.slice(
+ 0, prevInfo.sliceEnd) + indent + info.line.slice(
+ info.sliceStart, info.sliceEnd);
+
+ prevInfo.sliceEnd = prevInfo.line.length;
+
+ if (secret.mappings.length > 0) {
+ secret.mappings.forEach(function(mapping) {
+ mappings.push(mapping.add(prevLine, prevColumn));
+ });
+ }
+
+ } else if (secret.mappings.length > 0) {
+ mappings.push.apply(mappings, secret.mappings);
+ }
+
+ secret.infos.forEach(function(info, i) {
+ if (!prevInfo || i > 0) {
+ prevInfo = copyLineInfo(info);
+ infos.push(prevInfo);
+ }
+ });
+ }
+
+ function appendWithSeparator(secret, i) {
+ if (i > 0)
+ appendSecret(separatorSecret);
+ appendSecret(secret);
+ }
+
+ elements.map(function(elem) {
+ var lines = fromString(elem);
+ if (lines.isEmpty())
+ return null;
+ return getSecret(lines);
+ }).forEach(separator.isEmpty()
+ ? appendSecret
+ : appendWithSeparator);
+
+ if (infos.length < 1)
+ return emptyLines;
+
+ var lines = new Lines(infos);
+
+ getSecret(lines).mappings = mappings;
+
+ return lines;
+};
+
+exports.concat = function(elements) {
+ return emptyLines.join(elements);
+};
+
+Lp.concat = function(other) {
+ var args = arguments,
+ list = [this];
+ list.push.apply(list, args);
+ assert.strictEqual(list.length, args.length + 1);
+ return emptyLines.join(list);
+};
+
+// The emptyLines object needs to be created all the way down here so that
+// Lines.prototype will be fully populated.
+var emptyLines = fromString("");
+
+},{"1":1,"560":560,"564":564,"565":565,"569":569,"570":570,"601":601}],564:[function(_dereq_,module,exports){
+var assert = _dereq_(1);
+var types = _dereq_(569);
+var isString = types.builtInTypes.string;
+var isNumber = types.builtInTypes.number;
+var SourceLocation = types.namedTypes.SourceLocation;
+var Position = types.namedTypes.Position;
+var linesModule = _dereq_(563);
+var comparePos = _dereq_(570).comparePos;
+
+function Mapping(sourceLines, sourceLoc, targetLoc) {
+ assert.ok(this instanceof Mapping);
+ assert.ok(sourceLines instanceof linesModule.Lines);
+ SourceLocation.assert(sourceLoc);
+
+ if (targetLoc) {
+ // In certain cases it's possible for targetLoc.{start,end}.column
+ // values to be negative, which technically makes them no longer
+ // valid SourceLocation nodes, so we need to be more forgiving.
+ assert.ok(
+ isNumber.check(targetLoc.start.line) &&
+ isNumber.check(targetLoc.start.column) &&
+ isNumber.check(targetLoc.end.line) &&
+ isNumber.check(targetLoc.end.column)
+ );
+ } else {
+ // Assume identity mapping if no targetLoc specified.
+ targetLoc = sourceLoc;
+ }
+
+ Object.defineProperties(this, {
+ sourceLines: { value: sourceLines },
+ sourceLoc: { value: sourceLoc },
+ targetLoc: { value: targetLoc }
+ });
+}
+
+var Mp = Mapping.prototype;
+module.exports = Mapping;
+
+Mp.slice = function(lines, start, end) {
+ assert.ok(lines instanceof linesModule.Lines);
+ Position.assert(start);
+
+ if (end) {
+ Position.assert(end);
+ } else {
+ end = lines.lastPos();
+ }
+
+ var sourceLines = this.sourceLines;
+ var sourceLoc = this.sourceLoc;
+ var targetLoc = this.targetLoc;
+
+ function skip(name) {
+ var sourceFromPos = sourceLoc[name];
+ var targetFromPos = targetLoc[name];
+ var targetToPos = start;
+
+ if (name === "end") {
+ targetToPos = end;
+ } else {
+ assert.strictEqual(name, "start");
+ }
+
+ return skipChars(
+ sourceLines, sourceFromPos,
+ lines, targetFromPos, targetToPos
+ );
+ }
+
+ if (comparePos(start, targetLoc.start) <= 0) {
+ if (comparePos(targetLoc.end, end) <= 0) {
+ targetLoc = {
+ start: subtractPos(targetLoc.start, start.line, start.column),
+ end: subtractPos(targetLoc.end, start.line, start.column)
+ };
+
+ // The sourceLoc can stay the same because the contents of the
+ // targetLoc have not changed.
+
+ } else if (comparePos(end, targetLoc.start) <= 0) {
+ return null;
+
+ } else {
+ sourceLoc = {
+ start: sourceLoc.start,
+ end: skip("end")
+ };
+
+ targetLoc = {
+ start: subtractPos(targetLoc.start, start.line, start.column),
+ end: subtractPos(end, start.line, start.column)
+ };
+ }
+
+ } else {
+ if (comparePos(targetLoc.end, start) <= 0) {
+ return null;
+ }
+
+ if (comparePos(targetLoc.end, end) <= 0) {
+ sourceLoc = {
+ start: skip("start"),
+ end: sourceLoc.end
+ };
+
+ targetLoc = {
+ // Same as subtractPos(start, start.line, start.column):
+ start: { line: 1, column: 0 },
+ end: subtractPos(targetLoc.end, start.line, start.column)
+ };
+
+ } else {
+ sourceLoc = {
+ start: skip("start"),
+ end: skip("end")
+ };
+
+ targetLoc = {
+ // Same as subtractPos(start, start.line, start.column):
+ start: { line: 1, column: 0 },
+ end: subtractPos(end, start.line, start.column)
+ };
+ }
+ }
+
+ return new Mapping(this.sourceLines, sourceLoc, targetLoc);
+};
+
+Mp.add = function(line, column) {
+ return new Mapping(this.sourceLines, this.sourceLoc, {
+ start: addPos(this.targetLoc.start, line, column),
+ end: addPos(this.targetLoc.end, line, column)
+ });
+};
+
+function addPos(toPos, line, column) {
+ return {
+ line: toPos.line + line - 1,
+ column: (toPos.line === 1)
+ ? toPos.column + column
+ : toPos.column
+ };
+}
+
+Mp.subtract = function(line, column) {
+ return new Mapping(this.sourceLines, this.sourceLoc, {
+ start: subtractPos(this.targetLoc.start, line, column),
+ end: subtractPos(this.targetLoc.end, line, column)
+ });
+};
+
+function subtractPos(fromPos, line, column) {
+ return {
+ line: fromPos.line - line + 1,
+ column: (fromPos.line === line)
+ ? fromPos.column - column
+ : fromPos.column
+ };
+}
+
+Mp.indent = function(by, skipFirstLine, noNegativeColumns) {
+ if (by === 0) {
+ return this;
+ }
+
+ var targetLoc = this.targetLoc;
+ var startLine = targetLoc.start.line;
+ var endLine = targetLoc.end.line;
+
+ if (skipFirstLine && startLine === 1 && endLine === 1) {
+ return this;
+ }
+
+ targetLoc = {
+ start: targetLoc.start,
+ end: targetLoc.end
+ };
+
+ if (!skipFirstLine || startLine > 1) {
+ var startColumn = targetLoc.start.column + by;
+ targetLoc.start = {
+ line: startLine,
+ column: noNegativeColumns
+ ? Math.max(0, startColumn)
+ : startColumn
+ };
+ }
+
+ if (!skipFirstLine || endLine > 1) {
+ var endColumn = targetLoc.end.column + by;
+ targetLoc.end = {
+ line: endLine,
+ column: noNegativeColumns
+ ? Math.max(0, endColumn)
+ : endColumn
+ };
+ }
+
+ return new Mapping(this.sourceLines, this.sourceLoc, targetLoc);
+};
+
+function skipChars(
+ sourceLines, sourceFromPos,
+ targetLines, targetFromPos, targetToPos
+) {
+ assert.ok(sourceLines instanceof linesModule.Lines);
+ assert.ok(targetLines instanceof linesModule.Lines);
+ Position.assert(sourceFromPos);
+ Position.assert(targetFromPos);
+ Position.assert(targetToPos);
+
+ var targetComparison = comparePos(targetFromPos, targetToPos);
+ if (targetComparison === 0) {
+ // Trivial case: no characters to skip.
+ return sourceFromPos;
+ }
+
+ if (targetComparison < 0) {
+ // Skipping forward.
+
+ var sourceCursor = sourceLines.skipSpaces(sourceFromPos);
+ var targetCursor = targetLines.skipSpaces(targetFromPos);
+
+ var lineDiff = targetToPos.line - targetCursor.line;
+ sourceCursor.line += lineDiff;
+ targetCursor.line += lineDiff;
+
+ if (lineDiff > 0) {
+ // If jumping to later lines, reset columns to the beginnings
+ // of those lines.
+ sourceCursor.column = 0;
+ targetCursor.column = 0;
+ } else {
+ assert.strictEqual(lineDiff, 0);
+ }
+
+ while (comparePos(targetCursor, targetToPos) < 0 &&
+ targetLines.nextPos(targetCursor, true)) {
+ assert.ok(sourceLines.nextPos(sourceCursor, true));
+ assert.strictEqual(
+ sourceLines.charAt(sourceCursor),
+ targetLines.charAt(targetCursor)
+ );
+ }
+
+ } else {
+ // Skipping backward.
+
+ var sourceCursor = sourceLines.skipSpaces(sourceFromPos, true);
+ var targetCursor = targetLines.skipSpaces(targetFromPos, true);
+
+ var lineDiff = targetToPos.line - targetCursor.line;
+ sourceCursor.line += lineDiff;
+ targetCursor.line += lineDiff;
+
+ if (lineDiff < 0) {
+ // If jumping to earlier lines, reset columns to the ends of
+ // those lines.
+ sourceCursor.column = sourceLines.getLineLength(sourceCursor.line);
+ targetCursor.column = targetLines.getLineLength(targetCursor.line);
+ } else {
+ assert.strictEqual(lineDiff, 0);
+ }
+
+ while (comparePos(targetToPos, targetCursor) < 0 &&
+ targetLines.prevPos(targetCursor, true)) {
+ assert.ok(sourceLines.prevPos(sourceCursor, true));
+ assert.strictEqual(
+ sourceLines.charAt(sourceCursor),
+ targetLines.charAt(targetCursor)
+ );
+ }
+ }
+
+ return sourceCursor;
+}
+
+},{"1":1,"563":563,"569":569,"570":570}],565:[function(_dereq_,module,exports){
+var defaults = {
+ // If you want to use a different branch of esprima, or any other
+ // module that supports a .parse function, pass that module object to
+ // recast.parse as options.esprima.
+ esprima: _dereq_(3),
+
+ // Number of spaces the pretty-printer should use per tab for
+ // indentation. If you do not pass this option explicitly, it will be
+ // (quite reliably!) inferred from the original code.
+ tabWidth: 4,
+
+ // If you really want the pretty-printer to use tabs instead of
+ // spaces, make this option true.
+ useTabs: false,
+
+ // The reprinting code leaves leading whitespace untouched unless it
+ // has to reindent a line, or you pass false for this option.
+ reuseWhitespace: true,
+
+ // Override this option to use a different line terminator, e.g. \r\n.
+ lineTerminator: _dereq_(8).EOL,
+
+ // Some of the pretty-printer code (such as that for printing function
+ // parameter lists) makes a valiant attempt to prevent really long
+ // lines. You can adjust the limit by changing this option; however,
+ // there is no guarantee that line length will fit inside this limit.
+ wrapColumn: 74, // Aspirational for now.
+
+ // Pass a string as options.sourceFileName to recast.parse to tell the
+ // reprinter to keep track of reused code so that it can construct a
+ // source map automatically.
+ sourceFileName: null,
+
+ // Pass a string as options.sourceMapName to recast.print, and
+ // (provided you passed options.sourceFileName earlier) the
+ // PrintResult of recast.print will have a .map property for the
+ // generated source map.
+ sourceMapName: null,
+
+ // If provided, this option will be passed along to the source map
+ // generator as a root directory for relative source file paths.
+ sourceRoot: null,
+
+ // If you provide a source map that was generated from a previous call
+ // to recast.print as options.inputSourceMap, the old source map will
+ // be composed with the new source map.
+ inputSourceMap: null,
+
+ // If you want esprima to generate .range information (recast only
+ // uses .loc internally), pass true for this option.
+ range: false,
+
+ // If you want esprima not to throw exceptions when it encounters
+ // non-fatal errors, keep this option true.
+ tolerant: true,
+
+ // If you want to override the quotes used in string literals, specify
+ // either "single", "double", or "auto" here ("auto" will select the one
+ // which results in the shorter literal)
+ // Otherwise, the input marks will be preserved
+ quote: null,
+
+ // If you want to print trailing commas in object literals,
+ // array expressions, functions calls and function definitions pass true
+ // for this option.
+ trailingComma: false,
+}, hasOwn = defaults.hasOwnProperty;
+
+// Copy options and fill in default values.
+exports.normalize = function(options) {
+ options = options || defaults;
+
+ function get(key) {
+ return hasOwn.call(options, key)
+ ? options[key]
+ : defaults[key];
+ }
+
+ return {
+ tabWidth: +get("tabWidth"),
+ useTabs: !!get("useTabs"),
+ reuseWhitespace: !!get("reuseWhitespace"),
+ lineTerminator: get("lineTerminator"),
+ wrapColumn: Math.max(get("wrapColumn"), 0),
+ sourceFileName: get("sourceFileName"),
+ sourceMapName: get("sourceMapName"),
+ sourceRoot: get("sourceRoot"),
+ inputSourceMap: get("inputSourceMap"),
+ esprima: get("esprima"),
+ range: get("range"),
+ tolerant: get("tolerant"),
+ quote: get("quote"),
+ trailingComma: get("trailingComma"),
+ };
+};
+
+},{"3":3,"8":8}],566:[function(_dereq_,module,exports){
+var assert = _dereq_(1);
+var types = _dereq_(569);
+var n = types.namedTypes;
+var b = types.builders;
+var isObject = types.builtInTypes.object;
+var isArray = types.builtInTypes.array;
+var isFunction = types.builtInTypes.function;
+var Patcher = _dereq_(567).Patcher;
+var normalizeOptions = _dereq_(565).normalize;
+var fromString = _dereq_(563).fromString;
+var attachComments = _dereq_(561).attach;
+var util = _dereq_(570);
+
+exports.parse = function parse(source, options) {
+ options = normalizeOptions(options);
+
+ var lines = fromString(source, options);
+
+ var sourceWithoutTabs = lines.toString({
+ tabWidth: options.tabWidth,
+ reuseWhitespace: false,
+ useTabs: false
+ });
+
+ var comments = [];
+ var program = options.esprima.parse(sourceWithoutTabs, {
+ loc: true,
+ locations: true,
+ range: options.range,
+ comment: true,
+ onComment: comments,
+ tolerant: options.tolerant,
+ ecmaVersion: 6,
+ sourceType: 'module'
+ });
+
+ program.loc = program.loc || {
+ start: lines.firstPos(),
+ end: lines.lastPos()
+ };
+
+ program.loc.lines = lines;
+ program.loc.indent = 0;
+
+ // Expand the Program node's .loc to include all comments, since
+ // typically its .loc.start and .loc.end will coincide with those of
+ // the first and last statements, respectively, excluding any comments
+ // that fall outside that region.
+ var trueProgramLoc = util.getTrueLoc(program, lines);
+ program.loc.start = trueProgramLoc.start;
+ program.loc.end = trueProgramLoc.end;
+
+ if (program.comments) {
+ comments = program.comments;
+ delete program.comments;
+ }
+
+ // In order to ensure we reprint leading and trailing program
+ // comments, wrap the original Program node with a File node.
+ var file = b.file(program);
+ file.loc = {
+ lines: lines,
+ indent: 0,
+ start: lines.firstPos(),
+ end: lines.lastPos()
+ };
+
+ // Passing file.program here instead of just file means that initial
+ // comments will be attached to program.body[0] instead of program.
+ attachComments(
+ comments,
+ program.body.length ? file.program : file,
+ lines
+ );
+
+ // Return a copy of the original AST so that any changes made may be
+ // compared to the original.
+ return new TreeCopier(lines).copy(file);
+};
+
+function TreeCopier(lines) {
+ assert.ok(this instanceof TreeCopier);
+ this.lines = lines;
+ this.indent = 0;
+}
+
+var TCp = TreeCopier.prototype;
+
+TCp.copy = function(node) {
+ if (isArray.check(node)) {
+ return node.map(this.copy, this);
+ }
+
+ if (!isObject.check(node)) {
+ return node;
+ }
+
+ util.fixFaultyLocations(node);
+
+ var copy = Object.create(Object.getPrototypeOf(node), {
+ original: { // Provide a link from the copy to the original.
+ value: node,
+ configurable: false,
+ enumerable: false,
+ writable: true
+ }
+ });
+
+ var loc = node.loc;
+ var oldIndent = this.indent;
+ var newIndent = oldIndent;
+
+ if (loc) {
+ // When node is a comment, we set node.loc.indent to
+ // node.loc.start.column so that, when/if we print the comment by
+ // itself, we can strip that much whitespace from the left margin
+ // of the comment. This only really matters for multiline Block
+ // comments, but it doesn't hurt for Line comments.
+ if (node.type === "Block" || node.type === "Line" ||
+ this.lines.isPrecededOnlyByWhitespace(loc.start)) {
+ newIndent = this.indent = loc.start.column;
+ }
+
+ loc.lines = this.lines;
+ loc.indent = newIndent;
+ }
+
+ var keys = Object.keys(node);
+ var keyCount = keys.length;
+ for (var i = 0; i < keyCount; ++i) {
+ var key = keys[i];
+ if (key === "loc") {
+ copy[key] = node[key];
+ } else {
+ copy[key] = this.copy(node[key]);
+ }
+ }
+
+ this.indent = oldIndent;
+
+ return copy;
+};
+
+},{"1":1,"561":561,"563":563,"565":565,"567":567,"569":569,"570":570}],567:[function(_dereq_,module,exports){
+var assert = _dereq_(1);
+var linesModule = _dereq_(563);
+var types = _dereq_(569);
+var getFieldValue = types.getFieldValue;
+var Printable = types.namedTypes.Printable;
+var Expression = types.namedTypes.Expression;
+var SourceLocation = types.namedTypes.SourceLocation;
+var util = _dereq_(570);
+var comparePos = util.comparePos;
+var FastPath = _dereq_(562);
+var isObject = types.builtInTypes.object;
+var isArray = types.builtInTypes.array;
+var isString = types.builtInTypes.string;
+var riskyAdjoiningCharExp = /[0-9a-z_$]/i;
+
+function Patcher(lines) {
+ assert.ok(this instanceof Patcher);
+ assert.ok(lines instanceof linesModule.Lines);
+
+ var self = this,
+ replacements = [];
+
+ self.replace = function(loc, lines) {
+ if (isString.check(lines))
+ lines = linesModule.fromString(lines);
+
+ replacements.push({
+ lines: lines,
+ start: loc.start,
+ end: loc.end
+ });
+ };
+
+ self.get = function(loc) {
+ // If no location is provided, return the complete Lines object.
+ loc = loc || {
+ start: { line: 1, column: 0 },
+ end: { line: lines.length,
+ column: lines.getLineLength(lines.length) }
+ };
+
+ var sliceFrom = loc.start,
+ toConcat = [];
+
+ function pushSlice(from, to) {
+ assert.ok(comparePos(from, to) <= 0);
+ toConcat.push(lines.slice(from, to));
+ }
+
+ replacements.sort(function(a, b) {
+ return comparePos(a.start, b.start);
+ }).forEach(function(rep) {
+ if (comparePos(sliceFrom, rep.start) > 0) {
+ // Ignore nested replacement ranges.
+ } else {
+ pushSlice(sliceFrom, rep.start);
+ toConcat.push(rep.lines);
+ sliceFrom = rep.end;
+ }
+ });
+
+ pushSlice(sliceFrom, loc.end);
+
+ return linesModule.concat(toConcat);
+ };
+}
+exports.Patcher = Patcher;
+
+var Pp = Patcher.prototype;
+
+Pp.tryToReprintComments = function(newNode, oldNode, print) {
+ var patcher = this;
+
+ if (!newNode.comments &&
+ !oldNode.comments) {
+ // We were (vacuously) able to reprint all the comments!
+ return true;
+ }
+
+ var newPath = FastPath.from(newNode);
+ var oldPath = FastPath.from(oldNode);
+
+ newPath.stack.push("comments", getSurroundingComments(newNode));
+ oldPath.stack.push("comments", getSurroundingComments(oldNode));
+
+ var reprints = [];
+ var ableToReprintComments =
+ findArrayReprints(newPath, oldPath, reprints);
+
+ // No need to pop anything from newPath.stack or oldPath.stack, since
+ // newPath and oldPath are fresh local variables.
+
+ if (ableToReprintComments && reprints.length > 0) {
+ reprints.forEach(function(reprint) {
+ var oldComment = reprint.oldPath.getValue();
+ assert.ok(oldComment.leading || oldComment.trailing);
+ patcher.replace(
+ oldComment.loc,
+ // Comments can't have .comments, so it doesn't matter
+ // whether we print with comments or without.
+ print(reprint.newPath).indentTail(oldComment.loc.indent)
+ );
+ });
+ }
+
+ return ableToReprintComments;
+};
+
+// Get all comments that are either leading or trailing, ignoring any
+// comments that occur inside node.loc. Returns an empty array for nodes
+// with no leading or trailing comments.
+function getSurroundingComments(node) {
+ var result = [];
+ if (node.comments &&
+ node.comments.length > 0) {
+ node.comments.forEach(function(comment) {
+ if (comment.leading || comment.trailing) {
+ result.push(comment);
+ }
+ });
+ }
+ return result;
+}
+
+Pp.deleteComments = function(node) {
+ if (!node.comments) {
+ return;
+ }
+
+ var patcher = this;
+
+ node.comments.forEach(function(comment) {
+ if (comment.leading) {
+ // Delete leading comments along with any trailing whitespace
+ // they might have.
+ patcher.replace({
+ start: comment.loc.start,
+ end: node.loc.lines.skipSpaces(
+ comment.loc.end, false, false)
+ }, "");
+
+ } else if (comment.trailing) {
+ // Delete trailing comments along with any leading whitespace
+ // they might have.
+ patcher.replace({
+ start: node.loc.lines.skipSpaces(
+ comment.loc.start, true, false),
+ end: comment.loc.end
+ }, "");
+ }
+ });
+};
+
+exports.getReprinter = function(path) {
+ assert.ok(path instanceof FastPath);
+
+ // Make sure that this path refers specifically to a Node, rather than
+ // some non-Node subproperty of a Node.
+ var node = path.getValue();
+ if (!Printable.check(node))
+ return;
+
+ var orig = node.original;
+ var origLoc = orig && orig.loc;
+ var lines = origLoc && origLoc.lines;
+ var reprints = [];
+
+ if (!lines || !findReprints(path, reprints))
+ return;
+
+ return function(print) {
+ var patcher = new Patcher(lines);
+
+ reprints.forEach(function(reprint) {
+ var newNode = reprint.newPath.getValue();
+ var oldNode = reprint.oldPath.getValue();
+
+ SourceLocation.assert(oldNode.loc, true);
+
+ var needToPrintNewPathWithComments =
+ !patcher.tryToReprintComments(newNode, oldNode, print)
+
+ if (needToPrintNewPathWithComments) {
+ // Since we were not able to preserve all leading/trailing
+ // comments, we delete oldNode's comments, print newPath
+ // with comments, and then patch the resulting lines where
+ // oldNode used to be.
+ patcher.deleteComments(oldNode);
+ }
+
+ var pos = util.copyPos(oldNode.loc.start);
+ var needsLeadingSpace = lines.prevPos(pos) &&
+ riskyAdjoiningCharExp.test(lines.charAt(pos));
+
+ var newLines = print(
+ reprint.newPath,
+ needToPrintNewPathWithComments
+ ).indentTail(oldNode.loc.indent);
+
+ var needsTrailingSpace =
+ riskyAdjoiningCharExp.test(lines.charAt(oldNode.loc.end));
+
+ // If we try to replace the argument of a ReturnStatement like
+ // return"asdf" with e.g. a literal null expression, we run
+ // the risk of ending up with returnnull, so we need to add an
+ // extra leading space in situations where that might
+ // happen. Likewise for "asdf"in obj. See #170.
+ if (needsLeadingSpace || needsTrailingSpace) {
+ var newParts = [];
+ needsLeadingSpace && newParts.push(" ");
+ newParts.push(newLines);
+ needsTrailingSpace && newParts.push(" ");
+ newLines = linesModule.concat(newParts);
+ }
+
+ patcher.replace(oldNode.loc, newLines);
+ });
+
+ // Recall that origLoc is the .loc of an ancestor node that is
+ // guaranteed to contain all the reprinted nodes and comments.
+ return patcher.get(origLoc).indentTail(-orig.loc.indent);
+ };
+};
+
+function findReprints(newPath, reprints) {
+ var newNode = newPath.getValue();
+ Printable.assert(newNode);
+
+ var oldNode = newNode.original;
+ Printable.assert(oldNode);
+
+ assert.deepEqual(reprints, []);
+
+ if (newNode.type !== oldNode.type) {
+ return false;
+ }
+
+ var oldPath = new FastPath(oldNode);
+ var canReprint = findChildReprints(newPath, oldPath, reprints);
+
+ if (!canReprint) {
+ // Make absolutely sure the calling code does not attempt to reprint
+ // any nodes.
+ reprints.length = 0;
+ }
+
+ return canReprint;
+}
+
+function findAnyReprints(newPath, oldPath, reprints) {
+ var newNode = newPath.getValue();
+ var oldNode = oldPath.getValue();
+
+ if (newNode === oldNode)
+ return true;
+
+ if (isArray.check(newNode))
+ return findArrayReprints(newPath, oldPath, reprints);
+
+ if (isObject.check(newNode))
+ return findObjectReprints(newPath, oldPath, reprints);
+
+ return false;
+}
+
+function findArrayReprints(newPath, oldPath, reprints) {
+ var newNode = newPath.getValue();
+ var oldNode = oldPath.getValue();
+ isArray.assert(newNode);
+ var len = newNode.length;
+
+ if (!(isArray.check(oldNode) &&
+ oldNode.length === len))
+ return false;
+
+ for (var i = 0; i < len; ++i) {
+ newPath.stack.push(i, newNode[i]);
+ oldPath.stack.push(i, oldNode[i]);
+ var canReprint = findAnyReprints(newPath, oldPath, reprints);
+ newPath.stack.length -= 2;
+ oldPath.stack.length -= 2;
+ if (!canReprint) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+function findObjectReprints(newPath, oldPath, reprints) {
+ var newNode = newPath.getValue();
+ isObject.assert(newNode);
+
+ if (newNode.original === null) {
+ // If newNode.original node was set to null, reprint the node.
+ return false;
+ }
+
+ var oldNode = oldPath.getValue();
+ if (!isObject.check(oldNode))
+ return false;
+
+ if (Printable.check(newNode)) {
+ if (!Printable.check(oldNode)) {
+ return false;
+ }
+
+ // Here we need to decide whether the reprinted code for newNode
+ // is appropriate for patching into the location of oldNode.
+
+ if (newNode.type === oldNode.type) {
+ var childReprints = [];
+
+ if (findChildReprints(newPath, oldPath, childReprints)) {
+ reprints.push.apply(reprints, childReprints);
+ } else if (oldNode.loc) {
+ // If we have no .loc information for oldNode, then we
+ // won't be able to reprint it.
+ reprints.push({
+ oldPath: oldPath.copy(),
+ newPath: newPath.copy()
+ });
+ } else {
+ return false;
+ }
+
+ return true;
+ }
+
+ if (Expression.check(newNode) &&
+ Expression.check(oldNode) &&
+ // If we have no .loc information for oldNode, then we won't
+ // be able to reprint it.
+ oldNode.loc) {
+
+ // If both nodes are subtypes of Expression, then we should be
+ // able to fill the location occupied by the old node with
+ // code printed for the new node with no ill consequences.
+ reprints.push({
+ oldPath: oldPath.copy(),
+ newPath: newPath.copy()
+ });
+
+ return true;
+ }
+
+ // The nodes have different types, and at least one of the types
+ // is not a subtype of the Expression type, so we cannot safely
+ // assume the nodes are syntactically interchangeable.
+ return false;
+ }
+
+ return findChildReprints(newPath, oldPath, reprints);
+}
+
+// This object is reused in hasOpeningParen and hasClosingParen to avoid
+// having to allocate a temporary object.
+var reusablePos = { line: 1, column: 0 };
+var nonSpaceExp = /\S/;
+
+function hasOpeningParen(oldPath) {
+ var oldNode = oldPath.getValue();
+ var loc = oldNode.loc;
+ var lines = loc && loc.lines;
+
+ if (lines) {
+ var pos = reusablePos;
+ pos.line = loc.start.line;
+ pos.column = loc.start.column;
+
+ while (lines.prevPos(pos)) {
+ var ch = lines.charAt(pos);
+
+ if (ch === "(") {
+ // If we found an opening parenthesis but it occurred before
+ // the start of the original subtree for this reprinting, then
+ // we must not return true for hasOpeningParen(oldPath).
+ return comparePos(oldPath.getRootValue().loc.start, pos) <= 0;
+ }
+
+ if (nonSpaceExp.test(ch)) {
+ return false;
+ }
+ }
+ }
+
+ return false;
+}
+
+function hasClosingParen(oldPath) {
+ var oldNode = oldPath.getValue();
+ var loc = oldNode.loc;
+ var lines = loc && loc.lines;
+
+ if (lines) {
+ var pos = reusablePos;
+ pos.line = loc.end.line;
+ pos.column = loc.end.column;
+
+ do {
+ var ch = lines.charAt(pos);
+
+ if (ch === ")") {
+ // If we found a closing parenthesis but it occurred after the
+ // end of the original subtree for this reprinting, then we
+ // must not return true for hasClosingParen(oldPath).
+ return comparePos(pos, oldPath.getRootValue().loc.end) <= 0;
+ }
+
+ if (nonSpaceExp.test(ch)) {
+ return false;
+ }
+
+ } while (lines.nextPos(pos));
+ }
+
+ return false;
+}
+
+function hasParens(oldPath) {
+ // This logic can technically be fooled if the node has parentheses
+ // but there are comments intervening between the parentheses and the
+ // node. In such cases the node will be harmlessly wrapped in an
+ // additional layer of parentheses.
+ return hasOpeningParen(oldPath) && hasClosingParen(oldPath);
+}
+
+function findChildReprints(newPath, oldPath, reprints) {
+ var newNode = newPath.getValue();
+ var oldNode = oldPath.getValue();
+
+ isObject.assert(newNode);
+ isObject.assert(oldNode);
+
+ if (newNode.original === null) {
+ // If newNode.original node was set to null, reprint the node.
+ return false;
+ }
+
+ // If this type of node cannot come lexically first in its enclosing
+ // statement (e.g. a function expression or object literal), and it
+ // seems to be doing so, then the only way we can ignore this problem
+ // and save ourselves from falling back to the pretty printer is if an
+ // opening parenthesis happens to precede the node. For example,
+ // (function(){ ... }()); does not need to be reprinted, even though
+ // the FunctionExpression comes lexically first in the enclosing
+ // ExpressionStatement and fails the hasParens test, because the
+ // parent CallExpression passes the hasParens test. If we relied on
+ // the path.needsParens() && !hasParens(oldNode) check below, the
+ // absence of a closing parenthesis after the FunctionExpression would
+ // trigger pretty-printing unnecessarily.
+ if (!newPath.canBeFirstInStatement() &&
+ newPath.firstInStatement() &&
+ !hasOpeningParen(oldPath))
+ return false;
+
+ // If this node needs parentheses and will not be wrapped with
+ // parentheses when reprinted, then return false to skip reprinting
+ // and let it be printed generically.
+ if (newPath.needsParens(true) && !hasParens(oldPath)) {
+ return false;
+ }
+
+ for (var k in util.getUnionOfKeys(newNode, oldNode)) {
+ if (k === "loc")
+ continue;
+
+ newPath.stack.push(k, types.getFieldValue(newNode, k));
+ oldPath.stack.push(k, types.getFieldValue(oldNode, k));
+ var canReprint = findAnyReprints(newPath, oldPath, reprints);
+ newPath.stack.length -= 2;
+ oldPath.stack.length -= 2;
+
+ if (!canReprint) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+},{"1":1,"562":562,"563":563,"569":569,"570":570}],568:[function(_dereq_,module,exports){
+var assert = _dereq_(1);
+var sourceMap = _dereq_(601);
+var printComments = _dereq_(561).printComments;
+var linesModule = _dereq_(563);
+var fromString = linesModule.fromString;
+var concat = linesModule.concat;
+var normalizeOptions = _dereq_(565).normalize;
+var getReprinter = _dereq_(567).getReprinter;
+var types = _dereq_(569);
+var namedTypes = types.namedTypes;
+var isString = types.builtInTypes.string;
+var isObject = types.builtInTypes.object;
+var FastPath = _dereq_(562);
+var util = _dereq_(570);
+
+function PrintResult(code, sourceMap) {
+ assert.ok(this instanceof PrintResult);
+
+ isString.assert(code);
+ this.code = code;
+
+ if (sourceMap) {
+ isObject.assert(sourceMap);
+ this.map = sourceMap;
+ }
+}
+
+var PRp = PrintResult.prototype;
+var warnedAboutToString = false;
+
+PRp.toString = function() {
+ if (!warnedAboutToString) {
+ console.warn(
+ "Deprecation warning: recast.print now returns an object with " +
+ "a .code property. You appear to be treating the object as a " +
+ "string, which might still work but is strongly discouraged."
+ );
+
+ warnedAboutToString = true;
+ }
+
+ return this.code;
+};
+
+var emptyPrintResult = new PrintResult("");
+
+function Printer(originalOptions) {
+ assert.ok(this instanceof Printer);
+
+ var explicitTabWidth = originalOptions && originalOptions.tabWidth;
+ var options = normalizeOptions(originalOptions);
+ assert.notStrictEqual(options, originalOptions);
+
+ // It's common for client code to pass the same options into both
+ // recast.parse and recast.print, but the Printer doesn't need (and
+ // can be confused by) options.sourceFileName, so we null it out.
+ options.sourceFileName = null;
+
+ function printWithComments(path) {
+ assert.ok(path instanceof FastPath);
+ return printComments(path, print);
+ }
+
+ function print(path, includeComments) {
+ if (includeComments)
+ return printWithComments(path);
+
+ assert.ok(path instanceof FastPath);
+
+ if (!explicitTabWidth) {
+ var oldTabWidth = options.tabWidth;
+ var loc = path.getNode().loc;
+ if (loc && loc.lines && loc.lines.guessTabWidth) {
+ options.tabWidth = loc.lines.guessTabWidth();
+ var lines = maybeReprint(path);
+ options.tabWidth = oldTabWidth;
+ return lines;
+ }
+ }
+
+ return maybeReprint(path);
+ }
+
+ function maybeReprint(path) {
+ var reprinter = getReprinter(path);
+ if (reprinter)
+ return maybeAddParens(path, reprinter(print));
+ return printRootGenerically(path);
+ }
+
+ // Print the root node generically, but then resume reprinting its
+ // children non-generically.
+ function printRootGenerically(path) {
+ return genericPrint(path, options, printWithComments);
+ }
+
+ // Print the entire AST generically.
+ function printGenerically(path) {
+ return genericPrint(path, options, printGenerically);
+ }
+
+ this.print = function(ast) {
+ if (!ast) {
+ return emptyPrintResult;
+ }
+
+ var lines = print(FastPath.from(ast), true);
+
+ return new PrintResult(
+ lines.toString(options),
+ util.composeSourceMaps(
+ options.inputSourceMap,
+ lines.getSourceMap(
+ options.sourceMapName,
+ options.sourceRoot
+ )
+ )
+ );
+ };
+
+ this.printGenerically = function(ast) {
+ if (!ast) {
+ return emptyPrintResult;
+ }
+
+ var path = FastPath.from(ast);
+ var oldReuseWhitespace = options.reuseWhitespace;
+
+ // Do not reuse whitespace (or anything else, for that matter)
+ // when printing generically.
+ options.reuseWhitespace = false;
+
+ // TODO Allow printing of comments?
+ var pr = new PrintResult(printGenerically(path).toString(options));
+ options.reuseWhitespace = oldReuseWhitespace;
+ return pr;
+ };
+}
+
+exports.Printer = Printer;
+
+function maybeAddParens(path, lines) {
+ return path.needsParens() ? concat(["(", lines, ")"]) : lines;
+}
+
+function genericPrint(path, options, printPath) {
+ assert.ok(path instanceof FastPath);
+ return maybeAddParens(path, genericPrintNoParens(path, options, printPath));
+}
+
+function genericPrintNoParens(path, options, print) {
+ var n = path.getValue();
+
+ if (!n) {
+ return fromString("");
+ }
+
+ if (typeof n === "string") {
+ return fromString(n, options);
+ }
+
+ namedTypes.Printable.assert(n);
+
+ switch (n.type) {
+ case "File":
+ return path.call(print, "program");
+
+ case "Program":
+ return path.call(function(bodyPath) {
+ return printStatementSequence(bodyPath, options, print);
+ }, "body");
+
+ case "Noop": // Babel extension.
+ case "EmptyStatement":
+ return fromString("");
+
+ case "ExpressionStatement":
+ return concat([path.call(print, "expression"), ";"]);
+
+ case "ParenthesizedExpression": // Babel extension.
+ return concat(["(", path.call(print, "expression"), ")"]);
+
+ case "BinaryExpression":
+ case "LogicalExpression":
+ case "AssignmentExpression":
+ return fromString(" ").join([
+ path.call(print, "left"),
+ n.operator,
+ path.call(print, "right")
+ ]);
+
+ case "AssignmentPattern":
+ return concat([
+ path.call(print, "left"),
+ "=",
+ path.call(print, "right")
+ ]);
+
+ case "MemberExpression":
+ var parts = [path.call(print, "object")];
+
+ var property = path.call(print, "property");
+ if (n.computed) {
+ parts.push("[", property, "]");
+ } else {
+ parts.push(".", property);
+ }
+
+ return concat(parts);
+
+ case "MetaProperty":
+ return concat([
+ path.call(print, "meta"),
+ ".",
+ path.call(print, "property")
+ ]);
+
+ case "BindExpression":
+ var parts = [];
+
+ if (n.object) {
+ parts.push(path.call(print, "object"));
+ }
+
+ parts.push("::", path.call(print, "callee"));
+
+ return concat(parts);
+
+ case "Path":
+ return fromString(".").join(n.body);
+
+ case "Identifier":
+ return concat([
+ fromString(n.name, options),
+ path.call(print, "typeAnnotation")
+ ]);
+
+ case "SpreadElement":
+ case "SpreadElementPattern":
+ case "SpreadProperty":
+ case "SpreadPropertyPattern":
+ case "RestElement":
+ return concat(["...", path.call(print, "argument")]);
+
+ case "FunctionDeclaration":
+ case "FunctionExpression":
+ var parts = [];
+
+ if (n.async)
+ parts.push("async ");
+
+ parts.push("function");
+
+ if (n.generator)
+ parts.push("*");
+
+ if (n.id) {
+ parts.push(
+ " ",
+ path.call(print, "id"),
+ path.call(print, "typeParameters")
+ );
+ }
+
+ parts.push(
+ "(",
+ printFunctionParams(path, options, print),
+ ")",
+ path.call(print, "returnType"),
+ " ",
+ path.call(print, "body")
+ );
+
+ return concat(parts);
+
+ case "ArrowFunctionExpression":
+ var parts = [];
+
+ if (n.async)
+ parts.push("async ");
+
+ if (
+ n.params.length === 1 &&
+ !n.rest &&
+ n.params[0].type !== 'SpreadElementPattern' &&
+ n.params[0].type !== 'RestElement'
+ ) {
+ parts.push(path.call(print, "params", 0));
+ } else {
+ parts.push(
+ "(",
+ printFunctionParams(path, options, print),
+ ")"
+ );
+ }
+
+ parts.push(" => ", path.call(print, "body"));
+
+ return concat(parts);
+
+ case "MethodDefinition":
+ var parts = [];
+
+ if (n.static) {
+ parts.push("static ");
+ }
+
+ parts.push(printMethod(path, options, print));
+
+ return concat(parts);
+
+ case "YieldExpression":
+ var parts = ["yield"];
+
+ if (n.delegate)
+ parts.push("*");
+
+ if (n.argument)
+ parts.push(" ", path.call(print, "argument"));
+
+ return concat(parts);
+
+ case "AwaitExpression":
+ var parts = ["await"];
+
+ if (n.all)
+ parts.push("*");
+
+ if (n.argument)
+ parts.push(" ", path.call(print, "argument"));
+
+ return concat(parts);
+
+ case "ModuleDeclaration":
+ var parts = ["module", path.call(print, "id")];
+
+ if (n.source) {
+ assert.ok(!n.body);
+ parts.push("from", path.call(print, "source"));
+ } else {
+ parts.push(path.call(print, "body"));
+ }
+
+ return fromString(" ").join(parts);
+
+ case "ImportSpecifier":
+ var parts = [];
+
+ if (n.imported) {
+ parts.push(path.call(print, "imported"));
+ if (n.local &&
+ n.local.name !== n.imported.name) {
+ parts.push(" as ", path.call(print, "local"));
+ }
+ } else if (n.id) {
+ parts.push(path.call(print, "id"));
+ if (n.name) {
+ parts.push(" as ", path.call(print, "name"));
+ }
+ }
+
+ return concat(parts);
+
+ case "ExportSpecifier":
+ var parts = [];
+
+ if (n.local) {
+ parts.push(path.call(print, "local"));
+ if (n.exported &&
+ n.exported.name !== n.local.name) {
+ parts.push(" as ", path.call(print, "exported"));
+ }
+ } else if (n.id) {
+ parts.push(path.call(print, "id"));
+ if (n.name) {
+ parts.push(" as ", path.call(print, "name"));
+ }
+ }
+
+ return concat(parts);
+
+ case "ExportBatchSpecifier":
+ return fromString("*");
+
+ case "ImportNamespaceSpecifier":
+ var parts = ["* as "];
+ if (n.local) {
+ parts.push(path.call(print, "local"));
+ } else if (n.id) {
+ parts.push(path.call(print, "id"));
+ }
+ return concat(parts);
+
+ case "ImportDefaultSpecifier":
+ if (n.local) {
+ return path.call(print, "local");
+ }
+ return path.call(print, "id");
+
+ case "ExportDeclaration":
+ var parts = ["export"];
+
+ if (n["default"]) {
+ parts.push(" default");
+
+ } else if (n.specifiers &&
+ n.specifiers.length > 0) {
+
+ if (n.specifiers.length === 1 &&
+ n.specifiers[0].type === "ExportBatchSpecifier") {
+ parts.push(" *");
+ } else {
+ parts.push(
+ " { ",
+ fromString(", ").join(path.map(print, "specifiers")),
+ " }"
+ );
+ }
+
+ if (n.source)
+ parts.push(" from ", path.call(print, "source"));
+
+ parts.push(";");
+
+ return concat(parts);
+ }
+
+ if (n.declaration) {
+ var decLines = path.call(print, "declaration");
+ parts.push(" ", decLines);
+ if (lastNonSpaceCharacter(decLines) !== ";") {
+ parts.push(";");
+ }
+ }
+
+ return concat(parts);
+
+ case "ExportDefaultDeclaration":
+ return concat([
+ "export default ",
+ path.call(print, "declaration")
+ ]);
+
+ case "ExportNamedDeclaration":
+ var parts = ["export "];
+
+ if (n.declaration) {
+ parts.push(path.call(print, "declaration"));
+ }
+
+ if (n.specifiers &&
+ n.specifiers.length > 0) {
+ parts.push(
+ n.declaration ? ", {" : "{",
+ fromString(", ").join(path.map(print, "specifiers")),
+ "}"
+ );
+ }
+
+ if (n.source) {
+ parts.push(" from ", path.call(print, "source"));
+ }
+
+ return concat(parts);
+
+ case "ExportAllDeclaration":
+ var parts = ["export *"];
+
+ if (n.exported) {
+ parts.push(" as ", path.call(print, "exported"));
+ }
+
+ return concat([
+ " from ",
+ path.call(print, "source")
+ ]);
+
+ case "ExportNamespaceSpecifier":
+ return concat(["* as ", path.call(print, "exported")]);
+
+ case "ExportDefaultSpecifier":
+ return path.call(print, "exported");
+
+ case "ImportDeclaration":
+ var parts = ["import "];
+
+ if (n.importKind && n.importKind !== "value") {
+ parts.push(n.importKind + " ");
+ }
+
+ if (n.specifiers &&
+ n.specifiers.length > 0) {
+
+ var foundImportSpecifier = false;
+
+ path.each(function(specifierPath) {
+ var i = specifierPath.getName();
+ if (i > 0) {
+ parts.push(", ");
+ }
+
+ var value = specifierPath.getValue();
+
+ if (namedTypes.ImportDefaultSpecifier.check(value) ||
+ namedTypes.ImportNamespaceSpecifier.check(value)) {
+ assert.strictEqual(foundImportSpecifier, false);
+ } else {
+ namedTypes.ImportSpecifier.assert(value);
+ if (!foundImportSpecifier) {
+ foundImportSpecifier = true;
+ parts.push("{");
+ }
+ }
+
+ parts.push(print(specifierPath));
+ }, "specifiers");
+
+ if (foundImportSpecifier) {
+ parts.push("}");
+ }
+
+ parts.push(" from ");
+ }
+
+ parts.push(path.call(print, "source"), ";");
+
+ return concat(parts);
+
+ case "BlockStatement":
+ var naked = path.call(function(bodyPath) {
+ return printStatementSequence(bodyPath, options, print);
+ }, "body");
+
+ if (naked.isEmpty()) {
+ return fromString("{}");
+ }
+
+ return concat([
+ "{\n",
+ naked.indent(options.tabWidth),
+ "\n}"
+ ]);
+
+ case "ReturnStatement":
+ var parts = ["return"];
+
+ if (n.argument) {
+ var argLines = path.call(print, "argument");
+ if (argLines.length > 1 &&
+ (namedTypes.XJSElement &&
+ namedTypes.XJSElement.check(n.argument) ||
+ namedTypes.JSXElement &&
+ namedTypes.JSXElement.check(n.argument))) {
+ parts.push(
+ " (\n",
+ argLines.indent(options.tabWidth),
+ "\n)"
+ );
+ } else {
+ parts.push(" ", argLines);
+ }
+ }
+
+ parts.push(";");
+
+ return concat(parts);
+
+ case "CallExpression":
+ return concat([
+ path.call(print, "callee"),
+ printArgumentsList(path, options, print)
+ ]);
+
+ case "ObjectExpression":
+ case "ObjectPattern":
+ case "ObjectTypeAnnotation":
+ var allowBreak = false;
+ var isTypeAnnotation = n.type === "ObjectTypeAnnotation";
+ var separator = isTypeAnnotation ? ';' : ',';
+ var fields = [];
+
+ if (isTypeAnnotation) {
+ fields.push("indexers", "callProperties");
+ }
+
+ fields.push("properties");
+
+ var len = 0;
+ fields.forEach(function(field) {
+ len += n[field].length;
+ });
+
+ var oneLine = (isTypeAnnotation && len === 1) || len === 0;
+ var parts = [oneLine ? "{" : "{\n"];
+
+ var i = 0;
+ fields.forEach(function(field) {
+ path.each(function(childPath) {
+ var lines = print(childPath);
+
+ if (!oneLine) {
+ lines = lines.indent(options.tabWidth);
+ }
+
+ var multiLine = !isTypeAnnotation && lines.length > 1;
+ if (multiLine && allowBreak) {
+ // Similar to the logic for BlockStatement.
+ parts.push("\n");
+ }
+
+ parts.push(lines);
+
+ if (i < len - 1) {
+ // Add an extra line break if the previous object property
+ // had a multi-line value.
+ parts.push(separator + (multiLine ? "\n\n" : "\n"));
+ allowBreak = !multiLine;
+ } else if (len !== 1 && isTypeAnnotation) {
+ parts.push(separator);
+ } else if (options.trailingComma) {
+ parts.push(separator);
+ }
+ i++;
+ }, field);
+ });
+
+ parts.push(oneLine ? "}" : "\n}");
+
+ return concat(parts);
+
+ case "PropertyPattern":
+ return concat([
+ path.call(print, "key"),
+ ": ",
+ path.call(print, "pattern")
+ ]);
+
+ case "Property": // Non-standard AST node type.
+ if (n.method || n.kind === "get" || n.kind === "set") {
+ return printMethod(path, options, print);
+ }
+
+ var parts = [];
+
+ if (n.decorators) {
+ path.each(function(decoratorPath) {
+ parts.push(print(decoratorPath), "\n");
+ }, "decorators");
+ }
+
+ var key = path.call(print, "key");
+ if (n.computed) {
+ parts.push("[", key, "]");
+ } else {
+ parts.push(key);
+ }
+
+ if (! n.shorthand) {
+ parts.push(": ", path.call(print, "value"));
+ }
+
+ return concat(parts);
+
+ case "Decorator":
+ return concat(["@", path.call(print, "expression")]);
+
+ case "ArrayExpression":
+ case "ArrayPattern":
+ var elems = n.elements,
+ len = elems.length;
+
+ var printed = path.map(print, "elements");
+ var joined = fromString(", ").join(printed);
+ var oneLine = joined.getLineLength(1) <= options.wrapColumn;
+ var parts = [oneLine ? "[" : "[\n"];
+
+ path.each(function(elemPath) {
+ var i = elemPath.getName();
+ var elem = elemPath.getValue();
+ if (!elem) {
+ // If the array expression ends with a hole, that hole
+ // will be ignored by the interpreter, but if it ends with
+ // two (or more) holes, we need to write out two (or more)
+ // commas so that the resulting code is interpreted with
+ // both (all) of the holes.
+ parts.push(",");
+ } else {
+ var lines = printed[i];
+ if (oneLine) {
+ if (i > 0)
+ parts.push(" ");
+ } else {
+ lines = lines.indent(options.tabWidth);
+ }
+ parts.push(lines);
+ if (i < len - 1 || (!oneLine && options.trailingComma))
+ parts.push(",");
+ if (!oneLine)
+ parts.push("\n");
+ }
+ }, "elements");
+
+ parts.push("]");
+
+ return concat(parts);
+
+ case "SequenceExpression":
+ return fromString(", ").join(path.map(print, "expressions"));
+
+ case "ThisExpression":
+ return fromString("this");
+
+ case "Super":
+ return fromString("super");
+
+ case "Literal":
+ if (typeof n.value !== "string")
+ return fromString(n.value, options);
+
+ return fromString(nodeStr(n.value, options), options);
+
+ case "ModuleSpecifier":
+ if (n.local) {
+ throw new Error(
+ "The ESTree ModuleSpecifier type should be abstract"
+ );
+ }
+
+ // The Esprima ModuleSpecifier type is just a string-valued
+ // Literal identifying the imported-from module.
+ return fromString(nodeStr(n.value, options), options);
+
+ case "UnaryExpression":
+ var parts = [n.operator];
+ if (/[a-z]$/.test(n.operator))
+ parts.push(" ");
+ parts.push(path.call(print, "argument"));
+ return concat(parts);
+
+ case "UpdateExpression":
+ var parts = [path.call(print, "argument"), n.operator];
+
+ if (n.prefix)
+ parts.reverse();
+
+ return concat(parts);
+
+ case "ConditionalExpression":
+ return concat([
+ "(", path.call(print, "test"),
+ " ? ", path.call(print, "consequent"),
+ " : ", path.call(print, "alternate"), ")"
+ ]);
+
+ case "NewExpression":
+ var parts = ["new ", path.call(print, "callee")];
+ var args = n.arguments;
+ if (args) {
+ parts.push(printArgumentsList(path, options, print));
+ }
+
+ return concat(parts);
+
+ case "VariableDeclaration":
+ var parts = [n.kind, " "];
+ var maxLen = 0;
+ var printed = path.map(function(childPath) {
+ var lines = print(childPath);
+ maxLen = Math.max(lines.length, maxLen);
+ return lines;
+ }, "declarations");
+
+ if (maxLen === 1) {
+ parts.push(fromString(", ").join(printed));
+ } else if (printed.length > 1 ) {
+ parts.push(
+ fromString(",\n").join(printed)
+ .indentTail(n.kind.length + 1)
+ );
+ } else {
+ parts.push(printed[0]);
+ }
+
+ // We generally want to terminate all variable declarations with a
+ // semicolon, except when they are children of for loops.
+ var parentNode = path.getParentNode();
+ if (!namedTypes.ForStatement.check(parentNode) &&
+ !namedTypes.ForInStatement.check(parentNode) &&
+ !(namedTypes.ForOfStatement &&
+ namedTypes.ForOfStatement.check(parentNode))) {
+ parts.push(";");
+ }
+
+ return concat(parts);
+
+ case "VariableDeclarator":
+ return n.init ? fromString(" = ").join([
+ path.call(print, "id"),
+ path.call(print, "init")
+ ]) : path.call(print, "id");
+
+ case "WithStatement":
+ return concat([
+ "with (",
+ path.call(print, "object"),
+ ") ",
+ path.call(print, "body")
+ ]);
+
+ case "IfStatement":
+ var con = adjustClause(path.call(print, "consequent"), options),
+ parts = ["if (", path.call(print, "test"), ")", con];
+
+ if (n.alternate)
+ parts.push(
+ endsWithBrace(con) ? " else" : "\nelse",
+ adjustClause(path.call(print, "alternate"), options));
+
+ return concat(parts);
+
+ case "ForStatement":
+ // TODO Get the for (;;) case right.
+ var init = path.call(print, "init"),
+ sep = init.length > 1 ? ";\n" : "; ",
+ forParen = "for (",
+ indented = fromString(sep).join([
+ init,
+ path.call(print, "test"),
+ path.call(print, "update")
+ ]).indentTail(forParen.length),
+ head = concat([forParen, indented, ")"]),
+ clause = adjustClause(path.call(print, "body"), options),
+ parts = [head];
+
+ if (head.length > 1) {
+ parts.push("\n");
+ clause = clause.trimLeft();
+ }
+
+ parts.push(clause);
+
+ return concat(parts);
+
+ case "WhileStatement":
+ return concat([
+ "while (",
+ path.call(print, "test"),
+ ")",
+ adjustClause(path.call(print, "body"), options)
+ ]);
+
+ case "ForInStatement":
+ // Note: esprima can't actually parse "for each (".
+ return concat([
+ n.each ? "for each (" : "for (",
+ path.call(print, "left"),
+ " in ",
+ path.call(print, "right"),
+ ")",
+ adjustClause(path.call(print, "body"), options)
+ ]);
+
+ case "ForOfStatement":
+ return concat([
+ "for (",
+ path.call(print, "left"),
+ " of ",
+ path.call(print, "right"),
+ ")",
+ adjustClause(path.call(print, "body"), options)
+ ]);
+
+ case "DoWhileStatement":
+ var doBody = concat([
+ "do",
+ adjustClause(path.call(print, "body"), options)
+ ]), parts = [doBody];
+
+ if (endsWithBrace(doBody))
+ parts.push(" while");
+ else
+ parts.push("\nwhile");
+
+ parts.push(" (", path.call(print, "test"), ");");
+
+ return concat(parts);
+
+ case "DoExpression":
+ var statements = path.call(function(bodyPath) {
+ return printStatementSequence(bodyPath, options, print);
+ }, "body");
+
+ return concat([
+ "do {\n",
+ statements.indent(options.tabWidth),
+ "\n}"
+ ]);
+
+ case "BreakStatement":
+ var parts = ["break"];
+ if (n.label)
+ parts.push(" ", path.call(print, "label"));
+ parts.push(";");
+ return concat(parts);
+
+ case "ContinueStatement":
+ var parts = ["continue"];
+ if (n.label)
+ parts.push(" ", path.call(print, "label"));
+ parts.push(";");
+ return concat(parts);
+
+ case "LabeledStatement":
+ return concat([
+ path.call(print, "label"),
+ ":\n",
+ path.call(print, "body")
+ ]);
+
+ case "TryStatement":
+ var parts = [
+ "try ",
+ path.call(print, "block")
+ ];
+
+ if (n.handler) {
+ parts.push(" ", path.call(print, "handler"));
+ } else if (n.handlers) {
+ path.each(function(handlerPath) {
+ parts.push(" ", print(handlerPath));
+ }, "handlers");
+ }
+
+ if (n.finalizer) {
+ parts.push(" finally ", path.call(print, "finalizer"));
+ }
+
+ return concat(parts);
+
+ case "CatchClause":
+ var parts = ["catch (", path.call(print, "param")];
+
+ if (n.guard)
+ // Note: esprima does not recognize conditional catch clauses.
+ parts.push(" if ", path.call(print, "guard"));
+
+ parts.push(") ", path.call(print, "body"));
+
+ return concat(parts);
+
+ case "ThrowStatement":
+ return concat(["throw ", path.call(print, "argument"), ";"]);
+
+ case "SwitchStatement":
+ return concat([
+ "switch (",
+ path.call(print, "discriminant"),
+ ") {\n",
+ fromString("\n").join(path.map(print, "cases")),
+ "\n}"
+ ]);
+
+ // Note: ignoring n.lexical because it has no printing consequences.
+
+ case "SwitchCase":
+ var parts = [];
+
+ if (n.test)
+ parts.push("case ", path.call(print, "test"), ":");
+ else
+ parts.push("default:");
+
+ if (n.consequent.length > 0) {
+ parts.push("\n", path.call(function(consequentPath) {
+ return printStatementSequence(consequentPath, options, print);
+ }, "consequent").indent(options.tabWidth));
+ }
+
+ return concat(parts);
+
+ case "DebuggerStatement":
+ return fromString("debugger;");
+
+ // JSX extensions below.
+
+ case "XJSAttribute":
+ case "JSXAttribute":
+ var parts = [path.call(print, "name")];
+ if (n.value)
+ parts.push("=", path.call(print, "value"));
+ return concat(parts);
+
+ case "XJSIdentifier":
+ case "JSXIdentifier":
+ return fromString(n.name, options);
+
+ case "XJSNamespacedName":
+ case "JSXNamespacedName":
+ return fromString(":").join([
+ path.call(print, "namespace"),
+ path.call(print, "name")
+ ]);
+
+ case "XJSMemberExpression":
+ case "JSXMemberExpression":
+ return fromString(".").join([
+ path.call(print, "object"),
+ path.call(print, "property")
+ ]);
+
+ case "XJSSpreadAttribute":
+ case "JSXSpreadAttribute":
+ return concat(["{...", path.call(print, "argument"), "}"]);
+
+ case "XJSExpressionContainer":
+ case "JSXExpressionContainer":
+ return concat(["{", path.call(print, "expression"), "}"]);
+
+ case "XJSElement":
+ case "JSXElement":
+ var openingLines = path.call(print, "openingElement");
+
+ if (n.openingElement.selfClosing) {
+ assert.ok(!n.closingElement);
+ return openingLines;
+ }
+
+ var childLines = concat(
+ path.map(function(childPath) {
+ var child = childPath.getValue();
+
+ if (namedTypes.Literal.check(child) &&
+ typeof child.value === "string") {
+ if (/\S/.test(child.value)) {
+ return child.value.replace(/^\s+|\s+$/g, "");
+ } else if (/\n/.test(child.value)) {
+ return "\n";
+ }
+ }
+
+ return print(childPath);
+ }, "children")
+ ).indentTail(options.tabWidth);
+
+ var closingLines = path.call(print, "closingElement");
+
+ return concat([
+ openingLines,
+ childLines,
+ closingLines
+ ]);
+
+ case "XJSOpeningElement":
+ case "JSXOpeningElement":
+ var parts = ["<", path.call(print, "name")];
+ var attrParts = [];
+
+ path.each(function(attrPath) {
+ attrParts.push(" ", print(attrPath));
+ }, "attributes");
+
+ var attrLines = concat(attrParts);
+
+ var needLineWrap = (
+ attrLines.length > 1 ||
+ attrLines.getLineLength(1) > options.wrapColumn
+ );
+
+ if (needLineWrap) {
+ attrParts.forEach(function(part, i) {
+ if (part === " ") {
+ assert.strictEqual(i % 2, 0);
+ attrParts[i] = "\n";
+ }
+ });
+
+ attrLines = concat(attrParts).indentTail(options.tabWidth);
+ }
+
+ parts.push(attrLines, n.selfClosing ? " />" : ">");
+
+ return concat(parts);
+
+ case "XJSClosingElement":
+ case "JSXClosingElement":
+ return concat(["", path.call(print, "name"), ">"]);
+
+ case "XJSText":
+ case "JSXText":
+ return fromString(n.value, options);
+
+ case "XJSEmptyExpression":
+ case "JSXEmptyExpression":
+ return fromString("");
+
+ case "TypeAnnotatedIdentifier":
+ return concat([
+ path.call(print, "annotation"),
+ " ",
+ path.call(print, "identifier")
+ ]);
+
+ case "ClassBody":
+ if (n.body.length === 0) {
+ return fromString("{}");
+ }
+
+ return concat([
+ "{\n",
+ path.call(function(bodyPath) {
+ return printStatementSequence(bodyPath, options, print);
+ }, "body").indent(options.tabWidth),
+ "\n}"
+ ]);
+
+ case "ClassPropertyDefinition":
+ var parts = ["static ", path.call(print, "definition")];
+ if (!namedTypes.MethodDefinition.check(n.definition))
+ parts.push(";");
+ return concat(parts);
+
+ case "ClassProperty":
+ var parts = [];
+ if (n.static)
+ parts.push("static ");
+
+ parts.push(path.call(print, "key"));
+ if (n.typeAnnotation)
+ parts.push(path.call(print, "typeAnnotation"));
+
+ if (n.value)
+ parts.push(" = ", path.call(print, "value"));
+
+ parts.push(";");
+ return concat(parts);
+
+ case "ClassDeclaration":
+ case "ClassExpression":
+ var parts = ["class"];
+
+ if (n.id) {
+ parts.push(
+ " ",
+ path.call(print, "id"),
+ path.call(print, "typeParameters")
+ );
+ }
+
+ if (n.superClass) {
+ parts.push(
+ " extends ",
+ path.call(print, "superClass"),
+ path.call(print, "superTypeParameters")
+ );
+ }
+
+ if (n["implements"]) {
+ parts.push(
+ " implements ",
+ fromString(", ").join(path.map(print, "implements"))
+ );
+ }
+
+ parts.push(" ", path.call(print, "body"));
+
+ return concat(parts);
+
+ case "TemplateElement":
+ return fromString(n.value.raw, options);
+
+ case "TemplateLiteral":
+ var expressions = path.map(print, "expressions");
+ var parts = ["`"];
+
+ path.each(function(childPath) {
+ var i = childPath.getName();
+ parts.push(print(childPath));
+ if (i < expressions.length) {
+ parts.push("${", expressions[i], "}");
+ }
+ }, "quasis");
+
+ parts.push("`");
+
+ return concat(parts);
+
+ case "TaggedTemplateExpression":
+ return concat([
+ path.call(print, "tag"),
+ path.call(print, "quasi")
+ ]);
+
+ // These types are unprintable because they serve as abstract
+ // supertypes for other (printable) types.
+ case "Node":
+ case "Printable":
+ case "SourceLocation":
+ case "Position":
+ case "Statement":
+ case "Function":
+ case "Pattern":
+ case "Expression":
+ case "Declaration":
+ case "Specifier":
+ case "NamedSpecifier":
+ case "Comment": // Supertype of Block and Line.
+ case "MemberTypeAnnotation": // Flow
+ case "TupleTypeAnnotation": // Flow
+ case "Type": // Flow
+ throw new Error("unprintable type: " + JSON.stringify(n.type));
+
+ case "CommentBlock": // Babel block comment.
+ case "Block": // Esprima block comment.
+ return concat(["/*", fromString(n.value, options), "*/"]);
+
+ case "CommentLine": // Babel line comment.
+ case "Line": // Esprima line comment.
+ return concat(["//", fromString(n.value, options)]);
+
+ // Type Annotations for Facebook Flow, typically stripped out or
+ // transformed away before printing.
+ case "TypeAnnotation":
+ var parts = [];
+
+ if (n.typeAnnotation) {
+ if (n.typeAnnotation.type !== "FunctionTypeAnnotation") {
+ parts.push(": ");
+ }
+ parts.push(path.call(print, "typeAnnotation"));
+ return concat(parts);
+ }
+
+ return fromString("");
+
+ case "AnyTypeAnnotation":
+ return fromString("any", options);
+
+ case "MixedTypeAnnotation":
+ return fromString("mixed", options);
+
+ case "ArrayTypeAnnotation":
+ return concat([
+ path.call(print, "elementType"),
+ "[]"
+ ]);
+
+ case "BooleanTypeAnnotation":
+ return fromString("boolean", options);
+
+ case "BooleanLiteralTypeAnnotation":
+ assert.strictEqual(typeof n.value, "boolean");
+ return fromString("" + n.value, options);
+
+ case "DeclareClass":
+ return concat([
+ fromString("declare class ", options),
+ path.call(print, "id"),
+ " ",
+ path.call(print, "body"),
+ ]);
+
+ case "DeclareFunction":
+ return concat([
+ fromString("declare function ", options),
+ path.call(print, "id"),
+ ";"
+ ]);
+
+ case "DeclareModule":
+ return concat([
+ fromString("declare module ", options),
+ path.call(print, "id"),
+ " ",
+ path.call(print, "body"),
+ ]);
+
+ case "DeclareVariable":
+ return concat([
+ fromString("declare var ", options),
+ path.call(print, "id"),
+ ";"
+ ]);
+
+ case "FunctionTypeAnnotation":
+ // FunctionTypeAnnotation is ambiguous:
+ // declare function(a: B): void; OR
+ // var A: (a: B) => void;
+ var parts = [];
+ var parent = path.getParentNode(0);
+ var isArrowFunctionTypeAnnotation = !(
+ namedTypes.ObjectTypeCallProperty.check(parent) ||
+ namedTypes.DeclareFunction.check(path.getParentNode(2))
+ );
+
+ var needsColon =
+ isArrowFunctionTypeAnnotation &&
+ !namedTypes.FunctionTypeParam.check(parent);
+
+ if (needsColon) {
+ parts.push(": ");
+ }
+
+ parts.push(
+ "(",
+ fromString(", ").join(path.map(print, "params")),
+ ")"
+ );
+
+ // The returnType is not wrapped in a TypeAnnotation, so the colon
+ // needs to be added separately.
+ if (n.returnType) {
+ parts.push(
+ isArrowFunctionTypeAnnotation ? " => " : ": ",
+ path.call(print, "returnType")
+ );
+ }
+
+ return concat(parts);
+
+ case "FunctionTypeParam":
+ return concat([
+ path.call(print, "name"),
+ ": ",
+ path.call(print, "typeAnnotation"),
+ ]);
+
+ case "GenericTypeAnnotation":
+ return concat([
+ path.call(print, "id"),
+ path.call(print, "typeParameters")
+ ]);
+
+ case "InterfaceDeclaration":
+ var parts = [
+ fromString("interface ", options),
+ path.call(print, "id"),
+ path.call(print, "typeParameters"),
+ " "
+ ];
+
+ if (n["extends"]) {
+ parts.push(
+ "extends ",
+ fromString(", ").join(path.map(print, "extends"))
+ );
+ }
+
+ parts.push(" ", path.call(print, "body"));
+
+ return concat(parts);
+
+ case "ClassImplements":
+ case "InterfaceExtends":
+ return concat([
+ path.call(print, "id"),
+ path.call(print, "typeParameters")
+ ]);
+
+ case "IntersectionTypeAnnotation":
+ return fromString(" & ").join(path.map(print, "types"));
+
+ case "NullableTypeAnnotation":
+ return concat([
+ "?",
+ path.call(print, "typeAnnotation")
+ ]);
+
+ case "NumberTypeAnnotation":
+ return fromString("number", options);
+
+ case "ObjectTypeCallProperty":
+ return path.call(print, "value");
+
+ case "ObjectTypeIndexer":
+ return concat([
+ "[",
+ path.call(print, "id"),
+ ": ",
+ path.call(print, "key"),
+ "]: ",
+ path.call(print, "value")
+ ]);
+
+ case "ObjectTypeProperty":
+ return concat([
+ path.call(print, "key"),
+ ": ",
+ path.call(print, "value")
+ ]);
+
+ case "QualifiedTypeIdentifier":
+ return concat([
+ path.call(print, "qualification"),
+ ".",
+ path.call(print, "id")
+ ]);
+
+ case "StringLiteralTypeAnnotation":
+ return fromString(nodeStr(n.value, options), options);
+
+ case "NumberLiteralTypeAnnotation":
+ assert.strictEqual(typeof n.value, "number");
+ return fromString("" + n.value, options);
+
+ case "StringTypeAnnotation":
+ return fromString("string", options);
+
+ case "TypeAlias":
+ return concat([
+ "type ",
+ path.call(print, "id"),
+ " = ",
+ path.call(print, "right"),
+ ";"
+ ]);
+
+ case "TypeCastExpression":
+ return concat([
+ "(",
+ path.call(print, "expression"),
+ path.call(print, "typeAnnotation"),
+ ")"
+ ]);
+
+ case "TypeParameterDeclaration":
+ case "TypeParameterInstantiation":
+ return concat([
+ "<",
+ fromString(", ").join(path.map(print, "params")),
+ ">"
+ ]);
+
+ case "TypeofTypeAnnotation":
+ return concat([
+ fromString("typeof ", options),
+ path.call(print, "argument")
+ ]);
+
+ case "UnionTypeAnnotation":
+ return fromString(" | ").join(path.map(print, "types"));
+
+ case "VoidTypeAnnotation":
+ return fromString("void", options);
+
+ // Unhandled types below. If encountered, nodes of these types should
+ // be either left alone or desugared into AST types that are fully
+ // supported by the pretty-printer.
+ case "ClassHeritage": // TODO
+ case "ComprehensionBlock": // TODO
+ case "ComprehensionExpression": // TODO
+ case "Glob": // TODO
+ case "GeneratorExpression": // TODO
+ case "LetStatement": // TODO
+ case "LetExpression": // TODO
+ case "GraphExpression": // TODO
+ case "GraphIndexExpression": // TODO
+
+ // XML types that nobody cares about or needs to print.
+ case "XMLDefaultDeclaration":
+ case "XMLAnyName":
+ case "XMLQualifiedIdentifier":
+ case "XMLFunctionQualifiedIdentifier":
+ case "XMLAttributeSelector":
+ case "XMLFilterExpression":
+ case "XML":
+ case "XMLElement":
+ case "XMLList":
+ case "XMLEscape":
+ case "XMLText":
+ case "XMLStartTag":
+ case "XMLEndTag":
+ case "XMLPointTag":
+ case "XMLName":
+ case "XMLAttribute":
+ case "XMLCdata":
+ case "XMLComment":
+ case "XMLProcessingInstruction":
+ default:
+ debugger;
+ throw new Error("unknown type: " + JSON.stringify(n.type));
+ }
+
+ return p;
+}
+
+function printStatementSequence(path, options, print) {
+ var inClassBody =
+ namedTypes.ClassBody &&
+ namedTypes.ClassBody.check(path.getParentNode());
+
+ var filtered = [];
+ var sawComment = false;
+ var sawStatement = false;
+
+ path.each(function(stmtPath) {
+ var i = stmtPath.getName();
+ var stmt = stmtPath.getValue();
+
+ // Just in case the AST has been modified to contain falsy
+ // "statements," it's safer simply to skip them.
+ if (!stmt) {
+ return;
+ }
+
+ // Skip printing EmptyStatement nodes to avoid leaving stray
+ // semicolons lying around.
+ if (stmt.type === "EmptyStatement") {
+ return;
+ }
+
+ if (namedTypes.Comment.check(stmt)) {
+ // The pretty printer allows a dangling Comment node to act as
+ // a Statement when the Comment can't be attached to any other
+ // non-Comment node in the tree.
+ sawComment = true;
+ } else if (!inClassBody) {
+ namedTypes.Statement.assert(stmt);
+ sawStatement = true;
+ }
+
+ // We can't hang onto stmtPath outside of this function, because
+ // it's just a reference to a mutable FastPath object, so we have
+ // to go ahead and print it here.
+ filtered.push({
+ node: stmt,
+ printed: print(stmtPath)
+ });
+ });
+
+ if (sawComment) {
+ assert.strictEqual(
+ sawStatement, false,
+ "Comments may appear as statements in otherwise empty statement " +
+ "lists, but may not coexist with non-Comment nodes."
+ );
+ }
+
+ var prevTrailingSpace = null;
+ var len = filtered.length;
+ var parts = [];
+
+ filtered.forEach(function(info, i) {
+ var printed = info.printed;
+ var stmt = info.node;
+ var multiLine = printed.length > 1;
+ var notFirst = i > 0;
+ var notLast = i < len - 1;
+ var leadingSpace;
+ var trailingSpace;
+ var lines = stmt && stmt.loc && stmt.loc.lines;
+ var trueLoc = lines && options.reuseWhitespace &&
+ util.getTrueLoc(stmt, lines);
+
+ if (notFirst) {
+ if (trueLoc) {
+ var beforeStart = lines.skipSpaces(trueLoc.start, true);
+ var beforeStartLine = beforeStart ? beforeStart.line : 1;
+ var leadingGap = trueLoc.start.line - beforeStartLine;
+ leadingSpace = Array(leadingGap + 1).join("\n");
+ } else {
+ leadingSpace = multiLine ? "\n\n" : "\n";
+ }
+ } else {
+ leadingSpace = "";
+ }
+
+ if (notLast) {
+ if (trueLoc) {
+ var afterEnd = lines.skipSpaces(trueLoc.end);
+ var afterEndLine = afterEnd ? afterEnd.line : lines.length;
+ var trailingGap = afterEndLine - trueLoc.end.line;
+ trailingSpace = Array(trailingGap + 1).join("\n");
+ } else {
+ trailingSpace = multiLine ? "\n\n" : "\n";
+ }
+ } else {
+ trailingSpace = "";
+ }
+
+ parts.push(
+ maxSpace(prevTrailingSpace, leadingSpace),
+ printed
+ );
+
+ if (notLast) {
+ prevTrailingSpace = trailingSpace;
+ } else if (trailingSpace) {
+ parts.push(trailingSpace);
+ }
+ });
+
+ return concat(parts);
+}
+
+function maxSpace(s1, s2) {
+ if (!s1 && !s2) {
+ return fromString("");
+ }
+
+ if (!s1) {
+ return fromString(s2);
+ }
+
+ if (!s2) {
+ return fromString(s1);
+ }
+
+ var spaceLines1 = fromString(s1);
+ var spaceLines2 = fromString(s2);
+
+ if (spaceLines2.length > spaceLines1.length) {
+ return spaceLines2;
+ }
+
+ return spaceLines1;
+}
+
+function printMethod(path, options, print) {
+ var node = path.getNode();
+ var kind = node.kind;
+ var parts = [];
+
+ namedTypes.FunctionExpression.assert(node.value);
+
+ if (node.decorators) {
+ path.each(function(decoratorPath) {
+ parts.push(print(decoratorPath), "\n");
+ }, "decorators");
+ }
+
+ if (node.value.async) {
+ parts.push("async ");
+ }
+
+ if (!kind || kind === "init" || kind === "method" || kind === "constructor") {
+ if (node.value.generator) {
+ parts.push("*");
+ }
+ } else {
+ assert.ok(kind === "get" || kind === "set");
+ parts.push(kind, " ");
+ }
+
+ var key = path.call(print, "key");
+ if (node.computed) {
+ key = concat(["[", key, "]"]);
+ }
+
+ parts.push(
+ key,
+ path.call(print, "value", "typeParameters"),
+ "(",
+ path.call(function(valuePath) {
+ return printFunctionParams(valuePath, options, print);
+ }, "value"),
+ ")",
+ path.call(print, "value", "returnType"),
+ " ",
+ path.call(print, "value", "body")
+ );
+
+ return concat(parts);
+}
+
+function printArgumentsList(path, options, print) {
+ var printed = path.map(print, "arguments");
+
+ var joined = fromString(", ").join(printed);
+ if (joined.getLineLength(1) > options.wrapColumn) {
+ joined = fromString(",\n").join(printed);
+ return concat([
+ "(\n",
+ joined.indent(options.tabWidth),
+ options.trailingComma ? ",\n)" : "\n)"
+ ]);
+ }
+
+ return concat(["(", joined, ")"]);
+}
+
+function printFunctionParams(path, options, print) {
+ var fun = path.getValue();
+ namedTypes.Function.assert(fun);
+
+ var printed = path.map(print, "params");
+
+ if (fun.defaults) {
+ path.each(function(defExprPath) {
+ var i = defExprPath.getName();
+ var p = printed[i];
+ if (p && defExprPath.getValue()) {
+ printed[i] = concat([p, "=", print(defExprPath)]);
+ }
+ }, "defaults");
+ }
+
+ if (fun.rest) {
+ printed.push(concat(["...", path.call(print, "rest")]));
+ }
+
+ var joined = fromString(", ").join(printed);
+ if (joined.length > 1 ||
+ joined.getLineLength(1) > options.wrapColumn) {
+ joined = fromString(",\n").join(printed);
+ if (options.trailingComma && !fun.rest) {
+ joined = concat([joined, ",\n"]);
+ }
+ return concat(["\n", joined.indent(options.tabWidth)]);
+ }
+
+ return joined;
+}
+
+function adjustClause(clause, options) {
+ if (clause.length > 1)
+ return concat([" ", clause]);
+
+ return concat([
+ "\n",
+ maybeAddSemicolon(clause).indent(options.tabWidth)
+ ]);
+}
+
+function lastNonSpaceCharacter(lines) {
+ var pos = lines.lastPos();
+ do {
+ var ch = lines.charAt(pos);
+ if (/\S/.test(ch))
+ return ch;
+ } while (lines.prevPos(pos));
+}
+
+function endsWithBrace(lines) {
+ return lastNonSpaceCharacter(lines) === "}";
+}
+
+function swapQuotes(str) {
+ return str.replace(/['"]/g, function(m) {
+ return m === '"' ? '\'' : '"';
+ });
+}
+
+function nodeStr(str, options) {
+ isString.assert(str);
+ switch (options.quote) {
+ case "auto":
+ var double = JSON.stringify(str);
+ var single = swapQuotes(JSON.stringify(swapQuotes(str)));
+ return double.length > single.length ? single : double;
+ case "single":
+ return swapQuotes(JSON.stringify(swapQuotes(str)));
+ case "double":
+ default:
+ return JSON.stringify(str);
+ }
+}
+
+function maybeAddSemicolon(lines) {
+ var eoc = lastNonSpaceCharacter(lines);
+ if (!eoc || "\n};".indexOf(eoc) < 0)
+ return concat([lines, ";"]);
+ return lines;
+}
+
+},{"1":1,"561":561,"562":562,"563":563,"565":565,"567":567,"569":569,"570":570,"601":601}],569:[function(_dereq_,module,exports){
+// This module was originally created so that Recast could add its own
+// custom types to the AST type system (in particular, the File type), but
+// those types are now incorporated into ast-types, so this module doesn't
+// have much to do anymore. Still, it might prove useful in the future.
+module.exports = _dereq_(202);
+
+},{"202":202}],570:[function(_dereq_,module,exports){
+var assert = _dereq_(1);
+var types = _dereq_(569);
+var getFieldValue = types.getFieldValue;
+var n = types.namedTypes;
+var sourceMap = _dereq_(601);
+var SourceMapConsumer = sourceMap.SourceMapConsumer;
+var SourceMapGenerator = sourceMap.SourceMapGenerator;
+var hasOwn = Object.prototype.hasOwnProperty;
+
+function getUnionOfKeys() {
+ var result = {};
+ var argc = arguments.length;
+ for (var i = 0; i < argc; ++i) {
+ var keys = Object.keys(arguments[i]);
+ var keyCount = keys.length;
+ for (var j = 0; j < keyCount; ++j) {
+ result[keys[j]] = true;
+ }
+ }
+ return result;
+}
+exports.getUnionOfKeys = getUnionOfKeys;
+
+function comparePos(pos1, pos2) {
+ return (pos1.line - pos2.line) || (pos1.column - pos2.column);
+}
+exports.comparePos = comparePos;
+
+function copyPos(pos) {
+ return {
+ line: pos.line,
+ column: pos.column
+ };
+}
+exports.copyPos = copyPos;
+
+exports.composeSourceMaps = function(formerMap, latterMap) {
+ if (formerMap) {
+ if (!latterMap) {
+ return formerMap;
+ }
+ } else {
+ return latterMap || null;
+ }
+
+ var smcFormer = new SourceMapConsumer(formerMap);
+ var smcLatter = new SourceMapConsumer(latterMap);
+ var smg = new SourceMapGenerator({
+ file: latterMap.file,
+ sourceRoot: latterMap.sourceRoot
+ });
+
+ var sourcesToContents = {};
+
+ smcLatter.eachMapping(function(mapping) {
+ var origPos = smcFormer.originalPositionFor({
+ line: mapping.originalLine,
+ column: mapping.originalColumn
+ });
+
+ var sourceName = origPos.source;
+ if (sourceName === null) {
+ return;
+ }
+
+ smg.addMapping({
+ source: sourceName,
+ original: copyPos(origPos),
+ generated: {
+ line: mapping.generatedLine,
+ column: mapping.generatedColumn
+ },
+ name: mapping.name
+ });
+
+ var sourceContent = smcFormer.sourceContentFor(sourceName);
+ if (sourceContent && !hasOwn.call(sourcesToContents, sourceName)) {
+ sourcesToContents[sourceName] = sourceContent;
+ smg.setSourceContent(sourceName, sourceContent);
+ }
+ });
+
+ return smg.toJSON();
+};
+
+exports.getTrueLoc = function(node, lines) {
+ // It's possible that node is newly-created (not parsed by Esprima),
+ // in which case it probably won't have a .loc property (or an
+ // .original property for that matter). That's fine; we'll just
+ // pretty-print it as usual.
+ if (!node.loc) {
+ return null;
+ }
+
+ var start = node.loc.start;
+ var end = node.loc.end;
+
+ // If the node has any comments, their locations might contribute to
+ // the true start/end positions of the node.
+ if (node.comments) {
+ node.comments.forEach(function(comment) {
+ if (comment.loc) {
+ if (comparePos(comment.loc.start, start) < 0) {
+ start = comment.loc.start;
+ }
+
+ if (comparePos(end, comment.loc.end) < 0) {
+ end = comment.loc.end;
+ }
+ }
+ });
+ }
+
+ return {
+ // Finally, trim any leading or trailing whitespace from the true
+ // location of the node.
+ start: lines.skipSpaces(start, false, false),
+ end: lines.skipSpaces(end, true, false)
+ };
+};
+
+exports.fixFaultyLocations = function(node) {
+ if ((n.MethodDefinition && n.MethodDefinition.check(node)) ||
+ (n.Property.check(node) && (node.method || node.shorthand))) {
+ // If the node is a MethodDefinition or a .method or .shorthand
+ // Property, then the location information stored in
+ // node.value.loc is very likely untrustworthy (just the {body}
+ // part of a method, or nothing in the case of shorthand
+ // properties), so we null out that information to prevent
+ // accidental reuse of bogus source code during reprinting.
+ node.value.loc = null;
+
+ if (n.FunctionExpression.check(node.value)) {
+ // FunctionExpression method values should be anonymous,
+ // because their .id fields are ignored anyway.
+ node.value.id = null;
+ }
+ }
+
+ var loc = node.loc;
+ if (loc) {
+ if (loc.start.line < 1) {
+ loc.start.line = 1;
+ }
+
+ if (loc.end.line < 1) {
+ loc.end.line = 1;
+ }
+ }
+};
+
+},{"1":1,"569":569,"601":601}],571:[function(_dereq_,module,exports){
+(function (process){
+var types = _dereq_(569);
+var parse = _dereq_(566).parse;
+var Printer = _dereq_(568).Printer;
+
+function print(node, options) {
+ return new Printer(options).print(node);
+}
+
+function prettyPrint(node, options) {
+ return new Printer(options).printGenerically(node);
+}
+
+function run(transformer, options) {
+ return runFile(process.argv[2], transformer, options);
+}
+
+function runFile(path, transformer, options) {
+ _dereq_(3).readFile(path, "utf-8", function(err, code) {
+ if (err) {
+ console.error(err);
+ return;
+ }
+
+ runString(code, transformer, options);
+ });
+}
+
+function defaultWriteback(output) {
+ process.stdout.write(output);
+}
+
+function runString(code, transformer, options) {
+ var writeback = options && options.writeback || defaultWriteback;
+ transformer(parse(code, options), function(node) {
+ writeback(print(node, options).code);
+ });
+}
+
+Object.defineProperties(exports, {
+ /**
+ * Parse a string of code into an augmented syntax tree suitable for
+ * arbitrary modification and reprinting.
+ */
+ parse: {
+ enumerable: true,
+ value: parse
+ },
+
+ /**
+ * Traverse and potentially modify an abstract syntax tree using a
+ * convenient visitor syntax:
+ *
+ * recast.visit(ast, {
+ * names: [],
+ * visitIdentifier: function(path) {
+ * var node = path.value;
+ * this.visitor.names.push(node.name);
+ * this.traverse(path);
+ * }
+ * });
+ */
+ visit: {
+ enumerable: true,
+ value: types.visit
+ },
+
+ /**
+ * Reprint a modified syntax tree using as much of the original source
+ * code as possible.
+ */
+ print: {
+ enumerable: true,
+ value: print
+ },
+
+ /**
+ * Print without attempting to reuse any original source code.
+ */
+ prettyPrint: {
+ enumerable: false,
+ value: prettyPrint
+ },
+
+ /**
+ * Customized version of require("ast-types").
+ */
+ types: {
+ enumerable: false,
+ value: types
+ },
+
+ /**
+ * Convenient command-line interface (see e.g. example/add-braces).
+ */
+ run: {
+ enumerable: false,
+ value: run
+ }
+});
+
+}).call(this,_dereq_(10))
+},{"10":10,"3":3,"566":566,"568":568,"569":569}],572:[function(_dereq_,module,exports){
+(function (global){
+/*! https://mths.be/regenerate v1.2.0 by @mathias | MIT license */
+;(function(root) {
+
+ // Detect free variables `exports`.
+ var freeExports = typeof exports == 'object' && exports;
+
+ // Detect free variable `module`.
+ var freeModule = typeof module == 'object' && module &&
+ module.exports == freeExports && module;
+
+ // Detect free variable `global`, from Node.js or Browserified code,
+ // and use it as `root`.
+ var freeGlobal = typeof global == 'object' && global;
+ if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
+ root = freeGlobal;
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ var ERRORS = {
+ 'rangeOrder': 'A range\u2019s `stop` value must be greater than or equal ' +
+ 'to the `start` value.',
+ 'codePointRange': 'Invalid code point value. Code points range from ' +
+ 'U+000000 to U+10FFFF.'
+ };
+
+ // https://mathiasbynens.be/notes/javascript-encoding#surrogate-pairs
+ var HIGH_SURROGATE_MIN = 0xD800;
+ var HIGH_SURROGATE_MAX = 0xDBFF;
+ var LOW_SURROGATE_MIN = 0xDC00;
+ var LOW_SURROGATE_MAX = 0xDFFF;
+
+ // In Regenerate output, `\0` will never be preceded by `\` because we sort
+ // by code point value, so let’s keep this regular expression simple.
+ var regexNull = /\\x00([^0123456789]|$)/g;
+
+ var object = {};
+ var hasOwnProperty = object.hasOwnProperty;
+ var extend = function(destination, source) {
+ var key;
+ for (key in source) {
+ if (hasOwnProperty.call(source, key)) {
+ destination[key] = source[key];
+ }
+ }
+ return destination;
+ };
+
+ var forEach = function(array, callback) {
+ var index = -1;
+ var length = array.length;
+ while (++index < length) {
+ callback(array[index], index);
+ }
+ };
+
+ var toString = object.toString;
+ var isArray = function(value) {
+ return toString.call(value) == '[object Array]';
+ };
+ var isNumber = function(value) {
+ return typeof value == 'number' ||
+ toString.call(value) == '[object Number]';
+ };
+
+ // This assumes that `number` is a positive integer that `toString()`s nicely
+ // (which is the case for all code point values).
+ var zeroes = '0000';
+ var pad = function(number, totalCharacters) {
+ var string = String(number);
+ return string.length < totalCharacters
+ ? (zeroes + string).slice(-totalCharacters)
+ : string;
+ };
+
+ var hex = function(number) {
+ return Number(number).toString(16).toUpperCase();
+ };
+
+ var slice = [].slice;
+
+ /*--------------------------------------------------------------------------*/
+
+ var dataFromCodePoints = function(codePoints) {
+ var index = -1;
+ var length = codePoints.length;
+ var max = length - 1;
+ var result = [];
+ var isStart = true;
+ var tmp;
+ var previous = 0;
+ while (++index < length) {
+ tmp = codePoints[index];
+ if (isStart) {
+ result.push(tmp);
+ previous = tmp;
+ isStart = false;
+ } else {
+ if (tmp == previous + 1) {
+ if (index != max) {
+ previous = tmp;
+ continue;
+ } else {
+ isStart = true;
+ result.push(tmp + 1);
+ }
+ } else {
+ // End the previous range and start a new one.
+ result.push(previous + 1, tmp);
+ previous = tmp;
+ }
+ }
+ }
+ if (!isStart) {
+ result.push(tmp + 1);
+ }
+ return result;
+ };
+
+ var dataRemove = function(data, codePoint) {
+ // Iterate over the data per `(start, end)` pair.
+ var index = 0;
+ var start;
+ var end;
+ var length = data.length;
+ while (index < length) {
+ start = data[index];
+ end = data[index + 1];
+ if (codePoint >= start && codePoint < end) {
+ // Modify this pair.
+ if (codePoint == start) {
+ if (end == start + 1) {
+ // Just remove `start` and `end`.
+ data.splice(index, 2);
+ return data;
+ } else {
+ // Just replace `start` with a new value.
+ data[index] = codePoint + 1;
+ return data;
+ }
+ } else if (codePoint == end - 1) {
+ // Just replace `end` with a new value.
+ data[index + 1] = codePoint;
+ return data;
+ } else {
+ // Replace `[start, end]` with `[startA, endA, startB, endB]`.
+ data.splice(index, 2, start, codePoint, codePoint + 1, end);
+ return data;
+ }
+ }
+ index += 2;
+ }
+ return data;
+ };
+
+ var dataRemoveRange = function(data, rangeStart, rangeEnd) {
+ if (rangeEnd < rangeStart) {
+ throw Error(ERRORS.rangeOrder);
+ }
+ // Iterate over the data per `(start, end)` pair.
+ var index = 0;
+ var start;
+ var end;
+ while (index < data.length) {
+ start = data[index];
+ end = data[index + 1] - 1; // Note: the `- 1` makes `end` inclusive.
+
+ // Exit as soon as no more matching pairs can be found.
+ if (start > rangeEnd) {
+ return data;
+ }
+
+ // Check if this range pair is equal to, or forms a subset of, the range
+ // to be removed.
+ // E.g. we have `[0, 11, 40, 51]` and want to remove 0-10 → `[40, 51]`.
+ // E.g. we have `[40, 51]` and want to remove 0-100 → `[]`.
+ if (rangeStart <= start && rangeEnd >= end) {
+ // Remove this pair.
+ data.splice(index, 2);
+ continue;
+ }
+
+ // Check if both `rangeStart` and `rangeEnd` are within the bounds of
+ // this pair.
+ // E.g. we have `[0, 11]` and want to remove 4-6 → `[0, 4, 7, 11]`.
+ if (rangeStart >= start && rangeEnd < end) {
+ if (rangeStart == start) {
+ // Replace `[start, end]` with `[startB, endB]`.
+ data[index] = rangeEnd + 1;
+ data[index + 1] = end + 1;
+ return data;
+ }
+ // Replace `[start, end]` with `[startA, endA, startB, endB]`.
+ data.splice(index, 2, start, rangeStart, rangeEnd + 1, end + 1);
+ return data;
+ }
+
+ // Check if only `rangeStart` is within the bounds of this pair.
+ // E.g. we have `[0, 11]` and want to remove 4-20 → `[0, 4]`.
+ if (rangeStart >= start && rangeStart <= end) {
+ // Replace `end` with `rangeStart`.
+ data[index + 1] = rangeStart;
+ // Note: we cannot `return` just yet, in case any following pairs still
+ // contain matching code points.
+ // E.g. we have `[0, 11, 14, 31]` and want to remove 4-20
+ // → `[0, 4, 21, 31]`.
+ }
+
+ // Check if only `rangeEnd` is within the bounds of this pair.
+ // E.g. we have `[14, 31]` and want to remove 4-20 → `[21, 31]`.
+ else if (rangeEnd >= start && rangeEnd <= end) {
+ // Just replace `start`.
+ data[index] = rangeEnd + 1;
+ return data;
+ }
+
+ index += 2;
+ }
+ return data;
+ };
+
+ var dataAdd = function(data, codePoint) {
+ // Iterate over the data per `(start, end)` pair.
+ var index = 0;
+ var start;
+ var end;
+ var lastIndex = null;
+ var length = data.length;
+ if (codePoint < 0x0 || codePoint > 0x10FFFF) {
+ throw RangeError(ERRORS.codePointRange);
+ }
+ while (index < length) {
+ start = data[index];
+ end = data[index + 1];
+
+ // Check if the code point is already in the set.
+ if (codePoint >= start && codePoint < end) {
+ return data;
+ }
+
+ if (codePoint == start - 1) {
+ // Just replace `start` with a new value.
+ data[index] = codePoint;
+ return data;
+ }
+
+ // At this point, if `start` is `greater` than `codePoint`, insert a new
+ // `[start, end]` pair before the current pair, or after the current pair
+ // if there is a known `lastIndex`.
+ if (start > codePoint) {
+ data.splice(
+ lastIndex != null ? lastIndex + 2 : 0,
+ 0,
+ codePoint,
+ codePoint + 1
+ );
+ return data;
+ }
+
+ if (codePoint == end) {
+ // Check if adding this code point causes two separate ranges to become
+ // a single range, e.g. `dataAdd([0, 4, 5, 10], 4)` → `[0, 10]`.
+ if (codePoint + 1 == data[index + 2]) {
+ data.splice(index, 4, start, data[index + 3]);
+ return data;
+ }
+ // Else, just replace `end` with a new value.
+ data[index + 1] = codePoint + 1;
+ return data;
+ }
+ lastIndex = index;
+ index += 2;
+ }
+ // The loop has finished; add the new pair to the end of the data set.
+ data.push(codePoint, codePoint + 1);
+ return data;
+ };
+
+ var dataAddData = function(dataA, dataB) {
+ // Iterate over the data per `(start, end)` pair.
+ var index = 0;
+ var start;
+ var end;
+ var data = dataA.slice();
+ var length = dataB.length;
+ while (index < length) {
+ start = dataB[index];
+ end = dataB[index + 1] - 1;
+ if (start == end) {
+ data = dataAdd(data, start);
+ } else {
+ data = dataAddRange(data, start, end);
+ }
+ index += 2;
+ }
+ return data;
+ };
+
+ var dataRemoveData = function(dataA, dataB) {
+ // Iterate over the data per `(start, end)` pair.
+ var index = 0;
+ var start;
+ var end;
+ var data = dataA.slice();
+ var length = dataB.length;
+ while (index < length) {
+ start = dataB[index];
+ end = dataB[index + 1] - 1;
+ if (start == end) {
+ data = dataRemove(data, start);
+ } else {
+ data = dataRemoveRange(data, start, end);
+ }
+ index += 2;
+ }
+ return data;
+ };
+
+ var dataAddRange = function(data, rangeStart, rangeEnd) {
+ if (rangeEnd < rangeStart) {
+ throw Error(ERRORS.rangeOrder);
+ }
+ if (
+ rangeStart < 0x0 || rangeStart > 0x10FFFF ||
+ rangeEnd < 0x0 || rangeEnd > 0x10FFFF
+ ) {
+ throw RangeError(ERRORS.codePointRange);
+ }
+ // Iterate over the data per `(start, end)` pair.
+ var index = 0;
+ var start;
+ var end;
+ var added = false;
+ var length = data.length;
+ while (index < length) {
+ start = data[index];
+ end = data[index + 1];
+
+ if (added) {
+ // The range has already been added to the set; at this point, we just
+ // need to get rid of the following ranges in case they overlap.
+
+ // Check if this range can be combined with the previous range.
+ if (start == rangeEnd + 1) {
+ data.splice(index - 1, 2);
+ return data;
+ }
+
+ // Exit as soon as no more possibly overlapping pairs can be found.
+ if (start > rangeEnd) {
+ return data;
+ }
+
+ // E.g. `[0, 11, 12, 16]` and we’ve added 5-15, so we now have
+ // `[0, 16, 12, 16]`. Remove the `12,16` part, as it lies within the
+ // `0,16` range that was previously added.
+ if (start >= rangeStart && start <= rangeEnd) {
+ // `start` lies within the range that was previously added.
+
+ if (end > rangeStart && end - 1 <= rangeEnd) {
+ // `end` lies within the range that was previously added as well,
+ // so remove this pair.
+ data.splice(index, 2);
+ index -= 2;
+ // Note: we cannot `return` just yet, as there may still be other
+ // overlapping pairs.
+ } else {
+ // `start` lies within the range that was previously added, but
+ // `end` doesn’t. E.g. `[0, 11, 12, 31]` and we’ve added 5-15, so
+ // now we have `[0, 16, 12, 31]`. This must be written as `[0, 31]`.
+ // Remove the previously added `end` and the current `start`.
+ data.splice(index - 1, 2);
+ index -= 2;
+ }
+
+ // Note: we cannot return yet.
+ }
+
+ }
+
+ else if (start == rangeEnd + 1) {
+ data[index] = rangeStart;
+ return data;
+ }
+
+ // Check if a new pair must be inserted *before* the current one.
+ else if (start > rangeEnd) {
+ data.splice(index, 0, rangeStart, rangeEnd + 1);
+ return data;
+ }
+
+ else if (rangeStart >= start && rangeStart < end && rangeEnd + 1 <= end) {
+ // The new range lies entirely within an existing range pair. No action
+ // needed.
+ return data;
+ }
+
+ else if (
+ // E.g. `[0, 11]` and you add 5-15 → `[0, 16]`.
+ (rangeStart >= start && rangeStart < end) ||
+ // E.g. `[0, 3]` and you add 3-6 → `[0, 7]`.
+ end == rangeStart
+ ) {
+ // Replace `end` with the new value.
+ data[index + 1] = rangeEnd + 1;
+ // Make sure the next range pair doesn’t overlap, e.g. `[0, 11, 12, 14]`
+ // and you add 5-15 → `[0, 16]`, i.e. remove the `12,14` part.
+ added = true;
+ // Note: we cannot `return` just yet.
+ }
+
+ else if (rangeStart <= start && rangeEnd + 1 >= end) {
+ // The new range is a superset of the old range.
+ data[index] = rangeStart;
+ data[index + 1] = rangeEnd + 1;
+ added = true;
+ }
+
+ index += 2;
+ }
+ // The loop has finished without doing anything; add the new pair to the end
+ // of the data set.
+ if (!added) {
+ data.push(rangeStart, rangeEnd + 1);
+ }
+ return data;
+ };
+
+ var dataContains = function(data, codePoint) {
+ var index = 0;
+ var length = data.length;
+ // Exit early if `codePoint` is not within `data`’s overall range.
+ var start = data[index];
+ var end = data[length - 1];
+ if (length >= 2) {
+ if (codePoint < start || codePoint > end) {
+ return false;
+ }
+ }
+ // Iterate over the data per `(start, end)` pair.
+ while (index < length) {
+ start = data[index];
+ end = data[index + 1];
+ if (codePoint >= start && codePoint < end) {
+ return true;
+ }
+ index += 2;
+ }
+ return false;
+ };
+
+ var dataIntersection = function(data, codePoints) {
+ var index = 0;
+ var length = codePoints.length;
+ var codePoint;
+ var result = [];
+ while (index < length) {
+ codePoint = codePoints[index];
+ if (dataContains(data, codePoint)) {
+ result.push(codePoint);
+ }
+ ++index;
+ }
+ return dataFromCodePoints(result);
+ };
+
+ var dataIsEmpty = function(data) {
+ return !data.length;
+ };
+
+ var dataIsSingleton = function(data) {
+ // Check if the set only represents a single code point.
+ return data.length == 2 && data[0] + 1 == data[1];
+ };
+
+ var dataToArray = function(data) {
+ // Iterate over the data per `(start, end)` pair.
+ var index = 0;
+ var start;
+ var end;
+ var result = [];
+ var length = data.length;
+ while (index < length) {
+ start = data[index];
+ end = data[index + 1];
+ while (start < end) {
+ result.push(start);
+ ++start;
+ }
+ index += 2;
+ }
+ return result;
+ };
+
+ /*--------------------------------------------------------------------------*/
+
+ // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+ var floor = Math.floor;
+ var highSurrogate = function(codePoint) {
+ return parseInt(
+ floor((codePoint - 0x10000) / 0x400) + HIGH_SURROGATE_MIN,
+ 10
+ );
+ };
+
+ var lowSurrogate = function(codePoint) {
+ return parseInt(
+ (codePoint - 0x10000) % 0x400 + LOW_SURROGATE_MIN,
+ 10
+ );
+ };
+
+ var stringFromCharCode = String.fromCharCode;
+ var codePointToString = function(codePoint) {
+ var string;
+ // https://mathiasbynens.be/notes/javascript-escapes#single
+ // Note: the `\b` escape sequence for U+0008 BACKSPACE in strings has a
+ // different meaning in regular expressions (word boundary), so it cannot
+ // be used here.
+ if (codePoint == 0x09) {
+ string = '\\t';
+ }
+ // Note: IE < 9 treats `'\v'` as `'v'`, so avoid using it.
+ // else if (codePoint == 0x0B) {
+ // string = '\\v';
+ // }
+ else if (codePoint == 0x0A) {
+ string = '\\n';
+ }
+ else if (codePoint == 0x0C) {
+ string = '\\f';
+ }
+ else if (codePoint == 0x0D) {
+ string = '\\r';
+ }
+ else if (codePoint == 0x5C) {
+ string = '\\\\';
+ }
+ else if (
+ codePoint == 0x24 ||
+ (codePoint >= 0x28 && codePoint <= 0x2B) ||
+ codePoint == 0x2D || codePoint == 0x2E || codePoint == 0x3F ||
+ (codePoint >= 0x5B && codePoint <= 0x5E) ||
+ (codePoint >= 0x7B && codePoint <= 0x7D)
+ ) {
+ // The code point maps to an unsafe printable ASCII character;
+ // backslash-escape it. Here’s the list of those symbols:
+ //
+ // $()*+-.?[\]^{|}
+ //
+ // See #7 for more info.
+ string = '\\' + stringFromCharCode(codePoint);
+ }
+ else if (codePoint >= 0x20 && codePoint <= 0x7E) {
+ // The code point maps to one of these printable ASCII symbols
+ // (including the space character):
+ //
+ // !"#%&',/0123456789:;<=>@ABCDEFGHIJKLMNO
+ // PQRSTUVWXYZ_`abcdefghijklmnopqrstuvwxyz~
+ //
+ // These can safely be used directly.
+ string = stringFromCharCode(codePoint);
+ }
+ else if (codePoint <= 0xFF) {
+ // https://mathiasbynens.be/notes/javascript-escapes#hexadecimal
+ string = '\\x' + pad(hex(codePoint), 2);
+ }
+ else { // `codePoint <= 0xFFFF` holds true.
+ // https://mathiasbynens.be/notes/javascript-escapes#unicode
+ string = '\\u' + pad(hex(codePoint), 4);
+ }
+
+ // There’s no need to account for astral symbols / surrogate pairs here,
+ // since `codePointToString` is private and only used for BMP code points.
+ // But if that’s what you need, just add an `else` block with this code:
+ //
+ // string = '\\u' + pad(hex(highSurrogate(codePoint)), 4)
+ // + '\\u' + pad(hex(lowSurrogate(codePoint)), 4);
+
+ return string;
+ };
+
+ var symbolToCodePoint = function(symbol) {
+ var length = symbol.length;
+ var first = symbol.charCodeAt(0);
+ var second;
+ if (
+ first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX &&
+ length > 1 // There is a next code unit.
+ ) {
+ // `first` is a high surrogate, and there is a next character. Assume
+ // it’s a low surrogate (else it’s invalid usage of Regenerate anyway).
+ second = symbol.charCodeAt(1);
+ // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+ return (first - HIGH_SURROGATE_MIN) * 0x400 +
+ second - LOW_SURROGATE_MIN + 0x10000;
+ }
+ return first;
+ };
+
+ var createBMPCharacterClasses = function(data) {
+ // Iterate over the data per `(start, end)` pair.
+ var result = '';
+ var index = 0;
+ var start;
+ var end;
+ var length = data.length;
+ if (dataIsSingleton(data)) {
+ return codePointToString(data[0]);
+ }
+ while (index < length) {
+ start = data[index];
+ end = data[index + 1] - 1; // Note: the `- 1` makes `end` inclusive.
+ if (start == end) {
+ result += codePointToString(start);
+ } else if (start + 1 == end) {
+ result += codePointToString(start) + codePointToString(end);
+ } else {
+ result += codePointToString(start) + '-' + codePointToString(end);
+ }
+ index += 2;
+ }
+ return '[' + result + ']';
+ };
+
+ var splitAtBMP = function(data) {
+ // Iterate over the data per `(start, end)` pair.
+ var loneHighSurrogates = [];
+ var loneLowSurrogates = [];
+ var bmp = [];
+ var astral = [];
+ var index = 0;
+ var start;
+ var end;
+ var length = data.length;
+ while (index < length) {
+ start = data[index];
+ end = data[index + 1] - 1; // Note: the `- 1` makes `end` inclusive.
+
+ if (start < HIGH_SURROGATE_MIN) {
+
+ // The range starts and ends before the high surrogate range.
+ // E.g. (0, 0x10).
+ if (end < HIGH_SURROGATE_MIN) {
+ bmp.push(start, end + 1);
+ }
+
+ // The range starts before the high surrogate range and ends within it.
+ // E.g. (0, 0xD855).
+ if (end >= HIGH_SURROGATE_MIN && end <= HIGH_SURROGATE_MAX) {
+ bmp.push(start, HIGH_SURROGATE_MIN);
+ loneHighSurrogates.push(HIGH_SURROGATE_MIN, end + 1);
+ }
+
+ // The range starts before the high surrogate range and ends in the low
+ // surrogate range. E.g. (0, 0xDCFF).
+ if (end >= LOW_SURROGATE_MIN && end <= LOW_SURROGATE_MAX) {
+ bmp.push(start, HIGH_SURROGATE_MIN);
+ loneHighSurrogates.push(HIGH_SURROGATE_MIN, HIGH_SURROGATE_MAX + 1);
+ loneLowSurrogates.push(LOW_SURROGATE_MIN, end + 1);
+ }
+
+ // The range starts before the high surrogate range and ends after the
+ // low surrogate range. E.g. (0, 0x10FFFF).
+ if (end > LOW_SURROGATE_MAX) {
+ bmp.push(start, HIGH_SURROGATE_MIN);
+ loneHighSurrogates.push(HIGH_SURROGATE_MIN, HIGH_SURROGATE_MAX + 1);
+ loneLowSurrogates.push(LOW_SURROGATE_MIN, LOW_SURROGATE_MAX + 1);
+ if (end <= 0xFFFF) {
+ bmp.push(LOW_SURROGATE_MAX + 1, end + 1);
+ } else {
+ bmp.push(LOW_SURROGATE_MAX + 1, 0xFFFF + 1);
+ astral.push(0xFFFF + 1, end + 1);
+ }
+ }
+
+ } else if (start >= HIGH_SURROGATE_MIN && start <= HIGH_SURROGATE_MAX) {
+
+ // The range starts and ends in the high surrogate range.
+ // E.g. (0xD855, 0xD866).
+ if (end >= HIGH_SURROGATE_MIN && end <= HIGH_SURROGATE_MAX) {
+ loneHighSurrogates.push(start, end + 1);
+ }
+
+ // The range starts in the high surrogate range and ends in the low
+ // surrogate range. E.g. (0xD855, 0xDCFF).
+ if (end >= LOW_SURROGATE_MIN && end <= LOW_SURROGATE_MAX) {
+ loneHighSurrogates.push(start, HIGH_SURROGATE_MAX + 1);
+ loneLowSurrogates.push(LOW_SURROGATE_MIN, end + 1);
+ }
+
+ // The range starts in the high surrogate range and ends after the low
+ // surrogate range. E.g. (0xD855, 0x10FFFF).
+ if (end > LOW_SURROGATE_MAX) {
+ loneHighSurrogates.push(start, HIGH_SURROGATE_MAX + 1);
+ loneLowSurrogates.push(LOW_SURROGATE_MIN, LOW_SURROGATE_MAX + 1);
+ if (end <= 0xFFFF) {
+ bmp.push(LOW_SURROGATE_MAX + 1, end + 1);
+ } else {
+ bmp.push(LOW_SURROGATE_MAX + 1, 0xFFFF + 1);
+ astral.push(0xFFFF + 1, end + 1);
+ }
+ }
+
+ } else if (start >= LOW_SURROGATE_MIN && start <= LOW_SURROGATE_MAX) {
+
+ // The range starts and ends in the low surrogate range.
+ // E.g. (0xDCFF, 0xDDFF).
+ if (end >= LOW_SURROGATE_MIN && end <= LOW_SURROGATE_MAX) {
+ loneLowSurrogates.push(start, end + 1);
+ }
+
+ // The range starts in the low surrogate range and ends after the low
+ // surrogate range. E.g. (0xDCFF, 0x10FFFF).
+ if (end > LOW_SURROGATE_MAX) {
+ loneLowSurrogates.push(start, LOW_SURROGATE_MAX + 1);
+ if (end <= 0xFFFF) {
+ bmp.push(LOW_SURROGATE_MAX + 1, end + 1);
+ } else {
+ bmp.push(LOW_SURROGATE_MAX + 1, 0xFFFF + 1);
+ astral.push(0xFFFF + 1, end + 1);
+ }
+ }
+
+ } else if (start > LOW_SURROGATE_MAX && start <= 0xFFFF) {
+
+ // The range starts and ends after the low surrogate range.
+ // E.g. (0xFFAA, 0x10FFFF).
+ if (end <= 0xFFFF) {
+ bmp.push(start, end + 1);
+ } else {
+ bmp.push(start, 0xFFFF + 1);
+ astral.push(0xFFFF + 1, end + 1);
+ }
+
+ } else {
+
+ // The range starts and ends in the astral range.
+ astral.push(start, end + 1);
+
+ }
+
+ index += 2;
+ }
+ return {
+ 'loneHighSurrogates': loneHighSurrogates,
+ 'loneLowSurrogates': loneLowSurrogates,
+ 'bmp': bmp,
+ 'astral': astral
+ };
+ };
+
+ var optimizeSurrogateMappings = function(surrogateMappings) {
+ var result = [];
+ var tmpLow = [];
+ var addLow = false;
+ var mapping;
+ var nextMapping;
+ var highSurrogates;
+ var lowSurrogates;
+ var nextHighSurrogates;
+ var nextLowSurrogates;
+ var index = -1;
+ var length = surrogateMappings.length;
+ while (++index < length) {
+ mapping = surrogateMappings[index];
+ nextMapping = surrogateMappings[index + 1];
+ if (!nextMapping) {
+ result.push(mapping);
+ continue;
+ }
+ highSurrogates = mapping[0];
+ lowSurrogates = mapping[1];
+ nextHighSurrogates = nextMapping[0];
+ nextLowSurrogates = nextMapping[1];
+
+ // Check for identical high surrogate ranges.
+ tmpLow = lowSurrogates;
+ while (
+ nextHighSurrogates &&
+ highSurrogates[0] == nextHighSurrogates[0] &&
+ highSurrogates[1] == nextHighSurrogates[1]
+ ) {
+ // Merge with the next item.
+ if (dataIsSingleton(nextLowSurrogates)) {
+ tmpLow = dataAdd(tmpLow, nextLowSurrogates[0]);
+ } else {
+ tmpLow = dataAddRange(
+ tmpLow,
+ nextLowSurrogates[0],
+ nextLowSurrogates[1] - 1
+ );
+ }
+ ++index;
+ mapping = surrogateMappings[index];
+ highSurrogates = mapping[0];
+ lowSurrogates = mapping[1];
+ nextMapping = surrogateMappings[index + 1];
+ nextHighSurrogates = nextMapping && nextMapping[0];
+ nextLowSurrogates = nextMapping && nextMapping[1];
+ addLow = true;
+ }
+ result.push([
+ highSurrogates,
+ addLow ? tmpLow : lowSurrogates
+ ]);
+ addLow = false;
+ }
+ return optimizeByLowSurrogates(result);
+ };
+
+ var optimizeByLowSurrogates = function(surrogateMappings) {
+ if (surrogateMappings.length == 1) {
+ return surrogateMappings;
+ }
+ var index = -1;
+ var innerIndex = -1;
+ while (++index < surrogateMappings.length) {
+ var mapping = surrogateMappings[index];
+ var lowSurrogates = mapping[1];
+ var lowSurrogateStart = lowSurrogates[0];
+ var lowSurrogateEnd = lowSurrogates[1];
+ innerIndex = index; // Note: the loop starts at the next index.
+ while (++innerIndex < surrogateMappings.length) {
+ var otherMapping = surrogateMappings[innerIndex];
+ var otherLowSurrogates = otherMapping[1];
+ var otherLowSurrogateStart = otherLowSurrogates[0];
+ var otherLowSurrogateEnd = otherLowSurrogates[1];
+ if (
+ lowSurrogateStart == otherLowSurrogateStart &&
+ lowSurrogateEnd == otherLowSurrogateEnd
+ ) {
+ // Add the code points in the other item to this one.
+ if (dataIsSingleton(otherMapping[0])) {
+ mapping[0] = dataAdd(mapping[0], otherMapping[0][0]);
+ } else {
+ mapping[0] = dataAddRange(
+ mapping[0],
+ otherMapping[0][0],
+ otherMapping[0][1] - 1
+ );
+ }
+ // Remove the other, now redundant, item.
+ surrogateMappings.splice(innerIndex, 1);
+ --innerIndex;
+ }
+ }
+ }
+ return surrogateMappings;
+ };
+
+ var surrogateSet = function(data) {
+ // Exit early if `data` is an empty set.
+ if (!data.length) {
+ return [];
+ }
+
+ // Iterate over the data per `(start, end)` pair.
+ var index = 0;
+ var start;
+ var end;
+ var startHigh;
+ var startLow;
+ var prevStartHigh = 0;
+ var prevEndHigh = 0;
+ var tmpLow = [];
+ var endHigh;
+ var endLow;
+ var surrogateMappings = [];
+ var length = data.length;
+ var dataHigh = [];
+ while (index < length) {
+ start = data[index];
+ end = data[index + 1] - 1;
+
+ startHigh = highSurrogate(start);
+ startLow = lowSurrogate(start);
+ endHigh = highSurrogate(end);
+ endLow = lowSurrogate(end);
+
+ var startsWithLowestLowSurrogate = startLow == LOW_SURROGATE_MIN;
+ var endsWithHighestLowSurrogate = endLow == LOW_SURROGATE_MAX;
+ var complete = false;
+
+ // Append the previous high-surrogate-to-low-surrogate mappings.
+ // Step 1: `(startHigh, startLow)` to `(startHigh, LOW_SURROGATE_MAX)`.
+ if (
+ startHigh == endHigh ||
+ startsWithLowestLowSurrogate && endsWithHighestLowSurrogate
+ ) {
+ surrogateMappings.push([
+ [startHigh, endHigh + 1],
+ [startLow, endLow + 1]
+ ]);
+ complete = true;
+ } else {
+ surrogateMappings.push([
+ [startHigh, startHigh + 1],
+ [startLow, LOW_SURROGATE_MAX + 1]
+ ]);
+ }
+
+ // Step 2: `(startHigh + 1, LOW_SURROGATE_MIN)` to
+ // `(endHigh - 1, LOW_SURROGATE_MAX)`.
+ if (!complete && startHigh + 1 < endHigh) {
+ if (endsWithHighestLowSurrogate) {
+ // Combine step 2 and step 3.
+ surrogateMappings.push([
+ [startHigh + 1, endHigh + 1],
+ [LOW_SURROGATE_MIN, endLow + 1]
+ ]);
+ complete = true;
+ } else {
+ surrogateMappings.push([
+ [startHigh + 1, endHigh],
+ [LOW_SURROGATE_MIN, LOW_SURROGATE_MAX + 1]
+ ]);
+ }
+ }
+
+ // Step 3. `(endHigh, LOW_SURROGATE_MIN)` to `(endHigh, endLow)`.
+ if (!complete) {
+ surrogateMappings.push([
+ [endHigh, endHigh + 1],
+ [LOW_SURROGATE_MIN, endLow + 1]
+ ]);
+ }
+
+ prevStartHigh = startHigh;
+ prevEndHigh = endHigh;
+
+ index += 2;
+ }
+
+ // The format of `surrogateMappings` is as follows:
+ //
+ // [ surrogateMapping1, surrogateMapping2 ]
+ //
+ // i.e.:
+ //
+ // [
+ // [ highSurrogates1, lowSurrogates1 ],
+ // [ highSurrogates2, lowSurrogates2 ]
+ // ]
+ return optimizeSurrogateMappings(surrogateMappings);
+ };
+
+ var createSurrogateCharacterClasses = function(surrogateMappings) {
+ var result = [];
+ forEach(surrogateMappings, function(surrogateMapping) {
+ var highSurrogates = surrogateMapping[0];
+ var lowSurrogates = surrogateMapping[1];
+ result.push(
+ createBMPCharacterClasses(highSurrogates) +
+ createBMPCharacterClasses(lowSurrogates)
+ );
+ });
+ return result.join('|');
+ };
+
+ var createCharacterClassesFromData = function(data, bmpOnly) {
+ var result = [];
+
+ var parts = splitAtBMP(data);
+ var loneHighSurrogates = parts.loneHighSurrogates;
+ var loneLowSurrogates = parts.loneLowSurrogates;
+ var bmp = parts.bmp;
+ var astral = parts.astral;
+ var hasAstral = !dataIsEmpty(parts.astral);
+ var hasLoneHighSurrogates = !dataIsEmpty(loneHighSurrogates);
+ var hasLoneLowSurrogates = !dataIsEmpty(loneLowSurrogates);
+
+ var surrogateMappings = surrogateSet(astral);
+
+ if (bmpOnly) {
+ bmp = dataAddData(bmp, loneHighSurrogates);
+ hasLoneHighSurrogates = false;
+ bmp = dataAddData(bmp, loneLowSurrogates);
+ hasLoneLowSurrogates = false;
+ }
+
+ if (!dataIsEmpty(bmp)) {
+ // The data set contains BMP code points that are not high surrogates
+ // needed for astral code points in the set.
+ result.push(createBMPCharacterClasses(bmp));
+ }
+ if (surrogateMappings.length) {
+ // The data set contains astral code points; append character classes
+ // based on their surrogate pairs.
+ result.push(createSurrogateCharacterClasses(surrogateMappings));
+ }
+ // https://gist.github.com/mathiasbynens/bbe7f870208abcfec860
+ if (hasLoneHighSurrogates) {
+ result.push(
+ createBMPCharacterClasses(loneHighSurrogates) +
+ // Make sure the high surrogates aren’t part of a surrogate pair.
+ '(?![\\uDC00-\\uDFFF])'
+ );
+ }
+ if (hasLoneLowSurrogates) {
+ result.push(
+ // Make sure the low surrogates aren’t part of a surrogate pair.
+ '(?:[^\\uD800-\\uDBFF]|^)' +
+ createBMPCharacterClasses(loneLowSurrogates)
+ );
+ }
+ return result.join('|');
+ };
+
+ /*--------------------------------------------------------------------------*/
+
+ // `regenerate` can be used as a constructor (and new methods can be added to
+ // its prototype) but also as a regular function, the latter of which is the
+ // documented and most common usage. For that reason, it’s not capitalized.
+ var regenerate = function(value) {
+ if (arguments.length > 1) {
+ value = slice.call(arguments);
+ }
+ if (this instanceof regenerate) {
+ this.data = [];
+ return value ? this.add(value) : this;
+ }
+ return (new regenerate).add(value);
+ };
+
+ regenerate.version = '1.2.0';
+
+ var proto = regenerate.prototype;
+ extend(proto, {
+ 'add': function(value) {
+ var $this = this;
+ if (value == null) {
+ return $this;
+ }
+ if (value instanceof regenerate) {
+ // Allow passing other Regenerate instances.
+ $this.data = dataAddData($this.data, value.data);
+ return $this;
+ }
+ if (arguments.length > 1) {
+ value = slice.call(arguments);
+ }
+ if (isArray(value)) {
+ forEach(value, function(item) {
+ $this.add(item);
+ });
+ return $this;
+ }
+ $this.data = dataAdd(
+ $this.data,
+ isNumber(value) ? value : symbolToCodePoint(value)
+ );
+ return $this;
+ },
+ 'remove': function(value) {
+ var $this = this;
+ if (value == null) {
+ return $this;
+ }
+ if (value instanceof regenerate) {
+ // Allow passing other Regenerate instances.
+ $this.data = dataRemoveData($this.data, value.data);
+ return $this;
+ }
+ if (arguments.length > 1) {
+ value = slice.call(arguments);
+ }
+ if (isArray(value)) {
+ forEach(value, function(item) {
+ $this.remove(item);
+ });
+ return $this;
+ }
+ $this.data = dataRemove(
+ $this.data,
+ isNumber(value) ? value : symbolToCodePoint(value)
+ );
+ return $this;
+ },
+ 'addRange': function(start, end) {
+ var $this = this;
+ $this.data = dataAddRange($this.data,
+ isNumber(start) ? start : symbolToCodePoint(start),
+ isNumber(end) ? end : symbolToCodePoint(end)
+ );
+ return $this;
+ },
+ 'removeRange': function(start, end) {
+ var $this = this;
+ var startCodePoint = isNumber(start) ? start : symbolToCodePoint(start);
+ var endCodePoint = isNumber(end) ? end : symbolToCodePoint(end);
+ $this.data = dataRemoveRange(
+ $this.data,
+ startCodePoint,
+ endCodePoint
+ );
+ return $this;
+ },
+ 'intersection': function(argument) {
+ var $this = this;
+ // Allow passing other Regenerate instances.
+ // TODO: Optimize this by writing and using `dataIntersectionData()`.
+ var array = argument instanceof regenerate ?
+ dataToArray(argument.data) :
+ argument;
+ $this.data = dataIntersection($this.data, array);
+ return $this;
+ },
+ 'contains': function(codePoint) {
+ return dataContains(
+ this.data,
+ isNumber(codePoint) ? codePoint : symbolToCodePoint(codePoint)
+ );
+ },
+ 'clone': function() {
+ var set = new regenerate;
+ set.data = this.data.slice(0);
+ return set;
+ },
+ 'toString': function(options) {
+ var result = createCharacterClassesFromData(
+ this.data,
+ options ? options.bmpOnly : false
+ );
+ // Use `\0` instead of `\x00` where possible.
+ return result.replace(regexNull, '\\0$1');
+ },
+ 'toRegExp': function(flags) {
+ return RegExp(this.toString(), flags || '');
+ },
+ 'valueOf': function() { // Note: `valueOf` is aliased as `toArray`.
+ return dataToArray(this.data);
+ }
+ });
+
+ proto.toArray = proto.valueOf;
+
+ // Some AMD build optimizers, like r.js, check for specific condition patterns
+ // like the following:
+ if (
+ typeof define == 'function' &&
+ typeof define.amd == 'object' &&
+ define.amd
+ ) {
+ define(function() {
+ return regenerate;
+ });
+ } else if (freeExports && !freeExports.nodeType) {
+ if (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+
+ freeModule.exports = regenerate;
+ } else { // in Narwhal or RingoJS v0.7.0-
+ freeExports.regenerate = regenerate;
+ }
+ } else { // in Rhino or a web browser
+ root.regenerate = regenerate;
+ }
+
+}(this));
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}],573:[function(_dereq_,module,exports){
+/**
+ * Copyright (c) 2014, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * https://raw.github.com/facebook/regenerator/master/LICENSE file. An
+ * additional grant of patent rights can be found in the PATENTS file in
+ * the same directory.
+ */
+
+var assert = _dereq_(1);
+var types = _dereq_(571).types;
+var isArray = types.builtInTypes.array;
+var b = types.builders;
+var n = types.namedTypes;
+var leap = _dereq_(575);
+var meta = _dereq_(576);
+var util = _dereq_(577);
+var runtimeProperty = util.runtimeProperty;
+var hasOwn = Object.prototype.hasOwnProperty;
+
+function Emitter(contextId) {
+ assert.ok(this instanceof Emitter);
+ n.Identifier.assert(contextId);
+
+ // Used to generate unique temporary names.
+ this.nextTempId = 0;
+
+ Object.defineProperties(this, {
+ // In order to make sure the context object does not collide with
+ // anything in the local scope, we might have to rename it, so we
+ // refer to it symbolically instead of just assuming that it will be
+ // called "context".
+ contextId: { value: contextId },
+
+ // An append-only list of Statements that grows each time this.emit is
+ // called.
+ listing: { value: [] },
+
+ // A sparse array whose keys correspond to locations in this.listing
+ // that have been marked as branch/jump targets.
+ marked: { value: [true] },
+
+ // The last location will be marked when this.getDispatchLoop is
+ // called.
+ finalLoc: { value: loc() },
+
+ // A list of all leap.TryEntry statements emitted.
+ tryEntries: { value: [] }
+ });
+
+ // The .leapManager property needs to be defined by a separate
+ // defineProperties call so that .finalLoc will be visible to the
+ // leap.LeapManager constructor.
+ Object.defineProperties(this, {
+ // Each time we evaluate the body of a loop, we tell this.leapManager
+ // to enter a nested loop context that determines the meaning of break
+ // and continue statements therein.
+ leapManager: { value: new leap.LeapManager(this) }
+ });
+}
+
+var Ep = Emitter.prototype;
+exports.Emitter = Emitter;
+
+// Offsets into this.listing that could be used as targets for branches or
+// jumps are represented as numeric Literal nodes. This representation has
+// the amazingly convenient benefit of allowing the exact value of the
+// location to be determined at any time, even after generating code that
+// refers to the location.
+function loc() {
+ return b.literal(-1);
+}
+
+// Sets the exact value of the given location to the offset of the next
+// Statement emitted.
+Ep.mark = function(loc) {
+ n.Literal.assert(loc);
+ var index = this.listing.length;
+ if (loc.value === -1) {
+ loc.value = index;
+ } else {
+ // Locations can be marked redundantly, but their values cannot change
+ // once set the first time.
+ assert.strictEqual(loc.value, index);
+ }
+ this.marked[index] = true;
+ return loc;
+};
+
+Ep.emit = function(node) {
+ if (n.Expression.check(node))
+ node = b.expressionStatement(node);
+ n.Statement.assert(node);
+ this.listing.push(node);
+};
+
+// Shorthand for emitting assignment statements. This will come in handy
+// for assignments to temporary variables.
+Ep.emitAssign = function(lhs, rhs) {
+ this.emit(this.assign(lhs, rhs));
+ return lhs;
+};
+
+// Shorthand for an assignment statement.
+Ep.assign = function(lhs, rhs) {
+ return b.expressionStatement(
+ b.assignmentExpression("=", lhs, rhs));
+};
+
+// Convenience function for generating expressions like context.next,
+// context.sent, and context.rval.
+Ep.contextProperty = function(name, computed) {
+ return b.memberExpression(
+ this.contextId,
+ computed ? b.literal(name) : b.identifier(name),
+ !!computed
+ );
+};
+
+// Shorthand for setting context.rval and jumping to `context.stop()`.
+Ep.stop = function(rval) {
+ if (rval) {
+ this.setReturnValue(rval);
+ }
+
+ this.jump(this.finalLoc);
+};
+
+Ep.setReturnValue = function(valuePath) {
+ n.Expression.assert(valuePath.value);
+
+ this.emitAssign(
+ this.contextProperty("rval"),
+ this.explodeExpression(valuePath)
+ );
+};
+
+Ep.clearPendingException = function(tryLoc, assignee) {
+ n.Literal.assert(tryLoc);
+
+ var catchCall = b.callExpression(
+ this.contextProperty("catch", true),
+ [tryLoc]
+ );
+
+ if (assignee) {
+ this.emitAssign(assignee, catchCall);
+ } else {
+ this.emit(catchCall);
+ }
+};
+
+// Emits code for an unconditional jump to the given location, even if the
+// exact value of the location is not yet known.
+Ep.jump = function(toLoc) {
+ this.emitAssign(this.contextProperty("next"), toLoc);
+ this.emit(b.breakStatement());
+};
+
+// Conditional jump.
+Ep.jumpIf = function(test, toLoc) {
+ n.Expression.assert(test);
+ n.Literal.assert(toLoc);
+
+ this.emit(b.ifStatement(
+ test,
+ b.blockStatement([
+ this.assign(this.contextProperty("next"), toLoc),
+ b.breakStatement()
+ ])
+ ));
+};
+
+// Conditional jump, with the condition negated.
+Ep.jumpIfNot = function(test, toLoc) {
+ n.Expression.assert(test);
+ n.Literal.assert(toLoc);
+
+ var negatedTest;
+ if (n.UnaryExpression.check(test) &&
+ test.operator === "!") {
+ // Avoid double negation.
+ negatedTest = test.argument;
+ } else {
+ negatedTest = b.unaryExpression("!", test);
+ }
+
+ this.emit(b.ifStatement(
+ negatedTest,
+ b.blockStatement([
+ this.assign(this.contextProperty("next"), toLoc),
+ b.breakStatement()
+ ])
+ ));
+};
+
+// Returns a unique MemberExpression that can be used to store and
+// retrieve temporary values. Since the object of the member expression is
+// the context object, which is presumed to coexist peacefully with all
+// other local variables, and since we just increment `nextTempId`
+// monotonically, uniqueness is assured.
+Ep.makeTempVar = function() {
+ return this.contextProperty("t" + this.nextTempId++);
+};
+
+Ep.getContextFunction = function(id) {
+ return b.functionExpression(
+ id || null/*Anonymous*/,
+ [this.contextId],
+ b.blockStatement([this.getDispatchLoop()]),
+ false, // Not a generator anymore!
+ false // Nor an expression.
+ );
+};
+
+// Turns this.listing into a loop of the form
+//
+// while (1) switch (context.next) {
+// case 0:
+// ...
+// case n:
+// return context.stop();
+// }
+//
+// Each marked location in this.listing will correspond to one generated
+// case statement.
+Ep.getDispatchLoop = function() {
+ var self = this;
+ var cases = [];
+ var current;
+
+ // If we encounter a break, continue, or return statement in a switch
+ // case, we can skip the rest of the statements until the next case.
+ var alreadyEnded = false;
+
+ self.listing.forEach(function(stmt, i) {
+ if (self.marked.hasOwnProperty(i)) {
+ cases.push(b.switchCase(
+ b.literal(i),
+ current = []));
+ alreadyEnded = false;
+ }
+
+ if (!alreadyEnded) {
+ current.push(stmt);
+ if (isSwitchCaseEnder(stmt))
+ alreadyEnded = true;
+ }
+ });
+
+ // Now that we know how many statements there will be in this.listing,
+ // we can finally resolve this.finalLoc.value.
+ this.finalLoc.value = this.listing.length;
+
+ cases.push(
+ b.switchCase(this.finalLoc, [
+ // Intentionally fall through to the "end" case...
+ ]),
+
+ // So that the runtime can jump to the final location without having
+ // to know its offset, we provide the "end" case as a synonym.
+ b.switchCase(b.literal("end"), [
+ // This will check/clear both context.thrown and context.rval.
+ b.returnStatement(
+ b.callExpression(this.contextProperty("stop"), [])
+ )
+ ])
+ );
+
+ return b.whileStatement(
+ b.literal(1),
+ b.switchStatement(
+ b.assignmentExpression(
+ "=",
+ this.contextProperty("prev"),
+ this.contextProperty("next")
+ ),
+ cases
+ )
+ );
+};
+
+// See comment above re: alreadyEnded.
+function isSwitchCaseEnder(stmt) {
+ return n.BreakStatement.check(stmt)
+ || n.ContinueStatement.check(stmt)
+ || n.ReturnStatement.check(stmt)
+ || n.ThrowStatement.check(stmt);
+}
+
+Ep.getTryLocsList = function() {
+ if (this.tryEntries.length === 0) {
+ // To avoid adding a needless [] to the majority of runtime.wrap
+ // argument lists, force the caller to handle this case specially.
+ return null;
+ }
+
+ var lastLocValue = 0;
+
+ return b.arrayExpression(
+ this.tryEntries.map(function(tryEntry) {
+ var thisLocValue = tryEntry.firstLoc.value;
+ assert.ok(thisLocValue >= lastLocValue, "try entries out of order");
+ lastLocValue = thisLocValue;
+
+ var ce = tryEntry.catchEntry;
+ var fe = tryEntry.finallyEntry;
+
+ var locs = [
+ tryEntry.firstLoc,
+ // The null here makes a hole in the array.
+ ce ? ce.firstLoc : null
+ ];
+
+ if (fe) {
+ locs[2] = fe.firstLoc;
+ locs[3] = fe.afterLoc;
+ }
+
+ return b.arrayExpression(locs);
+ })
+ );
+};
+
+// All side effects must be realized in order.
+
+// If any subexpression harbors a leap, all subexpressions must be
+// neutered of side effects.
+
+// No destructive modification of AST nodes.
+
+Ep.explode = function(path, ignoreResult) {
+ assert.ok(path instanceof types.NodePath);
+
+ var node = path.value;
+ var self = this;
+
+ n.Node.assert(node);
+
+ if (n.Statement.check(node))
+ return self.explodeStatement(path);
+
+ if (n.Expression.check(node))
+ return self.explodeExpression(path, ignoreResult);
+
+ if (n.Declaration.check(node))
+ throw getDeclError(node);
+
+ switch (node.type) {
+ case "Program":
+ return path.get("body").map(
+ self.explodeStatement,
+ self
+ );
+
+ case "VariableDeclarator":
+ throw getDeclError(node);
+
+ // These node types should be handled by their parent nodes
+ // (ObjectExpression, SwitchStatement, and TryStatement, respectively).
+ case "Property":
+ case "SwitchCase":
+ case "CatchClause":
+ throw new Error(
+ node.type + " nodes should be handled by their parents");
+
+ default:
+ throw new Error(
+ "unknown Node of type " +
+ JSON.stringify(node.type));
+ }
+};
+
+function getDeclError(node) {
+ return new Error(
+ "all declarations should have been transformed into " +
+ "assignments before the Exploder began its work: " +
+ JSON.stringify(node));
+}
+
+Ep.explodeStatement = function(path, labelId) {
+ assert.ok(path instanceof types.NodePath);
+
+ var stmt = path.value;
+ var self = this;
+
+ n.Statement.assert(stmt);
+
+ if (labelId) {
+ n.Identifier.assert(labelId);
+ } else {
+ labelId = null;
+ }
+
+ // Explode BlockStatement nodes even if they do not contain a yield,
+ // because we don't want or need the curly braces.
+ if (n.BlockStatement.check(stmt)) {
+ return path.get("body").each(
+ self.explodeStatement,
+ self
+ );
+ }
+
+ if (!meta.containsLeap(stmt)) {
+ // Technically we should be able to avoid emitting the statement
+ // altogether if !meta.hasSideEffects(stmt), but that leads to
+ // confusing generated code (for instance, `while (true) {}` just
+ // disappears) and is probably a more appropriate job for a dedicated
+ // dead code elimination pass.
+ self.emit(stmt);
+ return;
+ }
+
+ switch (stmt.type) {
+ case "ExpressionStatement":
+ self.explodeExpression(path.get("expression"), true);
+ break;
+
+ case "LabeledStatement":
+ var after = loc();
+
+ // Did you know you can break from any labeled block statement or
+ // control structure? Well, you can! Note: when a labeled loop is
+ // encountered, the leap.LabeledEntry created here will immediately
+ // enclose a leap.LoopEntry on the leap manager's stack, and both
+ // entries will have the same label. Though this works just fine, it
+ // may seem a bit redundant. In theory, we could check here to
+ // determine if stmt knows how to handle its own label; for example,
+ // stmt happens to be a WhileStatement and so we know it's going to
+ // establish its own LoopEntry when we explode it (below). Then this
+ // LabeledEntry would be unnecessary. Alternatively, we might be
+ // tempted not to pass stmt.label down into self.explodeStatement,
+ // because we've handled the label here, but that's a mistake because
+ // labeled loops may contain labeled continue statements, which is not
+ // something we can handle in this generic case. All in all, I think a
+ // little redundancy greatly simplifies the logic of this case, since
+ // it's clear that we handle all possible LabeledStatements correctly
+ // here, regardless of whether they interact with the leap manager
+ // themselves. Also remember that labels and break/continue-to-label
+ // statements are rare, and all of this logic happens at transform
+ // time, so it has no additional runtime cost.
+ self.leapManager.withEntry(
+ new leap.LabeledEntry(after, stmt.label),
+ function() {
+ self.explodeStatement(path.get("body"), stmt.label);
+ }
+ );
+
+ self.mark(after);
+
+ break;
+
+ case "WhileStatement":
+ var before = loc();
+ var after = loc();
+
+ self.mark(before);
+ self.jumpIfNot(self.explodeExpression(path.get("test")), after);
+ self.leapManager.withEntry(
+ new leap.LoopEntry(after, before, labelId),
+ function() { self.explodeStatement(path.get("body")); }
+ );
+ self.jump(before);
+ self.mark(after);
+
+ break;
+
+ case "DoWhileStatement":
+ var first = loc();
+ var test = loc();
+ var after = loc();
+
+ self.mark(first);
+ self.leapManager.withEntry(
+ new leap.LoopEntry(after, test, labelId),
+ function() { self.explode(path.get("body")); }
+ );
+ self.mark(test);
+ self.jumpIf(self.explodeExpression(path.get("test")), first);
+ self.mark(after);
+
+ break;
+
+ case "ForStatement":
+ var head = loc();
+ var update = loc();
+ var after = loc();
+
+ if (stmt.init) {
+ // We pass true here to indicate that if stmt.init is an expression
+ // then we do not care about its result.
+ self.explode(path.get("init"), true);
+ }
+
+ self.mark(head);
+
+ if (stmt.test) {
+ self.jumpIfNot(self.explodeExpression(path.get("test")), after);
+ } else {
+ // No test means continue unconditionally.
+ }
+
+ self.leapManager.withEntry(
+ new leap.LoopEntry(after, update, labelId),
+ function() { self.explodeStatement(path.get("body")); }
+ );
+
+ self.mark(update);
+
+ if (stmt.update) {
+ // We pass true here to indicate that if stmt.update is an
+ // expression then we do not care about its result.
+ self.explode(path.get("update"), true);
+ }
+
+ self.jump(head);
+
+ self.mark(after);
+
+ break;
+
+ case "ForInStatement":
+ var head = loc();
+ var after = loc();
+
+ var keyIterNextFn = self.makeTempVar();
+ self.emitAssign(
+ keyIterNextFn,
+ b.callExpression(
+ runtimeProperty("keys"),
+ [self.explodeExpression(path.get("right"))]
+ )
+ );
+
+ self.mark(head);
+
+ var keyInfoTmpVar = self.makeTempVar();
+ self.jumpIf(
+ b.memberExpression(
+ b.assignmentExpression(
+ "=",
+ keyInfoTmpVar,
+ b.callExpression(keyIterNextFn, [])
+ ),
+ b.identifier("done"),
+ false
+ ),
+ after
+ );
+
+ self.emitAssign(
+ stmt.left,
+ b.memberExpression(
+ keyInfoTmpVar,
+ b.identifier("value"),
+ false
+ )
+ );
+
+ self.leapManager.withEntry(
+ new leap.LoopEntry(after, head, labelId),
+ function() { self.explodeStatement(path.get("body")); }
+ );
+
+ self.jump(head);
+
+ self.mark(after);
+
+ break;
+
+ case "BreakStatement":
+ self.emitAbruptCompletion({
+ type: "break",
+ target: self.leapManager.getBreakLoc(stmt.label)
+ });
+
+ break;
+
+ case "ContinueStatement":
+ self.emitAbruptCompletion({
+ type: "continue",
+ target: self.leapManager.getContinueLoc(stmt.label)
+ });
+
+ break;
+
+ case "SwitchStatement":
+ // Always save the discriminant into a temporary variable in case the
+ // test expressions overwrite values like context.sent.
+ var disc = self.emitAssign(
+ self.makeTempVar(),
+ self.explodeExpression(path.get("discriminant"))
+ );
+
+ var after = loc();
+ var defaultLoc = loc();
+ var condition = defaultLoc;
+ var caseLocs = [];
+
+ // If there are no cases, .cases might be undefined.
+ var cases = stmt.cases || [];
+
+ for (var i = cases.length - 1; i >= 0; --i) {
+ var c = cases[i];
+ n.SwitchCase.assert(c);
+
+ if (c.test) {
+ condition = b.conditionalExpression(
+ b.binaryExpression("===", disc, c.test),
+ caseLocs[i] = loc(),
+ condition
+ );
+ } else {
+ caseLocs[i] = defaultLoc;
+ }
+ }
+
+ self.jump(self.explodeExpression(
+ new types.NodePath(condition, path, "discriminant")
+ ));
+
+ self.leapManager.withEntry(
+ new leap.SwitchEntry(after),
+ function() {
+ path.get("cases").each(function(casePath) {
+ var c = casePath.value;
+ var i = casePath.name;
+
+ self.mark(caseLocs[i]);
+
+ casePath.get("consequent").each(
+ self.explodeStatement,
+ self
+ );
+ });
+ }
+ );
+
+ self.mark(after);
+ if (defaultLoc.value === -1) {
+ self.mark(defaultLoc);
+ assert.strictEqual(after.value, defaultLoc.value);
+ }
+
+ break;
+
+ case "IfStatement":
+ var elseLoc = stmt.alternate && loc();
+ var after = loc();
+
+ self.jumpIfNot(
+ self.explodeExpression(path.get("test")),
+ elseLoc || after
+ );
+
+ self.explodeStatement(path.get("consequent"));
+
+ if (elseLoc) {
+ self.jump(after);
+ self.mark(elseLoc);
+ self.explodeStatement(path.get("alternate"));
+ }
+
+ self.mark(after);
+
+ break;
+
+ case "ReturnStatement":
+ self.emitAbruptCompletion({
+ type: "return",
+ value: self.explodeExpression(path.get("argument"))
+ });
+
+ break;
+
+ case "WithStatement":
+ throw new Error(
+ node.type + " not supported in generator functions.");
+
+ case "TryStatement":
+ var after = loc();
+
+ var handler = stmt.handler;
+ if (!handler && stmt.handlers) {
+ handler = stmt.handlers[0] || null;
+ }
+
+ var catchLoc = handler && loc();
+ var catchEntry = catchLoc && new leap.CatchEntry(
+ catchLoc,
+ handler.param
+ );
+
+ var finallyLoc = stmt.finalizer && loc();
+ var finallyEntry = finallyLoc &&
+ new leap.FinallyEntry(finallyLoc, after);
+
+ var tryEntry = new leap.TryEntry(
+ self.getUnmarkedCurrentLoc(),
+ catchEntry,
+ finallyEntry
+ );
+
+ self.tryEntries.push(tryEntry);
+ self.updateContextPrevLoc(tryEntry.firstLoc);
+
+ self.leapManager.withEntry(tryEntry, function() {
+ self.explodeStatement(path.get("block"));
+
+ if (catchLoc) {
+ if (finallyLoc) {
+ // If we have both a catch block and a finally block, then
+ // because we emit the catch block first, we need to jump over
+ // it to the finally block.
+ self.jump(finallyLoc);
+
+ } else {
+ // If there is no finally block, then we need to jump over the
+ // catch block to the fall-through location.
+ self.jump(after);
+ }
+
+ self.updateContextPrevLoc(self.mark(catchLoc));
+
+ var bodyPath = path.get("handler", "body");
+ var safeParam = self.makeTempVar();
+ self.clearPendingException(tryEntry.firstLoc, safeParam);
+
+ var catchScope = bodyPath.scope;
+ var catchParamName = handler.param.name;
+ n.CatchClause.assert(catchScope.node);
+ assert.strictEqual(catchScope.lookup(catchParamName), catchScope);
+
+ types.visit(bodyPath, {
+ visitIdentifier: function(path) {
+ if (util.isReference(path, catchParamName) &&
+ path.scope.lookup(catchParamName) === catchScope) {
+ return safeParam;
+ }
+
+ this.traverse(path);
+ },
+
+ visitFunction: function(path) {
+ if (path.scope.declares(catchParamName)) {
+ // Don't descend into nested scopes that shadow the catch
+ // parameter with their own declarations. This isn't
+ // logically necessary because of the path.scope.lookup we
+ // do in visitIdentifier, but it saves time.
+ return false;
+ }
+
+ this.traverse(path);
+ }
+ });
+
+ self.leapManager.withEntry(catchEntry, function() {
+ self.explodeStatement(bodyPath);
+ });
+ }
+
+ if (finallyLoc) {
+ self.updateContextPrevLoc(self.mark(finallyLoc));
+
+ self.leapManager.withEntry(finallyEntry, function() {
+ self.explodeStatement(path.get("finalizer"));
+ });
+
+ self.emit(b.returnStatement(b.callExpression(
+ self.contextProperty("finish"),
+ [finallyEntry.firstLoc]
+ )));
+ }
+ });
+
+ self.mark(after);
+
+ break;
+
+ case "ThrowStatement":
+ self.emit(b.throwStatement(
+ self.explodeExpression(path.get("argument"))
+ ));
+
+ break;
+
+ default:
+ throw new Error(
+ "unknown Statement of type " +
+ JSON.stringify(stmt.type));
+ }
+};
+
+Ep.emitAbruptCompletion = function(record) {
+ if (!isValidCompletion(record)) {
+ assert.ok(
+ false,
+ "invalid completion record: " +
+ JSON.stringify(record)
+ );
+ }
+
+ assert.notStrictEqual(
+ record.type, "normal",
+ "normal completions are not abrupt"
+ );
+
+ var abruptArgs = [b.literal(record.type)];
+
+ if (record.type === "break" ||
+ record.type === "continue") {
+ n.Literal.assert(record.target);
+ abruptArgs[1] = record.target;
+ } else if (record.type === "return" ||
+ record.type === "throw") {
+ if (record.value) {
+ n.Expression.assert(record.value);
+ abruptArgs[1] = record.value;
+ }
+ }
+
+ this.emit(
+ b.returnStatement(
+ b.callExpression(
+ this.contextProperty("abrupt"),
+ abruptArgs
+ )
+ )
+ );
+};
+
+function isValidCompletion(record) {
+ var type = record.type;
+
+ if (type === "normal") {
+ return !hasOwn.call(record, "target");
+ }
+
+ if (type === "break" ||
+ type === "continue") {
+ return !hasOwn.call(record, "value")
+ && n.Literal.check(record.target);
+ }
+
+ if (type === "return" ||
+ type === "throw") {
+ return hasOwn.call(record, "value")
+ && !hasOwn.call(record, "target");
+ }
+
+ return false;
+}
+
+
+// Not all offsets into emitter.listing are potential jump targets. For
+// example, execution typically falls into the beginning of a try block
+// without jumping directly there. This method returns the current offset
+// without marking it, so that a switch case will not necessarily be
+// generated for this offset (I say "not necessarily" because the same
+// location might end up being marked in the process of emitting other
+// statements). There's no logical harm in marking such locations as jump
+// targets, but minimizing the number of switch cases keeps the generated
+// code shorter.
+Ep.getUnmarkedCurrentLoc = function() {
+ return b.literal(this.listing.length);
+};
+
+// The context.prev property takes the value of context.next whenever we
+// evaluate the switch statement discriminant, which is generally good
+// enough for tracking the last location we jumped to, but sometimes
+// context.prev needs to be more precise, such as when we fall
+// successfully out of a try block and into a finally block without
+// jumping. This method exists to update context.prev to the freshest
+// available location. If we were implementing a full interpreter, we
+// would know the location of the current instruction with complete
+// precision at all times, but we don't have that luxury here, as it would
+// be costly and verbose to set context.prev before every statement.
+Ep.updateContextPrevLoc = function(loc) {
+ if (loc) {
+ n.Literal.assert(loc);
+
+ if (loc.value === -1) {
+ // If an uninitialized location literal was passed in, set its value
+ // to the current this.listing.length.
+ loc.value = this.listing.length;
+ } else {
+ // Otherwise assert that the location matches the current offset.
+ assert.strictEqual(loc.value, this.listing.length);
+ }
+
+ } else {
+ loc = this.getUnmarkedCurrentLoc();
+ }
+
+ // Make sure context.prev is up to date in case we fell into this try
+ // statement without jumping to it. TODO Consider avoiding this
+ // assignment when we know control must have jumped here.
+ this.emitAssign(this.contextProperty("prev"), loc);
+};
+
+Ep.explodeExpression = function(path, ignoreResult) {
+ assert.ok(path instanceof types.NodePath);
+
+ var expr = path.value;
+ if (expr) {
+ n.Expression.assert(expr);
+ } else {
+ return expr;
+ }
+
+ var self = this;
+ var result; // Used optionally by several cases below.
+
+ function finish(expr) {
+ n.Expression.assert(expr);
+ if (ignoreResult) {
+ self.emit(expr);
+ } else {
+ return expr;
+ }
+ }
+
+ // If the expression does not contain a leap, then we either emit the
+ // expression as a standalone statement or return it whole.
+ if (!meta.containsLeap(expr)) {
+ return finish(expr);
+ }
+
+ // If any child contains a leap (such as a yield or labeled continue or
+ // break statement), then any sibling subexpressions will almost
+ // certainly have to be exploded in order to maintain the order of their
+ // side effects relative to the leaping child(ren).
+ var hasLeapingChildren = meta.containsLeap.onlyChildren(expr);
+
+ // In order to save the rest of explodeExpression from a combinatorial
+ // trainwreck of special cases, explodeViaTempVar is responsible for
+ // deciding when a subexpression needs to be "exploded," which is my
+ // very technical term for emitting the subexpression as an assignment
+ // to a temporary variable and the substituting the temporary variable
+ // for the original subexpression. Think of exploded view diagrams, not
+ // Michael Bay movies. The point of exploding subexpressions is to
+ // control the precise order in which the generated code realizes the
+ // side effects of those subexpressions.
+ function explodeViaTempVar(tempVar, childPath, ignoreChildResult) {
+ assert.ok(childPath instanceof types.NodePath);
+
+ assert.ok(
+ !ignoreChildResult || !tempVar,
+ "Ignoring the result of a child expression but forcing it to " +
+ "be assigned to a temporary variable?"
+ );
+
+ var result = self.explodeExpression(childPath, ignoreChildResult);
+
+ if (ignoreChildResult) {
+ // Side effects already emitted above.
+
+ } else if (tempVar || (hasLeapingChildren &&
+ !n.Literal.check(result))) {
+ // If tempVar was provided, then the result will always be assigned
+ // to it, even if the result does not otherwise need to be assigned
+ // to a temporary variable. When no tempVar is provided, we have
+ // the flexibility to decide whether a temporary variable is really
+ // necessary. Unfortunately, in general, a temporary variable is
+ // required whenever any child contains a yield expression, since it
+ // is difficult to prove (at all, let alone efficiently) whether
+ // this result would evaluate to the same value before and after the
+ // yield (see #206). One narrow case where we can prove it doesn't
+ // matter (and thus we do not need a temporary variable) is when the
+ // result in question is a Literal value.
+ result = self.emitAssign(
+ tempVar || self.makeTempVar(),
+ result
+ );
+ }
+ return result;
+ }
+
+ // If ignoreResult is true, then we must take full responsibility for
+ // emitting the expression with all its side effects, and we should not
+ // return a result.
+
+ switch (expr.type) {
+ case "MemberExpression":
+ return finish(b.memberExpression(
+ self.explodeExpression(path.get("object")),
+ expr.computed
+ ? explodeViaTempVar(null, path.get("property"))
+ : expr.property,
+ expr.computed
+ ));
+
+ case "CallExpression":
+ var calleePath = path.get("callee");
+ var argsPath = path.get("arguments");
+
+ var newCallee;
+ var newArgs = [];
+
+ var hasLeapingArgs = false;
+ argsPath.each(function(argPath) {
+ hasLeapingArgs = hasLeapingArgs ||
+ meta.containsLeap(argPath.value);
+ });
+
+ if (n.MemberExpression.check(calleePath.value)) {
+ if (hasLeapingArgs) {
+ // If the arguments of the CallExpression contained any yield
+ // expressions, then we need to be sure to evaluate the callee
+ // before evaluating the arguments, but if the callee was a member
+ // expression, then we must be careful that the object of the
+ // member expression still gets bound to `this` for the call.
+
+ var newObject = explodeViaTempVar(
+ // Assign the exploded callee.object expression to a temporary
+ // variable so that we can use it twice without reevaluating it.
+ self.makeTempVar(),
+ calleePath.get("object")
+ );
+
+ var newProperty = calleePath.value.computed
+ ? explodeViaTempVar(null, calleePath.get("property"))
+ : calleePath.value.property;
+
+ newArgs.unshift(newObject);
+
+ newCallee = b.memberExpression(
+ b.memberExpression(
+ newObject,
+ newProperty,
+ calleePath.value.computed
+ ),
+ b.identifier("call"),
+ false
+ );
+
+ } else {
+ newCallee = self.explodeExpression(calleePath);
+ }
+
+ } else {
+ newCallee = self.explodeExpression(calleePath);
+
+ if (n.MemberExpression.check(newCallee)) {
+ // If the callee was not previously a MemberExpression, then the
+ // CallExpression was "unqualified," meaning its `this` object
+ // should be the global object. If the exploded expression has
+ // become a MemberExpression (e.g. a context property, probably a
+ // temporary variable), then we need to force it to be unqualified
+ // by using the (0, object.property)(...) trick; otherwise, it
+ // will receive the object of the MemberExpression as its `this`
+ // object.
+ newCallee = b.sequenceExpression([
+ b.literal(0),
+ newCallee
+ ]);
+ }
+ }
+
+ argsPath.each(function(argPath) {
+ newArgs.push(explodeViaTempVar(null, argPath));
+ });
+
+ return finish(b.callExpression(
+ newCallee,
+ newArgs
+ ));
+
+ case "NewExpression":
+ return finish(b.newExpression(
+ explodeViaTempVar(null, path.get("callee")),
+ path.get("arguments").map(function(argPath) {
+ return explodeViaTempVar(null, argPath);
+ })
+ ));
+
+ case "ObjectExpression":
+ return finish(b.objectExpression(
+ path.get("properties").map(function(propPath) {
+ return b.property(
+ propPath.value.kind,
+ propPath.value.key,
+ explodeViaTempVar(null, propPath.get("value"))
+ );
+ })
+ ));
+
+ case "ArrayExpression":
+ return finish(b.arrayExpression(
+ path.get("elements").map(function(elemPath) {
+ return explodeViaTempVar(null, elemPath);
+ })
+ ));
+
+ case "SequenceExpression":
+ var lastIndex = expr.expressions.length - 1;
+
+ path.get("expressions").each(function(exprPath) {
+ if (exprPath.name === lastIndex) {
+ result = self.explodeExpression(exprPath, ignoreResult);
+ } else {
+ self.explodeExpression(exprPath, true);
+ }
+ });
+
+ return result;
+
+ case "LogicalExpression":
+ var after = loc();
+
+ if (!ignoreResult) {
+ result = self.makeTempVar();
+ }
+
+ var left = explodeViaTempVar(result, path.get("left"));
+
+ if (expr.operator === "&&") {
+ self.jumpIfNot(left, after);
+ } else {
+ assert.strictEqual(expr.operator, "||");
+ self.jumpIf(left, after);
+ }
+
+ explodeViaTempVar(result, path.get("right"), ignoreResult);
+
+ self.mark(after);
+
+ return result;
+
+ case "ConditionalExpression":
+ var elseLoc = loc();
+ var after = loc();
+ var test = self.explodeExpression(path.get("test"));
+
+ self.jumpIfNot(test, elseLoc);
+
+ if (!ignoreResult) {
+ result = self.makeTempVar();
+ }
+
+ explodeViaTempVar(result, path.get("consequent"), ignoreResult);
+ self.jump(after);
+
+ self.mark(elseLoc);
+ explodeViaTempVar(result, path.get("alternate"), ignoreResult);
+
+ self.mark(after);
+
+ return result;
+
+ case "UnaryExpression":
+ return finish(b.unaryExpression(
+ expr.operator,
+ // Can't (and don't need to) break up the syntax of the argument.
+ // Think about delete a[b].
+ self.explodeExpression(path.get("argument")),
+ !!expr.prefix
+ ));
+
+ case "BinaryExpression":
+ return finish(b.binaryExpression(
+ expr.operator,
+ explodeViaTempVar(null, path.get("left")),
+ explodeViaTempVar(null, path.get("right"))
+ ));
+
+ case "AssignmentExpression":
+ return finish(b.assignmentExpression(
+ expr.operator,
+ self.explodeExpression(path.get("left")),
+ self.explodeExpression(path.get("right"))
+ ));
+
+ case "UpdateExpression":
+ return finish(b.updateExpression(
+ expr.operator,
+ self.explodeExpression(path.get("argument")),
+ expr.prefix
+ ));
+
+ case "YieldExpression":
+ var after = loc();
+ var arg = expr.argument && self.explodeExpression(path.get("argument"));
+
+ if (arg && expr.delegate) {
+ var result = self.makeTempVar();
+
+ self.emit(b.returnStatement(b.callExpression(
+ self.contextProperty("delegateYield"), [
+ arg,
+ b.literal(result.property.name),
+ after
+ ]
+ )));
+
+ self.mark(after);
+
+ return result;
+ }
+
+ self.emitAssign(self.contextProperty("next"), after);
+ self.emit(b.returnStatement(arg || null));
+ self.mark(after);
+
+ return self.contextProperty("sent");
+
+ default:
+ throw new Error(
+ "unknown Expression of type " +
+ JSON.stringify(expr.type));
+ }
+};
+
+},{"1":1,"571":571,"575":575,"576":576,"577":577}],574:[function(_dereq_,module,exports){
+/**
+ * Copyright (c) 2014, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * https://raw.github.com/facebook/regenerator/master/LICENSE file. An
+ * additional grant of patent rights can be found in the PATENTS file in
+ * the same directory.
+ */
+
+var assert = _dereq_(1);
+var types = _dereq_(571).types;
+var n = types.namedTypes;
+var b = types.builders;
+var hasOwn = Object.prototype.hasOwnProperty;
+
+// The hoist function takes a FunctionExpression or FunctionDeclaration
+// and replaces any Declaration nodes in its body with assignments, then
+// returns a VariableDeclaration containing just the names of the removed
+// declarations.
+exports.hoist = function(funPath) {
+ assert.ok(funPath instanceof types.NodePath);
+ n.Function.assert(funPath.value);
+
+ var vars = {};
+
+ function varDeclToExpr(vdec, includeIdentifiers) {
+ n.VariableDeclaration.assert(vdec);
+ var exprs = [];
+
+ vdec.declarations.forEach(function(dec) {
+ vars[dec.id.name] = dec.id;
+
+ if (dec.init) {
+ exprs.push(b.assignmentExpression(
+ "=", dec.id, dec.init
+ ));
+ } else if (includeIdentifiers) {
+ exprs.push(dec.id);
+ }
+ });
+
+ if (exprs.length === 0)
+ return null;
+
+ if (exprs.length === 1)
+ return exprs[0];
+
+ return b.sequenceExpression(exprs);
+ }
+
+ types.visit(funPath.get("body"), {
+ visitVariableDeclaration: function(path) {
+ var expr = varDeclToExpr(path.value, false);
+ if (expr === null) {
+ path.replace();
+ } else {
+ // We don't need to traverse this expression any further because
+ // there can't be any new declarations inside an expression.
+ return b.expressionStatement(expr);
+ }
+
+ // Since the original node has been either removed or replaced,
+ // avoid traversing it any further.
+ return false;
+ },
+
+ visitForStatement: function(path) {
+ var init = path.value.init;
+ if (n.VariableDeclaration.check(init)) {
+ path.get("init").replace(varDeclToExpr(init, false));
+ }
+ this.traverse(path);
+ },
+
+ visitForInStatement: function(path) {
+ var left = path.value.left;
+ if (n.VariableDeclaration.check(left)) {
+ path.get("left").replace(varDeclToExpr(left, true));
+ }
+ this.traverse(path);
+ },
+
+ visitFunctionDeclaration: function(path) {
+ var node = path.value;
+ vars[node.id.name] = node.id;
+
+ var parentNode = path.parent.node;
+ var assignment = b.expressionStatement(
+ b.assignmentExpression(
+ "=",
+ node.id,
+ b.functionExpression(
+ node.id,
+ node.params,
+ node.body,
+ node.generator,
+ node.expression
+ )
+ )
+ );
+
+ if (n.BlockStatement.check(path.parent.node)) {
+ // Insert the assignment form before the first statement in the
+ // enclosing block.
+ path.parent.get("body").unshift(assignment);
+
+ // Remove the function declaration now that we've inserted the
+ // equivalent assignment form at the beginning of the block.
+ path.replace();
+
+ } else {
+ // If the parent node is not a block statement, then we can just
+ // replace the declaration with the equivalent assignment form
+ // without worrying about hoisting it.
+ path.replace(assignment);
+ }
+
+ // Don't hoist variables out of inner functions.
+ return false;
+ },
+
+ visitFunctionExpression: function(path) {
+ // Don't descend into nested function expressions.
+ return false;
+ }
+ });
+
+ var paramNames = {};
+ funPath.get("params").each(function(paramPath) {
+ var param = paramPath.value;
+ if (n.Identifier.check(param)) {
+ paramNames[param.name] = param;
+ } else {
+ // Variables declared by destructuring parameter patterns will be
+ // harmlessly re-declared.
+ }
+ });
+
+ var declarations = [];
+
+ Object.keys(vars).forEach(function(name) {
+ if (!hasOwn.call(paramNames, name)) {
+ declarations.push(b.variableDeclarator(vars[name], null));
+ }
+ });
+
+ if (declarations.length === 0) {
+ return null; // Be sure to handle this case!
+ }
+
+ return b.variableDeclaration("var", declarations);
+};
+
+},{"1":1,"571":571}],575:[function(_dereq_,module,exports){
+/**
+ * Copyright (c) 2014, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * https://raw.github.com/facebook/regenerator/master/LICENSE file. An
+ * additional grant of patent rights can be found in the PATENTS file in
+ * the same directory.
+ */
+
+var assert = _dereq_(1);
+var types = _dereq_(571).types;
+var n = types.namedTypes;
+var b = types.builders;
+var inherits = _dereq_(13).inherits;
+var hasOwn = Object.prototype.hasOwnProperty;
+
+function Entry() {
+ assert.ok(this instanceof Entry);
+}
+
+function FunctionEntry(returnLoc) {
+ Entry.call(this);
+ n.Literal.assert(returnLoc);
+ this.returnLoc = returnLoc;
+}
+
+inherits(FunctionEntry, Entry);
+exports.FunctionEntry = FunctionEntry;
+
+function LoopEntry(breakLoc, continueLoc, label) {
+ Entry.call(this);
+
+ n.Literal.assert(breakLoc);
+ n.Literal.assert(continueLoc);
+
+ if (label) {
+ n.Identifier.assert(label);
+ } else {
+ label = null;
+ }
+
+ this.breakLoc = breakLoc;
+ this.continueLoc = continueLoc;
+ this.label = label;
+}
+
+inherits(LoopEntry, Entry);
+exports.LoopEntry = LoopEntry;
+
+function SwitchEntry(breakLoc) {
+ Entry.call(this);
+ n.Literal.assert(breakLoc);
+ this.breakLoc = breakLoc;
+}
+
+inherits(SwitchEntry, Entry);
+exports.SwitchEntry = SwitchEntry;
+
+function TryEntry(firstLoc, catchEntry, finallyEntry) {
+ Entry.call(this);
+
+ n.Literal.assert(firstLoc);
+
+ if (catchEntry) {
+ assert.ok(catchEntry instanceof CatchEntry);
+ } else {
+ catchEntry = null;
+ }
+
+ if (finallyEntry) {
+ assert.ok(finallyEntry instanceof FinallyEntry);
+ } else {
+ finallyEntry = null;
+ }
+
+ // Have to have one or the other (or both).
+ assert.ok(catchEntry || finallyEntry);
+
+ this.firstLoc = firstLoc;
+ this.catchEntry = catchEntry;
+ this.finallyEntry = finallyEntry;
+}
+
+inherits(TryEntry, Entry);
+exports.TryEntry = TryEntry;
+
+function CatchEntry(firstLoc, paramId) {
+ Entry.call(this);
+
+ n.Literal.assert(firstLoc);
+ n.Identifier.assert(paramId);
+
+ this.firstLoc = firstLoc;
+ this.paramId = paramId;
+}
+
+inherits(CatchEntry, Entry);
+exports.CatchEntry = CatchEntry;
+
+function FinallyEntry(firstLoc, afterLoc) {
+ Entry.call(this);
+ n.Literal.assert(firstLoc);
+ n.Literal.assert(afterLoc);
+ this.firstLoc = firstLoc;
+ this.afterLoc = afterLoc;
+}
+
+inherits(FinallyEntry, Entry);
+exports.FinallyEntry = FinallyEntry;
+
+function LabeledEntry(breakLoc, label) {
+ Entry.call(this);
+
+ n.Literal.assert(breakLoc);
+ n.Identifier.assert(label);
+
+ this.breakLoc = breakLoc;
+ this.label = label;
+}
+
+inherits(LabeledEntry, Entry);
+exports.LabeledEntry = LabeledEntry;
+
+function LeapManager(emitter) {
+ assert.ok(this instanceof LeapManager);
+
+ var Emitter = _dereq_(573).Emitter;
+ assert.ok(emitter instanceof Emitter);
+
+ this.emitter = emitter;
+ this.entryStack = [new FunctionEntry(emitter.finalLoc)];
+}
+
+var LMp = LeapManager.prototype;
+exports.LeapManager = LeapManager;
+
+LMp.withEntry = function(entry, callback) {
+ assert.ok(entry instanceof Entry);
+ this.entryStack.push(entry);
+ try {
+ callback.call(this.emitter);
+ } finally {
+ var popped = this.entryStack.pop();
+ assert.strictEqual(popped, entry);
+ }
+};
+
+LMp._findLeapLocation = function(property, label) {
+ for (var i = this.entryStack.length - 1; i >= 0; --i) {
+ var entry = this.entryStack[i];
+ var loc = entry[property];
+ if (loc) {
+ if (label) {
+ if (entry.label &&
+ entry.label.name === label.name) {
+ return loc;
+ }
+ } else if (entry instanceof LabeledEntry) {
+ // Ignore LabeledEntry entries unless we are actually breaking to
+ // a label.
+ } else {
+ return loc;
+ }
+ }
+ }
+
+ return null;
+};
+
+LMp.getBreakLoc = function(label) {
+ return this._findLeapLocation("breakLoc", label);
+};
+
+LMp.getContinueLoc = function(label) {
+ return this._findLeapLocation("continueLoc", label);
+};
+
+},{"1":1,"13":13,"571":571,"573":573}],576:[function(_dereq_,module,exports){
+/**
+ * Copyright (c) 2014, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * https://raw.github.com/facebook/regenerator/master/LICENSE file. An
+ * additional grant of patent rights can be found in the PATENTS file in
+ * the same directory.
+ */
+
+var assert = _dereq_(1);
+var m = _dereq_(560).makeAccessor();
+var types = _dereq_(571).types;
+var isArray = types.builtInTypes.array;
+var n = types.namedTypes;
+var hasOwn = Object.prototype.hasOwnProperty;
+
+function makePredicate(propertyName, knownTypes) {
+ function onlyChildren(node) {
+ n.Node.assert(node);
+
+ // Assume no side effects until we find out otherwise.
+ var result = false;
+
+ function check(child) {
+ if (result) {
+ // Do nothing.
+ } else if (isArray.check(child)) {
+ child.some(check);
+ } else if (n.Node.check(child)) {
+ assert.strictEqual(result, false);
+ result = predicate(child);
+ }
+ return result;
+ }
+
+ types.eachField(node, function(name, child) {
+ check(child);
+ });
+
+ return result;
+ }
+
+ function predicate(node) {
+ n.Node.assert(node);
+
+ var meta = m(node);
+ if (hasOwn.call(meta, propertyName))
+ return meta[propertyName];
+
+ // Certain types are "opaque," which means they have no side
+ // effects or leaps and we don't care about their subexpressions.
+ if (hasOwn.call(opaqueTypes, node.type))
+ return meta[propertyName] = false;
+
+ if (hasOwn.call(knownTypes, node.type))
+ return meta[propertyName] = true;
+
+ return meta[propertyName] = onlyChildren(node);
+ }
+
+ predicate.onlyChildren = onlyChildren;
+
+ return predicate;
+}
+
+var opaqueTypes = {
+ FunctionExpression: true
+};
+
+// These types potentially have side effects regardless of what side
+// effects their subexpressions have.
+var sideEffectTypes = {
+ CallExpression: true, // Anything could happen!
+ ForInStatement: true, // Modifies the key variable.
+ UnaryExpression: true, // Think delete.
+ BinaryExpression: true, // Might invoke .toString() or .valueOf().
+ AssignmentExpression: true, // Side-effecting by definition.
+ UpdateExpression: true, // Updates are essentially assignments.
+ NewExpression: true // Similar to CallExpression.
+};
+
+// These types are the direct cause of all leaps in control flow.
+var leapTypes = {
+ YieldExpression: true,
+ BreakStatement: true,
+ ContinueStatement: true,
+ ReturnStatement: true,
+ ThrowStatement: true
+};
+
+// All leap types are also side effect types.
+for (var type in leapTypes) {
+ if (hasOwn.call(leapTypes, type)) {
+ sideEffectTypes[type] = leapTypes[type];
+ }
+}
+
+exports.hasSideEffects = makePredicate("hasSideEffects", sideEffectTypes);
+exports.containsLeap = makePredicate("containsLeap", leapTypes);
+
+},{"1":1,"560":560,"571":571}],577:[function(_dereq_,module,exports){
+/**
+ * Copyright (c) 2014, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * https://raw.github.com/facebook/regenerator/master/LICENSE file. An
+ * additional grant of patent rights can be found in the PATENTS file in
+ * the same directory.
+ */
+
+var assert = _dereq_(1);
+var types = _dereq_(571).types;
+var n = types.namedTypes;
+var b = types.builders;
+var hasOwn = Object.prototype.hasOwnProperty;
+
+exports.defaults = function(obj) {
+ var len = arguments.length;
+ var extension;
+
+ for (var i = 1; i < len; ++i) {
+ if ((extension = arguments[i])) {
+ for (var key in extension) {
+ if (hasOwn.call(extension, key) && !hasOwn.call(obj, key)) {
+ obj[key] = extension[key];
+ }
+ }
+ }
+ }
+
+ return obj;
+};
+
+exports.runtimeProperty = function(name) {
+ return b.memberExpression(
+ b.identifier("regeneratorRuntime"),
+ b.identifier(name),
+ false
+ );
+};
+
+// Inspired by the isReference function from ast-util:
+// https://github.com/eventualbuddha/ast-util/blob/9bf91c5ce8/lib/index.js#L466-L506
+exports.isReference = function(path, name) {
+ var node = path.value;
+
+ if (!n.Identifier.check(node)) {
+ return false;
+ }
+
+ if (name && node.name !== name) {
+ return false;
+ }
+
+ var parent = path.parent.value;
+
+ switch (parent.type) {
+ case "VariableDeclarator":
+ return path.name === "init";
+
+ case "MemberExpression":
+ return path.name === "object" || (
+ parent.computed && path.name === "property"
+ );
+
+ case "FunctionExpression":
+ case "FunctionDeclaration":
+ case "ArrowFunctionExpression":
+ if (path.name === "id") {
+ return false;
+ }
+
+ if (path.parentPath.name === "params" &&
+ parent.params === path.parentPath.value &&
+ parent.params[path.name] === node) {
+ return false;
+ }
+
+ return true;
+
+ case "ClassDeclaration":
+ case "ClassExpression":
+ return path.name !== "id";
+
+ case "CatchClause":
+ return path.name !== "param";
+
+ case "Property":
+ case "MethodDefinition":
+ return path.name !== "key";
+
+ case "ImportSpecifier":
+ case "ImportDefaultSpecifier":
+ case "ImportNamespaceSpecifier":
+ case "LabeledStatement":
+ return false;
+
+ default:
+ return true;
+ }
+};
+
+},{"1":1,"571":571}],578:[function(_dereq_,module,exports){
+/**
+ * Copyright (c) 2014, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * https://raw.github.com/facebook/regenerator/master/LICENSE file. An
+ * additional grant of patent rights can be found in the PATENTS file in
+ * the same directory.
+ */
+
+var assert = _dereq_(1);
+var fs = _dereq_(3);
+var recast = _dereq_(571);
+var types = recast.types;
+var n = types.namedTypes;
+var b = types.builders;
+var isArray = types.builtInTypes.array;
+var isObject = types.builtInTypes.object;
+var NodePath = types.NodePath;
+var hoist = _dereq_(574).hoist;
+var Emitter = _dereq_(573).Emitter;
+var util = _dereq_(577);
+var runtimeProperty = util.runtimeProperty;
+var getMarkInfo = _dereq_(560).makeAccessor();
+
+exports.transform = function transform(node, options) {
+ options = options || {};
+
+ var path = node instanceof NodePath ? node : new NodePath(node);
+ visitor.visit(path, options);
+ node = path.value;
+
+ if (options.includeRuntime === true ||
+ (options.includeRuntime === 'if used' && visitor.wasChangeReported())) {
+ injectRuntime(n.File.check(node) ? node.program : node);
+ }
+
+ options.madeChanges = visitor.wasChangeReported();
+
+ return node;
+};
+
+function injectRuntime(program) {
+ n.Program.assert(program);
+
+ // Include the runtime by modifying the AST rather than by concatenating
+ // strings. This technique will allow for more accurate source mapping.
+ var runtimePath = _dereq_(579).runtime.path;
+ var runtime = fs.readFileSync(runtimePath, "utf8");
+ var runtimeBody = recast.parse(runtime, {
+ sourceFileName: runtimePath
+ }).program.body;
+
+ var body = program.body;
+ body.unshift.apply(body, runtimeBody);
+}
+
+var visitor = types.PathVisitor.fromMethodsObject({
+ reset: function(node, options) {
+ this.options = options;
+ },
+
+ visitFunction: function(path) {
+ // Calling this.traverse(path) first makes for a post-order traversal.
+ this.traverse(path);
+
+ var node = path.value;
+ var shouldTransformAsync = node.async && !this.options.disableAsync;
+
+ if (!node.generator && !shouldTransformAsync) {
+ return;
+ }
+
+ this.reportChanged();
+
+ if (node.expression) {
+ // Transform expression lambdas into normal functions.
+ node.expression = false;
+ node.body = b.blockStatement([
+ b.returnStatement(node.body)
+ ]);
+ }
+
+ if (shouldTransformAsync) {
+ awaitVisitor.visit(path.get("body"));
+ }
+
+ var outerBody = [];
+ var innerBody = [];
+ var bodyPath = path.get("body", "body");
+
+ bodyPath.each(function(childPath) {
+ var node = childPath.value;
+ if (node && node._blockHoist != null) {
+ outerBody.push(node);
+ } else {
+ innerBody.push(node);
+ }
+ });
+
+ if (outerBody.length > 0) {
+ // Only replace the inner body if we actually hoisted any statements
+ // to the outer body.
+ bodyPath.replace(innerBody);
+ }
+
+ var outerFnExpr = getOuterFnExpr(path);
+ // Note that getOuterFnExpr has the side-effect of ensuring that the
+ // function has a name (so node.id will always be an Identifier), even
+ // if a temporary name has to be synthesized.
+ n.Identifier.assert(node.id);
+ var innerFnId = b.identifier(node.id.name + "$");
+ var contextId = path.scope.declareTemporary("context$");
+ var argsId = path.scope.declareTemporary("args$");
+
+ // Turn all declarations into vars, and replace the original
+ // declarations with equivalent assignment expressions.
+ var vars = hoist(path);
+
+ var didRenameArguments = renameArguments(path, argsId);
+ if (didRenameArguments) {
+ vars = vars || b.variableDeclaration("var", []);
+ vars.declarations.push(b.variableDeclarator(
+ argsId, b.identifier("arguments")
+ ));
+ }
+
+ var emitter = new Emitter(contextId);
+ emitter.explode(path.get("body"));
+
+ if (vars && vars.declarations.length > 0) {
+ outerBody.push(vars);
+ }
+
+ var wrapArgs = [
+ emitter.getContextFunction(innerFnId),
+ // Async functions that are not generators don't care about the
+ // outer function because they don't need it to be marked and don't
+ // inherit from its .prototype.
+ node.generator ? outerFnExpr : b.literal(null),
+ b.thisExpression()
+ ];
+
+ var tryLocsList = emitter.getTryLocsList();
+ if (tryLocsList) {
+ wrapArgs.push(tryLocsList);
+ }
+
+ var wrapCall = b.callExpression(
+ runtimeProperty(shouldTransformAsync ? "async" : "wrap"),
+ wrapArgs
+ );
+
+ outerBody.push(b.returnStatement(wrapCall));
+ node.body = b.blockStatement(outerBody);
+
+ var wasGeneratorFunction = node.generator;
+ if (wasGeneratorFunction) {
+ node.generator = false;
+ }
+
+ if (shouldTransformAsync) {
+ node.async = false;
+ }
+
+ if (wasGeneratorFunction &&
+ n.Expression.check(node)) {
+ return b.callExpression(runtimeProperty("mark"), [node]);
+ }
+ },
+
+ visitForOfStatement: function(path) {
+ this.traverse(path);
+
+ var node = path.value;
+ var tempIterId = path.scope.declareTemporary("t$");
+ var tempIterDecl = b.variableDeclarator(
+ tempIterId,
+ b.callExpression(
+ runtimeProperty("values"),
+ [node.right]
+ )
+ );
+
+ var tempInfoId = path.scope.declareTemporary("t$");
+ var tempInfoDecl = b.variableDeclarator(tempInfoId, null);
+
+ var init = node.left;
+ var loopId;
+ if (n.VariableDeclaration.check(init)) {
+ loopId = init.declarations[0].id;
+ init.declarations.push(tempIterDecl, tempInfoDecl);
+ } else {
+ loopId = init;
+ init = b.variableDeclaration("var", [
+ tempIterDecl,
+ tempInfoDecl
+ ]);
+ }
+ n.Identifier.assert(loopId);
+
+ var loopIdAssignExprStmt = b.expressionStatement(
+ b.assignmentExpression(
+ "=",
+ loopId,
+ b.memberExpression(
+ tempInfoId,
+ b.identifier("value"),
+ false
+ )
+ )
+ );
+
+ if (n.BlockStatement.check(node.body)) {
+ node.body.body.unshift(loopIdAssignExprStmt);
+ } else {
+ node.body = b.blockStatement([
+ loopIdAssignExprStmt,
+ node.body
+ ]);
+ }
+
+ return b.forStatement(
+ init,
+ b.unaryExpression(
+ "!",
+ b.memberExpression(
+ b.assignmentExpression(
+ "=",
+ tempInfoId,
+ b.callExpression(
+ b.memberExpression(
+ tempIterId,
+ b.identifier("next"),
+ false
+ ),
+ []
+ )
+ ),
+ b.identifier("done"),
+ false
+ )
+ ),
+ null,
+ node.body
+ );
+ }
+});
+
+// Given a NodePath for a Function, return an Expression node that can be
+// used to refer reliably to the function object from inside the function.
+// This expression is essentially a replacement for arguments.callee, with
+// the key advantage that it works in strict mode.
+function getOuterFnExpr(funPath) {
+ var node = funPath.value;
+ n.Function.assert(node);
+
+ if (node.generator && // Non-generator functions don't need to be marked.
+ n.FunctionDeclaration.check(node)) {
+ var pp = funPath.parent;
+
+ while (pp && !(n.BlockStatement.check(pp.value) ||
+ n.Program.check(pp.value))) {
+ pp = pp.parent;
+ }
+
+ if (!pp) {
+ return node.id;
+ }
+
+ var markDecl = getRuntimeMarkDecl(pp);
+ var markedArray = markDecl.declarations[0].id;
+ var funDeclIdArray = markDecl.declarations[0].init.callee.object;
+ n.ArrayExpression.assert(funDeclIdArray);
+
+ var index = funDeclIdArray.elements.length;
+ funDeclIdArray.elements.push(node.id);
+
+ return b.memberExpression(
+ markedArray,
+ b.literal(index),
+ true
+ );
+ }
+
+ return node.id || (
+ node.id = funPath.scope.parent.declareTemporary("callee$")
+ );
+}
+
+function getRuntimeMarkDecl(blockPath) {
+ assert.ok(blockPath instanceof NodePath);
+ var block = blockPath.node;
+ isArray.assert(block.body);
+
+ var info = getMarkInfo(block);
+ if (info.decl) {
+ return info.decl;
+ }
+
+ info.decl = b.variableDeclaration("var", [
+ b.variableDeclarator(
+ blockPath.scope.declareTemporary("marked"),
+ b.callExpression(
+ b.memberExpression(
+ b.arrayExpression([]),
+ b.identifier("map"),
+ false
+ ),
+ [runtimeProperty("mark")]
+ )
+ )
+ ]);
+
+ for (var i = 0; i < block.body.length; ++i) {
+ if (!shouldNotHoistAbove(blockPath.get("body", i))) {
+ break;
+ }
+ }
+
+ blockPath.get("body").insertAt(i, info.decl);
+
+ return info.decl;
+}
+
+function shouldNotHoistAbove(stmtPath) {
+ var value = stmtPath.value;
+ n.Statement.assert(value);
+
+ // If the first statement is a "use strict" declaration, make sure to
+ // insert hoisted declarations afterwards.
+ return n.ExpressionStatement.check(value) &&
+ n.Literal.check(value.expression) &&
+ value.expression.value === "use strict";
+}
+
+function renameArguments(funcPath, argsId) {
+ assert.ok(funcPath instanceof types.NodePath);
+ var func = funcPath.value;
+ var didRenameArguments = false;
+
+ recast.visit(funcPath, {
+ visitFunction: function(path) {
+ if (path.value === func) {
+ this.traverse(path);
+ } else {
+ return false;
+ }
+ },
+
+ visitIdentifier: function(path) {
+ if (path.value.name === "arguments" &&
+ util.isReference(path)) {
+ path.replace(argsId);
+ didRenameArguments = true;
+ return false;
+ }
+
+ this.traverse(path);
+ }
+ });
+
+ // If the traversal replaced any arguments references, then we need to
+ // alias the outer function's arguments binding (be it the implicit
+ // arguments object or some other parameter or variable) to the variable
+ // named by argsId.
+ return didRenameArguments;
+}
+
+var awaitVisitor = types.PathVisitor.fromMethodsObject({
+ visitFunction: function(path) {
+ return false; // Don't descend into nested function scopes.
+ },
+
+ visitAwaitExpression: function(path) {
+ // Convert await and await* expressions to yield expressions.
+ var argument = path.value.argument;
+
+ // If the parser supports await* syntax using a boolean .all property
+ // (#171), desugar that syntax to yield Promise.all(argument).
+ if (path.value.all) {
+ argument = b.callExpression(
+ b.memberExpression(
+ b.identifier("Promise"),
+ b.identifier("all"),
+ false
+ ),
+ [argument]
+ );
+ }
+
+ // Transforming `await x` to `yield regeneratorRuntime.awrap(x)`
+ // causes the argument to be wrapped in such a way that the runtime
+ // can distinguish between awaited and merely yielded values.
+ return b.yieldExpression(
+ b.callExpression(
+ runtimeProperty("awrap"),
+ [argument]
+ ),
+ false
+ );
+ }
+});
+
+},{"1":1,"3":3,"560":560,"571":571,"573":573,"574":574,"577":577,"579":579}],579:[function(_dereq_,module,exports){
+(function (__dirname){
+/**
+ * Copyright (c) 2014, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * https://raw.github.com/facebook/regenerator/master/LICENSE file. An
+ * additional grant of patent rights can be found in the PATENTS file in
+ * the same directory.
+ */
+
+var assert = _dereq_(1);
+var path = _dereq_(9);
+var fs = _dereq_(3);
+var through = _dereq_(3);
+var transform = _dereq_(578).transform;
+var utils = _dereq_(577);
+var recast = _dereq_(571);
+var types = recast.types;
+var genOrAsyncFunExp = /\bfunction\s*\*|\basync\b/;
+var blockBindingExp = /\b(let|const)\s+/;
+
+function exports(file, options) {
+ var data = [];
+ return through(write, end);
+
+ function write(buf) {
+ data.push(buf);
+ }
+
+ function end() {
+ this.queue(compile(data.join(""), options).code);
+ this.queue(null);
+ }
+}
+
+// To get a writable stream for use as a browserify transform, call
+// require("regenerator")().
+module.exports = exports;
+
+// To include the runtime globally in the current node process, call
+// require("regenerator").runtime().
+function runtime() {
+ _dereq_(580);
+}
+exports.runtime = runtime;
+runtime.path = path.join(__dirname, "runtime.js");
+
+function compile(source, options) {
+ options = normalizeOptions(options);
+
+ if (!genOrAsyncFunExp.test(source)) {
+ return {
+ // Shortcut: no generators or async functions to transform.
+ code: (options.includeRuntime === true ? fs.readFileSync(
+ path.join(__dirname, "runtime.js"), "utf-8"
+ ) + "\n" : "") + source
+ };
+ }
+
+ var recastOptions = getRecastOptions(options);
+ var ast = recast.parse(source, recastOptions);
+ var nodePath = new types.NodePath(ast);
+ var programPath = nodePath.get("program");
+
+ if (shouldVarify(source, options)) {
+ // Transpile let/const into var declarations.
+ varifyAst(programPath.node);
+ }
+
+ transform(programPath, options);
+
+ return recast.print(nodePath, recastOptions);
+}
+
+function normalizeOptions(options) {
+ options = utils.defaults(options || {}, {
+ includeRuntime: false,
+ supportBlockBinding: true
+ });
+
+ if (!options.esprima) {
+ options.esprima = _dereq_(3);
+ }
+
+ assert.ok(
+ /harmony/.test(options.esprima.version),
+ "Bad esprima version: " + options.esprima.version
+ );
+
+ return options;
+}
+
+function getRecastOptions(options) {
+ var recastOptions = {
+ range: true
+ };
+
+ function copy(name) {
+ if (name in options) {
+ recastOptions[name] = options[name];
+ }
+ }
+
+ copy("esprima");
+ copy("sourceFileName");
+ copy("sourceMapName");
+ copy("inputSourceMap");
+ copy("sourceRoot");
+
+ return recastOptions;
+}
+
+function shouldVarify(source, options) {
+ var supportBlockBinding = !!options.supportBlockBinding;
+ if (supportBlockBinding) {
+ if (!blockBindingExp.test(source)) {
+ supportBlockBinding = false;
+ }
+ }
+
+ return supportBlockBinding;
+}
+
+function varify(source, options) {
+ var recastOptions = getRecastOptions(normalizeOptions(options));
+ var ast = recast.parse(source, recastOptions);
+ varifyAst(ast.program);
+ return recast.print(ast, recastOptions).code;
+}
+
+function varifyAst(ast) {
+ types.namedTypes.Program.assert(ast);
+
+ var defsResult = _dereq_(418)(ast, {
+ ast: true,
+ disallowUnknownReferences: false,
+ disallowDuplicated: false,
+ disallowVars: false,
+ loopClosures: "iife"
+ });
+
+ if (defsResult.errors) {
+ throw new Error(defsResult.errors.join("\n"))
+ }
+
+ return ast;
+}
+
+// Convenience for just translating let/const to var declarations.
+exports.varify = varify;
+
+// Allow packages that depend on Regenerator to use the same copy of
+// ast-types, in case multiple versions are installed by NPM.
+exports.types = types;
+
+// Transforms a string of source code, returning the { code, map? } result
+// from recast.print.
+exports.compile = compile;
+
+// To modify an AST directly, call require("regenerator").transform(ast).
+exports.transform = transform;
+
+}).call(this,"/node_modules/regenerator")
+},{"1":1,"3":3,"418":418,"571":571,"577":577,"578":578,"580":580,"9":9}],580:[function(_dereq_,module,exports){
+(function (process,global){
+/**
+ * Copyright (c) 2014, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * https://raw.github.com/facebook/regenerator/master/LICENSE file. An
+ * additional grant of patent rights can be found in the PATENTS file in
+ * the same directory.
+ */
+
+!(function(global) {
+ "use strict";
+
+ var hasOwn = Object.prototype.hasOwnProperty;
+ var undefined; // More compressible than void 0.
+ var iteratorSymbol =
+ typeof Symbol === "function" && Symbol.iterator || "@@iterator";
+
+ var inModule = typeof module === "object";
+ var runtime = global.regeneratorRuntime;
+ if (runtime) {
+ if (inModule) {
+ // If regeneratorRuntime is defined globally and we're in a module,
+ // make the exports object identical to regeneratorRuntime.
+ module.exports = runtime;
+ }
+ // Don't bother evaluating the rest of this file if the runtime was
+ // already defined globally.
+ return;
+ }
+
+ // Define the runtime globally (as expected by generated code) as either
+ // module.exports (if we're in a module) or a new, empty object.
+ runtime = global.regeneratorRuntime = inModule ? module.exports : {};
+
+ function wrap(innerFn, outerFn, self, tryLocsList) {
+ // If outerFn provided, then outerFn.prototype instanceof Generator.
+ var generator = Object.create((outerFn || Generator).prototype);
+ var context = new Context(tryLocsList || []);
+
+ // The ._invoke method unifies the implementations of the .next,
+ // .throw, and .return methods.
+ generator._invoke = makeInvokeMethod(innerFn, self, context);
+
+ return generator;
+ }
+ runtime.wrap = wrap;
+
+ // Try/catch helper to minimize deoptimizations. Returns a completion
+ // record like context.tryEntries[i].completion. This interface could
+ // have been (and was previously) designed to take a closure to be
+ // invoked without arguments, but in all the cases we care about we
+ // already have an existing method we want to call, so there's no need
+ // to create a new function object. We can even get away with assuming
+ // the method takes exactly one argument, since that happens to be true
+ // in every case, so we don't have to touch the arguments object. The
+ // only additional allocation required is the completion record, which
+ // has a stable shape and so hopefully should be cheap to allocate.
+ function tryCatch(fn, obj, arg) {
+ try {
+ return { type: "normal", arg: fn.call(obj, arg) };
+ } catch (err) {
+ return { type: "throw", arg: err };
+ }
+ }
+
+ var GenStateSuspendedStart = "suspendedStart";
+ var GenStateSuspendedYield = "suspendedYield";
+ var GenStateExecuting = "executing";
+ var GenStateCompleted = "completed";
+
+ // Returning this object from the innerFn has the same effect as
+ // breaking out of the dispatch switch statement.
+ var ContinueSentinel = {};
+
+ // Dummy constructor functions that we use as the .constructor and
+ // .constructor.prototype properties for functions that return Generator
+ // objects. For full spec compliance, you may wish to configure your
+ // minifier not to mangle the names of these two functions.
+ function Generator() {}
+ function GeneratorFunction() {}
+ function GeneratorFunctionPrototype() {}
+
+ var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;
+ GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
+ GeneratorFunctionPrototype.constructor = GeneratorFunction;
+ GeneratorFunction.displayName = "GeneratorFunction";
+
+ // Helper for defining the .next, .throw, and .return methods of the
+ // Iterator interface in terms of a single ._invoke method.
+ function defineIteratorMethods(prototype) {
+ ["next", "throw", "return"].forEach(function(method) {
+ prototype[method] = function(arg) {
+ return this._invoke(method, arg);
+ };
+ });
+ }
+
+ runtime.isGeneratorFunction = function(genFun) {
+ var ctor = typeof genFun === "function" && genFun.constructor;
+ return ctor
+ ? ctor === GeneratorFunction ||
+ // For the native GeneratorFunction constructor, the best we can
+ // do is to check its .name property.
+ (ctor.displayName || ctor.name) === "GeneratorFunction"
+ : false;
+ };
+
+ runtime.mark = function(genFun) {
+ if (Object.setPrototypeOf) {
+ Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
+ } else {
+ genFun.__proto__ = GeneratorFunctionPrototype;
+ }
+ genFun.prototype = Object.create(Gp);
+ return genFun;
+ };
+
+ // Within the body of any async function, `await x` is transformed to
+ // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
+ // `value instanceof AwaitArgument` to determine if the yielded value is
+ // meant to be awaited. Some may consider the name of this method too
+ // cutesy, but they are curmudgeons.
+ runtime.awrap = function(arg) {
+ return new AwaitArgument(arg);
+ };
+
+ function AwaitArgument(arg) {
+ this.arg = arg;
+ }
+
+ function AsyncIterator(generator) {
+ // This invoke function is written in a style that assumes some
+ // calling function (or Promise) will handle exceptions.
+ function invoke(method, arg) {
+ var result = generator[method](arg);
+ var value = result.value;
+ return value instanceof AwaitArgument
+ ? Promise.resolve(value.arg).then(invokeNext, invokeThrow)
+ : Promise.resolve(value).then(function(unwrapped) {
+ // When a yielded Promise is resolved, its final value becomes
+ // the .value of the Promise<{value,done}> result for the
+ // current iteration. If the Promise is rejected, however, the
+ // result for this iteration will be rejected with the same
+ // reason. Note that rejections of yielded Promises are not
+ // thrown back into the generator function, as is the case
+ // when an awaited Promise is rejected. This difference in
+ // behavior between yield and await is important, because it
+ // allows the consumer to decide what to do with the yielded
+ // rejection (swallow it and continue, manually .throw it back
+ // into the generator, abandon iteration, whatever). With
+ // await, by contrast, there is no opportunity to examine the
+ // rejection reason outside the generator function, so the
+ // only option is to throw it from the await expression, and
+ // let the generator function handle the exception.
+ result.value = unwrapped;
+ return result;
+ });
+ }
+
+ if (typeof process === "object" && process.domain) {
+ invoke = process.domain.bind(invoke);
+ }
+
+ var invokeNext = invoke.bind(generator, "next");
+ var invokeThrow = invoke.bind(generator, "throw");
+ var invokeReturn = invoke.bind(generator, "return");
+ var previousPromise;
+
+ function enqueue(method, arg) {
+ function callInvokeWithMethodAndArg() {
+ return invoke(method, arg);
+ }
+
+ return previousPromise =
+ // If enqueue has been called before, then we want to wait until
+ // all previous Promises have been resolved before calling invoke,
+ // so that results are always delivered in the correct order. If
+ // enqueue has not been called before, then it is important to
+ // call invoke immediately, without waiting on a callback to fire,
+ // so that the async generator function has the opportunity to do
+ // any necessary setup in a predictable way. This predictability
+ // is why the Promise constructor synchronously invokes its
+ // executor callback, and why async functions synchronously
+ // execute code before the first await. Since we implement simple
+ // async functions in terms of async generators, it is especially
+ // important to get this right, even though it requires care.
+ previousPromise ? previousPromise.then(
+ callInvokeWithMethodAndArg,
+ // Avoid propagating failures to Promises returned by later
+ // invocations of the iterator.
+ callInvokeWithMethodAndArg
+ ) : new Promise(function (resolve) {
+ resolve(callInvokeWithMethodAndArg());
+ });
+ }
+
+ // Define the unified helper method that is used to implement .next,
+ // .throw, and .return (see defineIteratorMethods).
+ this._invoke = enqueue;
+ }
+
+ defineIteratorMethods(AsyncIterator.prototype);
+
+ // Note that simple async functions are implemented on top of
+ // AsyncIterator objects; they just return a Promise for the value of
+ // the final result produced by the iterator.
+ runtime.async = function(innerFn, outerFn, self, tryLocsList) {
+ var iter = new AsyncIterator(
+ wrap(innerFn, outerFn, self, tryLocsList)
+ );
+
+ return runtime.isGeneratorFunction(outerFn)
+ ? iter // If outerFn is a generator, return the full iterator.
+ : iter.next().then(function(result) {
+ return result.done ? result.value : iter.next();
+ });
+ };
+
+ function makeInvokeMethod(innerFn, self, context) {
+ var state = GenStateSuspendedStart;
+
+ return function invoke(method, arg) {
+ if (state === GenStateExecuting) {
+ throw new Error("Generator is already running");
+ }
+
+ if (state === GenStateCompleted) {
+ if (method === "throw") {
+ throw arg;
+ }
+
+ // Be forgiving, per 25.3.3.3.3 of the spec:
+ // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
+ return doneResult();
+ }
+
+ while (true) {
+ var delegate = context.delegate;
+ if (delegate) {
+ if (method === "return" ||
+ (method === "throw" && delegate.iterator[method] === undefined)) {
+ // A return or throw (when the delegate iterator has no throw
+ // method) always terminates the yield* loop.
+ context.delegate = null;
+
+ // If the delegate iterator has a return method, give it a
+ // chance to clean up.
+ var returnMethod = delegate.iterator["return"];
+ if (returnMethod) {
+ var record = tryCatch(returnMethod, delegate.iterator, arg);
+ if (record.type === "throw") {
+ // If the return method threw an exception, let that
+ // exception prevail over the original return or throw.
+ method = "throw";
+ arg = record.arg;
+ continue;
+ }
+ }
+
+ if (method === "return") {
+ // Continue with the outer return, now that the delegate
+ // iterator has been terminated.
+ continue;
+ }
+ }
+
+ var record = tryCatch(
+ delegate.iterator[method],
+ delegate.iterator,
+ arg
+ );
+
+ if (record.type === "throw") {
+ context.delegate = null;
+
+ // Like returning generator.throw(uncaught), but without the
+ // overhead of an extra function call.
+ method = "throw";
+ arg = record.arg;
+ continue;
+ }
+
+ // Delegate generator ran and handled its own exceptions so
+ // regardless of what the method was, we continue as if it is
+ // "next" with an undefined arg.
+ method = "next";
+ arg = undefined;
+
+ var info = record.arg;
+ if (info.done) {
+ context[delegate.resultName] = info.value;
+ context.next = delegate.nextLoc;
+ } else {
+ state = GenStateSuspendedYield;
+ return info;
+ }
+
+ context.delegate = null;
+ }
+
+ if (method === "next") {
+ if (state === GenStateSuspendedYield) {
+ context.sent = arg;
+ } else {
+ context.sent = undefined;
+ }
+
+ } else if (method === "throw") {
+ if (state === GenStateSuspendedStart) {
+ state = GenStateCompleted;
+ throw arg;
+ }
+
+ if (context.dispatchException(arg)) {
+ // If the dispatched exception was caught by a catch block,
+ // then let that catch block handle the exception normally.
+ method = "next";
+ arg = undefined;
+ }
+
+ } else if (method === "return") {
+ context.abrupt("return", arg);
+ }
+
+ state = GenStateExecuting;
+
+ var record = tryCatch(innerFn, self, context);
+ if (record.type === "normal") {
+ // If an exception is thrown from innerFn, we leave state ===
+ // GenStateExecuting and loop back for another invocation.
+ state = context.done
+ ? GenStateCompleted
+ : GenStateSuspendedYield;
+
+ var info = {
+ value: record.arg,
+ done: context.done
+ };
+
+ if (record.arg === ContinueSentinel) {
+ if (context.delegate && method === "next") {
+ // Deliberately forget the last sent value so that we don't
+ // accidentally pass it on to the delegate.
+ arg = undefined;
+ }
+ } else {
+ return info;
+ }
+
+ } else if (record.type === "throw") {
+ state = GenStateCompleted;
+ // Dispatch the exception by looping back around to the
+ // context.dispatchException(arg) call above.
+ method = "throw";
+ arg = record.arg;
+ }
+ }
+ };
+ }
+
+ // Define Generator.prototype.{next,throw,return} in terms of the
+ // unified ._invoke helper method.
+ defineIteratorMethods(Gp);
+
+ Gp[iteratorSymbol] = function() {
+ return this;
+ };
+
+ Gp.toString = function() {
+ return "[object Generator]";
+ };
+
+ function pushTryEntry(locs) {
+ var entry = { tryLoc: locs[0] };
+
+ if (1 in locs) {
+ entry.catchLoc = locs[1];
+ }
+
+ if (2 in locs) {
+ entry.finallyLoc = locs[2];
+ entry.afterLoc = locs[3];
+ }
+
+ this.tryEntries.push(entry);
+ }
+
+ function resetTryEntry(entry) {
+ var record = entry.completion || {};
+ record.type = "normal";
+ delete record.arg;
+ entry.completion = record;
+ }
+
+ function Context(tryLocsList) {
+ // The root entry object (effectively a try statement without a catch
+ // or a finally block) gives us a place to store values thrown from
+ // locations where there is no enclosing try statement.
+ this.tryEntries = [{ tryLoc: "root" }];
+ tryLocsList.forEach(pushTryEntry, this);
+ this.reset(true);
+ }
+
+ runtime.keys = function(object) {
+ var keys = [];
+ for (var key in object) {
+ keys.push(key);
+ }
+ keys.reverse();
+
+ // Rather than returning an object with a next method, we keep
+ // things simple and return the next function itself.
+ return function next() {
+ while (keys.length) {
+ var key = keys.pop();
+ if (key in object) {
+ next.value = key;
+ next.done = false;
+ return next;
+ }
+ }
+
+ // To avoid creating an additional object, we just hang the .value
+ // and .done properties off the next function object itself. This
+ // also ensures that the minifier will not anonymize the function.
+ next.done = true;
+ return next;
+ };
+ };
+
+ function values(iterable) {
+ if (iterable) {
+ var iteratorMethod = iterable[iteratorSymbol];
+ if (iteratorMethod) {
+ return iteratorMethod.call(iterable);
+ }
+
+ if (typeof iterable.next === "function") {
+ return iterable;
+ }
+
+ if (!isNaN(iterable.length)) {
+ var i = -1, next = function next() {
+ while (++i < iterable.length) {
+ if (hasOwn.call(iterable, i)) {
+ next.value = iterable[i];
+ next.done = false;
+ return next;
+ }
+ }
+
+ next.value = undefined;
+ next.done = true;
+
+ return next;
+ };
+
+ return next.next = next;
+ }
+ }
+
+ // Return an iterator with no values.
+ return { next: doneResult };
+ }
+ runtime.values = values;
+
+ function doneResult() {
+ return { value: undefined, done: true };
+ }
+
+ Context.prototype = {
+ constructor: Context,
+
+ reset: function(skipTempReset) {
+ this.prev = 0;
+ this.next = 0;
+ this.sent = undefined;
+ this.done = false;
+ this.delegate = null;
+
+ this.tryEntries.forEach(resetTryEntry);
+
+ if (!skipTempReset) {
+ for (var name in this) {
+ // Not sure about the optimal order of these conditions:
+ if (name.charAt(0) === "t" &&
+ hasOwn.call(this, name) &&
+ !isNaN(+name.slice(1))) {
+ this[name] = undefined;
+ }
+ }
+ }
+ },
+
+ stop: function() {
+ this.done = true;
+
+ var rootEntry = this.tryEntries[0];
+ var rootRecord = rootEntry.completion;
+ if (rootRecord.type === "throw") {
+ throw rootRecord.arg;
+ }
+
+ return this.rval;
+ },
+
+ dispatchException: function(exception) {
+ if (this.done) {
+ throw exception;
+ }
+
+ var context = this;
+ function handle(loc, caught) {
+ record.type = "throw";
+ record.arg = exception;
+ context.next = loc;
+ return !!caught;
+ }
+
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+ var entry = this.tryEntries[i];
+ var record = entry.completion;
+
+ if (entry.tryLoc === "root") {
+ // Exception thrown outside of any try block that could handle
+ // it, so set the completion value of the entire function to
+ // throw the exception.
+ return handle("end");
+ }
+
+ if (entry.tryLoc <= this.prev) {
+ var hasCatch = hasOwn.call(entry, "catchLoc");
+ var hasFinally = hasOwn.call(entry, "finallyLoc");
+
+ if (hasCatch && hasFinally) {
+ if (this.prev < entry.catchLoc) {
+ return handle(entry.catchLoc, true);
+ } else if (this.prev < entry.finallyLoc) {
+ return handle(entry.finallyLoc);
+ }
+
+ } else if (hasCatch) {
+ if (this.prev < entry.catchLoc) {
+ return handle(entry.catchLoc, true);
+ }
+
+ } else if (hasFinally) {
+ if (this.prev < entry.finallyLoc) {
+ return handle(entry.finallyLoc);
+ }
+
+ } else {
+ throw new Error("try statement without catch or finally");
+ }
+ }
+ }
+ },
+
+ abrupt: function(type, arg) {
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+ var entry = this.tryEntries[i];
+ if (entry.tryLoc <= this.prev &&
+ hasOwn.call(entry, "finallyLoc") &&
+ this.prev < entry.finallyLoc) {
+ var finallyEntry = entry;
+ break;
+ }
+ }
+
+ if (finallyEntry &&
+ (type === "break" ||
+ type === "continue") &&
+ finallyEntry.tryLoc <= arg &&
+ arg <= finallyEntry.finallyLoc) {
+ // Ignore the finally entry if control is not jumping to a
+ // location outside the try/catch block.
+ finallyEntry = null;
+ }
+
+ var record = finallyEntry ? finallyEntry.completion : {};
+ record.type = type;
+ record.arg = arg;
+
+ if (finallyEntry) {
+ this.next = finallyEntry.finallyLoc;
+ } else {
+ this.complete(record);
+ }
+
+ return ContinueSentinel;
+ },
+
+ complete: function(record, afterLoc) {
+ if (record.type === "throw") {
+ throw record.arg;
+ }
+
+ if (record.type === "break" ||
+ record.type === "continue") {
+ this.next = record.arg;
+ } else if (record.type === "return") {
+ this.rval = record.arg;
+ this.next = "end";
+ } else if (record.type === "normal" && afterLoc) {
+ this.next = afterLoc;
+ }
+ },
+
+ finish: function(finallyLoc) {
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+ var entry = this.tryEntries[i];
+ if (entry.finallyLoc === finallyLoc) {
+ this.complete(entry.completion, entry.afterLoc);
+ resetTryEntry(entry);
+ return ContinueSentinel;
+ }
+ }
+ },
+
+ "catch": function(tryLoc) {
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+ var entry = this.tryEntries[i];
+ if (entry.tryLoc === tryLoc) {
+ var record = entry.completion;
+ if (record.type === "throw") {
+ var thrown = record.arg;
+ resetTryEntry(entry);
+ }
+ return thrown;
+ }
+ }
+
+ // The context.catch method must only be called with a location
+ // argument that corresponds to a known catch block.
+ throw new Error("illegal catch attempt");
+ },
+
+ delegateYield: function(iterable, resultName, nextLoc) {
+ this.delegate = {
+ iterator: values(iterable),
+ resultName: resultName,
+ nextLoc: nextLoc
+ };
+
+ return ContinueSentinel;
+ }
+ };
+})(
+ // Among the various tricks for obtaining a reference to the global
+ // object, this seems to be the most reliable technique that does not
+ // use indirect eval (which violates Content Security Policy).
+ typeof global === "object" ? global :
+ typeof window === "object" ? window :
+ typeof self === "object" ? self : this
+);
+
+}).call(this,_dereq_(10),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"10":10}],581:[function(_dereq_,module,exports){
+// Generated by `/scripts/character-class-escape-sets.js`. Do not edit.
+var regenerate = _dereq_(572);
+
+exports.REGULAR = {
+ 'd': regenerate()
+ .addRange(0x30, 0x39),
+ 'D': regenerate()
+ .addRange(0x0, 0x2F)
+ .addRange(0x3A, 0xFFFF),
+ 's': regenerate(0x20, 0xA0, 0x1680, 0x180E, 0x202F, 0x205F, 0x3000, 0xFEFF)
+ .addRange(0x9, 0xD)
+ .addRange(0x2000, 0x200A)
+ .addRange(0x2028, 0x2029),
+ 'S': regenerate()
+ .addRange(0x0, 0x8)
+ .addRange(0xE, 0x1F)
+ .addRange(0x21, 0x9F)
+ .addRange(0xA1, 0x167F)
+ .addRange(0x1681, 0x180D)
+ .addRange(0x180F, 0x1FFF)
+ .addRange(0x200B, 0x2027)
+ .addRange(0x202A, 0x202E)
+ .addRange(0x2030, 0x205E)
+ .addRange(0x2060, 0x2FFF)
+ .addRange(0x3001, 0xFEFE)
+ .addRange(0xFF00, 0xFFFF),
+ 'w': regenerate(0x5F)
+ .addRange(0x30, 0x39)
+ .addRange(0x41, 0x5A)
+ .addRange(0x61, 0x7A),
+ 'W': regenerate(0x60)
+ .addRange(0x0, 0x2F)
+ .addRange(0x3A, 0x40)
+ .addRange(0x5B, 0x5E)
+ .addRange(0x7B, 0xFFFF)
+};
+
+exports.UNICODE = {
+ 'd': regenerate()
+ .addRange(0x30, 0x39),
+ 'D': regenerate()
+ .addRange(0x0, 0x2F)
+ .addRange(0x3A, 0x10FFFF),
+ 's': regenerate(0x20, 0xA0, 0x1680, 0x180E, 0x202F, 0x205F, 0x3000, 0xFEFF)
+ .addRange(0x9, 0xD)
+ .addRange(0x2000, 0x200A)
+ .addRange(0x2028, 0x2029),
+ 'S': regenerate()
+ .addRange(0x0, 0x8)
+ .addRange(0xE, 0x1F)
+ .addRange(0x21, 0x9F)
+ .addRange(0xA1, 0x167F)
+ .addRange(0x1681, 0x180D)
+ .addRange(0x180F, 0x1FFF)
+ .addRange(0x200B, 0x2027)
+ .addRange(0x202A, 0x202E)
+ .addRange(0x2030, 0x205E)
+ .addRange(0x2060, 0x2FFF)
+ .addRange(0x3001, 0xFEFE)
+ .addRange(0xFF00, 0x10FFFF),
+ 'w': regenerate(0x5F)
+ .addRange(0x30, 0x39)
+ .addRange(0x41, 0x5A)
+ .addRange(0x61, 0x7A),
+ 'W': regenerate(0x60)
+ .addRange(0x0, 0x2F)
+ .addRange(0x3A, 0x40)
+ .addRange(0x5B, 0x5E)
+ .addRange(0x7B, 0x10FFFF)
+};
+
+exports.UNICODE_IGNORE_CASE = {
+ 'd': regenerate()
+ .addRange(0x30, 0x39),
+ 'D': regenerate()
+ .addRange(0x0, 0x2F)
+ .addRange(0x3A, 0x10FFFF),
+ 's': regenerate(0x20, 0xA0, 0x1680, 0x180E, 0x202F, 0x205F, 0x3000, 0xFEFF)
+ .addRange(0x9, 0xD)
+ .addRange(0x2000, 0x200A)
+ .addRange(0x2028, 0x2029),
+ 'S': regenerate()
+ .addRange(0x0, 0x8)
+ .addRange(0xE, 0x1F)
+ .addRange(0x21, 0x9F)
+ .addRange(0xA1, 0x167F)
+ .addRange(0x1681, 0x180D)
+ .addRange(0x180F, 0x1FFF)
+ .addRange(0x200B, 0x2027)
+ .addRange(0x202A, 0x202E)
+ .addRange(0x2030, 0x205E)
+ .addRange(0x2060, 0x2FFF)
+ .addRange(0x3001, 0xFEFE)
+ .addRange(0xFF00, 0x10FFFF),
+ 'w': regenerate(0x5F, 0x17F, 0x212A)
+ .addRange(0x30, 0x39)
+ .addRange(0x41, 0x5A)
+ .addRange(0x61, 0x7A),
+ 'W': regenerate(0x4B, 0x53, 0x60)
+ .addRange(0x0, 0x2F)
+ .addRange(0x3A, 0x40)
+ .addRange(0x5B, 0x5E)
+ .addRange(0x7B, 0x10FFFF)
+};
+
+},{"572":572}],582:[function(_dereq_,module,exports){
+module.exports={
+ "75": 8490,
+ "83": 383,
+ "107": 8490,
+ "115": 383,
+ "181": 924,
+ "197": 8491,
+ "383": 83,
+ "452": 453,
+ "453": 452,
+ "455": 456,
+ "456": 455,
+ "458": 459,
+ "459": 458,
+ "497": 498,
+ "498": 497,
+ "837": 8126,
+ "914": 976,
+ "917": 1013,
+ "920": 1012,
+ "921": 8126,
+ "922": 1008,
+ "924": 181,
+ "928": 982,
+ "929": 1009,
+ "931": 962,
+ "934": 981,
+ "937": 8486,
+ "962": 931,
+ "976": 914,
+ "977": 1012,
+ "981": 934,
+ "982": 928,
+ "1008": 922,
+ "1009": 929,
+ "1012": [
+ 920,
+ 977
+ ],
+ "1013": 917,
+ "7776": 7835,
+ "7835": 7776,
+ "8126": [
+ 837,
+ 921
+ ],
+ "8486": 937,
+ "8490": 75,
+ "8491": 197,
+ "66560": 66600,
+ "66561": 66601,
+ "66562": 66602,
+ "66563": 66603,
+ "66564": 66604,
+ "66565": 66605,
+ "66566": 66606,
+ "66567": 66607,
+ "66568": 66608,
+ "66569": 66609,
+ "66570": 66610,
+ "66571": 66611,
+ "66572": 66612,
+ "66573": 66613,
+ "66574": 66614,
+ "66575": 66615,
+ "66576": 66616,
+ "66577": 66617,
+ "66578": 66618,
+ "66579": 66619,
+ "66580": 66620,
+ "66581": 66621,
+ "66582": 66622,
+ "66583": 66623,
+ "66584": 66624,
+ "66585": 66625,
+ "66586": 66626,
+ "66587": 66627,
+ "66588": 66628,
+ "66589": 66629,
+ "66590": 66630,
+ "66591": 66631,
+ "66592": 66632,
+ "66593": 66633,
+ "66594": 66634,
+ "66595": 66635,
+ "66596": 66636,
+ "66597": 66637,
+ "66598": 66638,
+ "66599": 66639,
+ "66600": 66560,
+ "66601": 66561,
+ "66602": 66562,
+ "66603": 66563,
+ "66604": 66564,
+ "66605": 66565,
+ "66606": 66566,
+ "66607": 66567,
+ "66608": 66568,
+ "66609": 66569,
+ "66610": 66570,
+ "66611": 66571,
+ "66612": 66572,
+ "66613": 66573,
+ "66614": 66574,
+ "66615": 66575,
+ "66616": 66576,
+ "66617": 66577,
+ "66618": 66578,
+ "66619": 66579,
+ "66620": 66580,
+ "66621": 66581,
+ "66622": 66582,
+ "66623": 66583,
+ "66624": 66584,
+ "66625": 66585,
+ "66626": 66586,
+ "66627": 66587,
+ "66628": 66588,
+ "66629": 66589,
+ "66630": 66590,
+ "66631": 66591,
+ "66632": 66592,
+ "66633": 66593,
+ "66634": 66594,
+ "66635": 66595,
+ "66636": 66596,
+ "66637": 66597,
+ "66638": 66598,
+ "66639": 66599,
+ "68736": 68800,
+ "68737": 68801,
+ "68738": 68802,
+ "68739": 68803,
+ "68740": 68804,
+ "68741": 68805,
+ "68742": 68806,
+ "68743": 68807,
+ "68744": 68808,
+ "68745": 68809,
+ "68746": 68810,
+ "68747": 68811,
+ "68748": 68812,
+ "68749": 68813,
+ "68750": 68814,
+ "68751": 68815,
+ "68752": 68816,
+ "68753": 68817,
+ "68754": 68818,
+ "68755": 68819,
+ "68756": 68820,
+ "68757": 68821,
+ "68758": 68822,
+ "68759": 68823,
+ "68760": 68824,
+ "68761": 68825,
+ "68762": 68826,
+ "68763": 68827,
+ "68764": 68828,
+ "68765": 68829,
+ "68766": 68830,
+ "68767": 68831,
+ "68768": 68832,
+ "68769": 68833,
+ "68770": 68834,
+ "68771": 68835,
+ "68772": 68836,
+ "68773": 68837,
+ "68774": 68838,
+ "68775": 68839,
+ "68776": 68840,
+ "68777": 68841,
+ "68778": 68842,
+ "68779": 68843,
+ "68780": 68844,
+ "68781": 68845,
+ "68782": 68846,
+ "68783": 68847,
+ "68784": 68848,
+ "68785": 68849,
+ "68786": 68850,
+ "68800": 68736,
+ "68801": 68737,
+ "68802": 68738,
+ "68803": 68739,
+ "68804": 68740,
+ "68805": 68741,
+ "68806": 68742,
+ "68807": 68743,
+ "68808": 68744,
+ "68809": 68745,
+ "68810": 68746,
+ "68811": 68747,
+ "68812": 68748,
+ "68813": 68749,
+ "68814": 68750,
+ "68815": 68751,
+ "68816": 68752,
+ "68817": 68753,
+ "68818": 68754,
+ "68819": 68755,
+ "68820": 68756,
+ "68821": 68757,
+ "68822": 68758,
+ "68823": 68759,
+ "68824": 68760,
+ "68825": 68761,
+ "68826": 68762,
+ "68827": 68763,
+ "68828": 68764,
+ "68829": 68765,
+ "68830": 68766,
+ "68831": 68767,
+ "68832": 68768,
+ "68833": 68769,
+ "68834": 68770,
+ "68835": 68771,
+ "68836": 68772,
+ "68837": 68773,
+ "68838": 68774,
+ "68839": 68775,
+ "68840": 68776,
+ "68841": 68777,
+ "68842": 68778,
+ "68843": 68779,
+ "68844": 68780,
+ "68845": 68781,
+ "68846": 68782,
+ "68847": 68783,
+ "68848": 68784,
+ "68849": 68785,
+ "68850": 68786,
+ "71840": 71872,
+ "71841": 71873,
+ "71842": 71874,
+ "71843": 71875,
+ "71844": 71876,
+ "71845": 71877,
+ "71846": 71878,
+ "71847": 71879,
+ "71848": 71880,
+ "71849": 71881,
+ "71850": 71882,
+ "71851": 71883,
+ "71852": 71884,
+ "71853": 71885,
+ "71854": 71886,
+ "71855": 71887,
+ "71856": 71888,
+ "71857": 71889,
+ "71858": 71890,
+ "71859": 71891,
+ "71860": 71892,
+ "71861": 71893,
+ "71862": 71894,
+ "71863": 71895,
+ "71864": 71896,
+ "71865": 71897,
+ "71866": 71898,
+ "71867": 71899,
+ "71868": 71900,
+ "71869": 71901,
+ "71870": 71902,
+ "71871": 71903,
+ "71872": 71840,
+ "71873": 71841,
+ "71874": 71842,
+ "71875": 71843,
+ "71876": 71844,
+ "71877": 71845,
+ "71878": 71846,
+ "71879": 71847,
+ "71880": 71848,
+ "71881": 71849,
+ "71882": 71850,
+ "71883": 71851,
+ "71884": 71852,
+ "71885": 71853,
+ "71886": 71854,
+ "71887": 71855,
+ "71888": 71856,
+ "71889": 71857,
+ "71890": 71858,
+ "71891": 71859,
+ "71892": 71860,
+ "71893": 71861,
+ "71894": 71862,
+ "71895": 71863,
+ "71896": 71864,
+ "71897": 71865,
+ "71898": 71866,
+ "71899": 71867,
+ "71900": 71868,
+ "71901": 71869,
+ "71902": 71870,
+ "71903": 71871
+}
+
+},{}],583:[function(_dereq_,module,exports){
+var generate = _dereq_(584).generate;
+var parse = _dereq_(585).parse;
+var regenerate = _dereq_(572);
+var iuMappings = _dereq_(582);
+var ESCAPE_SETS = _dereq_(581);
+
+function getCharacterClassEscapeSet(character) {
+ if (unicode) {
+ if (ignoreCase) {
+ return ESCAPE_SETS.UNICODE_IGNORE_CASE[character];
+ }
+ return ESCAPE_SETS.UNICODE[character];
+ }
+ return ESCAPE_SETS.REGULAR[character];
+}
+
+var object = {};
+var hasOwnProperty = object.hasOwnProperty;
+function has(object, property) {
+ return hasOwnProperty.call(object, property);
+}
+
+// Prepare a Regenerate set containing all code points, used for negative
+// character classes (if any).
+var UNICODE_SET = regenerate().addRange(0x0, 0x10FFFF);
+// Without the `u` flag, the range stops at 0xFFFF.
+// https://mths.be/es6#sec-pattern-semantics
+var BMP_SET = regenerate().addRange(0x0, 0xFFFF);
+
+// Prepare a Regenerate set containing all code points that are supposed to be
+// matched by `/./u`. https://mths.be/es6#sec-atom
+var DOT_SET_UNICODE = UNICODE_SET.clone() // all Unicode code points
+ .remove(
+ // minus `LineTerminator`s (https://mths.be/es6#sec-line-terminators):
+ 0x000A, // Line Feed
+ 0x000D, // Carriage Return
+ 0x2028, // Line Separator
+ 0x2029 // Paragraph Separator
+ );
+// Prepare a Regenerate set containing all code points that are supposed to be
+// matched by `/./` (only BMP code points).
+var DOT_SET = DOT_SET_UNICODE.clone()
+ .intersection(BMP_SET);
+
+// Add a range of code points + any case-folded code points in that range to a
+// set.
+regenerate.prototype.iuAddRange = function(min, max) {
+ var $this = this;
+ do {
+ var folded = caseFold(min);
+ if (folded) {
+ $this.add(folded);
+ }
+ } while (++min <= max);
+ return $this;
+};
+
+function assign(target, source) {
+ for (var key in source) {
+ // Note: `hasOwnProperty` is not needed here.
+ target[key] = source[key];
+ }
+}
+
+function update(item, pattern) {
+ // TODO: Test if memoizing `pattern` here is worth the effort.
+ if (!pattern) {
+ return;
+ }
+ var tree = parse(pattern, '');
+ switch (tree.type) {
+ case 'characterClass':
+ case 'group':
+ case 'value':
+ // No wrapping needed.
+ break;
+ default:
+ // Wrap the pattern in a non-capturing group.
+ tree = wrap(tree, pattern);
+ }
+ assign(item, tree);
+}
+
+function wrap(tree, pattern) {
+ // Wrap the pattern in a non-capturing group.
+ return {
+ 'type': 'group',
+ 'behavior': 'ignore',
+ 'body': [tree],
+ 'raw': '(?:' + pattern + ')'
+ };
+}
+
+function caseFold(codePoint) {
+ return has(iuMappings, codePoint) ? iuMappings[codePoint] : false;
+}
+
+var ignoreCase = false;
+var unicode = false;
+function processCharacterClass(characterClassItem) {
+ var set = regenerate();
+ var body = characterClassItem.body.forEach(function(item) {
+ switch (item.type) {
+ case 'value':
+ set.add(item.codePoint);
+ if (ignoreCase && unicode) {
+ var folded = caseFold(item.codePoint);
+ if (folded) {
+ set.add(folded);
+ }
+ }
+ break;
+ case 'characterClassRange':
+ var min = item.min.codePoint;
+ var max = item.max.codePoint;
+ set.addRange(min, max);
+ if (ignoreCase && unicode) {
+ set.iuAddRange(min, max);
+ }
+ break;
+ case 'characterClassEscape':
+ set.add(getCharacterClassEscapeSet(item.value));
+ break;
+ // The `default` clause is only here as a safeguard; it should never be
+ // reached. Code coverage tools should ignore it.
+ /* istanbul ignore next */
+ default:
+ throw Error('Unknown term type: ' + item.type);
+ }
+ });
+ if (characterClassItem.negative) {
+ set = (unicode ? UNICODE_SET : BMP_SET).clone().remove(set);
+ }
+ update(characterClassItem, set.toString());
+ return characterClassItem;
+}
+
+function processTerm(item) {
+ switch (item.type) {
+ case 'dot':
+ update(
+ item,
+ (unicode ? DOT_SET_UNICODE : DOT_SET).toString()
+ );
+ break;
+ case 'characterClass':
+ item = processCharacterClass(item);
+ break;
+ case 'characterClassEscape':
+ update(
+ item,
+ getCharacterClassEscapeSet(item.value).toString()
+ );
+ break;
+ case 'alternative':
+ case 'disjunction':
+ case 'group':
+ case 'quantifier':
+ item.body = item.body.map(processTerm);
+ break;
+ case 'value':
+ var codePoint = item.codePoint;
+ var set = regenerate(codePoint);
+ if (ignoreCase && unicode) {
+ var folded = caseFold(codePoint);
+ if (folded) {
+ set.add(folded);
+ }
+ }
+ update(item, set.toString());
+ break;
+ case 'anchor':
+ case 'empty':
+ case 'group':
+ case 'reference':
+ // Nothing to do here.
+ break;
+ // The `default` clause is only here as a safeguard; it should never be
+ // reached. Code coverage tools should ignore it.
+ /* istanbul ignore next */
+ default:
+ throw Error('Unknown term type: ' + item.type);
+ }
+ return item;
+};
+
+module.exports = function(pattern, flags) {
+ var tree = parse(pattern, flags);
+ ignoreCase = flags ? flags.indexOf('i') > -1 : false;
+ unicode = flags ? flags.indexOf('u') > -1 : false;
+ assign(tree, processTerm(tree));
+ return generate(tree);
+};
+
+},{"572":572,"581":581,"582":582,"584":584,"585":585}],584:[function(_dereq_,module,exports){
+(function (global){
+/*!
+ * RegJSGen
+ * Copyright 2014 Benjamin Tan
+ * Available under MIT license
+ */
+;(function() {
+ 'use strict';
+
+ /** Used to determine if values are of the language type `Object` */
+ var objectTypes = {
+ 'function': true,
+ 'object': true
+ };
+
+ /** Used as a reference to the global object */
+ var root = (objectTypes[typeof window] && window) || this;
+
+ /** Backup possible global object */
+ var oldRoot = root;
+
+ /** Detect free variable `exports` */
+ var freeExports = objectTypes[typeof exports] && exports;
+
+ /** Detect free variable `module` */
+ var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;
+
+ /** Detect free variable `global` from Node.js or Browserified code and use it as `root` */
+ var freeGlobal = freeExports && freeModule && typeof global == 'object' && global;
+ if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal)) {
+ root = freeGlobal;
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /*! Based on https://mths.be/fromcodepoint v0.2.0 by @mathias */
+
+ var stringFromCharCode = String.fromCharCode;
+ var floor = Math.floor;
+ function fromCodePoint() {
+ var MAX_SIZE = 0x4000;
+ var codeUnits = [];
+ var highSurrogate;
+ var lowSurrogate;
+ var index = -1;
+ var length = arguments.length;
+ if (!length) {
+ return '';
+ }
+ var result = '';
+ while (++index < length) {
+ var codePoint = Number(arguments[index]);
+ if (
+ !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`
+ codePoint < 0 || // not a valid Unicode code point
+ codePoint > 0x10FFFF || // not a valid Unicode code point
+ floor(codePoint) != codePoint // not an integer
+ ) {
+ throw RangeError('Invalid code point: ' + codePoint);
+ }
+ if (codePoint <= 0xFFFF) {
+ // BMP code point
+ codeUnits.push(codePoint);
+ } else {
+ // Astral code point; split in surrogate halves
+ // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+ codePoint -= 0x10000;
+ highSurrogate = (codePoint >> 10) + 0xD800;
+ lowSurrogate = (codePoint % 0x400) + 0xDC00;
+ codeUnits.push(highSurrogate, lowSurrogate);
+ }
+ if (index + 1 == length || codeUnits.length > MAX_SIZE) {
+ result += stringFromCharCode.apply(null, codeUnits);
+ codeUnits.length = 0;
+ }
+ }
+ return result;
+ }
+
+ function assertType(type, expected) {
+ if (expected.indexOf('|') == -1) {
+ if (type == expected) {
+ return;
+ }
+
+ throw Error('Invalid node type: ' + type);
+ }
+
+ expected = assertType.hasOwnProperty(expected)
+ ? assertType[expected]
+ : (assertType[expected] = RegExp('^(?:' + expected + ')$'));
+
+ if (expected.test(type)) {
+ return;
+ }
+
+ throw Error('Invalid node type: ' + type);
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ function generate(node) {
+ var type = node.type;
+
+ if (generate.hasOwnProperty(type) && typeof generate[type] == 'function') {
+ return generate[type](node);
+ }
+
+ throw Error('Invalid node type: ' + type);
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ function generateAlternative(node) {
+ assertType(node.type, 'alternative');
+
+ var terms = node.body,
+ length = terms ? terms.length : 0;
+
+ if (length == 1) {
+ return generateTerm(terms[0]);
+ } else {
+ var i = -1,
+ result = '';
+
+ while (++i < length) {
+ result += generateTerm(terms[i]);
+ }
+
+ return result;
+ }
+ }
+
+ function generateAnchor(node) {
+ assertType(node.type, 'anchor');
+
+ switch (node.kind) {
+ case 'start':
+ return '^';
+ case 'end':
+ return '$';
+ case 'boundary':
+ return '\\b';
+ case 'not-boundary':
+ return '\\B';
+ default:
+ throw Error('Invalid assertion');
+ }
+ }
+
+ function generateAtom(node) {
+ assertType(node.type, 'anchor|characterClass|characterClassEscape|dot|group|reference|value');
+
+ return generate(node);
+ }
+
+ function generateCharacterClass(node) {
+ assertType(node.type, 'characterClass');
+
+ var classRanges = node.body,
+ length = classRanges ? classRanges.length : 0;
+
+ var i = -1,
+ result = '[';
+
+ if (node.negative) {
+ result += '^';
+ }
+
+ while (++i < length) {
+ result += generateClassAtom(classRanges[i]);
+ }
+
+ result += ']';
+
+ return result;
+ }
+
+ function generateCharacterClassEscape(node) {
+ assertType(node.type, 'characterClassEscape');
+
+ return '\\' + node.value;
+ }
+
+ function generateCharacterClassRange(node) {
+ assertType(node.type, 'characterClassRange');
+
+ var min = node.min,
+ max = node.max;
+
+ if (min.type == 'characterClassRange' || max.type == 'characterClassRange') {
+ throw Error('Invalid character class range');
+ }
+
+ return generateClassAtom(min) + '-' + generateClassAtom(max);
+ }
+
+ function generateClassAtom(node) {
+ assertType(node.type, 'anchor|characterClassEscape|characterClassRange|dot|value');
+
+ return generate(node);
+ }
+
+ function generateDisjunction(node) {
+ assertType(node.type, 'disjunction');
+
+ var body = node.body,
+ length = body ? body.length : 0;
+
+ if (length == 0) {
+ throw Error('No body');
+ } else if (length == 1) {
+ return generate(body[0]);
+ } else {
+ var i = -1,
+ result = '';
+
+ while (++i < length) {
+ if (i != 0) {
+ result += '|';
+ }
+ result += generate(body[i]);
+ }
+
+ return result;
+ }
+ }
+
+ function generateDot(node) {
+ assertType(node.type, 'dot');
+
+ return '.';
+ }
+
+ function generateGroup(node) {
+ assertType(node.type, 'group');
+
+ var result = '(';
+
+ switch (node.behavior) {
+ case 'normal':
+ break;
+ case 'ignore':
+ result += '?:';
+ break;
+ case 'lookahead':
+ result += '?=';
+ break;
+ case 'negativeLookahead':
+ result += '?!';
+ break;
+ default:
+ throw Error('Invalid behaviour: ' + node.behaviour);
+ }
+
+ var body = node.body,
+ length = body ? body.length : 0;
+
+ if (length == 1) {
+ result += generate(body[0]);
+ } else {
+ var i = -1;
+
+ while (++i < length) {
+ result += generate(body[i]);
+ }
+ }
+
+ result += ')';
+
+ return result;
+ }
+
+ function generateQuantifier(node) {
+ assertType(node.type, 'quantifier');
+
+ var quantifier = '',
+ min = node.min,
+ max = node.max;
+
+ switch (max) {
+ case undefined:
+ case null:
+ switch (min) {
+ case 0:
+ quantifier = '*'
+ break;
+ case 1:
+ quantifier = '+';
+ break;
+ default:
+ quantifier = '{' + min + ',}';
+ break;
+ }
+ break;
+ default:
+ if (min == max) {
+ quantifier = '{' + min + '}';
+ }
+ else if (min == 0 && max == 1) {
+ quantifier = '?';
+ } else {
+ quantifier = '{' + min + ',' + max + '}';
+ }
+ break;
+ }
+
+ if (!node.greedy) {
+ quantifier += '?';
+ }
+
+ return generateAtom(node.body[0]) + quantifier;
+ }
+
+ function generateReference(node) {
+ assertType(node.type, 'reference');
+
+ return '\\' + node.matchIndex;
+ }
+
+ function generateTerm(node) {
+ assertType(node.type, 'anchor|characterClass|characterClassEscape|empty|group|quantifier|reference|value');
+
+ return generate(node);
+ }
+
+ function generateValue(node) {
+ assertType(node.type, 'value');
+
+ var kind = node.kind,
+ codePoint = node.codePoint;
+
+ switch (kind) {
+ case 'controlLetter':
+ return '\\c' + fromCodePoint(codePoint + 64);
+ case 'hexadecimalEscape':
+ return '\\x' + ('00' + codePoint.toString(16).toUpperCase()).slice(-2);
+ case 'identifier':
+ return '\\' + fromCodePoint(codePoint);
+ case 'null':
+ return '\\' + codePoint;
+ case 'octal':
+ return '\\' + codePoint.toString(8);
+ case 'singleEscape':
+ switch (codePoint) {
+ case 0x0008:
+ return '\\b';
+ case 0x009:
+ return '\\t';
+ case 0x00A:
+ return '\\n';
+ case 0x00B:
+ return '\\v';
+ case 0x00C:
+ return '\\f';
+ case 0x00D:
+ return '\\r';
+ default:
+ throw Error('Invalid codepoint: ' + codePoint);
+ }
+ case 'symbol':
+ return fromCodePoint(codePoint);
+ case 'unicodeEscape':
+ return '\\u' + ('0000' + codePoint.toString(16).toUpperCase()).slice(-4);
+ case 'unicodeCodePointEscape':
+ return '\\u{' + codePoint.toString(16).toUpperCase() + '}';
+ default:
+ throw Error('Unsupported node kind: ' + kind);
+ }
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ generate.alternative = generateAlternative;
+ generate.anchor = generateAnchor;
+ generate.characterClass = generateCharacterClass;
+ generate.characterClassEscape = generateCharacterClassEscape;
+ generate.characterClassRange = generateCharacterClassRange;
+ generate.disjunction = generateDisjunction;
+ generate.dot = generateDot;
+ generate.group = generateGroup;
+ generate.quantifier = generateQuantifier;
+ generate.reference = generateReference;
+ generate.value = generateValue;
+
+ /*--------------------------------------------------------------------------*/
+
+ // export regjsgen
+ // some AMD build optimizers, like r.js, check for condition patterns like the following:
+ if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {
+ // define as an anonymous module so, through path mapping, it can be aliased
+ define(function() {
+ return {
+ 'generate': generate
+ };
+ });
+ }
+ // check for `exports` after `define` in case a build optimizer adds an `exports` object
+ else if (freeExports && freeModule) {
+ // in Narwhal, Node.js, Rhino -require, or RingoJS
+ freeExports.generate = generate;
+ }
+ // in a browser or Rhino
+ else {
+ root.regjsgen = {
+ 'generate': generate
+ };
+ }
+}.call(this));
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}],585:[function(_dereq_,module,exports){
+// regjsparser
+//
+// ==================================================================
+//
+// See ECMA-262 Standard: 15.10.1
+//
+// NOTE: The ECMA-262 standard uses the term "Assertion" for /^/. Here the
+// term "Anchor" is used.
+//
+// Pattern ::
+// Disjunction
+//
+// Disjunction ::
+// Alternative
+// Alternative | Disjunction
+//
+// Alternative ::
+// [empty]
+// Alternative Term
+//
+// Term ::
+// Anchor
+// Atom
+// Atom Quantifier
+//
+// Anchor ::
+// ^
+// $
+// \ b
+// \ B
+// ( ? = Disjunction )
+// ( ? ! Disjunction )
+//
+// Quantifier ::
+// QuantifierPrefix
+// QuantifierPrefix ?
+//
+// QuantifierPrefix ::
+// *
+// +
+// ?
+// { DecimalDigits }
+// { DecimalDigits , }
+// { DecimalDigits , DecimalDigits }
+//
+// Atom ::
+// PatternCharacter
+// .
+// \ AtomEscape
+// CharacterClass
+// ( Disjunction )
+// ( ? : Disjunction )
+//
+// PatternCharacter ::
+// SourceCharacter but not any of: ^ $ \ . * + ? ( ) [ ] { } |
+//
+// AtomEscape ::
+// DecimalEscape
+// CharacterEscape
+// CharacterClassEscape
+//
+// CharacterEscape[U] ::
+// ControlEscape
+// c ControlLetter
+// HexEscapeSequence
+// RegExpUnicodeEscapeSequence[?U] (ES6)
+// IdentityEscape[?U]
+//
+// ControlEscape ::
+// one of f n r t v
+// ControlLetter ::
+// one of
+// a b c d e f g h i j k l m n o p q r s t u v w x y z
+// A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
+//
+// IdentityEscape ::
+// SourceCharacter but not IdentifierPart
+//
+//
+//
+// DecimalEscape ::
+// DecimalIntegerLiteral [lookahead ∉ DecimalDigit]
+//
+// CharacterClassEscape ::
+// one of d D s S w W
+//
+// CharacterClass ::
+// [ [lookahead ∉ {^}] ClassRanges ]
+// [ ^ ClassRanges ]
+//
+// ClassRanges ::
+// [empty]
+// NonemptyClassRanges
+//
+// NonemptyClassRanges ::
+// ClassAtom
+// ClassAtom NonemptyClassRangesNoDash
+// ClassAtom - ClassAtom ClassRanges
+//
+// NonemptyClassRangesNoDash ::
+// ClassAtom
+// ClassAtomNoDash NonemptyClassRangesNoDash
+// ClassAtomNoDash - ClassAtom ClassRanges
+//
+// ClassAtom ::
+// -
+// ClassAtomNoDash
+//
+// ClassAtomNoDash ::
+// SourceCharacter but not one of \ or ] or -
+// \ ClassEscape
+//
+// ClassEscape ::
+// DecimalEscape
+// b
+// CharacterEscape
+// CharacterClassEscape
+
+(function() {
+
+ function parse(str, flags) {
+ function addRaw(node) {
+ node.raw = str.substring(node.range[0], node.range[1]);
+ return node;
+ }
+
+ function updateRawStart(node, start) {
+ node.range[0] = start;
+ return addRaw(node);
+ }
+
+ function createAnchor(kind, rawLength) {
+ return addRaw({
+ type: 'anchor',
+ kind: kind,
+ range: [
+ pos - rawLength,
+ pos
+ ]
+ });
+ }
+
+ function createValue(kind, codePoint, from, to) {
+ return addRaw({
+ type: 'value',
+ kind: kind,
+ codePoint: codePoint,
+ range: [from, to]
+ });
+ }
+
+ function createEscaped(kind, codePoint, value, fromOffset) {
+ fromOffset = fromOffset || 0;
+ return createValue(kind, codePoint, pos - (value.length + fromOffset), pos);
+ }
+
+ function createCharacter(matches) {
+ var _char = matches[0];
+ var first = _char.charCodeAt(0);
+ if (hasUnicodeFlag) {
+ var second;
+ if (_char.length === 1 && first >= 0xD800 && first <= 0xDBFF) {
+ second = lookahead().charCodeAt(0);
+ if (second >= 0xDC00 && second <= 0xDFFF) {
+ // Unicode surrogate pair
+ pos++;
+ return createValue(
+ 'symbol',
+ (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000,
+ pos - 2, pos);
+ }
+ }
+ }
+ return createValue('symbol', first, pos - 1, pos);
+ }
+
+ function createDisjunction(alternatives, from, to) {
+ return addRaw({
+ type: 'disjunction',
+ body: alternatives,
+ range: [
+ from,
+ to
+ ]
+ });
+ }
+
+ function createDot() {
+ return addRaw({
+ type: 'dot',
+ range: [
+ pos - 1,
+ pos
+ ]
+ });
+ }
+
+ function createCharacterClassEscape(value) {
+ return addRaw({
+ type: 'characterClassEscape',
+ value: value,
+ range: [
+ pos - 2,
+ pos
+ ]
+ });
+ }
+
+ function createReference(matchIndex) {
+ return addRaw({
+ type: 'reference',
+ matchIndex: parseInt(matchIndex, 10),
+ range: [
+ pos - 1 - matchIndex.length,
+ pos
+ ]
+ });
+ }
+
+ function createGroup(behavior, disjunction, from, to) {
+ return addRaw({
+ type: 'group',
+ behavior: behavior,
+ body: disjunction,
+ range: [
+ from,
+ to
+ ]
+ });
+ }
+
+ function createQuantifier(min, max, from, to) {
+ if (to == null) {
+ from = pos - 1;
+ to = pos;
+ }
+
+ return addRaw({
+ type: 'quantifier',
+ min: min,
+ max: max,
+ greedy: true,
+ body: null, // set later on
+ range: [
+ from,
+ to
+ ]
+ });
+ }
+
+ function createAlternative(terms, from, to) {
+ return addRaw({
+ type: 'alternative',
+ body: terms,
+ range: [
+ from,
+ to
+ ]
+ });
+ }
+
+ function createCharacterClass(classRanges, negative, from, to) {
+ return addRaw({
+ type: 'characterClass',
+ body: classRanges,
+ negative: negative,
+ range: [
+ from,
+ to
+ ]
+ });
+ }
+
+ function createClassRange(min, max, from, to) {
+ // See 15.10.2.15:
+ if (min.codePoint > max.codePoint) {
+ bail('invalid range in character class', min.raw + '-' + max.raw, from, to);
+ }
+
+ return addRaw({
+ type: 'characterClassRange',
+ min: min,
+ max: max,
+ range: [
+ from,
+ to
+ ]
+ });
+ }
+
+ function flattenBody(body) {
+ if (body.type === 'alternative') {
+ return body.body;
+ } else {
+ return [body];
+ }
+ }
+
+ function isEmpty(obj) {
+ return obj.type === 'empty';
+ }
+
+ function incr(amount) {
+ amount = (amount || 1);
+ var res = str.substring(pos, pos + amount);
+ pos += (amount || 1);
+ return res;
+ }
+
+ function skip(value) {
+ if (!match(value)) {
+ bail('character', value);
+ }
+ }
+
+ function match(value) {
+ if (str.indexOf(value, pos) === pos) {
+ return incr(value.length);
+ }
+ }
+
+ function lookahead() {
+ return str[pos];
+ }
+
+ function current(value) {
+ return str.indexOf(value, pos) === pos;
+ }
+
+ function next(value) {
+ return str[pos + 1] === value;
+ }
+
+ function matchReg(regExp) {
+ var subStr = str.substring(pos);
+ var res = subStr.match(regExp);
+ if (res) {
+ res.range = [];
+ res.range[0] = pos;
+ incr(res[0].length);
+ res.range[1] = pos;
+ }
+ return res;
+ }
+
+ function parseDisjunction() {
+ // Disjunction ::
+ // Alternative
+ // Alternative | Disjunction
+ var res = [], from = pos;
+ res.push(parseAlternative());
+
+ while (match('|')) {
+ res.push(parseAlternative());
+ }
+
+ if (res.length === 1) {
+ return res[0];
+ }
+
+ return createDisjunction(res, from, pos);
+ }
+
+ function parseAlternative() {
+ var res = [], from = pos;
+ var term;
+
+ // Alternative ::
+ // [empty]
+ // Alternative Term
+ while (term = parseTerm()) {
+ res.push(term);
+ }
+
+ if (res.length === 1) {
+ return res[0];
+ }
+
+ return createAlternative(res, from, pos);
+ }
+
+ function parseTerm() {
+ // Term ::
+ // Anchor
+ // Atom
+ // Atom Quantifier
+
+ if (pos >= str.length || current('|') || current(')')) {
+ return null; /* Means: The term is empty */
+ }
+
+ var anchor = parseAnchor();
+
+ if (anchor) {
+ return anchor;
+ }
+
+ var atom = parseAtom();
+ if (!atom) {
+ bail('Expected atom');
+ }
+ var quantifier = parseQuantifier() || false;
+ if (quantifier) {
+ quantifier.body = flattenBody(atom);
+ // The quantifier contains the atom. Therefore, the beginning of the
+ // quantifier range is given by the beginning of the atom.
+ updateRawStart(quantifier, atom.range[0]);
+ return quantifier;
+ }
+ return atom;
+ }
+
+ function parseGroup(matchA, typeA, matchB, typeB) {
+ var type = null, from = pos;
+
+ if (match(matchA)) {
+ type = typeA;
+ } else if (match(matchB)) {
+ type = typeB;
+ } else {
+ return false;
+ }
+
+ var body = parseDisjunction();
+ if (!body) {
+ bail('Expected disjunction');
+ }
+ skip(')');
+ var group = createGroup(type, flattenBody(body), from, pos);
+
+ if (type == 'normal') {
+ // Keep track of the number of closed groups. This is required for
+ // parseDecimalEscape(). In case the string is parsed a second time the
+ // value already holds the total count and no incrementation is required.
+ if (firstIteration) {
+ closedCaptureCounter++;
+ }
+ }
+ return group;
+ }
+
+ function parseAnchor() {
+ // Anchor ::
+ // ^
+ // $
+ // \ b
+ // \ B
+ // ( ? = Disjunction )
+ // ( ? ! Disjunction )
+ var res, from = pos;
+
+ if (match('^')) {
+ return createAnchor('start', 1 /* rawLength */);
+ } else if (match('$')) {
+ return createAnchor('end', 1 /* rawLength */);
+ } else if (match('\\b')) {
+ return createAnchor('boundary', 2 /* rawLength */);
+ } else if (match('\\B')) {
+ return createAnchor('not-boundary', 2 /* rawLength */);
+ } else {
+ return parseGroup('(?=', 'lookahead', '(?!', 'negativeLookahead');
+ }
+ }
+
+ function parseQuantifier() {
+ // Quantifier ::
+ // QuantifierPrefix
+ // QuantifierPrefix ?
+ //
+ // QuantifierPrefix ::
+ // *
+ // +
+ // ?
+ // { DecimalDigits }
+ // { DecimalDigits , }
+ // { DecimalDigits , DecimalDigits }
+
+ var res, from = pos;
+ var quantifier;
+ var min, max;
+
+ if (match('*')) {
+ quantifier = createQuantifier(0);
+ }
+ else if (match('+')) {
+ quantifier = createQuantifier(1);
+ }
+ else if (match('?')) {
+ quantifier = createQuantifier(0, 1);
+ }
+ else if (res = matchReg(/^\{([0-9]+)\}/)) {
+ min = parseInt(res[1], 10);
+ quantifier = createQuantifier(min, min, res.range[0], res.range[1]);
+ }
+ else if (res = matchReg(/^\{([0-9]+),\}/)) {
+ min = parseInt(res[1], 10);
+ quantifier = createQuantifier(min, undefined, res.range[0], res.range[1]);
+ }
+ else if (res = matchReg(/^\{([0-9]+),([0-9]+)\}/)) {
+ min = parseInt(res[1], 10);
+ max = parseInt(res[2], 10);
+ if (min > max) {
+ bail('numbers out of order in {} quantifier', '', from, pos);
+ }
+ quantifier = createQuantifier(min, max, res.range[0], res.range[1]);
+ }
+
+ if (quantifier) {
+ if (match('?')) {
+ quantifier.greedy = false;
+ quantifier.range[1] += 1;
+ }
+ }
+
+ return quantifier;
+ }
+
+ function parseAtom() {
+ // Atom ::
+ // PatternCharacter
+ // .
+ // \ AtomEscape
+ // CharacterClass
+ // ( Disjunction )
+ // ( ? : Disjunction )
+
+ var res;
+
+ // jviereck: allow ']', '}' here as well to be compatible with browser's
+ // implementations: ']'.match(/]/);
+ // if (res = matchReg(/^[^^$\\.*+?()[\]{}|]/)) {
+ if (res = matchReg(/^[^^$\\.*+?(){[|]/)) {
+ // PatternCharacter
+ return createCharacter(res);
+ }
+ else if (match('.')) {
+ // .
+ return createDot();
+ }
+ else if (match('\\')) {
+ // \ AtomEscape
+ res = parseAtomEscape();
+ if (!res) {
+ bail('atomEscape');
+ }
+ return res;
+ }
+ else if (res = parseCharacterClass()) {
+ return res;
+ }
+ else {
+ // ( Disjunction )
+ // ( ? : Disjunction )
+ return parseGroup('(?:', 'ignore', '(', 'normal');
+ }
+ }
+
+ function parseUnicodeSurrogatePairEscape(firstEscape) {
+ if (hasUnicodeFlag) {
+ var first, second;
+ if (firstEscape.kind == 'unicodeEscape' &&
+ (first = firstEscape.codePoint) >= 0xD800 && first <= 0xDBFF &&
+ current('\\') && next('u') ) {
+ var prevPos = pos;
+ pos++;
+ var secondEscape = parseClassEscape();
+ if (secondEscape.kind == 'unicodeEscape' &&
+ (second = secondEscape.codePoint) >= 0xDC00 && second <= 0xDFFF) {
+ // Unicode surrogate pair
+ firstEscape.range[1] = secondEscape.range[1];
+ firstEscape.codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
+ firstEscape.type = 'value';
+ firstEscape.kind = 'unicodeCodePointEscape';
+ addRaw(firstEscape);
+ }
+ else {
+ pos = prevPos;
+ }
+ }
+ }
+ return firstEscape;
+ }
+
+ function parseClassEscape() {
+ return parseAtomEscape(true);
+ }
+
+ function parseAtomEscape(insideCharacterClass) {
+ // AtomEscape ::
+ // DecimalEscape
+ // CharacterEscape
+ // CharacterClassEscape
+
+ var res, from = pos;
+
+ res = parseDecimalEscape();
+ if (res) {
+ return res;
+ }
+
+ // For ClassEscape
+ if (insideCharacterClass) {
+ if (match('b')) {
+ // 15.10.2.19
+ // The production ClassEscape :: b evaluates by returning the
+ // CharSet containing the one character (Unicode value 0008).
+ return createEscaped('singleEscape', 0x0008, '\\b');
+ } else if (match('B')) {
+ bail('\\B not possible inside of CharacterClass', '', from);
+ }
+ }
+
+ res = parseCharacterEscape();
+
+ return res;
+ }
+
+
+ function parseDecimalEscape() {
+ // DecimalEscape ::
+ // DecimalIntegerLiteral [lookahead ∉ DecimalDigit]
+ // CharacterClassEscape :: one of d D s S w W
+
+ var res, match;
+
+ if (res = matchReg(/^(?!0)\d+/)) {
+ match = res[0];
+ var refIdx = parseInt(res[0], 10);
+ if (refIdx <= closedCaptureCounter) {
+ // If the number is smaller than the normal-groups found so
+ // far, then it is a reference...
+ return createReference(res[0]);
+ } else {
+ // ... otherwise it needs to be interpreted as a octal (if the
+ // number is in an octal format). If it is NOT octal format,
+ // then the slash is ignored and the number is matched later
+ // as normal characters.
+
+ // Recall the negative decision to decide if the input must be parsed
+ // a second time with the total normal-groups.
+ backrefDenied.push(refIdx);
+
+ // Reset the position again, as maybe only parts of the previous
+ // matched numbers are actual octal numbers. E.g. in '019' only
+ // the '01' should be matched.
+ incr(-res[0].length);
+ if (res = matchReg(/^[0-7]{1,3}/)) {
+ return createEscaped('octal', parseInt(res[0], 8), res[0], 1);
+ } else {
+ // If we end up here, we have a case like /\91/. Then the
+ // first slash is to be ignored and the 9 & 1 to be treated
+ // like ordinary characters. Create a character for the
+ // first number only here - other number-characters
+ // (if available) will be matched later.
+ res = createCharacter(matchReg(/^[89]/));
+ return updateRawStart(res, res.range[0] - 1);
+ }
+ }
+ }
+ // Only allow octal numbers in the following. All matched numbers start
+ // with a zero (if the do not, the previous if-branch is executed).
+ // If the number is not octal format and starts with zero (e.g. `091`)
+ // then only the zeros `0` is treated here and the `91` are ordinary
+ // characters.
+ // Example:
+ // /\091/.exec('\091')[0].length === 3
+ else if (res = matchReg(/^[0-7]{1,3}/)) {
+ match = res[0];
+ if (/^0{1,3}$/.test(match)) {
+ // If they are all zeros, then only take the first one.
+ return createEscaped('null', 0x0000, '0', match.length + 1);
+ } else {
+ return createEscaped('octal', parseInt(match, 8), match, 1);
+ }
+ } else if (res = matchReg(/^[dDsSwW]/)) {
+ return createCharacterClassEscape(res[0]);
+ }
+ return false;
+ }
+
+ function parseCharacterEscape() {
+ // CharacterEscape ::
+ // ControlEscape
+ // c ControlLetter
+ // HexEscapeSequence
+ // UnicodeEscapeSequence
+ // IdentityEscape
+
+ var res;
+ if (res = matchReg(/^[fnrtv]/)) {
+ // ControlEscape
+ var codePoint = 0;
+ switch (res[0]) {
+ case 't': codePoint = 0x009; break;
+ case 'n': codePoint = 0x00A; break;
+ case 'v': codePoint = 0x00B; break;
+ case 'f': codePoint = 0x00C; break;
+ case 'r': codePoint = 0x00D; break;
+ }
+ return createEscaped('singleEscape', codePoint, '\\' + res[0]);
+ } else if (res = matchReg(/^c([a-zA-Z])/)) {
+ // c ControlLetter
+ return createEscaped('controlLetter', res[1].charCodeAt(0) % 32, res[1], 2);
+ } else if (res = matchReg(/^x([0-9a-fA-F]{2})/)) {
+ // HexEscapeSequence
+ return createEscaped('hexadecimalEscape', parseInt(res[1], 16), res[1], 2);
+ } else if (res = matchReg(/^u([0-9a-fA-F]{4})/)) {
+ // UnicodeEscapeSequence
+ return parseUnicodeSurrogatePairEscape(
+ createEscaped('unicodeEscape', parseInt(res[1], 16), res[1], 2)
+ );
+ } else if (hasUnicodeFlag && (res = matchReg(/^u\{([0-9a-fA-F]+)\}/))) {
+ // RegExpUnicodeEscapeSequence (ES6 Unicode code point escape)
+ return createEscaped('unicodeCodePointEscape', parseInt(res[1], 16), res[1], 4);
+ } else {
+ // IdentityEscape
+ return parseIdentityEscape();
+ }
+ }
+
+ // Taken from the Esprima parser.
+ function isIdentifierPart(ch) {
+ // Generated by `tools/generate-identifier-regex.js`.
+ var NonAsciiIdentifierPart = new RegExp('[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]');
+
+ return (ch === 36) || (ch === 95) || // $ (dollar) and _ (underscore)
+ (ch >= 65 && ch <= 90) || // A..Z
+ (ch >= 97 && ch <= 122) || // a..z
+ (ch >= 48 && ch <= 57) || // 0..9
+ (ch === 92) || // \ (backslash)
+ ((ch >= 0x80) && NonAsciiIdentifierPart.test(String.fromCharCode(ch)));
+ }
+
+ function parseIdentityEscape() {
+ // IdentityEscape ::
+ // SourceCharacter but not IdentifierPart
+ //
+ //
+
+ var ZWJ = '\u200C';
+ var ZWNJ = '\u200D';
+
+ var tmp;
+
+ if (!isIdentifierPart(lookahead())) {
+ tmp = incr();
+ return createEscaped('identifier', tmp.charCodeAt(0), tmp, 1);
+ }
+
+ if (match(ZWJ)) {
+ //
+ return createEscaped('identifier', 0x200C, ZWJ);
+ } else if (match(ZWNJ)) {
+ //
+ return createEscaped('identifier', 0x200D, ZWNJ);
+ }
+
+ return null;
+ }
+
+ function parseCharacterClass() {
+ // CharacterClass ::
+ // [ [lookahead ∉ {^}] ClassRanges ]
+ // [ ^ ClassRanges ]
+
+ var res, from = pos;
+ if (res = matchReg(/^\[\^/)) {
+ res = parseClassRanges();
+ skip(']');
+ return createCharacterClass(res, true, from, pos);
+ } else if (match('[')) {
+ res = parseClassRanges();
+ skip(']');
+ return createCharacterClass(res, false, from, pos);
+ }
+
+ return null;
+ }
+
+ function parseClassRanges() {
+ // ClassRanges ::
+ // [empty]
+ // NonemptyClassRanges
+
+ var res;
+ if (current(']')) {
+ // Empty array means nothing insinde of the ClassRange.
+ return [];
+ } else {
+ res = parseNonemptyClassRanges();
+ if (!res) {
+ bail('nonEmptyClassRanges');
+ }
+ return res;
+ }
+ }
+
+ function parseHelperClassRanges(atom) {
+ var from, to, res;
+ if (current('-') && !next(']')) {
+ // ClassAtom - ClassAtom ClassRanges
+ skip('-');
+
+ res = parseClassAtom();
+ if (!res) {
+ bail('classAtom');
+ }
+ to = pos;
+ var classRanges = parseClassRanges();
+ if (!classRanges) {
+ bail('classRanges');
+ }
+ from = atom.range[0];
+ if (classRanges.type === 'empty') {
+ return [createClassRange(atom, res, from, to)];
+ }
+ return [createClassRange(atom, res, from, to)].concat(classRanges);
+ }
+
+ res = parseNonemptyClassRangesNoDash();
+ if (!res) {
+ bail('nonEmptyClassRangesNoDash');
+ }
+
+ return [atom].concat(res);
+ }
+
+ function parseNonemptyClassRanges() {
+ // NonemptyClassRanges ::
+ // ClassAtom
+ // ClassAtom NonemptyClassRangesNoDash
+ // ClassAtom - ClassAtom ClassRanges
+
+ var atom = parseClassAtom();
+ if (!atom) {
+ bail('classAtom');
+ }
+
+ if (current(']')) {
+ // ClassAtom
+ return [atom];
+ }
+
+ // ClassAtom NonemptyClassRangesNoDash
+ // ClassAtom - ClassAtom ClassRanges
+ return parseHelperClassRanges(atom);
+ }
+
+ function parseNonemptyClassRangesNoDash() {
+ // NonemptyClassRangesNoDash ::
+ // ClassAtom
+ // ClassAtomNoDash NonemptyClassRangesNoDash
+ // ClassAtomNoDash - ClassAtom ClassRanges
+
+ var res = parseClassAtom();
+ if (!res) {
+ bail('classAtom');
+ }
+ if (current(']')) {
+ // ClassAtom
+ return res;
+ }
+
+ // ClassAtomNoDash NonemptyClassRangesNoDash
+ // ClassAtomNoDash - ClassAtom ClassRanges
+ return parseHelperClassRanges(res);
+ }
+
+ function parseClassAtom() {
+ // ClassAtom ::
+ // -
+ // ClassAtomNoDash
+ if (match('-')) {
+ return createCharacter('-');
+ } else {
+ return parseClassAtomNoDash();
+ }
+ }
+
+ function parseClassAtomNoDash() {
+ // ClassAtomNoDash ::
+ // SourceCharacter but not one of \ or ] or -
+ // \ ClassEscape
+
+ var res;
+ if (res = matchReg(/^[^\\\]-]/)) {
+ return createCharacter(res[0]);
+ } else if (match('\\')) {
+ res = parseClassEscape();
+ if (!res) {
+ bail('classEscape');
+ }
+
+ return parseUnicodeSurrogatePairEscape(res);
+ }
+ }
+
+ function bail(message, details, from, to) {
+ from = from == null ? pos : from;
+ to = to == null ? from : to;
+
+ var contextStart = Math.max(0, from - 10);
+ var contextEnd = Math.min(to + 10, str.length);
+
+ // Output a bit of context and a line pointing to where our error is.
+ //
+ // We are assuming that there are no actual newlines in the content as this is a regular expression.
+ var context = ' ' + str.substring(contextStart, contextEnd);
+ var pointer = ' ' + new Array(from - contextStart + 1).join(' ') + '^';
+
+ throw SyntaxError(message + ' at position ' + from + (details ? ': ' + details : '') + '\n' + context + '\n' + pointer);
+ }
+
+ var backrefDenied = [];
+ var closedCaptureCounter = 0;
+ var firstIteration = true;
+ var hasUnicodeFlag = (flags || "").indexOf("u") !== -1;
+ var pos = 0;
+
+ // Convert the input to a string and treat the empty string special.
+ str = String(str);
+ if (str === '') {
+ str = '(?:)';
+ }
+
+ var result = parseDisjunction();
+
+ if (result.range[1] !== str.length) {
+ bail('Could not parse entire input - got stuck', '', result.range[1]);
+ }
+
+ // The spec requires to interpret the `\2` in `/\2()()/` as backreference.
+ // As the parser collects the number of capture groups as the string is
+ // parsed it is impossible to make these decisions at the point when the
+ // `\2` is handled. In case the local decision turns out to be wrong after
+ // the parsing has finished, the input string is parsed a second time with
+ // the total number of capture groups set.
+ //
+ // SEE: https://github.com/jviereck/regjsparser/issues/70
+ for (var i = 0; i < backrefDenied.length; i++) {
+ if (backrefDenied[i] <= closedCaptureCounter) {
+ // Parse the input a second time.
+ pos = 0;
+ firstIteration = false;
+ return parseDisjunction();
+ }
+ }
+
+ return result;
+ }
+
+ var regjsparser = {
+ parse: parse
+ };
+
+ if (typeof module !== 'undefined' && module.exports) {
+ module.exports = regjsparser;
+ } else {
+ window.regjsparser = regjsparser;
+ }
+
+}());
+
+},{}],586:[function(_dereq_,module,exports){
+'use strict';
+var isFinite = _dereq_(433);
+
+module.exports = function (str, n) {
+ if (typeof str !== 'string') {
+ throw new TypeError('Expected a string as the first argument');
+ }
+
+ if (n < 0 || !isFinite(n)) {
+ throw new TypeError('Expected a finite positive number');
+ }
+
+ var ret = '';
+
+ do {
+ if (n & 1) {
+ ret += str;
+ }
+
+ str += str;
+ } while (n = n >> 1);
+
+ return ret;
+};
+
+},{"433":433}],587:[function(_dereq_,module,exports){
+'use strict';
+module.exports = /^#!.*/;
+
+},{}],588:[function(_dereq_,module,exports){
+// simple-fmt.js
+// MIT licensed, see LICENSE file
+// Copyright (c) 2013 Olov Lassus
+
+var fmt = (function() {
+ "use strict";
+
+ function fmt(str, var_args) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return str.replace(/\{(\d+)\}/g, function(s, match) {
+ return (match in args ? args[match] : s);
+ });
+ }
+
+ function obj(str, obj) {
+ return str.replace(/\{([_$a-zA-Z0-9][_$a-zA-Z0-9]*)\}/g, function(s, match) {
+ return (match in obj ? obj[match] : s);
+ });
+ }
+
+ function repeat(str, n) {
+ return (new Array(n + 1)).join(str);
+ }
+
+ fmt.fmt = fmt;
+ fmt.obj = obj;
+ fmt.repeat = repeat;
+ return fmt;
+})();
+
+if (typeof module !== "undefined" && typeof module.exports !== "undefined") {
+ module.exports = fmt;
+}
+
+},{}],589:[function(_dereq_,module,exports){
+// simple-is.js
+// MIT licensed, see LICENSE file
+// Copyright (c) 2013 Olov Lassus
+
+var is = (function() {
+ "use strict";
+
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
+ var toString = Object.prototype.toString;
+ var _undefined = void 0;
+
+ return {
+ nan: function(v) {
+ return v !== v;
+ },
+ boolean: function(v) {
+ return typeof v === "boolean";
+ },
+ number: function(v) {
+ return typeof v === "number";
+ },
+ string: function(v) {
+ return typeof v === "string";
+ },
+ fn: function(v) {
+ return typeof v === "function";
+ },
+ object: function(v) {
+ return v !== null && typeof v === "object";
+ },
+ primitive: function(v) {
+ var t = typeof v;
+ return v === null || v === _undefined ||
+ t === "boolean" || t === "number" || t === "string";
+ },
+ array: Array.isArray || function(v) {
+ return toString.call(v) === "[object Array]";
+ },
+ finitenumber: function(v) {
+ return typeof v === "number" && isFinite(v);
+ },
+ someof: function(v, values) {
+ return values.indexOf(v) >= 0;
+ },
+ noneof: function(v, values) {
+ return values.indexOf(v) === -1;
+ },
+ own: function(obj, prop) {
+ return hasOwnProperty.call(obj, prop);
+ },
+ };
+})();
+
+if (typeof module !== "undefined" && typeof module.exports !== "undefined") {
+ module.exports = is;
+}
+
+},{}],590:[function(_dereq_,module,exports){
+'use strict';
+module.exports = function (str) {
+ var isExtendedLengthPath = /^\\\\\?\\/.test(str);
+ var hasNonAscii = /[^\x00-\x80]+/.test(str);
+
+ if (isExtendedLengthPath || hasNonAscii) {
+ return str;
+ }
+
+ return str.replace(/\\/g, '/');
+};
+
+},{}],591:[function(_dereq_,module,exports){
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+{
+ var util = _dereq_(600);
+
+ /**
+ * A data structure which is a combination of an array and a set. Adding a new
+ * member is O(1), testing for membership is O(1), and finding the index of an
+ * element is O(1). Removing elements from the set is not supported. Only
+ * strings are supported for membership.
+ */
+ function ArraySet() {
+ this._array = [];
+ this._set = {};
+ }
+
+ /**
+ * Static method for creating ArraySet instances from an existing array.
+ */
+ ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
+ var set = new ArraySet();
+ for (var i = 0, len = aArray.length; i < len; i++) {
+ set.add(aArray[i], aAllowDuplicates);
+ }
+ return set;
+ };
+
+ /**
+ * Return how many unique items are in this ArraySet. If duplicates have been
+ * added, than those do not count towards the size.
+ *
+ * @returns Number
+ */
+ ArraySet.prototype.size = function ArraySet_size() {
+ return Object.getOwnPropertyNames(this._set).length;
+ };
+
+ /**
+ * Add the given string to this set.
+ *
+ * @param String aStr
+ */
+ ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
+ var sStr = util.toSetString(aStr);
+ var isDuplicate = this._set.hasOwnProperty(sStr);
+ var idx = this._array.length;
+ if (!isDuplicate || aAllowDuplicates) {
+ this._array.push(aStr);
+ }
+ if (!isDuplicate) {
+ this._set[sStr] = idx;
+ }
+ };
+
+ /**
+ * Is the given string a member of this set?
+ *
+ * @param String aStr
+ */
+ ArraySet.prototype.has = function ArraySet_has(aStr) {
+ var sStr = util.toSetString(aStr);
+ return this._set.hasOwnProperty(sStr);
+ };
+
+ /**
+ * What is the index of the given string in the array?
+ *
+ * @param String aStr
+ */
+ ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
+ var sStr = util.toSetString(aStr);
+ if (this._set.hasOwnProperty(sStr)) {
+ return this._set[sStr];
+ }
+ throw new Error('"' + aStr + '" is not in the set.');
+ };
+
+ /**
+ * What is the element at the given index?
+ *
+ * @param Number aIdx
+ */
+ ArraySet.prototype.at = function ArraySet_at(aIdx) {
+ if (aIdx >= 0 && aIdx < this._array.length) {
+ return this._array[aIdx];
+ }
+ throw new Error('No element indexed by ' + aIdx);
+ };
+
+ /**
+ * Returns the array representation of this set (which has the proper indices
+ * indicated by indexOf). Note that this is a copy of the internal array used
+ * for storing the members so that no one can mess with internal state.
+ */
+ ArraySet.prototype.toArray = function ArraySet_toArray() {
+ return this._array.slice();
+ };
+
+ exports.ArraySet = ArraySet;
+}
+
+},{"600":600}],592:[function(_dereq_,module,exports){
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ *
+ * Based on the Base 64 VLQ implementation in Closure Compiler:
+ * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
+ *
+ * Copyright 2011 The Closure Compiler Authors. All rights reserved.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+{
+ var base64 = _dereq_(593);
+
+ // A single base 64 digit can contain 6 bits of data. For the base 64 variable
+ // length quantities we use in the source map spec, the first bit is the sign,
+ // the next four bits are the actual value, and the 6th bit is the
+ // continuation bit. The continuation bit tells us whether there are more
+ // digits in this value following this digit.
+ //
+ // Continuation
+ // | Sign
+ // | |
+ // V V
+ // 101011
+
+ var VLQ_BASE_SHIFT = 5;
+
+ // binary: 100000
+ var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
+
+ // binary: 011111
+ var VLQ_BASE_MASK = VLQ_BASE - 1;
+
+ // binary: 100000
+ var VLQ_CONTINUATION_BIT = VLQ_BASE;
+
+ /**
+ * Converts from a two-complement value to a value where the sign bit is
+ * placed in the least significant bit. For example, as decimals:
+ * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
+ * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
+ */
+ function toVLQSigned(aValue) {
+ return aValue < 0
+ ? ((-aValue) << 1) + 1
+ : (aValue << 1) + 0;
+ }
+
+ /**
+ * Converts to a two-complement value from a value where the sign bit is
+ * placed in the least significant bit. For example, as decimals:
+ * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1
+ * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2
+ */
+ function fromVLQSigned(aValue) {
+ var isNegative = (aValue & 1) === 1;
+ var shifted = aValue >> 1;
+ return isNegative
+ ? -shifted
+ : shifted;
+ }
+
+ /**
+ * Returns the base 64 VLQ encoded value.
+ */
+ exports.encode = function base64VLQ_encode(aValue) {
+ var encoded = "";
+ var digit;
+
+ var vlq = toVLQSigned(aValue);
+
+ do {
+ digit = vlq & VLQ_BASE_MASK;
+ vlq >>>= VLQ_BASE_SHIFT;
+ if (vlq > 0) {
+ // There are still more digits in this value, so we must make sure the
+ // continuation bit is marked.
+ digit |= VLQ_CONTINUATION_BIT;
+ }
+ encoded += base64.encode(digit);
+ } while (vlq > 0);
+
+ return encoded;
+ };
+
+ /**
+ * Decodes the next base 64 VLQ value from the given string and returns the
+ * value and the rest of the string via the out parameter.
+ */
+ exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
+ var strLen = aStr.length;
+ var result = 0;
+ var shift = 0;
+ var continuation, digit;
+
+ do {
+ if (aIndex >= strLen) {
+ throw new Error("Expected more digits in base 64 VLQ value.");
+ }
+
+ digit = base64.decode(aStr.charCodeAt(aIndex++));
+ if (digit === -1) {
+ throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
+ }
+
+ continuation = !!(digit & VLQ_CONTINUATION_BIT);
+ digit &= VLQ_BASE_MASK;
+ result = result + (digit << shift);
+ shift += VLQ_BASE_SHIFT;
+ } while (continuation);
+
+ aOutParam.value = fromVLQSigned(result);
+ aOutParam.rest = aIndex;
+ };
+}
+
+},{"593":593}],593:[function(_dereq_,module,exports){
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+{
+ var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
+
+ /**
+ * Encode an integer in the range of 0 to 63 to a single base 64 digit.
+ */
+ exports.encode = function (number) {
+ if (0 <= number && number < intToCharMap.length) {
+ return intToCharMap[number];
+ }
+ throw new TypeError("Must be between 0 and 63: " + number);
+ };
+
+ /**
+ * Decode a single base 64 character code digit to an integer. Returns -1 on
+ * failure.
+ */
+ exports.decode = function (charCode) {
+ var bigA = 65; // 'A'
+ var bigZ = 90; // 'Z'
+
+ var littleA = 97; // 'a'
+ var littleZ = 122; // 'z'
+
+ var zero = 48; // '0'
+ var nine = 57; // '9'
+
+ var plus = 43; // '+'
+ var slash = 47; // '/'
+
+ var littleOffset = 26;
+ var numberOffset = 52;
+
+ // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
+ if (bigA <= charCode && charCode <= bigZ) {
+ return (charCode - bigA);
+ }
+
+ // 26 - 51: abcdefghijklmnopqrstuvwxyz
+ if (littleA <= charCode && charCode <= littleZ) {
+ return (charCode - littleA + littleOffset);
+ }
+
+ // 52 - 61: 0123456789
+ if (zero <= charCode && charCode <= nine) {
+ return (charCode - zero + numberOffset);
+ }
+
+ // 62: +
+ if (charCode == plus) {
+ return 62;
+ }
+
+ // 63: /
+ if (charCode == slash) {
+ return 63;
+ }
+
+ // Invalid base64 digit.
+ return -1;
+ };
+}
+
+},{}],594:[function(_dereq_,module,exports){
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+{
+ exports.GREATEST_LOWER_BOUND = 1;
+ exports.LEAST_UPPER_BOUND = 2;
+
+ /**
+ * Recursive implementation of binary search.
+ *
+ * @param aLow Indices here and lower do not contain the needle.
+ * @param aHigh Indices here and higher do not contain the needle.
+ * @param aNeedle The element being searched for.
+ * @param aHaystack The non-empty array being searched.
+ * @param aCompare Function which takes two elements and returns -1, 0, or 1.
+ * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
+ * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
+ * closest element that is smaller than or greater than the one we are
+ * searching for, respectively, if the exact element cannot be found.
+ */
+ function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
+ // This function terminates when one of the following is true:
+ //
+ // 1. We find the exact element we are looking for.
+ //
+ // 2. We did not find the exact element, but we can return the index of
+ // the next-closest element.
+ //
+ // 3. We did not find the exact element, and there is no next-closest
+ // element than the one we are searching for, so we return -1.
+ var mid = Math.floor((aHigh - aLow) / 2) + aLow;
+ var cmp = aCompare(aNeedle, aHaystack[mid], true);
+ if (cmp === 0) {
+ // Found the element we are looking for.
+ return mid;
+ }
+ else if (cmp > 0) {
+ // Our needle is greater than aHaystack[mid].
+ if (aHigh - mid > 1) {
+ // The element is in the upper half.
+ return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
+ }
+
+ // The exact needle element was not found in this haystack. Determine if
+ // we are in termination case (3) or (2) and return the appropriate thing.
+ if (aBias == exports.LEAST_UPPER_BOUND) {
+ return aHigh < aHaystack.length ? aHigh : -1;
+ } else {
+ return mid;
+ }
+ }
+ else {
+ // Our needle is less than aHaystack[mid].
+ if (mid - aLow > 1) {
+ // The element is in the lower half.
+ return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
+ }
+
+ // we are in termination case (3) or (2) and return the appropriate thing.
+ if (aBias == exports.LEAST_UPPER_BOUND) {
+ return mid;
+ } else {
+ return aLow < 0 ? -1 : aLow;
+ }
+ }
+ }
+
+ /**
+ * This is an implementation of binary search which will always try and return
+ * the index of the closest element if there is no exact hit. This is because
+ * mappings between original and generated line/col pairs are single points,
+ * and there is an implicit region between each of them, so a miss just means
+ * that you aren't on the very start of a region.
+ *
+ * @param aNeedle The element you are looking for.
+ * @param aHaystack The array that is being searched.
+ * @param aCompare A function which takes the needle and an element in the
+ * array and returns -1, 0, or 1 depending on whether the needle is less
+ * than, equal to, or greater than the element, respectively.
+ * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
+ * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
+ * closest element that is smaller than or greater than the one we are
+ * searching for, respectively, if the exact element cannot be found.
+ * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
+ */
+ exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
+ if (aHaystack.length === 0) {
+ return -1;
+ }
+
+ var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
+ aCompare, aBias || exports.GREATEST_LOWER_BOUND);
+ if (index < 0) {
+ return -1;
+ }
+
+ // We have found either the exact element, or the next-closest element than
+ // the one we are searching for. However, there may be more than one such
+ // element. Make sure we always return the smallest of these.
+ while (index - 1 >= 0) {
+ if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
+ break;
+ }
+ --index;
+ }
+
+ return index;
+ };
+}
+
+},{}],595:[function(_dereq_,module,exports){
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2014 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+{
+ var util = _dereq_(600);
+
+ /**
+ * Determine whether mappingB is after mappingA with respect to generated
+ * position.
+ */
+ function generatedPositionAfter(mappingA, mappingB) {
+ // Optimized for most common case
+ var lineA = mappingA.generatedLine;
+ var lineB = mappingB.generatedLine;
+ var columnA = mappingA.generatedColumn;
+ var columnB = mappingB.generatedColumn;
+ return lineB > lineA || lineB == lineA && columnB >= columnA ||
+ util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
+ }
+
+ /**
+ * A data structure to provide a sorted view of accumulated mappings in a
+ * performance conscious manner. It trades a neglibable overhead in general
+ * case for a large speedup in case of mappings being added in order.
+ */
+ function MappingList() {
+ this._array = [];
+ this._sorted = true;
+ // Serves as infimum
+ this._last = {generatedLine: -1, generatedColumn: 0};
+ }
+
+ /**
+ * Iterate through internal items. This method takes the same arguments that
+ * `Array.prototype.forEach` takes.
+ *
+ * NOTE: The order of the mappings is NOT guaranteed.
+ */
+ MappingList.prototype.unsortedForEach =
+ function MappingList_forEach(aCallback, aThisArg) {
+ this._array.forEach(aCallback, aThisArg);
+ };
+
+ /**
+ * Add the given source mapping.
+ *
+ * @param Object aMapping
+ */
+ MappingList.prototype.add = function MappingList_add(aMapping) {
+ if (generatedPositionAfter(this._last, aMapping)) {
+ this._last = aMapping;
+ this._array.push(aMapping);
+ } else {
+ this._sorted = false;
+ this._array.push(aMapping);
+ }
+ };
+
+ /**
+ * Returns the flat, sorted array of mappings. The mappings are sorted by
+ * generated position.
+ *
+ * WARNING: This method returns internal data without copying, for
+ * performance. The return value must NOT be mutated, and should be treated as
+ * an immutable borrow. If you want to take ownership, you must make your own
+ * copy.
+ */
+ MappingList.prototype.toArray = function MappingList_toArray() {
+ if (!this._sorted) {
+ this._array.sort(util.compareByGeneratedPositionsInflated);
+ this._sorted = true;
+ }
+ return this._array;
+ };
+
+ exports.MappingList = MappingList;
+}
+
+},{"600":600}],596:[function(_dereq_,module,exports){
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+{
+ // It turns out that some (most?) JavaScript engines don't self-host
+ // `Array.prototype.sort`. This makes sense because C++ will likely remain
+ // faster than JS when doing raw CPU-intensive sorting. However, when using a
+ // custom comparator function, calling back and forth between the VM's C++ and
+ // JIT'd JS is rather slow *and* loses JIT type information, resulting in
+ // worse generated code for the comparator function than would be optimal. In
+ // fact, when sorting with a comparator, these costs outweigh the benefits of
+ // sorting in C++. By using our own JS-implemented Quick Sort (below), we get
+ // a ~3500ms mean speed-up in `bench/bench.html`.
+
+ /**
+ * Swap the elements indexed by `x` and `y` in the array `ary`.
+ *
+ * @param {Array} ary
+ * The array.
+ * @param {Number} x
+ * The index of the first item.
+ * @param {Number} y
+ * The index of the second item.
+ */
+ function swap(ary, x, y) {
+ var temp = ary[x];
+ ary[x] = ary[y];
+ ary[y] = temp;
+ }
+
+ /**
+ * Returns a random integer within the range `low .. high` inclusive.
+ *
+ * @param {Number} low
+ * The lower bound on the range.
+ * @param {Number} high
+ * The upper bound on the range.
+ */
+ function randomIntInRange(low, high) {
+ return Math.round(low + (Math.random() * (high - low)));
+ }
+
+ /**
+ * The Quick Sort algorithm.
+ *
+ * @param {Array} ary
+ * An array to sort.
+ * @param {function} comparator
+ * Function to use to compare two items.
+ * @param {Number} p
+ * Start index of the array
+ * @param {Number} r
+ * End index of the array
+ */
+ function doQuickSort(ary, comparator, p, r) {
+ // If our lower bound is less than our upper bound, we (1) partition the
+ // array into two pieces and (2) recurse on each half. If it is not, this is
+ // the empty array and our base case.
+
+ if (p < r) {
+ // (1) Partitioning.
+ //
+ // The partitioning chooses a pivot between `p` and `r` and moves all
+ // elements that are less than or equal to the pivot to the before it, and
+ // all the elements that are greater than it after it. The effect is that
+ // once partition is done, the pivot is in the exact place it will be when
+ // the array is put in sorted order, and it will not need to be moved
+ // again. This runs in O(n) time.
+
+ // Always choose a random pivot so that an input array which is reverse
+ // sorted does not cause O(n^2) running time.
+ var pivotIndex = randomIntInRange(p, r);
+ var i = p - 1;
+
+ swap(ary, pivotIndex, r);
+ var pivot = ary[r];
+
+ // Immediately after `j` is incremented in this loop, the following hold
+ // true:
+ //
+ // * Every element in `ary[p .. i]` is less than or equal to the pivot.
+ //
+ // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
+ for (var j = p; j < r; j++) {
+ if (comparator(ary[j], pivot) <= 0) {
+ i += 1;
+ swap(ary, i, j);
+ }
+ }
+
+ swap(ary, i + 1, j);
+ var q = i + 1;
+
+ // (2) Recurse on each half.
+
+ doQuickSort(ary, comparator, p, q - 1);
+ doQuickSort(ary, comparator, q + 1, r);
+ }
+ }
+
+ /**
+ * Sort the given array in-place with the given comparator function.
+ *
+ * @param {Array} ary
+ * An array to sort.
+ * @param {function} comparator
+ * Function to use to compare two items.
+ */
+ exports.quickSort = function (ary, comparator) {
+ doQuickSort(ary, comparator, 0, ary.length - 1);
+ };
+}
+
+},{}],597:[function(_dereq_,module,exports){
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+{
+ var util = _dereq_(600);
+ var binarySearch = _dereq_(594);
+ var ArraySet = _dereq_(591).ArraySet;
+ var base64VLQ = _dereq_(592);
+ var quickSort = _dereq_(596).quickSort;
+
+ function SourceMapConsumer(aSourceMap) {
+ var sourceMap = aSourceMap;
+ if (typeof aSourceMap === 'string') {
+ sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
+ }
+
+ return sourceMap.sections != null
+ ? new IndexedSourceMapConsumer(sourceMap)
+ : new BasicSourceMapConsumer(sourceMap);
+ }
+
+ SourceMapConsumer.fromSourceMap = function(aSourceMap) {
+ return BasicSourceMapConsumer.fromSourceMap(aSourceMap);
+ }
+
+ /**
+ * The version of the source mapping spec that we are consuming.
+ */
+ SourceMapConsumer.prototype._version = 3;
+
+ // `__generatedMappings` and `__originalMappings` are arrays that hold the
+ // parsed mapping coordinates from the source map's "mappings" attribute. They
+ // are lazily instantiated, accessed via the `_generatedMappings` and
+ // `_originalMappings` getters respectively, and we only parse the mappings
+ // and create these arrays once queried for a source location. We jump through
+ // these hoops because there can be many thousands of mappings, and parsing
+ // them is expensive, so we only want to do it if we must.
+ //
+ // Each object in the arrays is of the form:
+ //
+ // {
+ // generatedLine: The line number in the generated code,
+ // generatedColumn: The column number in the generated code,
+ // source: The path to the original source file that generated this
+ // chunk of code,
+ // originalLine: The line number in the original source that
+ // corresponds to this chunk of generated code,
+ // originalColumn: The column number in the original source that
+ // corresponds to this chunk of generated code,
+ // name: The name of the original symbol which generated this chunk of
+ // code.
+ // }
+ //
+ // All properties except for `generatedLine` and `generatedColumn` can be
+ // `null`.
+ //
+ // `_generatedMappings` is ordered by the generated positions.
+ //
+ // `_originalMappings` is ordered by the original positions.
+
+ SourceMapConsumer.prototype.__generatedMappings = null;
+ Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
+ get: function () {
+ if (!this.__generatedMappings) {
+ this._parseMappings(this._mappings, this.sourceRoot);
+ }
+
+ return this.__generatedMappings;
+ }
+ });
+
+ SourceMapConsumer.prototype.__originalMappings = null;
+ Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
+ get: function () {
+ if (!this.__originalMappings) {
+ this._parseMappings(this._mappings, this.sourceRoot);
+ }
+
+ return this.__originalMappings;
+ }
+ });
+
+ SourceMapConsumer.prototype._charIsMappingSeparator =
+ function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
+ var c = aStr.charAt(index);
+ return c === ";" || c === ",";
+ };
+
+ /**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+ SourceMapConsumer.prototype._parseMappings =
+ function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+ throw new Error("Subclasses must implement _parseMappings");
+ };
+
+ SourceMapConsumer.GENERATED_ORDER = 1;
+ SourceMapConsumer.ORIGINAL_ORDER = 2;
+
+ SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
+ SourceMapConsumer.LEAST_UPPER_BOUND = 2;
+
+ /**
+ * Iterate over each mapping between an original source/line/column and a
+ * generated line/column in this source map.
+ *
+ * @param Function aCallback
+ * The function that is called with each mapping.
+ * @param Object aContext
+ * Optional. If specified, this object will be the value of `this` every
+ * time that `aCallback` is called.
+ * @param aOrder
+ * Either `SourceMapConsumer.GENERATED_ORDER` or
+ * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
+ * iterate over the mappings sorted by the generated file's line/column
+ * order or the original's source/line/column order, respectively. Defaults to
+ * `SourceMapConsumer.GENERATED_ORDER`.
+ */
+ SourceMapConsumer.prototype.eachMapping =
+ function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
+ var context = aContext || null;
+ var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
+
+ var mappings;
+ switch (order) {
+ case SourceMapConsumer.GENERATED_ORDER:
+ mappings = this._generatedMappings;
+ break;
+ case SourceMapConsumer.ORIGINAL_ORDER:
+ mappings = this._originalMappings;
+ break;
+ default:
+ throw new Error("Unknown order of iteration.");
+ }
+
+ var sourceRoot = this.sourceRoot;
+ mappings.map(function (mapping) {
+ var source = mapping.source === null ? null : this._sources.at(mapping.source);
+ if (source != null && sourceRoot != null) {
+ source = util.join(sourceRoot, source);
+ }
+ return {
+ source: source,
+ generatedLine: mapping.generatedLine,
+ generatedColumn: mapping.generatedColumn,
+ originalLine: mapping.originalLine,
+ originalColumn: mapping.originalColumn,
+ name: mapping.name === null ? null : this._names.at(mapping.name)
+ };
+ }, this).forEach(aCallback, context);
+ };
+
+ /**
+ * Returns all generated line and column information for the original source,
+ * line, and column provided. If no column is provided, returns all mappings
+ * corresponding to a either the line we are searching for or the next
+ * closest line that has any mappings. Otherwise, returns all mappings
+ * corresponding to the given line and either the column we are searching for
+ * or the next closest column that has any offsets.
+ *
+ * The only argument is an object with the following properties:
+ *
+ * - source: The filename of the original source.
+ * - line: The line number in the original source.
+ * - column: Optional. the column number in the original source.
+ *
+ * and an array of objects is returned, each with the following properties:
+ *
+ * - line: The line number in the generated source, or null.
+ * - column: The column number in the generated source, or null.
+ */
+ SourceMapConsumer.prototype.allGeneratedPositionsFor =
+ function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
+ var line = util.getArg(aArgs, 'line');
+
+ // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
+ // returns the index of the closest mapping less than the needle. By
+ // setting needle.originalColumn to 0, we thus find the last mapping for
+ // the given line, provided such a mapping exists.
+ var needle = {
+ source: util.getArg(aArgs, 'source'),
+ originalLine: line,
+ originalColumn: util.getArg(aArgs, 'column', 0)
+ };
+
+ if (this.sourceRoot != null) {
+ needle.source = util.relative(this.sourceRoot, needle.source);
+ }
+ if (!this._sources.has(needle.source)) {
+ return [];
+ }
+ needle.source = this._sources.indexOf(needle.source);
+
+ var mappings = [];
+
+ var index = this._findMapping(needle,
+ this._originalMappings,
+ "originalLine",
+ "originalColumn",
+ util.compareByOriginalPositions,
+ binarySearch.LEAST_UPPER_BOUND);
+ if (index >= 0) {
+ var mapping = this._originalMappings[index];
+
+ if (aArgs.column === undefined) {
+ var originalLine = mapping.originalLine;
+
+ // Iterate until either we run out of mappings, or we run into
+ // a mapping for a different line than the one we found. Since
+ // mappings are sorted, this is guaranteed to find all mappings for
+ // the line we found.
+ while (mapping && mapping.originalLine === originalLine) {
+ mappings.push({
+ line: util.getArg(mapping, 'generatedLine', null),
+ column: util.getArg(mapping, 'generatedColumn', null),
+ lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+ });
+
+ mapping = this._originalMappings[++index];
+ }
+ } else {
+ var originalColumn = mapping.originalColumn;
+
+ // Iterate until either we run out of mappings, or we run into
+ // a mapping for a different line than the one we were searching for.
+ // Since mappings are sorted, this is guaranteed to find all mappings for
+ // the line we are searching for.
+ while (mapping &&
+ mapping.originalLine === line &&
+ mapping.originalColumn == originalColumn) {
+ mappings.push({
+ line: util.getArg(mapping, 'generatedLine', null),
+ column: util.getArg(mapping, 'generatedColumn', null),
+ lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+ });
+
+ mapping = this._originalMappings[++index];
+ }
+ }
+ }
+
+ return mappings;
+ };
+
+ exports.SourceMapConsumer = SourceMapConsumer;
+
+ /**
+ * A BasicSourceMapConsumer instance represents a parsed source map which we can
+ * query for information about the original file positions by giving it a file
+ * position in the generated source.
+ *
+ * The only parameter is the raw source map (either as a JSON string, or
+ * already parsed to an object). According to the spec, source maps have the
+ * following attributes:
+ *
+ * - version: Which version of the source map spec this map is following.
+ * - sources: An array of URLs to the original source files.
+ * - names: An array of identifiers which can be referrenced by individual mappings.
+ * - sourceRoot: Optional. The URL root from which all sources are relative.
+ * - sourcesContent: Optional. An array of contents of the original source files.
+ * - mappings: A string of base64 VLQs which contain the actual mappings.
+ * - file: Optional. The generated file this source map is associated with.
+ *
+ * Here is an example source map, taken from the source map spec[0]:
+ *
+ * {
+ * version : 3,
+ * file: "out.js",
+ * sourceRoot : "",
+ * sources: ["foo.js", "bar.js"],
+ * names: ["src", "maps", "are", "fun"],
+ * mappings: "AA,AB;;ABCDE;"
+ * }
+ *
+ * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
+ */
+ function BasicSourceMapConsumer(aSourceMap) {
+ var sourceMap = aSourceMap;
+ if (typeof aSourceMap === 'string') {
+ sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
+ }
+
+ var version = util.getArg(sourceMap, 'version');
+ var sources = util.getArg(sourceMap, 'sources');
+ // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
+ // requires the array) to play nice here.
+ var names = util.getArg(sourceMap, 'names', []);
+ var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
+ var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
+ var mappings = util.getArg(sourceMap, 'mappings');
+ var file = util.getArg(sourceMap, 'file', null);
+
+ // Once again, Sass deviates from the spec and supplies the version as a
+ // string rather than a number, so we use loose equality checking here.
+ if (version != this._version) {
+ throw new Error('Unsupported version: ' + version);
+ }
+
+ sources = sources
+ // Some source maps produce relative source paths like "./foo.js" instead of
+ // "foo.js". Normalize these first so that future comparisons will succeed.
+ // See bugzil.la/1090768.
+ .map(util.normalize)
+ // Always ensure that absolute sources are internally stored relative to
+ // the source root, if the source root is absolute. Not doing this would
+ // be particularly problematic when the source root is a prefix of the
+ // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
+ .map(function (source) {
+ return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
+ ? util.relative(sourceRoot, source)
+ : source;
+ });
+
+ // Pass `true` below to allow duplicate names and sources. While source maps
+ // are intended to be compressed and deduplicated, the TypeScript compiler
+ // sometimes generates source maps with duplicates in them. See Github issue
+ // #72 and bugzil.la/889492.
+ this._names = ArraySet.fromArray(names, true);
+ this._sources = ArraySet.fromArray(sources, true);
+
+ this.sourceRoot = sourceRoot;
+ this.sourcesContent = sourcesContent;
+ this._mappings = mappings;
+ this.file = file;
+ }
+
+ BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
+ BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
+
+ /**
+ * Create a BasicSourceMapConsumer from a SourceMapGenerator.
+ *
+ * @param SourceMapGenerator aSourceMap
+ * The source map that will be consumed.
+ * @returns BasicSourceMapConsumer
+ */
+ BasicSourceMapConsumer.fromSourceMap =
+ function SourceMapConsumer_fromSourceMap(aSourceMap) {
+ var smc = Object.create(BasicSourceMapConsumer.prototype);
+
+ var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
+ var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
+ smc.sourceRoot = aSourceMap._sourceRoot;
+ smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
+ smc.sourceRoot);
+ smc.file = aSourceMap._file;
+
+ // Because we are modifying the entries (by converting string sources and
+ // names to indices into the sources and names ArraySets), we have to make
+ // a copy of the entry or else bad things happen. Shared mutable state
+ // strikes again! See github issue #191.
+
+ var generatedMappings = aSourceMap._mappings.toArray().slice();
+ var destGeneratedMappings = smc.__generatedMappings = [];
+ var destOriginalMappings = smc.__originalMappings = [];
+
+ for (var i = 0, length = generatedMappings.length; i < length; i++) {
+ var srcMapping = generatedMappings[i];
+ var destMapping = new Mapping;
+ destMapping.generatedLine = srcMapping.generatedLine;
+ destMapping.generatedColumn = srcMapping.generatedColumn;
+
+ if (srcMapping.source) {
+ destMapping.source = sources.indexOf(srcMapping.source);
+ destMapping.originalLine = srcMapping.originalLine;
+ destMapping.originalColumn = srcMapping.originalColumn;
+
+ if (srcMapping.name) {
+ destMapping.name = names.indexOf(srcMapping.name);
+ }
+
+ destOriginalMappings.push(destMapping);
+ }
+
+ destGeneratedMappings.push(destMapping);
+ }
+
+ quickSort(smc.__originalMappings, util.compareByOriginalPositions);
+
+ return smc;
+ };
+
+ /**
+ * The version of the source mapping spec that we are consuming.
+ */
+ BasicSourceMapConsumer.prototype._version = 3;
+
+ /**
+ * The list of original sources.
+ */
+ Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
+ get: function () {
+ return this._sources.toArray().map(function (s) {
+ return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;
+ }, this);
+ }
+ });
+
+ /**
+ * Provide the JIT with a nice shape / hidden class.
+ */
+ function Mapping() {
+ this.generatedLine = 0;
+ this.generatedColumn = 0;
+ this.source = null;
+ this.originalLine = null;
+ this.originalColumn = null;
+ this.name = null;
+ }
+
+ /**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+ BasicSourceMapConsumer.prototype._parseMappings =
+ function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+ var generatedLine = 1;
+ var previousGeneratedColumn = 0;
+ var previousOriginalLine = 0;
+ var previousOriginalColumn = 0;
+ var previousSource = 0;
+ var previousName = 0;
+ var length = aStr.length;
+ var index = 0;
+ var cachedSegments = {};
+ var temp = {};
+ var originalMappings = [];
+ var generatedMappings = [];
+ var mapping, str, segment, end, value;
+
+ while (index < length) {
+ if (aStr.charAt(index) === ';') {
+ generatedLine++;
+ index++;
+ previousGeneratedColumn = 0;
+ }
+ else if (aStr.charAt(index) === ',') {
+ index++;
+ }
+ else {
+ mapping = new Mapping();
+ mapping.generatedLine = generatedLine;
+
+ // Because each offset is encoded relative to the previous one,
+ // many segments often have the same encoding. We can exploit this
+ // fact by caching the parsed variable length fields of each segment,
+ // allowing us to avoid a second parse if we encounter the same
+ // segment again.
+ for (end = index; end < length; end++) {
+ if (this._charIsMappingSeparator(aStr, end)) {
+ break;
+ }
+ }
+ str = aStr.slice(index, end);
+
+ segment = cachedSegments[str];
+ if (segment) {
+ index += str.length;
+ } else {
+ segment = [];
+ while (index < end) {
+ base64VLQ.decode(aStr, index, temp);
+ value = temp.value;
+ index = temp.rest;
+ segment.push(value);
+ }
+
+ if (segment.length === 2) {
+ throw new Error('Found a source, but no line and column');
+ }
+
+ if (segment.length === 3) {
+ throw new Error('Found a source and line, but no column');
+ }
+
+ cachedSegments[str] = segment;
+ }
+
+ // Generated column.
+ mapping.generatedColumn = previousGeneratedColumn + segment[0];
+ previousGeneratedColumn = mapping.generatedColumn;
+
+ if (segment.length > 1) {
+ // Original source.
+ mapping.source = previousSource + segment[1];
+ previousSource += segment[1];
+
+ // Original line.
+ mapping.originalLine = previousOriginalLine + segment[2];
+ previousOriginalLine = mapping.originalLine;
+ // Lines are stored 0-based
+ mapping.originalLine += 1;
+
+ // Original column.
+ mapping.originalColumn = previousOriginalColumn + segment[3];
+ previousOriginalColumn = mapping.originalColumn;
+
+ if (segment.length > 4) {
+ // Original name.
+ mapping.name = previousName + segment[4];
+ previousName += segment[4];
+ }
+ }
+
+ generatedMappings.push(mapping);
+ if (typeof mapping.originalLine === 'number') {
+ originalMappings.push(mapping);
+ }
+ }
+ }
+
+ quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);
+ this.__generatedMappings = generatedMappings;
+
+ quickSort(originalMappings, util.compareByOriginalPositions);
+ this.__originalMappings = originalMappings;
+ };
+
+ /**
+ * Find the mapping that best matches the hypothetical "needle" mapping that
+ * we are searching for in the given "haystack" of mappings.
+ */
+ BasicSourceMapConsumer.prototype._findMapping =
+ function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
+ aColumnName, aComparator, aBias) {
+ // To return the position we are searching for, we must first find the
+ // mapping for the given position and then return the opposite position it
+ // points to. Because the mappings are sorted, we can use binary search to
+ // find the best mapping.
+
+ if (aNeedle[aLineName] <= 0) {
+ throw new TypeError('Line must be greater than or equal to 1, got '
+ + aNeedle[aLineName]);
+ }
+ if (aNeedle[aColumnName] < 0) {
+ throw new TypeError('Column must be greater than or equal to 0, got '
+ + aNeedle[aColumnName]);
+ }
+
+ return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
+ };
+
+ /**
+ * Compute the last column for each generated mapping. The last column is
+ * inclusive.
+ */
+ BasicSourceMapConsumer.prototype.computeColumnSpans =
+ function SourceMapConsumer_computeColumnSpans() {
+ for (var index = 0; index < this._generatedMappings.length; ++index) {
+ var mapping = this._generatedMappings[index];
+
+ // Mappings do not contain a field for the last generated columnt. We
+ // can come up with an optimistic estimate, however, by assuming that
+ // mappings are contiguous (i.e. given two consecutive mappings, the
+ // first mapping ends where the second one starts).
+ if (index + 1 < this._generatedMappings.length) {
+ var nextMapping = this._generatedMappings[index + 1];
+
+ if (mapping.generatedLine === nextMapping.generatedLine) {
+ mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
+ continue;
+ }
+ }
+
+ // The last mapping for each line spans the entire line.
+ mapping.lastGeneratedColumn = Infinity;
+ }
+ };
+
+ /**
+ * Returns the original source, line, and column information for the generated
+ * source's line and column positions provided. The only argument is an object
+ * with the following properties:
+ *
+ * - line: The line number in the generated source.
+ * - column: The column number in the generated source.
+ * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
+ * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
+ * closest element that is smaller than or greater than the one we are
+ * searching for, respectively, if the exact element cannot be found.
+ * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - source: The original source file, or null.
+ * - line: The line number in the original source, or null.
+ * - column: The column number in the original source, or null.
+ * - name: The original identifier, or null.
+ */
+ BasicSourceMapConsumer.prototype.originalPositionFor =
+ function SourceMapConsumer_originalPositionFor(aArgs) {
+ var needle = {
+ generatedLine: util.getArg(aArgs, 'line'),
+ generatedColumn: util.getArg(aArgs, 'column')
+ };
+
+ var index = this._findMapping(
+ needle,
+ this._generatedMappings,
+ "generatedLine",
+ "generatedColumn",
+ util.compareByGeneratedPositionsDeflated,
+ util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
+ );
+
+ if (index >= 0) {
+ var mapping = this._generatedMappings[index];
+
+ if (mapping.generatedLine === needle.generatedLine) {
+ var source = util.getArg(mapping, 'source', null);
+ if (source !== null) {
+ source = this._sources.at(source);
+ if (this.sourceRoot != null) {
+ source = util.join(this.sourceRoot, source);
+ }
+ }
+ var name = util.getArg(mapping, 'name', null);
+ if (name !== null) {
+ name = this._names.at(name);
+ }
+ return {
+ source: source,
+ line: util.getArg(mapping, 'originalLine', null),
+ column: util.getArg(mapping, 'originalColumn', null),
+ name: name
+ };
+ }
+ }
+
+ return {
+ source: null,
+ line: null,
+ column: null,
+ name: null
+ };
+ };
+
+ /**
+ * Return true if we have the source content for every source in the source
+ * map, false otherwise.
+ */
+ BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
+ function BasicSourceMapConsumer_hasContentsOfAllSources() {
+ if (!this.sourcesContent) {
+ return false;
+ }
+ return this.sourcesContent.length >= this._sources.size() &&
+ !this.sourcesContent.some(function (sc) { return sc == null; });
+ };
+
+ /**
+ * Returns the original source content. The only argument is the url of the
+ * original source file. Returns null if no original source content is
+ * available.
+ */
+ BasicSourceMapConsumer.prototype.sourceContentFor =
+ function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
+ if (!this.sourcesContent) {
+ return null;
+ }
+
+ if (this.sourceRoot != null) {
+ aSource = util.relative(this.sourceRoot, aSource);
+ }
+
+ if (this._sources.has(aSource)) {
+ return this.sourcesContent[this._sources.indexOf(aSource)];
+ }
+
+ var url;
+ if (this.sourceRoot != null
+ && (url = util.urlParse(this.sourceRoot))) {
+ // XXX: file:// URIs and absolute paths lead to unexpected behavior for
+ // many users. We can help them out when they expect file:// URIs to
+ // behave like it would if they were running a local HTTP server. See
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
+ var fileUriAbsPath = aSource.replace(/^file:\/\//, "");
+ if (url.scheme == "file"
+ && this._sources.has(fileUriAbsPath)) {
+ return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
+ }
+
+ if ((!url.path || url.path == "/")
+ && this._sources.has("/" + aSource)) {
+ return this.sourcesContent[this._sources.indexOf("/" + aSource)];
+ }
+ }
+
+ // This function is used recursively from
+ // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
+ // don't want to throw if we can't find the source - we just want to
+ // return null, so we provide a flag to exit gracefully.
+ if (nullOnMissing) {
+ return null;
+ }
+ else {
+ throw new Error('"' + aSource + '" is not in the SourceMap.');
+ }
+ };
+
+ /**
+ * Returns the generated line and column information for the original source,
+ * line, and column positions provided. The only argument is an object with
+ * the following properties:
+ *
+ * - source: The filename of the original source.
+ * - line: The line number in the original source.
+ * - column: The column number in the original source.
+ * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
+ * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
+ * closest element that is smaller than or greater than the one we are
+ * searching for, respectively, if the exact element cannot be found.
+ * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - line: The line number in the generated source, or null.
+ * - column: The column number in the generated source, or null.
+ */
+ BasicSourceMapConsumer.prototype.generatedPositionFor =
+ function SourceMapConsumer_generatedPositionFor(aArgs) {
+ var source = util.getArg(aArgs, 'source');
+ if (this.sourceRoot != null) {
+ source = util.relative(this.sourceRoot, source);
+ }
+ if (!this._sources.has(source)) {
+ return {
+ line: null,
+ column: null,
+ lastColumn: null
+ };
+ }
+ source = this._sources.indexOf(source);
+
+ var needle = {
+ source: source,
+ originalLine: util.getArg(aArgs, 'line'),
+ originalColumn: util.getArg(aArgs, 'column')
+ };
+
+ var index = this._findMapping(
+ needle,
+ this._originalMappings,
+ "originalLine",
+ "originalColumn",
+ util.compareByOriginalPositions,
+ util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
+ );
+
+ if (index >= 0) {
+ var mapping = this._originalMappings[index];
+
+ if (mapping.source === needle.source) {
+ return {
+ line: util.getArg(mapping, 'generatedLine', null),
+ column: util.getArg(mapping, 'generatedColumn', null),
+ lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+ };
+ }
+ }
+
+ return {
+ line: null,
+ column: null,
+ lastColumn: null
+ };
+ };
+
+ exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
+
+ /**
+ * An IndexedSourceMapConsumer instance represents a parsed source map which
+ * we can query for information. It differs from BasicSourceMapConsumer in
+ * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
+ * input.
+ *
+ * The only parameter is a raw source map (either as a JSON string, or already
+ * parsed to an object). According to the spec for indexed source maps, they
+ * have the following attributes:
+ *
+ * - version: Which version of the source map spec this map is following.
+ * - file: Optional. The generated file this source map is associated with.
+ * - sections: A list of section definitions.
+ *
+ * Each value under the "sections" field has two fields:
+ * - offset: The offset into the original specified at which this section
+ * begins to apply, defined as an object with a "line" and "column"
+ * field.
+ * - map: A source map definition. This source map could also be indexed,
+ * but doesn't have to be.
+ *
+ * Instead of the "map" field, it's also possible to have a "url" field
+ * specifying a URL to retrieve a source map from, but that's currently
+ * unsupported.
+ *
+ * Here's an example source map, taken from the source map spec[0], but
+ * modified to omit a section which uses the "url" field.
+ *
+ * {
+ * version : 3,
+ * file: "app.js",
+ * sections: [{
+ * offset: {line:100, column:10},
+ * map: {
+ * version : 3,
+ * file: "section.js",
+ * sources: ["foo.js", "bar.js"],
+ * names: ["src", "maps", "are", "fun"],
+ * mappings: "AAAA,E;;ABCDE;"
+ * }
+ * }],
+ * }
+ *
+ * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
+ */
+ function IndexedSourceMapConsumer(aSourceMap) {
+ var sourceMap = aSourceMap;
+ if (typeof aSourceMap === 'string') {
+ sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
+ }
+
+ var version = util.getArg(sourceMap, 'version');
+ var sections = util.getArg(sourceMap, 'sections');
+
+ if (version != this._version) {
+ throw new Error('Unsupported version: ' + version);
+ }
+
+ this._sources = new ArraySet();
+ this._names = new ArraySet();
+
+ var lastOffset = {
+ line: -1,
+ column: 0
+ };
+ this._sections = sections.map(function (s) {
+ if (s.url) {
+ // The url field will require support for asynchronicity.
+ // See https://github.com/mozilla/source-map/issues/16
+ throw new Error('Support for url field in sections not implemented.');
+ }
+ var offset = util.getArg(s, 'offset');
+ var offsetLine = util.getArg(offset, 'line');
+ var offsetColumn = util.getArg(offset, 'column');
+
+ if (offsetLine < lastOffset.line ||
+ (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
+ throw new Error('Section offsets must be ordered and non-overlapping.');
+ }
+ lastOffset = offset;
+
+ return {
+ generatedOffset: {
+ // The offset fields are 0-based, but we use 1-based indices when
+ // encoding/decoding from VLQ.
+ generatedLine: offsetLine + 1,
+ generatedColumn: offsetColumn + 1
+ },
+ consumer: new SourceMapConsumer(util.getArg(s, 'map'))
+ }
+ });
+ }
+
+ IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
+ IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
+
+ /**
+ * The version of the source mapping spec that we are consuming.
+ */
+ IndexedSourceMapConsumer.prototype._version = 3;
+
+ /**
+ * The list of original sources.
+ */
+ Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
+ get: function () {
+ var sources = [];
+ for (var i = 0; i < this._sections.length; i++) {
+ for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
+ sources.push(this._sections[i].consumer.sources[j]);
+ }
+ }
+ return sources;
+ }
+ });
+
+ /**
+ * Returns the original source, line, and column information for the generated
+ * source's line and column positions provided. The only argument is an object
+ * with the following properties:
+ *
+ * - line: The line number in the generated source.
+ * - column: The column number in the generated source.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - source: The original source file, or null.
+ * - line: The line number in the original source, or null.
+ * - column: The column number in the original source, or null.
+ * - name: The original identifier, or null.
+ */
+ IndexedSourceMapConsumer.prototype.originalPositionFor =
+ function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
+ var needle = {
+ generatedLine: util.getArg(aArgs, 'line'),
+ generatedColumn: util.getArg(aArgs, 'column')
+ };
+
+ // Find the section containing the generated position we're trying to map
+ // to an original position.
+ var sectionIndex = binarySearch.search(needle, this._sections,
+ function(needle, section) {
+ var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
+ if (cmp) {
+ return cmp;
+ }
+
+ return (needle.generatedColumn -
+ section.generatedOffset.generatedColumn);
+ });
+ var section = this._sections[sectionIndex];
+
+ if (!section) {
+ return {
+ source: null,
+ line: null,
+ column: null,
+ name: null
+ };
+ }
+
+ return section.consumer.originalPositionFor({
+ line: needle.generatedLine -
+ (section.generatedOffset.generatedLine - 1),
+ column: needle.generatedColumn -
+ (section.generatedOffset.generatedLine === needle.generatedLine
+ ? section.generatedOffset.generatedColumn - 1
+ : 0),
+ bias: aArgs.bias
+ });
+ };
+
+ /**
+ * Return true if we have the source content for every source in the source
+ * map, false otherwise.
+ */
+ IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
+ function IndexedSourceMapConsumer_hasContentsOfAllSources() {
+ return this._sections.every(function (s) {
+ return s.consumer.hasContentsOfAllSources();
+ });
+ };
+
+ /**
+ * Returns the original source content. The only argument is the url of the
+ * original source file. Returns null if no original source content is
+ * available.
+ */
+ IndexedSourceMapConsumer.prototype.sourceContentFor =
+ function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
+ for (var i = 0; i < this._sections.length; i++) {
+ var section = this._sections[i];
+
+ var content = section.consumer.sourceContentFor(aSource, true);
+ if (content) {
+ return content;
+ }
+ }
+ if (nullOnMissing) {
+ return null;
+ }
+ else {
+ throw new Error('"' + aSource + '" is not in the SourceMap.');
+ }
+ };
+
+ /**
+ * Returns the generated line and column information for the original source,
+ * line, and column positions provided. The only argument is an object with
+ * the following properties:
+ *
+ * - source: The filename of the original source.
+ * - line: The line number in the original source.
+ * - column: The column number in the original source.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - line: The line number in the generated source, or null.
+ * - column: The column number in the generated source, or null.
+ */
+ IndexedSourceMapConsumer.prototype.generatedPositionFor =
+ function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
+ for (var i = 0; i < this._sections.length; i++) {
+ var section = this._sections[i];
+
+ // Only consider this section if the requested source is in the list of
+ // sources of the consumer.
+ if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {
+ continue;
+ }
+ var generatedPosition = section.consumer.generatedPositionFor(aArgs);
+ if (generatedPosition) {
+ var ret = {
+ line: generatedPosition.line +
+ (section.generatedOffset.generatedLine - 1),
+ column: generatedPosition.column +
+ (section.generatedOffset.generatedLine === generatedPosition.line
+ ? section.generatedOffset.generatedColumn - 1
+ : 0)
+ };
+ return ret;
+ }
+ }
+
+ return {
+ line: null,
+ column: null
+ };
+ };
+
+ /**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+ IndexedSourceMapConsumer.prototype._parseMappings =
+ function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+ this.__generatedMappings = [];
+ this.__originalMappings = [];
+ for (var i = 0; i < this._sections.length; i++) {
+ var section = this._sections[i];
+ var sectionMappings = section.consumer._generatedMappings;
+ for (var j = 0; j < sectionMappings.length; j++) {
+ var mapping = sectionMappings[j];
+
+ var source = section.consumer._sources.at(mapping.source);
+ if (section.consumer.sourceRoot !== null) {
+ source = util.join(section.consumer.sourceRoot, source);
+ }
+ this._sources.add(source);
+ source = this._sources.indexOf(source);
+
+ var name = section.consumer._names.at(mapping.name);
+ this._names.add(name);
+ name = this._names.indexOf(name);
+
+ // The mappings coming from the consumer for the section have
+ // generated positions relative to the start of the section, so we
+ // need to offset them to be relative to the start of the concatenated
+ // generated file.
+ var adjustedMapping = {
+ source: source,
+ generatedLine: mapping.generatedLine +
+ (section.generatedOffset.generatedLine - 1),
+ generatedColumn: mapping.generatedColumn +
+ (section.generatedOffset.generatedLine === mapping.generatedLine
+ ? section.generatedOffset.generatedColumn - 1
+ : 0),
+ originalLine: mapping.originalLine,
+ originalColumn: mapping.originalColumn,
+ name: name
+ };
+
+ this.__generatedMappings.push(adjustedMapping);
+ if (typeof adjustedMapping.originalLine === 'number') {
+ this.__originalMappings.push(adjustedMapping);
+ }
+ }
+ }
+
+ quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
+ quickSort(this.__originalMappings, util.compareByOriginalPositions);
+ };
+
+ exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
+}
+
+},{"591":591,"592":592,"594":594,"596":596,"600":600}],598:[function(_dereq_,module,exports){
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+{
+ var base64VLQ = _dereq_(592);
+ var util = _dereq_(600);
+ var ArraySet = _dereq_(591).ArraySet;
+ var MappingList = _dereq_(595).MappingList;
+
+ /**
+ * An instance of the SourceMapGenerator represents a source map which is
+ * being built incrementally. You may pass an object with the following
+ * properties:
+ *
+ * - file: The filename of the generated source.
+ * - sourceRoot: A root for all relative URLs in this source map.
+ */
+ function SourceMapGenerator(aArgs) {
+ if (!aArgs) {
+ aArgs = {};
+ }
+ this._file = util.getArg(aArgs, 'file', null);
+ this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
+ this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
+ this._sources = new ArraySet();
+ this._names = new ArraySet();
+ this._mappings = new MappingList();
+ this._sourcesContents = null;
+ }
+
+ SourceMapGenerator.prototype._version = 3;
+
+ /**
+ * Creates a new SourceMapGenerator based on a SourceMapConsumer
+ *
+ * @param aSourceMapConsumer The SourceMap.
+ */
+ SourceMapGenerator.fromSourceMap =
+ function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
+ var sourceRoot = aSourceMapConsumer.sourceRoot;
+ var generator = new SourceMapGenerator({
+ file: aSourceMapConsumer.file,
+ sourceRoot: sourceRoot
+ });
+ aSourceMapConsumer.eachMapping(function (mapping) {
+ var newMapping = {
+ generated: {
+ line: mapping.generatedLine,
+ column: mapping.generatedColumn
+ }
+ };
+
+ if (mapping.source != null) {
+ newMapping.source = mapping.source;
+ if (sourceRoot != null) {
+ newMapping.source = util.relative(sourceRoot, newMapping.source);
+ }
+
+ newMapping.original = {
+ line: mapping.originalLine,
+ column: mapping.originalColumn
+ };
+
+ if (mapping.name != null) {
+ newMapping.name = mapping.name;
+ }
+ }
+
+ generator.addMapping(newMapping);
+ });
+ aSourceMapConsumer.sources.forEach(function (sourceFile) {
+ var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+ if (content != null) {
+ generator.setSourceContent(sourceFile, content);
+ }
+ });
+ return generator;
+ };
+
+ /**
+ * Add a single mapping from original source line and column to the generated
+ * source's line and column for this source map being created. The mapping
+ * object should have the following properties:
+ *
+ * - generated: An object with the generated line and column positions.
+ * - original: An object with the original line and column positions.
+ * - source: The original source file (relative to the sourceRoot).
+ * - name: An optional original token name for this mapping.
+ */
+ SourceMapGenerator.prototype.addMapping =
+ function SourceMapGenerator_addMapping(aArgs) {
+ var generated = util.getArg(aArgs, 'generated');
+ var original = util.getArg(aArgs, 'original', null);
+ var source = util.getArg(aArgs, 'source', null);
+ var name = util.getArg(aArgs, 'name', null);
+
+ if (!this._skipValidation) {
+ this._validateMapping(generated, original, source, name);
+ }
+
+ if (source != null && !this._sources.has(source)) {
+ this._sources.add(source);
+ }
+
+ if (name != null && !this._names.has(name)) {
+ this._names.add(name);
+ }
+
+ this._mappings.add({
+ generatedLine: generated.line,
+ generatedColumn: generated.column,
+ originalLine: original != null && original.line,
+ originalColumn: original != null && original.column,
+ source: source,
+ name: name
+ });
+ };
+
+ /**
+ * Set the source content for a source file.
+ */
+ SourceMapGenerator.prototype.setSourceContent =
+ function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
+ var source = aSourceFile;
+ if (this._sourceRoot != null) {
+ source = util.relative(this._sourceRoot, source);
+ }
+
+ if (aSourceContent != null) {
+ // Add the source content to the _sourcesContents map.
+ // Create a new _sourcesContents map if the property is null.
+ if (!this._sourcesContents) {
+ this._sourcesContents = {};
+ }
+ this._sourcesContents[util.toSetString(source)] = aSourceContent;
+ } else if (this._sourcesContents) {
+ // Remove the source file from the _sourcesContents map.
+ // If the _sourcesContents map is empty, set the property to null.
+ delete this._sourcesContents[util.toSetString(source)];
+ if (Object.keys(this._sourcesContents).length === 0) {
+ this._sourcesContents = null;
+ }
+ }
+ };
+
+ /**
+ * Applies the mappings of a sub-source-map for a specific source file to the
+ * source map being generated. Each mapping to the supplied source file is
+ * rewritten using the supplied source map. Note: The resolution for the
+ * resulting mappings is the minimium of this map and the supplied map.
+ *
+ * @param aSourceMapConsumer The source map to be applied.
+ * @param aSourceFile Optional. The filename of the source file.
+ * If omitted, SourceMapConsumer's file property will be used.
+ * @param aSourceMapPath Optional. The dirname of the path to the source map
+ * to be applied. If relative, it is relative to the SourceMapConsumer.
+ * This parameter is needed when the two source maps aren't in the same
+ * directory, and the source map to be applied contains relative source
+ * paths. If so, those relative source paths need to be rewritten
+ * relative to the SourceMapGenerator.
+ */
+ SourceMapGenerator.prototype.applySourceMap =
+ function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
+ var sourceFile = aSourceFile;
+ // If aSourceFile is omitted, we will use the file property of the SourceMap
+ if (aSourceFile == null) {
+ if (aSourceMapConsumer.file == null) {
+ throw new Error(
+ 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
+ 'or the source map\'s "file" property. Both were omitted.'
+ );
+ }
+ sourceFile = aSourceMapConsumer.file;
+ }
+ var sourceRoot = this._sourceRoot;
+ // Make "sourceFile" relative if an absolute Url is passed.
+ if (sourceRoot != null) {
+ sourceFile = util.relative(sourceRoot, sourceFile);
+ }
+ // Applying the SourceMap can add and remove items from the sources and
+ // the names array.
+ var newSources = new ArraySet();
+ var newNames = new ArraySet();
+
+ // Find mappings for the "sourceFile"
+ this._mappings.unsortedForEach(function (mapping) {
+ if (mapping.source === sourceFile && mapping.originalLine != null) {
+ // Check if it can be mapped by the source map, then update the mapping.
+ var original = aSourceMapConsumer.originalPositionFor({
+ line: mapping.originalLine,
+ column: mapping.originalColumn
+ });
+ if (original.source != null) {
+ // Copy mapping
+ mapping.source = original.source;
+ if (aSourceMapPath != null) {
+ mapping.source = util.join(aSourceMapPath, mapping.source)
+ }
+ if (sourceRoot != null) {
+ mapping.source = util.relative(sourceRoot, mapping.source);
+ }
+ mapping.originalLine = original.line;
+ mapping.originalColumn = original.column;
+ if (original.name != null) {
+ mapping.name = original.name;
+ }
+ }
+ }
+
+ var source = mapping.source;
+ if (source != null && !newSources.has(source)) {
+ newSources.add(source);
+ }
+
+ var name = mapping.name;
+ if (name != null && !newNames.has(name)) {
+ newNames.add(name);
+ }
+
+ }, this);
+ this._sources = newSources;
+ this._names = newNames;
+
+ // Copy sourcesContents of applied map.
+ aSourceMapConsumer.sources.forEach(function (sourceFile) {
+ var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+ if (content != null) {
+ if (aSourceMapPath != null) {
+ sourceFile = util.join(aSourceMapPath, sourceFile);
+ }
+ if (sourceRoot != null) {
+ sourceFile = util.relative(sourceRoot, sourceFile);
+ }
+ this.setSourceContent(sourceFile, content);
+ }
+ }, this);
+ };
+
+ /**
+ * A mapping can have one of the three levels of data:
+ *
+ * 1. Just the generated position.
+ * 2. The Generated position, original position, and original source.
+ * 3. Generated and original position, original source, as well as a name
+ * token.
+ *
+ * To maintain consistency, we validate that any new mapping being added falls
+ * in to one of these categories.
+ */
+ SourceMapGenerator.prototype._validateMapping =
+ function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
+ aName) {
+ if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
+ && aGenerated.line > 0 && aGenerated.column >= 0
+ && !aOriginal && !aSource && !aName) {
+ // Case 1.
+ return;
+ }
+ else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
+ && aOriginal && 'line' in aOriginal && 'column' in aOriginal
+ && aGenerated.line > 0 && aGenerated.column >= 0
+ && aOriginal.line > 0 && aOriginal.column >= 0
+ && aSource) {
+ // Cases 2 and 3.
+ return;
+ }
+ else {
+ throw new Error('Invalid mapping: ' + JSON.stringify({
+ generated: aGenerated,
+ source: aSource,
+ original: aOriginal,
+ name: aName
+ }));
+ }
+ };
+
+ /**
+ * Serialize the accumulated mappings in to the stream of base 64 VLQs
+ * specified by the source map format.
+ */
+ SourceMapGenerator.prototype._serializeMappings =
+ function SourceMapGenerator_serializeMappings() {
+ var previousGeneratedColumn = 0;
+ var previousGeneratedLine = 1;
+ var previousOriginalColumn = 0;
+ var previousOriginalLine = 0;
+ var previousName = 0;
+ var previousSource = 0;
+ var result = '';
+ var mapping;
+ var nameIdx;
+ var sourceIdx;
+
+ var mappings = this._mappings.toArray();
+ for (var i = 0, len = mappings.length; i < len; i++) {
+ mapping = mappings[i];
+
+ if (mapping.generatedLine !== previousGeneratedLine) {
+ previousGeneratedColumn = 0;
+ while (mapping.generatedLine !== previousGeneratedLine) {
+ result += ';';
+ previousGeneratedLine++;
+ }
+ }
+ else {
+ if (i > 0) {
+ if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
+ continue;
+ }
+ result += ',';
+ }
+ }
+
+ result += base64VLQ.encode(mapping.generatedColumn
+ - previousGeneratedColumn);
+ previousGeneratedColumn = mapping.generatedColumn;
+
+ if (mapping.source != null) {
+ sourceIdx = this._sources.indexOf(mapping.source);
+ result += base64VLQ.encode(sourceIdx - previousSource);
+ previousSource = sourceIdx;
+
+ // lines are stored 0-based in SourceMap spec version 3
+ result += base64VLQ.encode(mapping.originalLine - 1
+ - previousOriginalLine);
+ previousOriginalLine = mapping.originalLine - 1;
+
+ result += base64VLQ.encode(mapping.originalColumn
+ - previousOriginalColumn);
+ previousOriginalColumn = mapping.originalColumn;
+
+ if (mapping.name != null) {
+ nameIdx = this._names.indexOf(mapping.name);
+ result += base64VLQ.encode(nameIdx - previousName);
+ previousName = nameIdx;
+ }
+ }
+ }
+
+ return result;
+ };
+
+ SourceMapGenerator.prototype._generateSourcesContent =
+ function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
+ return aSources.map(function (source) {
+ if (!this._sourcesContents) {
+ return null;
+ }
+ if (aSourceRoot != null) {
+ source = util.relative(aSourceRoot, source);
+ }
+ var key = util.toSetString(source);
+ return Object.prototype.hasOwnProperty.call(this._sourcesContents,
+ key)
+ ? this._sourcesContents[key]
+ : null;
+ }, this);
+ };
+
+ /**
+ * Externalize the source map.
+ */
+ SourceMapGenerator.prototype.toJSON =
+ function SourceMapGenerator_toJSON() {
+ var map = {
+ version: this._version,
+ sources: this._sources.toArray(),
+ names: this._names.toArray(),
+ mappings: this._serializeMappings()
+ };
+ if (this._file != null) {
+ map.file = this._file;
+ }
+ if (this._sourceRoot != null) {
+ map.sourceRoot = this._sourceRoot;
+ }
+ if (this._sourcesContents) {
+ map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
+ }
+
+ return map;
+ };
+
+ /**
+ * Render the source map being generated to a string.
+ */
+ SourceMapGenerator.prototype.toString =
+ function SourceMapGenerator_toString() {
+ return JSON.stringify(this.toJSON());
+ };
+
+ exports.SourceMapGenerator = SourceMapGenerator;
+}
+
+},{"591":591,"592":592,"595":595,"600":600}],599:[function(_dereq_,module,exports){
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+{
+ var SourceMapGenerator = _dereq_(598).SourceMapGenerator;
+ var util = _dereq_(600);
+
+ // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
+ // operating systems these days (capturing the result).
+ var REGEX_NEWLINE = /(\r?\n)/;
+
+ // Newline character code for charCodeAt() comparisons
+ var NEWLINE_CODE = 10;
+
+ // Private symbol for identifying `SourceNode`s when multiple versions of
+ // the source-map library are loaded. This MUST NOT CHANGE across
+ // versions!
+ var isSourceNode = "$$$isSourceNode$$$";
+
+ /**
+ * SourceNodes provide a way to abstract over interpolating/concatenating
+ * snippets of generated JavaScript source code while maintaining the line and
+ * column information associated with the original source code.
+ *
+ * @param aLine The original line number.
+ * @param aColumn The original column number.
+ * @param aSource The original source's filename.
+ * @param aChunks Optional. An array of strings which are snippets of
+ * generated JS, or other SourceNodes.
+ * @param aName The original identifier.
+ */
+ function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
+ this.children = [];
+ this.sourceContents = {};
+ this.line = aLine == null ? null : aLine;
+ this.column = aColumn == null ? null : aColumn;
+ this.source = aSource == null ? null : aSource;
+ this.name = aName == null ? null : aName;
+ this[isSourceNode] = true;
+ if (aChunks != null) this.add(aChunks);
+ }
+
+ /**
+ * Creates a SourceNode from generated code and a SourceMapConsumer.
+ *
+ * @param aGeneratedCode The generated code
+ * @param aSourceMapConsumer The SourceMap for the generated code
+ * @param aRelativePath Optional. The path that relative sources in the
+ * SourceMapConsumer should be relative to.
+ */
+ SourceNode.fromStringWithSourceMap =
+ function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
+ // The SourceNode we want to fill with the generated code
+ // and the SourceMap
+ var node = new SourceNode();
+
+ // All even indices of this array are one line of the generated code,
+ // while all odd indices are the newlines between two adjacent lines
+ // (since `REGEX_NEWLINE` captures its match).
+ // Processed fragments are removed from this array, by calling `shiftNextLine`.
+ var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
+ var shiftNextLine = function() {
+ var lineContents = remainingLines.shift();
+ // The last line of a file might not have a newline.
+ var newLine = remainingLines.shift() || "";
+ return lineContents + newLine;
+ };
+
+ // We need to remember the position of "remainingLines"
+ var lastGeneratedLine = 1, lastGeneratedColumn = 0;
+
+ // The generate SourceNodes we need a code range.
+ // To extract it current and last mapping is used.
+ // Here we store the last mapping.
+ var lastMapping = null;
+
+ aSourceMapConsumer.eachMapping(function (mapping) {
+ if (lastMapping !== null) {
+ // We add the code from "lastMapping" to "mapping":
+ // First check if there is a new line in between.
+ if (lastGeneratedLine < mapping.generatedLine) {
+ // Associate first line with "lastMapping"
+ addMappingWithCode(lastMapping, shiftNextLine());
+ lastGeneratedLine++;
+ lastGeneratedColumn = 0;
+ // The remaining code is added without mapping
+ } else {
+ // There is no new line in between.
+ // Associate the code between "lastGeneratedColumn" and
+ // "mapping.generatedColumn" with "lastMapping"
+ var nextLine = remainingLines[0];
+ var code = nextLine.substr(0, mapping.generatedColumn -
+ lastGeneratedColumn);
+ remainingLines[0] = nextLine.substr(mapping.generatedColumn -
+ lastGeneratedColumn);
+ lastGeneratedColumn = mapping.generatedColumn;
+ addMappingWithCode(lastMapping, code);
+ // No more remaining code, continue
+ lastMapping = mapping;
+ return;
+ }
+ }
+ // We add the generated code until the first mapping
+ // to the SourceNode without any mapping.
+ // Each line is added as separate string.
+ while (lastGeneratedLine < mapping.generatedLine) {
+ node.add(shiftNextLine());
+ lastGeneratedLine++;
+ }
+ if (lastGeneratedColumn < mapping.generatedColumn) {
+ var nextLine = remainingLines[0];
+ node.add(nextLine.substr(0, mapping.generatedColumn));
+ remainingLines[0] = nextLine.substr(mapping.generatedColumn);
+ lastGeneratedColumn = mapping.generatedColumn;
+ }
+ lastMapping = mapping;
+ }, this);
+ // We have processed all mappings.
+ if (remainingLines.length > 0) {
+ if (lastMapping) {
+ // Associate the remaining code in the current line with "lastMapping"
+ addMappingWithCode(lastMapping, shiftNextLine());
+ }
+ // and add the remaining lines without any mapping
+ node.add(remainingLines.join(""));
+ }
+
+ // Copy sourcesContent into SourceNode
+ aSourceMapConsumer.sources.forEach(function (sourceFile) {
+ var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+ if (content != null) {
+ if (aRelativePath != null) {
+ sourceFile = util.join(aRelativePath, sourceFile);
+ }
+ node.setSourceContent(sourceFile, content);
+ }
+ });
+
+ return node;
+
+ function addMappingWithCode(mapping, code) {
+ if (mapping === null || mapping.source === undefined) {
+ node.add(code);
+ } else {
+ var source = aRelativePath
+ ? util.join(aRelativePath, mapping.source)
+ : mapping.source;
+ node.add(new SourceNode(mapping.originalLine,
+ mapping.originalColumn,
+ source,
+ code,
+ mapping.name));
+ }
+ }
+ };
+
+ /**
+ * Add a chunk of generated JS to this source node.
+ *
+ * @param aChunk A string snippet of generated JS code, another instance of
+ * SourceNode, or an array where each member is one of those things.
+ */
+ SourceNode.prototype.add = function SourceNode_add(aChunk) {
+ if (Array.isArray(aChunk)) {
+ aChunk.forEach(function (chunk) {
+ this.add(chunk);
+ }, this);
+ }
+ else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+ if (aChunk) {
+ this.children.push(aChunk);
+ }
+ }
+ else {
+ throw new TypeError(
+ "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+ );
+ }
+ return this;
+ };
+
+ /**
+ * Add a chunk of generated JS to the beginning of this source node.
+ *
+ * @param aChunk A string snippet of generated JS code, another instance of
+ * SourceNode, or an array where each member is one of those things.
+ */
+ SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
+ if (Array.isArray(aChunk)) {
+ for (var i = aChunk.length-1; i >= 0; i--) {
+ this.prepend(aChunk[i]);
+ }
+ }
+ else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+ this.children.unshift(aChunk);
+ }
+ else {
+ throw new TypeError(
+ "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+ );
+ }
+ return this;
+ };
+
+ /**
+ * Walk over the tree of JS snippets in this node and its children. The
+ * walking function is called once for each snippet of JS and is passed that
+ * snippet and the its original associated source's line/column location.
+ *
+ * @param aFn The traversal function.
+ */
+ SourceNode.prototype.walk = function SourceNode_walk(aFn) {
+ var chunk;
+ for (var i = 0, len = this.children.length; i < len; i++) {
+ chunk = this.children[i];
+ if (chunk[isSourceNode]) {
+ chunk.walk(aFn);
+ }
+ else {
+ if (chunk !== '') {
+ aFn(chunk, { source: this.source,
+ line: this.line,
+ column: this.column,
+ name: this.name });
+ }
+ }
+ }
+ };
+
+ /**
+ * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
+ * each of `this.children`.
+ *
+ * @param aSep The separator.
+ */
+ SourceNode.prototype.join = function SourceNode_join(aSep) {
+ var newChildren;
+ var i;
+ var len = this.children.length;
+ if (len > 0) {
+ newChildren = [];
+ for (i = 0; i < len-1; i++) {
+ newChildren.push(this.children[i]);
+ newChildren.push(aSep);
+ }
+ newChildren.push(this.children[i]);
+ this.children = newChildren;
+ }
+ return this;
+ };
+
+ /**
+ * Call String.prototype.replace on the very right-most source snippet. Useful
+ * for trimming whitespace from the end of a source node, etc.
+ *
+ * @param aPattern The pattern to replace.
+ * @param aReplacement The thing to replace the pattern with.
+ */
+ SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
+ var lastChild = this.children[this.children.length - 1];
+ if (lastChild[isSourceNode]) {
+ lastChild.replaceRight(aPattern, aReplacement);
+ }
+ else if (typeof lastChild === 'string') {
+ this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
+ }
+ else {
+ this.children.push(''.replace(aPattern, aReplacement));
+ }
+ return this;
+ };
+
+ /**
+ * Set the source content for a source file. This will be added to the SourceMapGenerator
+ * in the sourcesContent field.
+ *
+ * @param aSourceFile The filename of the source file
+ * @param aSourceContent The content of the source file
+ */
+ SourceNode.prototype.setSourceContent =
+ function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
+ this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
+ };
+
+ /**
+ * Walk over the tree of SourceNodes. The walking function is called for each
+ * source file content and is passed the filename and source content.
+ *
+ * @param aFn The traversal function.
+ */
+ SourceNode.prototype.walkSourceContents =
+ function SourceNode_walkSourceContents(aFn) {
+ for (var i = 0, len = this.children.length; i < len; i++) {
+ if (this.children[i][isSourceNode]) {
+ this.children[i].walkSourceContents(aFn);
+ }
+ }
+
+ var sources = Object.keys(this.sourceContents);
+ for (var i = 0, len = sources.length; i < len; i++) {
+ aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
+ }
+ };
+
+ /**
+ * Return the string representation of this source node. Walks over the tree
+ * and concatenates all the various snippets together to one string.
+ */
+ SourceNode.prototype.toString = function SourceNode_toString() {
+ var str = "";
+ this.walk(function (chunk) {
+ str += chunk;
+ });
+ return str;
+ };
+
+ /**
+ * Returns the string representation of this source node along with a source
+ * map.
+ */
+ SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
+ var generated = {
+ code: "",
+ line: 1,
+ column: 0
+ };
+ var map = new SourceMapGenerator(aArgs);
+ var sourceMappingActive = false;
+ var lastOriginalSource = null;
+ var lastOriginalLine = null;
+ var lastOriginalColumn = null;
+ var lastOriginalName = null;
+ this.walk(function (chunk, original) {
+ generated.code += chunk;
+ if (original.source !== null
+ && original.line !== null
+ && original.column !== null) {
+ if(lastOriginalSource !== original.source
+ || lastOriginalLine !== original.line
+ || lastOriginalColumn !== original.column
+ || lastOriginalName !== original.name) {
+ map.addMapping({
+ source: original.source,
+ original: {
+ line: original.line,
+ column: original.column
+ },
+ generated: {
+ line: generated.line,
+ column: generated.column
+ },
+ name: original.name
+ });
+ }
+ lastOriginalSource = original.source;
+ lastOriginalLine = original.line;
+ lastOriginalColumn = original.column;
+ lastOriginalName = original.name;
+ sourceMappingActive = true;
+ } else if (sourceMappingActive) {
+ map.addMapping({
+ generated: {
+ line: generated.line,
+ column: generated.column
+ }
+ });
+ lastOriginalSource = null;
+ sourceMappingActive = false;
+ }
+ for (var idx = 0, length = chunk.length; idx < length; idx++) {
+ if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
+ generated.line++;
+ generated.column = 0;
+ // Mappings end at eol
+ if (idx + 1 === length) {
+ lastOriginalSource = null;
+ sourceMappingActive = false;
+ } else if (sourceMappingActive) {
+ map.addMapping({
+ source: original.source,
+ original: {
+ line: original.line,
+ column: original.column
+ },
+ generated: {
+ line: generated.line,
+ column: generated.column
+ },
+ name: original.name
+ });
+ }
+ } else {
+ generated.column++;
+ }
+ }
+ });
+ this.walkSourceContents(function (sourceFile, sourceContent) {
+ map.setSourceContent(sourceFile, sourceContent);
+ });
+
+ return { code: generated.code, map: map };
+ };
+
+ exports.SourceNode = SourceNode;
+}
+
+},{"598":598,"600":600}],600:[function(_dereq_,module,exports){
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+{
+ /**
+ * This is a helper function for getting values from parameter/options
+ * objects.
+ *
+ * @param args The object we are extracting values from
+ * @param name The name of the property we are getting.
+ * @param defaultValue An optional value to return if the property is missing
+ * from the object. If this is not specified and the property is missing, an
+ * error will be thrown.
+ */
+ function getArg(aArgs, aName, aDefaultValue) {
+ if (aName in aArgs) {
+ return aArgs[aName];
+ } else if (arguments.length === 3) {
+ return aDefaultValue;
+ } else {
+ throw new Error('"' + aName + '" is a required argument.');
+ }
+ }
+ exports.getArg = getArg;
+
+ var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/;
+ var dataUrlRegexp = /^data:.+\,.+$/;
+
+ function urlParse(aUrl) {
+ var match = aUrl.match(urlRegexp);
+ if (!match) {
+ return null;
+ }
+ return {
+ scheme: match[1],
+ auth: match[2],
+ host: match[3],
+ port: match[4],
+ path: match[5]
+ };
+ }
+ exports.urlParse = urlParse;
+
+ function urlGenerate(aParsedUrl) {
+ var url = '';
+ if (aParsedUrl.scheme) {
+ url += aParsedUrl.scheme + ':';
+ }
+ url += '//';
+ if (aParsedUrl.auth) {
+ url += aParsedUrl.auth + '@';
+ }
+ if (aParsedUrl.host) {
+ url += aParsedUrl.host;
+ }
+ if (aParsedUrl.port) {
+ url += ":" + aParsedUrl.port
+ }
+ if (aParsedUrl.path) {
+ url += aParsedUrl.path;
+ }
+ return url;
+ }
+ exports.urlGenerate = urlGenerate;
+
+ /**
+ * Normalizes a path, or the path portion of a URL:
+ *
+ * - Replaces consequtive slashes with one slash.
+ * - Removes unnecessary '.' parts.
+ * - Removes unnecessary '/..' parts.
+ *
+ * Based on code in the Node.js 'path' core module.
+ *
+ * @param aPath The path or url to normalize.
+ */
+ function normalize(aPath) {
+ var path = aPath;
+ var url = urlParse(aPath);
+ if (url) {
+ if (!url.path) {
+ return aPath;
+ }
+ path = url.path;
+ }
+ var isAbsolute = exports.isAbsolute(path);
+
+ var parts = path.split(/\/+/);
+ for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
+ part = parts[i];
+ if (part === '.') {
+ parts.splice(i, 1);
+ } else if (part === '..') {
+ up++;
+ } else if (up > 0) {
+ if (part === '') {
+ // The first part is blank if the path is absolute. Trying to go
+ // above the root is a no-op. Therefore we can remove all '..' parts
+ // directly after the root.
+ parts.splice(i + 1, up);
+ up = 0;
+ } else {
+ parts.splice(i, 2);
+ up--;
+ }
+ }
+ }
+ path = parts.join('/');
+
+ if (path === '') {
+ path = isAbsolute ? '/' : '.';
+ }
+
+ if (url) {
+ url.path = path;
+ return urlGenerate(url);
+ }
+ return path;
+ }
+ exports.normalize = normalize;
+
+ /**
+ * Joins two paths/URLs.
+ *
+ * @param aRoot The root path or URL.
+ * @param aPath The path or URL to be joined with the root.
+ *
+ * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
+ * scheme-relative URL: Then the scheme of aRoot, if any, is prepended
+ * first.
+ * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
+ * is updated with the result and aRoot is returned. Otherwise the result
+ * is returned.
+ * - If aPath is absolute, the result is aPath.
+ * - Otherwise the two paths are joined with a slash.
+ * - Joining for example 'http://' and 'www.example.com' is also supported.
+ */
+ function join(aRoot, aPath) {
+ if (aRoot === "") {
+ aRoot = ".";
+ }
+ if (aPath === "") {
+ aPath = ".";
+ }
+ var aPathUrl = urlParse(aPath);
+ var aRootUrl = urlParse(aRoot);
+ if (aRootUrl) {
+ aRoot = aRootUrl.path || '/';
+ }
+
+ // `join(foo, '//www.example.org')`
+ if (aPathUrl && !aPathUrl.scheme) {
+ if (aRootUrl) {
+ aPathUrl.scheme = aRootUrl.scheme;
+ }
+ return urlGenerate(aPathUrl);
+ }
+
+ if (aPathUrl || aPath.match(dataUrlRegexp)) {
+ return aPath;
+ }
+
+ // `join('http://', 'www.example.com')`
+ if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
+ aRootUrl.host = aPath;
+ return urlGenerate(aRootUrl);
+ }
+
+ var joined = aPath.charAt(0) === '/'
+ ? aPath
+ : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
+
+ if (aRootUrl) {
+ aRootUrl.path = joined;
+ return urlGenerate(aRootUrl);
+ }
+ return joined;
+ }
+ exports.join = join;
+
+ exports.isAbsolute = function (aPath) {
+ return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);
+ };
+
+ /**
+ * Make a path relative to a URL or another path.
+ *
+ * @param aRoot The root path or URL.
+ * @param aPath The path or URL to be made relative to aRoot.
+ */
+ function relative(aRoot, aPath) {
+ if (aRoot === "") {
+ aRoot = ".";
+ }
+
+ aRoot = aRoot.replace(/\/$/, '');
+
+ // It is possible for the path to be above the root. In this case, simply
+ // checking whether the root is a prefix of the path won't work. Instead, we
+ // need to remove components from the root one by one, until either we find
+ // a prefix that fits, or we run out of components to remove.
+ var level = 0;
+ while (aPath.indexOf(aRoot + '/') !== 0) {
+ var index = aRoot.lastIndexOf("/");
+ if (index < 0) {
+ return aPath;
+ }
+
+ // If the only part of the root that is left is the scheme (i.e. http://,
+ // file:///, etc.), one or more slashes (/), or simply nothing at all, we
+ // have exhausted all components, so the path is not relative to the root.
+ aRoot = aRoot.slice(0, index);
+ if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
+ return aPath;
+ }
+
+ ++level;
+ }
+
+ // Make sure we add a "../" for each component we removed from the root.
+ return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
+ }
+ exports.relative = relative;
+
+ /**
+ * Because behavior goes wacky when you set `__proto__` on objects, we
+ * have to prefix all the strings in our set with an arbitrary character.
+ *
+ * See https://github.com/mozilla/source-map/pull/31 and
+ * https://github.com/mozilla/source-map/issues/30
+ *
+ * @param String aStr
+ */
+ function toSetString(aStr) {
+ return '$' + aStr;
+ }
+ exports.toSetString = toSetString;
+
+ function fromSetString(aStr) {
+ return aStr.substr(1);
+ }
+ exports.fromSetString = fromSetString;
+
+ /**
+ * Comparator between two mappings where the original positions are compared.
+ *
+ * Optionally pass in `true` as `onlyCompareGenerated` to consider two
+ * mappings with the same original source/line/column, but different generated
+ * line and column the same. Useful when searching for a mapping with a
+ * stubbed out mapping.
+ */
+ function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
+ var cmp = mappingA.source - mappingB.source;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalLine - mappingB.originalLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalColumn - mappingB.originalColumn;
+ if (cmp !== 0 || onlyCompareOriginal) {
+ return cmp;
+ }
+
+ cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.generatedLine - mappingB.generatedLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ return mappingA.name - mappingB.name;
+ }
+ exports.compareByOriginalPositions = compareByOriginalPositions;
+
+ /**
+ * Comparator between two mappings with deflated source and name indices where
+ * the generated positions are compared.
+ *
+ * Optionally pass in `true` as `onlyCompareGenerated` to consider two
+ * mappings with the same generated line and column, but different
+ * source/name/original line and column the same. Useful when searching for a
+ * mapping with a stubbed out mapping.
+ */
+ function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
+ var cmp = mappingA.generatedLine - mappingB.generatedLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+ if (cmp !== 0 || onlyCompareGenerated) {
+ return cmp;
+ }
+
+ cmp = mappingA.source - mappingB.source;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalLine - mappingB.originalLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalColumn - mappingB.originalColumn;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ return mappingA.name - mappingB.name;
+ }
+ exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
+
+ function strcmp(aStr1, aStr2) {
+ if (aStr1 === aStr2) {
+ return 0;
+ }
+
+ if (aStr1 > aStr2) {
+ return 1;
+ }
+
+ return -1;
+ }
+
+ /**
+ * Comparator between two mappings with inflated source and name strings where
+ * the generated positions are compared.
+ */
+ function compareByGeneratedPositionsInflated(mappingA, mappingB) {
+ var cmp = mappingA.generatedLine - mappingB.generatedLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = strcmp(mappingA.source, mappingB.source);
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalLine - mappingB.originalLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalColumn - mappingB.originalColumn;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ return strcmp(mappingA.name, mappingB.name);
+ }
+ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
+}
+
+},{}],601:[function(_dereq_,module,exports){
+/*
+ * Copyright 2009-2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE.txt or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+exports.SourceMapGenerator = _dereq_(598).SourceMapGenerator;
+exports.SourceMapConsumer = _dereq_(597).SourceMapConsumer;
+exports.SourceNode = _dereq_(599).SourceNode;
+
+},{"597":597,"598":598,"599":599}],602:[function(_dereq_,module,exports){
+//! stable.js 0.1.5, https://github.com/Two-Screen/stable
+//! © 2014 Angry Bytes and contributors. MIT licensed.
+
+(function() {
+
+// A stable array sort, because `Array#sort()` is not guaranteed stable.
+// This is an implementation of merge sort, without recursion.
+
+var stable = function(arr, comp) {
+ return exec(arr.slice(), comp);
+};
+
+stable.inplace = function(arr, comp) {
+ var result = exec(arr, comp);
+
+ // This simply copies back if the result isn't in the original array,
+ // which happens on an odd number of passes.
+ if (result !== arr) {
+ pass(result, null, arr.length, arr);
+ }
+
+ return arr;
+};
+
+// Execute the sort using the input array and a second buffer as work space.
+// Returns one of those two, containing the final result.
+function exec(arr, comp) {
+ if (typeof(comp) !== 'function') {
+ comp = function(a, b) {
+ return String(a).localeCompare(b);
+ };
+ }
+
+ // Short-circuit when there's nothing to sort.
+ var len = arr.length;
+ if (len <= 1) {
+ return arr;
+ }
+
+ // Rather than dividing input, simply iterate chunks of 1, 2, 4, 8, etc.
+ // Chunks are the size of the left or right hand in merge sort.
+ // Stop when the left-hand covers all of the array.
+ var buffer = new Array(len);
+ for (var chk = 1; chk < len; chk *= 2) {
+ pass(arr, comp, chk, buffer);
+
+ var tmp = arr;
+ arr = buffer;
+ buffer = tmp;
+ }
+
+ return arr;
+}
+
+// Run a single pass with the given chunk size.
+var pass = function(arr, comp, chk, result) {
+ var len = arr.length;
+ var i = 0;
+ // Step size / double chunk size.
+ var dbl = chk * 2;
+ // Bounds of the left and right chunks.
+ var l, r, e;
+ // Iterators over the left and right chunk.
+ var li, ri;
+
+ // Iterate over pairs of chunks.
+ for (l = 0; l < len; l += dbl) {
+ r = l + chk;
+ e = r + chk;
+ if (r > len) r = len;
+ if (e > len) e = len;
+
+ // Iterate both chunks in parallel.
+ li = l;
+ ri = r;
+ while (true) {
+ // Compare the chunks.
+ if (li < r && ri < e) {
+ // This works for a regular `sort()` compatible comparator,
+ // but also for a simple comparator like: `a > b`
+ if (comp(arr[li], arr[ri]) <= 0) {
+ result[i++] = arr[li++];
+ }
+ else {
+ result[i++] = arr[ri++];
+ }
+ }
+ // Nothing to compare, just flush what's left.
+ else if (li < r) {
+ result[i++] = arr[li++];
+ }
+ else if (ri < e) {
+ result[i++] = arr[ri++];
+ }
+ // Both iterators are at the chunk ends.
+ else {
+ break;
+ }
+ }
+ }
+};
+
+// Export using CommonJS or to the window.
+if (typeof(module) !== 'undefined') {
+ module.exports = stable;
+}
+else {
+ window.stable = stable;
+}
+
+})();
+
+},{}],603:[function(_dereq_,module,exports){
+// stringmap.js
+// MIT licensed, see LICENSE file
+// Copyright (c) 2013 Olov Lassus
+
+var StringMap = (function() {
+ "use strict";
+
+ // to save us a few characters
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+ var create = (function() {
+ function hasOwnEnumerableProps(obj) {
+ for (var prop in obj) {
+ if (hasOwnProperty.call(obj, prop)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ // FF <= 3.6:
+ // o = {}; o.hasOwnProperty("__proto__" or "__count__" or "__parent__") => true
+ // o = {"__proto__": null}; Object.prototype.hasOwnProperty.call(o, "__proto__" or "__count__" or "__parent__") => false
+ function hasOwnPollutedProps(obj) {
+ return hasOwnProperty.call(obj, "__count__") || hasOwnProperty.call(obj, "__parent__");
+ }
+
+ var useObjectCreate = false;
+ if (typeof Object.create === "function") {
+ if (!hasOwnEnumerableProps(Object.create(null))) {
+ useObjectCreate = true;
+ }
+ }
+ if (useObjectCreate === false) {
+ if (hasOwnEnumerableProps({})) {
+ throw new Error("StringMap environment error 0, please file a bug at https://github.com/olov/stringmap/issues");
+ }
+ }
+ // no throw yet means we can create objects without own enumerable props (safe-guard against VMs and shims)
+
+ var o = (useObjectCreate ? Object.create(null) : {});
+ var useProtoClear = false;
+ if (hasOwnPollutedProps(o)) {
+ o.__proto__ = null;
+ if (hasOwnEnumerableProps(o) || hasOwnPollutedProps(o)) {
+ throw new Error("StringMap environment error 1, please file a bug at https://github.com/olov/stringmap/issues");
+ }
+ useProtoClear = true;
+ }
+ // no throw yet means we can create objects without own polluted props (safe-guard against VMs and shims)
+
+ return function() {
+ var o = (useObjectCreate ? Object.create(null) : {});
+ if (useProtoClear) {
+ o.__proto__ = null;
+ }
+ return o;
+ };
+ })();
+
+ // stringmap ctor
+ function stringmap(optional_object) {
+ // use with or without new
+ if (!(this instanceof stringmap)) {
+ return new stringmap(optional_object);
+ }
+ this.obj = create();
+ this.hasProto = false; // false (no __proto__ key) or true (has __proto__ key)
+ this.proto = undefined; // value for __proto__ key when hasProto is true, undefined otherwise
+
+ if (optional_object) {
+ this.setMany(optional_object);
+ }
+ };
+
+ // primitive methods that deals with data representation
+ stringmap.prototype.has = function(key) {
+ // The type-check of key in has, get, set and delete is important because otherwise an object
+ // {toString: function() { return "__proto__"; }} can avoid the key === "__proto__" test.
+ // The alternative to type-checking would be to force string conversion, i.e. key = String(key);
+ if (typeof key !== "string") {
+ throw new Error("StringMap expected string key");
+ }
+ return (key === "__proto__" ?
+ this.hasProto :
+ hasOwnProperty.call(this.obj, key));
+ };
+
+ stringmap.prototype.get = function(key) {
+ if (typeof key !== "string") {
+ throw new Error("StringMap expected string key");
+ }
+ return (key === "__proto__" ?
+ this.proto :
+ (hasOwnProperty.call(this.obj, key) ? this.obj[key] : undefined));
+ };
+
+ stringmap.prototype.set = function(key, value) {
+ if (typeof key !== "string") {
+ throw new Error("StringMap expected string key");
+ }
+ if (key === "__proto__") {
+ this.hasProto = true;
+ this.proto = value;
+ } else {
+ this.obj[key] = value;
+ }
+ };
+
+ stringmap.prototype.remove = function(key) {
+ if (typeof key !== "string") {
+ throw new Error("StringMap expected string key");
+ }
+ var didExist = this.has(key);
+ if (key === "__proto__") {
+ this.hasProto = false;
+ this.proto = undefined;
+ } else {
+ delete this.obj[key];
+ }
+ return didExist;
+ };
+
+ // alias remove to delete but beware:
+ // sm.delete("key"); // OK in ES5 and later
+ // sm['delete']("key"); // OK in all ES versions
+ // sm.remove("key"); // OK in all ES versions
+ stringmap.prototype['delete'] = stringmap.prototype.remove;
+
+ stringmap.prototype.isEmpty = function() {
+ for (var key in this.obj) {
+ if (hasOwnProperty.call(this.obj, key)) {
+ return false;
+ }
+ }
+ return !this.hasProto;
+ };
+
+ stringmap.prototype.size = function() {
+ var len = 0;
+ for (var key in this.obj) {
+ if (hasOwnProperty.call(this.obj, key)) {
+ ++len;
+ }
+ }
+ return (this.hasProto ? len + 1 : len);
+ };
+
+ stringmap.prototype.keys = function() {
+ var keys = [];
+ for (var key in this.obj) {
+ if (hasOwnProperty.call(this.obj, key)) {
+ keys.push(key);
+ }
+ }
+ if (this.hasProto) {
+ keys.push("__proto__");
+ }
+ return keys;
+ };
+
+ stringmap.prototype.values = function() {
+ var values = [];
+ for (var key in this.obj) {
+ if (hasOwnProperty.call(this.obj, key)) {
+ values.push(this.obj[key]);
+ }
+ }
+ if (this.hasProto) {
+ values.push(this.proto);
+ }
+ return values;
+ };
+
+ stringmap.prototype.items = function() {
+ var items = [];
+ for (var key in this.obj) {
+ if (hasOwnProperty.call(this.obj, key)) {
+ items.push([key, this.obj[key]]);
+ }
+ }
+ if (this.hasProto) {
+ items.push(["__proto__", this.proto]);
+ }
+ return items;
+ };
+
+
+ // methods that rely on the above primitives
+ stringmap.prototype.setMany = function(object) {
+ if (object === null || (typeof object !== "object" && typeof object !== "function")) {
+ throw new Error("StringMap expected Object");
+ }
+ for (var key in object) {
+ if (hasOwnProperty.call(object, key)) {
+ this.set(key, object[key]);
+ }
+ }
+ return this;
+ };
+
+ stringmap.prototype.merge = function(other) {
+ var keys = other.keys();
+ for (var i = 0; i < keys.length; i++) {
+ var key = keys[i];
+ this.set(key, other.get(key));
+ }
+ return this;
+ };
+
+ stringmap.prototype.map = function(fn) {
+ var keys = this.keys();
+ for (var i = 0; i < keys.length; i++) {
+ var key = keys[i];
+ keys[i] = fn(this.get(key), key); // re-use keys array for results
+ }
+ return keys;
+ };
+
+ stringmap.prototype.forEach = function(fn) {
+ var keys = this.keys();
+ for (var i = 0; i < keys.length; i++) {
+ var key = keys[i];
+ fn(this.get(key), key);
+ }
+ };
+
+ stringmap.prototype.clone = function() {
+ var other = stringmap();
+ return other.merge(this);
+ };
+
+ stringmap.prototype.toString = function() {
+ var self = this;
+ return "{" + this.keys().map(function(key) {
+ return JSON.stringify(key) + ":" + JSON.stringify(self.get(key));
+ }).join(",") + "}";
+ };
+
+ return stringmap;
+})();
+
+if (typeof module !== "undefined" && typeof module.exports !== "undefined") {
+ module.exports = StringMap;
+}
+
+},{}],604:[function(_dereq_,module,exports){
+// stringset.js
+// MIT licensed, see LICENSE file
+// Copyright (c) 2013 Olov Lassus
+
+var StringSet = (function() {
+ "use strict";
+
+ // to save us a few characters
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+ var create = (function() {
+ function hasOwnEnumerableProps(obj) {
+ for (var prop in obj) {
+ if (hasOwnProperty.call(obj, prop)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ // FF <= 3.6:
+ // o = {}; o.hasOwnProperty("__proto__" or "__count__" or "__parent__") => true
+ // o = {"__proto__": null}; Object.prototype.hasOwnProperty.call(o, "__proto__" or "__count__" or "__parent__") => false
+ function hasOwnPollutedProps(obj) {
+ return hasOwnProperty.call(obj, "__count__") || hasOwnProperty.call(obj, "__parent__");
+ }
+
+ var useObjectCreate = false;
+ if (typeof Object.create === "function") {
+ if (!hasOwnEnumerableProps(Object.create(null))) {
+ useObjectCreate = true;
+ }
+ }
+ if (useObjectCreate === false) {
+ if (hasOwnEnumerableProps({})) {
+ throw new Error("StringSet environment error 0, please file a bug at https://github.com/olov/stringset/issues");
+ }
+ }
+ // no throw yet means we can create objects without own enumerable props (safe-guard against VMs and shims)
+
+ var o = (useObjectCreate ? Object.create(null) : {});
+ var useProtoClear = false;
+ if (hasOwnPollutedProps(o)) {
+ o.__proto__ = null;
+ if (hasOwnEnumerableProps(o) || hasOwnPollutedProps(o)) {
+ throw new Error("StringSet environment error 1, please file a bug at https://github.com/olov/stringset/issues");
+ }
+ useProtoClear = true;
+ }
+ // no throw yet means we can create objects without own polluted props (safe-guard against VMs and shims)
+
+ return function() {
+ var o = (useObjectCreate ? Object.create(null) : {});
+ if (useProtoClear) {
+ o.__proto__ = null;
+ }
+ return o;
+ };
+ })();
+
+ // stringset ctor
+ function stringset(optional_array) {
+ // use with or without new
+ if (!(this instanceof stringset)) {
+ return new stringset(optional_array);
+ }
+ this.obj = create();
+ this.hasProto = false; // false (no __proto__ item) or true (has __proto__ item)
+
+ if (optional_array) {
+ this.addMany(optional_array);
+ }
+ };
+
+ // primitive methods that deals with data representation
+ stringset.prototype.has = function(item) {
+ // The type-check of item in has, get, set and delete is important because otherwise an object
+ // {toString: function() { return "__proto__"; }} can avoid the item === "__proto__" test.
+ // The alternative to type-checking would be to force string conversion, i.e. item = String(item);
+ if (typeof item !== "string") {
+ throw new Error("StringSet expected string item");
+ }
+ return (item === "__proto__" ?
+ this.hasProto :
+ hasOwnProperty.call(this.obj, item));
+ };
+
+ stringset.prototype.add = function(item) {
+ if (typeof item !== "string") {
+ throw new Error("StringSet expected string item");
+ }
+ if (item === "__proto__") {
+ this.hasProto = true;
+ } else {
+ this.obj[item] = true;
+ }
+ };
+
+ stringset.prototype.remove = function(item) {
+ if (typeof item !== "string") {
+ throw new Error("StringSet expected string item");
+ }
+ var didExist = this.has(item);
+ if (item === "__proto__") {
+ this.hasProto = false;
+ } else {
+ delete this.obj[item];
+ }
+ return didExist;
+ };
+
+ // alias remove to delete but beware:
+ // ss.delete("key"); // OK in ES5 and later
+ // ss['delete']("key"); // OK in all ES versions
+ // ss.remove("key"); // OK in all ES versions
+ stringset.prototype['delete'] = stringset.prototype.remove;
+
+ stringset.prototype.isEmpty = function() {
+ for (var item in this.obj) {
+ if (hasOwnProperty.call(this.obj, item)) {
+ return false;
+ }
+ }
+ return !this.hasProto;
+ };
+
+ stringset.prototype.size = function() {
+ var len = 0;
+ for (var item in this.obj) {
+ if (hasOwnProperty.call(this.obj, item)) {
+ ++len;
+ }
+ }
+ return (this.hasProto ? len + 1 : len);
+ };
+
+ stringset.prototype.items = function() {
+ var items = [];
+ for (var item in this.obj) {
+ if (hasOwnProperty.call(this.obj, item)) {
+ items.push(item);
+ }
+ }
+ if (this.hasProto) {
+ items.push("__proto__");
+ }
+ return items;
+ };
+
+
+ // methods that rely on the above primitives
+ stringset.prototype.addMany = function(items) {
+ if (!Array.isArray(items)) {
+ throw new Error("StringSet expected array");
+ }
+ for (var i = 0; i < items.length; i++) {
+ this.add(items[i]);
+ }
+ return this;
+ };
+
+ stringset.prototype.merge = function(other) {
+ this.addMany(other.items());
+ return this;
+ };
+
+ stringset.prototype.clone = function() {
+ var other = stringset();
+ return other.merge(this);
+ };
+
+ stringset.prototype.toString = function() {
+ return "{" + this.items().map(JSON.stringify).join(",") + "}";
+ };
+
+ return stringset;
+})();
+
+if (typeof module !== "undefined" && typeof module.exports !== "undefined") {
+ module.exports = StringSet;
+}
+
+},{}],605:[function(_dereq_,module,exports){
+'use strict';
+var ansiRegex = _dereq_(184)();
+
+module.exports = function (str) {
+ return typeof str === 'string' ? str.replace(ansiRegex, '') : str;
+};
+
+},{"184":184}],606:[function(_dereq_,module,exports){
+(function (process){
+'use strict';
+var argv = process.argv;
+
+var terminator = argv.indexOf('--');
+var hasFlag = function (flag) {
+ flag = '--' + flag;
+ var pos = argv.indexOf(flag);
+ return pos !== -1 && (terminator !== -1 ? pos < terminator : true);
+};
+
+module.exports = (function () {
+ if ('FORCE_COLOR' in process.env) {
+ return true;
+ }
+
+ if (hasFlag('no-color') ||
+ hasFlag('no-colors') ||
+ hasFlag('color=false')) {
+ return false;
+ }
+
+ if (hasFlag('color') ||
+ hasFlag('colors') ||
+ hasFlag('color=true') ||
+ hasFlag('color=always')) {
+ return true;
+ }
+
+ if (process.stdout && !process.stdout.isTTY) {
+ return false;
+ }
+
+ if (process.platform === 'win32') {
+ return true;
+ }
+
+ if ('COLORTERM' in process.env) {
+ return true;
+ }
+
+ if (process.env.TERM === 'dumb') {
+ return false;
+ }
+
+ if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) {
+ return true;
+ }
+
+ return false;
+})();
+
+}).call(this,_dereq_(10))
+},{"10":10}],607:[function(_dereq_,module,exports){
+'use strict';
+module.exports = function toFastProperties(obj) {
+ function f() {}
+ f.prototype = obj;
+ new f();
+ return;
+ eval(obj);
+};
+
+},{}],608:[function(_dereq_,module,exports){
+'use strict';
+module.exports = function (str) {
+ var tail = str.length;
+
+ while (/[\s\uFEFF\u00A0]/.test(str[tail - 1])) {
+ tail--;
+ }
+
+ return str.slice(0, tail);
+};
+
+},{}],609:[function(_dereq_,module,exports){
+(function (process){
+var Module = _dereq_(3);
+
+var resolve = module.exports = function (loc, _require) {
+ try {
+ return (_require || _dereq_).resolve(loc);
+ } catch (err) {
+ return null;
+ }
+};
+
+var relativeMod;
+
+resolve.relative = function (loc) {
+ // we're in the browser, probably
+ if (typeof Module === "object") return null;
+
+ if (!relativeMod) {
+ relativeMod = new Module;
+ relativeMod.paths = Module._nodeModulePaths(process.cwd());
+ }
+
+ try {
+ return Module._resolveFilename(loc, relativeMod);
+ } catch (err) {
+ return null;
+ }
+};
+
+}).call(this,_dereq_(10))
+},{"10":10,"3":3}],610:[function(_dereq_,module,exports){
+module.exports={
+ "name": "babel-core",
+ "version": "5.8.38",
+ "description": "A compiler for writing next generation JavaScript",
+ "author": "Sebastian McKenzie ",
+ "homepage": "https://babeljs.io/",
+ "license": "MIT",
+ "repository": "babel/babel",
+ "browser": {
+ "./lib/api/register/node.js": "./lib/api/register/browser.js"
+ },
+ "keywords": [
+ "6to5",
+ "babel",
+ "classes",
+ "const",
+ "es6",
+ "harmony",
+ "let",
+ "modules",
+ "transpile",
+ "transpiler",
+ "var"
+ ],
+ "scripts": {
+ "bench": "make bench",
+ "test": "make test"
+ },
+ "dependencies": {
+ "babel-plugin-constant-folding": "^1.0.1",
+ "babel-plugin-dead-code-elimination": "^1.0.2",
+ "babel-plugin-eval": "^1.0.1",
+ "babel-plugin-inline-environment-variables": "^1.0.1",
+ "babel-plugin-jscript": "^1.0.4",
+ "babel-plugin-member-expression-literals": "^1.0.1",
+ "babel-plugin-property-literals": "^1.0.1",
+ "babel-plugin-proto-to-assign": "^1.0.3",
+ "babel-plugin-react-constant-elements": "^1.0.3",
+ "babel-plugin-react-display-name": "^1.0.3",
+ "babel-plugin-remove-console": "^1.0.1",
+ "babel-plugin-remove-debugger": "^1.0.1",
+ "babel-plugin-runtime": "^1.0.7",
+ "babel-plugin-undeclared-variables-check": "^1.0.2",
+ "babel-plugin-undefined-to-void": "^1.1.6",
+ "babylon": "^5.8.38",
+ "bluebird": "^2.9.33",
+ "chalk": "^1.0.0",
+ "convert-source-map": "^1.1.0",
+ "core-js": "^1.0.0",
+ "debug": "^2.1.1",
+ "detect-indent": "^3.0.0",
+ "esutils": "^2.0.0",
+ "fs-readdir-recursive": "^0.1.0",
+ "globals": "^6.4.0",
+ "home-or-tmp": "^1.0.0",
+ "is-integer": "^1.0.4",
+ "js-tokens": "1.0.1",
+ "json5": "^0.4.0",
+ "lodash": "^3.10.0",
+ "minimatch": "^2.0.3",
+ "output-file-sync": "^1.1.0",
+ "path-exists": "^1.0.0",
+ "path-is-absolute": "^1.0.0",
+ "private": "^0.1.6",
+ "regenerator": "0.8.40",
+ "regexpu": "^1.3.0",
+ "repeating": "^1.1.2",
+ "resolve": "^1.1.6",
+ "shebang-regex": "^1.0.0",
+ "slash": "^1.0.0",
+ "source-map": "^0.5.0",
+ "source-map-support": "^0.2.10",
+ "to-fast-properties": "^1.0.0",
+ "trim-right": "^1.0.0",
+ "try-resolve": "^1.0.0"
+ }
+}
+},{}],611:[function(_dereq_,module,exports){
+module.exports={"abstract-expression-call":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"PROPERTY"},"property":{"type":"MemberExpression","object":{"type":"Identifier","name":"Symbol"},"property":{"type":"Identifier","name":"referenceGet"},"computed":false},"computed":true},"arguments":[{"type":"Identifier","name":"OBJECT"}]},"property":{"type":"Identifier","name":"call"},"computed":false},"arguments":[{"type":"Identifier","name":"OBJECT"}]}}]},"abstract-expression-delete":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"PROPERTY"},"property":{"type":"MemberExpression","object":{"type":"Identifier","name":"Symbol"},"property":{"type":"Identifier","name":"referenceDelete"},"computed":false},"computed":true},"arguments":[{"type":"Identifier","name":"OBJECT"}]}}]},"abstract-expression-get":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"PROPERTY"},"property":{"type":"MemberExpression","object":{"type":"Identifier","name":"Symbol"},"property":{"type":"Identifier","name":"referenceGet"},"computed":false},"computed":true},"arguments":[{"type":"Identifier","name":"OBJECT"}]}}]},"abstract-expression-set":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"PROPERTY"},"property":{"type":"MemberExpression","object":{"type":"Identifier","name":"Symbol"},"property":{"type":"Identifier","name":"referenceSet"},"computed":false},"computed":true},"arguments":[{"type":"Identifier","name":"OBJECT"},{"type":"Identifier","name":"VALUE"}]}}]},"array-comprehension-container":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[],"body":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"KEY"},"init":{"type":"ArrayExpression","elements":[]}}],"kind":"var"},{"type":"ReturnStatement","argument":{"type":"Identifier","name":"KEY"}}]},"parenthesizedExpression":true},"arguments":[]}}]},"array-from":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Array"},"property":{"type":"Identifier","name":"from"},"computed":false},"arguments":[{"type":"Identifier","name":"VALUE"}]}}]},"array-push":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"KEY"},"property":{"type":"Identifier","name":"push"},"computed":false},"arguments":[{"type":"Identifier","name":"STATEMENT"}]}}]},"call":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"OBJECT"},"property":{"type":"Identifier","name":"call"},"computed":false},"arguments":[{"type":"Identifier","name":"CONTEXT"}]}}]},"class-decorator":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"Identifier","name":"CLASS_REF"},"right":{"type":"LogicalExpression","left":{"type":"CallExpression","callee":{"type":"Identifier","name":"DECORATOR"},"arguments":[{"type":"Identifier","name":"CLASS_REF"}]},"operator":"||","right":{"type":"Identifier","name":"CLASS_REF"}}}}]},"class-derived-default-constructor":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[],"body":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"Super"},"arguments":[{"type":"SpreadElement","argument":{"type":"Identifier","name":"arguments"}}]}}]},"parenthesizedExpression":true}}]},"default-parameter-assign":{"type":"Program","body":[{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"VARIABLE_NAME"},"operator":"===","right":{"type":"Identifier","name":"undefined"}},"consequent":{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"Identifier","name":"VARIABLE_NAME"},"right":{"type":"Identifier","name":"DEFAULT_VALUE"}}},"alternate":null}]},"default-parameter":{"type":"Program","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"VARIABLE_NAME"},"init":{"type":"ConditionalExpression","test":{"type":"LogicalExpression","left":{"type":"BinaryExpression","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"ARGUMENTS"},"property":{"type":"Identifier","name":"length"},"computed":false},"operator":"<=","right":{"type":"Identifier","name":"ARGUMENT_KEY"}},"operator":"||","right":{"type":"BinaryExpression","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"ARGUMENTS"},"property":{"type":"Identifier","name":"ARGUMENT_KEY"},"computed":true},"operator":"===","right":{"type":"Identifier","name":"undefined"}}},"consequent":{"type":"Identifier","name":"DEFAULT_VALUE"},"alternate":{"type":"MemberExpression","object":{"type":"Identifier","name":"ARGUMENTS"},"property":{"type":"Identifier","name":"ARGUMENT_KEY"},"computed":true}}}],"kind":"let"}]},"exports-assign":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"exports"},"property":{"type":"Identifier","name":"KEY"},"computed":false},"right":{"type":"Identifier","name":"VALUE"}}}]},"exports-default-assign":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"module"},"property":{"type":"Identifier","name":"exports"},"computed":false},"right":{"type":"Identifier","name":"VALUE"}}}]},"exports-from-assign":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"defineProperty"},"computed":false},"arguments":[{"type":"Identifier","name":"exports"},{"type":"Identifier","name":"ID"},{"type":"ObjectExpression","properties":[{"type":"Property","method":false,"shorthand":false,"computed":false,"key":{"type":"Identifier","name":"enumerable"},"value":{"type":"Literal","value":true},"kind":"init"},{"type":"Property","method":false,"shorthand":false,"computed":false,"key":{"type":"Identifier","name":"get"},"value":{"type":"FunctionExpression","id":{"type":"Identifier","name":"get"},"generator":false,"expression":false,"params":[],"body":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"Identifier","name":"INIT"}}]}},"kind":"init"}]}]}}]},"exports-module-declaration-loose":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"exports"},"property":{"type":"Identifier","name":"__esModule"},"computed":false},"right":{"type":"Literal","value":true}}}]},"exports-module-declaration":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"defineProperty"},"computed":false},"arguments":[{"type":"Identifier","name":"exports"},{"type":"Literal","value":"__esModule"},{"type":"ObjectExpression","properties":[{"type":"Property","method":false,"shorthand":false,"computed":false,"key":{"type":"Identifier","name":"value"},"value":{"type":"Literal","value":true},"kind":"init"}]}]}}]},"for-of-array":{"type":"Program","body":[{"type":"ForStatement","init":{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"KEY"},"init":{"type":"Literal","value":0}}],"kind":"var"},"test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"KEY"},"operator":"<","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"ARR"},"property":{"type":"Identifier","name":"length"},"computed":false}},"update":{"type":"UpdateExpression","operator":"++","prefix":false,"argument":{"type":"Identifier","name":"KEY"}},"body":{"type":"ExpressionStatement","expression":{"type":"Identifier","name":"BODY"}}}]},"for-of-loose":{"type":"Program","body":[{"type":"ForStatement","init":{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"LOOP_OBJECT"},"init":{"type":"Identifier","name":"OBJECT"}},{"type":"VariableDeclarator","id":{"type":"Identifier","name":"IS_ARRAY"},"init":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Array"},"property":{"type":"Identifier","name":"isArray"},"computed":false},"arguments":[{"type":"Identifier","name":"LOOP_OBJECT"}]}},{"type":"VariableDeclarator","id":{"type":"Identifier","name":"INDEX"},"init":{"type":"Literal","value":0}},{"type":"VariableDeclarator","id":{"type":"Identifier","name":"LOOP_OBJECT"},"init":{"type":"ConditionalExpression","test":{"type":"Identifier","name":"IS_ARRAY"},"consequent":{"type":"Identifier","name":"LOOP_OBJECT"},"alternate":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"LOOP_OBJECT"},"property":{"type":"MemberExpression","object":{"type":"Identifier","name":"Symbol"},"property":{"type":"Identifier","name":"iterator"},"computed":false},"computed":true},"arguments":[]}}}],"kind":"var"},"test":null,"update":null,"body":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"ID"},"init":null}],"kind":"var"},{"type":"IfStatement","test":{"type":"Identifier","name":"IS_ARRAY"},"consequent":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"INDEX"},"operator":">=","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"LOOP_OBJECT"},"property":{"type":"Identifier","name":"length"},"computed":false}},"consequent":{"type":"BreakStatement","label":null},"alternate":null},{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"Identifier","name":"ID"},"right":{"type":"MemberExpression","object":{"type":"Identifier","name":"LOOP_OBJECT"},"property":{"type":"UpdateExpression","operator":"++","prefix":false,"argument":{"type":"Identifier","name":"INDEX"}},"computed":true}}}]},"alternate":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"Identifier","name":"INDEX"},"right":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"LOOP_OBJECT"},"property":{"type":"Identifier","name":"next"},"computed":false},"arguments":[]}}},{"type":"IfStatement","test":{"type":"MemberExpression","object":{"type":"Identifier","name":"INDEX"},"property":{"type":"Identifier","name":"done"},"computed":false},"consequent":{"type":"BreakStatement","label":null},"alternate":null},{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"Identifier","name":"ID"},"right":{"type":"MemberExpression","object":{"type":"Identifier","name":"INDEX"},"property":{"type":"Identifier","name":"value"},"computed":false}}}]}}]}}]},"for-of":{"type":"Program","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"ITERATOR_COMPLETION"},"init":{"type":"Literal","value":true}}],"kind":"var"},{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"ITERATOR_HAD_ERROR_KEY"},"init":{"type":"Literal","value":false}}],"kind":"var"},{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"ITERATOR_ERROR_KEY"},"init":{"type":"Identifier","name":"undefined"}}],"kind":"var"},{"type":"TryStatement","block":{"type":"BlockStatement","body":[{"type":"ForStatement","init":{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"ITERATOR_KEY"},"init":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"OBJECT"},"property":{"type":"MemberExpression","object":{"type":"Identifier","name":"Symbol"},"property":{"type":"Identifier","name":"iterator"},"computed":false},"computed":true},"arguments":[]}},{"type":"VariableDeclarator","id":{"type":"Identifier","name":"STEP_KEY"},"init":null}],"kind":"var"},"test":{"type":"UnaryExpression","operator":"!","prefix":true,"argument":{"type":"AssignmentExpression","operator":"=","left":{"type":"Identifier","name":"ITERATOR_COMPLETION"},"right":{"type":"MemberExpression","object":{"type":"AssignmentExpression","operator":"=","left":{"type":"Identifier","name":"STEP_KEY"},"right":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"ITERATOR_KEY"},"property":{"type":"Identifier","name":"next"},"computed":false},"arguments":[]},"parenthesizedExpression":true},"property":{"type":"Identifier","name":"done"},"computed":false},"parenthesizedExpression":true}},"update":{"type":"AssignmentExpression","operator":"=","left":{"type":"Identifier","name":"ITERATOR_COMPLETION"},"right":{"type":"Literal","value":true}},"body":{"type":"BlockStatement","body":[]}}]},"handler":{"type":"CatchClause","param":{"type":"Identifier","name":"err"},"body":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"Identifier","name":"ITERATOR_HAD_ERROR_KEY"},"right":{"type":"Literal","value":true}}},{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"Identifier","name":"ITERATOR_ERROR_KEY"},"right":{"type":"Identifier","name":"err"}}}]}},"guardedHandlers":[],"finalizer":{"type":"BlockStatement","body":[{"type":"TryStatement","block":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"LogicalExpression","left":{"type":"UnaryExpression","operator":"!","prefix":true,"argument":{"type":"Identifier","name":"ITERATOR_COMPLETION"}},"operator":"&&","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"ITERATOR_KEY"},"property":{"type":"Literal","value":"return"},"computed":true}},"consequent":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"ITERATOR_KEY"},"property":{"type":"Literal","value":"return"},"computed":true},"arguments":[]}}]},"alternate":null}]},"handler":null,"guardedHandlers":[],"finalizer":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"Identifier","name":"ITERATOR_HAD_ERROR_KEY"},"consequent":{"type":"BlockStatement","body":[{"type":"ThrowStatement","argument":{"type":"Identifier","name":"ITERATOR_ERROR_KEY"}}]},"alternate":null}]}}]}}]},"helper-async-to-generator":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"fn"}],"body":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[],"body":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"gen"},"init":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"fn"},"property":{"type":"Identifier","name":"apply"},"computed":false},"arguments":[{"type":"ThisExpression"},{"type":"Identifier","name":"arguments"}]}}],"kind":"var"},{"type":"ReturnStatement","argument":{"type":"NewExpression","callee":{"type":"Identifier","name":"Promise"},"arguments":[{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"resolve"},{"type":"Identifier","name":"reject"}],"body":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"callNext"},"init":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"step"},"property":{"type":"Identifier","name":"bind"},"computed":false},"arguments":[{"type":"Literal","value":null,"rawValue":null},{"type":"Literal","value":"next"}]}}],"kind":"var"},{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"callThrow"},"init":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"step"},"property":{"type":"Identifier","name":"bind"},"computed":false},"arguments":[{"type":"Literal","value":null,"rawValue":null},{"type":"Literal","value":"throw"}]}}],"kind":"var"},{"type":"FunctionDeclaration","id":{"type":"Identifier","name":"step"},"generator":false,"expression":false,"params":[{"type":"Identifier","name":"key"},{"type":"Identifier","name":"arg"}],"body":{"type":"BlockStatement","body":[{"type":"TryStatement","block":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"info"},"init":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"gen"},"property":{"type":"Identifier","name":"key"},"computed":true},"arguments":[{"type":"Identifier","name":"arg"}]}}],"kind":"var"},{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"value"},"init":{"type":"MemberExpression","object":{"type":"Identifier","name":"info"},"property":{"type":"Identifier","name":"value"},"computed":false}}],"kind":"var"}]},"handler":{"type":"CatchClause","param":{"type":"Identifier","name":"error"},"body":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"Identifier","name":"reject"},"arguments":[{"type":"Identifier","name":"error"}]}},{"type":"ReturnStatement","argument":null}]}},"guardedHandlers":[],"finalizer":null},{"type":"IfStatement","test":{"type":"MemberExpression","object":{"type":"Identifier","name":"info"},"property":{"type":"Identifier","name":"done"},"computed":false},"consequent":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"Identifier","name":"resolve"},"arguments":[{"type":"Identifier","name":"value"}]}}]},"alternate":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Promise"},"property":{"type":"Identifier","name":"resolve"},"computed":false},"arguments":[{"type":"Identifier","name":"value"}]},"property":{"type":"Identifier","name":"then"},"computed":false},"arguments":[{"type":"Identifier","name":"callNext"},{"type":"Identifier","name":"callThrow"}]}}]}}]}},{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"Identifier","name":"callNext"},"arguments":[]}}]}}]}}]}}}]},"parenthesizedExpression":true}}]},"helper-bind":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"MemberExpression","object":{"type":"MemberExpression","object":{"type":"Identifier","name":"Function"},"property":{"type":"Identifier","name":"prototype"},"computed":false},"property":{"type":"Identifier","name":"bind"},"computed":false}}]},"helper-class-call-check":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"instance"},{"type":"Identifier","name":"Constructor"}],"body":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"UnaryExpression","operator":"!","prefix":true,"argument":{"type":"BinaryExpression","left":{"type":"Identifier","name":"instance"},"operator":"instanceof","right":{"type":"Identifier","name":"Constructor"},"parenthesizedExpression":true}},"consequent":{"type":"BlockStatement","body":[{"type":"ThrowStatement","argument":{"type":"NewExpression","callee":{"type":"Identifier","name":"TypeError"},"arguments":[{"type":"Literal","value":"Cannot call a class as a function"}]}}]},"alternate":null}]},"parenthesizedExpression":true}}]},"helper-create-class":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[],"body":{"type":"BlockStatement","body":[{"type":"FunctionDeclaration","id":{"type":"Identifier","name":"defineProperties"},"generator":false,"expression":false,"params":[{"type":"Identifier","name":"target"},{"type":"Identifier","name":"props"}],"body":{"type":"BlockStatement","body":[{"type":"ForStatement","init":{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"i"},"init":{"type":"Literal","value":0}}],"kind":"var"},"test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"i"},"operator":"<","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"props"},"property":{"type":"Identifier","name":"length"},"computed":false}},"update":{"type":"UpdateExpression","operator":"++","prefix":false,"argument":{"type":"Identifier","name":"i"}},"body":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"descriptor"},"init":{"type":"MemberExpression","object":{"type":"Identifier","name":"props"},"property":{"type":"Identifier","name":"i"},"computed":true}}],"kind":"var"},{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"enumerable"},"computed":false},"right":{"type":"LogicalExpression","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"enumerable"},"computed":false},"operator":"||","right":{"type":"Literal","value":false}}}},{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"configurable"},"computed":false},"right":{"type":"Literal","value":true}}},{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"Literal","value":"value"},"operator":"in","right":{"type":"Identifier","name":"descriptor"}},"consequent":{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"writable"},"computed":false},"right":{"type":"Literal","value":true}}},"alternate":null},{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"defineProperty"},"computed":false},"arguments":[{"type":"Identifier","name":"target"},{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"key"},"computed":false},{"type":"Identifier","name":"descriptor"}]}}]}}]}},{"type":"ReturnStatement","argument":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"Constructor"},{"type":"Identifier","name":"protoProps"},{"type":"Identifier","name":"staticProps"}],"body":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"Identifier","name":"protoProps"},"consequent":{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"Identifier","name":"defineProperties"},"arguments":[{"type":"MemberExpression","object":{"type":"Identifier","name":"Constructor"},"property":{"type":"Identifier","name":"prototype"},"computed":false},{"type":"Identifier","name":"protoProps"}]}},"alternate":null},{"type":"IfStatement","test":{"type":"Identifier","name":"staticProps"},"consequent":{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"Identifier","name":"defineProperties"},"arguments":[{"type":"Identifier","name":"Constructor"},{"type":"Identifier","name":"staticProps"}]}},"alternate":null},{"type":"ReturnStatement","argument":{"type":"Identifier","name":"Constructor"}}]}}}]},"parenthesizedExpression":true},"arguments":[]}}]},"helper-create-decorated-class":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[],"body":{"type":"BlockStatement","body":[{"type":"FunctionDeclaration","id":{"type":"Identifier","name":"defineProperties"},"generator":false,"expression":false,"params":[{"type":"Identifier","name":"target"},{"type":"Identifier","name":"descriptors"},{"type":"Identifier","name":"initializers"}],"body":{"type":"BlockStatement","body":[{"type":"ForStatement","init":{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"i"},"init":{"type":"Literal","value":0}}],"kind":"var"},"test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"i"},"operator":"<","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptors"},"property":{"type":"Identifier","name":"length"},"computed":false}},"update":{"type":"UpdateExpression","operator":"++","prefix":false,"argument":{"type":"Identifier","name":"i"}},"body":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"descriptor"},"init":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptors"},"property":{"type":"Identifier","name":"i"},"computed":true}}],"kind":"var"},{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"decorators"},"init":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"decorators"},"computed":false}}],"kind":"var"},{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"key"},"init":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"key"},"computed":false}}],"kind":"var"},{"type":"ExpressionStatement","expression":{"type":"UnaryExpression","operator":"delete","prefix":true,"argument":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor","leadingComments":null},"property":{"type":"Identifier","name":"key"},"computed":false,"leadingComments":null},"leadingComments":null}},{"type":"ExpressionStatement","expression":{"type":"UnaryExpression","operator":"delete","prefix":true,"argument":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"decorators"},"computed":false}}},{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"enumerable"},"computed":false},"right":{"type":"LogicalExpression","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"enumerable"},"computed":false},"operator":"||","right":{"type":"Literal","value":false}}}},{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"configurable"},"computed":false},"right":{"type":"Literal","value":true}}},{"type":"IfStatement","test":{"type":"LogicalExpression","left":{"type":"BinaryExpression","left":{"type":"Literal","value":"value"},"operator":"in","right":{"type":"Identifier","name":"descriptor"}},"operator":"||","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"initializer"},"computed":false}},"consequent":{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"writable"},"computed":false},"right":{"type":"Literal","value":true}}},"alternate":null},{"type":"IfStatement","test":{"type":"Identifier","name":"decorators"},"consequent":{"type":"BlockStatement","body":[{"type":"ForStatement","init":{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"f"},"init":{"type":"Literal","value":0}}],"kind":"var"},"test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"f"},"operator":"<","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"decorators"},"property":{"type":"Identifier","name":"length"},"computed":false}},"update":{"type":"UpdateExpression","operator":"++","prefix":false,"argument":{"type":"Identifier","name":"f"}},"body":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"decorator"},"init":{"type":"MemberExpression","object":{"type":"Identifier","name":"decorators"},"property":{"type":"Identifier","name":"f"},"computed":true}}],"kind":"var"},{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"UnaryExpression","operator":"typeof","prefix":true,"argument":{"type":"Identifier","name":"decorator"}},"operator":"===","right":{"type":"Literal","value":"function"}},"consequent":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"Identifier","name":"descriptor"},"right":{"type":"LogicalExpression","left":{"type":"CallExpression","callee":{"type":"Identifier","name":"decorator"},"arguments":[{"type":"Identifier","name":"target"},{"type":"Identifier","name":"key"},{"type":"Identifier","name":"descriptor"}]},"operator":"||","right":{"type":"Identifier","name":"descriptor"}}}}]},"alternate":{"type":"BlockStatement","body":[{"type":"ThrowStatement","argument":{"type":"NewExpression","callee":{"type":"Identifier","name":"TypeError"},"arguments":[{"type":"BinaryExpression","left":{"type":"BinaryExpression","left":{"type":"BinaryExpression","left":{"type":"Literal","value":"The decorator for method "},"operator":"+","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"key"},"computed":false}},"operator":"+","right":{"type":"Literal","value":" is of the invalid type "}},"operator":"+","right":{"type":"UnaryExpression","operator":"typeof","prefix":true,"argument":{"type":"Identifier","name":"decorator"}}}]}}]}}]}},{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"initializer"},"computed":false},"operator":"!==","right":{"type":"Identifier","name":"undefined"}},"consequent":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"initializers"},"property":{"type":"Identifier","name":"key"},"computed":true},"right":{"type":"Identifier","name":"descriptor"}}},{"type":"ContinueStatement","label":null}]},"alternate":null}]},"alternate":null},{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"defineProperty"},"computed":false},"arguments":[{"type":"Identifier","name":"target"},{"type":"Identifier","name":"key"},{"type":"Identifier","name":"descriptor"}]}}]}}]}},{"type":"ReturnStatement","argument":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"Constructor"},{"type":"Identifier","name":"protoProps"},{"type":"Identifier","name":"staticProps"},{"type":"Identifier","name":"protoInitializers"},{"type":"Identifier","name":"staticInitializers"}],"body":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"Identifier","name":"protoProps"},"consequent":{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"Identifier","name":"defineProperties"},"arguments":[{"type":"MemberExpression","object":{"type":"Identifier","name":"Constructor"},"property":{"type":"Identifier","name":"prototype"},"computed":false},{"type":"Identifier","name":"protoProps"},{"type":"Identifier","name":"protoInitializers"}]}},"alternate":null},{"type":"IfStatement","test":{"type":"Identifier","name":"staticProps"},"consequent":{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"Identifier","name":"defineProperties"},"arguments":[{"type":"Identifier","name":"Constructor"},{"type":"Identifier","name":"staticProps"},{"type":"Identifier","name":"staticInitializers"}]}},"alternate":null},{"type":"ReturnStatement","argument":{"type":"Identifier","name":"Constructor"}}]}}}]},"parenthesizedExpression":true},"arguments":[]}}]},"helper-create-decorated-object":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"descriptors"}],"body":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"target"},"init":{"type":"ObjectExpression","properties":[]}}],"kind":"var"},{"type":"ForStatement","init":{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"i"},"init":{"type":"Literal","value":0}}],"kind":"var"},"test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"i"},"operator":"<","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptors"},"property":{"type":"Identifier","name":"length"},"computed":false}},"update":{"type":"UpdateExpression","operator":"++","prefix":false,"argument":{"type":"Identifier","name":"i"}},"body":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"descriptor"},"init":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptors"},"property":{"type":"Identifier","name":"i"},"computed":true}}],"kind":"var"},{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"decorators"},"init":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"decorators"},"computed":false}}],"kind":"var"},{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"key"},"init":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"key"},"computed":false}}],"kind":"var"},{"type":"ExpressionStatement","expression":{"type":"UnaryExpression","operator":"delete","prefix":true,"argument":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor","leadingComments":null},"property":{"type":"Identifier","name":"key"},"computed":false,"leadingComments":null},"leadingComments":null}},{"type":"ExpressionStatement","expression":{"type":"UnaryExpression","operator":"delete","prefix":true,"argument":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"decorators"},"computed":false}}},{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"enumerable"},"computed":false},"right":{"type":"Literal","value":true}}},{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"configurable"},"computed":false},"right":{"type":"Literal","value":true}}},{"type":"IfStatement","test":{"type":"LogicalExpression","left":{"type":"BinaryExpression","left":{"type":"Literal","value":"value"},"operator":"in","right":{"type":"Identifier","name":"descriptor"}},"operator":"||","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"initializer"},"computed":false}},"consequent":{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"writable"},"computed":false},"right":{"type":"Literal","value":true}}},"alternate":null},{"type":"IfStatement","test":{"type":"Identifier","name":"decorators"},"consequent":{"type":"BlockStatement","body":[{"type":"ForStatement","init":{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"f"},"init":{"type":"Literal","value":0}}],"kind":"var"},"test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"f"},"operator":"<","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"decorators"},"property":{"type":"Identifier","name":"length"},"computed":false}},"update":{"type":"UpdateExpression","operator":"++","prefix":false,"argument":{"type":"Identifier","name":"f"}},"body":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"decorator"},"init":{"type":"MemberExpression","object":{"type":"Identifier","name":"decorators"},"property":{"type":"Identifier","name":"f"},"computed":true}}],"kind":"var"},{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"UnaryExpression","operator":"typeof","prefix":true,"argument":{"type":"Identifier","name":"decorator"}},"operator":"===","right":{"type":"Literal","value":"function"}},"consequent":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"Identifier","name":"descriptor"},"right":{"type":"LogicalExpression","left":{"type":"CallExpression","callee":{"type":"Identifier","name":"decorator"},"arguments":[{"type":"Identifier","name":"target"},{"type":"Identifier","name":"key"},{"type":"Identifier","name":"descriptor"}]},"operator":"||","right":{"type":"Identifier","name":"descriptor"}}}}]},"alternate":{"type":"BlockStatement","body":[{"type":"ThrowStatement","argument":{"type":"NewExpression","callee":{"type":"Identifier","name":"TypeError"},"arguments":[{"type":"BinaryExpression","left":{"type":"BinaryExpression","left":{"type":"BinaryExpression","left":{"type":"Literal","value":"The decorator for method "},"operator":"+","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"key"},"computed":false}},"operator":"+","right":{"type":"Literal","value":" is of the invalid type "}},"operator":"+","right":{"type":"UnaryExpression","operator":"typeof","prefix":true,"argument":{"type":"Identifier","name":"decorator"}}}]}}]}}]}}]},"alternate":null},{"type":"IfStatement","test":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"initializer"},"computed":false},"consequent":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"value"},"computed":false},"right":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"initializer"},"computed":false},"property":{"type":"Identifier","name":"call"},"computed":false},"arguments":[{"type":"Identifier","name":"target"}]}}}]},"alternate":null},{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"defineProperty"},"computed":false},"arguments":[{"type":"Identifier","name":"target"},{"type":"Identifier","name":"key"},{"type":"Identifier","name":"descriptor"}]}}]}},{"type":"ReturnStatement","argument":{"type":"Identifier","name":"target"}}]},"parenthesizedExpression":true}}]},"helper-default-props":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"defaultProps"},{"type":"Identifier","name":"props"}],"body":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"Identifier","name":"defaultProps"},"consequent":{"type":"BlockStatement","body":[{"type":"ForInStatement","left":{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"propName"},"init":null}],"kind":"var"},"right":{"type":"Identifier","name":"defaultProps"},"body":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"UnaryExpression","operator":"typeof","prefix":true,"argument":{"type":"MemberExpression","object":{"type":"Identifier","name":"props"},"property":{"type":"Identifier","name":"propName"},"computed":true}},"operator":"===","right":{"type":"Literal","value":"undefined"}},"consequent":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"props"},"property":{"type":"Identifier","name":"propName"},"computed":true},"right":{"type":"MemberExpression","object":{"type":"Identifier","name":"defaultProps"},"property":{"type":"Identifier","name":"propName"},"computed":true}}}]},"alternate":null}]}}]},"alternate":null},{"type":"ReturnStatement","argument":{"type":"Identifier","name":"props"}}]},"parenthesizedExpression":true}}]},"helper-defaults":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"obj"},{"type":"Identifier","name":"defaults"}],"body":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"keys"},"init":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"getOwnPropertyNames"},"computed":false},"arguments":[{"type":"Identifier","name":"defaults"}]}}],"kind":"var"},{"type":"ForStatement","init":{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"i"},"init":{"type":"Literal","value":0}}],"kind":"var"},"test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"i"},"operator":"<","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"keys"},"property":{"type":"Identifier","name":"length"},"computed":false}},"update":{"type":"UpdateExpression","operator":"++","prefix":false,"argument":{"type":"Identifier","name":"i"}},"body":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"key"},"init":{"type":"MemberExpression","object":{"type":"Identifier","name":"keys"},"property":{"type":"Identifier","name":"i"},"computed":true}}],"kind":"var"},{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"value"},"init":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"getOwnPropertyDescriptor"},"computed":false},"arguments":[{"type":"Identifier","name":"defaults"},{"type":"Identifier","name":"key"}]}}],"kind":"var"},{"type":"IfStatement","test":{"type":"LogicalExpression","left":{"type":"LogicalExpression","left":{"type":"Identifier","name":"value"},"operator":"&&","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"value"},"property":{"type":"Identifier","name":"configurable"},"computed":false}},"operator":"&&","right":{"type":"BinaryExpression","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"obj"},"property":{"type":"Identifier","name":"key"},"computed":true},"operator":"===","right":{"type":"Identifier","name":"undefined"}}},"consequent":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"defineProperty"},"computed":false},"arguments":[{"type":"Identifier","name":"obj"},{"type":"Identifier","name":"key"},{"type":"Identifier","name":"value"}]}}]},"alternate":null}]}},{"type":"ReturnStatement","argument":{"type":"Identifier","name":"obj"}}]},"parenthesizedExpression":true}}]},"helper-define-decorated-property-descriptor":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"target"},{"type":"Identifier","name":"key"},{"type":"Identifier","name":"descriptors"}],"body":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"_descriptor"},"init":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptors"},"property":{"type":"Identifier","name":"key"},"computed":true}}],"kind":"var"},{"type":"IfStatement","test":{"type":"UnaryExpression","operator":"!","prefix":true,"argument":{"type":"Identifier","name":"_descriptor"}},"consequent":{"type":"ReturnStatement","argument":null,"leadingComments":null,"trailingComments":null},"alternate":null},{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"descriptor","leadingComments":null},"init":{"type":"ObjectExpression","properties":[]},"leadingComments":null}],"kind":"var"},{"type":"ForInStatement","left":{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"_key"},"init":null}],"kind":"var"},"right":{"type":"Identifier","name":"_descriptor"},"body":{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"_key"},"computed":true},"right":{"type":"MemberExpression","object":{"type":"Identifier","name":"_descriptor"},"property":{"type":"Identifier","name":"_key"},"computed":true}},"trailingComments":null}},{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor","leadingComments":null},"property":{"type":"Identifier","name":"value"},"computed":false,"leadingComments":null},"right":{"type":"ConditionalExpression","test":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"initializer"},"computed":false},"consequent":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"MemberExpression","object":{"type":"Identifier","name":"descriptor"},"property":{"type":"Identifier","name":"initializer"},"computed":false},"property":{"type":"Identifier","name":"call"},"computed":false},"arguments":[{"type":"Identifier","name":"target"}]},"alternate":{"type":"Identifier","name":"undefined"}},"leadingComments":null}},{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"defineProperty"},"computed":false},"arguments":[{"type":"Identifier","name":"target"},{"type":"Identifier","name":"key"},{"type":"Identifier","name":"descriptor"}]}}]},"parenthesizedExpression":true}}]},"helper-define-property":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"obj"},{"type":"Identifier","name":"key"},{"type":"Identifier","name":"value"}],"body":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"key","leadingComments":null},"operator":"in","right":{"type":"Identifier","name":"obj"},"leadingComments":null},"consequent":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"defineProperty"},"computed":false},"arguments":[{"type":"Identifier","name":"obj"},{"type":"Identifier","name":"key"},{"type":"ObjectExpression","properties":[{"type":"Property","method":false,"shorthand":false,"computed":false,"key":{"type":"Identifier","name":"value"},"value":{"type":"Identifier","name":"value"},"kind":"init"},{"type":"Property","method":false,"shorthand":false,"computed":false,"key":{"type":"Identifier","name":"enumerable"},"value":{"type":"Literal","value":true},"kind":"init"},{"type":"Property","method":false,"shorthand":false,"computed":false,"key":{"type":"Identifier","name":"configurable"},"value":{"type":"Literal","value":true},"kind":"init"},{"type":"Property","method":false,"shorthand":false,"computed":false,"key":{"type":"Identifier","name":"writable"},"value":{"type":"Literal","value":true},"kind":"init"}]}]}}]},"alternate":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"obj"},"property":{"type":"Identifier","name":"key"},"computed":true},"right":{"type":"Identifier","name":"value"}}}]}},{"type":"ReturnStatement","argument":{"type":"Identifier","name":"obj"}}]},"parenthesizedExpression":true}}]},"helper-extends":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"LogicalExpression","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"assign"},"computed":false},"operator":"||","right":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"target"}],"body":{"type":"BlockStatement","body":[{"type":"ForStatement","init":{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"i"},"init":{"type":"Literal","value":1}}],"kind":"var"},"test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"i"},"operator":"<","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"arguments"},"property":{"type":"Identifier","name":"length"},"computed":false}},"update":{"type":"UpdateExpression","operator":"++","prefix":false,"argument":{"type":"Identifier","name":"i"}},"body":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"source"},"init":{"type":"MemberExpression","object":{"type":"Identifier","name":"arguments"},"property":{"type":"Identifier","name":"i"},"computed":true}}],"kind":"var"},{"type":"ForInStatement","left":{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"key"},"init":null}],"kind":"var"},"right":{"type":"Identifier","name":"source"},"body":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"MemberExpression","object":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"prototype"},"computed":false},"property":{"type":"Identifier","name":"hasOwnProperty"},"computed":false},"property":{"type":"Identifier","name":"call"},"computed":false},"arguments":[{"type":"Identifier","name":"source"},{"type":"Identifier","name":"key"}]},"consequent":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"target"},"property":{"type":"Identifier","name":"key"},"computed":true},"right":{"type":"MemberExpression","object":{"type":"Identifier","name":"source"},"property":{"type":"Identifier","name":"key"},"computed":true}}}]},"alternate":null}]}}]}},{"type":"ReturnStatement","argument":{"type":"Identifier","name":"target"}}]}}}}]},"helper-get":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":{"type":"Identifier","name":"get"},"generator":false,"expression":false,"params":[{"type":"Identifier","name":"object"},{"type":"Identifier","name":"property"},{"type":"Identifier","name":"receiver"}],"body":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"object"},"operator":"===","right":{"type":"Literal","value":null,"rawValue":null}},"consequent":{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"Identifier","name":"object"},"right":{"type":"MemberExpression","object":{"type":"Identifier","name":"Function"},"property":{"type":"Identifier","name":"prototype"},"computed":false}}},"alternate":null},{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"desc"},"init":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"getOwnPropertyDescriptor"},"computed":false},"arguments":[{"type":"Identifier","name":"object"},{"type":"Identifier","name":"property"}]}}],"kind":"var"},{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"desc"},"operator":"===","right":{"type":"Identifier","name":"undefined"}},"consequent":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"parent"},"init":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"getPrototypeOf"},"computed":false},"arguments":[{"type":"Identifier","name":"object"}]}}],"kind":"var"},{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"parent"},"operator":"===","right":{"type":"Literal","value":null,"rawValue":null}},"consequent":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"Identifier","name":"undefined"}}]},"alternate":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"CallExpression","callee":{"type":"Identifier","name":"get"},"arguments":[{"type":"Identifier","name":"parent"},{"type":"Identifier","name":"property"},{"type":"Identifier","name":"receiver"}]}}]}}]},"alternate":{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"Literal","value":"value"},"operator":"in","right":{"type":"Identifier","name":"desc"}},"consequent":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"MemberExpression","object":{"type":"Identifier","name":"desc"},"property":{"type":"Identifier","name":"value"},"computed":false}}]},"alternate":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"getter"},"init":{"type":"MemberExpression","object":{"type":"Identifier","name":"desc"},"property":{"type":"Identifier","name":"get"},"computed":false}}],"kind":"var"},{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"getter"},"operator":"===","right":{"type":"Identifier","name":"undefined"}},"consequent":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"Identifier","name":"undefined"}}]},"alternate":null},{"type":"ReturnStatement","argument":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"getter"},"property":{"type":"Identifier","name":"call"},"computed":false},"arguments":[{"type":"Identifier","name":"receiver"}]}}]}}}]},"parenthesizedExpression":true}}]},"helper-has-own":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"MemberExpression","object":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"prototype"},"computed":false},"property":{"type":"Identifier","name":"hasOwnProperty"},"computed":false}}]},"helper-inherits":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"subClass"},{"type":"Identifier","name":"superClass"}],"body":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"LogicalExpression","left":{"type":"BinaryExpression","left":{"type":"UnaryExpression","operator":"typeof","prefix":true,"argument":{"type":"Identifier","name":"superClass"}},"operator":"!==","right":{"type":"Literal","value":"function"}},"operator":"&&","right":{"type":"BinaryExpression","left":{"type":"Identifier","name":"superClass"},"operator":"!==","right":{"type":"Literal","value":null,"rawValue":null}}},"consequent":{"type":"BlockStatement","body":[{"type":"ThrowStatement","argument":{"type":"NewExpression","callee":{"type":"Identifier","name":"TypeError"},"arguments":[{"type":"BinaryExpression","left":{"type":"Literal","value":"Super expression must either be null or a function, not "},"operator":"+","right":{"type":"UnaryExpression","operator":"typeof","prefix":true,"argument":{"type":"Identifier","name":"superClass"}}}]}}]},"alternate":null},{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"subClass"},"property":{"type":"Identifier","name":"prototype"},"computed":false},"right":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"create"},"computed":false},"arguments":[{"type":"LogicalExpression","left":{"type":"Identifier","name":"superClass"},"operator":"&&","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"superClass"},"property":{"type":"Identifier","name":"prototype"},"computed":false}},{"type":"ObjectExpression","properties":[{"type":"Property","method":false,"shorthand":false,"computed":false,"key":{"type":"Identifier","name":"constructor"},"value":{"type":"ObjectExpression","properties":[{"type":"Property","method":false,"shorthand":false,"computed":false,"key":{"type":"Identifier","name":"value"},"value":{"type":"Identifier","name":"subClass"},"kind":"init"},{"type":"Property","method":false,"shorthand":false,"computed":false,"key":{"type":"Identifier","name":"enumerable"},"value":{"type":"Literal","value":false},"kind":"init"},{"type":"Property","method":false,"shorthand":false,"computed":false,"key":{"type":"Identifier","name":"writable"},"value":{"type":"Literal","value":true},"kind":"init"},{"type":"Property","method":false,"shorthand":false,"computed":false,"key":{"type":"Identifier","name":"configurable"},"value":{"type":"Literal","value":true},"kind":"init"}]},"kind":"init"}]}]}}},{"type":"IfStatement","test":{"type":"Identifier","name":"superClass"},"consequent":{"type":"ExpressionStatement","expression":{"type":"ConditionalExpression","test":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"setPrototypeOf"},"computed":false},"consequent":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"setPrototypeOf"},"computed":false},"arguments":[{"type":"Identifier","name":"subClass"},{"type":"Identifier","name":"superClass"}]},"alternate":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"subClass"},"property":{"type":"Identifier","name":"__proto__"},"computed":false},"right":{"type":"Identifier","name":"superClass"}}}},"alternate":null}]},"parenthesizedExpression":true}}]},"helper-instanceof":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"left"},{"type":"Identifier","name":"right"}],"body":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"LogicalExpression","left":{"type":"BinaryExpression","left":{"type":"Identifier","name":"right"},"operator":"!=","right":{"type":"Literal","value":null,"rawValue":null}},"operator":"&&","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"right"},"property":{"type":"MemberExpression","object":{"type":"Identifier","name":"Symbol"},"property":{"type":"Identifier","name":"hasInstance"},"computed":false},"computed":true}},"consequent":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"right"},"property":{"type":"MemberExpression","object":{"type":"Identifier","name":"Symbol"},"property":{"type":"Identifier","name":"hasInstance"},"computed":false},"computed":true},"arguments":[{"type":"Identifier","name":"left"}]}}]},"alternate":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"BinaryExpression","left":{"type":"Identifier","name":"left"},"operator":"instanceof","right":{"type":"Identifier","name":"right"}}}]}}]},"parenthesizedExpression":true}}]},"helper-interop-export-wildcard":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"obj"},{"type":"Identifier","name":"defaults"}],"body":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"newObj"},"init":{"type":"CallExpression","callee":{"type":"Identifier","name":"defaults"},"arguments":[{"type":"ObjectExpression","properties":[]},{"type":"Identifier","name":"obj"}]}}],"kind":"var"},{"type":"ExpressionStatement","expression":{"type":"UnaryExpression","operator":"delete","prefix":true,"argument":{"type":"MemberExpression","object":{"type":"Identifier","name":"newObj"},"property":{"type":"Literal","value":"default"},"computed":true}}},{"type":"ReturnStatement","argument":{"type":"Identifier","name":"newObj"}}]},"parenthesizedExpression":true}}]},"helper-interop-require-default":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"obj"}],"body":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"ConditionalExpression","test":{"type":"LogicalExpression","left":{"type":"Identifier","name":"obj"},"operator":"&&","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"obj"},"property":{"type":"Identifier","name":"__esModule"},"computed":false}},"consequent":{"type":"Identifier","name":"obj"},"alternate":{"type":"ObjectExpression","properties":[{"type":"Property","method":false,"shorthand":false,"computed":false,"key":{"type":"Literal","value":"default"},"value":{"type":"Identifier","name":"obj"},"kind":"init"}]}}}]},"parenthesizedExpression":true}}]},"helper-interop-require-wildcard":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"obj"}],"body":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"LogicalExpression","left":{"type":"Identifier","name":"obj"},"operator":"&&","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"obj"},"property":{"type":"Identifier","name":"__esModule"},"computed":false}},"consequent":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"Identifier","name":"obj"}}]},"alternate":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"newObj"},"init":{"type":"ObjectExpression","properties":[]}}],"kind":"var"},{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"obj"},"operator":"!=","right":{"type":"Literal","value":null,"rawValue":null}},"consequent":{"type":"BlockStatement","body":[{"type":"ForInStatement","left":{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"key"},"init":null}],"kind":"var"},"right":{"type":"Identifier","name":"obj"},"body":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"MemberExpression","object":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"prototype"},"computed":false},"property":{"type":"Identifier","name":"hasOwnProperty"},"computed":false},"property":{"type":"Identifier","name":"call"},"computed":false},"arguments":[{"type":"Identifier","name":"obj"},{"type":"Identifier","name":"key"}]},"consequent":{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"newObj"},"property":{"type":"Identifier","name":"key"},"computed":true},"right":{"type":"MemberExpression","object":{"type":"Identifier","name":"obj"},"property":{"type":"Identifier","name":"key"},"computed":true}}},"alternate":null}]}}]},"alternate":null},{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"newObj"},"property":{"type":"Literal","value":"default"},"computed":true},"right":{"type":"Identifier","name":"obj"}}},{"type":"ReturnStatement","argument":{"type":"Identifier","name":"newObj"}}]}}]},"parenthesizedExpression":true}}]},"helper-interop-require":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"obj"}],"body":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"ConditionalExpression","test":{"type":"LogicalExpression","left":{"type":"Identifier","name":"obj"},"operator":"&&","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"obj"},"property":{"type":"Identifier","name":"__esModule"},"computed":false}},"consequent":{"type":"MemberExpression","object":{"type":"Identifier","name":"obj"},"property":{"type":"Literal","value":"default"},"computed":true},"alternate":{"type":"Identifier","name":"obj"}}}]},"parenthesizedExpression":true}}]},"helper-new-arrow-check":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"innerThis"},{"type":"Identifier","name":"boundThis"}],"body":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"innerThis"},"operator":"!==","right":{"type":"Identifier","name":"boundThis"}},"consequent":{"type":"BlockStatement","body":[{"type":"ThrowStatement","argument":{"type":"NewExpression","callee":{"type":"Identifier","name":"TypeError"},"arguments":[{"type":"Literal","value":"Cannot instantiate an arrow function"}]}}]},"alternate":null}]},"parenthesizedExpression":true}}]},"helper-object-destructuring-empty":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"obj"}],"body":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"obj"},"operator":"==","right":{"type":"Literal","value":null,"rawValue":null}},"consequent":{"type":"ThrowStatement","argument":{"type":"NewExpression","callee":{"type":"Identifier","name":"TypeError"},"arguments":[{"type":"Literal","value":"Cannot destructure undefined"}]}},"alternate":null}]},"parenthesizedExpression":true}}]},"helper-object-without-properties":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"obj"},{"type":"Identifier","name":"keys"}],"body":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"target"},"init":{"type":"ObjectExpression","properties":[]}}],"kind":"var"},{"type":"ForInStatement","left":{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"i"},"init":null}],"kind":"var"},"right":{"type":"Identifier","name":"obj"},"body":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"keys"},"property":{"type":"Identifier","name":"indexOf"},"computed":false},"arguments":[{"type":"Identifier","name":"i"}]},"operator":">=","right":{"type":"Literal","value":0}},"consequent":{"type":"ContinueStatement","label":null},"alternate":null},{"type":"IfStatement","test":{"type":"UnaryExpression","operator":"!","prefix":true,"argument":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"MemberExpression","object":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"prototype"},"computed":false},"property":{"type":"Identifier","name":"hasOwnProperty"},"computed":false},"property":{"type":"Identifier","name":"call"},"computed":false},"arguments":[{"type":"Identifier","name":"obj"},{"type":"Identifier","name":"i"}]}},"consequent":{"type":"ContinueStatement","label":null},"alternate":null},{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"target"},"property":{"type":"Identifier","name":"i"},"computed":true},"right":{"type":"MemberExpression","object":{"type":"Identifier","name":"obj"},"property":{"type":"Identifier","name":"i"},"computed":true}}}]}},{"type":"ReturnStatement","argument":{"type":"Identifier","name":"target"}}]},"parenthesizedExpression":true}}]},"helper-self-global":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"ConditionalExpression","test":{"type":"BinaryExpression","left":{"type":"UnaryExpression","operator":"typeof","prefix":true,"argument":{"type":"Identifier","name":"global"}},"operator":"===","right":{"type":"Literal","value":"undefined"}},"consequent":{"type":"Identifier","name":"self"},"alternate":{"type":"Identifier","name":"global"}}}]},"helper-set":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":{"type":"Identifier","name":"set"},"generator":false,"expression":false,"params":[{"type":"Identifier","name":"object"},{"type":"Identifier","name":"property"},{"type":"Identifier","name":"value"},{"type":"Identifier","name":"receiver"}],"body":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"desc"},"init":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"getOwnPropertyDescriptor"},"computed":false},"arguments":[{"type":"Identifier","name":"object"},{"type":"Identifier","name":"property"}]}}],"kind":"var"},{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"desc"},"operator":"===","right":{"type":"Identifier","name":"undefined"}},"consequent":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"parent"},"init":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"getPrototypeOf"},"computed":false},"arguments":[{"type":"Identifier","name":"object"}]}}],"kind":"var"},{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"parent"},"operator":"!==","right":{"type":"Literal","value":null,"rawValue":null}},"consequent":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"Identifier","name":"set"},"arguments":[{"type":"Identifier","name":"parent"},{"type":"Identifier","name":"property"},{"type":"Identifier","name":"value"},{"type":"Identifier","name":"receiver"}]}}]},"alternate":null}]},"alternate":{"type":"IfStatement","test":{"type":"LogicalExpression","left":{"type":"BinaryExpression","left":{"type":"Literal","value":"value"},"operator":"in","right":{"type":"Identifier","name":"desc"}},"operator":"&&","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"desc"},"property":{"type":"Identifier","name":"writable"},"computed":false}},"consequent":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"desc"},"property":{"type":"Identifier","name":"value"},"computed":false},"right":{"type":"Identifier","name":"value"}}}]},"alternate":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"setter"},"init":{"type":"MemberExpression","object":{"type":"Identifier","name":"desc"},"property":{"type":"Identifier","name":"set"},"computed":false}}],"kind":"var"},{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"setter"},"operator":"!==","right":{"type":"Identifier","name":"undefined"}},"consequent":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"setter"},"property":{"type":"Identifier","name":"call"},"computed":false},"arguments":[{"type":"Identifier","name":"receiver"},{"type":"Identifier","name":"value"}]}}]},"alternate":null}]}}},{"type":"ReturnStatement","argument":{"type":"Identifier","name":"value"}}]},"parenthesizedExpression":true}}]},"helper-slice":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"MemberExpression","object":{"type":"MemberExpression","object":{"type":"Identifier","name":"Array"},"property":{"type":"Identifier","name":"prototype"},"computed":false},"property":{"type":"Identifier","name":"slice"},"computed":false}}]},"helper-sliced-to-array-loose":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"arr"},{"type":"Identifier","name":"i"}],"body":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Array"},"property":{"type":"Identifier","name":"isArray"},"computed":false},"arguments":[{"type":"Identifier","name":"arr"}]},"consequent":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"Identifier","name":"arr"}}]},"alternate":{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"Symbol"},"property":{"type":"Identifier","name":"iterator"},"computed":false},"operator":"in","right":{"type":"CallExpression","callee":{"type":"Identifier","name":"Object"},"arguments":[{"type":"Identifier","name":"arr"}]}},"consequent":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"_arr"},"init":{"type":"ArrayExpression","elements":[]}}],"kind":"var"},{"type":"ForStatement","init":{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"_iterator"},"init":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"arr"},"property":{"type":"MemberExpression","object":{"type":"Identifier","name":"Symbol"},"property":{"type":"Identifier","name":"iterator"},"computed":false},"computed":true},"arguments":[]}},{"type":"VariableDeclarator","id":{"type":"Identifier","name":"_step"},"init":null}],"kind":"var"},"test":{"type":"UnaryExpression","operator":"!","prefix":true,"argument":{"type":"MemberExpression","object":{"type":"AssignmentExpression","operator":"=","left":{"type":"Identifier","name":"_step"},"right":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"_iterator"},"property":{"type":"Identifier","name":"next"},"computed":false},"arguments":[]},"parenthesizedExpression":true},"property":{"type":"Identifier","name":"done"},"computed":false}},"update":null,"body":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"_arr"},"property":{"type":"Identifier","name":"push"},"computed":false},"arguments":[{"type":"MemberExpression","object":{"type":"Identifier","name":"_step"},"property":{"type":"Identifier","name":"value"},"computed":false}]}},{"type":"IfStatement","test":{"type":"LogicalExpression","left":{"type":"Identifier","name":"i"},"operator":"&&","right":{"type":"BinaryExpression","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"_arr"},"property":{"type":"Identifier","name":"length"},"computed":false},"operator":"===","right":{"type":"Identifier","name":"i"}}},"consequent":{"type":"BreakStatement","label":null},"alternate":null}]}},{"type":"ReturnStatement","argument":{"type":"Identifier","name":"_arr"}}]},"alternate":{"type":"BlockStatement","body":[{"type":"ThrowStatement","argument":{"type":"NewExpression","callee":{"type":"Identifier","name":"TypeError"},"arguments":[{"type":"Literal","value":"Invalid attempt to destructure non-iterable instance"}]}}]}}}]},"parenthesizedExpression":true}}]},"helper-sliced-to-array":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[],"body":{"type":"BlockStatement","body":[{"type":"FunctionDeclaration","id":{"type":"Identifier","name":"sliceIterator","leadingComments":null},"generator":false,"expression":false,"params":[{"type":"Identifier","name":"arr"},{"type":"Identifier","name":"i"}],"body":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"_arr","leadingComments":null},"init":{"type":"ArrayExpression","elements":[]},"leadingComments":null}],"kind":"var"},{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"_n"},"init":{"type":"Literal","value":true}}],"kind":"var"},{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"_d"},"init":{"type":"Literal","value":false}}],"kind":"var"},{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"_e"},"init":{"type":"Identifier","name":"undefined"}}],"kind":"var"},{"type":"TryStatement","block":{"type":"BlockStatement","body":[{"type":"ForStatement","init":{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"_i"},"init":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"arr"},"property":{"type":"MemberExpression","object":{"type":"Identifier","name":"Symbol"},"property":{"type":"Identifier","name":"iterator"},"computed":false},"computed":true},"arguments":[]}},{"type":"VariableDeclarator","id":{"type":"Identifier","name":"_s"},"init":null}],"kind":"var"},"test":{"type":"UnaryExpression","operator":"!","prefix":true,"argument":{"type":"AssignmentExpression","operator":"=","left":{"type":"Identifier","name":"_n"},"right":{"type":"MemberExpression","object":{"type":"AssignmentExpression","operator":"=","left":{"type":"Identifier","name":"_s"},"right":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"_i"},"property":{"type":"Identifier","name":"next"},"computed":false},"arguments":[]},"parenthesizedExpression":true},"property":{"type":"Identifier","name":"done"},"computed":false},"parenthesizedExpression":true}},"update":{"type":"AssignmentExpression","operator":"=","left":{"type":"Identifier","name":"_n"},"right":{"type":"Literal","value":true}},"body":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"_arr"},"property":{"type":"Identifier","name":"push"},"computed":false},"arguments":[{"type":"MemberExpression","object":{"type":"Identifier","name":"_s"},"property":{"type":"Identifier","name":"value"},"computed":false}]}},{"type":"IfStatement","test":{"type":"LogicalExpression","left":{"type":"Identifier","name":"i"},"operator":"&&","right":{"type":"BinaryExpression","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"_arr"},"property":{"type":"Identifier","name":"length"},"computed":false},"operator":"===","right":{"type":"Identifier","name":"i"}}},"consequent":{"type":"BreakStatement","label":null},"alternate":null}]}}]},"handler":{"type":"CatchClause","param":{"type":"Identifier","name":"err"},"body":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"Identifier","name":"_d"},"right":{"type":"Literal","value":true}}},{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"Identifier","name":"_e"},"right":{"type":"Identifier","name":"err"}}}]}},"guardedHandlers":[],"finalizer":{"type":"BlockStatement","body":[{"type":"TryStatement","block":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"LogicalExpression","left":{"type":"UnaryExpression","operator":"!","prefix":true,"argument":{"type":"Identifier","name":"_n"}},"operator":"&&","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"_i"},"property":{"type":"Literal","value":"return"},"computed":true}},"consequent":{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"_i"},"property":{"type":"Literal","value":"return"},"computed":true},"arguments":[]}},"alternate":null}]},"handler":null,"guardedHandlers":[],"finalizer":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"Identifier","name":"_d"},"consequent":{"type":"ThrowStatement","argument":{"type":"Identifier","name":"_e"}},"alternate":null}]}}]}},{"type":"ReturnStatement","argument":{"type":"Identifier","name":"_arr"}}]}},{"type":"ReturnStatement","argument":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"arr"},{"type":"Identifier","name":"i"}],"body":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Array"},"property":{"type":"Identifier","name":"isArray"},"computed":false},"arguments":[{"type":"Identifier","name":"arr"}]},"consequent":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"Identifier","name":"arr"}}]},"alternate":{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"Symbol"},"property":{"type":"Identifier","name":"iterator"},"computed":false},"operator":"in","right":{"type":"CallExpression","callee":{"type":"Identifier","name":"Object"},"arguments":[{"type":"Identifier","name":"arr"}]}},"consequent":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"CallExpression","callee":{"type":"Identifier","name":"sliceIterator"},"arguments":[{"type":"Identifier","name":"arr"},{"type":"Identifier","name":"i"}]}}]},"alternate":{"type":"BlockStatement","body":[{"type":"ThrowStatement","argument":{"type":"NewExpression","callee":{"type":"Identifier","name":"TypeError"},"arguments":[{"type":"Literal","value":"Invalid attempt to destructure non-iterable instance"}]}}]}}}]}}}]},"parenthesizedExpression":true},"arguments":[]}}]},"helper-tagged-template-literal-loose":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"strings"},{"type":"Identifier","name":"raw"}],"body":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"strings"},"property":{"type":"Identifier","name":"raw"},"computed":false},"right":{"type":"Identifier","name":"raw"}}},{"type":"ReturnStatement","argument":{"type":"Identifier","name":"strings"}}]},"parenthesizedExpression":true}}]},"helper-tagged-template-literal":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"strings"},{"type":"Identifier","name":"raw"}],"body":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"freeze"},"computed":false},"arguments":[{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"defineProperties"},"computed":false},"arguments":[{"type":"Identifier","name":"strings"},{"type":"ObjectExpression","properties":[{"type":"Property","method":false,"shorthand":false,"computed":false,"key":{"type":"Identifier","name":"raw"},"value":{"type":"ObjectExpression","properties":[{"type":"Property","method":false,"shorthand":false,"computed":false,"key":{"type":"Identifier","name":"value"},"value":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Object"},"property":{"type":"Identifier","name":"freeze"},"computed":false},"arguments":[{"type":"Identifier","name":"raw"}]},"kind":"init"}]},"kind":"init"}]}]}]}}]},"parenthesizedExpression":true}}]},"helper-temporal-assert-defined":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"val"},{"type":"Identifier","name":"name"},{"type":"Identifier","name":"undef"}],"body":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"val"},"operator":"===","right":{"type":"Identifier","name":"undef"}},"consequent":{"type":"BlockStatement","body":[{"type":"ThrowStatement","argument":{"type":"NewExpression","callee":{"type":"Identifier","name":"ReferenceError"},"arguments":[{"type":"BinaryExpression","left":{"type":"Identifier","name":"name"},"operator":"+","right":{"type":"Literal","value":" is not defined - temporal dead zone"}}]}}]},"alternate":null},{"type":"ReturnStatement","argument":{"type":"Literal","value":true}}]},"parenthesizedExpression":true}}]},"helper-temporal-undefined":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"ObjectExpression","properties":[],"parenthesizedExpression":true}}]},"helper-to-array":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"arr"}],"body":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"ConditionalExpression","test":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Array"},"property":{"type":"Identifier","name":"isArray"},"computed":false},"arguments":[{"type":"Identifier","name":"arr"}]},"consequent":{"type":"Identifier","name":"arr"},"alternate":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Array"},"property":{"type":"Identifier","name":"from"},"computed":false},"arguments":[{"type":"Identifier","name":"arr"}]}}}]},"parenthesizedExpression":true}}]},"helper-to-consumable-array":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"arr"}],"body":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Array"},"property":{"type":"Identifier","name":"isArray"},"computed":false},"arguments":[{"type":"Identifier","name":"arr"}]},"consequent":{"type":"BlockStatement","body":[{"type":"ForStatement","init":{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"i"},"init":{"type":"Literal","value":0}},{"type":"VariableDeclarator","id":{"type":"Identifier","name":"arr2"},"init":{"type":"CallExpression","callee":{"type":"Identifier","name":"Array"},"arguments":[{"type":"MemberExpression","object":{"type":"Identifier","name":"arr"},"property":{"type":"Identifier","name":"length"},"computed":false}]}}],"kind":"var"},"test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"i"},"operator":"<","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"arr"},"property":{"type":"Identifier","name":"length"},"computed":false}},"update":{"type":"UpdateExpression","operator":"++","prefix":false,"argument":{"type":"Identifier","name":"i"}},"body":{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"arr2"},"property":{"type":"Identifier","name":"i"},"computed":true},"right":{"type":"MemberExpression","object":{"type":"Identifier","name":"arr"},"property":{"type":"Identifier","name":"i"},"computed":true}}}},{"type":"ReturnStatement","argument":{"type":"Identifier","name":"arr2"}}]},"alternate":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Array"},"property":{"type":"Identifier","name":"from"},"computed":false},"arguments":[{"type":"Identifier","name":"arr"}]}}]}}]},"parenthesizedExpression":true}}]},"helper-typeof-react-element":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"LogicalExpression","left":{"type":"LogicalExpression","left":{"type":"LogicalExpression","left":{"type":"BinaryExpression","left":{"type":"UnaryExpression","operator":"typeof","prefix":true,"argument":{"type":"Identifier","name":"Symbol"}},"operator":"===","right":{"type":"Literal","value":"function"}},"operator":"&&","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"Symbol"},"property":{"type":"Literal","value":"for"},"computed":true}},"operator":"&&","right":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"Symbol"},"property":{"type":"Literal","value":"for"},"computed":true},"arguments":[{"type":"Literal","value":"react.element"}]}},"operator":"||","right":{"type":"Literal","value":60103}}}]},"helper-typeof":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"obj"}],"body":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"ConditionalExpression","test":{"type":"LogicalExpression","left":{"type":"Identifier","name":"obj"},"operator":"&&","right":{"type":"BinaryExpression","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"obj"},"property":{"type":"Identifier","name":"constructor"},"computed":false},"operator":"===","right":{"type":"Identifier","name":"Symbol"}}},"consequent":{"type":"Literal","value":"symbol"},"alternate":{"type":"UnaryExpression","operator":"typeof","prefix":true,"argument":{"type":"Identifier","name":"obj"}}}}]},"parenthesizedExpression":true}}]},"let-scoping-return":{"type":"Program","body":[{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"UnaryExpression","operator":"typeof","prefix":true,"argument":{"type":"Identifier","name":"RETURN"}},"operator":"===","right":{"type":"Literal","value":"object"}},"consequent":{"type":"ReturnStatement","argument":{"type":"MemberExpression","object":{"type":"Identifier","name":"RETURN"},"property":{"type":"Identifier","name":"v"},"computed":false}},"alternate":null}]},"named-function":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[],"body":{"type":"BlockStatement","body":[{"type":"FunctionDeclaration","id":{"type":"Identifier","name":"GET_OUTER_ID"},"generator":false,"expression":false,"params":[],"body":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"Identifier","name":"FUNCTION_ID"}}]}},{"type":"ReturnStatement","argument":{"type":"Identifier","name":"FUNCTION"}}]},"parenthesizedExpression":true},"arguments":[]}}]},"property-method-assignment-wrapper-generator":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"FUNCTION_KEY"}],"body":{"type":"BlockStatement","body":[{"type":"FunctionDeclaration","id":{"type":"Identifier","name":"FUNCTION_ID"},"generator":true,"expression":false,"params":[],"body":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"YieldExpression","delegate":true,"argument":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"FUNCTION_KEY"},"property":{"type":"Identifier","name":"apply"},"computed":false},"arguments":[{"type":"ThisExpression"},{"type":"Identifier","name":"arguments"}]}}}]}},{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"FUNCTION_ID"},"property":{"type":"Identifier","name":"toString"},"computed":false},"right":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[],"body":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"FUNCTION_KEY"},"property":{"type":"Identifier","name":"toString"},"computed":false},"arguments":[]}}]}}}},{"type":"ReturnStatement","argument":{"type":"Identifier","name":"FUNCTION_ID"}}]},"parenthesizedExpression":true},"arguments":[{"type":"Identifier","name":"FUNCTION"}]}}]},"property-method-assignment-wrapper":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"FUNCTION_KEY"}],"body":{"type":"BlockStatement","body":[{"type":"FunctionDeclaration","id":{"type":"Identifier","name":"FUNCTION_ID"},"generator":false,"expression":false,"params":[],"body":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"FUNCTION_KEY"},"property":{"type":"Identifier","name":"apply"},"computed":false},"arguments":[{"type":"ThisExpression"},{"type":"Identifier","name":"arguments"}]}}]}},{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"FUNCTION_ID"},"property":{"type":"Identifier","name":"toString"},"computed":false},"right":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[],"body":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"FUNCTION_KEY"},"property":{"type":"Identifier","name":"toString"},"computed":false},"arguments":[]}}]}}}},{"type":"ReturnStatement","argument":{"type":"Identifier","name":"FUNCTION_ID"}}]},"parenthesizedExpression":true},"arguments":[{"type":"Identifier","name":"FUNCTION"}]}}]},"prototype-identifier":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"MemberExpression","object":{"type":"Identifier","name":"CLASS_NAME"},"property":{"type":"Identifier","name":"prototype"},"computed":false}}]},"require-assign-key":{"type":"Program","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"VARIABLE_NAME"},"init":{"type":"MemberExpression","object":{"type":"CallExpression","callee":{"type":"Identifier","name":"require"},"arguments":[{"type":"Identifier","name":"MODULE_NAME"}]},"property":{"type":"Identifier","name":"KEY"},"computed":false}}],"kind":"var"}]},"require":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"Identifier","name":"require"},"arguments":[{"type":"Identifier","name":"MODULE_NAME"}]}}]},"rest":{"type":"Program","body":[{"type":"ForStatement","init":{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"LEN"},"init":{"type":"MemberExpression","object":{"type":"Identifier","name":"ARGUMENTS"},"property":{"type":"Identifier","name":"length"},"computed":false}},{"type":"VariableDeclarator","id":{"type":"Identifier","name":"ARRAY"},"init":{"type":"CallExpression","callee":{"type":"Identifier","name":"Array"},"arguments":[{"type":"Identifier","name":"ARRAY_LEN"}]}},{"type":"VariableDeclarator","id":{"type":"Identifier","name":"KEY"},"init":{"type":"Identifier","name":"START"}}],"kind":"var"},"test":{"type":"BinaryExpression","left":{"type":"Identifier","name":"KEY"},"operator":"<","right":{"type":"Identifier","name":"LEN"}},"update":{"type":"UpdateExpression","operator":"++","prefix":false,"argument":{"type":"Identifier","name":"KEY"}},"body":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"ARRAY"},"property":{"type":"Identifier","name":"ARRAY_KEY"},"computed":true},"right":{"type":"MemberExpression","object":{"type":"Identifier","name":"ARGUMENTS"},"property":{"type":"Identifier","name":"KEY"},"computed":true}}}]}}]},"self-contained-helpers-head":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"exports"},"property":{"type":"Literal","value":"default"},"computed":true},"right":{"type":"Identifier","name":"HELPER"}}},{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"exports"},"property":{"type":"Identifier","name":"__esModule"},"computed":false},"right":{"type":"Literal","value":true}}}]},"system":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"System"},"property":{"type":"Identifier","name":"register"},"computed":false},"arguments":[{"type":"Identifier","name":"MODULE_NAME"},{"type":"Identifier","name":"MODULE_DEPENDENCIES"},{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"EXPORT_IDENTIFIER"}],"body":{"type":"BlockStatement","body":[{"type":"ReturnStatement","argument":{"type":"ObjectExpression","properties":[{"type":"Property","method":false,"shorthand":false,"computed":false,"key":{"type":"Identifier","name":"setters"},"value":{"type":"Identifier","name":"SETTERS"},"kind":"init"},{"type":"Property","method":false,"shorthand":false,"computed":false,"key":{"type":"Identifier","name":"execute"},"value":{"type":"Identifier","name":"EXECUTE"},"kind":"init"}]}}]}}]}}]},"tail-call-body":{"type":"Program","body":[{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"AGAIN_ID"},"init":{"type":"Literal","value":true}}],"kind":"var"},{"type":"LabeledStatement","body":{"type":"WhileStatement","test":{"type":"Identifier","name":"AGAIN_ID"},"body":{"type":"ExpressionStatement","expression":{"type":"Identifier","name":"BLOCK"}}},"label":{"type":"Identifier","name":"FUNCTION_ID"}}]}]},"test-exports":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"BinaryExpression","left":{"type":"UnaryExpression","operator":"typeof","prefix":true,"argument":{"type":"Identifier","name":"exports"}},"operator":"!==","right":{"type":"Literal","value":"undefined"}}}]},"test-module":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"BinaryExpression","left":{"type":"UnaryExpression","operator":"typeof","prefix":true,"argument":{"type":"Identifier","name":"module"}},"operator":"!==","right":{"type":"Literal","value":"undefined"}}}]},"umd-commonjs-strict":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"root"},{"type":"Identifier","name":"factory"}],"body":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"LogicalExpression","left":{"type":"BinaryExpression","left":{"type":"UnaryExpression","operator":"typeof","prefix":true,"argument":{"type":"Identifier","name":"define"}},"operator":"===","right":{"type":"Literal","value":"function"}},"operator":"&&","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"define"},"property":{"type":"Identifier","name":"amd"},"computed":false}},"consequent":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"Identifier","name":"define"},"arguments":[{"type":"Identifier","name":"AMD_ARGUMENTS"},{"type":"Identifier","name":"factory"}]}}]},"alternate":{"type":"IfStatement","test":{"type":"BinaryExpression","left":{"type":"UnaryExpression","operator":"typeof","prefix":true,"argument":{"type":"Identifier","name":"exports"}},"operator":"===","right":{"type":"Literal","value":"object"}},"consequent":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"Identifier","name":"factory"},"arguments":[{"type":"Identifier","name":"COMMON_ARGUMENTS"}]}}]},"alternate":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"Identifier","name":"factory"},"arguments":[{"type":"Identifier","name":"BROWSER_ARGUMENTS"}]}}]}}}]},"parenthesizedExpression":true},"arguments":[{"type":"Identifier","name":"UMD_ROOT"},{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"FACTORY_PARAMETERS"}],"body":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"Identifier","name":"FACTORY_BODY"}}]}}]}}]},"umd-runner-body":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"FunctionExpression","id":null,"generator":false,"expression":false,"params":[{"type":"Identifier","name":"global"},{"type":"Identifier","name":"factory"}],"body":{"type":"BlockStatement","body":[{"type":"IfStatement","test":{"type":"LogicalExpression","left":{"type":"BinaryExpression","left":{"type":"UnaryExpression","operator":"typeof","prefix":true,"argument":{"type":"Identifier","name":"define"}},"operator":"===","right":{"type":"Literal","value":"function"}},"operator":"&&","right":{"type":"MemberExpression","object":{"type":"Identifier","name":"define"},"property":{"type":"Identifier","name":"amd"},"computed":false}},"consequent":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"Identifier","name":"define"},"arguments":[{"type":"Identifier","name":"AMD_ARGUMENTS"},{"type":"Identifier","name":"factory"}]}}]},"alternate":{"type":"IfStatement","test":{"type":"Identifier","name":"COMMON_TEST"},"consequent":{"type":"BlockStatement","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"Identifier","name":"factory"},"arguments":[{"type":"Identifier","name":"COMMON_ARGUMENTS"}]}}]},"alternate":{"type":"BlockStatement","body":[{"type":"VariableDeclaration","declarations":[{"type":"VariableDeclarator","id":{"type":"Identifier","name":"mod"},"init":{"type":"ObjectExpression","properties":[{"type":"Property","method":false,"shorthand":false,"computed":false,"key":{"type":"Identifier","name":"exports"},"value":{"type":"ObjectExpression","properties":[]},"kind":"init"}]}}],"kind":"var"},{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"Identifier","name":"factory"},"arguments":[{"type":"MemberExpression","object":{"type":"Identifier","name":"mod"},"property":{"type":"Identifier","name":"exports"},"computed":false},{"type":"Identifier","name":"BROWSER_ARGUMENTS"}]}},{"type":"ExpressionStatement","expression":{"type":"AssignmentExpression","operator":"=","left":{"type":"MemberExpression","object":{"type":"Identifier","name":"global"},"property":{"type":"Identifier","name":"GLOBAL_ARG"},"computed":false},"right":{"type":"MemberExpression","object":{"type":"Identifier","name":"mod"},"property":{"type":"Identifier","name":"exports"},"computed":false}}}]}}}]},"parenthesizedExpression":true}}]}}
+},{}],612:[function(_dereq_,module,exports){
+"use strict";
+
+exports.__esModule = true;
+exports.parse = parse;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+var _parser = _dereq_(616);
+
+var _parser2 = _interopRequireDefault(_parser);
+
+_dereq_(621);
+
+_dereq_(620);
+
+_dereq_(618);
+
+_dereq_(615);
+
+_dereq_(619);
+
+_dereq_(617);
+
+_dereq_(614);
+
+var _tokenizerTypes = _dereq_(628);
+
+_dereq_(626);
+
+_dereq_(625);
+
+var _pluginsFlow = _dereq_(622);
+
+var _pluginsFlow2 = _interopRequireDefault(_pluginsFlow);
+
+var _pluginsJsx = _dereq_(623);
+
+var _pluginsJsx2 = _interopRequireDefault(_pluginsJsx);
+
+_parser.plugins.flow = _pluginsFlow2["default"];
+_parser.plugins.jsx = _pluginsJsx2["default"];
+
+function parse(input, options) {
+ return new _parser2["default"](options, input).parse();
+}
+
+exports.tokTypes = _tokenizerTypes.types;
+},{"614":614,"615":615,"616":616,"617":617,"618":618,"619":619,"620":620,"621":621,"622":622,"623":623,"625":625,"626":626,"628":628}],613:[function(_dereq_,module,exports){
+// A second optional argument can be given to further configure
+// the parser process. These options are recognized:
+
+"use strict";
+
+exports.__esModule = true;
+exports.getOptions = getOptions;
+var defaultOptions = {
+ // Source type ("script" or "module") for different semantics
+ sourceType: "script",
+ // By default, reserved words are not enforced. Disable
+ // `allowReserved` to enforce them. When this option has the
+ // value "never", reserved words and keywords can also not be
+ // used as property names.
+ allowReserved: true,
+ // When enabled, a return at the top level is not considered an
+ // error.
+ allowReturnOutsideFunction: false,
+ // When enabled, import/export statements are not constrained to
+ // appearing at the top of the program.
+ allowImportExportEverywhere: false,
+ plugins: {},
+ // Babel-specific options
+ features: {},
+ strictMode: null
+};
+
+exports.defaultOptions = defaultOptions;
+// Interpret and default an options object
+
+function getOptions(opts) {
+ var options = {};
+ for (var key in defaultOptions) {
+ options[key] = opts && key in opts ? opts[key] : defaultOptions[key];
+ }
+ return options;
+}
+},{}],614:[function(_dereq_,module,exports){
+/**
+ * Based on the comment attachment algorithm used in espree and estraverse.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+"use strict";
+
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+var _index = _dereq_(616);
+
+var _index2 = _interopRequireDefault(_index);
+
+function last(stack) {
+ return stack[stack.length - 1];
+}
+
+var pp = _index2["default"].prototype;
+
+pp.addComment = function (comment) {
+ this.state.trailingComments.push(comment);
+ this.state.leadingComments.push(comment);
+};
+
+pp.processComment = function (node) {
+ if (node.type === "Program" && node.body.length > 0) return;
+
+ var stack = this.state.commentStack;
+
+ var lastChild, trailingComments, i;
+
+ if (this.state.trailingComments.length > 0) {
+ // If the first comment in trailingComments comes after the
+ // current node, then we're good - all comments in the array will
+ // come after the node and so it's safe to add them as official
+ // trailingComments.
+ if (this.state.trailingComments[0].start >= node.end) {
+ trailingComments = this.state.trailingComments;
+ this.state.trailingComments = [];
+ } else {
+ // Otherwise, if the first comment doesn't come after the
+ // current node, that means we have a mix of leading and trailing
+ // comments in the array and that leadingComments contains the
+ // same items as trailingComments. Reset trailingComments to
+ // zero items and we'll handle this by evaluating leadingComments
+ // later.
+ this.state.trailingComments.length = 0;
+ }
+ } else {
+ var lastInStack = last(stack);
+ if (stack.length > 0 && lastInStack.trailingComments && lastInStack.trailingComments[0].start >= node.end) {
+ trailingComments = lastInStack.trailingComments;
+ lastInStack.trailingComments = null;
+ }
+ }
+
+ // Eating the stack.
+ while (stack.length > 0 && last(stack).start >= node.start) {
+ lastChild = stack.pop();
+ }
+
+ if (lastChild) {
+ if (lastChild.leadingComments) {
+ if (lastChild !== node && last(lastChild.leadingComments).end <= node.start) {
+ node.leadingComments = lastChild.leadingComments;
+ lastChild.leadingComments = null;
+ } else {
+ // A leading comment for an anonymous class had been stolen by its first MethodDefinition,
+ // so this takes back the leading comment.
+ // See also: https://github.com/eslint/espree/issues/158
+ for (i = lastChild.leadingComments.length - 2; i >= 0; --i) {
+ if (lastChild.leadingComments[i].end <= node.start) {
+ node.leadingComments = lastChild.leadingComments.splice(0, i + 1);
+ break;
+ }
+ }
+ }
+ }
+ } else if (this.state.leadingComments.length > 0) {
+ if (last(this.state.leadingComments).end <= node.start) {
+ node.leadingComments = this.state.leadingComments;
+ this.state.leadingComments = [];
+ } else {
+ // https://github.com/eslint/espree/issues/2
+ //
+ // In special cases, such as return (without a value) and
+ // debugger, all comments will end up as leadingComments and
+ // will otherwise be eliminated. This step runs when the
+ // commentStack is empty and there are comments left
+ // in leadingComments.
+ //
+ // This loop figures out the stopping point between the actual
+ // leading and trailing comments by finding the location of the
+ // first comment that comes after the given node.
+ for (i = 0; i < this.state.leadingComments.length; i++) {
+ if (this.state.leadingComments[i].end > node.start) {
+ break;
+ }
+ }
+
+ // Split the array based on the location of the first comment
+ // that comes after the node. Keep in mind that this could
+ // result in an empty array, and if so, the array must be
+ // deleted.
+ node.leadingComments = this.state.leadingComments.slice(0, i);
+ if (node.leadingComments.length === 0) {
+ node.leadingComments = null;
+ }
+
+ // Similarly, trailing comments are attached later. The variable
+ // must be reset to null if there are no trailing comments.
+ trailingComments = this.state.leadingComments.slice(i);
+ if (trailingComments.length === 0) {
+ trailingComments = null;
+ }
+ }
+ }
+
+ if (trailingComments) {
+ if (trailingComments.length && trailingComments[0].start >= node.start && last(trailingComments).end <= node.end) {
+ node.innerComments = trailingComments;
+ } else {
+ node.trailingComments = trailingComments;
+ }
+ }
+
+ stack.push(node);
+};
+},{"616":616}],615:[function(_dereq_,module,exports){
+// A recursive descent parser operates by defining functions for all
+// syntactic elements, and recursively calling those, each function
+// advancing the input stream and returning an AST node. Precedence
+// of constructs (for example, the fact that `!x[1]` means `!(x[1])`
+// instead of `(!x)[1]` is handled by the fact that the parser
+// function that parses unary prefix operators is called first, and
+// in turn calls the function that parses `[]` subscripts — that
+// way, it'll receive the node for `x[1]` already parsed, and wraps
+// *that* in the unary operator node.
+//
+// Acorn uses an [operator precedence parser][opp] to handle binary
+// operator precedence, because it is much more compact than using
+// the technique outlined above, which uses different, nesting
+// functions to specify precedence, for all of the ten binary
+// precedence levels that JavaScript defines.
+//
+// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser
+
+"use strict";
+
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+var _tokenizerTypes = _dereq_(628);
+
+var _index = _dereq_(616);
+
+var _index2 = _interopRequireDefault(_index);
+
+var _utilIdentifier = _dereq_(629);
+
+var pp = _index2["default"].prototype;
+
+// Check if property name clashes with already added.
+// Object/class getters and setters are not allowed to clash —
+// either with each other or with an init property — and in
+// strict mode, init properties are also not allowed to be repeated.
+
+pp.checkPropClash = function (prop, propHash) {
+ if (prop.computed || prop.method || prop.shorthand) return;
+
+ var key = prop.key,
+ name = undefined;
+ switch (key.type) {
+ case "Identifier":
+ name = key.name;break;
+ case "Literal":
+ name = String(key.value);break;
+ default:
+ return;
+ }
+
+ var kind = prop.kind;
+ if (name === "__proto__" && kind === "init") {
+ if (propHash.proto) this.raise(key.start, "Redefinition of __proto__ property");
+ propHash.proto = true;
+ }
+};
+
+// ### Expression parsing
+
+// These nest, from the most general expression type at the top to
+// 'atomic', nondivisible expression types at the bottom. Most of
+// the functions will simply let the function (s) below them parse,
+// and, *if* the syntactic construct they handle is present, wrap
+// the AST node that the inner parser gave them in another node.
+
+// Parse a full expression. The optional arguments are used to
+// forbid the `in` operator (in for loops initalization expressions)
+// and provide reference for storing '=' operator inside shorthand
+// property assignment in contexts where both object expression
+// and object pattern might appear (so it's possible to raise
+// delayed syntax error at correct position).
+
+pp.parseExpression = function (noIn, refShorthandDefaultPos) {
+ var startPos = this.state.start,
+ startLoc = this.state.startLoc;
+ var expr = this.parseMaybeAssign(noIn, refShorthandDefaultPos);
+ if (this.match(_tokenizerTypes.types.comma)) {
+ var node = this.startNodeAt(startPos, startLoc);
+ node.expressions = [expr];
+ while (this.eat(_tokenizerTypes.types.comma)) {
+ node.expressions.push(this.parseMaybeAssign(noIn, refShorthandDefaultPos));
+ }
+ this.toReferencedList(node.expressions);
+ return this.finishNode(node, "SequenceExpression");
+ }
+ return expr;
+};
+
+// Parse an assignment expression. This includes applications of
+// operators like `+=`.
+
+pp.parseMaybeAssign = function (noIn, refShorthandDefaultPos, afterLeftParse) {
+ if (this.match(_tokenizerTypes.types._yield) && this.state.inGenerator) {
+ return this.parseYield();
+ }
+
+ var failOnShorthandAssign = undefined;
+ if (!refShorthandDefaultPos) {
+ refShorthandDefaultPos = { start: 0 };
+ failOnShorthandAssign = true;
+ } else {
+ failOnShorthandAssign = false;
+ }
+ var startPos = this.state.start,
+ startLoc = this.state.startLoc;
+ if (this.match(_tokenizerTypes.types.parenL) || this.match(_tokenizerTypes.types.name)) {
+ this.state.potentialArrowAt = this.state.start;
+ }
+ var left = this.parseMaybeConditional(noIn, refShorthandDefaultPos);
+ if (afterLeftParse) left = afterLeftParse.call(this, left, startPos, startLoc);
+ if (this.state.type.isAssign) {
+ var node = this.startNodeAt(startPos, startLoc);
+ node.operator = this.state.value;
+ node.left = this.match(_tokenizerTypes.types.eq) ? this.toAssignable(left) : left;
+ refShorthandDefaultPos.start = 0; // reset because shorthand default was used correctly
+ this.checkLVal(left);
+ if (left.parenthesizedExpression) {
+ var errorMsg = undefined;
+ if (left.type === "ObjectPattern") {
+ errorMsg = "`({a}) = 0` use `({a} = 0)`";
+ } else if (left.type === "ArrayPattern") {
+ errorMsg = "`([a]) = 0` use `([a] = 0)`";
+ }
+ if (errorMsg) {
+ this.raise(left.start, "You're trying to assign to a parenthesized expression, eg. instead of " + errorMsg);
+ }
+ }
+ this.next();
+ node.right = this.parseMaybeAssign(noIn);
+ return this.finishNode(node, "AssignmentExpression");
+ } else if (failOnShorthandAssign && refShorthandDefaultPos.start) {
+ this.unexpected(refShorthandDefaultPos.start);
+ }
+ return left;
+};
+
+// Parse a ternary conditional (`?:`) operator.
+
+pp.parseMaybeConditional = function (noIn, refShorthandDefaultPos) {
+ var startPos = this.state.start,
+ startLoc = this.state.startLoc;
+ var expr = this.parseExprOps(noIn, refShorthandDefaultPos);
+ if (refShorthandDefaultPos && refShorthandDefaultPos.start) return expr;
+ if (this.eat(_tokenizerTypes.types.question)) {
+ var node = this.startNodeAt(startPos, startLoc);
+ node.test = expr;
+ node.consequent = this.parseMaybeAssign();
+ this.expect(_tokenizerTypes.types.colon);
+ node.alternate = this.parseMaybeAssign(noIn);
+ return this.finishNode(node, "ConditionalExpression");
+ }
+ return expr;
+};
+
+// Start the precedence parser.
+
+pp.parseExprOps = function (noIn, refShorthandDefaultPos) {
+ var startPos = this.state.start,
+ startLoc = this.state.startLoc;
+ var expr = this.parseMaybeUnary(refShorthandDefaultPos);
+ if (refShorthandDefaultPos && refShorthandDefaultPos.start) {
+ return expr;
+ } else {
+ return this.parseExprOp(expr, startPos, startLoc, -1, noIn);
+ }
+};
+
+// Parse binary operators with the operator precedence parsing
+// algorithm. `left` is the left-hand side of the operator.
+// `minPrec` provides context that allows the function to stop and
+// defer further parser to one of its callers when it encounters an
+// operator that has a lower precedence than the set it is parsing.
+
+pp.parseExprOp = function (left, leftStartPos, leftStartLoc, minPrec, noIn) {
+ var prec = this.state.type.binop;
+ if (prec != null && (!noIn || !this.match(_tokenizerTypes.types._in))) {
+ if (prec > minPrec) {
+ var node = this.startNodeAt(leftStartPos, leftStartLoc);
+ node.left = left;
+ node.operator = this.state.value;
+ var op = this.state.type;
+ this.next();
+ var startPos = this.state.start,
+ startLoc = this.state.startLoc;
+ node.right = this.parseExprOp(this.parseMaybeUnary(), startPos, startLoc, op.rightAssociative ? prec - 1 : prec, noIn);
+ this.finishNode(node, op === _tokenizerTypes.types.logicalOR || op === _tokenizerTypes.types.logicalAND ? "LogicalExpression" : "BinaryExpression");
+ return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, noIn);
+ }
+ }
+ return left;
+};
+
+// Parse unary operators, both prefix and postfix.
+
+pp.parseMaybeUnary = function (refShorthandDefaultPos) {
+ if (this.state.type.prefix) {
+ var node = this.startNode(),
+ update = this.match(_tokenizerTypes.types.incDec);
+ node.operator = this.state.value;
+ node.prefix = true;
+ this.next();
+ node.argument = this.parseMaybeUnary();
+ if (refShorthandDefaultPos && refShorthandDefaultPos.start) this.unexpected(refShorthandDefaultPos.start);
+ if (update) {
+ this.checkLVal(node.argument);
+ } else if (this.strict && node.operator === "delete" && node.argument.type === "Identifier") {
+ this.raise(node.start, "Deleting local variable in strict mode");
+ }
+ return this.finishNode(node, update ? "UpdateExpression" : "UnaryExpression");
+ }
+
+ var startPos = this.state.start,
+ startLoc = this.state.startLoc;
+ var expr = this.parseExprSubscripts(refShorthandDefaultPos);
+ if (refShorthandDefaultPos && refShorthandDefaultPos.start) return expr;
+ while (this.state.type.postfix && !this.canInsertSemicolon()) {
+ var node = this.startNodeAt(startPos, startLoc);
+ node.operator = this.state.value;
+ node.prefix = false;
+ node.argument = expr;
+ this.checkLVal(expr);
+ this.next();
+ expr = this.finishNode(node, "UpdateExpression");
+ }
+ return expr;
+};
+
+// Parse call, dot, and `[]`-subscript expressions.
+
+pp.parseExprSubscripts = function (refShorthandDefaultPos) {
+ var startPos = this.state.start,
+ startLoc = this.state.startLoc;
+ var expr = this.parseExprAtom(refShorthandDefaultPos);
+ if (refShorthandDefaultPos && refShorthandDefaultPos.start) {
+ return expr;
+ } else {
+ return this.parseSubscripts(expr, startPos, startLoc);
+ }
+};
+
+pp.parseSubscripts = function (base, startPos, startLoc, noCalls) {
+ for (;;) {
+ if (!noCalls && this.eat(_tokenizerTypes.types.doubleColon)) {
+ var node = this.startNodeAt(startPos, startLoc);
+ node.object = base;
+ node.callee = this.parseNoCallExpr();
+ return this.parseSubscripts(this.finishNode(node, "BindExpression"), startPos, startLoc, noCalls);
+ } else if (this.eat(_tokenizerTypes.types.dot)) {
+ var node = this.startNodeAt(startPos, startLoc);
+ node.object = base;
+ node.property = this.parseIdent(true);
+ node.computed = false;
+ base = this.finishNode(node, "MemberExpression");
+ } else if (this.eat(_tokenizerTypes.types.bracketL)) {
+ var node = this.startNodeAt(startPos, startLoc);
+ node.object = base;
+ node.property = this.parseExpression();
+ node.computed = true;
+ this.expect(_tokenizerTypes.types.bracketR);
+ base = this.finishNode(node, "MemberExpression");
+ } else if (!noCalls && this.match(_tokenizerTypes.types.parenL)) {
+ var possibleAsync = base.type === "Identifier" && base.name === "async" && !this.canInsertSemicolon();
+ this.next();
+
+ var node = this.startNodeAt(startPos, startLoc);
+ node.callee = base;
+ node.arguments = this.parseExprList(_tokenizerTypes.types.parenR, this.options.features["es7.trailingFunctionCommas"]);
+ base = this.finishNode(node, "CallExpression");
+
+ if (possibleAsync && (this.match(_tokenizerTypes.types.colon) || this.match(_tokenizerTypes.types.arrow))) {
+ base = this.parseAsyncArrowFromCallExpression(this.startNodeAt(startPos, startLoc), node);
+ } else {
+ this.toReferencedList(node.arguments);
+ }
+ } else if (this.match(_tokenizerTypes.types.backQuote)) {
+ var node = this.startNodeAt(startPos, startLoc);
+ node.tag = base;
+ node.quasi = this.parseTemplate();
+ base = this.finishNode(node, "TaggedTemplateExpression");
+ } else {
+ return base;
+ }
+ }
+};
+
+pp.parseAsyncArrowFromCallExpression = function (node, call) {
+ if (!this.options.features["es7.asyncFunctions"]) this.unexpected();
+ this.expect(_tokenizerTypes.types.arrow);
+ return this.parseArrowExpression(node, call.arguments, true);
+};
+
+// Parse a no-call expression (like argument of `new` or `::` operators).
+
+pp.parseNoCallExpr = function () {
+ var startPos = this.state.start,
+ startLoc = this.state.startLoc;
+ return this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true);
+};
+
+// Parse an atomic expression — either a single token that is an
+// expression, an expression started by a keyword like `function` or
+// `new`, or an expression wrapped in punctuation like `()`, `[]`,
+// or `{}`.
+
+pp.parseExprAtom = function (refShorthandDefaultPos) {
+ var node = undefined,
+ canBeArrow = this.state.potentialArrowAt === this.state.start;
+ switch (this.state.type) {
+ case _tokenizerTypes.types._super:
+ if (!this.state.inFunction) this.raise(this.state.start, "'super' outside of function or class");
+ case _tokenizerTypes.types._this:
+ var type = this.match(_tokenizerTypes.types._this) ? "ThisExpression" : "Super";
+ node = this.startNode();
+ this.next();
+ return this.finishNode(node, type);
+
+ case _tokenizerTypes.types._yield:
+ if (this.state.inGenerator) this.unexpected();
+
+ case _tokenizerTypes.types._do:
+ if (this.options.features["es7.doExpressions"]) {
+ var _node = this.startNode();
+ this.next();
+ var oldInFunction = this.state.inFunction;
+ var oldLabels = this.state.labels;
+ this.state.labels = [];
+ this.state.inFunction = false;
+ _node.body = this.parseBlock();
+ this.state.inFunction = oldInFunction;
+ this.state.labels = oldLabels;
+ return this.finishNode(_node, "DoExpression");
+ }
+
+ case _tokenizerTypes.types.name:
+ node = this.startNode();
+ var id = this.parseIdent(true);
+
+ if (this.options.features["es7.asyncFunctions"]) {
+ if (id.name === "await") {
+ if (this.inAsync) return this.parseAwait(node);
+ } else if (id.name === "async" && this.match(_tokenizerTypes.types._function) && !this.canInsertSemicolon()) {
+ this.next();
+ return this.parseFunction(node, false, false, true);
+ } else if (canBeArrow && id.name === "async" && this.match(_tokenizerTypes.types.name)) {
+ var params = [this.parseIdent()];
+ this.expect(_tokenizerTypes.types.arrow);
+ // var foo = bar => {};
+ return this.parseArrowExpression(node, params, true);
+ }
+ }
+
+ if (canBeArrow && !this.canInsertSemicolon() && this.eat(_tokenizerTypes.types.arrow)) {
+ return this.parseArrowExpression(node, [id]);
+ }
+
+ return id;
+
+ case _tokenizerTypes.types.regexp:
+ var value = this.state.value;
+ node = this.parseLiteral(value.value);
+ node.regex = { pattern: value.pattern, flags: value.flags };
+ return node;
+
+ case _tokenizerTypes.types.num:case _tokenizerTypes.types.string:
+ return this.parseLiteral(this.state.value);
+
+ case _tokenizerTypes.types._null:case _tokenizerTypes.types._true:case _tokenizerTypes.types._false:
+ node = this.startNode();
+ node.rawValue = node.value = this.match(_tokenizerTypes.types._null) ? null : this.match(_tokenizerTypes.types._true);
+ node.raw = this.state.type.keyword;
+ this.next();
+ return this.finishNode(node, "Literal");
+
+ case _tokenizerTypes.types.parenL:
+ return this.parseParenAndDistinguishExpression(null, null, canBeArrow);
+
+ case _tokenizerTypes.types.bracketL:
+ node = this.startNode();
+ this.next();
+ // check whether this is array comprehension or regular array
+ if (this.options.features["es7.comprehensions"] && this.match(_tokenizerTypes.types._for)) {
+ return this.parseComprehension(node, false);
+ }
+ node.elements = this.parseExprList(_tokenizerTypes.types.bracketR, true, true, refShorthandDefaultPos);
+ this.toReferencedList(node.elements);
+ return this.finishNode(node, "ArrayExpression");
+
+ case _tokenizerTypes.types.braceL:
+ return this.parseObj(false, refShorthandDefaultPos);
+
+ case _tokenizerTypes.types._function:
+ node = this.startNode();
+ this.next();
+ return this.parseFunction(node, false);
+
+ case _tokenizerTypes.types.at:
+ this.parseDecorators();
+
+ case _tokenizerTypes.types._class:
+ node = this.startNode();
+ this.takeDecorators(node);
+ return this.parseClass(node, false);
+
+ case _tokenizerTypes.types._new:
+ return this.parseNew();
+
+ case _tokenizerTypes.types.backQuote:
+ return this.parseTemplate();
+
+ case _tokenizerTypes.types.doubleColon:
+ node = this.startNode();
+ this.next();
+ node.object = null;
+ var callee = node.callee = this.parseNoCallExpr();
+ if (callee.type === "MemberExpression") {
+ return this.finishNode(node, "BindExpression");
+ } else {
+ this.raise(callee.start, "Binding should be performed on object property.");
+ }
+
+ default:
+ this.unexpected();
+ }
+};
+
+pp.parseLiteral = function (value) {
+ var node = this.startNode();
+ node.rawValue = node.value = value;
+ node.raw = this.input.slice(this.state.start, this.state.end);
+ this.next();
+ return this.finishNode(node, "Literal");
+};
+
+pp.parseParenExpression = function () {
+ this.expect(_tokenizerTypes.types.parenL);
+ var val = this.parseExpression();
+ this.expect(_tokenizerTypes.types.parenR);
+ return val;
+};
+
+pp.parseParenAndDistinguishExpression = function (startPos, startLoc, canBeArrow, isAsync) {
+ startPos = startPos || this.state.start;
+ startLoc = startLoc || this.state.startLoc;
+ var val = undefined;
+ this.next();
+
+ if (this.options.features["es7.comprehensions"] && this.match(_tokenizerTypes.types._for)) {
+ return this.parseComprehension(this.startNodeAt(startPos, startLoc), true);
+ }
+
+ var innerStartPos = this.state.start,
+ innerStartLoc = this.state.startLoc;
+ var exprList = [],
+ first = true;
+ var refShorthandDefaultPos = { start: 0 },
+ spreadStart = undefined,
+ innerParenStart = undefined,
+ optionalCommaStart = undefined;
+ while (!this.match(_tokenizerTypes.types.parenR)) {
+ if (first) {
+ first = false;
+ } else {
+ this.expect(_tokenizerTypes.types.comma);
+ if (this.match(_tokenizerTypes.types.parenR) && this.options.features["es7.trailingFunctionCommas"]) {
+ optionalCommaStart = this.state.start;
+ break;
+ }
+ }
+
+ if (this.match(_tokenizerTypes.types.ellipsis)) {
+ var spreadNodeStartPos = this.state.start,
+ spreadNodeStartLoc = this.state.startLoc;
+ spreadStart = this.state.start;
+ exprList.push(this.parseParenItem(this.parseRest(), spreadNodeStartLoc, spreadNodeStartPos));
+ break;
+ } else {
+ if (this.match(_tokenizerTypes.types.parenL) && !innerParenStart) {
+ innerParenStart = this.state.start;
+ }
+ exprList.push(this.parseMaybeAssign(false, refShorthandDefaultPos, this.parseParenItem));
+ }
+ }
+ var innerEndPos = this.state.start;
+ var innerEndLoc = this.state.startLoc;
+ this.expect(_tokenizerTypes.types.parenR);
+
+ if (canBeArrow && !this.canInsertSemicolon() && this.eat(_tokenizerTypes.types.arrow)) {
+ if (innerParenStart) this.unexpected(innerParenStart);
+ return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, isAsync);
+ }
+
+ if (!exprList.length) {
+ if (isAsync) {
+ return;
+ } else {
+ this.unexpected(this.state.lastTokStart);
+ }
+ }
+ if (optionalCommaStart) this.unexpected(optionalCommaStart);
+ if (spreadStart) this.unexpected(spreadStart);
+ if (refShorthandDefaultPos.start) this.unexpected(refShorthandDefaultPos.start);
+
+ if (exprList.length > 1) {
+ val = this.startNodeAt(innerStartPos, innerStartLoc);
+ val.expressions = exprList;
+ this.toReferencedList(val.expressions);
+ this.finishNodeAt(val, "SequenceExpression", innerEndPos, innerEndLoc);
+ } else {
+ val = exprList[0];
+ }
+
+ val.parenthesizedExpression = true;
+ return val;
+};
+
+pp.parseParenItem = function (node) {
+ return node;
+};
+
+// New's precedence is slightly tricky. It must allow its argument
+// to be a `[]` or dot subscript expression, but not a call — at
+// least, not without wrapping it in parentheses. Thus, it uses the
+
+pp.parseNew = function () {
+ var node = this.startNode();
+ var meta = this.parseIdent(true);
+
+ if (this.eat(_tokenizerTypes.types.dot)) {
+ node.meta = meta;
+ node.property = this.parseIdent(true);
+
+ if (node.property.name !== "target") {
+ this.raise(node.property.start, "The only valid meta property for new is new.target");
+ }
+
+ return this.finishNode(node, "MetaProperty");
+ }
+
+ node.callee = this.parseNoCallExpr();
+
+ if (this.eat(_tokenizerTypes.types.parenL)) {
+ node.arguments = this.parseExprList(_tokenizerTypes.types.parenR, this.options.features["es7.trailingFunctionCommas"]);
+ this.toReferencedList(node.arguments);
+ } else {
+ node.arguments = [];
+ }
+
+ return this.finishNode(node, "NewExpression");
+};
+
+// Parse template expression.
+
+pp.parseTemplateElement = function () {
+ var elem = this.startNode();
+ elem.value = {
+ raw: this.input.slice(this.state.start, this.state.end).replace(/\r\n?/g, "\n"),
+ cooked: this.state.value
+ };
+ this.next();
+ elem.tail = this.match(_tokenizerTypes.types.backQuote);
+ return this.finishNode(elem, "TemplateElement");
+};
+
+pp.parseTemplate = function () {
+ var node = this.startNode();
+ this.next();
+ node.expressions = [];
+ var curElt = this.parseTemplateElement();
+ node.quasis = [curElt];
+ while (!curElt.tail) {
+ this.expect(_tokenizerTypes.types.dollarBraceL);
+ node.expressions.push(this.parseExpression());
+ this.expect(_tokenizerTypes.types.braceR);
+ node.quasis.push(curElt = this.parseTemplateElement());
+ }
+ this.next();
+ return this.finishNode(node, "TemplateLiteral");
+};
+
+// Parse an object literal or binding pattern.
+
+pp.parseObj = function (isPattern, refShorthandDefaultPos) {
+ var node = this.startNode(),
+ first = true,
+ propHash = Object.create(null);
+ node.properties = [];
+ var decorators = [];
+ this.next();
+ while (!this.eat(_tokenizerTypes.types.braceR)) {
+ if (first) {
+ first = false;
+ } else {
+ this.expect(_tokenizerTypes.types.comma);
+ if (this.eat(_tokenizerTypes.types.braceR)) break;
+ }
+
+ while (this.match(_tokenizerTypes.types.at)) {
+ decorators.push(this.parseDecorator());
+ }
+
+ var prop = this.startNode(),
+ isGenerator = false,
+ isAsync = false,
+ startPos = undefined,
+ startLoc = undefined;
+ if (decorators.length) {
+ prop.decorators = decorators;
+ decorators = [];
+ }
+ if (this.options.features["es7.objectRestSpread"] && this.match(_tokenizerTypes.types.ellipsis)) {
+ prop = this.parseSpread();
+ prop.type = "SpreadProperty";
+ node.properties.push(prop);
+ continue;
+ }
+ prop.method = false;
+ prop.shorthand = false;
+ if (isPattern || refShorthandDefaultPos) {
+ startPos = this.state.start;
+ startLoc = this.state.startLoc;
+ }
+ if (!isPattern) {
+ isGenerator = this.eat(_tokenizerTypes.types.star);
+ }
+ if (!isPattern && this.options.features["es7.asyncFunctions"] && this.isContextual("async")) {
+ if (isGenerator) this.unexpected();
+ var asyncId = this.parseIdent();
+ if (this.match(_tokenizerTypes.types.colon) || this.match(_tokenizerTypes.types.parenL) || this.match(_tokenizerTypes.types.braceR)) {
+ prop.key = asyncId;
+ } else {
+ isAsync = true;
+ this.parsePropertyName(prop);
+ }
+ } else {
+ this.parsePropertyName(prop);
+ }
+ this.parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, refShorthandDefaultPos);
+ this.checkPropClash(prop, propHash);
+ node.properties.push(this.finishNode(prop, "Property"));
+ }
+ if (decorators.length) {
+ this.raise(this.state.start, "You have trailing decorators with no property");
+ }
+ return this.finishNode(node, isPattern ? "ObjectPattern" : "ObjectExpression");
+};
+
+pp.parseObjPropValue = function (prop, startPos, startLoc, isGenerator, isAsync, isPattern, refShorthandDefaultPos) {
+ if (this.eat(_tokenizerTypes.types.colon)) {
+ prop.value = isPattern ? this.parseMaybeDefault(this.state.start, this.state.startLoc) : this.parseMaybeAssign(false, refShorthandDefaultPos);
+ prop.kind = "init";
+ } else if (this.match(_tokenizerTypes.types.parenL)) {
+ if (isPattern) this.unexpected();
+ prop.kind = "init";
+ prop.method = true;
+ prop.value = this.parseMethod(isGenerator, isAsync);
+ } else if (!prop.computed && prop.key.type === "Identifier" && (prop.key.name === "get" || prop.key.name === "set") && !this.match(_tokenizerTypes.types.comma) && !this.match(_tokenizerTypes.types.braceR)) {
+ if (isGenerator || isAsync || isPattern) this.unexpected();
+ prop.kind = prop.key.name;
+ this.parsePropertyName(prop);
+ prop.value = this.parseMethod(false);
+ var paramCount = prop.kind === "get" ? 0 : 1;
+ if (prop.value.params.length !== paramCount) {
+ var start = prop.value.start;
+ if (prop.kind === "get") this.raise(start, "getter should have no params");else this.raise(start, "setter should have exactly one param");
+ }
+ } else if (!prop.computed && prop.key.type === "Identifier") {
+ prop.kind = "init";
+ if (isPattern) {
+ if (this.isKeyword(prop.key.name) || this.strict && (_utilIdentifier.reservedWords.strictBind(prop.key.name) || _utilIdentifier.reservedWords.strict(prop.key.name)) || !this.options.allowReserved && this.isReservedWord(prop.key.name)) this.raise(prop.key.start, "Binding " + prop.key.name);
+ prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key.__clone());
+ } else if (this.match(_tokenizerTypes.types.eq) && refShorthandDefaultPos) {
+ if (!refShorthandDefaultPos.start) refShorthandDefaultPos.start = this.state.start;
+ prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key.__clone());
+ } else {
+ prop.value = prop.key.__clone();
+ }
+ prop.shorthand = true;
+ } else {
+ this.unexpected();
+ }
+};
+
+pp.parsePropertyName = function (prop) {
+ if (this.eat(_tokenizerTypes.types.bracketL)) {
+ prop.computed = true;
+ prop.key = this.parseMaybeAssign();
+ this.expect(_tokenizerTypes.types.bracketR);
+ return prop.key;
+ } else {
+ prop.computed = false;
+ return prop.key = this.match(_tokenizerTypes.types.num) || this.match(_tokenizerTypes.types.string) ? this.parseExprAtom() : this.parseIdent(true);
+ }
+};
+
+// Initialize empty function node.
+
+pp.initFunction = function (node, isAsync) {
+ node.id = null;
+ node.generator = false;
+ node.expression = false;
+ if (this.options.features["es7.asyncFunctions"]) {
+ node.async = !!isAsync;
+ }
+};
+
+// Parse object or class method.
+
+pp.parseMethod = function (isGenerator, isAsync) {
+ var node = this.startNode();
+ this.initFunction(node, isAsync);
+ this.expect(_tokenizerTypes.types.parenL);
+ node.params = this.parseBindingList(_tokenizerTypes.types.parenR, false, this.options.features["es7.trailingFunctionCommas"]);
+ node.generator = isGenerator;
+ this.parseFunctionBody(node);
+ return this.finishNode(node, "FunctionExpression");
+};
+
+// Parse arrow function expression with given parameters.
+
+pp.parseArrowExpression = function (node, params, isAsync) {
+ this.initFunction(node, isAsync);
+ node.params = this.toAssignableList(params, true);
+ this.parseFunctionBody(node, true);
+ return this.finishNode(node, "ArrowFunctionExpression");
+};
+
+// Parse function body and check parameters.
+
+pp.parseFunctionBody = function (node, allowExpression) {
+ var isExpression = allowExpression && !this.match(_tokenizerTypes.types.braceL);
+
+ var oldInAsync = this.inAsync;
+ this.inAsync = node.async;
+ if (isExpression) {
+ node.body = this.parseMaybeAssign();
+ node.expression = true;
+ } else {
+ // Start a new scope with regard to labels and the `inFunction`
+ // flag (restore them to their old value afterwards).
+ var oldInFunc = this.state.inFunction,
+ oldInGen = this.state.inGenerator,
+ oldLabels = this.state.labels;
+ this.state.inFunction = true;this.state.inGenerator = node.generator;this.state.labels = [];
+ node.body = this.parseBlock(true);
+ node.expression = false;
+ this.state.inFunction = oldInFunc;this.state.inGenerator = oldInGen;this.state.labels = oldLabels;
+ }
+ this.inAsync = oldInAsync;
+
+ // If this is a strict mode function, verify that argument names
+ // are not repeated, and it does not try to bind the words `eval`
+ // or `arguments`.
+ if (this.strict || !isExpression && node.body.body.length && this.isUseStrict(node.body.body[0])) {
+ var nameHash = Object.create(null),
+ oldStrict = this.strict;
+ this.strict = true;
+ if (node.id) {
+ this.checkLVal(node.id, true);
+ }
+ var _arr = node.params;
+ for (var _i = 0; _i < _arr.length; _i++) {
+ var param = _arr[_i];
+ this.checkLVal(param, true, nameHash);
+ }
+ this.strict = oldStrict;
+ }
+};
+
+// Parses a comma-separated list of expressions, and returns them as
+// an array. `close` is the token type that ends the list, and
+// `allowEmpty` can be turned on to allow subsequent commas with
+// nothing in between them to be parsed as `null` (which is needed
+// for array literals).
+
+pp.parseExprList = function (close, allowTrailingComma, allowEmpty, refShorthandDefaultPos) {
+ var elts = [],
+ first = true;
+ while (!this.eat(close)) {
+ if (first) {
+ first = false;
+ } else {
+ this.expect(_tokenizerTypes.types.comma);
+ if (allowTrailingComma && this.eat(close)) break;
+ }
+
+ elts.push(this.parseExprListItem(allowEmpty, refShorthandDefaultPos));
+ }
+ return elts;
+};
+
+pp.parseExprListItem = function (allowEmpty, refShorthandDefaultPos) {
+ var elt = undefined;
+ if (allowEmpty && this.match(_tokenizerTypes.types.comma)) {
+ elt = null;
+ } else if (this.match(_tokenizerTypes.types.ellipsis)) {
+ elt = this.parseSpread(refShorthandDefaultPos);
+ } else {
+ elt = this.parseMaybeAssign(false, refShorthandDefaultPos);
+ }
+ return elt;
+};
+
+// Parse the next token as an identifier. If `liberal` is true (used
+// when parsing properties), it will also convert keywords into
+// identifiers.
+
+pp.parseIdent = function (liberal) {
+ var node = this.startNode();
+ if (this.match(_tokenizerTypes.types.name)) {
+ if (!liberal && (!this.options.allowReserved && this.isReservedWord(this.state.value) || this.strict && _utilIdentifier.reservedWords.strict(this.state.value))) this.raise(this.state.start, "The keyword '" + this.state.value + "' is reserved");
+ node.name = this.state.value;
+ } else if (liberal && this.state.type.keyword) {
+ node.name = this.state.type.keyword;
+ } else {
+ this.unexpected();
+ }
+ this.next();
+ return this.finishNode(node, "Identifier");
+};
+
+// Parses await expression inside async function.
+
+pp.parseAwait = function (node) {
+ if (this.eat(_tokenizerTypes.types.semi) || this.canInsertSemicolon()) {
+ this.unexpected();
+ }
+ node.all = this.eat(_tokenizerTypes.types.star);
+ node.argument = this.parseMaybeUnary();
+ return this.finishNode(node, "AwaitExpression");
+};
+
+// Parses yield expression inside generator.
+
+pp.parseYield = function () {
+ var node = this.startNode();
+ this.next();
+ if (this.match(_tokenizerTypes.types.semi) || this.canInsertSemicolon() || !this.match(_tokenizerTypes.types.star) && !this.state.type.startsExpr) {
+ node.delegate = false;
+ node.argument = null;
+ } else {
+ node.delegate = this.eat(_tokenizerTypes.types.star);
+ node.argument = this.parseMaybeAssign();
+ }
+ return this.finishNode(node, "YieldExpression");
+};
+
+// Parses array and generator comprehensions.
+
+pp.parseComprehension = function (node, isGenerator) {
+ node.blocks = [];
+ while (this.match(_tokenizerTypes.types._for)) {
+ var block = this.startNode();
+ this.next();
+ this.expect(_tokenizerTypes.types.parenL);
+ block.left = this.parseBindingAtom();
+ this.checkLVal(block.left, true);
+ this.expectContextual("of");
+ block.right = this.parseExpression();
+ this.expect(_tokenizerTypes.types.parenR);
+ node.blocks.push(this.finishNode(block, "ComprehensionBlock"));
+ }
+ node.filter = this.eat(_tokenizerTypes.types._if) ? this.parseParenExpression() : null;
+ node.body = this.parseExpression();
+ this.expect(isGenerator ? _tokenizerTypes.types.parenR : _tokenizerTypes.types.bracketR);
+ node.generator = isGenerator;
+ return this.finishNode(node, "ComprehensionExpression");
+};
+},{"616":616,"628":628,"629":629}],616:[function(_dereq_,module,exports){
+"use strict";
+
+exports.__esModule = true;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+// istanbul ignore next
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+// istanbul ignore next
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _utilIdentifier = _dereq_(629);
+
+var _options = _dereq_(613);
+
+var _tokenizer = _dereq_(626);
+
+var _tokenizer2 = _interopRequireDefault(_tokenizer);
+
+// Registered plugins
+
+var plugins = {};
+
+exports.plugins = plugins;
+
+var Parser = (function (_Tokenizer) {
+ _inherits(Parser, _Tokenizer);
+
+ function Parser(options, input) {
+ _classCallCheck(this, Parser);
+
+ _Tokenizer.call(this, input);
+
+ this.options = _options.getOptions(options);
+ this.isKeyword = _utilIdentifier.isKeyword;
+ this.isReservedWord = _utilIdentifier.reservedWords[6];
+ this.input = input;
+ this.loadPlugins(this.options.plugins);
+
+ // Figure out if it's a module code.
+ this.inModule = this.options.sourceType === "module";
+ this.strict = this.options.strictMode === false ? false : this.inModule;
+
+ // If enabled, skip leading hashbang line.
+ if (this.state.pos === 0 && this.input[0] === "#" && this.input[1] === "!") {
+ this.skipLineComment(2);
+ }
+ }
+
+ Parser.prototype.extend = function extend(name, f) {
+ this[name] = f(this[name]);
+ };
+
+ Parser.prototype.loadPlugins = function loadPlugins(plugins) {
+ for (var _name in plugins) {
+ var plugin = exports.plugins[_name];
+ if (!plugin) throw new Error("Plugin '" + _name + "' not found");
+ plugin(this, plugins[_name]);
+ }
+ };
+
+ Parser.prototype.parse = function parse() {
+ var file = this.startNode();
+ var program = this.startNode();
+ this.nextToken();
+ return this.parseTopLevel(file, program);
+ };
+
+ return Parser;
+})(_tokenizer2["default"]);
+
+exports["default"] = Parser;
+},{"613":613,"626":626,"629":629}],617:[function(_dereq_,module,exports){
+"use strict";
+
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+var _utilLocation = _dereq_(630);
+
+var _index = _dereq_(616);
+
+var _index2 = _interopRequireDefault(_index);
+
+var pp = _index2["default"].prototype;
+
+// This function is used to raise exceptions on parse errors. It
+// takes an offset integer (into the current `input`) to indicate
+// the location of the error, attaches the position to the end
+// of the error message, and then raises a `SyntaxError` with that
+// message.
+
+pp.raise = function (pos, message) {
+ var loc = _utilLocation.getLineInfo(this.input, pos);
+ message += " (" + loc.line + ":" + loc.column + ")";
+ var err = new SyntaxError(message);
+ err.pos = pos;
+ err.loc = loc;
+ throw err;
+};
+},{"616":616,"630":630}],618:[function(_dereq_,module,exports){
+"use strict";
+
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+var _tokenizerTypes = _dereq_(628);
+
+var _index = _dereq_(616);
+
+var _index2 = _interopRequireDefault(_index);
+
+var _utilIdentifier = _dereq_(629);
+
+var pp = _index2["default"].prototype;
+
+// Convert existing expression atom to assignable pattern
+// if possible.
+
+pp.toAssignable = function (node, isBinding) {
+ if (node) {
+ switch (node.type) {
+ case "Identifier":
+ case "ObjectPattern":
+ case "ArrayPattern":
+ case "AssignmentPattern":
+ break;
+
+ case "ObjectExpression":
+ node.type = "ObjectPattern";
+ var _arr = node.properties;
+ for (var _i = 0; _i < _arr.length; _i++) {
+ var prop = _arr[_i];
+ if (prop.type === "SpreadProperty") continue;
+ if (prop.kind !== "init") this.raise(prop.key.start, "Object pattern can't contain getter or setter");
+ this.toAssignable(prop.value, isBinding);
+ }
+ break;
+
+ case "ArrayExpression":
+ node.type = "ArrayPattern";
+ this.toAssignableList(node.elements, isBinding);
+ break;
+
+ case "AssignmentExpression":
+ if (node.operator === "=") {
+ node.type = "AssignmentPattern";
+ delete node.operator;
+ } else {
+ this.raise(node.left.end, "Only '=' operator can be used for specifying default value.");
+ }
+ break;
+
+ case "MemberExpression":
+ if (!isBinding) break;
+
+ default:
+ this.raise(node.start, "Assigning to rvalue");
+ }
+ }
+ return node;
+};
+
+// Convert list of expression atoms to binding list.
+
+pp.toAssignableList = function (exprList, isBinding) {
+ var end = exprList.length;
+ if (end) {
+ var last = exprList[end - 1];
+ if (last && last.type === "RestElement") {
+ --end;
+ } else if (last && last.type === "SpreadElement") {
+ last.type = "RestElement";
+ var arg = last.argument;
+ this.toAssignable(arg, isBinding);
+ if (arg.type !== "Identifier" && arg.type !== "MemberExpression" && arg.type !== "ArrayPattern") {
+ this.unexpected(arg.start);
+ }
+ --end;
+ }
+ }
+ for (var i = 0; i < end; i++) {
+ var elt = exprList[i];
+ if (elt) this.toAssignable(elt, isBinding);
+ }
+ return exprList;
+};
+
+// Convert list of expression atoms to a list of
+
+pp.toReferencedList = function (exprList) {
+ return exprList;
+};
+
+// Parses spread element.
+
+pp.parseSpread = function (refShorthandDefaultPos) {
+ var node = this.startNode();
+ this.next();
+ node.argument = this.parseMaybeAssign(refShorthandDefaultPos);
+ return this.finishNode(node, "SpreadElement");
+};
+
+pp.parseRest = function () {
+ var node = this.startNode();
+ this.next();
+ node.argument = this.match(_tokenizerTypes.types.name) || this.match(_tokenizerTypes.types.bracketL) ? this.parseBindingAtom() : this.unexpected();
+ return this.finishNode(node, "RestElement");
+};
+
+// Parses lvalue (assignable) atom.
+
+pp.parseBindingAtom = function () {
+ switch (this.state.type) {
+ case _tokenizerTypes.types.name:
+ return this.parseIdent();
+
+ case _tokenizerTypes.types.bracketL:
+ var node = this.startNode();
+ this.next();
+ node.elements = this.parseBindingList(_tokenizerTypes.types.bracketR, true, true);
+ return this.finishNode(node, "ArrayPattern");
+
+ case _tokenizerTypes.types.braceL:
+ return this.parseObj(true);
+
+ default:
+ this.unexpected();
+ }
+};
+
+pp.parseBindingList = function (close, allowEmpty, allowTrailingComma) {
+ var elts = [],
+ first = true;
+ while (!this.eat(close)) {
+ if (first) first = false;else this.expect(_tokenizerTypes.types.comma);
+ if (allowEmpty && this.match(_tokenizerTypes.types.comma)) {
+ elts.push(null);
+ } else if (allowTrailingComma && this.eat(close)) {
+ break;
+ } else if (this.match(_tokenizerTypes.types.ellipsis)) {
+ elts.push(this.parseAssignableListItemTypes(this.parseRest()));
+ this.expect(close);
+ break;
+ } else {
+ var left = this.parseMaybeDefault();
+ this.parseAssignableListItemTypes(left);
+ elts.push(this.parseMaybeDefault(null, null, left));
+ }
+ }
+ return elts;
+};
+
+pp.parseAssignableListItemTypes = function (param) {
+ return param;
+};
+
+// Parses assignment pattern around given atom if possible.
+
+pp.parseMaybeDefault = function (startPos, startLoc, left) {
+ startLoc = startLoc || this.state.startLoc;
+ startPos = startPos || this.state.start;
+ left = left || this.parseBindingAtom();
+ if (!this.eat(_tokenizerTypes.types.eq)) return left;
+
+ var node = this.startNodeAt(startPos, startLoc);
+ node.left = left;
+ node.right = this.parseMaybeAssign();
+ return this.finishNode(node, "AssignmentPattern");
+};
+
+// Verify that a node is an lval — something that can be assigned
+// to.
+
+pp.checkLVal = function (expr, isBinding, checkClashes) {
+ switch (expr.type) {
+ case "Identifier":
+ if (this.strict && (_utilIdentifier.reservedWords.strictBind(expr.name) || _utilIdentifier.reservedWords.strict(expr.name))) this.raise(expr.start, (isBinding ? "Binding " : "Assigning to ") + expr.name + " in strict mode");
+ if (checkClashes) {
+ if (checkClashes[expr.name]) {
+ this.raise(expr.start, "Argument name clash in strict mode");
+ } else {
+ checkClashes[expr.name] = true;
+ }
+ }
+ break;
+
+ case "MemberExpression":
+ if (isBinding) this.raise(expr.start, (isBinding ? "Binding" : "Assigning to") + " member expression");
+ break;
+
+ case "ObjectPattern":
+ var _arr2 = expr.properties;
+
+ for (var _i2 = 0; _i2 < _arr2.length; _i2++) {
+ var prop = _arr2[_i2];
+ if (prop.type === "Property") prop = prop.value;
+ this.checkLVal(prop, isBinding, checkClashes);
+ }
+ break;
+
+ case "ArrayPattern":
+ var _arr3 = expr.elements;
+
+ for (var _i3 = 0; _i3 < _arr3.length; _i3++) {
+ var elem = _arr3[_i3];
+ if (elem) this.checkLVal(elem, isBinding, checkClashes);
+ }
+ break;
+
+ case "AssignmentPattern":
+ this.checkLVal(expr.left, isBinding, checkClashes);
+ break;
+
+ case "SpreadProperty":
+ case "RestElement":
+ this.checkLVal(expr.argument, isBinding, checkClashes);
+ break;
+
+ default:
+ this.raise(expr.start, (isBinding ? "Binding" : "Assigning to") + " rvalue");
+ }
+};
+},{"616":616,"628":628,"629":629}],619:[function(_dereq_,module,exports){
+"use strict";
+
+exports.__esModule = true;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+// istanbul ignore next
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var _index = _dereq_(616);
+
+var _index2 = _interopRequireDefault(_index);
+
+var _utilLocation = _dereq_(630);
+
+// Start an AST node, attaching a start offset.
+
+var pp = _index2["default"].prototype;
+
+var Node = (function () {
+ function Node(parser, pos, loc) {
+ _classCallCheck(this, Node);
+
+ this.type = "";
+ this.start = pos;
+ this.end = 0;
+ this.loc = new _utilLocation.SourceLocation(loc);
+ }
+
+ Node.prototype.__clone = function __clone() {
+ var node2 = new Node();
+ for (var key in this) node2[key] = this[key];
+ return node2;
+ };
+
+ return Node;
+})();
+
+exports.Node = Node;
+
+pp.startNode = function () {
+ return new Node(this, this.state.start, this.state.startLoc);
+};
+
+pp.startNodeAt = function (pos, loc) {
+ return new Node(this, pos, loc);
+};
+
+function finishNodeAt(node, type, pos, loc) {
+ node.type = type;
+ node.end = pos;
+ node.loc.end = loc;
+ this.processComment(node);
+ return node;
+}
+
+// Finish an AST node, adding `type` and `end` properties.
+
+pp.finishNode = function (node, type) {
+ return finishNodeAt.call(this, node, type, this.state.lastTokEnd, this.state.lastTokEndLoc);
+};
+
+// Finish node at given position
+
+pp.finishNodeAt = function (node, type, pos, loc) {
+ return finishNodeAt.call(this, node, type, pos, loc);
+};
+},{"616":616,"630":630}],620:[function(_dereq_,module,exports){
+"use strict";
+
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+var _tokenizerTypes = _dereq_(628);
+
+var _index = _dereq_(616);
+
+var _index2 = _interopRequireDefault(_index);
+
+var _utilWhitespace = _dereq_(631);
+
+var pp = _index2["default"].prototype;
+
+// ### Statement parsing
+
+// Parse a program. Initializes the parser, reads any number of
+// statements, and wraps them in a Program node. Optionally takes a
+// `program` argument. If present, the statements will be appended
+// to its body instead of creating a new node.
+
+pp.parseTopLevel = function (file, program) {
+ program.sourceType = this.options.sourceType;
+ program.body = [];
+
+ var first = true;
+ while (!this.match(_tokenizerTypes.types.eof)) {
+ var stmt = this.parseStatement(true, true);
+ program.body.push(stmt);
+ if (first) {
+ if (this.isUseStrict(stmt)) this.setStrict(true);
+ first = false;
+ }
+ }
+ this.next();
+
+ file.program = this.finishNode(program, "Program");
+ file.comments = this.state.comments;
+ file.tokens = this.state.tokens;
+
+ return this.finishNode(file, "File");
+};
+
+var loopLabel = { kind: "loop" },
+ switchLabel = { kind: "switch" };
+
+// Parse a single statement.
+//
+// If expecting a statement and finding a slash operator, parse a
+// regular expression literal. This is to handle cases like
+// `if (foo) /blah/.exec(foo)`, where looking at the previous token
+// does not help.
+
+pp.parseStatement = function (declaration, topLevel) {
+ if (this.match(_tokenizerTypes.types.at)) {
+ this.parseDecorators(true);
+ }
+
+ var starttype = this.state.type,
+ node = this.startNode();
+
+ // Most types of statements are recognized by the keyword they
+ // start with. Many are trivial to parse, some require a bit of
+ // complexity.
+
+ switch (starttype) {
+ case _tokenizerTypes.types._break:case _tokenizerTypes.types._continue:
+ return this.parseBreakContinueStatement(node, starttype.keyword);
+ case _tokenizerTypes.types._debugger:
+ return this.parseDebuggerStatement(node);
+ case _tokenizerTypes.types._do:
+ return this.parseDoStatement(node);
+ case _tokenizerTypes.types._for:
+ return this.parseForStatement(node);
+ case _tokenizerTypes.types._function:
+ if (!declaration) this.unexpected();
+ return this.parseFunctionStatement(node);
+
+ case _tokenizerTypes.types._class:
+ if (!declaration) this.unexpected();
+ this.takeDecorators(node);
+ return this.parseClass(node, true);
+
+ case _tokenizerTypes.types._if:
+ return this.parseIfStatement(node);
+ case _tokenizerTypes.types._return:
+ return this.parseReturnStatement(node);
+ case _tokenizerTypes.types._switch:
+ return this.parseSwitchStatement(node);
+ case _tokenizerTypes.types._throw:
+ return this.parseThrowStatement(node);
+ case _tokenizerTypes.types._try:
+ return this.parseTryStatement(node);
+ case _tokenizerTypes.types._let:case _tokenizerTypes.types._const:
+ if (!declaration) this.unexpected(); // NOTE: falls through to _var
+ case _tokenizerTypes.types._var:
+ return this.parseVarStatement(node, starttype);
+ case _tokenizerTypes.types._while:
+ return this.parseWhileStatement(node);
+ case _tokenizerTypes.types._with:
+ return this.parseWithStatement(node);
+ case _tokenizerTypes.types.braceL:
+ return this.parseBlock();
+ case _tokenizerTypes.types.semi:
+ return this.parseEmptyStatement(node);
+ case _tokenizerTypes.types._export:
+ case _tokenizerTypes.types._import:
+ if (!this.options.allowImportExportEverywhere) {
+ if (!topLevel) this.raise(this.state.start, "'import' and 'export' may only appear at the top level");
+
+ if (!this.inModule) this.raise(this.state.start, "'import' and 'export' may appear only with 'sourceType: module'");
+ }
+ return starttype === _tokenizerTypes.types._import ? this.parseImport(node) : this.parseExport(node);
+
+ case _tokenizerTypes.types.name:
+ if (this.options.features["es7.asyncFunctions"] && this.state.value === "async") {
+ // peek ahead and see if next token is a function
+ var state = this.state.clone();
+ this.next();
+ if (this.match(_tokenizerTypes.types._function) && !this.canInsertSemicolon()) {
+ this.expect(_tokenizerTypes.types._function);
+ return this.parseFunction(node, true, false, true);
+ } else {
+ this.state = state;
+ }
+ }
+
+ // If the statement does not start with a statement keyword or a
+ // brace, it's an ExpressionStatement or LabeledStatement. We
+ // simply start parsing an expression, and afterwards, if the
+ // next token is a colon and the expression was a simple
+ // Identifier node, we switch to interpreting it as a label.
+ default:
+ var maybeName = this.state.value,
+ expr = this.parseExpression();
+
+ if (starttype === _tokenizerTypes.types.name && expr.type === "Identifier" && this.eat(_tokenizerTypes.types.colon)) {
+ return this.parseLabeledStatement(node, maybeName, expr);
+ } else {
+ return this.parseExpressionStatement(node, expr);
+ }
+ }
+};
+
+pp.takeDecorators = function (node) {
+ if (this.state.decorators.length) {
+ node.decorators = this.state.decorators;
+ this.state.decorators = [];
+ }
+};
+
+pp.parseDecorators = function (allowExport) {
+ while (this.match(_tokenizerTypes.types.at)) {
+ this.state.decorators.push(this.parseDecorator());
+ }
+
+ if (allowExport && this.match(_tokenizerTypes.types._export)) {
+ return;
+ }
+
+ if (!this.match(_tokenizerTypes.types._class)) {
+ this.raise(this.state.start, "Leading decorators must be attached to a class declaration");
+ }
+};
+
+pp.parseDecorator = function () {
+ if (!this.options.features["es7.decorators"]) {
+ this.unexpected();
+ }
+ var node = this.startNode();
+ this.next();
+ node.expression = this.parseMaybeAssign();
+ return this.finishNode(node, "Decorator");
+};
+
+pp.parseBreakContinueStatement = function (node, keyword) {
+ var isBreak = keyword === "break";
+ this.next();
+
+ if (this.eat(_tokenizerTypes.types.semi) || this.canInsertSemicolon()) {
+ node.label = null;
+ } else if (!this.match(_tokenizerTypes.types.name)) {
+ this.unexpected();
+ } else {
+ node.label = this.parseIdent();
+ this.semicolon();
+ }
+
+ // Verify that there is an actual destination to break or
+ // continue to.
+ for (var i = 0; i < this.state.labels.length; ++i) {
+ var lab = this.state.labels[i];
+ if (node.label == null || lab.name === node.label.name) {
+ if (lab.kind != null && (isBreak || lab.kind === "loop")) break;
+ if (node.label && isBreak) break;
+ }
+ }
+ if (i === this.state.labels.length) this.raise(node.start, "Unsyntactic " + keyword);
+ return this.finishNode(node, isBreak ? "BreakStatement" : "ContinueStatement");
+};
+
+pp.parseDebuggerStatement = function (node) {
+ this.next();
+ this.semicolon();
+ return this.finishNode(node, "DebuggerStatement");
+};
+
+pp.parseDoStatement = function (node) {
+ this.next();
+ this.state.labels.push(loopLabel);
+ node.body = this.parseStatement(false);
+ this.state.labels.pop();
+ this.expect(_tokenizerTypes.types._while);
+ node.test = this.parseParenExpression();
+ this.eat(_tokenizerTypes.types.semi);
+ return this.finishNode(node, "DoWhileStatement");
+};
+
+// Disambiguating between a `for` and a `for`/`in` or `for`/`of`
+// loop is non-trivial. Basically, we have to parse the init `var`
+// statement or expression, disallowing the `in` operator (see
+// the second parameter to `parseExpression`), and then check
+// whether the next token is `in` or `of`. When there is no init
+// part (semicolon immediately after the opening parenthesis), it
+// is a regular `for` loop.
+
+pp.parseForStatement = function (node) {
+ this.next();
+ this.state.labels.push(loopLabel);
+ this.expect(_tokenizerTypes.types.parenL);
+
+ if (this.match(_tokenizerTypes.types.semi)) {
+ return this.parseFor(node, null);
+ }
+
+ if (this.match(_tokenizerTypes.types._var) || this.match(_tokenizerTypes.types._let) || this.match(_tokenizerTypes.types._const)) {
+ var _init = this.startNode(),
+ varKind = this.state.type;
+ this.next();
+ this.parseVar(_init, true, varKind);
+ this.finishNode(_init, "VariableDeclaration");
+ if ((this.match(_tokenizerTypes.types._in) || this.isContextual("of")) && _init.declarations.length === 1 && !(varKind !== _tokenizerTypes.types._var && _init.declarations[0].init)) return this.parseForIn(node, _init);
+ return this.parseFor(node, _init);
+ }
+
+ var refShorthandDefaultPos = { start: 0 };
+ var init = this.parseExpression(true, refShorthandDefaultPos);
+ if (this.match(_tokenizerTypes.types._in) || this.isContextual("of")) {
+ this.toAssignable(init);
+ this.checkLVal(init);
+ return this.parseForIn(node, init);
+ } else if (refShorthandDefaultPos.start) {
+ this.unexpected(refShorthandDefaultPos.start);
+ }
+ return this.parseFor(node, init);
+};
+
+pp.parseFunctionStatement = function (node) {
+ this.next();
+ return this.parseFunction(node, true);
+};
+
+pp.parseIfStatement = function (node) {
+ this.next();
+ node.test = this.parseParenExpression();
+ node.consequent = this.parseStatement(false);
+ node.alternate = this.eat(_tokenizerTypes.types._else) ? this.parseStatement(false) : null;
+ return this.finishNode(node, "IfStatement");
+};
+
+pp.parseReturnStatement = function (node) {
+ if (!this.state.inFunction && !this.options.allowReturnOutsideFunction) {
+ this.raise(this.state.start, "'return' outside of function");
+ }
+
+ this.next();
+
+ // In `return` (and `break`/`continue`), the keywords with
+ // optional arguments, we eagerly look for a semicolon or the
+ // possibility to insert one.
+
+ if (this.eat(_tokenizerTypes.types.semi) || this.canInsertSemicolon()) {
+ node.argument = null;
+ } else {
+ node.argument = this.parseExpression();
+ this.semicolon();
+ }
+
+ return this.finishNode(node, "ReturnStatement");
+};
+
+pp.parseSwitchStatement = function (node) {
+ this.next();
+ node.discriminant = this.parseParenExpression();
+ node.cases = [];
+ this.expect(_tokenizerTypes.types.braceL);
+ this.state.labels.push(switchLabel);
+
+ // Statements under must be grouped (by label) in SwitchCase
+ // nodes. `cur` is used to keep the node that we are currently
+ // adding statements to.
+
+ for (var cur, sawDefault; !this.match(_tokenizerTypes.types.braceR);) {
+ if (this.match(_tokenizerTypes.types._case) || this.match(_tokenizerTypes.types._default)) {
+ var isCase = this.match(_tokenizerTypes.types._case);
+ if (cur) this.finishNode(cur, "SwitchCase");
+ node.cases.push(cur = this.startNode());
+ cur.consequent = [];
+ this.next();
+ if (isCase) {
+ cur.test = this.parseExpression();
+ } else {
+ if (sawDefault) this.raise(this.state.lastTokStart, "Multiple default clauses");
+ sawDefault = true;
+ cur.test = null;
+ }
+ this.expect(_tokenizerTypes.types.colon);
+ } else {
+ if (!cur) this.unexpected();
+ cur.consequent.push(this.parseStatement(true));
+ }
+ }
+ if (cur) this.finishNode(cur, "SwitchCase");
+ this.next(); // Closing brace
+ this.state.labels.pop();
+ return this.finishNode(node, "SwitchStatement");
+};
+
+pp.parseThrowStatement = function (node) {
+ this.next();
+ if (_utilWhitespace.lineBreak.test(this.input.slice(this.state.lastTokEnd, this.state.start))) this.raise(this.state.lastTokEnd, "Illegal newline after throw");
+ node.argument = this.parseExpression();
+ this.semicolon();
+ return this.finishNode(node, "ThrowStatement");
+};
+
+// Reused empty array added for node fields that are always empty.
+
+var empty = [];
+
+pp.parseTryStatement = function (node) {
+ this.next();
+ node.block = this.parseBlock();
+ node.handler = null;
+ if (this.match(_tokenizerTypes.types._catch)) {
+ var clause = this.startNode();
+ this.next();
+ this.expect(_tokenizerTypes.types.parenL);
+ clause.param = this.parseBindingAtom();
+ this.checkLVal(clause.param, true);
+ this.expect(_tokenizerTypes.types.parenR);
+ clause.body = this.parseBlock();
+ node.handler = this.finishNode(clause, "CatchClause");
+ }
+
+ node.guardedHandlers = empty;
+ node.finalizer = this.eat(_tokenizerTypes.types._finally) ? this.parseBlock() : null;
+
+ if (!node.handler && !node.finalizer) {
+ this.raise(node.start, "Missing catch or finally clause");
+ }
+
+ return this.finishNode(node, "TryStatement");
+};
+
+pp.parseVarStatement = function (node, kind) {
+ this.next();
+ this.parseVar(node, false, kind);
+ this.semicolon();
+ return this.finishNode(node, "VariableDeclaration");
+};
+
+pp.parseWhileStatement = function (node) {
+ this.next();
+ node.test = this.parseParenExpression();
+ this.state.labels.push(loopLabel);
+ node.body = this.parseStatement(false);
+ this.state.labels.pop();
+ return this.finishNode(node, "WhileStatement");
+};
+
+pp.parseWithStatement = function (node) {
+ if (this.strict) this.raise(this.state.start, "'with' in strict mode");
+ this.next();
+ node.object = this.parseParenExpression();
+ node.body = this.parseStatement(false);
+ return this.finishNode(node, "WithStatement");
+};
+
+pp.parseEmptyStatement = function (node) {
+ this.next();
+ return this.finishNode(node, "EmptyStatement");
+};
+
+pp.parseLabeledStatement = function (node, maybeName, expr) {
+ var _arr = this.state.labels;
+
+ for (var _i = 0; _i < _arr.length; _i++) {
+ var label = _arr[_i];
+ if (label.name === maybeName) {
+ this.raise(expr.start, "Label '" + maybeName + "' is already declared");
+ }
+ }
+
+ var kind = this.state.type.isLoop ? "loop" : this.match(_tokenizerTypes.types._switch) ? "switch" : null;
+ for (var i = this.state.labels.length - 1; i >= 0; i--) {
+ var label = this.state.labels[i];
+ if (label.statementStart === node.start) {
+ label.statementStart = this.state.start;
+ label.kind = kind;
+ } else {
+ break;
+ }
+ }
+
+ this.state.labels.push({ name: maybeName, kind: kind, statementStart: this.state.start });
+ node.body = this.parseStatement(true);
+ this.state.labels.pop();
+ node.label = expr;
+ return this.finishNode(node, "LabeledStatement");
+};
+
+pp.parseExpressionStatement = function (node, expr) {
+ node.expression = expr;
+ this.semicolon();
+ return this.finishNode(node, "ExpressionStatement");
+};
+
+// Parse a semicolon-enclosed block of statements, handling `"use
+// strict"` declarations when `allowStrict` is true (used for
+// function bodies).
+
+pp.parseBlock = function (allowStrict) {
+ var node = this.startNode(),
+ first = true,
+ oldStrict = undefined;
+ node.body = [];
+ this.expect(_tokenizerTypes.types.braceL);
+ while (!this.eat(_tokenizerTypes.types.braceR)) {
+ var stmt = this.parseStatement(true);
+ node.body.push(stmt);
+ if (first && allowStrict && this.isUseStrict(stmt)) {
+ oldStrict = this.strict;
+ this.setStrict(this.strict = true);
+ }
+ first = false;
+ }
+ if (oldStrict === false) this.setStrict(false);
+ return this.finishNode(node, "BlockStatement");
+};
+
+// Parse a regular `for` loop. The disambiguation code in
+// `parseStatement` will already have parsed the init statement or
+// expression.
+
+pp.parseFor = function (node, init) {
+ node.init = init;
+ this.expect(_tokenizerTypes.types.semi);
+ node.test = this.match(_tokenizerTypes.types.semi) ? null : this.parseExpression();
+ this.expect(_tokenizerTypes.types.semi);
+ node.update = this.match(_tokenizerTypes.types.parenR) ? null : this.parseExpression();
+ this.expect(_tokenizerTypes.types.parenR);
+ node.body = this.parseStatement(false);
+ this.state.labels.pop();
+ return this.finishNode(node, "ForStatement");
+};
+
+// Parse a `for`/`in` and `for`/`of` loop, which are almost
+// same from parser's perspective.
+
+pp.parseForIn = function (node, init) {
+ var type = this.match(_tokenizerTypes.types._in) ? "ForInStatement" : "ForOfStatement";
+ this.next();
+ node.left = init;
+ node.right = this.parseExpression();
+ this.expect(_tokenizerTypes.types.parenR);
+ node.body = this.parseStatement(false);
+ this.state.labels.pop();
+ return this.finishNode(node, type);
+};
+
+// Parse a list of variable declarations.
+
+pp.parseVar = function (node, isFor, kind) {
+ node.declarations = [];
+ node.kind = kind.keyword;
+ for (;;) {
+ var decl = this.startNode();
+ this.parseVarHead(decl);
+ if (this.eat(_tokenizerTypes.types.eq)) {
+ decl.init = this.parseMaybeAssign(isFor);
+ } else if (kind === _tokenizerTypes.types._const && !(this.match(_tokenizerTypes.types._in) || this.isContextual("of"))) {
+ this.unexpected();
+ } else if (decl.id.type !== "Identifier" && !(isFor && (this.match(_tokenizerTypes.types._in) || this.isContextual("of")))) {
+ this.raise(this.state.lastTokEnd, "Complex binding patterns require an initialization value");
+ } else {
+ decl.init = null;
+ }
+ node.declarations.push(this.finishNode(decl, "VariableDeclarator"));
+ if (!this.eat(_tokenizerTypes.types.comma)) break;
+ }
+ return node;
+};
+
+pp.parseVarHead = function (decl) {
+ decl.id = this.parseBindingAtom();
+ this.checkLVal(decl.id, true);
+};
+
+// Parse a function declaration or literal (depending on the
+// `isStatement` parameter).
+
+pp.parseFunction = function (node, isStatement, allowExpressionBody, isAsync) {
+ this.initFunction(node, isAsync);
+ node.generator = this.eat(_tokenizerTypes.types.star);
+
+ if (isStatement || this.match(_tokenizerTypes.types.name)) {
+ node.id = this.parseIdent();
+ }
+
+ this.parseFunctionParams(node);
+ this.parseFunctionBody(node, allowExpressionBody);
+ return this.finishNode(node, isStatement ? "FunctionDeclaration" : "FunctionExpression");
+};
+
+pp.parseFunctionParams = function (node) {
+ this.expect(_tokenizerTypes.types.parenL);
+ node.params = this.parseBindingList(_tokenizerTypes.types.parenR, false, this.options.features["es7.trailingFunctionCommas"]);
+};
+
+// Parse a class declaration or literal (depending on the
+// `isStatement` parameter).
+
+pp.parseClass = function (node, isStatement) {
+ this.next();
+ this.parseClassId(node, isStatement);
+ this.parseClassSuper(node);
+ var classBody = this.startNode();
+ var hadConstructor = false;
+ classBody.body = [];
+ this.expect(_tokenizerTypes.types.braceL);
+ var decorators = [];
+ while (!this.eat(_tokenizerTypes.types.braceR)) {
+ if (this.eat(_tokenizerTypes.types.semi)) continue;
+ if (this.match(_tokenizerTypes.types.at)) {
+ decorators.push(this.parseDecorator());
+ continue;
+ }
+ var method = this.startNode();
+ if (decorators.length) {
+ method.decorators = decorators;
+ decorators = [];
+ }
+ var isMaybeStatic = this.match(_tokenizerTypes.types.name) && this.state.value === "static";
+ var isGenerator = this.eat(_tokenizerTypes.types.star),
+ isAsync = false;
+ this.parsePropertyName(method);
+ method["static"] = isMaybeStatic && !this.match(_tokenizerTypes.types.parenL);
+ if (method["static"]) {
+ if (isGenerator) this.unexpected();
+ isGenerator = this.eat(_tokenizerTypes.types.star);
+ this.parsePropertyName(method);
+ }
+ if (!isGenerator && method.key.type === "Identifier" && !method.computed && this.isClassProperty()) {
+ classBody.body.push(this.parseClassProperty(method));
+ continue;
+ }
+ if (this.options.features["es7.asyncFunctions"] && !this.match(_tokenizerTypes.types.parenL) && !method.computed && method.key.type === "Identifier" && method.key.name === "async") {
+ isAsync = true;
+ this.parsePropertyName(method);
+ }
+ var isGetSet = false;
+ method.kind = "method";
+ if (!method.computed) {
+ var key = method.key;
+
+ if (!isAsync && !isGenerator && key.type === "Identifier" && !this.match(_tokenizerTypes.types.parenL) && (key.name === "get" || key.name === "set")) {
+ isGetSet = true;
+ method.kind = key.name;
+ key = this.parsePropertyName(method);
+ }
+ if (!method["static"] && (key.type === "Identifier" && key.name === "constructor" || key.type === "Literal" && key.value === "constructor")) {
+ if (hadConstructor) this.raise(key.start, "Duplicate constructor in the same class");
+ if (isGetSet) this.raise(key.start, "Constructor can't have get/set modifier");
+ if (isGenerator) this.raise(key.start, "Constructor can't be a generator");
+ if (isAsync) this.raise(key.start, "Constructor can't be an async function");
+ method.kind = "constructor";
+ hadConstructor = true;
+ }
+ }
+ if (method.kind === "constructor" && method.decorators) {
+ this.raise(method.start, "You can't attach decorators to a class constructor");
+ }
+ this.parseClassMethod(classBody, method, isGenerator, isAsync);
+ if (isGetSet) {
+ var paramCount = method.kind === "get" ? 0 : 1;
+ if (method.value.params.length !== paramCount) {
+ var start = method.value.start;
+ if (method.kind === "get") {
+ this.raise(start, "getter should have no params");
+ } else {
+ this.raise(start, "setter should have exactly one param");
+ }
+ }
+ }
+ }
+
+ if (decorators.length) {
+ this.raise(this.state.start, "You have trailing decorators with no method");
+ }
+
+ node.body = this.finishNode(classBody, "ClassBody");
+ return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression");
+};
+
+pp.isClassProperty = function () {
+ return this.match(_tokenizerTypes.types.eq) || this.match(_tokenizerTypes.types.semi) || this.canInsertSemicolon();
+};
+
+pp.parseClassProperty = function (node) {
+ if (this.match(_tokenizerTypes.types.eq)) {
+ if (!this.options.features["es7.classProperties"]) this.unexpected();
+ this.next();
+ node.value = this.parseMaybeAssign();
+ } else {
+ node.value = null;
+ }
+ this.semicolon();
+ return this.finishNode(node, "ClassProperty");
+};
+
+pp.parseClassMethod = function (classBody, method, isGenerator, isAsync) {
+ method.value = this.parseMethod(isGenerator, isAsync);
+ classBody.body.push(this.finishNode(method, "MethodDefinition"));
+};
+
+pp.parseClassId = function (node, isStatement) {
+ node.id = this.match(_tokenizerTypes.types.name) ? this.parseIdent() : isStatement ? this.unexpected() : null;
+};
+
+pp.parseClassSuper = function (node) {
+ node.superClass = this.eat(_tokenizerTypes.types._extends) ? this.parseExprSubscripts() : null;
+};
+
+// Parses module export declaration.
+
+pp.parseExport = function (node) {
+ this.next();
+ // export * from '...'
+ if (this.match(_tokenizerTypes.types.star)) {
+ var specifier = this.startNode();
+ this.next();
+ if (this.options.features["es7.exportExtensions"] && this.eatContextual("as")) {
+ specifier.exported = this.parseIdent();
+ node.specifiers = [this.finishNode(specifier, "ExportNamespaceSpecifier")];
+ this.parseExportSpecifiersMaybe(node);
+ this.parseExportFrom(node, true);
+ } else {
+ this.parseExportFrom(node, true);
+ return this.finishNode(node, "ExportAllDeclaration");
+ }
+ } else if (this.options.features["es7.exportExtensions"] && this.isExportDefaultSpecifier()) {
+ var specifier = this.startNode();
+ specifier.exported = this.parseIdent(true);
+ node.specifiers = [this.finishNode(specifier, "ExportDefaultSpecifier")];
+ if (this.match(_tokenizerTypes.types.comma) && this.lookahead().type === _tokenizerTypes.types.star) {
+ this.expect(_tokenizerTypes.types.comma);
+ var _specifier = this.startNode();
+ this.expect(_tokenizerTypes.types.star);
+ this.expectContextual("as");
+ _specifier.exported = this.parseIdent();
+ node.specifiers.push(this.finishNode(_specifier, "ExportNamespaceSpecifier"));
+ } else {
+ this.parseExportSpecifiersMaybe(node);
+ }
+ this.parseExportFrom(node, true);
+ } else if (this.eat(_tokenizerTypes.types._default)) {
+ // export default ...
+ var possibleDeclaration = this.match(_tokenizerTypes.types._function) || this.match(_tokenizerTypes.types._class);
+ var expr = this.parseMaybeAssign();
+ var needsSemi = true;
+ if (possibleDeclaration) {
+ needsSemi = false;
+ if (expr.id) {
+ expr.type = expr.type === "FunctionExpression" ? "FunctionDeclaration" : "ClassDeclaration";
+ }
+ }
+ node.declaration = expr;
+ if (needsSemi) this.semicolon();
+ this.checkExport(node);
+ return this.finishNode(node, "ExportDefaultDeclaration");
+ } else if (this.state.type.keyword || this.shouldParseExportDeclaration()) {
+ node.specifiers = [];
+ node.source = null;
+ node.declaration = this.parseExportDeclaration(node);
+ } else {
+ // export { x, y as z } [from '...']
+ node.declaration = null;
+ node.specifiers = this.parseExportSpecifiers();
+ this.parseExportFrom(node);
+ }
+ this.checkExport(node);
+ return this.finishNode(node, "ExportNamedDeclaration");
+};
+
+pp.parseExportDeclaration = function () {
+ return this.parseStatement(true);
+};
+
+pp.isExportDefaultSpecifier = function () {
+ if (this.match(_tokenizerTypes.types.name)) {
+ return this.state.value !== "type" && this.state.value !== "async" && this.state.value !== "interface";
+ }
+
+ if (!this.match(_tokenizerTypes.types._default)) {
+ return false;
+ }
+
+ var lookahead = this.lookahead();
+ return lookahead.type === _tokenizerTypes.types.comma || lookahead.type === _tokenizerTypes.types.name && lookahead.value === "from";
+};
+
+pp.parseExportSpecifiersMaybe = function (node) {
+ if (this.eat(_tokenizerTypes.types.comma)) {
+ node.specifiers = node.specifiers.concat(this.parseExportSpecifiers());
+ }
+};
+
+pp.parseExportFrom = function (node, expect) {
+ if (this.eatContextual("from")) {
+ node.source = this.match(_tokenizerTypes.types.string) ? this.parseExprAtom() : this.unexpected();
+ this.checkExport(node);
+ } else {
+ if (expect) {
+ this.unexpected();
+ } else {
+ node.source = null;
+ }
+ }
+
+ this.semicolon();
+};
+
+pp.shouldParseExportDeclaration = function () {
+ return this.options.features["es7.asyncFunctions"] && this.isContextual("async");
+};
+
+pp.checkExport = function (node) {
+ if (this.state.decorators.length) {
+ var isClass = node.declaration && (node.declaration.type === "ClassDeclaration" || node.declaration.type === "ClassExpression");
+ if (!node.declaration || !isClass) {
+ this.raise(node.start, "You can only use decorators on an export when exporting a class");
+ }
+ this.takeDecorators(node.declaration);
+ }
+};
+
+// Parses a comma-separated list of module exports.
+
+pp.parseExportSpecifiers = function () {
+ var nodes = [],
+ first = true;
+ // export { x, y as z } [from '...']
+ this.expect(_tokenizerTypes.types.braceL);
+
+ while (!this.eat(_tokenizerTypes.types.braceR)) {
+ if (first) {
+ first = false;
+ } else {
+ this.expect(_tokenizerTypes.types.comma);
+ if (this.eat(_tokenizerTypes.types.braceR)) break;
+ }
+
+ var node = this.startNode();
+ node.local = this.parseIdent(this.match(_tokenizerTypes.types._default));
+ node.exported = this.eatContextual("as") ? this.parseIdent(true) : node.local.__clone();
+ nodes.push(this.finishNode(node, "ExportSpecifier"));
+ }
+
+ return nodes;
+};
+
+// Parses import declaration.
+
+pp.parseImport = function (node) {
+ this.next();
+
+ // import '...'
+ if (this.match(_tokenizerTypes.types.string)) {
+ node.specifiers = [];
+ node.source = this.parseExprAtom();
+ } else {
+ node.specifiers = [];
+ this.parseImportSpecifiers(node);
+ this.expectContextual("from");
+ node.source = this.match(_tokenizerTypes.types.string) ? this.parseExprAtom() : this.unexpected();
+ }
+ this.semicolon();
+ return this.finishNode(node, "ImportDeclaration");
+};
+
+// Parses a comma-separated list of module imports.
+
+pp.parseImportSpecifiers = function (node) {
+ var first = true;
+ if (this.match(_tokenizerTypes.types.name)) {
+ // import defaultObj, { x, y as z } from '...'
+ var startPos = this.state.start,
+ startLoc = this.state.startLoc;
+ node.specifiers.push(this.parseImportSpecifierDefault(this.parseIdent(), startPos, startLoc));
+ if (!this.eat(_tokenizerTypes.types.comma)) return;
+ }
+
+ if (this.match(_tokenizerTypes.types.star)) {
+ var specifier = this.startNode();
+ this.next();
+ this.expectContextual("as");
+ specifier.local = this.parseIdent();
+ this.checkLVal(specifier.local, true);
+ node.specifiers.push(this.finishNode(specifier, "ImportNamespaceSpecifier"));
+ return;
+ }
+
+ this.expect(_tokenizerTypes.types.braceL);
+ while (!this.eat(_tokenizerTypes.types.braceR)) {
+ if (first) {
+ first = false;
+ } else {
+ this.expect(_tokenizerTypes.types.comma);
+ if (this.eat(_tokenizerTypes.types.braceR)) break;
+ }
+
+ var specifier = this.startNode();
+ specifier.imported = this.parseIdent(true);
+ specifier.local = this.eatContextual("as") ? this.parseIdent() : specifier.imported.__clone();
+ this.checkLVal(specifier.local, true);
+ node.specifiers.push(this.finishNode(specifier, "ImportSpecifier"));
+ }
+};
+
+pp.parseImportSpecifierDefault = function (id, startPos, startLoc) {
+ var node = this.startNodeAt(startPos, startLoc);
+ node.local = id;
+ this.checkLVal(node.local, true);
+ return this.finishNode(node, "ImportDefaultSpecifier");
+};
+},{"616":616,"628":628,"631":631}],621:[function(_dereq_,module,exports){
+"use strict";
+
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+var _tokenizerTypes = _dereq_(628);
+
+var _index = _dereq_(616);
+
+var _index2 = _interopRequireDefault(_index);
+
+var _utilWhitespace = _dereq_(631);
+
+var pp = _index2["default"].prototype;
+
+// ## Parser utilities
+
+// Test whether a statement node is the string literal `"use strict"`.
+
+pp.isUseStrict = function (stmt) {
+ return stmt.type === "ExpressionStatement" && stmt.expression.type === "Literal" && stmt.expression.raw.slice(1, -1) === "use strict";
+};
+
+// TODO
+
+pp.isRelational = function (op) {
+ return this.match(_tokenizerTypes.types.relational) && this.state.value === op;
+};
+
+// TODO
+
+pp.expectRelational = function (op) {
+ if (this.isRelational(op)) {
+ this.next();
+ } else {
+ this.unexpected();
+ }
+};
+
+// Tests whether parsed token is a contextual keyword.
+
+pp.isContextual = function (name) {
+ return this.match(_tokenizerTypes.types.name) && this.state.value === name;
+};
+
+// Consumes contextual keyword if possible.
+
+pp.eatContextual = function (name) {
+ return this.state.value === name && this.eat(_tokenizerTypes.types.name);
+};
+
+// Asserts that following token is given contextual keyword.
+
+pp.expectContextual = function (name) {
+ if (!this.eatContextual(name)) this.unexpected();
+};
+
+// Test whether a semicolon can be inserted at the current position.
+
+pp.canInsertSemicolon = function () {
+ return this.match(_tokenizerTypes.types.eof) || this.match(_tokenizerTypes.types.braceR) || _utilWhitespace.lineBreak.test(this.input.slice(this.state.lastTokEnd, this.state.start));
+};
+
+// Consume a semicolon, or, failing that, see if we are allowed to
+// pretend that there is a semicolon at this position.
+
+pp.semicolon = function () {
+ if (!this.eat(_tokenizerTypes.types.semi) && !this.canInsertSemicolon()) this.unexpected();
+};
+
+// Expect a token of a given type. If found, consume it, otherwise,
+// raise an unexpected token error.
+
+pp.expect = function (type) {
+ return this.eat(type) || this.unexpected();
+};
+
+// Raise an unexpected token error.
+
+pp.unexpected = function (pos) {
+ this.raise(pos != null ? pos : this.state.start, "Unexpected token");
+};
+},{"616":616,"628":628,"631":631}],622:[function(_dereq_,module,exports){
+"use strict";
+
+exports.__esModule = true;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+var _tokenizerTypes = _dereq_(628);
+
+var _parser = _dereq_(616);
+
+var _parser2 = _interopRequireDefault(_parser);
+
+var pp = _parser2["default"].prototype;
+
+pp.flowParseTypeInitialiser = function (tok) {
+ var oldInType = this.state.inType;
+ this.state.inType = true;
+ this.expect(tok || _tokenizerTypes.types.colon);
+ var type = this.flowParseType();
+ this.state.inType = oldInType;
+ return type;
+};
+
+pp.flowParseDeclareClass = function (node) {
+ this.next();
+ this.flowParseInterfaceish(node, true);
+ return this.finishNode(node, "DeclareClass");
+};
+
+pp.flowParseDeclareFunction = function (node) {
+ this.next();
+
+ var id = node.id = this.parseIdent();
+
+ var typeNode = this.startNode();
+ var typeContainer = this.startNode();
+
+ if (this.isRelational("<")) {
+ typeNode.typeParameters = this.flowParseTypeParameterDeclaration();
+ } else {
+ typeNode.typeParameters = null;
+ }
+
+ this.expect(_tokenizerTypes.types.parenL);
+ var tmp = this.flowParseFunctionTypeParams();
+ typeNode.params = tmp.params;
+ typeNode.rest = tmp.rest;
+ this.expect(_tokenizerTypes.types.parenR);
+ typeNode.returnType = this.flowParseTypeInitialiser();
+
+ typeContainer.typeAnnotation = this.finishNode(typeNode, "FunctionTypeAnnotation");
+ id.typeAnnotation = this.finishNode(typeContainer, "TypeAnnotation");
+
+ this.finishNode(id, id.type);
+
+ this.semicolon();
+
+ return this.finishNode(node, "DeclareFunction");
+};
+
+pp.flowParseDeclare = function (node) {
+ if (this.match(_tokenizerTypes.types._class)) {
+ return this.flowParseDeclareClass(node);
+ } else if (this.match(_tokenizerTypes.types._function)) {
+ return this.flowParseDeclareFunction(node);
+ } else if (this.match(_tokenizerTypes.types._var)) {
+ return this.flowParseDeclareVariable(node);
+ } else if (this.isContextual("module")) {
+ return this.flowParseDeclareModule(node);
+ } else if (this.isContextual("type")) {
+ return this.flowParseDeclareTypeAlias(node);
+ } else if (this.isContextual("interface")) {
+ return this.flowParseDeclareInterface(node);
+ } else {
+ this.unexpected();
+ }
+};
+
+pp.flowParseDeclareVariable = function (node) {
+ this.next();
+ node.id = this.flowParseTypeAnnotatableIdentifier();
+ this.semicolon();
+ return this.finishNode(node, "DeclareVariable");
+};
+
+pp.flowParseDeclareModule = function (node) {
+ this.next();
+
+ if (this.match(_tokenizerTypes.types.string)) {
+ node.id = this.parseExprAtom();
+ } else {
+ node.id = this.parseIdent();
+ }
+
+ var bodyNode = node.body = this.startNode();
+ var body = bodyNode.body = [];
+ this.expect(_tokenizerTypes.types.braceL);
+ while (!this.match(_tokenizerTypes.types.braceR)) {
+ var node2 = this.startNode();
+
+ // todo: declare check
+ this.next();
+
+ body.push(this.flowParseDeclare(node2));
+ }
+ this.expect(_tokenizerTypes.types.braceR);
+
+ this.finishNode(bodyNode, "BlockStatement");
+ return this.finishNode(node, "DeclareModule");
+};
+
+pp.flowParseDeclareTypeAlias = function (node) {
+ this.next();
+ this.flowParseTypeAlias(node);
+ return this.finishNode(node, "DeclareTypeAlias");
+};
+
+pp.flowParseDeclareInterface = function (node) {
+ this.next();
+ this.flowParseInterfaceish(node);
+ return this.finishNode(node, "DeclareInterface");
+};
+
+// Interfaces
+
+pp.flowParseInterfaceish = function (node, allowStatic) {
+ node.id = this.parseIdent();
+
+ if (this.isRelational("<")) {
+ node.typeParameters = this.flowParseTypeParameterDeclaration();
+ } else {
+ node.typeParameters = null;
+ }
+
+ node["extends"] = [];
+ node.mixins = [];
+
+ if (this.eat(_tokenizerTypes.types._extends)) {
+ do {
+ node["extends"].push(this.flowParseInterfaceExtends());
+ } while (this.eat(_tokenizerTypes.types.comma));
+ }
+
+ if (this.isContextual("mixins")) {
+ this.next();
+ do {
+ node.mixins.push(this.flowParseInterfaceExtends());
+ } while (this.eat(_tokenizerTypes.types.comma));
+ }
+
+ node.body = this.flowParseObjectType(allowStatic);
+};
+
+pp.flowParseInterfaceExtends = function () {
+ var node = this.startNode();
+
+ node.id = this.parseIdent();
+ if (this.isRelational("<")) {
+ node.typeParameters = this.flowParseTypeParameterInstantiation();
+ } else {
+ node.typeParameters = null;
+ }
+
+ return this.finishNode(node, "InterfaceExtends");
+};
+
+pp.flowParseInterface = function (node) {
+ this.flowParseInterfaceish(node, false);
+ return this.finishNode(node, "InterfaceDeclaration");
+};
+
+// Type aliases
+
+pp.flowParseTypeAlias = function (node) {
+ node.id = this.parseIdent();
+
+ if (this.isRelational("<")) {
+ node.typeParameters = this.flowParseTypeParameterDeclaration();
+ } else {
+ node.typeParameters = null;
+ }
+
+ node.right = this.flowParseTypeInitialiser(_tokenizerTypes.types.eq);
+ this.semicolon();
+
+ return this.finishNode(node, "TypeAlias");
+};
+
+// Type annotations
+
+pp.flowParseTypeParameterDeclaration = function () {
+ var node = this.startNode();
+ node.params = [];
+
+ this.expectRelational("<");
+ while (!this.isRelational(">")) {
+ node.params.push(this.flowParseTypeAnnotatableIdentifier());
+ if (!this.isRelational(">")) {
+ this.expect(_tokenizerTypes.types.comma);
+ }
+ }
+ this.expectRelational(">");
+
+ return this.finishNode(node, "TypeParameterDeclaration");
+};
+
+pp.flowParseTypeParameterInstantiation = function () {
+ var node = this.startNode(),
+ oldInType = this.state.inType;
+ node.params = [];
+
+ this.state.inType = true;
+
+ this.expectRelational("<");
+ while (!this.isRelational(">")) {
+ node.params.push(this.flowParseType());
+ if (!this.isRelational(">")) {
+ this.expect(_tokenizerTypes.types.comma);
+ }
+ }
+ this.expectRelational(">");
+
+ this.state.inType = oldInType;
+
+ return this.finishNode(node, "TypeParameterInstantiation");
+};
+
+pp.flowParseObjectPropertyKey = function () {
+ return this.match(_tokenizerTypes.types.num) || this.match(_tokenizerTypes.types.string) ? this.parseExprAtom() : this.parseIdent(true);
+};
+
+pp.flowParseObjectTypeIndexer = function (node, isStatic) {
+ node["static"] = isStatic;
+
+ this.expect(_tokenizerTypes.types.bracketL);
+ node.id = this.flowParseObjectPropertyKey();
+ node.key = this.flowParseTypeInitialiser();
+ this.expect(_tokenizerTypes.types.bracketR);
+ node.value = this.flowParseTypeInitialiser();
+
+ this.flowObjectTypeSemicolon();
+ return this.finishNode(node, "ObjectTypeIndexer");
+};
+
+pp.flowParseObjectTypeMethodish = function (node) {
+ node.params = [];
+ node.rest = null;
+ node.typeParameters = null;
+
+ if (this.isRelational("<")) {
+ node.typeParameters = this.flowParseTypeParameterDeclaration();
+ }
+
+ this.expect(_tokenizerTypes.types.parenL);
+ while (this.match(_tokenizerTypes.types.name)) {
+ node.params.push(this.flowParseFunctionTypeParam());
+ if (!this.match(_tokenizerTypes.types.parenR)) {
+ this.expect(_tokenizerTypes.types.comma);
+ }
+ }
+
+ if (this.eat(_tokenizerTypes.types.ellipsis)) {
+ node.rest = this.flowParseFunctionTypeParam();
+ }
+ this.expect(_tokenizerTypes.types.parenR);
+ node.returnType = this.flowParseTypeInitialiser();
+
+ return this.finishNode(node, "FunctionTypeAnnotation");
+};
+
+pp.flowParseObjectTypeMethod = function (startPos, startLoc, isStatic, key) {
+ var node = this.startNodeAt(startPos, startLoc);
+ node.value = this.flowParseObjectTypeMethodish(this.startNodeAt(startPos, startLoc));
+ node["static"] = isStatic;
+ node.key = key;
+ node.optional = false;
+ this.flowObjectTypeSemicolon();
+ return this.finishNode(node, "ObjectTypeProperty");
+};
+
+pp.flowParseObjectTypeCallProperty = function (node, isStatic) {
+ var valueNode = this.startNode();
+ node["static"] = isStatic;
+ node.value = this.flowParseObjectTypeMethodish(valueNode);
+ this.flowObjectTypeSemicolon();
+ return this.finishNode(node, "ObjectTypeCallProperty");
+};
+
+pp.flowParseObjectType = function (allowStatic) {
+ var nodeStart = this.startNode();
+ var node;
+ var propertyKey;
+ var isStatic;
+
+ nodeStart.callProperties = [];
+ nodeStart.properties = [];
+ nodeStart.indexers = [];
+
+ this.expect(_tokenizerTypes.types.braceL);
+
+ while (!this.match(_tokenizerTypes.types.braceR)) {
+ var optional = false;
+ var startPos = this.state.start,
+ startLoc = this.state.startLoc;
+ node = this.startNode();
+ if (allowStatic && this.isContextual("static")) {
+ this.next();
+ isStatic = true;
+ }
+
+ if (this.match(_tokenizerTypes.types.bracketL)) {
+ nodeStart.indexers.push(this.flowParseObjectTypeIndexer(node, isStatic));
+ } else if (this.match(_tokenizerTypes.types.parenL) || this.isRelational("<")) {
+ nodeStart.callProperties.push(this.flowParseObjectTypeCallProperty(node, allowStatic));
+ } else {
+ if (isStatic && this.match(_tokenizerTypes.types.colon)) {
+ propertyKey = this.parseIdent();
+ } else {
+ propertyKey = this.flowParseObjectPropertyKey();
+ }
+ if (this.isRelational("<") || this.match(_tokenizerTypes.types.parenL)) {
+ // This is a method property
+ nodeStart.properties.push(this.flowParseObjectTypeMethod(startPos, startLoc, isStatic, propertyKey));
+ } else {
+ if (this.eat(_tokenizerTypes.types.question)) {
+ optional = true;
+ }
+ node.key = propertyKey;
+ node.value = this.flowParseTypeInitialiser();
+ node.optional = optional;
+ node["static"] = isStatic;
+ this.flowObjectTypeSemicolon();
+ nodeStart.properties.push(this.finishNode(node, "ObjectTypeProperty"));
+ }
+ }
+ }
+
+ this.expect(_tokenizerTypes.types.braceR);
+
+ return this.finishNode(nodeStart, "ObjectTypeAnnotation");
+};
+
+pp.flowObjectTypeSemicolon = function () {
+ if (!this.eat(_tokenizerTypes.types.semi) && !this.eat(_tokenizerTypes.types.comma) && !this.match(_tokenizerTypes.types.braceR)) {
+ this.unexpected();
+ }
+};
+
+pp.flowParseGenericType = function (startPos, startLoc, id) {
+ var node = this.startNodeAt(startPos, startLoc);
+
+ node.typeParameters = null;
+ node.id = id;
+
+ while (this.eat(_tokenizerTypes.types.dot)) {
+ var node2 = this.startNodeAt(startPos, startLoc);
+ node2.qualification = node.id;
+ node2.id = this.parseIdent();
+ node.id = this.finishNode(node2, "QualifiedTypeIdentifier");
+ }
+
+ if (this.isRelational("<")) {
+ node.typeParameters = this.flowParseTypeParameterInstantiation();
+ }
+
+ return this.finishNode(node, "GenericTypeAnnotation");
+};
+
+pp.flowParseTypeofType = function () {
+ var node = this.startNode();
+ this.expect(_tokenizerTypes.types._typeof);
+ node.argument = this.flowParsePrimaryType();
+ return this.finishNode(node, "TypeofTypeAnnotation");
+};
+
+pp.flowParseTupleType = function () {
+ var node = this.startNode();
+ node.types = [];
+ this.expect(_tokenizerTypes.types.bracketL);
+ // We allow trailing commas
+ while (this.state.pos < this.input.length && !this.match(_tokenizerTypes.types.bracketR)) {
+ node.types.push(this.flowParseType());
+ if (this.match(_tokenizerTypes.types.bracketR)) break;
+ this.expect(_tokenizerTypes.types.comma);
+ }
+ this.expect(_tokenizerTypes.types.bracketR);
+ return this.finishNode(node, "TupleTypeAnnotation");
+};
+
+pp.flowParseFunctionTypeParam = function () {
+ var optional = false;
+ var node = this.startNode();
+ node.name = this.parseIdent();
+ if (this.eat(_tokenizerTypes.types.question)) {
+ optional = true;
+ }
+ node.optional = optional;
+ node.typeAnnotation = this.flowParseTypeInitialiser();
+ return this.finishNode(node, "FunctionTypeParam");
+};
+
+pp.flowParseFunctionTypeParams = function () {
+ var ret = { params: [], rest: null };
+ while (this.match(_tokenizerTypes.types.name)) {
+ ret.params.push(this.flowParseFunctionTypeParam());
+ if (!this.match(_tokenizerTypes.types.parenR)) {
+ this.expect(_tokenizerTypes.types.comma);
+ }
+ }
+ if (this.eat(_tokenizerTypes.types.ellipsis)) {
+ ret.rest = this.flowParseFunctionTypeParam();
+ }
+ return ret;
+};
+
+pp.flowIdentToTypeAnnotation = function (startPos, startLoc, node, id) {
+ switch (id.name) {
+ case "any":
+ return this.finishNode(node, "AnyTypeAnnotation");
+
+ case "void":
+ return this.finishNode(node, "VoidTypeAnnotation");
+
+ case "bool":
+ case "boolean":
+ return this.finishNode(node, "BooleanTypeAnnotation");
+
+ case "mixed":
+ return this.finishNode(node, "MixedTypeAnnotation");
+
+ case "number":
+ return this.finishNode(node, "NumberTypeAnnotation");
+
+ case "string":
+ return this.finishNode(node, "StringTypeAnnotation");
+
+ default:
+ return this.flowParseGenericType(startPos, startLoc, id);
+ }
+};
+
+// The parsing of types roughly parallels the parsing of expressions, and
+// primary types are kind of like primary expressions...they're the
+// primitives with which other types are constructed.
+pp.flowParsePrimaryType = function () {
+ var startPos = this.state.start,
+ startLoc = this.state.startLoc;
+ var node = this.startNode();
+ var tmp;
+ var type;
+ var isGroupedType = false;
+
+ switch (this.state.type) {
+ case _tokenizerTypes.types.name:
+ return this.flowIdentToTypeAnnotation(startPos, startLoc, node, this.parseIdent());
+
+ case _tokenizerTypes.types.braceL:
+ return this.flowParseObjectType();
+
+ case _tokenizerTypes.types.bracketL:
+ return this.flowParseTupleType();
+
+ case _tokenizerTypes.types.relational:
+ if (this.state.value === "<") {
+ node.typeParameters = this.flowParseTypeParameterDeclaration();
+ this.expect(_tokenizerTypes.types.parenL);
+ tmp = this.flowParseFunctionTypeParams();
+ node.params = tmp.params;
+ node.rest = tmp.rest;
+ this.expect(_tokenizerTypes.types.parenR);
+
+ this.expect(_tokenizerTypes.types.arrow);
+
+ node.returnType = this.flowParseType();
+
+ return this.finishNode(node, "FunctionTypeAnnotation");
+ }
+
+ case _tokenizerTypes.types.parenL:
+ this.next();
+
+ // Check to see if this is actually a grouped type
+ if (!this.match(_tokenizerTypes.types.parenR) && !this.match(_tokenizerTypes.types.ellipsis)) {
+ if (this.match(_tokenizerTypes.types.name)) {
+ var token = this.lookahead().type;
+ isGroupedType = token !== _tokenizerTypes.types.question && token !== _tokenizerTypes.types.colon;
+ } else {
+ isGroupedType = true;
+ }
+ }
+
+ if (isGroupedType) {
+ type = this.flowParseType();
+ this.expect(_tokenizerTypes.types.parenR);
+
+ // If we see a => next then someone was probably confused about
+ // function types, so we can provide a better error message
+ if (this.eat(_tokenizerTypes.types.arrow)) {
+ this.raise(node, "Unexpected token =>. It looks like " + "you are trying to write a function type, but you ended up " + "writing a grouped type followed by an =>, which is a syntax " + "error. Remember, function type parameters are named so function " + "types look like (name1: type1, name2: type2) => returnType. You " + "probably wrote (type1) => returnType");
+ }
+
+ return type;
+ }
+
+ tmp = this.flowParseFunctionTypeParams();
+ node.params = tmp.params;
+ node.rest = tmp.rest;
+
+ this.expect(_tokenizerTypes.types.parenR);
+
+ this.expect(_tokenizerTypes.types.arrow);
+
+ node.returnType = this.flowParseType();
+ node.typeParameters = null;
+
+ return this.finishNode(node, "FunctionTypeAnnotation");
+
+ case _tokenizerTypes.types.string:
+ node.rawValue = node.value = this.state.value;
+ node.raw = this.input.slice(this.state.start, this.state.end);
+ this.next();
+ return this.finishNode(node, "StringLiteralTypeAnnotation");
+
+ case _tokenizerTypes.types._true:case _tokenizerTypes.types._false:
+ node.value = this.match(_tokenizerTypes.types._true);
+ this.next();
+ return this.finishNode(node, "BooleanLiteralTypeAnnotation");
+
+ case _tokenizerTypes.types.num:
+ node.rawValue = node.value = this.state.value;
+ node.raw = this.input.slice(this.state.start, this.state.end);
+ this.next();
+ return this.finishNode(node, "NumberLiteralTypeAnnotation");
+
+ case _tokenizerTypes.types._null:
+ node.value = this.match(_tokenizerTypes.types._null);
+ this.next();
+ return this.finishNode(node, "NullLiteralTypeAnnotation");
+
+ case _tokenizerTypes.types._this:
+ node.value = this.match(_tokenizerTypes.types._this);
+ this.next();
+ return this.finishNode(node, "ThisTypeAnnotation");
+
+ default:
+ if (this.state.type.keyword === "typeof") {
+ return this.flowParseTypeofType();
+ }
+ }
+
+ this.unexpected();
+};
+
+pp.flowParsePostfixType = function () {
+ var node = this.startNode();
+ var type = node.elementType = this.flowParsePrimaryType();
+ if (this.match(_tokenizerTypes.types.bracketL)) {
+ this.expect(_tokenizerTypes.types.bracketL);
+ this.expect(_tokenizerTypes.types.bracketR);
+ return this.finishNode(node, "ArrayTypeAnnotation");
+ } else {
+ return type;
+ }
+};
+
+pp.flowParsePrefixType = function () {
+ var node = this.startNode();
+ if (this.eat(_tokenizerTypes.types.question)) {
+ node.typeAnnotation = this.flowParsePrefixType();
+ return this.finishNode(node, "NullableTypeAnnotation");
+ } else {
+ return this.flowParsePostfixType();
+ }
+};
+
+pp.flowParseIntersectionType = function () {
+ var node = this.startNode();
+ var type = this.flowParsePrefixType();
+ node.types = [type];
+ while (this.eat(_tokenizerTypes.types.bitwiseAND)) {
+ node.types.push(this.flowParsePrefixType());
+ }
+ return node.types.length === 1 ? type : this.finishNode(node, "IntersectionTypeAnnotation");
+};
+
+pp.flowParseUnionType = function () {
+ var node = this.startNode();
+ var type = this.flowParseIntersectionType();
+ node.types = [type];
+ while (this.eat(_tokenizerTypes.types.bitwiseOR)) {
+ node.types.push(this.flowParseIntersectionType());
+ }
+ return node.types.length === 1 ? type : this.finishNode(node, "UnionTypeAnnotation");
+};
+
+pp.flowParseType = function () {
+ var oldInType = this.state.inType;
+ this.state.inType = true;
+ var type = this.flowParseUnionType();
+ this.state.inType = oldInType;
+ return type;
+};
+
+pp.flowParseTypeAnnotation = function () {
+ var node = this.startNode();
+ node.typeAnnotation = this.flowParseTypeInitialiser();
+ return this.finishNode(node, "TypeAnnotation");
+};
+
+pp.flowParseTypeAnnotatableIdentifier = function (requireTypeAnnotation, canBeOptionalParam) {
+ var ident = this.parseIdent();
+ var isOptionalParam = false;
+
+ if (canBeOptionalParam && this.eat(_tokenizerTypes.types.question)) {
+ this.expect(_tokenizerTypes.types.question);
+ isOptionalParam = true;
+ }
+
+ if (requireTypeAnnotation || this.match(_tokenizerTypes.types.colon)) {
+ ident.typeAnnotation = this.flowParseTypeAnnotation();
+ this.finishNode(ident, ident.type);
+ }
+
+ if (isOptionalParam) {
+ ident.optional = true;
+ this.finishNode(ident, ident.type);
+ }
+
+ return ident;
+};
+
+exports["default"] = function (instance) {
+ // function name(): string {}
+ instance.extend("parseFunctionBody", function (inner) {
+ return function (node, allowExpression) {
+ if (this.match(_tokenizerTypes.types.colon) && !allowExpression) {
+ // if allowExpression is true then we're parsing an arrow function and if
+ // there's a return type then it's been handled elsewhere
+ node.returnType = this.flowParseTypeAnnotation();
+ }
+
+ return inner.call(this, node, allowExpression);
+ };
+ });
+
+ instance.extend("parseStatement", function (inner) {
+ return function (declaration, topLevel) {
+ // strict mode handling of `interface` since it's a reserved word
+ if (this.strict && this.match(_tokenizerTypes.types.name) && this.state.value === "interface") {
+ var node = this.startNode();
+ this.next();
+ return this.flowParseInterface(node);
+ } else {
+ return inner.call(this, declaration, topLevel);
+ }
+ };
+ });
+
+ instance.extend("parseExpressionStatement", function (inner) {
+ return function (node, expr) {
+ if (expr.type === "Identifier") {
+ if (expr.name === "declare") {
+ if (this.match(_tokenizerTypes.types._class) || this.match(_tokenizerTypes.types.name) || this.match(_tokenizerTypes.types._function) || this.match(_tokenizerTypes.types._var)) {
+ return this.flowParseDeclare(node);
+ }
+ } else if (this.match(_tokenizerTypes.types.name)) {
+ if (expr.name === "interface") {
+ return this.flowParseInterface(node);
+ } else if (expr.name === "type") {
+ return this.flowParseTypeAlias(node);
+ }
+ }
+ }
+
+ return inner.call(this, node, expr);
+ };
+ });
+
+ instance.extend("shouldParseExportDeclaration", function (inner) {
+ return function () {
+ return this.isContextual("type") || this.isContextual("interface") || inner.call(this);
+ };
+ });
+
+ instance.extend("parseParenItem", function () {
+ return function (node, startLoc, startPos, forceArrow) {
+ if (this.match(_tokenizerTypes.types.colon)) {
+ var typeCastNode = this.startNodeAt(startLoc, startPos);
+ typeCastNode.expression = node;
+ typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();
+
+ if (forceArrow && !this.match(_tokenizerTypes.types.arrow)) {
+ this.unexpected();
+ }
+
+ if (this.eat(_tokenizerTypes.types.arrow)) {
+ // ((lol): number => {});
+ var func = this.parseArrowExpression(this.startNodeAt(startLoc, startPos), [node]);
+ func.returnType = typeCastNode.typeAnnotation;
+ return func;
+ } else {
+ return this.finishNode(typeCastNode, "TypeCastExpression");
+ }
+ } else {
+ return node;
+ }
+ };
+ });
+
+ instance.extend("parseExport", function (inner) {
+ return function (node) {
+ node = inner.call(this, node);
+ if (node.type === "ExportNamedDeclaration") {
+ node.exportKind = node.exportKind || "value";
+ }
+ return node;
+ };
+ });
+
+ instance.extend("parseExportDeclaration", function (inner) {
+ return function (node) {
+ if (this.isContextual("type")) {
+ node.exportKind = "type";
+
+ var declarationNode = this.startNode();
+ this.next();
+
+ if (this.match(_tokenizerTypes.types.braceL)) {
+ // export type { foo, bar };
+ node.specifiers = this.parseExportSpecifiers();
+ this.parseExportFrom(node);
+ return null;
+ } else {
+ // export type Foo = Bar;
+ return this.flowParseTypeAlias(declarationNode);
+ }
+ } else if (this.isContextual("interface")) {
+ node.exportKind = "type";
+ var _declarationNode = this.startNode();
+ this.next();
+ return this.flowParseInterface(_declarationNode);
+ } else {
+ return inner.call(this, node);
+ }
+ };
+ });
+
+ instance.extend("parseClassId", function (inner) {
+ return function (node, isStatement) {
+ inner.call(this, node, isStatement);
+ if (this.isRelational("<")) {
+ node.typeParameters = this.flowParseTypeParameterDeclaration();
+ }
+ };
+ });
+
+ // don't consider `void` to be a keyword as then it'll use the void token type
+ // and set startExpr
+ instance.extend("isKeyword", function (inner) {
+ return function (name) {
+ if (this.state.inType && name === "void") {
+ return false;
+ } else {
+ return inner.call(this, name);
+ }
+ };
+ });
+
+ instance.extend("readToken", function (inner) {
+ return function (code) {
+ if (this.state.inType && (code === 62 || code === 60)) {
+ return this.finishOp(_tokenizerTypes.types.relational, 1);
+ } else {
+ return inner.call(this, code);
+ }
+ };
+ });
+
+ instance.extend("jsx_readToken", function (inner) {
+ return function () {
+ if (!this.state.inType) return inner.call(this);
+ };
+ });
+
+ function typeCastToParameter(node) {
+ node.expression.typeAnnotation = node.typeAnnotation;
+ return node.expression;
+ }
+
+ instance.extend("toAssignableList", function (inner) {
+ return function (exprList, isBinding) {
+ for (var i = 0; i < exprList.length; i++) {
+ var expr = exprList[i];
+ if (expr && expr.type === "TypeCastExpression") {
+ exprList[i] = typeCastToParameter(expr);
+ }
+ }
+ return inner.call(this, exprList, isBinding);
+ };
+ });
+
+ instance.extend("toReferencedList", function () {
+ return function (exprList) {
+ for (var i = 0; i < exprList.length; i++) {
+ var expr = exprList[i];
+ if (expr && expr._exprListItem && expr.type === "TypeCastExpression") {
+ this.raise(expr.start, "Unexpected type cast");
+ }
+ }
+
+ return exprList;
+ };
+ });
+
+ instance.extend("parseExprListItem", function (inner) {
+ return function (allowEmpty, refShorthandDefaultPos) {
+ var container = this.startNode();
+ var node = inner.call(this, allowEmpty, refShorthandDefaultPos);
+ if (this.match(_tokenizerTypes.types.colon)) {
+ container._exprListItem = true;
+ container.expression = node;
+ container.typeAnnotation = this.flowParseTypeAnnotation();
+ return this.finishNode(container, "TypeCastExpression");
+ } else {
+ return node;
+ }
+ };
+ });
+
+ instance.extend("parseClassProperty", function (inner) {
+ return function (node) {
+ if (this.match(_tokenizerTypes.types.colon)) {
+ node.typeAnnotation = this.flowParseTypeAnnotation();
+ }
+ return inner.call(this, node);
+ };
+ });
+
+ instance.extend("isClassProperty", function (inner) {
+ return function () {
+ return this.match(_tokenizerTypes.types.colon) || inner.call(this);
+ };
+ });
+
+ instance.extend("parseClassMethod", function () {
+ return function (classBody, method, isGenerator, isAsync) {
+ var typeParameters;
+ if (this.isRelational("<")) {
+ typeParameters = this.flowParseTypeParameterDeclaration();
+ }
+ method.value = this.parseMethod(isGenerator, isAsync);
+ method.value.typeParameters = typeParameters;
+ classBody.body.push(this.finishNode(method, "MethodDefinition"));
+ };
+ });
+
+ instance.extend("parseClassSuper", function (inner) {
+ return function (node, isStatement) {
+ inner.call(this, node, isStatement);
+ if (node.superClass && this.isRelational("<")) {
+ node.superTypeParameters = this.flowParseTypeParameterInstantiation();
+ }
+ if (this.isContextual("implements")) {
+ this.next();
+ var implemented = node["implements"] = [];
+ do {
+ var _node = this.startNode();
+ _node.id = this.parseIdent();
+ if (this.isRelational("<")) {
+ _node.typeParameters = this.flowParseTypeParameterInstantiation();
+ } else {
+ _node.typeParameters = null;
+ }
+ implemented.push(this.finishNode(_node, "ClassImplements"));
+ } while (this.eat(_tokenizerTypes.types.comma));
+ }
+ };
+ });
+
+ instance.extend("parseObjPropValue", function (inner) {
+ return function (prop) {
+ var typeParameters;
+
+ // method shorthand
+ if (this.isRelational("<")) {
+ typeParameters = this.flowParseTypeParameterDeclaration();
+ if (!this.match(_tokenizerTypes.types.parenL)) this.unexpected();
+ }
+
+ inner.apply(this, arguments);
+
+ // add typeParameters if we found them
+ if (typeParameters) {
+ prop.value.typeParameters = typeParameters;
+ }
+ };
+ });
+
+ instance.extend("parseAssignableListItemTypes", function () {
+ return function (param) {
+ if (this.eat(_tokenizerTypes.types.question)) {
+ param.optional = true;
+ }
+ if (this.match(_tokenizerTypes.types.colon)) {
+ param.typeAnnotation = this.flowParseTypeAnnotation();
+ }
+ this.finishNode(param, param.type);
+ return param;
+ };
+ });
+
+ instance.extend("parseImportSpecifiers", function (inner) {
+ return function (node) {
+ node.importKind = "value";
+
+ var kind = this.match(_tokenizerTypes.types._typeof) ? "typeof" : this.isContextual("type") ? "type" : null;
+ if (kind) {
+ var lh = this.lookahead();
+ if (lh.type === _tokenizerTypes.types.name && lh.value !== "from" || lh.type === _tokenizerTypes.types.braceL || lh.type === _tokenizerTypes.types.star) {
+ this.next();
+ node.importKind = kind;
+ }
+ }
+
+ inner.call(this, node);
+ };
+ });
+
+ // function foo() {}
+ instance.extend("parseFunctionParams", function (inner) {
+ return function (node) {
+ if (this.isRelational("<")) {
+ node.typeParameters = this.flowParseTypeParameterDeclaration();
+ }
+ inner.call(this, node);
+ };
+ });
+
+ // var foo: string = bar
+ instance.extend("parseVarHead", function (inner) {
+ return function (decl) {
+ inner.call(this, decl);
+ if (this.match(_tokenizerTypes.types.colon)) {
+ decl.id.typeAnnotation = this.flowParseTypeAnnotation();
+ this.finishNode(decl.id, decl.id.type);
+ }
+ };
+ });
+
+ // var foo = (async (): number => {});
+ instance.extend("parseAsyncArrowFromCallExpression", function (inner) {
+ return function (node, call) {
+ if (this.match(_tokenizerTypes.types.colon)) {
+ node.returnType = this.flowParseTypeAnnotation();
+ }
+
+ return inner.call(this, node, call);
+ };
+ });
+
+ instance.extend("parseParenAndDistinguishExpression", function (inner) {
+ return function (startPos, startLoc, canBeArrow, isAsync) {
+ startPos = startPos || this.state.start;
+ startLoc = startLoc || this.state.startLoc;
+
+ if (this.lookahead().type === _tokenizerTypes.types.parenR) {
+ // var foo = (): number => {};
+ this.expect(_tokenizerTypes.types.parenL);
+ this.expect(_tokenizerTypes.types.parenR);
+
+ var node = this.startNodeAt(startPos, startLoc);
+ if (this.match(_tokenizerTypes.types.colon)) node.returnType = this.flowParseTypeAnnotation();
+ this.expect(_tokenizerTypes.types.arrow);
+ return this.parseArrowExpression(node, [], isAsync);
+ } else {
+ // var foo = (foo): number => {};
+ var node = inner.call(this, startPos, startLoc, canBeArrow, isAsync);
+
+ if (this.match(_tokenizerTypes.types.colon)) {
+ var state = this.state.clone();
+ try {
+ return this.parseParenItem(node, startPos, startLoc, true);
+ } catch (err) {
+ if (err instanceof SyntaxError) {
+ this.state = state;
+ return node;
+ } else {
+ throw err;
+ }
+ }
+ } else {
+ return node;
+ }
+ }
+ };
+ });
+};
+
+module.exports = exports["default"];
+},{"616":616,"628":628}],623:[function(_dereq_,module,exports){
+"use strict";
+
+exports.__esModule = true;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+var _xhtml = _dereq_(624);
+
+var _xhtml2 = _interopRequireDefault(_xhtml);
+
+var _tokenizerTypes = _dereq_(628);
+
+var _tokenizerContext = _dereq_(625);
+
+var _parser = _dereq_(616);
+
+var _parser2 = _interopRequireDefault(_parser);
+
+var _utilIdentifier = _dereq_(629);
+
+var _utilWhitespace = _dereq_(631);
+
+var HEX_NUMBER = /^[\da-fA-F]+$/;
+var DECIMAL_NUMBER = /^\d+$/;
+
+_tokenizerContext.types.j_oTag = new _tokenizerContext.TokContext("...", true, true);
+
+_tokenizerTypes.types.jsxName = new _tokenizerTypes.TokenType("jsxName");
+_tokenizerTypes.types.jsxText = new _tokenizerTypes.TokenType("jsxText", { beforeExpr: true });
+_tokenizerTypes.types.jsxTagStart = new _tokenizerTypes.TokenType("jsxTagStart");
+_tokenizerTypes.types.jsxTagEnd = new _tokenizerTypes.TokenType("jsxTagEnd");
+
+_tokenizerTypes.types.jsxTagStart.updateContext = function () {
+ this.state.context.push(_tokenizerContext.types.j_expr); // treat as beginning of JSX expression
+ this.state.context.push(_tokenizerContext.types.j_oTag); // start opening tag context
+ this.state.exprAllowed = false;
+};
+
+_tokenizerTypes.types.jsxTagEnd.updateContext = function (prevType) {
+ var out = this.state.context.pop();
+ if (out === _tokenizerContext.types.j_oTag && prevType === _tokenizerTypes.types.slash || out === _tokenizerContext.types.j_cTag) {
+ this.state.context.pop();
+ this.state.exprAllowed = this.curContext() === _tokenizerContext.types.j_expr;
+ } else {
+ this.state.exprAllowed = true;
+ }
+};
+
+var pp = _parser2["default"].prototype;
+
+// Reads inline JSX contents token.
+
+pp.jsxReadToken = function () {
+ var out = "",
+ chunkStart = this.state.pos;
+ for (;;) {
+ if (this.state.pos >= this.input.length) {
+ this.raise(this.state.start, "Unterminated JSX contents");
+ }
+
+ var ch = this.input.charCodeAt(this.state.pos);
+
+ switch (ch) {
+ case 60: // "<"
+ case 123:
+ // "{"
+ if (this.state.pos === this.state.start) {
+ if (ch === 60 && this.state.exprAllowed) {
+ ++this.state.pos;
+ return this.finishToken(_tokenizerTypes.types.jsxTagStart);
+ }
+ return this.getTokenFromCode(ch);
+ }
+ out += this.input.slice(chunkStart, this.state.pos);
+ return this.finishToken(_tokenizerTypes.types.jsxText, out);
+
+ case 38:
+ // "&"
+ out += this.input.slice(chunkStart, this.state.pos);
+ out += this.jsxReadEntity();
+ chunkStart = this.state.pos;
+ break;
+
+ default:
+ if (_utilWhitespace.isNewLine(ch)) {
+ out += this.input.slice(chunkStart, this.state.pos);
+ out += this.jsxReadNewLine(true);
+ chunkStart = this.state.pos;
+ } else {
+ ++this.state.pos;
+ }
+ }
+ }
+};
+
+pp.jsxReadNewLine = function (normalizeCRLF) {
+ var ch = this.input.charCodeAt(this.state.pos);
+ var out;
+ ++this.state.pos;
+ if (ch === 13 && this.input.charCodeAt(this.state.pos) === 10) {
+ ++this.state.pos;
+ out = normalizeCRLF ? "\n" : "\r\n";
+ } else {
+ out = String.fromCharCode(ch);
+ }
+ ++this.state.curLine;
+ this.state.lineStart = this.state.pos;
+
+ return out;
+};
+
+pp.jsxReadString = function (quote) {
+ var out = "",
+ chunkStart = ++this.state.pos;
+ for (;;) {
+ if (this.state.pos >= this.input.length) {
+ this.raise(this.state.start, "Unterminated string constant");
+ }
+
+ var ch = this.input.charCodeAt(this.state.pos);
+ if (ch === quote) break;
+ if (ch === 38) {
+ // "&"
+ out += this.input.slice(chunkStart, this.state.pos);
+ out += this.jsxReadEntity();
+ chunkStart = this.state.pos;
+ } else if (_utilWhitespace.isNewLine(ch)) {
+ out += this.input.slice(chunkStart, this.state.pos);
+ out += this.jsxReadNewLine(false);
+ chunkStart = this.state.pos;
+ } else {
+ ++this.state.pos;
+ }
+ }
+ out += this.input.slice(chunkStart, this.state.pos++);
+ return this.finishToken(_tokenizerTypes.types.string, out);
+};
+
+pp.jsxReadEntity = function () {
+ var str = "",
+ count = 0,
+ entity;
+ var ch = this.input[this.state.pos];
+
+ var startPos = ++this.state.pos;
+ while (this.state.pos < this.input.length && count++ < 10) {
+ ch = this.input[this.state.pos++];
+ if (ch === ";") {
+ if (str[0] === "#") {
+ if (str[1] === "x") {
+ str = str.substr(2);
+ if (HEX_NUMBER.test(str)) entity = String.fromCharCode(parseInt(str, 16));
+ } else {
+ str = str.substr(1);
+ if (DECIMAL_NUMBER.test(str)) entity = String.fromCharCode(parseInt(str, 10));
+ }
+ } else {
+ entity = _xhtml2["default"][str];
+ }
+ break;
+ }
+ str += ch;
+ }
+ if (!entity) {
+ this.state.pos = startPos;
+ return "&";
+ }
+ return entity;
+};
+
+// Read a JSX identifier (valid tag or attribute name).
+//
+// Optimized version since JSX identifiers can"t contain
+// escape characters and so can be read as single slice.
+// Also assumes that first character was already checked
+// by isIdentifierStart in readToken.
+
+pp.jsxReadWord = function () {
+ var ch,
+ start = this.state.pos;
+ do {
+ ch = this.input.charCodeAt(++this.state.pos);
+ } while (_utilIdentifier.isIdentifierChar(ch) || ch === 45); // "-"
+ return this.finishToken(_tokenizerTypes.types.jsxName, this.input.slice(start, this.state.pos));
+};
+
+// Transforms JSX element name to string.
+
+function getQualifiedJSXName(object) {
+ if (object.type === "JSXIdentifier") {
+ return object.name;
+ }
+
+ if (object.type === "JSXNamespacedName") {
+ return object.namespace.name + ":" + object.name.name;
+ }
+
+ if (object.type === "JSXMemberExpression") {
+ return getQualifiedJSXName(object.object) + "." + getQualifiedJSXName(object.property);
+ }
+}
+
+// Parse next token as JSX identifier
+
+pp.jsxParseIdentifier = function () {
+ var node = this.startNode();
+ if (this.match(_tokenizerTypes.types.jsxName)) {
+ node.name = this.state.value;
+ } else if (this.state.type.keyword) {
+ node.name = this.state.type.keyword;
+ } else {
+ this.unexpected();
+ }
+ this.next();
+ return this.finishNode(node, "JSXIdentifier");
+};
+
+// Parse namespaced identifier.
+
+pp.jsxParseNamespacedName = function () {
+ var startPos = this.state.start,
+ startLoc = this.state.startLoc;
+ var name = this.jsxParseIdentifier();
+ if (!this.eat(_tokenizerTypes.types.colon)) return name;
+
+ var node = this.startNodeAt(startPos, startLoc);
+ node.namespace = name;
+ node.name = this.jsxParseIdentifier();
+ return this.finishNode(node, "JSXNamespacedName");
+};
+
+// Parses element name in any form - namespaced, member
+// or single identifier.
+
+pp.jsxParseElementName = function () {
+ var startPos = this.state.start,
+ startLoc = this.state.startLoc;
+ var node = this.jsxParseNamespacedName();
+ while (this.eat(_tokenizerTypes.types.dot)) {
+ var newNode = this.startNodeAt(startPos, startLoc);
+ newNode.object = node;
+ newNode.property = this.jsxParseIdentifier();
+ node = this.finishNode(newNode, "JSXMemberExpression");
+ }
+ return node;
+};
+
+// Parses any type of JSX attribute value.
+
+pp.jsxParseAttributeValue = function () {
+ var node;
+ switch (this.state.type) {
+ case _tokenizerTypes.types.braceL:
+ node = this.jsxParseExpressionContainer();
+ if (node.expression.type === "JSXEmptyExpression") {
+ this.raise(node.start, "JSX attributes must only be assigned a non-empty expression");
+ } else {
+ return node;
+ }
+
+ case _tokenizerTypes.types.jsxTagStart:
+ case _tokenizerTypes.types.string:
+ node = this.parseExprAtom();
+ node.rawValue = null;
+ return node;
+
+ default:
+ this.raise(this.state.start, "JSX value should be either an expression or a quoted JSX text");
+ }
+};
+
+// JSXEmptyExpression is unique type since it doesn"t actually parse anything,
+// and so it should start at the end of last read token (left brace) and finish
+// at the beginning of the next one (right brace).
+
+pp.jsxParseEmptyExpression = function () {
+ var tmp = this.state.start;
+ this.state.start = this.state.lastTokEnd;
+ this.state.lastTokEnd = tmp;
+
+ tmp = this.state.startLoc;
+ this.state.startLoc = this.state.lastTokEndLoc;
+ this.state.lastTokEndLoc = tmp;
+
+ return this.finishNode(this.startNode(), "JSXEmptyExpression");
+};
+
+// Parses JSX expression enclosed into curly brackets.
+
+pp.jsxParseExpressionContainer = function () {
+ var node = this.startNode();
+ this.next();
+ if (this.match(_tokenizerTypes.types.braceR)) {
+ node.expression = this.jsxParseEmptyExpression();
+ } else {
+ node.expression = this.parseExpression();
+ }
+ this.expect(_tokenizerTypes.types.braceR);
+ return this.finishNode(node, "JSXExpressionContainer");
+};
+
+// Parses following JSX attribute name-value pair.
+
+pp.jsxParseAttribute = function () {
+ var node = this.startNode();
+ if (this.eat(_tokenizerTypes.types.braceL)) {
+ this.expect(_tokenizerTypes.types.ellipsis);
+ node.argument = this.parseMaybeAssign();
+ this.expect(_tokenizerTypes.types.braceR);
+ return this.finishNode(node, "JSXSpreadAttribute");
+ }
+ node.name = this.jsxParseNamespacedName();
+ node.value = this.eat(_tokenizerTypes.types.eq) ? this.jsxParseAttributeValue() : null;
+ return this.finishNode(node, "JSXAttribute");
+};
+
+// Parses JSX opening tag starting after "<".
+
+pp.jsxParseOpeningElementAt = function (startPos, startLoc) {
+ var node = this.startNodeAt(startPos, startLoc);
+ node.attributes = [];
+ node.name = this.jsxParseElementName();
+ while (!this.match(_tokenizerTypes.types.slash) && !this.match(_tokenizerTypes.types.jsxTagEnd)) {
+ node.attributes.push(this.jsxParseAttribute());
+ }
+ node.selfClosing = this.eat(_tokenizerTypes.types.slash);
+ this.expect(_tokenizerTypes.types.jsxTagEnd);
+ return this.finishNode(node, "JSXOpeningElement");
+};
+
+// Parses JSX closing tag starting after "".
+
+pp.jsxParseClosingElementAt = function (startPos, startLoc) {
+ var node = this.startNodeAt(startPos, startLoc);
+ node.name = this.jsxParseElementName();
+ this.expect(_tokenizerTypes.types.jsxTagEnd);
+ return this.finishNode(node, "JSXClosingElement");
+};
+
+// Parses entire JSX element, including it"s opening tag
+// (starting after "<"), attributes, contents and closing tag.
+
+pp.jsxParseElementAt = function (startPos, startLoc) {
+ var node = this.startNodeAt(startPos, startLoc);
+ var children = [];
+ var openingElement = this.jsxParseOpeningElementAt(startPos, startLoc);
+ var closingElement = null;
+
+ if (!openingElement.selfClosing) {
+ contents: for (;;) {
+ switch (this.state.type) {
+ case _tokenizerTypes.types.jsxTagStart:
+ startPos = this.state.start;startLoc = this.state.startLoc;
+ this.next();
+ if (this.eat(_tokenizerTypes.types.slash)) {
+ closingElement = this.jsxParseClosingElementAt(startPos, startLoc);
+ break contents;
+ }
+ children.push(this.jsxParseElementAt(startPos, startLoc));
+ break;
+
+ case _tokenizerTypes.types.jsxText:
+ children.push(this.parseExprAtom());
+ break;
+
+ case _tokenizerTypes.types.braceL:
+ children.push(this.jsxParseExpressionContainer());
+ break;
+
+ default:
+ this.unexpected();
+ }
+ }
+
+ if (getQualifiedJSXName(closingElement.name) !== getQualifiedJSXName(openingElement.name)) {
+ this.raise(closingElement.start, "Expected corresponding JSX closing tag for <" + getQualifiedJSXName(openingElement.name) + ">");
+ }
+ }
+
+ node.openingElement = openingElement;
+ node.closingElement = closingElement;
+ node.children = children;
+ if (this.match(_tokenizerTypes.types.relational) && this.state.value === "<") {
+ this.raise(this.state.start, "Adjacent JSX elements must be wrapped in an enclosing tag");
+ }
+ return this.finishNode(node, "JSXElement");
+};
+
+// Parses entire JSX element from current position.
+
+pp.jsxParseElement = function () {
+ var startPos = this.state.start,
+ startLoc = this.state.startLoc;
+ this.next();
+ return this.jsxParseElementAt(startPos, startLoc);
+};
+
+exports["default"] = function (instance) {
+ instance.extend("parseExprAtom", function (inner) {
+ return function (refShortHandDefaultPos) {
+ if (this.match(_tokenizerTypes.types.jsxText)) {
+ var node = this.parseLiteral(this.state.value);
+ // https://github.com/babel/babel/issues/2078
+ node.rawValue = null;
+ return node;
+ } else if (this.match(_tokenizerTypes.types.jsxTagStart)) {
+ return this.jsxParseElement();
+ } else {
+ return inner.call(this, refShortHandDefaultPos);
+ }
+ };
+ });
+
+ instance.extend("readToken", function (inner) {
+ return function (code) {
+ var context = this.curContext();
+
+ if (context === _tokenizerContext.types.j_expr) {
+ return this.jsxReadToken();
+ }
+
+ if (context === _tokenizerContext.types.j_oTag || context === _tokenizerContext.types.j_cTag) {
+ if (_utilIdentifier.isIdentifierStart(code)) {
+ return this.jsxReadWord();
+ }
+
+ if (code === 62) {
+ ++this.state.pos;
+ return this.finishToken(_tokenizerTypes.types.jsxTagEnd);
+ }
+
+ if ((code === 34 || code === 39) && context === _tokenizerContext.types.j_oTag) {
+ return this.jsxReadString(code);
+ }
+ }
+
+ if (code === 60 && this.state.exprAllowed) {
+ ++this.state.pos;
+ return this.finishToken(_tokenizerTypes.types.jsxTagStart);
+ }
+
+ return inner.call(this, code);
+ };
+ });
+
+ instance.extend("updateContext", function (inner) {
+ return function (prevType) {
+ if (this.match(_tokenizerTypes.types.braceL)) {
+ var curContext = this.curContext();
+ if (curContext === _tokenizerContext.types.j_oTag) {
+ this.state.context.push(_tokenizerContext.types.b_expr);
+ } else if (curContext === _tokenizerContext.types.j_expr) {
+ this.state.context.push(_tokenizerContext.types.b_tmpl);
+ } else {
+ inner.call(this, prevType);
+ }
+ this.state.exprAllowed = true;
+ } else if (this.match(_tokenizerTypes.types.slash) && prevType === _tokenizerTypes.types.jsxTagStart) {
+ this.state.context.length -= 2; // do not consider JSX expr -> JSX open tag -> ... anymore
+ this.state.context.push(_tokenizerContext.types.j_cTag); // reconsider as closing tag context
+ this.state.exprAllowed = false;
+ } else {
+ return inner.call(this, prevType);
+ }
+ };
+ });
+};
+
+module.exports = exports["default"];
+},{"616":616,"624":624,"625":625,"628":628,"629":629,"631":631}],624:[function(_dereq_,module,exports){
+"use strict";
+
+exports.__esModule = true;
+exports["default"] = {
+ quot: "\"",
+ amp: "&",
+ apos: "'",
+ lt: "<",
+ gt: ">",
+ nbsp: " ",
+ iexcl: "¡",
+ cent: "¢",
+ pound: "£",
+ curren: "¤",
+ yen: "¥",
+ brvbar: "¦",
+ sect: "§",
+ uml: "¨",
+ copy: "©",
+ ordf: "ª",
+ laquo: "«",
+ not: "¬",
+ shy: "",
+ reg: "®",
+ macr: "¯",
+ deg: "°",
+ plusmn: "±",
+ sup2: "²",
+ sup3: "³",
+ acute: "´",
+ micro: "µ",
+ para: "¶",
+ middot: "·",
+ cedil: "¸",
+ sup1: "¹",
+ ordm: "º",
+ raquo: "»",
+ frac14: "¼",
+ frac12: "½",
+ frac34: "¾",
+ iquest: "¿",
+ Agrave: "À",
+ Aacute: "Á",
+ Acirc: "Â",
+ Atilde: "Ã",
+ Auml: "Ä",
+ Aring: "Å",
+ AElig: "Æ",
+ Ccedil: "Ç",
+ Egrave: "È",
+ Eacute: "É",
+ Ecirc: "Ê",
+ Euml: "Ë",
+ Igrave: "Ì",
+ Iacute: "Í",
+ Icirc: "Î",
+ Iuml: "Ï",
+ ETH: "Ð",
+ Ntilde: "Ñ",
+ Ograve: "Ò",
+ Oacute: "Ó",
+ Ocirc: "Ô",
+ Otilde: "Õ",
+ Ouml: "Ö",
+ times: "×",
+ Oslash: "Ø",
+ Ugrave: "Ù",
+ Uacute: "Ú",
+ Ucirc: "Û",
+ Uuml: "Ü",
+ Yacute: "Ý",
+ THORN: "Þ",
+ szlig: "ß",
+ agrave: "à",
+ aacute: "á",
+ acirc: "â",
+ atilde: "ã",
+ auml: "ä",
+ aring: "å",
+ aelig: "æ",
+ ccedil: "ç",
+ egrave: "è",
+ eacute: "é",
+ ecirc: "ê",
+ euml: "ë",
+ igrave: "ì",
+ iacute: "í",
+ icirc: "î",
+ iuml: "ï",
+ eth: "ð",
+ ntilde: "ñ",
+ ograve: "ò",
+ oacute: "ó",
+ ocirc: "ô",
+ otilde: "õ",
+ ouml: "ö",
+ divide: "÷",
+ oslash: "ø",
+ ugrave: "ù",
+ uacute: "ú",
+ ucirc: "û",
+ uuml: "ü",
+ yacute: "ý",
+ thorn: "þ",
+ yuml: "ÿ",
+ OElig: "Œ",
+ oelig: "œ",
+ Scaron: "Š",
+ scaron: "š",
+ Yuml: "Ÿ",
+ fnof: "ƒ",
+ circ: "ˆ",
+ tilde: "˜",
+ Alpha: "Α",
+ Beta: "Β",
+ Gamma: "Γ",
+ Delta: "Δ",
+ Epsilon: "Ε",
+ Zeta: "Ζ",
+ Eta: "Η",
+ Theta: "Θ",
+ Iota: "Ι",
+ Kappa: "Κ",
+ Lambda: "Λ",
+ Mu: "Μ",
+ Nu: "Ν",
+ Xi: "Ξ",
+ Omicron: "Ο",
+ Pi: "Π",
+ Rho: "Ρ",
+ Sigma: "Σ",
+ Tau: "Τ",
+ Upsilon: "Υ",
+ Phi: "Φ",
+ Chi: "Χ",
+ Psi: "Ψ",
+ Omega: "Ω",
+ alpha: "α",
+ beta: "β",
+ gamma: "γ",
+ delta: "δ",
+ epsilon: "ε",
+ zeta: "ζ",
+ eta: "η",
+ theta: "θ",
+ iota: "ι",
+ kappa: "κ",
+ lambda: "λ",
+ mu: "μ",
+ nu: "ν",
+ xi: "ξ",
+ omicron: "ο",
+ pi: "π",
+ rho: "ρ",
+ sigmaf: "ς",
+ sigma: "σ",
+ tau: "τ",
+ upsilon: "υ",
+ phi: "φ",
+ chi: "χ",
+ psi: "ψ",
+ omega: "ω",
+ thetasym: "ϑ",
+ upsih: "ϒ",
+ piv: "ϖ",
+ ensp: " ",
+ emsp: " ",
+ thinsp: " ",
+ zwnj: "",
+ zwj: "",
+ lrm: "",
+ rlm: "",
+ ndash: "–",
+ mdash: "—",
+ lsquo: "‘",
+ rsquo: "’",
+ sbquo: "‚",
+ ldquo: "“",
+ rdquo: "”",
+ bdquo: "„",
+ dagger: "†",
+ Dagger: "‡",
+ bull: "•",
+ hellip: "…",
+ permil: "‰",
+ prime: "′",
+ Prime: "″",
+ lsaquo: "‹",
+ rsaquo: "›",
+ oline: "‾",
+ frasl: "⁄",
+ euro: "€",
+ image: "ℑ",
+ weierp: "℘",
+ real: "ℜ",
+ trade: "™",
+ alefsym: "ℵ",
+ larr: "←",
+ uarr: "↑",
+ rarr: "→",
+ darr: "↓",
+ harr: "↔",
+ crarr: "↵",
+ lArr: "⇐",
+ uArr: "⇑",
+ rArr: "⇒",
+ dArr: "⇓",
+ hArr: "⇔",
+ forall: "∀",
+ part: "∂",
+ exist: "∃",
+ empty: "∅",
+ nabla: "∇",
+ isin: "∈",
+ notin: "∉",
+ ni: "∋",
+ prod: "∏",
+ sum: "∑",
+ minus: "−",
+ lowast: "∗",
+ radic: "√",
+ prop: "∝",
+ infin: "∞",
+ ang: "∠",
+ and: "∧",
+ or: "∨",
+ cap: "∩",
+ cup: "∪",
+ "int": "∫",
+ there4: "∴",
+ sim: "∼",
+ cong: "≅",
+ asymp: "≈",
+ ne: "≠",
+ equiv: "≡",
+ le: "≤",
+ ge: "≥",
+ sub: "⊂",
+ sup: "⊃",
+ nsub: "⊄",
+ sube: "⊆",
+ supe: "⊇",
+ oplus: "⊕",
+ otimes: "⊗",
+ perp: "⊥",
+ sdot: "⋅",
+ lceil: "⌈",
+ rceil: "⌉",
+ lfloor: "⌊",
+ rfloor: "⌋",
+ lang: "〈",
+ rang: "〉",
+ loz: "◊",
+ spades: "♠",
+ clubs: "♣",
+ hearts: "♥",
+ diams: "♦"
+};
+module.exports = exports["default"];
+},{}],625:[function(_dereq_,module,exports){
+// The algorithm used to determine whether a regexp can appear at a
+// given point in the program is loosely based on sweet.js' approach.
+// See https://github.com/mozilla/sweet.js/wiki/design
+
+"use strict";
+
+exports.__esModule = true;
+// istanbul ignore next
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var _types = _dereq_(628);
+
+var TokContext = function TokContext(token, isExpr, preserveSpace, override) {
+ _classCallCheck(this, TokContext);
+
+ this.token = token;
+ this.isExpr = !!isExpr;
+ this.preserveSpace = !!preserveSpace;
+ this.override = override;
+};
+
+exports.TokContext = TokContext;
+var types = {
+ b_stat: new TokContext("{", false),
+ b_expr: new TokContext("{", true),
+ b_tmpl: new TokContext("${", true),
+ p_stat: new TokContext("(", false),
+ p_expr: new TokContext("(", true),
+ q_tmpl: new TokContext("`", true, true, function (p) {
+ return p.readTmplToken();
+ }),
+ f_expr: new TokContext("function", true)
+};
+
+exports.types = types;
+// Token-specific context update code
+
+_types.types.parenR.updateContext = _types.types.braceR.updateContext = function () {
+ if (this.state.context.length === 1) {
+ this.state.exprAllowed = true;
+ return;
+ }
+
+ var out = this.state.context.pop();
+ if (out === types.b_stat && this.curContext() === types.f_expr) {
+ this.state.context.pop();
+ this.state.exprAllowed = false;
+ } else if (out === types.b_tmpl) {
+ this.state.exprAllowed = true;
+ } else {
+ this.state.exprAllowed = !out.isExpr;
+ }
+};
+
+_types.types.braceL.updateContext = function (prevType) {
+ this.state.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);
+ this.state.exprAllowed = true;
+};
+
+_types.types.dollarBraceL.updateContext = function () {
+ this.state.context.push(types.b_tmpl);
+ this.state.exprAllowed = true;
+};
+
+_types.types.parenL.updateContext = function (prevType) {
+ var statementParens = prevType === _types.types._if || prevType === _types.types._for || prevType === _types.types._with || prevType === _types.types._while;
+ this.state.context.push(statementParens ? types.p_stat : types.p_expr);
+ this.state.exprAllowed = true;
+};
+
+_types.types.incDec.updateContext = function () {
+ // tokExprAllowed stays unchanged
+};
+
+_types.types._function.updateContext = function () {
+ if (this.curContext() !== types.b_stat) {
+ this.state.context.push(types.f_expr);
+ }
+
+ this.state.exprAllowed = false;
+};
+
+_types.types.backQuote.updateContext = function () {
+ if (this.curContext() === types.q_tmpl) {
+ this.state.context.pop();
+ } else {
+ this.state.context.push(types.q_tmpl);
+ }
+ this.state.exprAllowed = false;
+};
+},{"628":628}],626:[function(_dereq_,module,exports){
+"use strict";
+
+exports.__esModule = true;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+// istanbul ignore next
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var _utilIdentifier = _dereq_(629);
+
+var _types = _dereq_(628);
+
+var _context = _dereq_(625);
+
+var _utilLocation = _dereq_(630);
+
+var _utilWhitespace = _dereq_(631);
+
+var _state = _dereq_(627);
+
+var _state2 = _interopRequireDefault(_state);
+
+// Object type used to represent tokens. Note that normally, tokens
+// simply exist as properties on the parser object. This is only
+// used for the onToken callback and the external tokenizer.
+
+var Token = function Token(state) {
+ _classCallCheck(this, Token);
+
+ this.type = state.type;
+ this.value = state.value;
+ this.start = state.start;
+ this.end = state.end;
+ this.loc = new _utilLocation.SourceLocation(state.startLoc, state.endLoc);
+}
+
+// ## Tokenizer
+
+// Are we running under Rhino?
+/* global Packages */
+;
+
+exports.Token = Token;
+var isRhino = typeof Packages === "object" && Object.prototype.toString.call(Packages) === "[object JavaPackage]";
+
+// Parse a regular expression. Some context-awareness is necessary,
+// since a '/' inside a '[]' set does not end the expression.
+
+function tryCreateRegexp(src, flags, throwErrorStart) {
+ try {
+ return new RegExp(src, flags);
+ } catch (e) {
+ if (throwErrorStart !== undefined) {
+ if (e instanceof SyntaxError) this.raise(throwErrorStart, "Error parsing regular expression: " + e.message);
+ this.raise(e);
+ }
+ }
+}
+
+var regexpUnicodeSupport = !!tryCreateRegexp("", "u");
+
+function codePointToString(code) {
+ // UTF-16 Decoding
+ if (code <= 0xFFFF) return String.fromCharCode(code);
+ return String.fromCharCode((code - 0x10000 >> 10) + 0xD800, (code - 0x10000 & 1023) + 0xDC00);
+}
+
+var Tokenizer = (function () {
+ function Tokenizer(input) {
+ _classCallCheck(this, Tokenizer);
+
+ this.state = new _state2["default"]();
+ this.state.init(input);
+ }
+
+ // Move to the next token
+
+ Tokenizer.prototype.next = function next() {
+ this.state.tokens.push(new Token(this.state));
+
+ this.state.lastTokEnd = this.state.end;
+ this.state.lastTokStart = this.state.start;
+ this.state.lastTokEndLoc = this.state.endLoc;
+ this.state.lastTokStartLoc = this.state.startLoc;
+ this.nextToken();
+ };
+
+ // TODO
+
+ Tokenizer.prototype.eat = function eat(type) {
+ if (this.match(type)) {
+ this.next();
+ return true;
+ } else {
+ return false;
+ }
+ };
+
+ // TODO
+
+ Tokenizer.prototype.match = function match(type) {
+ return this.state.type === type;
+ };
+
+ // TODO
+
+ Tokenizer.prototype.lookahead = function lookahead() {
+ var old = this.state;
+ this.state = old.clone();
+ this.next();
+ var curr = this.state.clone();
+ this.state = old;
+ return curr;
+ };
+
+ // Toggle strict mode. Re-reads the next number or string to please
+ // pedantic tests (`"use strict"; 010;` should fail).
+
+ Tokenizer.prototype.setStrict = function setStrict(strict) {
+ this.strict = strict;
+ if (!this.match(_types.types.num) && !this.match(_types.types.string)) return;
+ this.state.pos = this.state.start;
+ while (this.state.pos < this.state.lineStart) {
+ this.state.lineStart = this.input.lastIndexOf("\n", this.state.lineStart - 2) + 1;
+ --this.state.curLine;
+ }
+ this.nextToken();
+ };
+
+ Tokenizer.prototype.curContext = function curContext() {
+ return this.state.context[this.state.context.length - 1];
+ };
+
+ // Read a single token, updating the parser object's token-related
+ // properties.
+
+ Tokenizer.prototype.nextToken = function nextToken() {
+ var curContext = this.curContext();
+ if (!curContext || !curContext.preserveSpace) this.skipSpace();
+
+ this.state.start = this.state.pos;
+ this.state.startLoc = this.state.curPosition();
+ if (this.state.pos >= this.input.length) return this.finishToken(_types.types.eof);
+
+ if (curContext.override) {
+ return curContext.override(this);
+ } else {
+ return this.readToken(this.fullCharCodeAtPos());
+ }
+ };
+
+ Tokenizer.prototype.readToken = function readToken(code) {
+ // Identifier or keyword. '\uXXXX' sequences are allowed in
+ // identifiers, so '\' also dispatches to that.
+ if (_utilIdentifier.isIdentifierStart(code, true) || code === 92 /* '\' */) return this.readWord();
+
+ return this.getTokenFromCode(code);
+ };
+
+ Tokenizer.prototype.fullCharCodeAtPos = function fullCharCodeAtPos() {
+ var code = this.input.charCodeAt(this.state.pos);
+ if (code <= 0xd7ff || code >= 0xe000) return code;
+
+ var next = this.input.charCodeAt(this.state.pos + 1);
+ return (code << 10) + next - 0x35fdc00;
+ };
+
+ Tokenizer.prototype.pushComment = function pushComment(block, text, start, end, startLoc, endLoc) {
+ var comment = {
+ type: block ? "CommentBlock" : "CommentLine",
+ value: text,
+ start: start,
+ end: end,
+ loc: new _utilLocation.SourceLocation(startLoc, endLoc),
+ range: [start, end]
+ };
+
+ this.state.tokens.push(comment);
+ this.state.comments.push(comment);
+ this.addComment(comment);
+ };
+
+ Tokenizer.prototype.skipBlockComment = function skipBlockComment() {
+ var startLoc = this.state.curPosition();
+ var start = this.state.pos,
+ end = this.input.indexOf("*/", this.state.pos += 2);
+ if (end === -1) this.raise(this.state.pos - 2, "Unterminated comment");
+
+ this.state.pos = end + 2;
+ _utilWhitespace.lineBreakG.lastIndex = start;
+ var match = undefined;
+ while ((match = _utilWhitespace.lineBreakG.exec(this.input)) && match.index < this.state.pos) {
+ ++this.state.curLine;
+ this.state.lineStart = match.index + match[0].length;
+ }
+
+ this.pushComment(true, this.input.slice(start + 2, end), start, this.state.pos, startLoc, this.state.curPosition());
+ };
+
+ Tokenizer.prototype.skipLineComment = function skipLineComment(startSkip) {
+ var start = this.state.pos;
+ var startLoc = this.state.curPosition();
+ var ch = this.input.charCodeAt(this.state.pos += startSkip);
+ while (this.state.pos < this.input.length && ch !== 10 && ch !== 13 && ch !== 8232 && ch !== 8233) {
+ ++this.state.pos;
+ ch = this.input.charCodeAt(this.state.pos);
+ }
+
+ this.pushComment(false, this.input.slice(start + startSkip, this.state.pos), start, this.state.pos, startLoc, this.state.curPosition());
+ };
+
+ // Called at the start of the parse and after every token. Skips
+ // whitespace and comments, and.
+
+ Tokenizer.prototype.skipSpace = function skipSpace() {
+ loop: while (this.state.pos < this.input.length) {
+ var ch = this.input.charCodeAt(this.state.pos);
+ switch (ch) {
+ case 32:case 160:
+ // ' '
+ ++this.state.pos;
+ break;
+
+ case 13:
+ if (this.input.charCodeAt(this.state.pos + 1) === 10) {
+ ++this.state.pos;
+ }
+
+ case 10:case 8232:case 8233:
+ ++this.state.pos;
+ ++this.state.curLine;
+ this.state.lineStart = this.state.pos;
+ break;
+
+ case 47:
+ // '/'
+ switch (this.input.charCodeAt(this.state.pos + 1)) {
+ case 42:
+ // '*'
+ this.skipBlockComment();
+ break;
+
+ case 47:
+ this.skipLineComment(2);
+ break;
+
+ default:
+ break loop;
+ }
+ break;
+
+ default:
+ if (ch > 8 && ch < 14 || ch >= 5760 && _utilWhitespace.nonASCIIwhitespace.test(String.fromCharCode(ch))) {
+ ++this.state.pos;
+ } else {
+ break loop;
+ }
+ }
+ }
+ };
+
+ // Called at the end of every token. Sets `end`, `val`, and
+ // maintains `context` and `exprAllowed`, and skips the space after
+ // the token, so that the next one's `start` will point at the
+ // right position.
+
+ Tokenizer.prototype.finishToken = function finishToken(type, val) {
+ this.state.end = this.state.pos;
+ this.state.endLoc = this.state.curPosition();
+ var prevType = this.state.type;
+ this.state.type = type;
+ this.state.value = val;
+
+ this.updateContext(prevType);
+ };
+
+ // ### Token reading
+
+ // This is the function that is called to fetch the next token. It
+ // is somewhat obscure, because it works in character codes rather
+ // than characters, and because operator parsing has been inlined
+ // into it.
+ //
+ // All in the name of speed.
+ //
+
+ Tokenizer.prototype.readToken_dot = function readToken_dot() {
+ var next = this.input.charCodeAt(this.state.pos + 1);
+ if (next >= 48 && next <= 57) {
+ return this.readNumber(true);
+ }
+
+ var next2 = this.input.charCodeAt(this.state.pos + 2);
+ if (next === 46 && next2 === 46) {
+ // 46 = dot '.'
+ this.state.pos += 3;
+ return this.finishToken(_types.types.ellipsis);
+ } else {
+ ++this.state.pos;
+ return this.finishToken(_types.types.dot);
+ }
+ };
+
+ Tokenizer.prototype.readToken_slash = function readToken_slash() {
+ // '/'
+ if (this.state.exprAllowed) {
+ ++this.state.pos;
+ return this.readRegexp();
+ }
+
+ var next = this.input.charCodeAt(this.state.pos + 1);
+ if (next === 61) {
+ return this.finishOp(_types.types.assign, 2);
+ } else {
+ return this.finishOp(_types.types.slash, 1);
+ }
+ };
+
+ Tokenizer.prototype.readToken_mult_modulo = function readToken_mult_modulo(code) {
+ // '%*'
+ var type = code === 42 ? _types.types.star : _types.types.modulo;
+ var width = 1;
+ var next = this.input.charCodeAt(this.state.pos + 1);
+
+ if (next === 42 && this.options.features["es7.exponentiationOperator"]) {
+ // '*'
+ width++;
+ next = this.input.charCodeAt(this.state.pos + 2);
+ type = _types.types.exponent;
+ }
+
+ if (next === 61) {
+ width++;
+ type = _types.types.assign;
+ }
+
+ return this.finishOp(type, width);
+ };
+
+ Tokenizer.prototype.readToken_pipe_amp = function readToken_pipe_amp(code) {
+ // '|&'
+ var next = this.input.charCodeAt(this.state.pos + 1);
+ if (next === code) return this.finishOp(code === 124 ? _types.types.logicalOR : _types.types.logicalAND, 2);
+ if (next === 61) return this.finishOp(_types.types.assign, 2);
+ return this.finishOp(code === 124 ? _types.types.bitwiseOR : _types.types.bitwiseAND, 1);
+ };
+
+ Tokenizer.prototype.readToken_caret = function readToken_caret() {
+ // '^'
+ var next = this.input.charCodeAt(this.state.pos + 1);
+ if (next === 61) {
+ return this.finishOp(_types.types.assign, 2);
+ } else {
+ return this.finishOp(_types.types.bitwiseXOR, 1);
+ }
+ };
+
+ Tokenizer.prototype.readToken_plus_min = function readToken_plus_min(code) {
+ // '+-'
+ var next = this.input.charCodeAt(this.state.pos + 1);
+
+ if (next === code) {
+ if (next === 45 && this.input.charCodeAt(this.state.pos + 2) === 62 && _utilWhitespace.lineBreak.test(this.input.slice(this.state.lastTokEnd, this.state.pos))) {
+ // A `-->` line comment
+ this.skipLineComment(3);
+ this.skipSpace();
+ return this.nextToken();
+ }
+ return this.finishOp(_types.types.incDec, 2);
+ }
+
+ if (next === 61) {
+ return this.finishOp(_types.types.assign, 2);
+ } else {
+ return this.finishOp(_types.types.plusMin, 1);
+ }
+ };
+
+ Tokenizer.prototype.readToken_lt_gt = function readToken_lt_gt(code) {
+ // '<>'
+ var next = this.input.charCodeAt(this.state.pos + 1);
+ var size = 1;
+
+ if (next === code) {
+ size = code === 62 && this.input.charCodeAt(this.state.pos + 2) === 62 ? 3 : 2;
+ if (this.input.charCodeAt(this.state.pos + size) === 61) return this.finishOp(_types.types.assign, size + 1);
+ return this.finishOp(_types.types.bitShift, size);
+ }
+
+ if (next === 33 && code === 60 && this.input.charCodeAt(this.state.pos + 2) === 45 && this.input.charCodeAt(this.state.pos + 3) === 45) {
+ if (this.inModule) this.unexpected();
+ // `