eoapi-cdk 8.0.0 → 8.0.2

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
@@ -3932,7 +3932,7 @@
3932
3932
  "kind": "interface",
3933
3933
  "locationInModule": {
3934
3934
  "filename": "lib/database/index.ts",
3935
- "line": 280
3935
+ "line": 279
3936
3936
  },
3937
3937
  "name": "DatabaseParameters",
3938
3938
  "properties": [
@@ -3945,7 +3945,7 @@
3945
3945
  "immutable": true,
3946
3946
  "locationInModule": {
3947
3947
  "filename": "lib/database/index.ts",
3948
- "line": 296
3948
+ "line": 295
3949
3949
  },
3950
3950
  "name": "effectiveCacheSize",
3951
3951
  "type": {
@@ -3961,7 +3961,7 @@
3961
3961
  "immutable": true,
3962
3962
  "locationInModule": {
3963
3963
  "filename": "lib/database/index.ts",
3964
- "line": 306
3964
+ "line": 305
3965
3965
  },
3966
3966
  "name": "maintenanceWorkMem",
3967
3967
  "type": {
@@ -3977,7 +3977,7 @@
3977
3977
  "immutable": true,
3978
3978
  "locationInModule": {
3979
3979
  "filename": "lib/database/index.ts",
3980
- "line": 284
3980
+ "line": 283
3981
3981
  },
3982
3982
  "name": "maxConnections",
3983
3983
  "type": {
@@ -3993,7 +3993,7 @@
3993
3993
  "immutable": true,
3994
3994
  "locationInModule": {
3995
3995
  "filename": "lib/database/index.ts",
3996
- "line": 311
3996
+ "line": 310
3997
3997
  },
3998
3998
  "name": "maxLocksPerTransaction",
3999
3999
  "type": {
@@ -4009,7 +4009,7 @@
4009
4009
  "immutable": true,
4010
4010
  "locationInModule": {
4011
4011
  "filename": "lib/database/index.ts",
4012
- "line": 326
4012
+ "line": 325
4013
4013
  },
4014
4014
  "name": "randomPageCost",
4015
4015
  "type": {
@@ -4025,7 +4025,7 @@
4025
4025
  "immutable": true,
4026
4026
  "locationInModule": {
4027
4027
  "filename": "lib/database/index.ts",
4028
- "line": 321
4028
+ "line": 320
4029
4029
  },
4030
4030
  "name": "seqPageCost",
4031
4031
  "type": {
@@ -4042,7 +4042,7 @@
4042
4042
  "immutable": true,
4043
4043
  "locationInModule": {
4044
4044
  "filename": "lib/database/index.ts",
4045
- "line": 291
4045
+ "line": 290
4046
4046
  },
4047
4047
  "name": "sharedBuffers",
4048
4048
  "type": {
@@ -4058,7 +4058,7 @@
4058
4058
  "immutable": true,
4059
4059
  "locationInModule": {
4060
4060
  "filename": "lib/database/index.ts",
4061
- "line": 316
4061
+ "line": 315
4062
4062
  },
4063
4063
  "name": "tempBuffers",
4064
4064
  "type": {
@@ -4074,7 +4074,7 @@
4074
4074
  "immutable": true,
4075
4075
  "locationInModule": {
4076
4076
  "filename": "lib/database/index.ts",
4077
- "line": 301
4077
+ "line": 300
4078
4078
  },
4079
4079
  "name": "workMem",
4080
4080
  "type": {
@@ -4097,7 +4097,7 @@
4097
4097
  },
4098
4098
  "locationInModule": {
4099
4099
  "filename": "lib/stac-api/index.ts",
4100
- "line": 21
4100
+ "line": 47
4101
4101
  },
4102
4102
  "parameters": [
4103
4103
  {
@@ -4123,7 +4123,7 @@
4123
4123
  "kind": "class",
4124
4124
  "locationInModule": {
4125
4125
  "filename": "lib/stac-api/index.ts",
4126
- "line": 17
4126
+ "line": 43
4127
4127
  },
4128
4128
  "name": "PgStacApiLambda",
4129
4129
  "properties": [
@@ -4134,7 +4134,7 @@
4134
4134
  "immutable": true,
4135
4135
  "locationInModule": {
4136
4136
  "filename": "lib/stac-api/index.ts",
4137
- "line": 18
4137
+ "line": 44
4138
4138
  },
4139
4139
  "name": "url",
4140
4140
  "type": {
@@ -4147,7 +4147,7 @@
4147
4147
  },
4148
4148
  "locationInModule": {
4149
4149
  "filename": "lib/stac-api/index.ts",
4150
- "line": 19
4150
+ "line": 45
4151
4151
  },
4152
4152
  "name": "stacApiLambdaFunction",
4153
4153
  "type": {
@@ -4167,7 +4167,7 @@
4167
4167
  "kind": "interface",
4168
4168
  "locationInModule": {
4169
4169
  "filename": "lib/stac-api/index.ts",
4170
- "line": 76
4170
+ "line": 138
4171
4171
  },
4172
4172
  "name": "PgStacApiLambdaProps",
4173
4173
  "properties": [
@@ -4180,7 +4180,7 @@
4180
4180
  "immutable": true,
4181
4181
  "locationInModule": {
4182
4182
  "filename": "lib/stac-api/index.ts",
4183
- "line": 85
4183
+ "line": 147
4184
4184
  },
4185
4185
  "name": "db",
4186
4186
  "type": {
@@ -4205,7 +4205,7 @@
4205
4205
  "immutable": true,
4206
4206
  "locationInModule": {
4207
4207
  "filename": "lib/stac-api/index.ts",
4208
- "line": 95
4208
+ "line": 157
4209
4209
  },
4210
4210
  "name": "dbSecret",
4211
4211
  "type": {
@@ -4221,7 +4221,7 @@
4221
4221
  "immutable": true,
4222
4222
  "locationInModule": {
4223
4223
  "filename": "lib/stac-api/index.ts",
4224
- "line": 100
4224
+ "line": 162
4225
4225
  },
4226
4226
  "name": "apiEnv",
4227
4227
  "optional": true,
@@ -4234,6 +4234,29 @@
4234
4234
  }
4235
4235
  }
4236
4236
  },
4237
+ {
4238
+ "abstract": true,
4239
+ "docs": {
4240
+ "default": "- query, sort, fields, filter, free_text, pagniation, collection_search",
4241
+ "stability": "experimental",
4242
+ "summary": "List of STAC API extensions to enable."
4243
+ },
4244
+ "immutable": true,
4245
+ "locationInModule": {
4246
+ "filename": "lib/stac-api/index.ts",
4247
+ "line": 174
4248
+ },
4249
+ "name": "enabledExtensions",
4250
+ "optional": true,
4251
+ "type": {
4252
+ "collection": {
4253
+ "elementtype": {
4254
+ "primitive": "string"
4255
+ },
4256
+ "kind": "array"
4257
+ }
4258
+ }
4259
+ },
4237
4260
  {
4238
4261
  "abstract": true,
4239
4262
  "docs": {
@@ -4244,7 +4267,7 @@
4244
4267
  "immutable": true,
4245
4268
  "locationInModule": {
4246
4269
  "filename": "lib/stac-api/index.ts",
4247
- "line": 112
4270
+ "line": 181
4248
4271
  },
4249
4272
  "name": "lambdaFunctionOptions",
4250
4273
  "optional": true,
@@ -4261,7 +4284,7 @@
4261
4284
  "immutable": true,
4262
4285
  "locationInModule": {
4263
4286
  "filename": "lib/stac-api/index.ts",
4264
- "line": 105
4287
+ "line": 167
4265
4288
  },
4266
4289
  "name": "stacApiDomainName",
4267
4290
  "optional": true,
@@ -4278,7 +4301,7 @@
4278
4301
  "immutable": true,
4279
4302
  "locationInModule": {
4280
4303
  "filename": "lib/stac-api/index.ts",
4281
- "line": 90
4304
+ "line": 152
4282
4305
  },
4283
4306
  "name": "subnetSelection",
4284
4307
  "optional": true,
@@ -4295,7 +4318,7 @@
4295
4318
  "immutable": true,
4296
4319
  "locationInModule": {
4297
4320
  "filename": "lib/stac-api/index.ts",
4298
- "line": 80
4321
+ "line": 142
4299
4322
  },
4300
4323
  "name": "vpc",
4301
4324
  "optional": true,
@@ -4321,7 +4344,7 @@
4321
4344
  },
4322
4345
  "locationInModule": {
4323
4346
  "filename": "lib/database/index.ts",
4324
- "line": 44
4347
+ "line": 43
4325
4348
  },
4326
4349
  "parameters": [
4327
4350
  {
@@ -4347,7 +4370,7 @@
4347
4370
  "kind": "class",
4348
4371
  "locationInModule": {
4349
4372
  "filename": "lib/database/index.ts",
4350
- "line": 35
4373
+ "line": 34
4351
4374
  },
4352
4375
  "methods": [
4353
4376
  {
@@ -4356,7 +4379,7 @@
4356
4379
  },
4357
4380
  "locationInModule": {
4358
4381
  "filename": "lib/database/index.ts",
4359
- "line": 186
4382
+ "line": 185
4360
4383
  },
4361
4384
  "name": "getParameters",
4362
4385
  "parameters": [
@@ -4395,7 +4418,7 @@
4395
4418
  "immutable": true,
4396
4419
  "locationInModule": {
4397
4420
  "filename": "lib/database/index.ts",
4398
- "line": 40
4421
+ "line": 39
4399
4422
  },
4400
4423
  "name": "connectionTarget",
4401
4424
  "type": {
@@ -4418,7 +4441,7 @@
4418
4441
  "immutable": true,
4419
4442
  "locationInModule": {
4420
4443
  "filename": "lib/database/index.ts",
4421
- "line": 42
4444
+ "line": 41
4422
4445
  },
4423
4446
  "name": "secretBootstrapper",
4424
4447
  "optional": true,
@@ -4433,7 +4456,7 @@
4433
4456
  "immutable": true,
4434
4457
  "locationInModule": {
4435
4458
  "filename": "lib/database/index.ts",
4436
- "line": 41
4459
+ "line": 40
4437
4460
  },
4438
4461
  "name": "securityGroup",
4439
4462
  "optional": true,
@@ -4447,7 +4470,7 @@
4447
4470
  },
4448
4471
  "locationInModule": {
4449
4472
  "filename": "lib/database/index.ts",
4450
- "line": 36
4473
+ "line": 35
4451
4474
  },
4452
4475
  "name": "db",
4453
4476
  "type": {
@@ -4460,7 +4483,7 @@
4460
4483
  },
4461
4484
  "locationInModule": {
4462
4485
  "filename": "lib/database/index.ts",
4463
- "line": 37
4486
+ "line": 36
4464
4487
  },
4465
4488
  "name": "pgstacSecret",
4466
4489
  "type": {
@@ -4483,7 +4506,7 @@
4483
4506
  "kind": "interface",
4484
4507
  "locationInModule": {
4485
4508
  "filename": "lib/database/index.ts",
4486
- "line": 226
4509
+ "line": 225
4487
4510
  },
4488
4511
  "name": "PgStacDatabaseProps",
4489
4512
  "properties": [
@@ -4497,7 +4520,7 @@
4497
4520
  "immutable": true,
4498
4521
  "locationInModule": {
4499
4522
  "filename": "lib/database/index.ts",
4500
- "line": 260
4523
+ "line": 259
4501
4524
  },
4502
4525
  "name": "addPgbouncer",
4503
4526
  "optional": true,
@@ -4515,7 +4538,7 @@
4515
4538
  "immutable": true,
4516
4539
  "locationInModule": {
4517
4540
  "filename": "lib/database/index.ts",
4518
- "line": 277
4541
+ "line": 276
4519
4542
  },
4520
4543
  "name": "bootstrapperLambdaFunctionOptions",
4521
4544
  "optional": true,
@@ -4533,7 +4556,7 @@
4533
4556
  "immutable": true,
4534
4557
  "locationInModule": {
4535
4558
  "filename": "lib/database/index.ts",
4536
- "line": 268
4559
+ "line": 267
4537
4560
  },
4538
4561
  "name": "customResourceProperties",
4539
4562
  "optional": true,
@@ -4556,7 +4579,7 @@
4556
4579
  "immutable": true,
4557
4580
  "locationInModule": {
4558
4581
  "filename": "lib/database/index.ts",
4559
- "line": 232
4582
+ "line": 231
4560
4583
  },
4561
4584
  "name": "pgstacDbName",
4562
4585
  "optional": true,
@@ -4574,7 +4597,7 @@
4574
4597
  "immutable": true,
4575
4598
  "locationInModule": {
4576
4599
  "filename": "lib/database/index.ts",
4577
- "line": 253
4600
+ "line": 252
4578
4601
  },
4579
4602
  "name": "pgstacUsername",
4580
4603
  "optional": true,
@@ -4592,7 +4615,7 @@
4592
4615
  "immutable": true,
4593
4616
  "locationInModule": {
4594
4617
  "filename": "lib/database/index.ts",
4595
- "line": 239
4618
+ "line": 238
4596
4619
  },
4597
4620
  "name": "pgstacVersion",
4598
4621
  "optional": true,
@@ -4610,7 +4633,7 @@
4610
4633
  "immutable": true,
4611
4634
  "locationInModule": {
4612
4635
  "filename": "lib/database/index.ts",
4613
- "line": 246
4636
+ "line": 245
4614
4637
  },
4615
4638
  "name": "secretsPrefix",
4616
4639
  "optional": true,
@@ -4917,7 +4940,7 @@
4917
4940
  "kind": "interface",
4918
4941
  "locationInModule": {
4919
4942
  "filename": "lib/ingestor-api/index.ts",
4920
- "line": 265
4943
+ "line": 273
4921
4944
  },
4922
4945
  "name": "StacIngestorProps",
4923
4946
  "properties": [
@@ -4930,7 +4953,7 @@
4930
4953
  "immutable": true,
4931
4954
  "locationInModule": {
4932
4955
  "filename": "lib/ingestor-api/index.ts",
4933
- "line": 269
4956
+ "line": 277
4934
4957
  },
4935
4958
  "name": "dataAccessRole",
4936
4959
  "type": {
@@ -4946,7 +4969,7 @@
4946
4969
  "immutable": true,
4947
4970
  "locationInModule": {
4948
4971
  "filename": "lib/ingestor-api/index.ts",
4949
- "line": 284
4972
+ "line": 292
4950
4973
  },
4951
4974
  "name": "stacDbSecret",
4952
4975
  "type": {
@@ -4962,7 +4985,7 @@
4962
4985
  "immutable": true,
4963
4986
  "locationInModule": {
4964
4987
  "filename": "lib/ingestor-api/index.ts",
4965
- "line": 294
4988
+ "line": 302
4966
4989
  },
4967
4990
  "name": "stacDbSecurityGroup",
4968
4991
  "type": {
@@ -4978,7 +5001,7 @@
4978
5001
  "immutable": true,
4979
5002
  "locationInModule": {
4980
5003
  "filename": "lib/ingestor-api/index.ts",
4981
- "line": 274
5004
+ "line": 282
4982
5005
  },
4983
5006
  "name": "stacUrl",
4984
5007
  "type": {
@@ -4994,7 +5017,7 @@
4994
5017
  "immutable": true,
4995
5018
  "locationInModule": {
4996
5019
  "filename": "lib/ingestor-api/index.ts",
4997
- "line": 279
5020
+ "line": 287
4998
5021
  },
4999
5022
  "name": "stage",
5000
5023
  "type": {
@@ -5010,7 +5033,7 @@
5010
5033
  "immutable": true,
5011
5034
  "locationInModule": {
5012
5035
  "filename": "lib/ingestor-api/index.ts",
5013
- "line": 309
5036
+ "line": 317
5014
5037
  },
5015
5038
  "name": "apiEndpointConfiguration",
5016
5039
  "optional": true,
@@ -5027,7 +5050,7 @@
5027
5050
  "immutable": true,
5028
5051
  "locationInModule": {
5029
5052
  "filename": "lib/ingestor-api/index.ts",
5030
- "line": 304
5053
+ "line": 312
5031
5054
  },
5032
5055
  "name": "apiEnv",
5033
5056
  "optional": true,
@@ -5050,7 +5073,7 @@
5050
5073
  "immutable": true,
5051
5074
  "locationInModule": {
5052
5075
  "filename": "lib/ingestor-api/index.ts",
5053
- "line": 326
5076
+ "line": 334
5054
5077
  },
5055
5078
  "name": "apiLambdaFunctionOptions",
5056
5079
  "optional": true,
@@ -5067,7 +5090,7 @@
5067
5090
  "immutable": true,
5068
5091
  "locationInModule": {
5069
5092
  "filename": "lib/ingestor-api/index.ts",
5070
- "line": 314
5093
+ "line": 322
5071
5094
  },
5072
5095
  "name": "apiPolicy",
5073
5096
  "optional": true,
@@ -5084,7 +5107,7 @@
5084
5107
  "immutable": true,
5085
5108
  "locationInModule": {
5086
5109
  "filename": "lib/ingestor-api/index.ts",
5087
- "line": 319
5110
+ "line": 327
5088
5111
  },
5089
5112
  "name": "ingestorDomainNameOptions",
5090
5113
  "optional": true,
@@ -5102,7 +5125,7 @@
5102
5125
  "immutable": true,
5103
5126
  "locationInModule": {
5104
5127
  "filename": "lib/ingestor-api/index.ts",
5105
- "line": 333
5128
+ "line": 341
5106
5129
  },
5107
5130
  "name": "ingestorLambdaFunctionOptions",
5108
5131
  "optional": true,
@@ -5110,6 +5133,24 @@
5110
5133
  "primitive": "any"
5111
5134
  }
5112
5135
  },
5136
+ {
5137
+ "abstract": true,
5138
+ "docs": {
5139
+ "default": "- default settings are defined in the construct",
5140
+ "stability": "experimental",
5141
+ "summary": "pgstac version - must match the version installed on the pgstac database."
5142
+ },
5143
+ "immutable": true,
5144
+ "locationInModule": {
5145
+ "filename": "lib/ingestor-api/index.ts",
5146
+ "line": 348
5147
+ },
5148
+ "name": "pgstacVersion",
5149
+ "optional": true,
5150
+ "type": {
5151
+ "primitive": "string"
5152
+ }
5153
+ },
5113
5154
  {
5114
5155
  "abstract": true,
5115
5156
  "docs": {
@@ -5119,7 +5160,7 @@
5119
5160
  "immutable": true,
5120
5161
  "locationInModule": {
5121
5162
  "filename": "lib/ingestor-api/index.ts",
5122
- "line": 299
5163
+ "line": 307
5123
5164
  },
5124
5165
  "name": "subnetSelection",
5125
5166
  "optional": true,
@@ -5136,7 +5177,7 @@
5136
5177
  "immutable": true,
5137
5178
  "locationInModule": {
5138
5179
  "filename": "lib/ingestor-api/index.ts",
5139
- "line": 289
5180
+ "line": 297
5140
5181
  },
5141
5182
  "name": "vpc",
5142
5183
  "optional": true,
@@ -5618,6 +5659,6 @@
5618
5659
  "symbolId": "lib/titiler-pgstac-api/index:TitilerPgstacApiLambda"
5619
5660
  }
5620
5661
  },
5621
- "version": "8.0.0",
5622
- "fingerprint": "/k8xnh54INJJWLVNyDW3e0dw7v2v/omysQ1NLeey9Ck="
5662
+ "version": "8.0.2",
5663
+ "fingerprint": "BlIi9cM3OjG858To0exIYzoPPxbdVqZryx+/sGygDqY="
5623
5664
  }
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [8.0.2](https://github.com/developmentseed/eoapi-cdk/compare/v8.0.1...v8.0.2) (2025-03-11)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * refactor to keep database pgstac and ingestor pypgstac in sync ([#137](https://github.com/developmentseed/eoapi-cdk/issues/137)) ([cdf1a66](https://github.com/developmentseed/eoapi-cdk/commit/cdf1a6629905384b697ef00c39b1a6b10d15b592))
7
+
8
+ ## [8.0.1](https://github.com/developmentseed/eoapi-cdk/compare/v8.0.0...v8.0.1) (2025-03-11)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * disable transaction extensions by default ([#136](https://github.com/developmentseed/eoapi-cdk/issues/136)) ([18822f0](https://github.com/developmentseed/eoapi-cdk/commit/18822f09cb6794020cf348a361939e234db4b834))
14
+
1
15
  # [8.0.0](https://github.com/developmentseed/eoapi-cdk/compare/v7.6.3...v8.0.0) (2025-03-11)
2
16
 
3
17
 
@@ -1,13 +1,16 @@
1
- from aws_cdk import App, RemovalPolicy, Stack, aws_ec2, aws_rds
1
+ from aws_cdk import App, RemovalPolicy, Stack, aws_ec2, aws_iam, aws_rds
2
2
  from config import AppConfig, build_app_config
3
3
  from constructs import Construct
4
4
  from eoapi_cdk import (
5
5
  PgStacApiLambda,
6
6
  PgStacDatabase,
7
+ StacIngestor,
7
8
  TiPgApiLambda,
8
9
  TitilerPgstacApiLambda,
9
10
  )
10
11
 
12
+ PGSTAC_VERSION = "0.9.5"
13
+
11
14
 
12
15
  class VpcStack(Stack):
13
16
  def __init__(
@@ -81,7 +84,7 @@ class pgStacInfraStack(Stack):
81
84
  instance_type=aws_ec2.InstanceType(app_config.db_instance_type),
82
85
  add_pgbouncer=True,
83
86
  removal_policy=RemovalPolicy.DESTROY,
84
- pgstac_version="0.9.2",
87
+ pgstac_version=PGSTAC_VERSION,
85
88
  )
86
89
 
87
90
  assert pgstac_db.security_group
@@ -137,6 +140,31 @@ class pgStacInfraStack(Stack):
137
140
  },
138
141
  )
139
142
 
143
+ s3_read_only_role = aws_iam.Role(
144
+ self,
145
+ "S3ReadOnlyRole",
146
+ assumed_by=aws_iam.ServicePrincipal("lambda.amazonaws.com"),
147
+ description="Role with read-only access to S3 buckets",
148
+ )
149
+
150
+ s3_read_only_role.add_managed_policy(
151
+ aws_iam.ManagedPolicy.from_aws_managed_policy_name("AmazonS3ReadOnlyAccess")
152
+ )
153
+
154
+ StacIngestor(
155
+ self,
156
+ "ingestor",
157
+ data_access_role=s3_read_only_role,
158
+ stac_db_secret=pgstac_db.pgstac_secret,
159
+ stac_db_security_group=pgstac_db.security_group,
160
+ stac_url=stac_api.url,
161
+ stage="test",
162
+ pgstac_version=PGSTAC_VERSION,
163
+ api_env={
164
+ "JWKS_URL": "", # no authentication!
165
+ },
166
+ )
167
+
140
168
 
141
169
  app = App()
142
170
 
@@ -158,5 +158,5 @@ class BastionHost extends constructs_1.Construct {
158
158
  }
159
159
  exports.BastionHost = BastionHost;
160
160
  _a = JSII_RTTI_SYMBOL_1;
161
- BastionHost[_a] = { fqn: "eoapi-cdk.BastionHost", version: "8.0.0" };
161
+ BastionHost[_a] = { fqn: "eoapi-cdk.BastionHost", version: "8.0.2" };
162
162
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQU1xQjtBQUNyQiwyQ0FBdUM7QUFFdkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpR0c7QUFDSCxNQUFhLFdBQVksU0FBUSxzQkFBUztJQUd4QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXVCO1FBQy9ELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJDLHFCQUFxQjtRQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUkscUJBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUNyRCxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7WUFDZCxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUscUJBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ2pELFlBQVksRUFBRSxHQUFHLFNBQVMsZUFBZTtZQUN6QyxZQUFZLEVBQUUscUJBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUMvQixxQkFBRyxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFDckMscUJBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN0QjtZQUNELFlBQVksRUFBRSxxQkFBRyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQztnQkFDL0MsVUFBVSxFQUFFLHFCQUFHLENBQUMscUJBQXFCLENBQUMsY0FBYztnQkFDcEQsT0FBTyxFQUFFLHFCQUFHLENBQUMsa0JBQWtCLENBQUMsTUFBTTthQUN2QyxDQUFDO1lBQ0YsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLHlCQUF5QixFQUFFLElBQUk7U0FDaEMsQ0FBQyxDQUFDO1FBRUgsb0JBQW9CO1FBQ3BCLElBQUksS0FBSyxDQUFDLGVBQWUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNsQyxJQUFJLHFCQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQ3pCLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7Z0JBQ3BDLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7YUFDMUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELHNDQUFzQztRQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQy9CLEtBQUssQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFDdEMscUJBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUNsQixvQ0FBb0MsQ0FDckMsQ0FBQztRQUVGLGtDQUFrQztRQUNsQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQ2pDLHFCQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDbkIscUJBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQ2pDLFlBQVksQ0FDYixDQUFDO1FBQ0osQ0FBQztRQUVELHFCQUFxQjtRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FDM0IsSUFBSSxxQkFBRyxDQUFDLGVBQWUsQ0FBQztZQUN0QixPQUFPLEVBQUU7Z0JBQ1AsZUFBZTtnQkFDZiwrQkFBK0I7Z0JBQy9CLGVBQWU7YUFDaEI7WUFDRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7U0FDakIsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO1lBQ3hDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7WUFDL0IsVUFBVSxFQUFFLEdBQUcsU0FBUyxjQUFjO1NBQ3ZDLENBQUMsQ0FBQztRQUNILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsMkJBQTJCLEVBQUU7WUFDL0MsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCO1lBQ3JDLFVBQVUsRUFBRSxHQUFHLFNBQVMscUJBQXFCO1NBQzlDLENBQUMsQ0FBQztRQUNILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsaUNBQWlDLEVBQUU7WUFDckQsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCO1lBQzFDLFVBQVUsRUFBRSxHQUFHLFNBQVMsa0JBQWtCO1NBQzNDLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBekVILGtDQTBFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFN0YWNrLFxuICBhd3NfZWMyIGFzIGVjMixcbiAgYXdzX2lhbSBhcyBpYW0sXG4gIGF3c19yZHMgYXMgcmRzLFxuICBDZm5PdXRwdXQsXG59IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuLyoqXG4gKiBUaGUgZGF0YWJhc2UgaXMgbG9jYXRlZCBpbiBhbiBpc29sYXRlZCBzdWJuZXQsIG1lYW5pbmcgdGhhdCBpdCBpcyBub3QgYWNjZXNzaWJsZSBmcm9tIHRoZSBwdWJsaWMgaW50ZXJuZXQuIEFzIHN1Y2gsIHRvIGludGVyYWN0IHdpdGggdGhlIGRhdGFiYXNlIGRpcmVjdGx5LCBhIHVzZXIgbXVzdCB0dW5uZWwgdGhyb3VnaCBhIGJhc3Rpb24gaG9zdC5cbiAqXG4gKiAjIyMgQ29uZmlndXJpbmdcbiAqXG4gKiBUaGlzIGNvZGViYXNlIGNvbnRyb2xzIF93aG9fIGlzIGFsbG93ZWQgdG8gY29ubmVjdCB0byB0aGUgYmFzdGlvbiBob3N0LiBUaGlzIHJlcXVpcmVzIHR3byBzdGVwczpcbiAqXG4gKiAxLiBBZGRpbmcgdGhlIElQIGFkZHJlc3MgZnJvbSB3aGljaCB5b3UgYXJlIGNvbm5lY3RpbmcgdG8gdGhlIGBpcHY0QWxsb3dsaXN0YCBhcnJheVxuICogMS4gQ3JlYXRpbmcgYSBiYXN0aW9uIGhvc3Qgc3lzdGVtIHVzZXIgYnkgYWRkaW5nIHRoZSB1c2VyJ3MgY29uZmlndXJhdGlvbiBpbmZvcm0gdG8gYHVzZXJkYXRhLnlhbWxgXG4gKlxuICogIyMjIyBBZGRpbmcgYW4gSVAgYWRkcmVzcyB0byB0aGUgYGlwdjRBbGxvd2xpc3RgIGFycmF5XG4gKlxuICogVGhlIGBCYXN0aW9uSG9zdGAgY29uc3RydWN0IHRha2VzIGluIGFuIGBpcHY0QWxsb3dsaXN0YCBhcnJheSBhcyBhbiBhcmd1bWVudC4gRmluZCB5b3VyIElQIGFkZHJlc3MgKGVnIGBjdXJsIGFwaS5pcGlmeS5vcmdgKSBhbmQgYWRkIHRoYXQgdG8gdGhlIGFycmF5IGFsb25nIHdpdGggdGhlIHRyYWlsaW5nIENJRFIgYmxvY2sgKGxpa2VseSBgLzMyYCB0byBpbmRpY2F0ZSB0aGF0IHlvdSBhcmUgYWRkaW5nIGEgc2luZ2xlIElQIGFkZHJlc3MpLlxuICpcbiAqICMjIyMgQ3JlYXRpbmcgYSB1c2VyIHZpYSBgdXNlcmRhdGEueWFtbGBcbiAqXG4gKiBBZGQgYW4gZW50cnkgdG8gdGhlIGB1c2Vyc2AgYXJyYXkgd2l0aCBhIHVzZXJuYW1lIChsaWtlbHkgbWF0Y2hpbmcgeW91ciBsb2NhbCBzeXN0ZW1zIHVzZXJuYW1lLCB3aGljaCB5b3UgY2FuIGdldCBieSBydW5uaW5nIHRoZSBgd2hvYW1pYCBjb21tYW5kIGluIHlvdXIgdGVybWluYWwpIGFuZCBhIHB1YmxpYyBrZXkgKGxpa2VseSB5b3VyIGRlZmF1bHQgcHVibGljIGtleSwgd2hpY2ggeW91IGNhbiBnZXQgYnkgcnVubmluZyBgY2F0IH4vLnNzaC9pZF8qLnB1YmAgaW4geW91ciB0ZXJtaW5hbCkuXG4gKlxuICogIyMjIyBUaXBzICYgVHJpY2tzIHdoZW4gdXNpbmcgdGhlIEJhc3Rpb24gSG9zdFxuICpcbiAqICoqQ29ubmVjdGluZyB0byBSRFMgSW5zdGFuY2UgdmlhIFNTTSoqXG4gKlxuICogYGBgc2hcbiAqIGF3cyBzc20gc3RhcnQtc2Vzc2lvbiAtLXRhcmdldCAkSU5TVEFOQ0VfSUQgXFxcbiAqIC0tZG9jdW1lbnQtbmFtZSBBV1MtU3RhcnRQb3J0Rm9yd2FyZGluZ1Nlc3Npb25Ub1JlbW90ZUhvc3QgXFxcbiAqIC0tcGFyYW1ldGVycyAne1xuICogXCJob3N0XCI6IFtcbiAqIFwiZXhhbXBsZS1kYi5jNWFiY2RlZmdoaWoudXMtd2VzdC0yLnJkcy5hbWF6b25hd3MuY29tXCJcbiAqIF0sXG4gKiBcInBvcnROdW1iZXJcIjogW1xuICogXCI1NDMyXCJcbiAqIF0sXG4gKiBcImxvY2FsUG9ydE51bWJlclwiOiBbXG4gKiBcIjk5OTlcIlxuICogXVxuICogfScgXFxcbiAqIC0tcHJvZmlsZSAkQVdTX1BST0ZJTEVcbiAqIGBgYFxuICpcbiAqIGBgYHNoXG4gKiBwc3FsIC1oIGxvY2FsaG9zdCAtcCA5OTk5ICMgY29udGludWUgYWRkaW5nIHVzZXJuYW1lICgtVSkgYW5kIGRiICgtZCkgaGVyZS4uLlxuICogYGBgXG4gKlxuICogQ29ubmVjdCBkaXJlY3RseSB0byBCYXN0aW9uIEhvc3Q6XG4gKlxuICogYGBgc2hcbiAqIGF3cyBzc20gc3RhcnQtc2Vzc2lvbiAtLXRhcmdldCAkSU5TVEFOQ0VfSUQgLS1wcm9maWxlICRBV1NfUFJPRklMRVxuICogYGBgXG4gKlxuICogKipTZXR0aW5nIHVwIGFuIFNTSCB0dW5uZWwqKlxuICpcbiAqIEluIHlvdXIgYH4vLnNzaC9jb25maWdgIGZpbGUsIGFkZCBhbiBlbnRyeSBsaWtlOlxuICpcbiAqIGBgYFxuICogSG9zdCBkYi10dW5uZWxcbiAqIEhvc3RuYW1lIHt0aGUtYmFzdGlvbi1ob3N0LWFkZHJlc3N9XG4gKiBMb2NhbEZvcndhcmQgOTk5OSB7dGhlLWRiLWhvc3RuYW1lfTo1NDMyXG4gKiBgYGBcbiAqXG4gKiBUaGVuIGEgdHVubmVsIGNhbiBiZSBvcGVuZWQgdmlhOlxuICpcbiAqIGBgYFxuICogc3NoIC1OIGRiLXR1bm5lbFxuICogYGBgXG4gKlxuICogQW5kIGEgY29ubmVjdGlvbiB0byB0aGUgREIgY2FuIGJlIG1hZGUgdmlhOlxuICpcbiAqIGBgYFxuICogcHNxbCAtaCAxMjcuMC4wLjEgLXAgOTk5OSAtVSB7dXNlcm5hbWV9IC1kIHtkYXRhYmFzZX1cbiAqIGBgYFxuICpcbiAqICoqSGFuZGxpbmcgYFJFTU9URSBIT1NUIElERU5USUZJQ0FUSU9OIEhBUyBDSEFOR0VEIWAgZXJyb3IqKlxuICpcbiAqIElmIHlvdSd2ZSByZWRlcGxveWVkIGEgYmFzdGlvbiBob3N0IHRoYXQgeW91J3ZlIHByZXZpb3VzbHkgY29ubmVjdGVkIHRvLCB5b3UgbWF5IHNlZSBhbiBlcnJvciBsaWtlOlxuICpcbiAqIGBgYFxuICogQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBcbiAqIEAgICAgV0FSTklORzogUkVNT1RFIEhPU1QgSURFTlRJRklDQVRJT04gSEFTIENIQU5HRUQhICAgICBAXG4gKiBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFxuICogSVQgSVMgUE9TU0lCTEUgVEhBVCBTT01FT05FIElTIERPSU5HIFNPTUVUSElORyBOQVNUWSFcbiAqIFNvbWVvbmUgY291bGQgYmUgZWF2ZXNkcm9wcGluZyBvbiB5b3UgcmlnaHQgbm93IChtYW4taW4tdGhlLW1pZGRsZSBhdHRhY2spIVxuICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGF0IGEgaG9zdCBrZXkgaGFzIGp1c3QgYmVlbiBjaGFuZ2VkLlxuICogVGhlIGZpbmdlcnByaW50IGZvciB0aGUgRUNEU0Ega2V5IHNlbnQgYnkgdGhlIHJlbW90ZSBob3N0IGlzXG4gKiBTSEEyNTY6bVBueEFPWFRwYjA2UEZnSTFRYzhUTVEyZTliN2dvVTh5Mk5kUzVoeklyOC5cbiAqIFBsZWFzZSBjb250YWN0IHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IuXG4gKiBBZGQgY29ycmVjdCBob3N0IGtleSBpbiAvVXNlcnMvdXNlcm5hbWUvLnNzaC9rbm93bl9ob3N0cyB0byBnZXQgcmlkIG9mIHRoaXMgbWVzc2FnZS5cbiAqIE9mZmVuZGluZyBFQ0RTQSBrZXkgaW4gL1VzZXJzL3VzZXJuYW1lLy5zc2gva25vd25faG9zdHM6MjhcbiAqIEVDRFNBIGhvc3Qga2V5IGZvciBlYzItMTItMzQtNTYtNzg5LnVzLXdlc3QtMi5jb21wdXRlLmFtYXpvbmF3cy5jb20gaGFzIGNoYW5nZWQgYW5kIHlvdSBoYXZlIHJlcXVlc3RlZCBzdHJpY3QgY2hlY2tpbmcuXG4gKiBIb3N0IGtleSB2ZXJpZmljYXRpb24gZmFpbGVkLlxuICogYGBgXG4gKlxuICogVGhpcyBpcyBkdWUgdG8gdGhlIHNlcnZlcidzIGZpbmdlcnByaW50IGNoYW5naW5nLiBXZSBjYW4gc2NydWIgdGhlIGZpbmdlcnByaW50IGZyb20gb3VyIHN5c3RlbSB3aXRoIGEgY29tbWFuZCBsaWtlOlxuICpcbiAqIGBgYFxuICogc3NoLWtleWdlbiAtUiAxMi4zNC41Ni43ODlcbiAqIGBgYFxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIEJhc3Rpb25Ib3N0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgaW5zdGFuY2U6IGVjMi5JbnN0YW5jZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQmFzdGlvbkhvc3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB7IHN0YWNrTmFtZSB9ID0gU3RhY2sub2YodGhpcyk7XG5cbiAgICAvLyBCdWlsZCBlYzIgaW5zdGFuY2VcbiAgICB0aGlzLmluc3RhbmNlID0gbmV3IGVjMi5JbnN0YW5jZSh0aGlzLCBcImJhc3Rpb24taG9zdFwiLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIHZwY1N1Ym5ldHM6IHsgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFVCTElDIH0sXG4gICAgICBpbnN0YW5jZU5hbWU6IGAke3N0YWNrTmFtZX0gYmFzdGlvbiBob3N0YCxcbiAgICAgIGluc3RhbmNlVHlwZTogZWMyLkluc3RhbmNlVHlwZS5vZihcbiAgICAgICAgZWMyLkluc3RhbmNlQ2xhc3MuQlVSU1RBQkxFNF9HUkFWSVRPTixcbiAgICAgICAgZWMyLkluc3RhbmNlU2l6ZS5OQU5PXG4gICAgICApLFxuICAgICAgbWFjaGluZUltYWdlOiBlYzIuTWFjaGluZUltYWdlLmxhdGVzdEFtYXpvbkxpbnV4KHtcbiAgICAgICAgZ2VuZXJhdGlvbjogZWMyLkFtYXpvbkxpbnV4R2VuZXJhdGlvbi5BTUFaT05fTElOVVhfMixcbiAgICAgICAgY3B1VHlwZTogZWMyLkFtYXpvbkxpbnV4Q3B1VHlwZS5BUk1fNjQsXG4gICAgICB9KSxcbiAgICAgIHVzZXJEYXRhOiBwcm9wcy51c2VyRGF0YSxcbiAgICAgIHVzZXJEYXRhQ2F1c2VzUmVwbGFjZW1lbnQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBBc3NpZ24gZWxhc3RpYyBJUFxuICAgIGlmIChwcm9wcy5jcmVhdGVFbGFzdGljSXAgPz8gdHJ1ZSkge1xuICAgICAgbmV3IGVjMi5DZm5FSVAodGhpcywgXCJJUFwiLCB7XG4gICAgICAgIGluc3RhbmNlSWQ6IHRoaXMuaW5zdGFuY2UuaW5zdGFuY2VJZCxcbiAgICAgICAgdGFnczogW3sga2V5OiBcIk5hbWVcIiwgdmFsdWU6IHN0YWNrTmFtZSB9XSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFsbG93IGJhc3Rpb24gaG9zdCB0byBjb25uZWN0IHRvIGRiXG4gICAgdGhpcy5pbnN0YW5jZS5jb25uZWN0aW9ucy5hbGxvd1RvKFxuICAgICAgcHJvcHMuZGIuY29ubmVjdGlvbnMuc2VjdXJpdHlHcm91cHNbMF0sXG4gICAgICBlYzIuUG9ydC50Y3AoNTQzMiksXG4gICAgICBcIkFsbG93IGNvbm5lY3Rpb24gZnJvbSBiYXN0aW9uIGhvc3RcIlxuICAgICk7XG5cbiAgICAvLyBBbGxvdyBJUCBhY2Nlc3MgdG8gYmFzdGlvbiBob3N0XG4gICAgZm9yIChjb25zdCBpcHY0IG9mIHByb3BzLmlwdjRBbGxvd2xpc3QpIHtcbiAgICAgIHRoaXMuaW5zdGFuY2UuY29ubmVjdGlvbnMuYWxsb3dGcm9tKFxuICAgICAgICBlYzIuUGVlci5pcHY0KGlwdjQpLFxuICAgICAgICBlYzIuUG9ydC50Y3AocHJvcHMuc3NoUG9ydCB8fCAyMiksXG4gICAgICAgIFwiU1NIIEFjY2Vzc1wiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEludGVncmF0ZSB3aXRoIFNTTVxuICAgIHRoaXMuaW5zdGFuY2UuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJzc21tZXNzYWdlczoqXCIsXG4gICAgICAgICAgXCJzc206VXBkYXRlSW5zdGFuY2VJbmZvcm1hdGlvblwiLFxuICAgICAgICAgIFwiZWMybWVzc2FnZXM6KlwiLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiaW5zdGFuY2UtaWQtb3V0cHV0XCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmluc3RhbmNlLmluc3RhbmNlSWQsXG4gICAgICBleHBvcnROYW1lOiBgJHtzdGFja05hbWV9LWluc3RhbmNlLWlkYCxcbiAgICB9KTtcbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiaW5zdGFuY2UtcHVibGljLWlwLW91dHB1dFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pbnN0YW5jZS5pbnN0YW5jZVB1YmxpY0lwLFxuICAgICAgZXhwb3J0TmFtZTogYCR7c3RhY2tOYW1lfS1pbnN0YW5jZS1wdWJsaWMtaXBgLFxuICAgIH0pO1xuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJpbnN0YW5jZS1wdWJsaWMtZG5zLW5hbWUtb3V0cHV0XCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmluc3RhbmNlLmluc3RhbmNlUHVibGljRG5zTmFtZSxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX0tcHVibGljLWRucy1uYW1lYCxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc3Rpb25Ib3N0UHJvcHMge1xuICByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuICByZWFkb25seSBkYjogcmRzLklEYXRhYmFzZUluc3RhbmNlO1xuICByZWFkb25seSB1c2VyRGF0YTogZWMyLlVzZXJEYXRhO1xuICByZWFkb25seSBpcHY0QWxsb3dsaXN0OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgc3NoUG9ydD86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgYW4gZWxhc3RpYyBJUCBzaG91bGQgYmUgY3JlYXRlZCBmb3IgdGhlIGJhc3Rpb24gaG9zdC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZUVsYXN0aWNJcD86IGJvb2xlYW47XG59XG4iXX0=