low-cost-ecs 0.0.22 → 0.0.24
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/.gitattributes +2 -0
- package/.jsii +19 -18
- package/.prettierignore +1 -0
- package/.prettierrc.json +5 -0
- package/.projenrc.ts +10 -13
- package/API.md +3 -1
- package/README.md +1 -1
- package/examples/all-props.ts +25 -15
- package/lib/low-cost-ecs.d.ts +3 -2
- package/lib/low-cost-ecs.js +37 -32
- package/package.json +4 -1
package/.gitattributes
CHANGED
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
/.gitignore linguist-generated
|
|
13
13
|
/.mergify.yml linguist-generated
|
|
14
14
|
/.npmignore linguist-generated
|
|
15
|
+
/.prettierignore linguist-generated
|
|
16
|
+
/.prettierrc.json linguist-generated
|
|
15
17
|
/.projen/** linguist-generated
|
|
16
18
|
/.projen/deps.json linguist-generated
|
|
17
19
|
/.projen/files.json linguist-generated
|
package/.jsii
CHANGED
|
@@ -3043,7 +3043,7 @@
|
|
|
3043
3043
|
},
|
|
3044
3044
|
"name": "low-cost-ecs",
|
|
3045
3045
|
"readme": {
|
|
3046
|
-
"markdown": "[](https://www.npmjs.com/package/low-cost-ecs)\n[](https://pypi.org/project/low-cost-ecs)\n[](https://github.com/rajyan/low-cost-ecs/actions/workflows/release.yml)\n[<img src=\"https://constructs.dev/badge?package=low-cost-ecs\" width=\"150\">](https://constructs.dev/packages/low-cost-ecs)\n\n# Low-Cost ECS\n\nA CDK construct that provides an easy and [low-cost](#cost) ECS on EC2 server setup without a load balancer.\n\n**This construct is for development purposes only**. See [Limitations](#limitations).\n\n# Why\n\nECS may often seem expensive when used for personal development purposes, due to the cost of the load balancer.\nThe application load balancer is a great service that is easy to set up managed ACM certificates, easy scaling, and has dynamic port mappings..., but it is over-featured for running 1 ECS task.\n\nHowever, to run an ECS server without a load balancer, you need to associate an Elastic IP to the host instance and install your certificate to your service every time you start up the server.\nThis construct aims to automate these works and make it easy to deploy resources to run a low-cost ECS server.\n\n# Try it out!\n\nThe easiest way to try the construct is to clone this repository and deploy the sample server.\nEdit settings in `examples/minimum.ts` and deploy the cdk construct. [Public hosted zone](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/AboutHZWorkingWith.html) is required.\n\n```\ngit clone https://github.com/rajyan/low-cost-ecs.git\nyarn install\n# edit settings in bin/low-cost-ecs.ts\
|
|
3046
|
+
"markdown": "[](https://www.npmjs.com/package/low-cost-ecs)\n[](https://pypi.org/project/low-cost-ecs)\n[](https://github.com/rajyan/low-cost-ecs/actions/workflows/release.yml)\n[<img src=\"https://constructs.dev/badge?package=low-cost-ecs\" width=\"150\">](https://constructs.dev/packages/low-cost-ecs)\n\n# Low-Cost ECS\n\nA CDK construct that provides an easy and [low-cost](#cost) ECS on EC2 server setup without a load balancer.\n\n**This construct is for development purposes only**. See [Limitations](#limitations).\n\n# Why\n\nECS may often seem expensive when used for personal development purposes, due to the cost of the load balancer.\nThe application load balancer is a great service that is easy to set up managed ACM certificates, easy scaling, and has dynamic port mappings..., but it is over-featured for running 1 ECS task.\n\nHowever, to run an ECS server without a load balancer, you need to associate an Elastic IP to the host instance and install your certificate to your service every time you start up the server.\nThis construct aims to automate these works and make it easy to deploy resources to run a low-cost ECS server.\n\n# Try it out!\n\nThe easiest way to try the construct is to clone this repository and deploy the sample server.\nEdit settings in `examples/minimum.ts` and deploy the cdk construct. [Public hosted zone](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/AboutHZWorkingWith.html) is required.\n\n```\ngit clone https://github.com/rajyan/low-cost-ecs.git\nyarn install\n# edit settings in bin/low-cost-ecs.ts\ncdk deploy\n```\n\nAccess the configured `recordDomainNames` and see that the Nginx sample server has been deployed.\n\n# Installation\n\nTo use this construct in your cdk stack as a library,\n\n```\nnpm install low-cost-ecs\n```\n\n```ts\nimport { Stack, StackProps } from 'aws-cdk-lib';\nimport { Construct } from 'constructs';\nimport { LowCostECS } from 'low-cost-ecs';\n\nclass SampleStack extends Stack {\n constructor(scope: Construct, id: string, props?: StackProps) {\n super(scope, id, props);\n\n const vpc = { /** Your VPC */ };\n const securityGroup = { /** Your security group */ };\n const serverTaskDefinition = { /** Your task definition */ };\n\n new LowCostECS(this, 'LowCostECS', {\n hostedZoneDomain: \"rajyan.net\",\n email: \"kitakita7617@gmail.com\",\n vpc: vpc,\n securityGroup: securityGroup,\n serverTaskDefinition: serverTaskDefinition\n });\n }\n}\n```\n\nThe required fields are `hostedZoneDomain` and `email`.\nYou can configure your server task definition and other props. Read [`LowCostECSProps` documentation](https://github.com/rajyan/low-cost-ecs/blob/main/API.md#low-cost-ecs.LowCostECSProps) for details.\n\n# Overview\n\nResources generated in this stack\n\n* Route53 A record\n * Forwarding to host instance Elastic IP\n* Certificate State Machine\n * Install and renew certificates to EFS using [certbot-dns-route53](https://certbot-dns-route53.readthedocs.io/en/stable/)\n * Scheduled automated renewal every 60 days\n * Email notification on certbot task failure\n* ECS on EC2 host instance\n * ECS-optimized Amazon Linux 2 AMI instance auto-scaling group\n * Automatically associated with Elastic IP on instance initialization\n* ECS Service\n * TLS/SSL certificate installation before default container startup\n * Certificate EFS mounted on default container as `/etc/letsencrypt`\n* Others\n * VPC with only public subnets (no NAT Gateways to decrease cost)\n * Security groups with minimum inbounds\n * IAM roles with minimum privileges\n\n# Cost\n\nAll resources except Route53 HostedZone should be included in [AWS Free Tier](https://docs.aws.amazon.com/whitepapers/latest/how-aws-pricing-works/get-started-with-the-aws-free-tier.html)\n***if you are in the 12 Months Free period***.\nAfter your 12 Months Free period, setting [`hostInstanceSpotPrice`](https://github.com/rajyan/low-cost-ecs/blob/main/API.md#low-cost-ecs.LowCostECSProps.property.hostInstanceSpotPrice) to use spot instances is recommended.\n\n* EC2\n * t2.micro 750 instance hours (12 Months Free Tier)\n * 30GB EBS volume (12 Months Free Tier)\n* ECS\n * No additional charge because using ECS on EC2\n* EFS\n * Usage is very small, it should be free\n* Cloud Watch\n * Usage is very small, and it should be included in the free tier\n * Enabling [`containerInsights`](https://github.com/rajyan/low-cost-ecs/blob/main/API.md#low-cost-ecs.LowCostECSProps.property.containerInsights) will charge for custom metrics\n\n# Debugging\n\n* SSM Session Manager\n\nSSM manager is pre-installed in the host instance (by ECS-optimized Amazon Linux 2 AMI) and `AmazonSSMManagedInstanceCore` is added to the host instance role to access and debug in your host instance.\n\n```\naws ssm start-session --target $INSTANCE_ID\n```\n\n* ECS Exec\n\nService ECS Exec is enabled, so execute commands can be used to debug your server task container.\n\n```\naws ecs execute-command \\\n--cluster $CLUSTER_ID \\\n--task $TASK_ID \\\n--container nginx \\\n--command bash \\\n--interactive\n```\n\n# Limitations\n\nBecause the ECS service occupies a host port, only one task can be executed at a time.\nThe old task must be terminated before the new task launches, and this causes downtime on release.\n\nAlso, if you make changes that require recreating the service, you may need to manually terminate the task of the old service.\n"
|
|
3047
3047
|
},
|
|
3048
3048
|
"repository": {
|
|
3049
3049
|
"type": "git",
|
|
@@ -3073,7 +3073,7 @@
|
|
|
3073
3073
|
},
|
|
3074
3074
|
"locationInModule": {
|
|
3075
3075
|
"filename": "src/low-cost-ecs.ts",
|
|
3076
|
-
"line":
|
|
3076
|
+
"line": 140
|
|
3077
3077
|
},
|
|
3078
3078
|
"parameters": [
|
|
3079
3079
|
{
|
|
@@ -3099,7 +3099,7 @@
|
|
|
3099
3099
|
"kind": "class",
|
|
3100
3100
|
"locationInModule": {
|
|
3101
3101
|
"filename": "src/low-cost-ecs.ts",
|
|
3102
|
-
"line":
|
|
3102
|
+
"line": 131
|
|
3103
3103
|
},
|
|
3104
3104
|
"name": "LowCostECS",
|
|
3105
3105
|
"properties": [
|
|
@@ -3110,7 +3110,7 @@
|
|
|
3110
3110
|
"immutable": true,
|
|
3111
3111
|
"locationInModule": {
|
|
3112
3112
|
"filename": "src/low-cost-ecs.ts",
|
|
3113
|
-
"line":
|
|
3113
|
+
"line": 134
|
|
3114
3114
|
},
|
|
3115
3115
|
"name": "certFileSystem",
|
|
3116
3116
|
"type": {
|
|
@@ -3124,7 +3124,7 @@
|
|
|
3124
3124
|
"immutable": true,
|
|
3125
3125
|
"locationInModule": {
|
|
3126
3126
|
"filename": "src/low-cost-ecs.ts",
|
|
3127
|
-
"line":
|
|
3127
|
+
"line": 136
|
|
3128
3128
|
},
|
|
3129
3129
|
"name": "cluster",
|
|
3130
3130
|
"type": {
|
|
@@ -3138,7 +3138,7 @@
|
|
|
3138
3138
|
"immutable": true,
|
|
3139
3139
|
"locationInModule": {
|
|
3140
3140
|
"filename": "src/low-cost-ecs.ts",
|
|
3141
|
-
"line":
|
|
3141
|
+
"line": 133
|
|
3142
3142
|
},
|
|
3143
3143
|
"name": "hostAutoScalingGroup",
|
|
3144
3144
|
"type": {
|
|
@@ -3152,7 +3152,7 @@
|
|
|
3152
3152
|
"immutable": true,
|
|
3153
3153
|
"locationInModule": {
|
|
3154
3154
|
"filename": "src/low-cost-ecs.ts",
|
|
3155
|
-
"line":
|
|
3155
|
+
"line": 137
|
|
3156
3156
|
},
|
|
3157
3157
|
"name": "serverTaskDefinition",
|
|
3158
3158
|
"type": {
|
|
@@ -3166,7 +3166,7 @@
|
|
|
3166
3166
|
"immutable": true,
|
|
3167
3167
|
"locationInModule": {
|
|
3168
3168
|
"filename": "src/low-cost-ecs.ts",
|
|
3169
|
-
"line":
|
|
3169
|
+
"line": 138
|
|
3170
3170
|
},
|
|
3171
3171
|
"name": "service",
|
|
3172
3172
|
"type": {
|
|
@@ -3180,7 +3180,7 @@
|
|
|
3180
3180
|
"immutable": true,
|
|
3181
3181
|
"locationInModule": {
|
|
3182
3182
|
"filename": "src/low-cost-ecs.ts",
|
|
3183
|
-
"line":
|
|
3183
|
+
"line": 135
|
|
3184
3184
|
},
|
|
3185
3185
|
"name": "topic",
|
|
3186
3186
|
"type": {
|
|
@@ -3194,7 +3194,7 @@
|
|
|
3194
3194
|
"immutable": true,
|
|
3195
3195
|
"locationInModule": {
|
|
3196
3196
|
"filename": "src/low-cost-ecs.ts",
|
|
3197
|
-
"line":
|
|
3197
|
+
"line": 132
|
|
3198
3198
|
},
|
|
3199
3199
|
"name": "vpc",
|
|
3200
3200
|
"type": {
|
|
@@ -3449,14 +3449,15 @@
|
|
|
3449
3449
|
{
|
|
3450
3450
|
"abstract": true,
|
|
3451
3451
|
"docs": {
|
|
3452
|
-
"default": "- Nginx server task definition defined in
|
|
3452
|
+
"default": "- Nginx server task definition defined in sampleTaskDefinition()",
|
|
3453
|
+
"see": "sampleTaskDefinition",
|
|
3453
3454
|
"stability": "experimental",
|
|
3454
3455
|
"summary": "Task definition for the server ecs task."
|
|
3455
3456
|
},
|
|
3456
3457
|
"immutable": true,
|
|
3457
3458
|
"locationInModule": {
|
|
3458
3459
|
"filename": "src/low-cost-ecs.ts",
|
|
3459
|
-
"line":
|
|
3460
|
+
"line": 122
|
|
3460
3461
|
},
|
|
3461
3462
|
"name": "serverTaskDefinition",
|
|
3462
3463
|
"optional": true,
|
|
@@ -3495,7 +3496,7 @@
|
|
|
3495
3496
|
"kind": "interface",
|
|
3496
3497
|
"locationInModule": {
|
|
3497
3498
|
"filename": "src/low-cost-ecs.ts",
|
|
3498
|
-
"line":
|
|
3499
|
+
"line": 125
|
|
3499
3500
|
},
|
|
3500
3501
|
"name": "LowCostECSTaskDefinitionOptions",
|
|
3501
3502
|
"properties": [
|
|
@@ -3507,7 +3508,7 @@
|
|
|
3507
3508
|
"immutable": true,
|
|
3508
3509
|
"locationInModule": {
|
|
3509
3510
|
"filename": "src/low-cost-ecs.ts",
|
|
3510
|
-
"line":
|
|
3511
|
+
"line": 127
|
|
3511
3512
|
},
|
|
3512
3513
|
"name": "containers",
|
|
3513
3514
|
"type": {
|
|
@@ -3527,7 +3528,7 @@
|
|
|
3527
3528
|
"immutable": true,
|
|
3528
3529
|
"locationInModule": {
|
|
3529
3530
|
"filename": "src/low-cost-ecs.ts",
|
|
3530
|
-
"line":
|
|
3531
|
+
"line": 126
|
|
3531
3532
|
},
|
|
3532
3533
|
"name": "taskDefinition",
|
|
3533
3534
|
"optional": true,
|
|
@@ -3543,7 +3544,7 @@
|
|
|
3543
3544
|
"immutable": true,
|
|
3544
3545
|
"locationInModule": {
|
|
3545
3546
|
"filename": "src/low-cost-ecs.ts",
|
|
3546
|
-
"line":
|
|
3547
|
+
"line": 128
|
|
3547
3548
|
},
|
|
3548
3549
|
"name": "volumes",
|
|
3549
3550
|
"optional": true,
|
|
@@ -3560,6 +3561,6 @@
|
|
|
3560
3561
|
"symbolId": "src/low-cost-ecs:LowCostECSTaskDefinitionOptions"
|
|
3561
3562
|
}
|
|
3562
3563
|
},
|
|
3563
|
-
"version": "0.0.
|
|
3564
|
-
"fingerprint": "
|
|
3564
|
+
"version": "0.0.24",
|
|
3565
|
+
"fingerprint": "mY2OnK2X4isP1cFA/MBGNyiJUlg1lvtZRciahXTbM/4="
|
|
3565
3566
|
}
|
package/.prettierignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# ~~ Generated by projen. To modify, edit .projenrc.js and run "npx projen".
|
package/.prettierrc.json
ADDED
package/.projenrc.ts
CHANGED
|
@@ -10,18 +10,8 @@ const project = new awscdk.AwsCdkConstructLibrary({
|
|
|
10
10
|
license: 'MIT',
|
|
11
11
|
cdkVersion: '2.37.0',
|
|
12
12
|
defaultReleaseBranch: 'main',
|
|
13
|
-
keywords: [
|
|
14
|
-
|
|
15
|
-
'ecs',
|
|
16
|
-
'stepfunctions',
|
|
17
|
-
'route53',
|
|
18
|
-
'certbot',
|
|
19
|
-
'loadbalancer',
|
|
20
|
-
],
|
|
21
|
-
devDeps: [
|
|
22
|
-
'aws-cdk',
|
|
23
|
-
'ts-node',
|
|
24
|
-
],
|
|
13
|
+
keywords: ['cdk', 'ecs', 'stepfunctions', 'route53', 'certbot', 'loadbalancer'],
|
|
14
|
+
devDeps: ['aws-cdk', 'ts-node'],
|
|
25
15
|
stability: 'experimental',
|
|
26
16
|
|
|
27
17
|
python: {
|
|
@@ -37,6 +27,13 @@ const project = new awscdk.AwsCdkConstructLibrary({
|
|
|
37
27
|
labels: ['auto-approve'],
|
|
38
28
|
},
|
|
39
29
|
},
|
|
30
|
+
prettier: true,
|
|
31
|
+
prettierOptions: {
|
|
32
|
+
settings: {
|
|
33
|
+
printWidth: 100,
|
|
34
|
+
singleQuote: true,
|
|
35
|
+
},
|
|
36
|
+
},
|
|
40
37
|
projenrcTs: true,
|
|
41
38
|
});
|
|
42
39
|
|
|
@@ -52,4 +49,4 @@ const testTask = project.tasks.tryFind('test');
|
|
|
52
49
|
const newTestCommand = testTask!.steps[0]!.exec!.replace(' --updateSnapshot', '');
|
|
53
50
|
testTask!.reset(newTestCommand);
|
|
54
51
|
|
|
55
|
-
project.synth();
|
|
52
|
+
project.synth();
|
package/API.md
CHANGED
|
@@ -382,10 +382,12 @@ public readonly serverTaskDefinition: LowCostECSTaskDefinitionOptions;
|
|
|
382
382
|
```
|
|
383
383
|
|
|
384
384
|
- *Type:* <a href="#low-cost-ecs.LowCostECSTaskDefinitionOptions">LowCostECSTaskDefinitionOptions</a>
|
|
385
|
-
- *Default:* Nginx server task definition defined in
|
|
385
|
+
- *Default:* Nginx server task definition defined in sampleTaskDefinition()
|
|
386
386
|
|
|
387
387
|
Task definition for the server ecs task.
|
|
388
388
|
|
|
389
|
+
> [sampleTaskDefinition](sampleTaskDefinition)
|
|
390
|
+
|
|
389
391
|
---
|
|
390
392
|
|
|
391
393
|
##### `vpc`<sup>Optional</sup> <a name="vpc" id="low-cost-ecs.LowCostECSProps.property.vpc"></a>
|
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@ Edit settings in `examples/minimum.ts` and deploy the cdk construct. [Public hos
|
|
|
26
26
|
git clone https://github.com/rajyan/low-cost-ecs.git
|
|
27
27
|
yarn install
|
|
28
28
|
# edit settings in bin/low-cost-ecs.ts
|
|
29
|
-
|
|
29
|
+
cdk deploy
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
Access the configured `recordDomainNames` and see that the Nginx sample server has been deployed.
|
package/examples/all-props.ts
CHANGED
|
@@ -21,25 +21,35 @@ export const allProps = new LowCostECS(stack, 'LowCostECS', {
|
|
|
21
21
|
containerInsights: true,
|
|
22
22
|
hostInstanceSpotPrice: '0.010',
|
|
23
23
|
hostInstanceType: 't3.micro',
|
|
24
|
-
logGroup: LogGroup.fromLogGroupArn(
|
|
24
|
+
logGroup: LogGroup.fromLogGroupArn(
|
|
25
|
+
stack,
|
|
26
|
+
'LogGroup',
|
|
27
|
+
'arn:aws:logs:region:account-id:log-group:test'
|
|
28
|
+
),
|
|
25
29
|
recordDomainNames: ['test1.rajyan.net', 'test2.rajyan.net'],
|
|
26
30
|
removalPolicy: RemovalPolicy.RETAIN,
|
|
27
31
|
securityGroup: SecurityGroup.fromSecurityGroupId(stack, 'SecurityGroup', 'test-sg-id'),
|
|
28
32
|
serverTaskDefinition: {
|
|
29
|
-
containers: [
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
33
|
+
containers: [
|
|
34
|
+
{
|
|
35
|
+
containerName: 'test-container',
|
|
36
|
+
image: ContainerImage.fromRegistry('test-image'),
|
|
37
|
+
memoryLimitMiB: 32,
|
|
38
|
+
essential: true,
|
|
39
|
+
portMappings: [
|
|
40
|
+
{
|
|
41
|
+
containerPort: 80,
|
|
42
|
+
hostPort: 80,
|
|
43
|
+
protocol: Protocol.TCP,
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
volumes: [
|
|
49
|
+
{
|
|
50
|
+
name: 'test-volume',
|
|
51
|
+
},
|
|
52
|
+
],
|
|
43
53
|
},
|
|
44
54
|
vpc: new Vpc(stack, 'Vpc'),
|
|
45
55
|
});
|
package/lib/low-cost-ecs.d.ts
CHANGED
|
@@ -95,7 +95,8 @@ export interface LowCostECSProps {
|
|
|
95
95
|
/**
|
|
96
96
|
* Task definition for the server ecs task.
|
|
97
97
|
*
|
|
98
|
-
* @default - Nginx server task definition defined in
|
|
98
|
+
* @default - Nginx server task definition defined in sampleTaskDefinition()
|
|
99
|
+
* @see sampleTaskDefinition
|
|
99
100
|
*/
|
|
100
101
|
readonly serverTaskDefinition?: LowCostECSTaskDefinitionOptions;
|
|
101
102
|
}
|
|
@@ -114,5 +115,5 @@ export declare class LowCostECS extends Construct {
|
|
|
114
115
|
readonly service: ecs.Ec2Service;
|
|
115
116
|
constructor(scope: Construct, id: string, props: LowCostECSProps);
|
|
116
117
|
private createTaskDefinition;
|
|
117
|
-
private
|
|
118
|
+
private sampleTaskDefinition;
|
|
118
119
|
}
|
package/lib/low-cost-ecs.js
CHANGED
|
@@ -186,9 +186,7 @@ class LowCostECS extends constructs_1.Construct {
|
|
|
186
186
|
/**
|
|
187
187
|
* Server ECS task
|
|
188
188
|
*/
|
|
189
|
-
this.serverTaskDefinition = props.serverTaskDefinition
|
|
190
|
-
? this.createTaskDefinition(props.serverTaskDefinition)
|
|
191
|
-
: this.createSampleTaskDefinition(records, logGroup);
|
|
189
|
+
this.serverTaskDefinition = this.createTaskDefinition(props.serverTaskDefinition ?? this.sampleTaskDefinition(records, logGroup));
|
|
192
190
|
if (!this.serverTaskDefinition.defaultContainer) {
|
|
193
191
|
throw new Error('defaultContainer is required for serverTaskDefinition. Add at least one essential container.');
|
|
194
192
|
}
|
|
@@ -246,7 +244,9 @@ class LowCostECS extends constructs_1.Construct {
|
|
|
246
244
|
enableExecuteCommand: true,
|
|
247
245
|
});
|
|
248
246
|
new lib.CfnOutput(this, 'PublicIpAddress', { value: hostInstanceIp.ref });
|
|
249
|
-
new lib.CfnOutput(this, '
|
|
247
|
+
new lib.CfnOutput(this, 'CertbotStateMachineName', {
|
|
248
|
+
value: certbotStateMachine.stateMachineName,
|
|
249
|
+
});
|
|
250
250
|
new lib.CfnOutput(this, 'ClusterName', { value: this.cluster.clusterName });
|
|
251
251
|
new lib.CfnOutput(this, 'ServiceName', { value: this.service.serviceName });
|
|
252
252
|
}
|
|
@@ -258,35 +258,40 @@ class LowCostECS extends constructs_1.Construct {
|
|
|
258
258
|
taskDefinitionOptions.volumes?.forEach((volume) => serverTaskDefinition.addVolume(volume));
|
|
259
259
|
return serverTaskDefinition;
|
|
260
260
|
}
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
261
|
+
sampleTaskDefinition(records, logGroup) {
|
|
262
|
+
return {
|
|
263
|
+
containers: [
|
|
264
|
+
{
|
|
265
|
+
image: ecs.ContainerImage.fromAsset(path.join(__dirname, '../examples/containers/nginx')),
|
|
266
|
+
containerName: 'nginx',
|
|
267
|
+
memoryReservationMiB: 64,
|
|
268
|
+
essential: true,
|
|
269
|
+
environment: {
|
|
270
|
+
SERVER_NAME: records.join(' '),
|
|
271
|
+
CERT_NAME: records[0],
|
|
272
|
+
},
|
|
273
|
+
logging: ecs.LogDrivers.awsLogs({
|
|
274
|
+
logGroup: logGroup,
|
|
275
|
+
streamPrefix: 'sample',
|
|
276
|
+
}),
|
|
277
|
+
portMappings: [
|
|
278
|
+
{
|
|
279
|
+
hostPort: 80,
|
|
280
|
+
containerPort: 80,
|
|
281
|
+
protocol: ecs.Protocol.TCP,
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
hostPort: 443,
|
|
285
|
+
containerPort: 443,
|
|
286
|
+
protocol: ecs.Protocol.TCP,
|
|
287
|
+
},
|
|
288
|
+
],
|
|
289
|
+
},
|
|
290
|
+
],
|
|
291
|
+
};
|
|
287
292
|
}
|
|
288
293
|
}
|
|
289
294
|
exports.LowCostECS = LowCostECS;
|
|
290
295
|
_a = JSII_RTTI_SYMBOL_1;
|
|
291
|
-
LowCostECS[_a] = { fqn: "low-cost-ecs.LowCostECS", version: "0.0.
|
|
292
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG93LWNvc3QtZWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvdy1jb3N0LWVjcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZCQUE2QjtBQUM3QixtQ0FBbUM7QUFFbkMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxpREFBaUQ7QUFDakQsdURBQXdEO0FBQ3hELHVFQUFpRTtBQUNqRSxpREFBNkU7QUFDN0UsbURBQTBFO0FBQzFFLG1EQUFtRDtBQUNuRCxpREFBZ0Y7QUFDaEYscURBQXFEO0FBQ3JELGlFQUFpRTtBQUNqRSwyQ0FBdUM7QUFtSHZDLE1BQWEsVUFBVyxTQUFRLHNCQUFTO0lBU3ZDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsR0FBRztZQUNOLEtBQUssQ0FBQyxHQUFHO2dCQUNULElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFO29CQUN4QixXQUFXLEVBQUUsQ0FBQztvQkFDZCxtQkFBbUIsRUFBRTt3QkFDbkI7NEJBQ0UsSUFBSSxFQUFFLGNBQWM7NEJBQ3BCLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU07eUJBQ2xDO3FCQUNGO2lCQUNGLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUU7WUFDL0MsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2IsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtTQUMzQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQUU7WUFDM0UsWUFBWSxFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZ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QUFTLEVBQUUsSUFBSTtZQUNmLFdBQVcsRUFBRTtnQkFDWCxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBQzlCLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQ3RCO1lBQ0QsT0FBTyxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO2dCQUM5QixRQUFRLEVBQUUsUUFBUTtnQkFDbEIsWUFBWSxFQUFFLGFBQWE7YUFDNUIsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVILGNBQWMsQ0FBQyxlQUFlLENBQzVCO1lBQ0UsUUFBUSxFQUFFLEVBQUU7WUFDWixhQUFhLEVBQUUsRUFBRTtZQUNqQixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHO1NBQzNCLEVBQ0Q7WUFDRSxRQUFRLEVBQUUsR0FBRztZQUNiLGFBQWEsRUFBRSxHQUFHO1lBQ2xCLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUc7U0FDM0IsQ0FDRixDQUFDO1FBRUYsT0FBTyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDOztBQXpXSCxnQ0EwV0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgbGliIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEF1dG9TY2FsaW5nR3JvdXAgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYXV0b3NjYWxpbmcnO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0ICogYXMgZWNzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lY3MnO1xuaW1wb3J0IHsgRmlsZVN5c3RlbSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lZnMnO1xuaW1wb3J0IHsgUnVsZSwgU2NoZWR1bGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCB7IFNmblN0YXRlTWFjaGluZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0cyc7XG5pbXBvcnQgeyBFZmZlY3QsIE1hbmFnZWRQb2xpY3ksIFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgSUxvZ0dyb3VwLCBMb2dHcm91cCwgUmV0ZW50aW9uRGF5cyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCAqIGFzIHJvdXRlNTMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXJvdXRlNTMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBTdWJzY3JpcHRpb25Qcm90b2NvbCwgVG9waWMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc25zJztcbmltcG9ydCAqIGFzIHNmbiBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucyc7XG5pbXBvcnQgKiBhcyBzZm5fdGFza3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG93Q29zdEVDU1Byb3BzIHtcbiAgLyoqXG4gICAqIERvbWFpbiBuYW1lIG9mIHRoZSBob3N0ZWQgem9uZS5cbiAgICovXG4gIHJlYWRvbmx5IGhvc3RlZFpvbmVEb21haW46IHN0cmluZztcblxuICAvKipcbiAgICogRW1haWwgZm9yIGV4cGlyYXRpb24gZW1haWxzIHRvIHJlZ2lzdGVyIHRvIHlvdXIgbGV0J3MgZW5jcnlwdCBhY2NvdW50LlxuICAgKlxuICAgKiBAbGluayBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9kb2NzL2V4cGlyYXRpb24tZW1haWxzL1xuICAgKlxuICAgKiBBbHNvIHJlZ2lzdGVyZWQgYXMgYSBzdWJzY3JpYmVyIG9mIHRoZSBzbnMgdG9waWMsIG5vdGlmaWVkIG9uIGNlcnRib3QgdGFzayBmYWlsdXJlLlxuICAgKiBTdWJzY3JpcHRpb24gY29uZmlybWF0aW9uIGVtYWlsIHdvdWxkIGJlIHNlbnQgb24gc3RhY2sgY3JlYXRpb24uXG4gICAqXG4gICAqIEBsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zbnMvbGF0ZXN0L2RnL3Nucy1lbWFpbC1ub3RpZmljYXRpb25zLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGVtYWlsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERvbWFpbiBuYW1lcyBmb3IgQSByZWNvcmRzIHRvIGVsYXN0aWMgaXAgb2YgRUNTIGhvc3QgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gWyBwcm9wcy5ob3N0ZWRab25lLnpvbmVOYW1lIF1cbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZERvbWFpbk5hbWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFZwYyBvZiB0aGUgRUNTIGhvc3QgaW5zdGFuY2UgYW5kIGNsdXN0ZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ3JlYXRlcyB2cGMgd2l0aCBvbmx5IHB1YmxpYyBzdWJuZXRzIGFuZCBubyBOQVQgZ2F0ZXdheXMuXG4gICAqL1xuICByZWFkb25seSB2cGM/OiBlYzIuSVZwYztcblxuICAvKipcbiAgICogU2VjdXJpdHkgZ3JvdXAgb2YgdGhlIEVDUyBob3N0IGluc3RhbmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ3JlYXRlcyBzZWN1cml0eSBncm91cCB3aXRoIGFsbG93QWxsT3V0Ym91bmQgYW5kIGluZ3Jlc3MgcnVsZSAoaXB2NCwgaXB2NikgPT4gKHRjcCA4MCwgNDQzKS5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA/OiBlYzIuSVNlY3VyaXR5R3JvdXA7XG5cbiAgLyoqXG4gICAqIEluc3RhbmNlIHR5cGUgb2YgdGhlIEVDUyBob3N0IGluc3RhbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHQyLm1pY3JvXG4gICAqL1xuICByZWFkb25seSBob3N0SW5zdGFuY2VUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBob3VybHkgcHJpY2UgKGluIFVTRCkgdG8gYmUgcGFpZCBmb3IgYW55IFNwb3QgSW5zdGFuY2UgbGF1bmNoZWQgdG8gZnVsZmlsbCB0aGUgcmVxdWVzdC5cbiAgICogSG9zdCBpbnN0YW5jZSBhc2cgd291bGQgdXNlIHNwb3QgaW5zdGFuY2VzIGlmIGhvc3RJbnN0YW5jZVNwb3RQcmljZSBpcyBzZXQuXG4gICAqXG4gICAqIEBsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL3YyL2RvY3MvYXdzLWNkay1saWIuYXdzX2Vjcy5BZGRDYXBhY2l0eU9wdGlvbnMuaHRtbCNzcG90cHJpY2VcbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IGhvc3RJbnN0YW5jZVNwb3RQcmljZT86IHN0cmluZztcblxuICAvKipcbiAgICogTG9nIGdyb3VwIG9mIHRoZSBjZXJ0Ym90IHRhc2sgYW5kIHRoZSBhd3MtY2xpIHRhc2suXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ3JlYXRlcyBkZWZhdWx0IGNkayBsb2cgZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IGxvZ0dyb3VwPzogSUxvZ0dyb3VwO1xuXG4gIC8qKlxuICAgKiBEb2NrZXIgaW1hZ2UgdGFnIG9mIGNlcnRib3QvZG5zLXJvdXRlNTMgdG8gY3JlYXRlIGNlcnRpZmljYXRlcy5cbiAgICpcbiAgICogQGxpbmsgaHR0cHM6Ly9odWIuZG9ja2VyLmNvbS9yL2NlcnRib3QvZG5zLXJvdXRlNTMvdGFnc1xuICAgKiBAZGVmYXVsdCAtIHYxLjI5LjBcbiAgICovXG4gIHJlYWRvbmx5IGNlcnRib3REb2NrZXJUYWc/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENlcnRib3QgdGFzayBzY2hlZHVsZSBpbnRlcnZhbCBpbiBkYXlzIHRvIHJlbmV3IHRoZSBjZXJ0aWZpY2F0ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSA2MFxuICAgKi9cbiAgcmVhZG9ubHkgY2VydGJvdFNjaGVkdWxlSW50ZXJ2YWw/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIERvY2tlciBpbWFnZSB0YWcgb2YgYW1hem9uL2F3cy1jbGkuXG4gICAqIFRoaXMgaW1hZ2UgaXMgdXNlZCB0byBhc3NvY2lhdGUgZWxhc3RpYyBpcCBvbiBob3N0IGluc3RhbmNlIHN0YXJ0dXAsIGFuZCBydW4gY2VydGJvdCBjZm4gb24gZWNzIGNvbnRhaW5lciBzdGFydHVwLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGxhdGVzdFxuICAgKi9cbiAgcmVhZG9ubHkgYXdzQ2xpRG9ja2VyVGFnPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgY29udGFpbmVyIGluc2lnaHRzIG9yIG5vdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZCAoY29udGFpbmVyIGluc2lnaHRzIGRpc2FibGVkKVxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVySW5zaWdodHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZW1vdmFsIHBvbGljeSBmb3IgdGhlIGZpbGUgc3lzdGVtIGFuZCBsb2cgZ3JvdXAgKGlmIHVzaW5nIGRlZmF1bHQpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFJlbW92YWxQb2xpY3kuREVTVFJPWVxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IGxpYi5SZW1vdmFsUG9saWN5O1xuXG4gIC8qKlxuICAgKiBUYXNrIGRlZmluaXRpb24gZm9yIHRoZSBzZXJ2ZXIgZWNzIHRhc2suXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTmdpbnggc2VydmVyIHRhc2sgZGVmaW5pdGlvbiBkZWZpbmVkIGluIGNyZWF0ZVNhbXBsZVRhc2tEZWZpbml0aW9uKClcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZlclRhc2tEZWZpbml0aW9uPzogTG93Q29zdEVDU1Rhc2tEZWZpbml0aW9uT3B0aW9ucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb3dDb3N0RUNTVGFza0RlZmluaXRpb25PcHRpb25zIHtcbiAgcmVhZG9ubHkgdGFza0RlZmluaXRpb24/OiBlY3MuRWMyVGFza0RlZmluaXRpb25Qcm9wcztcbiAgcmVhZG9ubHkgY29udGFpbmVyczogZWNzLkNvbnRhaW5lckRlZmluaXRpb25PcHRpb25zW107XG4gIHJlYWRvbmx5IHZvbHVtZXM/OiBlY3MuVm9sdW1lW107XG59XG5cbmV4cG9ydCBjbGFzcyBMb3dDb3N0RUNTIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcmVhZG9ubHkgdnBjOiBlYzIuSVZwYztcbiAgcmVhZG9ubHkgaG9zdEF1dG9TY2FsaW5nR3JvdXA6IEF1dG9TY2FsaW5nR3JvdXA7XG4gIHJlYWRvbmx5IGNlcnRGaWxlU3lzdGVtOiBGaWxlU3lzdGVtO1xuICByZWFkb25seSB0b3BpYzogVG9waWM7XG4gIHJlYWRvbmx5IGNsdXN0ZXI6IGVjcy5DbHVzdGVyO1xuICByZWFkb25seSBzZXJ2ZXJUYXNrRGVmaW5pdGlvbjogZWNzLkVjMlRhc2tEZWZpbml0aW9uO1xuICByZWFkb25seSBzZXJ2aWNlOiBlY3MuRWMyU2VydmljZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTG93Q29zdEVDU1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMudnBjID1cbiAgICAgIHByb3BzLnZwYyA/P1xuICAgICAgbmV3IGVjMi5WcGMoc2NvcGUsICdWcGMnLCB7XG4gICAgICAgIG5hdEdhdGV3YXlzOiAwLFxuICAgICAgICBzdWJuZXRDb25maWd1cmF0aW9uOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ1B1YmxpY1N1Ym5ldCcsXG4gICAgICAgICAgICBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5jbHVzdGVyID0gbmV3IGVjcy5DbHVzdGVyKHNjb3BlLCAnQ2x1c3RlcicsIHtcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICBjb250YWluZXJJbnNpZ2h0czogcHJvcHMuY29udGFpbmVySW5zaWdodHMsXG4gICAgfSk7XG5cbiAgICB0aGlzLmhvc3RBdXRvU2NhbGluZ0dyb3VwID0gdGhpcy5jbHVzdGVyLmFkZENhcGFjaXR5KCdIb3N0SW5zdGFuY2VDYXBhY2l0eScsIHtcbiAgICAgIG1hY2hpbmVJbWFnZTogZWNzLkVjc09wdGltaXplZEltYWdlLmFtYXpvbkxpbnV4MihcbiAgICAgICAgZWNzLkFtaUhhcmR3YXJlVHlwZS5TVEFOREFSRCxcbiAgICAgICAge1xuICAgICAgICAgIGNhY2hlZEluQ29udGV4dDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgICBpbnN0YW5jZVR5cGU6IG5ldyBlYzIuSW5zdGFuY2VUeXBlKHByb3BzLmhvc3RJbnN0YW5jZVR5cGUgPz8gJ3QyLm1pY3JvJyksXG4gICAgICBzcG90UHJpY2U6IHByb3BzLmhvc3RJbnN0YW5jZVNwb3RQcmljZSxcbiAgICAgIHZwY1N1Ym5ldHM6IHsgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFVCTElDIH0sXG4gICAgICBhc3NvY2lhdGVQdWJsaWNJcEFkZHJlc3M6IHRydWUsXG4gICAgICBtaW5DYXBhY2l0eTogMSxcbiAgICAgIG1heENhcGFjaXR5OiAxLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLnNlY3VyaXR5R3JvdXApIHtcbiAgICAgIHRoaXMuaG9zdEF1dG9TY2FsaW5nR3JvdXAubm9kZS50cnlSZW1vdmVDaGlsZCgnSW5zdGFuY2VTZWN1cml0eUdyb3VwJyk7XG4gICAgICB0aGlzLmhvc3RBdXRvU2NhbGluZ0dyb3VwLmFkZFNlY3VyaXR5R3JvdXAocHJvcHMuc2VjdXJpdHlHcm91cCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaG9zdEF1dG9TY2FsaW5nR3JvdXAuY29ubmVjdGlvbnMuYWxsb3dGcm9tQW55SXB2NChlYzIuUG9ydC50Y3AoODApKTtcbiAgICAgIHRoaXMuaG9zdEF1dG9TY2FsaW5nR3JvdXAuY29ubmVjdGlvbnMuYWxsb3dGcm9tQW55SXB2NChlYzIuUG9ydC50Y3AoNDQzKSk7XG4gICAgICB0aGlzLmhvc3RBdXRvU2NhbGluZ0dyb3VwLmNvbm5lY3Rpb25zLmFsbG93RnJvbShcbiAgICAgICAgZWMyLlBlZXIuYW55SXB2NigpLFxuICAgICAgICBlYzIuUG9ydC50Y3AoODApLFxuICAgICAgKTtcbiAgICAgIHRoaXMuaG9zdEF1dG9TY2FsaW5nR3JvdXAuY29ubmVjdGlvbnMuYWxsb3dGcm9tKFxuICAgICAgICBlYzIuUGVlci5hbnlJcHY2KCksXG4gICAgICAgIGVjMi5Qb3J0LnRjcCg0NDMpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgbWFuYWdlZCBwb2xpY3kgdG8gYWxsb3cgc3NoIHRocm91Z2ggc3NtIG1hbmFnZXJcbiAgICAgKi9cbiAgICB0aGlzLmhvc3RBdXRvU2NhbGluZ0dyb3VwLnJvbGUuYWRkTWFuYWdlZFBvbGljeShcbiAgICAgIE1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdBbWF6b25TU01NYW5hZ2VkSW5zdGFuY2VDb3JlJyksXG4gICAgKTtcbiAgICAvKipcbiAgICAgKiBBZGQgcG9saWN5IHRvIGFzc29jaWF0ZSBlbGFzdGljIGlwIG9uIHN0YXJ0dXBcbiAgICAgKi9cbiAgICB0aGlzLmhvc3RBdXRvU2NhbGluZ0dyb3VwLnJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsnZWMyOkRlc2NyaWJlQWRkcmVzc2VzJywgJ2VjMjpBc3NvY2lhdGVBZGRyZXNzJ10sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgY29uc3QgaG9zdEluc3RhbmNlSXAgPSBuZXcgZWMyLkNmbkVJUCh0aGlzLCAnSG9zdEluc3RhbmNlSXAnKTtcbiAgICBjb25zdCB0YWdVbmlxdWVJZCA9IGxpYi5OYW1lcy51bmlxdWVJZChob3N0SW5zdGFuY2VJcCk7XG4gICAgaG9zdEluc3RhbmNlSXAudGFncy5zZXRUYWcoJ05hbWUnLCB0YWdVbmlxdWVJZCk7XG5cbiAgICBjb25zdCBhd3NDbGlUYWcgPSBwcm9wcy5hd3NDbGlEb2NrZXJUYWcgPz8gJ2xhdGVzdCc7XG4gICAgdGhpcy5ob3N0QXV0b1NjYWxpbmdHcm91cC5hZGRVc2VyRGF0YShcbiAgICAgICdJTlNUQU5DRV9JRD0kKGN1cmwgLS1zaWxlbnQgaHR0cDovLzE2OS4yNTQuMTY5LjI1NC9sYXRlc3QvbWV0YS1kYXRhL2luc3RhbmNlLWlkKScsXG4gICAgICBgQUxMT0NBVElPTl9JRD0kKGRvY2tlciBydW4gLS1uZXQ9aG9zdCBhbWF6b24vYXdzLWNsaToke2F3c0NsaVRhZ30gZWMyIGRlc2NyaWJlLWFkZHJlc3NlcyAtLXJlZ2lvbiAke3RoaXMuaG9zdEF1dG9TY2FsaW5nR3JvdXAuZW52LnJlZ2lvbn0gLS1maWx0ZXIgTmFtZT10YWc6TmFtZSxWYWx1ZXM9JHt0YWdVbmlxdWVJZH0gLS1xdWVyeSAnQWRkcmVzc2VzW10uQWxsb2NhdGlvbklkJyAtLW91dHB1dCB0ZXh0IHwgaGVhZClgLFxuICAgICAgYGRvY2tlciBydW4gLS1uZXQ9aG9zdCBhbWF6b24vYXdzLWNsaToke2F3c0NsaVRhZ30gZWMyIGFzc29jaWF0ZS1hZGRyZXNzIC0tcmVnaW9uICR7dGhpcy5ob3N0QXV0b1NjYWxpbmdHcm91cC5lbnYucmVnaW9ufSAtLWluc3RhbmNlLWlkIFwiJElOU1RBTkNFX0lEXCIgLS1hbGxvY2F0aW9uLWlkIFwiJEFMTE9DQVRJT05fSURcIiAtLWFsbG93LXJlYXNzb2NpYXRpb25gLFxuICAgICk7XG5cbiAgICB0aGlzLmNlcnRGaWxlU3lzdGVtID0gbmV3IEZpbGVTeXN0ZW0odGhpcywgJ0ZpbGVTeXN0ZW0nLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgZW5jcnlwdGVkOiB0cnVlLFxuICAgICAgc2VjdXJpdHlHcm91cDogbmV3IGVjMi5TZWN1cml0eUdyb3VwKHRoaXMsICdGaWxlU3lzdGVtU2VjdXJpdHlHcm91cCcsIHtcbiAgICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgICAgYWxsb3dBbGxPdXRib3VuZDogZmFsc2UsXG4gICAgICB9KSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3kgPz8gbGliLlJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICB9KTtcbiAgICB0aGlzLmNlcnRGaWxlU3lzdGVtLmNvbm5lY3Rpb25zLmFsbG93RGVmYXVsdFBvcnRUbyh0aGlzLmhvc3RBdXRvU2NhbGluZ0dyb3VwKTtcbiAgICB0aGlzLmNlcnRGaWxlU3lzdGVtLmNvbm5lY3Rpb25zLmFsbG93RGVmYXVsdFBvcnRGcm9tKHRoaXMuaG9zdEF1dG9TY2FsaW5nR3JvdXApO1xuXG4gICAgLyoqXG4gICAgICogQVJlY29yZCB0byBFbGFzdGljIGlwXG4gICAgICovXG4gICAgY29uc3QgaG9zdGVkWm9uZSA9IHJvdXRlNTMuSG9zdGVkWm9uZS5mcm9tTG9va3VwKHRoaXMsICdIb3N0ZWRab25lJywge1xuICAgICAgZG9tYWluTmFtZTogcHJvcHMuaG9zdGVkWm9uZURvbWFpbixcbiAgICB9KTtcbiAgICBjb25zdCByZWNvcmRzID0gcHJvcHMucmVjb3JkRG9tYWluTmFtZXMgPz8gW2hvc3RlZFpvbmUuem9uZU5hbWVdO1xuICAgIHJlY29yZHMuZm9yRWFjaChcbiAgICAgIChyZWNvcmQpID0+XG4gICAgICAgIG5ldyByb3V0ZTUzLkFSZWNvcmQodGhpcywgYEFSZWNvcmQke3JlY29yZH1gLCB7XG4gICAgICAgICAgem9uZTogaG9zdGVkWm9uZSxcbiAgICAgICAgICByZWNvcmROYW1lOiByZWNvcmQsXG4gICAgICAgICAgdGFyZ2V0OiByb3V0ZTUzLlJlY29yZFRhcmdldC5mcm9tSXBBZGRyZXNzZXMoaG9zdEluc3RhbmNlSXAucmVmKSxcbiAgICAgICAgfSksXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIENlcnRib3QgVGFzayBEZWZpbml0aW9uXG4gICAgICogTW91bnRzIGdlbmVyYXRlZCBjZXJ0aWZpY2F0ZSB0byBFRlNcbiAgICAgKi9cbiAgICBjb25zdCBsb2dHcm91cCA9XG4gICAgICBwcm9wcy5sb2dHcm91cCA/P1xuICAgICAgbmV3IExvZ0dyb3VwKHRoaXMsICdMb2dHcm91cCcsIHtcbiAgICAgICAgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19ZRUFSUyxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeSA/PyBsaWIuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgfSk7XG5cbiAgICBjb25zdCBjZXJ0Ym90VGFza0RlZmluaXRpb24gPSBuZXcgZWNzLkVjMlRhc2tEZWZpbml0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgICdDZXJ0Ym90VGFza0RlZmluaXRpb24nLFxuICAgICk7XG4gICAgY2VydGJvdFRhc2tEZWZpbml0aW9uLmFkZFRvVGFza1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsncm91dGU1MzpMaXN0SG9zdGVkWm9uZXMnLCAncm91dGU1MzpHZXRDaGFuZ2UnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY2VydGJvdFRhc2tEZWZpbml0aW9uLmFkZFRvVGFza1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsncm91dGU1MzpDaGFuZ2VSZXNvdXJjZVJlY29yZFNldHMnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbaG9zdGVkWm9uZS5ob3N0ZWRab25lQXJuXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb25zdCBjZXJ0Ym90VGFnID0gcHJvcHMuY2VydGJvdERvY2tlclRhZyA/PyAndjEuMjkuMCc7XG4gICAgY29uc3QgY2VydGJvdENvbnRhaW5lciA9IGNlcnRib3RUYXNrRGVmaW5pdGlvbi5hZGRDb250YWluZXIoXG4gICAgICAnQ2VydGJvdENvbnRhaW5lcicsXG4gICAgICB7XG4gICAgICAgIGltYWdlOiBlY3MuQ29udGFpbmVySW1hZ2UuZnJvbVJlZ2lzdHJ5KFxuICAgICAgICAgIGBjZXJ0Ym90L2Rucy1yb3V0ZTUzOiR7Y2VydGJvdFRhZ31gLFxuICAgICAgICApLFxuICAgICAgICBjb250YWluZXJOYW1lOiAnY2VydGJvdCcsXG4gICAgICAgIG1lbW9yeVJlc2VydmF0aW9uTWlCOiA2NCxcbiAgICAgICAgY29tbWFuZDogW1xuICAgICAgICAgICdjZXJ0b25seScsXG4gICAgICAgICAgJy0tdmVyYm9zZScsXG4gICAgICAgICAgJy0tcHJlZmVycmVkLWNoYWxsZW5nZXM9ZG5zLTAxJyxcbiAgICAgICAgICAnLS1kbnMtcm91dGU1MycsXG4gICAgICAgICAgJy0tZG5zLXJvdXRlNTMtcHJvcGFnYXRpb24tc2Vjb25kcz0zMDAnLFxuICAgICAgICAgICctLW5vbi1pbnRlcmFjdGl2ZScsXG4gICAgICAgICAgJy0tYWdyZWUtdG9zJyxcbiAgICAgICAgICAnLS1leHBhbmQnLFxuICAgICAgICAgICctbScsXG4gICAgICAgICAgcHJvcHMuZW1haWwsXG4gICAgICAgICAgJy0tY2VydC1uYW1lJyxcbiAgICAgICAgICByZWNvcmRzWzBdLFxuICAgICAgICAgIC4uLnJlY29yZHMuZmxhdE1hcCgoZG9tYWluKSA9PiBbJy1kJywgZG9tYWluXSksXG4gICAgICAgIF0sXG4gICAgICAgIGxvZ2dpbmc6IGVjcy5Mb2dEcml2ZXIuYXdzTG9ncyh7XG4gICAgICAgICAgbG9nR3JvdXAsXG4gICAgICAgICAgc3RyZWFtUHJlZml4OiBjZXJ0Ym90VGFnLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMuY2VydEZpbGVTeXN0ZW0uZ3JhbnQoXG4gICAgICBjZXJ0Ym90VGFza0RlZmluaXRpb24udGFza1JvbGUsXG4gICAgICAnZWxhc3RpY2ZpbGVzeXN0ZW06Q2xpZW50V3JpdGUnLFxuICAgICk7XG4gICAgY2VydGJvdFRhc2tEZWZpbml0aW9uLmFkZFZvbHVtZSh7XG4gICAgICBuYW1lOiAnY2VydFZvbHVtZScsXG4gICAgICBlZnNWb2x1bWVDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIGZpbGVTeXN0ZW1JZDogdGhpcy5jZXJ0RmlsZVN5c3RlbS5maWxlU3lzdGVtSWQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNlcnRib3RDb250YWluZXIuYWRkTW91bnRQb2ludHMoe1xuICAgICAgc291cmNlVm9sdW1lOiAnY2VydFZvbHVtZScsXG4gICAgICBjb250YWluZXJQYXRoOiAnL2V0Yy9sZXRzZW5jcnlwdCcsXG4gICAgICByZWFkT25seTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBTY2hlZHVsZSBDZXJ0Ym90IGNlcnRpZmljYXRlIGNyZWF0ZS9yZW5ldyBvbiBTdGVwIEZ1bmN0aW9uc1xuICAgICAqIFNlbmRzIGVtYWlsIG5vdGlmaWNhdGlvbiBvbiBjZXJ0Ym90IGZhaWx1cmVcbiAgICAgKi9cbiAgICB0aGlzLnRvcGljID0gbmV3IFRvcGljKHRoaXMsICdUb3BpYycpO1xuICAgIG5ldyBTdWJzY3JpcHRpb24odGhpcywgJ0VtYWlsU3Vic2NyaXB0aW9uJywge1xuICAgICAgdG9waWM6IHRoaXMudG9waWMsXG4gICAgICBwcm90b2NvbDogU3Vic2NyaXB0aW9uUHJvdG9jb2wuRU1BSUwsXG4gICAgICBlbmRwb2ludDogcHJvcHMuZW1haWwsXG4gICAgfSk7XG5cbiAgICBjb25zdCBjZXJ0Ym90UnVuVGFzayA9IG5ldyBzZm5fdGFza3MuRWNzUnVuVGFzayh0aGlzLCAnQ3JlYXRlQ2VydGlmaWNhdGUnLCB7XG4gICAgICBjbHVzdGVyOiB0aGlzLmNsdXN0ZXIsXG4gICAgICB0YXNrRGVmaW5pdGlvbjogY2VydGJvdFRhc2tEZWZpbml0aW9uLFxuICAgICAgbGF1bmNoVGFyZ2V0OiBuZXcgc2ZuX3Rhc2tzLkVjc0VjMkxhdW5jaFRhcmdldCgpLFxuICAgICAgaW50ZWdyYXRpb25QYXR0ZXJuOiBzZm4uSW50ZWdyYXRpb25QYXR0ZXJuLlJVTl9KT0IsXG4gICAgfSk7XG4gICAgY2VydGJvdFJ1blRhc2suYWRkQ2F0Y2goXG4gICAgICBuZXcgc2ZuX3Rhc2tzLlNuc1B1Ymxpc2godGhpcywgJ1NlbmRFbWFpbE9uRmFpbHVyZScsIHtcbiAgICAgICAgdG9waWM6IHRoaXMudG9waWMsXG4gICAgICAgIG1lc3NhZ2U6IHNmbi5UYXNrSW5wdXQuZnJvbUpzb25QYXRoQXQoJyQnKSxcbiAgICAgIH0pLm5leHQobmV3IHNmbi5GYWlsKHRoaXMsICdGYWlsJykpLFxuICAgICk7XG4gICAgY2VydGJvdFJ1blRhc2suYWRkUmV0cnkoe1xuICAgICAgaW50ZXJ2YWw6IGxpYi5EdXJhdGlvbi5zZWNvbmRzKDIwKSxcbiAgICB9KTtcbiAgICBjb25zdCBjZXJ0Ym90U3RhdGVNYWNoaW5lID0gbmV3IHNmbi5TdGF0ZU1hY2hpbmUodGhpcywgJ1N0YXRlTWFjaGluZScsIHtcbiAgICAgIGRlZmluaXRpb246IGNlcnRib3RSdW5UYXNrLFxuICAgIH0pO1xuXG4gICAgbmV3IFJ1bGUodGhpcywgJ0NlcnRib3RTY2hlZHVsZVJ1bGUnLCB7XG4gICAgICBzY2hlZHVsZTogU2NoZWR1bGUucmF0ZShcbiAgICAgICAgbGliLkR1cmF0aW9uLmRheXMocHJvcHMuY2VydGJvdFNjaGVkdWxlSW50ZXJ2YWwgPz8gNjApLFxuICAgICAgKSxcbiAgICAgIHRhcmdldHM6IFtuZXcgU2ZuU3RhdGVNYWNoaW5lKGNlcnRib3RTdGF0ZU1hY2hpbmUpXSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFNlcnZlciBFQ1MgdGFza1xuICAgICAqL1xuICAgIHRoaXMuc2VydmVyVGFza0RlZmluaXRpb24gPSBwcm9wcy5zZXJ2ZXJUYXNrRGVmaW5pdGlvblxuICAgICAgPyB0aGlzLmNyZWF0ZVRhc2tEZWZpbml0aW9uKHByb3BzLnNlcnZlclRhc2tEZWZpbml0aW9uKVxuICAgICAgOiB0aGlzLmNyZWF0ZVNhbXBsZVRhc2tEZWZpbml0aW9uKHJlY29yZHMsIGxvZ0dyb3VwKTtcblxuICAgIGlmICghdGhpcy5zZXJ2ZXJUYXNrRGVmaW5pdGlvbi5kZWZhdWx0Q29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlZmF1bHRDb250YWluZXIgaXMgcmVxdWlyZWQgZm9yIHNlcnZlclRhc2tEZWZpbml0aW9uLiBBZGQgYXQgbGVhc3Qgb25lIGVzc2VudGlhbCBjb250YWluZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jZXJ0RmlsZVN5c3RlbS5ncmFudChcbiAgICAgIHRoaXMuc2VydmVyVGFza0RlZmluaXRpb24udGFza1JvbGUsXG4gICAgICAnZWxhc3RpY2ZpbGVzeXN0ZW06Q2xpZW50TW91bnQnLFxuICAgICk7XG4gICAgdGhpcy5zZXJ2ZXJUYXNrRGVmaW5pdGlvbi5hZGRWb2x1bWUoe1xuICAgICAgbmFtZTogJ2NlcnRWb2x1bWUnLFxuICAgICAgZWZzVm9sdW1lQ29uZmlndXJhdGlvbjoge1xuICAgICAgICBmaWxlU3lzdGVtSWQ6IHRoaXMuY2VydEZpbGVTeXN0ZW0uZmlsZVN5c3RlbUlkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnNlcnZlclRhc2tEZWZpbml0aW9uLmRlZmF1bHRDb250YWluZXIuYWRkTW91bnRQb2ludHMoe1xuICAgICAgc291cmNlVm9sdW1lOiAnY2VydFZvbHVtZScsXG4gICAgICBjb250YWluZXJQYXRoOiAnL2V0Yy9sZXRzZW5jcnlwdCcsXG4gICAgICByZWFkT25seTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEFXUyBjbGkgY29udGFpbmVyIHRvIGV4ZWN1dGUgY2VydGJvdCBzZm4gYmVmb3JlIHRoZSBkZWZhdWx0IGNvbnRhaW5lciBzdGFydHVwLlxuICAgICAqL1xuICAgIHRoaXMuc2VydmVyVGFza0RlZmluaXRpb24uZGVmYXVsdENvbnRhaW5lci5hZGRDb250YWluZXJEZXBlbmRlbmNpZXMoe1xuICAgICAgY29udGFpbmVyOiB0aGlzLnNlcnZlclRhc2tEZWZpbml0aW9uLmFkZENvbnRhaW5lcignQVdTQ2xpQ29udGFpbmVyJywge1xuICAgICAgICBpbWFnZTogZWNzLkNvbnRhaW5lckltYWdlLmZyb21SZWdpc3RyeShgYW1hem9uL2F3cy1jbGk6JHthd3NDbGlUYWd9YCksXG4gICAgICAgIGNvbnRhaW5lck5hbWU6ICdhd3MtY2xpJyxcbiAgICAgICAgbWVtb3J5UmVzZXJ2YXRpb25NaUI6IDY0LFxuICAgICAgICBlbnRyeVBvaW50OiBbJy9iaW4vYmFzaCcsICctYyddLFxuICAgICAgICBjb21tYW5kOiBbXG4gICAgICAgICAgYHNldCAtZXV4XG4gICAgICAgICAgYXdzIGNvbmZpZ3VyZSBzZXQgcmVnaW9uICR7Y2VydGJvdFN0YXRlTWFjaGluZS5lbnYucmVnaW9ufSAmJiBcXFxcXG4gICAgICAgICAgYXdzIGNvbmZpZ3VyZSBzZXQgb3V0cHV0IHRleHQgJiYgXFxcXFxuICAgICAgICAgIEVYRUNVVElPTl9BUk49JChhd3Mgc3RlcGZ1bmN0aW9ucyBzdGFydC1leGVjdXRpb24gLS1zdGF0ZS1tYWNoaW5lLWFybiAke2NlcnRib3RTdGF0ZU1hY2hpbmUuc3RhdGVNYWNoaW5lQXJufSAtLXF1ZXJ5IGV4ZWN1dGlvbkFybikgJiYgXFxcXFxuICAgICAgICAgIHVudGlsIFsgJChhd3Mgc3RlcGZ1bmN0aW9ucyBkZXNjcmliZS1leGVjdXRpb24gLS1leGVjdXRpb24tYXJuIFwiJEVYRUNVVElPTl9BUk5cIiAtLXF1ZXJ5IHN0YXR1cykgIT0gUlVOTklORyBdO1xuICAgICAgICAgIGRvXG4gICAgICAgICAgICBlY2hvIFwiV2FpdGluZyBmb3IgJEVYRUNVVElPTl9BUk5cIlxuICAgICAgICAgICAgc2xlZXAgMTBcbiAgICAgICAgICBkb25lYCxcbiAgICAgICAgXSxcbiAgICAgICAgZXNzZW50aWFsOiBmYWxzZSxcbiAgICAgICAgbG9nZ2luZzogZWNzLkxvZ0RyaXZlci5hd3NMb2dzKHtcbiAgICAgICAgICBsb2dHcm91cDogbG9nR3JvdXAsXG4gICAgICAgICAgc3RyZWFtUHJlZml4OiBhd3NDbGlUYWcsXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgICBjb25kaXRpb246IGVjcy5Db250YWluZXJEZXBlbmRlbmN5Q29uZGl0aW9uLkNPTVBMRVRFLFxuICAgIH0pO1xuICAgIGNlcnRib3RTdGF0ZU1hY2hpbmUuZ3JhbnRFeGVjdXRpb24oXG4gICAgICB0aGlzLnNlcnZlclRhc2tEZWZpbml0aW9uLnRhc2tSb2xlLFxuICAgICAgJ3N0YXRlczpEZXNjcmliZUV4ZWN1dGlvbicsXG4gICAgKTtcbiAgICBjZXJ0Ym90U3RhdGVNYWNoaW5lLmdyYW50U3RhcnRFeGVjdXRpb24odGhpcy5zZXJ2ZXJUYXNrRGVmaW5pdGlvbi50YXNrUm9sZSk7XG5cbiAgICB0aGlzLnNlcnZpY2UgPSBuZXcgZWNzLkVjMlNlcnZpY2UodGhpcywgJ1NlcnZpY2UnLCB7XG4gICAgICBjbHVzdGVyOiB0aGlzLmNsdXN0ZXIsXG4gICAgICB0YXNrRGVmaW5pdGlvbjogdGhpcy5zZXJ2ZXJUYXNrRGVmaW5pdGlvbixcbiAgICAgIGRlc2lyZWRDb3VudDogMSxcbiAgICAgIG1pbkhlYWx0aHlQZXJjZW50OiAwLFxuICAgICAgbWF4SGVhbHRoeVBlcmNlbnQ6IDEwMCxcbiAgICAgIGNpcmN1aXRCcmVha2VyOiB7XG4gICAgICAgIHJvbGxiYWNrOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGVuYWJsZUV4ZWN1dGVDb21tYW5kOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgbmV3IGxpYi5DZm5PdXRwdXQodGhpcywgJ1B1YmxpY0lwQWRkcmVzcycsIHsgdmFsdWU6IGhvc3RJbnN0YW5jZUlwLnJlZiB9KTtcbiAgICBuZXcgbGliLkNmbk91dHB1dCh0aGlzLCAnY2VydGJvdFN0YXRlTWFjaGluZU5hbWUnLCB7IHZhbHVlOiBjZXJ0Ym90U3RhdGVNYWNoaW5lLnN0YXRlTWFjaGluZU5hbWUgfSk7XG4gICAgbmV3IGxpYi5DZm5PdXRwdXQodGhpcywgJ0NsdXN0ZXJOYW1lJywgeyB2YWx1ZTogdGhpcy5jbHVzdGVyLmNsdXN0ZXJOYW1lIH0pO1xuICAgIG5ldyBsaWIuQ2ZuT3V0cHV0KHRoaXMsICdTZXJ2aWNlTmFtZScsIHsgdmFsdWU6IHRoaXMuc2VydmljZS5zZXJ2aWNlTmFtZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGFza0RlZmluaXRpb24odGFza0RlZmluaXRpb25PcHRpb25zOiBMb3dDb3N0RUNTVGFza0RlZmluaXRpb25PcHRpb25zKSA6IGVjcy5FYzJUYXNrRGVmaW5pdGlvbiB7XG4gICAgY29uc3Qgc2VydmVyVGFza0RlZmluaXRpb24gPSBuZXcgZWNzLkVjMlRhc2tEZWZpbml0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgICdTZXJ2ZXJUYXNrRGVmaW5pdGlvbicsXG4gICAgICB0YXNrRGVmaW5pdGlvbk9wdGlvbnMudGFza0RlZmluaXRpb24sXG4gICAgKTtcbiAgICB0YXNrRGVmaW5pdGlvbk9wdGlvbnMuY29udGFpbmVycy5mb3JFYWNoKChjb250YWluZXJEZWZpbml0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgc2VydmVyVGFza0RlZmluaXRpb24uYWRkQ29udGFpbmVyKGNvbnRhaW5lckRlZmluaXRpb24uY29udGFpbmVyTmFtZSA/PyBgY29udGFpbmVyJHtpbmRleH1gLCBjb250YWluZXJEZWZpbml0aW9uKTtcbiAgICB9KTtcbiAgICB0YXNrRGVmaW5pdGlvbk9wdGlvbnMudm9sdW1lcz8uZm9yRWFjaCgodm9sdW1lKSA9PiBzZXJ2ZXJUYXNrRGVmaW5pdGlvbi5hZGRWb2x1bWUodm9sdW1lKSk7XG4gICAgcmV0dXJuIHNlcnZlclRhc2tEZWZpbml0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTYW1wbGVUYXNrRGVmaW5pdGlvbihcbiAgICByZWNvcmRzOiBzdHJpbmdbXSxcbiAgICBsb2dHcm91cDogSUxvZ0dyb3VwLFxuICApOiBlY3MuRWMyVGFza0RlZmluaXRpb24ge1xuICAgIGNvbnN0IG5naW54VGFza0RlZmluaXRpb24gPSBuZXcgZWNzLkVjMlRhc2tEZWZpbml0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgICdOZ2lueFRhc2tEZWZpbml0aW9uJyxcbiAgICApO1xuICAgIGNvbnN0IG5naW54Q29udGFpbmVyID0gbmdpbnhUYXNrRGVmaW5pdGlvbi5hZGRDb250YWluZXIoJ05naW54Q29udGFpbmVyJywge1xuICAgICAgaW1hZ2U6IGVjcy5Db250YWluZXJJbWFnZS5mcm9tQXNzZXQoXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9leGFtcGxlcy9jb250YWluZXJzL25naW54JyksXG4gICAgICApLFxuICAgICAgY29udGFpbmVyTmFtZTogJ25naW54JyxcbiAgICAgIG1lbW9yeVJlc2VydmF0aW9uTWlCOiA2NCxcbiAgICAgIGVzc2VudGlhbDogdHJ1ZSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFNFUlZFUl9OQU1FOiByZWNvcmRzLmpvaW4oJyAnKSxcbiAgICAgICAgQ0VSVF9OQU1FOiByZWNvcmRzWzBdLFxuICAgICAgfSxcbiAgICAgIGxvZ2dpbmc6IGVjcy5Mb2dEcml2ZXJzLmF3c0xvZ3Moe1xuICAgICAgICBsb2dHcm91cDogbG9nR3JvdXAsXG4gICAgICAgIHN0cmVhbVByZWZpeDogJ25naW54LXByb3h5JyxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgbmdpbnhDb250YWluZXIuYWRkUG9ydE1hcHBpbmdzKFxuICAgICAge1xuICAgICAgICBob3N0UG9ydDogODAsXG4gICAgICAgIGNvbnRhaW5lclBvcnQ6IDgwLFxuICAgICAgICBwcm90b2NvbDogZWNzLlByb3RvY29sLlRDUCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGhvc3RQb3J0OiA0NDMsXG4gICAgICAgIGNvbnRhaW5lclBvcnQ6IDQ0MyxcbiAgICAgICAgcHJvdG9jb2w6IGVjcy5Qcm90b2NvbC5UQ1AsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICByZXR1cm4gbmdpbnhUYXNrRGVmaW5pdGlvbjtcbiAgfVxufVxuIl19
|
|
296
|
+
LowCostECS[_a] = { fqn: "low-cost-ecs.LowCostECS", version: "0.0.24" };
|
|
297
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG93LWNvc3QtZWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvdy1jb3N0LWVjcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZCQUE2QjtBQUM3QixtQ0FBbUM7QUFFbkMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxpREFBaUQ7QUFDakQsdURBQXdEO0FBQ3hELHVFQUFpRTtBQUNqRSxpREFBNkU7QUFDN0UsbURBQTBFO0FBQzFFLG1EQUFtRDtBQUNuRCxpREFBZ0Y7QUFDaEYscURBQXFEO0FBQ3JELGlFQUFpRTtBQUNqRSwyQ0FBdUM7QUFvSHZDLE1BQWEsVUFBVyxTQUFRLHNCQUFTO0lBU3ZDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsR0FBRztZQUNOLEtBQUssQ0FBQyxHQUFHO2dCQUNULElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFO29CQUN4QixXQUFXLEVBQUUsQ0FBQztvQkFDZCxtQkFBbUIsRUFBRTt3QkFDbkI7NEJBQ0UsSUFBSSxFQUFFLGNBQWM7NEJBQ3BCLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU07eUJBQ2xDO3FCQUNGO2lCQUNGLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUU7WUFDL0MsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2IsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtTQUMzQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQUU7WUFDM0UsWUFBWSxFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZ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Q0FBQyxPQUFPLENBQUM7d0JBQzlCLFFBQVEsRUFBRSxRQUFRO3dCQUNsQixZQUFZLEVBQUUsUUFBUTtxQkFDdkIsQ0FBQztvQkFDRixZQUFZLEVBQUU7d0JBQ1o7NEJBQ0UsUUFBUSxFQUFFLEVBQUU7NEJBQ1osYUFBYSxFQUFFLEVBQUU7NEJBQ2pCLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUc7eUJBQzNCO3dCQUNEOzRCQUNFLFFBQVEsRUFBRSxHQUFHOzRCQUNiLGFBQWEsRUFBRSxHQUFHOzRCQUNsQixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHO3lCQUMzQjtxQkFDRjtpQkFDRjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7O0FBcFZILGdDQXFWQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBsaWIgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQXV0b1NjYWxpbmdHcm91cCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1hdXRvc2NhbGluZyc7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBlY3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcyc7XG5pbXBvcnQgeyBGaWxlU3lzdGVtIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVmcyc7XG5pbXBvcnQgeyBSdWxlLCBTY2hlZHVsZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0IHsgU2ZuU3RhdGVNYWNoaW5lIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCB7IEVmZmVjdCwgTWFuYWdlZFBvbGljeSwgUG9saWN5U3RhdGVtZW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBJTG9nR3JvdXAsIExvZ0dyb3VwLCBSZXRlbnRpb25EYXlzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgcm91dGU1MyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1Myc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIFN1YnNjcmlwdGlvblByb3RvY29sLCBUb3BpYyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMnO1xuaW1wb3J0ICogYXMgc2ZuIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zJztcbmltcG9ydCAqIGFzIHNmbl90YXNrcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucy10YXNrcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGludGVyZmFjZSBMb3dDb3N0RUNTUHJvcHMge1xuICAvKipcbiAgICogRG9tYWluIG5hbWUgb2YgdGhlIGhvc3RlZCB6b25lLlxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdGVkWm9uZURvbWFpbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbWFpbCBmb3IgZXhwaXJhdGlvbiBlbWFpbHMgdG8gcmVnaXN0ZXIgdG8geW91ciBsZXQncyBlbmNyeXB0IGFjY291bnQuXG4gICAqXG4gICAqIEBsaW5rIGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL2RvY3MvZXhwaXJhdGlvbi1lbWFpbHMvXG4gICAqXG4gICAqIEFsc28gcmVnaXN0ZXJlZCBhcyBhIHN1YnNjcmliZXIgb2YgdGhlIHNucyB0b3BpYywgbm90aWZpZWQgb24gY2VydGJvdCB0YXNrIGZhaWx1cmUuXG4gICAqIFN1YnNjcmlwdGlvbiBjb25maXJtYXRpb24gZW1haWwgd291bGQgYmUgc2VudCBvbiBzdGFjayBjcmVhdGlvbi5cbiAgICpcbiAgICogQGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvZGcvc25zLWVtYWlsLW5vdGlmaWNhdGlvbnMuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgZW1haWw6IHN0cmluZztcblxuICAvKipcbiAgICogRG9tYWluIG5hbWVzIGZvciBBIHJlY29yZHMgdG8gZWxhc3RpYyBpcCBvZiBFQ1MgaG9zdCBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBbIHByb3BzLmhvc3RlZFpvbmUuem9uZU5hbWUgXVxuICAgKi9cbiAgcmVhZG9ubHkgcmVjb3JkRG9tYWluTmFtZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVnBjIG9mIHRoZSBFQ1MgaG9zdCBpbnN0YW5jZSBhbmQgY2x1c3Rlci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBDcmVhdGVzIHZwYyB3aXRoIG9ubHkgcHVibGljIHN1Ym5ldHMgYW5kIG5vIE5BVCBnYXRld2F5cy5cbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IGVjMi5JVnBjO1xuXG4gIC8qKlxuICAgKiBTZWN1cml0eSBncm91cCBvZiB0aGUgRUNTIGhvc3QgaW5zdGFuY2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSBDcmVhdGVzIHNlY3VyaXR5IGdyb3VwIHdpdGggYWxsb3dBbGxPdXRib3VuZCBhbmQgaW5ncmVzcyBydWxlIChpcHY0LCBpcHY2KSA9PiAodGNwIDgwLCA0NDMpLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cD86IGVjMi5JU2VjdXJpdHlHcm91cDtcblxuICAvKipcbiAgICogSW5zdGFuY2UgdHlwZSBvZiB0aGUgRUNTIGhvc3QgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdDIubWljcm9cbiAgICovXG4gIHJlYWRvbmx5IGhvc3RJbnN0YW5jZVR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIGhvdXJseSBwcmljZSAoaW4gVVNEKSB0byBiZSBwYWlkIGZvciBhbnkgU3BvdCBJbnN0YW5jZSBsYXVuY2hlZCB0byBmdWxmaWxsIHRoZSByZXF1ZXN0LlxuICAgKiBIb3N0IGluc3RhbmNlIGFzZyB3b3VsZCB1c2Ugc3BvdCBpbnN0YW5jZXMgaWYgaG9zdEluc3RhbmNlU3BvdFByaWNlIGlzIHNldC5cbiAgICpcbiAgICogQGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay9hcGkvdjIvZG9jcy9hd3MtY2RrLWxpYi5hd3NfZWNzLkFkZENhcGFjaXR5T3B0aW9ucy5odG1sI3Nwb3RwcmljZVxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdEluc3RhbmNlU3BvdFByaWNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMb2cgZ3JvdXAgb2YgdGhlIGNlcnRib3QgdGFzayBhbmQgdGhlIGF3cy1jbGkgdGFzay5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBDcmVhdGVzIGRlZmF1bHQgY2RrIGxvZyBncm91cFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nR3JvdXA/OiBJTG9nR3JvdXA7XG5cbiAgLyoqXG4gICAqIERvY2tlciBpbWFnZSB0YWcgb2YgY2VydGJvdC9kbnMtcm91dGU1MyB0byBjcmVhdGUgY2VydGlmaWNhdGVzLlxuICAgKlxuICAgKiBAbGluayBodHRwczovL2h1Yi5kb2NrZXIuY29tL3IvY2VydGJvdC9kbnMtcm91dGU1My90YWdzXG4gICAqIEBkZWZhdWx0IC0gdjEuMjkuMFxuICAgKi9cbiAgcmVhZG9ubHkgY2VydGJvdERvY2tlclRhZz86IHN0cmluZztcblxuICAvKipcbiAgICogQ2VydGJvdCB0YXNrIHNjaGVkdWxlIGludGVydmFsIGluIGRheXMgdG8gcmVuZXcgdGhlIGNlcnRpZmljYXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIDYwXG4gICAqL1xuICByZWFkb25seSBjZXJ0Ym90U2NoZWR1bGVJbnRlcnZhbD86IG51bWJlcjtcblxuICAvKipcbiAgICogRG9ja2VyIGltYWdlIHRhZyBvZiBhbWF6b24vYXdzLWNsaS5cbiAgICogVGhpcyBpbWFnZSBpcyB1c2VkIHRvIGFzc29jaWF0ZSBlbGFzdGljIGlwIG9uIGhvc3QgaW5zdGFuY2Ugc3RhcnR1cCwgYW5kIHJ1biBjZXJ0Ym90IGNmbiBvbiBlY3MgY29udGFpbmVyIHN0YXJ0dXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbGF0ZXN0XG4gICAqL1xuICByZWFkb25seSBhd3NDbGlEb2NrZXJUYWc/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBjb250YWluZXIgaW5zaWdodHMgb3Igbm90XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkIChjb250YWluZXIgaW5zaWdodHMgZGlzYWJsZWQpXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJJbnNpZ2h0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlbW92YWwgcG9saWN5IGZvciB0aGUgZmlsZSBzeXN0ZW0gYW5kIGxvZyBncm91cCAoaWYgdXNpbmcgZGVmYXVsdCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogbGliLlJlbW92YWxQb2xpY3k7XG5cbiAgLyoqXG4gICAqIFRhc2sgZGVmaW5pdGlvbiBmb3IgdGhlIHNlcnZlciBlY3MgdGFzay5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOZ2lueCBzZXJ2ZXIgdGFzayBkZWZpbml0aW9uIGRlZmluZWQgaW4gc2FtcGxlVGFza0RlZmluaXRpb24oKVxuICAgKiBAc2VlIHNhbXBsZVRhc2tEZWZpbml0aW9uXG4gICAqL1xuICByZWFkb25seSBzZXJ2ZXJUYXNrRGVmaW5pdGlvbj86IExvd0Nvc3RFQ1NUYXNrRGVmaW5pdGlvbk9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG93Q29zdEVDU1Rhc2tEZWZpbml0aW9uT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHRhc2tEZWZpbml0aW9uPzogZWNzLkVjMlRhc2tEZWZpbml0aW9uUHJvcHM7XG4gIHJlYWRvbmx5IGNvbnRhaW5lcnM6IGVjcy5Db250YWluZXJEZWZpbml0aW9uT3B0aW9uc1tdO1xuICByZWFkb25seSB2b2x1bWVzPzogZWNzLlZvbHVtZVtdO1xufVxuXG5leHBvcnQgY2xhc3MgTG93Q29zdEVDUyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHJlYWRvbmx5IHZwYzogZWMyLklWcGM7XG4gIHJlYWRvbmx5IGhvc3RBdXRvU2NhbGluZ0dyb3VwOiBBdXRvU2NhbGluZ0dyb3VwO1xuICByZWFkb25seSBjZXJ0RmlsZVN5c3RlbTogRmlsZVN5c3RlbTtcbiAgcmVhZG9ubHkgdG9waWM6IFRvcGljO1xuICByZWFkb25seSBjbHVzdGVyOiBlY3MuQ2x1c3RlcjtcbiAgcmVhZG9ubHkgc2VydmVyVGFza0RlZmluaXRpb246IGVjcy5FYzJUYXNrRGVmaW5pdGlvbjtcbiAgcmVhZG9ubHkgc2VydmljZTogZWNzLkVjMlNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IExvd0Nvc3RFQ1NQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnZwYyA9XG4gICAgICBwcm9wcy52cGMgPz9cbiAgICAgIG5ldyBlYzIuVnBjKHNjb3BlLCAnVnBjJywge1xuICAgICAgICBuYXRHYXRld2F5czogMCxcbiAgICAgICAgc3VibmV0Q29uZmlndXJhdGlvbjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdQdWJsaWNTdWJuZXQnLFxuICAgICAgICAgICAgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFVCTElDLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgIHRoaXMuY2x1c3RlciA9IG5ldyBlY3MuQ2x1c3RlcihzY29wZSwgJ0NsdXN0ZXInLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgY29udGFpbmVySW5zaWdodHM6IHByb3BzLmNvbnRhaW5lckluc2lnaHRzLFxuICAgIH0pO1xuXG4gICAgdGhpcy5ob3N0QXV0b1NjYWxpbmdHcm91cCA9IHRoaXMuY2x1c3Rlci5hZGRDYXBhY2l0eSgnSG9zdEluc3RhbmNlQ2FwYWNpdHknLCB7XG4gICAgICBtYWNoaW5lSW1hZ2U6IGVjcy5FY3NPcHRpbWl6ZWRJbWFnZS5hbWF6b25MaW51eDIoZWNzLkFtaUhhcmR3YXJlVHlwZS5TVEFOREFSRCwge1xuICAgICAgICBjYWNoZWRJbkNvbnRleHQ6IHRydWUsXG4gICAgICB9KSxcbiAgICAgIGluc3RhbmNlVHlwZTogbmV3IGVjMi5JbnN0YW5jZVR5cGUocHJvcHMuaG9zdEluc3RhbmNlVHlwZSA/PyAndDIubWljcm8nKSxcbiAgICAgIHNwb3RQcmljZTogcHJvcHMuaG9zdEluc3RhbmNlU3BvdFByaWNlLFxuICAgICAgdnBjU3VibmV0czogeyBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMgfSxcbiAgICAgIGFzc29jaWF0ZVB1YmxpY0lwQWRkcmVzczogdHJ1ZSxcbiAgICAgIG1pbkNhcGFjaXR5OiAxLFxuICAgICAgbWF4Q2FwYWNpdHk6IDEsXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMuc2VjdXJpdHlHcm91cCkge1xuICAgICAgdGhpcy5ob3N0QXV0b1NjYWxpbmdHcm91cC5ub2RlLnRyeVJlbW92ZUNoaWxkKCdJbnN0YW5jZVNlY3VyaXR5R3JvdXAnKTtcbiAgICAgIHRoaXMuaG9zdEF1dG9TY2FsaW5nR3JvdXAuYWRkU2VjdXJpdHlHcm91cChwcm9wcy5zZWN1cml0eUdyb3VwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ob3N0QXV0b1NjYWxpbmdHcm91cC5jb25uZWN0aW9ucy5hbGxvd0Zyb21BbnlJcHY0KGVjMi5Qb3J0LnRjcCg4MCkpO1xuICAgICAgdGhpcy5ob3N0QXV0b1NjYWxpbmdHcm91cC5jb25uZWN0aW9ucy5hbGxvd0Zyb21BbnlJcHY0KGVjMi5Qb3J0LnRjcCg0NDMpKTtcbiAgICAgIHRoaXMuaG9zdEF1dG9TY2FsaW5nR3JvdXAuY29ubmVjdGlvbnMuYWxsb3dGcm9tKGVjMi5QZWVyLmFueUlwdjYoKSwgZWMyLlBvcnQudGNwKDgwKSk7XG4gICAgICB0aGlzLmhvc3RBdXRvU2NhbGluZ0dyb3VwLmNvbm5lY3Rpb25zLmFsbG93RnJvbShlYzIuUGVlci5hbnlJcHY2KCksIGVjMi5Qb3J0LnRjcCg0NDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgbWFuYWdlZCBwb2xpY3kgdG8gYWxsb3cgc3NoIHRocm91Z2ggc3NtIG1hbmFnZXJcbiAgICAgKi9cbiAgICB0aGlzLmhvc3RBdXRvU2NhbGluZ0dyb3VwLnJvbGUuYWRkTWFuYWdlZFBvbGljeShcbiAgICAgIE1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdBbWF6b25TU01NYW5hZ2VkSW5zdGFuY2VDb3JlJylcbiAgICApO1xuICAgIC8qKlxuICAgICAqIEFkZCBwb2xpY3kgdG8gYXNzb2NpYXRlIGVsYXN0aWMgaXAgb24gc3RhcnR1cFxuICAgICAqL1xuICAgIHRoaXMuaG9zdEF1dG9TY2FsaW5nR3JvdXAucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogWydlYzI6RGVzY3JpYmVBZGRyZXNzZXMnLCAnZWMyOkFzc29jaWF0ZUFkZHJlc3MnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGhvc3RJbnN0YW5jZUlwID0gbmV3IGVjMi5DZm5FSVAodGhpcywgJ0hvc3RJbnN0YW5jZUlwJyk7XG4gICAgY29uc3QgdGFnVW5pcXVlSWQgPSBsaWIuTmFtZXMudW5pcXVlSWQoaG9zdEluc3RhbmNlSXApO1xuICAgIGhvc3RJbnN0YW5jZUlwLnRhZ3Muc2V0VGFnKCdOYW1lJywgdGFnVW5pcXVlSWQpO1xuXG4gICAgY29uc3QgYXdzQ2xpVGFnID0gcHJvcHMuYXdzQ2xpRG9ja2VyVGFnID8/ICdsYXRlc3QnO1xuICAgIHRoaXMuaG9zdEF1dG9TY2FsaW5nR3JvdXAuYWRkVXNlckRhdGEoXG4gICAgICAnSU5TVEFOQ0VfSUQ9JChjdXJsIC0tc2lsZW50IGh0dHA6Ly8xNjkuMjU0LjE2OS4yNTQvbGF0ZXN0L21ldGEtZGF0YS9pbnN0YW5jZS1pZCknLFxuICAgICAgYEFMTE9DQVRJT05fSUQ9JChkb2NrZXIgcnVuIC0tbmV0PWhvc3QgYW1hem9uL2F3cy1jbGk6JHthd3NDbGlUYWd9IGVjMiBkZXNjcmliZS1hZGRyZXNzZXMgLS1yZWdpb24gJHt0aGlzLmhvc3RBdXRvU2NhbGluZ0dyb3VwLmVudi5yZWdpb259IC0tZmlsdGVyIE5hbWU9dGFnOk5hbWUsVmFsdWVzPSR7dGFnVW5pcXVlSWR9IC0tcXVlcnkgJ0FkZHJlc3Nlc1tdLkFsbG9jYXRpb25JZCcgLS1vdXRwdXQgdGV4dCB8IGhlYWQpYCxcbiAgICAgIGBkb2NrZXIgcnVuIC0tbmV0PWhvc3QgYW1hem9uL2F3cy1jbGk6JHthd3NDbGlUYWd9IGVjMiBhc3NvY2lhdGUtYWRkcmVzcyAtLXJlZ2lvbiAke3RoaXMuaG9zdEF1dG9TY2FsaW5nR3JvdXAuZW52LnJlZ2lvbn0gLS1pbnN0YW5jZS1pZCBcIiRJTlNUQU5DRV9JRFwiIC0tYWxsb2NhdGlvbi1pZCBcIiRBTExPQ0FUSU9OX0lEXCIgLS1hbGxvdy1yZWFzc29jaWF0aW9uYFxuICAgICk7XG5cbiAgICB0aGlzLmNlcnRGaWxlU3lzdGVtID0gbmV3IEZpbGVTeXN0ZW0odGhpcywgJ0ZpbGVTeXN0ZW0nLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgZW5jcnlwdGVkOiB0cnVlLFxuICAgICAgc2VjdXJpdHlHcm91cDogbmV3IGVjMi5TZWN1cml0eUdyb3VwKHRoaXMsICdGaWxlU3lzdGVtU2VjdXJpdHlHcm91cCcsIHtcbiAgICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgICAgYWxsb3dBbGxPdXRib3VuZDogZmFsc2UsXG4gICAgICB9KSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3kgPz8gbGliLlJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICB9KTtcbiAgICB0aGlzLmNlcnRGaWxlU3lzdGVtLmNvbm5lY3Rpb25zLmFsbG93RGVmYXVsdFBvcnRUbyh0aGlzLmhvc3RBdXRvU2NhbGluZ0dyb3VwKTtcbiAgICB0aGlzLmNlcnRGaWxlU3lzdGVtLmNvbm5lY3Rpb25zLmFsbG93RGVmYXVsdFBvcnRGcm9tKHRoaXMuaG9zdEF1dG9TY2FsaW5nR3JvdXApO1xuXG4gICAgLyoqXG4gICAgICogQVJlY29yZCB0byBFbGFzdGljIGlwXG4gICAgICovXG4gICAgY29uc3QgaG9zdGVkWm9uZSA9IHJvdXRlNTMuSG9zdGVkWm9uZS5mcm9tTG9va3VwKHRoaXMsICdIb3N0ZWRab25lJywge1xuICAgICAgZG9tYWluTmFtZTogcHJvcHMuaG9zdGVkWm9uZURvbWFpbixcbiAgICB9KTtcbiAgICBjb25zdCByZWNvcmRzID0gcHJvcHMucmVjb3JkRG9tYWluTmFtZXMgPz8gW2hvc3RlZFpvbmUuem9uZU5hbWVdO1xuICAgIHJlY29yZHMuZm9yRWFjaChcbiAgICAgIChyZWNvcmQpID0+XG4gICAgICAgIG5ldyByb3V0ZTUzLkFSZWNvcmQodGhpcywgYEFSZWNvcmQke3JlY29yZH1gLCB7XG4gICAgICAgICAgem9uZTogaG9zdGVkWm9uZSxcbiAgICAgICAgICByZWNvcmROYW1lOiByZWNvcmQsXG4gICAgICAgICAgdGFyZ2V0OiByb3V0ZTUzLlJlY29yZFRhcmdldC5mcm9tSXBBZGRyZXNzZXMoaG9zdEluc3RhbmNlSXAucmVmKSxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogQ2VydGJvdCBUYXNrIERlZmluaXRpb25cbiAgICAgKiBNb3VudHMgZ2VuZXJhdGVkIGNlcnRpZmljYXRlIHRvIEVGU1xuICAgICAqL1xuICAgIGNvbnN0IGxvZ0dyb3VwID1cbiAgICAgIHByb3BzLmxvZ0dyb3VwID8/XG4gICAgICBuZXcgTG9nR3JvdXAodGhpcywgJ0xvZ0dyb3VwJywge1xuICAgICAgICByZXRlbnRpb246IFJldGVudGlvbkRheXMuVFdPX1lFQVJTLFxuICAgICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5yZW1vdmFsUG9saWN5ID8/IGxpYi5SZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICB9KTtcblxuICAgIGNvbnN0IGNlcnRib3RUYXNrRGVmaW5pdGlvbiA9IG5ldyBlY3MuRWMyVGFza0RlZmluaXRpb24odGhpcywgJ0NlcnRib3RUYXNrRGVmaW5pdGlvbicpO1xuICAgIGNlcnRib3RUYXNrRGVmaW5pdGlvbi5hZGRUb1Rhc2tSb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbJ3JvdXRlNTM6TGlzdEhvc3RlZFpvbmVzJywgJ3JvdXRlNTM6R2V0Q2hhbmdlJ10sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICB9KVxuICAgICk7XG4gICAgY2VydGJvdFRhc2tEZWZpbml0aW9uLmFkZFRvVGFza1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsncm91dGU1MzpDaGFuZ2VSZXNvdXJjZVJlY29yZFNldHMnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbaG9zdGVkWm9uZS5ob3N0ZWRab25lQXJuXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGNlcnRib3RUYWcgPSBwcm9wcy5jZXJ0Ym90RG9ja2VyVGFnID8/ICd2MS4yOS4wJztcbiAgICBjb25zdCBjZXJ0Ym90Q29udGFpbmVyID0gY2VydGJvdFRhc2tEZWZpbml0aW9uLmFkZENvbnRhaW5lcignQ2VydGJvdENvbnRhaW5lcicsIHtcbiAgICAgIGltYWdlOiBlY3MuQ29udGFpbmVySW1hZ2UuZnJvbVJlZ2lzdHJ5KGBjZXJ0Ym90L2Rucy1yb3V0ZTUzOiR7Y2VydGJvdFRhZ31gKSxcbiAgICAgIGNvbnRhaW5lck5hbWU6ICdjZXJ0Ym90JyxcbiAgICAgIG1lbW9yeVJlc2VydmF0aW9uTWlCOiA2NCxcbiAgICAgIGNvbW1hbmQ6IFtcbiAgICAgICAgJ2NlcnRvbmx5JyxcbiAgICAgICAgJy0tdmVyYm9zZScsXG4gICAgICAgICctLXByZWZlcnJlZC1jaGFsbGVuZ2VzPWRucy0wMScsXG4gICAgICAgICctLWRucy1yb3V0ZTUzJyxcbiAgICAgICAgJy0tZG5zLXJvdXRlNTMtcHJvcGFnYXRpb24tc2Vjb25kcz0zMDAnLFxuICAgICAgICAnLS1ub24taW50ZXJhY3RpdmUnLFxuICAgICAgICAnLS1hZ3JlZS10b3MnLFxuICAgICAgICAnLS1leHBhbmQnLFxuICAgICAgICAnLW0nLFxuICAgICAgICBwcm9wcy5lbWFpbCxcbiAgICAgICAgJy0tY2VydC1uYW1lJyxcbiAgICAgICAgcmVjb3Jkc1swXSxcbiAgICAgICAgLi4ucmVjb3Jkcy5mbGF0TWFwKChkb21haW4pID0+IFsnLWQnLCBkb21haW5dKSxcbiAgICAgIF0sXG4gICAgICBsb2dnaW5nOiBlY3MuTG9nRHJpdmVyLmF3c0xvZ3Moe1xuICAgICAgICBsb2dHcm91cCxcbiAgICAgICAgc3RyZWFtUHJlZml4OiBjZXJ0Ym90VGFnLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICB0aGlzLmNlcnRGaWxlU3lzdGVtLmdyYW50KGNlcnRib3RUYXNrRGVmaW5pdGlvbi50YXNrUm9sZSwgJ2VsYXN0aWNmaWxlc3lzdGVtOkNsaWVudFdyaXRlJyk7XG4gICAgY2VydGJvdFRhc2tEZWZpbml0aW9uLmFkZFZvbHVtZSh7XG4gICAgICBuYW1lOiAnY2VydFZvbHVtZScsXG4gICAgICBlZnNWb2x1bWVDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIGZpbGVTeXN0ZW1JZDogdGhpcy5jZXJ0RmlsZVN5c3RlbS5maWxlU3lzdGVtSWQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNlcnRib3RDb250YWluZXIuYWRkTW91bnRQb2ludHMoe1xuICAgICAgc291cmNlVm9sdW1lOiAnY2VydFZvbHVtZScsXG4gICAgICBjb250YWluZXJQYXRoOiAnL2V0Yy9sZXRzZW5jcnlwdCcsXG4gICAgICByZWFkT25seTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBTY2hlZHVsZSBDZXJ0Ym90IGNlcnRpZmljYXRlIGNyZWF0ZS9yZW5ldyBvbiBTdGVwIEZ1bmN0aW9uc1xuICAgICAqIFNlbmRzIGVtYWlsIG5vdGlmaWNhdGlvbiBvbiBjZXJ0Ym90IGZhaWx1cmVcbiAgICAgKi9cbiAgICB0aGlzLnRvcGljID0gbmV3IFRvcGljKHRoaXMsICdUb3BpYycpO1xuICAgIG5ldyBTdWJzY3JpcHRpb24odGhpcywgJ0VtYWlsU3Vic2NyaXB0aW9uJywge1xuICAgICAgdG9waWM6IHRoaXMudG9waWMsXG4gICAgICBwcm90b2NvbDogU3Vic2NyaXB0aW9uUHJvdG9jb2wuRU1BSUwsXG4gICAgICBlbmRwb2ludDogcHJvcHMuZW1haWwsXG4gICAgfSk7XG5cbiAgICBjb25zdCBjZXJ0Ym90UnVuVGFzayA9IG5ldyBzZm5fdGFza3MuRWNzUnVuVGFzayh0aGlzLCAnQ3JlYXRlQ2VydGlmaWNhdGUnLCB7XG4gICAgICBjbHVzdGVyOiB0aGlzLmNsdXN0ZXIsXG4gICAgICB0YXNrRGVmaW5pdGlvbjogY2VydGJvdFRhc2tEZWZpbml0aW9uLFxuICAgICAgbGF1bmNoVGFyZ2V0OiBuZXcgc2ZuX3Rhc2tzLkVjc0VjMkxhdW5jaFRhcmdldCgpLFxuICAgICAgaW50ZWdyYXRpb25QYXR0ZXJuOiBzZm4uSW50ZWdyYXRpb25QYXR0ZXJuLlJVTl9KT0IsXG4gICAgfSk7XG4gICAgY2VydGJvdFJ1blRhc2suYWRkQ2F0Y2goXG4gICAgICBuZXcgc2ZuX3Rhc2tzLlNuc1B1Ymxpc2godGhpcywgJ1NlbmRFbWFpbE9uRmFpbHVyZScsIHtcbiAgICAgICAgdG9waWM6IHRoaXMudG9waWMsXG4gICAgICAgIG1lc3NhZ2U6IHNmbi5UYXNrSW5wdXQuZnJvbUpzb25QYXRoQXQoJyQnKSxcbiAgICAgIH0pLm5leHQobmV3IHNmbi5GYWlsKHRoaXMsICdGYWlsJykpXG4gICAgKTtcbiAgICBjZXJ0Ym90UnVuVGFzay5hZGRSZXRyeSh7XG4gICAgICBpbnRlcnZhbDogbGliLkR1cmF0aW9uLnNlY29uZHMoMjApLFxuICAgIH0pO1xuICAgIGNvbnN0IGNlcnRib3RTdGF0ZU1hY2hpbmUgPSBuZXcgc2ZuLlN0YXRlTWFjaGluZSh0aGlzLCAnU3RhdGVNYWNoaW5lJywge1xuICAgICAgZGVmaW5pdGlvbjogY2VydGJvdFJ1blRhc2ssXG4gICAgfSk7XG5cbiAgICBuZXcgUnVsZSh0aGlzLCAnQ2VydGJvdFNjaGVkdWxlUnVsZScsIHtcbiAgICAgIHNjaGVkdWxlOiBTY2hlZHVsZS5yYXRlKGxpYi5EdXJhdGlvbi5kYXlzKHByb3BzLmNlcnRib3RTY2hlZHVsZUludGVydmFsID8/IDYwKSksXG4gICAgICB0YXJnZXRzOiBbbmV3IFNmblN0YXRlTWFjaGluZShjZXJ0Ym90U3RhdGVNYWNoaW5lKV0sXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBTZXJ2ZXIgRUNTIHRhc2tcbiAgICAgKi9cbiAgICB0aGlzLnNlcnZlclRhc2tEZWZpbml0aW9uID0gdGhpcy5jcmVhdGVUYXNrRGVmaW5pdGlvbihcbiAgICAgIHByb3BzLnNlcnZlclRhc2tEZWZpbml0aW9uID8/IHRoaXMuc2FtcGxlVGFza0RlZmluaXRpb24ocmVjb3JkcywgbG9nR3JvdXApXG4gICAgKTtcblxuICAgIGlmICghdGhpcy5zZXJ2ZXJUYXNrRGVmaW5pdGlvbi5kZWZhdWx0Q29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdkZWZhdWx0Q29udGFpbmVyIGlzIHJlcXVpcmVkIGZvciBzZXJ2ZXJUYXNrRGVmaW5pdGlvbi4gQWRkIGF0IGxlYXN0IG9uZSBlc3NlbnRpYWwgY29udGFpbmVyLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5jZXJ0RmlsZVN5c3RlbS5ncmFudCh0aGlzLnNlcnZlclRhc2tEZWZpbml0aW9uLnRhc2tSb2xlLCAnZWxhc3RpY2ZpbGVzeXN0ZW06Q2xpZW50TW91bnQnKTtcbiAgICB0aGlzLnNlcnZlclRhc2tEZWZpbml0aW9uLmFkZFZvbHVtZSh7XG4gICAgICBuYW1lOiAnY2VydFZvbHVtZScsXG4gICAgICBlZnNWb2x1bWVDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIGZpbGVTeXN0ZW1JZDogdGhpcy5jZXJ0RmlsZVN5c3RlbS5maWxlU3lzdGVtSWQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMuc2VydmVyVGFza0RlZmluaXRpb24uZGVmYXVsdENvbnRhaW5lci5hZGRNb3VudFBvaW50cyh7XG4gICAgICBzb3VyY2VWb2x1bWU6ICdjZXJ0Vm9sdW1lJyxcbiAgICAgIGNvbnRhaW5lclBhdGg6ICcvZXRjL2xldHNlbmNyeXB0JyxcbiAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQVdTIGNsaSBjb250YWluZXIgdG8gZXhlY3V0ZSBjZXJ0Ym90IHNmbiBiZWZvcmUgdGhlIGRlZmF1bHQgY29udGFpbmVyIHN0YXJ0dXAuXG4gICAgICovXG4gICAgdGhpcy5zZXJ2ZXJUYXNrRGVmaW5pdGlvbi5kZWZhdWx0Q29udGFpbmVyLmFkZENvbnRhaW5lckRlcGVuZGVuY2llcyh7XG4gICAgICBjb250YWluZXI6IHRoaXMuc2VydmVyVGFza0RlZmluaXRpb24uYWRkQ29udGFpbmVyKCdBV1NDbGlDb250YWluZXInLCB7XG4gICAgICAgIGltYWdlOiBlY3MuQ29udGFpbmVySW1hZ2UuZnJvbVJlZ2lzdHJ5KGBhbWF6b24vYXdzLWNsaToke2F3c0NsaVRhZ31gKSxcbiAgICAgICAgY29udGFpbmVyTmFtZTogJ2F3cy1jbGknLFxuICAgICAgICBtZW1vcnlSZXNlcnZhdGlvbk1pQjogNjQsXG4gICAgICAgIGVudHJ5UG9pbnQ6IFsnL2Jpbi9iYXNoJywgJy1jJ10sXG4gICAgICAgIGNvbW1hbmQ6IFtcbiAgICAgICAgICBgc2V0IC1ldXhcbiAgICAgICAgICBhd3MgY29uZmlndXJlIHNldCByZWdpb24gJHtjZXJ0Ym90U3RhdGVNYWNoaW5lLmVudi5yZWdpb259ICYmIFxcXFxcbiAgICAgICAgICBhd3MgY29uZmlndXJlIHNldCBvdXRwdXQgdGV4dCAmJiBcXFxcXG4gICAgICAgICAgRVhFQ1VUSU9OX0FSTj0kKGF3cyBzdGVwZnVuY3Rpb25zIHN0YXJ0LWV4ZWN1dGlvbiAtLXN0YXRlLW1hY2hpbmUtYXJuICR7Y2VydGJvdFN0YXRlTWFjaGluZS5zdGF0ZU1hY2hpbmVBcm59IC0tcXVlcnkgZXhlY3V0aW9uQXJuKSAmJiBcXFxcXG4gICAgICAgICAgdW50aWwgWyAkKGF3cyBzdGVwZnVuY3Rpb25zIGRlc2NyaWJlLWV4ZWN1dGlvbiAtLWV4ZWN1dGlvbi1hcm4gXCIkRVhFQ1VUSU9OX0FSTlwiIC0tcXVlcnkgc3RhdHVzKSAhPSBSVU5OSU5HIF07XG4gICAgICAgICAgZG9cbiAgICAgICAgICAgIGVjaG8gXCJXYWl0aW5nIGZvciAkRVhFQ1VUSU9OX0FSTlwiXG4gICAgICAgICAgICBzbGVlcCAxMFxuICAgICAgICAgIGRvbmVgLFxuICAgICAgICBdLFxuICAgICAgICBlc3NlbnRpYWw6IGZhbHNlLFxuICAgICAgICBsb2dnaW5nOiBlY3MuTG9nRHJpdmVyLmF3c0xvZ3Moe1xuICAgICAgICAgIGxvZ0dyb3VwOiBsb2dHcm91cCxcbiAgICAgICAgICBzdHJlYW1QcmVmaXg6IGF3c0NsaVRhZyxcbiAgICAgICAgfSksXG4gICAgICB9KSxcbiAgICAgIGNvbmRpdGlvbjogZWNzLkNvbnRhaW5lckRlcGVuZGVuY3lDb25kaXRpb24uQ09NUExFVEUsXG4gICAgfSk7XG4gICAgY2VydGJvdFN0YXRlTWFjaGluZS5ncmFudEV4ZWN1dGlvbihcbiAgICAgIHRoaXMuc2VydmVyVGFza0RlZmluaXRpb24udGFza1JvbGUsXG4gICAgICAnc3RhdGVzOkRlc2NyaWJlRXhlY3V0aW9uJ1xuICAgICk7XG4gICAgY2VydGJvdFN0YXRlTWFjaGluZS5ncmFudFN0YXJ0RXhlY3V0aW9uKHRoaXMuc2VydmVyVGFza0RlZmluaXRpb24udGFza1JvbGUpO1xuXG4gICAgdGhpcy5zZXJ2aWNlID0gbmV3IGVjcy5FYzJTZXJ2aWNlKHRoaXMsICdTZXJ2aWNlJywge1xuICAgICAgY2x1c3RlcjogdGhpcy5jbHVzdGVyLFxuICAgICAgdGFza0RlZmluaXRpb246IHRoaXMuc2VydmVyVGFza0RlZmluaXRpb24sXG4gICAgICBkZXNpcmVkQ291bnQ6IDEsXG4gICAgICBtaW5IZWFsdGh5UGVyY2VudDogMCxcbiAgICAgIG1heEhlYWx0aHlQZXJjZW50OiAxMDAsXG4gICAgICBjaXJjdWl0QnJlYWtlcjoge1xuICAgICAgICByb2xsYmFjazogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBlbmFibGVFeGVjdXRlQ29tbWFuZDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIG5ldyBsaWIuQ2ZuT3V0cHV0KHRoaXMsICdQdWJsaWNJcEFkZHJlc3MnLCB7IHZhbHVlOiBob3N0SW5zdGFuY2VJcC5yZWYgfSk7XG4gICAgbmV3IGxpYi5DZm5PdXRwdXQodGhpcywgJ0NlcnRib3RTdGF0ZU1hY2hpbmVOYW1lJywge1xuICAgICAgdmFsdWU6IGNlcnRib3RTdGF0ZU1hY2hpbmUuc3RhdGVNYWNoaW5lTmFtZSxcbiAgICB9KTtcbiAgICBuZXcgbGliLkNmbk91dHB1dCh0aGlzLCAnQ2x1c3Rlck5hbWUnLCB7IHZhbHVlOiB0aGlzLmNsdXN0ZXIuY2x1c3Rlck5hbWUgfSk7XG4gICAgbmV3IGxpYi5DZm5PdXRwdXQodGhpcywgJ1NlcnZpY2VOYW1lJywgeyB2YWx1ZTogdGhpcy5zZXJ2aWNlLnNlcnZpY2VOYW1lIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVUYXNrRGVmaW5pdGlvbihcbiAgICB0YXNrRGVmaW5pdGlvbk9wdGlvbnM6IExvd0Nvc3RFQ1NUYXNrRGVmaW5pdGlvbk9wdGlvbnNcbiAgKTogZWNzLkVjMlRhc2tEZWZpbml0aW9uIHtcbiAgICBjb25zdCBzZXJ2ZXJUYXNrRGVmaW5pdGlvbiA9IG5ldyBlY3MuRWMyVGFza0RlZmluaXRpb24oXG4gICAgICB0aGlzLFxuICAgICAgJ1NlcnZlclRhc2tEZWZpbml0aW9uJyxcbiAgICAgIHRhc2tEZWZpbml0aW9uT3B0aW9ucy50YXNrRGVmaW5pdGlvblxuICAgICk7XG4gICAgdGFza0RlZmluaXRpb25PcHRpb25zLmNvbnRhaW5lcnMuZm9yRWFjaCgoY29udGFpbmVyRGVmaW5pdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgIHNlcnZlclRhc2tEZWZpbml0aW9uLmFkZENvbnRhaW5lcihcbiAgICAgICAgY29udGFpbmVyRGVmaW5pdGlvbi5jb250YWluZXJOYW1lID8/IGBjb250YWluZXIke2luZGV4fWAsXG4gICAgICAgIGNvbnRhaW5lckRlZmluaXRpb25cbiAgICAgICk7XG4gICAgfSk7XG4gICAgdGFza0RlZmluaXRpb25PcHRpb25zLnZvbHVtZXM/LmZvckVhY2goKHZvbHVtZSkgPT4gc2VydmVyVGFza0RlZmluaXRpb24uYWRkVm9sdW1lKHZvbHVtZSkpO1xuICAgIHJldHVybiBzZXJ2ZXJUYXNrRGVmaW5pdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgc2FtcGxlVGFza0RlZmluaXRpb24oXG4gICAgcmVjb3Jkczogc3RyaW5nW10sXG4gICAgbG9nR3JvdXA6IElMb2dHcm91cFxuICApOiBMb3dDb3N0RUNTVGFza0RlZmluaXRpb25PcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGFpbmVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgaW1hZ2U6IGVjcy5Db250YWluZXJJbWFnZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2V4YW1wbGVzL2NvbnRhaW5lcnMvbmdpbngnKSksXG4gICAgICAgICAgY29udGFpbmVyTmFtZTogJ25naW54JyxcbiAgICAgICAgICBtZW1vcnlSZXNlcnZhdGlvbk1pQjogNjQsXG4gICAgICAgICAgZXNzZW50aWFsOiB0cnVlLFxuICAgICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgICBTRVJWRVJfTkFNRTogcmVjb3Jkcy5qb2luKCcgJyksXG4gICAgICAgICAgICBDRVJUX05BTUU6IHJlY29yZHNbMF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsb2dnaW5nOiBlY3MuTG9nRHJpdmVycy5hd3NMb2dzKHtcbiAgICAgICAgICAgIGxvZ0dyb3VwOiBsb2dHcm91cCxcbiAgICAgICAgICAgIHN0cmVhbVByZWZpeDogJ3NhbXBsZScsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgcG9ydE1hcHBpbmdzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGhvc3RQb3J0OiA4MCxcbiAgICAgICAgICAgICAgY29udGFpbmVyUG9ydDogODAsXG4gICAgICAgICAgICAgIHByb3RvY29sOiBlY3MuUHJvdG9jb2wuVENQLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaG9zdFBvcnQ6IDQ0MyxcbiAgICAgICAgICAgICAgY29udGFpbmVyUG9ydDogNDQzLFxuICAgICAgICAgICAgICBwcm90b2NvbDogZWNzLlByb3RvY29sLlRDUCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuIl19
|
package/package.json
CHANGED
|
@@ -45,9 +45,11 @@
|
|
|
45
45
|
"aws-cdk-lib": "2.37.0",
|
|
46
46
|
"constructs": "10.0.5",
|
|
47
47
|
"eslint": "^8",
|
|
48
|
+
"eslint-config-prettier": "^8.5.0",
|
|
48
49
|
"eslint-import-resolver-node": "^0.3.6",
|
|
49
50
|
"eslint-import-resolver-typescript": "^3.5.1",
|
|
50
51
|
"eslint-plugin-import": "^2.26.0",
|
|
52
|
+
"eslint-plugin-prettier": "^4.2.1",
|
|
51
53
|
"jest": "^27",
|
|
52
54
|
"jest-junit": "^13",
|
|
53
55
|
"jsii": "^1.67.0",
|
|
@@ -56,6 +58,7 @@
|
|
|
56
58
|
"jsii-pacmak": "^1.67.0",
|
|
57
59
|
"json-schema": "^0.4.0",
|
|
58
60
|
"npm-check-updates": "^15",
|
|
61
|
+
"prettier": "^2.7.1",
|
|
59
62
|
"projen": "^0.62.12",
|
|
60
63
|
"standard-version": "^9",
|
|
61
64
|
"ts-jest": "^27",
|
|
@@ -76,7 +79,7 @@
|
|
|
76
79
|
],
|
|
77
80
|
"main": "lib/index.js",
|
|
78
81
|
"license": "MIT",
|
|
79
|
-
"version": "0.0.
|
|
82
|
+
"version": "0.0.24",
|
|
80
83
|
"jest": {
|
|
81
84
|
"testMatch": [
|
|
82
85
|
"<rootDir>/src/**/__tests__/**/*.ts?(x)",
|