@orcabus/platform-cdk-constructs 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.jsii CHANGED
@@ -4854,7 +4854,7 @@
4854
4854
  {
4855
4855
  "abstract": true,
4856
4856
  "docs": {
4857
- "remarks": "e.g. [\"yarn install --immutable\", \"yarn cdk synth\"]",
4857
+ "remarks": "e.g. [\"pnpm install --frozen-lockfile\", \"pnpm cdk synth\"]",
4858
4858
  "stability": "experimental",
4859
4859
  "summary": "The command to run to synth the cdk stack which also installing the cdk dependencies."
4860
4860
  },
@@ -5198,7 +5198,7 @@
5198
5198
  {
5199
5199
  "abstract": true,
5200
5200
  "docs": {
5201
- "remarks": "This step will execute in parallel with {@link unitAppTestConfig} as part of the synth stage dependencies.\nBoth must succeed before the synth step runs.\n\nThe default command will be from the root of the repo: [\"make install\", \"make test\"]",
5201
+ "remarks": "This step will execute in parallel with {@link unitAppTestConfig} as part of the synth stage dependencies.\nBoth must succeed before the synth step runs.\n\nThe default command will be from the root of the repo: [\"npm install --global corepack@latest\", \"corepack enable\", \"make install\", \"make test\"]",
5202
5202
  "stability": "experimental",
5203
5203
  "summary": "Configuration for the CodeBuild step that runs unit tests for Infrastructure-as-Code (IaC) at the repository root."
5204
5204
  },
@@ -5280,7 +5280,7 @@
5280
5280
  "kind": "interface",
5281
5281
  "locationInModule": {
5282
5282
  "filename": "deployment-stack-pipeline/pipeline.ts",
5283
- "line": 630
5283
+ "line": 647
5284
5284
  },
5285
5285
  "name": "FailOnDriftBuildStepProps",
5286
5286
  "namespace": "deploymentPipeline",
@@ -5295,7 +5295,7 @@
5295
5295
  "immutable": true,
5296
5296
  "locationInModule": {
5297
5297
  "filename": "deployment-stack-pipeline/pipeline.ts",
5298
- "line": 635
5298
+ "line": 652
5299
5299
  },
5300
5300
  "name": "accountEnv",
5301
5301
  "type": {
@@ -5312,7 +5312,7 @@
5312
5312
  "immutable": true,
5313
5313
  "locationInModule": {
5314
5314
  "filename": "deployment-stack-pipeline/pipeline.ts",
5315
- "line": 649
5315
+ "line": 666
5316
5316
  },
5317
5317
  "name": "cdkCommand",
5318
5318
  "type": {
@@ -5329,7 +5329,7 @@
5329
5329
  "immutable": true,
5330
5330
  "locationInModule": {
5331
5331
  "filename": "deployment-stack-pipeline/pipeline.ts",
5332
- "line": 643
5332
+ "line": 660
5333
5333
  },
5334
5334
  "name": "stackId",
5335
5335
  "type": {
@@ -5346,7 +5346,7 @@
5346
5346
  "immutable": true,
5347
5347
  "locationInModule": {
5348
5348
  "filename": "deployment-stack-pipeline/pipeline.ts",
5349
- "line": 657
5349
+ "line": 674
5350
5350
  },
5351
5351
  "name": "installCommand",
5352
5352
  "optional": true,
@@ -7418,6 +7418,6 @@
7418
7418
  "symbolId": "shared-config/slack:SlackAlerts"
7419
7419
  }
7420
7420
  },
7421
- "version": "1.0.0",
7422
- "fingerprint": "lCoewncHb7xUSGcdjCbP1XHCpJWEQgEbdIniIlhBiqU="
7421
+ "version": "1.0.2",
7422
+ "fingerprint": "eElLCfj7EPVb9QLY4YnUOk5J2ThxudWwAcPrbPjEz7A="
7423
7423
  }
@@ -15,7 +15,7 @@ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
15
15
  const aws_route53_targets_1 = require("aws-cdk-lib/aws-route53-targets");
16
16
  const config_1 = require("./config");
17
17
  class OrcaBusApiGateway extends constructs_1.Construct {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway", version: "1.0.0" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway", version: "1.0.2" };
19
19
  /**
20
20
  * The AWS region where the API Gateway is deployed.
21
21
  */
@@ -13,7 +13,7 @@ exports.CROSS_DEPLOYMENT_ARTIFACT_BUCKET_NAME = "orcabus-cross-deployment-codepi
13
13
  exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ALIAS = "orcabus-cross-deployment-codepipeline-artifact";
14
14
  exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ARN_SSM_PARAMETER_NAME = "/orcabus/deployment-stack-pipeline/artifact-bucket/kms-key-arn";
15
15
  class CrossDeploymentArtifactBucket extends constructs_1.Construct {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket", version: "1.0.0" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket", version: "1.0.2" };
17
17
  /**
18
18
  * The S3 bucket used to store artifacts for cross-deployment pipelines.
19
19
  */
@@ -114,7 +114,7 @@ export interface DeploymentStackPipelineProps {
114
114
  */
115
115
  readonly excludedFilePaths?: string[];
116
116
  /**
117
- * The command to run to synth the cdk stack which also installing the cdk dependencies. e.g. ["yarn install --immutable", "yarn cdk synth"]
117
+ * The command to run to synth the cdk stack which also installing the cdk dependencies. e.g. ["pnpm install --frozen-lockfile", "pnpm cdk synth"]
118
118
  */
119
119
  readonly cdkSynthCmd: string[];
120
120
  /**
@@ -142,7 +142,7 @@ export interface DeploymentStackPipelineProps {
142
142
  * This step will execute in parallel with {@link unitAppTestConfig} as part of the synth stage dependencies.
143
143
  * Both must succeed before the synth step runs.
144
144
  *
145
- * The default command will be from the root of the repo: ["make install", "make test"]
145
+ * The default command will be from the root of the repo: ["npm install --global corepack@latest", "corepack enable", "make install", "make test"]
146
146
  */
147
147
  readonly unitIacTestConfig?: CodeBuildStepProps;
148
148
  /**
@@ -33,7 +33,7 @@ exports.DEFAULT_SYNTH_STEP_PARTIAL_BUILD_SPEC = {
33
33
  * before using this construct.
34
34
  */
35
35
  class DeploymentStackPipeline extends constructs_1.Construct {
36
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "1.0.0" };
36
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "1.0.2" };
37
37
  /**
38
38
  * The code pipeline construct that is created.
39
39
  */
@@ -56,6 +56,9 @@ class DeploymentStackPipeline extends constructs_1.Construct {
56
56
  pipelineType: aws_codepipeline_1.PipelineType.V2,
57
57
  pipelineName: props.pipelineName,
58
58
  crossAccountKeys: true,
59
+ // enable restartExecutionOnUpdate
60
+ // https://stackoverflow.com/questions/75701776/updatepipeline-stage-in-cdk-pipeline-is-cancelled
61
+ restartExecutionOnUpdate: true,
59
62
  });
60
63
  if (props.includedFilePaths || props.excludedFilePaths) {
61
64
  const filePaths = {};
@@ -85,7 +88,21 @@ class DeploymentStackPipeline extends constructs_1.Construct {
85
88
  ]);
86
89
  }
87
90
  // Add unit test for IaC at the root of the
88
- const { command: unitIacTestCommand = ["make install", "make test"], partialBuildSpec: unitIacPartialBuildSpec = undefined, } = props.unitIacTestConfig || {};
91
+ const { command: unitIacTestCommand = [
92
+ "npm install --global corepack@latest",
93
+ "corepack enable",
94
+ "pnpm install --frozen-lockfile --ignore-scripts",
95
+ "pnpm test",
96
+ ], partialBuildSpec: unitIacPartialBuildSpec = {
97
+ phases: {
98
+ install: {
99
+ "runtime-versions": {
100
+ nodejs: "22",
101
+ },
102
+ },
103
+ },
104
+ version: "0.2",
105
+ }, } = props.unitIacTestConfig || {};
89
106
  const unitIacTest = new pipelines_1.CodeBuildStep("UnitIacTest", {
90
107
  commands: unitIacTestCommand,
91
108
  input: sourceFile,
@@ -335,4 +352,4 @@ class FailOnDriftBuildStep extends pipelines_1.CodeBuildStep {
335
352
  });
336
353
  }
337
354
  }
338
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwaXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsMkNBQXVDO0FBQ3ZDLDZDQUFrRTtBQUNsRSw2REFNbUM7QUFDbkMsaURBQXNEO0FBQ3RELHFEQVErQjtBQUMvQixtRUFPc0M7QUFDdEMscUNBSWtCO0FBQ2xCLHlEQUFvRTtBQUNwRSxxRkFBbUU7QUFDbkUsdURBQWtFO0FBQ2xFLG1GQUk4QztBQUM5QyxpREFBc0Q7QUFFdEQ7O0dBRUc7QUFDVSxRQUFBLHFDQUFxQyxHQUFHO0lBQ25ELE1BQU0sRUFBRTtRQUNOLE9BQU8sRUFBRTtZQUNQLGtCQUFrQixFQUFFO2dCQUNsQixNQUFNLEVBQUUsTUFBTTthQUNmO1NBQ0Y7S0FDRjtDQUNGLENBQUM7QUFrTEY7Ozs7O0dBS0c7QUFDSCxNQUFhLHVCQUF3QixTQUFRLHNCQUFTOztJQUNwRDs7T0FFRztJQUNNLFFBQVEsQ0FBVztJQUU1QixZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUFtQztRQUVuQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sV0FBVyxHQUFHLHlCQUFlLENBQUMsdUJBQXVCLENBQ3pELElBQUksRUFDSixxQkFBcUIsQ0FDdEIsQ0FBQztRQUNGLE1BQU0sd0JBQXdCLEdBQUcsY0FBYyxDQUFDO1FBQ2hELE1BQU0sVUFBVSxHQUFHLDhCQUFrQixDQUFDLFVBQVUsQ0FDOUMsV0FBVyxLQUFLLENBQUMsVUFBVSxFQUFFLEVBQzdCLEtBQUssQ0FBQyxZQUFZLEVBQ2xCO1lBQ0UsYUFBYSxFQUFFLFdBQVc7WUFDMUIsVUFBVSxFQUFFLHdCQUF3QjtZQUNwQyxhQUFhLEVBQUUsSUFBSTtTQUNwQixDQUNGLENBQUM7UUFFRixNQUFNLCtCQUErQixHQUNuQyxLQUFLLENBQUMsMkJBQTJCLElBQUksSUFBSSxDQUFDO1FBQzVDLE1BQU0sY0FBYyxHQUFHLCtCQUEr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QUFtQyxVQUFVLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUc7Z0JBQ2hJLDRCQUE0QjtnQkFDNUIsbVFBQW1RO2dCQUNuUSxrRUFBa0U7Z0JBQ2xFLDhCQUE4QixVQUFVLENBQUMsTUFBTSxHQUFHO2dCQUNsRCw2QkFBNkI7Z0JBRTdCLE1BQU0sVUFBVSxtQkFBbUIsT0FBTyx1QkFBdUIsT0FBTyxtQ0FBbUMsVUFBVSxXQUFXLE9BQU8sK0VBQStFO2FBQ3ZOO1lBQ0Qsb0JBQW9CLEVBQUU7Z0JBQ3BCLElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQzNCLFNBQVMsRUFBRTt3QkFDVCxnQkFBZ0IsVUFBVSxDQUFDLE9BQU8sbUNBQW1DLFVBQVUsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtxQkFDL0c7aUJBQ0YsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IER1cmF0aW9uLCBFbnZpcm9ubWVudCwgU3RhY2ssIFN0YWdlIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBCdWlsZFNwZWMsXG4gIENvbXB1dGVUeXBlLFxuICBJUHJvamVjdCxcbiAgTGludXhBcm1CdWlsZEltYWdlLFxuICBQaXBlbGluZVByb2plY3QsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkXCI7XG5pbXBvcnQgeyBTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiO1xuaW1wb3J0IHtcbiAgQ29kZUJ1aWxkU3RlcCxcbiAgQ29kZVBpcGVsaW5lLFxuICBDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5UmVzdWx0LFxuICBDb2RlUGlwZWxpbmVTb3VyY2UsXG4gIElDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5LFxuICBQcm9kdWNlQWN0aW9uT3B0aW9ucyxcbiAgU3RlcCxcbn0gZnJvbSBcImF3cy1jZGstbGliL3BpcGVsaW5lc1wiO1xuaW1wb3J0IHtcbiAgUGlwZWxpbmUsXG4gIENmblBpcGVsaW5lLFxuICBQaXBlbGluZVR5cGUsXG4gIFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLFxuICBJU3RhZ2UsXG4gIEFydGlmYWN0LFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZVwiO1xuaW1wb3J0IHtcbiAgQkVUQV9FTlZJUk9OTUVOVCxcbiAgR0FNTUFfRU5WSVJPTk1FTlQsXG4gIFBST0RfRU5WSVJPTk1FTlQsXG59IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgU2xhY2tDaGFubmVsQ29uZmlndXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2hhdGJvdFwiO1xuaW1wb3J0IHsgRGV0YWlsVHlwZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZXN0YXJub3RpZmljYXRpb25zXCI7XG5pbXBvcnQgeyBDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldCB9IGZyb20gXCIuL2FydGlmYWN0LWJ1Y2tldFwiO1xuaW1wb3J0IHtcbiAgQ29kZUJ1aWxkQWN0aW9uLFxuICBNYW51YWxBcHByb3ZhbEFjdGlvbixcbiAgTWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcyxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmUtYWN0aW9uc1wiO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBwYXJ0aWFsIGJ1aWxkIHNwZWMgZm9yIHRoZSBzeW50aCBzdGVwIGluIHRoZSBwaXBlbGluZS5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1lOVEhfU1RFUF9QQVJUSUFMX0JVSUxEX1NQRUMgPSB7XG4gIHBoYXNlczoge1xuICAgIGluc3RhbGw6IHtcbiAgICAgIFwicnVudGltZS12ZXJzaW9uc1wiOiB7XG4gICAgICAgIG5vZGVqczogXCIyMi54XCIsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlRW52UHJvcHMge1xuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IGZvciB0aGUgYmV0YSBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgYmV0YTogRW52aXJvbm1lbnQ7XG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgZm9yIHRoZSBnYW1tYSBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2FtbWE6IEVudmlyb25tZW50O1xuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IGZvciB0aGUgcHJvZCBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZDogRW52aXJvbm1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhY2tDb25maWdQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGJldGEgKGRldikgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IGJldGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGdhbW1hIChzdGcpIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBnYW1tYTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgcHJvZCBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZDogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBwcmUtZGVwbG95bWVudCBkcmlmdCBkZXRlY3Rpb24gY2hlY2tzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERyaWZ0Q2hlY2tDb25maWcge1xuICAvKipcbiAgICogQ0RLIENMSSBlbnRyeXBvaW50IHVzZWQgdG8gcnVuIHRoZSBkcmlmdCBjb21tYW5kLlxuICAgKiBFeGFtcGxlczogXCJwbnBtIGNka1wiLCBcInBucG0gY2RrLXN0YXRlZnVsXCIsIFwicG5wbSBjZGstc3RhdGVsZXNzXCIuXG4gICAqIE11c3Qgc3VwcG9ydDogXCJkcmlmdCA8c3RhY2tJZD5cIi5cbiAgICovXG4gIHJlYWRvbmx5IGNka0NvbW1hbmQ6IHN0cmluZztcbiAgLyoqXG4gICAqIENvbW1hbmQgdG8gaW5zdGFsbCBkZXBlbmRlbmNpZXMgYmVmb3JlIHJ1bm5pbmcgQ0RLLlxuICAgKiBJZiB5b3VyIGFwcCBpcyBpbiBhIHN1YmRpcmVjdG9yeSwgcHJlZml4IHdpdGggXCJjZCA8ZGlyPiAmJlwiLlxuICAgKiBFeGFtcGxlOiBcImNkIGRldiAmJiBwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1pZ25vcmUtc2NyaXB0c1wiXG4gICAqXG4gICAqIERlZmF1bHQ6IFwicG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlIC0taWdub3JlLXNjcmlwdHNcIlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbENvbW1hbmQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJ1aWxkU3RlcFByb3BzIHtcbiAgLyoqXG4gICAqIHRoZSBtYWluIGNvbW1hbmQgZm9yIHRoZSBidWlsZCBzdGVwIHRvIHJ1blxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nW107XG4gIC8qKlxuICAgKiBQYXJ0aWFsIGJ1aWxkc3BlYyBmb3IgdGhpcyBDb2RlQnVpbGRTdGVwXG4gICAqL1xuICByZWFkb25seSBwYXJ0aWFsQnVpbGRTcGVjPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50U3RhY2tQaXBlbGluZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgYnJhbmNoIG5hbWUgdGhlIHBpcGVsaW5lIHdpbGwgbGlzdGVuIHRvLlxuICAgKiBBdm9pZCB1c2luZyBicmFuY2ggbmFtZXMgdGhhdCBjb250YWluIHNwZWNpYWwgY2hhcmFjdGVycyBzdWNoIGFzIHBhcmVudGhlc2VzLlxuICAgKiBBbGxvd2VkIHNwZWNpYWwgY2hhcmFjdGVycyBhcmU6IFwiKyAtID0gLiBfIDogLyBAXCIuXG4gICAqIFRoaXMgcmVzdHJpY3Rpb24gaXMgZHVlIHRvIEFXUyByZXNvdXJjZSB0YWdnaW5nIHJlcXVpcmVtZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IGdpdGh1YkJyYW5jaDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHJlcG9zaXRvcnkgbmFtZSB0aGF0IGV4aXN0IGluIHRoZSAnT3JjYUJ1cycgZ2l0aHViIG9yZ2FuaXNhdGlvbi4gZS5nLiBgYS1taWNyby1zZXJ2aWNlLXJlcG9gXG4gICAqL1xuICByZWFkb25seSBnaXRodWJSZXBvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdG8gd2hpY2ggdGhlIHBpcGVsaW5lIHdpbGwgYmUgZGVwbG95aW5nIHRvIGl0cyByZXNwZWN0aXZlIGFjY291bnRcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrOiBhbnk7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgbmFtZSAoaW4gY2xvdWRmb3JtYXRpb24pIGZvciB0aGUgc3RhY2sgZGVmaW5lZCBpbiBgc3RhY2tgLiBUaGUgc3RhY2sgbmFtZSB3aWxsIHByZXBlbmQgd2l0aCB0aGUgc3RhZ2VcbiAgICogbmFtZSBlLmcuIGBPcmNhQnVzQmV0YS08c3RhY2tOYW1lPmAsIGBPcmNhQnVzR2FtbWEtPHN0YWNrTmFtZT5gLCBgT3JjYUJ1c1Byb2QtPHN0YWNrTmFtZT5gXG4gICAqL1xuICByZWFkb25seSBzdGFja05hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzdGFjayBjb25maWd1cmF0aW9uL2NvbnN0YW50cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBzdGFjayBwcm9wcy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrQ29uZmlnOiBTdGFja0NvbmZpZ1Byb3BzO1xuICAvKipcbiAgICogVGhlIHBpcGVsaW5lIG5hbWUgaW4gdGhlIGJhc3Rpb24gYWNjb3VudC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcGF0dGVybnMgb2YgR2l0IHJlcG9zaXRvcnkgZmlsZSBwYXRocyB0aGF0LCB3aGVuIGEgY29tbWl0IGlzIHB1c2hlZCwgYXJlIHRvIGJlIElOQ0xVREVEIGFzIGNyaXRlcmlhIHRoYXQgc3RhcnRzIHRoZSBwaXBlbGluZS5cbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtY29kZXBpcGVsaW5lLXBpcGVsaW5lLWdpdGZpbGVwYXRoZmlsdGVyY3JpdGVyaWEuaHRtbFxuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZWRGaWxlUGF0aHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHBhdHRlcm5zIG9mIEdpdCByZXBvc2l0b3J5IGZpbGUgcGF0aHMgdGhhdCwgd2hlbiBhIGNvbW1pdCBpcyBwdXNoZWQsIGFyZSB0byBiZSBFWENMVURFRCBmcm9tIHN0YXJ0aW5nIHRoZSBwaXBlbGluZS5cbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtY29kZXBpcGVsaW5lLXBpcGVsaW5lLWdpdGZpbGVwYXRoZmlsdGVyY3JpdGVyaWEuaHRtbFxuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZWRGaWxlUGF0aHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBjb21tYW5kIHRvIHJ1biB0byBzeW50aCB0aGUgY2RrIHN0YWNrIHdoaWNoIGFsc28gaW5zdGFsbGluZyB0aGUgY2RrIGRlcGVuZGVuY2llcy4gZS5nLiBbXCJ5YXJuIGluc3RhbGwgLS1pbW11dGFibGVcIiwgXCJ5YXJuIGNkayBzeW50aFwiXVxuICAgKi9cbiAgcmVhZG9ubHkgY2RrU3ludGhDbWQ6IHN0cmluZ1tdO1xuICAvKipcbiAgICogVGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBjZGsgb3V0cHV0IHdpbGwgYmUgc3RvcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBjZGsub3V0XG4gICAqL1xuICByZWFkb25seSBjZGtPdXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBDb2RlQnVpbGQgc3RlcCBkdXJpbmcgdGhlIENESyBzeW50aCBwaGFzZS4gSXQgd2lsbCBwYXNzZWQgYXMgdGhlIGBwYXJ0aWFsQnVpbGRTcGVjYCB0byB0aGUgYENvZGVCdWlsZFN0ZXBgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBERUZBVUxUX1NZTlRIX1NURVBfUEFSVElBTF9CVUlMRF9TUEVDXG4gICAqL1xuICByZWFkb25seSBzeW50aEJ1aWxkU3BlYz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciB0aGUgQ29kZUJ1aWxkIHN0ZXAgdGhhdCBydW5zIHVuaXQgdGVzdHMgZm9yIHRoZSBtYWluIGFwcGxpY2F0aW9uIGNvZGUuXG4gICAqIFRoaXMgc3RlcCB3aWxsIGV4ZWN1dGUgaW4gcGFyYWxsZWwgd2l0aCB7QGxpbmsgdW5pdElhY1Rlc3RDb25maWd9IGFzIHBhcnQgb2YgdGhlIHN5bnRoIHN0YWdlIGRlcGVuZGVuY2llcy5cbiAgICogQm90aCBtdXN0IHN1Y2NlZWQgYmVmb3JlIHRoZSBzeW50aCBzdGVwIHJ1bnMuXG4gICAqXG4gICAqIGVuc3VyZSB5b3VyIGNvbW1hbmQgaW5jbHVkZXMgJ2NkJyB0byB0aGUgbWFpbiBhcHAgZGlyZWN0b3J5LCBhcyB0aGUgYnVpbGQgY29udGV4dCBzdGFydHMgZnJvbSB0aGUgcm9vdC5cbiAgICovXG4gIHJlYWRvbmx5IHVuaXRBcHBUZXN0Q29uZmlnOiBDb2RlQnVpbGRTdGVwUHJvcHM7XG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciB0aGUgQ29kZUJ1aWxkIHN0ZXAgdGhhdCBydW5zIHVuaXQgdGVzdHMgZm9yIEluZnJhc3RydWN0dXJlLWFzLUNvZGUgKElhQykgYXQgdGhlIHJlcG9zaXRvcnkgcm9vdC5cbiAgICogVGhpcyBzdGVwIHdpbGwgZXhlY3V0ZSBpbiBwYXJhbGxlbCB3aXRoIHtAbGluayB1bml0QXBwVGVzdENvbmZpZ30gYXMgcGFydCBvZiB0aGUgc3ludGggc3RhZ2UgZGVwZW5kZW5jaWVzLlxuICAgKiBCb3RoIG11c3Qgc3VjY2VlZCBiZWZvcmUgdGhlIHN5bnRoIHN0ZXAgcnVucy5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgY29tbWFuZCB3aWxsIGJlIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHJlcG86IFtcIm1ha2UgaW5zdGFsbFwiLCBcIm1ha2UgdGVzdFwiXVxuICAgKi9cbiAgcmVhZG9ubHkgdW5pdElhY1Rlc3RDb25maWc/OiBDb2RlQnVpbGRTdGVwUHJvcHM7XG4gIC8qKlxuICAgKiBUaGUgc3RhZ2UgZW52aXJvbm1lbnQgZm9yIHRoZSBkZXBsb3ltZW50IHN0YWNrXG4gICAqL1xuICByZWFkb25seSBzdGFnZUVudj86IFN0YWdlRW52UHJvcHM7XG4gIC8qKlxuICAgKiBFbmFibGUgbm90aWZpY2F0aW9uIHRvIHRoZSAnYWxlcnRzLWJ1aWxkJyBzbGFjayBjaGFubmVsLlxuICAgKiBAZGVmYXVsdCBUcnVlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVTbGFja05vdGlmaWNhdGlvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgcGlwZWxpbmUgbm90aWZpY2F0aW9uIGV2ZW50cyB0aGF0IHdpbGwgdHJpZ2dlciBhIFNsYWNrIGNoYW5uZWwgbm90aWZpY2F0aW9uLlxuICAgKiBPbmx5IGFwcGxpZXMgaWYgYGVuYWJsZVNsYWNrTm90aWZpY2F0aW9uYCBpcyBzZXQgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgW1BpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9GQUlMRURdIOKAk1xuICAgKiAgIE9ubHkgZmFpbGVkIHBpcGVsaW5lIGV4ZWN1dGlvbnMgd2lsbCB0cmlnZ2VyIGEgbm90aWZpY2F0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uRXZlbnRzPzogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHNbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXVzZSB0aGUgZXhpc3RpbmcgYXJ0aWZhY3QgYnVja2V0IGZvciBjcm9zcy1kZXBsb3ltZW50IHBpcGVsaW5lcy5cbiAgICogSWYgc2V0IHRvIHRydWUsIGl0IHdpbGwgbG9vayB1cCB0aGUgZXhpc3RpbmcgYXJ0aWZhY3QgYnVja2V0IGluIHRoZSBUT09MQ0hBSU4gYWNjb3VudC5cbiAgICpcbiAgICogQGRlZmF1bHQgVHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmV1c2VFeGlzdGluZ0FydGlmYWN0QnVja2V0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmVtb3ZlIGFzc2V0cyBmcm9tIHRoZSBDREsgYXNzZW1ibHkgcHJlLWRlcGxveW1lbnQgdG8gcHJldmVudCBoaXR0aW5nIENvZGVQaXBlbGluZSdzIDI1NiBNQiBhcnRpZmFjdCBzaXplIGxpbWl0LlxuICAgKiBVc2VmdWwgd2hlbiBDREsgYXNzZXRzIChMYW1iZGEgY29kZSwgRG9ja2VyIGltYWdlcywgZXRjLikgYXJlIGxhcmdlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvOTkxN1xuICAgKi9cbiAgcmVhZG9ubHkgc3RyaXBBc3NlbWJseUFzc2V0cz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciBkcmlmdCBkZXRlY3Rpb24gY2hlY2tzIGJlZm9yZSBkZXBsb3ltZW50LlxuICAgKiBJZiBzcGVjaWZpZWQsIHRoZSBwaXBlbGluZSB3aWxsIGNoZWNrIGZvciBDbG91ZEZvcm1hdGlvbiBkcmlmdCBhbmQgZmFpbCBpZiBkZXRlY3RlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRyaWZ0Q2hlY2tDb25maWc/OiBEcmlmdENoZWNrQ29uZmlnO1xufVxuXG4vKipcbiAqIEEgQ0RLIGNvbnN0cnVjdCB0aGF0IGNyZWF0ZXMgYSBkZXBsb3ltZW50IHBpcGVsaW5lIGFjcm9zcyBlbnZpcm9ubWVudHMgZm9yIHRoZSBPcmNhQnVzIHByb2plY3QuXG4gKlxuICogUHJlcmVxdWlzaXRlOiBFbnN1cmUgdGhhdCB0aGUgXCJDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldFwiIHN0YWNrIGlzIGRlcGxveWVkIGluIHRoZSBUT09MQ0hBSU4gYWNjb3VudFxuICogYmVmb3JlIHVzaW5nIHRoaXMgY29uc3RydWN0LlxuICovXG5leHBvcnQgY2xhc3MgRGVwbG95bWVudFN0YWNrUGlwZWxpbmUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIGNvZGUgcGlwZWxpbmUgY29uc3RydWN0IHRoYXQgaXMgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lOiBQaXBlbGluZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IERlcGxveW1lbnRTdGFja1BpcGVsaW5lUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBjb2RlU3RhckFybiA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHRoaXMsXG4gICAgICBcImNvZGVzdGFyX2dpdGh1Yl9hcm5cIixcbiAgICApO1xuICAgIGNvbnN0IGNvZGVTdGFyU291cmNlQWN0aW9uTmFtZSA9IFwicGlwZWxpbmUtc3JjXCI7XG4gICAgY29uc3Qgc291cmNlRmlsZSA9IENvZGVQaXBlbGluZVNvdXJjZS5jb25uZWN0aW9uKFxuICAgICAgYE9yY2FCdXMvJHtwcm9wcy5naXRodWJSZXBvfWAsXG4gICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3Rpb25Bcm46IGNvZGVTdGFyQXJuLFxuICAgICAgICBhY3Rpb25OYW1lOiBjb2RlU3RhclNvdXJjZUFjdGlvbk5hbWUsXG4gICAgICAgIHRyaWdnZXJPblB1c2g6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBpc1JldXNpbmdFeGlzdGluZ0FydGlmYWN0QnVja2V0ID1cbiAgICAgIHByb3BzLnJldXNlRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldCA/PyB0cnVlO1xuICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gaXNSZXVzaW5nRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldFxuICAgICAgPyBDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldC5mcm9tTG9va3VwKHRoaXMpLmFydGlmYWN0QnVja2V0XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRoaXMucGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUodGhpcywgXCJEZXBsb3ltZW50Q29kZVBpcGVsaW5lXCIsIHtcbiAgICAgIGFydGlmYWN0QnVja2V0OiBhcnRpZmFjdEJ1Y2tldCxcbiAgICAgIHBpcGVsaW5lVHlwZTogUGlwZWxpbmVUeXBlLlYyLFxuICAgICAgcGlwZWxpbmVOYW1lOiBwcm9wcy5waXBlbGluZU5hbWUsXG4gICAgICBjcm9zc0FjY291bnRLZXlzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmluY2x1ZGVkRmlsZVBhdGhzIHx8IHByb3BzLmV4Y2x1ZGVkRmlsZVBhdGhzKSB7XG4gICAgICBjb25zdCBmaWxlUGF0aHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXG4gICAgICBpZiAocHJvcHMuaW5jbHVkZWRGaWxlUGF0aHMpIHtcbiAgICAgICAgZmlsZVBhdGhzW1wiSW5jbHVkZXNcIl0gPSBwcm9wcy5pbmNsdWRlZEZpbGVQYXRocztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5leGNsdWRlZEZpbGVQYXRocykge1xuICAgICAgICBmaWxlUGF0aHNbXCJFeGNsdWRlc1wiXSA9IHByb3BzLmV4Y2x1ZGVkRmlsZVBhdGhzO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgZXZlbnQgZmlsdGVyIHRvIG9ubHkgdHJpZ2dlciBpZiB0aGUgcHVzaCBldmVudCBpcyBmcm9tIGBkZXBsb3lgIGRpcmVjdG9yeVxuICAgICAgY29uc3QgY2ZuUGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblBpcGVsaW5lO1xuICAgICAgY2ZuUGlwZWxpbmUuYWRkUHJvcGVydHlPdmVycmlkZShcIlRyaWdnZXJzXCIsIFtcbiAgICAgICAge1xuICAgICAgICAgIEdpdENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIFB1c2g6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEJyYW5jaGVzOiB7XG4gICAgICAgICAgICAgICAgICBJbmNsdWRlczogW3Byb3BzLmdpdGh1YkJyYW5jaF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBGaWxlUGF0aHM6IGZpbGVQYXRocyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBTb3VyY2VBY3Rpb25OYW1lOiBjb2RlU3RhclNvdXJjZUFjdGlvbk5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBQcm92aWRlclR5cGU6IFwiQ29kZVN0YXJTb3VyY2VDb25uZWN0aW9uXCIsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdW5pdCB0ZXN0IGZvciBJYUMgYXQgdGhlIHJvb3Qgb2YgdGhlXG4gICAgY29uc3Qge1xuICAgICAgY29tbWFuZDogdW5pdElhY1Rlc3RDb21tYW5kID0gW1wibWFrZSBpbnN0YWxsXCIsIFwibWFrZSB0ZXN0XCJdLFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogdW5pdElhY1BhcnRpYWxCdWlsZFNwZWMgPSB1bmRlZmluZWQsXG4gICAgfSA9IHByb3BzLnVuaXRJYWNUZXN0Q29uZmlnIHx8IHt9O1xuICAgIGNvbnN0IHVuaXRJYWNUZXN0ID0gbmV3IENvZGVCdWlsZFN0ZXAoXCJVbml0SWFjVGVzdFwiLCB7XG4gICAgICBjb21tYW5kczogdW5pdElhY1Rlc3RDb21tYW5kLFxuICAgICAgaW5wdXQ6IHNvdXJjZUZpbGUsXG4gICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgIHByaXZpbGVnZWQ6IHRydWUsXG4gICAgICAgIGNvbXB1dGVUeXBlOiBDb21wdXRlVHlwZS5MQVJHRSxcbiAgICAgICAgYnVpbGRJbWFnZTogTGludXhBcm1CdWlsZEltYWdlLkFNQVpPTl9MSU5VWF8yX1NUQU5EQVJEXzNfMCxcbiAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgICBOT0RFX09QVElPTlM6IHtcbiAgICAgICAgICAgIHZhbHVlOiBcIi0tbWF4LW9sZC1zcGFjZS1zaXplPTgxOTJcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IHVuaXRJYWNQYXJ0aWFsQnVpbGRTcGVjXG4gICAgICAgID8gQnVpbGRTcGVjLmZyb21PYmplY3QodW5pdElhY1BhcnRpYWxCdWlsZFNwZWMpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkaW5nIHVuaXQgdGVzdCBmb3IgdGhlIG1haW4gYXBwXG4gICAgY29uc3Qge1xuICAgICAgY29tbWFuZDogdW5pdEFwcFRlc3RDb21tYW5kLFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogdW5pdEFwcFBhcnRpYWxCdWlsZFNwZWMgPSB1bmRlZmluZWQsXG4gICAgfSA9IHByb3BzLnVuaXRBcHBUZXN0Q29uZmlnO1xuICAgIGNvbnN0IHVuaXRBcHBUZXN0ID0gbmV3IENvZGVCdWlsZFN0ZXAoXCJVbml0QXBwVGVzdFwiLCB7XG4gICAgICBjb21tYW5kczogdW5pdEFwcFRlc3RDb21tYW5kLFxuICAgICAgaW5wdXQ6IHNvdXJjZUZpbGUsXG4gICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgIHByaXZpbGVnZWQ6IHRydWUsXG4gICAgICAgIGNvbXB1dGVUeXBlOiBDb21wdXRlVHlwZS5MQVJHRSxcbiAgICAgICAgYnVpbGRJbWFnZTogTGludXhBcm1CdWlsZEltYWdlLkFNQVpPTl9MSU5VWF8yX1NUQU5EQVJEXzNfMCxcbiAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgICBOT0RFX09QVElPTlM6IHtcbiAgICAgICAgICAgIHZhbHVlOiBcIi0tbWF4LW9sZC1zcGFjZS1zaXplPTgxOTJcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IHVuaXRBcHBQYXJ0aWFsQnVpbGRTcGVjXG4gICAgICAgID8gQnVpbGRTcGVjLmZyb21PYmplY3QodW5pdEFwcFBhcnRpYWxCdWlsZFNwZWMpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBzeW50aEJ1aWxkU3BlYyA9IERFRkFVTFRfU1lOVEhfU1RFUF9QQVJUSUFMX0JVSUxEX1NQRUMgfSA9IHByb3BzO1xuICAgIGNvbnN0IHN5bnRoU3RlcCA9IG5ldyBDb2RlQnVpbGRTdGVwKFwiQ2RrU3ludGhcIiwge1xuICAgICAgaW5zdGFsbENvbW1hbmRzOiBbXG4gICAgICAgIFwibm9kZSAtdlwiLFxuICAgICAgICBcIm5wbSBpbnN0YWxsIC0tZ2xvYmFsIGNvcmVwYWNrQGxhdGVzdFwiLFxuICAgICAgICBcImNvcmVwYWNrIC0tdmVyc2lvblwiLFxuICAgICAgICBcImNvcmVwYWNrIGVuYWJsZVwiLFxuICAgICAgXSxcbiAgICAgIGNvbW1hbmRzOiBwcm9wcy5jZGtTeW50aENtZCxcbiAgICAgIGlucHV0OiBzb3VyY2VGaWxlLFxuICAgICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogcHJvcHMuY2RrT3V0IHx8IFwiY2RrLm91dFwiLFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogQnVpbGRTcGVjLmZyb21PYmplY3Qoc3ludGhCdWlsZFNwZWMpLFxuICAgIH0pO1xuICAgIHN5bnRoU3RlcC5hZGRTdGVwRGVwZW5kZW5jeSh1bml0SWFjVGVzdCk7XG4gICAgc3ludGhTdGVwLmFkZFN0ZXBEZXBlbmRlbmN5KHVuaXRBcHBUZXN0KTtcblxuICAgIGNvbnN0IGNka1BpcGVsaW5lID0gbmV3IENvZGVQaXBlbGluZSh0aGlzLCBcIkNES0NvZGVQaXBlbGluZVwiLCB7XG4gICAgICBjb2RlUGlwZWxpbmU6IHRoaXMucGlwZWxpbmUsXG4gICAgICBzeW50aDogc3ludGhTdGVwLFxuICAgICAgc2VsZk11dGF0aW9uOiB0cnVlLFxuICAgICAgY29kZUJ1aWxkRGVmYXVsdHM6IHtcbiAgICAgICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgICAgIGNvbXB1dGVUeXBlOiBDb21wdXRlVHlwZS5MQVJHRSxcbiAgICAgICAgICBidWlsZEltYWdlOiBMaW51eEFybUJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzJfU1RBTkRBUkRfM18wLFxuICAgICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgICAgICBOT0RFX09QVElPTlM6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IFwiLS1tYXgtb2xkLXNwYWNlLXNpemU9ODE5MlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlZmF1bHRTdGFnZUVudjogU3RhZ2VFbnZQcm9wcyA9IHtcbiAgICAgIGJldGE6IEJFVEFfRU5WSVJPTk1FTlQsXG4gICAgICBnYW1tYTogR0FNTUFfRU5WSVJPTk1FTlQsXG4gICAgICBwcm9kOiBQUk9EX0VOVklST05NRU5ULFxuICAgIH07XG4gICAgY29uc3Qgc3RhZ2VFbnYgPSBwcm9wcy5zdGFnZUVudiB8fCBkZWZhdWx0U3RhZ2VFbnY7XG5cbiAgICAvLyBBZnRlciBhc3NldHMgYXJlIHB1Ymxpc2hlZCwgdGhleSBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBhc3NlbWJseSBkaXJlY3RvcnlcbiAgICAvLyB0byBoZWxwIHByZXZlbnQgaGl0dGluZyB0aGUgQ29kZVBpcGVsaW5lIGFydGlmYWN0IGxpbWl0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvOTkxN1xuICAgIGxldCBzdHJpcEFzc2V0c0Zyb21Bc3NlbWJseTogQ29kZUJ1aWxkU3RlcCB8IHVuZGVmaW5lZDtcbiAgICBpZiAocHJvcHMuc3RyaXBBc3NlbWJseUFzc2V0cykge1xuICAgICAgc3RyaXBBc3NldHNGcm9tQXNzZW1ibHkgPSBuZXcgQ29kZUJ1aWxkU3RlcChcIlN0cmlwQXNzZXRzRnJvbUFzc2VtYmx5XCIsIHtcbiAgICAgICAgaW5wdXQ6IGNka1BpcGVsaW5lLmNsb3VkQXNzZW1ibHlGaWxlU2V0LFxuICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgICdTM19QQVRIPSR7Q09ERUJVSUxEX1NPVVJDRV9WRVJTSU9OI1wiYXJuOmF3czpzMzo6OlwifScsXG4gICAgICAgICAgXCJaSVBfQVJDSElWRT0kKGJhc2VuYW1lICRTM19QQVRIKVwiLFxuICAgICAgICAgIFwiZWNobyAkUzNfUEFUSFwiLFxuICAgICAgICAgIFwiZWNobyAkWklQX0FSQ0hJVkVcIixcbiAgICAgICAgICBcImxzXCIsXG4gICAgICAgICAgXCJybSAtcmZ2IGFzc2V0LipcIixcbiAgICAgICAgICBcInppcCAtciAtcSAtQSAkWklQX0FSQ0hJVkUgKlwiLFxuICAgICAgICAgIFwibHNcIixcbiAgICAgICAgICBcImF3cyBzMyBjcCAkWklQX0FSQ0hJVkUgczM6Ly8kUzNfUEFUSFwiLFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGNka1BpcGVsaW5lLmFkZFdhdmUoXCJCZWZvcmVTdGFnZURlcGxveW1lbnRcIiwge1xuICAgICAgICBwcmU6IFtzdHJpcEFzc2V0c0Zyb21Bc3NlbWJseV0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDb25zdHJ1Y3QgZnVuY3Rpb24gdG8gZ2V0IFN0YWNrSWQgZm9yIGRyaWZ0IGNoZWNrXG4gICAgY29uc3Qgcm9vdFN0YWNrTmFtZSA9IFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZTtcbiAgICBjb25zdCBjb25zdHJ1Y3RJZCA9IHRoaXMubm9kZS5pZDtcbiAgICBjb25zdCBnZXRTdGFja0lkID0gKGVudk5hbWU6IHN0cmluZykgPT5cbiAgICAgIGAke3Jvb3RTdGFja05hbWV9LyR7Y29uc3RydWN0SWR9LyR7ZW52TmFtZX0vJHtwcm9wcy5zdGFja05hbWV9YDtcblxuICAgIC8vIERyaWZ0IGNoZWNrIGNvbmZpZ1xuICAgIGNvbnN0IGlzRHJpZnRDaGVja1N0ZXAgPSAhIXByb3BzLmRyaWZ0Q2hlY2tDb25maWc7XG4gICAgY29uc3QgY2RrSW5zdGFsbENtZCA9XG4gICAgICBwcm9wcy5kcmlmdENoZWNrQ29uZmlnPy5pbnN0YWxsQ29tbWFuZCA/P1xuICAgICAgXCJwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1pZ25vcmUtc2NyaXB0c1wiO1xuICAgIGNvbnN0IGNka1J1bkNtZCA9IHByb3BzLmRyaWZ0Q2hlY2tDb25maWc/LmNka0NvbW1hbmQgPz8gYGA7XG5cbiAgICBjb25zdCBiZXRhRW52TmFtZSA9IFwiT3JjYUJ1c0JldGFcIjtcbiAgICBjZGtQaXBlbGluZS5hZGRTdGFnZShcbiAgICAgIG5ldyBEZXBsb3ltZW50U3RhZ2UoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGJldGFFbnZOYW1lLFxuICAgICAgICBzdGFnZUVudi5iZXRhLFxuICAgICAgICBwcm9wcy5zdGFja05hbWUsXG4gICAgICAgIHByb3BzLnN0YWNrLFxuICAgICAgICBwcm9wcy5zdGFja0NvbmZpZy5iZXRhLFxuICAgICAgICBwcm9wcy5naXRodWJSZXBvLFxuICAgICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBwcmU6IGlzRHJpZnRDaGVja1N0ZXBcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgbmV3IEZhaWxPbkRyaWZ0QnVpbGRTdGVwKFwiRHJpZnRPbkZhaWxCZXRhQ2hlY2tcIiwge1xuICAgICAgICAgICAgICAgIGFjY291bnRFbnY6IHN0YWdlRW52LmJldGEsXG4gICAgICAgICAgICAgICAgc3RhY2tJZDogZ2V0U3RhY2tJZChiZXRhRW52TmFtZSksXG4gICAgICAgICAgICAgICAgY2RrQ29tbWFuZDogY2RrUnVuQ21kLFxuICAgICAgICAgICAgICAgIGluc3RhbGxDb21tYW5kOiBjZGtJbnN0YWxsQ21kLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIEdBTU1BXG4gICAgICovXG4gICAgY29uc3QgZ2FtbWFFbnZOYW1lID0gXCJPcmNhQnVzR2FtbWFcIjtcblxuICAgIGNka1BpcGVsaW5lLmFkZFN0YWdlKFxuICAgICAgbmV3IERlcGxveW1lbnRTdGFnZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgZ2FtbWFFbnZOYW1lLFxuICAgICAgICBzdGFnZUVudi5nYW1tYSxcbiAgICAgICAgcHJvcHMuc3RhY2tOYW1lLFxuICAgICAgICBwcm9wcy5zdGFjayxcbiAgICAgICAgcHJvcHMuc3RhY2tDb25maWcuZ2FtbWEsXG4gICAgICAgIHByb3BzLmdpdGh1YlJlcG8sXG4gICAgICAgIHByb3BzLmdpdGh1YkJyYW5jaCxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIHByZTogaXNEcmlmdENoZWNrU3RlcFxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBuZXcgRmFpbE9uRHJpZnRCdWlsZFN0ZXAoXCJEcmlmdE9uRmFpbEdhbW1hQ2hlY2tcIiwge1xuICAgICAgICAgICAgICAgIGFjY291bnRFbnY6IHN0YWdlRW52LmdhbW1hLFxuICAgICAgICAgICAgICAgIHN0YWNrSWQ6IGdldFN0YWNrSWQoZ2FtbWFFbnZOYW1lKSxcbiAgICAgICAgICAgICAgICBjZGtDb21tYW5kOiBjZGtSdW5DbWQsXG4gICAgICAgICAgICAgICAgaW5zdGFsbENvbW1hbmQ6IGNka0luc3RhbGxDbWQsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBwb3N0OiBbXG4gICAgICAgICAgbmV3IE1hbnVhbEFwcHJvdmFsQWN0aW9uU3RlcChcIlByb21vdGVUb1Byb2RcIiwge1xuICAgICAgICAgICAgYWN0aW9uTmFtZTogXCJQcm9tb3RlVG9Qcm9kXCIsXG4gICAgICAgICAgICAvLyBDdXN0b20gc3RlcHMgYnlwYXNzIHN0YWdlIHByZS9wb3N0IG9yZGVyaW5nLCBzbyBydW5PcmRlciBtdXN0IGJlIGV4cGxpY2l0bHkgc2V0LlxuICAgICAgICAgICAgLy8gU2V0IHRvIDUgdG8gZW5zdXJlIHRoaXMgcnVucyBhZnRlciBhbGwgT3JjYUJ1c0dhbW1hIHN0YWdlIHN0ZXBzIGNvbXBsZXRlLlxuICAgICAgICAgICAgLy8gKEdhbW1hIGRlcGxveW1lbnQgdHlwaWNhbGx5IHVzZXMgMiBzdGVwcywgc28gNSBwcm92aWRlcyBhZGVxdWF0ZSBidWZmZXIpXG4gICAgICAgICAgICBydW5PcmRlcjogNSxcbiAgICAgICAgICAgIC8vIDYwLW1pbnV0ZSB0aW1lb3V0IGFsbG93cyBxdWV1ZWQgcGlwZWxpbmUgZXhlY3V0aW9ucyB0byBwcm9jZWVkIGlmIGFwcHJvdmFsIGV4cGlyZXNcbiAgICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoNjApLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogUFJPRFxuICAgICAqL1xuICAgIGNvbnN0IHByb2RFbnZOYW1lID0gXCJPcmNhQnVzUHJvZFwiO1xuXG4gICAgY2RrUGlwZWxpbmUuYWRkU3RhZ2UoXG4gICAgICBuZXcgRGVwbG95bWVudFN0YWdlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBwcm9kRW52TmFtZSxcbiAgICAgICAgc3RhZ2VFbnYucHJvZCxcbiAgICAgICAgcHJvcHMuc3RhY2tOYW1lLFxuICAgICAgICBwcm9wcy5zdGFjayxcbiAgICAgICAgcHJvcHMuc3RhY2tDb25maWcucHJvZCxcbiAgICAgICAgcHJvcHMuZ2l0aHViUmVwbyxcbiAgICAgICAgcHJvcHMuZ2l0aHViQnJhbmNoLFxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgcHJlOiBpc0RyaWZ0Q2hlY2tTdGVwXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIG5ldyBGYWlsT25EcmlmdEJ1aWxkU3RlcChcIkRyaWZ0T25GYWlsUHJvZENoZWNrXCIsIHtcbiAgICAgICAgICAgICAgICBhY2NvdW50RW52OiBzdGFnZUVudi5wcm9kLFxuICAgICAgICAgICAgICAgIHN0YWNrSWQ6IGdldFN0YWNrSWQocHJvZEVudk5hbWUpLFxuICAgICAgICAgICAgICAgIGNka0NvbW1hbmQ6IGNka1J1bkNtZCxcbiAgICAgICAgICAgICAgICBpbnN0YWxsQ29tbWFuZDogY2RrSW5zdGFsbENtZCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjZGtQaXBlbGluZS5idWlsZFBpcGVsaW5lKCk7XG5cbiAgICBpZiAoc3RyaXBBc3NldHNGcm9tQXNzZW1ibHkpIHtcbiAgICAgIGNka1BpcGVsaW5lLnBpcGVsaW5lLmFydGlmYWN0QnVja2V0LmdyYW50UmVhZFdyaXRlKFxuICAgICAgICBzdHJpcEFzc2V0c0Zyb21Bc3NlbWJseS5wcm9qZWN0LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZW5hYmxlU2xhY2tOb3RpZmljYXRpb24gPz8gdHJ1ZSkge1xuICAgICAgY29uc3QgYWxlcnRzQnVpbGRTbGFja0NvbmZpZ0FybiA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCIvY2hhdGJvdF9hcm4vc2xhY2svYWxlcnRzLWJ1aWxkXCIsXG4gICAgICApO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gU2xhY2tDaGFubmVsQ29uZmlndXJhdGlvbi5mcm9tU2xhY2tDaGFubmVsQ29uZmlndXJhdGlvbkFybihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJTbGFja0NoYW5uZWxDb25maWd1cmF0aW9uXCIsXG4gICAgICAgIGFsZXJ0c0J1aWxkU2xhY2tDb25maWdBcm4sXG4gICAgICApO1xuXG4gICAgICB0aGlzLnBpcGVsaW5lLm5vdGlmeU9uKFwiUGlwZWxpbmVTbGFja05vdGlmaWNhdGlvblwiLCB0YXJnZXQsIHtcbiAgICAgICAgZXZlbnRzOiBwcm9wcy5ub3RpZmljYXRpb25FdmVudHMgfHwgW1xuICAgICAgICAgIFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9GQUlMRUQsXG4gICAgICAgIF0sXG4gICAgICAgIGRldGFpbFR5cGU6IERldGFpbFR5cGUuRlVMTCxcbiAgICAgICAgbm90aWZpY2F0aW9uUnVsZU5hbWU6IGBPcmNhQnVzLSR7cHJvcHMucGlwZWxpbmVOYW1lfWAsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBNYW51YWxBcHByb3ZhbEFjdGlvblN0ZXAgd2l0aCByZXF1aXJlZCBydW5PcmRlci5cbiAqL1xuaW50ZXJmYWNlIE1hbnVhbEFwcHJvdmFsQWN0aW9uU3RlcFByb3BzIGV4dGVuZHMgTWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcnVuIG9yZGVyIGZvciB0aGlzIGFjdGlvbiBpbiB0aGUgcGlwZWxpbmUgc3RhZ2UuIFRoZSBzdGFnZSBQcmUvUG9zdCBvcmRlciBkb2VzIG5vdCBhcHBseSB0byB0aGlzIGN1c3RvbVxuICAgKiBzdGVwL2FjdGlvbiwgeW91IG5lZWQgdG8gZXhwbGljaXRseSBzZXQgdGhlIHJ1bk9yZGVyLlxuICAgKi9cbiAgcnVuT3JkZXI6IG51bWJlcjtcbn1cbi8qKlxuICogQ3VzdG9tIG1hbnVhbCBhcHByb3ZhbCBzdGVwIGZvciBDREsgQ29kZVBpcGVsaW5lLlxuICpcbiAqIFRoaXMgY2xhc3MgYnJpZGdlcyB0aGUgZ2FwIHRvIGVuYWJsZSB1c2luZyBNYW51YWxBcHByb3ZhbEFjdGlvbiB3aXRoaW4gYSBTdGVwIGNsYXNzLFxuICogbWFraW5nIGl0IGNvbXBhdGlibGUgd2l0aCBjZGsucGlwZWxpbmVzIGNvbnN0cnVjdHMuXG4gKlxuICogQHBhcmFtIGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc3RlcC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHByb3BlcnRpZXMgZm9yIHRoZSBtYW51YWwgYXBwcm92YWwgYWN0aW9uLCBpbmNsdWRpbmdcbiAqL1xuY2xhc3MgTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwXG4gIGV4dGVuZHMgU3RlcFxuICBpbXBsZW1lbnRzIElDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgbWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wczogTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwUHJvcHM7XG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IE1hbnVhbEFwcHJvdmFsQWN0aW9uU3RlcFByb3BzKSB7XG4gICAgc3VwZXIoaWQpO1xuICAgIHRoaXMubWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcyA9IG9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgcHJvZHVjZUFjdGlvbihcbiAgICBzdGFnZTogSVN0YWdlLFxuICAgIG9wdGlvbnM6IFByb2R1Y2VBY3Rpb25PcHRpb25zLFxuICApOiBDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5UmVzdWx0IHtcbiAgICBzdGFnZS5hZGRBY3Rpb24obmV3IE1hbnVhbEFwcHJvdmFsQWN0aW9uKHRoaXMubWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcykpO1xuXG4gICAgcmV0dXJuIHsgcnVuT3JkZXJzQ29uc3VtZWQ6IDEgfTtcbiAgfVxufVxuXG5jbGFzcyBEZXBsb3ltZW50U3RhZ2UgZXh0ZW5kcyBTdGFnZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgZW52aXJvbm1lbnROYW1lOiBzdHJpbmcsXG4gICAgZW52OiBFbnZpcm9ubWVudCxcbiAgICBzdGFja05hbWU6IHN0cmluZyxcbiAgICBzdGFja0NsYXNzOiBuZXcgKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBhbnkpID0+IFN0YWNrLFxuICAgIGFwcFN0YWNrUHJvcHM6IGFueSxcbiAgICBnaXRodWJSZXBvOiBzdHJpbmcsXG4gICAgZ2l0aHViQnJhbmNoPzogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgZW52aXJvbm1lbnROYW1lLCB7IGVudjogZW52IH0pO1xuXG4gICAgbGV0IHNvdXJjZSA9IGBodHRwczovL2dpdGh1Yi5jb20vT3JjYUJ1cy8ke2dpdGh1YlJlcG99YDtcbiAgICBpZiAoZ2l0aHViQnJhbmNoICE9PSB1bmRlZmluZWQgJiYgZ2l0aHViQnJhbmNoICE9PSBcIm1haW5cIikge1xuICAgICAgc291cmNlID0gYCR7c291cmNlfS90cmVlLyR7Z2l0aHViQnJhbmNofWA7XG4gICAgfVxuXG4gICAgbmV3IHN0YWNrQ2xhc3ModGhpcywgc3RhY2tOYW1lLCB7XG4gICAgICBlbnY6IGVudixcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgXCJ1bWNjci1vcmc6UHJvZHVjdFwiOiBcIk9yY2FCdXNcIixcbiAgICAgICAgXCJ1bWNjci1vcmc6Q3JlYXRvclwiOiBcIkNES1wiLFxuICAgICAgICBcInVtY2NyLW9yZzpTZXJ2aWNlXCI6IHN0YWNrTmFtZSxcbiAgICAgICAgXCJ1bWNjci1vcmc6U291cmNlXCI6IHNvdXJjZSxcbiAgICAgIH0sXG4gICAgICAuLi5hcHBTdGFja1Byb3BzLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbE9uRHJpZnRCdWlsZFN0ZXBQcm9wcyB7XG4gIC8qKlxuICAgKiBBV1MgYWNjb3VudCBhbmQgcmVnaW9uIHdoZXJlIHRoZSBkcmlmdCBjaGVjayBydW5zLlxuICAgKiBVc2VkIHRvIGFzc3VtZSB0aGUgQ0RLIGxvb2t1cCByb2xlIGFuZCBzZXQgQVdTX0RFRkFVTFRfUkVHSU9OLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudEVudjogRW52aXJvbm1lbnQ7XG4gIC8qKlxuICAgKiBGdWxseSBxdWFsaWZpZWQgQ0RLIHN0YWNrIElEIHRvIGNoZWNrIGZvciBkcmlmdC5cbiAgICpcbiAgICogRm9ybWF0OiBgPHJvb3RTdGFjaz4vPGNvbnN0cnVjdElkPi88ZW52TmFtZT4vPHN0YWNrTmFtZT5gXG4gICAqXG4gICAqIEV4YW1wbGU6IGBEZXZTdGFjay9EZXBsb3ltZW50UGlwZWxpbmUvT3JjYUJ1c0JldGEvVGVzdFN0YWNrYFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tJZDogc3RyaW5nO1xuICAvKipcbiAgICogQ0RLIENMSSBlbnRyeXBvaW50IHVzZWQgdG8gcnVuIHRoZSBkcmlmdCBjb21tYW5kLlxuICAgKiBFeGFtcGxlczogXCJwbnBtIGNka1wiLCBcInBucG0gY2RrLXN0YXRlZnVsXCIsIFwicG5wbSBjZGstc3RhdGVsZXNzXCIuXG4gICAqIE11c3Qgc3VwcG9ydDogXCJkcmlmdCA8c3RhY2tJZD5cIi5cbiAgICovXG4gIHJlYWRvbmx5IGNka0NvbW1hbmQ6IHN0cmluZztcbiAgLyoqXG4gICAqIENvbW1hbmQgdG8gaW5zdGFsbCBkZXBlbmRlbmNpZXMgYmVmb3JlIHJ1bm5pbmcgQ0RLLlxuICAgKiBJZiB5b3VyIGFwcCBpcyBpbiBhIHN1YmRpcmVjdG9yeSwgcHJlZml4IHdpdGggXCJjZCA8ZGlyPiAmJlwiLlxuICAgKiBFeGFtcGxlOiBcImNkIGRldiAmJiBwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1pZ25vcmUtc2NyaXB0c1wiXG4gICAqXG4gICAqIERlZmF1bHQ6IFwicG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlIC0taWdub3JlLXNjcmlwdHNcIlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbENvbW1hbmQ/OiBzdHJpbmc7XG59XG5cbmNsYXNzIEZhaWxPbkRyaWZ0QnVpbGRTdGVwIGV4dGVuZHMgQ29kZUJ1aWxkU3RlcCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGlkOiBzdHJpbmcsXG4gICAge1xuICAgICAgYWNjb3VudEVudixcbiAgICAgIHN0YWNrSWQsXG4gICAgICBjZGtDb21tYW5kLFxuICAgICAgaW5zdGFsbENvbW1hbmQsXG4gICAgfTogRmFpbE9uRHJpZnRCdWlsZFN0ZXBQcm9wcyxcbiAgKSB7XG4gICAgY29uc3QgY2RrSW5zdGFsbCA9IGluc3RhbGxDb21tYW5kXG4gICAgICA/IGluc3RhbGxDb21tYW5kXG4gICAgICA6IFwicG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlIC0taWdub3JlLXNjcmlwdHNcIjtcblxuICAgIHN1cGVyKGlkLCB7XG4gICAgICBjb21tYW5kczogW1xuICAgICAgICBcIm5vZGUgLXZcIixcbiAgICAgICAgXCJucG0gaW5zdGFsbCAtLWdsb2JhbCBjb3JlcGFja0BsYXRlc3RcIixcbiAgICAgICAgXCJjb3JlcGFjayAtLXZlcnNpb25cIixcbiAgICAgICAgXCJjb3JlcGFjayBlbmFibGVcIixcbiAgICAgICAgY2RrSW5zdGFsbCxcblxuICAgICAgICBgTE9PS1VQX1JPTEVfQVJOPVwiYXJuOmF3czppYW06OiR7YWNjb3VudEVudi5hY2NvdW50fTpyb2xlL2Nkay1obmI2NTlmZHMtbG9va3VwLXJvbGUtJHthY2NvdW50RW52LmFjY291bnR9LSR7YWNjb3VudEVudi5yZWdpb259XCJgLFxuICAgICAgICAnU0VTU0lPTl9OQU1FPVwiZHJpZnQtY2hlY2tcIicsXG4gICAgICAgICdyZWFkIEFXU19BQ0NFU1NfS0VZX0lEIEFXU19TRUNSRVRfQUNDRVNTX0tFWSBBV1NfU0VTU0lPTl9UT0tFTiA8IDwoYXdzIHN0cyBhc3N1bWUtcm9sZSAtLXJvbGUtYXJuIFwiJExPT0tVUF9ST0xFX0FSTlwiIC0tcm9sZS1zZXNzaW9uLW5hbWUgXCIkU0VTU0lPTl9OQU1FXCIgLS1kdXJhdGlvbi1zZWNvbmRzIDkwMCAtLXF1ZXJ5IFxcJ0NyZWRlbnRpYWxzLltBY2Nlc3NLZXlJZCxTZWNyZXRBY2Nlc3NLZXksU2Vzc2lvblRva2VuXVxcJyAtLW91dHB1dCB0ZXh0KScsXG4gICAgICAgIFwiZXhwb3J0IEFXU19BQ0NFU1NfS0VZX0lEIEFXU19TRUNSRVRfQUNDRVNTX0tFWSBBV1NfU0VTU0lPTl9UT0tFTlwiLFxuICAgICAgICBgZXhwb3J0IEFXU19ERUZBVUxUX1JFR0lPTj1cIiR7YWNjb3VudEVudi5yZWdpb259XCJgLFxuICAgICAgICBcImF3cyBzdHMgZ2V0LWNhbGxlci1pZGVudGl0eVwiLFxuXG4gICAgICAgIGBpZiAke2Nka0NvbW1hbmR9IGxzIHwgZ3JlcCAtRnEgXCIke3N0YWNrSWR9XCI7IHRoZW4gZWNobyBcIlN0YWNrICR7c3RhY2tJZH0gZm91bmQ7IGNoZWNraW5nIGZvciBkcmlmdC4uLlwiOyAke2Nka0NvbW1hbmR9IGRyaWZ0IFwiJHtzdGFja0lkfVwiIC1lIC0tZmFpbDsgZWxzZSBlY2hvIFwiU3RhY2sgbm90IGZvdW5kIGluIGNkayBsczsgc2tpcHBpbmcgZHJpZnQgY2hlY2suXCI7IGZpYCxcbiAgICAgIF0sXG4gICAgICByb2xlUG9saWN5U3RhdGVtZW50czogW1xuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXCJzdHM6QXNzdW1lUm9sZVwiXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgIGBhcm46YXdzOmlhbTo6JHthY2NvdW50RW52LmFjY291bnR9OnJvbGUvY2RrLWhuYjY1OWZkcy1sb29rdXAtcm9sZS0ke2FjY291bnRFbnYuYWNjb3VudH0tJHthY2NvdW50RW52LnJlZ2lvbn1gLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxufVxuIl19
355
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwaXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsMkNBQXVDO0FBQ3ZDLDZDQUFrRTtBQUNsRSw2REFNbUM7QUFDbkMsaURBQXNEO0FBQ3RELHFEQVErQjtBQUMvQixtRUFPc0M7QUFDdEMscUNBSWtCO0FBQ2xCLHlEQUFvRTtBQUNwRSxxRkFBbUU7QUFDbkUsdURBQWtFO0FBQ2xFLG1GQUk4QztBQUM5QyxpREFBc0Q7QUFFdEQ7O0dBRUc7QUFDVSxRQUFBLHFDQUFxQyxHQUFHO0lBQ25ELE1BQU0sRUFBRTtRQUNOLE9BQU8sRUFBRTtZQUNQLGtCQUFrQixFQUFFO2dCQUNsQixNQUFNLEVBQUUsTUFBTTthQUNmO1NBQ0Y7S0FDRjtDQUNGLENBQUM7QUFrTEY7Ozs7O0dBS0c7QUFDSCxNQUFhLHVCQUF3QixTQUFRLHNCQUFTOztJQUNwRDs7T0FFRztJQUNNLFFBQVEsQ0FBVztJQUU1QixZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUFtQztRQUVuQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sV0FBVyxHQUFHLHlCQUFlLENBQUMsdUJBQXVCLENBQ3pELElBQUksRUFDSixxQkFBcUIsQ0FDdEIsQ0FBQztRQUNGLE1BQU0sd0JBQXdCLEdBQUcsY0FBYyxDQUFDO1FBQ2hELE1BQU0sVUFBVSxHQUFHLDhCQUFrQixDQUFDLFVBQVUsQ0FDOUMsV0FBVyxLQUFLLENBQUMsVUFBVSxFQUFFLEVBQzdCLEtBQUssQ0FBQyxZQUFZLEVBQ2xCO1lBQ0UsYUFBYSxFQUFFLFdBQVc7WUFDMUIsVUFBVSxFQUFFLHdCQUF3QjtZQUNwQyxhQUFhLEVBQUUsSUFBSTtTQUNwQixDQUNGLENBQUM7UUFFRixNQUFNLCtCQUErQixHQUNuQyxLQUFLLENBQUMsMkJBQTJCLElBQUksSUFBSSxDQUFDO1FBQzVDLE1BQU0sY0FBYyxHQUFHLCtCQUEr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YztZQUMvQixDQUFDLENBQUMsY0FBYztZQUNoQixDQUFDLENBQUMsaURBQWlELENBQUM7UUFFdEQsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUNSLFFBQVEsRUFBRTtnQkFDUixTQUFTO2dCQUNULHNDQUFzQztnQkFDdEMsb0JBQW9CO2dCQUNwQixpQkFBaUI7Z0JBQ2pCLFVBQVU7Z0JBRVYsaUNBQWlDLFVBQVUsQ0FBQyxPQUFPLG1DQUFtQyxVQUFVLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUc7Z0JBQ2hJLDRCQUE0QjtnQkFDNUIsbVFBQW1RO2dCQUNuUSxrRUFBa0U7Z0JBQ2xFLDhCQUE4QixVQUFVLENBQUMsTUFBTSxHQUFHO2dCQUNsRCw2QkFBNkI7Z0JBRTdCLE1BQU0sVUFBVSxtQkFBbUIsT0FBTyx1QkFBdUIsT0FBTyxtQ0FBbUMsVUFBVSxXQUFXLE9BQU8sK0VBQStFO2FBQ3ZOO1lBQ0Qsb0JBQW9CLEVBQUU7Z0JBQ3BCLElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQzNCLFNBQVMsRUFBRTt3QkFDVCxnQkFBZ0IsVUFBVSxDQUFDLE9BQU8sbUNBQW1DLFVBQVUsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtxQkFDL0c7aUJBQ0YsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IER1cmF0aW9uLCBFbnZpcm9ubWVudCwgU3RhY2ssIFN0YWdlIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBCdWlsZFNwZWMsXG4gIENvbXB1dGVUeXBlLFxuICBJUHJvamVjdCxcbiAgTGludXhBcm1CdWlsZEltYWdlLFxuICBQaXBlbGluZVByb2plY3QsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkXCI7XG5pbXBvcnQgeyBTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiO1xuaW1wb3J0IHtcbiAgQ29kZUJ1aWxkU3RlcCxcbiAgQ29kZVBpcGVsaW5lLFxuICBDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5UmVzdWx0LFxuICBDb2RlUGlwZWxpbmVTb3VyY2UsXG4gIElDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5LFxuICBQcm9kdWNlQWN0aW9uT3B0aW9ucyxcbiAgU3RlcCxcbn0gZnJvbSBcImF3cy1jZGstbGliL3BpcGVsaW5lc1wiO1xuaW1wb3J0IHtcbiAgUGlwZWxpbmUsXG4gIENmblBpcGVsaW5lLFxuICBQaXBlbGluZVR5cGUsXG4gIFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLFxuICBJU3RhZ2UsXG4gIEFydGlmYWN0LFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZVwiO1xuaW1wb3J0IHtcbiAgQkVUQV9FTlZJUk9OTUVOVCxcbiAgR0FNTUFfRU5WSVJPTk1FTlQsXG4gIFBST0RfRU5WSVJPTk1FTlQsXG59IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgU2xhY2tDaGFubmVsQ29uZmlndXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2hhdGJvdFwiO1xuaW1wb3J0IHsgRGV0YWlsVHlwZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZXN0YXJub3RpZmljYXRpb25zXCI7XG5pbXBvcnQgeyBDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldCB9IGZyb20gXCIuL2FydGlmYWN0LWJ1Y2tldFwiO1xuaW1wb3J0IHtcbiAgQ29kZUJ1aWxkQWN0aW9uLFxuICBNYW51YWxBcHByb3ZhbEFjdGlvbixcbiAgTWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcyxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmUtYWN0aW9uc1wiO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBwYXJ0aWFsIGJ1aWxkIHNwZWMgZm9yIHRoZSBzeW50aCBzdGVwIGluIHRoZSBwaXBlbGluZS5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1lOVEhfU1RFUF9QQVJUSUFMX0JVSUxEX1NQRUMgPSB7XG4gIHBoYXNlczoge1xuICAgIGluc3RhbGw6IHtcbiAgICAgIFwicnVudGltZS12ZXJzaW9uc1wiOiB7XG4gICAgICAgIG5vZGVqczogXCIyMi54XCIsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlRW52UHJvcHMge1xuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IGZvciB0aGUgYmV0YSBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgYmV0YTogRW52aXJvbm1lbnQ7XG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgZm9yIHRoZSBnYW1tYSBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2FtbWE6IEVudmlyb25tZW50O1xuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IGZvciB0aGUgcHJvZCBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZDogRW52aXJvbm1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhY2tDb25maWdQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGJldGEgKGRldikgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IGJldGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGdhbW1hIChzdGcpIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBnYW1tYTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgcHJvZCBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZDogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBwcmUtZGVwbG95bWVudCBkcmlmdCBkZXRlY3Rpb24gY2hlY2tzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERyaWZ0Q2hlY2tDb25maWcge1xuICAvKipcbiAgICogQ0RLIENMSSBlbnRyeXBvaW50IHVzZWQgdG8gcnVuIHRoZSBkcmlmdCBjb21tYW5kLlxuICAgKiBFeGFtcGxlczogXCJwbnBtIGNka1wiLCBcInBucG0gY2RrLXN0YXRlZnVsXCIsIFwicG5wbSBjZGstc3RhdGVsZXNzXCIuXG4gICAqIE11c3Qgc3VwcG9ydDogXCJkcmlmdCA8c3RhY2tJZD5cIi5cbiAgICovXG4gIHJlYWRvbmx5IGNka0NvbW1hbmQ6IHN0cmluZztcbiAgLyoqXG4gICAqIENvbW1hbmQgdG8gaW5zdGFsbCBkZXBlbmRlbmNpZXMgYmVmb3JlIHJ1bm5pbmcgQ0RLLlxuICAgKiBJZiB5b3VyIGFwcCBpcyBpbiBhIHN1YmRpcmVjdG9yeSwgcHJlZml4IHdpdGggXCJjZCA8ZGlyPiAmJlwiLlxuICAgKiBFeGFtcGxlOiBcImNkIGRldiAmJiBwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1pZ25vcmUtc2NyaXB0c1wiXG4gICAqXG4gICAqIERlZmF1bHQ6IFwicG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlIC0taWdub3JlLXNjcmlwdHNcIlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbENvbW1hbmQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJ1aWxkU3RlcFByb3BzIHtcbiAgLyoqXG4gICAqIHRoZSBtYWluIGNvbW1hbmQgZm9yIHRoZSBidWlsZCBzdGVwIHRvIHJ1blxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nW107XG4gIC8qKlxuICAgKiBQYXJ0aWFsIGJ1aWxkc3BlYyBmb3IgdGhpcyBDb2RlQnVpbGRTdGVwXG4gICAqL1xuICByZWFkb25seSBwYXJ0aWFsQnVpbGRTcGVjPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50U3RhY2tQaXBlbGluZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgYnJhbmNoIG5hbWUgdGhlIHBpcGVsaW5lIHdpbGwgbGlzdGVuIHRvLlxuICAgKiBBdm9pZCB1c2luZyBicmFuY2ggbmFtZXMgdGhhdCBjb250YWluIHNwZWNpYWwgY2hhcmFjdGVycyBzdWNoIGFzIHBhcmVudGhlc2VzLlxuICAgKiBBbGxvd2VkIHNwZWNpYWwgY2hhcmFjdGVycyBhcmU6IFwiKyAtID0gLiBfIDogLyBAXCIuXG4gICAqIFRoaXMgcmVzdHJpY3Rpb24gaXMgZHVlIHRvIEFXUyByZXNvdXJjZSB0YWdnaW5nIHJlcXVpcmVtZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IGdpdGh1YkJyYW5jaDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHJlcG9zaXRvcnkgbmFtZSB0aGF0IGV4aXN0IGluIHRoZSAnT3JjYUJ1cycgZ2l0aHViIG9yZ2FuaXNhdGlvbi4gZS5nLiBgYS1taWNyby1zZXJ2aWNlLXJlcG9gXG4gICAqL1xuICByZWFkb25seSBnaXRodWJSZXBvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdG8gd2hpY2ggdGhlIHBpcGVsaW5lIHdpbGwgYmUgZGVwbG95aW5nIHRvIGl0cyByZXNwZWN0aXZlIGFjY291bnRcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrOiBhbnk7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgbmFtZSAoaW4gY2xvdWRmb3JtYXRpb24pIGZvciB0aGUgc3RhY2sgZGVmaW5lZCBpbiBgc3RhY2tgLiBUaGUgc3RhY2sgbmFtZSB3aWxsIHByZXBlbmQgd2l0aCB0aGUgc3RhZ2VcbiAgICogbmFtZSBlLmcuIGBPcmNhQnVzQmV0YS08c3RhY2tOYW1lPmAsIGBPcmNhQnVzR2FtbWEtPHN0YWNrTmFtZT5gLCBgT3JjYUJ1c1Byb2QtPHN0YWNrTmFtZT5gXG4gICAqL1xuICByZWFkb25seSBzdGFja05hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzdGFjayBjb25maWd1cmF0aW9uL2NvbnN0YW50cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBzdGFjayBwcm9wcy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrQ29uZmlnOiBTdGFja0NvbmZpZ1Byb3BzO1xuICAvKipcbiAgICogVGhlIHBpcGVsaW5lIG5hbWUgaW4gdGhlIGJhc3Rpb24gYWNjb3VudC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcGF0dGVybnMgb2YgR2l0IHJlcG9zaXRvcnkgZmlsZSBwYXRocyB0aGF0LCB3aGVuIGEgY29tbWl0IGlzIHB1c2hlZCwgYXJlIHRvIGJlIElOQ0xVREVEIGFzIGNyaXRlcmlhIHRoYXQgc3RhcnRzIHRoZSBwaXBlbGluZS5cbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtY29kZXBpcGVsaW5lLXBpcGVsaW5lLWdpdGZpbGVwYXRoZmlsdGVyY3JpdGVyaWEuaHRtbFxuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZWRGaWxlUGF0aHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHBhdHRlcm5zIG9mIEdpdCByZXBvc2l0b3J5IGZpbGUgcGF0aHMgdGhhdCwgd2hlbiBhIGNvbW1pdCBpcyBwdXNoZWQsIGFyZSB0byBiZSBFWENMVURFRCBmcm9tIHN0YXJ0aW5nIHRoZSBwaXBlbGluZS5cbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtY29kZXBpcGVsaW5lLXBpcGVsaW5lLWdpdGZpbGVwYXRoZmlsdGVyY3JpdGVyaWEuaHRtbFxuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZWRGaWxlUGF0aHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBjb21tYW5kIHRvIHJ1biB0byBzeW50aCB0aGUgY2RrIHN0YWNrIHdoaWNoIGFsc28gaW5zdGFsbGluZyB0aGUgY2RrIGRlcGVuZGVuY2llcy4gZS5nLiBbXCJwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGVcIiwgXCJwbnBtIGNkayBzeW50aFwiXVxuICAgKi9cbiAgcmVhZG9ubHkgY2RrU3ludGhDbWQ6IHN0cmluZ1tdO1xuICAvKipcbiAgICogVGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBjZGsgb3V0cHV0IHdpbGwgYmUgc3RvcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBjZGsub3V0XG4gICAqL1xuICByZWFkb25seSBjZGtPdXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBDb2RlQnVpbGQgc3RlcCBkdXJpbmcgdGhlIENESyBzeW50aCBwaGFzZS4gSXQgd2lsbCBwYXNzZWQgYXMgdGhlIGBwYXJ0aWFsQnVpbGRTcGVjYCB0byB0aGUgYENvZGVCdWlsZFN0ZXBgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBERUZBVUxUX1NZTlRIX1NURVBfUEFSVElBTF9CVUlMRF9TUEVDXG4gICAqL1xuICByZWFkb25seSBzeW50aEJ1aWxkU3BlYz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciB0aGUgQ29kZUJ1aWxkIHN0ZXAgdGhhdCBydW5zIHVuaXQgdGVzdHMgZm9yIHRoZSBtYWluIGFwcGxpY2F0aW9uIGNvZGUuXG4gICAqIFRoaXMgc3RlcCB3aWxsIGV4ZWN1dGUgaW4gcGFyYWxsZWwgd2l0aCB7QGxpbmsgdW5pdElhY1Rlc3RDb25maWd9IGFzIHBhcnQgb2YgdGhlIHN5bnRoIHN0YWdlIGRlcGVuZGVuY2llcy5cbiAgICogQm90aCBtdXN0IHN1Y2NlZWQgYmVmb3JlIHRoZSBzeW50aCBzdGVwIHJ1bnMuXG4gICAqXG4gICAqIGVuc3VyZSB5b3VyIGNvbW1hbmQgaW5jbHVkZXMgJ2NkJyB0byB0aGUgbWFpbiBhcHAgZGlyZWN0b3J5LCBhcyB0aGUgYnVpbGQgY29udGV4dCBzdGFydHMgZnJvbSB0aGUgcm9vdC5cbiAgICovXG4gIHJlYWRvbmx5IHVuaXRBcHBUZXN0Q29uZmlnOiBDb2RlQnVpbGRTdGVwUHJvcHM7XG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciB0aGUgQ29kZUJ1aWxkIHN0ZXAgdGhhdCBydW5zIHVuaXQgdGVzdHMgZm9yIEluZnJhc3RydWN0dXJlLWFzLUNvZGUgKElhQykgYXQgdGhlIHJlcG9zaXRvcnkgcm9vdC5cbiAgICogVGhpcyBzdGVwIHdpbGwgZXhlY3V0ZSBpbiBwYXJhbGxlbCB3aXRoIHtAbGluayB1bml0QXBwVGVzdENvbmZpZ30gYXMgcGFydCBvZiB0aGUgc3ludGggc3RhZ2UgZGVwZW5kZW5jaWVzLlxuICAgKiBCb3RoIG11c3Qgc3VjY2VlZCBiZWZvcmUgdGhlIHN5bnRoIHN0ZXAgcnVucy5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgY29tbWFuZCB3aWxsIGJlIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHJlcG86IFtcIm5wbSBpbnN0YWxsIC0tZ2xvYmFsIGNvcmVwYWNrQGxhdGVzdFwiLCBcImNvcmVwYWNrIGVuYWJsZVwiLCBcIm1ha2UgaW5zdGFsbFwiLCBcIm1ha2UgdGVzdFwiXVxuICAgKi9cbiAgcmVhZG9ubHkgdW5pdElhY1Rlc3RDb25maWc/OiBDb2RlQnVpbGRTdGVwUHJvcHM7XG4gIC8qKlxuICAgKiBUaGUgc3RhZ2UgZW52aXJvbm1lbnQgZm9yIHRoZSBkZXBsb3ltZW50IHN0YWNrXG4gICAqL1xuICByZWFkb25seSBzdGFnZUVudj86IFN0YWdlRW52UHJvcHM7XG4gIC8qKlxuICAgKiBFbmFibGUgbm90aWZpY2F0aW9uIHRvIHRoZSAnYWxlcnRzLWJ1aWxkJyBzbGFjayBjaGFubmVsLlxuICAgKiBAZGVmYXVsdCBUcnVlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVTbGFja05vdGlmaWNhdGlvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgcGlwZWxpbmUgbm90aWZpY2F0aW9uIGV2ZW50cyB0aGF0IHdpbGwgdHJpZ2dlciBhIFNsYWNrIGNoYW5uZWwgbm90aWZpY2F0aW9uLlxuICAgKiBPbmx5IGFwcGxpZXMgaWYgYGVuYWJsZVNsYWNrTm90aWZpY2F0aW9uYCBpcyBzZXQgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgW1BpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9GQUlMRURdIOKAk1xuICAgKiAgIE9ubHkgZmFpbGVkIHBpcGVsaW5lIGV4ZWN1dGlvbnMgd2lsbCB0cmlnZ2VyIGEgbm90aWZpY2F0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uRXZlbnRzPzogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHNbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXVzZSB0aGUgZXhpc3RpbmcgYXJ0aWZhY3QgYnVja2V0IGZvciBjcm9zcy1kZXBsb3ltZW50IHBpcGVsaW5lcy5cbiAgICogSWYgc2V0IHRvIHRydWUsIGl0IHdpbGwgbG9vayB1cCB0aGUgZXhpc3RpbmcgYXJ0aWZhY3QgYnVja2V0IGluIHRoZSBUT09MQ0hBSU4gYWNjb3VudC5cbiAgICpcbiAgICogQGRlZmF1bHQgVHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmV1c2VFeGlzdGluZ0FydGlmYWN0QnVja2V0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmVtb3ZlIGFzc2V0cyBmcm9tIHRoZSBDREsgYXNzZW1ibHkgcHJlLWRlcGxveW1lbnQgdG8gcHJldmVudCBoaXR0aW5nIENvZGVQaXBlbGluZSdzIDI1NiBNQiBhcnRpZmFjdCBzaXplIGxpbWl0LlxuICAgKiBVc2VmdWwgd2hlbiBDREsgYXNzZXRzIChMYW1iZGEgY29kZSwgRG9ja2VyIGltYWdlcywgZXRjLikgYXJlIGxhcmdlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvOTkxN1xuICAgKi9cbiAgcmVhZG9ubHkgc3RyaXBBc3NlbWJseUFzc2V0cz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciBkcmlmdCBkZXRlY3Rpb24gY2hlY2tzIGJlZm9yZSBkZXBsb3ltZW50LlxuICAgKiBJZiBzcGVjaWZpZWQsIHRoZSBwaXBlbGluZSB3aWxsIGNoZWNrIGZvciBDbG91ZEZvcm1hdGlvbiBkcmlmdCBhbmQgZmFpbCBpZiBkZXRlY3RlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRyaWZ0Q2hlY2tDb25maWc/OiBEcmlmdENoZWNrQ29uZmlnO1xufVxuXG4vKipcbiAqIEEgQ0RLIGNvbnN0cnVjdCB0aGF0IGNyZWF0ZXMgYSBkZXBsb3ltZW50IHBpcGVsaW5lIGFjcm9zcyBlbnZpcm9ubWVudHMgZm9yIHRoZSBPcmNhQnVzIHByb2plY3QuXG4gKlxuICogUHJlcmVxdWlzaXRlOiBFbnN1cmUgdGhhdCB0aGUgXCJDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldFwiIHN0YWNrIGlzIGRlcGxveWVkIGluIHRoZSBUT09MQ0hBSU4gYWNjb3VudFxuICogYmVmb3JlIHVzaW5nIHRoaXMgY29uc3RydWN0LlxuICovXG5leHBvcnQgY2xhc3MgRGVwbG95bWVudFN0YWNrUGlwZWxpbmUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIGNvZGUgcGlwZWxpbmUgY29uc3RydWN0IHRoYXQgaXMgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lOiBQaXBlbGluZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IERlcGxveW1lbnRTdGFja1BpcGVsaW5lUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBjb2RlU3RhckFybiA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHRoaXMsXG4gICAgICBcImNvZGVzdGFyX2dpdGh1Yl9hcm5cIixcbiAgICApO1xuICAgIGNvbnN0IGNvZGVTdGFyU291cmNlQWN0aW9uTmFtZSA9IFwicGlwZWxpbmUtc3JjXCI7XG4gICAgY29uc3Qgc291cmNlRmlsZSA9IENvZGVQaXBlbGluZVNvdXJjZS5jb25uZWN0aW9uKFxuICAgICAgYE9yY2FCdXMvJHtwcm9wcy5naXRodWJSZXBvfWAsXG4gICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3Rpb25Bcm46IGNvZGVTdGFyQXJuLFxuICAgICAgICBhY3Rpb25OYW1lOiBjb2RlU3RhclNvdXJjZUFjdGlvbk5hbWUsXG4gICAgICAgIHRyaWdnZXJPblB1c2g6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBpc1JldXNpbmdFeGlzdGluZ0FydGlmYWN0QnVja2V0ID1cbiAgICAgIHByb3BzLnJldXNlRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldCA/PyB0cnVlO1xuICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gaXNSZXVzaW5nRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldFxuICAgICAgPyBDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldC5mcm9tTG9va3VwKHRoaXMpLmFydGlmYWN0QnVja2V0XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRoaXMucGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUodGhpcywgXCJEZXBsb3ltZW50Q29kZVBpcGVsaW5lXCIsIHtcbiAgICAgIGFydGlmYWN0QnVja2V0OiBhcnRpZmFjdEJ1Y2tldCxcbiAgICAgIHBpcGVsaW5lVHlwZTogUGlwZWxpbmVUeXBlLlYyLFxuICAgICAgcGlwZWxpbmVOYW1lOiBwcm9wcy5waXBlbGluZU5hbWUsXG4gICAgICBjcm9zc0FjY291bnRLZXlzOiB0cnVlLFxuICAgICAgLy8gZW5hYmxlIHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZVxuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzU3MDE3NzYvdXBkYXRlcGlwZWxpbmUtc3RhZ2UtaW4tY2RrLXBpcGVsaW5lLWlzLWNhbmNlbGxlZFxuICAgICAgcmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmluY2x1ZGVkRmlsZVBhdGhzIHx8IHByb3BzLmV4Y2x1ZGVkRmlsZVBhdGhzKSB7XG4gICAgICBjb25zdCBmaWxlUGF0aHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXG4gICAgICBpZiAocHJvcHMuaW5jbHVkZWRGaWxlUGF0aHMpIHtcbiAgICAgICAgZmlsZVBhdGhzW1wiSW5jbHVkZXNcIl0gPSBwcm9wcy5pbmNsdWRlZEZpbGVQYXRocztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5leGNsdWRlZEZpbGVQYXRocykge1xuICAgICAgICBmaWxlUGF0aHNbXCJFeGNsdWRlc1wiXSA9IHByb3BzLmV4Y2x1ZGVkRmlsZVBhdGhzO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgZXZlbnQgZmlsdGVyIHRvIG9ubHkgdHJpZ2dlciBpZiB0aGUgcHVzaCBldmVudCBpcyBmcm9tIGBkZXBsb3lgIGRpcmVjdG9yeVxuICAgICAgY29uc3QgY2ZuUGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblBpcGVsaW5lO1xuICAgICAgY2ZuUGlwZWxpbmUuYWRkUHJvcGVydHlPdmVycmlkZShcIlRyaWdnZXJzXCIsIFtcbiAgICAgICAge1xuICAgICAgICAgIEdpdENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIFB1c2g6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEJyYW5jaGVzOiB7XG4gICAgICAgICAgICAgICAgICBJbmNsdWRlczogW3Byb3BzLmdpdGh1YkJyYW5jaF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBGaWxlUGF0aHM6IGZpbGVQYXRocyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBTb3VyY2VBY3Rpb25OYW1lOiBjb2RlU3RhclNvdXJjZUFjdGlvbk5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBQcm92aWRlclR5cGU6IFwiQ29kZVN0YXJTb3VyY2VDb25uZWN0aW9uXCIsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdW5pdCB0ZXN0IGZvciBJYUMgYXQgdGhlIHJvb3Qgb2YgdGhlXG4gICAgY29uc3Qge1xuICAgICAgY29tbWFuZDogdW5pdElhY1Rlc3RDb21tYW5kID0gW1xuICAgICAgICBcIm5wbSBpbnN0YWxsIC0tZ2xvYmFsIGNvcmVwYWNrQGxhdGVzdFwiLFxuICAgICAgICBcImNvcmVwYWNrIGVuYWJsZVwiLFxuICAgICAgICBcInBucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZSAtLWlnbm9yZS1zY3JpcHRzXCIsXG4gICAgICAgIFwicG5wbSB0ZXN0XCIsXG4gICAgICBdLFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogdW5pdElhY1BhcnRpYWxCdWlsZFNwZWMgPSB7XG4gICAgICAgIHBoYXNlczoge1xuICAgICAgICAgIGluc3RhbGw6IHtcbiAgICAgICAgICAgIFwicnVudGltZS12ZXJzaW9uc1wiOiB7XG4gICAgICAgICAgICAgIG5vZGVqczogXCIyMlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB2ZXJzaW9uOiBcIjAuMlwiLFxuICAgICAgfSxcbiAgICB9ID0gcHJvcHMudW5pdElhY1Rlc3RDb25maWcgfHwge307XG4gICAgY29uc3QgdW5pdElhY1Rlc3QgPSBuZXcgQ29kZUJ1aWxkU3RlcChcIlVuaXRJYWNUZXN0XCIsIHtcbiAgICAgIGNvbW1hbmRzOiB1bml0SWFjVGVzdENvbW1hbmQsXG4gICAgICBpbnB1dDogc291cmNlRmlsZSxcbiAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgcHJpdmlsZWdlZDogdHJ1ZSxcbiAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLkxBUkdFLFxuICAgICAgICBidWlsZEltYWdlOiBMaW51eEFybUJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzJfU1RBTkRBUkRfM18wLFxuICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczoge1xuICAgICAgICAgIE5PREVfT1BUSU9OUzoge1xuICAgICAgICAgICAgdmFsdWU6IFwiLS1tYXgtb2xkLXNwYWNlLXNpemU9ODE5MlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogdW5pdElhY1BhcnRpYWxCdWlsZFNwZWNcbiAgICAgICAgPyBCdWlsZFNwZWMuZnJvbU9iamVjdCh1bml0SWFjUGFydGlhbEJ1aWxkU3BlYylcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICAvLyBBZGRpbmcgdW5pdCB0ZXN0IGZvciB0aGUgbWFpbiBhcHBcbiAgICBjb25zdCB7XG4gICAgICBjb21tYW5kOiB1bml0QXBwVGVzdENvbW1hbmQsXG4gICAgICBwYXJ0aWFsQnVpbGRTcGVjOiB1bml0QXBwUGFydGlhbEJ1aWxkU3BlYyA9IHVuZGVmaW5lZCxcbiAgICB9ID0gcHJvcHMudW5pdEFwcFRlc3RDb25maWc7XG4gICAgY29uc3QgdW5pdEFwcFRlc3QgPSBuZXcgQ29kZUJ1aWxkU3RlcChcIlVuaXRBcHBUZXN0XCIsIHtcbiAgICAgIGNvbW1hbmRzOiB1bml0QXBwVGVzdENvbW1hbmQsXG4gICAgICBpbnB1dDogc291cmNlRmlsZSxcbiAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgcHJpdmlsZWdlZDogdHJ1ZSxcbiAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLkxBUkdFLFxuICAgICAgICBidWlsZEltYWdlOiBMaW51eEFybUJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzJfU1RBTkRBUkRfM18wLFxuICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczoge1xuICAgICAgICAgIE5PREVfT1BUSU9OUzoge1xuICAgICAgICAgICAgdmFsdWU6IFwiLS1tYXgtb2xkLXNwYWNlLXNpemU9ODE5MlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogdW5pdEFwcFBhcnRpYWxCdWlsZFNwZWNcbiAgICAgICAgPyBCdWlsZFNwZWMuZnJvbU9iamVjdCh1bml0QXBwUGFydGlhbEJ1aWxkU3BlYylcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IHN5bnRoQnVpbGRTcGVjID0gREVGQVVMVF9TWU5USF9TVEVQX1BBUlRJQUxfQlVJTERfU1BFQyB9ID0gcHJvcHM7XG4gICAgY29uc3Qgc3ludGhTdGVwID0gbmV3IENvZGVCdWlsZFN0ZXAoXCJDZGtTeW50aFwiLCB7XG4gICAgICBpbnN0YWxsQ29tbWFuZHM6IFtcbiAgICAgICAgXCJub2RlIC12XCIsXG4gICAgICAgIFwibnBtIGluc3RhbGwgLS1nbG9iYWwgY29yZXBhY2tAbGF0ZXN0XCIsXG4gICAgICAgIFwiY29yZXBhY2sgLS12ZXJzaW9uXCIsXG4gICAgICAgIFwiY29yZXBhY2sgZW5hYmxlXCIsXG4gICAgICBdLFxuICAgICAgY29tbWFuZHM6IHByb3BzLmNka1N5bnRoQ21kLFxuICAgICAgaW5wdXQ6IHNvdXJjZUZpbGUsXG4gICAgICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiBwcm9wcy5jZGtPdXQgfHwgXCJjZGsub3V0XCIsXG4gICAgICBwYXJ0aWFsQnVpbGRTcGVjOiBCdWlsZFNwZWMuZnJvbU9iamVjdChzeW50aEJ1aWxkU3BlYyksXG4gICAgfSk7XG4gICAgc3ludGhTdGVwLmFkZFN0ZXBEZXBlbmRlbmN5KHVuaXRJYWNUZXN0KTtcbiAgICBzeW50aFN0ZXAuYWRkU3RlcERlcGVuZGVuY3kodW5pdEFwcFRlc3QpO1xuXG4gICAgY29uc3QgY2RrUGlwZWxpbmUgPSBuZXcgQ29kZVBpcGVsaW5lKHRoaXMsIFwiQ0RLQ29kZVBpcGVsaW5lXCIsIHtcbiAgICAgIGNvZGVQaXBlbGluZTogdGhpcy5waXBlbGluZSxcbiAgICAgIHN5bnRoOiBzeW50aFN0ZXAsXG4gICAgICBzZWxmTXV0YXRpb246IHRydWUsXG4gICAgICBjb2RlQnVpbGREZWZhdWx0czoge1xuICAgICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLkxBUkdFLFxuICAgICAgICAgIGJ1aWxkSW1hZ2U6IExpbnV4QXJtQnVpbGRJbWFnZS5BTUFaT05fTElOVVhfMl9TVEFOREFSRF8zXzAsXG4gICAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgICAgIE5PREVfT1BUSU9OUzoge1xuICAgICAgICAgICAgICB2YWx1ZTogXCItLW1heC1vbGQtc3BhY2Utc2l6ZT04MTkyXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVmYXVsdFN0YWdlRW52OiBTdGFnZUVudlByb3BzID0ge1xuICAgICAgYmV0YTogQkVUQV9FTlZJUk9OTUVOVCxcbiAgICAgIGdhbW1hOiBHQU1NQV9FTlZJUk9OTUVOVCxcbiAgICAgIHByb2Q6IFBST0RfRU5WSVJPTk1FTlQsXG4gICAgfTtcbiAgICBjb25zdCBzdGFnZUVudiA9IHByb3BzLnN0YWdlRW52IHx8IGRlZmF1bHRTdGFnZUVudjtcblxuICAgIC8vIEFmdGVyIGFzc2V0cyBhcmUgcHVibGlzaGVkLCB0aGV5IGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIGFzc2VtYmx5IGRpcmVjdG9yeVxuICAgIC8vIHRvIGhlbHAgcHJldmVudCBoaXR0aW5nIHRoZSBDb2RlUGlwZWxpbmUgYXJ0aWZhY3QgbGltaXQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy85OTE3XG4gICAgbGV0IHN0cmlwQXNzZXRzRnJvbUFzc2VtYmx5OiBDb2RlQnVpbGRTdGVwIHwgdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5zdHJpcEFzc2VtYmx5QXNzZXRzKSB7XG4gICAgICBzdHJpcEFzc2V0c0Zyb21Bc3NlbWJseSA9IG5ldyBDb2RlQnVpbGRTdGVwKFwiU3RyaXBBc3NldHNGcm9tQXNzZW1ibHlcIiwge1xuICAgICAgICBpbnB1dDogY2RrUGlwZWxpbmUuY2xvdWRBc3NlbWJseUZpbGVTZXQsXG4gICAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICAgJ1MzX1BBVEg9JHtDT0RFQlVJTERfU09VUkNFX1ZFUlNJT04jXCJhcm46YXdzOnMzOjo6XCJ9JyxcbiAgICAgICAgICBcIlpJUF9BUkNISVZFPSQoYmFzZW5hbWUgJFMzX1BBVEgpXCIsXG4gICAgICAgICAgXCJlY2hvICRTM19QQVRIXCIsXG4gICAgICAgICAgXCJlY2hvICRaSVBfQVJDSElWRVwiLFxuICAgICAgICAgIFwibHNcIixcbiAgICAgICAgICBcInJtIC1yZnYgYXNzZXQuKlwiLFxuICAgICAgICAgIFwiemlwIC1yIC1xIC1BICRaSVBfQVJDSElWRSAqXCIsXG4gICAgICAgICAgXCJsc1wiLFxuICAgICAgICAgIFwiYXdzIHMzIGNwICRaSVBfQVJDSElWRSBzMzovLyRTM19QQVRIXCIsXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgY2RrUGlwZWxpbmUuYWRkV2F2ZShcIkJlZm9yZVN0YWdlRGVwbG95bWVudFwiLCB7XG4gICAgICAgIHByZTogW3N0cmlwQXNzZXRzRnJvbUFzc2VtYmx5XSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENvbnN0cnVjdCBmdW5jdGlvbiB0byBnZXQgU3RhY2tJZCBmb3IgZHJpZnQgY2hlY2tcbiAgICBjb25zdCByb290U3RhY2tOYW1lID0gU3RhY2sub2YodGhpcykuc3RhY2tOYW1lO1xuICAgIGNvbnN0IGNvbnN0cnVjdElkID0gdGhpcy5ub2RlLmlkO1xuICAgIGNvbnN0IGdldFN0YWNrSWQgPSAoZW52TmFtZTogc3RyaW5nKSA9PlxuICAgICAgYCR7cm9vdFN0YWNrTmFtZX0vJHtjb25zdHJ1Y3RJZH0vJHtlbnZOYW1lfS8ke3Byb3BzLnN0YWNrTmFtZX1gO1xuXG4gICAgLy8gRHJpZnQgY2hlY2sgY29uZmlnXG4gICAgY29uc3QgaXNEcmlmdENoZWNrU3RlcCA9ICEhcHJvcHMuZHJpZnRDaGVja0NvbmZpZztcbiAgICBjb25zdCBjZGtJbnN0YWxsQ21kID1cbiAgICAgIHByb3BzLmRyaWZ0Q2hlY2tDb25maWc/Lmluc3RhbGxDb21tYW5kID8/XG4gICAgICBcInBucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZSAtLWlnbm9yZS1zY3JpcHRzXCI7XG4gICAgY29uc3QgY2RrUnVuQ21kID0gcHJvcHMuZHJpZnRDaGVja0NvbmZpZz8uY2RrQ29tbWFuZCA/PyBgYDtcblxuICAgIGNvbnN0IGJldGFFbnZOYW1lID0gXCJPcmNhQnVzQmV0YVwiO1xuICAgIGNka1BpcGVsaW5lLmFkZFN0YWdlKFxuICAgICAgbmV3IERlcGxveW1lbnRTdGFnZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYmV0YUVudk5hbWUsXG4gICAgICAgIHN0YWdlRW52LmJldGEsXG4gICAgICAgIHByb3BzLnN0YWNrTmFtZSxcbiAgICAgICAgcHJvcHMuc3RhY2ssXG4gICAgICAgIHByb3BzLnN0YWNrQ29uZmlnLmJldGEsXG4gICAgICAgIHByb3BzLmdpdGh1YlJlcG8sXG4gICAgICAgIHByb3BzLmdpdGh1YkJyYW5jaCxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIHByZTogaXNEcmlmdENoZWNrU3RlcFxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBuZXcgRmFpbE9uRHJpZnRCdWlsZFN0ZXAoXCJEcmlmdE9uRmFpbEJldGFDaGVja1wiLCB7XG4gICAgICAgICAgICAgICAgYWNjb3VudEVudjogc3RhZ2VFbnYuYmV0YSxcbiAgICAgICAgICAgICAgICBzdGFja0lkOiBnZXRTdGFja0lkKGJldGFFbnZOYW1lKSxcbiAgICAgICAgICAgICAgICBjZGtDb21tYW5kOiBjZGtSdW5DbWQsXG4gICAgICAgICAgICAgICAgaW5zdGFsbENvbW1hbmQ6IGNka0luc3RhbGxDbWQsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogR0FNTUFcbiAgICAgKi9cbiAgICBjb25zdCBnYW1tYUVudk5hbWUgPSBcIk9yY2FCdXNHYW1tYVwiO1xuXG4gICAgY2RrUGlwZWxpbmUuYWRkU3RhZ2UoXG4gICAgICBuZXcgRGVwbG95bWVudFN0YWdlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBnYW1tYUVudk5hbWUsXG4gICAgICAgIHN0YWdlRW52LmdhbW1hLFxuICAgICAgICBwcm9wcy5zdGFja05hbWUsXG4gICAgICAgIHByb3BzLnN0YWNrLFxuICAgICAgICBwcm9wcy5zdGFja0NvbmZpZy5nYW1tYSxcbiAgICAgICAgcHJvcHMuZ2l0aHViUmVwbyxcbiAgICAgICAgcHJvcHMuZ2l0aHViQnJhbmNoLFxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgcHJlOiBpc0RyaWZ0Q2hlY2tTdGVwXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIG5ldyBGYWlsT25EcmlmdEJ1aWxkU3RlcChcIkRyaWZ0T25GYWlsR2FtbWFDaGVja1wiLCB7XG4gICAgICAgICAgICAgICAgYWNjb3VudEVudjogc3RhZ2VFbnYuZ2FtbWEsXG4gICAgICAgICAgICAgICAgc3RhY2tJZDogZ2V0U3RhY2tJZChnYW1tYUVudk5hbWUpLFxuICAgICAgICAgICAgICAgIGNka0NvbW1hbmQ6IGNka1J1bkNtZCxcbiAgICAgICAgICAgICAgICBpbnN0YWxsQ29tbWFuZDogY2RrSW5zdGFsbENtZCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIHBvc3Q6IFtcbiAgICAgICAgICBuZXcgTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwKFwiUHJvbW90ZVRvUHJvZFwiLCB7XG4gICAgICAgICAgICBhY3Rpb25OYW1lOiBcIlByb21vdGVUb1Byb2RcIixcbiAgICAgICAgICAgIC8vIEN1c3RvbSBzdGVwcyBieXBhc3Mgc3RhZ2UgcHJlL3Bvc3Qgb3JkZXJpbmcsIHNvIHJ1bk9yZGVyIG11c3QgYmUgZXhwbGljaXRseSBzZXQuXG4gICAgICAgICAgICAvLyBTZXQgdG8gNSB0byBlbnN1cmUgdGhpcyBydW5zIGFmdGVyIGFsbCBPcmNhQnVzR2FtbWEgc3RhZ2Ugc3RlcHMgY29tcGxldGUuXG4gICAgICAgICAgICAvLyAoR2FtbWEgZGVwbG95bWVudCB0eXBpY2FsbHkgdXNlcyAyIHN0ZXBzLCBzbyA1IHByb3ZpZGVzIGFkZXF1YXRlIGJ1ZmZlcilcbiAgICAgICAgICAgIHJ1bk9yZGVyOiA1LFxuICAgICAgICAgICAgLy8gNjAtbWludXRlIHRpbWVvdXQgYWxsb3dzIHF1ZXVlZCBwaXBlbGluZSBleGVjdXRpb25zIHRvIHByb2NlZWQgaWYgYXBwcm92YWwgZXhwaXJlc1xuICAgICAgICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcyg2MCksXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBQUk9EXG4gICAgICovXG4gICAgY29uc3QgcHJvZEVudk5hbWUgPSBcIk9yY2FCdXNQcm9kXCI7XG5cbiAgICBjZGtQaXBlbGluZS5hZGRTdGFnZShcbiAgICAgIG5ldyBEZXBsb3ltZW50U3RhZ2UoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHByb2RFbnZOYW1lLFxuICAgICAgICBzdGFnZUVudi5wcm9kLFxuICAgICAgICBwcm9wcy5zdGFja05hbWUsXG4gICAgICAgIHByb3BzLnN0YWNrLFxuICAgICAgICBwcm9wcy5zdGFja0NvbmZpZy5wcm9kLFxuICAgICAgICBwcm9wcy5naXRodWJSZXBvLFxuICAgICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBwcmU6IGlzRHJpZnRDaGVja1N0ZXBcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgbmV3IEZhaWxPbkRyaWZ0QnVpbGRTdGVwKFwiRHJpZnRPbkZhaWxQcm9kQ2hlY2tcIiwge1xuICAgICAgICAgICAgICAgIGFjY291bnRFbnY6IHN0YWdlRW52LnByb2QsXG4gICAgICAgICAgICAgICAgc3RhY2tJZDogZ2V0U3RhY2tJZChwcm9kRW52TmFtZSksXG4gICAgICAgICAgICAgICAgY2RrQ29tbWFuZDogY2RrUnVuQ21kLFxuICAgICAgICAgICAgICAgIGluc3RhbGxDb21tYW5kOiBjZGtJbnN0YWxsQ21kLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNka1BpcGVsaW5lLmJ1aWxkUGlwZWxpbmUoKTtcblxuICAgIGlmIChzdHJpcEFzc2V0c0Zyb21Bc3NlbWJseSkge1xuICAgICAgY2RrUGlwZWxpbmUucGlwZWxpbmUuYXJ0aWZhY3RCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoXG4gICAgICAgIHN0cmlwQXNzZXRzRnJvbUFzc2VtYmx5LnByb2plY3QsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5lbmFibGVTbGFja05vdGlmaWNhdGlvbiA/PyB0cnVlKSB7XG4gICAgICBjb25zdCBhbGVydHNCdWlsZFNsYWNrQ29uZmlnQXJuID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIi9jaGF0Ym90X2Fybi9zbGFjay9hbGVydHMtYnVpbGRcIixcbiAgICAgICk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBTbGFja0NoYW5uZWxDb25maWd1cmF0aW9uLmZyb21TbGFja0NoYW5uZWxDb25maWd1cmF0aW9uQXJuKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIlNsYWNrQ2hhbm5lbENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgYWxlcnRzQnVpbGRTbGFja0NvbmZpZ0FybixcbiAgICAgICk7XG5cbiAgICAgIHRoaXMucGlwZWxpbmUubm90aWZ5T24oXCJQaXBlbGluZVNsYWNrTm90aWZpY2F0aW9uXCIsIHRhcmdldCwge1xuICAgICAgICBldmVudHM6IHByb3BzLm5vdGlmaWNhdGlvbkV2ZW50cyB8fCBbXG4gICAgICAgICAgUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX0ZBSUxFRCxcbiAgICAgICAgXSxcbiAgICAgICAgZGV0YWlsVHlwZTogRGV0YWlsVHlwZS5GVUxMLFxuICAgICAgICBub3RpZmljYXRpb25SdWxlTmFtZTogYE9yY2FCdXMtJHtwcm9wcy5waXBlbGluZU5hbWV9YCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIE1hbnVhbEFwcHJvdmFsQWN0aW9uU3RlcCB3aXRoIHJlcXVpcmVkIHJ1bk9yZGVyLlxuICovXG5pbnRlcmZhY2UgTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwUHJvcHMgZXh0ZW5kcyBNYW51YWxBcHByb3ZhbEFjdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBydW4gb3JkZXIgZm9yIHRoaXMgYWN0aW9uIGluIHRoZSBwaXBlbGluZSBzdGFnZS4gVGhlIHN0YWdlIFByZS9Qb3N0IG9yZGVyIGRvZXMgbm90IGFwcGx5IHRvIHRoaXMgY3VzdG9tXG4gICAqIHN0ZXAvYWN0aW9uLCB5b3UgbmVlZCB0byBleHBsaWNpdGx5IHNldCB0aGUgcnVuT3JkZXIuXG4gICAqL1xuICBydW5PcmRlcjogbnVtYmVyO1xufVxuLyoqXG4gKiBDdXN0b20gbWFudWFsIGFwcHJvdmFsIHN0ZXAgZm9yIENESyBDb2RlUGlwZWxpbmUuXG4gKlxuICogVGhpcyBjbGFzcyBicmlkZ2VzIHRoZSBnYXAgdG8gZW5hYmxlIHVzaW5nIE1hbnVhbEFwcHJvdmFsQWN0aW9uIHdpdGhpbiBhIFN0ZXAgY2xhc3MsXG4gKiBtYWtpbmcgaXQgY29tcGF0aWJsZSB3aXRoIGNkay5waXBlbGluZXMgY29uc3RydWN0cy5cbiAqXG4gKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzdGVwLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcHJvcGVydGllcyBmb3IgdGhlIG1hbnVhbCBhcHByb3ZhbCBhY3Rpb24sIGluY2x1ZGluZ1xuICovXG5jbGFzcyBNYW51YWxBcHByb3ZhbEFjdGlvblN0ZXBcbiAgZXh0ZW5kcyBTdGVwXG4gIGltcGxlbWVudHMgSUNvZGVQaXBlbGluZUFjdGlvbkZhY3RvcnlcbntcbiAgcHJpdmF0ZSByZWFkb25seSBtYW51YWxBcHByb3ZhbEFjdGlvblByb3BzOiBNYW51YWxBcHByb3ZhbEFjdGlvblN0ZXBQcm9wcztcbiAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgb3B0aW9uczogTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwUHJvcHMpIHtcbiAgICBzdXBlcihpZCk7XG4gICAgdGhpcy5tYW51YWxBcHByb3ZhbEFjdGlvblByb3BzID0gb3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBwcm9kdWNlQWN0aW9uKFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgb3B0aW9uczogUHJvZHVjZUFjdGlvbk9wdGlvbnMsXG4gICk6IENvZGVQaXBlbGluZUFjdGlvbkZhY3RvcnlSZXN1bHQge1xuICAgIHN0YWdlLmFkZEFjdGlvbihuZXcgTWFudWFsQXBwcm92YWxBY3Rpb24odGhpcy5tYW51YWxBcHByb3ZhbEFjdGlvblByb3BzKSk7XG5cbiAgICByZXR1cm4geyBydW5PcmRlcnNDb25zdW1lZDogMSB9O1xuICB9XG59XG5cbmNsYXNzIERlcGxveW1lbnRTdGFnZSBleHRlbmRzIFN0YWdlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBlbnZpcm9ubWVudE5hbWU6IHN0cmluZyxcbiAgICBlbnY6IEVudmlyb25tZW50LFxuICAgIHN0YWNrTmFtZTogc3RyaW5nLFxuICAgIHN0YWNrQ2xhc3M6IG5ldyAoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IGFueSkgPT4gU3RhY2ssXG4gICAgYXBwU3RhY2tQcm9wczogYW55LFxuICAgIGdpdGh1YlJlcG86IHN0cmluZyxcbiAgICBnaXRodWJCcmFuY2g/OiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBlbnZpcm9ubWVudE5hbWUsIHsgZW52OiBlbnYgfSk7XG5cbiAgICBsZXQgc291cmNlID0gYGh0dHBzOi8vZ2l0aHViLmNvbS9PcmNhQnVzLyR7Z2l0aHViUmVwb31gO1xuICAgIGlmIChnaXRodWJCcmFuY2ggIT09IHVuZGVmaW5lZCAmJiBnaXRodWJCcmFuY2ggIT09IFwibWFpblwiKSB7XG4gICAgICBzb3VyY2UgPSBgJHtzb3VyY2V9L3RyZWUvJHtnaXRodWJCcmFuY2h9YDtcbiAgICB9XG5cbiAgICBuZXcgc3RhY2tDbGFzcyh0aGlzLCBzdGFja05hbWUsIHtcbiAgICAgIGVudjogZW52LFxuICAgICAgdGFnczoge1xuICAgICAgICBcInVtY2NyLW9yZzpQcm9kdWN0XCI6IFwiT3JjYUJ1c1wiLFxuICAgICAgICBcInVtY2NyLW9yZzpDcmVhdG9yXCI6IFwiQ0RLXCIsXG4gICAgICAgIFwidW1jY3Itb3JnOlNlcnZpY2VcIjogc3RhY2tOYW1lLFxuICAgICAgICBcInVtY2NyLW9yZzpTb3VyY2VcIjogc291cmNlLFxuICAgICAgfSxcbiAgICAgIC4uLmFwcFN0YWNrUHJvcHMsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBGYWlsT25EcmlmdEJ1aWxkU3RlcFByb3BzIHtcbiAgLyoqXG4gICAqIEFXUyBhY2NvdW50IGFuZCByZWdpb24gd2hlcmUgdGhlIGRyaWZ0IGNoZWNrIHJ1bnMuXG4gICAqIFVzZWQgdG8gYXNzdW1lIHRoZSBDREsgbG9va3VwIHJvbGUgYW5kIHNldCBBV1NfREVGQVVMVF9SRUdJT04uXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50RW52OiBFbnZpcm9ubWVudDtcbiAgLyoqXG4gICAqIEZ1bGx5IHF1YWxpZmllZCBDREsgc3RhY2sgSUQgdG8gY2hlY2sgZm9yIGRyaWZ0LlxuICAgKlxuICAgKiBGb3JtYXQ6IGA8cm9vdFN0YWNrPi88Y29uc3RydWN0SWQ+LzxlbnZOYW1lPi88c3RhY2tOYW1lPmBcbiAgICpcbiAgICogRXhhbXBsZTogYERldlN0YWNrL0RlcGxveW1lbnRQaXBlbGluZS9PcmNhQnVzQmV0YS9UZXN0U3RhY2tgXG4gICAqL1xuICByZWFkb25seSBzdGFja0lkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDREsgQ0xJIGVudHJ5cG9pbnQgdXNlZCB0byBydW4gdGhlIGRyaWZ0IGNvbW1hbmQuXG4gICAqIEV4YW1wbGVzOiBcInBucG0gY2RrXCIsIFwicG5wbSBjZGstc3RhdGVmdWxcIiwgXCJwbnBtIGNkay1zdGF0ZWxlc3NcIi5cbiAgICogTXVzdCBzdXBwb3J0OiBcImRyaWZ0IDxzdGFja0lkPlwiLlxuICAgKi9cbiAgcmVhZG9ubHkgY2RrQ29tbWFuZDogc3RyaW5nO1xuICAvKipcbiAgICogQ29tbWFuZCB0byBpbnN0YWxsIGRlcGVuZGVuY2llcyBiZWZvcmUgcnVubmluZyBDREsuXG4gICAqIElmIHlvdXIgYXBwIGlzIGluIGEgc3ViZGlyZWN0b3J5LCBwcmVmaXggd2l0aCBcImNkIDxkaXI+ICYmXCIuXG4gICAqIEV4YW1wbGU6IFwiY2QgZGV2ICYmIHBucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZSAtLWlnbm9yZS1zY3JpcHRzXCJcbiAgICpcbiAgICogRGVmYXVsdDogXCJwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1pZ25vcmUtc2NyaXB0c1wiXG4gICAqL1xuICByZWFkb25seSBpbnN0YWxsQ29tbWFuZD86IHN0cmluZztcbn1cblxuY2xhc3MgRmFpbE9uRHJpZnRCdWlsZFN0ZXAgZXh0ZW5kcyBDb2RlQnVpbGRTdGVwIHtcbiAgY29uc3RydWN0b3IoXG4gICAgaWQ6IHN0cmluZyxcbiAgICB7XG4gICAgICBhY2NvdW50RW52LFxuICAgICAgc3RhY2tJZCxcbiAgICAgIGNka0NvbW1hbmQsXG4gICAgICBpbnN0YWxsQ29tbWFuZCxcbiAgICB9OiBGYWlsT25EcmlmdEJ1aWxkU3RlcFByb3BzLFxuICApIHtcbiAgICBjb25zdCBjZGtJbnN0YWxsID0gaW5zdGFsbENvbW1hbmRcbiAgICAgID8gaW5zdGFsbENvbW1hbmRcbiAgICAgIDogXCJwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1pZ25vcmUtc2NyaXB0c1wiO1xuXG4gICAgc3VwZXIoaWQsIHtcbiAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgIFwibm9kZSAtdlwiLFxuICAgICAgICBcIm5wbSBpbnN0YWxsIC0tZ2xvYmFsIGNvcmVwYWNrQGxhdGVzdFwiLFxuICAgICAgICBcImNvcmVwYWNrIC0tdmVyc2lvblwiLFxuICAgICAgICBcImNvcmVwYWNrIGVuYWJsZVwiLFxuICAgICAgICBjZGtJbnN0YWxsLFxuXG4gICAgICAgIGBMT09LVVBfUk9MRV9BUk49XCJhcm46YXdzOmlhbTo6JHthY2NvdW50RW52LmFjY291bnR9OnJvbGUvY2RrLWhuYjY1OWZkcy1sb29rdXAtcm9sZS0ke2FjY291bnRFbnYuYWNjb3VudH0tJHthY2NvdW50RW52LnJlZ2lvbn1cImAsXG4gICAgICAgICdTRVNTSU9OX05BTUU9XCJkcmlmdC1jaGVja1wiJyxcbiAgICAgICAgJ3JlYWQgQVdTX0FDQ0VTU19LRVlfSUQgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZIEFXU19TRVNTSU9OX1RPS0VOIDwgPChhd3Mgc3RzIGFzc3VtZS1yb2xlIC0tcm9sZS1hcm4gXCIkTE9PS1VQX1JPTEVfQVJOXCIgLS1yb2xlLXNlc3Npb24tbmFtZSBcIiRTRVNTSU9OX05BTUVcIiAtLWR1cmF0aW9uLXNlY29uZHMgOTAwIC0tcXVlcnkgXFwnQ3JlZGVudGlhbHMuW0FjY2Vzc0tleUlkLFNlY3JldEFjY2Vzc0tleSxTZXNzaW9uVG9rZW5dXFwnIC0tb3V0cHV0IHRleHQpJyxcbiAgICAgICAgXCJleHBvcnQgQVdTX0FDQ0VTU19LRVlfSUQgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZIEFXU19TRVNTSU9OX1RPS0VOXCIsXG4gICAgICAgIGBleHBvcnQgQVdTX0RFRkFVTFRfUkVHSU9OPVwiJHthY2NvdW50RW52LnJlZ2lvbn1cImAsXG4gICAgICAgIFwiYXdzIHN0cyBnZXQtY2FsbGVyLWlkZW50aXR5XCIsXG5cbiAgICAgICAgYGlmICR7Y2RrQ29tbWFuZH0gbHMgfCBncmVwIC1GcSBcIiR7c3RhY2tJZH1cIjsgdGhlbiBlY2hvIFwiU3RhY2sgJHtzdGFja0lkfSBmb3VuZDsgY2hlY2tpbmcgZm9yIGRyaWZ0Li4uXCI7ICR7Y2RrQ29tbWFuZH0gZHJpZnQgXCIke3N0YWNrSWR9XCIgLWUgLS1mYWlsOyBlbHNlIGVjaG8gXCJTdGFjayBub3QgZm91bmQgaW4gY2RrIGxzOyBza2lwcGluZyBkcmlmdCBjaGVjay5cIjsgZmlgLFxuICAgICAgXSxcbiAgICAgIHJvbGVQb2xpY3lTdGF0ZW1lbnRzOiBbXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcInN0czpBc3N1bWVSb2xlXCJdLFxuICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgYGFybjphd3M6aWFtOjoke2FjY291bnRFbnYuYWNjb3VudH06cm9sZS9jZGstaG5iNjU5ZmRzLWxvb2t1cC1yb2xlLSR7YWNjb3VudEVudi5hY2NvdW50fS0ke2FjY291bnRFbnYucmVnaW9ufWAsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
package/dynamodb/index.js CHANGED
@@ -40,7 +40,7 @@ const dynamodb = __importStar(require("aws-cdk-lib/aws-dynamodb"));
40
40
  const aws_cdk_lib_1 = require("aws-cdk-lib");
