@orcabus/platform-cdk-constructs 0.0.10 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/.jsii +91 -6
  2. package/api-gateway/api-gateway.js +1 -1
  3. package/api-gateway/config.d.ts +14 -30
  4. package/api-gateway/config.js +1 -1
  5. package/deployment-stack-pipeline/artifact-bucket.js +1 -1
  6. package/deployment-stack-pipeline/pipeline.js +1 -1
  7. package/dynamodb/index.js +2 -2
  8. package/ecs/index.js +1 -1
  9. package/lambda/config.d.ts +1 -2
  10. package/lambda/config.js +6 -11
  11. package/lambda/index.js +10 -7
  12. package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/fastq_decompression/__init__.py +92 -0
  13. package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/fastq_decompression/create_helpers.py +34 -0
  14. package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/fastq_decompression/globals.py +13 -0
  15. package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/fastq_decompression/models.py +50 -0
  16. package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/fastq_decompression/query_helpers.py +51 -0
  17. package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/fastq_decompression/update_helpers.py +37 -0
  18. package/named-lambda-role/index.js +1 -1
  19. package/package.json +1 -1
  20. package/provider-function/index.js +1 -1
  21. package/shared-config/accounts.d.ts +24 -0
  22. package/shared-config/accounts.js +28 -0
  23. package/shared-config/database.d.ts +20 -0
  24. package/shared-config/database.js +24 -0
  25. package/shared-config/event-bridge.d.ts +12 -0
  26. package/shared-config/event-bridge.js +16 -0
  27. package/shared-config/file-manager.d.ts +2 -1
  28. package/shared-config/file-manager.js +14 -13
  29. package/shared-config/icav2.d.ts +4 -0
  30. package/shared-config/icav2.js +15 -0
  31. package/shared-config/index.d.ts +5 -0
  32. package/shared-config/index.js +7 -2
  33. package/shared-config/networking.d.ts +0 -4
  34. package/shared-config/networking.js +4 -8
  35. package/shared-config/s3.d.ts +3 -0
  36. package/shared-config/s3.js +14 -0
  37. package/utils/index.d.ts +7 -7
  38. package/utils/index.js +18 -26
package/.jsii CHANGED
@@ -4088,6 +4088,27 @@
4088
4088
  },
4089
4089
  "symbolId": "shared-config/index:"
4090
4090
  },
4091
+ "@orcabus/platform-cdk-constructs.sharedConfig.account": {
4092
+ "locationInModule": {
4093
+ "filename": "shared-config/index.ts",
4094
+ "line": 4
4095
+ },
4096
+ "symbolId": "shared-config/accounts:"
4097
+ },
4098
+ "@orcabus/platform-cdk-constructs.sharedConfig.database": {
4099
+ "locationInModule": {
4100
+ "filename": "shared-config/index.ts",
4101
+ "line": 5
4102
+ },
4103
+ "symbolId": "shared-config/database:"
4104
+ },
4105
+ "@orcabus/platform-cdk-constructs.sharedConfig.eventBridge": {
4106
+ "locationInModule": {
4107
+ "filename": "shared-config/index.ts",
4108
+ "line": 3
4109
+ },
4110
+ "symbolId": "shared-config/event-bridge:"
4111
+ },
4091
4112
  "@orcabus/platform-cdk-constructs.sharedConfig.fileManager": {
4092
4113
  "locationInModule": {
4093
4114
  "filename": "shared-config/index.ts",
@@ -4095,6 +4116,13 @@
4095
4116
  },
4096
4117
  "symbolId": "shared-config/file-manager:"
4097
4118
  },
4119
+ "@orcabus/platform-cdk-constructs.sharedConfig.icav2": {
4120
+ "locationInModule": {
4121
+ "filename": "shared-config/index.ts",
4122
+ "line": 7
4123
+ },
4124
+ "symbolId": "shared-config/icav2:"
4125
+ },
4098
4126
  "@orcabus/platform-cdk-constructs.sharedConfig.networking": {
4099
4127
  "locationInModule": {
4100
4128
  "filename": "shared-config/index.ts",
@@ -4102,6 +4130,13 @@
4102
4130
  },
4103
4131
  "symbolId": "shared-config/networking:"
4104
4132
  },
4133
+ "@orcabus/platform-cdk-constructs.sharedConfig.s3": {
4134
+ "locationInModule": {
4135
+ "filename": "shared-config/index.ts",
4136
+ "line": 6
4137
+ },
4138
+ "symbolId": "shared-config/s3:"
4139
+ },
4105
4140
  "@orcabus/platform-cdk-constructs.utils": {
4106
4141
  "locationInModule": {
4107
4142
  "filename": "index.ts",
@@ -4166,6 +4201,56 @@
4166
4201
  ],
4167
4202
  "symbolId": "api-gateway/api-gateway:ApiGwLogsConfig"
4168
4203
  },
