cdk-simplewebsite-deploy 2.1.10 → 2.2.0

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/.tool-versions CHANGED
@@ -1 +1,4 @@
1
1
  python 3.13.1t
2
+ nodejs 24.14.1
3
+ maven 3.9.14
4
+ java corretto-21.0.7.6.1
package/API.md CHANGED
@@ -47,7 +47,7 @@ new CreateBasicSite(scope: Construct, id: string, props: BasicSiteConfiguration)
47
47
 
48
48
  ---
49
49
 
50
- ##### `toString` <a name="toString" id="cdk-simplewebsite-deploy.CreateBasicSite.toString"></a>
50
+ ##### ~~`toString`~~ <a name="toString" id="cdk-simplewebsite-deploy.CreateBasicSite.toString"></a>
51
51
 
52
52
  ```typescript
53
53
  public toString(): string
@@ -55,7 +55,7 @@ public toString(): string
55
55
 
56
56
  Returns a string representation of this construct.
57
57
 
58
- ##### `with` <a name="with" id="cdk-simplewebsite-deploy.CreateBasicSite.with"></a>
58
+ ##### ~~`with`~~ <a name="with" id="cdk-simplewebsite-deploy.CreateBasicSite.with"></a>
59
59
 
60
60
  ```typescript
61
61
  public with(mixins: ...IMixin[]): IConstruct
@@ -84,7 +84,7 @@ The mixins to apply.
84
84
 
85
85
  ---
86
86
 
87
- ##### `isConstruct` <a name="isConstruct" id="cdk-simplewebsite-deploy.CreateBasicSite.isConstruct"></a>
87
+ ##### ~~`isConstruct`~~ <a name="isConstruct" id="cdk-simplewebsite-deploy.CreateBasicSite.isConstruct"></a>
88
88
 
89
89
  ```typescript
90
90
  import { CreateBasicSite } from 'cdk-simplewebsite-deploy'
@@ -124,7 +124,9 @@ Any object.
124
124
 
125
125
  ---
126
126
 
127
- ##### `node`<sup>Required</sup> <a name="node" id="cdk-simplewebsite-deploy.CreateBasicSite.property.node"></a>
127
+ ##### ~~`node`~~<sup>Required</sup> <a name="node" id="cdk-simplewebsite-deploy.CreateBasicSite.property.node"></a>
128
+
129
+ - *Deprecated:* Use CreateCloudfrontSite instead. CreateBasicSite configures a public S3 website endpoint.
128
130
 
129
131
  ```typescript
130
132
  public readonly node: Node;
@@ -368,7 +370,9 @@ const cloudfrontSiteConfiguration: CloudfrontSiteConfiguration = { ... }
368
370
  | <code><a href="#cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.enableLogging">enableLogging</a></code> | <code>boolean</code> | Enable CloudFront access logging. |
369
371
  | <code><a href="#cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.enableSecurityHeaders">enableSecurityHeaders</a></code> | <code>boolean</code> | Enable response headers policy for security headers. |
370
372
  | <code><a href="#cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.errorDoc">errorDoc</a></code> | <code>string</code> | The error document of the website. |
373
+ | <code><a href="#cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.functionAssociations">functionAssociations</a></code> | <code>aws-cdk-lib.aws_cloudfront.FunctionAssociation[]</code> | CloudFront Functions to associate with the default behavior. |
371
374
  | <code><a href="#cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.logsBucket">logsBucket</a></code> | <code>aws-cdk-lib.aws_s3.IBucket</code> | S3 bucket for CloudFront access logs. |
375
+ | <code><a href="#cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.originAccessLevels">originAccessLevels</a></code> | <code>aws-cdk-lib.aws_cloudfront.AccessLevel[]</code> | Additional permissions granted to the CloudFront Origin Access Control for the website bucket. |
372
376
  | <code><a href="#cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.priceClass">priceClass</a></code> | <code>aws-cdk-lib.aws_cloudfront.PriceClass</code> | The price class determines how many edge locations CloudFront will use for your distribution. |
373
377
  | <code><a href="#cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.subDomain">subDomain</a></code> | <code>string</code> | The subdomain name you want to deploy. |
374
378
  | <code><a href="#cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.webAclId">webAclId</a></code> | <code>string</code> | Optional WAF Web ACL ARN for enhanced security. |
@@ -506,6 +510,19 @@ The error document of the website.
506
510
 
507
511
  ---
508
512
 
513
+ ##### `functionAssociations`<sup>Optional</sup> <a name="functionAssociations" id="cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.functionAssociations"></a>
514
+
515
+ ```typescript
516
+ public readonly functionAssociations: FunctionAssociation[];
517
+ ```
518
+
519
+ - *Type:* aws-cdk-lib.aws_cloudfront.FunctionAssociation[]
520
+ - *Default:* No CloudFront Function associations.
521
+
522
+ CloudFront Functions to associate with the default behavior.
523
+
524
+ ---
525
+
509
526
  ##### `logsBucket`<sup>Optional</sup> <a name="logsBucket" id="cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.logsBucket"></a>
510
527
 
511
528
  ```typescript
@@ -521,6 +538,19 @@ If not provided and logging is enabled, a new bucket will be created.
521
538
 
522
539
  ---
523
540
 
541
+ ##### `originAccessLevels`<sup>Optional</sup> <a name="originAccessLevels" id="cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.originAccessLevels"></a>
542
+
543
+ ```typescript
544
+ public readonly originAccessLevels: AccessLevel[];
545
+ ```
546
+
547
+ - *Type:* aws-cdk-lib.aws_cloudfront.AccessLevel[]
548
+ - *Default:* [cloudfront.AccessLevel.READ]
549
+
550
+ Additional permissions granted to the CloudFront Origin Access Control for the website bucket.
551
+
552
+ ---
553
+
524
554
  ##### `priceClass`<sup>Optional</sup> <a name="priceClass" id="cdk-simplewebsite-deploy.CloudfrontSiteConfiguration.property.priceClass"></a>
525
555
 
526
556
  ```typescript
