@rio-cloud/cdk-v2-constructs 6.2.2 → 6.3.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/.jsii CHANGED
@@ -6140,7 +6140,7 @@
6140
6140
  "kind": "interface",
6141
6141
  "locationInModule": {
6142
6142
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6143
- "line": 19
6143
+ "line": 20
6144
6144
  },
6145
6145
  "name": "GitLabRunnerProps",
6146
6146
  "properties": [
@@ -6152,7 +6152,22 @@
6152
6152
  "immutable": true,
6153
6153
  "locationInModule": {
6154
6154
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6155
- "line": 20
6155
+ "line": 24
6156
+ },
6157
+ "name": "cache",
6158
+ "type": {
6159
+ "fqn": "aws-cdk-lib.aws_s3.IBucket"
6160
+ }
6161
+ },
6162
+ {
6163
+ "abstract": true,
6164
+ "docs": {
6165
+ "stability": "stable"
6166
+ },
6167
+ "immutable": true,
6168
+ "locationInModule": {
6169
+ "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6170
+ "line": 21
6156
6171
  },
6157
6172
  "name": "env",
6158
6173
  "type": {
@@ -6167,7 +6182,7 @@
6167
6182
  "immutable": true,
6168
6183
  "locationInModule": {
6169
6184
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6170
- "line": 22
6185
+ "line": 23
6171
6186
  },
6172
6187
  "name": "managerInstanceType",
6173
6188
  "optional": true,
@@ -6183,17 +6198,12 @@
6183
6198
  "immutable": true,
6184
6199
  "locationInModule": {
6185
6200
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6186
- "line": 21
6201
+ "line": 22
6187
6202
  },
6188
6203
  "name": "runnersWorkerProps",
6189
6204
  "optional": true,
6190
6205
  "type": {
6191
- "collection": {
6192
- "elementtype": {
6193
- "fqn": "@rio-cloud/cdk-v2-constructs.GitlabRunnerWorkerProps"
6194
- },
6195
- "kind": "array"
6196
- }
6206
+ "fqn": "@rio-cloud/cdk-v2-constructs.GitlabRunnerWorkerProps"
6197
6207
  }
6198
6208
  }
6199
6209
  ],
@@ -6203,7 +6213,7 @@
6203
6213
  "assembly": "@rio-cloud/cdk-v2-constructs",
6204
6214
  "base": "constructs.Construct",
6205
6215
  "docs": {
6206
- "remarks": "By default, the construct will create a Runner with a manager T3 Micro instance which will be enabled to spawn T3 Large Runner\nworker spot instance. The default runner Role has only the permissions to upload and download from the S3 runner cache.\n\nminimal configuration with runner spot instance:\n```ts\nnew SpotServiceLinkedRole(stack, 'SpotLinkedRole');\nnew GitlabRunner(stack, 'GitLabRunner', {\n env: {account: '123456789012', region: 'eu-west-1'}\n});\n```\nrecommended:\n```ts\nnew SpotServiceLinkedRole(stack, 'SpotLinkedRole');\nconst runnerRoles = new RunnerRoles(stack, 'RunnerRoles', {env: {account: '123456789012', region: 'eu-west-1'}});\nnew GitlabRunner(stack, 'GitLabRunner', {\n env: {account: '123456789012', region: 'eu-west-1'},\n runnersWorkerProps: [\n {\n token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power\n gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab\n instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner\n spotPrice: 0.2, // exemplary spot price\n requestSpotPrice: true,\n defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role\n },\n {\n token: myTokenForTaggedRunner2, // with this runner we want to run all generic jobs that do not require much processing power\n gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab\n instanceType: InstanceType.of(InstanceClass.T3, InstanceSize.MEDIUM), // exemplary smaller runner\n spotPrice: 0.044, // exemplary spot price\n requestSpotPrice: true,\n defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role\n },\n ],\n});\n```",
6216
+ "remarks": "By default, the construct will create a Runner with a manager T3 Micro instance which will be enabled to spawn T3 Large Runner\nworker spot instance. The default runner Role has only the permissions to upload and download from the S3 runner cache.\n\nminimal configuration with runner spot instance:\n```ts\nnew SpotServiceLinkedRole(stack, 'SpotLinkedRole');\nconst myBucket = new Bucket(stack, 'MyShareRunnerCache', {\n enforceSSL: true,\n publicReadAccess: false,\n encryption: BucketEncryption.S3_MANAGED,\n lifecycleRules: [\n {\n enabled: true,\n expiration: Duration.days(30),\n },\n ],\n });\nnew GitlabRunner(stack, 'GitLabRunner', {\n env: {account: '123456789012', region: 'eu-west-1'},\n cache: myBucket // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners\n});\n```\nrecommended:\n```ts\nnew SpotServiceLinkedRole(stack, 'SpotLinkedRole');\nconst runnerRoles = new RunnerRoles(stack, 'RunnerRoles', {env: {account: '123456789012', region: 'eu-west-1'}});\nconst myBucket = new Bucket(stack, 'MyShareRunnerCache', {\n enforceSSL: true,\n publicReadAccess: false,\n encryption: BucketEncryption.S3_MANAGED,\n lifecycleRules: [\n {\n enabled: true,\n expiration: Duration.days(30),\n },\n ],\n });\nnew GitlabRunner(stack, 'GitLabRunner', {\n env: {account: '123456789012', region: 'eu-west-1'},\n cache: myBucket // // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners\n runnersWorkerProps: {\n token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power\n gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab\n instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner\n spotPrice: 0.2, // exemplary spot price\n requestSpotPrice: true,\n defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role\n },\n});\n```",
6207
6217
  "stability": "stable",
6208
6218
  "summary": "The construct create the GitLabRunner Manager instance which will autoscale Runner instances based on the configuration."
6209
6219
  },
@@ -6214,7 +6224,7 @@
6214
6224
  },
6215
6225
  "locationInModule": {
6216
6226
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6217
- "line": 102
6227
+ "line": 116
6218
6228
  },
