@aws-cdk/integ-runner 2.185.0-alpha.0 → 2.186.0

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.
Files changed (35) hide show
  1. package/LICENSE +2 -1
  2. package/THIRD_PARTY_LICENSES +1 -1
  3. package/bin/integ-runner +3 -1
  4. package/lib/cli.js +4 -5
  5. package/lib/index.js +66 -66
  6. package/lib/logger.js +1 -1
  7. package/lib/runner/integ-test-runner.d.ts +3 -2
  8. package/lib/runner/integ-test-runner.js +33 -42
  9. package/lib/runner/integ-test-suite.d.ts +2 -2
  10. package/lib/runner/integ-test-suite.js +5 -6
  11. package/lib/runner/integration-tests.js +5 -7
  12. package/lib/runner/private/cloud-assembly.d.ts +1 -1
  13. package/lib/runner/private/cloud-assembly.js +13 -21
  14. package/lib/runner/private/integ-manifest.d.ts +1 -1
  15. package/lib/runner/private/integ-manifest.js +2 -3
  16. package/lib/runner/runner-base.d.ts +4 -4
  17. package/lib/runner/runner-base.js +9 -15
  18. package/lib/runner/snapshot-test-runner.d.ts +3 -2
  19. package/lib/runner/snapshot-test-runner.js +9 -13
  20. package/lib/utils.js +4 -6
  21. package/lib/workers/common.d.ts +2 -2
  22. package/lib/workers/common.js +2 -3
  23. package/lib/workers/extract/extract_worker.d.ts +4 -4
  24. package/lib/workers/extract/extract_worker.js +5 -7
  25. package/lib/workers/extract/index.js +4770 -9444
  26. package/lib/workers/integ-snapshot-worker.d.ts +3 -3
  27. package/lib/workers/integ-snapshot-worker.js +1 -1
  28. package/lib/workers/integ-test-worker.d.ts +2 -2
  29. package/lib/workers/integ-test-worker.js +2 -2
  30. package/lib/workers/integ-watch-worker.d.ts +2 -2
  31. package/lib/workers/integ-watch-worker.js +1 -1
  32. package/package.json +68 -83
  33. package/bin/integ-runner.d.ts +0 -1
  34. package/bin/integ-runner.js +0 -5
  35. package/build-tools/generate.sh +0 -6
@@ -20,7 +20,6 @@ const DESTRUCTIVE_CHANGES = '!!DESTRUCTIVE_CHANGES:';
20
20
  */
