aws-delivlib 13.6.4 → 13.7.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.
@@ -891,7 +891,7 @@
891
891
  "PipelineProject.onEvent (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-codebuild/lib/project.js:65:22)",
892
892
  "PipelineProject.onStateChange (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-codebuild/lib/project.js:101:27)",
893
893
  "PipelineProject.onBuildFailed (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-codebuild/lib/project.js:142:27)",
894
- "Pipeline.addBuildFailureNotification (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:305:22)",
894
+ "Pipeline.addBuildFailureNotification (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:311:22)",
895
895
  "new Pipeline (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:85:14)",
896
896
  "new TestStack (/home/runner/work/aws-delivlib/aws-delivlib/lib/__tests__/test-stack.js:43:26)",
897
897
  "Object.<anonymous> (/home/runner/work/aws-delivlib/aws-delivlib/lib/__tests__/integ.delivlib.js:29:1)",
@@ -952,7 +952,7 @@
952
952
  "Topic.grantPublish (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-sns/lib/topic-base.js:65:26)",
953
953
  "SnsTopic.bind (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-events-targets/lib/sns.js:34:20)",
954
954
  "Rule.addTarget (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-events/lib/rule.js:85:36)",
955
- "Pipeline.addBuildFailureNotification (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:305:53)",
955
+ "Pipeline.addBuildFailureNotification (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:311:53)",
956
956
  "new Pipeline (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:85:14)",
957
957
  "new TestStack (/home/runner/work/aws-delivlib/aws-delivlib/lib/__tests__/test-stack.js:43:26)",
958
958
  "Object.<anonymous> (/home/runner/work/aws-delivlib/aws-delivlib/lib/__tests__/integ.delivlib.js:29:1)",
@@ -973,7 +973,7 @@
973
973
  "new Role (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-iam/lib/role.js:50:22)",
974
974
  "new Function (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-lambda/lib/function.js:82:35)",
975
975
  "new PipelineWatcher (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline-watcher/watcher.js:38:33)",
976
- "Pipeline.addFailureAlarm (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:294:16)",
976
+ "Pipeline.addFailureAlarm (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:300:16)",
977
977
  "new Pipeline (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:83:34)",
978
978
  "new TestStack (/home/runner/work/aws-delivlib/aws-delivlib/lib/__tests__/test-stack.js:43:26)",
979
979
  "Object.<anonymous> (/home/runner/work/aws-delivlib/aws-delivlib/lib/__tests__/integ.delivlib.js:29:1)",
@@ -995,7 +995,7 @@
995
995
  "Role.addToPrincipalPolicy (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-iam/lib/role.js:199:34)",
996
996
  "Function.addToRolePolicy (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-lambda/lib/function-base.js:55:19)",
997
997
  "new PipelineWatcher (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline-watcher/watcher.js:47:25)",
998
- "Pipeline.addFailureAlarm (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:294:16)",
998
+ "Pipeline.addFailureAlarm (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:300:16)",
999
999
  "new Pipeline (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:83:34)",
1000
1000
  "new TestStack (/home/runner/work/aws-delivlib/aws-delivlib/lib/__tests__/test-stack.js:43:26)",
1001
1001
  "Object.<anonymous> (/home/runner/work/aws-delivlib/aws-delivlib/lib/__tests__/integ.delivlib.js:29:1)",
