@fjall/components-infrastructure 0.79.3 → 0.81.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/__tests__/setup.js +1 -78
- package/dist/lib/app.d.ts +39 -2
- package/dist/lib/app.js +85 -4
- package/dist/lib/aspects/resourceInventory.d.ts +41 -0
- package/dist/lib/aspects/resourceInventory.js +56 -0
- package/dist/lib/config/audit.d.ts +18 -0
- package/dist/lib/config/audit.js +22 -0
- package/dist/lib/config/aws/accountId.js +3 -3
- package/dist/lib/config/aws/ecrDefaultImage.js +7 -7
- package/dist/lib/config/aws/identityCenter.js +7 -8
- package/dist/lib/config/aws/identityCenterGroupMembership.js +6 -6
- package/dist/lib/config/aws/ipam.js +3 -3
- package/dist/lib/config/aws/ipamPoolId.js +4 -4
- package/dist/lib/config/aws/organisation.js +2 -3
- package/dist/lib/config/aws/organisationId.js +4 -4
- package/dist/lib/patterns/aws/auditRole.d.ts +44 -0
- package/dist/lib/patterns/aws/auditRole.js +58 -0
- package/dist/lib/patterns/aws/buildkite.js +12 -12
- package/dist/lib/patterns/aws/compute.d.ts +32 -13
- package/dist/lib/patterns/aws/compute.js +24 -14
- package/dist/lib/patterns/aws/database.d.ts +2 -1
- package/dist/lib/patterns/aws/database.js +7 -2
- package/dist/lib/patterns/aws/hostedZone.js +1 -1
- package/dist/lib/patterns/aws/index.d.ts +1 -0
- package/dist/lib/patterns/aws/index.js +2 -1
- package/dist/lib/patterns/aws/managedAccount.js +3 -4
- package/dist/lib/patterns/aws/storage.js +3 -2
- package/dist/lib/patterns/aws/subdomainHostedZone.js +2 -2
- package/dist/lib/resources/aws/audit/auditRole.d.ts +32 -0
- package/dist/lib/resources/aws/audit/auditRole.js +44 -0
- package/dist/lib/resources/aws/backup/backupPlan.js +3 -4
- package/dist/lib/resources/aws/backup/backupVault.js +3 -4
- package/dist/lib/resources/aws/base/awsStack.js +1 -2
- package/dist/lib/resources/aws/compute/ecs.d.ts +65 -11
- package/dist/lib/resources/aws/compute/ecs.js +293 -124
- package/dist/lib/resources/aws/compute/ecsFreeTier.js +1 -355
- package/dist/lib/resources/aws/compute/ecsSpot.js +1 -335
- package/dist/lib/resources/aws/compute/lambda.d.ts +10 -1
- package/dist/lib/resources/aws/compute/lambda.js +71 -4
- package/dist/lib/resources/aws/compute/utilities/capacityProviderDrainWaiter.js +1 -180
- package/dist/lib/resources/aws/database/database.js +1 -1
- package/dist/lib/resources/aws/database/rdsAurora.js +5 -5
- package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +7 -7
- package/dist/lib/resources/aws/database/rdsInstance.js +3 -3
- package/dist/lib/resources/aws/iam/identityCenter/assignment.js +2 -2
- package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.js +1 -1
- package/dist/lib/resources/aws/iam/identityCenter/group.js +1 -1
- package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +1 -1
- package/dist/lib/resources/aws/logging/cloudTrail.js +1 -1
- package/dist/lib/resources/aws/monitoring/monitoringRole.js +2 -3
- package/dist/lib/resources/aws/networking/ipamPool.js +1 -1
- package/dist/lib/resources/aws/networking/vpc.d.ts +1 -0
- package/dist/lib/resources/aws/networking/vpc.js +7 -3
- package/dist/lib/resources/aws/secrets/secret.js +1 -1
- package/dist/lib/resources/aws/storage/ecr.d.ts +1 -2
- package/dist/lib/resources/aws/storage/ecr.js +2 -2
- package/dist/lib/resources/aws/utilities/cfnOutput.js +1 -13
- package/dist/lib/resources/aws/utilities/codeBuild.d.ts +1 -2
- package/dist/lib/resources/aws/utilities/codeBuild.js +1 -1
- package/dist/lib/resources/aws/utilities/customResource.d.ts +2 -1
- package/dist/lib/resources/aws/utilities/customResource.js +1 -1
- package/dist/lib/utils/getStackOutput.js +2 -2
- package/package.json +6 -5
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { SingletonFunction as singletonFunction, Function, type Code, type Runtime, FunctionUrlAuthType, type FunctionUrlCorsOptions } from "aws-cdk-lib/aws-lambda";
|
|
2
|
-
import {
|
|
2
|
+
import { PolicyStatement, type IRole } from "aws-cdk-lib/aws-iam";
|
|
3
|
+
import { type IVpc } from "aws-cdk-lib/aws-ec2";
|
|
3
4
|
import { type Construct } from "constructs";
|
|
4
5
|
import { type KeyValue } from "../../../types";
|
|
6
|
+
import { type SecretImport } from "../secrets";
|
|
5
7
|
export interface lambdaFunctionProps {
|
|
6
8
|
code: Code;
|
|
7
9
|
handler: string;
|
|
8
10
|
lambdaDescription?: string;
|
|
9
11
|
roleDescription?: string;
|
|
10
12
|
runtime: Runtime;
|
|
13
|
+
vpc?: IVpc;
|
|
11
14
|
timeout?: number;
|
|
12
15
|
memorySize?: number;
|
|
13
16
|
inlinePolicy: PolicyStatement[];
|
|
@@ -16,9 +19,14 @@ export interface lambdaFunctionProps {
|
|
|
16
19
|
functionUrlCors?: FunctionUrlCorsOptions;
|
|
17
20
|
environment?: KeyValue;
|
|
18
21
|
tags?: KeyValue;
|
|
22
|
+
scheduleExpression?: string;
|
|
23
|
+
containerSecretsImport?: {
|
|
24
|
+
[key: string]: SecretImport;
|
|
25
|
+
};
|
|
19
26
|
}
|
|
20
27
|
export interface SingletonFunctionProps extends lambdaFunctionProps {
|
|
21
28
|
uuid?: string;
|
|
29
|
+
ephemeralStorageSize?: number;
|
|
22
30
|
}
|
|
23
31
|
export declare class SingletonFunction extends singletonFunction {
|
|
24
32
|
constructor(scope: Construct, id: string, props: SingletonFunctionProps);
|
|
@@ -35,4 +43,5 @@ export declare class LambdaFunction extends Function {
|
|
|
35
43
|
*/
|
|
36
44
|
get executionRole(): IRole | undefined;
|
|
37
45
|
private addPoliciesToRole;
|
|
46
|
+
private addContainerSecretsImportToRole;
|
|
38
47
|
}
|
|
@@ -3,8 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.LambdaFunction = exports.SingletonFunction = void 0;
|
|
4
4
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
5
|
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
6
|
+
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
7
|
+
const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
|
|
8
|
+
const aws_events_1 = require("aws-cdk-lib/aws-events");
|
|
9
|
+
const aws_events_targets_1 = require("aws-cdk-lib/aws-events-targets");
|
|
10
|
+
const aws_logs_1 = require("aws-cdk-lib/aws-logs");
|
|
11
|
+
const aws_secretsmanager_1 = require("aws-cdk-lib/aws-secretsmanager");
|
|
6
12
|
const uuid_1 = require("uuid");
|
|
7
|
-
const
|
|
13
|
+
const vpc_1 = require("../networking/vpc");
|
|
8
14
|
class SingletonFunction extends aws_lambda_1.SingletonFunction {
|
|
9
15
|
constructor(scope, id, props) {
|
|
10
16
|
super(scope, id, {
|
|
@@ -12,7 +18,10 @@ class SingletonFunction extends aws_lambda_1.SingletonFunction {
|
|
|
12
18
|
uuid: (0, uuid_1.v4)(),
|
|
13
19
|
timeout: aws_cdk_lib_1.Duration.seconds(300),
|
|
14
20
|
description: props.lambdaDescription || `${id} singleton lambda`,
|
|
15
|
-
runtime: props.runtime
|
|
21
|
+
runtime: props.runtime,
|
|
22
|
+
ephemeralStorageSize: props.ephemeralStorageSize
|
|
23
|
+
? aws_cdk_lib_1.Size.mebibytes(props.ephemeralStorageSize)
|
|
24
|
+
: undefined
|
|
16
25
|
});
|
|
17
26
|
// Add inline policies to the Lambda's auto-generated role
|
|
18
27
|
this.addPoliciesToRole(props.inlinePolicy);
|
|
@@ -32,8 +41,21 @@ class SingletonFunction extends aws_lambda_1.SingletonFunction {
|
|
|
32
41
|
exports.SingletonFunction = SingletonFunction;
|
|
33
42
|
class LambdaFunction extends aws_lambda_1.Function {
|
|
34
43
|
constructor(scope, id, props) {
|
|
44
|
+
// Explicitly set subnet selection to match VPC endpoint placement
|
|
45
|
+
// - With NAT: PRIVATE_WITH_EGRESS (can access internet via NAT)
|
|
46
|
+
// - Without NAT: PRIVATE_ISOLATED (can access VPC endpoints only, no internet)
|
|
47
|
+
let vpcSubnets;
|
|
48
|
+
if (props.vpc) {
|
|
49
|
+
const hasNatGateways = props.vpc instanceof vpc_1.Vpc ? props.vpc.hasNatGateways : true;
|
|
50
|
+
vpcSubnets = {
|
|
51
|
+
subnetType: hasNatGateways
|
|
52
|
+
? aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS
|
|
53
|
+
: aws_ec2_1.SubnetType.PRIVATE_ISOLATED
|
|
54
|
+
};
|
|
55
|
+
}
|
|
35
56
|
super(scope, id, {
|
|
36
57
|
...props,
|
|
58
|
+
vpcSubnets,
|
|
37
59
|
timeout: props.timeout
|
|
38
60
|
? aws_cdk_lib_1.Duration.seconds(props.timeout)
|
|
39
61
|
: aws_cdk_lib_1.Duration.seconds(300),
|
|
@@ -43,16 +65,30 @@ class LambdaFunction extends aws_lambda_1.Function {
|
|
|
43
65
|
});
|
|
44
66
|
// Add inline policies to the Lambda's auto-generated role
|
|
45
67
|
this.addPoliciesToRole(props.inlinePolicy);
|
|
68
|
+
this.addContainerSecretsImportToRole(id, props.containerSecretsImport);
|
|
46
69
|
if (props.enableFunctionUrl) {
|
|
47
70
|
const functionUrl = this.addFunctionUrl({
|
|
48
71
|
authType: props.functionUrlAuthType || aws_lambda_1.FunctionUrlAuthType.AWS_IAM,
|
|
49
72
|
cors: props.functionUrlCors
|
|
50
73
|
});
|
|
51
|
-
new
|
|
74
|
+
new aws_cdk_lib_1.CfnOutput(this, `${id}FunctionUrl`, {
|
|
75
|
+
key: `${id}FunctionUrl`,
|
|
52
76
|
value: functionUrl.url,
|
|
53
77
|
description: `${id} Function URL`
|
|
54
78
|
});
|
|
55
79
|
}
|
|
80
|
+
// Add schedule if provided
|
|
81
|
+
if (props.scheduleExpression) {
|
|
82
|
+
const rule = new aws_events_1.Rule(this, `${id}ScheduleRule`, {
|
|
83
|
+
schedule: aws_events_1.Schedule.expression(props.scheduleExpression)
|
|
84
|
+
});
|
|
85
|
+
rule.addTarget(new aws_events_targets_1.LambdaFunction(this));
|
|
86
|
+
}
|
|
87
|
+
// Create log group with one week retention
|
|
88
|
+
new aws_logs_1.LogGroup(this, `${id}LogGroup`, {
|
|
89
|
+
logGroupName: `/aws/lambda/${this.functionName}`,
|
|
90
|
+
retention: aws_logs_1.RetentionDays.ONE_WEEK
|
|
91
|
+
});
|
|
56
92
|
}
|
|
57
93
|
/**
|
|
58
94
|
* The Lambda's execution role (auto-generated by CDK)
|
|
@@ -65,6 +101,37 @@ class LambdaFunction extends aws_lambda_1.Function {
|
|
|
65
101
|
this.addToRolePolicy(statement);
|
|
66
102
|
}
|
|
67
103
|
}
|
|
104
|
+
addContainerSecretsImportToRole(id, containerSecretsImport) {
|
|
105
|
+
if (!containerSecretsImport)
|
|
106
|
+
return;
|
|
107
|
+
let addedSecrets = false;
|
|
108
|
+
for (const [key, secretImport] of Object.entries(containerSecretsImport)) {
|
|
109
|
+
// Import the secret from Secrets Manager
|
|
110
|
+
const secret = aws_secretsmanager_1.Secret.fromSecretNameV2(this, `${id}ImportedSecret${key}`, secretImport.name);
|
|
111
|
+
// For Lambda, inject the secret ARN as an env var
|
|
112
|
+
// The Lambda function code will retrieve the actual value at runtime
|
|
113
|
+
this.addEnvironment(key, secret.secretArn);
|
|
114
|
+
// Grant read access to the lambda itself
|
|
115
|
+
// (this should auto attach to the generated role)
|
|
116
|
+
secret.grantRead(this);
|
|
117
|
+
addedSecrets = true;
|
|
118
|
+
}
|
|
119
|
+
if (addedSecrets) {
|
|
120
|
+
// Add KMS decrypt permissions for secrets
|
|
121
|
+
// When importing secrets with fromSecretNameV2, we don't have access to the KMS key,
|
|
122
|
+
// so we need to grant decrypt permission on all keys used by Secrets Manager
|
|
123
|
+
this.addToRolePolicy(new aws_iam_1.PolicyStatement({
|
|
124
|
+
effect: aws_iam_1.Effect.ALLOW,
|
|
125
|
+
actions: ["kms:Decrypt", "kms:DescribeKey"],
|
|
126
|
+
resources: ["*"],
|
|
127
|
+
conditions: {
|
|
128
|
+
StringEquals: {
|
|
129
|
+
"kms:ViaService": `secretsmanager.${aws_cdk_lib_1.Stack.of(this).region}.amazonaws.com`
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
68
135
|
}
|
|
69
136
|
exports.LambdaFunction = LambdaFunction;
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9sYW1iZGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXVDO0FBQ3ZDLHVEQU9nQztBQUdoQywrQkFBa0M7QUFFbEMsc0RBQW1EO0FBNkJuRCxNQUFhLGlCQUFrQixTQUFRLDhCQUFpQjtJQUN0RCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTZCO1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxLQUFLO1lBQ1IsSUFBSSxFQUFFLElBQUEsU0FBSSxHQUFFO1lBQ1osT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUM5QixXQUFXLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEdBQUcsRUFBRSxtQkFBbUI7WUFDaEUsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1NBQ3ZCLENBQUMsQ0FBQztRQUVILDBEQUEwRDtRQUMxRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsYUFBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFVBQTZCO1FBQ3JELEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBMUJELDhDQTBCQztBQUVELE1BQWEsY0FBZSxTQUFRLHFCQUFRO0lBQzFDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixHQUFHLEtBQUs7WUFDUixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87Z0JBQ3BCLENBQUMsQ0FBQyxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2dCQUNqQyxDQUFDLENBQUMsc0JBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ3pCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxJQUFJLEdBQUc7WUFDbkMsV0FBVyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxHQUFHLEVBQUUsU0FBUztZQUN0RCxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7U0FDL0IsQ0FBQyxDQUFDO1FBRUgsMERBQTBEO1FBQzFELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFM0MsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM1QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO2dCQUN0QyxRQUFRLEVBQUUsS0FBSyxDQUFDLG1CQUFtQixJQUFJLGdDQUFtQixDQUFDLE9BQU87Z0JBQ2xFLElBQUksRUFBRSxLQUFLLENBQUMsZUFBZTthQUM1QixDQUFDLENBQUM7WUFFSCxJQUFJLHFCQUFTLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFO2dCQUN2QyxLQUFLLEVBQUUsV0FBVyxDQUFDLEdBQUc7Z0JBQ3RCLFdBQVcsRUFBRSxHQUFHLEVBQUUsZUFBZTthQUNsQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRU8saUJBQWlCLENBQUMsVUFBNkI7UUFDckQsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUF4Q0Qsd0NBd0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7XG4gIFNpbmdsZXRvbkZ1bmN0aW9uIGFzIHNpbmdsZXRvbkZ1bmN0aW9uLFxuICBGdW5jdGlvbixcbiAgdHlwZSBDb2RlLFxuICB0eXBlIFJ1bnRpbWUsXG4gIEZ1bmN0aW9uVXJsQXV0aFR5cGUsXG4gIHR5cGUgRnVuY3Rpb25VcmxDb3JzT3B0aW9uc1xufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgdHlwZSBQb2xpY3lTdGF0ZW1lbnQsIHR5cGUgSVJvbGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gXCJ1dWlkXCI7XG5cbmltcG9ydCB7IENmbk91dHB1dCB9IGZyb20gXCIuLi91dGlsaXRpZXMvY2ZuT3V0cHV0XCI7XG5pbXBvcnQgeyB0eXBlIEtleVZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgbGFtYmRhRnVuY3Rpb25Qcm9wcyB7XG4gIGNvZGU6IENvZGU7XG4gIGhhbmRsZXI6IHN0cmluZztcbiAgbGFtYmRhRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJvbGVEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcnVudGltZTogUnVudGltZTtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgbWVtb3J5U2l6ZT86IG51bWJlcjtcbiAgaW5saW5lUG9saWN5OiBQb2xpY3lTdGF0ZW1lbnRbXTtcblxuICAvLyBMYW1iZGEgVVJMIHByb3BlcnRpZXNcbiAgZW5hYmxlRnVuY3Rpb25Vcmw/OiBib29sZWFuO1xuICBmdW5jdGlvblVybEF1dGhUeXBlPzogRnVuY3Rpb25VcmxBdXRoVHlwZTtcbiAgZnVuY3Rpb25VcmxDb3JzPzogRnVuY3Rpb25VcmxDb3JzT3B0aW9ucztcblxuICAvLyBFbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgZW52aXJvbm1lbnQ/OiBLZXlWYWx1ZTtcblxuICAvLyBUYWdzXG4gIHRhZ3M/OiBLZXlWYWx1ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaW5nbGV0b25GdW5jdGlvblByb3BzIGV4dGVuZHMgbGFtYmRhRnVuY3Rpb25Qcm9wcyB7XG4gIHV1aWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTaW5nbGV0b25GdW5jdGlvbiBleHRlbmRzIHNpbmdsZXRvbkZ1bmN0aW9uIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNpbmdsZXRvbkZ1bmN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgdXVpZDogdXVpZCgpLFxuICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygzMDApLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmxhbWJkYURlc2NyaXB0aW9uIHx8IGAke2lkfSBzaW5nbGV0b24gbGFtYmRhYCxcbiAgICAgIHJ1bnRpbWU6IHByb3BzLnJ1bnRpbWVcbiAgICB9KTtcblxuICAgIC8vIEFkZCBpbmxpbmUgcG9saWNpZXMgdG8gdGhlIExhbWJkYSdzIGF1dG8tZ2VuZXJhdGVkIHJvbGVcbiAgICB0aGlzLmFkZFBvbGljaWVzVG9Sb2xlKHByb3BzLmlubGluZVBvbGljeSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIExhbWJkYSdzIGV4ZWN1dGlvbiByb2xlIChhdXRvLWdlbmVyYXRlZCBieSBDREspXG4gICAqL1xuICBwdWJsaWMgZ2V0IGV4ZWN1dGlvblJvbGUoKTogSVJvbGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvbGU7XG4gIH1cblxuICBwcml2YXRlIGFkZFBvbGljaWVzVG9Sb2xlKHN0YXRlbWVudHM6IFBvbGljeVN0YXRlbWVudFtdKSB7XG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2Ygc3RhdGVtZW50cykge1xuICAgICAgdGhpcy5hZGRUb1JvbGVQb2xpY3koc3RhdGVtZW50KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExhbWJkYUZ1bmN0aW9uIGV4dGVuZHMgRnVuY3Rpb24ge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogbGFtYmRhRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICB0aW1lb3V0OiBwcm9wcy50aW1lb3V0XG4gICAgICAgID8gRHVyYXRpb24uc2Vjb25kcyhwcm9wcy50aW1lb3V0KVxuICAgICAgICA6IER1cmF0aW9uLnNlY29uZHMoMzAwKSxcbiAgICAgIG1lbW9yeVNpemU6IHByb3BzLm1lbW9yeVNpemUgfHwgMTI4LFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmxhbWJkYURlc2NyaXB0aW9uIHx8IGAke2lkfSBMYW1iZGFgLFxuICAgICAgZW52aXJvbm1lbnQ6IHByb3BzLmVudmlyb25tZW50XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgaW5saW5lIHBvbGljaWVzIHRvIHRoZSBMYW1iZGEncyBhdXRvLWdlbmVyYXRlZCByb2xlXG4gICAgdGhpcy5hZGRQb2xpY2llc1RvUm9sZShwcm9wcy5pbmxpbmVQb2xpY3kpO1xuXG4gICAgaWYgKHByb3BzLmVuYWJsZUZ1bmN0aW9uVXJsKSB7XG4gICAgICBjb25zdCBmdW5jdGlvblVybCA9IHRoaXMuYWRkRnVuY3Rpb25Vcmwoe1xuICAgICAgICBhdXRoVHlwZTogcHJvcHMuZnVuY3Rpb25VcmxBdXRoVHlwZSB8fCBGdW5jdGlvblVybEF1dGhUeXBlLkFXU19JQU0sXG4gICAgICAgIGNvcnM6IHByb3BzLmZ1bmN0aW9uVXJsQ29yc1xuICAgICAgfSk7XG5cbiAgICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJMYW1iZGFGdW5jdGlvblVybFwiLCB7XG4gICAgICAgIHZhbHVlOiBmdW5jdGlvblVybC51cmwsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHtpZH0gRnVuY3Rpb24gVVJMYFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBMYW1iZGEncyBleGVjdXRpb24gcm9sZSAoYXV0by1nZW5lcmF0ZWQgYnkgQ0RLKVxuICAgKi9cbiAgcHVibGljIGdldCBleGVjdXRpb25Sb2xlKCk6IElSb2xlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yb2xlO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRQb2xpY2llc1RvUm9sZShzdGF0ZW1lbnRzOiBQb2xpY3lTdGF0ZW1lbnRbXSkge1xuICAgIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICAgIHRoaXMuYWRkVG9Sb2xlUG9saWN5KHN0YXRlbWVudCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9sYW1iZGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQStEO0FBQy9ELHVEQU9nQztBQUNoQyxpREFBMEU7QUFDMUUsaURBQTREO0FBQzVELHVEQUF3RDtBQUN4RCx1RUFBZ0Y7QUFDaEYsbURBQStEO0FBQy9ELHVFQUF3RDtBQUV4RCwrQkFBa0M7QUFHbEMsMkNBQXdDO0FBc0N4QyxNQUFhLGlCQUFrQixTQUFRLDhCQUFpQjtJQUN0RCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTZCO1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxLQUFLO1lBQ1IsSUFBSSxFQUFFLElBQUEsU0FBSSxHQUFFO1lBQ1osT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUM5QixXQUFXLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEdBQUcsRUFBRSxtQkFBbUI7WUFDaEUsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxvQkFBb0I7Z0JBQzlDLENBQUMsQ0FBQyxrQkFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxTQUFTO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsMERBQTBEO1FBQzFELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRU8saUJBQWlCLENBQUMsVUFBNkI7UUFDckQsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNuQyxJQUFJ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RUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sZ0JBQWdCO3FCQUMxRTtpQkFDRjthQUNGLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7Q0FDRjtBQXZIRCx3Q0F1SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIER1cmF0aW9uLCBTdGFjaywgU2l6ZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgU2luZ2xldG9uRnVuY3Rpb24gYXMgc2luZ2xldG9uRnVuY3Rpb24sXG4gIEZ1bmN0aW9uLFxuICB0eXBlIENvZGUsXG4gIHR5cGUgUnVudGltZSxcbiAgRnVuY3Rpb25VcmxBdXRoVHlwZSxcbiAgdHlwZSBGdW5jdGlvblVybENvcnNPcHRpb25zXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQsIHR5cGUgSVJvbGUsIEVmZmVjdCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyB0eXBlIElWcGMsIFN1Ym5ldFR5cGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgUnVsZSwgU2NoZWR1bGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50c1wiO1xuaW1wb3J0IHsgTGFtYmRhRnVuY3Rpb24gYXMgTGFtYmRhVGFyZ2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0c1wiO1xuaW1wb3J0IHsgTG9nR3JvdXAsIFJldGVudGlvbkRheXMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIjtcbmltcG9ydCB7IFNlY3JldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIjtcbmltcG9ydCB7IHR5cGUgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgdHlwZSBLZXlWYWx1ZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBTZWNyZXRJbXBvcnQgfSBmcm9tIFwiLi4vc2VjcmV0c1wiO1xuaW1wb3J0IHsgVnBjIH0gZnJvbSBcIi4uL25ldHdvcmtpbmcvdnBjXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgbGFtYmRhRnVuY3Rpb25Qcm9wcyB7XG4gIGNvZGU6IENvZGU7XG4gIGhhbmRsZXI6IHN0cmluZztcbiAgbGFtYmRhRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJvbGVEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcnVudGltZTogUnVudGltZTtcbiAgdnBjPzogSVZwYztcbiAgdGltZW91dD86IG51bWJlcjtcbiAgbWVtb3J5U2l6ZT86IG51bWJlcjtcbiAgaW5saW5lUG9saWN5OiBQb2xpY3lTdGF0ZW1lbnRbXTtcblxuICAvLyBMYW1iZGEgVVJMIHByb3BlcnRpZXNcbiAgZW5hYmxlRnVuY3Rpb25Vcmw/OiBib29sZWFuO1xuICBmdW5jdGlvblVybEF1dGhUeXBlPzogRnVuY3Rpb25VcmxBdXRoVHlwZTtcbiAgZnVuY3Rpb25VcmxDb3JzPzogRnVuY3Rpb25VcmxDb3JzT3B0aW9ucztcblxuICAvLyBFbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgZW52aXJvbm1lbnQ/OiBLZXlWYWx1ZTtcblxuICAvLyBUYWdzXG4gIHRhZ3M/OiBLZXlWYWx1ZTtcblxuICAvLyBTY2hlZHVsZSAoY3JvbiBvciByYXRlKVxuICBzY2hlZHVsZUV4cHJlc3Npb24/OiBzdHJpbmc7IC8vIGUuZy4gJ2Nyb24oMCAxMiAqICogPyAqKScgb3IgJ3JhdGUoNSBtaW51dGVzKSdcblxuICAvLyBDb250YWluZXIgc2VjcmV0cyBpbXBvcnQgKGtleTogZW52IHZhciwgdmFsdWU6IFNlY3JldEltcG9ydClcbiAgY29udGFpbmVyU2VjcmV0c0ltcG9ydD86IHtcbiAgICBba2V5OiBzdHJpbmddOiBTZWNyZXRJbXBvcnQ7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2luZ2xldG9uRnVuY3Rpb25Qcm9wcyBleHRlbmRzIGxhbWJkYUZ1bmN0aW9uUHJvcHMge1xuICB1dWlkPzogc3RyaW5nO1xuICBlcGhlbWVyYWxTdG9yYWdlU2l6ZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFNpbmdsZXRvbkZ1bmN0aW9uIGV4dGVuZHMgc2luZ2xldG9uRnVuY3Rpb24ge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2luZ2xldG9uRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICB1dWlkOiB1dWlkKCksXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDMwMCksXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMubGFtYmRhRGVzY3JpcHRpb24gfHwgYCR7aWR9IHNpbmdsZXRvbiBsYW1iZGFgLFxuICAgICAgcnVudGltZTogcHJvcHMucnVudGltZSxcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplOiBwcm9wcy5lcGhlbWVyYWxTdG9yYWdlU2l6ZVxuICAgICAgICA/IFNpemUubWViaWJ5dGVzKHByb3BzLmVwaGVtZXJhbFN0b3JhZ2VTaXplKVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIGlubGluZSBwb2xpY2llcyB0byB0aGUgTGFtYmRhJ3MgYXV0by1nZW5lcmF0ZWQgcm9sZVxuICAgIHRoaXMuYWRkUG9saWNpZXNUb1JvbGUocHJvcHMuaW5saW5lUG9saWN5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgTGFtYmRhJ3MgZXhlY3V0aW9uIHJvbGUgKGF1dG8tZ2VuZXJhdGVkIGJ5IENESylcbiAgICovXG4gIHB1YmxpYyBnZXQgZXhlY3V0aW9uUm9sZSgpOiBJUm9sZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm9sZTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUG9saWNpZXNUb1JvbGUoc3RhdGVtZW50czogUG9saWN5U3RhdGVtZW50W10pIHtcbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgICB0aGlzLmFkZFRvUm9sZVBvbGljeShzdGF0ZW1lbnQpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGFtYmRhRnVuY3Rpb24gZXh0ZW5kcyBGdW5jdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBsYW1iZGFGdW5jdGlvblByb3BzKSB7XG4gICAgLy8gRXhwbGljaXRseSBzZXQgc3VibmV0IHNlbGVjdGlvbiB0byBtYXRjaCBWUEMgZW5kcG9pbnQgcGxhY2VtZW50XG4gICAgLy8gLSBXaXRoIE5BVDogUFJJVkFURV9XSVRIX0VHUkVTUyAoY2FuIGFjY2VzcyBpbnRlcm5ldCB2aWEgTkFUKVxuICAgIC8vIC0gV2l0aG91dCBOQVQ6IFBSSVZBVEVfSVNPTEFURUQgKGNhbiBhY2Nlc3MgVlBDIGVuZHBvaW50cyBvbmx5LCBubyBpbnRlcm5ldClcbiAgICBsZXQgdnBjU3VibmV0cztcbiAgICBpZiAocHJvcHMudnBjKSB7XG4gICAgICBjb25zdCBoYXNOYXRHYXRld2F5cyA9XG4gICAgICAgIHByb3BzLnZwYyBpbnN0YW5jZW9mIFZwYyA/IHByb3BzLnZwYy5oYXNOYXRHYXRld2F5cyA6IHRydWU7XG4gICAgICB2cGNTdWJuZXRzID0ge1xuICAgICAgICBzdWJuZXRUeXBlOiBoYXNOYXRHYXRld2F5c1xuICAgICAgICAgID8gU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTXG4gICAgICAgICAgOiBTdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURURcbiAgICAgIH07XG4gICAgfVxuXG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHZwY1N1Ym5ldHMsXG4gICAgICB0aW1lb3V0OiBwcm9wcy50aW1lb3V0XG4gICAgICAgID8gRHVyYXRpb24uc2Vjb25kcyhwcm9wcy50aW1lb3V0KVxuICAgICAgICA6IER1cmF0aW9uLnNlY29uZHMoMzAwKSxcbiAgICAgIG1lbW9yeVNpemU6IHByb3BzLm1lbW9yeVNpemUgfHwgMTI4LFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmxhbWJkYURlc2NyaXB0aW9uIHx8IGAke2lkfSBMYW1iZGFgLFxuICAgICAgZW52aXJvbm1lbnQ6IHByb3BzLmVudmlyb25tZW50XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgaW5saW5lIHBvbGljaWVzIHRvIHRoZSBMYW1iZGEncyBhdXRvLWdlbmVyYXRlZCByb2xlXG4gICAgdGhpcy5hZGRQb2xpY2llc1RvUm9sZShwcm9wcy5pbmxpbmVQb2xpY3kpO1xuICAgIHRoaXMuYWRkQ29udGFpbmVyU2VjcmV0c0ltcG9ydFRvUm9sZShpZCwgcHJvcHMuY29udGFpbmVyU2VjcmV0c0ltcG9ydCk7XG5cbiAgICBpZiAocHJvcHMuZW5hYmxlRnVuY3Rpb25VcmwpIHtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uVXJsID0gdGhpcy5hZGRGdW5jdGlvblVybCh7XG4gICAgICAgIGF1dGhUeXBlOiBwcm9wcy5mdW5jdGlvblVybEF1dGhUeXBlIHx8IEZ1bmN0aW9uVXJsQXV0aFR5cGUuQVdTX0lBTSxcbiAgICAgICAgY29yczogcHJvcHMuZnVuY3Rpb25VcmxDb3JzXG4gICAgICB9KTtcblxuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtpZH1GdW5jdGlvblVybGAsIHtcbiAgICAgICAga2V5OiBgJHtpZH1GdW5jdGlvblVybGAsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvblVybC51cmwsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHtpZH0gRnVuY3Rpb24gVVJMYFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHNjaGVkdWxlIGlmIHByb3ZpZGVkXG4gICAgaWYgKHByb3BzLnNjaGVkdWxlRXhwcmVzc2lvbikge1xuICAgICAgY29uc3QgcnVsZSA9IG5ldyBSdWxlKHRoaXMsIGAke2lkfVNjaGVkdWxlUnVsZWAsIHtcbiAgICAgICAgc2NoZWR1bGU6IFNjaGVkdWxlLmV4cHJlc3Npb24ocHJvcHMuc2NoZWR1bGVFeHByZXNzaW9uKVxuICAgICAgfSk7XG4gICAgICBydWxlLmFkZFRhcmdldChuZXcgTGFtYmRhVGFyZ2V0KHRoaXMpKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgbG9nIGdyb3VwIHdpdGggb25lIHdlZWsgcmV0ZW50aW9uXG4gICAgbmV3IExvZ0dyb3VwKHRoaXMsIGAke2lkfUxvZ0dyb3VwYCwge1xuICAgICAgbG9nR3JvdXBOYW1lOiBgL2F3cy9sYW1iZGEvJHt0aGlzLmZ1bmN0aW9uTmFtZX1gLFxuICAgICAgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLk9ORV9XRUVLXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIExhbWJkYSdzIGV4ZWN1dGlvbiByb2xlIChhdXRvLWdlbmVyYXRlZCBieSBDREspXG4gICAqL1xuICBwdWJsaWMgZ2V0IGV4ZWN1dGlvblJvbGUoKTogSVJvbGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvbGU7XG4gIH1cblxuICBwcml2YXRlIGFkZFBvbGljaWVzVG9Sb2xlKHN0YXRlbWVudHM6IFBvbGljeVN0YXRlbWVudFtdKSB7XG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2Ygc3RhdGVtZW50cykge1xuICAgICAgdGhpcy5hZGRUb1JvbGVQb2xpY3koc3RhdGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZENvbnRhaW5lclNlY3JldHNJbXBvcnRUb1JvbGUoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBjb250YWluZXJTZWNyZXRzSW1wb3J0Pzoge1xuICAgICAgW2tleTogc3RyaW5nXTogU2VjcmV0SW1wb3J0O1xuICAgIH1cbiAgKSB7XG4gICAgaWYgKCFjb250YWluZXJTZWNyZXRzSW1wb3J0KSByZXR1cm47XG5cbiAgICBsZXQgYWRkZWRTZWNyZXRzID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHNlY3JldEltcG9ydF0gb2YgT2JqZWN0LmVudHJpZXMoY29udGFpbmVyU2VjcmV0c0ltcG9ydCkpIHtcbiAgICAgIC8vIEltcG9ydCB0aGUgc2VjcmV0IGZyb20gU2VjcmV0cyBNYW5hZ2VyXG4gICAgICBjb25zdCBzZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7aWR9SW1wb3J0ZWRTZWNyZXQke2tleX1gLFxuICAgICAgICBzZWNyZXRJbXBvcnQubmFtZVxuICAgICAgKTtcblxuICAgICAgLy8gRm9yIExhbWJkYSwgaW5qZWN0IHRoZSBzZWNyZXQgQVJOIGFzIGFuIGVudiB2YXJcbiAgICAgIC8vIFRoZSBMYW1iZGEgZnVuY3Rpb24gY29kZSB3aWxsIHJldHJpZXZlIHRoZSBhY3R1YWwgdmFsdWUgYXQgcnVudGltZVxuICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChrZXksIHNlY3JldC5zZWNyZXRBcm4pO1xuXG4gICAgICAvLyBHcmFudCByZWFkIGFjY2VzcyB0byB0aGUgbGFtYmRhIGl0c2VsZlxuICAgICAgLy8gKHRoaXMgc2hvdWxkIGF1dG8gYXR0YWNoIHRvIHRoZSBnZW5lcmF0ZWQgcm9sZSlcbiAgICAgIHNlY3JldC5ncmFudFJlYWQodGhpcyk7XG5cbiAgICAgIGFkZGVkU2VjcmV0cyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGFkZGVkU2VjcmV0cykge1xuICAgICAgLy8gQWRkIEtNUyBkZWNyeXB0IHBlcm1pc3Npb25zIGZvciBzZWNyZXRzXG4gICAgICAvLyBXaGVuIGltcG9ydGluZyBzZWNyZXRzIHdpdGggZnJvbVNlY3JldE5hbWVWMiwgd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIEtNUyBrZXksXG4gICAgICAvLyBzbyB3ZSBuZWVkIHRvIGdyYW50IGRlY3J5cHQgcGVybWlzc2lvbiBvbiBhbGwga2V5cyB1c2VkIGJ5IFNlY3JldHMgTWFuYWdlclxuICAgICAgdGhpcy5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFtcImttczpEZWNyeXB0XCIsIFwia21zOkRlc2NyaWJlS2V5XCJdLFxuICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgICAgXCJrbXM6VmlhU2VydmljZVwiOiBgc2VjcmV0c21hbmFnZXIuJHtTdGFjay5vZih0aGlzKS5yZWdpb259LmFtYXpvbmF3cy5jb21gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|