4204
+ "@orcabus/platform-cdk-constructs.apigateway.LogsConfigProps": {
4205
+ "assembly": "@orcabus/platform-cdk-constructs",
4206
+ "datatype": true,
4207
+ "docs": {
4208
+ "stability": "experimental"
4209
+ },
4210
+ "fqn": "@orcabus/platform-cdk-constructs.apigateway.LogsConfigProps",
4211
+ "kind": "interface",
4212
+ "locationInModule": {
4213
+ "filename": "api-gateway/config.ts",
4214
+ "line": 6
4215
+ },
4216
+ "name": "LogsConfigProps",
4217
+ "namespace": "apigateway",
4218
+ "properties": [
4219
+ {
4220
+ "abstract": true,
4221
+ "docs": {
4222
+ "stability": "experimental",
4223
+ "summary": "Removal policy for the log group."
4224
+ },
4225
+ "immutable": true,
4226
+ "locationInModule": {
4227
+ "filename": "api-gateway/config.ts",
4228
+ "line": 15
4229
+ },
4230
+ "name": "removalPolicy",
4231
+ "type": {
4232
+ "fqn": "aws-cdk-lib.RemovalPolicy"
4233
+ }
4234
+ },
4235
+ {
4236
+ "abstract": true,
4237
+ "docs": {
4238
+ "stability": "experimental",
4239
+ "summary": "Retention policy for the API Gateway logs."
4240
+ },
4241
+ "immutable": true,
4242
+ "locationInModule": {
4243
+ "filename": "api-gateway/config.ts",
4244
+ "line": 10
4245
+ },
4246
+ "name": "retention",
4247
+ "type": {
4248
+ "fqn": "aws-cdk-lib.aws_logs.RetentionDays"
4249
+ }
4250
+ }
4251
+ ],
4252
+ "symbolId": "api-gateway/config:LogsConfigProps"
4253
+ },
4169
4254
  "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway": {
4170
4255
  "assembly": "@orcabus/platform-cdk-constructs",
4171
4256
  "base": "constructs.Construct",
@@ -6196,7 +6281,7 @@
6196
6281
  "kind": "class",
6197
6282
  "locationInModule": {
6198
6283
  "filename": "shared-config/networking.ts",
6199
- "line": 54
6284
+ "line": 49
6200
6285
  },
6201
6286
  "methods": [
6202
6287
  {
@@ -6207,7 +6292,7 @@
6207
6292
  },
6208
6293
  "locationInModule": {
6209
6294
  "filename": "shared-config/networking.ts",
6210
- "line": 61
6295
+ "line": 56
6211
6296
  },
6212
6297
  "name": "fromLookup",
6213
6298
  "parameters": [
@@ -6251,7 +6336,7 @@
6251
6336
  "kind": "class",
6252
6337
  "locationInModule": {
6253
6338
  "filename": "shared-config/networking.ts",
6254
- "line": 35
6339
+ "line": 30
6255
6340
  },
6256
6341
  "methods": [
6257
6342
  {
@@ -6262,7 +6347,7 @@
6262
6347
  },
6263
6348
  "locationInModule": {
6264
6349
  "filename": "shared-config/networking.ts",
6265
- "line": 41
6350
+ "line": 36
6266
6351
  },
6267
6352
  "name": "fromLookup",
6268
6353
  "parameters": [
@@ -6286,6 +6371,6 @@
6286
6371
  "symbolId": "shared-config/networking:OrcaBusVpc"
6287
6372
  }
6288
6373
  },
6289
- "version": "0.0.10",
6290
- "fingerprint": "/GqY40jNmjJd5aq8yJzsOO4dGox4HMPv1mCtE1HT2js="
6374
+ "version": "0.0.12",
6375
+ "fingerprint": "fsKeY0ag4WdNzQC4e4uAsx1C52xRIfQKYXlsOBevRB8="
6291
6376
  }
@@ -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: "0.0.10" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway", version: "0.0.12" };
19
19
  /**
20
20
  * The AWS region where the API Gateway is deployed.
21
21
  */
@@ -1,25 +1,18 @@
1
1
  import { RetentionDays } from "aws-cdk-lib/aws-logs";
2
2
  import { RemovalPolicy } from "aws-cdk-lib";
3
- import { StageName } from "../utils";
4
- export declare const DEFAULT_LOGS_CONFIG: {
5
- BETA: {
6
- retention: RetentionDays;
7
- removalPolicy: RemovalPolicy;
8
- };
9
- GAMMA: {
10
- retention: RetentionDays;
11
- removalPolicy: RemovalPolicy;
12
- };
13
- PROD: {
14
- retention: RetentionDays;
15
- removalPolicy: RemovalPolicy;
16
- };
17
- };
18
- export declare const DEFAULT_ALLOW_CORS_ORIGINS: {
19
- BETA: string[];
20
- GAMMA: string[];
21
- PROD: string[];
22
- };
3
+ import { StageName } from "../shared-config/accounts";
4
+ export interface LogsConfigProps {
5
+ /**
6
+ * Retention policy for the API Gateway logs.
7
+ */
8
+ readonly retention: RetentionDays;
9
+ /**
10
+ * Removal policy for the log group
11
+ */
12
+ readonly removalPolicy: RemovalPolicy;
13
+ }
14
+ export declare const DEFAULT_LOGS_CONFIG: Record<StageName, LogsConfigProps>;
15
+ export declare const DEFAULT_ALLOW_CORS_ORIGINS: Record<StageName, string[]>;
23
16
  export declare const DEFAULT_COGNITO_CLIENT_ID_PARAMETER_NAME_ARRAY: string[];
24
17
  export declare const DEFAULT_COGNITO_USER_POOL_ID_PARAMETER_NAME = "/data_portal/client/cog_user_pool_id";
25
18
  export declare const CERTIFICATE_ARN_PARAMETER_NAME = "/umccr/certificate_arn";
@@ -28,14 +21,5 @@ export declare const HOSTED_ZONE_ID_PARAMETER_NAME = "/hosted_zone/umccr/id";
28
21
  export declare const getDefaultApiGatewayConfiguration: (stage: StageName) => {
29
22
  cognitoClientIdParameterNameArray: string[];
30
23
  corsAllowOrigins: string[];
31
- apiGwLogsConfig: {
32
- retention: RetentionDays;
33
- removalPolicy: RemovalPolicy;
34
- } | {
35
- retention: RetentionDays;
36
- removalPolicy: RemovalPolicy;
37
- } | {
38
- retention: RetentionDays;
39
- removalPolicy: RemovalPolicy;
40
- };
24
+ apiGwLogsConfig: LogsConfigProps;
41
25
  };
@@ -38,4 +38,4 @@ const getDefaultApiGatewayConfiguration = (stage) => {
38
38
  };
39
39
  };
40
40
  exports.getDefaultApiGatewayConfiguration = getDefaultApiGatewayConfiguration;
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFxRDtBQUNyRCw2Q0FBNEM7QUFHL0IsUUFBQSxtQkFBbUIsR0FBRztJQUNqQyxJQUFJLEVBQUU7UUFDSixTQUFTLEVBQUUsd0JBQWEsQ0FBQyxTQUFTO1FBQ2xDLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87S0FDckM7SUFDRCxLQUFLLEVBQUU7UUFDTCxTQUFTLEVBQUUsd0JBQWEsQ0FBQyxTQUFTO1FBQ2xDLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87S0FDckM7SUFDRCxJQUFJLEVBQUU7UUFDSixTQUFTLEVBQUUsd0JBQWEsQ0FBQyxTQUFTO1FBQ2xDLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE1BQU07S0FDcEM7Q0FDRixDQUFDO0FBRVcsUUFBQSwwQkFBMEIsR0FBRztJQUN4QyxJQUFJLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztJQUN0QyxLQUFLLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztJQUN2QyxJQUFJLEVBQUUsQ0FBQywrQkFBK0IsRUFBRSwwQkFBMEIsQ0FBQztDQUNwRSxDQUFDO0FBRVcsUUFBQSw4Q0FBOEMsR0FBRztJQUM1RCxtREFBbUQsRUFBRSw2QkFBNkI7SUFDbEYsaUNBQWlDLEVBQUUsNENBQTRDO0NBQ2hGLENBQUM7QUFFVyxRQUFBLDJDQUEyQyxHQUN0RCxzQ0FBc0MsQ0FBQztBQUU1QixRQUFBLDhCQUE4QixHQUFHLHdCQUF3QixDQUFDO0FBQzFELFFBQUEsaUNBQWlDLEdBQUcseUJBQXlCLENBQUM7QUFDOUQsUUFBQSw2QkFBNkIsR0FBRyx1QkFBdUIsQ0FBQztBQUU5RCxNQUFNLGlDQUFpQyxHQUFHLENBQUMsS0FBZ0IsRUFBRSxFQUFFO0lBQ3BFLE9BQU87UUFDTCxpQ0FBaUMsRUFDL0Isc0RBQThDO1FBQ2hELGdCQUFnQixFQUFFLGtDQUEwQixDQUFDLEtBQUssQ0FBQztRQUNuRCxlQUFlLEVBQUUsMkJBQW1CLENBQUMsS0FBSyxDQUFDO0tBQzVDLENBQUM7QUFDSixDQUFDLENBQUM7QUFQVyxRQUFBLGlDQUFpQyxxQ0FPNUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXRlbnRpb25EYXlzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCI7XG5pbXBvcnQgeyBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBTdGFnZU5hbWUgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTE9HU19DT05GSUcgPSB7XG4gIEJFVEE6IHtcbiAgICByZXRlbnRpb246IFJldGVudGlvbkRheXMuVFdPX1dFRUtTLFxuICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgfSxcbiAgR0FNTUE6IHtcbiAgICByZXRlbnRpb246IFJldGVudGlvbkRheXMuVFdPX1dFRUtTLFxuICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgfSxcbiAgUFJPRDoge1xuICAgIHJldGVudGlvbjogUmV0ZW50aW9uRGF5cy5UV09fWUVBUlMsXG4gICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5SRVRBSU4sXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTExPV19DT1JTX09SSUdJTlMgPSB7XG4gIEJFVEE6IFtcImh0dHBzOi8vb3JjYXVpLmRldi51bWNjci5vcmdcIl0sXG4gIEdBTU1BOiBbXCJodHRwczovL29yY2F1aS5zdGcudW1jY3Iub3JnXCJdLFxuICBQUk9EOiBbXCJodHRwczovL29yY2F1aS5wcm9kLnVtY2NyLm9yZ1wiLCBcImh0dHBzOi8vb3JjYXVpLnVtY2NyLm9yZ1wiXSxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0NPR05JVE9fQ0xJRU5UX0lEX1BBUkFNRVRFUl9OQU1FX0FSUkFZID0gW1xuICBcIi9kYXRhX3BvcnRhbC9jbGllbnQvZGF0YTIvY29nX2FwcF9jbGllbnRfaWRfc3RhZ2VcIiwgLy8gcG9ydGFsIC0gVG9rZW5TZXJ2aWNlU3RhY2tcbiAgXCIvb3JjYXVpL2NvZ19hcHBfY2xpZW50X2lkX3N0YWdlXCIsIC8vIG9yY2F1aSAtIGh0dHBzOi8vZ2l0aHViLmNvbS91bWNjci9vcmNhLXVpXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9DT0dOSVRPX1VTRVJfUE9PTF9JRF9QQVJBTUVURVJfTkFNRSA9XG4gIFwiL2RhdGFfcG9ydGFsL2NsaWVudC9jb2dfdXNlcl9wb29sX2lkXCI7XG5cbmV4cG9ydCBjb25zdCBDRVJUSUZJQ0FURV9BUk5fUEFSQU1FVEVSX05BTUUgPSBcIi91bWNjci9jZXJ0aWZpY2F0ZV9hcm5cIjtcbmV4cG9ydCBjb25zdCBIT1NURURfWk9ORV9ET01BSU5fUEFSQU1FVEVSX05BTUUgPSBcIi9ob3N0ZWRfem9uZS91bWNjci9uYW1lXCI7XG5leHBvcnQgY29uc3QgSE9TVEVEX1pPTkVfSURfUEFSQU1FVEVSX05BTUUgPSBcIi9ob3N0ZWRfem9uZS91bWNjci9pZFwiO1xuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdEFwaUdhdGV3YXlDb25maWd1cmF0aW9uID0gKHN0YWdlOiBTdGFnZU5hbWUpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBjb2duaXRvQ2xpZW50SWRQYXJhbWV0ZXJOYW1lQXJyYXk6XG4gICAgICBERUZBVUxUX0NPR05JVE9fQ0xJRU5UX0lEX1BBUkFNRVRFUl9OQU1FX0FSUkFZLFxuICAgIGNvcnNBbGxvd09yaWdpbnM6IERFRkFVTFRfQUxMT1dfQ09SU19PUklHSU5TW3N0YWdlXSxcbiAgICBhcGlHd0xvZ3NDb25maWc6IERFRkFVTFRfTE9HU19DT05GSUdbc3RhZ2VdLFxuICB9O1xufTtcbiJdfQ==
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFtRDtBQUNuRCw2Q0FBMEM7QUFnQjdCLFFBQUEsbUJBQW1CLEdBQXVDO0lBQ25FLElBQUksRUFBRTtRQUNGLFNBQVMsRUFBRSx3QkFBYSxDQUFDLFNBQVM7UUFDbEMsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztLQUN2QztJQUNELEtBQUssRUFBRTtRQUNILFNBQVMsRUFBRSx3QkFBYSxDQUFDLFNBQVM7UUFDbEMsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztLQUN2QztJQUNELElBQUksRUFBRTtRQUNGLFNBQVMsRUFBRSx3QkFBYSxDQUFDLFNBQVM7UUFDbEMsYUFBYSxFQUFFLDJCQUFhLENBQUMsTUFBTTtLQUN0QztDQUNKLENBQUM7QUFFVyxRQUFBLDBCQUEwQixHQUFnQztJQUNuRSxJQUFJLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztJQUN0QyxLQUFLLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztJQUN2QyxJQUFJLEVBQUUsQ0FBQywrQkFBK0IsRUFBRSwwQkFBMEIsQ0FBQztDQUN0RSxDQUFDO0FBRVcsUUFBQSw4Q0FBOEMsR0FBRztJQUMxRCxtREFBbUQsRUFBRSw2QkFBNkI7SUFDbEYsaUNBQWlDLEVBQUUsNENBQTRDO0NBQ2xGLENBQUM7QUFFVyxRQUFBLDJDQUEyQyxHQUNwRCxzQ0FBc0MsQ0FBQztBQUU5QixRQUFBLDhCQUE4QixHQUFHLHdCQUF3QixDQUFDO0FBQzFELFFBQUEsaUNBQWlDLEdBQUcseUJBQXlCLENBQUM7QUFDOUQsUUFBQSw2QkFBNkIsR0FBRyx1QkFBdUIsQ0FBQztBQUU5RCxNQUFNLGlDQUFpQyxHQUFHLENBQUMsS0FBZ0IsRUFBRSxFQUFFO0lBQ2xFLE9BQU87UUFDSCxpQ0FBaUMsRUFDakMsc0RBQThDO1FBQzlDLGdCQUFnQixFQUFFLGtDQUEwQixDQUFDLEtBQUssQ0FBQztRQUNuRCxlQUFlLEVBQUUsMkJBQW1CLENBQUMsS0FBSyxDQUFDO0tBQzlDLENBQUM7QUFDTixDQUFDLENBQUM7QUFQVyxRQUFBLGlDQUFpQyxxQ0FPNUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JldGVudGlvbkRheXN9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiO1xuaW1wb3J0IHtSZW1vdmFsUG9saWN5fSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7U3RhZ2VOYW1lfSBmcm9tIFwiLi4vc2hhcmVkLWNvbmZpZy9hY2NvdW50c1wiO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nc0NvbmZpZ1Byb3BzIHtcbiAgICAvKipcbiAgICAgKiBSZXRlbnRpb24gcG9saWN5IGZvciB0aGUgQVBJIEdhdGV3YXkgbG9ncy5cbiAgICAgKi9cbiAgICByZWFkb25seSByZXRlbnRpb246IFJldGVudGlvbkRheXMsXG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmFsIHBvbGljeSBmb3IgdGhlIGxvZyBncm91cFxuICAgICAqL1xuICAgIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3k7XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xPR1NfQ09ORklHOiBSZWNvcmQ8U3RhZ2VOYW1lLCBMb2dzQ29uZmlnUHJvcHM+ID0ge1xuICAgIEJFVEE6IHtcbiAgICAgICAgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0sXG4gICAgR0FNTUE6IHtcbiAgICAgICAgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0sXG4gICAgUFJPRDoge1xuICAgICAgICByZXRlbnRpb246IFJldGVudGlvbkRheXMuVFdPX1lFQVJTLFxuICAgICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LlJFVEFJTixcbiAgICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQUxMT1dfQ09SU19PUklHSU5TOiBSZWNvcmQ8U3RhZ2VOYW1lLCBzdHJpbmdbXT4gPSB7XG4gICAgQkVUQTogW1wiaHR0cHM6Ly9vcmNhdWkuZGV2LnVtY2NyLm9yZ1wiXSxcbiAgICBHQU1NQTogW1wiaHR0cHM6Ly9vcmNhdWkuc3RnLnVtY2NyLm9yZ1wiXSxcbiAgICBQUk9EOiBbXCJodHRwczovL29yY2F1aS5wcm9kLnVtY2NyLm9yZ1wiLCBcImh0dHBzOi8vb3JjYXVpLnVtY2NyLm9yZ1wiXSxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0NPR05JVE9fQ0xJRU5UX0lEX1BBUkFNRVRFUl9OQU1FX0FSUkFZID0gW1xuICAgIFwiL2RhdGFfcG9ydGFsL2NsaWVudC9kYXRhMi9jb2dfYXBwX2NsaWVudF9pZF9zdGFnZVwiLCAvLyBwb3J0YWwgLSBUb2tlblNlcnZpY2VTdGFja1xuICAgIFwiL29yY2F1aS9jb2dfYXBwX2NsaWVudF9pZF9zdGFnZVwiLCAvLyBvcmNhdWkgLSBodHRwczovL2dpdGh1Yi5jb20vdW1jY3Ivb3JjYS11aVxuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09HTklUT19VU0VSX1BPT0xfSURfUEFSQU1FVEVSX05BTUUgPVxuICAgIFwiL2RhdGFfcG9ydGFsL2NsaWVudC9jb2dfdXNlcl9wb29sX2lkXCI7XG5cbmV4cG9ydCBjb25zdCBDRVJUSUZJQ0FURV9BUk5fUEFSQU1FVEVSX05BTUUgPSBcIi91bWNjci9jZXJ0aWZpY2F0ZV9hcm5cIjtcbmV4cG9ydCBjb25zdCBIT1NURURfWk9ORV9ET01BSU5fUEFSQU1FVEVSX05BTUUgPSBcIi9ob3N0ZWRfem9uZS91bWNjci9uYW1lXCI7XG5leHBvcnQgY29uc3QgSE9TVEVEX1pPTkVfSURfUEFSQU1FVEVSX05BTUUgPSBcIi9ob3N0ZWRfem9uZS91bWNjci9pZFwiO1xuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdEFwaUdhdGV3YXlDb25maWd1cmF0aW9uID0gKHN0YWdlOiBTdGFnZU5hbWUpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjb2duaXRvQ2xpZW50SWRQYXJhbWV0ZXJOYW1lQXJyYXk6XG4gICAgICAgIERFRkFVTFRfQ09HTklUT19DTElFTlRfSURfUEFSQU1FVEVSX05BTUVfQVJSQVksXG4gICAgICAgIGNvcnNBbGxvd09yaWdpbnM6IERFRkFVTFRfQUxMT1dfQ09SU19PUklHSU5TW3N0YWdlXSxcbiAgICAgICAgYXBpR3dMb2dzQ29uZmlnOiBERUZBVUxUX0xPR1NfQ09ORklHW3N0YWdlXSxcbiAgICB9O1xufTtcbiJdfQ==
@@ -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: "0.0.10" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket", version: "0.0.12" };
17
17
  /**
18
18
  * The S3 bucket used to store artifacts for cross-deployment pipelines.
19
19
  */
@@ -31,7 +31,7 @@ exports.DEFAULT_SYNTH_STEP_PARTIAL_BUILD_SPEC = {
31
31
  * before using this construct.
32
32
  */
33
33
  class DeploymentStackPipeline extends constructs_1.Construct {
34
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "0.0.10" };
34
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "0.0.12" };
35
35
  /**
36
36
  * The code pipeline construct that is created.
37
37
  */
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: "0.0.10" };
43
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbPartitionedConstruct", version: "0.0.12" };
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: "0.0.10" };
78
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbNonPartitionedConstruct", version: "0.0.12" };
79
79
  table;
