@cdktn/provider-schema 0.25.0-pre.2 → 0.25.0-pre.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/__tests__/cache.test.js +18 -8
- package/build/__tests__/provider-schema.test.js +59 -8
- package/build/__tests__/provider-schema.unit.test.js +242 -1
- package/build/__tests__/read-emission-gap-warning.unit.test.js +18 -8
- package/build/cache.js +19 -10
- package/build/emission-check.js +22 -12
- package/build/provider-schema.d.ts +16 -1
- package/build/provider-schema.d.ts.map +1 -1
- package/build/provider-schema.js +210 -16
- package/build/read.js +3 -3
- package/build/util.d.ts +0 -3
- package/build/util.d.ts.map +1 -1
- package/build/util.js +20 -10
- package/package.json +7 -6
- package/src/__tests__/__snapshots__/provider-schema.test.ts.snap +69 -0
- package/src/__tests__/fixtures/local-json-module-provider-aliases/module.tf.json +21 -0
- package/src/__tests__/fixtures/local-mixed-module-provider-aliases/aliases.tf.json +10 -0
- package/src/__tests__/fixtures/local-mixed-module-provider-aliases/module.tf +22 -0
- package/src/__tests__/fixtures/local-module-provider-aliases/module.tf +24 -0
package/build/provider-schema.js
CHANGED
|
@@ -15,15 +15,35 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
25
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.
|
|
36
|
+
exports.parseFQPN = void 0;
|
|
37
|
+
exports.getFetchingCliVersion = getFetchingCliVersion;
|
|
38
|
+
exports.terraformInitWithRetry = terraformInitWithRetry;
|
|
39
|
+
exports.readProviderSchema = readProviderSchema;
|
|
40
|
+
exports.warnIfSchemaEmissionGaps = warnIfSchemaEmissionGaps;
|
|
41
|
+
exports.sanitizeProviderSchema = sanitizeProviderSchema;
|
|
42
|
+
exports.collectModuleProviderAliases = collectModuleProviderAliases;
|
|
43
|
+
exports.applyModuleProviderAliases = applyModuleProviderAliases;
|
|
44
|
+
exports.packageSubdir = packageSubdir;
|
|
45
|
+
exports.fetchedModuleDir = fetchedModuleDir;
|
|
46
|
+
exports.readModuleSchema = readModuleSchema;
|
|
27
47
|
// Copyright (c) HashiCorp, Inc
|
|
28
48
|
// SPDX-License-Identifier: MPL-2.0
|
|
29
49
|
const fs = __importStar(require("fs-extra"));
|
|
@@ -51,7 +71,6 @@ function getFetchingCliVersion() {
|
|
|
51
71
|
}
|
|
52
72
|
return fetchingCliVersionPromise;
|
|
53
73
|
}
|
|
54
|
-
exports.getFetchingCliVersion = getFetchingCliVersion;
|
|
55
74
|
// Provider binaries are downloaded from GitHub release CDNs during
|
|
56
75
|
// `terraform init`, which intermittently returns 5xx. Retry on those
|
|
57
76
|
// signatures only — real config/schema errors should still fail fast.
|
|
@@ -104,7 +123,6 @@ async function terraformInitWithRetry(options, maxAttempts = 5, baseDelayMs = 50
|
|
|
104
123
|
}
|
|
105
124
|
throw new Error("unreachable");
|
|
106
125
|
}
|
|
107
|
-
exports.terraformInitWithRetry = terraformInitWithRetry;
|
|
108
126
|
const parseFQPN = (f) => {
|
|
109
127
|
const [hostname, namespace, name] = f.split("/");
|
|
110
128
|
if (!name) {
|
|
@@ -246,7 +264,6 @@ async function readProviderSchema(target) {
|
|
|
246
264
|
}
|
|
247
265
|
return sanitizeProviderSchema(providerSchema);
|
|
248
266
|
}
|
|
249
|
-
exports.readProviderSchema = readProviderSchema;
|
|
250
267
|
/**
|
|
251
268
|
* Warns when the CLI that produced a given provider schema predates one or
|
|
252
269
|
* more schema-emission boundaries the project's declared `targetVersions`
|
|
@@ -291,7 +308,6 @@ async function warnIfSchemaEmissionGaps(schema, targetVersions) {
|
|
|
291
308
|
commons_1.logger.warn(`provider schema fetched with ${cli.name} ${cli.version} — ${joinWithAnd(gapFamilies.map((family) => emission_check_1.SCHEMA_EMISSION_FAMILY_LABELS[family]))} will not be generated; run cdktn get with ${(0, emission_check_1.suggestedEmittingCliVersions)(gapFamilies)}`);
|
|
292
309
|
}
|
|
293
310
|
}
|
|
294
|
-
exports.warnIfSchemaEmissionGaps = warnIfSchemaEmissionGaps;
|
|
295
311
|
// The providers have some potential bugs that we want to pro-actively
|
|
296
312
|
// fix here so that the rest of the code can assume a consistent schema.
|
|
297
313
|
function sanitizeProviderSchema(schema) {
|
|
@@ -327,7 +343,162 @@ function sanitizeProviderSchema(schema) {
|
|
|
327
343
|
});
|
|
328
344
|
return schema;
|
|
329
345
|
}
|
|
330
|
-
|
|
346
|
+
const CONFIGURATION_ALIAS = /^([\w-]+)\.([\w-]+)$/;
|
|
347
|
+
// hcl2json hands HCL expressions back as interpolations, so a
|
|
348
|
+
// `configuration_aliases = [aws.global_region]` entry arrives as the string
|
|
349
|
+
// "${aws.global_region}". A .tf.json module writes the same reference as a
|
|
350
|
+
// plain string, which hcl2json passes through untouched.
|
|
351
|
+
const unwrapInterpolation = (value) => value.startsWith("${") && value.endsWith("}") ? value.slice(2, -1) : value;
|
|
352
|
+
const toArray = (item) => {
|
|
353
|
+
if (item === undefined || item === null)
|
|
354
|
+
return [];
|
|
355
|
+
return Array.isArray(item) ? item : [item];
|
|
356
|
+
};
|
|
357
|
+
/**
|
|
358
|
+
* Every occurrence of a block that hcl2json produced under one key.
|
|
359
|
+
*
|
|
360
|
+
* HCL blocks come back as an array with an entry per occurrence, a .tf.json
|
|
361
|
+
* block as a plain object. A module mixing both syntaxes gets a third shape:
|
|
362
|
+
* hcl2json merges the JSON file into the parsed HCL, and its deepMerge
|
|
363
|
+
* recurses into the HCL array instead of appending to it, leaving the JSON
|
|
364
|
+
* contribution hanging off the array as named properties. Those properties
|
|
365
|
+
* are an occurrence of their own - and one that neither iterating the array
|
|
366
|
+
* nor JSON.stringify would ever show.
|
|
367
|
+
*/
|
|
368
|
+
const blockOccurrences = (block) => {
|
|
369
|
+
if (block === undefined || block === null)
|
|
370
|
+
return [];
|
|
371
|
+
if (!Array.isArray(block))
|
|
372
|
+
return [block];
|
|
373
|
+
const merged = Object.fromEntries(Object.entries(block).filter(([key]) => !/^\d+$/.test(key)));
|
|
374
|
+
return Object.keys(merged).length > 0 ? [...block, merged] : [...block];
|
|
375
|
+
};
|
|
376
|
+
/**
|
|
377
|
+
* Collects the provider configurations a module requires its caller to pass
|
|
378
|
+
* in, from the hcl2json representation of the module's directory.
|
|
379
|
+
*
|
|
380
|
+
* A module may declare `required_providers` in more than one `terraform`
|
|
381
|
+
* block, and may spread them across .tf and .tf.json files; every occurrence
|
|
382
|
+
* hcl2json reports is considered (see {@link blockOccurrences}).
|
|
383
|
+
*
|
|
384
|
+
* @internal exposed for testing
|
|
385
|
+
*/
|
|
386
|
+
function collectModuleProviderAliases(parsedModule) {
|
|
387
|
+
const aliases = [];
|
|
388
|
+
const seen = new Set();
|
|
389
|
+
for (const terraformBlock of blockOccurrences(parsedModule === null || parsedModule === void 0 ? void 0 : parsedModule.terraform)) {
|
|
390
|
+
for (const requiredProviders of blockOccurrences(terraformBlock === null || terraformBlock === void 0 ? void 0 : terraformBlock.required_providers)) {
|
|
391
|
+
for (const declaration of Object.values(requiredProviders || {})) {
|
|
392
|
+
const provider = unwrapIfArray(declaration);
|
|
393
|
+
for (const entry of toArray(provider === null || provider === void 0 ? void 0 : provider.configuration_aliases)) {
|
|
394
|
+
const match = CONFIGURATION_ALIAS.exec(unwrapInterpolation(String(entry)));
|
|
395
|
+
if (!match)
|
|
396
|
+
continue;
|
|
397
|
+
const [, localName, alias] = match;
|
|
398
|
+
const key = `${localName}.${alias}`;
|
|
399
|
+
if (seen.has(key))
|
|
400
|
+
continue;
|
|
401
|
+
seen.add(key);
|
|
402
|
+
aliases.push({ localName, alias, source: provider === null || provider === void 0 ? void 0 : provider.source });
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
return aliases;
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Declares the provider configurations that `aliases` names on the synthetic
|
|
411
|
+
* root config and passes them into the module call, which is what Terraform
|
|
412
|
+
* demands of anyone calling a module with `configuration_aliases`.
|
|
413
|
+
*
|
|
414
|
+
* The alias blocks stay empty: `terraform get` only builds the configuration
|
|
415
|
+
* tree, it never configures or installs a provider. Sources are mirrored from
|
|
416
|
+
* the module's own `required_providers` so a module referring to, say,
|
|
417
|
+
* hashicorp/aws under a non-default local name still resolves to the same
|
|
418
|
+
* provider in the root.
|
|
419
|
+
*
|
|
420
|
+
* @internal exposed for testing
|
|
421
|
+
*/
|
|
422
|
+
function applyModuleProviderAliases(config, moduleKey, aliases) {
|
|
423
|
+
var _a;
|
|
424
|
+
const moduleCall = (_a = config.module) === null || _a === void 0 ? void 0 : _a[moduleKey];
|
|
425
|
+
if (!moduleCall || aliases.length === 0)
|
|
426
|
+
return config;
|
|
427
|
+
for (const { localName, alias, source } of aliases) {
|
|
428
|
+
if (source) {
|
|
429
|
+
config.terraform.required_providers = {
|
|
430
|
+
...config.terraform.required_providers,
|
|
431
|
+
[localName]: { source },
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
config.provider = config.provider || {};
|
|
435
|
+
const blocks = toArray(config.provider[localName]);
|
|
436
|
+
if (!blocks.some((block) => block.alias === alias)) {
|
|
437
|
+
blocks.push({ alias });
|
|
438
|
+
}
|
|
439
|
+
config.provider[localName] = blocks;
|
|
440
|
+
moduleCall.providers = {
|
|
441
|
+
...moduleCall.providers,
|
|
442
|
+
[`${localName}.${alias}`]: `${localName}.${alias}`,
|
|
443
|
+
};
|
|
444
|
+
}
|
|
445
|
+
return config;
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* The `//subdir` portion of a module source, if it has one, mirroring how
|
|
449
|
+
* Terraform unpacks a package into `.terraform/modules/<key>/<subdir>`.
|
|
450
|
+
*
|
|
451
|
+
* @internal exposed for testing
|
|
452
|
+
*/
|
|
453
|
+
function packageSubdir(source) {
|
|
454
|
+
const [withoutQuery] = source.split("?");
|
|
455
|
+
const withoutGetterPrefix = withoutQuery.replace(/^[A-Za-z0-9]+::/, "");
|
|
456
|
+
const withoutScheme = withoutGetterPrefix.replace(/^[A-Za-z][A-Za-z0-9+.-]*:\/\/+/, "");
|
|
457
|
+
const [, ...rest] = withoutScheme.split("//");
|
|
458
|
+
const subdir = rest.join("//").replace(/^\/+|\/+$/g, "");
|
|
459
|
+
return subdir || undefined;
|
|
460
|
+
}
|
|
461
|
+
/**
|
|
462
|
+
* Where the module Terraform just fetched ended up on disk.
|
|
463
|
+
*
|
|
464
|
+
* The manifest is the authority, but a `terraform get` that installed the
|
|
465
|
+
* module and then failed to validate the configuration around it leaves no
|
|
466
|
+
* manifest behind - so fall back to the locations Terraform installs into:
|
|
467
|
+
* local modules are read where they are, remote packages are unpacked into
|
|
468
|
+
* `.terraform/modules/<key>`.
|
|
469
|
+
*
|
|
470
|
+
* @internal exposed for testing
|
|
471
|
+
*/
|
|
472
|
+
function fetchedModuleDir(workingDirectory, moduleKey, source, localSourceAbsolutePath) {
|
|
473
|
+
const manifestPath = path.join(workingDirectory, ".terraform", "modules", "modules.json");
|
|
474
|
+
if (fs.existsSync(manifestPath)) {
|
|
475
|
+
const moduleIndex = JSON.parse(fs.readFileSync(manifestPath, "utf-8"));
|
|
476
|
+
const record = moduleIndex.Modules.find((mod) => mod.Key === moduleKey);
|
|
477
|
+
if (record) {
|
|
478
|
+
return path.resolve(workingDirectory, record.Dir);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
if (localSourceAbsolutePath) {
|
|
482
|
+
return localSourceAbsolutePath;
|
|
483
|
+
}
|
|
484
|
+
return path.join(workingDirectory, ".terraform", "modules", moduleKey, packageSubdir(source) || "");
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Runs `terraform get` and hands the failure back instead of throwing it.
|
|
488
|
+
*
|
|
489
|
+
* Its diagnostics are not final (see {@link readModuleSchema}), so they go to
|
|
490
|
+
* the debug log rather than the terminal; the returned error still carries
|
|
491
|
+
* them on its `stderr` for callers that end up rethrowing it.
|
|
492
|
+
*/
|
|
493
|
+
async function tryTerraformGet(outdir) {
|
|
494
|
+
try {
|
|
495
|
+
await (0, commons_1.exec)(terraformBinaryName, ["get"], { cwd: outdir, logStderrAsDebug: true }, undefined, undefined, false);
|
|
496
|
+
return undefined;
|
|
497
|
+
}
|
|
498
|
+
catch (error) {
|
|
499
|
+
return error;
|
|
500
|
+
}
|
|
501
|
+
}
|
|
331
502
|
async function readModuleSchema(target) {
|
|
332
503
|
let moduleSchema = {};
|
|
333
504
|
await (0, commons_1.withTempDir)("fetchSchema", async () => {
|
|
@@ -350,12 +521,35 @@ async function readModuleSchema(target) {
|
|
|
350
521
|
const outdir = process.cwd();
|
|
351
522
|
const filePath = path.join(outdir, "main.tf.json");
|
|
352
523
|
await fs.writeFile(filePath, JSON.stringify(config));
|
|
353
|
-
|
|
524
|
+
// `terraform get` is both our downloader and a full validation of the
|
|
525
|
+
// synthetic root config wrapped around the module. A module declaring
|
|
526
|
+
// `configuration_aliases` cannot validate until the root passes those
|
|
527
|
+
// configurations in, and their names are only knowable once the module is
|
|
528
|
+
// on disk - so this first run is a fetch we defer judgement on. Terraform
|
|
529
|
+
// installs the module either way; since 1.15 it just stops short of
|
|
530
|
+
// writing the module manifest when validation fails (terraform#38217
|
|
531
|
+
// dropped the error-to-warning downgrade that `terraform get` used to
|
|
532
|
+
// apply), which is what the second run below restores.
|
|
533
|
+
const fetchError = await tryTerraformGet(outdir);
|
|
534
|
+
const moduleDir = fetchedModuleDir(outdir, target.moduleKey, source, localSource);
|
|
535
|
+
const aliases = fs.existsSync(moduleDir)
|
|
536
|
+
? collectModuleProviderAliases(await (0, hcl2json_1.convertFiles)(moduleDir))
|
|
537
|
+
: [];
|
|
538
|
+
if (aliases.length > 0) {
|
|
539
|
+
applyModuleProviderAliases(config, target.moduleKey, aliases);
|
|
540
|
+
await fs.writeFile(filePath, JSON.stringify(config));
|
|
541
|
+
await (0, commons_1.exec)(terraformBinaryName, ["get"], { cwd: outdir });
|
|
542
|
+
}
|
|
543
|
+
else if (fetchError) {
|
|
544
|
+
// nothing here was salvageable after all, so report the diagnostics that
|
|
545
|
+
// were held back while the fetch still had a second chance
|
|
546
|
+
commons_1.logger.error(fetchError.stderr || String(fetchError));
|
|
547
|
+
throw fetchError;
|
|
548
|
+
}
|
|
354
549
|
if (config.module) {
|
|
355
550
|
moduleSchema = await harvestModuleSchema(outdir, Object.keys(config.module));
|
|
356
551
|
}
|
|
357
552
|
});
|
|
358
553
|
return moduleSchema;
|
|
359
554
|
}
|
|
360
|
-
exports.readModuleSchema = readModuleSchema;
|
|
361
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItc2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Byb3ZpZGVyLXNjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsNkNBQStCO0FBQy9CLDJDQUE2QjtBQUU3Qiw4Q0FBK0M7QUFDL0MsNENBbUJ3QjtBQUN4QixxREFJMEI7QUFFMUIsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixJQUFJLFdBQVcsQ0FBQztBQUU3RSxJQUFJLHlCQUFtRSxDQUFDO0FBRXhFOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLHFCQUFxQjtJQUNuQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUMvQix5QkFBeUIsR0FBRyxJQUFBLGNBQUksRUFBQyxtQkFBbUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2pFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFO1NBQ25CLENBQUMsQ0FBQyxJQUFJLENBQUMsa0NBQXdCLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsT0FBTyx5QkFBeUIsQ0FBQztBQUNuQyxDQUFDO0FBUEQsc0RBT0M7QUFFRCxtRUFBbUU7QUFDbkUscUVBQXFFO0FBQ3JFLHNFQUFzRTtBQUN0RSxNQUFNLDZCQUE2QixHQUFHO0lBQ3BDLGFBQWE7SUFDYixjQUFjO0lBQ2Qsc0JBQXNCO0lBQ3RCLGtCQUFrQjtJQUNsQixhQUFhO0lBQ2IsWUFBWTtJQUNaLFlBQVk7SUFDWixpQkFBaUI7Q0FDbEIsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0ksS0FBSyxVQUFVLHNCQUFzQixDQUMxQyxPQUF3QixFQUN4QixXQUFXLEdBQUcsQ0FBQyxFQUNmLFdBQVcsR0FBRyxJQUFJLEVBQ2xCLGlCQUFpQixHQUFHLENBQUM7O0lBRXJCLEtBQUssSUFBSSxP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LENBQUM7SUFFSCxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDO0FBckNELDRDQXFDQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgY29udmVydEZpbGVzIH0gZnJvbSBcIkBjZGt0bi9oY2wyanNvblwiO1xuaW1wb3J0IHtcbiAgQXR0cmlidXRlLFxuICBBdHRyaWJ1dGVUeXBlLFxuICBCbG9jayxcbiAgQ29uc3RydWN0c01ha2VyTW9kdWxlVGFyZ2V0LFxuICBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldCxcbiAgSW5wdXQsXG4gIE1vZHVsZUluZGV4LFxuICBNb2R1bGVTY2hlbWEsXG4gIFByb3ZpZGVyU2NoZW1hLFxuICBUZXJyYWZvcm1DbGlWZXJzaW9uLFxuICBUZXJyYWZvcm1Nb2R1bGVDb25zdHJhaW50LFxuICBUZXJyYWZvcm1UYXJnZXRWZXJzaW9ucyxcbiAgVmVyc2lvblNjaGVtYSxcbiAgZXhlYyxcbiAgaXNOZXN0ZWRUeXBlQXR0cmlidXRlLFxuICBsb2dnZXIsXG4gIHBhcnNlVGVycmFmb3JtQ2xpVmVyc2lvbixcbiAgd2l0aFRlbXBEaXIsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHtcbiAgU0NIRU1BX0VNSVNTSU9OX0ZBTUlMWV9MQUJFTFMsXG4gIGNoZWNrU2NoZW1hRW1pc3Npb25HYXBGYW1pbGllcyxcbiAgc3VnZ2VzdGVkRW1pdHRpbmdDbGlWZXJzaW9ucyxcbn0gZnJvbSBcIi4vZW1pc3Npb24tY2hlY2tcIjtcblxuY29uc3QgdGVycmFmb3JtQmluYXJ5TmFtZSA9IHByb2Nlc3MuZW52LlRFUlJBRk9STV9CSU5BUllfTkFNRSB8fCBcInRlcnJhZm9ybVwiO1xuXG5sZXQgZmV0Y2hpbmdDbGlWZXJzaW9uUHJvbWlzZTogUHJvbWlzZTxUZXJyYWZvcm1DbGlWZXJzaW9uPiB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSB2ZXJzaW9uIG9mIHRoZSBmZXRjaGluZyBDTEkgKGB0ZXJyYWZvcm1gL2B0b2Z1YCBiaW5hcnlcbiAqIHJlc29sdmVkIHZpYSBgVEVSUkFGT1JNX0JJTkFSWV9OQU1FYCkgb25jZSBwZXIgcHJvY2VzcywgbWVtb2l6ZWQuXG4gKlxuICogVXNlZCBib3RoIHRvIHN0YW1wIGZldGNoZWQgcHJvdmlkZXIgc2NoZW1hcyAoYGNsaV9uYW1lYC9gY2xpX3ZlcnNpb25gKVxuICogYW5kIGFzIHRoZSBjYWNoZSBrZXkgc3VmZml4IGluIHJlYWQudHMsIHNpbmNlIHNjaGVtYSBlbWlzc2lvbiBpcyBmaXhlZFxuICogcGVyIENMSSBtaW5vciB2ZXJzaW9uLlxuICpcbiAqIEBpbnRlcm5hbCBleHBvc2VkIGZvciB0ZXN0aW5nIGxpa2UgdGVycmFmb3JtSW5pdFdpdGhSZXRyeVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmV0Y2hpbmdDbGlWZXJzaW9uKCk6IFByb21pc2U8VGVycmFmb3JtQ2xpVmVyc2lvbj4ge1xuICBpZiAoIWZldGNoaW5nQ2xpVmVyc2lvblByb21pc2UpIHtcbiAgICBmZXRjaGluZ0NsaVZlcnNpb25Qcm9taXNlID0gZXhlYyh0ZXJyYWZvcm1CaW5hcnlOYW1lLCBbXCJ2ZXJzaW9uXCJdLCB7XG4gICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgfSkudGhlbihwYXJzZVRlcnJhZm9ybUNsaVZlcnNpb24pO1xuICB9XG4gIHJldHVybiBmZXRjaGluZ0NsaVZlcnNpb25Qcm9taXNlO1xufVxuXG4vLyBQcm92aWRlciBiaW5hcmllcyBhcmUgZG93bmxvYWRlZCBmcm9tIEdpdEh1YiByZWxlYXNlIENETnMgZHVyaW5nXG4vLyBgdGVycmFmb3JtIGluaXRgLCB3aGljaCBpbnRlcm1pdHRlbnRseSByZXR1cm5zIDV4eC4gUmV0cnkgb24gdGhvc2Vcbi8vIHNpZ25hdHVyZXMgb25seSDigJQgcmVhbCBjb25maWcvc2NoZW1hIGVycm9ycyBzaG91bGQgc3RpbGwgZmFpbCBmYXN0LlxuY29uc3QgVFJBTlNJRU5UX0lOSVRfRVJST1JfUEFUVEVSTlMgPSBbXG4gIC9cXGI1MFsyMzRdXFxiLyxcbiAgL0JhZCBHYXRld2F5L2ksXG4gIC9TZXJ2aWNlIFVuYXZhaWxhYmxlL2ksXG4gIC9HYXRld2F5IFRpbWVvdXQvaSxcbiAgL0VDT05OUkVTRVQvaSxcbiAgL0VUSU1FRE9VVC9pLFxuICAvRUFJX0FHQUlOL2ksXG4gIC91bmV4cGVjdGVkIEVPRi9pLFxuXTtcblxuLyoqXG4gKiBSdW5zIGB0ZXJyYWZvcm0gaW5pdGAgYW5kIHJldHJpZXMgb24gdHJhbnNpZW50IEhUVFAvbmV0d29yayBmYWlsdXJlcy5cbiAqXG4gKiBQcm92aWRlciBiaW5hcmllcyBhcmUgcHVsbGVkIGZyb20gR2l0SHViJ3MgcmVsZWFzZSBDRE4sIHdoaWNoXG4gKiBpbnRlcm1pdHRlbnRseSByZXR1cm5zIDV4eC4gVGhlIHJldHJ5IG9ubHkgZmlyZXMgd2hlbiBzdGRlcnIgbWF0Y2hlcyBhXG4gKiBrbm93biB0cmFuc2llbnQgcGF0dGVybiDigJQgcmVhbCBlcnJvcnMgKGJhZCB2ZXJzaW9uLCBzY2hlbWEgcGFyc2UsIGV0Yy4pXG4gKiBzdGlsbCBmYWlsIG9uIHRoZSBmaXJzdCBhdHRlbXB0LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gc3Bhd24gb3B0aW9ucyBmb3J3YXJkZWQgdG8gYGV4ZWNgIChgY3dkYCBpcyByZXF1aXJlZCBzb1xuICogICBgdGVycmFmb3JtIGluaXRgIHJ1bnMgaW5zaWRlIHRoZSB0ZW1wIGRpciBob2xkaW5nIGBtYWluLnRmLmpzb25gKVxuICogQHBhcmFtIG1heEF0dGVtcHRzIC0gdG90YWwgYXR0ZW1wdHMgaW5jbHVkaW5nIHRoZSBpbml0aWFsIGNhbGw7IHRoZSBudW1iZXJcbiAqICAgb2YgcmV0cmllcyBpcyBgbWF4QXR0ZW1wdHMgLSAxYC4gRGVmYXVsdHMgdG8gNSAoMSBpbml0aWFsICsgNCByZXRyaWVzKVxuICogQHBhcmFtIGJhc2VEZWxheU1zIC0gZGVsYXkgYmVmb3JlIHRoZSBmaXJzdCByZXRyeS4gVGVzdHMgcGFzcyBgMGAgdG8gc2tpcFxuICogICB3YWl0cy4gRGVmYXVsdHMgdG8gNTAwMG1zXG4gKiBAcGFyYW0gYmFja29mZk11bHRpcGxpZXIgLSBmYWN0b3IgYXBwbGllZCB0byB0aGUgZGVsYXkgb24gZWFjaCBzdWJzZXF1ZW50XG4gKiAgIHJldHJ5IChzbyByZXRyaWVzIHdhaXQgYGJhc2VEZWxheU1zICogbXVsdGlwbGllcl4oYXR0ZW1wdC0xKWApLiBEZWZhdWx0c1xuICogICB0byAyICgxcyDihpIgMnMg4oaSIDRzIOKApilcbiAqIEByZXR1cm5zIHN0ZG91dCBmcm9tIHRoZSBzdWNjZXNzZnVsIGB0ZXJyYWZvcm0gaW5pdGAgaW52b2NhdGlvblxuICogQGludGVybmFsIGV4cG9zZWQgZm9yIHRlc3RpbmdcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlcnJhZm9ybUluaXRXaXRoUmV0cnkoXG4gIG9wdGlvbnM6IHsgY3dkOiBzdHJpbmcgfSxcbiAgbWF4QXR0ZW1wdHMgPSA1LFxuICBiYXNlRGVsYXlNcyA9IDUwMDAsXG4gIGJhY2tvZmZNdWx0aXBsaWVyID0gMixcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IG1heEF0dGVtcHRzOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGV4ZWModGVycmFmb3JtQmluYXJ5TmFtZSwgW1wiaW5pdFwiXSwgb3B0aW9ucyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc3Qgc3RkZXJyOiBzdHJpbmcgPSBlcnJvcj8uc3RkZXJyID8/IFwiXCI7XG4gICAgICBjb25zdCB0cmFuc2llbnQgPSBUUkFOU0lFTlRfSU5JVF9FUlJPUl9QQVRURVJOUy5zb21lKChwKSA9PlxuICAgICAgICBwLnRlc3Qoc3RkZXJyKSxcbiAgICAgICk7XG4gICAgICBpZiAoIXRyYW5zaWVudCB8fCBhdHRlbXB0ID09PSBtYXhBdHRlbXB0cykge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRlbGF5TXMgPSBiYXNlRGVsYXlNcyAqIGJhY2tvZmZNdWx0aXBsaWVyICoqIChhdHRlbXB0IC0gMSk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYHRlcnJhZm9ybSBpbml0IGZhaWxlZCB3aXRoIGEgdHJhbnNpZW50IGVycm9yLCByZXRyeWluZyBpbiAke2RlbGF5TXN9bXMgKGF0dGVtcHQgJHthdHRlbXB0fS8ke21heEF0dGVtcHRzIC0gMX0pYCxcbiAgICAgICk7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBkZWxheU1zKSk7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihcInVucmVhY2hhYmxlXCIpO1xufVxuXG4vKipcbiAqIEZ1bGx5IFF1YWxpZmllZCBwcm92aWRlciBuYW1lIGluIHRoZSBmb3JtYXQ6XG4gKiBsaWtlIGUuZy4gcmVnaXN0cnkudGVycmFmb3JtLmlvL2hhc2hpY29ycC9hd3NcbiAqL1xuZXhwb3J0IHR5cGUgRlFQTiA9IHN0cmluZyAmIHsgX190eXBlOiBcIkZ1bGx5UXVhbGlmaWVkUHJvdmlkZXJOYW1lXCIgfTtcbmV4cG9ydCB0eXBlIFByb3ZpZGVySG9zdG5hbWUgPSBzdHJpbmcgJiB7IF9fdHlwZTogXCJQcm92aWRlckhvc3RuYW1lXCIgfTtcbmV4cG9ydCB0eXBlIFByb3ZpZGVyTmFtZXNwYWNlID0gc3RyaW5nICYgeyBfX3R5cGU6IFwiUHJvdmlkZXJOYW1lc3BhY2VcIiB9O1xuZXhwb3J0IHR5cGUgUHJvdmlkZXJOYW1lID0gc3RyaW5nICYgeyBfX3R5cGU6IFwiUHJvdmlkZXJOYW1lXCIgfTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlRlFQTiA9IChmOiBGUVBOKSA9PiB7XG4gIGNvbnN0IFtob3N0bmFtZSwgbmFtZXNwYWNlLCBuYW1lXSA9IGYuc3BsaXQoXCIvXCIpO1xuICBpZiAoIW5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbid0IGhhbmRsZSAke2Z9YCk7XG4gIH1cbiAgcmV0dXJuIHsgaG9zdG5hbWUsIG5hbWVzcGFjZSwgbmFtZSB9IGFzIHtcbiAgICBob3N0bmFtZTogUHJvdmlkZXJIb3N0bmFtZTtcbiAgICBuYW1lc3BhY2U6IFByb3ZpZGVyTmFtZXNwYWNlO1xuICAgIG5hbWU6IFByb3ZpZGVyTmFtZTtcbiAgfTtcbn07XG5cbmNvbnN0IHVud3JhcElmQXJyYXkgPSA8VD4oaXRlbTogVCB8IFRbXSk6IFQgPT5cbiAgQXJyYXkuaXNBcnJheShpdGVtKSA/IGl0ZW1bMF0gOiBpdGVtO1xuXG5jb25zdCB0cmFuc2Zvcm1WYXJpYWJsZXMgPSAodmFyaWFibGVzOiBhbnkpID0+IHtcbiAgY29uc3QgcmVzdWx0OiBJbnB1dFtdID0gW107XG5cbiAgaWYgKCF2YXJpYWJsZXMpIHJldHVybiByZXN1bHQ7XG5cbiAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKHZhcmlhYmxlcykpIHtcbiAgICBjb25zdCB2YXJpYWJsZSA9IHVud3JhcElmQXJyYXkodmFyaWFibGVzW25hbWVdKTtcbiAgICBsZXQgdmFyaWFibGVUeXBlOiBzdHJpbmc7XG5cbiAgICBpZiAoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICB2YXJpYWJsZS5oYXNPd25Qcm9wZXJ0eShcInR5cGVcIikgPT0gZmFsc2UgJiZcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIHZhcmlhYmxlLmhhc093blByb3BlcnR5KFwiZGVmYXVsdFwiKSA9PSB0cnVlXG4gICAgKSB7XG4gICAgICBzd2l0Y2ggKHR5cGVvZiB2YXJpYWJsZVtcImRlZmF1bHRcIl0pIHtcbiAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICB2YXJpYWJsZVR5cGUgPSBcImJvb2xcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgIHZhcmlhYmxlVHlwZSA9IFwibnVtYmVyXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdmFyaWFibGVUeXBlID0gXCJhbnlcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmF3VmFyaWFibGVUeXBlID0gdmFyaWFibGVbXCJ0eXBlXCJdO1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgcmF3VmFyaWFibGVUeXBlID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgIHJhd1ZhcmlhYmxlVHlwZS5zdGFydHNXaXRoKFwiJHtcIikgJiZcbiAgICAgICAgcmF3VmFyaWFibGVUeXBlLmVuZHNXaXRoKFwifVwiKSAmJlxuICAgICAgICAhcmF3VmFyaWFibGVUeXBlLmluY2x1ZGVzKFwiXFxuXCIpXG4gICAgICApIHtcbiAgICAgICAgdmFyaWFibGVUeXBlID0gcmF3VmFyaWFibGVUeXBlLnNsaWNlKDIsIC0xKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhcmlhYmxlVHlwZSA9IFwiYW55XCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaXRlbTogSW5wdXQgPSB7XG4gICAgICBuYW1lLFxuICAgICAgdHlwZTogdmFyaWFibGVUeXBlLFxuICAgICAgZGVzY3JpcHRpb246IHZhcmlhYmxlW1wiZGVzY3JpcHRpb25cIl0sXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICByZXF1aXJlZDogdmFyaWFibGUuaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0XCIpID09IGZhbHNlLFxuICAgIH07XG5cbiAgICBpZiAoIWl0ZW0ucmVxdWlyZWQpIHtcbiAgICAgIGl0ZW1bXCJkZWZhdWx0XCJdID0gdmFyaWFibGVbXCJkZWZhdWx0XCJdO1xuICAgIH1cblxuICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmNvbnN0IHRyYW5zZm9ybU91dHB1dHMgPSAob3V0cHV0czogYW55KSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gIGlmIChvdXRwdXRzKSB7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKG91dHB1dHMpKSB7XG4gICAgICBjb25zdCBvdXRwdXQgPSB1bndyYXBJZkFycmF5KG91dHB1dHNbbmFtZV0pO1xuXG4gICAgICBjb25zdCBpdGVtOiBhbnkgPSB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBvdXRwdXRbXCJkZXNjcmlwdGlvblwiXSxcbiAgICAgIH07XG5cbiAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5jb25zdCBoYXJ2ZXN0TW9kdWxlU2NoZW1hID0gYXN5bmMgKFxuICB3b3JraW5nRGlyZWN0b3J5OiBzdHJpbmcsXG4gIG1vZHVsZXM6IHN0cmluZ1tdLFxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiA9PiB7XG4gIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5qb2luKFxuICAgIHdvcmtpbmdEaXJlY3RvcnksXG4gICAgXCIudGVycmFmb3JtXCIsXG4gICAgXCJtb2R1bGVzXCIsXG4gICAgXCJtb2R1bGVzLmpzb25cIixcbiAgKTtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgaWYgKCFmcy5leGlzdHNTeW5jKGZpbGVOYW1lKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBNb2R1bGVzIHdlcmUgbm90IGdlbmVyYXRlZCBwcm9wZXJseSAtIGNvdWxkbid0IGZpbmQgJHtmaWxlTmFtZX1gLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBtb2R1bGVJbmRleCA9IEpTT04ucGFyc2UoXG4gICAgZnMucmVhZEZpbGVTeW5jKGZpbGVOYW1lLCBcInV0Zi04XCIpLFxuICApIGFzIE1vZHVsZUluZGV4O1xuXG4gIGZvciAoY29uc3QgbW9kIG9mIG1vZHVsZXMpIHtcbiAgICBjb25zdCBtID0gbW9kdWxlSW5kZXguTW9kdWxlcy5maW5kKChvdGhlcikgPT4gbW9kID09PSBvdGhlci5LZXkpO1xuXG4gICAgaWYgKCFtKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGZpbmQgJHttfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZCA9IGF3YWl0IGNvbnZlcnRGaWxlcyhwYXRoLmpvaW4od29ya2luZ0RpcmVjdG9yeSwgbS5EaXIpKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBNb2R1bGVzIHdlcmUgbm90IGdlbmVyYXRlZCBwcm9wZXJseSAtIGNvdWxkbid0IHBhcnNlICR7bS5EaXJ9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NoZW1hOiBNb2R1bGVTY2hlbWEgPSB7XG4gICAgICBpbnB1dHM6IHRyYW5zZm9ybVZhcmlhYmxlcyhwYXJzZWQudmFyaWFibGUpLFxuICAgICAgb3V0cHV0czogdHJhbnNmb3JtT3V0cHV0cyhwYXJzZWQub3V0cHV0KSxcbiAgICAgIG5hbWU6IG1vZCxcbiAgICB9O1xuXG4gICAgcmVzdWx0W21vZF0gPSBzY2hlbWE7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZnVuY3Rpb24gam9pbldpdGhBbmQoaXRlbXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgaWYgKGl0ZW1zLmxlbmd0aCA8PSAxKSByZXR1cm4gaXRlbXMuam9pbihcIlwiKTtcbiAgcmV0dXJuIGAke2l0ZW1zLnNsaWNlKDAsIC0xKS5qb2luKFwiLCBcIil9IGFuZCAke2l0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdfWA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVycmFmb3JtQ29uZmlnIHtcbiAgcHJvdmlkZXI/OiB7IFtuYW1lOiBzdHJpbmddOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH07XG4gIHRlcnJhZm9ybToge1xuICAgIHJlcXVpcmVkX3Byb3ZpZGVycz86IHtcbiAgICAgIFtuYW1lOiBzdHJpbmddOiB7IHNvdXJjZT86IHN0cmluZzsgdmVyc2lvbj86IHN0cmluZyB9O1xuICAgIH07XG4gIH07XG4gIG1vZHVsZT86IHsgW25hbWU6IHN0cmluZ106IHsgc291cmNlOiBzdHJpbmc7IHZlcnNpb24/OiBzdHJpbmcgfSB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFByb3ZpZGVyU2NoZW1hKFxuICB0YXJnZXQ6IENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0LFxuKSB7XG4gIGNvbnN0IGNvbmZpZzogVGVycmFmb3JtQ29uZmlnID0ge1xuICAgIHByb3ZpZGVyOiB7fSxcbiAgICB0ZXJyYWZvcm06IHtcbiAgICAgIHJlcXVpcmVkX3Byb3ZpZGVyczoge30sXG4gICAgfSxcbiAgfTtcblxuICBjb25maWcucHJvdmlkZXIhW3RhcmdldC5uYW1lXSA9IHt9O1xuICBjb25maWcudGVycmFmb3JtLnJlcXVpcmVkX3Byb3ZpZGVycyFbdGFyZ2V0Lm5hbWVdID0ge1xuICAgIHZlcnNpb246IHRhcmdldC52ZXJzaW9uLFxuICAgIHNvdXJjZTogdGFyZ2V0LnNvdXJjZSxcbiAgfTtcblxuICBsZXQgcHJvdmlkZXJTY2hlbWE6IFByb3ZpZGVyU2NoZW1hID0geyBmb3JtYXRfdmVyc2lvbjogXCIwLjFcIiB9O1xuXG4gIGF3YWl0IHdpdGhUZW1wRGlyKFwiZmV0Y2hQcm92aWRlclNjaGVtYVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3V0ZGlyID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihvdXRkaXIsIFwibWFpbi50Zi5qc29uXCIpO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7XG5cbiAgICBhd2FpdCB0ZXJyYWZvcm1Jbml0V2l0aFJldHJ5KHsgY3dkOiBvdXRkaXIgfSk7XG4gICAgcHJvdmlkZXJTY2hlbWEgPSBKU09OLnBhcnNlKFxuICAgICAgYXdhaXQgZXhlYyh0ZXJyYWZvcm1CaW5hcnlOYW1lLCBbXCJwcm92aWRlcnNcIiwgXCJzY2hlbWFcIiwgXCItanNvblwiXSwge1xuICAgICAgICBjd2Q6IG91dGRpcixcbiAgICAgIH0pLFxuICAgICkgYXMgUHJvdmlkZXJTY2hlbWE7XG5cbiAgICBjb25zdCB2ZXJzaW9uU2NoZW1hID0gSlNPTi5wYXJzZShcbiAgICAgIGF3YWl0IGV4ZWModGVycmFmb3JtQmluYXJ5TmFtZSwgW1widmVyc2lvblwiLCBcIi1qc29uXCJdLCB7XG4gICAgICAgIGN3ZDogb3V0ZGlyLFxuICAgICAgfSksXG4gICAgKSBhcyBWZXJzaW9uU2NoZW1hO1xuXG4gICAgcHJvdmlkZXJTY2hlbWEucHJvdmlkZXJfdmVyc2lvbnMgPSB2ZXJzaW9uU2NoZW1hLnByb3ZpZGVyX3NlbGVjdGlvbnM7XG4gIH0pO1xuXG4gIC8vIFN0YW1wIHRoZSBmZXRjaGluZyBDTEkncyBpZGVudGl0eSBzbyBkb3duc3RyZWFtIGNvbnN1bWVycyBjYW4gcmVhc29uXG4gIC8vIGFib3V0IHdoaWNoIG5ld2VyLXByb3RvY29sIHNlY3Rpb25zIHRoaXMgZmV0Y2ggY291bGQgcG9zc2libHkgaGF2ZVxuICAvLyBlbWl0dGVkLiBOZXZlciBmYWlsIHRoZSBmZXRjaCBvdmVyIHRoaXMgLSBpdCdzIGJlc3QtZWZmb3J0IG1ldGFkYXRhLlxuICB0cnkge1xuICAgIGNvbnN0IGNsaSA9IGF3YWl0IGdldEZldGNoaW5nQ2xpVmVyc2lvbigpO1xuICAgIHByb3ZpZGVyU2NoZW1hLmNsaV9uYW1lID0gY2xpLm5hbWU7XG4gICAgcHJvdmlkZXJTY2hlbWEuY2xpX3ZlcnNpb24gPSBjbGkudmVyc2lvbjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgQ291bGQgbm90IGRldGVybWluZSBmZXRjaGluZyBDTEkgdmVyc2lvbiB0byBzdGFtcCBwcm92aWRlciBzY2hlbWE6ICR7ZXJyb3J9YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHNhbml0aXplUHJvdmlkZXJTY2hlbWEocHJvdmlkZXJTY2hlbWEpO1xufVxuXG4vKipcbiAqIFdhcm5zIHdoZW4gdGhlIENMSSB0aGF0IHByb2R1Y2VkIGEgZ2l2ZW4gcHJvdmlkZXIgc2NoZW1hIHByZWRhdGVzIG9uZSBvclxuICogbW9yZSBzY2hlbWEtZW1pc3Npb24gYm91bmRhcmllcyB0aGUgcHJvamVjdCdzIGRlY2xhcmVkIGB0YXJnZXRWZXJzaW9uc2BcbiAqIGNhcmUgYWJvdXQgKHNlZSBlbWlzc2lvbi1jaGVjay50cykgLSBpLmUuIHNvbWUgbmV3ZXItcHJvdG9jb2wgc2VjdGlvbnNcbiAqIChmdW5jdGlvbnMsIGVwaGVtZXJhbCByZXNvdXJjZXMsIC4uLikgbWF5IGJlIG1pc3NpbmcgZnJvbSB0aGUgZ2VuZXJhdGVkXG4gKiBiaW5kaW5ncyBldmVuIHRob3VnaCB0aGUgc2NoZW1hIGZldGNoIGl0c2VsZiBzdWNjZWVkZWQuXG4gKlxuICogRGVsaWJlcmF0ZWx5IGRlY291cGxlZCBmcm9tIHRoZSBmZXRjaCBwYXRoIChyZWFkUHJvdmlkZXJTY2hlbWEpIHNvIGl0XG4gKiBhbHNvIHJ1bnMgZm9yIHNjaGVtYXMgc2VydmVkIGZyb20gdGhlIG9uLWRpc2sgY2FjaGU6IGNhY2hlZCBKU09OIGNhcnJpZXNcbiAqIHRoZSBzYW1lIGBjbGlfbmFtZWAvYGNsaV92ZXJzaW9uYCBzdGFtcHMgYSBmcmVzaCBmZXRjaCB3b3VsZCBoYXZlXG4gKiB3cml0dGVuICh0aGUgY2FjaGUga2V5IGFscmVhZHkgc2VnbWVudHMgYnkgQ0xJIHByb2R1Y3QrbWlub3IpLCBzbyB0aGUgZ2FwXG4gKiBjaGVjayBpcyBqdXN0IGFzIG1lYW5pbmdmdWwgb24gYSBjYWNoZSBoaXQgYXMgb24gYSBtaXNzLlxuICpcbiAqIE5vLW9wIHdpdGhvdXQgYHRhcmdldFZlcnNpb25zYCAtIHRoZXJlIGlzIG5vdGhpbmcgdG8gY29tcGFyZSB0aGUgQ0xJXG4gKiBhZ2FpbnN0LiBGYWxscyBiYWNrIHRvIHRoZSBjdXJyZW50IHByb2Nlc3MncyBmZXRjaGluZyBDTEkgdmVyc2lvbiB3aGVuXG4gKiB0aGUgc2NoZW1hIGl0c2VsZiBpc24ndCBzdGFtcGVkIChlLmcuIG9sZGVyIGNhY2hlIGVudHJpZXMgd3JpdHRlbiBiZWZvcmVcbiAqIHN0YW1waW5nIGV4aXN0ZWQpLlxuICpcbiAqIEBpbnRlcm5hbCBleHBvc2VkIGZvciB0ZXN0aW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YXJuSWZTY2hlbWFFbWlzc2lvbkdhcHMoXG4gIHNjaGVtYTogUHJvdmlkZXJTY2hlbWEsXG4gIHRhcmdldFZlcnNpb25zPzogVGVycmFmb3JtVGFyZ2V0VmVyc2lvbnMsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCF0YXJnZXRWZXJzaW9ucykgcmV0dXJuO1xuXG4gIGxldCBjbGk6IFRlcnJhZm9ybUNsaVZlcnNpb247XG4gIGlmIChzY2hlbWEuY2xpX25hbWUgJiYgc2NoZW1hLmNsaV92ZXJzaW9uKSB7XG4gICAgaWYgKHNjaGVtYS5jbGlfbmFtZSAhPT0gXCJ0ZXJyYWZvcm1cIiAmJiBzY2hlbWEuY2xpX25hbWUgIT09IFwib3BlbnRvZnVcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjbGkgPSB7IG5hbWU6IHNjaGVtYS5jbGlfbmFtZSwgdmVyc2lvbjogc2NoZW1hLmNsaV92ZXJzaW9uIH07XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGNsaSA9IGF3YWl0IGdldEZldGNoaW5nQ2xpVmVyc2lvbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIGZldGNoaW5nIENMSSB2ZXJzaW9uIHRvIGNoZWNrIGZvciBzY2hlbWEgZW1pc3Npb24gZ2FwczogJHtlcnJvcn1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBjb25zdCBnYXBGYW1pbGllcyA9IGNoZWNrU2NoZW1hRW1pc3Npb25HYXBGYW1pbGllcyhjbGksIHRhcmdldFZlcnNpb25zKTtcbiAgaWYgKGdhcEZhbWlsaWVzLmxlbmd0aCA+IDAgJiYgY2xpLnZlcnNpb24pIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgIGBwcm92aWRlciBzY2hlbWEgZmV0Y2hlZCB3aXRoICR7Y2xpLm5hbWV9ICR7Y2xpLnZlcnNpb259IOKAlCAke2pvaW5XaXRoQW5kKFxuICAgICAgICBnYXBGYW1pbGllcy5tYXAoKGZhbWlseSkgPT4gU0NIRU1BX0VNSVNTSU9OX0ZBTUlMWV9MQUJFTFNbZmFtaWx5XSksXG4gICAgICApfSB3aWxsIG5vdCBiZSBnZW5lcmF0ZWQ7IHJ1biBjZGt0biBnZXQgd2l0aCAke3N1Z2dlc3RlZEVtaXR0aW5nQ2xpVmVyc2lvbnMoXG4gICAgICAgIGdhcEZhbWlsaWVzLFxuICAgICAgKX1gLFxuICAgICk7XG4gIH1cbn1cblxuLy8gVGhlIHByb3ZpZGVycyBoYXZlIHNvbWUgcG90ZW50aWFsIGJ1Z3MgdGhhdCB3ZSB3YW50IHRvIHByby1hY3RpdmVseVxuLy8gZml4IGhlcmUgc28gdGhhdCB0aGUgcmVzdCBvZiB0aGUgY29kZSBjYW4gYXNzdW1lIGEgY29uc2lzdGVudCBzY2hlbWEuXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVQcm92aWRlclNjaGVtYShzY2hlbWE6IFByb3ZpZGVyU2NoZW1hKTogUHJvdmlkZXJTY2hlbWEge1xuICAvLyBNYWlubHkgc29tZSBhdHRyaWJ1dGVzIGFyZSBcImRvdWJsZWRcIiwgZS5nLiBbXCJsaXN0XCIsIFwic3RyaW5nXCIsIFwibGlzdFwiLCBcInN0cmluZ1wiXVxuICAvLyBpbnN0ZWFkIG9mIFtcImxpc3RcIiwgXCJzdHJpbmdcIl1cbiAgZnVuY3Rpb24gYXR0cmlidXRlRG91YmxpbmdGaXgoYXR0cmlidXRlOiBBdHRyaWJ1dGUpOiBBdHRyaWJ1dGUge1xuICAgIGlmIChpc05lc3RlZFR5cGVBdHRyaWJ1dGUoYXR0cmlidXRlKSB8fCAhQXJyYXkuaXNBcnJheShhdHRyaWJ1dGUudHlwZSkpIHtcbiAgICAgIHJldHVybiBhdHRyaWJ1dGU7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZSA9XG4gICAgICBhdHRyaWJ1dGUudHlwZS5sZW5ndGggPT09IDJcbiAgICAgICAgPyBhdHRyaWJ1dGUudHlwZVxuICAgICAgICA6IChhdHRyaWJ1dGUudHlwZSBhcyBzdHJpbmdbXSkuc2xpY2UoMCwgMik7IC8vIFRoZSB0eXBlcyB0ZWxsIHVzIHRoaXMgY2FuJ3QgaGFwcGVuLCByZWFsaXR5IGJlZ3MgdG8gZGlmZmVyXG5cbiAgICBhdHRyaWJ1dGUudHlwZSA9IHR5cGUgYXMgQXR0cmlidXRlVHlwZTtcbiAgICByZXR1cm4gYXR0cmlidXRlO1xuICB9XG5cbiAgLy8gTXV0YXRlcyBibG9jayB3aXRoIHRoZSBmaXhcbiAgZnVuY3Rpb24gc2FuaXRpemVCbG9jayhibG9jazogQmxvY2spIHtcbiAgICBPYmplY3QudmFsdWVzKGJsb2NrLmF0dHJpYnV0ZXMgfHwge30pLmZvckVhY2goYXR0cmlidXRlRG91YmxpbmdGaXgpO1xuICAgIE9iamVjdC52YWx1ZXMoYmxvY2suYmxvY2tfdHlwZXMgfHwge30pLmZvckVhY2goKGJsb2NrVHlwZSkgPT4ge1xuICAgICAgc2FuaXRpemVCbG9jayhibG9ja1R5cGUuYmxvY2spO1xuICAgIH0pO1xuICB9XG5cbiAgT2JqZWN0LnZhbHVlcyhzY2hlbWEucHJvdmlkZXJfc2NoZW1hcyB8fCB7fSkuZm9yRWFjaCgocHJvdmlkZXIpID0+IHtcbiAgICBjb25zdCBlbnRpdGllcyA9IFtcbiAgICAgIHByb3ZpZGVyLnByb3ZpZGVyLFxuICAgICAgLi4uT2JqZWN0LnZhbHVlcyhwcm92aWRlci5yZXNvdXJjZV9zY2hlbWFzIHx8IHt9KSxcbiAgICAgIC4uLk9iamVjdC52YWx1ZXMocHJvdmlkZXIuZGF0YV9zb3VyY2Vfc2NoZW1hcyB8fCB7fSksXG4gICAgICAuLi5PYmplY3QudmFsdWVzKHByb3ZpZGVyLmVwaGVtZXJhbF9yZXNvdXJjZV9zY2hlbWFzIHx8IHt9KSxcbiAgICBdO1xuXG4gICAgZW50aXRpZXMuZm9yRWFjaCgoZW50aXR5KSA9PiB7XG4gICAgICBzYW5pdGl6ZUJsb2NrKGVudGl0eS5ibG9jayk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiBzY2hlbWE7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkTW9kdWxlU2NoZW1hKHRhcmdldDogQ29uc3RydWN0c01ha2VyTW9kdWxlVGFyZ2V0KSB7XG4gIGxldCBtb2R1bGVTY2hlbWE6IFJlY29yZDxzdHJpbmcsIE1vZHVsZVNjaGVtYT4gPSB7fTtcblxuICBhd2FpdCB3aXRoVGVtcERpcihcImZldGNoU2NoZW1hXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb25maWc6IFRlcnJhZm9ybUNvbmZpZyA9IHtcbiAgICAgIHRlcnJhZm9ybToge30sXG4gICAgfTtcblxuICAgIGlmICghY29uZmlnLm1vZHVsZSkgY29uZmlnLm1vZHVsZSA9IHt9O1xuICAgIGxldCBzb3VyY2U6IHN0cmluZyA9IHRhcmdldC5zb3VyY2U7XG5cbiAgICBjb25zdCBsb2NhbFNvdXJjZSA9ICh0YXJnZXQuY29uc3RyYWludCBhcyBUZXJyYWZvcm1Nb2R1bGVDb25zdHJhaW50KVxuICAgICAgLmxvY2FsU291cmNlQWJzb2x1dGVQYXRoO1xuICAgIGlmIChsb2NhbFNvdXJjZSkge1xuICAgICAgLy8gY3JlYXRlIHJlbGF0aXZlIHBhdGggdG8gbW9kdWxlIGluIHRoZSB1c2VyIHByb2plY3RcbiAgICAgIHNvdXJjZSA9IHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgbG9jYWxTb3VyY2UpO1xuICAgIH1cblxuICAgIGNvbmZpZy5tb2R1bGVbdGFyZ2V0Lm1vZHVsZUtleV0gPSB7IHNvdXJjZTogc291cmNlIH07XG4gICAgaWYgKHRhcmdldC52ZXJzaW9uKSB7XG4gICAgICBjb25maWcubW9kdWxlW3RhcmdldC5tb2R1bGVLZXldW1widmVyc2lvblwiXSA9IHRhcmdldC52ZXJzaW9uO1xuICAgIH1cblxuICAgIGNvbnN0IG91dGRpciA9IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4ob3V0ZGlyLCBcIm1haW4udGYuanNvblwiKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpO1xuXG4gICAgYXdhaXQgZXhlYyh0ZXJyYWZvcm1CaW5hcnlOYW1lLCBbXCJnZXRcIl0sIHsgY3dkOiBvdXRkaXIgfSk7XG4gICAgaWYgKGNvbmZpZy5tb2R1bGUpIHtcbiAgICAgIG1vZHVsZVNjaGVtYSA9IGF3YWl0IGhhcnZlc3RNb2R1bGVTY2hlbWEoXG4gICAgICAgIG91dGRpcixcbiAgICAgICAgT2JqZWN0LmtleXMoY29uZmlnLm1vZHVsZSksXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG1vZHVsZVNjaGVtYTtcbn1cbiJdfQ==
|
|
555
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItc2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Byb3ZpZGVyLXNjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4Q0Esc0RBT0M7QUFvQ0Qsd0RBeUJDO0FBOEtELGdEQXFEQztBQXNCRCw0REFpQ0M7QUFJRCx3REF1Q0M7QUE2REQsb0VBK0JDO0FBZUQsZ0VBOEJDO0FBUUQsc0NBV0M7QUFhRCw0Q0FtQ0M7QUF5QkQsNENBb0VDO0FBaHVCRCwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDZDQUErQjtBQUMvQiwyQ0FBNkI7QUFFN0IsOENBQStDO0FBQy9DLDRDQW1Cd0I7QUFDeEIscURBSTBCO0FBRTFCLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsSUFBSSxXQUFXLENBQUM7QUFFN0UsSUFBSSx5QkFBbUUsQ0FBQztBQUV4RTs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixxQkFBcUI7SUFDbkMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDL0IseUJBQXlCLEdBQUcsSUFBQSxjQUFJLEVBQUMsbUJBQW1CLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNqRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRTtTQUNuQixDQUFDLENBQUMsSUFBSSxDQUFDLGtDQUF3QixDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELE9BQU8seUJBQXlCLENBQUM7QUFDbkMsQ0FBQztBQUVELG1FQUFtRTtBQUNuRSxxRUFBcUU7QUFDckUsc0VBQXNFO0FBQ3RFLE1BQU0sNkJBQTZCLEdBQUc7SUFDcEMsYUFBYTtJQUNiLGNBQWM7SUFDZCxzQkFBc0I7SUFDdEIsa0JBQWtCO0lBQ2xCLGFBQWE7SUFDYixZQUFZO0lBQ1osWUFBWTtJQUNaLGlCQUFpQjtDQUNsQixDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7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c0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgeyBjb252ZXJ0RmlsZXMgfSBmcm9tIFwiQGNka3RuL2hjbDJqc29uXCI7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGUsXG4gIEF0dHJpYnV0ZVR5cGUsXG4gIEJsb2NrLFxuICBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXQsXG4gIENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0LFxuICBJbnB1dCxcbiAgTW9kdWxlSW5kZXgsXG4gIE1vZHVsZVNjaGVtYSxcbiAgUHJvdmlkZXJTY2hlbWEsXG4gIFRlcnJhZm9ybUNsaVZlcnNpb24sXG4gIFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQsXG4gIFRlcnJhZm9ybVRhcmdldFZlcnNpb25zLFxuICBWZXJzaW9uU2NoZW1hLFxuICBleGVjLFxuICBpc05lc3RlZFR5cGVBdHRyaWJ1dGUsXG4gIGxvZ2dlcixcbiAgcGFyc2VUZXJyYWZvcm1DbGlWZXJzaW9uLFxuICB3aXRoVGVtcERpcixcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQge1xuICBTQ0hFTUFfRU1JU1NJT05fRkFNSUxZX0xBQkVMUyxcbiAgY2hlY2tTY2hlbWFFbWlzc2lvbkdhcEZhbWlsaWVzLFxuICBzdWdnZXN0ZWRFbWl0dGluZ0NsaVZlcnNpb25zLFxufSBmcm9tIFwiLi9lbWlzc2lvbi1jaGVja1wiO1xuXG5jb25zdCB0ZXJyYWZvcm1CaW5hcnlOYW1lID0gcHJvY2Vzcy5lbnYuVEVSUkFGT1JNX0JJTkFSWV9OQU1FIHx8IFwidGVycmFmb3JtXCI7XG5cbmxldCBmZXRjaGluZ0NsaVZlcnNpb25Qcm9taXNlOiBQcm9taXNlPFRlcnJhZm9ybUNsaVZlcnNpb24+IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHZlcnNpb24gb2YgdGhlIGZldGNoaW5nIENMSSAoYHRlcnJhZm9ybWAvYHRvZnVgIGJpbmFyeVxuICogcmVzb2x2ZWQgdmlhIGBURVJSQUZPUk1fQklOQVJZX05BTUVgKSBvbmNlIHBlciBwcm9jZXNzLCBtZW1vaXplZC5cbiAqXG4gKiBVc2VkIGJvdGggdG8gc3RhbXAgZmV0Y2hlZCBwcm92aWRlciBzY2hlbWFzIChgY2xpX25hbWVgL2BjbGlfdmVyc2lvbmApXG4gKiBhbmQgYXMgdGhlIGNhY2hlIGtleSBzdWZmaXggaW4gcmVhZC50cywgc2luY2Ugc2NoZW1hIGVtaXNzaW9uIGlzIGZpeGVkXG4gKiBwZXIgQ0xJIG1pbm9yIHZlcnNpb24uXG4gKlxuICogQGludGVybmFsIGV4cG9zZWQgZm9yIHRlc3RpbmcgbGlrZSB0ZXJyYWZvcm1Jbml0V2l0aFJldHJ5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGZXRjaGluZ0NsaVZlcnNpb24oKTogUHJvbWlzZTxUZXJyYWZvcm1DbGlWZXJzaW9uPiB7XG4gIGlmICghZmV0Y2hpbmdDbGlWZXJzaW9uUHJvbWlzZSkge1xuICAgIGZldGNoaW5nQ2xpVmVyc2lvblByb21pc2UgPSBleGVjKHRlcnJhZm9ybUJpbmFyeU5hbWUsIFtcInZlcnNpb25cIl0sIHtcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICB9KS50aGVuKHBhcnNlVGVycmFmb3JtQ2xpVmVyc2lvbik7XG4gIH1cbiAgcmV0dXJuIGZldGNoaW5nQ2xpVmVyc2lvblByb21pc2U7XG59XG5cbi8vIFByb3ZpZGVyIGJpbmFyaWVzIGFyZSBkb3dubG9hZGVkIGZyb20gR2l0SHViIHJlbGVhc2UgQ0ROcyBkdXJpbmdcbi8vIGB0ZXJyYWZvcm0gaW5pdGAsIHdoaWNoIGludGVybWl0dGVudGx5IHJldHVybnMgNXh4LiBSZXRyeSBvbiB0aG9zZVxuLy8gc2lnbmF0dXJlcyBvbmx5IOKAlCByZWFsIGNvbmZpZy9zY2hlbWEgZXJyb3JzIHNob3VsZCBzdGlsbCBmYWlsIGZhc3QuXG5jb25zdCBUUkFOU0lFTlRfSU5JVF9FUlJPUl9QQVRURVJOUyA9IFtcbiAgL1xcYjUwWzIzNF1cXGIvLFxuICAvQmFkIEdhdGV3YXkvaSxcbiAgL1NlcnZpY2UgVW5hdmFpbGFibGUvaSxcbiAgL0dhdGV3YXkgVGltZW91dC9pLFxuICAvRUNPTk5SRVNFVC9pLFxuICAvRVRJTUVET1VUL2ksXG4gIC9FQUlfQUdBSU4vaSxcbiAgL3VuZXhwZWN0ZWQgRU9GL2ksXG5dO1xuXG4vKipcbiAqIFJ1bnMgYHRlcnJhZm9ybSBpbml0YCBhbmQgcmV0cmllcyBvbiB0cmFuc2llbnQgSFRUUC9uZXR3b3JrIGZhaWx1cmVzLlxuICpcbiAqIFByb3ZpZGVyIGJpbmFyaWVzIGFyZSBwdWxsZWQgZnJvbSBHaXRIdWIncyByZWxlYXNlIENETiwgd2hpY2hcbiAqIGludGVybWl0dGVudGx5IHJldHVybnMgNXh4LiBUaGUgcmV0cnkgb25seSBmaXJlcyB3aGVuIHN0ZGVyciBtYXRjaGVzIGFcbiAqIGtub3duIHRyYW5zaWVudCBwYXR0ZXJuIOKAlCByZWFsIGVycm9ycyAoYmFkIHZlcnNpb24sIHNjaGVtYSBwYXJzZSwgZXRjLilcbiAqIHN0aWxsIGZhaWwgb24gdGhlIGZpcnN0IGF0dGVtcHQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBzcGF3biBvcHRpb25zIGZvcndhcmRlZCB0byBgZXhlY2AgKGBjd2RgIGlzIHJlcXVpcmVkIHNvXG4gKiAgIGB0ZXJyYWZvcm0gaW5pdGAgcnVucyBpbnNpZGUgdGhlIHRlbXAgZGlyIGhvbGRpbmcgYG1haW4udGYuanNvbmApXG4gKiBAcGFyYW0gbWF4QXR0ZW1wdHMgLSB0b3RhbCBhdHRlbXB0cyBpbmNsdWRpbmcgdGhlIGluaXRpYWwgY2FsbDsgdGhlIG51bWJlclxuICogICBvZiByZXRyaWVzIGlzIGBtYXhBdHRlbXB0cyAtIDFgLiBEZWZhdWx0cyB0byA1ICgxIGluaXRpYWwgKyA0IHJldHJpZXMpXG4gKiBAcGFyYW0gYmFzZURlbGF5TXMgLSBkZWxheSBiZWZvcmUgdGhlIGZpcnN0IHJldHJ5LiBUZXN0cyBwYXNzIGAwYCB0byBza2lwXG4gKiAgIHdhaXRzLiBEZWZhdWx0cyB0byA1MDAwbXNcbiAqIEBwYXJhbSBiYWNrb2ZmTXVsdGlwbGllciAtIGZhY3RvciBhcHBsaWVkIHRvIHRoZSBkZWxheSBvbiBlYWNoIHN1YnNlcXVlbnRcbiAqICAgcmV0cnkgKHNvIHJldHJpZXMgd2FpdCBgYmFzZURlbGF5TXMgKiBtdWx0aXBsaWVyXihhdHRlbXB0LTEpYCkuIERlZmF1bHRzXG4gKiAgIHRvIDIgKDFzIOKGkiAycyDihpIgNHMg4oCmKVxuICogQHJldHVybnMgc3Rkb3V0IGZyb20gdGhlIHN1Y2Nlc3NmdWwgYHRlcnJhZm9ybSBpbml0YCBpbnZvY2F0aW9uXG4gKiBAaW50ZXJuYWwgZXhwb3NlZCBmb3IgdGVzdGluZ1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVycmFmb3JtSW5pdFdpdGhSZXRyeShcbiAgb3B0aW9uczogeyBjd2Q6IHN0cmluZyB9LFxuICBtYXhBdHRlbXB0cyA9IDUsXG4gIGJhc2VEZWxheU1zID0gNTAwMCxcbiAgYmFja29mZk11bHRpcGxpZXIgPSAyLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gbWF4QXR0ZW1wdHM7IGF0dGVtcHQrKykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZXhlYyh0ZXJyYWZvcm1CaW5hcnlOYW1lLCBbXCJpbml0XCJdLCBvcHRpb25zKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zdCBzdGRlcnI6IHN0cmluZyA9IGVycm9yPy5zdGRlcnIgPz8gXCJcIjtcbiAgICAgIGNvbnN0IHRyYW5zaWVudCA9IFRSQU5TSUVOVF9JTklUX0VSUk9SX1BBVFRFUk5TLnNvbWUoKHApID0+XG4gICAgICAgIHAudGVzdChzdGRlcnIpLFxuICAgICAgKTtcbiAgICAgIGlmICghdHJhbnNpZW50IHx8IGF0dGVtcHQgPT09IG1heEF0dGVtcHRzKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVsYXlNcyA9IGJhc2VEZWxheU1zICogYmFja29mZk11bHRpcGxpZXIgKiogKGF0dGVtcHQgLSAxKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgdGVycmFmb3JtIGluaXQgZmFpbGVkIHdpdGggYSB0cmFuc2llbnQgZXJyb3IsIHJldHJ5aW5nIGluICR7ZGVsYXlNc31tcyAoYXR0ZW1wdCAke2F0dGVtcHR9LyR7bWF4QXR0ZW1wdHMgLSAxfSlgLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5TXMpKTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwidW5yZWFjaGFibGVcIik7XG59XG5cbi8qKlxuICogRnVsbHkgUXVhbGlmaWVkIHByb3ZpZGVyIG5hbWUgaW4gdGhlIGZvcm1hdDpcbiAqIGxpa2UgZS5nLiByZWdpc3RyeS50ZXJyYWZvcm0uaW8vaGFzaGljb3JwL2F3c1xuICovXG5leHBvcnQgdHlwZSBGUVBOID0gc3RyaW5nICYgeyBfX3R5cGU6IFwiRnVsbHlRdWFsaWZpZWRQcm92aWRlck5hbWVcIiB9O1xuZXhwb3J0IHR5cGUgUHJvdmlkZXJIb3N0bmFtZSA9IHN0cmluZyAmIHsgX190eXBlOiBcIlByb3ZpZGVySG9zdG5hbWVcIiB9O1xuZXhwb3J0IHR5cGUgUHJvdmlkZXJOYW1lc3BhY2UgPSBzdHJpbmcgJiB7IF9fdHlwZTogXCJQcm92aWRlck5hbWVzcGFjZVwiIH07XG5leHBvcnQgdHlwZSBQcm92aWRlck5hbWUgPSBzdHJpbmcgJiB7IF9fdHlwZTogXCJQcm92aWRlck5hbWVcIiB9O1xuXG5leHBvcnQgY29uc3QgcGFyc2VGUVBOID0gKGY6IEZRUE4pID0+IHtcbiAgY29uc3QgW2hvc3RuYW1lLCBuYW1lc3BhY2UsIG5hbWVdID0gZi5zcGxpdChcIi9cIik7XG4gIGlmICghbmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgY2FuJ3QgaGFuZGxlICR7Zn1gKTtcbiAgfVxuICByZXR1cm4geyBob3N0bmFtZSwgbmFtZXNwYWNlLCBuYW1lIH0gYXMge1xuICAgIGhvc3RuYW1lOiBQcm92aWRlckhvc3RuYW1lO1xuICAgIG5hbWVzcGFjZTogUHJvdmlkZXJOYW1lc3BhY2U7XG4gICAgbmFtZTogUHJvdmlkZXJOYW1lO1xuICB9O1xufTtcblxuY29uc3QgdW53cmFwSWZBcnJheSA9IDxUPihpdGVtOiBUIHwgVFtdKTogVCA9PlxuICBBcnJheS5pc0FycmF5KGl0ZW0pID8gaXRlbVswXSA6IGl0ZW07XG5cbmNvbnN0IHRyYW5zZm9ybVZhcmlhYmxlcyA9ICh2YXJpYWJsZXM6IGFueSkgPT4ge1xuICBjb25zdCByZXN1bHQ6IElucHV0W10gPSBbXTtcblxuICBpZiAoIXZhcmlhYmxlcykgcmV0dXJuIHJlc3VsdDtcblxuICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXModmFyaWFibGVzKSkge1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdW53cmFwSWZBcnJheSh2YXJpYWJsZXNbbmFtZV0pO1xuICAgIGxldCB2YXJpYWJsZVR5cGU6IHN0cmluZztcblxuICAgIGlmIChcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIHZhcmlhYmxlLmhhc093blByb3BlcnR5KFwidHlwZVwiKSA9PSBmYWxzZSAmJlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgdmFyaWFibGUuaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0XCIpID09IHRydWVcbiAgICApIHtcbiAgICAgIHN3aXRjaCAodHlwZW9mIHZhcmlhYmxlW1wiZGVmYXVsdFwiXSkge1xuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgIHZhcmlhYmxlVHlwZSA9IFwiYm9vbFwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgdmFyaWFibGVUeXBlID0gXCJudW1iZXJcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB2YXJpYWJsZVR5cGUgPSBcImFueVwiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByYXdWYXJpYWJsZVR5cGUgPSB2YXJpYWJsZVtcInR5cGVcIl07XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiByYXdWYXJpYWJsZVR5cGUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgcmF3VmFyaWFibGVUeXBlLnN0YXJ0c1dpdGgoXCIke1wiKSAmJlxuICAgICAgICByYXdWYXJpYWJsZVR5cGUuZW5kc1dpdGgoXCJ9XCIpICYmXG4gICAgICAgICFyYXdWYXJpYWJsZVR5cGUuaW5jbHVkZXMoXCJcXG5cIilcbiAgICAgICkge1xuICAgICAgICB2YXJpYWJsZVR5cGUgPSByYXdWYXJpYWJsZVR5cGUuc2xpY2UoMiwgLTEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyaWFibGVUeXBlID0gXCJhbnlcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpdGVtOiBJbnB1dCA9IHtcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlOiB2YXJpYWJsZVR5cGUsXG4gICAgICBkZXNjcmlwdGlvbjogdmFyaWFibGVbXCJkZXNjcmlwdGlvblwiXSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIHJlcXVpcmVkOiB2YXJpYWJsZS5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRcIikgPT0gZmFsc2UsXG4gICAgfTtcblxuICAgIGlmICghaXRlbS5yZXF1aXJlZCkge1xuICAgICAgaXRlbVtcImRlZmF1bHRcIl0gPSB2YXJpYWJsZVtcImRlZmF1bHRcIl07XG4gICAgfVxuXG4gICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgdHJhbnNmb3JtT3V0cHV0cyA9IChvdXRwdXRzOiBhbnkpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgaWYgKG91dHB1dHMpIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMob3V0cHV0cykpIHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHVud3JhcElmQXJyYXkob3V0cHV0c1tuYW1lXSk7XG5cbiAgICAgIGNvbnN0IGl0ZW06IGFueSA9IHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IG91dHB1dFtcImRlc2NyaXB0aW9uXCJdLFxuICAgICAgfTtcblxuICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmNvbnN0IGhhcnZlc3RNb2R1bGVTY2hlbWEgPSBhc3luYyAoXG4gIHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZyxcbiAgbW9kdWxlczogc3RyaW5nW10sXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+ID0+IHtcbiAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmpvaW4oXG4gICAgd29ya2luZ0RpcmVjdG9yeSxcbiAgICBcIi50ZXJyYWZvcm1cIixcbiAgICBcIm1vZHVsZXNcIixcbiAgICBcIm1vZHVsZXMuanNvblwiLFxuICApO1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICBpZiAoIWZzLmV4aXN0c1N5bmMoZmlsZU5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYE1vZHVsZXMgd2VyZSBub3QgZ2VuZXJhdGVkIHByb3Blcmx5IC0gY291bGRuJ3QgZmluZCAke2ZpbGVOYW1lfWAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG1vZHVsZUluZGV4ID0gSlNPTi5wYXJzZShcbiAgICBmcy5yZWFkRmlsZVN5bmMoZmlsZU5hbWUsIFwidXRmLThcIiksXG4gICkgYXMgTW9kdWxlSW5kZXg7XG5cbiAgZm9yIChjb25zdCBtb2Qgb2YgbW9kdWxlcykge1xuICAgIGNvbnN0IG0gPSBtb2R1bGVJbmRleC5Nb2R1bGVzLmZpbmQoKG90aGVyKSA9PiBtb2QgPT09IG90aGVyLktleSk7XG5cbiAgICBpZiAoIW0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCAke219YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkID0gYXdhaXQgY29udmVydEZpbGVzKHBhdGguam9pbih3b3JraW5nRGlyZWN0b3J5LCBtLkRpcikpO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1vZHVsZXMgd2VyZSBub3QgZ2VuZXJhdGVkIHByb3Blcmx5IC0gY291bGRuJ3QgcGFyc2UgJHttLkRpcn1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzY2hlbWE6IE1vZHVsZVNjaGVtYSA9IHtcbiAgICAgIGlucHV0czogdHJhbnNmb3JtVmFyaWFibGVzKHBhcnNlZC52YXJpYWJsZSksXG4gICAgICBvdXRwdXRzOiB0cmFuc2Zvcm1PdXRwdXRzKHBhcnNlZC5vdXRwdXQpLFxuICAgICAgbmFtZTogbW9kLFxuICAgIH07XG5cbiAgICByZXN1bHRbbW9kXSA9IHNjaGVtYTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5mdW5jdGlvbiBqb2luV2l0aEFuZChpdGVtczogc3RyaW5nW10pOiBzdHJpbmcge1xuICBpZiAoaXRlbXMubGVuZ3RoIDw9IDEpIHJldHVybiBpdGVtcy5qb2luKFwiXCIpO1xuICByZXR1cm4gYCR7aXRlbXMuc2xpY2UoMCwgLTEpLmpvaW4oXCIsIFwiKX0gYW5kICR7aXRlbXNbaXRlbXMubGVuZ3RoIC0gMV19YDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXJyYWZvcm1Db25maWcge1xuICAvLyBhIGxpc3QgaG9sZHMgc2V2ZXJhbCBjb25maWd1cmF0aW9ucyBvZiB0aGUgc2FtZSBwcm92aWRlciwgd2hpY2ggaXMgaG93XG4gIC8vIGFsaWFzZWQgcHJvdmlkZXIgYmxvY2tzIGFyZSBleHByZXNzZWQgaW4gSlNPTiBzeW50YXhcbiAgcHJvdmlkZXI/OiB7IFtuYW1lOiBzdHJpbmddOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgUmVjb3JkPHN0cmluZywgYW55PltdIH07XG4gIHRlcnJhZm9ybToge1xuICAgIHJlcXVpcmVkX3Byb3ZpZGVycz86IHtcbiAgICAgIFtuYW1lOiBzdHJpbmddOiB7IHNvdXJjZT86IHN0cmluZzsgdmVyc2lvbj86IHN0cmluZyB9O1xuICAgIH07XG4gIH07XG4gIG1vZHVsZT86IHtcbiAgICBbbmFtZTogc3RyaW5nXToge1xuICAgICAgc291cmNlOiBzdHJpbmc7XG4gICAgICB2ZXJzaW9uPzogc3RyaW5nO1xuICAgICAgcHJvdmlkZXJzPzogeyBbbG9jYWxOYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFByb3ZpZGVyU2NoZW1hKFxuICB0YXJnZXQ6IENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0LFxuKSB7XG4gIGNvbnN0IGNvbmZpZzogVGVycmFmb3JtQ29uZmlnID0ge1xuICAgIHByb3ZpZGVyOiB7fSxcbiAgICB0ZXJyYWZvcm06IHtcbiAgICAgIHJlcXVpcmVkX3Byb3ZpZGVyczoge30sXG4gICAgfSxcbiAgfTtcblxuICBjb25maWcucHJvdmlkZXIhW3RhcmdldC5uYW1lXSA9IHt9O1xuICBjb25maWcudGVycmFmb3JtLnJlcXVpcmVkX3Byb3ZpZGVycyFbdGFyZ2V0Lm5hbWVdID0ge1xuICAgIHZlcnNpb246IHRhcmdldC52ZXJzaW9uLFxuICAgIHNvdXJjZTogdGFyZ2V0LnNvdXJjZSxcbiAgfTtcblxuICBsZXQgcHJvdmlkZXJTY2hlbWE6IFByb3ZpZGVyU2NoZW1hID0geyBmb3JtYXRfdmVyc2lvbjogXCIwLjFcIiB9O1xuXG4gIGF3YWl0IHdpdGhUZW1wRGlyKFwiZmV0Y2hQcm92aWRlclNjaGVtYVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3V0ZGlyID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihvdXRkaXIsIFwibWFpbi50Zi5qc29uXCIpO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7XG5cbiAgICBhd2FpdCB0ZXJyYWZvcm1Jbml0V2l0aFJldHJ5KHsgY3dkOiBvdXRkaXIgfSk7XG4gICAgcHJvdmlkZXJTY2hlbWEgPSBKU09OLnBhcnNlKFxuICAgICAgYXdhaXQgZXhlYyh0ZXJyYWZvcm1CaW5hcnlOYW1lLCBbXCJwcm92aWRlcnNcIiwgXCJzY2hlbWFcIiwgXCItanNvblwiXSwge1xuICAgICAgICBjd2Q6IG91dGRpcixcbiAgICAgIH0pLFxuICAgICkgYXMgUHJvdmlkZXJTY2hlbWE7XG5cbiAgICBjb25zdCB2ZXJzaW9uU2NoZW1hID0gSlNPTi5wYXJzZShcbiAgICAgIGF3YWl0IGV4ZWModGVycmFmb3JtQmluYXJ5TmFtZSwgW1widmVyc2lvblwiLCBcIi1qc29uXCJdLCB7XG4gICAgICAgIGN3ZDogb3V0ZGlyLFxuICAgICAgfSksXG4gICAgKSBhcyBWZXJzaW9uU2NoZW1hO1xuXG4gICAgcHJvdmlkZXJTY2hlbWEucHJvdmlkZXJfdmVyc2lvbnMgPSB2ZXJzaW9uU2NoZW1hLnByb3ZpZGVyX3NlbGVjdGlvbnM7XG4gIH0pO1xuXG4gIC8vIFN0YW1wIHRoZSBmZXRjaGluZyBDTEkncyBpZGVudGl0eSBzbyBkb3duc3RyZWFtIGNvbnN1bWVycyBjYW4gcmVhc29uXG4gIC8vIGFib3V0IHdoaWNoIG5ld2VyLXByb3RvY29sIHNlY3Rpb25zIHRoaXMgZmV0Y2ggY291bGQgcG9zc2libHkgaGF2ZVxuICAvLyBlbWl0dGVkLiBOZXZlciBmYWlsIHRoZSBmZXRjaCBvdmVyIHRoaXMgLSBpdCdzIGJlc3QtZWZmb3J0IG1ldGFkYXRhLlxuICB0cnkge1xuICAgIGNvbnN0IGNsaSA9IGF3YWl0IGdldEZldGNoaW5nQ2xpVmVyc2lvbigpO1xuICAgIHByb3ZpZGVyU2NoZW1hLmNsaV9uYW1lID0gY2xpLm5hbWU7XG4gICAgcHJvdmlkZXJTY2hlbWEuY2xpX3ZlcnNpb24gPSBjbGkudmVyc2lvbjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgQ291bGQgbm90IGRldGVybWluZSBmZXRjaGluZyBDTEkgdmVyc2lvbiB0byBzdGFtcCBwcm92aWRlciBzY2hlbWE6ICR7ZXJyb3J9YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHNhbml0aXplUHJvdmlkZXJTY2hlbWEocHJvdmlkZXJTY2hlbWEpO1xufVxuXG4vKipcbiAqIFdhcm5zIHdoZW4gdGhlIENMSSB0aGF0IHByb2R1Y2VkIGEgZ2l2ZW4gcHJvdmlkZXIgc2NoZW1hIHByZWRhdGVzIG9uZSBvclxuICogbW9yZSBzY2hlbWEtZW1pc3Npb24gYm91bmRhcmllcyB0aGUgcHJvamVjdCdzIGRlY2xhcmVkIGB0YXJnZXRWZXJzaW9uc2BcbiAqIGNhcmUgYWJvdXQgKHNlZSBlbWlzc2lvbi1jaGVjay50cykgLSBpLmUuIHNvbWUgbmV3ZXItcHJvdG9jb2wgc2VjdGlvbnNcbiAqIChmdW5jdGlvbnMsIGVwaGVtZXJhbCByZXNvdXJjZXMsIC4uLikgbWF5IGJlIG1pc3NpbmcgZnJvbSB0aGUgZ2VuZXJhdGVkXG4gKiBiaW5kaW5ncyBldmVuIHRob3VnaCB0aGUgc2NoZW1hIGZldGNoIGl0c2VsZiBzdWNjZWVkZWQuXG4gKlxuICogRGVsaWJlcmF0ZWx5IGRlY291cGxlZCBmcm9tIHRoZSBmZXRjaCBwYXRoIChyZWFkUHJvdmlkZXJTY2hlbWEpIHNvIGl0XG4gKiBhbHNvIHJ1bnMgZm9yIHNjaGVtYXMgc2VydmVkIGZyb20gdGhlIG9uLWRpc2sgY2FjaGU6IGNhY2hlZCBKU09OIGNhcnJpZXNcbiAqIHRoZSBzYW1lIGBjbGlfbmFtZWAvYGNsaV92ZXJzaW9uYCBzdGFtcHMgYSBmcmVzaCBmZXRjaCB3b3VsZCBoYXZlXG4gKiB3cml0dGVuICh0aGUgY2FjaGUga2V5IGFscmVhZHkgc2VnbWVudHMgYnkgQ0xJIHByb2R1Y3QrbWlub3IpLCBzbyB0aGUgZ2FwXG4gKiBjaGVjayBpcyBqdXN0IGFzIG1lYW5pbmdmdWwgb24gYSBjYWNoZSBoaXQgYXMgb24gYSBtaXNzLlxuICpcbiAqIE5vLW9wIHdpdGhvdXQgYHRhcmdldFZlcnNpb25zYCAtIHRoZXJlIGlzIG5vdGhpbmcgdG8gY29tcGFyZSB0aGUgQ0xJXG4gKiBhZ2FpbnN0LiBGYWxscyBiYWNrIHRvIHRoZSBjdXJyZW50IHByb2Nlc3MncyBmZXRjaGluZyBDTEkgdmVyc2lvbiB3aGVuXG4gKiB0aGUgc2NoZW1hIGl0c2VsZiBpc24ndCBzdGFtcGVkIChlLmcuIG9sZGVyIGNhY2hlIGVudHJpZXMgd3JpdHRlbiBiZWZvcmVcbiAqIHN0YW1waW5nIGV4aXN0ZWQpLlxuICpcbiAqIEBpbnRlcm5hbCBleHBvc2VkIGZvciB0ZXN0aW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YXJuSWZTY2hlbWFFbWlzc2lvbkdhcHMoXG4gIHNjaGVtYTogUHJvdmlkZXJTY2hlbWEsXG4gIHRhcmdldFZlcnNpb25zPzogVGVycmFmb3JtVGFyZ2V0VmVyc2lvbnMsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCF0YXJnZXRWZXJzaW9ucykgcmV0dXJuO1xuXG4gIGxldCBjbGk6IFRlcnJhZm9ybUNsaVZlcnNpb247XG4gIGlmIChzY2hlbWEuY2xpX25hbWUgJiYgc2NoZW1hLmNsaV92ZXJzaW9uKSB7XG4gICAgaWYgKHNjaGVtYS5jbGlfbmFtZSAhPT0gXCJ0ZXJyYWZvcm1cIiAmJiBzY2hlbWEuY2xpX25hbWUgIT09IFwib3BlbnRvZnVcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjbGkgPSB7IG5hbWU6IHNjaGVtYS5jbGlfbmFtZSwgdmVyc2lvbjogc2NoZW1hLmNsaV92ZXJzaW9uIH07XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGNsaSA9IGF3YWl0IGdldEZldGNoaW5nQ2xpVmVyc2lvbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIGZldGNoaW5nIENMSSB2ZXJzaW9uIHRvIGNoZWNrIGZvciBzY2hlbWEgZW1pc3Npb24gZ2FwczogJHtlcnJvcn1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBjb25zdCBnYXBGYW1pbGllcyA9IGNoZWNrU2NoZW1hRW1pc3Npb25HYXBGYW1pbGllcyhjbGksIHRhcmdldFZlcnNpb25zKTtcbiAgaWYgKGdhcEZhbWlsaWVzLmxlbmd0aCA+IDAgJiYgY2xpLnZlcnNpb24pIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgIGBwcm92aWRlciBzY2hlbWEgZmV0Y2hlZCB3aXRoICR7Y2xpLm5hbWV9ICR7Y2xpLnZlcnNpb259IOKAlCAke2pvaW5XaXRoQW5kKFxuICAgICAgICBnYXBGYW1pbGllcy5tYXAoKGZhbWlseSkgPT4gU0NIRU1BX0VNSVNTSU9OX0ZBTUlMWV9MQUJFTFNbZmFtaWx5XSksXG4gICAgICApfSB3aWxsIG5vdCBiZSBnZW5lcmF0ZWQ7IHJ1biBjZGt0biBnZXQgd2l0aCAke3N1Z2dlc3RlZEVtaXR0aW5nQ2xpVmVyc2lvbnMoXG4gICAgICAgIGdhcEZhbWlsaWVzLFxuICAgICAgKX1gLFxuICAgICk7XG4gIH1cbn1cblxuLy8gVGhlIHByb3ZpZGVycyBoYXZlIHNvbWUgcG90ZW50aWFsIGJ1Z3MgdGhhdCB3ZSB3YW50IHRvIHByby1hY3RpdmVseVxuLy8gZml4IGhlcmUgc28gdGhhdCB0aGUgcmVzdCBvZiB0aGUgY29kZSBjYW4gYXNzdW1lIGEgY29uc2lzdGVudCBzY2hlbWEuXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVQcm92aWRlclNjaGVtYShzY2hlbWE6IFByb3ZpZGVyU2NoZW1hKTogUHJvdmlkZXJTY2hlbWEge1xuICAvLyBNYWlubHkgc29tZSBhdHRyaWJ1dGVzIGFyZSBcImRvdWJsZWRcIiwgZS5nLiBbXCJsaXN0XCIsIFwic3RyaW5nXCIsIFwibGlzdFwiLCBcInN0cmluZ1wiXVxuICAvLyBpbnN0ZWFkIG9mIFtcImxpc3RcIiwgXCJzdHJpbmdcIl1cbiAgZnVuY3Rpb24gYXR0cmlidXRlRG91YmxpbmdGaXgoYXR0cmlidXRlOiBBdHRyaWJ1dGUpOiBBdHRyaWJ1dGUge1xuICAgIGlmIChpc05lc3RlZFR5cGVBdHRyaWJ1dGUoYXR0cmlidXRlKSB8fCAhQXJyYXkuaXNBcnJheShhdHRyaWJ1dGUudHlwZSkpIHtcbiAgICAgIHJldHVybiBhdHRyaWJ1dGU7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZSA9XG4gICAgICBhdHRyaWJ1dGUudHlwZS5sZW5ndGggPT09IDJcbiAgICAgICAgPyBhdHRyaWJ1dGUudHlwZVxuICAgICAgICA6IChhdHRyaWJ1dGUudHlwZSBhcyBzdHJpbmdbXSkuc2xpY2UoMCwgMik7IC8vIFRoZSB0eXBlcyB0ZWxsIHVzIHRoaXMgY2FuJ3QgaGFwcGVuLCByZWFsaXR5IGJlZ3MgdG8gZGlmZmVyXG5cbiAgICBhdHRyaWJ1dGUudHlwZSA9IHR5cGUgYXMgQXR0cmlidXRlVHlwZTtcbiAgICByZXR1cm4gYXR0cmlidXRlO1xuICB9XG5cbiAgLy8gTXV0YXRlcyBibG9jayB3aXRoIHRoZSBmaXhcbiAgZnVuY3Rpb24gc2FuaXRpemVCbG9jayhibG9jazogQmxvY2spIHtcbiAgICBPYmplY3QudmFsdWVzKGJsb2NrLmF0dHJpYnV0ZXMgfHwge30pLmZvckVhY2goYXR0cmlidXRlRG91YmxpbmdGaXgpO1xuICAgIE9iamVjdC52YWx1ZXMoYmxvY2suYmxvY2tfdHlwZXMgfHwge30pLmZvckVhY2goKGJsb2NrVHlwZSkgPT4ge1xuICAgICAgc2FuaXRpemVCbG9jayhibG9ja1R5cGUuYmxvY2spO1xuICAgIH0pO1xuICB9XG5cbiAgT2JqZWN0LnZhbHVlcyhzY2hlbWEucHJvdmlkZXJfc2NoZW1hcyB8fCB7fSkuZm9yRWFjaCgocHJvdmlkZXIpID0+IHtcbiAgICBjb25zdCBlbnRpdGllcyA9IFtcbiAgICAgIHByb3ZpZGVyLnByb3ZpZGVyLFxuICAgICAgLi4uT2JqZWN0LnZhbHVlcyhwcm92aWRlci5yZXNvdXJjZV9zY2hlbWFzIHx8IHt9KSxcbiAgICAgIC4uLk9iamVjdC52YWx1ZXMocHJvdmlkZXIuZGF0YV9zb3VyY2Vfc2NoZW1hcyB8fCB7fSksXG4gICAgICAuLi5PYmplY3QudmFsdWVzKHByb3ZpZGVyLmVwaGVtZXJhbF9yZXNvdXJjZV9zY2hlbWFzIHx8IHt9KSxcbiAgICBdO1xuXG4gICAgZW50aXRpZXMuZm9yRWFjaCgoZW50aXR5KSA9PiB7XG4gICAgICBzYW5pdGl6ZUJsb2NrKGVudGl0eS5ibG9jayk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiBzY2hlbWE7XG59XG5cbi8qKlxuICogQSBwcm92aWRlciBjb25maWd1cmF0aW9uIHRoYXQgYSBtb2R1bGUgZXhwZWN0cyB0byBiZSBoYW5kZWQgYnkgaXRzIGNhbGxlcixcbiAqIGRlY2xhcmVkIGFzIGBjb25maWd1cmF0aW9uX2FsaWFzZXNgIGluIHRoZSBtb2R1bGUncyBgcmVxdWlyZWRfcHJvdmlkZXJzYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2R1bGVQcm92aWRlckFsaWFzIHtcbiAgLyoqIGxvY2FsIG5hbWUgdGhlIG1vZHVsZSBrbm93cyB0aGUgcHJvdmlkZXIgYnksIGUuZy4gYGF3c2AgKi9cbiAgbG9jYWxOYW1lOiBzdHJpbmc7XG4gIC8qKiBhbGlhcyBwYXJ0IG9mIHRoZSByZWZlcmVuY2UsIGUuZy4gYGdsb2JhbF9yZWdpb25gICovXG4gIGFsaWFzOiBzdHJpbmc7XG4gIC8qKiBwcm92aWRlciBzb3VyY2UgdGhlIG1vZHVsZSBkZWNsYXJlZCBmb3IgYGxvY2FsTmFtZWAsIGlmIGl0IGRlY2xhcmVkIG9uZSAqL1xuICBzb3VyY2U/OiBzdHJpbmc7XG59XG5cbmNvbnN0IENPTkZJR1VSQVRJT05fQUxJQVMgPSAvXihbXFx3LV0rKVxcLihbXFx3LV0rKSQvO1xuXG4vLyBoY2wyanNvbiBoYW5kcyBIQ0wgZXhwcmVzc2lvbnMgYmFjayBhcyBpbnRlcnBvbGF0aW9ucywgc28gYVxuLy8gYGNvbmZpZ3VyYXRpb25fYWxpYXNlcyA9IFthd3MuZ2xvYmFsX3JlZ2lvbl1gIGVudHJ5IGFycml2ZXMgYXMgdGhlIHN0cmluZ1xuLy8gXCIke2F3cy5nbG9iYWxfcmVnaW9ufVwiLiBBIC50Zi5qc29uIG1vZHVsZSB3cml0ZXMgdGhlIHNhbWUgcmVmZXJlbmNlIGFzIGFcbi8vIHBsYWluIHN0cmluZywgd2hpY2ggaGNsMmpzb24gcGFzc2VzIHRocm91Z2ggdW50b3VjaGVkLlxuY29uc3QgdW53cmFwSW50ZXJwb2xhdGlvbiA9ICh2YWx1ZTogc3RyaW5nKSA9PlxuICB2YWx1ZS5zdGFydHNXaXRoKFwiJHtcIikgJiYgdmFsdWUuZW5kc1dpdGgoXCJ9XCIpID8gdmFsdWUuc2xpY2UoMiwgLTEpIDogdmFsdWU7XG5cbmNvbnN0IHRvQXJyYXkgPSA8VD4oaXRlbTogVCB8IFRbXSB8IHVuZGVmaW5lZCB8IG51bGwpOiBUW10gPT4ge1xuICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpIHJldHVybiBbXTtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoaXRlbSkgPyBpdGVtIDogW2l0ZW1dO1xufTtcblxuLyoqXG4gKiBFdmVyeSBvY2N1cnJlbmNlIG9mIGEgYmxvY2sgdGhhdCBoY2wyanNvbiBwcm9kdWNlZCB1bmRlciBvbmUga2V5LlxuICpcbiAqIEhDTCBibG9ja3MgY29tZSBiYWNrIGFzIGFuIGFycmF5IHdpdGggYW4gZW50cnkgcGVyIG9jY3VycmVuY2UsIGEgLnRmLmpzb25cbiAqIGJsb2NrIGFzIGEgcGxhaW4gb2JqZWN0LiBBIG1vZHVsZSBtaXhpbmcgYm90aCBzeW50YXhlcyBnZXRzIGEgdGhpcmQgc2hhcGU6XG4gKiBoY2wyanNvbiBtZXJnZXMgdGhlIEpTT04gZmlsZSBpbnRvIHRoZSBwYXJzZWQgSENMLCBhbmQgaXRzIGRlZXBNZXJnZVxuICogcmVjdXJzZXMgaW50byB0aGUgSENMIGFycmF5IGluc3RlYWQgb2YgYXBwZW5kaW5nIHRvIGl0LCBsZWF2aW5nIHRoZSBKU09OXG4gKiBjb250cmlidXRpb24gaGFuZ2luZyBvZmYgdGhlIGFycmF5IGFzIG5hbWVkIHByb3BlcnRpZXMuIFRob3NlIHByb3BlcnRpZXNcbiAqIGFyZSBhbiBvY2N1cnJlbmNlIG9mIHRoZWlyIG93biAtIGFuZCBvbmUgdGhhdCBuZWl0aGVyIGl0ZXJhdGluZyB0aGUgYXJyYXlcbiAqIG5vciBKU09OLnN0cmluZ2lmeSB3b3VsZCBldmVyIHNob3cuXG4gKi9cbmNvbnN0IGJsb2NrT2NjdXJyZW5jZXMgPSAoYmxvY2s6IGFueSk6IGFueVtdID0+IHtcbiAgaWYgKGJsb2NrID09PSB1bmRlZmluZWQgfHwgYmxvY2sgPT09IG51bGwpIHJldHVybiBbXTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGJsb2NrKSkgcmV0dXJuIFtibG9ja107XG5cbiAgY29uc3QgbWVyZ2VkID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGJsb2NrKS5maWx0ZXIoKFtrZXldKSA9PiAhL15cXGQrJC8udGVzdChrZXkpKSxcbiAgKTtcblxuICByZXR1cm4gT2JqZWN0LmtleXMobWVyZ2VkKS5sZW5ndGggPiAwID8gWy4uLmJsb2NrLCBtZXJnZWRdIDogWy4uLmJsb2NrXTtcbn07XG5cbi8qKlxuICogQ29sbGVjdHMgdGhlIHByb3ZpZGVyIGNvbmZpZ3VyYXRpb25zIGEgbW9kdWxlIHJlcXVpcmVzIGl0cyBjYWxsZXIgdG8gcGFzc1xuICogaW4sIGZyb20gdGhlIGhjbDJqc29uIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2R1bGUncyBkaXJlY3RvcnkuXG4gKlxuICogQSBtb2R1bGUgbWF5IGRlY2xhcmUgYHJlcXVpcmVkX3Byb3ZpZGVyc2AgaW4gbW9yZSB0aGFuIG9uZSBgdGVycmFmb3JtYFxuICogYmxvY2ssIGFuZCBtYXkgc3ByZWFkIHRoZW0gYWNyb3NzIC50ZiBhbmQgLnRmLmpzb24gZmlsZXM7IGV2ZXJ5IG9jY3VycmVuY2VcbiAqIGhjbDJqc29uIHJlcG9ydHMgaXMgY29uc2lkZXJlZCAoc2VlIHtAbGluayBibG9ja09jY3VycmVuY2VzfSkuXG4gKlxuICogQGludGVybmFsIGV4cG9zZWQgZm9yIHRlc3RpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RNb2R1bGVQcm92aWRlckFsaWFzZXMoXG4gIHBhcnNlZE1vZHVsZTogYW55LFxuKTogTW9kdWxlUHJvdmlkZXJBbGlhc1tdIHtcbiAgY29uc3QgYWxpYXNlczogTW9kdWxlUHJvdmlkZXJBbGlhc1tdID0gW107XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IHRlcnJhZm9ybUJsb2NrIG9mIGJsb2NrT2NjdXJyZW5jZXMocGFyc2VkTW9kdWxlPy50ZXJyYWZvcm0pKSB7XG4gICAgZm9yIChjb25zdCByZXF1aXJlZFByb3ZpZGVycyBvZiBibG9ja09jY3VycmVuY2VzKFxuICAgICAgdGVycmFmb3JtQmxvY2s/LnJlcXVpcmVkX3Byb3ZpZGVycyxcbiAgICApKSB7XG4gICAgICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIE9iamVjdC52YWx1ZXMocmVxdWlyZWRQcm92aWRlcnMgfHwge30pKSB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdW53cmFwSWZBcnJheShkZWNsYXJhdGlvbiBhcyBhbnkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdG9BcnJheShwcm92aWRlcj8uY29uZmlndXJhdGlvbl9hbGlhc2VzKSkge1xuICAgICAgICAgIGNvbnN0IG1hdGNoID0gQ09ORklHVVJBVElPTl9BTElBUy5leGVjKFxuICAgICAgICAgICAgdW53cmFwSW50ZXJwb2xhdGlvbihTdHJpbmcoZW50cnkpKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghbWF0Y2gpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY29uc3QgWywgbG9jYWxOYW1lLCBhbGlhc10gPSBtYXRjaDtcbiAgICAgICAgICBjb25zdCBrZXkgPSBgJHtsb2NhbE5hbWV9LiR7YWxpYXN9YDtcbiAgICAgICAgICBpZiAoc2Vlbi5oYXMoa2V5KSkgY29udGludWU7XG4gICAgICAgICAgc2Vlbi5hZGQoa2V5KTtcblxuICAgICAgICAgIGFsaWFzZXMucHVzaCh7IGxvY2FsTmFtZSwgYWxpYXMsIHNvdXJjZTogcHJvdmlkZXI/LnNvdXJjZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhbGlhc2VzO1xufVxuXG4vKipcbiAqIERlY2xhcmVzIHRoZSBwcm92aWRlciBjb25maWd1cmF0aW9ucyB0aGF0IGBhbGlhc2VzYCBuYW1lcyBvbiB0aGUgc3ludGhldGljXG4gKiByb290IGNvbmZpZyBhbmQgcGFzc2VzIHRoZW0gaW50byB0aGUgbW9kdWxlIGNhbGwsIHdoaWNoIGlzIHdoYXQgVGVycmFmb3JtXG4gKiBkZW1hbmRzIG9mIGFueW9uZSBjYWxsaW5nIGEgbW9kdWxlIHdpdGggYGNvbmZpZ3VyYXRpb25fYWxpYXNlc2AuXG4gKlxuICogVGhlIGFsaWFzIGJsb2NrcyBzdGF5IGVtcHR5OiBgdGVycmFmb3JtIGdldGAgb25seSBidWlsZHMgdGhlIGNvbmZpZ3VyYXRpb25cbiAqIHRyZWUsIGl0IG5ldmVyIGNvbmZpZ3VyZXMgb3IgaW5zdGFsbHMgYSBwcm92aWRlci4gU291cmNlcyBhcmUgbWlycm9yZWQgZnJvbVxuICogdGhlIG1vZHVsZSdzIG93biBgcmVxdWlyZWRfcHJvdmlkZXJzYCBzbyBhIG1vZHVsZSByZWZlcnJpbmcgdG8sIHNheSxcbiAqIGhhc2hpY29ycC9hd3MgdW5kZXIgYSBub24tZGVmYXVsdCBsb2NhbCBuYW1lIHN0aWxsIHJlc29sdmVzIHRvIHRoZSBzYW1lXG4gKiBwcm92aWRlciBpbiB0aGUgcm9vdC5cbiAqXG4gKiBAaW50ZXJuYWwgZXhwb3NlZCBmb3IgdGVzdGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNb2R1bGVQcm92aWRlckFsaWFzZXMoXG4gIGNvbmZpZzogVGVycmFmb3JtQ29uZmlnLFxuICBtb2R1bGVLZXk6IHN0cmluZyxcbiAgYWxpYXNlczogTW9kdWxlUHJvdmlkZXJBbGlhc1tdLFxuKTogVGVycmFmb3JtQ29uZmlnIHtcbiAgY29uc3QgbW9kdWxlQ2FsbCA9IGNvbmZpZy5tb2R1bGU/Llttb2R1bGVLZXldO1xuICBpZiAoIW1vZHVsZUNhbGwgfHwgYWxpYXNlcy5sZW5ndGggPT09IDApIHJldHVybiBjb25maWc7XG5cbiAgZm9yIChjb25zdCB7IGxvY2FsTmFtZSwgYWxpYXMsIHNvdXJjZSB9IG9mIGFsaWFzZXMpIHtcbiAgICBpZiAoc291cmNlKSB7XG4gICAgICBjb25maWcudGVycmFmb3JtLnJlcXVpcmVkX3Byb3ZpZGVycyA9IHtcbiAgICAgICAgLi4uY29uZmlnLnRlcnJhZm9ybS5yZXF1aXJlZF9wcm92aWRlcnMsXG4gICAgICAgIFtsb2NhbE5hbWVdOiB7IHNvdXJjZSB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25maWcucHJvdmlkZXIgPSBjb25maWcucHJvdmlkZXIgfHwge307XG4gICAgY29uc3QgYmxvY2tzID0gdG9BcnJheShjb25maWcucHJvdmlkZXJbbG9jYWxOYW1lXSk7XG4gICAgaWYgKCFibG9ja3Muc29tZSgoYmxvY2spID0+IGJsb2NrLmFsaWFzID09PSBhbGlhcykpIHtcbiAgICAgIGJsb2Nrcy5wdXNoKHsgYWxpYXMgfSk7XG4gICAgfVxuICAgIGNvbmZpZy5wcm92aWRlcltsb2NhbE5hbWVdID0gYmxvY2tzO1xuXG4gICAgbW9kdWxlQ2FsbC5wcm92aWRlcnMgPSB7XG4gICAgICAuLi5tb2R1bGVDYWxsLnByb3ZpZGVycyxcbiAgICAgIFtgJHtsb2NhbE5hbWV9LiR7YWxpYXN9YF06IGAke2xvY2FsTmFtZX0uJHthbGlhc31gLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gY29uZmlnO1xufVxuXG4vKipcbiAqIFRoZSBgLy9zdWJkaXJgIHBvcnRpb24gb2YgYSBtb2R1bGUgc291cmNlLCBpZiBpdCBoYXMgb25lLCBtaXJyb3JpbmcgaG93XG4gKiBUZXJyYWZvcm0gdW5wYWNrcyBhIHBhY2thZ2UgaW50byBgLnRlcnJhZm9ybS9tb2R1bGVzLzxrZXk+LzxzdWJkaXI+YC5cbiAqXG4gKiBAaW50ZXJuYWwgZXhwb3NlZCBmb3IgdGVzdGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFja2FnZVN1YmRpcihzb3VyY2U6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IFt3aXRob3V0UXVlcnldID0gc291cmNlLnNwbGl0KFwiP1wiKTtcbiAgY29uc3Qgd2l0aG91dEdldHRlclByZWZpeCA9IHdpdGhvdXRRdWVyeS5yZXBsYWNlKC9eW0EtWmEtejAtOV0rOjovLCBcIlwiKTtcbiAgY29uc3Qgd2l0aG91dFNjaGVtZSA9IHdpdGhvdXRHZXR0ZXJQcmVmaXgucmVwbGFjZShcbiAgICAvXltBLVphLXpdW0EtWmEtejAtOSsuLV0qOlxcL1xcLysvLFxuICAgIFwiXCIsXG4gICk7XG5cbiAgY29uc3QgWywgLi4ucmVzdF0gPSB3aXRob3V0U2NoZW1lLnNwbGl0KFwiLy9cIik7XG4gIGNvbnN0IHN1YmRpciA9IHJlc3Quam9pbihcIi8vXCIpLnJlcGxhY2UoL15cXC8rfFxcLyskL2csIFwiXCIpO1xuICByZXR1cm4gc3ViZGlyIHx8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBXaGVyZSB0aGUgbW9kdWxlIFRlcnJhZm9ybSBqdXN0IGZldGNoZWQgZW5kZWQgdXAgb24gZGlzay5cbiAqXG4gKiBUaGUgbWFuaWZlc3QgaXMgdGhlIGF1dGhvcml0eSwgYnV0IGEgYHRlcnJhZm9ybSBnZXRgIHRoYXQgaW5zdGFsbGVkIHRoZVxuICogbW9kdWxlIGFuZCB0aGVuIGZhaWxlZCB0byB2YWxpZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBhcm91bmQgaXQgbGVhdmVzIG5vXG4gKiBtYW5pZmVzdCBiZWhpbmQgLSBzbyBmYWxsIGJhY2sgdG8gdGhlIGxvY2F0aW9ucyBUZXJyYWZvcm0gaW5zdGFsbHMgaW50bzpcbiAqIGxvY2FsIG1vZHVsZXMgYXJlIHJlYWQgd2hlcmUgdGhleSBhcmUsIHJlbW90ZSBwYWNrYWdlcyBhcmUgdW5wYWNrZWQgaW50b1xuICogYC50ZXJyYWZvcm0vbW9kdWxlcy88a2V5PmAuXG4gKlxuICogQGludGVybmFsIGV4cG9zZWQgZm9yIHRlc3RpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZldGNoZWRNb2R1bGVEaXIoXG4gIHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZyxcbiAgbW9kdWxlS2V5OiBzdHJpbmcsXG4gIHNvdXJjZTogc3RyaW5nLFxuICBsb2NhbFNvdXJjZUFic29sdXRlUGF0aD86IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGNvbnN0IG1hbmlmZXN0UGF0aCA9IHBhdGguam9pbihcbiAgICB3b3JraW5nRGlyZWN0b3J5LFxuICAgIFwiLnRlcnJhZm9ybVwiLFxuICAgIFwibW9kdWxlc1wiLFxuICAgIFwibW9kdWxlcy5qc29uXCIsXG4gICk7XG5cbiAgaWYgKGZzLmV4aXN0c1N5bmMobWFuaWZlc3RQYXRoKSkge1xuICAgIGNvbnN0IG1vZHVsZUluZGV4ID0gSlNPTi5wYXJzZShcbiAgICAgIGZzLnJlYWRGaWxlU3luYyhtYW5pZmVzdFBhdGgsIFwidXRmLThcIiksXG4gICAgKSBhcyBNb2R1bGVJbmRleDtcbiAgICBjb25zdCByZWNvcmQgPSBtb2R1bGVJbmRleC5Nb2R1bGVzLmZpbmQoKG1vZCkgPT4gbW9kLktleSA9PT0gbW9kdWxlS2V5KTtcblxuICAgIGlmIChyZWNvcmQpIHtcbiAgICAgIHJldHVybiBwYXRoLnJlc29sdmUod29ya2luZ0RpcmVjdG9yeSwgcmVjb3JkLkRpcik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxvY2FsU291cmNlQWJzb2x1dGVQYXRoKSB7XG4gICAgcmV0dXJuIGxvY2FsU291cmNlQWJzb2x1dGVQYXRoO1xuICB9XG5cbiAgcmV0dXJuIHBhdGguam9pbihcbiAgICB3b3JraW5nRGlyZWN0b3J5LFxuICAgIFwiLnRlcnJhZm9ybVwiLFxuICAgIFwibW9kdWxlc1wiLFxuICAgIG1vZHVsZUtleSxcbiAgICBwYWNrYWdlU3ViZGlyKHNvdXJjZSkgfHwgXCJcIixcbiAgKTtcbn1cblxuLyoqXG4gKiBSdW5zIGB0ZXJyYWZvcm0gZ2V0YCBhbmQgaGFuZHMgdGhlIGZhaWx1cmUgYmFjayBpbnN0ZWFkIG9mIHRocm93aW5nIGl0LlxuICpcbiAqIEl0cyBkaWFnbm9zdGljcyBhcmUgbm90IGZpbmFsIChzZWUge0BsaW5rIHJlYWRNb2R1bGVTY2hlbWF9KSwgc28gdGhleSBnbyB0b1xuICogdGhlIGRlYnVnIGxvZyByYXRoZXIgdGhhbiB0aGUgdGVybWluYWw7IHRoZSByZXR1cm5lZCBlcnJvciBzdGlsbCBjYXJyaWVzXG4gKiB0aGVtIG9uIGl0cyBgc3RkZXJyYCBmb3IgY2FsbGVycyB0aGF0IGVuZCB1cCByZXRocm93aW5nIGl0LlxuICovXG5hc3luYyBmdW5jdGlvbiB0cnlUZXJyYWZvcm1HZXQob3V0ZGlyOiBzdHJpbmcpOiBQcm9taXNlPEVycm9yIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgZXhlYyhcbiAgICAgIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgICBbXCJnZXRcIl0sXG4gICAgICB7IGN3ZDogb3V0ZGlyLCBsb2dTdGRlcnJBc0RlYnVnOiB0cnVlIH0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBmYWxzZSxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICByZXR1cm4gZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRNb2R1bGVTY2hlbWEodGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXQpIHtcbiAgbGV0IG1vZHVsZVNjaGVtYTogUmVjb3JkPHN0cmluZywgTW9kdWxlU2NoZW1hPiA9IHt9O1xuXG4gIGF3YWl0IHdpdGhUZW1wRGlyKFwiZmV0Y2hTY2hlbWFcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZzogVGVycmFmb3JtQ29uZmlnID0ge1xuICAgICAgdGVycmFmb3JtOiB7fSxcbiAgICB9O1xuXG4gICAgaWYgKCFjb25maWcubW9kdWxlKSBjb25maWcubW9kdWxlID0ge307XG4gICAgbGV0IHNvdXJjZTogc3RyaW5nID0gdGFyZ2V0LnNvdXJjZTtcblxuICAgIGNvbnN0IGxvY2FsU291cmNlID0gKHRhcmdldC5jb25zdHJhaW50IGFzIFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQpXG4gICAgICAubG9jYWxTb3VyY2VBYnNvbHV0ZVBhdGg7XG4gICAgaWYgKGxvY2FsU291cmNlKSB7XG4gICAgICAvLyBjcmVhdGUgcmVsYXRpdmUgcGF0aCB0byBtb2R1bGUgaW4gdGhlIHVzZXIgcHJvamVjdFxuICAgICAgc291cmNlID0gcGF0aC5yZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBsb2NhbFNvdXJjZSk7XG4gICAgfVxuXG4gICAgY29uZmlnLm1vZHVsZVt0YXJnZXQubW9kdWxlS2V5XSA9IHsgc291cmNlOiBzb3VyY2UgfTtcbiAgICBpZiAodGFyZ2V0LnZlcnNpb24pIHtcbiAgICAgIGNvbmZpZy5tb2R1bGVbdGFyZ2V0Lm1vZHVsZUtleV1bXCJ2ZXJzaW9uXCJdID0gdGFyZ2V0LnZlcnNpb247XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0ZGlyID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihvdXRkaXIsIFwibWFpbi50Zi5qc29uXCIpO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7XG5cbiAgICAvLyBgdGVycmFmb3JtIGdldGAgaXMgYm90aCBvdXIgZG93bmxvYWRlciBhbmQgYSBmdWxsIHZhbGlkYXRpb24gb2YgdGhlXG4gICAgLy8gc3ludGhldGljIHJvb3QgY29uZmlnIHdyYXBwZWQgYXJvdW5kIHRoZSBtb2R1bGUuIEEgbW9kdWxlIGRlY2xhcmluZ1xuICAgIC8vIGBjb25maWd1cmF0aW9uX2FsaWFzZXNgIGNhbm5vdCB2YWxpZGF0ZSB1bnRpbCB0aGUgcm9vdCBwYXNzZXMgdGhvc2VcbiAgICAvLyBjb25maWd1cmF0aW9ucyBpbiwgYW5kIHRoZWlyIG5hbWVzIGFyZSBvbmx5IGtub3dhYmxlIG9uY2UgdGhlIG1vZHVsZSBpc1xuICAgIC8vIG9uIGRpc2sgLSBzbyB0aGlzIGZpcnN0IHJ1biBpcyBhIGZldGNoIHdlIGRlZmVyIGp1ZGdlbWVudCBvbi4gVGVycmFmb3JtXG4gICAgLy8gaW5zdGFsbHMgdGhlIG1vZHVsZSBlaXRoZXIgd2F5OyBzaW5jZSAxLjE1IGl0IGp1c3Qgc3RvcHMgc2hvcnQgb2ZcbiAgICAvLyB3cml0aW5nIHRoZSBtb2R1bGUgbWFuaWZlc3Qgd2hlbiB2YWxpZGF0aW9uIGZhaWxzICh0ZXJyYWZvcm0jMzgyMTdcbiAgICAvLyBkcm9wcGVkIHRoZSBlcnJvci10by13YXJuaW5nIGRvd25ncmFkZSB0aGF0IGB0ZXJyYWZvcm0gZ2V0YCB1c2VkIHRvXG4gICAgLy8gYXBwbHkpLCB3aGljaCBpcyB3aGF0IHRoZSBzZWNvbmQgcnVuIGJlbG93IHJlc3RvcmVzLlxuICAgIGNvbnN0IGZldGNoRXJyb3IgPSBhd2FpdCB0cnlUZXJyYWZvcm1HZXQob3V0ZGlyKTtcblxuICAgIGNvbnN0IG1vZHVsZURpciA9IGZldGNoZWRNb2R1bGVEaXIoXG4gICAgICBvdXRkaXIsXG4gICAgICB0YXJnZXQubW9kdWxlS2V5LFxuICAgICAgc291cmNlLFxuICAgICAgbG9jYWxTb3VyY2UsXG4gICAgKTtcbiAgICBjb25zdCBhbGlhc2VzID0gZnMuZXhpc3RzU3luYyhtb2R1bGVEaXIpXG4gICAgICA/IGNvbGxlY3RNb2R1bGVQcm92aWRlckFsaWFzZXMoYXdhaXQgY29udmVydEZpbGVzKG1vZHVsZURpcikpXG4gICAgICA6IFtdO1xuXG4gICAgaWYgKGFsaWFzZXMubGVuZ3RoID4gMCkge1xuICAgICAgYXBwbHlNb2R1bGVQcm92aWRlckFsaWFzZXMoY29uZmlnLCB0YXJnZXQubW9kdWxlS2V5LCBhbGlhc2VzKTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7XG4gICAgICBhd2FpdCBleGVjKHRlcnJhZm9ybUJpbmFyeU5hbWUsIFtcImdldFwiXSwgeyBjd2Q6IG91dGRpciB9KTtcbiAgICB9IGVsc2UgaWYgKGZldGNoRXJyb3IpIHtcbiAgICAgIC8vIG5vdGhpbmcgaGVyZSB3YXMgc2FsdmFnZWFibGUgYWZ0ZXIgYWxsLCBzbyByZXBvcnQgdGhlIGRpYWdub3N0aWNzIHRoYXRcbiAgICAgIC8vIHdlcmUgaGVsZCBiYWNrIHdoaWxlIHRoZSBmZXRjaCBzdGlsbCBoYWQgYSBzZWNvbmQgY2hhbmNlXG4gICAgICBsb2dnZXIuZXJyb3IoKGZldGNoRXJyb3IgYXMgYW55KS5zdGRlcnIgfHwgU3RyaW5nKGZldGNoRXJyb3IpKTtcbiAgICAgIHRocm93IGZldGNoRXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5tb2R1bGUpIHtcbiAgICAgIG1vZHVsZVNjaGVtYSA9IGF3YWl0IGhhcnZlc3RNb2R1bGVTY2hlbWEoXG4gICAgICAgIG91dGRpcixcbiAgICAgICAgT2JqZWN0LmtleXMoY29uZmlnLm1vZHVsZSksXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG1vZHVsZVNjaGVtYTtcbn1cbiJdfQ==
|
package/build/read.js
CHANGED
|
@@ -7,7 +7,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
7
7
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
8
|
};
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.
|
|
10
|
+
exports.isLocalModule = exports.TerraformProviderConstraint = exports.TerraformModuleConstraint = exports.isRegistryModule = void 0;
|
|
11
|
+
exports.readSchema = readSchema;
|
|
11
12
|
var commons_1 = require("@cdktn/commons");
|
|
12
13
|
Object.defineProperty(exports, "isRegistryModule", { enumerable: true, get: function () { return commons_1.isRegistryModule; } });
|
|
13
14
|
Object.defineProperty(exports, "TerraformModuleConstraint", { enumerable: true, get: function () { return commons_1.TerraformModuleConstraint; } });
|
|
@@ -60,7 +61,6 @@ async function readSchema(constraints, cacheDir, targetVersions) {
|
|
|
60
61
|
});
|
|
61
62
|
return deepmerge_1.default.all(schemas);
|
|
62
63
|
}
|
|
63
|
-
exports.readSchema = readSchema;
|
|
64
64
|
function throwIfTargetsConflict(targets) {
|
|
65
65
|
const modules = targets.filter((t) => t.isModule);
|
|
66
66
|
modules.forEach((moduleA) => {
|
|
@@ -71,4 +71,4 @@ function throwIfTargetsConflict(targets) {
|
|
|
71
71
|
});
|
|
72
72
|
});
|
|
73
73
|
}
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7Ozs7OztBQXlESCxnQ0EyQ0M7QUFsR0QsMENBS3dCO0FBSnRCLDJHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLG9IQUFBLHlCQUF5QixPQUFBO0FBQ3pCLHNIQUFBLDJCQUEyQixPQUFBO0FBQzNCLHdHQUFBLGFBQWEsT0FBQTtBQUVmLDRDQVF3QjtBQUN4QiwwREFBa0M7QUFDbEMsdURBSzJCO0FBQzNCLG1DQUF1QztBQU92QywyRUFBMkU7QUFDM0Usc0VBQXNFO0FBQ3RFLEtBQUssVUFBVSxxQkFBcUIsQ0FDbEMsUUFBaUI7SUFFakIsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUVoQyxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUEsdUNBQXFCLEdBQUUsQ0FBQztRQUMxQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzNDLGdCQUFNLENBQUMsS0FBSyxDQUNWLHVHQUF1RyxDQUN4RyxDQUFDO1lBQ0YsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQztRQUVELE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsZ0JBQU0sQ0FBQyxLQUFLLENBQ1Ysc0VBQXNFLEtBQUssRUFBRSxDQUM5RSxDQUFDO1FBQ0YsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztBQUNILENBQUM7QUFFTSxLQUFLLFVBQVUsVUFBVSxDQUM5QixXQUE0QyxFQUM1QyxRQUFpQixFQUNqQixjQUF3QztJQUV4QyxNQUFNLFNBQVMsR0FBRyxNQUFNLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sd0JBQXdCLEdBQUcsSUFBQSxvQkFBWSxFQUMzQyxvQ0FBa0IsRUFDbEIsUUFBUSxFQUNSLFNBQVMsQ0FDVixDQUFDO0lBQ0YsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQzdDLHVDQUE2QixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsbUJBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM3RCxDQUFDO0lBRUYsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFaEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDaEIsQ0FBQyxDQUFDLFFBQVE7UUFDUixDQUFDLENBQUMsSUFBQSxrQ0FBZ0IsRUFBQyxDQUFRLENBQUMsQ0FBQyxJQUFJLENBQzdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFXLENBQ3ZDO1FBQ0gsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEQsK0RBQStEO1lBQy9ELDREQUE0RDtZQUM1RCw4REFBOEQ7WUFDOUQsc0JBQXNCO1lBQ3RCLE1BQU0sSUFBQSwwQ0FBd0IsRUFBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQVksQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FDUCxDQUNGLENBQUM7SUFFRiwrQ0FBK0M7SUFDL0MsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNkLGNBQWMsRUFBRTtZQUNkLGNBQWMsRUFBRSxLQUFLO1NBQ3RCO1FBQ0QsWUFBWSxFQUFFLEVBQUU7S0FDakIsQ0FBQyxDQUFDO0lBRUgsT0FBTyxtQkFBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FDN0IsT0FBd0U7SUFFeEUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FDNUIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQ2UsQ0FBQztJQUVuQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDMUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzFCLElBQUksT0FBTyxLQUFLLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDekQsTUFBTSxnQkFBTSxDQUFDLEtBQUssQ0FDaEIseUNBQXlDLE9BQU8sQ0FBQyxJQUFJLDRNQUE0TSxDQUNsUSxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbiAqL1xuXG5leHBvcnQge1xuICBpc1JlZ2lzdHJ5TW9kdWxlLFxuICBUZXJyYWZvcm1Nb2R1bGVDb25zdHJhaW50LFxuICBUZXJyYWZvcm1Qcm92aWRlckNvbnN0cmFpbnQsXG4gIGlzTG9jYWxNb2R1bGUsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHtcbiAgVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnQsXG4gIExBTkdVQUdFUyxcbiAgQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQsXG4gIENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldCxcbiAgVGVycmFmb3JtVGFyZ2V0VmVyc2lvbnMsXG4gIEVycm9ycyxcbiAgbG9nZ2VyLFxufSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSBcImRlZXBtZXJnZVwiO1xuaW1wb3J0IHtcbiAgZ2V0RmV0Y2hpbmdDbGlWZXJzaW9uLFxuICByZWFkTW9kdWxlU2NoZW1hLFxuICByZWFkUHJvdmlkZXJTY2hlbWEsXG4gIHdhcm5JZlNjaGVtYUVtaXNzaW9uR2Fwcyxcbn0gZnJvbSBcIi4vcHJvdmlkZXItc2NoZW1hXCI7XG5pbXBvcnQgeyBjYWNoZWRBY2Nlc3MgfSBmcm9tIFwiLi9jYWNoZVwiO1xuXG5leHBvcnQgdHlwZSBTY2hlbWEgPSB7XG4gIHByb3ZpZGVyU2NoZW1hPzogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiByZWFkUHJvdmlkZXJTY2hlbWE+PjtcbiAgbW9kdWxlU2NoZW1hPzogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiByZWFkTW9kdWxlU2NoZW1hPj47XG59O1xuXG4vLyBTY2hlbWEgZW1pc3Npb24gaXMgZml4ZWQgcGVyIENMSSBwcm9kdWN0K21pbm9yIHZlcnNpb24sIHNvIHRoYXQncyBlbm91Z2hcbi8vIGdyYW51bGFyaXR5IGZvciB0aGUgY2FjaGUga2V5IC0gbm8gbmVlZCBmb3IgdGhlIGZ1bGwgcGF0Y2ggdmVyc2lvbi5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVDYWNoZUtleVN1ZmZpeChcbiAgY2FjaGVEaXI/OiBzdHJpbmcsXG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIWNhY2hlRGlyKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgY2xpID0gYXdhaXQgZ2V0RmV0Y2hpbmdDbGlWZXJzaW9uKCk7XG4gICAgaWYgKGNsaS5uYW1lID09PSBcInVua25vd25cIiB8fCAhY2xpLnZlcnNpb24pIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgXCJDb3VsZCBub3QgZGV0ZXJtaW5lIGZldGNoaW5nIENMSSBuYW1lL3ZlcnNpb24gZm9yIHRoZSBzY2hlbWEgY2FjaGUga2V5LCBmYWxsaW5nIGJhY2sgdG8gJ3Vua25vd24tY2xpJ1wiLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBcInVua25vd24tY2xpXCI7XG4gICAgfVxuXG4gICAgY29uc3QgW21ham9yLCBtaW5vcl0gPSBjbGkudmVyc2lvbi5zcGxpdChcIi5cIik7XG4gICAgcmV0dXJuIGAke2NsaS5uYW1lfS0ke21ham9yfS4ke21pbm9yfWA7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgZmV0Y2hpbmcgQ0xJIHZlcnNpb24gZm9yIHRoZSBzY2hlbWEgY2FjaGUga2V5OiAke2Vycm9yfWAsXG4gICAgKTtcbiAgICByZXR1cm4gXCJ1bmtub3duLWNsaVwiO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkU2NoZW1hKFxuICBjb25zdHJhaW50czogVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnRbXSxcbiAgY2FjaGVEaXI/OiBzdHJpbmcsXG4gIHRhcmdldFZlcnNpb25zPzogVGVycmFmb3JtVGFyZ2V0VmVyc2lvbnMsXG4pOiBQcm9taXNlPFNjaGVtYT4ge1xuICBjb25zdCBrZXlTdWZmaXggPSBhd2FpdCByZXNvbHZlQ2FjaGVLZXlTdWZmaXgoY2FjaGVEaXIpO1xuICBjb25zdCBjYWNoZWRSZWFkUHJvdmlkZXJTY2hlbWEgPSBjYWNoZWRBY2Nlc3MoXG4gICAgcmVhZFByb3ZpZGVyU2NoZW1hLFxuICAgIGNhY2hlRGlyLFxuICAgIGtleVN1ZmZpeCxcbiAgKTtcbiAgY29uc3QgdGFyZ2V0cyA9IGNvbnN0cmFpbnRzLm1hcCgoY29uc3RyYWludCkgPT5cbiAgICBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldC5mcm9tKGNvbnN0cmFpbnQsIExBTkdVQUdFU1swXSksXG4gICk7XG5cbiAgdGhyb3dJZlRhcmdldHNDb25mbGljdCh0YXJnZXRzKTtcblxuICBjb25zdCBzY2hlbWFzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgdGFyZ2V0cy5tYXAoKHQpID0+XG4gICAgICB0LmlzTW9kdWxlXG4gICAgICAgID8gcmVhZE1vZHVsZVNjaGVtYSh0IGFzIGFueSkudGhlbihcbiAgICAgICAgICAgIChzKSA9PiAoeyBtb2R1bGVTY2hlbWE6IHMgfSkgYXMgU2NoZW1hLFxuICAgICAgICAgIClcbiAgICAgICAgOiBjYWNoZWRSZWFkUHJvdmlkZXJTY2hlbWEodCBhcyBhbnkpLnRoZW4oYXN5bmMgKHMpID0+IHtcbiAgICAgICAgICAgIC8vIFJ1bnMgb24gYm90aCBjYWNoZSBoaXRzIGFuZCBtaXNzZXM6IGNhY2hlZCBzY2hlbWFzIGNhcnJ5IHRoZVxuICAgICAgICAgICAgLy8gc2FtZSBjbGlfbmFtZS9jbGlfdmVyc2lvbiBzdGFtcHMgYSBmcmVzaCBmZXRjaCB3b3VsZCBoYXZlXG4gICAgICAgICAgICAvLyB3cml0dGVuLCBzbyB0aGUgZW1pc3Npb24tZ2FwIHdhcm5pbmcgaXMganVzdCBhcyByZWxldmFudCBvblxuICAgICAgICAgICAgLy8gYSBoaXQgYXMgb24gYSBtaXNzLlxuICAgICAgICAgICAgYXdhaXQgd2FybklmU2NoZW1hRW1pc3Npb25HYXBzKHMsIHRhcmdldFZlcnNpb25zKTtcbiAgICAgICAgICAgIHJldHVybiB7IHByb3ZpZGVyU2NoZW1hOiBzIH0gYXMgU2NoZW1hO1xuICAgICAgICAgIH0pLFxuICAgICksXG4gICk7XG5cbiAgLy8gZW5zdXJlIHdlIGhhdmUgYSBzY2hlbWEgZm9yIGVhY2ggdGFyZ2V0IHR5cGVcbiAgc2NoZW1hcy51bnNoaWZ0KHtcbiAgICBwcm92aWRlclNjaGVtYToge1xuICAgICAgZm9ybWF0X3ZlcnNpb246IFwiMC4xXCIsXG4gICAgfSxcbiAgICBtb2R1bGVTY2hlbWE6IHt9LFxuICB9KTtcblxuICByZXR1cm4gZGVlcG1lcmdlLmFsbChzY2hlbWFzKTtcbn1cblxuZnVuY3Rpb24gdGhyb3dJZlRhcmdldHNDb25mbGljdChcbiAgdGFyZ2V0czogKENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0IHwgQ29uc3RydWN0c01ha2VyTW9kdWxlVGFyZ2V0KVtdLFxuKSB7XG4gIGNvbnN0IG1vZHVsZXMgPSB0YXJnZXRzLmZpbHRlcihcbiAgICAodCkgPT4gdC5pc01vZHVsZSxcbiAgKSBhcyBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXRbXTtcblxuICBtb2R1bGVzLmZvckVhY2goKG1vZHVsZUEpID0+IHtcbiAgICBtb2R1bGVzLmZvckVhY2goKG1vZHVsZUIpID0+IHtcbiAgICAgIGlmIChtb2R1bGVBICE9PSBtb2R1bGVCICYmIG1vZHVsZUEubmFtZSA9PT0gbW9kdWxlQi5uYW1lKSB7XG4gICAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgICBgRm91bmQgdHdvIG1vZHVsZXMgd2l0aCB0aGUgc2FtZSBuYW1lIFwiJHttb2R1bGVBLm5hbWV9XCIgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHJlbmFtZSBvbmUgb2YgdGhlIG1vZHVsZXMgaW4geW91ciBjZGt0Zi5qc29uIGNvbmZpZy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHNldCB0aGUgbmFtZSByZWZlciB0byBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvbW9kdWxlcyNhZGQtbW9kdWxlLXRvLWNka3RmLWpzb25gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbiJdfQ==
|
package/build/util.d.ts
CHANGED
|
@@ -2,9 +2,6 @@
|
|
|
2
2
|
* Copyright (c) HashiCorp, Inc.
|
|
3
3
|
* SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
*/
|
|
5
|
-
/// <reference types="ambient" />
|
|
6
|
-
/// <reference types=".pnpm/@types+node@22.20.1/node_modules/@types/node/child_process" />
|
|
7
|
-
/// <reference types=".pnpm/@types+node@18.19.130/node_modules/@types/node/child_process" />
|
|
8
5
|
import { SpawnOptions } from "child_process";
|
|
9
6
|
export declare function withTempDir(dirname: string, closure: () => Promise<void>): Promise<void>;
|
|
10
7
|
export declare const exec: (command: string, args: string[], options: SpawnOptions, stdout?: (chunk: Buffer) => any, stderr?: (chunk: string | Uint8Array) => any) => Promise<string>;
|
package/build/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA;;;GAGG
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAS,YAAY,EAAE,MAAM,eAAe,CAAC;AAKpD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,iBAa7B;AAED,eAAO,MAAM,IAAI,GACf,SAAS,MAAM,EACf,MAAM,MAAM,EAAE,EACd,SAAS,YAAY,EACrB,SAAS,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,EAC/B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,KAAK,GAAG,KAC3C,OAAO,CAAC,MAAM,CAkChB,CAAC"}
|
package/build/util.js
CHANGED
|
@@ -19,15 +19,26 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
19
19
|
}) : function(o, v) {
|
|
20
20
|
o["default"] = v;
|
|
21
21
|
});
|
|
22
|
-
var __importStar = (this && this.__importStar) || function (
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
};
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
29
39
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
-
exports.exec =
|
|
40
|
+
exports.exec = void 0;
|
|
41
|
+
exports.withTempDir = withTempDir;
|
|
31
42
|
const child_process_1 = require("child_process");
|
|
32
43
|
const fs = __importStar(require("fs-extra"));
|
|
33
44
|
const os = __importStar(require("os"));
|
|
@@ -46,7 +57,6 @@ async function withTempDir(dirname, closure) {
|
|
|
46
57
|
await fs.remove(parent);
|
|
47
58
|
}
|
|
48
59
|
}
|
|
49
|
-
exports.withTempDir = withTempDir;
|
|
50
60
|
const exec = async (command, args, options, stdout, stderr) => {
|
|
51
61
|
return new Promise((ok, ko) => {
|
|
52
62
|
var _a, _b, _c, _d;
|
|
@@ -86,4 +96,4 @@ const exec = async (command, args, options, stdout, stderr) => {
|
|
|
86
96
|
});
|
|
87
97
|
};
|
|
88
98
|
exports.exec = exec;
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9ILGtDQWVDO0FBcEJELGlEQUFvRDtBQUNwRCw2Q0FBK0I7QUFDL0IsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUV0QixLQUFLLFVBQVUsV0FBVyxDQUMvQixPQUFlLEVBQ2YsT0FBNEI7SUFFNUIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzlCLE1BQU0sTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QixJQUFJLENBQUM7UUFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sT0FBTyxFQUFFLENBQUM7SUFDbEIsQ0FBQztZQUFTLENBQUM7UUFDVCxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQixDQUFDO0FBQ0gsQ0FBQztBQUVNLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDdkIsT0FBZSxFQUNmLElBQWMsRUFDZCxPQUFxQixFQUNyQixNQUErQixFQUMvQixNQUE0QyxFQUMzQixFQUFFO0lBQ25CLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7O1FBQzVCLE1BQU0sS0FBSyxHQUFHLElBQUEscUJBQUssRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7UUFDaEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQXVCLENBQUM7UUFDN0MsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekIsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUU7Z0JBQ3pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUU7Z0JBQ3pDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekIsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBMEIsRUFBRSxFQUFFO2dCQUN0RCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQTBCLEVBQUUsRUFBRTtnQkFDdEQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVCLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzNDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7WUFDbkMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsc0JBQXNCLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3JELEtBQWEsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RSxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQixDQUFDO1lBQ0QsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBeENXLFFBQUEsSUFBSSxRQXdDZiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluYy5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4gKi9cblxuaW1wb3J0IHsgc3Bhd24sIFNwYXduT3B0aW9ucyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCAqIGFzIG9zIGZyb20gXCJvc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFRlbXBEaXIoXG4gIGRpcm5hbWU6IHN0cmluZyxcbiAgY2xvc3VyZTogKCkgPT4gUHJvbWlzZTx2b2lkPixcbikge1xuICBjb25zdCBwcmV2ZGlyID0gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgcGFyZW50ID0gYXdhaXQgZnMubWtkdGVtcChwYXRoLmpvaW4ob3MudG1wZGlyKCksIFwiY2RrdGYuXCIpKTtcbiAgY29uc3Qgd29ya2RpciA9IHBhdGguam9pbihwYXJlbnQsIGRpcm5hbWUpO1xuICBhd2FpdCBmcy5ta2RpcnAod29ya2Rpcik7XG4gIHRyeSB7XG4gICAgcHJvY2Vzcy5jaGRpcih3b3JrZGlyKTtcbiAgICBhd2FpdCBjbG9zdXJlKCk7XG4gIH0gZmluYWxseSB7XG4gICAgcHJvY2Vzcy5jaGRpcihwcmV2ZGlyKTtcbiAgICBhd2FpdCBmcy5yZW1vdmUocGFyZW50KTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZXhlYyA9IGFzeW5jIChcbiAgY29tbWFuZDogc3RyaW5nLFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgb3B0aW9uczogU3Bhd25PcHRpb25zLFxuICBzdGRvdXQ/OiAoY2h1bms6IEJ1ZmZlcikgPT4gYW55LFxuICBzdGRlcnI/OiAoY2h1bms6IHN0cmluZyB8IFVpbnQ4QXJyYXkpID0+IGFueSxcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgob2ssIGtvKSA9PiB7XG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihjb21tYW5kLCBhcmdzLCBvcHRpb25zKTtcbiAgICBjb25zdCBvdXQgPSBuZXcgQXJyYXk8QnVmZmVyPigpO1xuICAgIGNvbnN0IGVyciA9IG5ldyBBcnJheTxzdHJpbmcgfCBVaW50OEFycmF5PigpO1xuICAgIGlmIChzdGRvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hpbGQuc3Rkb3V0Py5vbihcImRhdGFcIiwgKGNodW5rOiBCdWZmZXIpID0+IHtcbiAgICAgICAgc3Rkb3V0KGNodW5rKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGlsZC5zdGRvdXQ/Lm9uKFwiZGF0YVwiLCAoY2h1bms6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBvdXQucHVzaChjaHVuayk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHN0ZGVyciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaGlsZC5zdGRlcnI/Lm9uKFwiZGF0YVwiLCAoY2h1bms6IHN0cmluZyB8IFVpbnQ4QXJyYXkpID0+IHtcbiAgICAgICAgc3RkZXJyKGNodW5rKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGlsZC5zdGRlcnI/Lm9uKFwiZGF0YVwiLCAoY2h1bms6IHN0cmluZyB8IFVpbnQ4QXJyYXkpID0+IHtcbiAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoY2h1bmspO1xuICAgICAgICBlcnIucHVzaChjaHVuayk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgY2hpbGQub25jZShcImVycm9yXCIsIChlcnI6IGFueSkgPT4ga28oZXJyKSk7XG4gICAgY2hpbGQub25jZShcImNsb3NlXCIsIChjb2RlOiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGBub24temVybyBleGl0IGNvZGUgJHtjb2RlfWApO1xuICAgICAgICAoZXJyb3IgYXMgYW55KS5zdGRlcnIgPSBlcnIubWFwKChjaHVuaykgPT4gY2h1bmsudG9TdHJpbmcoKSkuam9pbihcIlwiKTtcbiAgICAgICAgcmV0dXJuIGtvKGVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvayhCdWZmZXIuY29uY2F0KG91dCkudG9TdHJpbmcoXCJ1dGYtOFwiKSk7XG4gICAgfSk7XG4gIH0pO1xufTtcbiJdfQ==
|