package/README.md CHANGED
@@ -3,29 +3,30 @@
3
3
  ![Release](https://github.com/SnapPetal/cdk-simplewebsite-deploy/workflows/release/badge.svg?branch=main)
4
4
 
5
5
  # cdk-simplewebsite-deploy
6
- This is an AWS CDK Construct to simplify deploying a single-page website using either S3 buckets or CloudFront distributions with enhanced security, performance, and monitoring capabilities.
6
+ This is an AWS CDK v2 construct library for deploying a single-page website with S3, CloudFront, Route 53, and ACM. `CreateCloudfrontSite` is the recommended construct because it uses a private S3 origin with CloudFront Origin Access Control (OAC), while `CreateBasicSite` is deprecated because it creates a public S3 website endpoint.
7
7
 
8
8
  ## Installation and Usage
9
9
 
10
- ### [CreateBasicSite](https://github.com/snappetal/cdk-simplewebsite-deploy/blob/main/API.md#cdk-cloudfront-deploy-createbasicsite)
11
- #### Creates a simple website using S3 buckets with a domain hosted in Route 53.
10
+ ### [CreateCloudfrontSite](https://github.com/snappetal/cdk-simplewebsite-deploy/blob/main/API.md#cdk-cloudfront-deploy-createcloudfrontsite)
11
+ #### Creates a website using a private S3 bucket, a CloudFront distribution, and DNS records in Route 53.
12
12
  ##### Typescript
13
13
  ```console
14
14
  yarn add cdk-simplewebsite-deploy
15
15
  ```
16
16
  ```typescript
17
17
  import * as cdk from 'aws-cdk-lib';
18
- import { CreateBasicSite } from 'cdk-simplewebsite-deploy';
18
+ import { CreateCloudfrontSite } from 'cdk-simplewebsite-deploy';
19
19
  import { Construct } from 'constructs';
20
20
 
21
21
  export class PipelineStack extends cdk.Stack {
22
22
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
23
23
  super(scope, id, props);
24
24
 
25
- new CreateBasicSite(this, 'test-website', {
26
- websiteFolder: './src/build',
25
+ new CreateCloudfrontSite(this, 'test-website', {
26
+ websiteFolder: './src/dist',
27
27
  indexDoc: 'index.html',
28
28
  hostedZone: 'example.com',
29
+ subDomain: 'www.example.com',
29
30
  });
30
31
  }
31
32
  }
@@ -36,6 +37,7 @@ dotnet add package ThonBecker.CDK.SimpleWebsiteDeploy
36
37
  ```
37
38
  ```cs
38
39
  using Amazon.CDK;
40
+ using Constructs;
39
41
  using ThonBecker.CDK.SimpleWebsiteDeploy;
40
42
 
41
43
  namespace SimpleWebsiteDeploy
@@ -44,11 +46,12 @@ namespace SimpleWebsiteDeploy
44
46
  {
45
47
  internal PipelineStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
46
48
  {
47
- new CreateBasicSite(scope, "test-website", new BasicSiteConfiguration()
49
+ new CreateCloudfrontSite(scope, "test-website", new CloudfrontSiteConfiguration()
48
50
  {
49
51
  WebsiteFolder = "./src/build",
50
52
  IndexDoc = "index.html",
51
53
  HostedZone = "example.com",
54
+ SubDomain = "www.example.com",
52
55
  });
53
56
  }
54
57
  }
@@ -65,10 +68,10 @@ namespace SimpleWebsiteDeploy
65
68
  ```java
66
69
  package com.myorg;
67
70
 
68
- import software.amazon.awscdk.core.Construct;
69
- import software.amazon.awscdk.core.Stack;
70
- import software.amazon.awscdk.core.StackProps;
71
- import com.thonbecker.simplewebsitedeploy.CreateBasicSite;
71
+ import com.thonbecker.simplewebsitedeploy.CreateCloudfrontSite;
72
+ import software.amazon.awscdk.Stack;
73
+ import software.amazon.awscdk.StackProps;
74
+ import software.constructs.Construct;
72
75
 
73
76
  public class MyProjectStack extends Stack {
74
77
  public MyProjectStack(final Construct scope, final String id) {
@@ -77,11 +80,13 @@ public class MyProjectStack extends Stack {
77
80
 
78
81
  public MyProjectStack(final Construct scope, final String id, final StackProps props) {
79
82
  super(scope, id, props);
80
-
81
- CreateBasicSite.Builder.create(this, "test-website")
82
- .websiteFolder("./src/build")
83
- .indexDoc("index.html")
84
- .hostedZone("example.com");
83
+
84
+ CreateCloudfrontSite.Builder.create(this, "test-website")
85
+ .websiteFolder("./src/build")
86
+ .indexDoc("index.html")
87
+ .hostedZone("example.com")
88
+ .subDomain("www.example.com")
89
+ .build();
85
90
  }
86
91
  }
87
92
  ```
@@ -91,38 +96,41 @@ pip install cdk-simplewebsite-deploy
91
96
  ```
92
97
  ```python
93
98
  from aws_cdk import Stack
94
- from cdk_simplewebsite_deploy import CreateBasicSite
99
+ from cdk_simplewebsite_deploy import CreateCloudfrontSite
95
100
  from constructs import Construct
96
101
 
102
+
97
103
  class MyProjectStack(Stack):
98
104
 
99
105
  def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
100
106
  super().__init__(scope, construct_id, **kwargs)
101
-
102
- CreateBasicSite(self, 'test-website', website_folder='./src/build',
103
- index_doc='index.html',
104
- hosted_zone='example.com')
107
+
108
+ CreateCloudfrontSite(self, 'test-website', website_folder='./src/build',
109
+ index_doc='index.html',
110
+ hosted_zone='example.com',
111
+ sub_domain='www.example.com')
105
112
  ```
106
- ### [CreateCloudfrontSite](https://github.com/snappetal/cdk-simplewebsite-deploy/blob/main/API.md#cdk-cloudfront-deploy-createcloudfrontsite)
107
- #### Creates a simple website using a CloudFront distribution with a domain hosted in Route 53.
113
+
114
+ ### [CreateBasicSite](https://github.com/snappetal/cdk-simplewebsite-deploy/blob/main/API.md#cdk-cloudfront-deploy-createbasicsite)
115
+ #### Deprecated. Creates a website using public S3 website endpoints with a domain hosted in Route 53.
116
+ Use `CreateCloudfrontSite` for new sites. `CreateBasicSite` configures public bucket access so Route 53 can alias directly to the S3 website endpoint.
108
117
  ##### Typescript
109
118
  ```console
110
119
  yarn add cdk-simplewebsite-deploy
111
120
  ```
112
121
  ```typescript
113
122
  import * as cdk from 'aws-cdk-lib';
114
- import { CreateCloudfrontSite } from 'cdk-simplewebsite-deploy';
123
+ import { CreateBasicSite } from 'cdk-simplewebsite-deploy';
115
124
  import { Construct } from 'constructs';
116
125
 
117
126
  export class PipelineStack extends cdk.Stack {
118
127
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
119
128
  super(scope, id, props);
120
129
 
121
- new CreateCloudfrontSite(this, 'test-website', {
122
- websiteFolder: './src/dist',
130
+ new CreateBasicSite(this, 'test-website', {
131
+ websiteFolder: './src/build',
123
132
  indexDoc: 'index.html',
124
133
  hostedZone: 'example.com',
125
- subDomain: 'www.example.com',
126
134
  });
127
135
  }
128
136
  }
@@ -133,6 +141,7 @@ dotnet add package ThonBecker.CDK.SimpleWebsiteDeploy
133
141
  ```
134
142
  ```cs
135
143
  using Amazon.CDK;
144
+ using Constructs;
136
145
  using ThonBecker.CDK.SimpleWebsiteDeploy;
137
146
 
138
147
  namespace SimpleWebsiteDeploy
@@ -141,12 +150,11 @@ namespace SimpleWebsiteDeploy
141
150
  {
142
151
  internal PipelineStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
143
152
  {
144
- new CreateCloudfrontSite(scope, "test-website", new CloudfrontSiteConfiguration()
153
+ new CreateBasicSite(scope, "test-website", new BasicSiteConfiguration()
145
154
  {
146
155
  WebsiteFolder = "./src/build",
147
156
  IndexDoc = "index.html",
148
157
  HostedZone = "example.com",
149
- SubDomain = "www.example.com",
150
158
  });
151
159
  }
152
160
  }
@@ -163,10 +171,10 @@ namespace SimpleWebsiteDeploy
163
171
  ```java
164
172
  package com.myorg;
165
173
 
166
- import software.amazon.awscdk.core.Construct;
167
- import software.amazon.awscdk.core.Stack;
168
- import software.amazon.awscdk.core.StackProps;
169
- import com.thonbecker.simplewebsitedeploy.CreateCloudfrontSite;
174
+ import com.thonbecker.simplewebsitedeploy.CreateBasicSite;
175
+ import software.amazon.awscdk.Stack;
176
+ import software.amazon.awscdk.StackProps;
177
+ import software.constructs.Construct;
170
178
 
171
179
  public class MyProjectStack extends Stack {
172
180
  public MyProjectStack(final Construct scope, final String id) {
@@ -175,12 +183,12 @@ public class MyProjectStack extends Stack {
175
183
 
176
184
  public MyProjectStack(final Construct scope, final String id, final StackProps props) {
177
185
  super(scope, id, props);
178
-
179
- CreateCloudfrontSite.Builder.create(this, "test-website")
180
- .websiteFolder("./src/build")
181
- .indexDoc("index.html")
182
- .hostedZone("example.com")
183
- .subDomain("www.example.com");
186
+
187
+ CreateBasicSite.Builder.create(this, "test-website")
188
+ .websiteFolder("./src/build")
189
+ .indexDoc("index.html")
190
+ .hostedZone("example.com")
191
+ .build();
184
192
  }
185
193
  }
186
194
  ```
@@ -189,24 +197,23 @@ public class MyProjectStack extends Stack {
189
197
  pip install cdk-simplewebsite-deploy
190
198
  ```
191
199
  ```python
192
- from aws_cdk import core
193
- from cdk_simplewebsite_deploy import CreateCloudfrontSite
194
-
200
+ from aws_cdk import Stack
201
+ from cdk_simplewebsite_deploy import CreateBasicSite
202
+ from constructs import Construct
195
203
 
196
- class MyProjectStack(core.Stack):
204
+ class MyProjectStack(Stack):
197
205
 
198
- def __init__(self, scope: core.Construct, construct_id: str, **kwargs) -> None:
206
+ def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
199
207
  super().__init__(scope, construct_id, **kwargs)
200
208
 
201
- CreateCloudfrontSite(self, 'test-website', website_folder='./src/build',
202
- index_doc='index.html',
203
- hosted_zone='example.com',
204
- sub_domain='www.example.com')
209
+ CreateBasicSite(self, 'test-website', website_folder='./src/build',
210
+ index_doc='index.html',
211
+ hosted_zone='example.com')
205
212
  ```
206
213
 
207
214
  ## 🚀 Enhanced Features
208
215
 
209
- The `CreateCloudfrontSite` construct now includes several optional advanced features for improved security, performance, and monitoring:
216
+ The `CreateCloudfrontSite` construct includes optional advanced features for security, performance, and monitoring.
210
217
 
211
218
  ### Security Headers
212
219
  Enable comprehensive security headers including HSTS, X-Frame-Options, Content-Type-Options, and XSS protection:
@@ -257,6 +264,48 @@ new CreateCloudfrontSite(this, 'waf-protected-website', {
257
264
  });
258
265
  ```
259
266
 
267
+ ### Origin Access Levels
268
+ Grant additional OAC permissions to the website bucket. This can be useful when you need CloudFront to distinguish missing objects from access-denied responses.
269
+
270
+ ```typescript
271
+ import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
272
+
273
+ new CreateCloudfrontSite(this, 'website-with-list-access', {
274
+ websiteFolder: './src/dist',
275
+ indexDoc: 'index.html',
276
+ hostedZone: 'example.com',
277
+ originAccessLevels: [
278
+ cloudfront.AccessLevel.READ,
279
+ cloudfront.AccessLevel.LIST,
280
+ ],
281
+ });
282
+ ```
283
+
284
+ ### CloudFront Function Associations
285
+ Attach CloudFront Functions to the default behavior for lightweight viewer request or viewer response logic.
286
+
287
+ ```typescript
288
+ import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
289
+
290
+ const rewriteFunction = new cloudfront.Function(this, 'RewriteFunction', {
291
+ code: cloudfront.FunctionCode.fromInline(
292
+ 'function handler(event) { return event.request; }',
293
+ ),
294
+ });
295
+
296
+ new CreateCloudfrontSite(this, 'website-with-function', {
297
+ websiteFolder: './src/dist',
298
+ indexDoc: 'index.html',
299
+ hostedZone: 'example.com',
300
+ functionAssociations: [
301
+ {
302
+ eventType: cloudfront.FunctionEventType.VIEWER_REQUEST,
303
+ function: rewriteFunction,
304
+ },
305
+ ],
306
+ });
307
+ ```
308
+
260
309
  ### Custom Cache Behaviors
261
310
  Add custom cache behaviors for different content types:
262
311
 
@@ -314,6 +363,12 @@ export class AdvancedWebsiteStack extends cdk.Stack {
314
363
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
315
364
  super(scope, id, props);
316
365
 
366
+ const rewriteFunction = new cloudfront.Function(this, 'RewriteFunction', {
367
+ code: cloudfront.FunctionCode.fromInline(
368
+ 'function handler(event) { return event.request; }',
369
+ ),
370
+ });
371
+
317
372
  new CreateCloudfrontSite(this, 'advanced-website', {
318
373
  websiteFolder: './dist',
319
374
  indexDoc: 'index.html',
@@ -325,6 +380,10 @@ export class AdvancedWebsiteStack extends cdk.Stack {
325
380
  priceClass: cloudfront.PriceClass.PRICE_CLASS_ALL,
326
381
  enableSecurityHeaders: true,
327
382
  enableIpv6: true,
383
+ originAccessLevels: [
384
+ cloudfront.AccessLevel.READ,
385
+ cloudfront.AccessLevel.LIST,
386
+ ],
328
387
 
329
388
  // Monitoring & Protection
330
389
  enableLogging: true,
@@ -337,6 +396,14 @@ export class AdvancedWebsiteStack extends cdk.Stack {
337
396
  cachePolicy: cloudfront.CachePolicy.CACHING_DISABLED,
338
397
  },
339
398
  },
399
+
400
+ // Edge Logic
401
+ functionAssociations: [
402
+ {
403
+ eventType: cloudfront.FunctionEventType.VIEWER_REQUEST,
404
+ function: rewriteFunction,
405
+ },
406
+ ],
340
407
 
341
408
  // SPA Error Handling
342
409
  customErrorResponses: [
@@ -357,12 +424,14 @@ export class AdvancedWebsiteStack extends cdk.Stack {
357
424
  - **Security Headers**: Automatic HSTS, X-Frame-Options, Content-Type-Options, and XSS protection
358
425
  - **WAF Integration**: Support for AWS WAF Web ACLs for advanced threat protection
359
426
  - **Origin Access Control**: Modern S3 bucket protection (replaces deprecated OAI)
427
+ - **Configurable OAC Permissions**: Optional origin access levels for the website bucket
360
428
 
361
429
  ### ⚡ **Optimized Performance**
362
430
  - **Smart Caching**: Optimized cache policies for better performance
363
431
  - **HTTP/2 & HTTP/3**: Latest protocol support for faster loading
364
432
  - **Global Edge Locations**: Configurable price classes for worldwide distribution
365
433
  - **IPv6 Support**: Dual-stack networking for better connectivity
434
+ - **CloudFront Functions**: Optional viewer request and response function associations
366
435
 
367
436
  ### 📊 **Comprehensive Monitoring**
368
437
  - **Access Logging**: CloudFront access logs for analytics
@@ -65,6 +65,16 @@ export interface CloudfrontSiteConfiguration {
65
65
  * @default - No additional cache behaviors.
66
66
  */
67
67
  readonly additionalBehaviors?: Record<string, cloudfront.BehaviorOptions>;
68
+ /**
69
+ * Additional permissions granted to the CloudFront Origin Access Control for the website bucket.
70
+ * @default [cloudfront.AccessLevel.READ]
71
+ */
72
+ readonly originAccessLevels?: cloudfront.AccessLevel[];
73
+ /**
74
+ * CloudFront Functions to associate with the default behavior.
75
+ * @default - No CloudFront Function associations.
76
+ */
77
+ readonly functionAssociations?: cloudfront.FunctionAssociation[];
68
78
  /**
69
79
  * Enable response headers policy for security headers.
70
80
  * @default false - No security headers policy applied.
@@ -96,6 +106,9 @@ export interface CloudfrontSiteConfiguration {
96
106
  */
97
107
  readonly webAclId?: string;
98
108
  }
109
+ /**
110
+ * @deprecated Use CreateCloudfrontSite instead. CreateBasicSite configures a public S3 website endpoint.
111
+ */
99
112
  export declare class CreateBasicSite extends Construct {
100
113
  constructor(scope: Construct, id: string, props: BasicSiteConfiguration);
101
114
  }
@@ -12,6 +12,9 @@ const targets = require("aws-cdk-lib/aws-route53-targets");
12
12
  const s3 = require("aws-cdk-lib/aws-s3");
13
13
  const s3deploy = require("aws-cdk-lib/aws-s3-deployment");
14
14
  const constructs_1 = require("constructs");
15
+ /**
16
+ * @deprecated Use CreateCloudfrontSite instead. CreateBasicSite configures a public S3 website endpoint.
17
+ */
15
18
  class CreateBasicSite extends constructs_1.Construct {
16
19
  constructor(scope, id, props) {
17
20
  super(scope, id);
@@ -60,7 +63,7 @@ class CreateBasicSite extends constructs_1.Construct {
60
63
  }
61
64
  exports.CreateBasicSite = CreateBasicSite;
62
65
  _a = JSII_RTTI_SYMBOL_1;
63
- CreateBasicSite[_a] = { fqn: "cdk-simplewebsite-deploy.CreateBasicSite", version: "2.1.10" };
66
+ CreateBasicSite[_a] = { fqn: "cdk-simplewebsite-deploy.CreateBasicSite", version: "2.2.0" };
64
67
  class CreateCloudfrontSite extends constructs_1.Construct {
65
68
  constructor(scope, id, props) {
66
69
  super(scope, id);
@@ -147,12 +150,15 @@ class CreateCloudfrontSite extends constructs_1.Construct {
147
150
  : undefined;
148
151
  const websiteDist = new cloudfront.Distribution(scope, 'WebsiteDist', {
149
152
  defaultBehavior: {
150
- origin: origins.S3BucketOrigin.withOriginAccessControl(websiteBucket),
153
+ origin: origins.S3BucketOrigin.withOriginAccessControl(websiteBucket, {
154
+ originAccessLevels: props.originAccessLevels,
155
+ }),
151
156
  allowedMethods: cloudfront.AllowedMethods.ALLOW_GET_HEAD_OPTIONS,
152
157
  viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
153
158
  cachePolicy: cloudfront.CachePolicy.CACHING_OPTIMIZED,
154
159
  originRequestPolicy: cloudfront.OriginRequestPolicy.CORS_S3_ORIGIN,
155
160
  responseHeadersPolicy,
161
+ functionAssociations: props.functionAssociations,
156
162
  },
157
163
  additionalBehaviors: props.additionalBehaviors,
158
164
  minimumProtocolVersion: cloudfront.SecurityPolicyProtocol.TLS_V1_2_2021,
@@ -203,5 +209,5 @@ class CreateCloudfrontSite extends constructs_1.Construct {
203
209
  }
204
210
  exports.CreateCloudfrontSite = CreateCloudfrontSite;
205
211
  _b = JSII_RTTI_SYMBOL_1;
206
- CreateCloudfrontSite[_b] = { fqn: "cdk-simplewebsite-deploy.CreateCloudfrontSite", version: "2.1.10" };
207
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXNpbXBsZXdlYnNpdGUtZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Nkay1zaW1wbGV3ZWJzaXRlLWRlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUFzRDtBQUN0RCwwREFBMEQ7QUFDMUQseURBQXlEO0FBQ3pELDhEQUE4RDtBQUM5RCxtREFBbUQ7QUFDbkQsMkRBQTJEO0FBQzNELHlDQUF5QztBQUN6QywwREFBMEQ7QUFDMUQsMkNBQXVDO0FBbUd2QyxNQUFhLGVBQWdCLFNBQVEsc0JBQVM7SUFDNUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE2QjtRQUNyRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQ3BELElBQUksRUFDSixtQkFBbUIsRUFDbkI7WUFDRSxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7U0FDN0IsQ0FDRixDQUFDO1FBRUYsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQ3pDLEtBQUssRUFDTCx1QkFBdUIsRUFDdkI7WUFDRSxVQUFVLEVBQUUsT0FBTyxLQUFLLENBQUMsVUFBVSxFQUFFO1lBQ3JDLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87WUFDcEMsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixlQUFlLEVBQUU7Z0JBQ2YsUUFBUSxFQUFFLEtBQUssQ0FBQyxVQUFVO2dCQUMxQixRQUFRLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUk7YUFDbkM7U0FDRixDQUNGLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRTtZQUMxRCxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDNUIsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztZQUNw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QUFVLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSwyQkFBMkIsRUFBRTtvQkFDekQsSUFBSSxFQUFFLGdCQUFnQjtvQkFDdEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxTQUFTO29CQUMzQixNQUFNLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQ3BDLElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUMxQztpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7O0FBdktILG9EQXdLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlbW92YWxQb2xpY3ksIER1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYWNtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXInO1xuaW1wb3J0ICogYXMgY2xvdWRmcm9udCBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udCc7XG5pbXBvcnQgKiBhcyBvcmlnaW5zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250LW9yaWdpbnMnO1xuaW1wb3J0ICogYXMgcm91dGU1MyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1Myc7XG5pbXBvcnQgKiBhcyB0YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzLXRhcmdldHMnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIHMzZGVwbG95IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1kZXBsb3ltZW50JztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2ljU2l0ZUNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogTG9jYWwgcGF0aCB0byB0aGUgd2Vic2l0ZSBmb2xkZXIgeW91IHdhbnQgdG8gZGVwbG95IG9uIFMzLlxuICAgKi9cbiAgcmVhZG9ubHkgd2Vic2l0ZUZvbGRlcjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGluZGV4IGRvY3VtZW50IG9mIHRoZSB3ZWJzaXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhEb2M6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBlcnJvciBkb2N1bWVudCBvZiB0aGUgd2Vic2l0ZS5cbiAgICogQGRlZmF1bHQgLSBObyBlcnJvciBkb2N1bWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGVycm9yRG9jPzogc3RyaW5nO1xuICAvKipcbiAgICogSG9zdGVkIFpvbmUgdXNlZCB0byBjcmVhdGUgdGhlIEROUyByZWNvcmQgZm9yIHRoZSB3ZWJzaXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdGVkWm9uZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkZnJvbnRTaXRlQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBMb2NhbCBwYXRoIHRvIHRoZSB3ZWJzaXRlIGZvbGRlciB5b3Ugd2FudCB0byBkZXBsb3kgb24gUzMuXG4gICAqL1xuICByZWFkb25seSB3ZWJzaXRlRm9sZGVyOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggZG9jdW1lbnQgb2YgdGhlIHdlYnNpdGUuXG4gICAqL1xuICByZWFkb25seSBpbmRleERvYzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGVycm9yIGRvY3VtZW50IG9mIHRoZSB3ZWJzaXRlLlxuICAgKiBAZGVmYXVsdCAtIE5vIGVycm9yIGRvY3VtZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3JEb2M/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIb3N0ZWQgWm9uZSB1c2VkIHRvIGNyZWF0ZSB0aGUgRE5TIHJlY29yZCBmb3IgdGhlIHdlYnNpdGUuXG4gICAqL1xuICByZWFkb25seSBob3N0ZWRab25lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBVc2VkIHRvIGRlcGxveSBhIENsb3VkZnJvbnQgc2l0ZSB3aXRoIGEgc2luZ2xlIGRvbWFpbi4gZS5nLiBzYW1wbGUuZXhhbXBsZS5jb21cbiAgICogSWYgeW91IGluY2x1ZGUgYSB2YWx1ZSBmb3IgYm90aCBkb21haW4gYW5kIHN1YkRvbWFpbixcbiAgICogYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzdWJkb21haW4gbmFtZSB5b3Ugd2FudCB0byBkZXBsb3kuIGUuZy4gd3d3LmV4YW1wbGUuY29tXG4gICAqIElmIHlvdSBpbmNsdWRlIGEgdmFsdWUgZm9yIGJvdGggZG9tYWluIGFuZCBzdWJEb21haW4sXG4gICAqIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHZhbHVlXG4gICAqL1xuICByZWFkb25seSBzdWJEb21haW4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcHJpY2UgY2xhc3MgZGV0ZXJtaW5lcyBob3cgbWFueSBlZGdlIGxvY2F0aW9ucyBDbG91ZEZyb250IHdpbGwgdXNlIGZvciB5b3VyIGRpc3RyaWJ1dGlvbi5cbiAgICogQGRlZmF1bHQgUHJpY2VDbGFzcy5QUklDRV9DTEFTU18xMDAuXG4gICAqIEBzZWUgaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9jbG91ZGZyb250L3ByaWNpbmcvLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpY2VDbGFzcz86IGNsb3VkZnJvbnQuUHJpY2VDbGFzcztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNhY2hlIGJlaGF2aW9ycyBmb3IgZGlmZmVyZW50IHBhdGggcGF0dGVybnMuXG4gICAqIEBkZWZhdWx0IC0gTm8gYWRkaXRpb25hbCBjYWNoZSBiZWhhdmlvcnMuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQmVoYXZpb3JzPzogUmVjb3JkPHN0cmluZywgY2xvdWRmcm9udC5CZWhhdmlvck9wdGlvbnM+O1xuICAvKipcbiAgICogRW5hYmxlIHJlc3BvbnNlIGhlYWRlcnMgcG9saWN5IGZvciBzZWN1cml0eSBoZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZSAtIE5vIHNlY3VyaXR5IGhlYWRlcnMgcG9saWN5IGFwcGxpZWQuXG4gICAqL1xuICByZWFkb25seSBlbmFibGVTZWN1cml0eUhlYWRlcnM/OiBib29sZWFuO1xuICAvKipcbiAgICogRW5hYmxlIElQdjYgc3VwcG9ydCB3aXRoIEFBQUEgcmVjb3Jkcy5cbiAgICogQGRlZmF1bHQgZmFsc2UgLSBObyBJUHY2IHN1cHBvcnQuXG4gICAqL1xuICByZWFkb25seSBlbmFibGVJcHY2PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEN1c3RvbSBlcnJvciByZXNwb25zZXMgZm9yIGRpZmZlcmVudCBIVFRQIHN0YXR1cyBjb2Rlcy5cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IGVycm9yIHJlc3BvbnNlcyBiYXNlZCBvbiBlcnJvckRvYyBzZXR0aW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tRXJyb3JSZXNwb25zZXM/OiBjbG91ZGZyb250LkVycm9yUmVzcG9uc2VbXTtcbiAgLyoqXG4gICAqIEVuYWJsZSBDbG91ZEZyb250IGFjY2VzcyBsb2dnaW5nLlxuICAgKiBAZGVmYXVsdCBmYWxzZSAtIE5vIGFjY2VzcyBsb2dnaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlTG9nZ2luZz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTMyBidWNrZXQgZm9yIENsb3VkRnJvbnQgYWNjZXNzIGxvZ3MuIElmIG5vdCBwcm92aWRlZCBhbmQgbG9nZ2luZyBpcyBlbmFibGVkLCBhIG5ldyBidWNrZXQgd2lsbCBiZSBjcmVhdGVkLlxuICAgKiBAZGVmYXVsdCAtIE5ldyBidWNrZXQgY3JlYXRlZCBpZiBsb2dnaW5nIGlzIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBsb2dzQnVja2V0PzogczMuSUJ1Y2tldDtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIFdBRiBXZWIgQUNMIEFSTiBmb3IgZW5oYW5jZWQgc2VjdXJpdHkuXG4gICAqIEBkZWZhdWx0IC0gTm8gV0FGIGludGVncmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgd2ViQWNsSWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVCYXNpY1NpdGUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQmFzaWNTaXRlQ29uZmlndXJhdGlvbikge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBob3N0ZWRab25lTG9va3VwID0gcm91dGU1My5Ib3N0ZWRab25lLmZyb21Mb29rdXAoXG4gICAgICB0aGlzLFxuICAgICAgJ1dlYnNpdGVIb3N0ZWRab25lJyxcbiAgICAgIHtcbiAgICAgICAgZG9tYWluTmFtZTogcHJvcHMuaG9zdGVkWm9uZSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IHdlYnNpdGVSZWRpcmVjdEJ1Y2tldCA9IG5ldyBzMy5CdWNrZXQoXG4gICAgICBzY29wZSxcbiAgICAgICdXZWJzaXRlUmVkaXJlY3RCdWNrZXQnLFxuICAgICAge1xuICAgICAgICBidWNrZXROYW1lOiBgd3d3LiR7cHJvcHMuaG9zdGVkWm9uZX1gLFxuICAgICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgICAgICB3ZWJzaXRlUmVkaXJlY3Q6IHtcbiAgICAgICAgICBob3N0TmFtZTogcHJvcHMuaG9zdGVkWm9uZSxcbiAgICAgICAgICBwcm90b2NvbDogczMuUmVkaXJlY3RQcm90b2NvbC5IVFRQLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3Qgd2Vic2l0ZUJ1Y2tldCA9IG5ldyBzMy5CdWNrZXQoc2NvcGUsICdXZWJzaXRlQnVja2V0Jywge1xuICAgICAgYnVja2V0TmFtZTogcHJvcHMuaG9zdGVkWm9uZSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgICAgd2Vic2l0ZUluZGV4RG9jdW1lbnQ6IHByb3BzLmluZGV4RG9jLFxuICAgICAgd2Vic2l0ZUVycm9yRG9jdW1lbnQ6IHByb3BzLmVycm9yRG9jLFxuICAgICAgcHVibGljUmVhZEFjY2VzczogdHJ1ZSxcbiAgICAgIGJsb2NrUHVibGljQWNjZXNzOiB7XG4gICAgICAgIGJsb2NrUHVibGljUG9saWN5OiBmYWxzZSxcbiAgICAgICAgYmxvY2tQdWJsaWNBY2xzOiBmYWxzZSxcbiAgICAgICAgaWdub3JlUHVibGljQWNsczogZmFsc2UsXG4gICAgICAgIHJlc3RyaWN0UHVibGljQnVja2V0czogZmFsc2UsXG4gICAgICB9LFxuICAgICAgZW5jcnlwdGlvbjogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgIH0pO1xuXG4gICAgbmV3IHMzZGVwbG95LkJ1Y2tldERlcGxveW1lbnQoc2NvcGUsICdXZWJzaXRlRGVwbG95Jywge1xuICAgICAgc291cmNlczogW3MzZGVwbG95LlNvdXJjZS5hc3NldChwcm9wcy53ZWJzaXRlRm9sZGVyKV0sXG4gICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogd2Vic2l0ZUJ1Y2tldCxcbiAgICB9KTtcblxuICAgIG5ldyByb3V0ZTUzLkFSZWNvcmQoc2NvcGUsICdXZWJzaXRlQWxpYXMnLCB7XG4gICAgICB6b25lOiBob3N0ZWRab25lTG9va3VwLFxuICAgICAgcmVjb3JkTmFtZTogcHJvcHMuaG9zdGVkWm9uZSxcbiAgICAgIHRhcmdldDogcm91dGU1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICBuZXcgdGFyZ2V0cy5CdWNrZXRXZWJzaXRlVGFyZ2V0KHdlYnNpdGVCdWNrZXQpLFxuICAgICAgKSxcbiAgICB9KTtcblxuICAgIG5ldyByb3V0ZTUzLkFSZWNvcmQoc2NvcGUsICdXZWJzaXRlUmVkaXJlY3RBbGlhcycsIHtcbiAgICAgIHpvbmU6IGhvc3RlZFpvbmVMb29rdXAsXG4gICAgICByZWNvcmROYW1lOiBgd3d3LiR7cHJvcHMuaG9zdGVkWm9uZX1gLFxuICAgICAgdGFyZ2V0OiByb3V0ZTUzLlJlY29yZFRhcmdldC5mcm9tQWxpYXMoXG4gICAgICAgIG5ldyB0YXJnZXRzLkJ1Y2tldFdlYnNpdGVUYXJnZXQod2Vic2l0ZVJlZGlyZWN0QnVja2V0KSxcbiAgICAgICksXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZUNsb3VkZnJvbnRTaXRlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBDbG91ZGZyb250U2l0ZUNvbmZpZ3VyYXRpb24sXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAocHJvcHMuZG9tYWluICYmIHByb3BzLnN1YkRvbWFpbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnRG9tYWluIGFuZCBzdWIgZG9tYWluIHBhcmFtZXRlcnMgY2Fubm90IGJvdGggYmUgZGVmaW5lZCcsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGhvc3RlZFpvbmVMb29rdXAgPSByb3V0ZTUzLkhvc3RlZFpvbmUuZnJvbUxvb2t1cChcbiAgICAgIHRoaXMsXG4gICAgICAnV2Vic2l0ZUhvc3RlZFpvbmUnLFxuICAgICAge1xuICAgICAgICBkb21haW5OYW1lOiBwcm9wcy5ob3N0ZWRab25lLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gVXNlIGN1c3RvbSBlcnJvciByZXNwb25zZXMgaWYgcHJvdmlkZWQsIG90aGVyd2lzZSB1c2UgZGVmYXVsdCBsb2dpY1xuICAgIGNvbnN0IGVycm9yUmVzcG9uc2VzOiBjbG91ZGZyb250LkVycm9yUmVzcG9uc2VbXSA9IHByb3BzLmN1c3RvbUVycm9yUmVzcG9uc2VzIHx8IFtdO1xuICAgIGlmICghcHJvcHMuY3VzdG9tRXJyb3JSZXNwb25zZXMpIHtcbiAgICAgIGlmIChwcm9wcy5lcnJvckRvYykge1xuICAgICAgICBlcnJvclJlc3BvbnNlcy5wdXNoKHtcbiAgICAgICAgICBodHRwU3RhdHVzOiA0MDQsXG4gICAgICAgICAgcmVzcG9uc2VQYWdlUGF0aDogYC8ke3Byb3BzLmVycm9yRG9jfWAsXG4gICAgICAgIH0pO1xuICAgICAgICBlcnJvclJlc3BvbnNlcy5wdXNoKHtcbiAgICAgICAgICBodHRwU3RhdHVzOiA0MDMsXG4gICAgICAgICAgcmVzcG9uc2VQYWdlUGF0aDogYC8ke3Byb3BzLmVycm9yRG9jfWAsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JSZXNwb25zZXMucHVzaCh7XG4gICAgICAgICAgaHR0cFN0YXR1czogNDA0LFxuICAgICAgICAgIHJlc3BvbnNlSHR0cFN0YXR1czogMjAwLFxuICAgICAgICAgIHJlc3BvbnNlUGFnZVBhdGg6IGAvJHtwcm9wcy5pbmRleERvY31gLFxuICAgICAgICB9KTtcbiAgICAgICAgZXJyb3JSZXNwb25zZXMucHVzaCh7XG4gICAgICAgICAgaHR0cFN0YXR1czogNDAzLFxuICAgICAgICAgIHJlc3BvbnNlSHR0cFN0YXR1czogMjAwLFxuICAgICAgICAgIHJlc3BvbnNlUGFnZVBhdGg6IGAvJHtwcm9wcy5pbmRleERvY31gLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzdWJqZWN0QWx0ZXJuYXRpdmVOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAocHJvcHMuZG9tYWluKSBzdWJqZWN0QWx0ZXJuYXRpdmVOYW1lcy5wdXNoKHByb3BzLmRvbWFpbik7XG4gICAgaWYgKHByb3BzLnN1YkRvbWFpbikgc3ViamVjdEFsdGVybmF0aXZlTmFtZXMucHVzaChwcm9wcy5zdWJEb21haW4pO1xuXG4gICAgY29uc3Qgd2Vic2l0ZUNlcnQgPSBuZXcgYWNtLkNlcnRpZmljYXRlKHRoaXMsICdXZWJzaXRlQ2VydCcsIHtcbiAgICAgIGRvbWFpbk5hbWU6IHByb3BzLmhvc3RlZFpvbmUsXG4gICAgICBzdWJqZWN0QWx0ZXJuYXRpdmVOYW1lcyxcbiAgICAgIHZhbGlkYXRpb246IGFjbS5DZXJ0aWZpY2F0ZVZhbGlkYXRpb24uZnJvbURucyhob3N0ZWRab25lTG9va3VwKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHdlYnNpdGVCdWNrZXQgPSBuZXcgczMuQnVja2V0KHNjb3BlLCAnV2Vic2l0ZUJ1Y2tldCcsIHtcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgICAgZW5jcnlwdGlvbjogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgIH0pO1xuXG4gICAgY29uc3QgZG9tYWluTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHByb3BzLmRvbWFpbikge1xuICAgICAgZG9tYWluTmFtZXMucHVzaChwcm9wcy5kb21haW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb21haW5OYW1lcy5wdXNoKHByb3BzLmhvc3RlZFpvbmUpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5zdWJEb21haW4pIGRvbWFpbk5hbWVzLnB1c2gocHJvcHMuc3ViRG9tYWluKTtcblxuICAgIC8vIENyZWF0ZSBhY2Nlc3MgbG9ncyBidWNrZXQgaWYgbG9nZ2luZyBpcyBlbmFibGVkIGJ1dCBubyBidWNrZXQgcHJvdmlkZWRcbiAgICBjb25zdCBsb2dzQnVja2V0ID0gcHJvcHMuZW5hYmxlTG9nZ2luZ1xuICAgICAgPyAocHJvcHMubG9nc0J1Y2tldCB8fCBuZXcgczMuQnVja2V0KHRoaXMsICdBY2Nlc3NMb2dzQnVja2V0Jywge1xuICAgICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgICAgICBlbmNyeXB0aW9uOiBzMy5CdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gICAgICB9KSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gQ3JlYXRlIHNlY3VyaXR5IGhlYWRlcnMgcG9saWN5IGlmIGVuYWJsZWRcbiAgICBjb25zdCByZXNwb25zZUhlYWRlcnNQb2xpY3kgPSBwcm9wcy5lbmFibGVTZWN1cml0eUhlYWRlcnNcbiAgICAgID8gbmV3IGNsb3VkZnJvbnQuUmVzcG9uc2VIZWFkZXJzUG9saWN5KHRoaXMsICdTZWN1cml0eUhlYWRlcnNQb2xpY3knLCB7XG4gICAgICAgIHNlY3VyaXR5SGVhZGVyc0JlaGF2aW9yOiB7XG4gICAgICAgICAgY29udGVudFR5cGVPcHRpb25zOiB7IG92ZXJyaWRlOiB0cnVlIH0sXG4gICAgICAgICAgZnJhbWVPcHRpb25zOiB7IGZyYW1lT3B0aW9uOiBjbG91ZGZyb250LkhlYWRlcnNGcmFtZU9wdGlvbi5ERU5ZLCBvdmVycmlkZTogdHJ1ZSB9LFxuICAgICAgICAgIHJlZmVycmVyUG9saWN5OiB7IHJlZmVycmVyUG9saWN5OiBjbG91ZGZyb250LkhlYWRlcnNSZWZlcnJlclBvbGljeS5TVFJJQ1RfT1JJR0lOX1dIRU5fQ1JPU1NfT1JJR0lOLCBvdmVycmlkZTogdHJ1ZSB9LFxuICAgICAgICAgIHN0cmljdFRyYW5zcG9ydFNlY3VyaXR5OiB7XG4gICAgICAgICAgICBhY2Nlc3NDb250cm9sTWF4QWdlOiBEdXJhdGlvbi5zZWNvbmRzKDMxNTM2MDAwKSxcbiAgICAgICAgICAgIGluY2x1ZGVTdWJkb21haW5zOiB0cnVlLFxuICAgICAgICAgICAgcHJlbG9hZDogdHJ1ZSxcbiAgICAgICAgICAgIG92ZXJyaWRlOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeHNzUHJvdGVjdGlvbjogeyBwcm90ZWN0aW9uOiB0cnVlLCBtb2RlQmxvY2s6IHRydWUsIG92ZXJyaWRlOiB0cnVlIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCB3ZWJzaXRlRGlzdCA9IG5ldyBjbG91ZGZyb250LkRpc3RyaWJ1dGlvbihzY29wZSwgJ1dlYnNpdGVEaXN0Jywge1xuICAgICAgZGVmYXVsdEJlaGF2aW9yOiB7XG4gICAgICAgIG9yaWdpbjogb3JpZ2lucy5TM0J1Y2tldE9yaWdpbi53aXRoT3JpZ2luQWNjZXNzQ29udHJvbCh3ZWJzaXRlQnVja2V0KSxcbiAgICAgICAgYWxsb3dlZE1ldGhvZHM6IGNsb3VkZnJvbnQuQWxsb3dlZE1ldGhvZHMuQUxMT1dfR0VUX0hFQURfT1BUSU9OUyxcbiAgICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IGNsb3VkZnJvbnQuVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAgIGNhY2hlUG9saWN5OiBjbG91ZGZyb250LkNhY2hlUG9saWN5LkNBQ0hJTkdfT1BUSU1JWkVELFxuICAgICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5OiBjbG91ZGZyb250Lk9yaWdpblJlcXVlc3RQb2xpY3kuQ09SU19TM19PUklHSU4sXG4gICAgICAgIHJlc3BvbnNlSGVhZGVyc1BvbGljeSxcbiAgICAgIH0sXG4gICAgICBhZGRpdGlvbmFsQmVoYXZpb3JzOiBwcm9wcy5hZGRpdGlvbmFsQmVoYXZpb3JzLFxuICAgICAgbWluaW11bVByb3RvY29sVmVyc2lvbjogY2xvdWRmcm9udC5TZWN1cml0eVBvbGljeVByb3RvY29sLlRMU19WMV8yXzIwMjEsXG4gICAgICBodHRwVmVyc2lvbjogY2xvdWRmcm9udC5IdHRwVmVyc2lvbi5IVFRQMl9BTkRfMyxcbiAgICAgIHByaWNlQ2xhc3M6IHByb3BzLnByaWNlQ2xhc3MgPz8gY2xvdWRmcm9udC5QcmljZUNsYXNzLlBSSUNFX0NMQVNTXzEwMCxcbiAgICAgIGVycm9yUmVzcG9uc2VzLFxuICAgICAgZGVmYXVsdFJvb3RPYmplY3Q6IHByb3BzLmluZGV4RG9jLFxuICAgICAgZG9tYWluTmFtZXMsXG4gICAgICBjZXJ0aWZpY2F0ZTogd2Vic2l0ZUNlcnQsXG4gICAgICBsb2dCdWNrZXQ6IGxvZ3NCdWNrZXQsXG4gICAgICBsb2dJbmNsdWRlc0Nvb2tpZXM6IGZhbHNlLFxuICAgICAgd2ViQWNsSWQ6IHByb3BzLndlYkFjbElkLFxuICAgIH0pO1xuXG4gICAgbmV3IHMzZGVwbG95LkJ1Y2tldERlcGxveW1lbnQoc2NvcGUsICdXZWJzaXRlRGVwbG95Jywge1xuICAgICAgc291cmNlczogW3MzZGVwbG95LlNvdXJjZS5hc3NldChwcm9wcy53ZWJzaXRlRm9sZGVyKV0sXG4gICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogd2Vic2l0ZUJ1Y2tldCxcbiAgICAgIGRpc3RyaWJ1dGlvbjogd2Vic2l0ZURpc3QsXG4gICAgfSk7XG5cbiAgICBuZXcgcm91dGU1My5BUmVjb3JkKHNjb3BlLCAnV2Vic2l0ZURvbWFpbkFsaWFzJywge1xuICAgICAgem9uZTogaG9zdGVkWm9uZUxvb2t1cCxcbiAgICAgIHJlY29yZE5hbWU6IHByb3BzLmRvbWFpbiA/IHByb3BzLmRvbWFpbiA6IHByb3BzLmhvc3RlZFpvbmUsXG4gICAgICB0YXJnZXQ6IHJvdXRlNTMuUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgbmV3IHRhcmdldHMuQ2xvdWRGcm9udFRhcmdldCh3ZWJzaXRlRGlzdCksXG4gICAgICApLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIElQdjYgc3VwcG9ydCBpZiBlbmFibGVkXG4gICAgaWYgKHByb3BzLmVuYWJsZUlwdjYpIHtcbiAgICAgIG5ldyByb3V0ZTUzLkFhYWFSZWNvcmQoc2NvcGUsICdXZWJzaXRlRG9tYWluQWxpYXNJcHY2Jywge1xuICAgICAgICB6b25lOiBob3N0ZWRab25lTG9va3VwLFxuICAgICAgICByZWNvcmROYW1lOiBwcm9wcy5kb21haW4gPyBwcm9wcy5kb21haW4gOiBwcm9wcy5ob3N0ZWRab25lLFxuICAgICAgICB0YXJnZXQ6IHJvdXRlNTMuUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgICBuZXcgdGFyZ2V0cy5DbG91ZEZyb250VGFyZ2V0KHdlYnNpdGVEaXN0KSxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5zdWJEb21haW4pIHtcbiAgICAgIG5ldyByb3V0ZTUzLkFSZWNvcmQoc2NvcGUsICdXZWJzaXRlU3ViRG9tYWluQWxpYXMnLCB7XG4gICAgICAgIHpvbmU6IGhvc3RlZFpvbmVMb29rdXAsXG4gICAgICAgIHJlY29yZE5hbWU6IHByb3BzLnN1YkRvbWFpbixcbiAgICAgICAgdGFyZ2V0OiByb3V0ZTUzLlJlY29yZFRhcmdldC5mcm9tQWxpYXMoXG4gICAgICAgICAgbmV3IHRhcmdldHMuQ2xvdWRGcm9udFRhcmdldCh3ZWJzaXRlRGlzdCksXG4gICAgICAgICksXG4gICAgICB9KTtcblxuICAgICAgLy8gQWRkIElQdjYgc3VwcG9ydCBmb3Igc3ViZG9tYWluIGlmIGVuYWJsZWRcbiAgICAgIGlmIChwcm9wcy5lbmFibGVJcHY2KSB7XG4gICAgICAgIG5ldyByb3V0ZTUzLkFhYWFSZWNvcmQoc2NvcGUsICdXZWJzaXRlU3ViRG9tYWluQWxpYXNJcHY2Jywge1xuICAgICAgICAgIHpvbmU6IGhvc3RlZFpvbmVMb29rdXAsXG4gICAgICAgICAgcmVjb3JkTmFtZTogcHJvcHMuc3ViRG9tYWluLFxuICAgICAgICAgIHRhcmdldDogcm91dGU1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICAgICAgbmV3IHRhcmdldHMuQ2xvdWRGcm9udFRhcmdldCh3ZWJzaXRlRGlzdCksXG4gICAgICAgICAgKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
212
+ CreateCloudfrontSite[_b] = { fqn: "cdk-simplewebsite-deploy.CreateCloudfrontSite", version: "2.2.0" };
213
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXNpbXBsZXdlYnNpdGUtZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Nkay1zaW1wbGV3ZWJzaXRlLWRlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUFzRDtBQUN0RCwwREFBMEQ7QUFDMUQseURBQXlEO0FBQ3pELDhEQUE4RDtBQUM5RCxtREFBbUQ7QUFDbkQsMkRBQTJEO0FBQzNELHlDQUF5QztBQUN6QywwREFBMEQ7QUFDMUQsMkNBQXVDO0FBNkd2Qzs7R0FFRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxzQkFBUztJQUM1QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTZCO1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FDcEQsSUFBSSxFQUNKLG1CQUFtQixFQUNuQjtZQUNFLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtTQUM3QixDQUNGLENBQUM7UUFFRixNQUFNLHFCQUFxQixHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FDekMsS0FBSyxFQUNMLHVCQUF1QixFQUN2QjtZQUNFLFVBQVUsRUFBRSxPQUFPLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDckMsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztZQUNwQyxpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLGVBQWUsRUFBRTtnQkFDZixRQUFRLEVBQUUsS0FBSyxDQUFDLFVBQVU7Z0JBQzFCLFFBQVEsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSTthQUNuQztTQUNGLENBQ0YsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFO1lBQzFELFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixhQUFhLEVBQUUsMkJBQWEsQ0FB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QyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FDMUM7YUFDRixDQUFDLENBQUM7WUFFSCw0Q0FBNEM7WUFDNUMsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3JCLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsMkJBQTJCLEVBQUU7b0JBQ3pELElBQUksRUFBRSxnQkFBZ0I7b0JBQ3RCLFVBQVUsRUFBRSxLQUFLLENBQUMsU0FBUztvQkFDM0IsTUFBTSxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUNwQyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FDMUM7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDOztBQTFLSCxvREEyS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW1vdmFsUG9saWN5LCBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGFjbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJztcbmltcG9ydCAqIGFzIGNsb3VkZnJvbnQgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0ICogYXMgb3JpZ2lucyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udC1vcmlnaW5zJztcbmltcG9ydCAqIGFzIHJvdXRlNTMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXJvdXRlNTMnO1xuaW1wb3J0ICogYXMgdGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1My10YXJnZXRzJztcbmltcG9ydCAqIGFzIHMzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgKiBhcyBzM2RlcGxveSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudCc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGludGVyZmFjZSBCYXNpY1NpdGVDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIExvY2FsIHBhdGggdG8gdGhlIHdlYnNpdGUgZm9sZGVyIHlvdSB3YW50IHRvIGRlcGxveSBvbiBTMy5cbiAgICovXG4gIHJlYWRvbmx5IHdlYnNpdGVGb2xkZXI6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBkb2N1bWVudCBvZiB0aGUgd2Vic2l0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGluZGV4RG9jOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZXJyb3IgZG9jdW1lbnQgb2YgdGhlIHdlYnNpdGUuXG4gICAqIEBkZWZhdWx0IC0gTm8gZXJyb3IgZG9jdW1lbnQuXG4gICAqL1xuICByZWFkb25seSBlcnJvckRvYz86IHN0cmluZztcbiAgLyoqXG4gICAqIEhvc3RlZCBab25lIHVzZWQgdG8gY3JlYXRlIHRoZSBETlMgcmVjb3JkIGZvciB0aGUgd2Vic2l0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGhvc3RlZFpvbmU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbG91ZGZyb250U2l0ZUNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogTG9jYWwgcGF0aCB0byB0aGUgd2Vic2l0ZSBmb2xkZXIgeW91IHdhbnQgdG8gZGVwbG95IG9uIFMzLlxuICAgKi9cbiAgcmVhZG9ubHkgd2Vic2l0ZUZvbGRlcjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGluZGV4IGRvY3VtZW50IG9mIHRoZSB3ZWJzaXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhEb2M6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBlcnJvciBkb2N1bWVudCBvZiB0aGUgd2Vic2l0ZS5cbiAgICogQGRlZmF1bHQgLSBObyBlcnJvciBkb2N1bWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGVycm9yRG9jPzogc3RyaW5nO1xuICAvKipcbiAgICogSG9zdGVkIFpvbmUgdXNlZCB0byBjcmVhdGUgdGhlIEROUyByZWNvcmQgZm9yIHRoZSB3ZWJzaXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdGVkWm9uZTogc3RyaW5nO1xuICAvKipcbiAgICogVXNlZCB0byBkZXBsb3kgYSBDbG91ZGZyb250IHNpdGUgd2l0aCBhIHNpbmdsZSBkb21haW4uIGUuZy4gc2FtcGxlLmV4YW1wbGUuY29tXG4gICAqIElmIHlvdSBpbmNsdWRlIGEgdmFsdWUgZm9yIGJvdGggZG9tYWluIGFuZCBzdWJEb21haW4sXG4gICAqIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHZhbHVlXG4gICAqL1xuICByZWFkb25seSBkb21haW4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc3ViZG9tYWluIG5hbWUgeW91IHdhbnQgdG8gZGVwbG95LiBlLmcuIHd3dy5leGFtcGxlLmNvbVxuICAgKiBJZiB5b3UgaW5jbHVkZSBhIHZhbHVlIGZvciBib3RoIGRvbWFpbiBhbmQgc3ViRG9tYWluLFxuICAgKiBhbiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyB2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3ViRG9tYWluPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHByaWNlIGNsYXNzIGRldGVybWluZXMgaG93IG1hbnkgZWRnZSBsb2NhdGlvbnMgQ2xvdWRGcm9udCB3aWxsIHVzZSBmb3IgeW91ciBkaXN0cmlidXRpb24uXG4gICAqIEBkZWZhdWx0IFByaWNlQ2xhc3MuUFJJQ0VfQ0xBU1NfMTAwLlxuICAgKiBAc2VlIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vY2xvdWRmcm9udC9wcmljaW5nLy5cbiAgICovXG4gIHJlYWRvbmx5IHByaWNlQ2xhc3M/OiBjbG91ZGZyb250LlByaWNlQ2xhc3M7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBjYWNoZSBiZWhhdmlvcnMgZm9yIGRpZmZlcmVudCBwYXRoIHBhdHRlcm5zLlxuICAgKiBAZGVmYXVsdCAtIE5vIGFkZGl0aW9uYWwgY2FjaGUgYmVoYXZpb3JzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEJlaGF2aW9ycz86IFJlY29yZDxzdHJpbmcsIGNsb3VkZnJvbnQuQmVoYXZpb3JPcHRpb25zPjtcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZ3JhbnRlZCB0byB0aGUgQ2xvdWRGcm9udCBPcmlnaW4gQWNjZXNzIENvbnRyb2wgZm9yIHRoZSB3ZWJzaXRlIGJ1Y2tldC5cbiAgICogQGRlZmF1bHQgW2Nsb3VkZnJvbnQuQWNjZXNzTGV2ZWwuUkVBRF1cbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpbkFjY2Vzc0xldmVscz86IGNsb3VkZnJvbnQuQWNjZXNzTGV2ZWxbXTtcbiAgLyoqXG4gICAqIENsb3VkRnJvbnQgRnVuY3Rpb25zIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkZWZhdWx0IGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCAtIE5vIENsb3VkRnJvbnQgRnVuY3Rpb24gYXNzb2NpYXRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgZnVuY3Rpb25Bc3NvY2lhdGlvbnM/OiBjbG91ZGZyb250LkZ1bmN0aW9uQXNzb2NpYXRpb25bXTtcbiAgLyoqXG4gICAqIEVuYWJsZSByZXNwb25zZSBoZWFkZXJzIHBvbGljeSBmb3Igc2VjdXJpdHkgaGVhZGVycy5cbiAgICogQGRlZmF1bHQgZmFsc2UgLSBObyBzZWN1cml0eSBoZWFkZXJzIHBvbGljeSBhcHBsaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlU2VjdXJpdHlIZWFkZXJzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEVuYWJsZSBJUHY2IHN1cHBvcnQgd2l0aCBBQUFBIHJlY29yZHMuXG4gICAqIEBkZWZhdWx0IGZhbHNlIC0gTm8gSVB2NiBzdXBwb3J0LlxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlSXB2Nj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXN0b20gZXJyb3IgcmVzcG9uc2VzIGZvciBkaWZmZXJlbnQgSFRUUCBzdGF0dXMgY29kZXMuXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBlcnJvciByZXNwb25zZXMgYmFzZWQgb24gZXJyb3JEb2Mgc2V0dGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbUVycm9yUmVzcG9uc2VzPzogY2xvdWRmcm9udC5FcnJvclJlc3BvbnNlW107XG4gIC8qKlxuICAgKiBFbmFibGUgQ2xvdWRGcm9udCBhY2Nlc3MgbG9nZ2luZy5cbiAgICogQGRlZmF1bHQgZmFsc2UgLSBObyBhY2Nlc3MgbG9nZ2luZy5cbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZUxvZ2dpbmc/OiBib29sZWFuO1xuICAvKipcbiAgICogUzMgYnVja2V0IGZvciBDbG91ZEZyb250IGFjY2VzcyBsb2dzLiBJZiBub3QgcHJvdmlkZWQgYW5kIGxvZ2dpbmcgaXMgZW5hYmxlZCwgYSBuZXcgYnVja2V0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICogQGRlZmF1bHQgLSBOZXcgYnVja2V0IGNyZWF0ZWQgaWYgbG9nZ2luZyBpcyBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9nc0J1Y2tldD86IHMzLklCdWNrZXQ7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBXQUYgV2ViIEFDTCBBUk4gZm9yIGVuaGFuY2VkIHNlY3VyaXR5LlxuICAgKiBAZGVmYXVsdCAtIE5vIFdBRiBpbnRlZ3JhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHdlYkFjbElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBDcmVhdGVDbG91ZGZyb250U2l0ZSBpbnN0ZWFkLiBDcmVhdGVCYXNpY1NpdGUgY29uZmlndXJlcyBhIHB1YmxpYyBTMyB3ZWJzaXRlIGVuZHBvaW50LlxuICovXG5leHBvcnQgY2xhc3MgQ3JlYXRlQmFzaWNTaXRlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJhc2ljU2l0ZUNvbmZpZ3VyYXRpb24pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgaG9zdGVkWm9uZUxvb2t1cCA9IHJvdXRlNTMuSG9zdGVkWm9uZS5mcm9tTG9va3VwKFxuICAgICAgdGhpcyxcbiAgICAgICdXZWJzaXRlSG9zdGVkWm9uZScsXG4gICAgICB7XG4gICAgICAgIGRvbWFpbk5hbWU6IHByb3BzLmhvc3RlZFpvbmUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCB3ZWJzaXRlUmVkaXJlY3RCdWNrZXQgPSBuZXcgczMuQnVja2V0KFxuICAgICAgc2NvcGUsXG4gICAgICAnV2Vic2l0ZVJlZGlyZWN0QnVja2V0JyxcbiAgICAgIHtcbiAgICAgICAgYnVja2V0TmFtZTogYHd3dy4ke3Byb3BzLmhvc3RlZFpvbmV9YCxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICAgICAgd2Vic2l0ZVJlZGlyZWN0OiB7XG4gICAgICAgICAgaG9zdE5hbWU6IHByb3BzLmhvc3RlZFpvbmUsXG4gICAgICAgICAgcHJvdG9jb2w6IHMzLlJlZGlyZWN0UHJvdG9jb2wuSFRUUCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IHdlYnNpdGVCdWNrZXQgPSBuZXcgczMuQnVja2V0KHNjb3BlLCAnV2Vic2l0ZUJ1Y2tldCcsIHtcbiAgICAgIGJ1Y2tldE5hbWU6IHByb3BzLmhvc3RlZFpvbmUsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICAgIHdlYnNpdGVJbmRleERvY3VtZW50OiBwcm9wcy5pbmRleERvYyxcbiAgICAgIHdlYnNpdGVFcnJvckRvY3VtZW50OiBwcm9wcy5lcnJvckRvYyxcbiAgICAgIHB1YmxpY1JlYWRBY2Nlc3M6IHRydWUsXG4gICAgICBibG9ja1B1YmxpY0FjY2Vzczoge1xuICAgICAgICBibG9ja1B1YmxpY1BvbGljeTogZmFsc2UsXG4gICAgICAgIGJsb2NrUHVibGljQWNsczogZmFsc2UsXG4gICAgICAgIGlnbm9yZVB1YmxpY0FjbHM6IGZhbHNlLFxuICAgICAgICByZXN0cmljdFB1YmxpY0J1Y2tldHM6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGVuY3J5cHRpb246IHMzLkJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICB9KTtcblxuICAgIG5ldyBzM2RlcGxveS5CdWNrZXREZXBsb3ltZW50KHNjb3BlLCAnV2Vic2l0ZURlcGxveScsIHtcbiAgICAgIHNvdXJjZXM6IFtzM2RlcGxveS5Tb3VyY2UuYXNzZXQocHJvcHMud2Vic2l0ZUZvbGRlcildLFxuICAgICAgZGVzdGluYXRpb25CdWNrZXQ6IHdlYnNpdGVCdWNrZXQsXG4gICAgfSk7XG5cbiAgICBuZXcgcm91dGU1My5BUmVjb3JkKHNjb3BlLCAnV2Vic2l0ZUFsaWFzJywge1xuICAgICAgem9uZTogaG9zdGVkWm9uZUxvb2t1cCxcbiAgICAgIHJlY29yZE5hbWU6IHByb3BzLmhvc3RlZFpvbmUsXG4gICAgICB0YXJnZXQ6IHJvdXRlNTMuUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgbmV3IHRhcmdldHMuQnVja2V0V2Vic2l0ZVRhcmdldCh3ZWJzaXRlQnVja2V0KSxcbiAgICAgICksXG4gICAgfSk7XG5cbiAgICBuZXcgcm91dGU1My5BUmVjb3JkKHNjb3BlLCAnV2Vic2l0ZVJlZGlyZWN0QWxpYXMnLCB7XG4gICAgICB6b25lOiBob3N0ZWRab25lTG9va3VwLFxuICAgICAgcmVjb3JkTmFtZTogYHd3dy4ke3Byb3BzLmhvc3RlZFpvbmV9YCxcbiAgICAgIHRhcmdldDogcm91dGU1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICBuZXcgdGFyZ2V0cy5CdWNrZXRXZWJzaXRlVGFyZ2V0KHdlYnNpdGVSZWRpcmVjdEJ1Y2tldCksXG4gICAgICApLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVDbG91ZGZyb250U2l0ZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQ2xvdWRmcm9udFNpdGVDb25maWd1cmF0aW9uLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKHByb3BzLmRvbWFpbiAmJiBwcm9wcy5zdWJEb21haW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0RvbWFpbiBhbmQgc3ViIGRvbWFpbiBwYXJhbWV0ZXJzIGNhbm5vdCBib3RoIGJlIGRlZmluZWQnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBob3N0ZWRab25lTG9va3VwID0gcm91dGU1My5Ib3N0ZWRab25lLmZyb21Mb29rdXAoXG4gICAgICB0aGlzLFxuICAgICAgJ1dlYnNpdGVIb3N0ZWRab25lJyxcbiAgICAgIHtcbiAgICAgICAgZG9tYWluTmFtZTogcHJvcHMuaG9zdGVkWm9uZSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIFVzZSBjdXN0b20gZXJyb3IgcmVzcG9uc2VzIGlmIHByb3ZpZGVkLCBvdGhlcndpc2UgdXNlIGRlZmF1bHQgbG9naWNcbiAgICBjb25zdCBlcnJvclJlc3BvbnNlczogY2xvdWRmcm9udC5FcnJvclJlc3BvbnNlW10gPSBwcm9wcy5jdXN0b21FcnJvclJlc3BvbnNlcyB8fCBbXTtcbiAgICBpZiAoIXByb3BzLmN1c3RvbUVycm9yUmVzcG9uc2VzKSB7XG4gICAgICBpZiAocHJvcHMuZXJyb3JEb2MpIHtcbiAgICAgICAgZXJyb3JSZXNwb25zZXMucHVzaCh7XG4gICAgICAgICAgaHR0cFN0YXR1czogNDA0LFxuICAgICAgICAgIHJlc3BvbnNlUGFnZVBhdGg6IGAvJHtwcm9wcy5lcnJvckRvY31gLFxuICAgICAgICB9KTtcbiAgICAgICAgZXJyb3JSZXNwb25zZXMucHVzaCh7XG4gICAgICAgICAgaHR0cFN0YXR1czogNDAzLFxuICAgICAgICAgIHJlc3BvbnNlUGFnZVBhdGg6IGAvJHtwcm9wcy5lcnJvckRvY31gLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yUmVzcG9uc2VzLnB1c2goe1xuICAgICAgICAgIGh0dHBTdGF0dXM6IDQwNCxcbiAgICAgICAgICByZXNwb25zZUh0dHBTdGF0dXM6IDIwMCxcbiAgICAgICAgICByZXNwb25zZVBhZ2VQYXRoOiBgLyR7cHJvcHMuaW5kZXhEb2N9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIGVycm9yUmVzcG9uc2VzLnB1c2goe1xuICAgICAgICAgIGh0dHBTdGF0dXM6IDQwMyxcbiAgICAgICAgICByZXNwb25zZUh0dHBTdGF0dXM6IDIwMCxcbiAgICAgICAgICByZXNwb25zZVBhZ2VQYXRoOiBgLyR7cHJvcHMuaW5kZXhEb2N9YCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3ViamVjdEFsdGVybmF0aXZlTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHByb3BzLmRvbWFpbikgc3ViamVjdEFsdGVybmF0aXZlTmFtZXMucHVzaChwcm9wcy5kb21haW4pO1xuICAgIGlmIChwcm9wcy5zdWJEb21haW4pIHN1YmplY3RBbHRlcm5hdGl2ZU5hbWVzLnB1c2gocHJvcHMuc3ViRG9tYWluKTtcblxuICAgIGNvbnN0IHdlYnNpdGVDZXJ0ID0gbmV3IGFjbS5DZXJ0aWZpY2F0ZSh0aGlzLCAnV2Vic2l0ZUNlcnQnLCB7XG4gICAgICBkb21haW5OYW1lOiBwcm9wcy5ob3N0ZWRab25lLFxuICAgICAgc3ViamVjdEFsdGVybmF0aXZlTmFtZXMsXG4gICAgICB2YWxpZGF0aW9uOiBhY20uQ2VydGlmaWNhdGVWYWxpZGF0aW9uLmZyb21EbnMoaG9zdGVkWm9uZUxvb2t1cCksXG4gICAgfSk7XG5cbiAgICBjb25zdCB3ZWJzaXRlQnVja2V0ID0gbmV3IHMzLkJ1Y2tldChzY29wZSwgJ1dlYnNpdGVCdWNrZXQnLCB7XG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICAgIGVuY3J5cHRpb246IHMzLkJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRvbWFpbk5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChwcm9wcy5kb21haW4pIHtcbiAgICAgIGRvbWFpbk5hbWVzLnB1c2gocHJvcHMuZG9tYWluKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9tYWluTmFtZXMucHVzaChwcm9wcy5ob3N0ZWRab25lKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuc3ViRG9tYWluKSBkb21haW5OYW1lcy5wdXNoKHByb3BzLnN1YkRvbWFpbik7XG5cbiAgICAvLyBDcmVhdGUgYWNjZXNzIGxvZ3MgYnVja2V0IGlmIGxvZ2dpbmcgaXMgZW5hYmxlZCBidXQgbm8gYnVja2V0IHByb3ZpZGVkXG4gICAgY29uc3QgbG9nc0J1Y2tldCA9IHByb3BzLmVuYWJsZUxvZ2dpbmdcbiAgICAgID8gKHByb3BzLmxvZ3NCdWNrZXQgfHwgbmV3IHMzLkJ1Y2tldCh0aGlzLCAnQWNjZXNzTG9nc0J1Y2tldCcsIHtcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICAgICAgZW5jcnlwdGlvbjogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgICAgfSkpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8vIENyZWF0ZSBzZWN1cml0eSBoZWFkZXJzIHBvbGljeSBpZiBlbmFibGVkXG4gICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzUG9saWN5ID0gcHJvcHMuZW5hYmxlU2VjdXJpdHlIZWFkZXJzXG4gICAgICA/IG5ldyBjbG91ZGZyb250LlJlc3BvbnNlSGVhZGVyc1BvbGljeSh0aGlzLCAnU2VjdXJpdHlIZWFkZXJzUG9saWN5Jywge1xuICAgICAgICBzZWN1cml0eUhlYWRlcnNCZWhhdmlvcjoge1xuICAgICAgICAgIGNvbnRlbnRUeXBlT3B0aW9uczogeyBvdmVycmlkZTogdHJ1ZSB9LFxuICAgICAgICAgIGZyYW1lT3B0aW9uczogeyBmcmFtZU9wdGlvbjogY2xvdWRmcm9udC5IZWFkZXJzRnJhbWVPcHRpb24uREVOWSwgb3ZlcnJpZGU6IHRydWUgfSxcbiAgICAgICAgICByZWZlcnJlclBvbGljeTogeyByZWZlcnJlclBvbGljeTogY2xvdWRmcm9udC5IZWFkZXJzUmVmZXJyZXJQb2xpY3kuU1RSSUNUX09SSUdJTl9XSEVOX0NST1NTX09SSUdJTiwgb3ZlcnJpZGU6IHRydWUgfSxcbiAgICAgICAgICBzdHJpY3RUcmFuc3BvcnRTZWN1cml0eToge1xuICAgICAgICAgICAgYWNjZXNzQ29udHJvbE1heEFnZTogRHVyYXRpb24uc2Vjb25kcygzMTUzNjAwMCksXG4gICAgICAgICAgICBpbmNsdWRlU3ViZG9tYWluczogdHJ1ZSxcbiAgICAgICAgICAgIHByZWxvYWQ6IHRydWUsXG4gICAgICAgICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHhzc1Byb3RlY3Rpb246IHsgcHJvdGVjdGlvbjogdHJ1ZSwgbW9kZUJsb2NrOiB0cnVlLCBvdmVycmlkZTogdHJ1ZSB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgd2Vic2l0ZURpc3QgPSBuZXcgY2xvdWRmcm9udC5EaXN0cmlidXRpb24oc2NvcGUsICdXZWJzaXRlRGlzdCcsIHtcbiAgICAgIGRlZmF1bHRCZWhhdmlvcjoge1xuICAgICAgICBvcmlnaW46IG9yaWdpbnMuUzNCdWNrZXRPcmlnaW4ud2l0aE9yaWdpbkFjY2Vzc0NvbnRyb2wod2Vic2l0ZUJ1Y2tldCwge1xuICAgICAgICAgIG9yaWdpbkFjY2Vzc0xldmVsczogcHJvcHMub3JpZ2luQWNjZXNzTGV2ZWxzLFxuICAgICAgICB9KSxcbiAgICAgICAgYWxsb3dlZE1ldGhvZHM6IGNsb3VkZnJvbnQuQWxsb3dlZE1ldGhvZHMuQUxMT1dfR0VUX0hFQURfT1BUSU9OUyxcbiAgICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IGNsb3VkZnJvbnQuVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAgIGNhY2hlUG9saWN5OiBjbG91ZGZyb250LkNhY2hlUG9saWN5LkNBQ0hJTkdfT1BUSU1JWkVELFxuICAgICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5OiBjbG91ZGZyb250Lk9yaWdpblJlcXVlc3RQb2xpY3kuQ09SU19TM19PUklHSU4sXG4gICAgICAgIHJlc3BvbnNlSGVhZGVyc1BvbGljeSxcbiAgICAgICAgZnVuY3Rpb25Bc3NvY2lhdGlvbnM6IHByb3BzLmZ1bmN0aW9uQXNzb2NpYXRpb25zLFxuICAgICAgfSxcbiAgICAgIGFkZGl0aW9uYWxCZWhhdmlvcnM6IHByb3BzLmFkZGl0aW9uYWxCZWhhdmlvcnMsXG4gICAgICBtaW5pbXVtUHJvdG9jb2xWZXJzaW9uOiBjbG91ZGZyb250LlNlY3VyaXR5UG9saWN5UHJvdG9jb2wuVExTX1YxXzJfMjAyMSxcbiAgICAgIGh0dHBWZXJzaW9uOiBjbG91ZGZyb250Lkh0dHBWZXJzaW9uLkhUVFAyX0FORF8zLFxuICAgICAgcHJpY2VDbGFzczogcHJvcHMucHJpY2VDbGFzcyA/PyBjbG91ZGZyb250LlByaWNlQ2xhc3MuUFJJQ0VfQ0xBU1NfMTAwLFxuICAgICAgZXJyb3JSZXNwb25zZXMsXG4gICAgICBkZWZhdWx0Um9vdE9iamVjdDogcHJvcHMuaW5kZXhEb2MsXG4gICAgICBkb21haW5OYW1lcyxcbiAgICAgIGNlcnRpZmljYXRlOiB3ZWJzaXRlQ2VydCxcbiAgICAgIGxvZ0J1Y2tldDogbG9nc0J1Y2tldCxcbiAgICAgIGxvZ0luY2x1ZGVzQ29va2llczogZmFsc2UsXG4gICAgICB3ZWJBY2xJZDogcHJvcHMud2ViQWNsSWQsXG4gICAgfSk7XG5cbiAgICBuZXcgczNkZXBsb3kuQnVja2V0RGVwbG95bWVudChzY29wZSwgJ1dlYnNpdGVEZXBsb3knLCB7XG4gICAgICBzb3VyY2VzOiBbczNkZXBsb3kuU291cmNlLmFzc2V0KHByb3BzLndlYnNpdGVGb2xkZXIpXSxcbiAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiB3ZWJzaXRlQnVja2V0LFxuICAgICAgZGlzdHJpYnV0aW9uOiB3ZWJzaXRlRGlzdCxcbiAgICB9KTtcblxuICAgIG5ldyByb3V0ZTUzLkFSZWNvcmQoc2NvcGUsICdXZWJzaXRlRG9tYWluQWxpYXMnLCB7XG4gICAgICB6b25lOiBob3N0ZWRab25lTG9va3VwLFxuICAgICAgcmVjb3JkTmFtZTogcHJvcHMuZG9tYWluID8gcHJvcHMuZG9tYWluIDogcHJvcHMuaG9zdGVkWm9uZSxcbiAgICAgIHRhcmdldDogcm91dGU1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICBuZXcgdGFyZ2V0cy5DbG91ZEZyb250VGFyZ2V0KHdlYnNpdGVEaXN0KSxcbiAgICAgICksXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgSVB2NiBzdXBwb3J0IGlmIGVuYWJsZWRcbiAgICBpZiAocHJvcHMuZW5hYmxlSXB2Nikge1xuICAgICAgbmV3IHJvdXRlNTMuQWFhYVJlY29yZChzY29wZSwgJ1dlYnNpdGVEb21haW5BbGlhc0lwdjYnLCB7XG4gICAgICAgIHpvbmU6IGhvc3RlZFpvbmVMb29rdXAsXG4gICAgICAgIHJlY29yZE5hbWU6IHByb3BzLmRvbWFpbiA/IHByb3BzLmRvbWFpbiA6IHByb3BzLmhvc3RlZFpvbmUsXG4gICAgICAgIHRhcmdldDogcm91dGU1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICAgIG5ldyB0YXJnZXRzLkNsb3VkRnJvbnRUYXJnZXQod2Vic2l0ZURpc3QpLFxuICAgICAgICApLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnN1YkRvbWFpbikge1xuICAgICAgbmV3IHJvdXRlNTMuQVJlY29yZChzY29wZSwgJ1dlYnNpdGVTdWJEb21haW5BbGlhcycsIHtcbiAgICAgICAgem9uZTogaG9zdGVkWm9uZUxvb2t1cCxcbiAgICAgICAgcmVjb3JkTmFtZTogcHJvcHMuc3ViRG9tYWluLFxuICAgICAgICB0YXJnZXQ6IHJvdXRlNTMuUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgICBuZXcgdGFyZ2V0cy5DbG91ZEZyb250VGFyZ2V0KHdlYnNpdGVEaXN0KSxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBZGQgSVB2NiBzdXBwb3J0IGZvciBzdWJkb21haW4gaWYgZW5hYmxlZFxuICAgICAgaWYgKHByb3BzLmVuYWJsZUlwdjYpIHtcbiAgICAgICAgbmV3IHJvdXRlNTMuQWFhYVJlY29yZChzY29wZSwgJ1dlYnNpdGVTdWJEb21haW5BbGlhc0lwdjYnLCB7XG4gICAgICAgICAgem9uZTogaG9zdGVkWm9uZUxvb2t1cCxcbiAgICAgICAgICByZWNvcmROYW1lOiBwcm9wcy5zdWJEb21haW4sXG4gICAgICAgICAgdGFyZ2V0OiByb3V0ZTUzLlJlY29yZFRhcmdldC5mcm9tQWxpYXMoXG4gICAgICAgICAgICBuZXcgdGFyZ2V0cy5DbG91ZEZyb250VGFyZ2V0KHdlYnNpdGVEaXN0KSxcbiAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==