80
80
  constructor(scope, id, props) {
81
81
  super(scope, id);
package/ecs/index.js CHANGED
@@ -52,7 +52,7 @@ exports.LAMBDA_ARCHITECTURE_MAP = {
52
52
  ['ARM64']: lambda.Architecture.ARM_64
53
53
  };
54
54
  class EcsFargateTaskConstruct extends constructs_1.Construct {
55
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "0.0.10" };
55
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "0.0.12" };
56
56
  cluster;
57
57
  taskDefinition;
58
58
  securityGroup;
@@ -1,4 +1,4 @@
1
- import { StageName } from "../utils";
1
+ import { StageName } from "../shared-config/accounts";
2
2
  export declare const DEFAULT_ORCABUS_TOKEN_SECRET_ID = "orcabus/token-service-jwt";
3
3
  export declare const DEFAULT_HOSTNAME_SSM_PARAMETER = "/hosted_zone/umccr/name";
4
4
  export declare const MART_ENV_VARS: {
@@ -9,4 +9,3 @@ export declare const MART_ENV_VARS: {
9
9
  export declare const MART_S3_BUCKET: Record<StageName, string>;
10
10
  export declare const MART_S3_PREFIX = "athena-query-results/";
11
11
  export declare const MART_LAMBDA_FUNCTION_NAME = "orcavault";
12
- export declare const DEFAULT_ICAV2_ACCESS_TOKEN_SECRET_ID: Record<StageName, string>;
package/lambda/config.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_ICAV2_ACCESS_TOKEN_SECRET_ID = exports.MART_LAMBDA_FUNCTION_NAME = exports.MART_S3_PREFIX = exports.MART_S3_BUCKET = exports.MART_ENV_VARS = exports.DEFAULT_HOSTNAME_SSM_PARAMETER = exports.DEFAULT_ORCABUS_TOKEN_SECRET_ID = void 0;
4
- const utils_1 = require("../utils");
3
+ exports.MART_LAMBDA_FUNCTION_NAME = exports.MART_S3_PREFIX = exports.MART_S3_BUCKET = exports.MART_ENV_VARS = exports.DEFAULT_HOSTNAME_SSM_PARAMETER = exports.DEFAULT_ORCABUS_TOKEN_SECRET_ID = void 0;
4
+ const accounts_1 = require("../shared-config/accounts");
5
5
  exports.DEFAULT_ORCABUS_TOKEN_SECRET_ID = 'orcabus/token-service-jwt';
6
6
  exports.DEFAULT_HOSTNAME_SSM_PARAMETER = '/hosted_zone/umccr/name';
7
7
  exports.MART_ENV_VARS = {
@@ -10,15 +10,10 @@ exports.MART_ENV_VARS = {
10
10
  athenaDatabaseName: 'mart'
11
11
  };
12
12
  exports.MART_S3_BUCKET = {
13
- BETA: `data-sharing-artifacts-${utils_1.accountIdAlias.BETA}-${utils_1.region}`,
14
- GAMMA: `data-sharing-artifacts-${utils_1.accountIdAlias.GAMMA}-${utils_1.region}`,
15
- PROD: `data-sharing-artifacts-${utils_1.accountIdAlias.PROD}-${utils_1.region}`
13
+ BETA: `data-sharing-artifacts-${accounts_1.accountIdAlias.BETA}-${accounts_1.REGION}`,
14
+ GAMMA: `data-sharing-artifacts-${accounts_1.accountIdAlias.GAMMA}-${accounts_1.REGION}`,
15
+ PROD: `data-sharing-artifacts-${accounts_1.accountIdAlias.PROD}-${accounts_1.REGION}`
16
16
  };
17
17
  exports.MART_S3_PREFIX = 'athena-query-results/';
18
18
  exports.MART_LAMBDA_FUNCTION_NAME = 'orcavault';
19
- exports.DEFAULT_ICAV2_ACCESS_TOKEN_SECRET_ID = {
20
- BETA: 'ICAv2JWTKey-umccr-prod-service-dev', // pragma: allowlist secret
21
- GAMMA: 'ICAv2JWTKey-umccr-prod-service-staging', // pragma: allowlist secret
22
- PROD: 'ICAv2JWTKey-umccr-prod-service-production', // pragma: allowlist secret
23
- };
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9DQUEyRDtBQUU5QyxRQUFBLCtCQUErQixHQUFJLDJCQUEyQixDQUFBO0FBQzlELFFBQUEsOEJBQThCLEdBQUcseUJBQXlCLENBQUE7QUFHMUQsUUFBQSxhQUFhLEdBQUc7SUFDekIsbUJBQW1CLEVBQUUsV0FBVztJQUNoQyxvQkFBb0IsRUFBRSxXQUFXO0lBQ2pDLGtCQUFrQixFQUFFLE1BQU07Q0FDN0IsQ0FBQTtBQUVZLFFBQUEsY0FBYyxHQUE4QjtJQUNyRCxJQUFJLEVBQUUsMEJBQTBCLHNCQUFjLENBQUMsSUFBSSxJQUFJLGNBQU0sRUFBRTtJQUMvRCxLQUFLLEVBQUUsMEJBQTBCLHNCQUFjLENBQUMsS0FBSyxJQUFJLGNBQU0sRUFBRTtJQUNqRSxJQUFJLEVBQUUsMEJBQTBCLHNCQUFjLENBQUMsSUFBSSxJQUFJLGNBQU0sRUFBRTtDQUNsRSxDQUFBO0FBQ1ksUUFBQSxjQUFjLEdBQUcsdUJBQXVCLENBQUE7QUFDeEMsUUFBQSx5QkFBeUIsR0FBRyxXQUFXLENBQUE7QUFFdkMsUUFBQSxvQ0FBb0MsR0FBOEI7SUFDN0UsSUFBSSxFQUFFLG9DQUFvQyxFQUFFLDJCQUEyQjtJQUN2RSxLQUFLLEVBQUUsd0NBQXdDLEVBQUUsMkJBQTJCO0lBQzVFLElBQUksRUFBRSwyQ0FBMkMsRUFBRSwyQkFBMkI7Q0FDL0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YWNjb3VudElkQWxpYXMsIHJlZ2lvbiwgU3RhZ2VOYW1lfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1JDQUJVU19UT0tFTl9TRUNSRVRfSUQgPSAgJ29yY2FidXMvdG9rZW4tc2VydmljZS1qd3QnXG5leHBvcnQgY29uc3QgREVGQVVMVF9IT1NUTkFNRV9TU01fUEFSQU1FVEVSID0gJy9ob3N0ZWRfem9uZS91bWNjci9uYW1lJ1xuXG5cbmV4cG9ydCBjb25zdCBNQVJUX0VOVl9WQVJTID0ge1xuICAgIGF0aGVuYVdvcmtncm91cE5hbWU6ICdvcmNhaG91c2UnLFxuICAgIGF0aGVuYURhdGFzb3VyY2VOYW1lOiAnb3JjYXZhdWx0JyxcbiAgICBhdGhlbmFEYXRhYmFzZU5hbWU6ICdtYXJ0J1xufVxuXG5leHBvcnQgY29uc3QgTUFSVF9TM19CVUNLRVQ6IFJlY29yZDxTdGFnZU5hbWUsIHN0cmluZz4gPSB7XG4gICAgQkVUQTogYGRhdGEtc2hhcmluZy1hcnRpZmFjdHMtJHthY2NvdW50SWRBbGlhcy5CRVRBfS0ke3JlZ2lvbn1gLFxuICAgIEdBTU1BOiBgZGF0YS1zaGFyaW5nLWFydGlmYWN0cy0ke2FjY291bnRJZEFsaWFzLkdBTU1BfS0ke3JlZ2lvbn1gLFxuICAgIFBST0Q6IGBkYXRhLXNoYXJpbmctYXJ0aWZhY3RzLSR7YWNjb3VudElkQWxpYXMuUFJPRH0tJHtyZWdpb259YFxufVxuZXhwb3J0IGNvbnN0IE1BUlRfUzNfUFJFRklYID0gJ2F0aGVuYS1xdWVyeS1yZXN1bHRzLydcbmV4cG9ydCBjb25zdCBNQVJUX0xBTUJEQV9GVU5DVElPTl9OQU1FID0gJ29yY2F2YXVsdCdcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRDogUmVjb3JkPFN0YWdlTmFtZSwgc3RyaW5nPiA9IHtcbiAgQkVUQTogJ0lDQXYySldUS2V5LXVtY2NyLXByb2Qtc2VydmljZS1kZXYnLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgR0FNTUE6ICdJQ0F2MkpXVEtleS11bWNjci1wcm9kLXNlcnZpY2Utc3RhZ2luZycsIC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuICBQUk9EOiAnSUNBdjJKV1RLZXktdW1jY3ItcHJvZC1zZXJ2aWNlLXByb2R1Y3Rpb24nLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbn07Il19
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHdEQUE0RTtBQUUvRCxRQUFBLCtCQUErQixHQUFJLDJCQUEyQixDQUFBO0FBQzlELFFBQUEsOEJBQThCLEdBQUcseUJBQXlCLENBQUE7QUFHMUQsUUFBQSxhQUFhLEdBQUc7SUFDekIsbUJBQW1CLEVBQUUsV0FBVztJQUNoQyxvQkFBb0IsRUFBRSxXQUFXO0lBQ2pDLGtCQUFrQixFQUFFLE1BQU07Q0FDN0IsQ0FBQTtBQUVZLFFBQUEsY0FBYyxHQUE4QjtJQUNyRCxJQUFJLEVBQUUsMEJBQTBCLHlCQUFjLENBQUMsSUFBSSxJQUFJLGlCQUFNLEVBQUU7SUFDL0QsS0FBSyxFQUFFLDBCQUEwQix5QkFBYyxDQUFDLEtBQUssSUFBSSxpQkFBTSxFQUFFO0lBQ2pFLElBQUksRUFBRSwwQkFBMEIseUJBQWMsQ0FBQyxJQUFJLElBQUksaUJBQU0sRUFBRTtDQUNsRSxDQUFBO0FBQ1ksUUFBQSxjQUFjLEdBQUcsdUJBQXVCLENBQUE7QUFDeEMsUUFBQSx5QkFBeUIsR0FBRyxXQUFXLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FjY291bnRJZEFsaWFzLCBSRUdJT04sIFN0YWdlTmFtZX0gZnJvbSBcIi4uL3NoYXJlZC1jb25maWcvYWNjb3VudHNcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1JDQUJVU19UT0tFTl9TRUNSRVRfSUQgPSAgJ29yY2FidXMvdG9rZW4tc2VydmljZS1qd3QnXG5leHBvcnQgY29uc3QgREVGQVVMVF9IT1NUTkFNRV9TU01fUEFSQU1FVEVSID0gJy9ob3N0ZWRfem9uZS91bWNjci9uYW1lJ1xuXG5cbmV4cG9ydCBjb25zdCBNQVJUX0VOVl9WQVJTID0ge1xuICAgIGF0aGVuYVdvcmtncm91cE5hbWU6ICdvcmNhaG91c2UnLFxuICAgIGF0aGVuYURhdGFzb3VyY2VOYW1lOiAnb3JjYXZhdWx0JyxcbiAgICBhdGhlbmFEYXRhYmFzZU5hbWU6ICdtYXJ0J1xufVxuXG5leHBvcnQgY29uc3QgTUFSVF9TM19CVUNLRVQ6IFJlY29yZDxTdGFnZU5hbWUsIHN0cmluZz4gPSB7XG4gICAgQkVUQTogYGRhdGEtc2hhcmluZy1hcnRpZmFjdHMtJHthY2NvdW50SWRBbGlhcy5CRVRBfS0ke1JFR0lPTn1gLFxuICAgIEdBTU1BOiBgZGF0YS1zaGFyaW5nLWFydGlmYWN0cy0ke2FjY291bnRJZEFsaWFzLkdBTU1BfS0ke1JFR0lPTn1gLFxuICAgIFBST0Q6IGBkYXRhLXNoYXJpbmctYXJ0aWZhY3RzLSR7YWNjb3VudElkQWxpYXMuUFJPRH0tJHtSRUdJT059YFxufVxuZXhwb3J0IGNvbnN0IE1BUlRfUzNfUFJFRklYID0gJ2F0aGVuYS1xdWVyeS1yZXN1bHRzLydcbmV4cG9ydCBjb25zdCBNQVJUX0xBTUJEQV9GVU5DVElPTl9OQU1FID0gJ29yY2F2YXVsdCdcblxuIl19
package/lambda/index.js CHANGED
@@ -50,11 +50,13 @@ const path_1 = __importDefault(require("path"));
50
50
  const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
51
51
  const config_1 = require("./config");
52
52
  const utils_1 = require("../utils");
53
+ const accounts_1 = require("../shared-config/accounts");
54
+ const icav2_1 = require("../shared-config/icav2");
53
55
  function getPythonUvDockerImage() {
54
56
  return aws_cdk_lib_1.DockerImage.fromBuild(path_1.default.join(__dirname, 'build_python'));
55
57
  }
56
58
  class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
57
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "0.0.10" };
59
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "0.0.12" };
58
60
  // Class constructs, to be used for caching the layers
59
61
  // This means that if there are multiple lambdas throughout the stack
60
62
  // They will all use the same layer
@@ -274,7 +276,7 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
274
276
  'athena:GetTableMetadata',
275
277
  'athena:GetDataCatalog',
276
278
  ],