21
21
  class IntegRunner {
22
22
  constructor(options) {
23
- var _a, _b;
24
23
  /**
25
24
  * Default options to pass to the CDK CLI
26
25
  */
@@ -34,14 +33,14 @@ class IntegRunner {
34
33
  this.testName = this.test.testName;
35
34
  this.snapshotDir = this.test.snapshotDir;
36
35
  this.cdkContextPath = path.join(this.directory, 'cdk.context.json');
37
- this.cdk = (_a = options.cdk) !== null && _a !== void 0 ? _a : new cdk_cli_wrapper_1.CdkCliWrapper({
36
+ this.cdk = options.cdk ?? new cdk_cli_wrapper_1.CdkCliWrapper({
38
37
  directory: this.directory,
39
38
  showOutput: options.showOutput,
40
39
  env: {
41
40
  ...options.env,
42
41
  },
43
42
  });
44
- this.cdkOutDir = (_b = options.integOutDir) !== null && _b !== void 0 ? _b : this.test.temporaryOutputDir;
43
+ this.cdkOutDir = options.integOutDir ?? this.test.temporaryOutputDir;
45
44
  const testRunCommand = this.test.appCommand;
46
45
  this.cdkApp = testRunCommand.replace('{filePath}', path.relative(this.directory, this.test.fileName));
47
46
  this.profile = options.profile;
@@ -54,8 +53,7 @@ class IntegRunner {
54
53
  * Return the list of expected (i.e. existing) test cases for this integration test
55
54
  */
56
55
  expectedTests() {
57
- var _a;
58
- return (_a = this.expectedTestSuite) === null || _a === void 0 ? void 0 : _a.testSuite;
56
+ return this.expectedTestSuite?.testSuite;
59
57
  }
60
58
  /**
61
59
  * Return the list of actual (i.e. new) test cases for this integration test
@@ -69,14 +67,13 @@ class IntegRunner {
69
67
  * This will synth and then load the integration test manifest
70
68
  */
71
69
  generateActualSnapshot() {
72
- var _a;
73
70
  this.cdk.synthFast({
74
71
  execCmd: this.cdkApp.split(' '),
75
72
  env: {
76
73
  ...exports.DEFAULT_SYNTH_OPTIONS.env,
77
74
  // we don't know the "actual" context yet (this method is what generates it) so just
78
75
  // use the "expected" context. This is only run in order to read the manifest
79
- CDK_CONTEXT_JSON: JSON.stringify(this.getContext((_a = this.expectedTestSuite) === null || _a === void 0 ? void 0 : _a.synthContext)),
76
+ CDK_CONTEXT_JSON: JSON.stringify(this.getContext(this.expectedTestSuite?.synthContext)),
80
77
  },
81
78
  output: path.relative(this.directory, this.cdkOutDir),
82
79
  });
@@ -101,7 +98,7 @@ class IntegRunner {
101
98
  */
102
99
  loadManifest(dir) {
103
100
  try {
104
- const testSuite = integ_test_suite_1.IntegTestSuite.fromPath(dir !== null && dir !== void 0 ? dir : this.snapshotDir);
101
+ const testSuite = integ_test_suite_1.IntegTestSuite.fromPath(dir ?? this.snapshotDir);
105
102
  return testSuite;
106
103
  }
107
104
  catch {
@@ -133,9 +130,8 @@ class IntegRunner {
133
130
  * those in the manifest.json file
134
131
  */
135
132
  renderTraceData() {
136
- var _a;
137
133
  const traceData = new Map();
138
- const destructiveChanges = (_a = this._destructiveChanges) !== null && _a !== void 0 ? _a : [];
134
+ const destructiveChanges = this._destructiveChanges ?? [];
139
135
  destructiveChanges.forEach(change => {
140
136
  const trace = traceData.get(change.stackName);
141
137
  if (trace) {
@@ -159,12 +155,10 @@ class IntegRunner {
159
155
  * by reading the asset manifest for the stack and deleting the asset source
160
156
  */
161
157
  removeAssetsFromSnapshot() {
162
- var _a;
163
- const stacks = (_a = this.actualTestSuite.getStacksWithoutUpdateWorkflow()) !== null && _a !== void 0 ? _a : [];
158
+ const stacks = this.actualTestSuite.getStacksWithoutUpdateWorkflow() ?? [];
164
159
  const manifest = cloud_assembly_1.AssemblyManifestReader.fromPath(this.snapshotDir);
165
160
  const assets = (0, utils_1.flatten)(stacks.map(stack => {
166
- var _a;
167
- return (_a = manifest.getAssetLocationsForStack(stack)) !== null && _a !== void 0 ? _a : [];
161
+ return manifest.getAssetLocationsForStack(stack) ?? [];
168
162
  }));
169
163
  assets.forEach(asset => {
170
164
  const fileName = path.join(this.snapshotDir, asset);
@@ -322,4 +316,4 @@ exports.DEFAULT_SYNTH_OPTIONS = {
322
316
  function currentlyRecommendedAwsCdkLibFlags() {
323
317
  return recommendedFlagsFile;
324
318
  }
325
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmVyLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJydW5uZXItYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUEyYkEsZ0ZBRUM7QUE3YkQsa0RBQWtEO0FBQ2xELDZCQUE2QjtBQUM3Qiw4REFBK0Q7QUFFL0QsNENBQTRGO0FBQzVGLCtCQUErQjtBQUMvQix5REFBMEU7QUFFMUUsMEVBQTBFO0FBQzFFLG9DQUFtQztBQUNuQyw2REFBaUY7QUFHakYsTUFBTSxtQkFBbUIsR0FBRyx3QkFBd0IsQ0FBQztBQWdEckQ7O0dBRUc7QUFDSDs7R0FFRztBQUNILE1BQXNCLFdBQVc7SUF3RS9CLFlBQVksT0FBMkI7O1FBdEJ2Qzs7V0FFRztRQUNnQixnQkFBVyxHQUFzQjtZQUNsRCxZQUFZLEVBQUUsS0FBSztZQUNuQixhQUFhLEVBQUUsS0FBSztZQUNwQixnQkFBZ0IsRUFBRSxLQUFLO1NBQ3hCLENBQUM7UUFnQkEsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFFcEUsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFBLE9BQU8sQ0FBQyxHQUFHLG1DQUFJLElBQUksK0JBQWEsQ0FBQztZQUMxQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1lBQzlCLEdBQUcsRUFBRTtnQkFDSCxHQUFHLE9BQU8sQ0FB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QU1HO0FBQ0gsU0FBZ0Isa0NBQWtDO0lBQ2hELE9BQU8sb0JBQW9CLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEBjZGtsYWJzL25vLWxpdGVyYWwtcGFydGl0aW9uICovXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQ2RrQ2xpV3JhcHBlciwgSUNkayB9IGZyb20gJ0Bhd3MtY2RrL2Nkay1jbGktd3JhcHBlcic7XG5pbXBvcnQgeyBUZXN0Q2FzZSwgRGVmYXVsdENka09wdGlvbnMgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHsgQVZBSUxBQklMSVRZX1pPTkVfRkFMTEJBQ0tfQ09OVEVYVF9LRVksIFRBUkdFVF9QQVJUSVRJT05TIH0gZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IEludGVnVGVzdFN1aXRlLCBMZWdhY3lJbnRlZ1Rlc3RTdWl0ZSB9IGZyb20gJy4vaW50ZWctdGVzdC1zdWl0ZSc7XG5pbXBvcnQgeyBJbnRlZ1Rlc3QgfSBmcm9tICcuL2ludGVncmF0aW9uLXRlc3RzJztcbmltcG9ydCAqIGFzIHJlY29tbWVuZGVkRmxhZ3NGaWxlIGZyb20gJy4uL3JlY29tbWVuZGVkLWZlYXR1cmUtZmxhZ3MuanNvbic7XG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgQXNzZW1ibHlNYW5pZmVzdFJlYWRlciwgTWFuaWZlc3RUcmFjZSB9IGZyb20gJy4vcHJpdmF0ZS9jbG91ZC1hc3NlbWJseSc7XG5pbXBvcnQgeyBEZXN0cnVjdGl2ZUNoYW5nZSB9IGZyb20gJy4uL3dvcmtlcnMvY29tbW9uJztcblxuY29uc3QgREVTVFJVQ1RJVkVfQ0hBTkdFUyA9ICchIURFU1RSVUNUSVZFX0NIQU5HRVM6JztcblxuLyoqXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBhbiBpbnRlZ3JhdGlvbiB0ZXN0IHJ1bm5lclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnUnVubmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgdGVzdCB0byBydW5cbiAgICovXG4gIHJlYWRvbmx5IHRlc3Q6IEludGVnVGVzdDtcblxuICAvKipcbiAgICogVGhlIEFXUyBwcm9maWxlIHRvIHVzZSB3aGVuIGludm9raW5nIHRoZSBDREsgQ0xJXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcHJvZmlsZSBpcyBwYXNzZWQsIHRoZSBkZWZhdWx0IHByb2ZpbGUgaXMgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB3aWxsIGJlIGF2YWlsYWJsZVxuICAgKiB0byB0aGUgQ0RLIENMSVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAqL1xuICByZWFkb25seSBlbnY/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogdG1wIGNkay5vdXQgZGlyZWN0b3J5XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGlyZWN0b3J5IHdpbGwgYmUgYGNkay1pbnRlZy5vdXQuJHt0ZXN0TmFtZX1gXG4gICAqL1xuICByZWFkb25seSBpbnRlZ091dERpcj86IHN0cmluZztcblxuICAvKipcbiAgICogSW5zdGFuY2Ugb2YgdGhlIENESyBDTEkgdG8gdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ2RrQ2xpV3JhcHBlclxuICAgKi9cbiAgcmVhZG9ubHkgY2RrPzogSUNkaztcblxuICAvKipcbiAgICogU2hvdyBvdXRwdXQgZnJvbSBydW5uaW5nIGludGVncmF0aW9uIHRlc3RzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzaG93T3V0cHV0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgZGlmZmVyZW50IGNvbXBvbmVudHMgb2YgYSB0ZXN0IG5hbWVcbiAqL1xuLyoqXG4gKiBSZXByZXNlbnRzIGFuIEludGVncmF0aW9uIHRlc3QgcnVubmVyXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbnRlZ1J1bm5lciB7XG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBzbmFwc2hvdCB3aWxsIGJlIHN0b3JlZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNuYXBzaG90RGlyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIGluc3RhbmNlIG9mIHRoZSBDREsgIENMSVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNkazogSUNkaztcblxuICAvKipcbiAgICogUHJldHR5IG5hbWUgb2YgdGhlIHRlc3RcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0ZXN0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgdXNlZCBpbiB0aGUgJy0tYXBwJyBDTEkgcGFyYW1ldGVyXG4gICAqXG4gICAqIFBhdGggdG8gdGhlIGludGVnIHRlc3Qgc291cmNlIGZpbGUsIHJlbGF0aXZlIHRvIGB0aGlzLmRpcmVjdG9yeWAuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2RrQXBwOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHdoZXJlIHRoZSBgY2RrLmNvbnRleHQuanNvbmAgZmlsZVxuICAgKiB3aWxsIGJlIGNyZWF0ZWRcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBjZGtDb250ZXh0UGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGVzdCBzdWl0ZSBmcm9tIHRoZSBleGlzdGluZyBzbmFwc2hvdFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGV4cGVjdGVkVGVzdFN1aXRlPzogSW50ZWdUZXN0U3VpdGUgfCBMZWdhY3lJbnRlZ1Rlc3RTdWl0ZTtcblxuICAvKipcbiAgICogVGhlIHRlc3Qgc3VpdGUgZnJvbSB0aGUgbmV3IFwiYWN0dWFsXCIgc25hcHNob3RcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhY3R1YWxUZXN0U3VpdGU6IEludGVnVGVzdFN1aXRlIHwgTGVnYWN5SW50ZWdUZXN0U3VpdGU7XG5cbiAgLyoqXG4gICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSB0aGF0IHRoZSBpbnRlZ3JhdGlvbiB0ZXN0cyB3aWxsIGJlXG4gICAqIGV4ZWN1dGVkIGZyb21cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBkaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRlc3QgdG8gcnVuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdGVzdDogSW50ZWdUZXN0O1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgQ0RLIENMSVxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlZmF1bHRBcmdzOiBEZWZhdWx0Q2RrT3B0aW9ucyA9IHtcbiAgICBwYXRoTWV0YWRhdGE6IGZhbHNlLFxuICAgIGFzc2V0TWV0YWRhdGE6IGZhbHNlLFxuICAgIHZlcnNpb25SZXBvcnRpbmc6IGZhbHNlLFxuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBDREsgd2lsbCBiZSBzeW50aGVkIHRvXG4gICAqXG4gICAqIFJlbGF0aXZlIHRvIGN3ZC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBjZGtPdXREaXI6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcblxuICBwcm90ZWN0ZWQgX2Rlc3RydWN0aXZlQ2hhbmdlcz86IERlc3RydWN0aXZlQ2hhbmdlW107XG4gIHByaXZhdGUgbGVnYWN5Q29udGV4dD86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHByb3RlY3RlZCBpc0xlZ2FjeVRlc3Q/OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEludGVnUnVubmVyT3B0aW9ucykge1xuICAgIHRoaXMudGVzdCA9IG9wdGlvbnMudGVzdDtcbiAgICB0aGlzLmRpcmVjdG9yeSA9IHRoaXMudGVzdC5kaXJlY3Rvcnk7XG4gICAgdGhpcy50ZXN0TmFtZSA9IHRoaXMudGVzdC50ZXN0TmFtZTtcbiAgICB0aGlzLnNuYXBzaG90RGlyID0gdGhpcy50ZXN0LnNuYXBzaG90RGlyO1xuICAgIHRoaXMuY2RrQ29udGV4dFBhdGggPSBwYXRoLmpvaW4odGhpcy5kaXJlY3RvcnksICdjZGsuY29udGV4dC5qc29uJyk7XG5cbiAgICB0aGlzLmNkayA9IG9wdGlvbnMuY2RrID8/IG5ldyBDZGtDbGlXcmFwcGVyKHtcbiAgICAgIGRpcmVjdG9yeTogdGhpcy5kaXJlY3RvcnksXG4gICAgICBzaG93T3V0cHV0OiBvcHRpb25zLnNob3dPdXRwdXQsXG4gICAgICBlbnY6IHtcbiAgICAgICAgLi4ub3B0aW9ucy5lbnYsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMuY2RrT3V0RGlyID0gb3B0aW9ucy5pbnRlZ091dERpciA/PyB0aGlzLnRlc3QudGVtcG9yYXJ5T3V0cHV0RGlyO1xuXG4gICAgY29uc3QgdGVzdFJ1bkNvbW1hbmQgPSB0aGlzLnRlc3QuYXBwQ29tbWFuZDtcbiAgICB0aGlzLmNka0FwcCA9IHRlc3RSdW5Db21tYW5kLnJlcGxhY2UoJ3tmaWxlUGF0aH0nLCBwYXRoLnJlbGF0aXZlKHRoaXMuZGlyZWN0b3J5LCB0aGlzLnRlc3QuZmlsZU5hbWUpKTtcblxuICAgIHRoaXMucHJvZmlsZSA9IG9wdGlvbnMucHJvZmlsZTtcbiAgICBpZiAodGhpcy5oYXNTbmFwc2hvdCgpKSB7XG4gICAgICB0aGlzLmV4cGVjdGVkVGVzdFN1aXRlID0gdGhpcy5sb2FkTWFuaWZlc3QoKTtcbiAgICB9XG4gICAgdGhpcy5hY3R1YWxUZXN0U3VpdGUgPSB0aGlzLmdlbmVyYXRlQWN0dWFsU25hcHNob3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgZXhwZWN0ZWQgKGkuZS4gZXhpc3RpbmcpIHRlc3QgY2FzZXMgZm9yIHRoaXMgaW50ZWdyYXRpb24gdGVzdFxuICAgKi9cbiAgcHVibGljIGV4cGVjdGVkVGVzdHMoKTogeyBbdGVzdE5hbWU6IHN0cmluZ106IFRlc3RDYXNlIH0gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmV4cGVjdGVkVGVzdFN1aXRlPy50ZXN0U3VpdGU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBsaXN0IG9mIGFjdHVhbCAoaS5lLiBuZXcpIHRlc3QgY2FzZXMgZm9yIHRoaXMgaW50ZWdyYXRpb24gdGVzdFxuICAgKi9cbiAgcHVibGljIGFjdHVhbFRlc3RzKCk6IHsgW3Rlc3ROYW1lOiBzdHJpbmddOiBUZXN0Q2FzZSB9IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5hY3R1YWxUZXN0U3VpdGUudGVzdFN1aXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgbmV3IFwiYWN0dWFsXCIgc25hcHNob3Qgd2hpY2ggd2lsbCBiZSBjb21wYXJlZCB0byB0aGVcbiAgICogZXhpc3RpbmcgXCJleHBlY3RlZFwiIHNuYXBzaG90XG4gICAqIFRoaXMgd2lsbCBzeW50aCBhbmQgdGhlbiBsb2FkIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0IG1hbmlmZXN0XG4gICAqL1xuICBwdWJsaWMgZ2VuZXJhdGVBY3R1YWxTbmFwc2hvdCgpOiBJbnRlZ1Rlc3RTdWl0ZSB8IExlZ2FjeUludGVnVGVzdFN1aXRlIHtcbiAgICB0aGlzLmNkay5zeW50aEZhc3Qoe1xuICAgICAgZXhlY0NtZDogdGhpcy5jZGtBcHAuc3BsaXQoJyAnKSxcbiAgICAgIGVudjoge1xuICAgICAgICAuLi5ERUZBVUxUX1NZTlRIX09QVElPTlMuZW52LFxuICAgICAgICAvLyB3ZSBkb24ndCBrbm93IHRoZSBcImFjdHVhbFwiIGNvbnRleHQgeWV0ICh0aGlzIG1ldGhvZCBpcyB3aGF0IGdlbmVyYXRlcyBpdCkgc28ganVzdFxuICAgICAgICAvLyB1c2UgdGhlIFwiZXhwZWN0ZWRcIiBjb250ZXh0LiBUaGlzIGlzIG9ubHkgcnVuIGluIG9yZGVyIHRvIHJlYWQgdGhlIG1hbmlmZXN0XG4gICAgICAgIENES19DT05URVhUX0pTT046IEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0Q29udGV4dCh0aGlzLmV4cGVjdGVkVGVzdFN1aXRlPy5zeW50aENvbnRleHQpKSxcbiAgICAgIH0sXG4gICAgICBvdXRwdXQ6IHBhdGgucmVsYXRpdmUodGhpcy5kaXJlY3RvcnksIHRoaXMuY2RrT3V0RGlyKSxcbiAgICB9KTtcbiAgICBjb25zdCBtYW5pZmVzdCA9IHRoaXMubG9hZE1hbmlmZXN0KHRoaXMuY2RrT3V0RGlyKTtcbiAgICAvLyBhZnRlciB3ZSBsb2FkIHRoZSBtYW5pZmVzdCByZW1vdmUgdGhlIHRtcCBzbmFwc2hvdFxuICAgIC8vIHNvIHRoYXQgaXQgZG9lc24ndCBtZXNzIHVwIHRoZSByZWFsIHNuYXBzaG90IGNyZWF0ZWQgbGF0ZXJcbiAgICB0aGlzLmNsZWFudXAoKTtcbiAgICByZXR1cm4gbWFuaWZlc3Q7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGEgc25hcHNob3QgYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMgdGVzdFxuICAgKi9cbiAgcHVibGljIGhhc1NuYXBzaG90KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmcy5leGlzdHNTeW5jKHRoaXMuc25hcHNob3REaXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIGludGVnIG1hbmlmZXN0IHdoaWNoIGNvbnRhaW5zIGluZm9ybWF0aW9uXG4gICAqIG9uIGhvdyB0byBleGVjdXRlIHRoZSB0ZXN0c1xuICAgKiBGaXJzdCB3ZSB0cnkgYW5kIGxvYWQgdGhlIG1hbmlmZXN0IGZyb20gdGhlIGludGVnIG1hbmlmZXN0IChpLmUuIGludGVnLmpzb24pXG4gICAqIGZyb20gdGhlIGNsb3VkIGFzc2VtYmx5LiBJZiBpdCBkb2Vzbid0IGV4aXN0LCB0aGVuIHdlIGZhbGxiYWNrIHRvIHRoZVxuICAgKiBcImxlZ2FjeSBtb2RlXCIgYW5kIGNyZWF0ZSBhIG1hbmlmZXN0IGZyb20gcHJhZ21hXG4gICAqL1xuICBwcm90ZWN0ZWQgbG9hZE1hbmlmZXN0KGRpcj86IHN0cmluZyk6IEludGVnVGVzdFN1aXRlIHwgTGVnYWN5SW50ZWdUZXN0U3VpdGUge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZXN0U3VpdGUgPSBJbnRlZ1Rlc3RTdWl0ZS5mcm9tUGF0aChkaXIgPz8gdGhpcy5zbmFwc2hvdERpcik7XG4gICAgICByZXR1cm4gdGVzdFN1aXRlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29uc3QgdGVzdENhc2VzID0gTGVnYWN5SW50ZWdUZXN0U3VpdGUuZnJvbUxlZ2FjeSh7XG4gICAgICAgIGNkazogdGhpcy5jZGssXG4gICAgICAgIHRlc3ROYW1lOiB0aGlzLnRlc3Qubm9ybWFsaXplZFRlc3ROYW1lLFxuICAgICAgICBpbnRlZ1NvdXJjZUZpbGVQYXRoOiB0aGlzLnRlc3QuZmlsZU5hbWUsXG4gICAgICAgIGxpc3RPcHRpb25zOiB7XG4gICAgICAgICAgLi4udGhpcy5kZWZhdWx0QXJncyxcbiAgICAgICAgICBhbGw6IHRydWUsXG4gICAgICAgICAgYXBwOiB0aGlzLmNka0FwcCxcbiAgICAgICAgICBwcm9maWxlOiB0aGlzLnByb2ZpbGUsXG4gICAgICAgICAgb3V0cHV0OiBwYXRoLnJlbGF0aXZlKHRoaXMuZGlyZWN0b3J5LCB0aGlzLmNka091dERpciksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHRoaXMubGVnYWN5Q29udGV4dCA9IExlZ2FjeUludGVnVGVzdFN1aXRlLmdldFByYWdtYUNvbnRleHQodGhpcy50ZXN0LmZpbGVOYW1lKTtcbiAgICAgIHRoaXMuaXNMZWdhY3lUZXN0ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0ZXN0Q2FzZXM7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNsZWFudXAoKTogdm9pZCB7XG4gICAgY29uc3QgY2RrT3V0UGF0aCA9IHRoaXMuY2RrT3V0RGlyO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGNka091dFBhdGgpKSB7XG4gICAgICBmcy5yZW1vdmVTeW5jKGNka091dFBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGVyZSBhcmUgYW55IGRlc3RydWN0aXZlIGNoYW5nZXMgdG8gYSBzdGFjayB0aGVuIHRoaXMgd2lsbCByZWNvcmRcbiAgICogdGhvc2UgaW4gdGhlIG1hbmlmZXN0Lmpzb24gZmlsZVxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJUcmFjZURhdGEoKTogTWFuaWZlc3RUcmFjZSB7XG4gICAgY29uc3QgdHJhY2VEYXRhOiBNYW5pZmVzdFRyYWNlID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGRlc3RydWN0aXZlQ2hhbmdlcyA9IHRoaXMuX2Rlc3RydWN0aXZlQ2hhbmdlcyA/PyBbXTtcbiAgICBkZXN0cnVjdGl2ZUNoYW5nZXMuZm9yRWFjaChjaGFuZ2UgPT4ge1xuICAgICAgY29uc3QgdHJhY2UgPSB0cmFjZURhdGEuZ2V0KGNoYW5nZS5zdGFja05hbWUpO1xuICAgICAgaWYgKHRyYWNlKSB7XG4gICAgICAgIHRyYWNlLnNldChjaGFuZ2UubG9naWNhbElkLCBgJHtERVNUUlVDVElWRV9DSEFOR0VTfSAke2NoYW5nZS5pbXBhY3R9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFjZURhdGEuc2V0KGNoYW5nZS5zdGFja05hbWUsIG5ldyBNYXAoW1xuICAgICAgICAgIFtjaGFuZ2UubG9naWNhbElkLCBgJHtERVNUUlVDVElWRV9DSEFOR0VTfSAke2NoYW5nZS5pbXBhY3R9YF0sXG4gICAgICAgIF0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdHJhY2VEYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGNhc2VzIHdoZXJlIHdlIGRvIG5vdCB3YW50IHRvIHJldGFpbiB0aGUgYXNzZXRzLFxuICAgKiBmb3IgZXhhbXBsZSwgaWYgdGhlIGFzc2V0cyBhcmUgdmVyeSBsYXJnZS5cbiAgICpcbiAgICogU2luY2UgaXQgaXMgcG9zc2libGUgdG8gZGlzYWJsZSB0aGUgdXBkYXRlIHdvcmtmbG93IGZvciBpbmRpdmlkdWFsIHRlc3RcbiAgICogY2FzZXMsIHRoaXMgbmVlZHMgdG8gZmlyc3QgZ2V0IGEgbGlzdCBvZiBzdGFja3MgdGhhdCBoYXZlIHRoZSB1cGRhdGUgd29ya2Zsb3dcbiAgICogZGlzYWJsZWQgYW5kIHRoZW4gZGVsZXRlIGFzc2V0cyB0aGF0IHJlbGF0ZSB0byB0aGF0IHN0YWNrLiBJdCBkb2VzIHRoYXRcbiAgICogYnkgcmVhZGluZyB0aGUgYXNzZXQgbWFuaWZlc3QgZm9yIHRoZSBzdGFjayBhbmQgZGVsZXRpbmcgdGhlIGFzc2V0IHNvdXJjZVxuICAgKi9cbiAgcHJvdGVjdGVkIHJlbW92ZUFzc2V0c0Zyb21TbmFwc2hvdCgpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFja3MgPSB0aGlzLmFjdHVhbFRlc3RTdWl0ZS5nZXRTdGFja3NXaXRob3V0VXBkYXRlV29ya2Zsb3coKSA/PyBbXTtcbiAgICBjb25zdCBtYW5pZmVzdCA9IEFzc2VtYmx5TWFuaWZlc3RSZWFkZXIuZnJvbVBhdGgodGhpcy5zbmFwc2hvdERpcik7XG4gICAgY29uc3QgYXNzZXRzID0gZmxhdHRlbihzdGFja3MubWFwKHN0YWNrID0+IHtcbiAgICAgIHJldHVybiBtYW5pZmVzdC5nZXRBc3NldExvY2F0aW9uc0ZvclN0YWNrKHN0YWNrKSA/PyBbXTtcbiAgICB9KSk7XG5cbiAgICBhc3NldHMuZm9yRWFjaChhc3NldCA9PiB7XG4gICAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguam9pbih0aGlzLnNuYXBzaG90RGlyLCBhc3NldCk7XG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhmaWxlTmFtZSkpIHtcbiAgICAgICAgaWYgKGZzLmxzdGF0U3luYyhmaWxlTmFtZSkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIGZzLnJlbW92ZVN5bmMoZmlsZU5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZzLnVubGlua1N5bmMoZmlsZU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBhc3NldCBjYWNoZSAoLmNhY2hlLykgZmlsZXMgZnJvbSB0aGUgc25hcHNob3QuXG4gICAqIFRoZXNlIGFyZSBhIGNhY2hlIG9mIHRoZSBhc3NldCB6aXBzLCBidXQgd2UgYXJlIGZpbmUgd2l0aFxuICAgKiByZS16aXBwaW5nIG9uIGRlcGxveVxuICAgKi9cbiAgcHJvdGVjdGVkIHJlbW92ZUFzc2V0c0NhY2hlRnJvbVNuYXBzaG90KCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmModGhpcy5zbmFwc2hvdERpcik7XG4gICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5qb2luKHRoaXMuc25hcHNob3REaXIsIGZpbGUpO1xuICAgICAgaWYgKGZzLmxzdGF0U3luYyhmaWxlTmFtZSkuaXNEaXJlY3RvcnkoKSAmJiBmaWxlID09PSAnLmNhY2hlJykge1xuICAgICAgICBmcy5lbXB0eURpclN5bmMoZmlsZU5hbWUpO1xuICAgICAgICBmcy5ybWRpclN5bmMoZmlsZU5hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgbmV3IHNuYXBzaG90LlxuICAgKlxuICAgKiBJZiBsb29rdXBzIGFyZSBlbmFibGVkLCB0aGVuIHdlIG5lZWQgY3JlYXRlIHRoZSBzbmFwc2hvdCBieSBzeW50aGluZyBhZ2FpblxuICAgKiB3aXRoIHRoZSBkdW1teSBjb250ZXh0IHNvIHRoYXQgZWFjaCB0aW1lIHRoZSB0ZXN0IGlzIHJ1biBvbiBkaWZmZXJlbnQgbWFjaGluZXNcbiAgICogKGFuZCB3aXRoIGRpZmZlcmVudCBjb250ZXh0L2VudikgdGhlIGRpZmYgd2lsbCBub3QgY2hhbmdlLlxuICAgKlxuICAgKiBJZiBsb29rdXBzIGFyZSBkaXNhYmxlZCAod2hpY2ggbWVhbnMgdGhlIHN0YWNrIGlzIGVudiBhZ25vc3RpYykgdGhlbiBqdXN0IGNvcHlcbiAgICogdGhlIGFzc2VtYmx5IHRoYXQgd2FzIG91dHB1dCBieSB0aGUgZGVwbG95bWVudFxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVNuYXBzaG90KCk6IHZvaWQge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHRoaXMuc25hcHNob3REaXIpKSB7XG4gICAgICBmcy5yZW1vdmVTeW5jKHRoaXMuc25hcHNob3REaXIpO1xuICAgIH1cblxuICAgIC8vIGlmIGxvb2t1cHMgYXJlIGVuYWJsZWQgdGhlbiB3ZSBuZWVkIHRvIHN5bnRoIGFnYWluXG4gICAgLy8gdXNpbmcgZHVtbXkgY29udGV4dCBhbmQgc2F2ZSB0aGF0IGFzIHRoZSBzbmFwc2hvdFxuICAgIGlmICh0aGlzLmFjdHVhbFRlc3RTdWl0ZS5lbmFibGVMb29rdXBzKSB7XG4gICAgICB0aGlzLmNkay5zeW50aEZhc3Qoe1xuICAgICAgICBleGVjQ21kOiB0aGlzLmNka0FwcC5zcGxpdCgnICcpLFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICAuLi5ERUZBVUxUX1NZTlRIX09QVElPTlMuZW52LFxuICAgICAgICAgIENES19DT05URVhUX0pTT046IEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0Q29udGV4dChERUZBVUxUX1NZTlRIX09QVElPTlMuY29udGV4dCkpLFxuICAgICAgICB9LFxuICAgICAgICBvdXRwdXQ6IHBhdGgucmVsYXRpdmUodGhpcy5kaXJlY3RvcnksIHRoaXMuc25hcHNob3REaXIpLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZzLm1vdmVTeW5jKHRoaXMuY2RrT3V0RGlyLCB0aGlzLnNuYXBzaG90RGlyLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmNsZWFudXBTbmFwc2hvdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gc29tZSBjbGVhbnVwIHN0ZXBzIGFmdGVyIHRoZSBzbmFwc2hvdCBpcyBjcmVhdGVkXG4gICAqIEFueXRpbWUgdGhlIHNuYXBzaG90IG5lZWRzIHRvIGJlIG1vZGlmaWVkIGFmdGVyIGNyZWF0aW9uXG4gICAqIHRoZSBsb2dpYyBzaG91bGQgbGl2ZSBoZXJlLlxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhbnVwU25hcHNob3QoKTogdm9pZCB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmModGhpcy5zbmFwc2hvdERpcikpIHtcbiAgICAgIHRoaXMucmVtb3ZlQXNzZXRzRnJvbVNuYXBzaG90KCk7XG4gICAgICB0aGlzLnJlbW92ZUFzc2V0c0NhY2hlRnJvbVNuYXBzaG90KCk7XG4gICAgICBjb25zdCBhc3NlbWJseSA9IEFzc2VtYmx5TWFuaWZlc3RSZWFkZXIuZnJvbVBhdGgodGhpcy5zbmFwc2hvdERpcik7XG4gICAgICBhc3NlbWJseS5jbGVhbk1hbmlmZXN0KCk7XG4gICAgICBhc3NlbWJseS5yZWNvcmRUcmFjZSh0aGlzLnJlbmRlclRyYWNlRGF0YSgpKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGEgbGVnYWN5IHRlc3QgdGhlbiBjcmVhdGUgYW4gaW50ZWcgbWFuaWZlc3RcbiAgICAvLyBpbiB0aGUgc25hcHNob3QgZGlyZWN0b3J5IHdoaWNoIGNhbiBiZSB1c2VkIGZvciB0aGVcbiAgICAvLyB1cGRhdGUgd29ya2Zsb3cuIFNhdmUgYW55IGxlZ2FjeUNvbnRleHQgYXMgd2VsbCBzbyB0aGF0IGl0IGNhbiBiZSByZWFkXG4gICAgLy8gdGhlIG5leHQgdGltZVxuICAgIGlmICh0aGlzLmFjdHVhbFRlc3RTdWl0ZS50eXBlID09PSAnbGVnYWN5LXRlc3Qtc3VpdGUnKSB7XG4gICAgICAodGhpcy5hY3R1YWxUZXN0U3VpdGUgYXMgTGVnYWN5SW50ZWdUZXN0U3VpdGUpLnNhdmVNYW5pZmVzdCh0aGlzLnNuYXBzaG90RGlyLCB0aGlzLmxlZ2FjeUNvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDb250ZXh0KGFkZGl0aW9uYWxDb250ZXh0PzogUmVjb3JkPHN0cmluZywgYW55Pik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5jdXJyZW50bHlSZWNvbW1lbmRlZEF3c0Nka0xpYkZsYWdzKCksXG4gICAgICAuLi50aGlzLmxlZ2FjeUNvbnRleHQsXG4gICAgICAuLi5hZGRpdGlvbmFsQ29udGV4dCxcblxuICAgICAgLy8gV2Ugb3JpZ2luYWxseSBoYWQgUExBTk5FRCB0byBzZXQgdGhpcyB0byBbJ2F3cycsICdhd3MtY24nXSwgYnV0IGR1ZSB0byBhIHByb2dyYW1taW5nIG1pc3Rha2VcbiAgICAgIC8vIGl0IHdhcyBzZXQgdG8gZXZlcnl0aGluZy4gSW4gdGhpcyBQUiwgc2V0IGl0IHRvIGV2ZXJ5dGhpbmcgdG8gbm90IG1lc3MgdXAgYWxsIHRoZSBzbmFwc2hvdHMuXG4gICAgICBbVEFSR0VUX1BBUlRJVElPTlNdOiB1bmRlZmluZWQsXG5cbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0gVEhFIEZVVFVSRSBMSVZFUyBCRUxPVy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgIC8vIFJlc3RyaWN0aW5nIHRvIHRoZXNlIHRhcmdldCBwYXJ0aXRpb25zIG1ha2VzIG1vc3Qgc2VydmljZSBwcmluY2lwYWxzIHN5bnRoZXNpemUgdG9cbiAgICAgIC8vIGBzZXJ2aWNlLiR7VVJMX1NVRkZJWH1gLCB3aGljaCBpcyB0ZWNobmljYWxseSAqaW5jb3JyZWN0KiAoaXQncyBvbmx5IGBhbWF6b25hd3MuY29tYFxuICAgICAgLy8gb3IgYGFtYXpvbmF3cy5jb20uY25gLCBuZXZlciBVcmxTdWZmaXggZm9yIGFueSBvZiB0aGUgcmVzdHJpY3RlZCByZWdpb25zKSBidXQgaXQncyB3aGF0XG4gICAgICAvLyBtb3N0IGV4aXN0aW5nIGludGVnIHRlc3RzIGNvbnRhaW4sIGFuZCB3ZSB3YW50IHRvIGRpc3R1cmIgYXMgZmV3IGFzIHBvc3NpYmxlLlxuICAgICAgLy8gW1RBUkdFVF9QQVJUSVRJT05TXTogWydhd3MnLCAnYXdzLWNuJ10sXG4gICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tIEVORCBPRiBUSEUgRlVUVVJFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICB9O1xuICB9XG59XG5cbi8vIERlZmF1bHQgY29udGV4dCB3ZSBydW4gYWxsIGludGVnIHRlc3RzIHdpdGgsIHNvIHRoZXkgZG9uJ3QgZGVwZW5kIG9uIHRoZVxuLy8gYWNjb3VudCBvZiB0aGUgZXhlcmNpc2luZyB1c2VyLlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1lOVEhfT1BUSU9OUyA9IHtcbiAgY29udGV4dDoge1xuICAgIFtBVkFJTEFCSUxJVFlfWk9ORV9GQUxMQkFDS19DT05URVhUX0tFWV06IFsndGVzdC1yZWdpb24tMWEnLCAndGVzdC1yZWdpb24tMWInLCAndGVzdC1yZWdpb24tMWMnXSxcbiAgICAnYXZhaWxhYmlsaXR5LXpvbmVzOmFjY291bnQ9MTIzNDU2Nzg6cmVnaW9uPXRlc3QtcmVnaW9uJzogWyd0ZXN0LXJlZ2lvbi0xYScsICd0ZXN0LXJlZ2lvbi0xYicsICd0ZXN0LXJlZ2lvbi0xYyddLFxuICAgICdzc206YWNjb3VudD0xMjM0NTY3ODpwYXJhbWV0ZXJOYW1lPS9hd3Mvc2VydmljZS9hbWktYW1hem9uLWxpbnV4LWxhdGVzdC9hbXpuLWFtaS1odm0teDg2XzY0LWdwMjpyZWdpb249dGVzdC1yZWdpb24nOiAnYW1pLTEyMzQnLFxuICAgICdzc206YWNjb3VudD0xMjM0NTY3ODpwYXJhbWV0ZXJOYW1lPS9hd3Mvc2VydmljZS9hbWktYW1hem9uLWxpbnV4LWxhdGVzdC9hbXpuMi1hbWktaHZtLXg4Nl82NC1ncDI6cmVnaW9uPXRlc3QtcmVnaW9uJzogJ2FtaS0xMjM0JyxcbiAgICAnc3NtOmFjY291bnQ9MTIzNDU2Nzg6cGFyYW1ldGVyTmFtZT0vYXdzL3NlcnZpY2UvZWNzL29wdGltaXplZC1hbWkvYW1hem9uLWxpbnV4L3JlY29tbWVuZGVkOnJlZ2lvbj10ZXN0LXJlZ2lvbic6ICd7XCJpbWFnZV9pZFwiOiBcImFtaS0xMjM0XCJ9JyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICdhbWk6YWNjb3VudD0xMjM0NTY3ODpmaWx0ZXJzLmltYWdlLXR5cGUuMD1tYWNoaW5lOmZpbHRlcnMubmFtZS4wPWFtem4tYW1pLXZwYy1uYXQtKjpmaWx0ZXJzLnN0YXRlLjA9YXZhaWxhYmxlOm93bmVycy4wPWFtYXpvbjpyZWdpb249dGVzdC1yZWdpb24nOiAnYW1pLTEyMzQnLFxuICAgICd2cGMtcHJvdmlkZXI6YWNjb3VudD0xMjM0NTY3ODpmaWx0ZXIuaXNEZWZhdWx0PXRydWU6cmVnaW9uPXRlc3QtcmVnaW9uOnJldHVybkFzeW1tZXRyaWNTdWJuZXRzPXRydWUnOiB7XG4gICAgICB2cGNJZDogJ3ZwYy02MDkwMDkwNScsXG4gICAgICBzdWJuZXRHcm91cHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdQdWJsaWMnLFxuICAgICAgICAgIG5hbWU6ICdQdWJsaWMnLFxuICAgICAgICAgIHN1Ym5ldHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3VibmV0SWQ6ICdzdWJuZXQtZTE5NDU1Y2EnLFxuICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlab25lOiAndXMtZWFzdC0xYScsXG4gICAgICAgICAgICAgIHJvdXRlVGFibGVJZDogJ3J0Yi1lMTk0NTVjYScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdWJuZXRJZDogJ3N1Ym5ldC1lMGMyNDc5NycsXG4gICAgICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmU6ICd1cy1lYXN0LTFiJyxcbiAgICAgICAgICAgICAgcm91dGVUYWJsZUlkOiAncnRiLWUwYzI0Nzk3JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN1Ym5ldElkOiAnc3VibmV0LWNjZDc3Mzk1JyxcbiAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogJ3VzLWVhc3QtMWMnLFxuICAgICAgICAgICAgICByb3V0ZVRhYmxlSWQ6ICdydGItY2NkNzczOTUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9LFxuICBlbnY6IHtcbiAgICBDREtfSU5URUdfQUNDT1VOVDogJzEyMzQ1Njc4JyxcbiAgICBDREtfSU5URUdfUkVHSU9OOiAndGVzdC1yZWdpb24nLFxuICAgIENES19JTlRFR19IT1NURURfWk9ORV9JRDogJ1oyM0FCQzRYWVpMMDVCJyxcbiAgICBDREtfSU5URUdfSE9TVEVEX1pPTkVfTkFNRTogJ2V4YW1wbGUuY29tJyxcbiAgICBDREtfSU5URUdfRE9NQUlOX05BTUU6ICcqLmV4YW1wbGUuY29tJyxcbiAgICBDREtfSU5URUdfQ0VSVF9BUk46ICdhcm46YXdzOmFjbTp0ZXN0LXJlZ2lvbjoxMjM0NTY3ODpjZXJ0aWZpY2F0ZS84NjQ2ODIwOS1hMjcyLTU5NWQtYjgzMS0wZWZiNjQyMTI2NXonLFxuICAgIENES19JTlRFR19TVUJORVRfSUQ6ICdzdWJuZXQtMGRmZjFhMzk5ZDhmNmY5MmMnLFxuICB9LFxufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGN1cnJlbnRseSByZWNvbW1lbmRlZCBmbGFncyBmb3IgYGF3cy1jZGstbGliYC5cbiAqXG4gKiBUaGVzZSBoYXZlIGJlZW4gYnVpbHQgaW50byB0aGUgQ0xJIGF0IGJ1aWxkIHRpbWUuIElmIHRoaXMgZXZlciBnZXRzIGNoYW5nZWRcbiAqIGJhY2sgdG8gYSBkeW5hbWljIGxvYWQsIHJlbWVtYmVyIHRoYXQgdGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgYnVuZGxlZCBpbnRvXG4gKiBhIEphdmFTY3JpcHQgYnVuZGxlLCBhbmQgYF9fZGlybmFtZWAgbWlnaHQgbm90IHBvaW50IHdoZXJlIHlvdSB0aGluayBpdCBkb2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3VycmVudGx5UmVjb21tZW5kZWRBd3NDZGtMaWJGbGFncygpIHtcbiAgcmV0dXJuIHJlY29tbWVuZGVkRmxhZ3NGaWxlO1xufVxuIl19
319
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmVyLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJydW5uZXItYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE2YkEsZ0ZBRUM7QUEvYkQsa0RBQWtEO0FBQ2xELDZCQUE2QjtBQUU3Qiw4REFBeUQ7QUFFekQsNENBQTRGO0FBQzVGLCtCQUErQjtBQUMvQix5REFBMEU7QUFFMUUsMEVBQTBFO0FBQzFFLG9DQUFtQztBQUVuQyw2REFBa0U7QUFHbEUsTUFBTSxtQkFBbUIsR0FBRyx3QkFBd0IsQ0FBQztBQWdEckQ7O0dBRUc7QUFDSDs7R0FFRztBQUNILE1BQXNCLFdBQVc7SUF3RS9CLFlBQVksT0FBMkI7UUF0QnZDOztXQUVHO1FBQ2dCLGdCQUFXLEdBQXNCO1lBQ2xELFlBQVksRUFBRSxLQUFLO1lBQ25CLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLGdCQUFnQixFQUFFLEtBQUs7U0FDeEIsQ0FBQztRQWdCQSxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUVwRSxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLElBQUksSUFBSSwrQkFBYSxDQUFDO1lBQzFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7WUFDOUIsR0FBRyxFQUFFO2dCQUNILEdBQUcsT0FBTyxDQUFDLEdBQUc7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dGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAY2RrbGFicy9uby1saXRlcmFsLXBhcnRpdGlvbiAqL1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB0eXBlIHsgSUNkayB9IGZyb20gJ0Bhd3MtY2RrL2Nkay1jbGktd3JhcHBlcic7XG5pbXBvcnQgeyBDZGtDbGlXcmFwcGVyIH0gZnJvbSAnQGF3cy1jZGsvY2RrLWNsaS13cmFwcGVyJztcbmltcG9ydCB0eXBlIHsgVGVzdENhc2UsIERlZmF1bHRDZGtPcHRpb25zIH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCB7IEFWQUlMQUJJTElUWV9aT05FX0ZBTExCQUNLX0NPTlRFWFRfS0VZLCBUQVJHRVRfUEFSVElUSU9OUyB9IGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBJbnRlZ1Rlc3RTdWl0ZSwgTGVnYWN5SW50ZWdUZXN0U3VpdGUgfSBmcm9tICcuL2ludGVnLXRlc3Qtc3VpdGUnO1xuaW1wb3J0IHR5cGUgeyBJbnRlZ1Rlc3QgfSBmcm9tICcuL2ludGVncmF0aW9uLXRlc3RzJztcbmltcG9ydCAqIGFzIHJlY29tbWVuZGVkRmxhZ3NGaWxlIGZyb20gJy4uL3JlY29tbWVuZGVkLWZlYXR1cmUtZmxhZ3MuanNvbic7XG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdFRyYWNlIH0gZnJvbSAnLi9wcml2YXRlL2Nsb3VkLWFzc2VtYmx5JztcbmltcG9ydCB7IEFzc2VtYmx5TWFuaWZlc3RSZWFkZXIgfSBmcm9tICcuL3ByaXZhdGUvY2xvdWQtYXNzZW1ibHknO1xuaW1wb3J0IHR5cGUgeyBEZXN0cnVjdGl2ZUNoYW5nZSB9IGZyb20gJy4uL3dvcmtlcnMvY29tbW9uJztcblxuY29uc3QgREVTVFJVQ1RJVkVfQ0hBTkdFUyA9ICchIURFU1RSVUNUSVZFX0NIQU5HRVM6JztcblxuLyoqXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBhbiBpbnRlZ3JhdGlvbiB0ZXN0IHJ1bm5lclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnUnVubmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgdGVzdCB0byBydW5cbiAgICovXG4gIHJlYWRvbmx5IHRlc3Q6IEludGVnVGVzdDtcblxuICAvKipcbiAgICogVGhlIEFXUyBwcm9maWxlIHRvIHVzZSB3aGVuIGludm9raW5nIHRoZSBDREsgQ0xJXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcHJvZmlsZSBpcyBwYXNzZWQsIHRoZSBkZWZhdWx0IHByb2ZpbGUgaXMgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB3aWxsIGJlIGF2YWlsYWJsZVxuICAgKiB0byB0aGUgQ0RLIENMSVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAqL1xuICByZWFkb25seSBlbnY/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogdG1wIGNkay5vdXQgZGlyZWN0b3J5XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGlyZWN0b3J5IHdpbGwgYmUgYGNkay1pbnRlZy5vdXQuJHt0ZXN0TmFtZX1gXG4gICAqL1xuICByZWFkb25seSBpbnRlZ091dERpcj86IHN0cmluZztcblxuICAvKipcbiAgICogSW5zdGFuY2Ugb2YgdGhlIENESyBDTEkgdG8gdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ2RrQ2xpV3JhcHBlclxuICAgKi9cbiAgcmVhZG9ubHkgY2RrPzogSUNkaztcblxuICAvKipcbiAgICogU2hvdyBvdXRwdXQgZnJvbSBydW5uaW5nIGludGVncmF0aW9uIHRlc3RzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzaG93T3V0cHV0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgZGlmZmVyZW50IGNvbXBvbmVudHMgb2YgYSB0ZXN0IG5hbWVcbiAqL1xuLyoqXG4gKiBSZXByZXNlbnRzIGFuIEludGVncmF0aW9uIHRlc3QgcnVubmVyXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbnRlZ1J1bm5lciB7XG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBzbmFwc2hvdCB3aWxsIGJlIHN0b3JlZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNuYXBzaG90RGlyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIGluc3RhbmNlIG9mIHRoZSBDREsgIENMSVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNkazogSUNkaztcblxuICAvKipcbiAgICogUHJldHR5IG5hbWUgb2YgdGhlIHRlc3RcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0ZXN0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgdXNlZCBpbiB0aGUgJy0tYXBwJyBDTEkgcGFyYW1ldGVyXG4gICAqXG4gICAqIFBhdGggdG8gdGhlIGludGVnIHRlc3Qgc291cmNlIGZpbGUsIHJlbGF0aXZlIHRvIGB0aGlzLmRpcmVjdG9yeWAuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2RrQXBwOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHdoZXJlIHRoZSBgY2RrLmNvbnRleHQuanNvbmAgZmlsZVxuICAgKiB3aWxsIGJlIGNyZWF0ZWRcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBjZGtDb250ZXh0UGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGVzdCBzdWl0ZSBmcm9tIHRoZSBleGlzdGluZyBzbmFwc2hvdFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGV4cGVjdGVkVGVzdFN1aXRlPzogSW50ZWdUZXN0U3VpdGUgfCBMZWdhY3lJbnRlZ1Rlc3RTdWl0ZTtcblxuICAvKipcbiAgICogVGhlIHRlc3Qgc3VpdGUgZnJvbSB0aGUgbmV3IFwiYWN0dWFsXCIgc25hcHNob3RcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhY3R1YWxUZXN0U3VpdGU6IEludGVnVGVzdFN1aXRlIHwgTGVnYWN5SW50ZWdUZXN0U3VpdGU7XG5cbiAgLyoqXG4gICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSB0aGF0IHRoZSBpbnRlZ3JhdGlvbiB0ZXN0cyB3aWxsIGJlXG4gICAqIGV4ZWN1dGVkIGZyb21cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBkaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRlc3QgdG8gcnVuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdGVzdDogSW50ZWdUZXN0O1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgQ0RLIENMSVxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlZmF1bHRBcmdzOiBEZWZhdWx0Q2RrT3B0aW9ucyA9IHtcbiAgICBwYXRoTWV0YWRhdGE6IGZhbHNlLFxuICAgIGFzc2V0TWV0YWRhdGE6IGZhbHNlLFxuICAgIHZlcnNpb25SZXBvcnRpbmc6IGZhbHNlLFxuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBDREsgd2lsbCBiZSBzeW50aGVkIHRvXG4gICAqXG4gICAqIFJlbGF0aXZlIHRvIGN3ZC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBjZGtPdXREaXI6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcblxuICBwcm90ZWN0ZWQgX2Rlc3RydWN0aXZlQ2hhbmdlcz86IERlc3RydWN0aXZlQ2hhbmdlW107XG4gIHByaXZhdGUgbGVnYWN5Q29udGV4dD86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHByb3RlY3RlZCBpc0xlZ2FjeVRlc3Q/OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEludGVnUnVubmVyT3B0aW9ucykge1xuICAgIHRoaXMudGVzdCA9IG9wdGlvbnMudGVzdDtcbiAgICB0aGlzLmRpcmVjdG9yeSA9IHRoaXMudGVzdC5kaXJlY3Rvcnk7XG4gICAgdGhpcy50ZXN0TmFtZSA9IHRoaXMudGVzdC50ZXN0TmFtZTtcbiAgICB0aGlzLnNuYXBzaG90RGlyID0gdGhpcy50ZXN0LnNuYXBzaG90RGlyO1xuICAgIHRoaXMuY2RrQ29udGV4dFBhdGggPSBwYXRoLmpvaW4odGhpcy5kaXJlY3RvcnksICdjZGsuY29udGV4dC5qc29uJyk7XG5cbiAgICB0aGlzLmNkayA9IG9wdGlvbnMuY2RrID8/IG5ldyBDZGtDbGlXcmFwcGVyKHtcbiAgICAgIGRpcmVjdG9yeTogdGhpcy5kaXJlY3RvcnksXG4gICAgICBzaG93T3V0cHV0OiBvcHRpb25zLnNob3dPdXRwdXQsXG4gICAgICBlbnY6IHtcbiAgICAgICAgLi4ub3B0aW9ucy5lbnYsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMuY2RrT3V0RGlyID0gb3B0aW9ucy5pbnRlZ091dERpciA/PyB0aGlzLnRlc3QudGVtcG9yYXJ5T3V0cHV0RGlyO1xuXG4gICAgY29uc3QgdGVzdFJ1bkNvbW1hbmQgPSB0aGlzLnRlc3QuYXBwQ29tbWFuZDtcbiAgICB0aGlzLmNka0FwcCA9IHRlc3RSdW5Db21tYW5kLnJlcGxhY2UoJ3tmaWxlUGF0aH0nLCBwYXRoLnJlbGF0aXZlKHRoaXMuZGlyZWN0b3J5LCB0aGlzLnRlc3QuZmlsZU5hbWUpKTtcblxuICAgIHRoaXMucHJvZmlsZSA9IG9wdGlvbnMucHJvZmlsZTtcbiAgICBpZiAodGhpcy5oYXNTbmFwc2hvdCgpKSB7XG4gICAgICB0aGlzLmV4cGVjdGVkVGVzdFN1aXRlID0gdGhpcy5sb2FkTWFuaWZlc3QoKTtcbiAgICB9XG4gICAgdGhpcy5hY3R1YWxUZXN0U3VpdGUgPSB0aGlzLmdlbmVyYXRlQWN0dWFsU25hcHNob3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgZXhwZWN0ZWQgKGkuZS4gZXhpc3RpbmcpIHRlc3QgY2FzZXMgZm9yIHRoaXMgaW50ZWdyYXRpb24gdGVzdFxuICAgKi9cbiAgcHVibGljIGV4cGVjdGVkVGVzdHMoKTogeyBbdGVzdE5hbWU6IHN0cmluZ106IFRlc3RDYXNlIH0gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmV4cGVjdGVkVGVzdFN1aXRlPy50ZXN0U3VpdGU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBsaXN0IG9mIGFjdHVhbCAoaS5lLiBuZXcpIHRlc3QgY2FzZXMgZm9yIHRoaXMgaW50ZWdyYXRpb24gdGVzdFxuICAgKi9cbiAgcHVibGljIGFjdHVhbFRlc3RzKCk6IHsgW3Rlc3ROYW1lOiBzdHJpbmddOiBUZXN0Q2FzZSB9IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5hY3R1YWxUZXN0U3VpdGUudGVzdFN1aXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgbmV3IFwiYWN0dWFsXCIgc25hcHNob3Qgd2hpY2ggd2lsbCBiZSBjb21wYXJlZCB0byB0aGVcbiAgICogZXhpc3RpbmcgXCJleHBlY3RlZFwiIHNuYXBzaG90XG4gICAqIFRoaXMgd2lsbCBzeW50aCBhbmQgdGhlbiBsb2FkIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0IG1hbmlmZXN0XG4gICAqL1xuICBwdWJsaWMgZ2VuZXJhdGVBY3R1YWxTbmFwc2hvdCgpOiBJbnRlZ1Rlc3RTdWl0ZSB8IExlZ2FjeUludGVnVGVzdFN1aXRlIHtcbiAgICB0aGlzLmNkay5zeW50aEZhc3Qoe1xuICAgICAgZXhlY0NtZDogdGhpcy5jZGtBcHAuc3BsaXQoJyAnKSxcbiAgICAgIGVudjoge1xuICAgICAgICAuLi5ERUZBVUxUX1NZTlRIX09QVElPTlMuZW52LFxuICAgICAgICAvLyB3ZSBkb24ndCBrbm93IHRoZSBcImFjdHVhbFwiIGNvbnRleHQgeWV0ICh0aGlzIG1ldGhvZCBpcyB3aGF0IGdlbmVyYXRlcyBpdCkgc28ganVzdFxuICAgICAgICAvLyB1c2UgdGhlIFwiZXhwZWN0ZWRcIiBjb250ZXh0LiBUaGlzIGlzIG9ubHkgcnVuIGluIG9yZGVyIHRvIHJlYWQgdGhlIG1hbmlmZXN0XG4gICAgICAgIENES19DT05URVhUX0pTT046IEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0Q29udGV4dCh0aGlzLmV4cGVjdGVkVGVzdFN1aXRlPy5zeW50aENvbnRleHQpKSxcbiAgICAgIH0sXG4gICAgICBvdXRwdXQ6IHBhdGgucmVsYXRpdmUodGhpcy5kaXJlY3RvcnksIHRoaXMuY2RrT3V0RGlyKSxcbiAgICB9KTtcbiAgICBjb25zdCBtYW5pZmVzdCA9IHRoaXMubG9hZE1hbmlmZXN0KHRoaXMuY2RrT3V0RGlyKTtcbiAgICAvLyBhZnRlciB3ZSBsb2FkIHRoZSBtYW5pZmVzdCByZW1vdmUgdGhlIHRtcCBzbmFwc2hvdFxuICAgIC8vIHNvIHRoYXQgaXQgZG9lc24ndCBtZXNzIHVwIHRoZSByZWFsIHNuYXBzaG90IGNyZWF0ZWQgbGF0ZXJcbiAgICB0aGlzLmNsZWFudXAoKTtcbiAgICByZXR1cm4gbWFuaWZlc3Q7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGEgc25hcHNob3QgYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMgdGVzdFxuICAgKi9cbiAgcHVibGljIGhhc1NuYXBzaG90KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmcy5leGlzdHNTeW5jKHRoaXMuc25hcHNob3REaXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIGludGVnIG1hbmlmZXN0IHdoaWNoIGNvbnRhaW5zIGluZm9ybWF0aW9uXG4gICAqIG9uIGhvdyB0byBleGVjdXRlIHRoZSB0ZXN0c1xuICAgKiBGaXJzdCB3ZSB0cnkgYW5kIGxvYWQgdGhlIG1hbmlmZXN0IGZyb20gdGhlIGludGVnIG1hbmlmZXN0IChpLmUuIGludGVnLmpzb24pXG4gICAqIGZyb20gdGhlIGNsb3VkIGFzc2VtYmx5LiBJZiBpdCBkb2Vzbid0IGV4aXN0LCB0aGVuIHdlIGZhbGxiYWNrIHRvIHRoZVxuICAgKiBcImxlZ2FjeSBtb2RlXCIgYW5kIGNyZWF0ZSBhIG1hbmlmZXN0IGZyb20gcHJhZ21hXG4gICAqL1xuICBwcm90ZWN0ZWQgbG9hZE1hbmlmZXN0KGRpcj86IHN0cmluZyk6IEludGVnVGVzdFN1aXRlIHwgTGVnYWN5SW50ZWdUZXN0U3VpdGUge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZXN0U3VpdGUgPSBJbnRlZ1Rlc3RTdWl0ZS5mcm9tUGF0aChkaXIgPz8gdGhpcy5zbmFwc2hvdERpcik7XG4gICAgICByZXR1cm4gdGVzdFN1aXRlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29uc3QgdGVzdENhc2VzID0gTGVnYWN5SW50ZWdUZXN0U3VpdGUuZnJvbUxlZ2FjeSh7XG4gICAgICAgIGNkazogdGhpcy5jZGssXG4gICAgICAgIHRlc3ROYW1lOiB0aGlzLnRlc3Qubm9ybWFsaXplZFRlc3ROYW1lLFxuICAgICAgICBpbnRlZ1NvdXJjZUZpbGVQYXRoOiB0aGlzLnRlc3QuZmlsZU5hbWUsXG4gICAgICAgIGxpc3RPcHRpb25zOiB7XG4gICAgICAgICAgLi4udGhpcy5kZWZhdWx0QXJncyxcbiAgICAgICAgICBhbGw6IHRydWUsXG4gICAgICAgICAgYXBwOiB0aGlzLmNka0FwcCxcbiAgICAgICAgICBwcm9maWxlOiB0aGlzLnByb2ZpbGUsXG4gICAgICAgICAgb3V0cHV0OiBwYXRoLnJlbGF0aXZlKHRoaXMuZGlyZWN0b3J5LCB0aGlzLmNka091dERpciksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHRoaXMubGVnYWN5Q29udGV4dCA9IExlZ2FjeUludGVnVGVzdFN1aXRlLmdldFByYWdtYUNvbnRleHQodGhpcy50ZXN0LmZpbGVOYW1lKTtcbiAgICAgIHRoaXMuaXNMZWdhY3lUZXN0ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0ZXN0Q2FzZXM7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNsZWFudXAoKTogdm9pZCB7XG4gICAgY29uc3QgY2RrT3V0UGF0aCA9IHRoaXMuY2RrT3V0RGlyO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGNka091dFBhdGgpKSB7XG4gICAgICBmcy5yZW1vdmVTeW5jKGNka091dFBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGVyZSBhcmUgYW55IGRlc3RydWN0aXZlIGNoYW5nZXMgdG8gYSBzdGFjayB0aGVuIHRoaXMgd2lsbCByZWNvcmRcbiAgICogdGhvc2UgaW4gdGhlIG1hbmlmZXN0Lmpzb24gZmlsZVxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJUcmFjZURhdGEoKTogTWFuaWZlc3RUcmFjZSB7XG4gICAgY29uc3QgdHJhY2VEYXRhOiBNYW5pZmVzdFRyYWNlID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGRlc3RydWN0aXZlQ2hhbmdlcyA9IHRoaXMuX2Rlc3RydWN0aXZlQ2hhbmdlcyA/PyBbXTtcbiAgICBkZXN0cnVjdGl2ZUNoYW5nZXMuZm9yRWFjaChjaGFuZ2UgPT4ge1xuICAgICAgY29uc3QgdHJhY2UgPSB0cmFjZURhdGEuZ2V0KGNoYW5nZS5zdGFja05hbWUpO1xuICAgICAgaWYgKHRyYWNlKSB7XG4gICAgICAgIHRyYWNlLnNldChjaGFuZ2UubG9naWNhbElkLCBgJHtERVNUUlVDVElWRV9DSEFOR0VTfSAke2NoYW5nZS5pbXBhY3R9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFjZURhdGEuc2V0KGNoYW5nZS5zdGFja05hbWUsIG5ldyBNYXAoW1xuICAgICAgICAgIFtjaGFuZ2UubG9naWNhbElkLCBgJHtERVNUUlVDVElWRV9DSEFOR0VTfSAke2NoYW5nZS5pbXBhY3R9YF0sXG4gICAgICAgIF0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdHJhY2VEYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGNhc2VzIHdoZXJlIHdlIGRvIG5vdCB3YW50IHRvIHJldGFpbiB0aGUgYXNzZXRzLFxuICAgKiBmb3IgZXhhbXBsZSwgaWYgdGhlIGFzc2V0cyBhcmUgdmVyeSBsYXJnZS5cbiAgICpcbiAgICogU2luY2UgaXQgaXMgcG9zc2libGUgdG8gZGlzYWJsZSB0aGUgdXBkYXRlIHdvcmtmbG93IGZvciBpbmRpdmlkdWFsIHRlc3RcbiAgICogY2FzZXMsIHRoaXMgbmVlZHMgdG8gZmlyc3QgZ2V0IGEgbGlzdCBvZiBzdGFja3MgdGhhdCBoYXZlIHRoZSB1cGRhdGUgd29ya2Zsb3dcbiAgICogZGlzYWJsZWQgYW5kIHRoZW4gZGVsZXRlIGFzc2V0cyB0aGF0IHJlbGF0ZSB0byB0aGF0IHN0YWNrLiBJdCBkb2VzIHRoYXRcbiAgICogYnkgcmVhZGluZyB0aGUgYXNzZXQgbWFuaWZlc3QgZm9yIHRoZSBzdGFjayBhbmQgZGVsZXRpbmcgdGhlIGFzc2V0IHNvdXJjZVxuICAgKi9cbiAgcHJvdGVjdGVkIHJlbW92ZUFzc2V0c0Zyb21TbmFwc2hvdCgpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFja3MgPSB0aGlzLmFjdHVhbFRlc3RTdWl0ZS5nZXRTdGFja3NXaXRob3V0VXBkYXRlV29ya2Zsb3coKSA/PyBbXTtcbiAgICBjb25zdCBtYW5pZmVzdCA9IEFzc2VtYmx5TWFuaWZlc3RSZWFkZXIuZnJvbVBhdGgodGhpcy5zbmFwc2hvdERpcik7XG4gICAgY29uc3QgYXNzZXRzID0gZmxhdHRlbihzdGFja3MubWFwKHN0YWNrID0+IHtcbiAgICAgIHJldHVybiBtYW5pZmVzdC5nZXRBc3NldExvY2F0aW9uc0ZvclN0YWNrKHN0YWNrKSA/PyBbXTtcbiAgICB9KSk7XG5cbiAgICBhc3NldHMuZm9yRWFjaChhc3NldCA9PiB7XG4gICAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguam9pbih0aGlzLnNuYXBzaG90RGlyLCBhc3NldCk7XG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhmaWxlTmFtZSkpIHtcbiAgICAgICAgaWYgKGZzLmxzdGF0U3luYyhmaWxlTmFtZSkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIGZzLnJlbW92ZVN5bmMoZmlsZU5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZzLnVubGlua1N5bmMoZmlsZU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBhc3NldCBjYWNoZSAoLmNhY2hlLykgZmlsZXMgZnJvbSB0aGUgc25hcHNob3QuXG4gICAqIFRoZXNlIGFyZSBhIGNhY2hlIG9mIHRoZSBhc3NldCB6aXBzLCBidXQgd2UgYXJlIGZpbmUgd2l0aFxuICAgKiByZS16aXBwaW5nIG9uIGRlcGxveVxuICAgKi9cbiAgcHJvdGVjdGVkIHJlbW92ZUFzc2V0c0NhY2hlRnJvbVNuYXBzaG90KCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmModGhpcy5zbmFwc2hvdERpcik7XG4gICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5qb2luKHRoaXMuc25hcHNob3REaXIsIGZpbGUpO1xuICAgICAgaWYgKGZzLmxzdGF0U3luYyhmaWxlTmFtZSkuaXNEaXJlY3RvcnkoKSAmJiBmaWxlID09PSAnLmNhY2hlJykge1xuICAgICAgICBmcy5lbXB0eURpclN5bmMoZmlsZU5hbWUpO1xuICAgICAgICBmcy5ybWRpclN5bmMoZmlsZU5hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgbmV3IHNuYXBzaG90LlxuICAgKlxuICAgKiBJZiBsb29rdXBzIGFyZSBlbmFibGVkLCB0aGVuIHdlIG5lZWQgY3JlYXRlIHRoZSBzbmFwc2hvdCBieSBzeW50aGluZyBhZ2FpblxuICAgKiB3aXRoIHRoZSBkdW1teSBjb250ZXh0IHNvIHRoYXQgZWFjaCB0aW1lIHRoZSB0ZXN0IGlzIHJ1biBvbiBkaWZmZXJlbnQgbWFjaGluZXNcbiAgICogKGFuZCB3aXRoIGRpZmZlcmVudCBjb250ZXh0L2VudikgdGhlIGRpZmYgd2lsbCBub3QgY2hhbmdlLlxuICAgKlxuICAgKiBJZiBsb29rdXBzIGFyZSBkaXNhYmxlZCAod2hpY2ggbWVhbnMgdGhlIHN0YWNrIGlzIGVudiBhZ25vc3RpYykgdGhlbiBqdXN0IGNvcHlcbiAgICogdGhlIGFzc2VtYmx5IHRoYXQgd2FzIG91dHB1dCBieSB0aGUgZGVwbG95bWVudFxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVNuYXBzaG90KCk6IHZvaWQge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHRoaXMuc25hcHNob3REaXIpKSB7XG4gICAgICBmcy5yZW1vdmVTeW5jKHRoaXMuc25hcHNob3REaXIpO1xuICAgIH1cblxuICAgIC8vIGlmIGxvb2t1cHMgYXJlIGVuYWJsZWQgdGhlbiB3ZSBuZWVkIHRvIHN5bnRoIGFnYWluXG4gICAgLy8gdXNpbmcgZHVtbXkgY29udGV4dCBhbmQgc2F2ZSB0aGF0IGFzIHRoZSBzbmFwc2hvdFxuICAgIGlmICh0aGlzLmFjdHVhbFRlc3RTdWl0ZS5lbmFibGVMb29rdXBzKSB7XG4gICAgICB0aGlzLmNkay5zeW50aEZhc3Qoe1xuICAgICAgICBleGVjQ21kOiB0aGlzLmNka0FwcC5zcGxpdCgnICcpLFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICAuLi5ERUZBVUxUX1NZTlRIX09QVElPTlMuZW52LFxuICAgICAgICAgIENES19DT05URVhUX0pTT046IEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0Q29udGV4dChERUZBVUxUX1NZTlRIX09QVElPTlMuY29udGV4dCkpLFxuICAgICAgICB9LFxuICAgICAgICBvdXRwdXQ6IHBhdGgucmVsYXRpdmUodGhpcy5kaXJlY3RvcnksIHRoaXMuc25hcHNob3REaXIpLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZzLm1vdmVTeW5jKHRoaXMuY2RrT3V0RGlyLCB0aGlzLnNuYXBzaG90RGlyLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmNsZWFudXBTbmFwc2hvdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gc29tZSBjbGVhbnVwIHN0ZXBzIGFmdGVyIHRoZSBzbmFwc2hvdCBpcyBjcmVhdGVkXG4gICAqIEFueXRpbWUgdGhlIHNuYXBzaG90IG5lZWRzIHRvIGJlIG1vZGlmaWVkIGFmdGVyIGNyZWF0aW9uXG4gICAqIHRoZSBsb2dpYyBzaG91bGQgbGl2ZSBoZXJlLlxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhbnVwU25hcHNob3QoKTogdm9pZCB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmModGhpcy5zbmFwc2hvdERpcikpIHtcbiAgICAgIHRoaXMucmVtb3ZlQXNzZXRzRnJvbVNuYXBzaG90KCk7XG4gICAgICB0aGlzLnJlbW92ZUFzc2V0c0NhY2hlRnJvbVNuYXBzaG90KCk7XG4gICAgICBjb25zdCBhc3NlbWJseSA9IEFzc2VtYmx5TWFuaWZlc3RSZWFkZXIuZnJvbVBhdGgodGhpcy5zbmFwc2hvdERpcik7XG4gICAgICBhc3NlbWJseS5jbGVhbk1hbmlmZXN0KCk7XG4gICAgICBhc3NlbWJseS5yZWNvcmRUcmFjZSh0aGlzLnJlbmRlclRyYWNlRGF0YSgpKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGEgbGVnYWN5IHRlc3QgdGhlbiBjcmVhdGUgYW4gaW50ZWcgbWFuaWZlc3RcbiAgICAvLyBpbiB0aGUgc25hcHNob3QgZGlyZWN0b3J5IHdoaWNoIGNhbiBiZSB1c2VkIGZvciB0aGVcbiAgICAvLyB1cGRhdGUgd29ya2Zsb3cuIFNhdmUgYW55IGxlZ2FjeUNvbnRleHQgYXMgd2VsbCBzbyB0aGF0IGl0IGNhbiBiZSByZWFkXG4gICAgLy8gdGhlIG5leHQgdGltZVxuICAgIGlmICh0aGlzLmFjdHVhbFRlc3RTdWl0ZS50eXBlID09PSAnbGVnYWN5LXRlc3Qtc3VpdGUnKSB7XG4gICAgICAodGhpcy5hY3R1YWxUZXN0U3VpdGUgYXMgTGVnYWN5SW50ZWdUZXN0U3VpdGUpLnNhdmVNYW5pZmVzdCh0aGlzLnNuYXBzaG90RGlyLCB0aGlzLmxlZ2FjeUNvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDb250ZXh0KGFkZGl0aW9uYWxDb250ZXh0PzogUmVjb3JkPHN0cmluZywgYW55Pik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5jdXJyZW50bHlSZWNvbW1lbmRlZEF3c0Nka0xpYkZsYWdzKCksXG4gICAgICAuLi50aGlzLmxlZ2FjeUNvbnRleHQsXG4gICAgICAuLi5hZGRpdGlvbmFsQ29udGV4dCxcblxuICAgICAgLy8gV2Ugb3JpZ2luYWxseSBoYWQgUExBTk5FRCB0byBzZXQgdGhpcyB0byBbJ2F3cycsICdhd3MtY24nXSwgYnV0IGR1ZSB0byBhIHByb2dyYW1taW5nIG1pc3Rha2VcbiAgICAgIC8vIGl0IHdhcyBzZXQgdG8gZXZlcnl0aGluZy4gSW4gdGhpcyBQUiwgc2V0IGl0IHRvIGV2ZXJ5dGhpbmcgdG8gbm90IG1lc3MgdXAgYWxsIHRoZSBzbmFwc2hvdHMuXG4gICAgICBbVEFSR0VUX1BBUlRJVElPTlNdOiB1bmRlZmluZWQsXG5cbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0gVEhFIEZVVFVSRSBMSVZFUyBCRUxPVy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgIC8vIFJlc3RyaWN0aW5nIHRvIHRoZXNlIHRhcmdldCBwYXJ0aXRpb25zIG1ha2VzIG1vc3Qgc2VydmljZSBwcmluY2lwYWxzIHN5bnRoZXNpemUgdG9cbiAgICAgIC8vIGBzZXJ2aWNlLiR7VVJMX1NVRkZJWH1gLCB3aGljaCBpcyB0ZWNobmljYWxseSAqaW5jb3JyZWN0KiAoaXQncyBvbmx5IGBhbWF6b25hd3MuY29tYFxuICAgICAgLy8gb3IgYGFtYXpvbmF3cy5jb20uY25gLCBuZXZlciBVcmxTdWZmaXggZm9yIGFueSBvZiB0aGUgcmVzdHJpY3RlZCByZWdpb25zKSBidXQgaXQncyB3aGF0XG4gICAgICAvLyBtb3N0IGV4aXN0aW5nIGludGVnIHRlc3RzIGNvbnRhaW4sIGFuZCB3ZSB3YW50IHRvIGRpc3R1cmIgYXMgZmV3IGFzIHBvc3NpYmxlLlxuICAgICAgLy8gW1RBUkdFVF9QQVJUSVRJT05TXTogWydhd3MnLCAnYXdzLWNuJ10sXG4gICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tIEVORCBPRiBUSEUgRlVUVVJFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICB9O1xuICB9XG59XG5cbi8vIERlZmF1bHQgY29udGV4dCB3ZSBydW4gYWxsIGludGVnIHRlc3RzIHdpdGgsIHNvIHRoZXkgZG9uJ3QgZGVwZW5kIG9uIHRoZVxuLy8gYWNjb3VudCBvZiB0aGUgZXhlcmNpc2luZyB1c2VyLlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1lOVEhfT1BUSU9OUyA9IHtcbiAgY29udGV4dDoge1xuICAgIFtBVkFJTEFCSUxJVFlfWk9ORV9GQUxMQkFDS19DT05URVhUX0tFWV06IFsndGVzdC1yZWdpb24tMWEnLCAndGVzdC1yZWdpb24tMWInLCAndGVzdC1yZWdpb24tMWMnXSxcbiAgICAnYXZhaWxhYmlsaXR5LXpvbmVzOmFjY291bnQ9MTIzNDU2Nzg6cmVnaW9uPXRlc3QtcmVnaW9uJzogWyd0ZXN0LXJlZ2lvbi0xYScsICd0ZXN0LXJlZ2lvbi0xYicsICd0ZXN0LXJlZ2lvbi0xYyddLFxuICAgICdzc206YWNjb3VudD0xMjM0NTY3ODpwYXJhbWV0ZXJOYW1lPS9hd3Mvc2VydmljZS9hbWktYW1hem9uLWxpbnV4LWxhdGVzdC9hbXpuLWFtaS1odm0teDg2XzY0LWdwMjpyZWdpb249dGVzdC1yZWdpb24nOiAnYW1pLTEyMzQnLFxuICAgICdzc206YWNjb3VudD0xMjM0NTY3ODpwYXJhbWV0ZXJOYW1lPS9hd3Mvc2VydmljZS9hbWktYW1hem9uLWxpbnV4LWxhdGVzdC9hbXpuMi1hbWktaHZtLXg4Nl82NC1ncDI6cmVnaW9uPXRlc3QtcmVnaW9uJzogJ2FtaS0xMjM0JyxcbiAgICAnc3NtOmFjY291bnQ9MTIzNDU2Nzg6cGFyYW1ldGVyTmFtZT0vYXdzL3NlcnZpY2UvZWNzL29wdGltaXplZC1hbWkvYW1hem9uLWxpbnV4L3JlY29tbWVuZGVkOnJlZ2lvbj10ZXN0LXJlZ2lvbic6ICd7XCJpbWFnZV9pZFwiOiBcImFtaS0xMjM0XCJ9JyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICdhbWk6YWNjb3VudD0xMjM0NTY3ODpmaWx0ZXJzLmltYWdlLXR5cGUuMD1tYWNoaW5lOmZpbHRlcnMubmFtZS4wPWFtem4tYW1pLXZwYy1uYXQtKjpmaWx0ZXJzLnN0YXRlLjA9YXZhaWxhYmxlOm93bmVycy4wPWFtYXpvbjpyZWdpb249dGVzdC1yZWdpb24nOiAnYW1pLTEyMzQnLFxuICAgICd2cGMtcHJvdmlkZXI6YWNjb3VudD0xMjM0NTY3ODpmaWx0ZXIuaXNEZWZhdWx0PXRydWU6cmVnaW9uPXRlc3QtcmVnaW9uOnJldHVybkFzeW1tZXRyaWNTdWJuZXRzPXRydWUnOiB7XG4gICAgICB2cGNJZDogJ3ZwYy02MDkwMDkwNScsXG4gICAgICBzdWJuZXRHcm91cHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdQdWJsaWMnLFxuICAgICAgICAgIG5hbWU6ICdQdWJsaWMnLFxuICAgICAgICAgIHN1Ym5ldHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3VibmV0SWQ6ICdzdWJuZXQtZTE5NDU1Y2EnLFxuICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlab25lOiAndXMtZWFzdC0xYScsXG4gICAgICAgICAgICAgIHJvdXRlVGFibGVJZDogJ3J0Yi1lMTk0NTVjYScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdWJuZXRJZDogJ3N1Ym5ldC1lMGMyNDc5NycsXG4gICAgICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmU6ICd1cy1lYXN0LTFiJyxcbiAgICAgICAgICAgICAgcm91dGVUYWJsZUlkOiAncnRiLWUwYzI0Nzk3JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN1Ym5ldElkOiAnc3VibmV0LWNjZDc3Mzk1JyxcbiAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogJ3VzLWVhc3QtMWMnLFxuICAgICAgICAgICAgICByb3V0ZVRhYmxlSWQ6ICdydGItY2NkNzczOTUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9LFxuICBlbnY6IHtcbiAgICBDREtfSU5URUdfQUNDT1VOVDogJzEyMzQ1Njc4JyxcbiAgICBDREtfSU5URUdfUkVHSU9OOiAndGVzdC1yZWdpb24nLFxuICAgIENES19JTlRFR19IT1NURURfWk9ORV9JRDogJ1oyM0FCQzRYWVpMMDVCJyxcbiAgICBDREtfSU5URUdfSE9TVEVEX1pPTkVfTkFNRTogJ2V4YW1wbGUuY29tJyxcbiAgICBDREtfSU5URUdfRE9NQUlOX05BTUU6ICcqLmV4YW1wbGUuY29tJyxcbiAgICBDREtfSU5URUdfQ0VSVF9BUk46ICdhcm46YXdzOmFjbTp0ZXN0LXJlZ2lvbjoxMjM0NTY3ODpjZXJ0aWZpY2F0ZS84NjQ2ODIwOS1hMjcyLTU5NWQtYjgzMS0wZWZiNjQyMTI2NXonLFxuICAgIENES19JTlRFR19TVUJORVRfSUQ6ICdzdWJuZXQtMGRmZjFhMzk5ZDhmNmY5MmMnLFxuICB9LFxufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGN1cnJlbnRseSByZWNvbW1lbmRlZCBmbGFncyBmb3IgYGF3cy1jZGstbGliYC5cbiAqXG4gKiBUaGVzZSBoYXZlIGJlZW4gYnVpbHQgaW50byB0aGUgQ0xJIGF0IGJ1aWxkIHRpbWUuIElmIHRoaXMgZXZlciBnZXRzIGNoYW5nZWRcbiAqIGJhY2sgdG8gYSBkeW5hbWljIGxvYWQsIHJlbWVtYmVyIHRoYXQgdGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgYnVuZGxlZCBpbnRvXG4gKiBhIEphdmFTY3JpcHQgYnVuZGxlLCBhbmQgYF9fZGlybmFtZWAgbWlnaHQgbm90IHBvaW50IHdoZXJlIHlvdSB0aGluayBpdCBkb2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3VycmVudGx5UmVjb21tZW5kZWRBd3NDZGtMaWJGbGFncygpIHtcbiAgcmV0dXJuIHJlY29tbWVuZGVkRmxhZ3NGaWxlO1xufVxuIl19
@@ -1,5 +1,6 @@
1
- import { IntegRunnerOptions, IntegRunner } from './runner-base';
2
- import { Diagnostic, DestructiveChange, SnapshotVerificationOptions } from '../workers/common';
1
+ import type { IntegRunnerOptions } from './runner-base';
2
+ import { IntegRunner } from './runner-base';
3
+ import type { Diagnostic, DestructiveChange, SnapshotVerificationOptions } from '../workers/common';
3
4
  /**
4
5
  * Runner for snapshot tests. This handles orchestrating
5
6
  * the validation of the integration test snapshots
@@ -23,10 +23,9 @@ class IntegSnapshotRunner extends runner_base_1.IntegRunner {
23
23
  * @returns any diagnostics and any destructive changes
24
24
  */
25
25
  testSnapshot(options = {}) {
26
- var _a;
27
26
  let doClean = true;
28
27
  try {
29
- const expectedSnapshotAssembly = this.getSnapshotAssembly(this.snapshotDir, (_a = this.expectedTestSuite) === null || _a === void 0 ? void 0 : _a.stacks);
28
+ const expectedSnapshotAssembly = this.getSnapshotAssembly(this.snapshotDir, this.expectedTestSuite?.stacks);
30
29
  // synth the integration test
31
30
  // FIXME: ideally we should not need to run this again if
32
31
  // the cdkOutDir exists already, but for some reason generateActualSnapshot
@@ -113,8 +112,7 @@ class IntegSnapshotRunner extends runner_base_1.IntegRunner {
113
112
  * @returns a list of resource types or undefined if none are found
114
113
  */
115
114
  getAllowedDestroyTypesForStack(stackId) {
116
- var _a;
117
- for (const testCase of Object.values((_a = this.actualTests()) !== null && _a !== void 0 ? _a : {})) {
115
+ for (const testCase of Object.values(this.actualTests() ?? {})) {
118
116
  if (testCase.stacks.includes(stackId)) {
119
117
  return testCase.allowDestroy;
120
118
  }
@@ -129,14 +127,13 @@ class IntegSnapshotRunner extends runner_base_1.IntegRunner {
129
127
  * @returns any diagnostics and any destructive changes
130
128
  */
131
129
  diffAssembly(expected, actual) {
132
- var _a, _b, _c, _d;
133
130
  const failures = [];
134
131
  const destructiveChanges = [];
135
132
  // check if there is a CFN template in the current snapshot
136
133
  // that does not exist in the "actual" snapshot
137
134
  for (const [stackId, stack] of Object.entries(expected)) {
138
135
  for (const templateId of Object.keys(stack.templates)) {
139
- if (!((_a = actual[stackId]) === null || _a === void 0 ? void 0 : _a.templates[templateId])) {
136
+ if (!actual[stackId]?.templates[templateId]) {
140
137
  failures.push({
141
138
  testName: this.testName,
142
139
  stackName: templateId,
@@ -150,7 +147,7 @@ class IntegSnapshotRunner extends runner_base_1.IntegRunner {
150
147
  for (const templateId of Object.keys(stack.templates)) {
151
148
  // check if there is a CFN template in the "actual" snapshot
152
149
  // that does not exist in the current snapshot
153
- if (!((_b = expected[stackId]) === null || _b === void 0 ? void 0 : _b.templates[templateId])) {
150
+ if (!expected[stackId]?.templates[templateId]) {
154
151
  failures.push({
155
152
  testName: this.testName,
156
153
  stackName: templateId,
@@ -161,7 +158,7 @@ class IntegSnapshotRunner extends runner_base_1.IntegRunner {
161
158
  }
162
159
  else {
163
160
  const config = {
164
- diffAssets: (_c = this.actualTestSuite.getOptionsForStack(stackId)) === null || _c === void 0 ? void 0 : _c.diffAssets,
161
+ diffAssets: this.actualTestSuite.getOptionsForStack(stackId)?.diffAssets,
165
162
  };
166
163
  let actualTemplate = actual[stackId].templates[templateId];
167
164
  let expectedTemplate = expected[stackId].templates[templateId];
@@ -174,15 +171,14 @@ class IntegSnapshotRunner extends runner_base_1.IntegRunner {
174
171
  }
175
172
  const templateDiff = (0, cloudformation_diff_1.fullDiff)(expectedTemplate, actualTemplate);
176
173
  if (!templateDiff.isEmpty) {
177
- const allowedDestroyTypes = (_d = this.getAllowedDestroyTypesForStack(stackId)) !== null && _d !== void 0 ? _d : [];
174
+ const allowedDestroyTypes = this.getAllowedDestroyTypesForStack(stackId) ?? [];
178
175
  // go through all the resource differences and check for any
179
176
  // "destructive" changes
180
177
  templateDiff.resources.forEachDifference((logicalId, change) => {
181
- var _a, _b, _c;
182
178
  // if the change is a removal it will not show up as a 'changeImpact'
183
179
  // so need to check for it separately, unless it is a resourceType that
184
180
  // has been "allowed" to be destroyed
185
- const resourceType = (_b = (_a = change.oldValue) === null || _a === void 0 ? void 0 : _a.Type) !== null && _b !== void 0 ? _b : (_c = change.newValue) === null || _c === void 0 ? void 0 : _c.Type;
181
+ const resourceType = change.oldValue?.Type ?? change.newValue?.Type;
186
182
  if (resourceType && allowedDestroyTypes.includes(resourceType)) {
187
183
  return;
188
184
  }
@@ -240,7 +236,7 @@ class IntegSnapshotRunner extends runner_base_1.IntegRunner {
240
236
  const stringSubstitutions = new Array();
241
237
  // Find assets via parameters (for LegacyStackSynthesizer)
242
238
  const paramRe = /^AssetParameters([a-zA-Z0-9]{64})(S3Bucket|S3VersionKey|ArtifactHash)([a-zA-Z0-9]{8})$/;
243
- for (const paramName of Object.keys((template === null || template === void 0 ? void 0 : template.Parameters) || {})) {
239
+ for (const paramName of Object.keys(template?.Parameters || {})) {
244
240
  const m = paramRe.exec(paramName);
245
241
  if (!m) {
246
242
  continue;
@@ -322,4 +318,4 @@ class StringWritable extends stream_1.Writable {
322
318
  callback();
323
319
  }
324
320
  }
325
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3QtdGVzdC1ydW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzbmFwc2hvdC10ZXN0LXJ1bm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBNkI7QUFDN0IsbUNBQW1EO0FBQ25ELG1EQUErQztBQUMvQyxzRUFBK0c7QUFDL0csNkRBQWtFO0FBQ2xFLCtDQUF1RjtBQUN2Riw4Q0FBaUg7QUFxQmpIOzs7R0FHRztBQUNILE1BQWEsbUJBQW9CLFNBQVEseUJBQVc7SUFDbEQsWUFBWSxPQUEyQjtRQUNyQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksWUFBWSxDQUFDLFVBQXVDLEVBQUU7O1FBQzNELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUM7WUFDSCxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQUEsSUFBSSxDQUFDLGlCQUFpQiwwQ0FBRSxNQUFNLENBQUMsQ0FBQztZQUU1Ryw2QkFBNkI7WUFDN0IseURBQXlEO1lBQ3pELDJFQUEyRTtZQUMzRSw2RUFBNkU7WUFDN0Usb0NBQW9DO1lBQ3BDLE1BQU0sR0FBRyxHQUFHO2dCQUNWLEdBQUcsbUNBQXFCLENBQUMsR0FBRztnQkFDNUIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO29CQUMvQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxtQ0FBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7aUJBQzNFLENBQUMsQ0FBQzthQUNKLENBQUM7WUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztnQkFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztnQkFDL0Is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QyxLQUFLLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUM7UUFDbkIsUUFBUSxFQUFFLENBQUM7SUFDYixDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQXdDO1FBQzdDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNqQyxRQUFRLEVBQUUsQ0FBQztJQUNiLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBXcml0YWJsZSwgV3JpdGFibGVPcHRpb25zIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IFN0cmluZ0RlY29kZXIgfSBmcm9tICdzdHJpbmdfZGVjb2Rlcic7XG5pbXBvcnQgeyBmdWxsRGlmZiwgZm9ybWF0RGlmZmVyZW5jZXMsIFJlc291cmNlRGlmZmVyZW5jZSwgUmVzb3VyY2VJbXBhY3QgfSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB7IEFzc2VtYmx5TWFuaWZlc3RSZWFkZXIgfSBmcm9tICcuL3ByaXZhdGUvY2xvdWQtYXNzZW1ibHknO1xuaW1wb3J0IHsgSW50ZWdSdW5uZXJPcHRpb25zLCBJbnRlZ1J1bm5lciwgREVGQVVMVF9TWU5USF9PUFRJT05TIH0gZnJvbSAnLi9ydW5uZXItYmFzZSc7XG5pbXBvcnQgeyBEaWFnbm9zdGljLCBEaWFnbm9zdGljUmVhc29uLCBEZXN0cnVjdGl2ZUNoYW5nZSwgU25hcHNob3RWZXJpZmljYXRpb25PcHRpb25zIH0gZnJvbSAnLi4vd29ya2Vycy9jb21tb24nO1xuXG5pbnRlcmZhY2UgU25hcHNob3RBc3NlbWJseSB7XG4gIC8qKlxuICAgKiBNYXAgb2Ygc3RhY2tzIHRoYXQgYXJlIHBhcnQgb2YgdGhpcyBhc3NlbWJseVxuICAgKi9cbiAgW3N0YWNrTmFtZTogc3RyaW5nXToge1xuICAgIC8qKlxuICAgICAqIEFsbCB0ZW1wbGF0ZXMgZm9yIHRoaXMgc3RhY2ssIGluY2x1ZGluZyBuZXN0ZWQgc3RhY2tzXG4gICAgICovXG4gICAgdGVtcGxhdGVzOiB7XG4gICAgICBbdGVtcGxhdGVJZDogc3RyaW5nXTogYW55O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGFzc2V0IElkcyB0aGF0IGFyZSB1c2VkIGJ5IHRoaXMgYXNzZW1ibHlcbiAgICAgKi9cbiAgICBhc3NldHM6IHN0cmluZ1tdO1xuICB9O1xufVxuXG4vKipcbiAqIFJ1bm5lciBmb3Igc25hcHNob3QgdGVzdHMuIFRoaXMgaGFuZGxlcyBvcmNoZXN0cmF0aW5nXG4gKiB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgaW50ZWdyYXRpb24gdGVzdCBzbmFwc2hvdHNcbiAqL1xuZXhwb3J0IGNsYXNzIEludGVnU25hcHNob3RSdW5uZXIgZXh0ZW5kcyBJbnRlZ1J1bm5lciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEludGVnUnVubmVyT3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bnRoIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0cyBhbmQgY29tcGFyZSB0aGUgdGVtcGxhdGVzXG4gICAqIHRvIHRoZSBleGlzdGluZyBzbmFwc2hvdC5cbiAgICpcbiAgICogQHJldHVybnMgYW55IGRpYWdub3N0aWNzIGFuZCBhbnkgZGVzdHJ1Y3RpdmUgY2hhbmdlc1xuICAgKi9cbiAgcHVibGljIHRlc3RTbmFwc2hvdChvcHRpb25zOiBTbmFwc2hvdFZlcmlmaWNhdGlvbk9wdGlvbnMgPSB7fSk6IHsgZGlhZ25vc3RpY3M6IERpYWdub3N0aWNbXTsgZGVzdHJ1Y3RpdmVDaGFuZ2VzOiBEZXN0cnVjdGl2ZUNoYW5nZVtdIH0ge1xuICAgIGxldCBkb0NsZWFuID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZXhwZWN0ZWRTbmFwc2hvdEFzc2VtYmx5ID0gdGhpcy5nZXRTbmFwc2hvdEFzc2VtYmx5KHRoaXMuc25hcHNob3REaXIsIHRoaXMuZXhwZWN0ZWRUZXN0U3VpdGU/LnN0YWNrcyk7XG5cbiAgICAgIC8vIHN5bnRoIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0XG4gICAgICAvLyBGSVhNRTogaWRlYWxseSB3ZSBzaG91bGQgbm90IG5lZWQgdG8gcnVuIHRoaXMgYWdhaW4gaWZcbiAgICAgIC8vIHRoZSBjZGtPdXREaXIgZXhpc3RzIGFscmVhZHksIGJ1dCBmb3Igc29tZSByZWFzb24gZ2VuZXJhdGVBY3R1YWxTbmFwc2hvdFxuICAgICAgLy8gZ2VuZXJhdGVzIGFuIGluY29ycmVjdCBzbmFwc2hvdCBhbmQgSSBoYXZlIG5vIGlkZWEgd2h5IHNvIHN5bnRoIGFnYWluIGhlcmVcbiAgICAgIC8vIHRvIHByb2R1Y2UgdGhlIFwiY29ycmVjdFwiIHNuYXBzaG90XG4gICAgICBjb25zdCBlbnYgPSB7XG4gICAgICAgIC4uLkRFRkFVTFRfU1lOVEhfT1BUSU9OUy5lbnYsXG4gICAgICAgIENES19DT05URVhUX0pTT046IEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0Q29udGV4dCh7XG4gICAgICAgICAgLi4udGhpcy5hY3R1YWxUZXN0U3VpdGUuZW5hYmxlTG9va3VwcyA/IERFRkFVTFRfU1lOVEhfT1BUSU9OUy5jb250ZXh0IDoge30sXG4gICAgICAgIH0pKSxcbiAgICAgIH07XG4gICAgICB0aGlzLmNkay5zeW50aEZhc3Qoe1xuICAgICAgICBleGVjQ21kOiB0aGlzLmNka0FwcC5zcGxpdCgnICcpLFxuICAgICAgICBlbnYsXG4gICAgICAgIG91dHB1dDogcGF0aC5yZWxhdGl2ZSh0aGlzLmRpcmVjdG9yeSwgdGhpcy5jZGtPdXREaXIpLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIHJlYWQgdGhlIFwiYWN0dWFsXCIgc25hcHNob3RcbiAgICAgIGNvbnN0IGFjdHVhbFNuYXBzaG90QXNzZW1ibHkgPSB0aGlzLmdldFNuYXBzaG90QXNzZW1ibHkodGhpcy5jZGtPdXREaXIsIHRoaXMuYWN0dWFsVGVzdFN1aXRlLnN0YWNrcyk7XG5cbiAgICAgIC8vIGRpZmYgdGhlIGV4aXN0aW5nIHNuYXBzaG90IChleHBlY3RlZCkgd2l0aCB0aGUgaW50ZWdyYXRpb24gdGVzdCAoYWN0dWFsKVxuICAgICAgY29uc3QgZGlhZ25vc3RpY3MgPSB0aGlzLmRpZmZBc3NlbWJseShleHBlY3RlZFNuYXBzaG90QXNzZW1ibHksIGFjdHVhbFNuYXBzaG90QXNzZW1ibHkpO1xuXG4gICAgICBpZiAoZGlhZ25vc3RpY3MuZGlhZ25vc3RpY3MubGVuZ3RoKSB7XG4gICAgICAgIC8vIEF0dGFjaCBhZGRpdGlvbmFsIG1lc3NhZ2VzIHRvIHRoZSBmaXJzdCBkaWFnbm9zdGljXG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWxNZXNzYWdlczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICBpZiAob3B0aW9ucy5yZXRhaW4pIHtcbiAgICAgICAgICBhZGRpdGlvbmFsTWVzc2FnZXMucHVzaChcbiAgICAgICAgICAgIGAoRmFpbHVyZSByZXRhaW5lZCkgRXhwZWN0ZWQ6ICR7cGF0aC5yZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCB0aGlzLnNuYXBzaG90RGlyKX1gLFxuICAgICAgICAgICAgYCAgICAgICAgICAgICAgICAgICBBY3R1YWw6ICAgJHtwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIHRoaXMuY2RrT3V0RGlyKX1gLFxuICAgICAgICAgICksXG4gICAgICAgICAgZG9DbGVhbiA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIC8vIFNob3cgdGhlIGNvbW1hbmQgbmVjZXNzYXJ5IHRvIHJlcHJvIHRoaXNcbiAgICAgICAgICBjb25zdCBlbnZTZXQgPSBPYmplY3QuZW50cmllcyhlbnYpXG4gICAgICAgICAgICAuZmlsdGVyKChbaywgX10pID0+IGsgIT09ICdDREtfQ09OVEVYVF9KU09OJylcbiAgICAgICAgICAgIC5tYXAoKFtrLCB2XSkgPT4gYCR7a309JyR7dn0nYCk7XG4gICAgICAgICAgY29uc3QgZW52Q21kID0gZW52U2V0Lmxlbmd0aCA+IDAgPyBbJ2VudicsIC4uLmVudlNldF0gOiBbXTtcblxuICAgICAgICAgIGFkZGl0aW9uYWxNZXNzYWdlcy5wdXNoKFxuICAgICAgICAgICAgJ1JlcHJvOicsXG4gICAgICAgICAgICBgICAke1suLi5lbnZDbWQsICdjZGsgc3ludGgnLCBgLWEgJyR7dGhpcy5jZGtBcHB9J2AsIGAtbyAnJHt0aGlzLmNka091dERpcn0nYCwgLi4uT2JqZWN0LmVudHJpZXModGhpcy5nZXRDb250ZXh0KCkpLmZsYXRNYXAoKFtrLCB2XSkgPT4gdHlwZW9mIHYgIT09ICdvYmplY3QnID8gW2AtYyAnJHtrfT0ke3Z9J2BdIDogW10pXS5qb2luKCcgJyl9YCxcblxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBkaWFnbm9zdGljcy5kaWFnbm9zdGljc1swXSA9IHtcbiAgICAgICAgICAuLi5kaWFnbm9zdGljcy5kaWFnbm9zdGljc1swXSxcbiAgICAgICAgICBhZGRpdGlvbmFsTWVzc2FnZXMsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkaWFnbm9zdGljcztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoZG9DbGVhbikge1xuICAgICAgICB0aGlzLmNsZWFudXAoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9yIGEgZ2l2ZW4gY2xvdWQgYXNzZW1ibHkgcmV0dXJuIGEgY29sbGVjdGlvbiBvZiBhbGwgdGVtcGxhdGVzXG4gICAqIHRoYXQgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIHNuYXBzaG90IGFuZCBhbnkgcmVxdWlyZWQgbWV0YSBkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0gY2xvdWRBc3NlbWJseURpciBUaGUgZGlyZWN0b3J5IG9mIHRoZSBjbG91ZCBhc3NlbWJseSB0byBsb29rIGZvciBzbmFwc2hvdHNcbiAgICogQHBhcmFtIHBpY2tTdGFja3MgUGljayBvbmx5IHRoZXNlIHN0YWNrcyBmcm9tIHRoZSBjbG91ZCBhc3NlbWJseVxuICAgKiBAcmV0dXJucyBBIFNuYXBzaG90QXNzZW1ibHksIHRoZSBjb2xsZWN0aW9uIG9mIGFsbCB0ZW1wbGF0ZXMgaW4gdGhpcyBzbmFwc2hvdCBhbmQgcmVxdWlyZWQgbWV0YSBkYXRhXG4gICAqL1xuICBwcml2YXRlIGdldFNuYXBzaG90QXNzZW1ibHkoY2xvdWRBc3NlbWJseURpcjogc3RyaW5nLCBwaWNrU3RhY2tzOiBzdHJpbmdbXSA9IFtdKTogU25hcHNob3RBc3NlbWJseSB7XG4gICAgY29uc3QgYXNzZW1ibHkgPSB0aGlzLnJlYWRBc3NlbWJseShjbG91ZEFzc2VtYmx5RGlyKTtcbiAgICBjb25zdCBzdGFja3MgPSBhc3NlbWJseS5zdGFja3M7XG4gICAgY29uc3Qgc25hcHNob3RzOiBTbmFwc2hvdEFzc2VtYmx5ID0ge307XG4gICAgZm9yIChjb25zdCBbc3RhY2tOYW1lLCBzdGFja1RlbXBsYXRlXSBvZiBPYmplY3QuZW50cmllcyhzdGFja3MpKSB7XG4gICAgICBpZiAocGlja1N0YWNrcy5pbmNsdWRlcyhzdGFja05hbWUpKSB7XG4gICAgICAgIGNvbnN0IG1hbmlmZXN0ID0gQXNzZW1ibHlNYW5pZmVzdFJlYWRlci5mcm9tUGF0aChjbG91ZEFzc2VtYmx5RGlyKTtcbiAgICAgICAgY29uc3QgYXNzZXRzID0gbWFuaWZlc3QuZ2V0QXNzZXRJZHNGb3JTdGFjayhzdGFja05hbWUpO1xuXG4gICAgICAgIHNuYXBzaG90c1tzdGFja05hbWVdID0ge1xuICAgICAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAgICAgW3N0YWNrTmFtZV06IHN0YWNrVGVtcGxhdGUsXG4gICAgICAgICAgICAuLi5hc3NlbWJseS5nZXROZXN0ZWRTdGFja3NGb3JTdGFjayhzdGFja05hbWUpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXNzZXRzLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzbmFwc2hvdHM7XG4gIH1cblxuICAvKipcbiAgICogRm9yIGEgZ2l2ZW4gc3RhY2sgcmV0dXJuIGFsbCByZXNvdXJjZSB0eXBlcyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIGRlc3Ryb3llZFxuICAgKiBhcyBwYXJ0IG9mIGEgc3RhY2sgdXBkYXRlXG4gICAqXG4gICAqIEBwYXJhbSBzdGFja0lkIHRoZSBzdGFjayBpZFxuICAgKiBAcmV0dXJucyBhIGxpc3Qgb2YgcmVzb3VyY2UgdHlwZXMgb3IgdW5kZWZpbmVkIGlmIG5vbmUgYXJlIGZvdW5kXG4gICAqL1xuICBwcml2YXRlIGdldEFsbG93ZWREZXN0cm95VHlwZXNGb3JTdGFjayhzdGFja0lkOiBzdHJpbmcpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgZm9yIChjb25zdCB0ZXN0Q2FzZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuYWN0dWFsVGVzdHMoKSA/PyB7fSkpIHtcbiAgICAgIGlmICh0ZXN0Q2FzZS5zdGFja3MuaW5jbHVkZXMoc3RhY2tJZCkpIHtcbiAgICAgICAgcmV0dXJuIHRlc3RDYXNlLmFsbG93RGVzdHJveTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGFueSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBleGlzdGluZyBhbmQgZXhwZWN0ZWQgc25hcHNob3RzXG4gICAqXG4gICAqIEBwYXJhbSBleGlzdGluZyAtIHRoZSBleGlzdGluZyAoZXhwZWN0ZWQpIHNuYXBzaG90XG4gICAqIEBwYXJhbSBhY3R1YWwgLSB0aGUgbmV3IChhY3R1YWwpIHNuYXBzaG90XG4gICAqIEByZXR1cm5zIGFueSBkaWFnbm9zdGljcyBhbmQgYW55IGRlc3RydWN0aXZlIGNoYW5nZXNcbiAgICovXG4gIHByaXZhdGUgZGlmZkFzc2VtYmx5KFxuICAgIGV4cGVjdGVkOiBTbmFwc2hvdEFzc2VtYmx5LFxuICAgIGFjdHVhbDogU25hcHNob3RBc3NlbWJseSxcbiAgKTogeyBkaWFnbm9zdGljczogRGlhZ25vc3RpY1tdOyBkZXN0cnVjdGl2ZUNoYW5nZXM6IERlc3RydWN0aXZlQ2hhbmdlW10gfSB7XG4gICAgY29uc3QgZmFpbHVyZXM6IERpYWdub3N0aWNbXSA9IFtdO1xuICAgIGNvbnN0IGRlc3RydWN0aXZlQ2hhbmdlczogRGVzdHJ1Y3RpdmVDaGFuZ2VbXSA9IFtdO1xuXG4gICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYSBDRk4gdGVtcGxhdGUgaW4gdGhlIGN1cnJlbnQgc25hcHNob3RcbiAgICAvLyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBcImFjdHVhbFwiIHNuYXBzaG90XG4gICAgZm9yIChjb25zdCBbc3RhY2tJZCwgc3RhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGVkKSkge1xuICAgICAgZm9yIChjb25zdCB0ZW1wbGF0ZUlkIG9mIE9iamVjdC5rZXlzKHN0YWNrLnRlbXBsYXRlcykpIHtcbiAgICAgICAgaWYgKCFhY3R1YWxbc3RhY2tJZF0/LnRlbXBsYXRlc1t0ZW1wbGF0ZUlkXSkge1xuICAgICAgICAgIGZhaWx1cmVzLnB1c2goe1xuICAgICAgICAgICAgdGVzdE5hbWU6IHRoaXMudGVzdE5hbWUsXG4gICAgICAgICAgICBzdGFja05hbWU6IHRlbXBsYXRlSWQsXG4gICAgICAgICAgICByZWFzb246IERpYWdub3N0aWNSZWFzb24uU05BUFNIT1RfRkFJTEVELFxuICAgICAgICAgICAgbWVzc2FnZTogYCR7dGVtcGxhdGVJZH0gZXhpc3RzIGluIHNuYXBzaG90LCBidXQgbm90IGluIGFjdHVhbGAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtzdGFja0lkLCBzdGFja10gb2YgT2JqZWN0LmVudHJpZXMoYWN0dWFsKSkge1xuICAgICAgZm9yIChjb25zdCB0ZW1wbGF0ZUlkIG9mIE9iamVjdC5rZXlzKHN0YWNrLnRlbXBsYXRlcykpIHtcbiAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgQ0ZOIHRlbXBsYXRlIGluIHRoZSBcImFjdHVhbFwiIHNuYXBzaG90XG4gICAgICAvLyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBjdXJyZW50IHNuYXBzaG90XG4gICAgICAgIGlmICghZXhwZWN0ZWRbc3RhY2tJZF0/LnRlbXBsYXRlc1t0ZW1wbGF0ZUlkXSkge1xuICAgICAgICAgIGZhaWx1cmVzLnB1c2goe1xuICAgICAgICAgICAgdGVzdE5hbWU6IHRoaXMudGVzdE5hbWUsXG4gICAgICAgICAgICBzdGFja05hbWU6IHRlbXBsYXRlSWQsXG4gICAgICAgICAgICByZWFzb246IERpYWdub3N0aWNSZWFzb24uU05BUFNIT1RfRkFJTEVELFxuICAgICAgICAgICAgbWVzc2FnZTogYCR7dGVtcGxhdGVJZH0gZG9lcyBub3QgZXhpc3QgaW4gc25hcHNob3QsIGJ1dCBkb2VzIGluIGFjdHVhbGAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgICAgICAgZGlmZkFzc2V0czogdGhpcy5hY3R1YWxUZXN0U3VpdGUuZ2V0T3B0aW9uc0ZvclN0YWNrKHN0YWNrSWQpPy5kaWZmQXNzZXRzLFxuICAgICAgICAgIH07XG4gICAgICAgICAgbGV0IGFjdHVhbFRlbXBsYXRlID0gYWN0dWFsW3N0YWNrSWRdLnRlbXBsYXRlc1t0ZW1wbGF0ZUlkXTtcbiAgICAgICAgICBsZXQgZXhwZWN0ZWRUZW1wbGF0ZSA9IGV4cGVjdGVkW3N0YWNrSWRdLnRlbXBsYXRlc1t0ZW1wbGF0ZUlkXTtcblxuICAgICAgICAgIC8vIGlmIHdlIGFyZSBub3QgdmVyaWZ5aW5nIGFzc2V0IGhhc2hlcyB0aGVuIHJlbW92ZSB0aGUgc3BlY2lmaWNcbiAgICAgICAgICAvLyBhc3NldCBoYXNoZXMgZnJvbSB0aGUgdGVtcGxhdGVzIHNvIHRoZXkgYXJlIG5vdCBwYXJ0IG9mIHRoZSBkaWZmXG4gICAgICAgICAgLy8gY29tcGFyaXNvblxuICAgICAgICAgIGlmICghY29uZmlnLmRpZmZBc3NldHMpIHtcbiAgICAgICAgICAgIGFjdHVhbFRlbXBsYXRlID0gdGhpcy5jYW5vbmljYWxpemVUZW1wbGF0ZShhY3R1YWxUZW1wbGF0ZSwgYWN0dWFsW3N0YWNrSWRdLmFzc2V0cyk7XG4gICAgICAgICAgICBleHBlY3RlZFRlbXBsYXRlID0gdGhpcy5jYW5vbmljYWxpemVUZW1wbGF0ZShleHBlY3RlZFRlbXBsYXRlLCBleHBlY3RlZFtzdGFja0lkXS5hc3NldHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZURpZmYgPSBmdWxsRGlmZihleHBlY3RlZFRlbXBsYXRlLCBhY3R1YWxUZW1wbGF0ZSk7XG4gICAgICAgICAgaWYgKCF0ZW1wbGF0ZURpZmYuaXNFbXB0eSkge1xuICAgICAgICAgICAgY29uc3QgYWxsb3dlZERlc3Ryb3lUeXBlcyA9IHRoaXMuZ2V0QWxsb3dlZERlc3Ryb3lUeXBlc0ZvclN0YWNrKHN0YWNrSWQpID8/IFtdO1xuXG4gICAgICAgICAgICAvLyBnbyB0aHJvdWdoIGFsbCB0aGUgcmVzb3VyY2UgZGlmZmVyZW5jZXMgYW5kIGNoZWNrIGZvciBhbnlcbiAgICAgICAgICAgIC8vIFwiZGVzdHJ1Y3RpdmVcIiBjaGFuZ2VzXG4gICAgICAgICAgICB0ZW1wbGF0ZURpZmYucmVzb3VyY2VzLmZvckVhY2hEaWZmZXJlbmNlKChsb2dpY2FsSWQ6IHN0cmluZywgY2hhbmdlOiBSZXNvdXJjZURpZmZlcmVuY2UpID0+IHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjaGFuZ2UgaXMgYSByZW1vdmFsIGl0IHdpbGwgbm90IHNob3cgdXAgYXMgYSAnY2hhbmdlSW1wYWN0J1xuICAgICAgICAgICAgLy8gc28gbmVlZCB0byBjaGVjayBmb3IgaXQgc2VwYXJhdGVseSwgdW5sZXNzIGl0IGlzIGEgcmVzb3VyY2VUeXBlIHRoYXRcbiAgICAgICAgICAgIC8vIGhhcyBiZWVuIFwiYWxsb3dlZFwiIHRvIGJlIGRlc3Ryb3llZFxuICAgICAgICAgICAgICBjb25zdCByZXNvdXJjZVR5cGUgPSBjaGFuZ2Uub2xkVmFsdWU/LlR5cGUgPz8gY2hhbmdlLm5ld1ZhbHVlPy5UeXBlO1xuICAgICAgICAgICAgICBpZiAocmVzb3VyY2VUeXBlICYmIGFsbG93ZWREZXN0cm95VHlwZXMuaW5jbHVkZXMocmVzb3VyY2VUeXBlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoY2hhbmdlLmlzUmVtb3ZhbCkge1xuICAgICAgICAgICAgICAgIGRlc3RydWN0aXZlQ2hhbmdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIGltcGFjdDogUmVzb3VyY2VJbXBhY3QuV0lMTF9ERVNUUk9ZLFxuICAgICAgICAgICAgICAgICAgbG9naWNhbElkLFxuICAgICAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0ZW1wbGF0ZUlkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoY2hhbmdlLmNoYW5nZUltcGFjdCkge1xuICAgICAgICAgICAgICAgICAgY2FzZSBSZXNvdXJjZUltcGFjdC5NQVlfUkVQTEFDRTpcbiAgICAgICAgICAgICAgICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuV0lMTF9PUlBIQU46XG4gICAgICAgICAgICAgICAgICBjYXNlIFJlc291cmNlSW1wYWN0LldJTExfREVTVFJPWTpcbiAgICAgICAgICAgICAgICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuV0lMTF9SRVBMQUNFOlxuICAgICAgICAgICAgICAgICAgICBkZXN0cnVjdGl2ZUNoYW5nZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgaW1wYWN0OiBjaGFuZ2UuY2hhbmdlSW1wYWN0LFxuICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxJZCxcbiAgICAgICAgICAgICAgICAgICAgICBzdGFja05hbWU6IHRlbXBsYXRlSWQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgd3JpdGFibGUgPSBuZXcgU3RyaW5nV3JpdGFibGUoe30pO1xuICAgICAgICAgICAgZm9ybWF0RGlmZmVyZW5jZXMod3JpdGFibGUsIHRlbXBsYXRlRGlmZik7XG4gICAgICAgICAgICBmYWlsdXJlcy5wdXNoKHtcbiAgICAgICAgICAgICAgcmVhc29uOiBEaWFnbm9zdGljUmVhc29uLlNOQVBTSE9UX0ZBSUxFRCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogd3JpdGFibGUuZGF0YSxcbiAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0ZW1wbGF0ZUlkLFxuICAgICAgICAgICAgICB0ZXN0TmFtZTogdGhpcy50ZXN0TmFtZSxcbiAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRpYWdub3N0aWNzOiBmYWlsdXJlcyxcbiAgICAgIGRlc3RydWN0aXZlQ2hhbmdlcyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkQXNzZW1ibHkoZGlyOiBzdHJpbmcpOiBBc3NlbWJseU1hbmlmZXN0UmVhZGVyIHtcbiAgICByZXR1cm4gQXNzZW1ibHlNYW5pZmVzdFJlYWRlci5mcm9tUGF0aChkaXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHVjZSB0ZW1wbGF0ZSB0byBhIG5vcm1hbCBmb3JtIHdoZXJlIGFzc2V0IHJlZmVyZW5jZXMgaGF2ZSBiZWVuIG5vcm1hbGl6ZWRcbiAgICpcbiAgICogVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBjb21wYXJlIHRlbXBsYXRlcyBpZiBhbGwgdGhhdCdzIGRpZmZlcmVudCBiZXR3ZWVuXG4gICAqIHRoZW0gaXMgdGhlIGhhc2hlcyBvZiB0aGUgYXNzZXQgdmFsdWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBjYW5vbmljYWxpemVUZW1wbGF0ZSh0ZW1wbGF0ZTogYW55LCBhc3NldHM6IHN0cmluZ1tdKTogYW55IHtcbiAgICBjb25zdCBhc3NldHNTZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3Qgc3RyaW5nU3Vic3RpdHV0aW9ucyA9IG5ldyBBcnJheTxbUmVnRXhwLCBzdHJpbmddPigpO1xuXG4gICAgLy8gRmluZCBhc3NldHMgdmlhIHBhcmFtZXRlcnMgKGZvciBMZWdhY3lTdGFja1N5bnRoZXNpemVyKVxuICAgIGNvbnN0IHBhcmFtUmUgPSAvXkFzc2V0UGFyYW1ldGVycyhbYS16QS1aMC05XXs2NH0pKFMzQnVja2V0fFMzVmVyc2lvbktleXxBcnRpZmFjdEhhc2gpKFthLXpBLVowLTldezh9KSQvO1xuICAgIGZvciAoY29uc3QgcGFyYW1OYW1lIG9mIE9iamVjdC5rZXlzKHRlbXBsYXRlPy5QYXJhbWV0ZXJzIHx8IHt9KSkge1xuICAgICAgY29uc3QgbSA9IHBhcmFtUmUuZXhlYyhwYXJhbU5hbWUpO1xuICAgICAgaWYgKCFtKSB7IGNvbnRpbnVlOyB9XG4gICAgICBpZiAoYXNzZXRzU2Vlbi5oYXMobVsxXSkpIHsgY29udGludWU7IH1cblxuICAgICAgYXNzZXRzU2Vlbi5hZGQobVsxXSk7XG4gICAgICBjb25zdCBpeCA9IGFzc2V0c1NlZW4uc2l6ZTtcblxuICAgICAgLy8gRnVsbCBwYXJhbWV0ZXIgcmVmZXJlbmNlXG4gICAgICBzdHJpbmdTdWJzdGl0dXRpb25zLnB1c2goW1xuICAgICAgICBuZXcgUmVnRXhwKGBBc3NldFBhcmFtZXRlcnMke21bMV19KFMzQnVja2V0fFMzVmVyc2lvbktleXxBcnRpZmFjdEhhc2gpKFthLXpBLVowLTldezh9KWApLFxuICAgICAgICBgQXNzZXQke2l4fSQxYCxcbiAgICAgIF0pO1xuICAgICAgLy8gU3Vic3RyaW5nIGFzc2V0IGhhc2ggcmVmZXJlbmNlXG4gICAgICBzdHJpbmdTdWJzdGl0dXRpb25zLnB1c2goW1xuICAgICAgICBuZXcgUmVnRXhwKGAke21bMV19YCksXG4gICAgICAgIGBBc3NldCR7aXh9SGFzaGAsXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICAvLyBmaW5kIGFzc2V0cyBkZWZpbmVkIGluIHRoZSBhc3NldCBtYW5pZmVzdFxuICAgIHRyeSB7XG4gICAgICBhc3NldHMuZm9yRWFjaChhc3NldCA9PiB7XG4gICAgICAgIGlmICghYXNzZXRzU2Vlbi5oYXMoYXNzZXQpKSB7XG4gICAgICAgICAgYXNzZXRzU2Vlbi5hZGQoYXNzZXQpO1xuICAgICAgICAgIGNvbnN0IGl4ID0gYXNzZXRzU2Vlbi5zaXplO1xuICAgICAgICAgIHN0cmluZ1N1YnN0aXR1dGlvbnMucHVzaChbXG4gICAgICAgICAgICBuZXcgUmVnRXhwKGFzc2V0KSxcbiAgICAgICAgICAgIGBBc3NldCR7aXh9JDFgLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGFzc2V0IG1hbmlmZXN0IHRoYXQgaXMgZmluZS5cbiAgICB9XG5cbiAgICAvLyBTdWJzdGl0dXRlIHRoZW0gb3V0XG4gICAgcmV0dXJuIHN1YnN0aXR1dGUodGVtcGxhdGUpO1xuXG4gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZSh3aGF0OiBhbnkpOiBhbnkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkod2hhdCkpIHtcbiAgICAgICAgcmV0dXJuIHdoYXQubWFwKHN1YnN0aXR1dGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHdoYXQgPT09ICdvYmplY3QnICYmIHdoYXQgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgcmV0OiBhbnkgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMod2hhdCkpIHtcbiAgICAgICAgICByZXRbc3RyaW5nU3ViKGspXSA9IHN1YnN0aXR1dGUodik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB3aGF0ID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gc3RyaW5nU3ViKHdoYXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gd2hhdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHJpbmdTdWIoeDogc3RyaW5nKSB7XG4gICAgICBmb3IgKGNvbnN0IFtyZSwgcmVwbGFjZW1lbnRdIG9mIHN0cmluZ1N1YnN0aXR1dGlvbnMpIHtcbiAgICAgICAgeCA9IHgucmVwbGFjZShyZSwgcmVwbGFjZW1lbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFN0cmluZ1dyaXRhYmxlIGV4dGVuZHMgV3JpdGFibGUge1xuICBwdWJsaWMgZGF0YTogc3RyaW5nO1xuICBwcml2YXRlIF9kZWNvZGVyOiBTdHJpbmdEZWNvZGVyO1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBXcml0YWJsZU9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKTtcbiAgICB0aGlzLl9kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoKTtcbiAgICB0aGlzLmRhdGEgPSAnJztcbiAgfVxuXG4gIF93cml0ZShjaHVuazogYW55LCBlbmNvZGluZzogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IgfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKGVuY29kaW5nID09PSAnYnVmZmVyJykge1xuICAgICAgY2h1bmsgPSB0aGlzLl9kZWNvZGVyLndyaXRlKGNodW5rKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEgKz0gY2h1bms7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxuXG4gIF9maW5hbChjYWxsYmFjazogKGVycm9yPzogRXJyb3IgfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhICs9IHRoaXMuX2RlY29kZXIuZW5kKCk7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxufVxuIl19
321
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3QtdGVzdC1ydW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzbmFwc2hvdC10ZXN0LXJ1bm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBNkI7QUFFN0IsbUNBQWtDO0FBQ2xDLG1EQUErQztBQUUvQyxzRUFBMkY7QUFDM0YsNkRBQWtFO0FBRWxFLCtDQUFtRTtBQUVuRSw4Q0FBcUQ7QUFxQnJEOzs7R0FHRztBQUNILE1BQWEsbUJBQW9CLFNBQVEseUJBQVc7SUFDbEQsWUFBWSxPQUEyQjtRQUNyQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksWUFBWSxDQUFDLFVBQXVDLEVBQUU7UUFDM0QsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQztZQUNILE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRTVHLDZCQUE2QjtZQUM3Qix5REFBeUQ7WUFDekQsMkVBQTJFO1lBQzNFLDZFQUE2RTtZQUM3RSxvQ0FBb0M7WUFDcEMsTUFBTSxHQUFHLEdBQUc7Z0JBQ1YsR0FBRyxtQ0FBcUIsQ0FBQyxHQUFHO2dCQUM1QixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7b0JBQy9DLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLG1DQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtpQkFDM0UsQ0FBQyxDQUFDO2FBQ0osQ0FBQztZQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO2dCQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUMvQixHQUFHO2dC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QUFDLFFBQXdDO1FBQzdDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNqQyxRQUFRLEVBQUUsQ0FBQztJQUNiLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdHlwZSB7IFdyaXRhYmxlT3B0aW9ucyB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBXcml0YWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBTdHJpbmdEZWNvZGVyIH0gZnJvbSAnc3RyaW5nX2RlY29kZXInO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZURpZmZlcmVuY2UgfSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB7IGZ1bGxEaWZmLCBmb3JtYXREaWZmZXJlbmNlcywgUmVzb3VyY2VJbXBhY3QgfSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB7IEFzc2VtYmx5TWFuaWZlc3RSZWFkZXIgfSBmcm9tICcuL3ByaXZhdGUvY2xvdWQtYXNzZW1ibHknO1xuaW1wb3J0IHR5cGUgeyBJbnRlZ1J1bm5lck9wdGlvbnMgfSBmcm9tICcuL3J1bm5lci1iYXNlJztcbmltcG9ydCB7IEludGVnUnVubmVyLCBERUZBVUxUX1NZTlRIX09QVElPTlMgfSBmcm9tICcuL3J1bm5lci1iYXNlJztcbmltcG9ydCB0eXBlIHsgRGlhZ25vc3RpYywgRGVzdHJ1Y3RpdmVDaGFuZ2UsIFNuYXBzaG90VmVyaWZpY2F0aW9uT3B0aW9ucyB9IGZyb20gJy4uL3dvcmtlcnMvY29tbW9uJztcbmltcG9ydCB7IERpYWdub3N0aWNSZWFzb24gfSBmcm9tICcuLi93b3JrZXJzL2NvbW1vbic7XG5cbmludGVyZmFjZSBTbmFwc2hvdEFzc2VtYmx5IHtcbiAgLyoqXG4gICAqIE1hcCBvZiBzdGFja3MgdGhhdCBhcmUgcGFydCBvZiB0aGlzIGFzc2VtYmx5XG4gICAqL1xuICBbc3RhY2tOYW1lOiBzdHJpbmddOiB7XG4gICAgLyoqXG4gICAgICogQWxsIHRlbXBsYXRlcyBmb3IgdGhpcyBzdGFjaywgaW5jbHVkaW5nIG5lc3RlZCBzdGFja3NcbiAgICAgKi9cbiAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgIFt0ZW1wbGF0ZUlkOiBzdHJpbmddOiBhbnk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgYXNzZXQgSWRzIHRoYXQgYXJlIHVzZWQgYnkgdGhpcyBhc3NlbWJseVxuICAgICAqL1xuICAgIGFzc2V0czogc3RyaW5nW107XG4gIH07XG59XG5cbi8qKlxuICogUnVubmVyIGZvciBzbmFwc2hvdCB0ZXN0cy4gVGhpcyBoYW5kbGVzIG9yY2hlc3RyYXRpbmdcbiAqIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0IHNuYXBzaG90c1xuICovXG5leHBvcnQgY2xhc3MgSW50ZWdTbmFwc2hvdFJ1bm5lciBleHRlbmRzIEludGVnUnVubmVyIHtcbiAgY29uc3RydWN0b3Iob3B0aW9uczogSW50ZWdSdW5uZXJPcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU3ludGggdGhlIGludGVncmF0aW9uIHRlc3RzIGFuZCBjb21wYXJlIHRoZSB0ZW1wbGF0ZXNcbiAgICogdG8gdGhlIGV4aXN0aW5nIHNuYXBzaG90LlxuICAgKlxuICAgKiBAcmV0dXJucyBhbnkgZGlhZ25vc3RpY3MgYW5kIGFueSBkZXN0cnVjdGl2ZSBjaGFuZ2VzXG4gICAqL1xuICBwdWJsaWMgdGVzdFNuYXBzaG90KG9wdGlvbnM6IFNuYXBzaG90VmVyaWZpY2F0aW9uT3B0aW9ucyA9IHt9KTogeyBkaWFnbm9zdGljczogRGlhZ25vc3RpY1tdOyBkZXN0cnVjdGl2ZUNoYW5nZXM6IERlc3RydWN0aXZlQ2hhbmdlW10gfSB7XG4gICAgbGV0IGRvQ2xlYW4gPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBleHBlY3RlZFNuYXBzaG90QXNzZW1ibHkgPSB0aGlzLmdldFNuYXBzaG90QXNzZW1ibHkodGhpcy5zbmFwc2hvdERpciwgdGhpcy5leHBlY3RlZFRlc3RTdWl0ZT8uc3RhY2tzKTtcblxuICAgICAgLy8gc3ludGggdGhlIGludGVncmF0aW9uIHRlc3RcbiAgICAgIC8vIEZJWE1FOiBpZGVhbGx5IHdlIHNob3VsZCBub3QgbmVlZCB0byBydW4gdGhpcyBhZ2FpbiBpZlxuICAgICAgLy8gdGhlIGNka091dERpciBleGlzdHMgYWxyZWFkeSwgYnV0IGZvciBzb21lIHJlYXNvbiBnZW5lcmF0ZUFjdHVhbFNuYXBzaG90XG4gICAgICAvLyBnZW5lcmF0ZXMgYW4gaW5jb3JyZWN0IHNuYXBzaG90IGFuZCBJIGhhdmUgbm8gaWRlYSB3aHkgc28gc3ludGggYWdhaW4gaGVyZVxuICAgICAgLy8gdG8gcHJvZHVjZSB0aGUgXCJjb3JyZWN0XCIgc25hcHNob3RcbiAgICAgIGNvbnN0IGVudiA9IHtcbiAgICAgICAgLi4uREVGQVVMVF9TWU5USF9PUFRJT05TLmVudixcbiAgICAgICAgQ0RLX0NPTlRFWFRfSlNPTjogSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRDb250ZXh0KHtcbiAgICAgICAgICAuLi50aGlzLmFjdHVhbFRlc3RTdWl0ZS5lbmFibGVMb29rdXBzID8gREVGQVVMVF9TWU5USF9PUFRJT05TLmNvbnRleHQgOiB7fSxcbiAgICAgICAgfSkpLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY2RrLnN5bnRoRmFzdCh7XG4gICAgICAgIGV4ZWNDbWQ6IHRoaXMuY2RrQXBwLnNwbGl0KCcgJyksXG4gICAgICAgIGVudixcbiAgICAgICAgb3V0cHV0OiBwYXRoLnJlbGF0aXZlKHRoaXMuZGlyZWN0b3J5LCB0aGlzLmNka091dERpciksXG4gICAgICB9KTtcblxuICAgICAgLy8gcmVhZCB0aGUgXCJhY3R1YWxcIiBzbmFwc2hvdFxuICAgICAgY29uc3QgYWN0dWFsU25hcHNob3RBc3NlbWJseSA9IHRoaXMuZ2V0U25hcHNob3RBc3NlbWJseSh0aGlzLmNka091dERpciwgdGhpcy5hY3R1YWxUZXN0U3VpdGUuc3RhY2tzKTtcblxuICAgICAgLy8gZGlmZiB0aGUgZXhpc3Rpbmcgc25hcHNob3QgKGV4cGVjdGVkKSB3aXRoIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0IChhY3R1YWwpXG4gICAgICBjb25zdCBkaWFnbm9zdGljcyA9IHRoaXMuZGlmZkFzc2VtYmx5KGV4cGVjdGVkU25hcHNob3RBc3NlbWJseSwgYWN0dWFsU25hcHNob3RBc3NlbWJseSk7XG5cbiAgICAgIGlmIChkaWFnbm9zdGljcy5kaWFnbm9zdGljcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gQXR0YWNoIGFkZGl0aW9uYWwgbWVzc2FnZXMgdG8gdGhlIGZpcnN0IGRpYWdub3N0aWNcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbE1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnJldGFpbikge1xuICAgICAgICAgIGFkZGl0aW9uYWxNZXNzYWdlcy5wdXNoKFxuICAgICAgICAgICAgYChGYWlsdXJlIHJldGFpbmVkKSBFeHBlY3RlZDogJHtwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIHRoaXMuc25hcHNob3REaXIpfWAsXG4gICAgICAgICAgICBgICAgICAgICAgICAgICAgICAgIEFjdHVhbDogICAke3BhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgdGhpcy5jZGtPdXREaXIpfWAsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBkb0NsZWFuID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgLy8gU2hvdyB0aGUgY29tbWFuZCBuZWNlc3NhcnkgdG8gcmVwcm8gdGhpc1xuICAgICAgICAgIGNvbnN0IGVudlNldCA9IE9iamVjdC5lbnRyaWVzKGVudilcbiAgICAgICAgICAgIC5maWx0ZXIoKFtrLCBfXSkgPT4gayAhPT0gJ0NES19DT05URVhUX0pTT04nKVxuICAgICAgICAgICAgLm1hcCgoW2ssIHZdKSA9PiBgJHtrfT0nJHt2fSdgKTtcbiAgICAgICAgICBjb25zdCBlbnZDbWQgPSBlbnZTZXQubGVuZ3RoID4gMCA/IFsnZW52JywgLi4uZW52U2V0XSA6IFtdO1xuXG4gICAgICAgICAgYWRkaXRpb25hbE1lc3NhZ2VzLnB1c2goXG4gICAgICAgICAgICAnUmVwcm86JyxcbiAgICAgICAgICAgIGAgICR7Wy4uLmVudkNtZCwgJ2NkayBzeW50aCcsIGAtYSAnJHt0aGlzLmNka0FwcH0nYCwgYC1vICcke3RoaXMuY2RrT3V0RGlyfSdgLCAuLi5PYmplY3QuZW50cmllcyh0aGlzLmdldENvbnRleHQoKSkuZmxhdE1hcCgoW2ssIHZdKSA9PiB0eXBlb2YgdiAhPT0gJ29iamVjdCcgPyBbYC1jICcke2t9PSR7dn0nYF0gOiBbXSldLmpvaW4oJyAnKX1gLFxuXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpYWdub3N0aWNzLmRpYWdub3N0aWNzWzBdID0ge1xuICAgICAgICAgIC4uLmRpYWdub3N0aWNzLmRpYWdub3N0aWNzWzBdLFxuICAgICAgICAgIGFkZGl0aW9uYWxNZXNzYWdlcyxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpYWdub3N0aWNzO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChkb0NsZWFuKSB7XG4gICAgICAgIHRoaXMuY2xlYW51cCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgYSBnaXZlbiBjbG91ZCBhc3NlbWJseSByZXR1cm4gYSBjb2xsZWN0aW9uIG9mIGFsbCB0ZW1wbGF0ZXNcbiAgICogdGhhdCBzaG91bGQgYmUgcGFydCBvZiB0aGUgc25hcHNob3QgYW5kIGFueSByZXF1aXJlZCBtZXRhIGRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSBjbG91ZEFzc2VtYmx5RGlyIFRoZSBkaXJlY3Rvcnkgb2YgdGhlIGNsb3VkIGFzc2VtYmx5IHRvIGxvb2sgZm9yIHNuYXBzaG90c1xuICAgKiBAcGFyYW0gcGlja1N0YWNrcyBQaWNrIG9ubHkgdGhlc2Ugc3RhY2tzIGZyb20gdGhlIGNsb3VkIGFzc2VtYmx5XG4gICAqIEByZXR1cm5zIEEgU25hcHNob3RBc3NlbWJseSwgdGhlIGNvbGxlY3Rpb24gb2YgYWxsIHRlbXBsYXRlcyBpbiB0aGlzIHNuYXBzaG90IGFuZCByZXF1aXJlZCBtZXRhIGRhdGFcbiAgICovXG4gIHByaXZhdGUgZ2V0U25hcHNob3RBc3NlbWJseShjbG91ZEFzc2VtYmx5RGlyOiBzdHJpbmcsIHBpY2tTdGFja3M6IHN0cmluZ1tdID0gW10pOiBTbmFwc2hvdEFzc2VtYmx5IHtcbiAgICBjb25zdCBhc3NlbWJseSA9IHRoaXMucmVhZEFzc2VtYmx5KGNsb3VkQXNzZW1ibHlEaXIpO1xuICAgIGNvbnN0IHN0YWNrcyA9IGFzc2VtYmx5LnN0YWNrcztcbiAgICBjb25zdCBzbmFwc2hvdHM6IFNuYXBzaG90QXNzZW1ibHkgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtzdGFja05hbWUsIHN0YWNrVGVtcGxhdGVdIG9mIE9iamVjdC5lbnRyaWVzKHN0YWNrcykpIHtcbiAgICAgIGlmIChwaWNrU3RhY2tzLmluY2x1ZGVzKHN0YWNrTmFtZSkpIHtcbiAgICAgICAgY29uc3QgbWFuaWZlc3QgPSBBc3NlbWJseU1hbmlmZXN0UmVhZGVyLmZyb21QYXRoKGNsb3VkQXNzZW1ibHlEaXIpO1xuICAgICAgICBjb25zdCBhc3NldHMgPSBtYW5pZmVzdC5nZXRBc3NldElkc0ZvclN0YWNrKHN0YWNrTmFtZSk7XG5cbiAgICAgICAgc25hcHNob3RzW3N0YWNrTmFtZV0gPSB7XG4gICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICBbc3RhY2tOYW1lXTogc3RhY2tUZW1wbGF0ZSxcbiAgICAgICAgICAgIC4uLmFzc2VtYmx5LmdldE5lc3RlZFN0YWNrc0ZvclN0YWNrKHN0YWNrTmFtZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3NldHMsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNuYXBzaG90cztcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgYSBnaXZlbiBzdGFjayByZXR1cm4gYWxsIHJlc291cmNlIHR5cGVzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgZGVzdHJveWVkXG4gICAqIGFzIHBhcnQgb2YgYSBzdGFjayB1cGRhdGVcbiAgICpcbiAgICogQHBhcmFtIHN0YWNrSWQgdGhlIHN0YWNrIGlkXG4gICAqIEByZXR1cm5zIGEgbGlzdCBvZiByZXNvdXJjZSB0eXBlcyBvciB1bmRlZmluZWQgaWYgbm9uZSBhcmUgZm91bmRcbiAgICovXG4gIHByaXZhdGUgZ2V0QWxsb3dlZERlc3Ryb3lUeXBlc0ZvclN0YWNrKHN0YWNrSWQ6IHN0cmluZyk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICBmb3IgKGNvbnN0IHRlc3RDYXNlIG9mIE9iamVjdC52YWx1ZXModGhpcy5hY3R1YWxUZXN0cygpID8/IHt9KSkge1xuICAgICAgaWYgKHRlc3RDYXNlLnN0YWNrcy5pbmNsdWRlcyhzdGFja0lkKSkge1xuICAgICAgICByZXR1cm4gdGVzdENhc2UuYWxsb3dEZXN0cm95O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYW55IGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGV4aXN0aW5nIGFuZCBleHBlY3RlZCBzbmFwc2hvdHNcbiAgICpcbiAgICogQHBhcmFtIGV4aXN0aW5nIC0gdGhlIGV4aXN0aW5nIChleHBlY3RlZCkgc25hcHNob3RcbiAgICogQHBhcmFtIGFjdHVhbCAtIHRoZSBuZXcgKGFjdHVhbCkgc25hcHNob3RcbiAgICogQHJldHVybnMgYW55IGRpYWdub3N0aWNzIGFuZCBhbnkgZGVzdHJ1Y3RpdmUgY2hhbmdlc1xuICAgKi9cbiAgcHJpdmF0ZSBkaWZmQXNzZW1ibHkoXG4gICAgZXhwZWN0ZWQ6IFNuYXBzaG90QXNzZW1ibHksXG4gICAgYWN0dWFsOiBTbmFwc2hvdEFzc2VtYmx5LFxuICApOiB7IGRpYWdub3N0aWNzOiBEaWFnbm9zdGljW107IGRlc3RydWN0aXZlQ2hhbmdlczogRGVzdHJ1Y3RpdmVDaGFuZ2VbXSB9IHtcbiAgICBjb25zdCBmYWlsdXJlczogRGlhZ25vc3RpY1tdID0gW107XG4gICAgY29uc3QgZGVzdHJ1Y3RpdmVDaGFuZ2VzOiBEZXN0cnVjdGl2ZUNoYW5nZVtdID0gW107XG5cbiAgICAvLyBjaGVjayBpZiB0aGVyZSBpcyBhIENGTiB0ZW1wbGF0ZSBpbiB0aGUgY3VycmVudCBzbmFwc2hvdFxuICAgIC8vIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIFwiYWN0dWFsXCIgc25hcHNob3RcbiAgICBmb3IgKGNvbnN0IFtzdGFja0lkLCBzdGFja10gb2YgT2JqZWN0LmVudHJpZXMoZXhwZWN0ZWQpKSB7XG4gICAgICBmb3IgKGNvbnN0IHRlbXBsYXRlSWQgb2YgT2JqZWN0LmtleXMoc3RhY2sudGVtcGxhdGVzKSkge1xuICAgICAgICBpZiAoIWFjdHVhbFtzdGFja0lkXT8udGVtcGxhdGVzW3RlbXBsYXRlSWRdKSB7XG4gICAgICAgICAgZmFpbHVyZXMucHVzaCh7XG4gICAgICAgICAgICB0ZXN0TmFtZTogdGhpcy50ZXN0TmFtZSxcbiAgICAgICAgICAgIHN0YWNrTmFtZTogdGVtcGxhdGVJZCxcbiAgICAgICAgICAgIHJlYXNvbjogRGlhZ25vc3RpY1JlYXNvbi5TTkFQU0hPVF9GQUlMRUQsXG4gICAgICAgICAgICBtZXNzYWdlOiBgJHt0ZW1wbGF0ZUlkfSBleGlzdHMgaW4gc25hcHNob3QsIGJ1dCBub3QgaW4gYWN0dWFsYCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW3N0YWNrSWQsIHN0YWNrXSBvZiBPYmplY3QuZW50cmllcyhhY3R1YWwpKSB7XG4gICAgICBmb3IgKGNvbnN0IHRlbXBsYXRlSWQgb2YgT2JqZWN0LmtleXMoc3RhY2sudGVtcGxhdGVzKSkge1xuICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYSBDRk4gdGVtcGxhdGUgaW4gdGhlIFwiYWN0dWFsXCIgc25hcHNob3RcbiAgICAgIC8vIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgc25hcHNob3RcbiAgICAgICAgaWYgKCFleHBlY3RlZFtzdGFja0lkXT8udGVtcGxhdGVzW3RlbXBsYXRlSWRdKSB7XG4gICAgICAgICAgZmFpbHVyZXMucHVzaCh7XG4gICAgICAgICAgICB0ZXN0TmFtZTogdGhpcy50ZXN0TmFtZSxcbiAgICAgICAgICAgIHN0YWNrTmFtZTogdGVtcGxhdGVJZCxcbiAgICAgICAgICAgIHJlYXNvbjogRGlhZ25vc3RpY1JlYXNvbi5TTkFQU0hPVF9GQUlMRUQsXG4gICAgICAgICAgICBtZXNzYWdlOiBgJHt0ZW1wbGF0ZUlkfSBkb2VzIG5vdCBleGlzdCBpbiBzbmFwc2hvdCwgYnV0IGRvZXMgaW4gYWN0dWFsYCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAgICAgICBkaWZmQXNzZXRzOiB0aGlzLmFjdHVhbFRlc3RTdWl0ZS5nZXRPcHRpb25zRm9yU3RhY2soc3RhY2tJZCk/LmRpZmZBc3NldHMsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBsZXQgYWN0dWFsVGVtcGxhdGUgPSBhY3R1YWxbc3RhY2tJZF0udGVtcGxhdGVzW3RlbXBsYXRlSWRdO1xuICAgICAgICAgIGxldCBleHBlY3RlZFRlbXBsYXRlID0gZXhwZWN0ZWRbc3RhY2tJZF0udGVtcGxhdGVzW3RlbXBsYXRlSWRdO1xuXG4gICAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCB2ZXJpZnlpbmcgYXNzZXQgaGFzaGVzIHRoZW4gcmVtb3ZlIHRoZSBzcGVjaWZpY1xuICAgICAgICAgIC8vIGFzc2V0IGhhc2hlcyBmcm9tIHRoZSB0ZW1wbGF0ZXMgc28gdGhleSBhcmUgbm90IHBhcnQgb2YgdGhlIGRpZmZcbiAgICAgICAgICAvLyBjb21wYXJpc29uXG4gICAgICAgICAgaWYgKCFjb25maWcuZGlmZkFzc2V0cykge1xuICAgICAgICAgICAgYWN0dWFsVGVtcGxhdGUgPSB0aGlzLmNhbm9uaWNhbGl6ZVRlbXBsYXRlKGFjdHVhbFRlbXBsYXRlLCBhY3R1YWxbc3RhY2tJZF0uYXNzZXRzKTtcbiAgICAgICAgICAgIGV4cGVjdGVkVGVtcGxhdGUgPSB0aGlzLmNhbm9uaWNhbGl6ZVRlbXBsYXRlKGV4cGVjdGVkVGVtcGxhdGUsIGV4cGVjdGVkW3N0YWNrSWRdLmFzc2V0cyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlRGlmZiA9IGZ1bGxEaWZmKGV4cGVjdGVkVGVtcGxhdGUsIGFjdHVhbFRlbXBsYXRlKTtcbiAgICAgICAgICBpZiAoIXRlbXBsYXRlRGlmZi5pc0VtcHR5KSB7XG4gICAgICAgICAgICBjb25zdCBhbGxvd2VkRGVzdHJveVR5cGVzID0gdGhpcy5nZXRBbGxvd2VkRGVzdHJveVR5cGVzRm9yU3RhY2soc3RhY2tJZCkgPz8gW107XG5cbiAgICAgICAgICAgIC8vIGdvIHRocm91Z2ggYWxsIHRoZSByZXNvdXJjZSBkaWZmZXJlbmNlcyBhbmQgY2hlY2sgZm9yIGFueVxuICAgICAgICAgICAgLy8gXCJkZXN0cnVjdGl2ZVwiIGNoYW5nZXNcbiAgICAgICAgICAgIHRlbXBsYXRlRGlmZi5yZXNvdXJjZXMuZm9yRWFjaERpZmZlcmVuY2UoKGxvZ2ljYWxJZDogc3RyaW5nLCBjaGFuZ2U6IFJlc291cmNlRGlmZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgLy8gaWYgdGhlIGNoYW5nZSBpcyBhIHJlbW92YWwgaXQgd2lsbCBub3Qgc2hvdyB1cCBhcyBhICdjaGFuZ2VJbXBhY3QnXG4gICAgICAgICAgICAvLyBzbyBuZWVkIHRvIGNoZWNrIGZvciBpdCBzZXBhcmF0ZWx5LCB1bmxlc3MgaXQgaXMgYSByZXNvdXJjZVR5cGUgdGhhdFxuICAgICAgICAgICAgLy8gaGFzIGJlZW4gXCJhbGxvd2VkXCIgdG8gYmUgZGVzdHJveWVkXG4gICAgICAgICAgICAgIGNvbnN0IHJlc291cmNlVHlwZSA9IGNoYW5nZS5vbGRWYWx1ZT8uVHlwZSA/PyBjaGFuZ2UubmV3VmFsdWU/LlR5cGU7XG4gICAgICAgICAgICAgIGlmIChyZXNvdXJjZVR5cGUgJiYgYWxsb3dlZERlc3Ryb3lUeXBlcy5pbmNsdWRlcyhyZXNvdXJjZVR5cGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChjaGFuZ2UuaXNSZW1vdmFsKSB7XG4gICAgICAgICAgICAgICAgZGVzdHJ1Y3RpdmVDaGFuZ2VzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgaW1wYWN0OiBSZXNvdXJjZUltcGFjdC5XSUxMX0RFU1RST1ksXG4gICAgICAgICAgICAgICAgICBsb2dpY2FsSWQsXG4gICAgICAgICAgICAgICAgICBzdGFja05hbWU6IHRlbXBsYXRlSWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChjaGFuZ2UuY2hhbmdlSW1wYWN0KSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIFJlc291cmNlSW1wYWN0Lk1BWV9SRVBMQUNFOlxuICAgICAgICAgICAgICAgICAgY2FzZSBSZXNvdXJjZUltcGFjdC5XSUxMX09SUEhBTjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuV0lMTF9ERVNUUk9ZOlxuICAgICAgICAgICAgICAgICAgY2FzZSBSZXNvdXJjZUltcGFjdC5XSUxMX1JFUExBQ0U6XG4gICAgICAgICAgICAgICAgICAgIGRlc3RydWN0aXZlQ2hhbmdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICBpbXBhY3Q6IGNoYW5nZS5jaGFuZ2VJbXBhY3QsXG4gICAgICAgICAgICAgICAgICAgICAgbG9naWNhbElkLFxuICAgICAgICAgICAgICAgICAgICAgIHN0YWNrTmFtZTogdGVtcGxhdGVJZCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCB3cml0YWJsZSA9IG5ldyBTdHJpbmdXcml0YWJsZSh7fSk7XG4gICAgICAgICAgICBmb3JtYXREaWZmZXJlbmNlcyh3cml0YWJsZSwgdGVtcGxhdGVEaWZmKTtcbiAgICAgICAgICAgIGZhaWx1cmVzLnB1c2goe1xuICAgICAgICAgICAgICByZWFzb246IERpYWdub3N0aWNSZWFzb24uU05BUFNIT1RfRkFJTEVELFxuICAgICAgICAgICAgICBtZXNzYWdlOiB3cml0YWJsZS5kYXRhLFxuICAgICAgICAgICAgICBzdGFja05hbWU6IHRlbXBsYXRlSWQsXG4gICAgICAgICAgICAgIHRlc3ROYW1lOiB0aGlzLnRlc3ROYW1lLFxuICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGlhZ25vc3RpY3M6IGZhaWx1cmVzLFxuICAgICAgZGVzdHJ1Y3RpdmVDaGFuZ2VzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlYWRBc3NlbWJseShkaXI6IHN0cmluZyk6IEFzc2VtYmx5TWFuaWZlc3RSZWFkZXIge1xuICAgIHJldHVybiBBc3NlbWJseU1hbmlmZXN0UmVhZGVyLmZyb21QYXRoKGRpcik7XG4gIH1cblxuICAvKipcbiAgICogUmVkdWNlIHRlbXBsYXRlIHRvIGEgbm9ybWFsIGZvcm0gd2hlcmUgYXNzZXQgcmVmZXJlbmNlcyBoYXZlIGJlZW4gbm9ybWFsaXplZFxuICAgKlxuICAgKiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGNvbXBhcmUgdGVtcGxhdGVzIGlmIGFsbCB0aGF0J3MgZGlmZmVyZW50IGJldHdlZW5cbiAgICogdGhlbSBpcyB0aGUgaGFzaGVzIG9mIHRoZSBhc3NldCB2YWx1ZXMuXG4gICAqL1xuICBwcml2YXRlIGNhbm9uaWNhbGl6ZVRlbXBsYXRlKHRlbXBsYXRlOiBhbnksIGFzc2V0czogc3RyaW5nW10pOiBhbnkge1xuICAgIGNvbnN0IGFzc2V0c1NlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBzdHJpbmdTdWJzdGl0dXRpb25zID0gbmV3IEFycmF5PFtSZWdFeHAsIHN0cmluZ10+KCk7XG5cbiAgICAvLyBGaW5kIGFzc2V0cyB2aWEgcGFyYW1ldGVycyAoZm9yIExlZ2FjeVN0YWNrU3ludGhlc2l6ZXIpXG4gICAgY29uc3QgcGFyYW1SZSA9IC9eQXNzZXRQYXJhbWV0ZXJzKFthLXpBLVowLTldezY0fSkoUzNCdWNrZXR8UzNWZXJzaW9uS2V5fEFydGlmYWN0SGFzaCkoW2EtekEtWjAtOV17OH0pJC87XG4gICAgZm9yIChjb25zdCBwYXJhbU5hbWUgb2YgT2JqZWN0LmtleXModGVtcGxhdGU/LlBhcmFtZXRlcnMgfHwge30pKSB7XG4gICAgICBjb25zdCBtID0gcGFyYW1SZS5leGVjKHBhcmFtTmFtZSk7XG4gICAgICBpZiAoIW0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoYXNzZXRzU2Vlbi5oYXMobVsxXSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGFzc2V0c1NlZW4uYWRkKG1bMV0pO1xuICAgICAgY29uc3QgaXggPSBhc3NldHNTZWVuLnNpemU7XG5cbiAgICAgIC8vIEZ1bGwgcGFyYW1ldGVyIHJlZmVyZW5jZVxuICAgICAgc3RyaW5nU3Vic3RpdHV0aW9ucy5wdXNoKFtcbiAgICAgICAgbmV3IFJlZ0V4cChgQXNzZXRQYXJhbWV0ZXJzJHttWzFdfShTM0J1Y2tldHxTM1ZlcnNpb25LZXl8QXJ0aWZhY3RIYXNoKShbYS16QS1aMC05XXs4fSlgKSxcbiAgICAgICAgYEFzc2V0JHtpeH0kMWAsXG4gICAgICBdKTtcbiAgICAgIC8vIFN1YnN0cmluZyBhc3NldCBoYXNoIHJlZmVyZW5jZVxuICAgICAgc3RyaW5nU3Vic3RpdHV0aW9ucy5wdXNoKFtcbiAgICAgICAgbmV3IFJlZ0V4cChgJHttWzFdfWApLFxuICAgICAgICBgQXNzZXQke2l4fUhhc2hgLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgLy8gZmluZCBhc3NldHMgZGVmaW5lZCBpbiB0aGUgYXNzZXQgbWFuaWZlc3RcbiAgICB0cnkge1xuICAgICAgYXNzZXRzLmZvckVhY2goYXNzZXQgPT4ge1xuICAgICAgICBpZiAoIWFzc2V0c1NlZW4uaGFzKGFzc2V0KSkge1xuICAgICAgICAgIGFzc2V0c1NlZW4uYWRkKGFzc2V0KTtcbiAgICAgICAgICBjb25zdCBpeCA9IGFzc2V0c1NlZW4uc2l6ZTtcbiAgICAgICAgICBzdHJpbmdTdWJzdGl0dXRpb25zLnB1c2goW1xuICAgICAgICAgICAgbmV3IFJlZ0V4cChhc3NldCksXG4gICAgICAgICAgICBgQXNzZXQke2l4fSQxYCxcbiAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpZiB0aGVyZSBpcyBubyBhc3NldCBtYW5pZmVzdCB0aGF0IGlzIGZpbmUuXG4gICAgfVxuXG4gICAgLy8gU3Vic3RpdHV0ZSB0aGVtIG91dFxuICAgIHJldHVybiBzdWJzdGl0dXRlKHRlbXBsYXRlKTtcblxuICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGUod2hhdDogYW55KTogYW55IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHdoYXQpKSB7XG4gICAgICAgIHJldHVybiB3aGF0Lm1hcChzdWJzdGl0dXRlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB3aGF0ID09PSAnb2JqZWN0JyAmJiB3aGF0ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHJldDogYW55ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHdoYXQpKSB7XG4gICAgICAgICAgcmV0W3N0cmluZ1N1YihrKV0gPSBzdWJzdGl0dXRlKHYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygd2hhdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ1N1Yih3aGF0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdoYXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RyaW5nU3ViKHg6IHN0cmluZykge1xuICAgICAgZm9yIChjb25zdCBbcmUsIHJlcGxhY2VtZW50XSBvZiBzdHJpbmdTdWJzdGl0dXRpb25zKSB7XG4gICAgICAgIHggPSB4LnJlcGxhY2UocmUsIHJlcGxhY2VtZW50KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBTdHJpbmdXcml0YWJsZSBleHRlbmRzIFdyaXRhYmxlIHtcbiAgcHVibGljIGRhdGE6IHN0cmluZztcbiAgcHJpdmF0ZSBfZGVjb2RlcjogU3RyaW5nRGVjb2RlcjtcbiAgY29uc3RydWN0b3Iob3B0aW9uczogV3JpdGFibGVPcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG4gICAgdGhpcy5fZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKCk7XG4gICAgdGhpcy5kYXRhID0gJyc7XG4gIH1cblxuICBfd3JpdGUoY2h1bms6IGFueSwgZW5jb2Rpbmc6IHN0cmluZywgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yIHwgbnVsbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGlmIChlbmNvZGluZyA9PT0gJ2J1ZmZlcicpIHtcbiAgICAgIGNodW5rID0gdGhpcy5fZGVjb2Rlci53cml0ZShjaHVuayk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhICs9IGNodW5rO1xuICAgIGNhbGxiYWNrKCk7XG4gIH1cblxuICBfZmluYWwoY2FsbGJhY2s6IChlcnJvcj86IEVycm9yIHwgbnVsbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YSArPSB0aGlzLl9kZWNvZGVyLmVuZCgpO1xuICAgIGNhbGxiYWNrKCk7XG4gIH1cbn1cbiJdfQ==
package/lib/utils.js CHANGED
@@ -48,7 +48,7 @@ function chain(commands) {
48
48
  */
49
49
  function chunks(command) {
50
50
  const result = command.match(/(?:[^\s"]+|"[^"]*")+/g);
51
- return result !== null && result !== void 0 ? result : [];
51
+ return result ?? [];
52
52
  }
53
53
  /**
54
54
  * A class holding a set of items which are being crossed off in time
@@ -57,11 +57,10 @@ function chunks(command) {
57
57
  */
58
58
  class WorkList {
59
59
  constructor(items, options = {}) {
60
- var _a;
61
60
  this.items = items;
62
61
  this.options = options;
63
62
  this.remaining = new Set(this.items);
64
- this.timeout = (_a = options.timeout) !== null && _a !== void 0 ? _a : 60000;
63
+ this.timeout = options.timeout ?? 60000;
65
64
  this.scheduleTimer();
66
65
  }
67
66
  crossOff(item) {
@@ -85,9 +84,8 @@ class WorkList {
85
84
  this.timer = setTimeout(() => this.report(), this.timeout);
86
85
  }
87
86
  report() {
88
- var _a, _b;
89
- (_b = (_a = this.options).onTimeout) === null || _b === void 0 ? void 0 : _b.call(_a, this.remaining);
87
+ this.options.onTimeout?.(this.remaining);
90
88
  }
91
89
  }
92
90
  exports.WorkList = WorkList;
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQSxvQkFxQkM7QUFLRCwwQkFFQztBQUtELHNCQUVDO0FBS0Qsd0JBR0M7QUFqREQsZ0NBQWdDO0FBQ2hDLGlEQUEwQztBQUUxQzs7R0FFRztBQUNILFNBQWdCLElBQUksQ0FBQyxXQUFxQixFQUFFLFVBQTBELEVBQUc7SUFDdkcsTUFBTSxJQUFJLEdBQUcsSUFBQSx5QkFBUyxFQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQzNELEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxpQ0FBaUM7UUFDbEcsR0FBRyxFQUFFO1lBQ0gsR0FBRyxPQUFPLENBQUMsR0FBRztZQUNkLEdBQUcsT0FBTyxDQUFDLEdBQUc7U0FDZjtRQUNELEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztLQUNqQixDQUFDLENBQUM7SUFFSCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUFDLENBQUM7SUFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsaUNBQWlDO1lBQ3JELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFcEQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsT0FBTyxDQUFJLEVBQVM7SUFDbEMsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLEtBQUssQ0FBQyxRQUFrQjtJQUN0QyxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLE1BQU0sQ0FBQyxPQUFlO0lBQ3BDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUN0RCxPQUFPLE1BQU0sYUFBTixNQUFNLGNBQU4sTUFBTSxHQUFJLEVBQUUsQ0FBQztBQUN0QixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQWEsUUFBUTtJQUtuQixZQUE2QixLQUFVLEVBQW1CLFVBQThCLEVBQUU7O1FBQTdELFVBQUssR0FBTCxLQUFLLENBQUs7UUFBbUIsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7UUFKekUsY0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUsvQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQUEsT0FBTyxDQUFDLE9BQU8sbUNBQUksS0FBTSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU0sUUFBUSxDQUFDLElBQU87UUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRU0sSUFBSTtRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFTyxTQUFTO1FBQ2YsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFTyxNQUFNOztRQUNaLE1BQUEsTUFBQSxJQUFJLENBQUMsT0FBTyxFQUFDLFNBQVMsbURBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7Q0FDRjtBQXJDRCw0QkFxQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBDREsgRXhlY1xuaW1wb3J0IHsgc3Bhd25TeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5cbi8qKlxuICogT3VyIG93biBleGVjdXRlIGZ1bmN0aW9uIHdoaWNoIGRvZXNuJ3QgdXNlIHNoZWxscyBhbmQgc3RyaW5ncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY29tbWFuZExpbmU6IHN0cmluZ1tdLCBvcHRpb25zOiB7IGN3ZD86IHN0cmluZzsgdmVyYm9zZT86IGJvb2xlYW47IGVudj86IGFueSB9ID0geyB9KTogYW55IHtcbiAgY29uc3QgcHJvYyA9IHNwYXduU3luYyhjb21tYW5kTGluZVswXSwgY29tbWFuZExpbmUuc2xpY2UoMSksIHtcbiAgICBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsIG9wdGlvbnMudmVyYm9zZSA/ICdpbmhlcml0JyA6ICdwaXBlJ10sIC8vIGluaGVyaXQgU1RERVJSIGluIHZlcmJvc2UgbW9kZVxuICAgIGVudjoge1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAuLi5vcHRpb25zLmVudixcbiAgICB9LFxuICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gIH0pO1xuXG4gIGlmIChwcm9jLmVycm9yKSB7IHRocm93IHByb2MuZXJyb3I7IH1cbiAgaWYgKHByb2Muc3RhdHVzICE9PSAwKSB7XG4gICAgaWYgKHByb2Nlc3Muc3RkZXJyKSB7IC8vIHdpbGwgYmUgJ251bGwnIGluIHZlcmJvc2UgbW9kZVxuICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUocHJvYy5zdGRlcnIpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvbW1hbmQgZXhpdGVkIHdpdGggJHtwcm9jLnN0YXR1cyA/IGBzdGF0dXMgJHtwcm9jLnN0YXR1c31gIDogYHNpZ25hbCAke3Byb2Muc2lnbmFsfWB9YCk7XG4gIH1cblxuICBjb25zdCBvdXRwdXQgPSBwcm9jLnN0ZG91dC50b1N0cmluZygndXRmLTgnKS50cmltKCk7XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuLyoqXG4gKiBGbGF0dGVuIGEgbGlzdCBvZiBsaXN0cyBpbnRvIGEgbGlzdCBvZiBlbGVtZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbjxUPih4czogVFtdW10pOiBUW10ge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgeHMpO1xufVxuXG4vKipcbiAqIENoYWluIGNvbW1hbmRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFpbihjb21tYW5kczogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gY29tbWFuZHMuZmlsdGVyKGMgPT4gISFjKS5qb2luKCcgJiYgJyk7XG59XG5cbi8qKlxuICogU3BsaXQgY29tbWFuZCB0byBjaHVua3MgYnkgc3BhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNodW5rcyhjb21tYW5kOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHJlc3VsdCA9IGNvbW1hbmQubWF0Y2goLyg/OlteXFxzXCJdK3xcIlteXCJdKlwiKSsvZyk7XG4gIHJldHVybiByZXN1bHQgPz8gW107XG59XG5cbi8qKlxuICogQSBjbGFzcyBob2xkaW5nIGEgc2V0IG9mIGl0ZW1zIHdoaWNoIGFyZSBiZWluZyBjcm9zc2VkIG9mZiBpbiB0aW1lXG4gKlxuICogSWYgaXQgdGFrZXMgdG9vIGxvbmcgdG8gY3Jvc3Mgb2ZmIGEgbmV3IGl0ZW0sIHByaW50IHRoZSBsaXN0LlxuICovXG5leHBvcnQgY2xhc3MgV29ya0xpc3Q8QT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbWFpbmluZyA9IG5ldyBTZXQodGhpcy5pdGVtcyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIHRpbWVyPzogTm9kZUpTLlRpbWVvdXQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpdGVtczogQVtdLCBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFdvcmtMaXN0T3B0aW9uczxBPiA9IHt9KSB7XG4gICAgdGhpcy50aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ID8/IDYwXzAwMDtcbiAgICB0aGlzLnNjaGVkdWxlVGltZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBjcm9zc09mZihpdGVtOiBBKSB7XG4gICAgdGhpcy5yZW1haW5pbmcuZGVsZXRlKGl0ZW0pO1xuICAgIHRoaXMuc3RvcFRpbWVyKCk7XG4gICAgaWYgKHRoaXMucmVtYWluaW5nLnNpemUgPiAwKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlVGltZXIoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZG9uZSgpIHtcbiAgICB0aGlzLnJlbWFpbmluZy5jbGVhcigpO1xuICAgIHRoaXMuc3RvcFRpbWVyKCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BUaW1lcigpIHtcbiAgICBpZiAodGhpcy50aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuICAgICAgdGhpcy50aW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjaGVkdWxlVGltZXIoKSB7XG4gICAgdGhpcy50aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXBvcnQoKSwgdGhpcy50aW1lb3V0KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwb3J0KCkge1xuICAgIHRoaXMub3B0aW9ucy5vblRpbWVvdXQ/Lih0aGlzLnJlbWFpbmluZyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3JrTGlzdE9wdGlvbnM8QT4ge1xuICAvKipcbiAgICogV2hlbiB0byByZXBseSB3aXRoIHJlbWFpbmluZyBpdGVtc1xuICAgKlxuICAgKiBAZGVmYXVsdCA2MDAwMFxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IG51bWJlcjtcblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRpbWVvdXQgaGl0c1xuICAgKi9cbiAgcmVhZG9ubHkgb25UaW1lb3V0PzogKHg6IFNldDxBPikgPT4gdm9pZDtcbn1cbiJdfQ==
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQSxvQkF1QkM7QUFLRCwwQkFFQztBQUtELHNCQUVDO0FBS0Qsd0JBR0M7QUFuREQsZ0NBQWdDO0FBQ2hDLGlEQUEwQztBQUUxQzs7R0FFRztBQUNILFNBQWdCLElBQUksQ0FBQyxXQUFxQixFQUFFLFVBQTBELEVBQUc7SUFDdkcsTUFBTSxJQUFJLEdBQUcsSUFBQSx5QkFBUyxFQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQzNELEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxpQ0FBaUM7UUFDbEcsR0FBRyxFQUFFO1lBQ0gsR0FBRyxPQUFPLENBQUMsR0FBRztZQUNkLEdBQUcsT0FBTyxDQUFDLEdBQUc7U0FDZjtRQUNELEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztLQUNqQixDQUFDLENBQUM7SUFFSCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNuQixDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsaUNBQWlDO1lBQ3JELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFcEQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsT0FBTyxDQUFJLEVBQVM7SUFDbEMsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLEtBQUssQ0FBQyxRQUFrQjtJQUN0QyxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLE1BQU0sQ0FBQyxPQUFlO0lBQ3BDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUN0RCxPQUFPLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDdEIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFhLFFBQVE7SUFLbkIsWUFBNkIsS0FBVSxFQUFtQixVQUE4QixFQUFFO1FBQTdELFVBQUssR0FBTCxLQUFLLENBQUs7UUFBbUIsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7UUFKekUsY0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUsvQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksS0FBTSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU0sUUFBUSxDQUFDLElBQU87UUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRU0sSUFBSTtRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFTyxTQUFTO1FBQ2YsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFTyxNQUFNO1FBQ1osSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0MsQ0FBQztDQUNGO0FBckNELDRCQXFDQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIENESyBFeGVjXG5pbXBvcnQgeyBzcGF3blN5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcblxuLyoqXG4gKiBPdXIgb3duIGV4ZWN1dGUgZnVuY3Rpb24gd2hpY2ggZG9lc24ndCB1c2Ugc2hlbGxzIGFuZCBzdHJpbmdzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjb21tYW5kTGluZTogc3RyaW5nW10sIG9wdGlvbnM6IHsgY3dkPzogc3RyaW5nOyB2ZXJib3NlPzogYm9vbGVhbjsgZW52PzogYW55IH0gPSB7IH0pOiBhbnkge1xuICBjb25zdCBwcm9jID0gc3Bhd25TeW5jKGNvbW1hbmRMaW5lWzBdLCBjb21tYW5kTGluZS5zbGljZSgxKSwge1xuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgb3B0aW9ucy52ZXJib3NlID8gJ2luaGVyaXQnIDogJ3BpcGUnXSwgLy8gaW5oZXJpdCBTVERFUlIgaW4gdmVyYm9zZSBtb2RlXG4gICAgZW52OiB7XG4gICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgIC4uLm9wdGlvbnMuZW52LFxuICAgIH0sXG4gICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgfSk7XG5cbiAgaWYgKHByb2MuZXJyb3IpIHtcbiAgICB0aHJvdyBwcm9jLmVycm9yO1xuICB9XG4gIGlmIChwcm9jLnN0YXR1cyAhPT0gMCkge1xuICAgIGlmIChwcm9jZXNzLnN0ZGVycikgeyAvLyB3aWxsIGJlICdudWxsJyBpbiB2ZXJib3NlIG1vZGVcbiAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKHByb2Muc3RkZXJyKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb21tYW5kIGV4aXRlZCB3aXRoICR7cHJvYy5zdGF0dXMgPyBgc3RhdHVzICR7cHJvYy5zdGF0dXN9YCA6IGBzaWduYWwgJHtwcm9jLnNpZ25hbH1gfWApO1xuICB9XG5cbiAgY29uc3Qgb3V0cHV0ID0gcHJvYy5zdGRvdXQudG9TdHJpbmcoJ3V0Zi04JykudHJpbSgpO1xuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKlxuICogRmxhdHRlbiBhIGxpc3Qgb2YgbGlzdHMgaW50byBhIGxpc3Qgb2YgZWxlbWVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW48VD4oeHM6IFRbXVtdKTogVFtdIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIHhzKTtcbn1cblxuLyoqXG4gKiBDaGFpbiBjb21tYW5kc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhaW4oY29tbWFuZHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNvbW1hbmRzLmZpbHRlcihjID0+ICEhYykuam9pbignICYmICcpO1xufVxuXG4vKipcbiAqIFNwbGl0IGNvbW1hbmQgdG8gY2h1bmtzIGJ5IHNwYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaHVua3MoY29tbWFuZDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCByZXN1bHQgPSBjb21tYW5kLm1hdGNoKC8oPzpbXlxcc1wiXSt8XCJbXlwiXSpcIikrL2cpO1xuICByZXR1cm4gcmVzdWx0ID8/IFtdO1xufVxuXG4vKipcbiAqIEEgY2xhc3MgaG9sZGluZyBhIHNldCBvZiBpdGVtcyB3aGljaCBhcmUgYmVpbmcgY3Jvc3NlZCBvZmYgaW4gdGltZVxuICpcbiAqIElmIGl0IHRha2VzIHRvbyBsb25nIHRvIGNyb3NzIG9mZiBhIG5ldyBpdGVtLCBwcmludCB0aGUgbGlzdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtMaXN0PEE+IHtcbiAgcHJpdmF0ZSByZWFkb25seSByZW1haW5pbmcgPSBuZXcgU2V0KHRoaXMuaXRlbXMpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSB0aW1lcj86IE5vZGVKUy5UaW1lb3V0O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaXRlbXM6IEFbXSwgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBXb3JrTGlzdE9wdGlvbnM8QT4gPSB7fSkge1xuICAgIHRoaXMudGltZW91dCA9IG9wdGlvbnMudGltZW91dCA/PyA2MF8wMDA7XG4gICAgdGhpcy5zY2hlZHVsZVRpbWVyKCk7XG4gIH1cblxuICBwdWJsaWMgY3Jvc3NPZmYoaXRlbTogQSkge1xuICAgIHRoaXMucmVtYWluaW5nLmRlbGV0ZShpdGVtKTtcbiAgICB0aGlzLnN0b3BUaW1lcigpO1xuICAgIGlmICh0aGlzLnJlbWFpbmluZy5zaXplID4gMCkge1xuICAgICAgdGhpcy5zY2hlZHVsZVRpbWVyKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRvbmUoKSB7XG4gICAgdGhpcy5yZW1haW5pbmcuY2xlYXIoKTtcbiAgICB0aGlzLnN0b3BUaW1lcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wVGltZXIoKSB7XG4gICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcbiAgICAgIHRoaXMudGltZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzY2hlZHVsZVRpbWVyKCkge1xuICAgIHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVwb3J0KCksIHRoaXMudGltZW91dCk7XG4gIH1cblxuICBwcml2YXRlIHJlcG9ydCgpIHtcbiAgICB0aGlzLm9wdGlvbnMub25UaW1lb3V0Py4odGhpcy5yZW1haW5pbmcpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya0xpc3RPcHRpb25zPEE+IHtcbiAgLyoqXG4gICAqIFdoZW4gdG8gcmVwbHkgd2l0aCByZW1haW5pbmcgaXRlbXNcbiAgICpcbiAgICogQGRlZmF1bHQgNjAwMDBcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aW1lb3V0IGhpdHNcbiAgICovXG4gIHJlYWRvbmx5IG9uVGltZW91dD86ICh4OiBTZXQ8QT4pID0+IHZvaWQ7XG59XG4iXX0=
@@ -1,5 +1,5 @@
1
- import { ResourceImpact } from '@aws-cdk/cloudformation-diff';
2
- import { IntegTestInfo } from '../runner/integration-tests';
1
+ import type { ResourceImpact } from '@aws-cdk/cloudformation-diff';
2
+ import type { IntegTestInfo } from '../runner/integration-tests';
3
3
  /**
4
4
  * The aggregate results from running assertions on a test case
5
5
  */