6219
6229
  "parameters": [
6220
6230
  {
@@ -6240,7 +6250,7 @@
6240
6250
  "kind": "class",
6241
6251
  "locationInModule": {
6242
6252
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6243
- "line": 95
6253
+ "line": 111
6244
6254
  },
6245
6255
  "name": "GitlabRunner",
6246
6256
  "symbolId": "src/contributions/smart-route/gitlab-runner/autoscaling-runner:GitlabRunner"
@@ -6257,7 +6267,7 @@
6257
6267
  "kind": "interface",
6258
6268
  "locationInModule": {
6259
6269
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6260
- "line": 31
6270
+ "line": 33
6261
6271
  },
6262
6272
  "name": "GitlabRunnerWorkerProps",
6263
6273
  "properties": [
@@ -6270,7 +6280,7 @@
6270
6280
  "immutable": true,
6271
6281
  "locationInModule": {
6272
6282
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6273
- "line": 43
6283
+ "line": 45
6274
6284
  },
6275
6285
  "name": "defaultWorkerRole",
6276
6286
  "type": {
@@ -6286,7 +6296,7 @@
6286
6296
  "immutable": true,
6287
6297
  "locationInModule": {
6288
6298
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6289
- "line": 35
6299
+ "line": 37
6290
6300
  },
6291
6301
  "name": "gitInstanceUrl",
6292
6302
  "type": {
@@ -6302,7 +6312,7 @@
6302
6312
  "immutable": true,
6303
6313
  "locationInModule": {
6304
6314
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6305
- "line": 37
6315
+ "line": 39
6306
6316
  },
6307
6317
  "name": "instanceType",
6308
6318
  "type": {
@@ -6318,7 +6328,7 @@
6318
6328
  "immutable": true,
6319
6329
  "locationInModule": {
6320
6330
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6321
- "line": 41
6331
+ "line": 43
6322
6332
  },
6323
6333
  "name": "requestSpotPrice",
6324
6334
  "type": {
@@ -6334,7 +6344,7 @@
6334
6344
  "immutable": true,
6335
6345
  "locationInModule": {
6336
6346
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6337
- "line": 39
6347
+ "line": 41
6338
6348
  },
6339
6349
  "name": "spotPrice",
6340
6350
  "type": {
@@ -6350,7 +6360,7 @@
6350
6360
  "immutable": true,
6351
6361
  "locationInModule": {
6352
6362
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6353
- "line": 33
6363
+ "line": 35
6354
6364
  },
6355
6365
  "name": "token",
6356
6366
  "type": {
@@ -6367,7 +6377,7 @@
6367
6377
  "immutable": true,
6368
6378
  "locationInModule": {
6369
6379
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6370
- "line": 45
6380
+ "line": 47
6371
6381
  },
6372
6382
  "name": "maxBuilds",
6373
6383
  "optional": true,
@@ -6385,7 +6395,7 @@
6385
6395
  "immutable": true,
6386
6396
  "locationInModule": {
6387
6397
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6388
- "line": 47
6398
+ "line": 49
6389
6399
  },
6390
6400
  "name": "maxIdleInstance",
6391
6401
  "optional": true,
@@ -6403,7 +6413,7 @@
6403
6413
  "immutable": true,
6404
6414
  "locationInModule": {
6405
6415
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6406
- "line": 49
6416
+ "line": 51
6407
6417
  },
6408
6418
  "name": "maxIdleTime",
6409
6419
  "optional": true,
@@ -16728,5 +16738,5 @@
16728
16738
  }
16729
16739
  },
16730
16740
  "version": "0.0.0",
16731
- "fingerprint": "rzGg3npyOR1/DDc02aMZX7iKNdxl68n9K1t+ii5Zskw="
16741
+ "fingerprint": "vkv0ByaY8bMTd8OsR9NHooh1ytKdvwQivH2W8ggVLS4="
16732
16742
  }
package/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
4
4
 
5
+ ## [6.3.0](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.2.2&sourceBranch=refs%2Ftags%2Fv6.3.0) (2024-07-23)
6
+
7
+
8
+ ### Features
9
+
10
+ * adjust gitlab runner construct to handle new registration process and change worker props since now one manager can only handle one runner group ([f744213](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/commits/f74421342e21729a4b8732e4913ad31d93f0d818))
11
+
5
12
  ## [6.2.2](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.2.1&sourceBranch=refs%2Ftags%2Fv6.2.2) (2024-07-19)
6
13
 
7
14
  ## [6.2.1](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.2.0&sourceBranch=refs%2Ftags%2Fv6.2.1) (2024-07-19)
package/docs/API.md CHANGED
@@ -2497,34 +2497,48 @@ worker spot instance. The default runner Role has only the permissions to upload
2497
2497
  minimal configuration with runner spot instance:
2498
2498
  ```ts
2499
2499
  new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
2500
+ const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
2501
+ enforceSSL: true,
2502
+ publicReadAccess: false,
2503
+ encryption: BucketEncryption.S3_MANAGED,
2504
+ lifecycleRules: [
2505
+ {
2506
+ enabled: true,
2507
+ expiration: Duration.days(30),
2508
+ },
2509
+ ],
2510
+ });
2500
2511
  new GitlabRunner(stack, 'GitLabRunner', {
2501
- env: {account: '123456789012', region: 'eu-west-1'}
2512
+ env: {account: '123456789012', region: 'eu-west-1'},
2513
+ cache: myBucket // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
2502
2514
  });
2503
2515
  ```
2504
2516
  recommended:
2505
2517
  ```ts
2506
2518
  new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
2507
2519
  const runnerRoles = new RunnerRoles(stack, 'RunnerRoles', {env: {account: '123456789012', region: 'eu-west-1'}});
2520
+ const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
2521
+ enforceSSL: true,
2522
+ publicReadAccess: false,
2523
+ encryption: BucketEncryption.S3_MANAGED,
2524
+ lifecycleRules: [
2525
+ {
2526
+ enabled: true,
2527
+ expiration: Duration.days(30),
2528
+ },
2529
+ ],
2530
+ });
2508
2531
  new GitlabRunner(stack, 'GitLabRunner', {
2509
2532
  env: {account: '123456789012', region: 'eu-west-1'},
2510
- runnersWorkerProps: [
2511
- {
2512
- token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power
2513
- gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
2514
- instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner
2515
- spotPrice: 0.2, // exemplary spot price
2516
- requestSpotPrice: true,
2517
- defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
2518
- },
2519
- {
2520
- token: myTokenForTaggedRunner2, // with this runner we want to run all generic jobs that do not require much processing power
2521
- gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
2522
- instanceType: InstanceType.of(InstanceClass.T3, InstanceSize.MEDIUM), // exemplary smaller runner
2523
- spotPrice: 0.044, // exemplary spot price
2524
- requestSpotPrice: true,
2525
- defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
2526
- },
2527
- ],
2533
+ cache: myBucket // // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
2534
+ runnersWorkerProps: {
2535
+ token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power
2536
+ gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
2537
+ instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner
2538
+ spotPrice: 0.2, // exemplary spot price
2539
+ requestSpotPrice: true,
2540
+ defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
2541
+ },
2528
2542
  });
2529
2543
  ```
2530
2544
 
@@ -9959,9 +9973,20 @@ const gitLabRunnerProps: GitLabRunnerProps = { ... }
9959
9973
 
9960
9974
  | **Name** | **Type** | **Description** |
9961
9975
  | --- | --- | --- |
9976
+ | <code><a href="#@rio-cloud/cdk-v2-constructs.GitLabRunnerProps.property.cache">cache</a></code> | <code>aws-cdk-lib.aws_s3.IBucket</code> | *No description.* |
9962
9977
  | <code><a href="#@rio-cloud/cdk-v2-constructs.GitLabRunnerProps.property.env">env</a></code> | <code>aws-cdk-lib.Environment</code> | *No description.* |
9963
9978
  | <code><a href="#@rio-cloud/cdk-v2-constructs.GitLabRunnerProps.property.managerInstanceType">managerInstanceType</a></code> | <code>aws-cdk-lib.aws_ec2.InstanceType</code> | *No description.* |
9964
- | <code><a href="#@rio-cloud/cdk-v2-constructs.GitLabRunnerProps.property.runnersWorkerProps">runnersWorkerProps</a></code> | <code><a href="#@rio-cloud/cdk-v2-constructs.GitlabRunnerWorkerProps">GitlabRunnerWorkerProps</a>[]</code> | *No description.* |
9979
+ | <code><a href="#@rio-cloud/cdk-v2-constructs.GitLabRunnerProps.property.runnersWorkerProps">runnersWorkerProps</a></code> | <code><a href="#@rio-cloud/cdk-v2-constructs.GitlabRunnerWorkerProps">GitlabRunnerWorkerProps</a></code> | *No description.* |
9980
+
9981
+ ---
9982
+
9983
+ ##### `cache`<sup>Required</sup> <a name="cache" id="@rio-cloud/cdk-v2-constructs.GitLabRunnerProps.property.cache"></a>
9984
+
9985
+ ```typescript
9986
+ public readonly cache: IBucket;
9987
+ ```
9988
+
9989
+ - *Type:* aws-cdk-lib.aws_s3.IBucket
9965
9990
 
9966
9991
  ---
9967
9992
 
@@ -9988,10 +10013,10 @@ public readonly managerInstanceType: InstanceType;
9988
10013
  ##### `runnersWorkerProps`<sup>Optional</sup> <a name="runnersWorkerProps" id="@rio-cloud/cdk-v2-constructs.GitLabRunnerProps.property.runnersWorkerProps"></a>
9989
10014
 
9990
10015
  ```typescript
9991
- public readonly runnersWorkerProps: GitlabRunnerWorkerProps[];
10016
+ public readonly runnersWorkerProps: GitlabRunnerWorkerProps;
9992
10017
  ```
9993
10018
 
9994
- - *Type:* <a href="#@rio-cloud/cdk-v2-constructs.GitlabRunnerWorkerProps">GitlabRunnerWorkerProps</a>[]
10019
+ - *Type:* <a href="#@rio-cloud/cdk-v2-constructs.GitlabRunnerWorkerProps">GitlabRunnerWorkerProps</a>
9995
10020
 
9996
10021
  ---
9997
10022
 
@@ -1,6 +1,7 @@
1
1
  import { Environment, Stack } from 'aws-cdk-lib';
2
2
  import { InstanceType } from 'aws-cdk-lib/aws-ec2';
3
3
  import { IRole } from 'aws-cdk-lib/aws-iam';
4
+ import { IBucket } from 'aws-cdk-lib/aws-s3';
4
5
  import { IStringParameter } from 'aws-cdk-lib/aws-ssm';
5
6
  import { Construct } from 'constructs';
6
7
  /**
@@ -10,8 +11,9 @@ import { Construct } from 'constructs';
10
11
  */
11
12
  export interface GitLabRunnerProps {
12
13
  readonly env: Environment;
13
- readonly runnersWorkerProps?: GitlabRunnerWorkerProps[];
14
+ readonly runnersWorkerProps?: GitlabRunnerWorkerProps;
14
15
  readonly managerInstanceType?: InstanceType;
16
+ readonly cache: IBucket;
15
17
  }
16
18
  /**
17
19
  * The GitlabRunnerWorkerProps interface provides a simplified GitLab Runner worker configuration
@@ -48,34 +50,48 @@ export type GitlabInstanceUrl = 'https://gitlab.cicd.man' | 'https://gitlab.coll
48
50
  * minimal configuration with runner spot instance:
49
51
  * ```ts
50
52
  * new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
53
+ * const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
54
+ * enforceSSL: true,
55
+ * publicReadAccess: false,
56
+ * encryption: BucketEncryption.S3_MANAGED,
57
+ * lifecycleRules: [
58
+ * {
59
+ * enabled: true,
60
+ * expiration: Duration.days(30),
61
+ * },
62
+ * ],
63
+ * });
51
64
  * new GitlabRunner(stack, 'GitLabRunner', {
52
- * env: {account: '123456789012', region: 'eu-west-1'}
65
+ * env: {account: '123456789012', region: 'eu-west-1'},
66
+ * cache: myBucket // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
53
67
  * });
54
68
  *```
55
69
  * recommended:
56
70
  * ```ts
57
71
  * new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
58
72
  * const runnerRoles = new RunnerRoles(stack, 'RunnerRoles', {env: {account: '123456789012', region: 'eu-west-1'}});
73
+ * const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
74
+ * enforceSSL: true,
75
+ * publicReadAccess: false,
76
+ * encryption: BucketEncryption.S3_MANAGED,
77
+ * lifecycleRules: [
78
+ * {
79
+ * enabled: true,
80
+ * expiration: Duration.days(30),
81
+ * },
82
+ * ],
83
+ * });
59
84
  * new GitlabRunner(stack, 'GitLabRunner', {
60
85
  * env: {account: '123456789012', region: 'eu-west-1'},
61
- * runnersWorkerProps: [
62
- * {
63
- * token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power
64
- * gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
65
- * instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner
66
- * spotPrice: 0.2, // exemplary spot price
67
- * requestSpotPrice: true,
68
- * defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
69
- * },
70
- * {
71
- * token: myTokenForTaggedRunner2, // with this runner we want to run all generic jobs that do not require much processing power
72
- * gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
73
- * instanceType: InstanceType.of(InstanceClass.T3, InstanceSize.MEDIUM), // exemplary smaller runner
74
- * spotPrice: 0.044, // exemplary spot price
75
- * requestSpotPrice: true,
76
- * defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
77
- * },
78
- * ],
86
+ * cache: myBucket // // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
87
+ * runnersWorkerProps: {
88
+ * token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power
89
+ * gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
90
+ * instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner
91
+ * spotPrice: 0.2, // exemplary spot price
92
+ * requestSpotPrice: true,
93
+ * defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
94
+ * },
79
95
  * });
80
96
  * ```
81
97
  */
@@ -17,121 +17,135 @@ const rio_landing_zone_1 = require("../../../rio-landing-zone");
17
17
  * minimal configuration with runner spot instance:
18
18
  * ```ts
19
19
  * new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
20
+ * const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
21
+ * enforceSSL: true,
22
+ * publicReadAccess: false,
23
+ * encryption: BucketEncryption.S3_MANAGED,
24
+ * lifecycleRules: [
25
+ * {
26
+ * enabled: true,
27
+ * expiration: Duration.days(30),
28
+ * },
29
+ * ],
30
+ * });
20
31
  * new GitlabRunner(stack, 'GitLabRunner', {
21
- * env: {account: '123456789012', region: 'eu-west-1'}
32
+ * env: {account: '123456789012', region: 'eu-west-1'},
33
+ * cache: myBucket // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
22
34
  * });
23
35
  *```
24
36
  * recommended:
25
37
  * ```ts
26
38
  * new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
27
39
  * const runnerRoles = new RunnerRoles(stack, 'RunnerRoles', {env: {account: '123456789012', region: 'eu-west-1'}});
40
+ * const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
41
+ * enforceSSL: true,
42
+ * publicReadAccess: false,
43
+ * encryption: BucketEncryption.S3_MANAGED,
44
+ * lifecycleRules: [
45
+ * {
46
+ * enabled: true,
47
+ * expiration: Duration.days(30),
48
+ * },
49
+ * ],
50
+ * });
28
51
  * new GitlabRunner(stack, 'GitLabRunner', {
29
52
  * env: {account: '123456789012', region: 'eu-west-1'},
30
- * runnersWorkerProps: [
31
- * {
32
- * token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power
33
- * gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
34
- * instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner
35
- * spotPrice: 0.2, // exemplary spot price
36
- * requestSpotPrice: true,
37
- * defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
38
- * },
39
- * {
40
- * token: myTokenForTaggedRunner2, // with this runner we want to run all generic jobs that do not require much processing power
41
- * gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
42
- * instanceType: InstanceType.of(InstanceClass.T3, InstanceSize.MEDIUM), // exemplary smaller runner
43
- * spotPrice: 0.044, // exemplary spot price
44
- * requestSpotPrice: true,
45
- * defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
46
- * },
47
- * ],
53
+ * cache: myBucket // // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
54
+ * runnersWorkerProps: {
55
+ * token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power
56
+ * gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
57
+ * instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner
58
+ * spotPrice: 0.2, // exemplary spot price
59
+ * requestSpotPrice: true,
60
+ * defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
61
+ * },
48
62
  * });
49
63
  * ```
50
64
  */
51
65
  class GitlabRunner extends constructs_1.Construct {
52
66
  constructor(scope, id, props) {
53
67
  super(scope, id);
54
- this.autoscalingConfig = [
55
- {
56
- periods: ['* * 7-24 * * mon-fri *'],
68
+ this.autoscalingConfig = [{
69
+ periods: ['* * 7-22 * * mon-fri *'],
57
70
  timezone: 'Europe/Berlin',
58
- },
59
- ];
71
+ }];
60
72
  const vpc = rio_landing_zone_1.RioLandingZone.getDefaultVpc(scope);
61
73
  const runnerConfig = props.runnersWorkerProps
62
74
  ? this.createWorkerConfigurations(props.runnersWorkerProps, props.env)
63
75
  : this.getDefaultRunnerWorkerConfig(props.env);
64
76
  const managerInstance = props.managerInstanceType ??
65
77
  aws_ec2_1.InstanceType.of(aws_ec2_1.InstanceClass.T3, aws_ec2_1.InstanceSize.MICRO);
66
- new cdk_autoscaling_gitlab_runner_1.GitlabRunnerAutoscaling(scope, `GLR${scope.stackName}`, {
67
- runners: runnerConfig,
78
+ const runner = new cdk_autoscaling_gitlab_runner_1.GitlabRunnerAutoscaling(scope, `GLR${scope.stackName}`, {
79
+ runners: [runnerConfig],
68
80
  network: {
69
81
  vpc: vpc,
70
82
  },
71
83
  manager: {
72
84
  instanceType: managerInstance,
73
85
  },
86
+ cache: { bucket: props.cache },
74
87
  checkInterval: 30, // check every 30s for pending jobs
75
88
  concurrent: 300, // Global limit of concurrent jobs,
76
89
  });
90
+ // due to the new registration process we have to register the runner by running explicit commands on start of the manager
91
+ runner.manager.userData.addCommands('cp /etc/gitlab-runner/config.toml /etc/gitlab-runner/config_back.toml', // avoid toml merge conflicts
92
+ `gitlab-runner register --non-interactive --template-config /etc/gitlab-runner/config_back.toml --token ${props.runnersWorkerProps?.token.stringValue}`, 'gitlab-runner restart');
77
93
  }
78
94
  createWorkerConfigurations(workerProps, env) {
79
- return workerProps.map((val) => ({
80
- token: val.token,
81
- role: val.defaultWorkerRole,
95
+ return {
96
+ token: workerProps.token,
97
+ role: workerProps.defaultWorkerRole,
82
98
  configuration: {
83
- url: val.gitInstanceUrl,
99
+ url: workerProps.gitInstanceUrl,
84
100
  machine: {
85
101
  autoscaling: this.autoscalingConfig,
86
- maxBuilds: val.maxBuilds ?? 10,
87
- idleCount: val.maxIdleInstance ?? 5,
88
- idleTime: val.maxIdleTime ?? 900,
102
+ maxBuilds: workerProps.maxBuilds ?? 10,
103
+ idleCount: workerProps.maxIdleInstance ?? 5,
104
+ idleTime: workerProps.maxIdleTime ?? 900,
89
105
  machineOptions: {
90
- requestSpotInstance: val.requestSpotPrice,
91
- spotPrice: val.spotPrice,
106
+ requestSpotInstance: workerProps.requestSpotPrice,
107
+ spotPrice: workerProps.spotPrice,
92
108
  },
93
109
  },
94
110
  environment: [
95
111
  'DOCKER_DRIVER=overlay2',
96
112
  'DOCKER_TLS_DIRCE=/certs',
97
- `DOCKER_AUTH_CONFIG={"credHelpers": { "public.ecr.aws": "ecr-login", "${env.account}.dkr.ecr.<region>.amazonaws.com": "ecr-login" } }`,
113
+ `DOCKER_AUTH_CONFIG={"credHelpers": { "public.ecr.aws": "ecr-login", "${env.account}.dkr.ecr.${env.region}.amazonaws.com": "ecr-login" } }`,
98
114
  ],
99
115
  },
100
- instanceType: val.instanceType,
101
- }));
116
+ instanceType: workerProps.instanceType,
117
+ };
102
118
  }
103
119
  getDefaultRunnerWorkerConfig(env) {
104
120
  const gitLabRunnerTokenParameter = aws_ssm_1.StringParameter.fromStringParameterAttributes(this, 'RunnerToken', {
105
121
  parameterName: '/config/gitlab-runner-cdk/token',
106
122
  });
107
- return [
108
- {
109
- token: gitLabRunnerTokenParameter,
110
- configuration: {
111
- url: 'https://gitlab.cicd.man',
112
- limit: 0,
113
- machine: {
114
- maxBuilds: 10,
115
- autoscaling: this.autoscalingConfig,
116
- idleCount: 5,
117
- idleTime: 900,
118
- machineOptions: {
119
- requestSpotInstance: true,
120
- spotPrice: 0.09,
121
- },
123
+ return {
124
+ token: gitLabRunnerTokenParameter,
125
+ configuration: {
126
+ url: 'https://gitlab.cicd.man',
127
+ limit: 0,
128
+ machine: {
129
+ maxBuilds: 10,
130
+ autoscaling: this.autoscalingConfig,
131
+ idleCount: 5,
132
+ idleTime: 900,
133
+ machineOptions: {
134
+ requestSpotInstance: true,
135
+ spotPrice: 0.09,
122
136
  },
123
- environment: [
124
- 'DOCKER_DRIVER=overlay2',
125
- 'DOCKER_TLS_DIRCE=/certs',
126
- `DOCKER_AUTH_CONFIG={"credHelpers": { "public.ecr.aws": "ecr-login", "${env.account}.dkr.ecr.<region>.amazonaws.com": "ecr-login" } }`,
127
- ],
128
137
  },
129
- instanceType: aws_ec2_1.InstanceType.of(aws_ec2_1.InstanceClass.T3, aws_ec2_1.InstanceSize.LARGE),
138
+ environment: [
139
+ 'DOCKER_DRIVER=overlay2',
140
+ 'DOCKER_TLS_DIRCE=/certs',
141
+ `DOCKER_AUTH_CONFIG={"credHelpers": { "public.ecr.aws": "ecr-login", "${env.account}.dkr.ecr.${env.region}.amazonaws.com": "ecr-login" } }`,
142
+ ],
130
143
  },
131
- ];
144
+ instanceType: aws_ec2_1.InstanceType.of(aws_ec2_1.InstanceClass.T3, aws_ec2_1.InstanceSize.LARGE),
145
+ };
132
146
  }
133
147
  }
134
148
  exports.GitlabRunner = GitlabRunner;
135
149
  _a = JSII_RTTI_SYMBOL_1;
136
150
  GitlabRunner[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.GitlabRunner", version: "0.0.0" };
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b3NjYWxpbmctcnVubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvc21hcnQtcm91dGUvZ2l0bGFiLXJ1bm5lci9hdXRvc2NhbGluZy1ydW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2REFBNkQ7QUFDN0QsNEZBSWtEO0FBRWxELGlEQUFnRjtBQUVoRixpREFBd0U7QUFDeEUsMkNBQXVDO0FBQ3ZDLGdFQUEyRDtBQTRDM0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0NHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsc0JBQVM7SUFPekMsWUFBWSxLQUFZLEVBQUUsRUFBVSxFQUFFLEtBQXdCO1FBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFQWCxzQkFBaUIsR0FBK0I7WUFDdEQ7Z0JBQ0UsT0FBTyxFQUFFLENBQUMsd0JBQXdCLENBQUM7Z0JBQ25DLFFBQVEsRUFBRSxlQUFlO2FBQzFCO1NBQ0YsQ0FBQztRQUlBLE1BQU0sR0FBRyxHQUFHLGlDQUFjLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWhELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxrQkFBa0I7WUFDM0MsQ0FBQyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUN0RSxDQUFDLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVqRCxNQUFNLGVBQWUsR0FDbkIsS0FBSyxDQUFDLG1CQUFtQjtZQUN6QixzQkFBWSxDQUFDLEVBQUUsQ0FBQyx1QkFBYSxDQUFDLEVBQUUsRUFBRSxzQkFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXhELElBQUksdURBQXVCLENBQUMsS0FBSyxFQUFFLE1BQU0sS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQzFELE9BQU8sRUFBRSxZQUFZO1lBQ3JCLE9BQU8sRUFBRTtnQkFDUCxHQUFHLEVBQUUsR0FBRzthQUNUO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLFlBQVksRUFBRSxlQUFlO2FBQzlCO1lBQ0QsYUFBYSxFQUFFLEVBQUUsRUFBRSxtQ0FBbUM7WUFDdEQsVUFBVSxFQUFFLEdBQUcsRUFBRSxtQ0FBbUM7U0FDckQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLDBCQUEwQixDQUNoQyxXQUFzQyxFQUN0QyxHQUFnQjtRQUVoQixPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDL0IsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO1lBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsaUJBQWlCO1lBQzNCLGFBQWEsRUFBRTtnQkFDYixHQUFHLEVBQUUsR0FBRyxDQUFDLGNBQWM7Z0JBQ3ZCLE9BQU8sRUFBRTtvQkFDUCxXQUFXLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtvQkFDbkMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLElBQUksRUFBRTtvQkFDOUIsU0FBUyxFQUFFLEdBQUcsQ0FBQyxlQUFlLElBQUksQ0FBQztvQkFDbkMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxXQUFXLElBQUksR0FBRztvQkFDaEMsY0FBYyxFQUFFO3dCQUNkLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxnQkFBZ0I7d0JBQ3pDLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztxQkFDekI7aUJBQ0Y7Z0JBQ0QsV0FBVyxFQUFFO29CQUNYLHdCQUF3QjtvQkFDeEIseUJBQXlCO29CQUN6Qix3RUFDRSxHQUFHLENBQUMsT0FDTixtREFBbUQ7aUJBQ3BEO2FBQ0Y7WUFDRCxZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVk7U0FDL0IsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRU8sNEJBQTRCLENBQ2xDLEdBQWdCO1FBRWhCLE1BQU0sMEJBQTBCLEdBQzlCLHlCQUFlLENBQUMsNkJBQTZCLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNqRSxhQUFhLEVBQUUsaUNBQWlDO1NBQ2pELENBQUMsQ0FBQztRQUNMLE9BQU87WUFDTDtnQkFDRSxLQUFLLEVBQUUsMEJBQTBCO2dCQUNqQyxhQUFhLEVBQUU7b0JBQ2IsR0FBRyxFQUFFLHlCQUF5QjtvQkFDOUIsS0FBSyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFNBQVMsRUFBRSxFQUFFO3dCQUNiLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCO3dCQUNuQyxTQUFTLEVBQUUsQ0FBQzt3QkFDWixRQUFRLEVBQUUsR0FBRzt3QkFDYixjQUFjLEVBQUU7NEJBQ2QsbUJBQW1CLEVBQUUsSUFBSTs0QkFDekIsU0FBUyxFQUFFLElBQUk7eUJBQ2hCO3FCQUNGO29CQUNELFdBQVcsRUFBRTt3QkFDWCx3QkFBd0I7d0JBQ3hCLHlCQUF5Qjt3QkFDekIsd0VBQ0UsR0FBRyxDQUFDLE9BQ04sbURBQW1EO3FCQUNwRDtpQkFDRjtnQkFDRCxZQUFZLEVBQUUsc0JBQVksQ0FBQyxFQUFFLENBQUMsdUJBQWEsQ0FBQyxFQUFFLEVBQUUsc0JBQVksQ0FBQyxLQUFLLENBQUM7YUFDcEU7U0FDRixDQUFDO0lBQ0osQ0FBQzs7QUFsR0gsb0NBbUdDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHtcbiAgQXV0b3NjYWxpbmdDb25maWd1cmF0aW9uLFxuICBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZyxcbiAgR2l0bGFiUnVubmVyQXV0b3NjYWxpbmdKb2JSdW5uZXJQcm9wcyxcbn0gZnJvbSAnQHBlcHBlcml6ZS9jZGstYXV0b3NjYWxpbmctZ2l0bGFiLXJ1bm5lcic7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBJbnN0YW5jZUNsYXNzLCBJbnN0YW5jZVNpemUsIEluc3RhbmNlVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgSVJvbGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IElTdHJpbmdQYXJhbWV0ZXIsIFN0cmluZ1BhcmFtZXRlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBSaW9MYW5kaW5nWm9uZSB9IGZyb20gJy4uLy4uLy4uL3Jpby1sYW5kaW5nLXpvbmUnO1xuXG4vKipcbiAqIFRoZSBHaXRMYWJSdW5uZXJQcm9wcyByZXF1aXJlIHRoZSBWUEMgSUQsIGEgZGVmaW5lZCBlbnZpcm9ubWVudCBvZiBhY2NvdW50IGFuZCByZWdpb24sIG9wdGlvbmFsXG4gKiBydW5uZXIgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uYWxseSB0aGUgR2l0TGFiIFJ1bm5lciBNYW5hZ2VyIGluc3RhbmNlIHR5cGUuIEJ5IGRlZmF1bHQsIGEgVDMgTWljcm8gaW5zdGFuY2Ugd2lsbCBiZSB1c2VkLlxuICogRm9yIGxhcmdlciB3b3JrbG9hZHMgYW5kIHZlcnkgYWN0aXZlIHRlYW1zIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBUMyBTbWFsbCBmb3IgdGhlIG1hbmFnZXIgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRMYWJSdW5uZXJQcm9wcyB7XG4gIHJlYWRvbmx5IGVudjogRW52aXJvbm1lbnQ7XG4gIHJlYWRvbmx5IHJ1bm5lcnNXb3JrZXJQcm9wcz86IEdpdGxhYlJ1bm5lcldvcmtlclByb3BzW107XG4gIHJlYWRvbmx5IG1hbmFnZXJJbnN0YW5jZVR5cGU/OiBJbnN0YW5jZVR5cGU7XG59XG5cbi8qKlxuICogVGhlIEdpdGxhYlJ1bm5lcldvcmtlclByb3BzIGludGVyZmFjZSBwcm92aWRlcyBhIHNpbXBsaWZpZWQgR2l0TGFiIFJ1bm5lciB3b3JrZXIgY29uZmlndXJhdGlvblxuICogcmVxdWlyaW5nIGEgdG9rZW4gYXMgYW4gU1NNIHBhcmFtZXRlciwgb25lIG9mIHRoZSB2YWxpZCBnaXRsYWIgVVJMcywgaW5zdGFuY2Ugb2YgeW91IGNob2ljZSwgdGhlIGRlc2lyZWQgbWF4IHNwb3QgcHJpY2UsXG4gKiB3aGV0aGVyIHRvIHVzZSBzcG90IGluc3RhbmNlIG9yIG5vdCBhbmQgYSBkZWZhdWx0IHJvbGUuXG4gKiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIFJ1bm5lclJvbGVzIGNvbnN0cnVjdCwgYW5kIGl0J3MgZXhwb3NlZCBkZWZhdWx0IHJ1bm5lciByb2xlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdpdGxhYlJ1bm5lcldvcmtlclByb3BzIHtcbiAgLyoqIFRoZSBTU00gU3RyaW5nUGFyYW1ldGVyIHdpdGggdGhlIHJlZ2lzdGVyZWQgcnVubmVyIHRva2VuICAqL1xuICByZWFkb25seSB0b2tlbjogSVN0cmluZ1BhcmFtZXRlcjtcbiAgLyoqIFRoZSBHaXRMYWIgaW5zdGFuY2UgVVJMLCBlaXRoZXIgaHR0cHM6Ly9naXRsYWIuY2ljZC5tYW4gb3IgaHR0cHM6Ly9naXRsYWIuY29sbGFib3JhdGlvbmxheWVyLXRyYXRvbi5jb20gKi9cbiAgcmVhZG9ubHkgZ2l0SW5zdGFuY2VVcmw6IEdpdGxhYkluc3RhbmNlVXJsO1xuICAvKiogVGhlIGluc3RhbmNlIHR5cGUgZm9yIHRoZSBydW5uZXIgd29ya2VyICovXG4gIHJlYWRvbmx5IGluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlO1xuICAvKiogVGhlIGRlc2lyZWQgbWF4IHNwb3QgcHJpY2UgKi9cbiAgcmVhZG9ubHkgc3BvdFByaWNlOiBudW1iZXI7XG4gIC8qKiBXaGV0aGVyIHRvIHVzZSBzcG90IGluc3RhbmNlIG9yIG5vdCwgUmVxdWlyZXMgU2VydmljZUxpbmtlZCBSb2xlIGZvciBFQzIgU3BvdCB0byBiZSBkZXBsb3llZCBpbiB0aGUgYWNjb3VudCAqL1xuICByZWFkb25seSByZXF1ZXN0U3BvdFByaWNlOiBib29sZWFuO1xuICAvKiogVGhlIGRlZmF1bHQgcm9sZSBmb3IgdGhlIHJ1bm5lciB3b3JrZXIgd2hlbiBzcGF3bmVkICovXG4gIHJlYWRvbmx5IGRlZmF1bHRXb3JrZXJSb2xlOiBJUm9sZTtcbiAgLyoqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBidWlsZHMgZm9yIGFuIGluc3RhbmNlIGJlZm9yZSBpdCBoYXMgdG8gYmUgZGVjb21taXNzaW9uZWQuIERlZmF1bHQgMTAgKi9cbiAgcmVhZG9ubHkgbWF4QnVpbGRzPzogbnVtYmVyO1xuICAvKiogVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RhbmNlcyB0byBrZWVwIGlkbGUgZm9yIG5ldyBpbmNvbWluZyBqb2JzLiBEZWZhdWx0IDUgKi9cbiAgcmVhZG9ubHkgbWF4SWRsZUluc3RhbmNlPzogbnVtYmVyO1xuICAvKiogVGhlIG1heGltdW0gaWRsZSB0aW1lIHNlY29uZHMgZm9yIGFuIGluc3RhbmNlLiBEZWZhdWx0IDkwMCBzZWNvbmRzICovXG4gIHJlYWRvbmx5IG1heElkbGVUaW1lPzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBHaXRsYWJJbnN0YW5jZVVybCA9XG4gIHwgJ2h0dHBzOi8vZ2l0bGFiLmNpY2QubWFuJ1xuICB8ICdodHRwczovL2dpdGxhYi5jb2xsYWJvcmF0aW9ubGF5ZXItdHJhdG9uLmNvbSc7XG5cbi8qKlxuICogVGhlIGNvbnN0cnVjdCBjcmVhdGUgdGhlIEdpdExhYlJ1bm5lciBNYW5hZ2VyIGluc3RhbmNlIHdoaWNoIHdpbGwgYXV0b3NjYWxlIFJ1bm5lciBpbnN0YW5jZXMgYmFzZWQgb24gdGhlIGNvbmZpZ3VyYXRpb24uXG4gKiBCeSBkZWZhdWx0LCB0aGUgY29uc3RydWN0IHdpbGwgY3JlYXRlIGEgUnVubmVyIHdpdGggYSBtYW5hZ2VyIFQzIE1pY3JvIGluc3RhbmNlIHdoaWNoIHdpbGwgYmUgZW5hYmxlZCB0byBzcGF3biBUMyBMYXJnZSBSdW5uZXJcbiAqIHdvcmtlciBzcG90IGluc3RhbmNlLiBUaGUgZGVmYXVsdCBydW5uZXIgUm9sZSBoYXMgb25seSB0aGUgcGVybWlzc2lvbnMgdG8gdXBsb2FkIGFuZCBkb3dubG9hZCBmcm9tIHRoZSBTMyBydW5uZXIgY2FjaGUuXG4gKlxuICogbWluaW1hbCBjb25maWd1cmF0aW9uIHdpdGggcnVubmVyIHNwb3QgaW5zdGFuY2U6XG4gKiBgYGB0c1xuICogbmV3IFNwb3RTZXJ2aWNlTGlua2VkUm9sZShzdGFjaywgJ1Nwb3RMaW5rZWRSb2xlJyk7XG4gKiBuZXcgR2l0bGFiUnVubmVyKHN0YWNrLCAnR2l0TGFiUnVubmVyJywge1xuICogIGVudjoge2FjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICdldS13ZXN0LTEnfVxuICogfSk7XG4gKmBgYFxuICogcmVjb21tZW5kZWQ6XG4gKiBgYGB0c1xuICogbmV3IFNwb3RTZXJ2aWNlTGlua2VkUm9sZShzdGFjaywgJ1Nwb3RMaW5rZWRSb2xlJyk7XG4gKiBjb25zdCBydW5uZXJSb2xlcyA9IG5ldyBSdW5uZXJSb2xlcyhzdGFjaywgJ1J1bm5lclJvbGVzJywge2Vudjoge2FjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICdldS13ZXN0LTEnfX0pO1xuICogbmV3IEdpdGxhYlJ1bm5lcihzdGFjaywgJ0dpdExhYlJ1bm5lcicsIHtcbiAqICBlbnY6IHthY2NvdW50OiAnMTIzNDU2Nzg5MDEyJywgcmVnaW9uOiAnZXUtd2VzdC0xJ30sXG4gKiAgcnVubmVyc1dvcmtlclByb3BzOiBbXG4gKiAgICB7XG4gKiAgICAgIHRva2VuOiBteVRva2VuRm9yVGFnZ2VkUnVubmVyMSwgLy8gd2l0aCB0aGlzIHJ1bm5lciB3ZSBvbmx5IHdhbnQgdG8gcnVuIGpvYnMgdGhhdCByZXF1aXJlIG1vcmUgcG93ZXJcbiAqICAgICAgZ2l0SW5zdGFuY2VVcmw6ICdodHRwczovL2dpdGxhYi5jaWNkLm1hbicsIC8vIG9yIHRoZSBUcmF0b24gR2l0TGFiXG4gKiAgICAgIGluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlLm9mKEluc3RhbmNlQ2xhc3MuTTdJX0ZMRVgsIEluc3RhbmNlU2l6ZS5YTEFSR0UpLCAvLyBleGVtcGxhcnkgbGFyZ2VyIHJ1bm5lclxuICogICAgICBzcG90UHJpY2U6IDAuMiwgLy8gZXhlbXBsYXJ5IHNwb3QgcHJpY2VcbiAqICAgICAgcmVxdWVzdFNwb3RQcmljZTogdHJ1ZSxcbiAqICAgICAgZGVmYXVsdFdvcmtlclJvbGU6IHJ1bm5lclJvbGVzLnJ1bm5lckJhc2VSb2xlLCAvLyB1c2UgdGhlIGJhc2Ugcm9sZVxuICogICAgfSxcbiAqICAgIHtcbiAqICAgICAgdG9rZW46IG15VG9rZW5Gb3JUYWdnZWRSdW5uZXIyLCAvLyB3aXRoIHRoaXMgcnVubmVyIHdlIHdhbnQgdG8gcnVuIGFsbCBnZW5lcmljIGpvYnMgdGhhdCBkbyBub3QgcmVxdWlyZSBtdWNoIHByb2Nlc3NpbmcgcG93ZXJcbiAqICAgICAgZ2l0SW5zdGFuY2VVcmw6ICdodHRwczovL2dpdGxhYi5jaWNkLm1hbicsIC8vIG9yIHRoZSBUcmF0b24gR2l0TGFiXG4gKiAgICAgIGluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlLm9mKEluc3RhbmNlQ2xhc3MuVDMsIEluc3RhbmNlU2l6ZS5NRURJVU0pLCAvLyBleGVtcGxhcnkgc21hbGxlciBydW5uZXJcbiAqICAgICAgc3BvdFByaWNlOiAwLjA0NCwgLy8gZXhlbXBsYXJ5IHNwb3QgcHJpY2VcbiAqICAgICAgcmVxdWVzdFNwb3RQcmljZTogdHJ1ZSxcbiAqICAgICAgZGVmYXVsdFdvcmtlclJvbGU6IHJ1bm5lclJvbGVzLnJ1bm5lckJhc2VSb2xlLCAvLyB1c2UgdGhlIGJhc2Ugcm9sZVxuICogICAgfSxcbiAqICBdLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEdpdGxhYlJ1bm5lciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHByaXZhdGUgYXV0b3NjYWxpbmdDb25maWc6IEF1dG9zY2FsaW5nQ29uZmlndXJhdGlvbltdID0gW1xuICAgIHtcbiAgICAgIHBlcmlvZHM6IFsnKiAqIDctMjQgKiAqIG1vbi1mcmkgKiddLFxuICAgICAgdGltZXpvbmU6ICdFdXJvcGUvQmVybGluJyxcbiAgICB9LFxuICBdO1xuICBjb25zdHJ1Y3RvcihzY29wZTogU3RhY2ssIGlkOiBzdHJpbmcsIHByb3BzOiBHaXRMYWJSdW5uZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB2cGMgPSBSaW9MYW5kaW5nWm9uZS5nZXREZWZhdWx0VnBjKHNjb3BlKTtcblxuICAgIGNvbnN0IHJ1bm5lckNvbmZpZyA9IHByb3BzLnJ1bm5lcnNXb3JrZXJQcm9wc1xuICAgICAgPyB0aGlzLmNyZWF0ZVdvcmtlckNvbmZpZ3VyYXRpb25zKHByb3BzLnJ1bm5lcnNXb3JrZXJQcm9wcywgcHJvcHMuZW52KVxuICAgICAgOiB0aGlzLmdldERlZmF1bHRSdW5uZXJXb3JrZXJDb25maWcocHJvcHMuZW52KTtcblxuICAgIGNvbnN0IG1hbmFnZXJJbnN0YW5jZSA9XG4gICAgICBwcm9wcy5tYW5hZ2VySW5zdGFuY2VUeXBlID8/XG4gICAgICBJbnN0YW5jZVR5cGUub2YoSW5zdGFuY2VDbGFzcy5UMywgSW5zdGFuY2VTaXplLk1JQ1JPKTtcblxuICAgIG5ldyBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZyhzY29wZSwgYEdMUiR7c2NvcGUuc3RhY2tOYW1lfWAsIHtcbiAgICAgIHJ1bm5lcnM6IHJ1bm5lckNvbmZpZyxcbiAgICAgIG5ldHdvcms6IHtcbiAgICAgICAgdnBjOiB2cGMsXG4gICAgICB9LFxuICAgICAgbWFuYWdlcjoge1xuICAgICAgICBpbnN0YW5jZVR5cGU6IG1hbmFnZXJJbnN0YW5jZSxcbiAgICAgIH0sXG4gICAgICBjaGVja0ludGVydmFsOiAzMCwgLy8gY2hlY2sgZXZlcnkgMzBzIGZvciBwZW5kaW5nIGpvYnNcbiAgICAgIGNvbmN1cnJlbnQ6IDMwMCwgLy8gR2xvYmFsIGxpbWl0IG9mIGNvbmN1cnJlbnQgam9icyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlV29ya2VyQ29uZmlndXJhdGlvbnMoXG4gICAgd29ya2VyUHJvcHM6IEdpdGxhYlJ1bm5lcldvcmtlclByb3BzW10sXG4gICAgZW52OiBFbnZpcm9ubWVudCxcbiAgKTogR2l0bGFiUnVubmVyQXV0b3NjYWxpbmdKb2JSdW5uZXJQcm9wc1tdIHtcbiAgICByZXR1cm4gd29ya2VyUHJvcHMubWFwKCh2YWwpID0+ICh7XG4gICAgICB0b2tlbjogdmFsLnRva2VuLFxuICAgICAgcm9sZTogdmFsLmRlZmF1bHRXb3JrZXJSb2xlLFxuICAgICAgY29uZmlndXJhdGlvbjoge1xuICAgICAgICB1cmw6IHZhbC5naXRJbnN0YW5jZVVybCxcbiAgICAgICAgbWFjaGluZToge1xuICAgICAgICAgIGF1dG9zY2FsaW5nOiB0aGlzLmF1dG9zY2FsaW5nQ29uZmlnLFxuICAgICAgICAgIG1heEJ1aWxkczogdmFsLm1heEJ1aWxkcyA/PyAxMCxcbiAgICAgICAgICBpZGxlQ291bnQ6IHZhbC5tYXhJZGxlSW5zdGFuY2UgPz8gNSxcbiAgICAgICAgICBpZGxlVGltZTogdmFsLm1heElkbGVUaW1lID8/IDkwMCxcbiAgICAgICAgICBtYWNoaW5lT3B0aW9uczoge1xuICAgICAgICAgICAgcmVxdWVzdFNwb3RJbnN0YW5jZTogdmFsLnJlcXVlc3RTcG90UHJpY2UsXG4gICAgICAgICAgICBzcG90UHJpY2U6IHZhbC5zcG90UHJpY2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IFtcbiAgICAgICAgICAnRE9DS0VSX0RSSVZFUj1vdmVybGF5MicsXG4gICAgICAgICAgJ0RPQ0tFUl9UTFNfRElSQ0U9L2NlcnRzJyxcbiAgICAgICAgICBgRE9DS0VSX0FVVEhfQ09ORklHPXtcImNyZWRIZWxwZXJzXCI6IHsgXCJwdWJsaWMuZWNyLmF3c1wiOiBcImVjci1sb2dpblwiLCBcIiR7XG4gICAgICAgICAgICBlbnYuYWNjb3VudFxuICAgICAgICAgIH0uZGtyLmVjci48cmVnaW9uPi5hbWF6b25hd3MuY29tXCI6IFwiZWNyLWxvZ2luXCIgfSB9YCxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBpbnN0YW5jZVR5cGU6IHZhbC5pbnN0YW5jZVR5cGUsXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0UnVubmVyV29ya2VyQ29uZmlnKFxuICAgIGVudjogRW52aXJvbm1lbnQsXG4gICk6IEdpdGxhYlJ1bm5lckF1dG9zY2FsaW5nSm9iUnVubmVyUHJvcHNbXSB7XG4gICAgY29uc3QgZ2l0TGFiUnVubmVyVG9rZW5QYXJhbWV0ZXIgPVxuICAgICAgU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKHRoaXMsICdSdW5uZXJUb2tlbicsIHtcbiAgICAgICAgcGFyYW1ldGVyTmFtZTogJy9jb25maWcvZ2l0bGFiLXJ1bm5lci1jZGsvdG9rZW4nLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdG9rZW46IGdpdExhYlJ1bm5lclRva2VuUGFyYW1ldGVyLFxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgdXJsOiAnaHR0cHM6Ly9naXRsYWIuY2ljZC5tYW4nLFxuICAgICAgICAgIGxpbWl0OiAwLFxuICAgICAgICAgIG1hY2hpbmU6IHtcbiAgICAgICAgICAgIG1heEJ1aWxkczogMTAsXG4gICAgICAgICAgICBhdXRvc2NhbGluZzogdGhpcy5hdXRvc2NhbGluZ0NvbmZpZyxcbiAgICAgICAgICAgIGlkbGVDb3VudDogNSxcbiAgICAgICAgICAgIGlkbGVUaW1lOiA5MDAsXG4gICAgICAgICAgICBtYWNoaW5lT3B0aW9uczoge1xuICAgICAgICAgICAgICByZXF1ZXN0U3BvdEluc3RhbmNlOiB0cnVlLFxuICAgICAgICAgICAgICBzcG90UHJpY2U6IDAuMDksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZW52aXJvbm1lbnQ6IFtcbiAgICAgICAgICAgICdET0NLRVJfRFJJVkVSPW92ZXJsYXkyJyxcbiAgICAgICAgICAgICdET0NLRVJfVExTX0RJUkNFPS9jZXJ0cycsXG4gICAgICAgICAgICBgRE9DS0VSX0FVVEhfQ09ORklHPXtcImNyZWRIZWxwZXJzXCI6IHsgXCJwdWJsaWMuZWNyLmF3c1wiOiBcImVjci1sb2dpblwiLCBcIiR7XG4gICAgICAgICAgICAgIGVudi5hY2NvdW50XG4gICAgICAgICAgICB9LmRrci5lY3IuPHJlZ2lvbj4uYW1hem9uYXdzLmNvbVwiOiBcImVjci1sb2dpblwiIH0gfWAsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgaW5zdGFuY2VUeXBlOiBJbnN0YW5jZVR5cGUub2YoSW5zdGFuY2VDbGFzcy5UMywgSW5zdGFuY2VTaXplLkxBUkdFKSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxufVxuIl19
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b3NjYWxpbmctcnVubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvc21hcnQtcm91dGUvZ2l0bGFiLXJ1bm5lci9hdXRvc2NhbGluZy1ydW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2REFBNkQ7QUFDN0QsNEZBSWtEO0FBRWxELGlEQUFnRjtBQUdoRixpREFBd0U7QUFDeEUsMkNBQXVDO0FBQ3ZDLGdFQUEyRDtBQTZDM0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvREc7QUFDSCxNQUFhLFlBQWEsU0FBUSxzQkFBUztJQUt6QyxZQUFZLEtBQVksRUFBRSxFQUFXLEVBQUUsS0FBd0I7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUxYLHNCQUFpQixHQUErQixDQUFDO2dCQUN2RCxPQUFPLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDbkMsUUFBUSxFQUFFLGVBQWU7YUFDMUIsQ0FBQyxDQUFDO1FBSUQsTUFBTSxHQUFHLEdBQUcsaUNBQWMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLGtCQUFrQjtZQUMzQyxDQUFDLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ3RFLENBQUMsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpELE1BQU0sZUFBZSxHQUNuQixLQUFLLENBQUMsbUJBQW1CO1lBQ3pCLHNCQUFZLENBQUMsRUFBRSxDQUFDLHVCQUFhLENBQUMsRUFBRSxFQUFFLHNCQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEQsTUFBTSxNQUFNLEdBQUcsSUFBSSx1REFBdUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDekUsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO1lBQ3ZCLE9BQU8sRUFBRTtnQkFDUCxHQUFHLEVBQUUsR0FBRzthQUNUO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLFlBQVksRUFBRSxlQUFlO2FBQzlCO1lBQ0QsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDOUIsYUFBYSxFQUFFLEVBQUUsRUFBRSxtQ0FBbUM7WUFDdEQsVUFBVSxFQUFFLEdBQUcsRUFBRSxtQ0FBbUM7U0FDckQsQ0FBQyxDQUFDO1FBQ0gsMEhBQTBIO1FBQzFILE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FDakMseUVBQXlFLEVBQUUsNkJBQTZCO1FBQ3hHLDBHQUEwRyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUN2Six1QkFBdUIsQ0FDeEIsQ0FBQztJQUNKLENBQUM7SUFFTywwQkFBMEIsQ0FBQyxXQUFvQyxFQUFFLEdBQWdCO1FBQ3ZGLE9BQU87WUFDTCxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7WUFDeEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxpQkFBaUI7WUFDbkMsYUFBYSxFQUFFO2dCQUNiLEdBQUcsRUFBRSxXQUFXLENBQUMsY0FBYztnQkFDL0IsT0FBTyxFQUFFO29CQUNQLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCO29CQUNuQyxTQUFTLEVBQUUsV0FBVyxDQUFDLFNBQVMsSUFBSSxFQUFFO29CQUN0QyxTQUFTLEVBQUUsV0FBVyxDQUFDLGVBQWUsSUFBSSxDQUFDO29CQUMzQyxRQUFRLEVBQUUsV0FBVyxDQUFDLFdBQVcsSUFBSSxHQUFHO29CQUN4QyxjQUFjLEVBQUU7d0JBQ2QsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLGdCQUFnQjt3QkFDakQsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTO3FCQUNqQztpQkFDRjtnQkFDRCxXQUFXLEVBQUU7b0JBQ1gsd0JBQXdCO29CQUN4Qix5QkFBeUI7b0JBQ3pCLHdFQUNFLEdBQUcsQ0FBQyxPQUNOLFlBQVksR0FBRyxDQUFDLE1BQU0sa0NBQWtDO2lCQUN6RDthQUNGO1lBQ0QsWUFBWSxFQUFFLFdBQVcsQ0FBQyxZQUFZO1NBQ3ZDLENBQUM7SUFDSixDQUFDO0lBRU8sNEJBQTRCLENBQ2xDLEdBQWdCO1FBRWhCLE1BQU0sMEJBQTBCLEdBQzlCLHlCQUFlLENBQUMsNkJBQTZCLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNqRSxhQUFhLEVBQUUsaUNBQWlDO1NBQ2pELENBQUMsQ0FBQztRQUNMLE9BQU87WUFDTCxLQUFLLEVBQUUsMEJBQTBCO1lBQ2pDLGFBQWEsRUFBRTtnQkFDYixHQUFHLEVBQUUseUJBQXlCO2dCQUM5QixLQUFLLEVBQUUsQ0FBQztnQkFDUixPQUFPLEVBQUU7b0JBQ1AsU0FBUyxFQUFFLEVBQUU7b0JBQ2IsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7b0JBQ25DLFNBQVMsRUFBRSxDQUFDO29CQUNaLFFBQVEsRUFBRSxHQUFHO29CQUNiLGNBQWMsRUFBRTt3QkFDZCxtQkFBbUIsRUFBRSxJQUFJO3dCQUN6QixTQUFTLEVBQUUsSUFBSTtxQkFDaEI7aUJBQ0Y7Z0JBQ0QsV0FBVyxFQUFFO29CQUNYLHdCQUF3QjtvQkFDeEIseUJBQXlCO29CQUN6Qix3RUFDRSxHQUFHLENBQUMsT0FDTixZQUFZLEdBQUcsQ0FBQyxNQUFNLGtDQUFrQztpQkFDekQ7YUFDRjtZQUNELFlBQVksRUFBRSxzQkFBWSxDQUFDLEVBQUUsQ0FBQyx1QkFBYSxDQUFDLEVBQUUsRUFBRSxzQkFBWSxDQUFDLEtBQUssQ0FBQztTQUNwRSxDQUFDO0lBQ0osQ0FBQzs7QUFsR0gsb0NBbUdDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHtcbiAgQXV0b3NjYWxpbmdDb25maWd1cmF0aW9uLFxuICBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZyxcbiAgR2l0bGFiUnVubmVyQXV0b3NjYWxpbmdKb2JSdW5uZXJQcm9wcyxcbn0gZnJvbSAnQHBlcHBlcml6ZS9jZGstYXV0b3NjYWxpbmctZ2l0bGFiLXJ1bm5lcic7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBJbnN0YW5jZUNsYXNzLCBJbnN0YW5jZVNpemUsIEluc3RhbmNlVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgSVJvbGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgSVN0cmluZ1BhcmFtZXRlciwgU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFJpb0xhbmRpbmdab25lIH0gZnJvbSAnLi4vLi4vLi4vcmlvLWxhbmRpbmctem9uZSc7XG5cbi8qKlxuICogVGhlIEdpdExhYlJ1bm5lclByb3BzIHJlcXVpcmUgdGhlIFZQQyBJRCwgYSBkZWZpbmVkIGVudmlyb25tZW50IG9mIGFjY291bnQgYW5kIHJlZ2lvbiwgb3B0aW9uYWxcbiAqIHJ1bm5lciBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25hbGx5IHRoZSBHaXRMYWIgUnVubmVyIE1hbmFnZXIgaW5zdGFuY2UgdHlwZS4gQnkgZGVmYXVsdCwgYSBUMyBNaWNybyBpbnN0YW5jZSB3aWxsIGJlIHVzZWQuXG4gKiBGb3IgbGFyZ2VyIHdvcmtsb2FkcyBhbmQgdmVyeSBhY3RpdmUgdGVhbXMgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIFQzIFNtYWxsIGZvciB0aGUgbWFuYWdlciBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdpdExhYlJ1bm5lclByb3BzIHtcbiAgcmVhZG9ubHkgZW52OiBFbnZpcm9ubWVudDtcbiAgcmVhZG9ubHkgcnVubmVyc1dvcmtlclByb3BzPzogR2l0bGFiUnVubmVyV29ya2VyUHJvcHM7XG4gIHJlYWRvbmx5IG1hbmFnZXJJbnN0YW5jZVR5cGU/OiBJbnN0YW5jZVR5cGU7XG4gIHJlYWRvbmx5IGNhY2hlOiBJQnVja2V0O1xufVxuXG4vKipcbiAqIFRoZSBHaXRsYWJSdW5uZXJXb3JrZXJQcm9wcyBpbnRlcmZhY2UgcHJvdmlkZXMgYSBzaW1wbGlmaWVkIEdpdExhYiBSdW5uZXIgd29ya2VyIGNvbmZpZ3VyYXRpb25cbiAqIHJlcXVpcmluZyBhIHRva2VuIGFzIGFuIFNTTSBwYXJhbWV0ZXIsIG9uZSBvZiB0aGUgdmFsaWQgZ2l0bGFiIFVSTHMsIGluc3RhbmNlIG9mIHlvdSBjaG9pY2UsIHRoZSBkZXNpcmVkIG1heCBzcG90IHByaWNlLFxuICogd2hldGhlciB0byB1c2Ugc3BvdCBpbnN0YW5jZSBvciBub3QgYW5kIGEgZGVmYXVsdCByb2xlLlxuICogSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBSdW5uZXJSb2xlcyBjb25zdHJ1Y3QsIGFuZCBpdCdzIGV4cG9zZWQgZGVmYXVsdCBydW5uZXIgcm9sZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRsYWJSdW5uZXJXb3JrZXJQcm9wcyB7XG4gIC8qKiBUaGUgU1NNIFN0cmluZ1BhcmFtZXRlciB3aXRoIHRoZSByZWdpc3RlcmVkIHJ1bm5lciB0b2tlbiAgKi9cbiAgcmVhZG9ubHkgdG9rZW46IElTdHJpbmdQYXJhbWV0ZXI7XG4gIC8qKiBUaGUgR2l0TGFiIGluc3RhbmNlIFVSTCwgZWl0aGVyIGh0dHBzOi8vZ2l0bGFiLmNpY2QubWFuIG9yIGh0dHBzOi8vZ2l0bGFiLmNvbGxhYm9yYXRpb25sYXllci10cmF0b24uY29tICovXG4gIHJlYWRvbmx5IGdpdEluc3RhbmNlVXJsOiBHaXRsYWJJbnN0YW5jZVVybDtcbiAgLyoqIFRoZSBpbnN0YW5jZSB0eXBlIGZvciB0aGUgcnVubmVyIHdvcmtlciAqL1xuICByZWFkb25seSBpbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZTtcbiAgLyoqIFRoZSBkZXNpcmVkIG1heCBzcG90IHByaWNlICovXG4gIHJlYWRvbmx5IHNwb3RQcmljZTogbnVtYmVyO1xuICAvKiogV2hldGhlciB0byB1c2Ugc3BvdCBpbnN0YW5jZSBvciBub3QsIFJlcXVpcmVzIFNlcnZpY2VMaW5rZWQgUm9sZSBmb3IgRUMyIFNwb3QgdG8gYmUgZGVwbG95ZWQgaW4gdGhlIGFjY291bnQgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdFNwb3RQcmljZTogYm9vbGVhbjtcbiAgLyoqIFRoZSBkZWZhdWx0IHJvbGUgZm9yIHRoZSBydW5uZXIgd29ya2VyIHdoZW4gc3Bhd25lZCAqL1xuICByZWFkb25seSBkZWZhdWx0V29ya2VyUm9sZTogSVJvbGU7XG4gIC8qKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnVpbGRzIGZvciBhbiBpbnN0YW5jZSBiZWZvcmUgaXQgaGFzIHRvIGJlIGRlY29tbWlzc2lvbmVkLiBEZWZhdWx0IDEwICovXG4gIHJlYWRvbmx5IG1heEJ1aWxkcz86IG51bWJlcjtcbiAgLyoqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgdG8ga2VlcCBpZGxlIGZvciBuZXcgaW5jb21pbmcgam9icy4gRGVmYXVsdCA1ICovXG4gIHJlYWRvbmx5IG1heElkbGVJbnN0YW5jZT86IG51bWJlcjtcbiAgLyoqIFRoZSBtYXhpbXVtIGlkbGUgdGltZSBzZWNvbmRzIGZvciBhbiBpbnN0YW5jZS4gRGVmYXVsdCA5MDAgc2Vjb25kcyAqL1xuICByZWFkb25seSBtYXhJZGxlVGltZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgR2l0bGFiSW5zdGFuY2VVcmwgPVxuICB8ICdodHRwczovL2dpdGxhYi5jaWNkLm1hbidcbiAgfCAnaHR0cHM6Ly9naXRsYWIuY29sbGFib3JhdGlvbmxheWVyLXRyYXRvbi5jb20nO1xuXG4vKipcbiAqIFRoZSBjb25zdHJ1Y3QgY3JlYXRlIHRoZSBHaXRMYWJSdW5uZXIgTWFuYWdlciBpbnN0YW5jZSB3aGljaCB3aWxsIGF1dG9zY2FsZSBSdW5uZXIgaW5zdGFuY2VzIGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uLlxuICogQnkgZGVmYXVsdCwgdGhlIGNvbnN0cnVjdCB3aWxsIGNyZWF0ZSBhIFJ1bm5lciB3aXRoIGEgbWFuYWdlciBUMyBNaWNybyBpbnN0YW5jZSB3aGljaCB3aWxsIGJlIGVuYWJsZWQgdG8gc3Bhd24gVDMgTGFyZ2UgUnVubmVyXG4gKiB3b3JrZXIgc3BvdCBpbnN0YW5jZS4gVGhlIGRlZmF1bHQgcnVubmVyIFJvbGUgaGFzIG9ubHkgdGhlIHBlcm1pc3Npb25zIHRvIHVwbG9hZCBhbmQgZG93bmxvYWQgZnJvbSB0aGUgUzMgcnVubmVyIGNhY2hlLlxuICpcbiAqIG1pbmltYWwgY29uZmlndXJhdGlvbiB3aXRoIHJ1bm5lciBzcG90IGluc3RhbmNlOlxuICogYGBgdHNcbiAqIG5ldyBTcG90U2VydmljZUxpbmtlZFJvbGUoc3RhY2ssICdTcG90TGlua2VkUm9sZScpO1xuICogY29uc3QgbXlCdWNrZXQgPSBuZXcgQnVja2V0KHN0YWNrLCAnTXlTaGFyZVJ1bm5lckNhY2hlJywge1xuICogICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gKiAgICAgcHVibGljUmVhZEFjY2VzczogZmFsc2UsXG4gKiAgICAgZW5jcnlwdGlvbjogQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICogICAgIGxpZmVjeWNsZVJ1bGVzOiBbXG4gKiAgICAgICB7XG4gKiAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gKiAgICAgICAgIGV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoMzApLFxuICogICAgICAgfSxcbiAqICAgICBdLFxuICogICB9KTtcbiAqIG5ldyBHaXRsYWJSdW5uZXIoc3RhY2ssICdHaXRMYWJSdW5uZXInLCB7XG4gKiAgZW52OiB7YWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ2V1LXdlc3QtMSd9LFxuICogIGNhY2hlOiBteUJ1Y2tldCAvLyB1c2UgYSBTMyBidWNrZXQgd2l0aG91dCBwdWJsaWMgYWNjZXNzIGFuZCBhIHJldGVudGlvbiBkZWZpbmVkLCB1c2Ugb25lIGNhY2hlIGJ1Y2tldCBmb3IgYWxsIHlvdSBydW5uZXJzXG4gKiB9KTtcbiAqYGBgXG4gKiByZWNvbW1lbmRlZDpcbiAqIGBgYHRzXG4gKiBuZXcgU3BvdFNlcnZpY2VMaW5rZWRSb2xlKHN0YWNrLCAnU3BvdExpbmtlZFJvbGUnKTtcbiAqIGNvbnN0IHJ1bm5lclJvbGVzID0gbmV3IFJ1bm5lclJvbGVzKHN0YWNrLCAnUnVubmVyUm9sZXMnLCB7ZW52OiB7YWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ2V1LXdlc3QtMSd9fSk7XG4gKiBjb25zdCBteUJ1Y2tldCA9IG5ldyBCdWNrZXQoc3RhY2ssICdNeVNoYXJlUnVubmVyQ2FjaGUnLCB7XG4gKiAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAqICAgICBwdWJsaWNSZWFkQWNjZXNzOiBmYWxzZSxcbiAqICAgICBlbmNyeXB0aW9uOiBCdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gKiAgICAgbGlmZWN5Y2xlUnVsZXM6IFtcbiAqICAgICAgIHtcbiAqICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAqICAgICAgICAgZXhwaXJhdGlvbjogRHVyYXRpb24uZGF5cygzMCksXG4gKiAgICAgICB9LFxuICogICAgIF0sXG4gKiAgIH0pO1xuICogbmV3IEdpdGxhYlJ1bm5lcihzdGFjaywgJ0dpdExhYlJ1bm5lcicsIHtcbiAqICBlbnY6IHthY2NvdW50OiAnMTIzNDU2Nzg5MDEyJywgcmVnaW9uOiAnZXUtd2VzdC0xJ30sXG4gKiAgY2FjaGU6IG15QnVja2V0IC8vIC8vIHVzZSBhIFMzIGJ1Y2tldCB3aXRob3V0IHB1YmxpYyBhY2Nlc3MgYW5kIGEgcmV0ZW50aW9uIGRlZmluZWQsIHVzZSBvbmUgY2FjaGUgYnVja2V0IGZvciBhbGwgeW91IHJ1bm5lcnNcbiAqICBydW5uZXJzV29ya2VyUHJvcHM6IHtcbiAqICAgIHRva2VuOiBteVRva2VuRm9yVGFnZ2VkUnVubmVyMSwgLy8gd2l0aCB0aGlzIHJ1bm5lciB3ZSBvbmx5IHdhbnQgdG8gcnVuIGpvYnMgdGhhdCByZXF1aXJlIG1vcmUgcG93ZXJcbiAqICAgIGdpdEluc3RhbmNlVXJsOiAnaHR0cHM6Ly9naXRsYWIuY2ljZC5tYW4nLCAvLyBvciB0aGUgVHJhdG9uIEdpdExhYlxuICogICAgaW5zdGFuY2VUeXBlOiBJbnN0YW5jZVR5cGUub2YoSW5zdGFuY2VDbGFzcy5NN0lfRkxFWCwgSW5zdGFuY2VTaXplLlhMQVJHRSksIC8vIGV4ZW1wbGFyeSBsYXJnZXIgcnVubmVyXG4gKiAgICBzcG90UHJpY2U6IDAuMiwgLy8gZXhlbXBsYXJ5IHNwb3QgcHJpY2VcbiAqICAgIHJlcXVlc3RTcG90UHJpY2U6IHRydWUsXG4gKiAgICBkZWZhdWx0V29ya2VyUm9sZTogcnVubmVyUm9sZXMucnVubmVyQmFzZVJvbGUsIC8vIHVzZSB0aGUgYmFzZSByb2xlXG4gKiAgfSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBHaXRsYWJSdW5uZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIGF1dG9zY2FsaW5nQ29uZmlnOiBBdXRvc2NhbGluZ0NvbmZpZ3VyYXRpb25bXSA9IFt7XG4gICAgcGVyaW9kczogWycqICogNy0yMiAqICogbW9uLWZyaSAqJ10sXG4gICAgdGltZXpvbmU6ICdFdXJvcGUvQmVybGluJyxcbiAgfV07XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBTdGFjaywgaWQgOiBzdHJpbmcsIHByb3BzOiBHaXRMYWJSdW5uZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB2cGMgPSBSaW9MYW5kaW5nWm9uZS5nZXREZWZhdWx0VnBjKHNjb3BlKTtcblxuICAgIGNvbnN0IHJ1bm5lckNvbmZpZyA9IHByb3BzLnJ1bm5lcnNXb3JrZXJQcm9wc1xuICAgICAgPyB0aGlzLmNyZWF0ZVdvcmtlckNvbmZpZ3VyYXRpb25zKHByb3BzLnJ1bm5lcnNXb3JrZXJQcm9wcywgcHJvcHMuZW52KVxuICAgICAgOiB0aGlzLmdldERlZmF1bHRSdW5uZXJXb3JrZXJDb25maWcocHJvcHMuZW52KTtcblxuICAgIGNvbnN0IG1hbmFnZXJJbnN0YW5jZSA9XG4gICAgICBwcm9wcy5tYW5hZ2VySW5zdGFuY2VUeXBlID8/XG4gICAgICBJbnN0YW5jZVR5cGUub2YoSW5zdGFuY2VDbGFzcy5UMywgSW5zdGFuY2VTaXplLk1JQ1JPKTtcblxuICAgIGNvbnN0IHJ1bm5lciA9IG5ldyBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZyhzY29wZSwgYEdMUiR7c2NvcGUuc3RhY2tOYW1lfWAsIHtcbiAgICAgIHJ1bm5lcnM6IFtydW5uZXJDb25maWddLFxuICAgICAgbmV0d29yazoge1xuICAgICAgICB2cGM6IHZwYyxcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VyOiB7XG4gICAgICAgIGluc3RhbmNlVHlwZTogbWFuYWdlckluc3RhbmNlLFxuICAgICAgfSxcbiAgICAgIGNhY2hlOiB7IGJ1Y2tldDogcHJvcHMuY2FjaGUgfSxcbiAgICAgIGNoZWNrSW50ZXJ2YWw6IDMwLCAvLyBjaGVjayBldmVyeSAzMHMgZm9yIHBlbmRpbmcgam9ic1xuICAgICAgY29uY3VycmVudDogMzAwLCAvLyBHbG9iYWwgbGltaXQgb2YgY29uY3VycmVudCBqb2JzLFxuICAgIH0pO1xuICAgIC8vIGR1ZSB0byB0aGUgbmV3IHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdlIGhhdmUgdG8gcmVnaXN0ZXIgdGhlIHJ1bm5lciBieSBydW5uaW5nIGV4cGxpY2l0IGNvbW1hbmRzIG9uIHN0YXJ0IG9mIHRoZSBtYW5hZ2VyXG4gICAgcnVubmVyLm1hbmFnZXIudXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICAnY3AgIC9ldGMvZ2l0bGFiLXJ1bm5lci9jb25maWcudG9tbCAgL2V0Yy9naXRsYWItcnVubmVyL2NvbmZpZ19iYWNrLnRvbWwnLCAvLyBhdm9pZCB0b21sIG1lcmdlIGNvbmZsaWN0c1xuICAgICAgYGdpdGxhYi1ydW5uZXIgcmVnaXN0ZXIgLS1ub24taW50ZXJhY3RpdmUgLS10ZW1wbGF0ZS1jb25maWcgL2V0Yy9naXRsYWItcnVubmVyL2NvbmZpZ19iYWNrLnRvbWwgLS10b2tlbiAke3Byb3BzLnJ1bm5lcnNXb3JrZXJQcm9wcz8udG9rZW4uc3RyaW5nVmFsdWV9YCxcbiAgICAgICdnaXRsYWItcnVubmVyIHJlc3RhcnQnLCAvLyByZXN0YXJ0IHRoZSBydW5uZXIgdG8gZW5zdXJlIHRoZSBjb25maWcgaXMgcGlja2VkIHVwIGNvcnJlY3RseVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVdvcmtlckNvbmZpZ3VyYXRpb25zKHdvcmtlclByb3BzOiBHaXRsYWJSdW5uZXJXb3JrZXJQcm9wcywgZW52OiBFbnZpcm9ubWVudCk6IEdpdGxhYlJ1bm5lckF1dG9zY2FsaW5nSm9iUnVubmVyUHJvcHMge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogd29ya2VyUHJvcHMudG9rZW4sXG4gICAgICByb2xlOiB3b3JrZXJQcm9wcy5kZWZhdWx0V29ya2VyUm9sZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgdXJsOiB3b3JrZXJQcm9wcy5naXRJbnN0YW5jZVVybCxcbiAgICAgICAgbWFjaGluZToge1xuICAgICAgICAgIGF1dG9zY2FsaW5nOiB0aGlzLmF1dG9zY2FsaW5nQ29uZmlnLFxuICAgICAgICAgIG1heEJ1aWxkczogd29ya2VyUHJvcHMubWF4QnVpbGRzID8/IDEwLFxuICAgICAgICAgIGlkbGVDb3VudDogd29ya2VyUHJvcHMubWF4SWRsZUluc3RhbmNlID8/IDUsXG4gICAgICAgICAgaWRsZVRpbWU6IHdvcmtlclByb3BzLm1heElkbGVUaW1lID8/IDkwMCxcbiAgICAgICAgICBtYWNoaW5lT3B0aW9uczoge1xuICAgICAgICAgICAgcmVxdWVzdFNwb3RJbnN0YW5jZTogd29ya2VyUHJvcHMucmVxdWVzdFNwb3RQcmljZSxcbiAgICAgICAgICAgIHNwb3RQcmljZTogd29ya2VyUHJvcHMuc3BvdFByaWNlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVudmlyb25tZW50OiBbXG4gICAgICAgICAgJ0RPQ0tFUl9EUklWRVI9b3ZlcmxheTInLFxuICAgICAgICAgICdET0NLRVJfVExTX0RJUkNFPS9jZXJ0cycsXG4gICAgICAgICAgYERPQ0tFUl9BVVRIX0NPTkZJRz17XCJjcmVkSGVscGVyc1wiOiB7IFwicHVibGljLmVjci5hd3NcIjogXCJlY3ItbG9naW5cIiwgXCIke1xuICAgICAgICAgICAgZW52LmFjY291bnRcbiAgICAgICAgICB9LmRrci5lY3IuJHtlbnYucmVnaW9ufS5hbWF6b25hd3MuY29tXCI6IFwiZWNyLWxvZ2luXCIgfSB9YCxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBpbnN0YW5jZVR5cGU6IHdvcmtlclByb3BzLmluc3RhbmNlVHlwZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0UnVubmVyV29ya2VyQ29uZmlnKFxuICAgIGVudjogRW52aXJvbm1lbnQsXG4gICk6IEdpdGxhYlJ1bm5lckF1dG9zY2FsaW5nSm9iUnVubmVyUHJvcHMge1xuICAgIGNvbnN0IGdpdExhYlJ1bm5lclRva2VuUGFyYW1ldGVyID1cbiAgICAgIFN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyh0aGlzLCAnUnVubmVyVG9rZW4nLCB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6ICcvY29uZmlnL2dpdGxhYi1ydW5uZXItY2RrL3Rva2VuJyxcbiAgICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogZ2l0TGFiUnVubmVyVG9rZW5QYXJhbWV0ZXIsXG4gICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgIHVybDogJ2h0dHBzOi8vZ2l0bGFiLmNpY2QubWFuJyxcbiAgICAgICAgbGltaXQ6IDAsXG4gICAgICAgIG1hY2hpbmU6IHtcbiAgICAgICAgICBtYXhCdWlsZHM6IDEwLFxuICAgICAgICAgIGF1dG9zY2FsaW5nOiB0aGlzLmF1dG9zY2FsaW5nQ29uZmlnLFxuICAgICAgICAgIGlkbGVDb3VudDogNSxcbiAgICAgICAgICBpZGxlVGltZTogOTAwLFxuICAgICAgICAgIG1hY2hpbmVPcHRpb25zOiB7XG4gICAgICAgICAgICByZXF1ZXN0U3BvdEluc3RhbmNlOiB0cnVlLFxuICAgICAgICAgICAgc3BvdFByaWNlOiAwLjA5LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVudmlyb25tZW50OiBbXG4gICAgICAgICAgJ0RPQ0tFUl9EUklWRVI9b3ZlcmxheTInLFxuICAgICAgICAgICdET0NLRVJfVExTX0RJUkNFPS9jZXJ0cycsXG4gICAgICAgICAgYERPQ0tFUl9BVVRIX0NPTkZJRz17XCJjcmVkSGVscGVyc1wiOiB7IFwicHVibGljLmVjci5hd3NcIjogXCJlY3ItbG9naW5cIiwgXCIke1xuICAgICAgICAgICAgZW52LmFjY291bnRcbiAgICAgICAgICB9LmRrci5lY3IuJHtlbnYucmVnaW9ufS5hbWF6b25hd3MuY29tXCI6IFwiZWNyLWxvZ2luXCIgfSB9YCxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBpbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZS5vZihJbnN0YW5jZUNsYXNzLlQzLCBJbnN0YW5jZVNpemUuTEFSR0UpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  ],
16
16
  "main": "lib/index.js",
17
17
  "license": "Apache-2.0",
18
- "version": "6.2.2",
18
+ "version": "6.3.0",
19
19
  "types": "lib/index.d.ts",
20
20
  "stability": "stable",
21
21
  "exports": {
package/version.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "6.2.2"
2
+ "version": "6.3.0"
3
3
  }