277
- resources: [`arn:aws:athena:${utils_1.region}:${utils_1.accountIdAlias[stageName]}:*`],
279
+ resources: [`arn:aws:athena:${accounts_1.REGION}:${accounts_1.accountIdAlias[stageName]}:*`],
278
280
  }));
279
281
  this.currentVersion.addToRolePolicy(
280
282
  // From https://docs.aws.amazon.com/athena/latest/ug/example-policies-workgroup.html
@@ -300,7 +302,7 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
300
302
  'athena:DeletePreparedStatement',
301
303
  ],
302
304
  resources: [
303
- `arn:aws:athena:${utils_1.region}:${utils_1.accountIdAlias[stageName]}:workgroup/${config_1.MART_ENV_VARS.athenaWorkgroupName}`,
305
+ `arn:aws:athena:${accounts_1.REGION}:${accounts_1.accountIdAlias[stageName]}:workgroup/${config_1.MART_ENV_VARS.athenaWorkgroupName}`,
304
306
  ],
305
307
  }));
306
308
  // Add read access to the S3 bucket
@@ -312,13 +314,14 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
312
314
  // Resolve the stage name by performing a reverse lookup using cdk.Aws.ACCOUNT_ID on accountIdAlias
313
315
  const stageName = (0, utils_1.resolveStageName)(this);
314
316
  // Set secret object
315
- const icav2AccessTokenSecretId = secretsManager.Secret.fromSecretNameV2(this, 'icav2AccessTokenSecretId', props.icav2AccessTokenSecretId ?? config_1.DEFAULT_ICAV2_ACCESS_TOKEN_SECRET_ID[stageName]);
317
+ const icav2AccessTokenSecretIdObj = secretsManager.Secret.fromSecretNameV2(this, 'icav2AccessTokenSecretId', props.icav2AccessTokenSecretId ?? icav2_1.icav2AccessTokenSecretId[stageName]);
316
318
  // Add permissions for the secret and SSM parameter
317
319
  // To the current version
318
- icav2AccessTokenSecretId.grantRead(this.currentVersion);
320
+ icav2AccessTokenSecretIdObj.grantRead(this.currentVersion);
319
321
  // Add environment variables
320
- this.addEnvironment('ICAV2_ACCESS_TOKEN_SECRET_ID', icav2AccessTokenSecretId.secretName);
322
+ this.addEnvironment('ICAV2_ACCESS_TOKEN_SECRET_ID', icav2AccessTokenSecretIdObj.secretName);
323
+ this.addEnvironment('ICAV2_BASE_URL', icav2_1.icav2BaseUrl);
321
324
  }
322
325
  }
