New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@matter/tools

Package Overview
Dependencies
Maintainers
0
Versions
100
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@matter/tools - npm Package Compare versions

Comparing version 0.12.0-alpha.0-20241219-af74a6a14 to 0.12.0-alpha.0-20241220-ad0dea627

dist/cjs/util/glob.d.ts

2

dist/cjs/building/docs.js

@@ -34,3 +34,3 @@ "use strict";

*/
const PLUGINS = ["typedoc-material-theme"];
const PLUGINS = ["typedoc-github-theme"];
const OUTPUT_PATH = "build/docs/docs";

@@ -37,0 +37,0 @@ const THEME_OPTIONS = {

@@ -12,4 +12,5 @@ /**

export * from "./util/file.js";
export * from "./util/glob.js";
export * from "./util/package.js";
export * from "./util/progress.js";
//# sourceMappingURL=index.d.ts.map

@@ -24,2 +24,3 @@ "use strict";

__reExport(src_exports, require("./util/file.js"), module.exports);
__reExport(src_exports, require("./util/glob.js"), module.exports);
__reExport(src_exports, require("./util/package.js"), module.exports);

@@ -26,0 +27,0 @@ __reExport(src_exports, require("./util/progress.js"), module.exports);

@@ -9,7 +9,19 @@ /**

export declare function maybeReaddirSync(path: string): string[] | undefined;
export declare class GlobError extends Error {
}
export declare function globSync(pattern: string | string[]): string[];
export declare function isDirectory(path: string): boolean;
export declare function isFile(path: string): boolean;
/**
* Tiny virtual filesystem driver. Currently used only for processing globs.
*/
export interface FilesystemSync<T extends FilesystemSync.Stat = FilesystemSync.Stat> {
resolve(...segments: string[]): string;
readdir(path: string): string[] | undefined;
stat(path: string): T | undefined;
}
export declare function FilesystemSync(): FilesystemSync<FilesystemSync.Stat>;
export declare namespace FilesystemSync {
interface Stat {
isDirectory?: boolean;
isFile?: boolean;
}
}
//# sourceMappingURL=file.d.ts.map

@@ -21,4 +21,3 @@ "use strict";

__export(file_exports, {
GlobError: () => GlobError,
globSync: () => globSync,
FilesystemSync: () => FilesystemSync,
isDirectory: () => isDirectory,

@@ -32,3 +31,2 @@ isFile: () => isFile,

var import_fs = require("fs");
var import_minimatch = require("minimatch");
var import_path = require("path");

@@ -77,81 +75,2 @@ var import_errors = require("./errors.js");

}
class GlobError extends Error {
}
function globSync(pattern) {
if (typeof pattern === "string") {
return [...globOneSync(pattern)];
}
const result = Array();
for (const p of pattern) {
result.push(...globOneSync(p));
}
return result;
}
function globOneSync(pattern) {
const mm = new import_minimatch.Minimatch(pattern.replace(/\\/g, "/"), {});
const results = /* @__PURE__ */ new Set();
for (const part of mm.set) {
for (const path of globOnePartSync(mm, part)) {
results.add(path);
}
}
return results;
}
function globOnePartSync(mm, segments) {
let rootPath = "";
let didOne = false;
while (typeof segments[0] === "string") {
if (didOne) {
rootPath += "/";
} else {
didOne = true;
}
rootPath += segments.shift();
}
if (!segments.length) {
const stat = maybeStatSync(rootPath);
if (stat?.[rootPath.endsWith("/") ? "isDirectory" : "isFile"]()) {
return [rootPath];
}
return [];
}
const results = /* @__PURE__ */ new Set();
function match(path, segments2) {
if (!segments2.length) {
results.add(path);
return;
}
if (typeof segments2[0] === "string") {
const subpath = (0, import_path.resolve)(path, segments2[0]);
if (maybeStatSync((0, import_path.resolve)(path, segments2[0]))) {
match(subpath, segments2.slice(1));
return;
}
}
if (segments2.length === 1 && segments2[0] === import_minimatch.GLOBSTAR) {
results.add(path);
}
const subnames = maybeReaddirSync(path);
if (!subnames) {
return;
}
for (const subname of subnames) {
const subpath = (0, import_path.resolve)(path, subname);
if (segments2[0] !== import_minimatch.GLOBSTAR) {
if (mm.matchOne([subname], segments2, true)) {
match(subpath, segments2.slice(1));
}
continue;
}
if (segments2.length > 1) {
if (mm.matchOne([subname], segments2.slice(1), true)) {
match(subpath, segments2.slice(2));
}
}
match(subpath, segments2);
}
}
match(rootPath, segments);
return results;
}
function isDirectory(path) {

@@ -163,2 +82,25 @@ return !!(0, import_errors.ignoreErrorSync)("ENOENT", () => (0, import_fs.statSync)(path).isDirectory());

}
function FilesystemSync() {
return {
resolve(...segments) {
return (0, import_path.resolve)(...segments);
},
readdir(path) {
return maybeReaddirSync(path);
},
stat(path) {
const stats = maybeStatSync(path);
if (stats) {
return {
get isFile() {
return stats.isFile();
},
get isDirectory() {
return stats.isDirectory();
}
};
}
}
};
}
//# sourceMappingURL=file.js.map

@@ -9,3 +9,4 @@ /**

export * from "./file.js";
export * from "./glob.js";
export * from "./package.js";
//# sourceMappingURL=index.d.ts.map

@@ -21,2 +21,3 @@ "use strict";

__reExport(util_exports, require("./file.js"), module.exports);
__reExport(util_exports, require("./glob.js"), module.exports);
__reExport(util_exports, require("./package.js"), module.exports);

@@ -23,0 +24,0 @@ /**

@@ -32,2 +32,3 @@ "use strict";

var import_file = require("./file.js");
var import_glob = require("./glob.js");
var import_progress = require("./progress.js");

@@ -125,3 +126,3 @@ var import_tools_path = require("./tools-path.cjs");

}
return (0, import_file.globSync)(pattern);
return (0, import_glob.globSync)(pattern);
}

@@ -410,3 +411,3 @@ start(what) {

name = name.substring(0, name.length - 2);
const paths = (0, import_file.globSync)(source ? path.replace(/\.js$/, ".{ts,js,cjs,mjs}") : path);
const paths = (0, import_glob.globSync)(source ? path.replace(/\.js$/, ".{ts,js,cjs,mjs}") : path);
if (!paths.length) {

@@ -413,0 +414,0 @@ throw new Error(`No match for module ${name} pattern ${pattern}`);

@@ -18,3 +18,3 @@ /**

import { Graph } from "./graph.js";
const PLUGINS = ["typedoc-material-theme"];
const PLUGINS = ["typedoc-github-theme"];
const OUTPUT_PATH = "build/docs/docs";

@@ -238,2 +238,2 @@ const THEME_OPTIONS = {

};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1aWxkaW5nL2RvY3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyLTIwMjQgTWF0dGVyLmpzIEF1dGhvcnNcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHsgcmVsYXRpdmUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHtcbiAgICBBcHBsaWNhdGlvbixcbiAgICBDb250YWluZXJSZWZsZWN0aW9uLFxuICAgIENvbnZlcnRlcixcbiAgICBEZWNsYXJhdGlvblJlZmxlY3Rpb24sXG4gICAgTG9nTGV2ZWwsXG4gICAgUmVmbGVjdGlvbixcbiAgICBSZWZsZWN0aW9uRmxhZyxcbiAgICBSZWZsZWN0aW9uS2luZCxcbiAgICBUeXBlRG9jT3B0aW9ucyxcbn0gZnJvbSBcInR5cGVkb2NcIjtcbmltcG9ydCB7IGlzRmlsZSB9IGZyb20gXCIuLi91dGlsL2ZpbGUuanNcIjtcbmltcG9ydCB7IFBhY2thZ2UgfSBmcm9tIFwiLi4vdXRpbC9wYWNrYWdlLmpzXCI7XG5pbXBvcnQgeyBQcm9ncmVzcyB9IGZyb20gXCIuLi91dGlsL3Byb2dyZXNzLmpzXCI7XG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gXCIuL2dyYXBoLmpzXCI7XG5cbi8vIE5PVEUgLSB0aGlzIGlzIGEgXCJiZXN0IGF0dGVtcHRcIiBhdCBkb2MgZ2VuZXJhdGlvbiB2aWEgdHlwZXNjcmlwdC4gIFRoZSByZXN1bHQgaXMgbm90IGFsbCB0aGF0IGdyZWF0OyB0eXBlZG9jIGlzIHRvb1xuLy8gbGltaXRlZCBmb3Igb3VyIGNvbXBsZXggQVBJIHNvIHdlJ3JlIGdvaW5nIHRvIG5lZWQgc29tZXRoaW5nIGN1c3RvbSB0byBkbyBpdCByaWdodFxuXG5jb25zdCBQTFVHSU5TID0gW1widHlwZWRvYy1tYXRlcmlhbC10aGVtZVwiXSBhcyBzdHJpbmdbXTtcblxuLy8gRG91YmxlIFwiZG9jc1wiIGRpcmVjdG9yaWVzIHNvIHRvcC1sZXZlbCBkaXJlY3RvcnkgY2FuIGJlIGEgR0ggcmVwb3NpdG9yeSB3aXRoIHBhZ2VzIGNvbmZpZ3VyZWQgdW5kZXIgXCJkb2NzXCJcbmNvbnN0IE9VVFBVVF9QQVRIID0gXCJidWlsZC9kb2NzL2RvY3NcIjtcblxuY29uc3QgVEhFTUVfT1BUSU9OUyA9IHtcbiAgICB0aGVtZUNvbG9yOiBcIiNjYjk4MjBcIixcblxuICAgIC8vIFRPRE8gLSBhZGQgc2VydmljZSBsaW5rc1xuICAgIC8vICAgR2l0SHViOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9wcm9qZWN0LWNoaXAvbWF0dGVyLmpzXCIsXG4gICAgLy8gICBEaXNjb3JkOiBcImh0dHBzOi8vZGlzY29yZC5nZy91am1STnJoRHVXXCIsXG4gICAgLy8gICBOUE06IFwiaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQHByb2plY3QtY2hpcC9tYXR0ZXIuanNcIixcbn07XG5cbi8qKlxuICogR2VuZXJhdGUgYnVpbGQvZG9jcy5qc29uIGZvciBhIHNpbmdsZSBwcm9qZWN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGREb2NzKHBrZzogUGFja2FnZSwgcHJvZ3Jlc3M6IFByb2dyZXNzKSB7XG4gICAgY29uc3QgbW9kdWxlcyA9IHBrZy5zb3VyY2VNb2R1bGVzO1xuXG4gICAgLy8gV2UgcG9pbnQgdHlwZWRvYyBhdCBlYWNoIG9mIG91ciBwdWJsaWMgZXhwb3J0c1xuICAgIGNvbnN0IGVudHJ5UG9pbnRzID0gQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgLy8gSW4gYSB3b3Jrc3BhY2UgdHlwZWRvYyByZXF1aXJlcyBmaWxlcyB0byBiZSByZWxhdGl2ZSB0byB0aGUgd29ya3NwYWNlIGZvciBtZXJnZVxuICAgIGNvbnN0IGJhc2VQYXRoID0gcGtnLnJvb3QucGF0aDtcblxuICAgIGZvciAoY29uc3QgbmFtZSBpbiBtb2R1bGVzKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBtb2R1bGVzW25hbWVdO1xuICAgICAgICBpZiAocGF0aC5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0ZpbGUocGF0aCkpIHtcbiAgICAgICAgICAgIGlmICghZW50cnlQb2ludHMuaW5jbHVkZXMocGF0aCkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeVBvaW50cy5wdXNoKHBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzb3VyY2UgZm91bmQgZm9yIG1vZHVsZSAke25hbWV9IHBhdGggJHttb2R1bGVzW25hbWVdfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYXBwID0gYXdhaXQgY3JlYXRlQXBwbGljYXRpb24oe1xuICAgICAgICBleGNsdWRlRXh0ZXJuYWxzOiB0cnVlLFxuICAgICAgICBlbnRyeVBvaW50cyxcbiAgICAgICAgdHNjb25maWc6IHBrZy5yZXNvbHZlKFwidHNjb25maWcuanNvblwiKSxcbiAgICAgICAgYmFzZVBhdGgsXG4gICAgICAgIHNraXBFcnJvckNoZWNraW5nOiB0cnVlLFxuXG4gICAgICAgIC8vIFJlbW92ZXMgYSBjb3VwbGUgaHVuZHJlZCBNQiBvZiB0YWJzIHNvIHdvcnRoIHVuY29tbWVudGluZyBhdCBzb21lIHBvaW50XG4gICAgICAgIC8vcHJldHR5OiBmYWxzZSxcblxuICAgICAgICByZWFkbWU6IFwibm9uZVwiLFxuICAgIH0pO1xuXG4gICAgaW5zdHJ1bWVudEZvckVudHJ5cG9pbnRSZXBhaXIoYXBwLCBwa2cpO1xuXG4gICAgY29uc3QgYW5hbHlzaXMgPSBuZXcgUmVmbGVjdGlvbkFuYWx5c2lzKCk7XG5cbiAgICBhcHAuY29udmVydGVyLm9uKENvbnZlcnRlci5FVkVOVF9DUkVBVEVfREVDTEFSQVRJT04sICgvKl9jb250ZXh0LCByZWZsZWN0aW9uOiBEZWNsYXJhdGlvblJlZmxlY3Rpb24qLykgPT4ge1xuICAgICAgICBwcm9ncmVzcy5yZWZyZXNoKCk7XG4gICAgfSk7XG5cbiAgICBhcHAuY29udmVydGVyLm9uKENvbnZlcnRlci5FVkVOVF9SRVNPTFZFLCAoKSA9PiB7XG4gICAgICAgIHByb2dyZXNzLnJlZnJlc2goKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlZmxlY3Rpb24gPSBhd2FpdCBsb2FkUmVmbGVjdGlvbnMoYXBwLCBwa2cpO1xuXG4gICAgYW5hbHl6ZVJlZmxlY3Rpb25zKHJlZmxlY3Rpb24sIGFuYWx5c2lzKTtcbiAgICByZXBhaXJSZWZsZWN0aW9ucyhhbmFseXNpcyk7XG5cbiAgICBhd2FpdCBhcHAuZ2VuZXJhdGVKc29uKHJlZmxlY3Rpb24sIHBrZy5yZXNvbHZlKFwiYnVpbGQvZG9jcy5qc29uXCIpKTtcbn1cblxuZnVuY3Rpb24gcmVmbGVjdGlvbnNQYXRoKHBrZzogUGFja2FnZSkge1xuICAgIGNvbnN0IHBhdGggPSBwa2cucmVzb2x2ZShcImJ1aWxkL2RvY3MuanNvblwiKTtcbiAgICBpZiAoaXNGaWxlKHBhdGgpKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbn1cblxuLyoqXG4gKiBUeXBlZG9jIGlzIGluc3VmZmljaWVudGx5IGNvbmZpZ3VyYWJsZSB0byBjb3JyZWN0bHkgbmFtZSBtb2R1bGVzLiAgVGhlIG9mZmljaWFsIGRpcmVjdGlvbiBpcyB0byByZW5hbWUgbW9kdWxlcyB1c2luZ1xuICogdGhlIFwibW9kdWxlXCIgYW5ub3RhdGlvbiBidXQgc2VlbXMgZHVtYiB0byBoYXZlIHRvIGRvIHRoYXQgd2hlbiB3ZSBjYW4gY29tcHV0ZSB0aGUgY29ycmVjdCBuYW1lLiAgV2UnZCBoYXZlIHRvIGVkaXRcbiAqIGFuZCBtYWludGFpbiBtYW55IGZpbGVzIGluY2x1ZGluZyBjb2RlZ2VuLlxuICpcbiAqIEluc3RlYWQgd2UgY3JlYXRlIGEgbWFwIG9mIHR5cGVkb2MncyBuYWl2ZSBtb2R1bGUgbmFtZSB0byB0aGUgY29ycmVjdCBuYW1lIHNvIHdlIGNhbiB1cGRhdGUgbmFtZXMgYXMgcmVmbGVjdGlvbnNcbiAqIGxvYWQuXG4gKi9cbmZ1bmN0aW9uIGluc3RydW1lbnRGb3JFbnRyeXBvaW50UmVwYWlyKGFwcDogQXBwbGljYXRpb24sIHBrZzogUGFja2FnZSkge1xuICAgIGNvbnN0IGJhc2VHZXRFbnRyeVBvaW50cyA9IGFwcC5nZXRFbnRyeVBvaW50cy5iaW5kKGFwcCk7XG4gICAgY29uc3QgbWFwcGluZyA9IG5haXZlVG9SZWFsTmFtZXNGb3IocGtnKTtcbiAgICBhcHAuZ2V0RW50cnlQb2ludHMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBiYXNlR2V0RW50cnlQb2ludHMoKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGVwIG9mIGxpc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWxOYW1lID0gbWFwcGluZ1tlcC5kaXNwbGF5TmFtZV07XG4gICAgICAgICAgICBpZiAocmVhbE5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVHlwZWRvYyBuYWl2ZSBtb2R1bGUgbmFtZSBcIiR7ZXAuZGlzcGxheU5hbWV9XCIgaXMgdW5tYXBwZWRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVwLmRpc3BsYXlOYW1lID0gcmVhbE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgbWFwIG9mIHR5cGVkb2MncyBuYWl2ZSBuYW1lIC0+IHJlYWwgbmFtZS5cbiAqL1xuZnVuY3Rpb24gbmFpdmVUb1JlYWxOYW1lc0Zvcihwa2c6IFBhY2thZ2UpIHtcbiAgICBjb25zdCBtb2R1bGVzID0gcGtnLnNvdXJjZU1vZHVsZXM7XG5cbiAgICAvLyBNYXAgb2Ygc3R1cGlkIG5hbWVzIHRoYXQgdHlwZWRvYyBjaG9vc2VzIHRvIGFjdHVhbCBleHBvcnQgbmFtZXNcbiAgICBjb25zdCBtYXBwaW5nID0ge30gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAgIGNvbnN0IHBhY2thZ2VQcmVmaXggPSBgJHtwa2cubmFtZX0vYDtcblxuICAgIC8vIEluIGEgd29ya3NwYWNlIHR5cGVkb2MgcmVxdWlyZXMgZmlsZXMgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHdvcmtzcGFjZSBmb3IgbWVyZ2VcbiAgICBjb25zdCBiYXNlUGF0aCA9IHBrZy5yb290LnBhdGg7XG5cbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gbW9kdWxlcykge1xuICAgICAgICBjb25zdCBwYXRoID0gbW9kdWxlc1tuYW1lXTtcbiAgICAgICAgaWYgKHBhdGguZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuYWl2ZU5hbWUgPSByZWxhdGl2ZShiYXNlUGF0aCwgcGF0aClcbiAgICAgICAgICAgIC5yZXBsYWNlKC8uKD86dHN8anN8bWpzfGNqcykkLywgXCJcIilcblxuICAgICAgICAgICAgLy8gdHlwZWRvYyBzdHJpcHMgXCIvaW5kZXhcIjsgdGhpcyBpcyBoYXJkLWNvZGVkIGFuZCBkb2Vzbid0IHJlc3BlY3QgZXhwb3J0c1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcL2luZGV4JC8sIFwiXCIpO1xuXG4gICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgocGFja2FnZVByZWZpeCkpIHtcbiAgICAgICAgICAgIG1hcHBpbmdbbmFpdmVOYW1lXSA9IG5hbWUuc3Vic3RyaW5nKHBhY2thZ2VQcmVmaXgubGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSBwa2cubmFtZSkge1xuICAgICAgICAgICAgLy8gRmxhZ3MgZm9yIG1lcmdlIHdpdGggcGFyZW50XG4gICAgICAgICAgICBtYXBwaW5nW25haXZlTmFtZV0gPSBcIi5cIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1hcHBpbmdbbmFpdmVOYW1lXSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWFwcGluZztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBzdGF0aWMgZG9jdW1lbnRhdGlvbiB3ZWJzaXRlLlxuICpcbiAqIFN1cHBvcnRzIGluZGl2aWR1YWwgcHJvamVjdHMgb3Igd29ya3NwYWNlcyBidXQgbm90IGluZGl2aWR1YWwgcHJvamVjdHMgd2l0aGluIHdvcmtzcGFjZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtZXJnZURvY3MocGtnOiBQYWNrYWdlKSB7XG4gICAgY29uc3QgZW50cnlQb2ludHMgPSBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBjb25zdCByb290ID0gcGtnLnJvb3Q7XG5cbiAgICBpZiAocm9vdC5pc1dvcmtzcGFjZSkge1xuICAgICAgICAvLyBXb3Jrc3BhY2VcbiAgICAgICAgY29uc3QgZ3JhcGggPSBhd2FpdCBHcmFwaC5sb2FkKHJvb3QpO1xuICAgICAgICBpZiAoZ3JhcGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gU2hvdWxkbid0IGhhcHBlblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnRlcm5hbDogJHtwa2cubmFtZX0gaGFzIHdvcmtzcGFjZXMgYnV0IG5vIGdyYXBoYCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIGdyYXBoLm5vZGVzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gcmVmbGVjdGlvbnNQYXRoKG5vZGUucGtnKTtcbiAgICAgICAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgICAgICAgICAgZW50cnlQb2ludHMucHVzaChwYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVudHJ5UG9pbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyByZWZsZWN0aW9ucyBkZXRlY3RlZCBpbiB3b3Jrc3BhY2UgJHtwa2cubmFtZX1gKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFN0YW5kYWxvbmUgcGFja2FnZVxuICAgICAgICBjb25zdCBwYXRoID0gcmVmbGVjdGlvbnNQYXRoKHBrZyk7XG4gICAgICAgIGlmIChwYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gcmVmbGVjdGlvbnMgcHJlc2VudCBmb3IgJHtwa2cubmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBlbnRyeVBvaW50cy5wdXNoKHBhdGgpO1xuICAgIH1cblxuICAgIGNvbnN0IGFwcCA9IGF3YWl0IGNyZWF0ZUFwcGxpY2F0aW9uKHtcbiAgICAgICAgZW50cnlQb2ludHMsXG4gICAgICAgIGVudHJ5UG9pbnRTdHJhdGVneTogXCJtZXJnZVwiLFxuICAgICAgICAuLi5USEVNRV9PUFRJT05TLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVmbGVjdGlvbiA9IGF3YWl0IGxvYWRSZWZsZWN0aW9ucyhhcHAsIHBrZyk7XG5cbiAgICBhd2FpdCBhcHAuZ2VuZXJhdGVEb2NzKHJlZmxlY3Rpb24sIHBrZy5yZXNvbHZlKE9VVFBVVF9QQVRIKSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgdHlwZWRvYyBcImFwcGxpY2F0aW9uXCIgd2hpY2ggaXMgdGhlIGludGVyZmFjZSBmb3IgZXh0cmFjdGluZyB0eXBlcyBhbmQgZ2VuZXJhdGluZyBkb2NzLlxuICovXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBcHBsaWNhdGlvbihvcHRpb25zOiBQYXJ0aWFsPFR5cGVEb2NPcHRpb25zPikge1xuICAgIHJldHVybiBhd2FpdCBBcHBsaWNhdGlvbi5ib290c3RyYXBXaXRoUGx1Z2lucyh7XG4gICAgICAgIHBsdWdpbjogUExVR0lOUyxcbiAgICAgICAgbG9nTGV2ZWw6IExvZ0xldmVsLldhcm4sXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG59XG5cbi8qKlxuICogUGVyZm9ybSBcImNvbnZlcnNpb25cIiB3aGljaCBpcyB0eXBlZG9jIHRlcm1pbm9sb2d5IGZvciBleGVjdXRpbmcgdGhlIG9wZXJhdGlvbiBkZWZpbmVkIGJ5IHRoZSBhcHBsaWNhdGlvbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbG9hZFJlZmxlY3Rpb25zKGFwcDogQXBwbGljYXRpb24sIHBrZzogUGFja2FnZSkge1xuICAgIGNvbnN0IHJlZmxlY3Rpb24gPSBhd2FpdCBhcHAuY29udmVydCgpO1xuICAgIGlmIChyZWZsZWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9qZWN0ICR7cGtnLnBhdGh9IHByb2R1Y2VkIG5vIGRvY3VtZW50YXRpb25gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZmxlY3Rpb247XG59XG5cbmNsYXNzIFJlZmxlY3Rpb25BbmFseXNpcyB7XG4gICAgLy8gVE9ETyAtIG5lZWQgdG8gcG9wdWxhdGUgdGhpcyBkdXJpbmcgYW5hbHlzaXMgc28gd2UgY2FuIHdhcm47IHdpbGwgcmVwbGFjZSB0eXBlZG9jLXBsdWdpbi1taXNzaW5nLWV4cG9ydHNcbiAgICB1bmV4cG9ydGVkUmVmZXJlbmNlID0gbmV3IFNldDxSZWZsZWN0aW9uPigpO1xuXG4gICAgbWVyZ2VXaXRoUGFyZW50ID0gbmV3IFNldDxEZWNsYXJhdGlvblJlZmxlY3Rpb24+KCk7XG4gICAgbWVyZ2VJbnRvID0gbmV3IE1hcDxEZWNsYXJhdGlvblJlZmxlY3Rpb24sIERlY2xhcmF0aW9uUmVmbGVjdGlvbj4oKTtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gcmVmbGVjdGlvbnMgdG8gaW1wcm92ZSBmaW5hbCBvdXRwdXQuXG4gKi9cbmZ1bmN0aW9uIGFuYWx5emVSZWZsZWN0aW9ucyhub2RlOiBSZWZsZWN0aW9uLCBhbmFseXNpczogUmVmbGVjdGlvbkFuYWx5c2lzKSB7XG4gICAgdmlzaXQobm9kZSwgc3ViamVjdCA9PiB7XG4gICAgICAgIC8vIFRPRE8gLSBwb3B1bGF0ZSBhbmFseXNpcy51bmV4cG9yZWRSZWZlcmVuY2UgKG9yIHBlcmhhcHMganVzdCBwcmludCB3YXJuaW5nKVxuXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gY2hpbGRyZW5PZihzdWJqZWN0KTtcbiAgICAgICAgY29uc3QgbWVyZ2VhYmxlID0ge30gYXMgUmVjb3JkPHN0cmluZywgRGVjbGFyYXRpb25SZWZsZWN0aW9uPjtcbiAgICAgICAgY29uc3QgbmFtZXNwYWNlcyA9IG5ldyBTZXQ8RGVjbGFyYXRpb25SZWZsZWN0aW9uPigpO1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAoY2hpbGQua2luZE9mKFJlZmxlY3Rpb25LaW5kLkNsYXNzT3JJbnRlcmZhY2UgfCBSZWZsZWN0aW9uS2luZC5GdW5jdGlvbikpIHtcbiAgICAgICAgICAgICAgICBtZXJnZWFibGVbY2hpbGQubmFtZV0gPSBjaGlsZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQua2luZE9mKFJlZmxlY3Rpb25LaW5kLk5hbWVzcGFjZSkpIHtcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2VzLmFkZChjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IG5zIG9mIG5hbWVzcGFjZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lcmdlSW50byA9IG1lcmdlYWJsZVtucy5uYW1lXTtcbiAgICAgICAgICAgIGlmIChtZXJnZUludG8pIHtcbiAgICAgICAgICAgICAgICBhbmFseXNpcy5tZXJnZUludG8uc2V0KG5zLCBtZXJnZUludG8pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlcGFpclJlZmxlY3Rpb25zKGFuYWx5c2lzOiBSZWZsZWN0aW9uQW5hbHlzaXMpIHtcbiAgICBmb3IgKGNvbnN0IHRvTWVyZ2Ugb2YgYW5hbHlzaXMubWVyZ2VXaXRoUGFyZW50KSB7XG4gICAgICAgIGlmICh0b01lcmdlLnBhcmVudCBpbnN0YW5jZW9mIERlY2xhcmF0aW9uUmVmbGVjdGlvbikge1xuICAgICAgICAgICAgbWVyZ2VJbnRvKHRvTWVyZ2UsIHRvTWVyZ2UucGFyZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFt0b01lcmdlLCBpbnRvXSBvZiBhbmFseXNpcy5tZXJnZUludG8uZW50cmllcygpKSB7XG4gICAgICAgIG1lcmdlSW50byh0b01lcmdlLCBpbnRvKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG1vdmVOb2RlKHN1YmplY3Q6IERlY2xhcmF0aW9uUmVmbGVjdGlvbiwgaW50bzogQ29udGFpbmVyUmVmbGVjdGlvbikge1xuICAgIGNvbnN0IGZyb20gPSBzdWJqZWN0LnBhcmVudCBhcyBDb250YWluZXJSZWZsZWN0aW9uO1xuXG4gICAgLy8gTm8gYWN0dWFsIG1vdmVtZW50XG4gICAgaWYgKGZyb20gPT09IGludG8pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBmcm9tIG9sZCBwYXJlbnRcbiAgICBpZiAoZnJvbSkge1xuICAgICAgICBmcm9tLnJlbW92ZUNoaWxkKHN1YmplY3QpO1xuICAgIH1cblxuICAgIC8vIEFkZCB0byBuZXcgcGFyZW50XG4gICAgaW50by5hZGRDaGlsZChzdWJqZWN0KTtcbiAgICBzdWJqZWN0LnBhcmVudCA9IGludG87XG5cbiAgICAvLyBXaGVuIG1lcmdpbmcgYSBuYW1lc3BhY2UgaW50byBhIHR5cGUgdHdlYWsgbW9kaWZpZXIgYW5kIGtpbmQgYXBwcm9wcmlhdGVseSAoYSBiaXQgb2YgZ3Vlc3NpbmcgaGVyZTsgbWlnaHQgbmVlZFxuICAgIC8vIHR3ZWFraW5nKVxuICAgIGlmIChcbiAgICAgICAgZnJvbS5raW5kT2YoUmVmbGVjdGlvbktpbmQuTmFtZXNwYWNlKSAmJlxuICAgICAgICBpbnRvLmtpbmRPZihSZWZsZWN0aW9uS2luZC5DbGFzc09ySW50ZXJmYWNlKSAmJlxuICAgICAgICBzdWJqZWN0LmtpbmRPZihSZWZsZWN0aW9uS2luZC5Tb21lVmFsdWUpXG4gICAgKSB7XG4gICAgICAgIHN1YmplY3QuZmxhZ3Muc2V0RmxhZyhSZWZsZWN0aW9uRmxhZy5TdGF0aWMsIHRydWUpO1xuICAgICAgICBpZiAoc3ViamVjdC5raW5kT2YoUmVmbGVjdGlvbktpbmQuVmFyaWFibGUpKSB7XG4gICAgICAgICAgICBzdWJqZWN0LmtpbmQgPSBSZWZsZWN0aW9uS2luZC5Qcm9wZXJ0eTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2VJbnRvKGZyb206IERlY2xhcmF0aW9uUmVmbGVjdGlvbiwgaW50bzogQ29udGFpbmVyUmVmbGVjdGlvbikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gY2hpbGRyZW5PZihmcm9tKTtcbiAgICB3aGlsZSAoY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIG1vdmVOb2RlKGNoaWxkcmVuWzBdLCBpbnRvKTtcbiAgICB9XG4gICAgKGZyb20ucGFyZW50IGFzIENvbnRhaW5lclJlZmxlY3Rpb24pPy5yZW1vdmVDaGlsZChmcm9tKTtcbiAgICAvLyBUT0RPIC0gcmVtYXAgbmFtZVxufVxuXG5mdW5jdGlvbiBjaGlsZHJlbk9mKG5vZGU6IFJlZmxlY3Rpb24pIHtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENvbnRhaW5lclJlZmxlY3Rpb24pIHtcbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbm9kZS5jaGlsZHJlbiA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlLmNoaWxkcmVuO1xuICAgIH1cbiAgICByZXR1cm4gW107XG59XG5cbi8qKlxuICogVmlzaXQgYWxsIG5vZGVzIGluIGEgcmVmbGVjdGlvbiB0cmVlLiAgUmVmbGVjdGlvbiBoYXMgYSBcInZpc2l0XCIgbWV0aG9kIGJ1dCBpdCdzIGp1c3QgYSBicmFuY2ggb24gdHlwZS5cbiAqL1xuZnVuY3Rpb24gdmlzaXQobm9kZTogUmVmbGVjdGlvbiwgdmlzaXRvcjogKG5vZGU6IFJlZmxlY3Rpb24pID0+IHZvaWQpIHtcbiAgICB2aXNpdG9yKG5vZGUpO1xuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbk9mKG5vZGUpKSB7XG4gICAgICAgIHZpc2l0KGNoaWxkLCB2aXNpdG9yKTtcbiAgICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEsU0FBUyxnQkFBZ0I7QUFDekI7QUFBQSxFQUNJO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUE7QUFBQSxFQUNBO0FBQUEsT0FFRztBQUNQLFNBQVMsY0FBYztBQUd2QixTQUFTLGFBQWE7QUFLdEIsTUFBTSxVQUFVLENBQUMsd0JBQXdCO0FBR3pDLE1BQU0sY0FBYztBQUVwQixNQUFNLGdCQUFnQjtBQUFBLEVBQ2xCLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1oQjtBQUtBLGVBQXNCLFVBQVUsS0FBYyxVQUFvQjtBQUM5RCxRQUFNLFVBQVUsSUFBSTtBQUdwQixRQUFNLGNBQWMsTUFBYztBQUdsQyxRQUFNLFdBQVcsSUFBSSxLQUFLO0FBRTFCLGFBQVcsUUFBUSxTQUFTO0FBQ3hCLFVBQU0sT0FBTyxRQUFRLElBQUk7QUFDekIsUUFBSSxLQUFLLFNBQVMsT0FBTyxHQUFHO0FBQ3hCO0FBQUEsSUFDSjtBQUVBLFFBQUksT0FBTyxJQUFJLEdBQUc7QUFDZCxVQUFJLENBQUMsWUFBWSxTQUFTLElBQUksR0FBRztBQUM3QixvQkFBWSxLQUFLLElBQUk7QUFBQSxNQUN6QjtBQUFBLElBQ0osT0FBTztBQUNILFlBQU0sSUFBSSxNQUFNLDhCQUE4QixJQUFJLFNBQVMsUUFBUSxJQUFJLENBQUMsRUFBRTtBQUFBLElBQzlFO0FBQUEsRUFDSjtBQUVBLFFBQU0sTUFBTSxNQUFNLGtCQUFrQjtBQUFBLElBQ2hDLGtCQUFrQjtBQUFBLElB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
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1aWxkaW5nL2RvY3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyLTIwMjQgTWF0dGVyLmpzIEF1dGhvcnNcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHsgcmVsYXRpdmUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHtcbiAgICBBcHBsaWNhdGlvbixcbiAgICBDb250YWluZXJSZWZsZWN0aW9uLFxuICAgIENvbnZlcnRlcixcbiAgICBEZWNsYXJhdGlvblJlZmxlY3Rpb24sXG4gICAgTG9nTGV2ZWwsXG4gICAgUmVmbGVjdGlvbixcbiAgICBSZWZsZWN0aW9uRmxhZyxcbiAgICBSZWZsZWN0aW9uS2luZCxcbiAgICBUeXBlRG9jT3B0aW9ucyxcbn0gZnJvbSBcInR5cGVkb2NcIjtcbmltcG9ydCB7IGlzRmlsZSB9IGZyb20gXCIuLi91dGlsL2ZpbGUuanNcIjtcbmltcG9ydCB7IFBhY2thZ2UgfSBmcm9tIFwiLi4vdXRpbC9wYWNrYWdlLmpzXCI7XG5pbXBvcnQgeyBQcm9ncmVzcyB9IGZyb20gXCIuLi91dGlsL3Byb2dyZXNzLmpzXCI7XG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gXCIuL2dyYXBoLmpzXCI7XG5cbi8vIE5PVEUgLSB0aGlzIGlzIGEgXCJiZXN0IGF0dGVtcHRcIiBhdCBkb2MgZ2VuZXJhdGlvbiB2aWEgdHlwZXNjcmlwdC4gIFRoZSByZXN1bHQgaXMgbm90IGFsbCB0aGF0IGdyZWF0OyB0eXBlZG9jIGlzIHRvb1xuLy8gbGltaXRlZCBmb3Igb3VyIGNvbXBsZXggQVBJIHNvIHdlJ3JlIGdvaW5nIHRvIG5lZWQgc29tZXRoaW5nIGN1c3RvbSB0byBkbyBpdCByaWdodFxuXG5jb25zdCBQTFVHSU5TID0gW1widHlwZWRvYy1naXRodWItdGhlbWVcIl0gYXMgc3RyaW5nW107XG5cbi8vIERvdWJsZSBcImRvY3NcIiBkaXJlY3RvcmllcyBzbyB0b3AtbGV2ZWwgZGlyZWN0b3J5IGNhbiBiZSBhIEdIIHJlcG9zaXRvcnkgd2l0aCBwYWdlcyBjb25maWd1cmVkIHVuZGVyIFwiZG9jc1wiXG5jb25zdCBPVVRQVVRfUEFUSCA9IFwiYnVpbGQvZG9jcy9kb2NzXCI7XG5cbmNvbnN0IFRIRU1FX09QVElPTlMgPSB7XG4gICAgdGhlbWVDb2xvcjogXCIjY2I5ODIwXCIsXG5cbiAgICAvLyBUT0RPIC0gYWRkIHNlcnZpY2UgbGlua3NcbiAgICAvLyAgIEdpdEh1YjogXCJodHRwczovL2dpdGh1Yi5jb20vcHJvamVjdC1jaGlwL21hdHRlci5qc1wiLFxuICAgIC8vICAgRGlzY29yZDogXCJodHRwczovL2Rpc2NvcmQuZ2cvdWptUk5yaER1V1wiLFxuICAgIC8vICAgTlBNOiBcImh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL0Bwcm9qZWN0LWNoaXAvbWF0dGVyLmpzXCIsXG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIGJ1aWxkL2RvY3MuanNvbiBmb3IgYSBzaW5nbGUgcHJvamVjdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkRG9jcyhwa2c6IFBhY2thZ2UsIHByb2dyZXNzOiBQcm9ncmVzcykge1xuICAgIGNvbnN0IG1vZHVsZXMgPSBwa2cuc291cmNlTW9kdWxlcztcblxuICAgIC8vIFdlIHBvaW50IHR5cGVkb2MgYXQgZWFjaCBvZiBvdXIgcHVibGljIGV4cG9ydHNcbiAgICBjb25zdCBlbnRyeVBvaW50cyA9IEFycmF5PHN0cmluZz4oKTtcblxuICAgIC8vIEluIGEgd29ya3NwYWNlIHR5cGVkb2MgcmVxdWlyZXMgZmlsZXMgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHdvcmtzcGFjZSBmb3IgbWVyZ2VcbiAgICBjb25zdCBiYXNlUGF0aCA9IHBrZy5yb290LnBhdGg7XG5cbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gbW9kdWxlcykge1xuICAgICAgICBjb25zdCBwYXRoID0gbW9kdWxlc1tuYW1lXTtcbiAgICAgICAgaWYgKHBhdGguZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNGaWxlKHBhdGgpKSB7XG4gICAgICAgICAgICBpZiAoIWVudHJ5UG9pbnRzLmluY2x1ZGVzKHBhdGgpKSB7XG4gICAgICAgICAgICAgICAgZW50cnlQb2ludHMucHVzaChwYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gc291cmNlIGZvdW5kIGZvciBtb2R1bGUgJHtuYW1lfSBwYXRoICR7bW9kdWxlc1tuYW1lXX1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFwcCA9IGF3YWl0IGNyZWF0ZUFwcGxpY2F0aW9uKHtcbiAgICAgICAgZXhjbHVkZUV4dGVybmFsczogdHJ1ZSxcbiAgICAgICAgZW50cnlQb2ludHMsXG4gICAgICAgIHRzY29uZmlnOiBwa2cucmVzb2x2ZShcInRzY29uZmlnLmpzb25cIiksXG4gICAgICAgIGJhc2VQYXRoLFxuICAgICAgICBza2lwRXJyb3JDaGVja2luZzogdHJ1ZSxcblxuICAgICAgICAvLyBSZW1vdmVzIGEgY291cGxlIGh1bmRyZWQgTUIgb2YgdGFicyBzbyB3b3J0aCB1bmNvbW1lbnRpbmcgYXQgc29tZSBwb2ludFxuICAgICAgICAvL3ByZXR0eTogZmFsc2UsXG5cbiAgICAgICAgcmVhZG1lOiBcIm5vbmVcIixcbiAgICB9KTtcblxuICAgIGluc3RydW1lbnRGb3JFbnRyeXBvaW50UmVwYWlyKGFwcCwgcGtnKTtcblxuICAgIGNvbnN0IGFuYWx5c2lzID0gbmV3IFJlZmxlY3Rpb25BbmFseXNpcygpO1xuXG4gICAgYXBwLmNvbnZlcnRlci5vbihDb252ZXJ0ZXIuRVZFTlRfQ1JFQVRFX0RFQ0xBUkFUSU9OLCAoLypfY29udGV4dCwgcmVmbGVjdGlvbjogRGVjbGFyYXRpb25SZWZsZWN0aW9uKi8pID0+IHtcbiAgICAgICAgcHJvZ3Jlc3MucmVmcmVzaCgpO1xuICAgIH0pO1xuXG4gICAgYXBwLmNvbnZlcnRlci5vbihDb252ZXJ0ZXIuRVZFTlRfUkVTT0xWRSwgKCkgPT4ge1xuICAgICAgICBwcm9ncmVzcy5yZWZyZXNoKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZWZsZWN0aW9uID0gYXdhaXQgbG9hZFJlZmxlY3Rpb25zKGFwcCwgcGtnKTtcblxuICAgIGFuYWx5emVSZWZsZWN0aW9ucyhyZWZsZWN0aW9uLCBhbmFseXNpcyk7XG4gICAgcmVwYWlyUmVmbGVjdGlvbnMoYW5hbHlzaXMpO1xuXG4gICAgYXdhaXQgYXBwLmdlbmVyYXRlSnNvbihyZWZsZWN0aW9uLCBwa2cucmVzb2x2ZShcImJ1aWxkL2RvY3MuanNvblwiKSk7XG59XG5cbmZ1bmN0aW9uIHJlZmxlY3Rpb25zUGF0aChwa2c6IFBhY2thZ2UpIHtcbiAgICBjb25zdCBwYXRoID0gcGtnLnJlc29sdmUoXCJidWlsZC9kb2NzLmpzb25cIik7XG4gICAgaWYgKGlzRmlsZShwYXRoKSkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG59XG5cbi8qKlxuICogVHlwZWRvYyBpcyBpbnN1ZmZpY2llbnRseSBjb25maWd1cmFibGUgdG8gY29ycmVjdGx5IG5hbWUgbW9kdWxlcy4gIFRoZSBvZmZpY2lhbCBkaXJlY3Rpb24gaXMgdG8gcmVuYW1lIG1vZHVsZXMgdXNpbmdcbiAqIHRoZSBcIm1vZHVsZVwiIGFubm90YXRpb24gYnV0IHNlZW1zIGR1bWIgdG8gaGF2ZSB0byBkbyB0aGF0IHdoZW4gd2UgY2FuIGNvbXB1dGUgdGhlIGNvcnJlY3QgbmFtZS4gIFdlJ2QgaGF2ZSB0byBlZGl0XG4gKiBhbmQgbWFpbnRhaW4gbWFueSBmaWxlcyBpbmNsdWRpbmcgY29kZWdlbi5cbiAqXG4gKiBJbnN0ZWFkIHdlIGNyZWF0ZSBhIG1hcCBvZiB0eXBlZG9jJ3MgbmFpdmUgbW9kdWxlIG5hbWUgdG8gdGhlIGNvcnJlY3QgbmFtZSBzbyB3ZSBjYW4gdXBkYXRlIG5hbWVzIGFzIHJlZmxlY3Rpb25zXG4gKiBsb2FkLlxuICovXG5mdW5jdGlvbiBpbnN0cnVtZW50Rm9yRW50cnlwb2ludFJlcGFpcihhcHA6IEFwcGxpY2F0aW9uLCBwa2c6IFBhY2thZ2UpIHtcbiAgICBjb25zdCBiYXNlR2V0RW50cnlQb2ludHMgPSBhcHAuZ2V0RW50cnlQb2ludHMuYmluZChhcHApO1xuICAgIGNvbnN0IG1hcHBpbmcgPSBuYWl2ZVRvUmVhbE5hbWVzRm9yKHBrZyk7XG4gICAgYXBwLmdldEVudHJ5UG9pbnRzID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBsaXN0ID0gYmFzZUdldEVudHJ5UG9pbnRzKCk7XG4gICAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBsaXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBlcCBvZiBsaXN0KSB7XG4gICAgICAgICAgICBjb25zdCByZWFsTmFtZSA9IG1hcHBpbmdbZXAuZGlzcGxheU5hbWVdO1xuICAgICAgICAgICAgaWYgKHJlYWxOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFR5cGVkb2MgbmFpdmUgbW9kdWxlIG5hbWUgXCIke2VwLmRpc3BsYXlOYW1lfVwiIGlzIHVubWFwcGVkYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlcC5kaXNwbGF5TmFtZSA9IHJlYWxOYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaXN0O1xuICAgIH07XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIG1hcCBvZiB0eXBlZG9jJ3MgbmFpdmUgbmFtZSAtPiByZWFsIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIG5haXZlVG9SZWFsTmFtZXNGb3IocGtnOiBQYWNrYWdlKSB7XG4gICAgY29uc3QgbW9kdWxlcyA9IHBrZy5zb3VyY2VNb2R1bGVzO1xuXG4gICAgLy8gTWFwIG9mIHN0dXBpZCBuYW1lcyB0aGF0IHR5cGVkb2MgY2hvb3NlcyB0byBhY3R1YWwgZXhwb3J0IG5hbWVzXG4gICAgY29uc3QgbWFwcGluZyA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgICBjb25zdCBwYWNrYWdlUHJlZml4ID0gYCR7cGtnLm5hbWV9L2A7XG5cbiAgICAvLyBJbiBhIHdvcmtzcGFjZSB0eXBlZG9jIHJlcXVpcmVzIGZpbGVzIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSB3b3Jrc3BhY2UgZm9yIG1lcmdlXG4gICAgY29uc3QgYmFzZVBhdGggPSBwa2cucm9vdC5wYXRoO1xuXG4gICAgZm9yIChjb25zdCBuYW1lIGluIG1vZHVsZXMpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IG1vZHVsZXNbbmFtZV07XG4gICAgICAgIGlmIChwYXRoLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmFpdmVOYW1lID0gcmVsYXRpdmUoYmFzZVBhdGgsIHBhdGgpXG4gICAgICAgICAgICAucmVwbGFjZSgvLig/OnRzfGpzfG1qc3xjanMpJC8sIFwiXCIpXG5cbiAgICAgICAgICAgIC8vIHR5cGVkb2Mgc3RyaXBzIFwiL2luZGV4XCI7IHRoaXMgaXMgaGFyZC1jb2RlZCBhbmQgZG9lc24ndCByZXNwZWN0IGV4cG9ydHNcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXC9pbmRleCQvLCBcIlwiKTtcblxuICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKHBhY2thZ2VQcmVmaXgpKSB7XG4gICAgICAgICAgICBtYXBwaW5nW25haXZlTmFtZV0gPSBuYW1lLnN1YnN0cmluZyhwYWNrYWdlUHJlZml4Lmxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gcGtnLm5hbWUpIHtcbiAgICAgICAgICAgIC8vIEZsYWdzIGZvciBtZXJnZSB3aXRoIHBhcmVudFxuICAgICAgICAgICAgbWFwcGluZ1tuYWl2ZU5hbWVdID0gXCIuXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtYXBwaW5nW25haXZlTmFtZV0gPSBuYW1lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBpbmc7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgc3RhdGljIGRvY3VtZW50YXRpb24gd2Vic2l0ZS5cbiAqXG4gKiBTdXBwb3J0cyBpbmRpdmlkdWFsIHByb2plY3RzIG9yIHdvcmtzcGFjZXMgYnV0IG5vdCBpbmRpdmlkdWFsIHByb2plY3RzIHdpdGhpbiB3b3Jrc3BhY2VzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWVyZ2VEb2NzKHBrZzogUGFja2FnZSkge1xuICAgIGNvbnN0IGVudHJ5UG9pbnRzID0gQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgY29uc3Qgcm9vdCA9IHBrZy5yb290O1xuXG4gICAgaWYgKHJvb3QuaXNXb3Jrc3BhY2UpIHtcbiAgICAgICAgLy8gV29ya3NwYWNlXG4gICAgICAgIGNvbnN0IGdyYXBoID0gYXdhaXQgR3JhcGgubG9hZChyb290KTtcbiAgICAgICAgaWYgKGdyYXBoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIFNob3VsZG4ndCBoYXBwZW5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW50ZXJuYWw6ICR7cGtnLm5hbWV9IGhhcyB3b3Jrc3BhY2VzIGJ1dCBubyBncmFwaGApO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBncmFwaC5ub2Rlcykge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IHJlZmxlY3Rpb25zUGF0aChub2RlLnBrZyk7XG4gICAgICAgICAgICBpZiAocGF0aCkge1xuICAgICAgICAgICAgICAgIGVudHJ5UG9pbnRzLnB1c2gocGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlbnRyeVBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gcmVmbGVjdGlvbnMgZGV0ZWN0ZWQgaW4gd29ya3NwYWNlICR7cGtnLm5hbWV9YCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTdGFuZGFsb25lIHBhY2thZ2VcbiAgICAgICAgY29uc3QgcGF0aCA9IHJlZmxlY3Rpb25zUGF0aChwa2cpO1xuICAgICAgICBpZiAocGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHJlZmxlY3Rpb25zIHByZXNlbnQgZm9yICR7cGtnLm5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgZW50cnlQb2ludHMucHVzaChwYXRoKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcHAgPSBhd2FpdCBjcmVhdGVBcHBsaWNhdGlvbih7XG4gICAgICAgIGVudHJ5UG9pbnRzLFxuICAgICAgICBlbnRyeVBvaW50U3RyYXRlZ3k6IFwibWVyZ2VcIixcbiAgICAgICAgLi4uVEhFTUVfT1BUSU9OUyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlZmxlY3Rpb24gPSBhd2FpdCBsb2FkUmVmbGVjdGlvbnMoYXBwLCBwa2cpO1xuXG4gICAgYXdhaXQgYXBwLmdlbmVyYXRlRG9jcyhyZWZsZWN0aW9uLCBwa2cucmVzb2x2ZShPVVRQVVRfUEFUSCkpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHR5cGVkb2MgXCJhcHBsaWNhdGlvblwiIHdoaWNoIGlzIHRoZSBpbnRlcmZhY2UgZm9yIGV4dHJhY3RpbmcgdHlwZXMgYW5kIGdlbmVyYXRpbmcgZG9jcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXBwbGljYXRpb24ob3B0aW9uczogUGFydGlhbDxUeXBlRG9jT3B0aW9ucz4pIHtcbiAgICByZXR1cm4gYXdhaXQgQXBwbGljYXRpb24uYm9vdHN0cmFwV2l0aFBsdWdpbnMoe1xuICAgICAgICBwbHVnaW46IFBMVUdJTlMsXG4gICAgICAgIGxvZ0xldmVsOiBMb2dMZXZlbC5XYXJuLFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xufVxuXG4vKipcbiAqIFBlcmZvcm0gXCJjb252ZXJzaW9uXCIgd2hpY2ggaXMgdHlwZWRvYyB0ZXJtaW5vbG9neSBmb3IgZXhlY3V0aW5nIHRoZSBvcGVyYXRpb24gZGVmaW5lZCBieSB0aGUgYXBwbGljYXRpb24uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRSZWZsZWN0aW9ucyhhcHA6IEFwcGxpY2F0aW9uLCBwa2c6IFBhY2thZ2UpIHtcbiAgICBjb25zdCByZWZsZWN0aW9uID0gYXdhaXQgYXBwLmNvbnZlcnQoKTtcbiAgICBpZiAocmVmbGVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvamVjdCAke3BrZy5wYXRofSBwcm9kdWNlZCBubyBkb2N1bWVudGF0aW9uYCk7XG4gICAgfVxuICAgIHJldHVybiByZWZsZWN0aW9uO1xufVxuXG5jbGFzcyBSZWZsZWN0aW9uQW5hbHlzaXMge1xuICAgIC8vIFRPRE8gLSBuZWVkIHRvIHBvcHVsYXRlIHRoaXMgZHVyaW5nIGFuYWx5c2lzIHNvIHdlIGNhbiB3YXJuOyB3aWxsIHJlcGxhY2UgdHlwZWRvYy1wbHVnaW4tbWlzc2luZy1leHBvcnRzXG4gICAgdW5leHBvcnRlZFJlZmVyZW5jZSA9IG5ldyBTZXQ8UmVmbGVjdGlvbj4oKTtcblxuICAgIG1lcmdlV2l0aFBhcmVudCA9IG5ldyBTZXQ8RGVjbGFyYXRpb25SZWZsZWN0aW9uPigpO1xuICAgIG1lcmdlSW50byA9IG5ldyBNYXA8RGVjbGFyYXRpb25SZWZsZWN0aW9uLCBEZWNsYXJhdGlvblJlZmxlY3Rpb24+KCk7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIHJlZmxlY3Rpb25zIHRvIGltcHJvdmUgZmluYWwgb3V0cHV0LlxuICovXG5mdW5jdGlvbiBhbmFseXplUmVmbGVjdGlvbnMobm9kZTogUmVmbGVjdGlvbiwgYW5hbHlzaXM6IFJlZmxlY3Rpb25BbmFseXNpcykge1xuICAgIHZpc2l0KG5vZGUsIHN1YmplY3QgPT4ge1xuICAgICAgICAvLyBUT0RPIC0gcG9wdWxhdGUgYW5hbHlzaXMudW5leHBvcmVkUmVmZXJlbmNlIChvciBwZXJoYXBzIGp1c3QgcHJpbnQgd2FybmluZylcblxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGNoaWxkcmVuT2Yoc3ViamVjdCk7XG4gICAgICAgIGNvbnN0IG1lcmdlYWJsZSA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIERlY2xhcmF0aW9uUmVmbGVjdGlvbj47XG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZXMgPSBuZXcgU2V0PERlY2xhcmF0aW9uUmVmbGVjdGlvbj4oKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKGNoaWxkLmtpbmRPZihSZWZsZWN0aW9uS2luZC5DbGFzc09ySW50ZXJmYWNlIHwgUmVmbGVjdGlvbktpbmQuRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgbWVyZ2VhYmxlW2NoaWxkLm5hbWVdID0gY2hpbGQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLmtpbmRPZihSZWZsZWN0aW9uS2luZC5OYW1lc3BhY2UpKSB7XG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlcy5hZGQoY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBucyBvZiBuYW1lc3BhY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBtZXJnZUludG8gPSBtZXJnZWFibGVbbnMubmFtZV07XG4gICAgICAgICAgICBpZiAobWVyZ2VJbnRvKSB7XG4gICAgICAgICAgICAgICAgYW5hbHlzaXMubWVyZ2VJbnRvLnNldChucywgbWVyZ2VJbnRvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiByZXBhaXJSZWZsZWN0aW9ucyhhbmFseXNpczogUmVmbGVjdGlvbkFuYWx5c2lzKSB7XG4gICAgZm9yIChjb25zdCB0b01lcmdlIG9mIGFuYWx5c2lzLm1lcmdlV2l0aFBhcmVudCkge1xuICAgICAgICBpZiAodG9NZXJnZS5wYXJlbnQgaW5zdGFuY2VvZiBEZWNsYXJhdGlvblJlZmxlY3Rpb24pIHtcbiAgICAgICAgICAgIG1lcmdlSW50byh0b01lcmdlLCB0b01lcmdlLnBhcmVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBbdG9NZXJnZSwgaW50b10gb2YgYW5hbHlzaXMubWVyZ2VJbnRvLmVudHJpZXMoKSkge1xuICAgICAgICBtZXJnZUludG8odG9NZXJnZSwgaW50byk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBtb3ZlTm9kZShzdWJqZWN0OiBEZWNsYXJhdGlvblJlZmxlY3Rpb24sIGludG86IENvbnRhaW5lclJlZmxlY3Rpb24pIHtcbiAgICBjb25zdCBmcm9tID0gc3ViamVjdC5wYXJlbnQgYXMgQ29udGFpbmVyUmVmbGVjdGlvbjtcblxuICAgIC8vIE5vIGFjdHVhbCBtb3ZlbWVudFxuICAgIGlmIChmcm9tID09PSBpbnRvKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgZnJvbSBvbGQgcGFyZW50XG4gICAgaWYgKGZyb20pIHtcbiAgICAgICAgZnJvbS5yZW1vdmVDaGlsZChzdWJqZWN0KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdG8gbmV3IHBhcmVudFxuICAgIGludG8uYWRkQ2hpbGQoc3ViamVjdCk7XG4gICAgc3ViamVjdC5wYXJlbnQgPSBpbnRvO1xuXG4gICAgLy8gV2hlbiBtZXJnaW5nIGEgbmFtZXNwYWNlIGludG8gYSB0eXBlIHR3ZWFrIG1vZGlmaWVyIGFuZCBraW5kIGFwcHJvcHJpYXRlbHkgKGEgYml0IG9mIGd1ZXNzaW5nIGhlcmU7IG1pZ2h0IG5lZWRcbiAgICAvLyB0d2Vha2luZylcbiAgICBpZiAoXG4gICAgICAgIGZyb20ua2luZE9mKFJlZmxlY3Rpb25LaW5kLk5hbWVzcGFjZSkgJiZcbiAgICAgICAgaW50by5raW5kT2YoUmVmbGVjdGlvbktpbmQuQ2xhc3NPckludGVyZmFjZSkgJiZcbiAgICAgICAgc3ViamVjdC5raW5kT2YoUmVmbGVjdGlvbktpbmQuU29tZVZhbHVlKVxuICAgICkge1xuICAgICAgICBzdWJqZWN0LmZsYWdzLnNldEZsYWcoUmVmbGVjdGlvbkZsYWcuU3RhdGljLCB0cnVlKTtcbiAgICAgICAgaWYgKHN1YmplY3Qua2luZE9mKFJlZmxlY3Rpb25LaW5kLlZhcmlhYmxlKSkge1xuICAgICAgICAgICAgc3ViamVjdC5raW5kID0gUmVmbGVjdGlvbktpbmQuUHJvcGVydHk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlSW50byhmcm9tOiBEZWNsYXJhdGlvblJlZmxlY3Rpb24sIGludG86IENvbnRhaW5lclJlZmxlY3Rpb24pIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGNoaWxkcmVuT2YoZnJvbSk7XG4gICAgd2hpbGUgKGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICBtb3ZlTm9kZShjaGlsZHJlblswXSwgaW50byk7XG4gICAgfVxuICAgIChmcm9tLnBhcmVudCBhcyBDb250YWluZXJSZWZsZWN0aW9uKT8ucmVtb3ZlQ2hpbGQoZnJvbSk7XG4gICAgLy8gVE9ETyAtIHJlbWFwIG5hbWVcbn1cblxuZnVuY3Rpb24gY2hpbGRyZW5PZihub2RlOiBSZWZsZWN0aW9uKSB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDb250YWluZXJSZWZsZWN0aW9uKSB7XG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZS5jaGlsZHJlbjtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xufVxuXG4vKipcbiAqIFZpc2l0IGFsbCBub2RlcyBpbiBhIHJlZmxlY3Rpb24gdHJlZS4gIFJlZmxlY3Rpb24gaGFzIGEgXCJ2aXNpdFwiIG1ldGhvZCBidXQgaXQncyBqdXN0IGEgYnJhbmNoIG9uIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIHZpc2l0KG5vZGU6IFJlZmxlY3Rpb24sIHZpc2l0b3I6IChub2RlOiBSZWZsZWN0aW9uKSA9PiB2b2lkKSB7XG4gICAgdmlzaXRvcihub2RlKTtcblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW5PZihub2RlKSkge1xuICAgICAgICB2aXNpdChjaGlsZCwgdmlzaXRvcik7XG4gICAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BLFNBQVMsZ0JBQWdCO0FBQ3pCO0FBQUEsRUFDSTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBO0FBQUEsRUFDQTtBQUFBLE9BRUc7QUFDUCxTQUFTLGNBQWM7QUFHdkIsU0FBUyxhQUFhO0FBS3RCLE1BQU0sVUFBVSxDQUFDLHNCQUFzQjtBQUd2QyxNQUFNLGNBQWM7QUFFcEIsTUFBTSxnQkFBZ0I7QUFBQSxFQUNsQixZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNaEI7QUFLQSxlQUFzQixVQUFVLEtBQWMsVUFBb0I7QUFDOUQsUUFBTSxVQUFVLElBQUk7QUFHcEIsUUFBTSxjQUFjLE1BQWM7QUFHbEMsUUFBTSxXQUFXLElBQUksS0FBSztBQUUxQixhQUFXLFFBQVEsU0FBUztBQUN4QixVQUFNLE9BQU8sUUFBUSxJQUFJO0FBQ3pCLFFBQUksS0FBSyxTQUFTLE9BQU8sR0FBRztBQUN4QjtBQUFBLElBQ0o7QUFFQSxRQUFJLE9BQU8sSUFBSSxHQUFHO0FBQ2QsVUFBSSxDQUFDLFlBQVksU0FBUyxJQUFJLEdBQUc7QUFDN0Isb0JBQVksS0FBSyxJQUFJO0FBQUEsTUFDekI7QUFBQSxJQUNKLE9BQU87QUFDSCxZQUFNLElBQUksTUFBTSw4QkFBOEIsSUFBSSxTQUFTLFFBQVEsSUFBSSxDQUFDLEVBQUU7QUFBQSxJQUM5RTtBQUFBLEVBQ0o7QUFFQSxRQUFNLE1BQU0sTUFBTSxrQkFBa0I7QUFBQSxJQUNoQyxrQkFBa0I7QUFBQSxJQUNs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

@@ -12,4 +12,5 @@ /**

export * from "./util/file.js";
export * from "./util/glob.js";
export * from "./util/package.js";
export * from "./util/progress.js";
//# sourceMappingURL=index.d.ts.map

@@ -12,4 +12,5 @@ /**

export * from "./util/file.js";
export * from "./util/glob.js";
export * from "./util/package.js";
export * from "./util/progress.js";
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMi0yMDI0IE1hdHRlci5qcyBBdXRob3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmV4cG9ydCAqIGZyb20gXCIuL2J1aWxkaW5nL2J1aWxkZXIuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2J1aWxkaW5nL2dyYXBoLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9idWlsZGluZy9wcm9qZWN0LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9ydW5uaW5nL2Vuc3VyZS1jb21waWxlZC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbC9jb21tYW5kZXIuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWwvZmlsZS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbC9wYWNrYWdlLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsL3Byb2dyZXNzLmpzXCI7XG4iXSwKICAibWFwcGluZ3MiOiAiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7IiwKICAibmFtZXMiOiBbXQp9Cg==
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMi0yMDI0IE1hdHRlci5qcyBBdXRob3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmV4cG9ydCAqIGZyb20gXCIuL2J1aWxkaW5nL2J1aWxkZXIuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2J1aWxkaW5nL2dyYXBoLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9idWlsZGluZy9wcm9qZWN0LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9ydW5uaW5nL2Vuc3VyZS1jb21waWxlZC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbC9jb21tYW5kZXIuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWwvZmlsZS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbC9nbG9iLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsL3BhY2thZ2UuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWwvcHJvZ3Jlc3MuanNcIjtcbiJdLAogICJtYXBwaW5ncyI6ICJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7IiwKICAibmFtZXMiOiBbXQp9Cg==

@@ -9,7 +9,19 @@ /**

export declare function maybeReaddirSync(path: string): string[] | undefined;
export declare class GlobError extends Error {
}
export declare function globSync(pattern: string | string[]): string[];
export declare function isDirectory(path: string): boolean;
export declare function isFile(path: string): boolean;
/**
* Tiny virtual filesystem driver. Currently used only for processing globs.
*/
export interface FilesystemSync<T extends FilesystemSync.Stat = FilesystemSync.Stat> {
resolve(...segments: string[]): string;
readdir(path: string): string[] | undefined;
stat(path: string): T | undefined;
}
export declare function FilesystemSync(): FilesystemSync<FilesystemSync.Stat>;
export declare namespace FilesystemSync {
interface Stat {
isDirectory?: boolean;
isFile?: boolean;
}
}
//# sourceMappingURL=file.d.ts.map

@@ -7,3 +7,2 @@ /**

import { readdirSync, readFileSync, statSync } from "fs";
import { GLOBSTAR, Minimatch } from "minimatch";
import { resolve } from "path";

@@ -47,81 +46,2 @@ import { ignoreErrorSync } from "./errors.js";

}
class GlobError extends Error {
}
function globSync(pattern) {
if (typeof pattern === "string") {
return [...globOneSync(pattern)];
}
const result = Array();
for (const p of pattern) {
result.push(...globOneSync(p));
}
return result;
}
function globOneSync(pattern) {
const mm = new Minimatch(pattern.replace(/\\/g, "/"), {});
const results = /* @__PURE__ */ new Set();
for (const part of mm.set) {
for (const path of globOnePartSync(mm, part)) {
results.add(path);
}
}
return results;
}
function globOnePartSync(mm, segments) {
let rootPath = "";
let didOne = false;
while (typeof segments[0] === "string") {
if (didOne) {
rootPath += "/";
} else {
didOne = true;
}
rootPath += segments.shift();
}
if (!segments.length) {
const stat = maybeStatSync(rootPath);
if (stat?.[rootPath.endsWith("/") ? "isDirectory" : "isFile"]()) {
return [rootPath];
}
return [];
}
const results = /* @__PURE__ */ new Set();
function match(path, segments2) {
if (!segments2.length) {
results.add(path);
return;
}
if (typeof segments2[0] === "string") {
const subpath = resolve(path, segments2[0]);
if (maybeStatSync(resolve(path, segments2[0]))) {
match(subpath, segments2.slice(1));
return;
}
}
if (segments2.length === 1 && segments2[0] === GLOBSTAR) {
results.add(path);
}
const subnames = maybeReaddirSync(path);
if (!subnames) {
return;
}
for (const subname of subnames) {
const subpath = resolve(path, subname);
if (segments2[0] !== GLOBSTAR) {
if (mm.matchOne([subname], segments2, true)) {
match(subpath, segments2.slice(1));
}
continue;
}
if (segments2.length > 1) {
if (mm.matchOne([subname], segments2.slice(1), true)) {
match(subpath, segments2.slice(2));
}
}
match(subpath, segments2);
}
}
match(rootPath, segments);
return results;
}
function isDirectory(path) {

@@ -133,5 +53,27 @@ return !!ignoreErrorSync("ENOENT", () => statSync(path).isDirectory());

}
function FilesystemSync() {
return {
resolve(...segments) {
return resolve(...segments);
},
readdir(path) {
return maybeReaddirSync(path);
},
stat(path) {
const stats = maybeStatSync(path);
if (stats) {
return {
get isFile() {
return stats.isFile();
},
get isDirectory() {
return stats.isDirectory();
}
};
}
}
};
}
export {
GlobError,
globSync,
FilesystemSync,
isDirectory,

@@ -143,2 +85,2 @@ isFile,

};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3V0aWwvZmlsZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjItMjAyNCBNYXR0ZXIuanMgQXV0aG9yc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQgeyByZWFkZGlyU3luYywgcmVhZEZpbGVTeW5jLCBzdGF0U3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgR0xPQlNUQVIsIE1pbmltYXRjaCwgUGFyc2VSZXR1cm5GaWx0ZXJlZCB9IGZyb20gXCJtaW5pbWF0Y2hcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgaWdub3JlRXJyb3JTeW5jIH0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5cbmZ1bmN0aW9uIGlzTm90Rm91bmRFcnJvcihlOiB1bmtub3duKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBlID09PSBcIm9iamVjdFwiICYmIGUgIT09IG51bGwgJiYgXCJjb2RlXCIgaW4gZSAmJiAoZS5jb2RlID09PSBcIkVOT0VOVFwiIHx8IGUuY29kZSA9PT0gXCJFTk9URElSXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF5YmVTdGF0U3luYyhwYXRoOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gc3RhdFN5bmMocGF0aCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaXNOb3RGb3VuZEVycm9yKGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXliZVJlYWRKc29uU3luYyhwYXRoOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMocGF0aCwgXCJ1dGYtOFwiKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaXNOb3RGb3VuZEVycm9yKGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgICAgICAgZS5tZXNzYWdlID0gYEVycm9yIHBhcnNpbmcgJHtwYXRofTogJHtlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXliZVJlYWRkaXJTeW5jKHBhdGg6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZWFkZGlyU3luYyhwYXRoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChpc05vdEZvdW5kRXJyb3IoZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdsb2JFcnJvciBleHRlbmRzIEVycm9yIHt9XG5cbmV4cG9ydCBmdW5jdGlvbiBnbG9iU3luYyhwYXR0ZXJuOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gWy4uLmdsb2JPbmVTeW5jKHBhdHRlcm4pXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBBcnJheTxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCBwIG9mIHBhdHRlcm4pIHtcbiAgICAgICAgcmVzdWx0LnB1c2goLi4uZ2xvYk9uZVN5bmMocCkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdsb2JPbmVTeW5jKHBhdHRlcm46IHN0cmluZykge1xuICAgIC8vIFBhcnNlIHRoZSBnbG9iXG4gICAgY29uc3QgbW0gPSBuZXcgTWluaW1hdGNoKHBhdHRlcm4ucmVwbGFjZSgvXFxcXC9nLCBcIi9cIiksIHt9KTtcbiAgICBjb25zdCByZXN1bHRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIG1tLnNldCkge1xuICAgICAgICBmb3IgKGNvbnN0IHBhdGggb2YgZ2xvYk9uZVBhcnRTeW5jKG1tLCBwYXJ0KSkge1xuICAgICAgICAgICAgcmVzdWx0cy5hZGQocGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGdsb2JPbmVQYXJ0U3luYyhtbTogTWluaW1hdGNoLCBzZWdtZW50czogUGFyc2VSZXR1cm5GaWx0ZXJlZFtdKSB7XG4gICAgLy8gRmluZCB0aGUgc3RhcnRpbmcgcGF0aFxuICAgIGxldCByb290UGF0aCA9IFwiXCI7XG4gICAgbGV0IGRpZE9uZSA9IGZhbHNlO1xuICAgIHdoaWxlICh0eXBlb2Ygc2VnbWVudHNbMF0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKGRpZE9uZSkge1xuICAgICAgICAgICAgcm9vdFBhdGggKz0gXCIvXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaWRPbmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJvb3RQYXRoICs9IHNlZ21lbnRzLnNoaWZ0KCkgYXMgc3RyaW5nO1xuICAgIH1cblxuICAgIC8vIElmIHdlIGFyZSBvdXQgb2Ygc2VnbWVudHMsIHRoaXMgaXMgbm90IGEgZ2xvYi4gIEp1c3QgY2hlY2sgZm9yIHByZXNlbmNlXG4gICAgaWYgKCFzZWdtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgc3RhdCA9IG1heWJlU3RhdFN5bmMocm9vdFBhdGgpO1xuXG4gICAgICAgIGlmIChzdGF0Py5bcm9vdFBhdGguZW5kc1dpdGgoXCIvXCIpID8gXCJpc0RpcmVjdG9yeVwiIDogXCJpc0ZpbGVcIl0oKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtyb290UGF0aF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gV2FsayBmaWxlc3lzdGVtIGFuZCBhcHBseSBnbG9iXG4gICAgY29uc3QgcmVzdWx0cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgZnVuY3Rpb24gbWF0Y2gocGF0aDogc3RyaW5nLCBzZWdtZW50czogUGFyc2VSZXR1cm5GaWx0ZXJlZFtdKSB7XG4gICAgICAgIC8vIElmIHRoZSBmaWx0ZXIgaXMgZW1wdHkgdGhlbiBtYXRjaCBjdXJyZW50IHBhdGhcbiAgICAgICAgaWYgKCFzZWdtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJlc3VsdHMuYWRkKHBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgZmlsdGVyIHN0YXJ0cyB3aXRob3V0IG1hZ2ljIHRoZW4ganVzdCBzdGF0IHRoYXQgb25lIHBhdGhcbiAgICAgICAgaWYgKHR5cGVvZiBzZWdtZW50c1swXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29uc3Qgc3VicGF0aCA9IHJlc29sdmUocGF0aCwgc2VnbWVudHNbMF0pO1xuICAgICAgICAgICAgaWYgKG1heWJlU3RhdFN5bmMocmVzb2x2ZShwYXRoLCBzZWdtZW50c1swXSkpKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2goc3VicGF0aCwgc2VnbWVudHMuc2xpY2UoMSkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGZpbHRlciBpcyBqdXN0IEdMT0JTVEFSIHRoZW4gYWxsIHBhdGhzIG1hdGNoIGJ1dCBzZWFyY2ggY29udGludWVzXG4gICAgICAgIGlmIChzZWdtZW50cy5sZW5ndGggPT09IDEgJiYgc2VnbWVudHNbMF0gPT09IEdMT0JTVEFSKSB7XG4gICAgICAgICAgICByZXN1bHRzLmFkZChwYXRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpbHRlciBzdGFydHMgd2l0aCBtYWdpYyBzbyBsb2FkIGRpcmVjdG9yeSBlbnRyaWVzIHRvIG1hdGNoXG4gICAgICAgIGNvbnN0IHN1Ym5hbWVzID0gbWF5YmVSZWFkZGlyU3luYyhwYXRoKTtcbiAgICAgICAgaWYgKCFzdWJuYW1lcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGVzdCBlYWNoIGRpcmVjdG9yeSBlbnRyeVxuICAgICAgICBmb3IgKGNvbnN0IHN1Ym5hbWUgb2Ygc3VibmFtZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnBhdGggPSByZXNvbHZlKHBhdGgsIHN1Ym5hbWUpO1xuXG4gICAgICAgICAgICAvLyBBbnl0aGluZyBidXQgR0xPQlNUQVIgaXMgMToxIHN1Ym5hbWUvc2VnbWVudCBtYXRjaFxuICAgICAgICAgICAgaWYgKHNlZ21lbnRzWzBdICE9PSBHTE9CU1RBUikge1xuICAgICAgICAgICAgICAgIGlmIChtbS5tYXRjaE9uZShbc3VibmFtZV0sIHNlZ21lbnRzLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaChzdWJwYXRoLCBzZWdtZW50cy5zbGljZSgxKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBHTE9CU1RBUiBtYXRjaGVzIG5vdGhpbmcgc28gdGVzdCBzZWNvbmQgc2VnbWVudFxuICAgICAgICAgICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobW0ubWF0Y2hPbmUoW3N1Ym5hbWVdLCBzZWdtZW50cy5zbGljZSgxKSwgdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2goc3VicGF0aCwgc2VnbWVudHMuc2xpY2UoMikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR0xPQlNUQVIgbWF0Y2hlcyBldmVyeXRoaW5nXG4gICAgICAgICAgICBtYXRjaChzdWJwYXRoLCBzZWdtZW50cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtYXRjaChyb290UGF0aCwgc2VnbWVudHMpO1xuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RpcmVjdG9yeShwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gISFpZ25vcmVFcnJvclN5bmMoXCJFTk9FTlRcIiwgKCkgPT4gc3RhdFN5bmMocGF0aCkuaXNEaXJlY3RvcnkoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbGUocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuICEhaWdub3JlRXJyb3JTeW5jKFwiRU5PRU5UXCIsICgpID0+IHN0YXRTeW5jKHBhdGgpLmlzRmlsZSgpKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxTQUFTLGFBQWEsY0FBYyxnQkFBZ0I7QUFDcEQsU0FBUyxVQUFVLGlCQUFzQztBQUN6RCxTQUFTLGVBQWU7QUFDeEIsU0FBUyx1QkFBdUI7QUFFaEMsU0FBUyxnQkFBZ0IsR0FBWTtBQUNqQyxTQUFPLE9BQU8sTUFBTSxZQUFZLE1BQU0sUUFBUSxVQUFVLE1BQU0sRUFBRSxTQUFTLFlBQVksRUFBRSxTQUFTO0FBQ3BHO0FBRU8sU0FBUyxjQUFjLE1BQWM7QUFDeEMsTUFBSTtBQUNBLFdBQU8sU0FBUyxJQUFJO0FBQUEsRUFDeEIsU0FBUyxHQUFHO0FBQ1IsUUFBSSxnQkFBZ0IsQ0FBQyxHQUFHO0FBQ3BCO0FBQUEsSUFDSjtBQUNBLFVBQU07QUFBQSxFQUNWO0FBQ0o7QUFFTyxTQUFTLGtCQUFrQixNQUFjO0FBQzVDLE1BQUk7QUFDQSxXQUFPLEtBQUssTUFBTSxhQUFhLE1BQU0sT0FBTyxDQUFDO0FBQUEsRUFDakQsU0FBUyxHQUFHO0FBQ1IsUUFBSSxnQkFBZ0IsQ0FBQyxHQUFHO0FBQ3BCO0FBQUEsSUFDSjtBQUNBLFFBQUksYUFBYSxhQUFhO0FBQzFCLFFBQUUsVUFBVSxpQkFBaUIsSUFBSSxLQUFLLEVBQUUsT0FBTztBQUMvQyxZQUFNO0FBQUEsSUFDVjtBQUNBLFVBQU07QUFBQSxFQUNWO0FBQ0o7QUFFTyxTQUFTLGlCQUFpQixNQUFjO0FBQzNDLE1BQUk7QUFDQSxXQUFPLFlBQVksSUFBSTtBQUFBLEVBQzNCLFNBQVMsR0FBRztBQUNSLFFBQUksZ0JBQWdCLENBQUMsR0FBRztBQUNwQjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0o7QUFFTyxNQUFNLGtCQUFrQixNQUFNO0FBQUM7QUFFL0IsU0FBUyxTQUFTLFNBQTRCO0FBQ2pELE1BQUksT0FBTyxZQUFZLFVBQVU7QUFDN0IsV0FBTyxDQUFDLEdBQUcsWUFBWSxPQUFPLENBQUM7QUFBQSxFQUNuQztBQUVBLFFBQU0sU0FBUyxNQUFjO0FBQzdCLGFBQVcsS0FBSyxTQUFTO0FBQ3JCLFdBQU8sS0FBSyxHQUFHLFlBQVksQ0FBQyxDQUFDO0FBQUEsRUFDakM7QUFFQSxTQUFPO0FBQ1g7QUFFQSxTQUFTLFlBQVksU0FBaUI7QUFFbEMsUUFBTSxLQUFLLElBQUksVUFBVSxRQUFRLFFBQVEsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3hELFFBQU0sVUFBVSxvQkFBSSxJQUFZO0FBQ2hDLGFBQVcsUUFBUSxHQUFHLEtBQUs7QUFDdkIsZUFBVyxRQUFRLGdCQUFnQixJQUFJLElBQUksR0FBRztBQUMxQyxjQUFRLElBQUksSUFBSTtBQUFBLElBQ3BCO0FBQUEsRUFDSjtBQUNBLFNBQU87QUFDWDtBQUVBLFNBQVMsZ0JBQWdCLElBQWUsVUFBaUM7QUFFckUsTUFBSSxXQUFXO0FBQ2YsTUFBSSxTQUFTO0FBQ2IsU0FBTyxPQUFPLFNBQVMsQ0FBQyxNQUFNLFVBQVU7QUFDcEMsUUFBSSxRQUFRO0FBQ1Isa0JBQVk7QUFBQSxJQUNoQixPQUFPO0FBQ0gsZUFBUztBQUFBLElBQ2I7QUFDQSxnQkFBWSxTQUFTLE1BQU07QUFBQSxFQUMvQjtBQUdBLE1BQUksQ0FBQyxTQUFTLFFBQVE7QUFDbEIsVUFBTSxPQUFPLGNBQWMsUUFBUTtBQUVuQyxRQUFJLE9BQU8sU0FBUyxTQUFTLEdBQUcsSUFBSSxnQkFBZ0IsUUFBUSxFQUFFLEdBQUc7QUFDN0QsYUFBTyxDQUFDLFFBQVE7QUFBQSxJQUNwQjtBQUVBLFdBQU8sQ0FBQztBQUFBLEVBQ1o7QUFHQSxRQUFNLFVBQVUsb0JBQUksSUFBWTtBQUVoQyxXQUFTLE1BQU0sTUFBY0EsV0FBaUM7QUFFMUQsUUFBSSxDQUFDQSxVQUFTLFFBQVE7QUFDbEIsY0FBUSxJQUFJLElBQUk7QUFDaEI7QUFBQSxJQUNKO0FBR0EsUUFBSSxPQUFPQSxVQUFTLENBQUMsTUFBTSxVQUFVO0FBQ2pDLFlBQU0sVUFBVSxRQUFRLE1BQU1BLFVBQVMsQ0FBQyxDQUFDO0FBQ3pDLFVBQUksY0FBYyxRQUFRLE1BQU1BLFVBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRztBQUMzQyxjQUFNLFNBQVNBLFVBQVMsTUFBTSxDQUFDLENBQUM7QUFDaEM7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUdBLFFBQUlBLFVBQVMsV0FBVyxLQUFLQSxVQUFTLENBQUMsTUFBTSxVQUFVO0FBQ25ELGNBQVEsSUFBSSxJQUFJO0FBQUEsSUFDcEI7QUFHQSxVQUFNLFdBQVcsaUJBQWlCLElBQUk7QUFDdEMsUUFBSSxDQUFDLFVBQVU7QUFDWDtBQUFBLElBQ0o7QUFHQSxlQUFXLFdBQVcsVUFBVTtBQUM1QixZQUFNLFVBQVUsUUFBUSxNQUFNLE9BQU87QUFHckMsVUFBSUEsVUFBUyxDQUFDLE1BQU0sVUFBVTtBQUMxQixZQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sR0FBR0EsV0FBVSxJQUFJLEdBQUc7QUFDeEMsZ0JBQU0sU0FBU0EsVUFBUyxNQUFNLENBQUMsQ0FBQztBQUFBLFFBQ3BDO0FBQ0E7QUFBQSxNQUNKO0FBR0EsVUFBSUEsVUFBUyxTQUFTLEdBQUc7QUFDckIsWUFBSSxHQUFHLFNBQVMsQ0FBQyxPQUFPLEdBQUdBLFVBQVMsTUFBTSxDQUFDLEdBQUcsSUFBSSxHQUFHO0FBQ2pELGdCQUFNLFNBQVNBLFVBQVMsTUFBTSxDQUFDLENBQUM7QUFBQSxRQUNwQztBQUFBLE1BQ0o7QUFHQSxZQUFNLFNBQVNBLFNBQVE7QUFBQSxJQUMzQjtBQUFBLEVBQ0o7QUFFQSxRQUFNLFVBQVUsUUFBUTtBQUV4QixTQUFPO0FBQ1g7QUFFTyxTQUFTLFlBQVksTUFBYztBQUN0QyxTQUFPLENBQUMsQ0FBQyxnQkFBZ0IsVUFBVSxNQUFNLFNBQVMsSUFBSSxFQUFFLFlBQVksQ0FBQztBQUN6RTtBQUVPLFNBQVMsT0FBTyxNQUFjO0FBQ2pDLFNBQU8sQ0FBQyxDQUFDLGdCQUFnQixVQUFVLE1BQU0sU0FBUyxJQUFJLEVBQUUsT0FBTyxDQUFDO0FBQ3BFOyIsCiAgIm5hbWVzIjogWyJzZWdtZW50cyJdCn0K
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3V0aWwvZmlsZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjItMjAyNCBNYXR0ZXIuanMgQXV0aG9yc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQgeyByZWFkZGlyU3luYywgcmVhZEZpbGVTeW5jLCBzdGF0U3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBpZ25vcmVFcnJvclN5bmMgfSBmcm9tIFwiLi9lcnJvcnMuanNcIjtcblxuZnVuY3Rpb24gaXNOb3RGb3VuZEVycm9yKGU6IHVua25vd24pIHtcbiAgICByZXR1cm4gdHlwZW9mIGUgPT09IFwib2JqZWN0XCIgJiYgZSAhPT0gbnVsbCAmJiBcImNvZGVcIiBpbiBlICYmIChlLmNvZGUgPT09IFwiRU5PRU5UXCIgfHwgZS5jb2RlID09PSBcIkVOT1RESVJcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXliZVN0YXRTeW5jKHBhdGg6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBzdGF0U3luYyhwYXRoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChpc05vdEZvdW5kRXJyb3IoZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1heWJlUmVhZEpzb25TeW5jKHBhdGg6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhwYXRoLCBcInV0Zi04XCIpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChpc05vdEZvdW5kRXJyb3IoZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgICAgICBlLm1lc3NhZ2UgPSBgRXJyb3IgcGFyc2luZyAke3BhdGh9OiAke2UubWVzc2FnZX1gO1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1heWJlUmVhZGRpclN5bmMocGF0aDogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlYWRkaXJTeW5jKHBhdGgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGlzTm90Rm91bmRFcnJvcihlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaXJlY3RvcnkocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuICEhaWdub3JlRXJyb3JTeW5jKFwiRU5PRU5UXCIsICgpID0+IHN0YXRTeW5jKHBhdGgpLmlzRGlyZWN0b3J5KCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGaWxlKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiAhIWlnbm9yZUVycm9yU3luYyhcIkVOT0VOVFwiLCAoKSA9PiBzdGF0U3luYyhwYXRoKS5pc0ZpbGUoKSk7XG59XG5cbi8qKlxuICogVGlueSB2aXJ0dWFsIGZpbGVzeXN0ZW0gZHJpdmVyLiAgQ3VycmVudGx5IHVzZWQgb25seSBmb3IgcHJvY2Vzc2luZyBnbG9icy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlc3lzdGVtU3luYzxUIGV4dGVuZHMgRmlsZXN5c3RlbVN5bmMuU3RhdCA9IEZpbGVzeXN0ZW1TeW5jLlN0YXQ+IHtcbiAgICByZXNvbHZlKC4uLnNlZ21lbnRzOiBzdHJpbmdbXSk6IHN0cmluZztcbiAgICByZWFkZGlyKHBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgIHN0YXQocGF0aDogc3RyaW5nKTogVCB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEZpbGVzeXN0ZW1TeW5jKCk6IEZpbGVzeXN0ZW1TeW5jPEZpbGVzeXN0ZW1TeW5jLlN0YXQ+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICByZXNvbHZlKC4uLnNlZ21lbnRzKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSguLi5zZWdtZW50cyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVhZGRpcihwYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF5YmVSZWFkZGlyU3luYyhwYXRoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBzdGF0KHBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gbWF5YmVTdGF0U3luYyhwYXRoKTtcbiAgICAgICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGdldCBpc0ZpbGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHMuaXNGaWxlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgZ2V0IGlzRGlyZWN0b3J5KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRzLmlzRGlyZWN0b3J5KCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIEZpbGVzeXN0ZW1TeW5jIHtcbiAgICBleHBvcnQgaW50ZXJmYWNlIFN0YXQge1xuICAgICAgICBpc0RpcmVjdG9yeT86IGJvb2xlYW47XG4gICAgICAgIGlzRmlsZT86IGJvb2xlYW47XG4gICAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BLFNBQVMsYUFBYSxjQUFjLGdCQUFnQjtBQUNwRCxTQUFTLGVBQWU7QUFDeEIsU0FBUyx1QkFBdUI7QUFFaEMsU0FBUyxnQkFBZ0IsR0FBWTtBQUNqQyxTQUFPLE9BQU8sTUFBTSxZQUFZLE1BQU0sUUFBUSxVQUFVLE1BQU0sRUFBRSxTQUFTLFlBQVksRUFBRSxTQUFTO0FBQ3BHO0FBRU8sU0FBUyxjQUFjLE1BQWM7QUFDeEMsTUFBSTtBQUNBLFdBQU8sU0FBUyxJQUFJO0FBQUEsRUFDeEIsU0FBUyxHQUFHO0FBQ1IsUUFBSSxnQkFBZ0IsQ0FBQyxHQUFHO0FBQ3BCO0FBQUEsSUFDSjtBQUNBLFVBQU07QUFBQSxFQUNWO0FBQ0o7QUFFTyxTQUFTLGtCQUFrQixNQUFjO0FBQzVDLE1BQUk7QUFDQSxXQUFPLEtBQUssTUFBTSxhQUFhLE1BQU0sT0FBTyxDQUFDO0FBQUEsRUFDakQsU0FBUyxHQUFHO0FBQ1IsUUFBSSxnQkFBZ0IsQ0FBQyxHQUFHO0FBQ3BCO0FBQUEsSUFDSjtBQUNBLFFBQUksYUFBYSxhQUFhO0FBQzFCLFFBQUUsVUFBVSxpQkFBaUIsSUFBSSxLQUFLLEVBQUUsT0FBTztBQUMvQyxZQUFNO0FBQUEsSUFDVjtBQUNBLFVBQU07QUFBQSxFQUNWO0FBQ0o7QUFFTyxTQUFTLGlCQUFpQixNQUFjO0FBQzNDLE1BQUk7QUFDQSxXQUFPLFlBQVksSUFBSTtBQUFBLEVBQzNCLFNBQVMsR0FBRztBQUNSLFFBQUksZ0JBQWdCLENBQUMsR0FBRztBQUNwQjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0o7QUFFTyxTQUFTLFlBQVksTUFBYztBQUN0QyxTQUFPLENBQUMsQ0FBQyxnQkFBZ0IsVUFBVSxNQUFNLFNBQVMsSUFBSSxFQUFFLFlBQVksQ0FBQztBQUN6RTtBQUVPLFNBQVMsT0FBTyxNQUFjO0FBQ2pDLFNBQU8sQ0FBQyxDQUFDLGdCQUFnQixVQUFVLE1BQU0sU0FBUyxJQUFJLEVBQUUsT0FBTyxDQUFDO0FBQ3BFO0FBV08sU0FBUyxpQkFBc0Q7QUFDbEUsU0FBTztBQUFBLElBQ0gsV0FBVyxVQUFVO0FBQ2pCLGFBQU8sUUFBUSxHQUFHLFFBQVE7QUFBQSxJQUM5QjtBQUFBLElBRUEsUUFBUSxNQUFNO0FBQ1YsYUFBTyxpQkFBaUIsSUFBSTtBQUFBLElBQ2hDO0FBQUEsSUFFQSxLQUFLLE1BQU07QUFDUCxZQUFNLFFBQVEsY0FBYyxJQUFJO0FBQ2hDLFVBQUksT0FBTztBQUNQLGVBQU87QUFBQSxVQUNILElBQUksU0FBUztBQUNULG1CQUFPLE1BQU0sT0FBTztBQUFBLFVBQ3hCO0FBQUEsVUFFQSxJQUFJLGNBQWM7QUFDZCxtQkFBTyxNQUFNLFlBQVk7QUFBQSxVQUM3QjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDSjsiLAogICJuYW1lcyI6IFtdCn0K

@@ -9,3 +9,4 @@ /**

export * from "./file.js";
export * from "./glob.js";
export * from "./package.js";
//# sourceMappingURL=index.d.ts.map

@@ -9,3 +9,4 @@ /**

export * from "./file.js";
export * from "./glob.js";
export * from "./package.js";
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3V0aWwvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyLTIwMjQgTWF0dGVyLmpzIEF1dGhvcnNcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuZXhwb3J0ICogZnJvbSBcIi4vY29tbWFuZGVyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2ZpbGUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3BhY2thZ2UuanNcIjtcbiJdLAogICJtYXBwaW5ncyI6ICJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjOyIsCiAgIm5hbWVzIjogW10KfQo=
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3V0aWwvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyLTIwMjQgTWF0dGVyLmpzIEF1dGhvcnNcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuZXhwb3J0ICogZnJvbSBcIi4vY29tbWFuZGVyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2ZpbGUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2dsb2IuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3BhY2thZ2UuanNcIjtcbiJdLAogICJtYXBwaW5ncyI6ICJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYzsiLAogICJuYW1lcyI6IFtdCn0K

@@ -10,3 +10,4 @@ /**

import { ignoreError, ignoreErrorSync } from "./errors.js";
import { globSync, isFile, maybeReadJsonSync, maybeStatSync } from "./file.js";
import { isFile, maybeReadJsonSync, maybeStatSync } from "./file.js";
import { globSync } from "./glob.js";
import { Progress } from "./progress.js";

@@ -420,2 +421,2 @@ import { toolsPath } from "./tools-path.cjs";

};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3V0aWwvcGFja2FnZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjItMjAyNCBNYXR0ZXIuanMgQXV0aG9yc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMsIHN0YXRTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyByZWFkZGlyLCByZWFkRmlsZSwgc3RhdCwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBpZ25vcmVFcnJvciwgaWdub3JlRXJyb3JTeW5jIH0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5pbXBvcnQgeyBnbG9iU3luYywgaXNGaWxlLCBtYXliZVJlYWRKc29uU3luYywgbWF5YmVTdGF0U3luYyB9IGZyb20gXCIuL2ZpbGUuanNcIjtcbmltcG9ydCB7IFByb2dyZXNzIH0gZnJvbSBcIi4vcHJvZ3Jlc3MuanNcIjtcbmltcG9ydCB7IHRvb2xzUGF0aCB9IGZyb20gXCIuL3Rvb2xzLXBhdGguY2pzXCI7XG5cbmV4cG9ydCBjbGFzcyBKc29uTm90Rm91bmRFcnJvciBleHRlbmRzIEVycm9yIHt9XG5cbmV4cG9ydCBjb25zdCBDT05GSUdfUEFUSCA9IGBzcmMvYnVpbGQuY29uZmlnLnRzYDtcbmV4cG9ydCBjb25zdCBDT0RFR0VOX1BBVEggPSBgY29kZWdlbmA7XG5cbmNvbnN0IHBhY2thZ2VGb3JQYXRoID0ge30gYXMgUmVjb3JkPHN0cmluZywgUGFja2FnZSB8IHVuZGVmaW5lZCB8IG51bGw+O1xuXG5mdW5jdGlvbiBmaW5kSnNvbihmaWxlbmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcgPSBcIi5cIiwgdGl0bGU/OiBzdHJpbmcpIHtcbiAgICBwYXRoID0gcmVzb2x2ZShwYXRoKTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCBqc29uID0gaWdub3JlRXJyb3JTeW5jKFtcIkVOT0VOVFwiLCBcIkVOT1RESVJcIl0sICgpID0+XG4gICAgICAgICAgICBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhyZXNvbHZlKHBhdGgsIGZpbGVuYW1lKSkudG9TdHJpbmcoKSksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChqc29uKSB7XG4gICAgICAgICAgICBpZiAodGl0bGUgPT09IHVuZGVmaW5lZCB8fCBqc29uLm5hbWUgPT09IHRpdGxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcm9vdDogcGF0aCwganNvbiB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGRpcm5hbWUocGF0aCk7XG4gICAgICAgIGlmIChwYXJlbnQgPT09IHBhdGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBKc29uTm90Rm91bmRFcnJvcihgQ291bGQgbm90IGxvY2F0ZSAke3RpdGxlID8/IGZpbGVuYW1lfWApO1xuICAgICAgICB9XG4gICAgICAgIHBhdGggPSBwYXJlbnQ7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc0RpcmVjdG9yeShwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gISFpZ25vcmVFcnJvclN5bmMoXCJFTk9FTlRcIiwgKCkgPT4gc3RhdFN5bmMocGF0aCkuaXNEaXJlY3RvcnkoKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBQYWNrYWdlIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAganNvbjogUGFja2FnZUpzb247XG4gICAgc3VwcG9ydHNFc206IGJvb2xlYW47XG4gICAgc3VwcG9ydHNDanM6IGJvb2xlYW47XG4gICAgaGFzU3JjOiBib29sZWFuO1xuICAgIGhhc1Rlc3RzOiBib29sZWFuO1xuICAgIGhhc0NvbmZpZzogYm9vbGVhbjtcbiAgICBpc0xpYnJhcnk6IGJvb2xlYW47XG4gICAgI2FsaWFzZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gICAgY29uc3RydWN0b3Ioe1xuICAgICAgICBwYXRoID0gXCIuXCIsXG4gICAgICAgIG5hbWUsXG4gICAgfToge1xuICAgICAgICBwYXRoPzogc3RyaW5nO1xuICAgICAgICBuYW1lPzogc3RyaW5nO1xuICAgIH0gPSB7fSkge1xuICAgICAgICBjb25zdCB7IHJvb3QsIGpzb24gfSA9IGZpbmRKc29uKFwicGFja2FnZS5qc29uXCIsIHBhdGgsIG5hbWUpO1xuICAgICAgICB0aGlzLnBhdGggPSByb290O1xuICAgICAgICB0aGlzLmpzb24gPSBqc29uO1xuXG4gICAgICAgIGNvbnN0IHsgZXNtLCBjanMgfSA9IHNlbGVjdEZvcm1hdHModGhpcy5qc29uKTtcbiAgICAgICAgdGhpcy5zdXBwb3J0c0VzbSA9IGVzbTtcbiAgICAgICAgdGhpcy5zdXBwb3J0c0NqcyA9IGNqcztcblxuICAgICAgICB0aGlzLmhhc1NyYyA9IGlzRGlyZWN0b3J5KHRoaXMucmVzb2x2ZShcInNyY1wiKSk7XG4gICAgICAgIHRoaXMuaGFzVGVzdHMgPSBpc0RpcmVjdG9yeSh0aGlzLnJlc29sdmUoXCJ0ZXN0XCIpKTtcblxuICAgICAgICBjb25zdCByZWZzID0gbWF5YmVSZWFkSnNvblN5bmModGhpcy5yZXNvbHZlKFwidHNjb25maWcuanNvblwiKSk/LnJlZmVyZW5jZXMgYXMgdW5kZWZpbmVkIHwgeyBwYXRoOiBzdHJpbmcgfVtdO1xuICAgICAgICBpZiAocmVmcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoIXJlZnMuZmluZChyZWYgPT4gdGhpcy5yZXNvbHZlKHJlZi5wYXRoKSA9PT0gdGhpcy5yZXNvbHZlKFwic3JjXCIpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzU3JjID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlZnMuZmluZChyZWYgPT4gdGhpcy5yZXNvbHZlKHJlZi5wYXRoKSA9PT0gdGhpcy5yZXNvbHZlKFwidGVzdFwiKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1Rlc3RzID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzTGlicmFyeSA9ICEhKHRoaXMuanNvbi5tYWluIHx8IHRoaXMuanNvbi5tb2R1bGUgfHwgdGhpcy5qc29uLmV4cG9ydHMpO1xuXG4gICAgICAgIHRoaXMuaGFzQ29uZmlnID0gdGhpcy5oYXNGaWxlKHRoaXMucmVzb2x2ZShDT05GSUdfUEFUSCkpO1xuICAgIH1cblxuICAgIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5qc29uLm5hbWU7XG4gICAgfVxuXG4gICAgZ2V0IHZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpzb24udmVyc2lvbjtcbiAgICB9XG5cbiAgICBnZXQgZXhwb3J0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuanNvbi5leHBvcnRzO1xuICAgIH1cblxuICAgIGdldCBoYXNDb2RlZ2VuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNEaXJlY3RvcnkoQ09ERUdFTl9QQVRIKTtcbiAgICB9XG5cbiAgICByZXNvbHZlKC4uLnBhdGhzOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLnBhdGgsIC4uLnBhdGhzKTtcbiAgICB9XG5cbiAgICByZWxhdGl2ZShwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHJlbGF0aXZlKHRoaXMucGF0aCwgcGF0aCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2xvYihwYXR0ZXJuOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgICAgICAvLyBHbG9iIG9ubHkgdW5kZXJzdGFuZHMgZm9yd2FyZC1zbGFzaCBhcyBzZXBhcmF0b3IgYmVjYXVzZSByZWFzb25zXG4gICAgICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcGF0dGVybiA9IHRoaXMucmVzb2x2ZShwYXR0ZXJuKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLm1hcChzID0+IHRoaXMucmVzb2x2ZShzKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDdXJyZW50IGdsb2IgaW1wbGVtZW50YXRpb24gaXNuJ3QgYWN0dWFsbHkgYXN5bmMgYXMgdGhpcyBpcyBmYXN0ZXIgYW5kIHdlIG9ubHkgd2FsayBzbWFsbCBkaXJlY3RvcnkgdHJlZXNcbiAgICAgICAgcmV0dXJuIGdsb2JTeW5jKHBhdHRlcm4pO1xuICAgIH1cblxuICAgIHN0YXJ0KHdoYXQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBwcm9ncmVzcyA9IG5ldyBQcm9ncmVzcygpO1xuICAgICAgICBwcm9ncmVzcy5zdGFydHVwKHdoYXQsIHRoaXMpO1xuICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7XG4gICAgfVxuXG4gICAgYXN5bmMgbGFzdE1vZGlmaWVkKC4uLnBhdGhzOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXN0TW9kaWZpZWRBYnNvbHV0ZShwYXRocy5tYXAocCA9PiB0aGlzLnJlc29sdmUocCkpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGxhc3RNb2RpZmllZEFic29sdXRlKHBhdGhzOiBzdHJpbmdbXSkge1xuICAgICAgICBsZXQgbXRpbWUgPSAwO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIHBhdGhzLm1hcChhc3luYyBwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGlnbm9yZUVycm9yKFwiRU5PRU5UXCIsIGFzeW5jICgpID0+IGF3YWl0IHN0YXQocCkpO1xuICAgICAgICAgICAgICAgIGlmICghc3RhdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCB0aGlzTXRpbWU7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aHMgPSAoYXdhaXQgcmVhZGRpcihwKSkubWFwKHAyID0+IHJlc29sdmUocCwgcDIpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpc010aW1lID0gYXdhaXQgdGhpcy5sYXN0TW9kaWZpZWRBYnNvbHV0ZShwYXRocyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc010aW1lID0gc3RhdHMubXRpbWVNcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNNdGltZSA+IG10aW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIG10aW1lID0gdGhpc010aW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbXRpbWU7XG4gICAgfVxuXG4gICAgZ2V0IGRlcGVuZGVuY2llcygpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IEFycmF5PHN0cmluZz4oKTtcbiAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIFtcImRlcGVuZGVuY2llc1wiLCBcIm9wdGlvbmFsRGVwZW5kZW5jaWVzXCIsIFwiZGV2RGVwZW5kZW5jaWVzXCIsIFwicGVlckRlcGVuZGVuY2llc1wiXSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmpzb25bdHlwZV0gPT09IFwib2JqZWN0XCIgJiYgdGhpcy5qc29uW3R5cGVdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gWy4uLnJlc3VsdCwgLi4uT2JqZWN0LmtleXModGhpcy5qc29uW3R5cGVdKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsuLi5uZXcgU2V0KHJlc3VsdCldO1xuICAgIH1cblxuICAgIGdldCB3b3Jrc3BhY2UoKSB7XG4gICAgICAgIHJldHVybiBQYWNrYWdlLndvcmtzcGFjZUZvcih0aGlzLnBhdGgpO1xuICAgIH1cblxuICAgIGdldCBpc1dvcmtzcGFjZSgpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5qc29uLndvcmtzcGFjZXMpO1xuICAgIH1cblxuICAgIGdldCByb290KCk6IFBhY2thZ2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud29ya3NwYWNlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgSnNvbk5vdEZvdW5kRXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBzdGF0aWMgc2V0IHdvcmtpbmdEaXIod2Q6IHN0cmluZykge1xuICAgICAgICB3b3JraW5nRGlyID0gd2Q7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCB3b3Jrc3BhY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndvcmtzcGFjZUZvcih3b3JraW5nRGlyKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgd29ya3NwYWNlRm9yKGN3ZDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghd29ya3NwYWNlKSB7XG4gICAgICAgICAgICB3b3Jrc3BhY2UgPSBmaW5kKGN3ZCwgcGtnID0+IEFycmF5LmlzQXJyYXkocGtnLmpzb24ud29ya3NwYWNlcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3b3Jrc3BhY2U7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCB0b29scygpIHtcbiAgICAgICAgaWYgKCF0b29scykge1xuICAgICAgICAgICAgdG9vbHMgPSBuZXcgUGFja2FnZSh7IHBhdGg6IHRvb2xzUGF0aCB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9vbHM7XG4gICAgfVxuXG4gICAgc3RhdGljIGZpbmRFeHBvcnQobmFtZTogc3RyaW5nLCB0eXBlOiBcImNqc1wiIHwgXCJlc21cIiA9IFwiZXNtXCIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud29ya3NwYWNlLnJlc29sdmVJbXBvcnQobmFtZSwgdHlwZSk7XG4gICAgfVxuXG4gICAgcmVzb2x2ZUV4cG9ydChuYW1lOiBzdHJpbmcsIHR5cGU6IFwiY2pzXCIgfCBcImVzbVwiID0gXCJlc21cIikge1xuICAgICAgICBpZiAoIW5hbWUuc3RhcnRzV2l0aChcIi5cIikpIHtcbiAgICAgICAgICAgIG5hbWUgPSBgLi8ke25hbWV9YDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleHBvcnREZXRhaWwgPSB0aGlzLmV4cG9ydHM/LltuYW1lXTtcblxuICAgICAgICBpZiAoZXhwb3J0RGV0YWlsKSB7XG4gICAgICAgICAgICBjb25zdCBleHAgPSBmaW5kRXhwb3J0Q29uZGl0aW9uKGV4cG9ydERldGFpbCwgdHlwZSk7XG4gICAgICAgICAgICBpZiAoZXhwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZShleHApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hbWUgPT09IFwiLlwiKSB7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gXCJlc21cIiAmJiB0aGlzLmpzb24ubW9kdWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZSh0aGlzLmpzb24ubW9kdWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmpzb24ubWFpbikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmUodGhpcy5qc29uLm1haW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVzb2x2ZSBleHBvcnQgJHtuYW1lfSBpbiBwYWNrYWdlICR7dGhpcy5uYW1lfWApO1xuICAgIH1cblxuICAgIGZpbmRQYWNrYWdlKG5hbWU6IHN0cmluZykge1xuICAgICAgICBsZXQgcmVzb2x2ZUluID0gdGhpcy5wYXRoO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgaWYgKGlzRGlyZWN0b3J5KHJlc29sdmUocmVzb2x2ZUluLCBcIm5vZGVfbW9kdWxlc1wiLCBuYW1lKSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5leHRSZXNvbHZlSW4gPSBkaXJuYW1lKHJlc29sdmVJbik7XG4gICAgICAgICAgICBpZiAobmV4dFJlc29sdmVJbiA9PT0gcmVzb2x2ZUluKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBtb2R1bGUgJHtuYW1lfSBmcm9tICR7dGhpcy5wYXRofWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZUluID0gbmV4dFJlc29sdmVJbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQYWNrYWdlLmZvclBhdGgocmVzb2x2ZShyZXNvbHZlSW4sIFwibm9kZV9tb2R1bGVzXCIsIG5hbWUpKTtcbiAgICB9XG5cbiAgICByZXNvbHZlSW1wb3J0KG5hbWU6IHN0cmluZywgdHlwZTogXCJjanNcIiB8IFwiZXNtXCIgPSBcImVzbVwiKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gbmFtZS5zcGxpdChcIi9cIik7XG4gICAgICAgIGxldCBwYWNrYWdlTmFtZSA9IHNlZ21lbnRzLnNoaWZ0KCkgYXMgc3RyaW5nO1xuICAgICAgICBpZiAocGFja2FnZU5hbWUuc3RhcnRzV2l0aChcIkBcIikgJiYgc2VnbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYWNrYWdlTmFtZSA9IGAke3BhY2thZ2VOYW1lfS8ke3NlZ21lbnRzLnNoaWZ0KCl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBrZyA9IHRoaXMuZmluZFBhY2thZ2UocGFja2FnZU5hbWUpO1xuXG4gICAgICAgIHJldHVybiBwa2cucmVzb2x2ZUV4cG9ydChzZWdtZW50cy5sZW5ndGggPyBzZWdtZW50cy5qb2luKFwiL1wiKSA6IFwiLlwiLCB0eXBlKTtcbiAgICB9XG5cbiAgICBoYXNGaWxlKHBhdGg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gISF0aGlzLiNtYXliZVN0YXQocGF0aCk/LmlzRmlsZSgpO1xuICAgIH1cblxuICAgIGhhc0RpcmVjdG9yeShwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy4jbWF5YmVTdGF0KHBhdGgpPy5pc0RpcmVjdG9yeSgpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlYWRGaWxlKHBhdGg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gcmVhZEZpbGUodGhpcy5yZXNvbHZlKHBhdGgpLCBcInV0Zi04XCIpO1xuICAgIH1cblxuICAgIHJlYWRGaWxlU3luYyhwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRGaWxlU3luYyh0aGlzLnJlc29sdmUocGF0aCksIFwidXRmLThcIik7XG4gICAgfVxuXG4gICAgYXN5bmMgd3JpdGVGaWxlKHBhdGg6IHN0cmluZywgY29udGVudHM6IHVua25vd24pIHtcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlKHRoaXMucmVzb2x2ZShwYXRoKSwgYCR7Y29udGVudHN9YCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2F2ZSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy53cml0ZUZpbGUoam9pbih0aGlzLnBhdGgsIFwicGFja2FnZS5qc29uXCIpLCBKU09OLnN0cmluZ2lmeSh0aGlzLmpzb24sIHVuZGVmaW5lZCwgNCkpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlYWRKc29uKHBhdGg6IHN0cmluZykge1xuICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgdGhpcy5yZWFkRmlsZShwYXRoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgZSA9IG5ldyBFcnJvcihgJHtlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKGUgYXMgRXJyb3IpLm1lc3NhZ2UgPSBgRXJyb3IgcGFyc2luZyBcIiR7dGhpcy5yZXNvbHZlKHBhdGgpfVwiOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWA7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgd3JpdGVKc29uKHBhdGg6IHN0cmluZywgdmFsdWU6IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMud3JpdGVGaWxlKHBhdGgsIEpTT04uc3RyaW5naWZ5KHZhbHVlLCB1bmRlZmluZWQsIDQpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbWF5YmVGb3JQYXRoKHBhdGg6IHN0cmluZykge1xuICAgICAgICBmdW5jdGlvbiBmaW5kKHBhdGg6IHN0cmluZyk6IFBhY2thZ2UgfCBudWxsIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBwYWNrYWdlRm9yUGF0aFtwYXRoXTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChleGlzdHNTeW5jKGpvaW4ocGF0aCwgXCJwYWNrYWdlLmpzb25cIikpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBQYWNrYWdlKHsgcGF0aCB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmaW5kKGRpcm5hbWUocGF0aCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYWNrYWdlRm9yUGF0aFtwYXRoXSA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBmaW5kKHBhdGgpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQgPz8gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHN0YXRpYyBmb3JQYXRoKHBhdGg6IHN0cmluZykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLm1heWJlRm9yUGF0aChwYXRoKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgcGFja2FnZS5qc29uIGZvciBcIiR7cGF0aH1cImApO1xuICAgIH1cblxuICAgIGdldCBhbGlhc2VzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgICAgICBpZiAodGhpcy4jYWxpYXNlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jYWxpYXNlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI2FsaWFzZXMgPSB7XG4gICAgICAgICAgICAuLi5QYWNrYWdlLm1heWJlRm9yUGF0aChkaXJuYW1lKHRoaXMucGF0aCkpPy5hbGlhc2VzLFxuICAgICAgICAgICAgLi4udGhpcy5qc29uLmltcG9ydHMsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuI2FsaWFzZXM7XG4gICAgfVxuXG4gICAgZ2V0IG1vZHVsZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxpc3RNb2R1bGVzKGZhbHNlKTtcbiAgICB9XG5cbiAgICBnZXQgc291cmNlTW9kdWxlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdE1vZHVsZXModHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbWFwIG9mIG1vZHVsZSBuYW1lIC0+IGltcGxlbWVudGF0aW9uIGZpbGUuICBJZiBcInNvdXJjZVwiIGlzIHRydWUsIHNlYXJjaGVzIHNvdXJjZSBmaWxlcyByYXRoZXIgdGhhblxuICAgICAqIHRyYW5zcGlsZWQgZmlsZXMuICBXZSBkbyB0aGlzIHJhdGhlciB0aGFuIGZpbmRpbmcgdHJhbnNwaWxhdGlvbiBmaWxlcyB0aGVuIG1hcHBpbmcgdG8gc291cmNlIGZpbGVzIHNvIHRoaXMgd29ya3NcbiAgICAgKiBldmVuIGlmIHRoZXJlIGlzbid0IGEgYnVpbGQuXG4gICAgICovXG4gICAgbGlzdE1vZHVsZXMoc291cmNlOiBib29sZWFuLCAuLi5jb25kaXRpb25zOiBzdHJpbmdbXSkge1xuICAgICAgICBpZiAoIWNvbmRpdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25kaXRpb25zID0gW3RoaXMuc3VwcG9ydHNFc20gPyBcImltcG9ydFwiIDogXCJyZXF1aXJlXCIsIFwiZGVmYXVsdFwiXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZHVsZXMgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gICAgICAgIGNvbnN0IGV4cG9ydHMgPSB0aGlzLmV4cG9ydHM7XG4gICAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIiAmJiBleHBvcnRzICE9PSBudWxsKSB7XG4gICAgICAgICAgICBmaW5kTW9kdWxlcyhzb3VyY2UsIG5ldyBTZXQoY29uZGl0aW9ucyksIG1vZHVsZXMsIHRoaXMubmFtZSwgdGhpcy5wYXRoLCBleHBvcnRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtb2R1bGVzO1xuICAgIH1cblxuICAgICNtYXliZVN0YXQocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBtYXliZVN0YXRTeW5jKHRoaXMucmVzb2x2ZShwYXRoKSk7XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBQYWNrYWdlSnNvbiA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGltcG9ydHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgbWF0dGVyPzoge1xuICAgICAgICB0ZXN0PzogYm9vbGVhbjtcbiAgICB9O1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn07XG5cbmxldCB3b3JraW5nRGlyID0gXCIuXCI7XG5sZXQgd29ya3NwYWNlOiBQYWNrYWdlIHwgdW5kZWZpbmVkO1xubGV0IHRvb2xzOiBQYWNrYWdlIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBmaW5kKHN0YXJ0RGlyOiBzdHJpbmcsIHNlbGVjdG9yOiAocGtnOiBQYWNrYWdlKSA9PiBib29sZWFuKTogUGFja2FnZSB7XG4gICAgbGV0IHBrZyA9IG5ldyBQYWNrYWdlKHsgcGF0aDogc3RhcnREaXIgfSk7XG4gICAgd2hpbGUgKCFzZWxlY3Rvcihwa2cpKSB7XG4gICAgICAgIHBrZyA9IG5ldyBQYWNrYWdlKHsgcGF0aDogZGlybmFtZShwa2cucGF0aCkgfSk7XG4gICAgfVxuICAgIHJldHVybiBwa2c7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEZvcm1hdHMoanNvbjogYW55KSB7XG4gICAgbGV0IGVzbTogYm9vbGVhbiwgY2pzOiBib29sZWFuO1xuXG4gICAgaWYgKGpzb24udHlwZSA9PT0gXCJtb2R1bGVcIikge1xuICAgICAgICBlc20gPSB0cnVlO1xuICAgICAgICBjanMgPVxuICAgICAgICAgICAgKGpzb24ubWFpbiAhPT0gdW5kZWZpbmVkICYmIGpzb24ubW9kdWxlICE9PSB1bmRlZmluZWQpIHx8XG4gICAgICAgICAgICAhIU9iamVjdC52YWx1ZXMoanNvbi5leHBvcnRzID8/IHt9KS5maW5kKChleHA6IGFueSkgPT4gZXhwLnJlcXVpcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNqcyA9IHRydWU7XG4gICAgICAgIGVzbSA9ICEhanNvbi5tb2R1bGUgfHwgISFPYmplY3QudmFsdWVzKGpzb24uZXhwb3J0cyA/PyB7fSkuZmluZCgoZXhwOiBhbnkpID0+IGV4cC5pbXBvcnQpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGVzbSwgY2pzIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRFeHBvcnRDb25kaXRpb24oZGV0YWlsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCB0eXBlOiBcImVzbVwiIHwgXCJjanNcIik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGUgPT09IFwiZXNtXCIgJiYgZGV0YWlsLmltcG9ydCkge1xuICAgICAgICBsZXQgZXhwID0gZGV0YWlsLmltcG9ydDtcbiAgICAgICAgaWYgKGV4cCAmJiB0eXBlb2YgZXhwICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBleHAgPSBmaW5kRXhwb3J0Q29uZGl0aW9uKGV4cCwgdHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4cCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCBleHAgPSBkZXRhaWwucmVxdWlyZSA/PyBkZXRhaWwubm9kZSA/PyBkZXRhaWwuZGVmYXVsdDtcbiAgICBpZiAoZXhwICYmIHR5cGVvZiBleHAgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgZXhwID0gZmluZEV4cG9ydENvbmRpdGlvbihleHAsIHR5cGUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXhwID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBleHA7XG4gICAgfVxufVxuXG50eXBlIENvbmRpdGlvbnMgPSB7IFtuYW1lOiBzdHJpbmddOiBFeHBvcnRzIH07XG5cbnR5cGUgRXhwb3J0cyA9IHN0cmluZyB8IENvbmRpdGlvbnMgfCBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25zPjtcblxuZnVuY3Rpb24gZmluZE1vZHVsZXMoXG4gICAgc291cmNlOiBib29sZWFuLFxuICAgIGNvbmRpdGlvbnM6IFNldDxzdHJpbmc+LFxuICAgIHRhcmdldDogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBwcmVmaXg6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgZXhwb3J0czogRXhwb3J0cyxcbikge1xuICAgIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBhZGRNb2R1bGVHbG9icyhzb3VyY2UsIHRhcmdldCwgcHJlZml4LCBwYXRoLCBleHBvcnRzKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZXhwb3J0cykpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBleHBvcnRzKSB7XG4gICAgICAgICAgICBmaW5kTW9kdWxlcyhzb3VyY2UsIGNvbmRpdGlvbnMsIHRhcmdldCwgcHJlZml4LCBwYXRoLCBlbnRyeSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiICYmIGV4cG9ydHMgIT09IG51bGwpIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkQ29uZGl0aW9uID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGV4cG9ydHMpIHtcbiAgICAgICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChcIi5cIikpIHtcbiAgICAgICAgICAgICAgICBmaW5kTW9kdWxlcyhzb3VyY2UsIGNvbmRpdGlvbnMsIHRhcmdldCwgam9pbihwcmVmaXgsIGtleSksIHBhdGgsIGV4cG9ydHNba2V5XSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzZWxlY3RlZENvbmRpdGlvbiAmJiBjb25kaXRpb25zLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgZmluZE1vZHVsZXMoc291cmNlLCBjb25kaXRpb25zLCB0YXJnZXQsIHByZWZpeCwgcGF0aCwgZXhwb3J0c1trZXldKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmRpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNYWxmb3JtZWQgZXhwb3J0cyBmaWVsZCBpbiBwYWNrYWdlLmpzb25cIik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhZGRNb2R1bGVHbG9icyhzb3VyY2U6IGJvb2xlYW4sIHRhcmdldDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgbmFtZTogc3RyaW5nLCBiYXNlOiBzdHJpbmcsIHBhdHRlcm46IHN0cmluZykge1xuICAgIGxldCBwYXRoID0gam9pbihiYXNlLCBwYXR0ZXJuKTtcbiAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcL2Rpc3RcXC8oPzplc218Y2pzKVxcLy8sIFwiL3NyYy9cIik7XG4gICAgfVxuXG4gICAgaWYgKG5hbWUuaW5jbHVkZXMoXCIqXCIpKSB7XG4gICAgICAgIC8vIFdpbGRjYXJkXG4gICAgICAgIGlmICghbmFtZS5lbmRzV2l0aChcIi8qXCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFdpbGRjYXJkIGluIG1vZHVsZSAke25hbWV9IGRvZXMgbm90IGFwcGVhciBhcyBmaW5hbCBwYXRoIHNlZ21lbnRgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgICBjb25zdCBwYXRocyA9IGdsb2JTeW5jKHNvdXJjZSA/IHBhdGgucmVwbGFjZSgvXFwuanMkLywgXCIue3RzLGpzLGNqcyxtanN9XCIpIDogcGF0aCk7XG4gICAgICAgIGlmICghcGF0aHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1hdGNoIGZvciBtb2R1bGUgJHtuYW1lfSBwYXR0ZXJuICR7cGF0dGVybn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IFtwcmVmaXgsIHN1ZmZpeF0gPSBwYXRoLnNwbGl0KC9cXCorLyk7XG4gICAgICAgIGNvbnN0IHByZWZpeExlbmd0aCA9IHByZWZpeCA9PT0gdW5kZWZpbmVkID8gMCA6IHByZWZpeC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHN1ZmZpeExlbmd0aCA9IHN1ZmZpeCA9PT0gdW5kZWZpbmVkID8gMCA6IHN1ZmZpeC5sZW5ndGg7XG5cbiAgICAgICAgZm9yIChjb25zdCB0aGlzUGF0aCBvZiBwYXRocykge1xuICAgICAgICAgICAgY29uc3QgcXVhbGlmaWVyID0gdGhpc1BhdGguc3Vic3RyaW5nKHByZWZpeExlbmd0aCwgdGhpc1BhdGgubGVuZ3RoIC0gc3VmZml4TGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IHRoaXNOYW1lID0gam9pbihuYW1lLCBxdWFsaWZpZXIpO1xuICAgICAgICAgICAgdGFyZ2V0W3RoaXNOYW1lXSA9IHRoaXNQYXRoO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChwYXRoLmluY2x1ZGVzKFwiKlwiKSkge1xuICAgICAgICAvLyBBIHdpbGRjYXJkIHBhdGggaXMgb25seSB2YWxpZCB3aXRoIHdpbGRjYXJkIG5hbWVcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBXaWxkY2FyZCBpbiBtb2R1bGUgcGF0aCBcIiR7cGF0aH1cIiBidXQgbm90IGluIG1vZHVsZSBcIiR7bmFtZX1cImApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vIHdpbGRjYXJkIC0tIHJlbW92ZSBkaXJlY3RvcnlcbiAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvXFwvKD86ZXhwb3J0fGluZGV4KSQvLCBcIlwiKTtcblxuICAgICAgICAvLyBMb29rIGZvciBzb3VyY2UgaWYgZmlsZSBpc24ndCBwcmVzZW50XG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgICBpZiAoaXNGaWxlKHBhdGgpKSB7XG4gICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc291cmNlICYmIHBhdGguZW5kc1dpdGgoXCIuanNcIikpIHtcbiAgICAgICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcLmpzJC8sIFwiLnRzXCIpO1xuICAgICAgICAgICAgaWYgKGlzRmlsZShwYXRoKSkge1xuICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTW9kdWxlIFwiJHtuYW1lfVwiIHBhdGggXCIke3BhdGh9XCIgbm90IGZvdW5kYCk7XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXRbbmFtZV0gPSBwYXRoO1xuICAgIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxTQUFTLFlBQVksY0FBYyxnQkFBZ0I7QUFDbkQsU0FBUyxTQUFTLFVBQVUsTUFBTSxpQkFBaUI7QUFDbkQsU0FBUyxTQUFTLE1BQU0sVUFBVSxlQUFlO0FBQ2pELFNBQVMsYUFBYSx1QkFBdUI7QUFDN0MsU0FBUyxVQUFVLFFBQVEsbUJBQW1CLHFCQUFxQjtBQUNuRSxTQUFTLGdCQUFnQjtBQUN6QixTQUFTLGlCQUFpQjtBQUVuQixNQUFNLDBCQUEwQixNQUFNO0FBQUM7QUFFdkMsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sZUFBZTtBQUU1QixNQUFNLGlCQUFpQixDQUFDO0FBRXhCLFNBQVMsU0FBUyxVQUFrQixPQUFlLEtBQUssT0FBZ0I7QUFDcEUsU0FBTyxRQUFRLElBQUk7QUFDbkIsU0FBTyxNQUFNO0FBQ1QsVUFBTSxPQUFPO0FBQUEsTUFBZ0IsQ0FBQyxVQUFVLFNBQVM7QUFBQSxNQUFHLE1BQ2hELEtBQUssTUFBTSxhQUFhLFFBQVEsTUFBTSxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUM7QUFBQSxJQUMvRDtBQUNBLFFBQUksTUFBTTtBQUNOLFVBQUksVUFBVSxVQUFhLEtBQUssU0FBUyxPQUFPO0FBQzVDLGVBQU8sRUFBRSxNQUFNLE1BQU0sS0FBSztBQUFBLE1BQzlCO0FBQUEsSUFDSjtBQUNBLFVBQU0sU0FBUyxRQUFRLElBQUk7QUFDM0IsUUFBSSxXQUFXLE1BQU07QUFDakIsWUFBTSxJQUFJLGtCQUFrQixvQkFBb0IsU0FBUyxRQUFRLEVBQUU7QUFB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
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3V0aWwvcGFja2FnZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjItMjAyNCBNYXR0ZXIuanMgQXV0aG9yc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMsIHN0YXRTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyByZWFkZGlyLCByZWFkRmlsZSwgc3RhdCwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBpZ25vcmVFcnJvciwgaWdub3JlRXJyb3JTeW5jIH0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5pbXBvcnQgeyBpc0ZpbGUsIG1heWJlUmVhZEpzb25TeW5jLCBtYXliZVN0YXRTeW5jIH0gZnJvbSBcIi4vZmlsZS5qc1wiO1xuaW1wb3J0IHsgZ2xvYlN5bmMgfSBmcm9tIFwiLi9nbG9iLmpzXCI7XG5pbXBvcnQgeyBQcm9ncmVzcyB9IGZyb20gXCIuL3Byb2dyZXNzLmpzXCI7XG5pbXBvcnQgeyB0b29sc1BhdGggfSBmcm9tIFwiLi90b29scy1wYXRoLmNqc1wiO1xuXG5leHBvcnQgY2xhc3MgSnNvbk5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuXG5leHBvcnQgY29uc3QgQ09ORklHX1BBVEggPSBgc3JjL2J1aWxkLmNvbmZpZy50c2A7XG5leHBvcnQgY29uc3QgQ09ERUdFTl9QQVRIID0gYGNvZGVnZW5gO1xuXG5jb25zdCBwYWNrYWdlRm9yUGF0aCA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIFBhY2thZ2UgfCB1bmRlZmluZWQgfCBudWxsPjtcblxuZnVuY3Rpb24gZmluZEpzb24oZmlsZW5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nID0gXCIuXCIsIHRpdGxlPzogc3RyaW5nKSB7XG4gICAgcGF0aCA9IHJlc29sdmUocGF0aCk7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgY29uc3QganNvbiA9IGlnbm9yZUVycm9yU3luYyhbXCJFTk9FTlRcIiwgXCJFTk9URElSXCJdLCAoKSA9PlxuICAgICAgICAgICAgSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMocmVzb2x2ZShwYXRoLCBmaWxlbmFtZSkpLnRvU3RyaW5nKCkpLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChqc29uKSB7XG4gICAgICAgICAgICBpZiAodGl0bGUgPT09IHVuZGVmaW5lZCB8fCBqc29uLm5hbWUgPT09IHRpdGxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcm9vdDogcGF0aCwganNvbiB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGRpcm5hbWUocGF0aCk7XG4gICAgICAgIGlmIChwYXJlbnQgPT09IHBhdGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBKc29uTm90Rm91bmRFcnJvcihgQ291bGQgbm90IGxvY2F0ZSAke3RpdGxlID8/IGZpbGVuYW1lfWApO1xuICAgICAgICB9XG4gICAgICAgIHBhdGggPSBwYXJlbnQ7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc0RpcmVjdG9yeShwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gISFpZ25vcmVFcnJvclN5bmMoXCJFTk9FTlRcIiwgKCkgPT4gc3RhdFN5bmMocGF0aCkuaXNEaXJlY3RvcnkoKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBQYWNrYWdlIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAganNvbjogUGFja2FnZUpzb247XG4gICAgc3VwcG9ydHNFc206IGJvb2xlYW47XG4gICAgc3VwcG9ydHNDanM6IGJvb2xlYW47XG4gICAgaGFzU3JjOiBib29sZWFuO1xuICAgIGhhc1Rlc3RzOiBib29sZWFuO1xuICAgIGhhc0NvbmZpZzogYm9vbGVhbjtcbiAgICBpc0xpYnJhcnk6IGJvb2xlYW47XG4gICAgI2FsaWFzZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gICAgY29uc3RydWN0b3Ioe1xuICAgICAgICBwYXRoID0gXCIuXCIsXG4gICAgICAgIG5hbWUsXG4gICAgfToge1xuICAgICAgICBwYXRoPzogc3RyaW5nO1xuICAgICAgICBuYW1lPzogc3RyaW5nO1xuICAgIH0gPSB7fSkge1xuICAgICAgICBjb25zdCB7IHJvb3QsIGpzb24gfSA9IGZpbmRKc29uKFwicGFja2FnZS5qc29uXCIsIHBhdGgsIG5hbWUpO1xuICAgICAgICB0aGlzLnBhdGggPSByb290O1xuICAgICAgICB0aGlzLmpzb24gPSBqc29uO1xuXG4gICAgICAgIGNvbnN0IHsgZXNtLCBjanMgfSA9IHNlbGVjdEZvcm1hdHModGhpcy5qc29uKTtcbiAgICAgICAgdGhpcy5zdXBwb3J0c0VzbSA9IGVzbTtcbiAgICAgICAgdGhpcy5zdXBwb3J0c0NqcyA9IGNqcztcblxuICAgICAgICB0aGlzLmhhc1NyYyA9IGlzRGlyZWN0b3J5KHRoaXMucmVzb2x2ZShcInNyY1wiKSk7XG4gICAgICAgIHRoaXMuaGFzVGVzdHMgPSBpc0RpcmVjdG9yeSh0aGlzLnJlc29sdmUoXCJ0ZXN0XCIpKTtcblxuICAgICAgICBjb25zdCByZWZzID0gbWF5YmVSZWFkSnNvblN5bmModGhpcy5yZXNvbHZlKFwidHNjb25maWcuanNvblwiKSk/LnJlZmVyZW5jZXMgYXMgdW5kZWZpbmVkIHwgeyBwYXRoOiBzdHJpbmcgfVtdO1xuICAgICAgICBpZiAocmVmcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoIXJlZnMuZmluZChyZWYgPT4gdGhpcy5yZXNvbHZlKHJlZi5wYXRoKSA9PT0gdGhpcy5yZXNvbHZlKFwic3JjXCIpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzU3JjID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlZnMuZmluZChyZWYgPT4gdGhpcy5yZXNvbHZlKHJlZi5wYXRoKSA9PT0gdGhpcy5yZXNvbHZlKFwidGVzdFwiKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1Rlc3RzID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzTGlicmFyeSA9ICEhKHRoaXMuanNvbi5tYWluIHx8IHRoaXMuanNvbi5tb2R1bGUgfHwgdGhpcy5qc29uLmV4cG9ydHMpO1xuXG4gICAgICAgIHRoaXMuaGFzQ29uZmlnID0gdGhpcy5oYXNGaWxlKHRoaXMucmVzb2x2ZShDT05GSUdfUEFUSCkpO1xuICAgIH1cblxuICAgIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5qc29uLm5hbWU7XG4gICAgfVxuXG4gICAgZ2V0IHZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpzb24udmVyc2lvbjtcbiAgICB9XG5cbiAgICBnZXQgZXhwb3J0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuanNvbi5leHBvcnRzO1xuICAgIH1cblxuICAgIGdldCBoYXNDb2RlZ2VuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNEaXJlY3RvcnkoQ09ERUdFTl9QQVRIKTtcbiAgICB9XG5cbiAgICByZXNvbHZlKC4uLnBhdGhzOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLnBhdGgsIC4uLnBhdGhzKTtcbiAgICB9XG5cbiAgICByZWxhdGl2ZShwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHJlbGF0aXZlKHRoaXMucGF0aCwgcGF0aCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2xvYihwYXR0ZXJuOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgICAgICAvLyBHbG9iIG9ubHkgdW5kZXJzdGFuZHMgZm9yd2FyZC1zbGFzaCBhcyBzZXBhcmF0b3IgYmVjYXVzZSByZWFzb25zXG4gICAgICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcGF0dGVybiA9IHRoaXMucmVzb2x2ZShwYXR0ZXJuKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLm1hcChzID0+IHRoaXMucmVzb2x2ZShzKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDdXJyZW50IGdsb2IgaW1wbGVtZW50YXRpb24gaXNuJ3QgYWN0dWFsbHkgYXN5bmMgYXMgdGhpcyBpcyBmYXN0ZXIgYW5kIHdlIG9ubHkgd2FsayBzbWFsbCBkaXJlY3RvcnkgdHJlZXNcbiAgICAgICAgcmV0dXJuIGdsb2JTeW5jKHBhdHRlcm4pO1xuICAgIH1cblxuICAgIHN0YXJ0KHdoYXQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBwcm9ncmVzcyA9IG5ldyBQcm9ncmVzcygpO1xuICAgICAgICBwcm9ncmVzcy5zdGFydHVwKHdoYXQsIHRoaXMpO1xuICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7XG4gICAgfVxuXG4gICAgYXN5bmMgbGFzdE1vZGlmaWVkKC4uLnBhdGhzOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXN0TW9kaWZpZWRBYnNvbHV0ZShwYXRocy5tYXAocCA9PiB0aGlzLnJlc29sdmUocCkpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGxhc3RNb2RpZmllZEFic29sdXRlKHBhdGhzOiBzdHJpbmdbXSkge1xuICAgICAgICBsZXQgbXRpbWUgPSAwO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIHBhdGhzLm1hcChhc3luYyBwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGlnbm9yZUVycm9yKFwiRU5PRU5UXCIsIGFzeW5jICgpID0+IGF3YWl0IHN0YXQocCkpO1xuICAgICAgICAgICAgICAgIGlmICghc3RhdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCB0aGlzTXRpbWU7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aHMgPSAoYXdhaXQgcmVhZGRpcihwKSkubWFwKHAyID0+IHJlc29sdmUocCwgcDIpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpc010aW1lID0gYXdhaXQgdGhpcy5sYXN0TW9kaWZpZWRBYnNvbHV0ZShwYXRocyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc010aW1lID0gc3RhdHMubXRpbWVNcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNNdGltZSA+IG10aW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIG10aW1lID0gdGhpc010aW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbXRpbWU7XG4gICAgfVxuXG4gICAgZ2V0IGRlcGVuZGVuY2llcygpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IEFycmF5PHN0cmluZz4oKTtcbiAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIFtcImRlcGVuZGVuY2llc1wiLCBcIm9wdGlvbmFsRGVwZW5kZW5jaWVzXCIsIFwiZGV2RGVwZW5kZW5jaWVzXCIsIFwicGVlckRlcGVuZGVuY2llc1wiXSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmpzb25bdHlwZV0gPT09IFwib2JqZWN0XCIgJiYgdGhpcy5qc29uW3R5cGVdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gWy4uLnJlc3VsdCwgLi4uT2JqZWN0LmtleXModGhpcy5qc29uW3R5cGVdKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsuLi5uZXcgU2V0KHJlc3VsdCldO1xuICAgIH1cblxuICAgIGdldCB3b3Jrc3BhY2UoKSB7XG4gICAgICAgIHJldHVybiBQYWNrYWdlLndvcmtzcGFjZUZvcih0aGlzLnBhdGgpO1xuICAgIH1cblxuICAgIGdldCBpc1dvcmtzcGFjZSgpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5qc29uLndvcmtzcGFjZXMpO1xuICAgIH1cblxuICAgIGdldCByb290KCk6IFBhY2thZ2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud29ya3NwYWNlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgSnNvbk5vdEZvdW5kRXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBzdGF0aWMgc2V0IHdvcmtpbmdEaXIod2Q6IHN0cmluZykge1xuICAgICAgICB3b3JraW5nRGlyID0gd2Q7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCB3b3Jrc3BhY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndvcmtzcGFjZUZvcih3b3JraW5nRGlyKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgd29ya3NwYWNlRm9yKGN3ZDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghd29ya3NwYWNlKSB7XG4gICAgICAgICAgICB3b3Jrc3BhY2UgPSBmaW5kKGN3ZCwgcGtnID0+IEFycmF5LmlzQXJyYXkocGtnLmpzb24ud29ya3NwYWNlcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3b3Jrc3BhY2U7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCB0b29scygpIHtcbiAgICAgICAgaWYgKCF0b29scykge1xuICAgICAgICAgICAgdG9vbHMgPSBuZXcgUGFja2FnZSh7IHBhdGg6IHRvb2xzUGF0aCB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9vbHM7XG4gICAgfVxuXG4gICAgc3RhdGljIGZpbmRFeHBvcnQobmFtZTogc3RyaW5nLCB0eXBlOiBcImNqc1wiIHwgXCJlc21cIiA9IFwiZXNtXCIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud29ya3NwYWNlLnJlc29sdmVJbXBvcnQobmFtZSwgdHlwZSk7XG4gICAgfVxuXG4gICAgcmVzb2x2ZUV4cG9ydChuYW1lOiBzdHJpbmcsIHR5cGU6IFwiY2pzXCIgfCBcImVzbVwiID0gXCJlc21cIikge1xuICAgICAgICBpZiAoIW5hbWUuc3RhcnRzV2l0aChcIi5cIikpIHtcbiAgICAgICAgICAgIG5hbWUgPSBgLi8ke25hbWV9YDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleHBvcnREZXRhaWwgPSB0aGlzLmV4cG9ydHM/LltuYW1lXTtcblxuICAgICAgICBpZiAoZXhwb3J0RGV0YWlsKSB7XG4gICAgICAgICAgICBjb25zdCBleHAgPSBmaW5kRXhwb3J0Q29uZGl0aW9uKGV4cG9ydERldGFpbCwgdHlwZSk7XG4gICAgICAgICAgICBpZiAoZXhwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZShleHApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hbWUgPT09IFwiLlwiKSB7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gXCJlc21cIiAmJiB0aGlzLmpzb24ubW9kdWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZSh0aGlzLmpzb24ubW9kdWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmpzb24ubWFpbikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmUodGhpcy5qc29uLm1haW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVzb2x2ZSBleHBvcnQgJHtuYW1lfSBpbiBwYWNrYWdlICR7dGhpcy5uYW1lfWApO1xuICAgIH1cblxuICAgIGZpbmRQYWNrYWdlKG5hbWU6IHN0cmluZykge1xuICAgICAgICBsZXQgcmVzb2x2ZUluID0gdGhpcy5wYXRoO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgaWYgKGlzRGlyZWN0b3J5KHJlc29sdmUocmVzb2x2ZUluLCBcIm5vZGVfbW9kdWxlc1wiLCBuYW1lKSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5leHRSZXNvbHZlSW4gPSBkaXJuYW1lKHJlc29sdmVJbik7XG4gICAgICAgICAgICBpZiAobmV4dFJlc29sdmVJbiA9PT0gcmVzb2x2ZUluKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBtb2R1bGUgJHtuYW1lfSBmcm9tICR7dGhpcy5wYXRofWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZUluID0gbmV4dFJlc29sdmVJbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQYWNrYWdlLmZvclBhdGgocmVzb2x2ZShyZXNvbHZlSW4sIFwibm9kZV9tb2R1bGVzXCIsIG5hbWUpKTtcbiAgICB9XG5cbiAgICByZXNvbHZlSW1wb3J0KG5hbWU6IHN0cmluZywgdHlwZTogXCJjanNcIiB8IFwiZXNtXCIgPSBcImVzbVwiKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gbmFtZS5zcGxpdChcIi9cIik7XG4gICAgICAgIGxldCBwYWNrYWdlTmFtZSA9IHNlZ21lbnRzLnNoaWZ0KCkgYXMgc3RyaW5nO1xuICAgICAgICBpZiAocGFja2FnZU5hbWUuc3RhcnRzV2l0aChcIkBcIikgJiYgc2VnbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYWNrYWdlTmFtZSA9IGAke3BhY2thZ2VOYW1lfS8ke3NlZ21lbnRzLnNoaWZ0KCl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBrZyA9IHRoaXMuZmluZFBhY2thZ2UocGFja2FnZU5hbWUpO1xuXG4gICAgICAgIHJldHVybiBwa2cucmVzb2x2ZUV4cG9ydChzZWdtZW50cy5sZW5ndGggPyBzZWdtZW50cy5qb2luKFwiL1wiKSA6IFwiLlwiLCB0eXBlKTtcbiAgICB9XG5cbiAgICBoYXNGaWxlKHBhdGg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gISF0aGlzLiNtYXliZVN0YXQocGF0aCk/LmlzRmlsZSgpO1xuICAgIH1cblxuICAgIGhhc0RpcmVjdG9yeShwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy4jbWF5YmVTdGF0KHBhdGgpPy5pc0RpcmVjdG9yeSgpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlYWRGaWxlKHBhdGg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gcmVhZEZpbGUodGhpcy5yZXNvbHZlKHBhdGgpLCBcInV0Zi04XCIpO1xuICAgIH1cblxuICAgIHJlYWRGaWxlU3luYyhwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRGaWxlU3luYyh0aGlzLnJlc29sdmUocGF0aCksIFwidXRmLThcIik7XG4gICAgfVxuXG4gICAgYXN5bmMgd3JpdGVGaWxlKHBhdGg6IHN0cmluZywgY29udGVudHM6IHVua25vd24pIHtcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlKHRoaXMucmVzb2x2ZShwYXRoKSwgYCR7Y29udGVudHN9YCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2F2ZSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy53cml0ZUZpbGUoam9pbih0aGlzLnBhdGgsIFwicGFja2FnZS5qc29uXCIpLCBKU09OLnN0cmluZ2lmeSh0aGlzLmpzb24sIHVuZGVmaW5lZCwgNCkpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlYWRKc29uKHBhdGg6IHN0cmluZykge1xuICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgdGhpcy5yZWFkRmlsZShwYXRoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgZSA9IG5ldyBFcnJvcihgJHtlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKGUgYXMgRXJyb3IpLm1lc3NhZ2UgPSBgRXJyb3IgcGFyc2luZyBcIiR7dGhpcy5yZXNvbHZlKHBhdGgpfVwiOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWA7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgd3JpdGVKc29uKHBhdGg6IHN0cmluZywgdmFsdWU6IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMud3JpdGVGaWxlKHBhdGgsIEpTT04uc3RyaW5naWZ5KHZhbHVlLCB1bmRlZmluZWQsIDQpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbWF5YmVGb3JQYXRoKHBhdGg6IHN0cmluZykge1xuICAgICAgICBmdW5jdGlvbiBmaW5kKHBhdGg6IHN0cmluZyk6IFBhY2thZ2UgfCBudWxsIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBwYWNrYWdlRm9yUGF0aFtwYXRoXTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChleGlzdHNTeW5jKGpvaW4ocGF0aCwgXCJwYWNrYWdlLmpzb25cIikpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBQYWNrYWdlKHsgcGF0aCB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmaW5kKGRpcm5hbWUocGF0aCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYWNrYWdlRm9yUGF0aFtwYXRoXSA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBmaW5kKHBhdGgpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQgPz8gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHN0YXRpYyBmb3JQYXRoKHBhdGg6IHN0cmluZykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLm1heWJlRm9yUGF0aChwYXRoKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgcGFja2FnZS5qc29uIGZvciBcIiR7cGF0aH1cImApO1xuICAgIH1cblxuICAgIGdldCBhbGlhc2VzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgICAgICBpZiAodGhpcy4jYWxpYXNlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jYWxpYXNlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI2FsaWFzZXMgPSB7XG4gICAgICAgICAgICAuLi5QYWNrYWdlLm1heWJlRm9yUGF0aChkaXJuYW1lKHRoaXMucGF0aCkpPy5hbGlhc2VzLFxuICAgICAgICAgICAgLi4udGhpcy5qc29uLmltcG9ydHMsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuI2FsaWFzZXM7XG4gICAgfVxuXG4gICAgZ2V0IG1vZHVsZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxpc3RNb2R1bGVzKGZhbHNlKTtcbiAgICB9XG5cbiAgICBnZXQgc291cmNlTW9kdWxlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdE1vZHVsZXModHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbWFwIG9mIG1vZHVsZSBuYW1lIC0+IGltcGxlbWVudGF0aW9uIGZpbGUuICBJZiBcInNvdXJjZVwiIGlzIHRydWUsIHNlYXJjaGVzIHNvdXJjZSBmaWxlcyByYXRoZXIgdGhhblxuICAgICAqIHRyYW5zcGlsZWQgZmlsZXMuICBXZSBkbyB0aGlzIHJhdGhlciB0aGFuIGZpbmRpbmcgdHJhbnNwaWxhdGlvbiBmaWxlcyB0aGVuIG1hcHBpbmcgdG8gc291cmNlIGZpbGVzIHNvIHRoaXMgd29ya3NcbiAgICAgKiBldmVuIGlmIHRoZXJlIGlzbid0IGEgYnVpbGQuXG4gICAgICovXG4gICAgbGlzdE1vZHVsZXMoc291cmNlOiBib29sZWFuLCAuLi5jb25kaXRpb25zOiBzdHJpbmdbXSkge1xuICAgICAgICBpZiAoIWNvbmRpdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25kaXRpb25zID0gW3RoaXMuc3VwcG9ydHNFc20gPyBcImltcG9ydFwiIDogXCJyZXF1aXJlXCIsIFwiZGVmYXVsdFwiXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZHVsZXMgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gICAgICAgIGNvbnN0IGV4cG9ydHMgPSB0aGlzLmV4cG9ydHM7XG4gICAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIiAmJiBleHBvcnRzICE9PSBudWxsKSB7XG4gICAgICAgICAgICBmaW5kTW9kdWxlcyhzb3VyY2UsIG5ldyBTZXQoY29uZGl0aW9ucyksIG1vZHVsZXMsIHRoaXMubmFtZSwgdGhpcy5wYXRoLCBleHBvcnRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtb2R1bGVzO1xuICAgIH1cblxuICAgICNtYXliZVN0YXQocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBtYXliZVN0YXRTeW5jKHRoaXMucmVzb2x2ZShwYXRoKSk7XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBQYWNrYWdlSnNvbiA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGltcG9ydHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgbWF0dGVyPzoge1xuICAgICAgICB0ZXN0PzogYm9vbGVhbjtcbiAgICB9O1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn07XG5cbmxldCB3b3JraW5nRGlyID0gXCIuXCI7XG5sZXQgd29ya3NwYWNlOiBQYWNrYWdlIHwgdW5kZWZpbmVkO1xubGV0IHRvb2xzOiBQYWNrYWdlIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBmaW5kKHN0YXJ0RGlyOiBzdHJpbmcsIHNlbGVjdG9yOiAocGtnOiBQYWNrYWdlKSA9PiBib29sZWFuKTogUGFja2FnZSB7XG4gICAgbGV0IHBrZyA9IG5ldyBQYWNrYWdlKHsgcGF0aDogc3RhcnREaXIgfSk7XG4gICAgd2hpbGUgKCFzZWxlY3Rvcihwa2cpKSB7XG4gICAgICAgIHBrZyA9IG5ldyBQYWNrYWdlKHsgcGF0aDogZGlybmFtZShwa2cucGF0aCkgfSk7XG4gICAgfVxuICAgIHJldHVybiBwa2c7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEZvcm1hdHMoanNvbjogYW55KSB7XG4gICAgbGV0IGVzbTogYm9vbGVhbiwgY2pzOiBib29sZWFuO1xuXG4gICAgaWYgKGpzb24udHlwZSA9PT0gXCJtb2R1bGVcIikge1xuICAgICAgICBlc20gPSB0cnVlO1xuICAgICAgICBjanMgPVxuICAgICAgICAgICAgKGpzb24ubWFpbiAhPT0gdW5kZWZpbmVkICYmIGpzb24ubW9kdWxlICE9PSB1bmRlZmluZWQpIHx8XG4gICAgICAgICAgICAhIU9iamVjdC52YWx1ZXMoanNvbi5leHBvcnRzID8/IHt9KS5maW5kKChleHA6IGFueSkgPT4gZXhwLnJlcXVpcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNqcyA9IHRydWU7XG4gICAgICAgIGVzbSA9ICEhanNvbi5tb2R1bGUgfHwgISFPYmplY3QudmFsdWVzKGpzb24uZXhwb3J0cyA/PyB7fSkuZmluZCgoZXhwOiBhbnkpID0+IGV4cC5pbXBvcnQpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGVzbSwgY2pzIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRFeHBvcnRDb25kaXRpb24oZGV0YWlsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCB0eXBlOiBcImVzbVwiIHwgXCJjanNcIik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGUgPT09IFwiZXNtXCIgJiYgZGV0YWlsLmltcG9ydCkge1xuICAgICAgICBsZXQgZXhwID0gZGV0YWlsLmltcG9ydDtcbiAgICAgICAgaWYgKGV4cCAmJiB0eXBlb2YgZXhwICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBleHAgPSBmaW5kRXhwb3J0Q29uZGl0aW9uKGV4cCwgdHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4cCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCBleHAgPSBkZXRhaWwucmVxdWlyZSA/PyBkZXRhaWwubm9kZSA/PyBkZXRhaWwuZGVmYXVsdDtcbiAgICBpZiAoZXhwICYmIHR5cGVvZiBleHAgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgZXhwID0gZmluZEV4cG9ydENvbmRpdGlvbihleHAsIHR5cGUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXhwID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBleHA7XG4gICAgfVxufVxuXG50eXBlIENvbmRpdGlvbnMgPSB7IFtuYW1lOiBzdHJpbmddOiBFeHBvcnRzIH07XG5cbnR5cGUgRXhwb3J0cyA9IHN0cmluZyB8IENvbmRpdGlvbnMgfCBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25zPjtcblxuZnVuY3Rpb24gZmluZE1vZHVsZXMoXG4gICAgc291cmNlOiBib29sZWFuLFxuICAgIGNvbmRpdGlvbnM6IFNldDxzdHJpbmc+LFxuICAgIHRhcmdldDogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBwcmVmaXg6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgZXhwb3J0czogRXhwb3J0cyxcbikge1xuICAgIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBhZGRNb2R1bGVHbG9icyhzb3VyY2UsIHRhcmdldCwgcHJlZml4LCBwYXRoLCBleHBvcnRzKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZXhwb3J0cykpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBleHBvcnRzKSB7XG4gICAgICAgICAgICBmaW5kTW9kdWxlcyhzb3VyY2UsIGNvbmRpdGlvbnMsIHRhcmdldCwgcHJlZml4LCBwYXRoLCBlbnRyeSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiICYmIGV4cG9ydHMgIT09IG51bGwpIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkQ29uZGl0aW9uID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGV4cG9ydHMpIHtcbiAgICAgICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChcIi5cIikpIHtcbiAgICAgICAgICAgICAgICBmaW5kTW9kdWxlcyhzb3VyY2UsIGNvbmRpdGlvbnMsIHRhcmdldCwgam9pbihwcmVmaXgsIGtleSksIHBhdGgsIGV4cG9ydHNba2V5XSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzZWxlY3RlZENvbmRpdGlvbiAmJiBjb25kaXRpb25zLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgZmluZE1vZHVsZXMoc291cmNlLCBjb25kaXRpb25zLCB0YXJnZXQsIHByZWZpeCwgcGF0aCwgZXhwb3J0c1trZXldKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmRpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNYWxmb3JtZWQgZXhwb3J0cyBmaWVsZCBpbiBwYWNrYWdlLmpzb25cIik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhZGRNb2R1bGVHbG9icyhzb3VyY2U6IGJvb2xlYW4sIHRhcmdldDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgbmFtZTogc3RyaW5nLCBiYXNlOiBzdHJpbmcsIHBhdHRlcm46IHN0cmluZykge1xuICAgIGxldCBwYXRoID0gam9pbihiYXNlLCBwYXR0ZXJuKTtcbiAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcL2Rpc3RcXC8oPzplc218Y2pzKVxcLy8sIFwiL3NyYy9cIik7XG4gICAgfVxuXG4gICAgaWYgKG5hbWUuaW5jbHVkZXMoXCIqXCIpKSB7XG4gICAgICAgIC8vIFdpbGRjYXJkXG4gICAgICAgIGlmICghbmFtZS5lbmRzV2l0aChcIi8qXCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFdpbGRjYXJkIGluIG1vZHVsZSAke25hbWV9IGRvZXMgbm90IGFwcGVhciBhcyBmaW5hbCBwYXRoIHNlZ21lbnRgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgICBjb25zdCBwYXRocyA9IGdsb2JTeW5jKHNvdXJjZSA/IHBhdGgucmVwbGFjZSgvXFwuanMkLywgXCIue3RzLGpzLGNqcyxtanN9XCIpIDogcGF0aCk7XG4gICAgICAgIGlmICghcGF0aHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1hdGNoIGZvciBtb2R1bGUgJHtuYW1lfSBwYXR0ZXJuICR7cGF0dGVybn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IFtwcmVmaXgsIHN1ZmZpeF0gPSBwYXRoLnNwbGl0KC9cXCorLyk7XG4gICAgICAgIGNvbnN0IHByZWZpeExlbmd0aCA9IHByZWZpeCA9PT0gdW5kZWZpbmVkID8gMCA6IHByZWZpeC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHN1ZmZpeExlbmd0aCA9IHN1ZmZpeCA9PT0gdW5kZWZpbmVkID8gMCA6IHN1ZmZpeC5sZW5ndGg7XG5cbiAgICAgICAgZm9yIChjb25zdCB0aGlzUGF0aCBvZiBwYXRocykge1xuICAgICAgICAgICAgY29uc3QgcXVhbGlmaWVyID0gdGhpc1BhdGguc3Vic3RyaW5nKHByZWZpeExlbmd0aCwgdGhpc1BhdGgubGVuZ3RoIC0gc3VmZml4TGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IHRoaXNOYW1lID0gam9pbihuYW1lLCBxdWFsaWZpZXIpO1xuICAgICAgICAgICAgdGFyZ2V0W3RoaXNOYW1lXSA9IHRoaXNQYXRoO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChwYXRoLmluY2x1ZGVzKFwiKlwiKSkge1xuICAgICAgICAvLyBBIHdpbGRjYXJkIHBhdGggaXMgb25seSB2YWxpZCB3aXRoIHdpbGRjYXJkIG5hbWVcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBXaWxkY2FyZCBpbiBtb2R1bGUgcGF0aCBcIiR7cGF0aH1cIiBidXQgbm90IGluIG1vZHVsZSBcIiR7bmFtZX1cImApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vIHdpbGRjYXJkIC0tIHJlbW92ZSBkaXJlY3RvcnlcbiAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvXFwvKD86ZXhwb3J0fGluZGV4KSQvLCBcIlwiKTtcblxuICAgICAgICAvLyBMb29rIGZvciBzb3VyY2UgaWYgZmlsZSBpc24ndCBwcmVzZW50XG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgICBpZiAoaXNGaWxlKHBhdGgpKSB7XG4gICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc291cmNlICYmIHBhdGguZW5kc1dpdGgoXCIuanNcIikpIHtcbiAgICAgICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcLmpzJC8sIFwiLnRzXCIpO1xuICAgICAgICAgICAgaWYgKGlzRmlsZShwYXRoKSkge1xuICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTW9kdWxlIFwiJHtuYW1lfVwiIHBhdGggXCIke3BhdGh9XCIgbm90IGZvdW5kYCk7XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXRbbmFtZV0gPSBwYXRoO1xuICAgIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxTQUFTLFlBQVksY0FBYyxnQkFBZ0I7QUFDbkQsU0FBUyxTQUFTLFVBQVUsTUFBTSxpQkFBaUI7QUFDbkQsU0FBUyxTQUFTLE1BQU0sVUFBVSxlQUFlO0FBQ2pELFNBQVMsYUFBYSx1QkFBdUI7QUFDN0MsU0FBUyxRQUFRLG1CQUFtQixxQkFBcUI7QUFDekQsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxpQkFBaUI7QUFFbkIsTUFBTSwwQkFBMEIsTUFBTTtBQUFDO0FBRXZDLE1BQU0sY0FBYztBQUNwQixNQUFNLGVBQWU7QUFFNUIsTUFBTSxpQkFBaUIsQ0FBQztBQUV4QixTQUFTLFNBQVMsVUFBa0IsT0FBZSxLQUFLLE9BQWdCO0FBQ3BFLFNBQU8sUUFBUSxJQUFJO0FBQ25CLFNBQU8sTUFBTTtBQUNULFVBQU0sT0FBTztBQUFBLE1BQWdCLENBQUMsVUFBVSxTQUFTO0FBQUEsTUFBRyxNQUNoRCxLQUFLLE1BQU0sYUFBYSxRQUFRLE1BQU0sUUFBUSxDQUFDLEVBQUUsU0FBUyxDQUFDO0FBQUEsSUFDL0Q7QUFFQSxRQUFJLE1BQU07QUFDTixVQUFJLFVBQVUsVUFBYSxLQUFLLFNBQVMsT0FBTztBQUM1QyxlQUFPLEVBQUUsTUFBTSxNQUFNLEtBQUs7QUFBQSxNQUM5QjtBQUFBLElBQ0o7QUFDQSxVQUFNLFNBQVMsUUFBUSxJQUFJO0FBQzNCLFFBQUksV0FBVyxNQUFNO0FB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
{
"name": "@matter/tools",
"version": "0.12.0-alpha.0-20241219-af74a6a14",
"version": "0.12.0-alpha.0-20241220-ad0dea627",
"description": "Matter.js tooling",

@@ -58,3 +58,3 @@ "type": "module",

"typedoc": "^0.27.4",
"typedoc-material-theme": "^1.2.0",
"typedoc-github-theme": "^0.2.0",
"@microsoft/tsdoc": "^0.15.1"

@@ -61,0 +61,0 @@ },

@@ -27,3 +27,3 @@ /**

const PLUGINS = ["typedoc-material-theme"] as string[];
const PLUGINS = ["typedoc-github-theme"] as string[];

@@ -30,0 +30,0 @@ // Double "docs" directories so top-level directory can be a GH repository with pages configured under "docs"

@@ -13,3 +13,4 @@ /**

export * from "./util/file.js";
export * from "./util/glob.js";
export * from "./util/package.js";
export * from "./util/progress.js";

@@ -8,3 +8,2 @@ /**

import { readdirSync, readFileSync, statSync } from "fs";
import { GLOBSTAR, Minimatch, ParseReturnFiltered } from "minimatch";
import { resolve } from "path";

@@ -53,118 +52,51 @@ import { ignoreErrorSync } from "./errors.js";

export class GlobError extends Error {}
export function isDirectory(path: string) {
return !!ignoreErrorSync("ENOENT", () => statSync(path).isDirectory());
}
export function globSync(pattern: string | string[]) {
if (typeof pattern === "string") {
return [...globOneSync(pattern)];
}
const result = Array<string>();
for (const p of pattern) {
result.push(...globOneSync(p));
}
return result;
export function isFile(path: string) {
return !!ignoreErrorSync("ENOENT", () => statSync(path).isFile());
}
function globOneSync(pattern: string) {
// Parse the glob
const mm = new Minimatch(pattern.replace(/\\/g, "/"), {});
const results = new Set<string>();
for (const part of mm.set) {
for (const path of globOnePartSync(mm, part)) {
results.add(path);
}
}
return results;
/**
* Tiny virtual filesystem driver. Currently used only for processing globs.
*/
export interface FilesystemSync<T extends FilesystemSync.Stat = FilesystemSync.Stat> {
resolve(...segments: string[]): string;
readdir(path: string): string[] | undefined;
stat(path: string): T | undefined;
}
function globOnePartSync(mm: Minimatch, segments: ParseReturnFiltered[]) {
// Find the starting path
let rootPath = "";
let didOne = false;
while (typeof segments[0] === "string") {
if (didOne) {
rootPath += "/";
} else {
didOne = true;
}
rootPath += segments.shift() as string;
}
export function FilesystemSync(): FilesystemSync<FilesystemSync.Stat> {
return {
resolve(...segments) {
return resolve(...segments);
},
// If we are out of segments, this is not a glob. Just check for presence
if (!segments.length) {
const stat = maybeStatSync(rootPath);
readdir(path) {
return maybeReaddirSync(path);
},
if (stat?.[rootPath.endsWith("/") ? "isDirectory" : "isFile"]()) {
return [rootPath];
}
stat(path) {
const stats = maybeStatSync(path);
if (stats) {
return {
get isFile() {
return stats.isFile();
},
return [];
}
// Walk filesystem and apply glob
const results = new Set<string>();
function match(path: string, segments: ParseReturnFiltered[]) {
// If the filter is empty then match current path
if (!segments.length) {
results.add(path);
return;
}
// If filter starts without magic then just stat that one path
if (typeof segments[0] === "string") {
const subpath = resolve(path, segments[0]);
if (maybeStatSync(resolve(path, segments[0]))) {
match(subpath, segments.slice(1));
return;
get isDirectory() {
return stats.isDirectory();
},
};
}
}
},
};
}
// If filter is just GLOBSTAR then all paths match but search continues
if (segments.length === 1 && segments[0] === GLOBSTAR) {
results.add(path);
}
// Filter starts with magic so load directory entries to match
const subnames = maybeReaddirSync(path);
if (!subnames) {
return;
}
// Test each directory entry
for (const subname of subnames) {
const subpath = resolve(path, subname);
// Anything but GLOBSTAR is 1:1 subname/segment match
if (segments[0] !== GLOBSTAR) {
if (mm.matchOne([subname], segments, true)) {
match(subpath, segments.slice(1));
}
continue;
}
// GLOBSTAR matches nothing so test second segment
if (segments.length > 1) {
if (mm.matchOne([subname], segments.slice(1), true)) {
match(subpath, segments.slice(2));
}
}
// GLOBSTAR matches everything
match(subpath, segments);
}
export namespace FilesystemSync {
export interface Stat {
isDirectory?: boolean;
isFile?: boolean;
}
match(rootPath, segments);
return results;
}
export function isDirectory(path: string) {
return !!ignoreErrorSync("ENOENT", () => statSync(path).isDirectory());
}
export function isFile(path: string) {
return !!ignoreErrorSync("ENOENT", () => statSync(path).isFile());
}

@@ -10,2 +10,3 @@ /**

export * from "./file.js";
export * from "./glob.js";
export * from "./package.js";

@@ -11,3 +11,4 @@ /**

import { ignoreError, ignoreErrorSync } from "./errors.js";
import { globSync, isFile, maybeReadJsonSync, maybeStatSync } from "./file.js";
import { isFile, maybeReadJsonSync, maybeStatSync } from "./file.js";
import { globSync } from "./glob.js";
import { Progress } from "./progress.js";

@@ -29,2 +30,3 @@ import { toolsPath } from "./tools-path.cjs";

);
if (json) {

@@ -31,0 +33,0 @@ if (title === undefined || json.name === title) {

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc