@orcabus/platform-cdk-constructs 1.0.6 → 1.0.7
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 +55 -33
- package/api-gateway/api-gateway.js +1 -1
- package/deployment-stack-pipeline/artifact-bucket.js +1 -1
- package/deployment-stack-pipeline/pipeline.d.ts +4 -0
- package/deployment-stack-pipeline/pipeline.js +7 -4
- package/dynamodb/index.js +2 -2
- package/ecs/index.js +1 -1
- package/eventbridge-rules/sfn-slack-notification.js +1 -1
- package/lambda/index.js +1 -1
- package/monitored-queue/index.js +1 -1
- package/named-lambda-role/index.js +1 -1
- package/package.json +1 -1
- package/provider-function/index.js +1 -1
- package/shared-config/networking.js +2 -2
- package/shared-config/slack.js +1 -1
package/.jsii
CHANGED
|
@@ -9031,7 +9031,7 @@
|
|
|
9031
9031
|
"kind": "interface",
|
|
9032
9032
|
"locationInModule": {
|
|
9033
9033
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9034
|
-
"line":
|
|
9034
|
+
"line": 250
|
|
9035
9035
|
},
|
|
9036
9036
|
"name": "CacheOptions",
|
|
9037
9037
|
"namespace": "deploymentPipeline",
|
|
@@ -9046,7 +9046,7 @@
|
|
|
9046
9046
|
"immutable": true,
|
|
9047
9047
|
"locationInModule": {
|
|
9048
9048
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9049
|
-
"line":
|
|
9049
|
+
"line": 255
|
|
9050
9050
|
},
|
|
9051
9051
|
"name": "namespace",
|
|
9052
9052
|
"type": {
|
|
@@ -9092,6 +9092,28 @@
|
|
|
9092
9092
|
}
|
|
9093
9093
|
}
|
|
9094
9094
|
},
|
|
9095
|
+
{
|
|
9096
|
+
"abstract": true,
|
|
9097
|
+
"docs": {
|
|
9098
|
+
"stability": "experimental",
|
|
9099
|
+
"summary": "The install commands to run before the main command."
|
|
9100
|
+
},
|
|
9101
|
+
"immutable": true,
|
|
9102
|
+
"locationInModule": {
|
|
9103
|
+
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9104
|
+
"line": 116
|
|
9105
|
+
},
|
|
9106
|
+
"name": "installCommands",
|
|
9107
|
+
"optional": true,
|
|
9108
|
+
"type": {
|
|
9109
|
+
"collection": {
|
|
9110
|
+
"elementtype": {
|
|
9111
|
+
"primitive": "string"
|
|
9112
|
+
},
|
|
9113
|
+
"kind": "array"
|
|
9114
|
+
}
|
|
9115
|
+
}
|
|
9116
|
+
},
|
|
9095
9117
|
{
|
|
9096
9118
|
"abstract": true,
|
|
9097
9119
|
"docs": {
|
|
@@ -9239,7 +9261,7 @@
|
|
|
9239
9261
|
},
|
|
9240
9262
|
"locationInModule": {
|
|
9241
9263
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9242
|
-
"line":
|
|
9264
|
+
"line": 270
|
|
9243
9265
|
},
|
|
9244
9266
|
"parameters": [
|
|
9245
9267
|
{
|
|
@@ -9265,7 +9287,7 @@
|
|
|
9265
9287
|
"kind": "class",
|
|
9266
9288
|
"locationInModule": {
|
|
9267
9289
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9268
|
-
"line":
|
|
9290
|
+
"line": 264
|
|
9269
9291
|
},
|
|
9270
9292
|
"name": "DeploymentStackPipeline",
|
|
9271
9293
|
"namespace": "deploymentPipeline",
|
|
@@ -9278,7 +9300,7 @@
|
|
|
9278
9300
|
"immutable": true,
|
|
9279
9301
|
"locationInModule": {
|
|
9280
9302
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9281
|
-
"line":
|
|
9303
|
+
"line": 268
|
|
9282
9304
|
},
|
|
9283
9305
|
"name": "pipeline",
|
|
9284
9306
|
"type": {
|
|
@@ -9298,7 +9320,7 @@
|
|
|
9298
9320
|
"kind": "interface",
|
|
9299
9321
|
"locationInModule": {
|
|
9300
9322
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9301
|
-
"line":
|
|
9323
|
+
"line": 119
|
|
9302
9324
|
},
|
|
9303
9325
|
"name": "DeploymentStackPipelineProps",
|
|
9304
9326
|
"namespace": "deploymentPipeline",
|
|
@@ -9313,7 +9335,7 @@
|
|
|
9313
9335
|
"immutable": true,
|
|
9314
9336
|
"locationInModule": {
|
|
9315
9337
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9316
|
-
"line":
|
|
9338
|
+
"line": 165
|
|
9317
9339
|
},
|
|
9318
9340
|
"name": "cdkSynthCmd",
|
|
9319
9341
|
"type": {
|
|
@@ -9338,7 +9360,7 @@
|
|
|
9338
9360
|
"immutable": true,
|
|
9339
9361
|
"locationInModule": {
|
|
9340
9362
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9341
|
-
"line":
|
|
9363
|
+
"line": 126
|
|
9342
9364
|
},
|
|
9343
9365
|
"name": "githubBranch",
|
|
9344
9366
|
"type": {
|
|
@@ -9355,7 +9377,7 @@
|
|
|
9355
9377
|
"immutable": true,
|
|
9356
9378
|
"locationInModule": {
|
|
9357
9379
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9358
|
-
"line":
|
|
9380
|
+
"line": 130
|
|
9359
9381
|
},
|
|
9360
9382
|
"name": "githubRepo",
|
|
9361
9383
|
"type": {
|
|
@@ -9371,7 +9393,7 @@
|
|
|
9371
9393
|
"immutable": true,
|
|
9372
9394
|
"locationInModule": {
|
|
9373
9395
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9374
|
-
"line":
|
|
9396
|
+
"line": 147
|
|
9375
9397
|
},
|
|
9376
9398
|
"name": "pipelineName",
|
|
9377
9399
|
"type": {
|
|
@@ -9387,7 +9409,7 @@
|
|
|
9387
9409
|
"immutable": true,
|
|
9388
9410
|
"locationInModule": {
|
|
9389
9411
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9390
|
-
"line":
|
|
9412
|
+
"line": 134
|
|
9391
9413
|
},
|
|
9392
9414
|
"name": "stack",
|
|
9393
9415
|
"type": {
|
|
@@ -9403,7 +9425,7 @@
|
|
|
9403
9425
|
"immutable": true,
|
|
9404
9426
|
"locationInModule": {
|
|
9405
9427
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9406
|
-
"line":
|
|
9428
|
+
"line": 143
|
|
9407
9429
|
},
|
|
9408
9430
|
"name": "stackConfig",
|
|
9409
9431
|
"type": {
|
|
@@ -9420,7 +9442,7 @@
|
|
|
9420
9442
|
"immutable": true,
|
|
9421
9443
|
"locationInModule": {
|
|
9422
9444
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9423
|
-
"line":
|
|
9445
|
+
"line": 139
|
|
9424
9446
|
},
|
|
9425
9447
|
"name": "stackName",
|
|
9426
9448
|
"type": {
|
|
@@ -9437,7 +9459,7 @@
|
|
|
9437
9459
|
"immutable": true,
|
|
9438
9460
|
"locationInModule": {
|
|
9439
9461
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9440
|
-
"line":
|
|
9462
|
+
"line": 185
|
|
9441
9463
|
},
|
|
9442
9464
|
"name": "unitAppTestConfig",
|
|
9443
9465
|
"type": {
|
|
@@ -9455,7 +9477,7 @@
|
|
|
9455
9477
|
"immutable": true,
|
|
9456
9478
|
"locationInModule": {
|
|
9457
9479
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9458
|
-
"line":
|
|
9480
|
+
"line": 239
|
|
9459
9481
|
},
|
|
9460
9482
|
"name": "cacheOptions",
|
|
9461
9483
|
"optional": true,
|
|
@@ -9473,7 +9495,7 @@
|
|
|
9473
9495
|
"immutable": true,
|
|
9474
9496
|
"locationInModule": {
|
|
9475
9497
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9476
|
-
"line":
|
|
9498
|
+
"line": 171
|
|
9477
9499
|
},
|
|
9478
9500
|
"name": "cdkOut",
|
|
9479
9501
|
"optional": true,
|
|
@@ -9491,7 +9513,7 @@
|
|
|
9491
9513
|
"immutable": true,
|
|
9492
9514
|
"locationInModule": {
|
|
9493
9515
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9494
|
-
"line":
|
|
9516
|
+
"line": 231
|
|
9495
9517
|
},
|
|
9496
9518
|
"name": "driftCheckConfig",
|
|
9497
9519
|
"optional": true,
|
|
@@ -9509,7 +9531,7 @@
|
|
|
9509
9531
|
"immutable": true,
|
|
9510
9532
|
"locationInModule": {
|
|
9511
9533
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9512
|
-
"line":
|
|
9534
|
+
"line": 202
|
|
9513
9535
|
},
|
|
9514
9536
|
"name": "enableSlackNotification",
|
|
9515
9537
|
"optional": true,
|
|
@@ -9527,7 +9549,7 @@
|
|
|
9527
9549
|
"immutable": true,
|
|
9528
9550
|
"locationInModule": {
|
|
9529
9551
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9530
|
-
"line":
|
|
9552
|
+
"line": 161
|
|
9531
9553
|
},
|
|
9532
9554
|
"name": "excludedFilePaths",
|
|
9533
9555
|
"optional": true,
|
|
@@ -9550,7 +9572,7 @@
|
|
|
9550
9572
|
"immutable": true,
|
|
9551
9573
|
"locationInModule": {
|
|
9552
9574
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9553
|
-
"line":
|
|
9575
|
+
"line": 154
|
|
9554
9576
|
},
|
|
9555
9577
|
"name": "includedFilePaths",
|
|
9556
9578
|
"optional": true,
|
|
@@ -9574,7 +9596,7 @@
|
|
|
9574
9596
|
"immutable": true,
|
|
9575
9597
|
"locationInModule": {
|
|
9576
9598
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9577
|
-
"line":
|
|
9599
|
+
"line": 210
|
|
9578
9600
|
},
|
|
9579
9601
|
"name": "notificationEvents",
|
|
9580
9602
|
"optional": true,
|
|
@@ -9598,7 +9620,7 @@
|
|
|
9598
9620
|
"immutable": true,
|
|
9599
9621
|
"locationInModule": {
|
|
9600
9622
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9601
|
-
"line":
|
|
9623
|
+
"line": 218
|
|
9602
9624
|
},
|
|
9603
9625
|
"name": "reuseExistingArtifactBucket",
|
|
9604
9626
|
"optional": true,
|
|
@@ -9615,7 +9637,7 @@
|
|
|
9615
9637
|
"immutable": true,
|
|
9616
9638
|
"locationInModule": {
|
|
9617
9639
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9618
|
-
"line":
|
|
9640
|
+
"line": 197
|
|
9619
9641
|
},
|
|
9620
9642
|
"name": "stageEnv",
|
|
9621
9643
|
"optional": true,
|
|
@@ -9634,7 +9656,7 @@
|
|
|
9634
9656
|
"immutable": true,
|
|
9635
9657
|
"locationInModule": {
|
|
9636
9658
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9637
|
-
"line":
|
|
9659
|
+
"line": 226
|
|
9638
9660
|
},
|
|
9639
9661
|
"name": "stripAssemblyAssets",
|
|
9640
9662
|
"optional": true,
|
|
@@ -9653,7 +9675,7 @@
|
|
|
9653
9675
|
"immutable": true,
|
|
9654
9676
|
"locationInModule": {
|
|
9655
9677
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9656
|
-
"line":
|
|
9678
|
+
"line": 177
|
|
9657
9679
|
},
|
|
9658
9680
|
"name": "synthBuildSpec",
|
|
9659
9681
|
"optional": true,
|
|
@@ -9676,7 +9698,7 @@
|
|
|
9676
9698
|
"immutable": true,
|
|
9677
9699
|
"locationInModule": {
|
|
9678
9700
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9679
|
-
"line":
|
|
9701
|
+
"line": 193
|
|
9680
9702
|
},
|
|
9681
9703
|
"name": "unitIacTestConfig",
|
|
9682
9704
|
"optional": true,
|
|
@@ -9751,7 +9773,7 @@
|
|
|
9751
9773
|
"kind": "interface",
|
|
9752
9774
|
"locationInModule": {
|
|
9753
9775
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9754
|
-
"line":
|
|
9776
|
+
"line": 689
|
|
9755
9777
|
},
|
|
9756
9778
|
"name": "FailOnDriftBuildStepProps",
|
|
9757
9779
|
"namespace": "deploymentPipeline",
|
|
@@ -9766,7 +9788,7 @@
|
|
|
9766
9788
|
"immutable": true,
|
|
9767
9789
|
"locationInModule": {
|
|
9768
9790
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9769
|
-
"line":
|
|
9791
|
+
"line": 694
|
|
9770
9792
|
},
|
|
9771
9793
|
"name": "accountEnv",
|
|
9772
9794
|
"type": {
|
|
@@ -9783,7 +9805,7 @@
|
|
|
9783
9805
|
"immutable": true,
|
|
9784
9806
|
"locationInModule": {
|
|
9785
9807
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9786
|
-
"line":
|
|
9808
|
+
"line": 708
|
|
9787
9809
|
},
|
|
9788
9810
|
"name": "cdkCommand",
|
|
9789
9811
|
"type": {
|
|
@@ -9800,7 +9822,7 @@
|
|
|
9800
9822
|
"immutable": true,
|
|
9801
9823
|
"locationInModule": {
|
|
9802
9824
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9803
|
-
"line":
|
|
9825
|
+
"line": 702
|
|
9804
9826
|
},
|
|
9805
9827
|
"name": "stackId",
|
|
9806
9828
|
"type": {
|
|
@@ -9817,7 +9839,7 @@
|
|
|
9817
9839
|
"immutable": true,
|
|
9818
9840
|
"locationInModule": {
|
|
9819
9841
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
9820
|
-
"line":
|
|
9842
|
+
"line": 716
|
|
9821
9843
|
},
|
|
9822
9844
|
"name": "installCommand",
|
|
9823
9845
|
"optional": true,
|
|
@@ -11889,6 +11911,6 @@
|
|
|
11889
11911
|
"symbolId": "shared-config/slack:SlackAlerts"
|
|
11890
11912
|
}
|
|
11891
11913
|
},
|
|
11892
|
-
"version": "1.0.
|
|
11893
|
-
"fingerprint": "
|
|
11914
|
+
"version": "1.0.7",
|
|
11915
|
+
"fingerprint": "3K0vqWlQ0je14SxTocoVLIWtn5vCsIAdZuNEqOBF++I="
|
|
11894
11916
|
}
|
|
@@ -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.
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway", version: "1.0.7" };
|
|
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.
|
|
16
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket", version: "1.0.7" };
|
|
17
17
|
/**
|
|
18
18
|
* The S3 bucket used to store artifacts for cross-deployment pipelines.
|
|
19
19
|
*/
|
|
@@ -69,6 +69,10 @@ export interface CodeBuildStepProps {
|
|
|
69
69
|
* Partial buildspec for this CodeBuildStep
|
|
70
70
|
*/
|
|
71
71
|
readonly partialBuildSpec?: Record<string, any>;
|
|
72
|
+
/**
|
|
73
|
+
* The install commands to run before the main command.
|
|
74
|
+
*/
|
|
75
|
+
readonly installCommands?: string[];
|
|
72
76
|
}
|
|
73
77
|
export interface DeploymentStackPipelineProps {
|
|
74
78
|
/**
|
|
@@ -34,7 +34,7 @@ exports.DEFAULT_SYNTH_STEP_PARTIAL_BUILD_SPEC = {
|
|
|
34
34
|
* before using this construct.
|
|
35
35
|
*/
|
|
36
36
|
class DeploymentStackPipeline extends constructs_1.Construct {
|
|
37
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "1.0.
|
|
37
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "1.0.7" };
|
|
38
38
|
/**
|
|
39
39
|
* The code pipeline construct that is created.
|
|
40
40
|
*/
|
|
@@ -95,10 +95,11 @@ class DeploymentStackPipeline extends constructs_1.Construct {
|
|
|
95
95
|
cacheOptions = { cacheNamespace: props.cacheOptions.namespace };
|
|
96
96
|
}
|
|
97
97
|
// Add unit test for IaC at the root of the
|
|
98
|
-
const {
|
|
98
|
+
const { installCommands: unitIacTestInstall = [
|
|
99
99
|
"npm install --global corepack@latest",
|
|
100
100
|
"corepack enable",
|
|
101
101
|
"pnpm install --frozen-lockfile --ignore-scripts",
|
|
102
|
+
], command: unitIacTestCommand = [
|
|
102
103
|
"pnpm test",
|
|
103
104
|
], partialBuildSpec: unitIacPartialBuildSpec = {
|
|
104
105
|
phases: {
|
|
@@ -111,6 +112,7 @@ class DeploymentStackPipeline extends constructs_1.Construct {
|
|
|
111
112
|
version: "0.2",
|
|
112
113
|
}, } = props.unitIacTestConfig || {};
|
|
113
114
|
const unitIacTest = new pipelines_1.CodeBuildStep("UnitIacTest", {
|
|
115
|
+
installCommands: unitIacTestInstall,
|
|
114
116
|
commands: unitIacTestCommand,
|
|
115
117
|
input: sourceFile,
|
|
116
118
|
buildEnvironment: {
|
|
@@ -129,9 +131,10 @@ class DeploymentStackPipeline extends constructs_1.Construct {
|
|
|
129
131
|
cache: cacheBucket ? aws_codebuild_1.Cache.bucket(cacheBucket, cacheOptions) : undefined,
|
|
130
132
|
});
|
|
131
133
|
// Adding unit test for the main app
|
|
132
|
-
const { command: unitAppTestCommand, partialBuildSpec: unitAppPartialBuildSpec = undefined, } = props.unitAppTestConfig;
|
|
134
|
+
const { command: unitAppTestCommand, installCommands: unitAppTestInstall = undefined, partialBuildSpec: unitAppPartialBuildSpec = undefined, } = props.unitAppTestConfig;
|
|
133
135
|
const unitAppTest = new pipelines_1.CodeBuildStep("UnitAppTest", {
|
|
134
136
|
commands: unitAppTestCommand,
|
|
137
|
+
installCommands: unitAppTestInstall,
|
|
135
138
|
input: sourceFile,
|
|
136
139
|
buildEnvironment: {
|
|
137
140
|
privileged: true,
|
|
@@ -362,4 +365,4 @@ class FailOnDriftBuildStep extends pipelines_1.CodeBuildStep {
|
|
|
362
365
|
});
|
|
363
366
|
}
|
|
364
367
|
}
|
|
365
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwaXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsMkNBQXVDO0FBQ3ZDLDZDQUFrRTtBQUNsRSw2REFLbUM7QUFDbkMsaURBQXNEO0FBQ3RELHFEQVErQjtBQUMvQixtRUFNc0M7QUFDdEMscUNBSWtCO0FBQ2xCLHlEQUFvRTtBQUNwRSxxRkFBbUU7QUFDbkUsdURBQWtFO0FBQ2xFLG1GQUc4QztBQUM5QyxpREFBc0Q7QUFDdEQsaURBQXNEO0FBRXREOztHQUVHO0FBQ1UsUUFBQSxxQ0FBcUMsR0FBRztJQUNuRCxNQUFNLEVBQUU7UUFDTixPQUFPLEVBQUU7WUFDUCxrQkFBa0IsRUFBRTtnQkFDbEIsTUFBTSxFQUFFLE1BQU07YUFDZjtTQUNGO0tBQ0Y7Q0FDRixDQUFDO0FBME1GOzs7OztHQUtHO0FBQ0gsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUzs7SUFDcEQ7O09BRUc7SUFDTSxRQUFRLENBQVc7SUFFNUIsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBbUM7UUFFbkMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFdBQVcsR0FBRyx5QkFBZSxDQUFDLHVCQUF1QixDQUN6RCxJQUFJLEVBQ0oscUJBQXFCLENBQ3RCLENBQUM7UUFDRixNQUFNLHdCQUF3QixHQUFHLGNBQWMsQ0FBQztRQUNoRCxNQUFNLFVBQVUsR0FBRyw4QkFBa0IsQ0FBQyxVQUFVLENBQzlDLFdBQVcsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUM3QixLQUFLLENBQUMsWUFBWSxFQUNsQjtZQUNFLGFBQWEsRUFBRSxXQUFXO1lBQzFCLFVBQVUsRUFBRSx3QkFBd0I7WUFDcEMsYUFBYSxFQUFFLElBQUk7U0FDcEIsQ0FDRixDQUFDO1FBRUYsTUFBTSwrQkFBK0IsR0FDbkMsS0FBSyxDQUFDLDJCQUEyQixJQUFJLElBQUksQ0FBQztRQUM1QyxNQUFNLGNB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Tyx1QkFBdUIsT0FBTyxtQ0FBbUMsVUFBVSxXQUFXLE9BQU8sK0VBQStFO2FBQ3ZOO1lBQ0Qsb0JBQW9CLEVBQUU7Z0JBQ3BCLElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQzNCLFNBQVMsRUFBRTt3QkFDVCxnQkFBZ0IsVUFBVSxDQUFDLE9BQU8sbUNBQW1DLFVBQVUsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtxQkFDL0c7aUJBQ0YsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IER1cmF0aW9uLCBFbnZpcm9ubWVudCwgU3RhY2ssIFN0YWdlIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBCdWNrZXRDYWNoZU9wdGlvbnMsXG4gIEJ1aWxkU3BlYywgQ2FjaGUsXG4gIENvbXB1dGVUeXBlLFxuICBMaW51eEFybUJ1aWxkSW1hZ2UsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkXCI7XG5pbXBvcnQgeyBTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiO1xuaW1wb3J0IHtcbiAgQ29kZUJ1aWxkU3RlcCxcbiAgQ29kZVBpcGVsaW5lLFxuICBDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5UmVzdWx0LFxuICBDb2RlUGlwZWxpbmVTb3VyY2UsXG4gIElDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5LFxuICBQcm9kdWNlQWN0aW9uT3B0aW9ucyxcbiAgU3RlcCxcbn0gZnJvbSBcImF3cy1jZGstbGliL3BpcGVsaW5lc1wiO1xuaW1wb3J0IHtcbiAgUGlwZWxpbmUsXG4gIENmblBpcGVsaW5lLFxuICBQaXBlbGluZVR5cGUsXG4gIFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLFxuICBJU3RhZ2UsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lXCI7XG5pbXBvcnQge1xuICBCRVRBX0VOVklST05NRU5ULFxuICBHQU1NQV9FTlZJUk9OTUVOVCxcbiAgUFJPRF9FTlZJUk9OTUVOVCxcbn0gZnJvbSBcIi4vY29uZmlnXCI7XG5pbXBvcnQgeyBTbGFja0NoYW5uZWxDb25maWd1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jaGF0Ym90XCI7XG5pbXBvcnQgeyBEZXRhaWxUeXBlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2Rlc3Rhcm5vdGlmaWNhdGlvbnNcIjtcbmltcG9ydCB7IENyb3NzRGVwbG95bWVudEFydGlmYWN0QnVja2V0IH0gZnJvbSBcIi4vYXJ0aWZhY3QtYnVja2V0XCI7XG5pbXBvcnQge1xuICBNYW51YWxBcHByb3ZhbEFjdGlvbixcbiAgTWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcyxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmUtYWN0aW9uc1wiO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IENvZGVCdWlsZENhY2hlQnVja2V0IH0gZnJvbSBcIi4vY2FjaGUtYnVja2V0XCI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgcGFydGlhbCBidWlsZCBzcGVjIGZvciB0aGUgc3ludGggc3RlcCBpbiB0aGUgcGlwZWxpbmUuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NZTlRIX1NURVBfUEFSVElBTF9CVUlMRF9TUEVDID0ge1xuICBwaGFzZXM6IHtcbiAgICBpbnN0YWxsOiB7XG4gICAgICBcInJ1bnRpbWUtdmVyc2lvbnNcIjoge1xuICAgICAgICBub2RlanM6IFwiMjIueFwiLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBTdGFnZUVudlByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIGJldGEgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IGJldGE6IEVudmlyb25tZW50O1xuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IGZvciB0aGUgZ2FtbWEgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IGdhbW1hOiBFbnZpcm9ubWVudDtcbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIHByb2Qgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2Q6IEVudmlyb25tZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrQ29uZmlnUHJvcHMge1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBiZXRhIChkZXYpIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBiZXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBnYW1tYSAoc3RnKSBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2FtbWE6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHByb2Qgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2Q6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgcHJlLWRlcGxveW1lbnQgZHJpZnQgZGV0ZWN0aW9uIGNoZWNrcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEcmlmdENoZWNrQ29uZmlnIHtcbiAgLyoqXG4gICAqIENESyBDTEkgZW50cnlwb2ludCB1c2VkIHRvIHJ1biB0aGUgZHJpZnQgY29tbWFuZC5cbiAgICogRXhhbXBsZXM6IFwicG5wbSBjZGtcIiwgXCJwbnBtIGNkay1zdGF0ZWZ1bFwiLCBcInBucG0gY2RrLXN0YXRlbGVzc1wiLlxuICAgKiBNdXN0IHN1cHBvcnQ6IFwiZHJpZnQgPHN0YWNrSWQ+XCIuXG4gICAqL1xuICByZWFkb25seSBjZGtDb21tYW5kOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb21tYW5kIHRvIGluc3RhbGwgZGVwZW5kZW5jaWVzIGJlZm9yZSBydW5uaW5nIENESy5cbiAgICogSWYgeW91ciBhcHAgaXMgaW4gYSBzdWJkaXJlY3RvcnksIHByZWZpeCB3aXRoIFwiY2QgPGRpcj4gJiZcIi5cbiAgICogRXhhbXBsZTogXCJjZCBkZXYgJiYgcG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlIC0taWdub3JlLXNjcmlwdHNcIlxuICAgKlxuICAgKiBEZWZhdWx0OiBcInBucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZSAtLWlnbm9yZS1zY3JpcHRzXCJcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbGxDb21tYW5kPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvZGVCdWlsZFN0ZXBQcm9wcyB7XG4gIC8qKlxuICAgKiB0aGUgbWFpbiBjb21tYW5kIGZvciB0aGUgYnVpbGQgc3RlcCB0byBydW5cbiAgICovXG4gIHJlYWRvbmx5IGNvbW1hbmQ6IHN0cmluZ1tdO1xuICAvKipcbiAgICogUGFydGlhbCBidWlsZHNwZWMgZm9yIHRoaXMgQ29kZUJ1aWxkU3RlcFxuICAgKi9cbiAgcmVhZG9ubHkgcGFydGlhbEJ1aWxkU3BlYz86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudFN0YWNrUGlwZWxpbmVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIGJyYW5jaCBuYW1lIHRoZSBwaXBlbGluZSB3aWxsIGxpc3RlbiB0by5cbiAgICogQXZvaWQgdXNpbmcgYnJhbmNoIG5hbWVzIHRoYXQgY29udGFpbiBzcGVjaWFsIGNoYXJhY3RlcnMgc3VjaCBhcyBwYXJlbnRoZXNlcy5cbiAgICogQWxsb3dlZCBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlOiBcIisgLSA9IC4gXyA6IC8gQFwiLlxuICAgKiBUaGlzIHJlc3RyaWN0aW9uIGlzIGR1ZSB0byBBV1MgcmVzb3VyY2UgdGFnZ2luZyByZXF1aXJlbWVudHMuXG4gICAqL1xuICByZWFkb25seSBnaXRodWJCcmFuY2g6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSByZXBvc2l0b3J5IG5hbWUgdGhhdCBleGlzdCBpbiB0aGUgJ09yY2FCdXMnIGdpdGh1YiBvcmdhbmlzYXRpb24uIGUuZy4gYGEtbWljcm8tc2VydmljZS1yZXBvYFxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViUmVwbzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHN0YWNrIHRvIHdoaWNoIHRoZSBwaXBlbGluZSB3aWxsIGJlIGRlcGxveWluZyB0byBpdHMgcmVzcGVjdGl2ZSBhY2NvdW50XG4gICAqL1xuICByZWFkb25seSBzdGFjazogYW55O1xuICAvKipcbiAgICogVGhlIHN0YWNrIG5hbWUgKGluIGNsb3VkZm9ybWF0aW9uKSBmb3IgdGhlIHN0YWNrIGRlZmluZWQgaW4gYHN0YWNrYC4gVGhlIHN0YWNrIG5hbWUgd2lsbCBwcmVwZW5kIHdpdGggdGhlIHN0YWdlXG4gICAqIG5hbWUgZS5nLiBgT3JjYUJ1c0JldGEtPHN0YWNrTmFtZT5gLCBgT3JjYUJ1c0dhbW1hLTxzdGFja05hbWU+YCwgYE9yY2FCdXNQcm9kLTxzdGFja05hbWU+YFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgY29uZmlndXJhdGlvbi9jb25zdGFudHMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgc3RhY2sgcHJvcHMuXG4gICAqL1xuICByZWFkb25seSBzdGFja0NvbmZpZzogU3RhY2tDb25maWdQcm9wcztcbiAgLyoqXG4gICAqIFRoZSBwaXBlbGluZSBuYW1lIGluIHRoZSBiYXN0aW9uIGFjY291bnQuXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZU5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHBhdHRlcm5zIG9mIEdpdCByZXBvc2l0b3J5IGZpbGUgcGF0aHMgdGhhdCwgd2hlbiBhIGNvbW1pdCBpcyBwdXNoZWQsIGFyZSB0byBiZSBJTkNMVURFRCBhcyBjcml0ZXJpYSB0aGF0IHN0YXJ0cyB0aGUgcGlwZWxpbmUuXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWNvZGVwaXBlbGluZS1waXBlbGluZS1naXRmaWxlcGF0aGZpbHRlcmNyaXRlcmlhLmh0bWxcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVkRmlsZVBhdGhzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBwYXR0ZXJucyBvZiBHaXQgcmVwb3NpdG9yeSBmaWxlIHBhdGhzIHRoYXQsIHdoZW4gYSBjb21taXQgaXMgcHVzaGVkLCBhcmUgdG8gYmUgRVhDTFVERUQgZnJvbSBzdGFydGluZyB0aGUgcGlwZWxpbmUuXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWNvZGVwaXBlbGluZS1waXBlbGluZS1naXRmaWxlcGF0aGZpbHRlcmNyaXRlcmlhLmh0bWxcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVkRmlsZVBhdGhzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgY29tbWFuZCB0byBydW4gdG8gc3ludGggdGhlIGNkayBzdGFjayB3aGljaCBhbHNvIGluc3RhbGxpbmcgdGhlIGNkayBkZXBlbmRlbmNpZXMuIGUuZy4gW1wicG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlXCIsIFwicG5wbSBjZGsgc3ludGhcIl1cbiAgICovXG4gIHJlYWRvbmx5IGNka1N5bnRoQ21kOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgY2RrIG91dHB1dCB3aWxsIGJlIHN0b3JlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgY2RrLm91dFxuICAgKi9cbiAgcmVhZG9ubHkgY2RrT3V0Pzogc3RyaW5nO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgQ29kZUJ1aWxkIHN0ZXAgZHVyaW5nIHRoZSBDREsgc3ludGggcGhhc2UuIEl0IHdpbGwgcGFzc2VkIGFzIHRoZSBgcGFydGlhbEJ1aWxkU3BlY2AgdG8gdGhlIGBDb2RlQnVpbGRTdGVwYC5cbiAgICpcbiAgICogQGRlZmF1bHQgREVGQVVMVF9TWU5USF9TVEVQX1BBUlRJQUxfQlVJTERfU1BFQ1xuICAgKi9cbiAgcmVhZG9ubHkgc3ludGhCdWlsZFNwZWM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIENvZGVCdWlsZCBzdGVwIHRoYXQgcnVucyB1bml0IHRlc3RzIGZvciB0aGUgbWFpbiBhcHBsaWNhdGlvbiBjb2RlLlxuICAgKiBUaGlzIHN0ZXAgd2lsbCBleGVjdXRlIGluIHBhcmFsbGVsIHdpdGgge0BsaW5rIHVuaXRJYWNUZXN0Q29uZmlnfSBhcyBwYXJ0IG9mIHRoZSBzeW50aCBzdGFnZSBkZXBlbmRlbmNpZXMuXG4gICAqIEJvdGggbXVzdCBzdWNjZWVkIGJlZm9yZSB0aGUgc3ludGggc3RlcCBydW5zLlxuICAgKlxuICAgKiBlbnN1cmUgeW91ciBjb21tYW5kIGluY2x1ZGVzICdjZCcgdG8gdGhlIG1haW4gYXBwIGRpcmVjdG9yeSwgYXMgdGhlIGJ1aWxkIGNvbnRleHQgc3RhcnRzIGZyb20gdGhlIHJvb3QuXG4gICAqL1xuICByZWFkb25seSB1bml0QXBwVGVzdENvbmZpZzogQ29kZUJ1aWxkU3RlcFByb3BzO1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIENvZGVCdWlsZCBzdGVwIHRoYXQgcnVucyB1bml0IHRlc3RzIGZvciBJbmZyYXN0cnVjdHVyZS1hcy1Db2RlIChJYUMpIGF0IHRoZSByZXBvc2l0b3J5IHJvb3QuXG4gICAqIFRoaXMgc3RlcCB3aWxsIGV4ZWN1dGUgaW4gcGFyYWxsZWwgd2l0aCB7QGxpbmsgdW5pdEFwcFRlc3RDb25maWd9IGFzIHBhcnQgb2YgdGhlIHN5bnRoIHN0YWdlIGRlcGVuZGVuY2llcy5cbiAgICogQm90aCBtdXN0IHN1Y2NlZWQgYmVmb3JlIHRoZSBzeW50aCBzdGVwIHJ1bnMuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IGNvbW1hbmQgd2lsbCBiZSBmcm9tIHRoZSByb290IG9mIHRoZSByZXBvOiBbXCJucG0gaW5zdGFsbCAtLWdsb2JhbCBjb3JlcGFja0BsYXRlc3RcIiwgXCJjb3JlcGFjayBlbmFibGVcIiwgXCJtYWtlIGluc3RhbGxcIiwgXCJtYWtlIHRlc3RcIl1cbiAgICovXG4gIHJlYWRvbmx5IHVuaXRJYWNUZXN0Q29uZmlnPzogQ29kZUJ1aWxkU3RlcFByb3BzO1xuICAvKipcbiAgICogVGhlIHN0YWdlIGVudmlyb25tZW50IGZvciB0aGUgZGVwbG95bWVudCBzdGFja1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VFbnY/OiBTdGFnZUVudlByb3BzO1xuICAvKipcbiAgICogRW5hYmxlIG5vdGlmaWNhdGlvbiB0byB0aGUgJ2FsZXJ0cy1idWlsZCcgc2xhY2sgY2hhbm5lbC5cbiAgICogQGRlZmF1bHQgVHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlU2xhY2tOb3RpZmljYXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIHBpcGVsaW5lIG5vdGlmaWNhdGlvbiBldmVudHMgdGhhdCB3aWxsIHRyaWdnZXIgYSBTbGFjayBjaGFubmVsIG5vdGlmaWNhdGlvbi5cbiAgICogT25seSBhcHBsaWVzIGlmIGBlbmFibGVTbGFja05vdGlmaWNhdGlvbmAgaXMgc2V0IHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fRkFJTEVEXSDigJNcbiAgICogICBPbmx5IGZhaWxlZCBwaXBlbGluZSBleGVjdXRpb25zIHdpbGwgdHJpZ2dlciBhIG5vdGlmaWNhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkV2ZW50cz86IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmV1c2UgdGhlIGV4aXN0aW5nIGFydGlmYWN0IGJ1Y2tldCBmb3IgY3Jvc3MtZGVwbG95bWVudCBwaXBlbGluZXMuXG4gICAqIElmIHNldCB0byB0cnVlLCBpdCB3aWxsIGxvb2sgdXAgdGhlIGV4aXN0aW5nIGFydGlmYWN0IGJ1Y2tldCBpbiB0aGUgVE9PTENIQUlOIGFjY291bnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJldXNlRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhc3NldHMgZnJvbSB0aGUgQ0RLIGFzc2VtYmx5IHByZS1kZXBsb3ltZW50IHRvIHByZXZlbnQgaGl0dGluZyBDb2RlUGlwZWxpbmUncyAyNTYgTUIgYXJ0aWZhY3Qgc2l6ZSBsaW1pdC5cbiAgICogVXNlZnVsIHdoZW4gQ0RLIGFzc2V0cyAoTGFtYmRhIGNvZGUsIERvY2tlciBpbWFnZXMsIGV0Yy4pIGFyZSBsYXJnZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzk5MTdcbiAgICovXG4gIHJlYWRvbmx5IHN0cmlwQXNzZW1ibHlBc3NldHM/OiBib29sZWFuO1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgZHJpZnQgZGV0ZWN0aW9uIGNoZWNrcyBiZWZvcmUgZGVwbG95bWVudC5cbiAgICogSWYgc3BlY2lmaWVkLCB0aGUgcGlwZWxpbmUgd2lsbCBjaGVjayBmb3IgQ2xvdWRGb3JtYXRpb24gZHJpZnQgYW5kIGZhaWwgaWYgZGV0ZWN0ZWQuXG4gICAqL1xuICByZWFkb25seSBkcmlmdENoZWNrQ29uZmlnPzogRHJpZnRDaGVja0NvbmZpZztcbiAgLyoqXG4gICAqIENvbmZpZ3VyZSB0aGUgYGNhY2hlYCBvcHRpb25zIGZvciBlYWNoIGBDb2RlQnVpbGRTdGVwYC4gVGhpcyB3aWxsIGFsbG93IENvZGVCdWlsZCB0byB1c2VcbiAgICogUzMgY2FjaGluZyB3aXRoIHRoZSBgQ09ERUJVSUxEX0NBQ0hFX0JVQ0tFVGAgYnVja2V0LlxuICAgKlxuICAgKiBUaGUgcGFydGlhbCBidWlsZHNwZWMgbXVzdCBzdGlsbCBjb250YWluIGRlZmluaXRpb25zIGZvciBjYWNoZSBwYXRocyBhbmQga2V5cyBpZiB1c2VkLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2RlYnVpbGQvbGF0ZXN0L3VzZXJndWlkZS9idWlsZC1zcGVjLXJlZi5odG1sI2J1aWxkLXNwZWMuY2FjaGVcbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlT3B0aW9ucz86IENhY2hlT3B0aW9ucztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBhbiBTMyBjYWNoZSB0byB1c2UgYWNyb3NzIGJ1aWxkIHN0ZXBzLiBJZiBzcGVjaWZpZWQsIHRoZSBidWNrZXQgdW5kZXJcbiAqIGBDT0RFQlVJTERfQ0FDSEVfQlVDS0VUYCB3aWxsIGJlIHVzZWQgZm9yIGNhY2hpbmcuIFRoaXMgYnVja2V0IGlzIG1hbmFnZWQgYnkgdGhlIHNoYXJlZC1yZXNvdXJjZXNcbiAqIHNlcnZpY2UuXG4gKlxuICogVGhlIHBhcnRpYWwgYnVpbGRzcGVjIG11c3Qgc3RpbGwgY29udGFpbiBkZWZpbml0aW9ucyBmb3IgcGF0aHMgYW5kIGtleXMgaWYgdXNlZC5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZGVidWlsZC9sYXRlc3QvdXNlcmd1aWRlL2J1aWxkLXNwZWMtcmVmLmh0bWwjYnVpbGQtc3BlYy5jYWNoZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBuYW1lc3BhY2UgZm9yIHRoZSBjYWNoZS4gVGhpcyBvcHRpb24gaXMgcmVxdWlyZWQgYmVjYXVzZSB0aGUgY2FjaGUgYnVja2V0IGlzIHNoYXJlZCBhY3Jvc3NcbiAgICogYWxsIHByb2plY3RzIHNvIGEgbmFtZXNwYWNlIGlzIHJlcXVpcmVkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBjYWNoZS4gVXNlIHRoZSBwcm9qZWN0IG5hbWUsIGUuZy4gYGZpbGVtYW5hZ2VyYC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWVzcGFjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgQ0RLIGNvbnN0cnVjdCB0aGF0IGNyZWF0ZXMgYSBkZXBsb3ltZW50IHBpcGVsaW5lIGFjcm9zcyBlbnZpcm9ubWVudHMgZm9yIHRoZSBPcmNhQnVzIHByb2plY3QuXG4gKlxuICogUHJlcmVxdWlzaXRlOiBFbnN1cmUgdGhhdCB0aGUgXCJDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldFwiIHN0YWNrIGlzIGRlcGxveWVkIGluIHRoZSBUT09MQ0hBSU4gYWNjb3VudFxuICogYmVmb3JlIHVzaW5nIHRoaXMgY29uc3RydWN0LlxuICovXG5leHBvcnQgY2xhc3MgRGVwbG95bWVudFN0YWNrUGlwZWxpbmUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIGNvZGUgcGlwZWxpbmUgY29uc3RydWN0IHRoYXQgaXMgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lOiBQaXBlbGluZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IERlcGxveW1lbnRTdGFja1BpcGVsaW5lUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBjb2RlU3RhckFybiA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHRoaXMsXG4gICAgICBcImNvZGVzdGFyX2dpdGh1Yl9hcm5cIixcbiAgICApO1xuICAgIGNvbnN0IGNvZGVTdGFyU291cmNlQWN0aW9uTmFtZSA9IFwicGlwZWxpbmUtc3JjXCI7XG4gICAgY29uc3Qgc291cmNlRmlsZSA9IENvZGVQaXBlbGluZVNvdXJjZS5jb25uZWN0aW9uKFxuICAgICAgYE9yY2FCdXMvJHtwcm9wcy5naXRodWJSZXBvfWAsXG4gICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3Rpb25Bcm46IGNvZGVTdGFyQXJuLFxuICAgICAgICBhY3Rpb25OYW1lOiBjb2RlU3RhclNvdXJjZUFjdGlvbk5hbWUsXG4gICAgICAgIHRyaWdnZXJPblB1c2g6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBpc1JldXNpbmdFeGlzdGluZ0FydGlmYWN0QnVja2V0ID1cbiAgICAgIHByb3BzLnJldXNlRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldCA/PyB0cnVlO1xuICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gaXNSZXVzaW5nRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldFxuICAgICAgPyBDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldC5mcm9tTG9va3VwKHRoaXMpLmFydGlmYWN0QnVja2V0XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRoaXMucGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUodGhpcywgXCJEZXBsb3ltZW50Q29kZVBpcGVsaW5lXCIsIHtcbiAgICAgIGFydGlmYWN0QnVja2V0OiBhcnRpZmFjdEJ1Y2tldCxcbiAgICAgIHBpcGVsaW5lVHlwZTogUGlwZWxpbmVUeXBlLlYyLFxuICAgICAgcGlwZWxpbmVOYW1lOiBwcm9wcy5waXBlbGluZU5hbWUsXG4gICAgICBjcm9zc0FjY291bnRLZXlzOiB0cnVlLFxuICAgICAgLy8gZW5hYmxlIHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZVxuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzU3MDE3NzYvdXBkYXRlcGlwZWxpbmUtc3RhZ2UtaW4tY2RrLXBpcGVsaW5lLWlzLWNhbmNlbGxlZFxuICAgICAgcmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmluY2x1ZGVkRmlsZVBhdGhzIHx8IHByb3BzLmV4Y2x1ZGVkRmlsZVBhdGhzKSB7XG4gICAgICBjb25zdCBmaWxlUGF0aHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXG4gICAgICBpZiAocHJvcHMuaW5jbHVkZWRGaWxlUGF0aHMpIHtcbiAgICAgICAgZmlsZVBhdGhzW1wiSW5jbHVkZXNcIl0gPSBwcm9wcy5pbmNsdWRlZEZpbGVQYXRocztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5leGNsdWRlZEZpbGVQYXRocykge1xuICAgICAgICBmaWxlUGF0aHNbXCJFeGNsdWRlc1wiXSA9IHByb3BzLmV4Y2x1ZGVkRmlsZVBhdGhzO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgZXZlbnQgZmlsdGVyIHRvIG9ubHkgdHJpZ2dlciBpZiB0aGUgcHVzaCBldmVudCBpcyBmcm9tIGBkZXBsb3lgIGRpcmVjdG9yeVxuICAgICAgY29uc3QgY2ZuUGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblBpcGVsaW5lO1xuICAgICAgY2ZuUGlwZWxpbmUuYWRkUHJvcGVydHlPdmVycmlkZShcIlRyaWdnZXJzXCIsIFtcbiAgICAgICAge1xuICAgICAgICAgIEdpdENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIFB1c2g6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEJyYW5jaGVzOiB7XG4gICAgICAgICAgICAgICAgICBJbmNsdWRlczogW3Byb3BzLmdpdGh1YkJyYW5jaF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBGaWxlUGF0aHM6IGZpbGVQYXRocyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBTb3VyY2VBY3Rpb25OYW1lOiBjb2RlU3RhclNvdXJjZUFjdGlvbk5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBQcm92aWRlclR5cGU6IFwiQ29kZVN0YXJTb3VyY2VDb25uZWN0aW9uXCIsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICBsZXQgY2FjaGVCdWNrZXQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGNhY2hlT3B0aW9uczogQnVja2V0Q2FjaGVPcHRpb25zIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5jYWNoZU9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2FjaGVCdWNrZXQgPSBDb2RlQnVpbGRDYWNoZUJ1Y2tldC5mcm9tTG9va3VwKHRoaXMpLmNhY2hlQnVja2V0O1xuICAgICAgY2FjaGVPcHRpb25zID0geyBjYWNoZU5hbWVzcGFjZTogcHJvcHMuY2FjaGVPcHRpb25zLm5hbWVzcGFjZSB9XG4gICAgfVxuXG5cbiAgICAvLyBBZGQgdW5pdCB0ZXN0IGZvciBJYUMgYXQgdGhlIHJvb3Qgb2YgdGhlXG4gICAgY29uc3Qge1xuICAgICAgY29tbWFuZDogdW5pdElhY1Rlc3RDb21tYW5kID0gW1xuICAgICAgICBcIm5wbSBpbnN0YWxsIC0tZ2xvYmFsIGNvcmVwYWNrQGxhdGVzdFwiLFxuICAgICAgICBcImNvcmVwYWNrIGVuYWJsZVwiLFxuICAgICAgICBcInBucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZSAtLWlnbm9yZS1zY3JpcHRzXCIsXG4gICAgICAgIFwicG5wbSB0ZXN0XCIsXG4gICAgICBdLFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogdW5pdElhY1BhcnRpYWxCdWlsZFNwZWMgPSB7XG4gICAgICAgIHBoYXNlczoge1xuICAgICAgICAgIGluc3RhbGw6IHtcbiAgICAgICAgICAgIFwicnVudGltZS12ZXJzaW9uc1wiOiB7XG4gICAgICAgICAgICAgIG5vZGVqczogXCIyMlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB2ZXJzaW9uOiBcIjAuMlwiLFxuICAgICAgfSxcbiAgICB9ID0gcHJvcHMudW5pdElhY1Rlc3RDb25maWcgfHwge307XG4gICAgY29uc3QgdW5pdElhY1Rlc3QgPSBuZXcgQ29kZUJ1aWxkU3RlcChcIlVuaXRJYWNUZXN0XCIsIHtcbiAgICAgIGNvbW1hbmRzOiB1bml0SWFjVGVzdENvbW1hbmQsXG4gICAgICBpbnB1dDogc291cmNlRmlsZSxcbiAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgcHJpdmlsZWdlZDogdHJ1ZSxcbiAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLkxBUkdFLFxuICAgICAgICBidWlsZEltYWdlOiBMaW51eEFybUJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzJfU1RBTkRBUkRfM18wLFxuICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczoge1xuICAgICAgICAgIE5PREVfT1BUSU9OUzoge1xuICAgICAgICAgICAgdmFsdWU6IFwiLS1tYXgtb2xkLXNwYWNlLXNpemU9ODE5MlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogdW5pdElhY1BhcnRpYWxCdWlsZFNwZWNcbiAgICAgICAgPyBCdWlsZFNwZWMuZnJvbU9iamVjdCh1bml0SWFjUGFydGlhbEJ1aWxkU3BlYylcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBjYWNoZTogY2FjaGVCdWNrZXQgPyBDYWNoZS5idWNrZXQoY2FjaGVCdWNrZXQsIGNhY2hlT3B0aW9ucykgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICAvLyBBZGRpbmcgdW5pdCB0ZXN0IGZvciB0aGUgbWFpbiBhcHBcbiAgICBjb25zdCB7XG4gICAgICBjb21tYW5kOiB1bml0QXBwVGVzdENvbW1hbmQsXG4gICAgICBwYXJ0aWFsQnVpbGRTcGVjOiB1bml0QXBwUGFydGlhbEJ1aWxkU3BlYyA9IHVuZGVmaW5lZCxcbiAgICB9ID0gcHJvcHMudW5pdEFwcFRlc3RDb25maWc7XG4gICAgY29uc3QgdW5pdEFwcFRlc3QgPSBuZXcgQ29kZUJ1aWxkU3RlcChcIlVuaXRBcHBUZXN0XCIsIHtcbiAgICAgIGNvbW1hbmRzOiB1bml0QXBwVGVzdENvbW1hbmQsXG4gICAgICBpbnB1dDogc291cmNlRmlsZSxcbiAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgcHJpdmlsZWdlZDogdHJ1ZSxcbiAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLkxBUkdFLFxuICAgICAgICBidWlsZEltYWdlOiBMaW51eEFybUJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzJfU1RBTkRBUkRfM18wLFxuICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczoge1xuICAgICAgICAgIE5PREVfT1BUSU9OUzoge1xuICAgICAgICAgICAgdmFsdWU6IFwiLS1tYXgtb2xkLXNwYWNlLXNpemU9ODE5MlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogdW5pdEFwcFBhcnRpYWxCdWlsZFNwZWNcbiAgICAgICAgPyBCdWlsZFNwZWMuZnJvbU9iamVjdCh1bml0QXBwUGFydGlhbEJ1aWxkU3BlYylcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBjYWNoZTogY2FjaGVCdWNrZXQgPyBDYWNoZS5idWNrZXQoY2FjaGVCdWNrZXQsIGNhY2hlT3B0aW9ucykgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IHN5bnRoQnVpbGRTcGVjID0gREVGQVVMVF9TWU5USF9TVEVQX1BBUlRJQUxfQlVJTERfU1BFQyB9ID0gcHJvcHM7XG4gICAgY29uc3Qgc3ludGhTdGVwID0gbmV3IENvZGVCdWlsZFN0ZXAoXCJDZGtTeW50aFwiLCB7XG4gICAgICBpbnN0YWxsQ29tbWFuZHM6IFtcbiAgICAgICAgXCJub2RlIC12XCIsXG4gICAgICAgIFwibnBtIGluc3RhbGwgLS1nbG9iYWwgY29yZXBhY2tAbGF0ZXN0XCIsXG4gICAgICAgIFwiY29yZXBhY2sgLS12ZXJzaW9uXCIsXG4gICAgICAgIFwiY29yZXBhY2sgZW5hYmxlXCIsXG4gICAgICBdLFxuICAgICAgY29tbWFuZHM6IHByb3BzLmNka1N5bnRoQ21kLFxuICAgICAgaW5wdXQ6IHNvdXJjZUZpbGUsXG4gICAgICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiBwcm9wcy5jZGtPdXQgfHwgXCJjZGsub3V0XCIsXG4gICAgICBwYXJ0aWFsQnVpbGRTcGVjOiBCdWlsZFNwZWMuZnJvbU9iamVjdChzeW50aEJ1aWxkU3BlYyksXG4gICAgICBjYWNoZTogY2FjaGVCdWNrZXQgPyBDYWNoZS5idWNrZXQoY2FjaGVCdWNrZXQsIGNhY2hlT3B0aW9ucykgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgc3ludGhTdGVwLmFkZFN0ZXBEZXBlbmRlbmN5KHVuaXRJYWNUZXN0KTtcbiAgICBzeW50aFN0ZXAuYWRkU3RlcERlcGVuZGVuY3kodW5pdEFwcFRlc3QpO1xuXG4gICAgY29uc3QgY2RrUGlwZWxpbmUgPSBuZXcgQ29kZVBpcGVsaW5lKHRoaXMsIFwiQ0RLQ29kZVBpcGVsaW5lXCIsIHtcbiAgICAgIGNvZGVQaXBlbGluZTogdGhpcy5waXBlbGluZSxcbiAgICAgIHN5bnRoOiBzeW50aFN0ZXAsXG4gICAgICBzZWxmTXV0YXRpb246IHRydWUsXG4gICAgICBjb2RlQnVpbGREZWZhdWx0czoge1xuICAgICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLkxBUkdFLFxuICAgICAgICAgIGJ1aWxkSW1hZ2U6IExpbnV4QXJtQnVpbGRJbWFnZS5BTUFaT05fTElOVVhfMl9TVEFOREFSRF8zXzAsXG4gICAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgICAgIE5PREVfT1BUSU9OUzoge1xuICAgICAgICAgICAgICB2YWx1ZTogXCItLW1heC1vbGQtc3BhY2Utc2l6ZT04MTkyXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVmYXVsdFN0YWdlRW52OiBTdGFnZUVudlByb3BzID0ge1xuICAgICAgYmV0YTogQkVUQV9FTlZJUk9OTUVOVCxcbiAgICAgIGdhbW1hOiBHQU1NQV9FTlZJUk9OTUVOVCxcbiAgICAgIHByb2Q6IFBST0RfRU5WSVJPTk1FTlQsXG4gICAgfTtcbiAgICBjb25zdCBzdGFnZUVudiA9IHByb3BzLnN0YWdlRW52IHx8IGRlZmF1bHRTdGFnZUVudjtcblxuICAgIC8vIEFmdGVyIGFzc2V0cyBhcmUgcHVibGlzaGVkLCB0aGV5IGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIGFzc2VtYmx5IGRpcmVjdG9yeVxuICAgIC8vIHRvIGhlbHAgcHJldmVudCBoaXR0aW5nIHRoZSBDb2RlUGlwZWxpbmUgYXJ0aWZhY3QgbGltaXQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy85OTE3XG4gICAgbGV0IHN0cmlwQXNzZXRzRnJvbUFzc2VtYmx5OiBDb2RlQnVpbGRTdGVwIHwgdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5zdHJpcEFzc2VtYmx5QXNzZXRzKSB7XG4gICAgICBzdHJpcEFzc2V0c0Zyb21Bc3NlbWJseSA9IG5ldyBDb2RlQnVpbGRTdGVwKFwiU3RyaXBBc3NldHNGcm9tQXNzZW1ibHlcIiwge1xuICAgICAgICBpbnB1dDogY2RrUGlwZWxpbmUuY2xvdWRBc3NlbWJseUZpbGVTZXQsXG4gICAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICAgJ1MzX1BBVEg9JHtDT0RFQlVJTERfU09VUkNFX1ZFUlNJT04jXCJhcm46YXdzOnMzOjo6XCJ9JyxcbiAgICAgICAgICBcIlpJUF9BUkNISVZFPSQoYmFzZW5hbWUgJFMzX1BBVEgpXCIsXG4gICAgICAgICAgXCJlY2hvICRTM19QQVRIXCIsXG4gICAgICAgICAgXCJlY2hvICRaSVBfQVJDSElWRVwiLFxuICAgICAgICAgIFwibHNcIixcbiAgICAgICAgICBcInJtIC1yZnYgYXNzZXQuKlwiLFxuICAgICAgICAgIFwiemlwIC1yIC1xIC1BICRaSVBfQVJDSElWRSAqXCIsXG4gICAgICAgICAgXCJsc1wiLFxuICAgICAgICAgIFwiYXdzIHMzIGNwICRaSVBfQVJDSElWRSBzMzovLyRTM19QQVRIXCIsXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgY2RrUGlwZWxpbmUuYWRkV2F2ZShcIkJlZm9yZVN0YWdlRGVwbG95bWVudFwiLCB7XG4gICAgICAgIHByZTogW3N0cmlwQXNzZXRzRnJvbUFzc2VtYmx5XSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENvbnN0cnVjdCBmdW5jdGlvbiB0byBnZXQgU3RhY2tJZCBmb3IgZHJpZnQgY2hlY2tcbiAgICBjb25zdCByb290U3RhY2tOYW1lID0gU3RhY2sub2YodGhpcykuc3RhY2tOYW1lO1xuICAgIGNvbnN0IGNvbnN0cnVjdElkID0gdGhpcy5ub2RlLmlkO1xuICAgIGNvbnN0IGdldFN0YWNrSWQgPSAoZW52TmFtZTogc3RyaW5nKSA9PlxuICAgICAgYCR7cm9vdFN0YWNrTmFtZX0vJHtjb25zdHJ1Y3RJZH0vJHtlbnZOYW1lfS8ke3Byb3BzLnN0YWNrTmFtZX1gO1xuXG4gICAgLy8gRHJpZnQgY2hlY2sgY29uZmlnXG4gICAgY29uc3QgaXNEcmlmdENoZWNrU3RlcCA9ICEhcHJvcHMuZHJpZnRDaGVja0NvbmZpZztcbiAgICBjb25zdCBjZGtJbnN0YWxsQ21kID1cbiAgICAgIHByb3BzLmRyaWZ0Q2hlY2tDb25maWc/Lmluc3RhbGxDb21tYW5kID8/XG4gICAgICBcInBucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZSAtLWlnbm9yZS1zY3JpcHRzXCI7XG4gICAgY29uc3QgY2RrUnVuQ21kID0gcHJvcHMuZHJpZnRDaGVja0NvbmZpZz8uY2RrQ29tbWFuZCA/PyBgYDtcblxuICAgIGNvbnN0IGJldGFFbnZOYW1lID0gXCJPcmNhQnVzQmV0YVwiO1xuICAgIGNka1BpcGVsaW5lLmFkZFN0YWdlKFxuICAgICAgbmV3IERlcGxveW1lbnRTdGFnZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYmV0YUVudk5hbWUsXG4gICAgICAgIHN0YWdlRW52LmJldGEsXG4gICAgICAgIHByb3BzLnN0YWNrTmFtZSxcbiAgICAgICAgcHJvcHMuc3RhY2ssXG4gICAgICAgIHByb3BzLnN0YWNrQ29uZmlnLmJldGEsXG4gICAgICAgIHByb3BzLmdpdGh1YlJlcG8sXG4gICAgICAgIHByb3BzLmdpdGh1YkJyYW5jaCxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIHByZTogaXNEcmlmdENoZWNrU3RlcFxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBuZXcgRmFpbE9uRHJpZnRCdWlsZFN0ZXAoXCJEcmlmdE9uRmFpbEJldGFDaGVja1wiLCB7XG4gICAgICAgICAgICAgICAgYWNjb3VudEVudjogc3RhZ2VFbnYuYmV0YSxcbiAgICAgICAgICAgICAgICBzdGFja0lkOiBnZXRTdGFja0lkKGJldGFFbnZOYW1lKSxcbiAgICAgICAgICAgICAgICBjZGtDb21tYW5kOiBjZGtSdW5DbWQsXG4gICAgICAgICAgICAgICAgaW5zdGFsbENvbW1hbmQ6IGNka0luc3RhbGxDbWQsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogR0FNTUFcbiAgICAgKi9cbiAgICBjb25zdCBnYW1tYUVudk5hbWUgPSBcIk9yY2FCdXNHYW1tYVwiO1xuXG4gICAgY2RrUGlwZWxpbmUuYWRkU3RhZ2UoXG4gICAgICBuZXcgRGVwbG95bWVudFN0YWdlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBnYW1tYUVudk5hbWUsXG4gICAgICAgIHN0YWdlRW52LmdhbW1hLFxuICAgICAgICBwcm9wcy5zdGFja05hbWUsXG4gICAgICAgIHByb3BzLnN0YWNrLFxuICAgICAgICBwcm9wcy5zdGFja0NvbmZpZy5nYW1tYSxcbiAgICAgICAgcHJvcHMuZ2l0aHViUmVwbyxcbiAgICAgICAgcHJvcHMuZ2l0aHViQnJhbmNoLFxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgcHJlOiBpc0RyaWZ0Q2hlY2tTdGVwXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIG5ldyBGYWlsT25EcmlmdEJ1aWxkU3RlcChcIkRyaWZ0T25GYWlsR2FtbWFDaGVja1wiLCB7XG4gICAgICAgICAgICAgICAgYWNjb3VudEVudjogc3RhZ2VFbnYuZ2FtbWEsXG4gICAgICAgICAgICAgICAgc3RhY2tJZDogZ2V0U3RhY2tJZChnYW1tYUVudk5hbWUpLFxuICAgICAgICAgICAgICAgIGNka0NvbW1hbmQ6IGNka1J1bkNtZCxcbiAgICAgICAgICAgICAgICBpbnN0YWxsQ29tbWFuZDogY2RrSW5zdGFsbENtZCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIHBvc3Q6IFtcbiAgICAgICAgICBuZXcgTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwKFwiUHJvbW90ZVRvUHJvZFwiLCB7XG4gICAgICAgICAgICBhY3Rpb25OYW1lOiBcIlByb21vdGVUb1Byb2RcIixcbiAgICAgICAgICAgIC8vIEN1c3RvbSBzdGVwcyBieXBhc3Mgc3RhZ2UgcHJlL3Bvc3Qgb3JkZXJpbmcsIHNvIHJ1bk9yZGVyIG11c3QgYmUgZXhwbGljaXRseSBzZXQuXG4gICAgICAgICAgICAvLyBTZXQgdG8gNSB0byBlbnN1cmUgdGhpcyBydW5zIGFmdGVyIGFsbCBPcmNhQnVzR2FtbWEgc3RhZ2Ugc3RlcHMgY29tcGxldGUuXG4gICAgICAgICAgICAvLyAoR2FtbWEgZGVwbG95bWVudCB0eXBpY2FsbHkgdXNlcyAyIHN0ZXBzLCBzbyA1IHByb3ZpZGVzIGFkZXF1YXRlIGJ1ZmZlcilcbiAgICAgICAgICAgIHJ1bk9yZGVyOiA1LFxuICAgICAgICAgICAgLy8gNjAtbWludXRlIHRpbWVvdXQgYWxsb3dzIHF1ZXVlZCBwaXBlbGluZSBleGVjdXRpb25zIHRvIHByb2NlZWQgaWYgYXBwcm92YWwgZXhwaXJlc1xuICAgICAgICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcyg2MCksXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBQUk9EXG4gICAgICovXG4gICAgY29uc3QgcHJvZEVudk5hbWUgPSBcIk9yY2FCdXNQcm9kXCI7XG5cbiAgICBjZGtQaXBlbGluZS5hZGRTdGFnZShcbiAgICAgIG5ldyBEZXBsb3ltZW50U3RhZ2UoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHByb2RFbnZOYW1lLFxuICAgICAgICBzdGFnZUVudi5wcm9kLFxuICAgICAgICBwcm9wcy5zdGFja05hbWUsXG4gICAgICAgIHByb3BzLnN0YWNrLFxuICAgICAgICBwcm9wcy5zdGFja0NvbmZpZy5wcm9kLFxuICAgICAgICBwcm9wcy5naXRodWJSZXBvLFxuICAgICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBwcmU6IGlzRHJpZnRDaGVja1N0ZXBcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgbmV3IEZhaWxPbkRyaWZ0QnVpbGRTdGVwKFwiRHJpZnRPbkZhaWxQcm9kQ2hlY2tcIiwge1xuICAgICAgICAgICAgICAgIGFjY291bnRFbnY6IHN0YWdlRW52LnByb2QsXG4gICAgICAgICAgICAgICAgc3RhY2tJZDogZ2V0U3RhY2tJZChwcm9kRW52TmFtZSksXG4gICAgICAgICAgICAgICAgY2RrQ29tbWFuZDogY2RrUnVuQ21kLFxuICAgICAgICAgICAgICAgIGluc3RhbGxDb21tYW5kOiBjZGtJbnN0YWxsQ21kLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNka1BpcGVsaW5lLmJ1aWxkUGlwZWxpbmUoKTtcblxuICAgIGlmIChzdHJpcEFzc2V0c0Zyb21Bc3NlbWJseSkge1xuICAgICAgY2RrUGlwZWxpbmUucGlwZWxpbmUuYXJ0aWZhY3RCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoXG4gICAgICAgIHN0cmlwQXNzZXRzRnJvbUFzc2VtYmx5LnByb2plY3QsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5lbmFibGVTbGFja05vdGlmaWNhdGlvbiA/PyB0cnVlKSB7XG4gICAgICBjb25zdCBhbGVydHNCdWlsZFNsYWNrQ29uZmlnQXJuID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIi9jaGF0Ym90X2Fybi9zbGFjay9hbGVydHMtYnVpbGRcIixcbiAgICAgICk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBTbGFja0NoYW5uZWxDb25maWd1cmF0aW9uLmZyb21TbGFja0NoYW5uZWxDb25maWd1cmF0aW9uQXJuKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIlNsYWNrQ2hhbm5lbENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgYWxlcnRzQnVpbGRTbGFja0NvbmZpZ0FybixcbiAgICAgICk7XG5cbiAgICAgIHRoaXMucGlwZWxpbmUubm90aWZ5T24oXCJQaXBlbGluZVNsYWNrTm90aWZpY2F0aW9uXCIsIHRhcmdldCwge1xuICAgICAgICBldmVudHM6IHByb3BzLm5vdGlmaWNhdGlvbkV2ZW50cyB8fCBbXG4gICAgICAgICAgUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX0ZBSUxFRCxcbiAgICAgICAgXSxcbiAgICAgICAgZGV0YWlsVHlwZTogRGV0YWlsVHlwZS5GVUxMLFxuICAgICAgICBub3RpZmljYXRpb25SdWxlTmFtZTogYE9yY2FCdXMtJHtwcm9wcy5waXBlbGluZU5hbWV9YCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIE1hbnVhbEFwcHJvdmFsQWN0aW9uU3RlcCB3aXRoIHJlcXVpcmVkIHJ1bk9yZGVyLlxuICovXG5pbnRlcmZhY2UgTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwUHJvcHMgZXh0ZW5kcyBNYW51YWxBcHByb3ZhbEFjdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBydW4gb3JkZXIgZm9yIHRoaXMgYWN0aW9uIGluIHRoZSBwaXBlbGluZSBzdGFnZS4gVGhlIHN0YWdlIFByZS9Qb3N0IG9yZGVyIGRvZXMgbm90IGFwcGx5IHRvIHRoaXMgY3VzdG9tXG4gICAqIHN0ZXAvYWN0aW9uLCB5b3UgbmVlZCB0byBleHBsaWNpdGx5IHNldCB0aGUgcnVuT3JkZXIuXG4gICAqL1xuICBydW5PcmRlcjogbnVtYmVyO1xufVxuLyoqXG4gKiBDdXN0b20gbWFudWFsIGFwcHJvdmFsIHN0ZXAgZm9yIENESyBDb2RlUGlwZWxpbmUuXG4gKlxuICogVGhpcyBjbGFzcyBicmlkZ2VzIHRoZSBnYXAgdG8gZW5hYmxlIHVzaW5nIE1hbnVhbEFwcHJvdmFsQWN0aW9uIHdpdGhpbiBhIFN0ZXAgY2xhc3MsXG4gKiBtYWtpbmcgaXQgY29tcGF0aWJsZSB3aXRoIGNkay5waXBlbGluZXMgY29uc3RydWN0cy5cbiAqXG4gKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzdGVwLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcHJvcGVydGllcyBmb3IgdGhlIG1hbnVhbCBhcHByb3ZhbCBhY3Rpb24sIGluY2x1ZGluZ1xuICovXG5jbGFzcyBNYW51YWxBcHByb3ZhbEFjdGlvblN0ZXBcbiAgZXh0ZW5kcyBTdGVwXG4gIGltcGxlbWVudHMgSUNvZGVQaXBlbGluZUFjdGlvbkZhY3RvcnlcbntcbiAgcHJpdmF0ZSByZWFkb25seSBtYW51YWxBcHByb3ZhbEFjdGlvblByb3BzOiBNYW51YWxBcHByb3ZhbEFjdGlvblN0ZXBQcm9wcztcbiAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgb3B0aW9uczogTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwUHJvcHMpIHtcbiAgICBzdXBlcihpZCk7XG4gICAgdGhpcy5tYW51YWxBcHByb3ZhbEFjdGlvblByb3BzID0gb3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBwcm9kdWNlQWN0aW9uKFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgb3B0aW9uczogUHJvZHVjZUFjdGlvbk9wdGlvbnMsXG4gICk6IENvZGVQaXBlbGluZUFjdGlvbkZhY3RvcnlSZXN1bHQge1xuICAgIHN0YWdlLmFkZEFjdGlvbihuZXcgTWFudWFsQXBwcm92YWxBY3Rpb24odGhpcy5tYW51YWxBcHByb3ZhbEFjdGlvblByb3BzKSk7XG5cbiAgICByZXR1cm4geyBydW5PcmRlcnNDb25zdW1lZDogMSB9O1xuICB9XG59XG5cbmNsYXNzIERlcGxveW1lbnRTdGFnZSBleHRlbmRzIFN0YWdlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBlbnZpcm9ubWVudE5hbWU6IHN0cmluZyxcbiAgICBlbnY6IEVudmlyb25tZW50LFxuICAgIHN0YWNrTmFtZTogc3RyaW5nLFxuICAgIHN0YWNrQ2xhc3M6IG5ldyAoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IGFueSkgPT4gU3RhY2ssXG4gICAgYXBwU3RhY2tQcm9wczogYW55LFxuICAgIGdpdGh1YlJlcG86IHN0cmluZyxcbiAgICBnaXRodWJCcmFuY2g/OiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBlbnZpcm9ubWVudE5hbWUsIHsgZW52OiBlbnYgfSk7XG5cbiAgICBsZXQgc291cmNlID0gYGh0dHBzOi8vZ2l0aHViLmNvbS9PcmNhQnVzLyR7Z2l0aHViUmVwb31gO1xuICAgIGlmIChnaXRodWJCcmFuY2ggIT09IHVuZGVmaW5lZCAmJiBnaXRodWJCcmFuY2ggIT09IFwibWFpblwiKSB7XG4gICAgICBzb3VyY2UgPSBgJHtzb3VyY2V9L3RyZWUvJHtnaXRodWJCcmFuY2h9YDtcbiAgICB9XG5cbiAgICBuZXcgc3RhY2tDbGFzcyh0aGlzLCBzdGFja05hbWUsIHtcbiAgICAgIGVudjogZW52LFxuICAgICAgdGFnczoge1xuICAgICAgICBcInVtY2NyLW9yZzpQcm9kdWN0XCI6IFwiT3JjYUJ1c1wiLFxuICAgICAgICBcInVtY2NyLW9yZzpDcmVhdG9yXCI6IFwiQ0RLXCIsXG4gICAgICAgIFwidW1jY3Itb3JnOlNlcnZpY2VcIjogc3RhY2tOYW1lLFxuICAgICAgICBcInVtY2NyLW9yZzpTb3VyY2VcIjogc291cmNlLFxuICAgICAgfSxcbiAgICAgIC4uLmFwcFN0YWNrUHJvcHMsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBGYWlsT25EcmlmdEJ1aWxkU3RlcFByb3BzIHtcbiAgLyoqXG4gICAqIEFXUyBhY2NvdW50IGFuZCByZWdpb24gd2hlcmUgdGhlIGRyaWZ0IGNoZWNrIHJ1bnMuXG4gICAqIFVzZWQgdG8gYXNzdW1lIHRoZSBDREsgbG9va3VwIHJvbGUgYW5kIHNldCBBV1NfREVGQVVMVF9SRUdJT04uXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50RW52OiBFbnZpcm9ubWVudDtcbiAgLyoqXG4gICAqIEZ1bGx5IHF1YWxpZmllZCBDREsgc3RhY2sgSUQgdG8gY2hlY2sgZm9yIGRyaWZ0LlxuICAgKlxuICAgKiBGb3JtYXQ6IGA8cm9vdFN0YWNrPi88Y29uc3RydWN0SWQ+LzxlbnZOYW1lPi88c3RhY2tOYW1lPmBcbiAgICpcbiAgICogRXhhbXBsZTogYERldlN0YWNrL0RlcGxveW1lbnRQaXBlbGluZS9PcmNhQnVzQmV0YS9UZXN0U3RhY2tgXG4gICAqL1xuICByZWFkb25seSBzdGFja0lkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDREsgQ0xJIGVudHJ5cG9pbnQgdXNlZCB0byBydW4gdGhlIGRyaWZ0IGNvbW1hbmQuXG4gICAqIEV4YW1wbGVzOiBcInBucG0gY2RrXCIsIFwicG5wbSBjZGstc3RhdGVmdWxcIiwgXCJwbnBtIGNkay1zdGF0ZWxlc3NcIi5cbiAgICogTXVzdCBzdXBwb3J0OiBcImRyaWZ0IDxzdGFja0lkPlwiLlxuICAgKi9cbiAgcmVhZG9ubHkgY2RrQ29tbWFuZDogc3RyaW5nO1xuICAvKipcbiAgICogQ29tbWFuZCB0byBpbnN0YWxsIGRlcGVuZGVuY2llcyBiZWZvcmUgcnVubmluZyBDREsuXG4gICAqIElmIHlvdXIgYXBwIGlzIGluIGEgc3ViZGlyZWN0b3J5LCBwcmVmaXggd2l0aCBcImNkIDxkaXI+ICYmXCIuXG4gICAqIEV4YW1wbGU6IFwiY2QgZGV2ICYmIHBucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZSAtLWlnbm9yZS1zY3JpcHRzXCJcbiAgICpcbiAgICogRGVmYXVsdDogXCJwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1pZ25vcmUtc2NyaXB0c1wiXG4gICAqL1xuICByZWFkb25seSBpbnN0YWxsQ29tbWFuZD86IHN0cmluZztcbn1cblxuY2xhc3MgRmFpbE9uRHJpZnRCdWlsZFN0ZXAgZXh0ZW5kcyBDb2RlQnVpbGRTdGVwIHtcbiAgY29uc3RydWN0b3IoXG4gICAgaWQ6IHN0cmluZyxcbiAgICB7XG4gICAgICBhY2NvdW50RW52LFxuICAgICAgc3RhY2tJZCxcbiAgICAgIGNka0NvbW1hbmQsXG4gICAgICBpbnN0YWxsQ29tbWFuZCxcbiAgICB9OiBGYWlsT25EcmlmdEJ1aWxkU3RlcFByb3BzLFxuICApIHtcbiAgICBjb25zdCBjZGtJbnN0YWxsID0gaW5zdGFsbENvbW1hbmRcbiAgICAgID8gaW5zdGFsbENvbW1hbmRcbiAgICAgIDogXCJwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1pZ25vcmUtc2NyaXB0c1wiO1xuXG4gICAgc3VwZXIoaWQsIHtcbiAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgIFwibm9kZSAtdlwiLFxuICAgICAgICBcIm5wbSBpbnN0YWxsIC0tZ2xvYmFsIGNvcmVwYWNrQGxhdGVzdFwiLFxuICAgICAgICBcImNvcmVwYWNrIC0tdmVyc2lvblwiLFxuICAgICAgICBcImNvcmVwYWNrIGVuYWJsZVwiLFxuICAgICAgICBjZGtJbnN0YWxsLFxuXG4gICAgICAgIGBMT09LVVBfUk9MRV9BUk49XCJhcm46YXdzOmlhbTo6JHthY2NvdW50RW52LmFjY291bnR9OnJvbGUvY2RrLWhuYjY1OWZkcy1sb29rdXAtcm9sZS0ke2FjY291bnRFbnYuYWNjb3VudH0tJHthY2NvdW50RW52LnJlZ2lvbn1cImAsXG4gICAgICAgICdTRVNTSU9OX05BTUU9XCJkcmlmdC1jaGVja1wiJyxcbiAgICAgICAgJ3JlYWQgQVdTX0FDQ0VTU19LRVlfSUQgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZIEFXU19TRVNTSU9OX1RPS0VOIDwgPChhd3Mgc3RzIGFzc3VtZS1yb2xlIC0tcm9sZS1hcm4gXCIkTE9PS1VQX1JPTEVfQVJOXCIgLS1yb2xlLXNlc3Npb24tbmFtZSBcIiRTRVNTSU9OX05BTUVcIiAtLWR1cmF0aW9uLXNlY29uZHMgOTAwIC0tcXVlcnkgXFwnQ3JlZGVudGlhbHMuW0FjY2Vzc0tleUlkLFNlY3JldEFjY2Vzc0tleSxTZXNzaW9uVG9rZW5dXFwnIC0tb3V0cHV0IHRleHQpJyxcbiAgICAgICAgXCJleHBvcnQgQVdTX0FDQ0VTU19LRVlfSUQgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZIEFXU19TRVNTSU9OX1RPS0VOXCIsXG4gICAgICAgIGBleHBvcnQgQVdTX0RFRkFVTFRfUkVHSU9OPVwiJHthY2NvdW50RW52LnJlZ2lvbn1cImAsXG4gICAgICAgIFwiYXdzIHN0cyBnZXQtY2FsbGVyLWlkZW50aXR5XCIsXG5cbiAgICAgICAgYGlmICR7Y2RrQ29tbWFuZH0gbHMgfCBncmVwIC1GcSBcIiR7c3RhY2tJZH1cIjsgdGhlbiBlY2hvIFwiU3RhY2sgJHtzdGFja0lkfSBmb3VuZDsgY2hlY2tpbmcgZm9yIGRyaWZ0Li4uXCI7ICR7Y2RrQ29tbWFuZH0gZHJpZnQgXCIke3N0YWNrSWR9XCIgLWUgLS1mYWlsOyBlbHNlIGVjaG8gXCJTdGFjayBub3QgZm91bmQgaW4gY2RrIGxzOyBza2lwcGluZyBkcmlmdCBjaGVjay5cIjsgZmlgLFxuICAgICAgXSxcbiAgICAgIHJvbGVQb2xpY3lTdGF0ZW1lbnRzOiBbXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcInN0czpBc3N1bWVSb2xlXCJdLFxuICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgYGFybjphd3M6aWFtOjoke2FjY291bnRFbnYuYWNjb3VudH06cm9sZS9jZGstaG5iNjU5ZmRzLWxvb2t1cC1yb2xlLSR7YWNjb3VudEVudi5hY2NvdW50fS0ke2FjY291bnRFbnYucmVnaW9ufWAsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICBdXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
368
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwaXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsMkNBQXVDO0FBQ3ZDLDZDQUFrRTtBQUNsRSw2REFLbUM7QUFDbkMsaURBQXNEO0FBQ3RELHFEQVErQjtBQUMvQixtRUFNc0M7QUFDdEMscUNBSWtCO0FBQ2xCLHlEQUFvRTtBQUNwRSxxRkFBbUU7QUFDbkUsdURBQWtFO0FBQ2xFLG1GQUc4QztBQUM5QyxpREFBc0Q7QUFDdEQsaURBQXNEO0FBRXREOztHQUVHO0FBQ1UsUUFBQSxxQ0FBcUMsR0FBRztJQUNuRCxNQUFNLEVBQUU7UUFDTixPQUFPLEVBQUU7WUFDUCxrQkFBa0IsRUFBRTtnQkFDbEIsTUFBTSxFQUFFLE1BQU07YUFDZjtTQUNGO0tBQ0Y7Q0FDRixDQUFDO0FBOE1GOzs7OztHQUtHO0FBQ0gsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUzs7SUFDcEQ7O09BRUc7SUFDTSxRQUFRLENBQVc7SUFFNUIsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBbUM7UUFFbkMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFdBQVcsR0FBRyx5QkFBZSxDQUFDLHVCQUF1QixDQUN6RCxJQUFJLEVBQ0oscUJBQXFCLENBQ3RCLENBQUM7UUFDRixNQUFNLHdCQUF3QixHQUFHLGNBQWMsQ0FBQztRQUNoRCxNQUFNLFVBQVUsR0FBRyw4QkFBa0IsQ0FBQyxVQUFVLENBQzlDLFdBQVcsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUM3QixLQUFLLENBQUMsWUFBWSxFQUNsQjtZQUNFLGFBQWEsRUFBRSxXQUFXO1lBQzFCLFVBQVUsRUFBRSx3QkFBd0I7WUFDcEMsYUFBYSxFQUFFLElBQUk7U0FDcEIsQ0FDRixDQUFDO1FBRUYsTUFBTSwrQkFBK0IsR0FDbkMsS0FBSyxDQUFDLDJCQUEyQixJQUFJLElBQUksQ0FBQztRQUM1QyxNQUFNLGNB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SSw0QkFBNEI7Z0JBQzVCLG1RQUFtUTtnQkFDblEsa0VBQWtFO2dCQUNsRSw4QkFBOEIsVUFBVSxDQUFDLE1BQU0sR0FBRztnQkFDbEQsNkJBQTZCO2dCQUU3QixNQUFNLFVBQVUsbUJBQW1CLE9BQU8sdUJBQXVCLE9BQU8sbUNBQW1DLFVBQVUsV0FBVyxPQUFPLCtFQUErRTthQUN2TjtZQUNELG9CQUFvQixFQUFFO2dCQUNwQixJQUFJLHlCQUFlLENBQUM7b0JBQ2xCLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO29CQUMzQixTQUFTLEVBQUU7d0JBQ1QsZ0JBQWdCLFVBQVUsQ0FBQyxPQUFPLG1DQUFtQyxVQUFVLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7cUJBQy9HO2lCQUNGLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiwgRW52aXJvbm1lbnQsIFN0YWNrLCBTdGFnZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgQnVja2V0Q2FjaGVPcHRpb25zLFxuICBCdWlsZFNwZWMsIENhY2hlLFxuICBDb21wdXRlVHlwZSxcbiAgTGludXhBcm1CdWlsZEltYWdlLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVidWlsZFwiO1xuaW1wb3J0IHsgU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zc21cIjtcbmltcG9ydCB7XG4gIENvZGVCdWlsZFN0ZXAsXG4gIENvZGVQaXBlbGluZSxcbiAgQ29kZVBpcGVsaW5lQWN0aW9uRmFjdG9yeVJlc3VsdCxcbiAgQ29kZVBpcGVsaW5lU291cmNlLFxuICBJQ29kZVBpcGVsaW5lQWN0aW9uRmFjdG9yeSxcbiAgUHJvZHVjZUFjdGlvbk9wdGlvbnMsXG4gIFN0ZXAsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9waXBlbGluZXNcIjtcbmltcG9ydCB7XG4gIFBpcGVsaW5lLFxuICBDZm5QaXBlbGluZSxcbiAgUGlwZWxpbmVUeXBlLFxuICBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cyxcbiAgSVN0YWdlLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZVwiO1xuaW1wb3J0IHtcbiAgQkVUQV9FTlZJUk9OTUVOVCxcbiAgR0FNTUFfRU5WSVJPTk1FTlQsXG4gIFBST0RfRU5WSVJPTk1FTlQsXG59IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgU2xhY2tDaGFubmVsQ29uZmlndXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2hhdGJvdFwiO1xuaW1wb3J0IHsgRGV0YWlsVHlwZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZXN0YXJub3RpZmljYXRpb25zXCI7XG5pbXBvcnQgeyBDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldCB9IGZyb20gXCIuL2FydGlmYWN0LWJ1Y2tldFwiO1xuaW1wb3J0IHtcbiAgTWFudWFsQXBwcm92YWxBY3Rpb24sXG4gIE1hbnVhbEFwcHJvdmFsQWN0aW9uUHJvcHMsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lLWFjdGlvbnNcIjtcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyBDb2RlQnVpbGRDYWNoZUJ1Y2tldCB9IGZyb20gXCIuL2NhY2hlLWJ1Y2tldFwiO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHBhcnRpYWwgYnVpbGQgc3BlYyBmb3IgdGhlIHN5bnRoIHN0ZXAgaW4gdGhlIHBpcGVsaW5lLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9TWU5USF9TVEVQX1BBUlRJQUxfQlVJTERfU1BFQyA9IHtcbiAgcGhhc2VzOiB7XG4gICAgaW5zdGFsbDoge1xuICAgICAgXCJydW50aW1lLXZlcnNpb25zXCI6IHtcbiAgICAgICAgbm9kZWpzOiBcIjIyLnhcIixcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VFbnZQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgZm9yIHRoZSBiZXRhIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBiZXRhOiBFbnZpcm9ubWVudDtcbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIGdhbW1hIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBnYW1tYTogRW52aXJvbm1lbnQ7XG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgZm9yIHRoZSBwcm9kIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBwcm9kOiBFbnZpcm9ubWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFja0NvbmZpZ1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgYmV0YSAoZGV2KSBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgYmV0YTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZ2FtbWEgKHN0Zykgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IGdhbW1hOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBwcm9kIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBwcm9kOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHByZS1kZXBsb3ltZW50IGRyaWZ0IGRldGVjdGlvbiBjaGVja3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHJpZnRDaGVja0NvbmZpZyB7XG4gIC8qKlxuICAgKiBDREsgQ0xJIGVudHJ5cG9pbnQgdXNlZCB0byBydW4gdGhlIGRyaWZ0IGNvbW1hbmQuXG4gICAqIEV4YW1wbGVzOiBcInBucG0gY2RrXCIsIFwicG5wbSBjZGstc3RhdGVmdWxcIiwgXCJwbnBtIGNkay1zdGF0ZWxlc3NcIi5cbiAgICogTXVzdCBzdXBwb3J0OiBcImRyaWZ0IDxzdGFja0lkPlwiLlxuICAgKi9cbiAgcmVhZG9ubHkgY2RrQ29tbWFuZDogc3RyaW5nO1xuICAvKipcbiAgICogQ29tbWFuZCB0byBpbnN0YWxsIGRlcGVuZGVuY2llcyBiZWZvcmUgcnVubmluZyBDREsuXG4gICAqIElmIHlvdXIgYXBwIGlzIGluIGEgc3ViZGlyZWN0b3J5LCBwcmVmaXggd2l0aCBcImNkIDxkaXI+ICYmXCIuXG4gICAqIEV4YW1wbGU6IFwiY2QgZGV2ICYmIHBucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZSAtLWlnbm9yZS1zY3JpcHRzXCJcbiAgICpcbiAgICogRGVmYXVsdDogXCJwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1pZ25vcmUtc2NyaXB0c1wiXG4gICAqL1xuICByZWFkb25seSBpbnN0YWxsQ29tbWFuZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2RlQnVpbGRTdGVwUHJvcHMge1xuICAvKipcbiAgICogdGhlIG1haW4gY29tbWFuZCBmb3IgdGhlIGJ1aWxkIHN0ZXAgdG8gcnVuXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFBhcnRpYWwgYnVpbGRzcGVjIGZvciB0aGlzIENvZGVCdWlsZFN0ZXBcbiAgICovXG4gIHJlYWRvbmx5IHBhcnRpYWxCdWlsZFNwZWM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKipcbiAgICogVGhlIGluc3RhbGwgY29tbWFuZHMgdG8gcnVuIGJlZm9yZSB0aGUgbWFpbiBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbENvbW1hbmRzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudFN0YWNrUGlwZWxpbmVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIGJyYW5jaCBuYW1lIHRoZSBwaXBlbGluZSB3aWxsIGxpc3RlbiB0by5cbiAgICogQXZvaWQgdXNpbmcgYnJhbmNoIG5hbWVzIHRoYXQgY29udGFpbiBzcGVjaWFsIGNoYXJhY3RlcnMgc3VjaCBhcyBwYXJlbnRoZXNlcy5cbiAgICogQWxsb3dlZCBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlOiBcIisgLSA9IC4gXyA6IC8gQFwiLlxuICAgKiBUaGlzIHJlc3RyaWN0aW9uIGlzIGR1ZSB0byBBV1MgcmVzb3VyY2UgdGFnZ2luZyByZXF1aXJlbWVudHMuXG4gICAqL1xuICByZWFkb25seSBnaXRodWJCcmFuY2g6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSByZXBvc2l0b3J5IG5hbWUgdGhhdCBleGlzdCBpbiB0aGUgJ09yY2FCdXMnIGdpdGh1YiBvcmdhbmlzYXRpb24uIGUuZy4gYGEtbWljcm8tc2VydmljZS1yZXBvYFxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViUmVwbzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHN0YWNrIHRvIHdoaWNoIHRoZSBwaXBlbGluZSB3aWxsIGJlIGRlcGxveWluZyB0byBpdHMgcmVzcGVjdGl2ZSBhY2NvdW50XG4gICAqL1xuICByZWFkb25seSBzdGFjazogYW55O1xuICAvKipcbiAgICogVGhlIHN0YWNrIG5hbWUgKGluIGNsb3VkZm9ybWF0aW9uKSBmb3IgdGhlIHN0YWNrIGRlZmluZWQgaW4gYHN0YWNrYC4gVGhlIHN0YWNrIG5hbWUgd2lsbCBwcmVwZW5kIHdpdGggdGhlIHN0YWdlXG4gICAqIG5hbWUgZS5nLiBgT3JjYUJ1c0JldGEtPHN0YWNrTmFtZT5gLCBgT3JjYUJ1c0dhbW1hLTxzdGFja05hbWU+YCwgYE9yY2FCdXNQcm9kLTxzdGFja05hbWU+YFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgY29uZmlndXJhdGlvbi9jb25zdGFudHMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgc3RhY2sgcHJvcHMuXG4gICAqL1xuICByZWFkb25seSBzdGFja0NvbmZpZzogU3RhY2tDb25maWdQcm9wcztcbiAgLyoqXG4gICAqIFRoZSBwaXBlbGluZSBuYW1lIGluIHRoZSBiYXN0aW9uIGFjY291bnQuXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZU5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHBhdHRlcm5zIG9mIEdpdCByZXBvc2l0b3J5IGZpbGUgcGF0aHMgdGhhdCwgd2hlbiBhIGNvbW1pdCBpcyBwdXNoZWQsIGFyZSB0byBiZSBJTkNMVURFRCBhcyBjcml0ZXJpYSB0aGF0IHN0YXJ0cyB0aGUgcGlwZWxpbmUuXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWNvZGVwaXBlbGluZS1waXBlbGluZS1naXRmaWxlcGF0aGZpbHRlcmNyaXRlcmlhLmh0bWxcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVkRmlsZVBhdGhzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBwYXR0ZXJucyBvZiBHaXQgcmVwb3NpdG9yeSBmaWxlIHBhdGhzIHRoYXQsIHdoZW4gYSBjb21taXQgaXMgcHVzaGVkLCBhcmUgdG8gYmUgRVhDTFVERUQgZnJvbSBzdGFydGluZyB0aGUgcGlwZWxpbmUuXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWNvZGVwaXBlbGluZS1waXBlbGluZS1naXRmaWxlcGF0aGZpbHRlcmNyaXRlcmlhLmh0bWxcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVkRmlsZVBhdGhzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgY29tbWFuZCB0byBydW4gdG8gc3ludGggdGhlIGNkayBzdGFjayB3aGljaCBhbHNvIGluc3RhbGxpbmcgdGhlIGNkayBkZXBlbmRlbmNpZXMuIGUuZy4gW1wicG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlXCIsIFwicG5wbSBjZGsgc3ludGhcIl1cbiAgICovXG4gIHJlYWRvbmx5IGNka1N5bnRoQ21kOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgY2RrIG91dHB1dCB3aWxsIGJlIHN0b3JlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgY2RrLm91dFxuICAgKi9cbiAgcmVhZG9ubHkgY2RrT3V0Pzogc3RyaW5nO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgQ29kZUJ1aWxkIHN0ZXAgZHVyaW5nIHRoZSBDREsgc3ludGggcGhhc2UuIEl0IHdpbGwgcGFzc2VkIGFzIHRoZSBgcGFydGlhbEJ1aWxkU3BlY2AgdG8gdGhlIGBDb2RlQnVpbGRTdGVwYC5cbiAgICpcbiAgICogQGRlZmF1bHQgREVGQVVMVF9TWU5USF9TVEVQX1BBUlRJQUxfQlVJTERfU1BFQ1xuICAgKi9cbiAgcmVhZG9ubHkgc3ludGhCdWlsZFNwZWM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIENvZGVCdWlsZCBzdGVwIHRoYXQgcnVucyB1bml0IHRlc3RzIGZvciB0aGUgbWFpbiBhcHBsaWNhdGlvbiBjb2RlLlxuICAgKiBUaGlzIHN0ZXAgd2lsbCBleGVjdXRlIGluIHBhcmFsbGVsIHdpdGgge0BsaW5rIHVuaXRJYWNUZXN0Q29uZmlnfSBhcyBwYXJ0IG9mIHRoZSBzeW50aCBzdGFnZSBkZXBlbmRlbmNpZXMuXG4gICAqIEJvdGggbXVzdCBzdWNjZWVkIGJlZm9yZSB0aGUgc3ludGggc3RlcCBydW5zLlxuICAgKlxuICAgKiBlbnN1cmUgeW91ciBjb21tYW5kIGluY2x1ZGVzICdjZCcgdG8gdGhlIG1haW4gYXBwIGRpcmVjdG9yeSwgYXMgdGhlIGJ1aWxkIGNvbnRleHQgc3RhcnRzIGZyb20gdGhlIHJvb3QuXG4gICAqL1xuICByZWFkb25seSB1bml0QXBwVGVzdENvbmZpZzogQ29kZUJ1aWxkU3RlcFByb3BzO1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIENvZGVCdWlsZCBzdGVwIHRoYXQgcnVucyB1bml0IHRlc3RzIGZvciBJbmZyYXN0cnVjdHVyZS1hcy1Db2RlIChJYUMpIGF0IHRoZSByZXBvc2l0b3J5IHJvb3QuXG4gICAqIFRoaXMgc3RlcCB3aWxsIGV4ZWN1dGUgaW4gcGFyYWxsZWwgd2l0aCB7QGxpbmsgdW5pdEFwcFRlc3RDb25maWd9IGFzIHBhcnQgb2YgdGhlIHN5bnRoIHN0YWdlIGRlcGVuZGVuY2llcy5cbiAgICogQm90aCBtdXN0IHN1Y2NlZWQgYmVmb3JlIHRoZSBzeW50aCBzdGVwIHJ1bnMuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IGNvbW1hbmQgd2lsbCBiZSBmcm9tIHRoZSByb290IG9mIHRoZSByZXBvOiBbXCJucG0gaW5zdGFsbCAtLWdsb2JhbCBjb3JlcGFja0BsYXRlc3RcIiwgXCJjb3JlcGFjayBlbmFibGVcIiwgXCJtYWtlIGluc3RhbGxcIiwgXCJtYWtlIHRlc3RcIl1cbiAgICovXG4gIHJlYWRvbmx5IHVuaXRJYWNUZXN0Q29uZmlnPzogQ29kZUJ1aWxkU3RlcFByb3BzO1xuICAvKipcbiAgICogVGhlIHN0YWdlIGVudmlyb25tZW50IGZvciB0aGUgZGVwbG95bWVudCBzdGFja1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VFbnY/OiBTdGFnZUVudlByb3BzO1xuICAvKipcbiAgICogRW5hYmxlIG5vdGlmaWNhdGlvbiB0byB0aGUgJ2FsZXJ0cy1idWlsZCcgc2xhY2sgY2hhbm5lbC5cbiAgICogQGRlZmF1bHQgVHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlU2xhY2tOb3RpZmljYXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIHBpcGVsaW5lIG5vdGlmaWNhdGlvbiBldmVudHMgdGhhdCB3aWxsIHRyaWdnZXIgYSBTbGFjayBjaGFubmVsIG5vdGlmaWNhdGlvbi5cbiAgICogT25seSBhcHBsaWVzIGlmIGBlbmFibGVTbGFja05vdGlmaWNhdGlvbmAgaXMgc2V0IHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fRkFJTEVEXSDigJNcbiAgICogICBPbmx5IGZhaWxlZCBwaXBlbGluZSBleGVjdXRpb25zIHdpbGwgdHJpZ2dlciBhIG5vdGlmaWNhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkV2ZW50cz86IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmV1c2UgdGhlIGV4aXN0aW5nIGFydGlmYWN0IGJ1Y2tldCBmb3IgY3Jvc3MtZGVwbG95bWVudCBwaXBlbGluZXMuXG4gICAqIElmIHNldCB0byB0cnVlLCBpdCB3aWxsIGxvb2sgdXAgdGhlIGV4aXN0aW5nIGFydGlmYWN0IGJ1Y2tldCBpbiB0aGUgVE9PTENIQUlOIGFjY291bnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJldXNlRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhc3NldHMgZnJvbSB0aGUgQ0RLIGFzc2VtYmx5IHByZS1kZXBsb3ltZW50IHRvIHByZXZlbnQgaGl0dGluZyBDb2RlUGlwZWxpbmUncyAyNTYgTUIgYXJ0aWZhY3Qgc2l6ZSBsaW1pdC5cbiAgICogVXNlZnVsIHdoZW4gQ0RLIGFzc2V0cyAoTGFtYmRhIGNvZGUsIERvY2tlciBpbWFnZXMsIGV0Yy4pIGFyZSBsYXJnZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzk5MTdcbiAgICovXG4gIHJlYWRvbmx5IHN0cmlwQXNzZW1ibHlBc3NldHM/OiBib29sZWFuO1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgZHJpZnQgZGV0ZWN0aW9uIGNoZWNrcyBiZWZvcmUgZGVwbG95bWVudC5cbiAgICogSWYgc3BlY2lmaWVkLCB0aGUgcGlwZWxpbmUgd2lsbCBjaGVjayBmb3IgQ2xvdWRGb3JtYXRpb24gZHJpZnQgYW5kIGZhaWwgaWYgZGV0ZWN0ZWQuXG4gICAqL1xuICByZWFkb25seSBkcmlmdENoZWNrQ29uZmlnPzogRHJpZnRDaGVja0NvbmZpZztcbiAgLyoqXG4gICAqIENvbmZpZ3VyZSB0aGUgYGNhY2hlYCBvcHRpb25zIGZvciBlYWNoIGBDb2RlQnVpbGRTdGVwYC4gVGhpcyB3aWxsIGFsbG93IENvZGVCdWlsZCB0byB1c2VcbiAgICogUzMgY2FjaGluZyB3aXRoIHRoZSBgQ09ERUJVSUxEX0NBQ0hFX0JVQ0tFVGAgYnVja2V0LlxuICAgKlxuICAgKiBUaGUgcGFydGlhbCBidWlsZHNwZWMgbXVzdCBzdGlsbCBjb250YWluIGRlZmluaXRpb25zIGZvciBjYWNoZSBwYXRocyBhbmQga2V5cyBpZiB1c2VkLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2RlYnVpbGQvbGF0ZXN0L3VzZXJndWlkZS9idWlsZC1zcGVjLXJlZi5odG1sI2J1aWxkLXNwZWMuY2FjaGVcbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlT3B0aW9ucz86IENhY2hlT3B0aW9ucztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBhbiBTMyBjYWNoZSB0byB1c2UgYWNyb3NzIGJ1aWxkIHN0ZXBzLiBJZiBzcGVjaWZpZWQsIHRoZSBidWNrZXQgdW5kZXJcbiAqIGBDT0RFQlVJTERfQ0FDSEVfQlVDS0VUYCB3aWxsIGJlIHVzZWQgZm9yIGNhY2hpbmcuIFRoaXMgYnVja2V0IGlzIG1hbmFnZWQgYnkgdGhlIHNoYXJlZC1yZXNvdXJjZXNcbiAqIHNlcnZpY2UuXG4gKlxuICogVGhlIHBhcnRpYWwgYnVpbGRzcGVjIG11c3Qgc3RpbGwgY29udGFpbiBkZWZpbml0aW9ucyBmb3IgcGF0aHMgYW5kIGtleXMgaWYgdXNlZC5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZGVidWlsZC9sYXRlc3QvdXNlcmd1aWRlL2J1aWxkLXNwZWMtcmVmLmh0bWwjYnVpbGQtc3BlYy5jYWNoZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBuYW1lc3BhY2UgZm9yIHRoZSBjYWNoZS4gVGhpcyBvcHRpb24gaXMgcmVxdWlyZWQgYmVjYXVzZSB0aGUgY2FjaGUgYnVja2V0IGlzIHNoYXJlZCBhY3Jvc3NcbiAgICogYWxsIHByb2plY3RzIHNvIGEgbmFtZXNwYWNlIGlzIHJlcXVpcmVkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBjYWNoZS4gVXNlIHRoZSBwcm9qZWN0IG5hbWUsIGUuZy4gYGZpbGVtYW5hZ2VyYC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWVzcGFjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgQ0RLIGNvbnN0cnVjdCB0aGF0IGNyZWF0ZXMgYSBkZXBsb3ltZW50IHBpcGVsaW5lIGFjcm9zcyBlbnZpcm9ubWVudHMgZm9yIHRoZSBPcmNhQnVzIHByb2plY3QuXG4gKlxuICogUHJlcmVxdWlzaXRlOiBFbnN1cmUgdGhhdCB0aGUgXCJDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldFwiIHN0YWNrIGlzIGRlcGxveWVkIGluIHRoZSBUT09MQ0hBSU4gYWNjb3VudFxuICogYmVmb3JlIHVzaW5nIHRoaXMgY29uc3RydWN0LlxuICovXG5leHBvcnQgY2xhc3MgRGVwbG95bWVudFN0YWNrUGlwZWxpbmUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIGNvZGUgcGlwZWxpbmUgY29uc3RydWN0IHRoYXQgaXMgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lOiBQaXBlbGluZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IERlcGxveW1lbnRTdGFja1BpcGVsaW5lUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBjb2RlU3RhckFybiA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHRoaXMsXG4gICAgICBcImNvZGVzdGFyX2dpdGh1Yl9hcm5cIixcbiAgICApO1xuICAgIGNvbnN0IGNvZGVTdGFyU291cmNlQWN0aW9uTmFtZSA9IFwicGlwZWxpbmUtc3JjXCI7XG4gICAgY29uc3Qgc291cmNlRmlsZSA9IENvZGVQaXBlbGluZVNvdXJjZS5jb25uZWN0aW9uKFxuICAgICAgYE9yY2FCdXMvJHtwcm9wcy5naXRodWJSZXBvfWAsXG4gICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3Rpb25Bcm46IGNvZGVTdGFyQXJuLFxuICAgICAgICBhY3Rpb25OYW1lOiBjb2RlU3RhclNvdXJjZUFjdGlvbk5hbWUsXG4gICAgICAgIHRyaWdnZXJPblB1c2g6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBpc1JldXNpbmdFeGlzdGluZ0FydGlmYWN0QnVja2V0ID1cbiAgICAgIHByb3BzLnJldXNlRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldCA/PyB0cnVlO1xuICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gaXNSZXVzaW5nRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldFxuICAgICAgPyBDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldC5mcm9tTG9va3VwKHRoaXMpLmFydGlmYWN0QnVja2V0XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRoaXMucGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUodGhpcywgXCJEZXBsb3ltZW50Q29kZVBpcGVsaW5lXCIsIHtcbiAgICAgIGFydGlmYWN0QnVja2V0OiBhcnRpZmFjdEJ1Y2tldCxcbiAgICAgIHBpcGVsaW5lVHlwZTogUGlwZWxpbmVUeXBlLlYyLFxuICAgICAgcGlwZWxpbmVOYW1lOiBwcm9wcy5waXBlbGluZU5hbWUsXG4gICAgICBjcm9zc0FjY291bnRLZXlzOiB0cnVlLFxuICAgICAgLy8gZW5hYmxlIHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZVxuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzU3MDE3NzYvdXBkYXRlcGlwZWxpbmUtc3RhZ2UtaW4tY2RrLXBpcGVsaW5lLWlzLWNhbmNlbGxlZFxuICAgICAgcmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmluY2x1ZGVkRmlsZVBhdGhzIHx8IHByb3BzLmV4Y2x1ZGVkRmlsZVBhdGhzKSB7XG4gICAgICBjb25zdCBmaWxlUGF0aHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXG4gICAgICBpZiAocHJvcHMuaW5jbHVkZWRGaWxlUGF0aHMpIHtcbiAgICAgICAgZmlsZVBhdGhzW1wiSW5jbHVkZXNcIl0gPSBwcm9wcy5pbmNsdWRlZEZpbGVQYXRocztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5leGNsdWRlZEZpbGVQYXRocykge1xuICAgICAgICBmaWxlUGF0aHNbXCJFeGNsdWRlc1wiXSA9IHByb3BzLmV4Y2x1ZGVkRmlsZVBhdGhzO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgZXZlbnQgZmlsdGVyIHRvIG9ubHkgdHJpZ2dlciBpZiB0aGUgcHVzaCBldmVudCBpcyBmcm9tIGBkZXBsb3lgIGRpcmVjdG9yeVxuICAgICAgY29uc3QgY2ZuUGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblBpcGVsaW5lO1xuICAgICAgY2ZuUGlwZWxpbmUuYWRkUHJvcGVydHlPdmVycmlkZShcIlRyaWdnZXJzXCIsIFtcbiAgICAgICAge1xuICAgICAgICAgIEdpdENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIFB1c2g6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEJyYW5jaGVzOiB7XG4gICAgICAgICAgICAgICAgICBJbmNsdWRlczogW3Byb3BzLmdpdGh1YkJyYW5jaF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBGaWxlUGF0aHM6IGZpbGVQYXRocyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBTb3VyY2VBY3Rpb25OYW1lOiBjb2RlU3RhclNvdXJjZUFjdGlvbk5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBQcm92aWRlclR5cGU6IFwiQ29kZVN0YXJTb3VyY2VDb25uZWN0aW9uXCIsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICBsZXQgY2FjaGVCdWNrZXQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGNhY2hlT3B0aW9uczogQnVja2V0Q2FjaGVPcHRpb25zIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5jYWNoZU9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2FjaGVCdWNrZXQgPSBDb2RlQnVpbGRDYWNoZUJ1Y2tldC5mcm9tTG9va3VwKHRoaXMpLmNhY2hlQnVja2V0O1xuICAgICAgY2FjaGVPcHRpb25zID0geyBjYWNoZU5hbWVzcGFjZTogcHJvcHMuY2FjaGVPcHRpb25zLm5hbWVzcGFjZSB9XG4gICAgfVxuXG5cbiAgICAvLyBBZGQgdW5pdCB0ZXN0IGZvciBJYUMgYXQgdGhlIHJvb3Qgb2YgdGhlXG4gICAgY29uc3Qge1xuICAgICAgaW5zdGFsbENvbW1hbmRzOiB1bml0SWFjVGVzdEluc3RhbGwgPSBbXG4gICAgICAgIFwibnBtIGluc3RhbGwgLS1nbG9iYWwgY29yZXBhY2tAbGF0ZXN0XCIsXG4gICAgICAgIFwiY29yZXBhY2sgZW5hYmxlXCIsXG4gICAgICAgIFwicG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlIC0taWdub3JlLXNjcmlwdHNcIixcbiAgICAgIF0sXG4gICAgICBjb21tYW5kOiB1bml0SWFjVGVzdENvbW1hbmQgPSBbXG4gICAgICAgIFwicG5wbSB0ZXN0XCIsXG4gICAgICBdLFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogdW5pdElhY1BhcnRpYWxCdWlsZFNwZWMgPSB7XG4gICAgICAgIHBoYXNlczoge1xuICAgICAgICAgIGluc3RhbGw6IHtcbiAgICAgICAgICAgIFwicnVudGltZS12ZXJzaW9uc1wiOiB7XG4gICAgICAgICAgICAgIG5vZGVqczogXCIyMlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB2ZXJzaW9uOiBcIjAuMlwiLFxuICAgICAgfSxcbiAgICB9ID0gcHJvcHMudW5pdElhY1Rlc3RDb25maWcgfHwge307XG4gICAgY29uc3QgdW5pdElhY1Rlc3QgPSBuZXcgQ29kZUJ1aWxkU3RlcChcIlVuaXRJYWNUZXN0XCIsIHtcbiAgICAgIGluc3RhbGxDb21tYW5kczogdW5pdElhY1Rlc3RJbnN0YWxsLFxuICAgICAgY29tbWFuZHM6IHVuaXRJYWNUZXN0Q29tbWFuZCxcbiAgICAgIGlucHV0OiBzb3VyY2VGaWxlLFxuICAgICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgICBwcml2aWxlZ2VkOiB0cnVlLFxuICAgICAgICBjb21wdXRlVHlwZTogQ29tcHV0ZVR5cGUuTEFSR0UsXG4gICAgICAgIGJ1aWxkSW1hZ2U6IExpbnV4QXJtQnVpbGRJbWFnZS5BTUFaT05fTElOVVhfMl9TVEFOREFSRF8zXzAsXG4gICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgICAgTk9ERV9PUFRJT05TOiB7XG4gICAgICAgICAgICB2YWx1ZTogXCItLW1heC1vbGQtc3BhY2Utc2l6ZT04MTkyXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBwYXJ0aWFsQnVpbGRTcGVjOiB1bml0SWFjUGFydGlhbEJ1aWxkU3BlY1xuICAgICAgICA/IEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHVuaXRJYWNQYXJ0aWFsQnVpbGRTcGVjKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGNhY2hlOiBjYWNoZUJ1Y2tldCA/IENhY2hlLmJ1Y2tldChjYWNoZUJ1Y2tldCwgY2FjaGVPcHRpb25zKSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIC8vIEFkZGluZyB1bml0IHRlc3QgZm9yIHRoZSBtYWluIGFwcFxuICAgIGNvbnN0IHtcbiAgICAgIGNvbW1hbmQ6IHVuaXRBcHBUZXN0Q29tbWFuZCxcbiAgICAgIGluc3RhbGxDb21tYW5kczogdW5pdEFwcFRlc3RJbnN0YWxsID0gdW5kZWZpbmVkLFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogdW5pdEFwcFBhcnRpYWxCdWlsZFNwZWMgPSB1bmRlZmluZWQsXG4gICAgfSA9IHByb3BzLnVuaXRBcHBUZXN0Q29uZmlnO1xuICAgIGNvbnN0IHVuaXRBcHBUZXN0ID0gbmV3IENvZGVCdWlsZFN0ZXAoXCJVbml0QXBwVGVzdFwiLCB7XG4gICAgICBjb21tYW5kczogdW5pdEFwcFRlc3RDb21tYW5kLFxuICAgICAgaW5zdGFsbENvbW1hbmRzOiB1bml0QXBwVGVzdEluc3RhbGwsXG4gICAgICBpbnB1dDogc291cmNlRmlsZSxcbiAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgcHJpdmlsZWdlZDogdHJ1ZSxcbiAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLkxBUkdFLFxuICAgICAgICBidWlsZEltYWdlOiBMaW51eEFybUJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzJfU1RBTkRBUkRfM18wLFxuICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczoge1xuICAgICAgICAgIE5PREVfT1BUSU9OUzoge1xuICAgICAgICAgICAgdmFsdWU6IFwiLS1tYXgtb2xkLXNwYWNlLXNpemU9ODE5MlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogdW5pdEFwcFBhcnRpYWxCdWlsZFNwZWNcbiAgICAgICAgPyBCdWlsZFNwZWMuZnJvbU9iamVjdCh1bml0QXBwUGFydGlhbEJ1aWxkU3BlYylcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBjYWNoZTogY2FjaGVCdWNrZXQgPyBDYWNoZS5idWNrZXQoY2FjaGVCdWNrZXQsIGNhY2hlT3B0aW9ucykgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IHN5bnRoQnVpbGRTcGVjID0gREVGQVVMVF9TWU5USF9TVEVQX1BBUlRJQUxfQlVJTERfU1BFQyB9ID0gcHJvcHM7XG4gICAgY29uc3Qgc3ludGhTdGVwID0gbmV3IENvZGVCdWlsZFN0ZXAoXCJDZGtTeW50aFwiLCB7XG4gICAgICBpbnN0YWxsQ29tbWFuZHM6IFtcbiAgICAgICAgXCJub2RlIC12XCIsXG4gICAgICAgIFwibnBtIGluc3RhbGwgLS1nbG9iYWwgY29yZXBhY2tAbGF0ZXN0XCIsXG4gICAgICAgIFwiY29yZXBhY2sgLS12ZXJzaW9uXCIsXG4gICAgICAgIFwiY29yZXBhY2sgZW5hYmxlXCIsXG4gICAgICBdLFxuICAgICAgY29tbWFuZHM6IHByb3BzLmNka1N5bnRoQ21kLFxuICAgICAgaW5wdXQ6IHNvdXJjZUZpbGUsXG4gICAgICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiBwcm9wcy5jZGtPdXQgfHwgXCJjZGsub3V0XCIsXG4gICAgICBwYXJ0aWFsQnVpbGRTcGVjOiBCdWlsZFNwZWMuZnJvbU9iamVjdChzeW50aEJ1aWxkU3BlYyksXG4gICAgICBjYWNoZTogY2FjaGVCdWNrZXQgPyBDYWNoZS5idWNrZXQoY2FjaGVCdWNrZXQsIGNhY2hlT3B0aW9ucykgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgc3ludGhTdGVwLmFkZFN0ZXBEZXBlbmRlbmN5KHVuaXRJYWNUZXN0KTtcbiAgICBzeW50aFN0ZXAuYWRkU3RlcERlcGVuZGVuY3kodW5pdEFwcFRlc3QpO1xuXG4gICAgY29uc3QgY2RrUGlwZWxpbmUgPSBuZXcgQ29kZVBpcGVsaW5lKHRoaXMsIFwiQ0RLQ29kZVBpcGVsaW5lXCIsIHtcbiAgICAgIGNvZGVQaXBlbGluZTogdGhpcy5waXBlbGluZSxcbiAgICAgIHN5bnRoOiBzeW50aFN0ZXAsXG4gICAgICBzZWxmTXV0YXRpb246IHRydWUsXG4gICAgICBjb2RlQnVpbGREZWZhdWx0czoge1xuICAgICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLkxBUkdFLFxuICAgICAgICAgIGJ1aWxkSW1hZ2U6IExpbnV4QXJtQnVpbGRJbWFnZS5BTUFaT05fTElOVVhfMl9TVEFOREFSRF8zXzAsXG4gICAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgICAgIE5PREVfT1BUSU9OUzoge1xuICAgICAgICAgICAgICB2YWx1ZTogXCItLW1heC1vbGQtc3BhY2Utc2l6ZT04MTkyXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVmYXVsdFN0YWdlRW52OiBTdGFnZUVudlByb3BzID0ge1xuICAgICAgYmV0YTogQkVUQV9FTlZJUk9OTUVOVCxcbiAgICAgIGdhbW1hOiBHQU1NQV9FTlZJUk9OTUVOVCxcbiAgICAgIHByb2Q6IFBST0RfRU5WSVJPTk1FTlQsXG4gICAgfTtcbiAgICBjb25zdCBzdGFnZUVudiA9IHByb3BzLnN0YWdlRW52IHx8IGRlZmF1bHRTdGFnZUVudjtcblxuICAgIC8vIEFmdGVyIGFzc2V0cyBhcmUgcHVibGlzaGVkLCB0aGV5IGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIGFzc2VtYmx5IGRpcmVjdG9yeVxuICAgIC8vIHRvIGhlbHAgcHJldmVudCBoaXR0aW5nIHRoZSBDb2RlUGlwZWxpbmUgYXJ0aWZhY3QgbGltaXQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy85OTE3XG4gICAgbGV0IHN0cmlwQXNzZXRzRnJvbUFzc2VtYmx5OiBDb2RlQnVpbGRTdGVwIHwgdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5zdHJpcEFzc2VtYmx5QXNzZXRzKSB7XG4gICAgICBzdHJpcEFzc2V0c0Zyb21Bc3NlbWJseSA9IG5ldyBDb2RlQnVpbGRTdGVwKFwiU3RyaXBBc3NldHNGcm9tQXNzZW1ibHlcIiwge1xuICAgICAgICBpbnB1dDogY2RrUGlwZWxpbmUuY2xvdWRBc3NlbWJseUZpbGVTZXQsXG4gICAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICAgJ1MzX1BBVEg9JHtDT0RFQlVJTERfU09VUkNFX1ZFUlNJT04jXCJhcm46YXdzOnMzOjo6XCJ9JyxcbiAgICAgICAgICBcIlpJUF9BUkNISVZFPSQoYmFzZW5hbWUgJFMzX1BBVEgpXCIsXG4gICAgICAgICAgXCJlY2hvICRTM19QQVRIXCIsXG4gICAgICAgICAgXCJlY2hvICRaSVBfQVJDSElWRVwiLFxuICAgICAgICAgIFwibHNcIixcbiAgICAgICAgICBcInJtIC1yZnYgYXNzZXQuKlwiLFxuICAgICAgICAgIFwiemlwIC1yIC1xIC1BICRaSVBfQVJDSElWRSAqXCIsXG4gICAgICAgICAgXCJsc1wiLFxuICAgICAgICAgIFwiYXdzIHMzIGNwICRaSVBfQVJDSElWRSBzMzovLyRTM19QQVRIXCIsXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgY2RrUGlwZWxpbmUuYWRkV2F2ZShcIkJlZm9yZVN0YWdlRGVwbG95bWVudFwiLCB7XG4gICAgICAgIHByZTogW3N0cmlwQXNzZXRzRnJvbUFzc2VtYmx5XSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENvbnN0cnVjdCBmdW5jdGlvbiB0byBnZXQgU3RhY2tJZCBmb3IgZHJpZnQgY2hlY2tcbiAgICBjb25zdCByb290U3RhY2tOYW1lID0gU3RhY2sub2YodGhpcykuc3RhY2tOYW1lO1xuICAgIGNvbnN0IGNvbnN0cnVjdElkID0gdGhpcy5ub2RlLmlkO1xuICAgIGNvbnN0IGdldFN0YWNrSWQgPSAoZW52TmFtZTogc3RyaW5nKSA9PlxuICAgICAgYCR7cm9vdFN0YWNrTmFtZX0vJHtjb25zdHJ1Y3RJZH0vJHtlbnZOYW1lfS8ke3Byb3BzLnN0YWNrTmFtZX1gO1xuXG4gICAgLy8gRHJpZnQgY2hlY2sgY29uZmlnXG4gICAgY29uc3QgaXNEcmlmdENoZWNrU3RlcCA9ICEhcHJvcHMuZHJpZnRDaGVja0NvbmZpZztcbiAgICBjb25zdCBjZGtJbnN0YWxsQ21kID1cbiAgICAgIHByb3BzLmRyaWZ0Q2hlY2tDb25maWc/Lmluc3RhbGxDb21tYW5kID8/XG4gICAgICBcInBucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZSAtLWlnbm9yZS1zY3JpcHRzXCI7XG4gICAgY29uc3QgY2RrUnVuQ21kID0gcHJvcHMuZHJpZnRDaGVja0NvbmZpZz8uY2RrQ29tbWFuZCA/PyBgYDtcblxuICAgIGNvbnN0IGJldGFFbnZOYW1lID0gXCJPcmNhQnVzQmV0YVwiO1xuICAgIGNka1BpcGVsaW5lLmFkZFN0YWdlKFxuICAgICAgbmV3IERlcGxveW1lbnRTdGFnZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYmV0YUVudk5hbWUsXG4gICAgICAgIHN0YWdlRW52LmJldGEsXG4gICAgICAgIHByb3BzLnN0YWNrTmFtZSxcbiAgICAgICAgcHJvcHMuc3RhY2ssXG4gICAgICAgIHByb3BzLnN0YWNrQ29uZmlnLmJldGEsXG4gICAgICAgIHByb3BzLmdpdGh1YlJlcG8sXG4gICAgICAgIHByb3BzLmdpdGh1YkJyYW5jaCxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIHByZTogaXNEcmlmdENoZWNrU3RlcFxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBuZXcgRmFpbE9uRHJpZnRCdWlsZFN0ZXAoXCJEcmlmdE9uRmFpbEJldGFDaGVja1wiLCB7XG4gICAgICAgICAgICAgICAgYWNjb3VudEVudjogc3RhZ2VFbnYuYmV0YSxcbiAgICAgICAgICAgICAgICBzdGFja0lkOiBnZXRTdGFja0lkKGJldGFFbnZOYW1lKSxcbiAgICAgICAgICAgICAgICBjZGtDb21tYW5kOiBjZGtSdW5DbWQsXG4gICAgICAgICAgICAgICAgaW5zdGFsbENvbW1hbmQ6IGNka0luc3RhbGxDbWQsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogR0FNTUFcbiAgICAgKi9cbiAgICBjb25zdCBnYW1tYUVudk5hbWUgPSBcIk9yY2FCdXNHYW1tYVwiO1xuXG4gICAgY2RrUGlwZWxpbmUuYWRkU3RhZ2UoXG4gICAgICBuZXcgRGVwbG95bWVudFN0YWdlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBnYW1tYUVudk5hbWUsXG4gICAgICAgIHN0YWdlRW52LmdhbW1hLFxuICAgICAgICBwcm9wcy5zdGFja05hbWUsXG4gICAgICAgIHByb3BzLnN0YWNrLFxuICAgICAgICBwcm9wcy5zdGFja0NvbmZpZy5nYW1tYSxcbiAgICAgICAgcHJvcHMuZ2l0aHViUmVwbyxcbiAgICAgICAgcHJvcHMuZ2l0aHViQnJhbmNoLFxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgcHJlOiBpc0RyaWZ0Q2hlY2tTdGVwXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIG5ldyBGYWlsT25EcmlmdEJ1aWxkU3RlcChcIkRyaWZ0T25GYWlsR2FtbWFDaGVja1wiLCB7XG4gICAgICAgICAgICAgICAgYWNjb3VudEVudjogc3RhZ2VFbnYuZ2FtbWEsXG4gICAgICAgICAgICAgICAgc3RhY2tJZDogZ2V0U3RhY2tJZChnYW1tYUVudk5hbWUpLFxuICAgICAgICAgICAgICAgIGNka0NvbW1hbmQ6IGNka1J1bkNtZCxcbiAgICAgICAgICAgICAgICBpbnN0YWxsQ29tbWFuZDogY2RrSW5zdGFsbENtZCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIHBvc3Q6IFtcbiAgICAgICAgICBuZXcgTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwKFwiUHJvbW90ZVRvUHJvZFwiLCB7XG4gICAgICAgICAgICBhY3Rpb25OYW1lOiBcIlByb21vdGVUb1Byb2RcIixcbiAgICAgICAgICAgIC8vIEN1c3RvbSBzdGVwcyBieXBhc3Mgc3RhZ2UgcHJlL3Bvc3Qgb3JkZXJpbmcsIHNvIHJ1bk9yZGVyIG11c3QgYmUgZXhwbGljaXRseSBzZXQuXG4gICAgICAgICAgICAvLyBTZXQgdG8gNSB0byBlbnN1cmUgdGhpcyBydW5zIGFmdGVyIGFsbCBPcmNhQnVzR2FtbWEgc3RhZ2Ugc3RlcHMgY29tcGxldGUuXG4gICAgICAgICAgICAvLyAoR2FtbWEgZGVwbG95bWVudCB0eXBpY2FsbHkgdXNlcyAyIHN0ZXBzLCBzbyA1IHByb3ZpZGVzIGFkZXF1YXRlIGJ1ZmZlcilcbiAgICAgICAgICAgIHJ1bk9yZGVyOiA1LFxuICAgICAgICAgICAgLy8gNjAtbWludXRlIHRpbWVvdXQgYWxsb3dzIHF1ZXVlZCBwaXBlbGluZSBleGVjdXRpb25zIHRvIHByb2NlZWQgaWYgYXBwcm92YWwgZXhwaXJlc1xuICAgICAgICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcyg2MCksXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBQUk9EXG4gICAgICovXG4gICAgY29uc3QgcHJvZEVudk5hbWUgPSBcIk9yY2FCdXNQcm9kXCI7XG5cbiAgICBjZGtQaXBlbGluZS5hZGRTdGFnZShcbiAgICAgIG5ldyBEZXBsb3ltZW50U3RhZ2UoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHByb2RFbnZOYW1lLFxuICAgICAgICBzdGFnZUVudi5wcm9kLFxuICAgICAgICBwcm9wcy5zdGFja05hbWUsXG4gICAgICAgIHByb3BzLnN0YWNrLFxuICAgICAgICBwcm9wcy5zdGFja0NvbmZpZy5wcm9kLFxuICAgICAgICBwcm9wcy5naXRodWJSZXBvLFxuICAgICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBwcmU6IGlzRHJpZnRDaGVja1N0ZXBcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgbmV3IEZhaWxPbkRyaWZ0QnVpbGRTdGVwKFwiRHJpZnRPbkZhaWxQcm9kQ2hlY2tcIiwge1xuICAgICAgICAgICAgICAgIGFjY291bnRFbnY6IHN0YWdlRW52LnByb2QsXG4gICAgICAgICAgICAgICAgc3RhY2tJZDogZ2V0U3RhY2tJZChwcm9kRW52TmFtZSksXG4gICAgICAgICAgICAgICAgY2RrQ29tbWFuZDogY2RrUnVuQ21kLFxuICAgICAgICAgICAgICAgIGluc3RhbGxDb21tYW5kOiBjZGtJbnN0YWxsQ21kLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNka1BpcGVsaW5lLmJ1aWxkUGlwZWxpbmUoKTtcblxuICAgIGlmIChzdHJpcEFzc2V0c0Zyb21Bc3NlbWJseSkge1xuICAgICAgY2RrUGlwZWxpbmUucGlwZWxpbmUuYXJ0aWZhY3RCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoXG4gICAgICAgIHN0cmlwQXNzZXRzRnJvbUFzc2VtYmx5LnByb2plY3QsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5lbmFibGVTbGFja05vdGlmaWNhdGlvbiA/PyB0cnVlKSB7XG4gICAgICBjb25zdCBhbGVydHNCdWlsZFNsYWNrQ29uZmlnQXJuID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIi9jaGF0Ym90X2Fybi9zbGFjay9hbGVydHMtYnVpbGRcIixcbiAgICAgICk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBTbGFja0NoYW5uZWxDb25maWd1cmF0aW9uLmZyb21TbGFja0NoYW5uZWxDb25maWd1cmF0aW9uQXJuKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIlNsYWNrQ2hhbm5lbENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgYWxlcnRzQnVpbGRTbGFja0NvbmZpZ0FybixcbiAgICAgICk7XG5cbiAgICAgIHRoaXMucGlwZWxpbmUubm90aWZ5T24oXCJQaXBlbGluZVNsYWNrTm90aWZpY2F0aW9uXCIsIHRhcmdldCwge1xuICAgICAgICBldmVudHM6IHByb3BzLm5vdGlmaWNhdGlvbkV2ZW50cyB8fCBbXG4gICAgICAgICAgUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX0ZBSUxFRCxcbiAgICAgICAgXSxcbiAgICAgICAgZGV0YWlsVHlwZTogRGV0YWlsVHlwZS5GVUxMLFxuICAgICAgICBub3RpZmljYXRpb25SdWxlTmFtZTogYE9yY2FCdXMtJHtwcm9wcy5waXBlbGluZU5hbWV9YCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIE1hbnVhbEFwcHJvdmFsQWN0aW9uU3RlcCB3aXRoIHJlcXVpcmVkIHJ1bk9yZGVyLlxuICovXG5pbnRlcmZhY2UgTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwUHJvcHMgZXh0ZW5kcyBNYW51YWxBcHByb3ZhbEFjdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBydW4gb3JkZXIgZm9yIHRoaXMgYWN0aW9uIGluIHRoZSBwaXBlbGluZSBzdGFnZS4gVGhlIHN0YWdlIFByZS9Qb3N0IG9yZGVyIGRvZXMgbm90IGFwcGx5IHRvIHRoaXMgY3VzdG9tXG4gICAqIHN0ZXAvYWN0aW9uLCB5b3UgbmVlZCB0byBleHBsaWNpdGx5IHNldCB0aGUgcnVuT3JkZXIuXG4gICAqL1xuICBydW5PcmRlcjogbnVtYmVyO1xufVxuLyoqXG4gKiBDdXN0b20gbWFudWFsIGFwcHJvdmFsIHN0ZXAgZm9yIENESyBDb2RlUGlwZWxpbmUuXG4gKlxuICogVGhpcyBjbGFzcyBicmlkZ2VzIHRoZSBnYXAgdG8gZW5hYmxlIHVzaW5nIE1hbnVhbEFwcHJvdmFsQWN0aW9uIHdpdGhpbiBhIFN0ZXAgY2xhc3MsXG4gKiBtYWtpbmcgaXQgY29tcGF0aWJsZSB3aXRoIGNkay5waXBlbGluZXMgY29uc3RydWN0cy5cbiAqXG4gKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzdGVwLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcHJvcGVydGllcyBmb3IgdGhlIG1hbnVhbCBhcHByb3ZhbCBhY3Rpb24sIGluY2x1ZGluZ1xuICovXG5jbGFzcyBNYW51YWxBcHByb3ZhbEFjdGlvblN0ZXBcbiAgZXh0ZW5kcyBTdGVwXG4gIGltcGxlbWVudHMgSUNvZGVQaXBlbGluZUFjdGlvbkZhY3RvcnlcbntcbiAgcHJpdmF0ZSByZWFkb25seSBtYW51YWxBcHByb3ZhbEFjdGlvblByb3BzOiBNYW51YWxBcHByb3ZhbEFjdGlvblN0ZXBQcm9wcztcbiAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgb3B0aW9uczogTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwUHJvcHMpIHtcbiAgICBzdXBlcihpZCk7XG4gICAgdGhpcy5tYW51YWxBcHByb3ZhbEFjdGlvblByb3BzID0gb3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBwcm9kdWNlQWN0aW9uKFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgb3B0aW9uczogUHJvZHVjZUFjdGlvbk9wdGlvbnMsXG4gICk6IENvZGVQaXBlbGluZUFjdGlvbkZhY3RvcnlSZXN1bHQge1xuICAgIHN0YWdlLmFkZEFjdGlvbihuZXcgTWFudWFsQXBwcm92YWxBY3Rpb24odGhpcy5tYW51YWxBcHByb3ZhbEFjdGlvblByb3BzKSk7XG5cbiAgICByZXR1cm4geyBydW5PcmRlcnNDb25zdW1lZDogMSB9O1xuICB9XG59XG5cbmNsYXNzIERlcGxveW1lbnRTdGFnZSBleHRlbmRzIFN0YWdlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBlbnZpcm9ubWVudE5hbWU6IHN0cmluZyxcbiAgICBlbnY6IEVudmlyb25tZW50LFxuICAgIHN0YWNrTmFtZTogc3RyaW5nLFxuICAgIHN0YWNrQ2xhc3M6IG5ldyAoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IGFueSkgPT4gU3RhY2ssXG4gICAgYXBwU3RhY2tQcm9wczogYW55LFxuICAgIGdpdGh1YlJlcG86IHN0cmluZyxcbiAgICBnaXRodWJCcmFuY2g/OiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBlbnZpcm9ubWVudE5hbWUsIHsgZW52OiBlbnYgfSk7XG5cbiAgICBsZXQgc291cmNlID0gYGh0dHBzOi8vZ2l0aHViLmNvbS9PcmNhQnVzLyR7Z2l0aHViUmVwb31gO1xuICAgIGlmIChnaXRodWJCcmFuY2ggIT09IHVuZGVmaW5lZCAmJiBnaXRodWJCcmFuY2ggIT09IFwibWFpblwiKSB7XG4gICAgICBzb3VyY2UgPSBgJHtzb3VyY2V9L3RyZWUvJHtnaXRodWJCcmFuY2h9YDtcbiAgICB9XG5cbiAgICBuZXcgc3RhY2tDbGFzcyh0aGlzLCBzdGFja05hbWUsIHtcbiAgICAgIGVudjogZW52LFxuICAgICAgdGFnczoge1xuICAgICAgICBcInVtY2NyLW9yZzpQcm9kdWN0XCI6IFwiT3JjYUJ1c1wiLFxuICAgICAgICBcInVtY2NyLW9yZzpDcmVhdG9yXCI6IFwiQ0RLXCIsXG4gICAgICAgIFwidW1jY3Itb3JnOlNlcnZpY2VcIjogc3RhY2tOYW1lLFxuICAgICAgICBcInVtY2NyLW9yZzpTb3VyY2VcIjogc291cmNlLFxuICAgICAgfSxcbiAgICAgIC4uLmFwcFN0YWNrUHJvcHMsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBGYWlsT25EcmlmdEJ1aWxkU3RlcFByb3BzIHtcbiAgLyoqXG4gICAqIEFXUyBhY2NvdW50IGFuZCByZWdpb24gd2hlcmUgdGhlIGRyaWZ0IGNoZWNrIHJ1bnMuXG4gICAqIFVzZWQgdG8gYXNzdW1lIHRoZSBDREsgbG9va3VwIHJvbGUgYW5kIHNldCBBV1NfREVGQVVMVF9SRUdJT04uXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50RW52OiBFbnZpcm9ubWVudDtcbiAgLyoqXG4gICAqIEZ1bGx5IHF1YWxpZmllZCBDREsgc3RhY2sgSUQgdG8gY2hlY2sgZm9yIGRyaWZ0LlxuICAgKlxuICAgKiBGb3JtYXQ6IGA8cm9vdFN0YWNrPi88Y29uc3RydWN0SWQ+LzxlbnZOYW1lPi88c3RhY2tOYW1lPmBcbiAgICpcbiAgICogRXhhbXBsZTogYERldlN0YWNrL0RlcGxveW1lbnRQaXBlbGluZS9PcmNhQnVzQmV0YS9UZXN0U3RhY2tgXG4gICAqL1xuICByZWFkb25seSBzdGFja0lkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDREsgQ0xJIGVudHJ5cG9pbnQgdXNlZCB0byBydW4gdGhlIGRyaWZ0IGNvbW1hbmQuXG4gICAqIEV4YW1wbGVzOiBcInBucG0gY2RrXCIsIFwicG5wbSBjZGstc3RhdGVmdWxcIiwgXCJwbnBtIGNkay1zdGF0ZWxlc3NcIi5cbiAgICogTXVzdCBzdXBwb3J0OiBcImRyaWZ0IDxzdGFja0lkPlwiLlxuICAgKi9cbiAgcmVhZG9ubHkgY2RrQ29tbWFuZDogc3RyaW5nO1xuICAvKipcbiAgICogQ29tbWFuZCB0byBpbnN0YWxsIGRlcGVuZGVuY2llcyBiZWZvcmUgcnVubmluZyBDREsuXG4gICAqIElmIHlvdXIgYXBwIGlzIGluIGEgc3ViZGlyZWN0b3J5LCBwcmVmaXggd2l0aCBcImNkIDxkaXI+ICYmXCIuXG4gICAqIEV4YW1wbGU6IFwiY2QgZGV2ICYmIHBucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZSAtLWlnbm9yZS1zY3JpcHRzXCJcbiAgICpcbiAgICogRGVmYXVsdDogXCJwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1pZ25vcmUtc2NyaXB0c1wiXG4gICAqL1xuICByZWFkb25seSBpbnN0YWxsQ29tbWFuZD86IHN0cmluZztcbn1cblxuY2xhc3MgRmFpbE9uRHJpZnRCdWlsZFN0ZXAgZXh0ZW5kcyBDb2RlQnVpbGRTdGVwIHtcbiAgY29uc3RydWN0b3IoXG4gICAgaWQ6IHN0cmluZyxcbiAgICB7XG4gICAgICBhY2NvdW50RW52LFxuICAgICAgc3RhY2tJZCxcbiAgICAgIGNka0NvbW1hbmQsXG4gICAgICBpbnN0YWxsQ29tbWFuZCxcbiAgICB9OiBGYWlsT25EcmlmdEJ1aWxkU3RlcFByb3BzLFxuICApIHtcbiAgICBjb25zdCBjZGtJbnN0YWxsID0gaW5zdGFsbENvbW1hbmRcbiAgICAgID8gaW5zdGFsbENvbW1hbmRcbiAgICAgIDogXCJwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1pZ25vcmUtc2NyaXB0c1wiO1xuXG4gICAgc3VwZXIoaWQsIHtcbiAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgIFwibm9kZSAtdlwiLFxuICAgICAgICBcIm5wbSBpbnN0YWxsIC0tZ2xvYmFsIGNvcmVwYWNrQGxhdGVzdFwiLFxuICAgICAgICBcImNvcmVwYWNrIC0tdmVyc2lvblwiLFxuICAgICAgICBcImNvcmVwYWNrIGVuYWJsZVwiLFxuICAgICAgICBjZGtJbnN0YWxsLFxuXG4gICAgICAgIGBMT09LVVBfUk9MRV9BUk49XCJhcm46YXdzOmlhbTo6JHthY2NvdW50RW52LmFjY291bnR9OnJvbGUvY2RrLWhuYjY1OWZkcy1sb29rdXAtcm9sZS0ke2FjY291bnRFbnYuYWNjb3VudH0tJHthY2NvdW50RW52LnJlZ2lvbn1cImAsXG4gICAgICAgICdTRVNTSU9OX05BTUU9XCJkcmlmdC1jaGVja1wiJyxcbiAgICAgICAgJ3JlYWQgQVdTX0FDQ0VTU19LRVlfSUQgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZIEFXU19TRVNTSU9OX1RPS0VOIDwgPChhd3Mgc3RzIGFzc3VtZS1yb2xlIC0tcm9sZS1hcm4gXCIkTE9PS1VQX1JPTEVfQVJOXCIgLS1yb2xlLXNlc3Npb24tbmFtZSBcIiRTRVNTSU9OX05BTUVcIiAtLWR1cmF0aW9uLXNlY29uZHMgOTAwIC0tcXVlcnkgXFwnQ3JlZGVudGlhbHMuW0FjY2Vzc0tleUlkLFNlY3JldEFjY2Vzc0tleSxTZXNzaW9uVG9rZW5dXFwnIC0tb3V0cHV0IHRleHQpJyxcbiAgICAgICAgXCJleHBvcnQgQVdTX0FDQ0VTU19LRVlfSUQgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZIEFXU19TRVNTSU9OX1RPS0VOXCIsXG4gICAgICAgIGBleHBvcnQgQVdTX0RFRkFVTFRfUkVHSU9OPVwiJHthY2NvdW50RW52LnJlZ2lvbn1cImAsXG4gICAgICAgIFwiYXdzIHN0cyBnZXQtY2FsbGVyLWlkZW50aXR5XCIsXG5cbiAgICAgICAgYGlmICR7Y2RrQ29tbWFuZH0gbHMgfCBncmVwIC1GcSBcIiR7c3RhY2tJZH1cIjsgdGhlbiBlY2hvIFwiU3RhY2sgJHtzdGFja0lkfSBmb3VuZDsgY2hlY2tpbmcgZm9yIGRyaWZ0Li4uXCI7ICR7Y2RrQ29tbWFuZH0gZHJpZnQgXCIke3N0YWNrSWR9XCIgLWUgLS1mYWlsOyBlbHNlIGVjaG8gXCJTdGFjayBub3QgZm91bmQgaW4gY2RrIGxzOyBza2lwcGluZyBkcmlmdCBjaGVjay5cIjsgZmlgLFxuICAgICAgXSxcbiAgICAgIHJvbGVQb2xpY3lTdGF0ZW1lbnRzOiBbXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcInN0czpBc3N1bWVSb2xlXCJdLFxuICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgYGFybjphd3M6aWFtOjoke2FjY291bnRFbnYuYWNjb3VudH06cm9sZS9jZGstaG5iNjU5ZmRzLWxvb2t1cC1yb2xlLSR7YWNjb3VudEVudi5hY2NvdW50fS0ke2FjY291bnRFbnYucmVnaW9ufWAsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICBdXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
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.
|
|
43
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbPartitionedConstruct", version: "1.0.7" };
|
|
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.
|
|
78
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbNonPartitionedConstruct", version: "1.0.7" };
|
|
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.
|
|
58
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "1.0.7" };
|
|
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.
|
|
20
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.eventbridgeRule.SfnSlackNotification", version: "1.0.7" };
|
|
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.
|
|
60
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "1.0.7" };
|
|
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
|
package/monitored-queue/index.js
CHANGED
|
@@ -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.
|
|
16
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.monitoredQueue.MonitoredQueue", version: "1.0.7" };
|
|
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.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.namedLambdaRole.NamedLambdaRole", version: "1.0.7" };
|
|
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
|
@@ -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.
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.provider.ProviderFunction", version: "1.0.7" };
|
|
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.
|
|
26
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "1.0.7" };
|
|
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.
|
|
45
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "1.0.7" };
|
|
46
46
|
/**
|
|
47
47
|
* The shared security group that is used by compute resources to access the database.
|
|
48
48
|
* @param scope
|
package/shared-config/slack.js
CHANGED
|
@@ -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.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.slack.SlackAlerts", version: "1.0.7" };
|
|
15
15
|
/**
|
|
16
16
|
* Format the ARN for the slack alerts SNS topic for the current stack.
|
|
17
17
|
* @param stack
|