aws-cdk 2.19.0 → 2.21.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -11
- package/THIRD_PARTY_LICENSES +8 -28
- package/build-info.json +2 -2
- package/does-not-exist.json +1 -1
- package/lib/api/aws-auth/account-cache.d.ts +1 -1
- package/lib/api/aws-auth/account-cache.js +2 -2
- package/lib/api/bootstrap/bootstrap-template.yaml +3 -1
- package/lib/api/cloudformation-deployments.d.ts +12 -1
- package/lib/api/cloudformation-deployments.js +31 -8
- package/lib/api/deploy-stack.d.ts +24 -0
- package/lib/api/deploy-stack.js +46 -8
- package/lib/api/evaluate-cloudformation-template.js +3 -2
- package/lib/api/hotswap/common.js +2 -2
- package/lib/api/util/cloudformation/stack-activity-monitor.d.ts +5 -0
- package/lib/api/util/cloudformation/stack-activity-monitor.js +24 -7
- package/lib/api/util/cloudformation/stack-status.js +2 -2
- package/lib/api/util/cloudformation.d.ts +3 -0
- package/lib/api/util/cloudformation.js +1 -1
- package/lib/api/util/display.d.ts +3 -0
- package/lib/api/util/display.js +23 -15
- package/lib/cdk-toolkit.d.ts +44 -21
- package/lib/cdk-toolkit.js +68 -1
- package/lib/cli.js +47 -5
- package/lib/commands/doctor.js +2 -2
- package/lib/import.d.ts +151 -0
- package/lib/import.js +245 -0
- package/lib/index.js +10499 -6069
- package/lib/init-templates/v1/app/csharp/README.md +1 -1
- package/lib/init-templates/v1/app/fsharp/README.md +1 -1
- package/lib/init-templates/v1/app/go/README.md +1 -1
- package/lib/init-templates/v1/app/java/README.md +1 -1
- package/lib/init-templates/v1/app/javascript/README.md +1 -1
- package/lib/init-templates/v1/app/python/README.template.md +1 -1
- package/lib/init-templates/v1/app/typescript/README.md +1 -1
- package/lib/init-templates/v2/app/csharp/README.md +1 -1
- package/lib/init-templates/v2/app/fsharp/README.md +1 -1
- package/lib/init-templates/v2/app/go/README.md +1 -1
- package/lib/init-templates/v2/app/java/README.md +1 -1
- package/lib/init-templates/v2/app/javascript/README.md +1 -1
- package/lib/init-templates/v2/app/python/README.template.md +1 -1
- package/lib/init-templates/v2/app/typescript/README.md +1 -1
- package/lib/notices.d.ts +1 -0
- package/lib/notices.js +43 -21
- package/lib/settings.js +3 -2
- package/lib/util/asset-publishing.d.ts +7 -1
- package/lib/util/asset-publishing.js +13 -6
- package/lib/version.js +2 -2
- package/package.json +12 -12
- package/test/api/hotswap/state-machine-hotswap-deployments.test.js +75 -1
- package/test/api/util/display.test.d.ts +1 -0
- package/test/api/util/display.test.js +54 -0
- package/test/bockfs.js +2 -2
- package/test/cdk-toolkit.test.js +4 -2
- package/test/import.test.d.ts +1 -0
- package/test/import.test.js +189 -0
- package/test/integ/cli/app/app.js +25 -0
- package/test/integ/cli/app/docker/Dockerfile +1 -1
- package/test/integ/cli/app/docker/Dockerfile.Custom +1 -1
- package/test/integ/cli/cli.integtest.js +33 -1
- package/test/integ/cli-regression-patches/v1.64.0/cdk-helpers.js +1 -1
- package/test/integ/cli-regression-patches/v1.64.1/cdk-helpers.js +1 -1
- package/test/integ/cli-regression-patches/v1.67.0/cdk-helpers.js +1 -1
- package/test/integ/helpers/cdk.js +4 -5
- package/test/integ/helpers/test-helpers.js +1 -3
- package/test/notices.test.js +35 -21
- package/test/settings.test.js +10 -1
- package/test/util/mock-sdk.d.ts +2 -0
- package/test/util/mock-sdk.js +8 -2
|
@@ -27,6 +27,10 @@ class StackActivityMonitor {
|
|
|
27
27
|
this.stackName = stackName;
|
|
28
28
|
this.printer = printer;
|
|
29
29
|
this.stack = stack;
|
|
30
|
+
/**
|
|
31
|
+
* Resource errors found while monitoring the deployment
|
|
32
|
+
*/
|
|
33
|
+
this.errors = new Array();
|
|
30
34
|
this.active = false;
|
|
31
35
|
this.activity = {};
|
|
32
36
|
this.startTime = (_a = changeSetCreationTime === null || changeSetCreationTime === void 0 ? void 0 : changeSetCreationTime.getTime()) !== null && _a !== void 0 ? _a : Date.now();
|
|
@@ -163,6 +167,7 @@ class StackActivityMonitor {
|
|
|
163
167
|
}
|
|
164
168
|
events.reverse();
|
|
165
169
|
for (const event of events) {
|
|
170
|
+
this.checkForErrors(event);
|
|
166
171
|
this.printer.addActivity(event);
|
|
167
172
|
}
|
|
168
173
|
}
|
|
@@ -182,12 +187,23 @@ class StackActivityMonitor {
|
|
|
182
187
|
}
|
|
183
188
|
await this.readNewEvents();
|
|
184
189
|
}
|
|
190
|
+
checkForErrors(activity) {
|
|
191
|
+
var _a, _b, _c;
|
|
192
|
+
if (hasErrorMessage((_a = activity.event.ResourceStatus) !== null && _a !== void 0 ? _a : '')) {
|
|
193
|
+
const isCancelled = ((_b = activity.event.ResourceStatusReason) !== null && _b !== void 0 ? _b : '').indexOf('cancelled') > -1;
|
|
194
|
+
// Cancelled is not an interesting failure reason, nor is the stack message (stack
|
|
195
|
+
// message will just say something like "stack failed to update")
|
|
196
|
+
if (!isCancelled && activity.event.StackName !== activity.event.LogicalResourceId) {
|
|
197
|
+
this.errors.push((_c = activity.event.ResourceStatusReason) !== null && _c !== void 0 ? _c : '');
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
185
201
|
simplifyConstructPath(path) {
|
|
186
202
|
path = path.replace(/\/Resource$/, '');
|
|
187
203
|
path = path.replace(/^\//, ''); // remove "/" prefix
|
|
188
204
|
// remove "<stack-name>/" prefix
|
|
189
205
|
if (path.startsWith(this.stackName + '/')) {
|
|
190
|
-
path = path.
|
|
206
|
+
path = path.slice(this.stackName.length + 1);
|
|
191
207
|
}
|
|
192
208
|
return path;
|
|
193
209
|
}
|
|
@@ -356,7 +372,7 @@ class HistoryActivityPrinter extends ActivityPrinterBase {
|
|
|
356
372
|
}
|
|
357
373
|
const resourceName = md ? md.constructPath : (e.LogicalResourceId || '');
|
|
358
374
|
const logicalId = resourceName !== e.LogicalResourceId ? `(${e.LogicalResourceId}) ` : '';
|
|
359
|
-
this.stream.write(util.format('%s | %s%s | %s | %s | %s %s%s%s\n', e.StackName, (progress !== false ? `${this.progress()} | ` : ''), new Date(e.Timestamp).toLocaleTimeString(), color(padRight(STATUS_WIDTH, (e.ResourceStatus || '').
|
|
375
|
+
this.stream.write(util.format('%s | %s%s | %s | %s | %s %s%s%s\n', e.StackName, (progress !== false ? `${this.progress()} | ` : ''), new Date(e.Timestamp).toLocaleTimeString(), color(padRight(STATUS_WIDTH, (e.ResourceStatus || '').slice(0, STATUS_WIDTH))), // pad left and trim
|
|
360
376
|
padRight(this.props.resourceTypeColumnWidth, e.ResourceType || ''), color(chalk.bold(resourceName)), logicalId, reasonColor(chalk.bold(e.ResourceStatusReason ? e.ResourceStatusReason : '')), reasonColor(stackTrace)));
|
|
361
377
|
this.lastPrintTime = Date.now();
|
|
362
378
|
}
|
|
@@ -428,7 +444,7 @@ class CurrentActivityPrinter extends ActivityPrinterBase {
|
|
|
428
444
|
var _a, _b, _c;
|
|
429
445
|
const color = colorFromStatusActivity(res.event.ResourceStatus);
|
|
430
446
|
const resourceName = (_c = (_b = (_a = res.metadata) === null || _a === void 0 ? void 0 : _a.constructPath) !== null && _b !== void 0 ? _b : res.event.LogicalResourceId) !== null && _c !== void 0 ? _c : '';
|
|
431
|
-
return util.format('%s | %s | %s | %s%s', padLeft(TIMESTAMP_WIDTH, new Date(res.event.Timestamp).toLocaleTimeString()), color(padRight(STATUS_WIDTH, (res.event.ResourceStatus || '').
|
|
447
|
+
return util.format('%s | %s | %s | %s%s', padLeft(TIMESTAMP_WIDTH, new Date(res.event.Timestamp).toLocaleTimeString()), color(padRight(STATUS_WIDTH, (res.event.ResourceStatus || '').slice(0, STATUS_WIDTH))), padRight(this.props.resourceTypeColumnWidth, res.event.ResourceType || ''), color(chalk.bold(shorten(40, resourceName))), this.failureReasonOnNextLine(res));
|
|
432
448
|
}));
|
|
433
449
|
this.block.displayLines(lines);
|
|
434
450
|
}
|
|
@@ -448,7 +464,7 @@ class CurrentActivityPrinter extends ActivityPrinterBase {
|
|
|
448
464
|
if (failure.event.StackName === failure.event.LogicalResourceId) {
|
|
449
465
|
continue;
|
|
450
466
|
}
|
|
451
|
-
lines.push(util.format(chalk.red('%s | %s | %s | %s%s') + '\n', padLeft(TIMESTAMP_WIDTH, new Date(failure.event.Timestamp).toLocaleTimeString()), padRight(STATUS_WIDTH, (failure.event.ResourceStatus || '').
|
|
467
|
+
lines.push(util.format(chalk.red('%s | %s | %s | %s%s') + '\n', padLeft(TIMESTAMP_WIDTH, new Date(failure.event.Timestamp).toLocaleTimeString()), padRight(STATUS_WIDTH, (failure.event.ResourceStatus || '').slice(0, STATUS_WIDTH)), padRight(this.props.resourceTypeColumnWidth, failure.event.ResourceType || ''), shorten(40, (_a = failure.event.LogicalResourceId) !== null && _a !== void 0 ? _a : ''), this.failureReasonOnNextLine(failure)));
|
|
452
468
|
const trace = (_c = (_b = failure.metadata) === null || _b === void 0 ? void 0 : _b.entry) === null || _c === void 0 ? void 0 : _c.trace;
|
|
453
469
|
if (trace) {
|
|
454
470
|
lines.push(chalk.red(`\t${trace.join('\n\t\\_ ')}\n`));
|
|
@@ -456,6 +472,7 @@ class CurrentActivityPrinter extends ActivityPrinterBase {
|
|
|
456
472
|
}
|
|
457
473
|
// Display in the same block space, otherwise we're going to have silly empty lines.
|
|
458
474
|
this.block.displayLines(lines);
|
|
475
|
+
this.block.removeEmptyLines();
|
|
459
476
|
}
|
|
460
477
|
progressBar(width) {
|
|
461
478
|
if (!this.resourcesTotal) {
|
|
@@ -509,7 +526,7 @@ function colorFromStatusActivity(status) {
|
|
|
509
526
|
if (status.endsWith('_FAILED')) {
|
|
510
527
|
return chalk.red;
|
|
511
528
|
}
|
|
512
|
-
if (status.startsWith('CREATE_') || status.startsWith('UPDATE_')) {
|
|
529
|
+
if (status.startsWith('CREATE_') || status.startsWith('UPDATE_') || status.startsWith('IMPORT_')) {
|
|
513
530
|
return chalk.green;
|
|
514
531
|
}
|
|
515
532
|
// For stacks, it may also be 'UPDDATE_ROLLBACK_IN_PROGRESS'
|
|
@@ -526,8 +543,8 @@ function shorten(maxWidth, p) {
|
|
|
526
543
|
return p;
|
|
527
544
|
}
|
|
528
545
|
const half = Math.floor((maxWidth - 3) / 2);
|
|
529
|
-
return p.
|
|
546
|
+
return p.slice(0, half) + '...' + p.slice(-half);
|
|
530
547
|
}
|
|
531
548
|
const TIMESTAMP_WIDTH = 12;
|
|
532
549
|
const STATUS_WIDTH = 20;
|
|
533
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stYWN0aXZpdHktbW9uaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0YWNrLWFjdGl2aXR5LW1vbml0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQTZCO0FBQzdCLDJEQUEyRDtBQUczRCwrQkFBK0I7QUFDL0IsOENBQTBFO0FBQzFFLHdDQUE2QztBQVk3Qzs7R0FFRztBQUNILElBQVkscUJBVVg7QUFWRCxXQUFZLHFCQUFxQjtJQUMvQjs7T0FFRztJQUNILG9DQUFXLENBQUE7SUFFWDs7T0FFRztJQUNILDBDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFWVyxxQkFBcUIsR0FBckIsNkJBQXFCLEtBQXJCLDZCQUFxQixRQVVoQztBQXNERCxNQUFhLG9CQUFvQjtJQW1EL0IsWUFDbUIsR0FBdUIsRUFDdkIsU0FBaUIsRUFDakIsT0FBeUIsRUFDekIsS0FBeUMsRUFDMUQscUJBQTRCOztRQUpYLFFBQUcsR0FBSCxHQUFHLENBQW9CO1FBQ3ZCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFDekIsVUFBSyxHQUFMLEtBQUssQ0FBb0M7UUF0QnBELFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixhQUFRLEdBQXlDLEVBQUcsQ0FBQztRQXdCM0QsSUFBSSxDQUFDLFNBQVMsU0FBRyxxQkFBcUIsYUFBckIscUJBQXFCLHVCQUFyQixxQkFBcUIsQ0FBRSxPQUFPLHFDQUFNLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0lBekREOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGtCQUFrQixDQUM5QixHQUF1QixFQUN2QixTQUFpQixFQUNqQixhQUFnRCxFQUFFLFVBQW1DLEVBQUU7O1FBQ3ZGLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFFOUIsTUFBTSxLQUFLLEdBQWlCO1lBQzFCLHVCQUF1QixFQUFFLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxR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QUFDLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDaEUsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDO0tBQ3BCO0lBQ0QsNERBQTREO0lBQzVELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUN0QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUM7S0FDckI7SUFDRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDaEMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDO0tBQ3JCO0lBRUQsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxRQUFnQixFQUFFLENBQVM7SUFDMUMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLFFBQVEsRUFBRTtRQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQUU7SUFDdkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUMzQixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dGlsIGZyb20gJ3V0aWwnO1xuaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBhd3MgZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBlcnJvciwgbG9nTGV2ZWwsIExvZ0xldmVsLCBzZXRMb2dMZXZlbCB9IGZyb20gJy4uLy4uLy4uL2xvZ2dpbmcnO1xuaW1wb3J0IHsgUmV3cml0YWJsZUJsb2NrIH0gZnJvbSAnLi4vZGlzcGxheSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhY2tBY3Rpdml0eSB7XG4gIHJlYWRvbmx5IGV2ZW50OiBhd3MuQ2xvdWRGb3JtYXRpb24uU3RhY2tFdmVudDtcbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBSZXNvdXJjZU1ldGFkYXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlTWV0YWRhdGEge1xuICBlbnRyeTogY3hzY2hlbWEuTWV0YWRhdGFFbnRyeTtcbiAgY29uc3RydWN0UGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN1cHBvcnRlZCBkaXNwbGF5IG1vZGVzIGZvciBzdGFjayBkZXBsb3ltZW50IGFjdGl2aXR5XG4gKi9cbmV4cG9ydCBlbnVtIFN0YWNrQWN0aXZpdHlQcm9ncmVzcyB7XG4gIC8qKlxuICAgKiBEaXNwbGF5cyBhIHByb2dyZXNzIGJhciB3aXRoIG9ubHkgdGhlIGV2ZW50cyBmb3IgdGhlIHJlc291cmNlIGN1cnJlbnRseSBiZWluZyBkZXBsb3llZFxuICAgKi9cbiAgQkFSID0gJ2JhcicsXG5cbiAgLyoqXG4gICAqIERpc3BsYXlzIGNvbXBsZXRlIGhpc3Rvcnkgd2l0aCBhbGwgQ2xvdWRGb3JtYXRpb24gc3RhY2sgZXZlbnRzXG4gICAqL1xuICBFVkVOVFMgPSAnZXZlbnRzJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXRoRGVmYXVsdFByaW50ZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUb3RhbCBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIHVwZGF0ZVxuICAgKlxuICAgKiBVc2VkIHRvIGNhbGN1bGF0ZSBhIHByb2dyZXNzIGJhci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBwcm9ncmVzcyByZXBvcnRpbmcuXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZXNUb3RhbD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGxvZyBsZXZlbCB0aGF0IHdhcyByZXF1ZXN0ZWQgaW4gdGhlIENMSVxuICAgKlxuICAgKiBJZiB2ZXJib3NlIG9yIHRyYWNlIGlzIHJlcXVlc3RlZCwgd2UnbGwgYWx3YXlzIHVzZSB0aGUgZnVsbCBoaXN0b3J5IHByaW50ZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVXNlIHZhbHVlIGZyb20gbG9nZ2luZy5sb2dMZXZlbFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nTGV2ZWw/OiBMb2dMZXZlbDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNwbGF5IGFsbCBzdGFjayBldmVudHMgb3IgdG8gZGlzcGxheSBvbmx5IHRoZSBldmVudHMgZm9yIHRoZVxuICAgKiByZXNvdXJjZSBjdXJyZW50bHkgYmVpbmcgZGVwbG95ZWRcbiAgICpcbiAgICogSWYgbm90IHNldCwgdGhlIHN0YWNrIGhpc3Rvcnkgd2l0aCBhbGwgc3RhY2sgZXZlbnRzIHdpbGwgYmUgZGlzcGxheWVkXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBwcm9ncmVzcz86IFN0YWNrQWN0aXZpdHlQcm9ncmVzcztcblxuICAvKipcbiAgICogV2hldGhlciB3ZSBhcmUgb24gYSBDSSBzeXN0ZW1cbiAgICpcbiAgICogSWYgc28sIGRpc2FibGUgdGhlIFwib3B0aW1pemVkXCIgc3RhY2sgbW9uaXRvci5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNpPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3JlYXRpb24gdGltZSBvZiB0aGUgY2hhbmdlIHNldFxuICAgKlxuICAgKiBUaGlzIHdpbGwgYmUgdXNlZCB0byBmaWx0ZXIgZXZlbnRzLCBvbmx5IHNob3dpbmcgdGhvc2UgZnJvbSBhZnRlciB0aGUgY2hhbmdlXG4gICAqIHNldCBjcmVhdGlvbiB0aW1lLlxuICAgKlxuICAgKiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhpcywgb3RoZXJ3aXNlIHRoZSBmaWx0ZXJpbmcgd2lsbCBiZSBzdWJqZWN0XG4gICAqIHRvIGNsb2NrIGRyaWZ0IGJldHdlZW4gbG9jYWwgYW5kIGNsb3VkIG1hY2hpbmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGxvY2FsIG1hY2hpbmUncyBjdXJyZW50IHRpbWVcbiAgICovXG4gIHJlYWRvbmx5IGNoYW5nZVNldENyZWF0aW9uVGltZT86IERhdGU7XG59XG5cbmV4cG9ydCBjbGFzcyBTdGFja0FjdGl2aXR5TW9uaXRvciB7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIFN0YWNrIEFjdGl2aXR5IE1vbml0b3IgdXNpbmcgYSBkZWZhdWx0IHByaW50ZXIsIGJhc2VkIG9uIGNvbnRleHQgY2x1ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgd2l0aERlZmF1bHRQcmludGVyKFxuICAgIGNmbjogYXdzLkNsb3VkRm9ybWF0aW9uLFxuICAgIHN0YWNrTmFtZTogc3RyaW5nLFxuICAgIHN0YWNrQXJ0aWZhY3Q6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCwgb3B0aW9uczogV2l0aERlZmF1bHRQcmludGVyUHJvcHMgPSB7fSkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHByb2Nlc3Muc3RkZXJyO1xuXG4gICAgY29uc3QgcHJvcHM6IFByaW50ZXJQcm9wcyA9IHtcbiAgICAgIHJlc291cmNlVHlwZUNvbHVtbldpZHRoOiBjYWxjTWF4UmVzb3VyY2VUeXBlTGVuZ3RoKHN0YWNrQXJ0aWZhY3QudGVtcGxhdGUpLFxuICAgICAgcmVzb3VyY2VzVG90YWw6IG9wdGlvbnMucmVzb3VyY2VzVG90YWwsXG4gICAgICBzdHJlYW0sXG4gICAgfTtcblxuICAgIGNvbnN0IGlzV2luZG93cyA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMic7XG4gICAgY29uc3QgdmVyYm9zZSA9IG9wdGlvbnMubG9nTGV2ZWwgPz8gbG9nTGV2ZWw7XG4gICAgLy8gT24gc29tZSBDSSBzeXN0ZW1zIChzdWNoIGFzIENpcmNsZUNJKSBvdXRwdXQgc3RpbGwgcmVwb3J0cyBhcyBhIFRUWSBzbyB3ZSBhbHNvXG4gICAgLy8gbmVlZCBhbiBpbmRpdmlkdWFsIGNoZWNrIGZvciB3aGV0aGVyIHdlJ3JlIHJ1bm5pbmcgb24gQ0kuXG4gICAgLy8gc2VlOiBodHRwczovL2Rpc2N1c3MuY2lyY2xlY2kuY29tL3QvY2lyY2xlY2ktdGVybWluYWwtaXMtYS10dHktYnV0LXRlcm0taXMtbm90LXNldC85OTY1XG4gICAgY29uc3QgZmFuY3lPdXRwdXRBdmFpbGFibGUgPSAhaXNXaW5kb3dzICYmIHN0cmVhbS5pc1RUWSAmJiAhb3B0aW9ucy5jaTtcbiAgICBjb25zdCBwcm9ncmVzcyA9IG9wdGlvbnMucHJvZ3Jlc3MgPz8gU3RhY2tBY3Rpdml0eVByb2dyZXNzLkJBUjtcblxuICAgIGNvbnN0IHByaW50ZXIgPSBmYW5jeU91dHB1dEF2YWlsYWJsZSAmJiAhdmVyYm9zZSAmJiAocHJvZ3Jlc3MgPT09IFN0YWNrQWN0aXZpdHlQcm9ncmVzcy5CQVIpXG4gICAgICA/IG5ldyBDdXJyZW50QWN0aXZpdHlQcmludGVyKHByb3BzKVxuICAgICAgOiBuZXcgSGlzdG9yeUFjdGl2aXR5UHJpbnRlcihwcm9wcyk7XG5cbiAgICByZXR1cm4gbmV3IFN0YWNrQWN0aXZpdHlNb25pdG9yKGNmbiwgc3RhY2tOYW1lLCBwcmludGVyLCBzdGFja0FydGlmYWN0LCBvcHRpb25zLmNoYW5nZVNldENyZWF0aW9uVGltZSk7XG4gIH1cblxuXG4gIHByaXZhdGUgYWN0aXZlID0gZmFsc2U7XG4gIHByaXZhdGUgYWN0aXZpdHk6IHsgW2V2ZW50SWQ6IHN0cmluZ106IFN0YWNrQWN0aXZpdHkgfSA9IHsgfTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGljaCBldmVudHMgbm90IHRvIGRpc3BsYXlcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhcnRUaW1lOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEN1cnJlbnQgdGljayB0aW1lclxuICAgKi9cbiAgcHJpdmF0ZSB0aWNrVGltZXI/OiBOb2RlSlMuVGltZXI7XG5cbiAgLyoqXG4gICAqIFNldCB0byB0aGUgYWN0aXZpdHkgb2YgcmVhZGluZyB0aGUgY3VycmVudCBldmVudHNcbiAgICovXG4gIHByaXZhdGUgcmVhZFByb21pc2U/OiBQcm9taXNlPGFueT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZm46IGF3cy5DbG91ZEZvcm1hdGlvbixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJpbnRlcjogSUFjdGl2aXR5UHJpbnRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrPzogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0LFxuICAgIGNoYW5nZVNldENyZWF0aW9uVGltZT86IERhdGUsXG4gICkge1xuICAgIHRoaXMuc3RhcnRUaW1lID0gY2hhbmdlU2V0Q3JlYXRpb25UaW1lPy5nZXRUaW1lKCkgPz8gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydCgpIHtcbiAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy5wcmludGVyLnN0YXJ0KCk7XG4gICAgdGhpcy5zY2hlZHVsZU5leHRUaWNrKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc3RvcCgpIHtcbiAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnRpY2tUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGlja1RpbWVyKTtcbiAgICB9XG5cbiAgICAvLyBEbyBhIGZpbmFsIHBvbGwgZm9yIGFsbCBldmVudHMuIFRoaXMgaXMgdG8gaGFuZGxlIHRoZSBzaXR1YXRpb24gd2hlcmUgRGVzY3JpYmVTdGFja1N0YXR1c1xuICAgIC8vIGFscmVhZHkgcmV0dXJuZWQgYW4gZXJyb3IsIGJ1dCB0aGUgbW9uaXRvciBoYXNuJ3Qgc2VlbiBhbGwgdGhlIGV2ZW50cyB5ZXQgYW5kIHdlJ2QgZW5kXG4gICAgLy8gdXAgbm90IHByaW50aW5nIHRoZSBmYWlsdXJlIHJlYXNvbiB0byB1c2Vycy5cbiAgICBhd2FpdCB0aGlzLmZpbmFsUG9sbFRvRW5kKCk7XG5cbiAgICB0aGlzLnByaW50ZXIuc3RvcCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY2hlZHVsZU5leHRUaWNrKCkge1xuICAgIGlmICghdGhpcy5hY3RpdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRpY2tUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdm9pZCh0aGlzLnRpY2soKSksIHRoaXMucHJpbnRlci51cGRhdGVTbGVlcCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHRpY2soKSB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnJlYWRQcm9taXNlID0gdGhpcy5yZWFkTmV3RXZlbnRzKCk7XG4gICAgICBhd2FpdCB0aGlzLnJlYWRQcm9taXNlO1xuICAgICAgdGhpcy5yZWFkUHJvbWlzZSA9IHVuZGVmaW5lZDtcblxuICAgICAgLy8gV2UgbWlnaHQgaGF2ZSBiZWVuIHN0b3AoKXBlZCB3aGlsZSB0aGUgbmV0d29yayBjYWxsIHdhcyBpbiBwcm9ncmVzcy5cbiAgICAgIGlmICghdGhpcy5hY3RpdmUpIHsgcmV0dXJuOyB9XG5cbiAgICAgIHRoaXMucHJpbnRlci5wcmludCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yKCdFcnJvciBvY2N1cnJlZCB3aGlsZSBtb25pdG9yaW5nIHN0YWNrOiAlcycsIGUpO1xuICAgIH1cbiAgICB0aGlzLnNjaGVkdWxlTmV4dFRpY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZE1ldGFkYXRhRm9yKGxvZ2ljYWxJZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUmVzb3VyY2VNZXRhZGF0YSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLnN0YWNrPy5tYW5pZmVzdD8ubWV0YWRhdGE7XG4gICAgaWYgKCFsb2dpY2FsSWQgfHwgIW1ldGFkYXRhKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgT2JqZWN0LmtleXMobWV0YWRhdGEpKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IG1ldGFkYXRhW3BhdGhdXG4gICAgICAgIC5maWx0ZXIoZSA9PiBlLnR5cGUgPT09IGN4c2NoZW1hLkFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuTE9HSUNBTF9JRClcbiAgICAgICAgLmZpbmQoZSA9PiBlLmRhdGEgPT09IGxvZ2ljYWxJZCk7XG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbnRyeSxcbiAgICAgICAgICBjb25zdHJ1Y3RQYXRoOiB0aGlzLnNpbXBsaWZ5Q29uc3RydWN0UGF0aChwYXRoKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyBhbGwgbmV3IGV2ZW50cyBmcm9tIHRoZSBzdGFjayBoaXN0b3J5XG4gICAqXG4gICAqIFRoZSBldmVudHMgYXJlIHJldHVybmVkIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlcjsgd2UgY29udGludWUgdG8gdGhlIG5leHQgcGFnZSBpZiB3ZVxuICAgKiBzZWUgYSBuZXh0IHBhZ2UgYW5kIHRoZSBsYXN0IGV2ZW50IGluIHRoZSBwYWdlIGlzIG5ldyB0byB1cyAoYW5kIHdpdGhpbiB0aGUgdGltZSB3aW5kb3cpLlxuICAgKiBoYXZlbid0IHNlZW4gdGhlIGZpbmFsIGV2ZW50XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlYWROZXdFdmVudHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZXZlbnRzOiBTdGFja0FjdGl2aXR5W10gPSBbXTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgbmV4dFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgZmluaXNoZWQgPSBmYWxzZTtcbiAgICAgIHdoaWxlICghZmluaXNoZWQpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNmbi5kZXNjcmliZVN0YWNrRXZlbnRzKHsgU3RhY2tOYW1lOiB0aGlzLnN0YWNrTmFtZSwgTmV4dFRva2VuOiBuZXh0VG9rZW4gfSkucHJvbWlzZSgpO1xuICAgICAgICBjb25zdCBldmVudFBhZ2UgPSByZXNwb25zZT8uU3RhY2tFdmVudHMgPz8gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudFBhZ2UpIHtcbiAgICAgICAgICAvLyBFdmVudCBmcm9tIGJlZm9yZSB3ZSB3ZXJlIGludGVyZXN0ZWQgaW4gJ2VtXG4gICAgICAgICAgaWYgKGV2ZW50LlRpbWVzdGFtcC52YWx1ZU9mKCkgPCB0aGlzLnN0YXJ0VGltZSkge1xuICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQWxyZWFkeSBzZWVuIHRoaXMgb25lXG4gICAgICAgICAgaWYgKGV2ZW50LkV2ZW50SWQgaW4gdGhpcy5hY3Rpdml0eSkge1xuICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRnJlc2ggZXZlbnRcbiAgICAgICAgICBldmVudHMucHVzaCh0aGlzLmFjdGl2aXR5W2V2ZW50LkV2ZW50SWRdID0ge1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHRoaXMuZmluZE1ldGFkYXRhRm9yKGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlJ3JlIGFsc28gZG9uZSBpZiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byByZWFkXG4gICAgICAgIG5leHRUb2tlbiA9IHJlc3BvbnNlPy5OZXh0VG9rZW47XG4gICAgICAgIGlmIChuZXh0VG9rZW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLmNvZGUgPT09ICdWYWxpZGF0aW9uRXJyb3InICYmIGUubWVzc2FnZSA9PT0gYFN0YWNrIFske3RoaXMuc3RhY2tOYW1lfV0gZG9lcyBub3QgZXhpc3RgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgZXZlbnRzLnJldmVyc2UoKTtcbiAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgdGhpcy5wcmludGVyLmFkZEFjdGl2aXR5KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSBhIGZpbmFsIHBvbGwgdG8gdGhlIGVuZCBhbmQgZmx1c2ggb3V0IGFsbCBldmVudHMgdG8gdGhlIHByaW50ZXJcbiAgICpcbiAgICogRmluaXNoIGFueSBwb2xsIGN1cnJlbnRseSBpbiBwcm9ncmVzcywgdGhlbiBkbyBhIGZpbmFsIG9uZSB1bnRpbCB3ZSd2ZVxuICAgKiByZWFjaGVkIHRoZSBsYXN0IHBhZ2UuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZpbmFsUG9sbFRvRW5kKCkge1xuICAgIC8vIElmIHdlIHdlcmUgZG9pbmcgYSBwb2xsLCBmaW5pc2ggdGhhdCBmaXJzdC4gSXQgd2FzIHN0YXJ0ZWQgYmVmb3JlXG4gICAgLy8gdGhlIG1vbWVudCB3ZSB3ZXJlIHN1cmUgd2Ugd2VyZW4ndCBnb2luZyB0byBnZXQgYW55IG5ldyBldmVudHMgYW55bW9yZVxuICAgIC8vIHNvIHdlIG5lZWQgdG8gZG8gYSBuZXcgb25lIGFueXdheS4gTmVlZCB0byB3YWl0IGZvciB0aGlzIG9uZSB0aG91Z2hcbiAgICAvLyBiZWNhdXNlIG91ciBzdGF0ZSBpcyBzaW5nbGUtdGhyZWFkZWQuXG4gICAgaWYgKHRoaXMucmVhZFByb21pc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMucmVhZFByb21pc2U7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5yZWFkTmV3RXZlbnRzKCk7XG4gIH1cblxuICBwcml2YXRlIHNpbXBsaWZ5Q29uc3RydWN0UGF0aChwYXRoOiBzdHJpbmcpIHtcbiAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXC9SZXNvdXJjZSQvLCAnJyk7XG4gICAgcGF0aCA9IHBhdGgucmVwbGFjZSgvXlxcLy8sICcnKTsgLy8gcmVtb3ZlIFwiL1wiIHByZWZpeFxuXG4gICAgLy8gcmVtb3ZlIFwiPHN0YWNrLW5hbWU+L1wiIHByZWZpeFxuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgodGhpcy5zdGFja05hbWUgKyAnLycpKSB7XG4gICAgICBwYXRoID0gcGF0aC5zdWJzdHIodGhpcy5zdGFja05hbWUubGVuZ3RoICsgMSk7XG4gICAgfVxuICAgIHJldHVybiBwYXRoO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhZFJpZ2h0KG46IG51bWJlciwgeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHggKyAnICcucmVwZWF0KE1hdGgubWF4KDAsIG4gLSB4Lmxlbmd0aCkpO1xufVxuXG4vKipcbiAqIEluZmFtb3VzIHBhZExlZnQoKVxuICovXG5mdW5jdGlvbiBwYWRMZWZ0KG46IG51bWJlciwgeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuICcgJy5yZXBlYXQoTWF0aC5tYXgoMCwgbiAtIHgubGVuZ3RoKSkgKyB4O1xufVxuXG5mdW5jdGlvbiBjYWxjTWF4UmVzb3VyY2VUeXBlTGVuZ3RoKHRlbXBsYXRlOiBhbnkpIHtcbiAgY29uc3QgcmVzb3VyY2VzID0gKHRlbXBsYXRlICYmIHRlbXBsYXRlLlJlc291cmNlcykgfHwge307XG4gIGxldCBtYXhXaWR0aCA9IDA7XG4gIGZvciAoY29uc3QgaWQgb2YgT2JqZWN0LmtleXMocmVzb3VyY2VzKSkge1xuICAgIGNvbnN0IHR5cGUgPSByZXNvdXJjZXNbaWRdLlR5cGUgfHwgJyc7XG4gICAgaWYgKHR5cGUubGVuZ3RoID4gbWF4V2lkdGgpIHtcbiAgICAgIG1heFdpZHRoID0gdHlwZS5sZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXhXaWR0aDtcbn1cblxuaW50ZXJmYWNlIFByaW50ZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUb3RhbCByZXNvdXJjZXMgdG8gZGVwbG95XG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZXNUb3RhbD86IG51bWJlclxuXG4gIC8qKlxuICAgKiBUaGUgd2l0aCBvZiB0aGUgXCJyZXNvdXJjZSB0eXBlXCIgY29sdW1uLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VUeXBlQ29sdW1uV2lkdGg6IG51bWJlcjtcblxuICAvKipcbiAgICogU3RyZWFtIHRvIHdyaXRlIHRvXG4gICAqL1xuICByZWFkb25seSBzdHJlYW06IE5vZGVKUy5Xcml0ZVN0cmVhbTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQWN0aXZpdHlQcmludGVyIHtcbiAgcmVhZG9ubHkgdXBkYXRlU2xlZXA6IG51bWJlcjtcblxuICBhZGRBY3Rpdml0eShhY3Rpdml0eTogU3RhY2tBY3Rpdml0eSk6IHZvaWQ7XG4gIHByaW50KCk6IHZvaWQ7XG4gIHN0YXJ0KCk6IHZvaWQ7XG4gIHN0b3AoKTogdm9pZDtcbn1cblxuYWJzdHJhY3QgY2xhc3MgQWN0aXZpdHlQcmludGVyQmFzZSBpbXBsZW1lbnRzIElBY3Rpdml0eVByaW50ZXIge1xuICAvKipcbiAgICogRmV0Y2ggbmV3IGFjdGl2aXR5IGV2ZXJ5IDUgc2Vjb25kc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZVNsZWVwOiBudW1iZXIgPSA1XzAwMDtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIHJlc291cmNlIElEcyB3aGljaCBhcmUgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc291cmNlc0luUHJvZ3Jlc3M6IFJlY29yZDxzdHJpbmcsIFN0YWNrQWN0aXZpdHk+ID0ge307XG5cbiAgLyoqXG4gICAqIFByZXZpb3VzIGNvbXBsZXRpb24gc3RhdGUgb2JzZXJ2ZWQgYnkgbG9naWNhbCBJRFxuICAgKlxuICAgKiBXZSB1c2UgdGhpcyB0byBkZXRlY3QgdGhhdCBpZiB3ZSBzZWUgYSBERUxFVEVfQ09NUExFVEUgYWZ0ZXIgYVxuICAgKiBDUkVBVEVfQ09NUExFVEUsIGl0J3MgYWN0dWFsbHkgYSByb2xsYmFjayBhbmQgd2Ugc2hvdWxkIERFQ1JFQVNFXG4gICAqIHJlc291cmNlc0RvbmUgaW5zdGVhZCBvZiBpbmNyZWFzZSBpdFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc291cmNlc1ByZXZDb21wbGV0ZVN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgLyoqXG4gICAqIENvdW50IG9mIHJlc291cmNlcyB0aGF0IGhhdmUgcmVwb3J0ZWQgYSBfQ09NUExFVEUgc3RhdHVzXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb3VyY2VzRG9uZTogbnVtYmVyID0gMDtcblxuICAvKipcbiAgICogSG93IG1hbnkgZGlnaXRzIHdlIG5lZWQgdG8gcmVwcmVzZW50IHRoZSB0b3RhbCBjb3VudCAoZm9yIGxpbmluZyB1cCB0aGUgc3RhdHVzIHJlcG9ydGluZylcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSByZXNvdXJjZURpZ2l0czogbnVtYmVyID0gMDtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVzb3VyY2VzVG90YWw/OiBudW1iZXI7XG5cbiAgcHJvdGVjdGVkIHJvbGxpbmdCYWNrID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhaWx1cmVzID0gbmV3IEFycmF5PFN0YWNrQWN0aXZpdHk+KCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0cmVhbTogTm9kZUpTLldyaXRlU3RyZWFtO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBwcm9wczogUHJpbnRlclByb3BzKSB7XG4gICAgLy8gKzEgYmVjYXVzZSB0aGUgc3RhY2sgYWxzbyBlbWl0cyBhIFwiQ09NUExFVEVcIiBldmVudCBhdCB0aGUgZW5kLCBhbmQgdGhhdCB3YXNuJ3RcbiAgICAvLyBjb3VudGVkIHlldC4gVGhpcyBtYWtlcyBpdCBsaW5lIHVwIHdpdGggdGhlIGFtb3VudCBvZiBldmVudHMgd2UgZXhwZWN0LlxuICAgIHRoaXMucmVzb3VyY2VzVG90YWwgPSBwcm9wcy5yZXNvdXJjZXNUb3RhbCA/IHByb3BzLnJlc291cmNlc1RvdGFsICsgMSA6IHVuZGVmaW5lZDtcblxuICAgIC8vIEhvdyBtYW55IGRpZ2l0cyBkb2VzIHRoaXMgbnVtYmVyIHRha2UgdG8gcmVwcmVzZW50P1xuICAgIHRoaXMucmVzb3VyY2VEaWdpdHMgPSB0aGlzLnJlc291cmNlc1RvdGFsID8gTWF0aC5jZWlsKE1hdGgubG9nMTAodGhpcy5yZXNvdXJjZXNUb3RhbCkpIDogMDtcblxuICAgIHRoaXMuc3RyZWFtID0gcHJvcHMuc3RyZWFtO1xuICB9XG5cbiAgcHVibGljIGFkZEFjdGl2aXR5KGFjdGl2aXR5OiBTdGFja0FjdGl2aXR5KSB7XG4gICAgY29uc3Qgc3RhdHVzID0gYWN0aXZpdHkuZXZlbnQuUmVzb3VyY2VTdGF0dXM7XG4gICAgaWYgKCFzdGF0dXMgfHwgIWFjdGl2aXR5LmV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkKSB7IHJldHVybjsgfVxuXG4gICAgaWYgKHN0YXR1cyA9PT0gJ1JPTExCQUNLX0lOX1BST0dSRVNTJyB8fCBzdGF0dXMgPT09ICdVUERBVEVfUk9MTEJBQ0tfSU5fUFJPR1JFU1MnKSB7XG4gICAgICAvLyBPbmx5IHRyaWdnZXJlZCBvbiB0aGUgc3RhY2sgb25jZSB3ZSd2ZSBzdGFydGVkIGRvaW5nIGEgcm9sbGJhY2tcbiAgICAgIHRoaXMucm9sbGluZ0JhY2sgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMuZW5kc1dpdGgoJ19JTl9QUk9HUkVTUycpKSB7XG4gICAgICB0aGlzLnJlc291cmNlc0luUHJvZ3Jlc3NbYWN0aXZpdHkuZXZlbnQuTG9naWNhbFJlc291cmNlSWRdID0gYWN0aXZpdHk7XG4gICAgfVxuXG4gICAgaWYgKGhhc0Vycm9yTWVzc2FnZShzdGF0dXMpKSB7XG4gICAgICBjb25zdCBpc0NhbmNlbGxlZCA9IChhY3Rpdml0eS5ldmVudC5SZXNvdXJjZVN0YXR1c1JlYXNvbiA/PyAnJykuaW5kZXhPZignY2FuY2VsbGVkJykgPiAtMTtcblxuICAgICAgLy8gQ2FuY2VsbGVkIGlzIG5vdCBhbiBpbnRlcmVzdGluZyBmYWlsdXJlIHJlYXNvblxuICAgICAgaWYgKCFpc0NhbmNlbGxlZCkge1xuICAgICAgICB0aGlzLmZhaWx1cmVzLnB1c2goYWN0aXZpdHkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0dXMuZW5kc1dpdGgoJ19DT01QTEVURScpIHx8IHN0YXR1cy5lbmRzV2l0aCgnX0ZBSUxFRCcpKSB7XG4gICAgICBkZWxldGUgdGhpcy5yZXNvdXJjZXNJblByb2dyZXNzW2FjdGl2aXR5LmV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkXTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzLmVuZHNXaXRoKCdfQ09NUExFVEVfQ0xFQU5VUF9JTl9QUk9HUkVTUycpKSB7XG4gICAgICB0aGlzLnJlc291cmNlc0RvbmUrKztcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzLmVuZHNXaXRoKCdfQ09NUExFVEUnKSkge1xuICAgICAgY29uc3QgcHJldlN0YXRlID0gdGhpcy5yZXNvdXJjZXNQcmV2Q29tcGxldGVTdGF0ZVthY3Rpdml0eS5ldmVudC5Mb2dpY2FsUmVzb3VyY2VJZF07XG4gICAgICBpZiAoIXByZXZTdGF0ZSkge1xuICAgICAgICB0aGlzLnJlc291cmNlc0RvbmUrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIHdlIGNvbXBsZXRlZCB0aGlzIGJlZm9yZSBhbmQgd2UncmUgY29tcGxldGluZyBpdCBBR0FJTiwgbWVhbnMgd2UncmUgcm9sbGluZyBiYWNrLlxuICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3Qgc2lsbHkgdW5kZXJmbG93LlxuICAgICAgICB0aGlzLnJlc291cmNlc0RvbmUtLTtcbiAgICAgICAgaWYgKHRoaXMucmVzb3VyY2VzRG9uZSA8IDApIHtcbiAgICAgICAgICB0aGlzLnJlc291cmNlc0RvbmUgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnJlc291cmNlc1ByZXZDb21wbGV0ZVN0YXRlW2FjdGl2aXR5LmV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkXSA9IHN0YXR1cztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWJzdHJhY3QgcHJpbnQoKTogdm9pZDtcblxuICBwdWJsaWMgc3RhcnQoKSB7XG4gICAgLy8gRW1wdHkgb24gcHVycG9zZVxuICB9XG5cbiAgcHVibGljIHN0b3AoKSB7XG4gICAgLy8gRW1wdHkgb24gcHVycG9zZVxuICB9XG59XG5cbi8qKlxuICogQWN0aXZpdHkgUHJpbnRlciB3aGljaCBzaG93cyBhIGZ1bGwgbG9nIG9mIGFsbCBDbG91ZEZvcm1hdGlvbiBldmVudHNcbiAqXG4gKiBXaGVuIHRoZXJlIGhhc24ndCBiZWVuIGFjdGl2aXR5IGZvciBhIHdoaWxlLCBpdCB3aWxsIHByaW50IHRoZSByZXNvdXJjZXNcbiAqIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBwcm9ncmVzcywgdG8gc2hvdyB3aGF0J3MgaG9sZGluZyB1cCB0aGUgZGVwbG95bWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIEhpc3RvcnlBY3Rpdml0eVByaW50ZXIgZXh0ZW5kcyBBY3Rpdml0eVByaW50ZXJCYXNlIHtcbiAgLyoqXG4gICAqIExhc3QgdGltZSB3ZSBwcmludGVkIHNvbWV0aGluZyB0byB0aGUgY29uc29sZS5cbiAgICpcbiAgICogVXNlZCB0byBtZWFzdXJlIHRpbWVvdXQgZm9yIHByb2dyZXNzIHJlcG9ydGluZy5cbiAgICovXG4gIHByaXZhdGUgbGFzdFByaW50VGltZSA9IERhdGUubm93KCk7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBtcyBvZiBjaGFuZ2UgYWJzZW5jZSBiZWZvcmUgd2UgdGVsbCB0aGUgdXNlciBhYm91dCB0aGUgcmVzb3VyY2VzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBwcm9ncmVzcy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5Qcm9ncmVzc0RlbGF5ID0gMzBfMDAwO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJpbnRhYmxlID0gbmV3IEFycmF5PFN0YWNrQWN0aXZpdHk+KCk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFByaW50ZXJQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRBY3Rpdml0eShhY3Rpdml0eTogU3RhY2tBY3Rpdml0eSkge1xuICAgIHN1cGVyLmFkZEFjdGl2aXR5KGFjdGl2aXR5KTtcbiAgICB0aGlzLnByaW50YWJsZS5wdXNoKGFjdGl2aXR5KTtcbiAgICB0aGlzLnByaW50KCk7XG4gIH1cblxuICBwdWJsaWMgcHJpbnQoKSB7XG4gICAgZm9yIChjb25zdCBhY3Rpdml0eSBvZiB0aGlzLnByaW50YWJsZSkge1xuICAgICAgdGhpcy5wcmludE9uZShhY3Rpdml0eSk7XG4gICAgfVxuICAgIHRoaXMucHJpbnRhYmxlLnNwbGljZSgwLCB0aGlzLnByaW50YWJsZS5sZW5ndGgpO1xuICAgIHRoaXMucHJpbnRJblByb2dyZXNzKCk7XG4gIH1cblxuICBwdWJsaWMgc3RvcCgpIHtcbiAgICAvLyBQcmludCBmYWlsdXJlcyBhdCB0aGUgZW5kXG4gICAgaWYgKHRoaXMuZmFpbHVyZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoJ1xcbkZhaWxlZCByZXNvdXJjZXM6XFxuJyk7XG4gICAgICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgdGhpcy5mYWlsdXJlcykge1xuICAgICAgICAvLyBSb290IHN0YWNrIGZhaWx1cmVzIGFyZSBub3QgaW50ZXJlc3RpbmdcbiAgICAgICAgaWYgKGZhaWx1cmUuZXZlbnQuU3RhY2tOYW1lID09PSBmYWlsdXJlLmV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByaW50T25lKGZhaWx1cmUsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByaW50T25lKGFjdGl2aXR5OiBTdGFja0FjdGl2aXR5LCBwcm9ncmVzcz86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBlID0gYWN0aXZpdHkuZXZlbnQ7XG4gICAgY29uc3QgY29sb3IgPSBjb2xvckZyb21TdGF0dXNSZXN1bHQoZS5SZXNvdXJjZVN0YXR1cyk7XG4gICAgbGV0IHJlYXNvbkNvbG9yID0gY2hhbGsuY3lhbjtcblxuICAgIGxldCBzdGFja1RyYWNlID0gJyc7XG4gICAgY29uc3QgbWQgPSBhY3Rpdml0eS5tZXRhZGF0YTtcbiAgICBpZiAobWQgJiYgZS5SZXNvdXJjZVN0YXR1cyAmJiBlLlJlc291cmNlU3RhdHVzLmluZGV4T2YoJ0ZBSUxFRCcpICE9PSAtMSkge1xuICAgICAgc3RhY2tUcmFjZSA9IG1kLmVudHJ5LnRyYWNlID8gYFxcblxcdCR7bWQuZW50cnkudHJhY2Uuam9pbignXFxuXFx0XFxcXF8gJyl9YCA6ICcnO1xuICAgICAgcmVhc29uQ29sb3IgPSBjaGFsay5yZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2VOYW1lID0gbWQgPyBtZC5jb25zdHJ1Y3RQYXRoIDogKGUuTG9naWNhbFJlc291cmNlSWQgfHwgJycpO1xuXG4gICAgY29uc3QgbG9naWNhbElkID0gcmVzb3VyY2VOYW1lICE9PSBlLkxvZ2ljYWxSZXNvdXJjZUlkID8gYCgke2UuTG9naWNhbFJlc291cmNlSWR9KSBgIDogJyc7XG5cbiAgICB0aGlzLnN0cmVhbS53cml0ZShcbiAgICAgIHV0aWwuZm9ybWF0KFxuICAgICAgICAnJXMgfCAlcyVzIHwgJXMgfCAlcyB8ICVzICVzJXMlc1xcbicsXG4gICAgICAgIGUuU3RhY2tOYW1lLFxuICAgICAgICAocHJvZ3Jlc3MgIT09IGZhbHNlID8gYCR7dGhpcy5wcm9ncmVzcygpfSB8IGAgOiAnJyksXG4gICAgICAgIG5ldyBEYXRlKGUuVGltZXN0YW1wKS50b0xvY2FsZVRpbWVTdHJpbmcoKSxcbiAgICAgICAgY29sb3IocGFkUmlnaHQoU1RBVFVTX1dJRFRILCAoZS5SZXNvdXJjZVN0YXR1cyB8fCAnJykuc3Vic3RyKDAsIFNUQVRVU19XSURUSCkpKSwgLy8gcGFkIGxlZnQgYW5kIHRyaW1cbiAgICAgICAgcGFkUmlnaHQodGhpcy5wcm9wcy5yZXNvdXJjZVR5cGVDb2x1bW5XaWR0aCwgZS5SZXNvdXJjZVR5cGUgfHwgJycpLFxuICAgICAgICBjb2xvcihjaGFsay5ib2xkKHJlc291cmNlTmFtZSkpLFxuICAgICAgICBsb2dpY2FsSWQsXG4gICAgICAgIHJlYXNvbkNvbG9yKGNoYWxrLmJvbGQoZS5SZXNvdXJjZVN0YXR1c1JlYXNvbiA/IGUuUmVzb3VyY2VTdGF0dXNSZWFzb24gOiAnJykpLFxuICAgICAgICByZWFzb25Db2xvcihzdGFja1RyYWNlKSxcbiAgICAgICksXG4gICAgKTtcblxuICAgIHRoaXMubGFzdFByaW50VGltZSA9IERhdGUubm93KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVwb3J0IHRoZSBjdXJyZW50IHByb2dyZXNzIGFzIGEgWzM0LzQyXSBzdHJpbmcsIG9yIGp1c3QgWzM0XSBpZiB0aGUgdG90YWwgaXMgdW5rbm93blxuICAgKi9cbiAgcHJpdmF0ZSBwcm9ncmVzcygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnJlc291cmNlc1RvdGFsID09IG51bGwpIHtcbiAgICAgIC8vIERvbid0IGhhdmUgdG90YWwsIHNob3cgc2ltcGxlIGNvdW50IGFuZCBob3BlIHRoZSBodW1hbiBrbm93c1xuICAgICAgcmV0dXJuIHBhZExlZnQoMywgdXRpbC5mb3JtYXQoJyVzJywgdGhpcy5yZXNvdXJjZXNEb25lKSk7IC8vIG1heCA1MDAgcmVzb3VyY2VzXG4gICAgfVxuXG4gICAgcmV0dXJuIHV0aWwuZm9ybWF0KCclcy8lcycsXG4gICAgICBwYWRMZWZ0KHRoaXMucmVzb3VyY2VEaWdpdHMsIHRoaXMucmVzb3VyY2VzRG9uZS50b1N0cmluZygpKSxcbiAgICAgIHBhZExlZnQodGhpcy5yZXNvdXJjZURpZ2l0cywgdGhpcy5yZXNvdXJjZXNUb3RhbCAhPSBudWxsID8gdGhpcy5yZXNvdXJjZXNUb3RhbC50b1N0cmluZygpIDogJz8nKSk7XG4gIH1cblxuICAvKipcbiAgICogSWYgc29tZSByZXNvdXJjZXMgYXJlIHRha2luZyBhIHdoaWxlIHRvIGNyZWF0ZSwgbm90aWZ5IHRoZSB1c2VyIGFib3V0IHdoYXQncyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3NcbiAgICovXG4gIHByaXZhdGUgcHJpbnRJblByb2dyZXNzKCkge1xuICAgIGlmIChEYXRlLm5vdygpIDwgdGhpcy5sYXN0UHJpbnRUaW1lICsgdGhpcy5pblByb2dyZXNzRGVsYXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5yZXNvdXJjZXNJblByb2dyZXNzKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnN0cmVhbS53cml0ZSh1dGlsLmZvcm1hdCgnJXMgQ3VycmVudGx5IGluIHByb2dyZXNzOiAlc1xcbicsXG4gICAgICAgIHRoaXMucHJvZ3Jlc3MoKSxcbiAgICAgICAgY2hhbGsuYm9sZChPYmplY3Qua2V5cyh0aGlzLnJlc291cmNlc0luUHJvZ3Jlc3MpLmpvaW4oJywgJykpKSk7XG4gICAgfVxuXG4gICAgLy8gV2UgY2hlYXQgYSBiaXQgaGVyZS4gVG8gcHJldmVudCBwcmludEluUHJvZ3Jlc3MoKSBmcm9tIHJlcGVhdGVkbHkgdHJpZ2dlcmluZyxcbiAgICAvLyB3ZSBzZXQgdGhlIHRpbWVzdGFtcCBpbnRvIHRoZSBmdXR1cmUuIEl0IHdpbGwgYmUgcmVzZXQgd2hlbmV2ZXIgYSByZWd1bGFyIHByaW50XG4gICAgLy8gb2NjdXJzLCBhZnRlciB3aGljaCB3ZSBjYW4gYmUgdHJpZ2dlcmVkIGFnYWluLlxuICAgIHRoaXMubGFzdFByaW50VGltZSA9ICtJbmZpbml0eTtcbiAgfVxuXG59XG5cbi8qKlxuICogQWN0aXZpdHkgUHJpbnRlciB3aGljaCBzaG93cyB0aGUgcmVzb3VyY2VzIGN1cnJlbnRseSBiZWluZyB1cGRhdGVkXG4gKlxuICogSXQgd2lsbCBjb250aW51b3VzbHkgcmV1cGRhdGUgdGhlIHRlcm1pbmFsIGFuZCBzaG93IG9ubHkgdGhlIHJlc291cmNlc1xuICogdGhhdCBhcmUgY3VycmVudGx5IGJlaW5nIHVwZGF0ZWQsIGluIGFkZGl0aW9uIHRvIGEgcHJvZ3Jlc3MgYmFyIHdoaWNoXG4gKiBzaG93cyBob3cgZmFyIGFsb25nIHRoZSBkZXBsb3ltZW50IGlzLlxuICpcbiAqIFJlc291cmNlcyB0aGF0IGhhdmUgZmFpbGVkIHdpbGwgYWx3YXlzIGJlIHNob3duLCBhbmQgd2lsbCBiZSByZWNhcGl0dWxhdGVkXG4gKiBhbG9uZyB3aXRoIHRoZWlyIHN0YWNrIHRyYWNlIHdoZW4gdGhlIG1vbml0b3JpbmcgZW5kcy5cbiAqXG4gKiBSZXNvdXJjZXMgdGhhdCBmYWlsZWQgZGVwbG95bWVudCBiZWNhdXNlIHRoZXkgaGF2ZSBiZWVuIGNhbmNlbGxlZCBhcmVcbiAqIG5vdCBpbmNsdWRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEN1cnJlbnRBY3Rpdml0eVByaW50ZXIgZXh0ZW5kcyBBY3Rpdml0eVByaW50ZXJCYXNlIHtcbiAgLyoqXG4gICAqIFRoaXMgbG9va3MgdmVyeSBkaXNvcmllbnRpbmcgc2xlZXBpbmcgZm9yIDUgc2Vjb25kcy4gVXBkYXRlIHF1aWNrZXIuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlU2xlZXA6IG51bWJlciA9IDJfMDAwO1xuXG4gIHByaXZhdGUgb2xkTG9nTGV2ZWw6IExvZ0xldmVsID0gTG9nTGV2ZWwuREVGQVVMVDtcbiAgcHJpdmF0ZSBibG9jayA9IG5ldyBSZXdyaXRhYmxlQmxvY2sodGhpcy5zdHJlYW0pO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBQcmludGVyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBwdWJsaWMgcHJpbnQoKTogdm9pZCB7XG4gICAgY29uc3QgbGluZXMgPSBbXTtcblxuICAgIC8vIEFkZCBhIHByb2dyZXNzIGJhciBhdCB0aGUgdG9wXG4gICAgY29uc3QgcHJvZ3Jlc3NXaWR0aCA9IE1hdGgubWF4KE1hdGgubWluKCh0aGlzLmJsb2NrLndpZHRoID8/IDgwKSAtIFBST0dSRVNTQkFSX0VYVFJBX1NQQUNFIC0gMSwgTUFYX1BST0dSRVNTQkFSX1dJRFRIKSwgTUlOX1BST0dSRVNTQkFSX1dJRFRIKTtcbiAgICBjb25zdCBwcm9nID0gdGhpcy5wcm9ncmVzc0Jhcihwcm9ncmVzc1dpZHRoKTtcbiAgICBpZiAocHJvZykge1xuICAgICAgbGluZXMucHVzaCgnICAnICsgcHJvZywgJycpO1xuICAgIH1cblxuICAgIC8vIE5vcm1hbGx5IHdlJ2Qgb25seSBwcmludCBcInJlc291cmNlcyBpbiBwcm9ncmVzc1wiLCBidXQgaXQncyBhbHNvIHVzZWZ1bFxuICAgIC8vIHRvIGtlZXAgYW4gZXllIG9uIHRoZSBmYWlsdXJlcyBhbmQga25vdyBhYm91dCB0aGUgc3BlY2lmaWMgZXJyb3JzIGFzcXVpY2tseVxuICAgIC8vIGFzIHBvc3NpYmxlICh3aGlsZSB0aGUgc3RhY2sgaXMgc3RpbGwgcm9sbGluZyBiYWNrKSwgc28gYWRkIHRob3NlIGluLlxuICAgIGNvbnN0IHRvUHJpbnQ6IFN0YWNrQWN0aXZpdHlbXSA9IFsuLi50aGlzLmZhaWx1cmVzLCAuLi5PYmplY3QudmFsdWVzKHRoaXMucmVzb3VyY2VzSW5Qcm9ncmVzcyldO1xuICAgIHRvUHJpbnQuc29ydCgoYSwgYikgPT4gYS5ldmVudC5UaW1lc3RhbXAuZ2V0VGltZSgpIC0gYi5ldmVudC5UaW1lc3RhbXAuZ2V0VGltZSgpKTtcblxuICAgIGxpbmVzLnB1c2goLi4udG9QcmludC5tYXAocmVzID0+IHtcbiAgICAgIGNvbnN0IGNvbG9yID0gY29sb3JGcm9tU3RhdHVzQWN0aXZpdHkocmVzLmV2ZW50LlJlc291cmNlU3RhdHVzKTtcbiAgICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IHJlcy5tZXRhZGF0YT8uY29uc3RydWN0UGF0aCA/PyByZXMuZXZlbnQuTG9naWNhbFJlc291cmNlSWQgPz8gJyc7XG5cbiAgICAgIHJldHVybiB1dGlsLmZvcm1hdCgnJXMgfCAlcyB8ICVzIHwgJXMlcycsXG4gICAgICAgIHBhZExlZnQoVElNRVNUQU1QX1dJRFRILCBuZXcgRGF0ZShyZXMuZXZlbnQuVGltZXN0YW1wKS50b0xvY2FsZVRpbWVTdHJpbmcoKSksXG4gICAgICAgIGNvbG9yKHBhZFJpZ2h0KFNUQVRVU19XSURUSCwgKHJlcy5ldmVudC5SZXNvdXJjZVN0YXR1cyB8fCAnJykuc3Vic3RyKDAsIFNUQVRVU19XSURUSCkpKSxcbiAgICAgICAgcGFkUmlnaHQodGhpcy5wcm9wcy5yZXNvdXJjZVR5cGVDb2x1bW5XaWR0aCwgcmVzLmV2ZW50LlJlc291cmNlVHlwZSB8fCAnJyksXG4gICAgICAgIGNvbG9yKGNoYWxrLmJvbGQoc2hvcnRlbig0MCwgcmVzb3VyY2VOYW1lKSkpLFxuICAgICAgICB0aGlzLmZhaWx1cmVSZWFzb25Pbk5leHRMaW5lKHJlcykpO1xuICAgIH0pKTtcblxuICAgIHRoaXMuYmxvY2suZGlzcGxheUxpbmVzKGxpbmVzKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydCgpIHtcbiAgICAvLyBOZWVkIHRvIHByZXZlbnQgdGhlIHdhaXRlciBmcm9tIHByaW50aW5nICdzdGFjayBub3Qgc3RhYmxlJyBldmVyeSA1IHNlY29uZHMsIGl0IG1lc3Nlc1xuICAgIC8vIHdpdGggdGhlIG91dHB1dCBjYWxjdWxhdGlvbnMuXG4gICAgdGhpcy5vbGRMb2dMZXZlbCA9IGxvZ0xldmVsO1xuICAgIHNldExvZ0xldmVsKExvZ0xldmVsLkRFRkFVTFQpO1xuICB9XG5cbiAgcHVibGljIHN0b3AoKSB7XG4gICAgc2V0TG9nTGV2ZWwodGhpcy5vbGRMb2dMZXZlbCk7XG5cbiAgICAvLyBQcmludCBmYWlsdXJlcyBhdCB0aGUgZW5kXG4gICAgY29uc3QgbGluZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgZmFpbHVyZSBvZiB0aGlzLmZhaWx1cmVzKSB7XG4gICAgICAvLyBSb290IHN0YWNrIGZhaWx1cmVzIGFyZSBub3QgaW50ZXJlc3RpbmdcbiAgICAgIGlmIChmYWlsdXJlLmV2ZW50LlN0YWNrTmFtZSA9PT0gZmFpbHVyZS5ldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGluZXMucHVzaCh1dGlsLmZvcm1hdChjaGFsay5yZWQoJyVzIHwgJXMgfCAlcyB8ICVzJXMnKSArICdcXG4nLFxuICAgICAgICBwYWRMZWZ0KFRJTUVTVEFNUF9XSURUSCwgbmV3IERhdGUoZmFpbHVyZS5ldmVudC5UaW1lc3RhbXApLnRvTG9jYWxlVGltZVN0cmluZygpKSxcbiAgICAgICAgcGFkUmlnaHQoU1RBVFVTX1dJRFRILCAoZmFpbHVyZS5ldmVudC5SZXNvdXJjZVN0YXR1cyB8fCAnJykuc3Vic3RyKDAsIFNUQVRVU19XSURUSCkpLFxuICAgICAgICBwYWRSaWdodCh0aGlzLnByb3BzLnJlc291cmNlVHlwZUNvbHVtbldpZHRoLCBmYWlsdXJlLmV2ZW50LlJlc291cmNlVHlwZSB8fCAnJyksXG4gICAgICAgIHNob3J0ZW4oNDAsIGZhaWx1cmUuZXZlbnQuTG9naWNhbFJlc291cmNlSWQgPz8gJycpLFxuICAgICAgICB0aGlzLmZhaWx1cmVSZWFzb25Pbk5leHRMaW5lKGZhaWx1cmUpKSk7XG5cbiAgICAgIGNvbnN0IHRyYWNlID0gZmFpbHVyZS5tZXRhZGF0YT8uZW50cnk/LnRyYWNlO1xuICAgICAgaWYgKHRyYWNlKSB7XG4gICAgICAgIGxpbmVzLnB1c2goY2hhbGsucmVkKGBcXHQke3RyYWNlLmpvaW4oJ1xcblxcdFxcXFxfICcpfVxcbmApKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEaXNwbGF5IGluIHRoZSBzYW1lIGJsb2NrIHNwYWNlLCBvdGhlcndpc2Ugd2UncmUgZ29pbmcgdG8gaGF2ZSBzaWxseSBlbXB0eSBsaW5lcy5cbiAgICB0aGlzLmJsb2NrLmRpc3BsYXlMaW5lcyhsaW5lcyk7XG4gIH1cblxuICBwcml2YXRlIHByb2dyZXNzQmFyKHdpZHRoOiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMucmVzb3VyY2VzVG90YWwpIHsgcmV0dXJuICcnOyB9XG4gICAgY29uc3QgZnJhY3Rpb24gPSBNYXRoLm1pbih0aGlzLnJlc291cmNlc0RvbmUgLyB0aGlzLnJlc291cmNlc1RvdGFsLCAxKTtcbiAgICBjb25zdCBpbm5lcldpZHRoID0gTWF0aC5tYXgoMSwgd2lkdGggLSAyKTtcbiAgICBjb25zdCBjaGFycyA9IGlubmVyV2lkdGggKiBmcmFjdGlvbjtcbiAgICBjb25zdCByZW1haW5kZXIgPSBjaGFycyAtIE1hdGguZmxvb3IoY2hhcnMpO1xuXG4gICAgY29uc3QgZnVsbENoYXJzID0gRlVMTF9CTE9DSy5yZXBlYXQoTWF0aC5mbG9vcihjaGFycykpO1xuICAgIGNvbnN0IHBhcnRpYWxDaGFyID0gUEFSVElBTF9CTE9DS1tNYXRoLmZsb29yKHJlbWFpbmRlciAqIFBBUlRJQUxfQkxPQ0subGVuZ3RoKV07XG4gICAgY29uc3QgZmlsbGVyID0gJ8K3Jy5yZXBlYXQoaW5uZXJXaWR0aCAtIE1hdGguZmxvb3IoY2hhcnMpIC0gKHBhcnRpYWxDaGFyID8gMSA6IDApKTtcblxuICAgIGNvbnN0IGNvbG9yID0gdGhpcy5yb2xsaW5nQmFjayA/IGNoYWxrLnllbGxvdyA6IGNoYWxrLmdyZWVuO1xuXG4gICAgcmV0dXJuICdbJyArIGNvbG9yKGZ1bGxDaGFycyArIHBhcnRpYWxDaGFyKSArIGZpbGxlciArIGBdICgke3RoaXMucmVzb3VyY2VzRG9uZX0vJHt0aGlzLnJlc291cmNlc1RvdGFsfSlgO1xuICB9XG5cbiAgcHJpdmF0ZSBmYWlsdXJlUmVhc29uT25OZXh0TGluZShhY3Rpdml0eTogU3RhY2tBY3Rpdml0eSkge1xuICAgIHJldHVybiBoYXNFcnJvck1lc3NhZ2UoYWN0aXZpdHkuZXZlbnQuUmVzb3VyY2VTdGF0dXMgPz8gJycpXG4gICAgICA/IGBcXG4keycgJy5yZXBlYXQoVElNRVNUQU1QX1dJRFRIICsgU1RBVFVTX1dJRFRIICsgNil9JHtjaGFsay5yZWQoYWN0aXZpdHkuZXZlbnQuUmVzb3VyY2VTdGF0dXNSZWFzb24gPz8gJycpfWBcbiAgICAgIDogJyc7XG4gIH1cbn1cblxuY29uc3QgRlVMTF9CTE9DSyA9ICfilognO1xuY29uc3QgUEFSVElBTF9CTE9DSyA9IFsnJywgJ+KWjycsICfilo4nLCAn4paNJywgJ+KWjCcsICfilosnLCAn4paKJywgJ+KWiSddO1xuY29uc3QgTUFYX1BST0dSRVNTQkFSX1dJRFRIID0gNjA7XG5jb25zdCBNSU5fUFJPR1JFU1NCQVJfV0lEVEggPSAxMDtcbmNvbnN0IFBST0dSRVNTQkFSX0VYVFJBX1NQQUNFID0gMiAvKiBsZWFkaW5nIHNwYWNlcyAqLyArIDIgLyogYnJhY2tldHMgKi8gKyA0IC8qIHByb2dyZXNzIG51bWJlciBkZWNvcmF0aW9uICovICsgNiAvKiAyIHByb2dyZXNzIG51bWJlcnMgdXAgdG8gOTk5ICovO1xuXG5mdW5jdGlvbiBoYXNFcnJvck1lc3NhZ2Uoc3RhdHVzOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0YXR1cy5lbmRzV2l0aCgnX0ZBSUxFRCcpIHx8IHN0YXR1cyA9PT0gJ1JPTExCQUNLX0lOX1BST0dSRVNTJyB8fCBzdGF0dXMgPT09ICdVUERBVEVfUk9MTEJBQ0tfSU5fUFJPR1JFU1MnO1xufVxuXG5mdW5jdGlvbiBjb2xvckZyb21TdGF0dXNSZXN1bHQoc3RhdHVzPzogc3RyaW5nKSB7XG4gIGlmICghc3RhdHVzKSB7XG4gICAgcmV0dXJuIGNoYWxrLnJlc2V0O1xuICB9XG5cbiAgaWYgKHN0YXR1cy5pbmRleE9mKCdGQUlMRUQnKSAhPT0gLTEpIHtcbiAgICByZXR1cm4gY2hhbGsucmVkO1xuICB9XG4gIGlmIChzdGF0dXMuaW5kZXhPZignUk9MTEJBQ0snKSAhPT0gLTEpIHtcbiAgICByZXR1cm4gY2hhbGsueWVsbG93O1xuICB9XG4gIGlmIChzdGF0dXMuaW5kZXhPZignQ09NUExFVEUnKSAhPT0gLTEpIHtcbiAgICByZXR1cm4gY2hhbGsuZ3JlZW47XG4gIH1cblxuICByZXR1cm4gY2hhbGsucmVzZXQ7XG59XG5cbmZ1bmN0aW9uIGNvbG9yRnJvbVN0YXR1c0FjdGl2aXR5KHN0YXR1cz86IHN0cmluZykge1xuICBpZiAoIXN0YXR1cykge1xuICAgIHJldHVybiBjaGFsay5yZXNldDtcbiAgfVxuXG4gIGlmIChzdGF0dXMuZW5kc1dpdGgoJ19GQUlMRUQnKSkge1xuICAgIHJldHVybiBjaGFsay5yZWQ7XG4gIH1cblxuICBpZiAoc3RhdHVzLnN0YXJ0c1dpdGgoJ0NSRUFURV8nKSB8fCBzdGF0dXMuc3RhcnRzV2l0aCgnVVBEQVRFXycpKSB7XG4gICAgcmV0dXJuIGNoYWxrLmdyZWVuO1xuICB9XG4gIC8vIEZvciBzdGFja3MsIGl0IG1heSBhbHNvIGJlICdVUEREQVRFX1JPTExCQUNLX0lOX1BST0dSRVNTJ1xuICBpZiAoc3RhdHVzLmluZGV4T2YoJ1JPTExCQUNLXycpICE9PSAtMSkge1xuICAgIHJldHVybiBjaGFsay55ZWxsb3c7XG4gIH1cbiAgaWYgKHN0YXR1cy5zdGFydHNXaXRoKCdERUxFVEVfJykpIHtcbiAgICByZXR1cm4gY2hhbGsueWVsbG93O1xuICB9XG5cbiAgcmV0dXJuIGNoYWxrLnJlc2V0O1xufVxuXG5mdW5jdGlvbiBzaG9ydGVuKG1heFdpZHRoOiBudW1iZXIsIHA6IHN0cmluZykge1xuICBpZiAocC5sZW5ndGggPD0gbWF4V2lkdGgpIHsgcmV0dXJuIHA7IH1cbiAgY29uc3QgaGFsZiA9IE1hdGguZmxvb3IoKG1heFdpZHRoIC0gMykgLyAyKTtcbiAgcmV0dXJuIHAuc3Vic3RyKDAsIGhhbGYpICsgJy4uLicgKyBwLnN1YnN0cihwLmxlbmd0aCAtIGhhbGYpO1xufVxuXG5jb25zdCBUSU1FU1RBTVBfV0lEVEggPSAxMjtcbmNvbnN0IFNUQVRVU19XSURUSCA9IDIwO1xuIl19
|
|
550
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stYWN0aXZpdHktbW9uaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0YWNrLWFjdGl2aXR5LW1vbml0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQTZCO0FBQzdCLDJEQUEyRDtBQUczRCwrQkFBK0I7QUFDL0IsOENBQTBFO0FBQzFFLHdDQUE2QztBQVk3Qzs7R0FFRztBQUNILElBQVkscUJBVVg7QUFWRCxXQUFZLHFCQUFxQjtJQUMvQjs7T0FFRztJQUNILG9DQUFXLENBQUE7SUFFWDs7T0FFRztJQUNILDBDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFWVyxxQkFBcUIsR0FBckIsNkJBQXFCLEtBQXJCLDZCQUFxQixRQVVoQztBQXNERCxNQUFhLG9CQUFvQjtJQXVEL0IsWUFDbUIsR0FBdUIsRUFDdkIsU0FBaUIsRUFDakIsT0FBeUIsRUFDekIsS0FBeUMsRUFDMUQscUJBQTRCOztRQUpYLFFBQUcsR0FBSCxHQUFHLENBQW9CO1FBQ3ZCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFDekIsVUFBSyxHQUFMLEtBQUssQ0FBb0M7UUEzQjVEOztXQUVHO1FBQ2EsV0FBTSxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7UUFFckMsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLGFBQVEsR0FBeUMsRUFBRyxDQUFDO1FBd0IzRCxJQUFJLENBQUMsU0FBUyxTQUFHLHFCQUFxQixhQUFyQixxQkFBcUIsdUJBQXJCLHFCQUFxQixDQUFFLE9BQU8scUNBQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2xFLENBQUM7SUE3REQ7O09BRUc7SUFDSSxNQUFNLENBQUMsa0JBQWtCLENBQzlCLEdBQXVCLEVBQ3ZCLFNBQWlCLEVBQ2pCLGFBQWdELEVBQUUsVUFBbUMsRUFBRTs7UUFDdkYsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUU5QixNQUFNLEtBQUss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QztBQUNyQixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsUUFBZ0IsRUFBRSxDQUFTO0lBQzFDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxRQUFRLEVBQUU7UUFBRSxPQUFPLENBQUMsQ0FBQztLQUFFO0lBQ3ZDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDNUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDM0IsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXRpbCBmcm9tICd1dGlsJztcbmltcG9ydCAqIGFzIGN4c2NoZW1hIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0ICogYXMgYXdzIGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgZXJyb3IsIGxvZ0xldmVsLCBMb2dMZXZlbCwgc2V0TG9nTGV2ZWwgfSBmcm9tICcuLi8uLi8uLi9sb2dnaW5nJztcbmltcG9ydCB7IFJld3JpdGFibGVCbG9jayB9IGZyb20gJy4uL2Rpc3BsYXknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrQWN0aXZpdHkge1xuICByZWFkb25seSBldmVudDogYXdzLkNsb3VkRm9ybWF0aW9uLlN0YWNrRXZlbnQ7XG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogUmVzb3VyY2VNZXRhZGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZU1ldGFkYXRhIHtcbiAgZW50cnk6IGN4c2NoZW1hLk1ldGFkYXRhRW50cnk7XG4gIGNvbnN0cnVjdFBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdXBwb3J0ZWQgZGlzcGxheSBtb2RlcyBmb3Igc3RhY2sgZGVwbG95bWVudCBhY3Rpdml0eVxuICovXG5leHBvcnQgZW51bSBTdGFja0FjdGl2aXR5UHJvZ3Jlc3Mge1xuICAvKipcbiAgICogRGlzcGxheXMgYSBwcm9ncmVzcyBiYXIgd2l0aCBvbmx5IHRoZSBldmVudHMgZm9yIHRoZSByZXNvdXJjZSBjdXJyZW50bHkgYmVpbmcgZGVwbG95ZWRcbiAgICovXG4gIEJBUiA9ICdiYXInLFxuXG4gIC8qKlxuICAgKiBEaXNwbGF5cyBjb21wbGV0ZSBoaXN0b3J5IHdpdGggYWxsIENsb3VkRm9ybWF0aW9uIHN0YWNrIGV2ZW50c1xuICAgKi9cbiAgRVZFTlRTID0gJ2V2ZW50cycsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2l0aERlZmF1bHRQcmludGVyUHJvcHMge1xuICAvKipcbiAgICogVG90YWwgbnVtYmVyIG9mIHJlc291cmNlcyB0byB1cGRhdGVcbiAgICpcbiAgICogVXNlZCB0byBjYWxjdWxhdGUgYSBwcm9ncmVzcyBiYXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcHJvZ3Jlc3MgcmVwb3J0aW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VzVG90YWw/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2cgbGV2ZWwgdGhhdCB3YXMgcmVxdWVzdGVkIGluIHRoZSBDTElcbiAgICpcbiAgICogSWYgdmVyYm9zZSBvciB0cmFjZSBpcyByZXF1ZXN0ZWQsIHdlJ2xsIGFsd2F5cyB1c2UgdGhlIGZ1bGwgaGlzdG9yeSBwcmludGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFVzZSB2YWx1ZSBmcm9tIGxvZ2dpbmcubG9nTGV2ZWxcbiAgICovXG4gIHJlYWRvbmx5IGxvZ0xldmVsPzogTG9nTGV2ZWw7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzcGxheSBhbGwgc3RhY2sgZXZlbnRzIG9yIHRvIGRpc3BsYXkgb25seSB0aGUgZXZlbnRzIGZvciB0aGVcbiAgICogcmVzb3VyY2UgY3VycmVudGx5IGJlaW5nIGRlcGxveWVkXG4gICAqXG4gICAqIElmIG5vdCBzZXQsIHRoZSBzdGFjayBoaXN0b3J5IHdpdGggYWxsIHN0YWNrIGV2ZW50cyB3aWxsIGJlIGRpc3BsYXllZFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcHJvZ3Jlc3M/OiBTdGFja0FjdGl2aXR5UHJvZ3Jlc3M7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgd2UgYXJlIG9uIGEgQ0kgc3lzdGVtXG4gICAqXG4gICAqIElmIHNvLCBkaXNhYmxlIHRoZSBcIm9wdGltaXplZFwiIHN0YWNrIG1vbml0b3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjaT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENyZWF0aW9uIHRpbWUgb2YgdGhlIGNoYW5nZSBzZXRcbiAgICpcbiAgICogVGhpcyB3aWxsIGJlIHVzZWQgdG8gZmlsdGVyIGV2ZW50cywgb25seSBzaG93aW5nIHRob3NlIGZyb20gYWZ0ZXIgdGhlIGNoYW5nZVxuICAgKiBzZXQgY3JlYXRpb24gdGltZS5cbiAgICpcbiAgICogSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoaXMsIG90aGVyd2lzZSB0aGUgZmlsdGVyaW5nIHdpbGwgYmUgc3ViamVjdFxuICAgKiB0byBjbG9jayBkcmlmdCBiZXR3ZWVuIGxvY2FsIGFuZCBjbG91ZCBtYWNoaW5lcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBsb2NhbCBtYWNoaW5lJ3MgY3VycmVudCB0aW1lXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2VTZXRDcmVhdGlvblRpbWU/OiBEYXRlO1xufVxuXG5leHBvcnQgY2xhc3MgU3RhY2tBY3Rpdml0eU1vbml0b3Ige1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBTdGFjayBBY3Rpdml0eSBNb25pdG9yIHVzaW5nIGEgZGVmYXVsdCBwcmludGVyLCBiYXNlZCBvbiBjb250ZXh0IGNsdWVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHdpdGhEZWZhdWx0UHJpbnRlcihcbiAgICBjZm46IGF3cy5DbG91ZEZvcm1hdGlvbixcbiAgICBzdGFja05hbWU6IHN0cmluZyxcbiAgICBzdGFja0FydGlmYWN0OiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsIG9wdGlvbnM6IFdpdGhEZWZhdWx0UHJpbnRlclByb3BzID0ge30pIHtcbiAgICBjb25zdCBzdHJlYW0gPSBwcm9jZXNzLnN0ZGVycjtcblxuICAgIGNvbnN0IHByb3BzOiBQcmludGVyUHJvcHMgPSB7XG4gICAgICByZXNvdXJjZVR5cGVDb2x1bW5XaWR0aDogY2FsY01heFJlc291cmNlVHlwZUxlbmd0aChzdGFja0FydGlmYWN0LnRlbXBsYXRlKSxcbiAgICAgIHJlc291cmNlc1RvdGFsOiBvcHRpb25zLnJlc291cmNlc1RvdGFsLFxuICAgICAgc3RyZWFtLFxuICAgIH07XG5cbiAgICBjb25zdCBpc1dpbmRvd3MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuICAgIGNvbnN0IHZlcmJvc2UgPSBvcHRpb25zLmxvZ0xldmVsID8/IGxvZ0xldmVsO1xuICAgIC8vIE9uIHNvbWUgQ0kgc3lzdGVtcyAoc3VjaCBhcyBDaXJjbGVDSSkgb3V0cHV0IHN0aWxsIHJlcG9ydHMgYXMgYSBUVFkgc28gd2UgYWxzb1xuICAgIC8vIG5lZWQgYW4gaW5kaXZpZHVhbCBjaGVjayBmb3Igd2hldGhlciB3ZSdyZSBydW5uaW5nIG9uIENJLlxuICAgIC8vIHNlZTogaHR0cHM6Ly9kaXNjdXNzLmNpcmNsZWNpLmNvbS90L2NpcmNsZWNpLXRlcm1pbmFsLWlzLWEtdHR5LWJ1dC10ZXJtLWlzLW5vdC1zZXQvOTk2NVxuICAgIGNvbnN0IGZhbmN5T3V0cHV0QXZhaWxhYmxlID0gIWlzV2luZG93cyAmJiBzdHJlYW0uaXNUVFkgJiYgIW9wdGlvbnMuY2k7XG4gICAgY29uc3QgcHJvZ3Jlc3MgPSBvcHRpb25zLnByb2dyZXNzID8/IFN0YWNrQWN0aXZpdHlQcm9ncmVzcy5CQVI7XG5cbiAgICBjb25zdCBwcmludGVyID0gZmFuY3lPdXRwdXRBdmFpbGFibGUgJiYgIXZlcmJvc2UgJiYgKHByb2dyZXNzID09PSBTdGFja0FjdGl2aXR5UHJvZ3Jlc3MuQkFSKVxuICAgICAgPyBuZXcgQ3VycmVudEFjdGl2aXR5UHJpbnRlcihwcm9wcylcbiAgICAgIDogbmV3IEhpc3RvcnlBY3Rpdml0eVByaW50ZXIocHJvcHMpO1xuXG4gICAgcmV0dXJuIG5ldyBTdGFja0FjdGl2aXR5TW9uaXRvcihjZm4sIHN0YWNrTmFtZSwgcHJpbnRlciwgc3RhY2tBcnRpZmFjdCwgb3B0aW9ucy5jaGFuZ2VTZXRDcmVhdGlvblRpbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc291cmNlIGVycm9ycyBmb3VuZCB3aGlsZSBtb25pdG9yaW5nIHRoZSBkZXBsb3ltZW50XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXJyb3JzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICBwcml2YXRlIGFjdGl2ZSA9IGZhbHNlO1xuICBwcml2YXRlIGFjdGl2aXR5OiB7IFtldmVudElkOiBzdHJpbmddOiBTdGFja0FjdGl2aXR5IH0gPSB7IH07XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hpY2ggZXZlbnRzIG5vdCB0byBkaXNwbGF5XG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXJ0VGltZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDdXJyZW50IHRpY2sgdGltZXJcbiAgICovXG4gIHByaXZhdGUgdGlja1RpbWVyPzogTm9kZUpTLlRpbWVyO1xuXG4gIC8qKlxuICAgKiBTZXQgdG8gdGhlIGFjdGl2aXR5IG9mIHJlYWRpbmcgdGhlIGN1cnJlbnQgZXZlbnRzXG4gICAqL1xuICBwcml2YXRlIHJlYWRQcm9taXNlPzogUHJvbWlzZTxhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2ZuOiBhd3MuQ2xvdWRGb3JtYXRpb24sXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdGFja05hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByaW50ZXI6IElBY3Rpdml0eVByaW50ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdGFjaz86IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCxcbiAgICBjaGFuZ2VTZXRDcmVhdGlvblRpbWU/OiBEYXRlLFxuICApIHtcbiAgICB0aGlzLnN0YXJ0VGltZSA9IGNoYW5nZVNldENyZWF0aW9uVGltZT8uZ2V0VGltZSgpID8/IERhdGUubm93KCk7XG4gIH1cblxuICBwdWJsaWMgc3RhcnQoKSB7XG4gICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICAgIHRoaXMucHJpbnRlci5zdGFydCgpO1xuICAgIHRoaXMuc2NoZWR1bGVOZXh0VGljaygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHN0b3AoKSB7XG4gICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICBpZiAodGhpcy50aWNrVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpY2tUaW1lcik7XG4gICAgfVxuXG4gICAgLy8gRG8gYSBmaW5hbCBwb2xsIGZvciBhbGwgZXZlbnRzLiBUaGlzIGlzIHRvIGhhbmRsZSB0aGUgc2l0dWF0aW9uIHdoZXJlIERlc2NyaWJlU3RhY2tTdGF0dXNcbiAgICAvLyBhbHJlYWR5IHJldHVybmVkIGFuIGVycm9yLCBidXQgdGhlIG1vbml0b3IgaGFzbid0IHNlZW4gYWxsIHRoZSBldmVudHMgeWV0IGFuZCB3ZSdkIGVuZFxuICAgIC8vIHVwIG5vdCBwcmludGluZyB0aGUgZmFpbHVyZSByZWFzb24gdG8gdXNlcnMuXG4gICAgYXdhaXQgdGhpcy5maW5hbFBvbGxUb0VuZCgpO1xuXG4gICAgdGhpcy5wcmludGVyLnN0b3AoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2NoZWR1bGVOZXh0VGljaygpIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50aWNrVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHZvaWQodGhpcy50aWNrKCkpLCB0aGlzLnByaW50ZXIudXBkYXRlU2xlZXApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB0aWNrKCkge1xuICAgIGlmICghdGhpcy5hY3RpdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5yZWFkUHJvbWlzZSA9IHRoaXMucmVhZE5ld0V2ZW50cygpO1xuICAgICAgYXdhaXQgdGhpcy5yZWFkUHJvbWlzZTtcbiAgICAgIHRoaXMucmVhZFByb21pc2UgPSB1bmRlZmluZWQ7XG5cbiAgICAgIC8vIFdlIG1pZ2h0IGhhdmUgYmVlbiBzdG9wKClwZWQgd2hpbGUgdGhlIG5ldHdvcmsgY2FsbCB3YXMgaW4gcHJvZ3Jlc3MuXG4gICAgICBpZiAoIXRoaXMuYWN0aXZlKSB7IHJldHVybjsgfVxuXG4gICAgICB0aGlzLnByaW50ZXIucHJpbnQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvcignRXJyb3Igb2NjdXJyZWQgd2hpbGUgbW9uaXRvcmluZyBzdGFjazogJXMnLCBlKTtcbiAgICB9XG4gICAgdGhpcy5zY2hlZHVsZU5leHRUaWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRNZXRhZGF0YUZvcihsb2dpY2FsSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFJlc291cmNlTWV0YWRhdGEgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5zdGFjaz8ubWFuaWZlc3Q/Lm1ldGFkYXRhO1xuICAgIGlmICghbG9naWNhbElkIHx8ICFtZXRhZGF0YSkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gICAgZm9yIChjb25zdCBwYXRoIG9mIE9iamVjdC5rZXlzKG1ldGFkYXRhKSkge1xuICAgICAgY29uc3QgZW50cnkgPSBtZXRhZGF0YVtwYXRoXVxuICAgICAgICAuZmlsdGVyKGUgPT4gZS50eXBlID09PSBjeHNjaGVtYS5BcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLkxPR0lDQUxfSUQpXG4gICAgICAgIC5maW5kKGUgPT4gZS5kYXRhID09PSBsb2dpY2FsSWQpO1xuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZW50cnksXG4gICAgICAgICAgY29uc3RydWN0UGF0aDogdGhpcy5zaW1wbGlmeUNvbnN0cnVjdFBhdGgocGF0aCksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgYWxsIG5ldyBldmVudHMgZnJvbSB0aGUgc3RhY2sgaGlzdG9yeVxuICAgKlxuICAgKiBUaGUgZXZlbnRzIGFyZSByZXR1cm5lZCBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXI7IHdlIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHBhZ2UgaWYgd2VcbiAgICogc2VlIGEgbmV4dCBwYWdlIGFuZCB0aGUgbGFzdCBldmVudCBpbiB0aGUgcGFnZSBpcyBuZXcgdG8gdXMgKGFuZCB3aXRoaW4gdGhlIHRpbWUgd2luZG93KS5cbiAgICogaGF2ZW4ndCBzZWVuIHRoZSBmaW5hbCBldmVudFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZWFkTmV3RXZlbnRzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGV2ZW50czogU3RhY2tBY3Rpdml0eVtdID0gW107XG5cbiAgICB0cnkge1xuICAgICAgbGV0IG5leHRUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IGZpbmlzaGVkID0gZmFsc2U7XG4gICAgICB3aGlsZSAoIWZpbmlzaGVkKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jZm4uZGVzY3JpYmVTdGFja0V2ZW50cyh7IFN0YWNrTmFtZTogdGhpcy5zdGFja05hbWUsIE5leHRUb2tlbjogbmV4dFRva2VuIH0pLnByb21pc2UoKTtcbiAgICAgICAgY29uc3QgZXZlbnRQYWdlID0gcmVzcG9uc2U/LlN0YWNrRXZlbnRzID8/IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRQYWdlKSB7XG4gICAgICAgICAgLy8gRXZlbnQgZnJvbSBiZWZvcmUgd2Ugd2VyZSBpbnRlcmVzdGVkIGluICdlbVxuICAgICAgICAgIGlmIChldmVudC5UaW1lc3RhbXAudmFsdWVPZigpIDwgdGhpcy5zdGFydFRpbWUpIHtcbiAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEFscmVhZHkgc2VlbiB0aGlzIG9uZVxuICAgICAgICAgIGlmIChldmVudC5FdmVudElkIGluIHRoaXMuYWN0aXZpdHkpIHtcbiAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEZyZXNoIGV2ZW50XG4gICAgICAgICAgZXZlbnRzLnB1c2godGhpcy5hY3Rpdml0eVtldmVudC5FdmVudElkXSA9IHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB0aGlzLmZpbmRNZXRhZGF0YUZvcihldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSdyZSBhbHNvIGRvbmUgaWYgdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gcmVhZFxuICAgICAgICBuZXh0VG9rZW4gPSByZXNwb25zZT8uTmV4dFRva2VuO1xuICAgICAgICBpZiAobmV4dFRva2VuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5jb2RlID09PSAnVmFsaWRhdGlvbkVycm9yJyAmJiBlLm1lc3NhZ2UgPT09IGBTdGFjayBbJHt0aGlzLnN0YWNrTmFtZX1dIGRvZXMgbm90IGV4aXN0YCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIGV2ZW50cy5yZXZlcnNlKCk7XG4gICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgIHRoaXMuY2hlY2tGb3JFcnJvcnMoZXZlbnQpO1xuICAgICAgdGhpcy5wcmludGVyLmFkZEFjdGl2aXR5KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSBhIGZpbmFsIHBvbGwgdG8gdGhlIGVuZCBhbmQgZmx1c2ggb3V0IGFsbCBldmVudHMgdG8gdGhlIHByaW50ZXJcbiAgICpcbiAgICogRmluaXNoIGFueSBwb2xsIGN1cnJlbnRseSBpbiBwcm9ncmVzcywgdGhlbiBkbyBhIGZpbmFsIG9uZSB1bnRpbCB3ZSd2ZVxuICAgKiByZWFjaGVkIHRoZSBsYXN0IHBhZ2UuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZpbmFsUG9sbFRvRW5kKCkge1xuICAgIC8vIElmIHdlIHdlcmUgZG9pbmcgYSBwb2xsLCBmaW5pc2ggdGhhdCBmaXJzdC4gSXQgd2FzIHN0YXJ0ZWQgYmVmb3JlXG4gICAgLy8gdGhlIG1vbWVudCB3ZSB3ZXJlIHN1cmUgd2Ugd2VyZW4ndCBnb2luZyB0byBnZXQgYW55IG5ldyBldmVudHMgYW55bW9yZVxuICAgIC8vIHNvIHdlIG5lZWQgdG8gZG8gYSBuZXcgb25lIGFueXdheS4gTmVlZCB0byB3YWl0IGZvciB0aGlzIG9uZSB0aG91Z2hcbiAgICAvLyBiZWNhdXNlIG91ciBzdGF0ZSBpcyBzaW5nbGUtdGhyZWFkZWQuXG4gICAgaWYgKHRoaXMucmVhZFByb21pc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMucmVhZFByb21pc2U7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5yZWFkTmV3RXZlbnRzKCk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrRm9yRXJyb3JzKGFjdGl2aXR5OiBTdGFja0FjdGl2aXR5KSB7XG4gICAgaWYgKGhhc0Vycm9yTWVzc2FnZShhY3Rpdml0eS5ldmVudC5SZXNvdXJjZVN0YXR1cyA/PyAnJykpIHtcbiAgICAgIGNvbnN0IGlzQ2FuY2VsbGVkID0gKGFjdGl2aXR5LmV2ZW50LlJlc291cmNlU3RhdHVzUmVhc29uID8/ICcnKS5pbmRleE9mKCdjYW5jZWxsZWQnKSA+IC0xO1xuXG4gICAgICAvLyBDYW5jZWxsZWQgaXMgbm90IGFuIGludGVyZXN0aW5nIGZhaWx1cmUgcmVhc29uLCBub3IgaXMgdGhlIHN0YWNrIG1lc3NhZ2UgKHN0YWNrXG4gICAgICAvLyBtZXNzYWdlIHdpbGwganVzdCBzYXkgc29tZXRoaW5nIGxpa2UgXCJzdGFjayBmYWlsZWQgdG8gdXBkYXRlXCIpXG4gICAgICBpZiAoIWlzQ2FuY2VsbGVkICYmIGFjdGl2aXR5LmV2ZW50LlN0YWNrTmFtZSAhPT0gYWN0aXZpdHkuZXZlbnQuTG9naWNhbFJlc291cmNlSWQpIHtcbiAgICAgICAgdGhpcy5lcnJvcnMucHVzaChhY3Rpdml0eS5ldmVudC5SZXNvdXJjZVN0YXR1c1JlYXNvbiA/PyAnJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaW1wbGlmeUNvbnN0cnVjdFBhdGgocGF0aDogc3RyaW5nKSB7XG4gICAgcGF0aCA9IHBhdGgucmVwbGFjZSgvXFwvUmVzb3VyY2UkLywgJycpO1xuICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC8vLCAnJyk7IC8vIHJlbW92ZSBcIi9cIiBwcmVmaXhcblxuICAgIC8vIHJlbW92ZSBcIjxzdGFjay1uYW1lPi9cIiBwcmVmaXhcbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKHRoaXMuc3RhY2tOYW1lICsgJy8nKSkge1xuICAgICAgcGF0aCA9IHBhdGguc2xpY2UodGhpcy5zdGFja05hbWUubGVuZ3RoICsgMSk7XG4gICAgfVxuICAgIHJldHVybiBwYXRoO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhZFJpZ2h0KG46IG51bWJlciwgeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHggKyAnICcucmVwZWF0KE1hdGgubWF4KDAsIG4gLSB4Lmxlbmd0aCkpO1xufVxuXG4vKipcbiAqIEluZmFtb3VzIHBhZExlZnQoKVxuICovXG5mdW5jdGlvbiBwYWRMZWZ0KG46IG51bWJlciwgeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuICcgJy5yZXBlYXQoTWF0aC5tYXgoMCwgbiAtIHgubGVuZ3RoKSkgKyB4O1xufVxuXG5mdW5jdGlvbiBjYWxjTWF4UmVzb3VyY2VUeXBlTGVuZ3RoKHRlbXBsYXRlOiBhbnkpIHtcbiAgY29uc3QgcmVzb3VyY2VzID0gKHRlbXBsYXRlICYmIHRlbXBsYXRlLlJlc291cmNlcykgfHwge307XG4gIGxldCBtYXhXaWR0aCA9IDA7XG4gIGZvciAoY29uc3QgaWQgb2YgT2JqZWN0LmtleXMocmVzb3VyY2VzKSkge1xuICAgIGNvbnN0IHR5cGUgPSByZXNvdXJjZXNbaWRdLlR5cGUgfHwgJyc7XG4gICAgaWYgKHR5cGUubGVuZ3RoID4gbWF4V2lkdGgpIHtcbiAgICAgIG1heFdpZHRoID0gdHlwZS5sZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXhXaWR0aDtcbn1cblxuaW50ZXJmYWNlIFByaW50ZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUb3RhbCByZXNvdXJjZXMgdG8gZGVwbG95XG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZXNUb3RhbD86IG51bWJlclxuXG4gIC8qKlxuICAgKiBUaGUgd2l0aCBvZiB0aGUgXCJyZXNvdXJjZSB0eXBlXCIgY29sdW1uLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VUeXBlQ29sdW1uV2lkdGg6IG51bWJlcjtcblxuICAvKipcbiAgICogU3RyZWFtIHRvIHdyaXRlIHRvXG4gICAqL1xuICByZWFkb25seSBzdHJlYW06IE5vZGVKUy5Xcml0ZVN0cmVhbTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQWN0aXZpdHlQcmludGVyIHtcbiAgcmVhZG9ubHkgdXBkYXRlU2xlZXA6IG51bWJlcjtcblxuICBhZGRBY3Rpdml0eShhY3Rpdml0eTogU3RhY2tBY3Rpdml0eSk6IHZvaWQ7XG4gIHByaW50KCk6IHZvaWQ7XG4gIHN0YXJ0KCk6IHZvaWQ7XG4gIHN0b3AoKTogdm9pZDtcbn1cblxuYWJzdHJhY3QgY2xhc3MgQWN0aXZpdHlQcmludGVyQmFzZSBpbXBsZW1lbnRzIElBY3Rpdml0eVByaW50ZXIge1xuICAvKipcbiAgICogRmV0Y2ggbmV3IGFjdGl2aXR5IGV2ZXJ5IDUgc2Vjb25kc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZVNsZWVwOiBudW1iZXIgPSA1XzAwMDtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIHJlc291cmNlIElEcyB3aGljaCBhcmUgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc291cmNlc0luUHJvZ3Jlc3M6IFJlY29yZDxzdHJpbmcsIFN0YWNrQWN0aXZpdHk+ID0ge307XG5cbiAgLyoqXG4gICAqIFByZXZpb3VzIGNvbXBsZXRpb24gc3RhdGUgb2JzZXJ2ZWQgYnkgbG9naWNhbCBJRFxuICAgKlxuICAgKiBXZSB1c2UgdGhpcyB0byBkZXRlY3QgdGhhdCBpZiB3ZSBzZWUgYSBERUxFVEVfQ09NUExFVEUgYWZ0ZXIgYVxuICAgKiBDUkVBVEVfQ09NUExFVEUsIGl0J3MgYWN0dWFsbHkgYSByb2xsYmFjayBhbmQgd2Ugc2hvdWxkIERFQ1JFQVNFXG4gICAqIHJlc291cmNlc0RvbmUgaW5zdGVhZCBvZiBpbmNyZWFzZSBpdFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc291cmNlc1ByZXZDb21wbGV0ZVN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgLyoqXG4gICAqIENvdW50IG9mIHJlc291cmNlcyB0aGF0IGhhdmUgcmVwb3J0ZWQgYSBfQ09NUExFVEUgc3RhdHVzXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb3VyY2VzRG9uZTogbnVtYmVyID0gMDtcblxuICAvKipcbiAgICogSG93IG1hbnkgZGlnaXRzIHdlIG5lZWQgdG8gcmVwcmVzZW50IHRoZSB0b3RhbCBjb3VudCAoZm9yIGxpbmluZyB1cCB0aGUgc3RhdHVzIHJlcG9ydGluZylcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSByZXNvdXJjZURpZ2l0czogbnVtYmVyID0gMDtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVzb3VyY2VzVG90YWw/OiBudW1iZXI7XG5cbiAgcHJvdGVjdGVkIHJvbGxpbmdCYWNrID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhaWx1cmVzID0gbmV3IEFycmF5PFN0YWNrQWN0aXZpdHk+KCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0cmVhbTogTm9kZUpTLldyaXRlU3RyZWFtO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBwcm9wczogUHJpbnRlclByb3BzKSB7XG4gICAgLy8gKzEgYmVjYXVzZSB0aGUgc3RhY2sgYWxzbyBlbWl0cyBhIFwiQ09NUExFVEVcIiBldmVudCBhdCB0aGUgZW5kLCBhbmQgdGhhdCB3YXNuJ3RcbiAgICAvLyBjb3VudGVkIHlldC4gVGhpcyBtYWtlcyBpdCBsaW5lIHVwIHdpdGggdGhlIGFtb3VudCBvZiBldmVudHMgd2UgZXhwZWN0LlxuICAgIHRoaXMucmVzb3VyY2VzVG90YWwgPSBwcm9wcy5yZXNvdXJjZXNUb3RhbCA/IHByb3BzLnJlc291cmNlc1RvdGFsICsgMSA6IHVuZGVmaW5lZDtcblxuICAgIC8vIEhvdyBtYW55IGRpZ2l0cyBkb2VzIHRoaXMgbnVtYmVyIHRha2UgdG8gcmVwcmVzZW50P1xuICAgIHRoaXMucmVzb3VyY2VEaWdpdHMgPSB0aGlzLnJlc291cmNlc1RvdGFsID8gTWF0aC5jZWlsKE1hdGgubG9nMTAodGhpcy5yZXNvdXJjZXNUb3RhbCkpIDogMDtcblxuICAgIHRoaXMuc3RyZWFtID0gcHJvcHMuc3RyZWFtO1xuICB9XG5cbiAgcHVibGljIGFkZEFjdGl2aXR5KGFjdGl2aXR5OiBTdGFja0FjdGl2aXR5KSB7XG4gICAgY29uc3Qgc3RhdHVzID0gYWN0aXZpdHkuZXZlbnQuUmVzb3VyY2VTdGF0dXM7XG4gICAgaWYgKCFzdGF0dXMgfHwgIWFjdGl2aXR5LmV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkKSB7IHJldHVybjsgfVxuXG4gICAgaWYgKHN0YXR1cyA9PT0gJ1JPTExCQUNLX0lOX1BST0dSRVNTJyB8fCBzdGF0dXMgPT09ICdVUERBVEVfUk9MTEJBQ0tfSU5fUFJPR1JFU1MnKSB7XG4gICAgICAvLyBPbmx5IHRyaWdnZXJlZCBvbiB0aGUgc3RhY2sgb25jZSB3ZSd2ZSBzdGFydGVkIGRvaW5nIGEgcm9sbGJhY2tcbiAgICAgIHRoaXMucm9sbGluZ0JhY2sgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0dXMuZW5kc1dpdGgoJ19JTl9QUk9HUkVTUycpKSB7XG4gICAgICB0aGlzLnJlc291cmNlc0luUHJvZ3Jlc3NbYWN0aXZpdHkuZXZlbnQuTG9naWNhbFJlc291cmNlSWRdID0gYWN0aXZpdHk7XG4gICAgfVxuXG4gICAgaWYgKGhhc0Vycm9yTWVzc2FnZShzdGF0dXMpKSB7XG4gICAgICBjb25zdCBpc0NhbmNlbGxlZCA9IChhY3Rpdml0eS5ldmVudC5SZXNvdXJjZVN0YXR1c1JlYXNvbiA/PyAnJykuaW5kZXhPZignY2FuY2VsbGVkJykgPiAtMTtcblxuICAgICAgLy8gQ2FuY2VsbGVkIGlzIG5vdCBhbiBpbnRlcmVzdGluZyBmYWlsdXJlIHJlYXNvblxuICAgICAgaWYgKCFpc0NhbmNlbGxlZCkge1xuICAgICAgICB0aGlzLmZhaWx1cmVzLnB1c2goYWN0aXZpdHkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0dXMuZW5kc1dpdGgoJ19DT01QTEVURScpIHx8IHN0YXR1cy5lbmRzV2l0aCgnX0ZBSUxFRCcpKSB7XG4gICAgICBkZWxldGUgdGhpcy5yZXNvdXJjZXNJblByb2dyZXNzW2FjdGl2aXR5LmV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkXTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzLmVuZHNXaXRoKCdfQ09NUExFVEVfQ0xFQU5VUF9JTl9QUk9HUkVTUycpKSB7XG4gICAgICB0aGlzLnJlc291cmNlc0RvbmUrKztcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzLmVuZHNXaXRoKCdfQ09NUExFVEUnKSkge1xuICAgICAgY29uc3QgcHJldlN0YXRlID0gdGhpcy5yZXNvdXJjZXNQcmV2Q29tcGxldGVTdGF0ZVthY3Rpdml0eS5ldmVudC5Mb2dpY2FsUmVzb3VyY2VJZF07XG4gICAgICBpZiAoIXByZXZTdGF0ZSkge1xuICAgICAgICB0aGlzLnJlc291cmNlc0RvbmUrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIHdlIGNvbXBsZXRlZCB0aGlzIGJlZm9yZSBhbmQgd2UncmUgY29tcGxldGluZyBpdCBBR0FJTiwgbWVhbnMgd2UncmUgcm9sbGluZyBiYWNrLlxuICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3Qgc2lsbHkgdW5kZXJmbG93LlxuICAgICAgICB0aGlzLnJlc291cmNlc0RvbmUtLTtcbiAgICAgICAgaWYgKHRoaXMucmVzb3VyY2VzRG9uZSA8IDApIHtcbiAgICAgICAgICB0aGlzLnJlc291cmNlc0RvbmUgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnJlc291cmNlc1ByZXZDb21wbGV0ZVN0YXRlW2FjdGl2aXR5LmV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkXSA9IHN0YXR1cztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWJzdHJhY3QgcHJpbnQoKTogdm9pZDtcblxuICBwdWJsaWMgc3RhcnQoKSB7XG4gICAgLy8gRW1wdHkgb24gcHVycG9zZVxuICB9XG5cbiAgcHVibGljIHN0b3AoKSB7XG4gICAgLy8gRW1wdHkgb24gcHVycG9zZVxuICB9XG59XG5cbi8qKlxuICogQWN0aXZpdHkgUHJpbnRlciB3aGljaCBzaG93cyBhIGZ1bGwgbG9nIG9mIGFsbCBDbG91ZEZvcm1hdGlvbiBldmVudHNcbiAqXG4gKiBXaGVuIHRoZXJlIGhhc24ndCBiZWVuIGFjdGl2aXR5IGZvciBhIHdoaWxlLCBpdCB3aWxsIHByaW50IHRoZSByZXNvdXJjZXNcbiAqIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBwcm9ncmVzcywgdG8gc2hvdyB3aGF0J3MgaG9sZGluZyB1cCB0aGUgZGVwbG95bWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIEhpc3RvcnlBY3Rpdml0eVByaW50ZXIgZXh0ZW5kcyBBY3Rpdml0eVByaW50ZXJCYXNlIHtcbiAgLyoqXG4gICAqIExhc3QgdGltZSB3ZSBwcmludGVkIHNvbWV0aGluZyB0byB0aGUgY29uc29sZS5cbiAgICpcbiAgICogVXNlZCB0byBtZWFzdXJlIHRpbWVvdXQgZm9yIHByb2dyZXNzIHJlcG9ydGluZy5cbiAgICovXG4gIHByaXZhdGUgbGFzdFByaW50VGltZSA9IERhdGUubm93KCk7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBtcyBvZiBjaGFuZ2UgYWJzZW5jZSBiZWZvcmUgd2UgdGVsbCB0aGUgdXNlciBhYm91dCB0aGUgcmVzb3VyY2VzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBwcm9ncmVzcy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5Qcm9ncmVzc0RlbGF5ID0gMzBfMDAwO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJpbnRhYmxlID0gbmV3IEFycmF5PFN0YWNrQWN0aXZpdHk+KCk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFByaW50ZXJQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRBY3Rpdml0eShhY3Rpdml0eTogU3RhY2tBY3Rpdml0eSkge1xuICAgIHN1cGVyLmFkZEFjdGl2aXR5KGFjdGl2aXR5KTtcbiAgICB0aGlzLnByaW50YWJsZS5wdXNoKGFjdGl2aXR5KTtcbiAgICB0aGlzLnByaW50KCk7XG4gIH1cblxuICBwdWJsaWMgcHJpbnQoKSB7XG4gICAgZm9yIChjb25zdCBhY3Rpdml0eSBvZiB0aGlzLnByaW50YWJsZSkge1xuICAgICAgdGhpcy5wcmludE9uZShhY3Rpdml0eSk7XG4gICAgfVxuICAgIHRoaXMucHJpbnRhYmxlLnNwbGljZSgwLCB0aGlzLnByaW50YWJsZS5sZW5ndGgpO1xuICAgIHRoaXMucHJpbnRJblByb2dyZXNzKCk7XG4gIH1cblxuICBwdWJsaWMgc3RvcCgpIHtcbiAgICAvLyBQcmludCBmYWlsdXJlcyBhdCB0aGUgZW5kXG4gICAgaWYgKHRoaXMuZmFpbHVyZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoJ1xcbkZhaWxlZCByZXNvdXJjZXM6XFxuJyk7XG4gICAgICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgdGhpcy5mYWlsdXJlcykge1xuICAgICAgICAvLyBSb290IHN0YWNrIGZhaWx1cmVzIGFyZSBub3QgaW50ZXJlc3RpbmdcbiAgICAgICAgaWYgKGZhaWx1cmUuZXZlbnQuU3RhY2tOYW1lID09PSBmYWlsdXJlLmV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByaW50T25lKGZhaWx1cmUsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByaW50T25lKGFjdGl2aXR5OiBTdGFja0FjdGl2aXR5LCBwcm9ncmVzcz86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBlID0gYWN0aXZpdHkuZXZlbnQ7XG4gICAgY29uc3QgY29sb3IgPSBjb2xvckZyb21TdGF0dXNSZXN1bHQoZS5SZXNvdXJjZVN0YXR1cyk7XG4gICAgbGV0IHJlYXNvbkNvbG9yID0gY2hhbGsuY3lhbjtcblxuICAgIGxldCBzdGFja1RyYWNlID0gJyc7XG4gICAgY29uc3QgbWQgPSBhY3Rpdml0eS5tZXRhZGF0YTtcbiAgICBpZiAobWQgJiYgZS5SZXNvdXJjZVN0YXR1cyAmJiBlLlJlc291cmNlU3RhdHVzLmluZGV4T2YoJ0ZBSUxFRCcpICE9PSAtMSkge1xuICAgICAgc3RhY2tUcmFjZSA9IG1kLmVudHJ5LnRyYWNlID8gYFxcblxcdCR7bWQuZW50cnkudHJhY2Uuam9pbignXFxuXFx0XFxcXF8gJyl9YCA6ICcnO1xuICAgICAgcmVhc29uQ29sb3IgPSBjaGFsay5yZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2VOYW1lID0gbWQgPyBtZC5jb25zdHJ1Y3RQYXRoIDogKGUuTG9naWNhbFJlc291cmNlSWQgfHwgJycpO1xuXG4gICAgY29uc3QgbG9naWNhbElkID0gcmVzb3VyY2VOYW1lICE9PSBlLkxvZ2ljYWxSZXNvdXJjZUlkID8gYCgke2UuTG9naWNhbFJlc291cmNlSWR9KSBgIDogJyc7XG5cbiAgICB0aGlzLnN0cmVhbS53cml0ZShcbiAgICAgIHV0aWwuZm9ybWF0KFxuICAgICAgICAnJXMgfCAlcyVzIHwgJXMgfCAlcyB8ICVzICVzJXMlc1xcbicsXG4gICAgICAgIGUuU3RhY2tOYW1lLFxuICAgICAgICAocHJvZ3Jlc3MgIT09IGZhbHNlID8gYCR7dGhpcy5wcm9ncmVzcygpfSB8IGAgOiAnJyksXG4gICAgICAgIG5ldyBEYXRlKGUuVGltZXN0YW1wKS50b0xvY2FsZVRpbWVTdHJpbmcoKSxcbiAgICAgICAgY29sb3IocGFkUmlnaHQoU1RBVFVTX1dJRFRILCAoZS5SZXNvdXJjZVN0YXR1cyB8fCAnJykuc2xpY2UoMCwgU1RBVFVTX1dJRFRIKSkpLCAvLyBwYWQgbGVmdCBhbmQgdHJpbVxuICAgICAgICBwYWRSaWdodCh0aGlzLnByb3BzLnJlc291cmNlVHlwZUNvbHVtbldpZHRoLCBlLlJlc291cmNlVHlwZSB8fCAnJyksXG4gICAgICAgIGNvbG9yKGNoYWxrLmJvbGQocmVzb3VyY2VOYW1lKSksXG4gICAgICAgIGxvZ2ljYWxJZCxcbiAgICAgICAgcmVhc29uQ29sb3IoY2hhbGsuYm9sZChlLlJlc291cmNlU3RhdHVzUmVhc29uID8gZS5SZXNvdXJjZVN0YXR1c1JlYXNvbiA6ICcnKSksXG4gICAgICAgIHJlYXNvbkNvbG9yKHN0YWNrVHJhY2UpLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgdGhpcy5sYXN0UHJpbnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBvcnQgdGhlIGN1cnJlbnQgcHJvZ3Jlc3MgYXMgYSBbMzQvNDJdIHN0cmluZywgb3IganVzdCBbMzRdIGlmIHRoZSB0b3RhbCBpcyB1bmtub3duXG4gICAqL1xuICBwcml2YXRlIHByb2dyZXNzKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMucmVzb3VyY2VzVG90YWwgPT0gbnVsbCkge1xuICAgICAgLy8gRG9uJ3QgaGF2ZSB0b3RhbCwgc2hvdyBzaW1wbGUgY291bnQgYW5kIGhvcGUgdGhlIGh1bWFuIGtub3dzXG4gICAgICByZXR1cm4gcGFkTGVmdCgzLCB1dGlsLmZvcm1hdCgnJXMnLCB0aGlzLnJlc291cmNlc0RvbmUpKTsgLy8gbWF4IDUwMCByZXNvdXJjZXNcbiAgICB9XG5cbiAgICByZXR1cm4gdXRpbC5mb3JtYXQoJyVzLyVzJyxcbiAgICAgIHBhZExlZnQodGhpcy5yZXNvdXJjZURpZ2l0cywgdGhpcy5yZXNvdXJjZXNEb25lLnRvU3RyaW5nKCkpLFxuICAgICAgcGFkTGVmdCh0aGlzLnJlc291cmNlRGlnaXRzLCB0aGlzLnJlc291cmNlc1RvdGFsICE9IG51bGwgPyB0aGlzLnJlc291cmNlc1RvdGFsLnRvU3RyaW5nKCkgOiAnPycpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBzb21lIHJlc291cmNlcyBhcmUgdGFraW5nIGEgd2hpbGUgdG8gY3JlYXRlLCBub3RpZnkgdGhlIHVzZXIgYWJvdXQgd2hhdCdzIGN1cnJlbnRseSBpbiBwcm9ncmVzc1xuICAgKi9cbiAgcHJpdmF0ZSBwcmludEluUHJvZ3Jlc3MoKSB7XG4gICAgaWYgKERhdGUubm93KCkgPCB0aGlzLmxhc3RQcmludFRpbWUgKyB0aGlzLmluUHJvZ3Jlc3NEZWxheSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnJlc291cmNlc0luUHJvZ3Jlc3MpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc3RyZWFtLndyaXRlKHV0aWwuZm9ybWF0KCclcyBDdXJyZW50bHkgaW4gcHJvZ3Jlc3M6ICVzXFxuJyxcbiAgICAgICAgdGhpcy5wcm9ncmVzcygpLFxuICAgICAgICBjaGFsay5ib2xkKE9iamVjdC5rZXlzKHRoaXMucmVzb3VyY2VzSW5Qcm9ncmVzcykuam9pbignLCAnKSkpKTtcbiAgICB9XG5cbiAgICAvLyBXZSBjaGVhdCBhIGJpdCBoZXJlLiBUbyBwcmV2ZW50IHByaW50SW5Qcm9ncmVzcygpIGZyb20gcmVwZWF0ZWRseSB0cmlnZ2VyaW5nLFxuICAgIC8vIHdlIHNldCB0aGUgdGltZXN0YW1wIGludG8gdGhlIGZ1dHVyZS4gSXQgd2lsbCBiZSByZXNldCB3aGVuZXZlciBhIHJlZ3VsYXIgcHJpbnRcbiAgICAvLyBvY2N1cnMsIGFmdGVyIHdoaWNoIHdlIGNhbiBiZSB0cmlnZ2VyZWQgYWdhaW4uXG4gICAgdGhpcy5sYXN0UHJpbnRUaW1lID0gK0luZmluaXR5O1xuICB9XG5cbn1cblxuLyoqXG4gKiBBY3Rpdml0eSBQcmludGVyIHdoaWNoIHNob3dzIHRoZSByZXNvdXJjZXMgY3VycmVudGx5IGJlaW5nIHVwZGF0ZWRcbiAqXG4gKiBJdCB3aWxsIGNvbnRpbnVvdXNseSByZXVwZGF0ZSB0aGUgdGVybWluYWwgYW5kIHNob3cgb25seSB0aGUgcmVzb3VyY2VzXG4gKiB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgdXBkYXRlZCwgaW4gYWRkaXRpb24gdG8gYSBwcm9ncmVzcyBiYXIgd2hpY2hcbiAqIHNob3dzIGhvdyBmYXIgYWxvbmcgdGhlIGRlcGxveW1lbnQgaXMuXG4gKlxuICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBmYWlsZWQgd2lsbCBhbHdheXMgYmUgc2hvd24sIGFuZCB3aWxsIGJlIHJlY2FwaXR1bGF0ZWRcbiAqIGFsb25nIHdpdGggdGhlaXIgc3RhY2sgdHJhY2Ugd2hlbiB0aGUgbW9uaXRvcmluZyBlbmRzLlxuICpcbiAqIFJlc291cmNlcyB0aGF0IGZhaWxlZCBkZXBsb3ltZW50IGJlY2F1c2UgdGhleSBoYXZlIGJlZW4gY2FuY2VsbGVkIGFyZVxuICogbm90IGluY2x1ZGVkLlxuICovXG5leHBvcnQgY2xhc3MgQ3VycmVudEFjdGl2aXR5UHJpbnRlciBleHRlbmRzIEFjdGl2aXR5UHJpbnRlckJhc2Uge1xuICAvKipcbiAgICogVGhpcyBsb29rcyB2ZXJ5IGRpc29yaWVudGluZyBzbGVlcGluZyBmb3IgNSBzZWNvbmRzLiBVcGRhdGUgcXVpY2tlci5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1cGRhdGVTbGVlcDogbnVtYmVyID0gMl8wMDA7XG5cbiAgcHJpdmF0ZSBvbGRMb2dMZXZlbDogTG9nTGV2ZWwgPSBMb2dMZXZlbC5ERUZBVUxUO1xuICBwcml2YXRlIGJsb2NrID0gbmV3IFJld3JpdGFibGVCbG9jayh0aGlzLnN0cmVhbSk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFByaW50ZXJQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIHB1YmxpYyBwcmludCgpOiB2b2lkIHtcbiAgICBjb25zdCBsaW5lcyA9IFtdO1xuXG4gICAgLy8gQWRkIGEgcHJvZ3Jlc3MgYmFyIGF0IHRoZSB0b3BcbiAgICBjb25zdCBwcm9ncmVzc1dpZHRoID0gTWF0aC5tYXgoTWF0aC5taW4oKHRoaXMuYmxvY2sud2lkdGggPz8gODApIC0gUFJPR1JFU1NCQVJfRVhUUkFfU1BBQ0UgLSAxLCBNQVhfUFJPR1JFU1NCQVJfV0lEVEgpLCBNSU5fUFJPR1JFU1NCQVJfV0lEVEgpO1xuICAgIGNvbnN0IHByb2cgPSB0aGlzLnByb2dyZXNzQmFyKHByb2dyZXNzV2lkdGgpO1xuICAgIGlmIChwcm9nKSB7XG4gICAgICBsaW5lcy5wdXNoKCcgICcgKyBwcm9nLCAnJyk7XG4gICAgfVxuXG4gICAgLy8gTm9ybWFsbHkgd2UnZCBvbmx5IHByaW50IFwicmVzb3VyY2VzIGluIHByb2dyZXNzXCIsIGJ1dCBpdCdzIGFsc28gdXNlZnVsXG4gICAgLy8gdG8ga2VlcCBhbiBleWUgb24gdGhlIGZhaWx1cmVzIGFuZCBrbm93IGFib3V0IHRoZSBzcGVjaWZpYyBlcnJvcnMgYXNxdWlja2x5XG4gICAgLy8gYXMgcG9zc2libGUgKHdoaWxlIHRoZSBzdGFjayBpcyBzdGlsbCByb2xsaW5nIGJhY2spLCBzbyBhZGQgdGhvc2UgaW4uXG4gICAgY29uc3QgdG9QcmludDogU3RhY2tBY3Rpdml0eVtdID0gWy4uLnRoaXMuZmFpbHVyZXMsIC4uLk9iamVjdC52YWx1ZXModGhpcy5yZXNvdXJjZXNJblByb2dyZXNzKV07XG4gICAgdG9QcmludC5zb3J0KChhLCBiKSA9PiBhLmV2ZW50LlRpbWVzdGFtcC5nZXRUaW1lKCkgLSBiLmV2ZW50LlRpbWVzdGFtcC5nZXRUaW1lKCkpO1xuXG4gICAgbGluZXMucHVzaCguLi50b1ByaW50Lm1hcChyZXMgPT4ge1xuICAgICAgY29uc3QgY29sb3IgPSBjb2xvckZyb21TdGF0dXNBY3Rpdml0eShyZXMuZXZlbnQuUmVzb3VyY2VTdGF0dXMpO1xuICAgICAgY29uc3QgcmVzb3VyY2VOYW1lID0gcmVzLm1ldGFkYXRhPy5jb25zdHJ1Y3RQYXRoID8/IHJlcy5ldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCA/PyAnJztcblxuICAgICAgcmV0dXJuIHV0aWwuZm9ybWF0KCclcyB8ICVzIHwgJXMgfCAlcyVzJyxcbiAgICAgICAgcGFkTGVmdChUSU1FU1RBTVBfV0lEVEgsIG5ldyBEYXRlKHJlcy5ldmVudC5UaW1lc3RhbXApLnRvTG9jYWxlVGltZVN0cmluZygpKSxcbiAgICAgICAgY29sb3IocGFkUmlnaHQoU1RBVFVTX1dJRFRILCAocmVzLmV2ZW50LlJlc291cmNlU3RhdHVzIHx8ICcnKS5zbGljZSgwLCBTVEFUVVNfV0lEVEgpKSksXG4gICAgICAgIHBhZFJpZ2h0KHRoaXMucHJvcHMucmVzb3VyY2VUeXBlQ29sdW1uV2lkdGgsIHJlcy5ldmVudC5SZXNvdXJjZVR5cGUgfHwgJycpLFxuICAgICAgICBjb2xvcihjaGFsay5ib2xkKHNob3J0ZW4oNDAsIHJlc291cmNlTmFtZSkpKSxcbiAgICAgICAgdGhpcy5mYWlsdXJlUmVhc29uT25OZXh0TGluZShyZXMpKTtcbiAgICB9KSk7XG5cbiAgICB0aGlzLmJsb2NrLmRpc3BsYXlMaW5lcyhsaW5lcyk7XG4gIH1cblxuICBwdWJsaWMgc3RhcnQoKSB7XG4gICAgLy8gTmVlZCB0byBwcmV2ZW50IHRoZSB3YWl0ZXIgZnJvbSBwcmludGluZyAnc3RhY2sgbm90IHN0YWJsZScgZXZlcnkgNSBzZWNvbmRzLCBpdCBtZXNzZXNcbiAgICAvLyB3aXRoIHRoZSBvdXRwdXQgY2FsY3VsYXRpb25zLlxuICAgIHRoaXMub2xkTG9nTGV2ZWwgPSBsb2dMZXZlbDtcbiAgICBzZXRMb2dMZXZlbChMb2dMZXZlbC5ERUZBVUxUKTtcbiAgfVxuXG4gIHB1YmxpYyBzdG9wKCkge1xuICAgIHNldExvZ0xldmVsKHRoaXMub2xkTG9nTGV2ZWwpO1xuXG4gICAgLy8gUHJpbnQgZmFpbHVyZXMgYXQgdGhlIGVuZFxuICAgIGNvbnN0IGxpbmVzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgdGhpcy5mYWlsdXJlcykge1xuICAgICAgLy8gUm9vdCBzdGFjayBmYWlsdXJlcyBhcmUgbm90IGludGVyZXN0aW5nXG4gICAgICBpZiAoZmFpbHVyZS5ldmVudC5TdGFja05hbWUgPT09IGZhaWx1cmUuZXZlbnQuTG9naWNhbFJlc291cmNlSWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxpbmVzLnB1c2godXRpbC5mb3JtYXQoY2hhbGsucmVkKCclcyB8ICVzIHwgJXMgfCAlcyVzJykgKyAnXFxuJyxcbiAgICAgICAgcGFkTGVmdChUSU1FU1RBTVBfV0lEVEgsIG5ldyBEYXRlKGZhaWx1cmUuZXZlbnQuVGltZXN0YW1wKS50b0xvY2FsZVRpbWVTdHJpbmcoKSksXG4gICAgICAgIHBhZFJpZ2h0KFNUQVRVU19XSURUSCwgKGZhaWx1cmUuZXZlbnQuUmVzb3VyY2VTdGF0dXMgfHwgJycpLnNsaWNlKDAsIFNUQVRVU19XSURUSCkpLFxuICAgICAgICBwYWRSaWdodCh0aGlzLnByb3BzLnJlc291cmNlVHlwZUNvbHVtbldpZHRoLCBmYWlsdXJlLmV2ZW50LlJlc291cmNlVHlwZSB8fCAnJyksXG4gICAgICAgIHNob3J0ZW4oNDAsIGZhaWx1cmUuZXZlbnQuTG9naWNhbFJlc291cmNlSWQgPz8gJycpLFxuICAgICAgICB0aGlzLmZhaWx1cmVSZWFzb25Pbk5leHRMaW5lKGZhaWx1cmUpKSk7XG5cbiAgICAgIGNvbnN0IHRyYWNlID0gZmFpbHVyZS5tZXRhZGF0YT8uZW50cnk/LnRyYWNlO1xuICAgICAgaWYgKHRyYWNlKSB7XG4gICAgICAgIGxpbmVzLnB1c2goY2hhbGsucmVkKGBcXHQke3RyYWNlLmpvaW4oJ1xcblxcdFxcXFxfICcpfVxcbmApKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEaXNwbGF5IGluIHRoZSBzYW1lIGJsb2NrIHNwYWNlLCBvdGhlcndpc2Ugd2UncmUgZ29pbmcgdG8gaGF2ZSBzaWxseSBlbXB0eSBsaW5lcy5cbiAgICB0aGlzLmJsb2NrLmRpc3BsYXlMaW5lcyhsaW5lcyk7XG4gICAgdGhpcy5ibG9jay5yZW1vdmVFbXB0eUxpbmVzKCk7XG4gIH1cblxuICBwcml2YXRlIHByb2dyZXNzQmFyKHdpZHRoOiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMucmVzb3VyY2VzVG90YWwpIHsgcmV0dXJuICcnOyB9XG4gICAgY29uc3QgZnJhY3Rpb24gPSBNYXRoLm1pbih0aGlzLnJlc291cmNlc0RvbmUgLyB0aGlzLnJlc291cmNlc1RvdGFsLCAxKTtcbiAgICBjb25zdCBpbm5lcldpZHRoID0gTWF0aC5tYXgoMSwgd2lkdGggLSAyKTtcbiAgICBjb25zdCBjaGFycyA9IGlubmVyV2lkdGggKiBmcmFjdGlvbjtcbiAgICBjb25zdCByZW1haW5kZXIgPSBjaGFycyAtIE1hdGguZmxvb3IoY2hhcnMpO1xuXG4gICAgY29uc3QgZnVsbENoYXJzID0gRlVMTF9CTE9DSy5yZXBlYXQoTWF0aC5mbG9vcihjaGFycykpO1xuICAgIGNvbnN0IHBhcnRpYWxDaGFyID0gUEFSVElBTF9CTE9DS1tNYXRoLmZsb29yKHJlbWFpbmRlciAqIFBBUlRJQUxfQkxPQ0subGVuZ3RoKV07XG4gICAgY29uc3QgZmlsbGVyID0gJ8K3Jy5yZXBlYXQoaW5uZXJXaWR0aCAtIE1hdGguZmxvb3IoY2hhcnMpIC0gKHBhcnRpYWxDaGFyID8gMSA6IDApKTtcblxuICAgIGNvbnN0IGNvbG9yID0gdGhpcy5yb2xsaW5nQmFjayA/IGNoYWxrLnllbGxvdyA6IGNoYWxrLmdyZWVuO1xuXG4gICAgcmV0dXJuICdbJyArIGNvbG9yKGZ1bGxDaGFycyArIHBhcnRpYWxDaGFyKSArIGZpbGxlciArIGBdICgke3RoaXMucmVzb3VyY2VzRG9uZX0vJHt0aGlzLnJlc291cmNlc1RvdGFsfSlgO1xuICB9XG5cbiAgcHJpdmF0ZSBmYWlsdXJlUmVhc29uT25OZXh0TGluZShhY3Rpdml0eTogU3RhY2tBY3Rpdml0eSkge1xuICAgIHJldHVybiBoYXNFcnJvck1lc3NhZ2UoYWN0aXZpdHkuZXZlbnQuUmVzb3VyY2VTdGF0dXMgPz8gJycpXG4gICAgICA/IGBcXG4keycgJy5yZXBlYXQoVElNRVNUQU1QX1dJRFRIICsgU1RBVFVTX1dJRFRIICsgNil9JHtjaGFsay5yZWQoYWN0aXZpdHkuZXZlbnQuUmVzb3VyY2VTdGF0dXNSZWFzb24gPz8gJycpfWBcbiAgICAgIDogJyc7XG4gIH1cbn1cblxuY29uc3QgRlVMTF9CTE9DSyA9ICfilognO1xuY29uc3QgUEFSVElBTF9CTE9DSyA9IFsnJywgJ+KWjycsICfilo4nLCAn4paNJywgJ+KWjCcsICfilosnLCAn4paKJywgJ+KWiSddO1xuY29uc3QgTUFYX1BST0dSRVNTQkFSX1dJRFRIID0gNjA7XG5jb25zdCBNSU5fUFJPR1JFU1NCQVJfV0lEVEggPSAxMDtcbmNvbnN0IFBST0dSRVNTQkFSX0VYVFJBX1NQQUNFID0gMiAvKiBsZWFkaW5nIHNwYWNlcyAqLyArIDIgLyogYnJhY2tldHMgKi8gKyA0IC8qIHByb2dyZXNzIG51bWJlciBkZWNvcmF0aW9uICovICsgNiAvKiAyIHByb2dyZXNzIG51bWJlcnMgdXAgdG8gOTk5ICovO1xuXG5mdW5jdGlvbiBoYXNFcnJvck1lc3NhZ2Uoc3RhdHVzOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0YXR1cy5lbmRzV2l0aCgnX0ZBSUxFRCcpIHx8IHN0YXR1cyA9PT0gJ1JPTExCQUNLX0lOX1BST0dSRVNTJyB8fCBzdGF0dXMgPT09ICdVUERBVEVfUk9MTEJBQ0tfSU5fUFJPR1JFU1MnO1xufVxuXG5mdW5jdGlvbiBjb2xvckZyb21TdGF0dXNSZXN1bHQoc3RhdHVzPzogc3RyaW5nKSB7XG4gIGlmICghc3RhdHVzKSB7XG4gICAgcmV0dXJuIGNoYWxrLnJlc2V0O1xuICB9XG5cbiAgaWYgKHN0YXR1cy5pbmRleE9mKCdGQUlMRUQnKSAhPT0gLTEpIHtcbiAgICByZXR1cm4gY2hhbGsucmVkO1xuICB9XG4gIGlmIChzdGF0dXMuaW5kZXhPZignUk9MTEJBQ0snKSAhPT0gLTEpIHtcbiAgICByZXR1cm4gY2hhbGsueWVsbG93O1xuICB9XG4gIGlmIChzdGF0dXMuaW5kZXhPZignQ09NUExFVEUnKSAhPT0gLTEpIHtcbiAgICByZXR1cm4gY2hhbGsuZ3JlZW47XG4gIH1cblxuICByZXR1cm4gY2hhbGsucmVzZXQ7XG59XG5cbmZ1bmN0aW9uIGNvbG9yRnJvbVN0YXR1c0FjdGl2aXR5KHN0YXR1cz86IHN0cmluZykge1xuICBpZiAoIXN0YXR1cykge1xuICAgIHJldHVybiBjaGFsay5yZXNldDtcbiAgfVxuXG4gIGlmIChzdGF0dXMuZW5kc1dpdGgoJ19GQUlMRUQnKSkge1xuICAgIHJldHVybiBjaGFsay5yZWQ7XG4gIH1cblxuICBpZiAoc3RhdHVzLnN0YXJ0c1dpdGgoJ0NSRUFURV8nKSB8fCBzdGF0dXMuc3RhcnRzV2l0aCgnVVBEQVRFXycpIHx8IHN0YXR1cy5zdGFydHNXaXRoKCdJTVBPUlRfJykpIHtcbiAgICByZXR1cm4gY2hhbGsuZ3JlZW47XG4gIH1cbiAgLy8gRm9yIHN0YWNrcywgaXQgbWF5IGFsc28gYmUgJ1VQRERBVEVfUk9MTEJBQ0tfSU5fUFJPR1JFU1MnXG4gIGlmIChzdGF0dXMuaW5kZXhPZignUk9MTEJBQ0tfJykgIT09IC0xKSB7XG4gICAgcmV0dXJuIGNoYWxrLnllbGxvdztcbiAgfVxuICBpZiAoc3RhdHVzLnN0YXJ0c1dpdGgoJ0RFTEVURV8nKSkge1xuICAgIHJldHVybiBjaGFsay55ZWxsb3c7XG4gIH1cblxuICByZXR1cm4gY2hhbGsucmVzZXQ7XG59XG5cbmZ1bmN0aW9uIHNob3J0ZW4obWF4V2lkdGg6IG51bWJlciwgcDogc3RyaW5nKSB7XG4gIGlmIChwLmxlbmd0aCA8PSBtYXhXaWR0aCkgeyByZXR1cm4gcDsgfVxuICBjb25zdCBoYWxmID0gTWF0aC5mbG9vcigobWF4V2lkdGggLSAzKSAvIDIpO1xuICByZXR1cm4gcC5zbGljZSgwLCBoYWxmKSArICcuLi4nICsgcC5zbGljZSgtaGFsZik7XG59XG5cbmNvbnN0IFRJTUVTVEFNUF9XSURUSCA9IDEyO1xuY29uc3QgU1RBVFVTX1dJRFRIID0gMjA7XG4iXX0=
|
|
@@ -31,11 +31,11 @@ class StackStatus {
|
|
|
31
31
|
return this.name === 'NOT_FOUND';
|
|
32
32
|
}
|
|
33
33
|
get isDeploySuccess() {
|
|
34
|
-
return !this.isNotFound && (this.name === 'CREATE_COMPLETE' || this.name === 'UPDATE_COMPLETE');
|
|
34
|
+
return !this.isNotFound && (this.name === 'CREATE_COMPLETE' || this.name === 'UPDATE_COMPLETE' || this.name === 'IMPORT_COMPLETE');
|
|
35
35
|
}
|
|
36
36
|
toString() {
|
|
37
37
|
return this.name + (this.reason ? ` (${this.reason})` : '');
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
exports.StackStatus = StackStatus;
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stc3RhdHVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RhY2stc3RhdHVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBOzs7O0dBSUc7QUFDSCxNQUFhLFdBQVc7SUFLdEIsWUFBNEIsSUFBWSxFQUFrQixNQUFlO1FBQTdDLFNBQUksR0FBSixJQUFJLENBQVE7UUFBa0IsV0FBTSxHQUFOLE1BQU0sQ0FBUztJQUFHLENBQUM7SUFKdEUsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFdBQXFDO1FBQ3RFLE9BQU8sSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBSUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLG1CQUFtQjtlQUNuQyxJQUFJLENBQUMsSUFBSSxLQUFLLGlCQUFpQixDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLGlCQUFpQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssaUJBQWlCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JJLENBQUM7SUFFTSxRQUFRO1FBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7Q0FDRjtBQW5DRCxrQ0FtQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBBV1MgZnJvbSAnYXdzLXNkayc7XG5cbi8qKlxuICogQSB1dGlsaXR5IGNsYXNzIHRvIGluc3BlY3QgQ2xvdWRGb3JtYXRpb24gc3RhY2sgc3RhdHVzZXMuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS91c2luZy1jZm4tZGVzY3JpYmluZy1zdGFja3MuaHRtbFxuICovXG5leHBvcnQgY2xhc3MgU3RhY2tTdGF0dXMge1xuICBwdWJsaWMgc3RhdGljIGZyb21TdGFja0Rlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBBV1MuQ2xvdWRGb3JtYXRpb24uU3RhY2spIHtcbiAgICByZXR1cm4gbmV3IFN0YWNrU3RhdHVzKGRlc2NyaXB0aW9uLlN0YWNrU3RhdHVzLCBkZXNjcmlwdGlvbi5TdGFja1N0YXR1c1JlYXNvbik7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nLCBwdWJsaWMgcmVhZG9ubHkgcmVhc29uPzogc3RyaW5nKSB7fVxuXG4gIGdldCBpc0NyZWF0aW9uRmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lID09PSAnUk9MTEJBQ0tfQ09NUExFVEUnXG4gICAgICB8fCB0aGlzLm5hbWUgPT09ICdST0xMQkFDS19GQUlMRUQnO1xuICB9XG5cbiAgZ2V0IGlzRGVsZXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lLnN0YXJ0c1dpdGgoJ0RFTEVURV8nKTtcbiAgfVxuXG4gIGdldCBpc0ZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubmFtZS5lbmRzV2l0aCgnRkFJTEVEJyk7XG4gIH1cblxuICBnZXQgaXNJblByb2dyZXNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm5hbWUuZW5kc1dpdGgoJ19JTl9QUk9HUkVTUycpO1xuICB9XG5cbiAgZ2V0IGlzTm90Rm91bmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubmFtZSA9PT0gJ05PVF9GT1VORCc7XG4gIH1cblxuICBnZXQgaXNEZXBsb3lTdWNjZXNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc05vdEZvdW5kICYmICh0aGlzLm5hbWUgPT09ICdDUkVBVEVfQ09NUExFVEUnIHx8IHRoaXMubmFtZSA9PT0gJ1VQREFURV9DT01QTEVURScgfHwgdGhpcy5uYW1lID09PSAnSU1QT1JUX0NPTVBMRVRFJyk7XG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lICsgKHRoaXMucmVhc29uID8gYCAoJHt0aGlzLnJlYXNvbn0pYCA6ICcnKTtcbiAgfVxufVxuIl19
|
|
@@ -10,6 +10,9 @@ interface TemplateParameter {
|
|
|
10
10
|
Description?: string;
|
|
11
11
|
[key: string]: any;
|
|
12
12
|
}
|
|
13
|
+
export declare type ResourceIdentifierProperties = CloudFormation.ResourceIdentifierProperties;
|
|
14
|
+
export declare type ResourceIdentifierSummaries = CloudFormation.ResourceIdentifierSummaries;
|
|
15
|
+
export declare type ResourcesToImport = CloudFormation.ResourcesToImport;
|
|
13
16
|
/**
|
|
14
17
|
* Represents an (existing) Stack in CloudFormation
|
|
15
18
|
*
|
|
@@ -406,4 +406,4 @@ class ParameterValues {
|
|
|
406
406
|
}
|
|
407
407
|
}
|
|
408
408
|
exports.ParameterValues = ParameterValues;
|
|
409
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmb3JtYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG91ZGZvcm1hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0Q0FBeUQ7QUFFekQsMkNBQXNDO0FBQ3RDLCtDQUF1RDtBQUN2RCxnRUFBNEQ7QUFjNUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLG1CQUFtQjtJQStCOUIsWUFBdUMsR0FBbUIsRUFBa0IsU0FBaUIsRUFBbUIsS0FBNEI7UUFBckcsUUFBRyxHQUFILEdBQUcsQ0FBZ0I7UUFBa0IsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUFtQixVQUFLLEdBQUwsS0FBSyxDQUF1QjtJQUM1SSxDQUFDO0lBL0JNLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQW1CLEVBQUUsU0FBaUI7UUFDL0QsSUFBSTtZQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzlFLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZGO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssaUJBQWlCLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxpQkFBaUIsU0FBUyxpQkFBaUIsRUFBRTtnQkFDN0YsT0FBTyxJQUFJLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7YUFDM0Q7WUFDRCxNQUFNLENBQUMsQ0FBQztTQUNUO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQW1CLEVBQUUsU0FBaUI7UUFDL0QsT0FBTyxJQUFJLG1CQUFtQixDQUFDLEdB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QUFxQztRQUNyRCw0RUFBNEU7UUFDNUUsdUVBQXVFO1FBQ3ZFLHFGQUFxRjtRQUNyRixJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFDLE9BQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsSUFBSSxRQUFDLENBQUMsQ0FBQyxXQUFXLDBDQUFFLFFBQVEsQ0FBQywrQkFBc0IsRUFBQyxDQUFBLEVBQUEsQ0FBQyxFQUFFO1lBQzlJLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCw0QkFBNEI7UUFDNUIsdURBQXVEO1FBQ3ZELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUM3RyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsNENBQTRDO1FBQzVDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxhQUFhLENBQUMsQ0FBQyxFQUFFO1lBQ2pFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRjtBQTdFRCwwQ0E2RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTU01QQVJBTV9OT19JTlZBTElEQVRFIH0gZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uIH0gZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgeyBkZWJ1ZyB9IGZyb20gJy4uLy4uL2xvZ2dpbmcnO1xuaW1wb3J0IHsgZGVzZXJpYWxpemVTdHJ1Y3R1cmUgfSBmcm9tICcuLi8uLi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgU3RhY2tTdGF0dXMgfSBmcm9tICcuL2Nsb3VkZm9ybWF0aW9uL3N0YWNrLXN0YXR1cyc7XG5cbmV4cG9ydCB0eXBlIFRlbXBsYXRlID0ge1xuICBQYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgVGVtcGxhdGVQYXJhbWV0ZXI+O1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59O1xuXG5pbnRlcmZhY2UgVGVtcGxhdGVQYXJhbWV0ZXIge1xuICBUeXBlOiBzdHJpbmc7XG4gIERlZmF1bHQ/OiBhbnk7XG4gIERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiAoZXhpc3RpbmcpIFN0YWNrIGluIENsb3VkRm9ybWF0aW9uXG4gKlxuICogQnVuZGxlIGFuZCBjYWNoZSBzb21lIGluZm9ybWF0aW9uIHRoYXQgd2UgbmVlZCBkdXJpbmcgZGVwbG95bWVudCAoc28gd2UgZG9uJ3QgaGF2ZSB0byBtYWtlXG4gKiByZXBlYXRlZCBjYWxscyB0byBDbG91ZEZvcm1hdGlvbikuXG4gKi9cbmV4cG9ydCBjbGFzcyBDbG91ZEZvcm1hdGlvblN0YWNrIHtcbiAgcHVibGljIHN0YXRpYyBhc3luYyBsb29rdXAoY2ZuOiBDbG91ZEZvcm1hdGlvbiwgc3RhY2tOYW1lOiBzdHJpbmcpOiBQcm9taXNlPENsb3VkRm9ybWF0aW9uU3RhY2s+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjZm4uZGVzY3JpYmVTdGFja3MoeyBTdGFja05hbWU6IHN0YWNrTmFtZSB9KS5wcm9taXNlKCk7XG4gICAgICByZXR1cm4gbmV3IENsb3VkRm9ybWF0aW9uU3RhY2soY2ZuLCBzdGFja05hbWUsIHJlc3BvbnNlLlN0YWNrcyAmJiByZXNwb25zZS5TdGFja3NbMF0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLmNvZGUgPT09ICdWYWxpZGF0aW9uRXJyb3InICYmIGUubWVzc2FnZSA9PT0gYFN0YWNrIHdpdGggaWQgJHtzdGFja05hbWV9IGRvZXMgbm90IGV4aXN0YCkge1xuICAgICAgICByZXR1cm4gbmV3IENsb3VkRm9ybWF0aW9uU3RhY2soY2ZuLCBzdGFja05hbWUsIHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IG9mIHRoZSBnaXZlbiBzdGFjayB0aGF0IGRvZXMgbm90IGV4aXN0XG4gICAqXG4gICAqIEl0J3MgYSBsaXR0bGUgc2lsbHkgdGhhdCBpdCBuZWVkcyBhcmd1bWVudHMgdG8gZG8gdGhhdCwgYnV0IHRoZXJlIHdlIGdvLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkb2VzTm90RXhpc3QoY2ZuOiBDbG91ZEZvcm1hdGlvbiwgc3RhY2tOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IENsb3VkRm9ybWF0aW9uU3RhY2soY2ZuLCBzdGFja05hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZyb20gc3RhdGljIGluZm9ybWF0aW9uIChmb3IgdGVzdGluZylcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0YXRpY0luZm9ybWF0aW9uKGNmbjogQ2xvdWRGb3JtYXRpb24sIHN0YWNrTmFtZTogc3RyaW5nLCBzdGFjazogQ2xvdWRGb3JtYXRpb24uU3RhY2spIHtcbiAgICByZXR1cm4gbmV3IENsb3VkRm9ybWF0aW9uU3RhY2soY2ZuLCBzdGFja05hbWUsIHN0YWNrKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RlbXBsYXRlOiBhbnk7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY2ZuOiBDbG91ZEZvcm1hdGlvbiwgcHVibGljIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IHN0YWNrPzogQ2xvdWRGb3JtYXRpb24uU3RhY2spIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgc3RhY2sncyBkZXBsb3llZCB0ZW1wbGF0ZVxuICAgKlxuICAgKiBDYWNoZWQsIHNvIHdpbGwgb25seSBiZSByZXRyaWV2ZWQgb25jZS4gV2lsbCByZXR1cm4gYW4gZW1wdHlcbiAgICogc3RydWN0dXJlIGlmIHRoZSBzdGFjayBkb2VzIG5vdCBleGlzdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB0ZW1wbGF0ZSgpOiBQcm9taXNlPFRlbXBsYXRlPiB7XG4gICAgaWYgKCF0aGlzLmV4aXN0cykge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90ZW1wbGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2ZuLmdldFRlbXBsYXRlKHsgU3RhY2tOYW1lOiB0aGlzLnN0YWNrTmFtZSwgVGVtcGxhdGVTdGFnZTogJ09yaWdpbmFsJyB9KS5wcm9taXNlKCk7XG4gICAgICB0aGlzLl90ZW1wbGF0ZSA9IChyZXNwb25zZS5UZW1wbGF0ZUJvZHkgJiYgZGVzZXJpYWxpemVTdHJ1Y3R1cmUocmVzcG9uc2UuVGVtcGxhdGVCb2R5KSkgfHwge307XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBzdGFjayBleGlzdHNcbiAgICovXG4gIHB1YmxpYyBnZXQgZXhpc3RzKCkge1xuICAgIHJldHVybiB0aGlzLnN0YWNrICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHN0YWNrJ3MgSURcbiAgICpcbiAgICogVGhyb3dzIGlmIHRoZSBzdGFjayBkb2Vzbid0IGV4aXN0LlxuICAgKi9cbiAgcHVibGljIGdldCBzdGFja0lkKCkge1xuICAgIHRoaXMuYXNzZXJ0RXhpc3RzKCk7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2shLlN0YWNrSWQhO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFjaydzIGN1cnJlbnQgb3V0cHV0c1xuICAgKlxuICAgKiBFbXB0eSBvYmplY3QgaWYgdGhlIHN0YWNrIGRvZXNuJ3QgZXhpc3RcbiAgICovXG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKSB7IHJldHVybiB7fTsgfVxuICAgIGNvbnN0IHJlc3VsdDogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICAodGhpcy5zdGFjayEuT3V0cHV0cyB8fCBbXSkuZm9yRWFjaChvdXRwdXQgPT4ge1xuICAgICAgcmVzdWx0W291dHB1dC5PdXRwdXRLZXkhXSA9IG91dHB1dC5PdXRwdXRWYWx1ZSE7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sncyBzdGF0dXNcbiAgICpcbiAgICogU3BlY2lhbCBzdGF0dXMgTk9UX0ZPVU5EIGlmIHRoZSBzdGFjayBkb2VzIG5vdCBleGlzdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhY2tTdGF0dXMoKTogU3RhY2tTdGF0dXMge1xuICAgIGlmICghdGhpcy5leGlzdHMpIHtcbiAgICAgIHJldHVybiBuZXcgU3RhY2tTdGF0dXMoJ05PVF9GT1VORCcsICdTdGFjayBub3QgZm91bmQgZHVyaW5nIGxvb2t1cCcpO1xuICAgIH1cbiAgICByZXR1cm4gU3RhY2tTdGF0dXMuZnJvbVN0YWNrRGVzY3JpcHRpb24odGhpcy5zdGFjayEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFjaydzIGN1cnJlbnQgdGFnc1xuICAgKlxuICAgKiBFbXB0eSBsaXN0IG9mIHRoZSBzdGFjayBkb2VzIG5vdCBleGlzdFxuICAgKi9cbiAgcHVibGljIGdldCB0YWdzKCk6IENsb3VkRm9ybWF0aW9uLlRhZ3Mge1xuICAgIHJldHVybiB0aGlzLnN0YWNrPy5UYWdzIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbmFtZXMgb2YgYWxsIGN1cnJlbnQgcGFyYW1ldGVycyB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogRW1wdHkgbGlzdCBpZiB0aGUgc3RhY2sgZG9lcyBub3QgZXhpc3QuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5wYXJhbWV0ZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG5hbWVzIGFuZCB2YWx1ZXMgb2YgYWxsIGN1cnJlbnQgcGFyYW1ldGVycyB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogRW1wdHkgb2JqZWN0IGlmIHRoZSBzdGFjayBkb2VzIG5vdCBleGlzdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGFyYW1ldGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKSB7IHJldHVybiB7fTsgfVxuICAgIGNvbnN0IHJldDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGZvciAoY29uc3QgcGFyYW0gb2YgdGhpcy5zdGFjayEuUGFyYW1ldGVycyA/PyBbXSkge1xuICAgICAgcmV0W3BhcmFtLlBhcmFtZXRlcktleSFdID0gcGFyYW0uUGFyYW1ldGVyVmFsdWUhO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdGVybWluYXRpb24gcHJvdGVjdGlvbiBvZiB0aGUgc3RhY2tcbiAgICovXG4gIHB1YmxpYyBnZXQgdGVybWluYXRpb25Qcm90ZWN0aW9uKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN0YWNrPy5FbmFibGVUZXJtaW5hdGlvblByb3RlY3Rpb247XG4gIH1cblxuICBwcml2YXRlIGFzc2VydEV4aXN0cygpIHtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHN0YWNrIG5hbWVkICcke3RoaXMuc3RhY2tOYW1lfSdgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBEZXNjcmliZSBhIGNoYW5nZXNldCBpbiBDbG91ZEZvcm1hdGlvbiwgcmVnYXJkbGVzcyBvZiBpdHMgY3VycmVudCBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0gY2ZuICAgICAgIGEgQ2xvdWRGb3JtYXRpb24gY2xpZW50XG4gKiBAcGFyYW0gc3RhY2tOYW1lICAgdGhlIG5hbWUgb2YgdGhlIFN0YWNrIHRoZSBDaGFuZ2VTZXQgYmVsb25ncyB0b1xuICogQHBhcmFtIGNoYW5nZVNldE5hbWUgdGhlIG5hbWUgb2YgdGhlIENoYW5nZVNldFxuICpcbiAqIEByZXR1cm5zICAgICAgIENsb3VkRm9ybWF0aW9uIGluZm9ybWF0aW9uIGFib3V0IHRoZSBDaGFuZ2VTZXRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVzY3JpYmVDaGFuZ2VTZXQoY2ZuOiBDbG91ZEZvcm1hdGlvbiwgc3RhY2tOYW1lOiBzdHJpbmcsIGNoYW5nZVNldE5hbWU6IHN0cmluZyk6IFByb21pc2U8Q2xvdWRGb3JtYXRpb24uRGVzY3JpYmVDaGFuZ2VTZXRPdXRwdXQ+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjZm4uZGVzY3JpYmVDaGFuZ2VTZXQoeyBTdGFja05hbWU6IHN0YWNrTmFtZSwgQ2hhbmdlU2V0TmFtZTogY2hhbmdlU2V0TmFtZSB9KS5wcm9taXNlKCk7XG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuLyoqXG4gKiBXYWl0cyBmb3IgYSBmdW5jdGlvbiB0byByZXR1cm4gbm9uLSt1bmRlZmluZWQrIGJlZm9yZSByZXR1cm5pbmcuXG4gKlxuICogQHBhcmFtIHZhbHVlUHJvdmlkZXIgYSBmdW5jdGlvbiB0aGF0IHdpbGwgcmV0dXJuIGEgdmFsdWUgdGhhdCBpcyBub3QgK3VuZGVmaW5lZCsgb25jZSB0aGUgd2FpdCBzaG91bGQgYmUgb3ZlclxuICogQHBhcmFtIHRpbWVvdXQgICAgIHRoZSB0aW1lIHRvIHdhaXQgYmV0d2VlbiB0d28gY2FsbHMgdG8gK3ZhbHVlUHJvdmlkZXIrXG4gKlxuICogQHJldHVybnMgICAgICAgdGhlIHZhbHVlIHRoYXQgd2FzIHJldHVybmVkIGJ5ICt2YWx1ZVByb3ZpZGVyK1xuICovXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yPFQ+KHZhbHVlUHJvdmlkZXI6ICgpID0+IFByb21pc2U8VCB8IG51bGwgfCB1bmRlZmluZWQ+LCB0aW1lb3V0OiBudW1iZXIgPSA1MDAwKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmFsdWVQcm92aWRlcigpO1xuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXdhaXQgbmV3IFByb21pc2UoY2IgPT4gc2V0VGltZW91dChjYiwgdGltZW91dCkpO1xuICB9XG59XG5cbi8qKlxuICogV2FpdHMgZm9yIGEgQ2hhbmdlU2V0IHRvIGJlIGF2YWlsYWJsZSBmb3IgdHJpZ2dlcmluZyBhIFN0YWNrVXBkYXRlLlxuICpcbiAqIFdpbGwgcmV0dXJuIGEgY2hhbmdlc2V0IHRoYXQgaXMgZWl0aGVyIHJlYWR5IHRvIGJlIGV4ZWN1dGVkIG9yIGhhcyBubyBjaGFuZ2VzLlxuICogV2lsbCB0aHJvdyBpbiBvdGhlciBjYXNlcy5cbiAqXG4gKiBAcGFyYW0gY2ZuICAgICAgIGEgQ2xvdWRGb3JtYXRpb24gY2xpZW50XG4gKiBAcGFyYW0gc3RhY2tOYW1lICAgdGhlIG5hbWUgb2YgdGhlIFN0YWNrIHRoYXQgdGhlIENoYW5nZVNldCBiZWxvbmdzIHRvXG4gKiBAcGFyYW0gY2hhbmdlU2V0TmFtZSB0aGUgbmFtZSBvZiB0aGUgQ2hhbmdlU2V0XG4gKlxuICogQHJldHVybnMgICAgICAgdGhlIENsb3VkRm9ybWF0aW9uIGRlc2NyaXB0aW9uIG9mIHRoZSBDaGFuZ2VTZXRcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yQ2hhbmdlU2V0KGNmbjogQ2xvdWRGb3JtYXRpb24sIHN0YWNrTmFtZTogc3RyaW5nLCBjaGFuZ2VTZXROYW1lOiBzdHJpbmcpOiBQcm9taXNlPENsb3VkRm9ybWF0aW9uLkRlc2NyaWJlQ2hhbmdlU2V0T3V0cHV0PiB7XG4gIGRlYnVnKCdXYWl0aW5nIGZvciBjaGFuZ2VzZXQgJXMgb24gc3RhY2sgJXMgdG8gZmluaXNoIGNyZWF0aW5nLi4uJywgY2hhbmdlU2V0TmFtZSwgc3RhY2tOYW1lKTtcbiAgY29uc3QgcmV0ID0gYXdhaXQgd2FpdEZvcihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBhd2FpdCBkZXNjcmliZUNoYW5nZVNldChjZm4sIHN0YWNrTmFtZSwgY2hhbmdlU2V0TmFtZSk7XG4gICAgLy8gVGhlIGZvbGxvd2luZyBkb2Vzbid0IHVzZSBhIHN3aXRjaCBiZWNhdXNlIHRzYyB3aWxsIG5vdCBhbGxvdyBmYWxsLXRocm91Z2gsIFVOTEVTUyBpdCBpcyBhbGxvd3NcbiAgICAvLyBFVkVSWVdIRVJFIHRoYXQgdXNlcyB0aGlzIGxpYnJhcnkgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgd2hpY2ggaXMgdW5kZXNpcmFibGUuXG4gICAgaWYgKGRlc2NyaXB0aW9uLlN0YXR1cyA9PT0gJ0NSRUFURV9QRU5ESU5HJyB8fCBkZXNjcmlwdGlvbi5TdGF0dXMgPT09ICdDUkVBVEVfSU5fUFJPR1JFU1MnKSB7XG4gICAgICBkZWJ1ZygnQ2hhbmdlc2V0ICVzIG9uIHN0YWNrICVzIGlzIHN0aWxsIGNyZWF0aW5nJywgY2hhbmdlU2V0TmFtZSwgc3RhY2tOYW1lKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKGRlc2NyaXB0aW9uLlN0YXR1cyA9PT0gJ0NSRUFURV9DT01QTEVURScgfHwgY2hhbmdlU2V0SGFzTm9DaGFuZ2VzKGRlc2NyaXB0aW9uKSkge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIENoYW5nZVNldCAke2NoYW5nZVNldE5hbWV9IG9uICR7c3RhY2tOYW1lfTogJHtkZXNjcmlwdGlvbi5TdGF0dXMgfHwgJ05PX1NUQVRVUyd9LCAke2Rlc2NyaXB0aW9uLlN0YXR1c1JlYXNvbiB8fCAnbm8gcmVhc29uIHByb3ZpZGVkJ31gKTtcbiAgfSk7XG5cbiAgaWYgKCFyZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5nZSBzZXQgdG9vayB0b28gbG9uZyB0byBiZSBjcmVhdGVkOyBhYm9ydGluZycpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gY2hhbmdlIHNldCBoYXMgbm8gY2hhbmdlc1xuICpcbiAqIFRoaXMgbXVzdCBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIHN0YXR1cywgbm90IHRoZSAnQ2hhbmdlcycgYXJyYXkgb24gdGhlXG4gKiBvYmplY3Q7IHRoZSBsYXR0ZXIgY2FuIGJlIGVtcHR5IGJlY2F1c2Ugbm8gcmVzb3VyY2VzIHdlcmUgY2hhbmdlZCwgYnV0IGlmXG4gKiB0aGVyZSBhcmUgY2hhbmdlcyB0byBPdXRwdXRzLCB0aGUgY2hhbmdlIHNldCBjYW4gc3RpbGwgYmUgZXhlY3V0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VTZXRIYXNOb0NoYW5nZXMoZGVzY3JpcHRpb246IENsb3VkRm9ybWF0aW9uLkRlc2NyaWJlQ2hhbmdlU2V0T3V0cHV0KSB7XG4gIGNvbnN0IG5vQ2hhbmdlRXJyb3JQcmVmaXhlcyA9IFtcbiAgICAvLyBFcnJvciBtZXNzYWdlIGZvciBhIHJlZ3VsYXIgdGVtcGxhdGVcbiAgICAnVGhlIHN1Ym1pdHRlZCBpbmZvcm1hdGlvbiBkaWRuXFwndCBjb250YWluIGNoYW5nZXMuJyxcbiAgICAvLyBFcnJvciBtZXNzYWdlIHdoZW4gYSBUcmFuc2Zvcm0gaXMgaW52b2x2ZWQgKHNlZSAjMTA2NTApXG4gICAgJ05vIHVwZGF0ZXMgYXJlIHRvIGJlIHBlcmZvcm1lZC4nLFxuICBdO1xuXG4gIHJldHVybiBkZXNjcmlwdGlvbi5TdGF0dXMgPT09ICdGQUlMRUQnXG4gICAgJiYgbm9DaGFuZ2VFcnJvclByZWZpeGVzLnNvbWUocCA9PiAoZGVzY3JpcHRpb24uU3RhdHVzUmVhc29uID8/ICcnKS5zdGFydHNXaXRoKHApKTtcbn1cblxuLyoqXG4gKiBXYWl0cyBmb3IgYSBDbG91ZEZvcm1hdGlvbiBzdGFjayB0byBzdGFiaWxpemUgaW4gYSBjb21wbGV0ZS9hdmFpbGFibGUgc3RhdGVcbiAqIGFmdGVyIGEgZGVsZXRlIG9wZXJhdGlvbiBpcyBpc3N1ZWQuXG4gKlxuICogRmFpbHMgaWYgdGhlIHN0YWNrIGlzIGluIGEgRkFJTEVEIHN0YXRlLiBXaWxsIG5vdCBmYWlsIGlmIHRoZSBzdGFjayB3YXNcbiAqIGFscmVhZHkgZGVsZXRlZC5cbiAqXG4gKiBAcGFyYW0gY2ZuICAgICAgICBhIENsb3VkRm9ybWF0aW9uIGNsaWVudFxuICogQHBhcmFtIHN0YWNrTmFtZSAgICAgIHRoZSBuYW1lIG9mIHRoZSBzdGFjayB0byB3YWl0IGZvciBhZnRlciBhIGRlbGV0ZVxuICpcbiAqIEByZXR1cm5zICAgICB0aGUgQ2xvdWRGb3JtYXRpb24gZGVzY3JpcHRpb24gb2YgdGhlIHN0YWJpbGl6ZWQgc3RhY2sgYWZ0ZXIgdGhlIGRlbGV0ZSBhdHRlbXB0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yU3RhY2tEZWxldGUoXG4gIGNmbjogQ2xvdWRGb3JtYXRpb24sXG4gIHN0YWNrTmFtZTogc3RyaW5nKTogUHJvbWlzZTxDbG91ZEZvcm1hdGlvblN0YWNrIHwgdW5kZWZpbmVkPiB7XG5cbiAgY29uc3Qgc3RhY2sgPSBhd2FpdCBzdGFiaWxpemVTdGFjayhjZm4sIHN0YWNrTmFtZSk7XG4gIGlmICghc3RhY2spIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuXG4gIGNvbnN0IHN0YXR1cyA9IHN0YWNrLnN0YWNrU3RhdHVzO1xuICBpZiAoc3RhdHVzLmlzRmFpbHVyZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHN0YWNrIG5hbWVkICR7c3RhY2tOYW1lfSBpcyBpbiBhIGZhaWxlZCBzdGF0ZS4gWW91IG1heSBuZWVkIHRvIGRlbGV0ZSBpdCBmcm9tIHRoZSBBV1MgY29uc29sZSA6ICR7c3RhdHVzfWApO1xuICB9IGVsc2UgaWYgKHN0YXR1cy5pc0RlbGV0ZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBzdGFjaztcbn1cblxuLyoqXG4gKiBXYWl0cyBmb3IgYSBDbG91ZEZvcm1hdGlvbiBzdGFjayB0byBzdGFiaWxpemUgaW4gYSBjb21wbGV0ZS9hdmFpbGFibGUgc3RhdGVcbiAqIGFmdGVyIGFuIHVwZGF0ZS9jcmVhdGUgb3BlcmF0aW9uIGlzIGlzc3VlZC5cbiAqXG4gKiBGYWlscyBpZiB0aGUgc3RhY2sgaXMgaW4gYSBGQUlMRUQgc3RhdGUsIFJPTExCQUNLIHN0YXRlLCBvciBERUxFVEVEIHN0YXRlLlxuICpcbiAqIEBwYXJhbSBjZm4gICAgICAgIGEgQ2xvdWRGb3JtYXRpb24gY2xpZW50XG4gKiBAcGFyYW0gc3RhY2tOYW1lICAgICAgdGhlIG5hbWUgb2YgdGhlIHN0YWNrIHRvIHdhaXQgZm9yIGFmdGVyIGFuIHVwZGF0ZVxuICpcbiAqIEByZXR1cm5zICAgICB0aGUgQ2xvdWRGb3JtYXRpb24gZGVzY3JpcHRpb24gb2YgdGhlIHN0YWJpbGl6ZWQgc3RhY2sgYWZ0ZXIgdGhlIHVwZGF0ZSBhdHRlbXB0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yU3RhY2tEZXBsb3koXG4gIGNmbjogQ2xvdWRGb3JtYXRpb24sXG4gIHN0YWNrTmFtZTogc3RyaW5nKTogUHJvbWlzZTxDbG91ZEZvcm1hdGlvblN0YWNrIHwgdW5kZWZpbmVkPiB7XG5cbiAgY29uc3Qgc3RhY2sgPSBhd2FpdCBzdGFiaWxpemVTdGFjayhjZm4sIHN0YWNrTmFtZSk7XG4gIGlmICghc3RhY2spIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuXG4gIGNvbnN0IHN0YXR1cyA9IHN0YWNrLnN0YWNrU3RhdHVzO1xuXG4gIGlmIChzdGF0dXMuaXNDcmVhdGlvbkZhaWx1cmUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzdGFjayBuYW1lZCAke3N0YWNrTmFtZX0gZmFpbGVkIGNyZWF0aW9uLCBpdCBtYXkgbmVlZCB0byBiZSBtYW51YWxseSBkZWxldGVkIGZyb20gdGhlIEFXUyBjb25zb2xlOiAke3N0YXR1c31gKTtcbiAgfSBlbHNlIGlmICghc3RhdHVzLmlzRGVwbG95U3VjY2Vzcykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHN0YWNrIG5hbWVkICR7c3RhY2tOYW1lfSBmYWlsZWQgdG8gZGVwbG95OiAke3N0YXR1c31gKTtcbiAgfVxuXG4gIHJldHVybiBzdGFjaztcbn1cblxuLyoqXG4gKiBXYWl0IGZvciBhIHN0YWNrIHRvIGJlY29tZSBzdGFibGUgKG5vIGxvbmdlciBfSU5fUFJPR1JFU1MpLCByZXR1cm5pbmcgaXRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YWJpbGl6ZVN0YWNrKGNmbjogQ2xvdWRGb3JtYXRpb24sIHN0YWNrTmFtZTogc3RyaW5nKSB7XG4gIGRlYnVnKCdXYWl0aW5nIGZvciBzdGFjayAlcyB0byBmaW5pc2ggY3JlYXRpbmcgb3IgdXBkYXRpbmcuLi4nLCBzdGFja05hbWUpO1xuICByZXR1cm4gd2FpdEZvcihhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc3RhY2sgPSBhd2FpdCBDbG91ZEZvcm1hdGlvblN0YWNrLmxvb2t1cChjZm4sIHN0YWNrTmFtZSk7XG4gICAgaWYgKCFzdGFjay5leGlzdHMpIHtcbiAgICAgIGRlYnVnKCdTdGFjayAlcyBkb2VzIG5vdCBleGlzdCcsIHN0YWNrTmFtZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc3RhdHVzID0gc3RhY2suc3RhY2tTdGF0dXM7XG4gICAgaWYgKHN0YXR1cy5pc0luUHJvZ3Jlc3MpIHtcbiAgICAgIGRlYnVnKCdTdGFjayAlcyBoYXMgYW4gb25nb2luZyBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MgYW5kIGlzIG5vdCBzdGFibGUgKCVzKScsIHN0YWNrTmFtZSwgc3RhdHVzKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaGUgc2V0IG9mIChmb3JtYWwpIHBhcmFtZXRlcnMgdGhhdCBoYXZlIGJlZW4gZGVjbGFyZWQgaW4gYSB0ZW1wbGF0ZVxuICovXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVQYXJhbWV0ZXJzIHtcbiAgcHVibGljIHN0YXRpYyBmcm9tVGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlKSB7XG4gICAgcmV0dXJuIG5ldyBUZW1wbGF0ZVBhcmFtZXRlcnModGVtcGxhdGUuUGFyYW1ldGVycyB8fCB7fSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHBhcmFtczogUmVjb3JkPHN0cmluZywgVGVtcGxhdGVQYXJhbWV0ZXI+KSB7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHN0YWNrIHBhcmFtZXRlcnMgdG8gcGFzcyBmcm9tIHRoZSBnaXZlbiBkZXNpcmVkIHBhcmFtZXRlciB2YWx1ZXNcbiAgICpcbiAgICogV2lsbCB0aHJvdyBpZiBwYXJhbWV0ZXJzIHdpdGhvdXQgYSBEZWZhdWx0IHZhbHVlIG9yIGEgUHJldmlvdXMgdmFsdWUgYXJlIG5vdFxuICAgKiBzdXBwbGllZC5cbiAgICovXG4gIHB1YmxpYyBzdXBwbHlBbGwodXBkYXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPik6IFBhcmFtZXRlclZhbHVlcyB7XG4gICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJWYWx1ZXModGhpcy5wYXJhbXMsIHVwZGF0ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZyb20gdGhlIHRlbXBsYXRlLCB0aGUgZ2l2ZW4gZGVzaXJlZCB2YWx1ZXMgYW5kIHRoZSBjdXJyZW50IHZhbHVlcywgY2FsY3VsYXRlIHRoZSBjaGFuZ2VzIHRvIHRoZSBzdGFjayBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIFdpbGwgdGFrZSBpbnRvIGFjY291bnQgcGFyYW1ldGVycyBhbHJlYWR5IHNldCBvbiB0aGUgdGVtcGxhdGUgKHdpbGwgZW1pdFxuICAgKiAnVXNlUHJldmlvdXNWYWx1ZTogdHJ1ZScgZm9yIHRob3NlIHVubGVzcyB0aGUgdmFsdWUgaXMgY2hhbmdlZCksIGFuZCB3aWxsXG4gICAqIHRocm93IGlmIHBhcmFtZXRlcnMgd2l0aG91dCBhIERlZmF1bHQgdmFsdWUgb3IgYSBQcmV2aW91cyB2YWx1ZSBhcmUgbm90XG4gICAqIHN1cHBsaWVkLlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZUV4aXN0aW5nKHVwZGF0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4sIHByZXZpb3VzVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUGFyYW1ldGVyVmFsdWVzIHtcbiAgICByZXR1cm4gbmV3IFBhcmFtZXRlclZhbHVlcyh0aGlzLnBhcmFtcywgdXBkYXRlcywgcHJldmlvdXNWYWx1ZXMpO1xuICB9XG59XG5cbi8qKlxuICogVGhlIHNldCBvZiBwYXJhbWV0ZXJzIHdlJ3JlIGdvaW5nIHRvIHBhc3MgdG8gYSBTdGFja1xuICovXG5leHBvcnQgY2xhc3MgUGFyYW1ldGVyVmFsdWVzIHtcbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpUGFyYW1ldGVyczogQ2xvdWRGb3JtYXRpb24uUGFyYW1ldGVyW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1hbFBhcmFtczogUmVjb3JkPHN0cmluZywgVGVtcGxhdGVQYXJhbWV0ZXI+LFxuICAgIHVwZGF0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4sXG4gICAgcHJldmlvdXNWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSkge1xuXG4gICAgY29uc3QgbWlzc2luZ1JlcXVpcmVkID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgZm9ybWFsUGFyYW1dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZm9ybWFsUGFyYW1zKSkge1xuICAgICAgLy8gQ2hlY2sgdXBkYXRlcyBmaXJzdCwgdGhlbiB1c2UgdGhlIHByZXZpb3VzIHZhbHVlIChpZiBhdmFpbGFibGUpLCB0aGVuIHVzZVxuICAgICAgLy8gdGhlIGRlZmF1bHQgKGlmIGF2YWlsYWJsZSkuXG4gICAgICAvL1xuICAgICAgLy8gSWYgd2UgZG9uJ3QgZmluZCBhIHBhcmFtZXRlciB2YWx1ZSB1c2luZyBhbnkgb2YgdGhlc2UgbWV0aG9kcywgdGhlbiB0aGF0J3MgYW4gZXJyb3IuXG4gICAgICBjb25zdCB1cGRhdGVkVmFsdWUgPSB1cGRhdGVzW2tleV07XG4gICAgICBpZiAodXBkYXRlZFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy52YWx1ZXNba2V5XSA9IHVwZGF0ZWRWYWx1ZTtcbiAgICAgICAgdGhpcy5hcGlQYXJhbWV0ZXJzLnB1c2goeyBQYXJhbWV0ZXJLZXk6IGtleSwgUGFyYW1ldGVyVmFsdWU6IHVwZGF0ZXNba2V5XSB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkgaW4gcHJldmlvdXNWYWx1ZXMpIHtcbiAgICAgICAgdGhpcy52YWx1ZXNba2V5XSA9IHByZXZpb3VzVmFsdWVzW2tleV07XG4gICAgICAgIHRoaXMuYXBpUGFyYW1ldGVycy5wdXNoKHsgUGFyYW1ldGVyS2V5OiBrZXksIFVzZVByZXZpb3VzVmFsdWU6IHRydWUgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWFsUGFyYW0uRGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMudmFsdWVzW2tleV0gPSBmb3JtYWxQYXJhbS5EZWZhdWx0O1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gT2ggbm9cbiAgICAgIG1pc3NpbmdSZXF1aXJlZC5wdXNoKGtleSk7XG4gICAgfVxuXG4gICAgaWYgKG1pc3NpbmdSZXF1aXJlZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmb2xsb3dpbmcgQ2xvdWRGb3JtYXRpb24gUGFyYW1ldGVycyBhcmUgbWlzc2luZyBhIHZhbHVlOiAke21pc3NpbmdSZXF1aXJlZC5qb2luKCcsICcpfWApO1xuICAgIH1cblxuICAgIC8vIEp1c3QgYXBwZW5kIGFsbCBzdXBwbGllZCBvdmVycmlkZXMgdGhhdCBhcmVuJ3QgcmVhbGx5IGV4cGVjdGVkICh0aGlzXG4gICAgLy8gd2lsbCBmYWlsIENGTiBidXQgbWF5YmUgcGVvcGxlIG1hZGUgdHlwb3MgdGhhdCB0aGV5IHdhbnQgdG8gYmUgbm90aWZpZWRcbiAgICAvLyBvZilcbiAgICBjb25zdCB1bmtub3duUGFyYW0gPSAoW2tleSwgX106IFtzdHJpbmcsIGFueV0pID0+IHRoaXMuZm9ybWFsUGFyYW1zW2tleV0gPT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBoYXNWYWx1ZSA9IChbXywgdmFsdWVdOiBbc3RyaW5nLCBhbnldKSA9PiAhIXZhbHVlO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHVwZGF0ZXMpLmZpbHRlcih1bmtub3duUGFyYW0pLmZpbHRlcihoYXNWYWx1ZSkpIHtcbiAgICAgIHRoaXMudmFsdWVzW2tleV0gPSB2YWx1ZSE7XG4gICAgICB0aGlzLmFwaVBhcmFtZXRlcnMucHVzaCh7IFBhcmFtZXRlcktleToga2V5LCBQYXJhbWV0ZXJWYWx1ZTogdmFsdWUgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBzZXQgb2YgcGFyYW1ldGVyIHVwZGF0ZXMgd2lsbCBjaGFuZ2UgdGhlIGFjdHVhbCBzdGFjayB2YWx1ZXNcbiAgICovXG4gIHB1YmxpYyBoYXNDaGFuZ2VzKGN1cnJlbnRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQYXJhbWV0ZXJDaGFuZ2VzIHtcbiAgICAvLyBJZiBhbnkgb2YgdGhlIHBhcmFtZXRlcnMgYXJlIFNTTSBwYXJhbWV0ZXJzLCBkZXBsb3lpbmcgbXVzdCBhbHdheXMgaGFwcGVuXG4gICAgLy8gYmVjYXVzZSB3ZSBjYW4ndCBwcmVkaWN0IHdoYXQgdGhlIHZhbHVlcyB3aWxsIGJlLiBXZSB3aWxsIGFsbG93IHNvbWVcbiAgICAvLyBwYXJhbWV0ZXJzIHRvIG9wdCBvdXQgb2YgdGhpcyBjaGVjayBieSBoYXZpbmcgYSBtYWdpYyBzdHJpbmcgaW4gdGhlaXIgZGVzY3JpcHRpb24uXG4gICAgaWYgKE9iamVjdC52YWx1ZXModGhpcy5mb3JtYWxQYXJhbXMpLnNvbWUocCA9PiBwLlR5cGUuc3RhcnRzV2l0aCgnQVdTOjpTU006OlBhcmFtZXRlcjo6JykgJiYgIXAuRGVzY3JpcHRpb24/LmluY2x1ZGVzKFNTTVBBUkFNX05PX0lOVkFMSURBVEUpKSkge1xuICAgICAgcmV0dXJuICdzc20nO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSB3ZSdyZSBkaXJ0eSBpZjpcbiAgICAvLyAtIGFueSBvZiB0aGUgZXhpc3RpbmcgdmFsdWVzIGFyZSByZW1vdmVkLCBvciBjaGFuZ2VkXG4gICAgaWYgKE9iamVjdC5lbnRyaWVzKGN1cnJlbnRWYWx1ZXMpLnNvbWUoKFtrZXksIHZhbHVlXSkgPT4gIShrZXkgaW4gdGhpcy52YWx1ZXMpIHx8IHZhbHVlICE9PSB0aGlzLnZhbHVlc1trZXldKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gLSBhbnkgb2YgdGhlIHZhbHVlcyB3ZSdyZSBzZXR0aW5nIGFyZSBuZXdcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy52YWx1ZXMpLnNvbWUoa2V5ID0+ICEoa2V5IGluIGN1cnJlbnRWYWx1ZXMpKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFBhcmFtZXRlckNoYW5nZXMgPSBib29sZWFuIHwgJ3NzbSc7Il19
|
|
409
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmb3JtYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG91ZGZvcm1hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0Q0FBeUQ7QUFFekQsMkNBQXNDO0FBQ3RDLCtDQUF1RDtBQUN2RCxnRUFBNEQ7QUFrQjVEOzs7OztHQUtHO0FBQ0gsTUFBYSxtQkFBbUI7SUErQjlCLFlBQXVDLEdBQW1CLEVBQWtCLFNBQWlCLEVBQW1CLEtBQTRCO1FBQXJHLFFBQUcsR0FBSCxHQUFHLENBQWdCO1FBQWtCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFBbUIsVUFBSyxHQUFMLEtBQUssQ0FBdUI7SUFDNUksQ0FBQztJQS9CTSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFtQixFQUFFLFNBQWlCO1FBQy9ELElBQUk7WUFDRixNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM5RSxPQUFPLElBQUksbUJBQW1CLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2RjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssaUJBQWlCLFNBQVMsaUJBQWlCLEVBQUU7Z0JBQzdGLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQzNEO1lBQ0QsTUFBTSxDQUFDLENBQUM7U0FDVDtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFtQixFQUFFLFNBQWlCO1FBQy9ELE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxH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YUFBcUM7UUFDckQsNEVBQTRFO1FBQzVFLHVFQUF1RTtRQUN2RSxxRkFBcUY7UUFDckYsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBQyxPQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLElBQUksUUFBQyxDQUFDLENBQUMsV0FBVywwQ0FBRSxRQUFRLENBQUMsK0JBQXNCLEVBQUMsQ0FBQSxFQUFBLENBQUMsRUFBRTtZQUM5SSxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsNEJBQTRCO1FBQzVCLHVEQUF1RDtRQUN2RCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDN0csT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELDRDQUE0QztRQUM1QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksYUFBYSxDQUFDLENBQUMsRUFBRTtZQUNqRSxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUE3RUQsMENBNkVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU1NNUEFSQU1fTk9fSU5WQUxJREFURSB9IGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvbiB9IGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0IHsgZGVidWcgfSBmcm9tICcuLi8uLi9sb2dnaW5nJztcbmltcG9ydCB7IGRlc2VyaWFsaXplU3RydWN0dXJlIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXplJztcbmltcG9ydCB7IFN0YWNrU3RhdHVzIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbi9zdGFjay1zdGF0dXMnO1xuXG5leHBvcnQgdHlwZSBUZW1wbGF0ZSA9IHtcbiAgUGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIFRlbXBsYXRlUGFyYW1ldGVyPjtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufTtcblxuaW50ZXJmYWNlIFRlbXBsYXRlUGFyYW1ldGVyIHtcbiAgVHlwZTogc3RyaW5nO1xuICBEZWZhdWx0PzogYW55O1xuICBEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgdHlwZSBSZXNvdXJjZUlkZW50aWZpZXJQcm9wZXJ0aWVzID0gQ2xvdWRGb3JtYXRpb24uUmVzb3VyY2VJZGVudGlmaWVyUHJvcGVydGllcztcbmV4cG9ydCB0eXBlIFJlc291cmNlSWRlbnRpZmllclN1bW1hcmllcyA9IENsb3VkRm9ybWF0aW9uLlJlc291cmNlSWRlbnRpZmllclN1bW1hcmllcztcbmV4cG9ydCB0eXBlIFJlc291cmNlc1RvSW1wb3J0ID0gQ2xvdWRGb3JtYXRpb24uUmVzb3VyY2VzVG9JbXBvcnQ7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiAoZXhpc3RpbmcpIFN0YWNrIGluIENsb3VkRm9ybWF0aW9uXG4gKlxuICogQnVuZGxlIGFuZCBjYWNoZSBzb21lIGluZm9ybWF0aW9uIHRoYXQgd2UgbmVlZCBkdXJpbmcgZGVwbG95bWVudCAoc28gd2UgZG9uJ3QgaGF2ZSB0byBtYWtlXG4gKiByZXBlYXRlZCBjYWxscyB0byBDbG91ZEZvcm1hdGlvbikuXG4gKi9cbmV4cG9ydCBjbGFzcyBDbG91ZEZvcm1hdGlvblN0YWNrIHtcbiAgcHVibGljIHN0YXRpYyBhc3luYyBsb29rdXAoY2ZuOiBDbG91ZEZvcm1hdGlvbiwgc3RhY2tOYW1lOiBzdHJpbmcpOiBQcm9taXNlPENsb3VkRm9ybWF0aW9uU3RhY2s+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjZm4uZGVzY3JpYmVTdGFja3MoeyBTdGFja05hbWU6IHN0YWNrTmFtZSB9KS5wcm9taXNlKCk7XG4gICAgICByZXR1cm4gbmV3IENsb3VkRm9ybWF0aW9uU3RhY2soY2ZuLCBzdGFja05hbWUsIHJlc3BvbnNlLlN0YWNrcyAmJiByZXNwb25zZS5TdGFja3NbMF0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLmNvZGUgPT09ICdWYWxpZGF0aW9uRXJyb3InICYmIGUubWVzc2FnZSA9PT0gYFN0YWNrIHdpdGggaWQgJHtzdGFja05hbWV9IGRvZXMgbm90IGV4aXN0YCkge1xuICAgICAgICByZXR1cm4gbmV3IENsb3VkRm9ybWF0aW9uU3RhY2soY2ZuLCBzdGFja05hbWUsIHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IG9mIHRoZSBnaXZlbiBzdGFjayB0aGF0IGRvZXMgbm90IGV4aXN0XG4gICAqXG4gICAqIEl0J3MgYSBsaXR0bGUgc2lsbHkgdGhhdCBpdCBuZWVkcyBhcmd1bWVudHMgdG8gZG8gdGhhdCwgYnV0IHRoZXJlIHdlIGdvLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkb2VzTm90RXhpc3QoY2ZuOiBDbG91ZEZvcm1hdGlvbiwgc3RhY2tOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IENsb3VkRm9ybWF0aW9uU3RhY2soY2ZuLCBzdGFja05hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZyb20gc3RhdGljIGluZm9ybWF0aW9uIChmb3IgdGVzdGluZylcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0YXRpY0luZm9ybWF0aW9uKGNmbjogQ2xvdWRGb3JtYXRpb24sIHN0YWNrTmFtZTogc3RyaW5nLCBzdGFjazogQ2xvdWRGb3JtYXRpb24uU3RhY2spIHtcbiAgICByZXR1cm4gbmV3IENsb3VkRm9ybWF0aW9uU3RhY2soY2ZuLCBzdGFja05hbWUsIHN0YWNrKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RlbXBsYXRlOiBhbnk7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY2ZuOiBDbG91ZEZvcm1hdGlvbiwgcHVibGljIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IHN0YWNrPzogQ2xvdWRGb3JtYXRpb24uU3RhY2spIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgc3RhY2sncyBkZXBsb3llZCB0ZW1wbGF0ZVxuICAgKlxuICAgKiBDYWNoZWQsIHNvIHdpbGwgb25seSBiZSByZXRyaWV2ZWQgb25jZS4gV2lsbCByZXR1cm4gYW4gZW1wdHlcbiAgICogc3RydWN0dXJlIGlmIHRoZSBzdGFjayBkb2VzIG5vdCBleGlzdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB0ZW1wbGF0ZSgpOiBQcm9taXNlPFRlbXBsYXRlPiB7XG4gICAgaWYgKCF0aGlzLmV4aXN0cykge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90ZW1wbGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2ZuLmdldFRlbXBsYXRlKHsgU3RhY2tOYW1lOiB0aGlzLnN0YWNrTmFtZSwgVGVtcGxhdGVTdGFnZTogJ09yaWdpbmFsJyB9KS5wcm9taXNlKCk7XG4gICAgICB0aGlzLl90ZW1wbGF0ZSA9IChyZXNwb25zZS5UZW1wbGF0ZUJvZHkgJiYgZGVzZXJpYWxpemVTdHJ1Y3R1cmUocmVzcG9uc2UuVGVtcGxhdGVCb2R5KSkgfHwge307XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBzdGFjayBleGlzdHNcbiAgICovXG4gIHB1YmxpYyBnZXQgZXhpc3RzKCkge1xuICAgIHJldHVybiB0aGlzLnN0YWNrICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHN0YWNrJ3MgSURcbiAgICpcbiAgICogVGhyb3dzIGlmIHRoZSBzdGFjayBkb2Vzbid0IGV4aXN0LlxuICAgKi9cbiAgcHVibGljIGdldCBzdGFja0lkKCkge1xuICAgIHRoaXMuYXNzZXJ0RXhpc3RzKCk7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2shLlN0YWNrSWQhO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFjaydzIGN1cnJlbnQgb3V0cHV0c1xuICAgKlxuICAgKiBFbXB0eSBvYmplY3QgaWYgdGhlIHN0YWNrIGRvZXNuJ3QgZXhpc3RcbiAgICovXG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKSB7IHJldHVybiB7fTsgfVxuICAgIGNvbnN0IHJlc3VsdDogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICAodGhpcy5zdGFjayEuT3V0cHV0cyB8fCBbXSkuZm9yRWFjaChvdXRwdXQgPT4ge1xuICAgICAgcmVzdWx0W291dHB1dC5PdXRwdXRLZXkhXSA9IG91dHB1dC5PdXRwdXRWYWx1ZSE7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sncyBzdGF0dXNcbiAgICpcbiAgICogU3BlY2lhbCBzdGF0dXMgTk9UX0ZPVU5EIGlmIHRoZSBzdGFjayBkb2VzIG5vdCBleGlzdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhY2tTdGF0dXMoKTogU3RhY2tTdGF0dXMge1xuICAgIGlmICghdGhpcy5leGlzdHMpIHtcbiAgICAgIHJldHVybiBuZXcgU3RhY2tTdGF0dXMoJ05PVF9GT1VORCcsICdTdGFjayBub3QgZm91bmQgZHVyaW5nIGxvb2t1cCcpO1xuICAgIH1cbiAgICByZXR1cm4gU3RhY2tTdGF0dXMuZnJvbVN0YWNrRGVzY3JpcHRpb24odGhpcy5zdGFjayEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFjaydzIGN1cnJlbnQgdGFnc1xuICAgKlxuICAgKiBFbXB0eSBsaXN0IG9mIHRoZSBzdGFjayBkb2VzIG5vdCBleGlzdFxuICAgKi9cbiAgcHVibGljIGdldCB0YWdzKCk6IENsb3VkRm9ybWF0aW9uLlRhZ3Mge1xuICAgIHJldHVybiB0aGlzLnN0YWNrPy5UYWdzIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbmFtZXMgb2YgYWxsIGN1cnJlbnQgcGFyYW1ldGVycyB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogRW1wdHkgbGlzdCBpZiB0aGUgc3RhY2sgZG9lcyBub3QgZXhpc3QuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5wYXJhbWV0ZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG5hbWVzIGFuZCB2YWx1ZXMgb2YgYWxsIGN1cnJlbnQgcGFyYW1ldGVycyB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogRW1wdHkgb2JqZWN0IGlmIHRoZSBzdGFjayBkb2VzIG5vdCBleGlzdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGFyYW1ldGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKSB7IHJldHVybiB7fTsgfVxuICAgIGNvbnN0IHJldDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGZvciAoY29uc3QgcGFyYW0gb2YgdGhpcy5zdGFjayEuUGFyYW1ldGVycyA/PyBbXSkge1xuICAgICAgcmV0W3BhcmFtLlBhcmFtZXRlcktleSFdID0gcGFyYW0uUGFyYW1ldGVyVmFsdWUhO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdGVybWluYXRpb24gcHJvdGVjdGlvbiBvZiB0aGUgc3RhY2tcbiAgICovXG4gIHB1YmxpYyBnZXQgdGVybWluYXRpb25Qcm90ZWN0aW9uKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN0YWNrPy5FbmFibGVUZXJtaW5hdGlvblByb3RlY3Rpb247XG4gIH1cblxuICBwcml2YXRlIGFzc2VydEV4aXN0cygpIHtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHN0YWNrIG5hbWVkICcke3RoaXMuc3RhY2tOYW1lfSdgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBEZXNjcmliZSBhIGNoYW5nZXNldCBpbiBDbG91ZEZvcm1hdGlvbiwgcmVnYXJkbGVzcyBvZiBpdHMgY3VycmVudCBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0gY2ZuICAgICAgIGEgQ2xvdWRGb3JtYXRpb24gY2xpZW50XG4gKiBAcGFyYW0gc3RhY2tOYW1lICAgdGhlIG5hbWUgb2YgdGhlIFN0YWNrIHRoZSBDaGFuZ2VTZXQgYmVsb25ncyB0b1xuICogQHBhcmFtIGNoYW5nZVNldE5hbWUgdGhlIG5hbWUgb2YgdGhlIENoYW5nZVNldFxuICpcbiAqIEByZXR1cm5zICAgICAgIENsb3VkRm9ybWF0aW9uIGluZm9ybWF0aW9uIGFib3V0IHRoZSBDaGFuZ2VTZXRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVzY3JpYmVDaGFuZ2VTZXQoY2ZuOiBDbG91ZEZvcm1hdGlvbiwgc3RhY2tOYW1lOiBzdHJpbmcsIGNoYW5nZVNldE5hbWU6IHN0cmluZyk6IFByb21pc2U8Q2xvdWRGb3JtYXRpb24uRGVzY3JpYmVDaGFuZ2VTZXRPdXRwdXQ+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjZm4uZGVzY3JpYmVDaGFuZ2VTZXQoeyBTdGFja05hbWU6IHN0YWNrTmFtZSwgQ2hhbmdlU2V0TmFtZTogY2hhbmdlU2V0TmFtZSB9KS5wcm9taXNlKCk7XG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuLyoqXG4gKiBXYWl0cyBmb3IgYSBmdW5jdGlvbiB0byByZXR1cm4gbm9uLSt1bmRlZmluZWQrIGJlZm9yZSByZXR1cm5pbmcuXG4gKlxuICogQHBhcmFtIHZhbHVlUHJvdmlkZXIgYSBmdW5jdGlvbiB0aGF0IHdpbGwgcmV0dXJuIGEgdmFsdWUgdGhhdCBpcyBub3QgK3VuZGVmaW5lZCsgb25jZSB0aGUgd2FpdCBzaG91bGQgYmUgb3ZlclxuICogQHBhcmFtIHRpbWVvdXQgICAgIHRoZSB0aW1lIHRvIHdhaXQgYmV0d2VlbiB0d28gY2FsbHMgdG8gK3ZhbHVlUHJvdmlkZXIrXG4gKlxuICogQHJldHVybnMgICAgICAgdGhlIHZhbHVlIHRoYXQgd2FzIHJldHVybmVkIGJ5ICt2YWx1ZVByb3ZpZGVyK1xuICovXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yPFQ+KHZhbHVlUHJvdmlkZXI6ICgpID0+IFByb21pc2U8VCB8IG51bGwgfCB1bmRlZmluZWQ+LCB0aW1lb3V0OiBudW1iZXIgPSA1MDAwKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmFsdWVQcm92aWRlcigpO1xuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXdhaXQgbmV3IFByb21pc2UoY2IgPT4gc2V0VGltZW91dChjYiwgdGltZW91dCkpO1xuICB9XG59XG5cbi8qKlxuICogV2FpdHMgZm9yIGEgQ2hhbmdlU2V0IHRvIGJlIGF2YWlsYWJsZSBmb3IgdHJpZ2dlcmluZyBhIFN0YWNrVXBkYXRlLlxuICpcbiAqIFdpbGwgcmV0dXJuIGEgY2hhbmdlc2V0IHRoYXQgaXMgZWl0aGVyIHJlYWR5IHRvIGJlIGV4ZWN1dGVkIG9yIGhhcyBubyBjaGFuZ2VzLlxuICogV2lsbCB0aHJvdyBpbiBvdGhlciBjYXNlcy5cbiAqXG4gKiBAcGFyYW0gY2ZuICAgICAgIGEgQ2xvdWRGb3JtYXRpb24gY2xpZW50XG4gKiBAcGFyYW0gc3RhY2tOYW1lICAgdGhlIG5hbWUgb2YgdGhlIFN0YWNrIHRoYXQgdGhlIENoYW5nZVNldCBiZWxvbmdzIHRvXG4gKiBAcGFyYW0gY2hhbmdlU2V0TmFtZSB0aGUgbmFtZSBvZiB0aGUgQ2hhbmdlU2V0XG4gKlxuICogQHJldHVybnMgICAgICAgdGhlIENsb3VkRm9ybWF0aW9uIGRlc2NyaXB0aW9uIG9mIHRoZSBDaGFuZ2VTZXRcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yQ2hhbmdlU2V0KGNmbjogQ2xvdWRGb3JtYXRpb24sIHN0YWNrTmFtZTogc3RyaW5nLCBjaGFuZ2VTZXROYW1lOiBzdHJpbmcpOiBQcm9taXNlPENsb3VkRm9ybWF0aW9uLkRlc2NyaWJlQ2hhbmdlU2V0T3V0cHV0PiB7XG4gIGRlYnVnKCdXYWl0aW5nIGZvciBjaGFuZ2VzZXQgJXMgb24gc3RhY2sgJXMgdG8gZmluaXNoIGNyZWF0aW5nLi4uJywgY2hhbmdlU2V0TmFtZSwgc3RhY2tOYW1lKTtcbiAgY29uc3QgcmV0ID0gYXdhaXQgd2FpdEZvcihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBhd2FpdCBkZXNjcmliZUNoYW5nZVNldChjZm4sIHN0YWNrTmFtZSwgY2hhbmdlU2V0TmFtZSk7XG4gICAgLy8gVGhlIGZvbGxvd2luZyBkb2Vzbid0IHVzZSBhIHN3aXRjaCBiZWNhdXNlIHRzYyB3aWxsIG5vdCBhbGxvdyBmYWxsLXRocm91Z2gsIFVOTEVTUyBpdCBpcyBhbGxvd3NcbiAgICAvLyBFVkVSWVdIRVJFIHRoYXQgdXNlcyB0aGlzIGxpYnJhcnkgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgd2hpY2ggaXMgdW5kZXNpcmFibGUuXG4gICAgaWYgKGRlc2NyaXB0aW9uLlN0YXR1cyA9PT0gJ0NSRUFURV9QRU5ESU5HJyB8fCBkZXNjcmlwdGlvbi5TdGF0dXMgPT09ICdDUkVBVEVfSU5fUFJPR1JFU1MnKSB7XG4gICAgICBkZWJ1ZygnQ2hhbmdlc2V0ICVzIG9uIHN0YWNrICVzIGlzIHN0aWxsIGNyZWF0aW5nJywgY2hhbmdlU2V0TmFtZSwgc3RhY2tOYW1lKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKGRlc2NyaXB0aW9uLlN0YXR1cyA9PT0gJ0NSRUFURV9DT01QTEVURScgfHwgY2hhbmdlU2V0SGFzTm9DaGFuZ2VzKGRlc2NyaXB0aW9uKSkge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIENoYW5nZVNldCAke2NoYW5nZVNldE5hbWV9IG9uICR7c3RhY2tOYW1lfTogJHtkZXNjcmlwdGlvbi5TdGF0dXMgfHwgJ05PX1NUQVRVUyd9LCAke2Rlc2NyaXB0aW9uLlN0YXR1c1JlYXNvbiB8fCAnbm8gcmVhc29uIHByb3ZpZGVkJ31gKTtcbiAgfSk7XG5cbiAgaWYgKCFyZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5nZSBzZXQgdG9vayB0b28gbG9uZyB0byBiZSBjcmVhdGVkOyBhYm9ydGluZycpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gY2hhbmdlIHNldCBoYXMgbm8gY2hhbmdlc1xuICpcbiAqIFRoaXMgbXVzdCBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIHN0YXR1cywgbm90IHRoZSAnQ2hhbmdlcycgYXJyYXkgb24gdGhlXG4gKiBvYmplY3Q7IHRoZSBsYXR0ZXIgY2FuIGJlIGVtcHR5IGJlY2F1c2Ugbm8gcmVzb3VyY2VzIHdlcmUgY2hhbmdlZCwgYnV0IGlmXG4gKiB0aGVyZSBhcmUgY2hhbmdlcyB0byBPdXRwdXRzLCB0aGUgY2hhbmdlIHNldCBjYW4gc3RpbGwgYmUgZXhlY3V0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VTZXRIYXNOb0NoYW5nZXMoZGVzY3JpcHRpb246IENsb3VkRm9ybWF0aW9uLkRlc2NyaWJlQ2hhbmdlU2V0T3V0cHV0KSB7XG4gIGNvbnN0IG5vQ2hhbmdlRXJyb3JQcmVmaXhlcyA9IFtcbiAgICAvLyBFcnJvciBtZXNzYWdlIGZvciBhIHJlZ3VsYXIgdGVtcGxhdGVcbiAgICAnVGhlIHN1Ym1pdHRlZCBpbmZvcm1hdGlvbiBkaWRuXFwndCBjb250YWluIGNoYW5nZXMuJyxcbiAgICAvLyBFcnJvciBtZXNzYWdlIHdoZW4gYSBUcmFuc2Zvcm0gaXMgaW52b2x2ZWQgKHNlZSAjMTA2NTApXG4gICAgJ05vIHVwZGF0ZXMgYXJlIHRvIGJlIHBlcmZvcm1lZC4nLFxuICBdO1xuXG4gIHJldHVybiBkZXNjcmlwdGlvbi5TdGF0dXMgPT09ICdGQUlMRUQnXG4gICAgJiYgbm9DaGFuZ2VFcnJvclByZWZpeGVzLnNvbWUocCA9PiAoZGVzY3JpcHRpb24uU3RhdHVzUmVhc29uID8/ICcnKS5zdGFydHNXaXRoKHApKTtcbn1cblxuLyoqXG4gKiBXYWl0cyBmb3IgYSBDbG91ZEZvcm1hdGlvbiBzdGFjayB0byBzdGFiaWxpemUgaW4gYSBjb21wbGV0ZS9hdmFpbGFibGUgc3RhdGVcbiAqIGFmdGVyIGEgZGVsZXRlIG9wZXJhdGlvbiBpcyBpc3N1ZWQuXG4gKlxuICogRmFpbHMgaWYgdGhlIHN0YWNrIGlzIGluIGEgRkFJTEVEIHN0YXRlLiBXaWxsIG5vdCBmYWlsIGlmIHRoZSBzdGFjayB3YXNcbiAqIGFscmVhZHkgZGVsZXRlZC5cbiAqXG4gKiBAcGFyYW0gY2ZuICAgICAgICBhIENsb3VkRm9ybWF0aW9uIGNsaWVudFxuICogQHBhcmFtIHN0YWNrTmFtZSAgICAgIHRoZSBuYW1lIG9mIHRoZSBzdGFjayB0byB3YWl0IGZvciBhZnRlciBhIGRlbGV0ZVxuICpcbiAqIEByZXR1cm5zICAgICB0aGUgQ2xvdWRGb3JtYXRpb24gZGVzY3JpcHRpb24gb2YgdGhlIHN0YWJpbGl6ZWQgc3RhY2sgYWZ0ZXIgdGhlIGRlbGV0ZSBhdHRlbXB0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yU3RhY2tEZWxldGUoXG4gIGNmbjogQ2xvdWRGb3JtYXRpb24sXG4gIHN0YWNrTmFtZTogc3RyaW5nKTogUHJvbWlzZTxDbG91ZEZvcm1hdGlvblN0YWNrIHwgdW5kZWZpbmVkPiB7XG5cbiAgY29uc3Qgc3RhY2sgPSBhd2FpdCBzdGFiaWxpemVTdGFjayhjZm4sIHN0YWNrTmFtZSk7XG4gIGlmICghc3RhY2spIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuXG4gIGNvbnN0IHN0YXR1cyA9IHN0YWNrLnN0YWNrU3RhdHVzO1xuICBpZiAoc3RhdHVzLmlzRmFpbHVyZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHN0YWNrIG5hbWVkICR7c3RhY2tOYW1lfSBpcyBpbiBhIGZhaWxlZCBzdGF0ZS4gWW91IG1heSBuZWVkIHRvIGRlbGV0ZSBpdCBmcm9tIHRoZSBBV1MgY29uc29sZSA6ICR7c3RhdHVzfWApO1xuICB9IGVsc2UgaWYgKHN0YXR1cy5pc0RlbGV0ZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBzdGFjaztcbn1cblxuLyoqXG4gKiBXYWl0cyBmb3IgYSBDbG91ZEZvcm1hdGlvbiBzdGFjayB0byBzdGFiaWxpemUgaW4gYSBjb21wbGV0ZS9hdmFpbGFibGUgc3RhdGVcbiAqIGFmdGVyIGFuIHVwZGF0ZS9jcmVhdGUgb3BlcmF0aW9uIGlzIGlzc3VlZC5cbiAqXG4gKiBGYWlscyBpZiB0aGUgc3RhY2sgaXMgaW4gYSBGQUlMRUQgc3RhdGUsIFJPTExCQUNLIHN0YXRlLCBvciBERUxFVEVEIHN0YXRlLlxuICpcbiAqIEBwYXJhbSBjZm4gICAgICAgIGEgQ2xvdWRGb3JtYXRpb24gY2xpZW50XG4gKiBAcGFyYW0gc3RhY2tOYW1lICAgICAgdGhlIG5hbWUgb2YgdGhlIHN0YWNrIHRvIHdhaXQgZm9yIGFmdGVyIGFuIHVwZGF0ZVxuICpcbiAqIEByZXR1cm5zICAgICB0aGUgQ2xvdWRGb3JtYXRpb24gZGVzY3JpcHRpb24gb2YgdGhlIHN0YWJpbGl6ZWQgc3RhY2sgYWZ0ZXIgdGhlIHVwZGF0ZSBhdHRlbXB0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yU3RhY2tEZXBsb3koXG4gIGNmbjogQ2xvdWRGb3JtYXRpb24sXG4gIHN0YWNrTmFtZTogc3RyaW5nKTogUHJvbWlzZTxDbG91ZEZvcm1hdGlvblN0YWNrIHwgdW5kZWZpbmVkPiB7XG5cbiAgY29uc3Qgc3RhY2sgPSBhd2FpdCBzdGFiaWxpemVTdGFjayhjZm4sIHN0YWNrTmFtZSk7XG4gIGlmICghc3RhY2spIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuXG4gIGNvbnN0IHN0YXR1cyA9IHN0YWNrLnN0YWNrU3RhdHVzO1xuXG4gIGlmIChzdGF0dXMuaXNDcmVhdGlvbkZhaWx1cmUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzdGFjayBuYW1lZCAke3N0YWNrTmFtZX0gZmFpbGVkIGNyZWF0aW9uLCBpdCBtYXkgbmVlZCB0byBiZSBtYW51YWxseSBkZWxldGVkIGZyb20gdGhlIEFXUyBjb25zb2xlOiAke3N0YXR1c31gKTtcbiAgfSBlbHNlIGlmICghc3RhdHVzLmlzRGVwbG95U3VjY2Vzcykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHN0YWNrIG5hbWVkICR7c3RhY2tOYW1lfSBmYWlsZWQgdG8gZGVwbG95OiAke3N0YXR1c31gKTtcbiAgfVxuXG4gIHJldHVybiBzdGFjaztcbn1cblxuLyoqXG4gKiBXYWl0IGZvciBhIHN0YWNrIHRvIGJlY29tZSBzdGFibGUgKG5vIGxvbmdlciBfSU5fUFJPR1JFU1MpLCByZXR1cm5pbmcgaXRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YWJpbGl6ZVN0YWNrKGNmbjogQ2xvdWRGb3JtYXRpb24sIHN0YWNrTmFtZTogc3RyaW5nKSB7XG4gIGRlYnVnKCdXYWl0aW5nIGZvciBzdGFjayAlcyB0byBmaW5pc2ggY3JlYXRpbmcgb3IgdXBkYXRpbmcuLi4nLCBzdGFja05hbWUpO1xuICByZXR1cm4gd2FpdEZvcihhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc3RhY2sgPSBhd2FpdCBDbG91ZEZvcm1hdGlvblN0YWNrLmxvb2t1cChjZm4sIHN0YWNrTmFtZSk7XG4gICAgaWYgKCFzdGFjay5leGlzdHMpIHtcbiAgICAgIGRlYnVnKCdTdGFjayAlcyBkb2VzIG5vdCBleGlzdCcsIHN0YWNrTmFtZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc3RhdHVzID0gc3RhY2suc3RhY2tTdGF0dXM7XG4gICAgaWYgKHN0YXR1cy5pc0luUHJvZ3Jlc3MpIHtcbiAgICAgIGRlYnVnKCdTdGFjayAlcyBoYXMgYW4gb25nb2luZyBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MgYW5kIGlzIG5vdCBzdGFibGUgKCVzKScsIHN0YWNrTmFtZSwgc3RhdHVzKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaGUgc2V0IG9mIChmb3JtYWwpIHBhcmFtZXRlcnMgdGhhdCBoYXZlIGJlZW4gZGVjbGFyZWQgaW4gYSB0ZW1wbGF0ZVxuICovXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVQYXJhbWV0ZXJzIHtcbiAgcHVibGljIHN0YXRpYyBmcm9tVGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlKSB7XG4gICAgcmV0dXJuIG5ldyBUZW1wbGF0ZVBhcmFtZXRlcnModGVtcGxhdGUuUGFyYW1ldGVycyB8fCB7fSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHBhcmFtczogUmVjb3JkPHN0cmluZywgVGVtcGxhdGVQYXJhbWV0ZXI+KSB7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHN0YWNrIHBhcmFtZXRlcnMgdG8gcGFzcyBmcm9tIHRoZSBnaXZlbiBkZXNpcmVkIHBhcmFtZXRlciB2YWx1ZXNcbiAgICpcbiAgICogV2lsbCB0aHJvdyBpZiBwYXJhbWV0ZXJzIHdpdGhvdXQgYSBEZWZhdWx0IHZhbHVlIG9yIGEgUHJldmlvdXMgdmFsdWUgYXJlIG5vdFxuICAgKiBzdXBwbGllZC5cbiAgICovXG4gIHB1YmxpYyBzdXBwbHlBbGwodXBkYXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPik6IFBhcmFtZXRlclZhbHVlcyB7XG4gICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJWYWx1ZXModGhpcy5wYXJhbXMsIHVwZGF0ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZyb20gdGhlIHRlbXBsYXRlLCB0aGUgZ2l2ZW4gZGVzaXJlZCB2YWx1ZXMgYW5kIHRoZSBjdXJyZW50IHZhbHVlcywgY2FsY3VsYXRlIHRoZSBjaGFuZ2VzIHRvIHRoZSBzdGFjayBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIFdpbGwgdGFrZSBpbnRvIGFjY291bnQgcGFyYW1ldGVycyBhbHJlYWR5IHNldCBvbiB0aGUgdGVtcGxhdGUgKHdpbGwgZW1pdFxuICAgKiAnVXNlUHJldmlvdXNWYWx1ZTogdHJ1ZScgZm9yIHRob3NlIHVubGVzcyB0aGUgdmFsdWUgaXMgY2hhbmdlZCksIGFuZCB3aWxsXG4gICAqIHRocm93IGlmIHBhcmFtZXRlcnMgd2l0aG91dCBhIERlZmF1bHQgdmFsdWUgb3IgYSBQcmV2aW91cyB2YWx1ZSBhcmUgbm90XG4gICAqIHN1cHBsaWVkLlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZUV4aXN0aW5nKHVwZGF0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4sIHByZXZpb3VzVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUGFyYW1ldGVyVmFsdWVzIHtcbiAgICByZXR1cm4gbmV3IFBhcmFtZXRlclZhbHVlcyh0aGlzLnBhcmFtcywgdXBkYXRlcywgcHJldmlvdXNWYWx1ZXMpO1xuICB9XG59XG5cbi8qKlxuICogVGhlIHNldCBvZiBwYXJhbWV0ZXJzIHdlJ3JlIGdvaW5nIHRvIHBhc3MgdG8gYSBTdGFja1xuICovXG5leHBvcnQgY2xhc3MgUGFyYW1ldGVyVmFsdWVzIHtcbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpUGFyYW1ldGVyczogQ2xvdWRGb3JtYXRpb24uUGFyYW1ldGVyW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1hbFBhcmFtczogUmVjb3JkPHN0cmluZywgVGVtcGxhdGVQYXJhbWV0ZXI+LFxuICAgIHVwZGF0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4sXG4gICAgcHJldmlvdXNWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSkge1xuXG4gICAgY29uc3QgbWlzc2luZ1JlcXVpcmVkID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgZm9ybWFsUGFyYW1dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZm9ybWFsUGFyYW1zKSkge1xuICAgICAgLy8gQ2hlY2sgdXBkYXRlcyBmaXJzdCwgdGhlbiB1c2UgdGhlIHByZXZpb3VzIHZhbHVlIChpZiBhdmFpbGFibGUpLCB0aGVuIHVzZVxuICAgICAgLy8gdGhlIGRlZmF1bHQgKGlmIGF2YWlsYWJsZSkuXG4gICAgICAvL1xuICAgICAgLy8gSWYgd2UgZG9uJ3QgZmluZCBhIHBhcmFtZXRlciB2YWx1ZSB1c2luZyBhbnkgb2YgdGhlc2UgbWV0aG9kcywgdGhlbiB0aGF0J3MgYW4gZXJyb3IuXG4gICAgICBjb25zdCB1cGRhdGVkVmFsdWUgPSB1cGRhdGVzW2tleV07XG4gICAgICBpZiAodXBkYXRlZFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy52YWx1ZXNba2V5XSA9IHVwZGF0ZWRWYWx1ZTtcbiAgICAgICAgdGhpcy5hcGlQYXJhbWV0ZXJzLnB1c2goeyBQYXJhbWV0ZXJLZXk6IGtleSwgUGFyYW1ldGVyVmFsdWU6IHVwZGF0ZXNba2V5XSB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkgaW4gcHJldmlvdXNWYWx1ZXMpIHtcbiAgICAgICAgdGhpcy52YWx1ZXNba2V5XSA9IHByZXZpb3VzVmFsdWVzW2tleV07XG4gICAgICAgIHRoaXMuYXBpUGFyYW1ldGVycy5wdXNoKHsgUGFyYW1ldGVyS2V5OiBrZXksIFVzZVByZXZpb3VzVmFsdWU6IHRydWUgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWFsUGFyYW0uRGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMudmFsdWVzW2tleV0gPSBmb3JtYWxQYXJhbS5EZWZhdWx0O1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gT2ggbm9cbiAgICAgIG1pc3NpbmdSZXF1aXJlZC5wdXNoKGtleSk7XG4gICAgfVxuXG4gICAgaWYgKG1pc3NpbmdSZXF1aXJlZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmb2xsb3dpbmcgQ2xvdWRGb3JtYXRpb24gUGFyYW1ldGVycyBhcmUgbWlzc2luZyBhIHZhbHVlOiAke21pc3NpbmdSZXF1aXJlZC5qb2luKCcsICcpfWApO1xuICAgIH1cblxuICAgIC8vIEp1c3QgYXBwZW5kIGFsbCBzdXBwbGllZCBvdmVycmlkZXMgdGhhdCBhcmVuJ3QgcmVhbGx5IGV4cGVjdGVkICh0aGlzXG4gICAgLy8gd2lsbCBmYWlsIENGTiBidXQgbWF5YmUgcGVvcGxlIG1hZGUgdHlwb3MgdGhhdCB0aGV5IHdhbnQgdG8gYmUgbm90aWZpZWRcbiAgICAvLyBvZilcbiAgICBjb25zdCB1bmtub3duUGFyYW0gPSAoW2tleSwgX106IFtzdHJpbmcsIGFueV0pID0+IHRoaXMuZm9ybWFsUGFyYW1zW2tleV0gPT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBoYXNWYWx1ZSA9IChbXywgdmFsdWVdOiBbc3RyaW5nLCBhbnldKSA9PiAhIXZhbHVlO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHVwZGF0ZXMpLmZpbHRlcih1bmtub3duUGFyYW0pLmZpbHRlcihoYXNWYWx1ZSkpIHtcbiAgICAgIHRoaXMudmFsdWVzW2tleV0gPSB2YWx1ZSE7XG4gICAgICB0aGlzLmFwaVBhcmFtZXRlcnMucHVzaCh7IFBhcmFtZXRlcktleToga2V5LCBQYXJhbWV0ZXJWYWx1ZTogdmFsdWUgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBzZXQgb2YgcGFyYW1ldGVyIHVwZGF0ZXMgd2lsbCBjaGFuZ2UgdGhlIGFjdHVhbCBzdGFjayB2YWx1ZXNcbiAgICovXG4gIHB1YmxpYyBoYXNDaGFuZ2VzKGN1cnJlbnRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQYXJhbWV0ZXJDaGFuZ2VzIHtcbiAgICAvLyBJZiBhbnkgb2YgdGhlIHBhcmFtZXRlcnMgYXJlIFNTTSBwYXJhbWV0ZXJzLCBkZXBsb3lpbmcgbXVzdCBhbHdheXMgaGFwcGVuXG4gICAgLy8gYmVjYXVzZSB3ZSBjYW4ndCBwcmVkaWN0IHdoYXQgdGhlIHZhbHVlcyB3aWxsIGJlLiBXZSB3aWxsIGFsbG93IHNvbWVcbiAgICAvLyBwYXJhbWV0ZXJzIHRvIG9wdCBvdXQgb2YgdGhpcyBjaGVjayBieSBoYXZpbmcgYSBtYWdpYyBzdHJpbmcgaW4gdGhlaXIgZGVzY3JpcHRpb24uXG4gICAgaWYgKE9iamVjdC52YWx1ZXModGhpcy5mb3JtYWxQYXJhbXMpLnNvbWUocCA9PiBwLlR5cGUuc3RhcnRzV2l0aCgnQVdTOjpTU006OlBhcmFtZXRlcjo6JykgJiYgIXAuRGVzY3JpcHRpb24/LmluY2x1ZGVzKFNTTVBBUkFNX05PX0lOVkFMSURBVEUpKSkge1xuICAgICAgcmV0dXJuICdzc20nO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSB3ZSdyZSBkaXJ0eSBpZjpcbiAgICAvLyAtIGFueSBvZiB0aGUgZXhpc3RpbmcgdmFsdWVzIGFyZSByZW1vdmVkLCBvciBjaGFuZ2VkXG4gICAgaWYgKE9iamVjdC5lbnRyaWVzKGN1cnJlbnRWYWx1ZXMpLnNvbWUoKFtrZXksIHZhbHVlXSkgPT4gIShrZXkgaW4gdGhpcy52YWx1ZXMpIHx8IHZhbHVlICE9PSB0aGlzLnZhbHVlc1trZXldKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gLSBhbnkgb2YgdGhlIHZhbHVlcyB3ZSdyZSBzZXR0aW5nIGFyZSBuZXdcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy52YWx1ZXMpLnNvbWUoa2V5ID0+ICEoa2V5IGluIGN1cnJlbnRWYWx1ZXMpKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFBhcmFtZXRlckNoYW5nZXMgPSBib29sZWFuIHwgJ3NzbSc7Il19
|
|
@@ -5,7 +5,10 @@
|
|
|
5
5
|
export declare class RewritableBlock {
|
|
6
6
|
private readonly stream;
|
|
7
7
|
private lastHeight;
|
|
8
|
+
private trailingEmptyLines;
|
|
8
9
|
constructor(stream: NodeJS.WriteStream);
|
|
9
10
|
get width(): number | undefined;
|
|
11
|
+
get height(): number | undefined;
|
|
10
12
|
displayLines(lines: string[]): void;
|
|
13
|
+
removeEmptyLines(): void;
|
|
11
14
|
}
|