@glicogh/healthcare-cdk 0.1.97 → 0.1.99
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.
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MicroserviceNetwork = void 0;
|
|
4
|
+
const crypto = require("crypto");
|
|
4
5
|
const cdk = require("aws-cdk-lib");
|
|
5
6
|
const constants_1 = require("../util/constants");
|
|
6
7
|
const initBuildConfig_1 = require("../util/initBuildConfig");
|
|
@@ -26,18 +27,38 @@ class MicroserviceNetwork extends cdk.Stack {
|
|
|
26
27
|
},
|
|
27
28
|
],
|
|
28
29
|
});
|
|
30
|
+
// hardened first-boot bootstrap for the NAT instance (used in non-prod, where it runs on a t4g.nano).
|
|
31
|
+
// CDK's default user data runs `yum install iptables-services` on a fresh AL2023 AMI, which dnf can
|
|
32
|
+
// leave OOM-killed on a 512 MB instance (seen 2026-10-18), silently breaking NAT for private subnets.
|
|
33
|
+
// The transient swap file absorbs dnf's memory spike, the install is retried, and the MASQUERADE rule
|
|
34
|
+
// is verified so a failed bootstrap is visible in the instance console log
|
|
35
|
+
const natUserData = initBuildConfig_1.buildConfig.envName === 'prod' ? undefined : cdk.aws_ec2.UserData.forLinux();
|
|
36
|
+
if (natUserData) {
|
|
37
|
+
natUserData.addCommands('set -ex', 'fallocate -l 1G /swapfile || dd if=/dev/zero of=/swapfile bs=1M count=1024', 'chmod 600 /swapfile', 'mkswap /swapfile', 'swapon /swapfile', 'for i in 1 2 3 4 5; do dnf install -y iptables-services && break; sleep 10; done', 'rpm -q iptables-services', 'systemctl enable --now iptables', 'echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/custom-ip-forwarding.conf', 'sysctl -p /etc/sysctl.d/custom-ip-forwarding.conf', "IFACE=$(ip -o route show default | awk '{print $5}' | head -n1)", 'iptables -t nat -A POSTROUTING -o "$IFACE" -j MASQUERADE', 'iptables -F FORWARD', 'iptables-save > /etc/sysconfig/iptables', 'iptables -t nat -C POSTROUTING -o "$IFACE" -j MASQUERADE', 'swapoff /swapfile && rm -f /swapfile');
|
|
38
|
+
}
|
|
39
|
+
// provision and use an EC2 instance as NAT gateway (prod runs a bigger instance with CDK's default user data)
|
|
40
|
+
const natGatewayProvider = new cdk.aws_ec2.NatInstanceProviderV2({
|
|
41
|
+
instanceType: new cdk.aws_ec2.InstanceType(initBuildConfig_1.buildConfig.envName === 'prod' ? 't4g.micro' : 't4g.nano'),
|
|
42
|
+
userData: natUserData,
|
|
43
|
+
});
|
|
29
44
|
const vpc = new cdk.aws_ec2.Vpc(this, (0, constants_1.getEnvConstant)('vpcId'), {
|
|
30
45
|
vpcName: (0, constants_1.getEnvConstant)('vpcId'),
|
|
31
46
|
enableDnsHostnames: true,
|
|
32
47
|
enableDnsSupport: true,
|
|
33
48
|
maxAzs: 1,
|
|
34
49
|
natGateways: 1,
|
|
35
|
-
|
|
36
|
-
natGatewayProvider: new cdk.aws_ec2.NatInstanceProviderV2({
|
|
37
|
-
instanceType: new cdk.aws_ec2.InstanceType('t4g.nano'),
|
|
38
|
-
}),
|
|
50
|
+
natGatewayProvider,
|
|
39
51
|
restrictDefaultSecurityGroup: true,
|
|
40
52
|
});
|
|
53
|
+
// CloudFormation only restarts an EBS-backed instance when its user data changes, and a restart does
|
|
54
|
+
// not re-run cloud-init, so make the NAT instance's logical ID depend on the user data to force a
|
|
55
|
+
// replacement when the bootstrap changes. Mirrors Instance#userDataCausesReplacement
|
|
56
|
+
if (natUserData) {
|
|
57
|
+
const digest = crypto.createHash('sha256').update(natUserData.render()).digest('hex').slice(0, 16);
|
|
58
|
+
natGatewayProvider.gatewayInstances.forEach((instance, i) => {
|
|
59
|
+
instance.node.defaultChild.overrideLogicalId(`NatInstance${digest}${i}`);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
41
62
|
// route S3 traffic from private subnets through a gateway endpoint instead of the NAT gateway
|
|
42
63
|
vpc.addGatewayEndpoint('S3GatewayEndpoint', {
|
|
43
64
|
service: cdk.aws_ec2.GatewayVpcEndpointAwsService.S3,
|
|
@@ -111,6 +132,8 @@ class MicroserviceNetwork extends cdk.Stack {
|
|
|
111
132
|
notificationSecGrp.addIngressRule(cdk.aws_ec2.Peer.ipv4(vpc.vpcCidrBlock), cdk.aws_ec2.Port.tcp(22), 'SSH from within VPC');
|
|
112
133
|
// add rule for HTTP access
|
|
113
134
|
notificationSecGrp.addIngressRule(cdk.aws_ec2.Peer.ipv4(vpc.vpcCidrBlock), cdk.aws_ec2.Port.tcp(8080), 'HTTP from within VPC');
|
|
135
|
+
// add rule for WebSocket access
|
|
136
|
+
notificationSecGrp.addIngressRule(cdk.aws_ec2.Peer.ipv4(vpc.vpcCidrBlock), cdk.aws_ec2.Port.tcp(8091), 'WebSocket from within VPC');
|
|
114
137
|
// security group for Laravel-based services
|
|
115
138
|
const laravelSecGrp = new cdk.aws_ec2.SecurityGroup(this, (0, constants_1.getEnvConstant)('laravelBasedSecurityGroupId'), {
|
|
116
139
|
vpc,
|
|
@@ -147,4 +170,4 @@ class MicroserviceNetwork extends cdk.Stack {
|
|
|
147
170
|
}
|
|
148
171
|
}
|
|
149
172
|
exports.MicroserviceNetwork = MicroserviceNetwork;
|
|
150
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9zZXJ2aWNlLW5ldHdvcmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvbWljcm9zZXJ2aWNlLW5ldHdvcmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQW1DO0FBRW5DLGlEQUFnRTtBQUNoRSw2REFBc0Q7QUFDdEQscUVBQWtFO0FBRWxFLE1BQWEsbUJBQW9CLFNBQVEsR0FBRyxDQUFDLEtBQUs7SUFDaEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixJQUFJLENBQUMsNkJBQVcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsMEJBQTBCO1FBQzFCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQzVDLFVBQVUsRUFBRSxJQUFBLHlDQUFtQixHQUFFO1lBQ2pDLGdCQUFnQixFQUFFLElBQUk7WUFDdEIsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlO1lBQy9ELGFBQWEsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU07WUFDdkMsSUFBSSxFQUFFO2dCQUNKO29CQUNFLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQztvQkFDckIsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7b0JBQ3hHLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQztvQkFDckIsY0FBYyxFQUFFLEVBQUU7aUJBQ25CO2FBQ0Y7U0FDRixDQUFDLENB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QyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN0RyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFBLHVCQUFXLEVBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZFLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ2hDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFwS0Qsa0RBb0tDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgZ2V0Q29uc3RhbnQsIGdldEVudkNvbnN0YW50IH0gZnJvbSAnLi4vdXRpbC9jb25zdGFudHMnO1xuaW1wb3J0IHsgYnVpbGRDb25maWcgfSBmcm9tICcuLi91dGlsL2luaXRCdWlsZENvbmZpZyc7XG5pbXBvcnQgeyBnZXRQdWJsaWNCdWNrZXROYW1lIH0gZnJvbSAnLi4vdXRpbC9nZXRQdWJsaWNCdWNrZXROYW1lJztcblxuZXhwb3J0IGNsYXNzIE1pY3Jvc2VydmljZU5ldHdvcmsgZXh0ZW5kcyBjZGsuU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IGNkay5TdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBpZiAoIWJ1aWxkQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0J1aWxkQ29uZmlnIG5vdCBzZXQnKTtcbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgcHVibGljIHMzIGJ1Y2tldFxuICAgIG5ldyBjZGsuYXdzX3MzLkJ1Y2tldCh0aGlzLCAnUHVibGljUzNCdWNrZXQnLCB7XG4gICAgICBidWNrZXROYW1lOiBnZXRQdWJsaWNCdWNrZXROYW1lKCksXG4gICAgICBwdWJsaWNSZWFkQWNjZXNzOiB0cnVlLFxuICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IGNkay5hd3NfczMuQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUNMU19PTkxZLFxuICAgICAgcmVtb3ZhbFBvbGljeTogY2RrLlJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICAgICAgY29yczogW1xuICAgICAgICB7XG4gICAgICAgICAgYWxsb3dlZEhlYWRlcnM6IFsnKiddLFxuICAgICAgICAgIGFsbG93ZWRNZXRob2RzOiBbY2RrLmF3c19zMy5IdHRwTWV0aG9kcy5QT1NULCBjZGsuYXdzX3MzLkh0dHBNZXRob2RzLlBVVCwgY2RrLmF3c19zMy5IdHRwTWV0aG9kcy5ERUxFVEVdLFxuICAgICAgICAgIGFsbG93ZWRPcmlnaW5zOiBbJyonXSxcbiAgICAgICAgICBleHBvc2VkSGVhZGVyczogW10sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdnBjID0gbmV3IGNkay5hd3NfZWMyLlZwYyh0aGlzLCBnZXRFbnZDb25zdGFudCgndnBjSWQnKSwge1xuICAgICAgdnBjTmFtZTogZ2V0RW52Q29uc3RhbnQoJ3ZwY0lkJyksXG4gICAgICBlbmFibGVEbnNIb3N0bmFtZXM6IHRydWUsXG4gICAgICBlbmFibGVEbnNTdXBwb3J0OiB0cnVlLFxuICAgICAgbWF4QXpzOiAxLFxuICAgICAgbmF0R2F0ZXdheXM6IDEsXG4gICAgICAvLyBwcm92aXNpb24gYW5kIHVzZSBhbiBFQzIgaW5zdGFuY2UgYXMgTkFUIGdhdGV3YXlcbiAgICAgIG5hdEdhdGV3YXlQcm92aWRlcjogbmV3IGNkay5hd3NfZWMyLk5hdEluc3RhbmNlUHJvdmlkZXJWMih7XG4gICAgICAgIGluc3RhbmNlVHlwZTogbmV3IGNkay5hd3NfZWMyLkluc3RhbmNlVHlwZSgndDRnLm5hbm8nKSxcbiAgICAgIH0pLFxuICAgICAgcmVzdHJpY3REZWZhdWx0U2VjdXJpdHlHcm91cDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIHJvdXRlIFMzIHRyYWZmaWMgZnJvbSBwcml2YXRlIHN1Ym5ldHMgdGhyb3VnaCBhIGdhdGV3YXkgZW5kcG9pbnQgaW5zdGVhZCBvZiB0aGUgTkFUIGdhdGV3YXlcbiAgICB2cGMuYWRkR2F0ZXdheUVuZHBvaW50KCdTM0dhdGV3YXlFbmRwb2ludCcsIHtcbiAgICAgIHNlcnZpY2U6IGNkay5hd3NfZWMyLkdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UuUzMsXG4gICAgICBzdWJuZXRzOiBbeyBzdWJuZXRUeXBlOiBjZGsuYXdzX2VjMi5TdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MgfV0sXG4gICAgfSk7XG5cbiAgICAvLyBzZWN1cml0eSBncm91cCBmb3IgUG9ydGFsXG4gICAgY29uc3QgcG9ydGFsU2VjR3JwID0gbmV3IGNkay5hd3NfZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgZ2V0RW52Q29uc3RhbnQoJ3BvcnRhbFNlY3VyaXR5R3JvdXBJZCcpLCB7XG4gICAgICB2cGMsXG4gICAgICBzZWN1cml0eUdyb3VwTmFtZTogZ2V0RW52Q29uc3RhbnQoJ3BvcnRhbFNlY3VyaXR5R3JvdXBJZCcpLFxuICAgICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIGFkZCBydWxlIGZvciBIVFRQIGFjY2Vzc1xuICAgIHBvcnRhbFNlY0dycC5hZGRJbmdyZXNzUnVsZShjZGsuYXdzX2VjMi5QZWVyLmFueUlwdjQoKSwgY2RrLmF3c19lYzIuUG9ydC50Y3AoODApLCAnSFRUUCBmcm9tIGFueXdoZXJlJyk7XG4gICAgLy8gYWRkIHJ1bGUgZm9yIEhUVFBTIGFjY2Vzc1xuICAgIHBvcnRhbFNlY0dycC5hZGRJbmdyZXNzUnVsZShjZGsuYXdzX2VjMi5QZWVyLmFueUlwdjQoKSwgY2RrLmF3c19lYzIuUG9ydC50Y3AoNDQzKSwgJ0hUVFBTIGZyb20gYW55d2hlcmUnKTtcbiAgICAvLyBhZGQgcnVsZSBmb3IgU1NIIGFjY2Vzc1xuICAgIHBvcnRhbFNlY0dycC5hZGRJbmdyZXNzUnVsZShjZGsuYXdzX2VjMi5QZWVyLmlwdjQodnBjLnZwY0NpZHJCbG9jayksIGNkay5hd3NfZWMyLlBvcnQudGNwKDIyKSwgJ1NTSCBmcm9tIHdpdGhpbiBWUEMnKTtcblxuICAgIC8vIHNlY3VyaXR5IGdyb3VwIGZvciBBUEkgR2F0ZXdheVxuICAgIGNvbnN0IGFwaUdhdGV3YXlTZWNHcnAgPSBuZXcgY2RrLmF3c19lYzIuU2VjdXJpdHlHcm91cCh0aGlzLCBnZXRFbnZDb25zdGFudCgnYXBpR2F0ZXdheVNlY3VyaXR5R3JvdXBJZCcpLCB7XG4gICAgICB2cGMsXG4gICAgICBzZWN1cml0eUdyb3VwTmFtZTogZ2V0RW52Q29uc3RhbnQoJ2FwaUdhdGV3YXlTZWN1cml0eUdyb3VwSWQnKSxcbiAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBhZGQgcnVsZSBmb3IgSFRUUCBhY2Nlc3NcbiAgICBhcGlHYXRld2F5U2VjR3JwLmFkZEluZ3Jlc3NSdWxlKGNkay5hd3NfZWMyLlBlZXIuYW55SXB2NCgpLCBjZGsuYXdzX2VjMi5Qb3J0LnRjcCg4MCksICdIVFRQIGZyb20gYW55d2hlcmUnKTtcbiAgICAvLyBhZGQgcnVsZSBmb3IgSFRUUFMgYWNjZXNzXG4gICAgYXBpR2F0ZXdheVNlY0dycC5hZGRJbmdyZXNzUnVsZShjZGsuYXdzX2VjMi5QZWVyLmFueUlwdjQoKSwgY2RrLmF3c19lYzIuUG9ydC50Y3AoNDQzKSwgJ0hUVFBTIGZyb20gYW55d2hlcmUnKTtcbiAgICAvLyBhZGQgcnVsZSBmb3IgU1NIIGFjY2Vzc1xuICAgIGFwaUdhdGV3YXlTZWNHcnAuYWRkSW5ncmVzc1J1bGUoY2RrLmF3c19lYzIuUGVlci5hbnlJcHY0KCksIGNkay5hd3NfZWMyLlBvcnQudGNwKDIyKSwgJ1NTSCBmcm9tIGFueXdoZXJlJyk7XG4gICAgLy8gYWRkIHJ1bGUgZm9yIGludGVybmFsIGNvbW11bmljYXRpb25cbiAgICBhcGlHYXRld2F5U2VjR3JwLmFkZEluZ3Jlc3NSdWxlKGNkay5hd3NfZWMyLlBlZXIuaXB2NCh2cGMudnBjQ2lkckJsb2NrKSwgY2RrLmF3c19lYzIuUG9ydC50Y3AoODA4MSksICdJbnRlcm5hbCBtaWNyb3NlcnZpY2UgY29tbXVuaWNhdGlvbiBmcm9tIHdpdGhpbiBWUEMnKTtcblxuICAgIC8vIHNlY3VyaXR5IGdyb3VwIGZvciBSZWRpcyBzZXJ2ZXJcbiAgICBjb25zdCByZWRpc1NlY0dycCA9IG5ldyBjZGsuYXdzX2VjMi5TZWN1cml0eUdyb3VwKHRoaXMsIGdldEVudkNvbnN0YW50KCdyZWRpc1NlY3VyaXR5R3JvdXBJZCcpLCB7XG4gICAgICB2cGMsXG4gICAgICBzZWN1cml0eUdyb3VwTmFtZTogZ2V0RW52Q29uc3RhbnQoJ3JlZGlzU2VjdXJpdHlHcm91cElkJyksXG4gICAgICBhbGxvd0FsbE91dGJvdW5kOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gYWRkIHJ1bGUgZm9yIFNTSCBhY2Nlc3NcbiAgICByZWRpc1NlY0dycC5hZGRJbmdyZXNzUnVsZShjZGsuYXdzX2VjMi5QZWVyLmlwdjQodnBjLnZwY0NpZHJCbG9jayksIGNkay5hd3NfZWMyLlBvcnQudGNwKDIyKSwgJ1NTSCBmcm9tIHdpdGhpbiBWUEMnKTtcbiAgICAvLyBhZGQgcnVsZSBmb3IgUmVkaXMgYWNjZXNzXG4gICAgcmVkaXNTZWNHcnAuYWRkSW5ncmVzc1J1bGUoY2RrLmF3c19lYzIuUGVlci5pcHY0KHZwYy52cGNDaWRyQmxvY2spLCBjZGsuYXdzX2VjMi5Qb3J0LnRjcCg2Mzc5KSwgJ1JlZGlzIGZyb20gd2l0aGluIFZQQycpO1xuXG4gICAgLy8gc2VjdXJpdHkgZ3JvdXAgZm9yIE15U1FMIHNlcnZlclxuICAgIGNvbnN0IG15c3FsU2VjR3JwID0gbmV3IGNkay5hd3NfZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgZ2V0RW52Q29uc3RhbnQoJ215c3FsU2VjdXJpdHlHcm91cElkJyksIHtcbiAgICAgIHZwYyxcbiAgICAgIHNlY3VyaXR5R3JvdXBOYW1lOiBnZXRFbnZDb25zdGFudCgnbXlzcWxTZWN1cml0eUdyb3VwSWQnKSxcbiAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBhZGQgcnVsZSBmb3IgU1NIIGFjY2Vzc1xuICAgIG15c3FsU2VjR3JwLmFkZEluZ3Jlc3NSdWxlKGNkay5hd3NfZWMyLlBlZXIuaXB2NCh2cGMudnBjQ2lkckJsb2NrKSwgY2RrLmF3c19lYzIuUG9ydC50Y3AoMjIpLCAnU1NIIGZyb20gd2l0aGluIFZQQycpO1xuICAgIC8vIGFkZCBydWxlIGZvciBNeVNRTCBhY2Nlc3NcbiAgICBteXNxbFNlY0dycC5hZGRJbmdyZXNzUnVsZShjZGsuYXdzX2VjMi5QZWVyLmlwdjQodnBjLnZwY0NpZHJCbG9jayksIGNkay5hd3NfZWMyLlBvcnQudGNwKDMzMDYpLCAnTXlTUUwgZnJvbSB3aXRoaW4gVlBDJyk7XG5cbiAgICAvLyBzZWN1cml0eSBncm91cCBmb3IgQ2xpY2tIb3VzZSBzZXJ2ZXJcbiAgICBjb25zdCBjbGlja2hvdXNlU2VjR3JwID0gbmV3IGNkay5hd3NfZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgZ2V0RW52Q29uc3RhbnQoJ2NsaWNraG91c2VTZWN1cml0eUdyb3VwSWQnKSwge1xuICAgICAgdnBjLFxuICAgICAgc2VjdXJpdHlHcm91cE5hbWU6IGdldEVudkNvbnN0YW50KCdjbGlja2hvdXNlU2VjdXJpdHlHcm91cElkJyksXG4gICAgICBhbGxvd0FsbE91dGJvdW5kOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gYWRkIHJ1bGUgZm9yIFNTSCBhY2Nlc3NcbiAgICBjbGlja2hvdXNlU2VjR3JwLmFkZEluZ3Jlc3NSdWxlKGNkay5hd3NfZWMyLlBlZXIuaXB2NCh2cGMudnBjQ2lkckJsb2NrKSwgY2RrLmF3c19lYzIuUG9ydC50Y3AoMjIpLCAnU1NIIGZyb20gd2l0aGluIFZQQycpO1xuICAgIC8vIGFkZCBydWxlIGZvciBDbGlja0hvdXNlIEhUVFAgYWNjZXNzXG4gICAgY2xpY2tob3VzZVNlY0dycC5hZGRJbmdyZXNzUnVsZShjZGsuYXdzX2VjMi5QZWVyLmlwdjQodnBjLnZwY0NpZHJCbG9jayksIGNkay5hd3NfZWMyLlBvcnQudGNwKDgxMjMpLCAnQ2xpY2tIb3VzZSBIVFRQIGZyb20gd2l0aGluIFZQQycpO1xuICAgIC8vIGFkZCBydWxlIGZvciBDbGlja0hvdXNlIG5hdGl2ZSBhY2Nlc3NcbiAgICBjbGlja2hvdXNlU2VjR3JwLmFkZEluZ3Jlc3NSdWxlKGNkay5hd3NfZWMyLlBlZXIuaXB2NCh2cGMudnBjQ2lkckJsb2NrKSwgY2RrLmF3c19lYzIuUG9ydC50Y3AoOTAwMCksICdDbGlja0hvdXNlIG5hdGl2ZSBmcm9tIHdpdGhpbiBWUEMnKTtcblxuICAgIC8vIHNlY3VyaXR5IGdyb3VwIGZvciBOb3RpZmljYXRpb24gc2VydmljZVxuICAgIGNvbnN0IG5vdGlmaWNhdGlvblNlY0dycCA9IG5ldyBjZGsuYXdzX2VjMi5TZWN1cml0eUdyb3VwKHRoaXMsIGdldEVudkNvbnN0YW50KCdub3RpZmljYXRpb25TZXJ2aWNlU2VjdXJpdHlHcm91cElkJyksIHtcbiAgICAgIHZwYyxcbiAgICAgIHNlY3VyaXR5R3JvdXBOYW1lOiBnZXRFbnZDb25zdGFudCgnbm90aWZpY2F0aW9uU2VydmljZVNlY3VyaXR5R3JvdXBJZCcpLFxuICAgICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIGFkZCBydWxlIGZvciBTU0ggYWNjZXNzXG4gICAgbm90aWZpY2F0aW9uU2VjR3JwLmFkZEluZ3Jlc3NSdWxlKGNkay5hd3NfZWMyLlBlZXIuaXB2NCh2cGMudnBjQ2lkckJsb2NrKSwgY2RrLmF3c19lYzIuUG9ydC50Y3AoMjIpLCAnU1NIIGZyb20gd2l0aGluIFZQQycpO1xuICAgIC8vIGFkZCBydWxlIGZvciBIVFRQIGFjY2Vzc1xuICAgIG5vdGlmaWNhdGlvblNlY0dycC5hZGRJbmdyZXNzUnVsZShjZGsuYXdzX2VjMi5QZWVyLmlwdjQodnBjLnZwY0NpZHJCbG9jayksIGNkay5hd3NfZWMyLlBvcnQudGNwKDgwODApLCAnSFRUUCBmcm9tIHdpdGhpbiBWUEMnKTtcblxuICAgIC8vIHNlY3VyaXR5IGdyb3VwIGZvciBMYXJhdmVsLWJhc2VkIHNlcnZpY2VzXG4gICAgY29uc3QgbGFyYXZlbFNlY0dycCA9IG5ldyBjZGsuYXdzX2VjMi5TZWN1cml0eUdyb3VwKHRoaXMsIGdldEVudkNvbnN0YW50KCdsYXJhdmVsQmFzZWRTZWN1cml0eUdyb3VwSWQnKSwge1xuICAgICAgdnBjLFxuICAgICAgc2VjdXJpdHlHcm91cE5hbWU6IGdldEVudkNvbnN0YW50KCdsYXJhdmVsQmFzZWRTZWN1cml0eUdyb3VwSWQnKSxcbiAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBhZGQgcnVsZSBmb3IgU1NIIGFjY2Vzc1xuICAgIGxhcmF2ZWxTZWNHcnAuYWRkSW5ncmVzc1J1bGUoY2RrLmF3c19lYzIuUGVlci5pcHY0KHZwYy52cGNDaWRyQmxvY2spLCBjZGsuYXdzX2VjMi5Qb3J0LnRjcCgyMiksICdTU0ggZnJvbSB3aXRoaW4gVlBDJyk7XG4gICAgLy8gYWRkIHJ1bGUgZm9yIEhUVFBcbiAgICBsYXJhdmVsU2VjR3JwLmFkZEluZ3Jlc3NSdWxlKGNkay5hd3NfZWMyLlBlZXIuaXB2NCh2cGMudnBjQ2lkckJsb2NrKSwgY2RrLmF3c19lYzIuUG9ydC50Y3AoODA4MCksICdIVFRQIGZyb20gd2l0aGluIFZQQycpO1xuICAgIC8vIGFkZCBydWxlIGZvciBwcmludCBXZWJTb2NrZXRcbiAgICBsYXJhdmVsU2VjR3JwLmFkZEluZ3Jlc3NSdWxlKGNkay5hd3NfZWMyLlBlZXIuaXB2NCh2cGMudnBjQ2lkckJsb2NrKSwgY2RrLmF3c19lYzIuUG9ydC50Y3AoODA5MCksICdQcmludCBXZWJTb2NrZXQgZnJvbSB3aXRoaW4gVlBDJyk7XG5cbiAgICAvLyBzZWN1cml0eSBncm91cCBmb3IgSW5zdGFuY2UgQ29ubmVjdGlvbiBFbmRwb2ludFxuICAgIGNvbnN0IGljZVNlY0dycCA9IG5ldyBjZGsuYXdzX2VjMi5TZWN1cml0eUdyb3VwKHRoaXMsIGdldEVudkNvbnN0YW50KCdlYzJJbnN0YW5jZUNvbm5lY3RFbmRwb2ludFNlY3VyaXR5R3JvdXBJZCcpLCB7XG4gICAgICB2cGMsXG4gICAgICBzZWN1cml0eUdyb3VwTmFtZTogZ2V0RW52Q29uc3RhbnQoJ2VjMkluc3RhbmNlQ29ubmVjdEVuZHBvaW50U2VjdXJpdHlHcm91cElkJyksXG4gICAgICBhbGxvd0FsbE91dGJvdW5kOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIC8vIGFkZCBydWxlIGZvciBvdXRib3VuZCBTU0hcbiAgICBpY2VTZWNHcnAuYWRkRWdyZXNzUnVsZShjZGsuYXdzX2VjMi5QZWVyLmlwdjQodnBjLnZwY0NpZHJCbG9jayksIGNkay5hd3NfZWMyLlBvcnQudGNwKDIyKSwgJ1NTSCB0byB3aXRoaW4gVlBDJyk7XG5cbiAgICBuZXcgY2RrLmF3c19lYzIuQ2ZuSW5zdGFuY2VDb25uZWN0RW5kcG9pbnQodGhpcywgZ2V0RW52Q29uc3RhbnQoJ2VjMkluc3RhbmNlQ29ubmVjdEVuZHBvaW50SWQnKSwge1xuICAgICAgc2VjdXJpdHlHcm91cElkczogW2ljZVNlY0dycC5zZWN1cml0eUdyb3VwSWRdLFxuICAgICAgc3VibmV0SWQ6IHZwYy5wcml2YXRlU3VibmV0c1swXS5zdWJuZXRJZCxcbiAgICB9KTtcblxuICAgIC8vIEFQSSBnYXRld2F5J3MgZWxhc3RpYyBJUFxuICAgIGNvbnN0IGFwaUdhdGV3YXlFSVAgPSBuZXcgY2RrLmF3c19lYzIuQ2ZuRUlQKHRoaXMsIFN0cmluZyhnZXRDb25zdGFudCgnYXBpR2F0ZXdheUVJUElkJykpLCB7IGRvbWFpbjogJ3ZwYycgfSk7XG4gICAgY2RrLlRhZ3Mub2YoYXBpR2F0ZXdheUVJUCkuYWRkKCdOYW1lJywgU3RyaW5nKGdldENvbnN0YW50KCdhcGlHYXRld2F5RUlQSWQnKSkpO1xuXG4gICAgLy8gUG9ydGFsJ3MgZWxhc3RpYyBJUFxuICAgIGNvbnN0IHBvcnRhbEVJUCA9IG5ldyBjZGsuYXdzX2VjMi5DZm5FSVAodGhpcywgU3RyaW5nKGdldENvbnN0YW50KCdwb3J0YWxFSVBJZCcpKSwgeyBkb21haW46ICd2cGMnIH0pO1xuICAgIGNkay5UYWdzLm9mKHBvcnRhbEVJUCkuYWRkKCdOYW1lJywgU3RyaW5nKGdldENvbnN0YW50KCdwb3J0YWxFSVBJZCcpKSk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCAndnBjIElEJywge1xuICAgICAgdmFsdWU6IHZwYy52cGNJZCxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9zZXJ2aWNlLW5ldHdvcmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvbWljcm9zZXJ2aWNlLW5ldHdvcmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQWlDO0FBQ2pDLG1DQUFtQztBQUVuQyxpREFBZ0U7QUFDaEUsNkRBQXNEO0FBQ3RELHFFQUFrRTtBQUVsRSxNQUFhLG1CQUFvQixTQUFRLEdBQUcsQ0FBQyxLQUFLO0lBQ2hELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLDZCQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELDBCQUEwQjtRQUMxQixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUM1QyxVQUFVLEVBQUUsSUFBQSx5Q0FBbUIsR0FBRTtZQUNqQyxnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsZUFBZTtZQUMvRCxhQUFhLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNO1lBQ3ZDLElBQUksRUFBRTtnQkFDSjtvQkFDRSxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUM7b0JBQ3JCLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO29CQUN4RyxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUM7b0JBQ3JCLGNBQWMsRUFBRSxFQUFFO2lCQUNuQjthQUNG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QU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzlHLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUEsdUJBQVcsRUFBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUvRSxzQkFBc0I7UUFDdEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUEsdUJBQVcsRUFBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdEcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBQSx1QkFBVyxFQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV2RSxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUNoQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7U0FDakIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBOU1ELGtEQThNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgZ2V0Q29uc3RhbnQsIGdldEVudkNvbnN0YW50IH0gZnJvbSAnLi4vdXRpbC9jb25zdGFudHMnO1xuaW1wb3J0IHsgYnVpbGRDb25maWcgfSBmcm9tICcuLi91dGlsL2luaXRCdWlsZENvbmZpZyc7XG5pbXBvcnQgeyBnZXRQdWJsaWNCdWNrZXROYW1lIH0gZnJvbSAnLi4vdXRpbC9nZXRQdWJsaWNCdWNrZXROYW1lJztcblxuZXhwb3J0IGNsYXNzIE1pY3Jvc2VydmljZU5ldHdvcmsgZXh0ZW5kcyBjZGsuU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IGNkay5TdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBpZiAoIWJ1aWxkQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0J1aWxkQ29uZmlnIG5vdCBzZXQnKTtcbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgcHVibGljIHMzIGJ1Y2tldFxuICAgIG5ldyBjZGsuYXdzX3MzLkJ1Y2tldCh0aGlzLCAnUHVibGljUzNCdWNrZXQnLCB7XG4gICAgICBidWNrZXROYW1lOiBnZXRQdWJsaWNCdWNrZXROYW1lKCksXG4gICAgICBwdWJsaWNSZWFkQWNjZXNzOiB0cnVlLFxuICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IGNkay5hd3NfczMuQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUNMU19PTkxZLFxuICAgICAgcmVtb3ZhbFBvbGljeTogY2RrLlJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICAgICAgY29yczogW1xuICAgICAgICB7XG4gICAgICAgICAgYWxsb3dlZEhlYWRlcnM6IFsnKiddLFxuICAgICAgICAgIGFsbG93ZWRNZXRob2RzOiBbY2RrLmF3c19zMy5IdHRwTWV0aG9kcy5QT1NULCBjZGsuYXdzX3MzLkh0dHBNZXRob2RzLlBVVCwgY2RrLmF3c19zMy5IdHRwTWV0aG9kcy5ERUxFVEVdLFxuICAgICAgICAgIGFsbG93ZWRPcmlnaW5zOiBbJyonXSxcbiAgICAgICAgICBleHBvc2VkSGVhZGVyczogW10sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gaGFyZGVuZWQgZmlyc3QtYm9vdCBib290c3RyYXAgZm9yIHRoZSBOQVQgaW5zdGFuY2UgKHVzZWQgaW4gbm9uLXByb2QsIHdoZXJlIGl0IHJ1bnMgb24gYSB0NGcubmFubykuXG4gICAgLy8gQ0RLJ3MgZGVmYXVsdCB1c2VyIGRhdGEgcnVucyBgeXVtIGluc3RhbGwgaXB0YWJsZXMtc2VydmljZXNgIG9uIGEgZnJlc2ggQUwyMDIzIEFNSSwgd2hpY2ggZG5mIGNhblxuICAgIC8vIGxlYXZlIE9PTS1raWxsZWQgb24gYSA1MTIgTUIgaW5zdGFuY2UgKHNlZW4gMjAyNi0xMC0xOCksIHNpbGVudGx5IGJyZWFraW5nIE5BVCBmb3IgcHJpdmF0ZSBzdWJuZXRzLlxuICAgIC8vIFRoZSB0cmFuc2llbnQgc3dhcCBmaWxlIGFic29yYnMgZG5mJ3MgbWVtb3J5IHNwaWtlLCB0aGUgaW5zdGFsbCBpcyByZXRyaWVkLCBhbmQgdGhlIE1BU1FVRVJBREUgcnVsZVxuICAgIC8vIGlzIHZlcmlmaWVkIHNvIGEgZmFpbGVkIGJvb3RzdHJhcCBpcyB2aXNpYmxlIGluIHRoZSBpbnN0YW5jZSBjb25zb2xlIGxvZ1xuICAgIGNvbnN0IG5hdFVzZXJEYXRhID0gYnVpbGRDb25maWcuZW52TmFtZSA9PT0gJ3Byb2QnID8gdW5kZWZpbmVkIDogY2RrLmF3c19lYzIuVXNlckRhdGEuZm9yTGludXgoKTtcbiAgICBpZiAobmF0VXNlckRhdGEpIHtcbiAgICAgIG5hdFVzZXJEYXRhLmFkZENvbW1hbmRzKFxuICAgICAgICAnc2V0IC1leCcsXG4gICAgICAgICdmYWxsb2NhdGUgLWwgMUcgL3N3YXBmaWxlIHx8IGRkIGlmPS9kZXYvemVybyBvZj0vc3dhcGZpbGUgYnM9MU0gY291bnQ9MTAyNCcsXG4gICAgICAgICdjaG1vZCA2MDAgL3N3YXBmaWxlJyxcbiAgICAgICAgJ21rc3dhcCAvc3dhcGZpbGUnLFxuICAgICAgICAnc3dhcG9uIC9zd2FwZmlsZScsXG4gICAgICAgICdmb3IgaSBpbiAxIDIgMyA0IDU7IGRvIGRuZiBpbnN0YWxsIC15IGlwdGFibGVzLXNlcnZpY2VzICYmIGJyZWFrOyBzbGVlcCAxMDsgZG9uZScsXG4gICAgICAgICdycG0gLXEgaXB0YWJsZXMtc2VydmljZXMnLFxuICAgICAgICAnc3lzdGVtY3RsIGVuYWJsZSAtLW5vdyBpcHRhYmxlcycsXG4gICAgICAgICdlY2hvIFwibmV0LmlwdjQuaXBfZm9yd2FyZD0xXCIgPiAvZXRjL3N5c2N0bC5kL2N1c3RvbS1pcC1mb3J3YXJkaW5nLmNvbmYnLFxuICAgICAgICAnc3lzY3RsIC1wIC9ldGMvc3lzY3RsLmQvY3VzdG9tLWlwLWZvcndhcmRpbmcuY29uZicsXG4gICAgICAgIFwiSUZBQ0U9JChpcCAtbyByb3V0ZSBzaG93IGRlZmF1bHQgfCBhd2sgJ3twcmludCAkNX0nIHwgaGVhZCAtbjEpXCIsXG4gICAgICAgICdpcHRhYmxlcyAtdCBuYXQgLUEgUE9TVFJPVVRJTkcgLW8gXCIkSUZBQ0VcIiAtaiBNQVNRVUVSQURFJyxcbiAgICAgICAgJ2lwdGFibGVzIC1GIEZPUldBUkQnLFxuICAgICAgICAnaXB0YWJsZXMtc2F2ZSA+IC9ldGMvc3lzY29uZmlnL2lwdGFibGVzJyxcbiAgICAgICAgJ2lwdGFibGVzIC10IG5hdCAtQyBQT1NUUk9VVElORyAtbyBcIiRJRkFDRVwiIC1qIE1BU1FVRVJBREUnLFxuICAgICAgICAnc3dhcG9mZiAvc3dhcGZpbGUgJiYgcm0gLWYgL3N3YXBmaWxlJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBwcm92aXNpb24gYW5kIHVzZSBhbiBFQzIgaW5zdGFuY2UgYXMgTkFUIGdhdGV3YXkgKHByb2QgcnVucyBhIGJpZ2dlciBpbnN0YW5jZSB3aXRoIENESydzIGRlZmF1bHQgdXNlciBkYXRhKVxuICAgIGNvbnN0IG5hdEdhdGV3YXlQcm92aWRlciA9IG5ldyBjZGsuYXdzX2VjMi5OYXRJbnN0YW5jZVByb3ZpZGVyVjIoe1xuICAgICAgaW5zdGFuY2VUeXBlOiBuZXcgY2RrLmF3c19lYzIuSW5zdGFuY2VUeXBlKGJ1aWxkQ29uZmlnLmVudk5hbWUgPT09ICdwcm9kJyA/ICd0NGcubWljcm8nIDogJ3Q0Zy5uYW5vJyksXG4gICAgICB1c2VyRGF0YTogbmF0VXNlckRhdGEsXG4gICAgfSk7XG5cbiAgICBjb25zdCB2cGMgPSBuZXcgY2RrLmF3c19lYzIuVnBjKHRoaXMsIGdldEVudkNvbnN0YW50KCd2cGNJZCcpLCB7XG4gICAgICB2cGNOYW1lOiBnZXRFbnZDb25zdGFudCgndnBjSWQnKSxcbiAgICAgIGVuYWJsZURuc0hvc3RuYW1lczogdHJ1ZSxcbiAgICAgIGVuYWJsZURuc1N1cHBvcnQ6IHRydWUsXG4gICAgICBtYXhBenM6IDEsXG4gICAgICBuYXRHYXRld2F5czogMSxcbiAgICAgIG5hdEdhdGV3YXlQcm92aWRlcixcbiAgICAgIHJlc3RyaWN0RGVmYXVsdFNlY3VyaXR5R3JvdXA6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBDbG91ZEZvcm1hdGlvbiBvbmx5IHJlc3RhcnRzIGFuIEVCUy1iYWNrZWQgaW5zdGFuY2Ugd2hlbiBpdHMgdXNlciBkYXRhIGNoYW5nZXMsIGFuZCBhIHJlc3RhcnQgZG9lc1xuICAgIC8vIG5vdCByZS1ydW4gY2xvdWQtaW5pdCwgc28gbWFrZSB0aGUgTkFUIGluc3RhbmNlJ3MgbG9naWNhbCBJRCBkZXBlbmQgb24gdGhlIHVzZXIgZGF0YSB0byBmb3JjZSBhXG4gICAgLy8gcmVwbGFjZW1lbnQgd2hlbiB0aGUgYm9vdHN0cmFwIGNoYW5nZXMuIE1pcnJvcnMgSW5zdGFuY2UjdXNlckRhdGFDYXVzZXNSZXBsYWNlbWVudFxuICAgIGlmIChuYXRVc2VyRGF0YSkge1xuICAgICAgY29uc3QgZGlnZXN0ID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShuYXRVc2VyRGF0YS5yZW5kZXIoKSkuZGlnZXN0KCdoZXgnKS5zbGljZSgwLCAxNik7XG4gICAgICBuYXRHYXRld2F5UHJvdmlkZXIuZ2F0ZXdheUluc3RhbmNlcy5mb3JFYWNoKChpbnN0YW5jZSwgaSkgPT4ge1xuICAgICAgICAoaW5zdGFuY2Uubm9kZS5kZWZhdWx0Q2hpbGQgYXMgY2RrLmF3c19lYzIuQ2ZuSW5zdGFuY2UpLm92ZXJyaWRlTG9naWNhbElkKGBOYXRJbnN0YW5jZSR7ZGlnZXN0fSR7aX1gKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHJvdXRlIFMzIHRyYWZmaWMgZnJvbSBwcml2YXRlIHN1Ym5ldHMgdGhyb3VnaCBhIGdhdGV3YXkgZW5kcG9pbnQgaW5zdGVhZCBvZiB0aGUgTkFUIGdhdGV3YXlcbiAgICB2cGMuYWRkR2F0ZXdheUVuZHBvaW50KCdTM0dhdGV3YXlFbmRwb2ludCcsIHtcbiAgICAgIHNlcnZpY2U6IGNkay5hd3NfZWMyLkdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UuUzMsXG4gICAgICBzdWJuZXRzOiBbeyBzdWJuZXRUeXBlOiBjZGsuYXdzX2VjMi5TdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MgfV0sXG4gICAgfSk7XG5cbiAgICAvLyBzZWN1cml0eSBncm91cCBmb3IgUG9ydGFsXG4gICAgY29uc3QgcG9ydGFsU2VjR3JwID0gbmV3IGNkay5hd3NfZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgZ2V0RW52Q29uc3RhbnQoJ3BvcnRhbFNlY3VyaXR5R3JvdXBJZCcpLCB7XG4gICAgICB2cGMsXG4gICAgICBzZWN1cml0eUdyb3VwTmFtZTogZ2V0RW52Q29uc3RhbnQoJ3BvcnRhbFNlY3VyaXR5R3JvdXBJZCcpLFxuICAgICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIGFkZCBydWxlIGZvciBIVFRQIGFjY2Vzc1xuICAgIHBvcnRhbFNlY0dycC5hZGRJbmdyZXNzUnVsZShjZGsuYXdzX2VjMi5QZWVyLmFueUlwdjQoKSwgY2RrLmF3c19lYzIuUG9ydC50Y3AoODApLCAnSFRUUCBmcm9tIGFueXdoZXJlJyk7XG4gICAgLy8gYWRkIHJ1bGUgZm9yIEhUVFBTIGFjY2Vzc1xuICAgIHBvcnRhbFNlY0dycC5hZGRJbmdyZXNzUnVsZShjZGsuYXdzX2VjMi5QZWVyLmFueUlwdjQoKSwgY2RrLmF3c19lYzIuUG9ydC50Y3AoNDQzKSwgJ0hUVFBTIGZyb20gYW55d2hlcmUnKTtcbiAgICAvLyBhZGQgcnVsZSBmb3IgU1NIIGFjY2Vzc1xuICAgIHBvcnRhbFNlY0dycC5hZGRJbmdyZXNzUnVsZShjZGsuYXdzX2VjMi5QZWVyLmlwdjQodnBjLnZwY0NpZHJCbG9jayksIGNkay5hd3NfZWMyLlBvcnQudGNwKDIyKSwgJ1NTSCBmcm9tIHdpdGhpbiBWUEMnKTtcblxuICAgIC8vIHNlY3VyaXR5IGdyb3VwIGZvciBBUEkgR2F0ZXdheVxuICAgIGNvbnN0IGFwaUdhdGV3YXlTZWNHcnAgPSBuZXcgY2RrLmF3c19lYzIuU2VjdXJpdHlHcm91cCh0aGlzLCBnZXRFbnZDb25zdGFudCgnYXBpR2F0ZXdheVNlY3VyaXR5R3JvdXBJZCcpLCB7XG4gICAgICB2cGMsXG4gICAgICBzZWN1cml0eUdyb3VwTmFtZTogZ2V0RW52Q29uc3RhbnQoJ2FwaUdhdGV3YXlTZWN1cml0eUdyb3VwSWQnKSxcbiAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBhZGQgcnVsZSBmb3IgSFRUUCBhY2Nlc3NcbiAgICBhcGlHYXRld2F5U2VjR3JwLmFkZEluZ3Jlc3NSdWxlKGNkay5hd3NfZWMyLlBlZXIuYW55SXB2NCgpLCBjZGsuYXdzX2VjMi5Qb3J0LnRjcCg4MCksICdIVFRQIGZyb20gYW55d2hlcmUnKTtcbiAgICAvLyBhZGQgcnVsZSBmb3IgSFRUUFMgYWNjZXNzXG4gICAgYXBpR2F0ZXdheVNlY0dycC5hZGRJbmdyZXNzUnVsZShjZGsuYXdzX2VjMi5QZWVyLmFueUlwdjQoKSwgY2RrLmF3c19lYzIuUG9ydC50Y3AoNDQzKSwgJ0hUVFBTIGZyb20gYW55d2hlcmUnKTtcbiAgICAvLyBhZGQgcnVsZSBmb3IgU1NIIGFjY2Vzc1xuICAgIGFwaUdhdGV3YXlTZWNHcnAuYWRkSW5ncmVzc1J1bGUoY2RrLmF3c19lYzIuUGVlci5hbnlJcHY0KCksIGNkay5hd3NfZWMyLlBvcnQudGNwKDIyKSwgJ1NTSCBmcm9tIGFueXdoZXJlJyk7XG4gICAgLy8gYWRkIHJ1bGUgZm9yIGludGVybmFsIGNvbW11bmljYXRpb25cbiAgICBhcGlHYXRld2F5U2VjR3JwLmFkZEluZ3Jlc3NSdWxlKGNkay5hd3NfZWMyLlBlZXIuaXB2NCh2cGMudnBjQ2lkckJsb2NrKSwgY2RrLmF3c19lYzIuUG9ydC50Y3AoODA4MSksICdJbnRlcm5hbCBtaWNyb3NlcnZpY2UgY29tbXVuaWNhdGlvbiBmcm9tIHdpdGhpbiBWUEMnKTtcblxuICAgIC8vIHNlY3VyaXR5IGdyb3VwIGZvciBSZWRpcyBzZXJ2ZXJcbiAgICBjb25zdCByZWRpc1NlY0dycCA9IG5ldyBjZGsuYXdzX2VjMi5TZWN1cml0eUdyb3VwKHRoaXMsIGdldEVudkNvbnN0YW50KCdyZWRpc1NlY3VyaXR5R3JvdXBJZCcpLCB7XG4gICAgICB2cGMsXG4gICAgICBzZWN1cml0eUdyb3VwTmFtZTogZ2V0RW52Q29uc3RhbnQoJ3JlZGlzU2VjdXJpdHlHcm91cElkJyksXG4gICAgICBhbGxvd0FsbE91dGJvdW5kOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gYWRkIHJ1bGUgZm9yIFNTSCBhY2Nlc3NcbiAgICByZWRpc1NlY0dycC5hZGRJbmdyZXNzUnVsZShjZGsuYXdzX2VjMi5QZWVyLmlwdjQodnBjLnZwY0NpZHJCbG9jayksIGNkay5hd3NfZWMyLlBvcnQudGNwKDIyKSwgJ1NTSCBmcm9tIHdpdGhpbiBWUEMnKTtcbiAgICAvLyBhZGQgcnVsZSBmb3IgUmVkaXMgYWNjZXNzXG4gICAgcmVkaXNTZWNHcnAuYWRkSW5ncmVzc1J1bGUoY2RrLmF3c19lYzIuUGVlci5pcHY0KHZwYy52cGNDaWRyQmxvY2spLCBjZGsuYXdzX2VjMi5Qb3J0LnRjcCg2Mzc5KSwgJ1JlZGlzIGZyb20gd2l0aGluIFZQQycpO1xuXG4gICAgLy8gc2VjdXJpdHkgZ3JvdXAgZm9yIE15U1FMIHNlcnZlclxuICAgIGNvbnN0IG15c3FsU2VjR3JwID0gbmV3IGNkay5hd3NfZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgZ2V0RW52Q29uc3RhbnQoJ215c3FsU2VjdXJpdHlHcm91cElkJyksIHtcbiAgICAgIHZwYyxcbiAgICAgIHNlY3VyaXR5R3JvdXBOYW1lOiBnZXRFbnZDb25zdGFudCgnbXlzcWxTZWN1cml0eUdyb3VwSWQnKSxcbiAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBhZGQgcnVsZSBmb3IgU1NIIGFjY2Vzc1xuICAgIG15c3FsU2VjR3JwLmFkZEluZ3Jlc3NSdWxlKGNkay5hd3NfZWMyLlBlZXIuaXB2NCh2cGMudnBjQ2lkckJsb2NrKSwgY2RrLmF3c19lYzIuUG9ydC50Y3AoMjIpLCAnU1NIIGZyb20gd2l0aGluIFZQQycpO1xuICAgIC8vIGFkZCBydWxlIGZvciBNeVNRTCBhY2Nlc3NcbiAgICBteXNxbFNlY0dycC5hZGRJbmdyZXNzUnVsZShjZGsuYXdzX2VjMi5QZWVyLmlwdjQodnBjLnZwY0NpZHJCbG9jayksIGNkay5hd3NfZWMyLlBvcnQudGNwKDMzMDYpLCAnTXlTUUwgZnJvbSB3aXRoaW4gVlBDJyk7XG5cbiAgICAvLyBzZWN1cml0eSBncm91cCBmb3IgQ2xpY2tIb3VzZSBzZXJ2ZXJcbiAgICBjb25zdCBjbGlja2hvdXNlU2VjR3JwID0gbmV3IGNkay5hd3NfZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgZ2V0RW52Q29uc3RhbnQoJ2NsaWNraG91c2VTZWN1cml0eUdyb3VwSWQnKSwge1xuICAgICAgdnBjLFxuICAgICAgc2VjdXJpdHlHcm91cE5hbWU6IGdldEVudkNvbnN0YW50KCdjbGlja2hvdXNlU2VjdXJpdHlHcm91cElkJyksXG4gICAgICBhbGxvd0FsbE91dGJvdW5kOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gYWRkIHJ1bGUgZm9yIFNTSCBhY2Nlc3NcbiAgICBjbGlja2hvdXNlU2VjR3JwLmFkZEluZ3Jlc3NSdWxlKGNkay5hd3NfZWMyLlBlZXIuaXB2NCh2cGMudnBjQ2lkckJsb2NrKSwgY2RrLmF3c19lYzIuUG9ydC50Y3AoMjIpLCAnU1NIIGZyb20gd2l0aGluIFZQQycpO1xuICAgIC8vIGFkZCBydWxlIGZvciBDbGlja0hvdXNlIEhUVFAgYWNjZXNzXG4gICAgY2xpY2tob3VzZVNlY0dycC5hZGRJbmdyZXNzUnVsZShjZGsuYXdzX2VjMi5QZWVyLmlwdjQodnBjLnZwY0NpZHJCbG9jayksIGNkay5hd3NfZWMyLlBvcnQudGNwKDgxMjMpLCAnQ2xpY2tIb3VzZSBIVFRQIGZyb20gd2l0aGluIFZQQycpO1xuICAgIC8vIGFkZCBydWxlIGZvciBDbGlja0hvdXNlIG5hdGl2ZSBhY2Nlc3NcbiAgICBjbGlja2hvdXNlU2VjR3JwLmFkZEluZ3Jlc3NSdWxlKGNkay5hd3NfZWMyLlBlZXIuaXB2NCh2cGMudnBjQ2lkckJsb2NrKSwgY2RrLmF3c19lYzIuUG9ydC50Y3AoOTAwMCksICdDbGlja0hvdXNlIG5hdGl2ZSBmcm9tIHdpdGhpbiBWUEMnKTtcblxuICAgIC8vIHNlY3VyaXR5IGdyb3VwIGZvciBOb3RpZmljYXRpb24gc2VydmljZVxuICAgIGNvbnN0IG5vdGlmaWNhdGlvblNlY0dycCA9IG5ldyBjZGsuYXdzX2VjMi5TZWN1cml0eUdyb3VwKHRoaXMsIGdldEVudkNvbnN0YW50KCdub3RpZmljYXRpb25TZXJ2aWNlU2VjdXJpdHlHcm91cElkJyksIHtcbiAgICAgIHZwYyxcbiAgICAgIHNlY3VyaXR5R3JvdXBOYW1lOiBnZXRFbnZDb25zdGFudCgnbm90aWZpY2F0aW9uU2VydmljZVNlY3VyaXR5R3JvdXBJZCcpLFxuICAgICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIGFkZCBydWxlIGZvciBTU0ggYWNjZXNzXG4gICAgbm90aWZpY2F0aW9uU2VjR3JwLmFkZEluZ3Jlc3NSdWxlKGNkay5hd3NfZWMyLlBlZXIuaXB2NCh2cGMudnBjQ2lkckJsb2NrKSwgY2RrLmF3c19lYzIuUG9ydC50Y3AoMjIpLCAnU1NIIGZyb20gd2l0aGluIFZQQycpO1xuICAgIC8vIGFkZCBydWxlIGZvciBIVFRQIGFjY2Vzc1xuICAgIG5vdGlmaWNhdGlvblNlY0dycC5hZGRJbmdyZXNzUnVsZShjZGsuYXdzX2VjMi5QZWVyLmlwdjQodnBjLnZwY0NpZHJCbG9jayksIGNkay5hd3NfZWMyLlBvcnQudGNwKDgwODApLCAnSFRUUCBmcm9tIHdpdGhpbiBWUEMnKTtcbiAgICAvLyBhZGQgcnVsZSBmb3IgV2ViU29ja2V0IGFjY2Vzc1xuICAgIG5vdGlmaWNhdGlvblNlY0dycC5hZGRJbmdyZXNzUnVsZShjZGsuYXdzX2VjMi5QZWVyLmlwdjQodnBjLnZwY0NpZHJCbG9jayksIGNkay5hd3NfZWMyLlBvcnQudGNwKDgwOTEpLCAnV2ViU29ja2V0IGZyb20gd2l0aGluIFZQQycpO1xuXG4gICAgLy8gc2VjdXJpdHkgZ3JvdXAgZm9yIExhcmF2ZWwtYmFzZWQgc2VydmljZXNcbiAgICBjb25zdCBsYXJhdmVsU2VjR3JwID0gbmV3IGNkay5hd3NfZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgZ2V0RW52Q29uc3RhbnQoJ2xhcmF2ZWxCYXNlZFNlY3VyaXR5R3JvdXBJZCcpLCB7XG4gICAgICB2cGMsXG4gICAgICBzZWN1cml0eUdyb3VwTmFtZTogZ2V0RW52Q29uc3RhbnQoJ2xhcmF2ZWxCYXNlZFNlY3VyaXR5R3JvdXBJZCcpLFxuICAgICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIGFkZCBydWxlIGZvciBTU0ggYWNjZXNzXG4gICAgbGFyYXZlbFNlY0dycC5hZGRJbmdyZXNzUnVsZShjZGsuYXdzX2VjMi5QZWVyLmlwdjQodnBjLnZwY0NpZHJCbG9jayksIGNkay5hd3NfZWMyLlBvcnQudGNwKDIyKSwgJ1NTSCBmcm9tIHdpdGhpbiBWUEMnKTtcbiAgICAvLyBhZGQgcnVsZSBmb3IgSFRUUFxuICAgIGxhcmF2ZWxTZWNHcnAuYWRkSW5ncmVzc1J1bGUoY2RrLmF3c19lYzIuUGVlci5pcHY0KHZwYy52cGNDaWRyQmxvY2spLCBjZGsuYXdzX2VjMi5Qb3J0LnRjcCg4MDgwKSwgJ0hUVFAgZnJvbSB3aXRoaW4gVlBDJyk7XG4gICAgLy8gYWRkIHJ1bGUgZm9yIHByaW50IFdlYlNvY2tldFxuICAgIGxhcmF2ZWxTZWNHcnAuYWRkSW5ncmVzc1J1bGUoY2RrLmF3c19lYzIuUGVlci5pcHY0KHZwYy52cGNDaWRyQmxvY2spLCBjZGsuYXdzX2VjMi5Qb3J0LnRjcCg4MDkwKSwgJ1ByaW50IFdlYlNvY2tldCBmcm9tIHdpdGhpbiBWUEMnKTtcblxuICAgIC8vIHNlY3VyaXR5IGdyb3VwIGZvciBJbnN0YW5jZSBDb25uZWN0aW9uIEVuZHBvaW50XG4gICAgY29uc3QgaWNlU2VjR3JwID0gbmV3IGNkay5hd3NfZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgZ2V0RW52Q29uc3RhbnQoJ2VjMkluc3RhbmNlQ29ubmVjdEVuZHBvaW50U2VjdXJpdHlHcm91cElkJyksIHtcbiAgICAgIHZwYyxcbiAgICAgIHNlY3VyaXR5R3JvdXBOYW1lOiBnZXRFbnZDb25zdGFudCgnZWMySW5zdGFuY2VDb25uZWN0RW5kcG9pbnRTZWN1cml0eUdyb3VwSWQnKSxcbiAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgLy8gYWRkIHJ1bGUgZm9yIG91dGJvdW5kIFNTSFxuICAgIGljZVNlY0dycC5hZGRFZ3Jlc3NSdWxlKGNkay5hd3NfZWMyLlBlZXIuaXB2NCh2cGMudnBjQ2lkckJsb2NrKSwgY2RrLmF3c19lYzIuUG9ydC50Y3AoMjIpLCAnU1NIIHRvIHdpdGhpbiBWUEMnKTtcblxuICAgIG5ldyBjZGsuYXdzX2VjMi5DZm5JbnN0YW5jZUNvbm5lY3RFbmRwb2ludCh0aGlzLCBnZXRFbnZDb25zdGFudCgnZWMySW5zdGFuY2VDb25uZWN0RW5kcG9pbnRJZCcpLCB7XG4gICAgICBzZWN1cml0eUdyb3VwSWRzOiBbaWNlU2VjR3JwLnNlY3VyaXR5R3JvdXBJZF0sXG4gICAgICBzdWJuZXRJZDogdnBjLnByaXZhdGVTdWJuZXRzWzBdLnN1Ym5ldElkLFxuICAgIH0pO1xuXG4gICAgLy8gQVBJIGdhdGV3YXkncyBlbGFzdGljIElQXG4gICAgY29uc3QgYXBpR2F0ZXdheUVJUCA9IG5ldyBjZGsuYXdzX2VjMi5DZm5FSVAodGhpcywgU3RyaW5nKGdldENvbnN0YW50KCdhcGlHYXRld2F5RUlQSWQnKSksIHsgZG9tYWluOiAndnBjJyB9KTtcbiAgICBjZGsuVGFncy5vZihhcGlHYXRld2F5RUlQKS5hZGQoJ05hbWUnLCBTdHJpbmcoZ2V0Q29uc3RhbnQoJ2FwaUdhdGV3YXlFSVBJZCcpKSk7XG5cbiAgICAvLyBQb3J0YWwncyBlbGFzdGljIElQXG4gICAgY29uc3QgcG9ydGFsRUlQID0gbmV3IGNkay5hd3NfZWMyLkNmbkVJUCh0aGlzLCBTdHJpbmcoZ2V0Q29uc3RhbnQoJ3BvcnRhbEVJUElkJykpLCB7IGRvbWFpbjogJ3ZwYycgfSk7XG4gICAgY2RrLlRhZ3Mub2YocG9ydGFsRUlQKS5hZGQoJ05hbWUnLCBTdHJpbmcoZ2V0Q29uc3RhbnQoJ3BvcnRhbEVJUElkJykpKTtcblxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsICd2cGMgSUQnLCB7XG4gICAgICB2YWx1ZTogdnBjLnZwY0lkLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|