41
41
  const config_1 = require("./config");
42
42
  class DynamoDbPartitionedConstruct extends constructs_1.Construct {
43
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbPartitionedConstruct", version: "1.0.0" };
43
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbPartitionedConstruct", version: "1.0.2" };
44
44
  table;
45
45
  constructor(scope, id, props) {
46
46
  super(scope, id);
@@ -75,7 +75,7 @@ class DynamoDbPartitionedConstruct extends constructs_1.Construct {
75
75
  }
76
76
  exports.DynamoDbPartitionedConstruct = DynamoDbPartitionedConstruct;
77
77
  class DynamoDbNonPartitionedConstruct extends constructs_1.Construct {
78
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbNonPartitionedConstruct", version: "1.0.0" };
78
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbNonPartitionedConstruct", version: "1.0.2" };
79
79
  table;
80
80
  constructor(scope, id, props) {
81
81
  super(scope, id);
package/ecs/index.js CHANGED
@@ -55,7 +55,7 @@ exports.LAMBDA_ARCHITECTURE_MAP = {
55
55
  ['ARM64']: lambda.Architecture.ARM_64
56
56
  };
57
57
  class EcsFargateTaskConstruct extends constructs_1.Construct {
58
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "1.0.0" };
58
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "1.0.2" };
59
59
  cluster;
60
60
  taskDefinition;
61
61
  taskExecutionRole;
@@ -17,7 +17,7 @@ var SfnEventStatus;
17
17
  SfnEventStatus["ABORTED"] = "ABORTED";
18
18
  })(SfnEventStatus || (exports.SfnEventStatus = SfnEventStatus = {}));
19
19
  class SfnSlackNotification extends constructs_1.Construct {
20
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.eventbridgeRule.SfnSlackNotification", version: "1.0.0" };
20
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.eventbridgeRule.SfnSlackNotification", version: "1.0.2" };
21
21
  rule;
22
22
  constructor(scope, id, props) {
23
23
  super(scope, id);
package/lambda/index.js CHANGED
@@ -57,7 +57,7 @@ function getPythonUvDockerImage() {
57
57
  return aws_cdk_lib_1.DockerImage.fromBuild(path_1.default.join(__dirname, 'build_python'));
58
58
  }
59
59
  class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
60
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "1.0.0" };
60
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "1.0.2" };
61
61
  // Class constructs, to be used for caching the layers
62
62
  // This means that if there are multiple lambdas throughout the stack
63
63
  // They will all use the same layer
@@ -13,7 +13,7 @@ const aws_cloudwatch_actions_1 = require("aws-cdk-lib/aws-cloudwatch-actions");
13
13
  * SNS topic.
14
14
  */
15
15
  class MonitoredQueue extends constructs_1.Construct {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.monitoredQueue.MonitoredQueue", version: "1.0.0" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.monitoredQueue.MonitoredQueue", version: "1.0.2" };
17
17
  queue;
18
18
  deadLetterQueue;
19
19
  alarm;
@@ -7,7 +7,7 @@ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
7
7
  * A construct which represents a named role that a Lambda function can assume.
8
8
  */
9
9
  class NamedLambdaRole extends aws_iam_1.Role {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.namedLambdaRole.NamedLambdaRole", version: "1.0.0" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.namedLambdaRole.NamedLambdaRole", version: "1.0.2" };
11
11
  constructor(scope, id, props) {
12
12
  super(scope, id, {
13
13
  assumedBy: new aws_iam_1.ServicePrincipal("lambda.amazonaws.com"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orcabus/platform-cdk-constructs",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "CDK Package for OrcaBus infrastructure.",
5
5
  "main": "index.ts",
6
6
  "types": "index.d.ts",
@@ -15,7 +15,7 @@ const aws_cdk_lib_1 = require("aws-cdk-lib");
15
15
  * to the provider framework.
16
16
  */
17
17
  class ProviderFunction extends constructs_1.Construct {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.provider.ProviderFunction", version: "1.0.0" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.provider.ProviderFunction", version: "1.0.2" };
19
19
  _function;
20
20
  _response;
21
21
  constructor(scope, id, props) {
@@ -23,7 +23,7 @@ exports.VPC_LOOKUP_PROPS = {
23
23
  * Helper for looking up the shared OrcaBus VPC.
24
24
  */
25
25
  class OrcaBusVpc {
26
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "1.0.0" };
26
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "1.0.2" };
27
27
  /**
28
28
  * The shared VPC that is used by OrcaBus.
29
29
  * @param scope
@@ -42,7 +42,7 @@ exports.SHARED_SECURITY_GROUP_NAME = "OrcaBusSharedComputeSecurityGroup";
42
42
  * Helper for looking up the shared compute security group by name.
43
43
  */
44
44
  class OrcaBusSharedComputeSecurityGroup {
45
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "1.0.0" };
45
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "1.0.2" };
46
46
  /**
47
47
  * The shared security group that is used by compute resources to access the database.
48
48
  * @param scope
@@ -11,7 +11,7 @@ exports.SLACK_ALERTS_SNS_TOPIC = "AwsChatBotTopic-alerts";
11
11
  * A helper class to construct the arn for the slack SNS topic.
12
12
  */
13
13
  class SlackAlerts {
14
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.slack.SlackAlerts", version: "1.0.0" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.slack.SlackAlerts", version: "1.0.2" };
15
15
  /**
16
16
  * Format the ARN for the slack alerts SNS topic for the current stack.
17
17
  * @param stack