ember-scoped-css 0.23.2 → 0.23.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/declarations/lib/path/utils.d.ts.map +1 -1
- package/dist/cjs/app-css-loader.cjs +11 -2
- package/dist/cjs/babel-plugin.cjs +10 -1
- package/dist/cjs/ember-classic-support.cjs +8 -1
- package/dist/cjs/index.cjs +45 -7
- package/dist/cjs/template-plugin.cjs +11 -2
- package/package.json +1 -1
- package/src/build/scoped-css-unplugin.js +49 -6
- package/src/lib/path/utils.js +18 -1
package/README.md
CHANGED
|
@@ -49,9 +49,9 @@ export default defineConfig({
|
|
|
49
49
|
});
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
and then in your `babel.config.
|
|
52
|
+
and then in your `babel.config.mjs`, add a template-transform:
|
|
53
53
|
```js
|
|
54
|
-
|
|
54
|
+
import * as scopedCSS from "ember-scoped-css/build";
|
|
55
55
|
|
|
56
56
|
module.exports = {
|
|
57
57
|
plugins: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/path/utils.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/path/utils.js"],"names":[],"mappings":"AA+BA;;;;;;GAMG;AACH,mCAHW,MAAM,UAShB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qCAHW,MAAM,GACJ,MAAM,CAalB;AAED;;;;;GAKG;AACH,wCAFW,MAAM,WAQhB;AAED;;;;;;;;;;GAUG;AACH,gCAFW,MAAM,WAYhB;AAED;;;;GAIG;AACH,2CAHW,MAAM,UAOhB;AAED;;;;;;;;;GASG;AACH,yCAJW,MAAM,4BACN;IAAE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,uBAmErD;AAED,8EAsCC;AAED;;;;;;GAMG;AACH,iDA4BC;AA0BD,sEAoCC;AA2BD;;;;GAIG;AACH,uCAFW,MAAM,OAyChB"}
|
|
@@ -39,6 +39,7 @@ var import_node_path2 = __toESM(require("node:path"), 1);
|
|
|
39
39
|
// src/lib/path/utils.js
|
|
40
40
|
var import_node_assert = __toESM(require("node:assert"), 1);
|
|
41
41
|
var import_node_fs = __toESM(require("node:fs"), 1);
|
|
42
|
+
var import_node_module = require("node:module");
|
|
42
43
|
var import_node_path = __toESM(require("node:path"), 1);
|
|
43
44
|
|
|
44
45
|
// src/lib/path/hash-from-module-path.js
|
|
@@ -56,6 +57,12 @@ function hashFromAbsolutePath(absolutePath) {
|
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
// src/lib/path/utils.js
|
|
60
|
+
var import_meta = {};
|
|
61
|
+
var here = import_meta.url;
|
|
62
|
+
var ourRequire = globalThis.require ? globalThis.require : here && (0, import_node_module.createRequire)(here);
|
|
63
|
+
if (!ourRequire) {
|
|
64
|
+
ourRequire = require;
|
|
65
|
+
}
|
|
59
66
|
var EMBROIDER_DIR = "node_modules/.embroider";
|
|
60
67
|
var EMBROIDER_3_REWRITTEN_APP_PATH = `${EMBROIDER_DIR}/rewritten-app`;
|
|
61
68
|
var EMBROIDER_3_REWRITTEN_APP_ASSETS = `${EMBROIDER_3_REWRITTEN_APP_PATH}/assets`;
|
|
@@ -85,6 +92,8 @@ function isPod(filePath) {
|
|
|
85
92
|
return filePath.endsWith("styles.css");
|
|
86
93
|
}
|
|
87
94
|
function isRelevantFile(fileName, { additionalRoots, cwd }) {
|
|
95
|
+
if (fileName.startsWith("\0")) return false;
|
|
96
|
+
if (fileName.match(/^[a-zA-Z]/)) return false;
|
|
88
97
|
if (fileName.startsWith("/@embroider")) return false;
|
|
89
98
|
if (IRRELEVANT_PATHS.some((i) => fileName.includes(i))) return false;
|
|
90
99
|
if (fileName.includes("/node_modules/")) {
|
|
@@ -201,7 +210,7 @@ function moduleName(sourcePath) {
|
|
|
201
210
|
}
|
|
202
211
|
let environmentJS = import_node_path.default.join(workspace, "config/environment.js");
|
|
203
212
|
if (import_node_fs.default.existsSync(environmentJS)) {
|
|
204
|
-
const envFn =
|
|
213
|
+
const envFn = ourRequire(environmentJS);
|
|
205
214
|
const env = envFn("ember-scoped-css");
|
|
206
215
|
return env.modulePrefix || manifest.name;
|
|
207
216
|
}
|
|
@@ -305,4 +314,4 @@ async function app_css_loader_default(code) {
|
|
|
305
314
|
}
|
|
306
315
|
return code;
|
|
307
316
|
}
|
|
308
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2J1aWxkL2FwcC1jc3MtbG9hZGVyLmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC91dGlscy5qcyIsICIuLi8uLi9zcmMvbGliL3BhdGgvaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC9oYXNoLWZyb20tYWJzb2x1dGUtcGF0aC5qcyIsICIuLi8uLi9zcmMvbGliL3Jld3JpdGVDc3MuanMiLCAiLi4vLi4vc3JjL2xpYi9pc0luc2lkZUdsb2JhbC5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLy8gaW1wb3J0IHsgY3JlYXRlVW5wbHVnaW4gfSAgZnJvbSAndW5wbHVnaW4nO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgaGFzaEZyb20sIGlzUmVsZXZhbnRGaWxlIH0gZnJvbSAnLi4vbGliL3BhdGgvdXRpbHMuanMnO1xuaW1wb3J0IHJld3JpdGVDc3MgZnJvbSAnLi4vbGliL3Jld3JpdGVDc3MuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiAoY29kZSkge1xuICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKCk7XG4gIGNvbnN0IGNzc1BhdGggPSB0aGlzLnJlc291cmNlUGF0aDtcblxuICBpZiAoIWlzUmVsZXZhbnRGaWxlKGNzc1BhdGgsIHsgLi4ub3B0aW9ucywgY3dkOiB0aGlzLnJvb3RDb250ZXh0IH0pKSB7XG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cblxuICBpZiAoIWNzc1BhdGguc3RhcnRzV2l0aCh0aGlzLnJvb3RDb250ZXh0KSkge1xuICAgIHJldHVybiBjb2RlO1xuICB9XG5cbiAgY29uc3QgY3NzRmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGNzc1BhdGgpO1xuXG4gIGNvbnN0IGhic1BhdGggPSBjc3NQYXRoLnJlcGxhY2UoJy5jc3MnLCAnLmhicycpO1xuICBjb25zdCBnanNQYXRoID0gY3NzUGF0aC5yZXBsYWNlKCcuY3NzJywgJy5qcycpO1xuICBjb25zdCBndHNQYXRoID0gY3NzUGF0aC5yZXBsYWNlKCcuY3NzJywgJy50cycpO1xuXG4gIGlmIChleGlzdHNTeW5jKGdqc1BhdGgpIHx8IGV4aXN0c1N5bmMoZ3RzUGF0aCkgfHwgZXhpc3RzU3luYyhoYnNQYXRoKSkge1xuICAgIGNvbnN0IHBvc3RmaXggPSBoYXNoRnJvbShjc3NQYXRoKTtcbiAgICBjb25zdCByZXdyaXR0ZW5Dc3MgPSByZXdyaXRlQ3NzKFxuICAgICAgY29kZSxcbiAgICAgIHBvc3RmaXgsXG4gICAgICBjc3NGaWxlTmFtZSxcbiAgICAgIG9wdGlvbnMubGF5ZXJOYW1lLFxuICAgICk7XG5cbiAgICByZXR1cm4gcmV3cml0dGVuQ3NzO1xuICB9XG5cbiAgcmV0dXJuIGNvZGU7XG59XG4iLCAiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydCc7XG5pbXBvcnQgZnNTeW5jIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgaGFzaEZyb21BYnNvbHV0ZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1hYnNvbHV0ZS1wYXRoLmpzJztcbmltcG9ydCB7IGhhc2hGcm9tTW9kdWxlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzJztcblxuZXhwb3J0IHsgaGFzaEZyb21BYnNvbHV0ZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1hYnNvbHV0ZS1wYXRoLmpzJztcbmV4cG9ydCB7IGhhc2hGcm9tTW9kdWxlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzJztcblxuY29uc3QgRU1CUk9JREVSX0RJUiA9ICdub2RlX21vZHVsZXMvLmVtYnJvaWRlcic7XG5jb25zdCBFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEggPSBgJHtFTUJST0lERVJfRElSfS9yZXdyaXR0ZW4tYXBwYDtcbmNvbnN0IEVNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfQVNTRVRTID0gYCR7RU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9QQVRIfS9hc3NldHNgO1xuY29uc3QgRU1CUk9JREVSXzNfUkVXUklUVEVOX1BBQ0tBR0VTID0gYCR7RU1CUk9JREVSX0RJUn0vcmV3cml0dGVuLXBhY2thZ2VzYDtcbmNvbnN0IElSUkVMRVZBTlRfUEFUSFMgPSBbJ25vZGVfbW9kdWxlcy8ucG5wbSddO1xuY29uc3QgVU5TVVBQT1JURURfRElSRUNUT1JJRVMgPSBuZXcgU2V0KFsndGVzdHMnXSk7XG5cbmNvbnN0IENXRCA9IHByb2Nlc3MuY3dkKCk7XG5cbi8qKlxuICogUmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBmaWxlUGF0aCBmb3JtYXQgaXMsXG4gKiB0aGlzIHdpbGwgdHJ5IHRvIHJldHVybiB0aGUgY29ycmVjdCBwb3N0Zml4LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hGcm9tKGZpbGVQYXRoKSB7XG4gIGlmIChmaWxlUGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICByZXR1cm4gaGFzaEZyb21BYnNvbHV0ZVBhdGgoZmlsZVBhdGgpO1xuICB9XG5cbiAgcmV0dXJuIGhhc2hGcm9tTW9kdWxlUGF0aChmaWxlUGF0aCk7XG59XG5cbi8qKlxuICogQmFzZWQgb24gZW1iZXIncyBjb21wb25lbnQgbG9jYXRpb24gY29udmVudGlvbnMsXG4gKiB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJvdmlkZSBhIHBhdGggZm9yIHdoZXJlIHdlXG4gKiBleHBlY3QgdGhlIENTUyB0byBsaXZlLlxuICpcbiAqIEZvciBjby1sb2NhdGVkIHN0cnVjdHVyZTpcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC5oYnNcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC5jc3NcbiAqXG4gKiBGb3IgbmVzdGVkIGNvLWxvY2F0ZWQgc3RydWN0dXJlXG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQvZm9vLmhic1xuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50L2Zvby5jc3NcbiAqXG4gKiBGb3IgUG9kcyByb3V0ZXMgc3RydWN0dXJlXG4gKiAgIC0gcm91dGVzL215LXJvdXRlL3RlbXBsYXRlLntoYnMsanN9XG4gKiAgIC0gcm91dGVzL215LXJvdXRlL3N0eWxlcy5jc3NcbiAqXG4gKiBEZWxpYmVyYXRlbHkgbm90IHN1cHBvcnRlZDpcbiAqICAgLSBjb21wb25lbnRzIHcvIHBvZHMgLS0gdGhpcyBpcyBkZXByZWNhdGVkIGluIDUuMTBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWUgLSB0aGUgaGJzLCBqcywgZ2pzLCBndHMgb3Igd2hhdGV2ZXIgY28tbG9jYXRlZCBwYXRoLlxuICogQHJldHVybnMge3N0cmluZ30gLSBleHBlY3RlZCBjc3MgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3NzUGF0aEZvcihmaWxlTmFtZSkge1xuICBsZXQgd2l0aG91dEV4dCA9IHdpdGhvdXRFeHRlbnNpb24oZmlsZU5hbWUpO1xuICBsZXQgY3NzUGF0aCA9IHdpdGhvdXRFeHQgKyAnLmNzcyc7XG5cbiAgaWYgKGlzUG9kKGZpbGVOYW1lKSkge1xuICAgIGNzc1BhdGggPSBmaWxlTmFtZVxuICAgICAgLnJlcGxhY2UoL3RlbXBsYXRlXFwuanMkLywgJ3N0eWxlcy5jc3MnKVxuICAgICAgLnJlcGxhY2UoL3RlbXBsYXRlXFwuaGJzLywgJ3N0eWxlcy5jc3MnKTtcbiAgfVxuXG4gIHJldHVybiBjc3NQYXRoO1xufVxuXG4vKipcbiAqIE5vdGUgdGhhdCBjb21wb25lbnRzIGluIHRoZSBcInBvZHNcIiBjb252ZW50aW9uIHdpbGxcbiAqIG5ldmVyIGJlIHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9kVGVtcGxhdGUoZmlsZVBhdGgpIHtcbiAgaWYgKGZpbGVQYXRoLmluY2x1ZGVzKCcvY29tcG9uZW50cy8nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuanMnKSB8fCBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuaGJzJyk7XG59XG5cbi8qKlxuICogTm90ZSB0aGF0IGNvbXBvbmVudHMgaW4gdGhlIFwicG9kc1wiIGNvbnZlbnRpb24gd2lsbFxuICogbmV2ZXIgYmUgc3VwcG9ydGVkLlxuICpcbiAqIENoZWNrcyBpZiBhIGZpbGUgZW5kcyB3aXRoXG4gKiAtIHRlbXBsYXRlLmpzXG4gKiAtIHRlbXBsYXRlLmhic1xuICogLSBzdHlsZXMuY3NzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BvZChmaWxlUGF0aCkge1xuICBpZiAoZmlsZVBhdGguaW5jbHVkZXMoJy9jb21wb25lbnRzLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzUG9kVGVtcGxhdGUoZmlsZVBhdGgpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmlsZVBhdGguZW5kc1dpdGgoJ3N0eWxlcy5jc3MnKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKiBAcmV0dXJucyB0aGUgc2FtZSBwYXRoLCBidXQgd2l0aG91dCB0aGUgZXh0ZW5zaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRob3V0RXh0ZW5zaW9uKGZpbGVQYXRoKSB7XG4gIGxldCBwYXJzZWQgPSBwYXRoLnBhcnNlKGZpbGVQYXRoKTtcblxuICByZXR1cm4gcGF0aC5qb2luKHBhcnNlZC5kaXIsIHBhcnNlZC5uYW1lKTtcbn1cblxuLyoqXG4gKiBFeGFtcGxlcyBmb3IgZmlsZU5hbWVcbiAqIC0gYWJzb2x1dGUgb24tZGlzayBwYXRoXG4gKiAtIGluIHdlYnBhY2tcbiAqICAgLSBVUkwtYWJzb2x1dGUgcGF0aCwgc3RhcnRpbmcgd2l0aCAvXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lXG4gKiBAcGFyYW0ge3sgYWRkaXRpb25hbFJvb3RzPzogc3RyaW5nW107IGN3ZDogc3RyaW5nIH19IG9wdGlvbnNcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlbGV2YW50RmlsZShmaWxlTmFtZSwgeyBhZGRpdGlvbmFsUm9vdHMsIGN3ZCB9KSB7XG4gIGlmIChmaWxlTmFtZS5zdGFydHNXaXRoKCcvQGVtYnJvaWRlcicpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChJUlJFTEVWQU5UX1BBVEhTLnNvbWUoKGkpID0+IGZpbGVOYW1lLmluY2x1ZGVzKGkpKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChmaWxlTmFtZS5pbmNsdWRlcygnL25vZGVfbW9kdWxlcy8nKSkge1xuICAgIC8vIGlmIGEgZmlsZSBpcyBub3QgdGhlIGVtYnJvaWRlciBjYWNoZSBkaXJlY3RvcnlcbiAgICAvLyBhbmQgaXMgaW4gbm9kZV9tb2R1bGVzLCBza2lwIGl0LlxuICAgIGlmICghZmlsZU5hbWUuaW5jbHVkZXMoRU1CUk9JREVSX0RJUikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyByZXdyaXR0ZW4gcGFja2FnZXMgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCBhdCB0aGVpciBvd25cbiAgICAvLyBwdWJsaXNoIHRpbWVcbiAgICBpZiAoZmlsZU5hbWUuaW5jbHVkZXMoRU1CUk9JREVSXzNfUkVXUklUVEVOX1BBQ0tBR0VTKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRoZXNlIGFyZSBhbHJlYWR5IHRoZSBidW5kbGVkIGZpbGVzLlxuICAgIGlmIChmaWxlTmFtZS5pbmNsdWRlcyhFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX0FTU0VUUykpIHtcbiAgICAgIC8vIG5vdCBzdXBwb3J0ZWQsIG5ldmVyIHdpbGwgYmVcbiAgICAgIGlmIChmaWxlTmFtZS5lbmRzV2l0aChgJHtFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX0FTU0VUU30vdGVzdHMuanNgKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIElkZWFsbHksIHdlIG5ldmVyIGdldCBoZXJlIC0tIGluZGljYXRlcyB3ZSdyZSBub3QgZmlsdGVyaW5nIGVmZmVjdGl2ZWx5IGluIGJhYmVsXG4gICAgICAvLyBOT1RFOiBpZiB3ZSBnZXQgaGVyZSwgd2UncmUgdHJ5aW5nIHRvIG9wZXJhdGUgb24gYSBmaWxlIHRvbyBsYXRlLlxuICAgICAgLy8gICAgICAgd2UgbmVlZCBTY29wZWRDU1MgdG8gb3BlcmF0ZSBhcyBjbG9zZSB0byBvcmlnaW5hbCBzb3VyY2UgYXMgcG9zc2libGUgLS0gbm90IG91dHB1dCBmaWxlcy5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBsZXQgd29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoZmlsZU5hbWUpO1xuXG4gIGFzc2VydChjd2QsIGBjd2Qgd2FzIG5vdCBwYXNzZWQgdG8gaXNSZWxldmFudEZpbGVgKTtcblxuICBsZXQgb3VyV29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoY3dkKTtcblxuICBpZiAod29ya3NwYWNlICE9PSBvdXJXb3Jrc3BhY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgbG9jYWwgPSBmaWxlTmFtZS5yZXBsYWNlKHdvcmtzcGFjZSwgJycpO1xuICBsZXQgWywgLi4ucGFydHNdID0gbG9jYWwuc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgaWYgKFVOU1VQUE9SVEVEX0RJUkVDVE9SSUVTLmhhcyhwYXJ0c1swXSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogTW9zdGx5IHBvZHMgc3VwcG9ydC5cbiAgICogZm9sa3MgbmVlZCB0byBvcHQgaW4gdG8gcG9kcyAocm91dGVzKSwgYmVjYXVzZSBldmVyeSBwb2RzIGFwcCBjYW4gYmUgY29uZmlndXJlZCBkaWZmZXJlbnRseVxuICAgKi9cbiAgbGV0IHJvb3RzID0gWycvY29tcG9uZW50cy8nLCAnL3RlbXBsYXRlcy8nLCAuLi4oYWRkaXRpb25hbFJvb3RzIHx8IFtdKV07XG5cbiAgaWYgKCFyb290cy5zb21lKChyb290KSA9PiBmaWxlTmFtZS5pbmNsdWRlcyhyb290KSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VTY29wZWRQYXRoKSB7XG4gIC8qKlxuICAgKiAqQnkgY29udmVudGlvbiosIGBzcmNgIGlzIG9taXR0ZWQgZnJvbSBjb21wb25lbnQgcGF0aHMuXG4gICAqIFdlIGNhbiByZWZsZWN0IHRoZSBzYW1lIGJlaGF2aW9yIGJ5IHJlcGxhY2luZyBzcmMvXG4gICAqIHdpdGggYW4gZW1wdHkgc3RyaW5nLlxuICAgKlxuICAgKiBDU1MgaXNuJ3QgZW1pdHRlZCBhcyBhIGNvLWxvY2F0ZWQgbW9kdWxlLCBidXRcbiAgICogdG8ga2VlcCBjb252ZW50aW9ucyBjb25zaXN0ZW50IGFjcm9zcyBsYW5ndWFnZXMsXG4gICAqIHdlIGNhbiBwcmV0ZW5kIGl0IGlzLlxuICAgKlxuICAgKiBBbnkgY3VzdG9taXphdGlvbiBiZXlvbmQgcmVtb3ZpbmcgYHNyY2AgYW5kIGBhcHBgIGlzIHBvdGVudGlhbGx5IGNvbmZ1c2luZy5cbiAgICogSWYgd2UgbmVlZCBmdXJ0aGVyIGN1c3RvbWl6YXRpb25zLCB3ZSdsbCB3YW50IHRvIG1hdGNoIG9uIGBleHBvcnRzYCBpbiB0aGVcbiAgICogY29ycmVzcG9uZGluZyBwYWNrYWdlLmpzb25cbiAgICovXG4gIGxldCBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlU2NvcGVkUGF0aC5yZXBsYWNlKC9eXFwvc3JjXFwvLywgJy8nKTtcblxuICBsZXQgcGFyc2VkID0gcGF0aC5wYXJzZShwYWNrYWdlUmVsYXRpdmUpO1xuXG4gIGlmIChpc1BvZChwYWNrYWdlUmVsYXRpdmUpKSB7XG4gICAgLyoqXG4gICAgICogRm9yIHBvZHMsIHdlIGNob3Agb2ZmIHRoZSB3aG9sZSBmaWxlLCBhbmQgdXNlIHRoZSBkaXIgbmFtZSBhcyB0aGUgXCJtb2R1bGVQYXRoXCJcbiAgICAgKi9cbiAgICByZXR1cm4gcGFyc2VkLmRpcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBhbiBleHRlbnNpb24gaXMgcGFzc2VkLCByZW1vdmUgaXQuXG4gICAqIFdoZW4gdXNpbmcgcGFja2FnZXJzLCBmb2xrcyBhcmUgdXNlZCB0byBub3QgaGF2aW5nIHRvIHNwZWNpZnkgZXh0ZW5zaW9ucyBmb3IgZmlsZXMuXG4gICAqIFNpbmNlIHdlIGRvbid0IGV2ZW4gZW1pdCBjc3MgZmlsZXMgY28tbG9jYXRlZCB0byBlYWNoIG1vZHVsZSxcbiAgICogdGhpcyBoZWxwcyB1cyBub3QgY29udmV5IGEgbGllIHRoYXQgYSBmaWxlIG1heSBleGlzdCBpbiBhdCBydW50aW1lLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSBgPG1vZHVsZS1uYW1lPi9jb21wb25lbnRzL2J1dHRvbmAuXG4gICAqIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIGV4dGVuc2lvbiBpcywgYmVjYXVzZSB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgY3NzIGZpbGVcbiAgICogZm9yIHRoZSBidXR0b24gbW9kdWxlIGFueXdheS5cbiAgICovXG4gIGxldCBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoID0gcGF0aC5qb2luKHBhcnNlZC5kaXIsIHBhcnNlZC5uYW1lKTtcblxuICByZXR1cm4gbG9jYWxQYWNrYWdlclN0eWxlUGF0aDtcbn1cblxuLyoqXG4gKiByZXR1cm5zIHRoZSBhcHAtbW9kdWxlIHBhdGggb2YgdGhlIHNvdXJjZSBmaWxlXG4gKlxuICogVGhpcyBhc3N1bWVzIG5vcm1hbCBlbWJlciBhcHAgY29udmVudGlvbnNcbiAqXG4gKiB3aGljaCBpcyBgPHBhY2thZ2UuanNvbiNuYW1lPi9wYXRoLXRvLWZpbGVgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBQYXRoKHNvdXJjZVBhdGgpIHtcbiAgbGV0IHdvcmtzcGFjZVBhdGggPSBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKTtcbiAgbGV0IG5hbWUgPSBtb2R1bGVOYW1lKHNvdXJjZVBhdGgpO1xuXG4gIC8qKlxuICAgKiAgVW5kZXIgZW1icm9pZGVyIGJ1aWxkcywgdGhlIHNwZWMtY29tcGxpYW50IHZlcnNpb24gb2YgdGhlIGFwcFxuICAgKiBoYXMgYWxsIHRoZSBmaWxlcyB1bmRlciBhIGZvbGRlciB3aGljaCByZXByZXNlbnRzIHRoZSBwYWNrYWdlIG5hbWUsXG4gICAqIHJhdGhlciB0aGFuIFwiYXBwXCIuXG4gICAqL1xuICBsZXQgcGFja2FnZVJlbGF0aXZlID0gc291cmNlUGF0aC5yZXBsYWNlKHdvcmtzcGFjZVBhdGgsICcnKTtcblxuICAvKipcbiAgICogQnV0IHdlIGFsc28gZG9uJ3Qgd2FudCAnYXBwJyAtLSB3aGljaCBpcyBwcmVzZW50IGluIHRoZSB2MSBhZGRvbiBwaXBlbGluZVxuICAgKi9cbiAgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVJlbGF0aXZlLnJlcGxhY2UoYC9hcHAvYCwgYC9gKTtcblxuICAvKipcbiAgICogYWxzbyBhbHNvLCB3ZSBrbm93IHRoYXQgdGhlIHJlLXdyaXR0ZW4gYXBwIHN0cnVjdHVyZSBpbiBlbWJyb2lkZXJAdjNcbiAgICogaXMgZXh0cmFuZW91cywgYW5kIHdlIGNhbiBjb2xsYXBzZSBpdFxuICAgKi9cbiAgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVJlbGF0aXZlLnJlcGxhY2UoXG4gICAgYCR7RU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9QQVRIfS9gLFxuICAgICcvJyxcbiAgKTtcblxuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgcmV0dXJuIGAke25hbWV9JHtsb2NhbFBhY2thZ2VyU3R5bGVQYXRofWA7XG59XG5cbi8qKlxuICogVG8gYXZvaWQgaGl0dGluZyB0aGUgZmlsZXN5c2V0bSwgd2UnbGwgc3RvcmUgYWxsIGZvdW5kXG4gKiBwcm9qZWN0IHBhdGhzIGJlcmUsIHNvIHdlIGNhbiwgaW4gbWVtb3J5LFxuICogZ2V0IHRoZSBmb2xkZXIgd2hlcmUgYSBwYWNrYWdlLmpzb24gZXhpc3RzLCByYXRoZXIgdGhhblxuICogaGl0IHRoZSBmaWxlIHN5c3RlbSBldmVyeSB0aW1lLlxuICovXG5jb25zdCBTRUVOID0gbmV3IFNldCgpO1xuXG5mdW5jdGlvbiBnZXRTZWVuKHNvdXJjZVBhdGgpIHtcbiAgaWYgKFNFRU4uaGFzKHNvdXJjZVBhdGgpKSByZXR1cm4gc291cmNlUGF0aDtcblxuICBsZXQgcGFydHMgPSBzb3VyY2VQYXRoLnNwbGl0KCcvJyk7XG5cbiAgZm9yIChsZXQgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPiAxOyBpLS0pIHtcbiAgICBsZXQgdG9DaGVjayA9IHBhcnRzLnNsaWNlKDAsIGkpLmpvaW4oJy8nKTtcblxuICAgIGxldCBzZWVuID0gU0VFTi5oYXModG9DaGVjayk7XG5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgcmV0dXJuIHRvQ2hlY2s7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoLCBvcHRpb25zKSB7XG4gIGxldCBjd2QgPSBvcHRpb25zPy5jd2QgPz8gQ1dEO1xuXG4gIGlmIChzb3VyY2VQYXRoLmluY2x1ZGVzKEVNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfUEFUSCkpIHtcbiAgICBzb3VyY2VQYXRoID0gc291cmNlUGF0aC5zcGxpdChFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEgpWzBdO1xuICB9XG5cbiAgaWYgKHNvdXJjZVBhdGguZW5kc1dpdGgoJy8nKSkge1xuICAgIHNvdXJjZVBhdGggPSBzb3VyY2VQYXRoLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gIH1cblxuICBsZXQgc2VlbiA9IGdldFNlZW4oc291cmNlUGF0aCk7XG5cbiAgaWYgKHNlZW4pIHtcbiAgICByZXR1cm4gc2VlbjtcbiAgfVxuXG4gIGxldCBjYW5kaWRhdGVQYXRoID0gcGF0aC5qb2luKHNvdXJjZVBhdGgsICdwYWNrYWdlLmpzb24nKTtcblxuICBjb25zdCBpc1dvcmtzcGFjZSA9IGZzU3luYy5leGlzdHNTeW5jKGNhbmRpZGF0ZVBhdGgpO1xuXG4gIGlmIChpc1dvcmtzcGFjZSkge1xuICAgIHJldHVybiBzb3VyY2VQYXRoO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gZmluZFBhY2thZ2VKc29uVXAoc291cmNlUGF0aCwgeyBjd2QgfSk7XG5cbiAgaWYgKCFwYWNrYWdlSnNvblBhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBkZXRlcm1pbmUgcHJvamVjdCBmb3IgJHtzb3VyY2VQYXRofWApO1xuICB9XG5cbiAgY29uc3Qgd29ya3NwYWNlUGF0aCA9IHBhdGguZGlybmFtZShwYWNrYWdlSnNvblBhdGgpO1xuXG4gIFNFRU4uYWRkKHdvcmtzcGFjZVBhdGgpO1xuXG4gIHJldHVybiB3b3Jrc3BhY2VQYXRoO1xufVxuXG5mdW5jdGlvbiBmaW5kUGFja2FnZUpzb25VcChzdGFydFBhdGgsIG9wdGlvbnMpIHtcbiAgbGV0IGN3ZCA9IG9wdGlvbnM/LmN3ZCA/PyBDV0Q7XG4gIGxldCBwYXJ0cyA9IHN0YXJ0UGF0aC5zcGxpdCgnLycpO1xuXG4gIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID4gMTsgaS0tKSB7XG4gICAgbGV0IHRvQ2hlY2sgPSBwYXJ0cy5zbGljZSgwLCBpKS5qb2luKCcvJyk7XG5cbiAgICBsZXQgcGFja2FnZUpzb24gPSBwYXRoLmpvaW4odG9DaGVjaywgJ3BhY2thZ2UuanNvbicpO1xuICAgIGxldCBleGlzdHMgPSBmc1N5bmMuZXhpc3RzU3luYyhwYWNrYWdlSnNvbik7XG5cbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICByZXR1cm4gcGFja2FnZUpzb247XG4gICAgfVxuXG4gICAgLy8gRG9uJ3QgdHJhdmVyc2UgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3Qgb2YgdGhlIGZpbGUgc3lzdGVtLlxuICAgIGlmICh0b0NoZWNrID09PSBjd2QpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBNQU5JRkVTVF9DQUNIRSA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiB0aGUgcGFja2FnZS5qc29uI25hbWUsIG9yIGNvbmZpZy9lbnZpcm9ubWVudCNtb3VkbGVQcmVmaXggKGlmIHYxIGFwcClcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlUGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kdWxlTmFtZShzb3VyY2VQYXRoKSB7XG4gIGNvbnN0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuICBjb25zdCBtYW5pZmVzdCA9IGdldE1hbmlmZXN0KHdvcmtzcGFjZSk7XG5cbiAgaWYgKG1hbmlmZXN0WydlbWJlci1hZGRvbiddKSB7XG4gICAgLyoqXG4gICAgICogTGlicmFyaWVzIGFyZSBub3QgYWxsb3dlZCB0byBjdXN0b21pemUgdGhlaXIgbW9kdWxlIG5hbWVcbiAgICAgKiB0byBiZSBkaWZmZXJlbnQgZnJvbSB0aGVpciBwYWNrYWdlIG5hbWUuXG4gICAgICpcbiAgICAgKiAoSXQncyBhbHNvIGJvbmtlcnMgdGhhdCB0aGlzIGlzIGFsbG93ZWQgZm9yIHYxIGFwcHMpXG4gICAgICovXG4gICAgcmV0dXJuIG1hbmlmZXN0Lm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogRm9yIHYxIGFwcHMsIHdlIG5lZWQgdG8gcmVmZXJlbmNlIHRoZSBjb25maWcvZW52aXJvbm1lbnQuanMgZmlsZVxuICAgKiB0byBzZWUgaWYgdGhlIG1vZHVsZVByZWZpeCBzZXR0aW5nIGRpZmZlcnMgZnJvbSBtYW5pZmVzdC5uYW1lO1xuICAgKi9cbiAgbGV0IGVudmlyb25tZW50SlMgPSBwYXRoLmpvaW4od29ya3NwYWNlLCAnY29uZmlnL2Vudmlyb25tZW50LmpzJyk7XG5cbiAgLyoqXG4gICAqIE5PVEU6IHRoZSBlbnZpcm9ubWVudC5qcyBpcyBhIGNvbW1vbkpTIGZpbGUsIHNvIHdlIGNhbiBzeW5jaHJvbm91c2x5IHJlcXVpcmUgaXRcbiAgICpcbiAgICogVE9ETzogaWYgd2UgaGF2ZSBpc3N1ZXMgd2l0aCBsb2FkaW5nIHRoaXMgZmlsZSBsYXRlciB3ZSBzaG91bGQgcHJvYmFibHkganVzdCBydW4ganNjb2Rlc2hpZnQgb24gaXRcbiAgICogICAgICAgYnV0IHRoYXQgY291bGQgYWxsb3cgdXMgdG8gYmUgYnJpdHRsZSBpbiBkaWZmZXJlbnQgd2F5cywgbGlrZSBpZiBmb2xrcyBzdHJheSBmcm9tIHRoZSB3YXkgdGhlXG4gICAqICAgICAgIGZpbGUgaXMgbGFpZCBvdXQgZnJvbSB0aGUgYmx1ZXByaW50IGRlZmF1bHRzLlxuICAgKi9cbiAgaWYgKGZzU3luYy5leGlzdHNTeW5jKGVudmlyb25tZW50SlMpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmIC0tIHRoaXMgZXhpc3RzXG4gICAgY29uc3QgZW52Rm4gPSByZXF1aXJlKGVudmlyb25tZW50SlMpO1xuICAgIGNvbnN0IGVudiA9IGVudkZuKCdlbWJlci1zY29wZWQtY3NzJyk7XG5cbiAgICByZXR1cm4gZW52Lm1vZHVsZVByZWZpeCB8fCBtYW5pZmVzdC5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhbGxiYWNrIHRvIHRoZSB0cnVlXHUyMTIyIG1vZHVsZVx1MjEyMiBuYW1lLlxuICAgKi9cbiAgcmV0dXJuIG1hbmlmZXN0Lm5hbWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHdvcmtzcGFjZVxuICovXG5mdW5jdGlvbiBnZXRNYW5pZmVzdCh3b3Jrc3BhY2UpIHtcbiAgbGV0IGV4aXN0aW5nID0gTUFOSUZFU1RfQ0FDSEUuZ2V0KHdvcmtzcGFjZSk7XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nO1xuICB9XG5cbiAgbGV0IGJ1ZmZlciA9IGZzU3luYy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHdvcmtzcGFjZSwgJ3BhY2thZ2UuanNvbicpKTtcbiAgbGV0IGNvbnRlbnQgPSBidWZmZXIudG9TdHJpbmcoKTtcbiAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuXG4gIE1BTklGRVNUX0NBQ0hFLnNldCh3b3Jrc3BhY2UsIGpzb24pO1xuXG4gIHJldHVybiBqc29uO1xufVxuIiwgImltcG9ydCBtZDUgZnJvbSAnYmx1ZWltcC1tZDUnO1xuXG4vKipcbiAqIFRoZSBpbnRlbnQgb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBnZW5lcmF0ZSB0aGUgc3VmZml4L3Bvc3RmaXggZm9yIHRoZVxuICogY3NzIGNsYXNzZXMsIGJhc2VkIG9uIHRoZSBtb2R1bGUtc2NvcGVkIHBhdGggbmFtZS5cbiAqXG4gKiBmb3IgZXhhbXBsZSxcbiAqICAgIGhhc2goJ215LWFwcC9jb21wb25lbnRzL2ZvbycpXG4gKiAgaW5zdGVhZCBvZlxuICogICAgaGFzaCgnYXBwL2NvbXBvbmVudHMvZm9vJylcbiAqXG4gKiAgKHVubGVzcyB5b3VyIGFwcCBuYW1lIGlzICdhcHAnKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVQYXRoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaChtb2R1bGVQYXRoKSB7XG4gIHJldHVybiAnZScgKyBtZDUobW9kdWxlUGF0aCkuc3Vic3RyaW5nKDAsIDgpO1xufVxuXG5cbmV4cG9ydCBjb25zdCBoYXNoRnJvbU1vZHVsZVBhdGggPSBoYXNoO1xuIiwgImltcG9ydCB7IGhhc2ggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5pbXBvcnQgeyBhcHBQYXRoIH0gZnJvbSAnLi91dGlscy5qcyc7XG5cbmV4cG9ydCB7IGhhc2ggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoRnJvbUFic29sdXRlUGF0aChhYnNvbHV0ZVBhdGgpIHtcbiAgLyoqXG4gICAqIFRoZSB3aG9sZSBvZiBgYXBwUGF0aGAgdWx0aW1hdGVseSB0cmFuc2Zvcm1zIHRoZSBgYWJzb2x1dGVQYXRoYFxuICAgKiBpbnRvIHRoZSBleGFjdCBzdHJpbmcgdGhhdCBmb2xrcyB3aWxsIHBhc3MgdG8gYHJlbGF0aXZlUGF0aGBcbiAgICogYXQgcnVudGltZS5cbiAgICovXG4gIGNvbnN0IG1vZHVsZVBhdGggPSBhcHBQYXRoKGFic29sdXRlUGF0aCk7XG4gIGNvbnN0IHBvc3RmaXggPSBoYXNoKG1vZHVsZVBhdGgpO1xuXG4gIHJldHVybiBwb3N0Zml4O1xufVxuIiwgImltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBhcnNlciBmcm9tICdwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlcic7XG5cbmltcG9ydCBpc0luc2lkZUdsb2JhbCBmcm9tICcuL2lzSW5zaWRlR2xvYmFsLmpzJztcblxuZnVuY3Rpb24gcmV3cml0ZVNlbGVjdG9yKHNlbCwgcG9zdGZpeCkge1xuICBjb25zdCB0cmFuc2Zvcm0gPSAoc2VsZWN0b3JzKSA9PiB7XG4gICAgc2VsZWN0b3JzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ2NsYXNzJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHNlbGVjdG9yLnZhbHVlICs9ICdfJyArIHBvc3RmaXg7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICd0YWcnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoXG4gICAgICAgICAgcGFyc2VyLnRhZyh7IHZhbHVlOiBzZWxlY3Rvci52YWx1ZSB9KSxcbiAgICAgICAgICBwYXJzZXIuY2xhc3NOYW1lKHsgdmFsdWU6IHBvc3RmaXggfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyByZW1vdmUgOmdsb2JhbFxuICAgIHNlbGVjdG9ycy53YWxrKChzZWxlY3RvcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICdwc2V1ZG8nICYmIHNlbGVjdG9yLnZhbHVlID09PSAnOmdsb2JhbCcpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoLi4uc2VsZWN0b3Iubm9kZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHBhcnNlcih0cmFuc2Zvcm0pLnByb2Nlc3NTeW5jKHNlbCk7XG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkO1xufVxuXG5mdW5jdGlvbiBpc0luc2lkZUtleWZyYW1lcyhub2RlKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ2F0cnVsZScgJiYgcGFyZW50Lm5hbWUgPT09ICdrZXlmcmFtZXMnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVLZXlmcmFtZXMocGFyZW50KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmV3cml0ZUNzcyhjc3MsIHBvc3RmaXgsIGZpbGVOYW1lLCBsYXllck5hbWUpIHtcbiAgY29uc3QgbGF5ZXJOYW1lV2l0aERlZmF1bHQgPSBsYXllck5hbWUgPz8gJ2NvbXBvbmVudHMnO1xuICBjb25zdCBhc3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cbiAgYXN0LndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlID09PSAncnVsZScgJiYgIWlzSW5zaWRlS2V5ZnJhbWVzKG5vZGUpKSB7XG4gICAgICBub2RlLnNlbGVjdG9yID0gcmV3cml0ZVNlbGVjdG9yKG5vZGUuc2VsZWN0b3IsIHBvc3RmaXgpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgcmV3cml0dGVuQ3NzID0gYXN0LnRvU3RyaW5nKCk7XG5cbiAgaWYgKCFsYXllck5hbWVXaXRoRGVmYXVsdCkge1xuICAgIHJldHVybiBgLyogJHtmaWxlTmFtZX0gKi9cXG4ke3Jld3JpdHRlbkNzc31cXG5gO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBgLyogJHtmaWxlTmFtZX0gKi9cXG5AbGF5ZXIgJHtsYXllck5hbWVXaXRoRGVmYXVsdH0ge1xcblxcbmAgK1xuICAgIHJld3JpdHRlbkNzcyArXG4gICAgJ1xcbn1cXG4nXG4gICk7XG59XG5cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0luc2lkZUdsb2JhbChub2RlLCBmdW5jKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ3BzZXVkbycgJiYgcGFyZW50LnZhbHVlID09PSAnOmdsb2JhbCcpIHJldHVybiB0cnVlO1xuXG4gIHJldHVybiBpc0luc2lkZUdsb2JhbChwYXJlbnQsIGZ1bmMpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBLElBQUFBLGtCQUEyQjtBQUMzQixJQUFBQyxvQkFBaUI7OztBQ0ZqQix5QkFBbUI7QUFDbkIscUJBQW1CO0FBQ25CLHVCQUFpQjs7O0FDRmpCLHlCQUFnQjtBQWdCVCxTQUFTLEtBQUssWUFBWTtBQUMvQixTQUFPLFVBQU0sbUJBQUFDLFNBQUksVUFBVSxFQUFFLFVBQVUsR0FBRyxDQUFDO0FBQzdDO0FBR08sSUFBTSxxQkFBcUI7OztBQ2hCM0IsU0FBUyxxQkFBcUIsY0FBYztBQU1qRCxRQUFNLGFBQWEsUUFBUSxZQUFZO0FBQ3ZDLFFBQU0sVUFBVSxL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LEVBQUUsWUFBWSxHQUFHO0FBRXJELFNBQU87QUFDVDtBQUVBLFNBQVMsa0JBQWtCLE1BQU07QUFDL0IsUUFBTSxTQUFTLEtBQUs7QUFFcEIsTUFBSSxDQUFDLE9BQVEsUUFBTztBQUNwQixNQUFJLE9BQU8sU0FBUyxZQUFZLE9BQU8sU0FBUyxZQUFhLFFBQU87QUFFcEUsU0FBTyxrQkFBa0IsTUFBTTtBQUNqQztBQUVlLFNBQVIsV0FBNEIsS0FBSyxTQUFTLFVBQVUsV0FBVztBQUNwRSxRQUFNLHVCQUF1QixhQUFhO0FBQzFDLFFBQU0sTUFBTSxlQUFBQyxRQUFRLE1BQU0sR0FBRztBQUU3QixNQUFJLEtBQUssQ0FBQyxTQUFTO0FBQ2pCLFFBQUksS0FBSyxTQUFTLFVBQVUsQ0FBQyxrQkFBa0IsSUFBSSxHQUFHO0FBQ3BELFdBQUssV0FBVyxnQkFBZ0IsS0FBSyxVQUFVLE9BQU87QUFBQSxJQUN4RDtBQUFBLEVBQ0YsQ0FBQztBQUVELFFBQU0sZUFBZSxJQUFJLFNBQVM7QUFFbEMsTUFBSSxDQUFDLHNCQUFzQjtBQUN6QixXQUFPLE1BQU0sUUFBUTtBQUFBLEVBQVEsWUFBWTtBQUFBO0FBQUEsRUFDM0M7QUFFQSxTQUNFLE1BQU0sUUFBUTtBQUFBLFNBQWUsb0JBQW9CO0FBQUE7QUFBQSxJQUNqRCxlQUNBO0FBRUo7OztBSnJEQSxlQUFPLHVCQUF3QixNQUFNO0FBQ25DLFFBQU0sVUFBVSxLQUFLLFdBQVc7QUFDaEMsUUFBTSxVQUFVLEtBQUs7QUFFckIsTUFBSSxDQUFDLGVBQWUsU0FBUyxFQUFFLEdBQUcsU0FBUyxLQUFLLEtBQUssWUFBWSxDQUFDLEdBQUc7QUFDbkUsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLENBQUMsUUFBUSxXQUFXLEtBQUssV0FBVyxHQUFHO0FBQ3pDLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxjQUFjLGtCQUFBQyxRQUFLLFNBQVMsT0FBTztBQUV6QyxRQUFNLFVBQVUsUUFBUSxRQUFRLFFBQVEsTUFBTTtBQUM5QyxRQUFNLFVBQVUsUUFBUSxRQUFRLFFBQVEsS0FBSztBQUM3QyxRQUFNLFVBQVUsUUFBUSxRQUFRLFFBQVEsS0FBSztBQUU3QyxVQUFJLDRCQUFXLE9BQU8sU0FBSyw0QkFBVyxPQUFPLFNBQUssNEJBQVcsT0FBTyxHQUFHO0FBQ3JFLFVBQU0sVUFBVSxTQUFTLE9BQU87QUFDaEMsVUFBTSxlQUFlO0FBQUEsTUFDbkI7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0EsUUFBUTtBQUFBLElBQ1Y7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFsiaW1wb3J0X25vZGVfZnMiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJtZDUiLCAiYXNzZXJ0IiwgInBhdGgiLCAiZnNTeW5jIiwgInBhcnNlciIsICJwb3N0Y3NzIiwgInBhdGgiXQp9Cg==
|
|
317
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2J1aWxkL2FwcC1jc3MtbG9hZGVyLmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC91dGlscy5qcyIsICIuLi8uLi9zcmMvbGliL3BhdGgvaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC9oYXNoLWZyb20tYWJzb2x1dGUtcGF0aC5qcyIsICIuLi8uLi9zcmMvbGliL3Jld3JpdGVDc3MuanMiLCAiLi4vLi4vc3JjL2xpYi9pc0luc2lkZUdsb2JhbC5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLy8gaW1wb3J0IHsgY3JlYXRlVW5wbHVnaW4gfSAgZnJvbSAndW5wbHVnaW4nO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgaGFzaEZyb20sIGlzUmVsZXZhbnRGaWxlIH0gZnJvbSAnLi4vbGliL3BhdGgvdXRpbHMuanMnO1xuaW1wb3J0IHJld3JpdGVDc3MgZnJvbSAnLi4vbGliL3Jld3JpdGVDc3MuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiAoY29kZSkge1xuICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKCk7XG4gIGNvbnN0IGNzc1BhdGggPSB0aGlzLnJlc291cmNlUGF0aDtcblxuICBpZiAoIWlzUmVsZXZhbnRGaWxlKGNzc1BhdGgsIHsgLi4ub3B0aW9ucywgY3dkOiB0aGlzLnJvb3RDb250ZXh0IH0pKSB7XG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cblxuICBpZiAoIWNzc1BhdGguc3RhcnRzV2l0aCh0aGlzLnJvb3RDb250ZXh0KSkge1xuICAgIHJldHVybiBjb2RlO1xuICB9XG5cbiAgY29uc3QgY3NzRmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGNzc1BhdGgpO1xuXG4gIGNvbnN0IGhic1BhdGggPSBjc3NQYXRoLnJlcGxhY2UoJy5jc3MnLCAnLmhicycpO1xuICBjb25zdCBnanNQYXRoID0gY3NzUGF0aC5yZXBsYWNlKCcuY3NzJywgJy5qcycpO1xuICBjb25zdCBndHNQYXRoID0gY3NzUGF0aC5yZXBsYWNlKCcuY3NzJywgJy50cycpO1xuXG4gIGlmIChleGlzdHNTeW5jKGdqc1BhdGgpIHx8IGV4aXN0c1N5bmMoZ3RzUGF0aCkgfHwgZXhpc3RzU3luYyhoYnNQYXRoKSkge1xuICAgIGNvbnN0IHBvc3RmaXggPSBoYXNoRnJvbShjc3NQYXRoKTtcbiAgICBjb25zdCByZXdyaXR0ZW5Dc3MgPSByZXdyaXRlQ3NzKFxuICAgICAgY29kZSxcbiAgICAgIHBvc3RmaXgsXG4gICAgICBjc3NGaWxlTmFtZSxcbiAgICAgIG9wdGlvbnMubGF5ZXJOYW1lLFxuICAgICk7XG5cbiAgICByZXR1cm4gcmV3cml0dGVuQ3NzO1xuICB9XG5cbiAgcmV0dXJuIGNvZGU7XG59XG4iLCAiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydCc7XG5pbXBvcnQgZnNTeW5jIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gJ25vZGU6bW9kdWxlJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB7IGhhc2hGcm9tQWJzb2x1dGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tYWJzb2x1dGUtcGF0aC5qcyc7XG5pbXBvcnQgeyBoYXNoRnJvbU1vZHVsZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5cbmV4cG9ydCB7IGhhc2hGcm9tQWJzb2x1dGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tYWJzb2x1dGUtcGF0aC5qcyc7XG5leHBvcnQgeyBoYXNoRnJvbU1vZHVsZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5cbi8vIENKUyAvIEVTTT9cbmxldCBoZXJlID0gaW1wb3J0Lm1ldGEudXJsO1xubGV0IG91clJlcXVpcmUgPSBnbG9iYWxUaGlzLnJlcXVpcmVcbiAgPyBnbG9iYWxUaGlzLnJlcXVpcmVcbiAgOiBoZXJlICYmIGNyZWF0ZVJlcXVpcmUoaGVyZSk7XG5cbmlmICghb3VyUmVxdWlyZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgb3VyUmVxdWlyZSA9IHJlcXVpcmU7XG59XG5cbmNvbnN0IEVNQlJPSURFUl9ESVIgPSAnbm9kZV9tb2R1bGVzLy5lbWJyb2lkZXInO1xuY29uc3QgRU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9QQVRIID0gYCR7RU1CUk9JREVSX0RJUn0vcmV3cml0dGVuLWFwcGA7XG5jb25zdCBFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX0FTU0VUUyA9IGAke0VNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfUEFUSH0vYXNzZXRzYDtcbmNvbnN0IEVNQlJPSURFUl8zX1JFV1JJVFRFTl9QQUNLQUdFUyA9IGAke0VNQlJPSURFUl9ESVJ9L3Jld3JpdHRlbi1wYWNrYWdlc2A7XG5jb25zdCBJUlJFTEVWQU5UX1BBVEhTID0gWydub2RlX21vZHVsZXMvLnBucG0nXTtcbmNvbnN0IFVOU1VQUE9SVEVEX0RJUkVDVE9SSUVTID0gbmV3IFNldChbJ3Rlc3RzJ10pO1xuXG5jb25zdCBDV0QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4vKipcbiAqIFJlZ2FyZGxlc3Mgb2Ygd2hhdCB0aGUgZmlsZVBhdGggZm9ybWF0IGlzLFxuICogdGhpcyB3aWxsIHRyeSB0byByZXR1cm4gdGhlIGNvcnJlY3QgcG9zdGZpeC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoRnJvbShmaWxlUGF0aCkge1xuICBpZiAoZmlsZVBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgcmV0dXJuIGhhc2hGcm9tQWJzb2x1dGVQYXRoKGZpbGVQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBoYXNoRnJvbU1vZHVsZVBhdGgoZmlsZVBhdGgpO1xufVxuXG4vKipcbiAqIEJhc2VkIG9uIGVtYmVyJ3MgY29tcG9uZW50IGxvY2F0aW9uIGNvbnZlbnRpb25zLFxuICogdGhpcyBmdW5jdGlvbiB3aWxsIHByb3ZpZGUgYSBwYXRoIGZvciB3aGVyZSB3ZVxuICogZXhwZWN0IHRoZSBDU1MgdG8gbGl2ZS5cbiAqXG4gKiBGb3IgY28tbG9jYXRlZCBzdHJ1Y3R1cmU6XG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQuaGJzXG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQuY3NzXG4gKlxuICogRm9yIG5lc3RlZCBjby1sb2NhdGVkIHN0cnVjdHVyZVxuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50L2Zvby5oYnNcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC9mb28uY3NzXG4gKlxuICogRm9yIFBvZHMgcm91dGVzIHN0cnVjdHVyZVxuICogICAtIHJvdXRlcy9teS1yb3V0ZS90ZW1wbGF0ZS57aGJzLGpzfVxuICogICAtIHJvdXRlcy9teS1yb3V0ZS9zdHlsZXMuY3NzXG4gKlxuICogRGVsaWJlcmF0ZWx5IG5vdCBzdXBwb3J0ZWQ6XG4gKiAgIC0gY29tcG9uZW50cyB3LyBwb2RzIC0tIHRoaXMgaXMgZGVwcmVjYXRlZCBpbiA1LjEwXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lIC0gdGhlIGhicywganMsIGdqcywgZ3RzIG9yIHdoYXRldmVyIGNvLWxvY2F0ZWQgcGF0aC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gZXhwZWN0ZWQgY3NzIHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNzc1BhdGhGb3IoZmlsZU5hbWUpIHtcbiAgbGV0IHdpdGhvdXRFeHQgPSB3aXRob3V0RXh0ZW5zaW9uKGZpbGVOYW1lKTtcbiAgbGV0IGNzc1BhdGggPSB3aXRob3V0RXh0ICsgJy5jc3MnO1xuXG4gIGlmIChpc1BvZChmaWxlTmFtZSkpIHtcbiAgICBjc3NQYXRoID0gZmlsZU5hbWVcbiAgICAgIC5yZXBsYWNlKC90ZW1wbGF0ZVxcLmpzJC8sICdzdHlsZXMuY3NzJylcbiAgICAgIC5yZXBsYWNlKC90ZW1wbGF0ZVxcLmhicy8sICdzdHlsZXMuY3NzJyk7XG4gIH1cblxuICByZXR1cm4gY3NzUGF0aDtcbn1cblxuLyoqXG4gKiBOb3RlIHRoYXQgY29tcG9uZW50cyBpbiB0aGUgXCJwb2RzXCIgY29udmVudGlvbiB3aWxsXG4gKiBuZXZlciBiZSBzdXBwb3J0ZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BvZFRlbXBsYXRlKGZpbGVQYXRoKSB7XG4gIGlmIChmaWxlUGF0aC5pbmNsdWRlcygnL2NvbXBvbmVudHMvJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZmlsZVBhdGguZW5kc1dpdGgoJ3RlbXBsYXRlLmpzJykgfHwgZmlsZVBhdGguZW5kc1dpdGgoJ3RlbXBsYXRlLmhicycpO1xufVxuXG4vKipcbiAqIE5vdGUgdGhhdCBjb21wb25lbnRzIGluIHRoZSBcInBvZHNcIiBjb252ZW50aW9uIHdpbGxcbiAqIG5ldmVyIGJlIHN1cHBvcnRlZC5cbiAqXG4gKiBDaGVja3MgaWYgYSBmaWxlIGVuZHMgd2l0aFxuICogLSB0ZW1wbGF0ZS5qc1xuICogLSB0ZW1wbGF0ZS5oYnNcbiAqIC0gc3R5bGVzLmNzc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQb2QoZmlsZVBhdGgpIHtcbiAgaWYgKGZpbGVQYXRoLmluY2x1ZGVzKCcvY29tcG9uZW50cy8nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc1BvZFRlbXBsYXRlKGZpbGVQYXRoKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZpbGVQYXRoLmVuZHNXaXRoKCdzdHlsZXMuY3NzJyk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICogQHJldHVybnMgdGhlIHNhbWUgcGF0aCwgYnV0IHdpdGhvdXQgdGhlIGV4dGVuc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aG91dEV4dGVuc2lvbihmaWxlUGF0aCkge1xuICBsZXQgcGFyc2VkID0gcGF0aC5wYXJzZShmaWxlUGF0aCk7XG5cbiAgcmV0dXJuIHBhdGguam9pbihwYXJzZWQuZGlyLCBwYXJzZWQubmFtZSk7XG59XG5cbi8qKlxuICogRXhhbXBsZXMgZm9yIGZpbGVOYW1lXG4gKiAtIGFic29sdXRlIG9uLWRpc2sgcGF0aFxuICogLSBpbiB3ZWJwYWNrXG4gKiAgIC0gVVJMLWFic29sdXRlIHBhdGgsIHN0YXJ0aW5nIHdpdGggL1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZVxuICogQHBhcmFtIHt7IGFkZGl0aW9uYWxSb290cz86IHN0cmluZ1tdOyBjd2Q6IHN0cmluZyB9fSBvcHRpb25zXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZWxldmFudEZpbGUoZmlsZU5hbWUsIHsgYWRkaXRpb25hbFJvb3RzLCBjd2QgfSkge1xuICAvLyBQcml2YXRlIFZpcnR1YWwgTW9kdWxlc1xuICBpZiAoZmlsZU5hbWUuc3RhcnRzV2l0aCgnXFwwJykpIHJldHVybiBmYWxzZTtcbiAgLy8gVGhlc2UgYXJlIG5vdCB2YWxpZCB1c2VybGFuZCBuYW1lcyAob3IgYXJlIGZyb20gbGlicmFyaWVzKVxuICBpZiAoZmlsZU5hbWUubWF0Y2goL15bYS16QS1aXS8pKSByZXR1cm4gZmFsc2U7XG4gIC8vIEV4dGVybmFsIHRvIHVzXG4gIGlmIChmaWxlTmFtZS5zdGFydHNXaXRoKCcvQGVtYnJvaWRlcicpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChJUlJFTEVWQU5UX1BBVEhTLnNvbWUoKGkpID0+IGZpbGVOYW1lLmluY2x1ZGVzKGkpKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChmaWxlTmFtZS5pbmNsdWRlcygnL25vZGVfbW9kdWxlcy8nKSkge1xuICAgIC8vIGlmIGEgZmlsZSBpcyBub3QgdGhlIGVtYnJvaWRlciBjYWNoZSBkaXJlY3RvcnlcbiAgICAvLyBhbmQgaXMgaW4gbm9kZV9tb2R1bGVzLCBza2lwIGl0LlxuICAgIGlmICghZmlsZU5hbWUuaW5jbHVkZXMoRU1CUk9JREVSX0RJUikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyByZXdyaXR0ZW4gcGFja2FnZXMgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCBhdCB0aGVpciBvd25cbiAgICAvLyBwdWJsaXNoIHRpbWVcbiAgICBpZiAoZmlsZU5hbWUuaW5jbHVkZXMoRU1CUk9JREVSXzNfUkVXUklUVEVOX1BBQ0tBR0VTKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRoZXNlIGFyZSBhbHJlYWR5IHRoZSBidW5kbGVkIGZpbGVzLlxuICAgIGlmIChmaWxlTmFtZS5pbmNsdWRlcyhFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX0FTU0VUUykpIHtcbiAgICAgIC8vIG5vdCBzdXBwb3J0ZWQsIG5ldmVyIHdpbGwgYmVcbiAgICAgIGlmIChmaWxlTmFtZS5lbmRzV2l0aChgJHtFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX0FTU0VUU30vdGVzdHMuanNgKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIElkZWFsbHksIHdlIG5ldmVyIGdldCBoZXJlIC0tIGluZGljYXRlcyB3ZSdyZSBub3QgZmlsdGVyaW5nIGVmZmVjdGl2ZWx5IGluIGJhYmVsXG4gICAgICAvLyBOT1RFOiBpZiB3ZSBnZXQgaGVyZSwgd2UncmUgdHJ5aW5nIHRvIG9wZXJhdGUgb24gYSBmaWxlIHRvbyBsYXRlLlxuICAgICAgLy8gICAgICAgd2UgbmVlZCBTY29wZWRDU1MgdG8gb3BlcmF0ZSBhcyBjbG9zZSB0byBvcmlnaW5hbCBzb3VyY2UgYXMgcG9zc2libGUgLS0gbm90IG91dHB1dCBmaWxlcy5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBsZXQgd29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoZmlsZU5hbWUpO1xuXG4gIGFzc2VydChjd2QsIGBjd2Qgd2FzIG5vdCBwYXNzZWQgdG8gaXNSZWxldmFudEZpbGVgKTtcblxuICBsZXQgb3VyV29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoY3dkKTtcblxuICBpZiAod29ya3NwYWNlICE9PSBvdXJXb3Jrc3BhY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgbG9jYWwgPSBmaWxlTmFtZS5yZXBsYWNlKHdvcmtzcGFjZSwgJycpO1xuICBsZXQgWywgLi4ucGFydHNdID0gbG9jYWwuc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgaWYgKFVOU1VQUE9SVEVEX0RJUkVDVE9SSUVTLmhhcyhwYXJ0c1swXSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogTW9zdGx5IHBvZHMgc3VwcG9ydC5cbiAgICogZm9sa3MgbmVlZCB0byBvcHQgaW4gdG8gcG9kcyAocm91dGVzKSwgYmVjYXVzZSBldmVyeSBwb2RzIGFwcCBjYW4gYmUgY29uZmlndXJlZCBkaWZmZXJlbnRseVxuICAgKi9cbiAgbGV0IHJvb3RzID0gWycvY29tcG9uZW50cy8nLCAnL3RlbXBsYXRlcy8nLCAuLi4oYWRkaXRpb25hbFJvb3RzIHx8IFtdKV07XG5cbiAgaWYgKCFyb290cy5zb21lKChyb290KSA9PiBmaWxlTmFtZS5pbmNsdWRlcyhyb290KSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VTY29wZWRQYXRoKSB7XG4gIC8qKlxuICAgKiAqQnkgY29udmVudGlvbiosIGBzcmNgIGlzIG9taXR0ZWQgZnJvbSBjb21wb25lbnQgcGF0aHMuXG4gICAqIFdlIGNhbiByZWZsZWN0IHRoZSBzYW1lIGJlaGF2aW9yIGJ5IHJlcGxhY2luZyBzcmMvXG4gICAqIHdpdGggYW4gZW1wdHkgc3RyaW5nLlxuICAgKlxuICAgKiBDU1MgaXNuJ3QgZW1pdHRlZCBhcyBhIGNvLWxvY2F0ZWQgbW9kdWxlLCBidXRcbiAgICogdG8ga2VlcCBjb252ZW50aW9ucyBjb25zaXN0ZW50IGFjcm9zcyBsYW5ndWFnZXMsXG4gICAqIHdlIGNhbiBwcmV0ZW5kIGl0IGlzLlxuICAgKlxuICAgKiBBbnkgY3VzdG9taXphdGlvbiBiZXlvbmQgcmVtb3ZpbmcgYHNyY2AgYW5kIGBhcHBgIGlzIHBvdGVudGlhbGx5IGNvbmZ1c2luZy5cbiAgICogSWYgd2UgbmVlZCBmdXJ0aGVyIGN1c3RvbWl6YXRpb25zLCB3ZSdsbCB3YW50IHRvIG1hdGNoIG9uIGBleHBvcnRzYCBpbiB0aGVcbiAgICogY29ycmVzcG9uZGluZyBwYWNrYWdlLmpzb25cbiAgICovXG4gIGxldCBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlU2NvcGVkUGF0aC5yZXBsYWNlKC9eXFwvc3JjXFwvLywgJy8nKTtcblxuICBsZXQgcGFyc2VkID0gcGF0aC5wYXJzZShwYWNrYWdlUmVsYXRpdmUpO1xuXG4gIGlmIChpc1BvZChwYWNrYWdlUmVsYXRpdmUpKSB7XG4gICAgLyoqXG4gICAgICogRm9yIHBvZHMsIHdlIGNob3Agb2ZmIHRoZSB3aG9sZSBmaWxlLCBhbmQgdXNlIHRoZSBkaXIgbmFtZSBhcyB0aGUgXCJtb2R1bGVQYXRoXCJcbiAgICAgKi9cbiAgICByZXR1cm4gcGFyc2VkLmRpcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBhbiBleHRlbnNpb24gaXMgcGFzc2VkLCByZW1vdmUgaXQuXG4gICAqIFdoZW4gdXNpbmcgcGFja2FnZXJzLCBmb2xrcyBhcmUgdXNlZCB0byBub3QgaGF2aW5nIHRvIHNwZWNpZnkgZXh0ZW5zaW9ucyBmb3IgZmlsZXMuXG4gICAqIFNpbmNlIHdlIGRvbid0IGV2ZW4gZW1pdCBjc3MgZmlsZXMgY28tbG9jYXRlZCB0byBlYWNoIG1vZHVsZSxcbiAgICogdGhpcyBoZWxwcyB1cyBub3QgY29udmV5IGEgbGllIHRoYXQgYSBmaWxlIG1heSBleGlzdCBpbiBhdCBydW50aW1lLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSBgPG1vZHVsZS1uYW1lPi9jb21wb25lbnRzL2J1dHRvbmAuXG4gICAqIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIGV4dGVuc2lvbiBpcywgYmVjYXVzZSB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgY3NzIGZpbGVcbiAgICogZm9yIHRoZSBidXR0b24gbW9kdWxlIGFueXdheS5cbiAgICovXG4gIGxldCBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoID0gcGF0aC5qb2luKHBhcnNlZC5kaXIsIHBhcnNlZC5uYW1lKTtcblxuICByZXR1cm4gbG9jYWxQYWNrYWdlclN0eWxlUGF0aDtcbn1cblxuLyoqXG4gKiByZXR1cm5zIHRoZSBhcHAtbW9kdWxlIHBhdGggb2YgdGhlIHNvdXJjZSBmaWxlXG4gKlxuICogVGhpcyBhc3N1bWVzIG5vcm1hbCBlbWJlciBhcHAgY29udmVudGlvbnNcbiAqXG4gKiB3aGljaCBpcyBgPHBhY2thZ2UuanNvbiNuYW1lPi9wYXRoLXRvLWZpbGVgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBQYXRoKHNvdXJjZVBhdGgpIHtcbiAgbGV0IHdvcmtzcGFjZVBhdGggPSBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKTtcbiAgbGV0IG5hbWUgPSBtb2R1bGVOYW1lKHNvdXJjZVBhdGgpO1xuXG4gIC8qKlxuICAgKiAgVW5kZXIgZW1icm9pZGVyIGJ1aWxkcywgdGhlIHNwZWMtY29tcGxpYW50IHZlcnNpb24gb2YgdGhlIGFwcFxuICAgKiBoYXMgYWxsIHRoZSBmaWxlcyB1bmRlciBhIGZvbGRlciB3aGljaCByZXByZXNlbnRzIHRoZSBwYWNrYWdlIG5hbWUsXG4gICAqIHJhdGhlciB0aGFuIFwiYXBwXCIuXG4gICAqL1xuICBsZXQgcGFja2FnZVJlbGF0aXZlID0gc291cmNlUGF0aC5yZXBsYWNlKHdvcmtzcGFjZVBhdGgsICcnKTtcblxuICAvKipcbiAgICogQnV0IHdlIGFsc28gZG9uJ3Qgd2FudCAnYXBwJyAtLSB3aGljaCBpcyBwcmVzZW50IGluIHRoZSB2MSBhZGRvbiBwaXBlbGluZVxuICAgKi9cbiAgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVJlbGF0aXZlLnJlcGxhY2UoYC9hcHAvYCwgYC9gKTtcblxuICAvKipcbiAgICogYWxzbyBhbHNvLCB3ZSBrbm93IHRoYXQgdGhlIHJlLXdyaXR0ZW4gYXBwIHN0cnVjdHVyZSBpbiBlbWJyb2lkZXJAdjNcbiAgICogaXMgZXh0cmFuZW91cywgYW5kIHdlIGNhbiBjb2xsYXBzZSBpdFxuICAgKi9cbiAgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVJlbGF0aXZlLnJlcGxhY2UoXG4gICAgYCR7RU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9QQVRIfS9gLFxuICAgICcvJyxcbiAgKTtcblxuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgcmV0dXJuIGAke25hbWV9JHtsb2NhbFBhY2thZ2VyU3R5bGVQYXRofWA7XG59XG5cbi8qKlxuICogVG8gYXZvaWQgaGl0dGluZyB0aGUgZmlsZXN5c2V0bSwgd2UnbGwgc3RvcmUgYWxsIGZvdW5kXG4gKiBwcm9qZWN0IHBhdGhzIGJlcmUsIHNvIHdlIGNhbiwgaW4gbWVtb3J5LFxuICogZ2V0IHRoZSBmb2xkZXIgd2hlcmUgYSBwYWNrYWdlLmpzb24gZXhpc3RzLCByYXRoZXIgdGhhblxuICogaGl0IHRoZSBmaWxlIHN5c3RlbSBldmVyeSB0aW1lLlxuICovXG5jb25zdCBTRUVOID0gbmV3IFNldCgpO1xuXG5mdW5jdGlvbiBnZXRTZWVuKHNvdXJjZVBhdGgpIHtcbiAgaWYgKFNFRU4uaGFzKHNvdXJjZVBhdGgpKSByZXR1cm4gc291cmNlUGF0aDtcblxuICBsZXQgcGFydHMgPSBzb3VyY2VQYXRoLnNwbGl0KCcvJyk7XG5cbiAgZm9yIChsZXQgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPiAxOyBpLS0pIHtcbiAgICBsZXQgdG9DaGVjayA9IHBhcnRzLnNsaWNlKDAsIGkpLmpvaW4oJy8nKTtcblxuICAgIGxldCBzZWVuID0gU0VFTi5oYXModG9DaGVjayk7XG5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgcmV0dXJuIHRvQ2hlY2s7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoLCBvcHRpb25zKSB7XG4gIGxldCBjd2QgPSBvcHRpb25zPy5jd2QgPz8gQ1dEO1xuXG4gIGlmIChzb3VyY2VQYXRoLmluY2x1ZGVzKEVNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfUEFUSCkpIHtcbiAgICBzb3VyY2VQYXRoID0gc291cmNlUGF0aC5zcGxpdChFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEgpWzBdO1xuICB9XG5cbiAgaWYgKHNvdXJjZVBhdGguZW5kc1dpdGgoJy8nKSkge1xuICAgIHNvdXJjZVBhdGggPSBzb3VyY2VQYXRoLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gIH1cblxuICBsZXQgc2VlbiA9IGdldFNlZW4oc291cmNlUGF0aCk7XG5cbiAgaWYgKHNlZW4pIHtcbiAgICByZXR1cm4gc2VlbjtcbiAgfVxuXG4gIGxldCBjYW5kaWRhdGVQYXRoID0gcGF0aC5qb2luKHNvdXJjZVBhdGgsICdwYWNrYWdlLmpzb24nKTtcblxuICBjb25zdCBpc1dvcmtzcGFjZSA9IGZzU3luYy5leGlzdHNTeW5jKGNhbmRpZGF0ZVBhdGgpO1xuXG4gIGlmIChpc1dvcmtzcGFjZSkge1xuICAgIHJldHVybiBzb3VyY2VQYXRoO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gZmluZFBhY2thZ2VKc29uVXAoc291cmNlUGF0aCwgeyBjd2QgfSk7XG5cbiAgaWYgKCFwYWNrYWdlSnNvblBhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBkZXRlcm1pbmUgcHJvamVjdCBmb3IgJHtzb3VyY2VQYXRofWApO1xuICB9XG5cbiAgY29uc3Qgd29ya3NwYWNlUGF0aCA9IHBhdGguZGlybmFtZShwYWNrYWdlSnNvblBhdGgpO1xuXG4gIFNFRU4uYWRkKHdvcmtzcGFjZVBhdGgpO1xuXG4gIHJldHVybiB3b3Jrc3BhY2VQYXRoO1xufVxuXG5mdW5jdGlvbiBmaW5kUGFja2FnZUpzb25VcChzdGFydFBhdGgsIG9wdGlvbnMpIHtcbiAgbGV0IGN3ZCA9IG9wdGlvbnM/LmN3ZCA/PyBDV0Q7XG4gIGxldCBwYXJ0cyA9IHN0YXJ0UGF0aC5zcGxpdCgnLycpO1xuXG4gIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID4gMTsgaS0tKSB7XG4gICAgbGV0IHRvQ2hlY2sgPSBwYXJ0cy5zbGljZSgwLCBpKS5qb2luKCcvJyk7XG5cbiAgICBsZXQgcGFja2FnZUpzb24gPSBwYXRoLmpvaW4odG9DaGVjaywgJ3BhY2thZ2UuanNvbicpO1xuICAgIGxldCBleGlzdHMgPSBmc1N5bmMuZXhpc3RzU3luYyhwYWNrYWdlSnNvbik7XG5cbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICByZXR1cm4gcGFja2FnZUpzb247XG4gICAgfVxuXG4gICAgLy8gRG9uJ3QgdHJhdmVyc2UgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3Qgb2YgdGhlIGZpbGUgc3lzdGVtLlxuICAgIGlmICh0b0NoZWNrID09PSBjd2QpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBNQU5JRkVTVF9DQUNIRSA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiB0aGUgcGFja2FnZS5qc29uI25hbWUsIG9yIGNvbmZpZy9lbnZpcm9ubWVudCNtb3VkbGVQcmVmaXggKGlmIHYxIGFwcClcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlUGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kdWxlTmFtZShzb3VyY2VQYXRoKSB7XG4gIGNvbnN0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuICBjb25zdCBtYW5pZmVzdCA9IGdldE1hbmlmZXN0KHdvcmtzcGFjZSk7XG5cbiAgaWYgKG1hbmlmZXN0WydlbWJlci1hZGRvbiddKSB7XG4gICAgLyoqXG4gICAgICogTGlicmFyaWVzIGFyZSBub3QgYWxsb3dlZCB0byBjdXN0b21pemUgdGhlaXIgbW9kdWxlIG5hbWVcbiAgICAgKiB0byBiZSBkaWZmZXJlbnQgZnJvbSB0aGVpciBwYWNrYWdlIG5hbWUuXG4gICAgICpcbiAgICAgKiAoSXQncyBhbHNvIGJvbmtlcnMgdGhhdCB0aGlzIGlzIGFsbG93ZWQgZm9yIHYxIGFwcHMpXG4gICAgICovXG4gICAgcmV0dXJuIG1hbmlmZXN0Lm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogRm9yIHYxIGFwcHMsIHdlIG5lZWQgdG8gcmVmZXJlbmNlIHRoZSBjb25maWcvZW52aXJvbm1lbnQuanMgZmlsZVxuICAgKiB0byBzZWUgaWYgdGhlIG1vZHVsZVByZWZpeCBzZXR0aW5nIGRpZmZlcnMgZnJvbSBtYW5pZmVzdC5uYW1lO1xuICAgKi9cbiAgbGV0IGVudmlyb25tZW50SlMgPSBwYXRoLmpvaW4od29ya3NwYWNlLCAnY29uZmlnL2Vudmlyb25tZW50LmpzJyk7XG5cbiAgLyoqXG4gICAqIE5PVEU6IHRoZSBlbnZpcm9ubWVudC5qcyBpcyBhIGNvbW1vbkpTIGZpbGUsIHNvIHdlIGNhbiBzeW5jaHJvbm91c2x5IHJlcXVpcmUgaXRcbiAgICpcbiAgICogVE9ETzogaWYgd2UgaGF2ZSBpc3N1ZXMgd2l0aCBsb2FkaW5nIHRoaXMgZmlsZSBsYXRlciB3ZSBzaG91bGQgcHJvYmFibHkganVzdCBydW4ganNjb2Rlc2hpZnQgb24gaXRcbiAgICogICAgICAgYnV0IHRoYXQgY291bGQgYWxsb3cgdXMgdG8gYmUgYnJpdHRsZSBpbiBkaWZmZXJlbnQgd2F5cywgbGlrZSBpZiBmb2xrcyBzdHJheSBmcm9tIHRoZSB3YXkgdGhlXG4gICAqICAgICAgIGZpbGUgaXMgbGFpZCBvdXQgZnJvbSB0aGUgYmx1ZXByaW50IGRlZmF1bHRzLlxuICAgKi9cbiAgaWYgKGZzU3luYy5leGlzdHNTeW5jKGVudmlyb25tZW50SlMpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmIC0tIHRoaXMgZXhpc3RzXG4gICAgY29uc3QgZW52Rm4gPSBvdXJSZXF1aXJlKGVudmlyb25tZW50SlMpO1xuICAgIGNvbnN0IGVudiA9IGVudkZuKCdlbWJlci1zY29wZWQtY3NzJyk7XG5cbiAgICByZXR1cm4gZW52Lm1vZHVsZVByZWZpeCB8fCBtYW5pZmVzdC5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhbGxiYWNrIHRvIHRoZSB0cnVlXHUyMTIyIG1vZHVsZVx1MjEyMiBuYW1lLlxuICAgKi9cbiAgcmV0dXJuIG1hbmlmZXN0Lm5hbWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHdvcmtzcGFjZVxuICovXG5mdW5jdGlvbiBnZXRNYW5pZmVzdCh3b3Jrc3BhY2UpIHtcbiAgbGV0IGV4aXN0aW5nID0gTUFOSUZFU1RfQ0FDSEUuZ2V0KHdvcmtzcGFjZSk7XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nO1xuICB9XG5cbiAgbGV0IGJ1ZmZlciA9IGZzU3luYy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHdvcmtzcGFjZSwgJ3BhY2thZ2UuanNvbicpKTtcbiAgbGV0IGNvbnRlbnQgPSBidWZmZXIudG9TdHJpbmcoKTtcbiAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuXG4gIE1BTklGRVNUX0NBQ0hFLnNldCh3b3Jrc3BhY2UsIGpzb24pO1xuXG4gIHJldHVybiBqc29uO1xufVxuIiwgImltcG9ydCBtZDUgZnJvbSAnYmx1ZWltcC1tZDUnO1xuXG4vKipcbiAqIFRoZSBpbnRlbnQgb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBnZW5lcmF0ZSB0aGUgc3VmZml4L3Bvc3RmaXggZm9yIHRoZVxuICogY3NzIGNsYXNzZXMsIGJhc2VkIG9uIHRoZSBtb2R1bGUtc2NvcGVkIHBhdGggbmFtZS5cbiAqXG4gKiBmb3IgZXhhbXBsZSxcbiAqICAgIGhhc2goJ215LWFwcC9jb21wb25lbnRzL2ZvbycpXG4gKiAgaW5zdGVhZCBvZlxuICogICAgaGFzaCgnYXBwL2NvbXBvbmVudHMvZm9vJylcbiAqXG4gKiAgKHVubGVzcyB5b3VyIGFwcCBuYW1lIGlzICdhcHAnKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVQYXRoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaChtb2R1bGVQYXRoKSB7XG4gIHJldHVybiAnZScgKyBtZDUobW9kdWxlUGF0aCkuc3Vic3RyaW5nKDAsIDgpO1xufVxuXG5cbmV4cG9ydCBjb25zdCBoYXNoRnJvbU1vZHVsZVBhdGggPSBoYXNoO1xuIiwgImltcG9ydCB7IGhhc2ggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5pbXBvcnQgeyBhcHBQYXRoIH0gZnJvbSAnLi91dGlscy5qcyc7XG5cbmV4cG9ydCB7IGhhc2ggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoRnJvbUFic29sdXRlUGF0aChhYnNvbHV0ZVBhdGgpIHtcbiAgLyoqXG4gICAqIFRoZSB3aG9sZSBvZiBgYXBwUGF0aGAgdWx0aW1hdGVseSB0cmFuc2Zvcm1zIHRoZSBgYWJzb2x1dGVQYXRoYFxuICAgKiBpbnRvIHRoZSBleGFjdCBzdHJpbmcgdGhhdCBmb2xrcyB3aWxsIHBhc3MgdG8gYHJlbGF0aXZlUGF0aGBcbiAgICogYXQgcnVudGltZS5cbiAgICovXG4gIGNvbnN0IG1vZHVsZVBhdGggPSBhcHBQYXRoKGFic29sdXRlUGF0aCk7XG4gIGNvbnN0IHBvc3RmaXggPSBoYXNoKG1vZHVsZVBhdGgpO1xuXG4gIHJldHVybiBwb3N0Zml4O1xufVxuIiwgImltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBhcnNlciBmcm9tICdwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlcic7XG5cbmltcG9ydCBpc0luc2lkZUdsb2JhbCBmcm9tICcuL2lzSW5zaWRlR2xvYmFsLmpzJztcblxuZnVuY3Rpb24gcmV3cml0ZVNlbGVjdG9yKHNlbCwgcG9zdGZpeCkge1xuICBjb25zdCB0cmFuc2Zvcm0gPSAoc2VsZWN0b3JzKSA9PiB7XG4gICAgc2VsZWN0b3JzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ2NsYXNzJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHNlbGVjdG9yLnZhbHVlICs9ICdfJyArIHBvc3RmaXg7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICd0YWcnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoXG4gICAgICAgICAgcGFyc2VyLnRhZyh7IHZhbHVlOiBzZWxlY3Rvci52YWx1ZSB9KSxcbiAgICAgICAgICBwYXJzZXIuY2xhc3NOYW1lKHsgdmFsdWU6IHBvc3RmaXggfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyByZW1vdmUgOmdsb2JhbFxuICAgIHNlbGVjdG9ycy53YWxrKChzZWxlY3RvcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICdwc2V1ZG8nICYmIHNlbGVjdG9yLnZhbHVlID09PSAnOmdsb2JhbCcpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoLi4uc2VsZWN0b3Iubm9kZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHBhcnNlcih0cmFuc2Zvcm0pLnByb2Nlc3NTeW5jKHNlbCk7XG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkO1xufVxuXG5mdW5jdGlvbiBpc0luc2lkZUtleWZyYW1lcyhub2RlKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ2F0cnVsZScgJiYgcGFyZW50Lm5hbWUgPT09ICdrZXlmcmFtZXMnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVLZXlmcmFtZXMocGFyZW50KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmV3cml0ZUNzcyhjc3MsIHBvc3RmaXgsIGZpbGVOYW1lLCBsYXllck5hbWUpIHtcbiAgY29uc3QgbGF5ZXJOYW1lV2l0aERlZmF1bHQgPSBsYXllck5hbWUgPz8gJ2NvbXBvbmVudHMnO1xuICBjb25zdCBhc3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cbiAgYXN0LndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlID09PSAncnVsZScgJiYgIWlzSW5zaWRlS2V5ZnJhbWVzKG5vZGUpKSB7XG4gICAgICBub2RlLnNlbGVjdG9yID0gcmV3cml0ZVNlbGVjdG9yKG5vZGUuc2VsZWN0b3IsIHBvc3RmaXgpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgcmV3cml0dGVuQ3NzID0gYXN0LnRvU3RyaW5nKCk7XG5cbiAgaWYgKCFsYXllck5hbWVXaXRoRGVmYXVsdCkge1xuICAgIHJldHVybiBgLyogJHtmaWxlTmFtZX0gKi9cXG4ke3Jld3JpdHRlbkNzc31cXG5gO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBgLyogJHtmaWxlTmFtZX0gKi9cXG5AbGF5ZXIgJHtsYXllck5hbWVXaXRoRGVmYXVsdH0ge1xcblxcbmAgK1xuICAgIHJld3JpdHRlbkNzcyArXG4gICAgJ1xcbn1cXG4nXG4gICk7XG59XG5cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0luc2lkZUdsb2JhbChub2RlLCBmdW5jKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ3BzZXVkbycgJiYgcGFyZW50LnZhbHVlID09PSAnOmdsb2JhbCcpIHJldHVybiB0cnVlO1xuXG4gIHJldHVybiBpc0luc2lkZUdsb2JhbChwYXJlbnQsIGZ1bmMpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBLElBQUFBLGtCQUEyQjtBQUMzQixJQUFBQyxvQkFBaUI7OztBQ0ZqQix5QkFBbUI7QUFDbkIscUJBQW1CO0FBQ25CLHlCQUE4QjtBQUM5Qix1QkFBaUI7OztBQ0hqQix5QkFBZ0I7QUFnQlQsU0FBUyxLQUFLLFlBQVk7QUFDL0IsU0FBTyxVQUFNLG1CQUFBQyxTQUFJLFVBQVUsRUFBRSxVQUFVLEdBQUcsQ0FBQztBQUM3QztBQUdPLElBQU0scUJBQXFCOzs7QUNoQjNCLFNBQVMscUJBQXFCLGNBQWM7QUFNakQsUUFBTSxhQUFhLFFBQVEsWUFBWTtBQUN2QyxRQUFNLFVBQVUsS0FBSyxVQUFVO0FBRS9CLFNBQU87QUFDVDs7O0FGZkE7QUFZQSxJQUFJLE9BQU8sWUFBWTtBQUN2QixJQUFJLGFBQWEsV0FBVyxVQUN4QixXQUFXLFVBQ1gsWUFBUSxrQ0FBYyxJQUFJO0FBRTlCLElBQUksQ0FBQyxZQUFZO0FBRWYsZUFBYTtBQUNmO0FBRUEsSUFBTSxnQkFBZ0I7QUFDdEIsSUFBTSxpQ0FBaUMsR0FBRyxhQUFhO0FBQ3ZELElBQU0sbUNBQW1DLEdBQUcsOEJBQThCO0FBQzFFLElBQU0saUNBQWlDLEdBQUcsYUFBYTtBQUN2RCxJQUFNLG1CQUFtQixDQUFDLG9CQUFvQjtBQUM5QyxJQUFNLDBCQUEwQixvQkFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO0FBRWpELElBQU0sTUFBTSxRQUFRLElBQUk7QUFTakIsU0FBUyxTQUFTLFVBQVU7QUFDakMsTUFBSSxTQUFTLFdBQVcsR0FBRyxH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
|
|
@@ -40,12 +40,19 @@ var import_path = __toESM(require("path"), 1);
|
|
|
40
40
|
// src/lib/path/utils.js
|
|
41
41
|
var import_node_assert = __toESM(require("node:assert"), 1);
|
|
42
42
|
var import_node_fs = __toESM(require("node:fs"), 1);
|
|
43
|
+
var import_node_module = require("node:module");
|
|
43
44
|
var import_node_path = __toESM(require("node:path"), 1);
|
|
44
45
|
|
|
45
46
|
// src/lib/path/hash-from-module-path.js
|
|
46
47
|
var import_blueimp_md5 = __toESM(require("blueimp-md5"), 1);
|
|
47
48
|
|
|
48
49
|
// src/lib/path/utils.js
|
|
50
|
+
var import_meta = {};
|
|
51
|
+
var here = import_meta.url;
|
|
52
|
+
var ourRequire = globalThis.require ? globalThis.require : here && (0, import_node_module.createRequire)(here);
|
|
53
|
+
if (!ourRequire) {
|
|
54
|
+
ourRequire = require;
|
|
55
|
+
}
|
|
49
56
|
var EMBROIDER_DIR = "node_modules/.embroider";
|
|
50
57
|
var EMBROIDER_3_REWRITTEN_APP_PATH = `${EMBROIDER_DIR}/rewritten-app`;
|
|
51
58
|
var EMBROIDER_3_REWRITTEN_APP_ASSETS = `${EMBROIDER_3_REWRITTEN_APP_PATH}/assets`;
|
|
@@ -81,6 +88,8 @@ function withoutExtension(filePath) {
|
|
|
81
88
|
return import_node_path.default.join(parsed.dir, parsed.name);
|
|
82
89
|
}
|
|
83
90
|
function isRelevantFile(fileName, { additionalRoots, cwd }) {
|
|
91
|
+
if (fileName.startsWith("\0")) return false;
|
|
92
|
+
if (fileName.match(/^[a-zA-Z]/)) return false;
|
|
84
93
|
if (fileName.startsWith("/@embroider")) return false;
|
|
85
94
|
if (IRRELEVANT_PATHS.some((i) => fileName.includes(i))) return false;
|
|
86
95
|
if (fileName.includes("/node_modules/")) {
|
|
@@ -239,4 +248,4 @@ var babel_plugin_default = (env, options, workingDirectory) => {
|
|
|
239
248
|
}
|
|
240
249
|
};
|
|
241
250
|
};
|
|
242
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2J1aWxkL2JhYmVsLXBsdWdpbi5qcyIsICIuLi8uLi9zcmMvbGliL3BhdGgvdXRpbHMuanMiLCAiLi4vLi4vc3JjL2xpYi9wYXRoL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgSW1wb3J0VXRpbCB9IGZyb20gJ2JhYmVsLWltcG9ydC11dGlsJztcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgbm9kZVBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IGNzc1BhdGhGb3IsIGlzUmVsZXZhbnRGaWxlIH0gZnJvbSAnLi4vbGliL3BhdGgvdXRpbHMuanMnO1xuXG5mdW5jdGlvbiBfaXNSZWxldmFudEZpbGUoc3RhdGUsIGN3ZCkge1xuICBsZXQgZmlsZU5hbWUgPSBzdGF0ZS5maWxlLm9wdHMuZmlsZW5hbWU7XG4gIGxldCBhZGRpdGlvbmFsUm9vdHMgPSBzdGF0ZS5vcHRzPy5hZGRpdGlvbmFsUm9vdHM7XG5cbiAgcmV0dXJuIGlzUmVsZXZhbnRGaWxlKGZpbGVOYW1lLCB7XG4gICAgYWRkaXRpb25hbFJvb3RzLFxuICAgIGN3ZCxcbiAgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IGVudiAtIGJhYmVsIHBsdWdpbiBlbnYsIGVudi50eXBlcyBpcyBtb3N0IGNvbW1vbmx5IHVzZWQgKGVzcCBpbiBUUylcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gdGhlIG9wdGlvbnMgZm9yIHNjb3BlZC1jc3MgLS0gdGhpcyBpcyBhbHNvIGF2YWlsYWJsZSBpbiBlYWNoIHZpc2l0b3IncyBzdGF0ZS5vcHRzXG4gKiBAcGFyYW0ge3N0cmluZ30gd29ya2luZ0RpcmVjdG9yeVxuICovXG5leHBvcnQgZGVmYXVsdCAoZW52LCBvcHRpb25zLCB3b3JraW5nRGlyZWN0b3J5KSA9PiB7XG4gIC8qKlxuICAgKiBUaGlzIGJhYmVsIHBsdWdpbiBkb2VzIHRocmVlIHRoaW5nczpcbiAgICogLSByZW1vdmVzIHRoZSBpbXBvcnQgb2Ygc2NvcGVkQ2xhc3MsIGlmIGl0IGV4aXN0c1xuICAgKiAgIC0gaWYgc2NvcGVkQ2xhc3Mgd2FzIGltcG9ydGVkLCBpdCBpcyByZW1vdmVkIGZyb20gYW55IGNvbXBvbmVudCdzIFwic2NvcGUgYmFnXCJcbiAgICogICAgICh0aGUgc2NvcGUgYmFnIGJlaW5nIGEgbG93LWxldmVsIG9iamVjdCB1c2VkIGZvciBwYXNzaW5nIHdoYXQgaXMgXCJpbiBzY29wZVwiIGZvciBhIGNvbXBvbmVudClcbiAgICogLSBhZGRzIGFuIGltcG9ydCB0byB0aGUgQ1NTIGZpbGUsIGlmIGl0IGV4aXN0c1xuICAgKi9cbiAgcmV0dXJuIHtcbiAgICB2aXNpdG9yOiB7XG4gICAgICBQcm9ncmFtOiB7XG4gICAgICAgIGVudGVyKHBhdGgsIHN0YXRlKSB7XG4gICAgICAgICAgaWYgKCFfaXNSZWxldmFudEZpbGUoc3RhdGUsIHdvcmtpbmdEaXJlY3RvcnkpKSB7XG4gICAgICAgICAgICBzdGF0ZS5jYW5Ta2lwID0gdHJ1ZTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0YXRlLmltcG9ydFV0aWwgPSBuZXcgSW1wb3J0VXRpbChlbnYsIHBhdGgpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uKHBhdGgsIHN0YXRlKSB7XG4gICAgICAgIGlmIChzdGF0ZS5jYW5Ta2lwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdGgubm9kZS5zb3VyY2UudmFsdWUgPT09ICdlbWJlci1zY29wZWQtY3NzJykge1xuICAgICAgICAgIGxldCBzcGVjaWZpZXIgPSBwYXRoLm5vZGUuc3BlY2lmaWVycy5maW5kKFxuICAgICAgICAgICAgKHgpID0+IHguaW1wb3J0ZWQubmFtZSA9PT0gJ3Njb3BlZENsYXNzJyxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHNwZWNpZmllcikge1xuICAgICAgICAgICAgc3RhdGUuZmlsZS5vcHRzLmltcG9ydGVkU2NvcGVkQ2xhc3MgPSBzcGVjaWZpZXIubG9jYWwubmFtZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc3BlY2lmaWVyLmxvY2FsLm5hbWUgIT09ICdzY29wZWRDbGFzcycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFRoZSBzY29wZWRDbGFzcyBpbXBvcnQgaXMgYSBwc3VlZG8taGVscGVyLCBhbmQgbWF5IG5vdCBiZSByZW5hbWVkIGFzIGl0IGlzIHJlbW92ZWQgYXQgYnVpbGQgdGltZS5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXRoLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBPbmx5IGluIHN0cmljdCBtb2RlLCBkbyB3ZSBjYXJlIGFib3V0IHJlbW9uaW5nIHRoZSBzY29wZSBiYWcgcmVmZXJlbmNlXG4gICAgICAgKi9cbiAgICAgIE9iamVjdFByb3BlcnR5KHBhdGgsIHN0YXRlKSB7XG4gICAgICAgIGlmICghc3RhdGUuZmlsZS5vcHRzPy5pbXBvcnRlZFNjb3BlZENsYXNzKSByZXR1cm47XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBhdGgubm9kZS52YWx1ZS50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICBwYXRoLm5vZGUudmFsdWUubmFtZSA9PT0gc3RhdGUuZmlsZS5vcHRzPy5pbXBvcnRlZFNjb3BlZENsYXNzXG4gICAgICAgICkge1xuICAgICAgICAgIHBhdGgucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIElmIHRoZXJlIGlzIGEgQ1NTIGZpbGUsIEFORCBhIGNvcnJlc3BvbmRpbmcgdGVtcGxhdGUsXG4gICAgICAgKiB3ZSBjYW4gaW1wb3J0IHRoZSBDU1MgdG8gdGhlbiBkZWZlciB0byB0aGUgQ1NTIGxvYWRlclxuICAgICAgICogb3Igb3RoZXIgQ1NTIHByb2Nlc3NpbmcgdG8gaGFuZGxlIHRoZSBwb3N0Zml4aW5nXG4gICAgICAgKi9cbiAgICAgIENhbGxFeHByZXNzaW9uKHBhdGgsIHN0YXRlKSB7XG4gICAgICAgIGlmIChzdGF0ZS5jYW5Ta2lwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9kZSA9IHBhdGgubm9kZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbm9kZS5jYWxsZWUubmFtZSA9PT0gJ3ByZWNvbXBpbGVUZW1wbGF0ZScgfHxcbiAgICAgICAgICBub2RlLmNhbGxlZS5uYW1lID09PSAnaGJzJyB8fFxuICAgICAgICAgIG5vZGUuY2FsbGVlLm5hbWUgPT09ICdjcmVhdGVUZW1wbGF0ZUZhY3RvcnknXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID1cbiAgICAgICAgICAgIHN0YXRlLmZpbGUub3B0cy5zb3VyY2VGaWxlTmFtZSB8fCBzdGF0ZS5maWxlLm9wdHMuZmlsZW5hbWU7XG5cbiAgICAgICAgICBsZXQgY3NzUGF0aCA9IGNzc1BhdGhGb3IoZmlsZU5hbWUpO1xuXG4gICAgICAgICAgaWYgKGV4aXN0c1N5bmMoY3NzUGF0aCkpIHtcbiAgICAgICAgICAgIGxldCBiYXNlQ1NTID0gbm9kZVBhdGguYmFzZW5hbWUoY3NzUGF0aCk7XG5cbiAgICAgICAgICAgIHN0YXRlLmltcG9ydFV0aWwuaW1wb3J0Rm9yU2lkZUVmZmVjdChgLi8ke2Jhc2VDU1N9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59O1xuIiwgImltcG9ydCBhc3NlcnQgZnJvbSAnbm9kZTphc3NlcnQnO1xuaW1wb3J0IGZzU3luYyBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB7IGhhc2hGcm9tQWJzb2x1dGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tYWJzb2x1dGUtcGF0aC5qcyc7XG5pbXBvcnQgeyBoYXNoRnJvbU1vZHVsZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5cbmV4cG9ydCB7IGhhc2hGcm9tQWJzb2x1dGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tYWJzb2x1dGUtcGF0aC5qcyc7XG5leHBvcnQgeyBoYXNoRnJvbU1vZHVsZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5cbmNvbnN0IEVNQlJPSURFUl9ESVIgPSAnbm9kZV9tb2R1bGVzLy5lbWJyb2lkZXInO1xuY29uc3QgRU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9QQVRIID0gYCR7RU1CUk9JREVSX0RJUn0vcmV3cml0dGVuLWFwcGA7XG5jb25zdCBFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX0FTU0VUUyA9IGAke0VNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfUEFUSH0vYXNzZXRzYDtcbmNvbnN0IEVNQlJPSURFUl8zX1JFV1JJVFRFTl9QQUNLQUdFUyA9IGAke0VNQlJPSURFUl9ESVJ9L3Jld3JpdHRlbi1wYWNrYWdlc2A7XG5jb25zdCBJUlJFTEVWQU5UX1BBVEhTID0gWydub2RlX21vZHVsZXMvLnBucG0nXTtcbmNvbnN0IFVOU1VQUE9SVEVEX0RJUkVDVE9SSUVTID0gbmV3IFNldChbJ3Rlc3RzJ10pO1xuXG5jb25zdCBDV0QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4vKipcbiAqIFJlZ2FyZGxlc3Mgb2Ygd2hhdCB0aGUgZmlsZVBhdGggZm9ybWF0IGlzLFxuICogdGhpcyB3aWxsIHRyeSB0byByZXR1cm4gdGhlIGNvcnJlY3QgcG9zdGZpeC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoRnJvbShmaWxlUGF0aCkge1xuICBpZiAoZmlsZVBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgcmV0dXJuIGhhc2hGcm9tQWJzb2x1dGVQYXRoKGZpbGVQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBoYXNoRnJvbU1vZHVsZVBhdGgoZmlsZVBhdGgpO1xufVxuXG4vKipcbiAqIEJhc2VkIG9uIGVtYmVyJ3MgY29tcG9uZW50IGxvY2F0aW9uIGNvbnZlbnRpb25zLFxuICogdGhpcyBmdW5jdGlvbiB3aWxsIHByb3ZpZGUgYSBwYXRoIGZvciB3aGVyZSB3ZVxuICogZXhwZWN0IHRoZSBDU1MgdG8gbGl2ZS5cbiAqXG4gKiBGb3IgY28tbG9jYXRlZCBzdHJ1Y3R1cmU6XG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQuaGJzXG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQuY3NzXG4gKlxuICogRm9yIG5lc3RlZCBjby1sb2NhdGVkIHN0cnVjdHVyZVxuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50L2Zvby5oYnNcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC9mb28uY3NzXG4gKlxuICogRm9yIFBvZHMgcm91dGVzIHN0cnVjdHVyZVxuICogICAtIHJvdXRlcy9teS1yb3V0ZS90ZW1wbGF0ZS57aGJzLGpzfVxuICogICAtIHJvdXRlcy9teS1yb3V0ZS9zdHlsZXMuY3NzXG4gKlxuICogRGVsaWJlcmF0ZWx5IG5vdCBzdXBwb3J0ZWQ6XG4gKiAgIC0gY29tcG9uZW50cyB3LyBwb2RzIC0tIHRoaXMgaXMgZGVwcmVjYXRlZCBpbiA1LjEwXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lIC0gdGhlIGhicywganMsIGdqcywgZ3RzIG9yIHdoYXRldmVyIGNvLWxvY2F0ZWQgcGF0aC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gZXhwZWN0ZWQgY3NzIHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNzc1BhdGhGb3IoZmlsZU5hbWUpIHtcbiAgbGV0IHdpdGhvdXRFeHQgPSB3aXRob3V0RXh0ZW5zaW9uKGZpbGVOYW1lKTtcbiAgbGV0IGNzc1BhdGggPSB3aXRob3V0RXh0ICsgJy5jc3MnO1xuXG4gIGlmIChpc1BvZChmaWxlTmFtZSkpIHtcbiAgICBjc3NQYXRoID0gZmlsZU5hbWVcbiAgICAgIC5yZXBsYWNlKC90ZW1wbGF0ZVxcLmpzJC8sICdzdHlsZXMuY3NzJylcbiAgICAgIC5yZXBsYWNlKC90ZW1wbGF0ZVxcLmhicy8sICdzdHlsZXMuY3NzJyk7XG4gIH1cblxuICByZXR1cm4gY3NzUGF0aDtcbn1cblxuLyoqXG4gKiBOb3RlIHRoYXQgY29tcG9uZW50cyBpbiB0aGUgXCJwb2RzXCIgY29udmVudGlvbiB3aWxsXG4gKiBuZXZlciBiZSBzdXBwb3J0ZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BvZFRlbXBsYXRlKGZpbGVQYXRoKSB7XG4gIGlmIChmaWxlUGF0aC5pbmNsdWRlcygnL2NvbXBvbmVudHMvJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZmlsZVBhdGguZW5kc1dpdGgoJ3RlbXBsYXRlLmpzJykgfHwgZmlsZVBhdGguZW5kc1dpdGgoJ3RlbXBsYXRlLmhicycpO1xufVxuXG4vKipcbiAqIE5vdGUgdGhhdCBjb21wb25lbnRzIGluIHRoZSBcInBvZHNcIiBjb252ZW50aW9uIHdpbGxcbiAqIG5ldmVyIGJlIHN1cHBvcnRlZC5cbiAqXG4gKiBDaGVja3MgaWYgYSBmaWxlIGVuZHMgd2l0aFxuICogLSB0ZW1wbGF0ZS5qc1xuICogLSB0ZW1wbGF0ZS5oYnNcbiAqIC0gc3R5bGVzLmNzc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQb2QoZmlsZVBhdGgpIHtcbiAgaWYgKGZpbGVQYXRoLmluY2x1ZGVzKCcvY29tcG9uZW50cy8nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc1BvZFRlbXBsYXRlKGZpbGVQYXRoKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZpbGVQYXRoLmVuZHNXaXRoKCdzdHlsZXMuY3NzJyk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICogQHJldHVybnMgdGhlIHNhbWUgcGF0aCwgYnV0IHdpdGhvdXQgdGhlIGV4dGVuc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aG91dEV4dGVuc2lvbihmaWxlUGF0aCkge1xuICBsZXQgcGFyc2VkID0gcGF0aC5wYXJzZShmaWxlUGF0aCk7XG5cbiAgcmV0dXJuIHBhdGguam9pbihwYXJzZWQuZGlyLCBwYXJzZWQubmFtZSk7XG59XG5cbi8qKlxuICogRXhhbXBsZXMgZm9yIGZpbGVOYW1lXG4gKiAtIGFic29sdXRlIG9uLWRpc2sgcGF0aFxuICogLSBpbiB3ZWJwYWNrXG4gKiAgIC0gVVJMLWFic29sdXRlIHBhdGgsIHN0YXJ0aW5nIHdpdGggL1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZVxuICogQHBhcmFtIHt7IGFkZGl0aW9uYWxSb290cz86IHN0cmluZ1tdOyBjd2Q6IHN0cmluZyB9fSBvcHRpb25zXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZWxldmFudEZpbGUoZmlsZU5hbWUsIHsgYWRkaXRpb25hbFJvb3RzLCBjd2QgfSkge1xuICBpZiAoZmlsZU5hbWUuc3RhcnRzV2l0aCgnL0BlbWJyb2lkZXInKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoSVJSRUxFVkFOVF9QQVRIUy5zb21lKChpKSA9PiBmaWxlTmFtZS5pbmNsdWRlcyhpKSkpIHJldHVybiBmYWxzZTtcblxuICBpZiAoZmlsZU5hbWUuaW5jbHVkZXMoJy9ub2RlX21vZHVsZXMvJykpIHtcbiAgICAvLyBpZiBhIGZpbGUgaXMgbm90IHRoZSBlbWJyb2lkZXIgY2FjaGUgZGlyZWN0b3J5XG4gICAgLy8gYW5kIGlzIGluIG5vZGVfbW9kdWxlcywgc2tpcCBpdC5cbiAgICBpZiAoIWZpbGVOYW1lLmluY2x1ZGVzKEVNQlJPSURFUl9ESVIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gcmV3cml0dGVuIHBhY2thZ2VzIHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQgYXQgdGhlaXIgb3duXG4gICAgLy8gcHVibGlzaCB0aW1lXG4gICAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKEVNQlJPSURFUl8zX1JFV1JJVFRFTl9QQUNLQUdFUykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGVzZSBhcmUgYWxyZWFkeSB0aGUgYnVuZGxlZCBmaWxlcy5cbiAgICBpZiAoZmlsZU5hbWUuaW5jbHVkZXMoRU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9BU1NFVFMpKSB7XG4gICAgICAvLyBub3Qgc3VwcG9ydGVkLCBuZXZlciB3aWxsIGJlXG4gICAgICBpZiAoZmlsZU5hbWUuZW5kc1dpdGgoYCR7RU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9BU1NFVFN9L3Rlc3RzLmpzYCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBJZGVhbGx5LCB3ZSBuZXZlciBnZXQgaGVyZSAtLSBpbmRpY2F0ZXMgd2UncmUgbm90IGZpbHRlcmluZyBlZmZlY3RpdmVseSBpbiBiYWJlbFxuICAgICAgLy8gTk9URTogaWYgd2UgZ2V0IGhlcmUsIHdlJ3JlIHRyeWluZyB0byBvcGVyYXRlIG9uIGEgZmlsZSB0b28gbGF0ZS5cbiAgICAgIC8vICAgICAgIHdlIG5lZWQgU2NvcGVkQ1NTIHRvIG9wZXJhdGUgYXMgY2xvc2UgdG8gb3JpZ2luYWwgc291cmNlIGFzIHBvc3NpYmxlIC0tIG5vdCBvdXRwdXQgZmlsZXMuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgbGV0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKGZpbGVOYW1lKTtcblxuICBhc3NlcnQoY3dkLCBgY3dkIHdhcyBub3QgcGFzc2VkIHRvIGlzUmVsZXZhbnRGaWxlYCk7XG5cbiAgbGV0IG91cldvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKGN3ZCk7XG5cbiAgaWYgKHdvcmtzcGFjZSAhPT0gb3VyV29ya3NwYWNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbGV0IGxvY2FsID0gZmlsZU5hbWUucmVwbGFjZSh3b3Jrc3BhY2UsICcnKTtcbiAgbGV0IFssIC4uLnBhcnRzXSA9IGxvY2FsLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pO1xuXG4gIGlmIChVTlNVUFBPUlRFRF9ESVJFQ1RPUklFUy5oYXMocGFydHNbMF0pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vc3RseSBwb2RzIHN1cHBvcnQuXG4gICAqIGZvbGtzIG5lZWQgdG8gb3B0IGluIHRvIHBvZHMgKHJvdXRlcyksIGJlY2F1c2UgZXZlcnkgcG9kcyBhcHAgY2FuIGJlIGNvbmZpZ3VyZWQgZGlmZmVyZW50bHlcbiAgICovXG4gIGxldCByb290cyA9IFsnL2NvbXBvbmVudHMvJywgJy90ZW1wbGF0ZXMvJywgLi4uKGFkZGl0aW9uYWxSb290cyB8fCBbXSldO1xuXG4gIGlmICghcm9vdHMuc29tZSgocm9vdCkgPT4gZmlsZU5hbWUuaW5jbHVkZXMocm9vdCkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlU2NvcGVkUGF0aCkge1xuICAvKipcbiAgICogKkJ5IGNvbnZlbnRpb24qLCBgc3JjYCBpcyBvbWl0dGVkIGZyb20gY29tcG9uZW50IHBhdGhzLlxuICAgKiBXZSBjYW4gcmVmbGVjdCB0aGUgc2FtZSBiZWhhdmlvciBieSByZXBsYWNpbmcgc3JjL1xuICAgKiB3aXRoIGFuIGVtcHR5IHN0cmluZy5cbiAgICpcbiAgICogQ1NTIGlzbid0IGVtaXR0ZWQgYXMgYSBjby1sb2NhdGVkIG1vZHVsZSwgYnV0XG4gICAqIHRvIGtlZXAgY29udmVudGlvbnMgY29uc2lzdGVudCBhY3Jvc3MgbGFuZ3VhZ2VzLFxuICAgKiB3ZSBjYW4gcHJldGVuZCBpdCBpcy5cbiAgICpcbiAgICogQW55IGN1c3RvbWl6YXRpb24gYmV5b25kIHJlbW92aW5nIGBzcmNgIGFuZCBgYXBwYCBpcyBwb3RlbnRpYWxseSBjb25mdXNpbmcuXG4gICAqIElmIHdlIG5lZWQgZnVydGhlciBjdXN0b21pemF0aW9ucywgd2UnbGwgd2FudCB0byBtYXRjaCBvbiBgZXhwb3J0c2AgaW4gdGhlXG4gICAqIGNvcnJlc3BvbmRpbmcgcGFja2FnZS5qc29uXG4gICAqL1xuICBsZXQgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVNjb3BlZFBhdGgucmVwbGFjZSgvXlxcL3NyY1xcLy8sICcvJyk7XG5cbiAgbGV0IHBhcnNlZCA9IHBhdGgucGFyc2UocGFja2FnZVJlbGF0aXZlKTtcblxuICBpZiAoaXNQb2QocGFja2FnZVJlbGF0aXZlKSkge1xuICAgIC8qKlxuICAgICAqIEZvciBwb2RzLCB3ZSBjaG9wIG9mZiB0aGUgd2hvbGUgZmlsZSwgYW5kIHVzZSB0aGUgZGlyIG5hbWUgYXMgdGhlIFwibW9kdWxlUGF0aFwiXG4gICAgICovXG4gICAgcmV0dXJuIHBhcnNlZC5kaXI7XG4gIH1cblxuICAvKipcbiAgICogSWYgYW4gZXh0ZW5zaW9uIGlzIHBhc3NlZCwgcmVtb3ZlIGl0LlxuICAgKiBXaGVuIHVzaW5nIHBhY2thZ2VycywgZm9sa3MgYXJlIHVzZWQgdG8gbm90IGhhdmluZyB0byBzcGVjaWZ5IGV4dGVuc2lvbnMgZm9yIGZpbGVzLlxuICAgKiBTaW5jZSB3ZSBkb24ndCBldmVuIGVtaXQgY3NzIGZpbGVzIGNvLWxvY2F0ZWQgdG8gZWFjaCBtb2R1bGUsXG4gICAqIHRoaXMgaGVscHMgdXMgbm90IGNvbnZleSBhIGxpZSB0aGF0IGEgZmlsZSBtYXkgZXhpc3QgaW4gYXQgcnVudGltZS5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUgYDxtb2R1bGUtbmFtZT4vY29tcG9uZW50cy9idXR0b25gLlxuICAgKiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBleHRlbnNpb24gaXMsIGJlY2F1c2UgeW91IGNhbiBvbmx5IGhhdmUgb25lIGNzcyBmaWxlXG4gICAqIGZvciB0aGUgYnV0dG9uIG1vZHVsZSBhbnl3YXkuXG4gICAqL1xuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhdGguam9pbihwYXJzZWQuZGlyLCBwYXJzZWQubmFtZSk7XG5cbiAgcmV0dXJuIGxvY2FsUGFja2FnZXJTdHlsZVBhdGg7XG59XG5cbi8qKlxuICogcmV0dXJucyB0aGUgYXBwLW1vZHVsZSBwYXRoIG9mIHRoZSBzb3VyY2UgZmlsZVxuICpcbiAqIFRoaXMgYXNzdW1lcyBub3JtYWwgZW1iZXIgYXBwIGNvbnZlbnRpb25zXG4gKlxuICogd2hpY2ggaXMgYDxwYWNrYWdlLmpzb24jbmFtZT4vcGF0aC10by1maWxlYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwUGF0aChzb3VyY2VQYXRoKSB7XG4gIGxldCB3b3Jrc3BhY2VQYXRoID0gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCk7XG4gIGxldCBuYW1lID0gbW9kdWxlTmFtZShzb3VyY2VQYXRoKTtcblxuICAvKipcbiAgICogIFVuZGVyIGVtYnJvaWRlciBidWlsZHMsIHRoZSBzcGVjLWNvbXBsaWFudCB2ZXJzaW9uIG9mIHRoZSBhcHBcbiAgICogaGFzIGFsbCB0aGUgZmlsZXMgdW5kZXIgYSBmb2xkZXIgd2hpY2ggcmVwcmVzZW50cyB0aGUgcGFja2FnZSBuYW1lLFxuICAgKiByYXRoZXIgdGhhbiBcImFwcFwiLlxuICAgKi9cbiAgbGV0IHBhY2thZ2VSZWxhdGl2ZSA9IHNvdXJjZVBhdGgucmVwbGFjZSh3b3Jrc3BhY2VQYXRoLCAnJyk7XG5cbiAgLyoqXG4gICAqIEJ1dCB3ZSBhbHNvIGRvbid0IHdhbnQgJ2FwcCcgLS0gd2hpY2ggaXMgcHJlc2VudCBpbiB0aGUgdjEgYWRkb24gcGlwZWxpbmVcbiAgICovXG4gIHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VSZWxhdGl2ZS5yZXBsYWNlKGAvYXBwL2AsIGAvYCk7XG5cbiAgLyoqXG4gICAqIGFsc28gYWxzbywgd2Uga25vdyB0aGF0IHRoZSByZS13cml0dGVuIGFwcCBzdHJ1Y3R1cmUgaW4gZW1icm9pZGVyQHYzXG4gICAqIGlzIGV4dHJhbmVvdXMsIGFuZCB3ZSBjYW4gY29sbGFwc2UgaXRcbiAgICovXG4gIHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VSZWxhdGl2ZS5yZXBsYWNlKFxuICAgIGAke0VNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfUEFUSH0vYCxcbiAgICAnLycsXG4gICk7XG5cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlUmVsYXRpdmUpO1xuXG4gIHJldHVybiBgJHtuYW1lfSR7bG9jYWxQYWNrYWdlclN0eWxlUGF0aH1gO1xufVxuXG4vKipcbiAqIFRvIGF2b2lkIGhpdHRpbmcgdGhlIGZpbGVzeXNldG0sIHdlJ2xsIHN0b3JlIGFsbCBmb3VuZFxuICogcHJvamVjdCBwYXRocyBiZXJlLCBzbyB3ZSBjYW4sIGluIG1lbW9yeSxcbiAqIGdldCB0aGUgZm9sZGVyIHdoZXJlIGEgcGFja2FnZS5qc29uIGV4aXN0cywgcmF0aGVyIHRoYW5cbiAqIGhpdCB0aGUgZmlsZSBzeXN0ZW0gZXZlcnkgdGltZS5cbiAqL1xuY29uc3QgU0VFTiA9IG5ldyBTZXQoKTtcblxuZnVuY3Rpb24gZ2V0U2Vlbihzb3VyY2VQYXRoKSB7XG4gIGlmIChTRUVOLmhhcyhzb3VyY2VQYXRoKSkgcmV0dXJuIHNvdXJjZVBhdGg7XG5cbiAgbGV0IHBhcnRzID0gc291cmNlUGF0aC5zcGxpdCgnLycpO1xuXG4gIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID4gMTsgaS0tKSB7XG4gICAgbGV0IHRvQ2hlY2sgPSBwYXJ0cy5zbGljZSgwLCBpKS5qb2luKCcvJyk7XG5cbiAgICBsZXQgc2VlbiA9IFNFRU4uaGFzKHRvQ2hlY2spO1xuXG4gICAgaWYgKHNlZW4pIHtcbiAgICAgIHJldHVybiB0b0NoZWNrO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCwgb3B0aW9ucykge1xuICBsZXQgY3dkID0gb3B0aW9ucz8uY3dkID8/IENXRDtcblxuICBpZiAoc291cmNlUGF0aC5pbmNsdWRlcyhFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEgpKSB7XG4gICAgc291cmNlUGF0aCA9IHNvdXJjZVBhdGguc3BsaXQoRU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9QQVRIKVswXTtcbiAgfVxuXG4gIGlmIChzb3VyY2VQYXRoLmVuZHNXaXRoKCcvJykpIHtcbiAgICBzb3VyY2VQYXRoID0gc291cmNlUGF0aC5yZXBsYWNlKC9cXC8kLywgJycpO1xuICB9XG5cbiAgbGV0IHNlZW4gPSBnZXRTZWVuKHNvdXJjZVBhdGgpO1xuXG4gIGlmIChzZWVuKSB7XG4gICAgcmV0dXJuIHNlZW47XG4gIH1cblxuICBsZXQgY2FuZGlkYXRlUGF0aCA9IHBhdGguam9pbihzb3VyY2VQYXRoLCAncGFja2FnZS5qc29uJyk7XG5cbiAgY29uc3QgaXNXb3Jrc3BhY2UgPSBmc1N5bmMuZXhpc3RzU3luYyhjYW5kaWRhdGVQYXRoKTtcblxuICBpZiAoaXNXb3Jrc3BhY2UpIHtcbiAgICByZXR1cm4gc291cmNlUGF0aDtcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IGZpbmRQYWNrYWdlSnNvblVwKHNvdXJjZVBhdGgsIHsgY3dkIH0pO1xuXG4gIGlmICghcGFja2FnZUpzb25QYXRoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZGV0ZXJtaW5lIHByb2plY3QgZm9yICR7c291cmNlUGF0aH1gKTtcbiAgfVxuXG4gIGNvbnN0IHdvcmtzcGFjZVBhdGggPSBwYXRoLmRpcm5hbWUocGFja2FnZUpzb25QYXRoKTtcblxuICBTRUVOLmFkZCh3b3Jrc3BhY2VQYXRoKTtcblxuICByZXR1cm4gd29ya3NwYWNlUGF0aDtcbn1cblxuZnVuY3Rpb24gZmluZFBhY2thZ2VKc29uVXAoc3RhcnRQYXRoLCBvcHRpb25zKSB7XG4gIGxldCBjd2QgPSBvcHRpb25zPy5jd2QgPz8gQ1dEO1xuICBsZXQgcGFydHMgPSBzdGFydFBhdGguc3BsaXQoJy8nKTtcblxuICBmb3IgKGxldCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+IDE7IGktLSkge1xuICAgIGxldCB0b0NoZWNrID0gcGFydHMuc2xpY2UoMCwgaSkuam9pbignLycpO1xuXG4gICAgbGV0IHBhY2thZ2VKc29uID0gcGF0aC5qb2luKHRvQ2hlY2ssICdwYWNrYWdlLmpzb24nKTtcbiAgICBsZXQgZXhpc3RzID0gZnNTeW5jLmV4aXN0c1N5bmMocGFja2FnZUpzb24pO1xuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgcmV0dXJuIHBhY2thZ2VKc29uO1xuICAgIH1cblxuICAgIC8vIERvbid0IHRyYXZlcnNlIGFsbCB0aGUgd2F5IHRvIHRoZSByb290IG9mIHRoZSBmaWxlIHN5c3RlbS5cbiAgICBpZiAodG9DaGVjayA9PT0gY3dkKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgTUFOSUZFU1RfQ0FDSEUgPSBuZXcgTWFwKCk7XG5cbi8qKlxuICogV2lsbCByZXR1cm4gdGhlIHBhY2thZ2UuanNvbiNuYW1lLCBvciBjb25maWcvZW52aXJvbm1lbnQjbW91ZGxlUHJlZml4IChpZiB2MSBhcHApXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZHVsZU5hbWUoc291cmNlUGF0aCkge1xuICBjb25zdCB3b3Jrc3BhY2UgPSBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKTtcbiAgY29uc3QgbWFuaWZlc3QgPSBnZXRNYW5pZmVzdCh3b3Jrc3BhY2UpO1xuXG4gIGlmIChtYW5pZmVzdFsnZW1iZXItYWRkb24nXSkge1xuICAgIC8qKlxuICAgICAqIExpYnJhcmllcyBhcmUgbm90IGFsbG93ZWQgdG8gY3VzdG9taXplIHRoZWlyIG1vZHVsZSBuYW1lXG4gICAgICogdG8gYmUgZGlmZmVyZW50IGZyb20gdGhlaXIgcGFja2FnZSBuYW1lLlxuICAgICAqXG4gICAgICogKEl0J3MgYWxzbyBib25rZXJzIHRoYXQgdGhpcyBpcyBhbGxvd2VkIGZvciB2MSBhcHBzKVxuICAgICAqL1xuICAgIHJldHVybiBtYW5pZmVzdC5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvciB2MSBhcHBzLCB3ZSBuZWVkIHRvIHJlZmVyZW5jZSB0aGUgY29uZmlnL2Vudmlyb25tZW50LmpzIGZpbGVcbiAgICogdG8gc2VlIGlmIHRoZSBtb2R1bGVQcmVmaXggc2V0dGluZyBkaWZmZXJzIGZyb20gbWFuaWZlc3QubmFtZTtcbiAgICovXG4gIGxldCBlbnZpcm9ubWVudEpTID0gcGF0aC5qb2luKHdvcmtzcGFjZSwgJ2NvbmZpZy9lbnZpcm9ubWVudC5qcycpO1xuXG4gIC8qKlxuICAgKiBOT1RFOiB0aGUgZW52aXJvbm1lbnQuanMgaXMgYSBjb21tb25KUyBmaWxlLCBzbyB3ZSBjYW4gc3luY2hyb25vdXNseSByZXF1aXJlIGl0XG4gICAqXG4gICAqIFRPRE86IGlmIHdlIGhhdmUgaXNzdWVzIHdpdGggbG9hZGluZyB0aGlzIGZpbGUgbGF0ZXIgd2Ugc2hvdWxkIHByb2JhYmx5IGp1c3QgcnVuIGpzY29kZXNoaWZ0IG9uIGl0XG4gICAqICAgICAgIGJ1dCB0aGF0IGNvdWxkIGFsbG93IHVzIHRvIGJlIGJyaXR0bGUgaW4gZGlmZmVyZW50IHdheXMsIGxpa2UgaWYgZm9sa3Mgc3RyYXkgZnJvbSB0aGUgd2F5IHRoZVxuICAgKiAgICAgICBmaWxlIGlzIGxhaWQgb3V0IGZyb20gdGhlIGJsdWVwcmludCBkZWZhdWx0cy5cbiAgICovXG4gIGlmIChmc1N5bmMuZXhpc3RzU3luYyhlbnZpcm9ubWVudEpTKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZiAtLSB0aGlzIGV4aXN0c1xuICAgIGNvbnN0IGVudkZuID0gcmVxdWlyZShlbnZpcm9ubWVudEpTKTtcbiAgICBjb25zdCBlbnYgPSBlbnZGbignZW1iZXItc2NvcGVkLWNzcycpO1xuXG4gICAgcmV0dXJuIGVudi5tb2R1bGVQcmVmaXggfHwgbWFuaWZlc3QubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWxsYmFjayB0byB0aGUgdHJ1ZVx1MjEyMiBtb2R1bGVcdTIxMjIgbmFtZS5cbiAgICovXG4gIHJldHVybiBtYW5pZmVzdC5uYW1lO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB3b3Jrc3BhY2VcbiAqL1xuZnVuY3Rpb24gZ2V0TWFuaWZlc3Qod29ya3NwYWNlKSB7XG4gIGxldCBleGlzdGluZyA9IE1BTklGRVNUX0NBQ0hFLmdldCh3b3Jrc3BhY2UpO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIHJldHVybiBleGlzdGluZztcbiAgfVxuXG4gIGxldCBidWZmZXIgPSBmc1N5bmMucmVhZEZpbGVTeW5jKHBhdGguam9pbih3b3Jrc3BhY2UsICdwYWNrYWdlLmpzb24nKSk7XG4gIGxldCBjb250ZW50ID0gYnVmZmVyLnRvU3RyaW5nKCk7XG4gIGxldCBqc29uID0gSlNPTi5wYXJzZShjb250ZW50KTtcblxuICBNQU5JRkVTVF9DQUNIRS5zZXQod29ya3NwYWNlLCBqc29uKTtcblxuICByZXR1cm4ganNvbjtcbn1cbiIsICJpbXBvcnQgbWQ1IGZyb20gJ2JsdWVpbXAtbWQ1JztcblxuLyoqXG4gKiBUaGUgaW50ZW50IG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gZ2VuZXJhdGUgdGhlIHN1ZmZpeC9wb3N0Zml4IGZvciB0aGVcbiAqIGNzcyBjbGFzc2VzLCBiYXNlZCBvbiB0aGUgbW9kdWxlLXNjb3BlZCBwYXRoIG5hbWUuXG4gKlxuICogZm9yIGV4YW1wbGUsXG4gKiAgICBoYXNoKCdteS1hcHAvY29tcG9uZW50cy9mb28nKVxuICogIGluc3RlYWQgb2ZcbiAqICAgIGhhc2goJ2FwcC9jb21wb25lbnRzL2ZvbycpXG4gKlxuICogICh1bmxlc3MgeW91ciBhcHAgbmFtZSBpcyAnYXBwJylcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlUGF0aFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2gobW9kdWxlUGF0aCkge1xuICByZXR1cm4gJ2UnICsgbWQ1KG1vZHVsZVBhdGgpLnN1YnN0cmluZygwLCA4KTtcbn1cblxuXG5leHBvcnQgY29uc3QgaGFzaEZyb21Nb2R1bGVQYXRoID0gaGFzaDtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSwrQkFBMkI7QUFDM0IsZ0JBQTJCO0FBQzNCLGtCQUFxQjs7O0FDRnJCLHlCQUFtQjtBQUNuQixxQkFBbUI7QUFDbkIsdUJBQWlCOzs7QUNGakIseUJBQWdCOzs7QURVaEIsSUFBTSxnQkFBZ0I7QUFDdEIsSUFBTSxpQ0FBaUMsR0FBRyxhQUFhO0FBQ3ZELElBQU0sbUNBQW1DLEdBQUcsOEJBQThCO0FBQzFFLElBQU0saUNBQWlDLEdBQUcsYUFBYTtBQUN2RCxJQUFNLG1CQUFtQixDQUFDLG9CQUFvQjtBQUM5QyxJQUFNLDBCQUEwQixvQkFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO0FBRWpELElBQU0sTUFBTSxRQUFRLElBQUk7QUF3Q2pCLFNBQVMsV0FBVyxVQUFVO0FBQ25DLE1BQUksYUFBYSxpQkFBaUIsUUFBUTtBQUMxQyxNQUFJLFVBQVUsYUFBYTtBQUUzQixNQUFJLE1BQU0sUUFBUSxHQUFHO0FBQ25CLGNBQVUsU0FDUCxRQUFRLGlCQUFpQixZQUFZLEVBQ3JDLFFBQVEsaUJBQWlCLFlBQVk7QUFBQSxFQUMxQztBQUVBLFNBQU87QUFDVDtBQVFPLFNBQVMsY0FBYyxVQUFVO0FBQ3RDLE1BQUksU0FBUyxTQUFTLGNBQWMsR0FBRztBQUNyQyxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU8sU0FBUyxTQUFTLGFBQWEsS0FBSyxTQUFTLFNBQVMsY0FBYztBQUM3RTtBQWFPLFNBQVMsTUFBTSxVQUFVO0FBQzlCLE1BQUksU0FBUyxTQUFTLGNBQWMsR0FBRztBQUNyQyxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksY0FBYyxRQUFRLEdBQUc7QUFDM0IsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPLFNBQVMsU0FBUyxZQUFZO0FBQ3ZDO0FBT08sU0FBUyxpQkFBaUIsVUFBVTtBQUN6QyxNQUFJLFNBQVMsaUJBQUFBLFFBQUssTUFBTSxRQUFRO0FBRWhDLFNBQU8saUJBQUFBLFFBQUssS0FBSyxPQUFPLEtBQUssT0FBTyxJQUFJO0FBQzFDO0FBWU8sU0FBUyxlQUFlLFVBQVUsRUFBRSxpQkFBaUIsSUFBSSxHQUFHO0FBQ2pFLE1BQUksU0FBUyxXQUFXLGFBQWEsRUFBRyxRQUFPO0FBQy9DLE1BQUksaUJBQWlCLEtBQUssQ0FBQyxNQUFNLFNBQVMsU0FBUyxDQUFDLENBQUMsRUFBRyxRQUFPO0FBRS9ELE1BQUksU0FBUyxTQUFTLGdCQUFnQixHQUFHO0FBR3ZDLFFBQUksQ0FBQyxTQUFTLFNBQVMsYUFBYSxHQUFHO0FBQ3JDLGFBQU87QUFBQSxJQUNUO0FBSUEsUUFBSSxTQUFTLFNBQVMsOEJBQThCLEdBQUc7QUFDckQsYUFBTztBQUFBLElBQ1Q7QUFHQSxRQUFJLFNBQVMsU0FBUyxnQ0FBZ0MsR0FBRztBQUV2RCxVQUFJLFNBQVMsU0FBUyxHQUFHLGdDQUFnQyxXQUFXLEdBQUc7QUFDckUsZUFBTztBQUFBLE1BQ1Q7QUFLQSxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxNQUFJLFlBQVksa0JBQWtCLFFBQVE7QUFFMUMseUJBQUFDLFNBQU8sS0FBSyxzQ0FBc0M7QUFFbEQsTUFBSSxlQUFlLGtCQUFrQixHQUFHO0FBRXhDLE1BQUksY0FBYyxjQUFjO0FBQzlCLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSSxRQUFRLFNBQVMsUUFBUSxXQUFXLEVBQUU7QUFDMUMsTUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLElBQUksTUFBTSxNQUFNLEdBQUcsRUFBRSxPQUFPLE9BQU87QUFFbEQsTUFBSSx3QkFBd0IsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHO0FBQ3pDLFdBQU87QUFBQSxFQUNUO0FBTUEsTUFBSSxRQUFRLENBQUMsZ0JBQWdCLGVBQWUsR0FBSSxtQkFBbUIsQ0FBQyxDQUFFO0FBRXRFLE1BQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxTQUFTLFNBQVMsU0FBUyxJQUFJLENBQUMsR0FBRztBQUNsRDtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFxRkEsSUFBTSxPQUFPLG9CQUFJLElBQUk7QUFFckIsU0FBUyxRQUFRLFlBQVk7QUFDM0IsTUFBSSxLQUFLLElBQUksVUFBVSxFQUFHLFFBQU87QUFFakMsTUFBSSxRQUFRLFdBQVcsTUFBTSxHQUFHO0FBRWhDLFdBQVMsSUFBSSxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsS0FBSztBQUN6QyxRQUFJLFVBQVUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUV4QyxRQUFJLE9BQU8sS0FBSyxJQUFJLE9BQU87QUFFM0IsUUFBSSxNQUFNO0FBQ1IsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBQ0Y7QUFFTyxTQUFTLGtCQUFrQixZQUFZLFNBQVM7QUFDckQsTUFBSSxNQUFNLFNBQVMsT0FBTztBQUUxQixNQUFJLFdBQVcsU0FBUyw4QkFBOEIsR0FBRztBQUN2RCxpQkFBYSxXQUFXLE1BQU0sOEJBQThCLEVBQUUsQ0FBQztBQUFBLEVBQ2pFO0FBRUEsTUFBSSxXQUFXLFNBQVMsR0FBRyxHQUFHO0FBQzVCLGlCQUFhLFdBQVcsUUFBUSxPQUFPLEVBQUU7QUFBQSxFQUMzQztBQUVBLE1BQUksT0FBTyxRQUFRLFVBQVU7QUFFN0IsTUFBSSxNQUFNO0FBQ1IsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLGdCQUFnQixpQkFBQUMsUUFBSyxLQUFLLFlBQVksY0FBYztBQUV4RCxRQUFNLGNBQWMsZUFBQUMsUUFBTyxXQUFXLGFBQWE7QUFFbkQsTUFBSSxhQUFhO0FBQ2YsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGtCQUFrQixrQkFBa0IsWUFBWSxFQUFFLElBQUksQ0FBQztBQUU3RCxNQUFJLENBQUMsaUJBQWlCO0FBQ3BCLFVBQU0sSUFBSSxNQUFNLG1DQUFtQyxVQUFVLEVBQUU7QUFBQSxFQUNqRTtBQUVBLFFBQU0sZ0JBQWdCLGlCQUFBRCxRQUFLLFFBQVEsZUFBZTtBQUVsRCxPQUFLLElBQUksYUFBYTtBQUV0QixTQUFPO0FBQ1Q7QUFFQSxTQUFTLGtCQUFrQixXQUFXLFNBQVM7QUFDN0MsTUFBSSxNQUFNLFNBQVMsT0FBTztBQUMxQixNQUFJLFFBQVEsVUFBVSxNQUFNLEdBQUc7QUFFL0IsV0FBUyxJQUFJLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxLQUFLO0FBQ3pDLFFBQUksVUFBVSxNQUFNLE1BQU0sR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBRXhDLFFBQUksY0FBYyxpQkFBQUEsUUFBSyxLQUFLLFNBQVMsY0FBYztBQUNuRCxRQUFJLFNBQVMsZUFBQUMsUUFBTyxXQUFXLFdBQVc7QUFFMUMsUUFBSSxRQUFRO0FBQ1YsYUFBTztBQUFBLElBQ1Q7QUFHQSxRQUFJLFlBQVksS0FBSztBQUNuQjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUOzs7QUR2VkEsU0FBUyxnQkFBZ0IsT0FBTyxLQUFLO0FBQ25DLE1BQUksV0FBVyxNQUFNLEtBQUssS0FBSztBQUMvQixNQUFJLGtCQUFrQixNQUFNLE1BQU07QUFFbEMsU0FBTyxlQUFlLFVBQVU7QUFBQSxJQUM5QjtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUM7QUFDSDtBQU9BLElBQU8sdUJBQVEsQ0FBQyxLQUFLLFNBQVMscUJBQXFCO0FBUWpELFNBQU87QUFBQSxJQUNMLFNBQVM7QUFBQSxNQUNQLFNBQVM7QUFBQSxRQUNQLE1BQU1DLE9BQU0sT0FBTztBQUNqQixjQUFJLENBQUMsZ0JBQWdCLE9BQU8sZ0JBQWdCLEdBQUc7QUFDN0Msa0JBQU0sVUFBVTtBQUVoQjtBQUFBLFVBQ0Y7QUFFQSxnQkFBTSxhQUFhLElBQUksb0NBQVcsS0FBS0EsS0FBSTtBQUFBLFFBQzdDO0FBQUEsTUFDRjtBQUFBLE1BQ0Esa0JBQWtCQSxPQUFNLE9BQU87QUFDN0IsWUFBSSxNQUFNLFNBQVM7QUFDakI7QUFBQSxRQUNGO0FBRUEsWUFBSUEsTUFBSyxLQUFLLE9BQU8sVUFBVSxvQkFBb0I7QUFDakQsY0FBSSxZQUFZQSxNQUFLLEtBQUssV0FBVztBQUFBLFlBQ25DLENBQUMsTUFBTSxFQUFFLFNBQVMsU0FBUztBQUFBLFVBQzdCO0FBRUEsY0FBSSxXQUFXO0FBQ2Isa0JBQU0sS0FBSyxLQUFLLHNCQUFzQixVQUFVLE1BQU07QUFBQSxVQUN4RDtBQUVBLGNBQUksVUFBVSxNQUFNLFNBQVMsZUFBZTtBQUMxQyxrQkFBTSxJQUFJO0FBQUEsY0FDUjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsVUFBQUEsTUFBSyxPQUFPO0FBQUEsUUFDZDtBQUFBLE1BQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUlBLGVBQWVBLE9BQU0sT0FBTztBQUMxQixZQUFJLENBQUMsTUFBTSxLQUFLLE1BQU0sb0JBQXFCO0FBRTNDLFlBQ0VBLE1BQUssS0FBSyxNQUFNLFNBQVMsZ0JBQ3pCQSxNQUFLLEtBQUssTUFBTSxTQUFTLE1BQU0sS0FBSyxNQUFNLHFCQUMxQztBQUNBLFVBQUFBLE1BQUssT0FBTztBQUFBLFFBQ2Q7QUFBQSxNQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BTUEsZUFBZUEsT0FBTSxPQUFPO0FBQzFCLFlBQUksTUFBTSxTQUFTO0FBQ2pCO0FBQUEsUUFDRjtBQUVBLGNBQU0sT0FBT0EsTUFBSztBQUVsQixZQUNFLEtBQUssT0FBTyxTQUFTLHdCQUNyQixLQUFLLE9BQU8sU0FBUyxTQUNyQixLQUFLLE9BQU8sU0FBUyx5QkFDckI7QUFDQSxnQkFBTSxXQUNKLE1BQU0sS0FBSyxLQUFLLGtCQUFrQixNQUFNLEtBQUssS0FBSztBQUVwRCxjQUFJLFVBQVUsV0FBVyxRQUFRO0FBRWpDLGtCQUFJLHNCQUFXLE9BQU8sR0FBRztBQUN2QixnQkFBSSxVQUFVLFlBQUFDLFFBQVMsU0FBUyxPQUFPO0FBRXZDLGtCQUFNLFdBQVcsb0JBQW9CLEtBQUssT0FBTyxFQUFFO0FBQUEsVUFDckQ7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbInBhdGgiLCAiYXNzZXJ0IiwgInBhdGgiLCAiZnNTeW5jIiwgInBhdGgiLCAibm9kZVBhdGgiXQp9Cg==
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2J1aWxkL2JhYmVsLXBsdWdpbi5qcyIsICIuLi8uLi9zcmMvbGliL3BhdGgvdXRpbHMuanMiLCAiLi4vLi4vc3JjL2xpYi9wYXRoL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgSW1wb3J0VXRpbCB9IGZyb20gJ2JhYmVsLWltcG9ydC11dGlsJztcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgbm9kZVBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IGNzc1BhdGhGb3IsIGlzUmVsZXZhbnRGaWxlIH0gZnJvbSAnLi4vbGliL3BhdGgvdXRpbHMuanMnO1xuXG5mdW5jdGlvbiBfaXNSZWxldmFudEZpbGUoc3RhdGUsIGN3ZCkge1xuICBsZXQgZmlsZU5hbWUgPSBzdGF0ZS5maWxlLm9wdHMuZmlsZW5hbWU7XG4gIGxldCBhZGRpdGlvbmFsUm9vdHMgPSBzdGF0ZS5vcHRzPy5hZGRpdGlvbmFsUm9vdHM7XG5cbiAgcmV0dXJuIGlzUmVsZXZhbnRGaWxlKGZpbGVOYW1lLCB7XG4gICAgYWRkaXRpb25hbFJvb3RzLFxuICAgIGN3ZCxcbiAgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IGVudiAtIGJhYmVsIHBsdWdpbiBlbnYsIGVudi50eXBlcyBpcyBtb3N0IGNvbW1vbmx5IHVzZWQgKGVzcCBpbiBUUylcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gdGhlIG9wdGlvbnMgZm9yIHNjb3BlZC1jc3MgLS0gdGhpcyBpcyBhbHNvIGF2YWlsYWJsZSBpbiBlYWNoIHZpc2l0b3IncyBzdGF0ZS5vcHRzXG4gKiBAcGFyYW0ge3N0cmluZ30gd29ya2luZ0RpcmVjdG9yeVxuICovXG5leHBvcnQgZGVmYXVsdCAoZW52LCBvcHRpb25zLCB3b3JraW5nRGlyZWN0b3J5KSA9PiB7XG4gIC8qKlxuICAgKiBUaGlzIGJhYmVsIHBsdWdpbiBkb2VzIHRocmVlIHRoaW5nczpcbiAgICogLSByZW1vdmVzIHRoZSBpbXBvcnQgb2Ygc2NvcGVkQ2xhc3MsIGlmIGl0IGV4aXN0c1xuICAgKiAgIC0gaWYgc2NvcGVkQ2xhc3Mgd2FzIGltcG9ydGVkLCBpdCBpcyByZW1vdmVkIGZyb20gYW55IGNvbXBvbmVudCdzIFwic2NvcGUgYmFnXCJcbiAgICogICAgICh0aGUgc2NvcGUgYmFnIGJlaW5nIGEgbG93LWxldmVsIG9iamVjdCB1c2VkIGZvciBwYXNzaW5nIHdoYXQgaXMgXCJpbiBzY29wZVwiIGZvciBhIGNvbXBvbmVudClcbiAgICogLSBhZGRzIGFuIGltcG9ydCB0byB0aGUgQ1NTIGZpbGUsIGlmIGl0IGV4aXN0c1xuICAgKi9cbiAgcmV0dXJuIHtcbiAgICB2aXNpdG9yOiB7XG4gICAgICBQcm9ncmFtOiB7XG4gICAgICAgIGVudGVyKHBhdGgsIHN0YXRlKSB7XG4gICAgICAgICAgaWYgKCFfaXNSZWxldmFudEZpbGUoc3RhdGUsIHdvcmtpbmdEaXJlY3RvcnkpKSB7XG4gICAgICAgICAgICBzdGF0ZS5jYW5Ta2lwID0gdHJ1ZTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0YXRlLmltcG9ydFV0aWwgPSBuZXcgSW1wb3J0VXRpbChlbnYsIHBhdGgpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uKHBhdGgsIHN0YXRlKSB7XG4gICAgICAgIGlmIChzdGF0ZS5jYW5Ta2lwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdGgubm9kZS5zb3VyY2UudmFsdWUgPT09ICdlbWJlci1zY29wZWQtY3NzJykge1xuICAgICAgICAgIGxldCBzcGVjaWZpZXIgPSBwYXRoLm5vZGUuc3BlY2lmaWVycy5maW5kKFxuICAgICAgICAgICAgKHgpID0+IHguaW1wb3J0ZWQubmFtZSA9PT0gJ3Njb3BlZENsYXNzJyxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHNwZWNpZmllcikge1xuICAgICAgICAgICAgc3RhdGUuZmlsZS5vcHRzLmltcG9ydGVkU2NvcGVkQ2xhc3MgPSBzcGVjaWZpZXIubG9jYWwubmFtZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc3BlY2lmaWVyLmxvY2FsLm5hbWUgIT09ICdzY29wZWRDbGFzcycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFRoZSBzY29wZWRDbGFzcyBpbXBvcnQgaXMgYSBwc3VlZG8taGVscGVyLCBhbmQgbWF5IG5vdCBiZSByZW5hbWVkIGFzIGl0IGlzIHJlbW92ZWQgYXQgYnVpbGQgdGltZS5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXRoLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBPbmx5IGluIHN0cmljdCBtb2RlLCBkbyB3ZSBjYXJlIGFib3V0IHJlbW9uaW5nIHRoZSBzY29wZSBiYWcgcmVmZXJlbmNlXG4gICAgICAgKi9cbiAgICAgIE9iamVjdFByb3BlcnR5KHBhdGgsIHN0YXRlKSB7XG4gICAgICAgIGlmICghc3RhdGUuZmlsZS5vcHRzPy5pbXBvcnRlZFNjb3BlZENsYXNzKSByZXR1cm47XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBhdGgubm9kZS52YWx1ZS50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICBwYXRoLm5vZGUudmFsdWUubmFtZSA9PT0gc3RhdGUuZmlsZS5vcHRzPy5pbXBvcnRlZFNjb3BlZENsYXNzXG4gICAgICAgICkge1xuICAgICAgICAgIHBhdGgucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIElmIHRoZXJlIGlzIGEgQ1NTIGZpbGUsIEFORCBhIGNvcnJlc3BvbmRpbmcgdGVtcGxhdGUsXG4gICAgICAgKiB3ZSBjYW4gaW1wb3J0IHRoZSBDU1MgdG8gdGhlbiBkZWZlciB0byB0aGUgQ1NTIGxvYWRlclxuICAgICAgICogb3Igb3RoZXIgQ1NTIHByb2Nlc3NpbmcgdG8gaGFuZGxlIHRoZSBwb3N0Zml4aW5nXG4gICAgICAgKi9cbiAgICAgIENhbGxFeHByZXNzaW9uKHBhdGgsIHN0YXRlKSB7XG4gICAgICAgIGlmIChzdGF0ZS5jYW5Ta2lwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9kZSA9IHBhdGgubm9kZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbm9kZS5jYWxsZWUubmFtZSA9PT0gJ3ByZWNvbXBpbGVUZW1wbGF0ZScgfHxcbiAgICAgICAgICBub2RlLmNhbGxlZS5uYW1lID09PSAnaGJzJyB8fFxuICAgICAgICAgIG5vZGUuY2FsbGVlLm5hbWUgPT09ICdjcmVhdGVUZW1wbGF0ZUZhY3RvcnknXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID1cbiAgICAgICAgICAgIHN0YXRlLmZpbGUub3B0cy5zb3VyY2VGaWxlTmFtZSB8fCBzdGF0ZS5maWxlLm9wdHMuZmlsZW5hbWU7XG5cbiAgICAgICAgICBsZXQgY3NzUGF0aCA9IGNzc1BhdGhGb3IoZmlsZU5hbWUpO1xuXG4gICAgICAgICAgaWYgKGV4aXN0c1N5bmMoY3NzUGF0aCkpIHtcbiAgICAgICAgICAgIGxldCBiYXNlQ1NTID0gbm9kZVBhdGguYmFzZW5hbWUoY3NzUGF0aCk7XG5cbiAgICAgICAgICAgIHN0YXRlLmltcG9ydFV0aWwuaW1wb3J0Rm9yU2lkZUVmZmVjdChgLi8ke2Jhc2VDU1N9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59O1xuIiwgImltcG9ydCBhc3NlcnQgZnJvbSAnbm9kZTphc3NlcnQnO1xuaW1wb3J0IGZzU3luYyBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdub2RlOm1vZHVsZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgeyBoYXNoRnJvbUFic29sdXRlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLWFic29sdXRlLXBhdGguanMnO1xuaW1wb3J0IHsgaGFzaEZyb21Nb2R1bGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tbW9kdWxlLXBhdGguanMnO1xuXG5leHBvcnQgeyBoYXNoRnJvbUFic29sdXRlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLWFic29sdXRlLXBhdGguanMnO1xuZXhwb3J0IHsgaGFzaEZyb21Nb2R1bGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tbW9kdWxlLXBhdGguanMnO1xuXG4vLyBDSlMgLyBFU00/XG5sZXQgaGVyZSA9IGltcG9ydC5tZXRhLnVybDtcbmxldCBvdXJSZXF1aXJlID0gZ2xvYmFsVGhpcy5yZXF1aXJlXG4gID8gZ2xvYmFsVGhpcy5yZXF1aXJlXG4gIDogaGVyZSAmJiBjcmVhdGVSZXF1aXJlKGhlcmUpO1xuXG5pZiAoIW91clJlcXVpcmUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIG91clJlcXVpcmUgPSByZXF1aXJlO1xufVxuXG5jb25zdCBFTUJST0lERVJfRElSID0gJ25vZGVfbW9kdWxlcy8uZW1icm9pZGVyJztcbmNvbnN0IEVNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfUEFUSCA9IGAke0VNQlJPSURFUl9ESVJ9L3Jld3JpdHRlbi1hcHBgO1xuY29uc3QgRU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9BU1NFVFMgPSBgJHtFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEh9L2Fzc2V0c2A7XG5jb25zdCBFTUJST0lERVJfM19SRVdSSVRURU5fUEFDS0FHRVMgPSBgJHtFTUJST0lERVJfRElSfS9yZXdyaXR0ZW4tcGFja2FnZXNgO1xuY29uc3QgSVJSRUxFVkFOVF9QQVRIUyA9IFsnbm9kZV9tb2R1bGVzLy5wbnBtJ107XG5jb25zdCBVTlNVUFBPUlRFRF9ESVJFQ1RPUklFUyA9IG5ldyBTZXQoWyd0ZXN0cyddKTtcblxuY29uc3QgQ1dEID0gcHJvY2Vzcy5jd2QoKTtcblxuLyoqXG4gKiBSZWdhcmRsZXNzIG9mIHdoYXQgdGhlIGZpbGVQYXRoIGZvcm1hdCBpcyxcbiAqIHRoaXMgd2lsbCB0cnkgdG8gcmV0dXJuIHRoZSBjb3JyZWN0IHBvc3RmaXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaEZyb20oZmlsZVBhdGgpIHtcbiAgaWYgKGZpbGVQYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIHJldHVybiBoYXNoRnJvbUFic29sdXRlUGF0aChmaWxlUGF0aCk7XG4gIH1cblxuICByZXR1cm4gaGFzaEZyb21Nb2R1bGVQYXRoKGZpbGVQYXRoKTtcbn1cblxuLyoqXG4gKiBCYXNlZCBvbiBlbWJlcidzIGNvbXBvbmVudCBsb2NhdGlvbiBjb252ZW50aW9ucyxcbiAqIHRoaXMgZnVuY3Rpb24gd2lsbCBwcm92aWRlIGEgcGF0aCBmb3Igd2hlcmUgd2VcbiAqIGV4cGVjdCB0aGUgQ1NTIHRvIGxpdmUuXG4gKlxuICogRm9yIGNvLWxvY2F0ZWQgc3RydWN0dXJlOlxuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50Lmhic1xuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50LmNzc1xuICpcbiAqIEZvciBuZXN0ZWQgY28tbG9jYXRlZCBzdHJ1Y3R1cmVcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC9mb28uaGJzXG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQvZm9vLmNzc1xuICpcbiAqIEZvciBQb2RzIHJvdXRlcyBzdHJ1Y3R1cmVcbiAqICAgLSByb3V0ZXMvbXktcm91dGUvdGVtcGxhdGUue2hicyxqc31cbiAqICAgLSByb3V0ZXMvbXktcm91dGUvc3R5bGVzLmNzc1xuICpcbiAqIERlbGliZXJhdGVseSBub3Qgc3VwcG9ydGVkOlxuICogICAtIGNvbXBvbmVudHMgdy8gcG9kcyAtLSB0aGlzIGlzIGRlcHJlY2F0ZWQgaW4gNS4xMFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZSAtIHRoZSBoYnMsIGpzLCBnanMsIGd0cyBvciB3aGF0ZXZlciBjby1sb2NhdGVkIHBhdGguXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIGV4cGVjdGVkIGNzcyBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjc3NQYXRoRm9yKGZpbGVOYW1lKSB7XG4gIGxldCB3aXRob3V0RXh0ID0gd2l0aG91dEV4dGVuc2lvbihmaWxlTmFtZSk7XG4gIGxldCBjc3NQYXRoID0gd2l0aG91dEV4dCArICcuY3NzJztcblxuICBpZiAoaXNQb2QoZmlsZU5hbWUpKSB7XG4gICAgY3NzUGF0aCA9IGZpbGVOYW1lXG4gICAgICAucmVwbGFjZSgvdGVtcGxhdGVcXC5qcyQvLCAnc3R5bGVzLmNzcycpXG4gICAgICAucmVwbGFjZSgvdGVtcGxhdGVcXC5oYnMvLCAnc3R5bGVzLmNzcycpO1xuICB9XG5cbiAgcmV0dXJuIGNzc1BhdGg7XG59XG5cbi8qKlxuICogTm90ZSB0aGF0IGNvbXBvbmVudHMgaW4gdGhlIFwicG9kc1wiIGNvbnZlbnRpb24gd2lsbFxuICogbmV2ZXIgYmUgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQb2RUZW1wbGF0ZShmaWxlUGF0aCkge1xuICBpZiAoZmlsZVBhdGguaW5jbHVkZXMoJy9jb21wb25lbnRzLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGZpbGVQYXRoLmVuZHNXaXRoKCd0ZW1wbGF0ZS5qcycpIHx8IGZpbGVQYXRoLmVuZHNXaXRoKCd0ZW1wbGF0ZS5oYnMnKTtcbn1cblxuLyoqXG4gKiBOb3RlIHRoYXQgY29tcG9uZW50cyBpbiB0aGUgXCJwb2RzXCIgY29udmVudGlvbiB3aWxsXG4gKiBuZXZlciBiZSBzdXBwb3J0ZWQuXG4gKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBlbmRzIHdpdGhcbiAqIC0gdGVtcGxhdGUuanNcbiAqIC0gdGVtcGxhdGUuaGJzXG4gKiAtIHN0eWxlcy5jc3NcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9kKGZpbGVQYXRoKSB7XG4gIGlmIChmaWxlUGF0aC5pbmNsdWRlcygnL2NvbXBvbmVudHMvJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNQb2RUZW1wbGF0ZShmaWxlUGF0aCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmaWxlUGF0aC5lbmRzV2l0aCgnc3R5bGVzLmNzcycpO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqIEByZXR1cm5zIHRoZSBzYW1lIHBhdGgsIGJ1dCB3aXRob3V0IHRoZSBleHRlbnNpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhvdXRFeHRlbnNpb24oZmlsZVBhdGgpIHtcbiAgbGV0IHBhcnNlZCA9IHBhdGgucGFyc2UoZmlsZVBhdGgpO1xuXG4gIHJldHVybiBwYXRoLmpvaW4ocGFyc2VkLmRpciwgcGFyc2VkLm5hbWUpO1xufVxuXG4vKipcbiAqIEV4YW1wbGVzIGZvciBmaWxlTmFtZVxuICogLSBhYnNvbHV0ZSBvbi1kaXNrIHBhdGhcbiAqIC0gaW4gd2VicGFja1xuICogICAtIFVSTC1hYnNvbHV0ZSBwYXRoLCBzdGFydGluZyB3aXRoIC9cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWVcbiAqIEBwYXJhbSB7eyBhZGRpdGlvbmFsUm9vdHM/OiBzdHJpbmdbXTsgY3dkOiBzdHJpbmcgfX0gb3B0aW9uc1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVsZXZhbnRGaWxlKGZpbGVOYW1lLCB7IGFkZGl0aW9uYWxSb290cywgY3dkIH0pIHtcbiAgLy8gUHJpdmF0ZSBWaXJ0dWFsIE1vZHVsZXNcbiAgaWYgKGZpbGVOYW1lLnN0YXJ0c1dpdGgoJ1xcMCcpKSByZXR1cm4gZmFsc2U7XG4gIC8vIFRoZXNlIGFyZSBub3QgdmFsaWQgdXNlcmxhbmQgbmFtZXMgKG9yIGFyZSBmcm9tIGxpYnJhcmllcylcbiAgaWYgKGZpbGVOYW1lLm1hdGNoKC9eW2EtekEtWl0vKSkgcmV0dXJuIGZhbHNlO1xuICAvLyBFeHRlcm5hbCB0byB1c1xuICBpZiAoZmlsZU5hbWUuc3RhcnRzV2l0aCgnL0BlbWJyb2lkZXInKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoSVJSRUxFVkFOVF9QQVRIUy5zb21lKChpKSA9PiBmaWxlTmFtZS5pbmNsdWRlcyhpKSkpIHJldHVybiBmYWxzZTtcblxuICBpZiAoZmlsZU5hbWUuaW5jbHVkZXMoJy9ub2RlX21vZHVsZXMvJykpIHtcbiAgICAvLyBpZiBhIGZpbGUgaXMgbm90IHRoZSBlbWJyb2lkZXIgY2FjaGUgZGlyZWN0b3J5XG4gICAgLy8gYW5kIGlzIGluIG5vZGVfbW9kdWxlcywgc2tpcCBpdC5cbiAgICBpZiAoIWZpbGVOYW1lLmluY2x1ZGVzKEVNQlJPSURFUl9ESVIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gcmV3cml0dGVuIHBhY2thZ2VzIHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQgYXQgdGhlaXIgb3duXG4gICAgLy8gcHVibGlzaCB0aW1lXG4gICAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKEVNQlJPSURFUl8zX1JFV1JJVFRFTl9QQUNLQUdFUykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGVzZSBhcmUgYWxyZWFkeSB0aGUgYnVuZGxlZCBmaWxlcy5cbiAgICBpZiAoZmlsZU5hbWUuaW5jbHVkZXMoRU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9BU1NFVFMpKSB7XG4gICAgICAvLyBub3Qgc3VwcG9ydGVkLCBuZXZlciB3aWxsIGJlXG4gICAgICBpZiAoZmlsZU5hbWUuZW5kc1dpdGgoYCR7RU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9BU1NFVFN9L3Rlc3RzLmpzYCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBJZGVhbGx5LCB3ZSBuZXZlciBnZXQgaGVyZSAtLSBpbmRpY2F0ZXMgd2UncmUgbm90IGZpbHRlcmluZyBlZmZlY3RpdmVseSBpbiBiYWJlbFxuICAgICAgLy8gTk9URTogaWYgd2UgZ2V0IGhlcmUsIHdlJ3JlIHRyeWluZyB0byBvcGVyYXRlIG9uIGEgZmlsZSB0b28gbGF0ZS5cbiAgICAgIC8vICAgICAgIHdlIG5lZWQgU2NvcGVkQ1NTIHRvIG9wZXJhdGUgYXMgY2xvc2UgdG8gb3JpZ2luYWwgc291cmNlIGFzIHBvc3NpYmxlIC0tIG5vdCBvdXRwdXQgZmlsZXMuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgbGV0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKGZpbGVOYW1lKTtcblxuICBhc3NlcnQoY3dkLCBgY3dkIHdhcyBub3QgcGFzc2VkIHRvIGlzUmVsZXZhbnRGaWxlYCk7XG5cbiAgbGV0IG91cldvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKGN3ZCk7XG5cbiAgaWYgKHdvcmtzcGFjZSAhPT0gb3VyV29ya3NwYWNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbGV0IGxvY2FsID0gZmlsZU5hbWUucmVwbGFjZSh3b3Jrc3BhY2UsICcnKTtcbiAgbGV0IFssIC4uLnBhcnRzXSA9IGxvY2FsLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pO1xuXG4gIGlmIChVTlNVUFBPUlRFRF9ESVJFQ1RPUklFUy5oYXMocGFydHNbMF0pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vc3RseSBwb2RzIHN1cHBvcnQuXG4gICAqIGZvbGtzIG5lZWQgdG8gb3B0IGluIHRvIHBvZHMgKHJvdXRlcyksIGJlY2F1c2UgZXZlcnkgcG9kcyBhcHAgY2FuIGJlIGNvbmZpZ3VyZWQgZGlmZmVyZW50bHlcbiAgICovXG4gIGxldCByb290cyA9IFsnL2NvbXBvbmVudHMvJywgJy90ZW1wbGF0ZXMvJywgLi4uKGFkZGl0aW9uYWxSb290cyB8fCBbXSldO1xuXG4gIGlmICghcm9vdHMuc29tZSgocm9vdCkgPT4gZmlsZU5hbWUuaW5jbHVkZXMocm9vdCkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlU2NvcGVkUGF0aCkge1xuICAvKipcbiAgICogKkJ5IGNvbnZlbnRpb24qLCBgc3JjYCBpcyBvbWl0dGVkIGZyb20gY29tcG9uZW50IHBhdGhzLlxuICAgKiBXZSBjYW4gcmVmbGVjdCB0aGUgc2FtZSBiZWhhdmlvciBieSByZXBsYWNpbmcgc3JjL1xuICAgKiB3aXRoIGFuIGVtcHR5IHN0cmluZy5cbiAgICpcbiAgICogQ1NTIGlzbid0IGVtaXR0ZWQgYXMgYSBjby1sb2NhdGVkIG1vZHVsZSwgYnV0XG4gICAqIHRvIGtlZXAgY29udmVudGlvbnMgY29uc2lzdGVudCBhY3Jvc3MgbGFuZ3VhZ2VzLFxuICAgKiB3ZSBjYW4gcHJldGVuZCBpdCBpcy5cbiAgICpcbiAgICogQW55IGN1c3RvbWl6YXRpb24gYmV5b25kIHJlbW92aW5nIGBzcmNgIGFuZCBgYXBwYCBpcyBwb3RlbnRpYWxseSBjb25mdXNpbmcuXG4gICAqIElmIHdlIG5lZWQgZnVydGhlciBjdXN0b21pemF0aW9ucywgd2UnbGwgd2FudCB0byBtYXRjaCBvbiBgZXhwb3J0c2AgaW4gdGhlXG4gICAqIGNvcnJlc3BvbmRpbmcgcGFja2FnZS5qc29uXG4gICAqL1xuICBsZXQgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVNjb3BlZFBhdGgucmVwbGFjZSgvXlxcL3NyY1xcLy8sICcvJyk7XG5cbiAgbGV0IHBhcnNlZCA9IHBhdGgucGFyc2UocGFja2FnZVJlbGF0aXZlKTtcblxuICBpZiAoaXNQb2QocGFja2FnZVJlbGF0aXZlKSkge1xuICAgIC8qKlxuICAgICAqIEZvciBwb2RzLCB3ZSBjaG9wIG9mZiB0aGUgd2hvbGUgZmlsZSwgYW5kIHVzZSB0aGUgZGlyIG5hbWUgYXMgdGhlIFwibW9kdWxlUGF0aFwiXG4gICAgICovXG4gICAgcmV0dXJuIHBhcnNlZC5kaXI7XG4gIH1cblxuICAvKipcbiAgICogSWYgYW4gZXh0ZW5zaW9uIGlzIHBhc3NlZCwgcmVtb3ZlIGl0LlxuICAgKiBXaGVuIHVzaW5nIHBhY2thZ2VycywgZm9sa3MgYXJlIHVzZWQgdG8gbm90IGhhdmluZyB0byBzcGVjaWZ5IGV4dGVuc2lvbnMgZm9yIGZpbGVzLlxuICAgKiBTaW5jZSB3ZSBkb24ndCBldmVuIGVtaXQgY3NzIGZpbGVzIGNvLWxvY2F0ZWQgdG8gZWFjaCBtb2R1bGUsXG4gICAqIHRoaXMgaGVscHMgdXMgbm90IGNvbnZleSBhIGxpZSB0aGF0IGEgZmlsZSBtYXkgZXhpc3QgaW4gYXQgcnVudGltZS5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUgYDxtb2R1bGUtbmFtZT4vY29tcG9uZW50cy9idXR0b25gLlxuICAgKiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBleHRlbnNpb24gaXMsIGJlY2F1c2UgeW91IGNhbiBvbmx5IGhhdmUgb25lIGNzcyBmaWxlXG4gICAqIGZvciB0aGUgYnV0dG9uIG1vZHVsZSBhbnl3YXkuXG4gICAqL1xuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhdGguam9pbihwYXJzZWQuZGlyLCBwYXJzZWQubmFtZSk7XG5cbiAgcmV0dXJuIGxvY2FsUGFja2FnZXJTdHlsZVBhdGg7XG59XG5cbi8qKlxuICogcmV0dXJucyB0aGUgYXBwLW1vZHVsZSBwYXRoIG9mIHRoZSBzb3VyY2UgZmlsZVxuICpcbiAqIFRoaXMgYXNzdW1lcyBub3JtYWwgZW1iZXIgYXBwIGNvbnZlbnRpb25zXG4gKlxuICogd2hpY2ggaXMgYDxwYWNrYWdlLmpzb24jbmFtZT4vcGF0aC10by1maWxlYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwUGF0aChzb3VyY2VQYXRoKSB7XG4gIGxldCB3b3Jrc3BhY2VQYXRoID0gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCk7XG4gIGxldCBuYW1lID0gbW9kdWxlTmFtZShzb3VyY2VQYXRoKTtcblxuICAvKipcbiAgICogIFVuZGVyIGVtYnJvaWRlciBidWlsZHMsIHRoZSBzcGVjLWNvbXBsaWFudCB2ZXJzaW9uIG9mIHRoZSBhcHBcbiAgICogaGFzIGFsbCB0aGUgZmlsZXMgdW5kZXIgYSBmb2xkZXIgd2hpY2ggcmVwcmVzZW50cyB0aGUgcGFja2FnZSBuYW1lLFxuICAgKiByYXRoZXIgdGhhbiBcImFwcFwiLlxuICAgKi9cbiAgbGV0IHBhY2thZ2VSZWxhdGl2ZSA9IHNvdXJjZVBhdGgucmVwbGFjZSh3b3Jrc3BhY2VQYXRoLCAnJyk7XG5cbiAgLyoqXG4gICAqIEJ1dCB3ZSBhbHNvIGRvbid0IHdhbnQgJ2FwcCcgLS0gd2hpY2ggaXMgcHJlc2VudCBpbiB0aGUgdjEgYWRkb24gcGlwZWxpbmVcbiAgICovXG4gIHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VSZWxhdGl2ZS5yZXBsYWNlKGAvYXBwL2AsIGAvYCk7XG5cbiAgLyoqXG4gICAqIGFsc28gYWxzbywgd2Uga25vdyB0aGF0IHRoZSByZS13cml0dGVuIGFwcCBzdHJ1Y3R1cmUgaW4gZW1icm9pZGVyQHYzXG4gICAqIGlzIGV4dHJhbmVvdXMsIGFuZCB3ZSBjYW4gY29sbGFwc2UgaXRcbiAgICovXG4gIHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VSZWxhdGl2ZS5yZXBsYWNlKFxuICAgIGAke0VNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfUEFUSH0vYCxcbiAgICAnLycsXG4gICk7XG5cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlUmVsYXRpdmUpO1xuXG4gIHJldHVybiBgJHtuYW1lfSR7bG9jYWxQYWNrYWdlclN0eWxlUGF0aH1gO1xufVxuXG4vKipcbiAqIFRvIGF2b2lkIGhpdHRpbmcgdGhlIGZpbGVzeXNldG0sIHdlJ2xsIHN0b3JlIGFsbCBmb3VuZFxuICogcHJvamVjdCBwYXRocyBiZXJlLCBzbyB3ZSBjYW4sIGluIG1lbW9yeSxcbiAqIGdldCB0aGUgZm9sZGVyIHdoZXJlIGEgcGFja2FnZS5qc29uIGV4aXN0cywgcmF0aGVyIHRoYW5cbiAqIGhpdCB0aGUgZmlsZSBzeXN0ZW0gZXZlcnkgdGltZS5cbiAqL1xuY29uc3QgU0VFTiA9IG5ldyBTZXQoKTtcblxuZnVuY3Rpb24gZ2V0U2Vlbihzb3VyY2VQYXRoKSB7XG4gIGlmIChTRUVOLmhhcyhzb3VyY2VQYXRoKSkgcmV0dXJuIHNvdXJjZVBhdGg7XG5cbiAgbGV0IHBhcnRzID0gc291cmNlUGF0aC5zcGxpdCgnLycpO1xuXG4gIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID4gMTsgaS0tKSB7XG4gICAgbGV0IHRvQ2hlY2sgPSBwYXJ0cy5zbGljZSgwLCBpKS5qb2luKCcvJyk7XG5cbiAgICBsZXQgc2VlbiA9IFNFRU4uaGFzKHRvQ2hlY2spO1xuXG4gICAgaWYgKHNlZW4pIHtcbiAgICAgIHJldHVybiB0b0NoZWNrO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCwgb3B0aW9ucykge1xuICBsZXQgY3dkID0gb3B0aW9ucz8uY3dkID8/IENXRDtcblxuICBpZiAoc291cmNlUGF0aC5pbmNsdWRlcyhFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEgpKSB7XG4gICAgc291cmNlUGF0aCA9IHNvdXJjZVBhdGguc3BsaXQoRU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9QQVRIKVswXTtcbiAgfVxuXG4gIGlmIChzb3VyY2VQYXRoLmVuZHNXaXRoKCcvJykpIHtcbiAgICBzb3VyY2VQYXRoID0gc291cmNlUGF0aC5yZXBsYWNlKC9cXC8kLywgJycpO1xuICB9XG5cbiAgbGV0IHNlZW4gPSBnZXRTZWVuKHNvdXJjZVBhdGgpO1xuXG4gIGlmIChzZWVuKSB7XG4gICAgcmV0dXJuIHNlZW47XG4gIH1cblxuICBsZXQgY2FuZGlkYXRlUGF0aCA9IHBhdGguam9pbihzb3VyY2VQYXRoLCAncGFja2FnZS5qc29uJyk7XG5cbiAgY29uc3QgaXNXb3Jrc3BhY2UgPSBmc1N5bmMuZXhpc3RzU3luYyhjYW5kaWRhdGVQYXRoKTtcblxuICBpZiAoaXNXb3Jrc3BhY2UpIHtcbiAgICByZXR1cm4gc291cmNlUGF0aDtcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IGZpbmRQYWNrYWdlSnNvblVwKHNvdXJjZVBhdGgsIHsgY3dkIH0pO1xuXG4gIGlmICghcGFja2FnZUpzb25QYXRoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZGV0ZXJtaW5lIHByb2plY3QgZm9yICR7c291cmNlUGF0aH1gKTtcbiAgfVxuXG4gIGNvbnN0IHdvcmtzcGFjZVBhdGggPSBwYXRoLmRpcm5hbWUocGFja2FnZUpzb25QYXRoKTtcblxuICBTRUVOLmFkZCh3b3Jrc3BhY2VQYXRoKTtcblxuICByZXR1cm4gd29ya3NwYWNlUGF0aDtcbn1cblxuZnVuY3Rpb24gZmluZFBhY2thZ2VKc29uVXAoc3RhcnRQYXRoLCBvcHRpb25zKSB7XG4gIGxldCBjd2QgPSBvcHRpb25zPy5jd2QgPz8gQ1dEO1xuICBsZXQgcGFydHMgPSBzdGFydFBhdGguc3BsaXQoJy8nKTtcblxuICBmb3IgKGxldCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+IDE7IGktLSkge1xuICAgIGxldCB0b0NoZWNrID0gcGFydHMuc2xpY2UoMCwgaSkuam9pbignLycpO1xuXG4gICAgbGV0IHBhY2thZ2VKc29uID0gcGF0aC5qb2luKHRvQ2hlY2ssICdwYWNrYWdlLmpzb24nKTtcbiAgICBsZXQgZXhpc3RzID0gZnNTeW5jLmV4aXN0c1N5bmMocGFja2FnZUpzb24pO1xuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgcmV0dXJuIHBhY2thZ2VKc29uO1xuICAgIH1cblxuICAgIC8vIERvbid0IHRyYXZlcnNlIGFsbCB0aGUgd2F5IHRvIHRoZSByb290IG9mIHRoZSBmaWxlIHN5c3RlbS5cbiAgICBpZiAodG9DaGVjayA9PT0gY3dkKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgTUFOSUZFU1RfQ0FDSEUgPSBuZXcgTWFwKCk7XG5cbi8qKlxuICogV2lsbCByZXR1cm4gdGhlIHBhY2thZ2UuanNvbiNuYW1lLCBvciBjb25maWcvZW52aXJvbm1lbnQjbW91ZGxlUHJlZml4IChpZiB2MSBhcHApXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZHVsZU5hbWUoc291cmNlUGF0aCkge1xuICBjb25zdCB3b3Jrc3BhY2UgPSBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKTtcbiAgY29uc3QgbWFuaWZlc3QgPSBnZXRNYW5pZmVzdCh3b3Jrc3BhY2UpO1xuXG4gIGlmIChtYW5pZmVzdFsnZW1iZXItYWRkb24nXSkge1xuICAgIC8qKlxuICAgICAqIExpYnJhcmllcyBhcmUgbm90IGFsbG93ZWQgdG8gY3VzdG9taXplIHRoZWlyIG1vZHVsZSBuYW1lXG4gICAgICogdG8gYmUgZGlmZmVyZW50IGZyb20gdGhlaXIgcGFja2FnZSBuYW1lLlxuICAgICAqXG4gICAgICogKEl0J3MgYWxzbyBib25rZXJzIHRoYXQgdGhpcyBpcyBhbGxvd2VkIGZvciB2MSBhcHBzKVxuICAgICAqL1xuICAgIHJldHVybiBtYW5pZmVzdC5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvciB2MSBhcHBzLCB3ZSBuZWVkIHRvIHJlZmVyZW5jZSB0aGUgY29uZmlnL2Vudmlyb25tZW50LmpzIGZpbGVcbiAgICogdG8gc2VlIGlmIHRoZSBtb2R1bGVQcmVmaXggc2V0dGluZyBkaWZmZXJzIGZyb20gbWFuaWZlc3QubmFtZTtcbiAgICovXG4gIGxldCBlbnZpcm9ubWVudEpTID0gcGF0aC5qb2luKHdvcmtzcGFjZSwgJ2NvbmZpZy9lbnZpcm9ubWVudC5qcycpO1xuXG4gIC8qKlxuICAgKiBOT1RFOiB0aGUgZW52aXJvbm1lbnQuanMgaXMgYSBjb21tb25KUyBmaWxlLCBzbyB3ZSBjYW4gc3luY2hyb25vdXNseSByZXF1aXJlIGl0XG4gICAqXG4gICAqIFRPRE86IGlmIHdlIGhhdmUgaXNzdWVzIHdpdGggbG9hZGluZyB0aGlzIGZpbGUgbGF0ZXIgd2Ugc2hvdWxkIHByb2JhYmx5IGp1c3QgcnVuIGpzY29kZXNoaWZ0IG9uIGl0XG4gICAqICAgICAgIGJ1dCB0aGF0IGNvdWxkIGFsbG93IHVzIHRvIGJlIGJyaXR0bGUgaW4gZGlmZmVyZW50IHdheXMsIGxpa2UgaWYgZm9sa3Mgc3RyYXkgZnJvbSB0aGUgd2F5IHRoZVxuICAgKiAgICAgICBmaWxlIGlzIGxhaWQgb3V0IGZyb20gdGhlIGJsdWVwcmludCBkZWZhdWx0cy5cbiAgICovXG4gIGlmIChmc1N5bmMuZXhpc3RzU3luYyhlbnZpcm9ubWVudEpTKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZiAtLSB0aGlzIGV4aXN0c1xuICAgIGNvbnN0IGVudkZuID0gb3VyUmVxdWlyZShlbnZpcm9ubWVudEpTKTtcbiAgICBjb25zdCBlbnYgPSBlbnZGbignZW1iZXItc2NvcGVkLWNzcycpO1xuXG4gICAgcmV0dXJuIGVudi5tb2R1bGVQcmVmaXggfHwgbWFuaWZlc3QubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWxsYmFjayB0byB0aGUgdHJ1ZVx1MjEyMiBtb2R1bGVcdTIxMjIgbmFtZS5cbiAgICovXG4gIHJldHVybiBtYW5pZmVzdC5uYW1lO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB3b3Jrc3BhY2VcbiAqL1xuZnVuY3Rpb24gZ2V0TWFuaWZlc3Qod29ya3NwYWNlKSB7XG4gIGxldCBleGlzdGluZyA9IE1BTklGRVNUX0NBQ0hFLmdldCh3b3Jrc3BhY2UpO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIHJldHVybiBleGlzdGluZztcbiAgfVxuXG4gIGxldCBidWZmZXIgPSBmc1N5bmMucmVhZEZpbGVTeW5jKHBhdGguam9pbih3b3Jrc3BhY2UsICdwYWNrYWdlLmpzb24nKSk7XG4gIGxldCBjb250ZW50ID0gYnVmZmVyLnRvU3RyaW5nKCk7XG4gIGxldCBqc29uID0gSlNPTi5wYXJzZShjb250ZW50KTtcblxuICBNQU5JRkVTVF9DQUNIRS5zZXQod29ya3NwYWNlLCBqc29uKTtcblxuICByZXR1cm4ganNvbjtcbn1cbiIsICJpbXBvcnQgbWQ1IGZyb20gJ2JsdWVpbXAtbWQ1JztcblxuLyoqXG4gKiBUaGUgaW50ZW50IG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gZ2VuZXJhdGUgdGhlIHN1ZmZpeC9wb3N0Zml4IGZvciB0aGVcbiAqIGNzcyBjbGFzc2VzLCBiYXNlZCBvbiB0aGUgbW9kdWxlLXNjb3BlZCBwYXRoIG5hbWUuXG4gKlxuICogZm9yIGV4YW1wbGUsXG4gKiAgICBoYXNoKCdteS1hcHAvY29tcG9uZW50cy9mb28nKVxuICogIGluc3RlYWQgb2ZcbiAqICAgIGhhc2goJ2FwcC9jb21wb25lbnRzL2ZvbycpXG4gKlxuICogICh1bmxlc3MgeW91ciBhcHAgbmFtZSBpcyAnYXBwJylcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlUGF0aFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2gobW9kdWxlUGF0aCkge1xuICByZXR1cm4gJ2UnICsgbWQ1KG1vZHVsZVBhdGgpLnN1YnN0cmluZygwLCA4KTtcbn1cblxuXG5leHBvcnQgY29uc3QgaGFzaEZyb21Nb2R1bGVQYXRoID0gaGFzaDtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSwrQkFB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
|