@inizioevoke/evosynth 1.8.0 → 1.8.1

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.
@@ -25,7 +25,7 @@ export interface WebGlobalStackProps {
25
25
  redirects?: CloudFrontFunctionRedirects;
26
26
  redirectsCsvPath?: string;
27
27
  webAcl?: boolean | string | SsmStringParameter;
28
- responseHeadersPolicy?: false | AWSManagedResponseHeadersPolicy | 'NONE' | UUID | SsmStringParameter;
28
+ responseHeadersPolicy?: false | AWSManagedResponseHeadersPolicy | UUID | SsmStringParameter;
29
29
  responseHeadersPolicyProps?: ResponseHeadersPolicyProps;
30
30
  responseCspHeaders?: CspHeaders;
31
31
  destroy?: boolean;
@@ -1,5 +1,5 @@
1
- import { Stack, PhysicalName } from 'aws-cdk-lib/core';
2
- import { FunctionEventType, ResponseHeadersPolicy } from 'aws-cdk-lib/aws-cloudfront';
1
+ import { Stack, PhysicalName, Duration } from 'aws-cdk-lib/core';
2
+ import { FunctionEventType, ResponseHeadersPolicy, HeadersFrameOption, HeadersReferrerPolicy } from 'aws-cdk-lib/aws-cloudfront';
3
3
  import { StringParameter } from 'aws-cdk-lib/aws-ssm';
4
4
  import { SSLCertificate } from '../../constructs/certificatemanager.js';
5
5
  import { CloudFrontFunction, CloudFrontDistribution } from '../../constructs/cloudfront.js';
@@ -34,71 +34,66 @@ export class WebGlobalStack extends Stack {
34
34
  });
35
35
  this.s3Bucket = _s3Bucket.bucket;
36
36
  let responseHeadersPolicy = undefined;