@@ -1015,7 +1015,7 @@
1015
1015
  "trace": [
1016
1016
  "new Function (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-lambda/lib/function.js:154:26)",
1017
1017
  "new PipelineWatcher (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline-watcher/watcher.js:38:33)",
1018
- "Pipeline.addFailureAlarm (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:294:16)",
1018
+ "Pipeline.addFailureAlarm (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:300:16)",
1019
1019
  "new Pipeline (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:83:34)",
1020
1020
  "new TestStack (/home/runner/work/aws-delivlib/aws-delivlib/lib/__tests__/test-stack.js:43:26)",
1021
1021
  "Object.<anonymous> (/home/runner/work/aws-delivlib/aws-delivlib/lib/__tests__/integ.delivlib.js:29:1)",
@@ -1035,7 +1035,7 @@
1035
1035
  "trace": [
1036
1036
  "new Rule (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-events/lib/rule.js:33:26)",
1037
1037
  "new PipelineWatcher (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline-watcher/watcher.js:56:9)",
1038
- "Pipeline.addFailureAlarm (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:294:16)",
1038
+ "Pipeline.addFailureAlarm (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:300:16)",
1039
1039
  "new Pipeline (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:83:34)",
1040
1040
  "new TestStack (/home/runner/work/aws-delivlib/aws-delivlib/lib/__tests__/test-stack.js:43:26)",
1041
1041
  "Object.<anonymous> (/home/runner/work/aws-delivlib/aws-delivlib/lib/__tests__/integ.delivlib.js:29:1)",
@@ -1059,7 +1059,7 @@
1059
1059
  "Rule.addTarget (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-events/lib/rule.js:85:36)",
1060
1060
  "new Rule (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-events/lib/rule.js:50:18)",
1061
1061
  "new PipelineWatcher (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline-watcher/watcher.js:56:9)",
1062
- "Pipeline.addFailureAlarm (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:294:16)",
1062
+ "Pipeline.addFailureAlarm (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:300:16)",
1063
1063
  "new Pipeline (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:83:34)",
1064
1064
  "new TestStack (/home/runner/work/aws-delivlib/aws-delivlib/lib/__tests__/test-stack.js:43:26)",
1065
1065
  "Object.<anonymous> (/home/runner/work/aws-delivlib/aws-delivlib/lib/__tests__/integ.delivlib.js:29:1)",
@@ -1079,7 +1079,7 @@
1079
1079
  "trace": [
1080
1080
  "new Alarm (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-cloudwatch/lib/alarm.js:103:23)",
1081
1081
  "new PipelineWatcher (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline-watcher/watcher.js:70:22)",
1082
- "Pipeline.addFailureAlarm (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:294:16)",
1082
+ "Pipeline.addFailureAlarm (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:300:16)",
1083
1083
  "new Pipeline (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:83:34)",
1084
1084
  "new TestStack (/home/runner/work/aws-delivlib/aws-delivlib/lib/__tests__/test-stack.js:43:26)",
1085
1085
  "Object.<anonymous> (/home/runner/work/aws-delivlib/aws-delivlib/lib/__tests__/integ.delivlib.js:29:1)",
@@ -1165,7 +1165,7 @@
1165
1165
  "Project.onEvent (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-codebuild/lib/project.js:65:22)",
1166
1166
  "Project.onStateChange (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-codebuild/lib/project.js:101:27)",
1167
1167
  "Project.onBuildFailed (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-codebuild/lib/project.js:142:27)",
1168
- "Pipeline.addBuildFailureNotification (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:305:22)",
1168
+ "Pipeline.addBuildFailureNotification (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:311:22)",
1169
1169
  "Pipeline.addShellable (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:113:18)",
1170
1170
  "Pipeline.addTest (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:118:21)",
1171
1171
  "new TestStack (/home/runner/work/aws-delivlib/aws-delivlib/lib/__tests__/test-stack.js:56:18)",
@@ -1272,7 +1272,7 @@
1272
1272
  "Project.onEvent (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-codebuild/lib/project.js:65:22)",
1273
1273
  "Project.onStateChange (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-codebuild/lib/project.js:101:27)",
1274
1274
  "Project.onBuildFailed (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-codebuild/lib/project.js:142:27)",
1275
- "Pipeline.addBuildFailureNotification (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:305:22)",
1275
+ "Pipeline.addBuildFailureNotification (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:311:22)",
1276
1276
  "Pipeline.addShellable (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:113:18)",
1277
1277
  "Pipeline.addTest (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:118:21)",
1278
1278
  "new TestStack (/home/runner/work/aws-delivlib/aws-delivlib/lib/__tests__/test-stack.js:62:18)",
@@ -1379,7 +1379,7 @@
1379
1379
  "Project.onEvent (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-codebuild/lib/project.js:65:22)",
1380
1380
  "Project.onStateChange (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-codebuild/lib/project.js:101:27)",
1381
1381
  "Project.onBuildFailed (/home/runner/work/aws-delivlib/aws-delivlib/node_modules/monocdk/lib/aws-codebuild/lib/project.js:142:27)",
1382
- "Pipeline.addBuildFailureNotification (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:305:22)",
1382
+ "Pipeline.addBuildFailureNotification (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:311:22)",
1383
1383
  "Pipeline.addShellable (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:113:18)",
1384
1384
  "Pipeline.addTest (/home/runner/work/aws-delivlib/aws-delivlib/lib/pipeline.js:118:21)",
1385
1385
  "new TestStack (/home/runner/work/aws-delivlib/aws-delivlib/lib/__tests__/test-stack.js:72:18)",
package/lib/pipeline.d.ts CHANGED
@@ -224,6 +224,7 @@ export declare class Pipeline extends Construct {
224
224
  * The metrics that track failure of each action within the pipeline.
225
225
  */
226
226
  metricActionFailures(options: cloudwatch.MetricOptions): cloudwatch.Metric[];
227
+ addManualApprovalToStage(stageName: string, props?: cpipeline_actions.ManualApprovalActionProps): void;
227
228
  private addFailureAlarm;
228
229
  private addBuildFailureNotification;
229
230
  /**
package/lib/pipeline.js CHANGED
@@ -290,6 +290,12 @@ class Pipeline extends monocdk_1.Construct {
290
290
  });
291
291
  }));
292
292
  }
293
+ addManualApprovalToStage(stageName, props) {
294
+ const stage = this.getOrCreateStage(stageName);
295
+ stage.addAction(new monocdk_1.aws_codepipeline_actions.ManualApprovalAction(props !== null && props !== void 0 ? props : {
296
+ actionName: 'ManualApprovalAction',
297
+ }));
298
+ }
293
299
  addFailureAlarm(title) {
294
300
  return new pipeline_watcher_1.PipelineWatcher(this, 'PipelineWatcher', {
295
301
  pipeline: this.pipeline,
@@ -329,4 +335,4 @@ class Pipeline extends monocdk_1.Construct {
329
335
  }
330
336
  }
331
337
  exports.Pipeline = Pipeline;
332
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwaXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscUNBV2lCO0FBRWpCLDZDQUEyRDtBQUMzRCwyQ0FBcUQ7QUFDckQscUNBQStDO0FBQy9DLDJEQUF1RDtBQUN2RCxxREFBaUQ7QUFDakQseURBQXFEO0FBQ3JELHlEQUEyQztBQUMzQyxpREFBd0U7QUFFeEUsaUNBQW1EO0FBQ25ELDJDQUF3RDtBQUN4RCxpQ0FBb0Q7QUFFcEQsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUM7QUFDckMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDO0FBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDO0FBQ3hDLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxDQUFDO0FBd0p2Qzs7R0FFRztBQUNILE1BQWEsUUFBUyxTQUFRLG1CQUFTO0lBK0JyQyxZQUFZLE1BQWlCLEVBQUUsSUFBWSxFQUFFLEtBQW9COztRQUMvRCxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBVmQsV0FBTSxHQUF5QyxFQUFHLENBQUM7UUFZekQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBRTdCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSwwQkFBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFO1lBQzVELFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsd0JBQXdCLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyx3QkFBd0I7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QyxZQUE2QixFQUFFLE9BQWU7UUFDaEYsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsT0FBTztTQUNSO1FBRUQsWUFBWSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSw0QkFBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQzdGLE9BQU8sRUFBRSxvQkFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1NBQ2xELENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0ssUUFBUSxDQUFDLFNBQWlCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsU0FBaUIsRUFBRSxTQUFvQztRQUM5RSx5REFBeUQ7UUFDekQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUM3QixTQUFTO2dCQUNULFNBQVM7YUFDVixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUNoQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLDZCQUE2QixDQUFDLEtBQXVCO1FBQzNELE9BQU8sSUFBQSx3QkFBaUIsRUFBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkUsQ0FBQztDQUNGO0FBL1dELDRCQStXQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbnN0cnVjdCwgRHVyYXRpb24sIElDb25zdHJ1Y3QsXG4gIGF3c19jbG91ZHdhdGNoIGFzIGNsb3Vkd2F0Y2gsXG4gIGF3c19jb2RlYnVpbGQgYXMgY2J1aWxkLFxuICBhd3NfY29kZXBpcGVsaW5lIGFzIGNwaXBlbGluZSxcbiAgYXdzX2NvZGVwaXBlbGluZV9hY3Rpb25zIGFzIGNwaXBlbGluZV9hY3Rpb25zLFxuICBhd3NfZXZlbnRzIGFzIGV2ZW50cyxcbiAgYXdzX2V2ZW50c190YXJnZXRzIGFzIGV2ZW50c190YXJnZXRzLFxuICBhd3NfaWFtIGFzIGlhbSwgYXdzX3MzIGFzIHMzLFxuICBhd3Nfc25zIGFzIHNucyxcbiAgYXdzX3Nuc19zdWJzY3JpcHRpb25zIGFzIHNuc19zdWJzLFxufSBmcm9tICdtb25vY2RrJztcblxuaW1wb3J0IHsgQXV0b0J1aWxkLCBBdXRvQnVpbGRPcHRpb25zIH0gZnJvbSAnLi9hdXRvLWJ1aWxkJztcbmltcG9ydCB7IGNyZWF0ZUJ1aWxkRW52aXJvbm1lbnQgfSBmcm9tICcuL2J1aWxkLWVudic7XG5pbXBvcnQgeyBDYW5hcnksIENhbmFyeVByb3BzIH0gZnJvbSAnLi9jYW5hcnknO1xuaW1wb3J0IHsgQ2hhbmdlQ29udHJvbGxlciB9IGZyb20gJy4vY2hhbmdlLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgQ2hpbWVOb3RpZmllciB9IGZyb20gJy4vY2hpbWUtbm90aWZpZXInO1xuaW1wb3J0IHsgUGlwZWxpbmVXYXRjaGVyIH0gZnJvbSAnLi9waXBlbGluZS13YXRjaGVyJztcbmltcG9ydCAqIGFzIHB1Ymxpc2hpbmcgZnJvbSAnLi9wdWJsaXNoaW5nJztcbmltcG9ydCB7IEF1dG9CdW1wLCBBdXRvTWVyZ2VCYWNrLCBBdXRvQnVtcFByb3BzIH0gZnJvbSAnLi9wdWxsLXJlcXVlc3QnO1xuaW1wb3J0IHsgQXV0b01lcmdlQmFja1BpcGVsaW5lT3B0aW9ucyB9IGZyb20gJy4vcHVsbC1yZXF1ZXN0L21lcmdlLWJhY2snO1xuaW1wb3J0IHsgSVJlcG8sIFdyaXRhYmxlR2l0SHViUmVwbyB9IGZyb20gJy4vcmVwbyc7XG5pbXBvcnQgeyBTaGVsbGFibGUsIFNoZWxsYWJsZVByb3BzIH0gZnJvbSAnLi9zaGVsbGFibGUnO1xuaW1wb3J0IHsgZGV0ZXJtaW5lUnVuT3JkZXIsIGZsYXRNYXAgfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCBQVUJMSVNIX1NUQUdFX05BTUUgPSAnUHVibGlzaCc7XG5jb25zdCBURVNUX1NUQUdFX05BTUUgPSAnVGVzdCc7XG5jb25zdCBNRVRSSUNfTkFNRVNQQUNFID0gJ0NESy9EZWxpdmxpYic7XG5jb25zdCBGQUlMVVJFX01FVFJJQ19OQU1FID0gJ0ZhaWx1cmVzJztcblxuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgcmVwb3NpdG9yeSB0byBidWlsZCAoZS5nLiBHaXRIdWJSZXBvKS5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IElSZXBvO1xuXG4gIC8qKlxuICAgKiBBIGRpc3BsYXkgbmFtZSBmb3IgdGhpcyBwaXBlbGluZS5cbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHBoeXNpY2FsIG5hbWUgZm9yIHRoaXMgcGlwZWxpbmUuXG4gICAqIEBkZWZhdWx0IC0gYSBuZXcgbmFtZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQnJhbmNoIHRvIGJ1aWxkLlxuICAgKiBAZGVmYXVsdCBtYXN0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaD86IHN0cmluZztcblxuICAvKipcbiAgICogRW1haWwgdG8gc2VuZCBmYWlsdXJlIG5vdGlmaWNhdGlvbnMuXG4gICAqIEBkZWZhdWx0IC0gTm8gZW1haWwgbm90aWZpY2F0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uRW1haWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB1c2VkIGZvciB0aGUgYnVpbGRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBqc2lpL3N1cGVyY2hhaW4gKHNlZSBkb2NzKVxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRJbWFnZT86IGNidWlsZC5JQnVpbGRJbWFnZTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIENvZGVCdWlsZCBwcm9qZWN0IHRoYXQgd2lsbCBiZSBwYXJ0IG9mIHRoaXMgcGlwZWxpbmUuXG4gICAqIEBkZWZhdWx0IC0gYCR7cGlwZWxpbmVOYW1lfS1CdWlsZGAsIGlmIGBwaXBlbGluZU5hbWVgIHByb3BlcnR5IGlzIHNwZWNpZmllZDsgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQsIG90aGVyd2lzZS5cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkUHJvamVjdE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGNvbXB1dGUgdG8gdXNlIGZvciB0aGlzIGJ1aWxkLlxuICAgKiBTZWUgdGhlIHtAbGluayBDb21wdXRlVHlwZX0gZW51bSBmb3IgdGhlIHBvc3NpYmxlIHZhbHVlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdGFrZW4gZnJvbSB7QGxpbmsgI2J1aWxkSW1hZ2UjZGVmYXVsdENvbXB1dGVUeXBlfVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcHV0ZVR5cGU/OiBjYnVpbGQuQ29tcHV0ZVR5cGU7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBob3cgdGhlIHByb2plY3QgYnVpbGRzIERvY2tlciBpbWFnZXMuIFNwZWNpZnkgdHJ1ZSB0byBlbmFibGVcbiAgICogcnVubmluZyB0aGUgRG9ja2VyIGRhZW1vbiBpbnNpZGUgYSBEb2NrZXIgY29udGFpbmVyLiBUaGlzIHZhbHVlIG11c3QgYmVcbiAgICogc2V0IHRvIHRydWUgb25seSBpZiB0aGlzIGJ1aWxkIHByb2plY3Qgd2lsbCBiZSB1c2VkIHRvIGJ1aWxkIERvY2tlclxuICAgKiBpbWFnZXMsIGFuZCB0aGUgc3BlY2lmaWVkIGJ1aWxkIGVudmlyb25tZW50IGltYWdlIGlzIG5vdCBvbmUgcHJvdmlkZWQgYnlcbiAgICogQVdTIENvZGVCdWlsZCB3aXRoIERvY2tlciBzdXBwb3J0LiBPdGhlcndpc2UsIGFsbCBhc3NvY2lhdGVkIGJ1aWxkcyB0aGF0XG4gICAqIGF0dGVtcHQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgRG9ja2VyIGRhZW1vbiB3aWxsIGZhaWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwcml2aWxlZ2VkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHBhc3MgdG8gYnVpbGRcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50PzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgYnVpbGRzcGVjLCBhcyBhbiBhbHRlcm5hdGl2ZSB0byBhIGJ1aWxkc3BlYy55bWwgZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRTcGVjPzogY2J1aWxkLkJ1aWxkU3BlYztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gcmUtcnVuIHRoZSBwaXBlbGluZSBhZnRlciB5b3UndmUgdXBkYXRlZCBpdC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBjb25jdXJyZW5jeSBsaW1pdCB0ZXN0IGFuZCBwdWJsaXNoIHN0YWdlcy5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGlmIHRoaXMgdmFsdWUgaXMgMiwgdGhlbiBvbmx5IHR3byBhY3Rpb25zIHdpbGwgZXhlY3V0ZSBjb25jdXJyZW50bHkuXG4gICAqIElmIHRoaXMgdmFsdWUgaXMgMSwgdGhlIHBpcGVsaW5lIHdpbGwgbm90IGhhdmUgYW55IGNvbmN1cnJlbnQgZXhlY3V0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGxpbWl0XG4gICAqL1xuICByZWFkb25seSBjb25jdXJyZW5jeT86IG51bWJlcjtcblxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IGRyeVJ1biBmb3IgYWxsIHB1Ymxpc2hpbmcgc3RlcHNcbiAgICpcbiAgICogKENhbiBzdGlsbCBiZSBjaGFuZ2VkIHdoZW4gYWRkaW5nIGEgc3RlcCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBkcnlSdW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IGJ1aWxkIGNvbW1pdHMgdGhhdCBhcmUgcHVzaGVkIHRvIHRoaXMgcmVwb3NpdG9yeSwgaW5jbHVkaW5nIFBSIGJ1aWxkcyBvbiBnaXRodWIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBhdXRvQnVpbGQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBhdXRvLWJ1aWxkXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gJ2F1dG9CdWlsZE9wdGlvbnMucHVibGljTG9ncycgd2lsbCBiZSBzZXQgdG8gaXRzIGRlZmF1bHQuICdhdXRvQnVpbGRPcHRpb25zLmJ1aWxkc3BlYycgd2lsbCBiZSBjb25maWd1cmVkIHRvIG1hdGNoIHdpdGggdGhlXG4gICAqICdidWlsZFNwZWMnIHByb3BlcnR5LlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0b0J1aWxkT3B0aW9ucz86IEF1dG9CdWlsZE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFBvc3QgYSBub3RpZmljYXRpb24gdG8gdGhlIGdpdmVuIENoaW1lIHdlYmhvb2tzIGlmIHRoZSBwaXBlbGluZSBmYWlsc1xuICAgKiBAZGVmYXVsdCAtIG5vIENoaW1lIG5vdGlmaWNhdGlvbnMgb24gcGlwZWxpbmUgZmFpbHVyZVxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSBgbm90aWZ5T25GYWlsdXJlKClgIGluc3RlYWQgaW4gY29tYmluYXRpb24gd2l0aCBgUGlwZWxpbmVOb3RpZmljYXRpb24uY2hpbWUoKWAuXG4gICAqL1xuICByZWFkb25seSBjaGltZUZhaWx1cmVXZWJob29rcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgQ2hpbWUgbWVzc2FnZSB0byBwb3N0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQSBkZWZhdWx0IG1lc3NhZ2VcbiAgICovXG4gIHJlYWRvbmx5IGNoaW1lTWVzc2FnZT86IHN0cmluZztcblxuICAvKipcbiAgICogQnVpbGQgdGltZW91dFxuICAgKlxuICAgKiBIb3cgbG9uZyB0aGUgYnVpbGQgY2FuIHRha2UgYXQgbWF4aW11bSAoYmVmb3JlIGZhaWxpbmcgd2l0aCBhbiBlcnJvcikuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRHVyYXRpb24uaG91cnMoOClcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkVGltZW91dD86IER1cmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lTm90aWZpY2F0aW9uQmluZE9wdGlvbnMge1xuICByZWFkb25seSBwaXBlbGluZTogUGlwZWxpbmU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBpcGVsaW5lTm90aWZpY2F0aW9uIHtcbiAgYmluZChwaXBlbGluZTogUGlwZWxpbmVOb3RpZmljYXRpb25CaW5kT3B0aW9ucyk6IHZvaWQ7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYW4gYXV0byBidW1wIGZvciB0aGlzIHBpcGVsaW5lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9CdW1wT3B0aW9ucyBleHRlbmRzIE9taXQ8QXV0b0J1bXBQcm9wcywgJ3JlcG8nPiB7XG59XG5cbi8qKlxuICogRGVmaW5lcyBhIGRlbGl2bGliIENJL0NEIHBpcGVsaW5lLlxuICovXG5leHBvcnQgY2xhc3MgUGlwZWxpbmUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgYnVpbGRSb2xlPzogaWFtLklSb2xlO1xuICBwdWJsaWMgcmVhZG9ubHkgZmFpbHVyZUFsYXJtOiBjbG91ZHdhdGNoLkFsYXJtO1xuICBwdWJsaWMgcmVhZG9ubHkgYnVpbGRPdXRwdXQ6IGNwaXBlbGluZS5BcnRpZmFjdDtcbiAgcHVibGljIHJlYWRvbmx5IHNvdXJjZUFydGlmYWN0OiBjcGlwZWxpbmUuQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmltYXJ5IENvZGVCdWlsZCBwcm9qZWN0IG9mIHRoaXMgcGlwZWxpbmUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVpbGRQcm9qZWN0OiBjYnVpbGQuSVByb2plY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRvIGJ1aWxkIHByb2plY3QuIHVuZGVmaW5lZCBpZiAnYXV0b0J1aWxkJyBpcyBkaXNhYmxlZCBmb3IgdGhpcyBwaXBlbGluZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhdXRvQnVpbGRQcm9qZWN0PzogY2J1aWxkLlByb2plY3Q7XG5cbiAgLypcbiAgICogVGhlIHVuZGVybHlpbmcgQ29kZVBpcGVsaW5lIFBpcGVsaW5lIG9iamVjdCB0aGF0IG1vZGVscyB0aGlzIHBpcGVsaW5lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBpcGVsaW5lOiBjcGlwZWxpbmUuUGlwZWxpbmU7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnJhbmNoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgbm90aWZ5Pzogc25zLlRvcGljO1xuICBwcml2YXRlIHN0YWdlczogeyBbbmFtZTogc3RyaW5nXTogY3BpcGVsaW5lLklTdGFnZSB9ID0geyB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uY3VycmVuY3k/OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVwbzogSVJlcG87XG4gIHByaXZhdGUgcmVhZG9ubHkgZHJ5UnVuOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGJ1aWxkRW52aXJvbm1lbnQ6IGNidWlsZC5CdWlsZEVudmlyb25tZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IGJ1aWxkU3BlYz86IGNidWlsZC5CdWlsZFNwZWM7XG4gIHByaXZhdGUgZmlyc3RQdWJsaXNoU3RhZ2VOYW1lPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBQaXBlbGluZVByb3BzKSB7XG4gICAgc3VwZXIocGFyZW50LCBuYW1lKTtcblxuICAgIHRoaXMuY29uY3VycmVuY3kgPSBwcm9wcy5jb25jdXJyZW5jeTtcbiAgICB0aGlzLnJlcG8gPSBwcm9wcy5yZXBvO1xuICAgIHRoaXMuZHJ5UnVuID0gISFwcm9wcy5kcnlSdW47XG5cbiAgICB0aGlzLnBpcGVsaW5lID0gbmV3IGNwaXBlbGluZS5QaXBlbGluZSh0aGlzLCAnQnVpbGRQaXBlbGluZScsIHtcbiAgICAgIHBpcGVsaW5lTmFtZTogcHJvcHMucGlwZWxpbmVOYW1lLFxuICAgICAgcmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlOiBwcm9wcy5yZXN0YXJ0RXhlY3V0aW9uT25VcGRhdGUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBwcm9wcy5yZXN0YXJ0RXhlY3V0aW9uT25VcGRhdGUsXG4gICAgfSk7XG5cbiAgICB0aGlzLmJyYW5jaCA9IHByb3BzLmJyYW5jaCB8fCAnbWFzdGVyJztcbiAgICB0aGlzLnNvdXJjZUFydGlmYWN0ID0gcHJvcHMucmVwby5jcmVhdGVTb3VyY2VTdGFnZSh0aGlzLnBpcGVsaW5lLCB0aGlzLmJyYW5jaCk7XG5cbiAgICB0aGlzLmJ1aWxkRW52aXJvbm1lbnQgPSBjcmVhdGVCdWlsZEVudmlyb25tZW50KHByb3BzKTtcbiAgICB0aGlzLmJ1aWxkU3BlYyA9IHByb3BzLmJ1aWxkU3BlYztcblxuICAgIGxldCBidWlsZFByb2plY3ROYW1lID0gcHJvcHMuYnVpbGRQcm9qZWN0TmFtZTtcbiAgICBpZiAoYnVpbGRQcm9qZWN0TmFtZSA9PT0gdW5kZWZpbmVkICYmIHByb3BzLnBpcGVsaW5lTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBidWlsZFByb2plY3ROYW1lID0gYCR7cHJvcHMucGlwZWxpbmVOYW1lfS1CdWlsZGA7XG4gICAgfVxuICAgIHRoaXMuYnVpbGRQcm9qZWN0ID0gbmV3IGNidWlsZC5QaXBlbGluZVByb2plY3QodGhpcywgJ0J1aWxkUHJvamVjdCcsIHtcbiAgICAgIHByb2plY3ROYW1lOiBidWlsZFByb2plY3ROYW1lLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuYnVpbGRFbnZpcm9ubWVudCxcbiAgICAgIGJ1aWxkU3BlYzogdGhpcy5idWlsZFNwZWMsXG4gICAgICB0aW1lb3V0OiBwcm9wcy5idWlsZFRpbWVvdXQgPz8gRHVyYXRpb24uaG91cnMoOCksXG4gICAgfSk7XG5cbiAgICB0aGlzLmJ1aWxkUm9sZSA9IHRoaXMuYnVpbGRQcm9qZWN0LnJvbGU7XG5cbiAgICBjb25zdCBidWlsZFN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKCdCdWlsZCcpO1xuICAgIGNvbnN0IGJ1aWxkT3V0cHV0ID0gbmV3IGNwaXBlbGluZS5BcnRpZmFjdCgpO1xuICAgIGJ1aWxkU3RhZ2UuYWRkQWN0aW9uKG5ldyBjcGlwZWxpbmVfYWN0aW9ucy5Db2RlQnVpbGRBY3Rpb24oe1xuICAgICAgYWN0aW9uTmFtZTogJ0J1aWxkJyxcbiAgICAgIHByb2plY3Q6IHRoaXMuYnVpbGRQcm9qZWN0LFxuICAgICAgaW5wdXQ6IHRoaXMuc291cmNlQXJ0aWZhY3QsXG4gICAgICBvdXRwdXRzOiBbYnVpbGRPdXRwdXRdLFxuICAgIH0pKTtcbiAgICB0aGlzLmJ1aWxkT3V0cHV0ID0gYnVpbGRPdXRwdXQ7XG5cbiAgICBpZiAocHJvcHMubm90aWZpY2F0aW9uRW1haWwpIHtcbiAgICAgIHRoaXMubm90aWZ5ID0gbmV3IHNucy5Ub3BpYyh0aGlzLCAnTm90aWZpY2F0aW9uc1RvcGljJyk7XG4gICAgICB0aGlzLm5vdGlmeS5hZGRTdWJzY3JpcHRpb24obmV3IHNuc19zdWJzLkVtYWlsU3Vic2NyaXB0aW9uKHByb3BzLm5vdGlmaWNhdGlvbkVtYWlsKSk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgZmFpbHVyZSBhbGFybSBmb3IgdGhlIGVudGlyZSBwaXBlbGluZS5cbiAgICB0aGlzLmZhaWx1cmVBbGFybSA9IHRoaXMuYWRkRmFpbHVyZUFsYXJtKHByb3BzLnRpdGxlKTtcblxuICAgIC8vIGVtaXQgYW4gU05TIG5vdGlmaWNhdGlvbiBldmVyeSB0aW1lIGJ1aWxkIGZhaWxzLlxuICAgIHRoaXMuYWRkQnVpbGRGYWlsdXJlTm90aWZpY2F0aW9uKHRoaXMuYnVpbGRQcm9qZWN0LCBgJHtwcm9wcy50aXRsZX0gYnVpbGQgZmFpbGVkYCk7XG5cbiAgICAvLyBBbHNvIGVtaXQgdG8gQ2hpbWUgd2ViaG9va3MgaWYgY29uZmlndXJlZFxuICAgIGlmIChwcm9wcy5jaGltZUZhaWx1cmVXZWJob29rcykge1xuICAgICAgbmV3IENoaW1lTm90aWZpZXIodGhpcywgJ0NoaW1lTm90aWZpZXInLCB7XG4gICAgICAgIHBpcGVsaW5lOiB0aGlzLnBpcGVsaW5lLFxuICAgICAgICBtZXNzYWdlOiBwcm9wcy5jaGltZU1lc3NhZ2UsXG4gICAgICAgIHdlYmhvb2tVcmxzOiBwcm9wcy5jaGltZUZhaWx1cmVXZWJob29rcyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5hdXRvQnVpbGQpIHtcbiAgICAgIHRoaXMuYXV0b0J1aWxkUHJvamVjdCA9IHRoaXMuYXV0b0J1aWxkKHByb3BzLmF1dG9CdWlsZE9wdGlvbnMpLnByb2plY3Q7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5vdGlmeU9uRmFpbHVyZShub3RpZmljYXRpb246IElQaXBlbGluZU5vdGlmaWNhdGlvbikge1xuICAgIG5vdGlmaWNhdGlvbi5iaW5kKHtcbiAgICAgIHBpcGVsaW5lOiB0aGlzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBhY3Rpb24gdG8gcnVuIGEgc2hlbGwgc2NyaXB0IHRvIHRoZSBwaXBlbGluZVxuICAgKlxuICAgKiBAcmV0dXJuIFRoZSBTaGVsbGFibGUgYW5kIHRoZSBBY3Rpb24gYWRkZWQgdG8gdGhlIHBpcGVsaW5lLlxuICAgKi9cbiAgcHVibGljIGFkZFNoZWxsYWJsZShzdGFnZU5hbWU6IHN0cmluZywgaWQ6IHN0cmluZywgb3B0aW9uczogQWRkU2hlbGxhYmxlT3B0aW9ucyk6IHtcbiAgICBzaGVsbGFibGU6IFNoZWxsYWJsZTsgYWN0aW9uOiBjcGlwZWxpbmVfYWN0aW9ucy5Db2RlQnVpbGRBY3Rpb247fSB7XG4gICAgY29uc3Qgc3RhZ2UgPSB0aGlzLmdldE9yQ3JlYXRlU3RhZ2Uoc3RhZ2VOYW1lKTtcblxuICAgIGNvbnN0IHNoID0gbmV3IFNoZWxsYWJsZSh0aGlzLCBpZCwgb3B0aW9ucyk7XG4gICAgY29uc3QgYWN0aW9uID0gc2guYWRkVG9QaXBlbGluZShcbiAgICAgIHN0YWdlLFxuICAgICAgb3B0aW9ucy5hY3Rpb25OYW1lIHx8IGBBY3Rpb24ke2lkfWAsXG4gICAgICBvcHRpb25zLmlucHV0QXJ0aWZhY3QgfHwgdGhpcy5idWlsZE91dHB1dCxcbiAgICAgIHRoaXMuZGV0ZXJtaW5lUnVuT3JkZXJGb3JOZXdBY3Rpb24oc3RhZ2UpKTtcblxuICAgIGlmIChvcHRpb25zLmZhaWx1cmVOb3RpZmljYXRpb24pIHtcbiAgICAgIHRoaXMuYWRkQnVpbGRGYWlsdXJlTm90aWZpY2F0aW9uKHNoLnByb2plY3QsIG9wdGlvbnMuZmFpbHVyZU5vdGlmaWNhdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc2hlbGxhYmxlOiBzaCwgYWN0aW9uIH07XG4gIH1cblxuICBwdWJsaWMgYWRkVGVzdChpZDogc3RyaW5nLCBwcm9wczogU2hlbGxhYmxlUHJvcHMpOiB7c2hlbGxhYmxlOiBTaGVsbGFibGU7IGFjdGlvbjogY3BpcGVsaW5lX2FjdGlvbnMuQ29kZUJ1aWxkQWN0aW9ufSB7XG4gICAgcmV0dXJuIHRoaXMuYWRkU2hlbGxhYmxlKFRFU1RfU1RBR0VfTkFNRSwgaWQsIHtcbiAgICAgIGFjdGlvbk5hbWU6IGBUZXN0JHtpZH1gLFxuICAgICAgZmFpbHVyZU5vdGlmaWNhdGlvbjogYFRlc3QgJHtpZH0gZmFpbGVkYCxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlL2Rpc2NvdmVyeSBtZXRob2QgdGhhdCBkZWZpbmVzIGEgY2FuYXJ5IHRlc3QgaW4geW91ciBhY2NvdW50LlxuICAgKiBAcGFyYW0gaWQgdGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gcHJvcHMgY2FuYXJ5IG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBhZGRDYW5hcnkoaWQ6IHN0cmluZywgcHJvcHM6IENhbmFyeVByb3BzKSB7XG4gICAgcmV0dXJuIG5ldyBDYW5hcnkodGhpcywgYENhbmFyeSR7aWR9YCwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIGFkZFB1Ymxpc2gocHVibGlzaGVyOiBJUHVibGlzaGVyLCBvcHRpb25zOiBBZGRQdWJsaXNoT3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgcHVibGlzaFN0YWdlTmFtZSA9IG9wdGlvbnMuc3RhZ2VOYW1lID8/IFBVQkxJU0hfU1RBR0VfTkFNRTtcbiAgICBpZiAoIXRoaXMuZmlyc3RQdWJsaXNoU3RhZ2VOYW1lKSB7XG4gICAgICB0aGlzLmZpcnN0UHVibGlzaFN0YWdlTmFtZSA9IHB1Ymxpc2hTdGFnZU5hbWU7XG4gICAgfVxuICAgIGNvbnN0IHN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKHB1Ymxpc2hTdGFnZU5hbWUpO1xuXG4gICAgcHVibGlzaGVyLmFkZFRvUGlwZWxpbmUoc3RhZ2UsIGAke3B1Ymxpc2hlci5ub2RlLmlkfVB1Ymxpc2hgLCB7XG4gICAgICBpbnB1dEFydGlmYWN0OiBvcHRpb25zLmlucHV0QXJ0aWZhY3QgfHwgdGhpcy5idWlsZE91dHB1dCxcbiAgICAgIHJ1bk9yZGVyOiB0aGlzLmRldGVybWluZVJ1bk9yZGVyRm9yTmV3QWN0aW9uKHN0YWdlKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2hhbmdlIGNvbnRyb2wgcG9saWN5IHRvIGJsb2NrIHRyYW5zaXRpb25zIGludG8gdGhlIHB1Ymxpc2ggc3RhZ2UgZHVyaW5nIGNlcnRhaW4gdGltZSB3aW5kb3dzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyB0aGUgb3B0aW9ucyB0byBjb25maWd1cmUgdGhlIGNoYW5nZSBjb250cm9sIHBvbGljeS5cbiAgICovXG4gIHB1YmxpYyBhZGRDaGFuZ2VDb250cm9sKG9wdGlvbnM6IEFkZENoYW5nZUNvbnRyb2xPcHRpb25zID0geyB9KTogQ2hhbmdlQ29udHJvbGxlciB7XG4gICAgY29uc3QgcHVibGlzaFN0YWdlID0gdGhpcy5nZXRTdGFnZSh0aGlzLmZpcnN0UHVibGlzaFN0YWdlTmFtZSA/PyBQVUJMSVNIX1NUQUdFX05BTUUpO1xuICAgIGlmICghcHVibGlzaFN0YWdlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoaXMgcGlwZWxpbmUgZG9lcyBub3QgaGF2ZSBhICR7UFVCTElTSF9TVEFHRV9OQU1FfSBzdGFnZSB5ZXQuIEFkZCBvbmUgZmlyc3QuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBDaGFuZ2VDb250cm9sbGVyKHRoaXMsICdDaGFuZ2VDb250cm9sbGVyJywge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHBpcGVsaW5lU3RhZ2U6IHB1Ymxpc2hTdGFnZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBwdWJsaXNoVG9OcG0ob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9OcG1Qcm9qZWN0UHJvcHMgJiBBZGRQdWJsaXNoT3B0aW9ucykge1xuICAgIHRoaXMuYWRkUHVibGlzaChuZXcgcHVibGlzaGluZy5QdWJsaXNoVG9OcG1Qcm9qZWN0KHRoaXMsICdOcG0nLCB7XG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvTWF2ZW4ob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9NYXZlblByb2plY3RQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb01hdmVuUHJvamVjdCh0aGlzLCAnTWF2ZW4nLCB7XG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvTnVHZXQob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9OdUdldFByb2plY3RQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb051R2V0UHJvamVjdCh0aGlzLCAnTnVHZXQnLCB7XG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvR2l0SHViUGFnZXMob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoRG9jc1RvR2l0SHViUHJvamVjdFByb3BzICYgQWRkUHVibGlzaE9wdGlvbnMpIHtcbiAgICB0aGlzLmFkZFB1Ymxpc2gobmV3IHB1Ymxpc2hpbmcuUHVibGlzaERvY3NUb0dpdEh1YlByb2plY3QodGhpcywgJ0dpdEh1YlBhZ2VzJywge1xuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb0dpdEh1YihvcHRpb25zOiBwdWJsaXNoaW5nLlB1Ymxpc2hUb0dpdEh1YlByb3BzICYgQWRkUHVibGlzaE9wdGlvbnMpIHtcbiAgICB0aGlzLmFkZFB1Ymxpc2gobmV3IHB1Ymxpc2hpbmcuUHVibGlzaFRvR2l0SHViKHRoaXMsICdHaXRIdWInLCB7XG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvUHlQSShvcHRpb25zOiBwdWJsaXNoaW5nLlB1Ymxpc2hUb1B5UGlQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb1B5UGkodGhpcywgJ1B5UEknLCB7XG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvUzMoaWQ6IHN0cmluZywgb3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9TM1Byb3BzICYgQWRkUHVibGlzaE9wdGlvbnMpIHtcbiAgICB0aGlzLmFkZFB1Ymxpc2gobmV3IHB1Ymxpc2hpbmcuUHVibGlzaFRvUzModGhpcywgaWQsIHtcbiAgICAgIGRyeVJ1bjogdGhpcy5kcnlSdW4sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoIEdvbGFuZyBjb2RlIGZyb20gYGdvYCBkaXJlY3RvcnkgaW4gYnVpbGQgYXJ0aWZhY3QgdG8gYSBHaXRIdWIgcmVwb3NpdG9yeS5cbiAgICovXG4gIHB1YmxpYyBwdWJsaXNoVG9Hb2xhbmcob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9Hb2xhbmdQcm9wcykge1xuICAgIHRoaXMuYWRkUHVibGlzaChuZXcgcHVibGlzaGluZy5QdWJsaXNoVG9Hb2xhbmcodGhpcywgJ0dvbGFuZycsIHtcbiAgICAgIGRyeVJ1bjogdGhpcy5kcnlSdW4sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIGF1dG9tYXRpYyBidW1wcyBmb3IgdGhlIHNvdXJjZSByZXBvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBhdXRvIGJ1bXAgKHNlZSBBdXRvQnVtcE9wdGlvbnMgZm9yIGRlc2NyaXB0aW9uIG9mIGRlZmF1bHRzKVxuICAgKi9cbiAgcHVibGljIGF1dG9CdW1wKG9wdGlvbnM/OiBBdXRvQnVtcE9wdGlvbnMpOiBBdXRvQnVtcCB7XG4gICAgaWYgKCFXcml0YWJsZUdpdEh1YlJlcG8uaXNXcml0YWJsZUdpdEh1YlJlcG8odGhpcy5yZXBvKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInJlcG9cIiBtdXN0IGJlIGEgV3JpdGFibGVHaXRIdWJSZXBvIGluIG9yZGVyIHRvIGVuYWJsZSBhdXRvLWJ1bXAnKTtcbiAgICB9XG5cbiAgICBjb25zdCBhdXRvQnVtcCA9IG5ldyBBdXRvQnVtcCh0aGlzLCAnQXV0b0J1bXAnLCB7XG4gICAgICByZXBvOiB0aGlzLnJlcG8sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF1dG9CdW1wO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgYXV0b21hdGljIG1lcmdlIGJhY2tzIGZvciB0aGUgc291cmNlIHJlcG8uXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGF1dG8gYnVtcCAoc2VlIEF1dG9NZXJnZUJhY2tQaXBlbGluZU9wdGlvbnMgZm9yIGRlc2NyaXB0aW9uIG9mIGRlZmF1bHRzKVxuICAgKi9cbiAgcHVibGljIGF1dG9NZXJnZUJhY2sob3B0aW9ucz86IEF1dG9NZXJnZUJhY2tQaXBlbGluZU9wdGlvbnMpIHtcbiAgICBpZiAoIVdyaXRhYmxlR2l0SHViUmVwby5pc1dyaXRhYmxlR2l0SHViUmVwbyh0aGlzLnJlcG8pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wicmVwb1wiIG11c3QgYmUgYSBXcml0YWJsZUdpdEh1YlJlcG8gaW4gb3JkZXIgdG8gZW5hYmxlIGF1dG8tbWVyZ2UtYmFjaycpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lcmdlQmFjayA9IG5ldyBBdXRvTWVyZ2VCYWNrKHRoaXMsICdNZXJnZUJhY2snLCB7XG4gICAgICByZXBvOiB0aGlzLnJlcG8sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuXG4gICAgaWYgKG9wdGlvbnM/LnN0YWdlKSB7XG5cbiAgICAgIGNvbnN0IGFmdGVyU3RhZ2UgPSB0aGlzLmdldFN0YWdlKG9wdGlvbnMuc3RhZ2UuYWZ0ZXIpO1xuXG4gICAgICBpZiAoIWFmdGVyU3RhZ2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnb3B0aW9ucy5zdGFnZS5hZnRlcicgbXVzdCBiZSBjb25maWd1cmVkIHRvIGFuIGV4aXN0aW5nIHN0YWdlOiAke29wdGlvbnMuc3RhZ2UuYWZ0ZXJ9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKG9wdGlvbnMuc3RhZ2UubmFtZSA/PyAnTWVyZ2VCYWNrJywgeyBqdXN0QWZ0ZXI6IGFmdGVyU3RhZ2UgfSk7XG4gICAgICBzdGFnZS5hZGRBY3Rpb24obmV3IGNwaXBlbGluZV9hY3Rpb25zLkNvZGVCdWlsZEFjdGlvbih7XG4gICAgICAgIGFjdGlvbk5hbWU6ICdDcmVhdGVNZXJnZUJhY2tQdWxsUmVxdWVzdCcsXG4gICAgICAgIHByb2plY3Q6IG1lcmdlQmFjay5wci5wcm9qZWN0LFxuICAgICAgICBpbnB1dDogdGhpcy5zb3VyY2VBcnRpZmFjdCxcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBhdXRvbWF0aWMgYnVpbGRzIG9mIHB1bGwgcmVxdWVzdHMgaW4gdGhlIEdpdGh1YiByZXBvc2l0b3J5IGFuZCBwb3N0cyB0aGVcbiAgICogcmVzdWx0cyBiYWNrIGFzIGEgY29tbWVudCB3aXRoIGEgcHVibGljIGxpbmsgdG8gdGhlIGJ1aWxkIGxvZ3MuXG4gICAqL1xuICBwdWJsaWMgYXV0b0J1aWxkKG9wdGlvbnM6IEF1dG9CdWlsZE9wdGlvbnMgPSB7IH0pOiBBdXRvQnVpbGQge1xuICAgIHJldHVybiBuZXcgQXV0b0J1aWxkKHRoaXMsICdBdXRvQnVpbGQnLCB7XG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5idWlsZEVudmlyb25tZW50LFxuICAgICAgcmVwbzogdGhpcy5yZXBvLFxuICAgICAgYnVpbGRTcGVjOiBvcHRpb25zLmJ1aWxkU3BlYyB8fCB0aGlzLmJ1aWxkU3BlYyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1ldHJpYyB0aGF0IHRyYWNrcyBwaXBlbGluZSBmYWlsdXJlcy5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNGYWlsdXJlcyhvcHRpb25zOiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICBuYW1lc3BhY2U6IE1FVFJJQ19OQU1FU1BBQ0UsXG4gICAgICBtZXRyaWNOYW1lOiBGQUlMVVJFX01FVFJJQ19OQU1FLFxuICAgICAgZGltZW5zaW9uczoge1xuICAgICAgICBQaXBlbGluZTogdGhpcy5waXBlbGluZS5waXBlbGluZU5hbWUsXG4gICAgICB9LFxuICAgICAgc3RhdGlzdGljOiAnU3VtJyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1ldHJpY3MgdGhhdCB0cmFjayBmYWlsdXJlIG9mIGVhY2ggYWN0aW9uIHdpdGhpbiB0aGUgcGlwZWxpbmUuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQWN0aW9uRmFpbHVyZXMob3B0aW9uczogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWNbXSB7XG4gICAgcmV0dXJuIGZsYXRNYXAodGhpcy5waXBlbGluZS5zdGFnZXMsIHN0YWdlID0+IHN0YWdlLmFjdGlvbnMubWFwKGFjdGlvbiA9PiB7XG4gICAgICByZXR1cm4gbmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAgICAgbmFtZXNwYWNlOiBNRVRSSUNfTkFNRVNQQUNFLFxuICAgICAgICBtZXRyaWNOYW1lOiBGQUlMVVJFX01FVFJJQ19OQU1FLFxuICAgICAgICBkaW1lbnNpb25zOiB7XG4gICAgICAgICAgUGlwZWxpbmU6IHRoaXMucGlwZWxpbmUucGlwZWxpbmVOYW1lLFxuICAgICAgICAgIEFjdGlvbjogYWN0aW9uLmFjdGlvblByb3BlcnRpZXMuYWN0aW9uTmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdGlzdGljOiAnU3VtJyxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRmFpbHVyZUFsYXJtKHRpdGxlPzogc3RyaW5nKTogY2xvdWR3YXRjaC5BbGFybSB7XG4gICAgcmV0dXJuIG5ldyBQaXBlbGluZVdhdGNoZXIodGhpcywgJ1BpcGVsaW5lV2F0Y2hlcicsIHtcbiAgICAgIHBpcGVsaW5lOiB0aGlzLnBpcGVsaW5lLFxuICAgICAgbWV0cmljTmFtZXNwYWNlOiBNRVRSSUNfTkFNRVNQQUNFLFxuICAgICAgZmFpbHVyZU1ldHJpY05hbWU6IEZBSUxVUkVfTUVUUklDX05BTUUsXG4gICAgICB0aXRsZSxcbiAgICB9KS5hbGFybTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQnVpbGRGYWlsdXJlTm90aWZpY2F0aW9uKGJ1aWxkUHJvamVjdDogY2J1aWxkLklQcm9qZWN0LCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMubm90aWZ5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYnVpbGRQcm9qZWN0Lm9uQnVpbGRGYWlsZWQoJ09uQnVpbGRGYWlsZWQnKS5hZGRUYXJnZXQobmV3IGV2ZW50c190YXJnZXRzLlNuc1RvcGljKHRoaXMubm90aWZ5LCB7XG4gICAgICBtZXNzYWdlOiBldmVudHMuUnVsZVRhcmdldElucHV0LmZyb21UZXh0KG1lc3NhZ2UpLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB0aGUgc3RhZ2Ugb3IgdW5kZWZpbmVkIGlmIHRoZSBzdGFnZSBkb2Vzbid0IGV4aXN0XG4gICAqL1xuICBwcml2YXRlIGdldFN0YWdlKHN0YWdlTmFtZTogc3RyaW5nKTogY3BpcGVsaW5lLklTdGFnZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhZ2VzW3N0YWdlTmFtZV07XG4gIH1cblxuICBwcml2YXRlIGdldE9yQ3JlYXRlU3RhZ2Uoc3RhZ2VOYW1lOiBzdHJpbmcsIHBsYWNlbWVudD86IGNwaXBlbGluZS5TdGFnZVBsYWNlbWVudCk6IGNwaXBlbGluZS5JU3RhZ2Uge1xuICAgIC8vIG90aGVyd2lzZSwgZ3JvdXAgYWxsIGFjdGlvbnMgc28gdGhleSBydW4gY29uY3VycmVudGx5LlxuICAgIGxldCBzdGFnZSA9IHRoaXMuZ2V0U3RhZ2Uoc3RhZ2VOYW1lKTtcbiAgICBpZiAoIXN0YWdlKSB7XG4gICAgICBzdGFnZSA9IHRoaXMucGlwZWxpbmUuYWRkU3RhZ2Uoe1xuICAgICAgICBzdGFnZU5hbWUsXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zdGFnZXNbc3RhZ2VOYW1lXSA9IHN0YWdlO1xuICAgIH1cbiAgICByZXR1cm4gc3RhZ2U7XG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZVJ1bk9yZGVyRm9yTmV3QWN0aW9uKHN0YWdlOiBjcGlwZWxpbmUuSVN0YWdlKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gZGV0ZXJtaW5lUnVuT3JkZXIoc3RhZ2UuYWN0aW9ucy5sZW5ndGgsIHRoaXMuY29uY3VycmVuY3kpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVB1Ymxpc2hlciBleHRlbmRzIElDb25zdHJ1Y3Qge1xuICBhZGRUb1BpcGVsaW5lKHN0YWdlOiBjcGlwZWxpbmUuSVN0YWdlLCBpZDogc3RyaW5nLCBvcHRpb25zOiBBZGRUb1BpcGVsaW5lT3B0aW9ucyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkVG9QaXBlbGluZU9wdGlvbnMge1xuICBpbnB1dEFydGlmYWN0PzogY3BpcGVsaW5lLkFydGlmYWN0O1xuICBydW5PcmRlcj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGRDaGFuZ2VDb250cm9sT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYnVja2V0IGluIHdoaWNoIHRoZSBDaGFuZ2VDb250cm9sIGlDYWwgZG9jdW1lbnQgd2lsbCBiZSBzdG9yZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGEgbmV3IGJ1Y2tldCB3aWxsIGJlIHByb3Zpc2lvbmVkLlxuICAgKi9cbiAgY2hhbmdlQ29udHJvbEJ1Y2tldD86IHMzLklCdWNrZXQ7XG5cbiAgLyoqXG4gICAqIFRoZSBrZXkgaW4gd2hpY2ggdGhlIGlDYWwgZmlsbGUgd2lsbCBiZSBzdG9yZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdjaGFuZ2UtY29udHJvbC5pY2FsJ1xuICAgKi9cbiAgY2hhbmdlQ29udHJvbE9iamVjdEtleT86IHN0cmluZztcblxuICAvKipcbiAgICogU2NoZWR1bGUgdG8gcnVuIHRoZSBjaGFuZ2UgY29udHJvbGxlciBvblxuICAgKlxuICAgKiBAZGVmYXVsdCByYXRlKDE1IG1pbnV0ZXMpXG4gICAqL1xuICBzY2hlZHVsZUV4cHJlc3Npb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkUHVibGlzaE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGlucHV0IGFydGlmYWN0IHRvIHVzZVxuICAgKlxuICAgKiBAZGVmYXVsdCBCdWlsZCBvdXRwdXQgYXJ0aWZhY3RcbiAgICovXG4gIGlucHV0QXJ0aWZhY3Q/OiBjcGlwZWxpbmUuQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIFN0YWdlIG5hbWUgdG8gYWRkIHB1Ymxpc2hpbmcgam9iIHRvXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoaXMgd2lsbCBiZSB0aGUgc3RhZ2UgbmFtZSBgJ1B1Ymxpc2gnYCwgYnV0IGlmIHlvdSB3YW50IHRvXG4gICAqIHNlcGFyYXRlIG91dCB0aGUgcHVibGlzaGluZyBhY3Rpb25zIGludG8gZGlmZmVyZW50IHN0YWdlcyAoaW4gb3JkZXIgdG9cbiAgICogYmxvY2svdW5ibG9jayB0aGVtIHNlcGFyYXRlbHkgZm9yIGV4YW1wbGUpIHlvdSBjYW4gY2hhbmdlIHRoaXMuXG4gICAqXG4gICAqIFN0YWdlcyBhcHBlYXIgaW4gdGhlIHBpcGVsaW5lIGluIHRoZSBvcmRlciB0aGV5IGFyZSByZWZlcmVuY2VkIGZvclxuICAgKiB0aGUgZmlyc3QgdGltZS5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJQdWJsaXNoXCJcbiAgICovXG4gIHJlYWRvbmx5IHN0YWdlTmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGRTaGVsbGFibGVPcHRpb25zIGV4dGVuZHMgU2hlbGxhYmxlUHJvcHMge1xuICAvKipcbiAgICogU3RyaW5nIHRvIHVzZSBhcyBhY3Rpb24gbmFtZVxuICAgKlxuICAgKiBAZGVmYXVsdCBJZFxuICAgKi9cbiAgYWN0aW9uTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogTWVzc2FnZSB0byB1c2UgYXMgZmFpbHVyZSBub3RpZmljYXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgTm8gbm90aWZpY2F0aW9uXG4gICAqL1xuICBmYWlsdXJlTm90aWZpY2F0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgYXJ0aWZhY3QgdG8gdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IEJ1aWxkIG91dHB1dCBhcnRpZmFjdFxuICAgKi9cbiAgaW5wdXRBcnRpZmFjdD86IGNwaXBlbGluZS5BcnRpZmFjdDtcbn1cbiJdfQ==
338
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwaXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscUNBV2lCO0FBRWpCLDZDQUEyRDtBQUMzRCwyQ0FBcUQ7QUFDckQscUNBQStDO0FBQy9DLDJEQUF1RDtBQUN2RCxxREFBaUQ7QUFDakQseURBQXFEO0FBQ3JELHlEQUEyQztBQUMzQyxpREFBd0U7QUFFeEUsaUNBQW1EO0FBQ25ELDJDQUF3RDtBQUN4RCxpQ0FBb0Q7QUFFcEQsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUM7QUFDckMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDO0FBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDO0FBQ3hDLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxDQUFDO0FBd0p2Qzs7R0FFRztBQUNILE1BQWEsUUFBUyxTQUFRLG1CQUFTO0lBK0JyQyxZQUFZLE1BQWlCLEVBQUUsSUFBWSxFQUFFLEtBQW9COztRQUMvRCxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBVmQsV0FBTSxHQUF5QyxFQUFHLENBQUM7UUFZekQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBRTdCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSwwQkFBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFO1lBQzVELFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsd0JBQXdCLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyx3QkFBd0I7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LE9BQU8sSUFBQSx3QkFBaUIsRUFBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkUsQ0FBQztDQUNGO0FBdFhELDRCQXNYQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbnN0cnVjdCwgRHVyYXRpb24sIElDb25zdHJ1Y3QsXG4gIGF3c19jbG91ZHdhdGNoIGFzIGNsb3Vkd2F0Y2gsXG4gIGF3c19jb2RlYnVpbGQgYXMgY2J1aWxkLFxuICBhd3NfY29kZXBpcGVsaW5lIGFzIGNwaXBlbGluZSxcbiAgYXdzX2NvZGVwaXBlbGluZV9hY3Rpb25zIGFzIGNwaXBlbGluZV9hY3Rpb25zLFxuICBhd3NfZXZlbnRzIGFzIGV2ZW50cyxcbiAgYXdzX2V2ZW50c190YXJnZXRzIGFzIGV2ZW50c190YXJnZXRzLFxuICBhd3NfaWFtIGFzIGlhbSwgYXdzX3MzIGFzIHMzLFxuICBhd3Nfc25zIGFzIHNucyxcbiAgYXdzX3Nuc19zdWJzY3JpcHRpb25zIGFzIHNuc19zdWJzLFxufSBmcm9tICdtb25vY2RrJztcblxuaW1wb3J0IHsgQXV0b0J1aWxkLCBBdXRvQnVpbGRPcHRpb25zIH0gZnJvbSAnLi9hdXRvLWJ1aWxkJztcbmltcG9ydCB7IGNyZWF0ZUJ1aWxkRW52aXJvbm1lbnQgfSBmcm9tICcuL2J1aWxkLWVudic7XG5pbXBvcnQgeyBDYW5hcnksIENhbmFyeVByb3BzIH0gZnJvbSAnLi9jYW5hcnknO1xuaW1wb3J0IHsgQ2hhbmdlQ29udHJvbGxlciB9IGZyb20gJy4vY2hhbmdlLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgQ2hpbWVOb3RpZmllciB9IGZyb20gJy4vY2hpbWUtbm90aWZpZXInO1xuaW1wb3J0IHsgUGlwZWxpbmVXYXRjaGVyIH0gZnJvbSAnLi9waXBlbGluZS13YXRjaGVyJztcbmltcG9ydCAqIGFzIHB1Ymxpc2hpbmcgZnJvbSAnLi9wdWJsaXNoaW5nJztcbmltcG9ydCB7IEF1dG9CdW1wLCBBdXRvTWVyZ2VCYWNrLCBBdXRvQnVtcFByb3BzIH0gZnJvbSAnLi9wdWxsLXJlcXVlc3QnO1xuaW1wb3J0IHsgQXV0b01lcmdlQmFja1BpcGVsaW5lT3B0aW9ucyB9IGZyb20gJy4vcHVsbC1yZXF1ZXN0L21lcmdlLWJhY2snO1xuaW1wb3J0IHsgSVJlcG8sIFdyaXRhYmxlR2l0SHViUmVwbyB9IGZyb20gJy4vcmVwbyc7XG5pbXBvcnQgeyBTaGVsbGFibGUsIFNoZWxsYWJsZVByb3BzIH0gZnJvbSAnLi9zaGVsbGFibGUnO1xuaW1wb3J0IHsgZGV0ZXJtaW5lUnVuT3JkZXIsIGZsYXRNYXAgfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCBQVUJMSVNIX1NUQUdFX05BTUUgPSAnUHVibGlzaCc7XG5jb25zdCBURVNUX1NUQUdFX05BTUUgPSAnVGVzdCc7XG5jb25zdCBNRVRSSUNfTkFNRVNQQUNFID0gJ0NESy9EZWxpdmxpYic7XG5jb25zdCBGQUlMVVJFX01FVFJJQ19OQU1FID0gJ0ZhaWx1cmVzJztcblxuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgcmVwb3NpdG9yeSB0byBidWlsZCAoZS5nLiBHaXRIdWJSZXBvKS5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IElSZXBvO1xuXG4gIC8qKlxuICAgKiBBIGRpc3BsYXkgbmFtZSBmb3IgdGhpcyBwaXBlbGluZS5cbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHBoeXNpY2FsIG5hbWUgZm9yIHRoaXMgcGlwZWxpbmUuXG4gICAqIEBkZWZhdWx0IC0gYSBuZXcgbmFtZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQnJhbmNoIHRvIGJ1aWxkLlxuICAgKiBAZGVmYXVsdCBtYXN0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaD86IHN0cmluZztcblxuICAvKipcbiAgICogRW1haWwgdG8gc2VuZCBmYWlsdXJlIG5vdGlmaWNhdGlvbnMuXG4gICAqIEBkZWZhdWx0IC0gTm8gZW1haWwgbm90aWZpY2F0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uRW1haWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB1c2VkIGZvciB0aGUgYnVpbGRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBqc2lpL3N1cGVyY2hhaW4gKHNlZSBkb2NzKVxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRJbWFnZT86IGNidWlsZC5JQnVpbGRJbWFnZTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIENvZGVCdWlsZCBwcm9qZWN0IHRoYXQgd2lsbCBiZSBwYXJ0IG9mIHRoaXMgcGlwZWxpbmUuXG4gICAqIEBkZWZhdWx0IC0gYCR7cGlwZWxpbmVOYW1lfS1CdWlsZGAsIGlmIGBwaXBlbGluZU5hbWVgIHByb3BlcnR5IGlzIHNwZWNpZmllZDsgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQsIG90aGVyd2lzZS5cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkUHJvamVjdE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGNvbXB1dGUgdG8gdXNlIGZvciB0aGlzIGJ1aWxkLlxuICAgKiBTZWUgdGhlIHtAbGluayBDb21wdXRlVHlwZX0gZW51bSBmb3IgdGhlIHBvc3NpYmxlIHZhbHVlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdGFrZW4gZnJvbSB7QGxpbmsgI2J1aWxkSW1hZ2UjZGVmYXVsdENvbXB1dGVUeXBlfVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcHV0ZVR5cGU/OiBjYnVpbGQuQ29tcHV0ZVR5cGU7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBob3cgdGhlIHByb2plY3QgYnVpbGRzIERvY2tlciBpbWFnZXMuIFNwZWNpZnkgdHJ1ZSB0byBlbmFibGVcbiAgICogcnVubmluZyB0aGUgRG9ja2VyIGRhZW1vbiBpbnNpZGUgYSBEb2NrZXIgY29udGFpbmVyLiBUaGlzIHZhbHVlIG11c3QgYmVcbiAgICogc2V0IHRvIHRydWUgb25seSBpZiB0aGlzIGJ1aWxkIHByb2plY3Qgd2lsbCBiZSB1c2VkIHRvIGJ1aWxkIERvY2tlclxuICAgKiBpbWFnZXMsIGFuZCB0aGUgc3BlY2lmaWVkIGJ1aWxkIGVudmlyb25tZW50IGltYWdlIGlzIG5vdCBvbmUgcHJvdmlkZWQgYnlcbiAgICogQVdTIENvZGVCdWlsZCB3aXRoIERvY2tlciBzdXBwb3J0LiBPdGhlcndpc2UsIGFsbCBhc3NvY2lhdGVkIGJ1aWxkcyB0aGF0XG4gICAqIGF0dGVtcHQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgRG9ja2VyIGRhZW1vbiB3aWxsIGZhaWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwcml2aWxlZ2VkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHBhc3MgdG8gYnVpbGRcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50PzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgYnVpbGRzcGVjLCBhcyBhbiBhbHRlcm5hdGl2ZSB0byBhIGJ1aWxkc3BlYy55bWwgZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRTcGVjPzogY2J1aWxkLkJ1aWxkU3BlYztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gcmUtcnVuIHRoZSBwaXBlbGluZSBhZnRlciB5b3UndmUgdXBkYXRlZCBpdC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBjb25jdXJyZW5jeSBsaW1pdCB0ZXN0IGFuZCBwdWJsaXNoIHN0YWdlcy5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGlmIHRoaXMgdmFsdWUgaXMgMiwgdGhlbiBvbmx5IHR3byBhY3Rpb25zIHdpbGwgZXhlY3V0ZSBjb25jdXJyZW50bHkuXG4gICAqIElmIHRoaXMgdmFsdWUgaXMgMSwgdGhlIHBpcGVsaW5lIHdpbGwgbm90IGhhdmUgYW55IGNvbmN1cnJlbnQgZXhlY3V0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGxpbWl0XG4gICAqL1xuICByZWFkb25seSBjb25jdXJyZW5jeT86IG51bWJlcjtcblxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IGRyeVJ1biBmb3IgYWxsIHB1Ymxpc2hpbmcgc3RlcHNcbiAgICpcbiAgICogKENhbiBzdGlsbCBiZSBjaGFuZ2VkIHdoZW4gYWRkaW5nIGEgc3RlcCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBkcnlSdW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IGJ1aWxkIGNvbW1pdHMgdGhhdCBhcmUgcHVzaGVkIHRvIHRoaXMgcmVwb3NpdG9yeSwgaW5jbHVkaW5nIFBSIGJ1aWxkcyBvbiBnaXRodWIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBhdXRvQnVpbGQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBhdXRvLWJ1aWxkXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gJ2F1dG9CdWlsZE9wdGlvbnMucHVibGljTG9ncycgd2lsbCBiZSBzZXQgdG8gaXRzIGRlZmF1bHQuICdhdXRvQnVpbGRPcHRpb25zLmJ1aWxkc3BlYycgd2lsbCBiZSBjb25maWd1cmVkIHRvIG1hdGNoIHdpdGggdGhlXG4gICAqICdidWlsZFNwZWMnIHByb3BlcnR5LlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0b0J1aWxkT3B0aW9ucz86IEF1dG9CdWlsZE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFBvc3QgYSBub3RpZmljYXRpb24gdG8gdGhlIGdpdmVuIENoaW1lIHdlYmhvb2tzIGlmIHRoZSBwaXBlbGluZSBmYWlsc1xuICAgKiBAZGVmYXVsdCAtIG5vIENoaW1lIG5vdGlmaWNhdGlvbnMgb24gcGlwZWxpbmUgZmFpbHVyZVxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSBgbm90aWZ5T25GYWlsdXJlKClgIGluc3RlYWQgaW4gY29tYmluYXRpb24gd2l0aCBgUGlwZWxpbmVOb3RpZmljYXRpb24uY2hpbWUoKWAuXG4gICAqL1xuICByZWFkb25seSBjaGltZUZhaWx1cmVXZWJob29rcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgQ2hpbWUgbWVzc2FnZSB0byBwb3N0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQSBkZWZhdWx0IG1lc3NhZ2VcbiAgICovXG4gIHJlYWRvbmx5IGNoaW1lTWVzc2FnZT86IHN0cmluZztcblxuICAvKipcbiAgICogQnVpbGQgdGltZW91dFxuICAgKlxuICAgKiBIb3cgbG9uZyB0aGUgYnVpbGQgY2FuIHRha2UgYXQgbWF4aW11bSAoYmVmb3JlIGZhaWxpbmcgd2l0aCBhbiBlcnJvcikuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRHVyYXRpb24uaG91cnMoOClcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkVGltZW91dD86IER1cmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lTm90aWZpY2F0aW9uQmluZE9wdGlvbnMge1xuICByZWFkb25seSBwaXBlbGluZTogUGlwZWxpbmU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBpcGVsaW5lTm90aWZpY2F0aW9uIHtcbiAgYmluZChwaXBlbGluZTogUGlwZWxpbmVOb3RpZmljYXRpb25CaW5kT3B0aW9ucyk6IHZvaWQ7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYW4gYXV0byBidW1wIGZvciB0aGlzIHBpcGVsaW5lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9CdW1wT3B0aW9ucyBleHRlbmRzIE9taXQ8QXV0b0J1bXBQcm9wcywgJ3JlcG8nPiB7XG59XG5cbi8qKlxuICogRGVmaW5lcyBhIGRlbGl2bGliIENJL0NEIHBpcGVsaW5lLlxuICovXG5leHBvcnQgY2xhc3MgUGlwZWxpbmUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgYnVpbGRSb2xlPzogaWFtLklSb2xlO1xuICBwdWJsaWMgcmVhZG9ubHkgZmFpbHVyZUFsYXJtOiBjbG91ZHdhdGNoLkFsYXJtO1xuICBwdWJsaWMgcmVhZG9ubHkgYnVpbGRPdXRwdXQ6IGNwaXBlbGluZS5BcnRpZmFjdDtcbiAgcHVibGljIHJlYWRvbmx5IHNvdXJjZUFydGlmYWN0OiBjcGlwZWxpbmUuQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmltYXJ5IENvZGVCdWlsZCBwcm9qZWN0IG9mIHRoaXMgcGlwZWxpbmUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVpbGRQcm9qZWN0OiBjYnVpbGQuSVByb2plY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRvIGJ1aWxkIHByb2plY3QuIHVuZGVmaW5lZCBpZiAnYXV0b0J1aWxkJyBpcyBkaXNhYmxlZCBmb3IgdGhpcyBwaXBlbGluZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhdXRvQnVpbGRQcm9qZWN0PzogY2J1aWxkLlByb2plY3Q7XG5cbiAgLypcbiAgICogVGhlIHVuZGVybHlpbmcgQ29kZVBpcGVsaW5lIFBpcGVsaW5lIG9iamVjdCB0aGF0IG1vZGVscyB0aGlzIHBpcGVsaW5lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBpcGVsaW5lOiBjcGlwZWxpbmUuUGlwZWxpbmU7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnJhbmNoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgbm90aWZ5Pzogc25zLlRvcGljO1xuICBwcml2YXRlIHN0YWdlczogeyBbbmFtZTogc3RyaW5nXTogY3BpcGVsaW5lLklTdGFnZSB9ID0geyB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uY3VycmVuY3k/OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVwbzogSVJlcG87XG4gIHByaXZhdGUgcmVhZG9ubHkgZHJ5UnVuOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGJ1aWxkRW52aXJvbm1lbnQ6IGNidWlsZC5CdWlsZEVudmlyb25tZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IGJ1aWxkU3BlYz86IGNidWlsZC5CdWlsZFNwZWM7XG4gIHByaXZhdGUgZmlyc3RQdWJsaXNoU3RhZ2VOYW1lPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBQaXBlbGluZVByb3BzKSB7XG4gICAgc3VwZXIocGFyZW50LCBuYW1lKTtcblxuICAgIHRoaXMuY29uY3VycmVuY3kgPSBwcm9wcy5jb25jdXJyZW5jeTtcbiAgICB0aGlzLnJlcG8gPSBwcm9wcy5yZXBvO1xuICAgIHRoaXMuZHJ5UnVuID0gISFwcm9wcy5kcnlSdW47XG5cbiAgICB0aGlzLnBpcGVsaW5lID0gbmV3IGNwaXBlbGluZS5QaXBlbGluZSh0aGlzLCAnQnVpbGRQaXBlbGluZScsIHtcbiAgICAgIHBpcGVsaW5lTmFtZTogcHJvcHMucGlwZWxpbmVOYW1lLFxuICAgICAgcmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlOiBwcm9wcy5yZXN0YXJ0RXhlY3V0aW9uT25VcGRhdGUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBwcm9wcy5yZXN0YXJ0RXhlY3V0aW9uT25VcGRhdGUsXG4gICAgfSk7XG5cbiAgICB0aGlzLmJyYW5jaCA9IHByb3BzLmJyYW5jaCB8fCAnbWFzdGVyJztcbiAgICB0aGlzLnNvdXJjZUFydGlmYWN0ID0gcHJvcHMucmVwby5jcmVhdGVTb3VyY2VTdGFnZSh0aGlzLnBpcGVsaW5lLCB0aGlzLmJyYW5jaCk7XG5cbiAgICB0aGlzLmJ1aWxkRW52aXJvbm1lbnQgPSBjcmVhdGVCdWlsZEVudmlyb25tZW50KHByb3BzKTtcbiAgICB0aGlzLmJ1aWxkU3BlYyA9IHByb3BzLmJ1aWxkU3BlYztcblxuICAgIGxldCBidWlsZFByb2plY3ROYW1lID0gcHJvcHMuYnVpbGRQcm9qZWN0TmFtZTtcbiAgICBpZiAoYnVpbGRQcm9qZWN0TmFtZSA9PT0gdW5kZWZpbmVkICYmIHByb3BzLnBpcGVsaW5lTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBidWlsZFByb2plY3ROYW1lID0gYCR7cHJvcHMucGlwZWxpbmVOYW1lfS1CdWlsZGA7XG4gICAgfVxuICAgIHRoaXMuYnVpbGRQcm9qZWN0ID0gbmV3IGNidWlsZC5QaXBlbGluZVByb2plY3QodGhpcywgJ0J1aWxkUHJvamVjdCcsIHtcbiAgICAgIHByb2plY3ROYW1lOiBidWlsZFByb2plY3ROYW1lLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuYnVpbGRFbnZpcm9ubWVudCxcbiAgICAgIGJ1aWxkU3BlYzogdGhpcy5idWlsZFNwZWMsXG4gICAgICB0aW1lb3V0OiBwcm9wcy5idWlsZFRpbWVvdXQgPz8gRHVyYXRpb24uaG91cnMoOCksXG4gICAgfSk7XG5cbiAgICB0aGlzLmJ1aWxkUm9sZSA9IHRoaXMuYnVpbGRQcm9qZWN0LnJvbGU7XG5cbiAgICBjb25zdCBidWlsZFN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKCdCdWlsZCcpO1xuICAgIGNvbnN0IGJ1aWxkT3V0cHV0ID0gbmV3IGNwaXBlbGluZS5BcnRpZmFjdCgpO1xuICAgIGJ1aWxkU3RhZ2UuYWRkQWN0aW9uKG5ldyBjcGlwZWxpbmVfYWN0aW9ucy5Db2RlQnVpbGRBY3Rpb24oe1xuICAgICAgYWN0aW9uTmFtZTogJ0J1aWxkJyxcbiAgICAgIHByb2plY3Q6IHRoaXMuYnVpbGRQcm9qZWN0LFxuICAgICAgaW5wdXQ6IHRoaXMuc291cmNlQXJ0aWZhY3QsXG4gICAgICBvdXRwdXRzOiBbYnVpbGRPdXRwdXRdLFxuICAgIH0pKTtcbiAgICB0aGlzLmJ1aWxkT3V0cHV0ID0gYnVpbGRPdXRwdXQ7XG5cbiAgICBpZiAocHJvcHMubm90aWZpY2F0aW9uRW1haWwpIHtcbiAgICAgIHRoaXMubm90aWZ5ID0gbmV3IHNucy5Ub3BpYyh0aGlzLCAnTm90aWZpY2F0aW9uc1RvcGljJyk7XG4gICAgICB0aGlzLm5vdGlmeS5hZGRTdWJzY3JpcHRpb24obmV3IHNuc19zdWJzLkVtYWlsU3Vic2NyaXB0aW9uKHByb3BzLm5vdGlmaWNhdGlvbkVtYWlsKSk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgZmFpbHVyZSBhbGFybSBmb3IgdGhlIGVudGlyZSBwaXBlbGluZS5cbiAgICB0aGlzLmZhaWx1cmVBbGFybSA9IHRoaXMuYWRkRmFpbHVyZUFsYXJtKHByb3BzLnRpdGxlKTtcblxuICAgIC8vIGVtaXQgYW4gU05TIG5vdGlmaWNhdGlvbiBldmVyeSB0aW1lIGJ1aWxkIGZhaWxzLlxuICAgIHRoaXMuYWRkQnVpbGRGYWlsdXJlTm90aWZpY2F0aW9uKHRoaXMuYnVpbGRQcm9qZWN0LCBgJHtwcm9wcy50aXRsZX0gYnVpbGQgZmFpbGVkYCk7XG5cbiAgICAvLyBBbHNvIGVtaXQgdG8gQ2hpbWUgd2ViaG9va3MgaWYgY29uZmlndXJlZFxuICAgIGlmIChwcm9wcy5jaGltZUZhaWx1cmVXZWJob29rcykge1xuICAgICAgbmV3IENoaW1lTm90aWZpZXIodGhpcywgJ0NoaW1lTm90aWZpZXInLCB7XG4gICAgICAgIHBpcGVsaW5lOiB0aGlzLnBpcGVsaW5lLFxuICAgICAgICBtZXNzYWdlOiBwcm9wcy5jaGltZU1lc3NhZ2UsXG4gICAgICAgIHdlYmhvb2tVcmxzOiBwcm9wcy5jaGltZUZhaWx1cmVXZWJob29rcyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5hdXRvQnVpbGQpIHtcbiAgICAgIHRoaXMuYXV0b0J1aWxkUHJvamVjdCA9IHRoaXMuYXV0b0J1aWxkKHByb3BzLmF1dG9CdWlsZE9wdGlvbnMpLnByb2plY3Q7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5vdGlmeU9uRmFpbHVyZShub3RpZmljYXRpb246IElQaXBlbGluZU5vdGlmaWNhdGlvbikge1xuICAgIG5vdGlmaWNhdGlvbi5iaW5kKHtcbiAgICAgIHBpcGVsaW5lOiB0aGlzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBhY3Rpb24gdG8gcnVuIGEgc2hlbGwgc2NyaXB0IHRvIHRoZSBwaXBlbGluZVxuICAgKlxuICAgKiBAcmV0dXJuIFRoZSBTaGVsbGFibGUgYW5kIHRoZSBBY3Rpb24gYWRkZWQgdG8gdGhlIHBpcGVsaW5lLlxuICAgKi9cbiAgcHVibGljIGFkZFNoZWxsYWJsZShzdGFnZU5hbWU6IHN0cmluZywgaWQ6IHN0cmluZywgb3B0aW9uczogQWRkU2hlbGxhYmxlT3B0aW9ucyk6IHtcbiAgICBzaGVsbGFibGU6IFNoZWxsYWJsZTsgYWN0aW9uOiBjcGlwZWxpbmVfYWN0aW9ucy5Db2RlQnVpbGRBY3Rpb247fSB7XG4gICAgY29uc3Qgc3RhZ2UgPSB0aGlzLmdldE9yQ3JlYXRlU3RhZ2Uoc3RhZ2VOYW1lKTtcblxuICAgIGNvbnN0IHNoID0gbmV3IFNoZWxsYWJsZSh0aGlzLCBpZCwgb3B0aW9ucyk7XG4gICAgY29uc3QgYWN0aW9uID0gc2guYWRkVG9QaXBlbGluZShcbiAgICAgIHN0YWdlLFxuICAgICAgb3B0aW9ucy5hY3Rpb25OYW1lIHx8IGBBY3Rpb24ke2lkfWAsXG4gICAgICBvcHRpb25zLmlucHV0QXJ0aWZhY3QgfHwgdGhpcy5idWlsZE91dHB1dCxcbiAgICAgIHRoaXMuZGV0ZXJtaW5lUnVuT3JkZXJGb3JOZXdBY3Rpb24oc3RhZ2UpKTtcblxuICAgIGlmIChvcHRpb25zLmZhaWx1cmVOb3RpZmljYXRpb24pIHtcbiAgICAgIHRoaXMuYWRkQnVpbGRGYWlsdXJlTm90aWZpY2F0aW9uKHNoLnByb2plY3QsIG9wdGlvbnMuZmFpbHVyZU5vdGlmaWNhdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc2hlbGxhYmxlOiBzaCwgYWN0aW9uIH07XG4gIH1cblxuICBwdWJsaWMgYWRkVGVzdChpZDogc3RyaW5nLCBwcm9wczogU2hlbGxhYmxlUHJvcHMpOiB7c2hlbGxhYmxlOiBTaGVsbGFibGU7IGFjdGlvbjogY3BpcGVsaW5lX2FjdGlvbnMuQ29kZUJ1aWxkQWN0aW9ufSB7XG4gICAgcmV0dXJuIHRoaXMuYWRkU2hlbGxhYmxlKFRFU1RfU1RBR0VfTkFNRSwgaWQsIHtcbiAgICAgIGFjdGlvbk5hbWU6IGBUZXN0JHtpZH1gLFxuICAgICAgZmFpbHVyZU5vdGlmaWNhdGlvbjogYFRlc3QgJHtpZH0gZmFpbGVkYCxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlL2Rpc2NvdmVyeSBtZXRob2QgdGhhdCBkZWZpbmVzIGEgY2FuYXJ5IHRlc3QgaW4geW91ciBhY2NvdW50LlxuICAgKiBAcGFyYW0gaWQgdGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gcHJvcHMgY2FuYXJ5IG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBhZGRDYW5hcnkoaWQ6IHN0cmluZywgcHJvcHM6IENhbmFyeVByb3BzKSB7XG4gICAgcmV0dXJuIG5ldyBDYW5hcnkodGhpcywgYENhbmFyeSR7aWR9YCwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIGFkZFB1Ymxpc2gocHVibGlzaGVyOiBJUHVibGlzaGVyLCBvcHRpb25zOiBBZGRQdWJsaXNoT3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgcHVibGlzaFN0YWdlTmFtZSA9IG9wdGlvbnMuc3RhZ2VOYW1lID8/IFBVQkxJU0hfU1RBR0VfTkFNRTtcbiAgICBpZiAoIXRoaXMuZmlyc3RQdWJsaXNoU3RhZ2VOYW1lKSB7XG4gICAgICB0aGlzLmZpcnN0UHVibGlzaFN0YWdlTmFtZSA9IHB1Ymxpc2hTdGFnZU5hbWU7XG4gICAgfVxuICAgIGNvbnN0IHN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKHB1Ymxpc2hTdGFnZU5hbWUpO1xuXG4gICAgcHVibGlzaGVyLmFkZFRvUGlwZWxpbmUoc3RhZ2UsIGAke3B1Ymxpc2hlci5ub2RlLmlkfVB1Ymxpc2hgLCB7XG4gICAgICBpbnB1dEFydGlmYWN0OiBvcHRpb25zLmlucHV0QXJ0aWZhY3QgfHwgdGhpcy5idWlsZE91dHB1dCxcbiAgICAgIHJ1bk9yZGVyOiB0aGlzLmRldGVybWluZVJ1bk9yZGVyRm9yTmV3QWN0aW9uKHN0YWdlKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2hhbmdlIGNvbnRyb2wgcG9saWN5IHRvIGJsb2NrIHRyYW5zaXRpb25zIGludG8gdGhlIHB1Ymxpc2ggc3RhZ2UgZHVyaW5nIGNlcnRhaW4gdGltZSB3aW5kb3dzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyB0aGUgb3B0aW9ucyB0byBjb25maWd1cmUgdGhlIGNoYW5nZSBjb250cm9sIHBvbGljeS5cbiAgICovXG4gIHB1YmxpYyBhZGRDaGFuZ2VDb250cm9sKG9wdGlvbnM6IEFkZENoYW5nZUNvbnRyb2xPcHRpb25zID0geyB9KTogQ2hhbmdlQ29udHJvbGxlciB7XG4gICAgY29uc3QgcHVibGlzaFN0YWdlID0gdGhpcy5nZXRTdGFnZSh0aGlzLmZpcnN0UHVibGlzaFN0YWdlTmFtZSA/PyBQVUJMSVNIX1NUQUdFX05BTUUpO1xuICAgIGlmICghcHVibGlzaFN0YWdlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoaXMgcGlwZWxpbmUgZG9lcyBub3QgaGF2ZSBhICR7UFVCTElTSF9TVEFHRV9OQU1FfSBzdGFnZSB5ZXQuIEFkZCBvbmUgZmlyc3QuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBDaGFuZ2VDb250cm9sbGVyKHRoaXMsICdDaGFuZ2VDb250cm9sbGVyJywge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHBpcGVsaW5lU3RhZ2U6IHB1Ymxpc2hTdGFnZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBwdWJsaXNoVG9OcG0ob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9OcG1Qcm9qZWN0UHJvcHMgJiBBZGRQdWJsaXNoT3B0aW9ucykge1xuICAgIHRoaXMuYWRkUHVibGlzaChuZXcgcHVibGlzaGluZy5QdWJsaXNoVG9OcG1Qcm9qZWN0KHRoaXMsICdOcG0nLCB7XG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvTWF2ZW4ob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9NYXZlblByb2plY3RQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb01hdmVuUHJvamVjdCh0aGlzLCAnTWF2ZW4nLCB7XG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvTnVHZXQob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9OdUdldFByb2plY3RQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb051R2V0UHJvamVjdCh0aGlzLCAnTnVHZXQnLCB7XG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvR2l0SHViUGFnZXMob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoRG9jc1RvR2l0SHViUHJvamVjdFByb3BzICYgQWRkUHVibGlzaE9wdGlvbnMpIHtcbiAgICB0aGlzLmFkZFB1Ymxpc2gobmV3IHB1Ymxpc2hpbmcuUHVibGlzaERvY3NUb0dpdEh1YlByb2plY3QodGhpcywgJ0dpdEh1YlBhZ2VzJywge1xuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb0dpdEh1YihvcHRpb25zOiBwdWJsaXNoaW5nLlB1Ymxpc2hUb0dpdEh1YlByb3BzICYgQWRkUHVibGlzaE9wdGlvbnMpIHtcbiAgICB0aGlzLmFkZFB1Ymxpc2gobmV3IHB1Ymxpc2hpbmcuUHVibGlzaFRvR2l0SHViKHRoaXMsICdHaXRIdWInLCB7XG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvUHlQSShvcHRpb25zOiBwdWJsaXNoaW5nLlB1Ymxpc2hUb1B5UGlQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb1B5UGkodGhpcywgJ1B5UEknLCB7XG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvUzMoaWQ6IHN0cmluZywgb3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9TM1Byb3BzICYgQWRkUHVibGlzaE9wdGlvbnMpIHtcbiAgICB0aGlzLmFkZFB1Ymxpc2gobmV3IHB1Ymxpc2hpbmcuUHVibGlzaFRvUzModGhpcywgaWQsIHtcbiAgICAgIGRyeVJ1bjogdGhpcy5kcnlSdW4sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoIEdvbGFuZyBjb2RlIGZyb20gYGdvYCBkaXJlY3RvcnkgaW4gYnVpbGQgYXJ0aWZhY3QgdG8gYSBHaXRIdWIgcmVwb3NpdG9yeS5cbiAgICovXG4gIHB1YmxpYyBwdWJsaXNoVG9Hb2xhbmcob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9Hb2xhbmdQcm9wcykge1xuICAgIHRoaXMuYWRkUHVibGlzaChuZXcgcHVibGlzaGluZy5QdWJsaXNoVG9Hb2xhbmcodGhpcywgJ0dvbGFuZycsIHtcbiAgICAgIGRyeVJ1bjogdGhpcy5kcnlSdW4sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIGF1dG9tYXRpYyBidW1wcyBmb3IgdGhlIHNvdXJjZSByZXBvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBhdXRvIGJ1bXAgKHNlZSBBdXRvQnVtcE9wdGlvbnMgZm9yIGRlc2NyaXB0aW9uIG9mIGRlZmF1bHRzKVxuICAgKi9cbiAgcHVibGljIGF1dG9CdW1wKG9wdGlvbnM/OiBBdXRvQnVtcE9wdGlvbnMpOiBBdXRvQnVtcCB7XG4gICAgaWYgKCFXcml0YWJsZUdpdEh1YlJlcG8uaXNXcml0YWJsZUdpdEh1YlJlcG8odGhpcy5yZXBvKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInJlcG9cIiBtdXN0IGJlIGEgV3JpdGFibGVHaXRIdWJSZXBvIGluIG9yZGVyIHRvIGVuYWJsZSBhdXRvLWJ1bXAnKTtcbiAgICB9XG5cbiAgICBjb25zdCBhdXRvQnVtcCA9IG5ldyBBdXRvQnVtcCh0aGlzLCAnQXV0b0J1bXAnLCB7XG4gICAgICByZXBvOiB0aGlzLnJlcG8sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF1dG9CdW1wO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgYXV0b21hdGljIG1lcmdlIGJhY2tzIGZvciB0aGUgc291cmNlIHJlcG8uXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGF1dG8gYnVtcCAoc2VlIEF1dG9NZXJnZUJhY2tQaXBlbGluZU9wdGlvbnMgZm9yIGRlc2NyaXB0aW9uIG9mIGRlZmF1bHRzKVxuICAgKi9cbiAgcHVibGljIGF1dG9NZXJnZUJhY2sob3B0aW9ucz86IEF1dG9NZXJnZUJhY2tQaXBlbGluZU9wdGlvbnMpIHtcbiAgICBpZiAoIVdyaXRhYmxlR2l0SHViUmVwby5pc1dyaXRhYmxlR2l0SHViUmVwbyh0aGlzLnJlcG8pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wicmVwb1wiIG11c3QgYmUgYSBXcml0YWJsZUdpdEh1YlJlcG8gaW4gb3JkZXIgdG8gZW5hYmxlIGF1dG8tbWVyZ2UtYmFjaycpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lcmdlQmFjayA9IG5ldyBBdXRvTWVyZ2VCYWNrKHRoaXMsICdNZXJnZUJhY2snLCB7XG4gICAgICByZXBvOiB0aGlzLnJlcG8sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuXG4gICAgaWYgKG9wdGlvbnM/LnN0YWdlKSB7XG5cbiAgICAgIGNvbnN0IGFmdGVyU3RhZ2UgPSB0aGlzLmdldFN0YWdlKG9wdGlvbnMuc3RhZ2UuYWZ0ZXIpO1xuXG4gICAgICBpZiAoIWFmdGVyU3RhZ2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnb3B0aW9ucy5zdGFnZS5hZnRlcicgbXVzdCBiZSBjb25maWd1cmVkIHRvIGFuIGV4aXN0aW5nIHN0YWdlOiAke29wdGlvbnMuc3RhZ2UuYWZ0ZXJ9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKG9wdGlvbnMuc3RhZ2UubmFtZSA/PyAnTWVyZ2VCYWNrJywgeyBqdXN0QWZ0ZXI6IGFmdGVyU3RhZ2UgfSk7XG4gICAgICBzdGFnZS5hZGRBY3Rpb24obmV3IGNwaXBlbGluZV9hY3Rpb25zLkNvZGVCdWlsZEFjdGlvbih7XG4gICAgICAgIGFjdGlvbk5hbWU6ICdDcmVhdGVNZXJnZUJhY2tQdWxsUmVxdWVzdCcsXG4gICAgICAgIHByb2plY3Q6IG1lcmdlQmFjay5wci5wcm9qZWN0LFxuICAgICAgICBpbnB1dDogdGhpcy5zb3VyY2VBcnRpZmFjdCxcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBhdXRvbWF0aWMgYnVpbGRzIG9mIHB1bGwgcmVxdWVzdHMgaW4gdGhlIEdpdGh1YiByZXBvc2l0b3J5IGFuZCBwb3N0cyB0aGVcbiAgICogcmVzdWx0cyBiYWNrIGFzIGEgY29tbWVudCB3aXRoIGEgcHVibGljIGxpbmsgdG8gdGhlIGJ1aWxkIGxvZ3MuXG4gICAqL1xuICBwdWJsaWMgYXV0b0J1aWxkKG9wdGlvbnM6IEF1dG9CdWlsZE9wdGlvbnMgPSB7IH0pOiBBdXRvQnVpbGQge1xuICAgIHJldHVybiBuZXcgQXV0b0J1aWxkKHRoaXMsICdBdXRvQnVpbGQnLCB7XG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5idWlsZEVudmlyb25tZW50LFxuICAgICAgcmVwbzogdGhpcy5yZXBvLFxuICAgICAgYnVpbGRTcGVjOiBvcHRpb25zLmJ1aWxkU3BlYyB8fCB0aGlzLmJ1aWxkU3BlYyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1ldHJpYyB0aGF0IHRyYWNrcyBwaXBlbGluZSBmYWlsdXJlcy5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNGYWlsdXJlcyhvcHRpb25zOiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICBuYW1lc3BhY2U6IE1FVFJJQ19OQU1FU1BBQ0UsXG4gICAgICBtZXRyaWNOYW1lOiBGQUlMVVJFX01FVFJJQ19OQU1FLFxuICAgICAgZGltZW5zaW9uczoge1xuICAgICAgICBQaXBlbGluZTogdGhpcy5waXBlbGluZS5waXBlbGluZU5hbWUsXG4gICAgICB9LFxuICAgICAgc3RhdGlzdGljOiAnU3VtJyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1ldHJpY3MgdGhhdCB0cmFjayBmYWlsdXJlIG9mIGVhY2ggYWN0aW9uIHdpdGhpbiB0aGUgcGlwZWxpbmUuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQWN0aW9uRmFpbHVyZXMob3B0aW9uczogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWNbXSB7XG4gICAgcmV0dXJuIGZsYXRNYXAodGhpcy5waXBlbGluZS5zdGFnZXMsIHN0YWdlID0+IHN0YWdlLmFjdGlvbnMubWFwKGFjdGlvbiA9PiB7XG4gICAgICByZXR1cm4gbmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAgICAgbmFtZXNwYWNlOiBNRVRSSUNfTkFNRVNQQUNFLFxuICAgICAgICBtZXRyaWNOYW1lOiBGQUlMVVJFX01FVFJJQ19OQU1FLFxuICAgICAgICBkaW1lbnNpb25zOiB7XG4gICAgICAgICAgUGlwZWxpbmU6IHRoaXMucGlwZWxpbmUucGlwZWxpbmVOYW1lLFxuICAgICAgICAgIEFjdGlvbjogYWN0aW9uLmFjdGlvblByb3BlcnRpZXMuYWN0aW9uTmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdGlzdGljOiAnU3VtJyxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRNYW51YWxBcHByb3ZhbFRvU3RhZ2Uoc3RhZ2VOYW1lOiBzdHJpbmcsIHByb3BzPzogY3BpcGVsaW5lX2FjdGlvbnMuTWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcykge1xuICAgIGNvbnN0IHN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKHN0YWdlTmFtZSk7XG4gICAgc3RhZ2UuYWRkQWN0aW9uKG5ldyBjcGlwZWxpbmVfYWN0aW9ucy5NYW51YWxBcHByb3ZhbEFjdGlvbihwcm9wcyA/PyB7XG4gICAgICBhY3Rpb25OYW1lOiAnTWFudWFsQXBwcm92YWxBY3Rpb24nLFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRmFpbHVyZUFsYXJtKHRpdGxlPzogc3RyaW5nKTogY2xvdWR3YXRjaC5BbGFybSB7XG4gICAgcmV0dXJuIG5ldyBQaXBlbGluZVdhdGNoZXIodGhpcywgJ1BpcGVsaW5lV2F0Y2hlcicsIHtcbiAgICAgIHBpcGVsaW5lOiB0aGlzLnBpcGVsaW5lLFxuICAgICAgbWV0cmljTmFtZXNwYWNlOiBNRVRSSUNfTkFNRVNQQUNFLFxuICAgICAgZmFpbHVyZU1ldHJpY05hbWU6IEZBSUxVUkVfTUVUUklDX05BTUUsXG4gICAgICB0aXRsZSxcbiAgICB9KS5hbGFybTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQnVpbGRGYWlsdXJlTm90aWZpY2F0aW9uKGJ1aWxkUHJvamVjdDogY2J1aWxkLklQcm9qZWN0LCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMubm90aWZ5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYnVpbGRQcm9qZWN0Lm9uQnVpbGRGYWlsZWQoJ09uQnVpbGRGYWlsZWQnKS5hZGRUYXJnZXQobmV3IGV2ZW50c190YXJnZXRzLlNuc1RvcGljKHRoaXMubm90aWZ5LCB7XG4gICAgICBtZXNzYWdlOiBldmVudHMuUnVsZVRhcmdldElucHV0LmZyb21UZXh0KG1lc3NhZ2UpLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB0aGUgc3RhZ2Ugb3IgdW5kZWZpbmVkIGlmIHRoZSBzdGFnZSBkb2Vzbid0IGV4aXN0XG4gICAqL1xuICBwcml2YXRlIGdldFN0YWdlKHN0YWdlTmFtZTogc3RyaW5nKTogY3BpcGVsaW5lLklTdGFnZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhZ2VzW3N0YWdlTmFtZV07XG4gIH1cblxuICBwcml2YXRlIGdldE9yQ3JlYXRlU3RhZ2Uoc3RhZ2VOYW1lOiBzdHJpbmcsIHBsYWNlbWVudD86IGNwaXBlbGluZS5TdGFnZVBsYWNlbWVudCk6IGNwaXBlbGluZS5JU3RhZ2Uge1xuICAgIC8vIG90aGVyd2lzZSwgZ3JvdXAgYWxsIGFjdGlvbnMgc28gdGhleSBydW4gY29uY3VycmVudGx5LlxuICAgIGxldCBzdGFnZSA9IHRoaXMuZ2V0U3RhZ2Uoc3RhZ2VOYW1lKTtcbiAgICBpZiAoIXN0YWdlKSB7XG4gICAgICBzdGFnZSA9IHRoaXMucGlwZWxpbmUuYWRkU3RhZ2Uoe1xuICAgICAgICBzdGFnZU5hbWUsXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zdGFnZXNbc3RhZ2VOYW1lXSA9IHN0YWdlO1xuICAgIH1cbiAgICByZXR1cm4gc3RhZ2U7XG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZVJ1bk9yZGVyRm9yTmV3QWN0aW9uKHN0YWdlOiBjcGlwZWxpbmUuSVN0YWdlKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gZGV0ZXJtaW5lUnVuT3JkZXIoc3RhZ2UuYWN0aW9ucy5sZW5ndGgsIHRoaXMuY29uY3VycmVuY3kpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVB1Ymxpc2hlciBleHRlbmRzIElDb25zdHJ1Y3Qge1xuICBhZGRUb1BpcGVsaW5lKHN0YWdlOiBjcGlwZWxpbmUuSVN0YWdlLCBpZDogc3RyaW5nLCBvcHRpb25zOiBBZGRUb1BpcGVsaW5lT3B0aW9ucyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkVG9QaXBlbGluZU9wdGlvbnMge1xuICBpbnB1dEFydGlmYWN0PzogY3BpcGVsaW5lLkFydGlmYWN0O1xuICBydW5PcmRlcj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGRDaGFuZ2VDb250cm9sT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYnVja2V0IGluIHdoaWNoIHRoZSBDaGFuZ2VDb250cm9sIGlDYWwgZG9jdW1lbnQgd2lsbCBiZSBzdG9yZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGEgbmV3IGJ1Y2tldCB3aWxsIGJlIHByb3Zpc2lvbmVkLlxuICAgKi9cbiAgY2hhbmdlQ29udHJvbEJ1Y2tldD86IHMzLklCdWNrZXQ7XG5cbiAgLyoqXG4gICAqIFRoZSBrZXkgaW4gd2hpY2ggdGhlIGlDYWwgZmlsbGUgd2lsbCBiZSBzdG9yZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdjaGFuZ2UtY29udHJvbC5pY2FsJ1xuICAgKi9cbiAgY2hhbmdlQ29udHJvbE9iamVjdEtleT86IHN0cmluZztcblxuICAvKipcbiAgICogU2NoZWR1bGUgdG8gcnVuIHRoZSBjaGFuZ2UgY29udHJvbGxlciBvblxuICAgKlxuICAgKiBAZGVmYXVsdCByYXRlKDE1IG1pbnV0ZXMpXG4gICAqL1xuICBzY2hlZHVsZUV4cHJlc3Npb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkUHVibGlzaE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGlucHV0IGFydGlmYWN0IHRvIHVzZVxuICAgKlxuICAgKiBAZGVmYXVsdCBCdWlsZCBvdXRwdXQgYXJ0aWZhY3RcbiAgICovXG4gIGlucHV0QXJ0aWZhY3Q/OiBjcGlwZWxpbmUuQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIFN0YWdlIG5hbWUgdG8gYWRkIHB1Ymxpc2hpbmcgam9iIHRvXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoaXMgd2lsbCBiZSB0aGUgc3RhZ2UgbmFtZSBgJ1B1Ymxpc2gnYCwgYnV0IGlmIHlvdSB3YW50IHRvXG4gICAqIHNlcGFyYXRlIG91dCB0aGUgcHVibGlzaGluZyBhY3Rpb25zIGludG8gZGlmZmVyZW50IHN0YWdlcyAoaW4gb3JkZXIgdG9cbiAgICogYmxvY2svdW5ibG9jayB0aGVtIHNlcGFyYXRlbHkgZm9yIGV4YW1wbGUpIHlvdSBjYW4gY2hhbmdlIHRoaXMuXG4gICAqXG4gICAqIFN0YWdlcyBhcHBlYXIgaW4gdGhlIHBpcGVsaW5lIGluIHRoZSBvcmRlciB0aGV5IGFyZSByZWZlcmVuY2VkIGZvclxuICAgKiB0aGUgZmlyc3QgdGltZS5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJQdWJsaXNoXCJcbiAgICovXG4gIHJlYWRvbmx5IHN0YWdlTmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGRTaGVsbGFibGVPcHRpb25zIGV4dGVuZHMgU2hlbGxhYmxlUHJvcHMge1xuICAvKipcbiAgICogU3RyaW5nIHRvIHVzZSBhcyBhY3Rpb24gbmFtZVxuICAgKlxuICAgKiBAZGVmYXVsdCBJZFxuICAgKi9cbiAgYWN0aW9uTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogTWVzc2FnZSB0byB1c2UgYXMgZmFpbHVyZSBub3RpZmljYXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgTm8gbm90aWZpY2F0aW9uXG4gICAqL1xuICBmYWlsdXJlTm90aWZpY2F0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgYXJ0aWZhY3QgdG8gdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IEJ1aWxkIG91dHB1dCBhcnRpZmFjdFxuICAgKi9cbiAgaW5wdXRBcnRpZmFjdD86IGNwaXBlbGluZS5BcnRpZmFjdDtcbn1cbiJdfQ==
package/lib/pipeline.ts CHANGED
@@ -507,6 +507,13 @@ export class Pipeline extends Construct {
507
507
  }));
508
508
  }
509
509
 
510
+ public addManualApprovalToStage(stageName: string, props?: cpipeline_actions.ManualApprovalActionProps) {
511
+ const stage = this.getOrCreateStage(stageName);
512
+ stage.addAction(new cpipeline_actions.ManualApprovalAction(props ?? {
513
+ actionName: 'ManualApprovalAction',
514
+ }));
515
+ }
516
+
510
517
  private addFailureAlarm(title?: string): cloudwatch.Alarm {
511
518
  return new PipelineWatcher(this, 'PipelineWatcher', {
512
519
  pipeline: this.pipeline,
package/package.json CHANGED
@@ -87,7 +87,7 @@
87
87
  ],
88
88
  "main": "lib/index.js",
89
89
  "license": "Apache-2.0",
90
- "version": "13.6.4",
90
+ "version": "13.7.0",
91
91
  "jest": {
92
92
  "testMatch": [
93
93
  "**/lib/__tests__/**/?(*.)+(spec|test).js?(x)"