323
326
  exports.PythonUvFunction = PythonUvFunction;
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2QkEsd0RBRUM7O0FBL0JELDhFQUF5RztBQUV6RywrREFBaUQ7QUFDakQsK0VBQWlFO0FBQ2pFLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MsdURBQXlDO0FBQ3pDLDZDQUF3QztBQUV4QyxnREFBd0I7QUFFeEIsdURBSWdDO0FBQ2hDLHFDQVNrQjtBQUNsQixvQ0FBa0U7QUFHbEUsU0FBZ0Isc0JBQXNCO0lBQ2xDLE9BQU8seUJBQVcsQ0FBQyxTQUFTLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBcUZELE1BQWEsZ0JBQWlCLFNBQVEsd0NBQWM7O0lBQ2hELHNEQUFzRDtJQUN0RCxxRUFBcUU7SUFDckUsbUNBQW1DO0lBQzNCLE1BQU0sQ0FBQyxvQkFBb0IsR0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUM5RSxNQUFNLENBQUMsU0FBUyxHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ25FLE1BQU0sQ0FBQyxVQUFVLEdBQXlDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDcEUsTUFBTSxDQUFDLFlBQVksR0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUU5RSxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTRCO1FBQ2xFLE1BQU0sT0FBTyxHQUFHO1lBQ1osR0FBRyxLQUFLO1lBQ1IsUUFBUSxFQUFFO2dCQUNOLEdBQUcsS0FBSyxDQUFDLFFBQVE7Z0JBQ2pCLFNBQVMsRUFBRTtvQkFDUCxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsU0FBUztvQkFDNUIsMkRBQTJEO29CQUMzRCxjQUFjLEVBQ1YsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsY0FBYyxJQUFJLE1B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QkFDL0IsZ0NBQWdDO2dCQUNoQyxnQ0FBZ0M7YUFDbkM7WUFDRCxTQUFTLEVBQUU7Z0JBQ1Asa0JBQWtCLGNBQU0sSUFBSSxzQkFBYyxDQUFDLFNBQVMsQ0FBQyxjQUFjLHNCQUFhLENBQUMsbUJBQW1CLEVBQUU7YUFDekc7U0FDSixDQUFDLENBQ0wsQ0FBQztRQUVGLG1DQUFtQztRQUNuQyxjQUFjLENBQUMsY0FBYyxDQUN6QixJQUFJLENBQUMsY0FBYyxFQUNuQixHQUFHLHVCQUFjLEdBQUcsQ0FDdkIsQ0FBQTtRQUVELDJDQUEyQztRQUMzQyxrQkFBa0IsQ0FBQyxXQUFXLENBQzFCLElBQUksQ0FBQyxjQUFjLENBQ3RCLENBQUE7SUFDTCxDQUFDO0lBRU8saUJBQWlCLENBQ3JCLEtBQTBCO1FBRTFCLG1HQUFtRztRQUNuRyxNQUFNLFNBQVMsR0FBRyxJQUFBLHdCQUFnQixFQUFDLElBQUksQ0FBQyxDQUFBO1FBRXhDLG9CQUFvQjtRQUNwQixNQUFNLHdCQUF3QixHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQ25FLElBQUksRUFBRSwwQkFBMEIsRUFDaEMsS0FBSyxDQUFDLHdCQUF3QixJQUFJLDZDQUFvQyxDQUFDLFNBQVMsQ0FBQyxDQUNwRixDQUFDO1FBRUYsbURBQW1EO1FBQ25ELHlCQUF5QjtRQUN6Qix3QkFBd0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXhELDRCQUE0QjtRQUM1QixJQUFJLENBQUMsY0FBYyxDQUNmLDhCQUE4QixFQUFFLHdCQUF3QixDQUFDLFVBQVUsQ0FDdEUsQ0FBQTtJQUNMLENBQUM7O0FBdlVMLDRDQXlVQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UHl0aG9uRnVuY3Rpb24sIFB5dGhvbkZ1bmN0aW9uUHJvcHMsIFB5dGhvbkxheWVyVmVyc2lvbn0gZnJvbSBcIkBhd3MtY2RrL2F3cy1sYW1iZGEtcHl0aG9uLWFscGhhXCI7XG5pbXBvcnQge0NvbnN0cnVjdH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0ICogYXMgc2VjcmV0c01hbmFnZXIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiO1xuaW1wb3J0ICogYXMgc3NtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3NtXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCAqIGFzIHMzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7RG9ja2VySW1hZ2V9IGZyb20gJ2F3cy1jZGstbGliJztcblxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHtcbiAgICBQYXJhbXNBbmRTZWNyZXRzTGF5ZXJWZXJzaW9uLFxuICAgIFBhcmFtc0FuZFNlY3JldHNMb2dMZXZlbCxcbiAgICBQYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHtcbiAgICAvLyBPcmNhYnVzIGRlZmF1bHRzXG4gICAgREVGQVVMVF9IT1NUTkFNRV9TU01fUEFSQU1FVEVSLCBERUZBVUxUX09SQ0FCVVNfVE9LRU5fU0VDUkVUX0lELFxuICAgIC8vIE1hcnQgZGVmYXVsdHNcbiAgICBNQVJUX0VOVl9WQVJTLCBNQVJUX0xBTUJEQV9GVU5DVElPTl9OQU1FLFxuICAgIE1BUlRfUzNfQlVDS0VULFxuICAgIE1BUlRfUzNfUFJFRklYLFxuICAgIC8vIElDQVYyIGRlZmF1bHRzXG4gICAgREVGQVVMVF9JQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEXG59IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHthY2NvdW50SWRBbGlhcywgcmVnaW9uLCByZXNvbHZlU3RhZ2VOYW1lfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpOiBEb2NrZXJJbWFnZSB7XG4gICAgcmV0dXJuIERvY2tlckltYWdlLmZyb21CdWlsZChwYXRoLmpvaW4oX19kaXJuYW1lLCAnYnVpbGRfcHl0aG9uJykpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yY2FidXNSZXNvdXJjZXNQcm9wcyB7XG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgb3JjYWJ1c1Rva2VuU2VjcmV0SWQsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQERFRkFVTFRfT1JDQUJVU19UT0tFTl9TRUNSRVRfSURcbiAgICAgKi9cbiAgICByZWFkb25seSBvcmNhYnVzVG9rZW5TZWNyZXRJZD86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBERUZBVUxUX0hPU1ROQU1FX1NTTV9QQVJBTUVURVJcbiAgICAgKi9cbiAgICByZWFkb25seSBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXMge1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIGF0aGVuYVdvcmtncm91cE5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX1dPUktHUk9VUF9OQU1FXG4gICAgICovXG4gICAgcmVhZG9ubHkgYXRoZW5hV29ya2dyb3VwTmFtZT86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgYXRoZW5hRGF0YXNvdXJjZU5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQE1BUlRfRU5WX1ZBUlMuYXRoZW5hRGF0YXNvdXJjZU5hbWVcbiAgICAgKi9cbiAgICByZWFkb25seSBhdGhlbmFEYXRhc291cmNlTmFtZT86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgYXRoZW5hRGF0YWJhc2VOYW1lLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBNQVJUX0VOVl9WQVJTLkFUSEVOQV9EQVRBQkFTRV9OQU1FXG4gICAgICovXG4gICAgcmVhZG9ubHkgYXRoZW5hRGF0YWJhc2VOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWNhdjJSZXNvdXJjZXNQcm9wcyB7XG4gICAgLyoqXG4gICAgICogVGhlIGlkIG9mIHRoZSBzZWNyZXQgdGhhdCBjb250YWlucyB0aGUgaWNhdjIgYWNjZXNzIHRva2VuXG4gICAgICogb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBAREVGQVVMVF9JQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEXG4gICAgICovXG4gICAgcmVhZG9ubHkgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkPzogc3RyaW5nXG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBQeXRob25VdkZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBQeXRob25GdW5jdGlvblByb3BzIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBvcmNhYnVzIGFwaSB0b29scyBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZU9yY2FidXNBcGlUb29sc0xheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgbWFydCBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICogTm90ZSB0aGF0IHRoZSBtYXJ0IGxheWVyIGlzIGEgbGl0dGxlIGhlYXZpZXIgdGhhbiB0aGUgb3JjYWJ1cyBhcGkgdG9vbHMgbGF5ZXJcbiAgICAgKiBTaW5jZSB3ZSByZXF1aXJlIHBhbmRhcyB0byBiZSBpbnN0YWxsZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBpbmNsdWRlTWFydExheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgaWNhdjIgbGF5ZXIgaW4gdGhlIGxhbWJkYSBmdW5jdGlvbiBidWlsZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGVJY2F2MkxheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgZmFzdGFwaSBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZUZhc3RBcGlMYXllcj86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIG9yY2FidXNUb2tlblJlc291cmNlcywgb3B0aW9uYWwsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG9cbiAgICAgKiBAREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCBhbmQgQERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUlxuICAgICAqIGZvciB0aGUgc2VjcmV0IGFuZCBTU00gcGFyYW1ldGVyIHJlc3BlY3RpdmVseVxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9yY2FidXNUb2tlblJlc291cmNlcz86IE9yY2FidXNSZXNvdXJjZXNQcm9wc1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgbWFydEVudmlyb25tZW50VmFyaWFibGVzLCBvcHRpb25hbCwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0b1xuICAgICAqIEBNQVJUX0VOVl9WQVJTLkFUSEVOQV9XT1JLR1JPVVBfTkFNRSwgQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX0RBVEFTT1VSQ0VfTkFNRVxuICAgICAqIGFuZCBATUFSVF9FTlZfVkFSUy5BVEhFTkFfREFUQUJBU0VfTkFNRSBmb3IgdGhlIGF0aGVuYSB3b3JrZ3JvdXAsIGRhdGFzb3VyY2UgYW5kIGRhdGFiYXNlIHJlc3BlY3RpdmVseVxuICAgICAqL1xuICAgIHJlYWRvbmx5IG1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcz86IE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgaWNhdjJSZXNvdXJjZXMsIG9wdGlvbmFsLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvXG4gICAgICogQERFRkFVTFRfSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRCBmb3IgdGhlIHNlY3JldFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGljYXYyUmVzb3VyY2VzPzogSWNhdjJSZXNvdXJjZXNQcm9wc1xufVxuXG5cbmV4cG9ydCBjbGFzcyBQeXRob25VdkZ1bmN0aW9uIGV4dGVuZHMgUHl0aG9uRnVuY3Rpb24ge1xuICAgIC8vIENsYXNzIGNvbnN0cnVjdHMsIHRvIGJlIHVzZWQgZm9yIGNhY2hpbmcgdGhlIGxheWVyc1xuICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgbGFtYmRhcyB0aHJvdWdob3V0IHRoZSBzdGFja1xuICAgIC8vIFRoZXkgd2lsbCBhbGwgdXNlIHRoZSBzYW1lIGxheWVyXG4gICAgcHJpdmF0ZSBzdGF0aWMgb3JjYWJ1c0FwaVRvb2xzTGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBtYXJ0TGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBpY2F2MkxheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBzdGF0aWMgZmFzdEFwaUxheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG5cbiAgICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUHl0aG9uVXZGdW5jdGlvblByb3BzKSB7XG4gICAgICAgIGNvbnN0IHV2UHJvcHMgPSB7XG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgLi4ucHJvcHMuYnVuZGxpbmcsXG4gICAgICAgICAgICAgICAgYnVpbGRBcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnByb3BzLmJ1bmRsaW5nPy5idWlsZEFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBUQVJHRVRQTEFURk9STSB0byBidWlsZCBhcmdzIGlmIGl0J3Mgbm90IGFscmVhZHkgc2V0XG4gICAgICAgICAgICAgICAgICAgIFRBUkdFVFBMQVRGT1JNOlxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuYnVuZGxpbmc/LmJ1aWxkQXJncz8uVEFSR0VUUExBVEZPUk0gPz8gbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjQuZG9ja2VyUGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbWFnZTogZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpLFxuICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZUJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2BybSAtcmYgJHtvdXRwdXREaXJ9L3BhbmRhcy90ZXN0c2BdO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFyYW1zQW5kU2VjcmV0czpcbiAgICAgICAgICAgICAgICBwcm9wcy5wYXJhbXNBbmRTZWNyZXRzID8/XG4gICAgICAgICAgICAgICAgUGFyYW1zQW5kU2VjcmV0c0xheWVyVmVyc2lvbi5mcm9tVmVyc2lvbihQYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMuVjFfMF8xMDMsIHtcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjYWNoZVNpemU6IDMwMCxcbiAgICAgICAgICAgICAgICAgICAgbG9nTGV2ZWw6IFBhcmFtc0FuZFNlY3JldHNMb2dMZXZlbC5ERUJVRyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkLCB1dlByb3BzKTtcblxuICAgICAgICBpZiAocHJvcHMuaW5jbHVkZU9yY2FidXNBcGlUb29sc0xheWVyKSB7XG4gICAgICAgICAgICAvKiBTZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIE9yY2FidXMgcmVzb3VyY2VzICovXG4gICAgICAgICAgICB0aGlzLnNldE9yY2FidXNSZXNvdXJjZXMocHJvcHMub3JjYWJ1c1Rva2VuUmVzb3VyY2VzID8/IHt9KVxuXG4gICAgICAgICAgICAvKiBCdWlsZCB0aGUgb3JjYWJ1cyBBcGkgdG9vbHMgbGF5ZXIgKi9cbiAgICAgICAgICAgIHRoaXMuYnVpbGRPcmNhYnVzQXBpVG9vbHNMYXllcihzY29wZSlcbiAgICAgICAgICAgIHRoaXMuYWRkTGF5ZXJzKDxQeXRob25MYXllclZlcnNpb24+UHl0aG9uVXZGdW5jdGlvbi5vcmNhYnVzQXBpVG9vbHNMYXllci5nZXQoc2NvcGUpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmluY2x1ZGVNYXJ0TGF5ZXIpIHtcbiAgICAgICAgICAgIC8qIFNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgbWFydCByZXNvdXJjZXMgKi9cbiAgICAgICAgICAgIHRoaXMuc2V0QXRoZW5hUmVzb3VyY2VzKHByb3BzLm1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcyA/PyB7fSlcblxuICAgICAgICAgICAgLyogQnVpbGQgdGhlIG1hcnQgbGF5ZXIgKi9cbiAgICAgICAgICAgIHRoaXMuYnVpbGRNYXJ0VG9vbHNMYXllcihzY29wZSlcbiAgICAgICAgICAgIHRoaXMuYWRkTGF5ZXJzKDxQeXRob25MYXllclZlcnNpb24+UHl0aG9uVXZGdW5jdGlvbi5tYXJ0TGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pbmNsdWRlSWNhdjJMYXllcikge1xuICAgICAgICAgICAgLyogU2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBpY2F2MiByZXNvdXJjZXMgKi9cbiAgICAgICAgICAgIHRoaXMuc2V0SWNhdjJSZXNvdXJjZXMocHJvcHMuaWNhdjJSZXNvdXJjZXMgPz8ge30pXG5cbiAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBpY2F2MiBsYXllciAqL1xuICAgICAgICAgICAgdGhpcy5idWlsZEljYXYyTGF5ZXIoc2NvcGUpXG4gICAgICAgICAgICB0aGlzLmFkZExheWVycyg8UHl0aG9uTGF5ZXJWZXJzaW9uPlB5dGhvblV2RnVuY3Rpb24uaWNhdjJMYXllci5nZXQoc2NvcGUpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmluY2x1ZGVGYXN0QXBpTGF5ZXIpIHtcbiAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBmYXN0YXBpIGxheWVyICovXG4gICAgICAgICAgICB0aGlzLmJ1aWxkRmFzdEFwaUxheWVyKHNjb3BlKVxuICAgICAgICAgICAgdGhpcy5hZGRMYXllcnMoPFB5dGhvbkxheWVyVmVyc2lvbj5QeXRob25VdkZ1bmN0aW9uLmZhc3RBcGlMYXllci5nZXQoc2NvcGUpKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE9yY2FidXNBcGlUb29sc0xheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCBvcmNhYnVzIGFwaSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5vcmNhYnVzQXBpVG9vbHNMYXllci5oYXMoc2NvcGUpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IG5ldyBQeXRob25MYXllclZlcnNpb24odGhpcywgJ29yY2FidXNBcGlUb29sc0xheWVyJywge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbGF5ZXJzL29yY2FidXNfYXBpX3Rvb2xzJyksXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZVJ1bnRpbWVzOiBbbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTJdLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjRdLFxuICAgICAgICAgICAgICAgIGxpY2Vuc2U6ICdHUEwzJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ29yY2FidXNBcGlUb29sc0xheWVyJyxcbiAgICAgICAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgICAgICAgICBpbWFnZTogZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kSG9va3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZUJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZnRlckJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwaXAgaW5zdGFsbCAke2lucHV0RGlyfSAtLXRhcmdldCAke291dHB1dERpcn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLW5hbWUgJ3BhbmRhcycgLWV4ZWMgcm0gLXJmIHt9L3Rlc3RzLyBcXFxcO2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLm9yY2FidXNBcGlUb29sc0xheWVyLnNldChzY29wZSwgbGF5ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE1hcnRUb29sc0xheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCB0aGUgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLmhhcyhzY29wZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbmV3IFB5dGhvbkxheWVyVmVyc2lvbih0aGlzLCAnbWFydFRvb2xzTGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYXllcnMvbWFydF90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdtYXJ0VG9vbHNMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC1uYW1lICdwYW5kYXMnIC1leGVjIHJtIC1yZiB7fS90ZXN0cy8gXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLnNldChzY29wZSwgbGF5ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZEljYXYyTGF5ZXIoc2NvcGU6IENvbnN0cnVjdCkge1xuICAgICAgICAvLyBPbmx5IGJ1aWxkIHRoZSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5pY2F2MkxheWVyLmhhcyhzY29wZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbmV3IFB5dGhvbkxheWVyVmVyc2lvbih0aGlzLCAnaWNhdjJUb29sc0xheWVyJywge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbGF5ZXJzL2ljYXYyX3Rvb2xzJyksXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZVJ1bnRpbWVzOiBbbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTJdLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjRdLFxuICAgICAgICAgICAgICAgIGxpY2Vuc2U6ICdHUEwzJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ2ljYXYyVG9vbHNMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC1uYW1lICdwYW5kYXMnIC1leGVjIHJtIC1yZiB7fS90ZXN0cy8gXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24uaWNhdjJMYXllci5zZXQoc2NvcGUsIGxheWVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRGYXN0QXBpTGF5ZXIoc2NvcGU6IENvbnN0cnVjdCkge1xuICAgICAgICAvLyBPbmx5IGJ1aWxkIHRoZSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5mYXN0QXBpTGF5ZXIuaGFzKHNjb3BlKSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHRoaXMsICdmYXN0QXBpTGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYXllcnMvZmFzdGFwaV90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdmYXN0QXBpTGF5ZXInLFxuICAgICAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHBpcCBpbnN0YWxsICR7aW5wdXREaXJ9IC0tdGFyZ2V0ICR7b3V0cHV0RGlyfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtbmFtZSAncGFuZGFzJyAtZXhlYyBybSAtcmYge30vdGVzdHMvIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLmZhc3RBcGlMYXllci5zZXQoc2NvcGUsIGxheWVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0T3JjYWJ1c1Jlc291cmNlcyhcbiAgICAgICAgcHJvcHM6IE9yY2FidXNSZXNvdXJjZXNQcm9wc1xuICAgICkge1xuICAgICAgICAvLyBTZXQgc2VjcmV0IG9iamVjdFxuICAgICAgICBjb25zdCBvcmNhYnVzVG9rZW5TZWNyZXRJZCA9IHNlY3JldHNNYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgICAgICAgdGhpcywgJ29yY2FidXNUb2tlblNlY3JldElkJyxcbiAgICAgICAgICAgIHByb3BzLm9yY2FidXNUb2tlblNlY3JldElkID8/IERFRkFVTFRfT1JDQUJVU19UT0tFTl9TRUNSRVRfSURcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZShcbiAgICAgICAgICAgIHRoaXMsICdob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUnLFxuICAgICAgICAgICAgcHJvcHMuaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lID8/IERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUixcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIEFkZCBwZXJtaXNzaW9ucyBmb3IgdGhlIHNlY3JldCBhbmQgU1NNIHBhcmFtZXRlclxuICAgICAgICAvLyBUbyB0aGUgY3VycmVudCB2ZXJzaW9uXG4gICAgICAgIG9yY2FidXNUb2tlblNlY3JldElkLmdyYW50UmVhZCh0aGlzLmN1cnJlbnRWZXJzaW9uKTtcbiAgICAgICAgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lLmdyYW50UmVhZCh0aGlzLmN1cnJlbnRWZXJzaW9uKVxuXG4gICAgICAgIC8vIEFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdPUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCcsIG9yY2FidXNUb2tlblNlY3JldElkLnNlY3JldE5hbWUsXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdIT1NUTkFNRV9TU01fUEFSQU1FVEVSX05BTUUnLCBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUucGFyYW1ldGVyTmFtZSxcbiAgICAgICAgKVxuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBzZXRBdGhlbmFSZXNvdXJjZXMoXG4gICAgICAgIHByb3BzOiBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXNcbiAgICApIHtcbiAgICAgICAgLy8gUmVzb2x2ZSB0aGUgc3RhZ2UgbmFtZSBieSBwZXJmb3JtaW5nIGEgcmV2ZXJzZSBsb29rdXAgdXNpbmcgY2RrLkF3cy5BQ0NPVU5UX0lEIG9uIGFjY291bnRJZEFsaWFzXG4gICAgICAgIGNvbnN0IHN0YWdlTmFtZSA9IHJlc29sdmVTdGFnZU5hbWUodGhpcylcblxuICAgICAgICBjb25zdCBhdGhlbmFTM0J1Y2tldCA9IHMzLkJ1Y2tldC5mcm9tQnVja2V0TmFtZShcbiAgICAgICAgICAgIHRoaXMsICdhdGhlbmFTM0J1Y2tldCcsXG4gICAgICAgICAgICBNQVJUX1MzX0JVQ0tFVFtzdGFnZU5hbWVdXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBhdGhlbmFGdW5jdGlvbk5hbWUgPSBsYW1iZGEuRnVuY3Rpb24uZnJvbUZ1bmN0aW9uTmFtZShcbiAgICAgICAgICAgIHRoaXMsICdsYW1iZGFGdW5jdGlvbk5hbWUnLCBNQVJUX0xBTUJEQV9GVU5DVElPTl9OQU1FXG4gICAgICAgIClcblxuICAgICAgICAvLyBBZGQgZW52IHZhcnNcbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGt2IHBhaXJzIG9mIE1BUlRfRU5WX1ZBUlNcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoTUFSVF9FTlZfVkFSUykpIHtcbiAgICAgICAgICAgIC8vIEFmdGVyXG4gICAgICAgICAgICBpZiAocHJvcHNba2V5IGFzIGtleW9mIE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoa2V5LCBwcm9wc1trZXkgYXMga2V5b2YgTWFydEVudmlyb25tZW50VmFyaWFibGVzXSEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGVybWlzc2lvbnNcbiAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgICAvLyBGcm9tIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdGhlbmEvbGF0ZXN0L3VnL2V4YW1wbGUtcG9saWNpZXMtd29ya2dyb3VwLmh0bWxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIC8vIFdvcmtncm91cCBsaXN0c1xuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RFbmdpbmVWZXJzaW9ucycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdFdvcmtHcm91cHMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3REYXRhQ2F0YWxvZ3MnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3REYXRhYmFzZXMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldERhdGFiYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0VGFibGVNZXRhZGF0YScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0VGFibGVNZXRhZGF0YScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0RGF0YUNhdGFsb2cnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6YXRoZW5hOiR7cmVnaW9ufToke2FjY291bnRJZEFsaWFzW3N0YWdlTmFtZV19OipgXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgICAvLyBGcm9tIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdGhlbmEvbGF0ZXN0L3VnL2V4YW1wbGUtcG9saWNpZXMtd29ya2dyb3VwLmh0bWxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIC8vIFdvcmtncm91cCBleGVjdXRpb25zXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6QmF0Y2hHZXRRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RRdWVyeUV4ZWN1dGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0YXJ0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0b3BRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlSZXN1bHRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXRRdWVyeVJlc3VsdHNTdHJlYW0nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkNyZWF0ZU5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldE5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkJhdGNoR2V0TmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdE5hbWVkUXVlcmllcycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6RGVsZXRlTmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6Q3JlYXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFByZXBhcmVkU3RhdGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0UHJlcGFyZWRTdGF0ZW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpVcGRhdGVQcmVwYXJlZFN0YXRlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6RGVsZXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgICAgIGBhcm46YXdzOmF0aGVuYToke3JlZ2lvbn06JHthY2NvdW50SWRBbGlhc1tzdGFnZU5hbWVdfTp3b3JrZ3JvdXAvJHtNQVJUX0VOVl9WQVJTLmF0aGVuYVdvcmtncm91cE5hbWV9YCxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBZGQgcmVhZCBhY2Nlc3MgdG8gdGhlIFMzIGJ1Y2tldFxuICAgICAgICBhdGhlbmFTM0J1Y2tldC5ncmFudFJlYWRXcml0ZShcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFZlcnNpb24sXG4gICAgICAgICAgICBgJHtNQVJUX1MzX1BSRUZJWH0qYFxuICAgICAgICApXG5cbiAgICAgICAgLy8gQWRkIGludm9rZSBhY2Nlc3MgdG8gdGhlIGxhbWJkYSBmdW5jdGlvblxuICAgICAgICBhdGhlbmFGdW5jdGlvbk5hbWUuZ3JhbnRJbnZva2UoXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWZXJzaW9uXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEljYXYyUmVzb3VyY2VzKFxuICAgICAgICBwcm9wczogSWNhdjJSZXNvdXJjZXNQcm9wc1xuICAgICkge1xuICAgICAgICAvLyBSZXNvbHZlIHRoZSBzdGFnZSBuYW1lIGJ5IHBlcmZvcm1pbmcgYSByZXZlcnNlIGxvb2t1cCB1c2luZyBjZGsuQXdzLkFDQ09VTlRfSUQgb24gYWNjb3VudElkQWxpYXNcbiAgICAgICAgY29uc3Qgc3RhZ2VOYW1lID0gcmVzb2x2ZVN0YWdlTmFtZSh0aGlzKVxuXG4gICAgICAgIC8vIFNldCBzZWNyZXQgb2JqZWN0XG4gICAgICAgIGNvbnN0IGljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZCA9IHNlY3JldHNNYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgICAgICAgdGhpcywgJ2ljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZCcsXG4gICAgICAgICAgICBwcm9wcy5pY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWQgPz8gREVGQVVMVF9JQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEW3N0YWdlTmFtZV1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBZGQgcGVybWlzc2lvbnMgZm9yIHRoZSBzZWNyZXQgYW5kIFNTTSBwYXJhbWV0ZXJcbiAgICAgICAgLy8gVG8gdGhlIGN1cnJlbnQgdmVyc2lvblxuICAgICAgICBpY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWQuZ3JhbnRSZWFkKHRoaXMuY3VycmVudFZlcnNpb24pO1xuXG4gICAgICAgIC8vIEFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEJywgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkLnNlY3JldE5hbWUsXG4gICAgICAgIClcbiAgICB9XG5cbn1cblxuXG5cblxuIl19
327
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2QkEsd0RBRUM7O0FBL0JELDhFQUF5RztBQUV6RywrREFBaUQ7QUFDakQsK0VBQWlFO0FBQ2pFLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MsdURBQXlDO0FBQ3pDLDZDQUF3QztBQUV4QyxnREFBd0I7QUFFeEIsdURBSWdDO0FBQ2hDLHFDQU9rQjtBQUNsQixvQ0FBMEM7QUFDMUMsd0RBQWlFO0FBQ2pFLGtEQUE4RTtBQUc5RSxTQUFnQixzQkFBc0I7SUFDbEMsT0FBTyx5QkFBVyxDQUFDLFNBQVMsQ0FBQyxjQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFxRkQsTUFBYSxnQkFBaUIsU0FBUSx3Q0FBYzs7SUFDaEQsc0RBQXNEO0lBQ3RELHFFQUFxRTtJQUNyRSxtQ0FBbUM7SUFDM0IsTUFBTSxDQUFDLG9CQUFvQixHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzlFLE1BQU0sQ0FBQyxTQUFTLEdBQXlDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbkUsTUFBTSxDQUFDLFVBQVUsR0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNwRSxNQUFNLENBQUMsWUFBWSxHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTlFLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEI7UUFDbEUsTUFBTSxPQUFPLEdBQUc7WUFDWixHQUFHLEtBQUs7WUFDUixRQUFRLEVBQUU7Z0JBQ04sR0FBRyxLQUFLLENBQUMsUUFBUTtnQkFDakIsU0FBUyxFQUFFO29CQUNQLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTO29CQUM1QiwyREFBMkQ7b0JBQzNELGNBQWMsRUFDVixLQUFLLENBQUMsUUFBUSxF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QUNoQyw2QkFBNkI7Z0JBQzdCLCtCQUErQjtnQkFDL0IsZ0NBQWdDO2dCQUNoQyxnQ0FBZ0M7YUFDbkM7WUFDRCxTQUFTLEVBQUU7Z0JBQ1Asa0JBQWtCLGlCQUFNLElBQUkseUJBQWMsQ0FBQyxTQUFTLENBQUMsY0FBYyxzQkFBYSxDQUFDLG1CQUFtQixFQUFFO2FBQ3pHO1NBQ0osQ0FBQyxDQUNMLENBQUM7UUFFRixtQ0FBbUM7UUFDbkMsY0FBYyxDQUFDLGNBQWMsQ0FDekIsSUFBSSxDQUFDLGNBQWMsRUFDbkIsR0FBRyx1QkFBYyxHQUFHLENBQ3ZCLENBQUE7UUFFRCwyQ0FBMkM7UUFDM0Msa0JBQWtCLENBQUMsV0FBVyxDQUMxQixJQUFJLENBQUMsY0FBYyxDQUN0QixDQUFBO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQixDQUNyQixLQUEwQjtRQUUxQixtR0FBbUc7UUFDbkcsTUFBTSxTQUFTLEdBQUcsSUFBQSx3QkFBZ0IsRUFBQyxJQUFJLENBQUMsQ0FBQTtRQUV4QyxvQkFBb0I7UUFDcEIsTUFBTSwyQkFBMkIsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUN0RSxJQUFJLEVBQUUsMEJBQTBCLEVBQ2hDLEtBQUssQ0FBQyx3QkFBd0IsSUFBSSxnQ0FBd0IsQ0FBQyxTQUFTLENBQUMsQ0FDeEUsQ0FBQztRQUVGLG1EQUFtRDtRQUNuRCx5QkFBeUI7UUFDekIsMkJBQTJCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUUzRCw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FDZiw4QkFBOEIsRUFBRSwyQkFBMkIsQ0FBQyxVQUFVLENBQ3pFLENBQUE7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUNmLGdCQUFnQixFQUFFLG9CQUFZLENBQ2pDLENBQUE7SUFDTCxDQUFDOztBQTFVTCw0Q0E0VUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1B5dGhvbkZ1bmN0aW9uLCBQeXRob25GdW5jdGlvblByb3BzLCBQeXRob25MYXllclZlcnNpb259IGZyb20gXCJAYXdzLWNkay9hd3MtbGFtYmRhLXB5dGhvbi1hbHBoYVwiO1xuaW1wb3J0IHtDb25zdHJ1Y3R9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCAqIGFzIHNlY3JldHNNYW5hZ2VyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIjtcbmltcG9ydCAqIGFzIHNzbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQge0RvY2tlckltYWdlfSBmcm9tICdhd3MtY2RrLWxpYic7XG5cbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7XG4gICAgUGFyYW1zQW5kU2VjcmV0c0xheWVyVmVyc2lvbixcbiAgICBQYXJhbXNBbmRTZWNyZXRzTG9nTGV2ZWwsXG4gICAgUGFyYW1zQW5kU2VjcmV0c1ZlcnNpb25zLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7XG4gICAgLy8gT3JjYWJ1cyBkZWZhdWx0c1xuICAgIERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUiwgREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCxcbiAgICAvLyBNYXJ0IGRlZmF1bHRzXG4gICAgTUFSVF9FTlZfVkFSUywgTUFSVF9MQU1CREFfRlVOQ1RJT05fTkFNRSxcbiAgICBNQVJUX1MzX0JVQ0tFVCxcbiAgICBNQVJUX1MzX1BSRUZJWCxcbn0gZnJvbSBcIi4vY29uZmlnXCI7XG5pbXBvcnQge3Jlc29sdmVTdGFnZU5hbWV9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHthY2NvdW50SWRBbGlhcywgUkVHSU9OfSBmcm9tIFwiLi4vc2hhcmVkLWNvbmZpZy9hY2NvdW50c1wiO1xuaW1wb3J0IHtpY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWQsIGljYXYyQmFzZVVybH0gZnJvbSBcIi4uL3NoYXJlZC1jb25maWcvaWNhdjJcIjtcblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpOiBEb2NrZXJJbWFnZSB7XG4gICAgcmV0dXJuIERvY2tlckltYWdlLmZyb21CdWlsZChwYXRoLmpvaW4oX19kaXJuYW1lLCAnYnVpbGRfcHl0aG9uJykpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yY2FidXNSZXNvdXJjZXNQcm9wcyB7XG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgb3JjYWJ1c1Rva2VuU2VjcmV0SWQsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQERFRkFVTFRfT1JDQUJVU19UT0tFTl9TRUNSRVRfSURcbiAgICAgKi9cbiAgICByZWFkb25seSBvcmNhYnVzVG9rZW5TZWNyZXRJZD86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBERUZBVUxUX0hPU1ROQU1FX1NTTV9QQVJBTUVURVJcbiAgICAgKi9cbiAgICByZWFkb25seSBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXMge1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIGF0aGVuYVdvcmtncm91cE5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX1dPUktHUk9VUF9OQU1FXG4gICAgICovXG4gICAgcmVhZG9ubHkgYXRoZW5hV29ya2dyb3VwTmFtZT86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgYXRoZW5hRGF0YXNvdXJjZU5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQE1BUlRfRU5WX1ZBUlMuYXRoZW5hRGF0YXNvdXJjZU5hbWVcbiAgICAgKi9cbiAgICByZWFkb25seSBhdGhlbmFEYXRhc291cmNlTmFtZT86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgYXRoZW5hRGF0YWJhc2VOYW1lLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBNQVJUX0VOVl9WQVJTLkFUSEVOQV9EQVRBQkFTRV9OQU1FXG4gICAgICovXG4gICAgcmVhZG9ubHkgYXRoZW5hRGF0YWJhc2VOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWNhdjJSZXNvdXJjZXNQcm9wcyB7XG4gICAgLyoqXG4gICAgICogVGhlIGlkIG9mIHRoZSBzZWNyZXQgdGhhdCBjb250YWlucyB0aGUgaWNhdjIgYWNjZXNzIHRva2VuXG4gICAgICogb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBAREVGQVVMVF9JQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEXG4gICAgICovXG4gICAgcmVhZG9ubHkgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkPzogc3RyaW5nXG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBQeXRob25VdkZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBQeXRob25GdW5jdGlvblByb3BzIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBvcmNhYnVzIGFwaSB0b29scyBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZU9yY2FidXNBcGlUb29sc0xheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgbWFydCBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICogTm90ZSB0aGF0IHRoZSBtYXJ0IGxheWVyIGlzIGEgbGl0dGxlIGhlYXZpZXIgdGhhbiB0aGUgb3JjYWJ1cyBhcGkgdG9vbHMgbGF5ZXJcbiAgICAgKiBTaW5jZSB3ZSByZXF1aXJlIHBhbmRhcyB0byBiZSBpbnN0YWxsZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBpbmNsdWRlTWFydExheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgaWNhdjIgbGF5ZXIgaW4gdGhlIGxhbWJkYSBmdW5jdGlvbiBidWlsZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGVJY2F2MkxheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgZmFzdGFwaSBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZUZhc3RBcGlMYXllcj86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIG9yY2FidXNUb2tlblJlc291cmNlcywgb3B0aW9uYWwsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG9cbiAgICAgKiBAREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCBhbmQgQERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUlxuICAgICAqIGZvciB0aGUgc2VjcmV0IGFuZCBTU00gcGFyYW1ldGVyIHJlc3BlY3RpdmVseVxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9yY2FidXNUb2tlblJlc291cmNlcz86IE9yY2FidXNSZXNvdXJjZXNQcm9wc1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgbWFydEVudmlyb25tZW50VmFyaWFibGVzLCBvcHRpb25hbCwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0b1xuICAgICAqIEBNQVJUX0VOVl9WQVJTLkFUSEVOQV9XT1JLR1JPVVBfTkFNRSwgQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX0RBVEFTT1VSQ0VfTkFNRVxuICAgICAqIGFuZCBATUFSVF9FTlZfVkFSUy5BVEhFTkFfREFUQUJBU0VfTkFNRSBmb3IgdGhlIGF0aGVuYSB3b3JrZ3JvdXAsIGRhdGFzb3VyY2UgYW5kIGRhdGFiYXNlIHJlc3BlY3RpdmVseVxuICAgICAqL1xuICAgIHJlYWRvbmx5IG1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcz86IE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgaWNhdjJSZXNvdXJjZXMsIG9wdGlvbmFsLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvXG4gICAgICogQERFRkFVTFRfSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRCBmb3IgdGhlIHNlY3JldFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGljYXYyUmVzb3VyY2VzPzogSWNhdjJSZXNvdXJjZXNQcm9wc1xufVxuXG5cbmV4cG9ydCBjbGFzcyBQeXRob25VdkZ1bmN0aW9uIGV4dGVuZHMgUHl0aG9uRnVuY3Rpb24ge1xuICAgIC8vIENsYXNzIGNvbnN0cnVjdHMsIHRvIGJlIHVzZWQgZm9yIGNhY2hpbmcgdGhlIGxheWVyc1xuICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgbGFtYmRhcyB0aHJvdWdob3V0IHRoZSBzdGFja1xuICAgIC8vIFRoZXkgd2lsbCBhbGwgdXNlIHRoZSBzYW1lIGxheWVyXG4gICAgcHJpdmF0ZSBzdGF0aWMgb3JjYWJ1c0FwaVRvb2xzTGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBtYXJ0TGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBpY2F2MkxheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBzdGF0aWMgZmFzdEFwaUxheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG5cbiAgICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUHl0aG9uVXZGdW5jdGlvblByb3BzKSB7XG4gICAgICAgIGNvbnN0IHV2UHJvcHMgPSB7XG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgLi4ucHJvcHMuYnVuZGxpbmcsXG4gICAgICAgICAgICAgICAgYnVpbGRBcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnByb3BzLmJ1bmRsaW5nPy5idWlsZEFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBUQVJHRVRQTEFURk9STSB0byBidWlsZCBhcmdzIGlmIGl0J3Mgbm90IGFscmVhZHkgc2V0XG4gICAgICAgICAgICAgICAgICAgIFRBUkdFVFBMQVRGT1JNOlxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuYnVuZGxpbmc/LmJ1aWxkQXJncz8uVEFSR0VUUExBVEZPUk0gPz8gbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjQuZG9ja2VyUGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbWFnZTogZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpLFxuICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZUJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2BybSAtcmYgJHtvdXRwdXREaXJ9L3BhbmRhcy90ZXN0c2BdO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFyYW1zQW5kU2VjcmV0czpcbiAgICAgICAgICAgICAgICBwcm9wcy5wYXJhbXNBbmRTZWNyZXRzID8/XG4gICAgICAgICAgICAgICAgUGFyYW1zQW5kU2VjcmV0c0xheWVyVmVyc2lvbi5mcm9tVmVyc2lvbihQYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMuVjFfMF8xMDMsIHtcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjYWNoZVNpemU6IDMwMCxcbiAgICAgICAgICAgICAgICAgICAgbG9nTGV2ZWw6IFBhcmFtc0FuZFNlY3JldHNMb2dMZXZlbC5ERUJVRyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkLCB1dlByb3BzKTtcblxuICAgICAgICBpZiAocHJvcHMuaW5jbHVkZU9yY2FidXNBcGlUb29sc0xheWVyKSB7XG4gICAgICAgICAgICAvKiBTZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIE9yY2FidXMgcmVzb3VyY2VzICovXG4gICAgICAgICAgICB0aGlzLnNldE9yY2FidXNSZXNvdXJjZXMocHJvcHMub3JjYWJ1c1Rva2VuUmVzb3VyY2VzID8/IHt9KVxuXG4gICAgICAgICAgICAvKiBCdWlsZCB0aGUgb3JjYWJ1cyBBcGkgdG9vbHMgbGF5ZXIgKi9cbiAgICAgICAgICAgIHRoaXMuYnVpbGRPcmNhYnVzQXBpVG9vbHNMYXllcihzY29wZSlcbiAgICAgICAgICAgIHRoaXMuYWRkTGF5ZXJzKDxQeXRob25MYXllclZlcnNpb24+UHl0aG9uVXZGdW5jdGlvbi5vcmNhYnVzQXBpVG9vbHNMYXllci5nZXQoc2NvcGUpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmluY2x1ZGVNYXJ0TGF5ZXIpIHtcbiAgICAgICAgICAgIC8qIFNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgbWFydCByZXNvdXJjZXMgKi9cbiAgICAgICAgICAgIHRoaXMuc2V0QXRoZW5hUmVzb3VyY2VzKHByb3BzLm1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcyA/PyB7fSlcblxuICAgICAgICAgICAgLyogQnVpbGQgdGhlIG1hcnQgbGF5ZXIgKi9cbiAgICAgICAgICAgIHRoaXMuYnVpbGRNYXJ0VG9vbHNMYXllcihzY29wZSlcbiAgICAgICAgICAgIHRoaXMuYWRkTGF5ZXJzKDxQeXRob25MYXllclZlcnNpb24+UHl0aG9uVXZGdW5jdGlvbi5tYXJ0TGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pbmNsdWRlSWNhdjJMYXllcikge1xuICAgICAgICAgICAgLyogU2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBpY2F2MiByZXNvdXJjZXMgKi9cbiAgICAgICAgICAgIHRoaXMuc2V0SWNhdjJSZXNvdXJjZXMocHJvcHMuaWNhdjJSZXNvdXJjZXMgPz8ge30pXG5cbiAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBpY2F2MiBsYXllciAqL1xuICAgICAgICAgICAgdGhpcy5idWlsZEljYXYyTGF5ZXIoc2NvcGUpXG4gICAgICAgICAgICB0aGlzLmFkZExheWVycyg8UHl0aG9uTGF5ZXJWZXJzaW9uPlB5dGhvblV2RnVuY3Rpb24uaWNhdjJMYXllci5nZXQoc2NvcGUpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmluY2x1ZGVGYXN0QXBpTGF5ZXIpIHtcbiAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBmYXN0YXBpIGxheWVyICovXG4gICAgICAgICAgICB0aGlzLmJ1aWxkRmFzdEFwaUxheWVyKHNjb3BlKVxuICAgICAgICAgICAgdGhpcy5hZGRMYXllcnMoPFB5dGhvbkxheWVyVmVyc2lvbj5QeXRob25VdkZ1bmN0aW9uLmZhc3RBcGlMYXllci5nZXQoc2NvcGUpKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE9yY2FidXNBcGlUb29sc0xheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCBvcmNhYnVzIGFwaSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5vcmNhYnVzQXBpVG9vbHNMYXllci5oYXMoc2NvcGUpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IG5ldyBQeXRob25MYXllclZlcnNpb24odGhpcywgJ29yY2FidXNBcGlUb29sc0xheWVyJywge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbGF5ZXJzL29yY2FidXNfYXBpX3Rvb2xzJyksXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZVJ1bnRpbWVzOiBbbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTJdLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjRdLFxuICAgICAgICAgICAgICAgIGxpY2Vuc2U6ICdHUEwzJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ29yY2FidXNBcGlUb29sc0xheWVyJyxcbiAgICAgICAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgICAgICAgICBpbWFnZTogZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kSG9va3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZUJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZnRlckJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwaXAgaW5zdGFsbCAke2lucHV0RGlyfSAtLXRhcmdldCAke291dHB1dERpcn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLW5hbWUgJ3BhbmRhcycgLWV4ZWMgcm0gLXJmIHt9L3Rlc3RzLyBcXFxcO2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLm9yY2FidXNBcGlUb29sc0xheWVyLnNldChzY29wZSwgbGF5ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE1hcnRUb29sc0xheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCB0aGUgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLmhhcyhzY29wZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbmV3IFB5dGhvbkxheWVyVmVyc2lvbih0aGlzLCAnbWFydFRvb2xzTGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYXllcnMvbWFydF90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdtYXJ0VG9vbHNMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC1uYW1lICdwYW5kYXMnIC1leGVjIHJtIC1yZiB7fS90ZXN0cy8gXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLnNldChzY29wZSwgbGF5ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZEljYXYyTGF5ZXIoc2NvcGU6IENvbnN0cnVjdCkge1xuICAgICAgICAvLyBPbmx5IGJ1aWxkIHRoZSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5pY2F2MkxheWVyLmhhcyhzY29wZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbmV3IFB5dGhvbkxheWVyVmVyc2lvbih0aGlzLCAnaWNhdjJUb29sc0xheWVyJywge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbGF5ZXJzL2ljYXYyX3Rvb2xzJyksXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZVJ1bnRpbWVzOiBbbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTJdLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjRdLFxuICAgICAgICAgICAgICAgIGxpY2Vuc2U6ICdHUEwzJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ2ljYXYyVG9vbHNMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC1uYW1lICdwYW5kYXMnIC1leGVjIHJtIC1yZiB7fS90ZXN0cy8gXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24uaWNhdjJMYXllci5zZXQoc2NvcGUsIGxheWVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRGYXN0QXBpTGF5ZXIoc2NvcGU6IENvbnN0cnVjdCkge1xuICAgICAgICAvLyBPbmx5IGJ1aWxkIHRoZSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5mYXN0QXBpTGF5ZXIuaGFzKHNjb3BlKSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHRoaXMsICdmYXN0QXBpTGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYXllcnMvZmFzdGFwaV90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdmYXN0QXBpTGF5ZXInLFxuICAgICAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHBpcCBpbnN0YWxsICR7aW5wdXREaXJ9IC0tdGFyZ2V0ICR7b3V0cHV0RGlyfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtbmFtZSAncGFuZGFzJyAtZXhlYyBybSAtcmYge30vdGVzdHMvIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLmZhc3RBcGlMYXllci5zZXQoc2NvcGUsIGxheWVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0T3JjYWJ1c1Jlc291cmNlcyhcbiAgICAgICAgcHJvcHM6IE9yY2FidXNSZXNvdXJjZXNQcm9wc1xuICAgICkge1xuICAgICAgICAvLyBTZXQgc2VjcmV0IG9iamVjdFxuICAgICAgICBjb25zdCBvcmNhYnVzVG9rZW5TZWNyZXRJZCA9IHNlY3JldHNNYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgICAgICAgdGhpcywgJ29yY2FidXNUb2tlblNlY3JldElkJyxcbiAgICAgICAgICAgIHByb3BzLm9yY2FidXNUb2tlblNlY3JldElkID8/IERFRkFVTFRfT1JDQUJVU19UT0tFTl9TRUNSRVRfSURcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZShcbiAgICAgICAgICAgIHRoaXMsICdob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUnLFxuICAgICAgICAgICAgcHJvcHMuaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lID8/IERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUixcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIEFkZCBwZXJtaXNzaW9ucyBmb3IgdGhlIHNlY3JldCBhbmQgU1NNIHBhcmFtZXRlclxuICAgICAgICAvLyBUbyB0aGUgY3VycmVudCB2ZXJzaW9uXG4gICAgICAgIG9yY2FidXNUb2tlblNlY3JldElkLmdyYW50UmVhZCh0aGlzLmN1cnJlbnRWZXJzaW9uKTtcbiAgICAgICAgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lLmdyYW50UmVhZCh0aGlzLmN1cnJlbnRWZXJzaW9uKVxuXG4gICAgICAgIC8vIEFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdPUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCcsIG9yY2FidXNUb2tlblNlY3JldElkLnNlY3JldE5hbWUsXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdIT1NUTkFNRV9TU01fUEFSQU1FVEVSX05BTUUnLCBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUucGFyYW1ldGVyTmFtZSxcbiAgICAgICAgKVxuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBzZXRBdGhlbmFSZXNvdXJjZXMoXG4gICAgICAgIHByb3BzOiBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXNcbiAgICApIHtcbiAgICAgICAgLy8gUmVzb2x2ZSB0aGUgc3RhZ2UgbmFtZSBieSBwZXJmb3JtaW5nIGEgcmV2ZXJzZSBsb29rdXAgdXNpbmcgY2RrLkF3cy5BQ0NPVU5UX0lEIG9uIGFjY291bnRJZEFsaWFzXG4gICAgICAgIGNvbnN0IHN0YWdlTmFtZSA9IHJlc29sdmVTdGFnZU5hbWUodGhpcylcblxuICAgICAgICBjb25zdCBhdGhlbmFTM0J1Y2tldCA9IHMzLkJ1Y2tldC5mcm9tQnVja2V0TmFtZShcbiAgICAgICAgICAgIHRoaXMsICdhdGhlbmFTM0J1Y2tldCcsXG4gICAgICAgICAgICBNQVJUX1MzX0JVQ0tFVFtzdGFnZU5hbWVdXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBhdGhlbmFGdW5jdGlvbk5hbWUgPSBsYW1iZGEuRnVuY3Rpb24uZnJvbUZ1bmN0aW9uTmFtZShcbiAgICAgICAgICAgIHRoaXMsICdsYW1iZGFGdW5jdGlvbk5hbWUnLCBNQVJUX0xBTUJEQV9GVU5DVElPTl9OQU1FXG4gICAgICAgIClcblxuICAgICAgICAvLyBBZGQgZW52IHZhcnNcbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGt2IHBhaXJzIG9mIE1BUlRfRU5WX1ZBUlNcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoTUFSVF9FTlZfVkFSUykpIHtcbiAgICAgICAgICAgIC8vIEFmdGVyXG4gICAgICAgICAgICBpZiAocHJvcHNba2V5IGFzIGtleW9mIE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoa2V5LCBwcm9wc1trZXkgYXMga2V5b2YgTWFydEVudmlyb25tZW50VmFyaWFibGVzXSEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGVybWlzc2lvbnNcbiAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgICAvLyBGcm9tIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdGhlbmEvbGF0ZXN0L3VnL2V4YW1wbGUtcG9saWNpZXMtd29ya2dyb3VwLmh0bWxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIC8vIFdvcmtncm91cCBsaXN0c1xuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RFbmdpbmVWZXJzaW9ucycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdFdvcmtHcm91cHMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3REYXRhQ2F0YWxvZ3MnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3REYXRhYmFzZXMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldERhdGFiYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0VGFibGVNZXRhZGF0YScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0VGFibGVNZXRhZGF0YScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0RGF0YUNhdGFsb2cnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6YXRoZW5hOiR7UkVHSU9OfToke2FjY291bnRJZEFsaWFzW3N0YWdlTmFtZV19OipgXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgICAvLyBGcm9tIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdGhlbmEvbGF0ZXN0L3VnL2V4YW1wbGUtcG9saWNpZXMtd29ya2dyb3VwLmh0bWxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIC8vIFdvcmtncm91cCBleGVjdXRpb25zXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6QmF0Y2hHZXRRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RRdWVyeUV4ZWN1dGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0YXJ0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0b3BRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlSZXN1bHRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXRRdWVyeVJlc3VsdHNTdHJlYW0nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkNyZWF0ZU5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldE5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkJhdGNoR2V0TmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdE5hbWVkUXVlcmllcycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6RGVsZXRlTmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6Q3JlYXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFByZXBhcmVkU3RhdGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0UHJlcGFyZWRTdGF0ZW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpVcGRhdGVQcmVwYXJlZFN0YXRlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6RGVsZXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgICAgIGBhcm46YXdzOmF0aGVuYToke1JFR0lPTn06JHthY2NvdW50SWRBbGlhc1tzdGFnZU5hbWVdfTp3b3JrZ3JvdXAvJHtNQVJUX0VOVl9WQVJTLmF0aGVuYVdvcmtncm91cE5hbWV9YCxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBZGQgcmVhZCBhY2Nlc3MgdG8gdGhlIFMzIGJ1Y2tldFxuICAgICAgICBhdGhlbmFTM0J1Y2tldC5ncmFudFJlYWRXcml0ZShcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFZlcnNpb24sXG4gICAgICAgICAgICBgJHtNQVJUX1MzX1BSRUZJWH0qYFxuICAgICAgICApXG5cbiAgICAgICAgLy8gQWRkIGludm9rZSBhY2Nlc3MgdG8gdGhlIGxhbWJkYSBmdW5jdGlvblxuICAgICAgICBhdGhlbmFGdW5jdGlvbk5hbWUuZ3JhbnRJbnZva2UoXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWZXJzaW9uXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEljYXYyUmVzb3VyY2VzKFxuICAgICAgICBwcm9wczogSWNhdjJSZXNvdXJjZXNQcm9wc1xuICAgICkge1xuICAgICAgICAvLyBSZXNvbHZlIHRoZSBzdGFnZSBuYW1lIGJ5IHBlcmZvcm1pbmcgYSByZXZlcnNlIGxvb2t1cCB1c2luZyBjZGsuQXdzLkFDQ09VTlRfSUQgb24gYWNjb3VudElkQWxpYXNcbiAgICAgICAgY29uc3Qgc3RhZ2VOYW1lID0gcmVzb2x2ZVN0YWdlTmFtZSh0aGlzKVxuXG4gICAgICAgIC8vIFNldCBzZWNyZXQgb2JqZWN0XG4gICAgICAgIGNvbnN0IGljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZE9iaiA9IHNlY3JldHNNYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgICAgICAgdGhpcywgJ2ljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZCcsXG4gICAgICAgICAgICBwcm9wcy5pY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWQgPz8gaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkW3N0YWdlTmFtZV1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBZGQgcGVybWlzc2lvbnMgZm9yIHRoZSBzZWNyZXQgYW5kIFNTTSBwYXJhbWV0ZXJcbiAgICAgICAgLy8gVG8gdGhlIGN1cnJlbnQgdmVyc2lvblxuICAgICAgICBpY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWRPYmouZ3JhbnRSZWFkKHRoaXMuY3VycmVudFZlcnNpb24pO1xuXG4gICAgICAgIC8vIEFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEJywgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkT2JqLnNlY3JldE5hbWUsXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdJQ0FWMl9CQVNFX1VSTCcsIGljYXYyQmFzZVVybCxcbiAgICAgICAgKVxuICAgIH1cblxufVxuXG5cblxuXG4iXX0=