37
- if (props.responseHeadersPolicy !== 'NONE') { // I don't know why you would want to not have the policy but just in case
38
- if (props.responseHeadersPolicy) {
39
- if (typeof props.responseHeadersPolicy == 'string') {
40
- if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(props.responseHeadersPolicy)) {
41
- responseHeadersPolicy = ResponseHeadersPolicy.fromResponseHeadersPolicyId(this, 'response-headers-policy-by-id', props.responseHeadersPolicy);
42
- }
43
- else {
44
- responseHeadersPolicy = ResponseHeadersPolicy[props.responseHeadersPolicy] ?? ResponseHeadersPolicy.SECURITY_HEADERS;
45
- }
37
+ if (props.responseHeadersPolicy) {
38
+ if (typeof props.responseHeadersPolicy == 'string') {
39
+ if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(props.responseHeadersPolicy)) {
40
+ responseHeadersPolicy = ResponseHeadersPolicy.fromResponseHeadersPolicyId(this, 'response-headers-policy-by-id', props.responseHeadersPolicy);
46
41
  }
47
- else if (props.responseHeadersPolicy.path) {
48
- responseHeadersPolicy = ResponseHeadersPolicy.fromResponseHeadersPolicyId(this, 'response-headers-policy-by-id', StringParameter.valueForStringParameter(this, props.responseHeadersPolicy.path, props.responseHeadersPolicy.version));
42
+ else {
43
+ responseHeadersPolicy = ResponseHeadersPolicy[props.responseHeadersPolicy] ?? ResponseHeadersPolicy.SECURITY_HEADERS;
49
44
  }
50
45
  }
51
- if (!responseHeadersPolicy) {
52
- // const baseHeadersBehavior: ResponseSecurityHeadersBehavior = {
53
- // strictTransportSecurity: {
54
- // override: true,
55
- // accessControlMaxAge: Duration.seconds(31536000)
56
- // },
57
- // contentTypeOptions: {
58
- // override: true
59
- // },
60
- // frameOptions: {
61
- // override: true,
62
- // frameOption: HeadersFrameOption.SAMEORIGIN,
63
- // },
64
- // referrerPolicy: {
65
- // override: true,
66
- // referrerPolicy: HeadersReferrerPolicy.STRICT_ORIGIN_WHEN_CROSS_ORIGIN
67
- // },
68
- // xssProtection: {
69
- // override: true,
70
- // protection: true,
71
- // modeBlock: true
72
- // }
73
- // };
74
- const responseHeadersPolicyName = `${domainAsId(props.domainName)}-response-headers-policy`;
75
- if (props.responseHeadersPolicyProps) {
76
- responseHeadersPolicy = new ResponseHeadersPolicy(this, 'response-headers-policy', {
77
- ...ResponseHeadersPolicy.SECURITY_HEADERS,
78
- ...props.responseHeadersPolicyProps,
79
- responseHeadersPolicyName: props.responseHeadersPolicyProps.responseHeadersPolicyName || responseHeadersPolicyName
80
- });
46
+ else if (props.responseHeadersPolicy.path) {
47
+ responseHeadersPolicy = ResponseHeadersPolicy.fromResponseHeadersPolicyId(this, 'response-headers-policy-by-id', StringParameter.valueForStringParameter(this, props.responseHeadersPolicy.path, props.responseHeadersPolicy.version));
48
+ }
49
+ }
50
+ else {
51
+ const baseHeadersBehavior = {
52
+ strictTransportSecurity: {
53
+ override: true,
54
+ accessControlMaxAge: Duration.seconds(31536000)
55
+ },
56
+ contentTypeOptions: {
57
+ override: true
58
+ },
59
+ frameOptions: {
60
+ override: true,
61
+ frameOption: HeadersFrameOption.SAMEORIGIN,
62
+ },
63
+ referrerPolicy: {
64
+ override: true,
65
+ referrerPolicy: HeadersReferrerPolicy.STRICT_ORIGIN_WHEN_CROSS_ORIGIN
66
+ },
67
+ xssProtection: {
68
+ override: true,
69
+ protection: true,
70
+ modeBlock: true
81
71
  }
82
- else if (props.responseCspHeaders) {
83
- responseHeadersPolicy = new ResponseHeadersPolicy(this, 'response-headers-policy', {
84
- securityHeadersBehavior: {
85
- ...ResponseHeadersPolicy.SECURITY_HEADERS,
86
- contentSecurityPolicy: {
87
- override: true,
88
- contentSecurityPolicy: Object.entries(props.responseCspHeaders).map(([directive, values]) => {
89
- return `${directive} ${values.join(' ')};`;
90
- }).join(' ')
91
- },
72
+ };
73
+ const responseHeadersPolicyName = `${domainAsId(props.domainName)}-response-headers-policy`;
74
+ if (props.responseHeadersPolicyProps) {
75
+ responseHeadersPolicy = new ResponseHeadersPolicy(this, 'response-headers-policy', {
76
+ ...baseHeadersBehavior,
77
+ ...props.responseHeadersPolicyProps,
78
+ responseHeadersPolicyName: props.responseHeadersPolicyProps.responseHeadersPolicyName || responseHeadersPolicyName
79
+ });
80
+ }
81
+ else if (props.responseCspHeaders) {
82
+ responseHeadersPolicy = new ResponseHeadersPolicy(this, 'response-headers-policy', {
83
+ securityHeadersBehavior: {
84
+ ...baseHeadersBehavior,
85
+ contentSecurityPolicy: {
86
+ override: true,
87
+ contentSecurityPolicy: Object.entries(props.responseCspHeaders).map(([directive, values]) => {
88
+ return `${directive} ${values.join(' ')};`;
89
+ }).join(' ')
92
90
  },
93
- responseHeadersPolicyName
94
- });
95
- }
96
- else {
97
- responseHeadersPolicy = ResponseHeadersPolicy.SECURITY_HEADERS;
98
- }
91
+ },
92
+ responseHeadersPolicyName
93
+ });
99
94
  }
100
- this.responseHeadersPolicy = responseHeadersPolicy;
101
95
  }
96
+ this.responseHeadersPolicy = responseHeadersPolicy;
102
97
  const defaultBehavior = {
103
98
  origin: S3BucketOrigin.withOriginAccessControl(this.s3Bucket),
104
99
  functionAssociations: [],
@@ -196,4 +191,4 @@ export class WebGlobalStack extends Stack {
196
191
  this.aaaaRecord = cfAlias.aaaaRecord;
197
192
  }
198
193
  }
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWdsb2JhbC1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdGFja3Mvd2ViLXN0YXRpYy1zZXJ2ZXJsZXNzL3dlYi1nbG9iYWwtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBYyxZQUFZLEVBQVksTUFBTSxrQkFBa0IsQ0FBQztBQUk3RSxPQUFPLEVBQTBCLGlCQUFpQixFQUF3RyxxQkFBcUIsRUFBNkMsTUFBTSw0QkFBNEIsQ0FBQztBQUcvUCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3hFLE9BQU8sRUFBK0Isa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6SCxPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQW9DcEUsTUFBTSxPQUFPLGNBQWUsU0FBUSxLQUFLO0lBQ3ZCLGNBQWMsQ0FBYztJQUM1QixRQUFRLENBQVM7SUFDakIsa0JBQWtCLENBQVc7SUFDN0Isc0JBQXNCLENBQWU7SUFDckMsTUFBTSxDQUF3QjtJQUM5QixxQkFBcUIsQ0FBcUM7SUFDMUQsT0FBTyxDQUFVO0lBQ2pCLFVBQVUsQ0FBYTtJQUV2QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXVDO1FBQy9FLEtBQUss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O2FBQ3ZCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUN0QixRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDN0IsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLElBQUksc0JBQXNCLENBQUMsSUFBSSxFQUFFLHdCQUF3QixFQUFFO1lBQ2hGLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsVUFBVTtZQUNsRCxVQUFVLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ2hDLGVBQWU7WUFDZixRQUFRO1NBQ1QsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLHNCQUFzQixHQUFHLGNBQWMsQ0FBQyxZQUFZLENBQUM7UUFFMUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQzNELFlBQVksRUFBRSxjQUFjLENBQUMsWUFBWTtZQUN6QyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDNUIsVUFBVSxFQUFFLFVBQVU7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUN2QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjaywgU3RhY2tQcm9wcywgUGh5c2ljYWxOYW1lLCBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmltcG9ydCB7IENlcnRpZmljYXRlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXJcIjtcbmltcG9ydCB7IERpc3RyaWJ1dGlvbiwgRnVuY3Rpb24sIEZ1bmN0aW9uRXZlbnRUeXBlLCBJUmVzcG9uc2VIZWFkZXJzUG9saWN5LCBSZXNwb25zZUhlYWRlcnNQb2xpY3lQcm9wcywgUmVzcG9uc2VTZWN1cml0eUhlYWRlcnNCZWhhdmlvciwgQmVoYXZpb3JPcHRpb25zLCBSZXNwb25zZUhlYWRlcnNQb2xpY3ksIEhlYWRlcnNGcmFtZU9wdGlvbiwgSGVhZGVyc1JlZmVycmVyUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0IHsgQVJlY29yZCwgQWFhYVJlY29yZCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1M1wiO1xuaW1wb3J0IHsgQnVja2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHsgU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgeyBDZm5XZWJBQ0wgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtd2FmdjInO1xuXG5pbXBvcnQgeyBTU0xDZXJ0aWZpY2F0ZSB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdHMvY2VydGlmaWNhdGVtYW5hZ2VyLmpzJztcbmltcG9ydCB7IENsb3VkRnJvbnRGdW5jdGlvblJlZGlyZWN0cywgQ2xvdWRGcm9udEZ1bmN0aW9uLCBDbG91ZEZyb250RGlzdHJpYnV0aW9uIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0cy9jbG91ZGZyb250LmpzJztcbmltcG9ydCB7IGdldEhvc3RlZFpvbmUsIENsb3VkRnJvbnRBbGlhcyB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdHMvcm91dGU1My5qcyc7XG5pbXBvcnQgeyBTM0J1Y2tldCB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdHMvczMuanMnO1xuaW1wb3J0IHR5cGUgeyBTc21TdHJpbmdQYXJhbWV0ZXIgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RzL3NzbS50cyc7XG5pbXBvcnQgeyBDbG91ZEZyb250V2ViQWNsIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0cy93YWYuanMnO1xuaW1wb3J0IHsgZG9tYWluQXNJZCB9IGZyb20gJy4uLy4uL2xpYi91dGlscy5qcyc7XG5pbXBvcnQgeyBhZGRFdm9TdGFja1RhZ3MgfSBmcm9tICcuLi8uLi9saWIvdGFncy50cyc7XG5pbXBvcnQgeyBTM0J1Y2tldE9yaWdpbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250LW9yaWdpbnMnO1xuaW1wb3J0IHR5cGUgeyBCYXNpY0F1dGhDcmVkZW50aWFscywgQ3NwSGVhZGVycyB9IGZyb20gJy4uLy4uL3R5cGVzLmQudHMnO1xuXG5cbnR5cGUgQVdTTWFuYWdlZFJlc3BvbnNlSGVhZGVyc1BvbGljeSA9IFxuICAnQ09SU19BTExPV19BTExfT1JJR0lOUycgfFxuICAnQ09SU19BTExPV19BTExfT1JJR0lOU19BTkRfU0VDVVJJVFlfSEVBREVSUycgfFxuICAnQ09SU19BTExPV19BTExfT1JJR0lOU19XSVRIX1BSRUZMSUdIVCcgfFxuICAnQ09SU19BTExPV19BTExfT1JJR0lOU19XSVRIX1BSRUZMSUdIVF9BTkRfU0VDVVJJVFlfSEVBREVSUycgfFxuICAnU0VDVVJJVFlfSEVBREVSUyc7XG5cbnR5cGUgVVVJRCA9IGAke3N0cmluZ30tJHtzdHJpbmd9LSR7c3RyaW5nfS0ke3N0cmluZ30tJHtzdHJpbmd9YDtcbnR5cGUgQ2xvdWRGcm9udEZ1bmN0aW9uRXZlbnRUeXBlID0ga2V5b2YgdHlwZW9mIEZ1bmN0aW9uRXZlbnRUeXBlO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdlYkdsb2JhbFN0YWNrUHJvcHMge1xuICBlbnZUeXBlOiAnTk9UX1BST0QnIHwgJ1BST0QnO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgYnVja2V0TmFtZT86IHN0cmluZztcbiAgaG9zdGVkWm9uZTogc3RyaW5nO1xuICBkb21haW5OYW1lOiBzdHJpbmc7XG4gIGJhc2ljQXV0aD86IHN0cmluZyB8IEJhc2ljQXV0aENyZWRlbnRpYWxzIHwgU3NtU3RyaW5nUGFyYW1ldGVyO1xuICBjbG91ZGZyb250RnVuY3Rpb24/OiB7XG4gICAgZXZlbnRUeXBlOiBDbG91ZEZyb250RnVuY3Rpb25FdmVudFR5cGVbXTtcbiAgICBjb2RlOiBzdHJpbmc7XG4gIH1cbiAgcmVkaXJlY3RzPzogQ2xvdWRGcm9udEZ1bmN0aW9uUmVkaXJlY3RzO1xuICByZWRpcmVjdHNDc3ZQYXRoPzogc3RyaW5nO1xuICAvLyBhdHRhY2hXZWJBY2w/OiBib29sZWFuIHwgc3RyaW5nO1xuICB3ZWJBY2w/OiBib29sZWFuIHwgc3RyaW5nIHwgU3NtU3RyaW5nUGFyYW1ldGVyO1xuICByZXNwb25zZUhlYWRlcnNQb2xpY3k/OiBmYWxzZSB8IEFXU01hbmFnZWRSZXNwb25zZUhlYWRlcnNQb2xpY3kgfCAnTk9ORScgfCBVVUlEIHwgU3NtU3RyaW5nUGFyYW1ldGVyO1xuICByZXNwb25zZUhlYWRlcnNQb2xpY3lQcm9wcz86IFJlc3BvbnNlSGVhZGVyc1BvbGljeVByb3BzO1xuICByZXNwb25zZUNzcEhlYWRlcnM/OiBDc3BIZWFkZXJzO1xuICBkZXN0cm95PzogYm9vbGVhbjtcbiAgdGFncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBjbGFzcyBXZWJHbG9iYWxTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgcHVibGljIHJlYWRvbmx5IHNzbENlcnRpZmljYXRlOiBDZXJ0aWZpY2F0ZTtcbiAgcHVibGljIHJlYWRvbmx5IHMzQnVja2V0OiBCdWNrZXQ7XG4gIHB1YmxpYyByZWFkb25seSBjbG91ZEZyb250RnVuY3Rpb246IEZ1bmN0aW9uO1xuICBwdWJsaWMgcmVhZG9ubHkgY2xvdWRGcm9udERpc3RyaWJ1dGlvbjogRGlzdHJpYnV0aW9uO1xuICBwdWJsaWMgcmVhZG9ubHkgd2ViQWNsOiBDZm5XZWJBQ0wgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyByZWFkb25seSByZXNwb25zZUhlYWRlcnNQb2xpY3k6IElSZXNwb25zZUhlYWRlcnNQb2xpY3kgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyByZWFkb25seSBhUmVjb3JkOiBBUmVjb3JkO1xuICBwdWJsaWMgcmVhZG9ubHkgYWFhYVJlY29yZDogQWFhYVJlY29yZDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogV2ViR2xvYmFsU3RhY2tQcm9wcyAmIFN0YWNrUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICBhZGRFdm9TdGFja1RhZ3ModGhpcywgJ1dlYkdsb2JhbFN0YWNrJyk7XG5cbiAgICBjb25zdCBob3N0ZWRab25lID0gZ2V0SG9zdGVkWm9uZSh0aGlzLCAnZ2V0SG9zdGVkWm9uZScsIHByb3BzLmhvc3RlZFpvbmUpO1xuXG4gICAgY29uc3QgX3NzbENlcnQgPSBuZXcgU1NMQ2VydGlmaWNhdGUodGhpcywgJ1NTTENlcnRpZmljYXRlJywge1xuICAgICAgaG9zdGVkWm9uZTogaG9zdGVkWm9uZSxcbiAgICAgIGRvbWFpbk5hbWU6IHByb3BzLmRvbWFpbk5hbWUsXG4gICAgICBkZXN0cm95OiBwcm9wcy5kZXN0cm95XG4gICAgfSk7XG4gICAgdGhpcy5zc2xDZXJ0aWZpY2F0ZSA9IF9zc2xDZXJ0LmNlcnRpZmljYXRlO1xuXG4gICAgY29uc3QgX3MzQnVja2V0ID0gbmV3IFMzQnVja2V0KHRoaXMsICdTM0J1Y2tldCcsIHtcbiAgICAgIGJ1Y2tldE5hbWU6IHByb3BzLmJ1Y2tldE5hbWUgPz8gUGh5c2ljYWxOYW1lLkdFTkVSQVRFX0lGX05FRURFRCxcbiAgICAgIGRlc3Ryb3k6IHByb3BzLmRlc3Ryb3lcbiAgICB9KTtcbiAgICB0aGlzLnMzQnVja2V0ID0gX3MzQnVja2V0LmJ1Y2tldDtcblxuICAgIGxldCByZXNwb25zZUhlYWRlcnNQb2xpY3k6IElSZXNwb25zZUhlYWRlcnNQb2xpY3kgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHByb3BzLnJlc3BvbnNlSGVhZGVyc1BvbGljeSAhPT0gJ05PTkUnKSB7IC8vIEkgZG9uJ3Qga25vdyB3aHkgeW91IHdvdWxkIHdhbnQgdG8gbm90IGhhdmUgdGhlIHBvbGljeSBidXQganVzdCBpbiBjYXNlXG4gICAgICBpZiAocHJvcHMucmVzcG9uc2VIZWFkZXJzUG9saWN5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcHMucmVzcG9uc2VIZWFkZXJzUG9saWN5ID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKC9eWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9JC9pLnRlc3QocHJvcHMucmVzcG9uc2VIZWFkZXJzUG9saWN5KSkge1xuICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzUG9saWN5ID0gUmVzcG9uc2VIZWFkZXJzUG9saWN5LmZyb21SZXNwb25zZUhlYWRlcnNQb2xpY3lJZCh0aGlzLCAncmVzcG9uc2UtaGVhZGVycy1wb2xpY3ktYnktaWQnLCBwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3kpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3kgPSBSZXNwb25zZUhlYWRlcnNQb2xpY3lbcHJvcHMucmVzcG9uc2VIZWFkZXJzUG9saWN5IGFzIGtleW9mIHR5cGVvZiBSZXNwb25zZUhlYWRlcnNQb2xpY3ldIGFzIElSZXNwb25zZUhlYWRlcnNQb2xpY3kgPz8gUmVzcG9uc2VIZWFkZXJzUG9saWN5LlNFQ1VSSVRZX0hFQURFUlM7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHByb3BzLnJlc3BvbnNlSGVhZGVyc1BvbGljeS5wYXRoKSB7XG4gICAgICAgICAgcmVzcG9uc2VIZWFkZXJzUG9saWN5ID0gUmVzcG9uc2VIZWFkZXJzUG9saWN5LmZyb21SZXNwb25zZUhlYWRlcnNQb2xpY3lJZCh0aGlzLCAncmVzcG9uc2UtaGVhZGVycy1wb2xpY3ktYnktaWQnLCBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIodGhpcywgcHJvcHMucmVzcG9uc2VIZWFkZXJzUG9saWN5LnBhdGgsIHByb3BzLnJlc3BvbnNlSGVhZGVyc1BvbGljeS52ZXJzaW9uKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghcmVzcG9uc2VIZWFkZXJzUG9saWN5KSB7XG4gICAgICAgIC8vIGNvbnN0IGJhc2VIZWFkZXJzQmVoYXZpb3I6IFJlc3BvbnNlU2VjdXJpdHlIZWFkZXJzQmVoYXZpb3IgPSB7XG4gICAgICAgIC8vICAgc3RyaWN0VHJhbnNwb3J0U2VjdXJpdHk6IHtcbiAgICAgICAgLy8gICAgIG92ZXJyaWRlOiB0cnVlLFxuICAgICAgICAvLyAgICAgYWNjZXNzQ29udHJvbE1heEFnZTogRHVyYXRpb24uc2Vjb25kcygzMTUzNjAwMClcbiAgICAgICAgLy8gICB9LFxuICAgICAgICAvLyAgIGNvbnRlbnRUeXBlT3B0aW9uczoge1xuICAgICAgICAvLyAgICAgb3ZlcnJpZGU6IHRydWVcbiAgICAgICAgLy8gICB9LFxuICAgICAgICAvLyAgIGZyYW1lT3B0aW9uczoge1xuICAgICAgICAvLyAgICAgb3ZlcnJpZGU6IHRydWUsXG4gICAgICAgIC8vICAgICBmcmFtZU9wdGlvbjogSGVhZGVyc0ZyYW1lT3B0aW9uLlNBTUVPUklHSU4sXG4gICAgICAgIC8vICAgfSxcbiAgICAgICAgLy8gICByZWZlcnJlclBvbGljeToge1xuICAgICAgICAvLyAgICAgb3ZlcnJpZGU6IHRydWUsXG4gICAgICAgIC8vICAgICByZWZlcnJlclBvbGljeTogSGVhZGVyc1JlZmVycmVyUG9saWN5LlNUUklDVF9PUklHSU5fV0hFTl9DUk9TU19PUklHSU5cbiAgICAgICAgLy8gICB9LFxuICAgICAgICAvLyAgIHhzc1Byb3RlY3Rpb246IHtcbiAgICAgICAgLy8gICAgIG92ZXJyaWRlOiB0cnVlLFxuICAgICAgICAvLyAgICAgcHJvdGVjdGlvbjogdHJ1ZSxcbiAgICAgICAgLy8gICAgIG1vZGVCbG9jazogdHJ1ZVxuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfTtcblxuICAgICAgICBjb25zdCByZXNwb25zZUhlYWRlcnNQb2xpY3lOYW1lID0gYCR7ZG9tYWluQXNJZChwcm9wcy5kb21haW5OYW1lKX0tcmVzcG9uc2UtaGVhZGVycy1wb2xpY3lgO1xuICAgICAgICBcbiAgICAgICAgaWYgKHByb3BzLnJlc3BvbnNlSGVhZGVyc1BvbGljeVByb3BzKSB7XG4gICAgICAgICAgcmVzcG9uc2VIZWFkZXJzUG9saWN5ID0gbmV3IFJlc3BvbnNlSGVhZGVyc1BvbGljeSh0aGlzLCAncmVzcG9uc2UtaGVhZGVycy1wb2xpY3knLCB7XG4gICAgICAgICAgICAuLi5SZXNwb25zZUhlYWRlcnNQb2xpY3kuU0VDVVJJVFlfSEVBREVSUyxcbiAgICAgICAgICAgIC4uLnByb3BzLnJlc3BvbnNlSGVhZGVyc1BvbGljeVByb3BzLFxuICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzUG9saWN5TmFtZTogcHJvcHMucmVzcG9uc2VIZWFkZXJzUG9saWN5UHJvcHMucmVzcG9uc2VIZWFkZXJzUG9saWN5TmFtZSB8fCByZXNwb25zZUhlYWRlcnNQb2xpY3lOYW1lXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcHMucmVzcG9uc2VDc3BIZWFkZXJzKSB7XG4gICAgICAgICAgcmVzcG9uc2VIZWFkZXJzUG9saWN5ID0gbmV3IFJlc3BvbnNlSGVhZGVyc1BvbGljeSh0aGlzLCAncmVzcG9uc2UtaGVhZGVycy1wb2xpY3knLCB7XG4gICAgICAgICAgICBzZWN1cml0eUhlYWRlcnNCZWhhdmlvcjoge1xuICAgICAgICAgICAgICAuLi5SZXNwb25zZUhlYWRlcnNQb2xpY3kuU0VDVVJJVFlfSEVBREVSUyxcbiAgICAgICAgICAgICAgY29udGVudFNlY3VyaXR5UG9saWN5OiB7XG4gICAgICAgICAgICAgICAgb3ZlcnJpZGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY29udGVudFNlY3VyaXR5UG9saWN5OiBPYmplY3QuZW50cmllcyhwcm9wcy5yZXNwb25zZUNzcEhlYWRlcnMpLm1hcCgoW2RpcmVjdGl2ZSwgdmFsdWVzXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2RpcmVjdGl2ZX0gJHt2YWx1ZXMuam9pbignICcpfTtgXG4gICAgICAgICAgICAgICAgfSkuam9pbignICcpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzUG9saWN5TmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3BvbnNlSGVhZGVyc1BvbGljeSA9IFJlc3BvbnNlSGVhZGVyc1BvbGljeS5TRUNVUklUWV9IRUFERVJTO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnJlc3BvbnNlSGVhZGVyc1BvbGljeSA9IHJlc3BvbnNlSGVhZGVyc1BvbGljeTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0QmVoYXZpb3I6IEJlaGF2aW9yT3B0aW9ucyA9IHtcbiAgICAgIG9yaWdpbjogUzNCdWNrZXRPcmlnaW4ud2l0aE9yaWdpbkFjY2Vzc0NvbnRyb2wodGhpcy5zM0J1Y2tldCksXG4gICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogW10sXG4gICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3k6IHJlc3BvbnNlSGVhZGVyc1BvbGljeSA/PyBwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3kgIT09IGZhbHNlID8gUmVzcG9uc2VIZWFkZXJzUG9saWN5LlNFQ1VSSVRZX0hFQURFUlMgOiB1bmRlZmluZWRcbiAgICB9O1xuXG4gICAgbGV0IGNmZm46IENsb3VkRnJvbnRGdW5jdGlvbjtcbiAgICBpZiAocHJvcHMuYmFzaWNBdXRoKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BzLmJhc2ljQXV0aCAhPSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoKHByb3BzLmJhc2ljQXV0aCBhcyBCYXNpY0F1dGhDcmVkZW50aWFscykudXNlciAmJiAocHJvcHMuYmFzaWNBdXRoIGFzIEJhc2ljQXV0aENyZWRlbnRpYWxzKS5wYXNzd29yZCkge1xuICAgICAgICAgIHByb3BzLmJhc2ljQXV0aCA9IEJ1ZmZlci5mcm9tKGAkeyhwcm9wcy5iYXNpY0F1dGggYXMgQmFzaWNBdXRoQ3JlZGVudGlhbHMpLnVzZXJ9OiR7KHByb3BzLmJhc2ljQXV0aCBhcyBCYXNpY0F1dGhDcmVkZW50aWFscykucGFzc3dvcmR9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgICB9IGVsc2UgaWYgKChwcm9wcy5iYXNpY0F1dGggYXMgU3NtU3RyaW5nUGFyYW1ldGVyKS5wYXRoKSB7XG4gICAgICAgICAgcHJvcHMuYmFzaWNBdXRoID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKHRoaXMsIChwcm9wcy5iYXNpY0F1dGggYXMgU3NtU3RyaW5nUGFyYW1ldGVyKS5wYXRoLCAocHJvcHMuYmFzaWNBdXRoIGFzIFNzbVN0cmluZ1BhcmFtZXRlcikudmVyc2lvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvcHMuYmFzaWNBdXRoID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5jbG91ZGZyb250RnVuY3Rpb24pIHtcbiAgICAgIGNmZm4gPSBDbG91ZEZyb250RnVuY3Rpb24uY3JlYXRlRnVuY3Rpb24odGhpcywgbnVsbCwge1xuICAgICAgICBjcmVkZW50aWFsczogcHJvcHMuYmFzaWNBdXRoLFxuICAgICAgICByZWRpcmVjdHM6IHByb3BzLnJlZGlyZWN0cyxcbiAgICAgICAgcmVkaXJlY3RzQ3N2UGF0aDogcHJvcHMucmVkaXJlY3RzQ3N2UGF0aCxcbiAgICAgICAgY29kZTogcHJvcHMuY2xvdWRmcm9udEZ1bmN0aW9uLmNvZGUsXG4gICAgICAgIGRlc3Ryb3k6IHByb3BzLmRlc3Ryb3lcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuYmFzaWNBdXRoKSB7XG4gICAgICBjZmZuID0gQ2xvdWRGcm9udEZ1bmN0aW9uLmNyZWF0ZUJhc2ljQXV0aERlZmF1bHREb2ModGhpcywge1xuICAgICAgICBjcmVkZW50aWFsczogcHJvcHMuYmFzaWNBdXRoLFxuICAgICAgICByZWRpcmVjdHM6IHByb3BzLnJlZGlyZWN0cyxcbiAgICAgICAgcmVkaXJlY3RzQ3N2UGF0aDogcHJvcHMucmVkaXJlY3RzQ3N2UGF0aCxcbiAgICAgICAgZGVzdHJveTogcHJvcHMuZGVzdHJveVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNmZm4gPSBDbG91ZEZyb250RnVuY3Rpb24uY3JlYXRlRGVmYXVsdERvYyh0aGlzLCB7XG4gICAgICAgIHJlZGlyZWN0czogcHJvcHMucmVkaXJlY3RzLFxuICAgICAgICByZWRpcmVjdHNDc3ZQYXRoOiBwcm9wcy5yZWRpcmVjdHNDc3ZQYXRoLFxuICAgICAgICBkZXN0cm95OiBwcm9wcy5kZXN0cm95XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5jbG91ZEZyb250RnVuY3Rpb24gPSBjZmZuLmZuO1xuXG4gICAgLy8gY29uc3QgZXZlbnRUeXBlczogQ2xvdWRGcm9udEZ1bmN0aW9uRXZlbnRUeXBlW10gPSBwcm9wcy5jbG91ZGZyb250RnVuY3Rpb24/LmV2ZW50VHlwZSAmJiBwcm9wcy5jbG91ZGZyb250RnVuY3Rpb24uZXZlbnRUeXBlLmxlbmd0aCA+IDAgPyBwcm9wcy5jbG91ZGZyb250RnVuY3Rpb24uZXZlbnRUeXBlIDogWydWSUVXRVJfUkVRVUVTVCcsICdWSUVXRVJfUkVTUE9OU0UnXTtcblxuICAgIGxldCBldmVudFR5cGVzOiBDbG91ZEZyb250RnVuY3Rpb25FdmVudFR5cGVbXSA9IFsnVklFV0VSX1JFUVVFU1QnLCAnVklFV0VSX1JFU1BPTlNFJ107XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcHMuY2xvdWRmcm9udEZ1bmN0aW9uPy5ldmVudFR5cGUpICYmIHByb3BzLmNsb3VkZnJvbnRGdW5jdGlvbi5ldmVudFR5cGUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZXRzID0gcHJvcHMuY2xvdWRmcm9udEZ1bmN0aW9uLmV2ZW50VHlwZVxuICAgICAgICAuZmlsdGVyKCh2LCBpLCBhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHR5cGVvZiB2ID09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAodiA9PT0gJ1ZJRVdFUl9SRVFVRVNUJyB8fCB2ID09PSAnVklFV0VSX1JFU1BPTlNFJykgJiZcbiAgICAgICAgICAgIGEuaW5kZXhPZih2KSA9PT0gaSAvLyBkZWR1cFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgaWYgKGV0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGV2ZW50VHlwZXMgPSBldHM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBldmVudFR5cGUgb2YgZXZlbnRUeXBlcykge1xuICAgICAgZGVmYXVsdEJlaGF2aW9yLmZ1bmN0aW9uQXNzb2NpYXRpb25zIS5wdXNoKHtcbiAgICAgICAgZXZlbnRUeXBlOiBGdW5jdGlvbkV2ZW50VHlwZVtldmVudFR5cGVdLFxuICAgICAgICBmdW5jdGlvbjogdGhpcy5jbG91ZEZyb250RnVuY3Rpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICBsZXQgd2ViQWNsSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAodHlwZW9mIHByb3BzLndlYkFjbCA9PSAnc3RyaW5nJyAmJiBwcm9wcy53ZWJBY2wuc3RhcnRzV2l0aCgnYXJuOmF3cycpKSB7XG4gICAgICB3ZWJBY2xJZCA9IHByb3BzLndlYkFjbDtcbiAgICB9IGVsc2UgaWYgKChwcm9wcy53ZWJBY2wgYXMgU3NtU3RyaW5nUGFyYW1ldGVyKS5wYXRoKSB7XG4gICAgICB3ZWJBY2xJZCA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCAocHJvcHMud2ViQWNsIGFzIFNzbVN0cmluZ1BhcmFtZXRlcikucGF0aCwgKHByb3BzLndlYkFjbCBhcyBTc21TdHJpbmdQYXJhbWV0ZXIpLnZlcnNpb24pO1xuICAgIH0gZWxzZSBpZiAocHJvcHMud2ViQWNsID09PSB0cnVlKSB7XG4gICAgICBjb25zdCB3YWYgPSBuZXcgQ2xvdWRGcm9udFdlYkFjbCh0aGlzLCAnQ2xvdWRGcm9udFdlYkFjbCcsIHtcbiAgICAgICAgbmFtZTogYCR7ZG9tYWluQXNJZChwcm9wcy5kb21haW5OYW1lKX1gLFxuICAgICAgICBkZXN0cm95OiBwcm9wcy5kZXN0cm95XG4gICAgICB9KTtcbiAgICAgIHRoaXMud2ViQWNsID0gd2FmLmFjbDtcbiAgICAgIHdlYkFjbElkID0gd2FmLmFjbC5hdHRyQXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNmRGlzdHJpYnV0aW9uID0gbmV3IENsb3VkRnJvbnREaXN0cmlidXRpb24odGhpcywgJ0Nsb3VkRnJvbnREaXN0cmlidXRpb24nLCB7XG4gICAgICBkb21haW5OYW1lOiBwcm9wcy5kb21haW5OYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uID8/IHByb3BzLmRvbWFpbk5hbWUsXG4gICAgICBwcmljZUNsYXNzOiBwcm9wcy5lbnZUeXBlLFxuICAgICAgY2VydGlmaWNhdGU6IHRoaXMuc3NsQ2VydGlmaWNhdGUsXG4gICAgICBkZWZhdWx0QmVoYXZpb3IsXG4gICAgICB3ZWJBY2xJZFxuICAgIH0pO1xuICAgIHRoaXMuY2xvdWRGcm9udERpc3RyaWJ1dGlvbiA9IGNmRGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbjtcblxuICAgIGNvbnN0IGNmQWxpYXMgPSBuZXcgQ2xvdWRGcm9udEFsaWFzKHRoaXMsICdDbG91ZEZyb250QWxpYXMnLCB7XG4gICAgICBkaXN0cmlidXRpb246IGNmRGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbixcbiAgICAgIGRvbWFpbk5hbWU6IHByb3BzLmRvbWFpbk5hbWUsXG4gICAgICBob3N0ZWRab25lOiBob3N0ZWRab25lXG4gICAgfSk7XG4gICAgdGhpcy5hUmVjb3JkID0gY2ZBbGlhcy5hUmVjb3JkO1xuICAgIHRoaXMuYWFhYVJlY29yZCA9IGNmQWxpYXMuYWFhYVJlY29yZDtcbiAgfVxufSJdfQ==
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWdsb2JhbC1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdGFja3Mvd2ViLXN0YXRpYy1zZXJ2ZXJsZXNzL3dlYi1nbG9iYWwtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBYyxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJN0UsT0FBTyxFQUEwQixpQkFBaUIsRUFBd0cscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUcvUCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3hFLE9BQU8sRUFBK0Isa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6SCxPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQW9DcEUsTUFBTSxPQUFPLGNBQWUsU0FBUSxLQUFLO0lBQ3ZCLGNBQWMsQ0FBYztJQUM1QixRQUFRLENBQVM7SUFDakIsa0JBQWtCLENBQVc7SUFDN0Isc0JBQXNCLENBQWU7SUFDckMsTUFBTSxDQUF3QjtJQUM5QixxQkFBcUIsQ0FBcUM7SUFDMUQsT0FBTyxDQUFVO0lBQ2pCLFVBQVUsQ0FBYTtJQUV2QyxZQUFZLEtBQWdC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QUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO1lBQ3RCLFFBQVEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUM3QixDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLEVBQUU7WUFDaEYsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQzVCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxVQUFVO1lBQ2xELFVBQVUsRUFBRSxLQUFLLENBQUMsT0FBTztZQUN6QixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDaEMsZUFBZTtZQUNmLFFBQVE7U0FDVCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQztRQUUxRCxNQUFNLE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7WUFDM0QsWUFBWSxFQUFFLGNBQWMsQ0FBQyxZQUFZO1lBQ3pDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixVQUFVLEVBQUUsVUFBVTtTQUN2QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQ3ZDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YWNrLCBTdGFja1Byb3BzLCBQaHlzaWNhbE5hbWUsIER1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuaW1wb3J0IHsgQ2VydGlmaWNhdGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiO1xuaW1wb3J0IHsgRGlzdHJpYnV0aW9uLCBGdW5jdGlvbiwgRnVuY3Rpb25FdmVudFR5cGUsIElSZXNwb25zZUhlYWRlcnNQb2xpY3ksIFJlc3BvbnNlSGVhZGVyc1BvbGljeVByb3BzLCBSZXNwb25zZVNlY3VyaXR5SGVhZGVyc0JlaGF2aW9yLCBCZWhhdmlvck9wdGlvbnMsIFJlc3BvbnNlSGVhZGVyc1BvbGljeSwgSGVhZGVyc0ZyYW1lT3B0aW9uLCBIZWFkZXJzUmVmZXJyZXJQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udCc7XG5pbXBvcnQgeyBBUmVjb3JkLCBBYWFhUmVjb3JkIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzXCI7XG5pbXBvcnQgeyBCdWNrZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyBTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcbmltcG9ydCB7IENmbldlYkFDTCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy13YWZ2Mic7XG5cbmltcG9ydCB7IFNTTENlcnRpZmljYXRlIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0cy9jZXJ0aWZpY2F0ZW1hbmFnZXIuanMnO1xuaW1wb3J0IHsgQ2xvdWRGcm9udEZ1bmN0aW9uUmVkaXJlY3RzLCBDbG91ZEZyb250RnVuY3Rpb24sIENsb3VkRnJvbnREaXN0cmlidXRpb24gfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RzL2Nsb3VkZnJvbnQuanMnO1xuaW1wb3J0IHsgZ2V0SG9zdGVkWm9uZSwgQ2xvdWRGcm9udEFsaWFzIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0cy9yb3V0ZTUzLmpzJztcbmltcG9ydCB7IFMzQnVja2V0IH0gZnJvbSAnLi4vLi4vY29uc3RydWN0cy9zMy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNzbVN0cmluZ1BhcmFtZXRlciB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdHMvc3NtLnRzJztcbmltcG9ydCB7IENsb3VkRnJvbnRXZWJBY2wgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RzL3dhZi5qcyc7XG5pbXBvcnQgeyBkb21haW5Bc0lkIH0gZnJvbSAnLi4vLi4vbGliL3V0aWxzLmpzJztcbmltcG9ydCB7IGFkZEV2b1N0YWNrVGFncyB9IGZyb20gJy4uLy4uL2xpYi90YWdzLnRzJztcbmltcG9ydCB7IFMzQnVja2V0T3JpZ2luIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQtb3JpZ2lucyc7XG5pbXBvcnQgdHlwZSB7IEJhc2ljQXV0aENyZWRlbnRpYWxzLCBDc3BIZWFkZXJzIH0gZnJvbSAnLi4vLi4vdHlwZXMuZC50cyc7XG5cblxudHlwZSBBV1NNYW5hZ2VkUmVzcG9uc2VIZWFkZXJzUG9saWN5ID0gXG4gICdDT1JTX0FMTE9XX0FMTF9PUklHSU5TJyB8XG4gICdDT1JTX0FMTE9XX0FMTF9PUklHSU5TX0FORF9TRUNVUklUWV9IRUFERVJTJyB8XG4gICdDT1JTX0FMTE9XX0FMTF9PUklHSU5TX1dJVEhfUFJFRkxJR0hUJyB8XG4gICdDT1JTX0FMTE9XX0FMTF9PUklHSU5TX1dJVEhfUFJFRkxJR0hUX0FORF9TRUNVUklUWV9IRUFERVJTJyB8XG4gICdTRUNVUklUWV9IRUFERVJTJztcblxudHlwZSBVVUlEID0gYCR7c3RyaW5nfS0ke3N0cmluZ30tJHtzdHJpbmd9LSR7c3RyaW5nfS0ke3N0cmluZ31gO1xudHlwZSBDbG91ZEZyb250RnVuY3Rpb25FdmVudFR5cGUgPSBrZXlvZiB0eXBlb2YgRnVuY3Rpb25FdmVudFR5cGU7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViR2xvYmFsU3RhY2tQcm9wcyB7XG4gIGVudlR5cGU6ICdOT1RfUFJPRCcgfCAnUFJPRCc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBidWNrZXROYW1lPzogc3RyaW5nO1xuICBob3N0ZWRab25lOiBzdHJpbmc7XG4gIGRvbWFpbk5hbWU6IHN0cmluZztcbiAgYmFzaWNBdXRoPzogc3RyaW5nIHwgQmFzaWNBdXRoQ3JlZGVudGlhbHMgfCBTc21TdHJpbmdQYXJhbWV0ZXI7XG4gIGNsb3VkZnJvbnRGdW5jdGlvbj86IHtcbiAgICBldmVudFR5cGU6IENsb3VkRnJvbnRGdW5jdGlvbkV2ZW50VHlwZVtdO1xuICAgIGNvZGU6IHN0cmluZztcbiAgfVxuICByZWRpcmVjdHM/OiBDbG91ZEZyb250RnVuY3Rpb25SZWRpcmVjdHM7XG4gIHJlZGlyZWN0c0NzdlBhdGg/OiBzdHJpbmc7XG4gIC8vIGF0dGFjaFdlYkFjbD86IGJvb2xlYW4gfCBzdHJpbmc7XG4gIHdlYkFjbD86IGJvb2xlYW4gfCBzdHJpbmcgfCBTc21TdHJpbmdQYXJhbWV0ZXI7XG4gIHJlc3BvbnNlSGVhZGVyc1BvbGljeT86IGZhbHNlIHwgQVdTTWFuYWdlZFJlc3BvbnNlSGVhZGVyc1BvbGljeSB8IFVVSUQgfCBTc21TdHJpbmdQYXJhbWV0ZXI7XG4gIHJlc3BvbnNlSGVhZGVyc1BvbGljeVByb3BzPzogUmVzcG9uc2VIZWFkZXJzUG9saWN5UHJvcHM7XG4gIHJlc3BvbnNlQ3NwSGVhZGVycz86IENzcEhlYWRlcnM7XG4gIGRlc3Ryb3k/OiBib29sZWFuO1xuICB0YWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuZXhwb3J0IGNsYXNzIFdlYkdsb2JhbFN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICBwdWJsaWMgcmVhZG9ubHkgc3NsQ2VydGlmaWNhdGU6IENlcnRpZmljYXRlO1xuICBwdWJsaWMgcmVhZG9ubHkgczNCdWNrZXQ6IEJ1Y2tldDtcbiAgcHVibGljIHJlYWRvbmx5IGNsb3VkRnJvbnRGdW5jdGlvbjogRnVuY3Rpb247XG4gIHB1YmxpYyByZWFkb25seSBjbG91ZEZyb250RGlzdHJpYnV0aW9uOiBEaXN0cmlidXRpb247XG4gIHB1YmxpYyByZWFkb25seSB3ZWJBY2w6IENmbldlYkFDTCB8IHVuZGVmaW5lZDtcbiAgcHVibGljIHJlYWRvbmx5IHJlc3BvbnNlSGVhZGVyc1BvbGljeTogSVJlc3BvbnNlSGVhZGVyc1BvbGljeSB8IHVuZGVmaW5lZDtcbiAgcHVibGljIHJlYWRvbmx5IGFSZWNvcmQ6IEFSZWNvcmQ7XG4gIHB1YmxpYyByZWFkb25seSBhYWFhUmVjb3JkOiBBYWFhUmVjb3JkO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBXZWJHbG9iYWxTdGFja1Byb3BzICYgU3RhY2tQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIGFkZEV2b1N0YWNrVGFncyh0aGlzLCAnV2ViR2xvYmFsU3RhY2snKTtcblxuICAgIGNvbnN0IGhvc3RlZFpvbmUgPSBnZXRIb3N0ZWRab25lKHRoaXMsICdnZXRIb3N0ZWRab25lJywgcHJvcHMuaG9zdGVkWm9uZSk7XG5cbiAgICBjb25zdCBfc3NsQ2VydCA9IG5ldyBTU0xDZXJ0aWZpY2F0ZSh0aGlzLCAnU1NMQ2VydGlmaWNhdGUnLCB7XG4gICAgICBob3N0ZWRab25lOiBob3N0ZWRab25lLFxuICAgICAgZG9tYWluTmFtZTogcHJvcHMuZG9tYWluTmFtZSxcbiAgICAgIGRlc3Ryb3k6IHByb3BzLmRlc3Ryb3lcbiAgICB9KTtcbiAgICB0aGlzLnNzbENlcnRpZmljYXRlID0gX3NzbENlcnQuY2VydGlmaWNhdGU7XG5cbiAgICBjb25zdCBfczNCdWNrZXQgPSBuZXcgUzNCdWNrZXQodGhpcywgJ1MzQnVja2V0Jywge1xuICAgICAgYnVja2V0TmFtZTogcHJvcHMuYnVja2V0TmFtZSA/PyBQaHlzaWNhbE5hbWUuR0VORVJBVEVfSUZfTkVFREVELFxuICAgICAgZGVzdHJveTogcHJvcHMuZGVzdHJveVxuICAgIH0pO1xuICAgIHRoaXMuczNCdWNrZXQgPSBfczNCdWNrZXQuYnVja2V0O1xuXG4gICAgbGV0IHJlc3BvbnNlSGVhZGVyc1BvbGljeTogSVJlc3BvbnNlSGVhZGVyc1BvbGljeSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocHJvcHMucmVzcG9uc2VIZWFkZXJzUG9saWN5KSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BzLnJlc3BvbnNlSGVhZGVyc1BvbGljeSA9PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoL15bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kL2kudGVzdChwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3kpKSB7XG4gICAgICAgICAgcmVzcG9uc2VIZWFkZXJzUG9saWN5ID0gUmVzcG9uc2VIZWFkZXJzUG9saWN5LmZyb21SZXNwb25zZUhlYWRlcnNQb2xpY3lJZCh0aGlzLCAncmVzcG9uc2UtaGVhZGVycy1wb2xpY3ktYnktaWQnLCBwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3kpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3BvbnNlSGVhZGVyc1BvbGljeSA9IFJlc3BvbnNlSGVhZGVyc1BvbGljeVtwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3kgYXMga2V5b2YgdHlwZW9mIFJlc3BvbnNlSGVhZGVyc1BvbGljeV0gYXMgSVJlc3BvbnNlSGVhZGVyc1BvbGljeSA/PyBSZXNwb25zZUhlYWRlcnNQb2xpY3kuU0VDVVJJVFlfSEVBREVSUztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3kucGF0aCkge1xuICAgICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3kgPSBSZXNwb25zZUhlYWRlcnNQb2xpY3kuZnJvbVJlc3BvbnNlSGVhZGVyc1BvbGljeUlkKHRoaXMsICdyZXNwb25zZS1oZWFkZXJzLXBvbGljeS1ieS1pZCcsIFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCBwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3kucGF0aCwgcHJvcHMucmVzcG9uc2VIZWFkZXJzUG9saWN5LnZlcnNpb24pKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYmFzZUhlYWRlcnNCZWhhdmlvcjogUmVzcG9uc2VTZWN1cml0eUhlYWRlcnNCZWhhdmlvciA9IHtcbiAgICAgICAgc3RyaWN0VHJhbnNwb3J0U2VjdXJpdHk6IHtcbiAgICAgICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICAgICAgICBhY2Nlc3NDb250cm9sTWF4QWdlOiBEdXJhdGlvbi5zZWNvbmRzKDMxNTM2MDAwKVxuICAgICAgICB9LFxuICAgICAgICBjb250ZW50VHlwZU9wdGlvbnM6IHtcbiAgICAgICAgICBvdmVycmlkZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBmcmFtZU9wdGlvbnM6IHtcbiAgICAgICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICAgICAgICBmcmFtZU9wdGlvbjogSGVhZGVyc0ZyYW1lT3B0aW9uLlNBTUVPUklHSU4sXG4gICAgICAgIH0sXG4gICAgICAgIHJlZmVycmVyUG9saWN5OiB7XG4gICAgICAgICAgb3ZlcnJpZGU6IHRydWUsXG4gICAgICAgICAgcmVmZXJyZXJQb2xpY3k6IEhlYWRlcnNSZWZlcnJlclBvbGljeS5TVFJJQ1RfT1JJR0lOX1dIRU5fQ1JPU1NfT1JJR0lOXG4gICAgICAgIH0sXG4gICAgICAgIHhzc1Byb3RlY3Rpb246IHtcbiAgICAgICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICAgICAgICBwcm90ZWN0aW9uOiB0cnVlLFxuICAgICAgICAgIG1vZGVCbG9jazogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXNwb25zZUhlYWRlcnNQb2xpY3lOYW1lID0gYCR7ZG9tYWluQXNJZChwcm9wcy5kb21haW5OYW1lKX0tcmVzcG9uc2UtaGVhZGVycy1wb2xpY3lgO1xuICAgICAgXG4gICAgICBpZiAocHJvcHMucmVzcG9uc2VIZWFkZXJzUG9saWN5UHJvcHMpIHtcbiAgICAgICAgcmVzcG9uc2VIZWFkZXJzUG9saWN5ID0gbmV3IFJlc3BvbnNlSGVhZGVyc1BvbGljeSh0aGlzLCAncmVzcG9uc2UtaGVhZGVycy1wb2xpY3knLCB7XG4gICAgICAgICAgLi4uYmFzZUhlYWRlcnNCZWhhdmlvcixcbiAgICAgICAgICAuLi5wcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3lQcm9wcyxcbiAgICAgICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3lOYW1lOiBwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3lQcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3lOYW1lIHx8IHJlc3BvbnNlSGVhZGVyc1BvbGljeU5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHByb3BzLnJlc3BvbnNlQ3NwSGVhZGVycykge1xuICAgICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3kgPSBuZXcgUmVzcG9uc2VIZWFkZXJzUG9saWN5KHRoaXMsICdyZXNwb25zZS1oZWFkZXJzLXBvbGljeScsIHtcbiAgICAgICAgICBzZWN1cml0eUhlYWRlcnNCZWhhdmlvcjoge1xuICAgICAgICAgICAgLi4uYmFzZUhlYWRlcnNCZWhhdmlvcixcbiAgICAgICAgICAgIGNvbnRlbnRTZWN1cml0eVBvbGljeToge1xuICAgICAgICAgICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICAgICAgICAgICAgY29udGVudFNlY3VyaXR5UG9saWN5OiBPYmplY3QuZW50cmllcyhwcm9wcy5yZXNwb25zZUNzcEhlYWRlcnMpLm1hcCgoW2RpcmVjdGl2ZSwgdmFsdWVzXSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHtkaXJlY3RpdmV9ICR7dmFsdWVzLmpvaW4oJyAnKX07YFxuICAgICAgICAgICAgICB9KS5qb2luKCcgJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3lOYW1lXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVyc1BvbGljeSA9IHJlc3BvbnNlSGVhZGVyc1BvbGljeTtcblxuICAgIGNvbnN0IGRlZmF1bHRCZWhhdmlvcjogQmVoYXZpb3JPcHRpb25zID0ge1xuICAgICAgb3JpZ2luOiBTM0J1Y2tldE9yaWdpbi53aXRoT3JpZ2luQWNjZXNzQ29udHJvbCh0aGlzLnMzQnVja2V0KSxcbiAgICAgIGZ1bmN0aW9uQXNzb2NpYXRpb25zOiBbXSxcbiAgICAgIHJlc3BvbnNlSGVhZGVyc1BvbGljeTogcmVzcG9uc2VIZWFkZXJzUG9saWN5ID8/IHByb3BzLnJlc3BvbnNlSGVhZGVyc1BvbGljeSAhPT0gZmFsc2UgPyBSZXNwb25zZUhlYWRlcnNQb2xpY3kuU0VDVVJJVFlfSEVBREVSUyA6IHVuZGVmaW5lZFxuICAgIH07XG5cbiAgICBsZXQgY2ZmbjogQ2xvdWRGcm9udEZ1bmN0aW9uO1xuICAgIGlmIChwcm9wcy5iYXNpY0F1dGgpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMuYmFzaWNBdXRoICE9ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICgocHJvcHMuYmFzaWNBdXRoIGFzIEJhc2ljQXV0aENyZWRlbnRpYWxzKS51c2VyICYmIChwcm9wcy5iYXNpY0F1dGggYXMgQmFzaWNBdXRoQ3JlZGVudGlhbHMpLnBhc3N3b3JkKSB7XG4gICAgICAgICAgcHJvcHMuYmFzaWNBdXRoID0gQnVmZmVyLmZyb20oYCR7KHByb3BzLmJhc2ljQXV0aCBhcyBCYXNpY0F1dGhDcmVkZW50aWFscykudXNlcn06JHsocHJvcHMuYmFzaWNBdXRoIGFzIEJhc2ljQXV0aENyZWRlbnRpYWxzKS5wYXNzd29yZH1gKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAoKHByb3BzLmJhc2ljQXV0aCBhcyBTc21TdHJpbmdQYXJhbWV0ZXIpLnBhdGgpIHtcbiAgICAgICAgICBwcm9wcy5iYXNpY0F1dGggPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIodGhpcywgKHByb3BzLmJhc2ljQXV0aCBhcyBTc21TdHJpbmdQYXJhbWV0ZXIpLnBhdGgsIChwcm9wcy5iYXNpY0F1dGggYXMgU3NtU3RyaW5nUGFyYW1ldGVyKS52ZXJzaW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wcy5iYXNpY0F1dGggPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmNsb3VkZnJvbnRGdW5jdGlvbikge1xuICAgICAgY2ZmbiA9IENsb3VkRnJvbnRGdW5jdGlvbi5jcmVhdGVGdW5jdGlvbih0aGlzLCBudWxsLCB7XG4gICAgICAgIGNyZWRlbnRpYWxzOiBwcm9wcy5iYXNpY0F1dGgsXG4gICAgICAgIHJlZGlyZWN0czogcHJvcHMucmVkaXJlY3RzLFxuICAgICAgICByZWRpcmVjdHNDc3ZQYXRoOiBwcm9wcy5yZWRpcmVjdHNDc3ZQYXRoLFxuICAgICAgICBjb2RlOiBwcm9wcy5jbG91ZGZyb250RnVuY3Rpb24uY29kZSxcbiAgICAgICAgZGVzdHJveTogcHJvcHMuZGVzdHJveVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5iYXNpY0F1dGgpIHtcbiAgICAgIGNmZm4gPSBDbG91ZEZyb250RnVuY3Rpb24uY3JlYXRlQmFzaWNBdXRoRGVmYXVsdERvYyh0aGlzLCB7XG4gICAgICAgIGNyZWRlbnRpYWxzOiBwcm9wcy5iYXNpY0F1dGgsXG4gICAgICAgIHJlZGlyZWN0czogcHJvcHMucmVkaXJlY3RzLFxuICAgICAgICByZWRpcmVjdHNDc3ZQYXRoOiBwcm9wcy5yZWRpcmVjdHNDc3ZQYXRoLFxuICAgICAgICBkZXN0cm95OiBwcm9wcy5kZXN0cm95XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2ZmbiA9IENsb3VkRnJvbnRGdW5jdGlvbi5jcmVhdGVEZWZhdWx0RG9jKHRoaXMsIHtcbiAgICAgICAgcmVkaXJlY3RzOiBwcm9wcy5yZWRpcmVjdHMsXG4gICAgICAgIHJlZGlyZWN0c0NzdlBhdGg6IHByb3BzLnJlZGlyZWN0c0NzdlBhdGgsXG4gICAgICAgIGRlc3Ryb3k6IHByb3BzLmRlc3Ryb3lcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmNsb3VkRnJvbnRGdW5jdGlvbiA9IGNmZm4uZm47XG5cbiAgICAvLyBjb25zdCBldmVudFR5cGVzOiBDbG91ZEZyb250RnVuY3Rpb25FdmVudFR5cGVbXSA9IHByb3BzLmNsb3VkZnJvbnRGdW5jdGlvbj8uZXZlbnRUeXBlICYmIHByb3BzLmNsb3VkZnJvbnRGdW5jdGlvbi5ldmVudFR5cGUubGVuZ3RoID4gMCA/IHByb3BzLmNsb3VkZnJvbnRGdW5jdGlvbi5ldmVudFR5cGUgOiBbJ1ZJRVdFUl9SRVFVRVNUJywgJ1ZJRVdFUl9SRVNQT05TRSddO1xuXG4gICAgbGV0IGV2ZW50VHlwZXM6IENsb3VkRnJvbnRGdW5jdGlvbkV2ZW50VHlwZVtdID0gWydWSUVXRVJfUkVRVUVTVCcsICdWSUVXRVJfUkVTUE9OU0UnXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wcy5jbG91ZGZyb250RnVuY3Rpb24/LmV2ZW50VHlwZSkgJiYgcHJvcHMuY2xvdWRmcm9udEZ1bmN0aW9uLmV2ZW50VHlwZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBldHMgPSBwcm9wcy5jbG91ZGZyb250RnVuY3Rpb24uZXZlbnRUeXBlXG4gICAgICAgIC5maWx0ZXIoKHYsIGksIGEpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdHlwZW9mIHYgPT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICh2ID09PSAnVklFV0VSX1JFUVVFU1QnIHx8IHYgPT09ICdWSUVXRVJfUkVTUE9OU0UnKSAmJlxuICAgICAgICAgICAgYS5pbmRleE9mKHYpID09PSBpIC8vIGRlZHVwXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICBpZiAoZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXZlbnRUeXBlcyA9IGV0cztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGV2ZW50VHlwZSBvZiBldmVudFR5cGVzKSB7XG4gICAgICBkZWZhdWx0QmVoYXZpb3IuZnVuY3Rpb25Bc3NvY2lhdGlvbnMhLnB1c2goe1xuICAgICAgICBldmVudFR5cGU6IEZ1bmN0aW9uRXZlbnRUeXBlW2V2ZW50VHlwZV0sXG4gICAgICAgIGZ1bmN0aW9uOiB0aGlzLmNsb3VkRnJvbnRGdW5jdGlvblxuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIGxldCB3ZWJBY2xJZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlb2YgcHJvcHMud2ViQWNsID09ICdzdHJpbmcnICYmIHByb3BzLndlYkFjbC5zdGFydHNXaXRoKCdhcm46YXdzJykpIHtcbiAgICAgIHdlYkFjbElkID0gcHJvcHMud2ViQWNsO1xuICAgIH0gZWxzZSBpZiAoKHByb3BzLndlYkFjbCBhcyBTc21TdHJpbmdQYXJhbWV0ZXIpLnBhdGgpIHtcbiAgICAgIHdlYkFjbElkID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKHRoaXMsIChwcm9wcy53ZWJBY2wgYXMgU3NtU3RyaW5nUGFyYW1ldGVyKS5wYXRoLCAocHJvcHMud2ViQWNsIGFzIFNzbVN0cmluZ1BhcmFtZXRlcikudmVyc2lvbik7XG4gICAgfSBlbHNlIGlmIChwcm9wcy53ZWJBY2wgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IHdhZiA9IG5ldyBDbG91ZEZyb250V2ViQWNsKHRoaXMsICdDbG91ZEZyb250V2ViQWNsJywge1xuICAgICAgICBuYW1lOiBgJHtkb21haW5Bc0lkKHByb3BzLmRvbWFpbk5hbWUpfWAsXG4gICAgICAgIGRlc3Ryb3k6IHByb3BzLmRlc3Ryb3lcbiAgICAgIH0pO1xuICAgICAgdGhpcy53ZWJBY2wgPSB3YWYuYWNsO1xuICAgICAgd2ViQWNsSWQgPSB3YWYuYWNsLmF0dHJBcm47XG4gICAgfVxuXG4gICAgY29uc3QgY2ZEaXN0cmlidXRpb24gPSBuZXcgQ2xvdWRGcm9udERpc3RyaWJ1dGlvbih0aGlzLCAnQ2xvdWRGcm9udERpc3RyaWJ1dGlvbicsIHtcbiAgICAgIGRvbWFpbk5hbWU6IHByb3BzLmRvbWFpbk5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24gPz8gcHJvcHMuZG9tYWluTmFtZSxcbiAgICAgIHByaWNlQ2xhc3M6IHByb3BzLmVudlR5cGUsXG4gICAgICBjZXJ0aWZpY2F0ZTogdGhpcy5zc2xDZXJ0aWZpY2F0ZSxcbiAgICAgIGRlZmF1bHRCZWhhdmlvcixcbiAgICAgIHdlYkFjbElkXG4gICAgfSk7XG4gICAgdGhpcy5jbG91ZEZyb250RGlzdHJpYnV0aW9uID0gY2ZEaXN0cmlidXRpb24uZGlzdHJpYnV0aW9uO1xuXG4gICAgY29uc3QgY2ZBbGlhcyA9IG5ldyBDbG91ZEZyb250QWxpYXModGhpcywgJ0Nsb3VkRnJvbnRBbGlhcycsIHtcbiAgICAgIGRpc3RyaWJ1dGlvbjogY2ZEaXN0cmlidXRpb24uZGlzdHJpYnV0aW9uLFxuICAgICAgZG9tYWluTmFtZTogcHJvcHMuZG9tYWluTmFtZSxcbiAgICAgIGhvc3RlZFpvbmU6IGhvc3RlZFpvbmVcbiAgICB9KTtcbiAgICB0aGlzLmFSZWNvcmQgPSBjZkFsaWFzLmFSZWNvcmQ7XG4gICAgdGhpcy5hYWFhUmVjb3JkID0gY2ZBbGlhcy5hYWFhUmVjb3JkO1xuICB9XG59Il19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inizioevoke/evosynth",
3
- "version": "1.8.0",
3
+ "version": "1.8.1",
4
4
  "author": "",
5
5
  "license": "ISC",
6
6
  "description": "",
@@ -45,7 +45,7 @@ export interface WebGlobalStackProps {
45
45
  redirectsCsvPath?: string;
46
46
  // attachWebAcl?: boolean | string;
47
47
  webAcl?: boolean | string | SsmStringParameter;
48
- responseHeadersPolicy?: false | AWSManagedResponseHeadersPolicy | 'NONE' | UUID | SsmStringParameter;
48
+ responseHeadersPolicy?: false | AWSManagedResponseHeadersPolicy | UUID | SsmStringParameter;
49
49
  responseHeadersPolicyProps?: ResponseHeadersPolicyProps;
50
50
  responseCspHeaders?: CspHeaders;
51
51
  destroy?: boolean;
@@ -82,69 +82,64 @@ export class WebGlobalStack extends Stack {
82
82
  this.s3Bucket = _s3Bucket.bucket;
83
83
 
84
84
  let responseHeadersPolicy: IResponseHeadersPolicy | undefined = undefined;
85
- if (props.responseHeadersPolicy !== 'NONE') { // I don't know why you would want to not have the policy but just in case
86
- if (props.responseHeadersPolicy) {
87
- if (typeof props.responseHeadersPolicy == 'string') {
88
- if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(props.responseHeadersPolicy)) {
89
- responseHeadersPolicy = ResponseHeadersPolicy.fromResponseHeadersPolicyId(this, 'response-headers-policy-by-id', props.responseHeadersPolicy);
90
- } else {
91
- responseHeadersPolicy = ResponseHeadersPolicy[props.responseHeadersPolicy as keyof typeof ResponseHeadersPolicy] as IResponseHeadersPolicy ?? ResponseHeadersPolicy.SECURITY_HEADERS;
92
- }
93
- } else if (props.responseHeadersPolicy.path) {
94
- responseHeadersPolicy = ResponseHeadersPolicy.fromResponseHeadersPolicyId(this, 'response-headers-policy-by-id', StringParameter.valueForStringParameter(this, props.responseHeadersPolicy.path, props.responseHeadersPolicy.version));
85
+ if (props.responseHeadersPolicy) {
86
+ if (typeof props.responseHeadersPolicy == 'string') {
87
+ if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(props.responseHeadersPolicy)) {
88
+ responseHeadersPolicy = ResponseHeadersPolicy.fromResponseHeadersPolicyId(this, 'response-headers-policy-by-id', props.responseHeadersPolicy);
89
+ } else {
90
+ responseHeadersPolicy = ResponseHeadersPolicy[props.responseHeadersPolicy as keyof typeof ResponseHeadersPolicy] as IResponseHeadersPolicy ?? ResponseHeadersPolicy.SECURITY_HEADERS;
95
91
  }
92
+ } else if (props.responseHeadersPolicy.path) {
93
+ responseHeadersPolicy = ResponseHeadersPolicy.fromResponseHeadersPolicyId(this, 'response-headers-policy-by-id', StringParameter.valueForStringParameter(this, props.responseHeadersPolicy.path, props.responseHeadersPolicy.version));
96
94
  }
97
- if (!responseHeadersPolicy) {
98
- // const baseHeadersBehavior: ResponseSecurityHeadersBehavior = {
99
- // strictTransportSecurity: {
100
- // override: true,
101
- // accessControlMaxAge: Duration.seconds(31536000)
102
- // },
103
- // contentTypeOptions: {
104
- // override: true
105
- // },
106
- // frameOptions: {
107
- // override: true,
108
- // frameOption: HeadersFrameOption.SAMEORIGIN,
109
- // },
110
- // referrerPolicy: {
111
- // override: true,
112
- // referrerPolicy: HeadersReferrerPolicy.STRICT_ORIGIN_WHEN_CROSS_ORIGIN
113
- // },
114
- // xssProtection: {
115
- // override: true,
116
- // protection: true,
117
- // modeBlock: true
118
- // }
119
- // };
120
-
121
- const responseHeadersPolicyName = `${domainAsId(props.domainName)}-response-headers-policy`;
122
-
123
- if (props.responseHeadersPolicyProps) {
124
- responseHeadersPolicy = new ResponseHeadersPolicy(this, 'response-headers-policy', {
125
- ...ResponseHeadersPolicy.SECURITY_HEADERS,
126
- ...props.responseHeadersPolicyProps,
127
- responseHeadersPolicyName: props.responseHeadersPolicyProps.responseHeadersPolicyName || responseHeadersPolicyName
128
- });
129
- } else if (props.responseCspHeaders) {
130
- responseHeadersPolicy = new ResponseHeadersPolicy(this, 'response-headers-policy', {
131
- securityHeadersBehavior: {
132
- ...ResponseHeadersPolicy.SECURITY_HEADERS,
133
- contentSecurityPolicy: {
134
- override: true,
135
- contentSecurityPolicy: Object.entries(props.responseCspHeaders).map(([directive, values]) => {
136
- return `${directive} ${values.join(' ')};`
137
- }).join(' ')
138
- },
139
- },
140
- responseHeadersPolicyName
141
- });
142
- } else {
143
- responseHeadersPolicy = ResponseHeadersPolicy.SECURITY_HEADERS;
95
+ } else {
96
+ const baseHeadersBehavior: ResponseSecurityHeadersBehavior = {
97
+ strictTransportSecurity: {
98
+ override: true,
99
+ accessControlMaxAge: Duration.seconds(31536000)
100
+ },
101
+ contentTypeOptions: {
102
+ override: true
103
+ },
104
+ frameOptions: {
105
+ override: true,
106
+ frameOption: HeadersFrameOption.SAMEORIGIN,
107
+ },
108
+ referrerPolicy: {
109
+ override: true,
110
+ referrerPolicy: HeadersReferrerPolicy.STRICT_ORIGIN_WHEN_CROSS_ORIGIN
111
+ },
112
+ xssProtection: {
113
+ override: true,
114
+ protection: true,
115
+ modeBlock: true
144
116
  }
117
+ };
118
+
119
+ const responseHeadersPolicyName = `${domainAsId(props.domainName)}-response-headers-policy`;
120
+
121
+ if (props.responseHeadersPolicyProps) {
122
+ responseHeadersPolicy = new ResponseHeadersPolicy(this, 'response-headers-policy', {
123
+ ...baseHeadersBehavior,
124
+ ...props.responseHeadersPolicyProps,
125
+ responseHeadersPolicyName: props.responseHeadersPolicyProps.responseHeadersPolicyName || responseHeadersPolicyName
126
+ });
127
+ } else if (props.responseCspHeaders) {
128
+ responseHeadersPolicy = new ResponseHeadersPolicy(this, 'response-headers-policy', {
129
+ securityHeadersBehavior: {
130
+ ...baseHeadersBehavior,
131
+ contentSecurityPolicy: {
132
+ override: true,
133
+ contentSecurityPolicy: Object.entries(props.responseCspHeaders).map(([directive, values]) => {
134
+ return `${directive} ${values.join(' ')};`
135
+ }).join(' ')
136
+ },
137
+ },
138
+ responseHeadersPolicyName
139
+ });
145
140
  }
146
- this.responseHeadersPolicy = responseHeadersPolicy;
147
141
  }
142
+ this.responseHeadersPolicy = responseHeadersPolicy;
148
143
 
149
144
  const defaultBehavior: BehaviorOptions = {
150
145
  origin: S3BucketOrigin.withOriginAccessControl(this.s3Bucket),