cdktn 0.23.1 → 0.23.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 +1560 -1559
- package/.spec.swcrc +22 -0
- package/jest.config.js +18 -15
- package/lib/_tokens.js +1 -1
- package/lib/annotations.js +2 -2
- package/lib/app.js +2 -2
- package/lib/aspect.js +2 -2
- package/lib/backends/azurerm-backend.js +3 -3
- package/lib/backends/cloud-backend.js +5 -5
- package/lib/backends/consul-backend.js +3 -3
- package/lib/backends/cos-backend.js +3 -3
- package/lib/backends/gcs-backend.js +3 -3
- package/lib/backends/http-backend.js +3 -3
- package/lib/backends/index.js +1 -1
- package/lib/backends/local-backend.js +3 -3
- package/lib/backends/oss-backend.js +3 -3
- package/lib/backends/pg-backend.js +3 -3
- package/lib/backends/remote-backend.js +5 -5
- package/lib/backends/s3-backend.js +3 -3
- package/lib/backends/swift-backend.js +3 -3
- package/lib/complex-computed-list.js +24 -24
- package/lib/errors.js +1 -1
- package/lib/features.js +1 -1
- package/lib/functions/helpers.js +1 -1
- package/lib/functions/terraform-functions.generated.js +2 -2
- package/lib/hcl/render.js +1 -1
- package/lib/importable-resource.js +2 -2
- package/lib/index.js +1 -1
- package/lib/manifest.js +2 -2
- package/lib/private/fs.d.ts +20 -5
- package/lib/private/fs.js +43 -69
- package/lib/private/unique.js +1 -1
- package/lib/resource.js +2 -2
- package/lib/runtime.js +1 -1
- package/lib/synthesize/index.js +1 -1
- package/lib/synthesize/synthesizer.js +1 -1
- package/lib/synthesize/types.js +1 -1
- package/lib/terraform-addressable.js +1 -1
- package/lib/terraform-asset.js +2 -2
- package/lib/terraform-backend.js +2 -2
- package/lib/terraform-conditions.js +1 -1
- package/lib/terraform-count.js +2 -2
- package/lib/terraform-data-resource.js +2 -2
- package/lib/terraform-data-source.js +2 -2
- package/lib/terraform-dependable.js +1 -1
- package/lib/terraform-dynamic-block.js +1 -1
- package/lib/terraform-dynamic-expression.js +1 -1
- package/lib/terraform-element.js +2 -2
- package/lib/terraform-functions.js +2 -2
- package/lib/terraform-hcl-module.js +2 -2
- package/lib/terraform-iterator.js +6 -6
- package/lib/terraform-local.js +2 -2
- package/lib/terraform-module-asset.js +1 -1
- package/lib/terraform-module.js +2 -2
- package/lib/terraform-operators.js +2 -2
- package/lib/terraform-output.js +2 -2
- package/lib/terraform-provider.js +2 -2
- package/lib/terraform-provisioner.js +2 -2
- package/lib/terraform-remote-state.js +2 -2
- package/lib/terraform-resource-targets.js +2 -2
- package/lib/terraform-resource.js +2 -2
- package/lib/terraform-stack.js +2 -2
- package/lib/terraform-variable.js +3 -3
- package/lib/testing/adapters/jest.js +1 -1
- package/lib/testing/index.js +2 -2
- package/lib/testing/matchers.js +2 -2
- package/lib/tfExpression.js +1 -1
- package/lib/tokens/index.js +1 -1
- package/lib/tokens/lazy.js +3 -3
- package/lib/tokens/private/dependency.js +1 -1
- package/lib/tokens/private/encoding.js +1 -1
- package/lib/tokens/private/intrinsic.js +1 -1
- package/lib/tokens/private/resolve.js +1 -1
- package/lib/tokens/private/stack-trace.js +1 -1
- package/lib/tokens/private/token-map.js +1 -1
- package/lib/tokens/private/uniqueid.js +1 -1
- package/lib/tokens/resolvable.js +3 -3
- package/lib/tokens/string-fragments.js +2 -2
- package/lib/tokens/token.js +3 -3
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/lib/upgrade-id-aspect.js +2 -2
- package/lib/util.js +1 -1
- package/lib/validateEnvironment.js +1 -1
- package/lib/validations/index.js +1 -1
- package/lib/validations/validate-binary-version.js +1 -1
- package/lib/validations/validate-provider-presence.js +1 -1
- package/lib/validations/validate-terraform-version.js +1 -1
- package/node_modules/fflate/CHANGELOG.md +115 -0
- package/node_modules/{yazl → fflate}/LICENSE +3 -3
- package/node_modules/fflate/README.md +558 -0
- package/node_modules/fflate/esm/browser.d.ts +1501 -0
- package/node_modules/fflate/esm/browser.js +2665 -0
- package/node_modules/fflate/esm/index.d.mts +1501 -0
- package/node_modules/fflate/esm/index.mjs +2679 -0
- package/node_modules/fflate/lib/browser.cjs +2688 -0
- package/node_modules/fflate/lib/browser.d.cts +1501 -0
- package/node_modules/fflate/lib/index.cjs +2668 -0
- package/node_modules/fflate/lib/index.d.ts +1501 -0
- package/node_modules/fflate/lib/node-worker.cjs +32 -0
- package/node_modules/fflate/lib/node.cjs +2700 -0
- package/node_modules/fflate/lib/node.d.cts +1501 -0
- package/node_modules/fflate/lib/worker.cjs +20 -0
- package/node_modules/fflate/package.json +127 -0
- package/node_modules/fflate/umd/index.js +1 -0
- package/package.json +17 -10
- package/tsconfig.json +6 -3
- package/tsconfig.test.json +12 -0
- package/lib/testing/__tests__/matchers.test.d.ts +0 -1
- package/lib/testing/__tests__/matchers.test.js +0 -205
- package/lib/testing/adapters/__tests__/index.test.d.ts +0 -1
- package/lib/testing/adapters/__tests__/index.test.js +0 -67
- package/lib/testing/adapters/__tests__/jest.test.d.ts +0 -1
- package/lib/testing/adapters/__tests__/jest.test.js +0 -41
- package/node_modules/buffer-crc32/LICENSE +0 -19
- package/node_modules/buffer-crc32/README.md +0 -55
- package/node_modules/buffer-crc32/dist/index.cjs +0 -306
- package/node_modules/buffer-crc32/dist/index.d.cts +0 -35
- package/node_modules/buffer-crc32/dist/index.d.mts +0 -35
- package/node_modules/buffer-crc32/dist/index.mjs +0 -304
- package/node_modules/buffer-crc32/index.d.ts +0 -35
- package/node_modules/buffer-crc32/package.json +0 -54
- package/node_modules/yazl/README.md +0 -457
- package/node_modules/yazl/index.js +0 -826
- package/node_modules/yazl/package.json +0 -34
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -80,7 +80,7 @@ class StringMap extends ComplexResolvable {
|
|
|
80
80
|
}
|
|
81
81
|
exports.StringMap = StringMap;
|
|
82
82
|
_a = JSII_RTTI_SYMBOL_1;
|
|
83
|
-
StringMap[_a] = { fqn: "cdktn.StringMap", version: "0.23.
|
|
83
|
+
StringMap[_a] = { fqn: "cdktn.StringMap", version: "0.23.2" };
|
|
84
84
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
85
85
|
class NumberMap extends ComplexResolvable {
|
|
86
86
|
constructor(terraformResource, terraformAttribute) {
|
|
@@ -97,7 +97,7 @@ class NumberMap extends ComplexResolvable {
|
|
|
97
97
|
}
|
|
98
98
|
exports.NumberMap = NumberMap;
|
|
99
99
|
_b = JSII_RTTI_SYMBOL_1;
|
|
100
|
-
NumberMap[_b] = { fqn: "cdktn.NumberMap", version: "0.23.
|
|
100
|
+
NumberMap[_b] = { fqn: "cdktn.NumberMap", version: "0.23.2" };
|
|
101
101
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
102
102
|
class BooleanMap extends ComplexResolvable {
|
|
103
103
|
constructor(terraformResource, terraformAttribute) {
|
|
@@ -114,7 +114,7 @@ class BooleanMap extends ComplexResolvable {
|
|
|
114
114
|
}
|
|
115
115
|
exports.BooleanMap = BooleanMap;
|
|
116
116
|
_c = JSII_RTTI_SYMBOL_1;
|
|
117
|
-
BooleanMap[_c] = { fqn: "cdktn.BooleanMap", version: "0.23.
|
|
117
|
+
BooleanMap[_c] = { fqn: "cdktn.BooleanMap", version: "0.23.2" };
|
|
118
118
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
119
119
|
class AnyMap extends ComplexResolvable {
|
|
120
120
|
constructor(terraformResource, terraformAttribute) {
|
|
@@ -131,7 +131,7 @@ class AnyMap extends ComplexResolvable {
|
|
|
131
131
|
}
|
|
132
132
|
exports.AnyMap = AnyMap;
|
|
133
133
|
_d = JSII_RTTI_SYMBOL_1;
|
|
134
|
-
AnyMap[_d] = { fqn: "cdktn.AnyMap", version: "0.23.
|
|
134
|
+
AnyMap[_d] = { fqn: "cdktn.AnyMap", version: "0.23.2" };
|
|
135
135
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
136
136
|
class StringMapMap extends ComplexResolvable {
|
|
137
137
|
constructor(terraformResource, terraformAttribute) {
|
|
@@ -148,7 +148,7 @@ class StringMapMap extends ComplexResolvable {
|
|
|
148
148
|
}
|
|
149
149
|
exports.StringMapMap = StringMapMap;
|
|
150
150
|
_e = JSII_RTTI_SYMBOL_1;
|
|
151
|
-
StringMapMap[_e] = { fqn: "cdktn.StringMapMap", version: "0.23.
|
|
151
|
+
StringMapMap[_e] = { fqn: "cdktn.StringMapMap", version: "0.23.2" };
|
|
152
152
|
/**
|
|
153
153
|
* @deprecated Going to be replaced by Array of ComplexListItem
|
|
154
154
|
* and will be removed in the future
|
|
@@ -177,7 +177,7 @@ class ComplexComputedList extends ComplexComputedAttribute {
|
|
|
177
177
|
}
|
|
178
178
|
exports.ComplexComputedList = ComplexComputedList;
|
|
179
179
|
_f = JSII_RTTI_SYMBOL_1;
|
|
180
|
-
ComplexComputedList[_f] = { fqn: "cdktn.ComplexComputedList", version: "0.23.
|
|
180
|
+
ComplexComputedList[_f] = { fqn: "cdktn.ComplexComputedList", version: "0.23.2" };
|
|
181
181
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
182
182
|
class ComplexList extends ComplexResolvable {
|
|
183
183
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
@@ -206,7 +206,7 @@ class ComplexList extends ComplexResolvable {
|
|
|
206
206
|
}
|
|
207
207
|
exports.ComplexList = ComplexList;
|
|
208
208
|
_g = JSII_RTTI_SYMBOL_1;
|
|
209
|
-
ComplexList[_g] = { fqn: "cdktn.ComplexList", version: "0.23.
|
|
209
|
+
ComplexList[_g] = { fqn: "cdktn.ComplexList", version: "0.23.2" };
|
|
210
210
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
211
211
|
class BooleanList extends ComplexList {
|
|
212
212
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
@@ -221,7 +221,7 @@ class BooleanList extends ComplexList {
|
|
|
221
221
|
}
|
|
222
222
|
exports.BooleanList = BooleanList;
|
|
223
223
|
_h = JSII_RTTI_SYMBOL_1;
|
|
224
|
-
BooleanList[_h] = { fqn: "cdktn.BooleanList", version: "0.23.
|
|
224
|
+
BooleanList[_h] = { fqn: "cdktn.BooleanList", version: "0.23.2" };
|
|
225
225
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
226
226
|
class StringListList extends ComplexList {
|
|
227
227
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
@@ -236,7 +236,7 @@ class StringListList extends ComplexList {
|
|
|
236
236
|
}
|
|
237
237
|
exports.StringListList = StringListList;
|
|
238
238
|
_j = JSII_RTTI_SYMBOL_1;
|
|
239
|
-
StringListList[_j] = { fqn: "cdktn.StringListList", version: "0.23.
|
|
239
|
+
StringListList[_j] = { fqn: "cdktn.StringListList", version: "0.23.2" };
|
|
240
240
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
241
241
|
class NumberListList extends ComplexList {
|
|
242
242
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
@@ -251,7 +251,7 @@ class NumberListList extends ComplexList {
|
|
|
251
251
|
}
|
|
252
252
|
exports.NumberListList = NumberListList;
|
|
253
253
|
_k = JSII_RTTI_SYMBOL_1;
|
|
254
|
-
NumberListList[_k] = { fqn: "cdktn.NumberListList", version: "0.23.
|
|
254
|
+
NumberListList[_k] = { fqn: "cdktn.NumberListList", version: "0.23.2" };
|
|
255
255
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
256
256
|
class BooleanListList extends ComplexList {
|
|
257
257
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
@@ -267,7 +267,7 @@ class BooleanListList extends ComplexList {
|
|
|
267
267
|
}
|
|
268
268
|
exports.BooleanListList = BooleanListList;
|
|
269
269
|
_l = JSII_RTTI_SYMBOL_1;
|
|
270
|
-
BooleanListList[_l] = { fqn: "cdktn.BooleanListList", version: "0.23.
|
|
270
|
+
BooleanListList[_l] = { fqn: "cdktn.BooleanListList", version: "0.23.2" };
|
|
271
271
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
272
272
|
class AnyListList extends ComplexList {
|
|
273
273
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
@@ -283,7 +283,7 @@ class AnyListList extends ComplexList {
|
|
|
283
283
|
}
|
|
284
284
|
exports.AnyListList = AnyListList;
|
|
285
285
|
_m = JSII_RTTI_SYMBOL_1;
|
|
286
|
-
AnyListList[_m] = { fqn: "cdktn.AnyListList", version: "0.23.
|
|
286
|
+
AnyListList[_m] = { fqn: "cdktn.AnyListList", version: "0.23.2" };
|
|
287
287
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
288
288
|
class ComplexMap extends ComplexResolvable {
|
|
289
289
|
constructor(terraformResource, terraformAttribute) {
|
|
@@ -300,7 +300,7 @@ class ComplexMap extends ComplexResolvable {
|
|
|
300
300
|
}
|
|
301
301
|
exports.ComplexMap = ComplexMap;
|
|
302
302
|
_o = JSII_RTTI_SYMBOL_1;
|
|
303
|
-
ComplexMap[_o] = { fqn: "cdktn.ComplexMap", version: "0.23.
|
|
303
|
+
ComplexMap[_o] = { fqn: "cdktn.ComplexMap", version: "0.23.2" };
|
|
304
304
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
305
305
|
class ComplexObject extends ComplexComputedAttribute {
|
|
306
306
|
/**
|
|
@@ -339,7 +339,7 @@ class ComplexObject extends ComplexComputedAttribute {
|
|
|
339
339
|
}
|
|
340
340
|
exports.ComplexObject = ComplexObject;
|
|
341
341
|
_p = JSII_RTTI_SYMBOL_1;
|
|
342
|
-
ComplexObject[_p] = { fqn: "cdktn.ComplexObject", version: "0.23.
|
|
342
|
+
ComplexObject[_p] = { fqn: "cdktn.ComplexObject", version: "0.23.2" };
|
|
343
343
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
344
344
|
class MapList extends ComplexResolvable {
|
|
345
345
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
@@ -368,7 +368,7 @@ class MapList extends ComplexResolvable {
|
|
|
368
368
|
}
|
|
369
369
|
exports.MapList = MapList;
|
|
370
370
|
_q = JSII_RTTI_SYMBOL_1;
|
|
371
|
-
MapList[_q] = { fqn: "cdktn.MapList", version: "0.23.
|
|
371
|
+
MapList[_q] = { fqn: "cdktn.MapList", version: "0.23.2" };
|
|
372
372
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
373
373
|
class StringMapList extends MapList {
|
|
374
374
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
@@ -383,7 +383,7 @@ class StringMapList extends MapList {
|
|
|
383
383
|
}
|
|
384
384
|
exports.StringMapList = StringMapList;
|
|
385
385
|
_r = JSII_RTTI_SYMBOL_1;
|
|
386
|
-
StringMapList[_r] = { fqn: "cdktn.StringMapList", version: "0.23.
|
|
386
|
+
StringMapList[_r] = { fqn: "cdktn.StringMapList", version: "0.23.2" };
|
|
387
387
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
388
388
|
class NumberMapList extends MapList {
|
|
389
389
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
@@ -398,7 +398,7 @@ class NumberMapList extends MapList {
|
|
|
398
398
|
}
|
|
399
399
|
exports.NumberMapList = NumberMapList;
|
|
400
400
|
_s = JSII_RTTI_SYMBOL_1;
|
|
401
|
-
NumberMapList[_s] = { fqn: "cdktn.NumberMapList", version: "0.23.
|
|
401
|
+
NumberMapList[_s] = { fqn: "cdktn.NumberMapList", version: "0.23.2" };
|
|
402
402
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
403
403
|
class BooleanMapList extends MapList {
|
|
404
404
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
@@ -413,7 +413,7 @@ class BooleanMapList extends MapList {
|
|
|
413
413
|
}
|
|
414
414
|
exports.BooleanMapList = BooleanMapList;
|
|
415
415
|
_t = JSII_RTTI_SYMBOL_1;
|
|
416
|
-
BooleanMapList[_t] = { fqn: "cdktn.BooleanMapList", version: "0.23.
|
|
416
|
+
BooleanMapList[_t] = { fqn: "cdktn.BooleanMapList", version: "0.23.2" };
|
|
417
417
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
418
418
|
class AnyMapList extends MapList {
|
|
419
419
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
@@ -428,7 +428,7 @@ class AnyMapList extends MapList {
|
|
|
428
428
|
}
|
|
429
429
|
exports.AnyMapList = AnyMapList;
|
|
430
430
|
_u = JSII_RTTI_SYMBOL_1;
|
|
431
|
-
AnyMapList[_u] = { fqn: "cdktn.AnyMapList", version: "0.23.
|
|
431
|
+
AnyMapList[_u] = { fqn: "cdktn.AnyMapList", version: "0.23.2" };
|
|
432
432
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
433
433
|
class StringListMap extends ComplexMap {
|
|
434
434
|
constructor(terraformResource, terraformAttribute) {
|
|
@@ -442,7 +442,7 @@ class StringListMap extends ComplexMap {
|
|
|
442
442
|
}
|
|
443
443
|
exports.StringListMap = StringListMap;
|
|
444
444
|
_v = JSII_RTTI_SYMBOL_1;
|
|
445
|
-
StringListMap[_v] = { fqn: "cdktn.StringListMap", version: "0.23.
|
|
445
|
+
StringListMap[_v] = { fqn: "cdktn.StringListMap", version: "0.23.2" };
|
|
446
446
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
447
447
|
class NumberListMap extends ComplexMap {
|
|
448
448
|
constructor(terraformResource, terraformAttribute) {
|
|
@@ -456,7 +456,7 @@ class NumberListMap extends ComplexMap {
|
|
|
456
456
|
}
|
|
457
457
|
exports.NumberListMap = NumberListMap;
|
|
458
458
|
_w = JSII_RTTI_SYMBOL_1;
|
|
459
|
-
NumberListMap[_w] = { fqn: "cdktn.NumberListMap", version: "0.23.
|
|
459
|
+
NumberListMap[_w] = { fqn: "cdktn.NumberListMap", version: "0.23.2" };
|
|
460
460
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
461
461
|
class BooleanListMap extends ComplexMap {
|
|
462
462
|
constructor(terraformResource, terraformAttribute) {
|
|
@@ -471,7 +471,7 @@ class BooleanListMap extends ComplexMap {
|
|
|
471
471
|
}
|
|
472
472
|
exports.BooleanListMap = BooleanListMap;
|
|
473
473
|
_x = JSII_RTTI_SYMBOL_1;
|
|
474
|
-
BooleanListMap[_x] = { fqn: "cdktn.BooleanListMap", version: "0.23.
|
|
474
|
+
BooleanListMap[_x] = { fqn: "cdktn.BooleanListMap", version: "0.23.2" };
|
|
475
475
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
476
476
|
class AnyListMap extends ComplexMap {
|
|
477
477
|
constructor(terraformResource, terraformAttribute) {
|
|
@@ -486,5 +486,5 @@ class AnyListMap extends ComplexMap {
|
|
|
486
486
|
}
|
|
487
487
|
exports.AnyListMap = AnyListMap;
|
|
488
488
|
_y = JSII_RTTI_SYMBOL_1;
|
|
489
|
-
AnyListMap[_y] = { fqn: "cdktn.AnyListMap", version: "0.23.
|
|
490
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxleC1jb21wdXRlZC1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tcGxleC1jb21wdXRlZC1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyxxQ0FBK0Q7QUFLL0Qsd0JBS1c7QUFDWCw4REFBaUU7QUFDakUscUNBQW1EO0FBRW5ELCtDQUErQztBQUMvQyxNQUFlLGlCQUFpQjtJQVE5QixZQUNZLGlCQUF1QyxFQUN2QyxrQkFBMEI7UUFEMUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUN2Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7UUFFcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFBLCtCQUFpQixHQUFFLENBQUM7SUFDM0MsQ0FBQztJQUlELElBQUksR0FBRztRQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxPQUFPLENBQUMsUUFBeUI7UUFDL0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxjQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7Q0FDRjtBQUVELCtDQUErQztBQUMvQyxNQUFlLHdCQUNiLFNBQVEsaUJBQWlCO0lBR3pCLFlBQ1ksaUJBQXVDLEVBQ3ZDLGtCQUEwQjtRQUVwQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUhuQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXNCO1FBQ3ZDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBUTtJQUd0QyxDQUFDO0lBRU0sa0JBQWtCLENBQUMsa0JBQTBCO1FBQ2xE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QUksQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FDOUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLElBQUksR0FBRyxHQUFHLENBQ3JDLENBQ0YsQ0FBQztJQUNKLENBQUM7O0FBZEgsc0NBZUM7OztBQUVELCtDQUErQztBQUMvQyxNQUFhLGNBQWUsU0FBUSxVQUFVO0lBQzVDLFlBQ1ksaUJBQXVDLEVBQ3ZDLGtCQUEwQjtRQUVwQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUhuQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXNCO1FBQ3ZDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBUTtJQUd0QyxDQUFDO0lBRU0sR0FBRyxDQUFDLEdBQVc7UUFDcEIsNkJBQTZCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixDQUNyRCxHQUFHLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxHQUFHLEdBQUcsQ0FDckMsQ0FBQztJQUNKLENBQUM7O0FBYkgsd0NBY0M7OztBQUVELCtDQUErQztBQUMvQyxNQUFhLFVBQVcsU0FBUSxVQUFVO0lBQ3hDLFlBQ1ksaUJBQXVDLEVBQ3ZDLGtCQUEwQjtRQUVwQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUhuQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXNCO1FBQ3ZDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBUTtJQUd0QyxDQUFDO0lBRU0sR0FBRyxDQUFDLEdBQVc7UUFDcEIsNkJBQTZCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixDQUNyRCxHQUFHLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxHQUFHLEdBQUcsQ0FDckMsQ0FBQztJQUNKLENBQUM7O0FBYkgsZ0NBY0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHsgSVJlc29sdmFibGUsIFRva2VuLCBJUmVzb2x2ZUNvbnRleHQgfSBmcm9tIFwiLi90b2tlbnNcIjtcbmltcG9ydCB7XG4gIElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICBJVGVycmFmb3JtQWRkcmVzc2FibGUsXG59IGZyb20gXCIuL3RlcnJhZm9ybS1hZGRyZXNzYWJsZVwiO1xuaW1wb3J0IHtcbiAgcHJvcGVydHlBY2Nlc3MsXG4gIEZuLFxuICBUZXJyYWZvcm1JdGVyYXRvcixcbiAgRHluYW1pY0xpc3RUZXJyYWZvcm1JdGVyYXRvcixcbn0gZnJvbSBcIi5cIjtcbmltcG9ydCB7IGNhcHR1cmVTdGFja1RyYWNlIH0gZnJvbSBcIi4vdG9rZW5zL3ByaXZhdGUvc3RhY2stdHJhY2VcIjtcbmltcG9ydCB7IHByb3ZpZGVyVmVyc2lvbk1pc21hdGNoIH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5hYnN0cmFjdCBjbGFzcyBDb21wbGV4UmVzb2x2YWJsZSBpbXBsZW1lbnRzIElSZXNvbHZhYmxlLCBJVGVycmFmb3JtQWRkcmVzc2FibGUge1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRpb25TdGFjazogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvdGVjdGVkIF9mcW4/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMuY3JlYXRpb25TdGFjayA9IGNhcHR1cmVTdGFja1RyYWNlKCk7XG4gIH1cblxuICBhYnN0cmFjdCBjb21wdXRlRnFuKCk6IHN0cmluZztcblxuICBnZXQgZnFuKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl9mcW4pIHtcbiAgICAgIHRoaXMuX2ZxbiA9IHRoaXMuY29tcHV0ZUZxbigpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9mcW47XG4gIH1cblxuICByZXNvbHZlKF9jb250ZXh0OiBJUmVzb2x2ZUNvbnRleHQpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmZxbjtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKHRoaXMpO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5hYnN0cmFjdCBjbGFzcyBDb21wbGV4Q29tcHV0ZWRBdHRyaWJ1dGVcbiAgZXh0ZW5kcyBDb21wbGV4UmVzb2x2YWJsZVxuICBpbXBsZW1lbnRzIElJbnRlcnBvbGF0aW5nUGFyZW50XG57XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdHJpbmdBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcodGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZSkpO1xuICB9XG5cbiAgcHVibGljIGdldE51bWJlckF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHJldHVybiBUb2tlbi5hc051bWJlcih0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TGlzdEF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHJldHVybiBUb2tlbi5hc0xpc3QodGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZSkpO1xuICB9XG5cbiAgcHVibGljIGdldEJvb2xlYW5BdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpOiBJUmVzb2x2YWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgcHVibGljIGdldE51bWJlckxpc3RBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNOdW1iZXJMaXN0KFxuICAgICAgdGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdHJpbmdNYXBBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmdNYXAoXG4gICAgICB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldE51bWJlck1hcEF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHJldHVybiBUb2tlbi5hc051bWJlck1hcChcbiAgICAgIHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGUpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Qm9vbGVhbk1hcEF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHJldHVybiBUb2tlbi5hc0Jvb2xlYW5NYXAoXG4gICAgICB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEFueU1hcEF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHJldHVybiBUb2tlbi5hc0FueU1hcCh0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlKSk7XG4gIH1cblxuICBwdWJsaWMgYWJzdHJhY3QgaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyk6IGFueTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBTdHJpbmdNYXBcbiAgZXh0ZW5kcyBDb21wbGV4UmVzb2x2YWJsZVxuICBpbXBsZW1lbnRzIElUZXJyYWZvcm1BZGRyZXNzYWJsZVxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBwdWJsaWMgbG9va3VwKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVtcIiR7a2V5fVwiXWAsXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBjb21wdXRlRnFuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRoaXMudGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgTnVtYmVyTWFwXG4gIGV4dGVuZHMgQ29tcGxleFJlc29sdmFibGVcbiAgaW1wbGVtZW50cyBJVGVycmFmb3JtQWRkcmVzc2FibGVcbntcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgcHVibGljIGxvb2t1cChrZXk6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIFRva2VuLmFzTnVtYmVyKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bXCIke2tleX1cIl1gLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgY29tcHV0ZUZxbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSksXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIEJvb2xlYW5NYXBcbiAgZXh0ZW5kcyBDb21wbGV4UmVzb2x2YWJsZVxuICBpbXBsZW1lbnRzIElUZXJyYWZvcm1BZGRyZXNzYWJsZVxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBwdWJsaWMgbG9va3VwKGtleTogc3RyaW5nKTogSVJlc29sdmFibGUge1xuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bXCIke2tleX1cIl1gLFxuICAgICk7XG4gIH1cblxuICBjb21wdXRlRnFuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRoaXMudGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgQW55TWFwIGV4dGVuZHMgQ29tcGxleFJlc29sdmFibGUgaW1wbGVtZW50cyBJVGVycmFmb3JtQWRkcmVzc2FibGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBwdWJsaWMgbG9va3VwKGtleTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gVG9rZW4uYXNBbnkoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVtcIiR7a2V5fVwiXWAsXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBjb21wdXRlRnFuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRoaXMudGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgU3RyaW5nTWFwTWFwXG4gIGV4dGVuZHMgQ29tcGxleFJlc29sdmFibGVcbiAgaW1wbGVtZW50cyBJVGVycmFmb3JtQWRkcmVzc2FibGVcbntcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgcHVibGljIGxvb2t1cChrZXk6IHN0cmluZyk6IFN0cmluZ01hcCB7XG4gICAgcmV0dXJuIG5ldyBTdHJpbmdNYXAoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLFxuICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9W1wiJHtrZXl9XCJdYCxcbiAgICApO1xuICB9XG5cbiAgY29tcHV0ZUZxbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSksXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIEdvaW5nIHRvIGJlIHJlcGxhY2VkIGJ5IEFycmF5IG9mIENvbXBsZXhMaXN0SXRlbVxuICogYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wbGV4Q29tcHV0ZWRMaXN0IGV4dGVuZHMgQ29tcGxleENvbXB1dGVkQXR0cmlidXRlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIGNvbXBsZXhDb21wdXRlZExpc3RJbmRleDogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB3cmFwc1NldD86IGJvb2xlYW4sXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICAgIHRocm93IHByb3ZpZGVyVmVyc2lvbk1pc21hdGNoKCk7XG4gIH1cblxuICBwdWJsaWMgaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMud3JhcHNTZXQpIHtcbiAgICAgIHJldHVybiBwcm9wZXJ0eUFjY2VzcyhcbiAgICAgICAgRm4udG9saXN0KFxuICAgICAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgICAgIHRoaXMudGVycmFmb3JtQXR0cmlidXRlLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICAgIFt0aGlzLmNvbXBsZXhDb21wdXRlZExpc3RJbmRleCwgcHJvcGVydHldLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9WyR7dGhpcy5jb21wbGV4Q29tcHV0ZWRMaXN0SW5kZXh9XS4ke3Byb3BlcnR5fWAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbXB1dGVGcW4oKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy53cmFwc1NldCkge1xuICAgICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgICBwcm9wZXJ0eUFjY2VzcyhcbiAgICAgICAgICBGbi50b2xpc3QoXG4gICAgICAgICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgIHRoaXMudGVycmFmb3JtQXR0cmlidXRlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICAgIFt0aGlzLmNvbXBsZXhDb21wdXRlZExpc3RJbmRleF0sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9WyR7dGhpcy5jb21wbGV4Q29tcHV0ZWRMaXN0SW5kZXh9XWAsXG4gICAgICApLFxuICAgICk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb21wbGV4TGlzdFxuICBleHRlbmRzIENvbXBsZXhSZXNvbHZhYmxlXG4gIGltcGxlbWVudHMgSVRlcnJhZm9ybUFkZHJlc3NhYmxlXG57XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB3cmFwc1NldDogYm9vbGVhbixcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBjb21wdXRlRnFuKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMud3JhcHNTZXQpIHtcbiAgICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgICAgRm4udG9saXN0KFxuICAgICAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgICAgIHRoaXMudGVycmFmb3JtQXR0cmlidXRlLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcoXG4gICAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgICB0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0aW5nIGFuIGl0ZXJhdG9yIGZvciB0aGlzIGNvbXBsZXggbGlzdC5cbiAgICogVGhlIGxpc3Qgd2lsbCBiZSBjb252ZXJ0ZWQgaW50byBhIG1hcCB3aXRoIHRoZSBtYXBLZXlBdHRyaWJ1dGVOYW1lIGFzIHRoZSBrZXkuXG4gICAqIEBwYXJhbSBtYXBLZXlBdHRyaWJ1dGVOYW1lXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgYWxsV2l0aE1hcEtleShcbiAgICBtYXBLZXlBdHRyaWJ1dGVOYW1lOiBzdHJpbmcsXG4gICk6IER5bmFtaWNMaXN0VGVycmFmb3JtSXRlcmF0b3Ige1xuICAgIHJldHVybiBUZXJyYWZvcm1JdGVyYXRvci5mcm9tQ29tcGxleExpc3QoXG4gICAgICBUb2tlbi5hc0FueSh0aGlzLmNvbXB1dGVGcW4oKSksXG4gICAgICBtYXBLZXlBdHRyaWJ1dGVOYW1lLFxuICAgICk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBCb29sZWFuTGlzdCBleHRlbmRzIENvbXBsZXhMaXN0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHdyYXBzU2V0OiBib29sZWFuLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCB3cmFwc1NldCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpOiBJUmVzb2x2YWJsZSB7XG4gICAgcmV0dXJuIEZuLmVsZW1lbnQodGhpcywgaW5kZXgpO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgU3RyaW5nTGlzdExpc3QgZXh0ZW5kcyBDb21wbGV4TGlzdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB3cmFwc1NldDogYm9vbGVhbixcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpO1xuICB9XG5cbiAgcHVibGljIGdldChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIFRva2VuLmFzTGlzdChcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9WyR7aW5kZXh9XWAsXG4gICAgICApLFxuICAgICk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBOdW1iZXJMaXN0TGlzdCBleHRlbmRzIENvbXBsZXhMaXN0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHdyYXBzU2V0OiBib29sZWFuLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCB3cmFwc1NldCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNOdW1iZXJMaXN0KFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bJHtpbmRleH1dYCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIEJvb2xlYW5MaXN0TGlzdCBleHRlbmRzIENvbXBsZXhMaXN0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHdyYXBzU2V0OiBib29sZWFuLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCB3cmFwc1NldCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpIHtcbiAgICAvLyBUaGlzIGlzbid0IGZ1bGx5IHN1cHBvcnRlZFxuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bJHtpbmRleH1dYCxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgQW55TGlzdExpc3QgZXh0ZW5kcyBDb21wbGV4TGlzdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB3cmFwc1NldDogYm9vbGVhbixcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpO1xuICB9XG5cbiAgcHVibGljIGdldChpbmRleDogbnVtYmVyKSB7XG4gICAgLy8gVGhpcyBpc24ndCBmdWxseSBzdXBwb3J0ZWRcbiAgICByZXR1cm4gdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9WyR7aW5kZXh9XWAsXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbXBsZXhNYXBcbiAgZXh0ZW5kcyBDb21wbGV4UmVzb2x2YWJsZVxuICBpbXBsZW1lbnRzIElUZXJyYWZvcm1BZGRyZXNzYWJsZVxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBjb21wdXRlRnFuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRoaXMudGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICApO1xuICB9XG5cbiAgaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5QWNjZXNzKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRoaXMudGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICAgIFtwcm9wZXJ0eV0sXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIENvbXBsZXhPYmplY3QgZXh0ZW5kcyBDb21wbGV4Q29tcHV0ZWRBdHRyaWJ1dGUge1xuICAvKipcbiAgICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlXG4gICAqIEBwYXJhbSB0ZXJyYWZvcm1BdHRyaWJ1dGVcbiAgICogQHBhcmFtIGNvbXBsZXhPYmplY3RJbmRleCB0aGUgaW5kZXggb2YgdGhlIGNvbXBsZXggb2JqZWN0IGluIGEgbGlzdFxuICAgKiBAcGFyYW0gY29tcGxleE9iamVjdElzRnJvbVNldCBzZXQgdG8gdHJ1ZSBpZiB0aGlzIGl0ZW0gaXMgZnJvbSBpbnNpZGUgYSBzZXQgYW5kIG5lZWRzIHRvbGlzdCgpIGZvciBhY2Nlc3NpbmcgaXRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRvIFwiMFwiIGZvciBzaW5nbGUgbGlzdCBpdGVtc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIGNvbXBsZXhPYmplY3RJc0Zyb21TZXQ6IGJvb2xlYW4sXG4gICAgcHJvdGVjdGVkIGNvbXBsZXhPYmplY3RJbmRleD86IG51bWJlciB8IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBwdWJsaWMgaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuY29tcGxleE9iamVjdElzRnJvbVNldCkge1xuICAgICAgcmV0dXJuIHByb3BlcnR5QWNjZXNzKFxuICAgICAgICBGbi50b2xpc3QoXG4gICAgICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgICAgICAgdGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUsXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICAgW3RoaXMuY29tcGxleE9iamVjdEluZGV4LCBwcm9wZXJ0eV0sXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICB0aGlzLmNvbXBsZXhPYmplY3RJbmRleCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9WyR7dGhpcy5jb21wbGV4T2JqZWN0SW5kZXh9XS4ke3Byb3BlcnR5fWBcbiAgICAgICAgOiBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX0uJHtwcm9wZXJ0eX1gLFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW50ZXJwb2xhdGlvbkFzTGlzdCgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9LipgLFxuICAgICk7XG4gIH1cblxuICBjb21wdXRlRnFuKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuY29tcGxleE9iamVjdElzRnJvbVNldCkge1xuICAgICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgICBwcm9wZXJ0eUFjY2VzcyhcbiAgICAgICAgICBGbi50b2xpc3QoXG4gICAgICAgICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgIHRoaXMudGVycmFmb3JtQXR0cmlidXRlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICAgIFt0aGlzLmNvbXBsZXhPYmplY3RJbmRleF0sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgdGhpcy5jb21wbGV4T2JqZWN0SW5kZXggIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9WyR7dGhpcy5jb21wbGV4T2JqZWN0SW5kZXh9XWBcbiAgICAgICAgICA6IHRoaXMudGVycmFmb3JtQXR0cmlidXRlLFxuICAgICAgKSxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTWFwTGlzdFxuICBleHRlbmRzIENvbXBsZXhSZXNvbHZhYmxlXG4gIGltcGxlbWVudHMgSVRlcnJhZm9ybUFkZHJlc3NhYmxlLCBJSW50ZXJwb2xhdGluZ1BhcmVudFxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgd3JhcHNTZXQ6IGJvb2xlYW4sXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgY29tcHV0ZUZxbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLndyYXBzU2V0KSB7XG4gICAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcoXG4gICAgICAgIEZuLnRvbGlzdChcbiAgICAgICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgICAgICB0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgICAgdGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUocHJvcGVydHk6IHN0cmluZyk6IElSZXNvbHZhYmxlIHtcbiAgICBpZiAodGhpcy53cmFwc1NldCkge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IHByb3BlcnR5Lm1hdGNoKC9cXFsoW15cXF1dKilcXF0vKTsgLy8gbmVlZCB0byBleHRyYWN0IG91dCB0aGUgaW5kZXhcbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eUFjY2VzcyhcbiAgICAgICAgICBGbi50b2xpc3QoXG4gICAgICAgICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgIHRoaXMudGVycmFmb3JtQXR0cmlidXRlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICAgIFttYXRjaGVzWzFdLCBwcm9wZXJ0eV0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfSR7cHJvcGVydHl9YCxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgU3RyaW5nTWFwTGlzdCBleHRlbmRzIE1hcExpc3Qge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgd3JhcHNTZXQ6IGJvb2xlYW4sXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIHdyYXBzU2V0KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgU3RyaW5nTWFwKHRoaXMsIGBbJHtpbmRleH1dYCk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBOdW1iZXJNYXBMaXN0IGV4dGVuZHMgTWFwTGlzdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB3cmFwc1NldDogYm9vbGVhbixcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpO1xuICB9XG5cbiAgcHVibGljIGdldChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBOdW1iZXJNYXAodGhpcywgYFske2luZGV4fV1gKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIEJvb2xlYW5NYXBMaXN0IGV4dGVuZHMgTWFwTGlzdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB3cmFwc1NldDogYm9vbGVhbixcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpO1xuICB9XG5cbiAgcHVibGljIGdldChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBCb29sZWFuTWFwKHRoaXMsIGBbJHtpbmRleH1dYCk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBBbnlNYXBMaXN0IGV4dGVuZHMgTWFwTGlzdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB3cmFwc1NldDogYm9vbGVhbixcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpO1xuICB9XG5cbiAgcHVibGljIGdldChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBBbnlNYXAodGhpcywgYFske2luZGV4fV1gKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIFN0cmluZ0xpc3RNYXAgZXh0ZW5kcyBDb21wbGV4TWFwIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgcHVibGljIGdldChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBUb2tlbi5hc0xpc3QoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVske2tleX1dYCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIE51bWJlckxpc3RNYXAgZXh0ZW5kcyBDb21wbGV4TWFwIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgcHVibGljIGdldChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBUb2tlbi5hc051bWJlckxpc3QoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVske2tleX1dYCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIEJvb2xlYW5MaXN0TWFwIGV4dGVuZHMgQ29tcGxleE1hcCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoa2V5OiBzdHJpbmcpIHtcbiAgICAvLyBUaGlzIGlzbid0IGZ1bGx5IHN1cHBvcnRlZFxuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bJHtrZXl9XWAsXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIEFueUxpc3RNYXAgZXh0ZW5kcyBDb21wbGV4TWFwIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgcHVibGljIGdldChrZXk6IHN0cmluZykge1xuICAgIC8vIFRoaXMgaXNuJ3QgZnVsbHkgc3VwcG9ydGVkXG4gICAgcmV0dXJuIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVske2tleX1dYCxcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
489
|
+
AnyListMap[_y] = { fqn: "cdktn.AnyListMap", version: "0.23.2" };
|
|
490
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxleC1jb21wdXRlZC1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbXBsZXgtY29tcHV0ZWQtbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMscUNBQStEO0FBSy9ELHdCQUtXO0FBQ1gsOERBQWlFO0FBQ2pFLHFDQUFtRDtBQUVuRCwrQ0FBK0M7QUFDL0MsTUFBZSxpQkFBaUI7SUFROUIsWUFDWSxpQkFBdUMsRUFDdkMsa0JBQTBCO1FBRDFCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBc0I7UUFDdkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFRO1FBRXBDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBQSwrQkFBaUIsR0FBRSxDQUFDO0lBQzNDLENBQUM7SUFJRCxJQUFJLEdBQUc7UUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsT0FBTyxDQUFDLFFBQXlCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sY0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUFFRCwrQ0FBK0M7QUFDL0MsTUFBZSx3QkFDYixTQUFRLGlCQUFpQjtJQUd6QixZQUNZLGlCQUF1QyxFQUN2QyxrQkFBMEI7UUFFcEMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFIbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUN2Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7SUFHdEMsQ0FBQztJQUVNLGtCQUFrQixDQUFDLGtCQUEw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QUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMseUJBQXlCLENBQzlDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixJQUFJLEdBQUcsR0FBRyxDQUNyQyxDQUNGLENBQUM7SUFDSixDQUFDOztBQWRILHNDQWVDOzs7QUFFRCwrQ0FBK0M7QUFDL0MsTUFBYSxjQUFlLFNBQVEsVUFBVTtJQUM1QyxZQUNZLGlCQUF1QyxFQUN2QyxrQkFBMEI7UUFFcEMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFIbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUN2Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7SUFHdEMsQ0FBQztJQUVNLEdBQUcsQ0FBQyxHQUFXO1FBQ3BCLDZCQUE2QjtRQUM3QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FDckQsR0FBRyxJQUFJLENBQUMsa0JBQWtCLElBQUksR0FBRyxHQUFHLENBQ3JDLENBQUM7SUFDSixDQUFDOztBQWJILHdDQWNDOzs7QUFFRCwrQ0FBK0M7QUFDL0MsTUFBYSxVQUFXLFNBQVEsVUFBVTtJQUN4QyxZQUNZLGlCQUF1QyxFQUN2QyxrQkFBMEI7UUFFcEMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFIbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUN2Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7SUFHdEMsQ0FBQztJQUVNLEdBQUcsQ0FBQyxHQUFXO1FBQ3BCLDZCQUE2QjtRQUM3QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FDckQsR0FBRyxJQUFJLENBQUMsa0JBQWtCLElBQUksR0FBRyxHQUFHLENBQ3JDLENBQUM7SUFDSixDQUFDOztBQWJILGdDQWNDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IElSZXNvbHZhYmxlLCBUb2tlbiwgSVJlc29sdmVDb250ZXh0IH0gZnJvbSBcIi4vdG9rZW5zXCI7XG5pbXBvcnQge1xuICBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgSVRlcnJhZm9ybUFkZHJlc3NhYmxlLFxufSBmcm9tIFwiLi90ZXJyYWZvcm0tYWRkcmVzc2FibGVcIjtcbmltcG9ydCB7XG4gIHByb3BlcnR5QWNjZXNzLFxuICBGbixcbiAgVGVycmFmb3JtSXRlcmF0b3IsXG4gIER5bmFtaWNMaXN0VGVycmFmb3JtSXRlcmF0b3IsXG59IGZyb20gXCIuXCI7XG5pbXBvcnQgeyBjYXB0dXJlU3RhY2tUcmFjZSB9IGZyb20gXCIuL3Rva2Vucy9wcml2YXRlL3N0YWNrLXRyYWNlXCI7XG5pbXBvcnQgeyBwcm92aWRlclZlcnNpb25NaXNtYXRjaCB9IGZyb20gXCIuL2Vycm9yc1wiO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuYWJzdHJhY3QgY2xhc3MgQ29tcGxleFJlc29sdmFibGUgaW1wbGVtZW50cyBJUmVzb2x2YWJsZSwgSVRlcnJhZm9ybUFkZHJlc3NhYmxlIHtcbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0aW9uU3RhY2s6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfZnFuPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICApIHtcbiAgICB0aGlzLmNyZWF0aW9uU3RhY2sgPSBjYXB0dXJlU3RhY2tUcmFjZSgpO1xuICB9XG5cbiAgYWJzdHJhY3QgY29tcHV0ZUZxbigpOiBzdHJpbmc7XG5cbiAgZ2V0IGZxbigpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fZnFuKSB7XG4gICAgICB0aGlzLl9mcW4gPSB0aGlzLmNvbXB1dGVGcW4oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fZnFuO1xuICB9XG5cbiAgcmVzb2x2ZShfY29udGV4dDogSVJlc29sdmVDb250ZXh0KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5mcW47XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyh0aGlzKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuYWJzdHJhY3QgY2xhc3MgQ29tcGxleENvbXB1dGVkQXR0cmlidXRlXG4gIGV4dGVuZHMgQ29tcGxleFJlc29sdmFibGVcbiAgaW1wbGVtZW50cyBJSW50ZXJwb2xhdGluZ1BhcmVudFxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RyaW5nQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXROdW1iZXJBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNOdW1iZXIodGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZSkpO1xuICB9XG5cbiAgcHVibGljIGdldExpc3RBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNMaXN0KHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRCb29sZWFuQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKTogSVJlc29sdmFibGUge1xuICAgIHJldHVybiB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXROdW1iZXJMaXN0QXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFRva2VuLmFzTnVtYmVyTGlzdChcbiAgICAgIHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGUpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RyaW5nTWFwQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nTWFwKFxuICAgICAgdGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXROdW1iZXJNYXBBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNOdW1iZXJNYXAoXG4gICAgICB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEJvb2xlYW5NYXBBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNCb29sZWFuTWFwKFxuICAgICAgdGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBbnlNYXBBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNBbnlNYXAodGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZSkpO1xuICB9XG5cbiAgcHVibGljIGFic3RyYWN0IGludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpOiBhbnk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgU3RyaW5nTWFwXG4gIGV4dGVuZHMgQ29tcGxleFJlc29sdmFibGVcbiAgaW1wbGVtZW50cyBJVGVycmFmb3JtQWRkcmVzc2FibGVcbntcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgcHVibGljIGxvb2t1cChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bXCIke2tleX1cIl1gLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgY29tcHV0ZUZxbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSksXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIE51bWJlck1hcFxuICBleHRlbmRzIENvbXBsZXhSZXNvbHZhYmxlXG4gIGltcGxlbWVudHMgSVRlcnJhZm9ybUFkZHJlc3NhYmxlXG57XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBsb29rdXAoa2V5OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiBUb2tlbi5hc051bWJlcihcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9W1wiJHtrZXl9XCJdYCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIGNvbXB1dGVGcW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUpLFxuICAgICk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBCb29sZWFuTWFwXG4gIGV4dGVuZHMgQ29tcGxleFJlc29sdmFibGVcbiAgaW1wbGVtZW50cyBJVGVycmFmb3JtQWRkcmVzc2FibGVcbntcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgcHVibGljIGxvb2t1cChrZXk6IHN0cmluZyk6IElSZXNvbHZhYmxlIHtcbiAgICByZXR1cm4gdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9W1wiJHtrZXl9XCJdYCxcbiAgICApO1xuICB9XG5cbiAgY29tcHV0ZUZxbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSksXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIEFueU1hcCBleHRlbmRzIENvbXBsZXhSZXNvbHZhYmxlIGltcGxlbWVudHMgSVRlcnJhZm9ybUFkZHJlc3NhYmxlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgcHVibGljIGxvb2t1cChrZXk6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIFRva2VuLmFzQW55KFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bXCIke2tleX1cIl1gLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgY29tcHV0ZUZxbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSksXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIFN0cmluZ01hcE1hcFxuICBleHRlbmRzIENvbXBsZXhSZXNvbHZhYmxlXG4gIGltcGxlbWVudHMgSVRlcnJhZm9ybUFkZHJlc3NhYmxlXG57XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBsb29rdXAoa2V5OiBzdHJpbmcpOiBTdHJpbmdNYXAge1xuICAgIHJldHVybiBuZXcgU3RyaW5nTWFwKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZSxcbiAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVtcIiR7a2V5fVwiXWAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbXB1dGVGcW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUpLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBHb2luZyB0byBiZSByZXBsYWNlZCBieSBBcnJheSBvZiBDb21wbGV4TGlzdEl0ZW1cbiAqIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZVxuICovXG5leHBvcnQgY2xhc3MgQ29tcGxleENvbXB1dGVkTGlzdCBleHRlbmRzIENvbXBsZXhDb21wdXRlZEF0dHJpYnV0ZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCBjb21wbGV4Q29tcHV0ZWRMaXN0SW5kZXg6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgd3JhcHNTZXQ/OiBib29sZWFuLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtcbiAgICB0aHJvdyBwcm92aWRlclZlcnNpb25NaXNtYXRjaCgpO1xuICB9XG5cbiAgcHVibGljIGludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUocHJvcGVydHk6IHN0cmluZykge1xuICAgIGlmICh0aGlzLndyYXBzU2V0KSB7XG4gICAgICByZXR1cm4gcHJvcGVydHlBY2Nlc3MoXG4gICAgICAgIEZuLnRvbGlzdChcbiAgICAgICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgICAgICB0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgICBbdGhpcy5jb21wbGV4Q29tcHV0ZWRMaXN0SW5kZXgsIHByb3BlcnR5XSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVske3RoaXMuY29tcGxleENvbXB1dGVkTGlzdEluZGV4fV0uJHtwcm9wZXJ0eX1gLFxuICAgICk7XG4gIH1cblxuICBjb21wdXRlRnFuKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMud3JhcHNTZXQpIHtcbiAgICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgICAgcHJvcGVydHlBY2Nlc3MoXG4gICAgICAgICAgRm4udG9saXN0KFxuICAgICAgICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgICAgICAgICB0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgICBbdGhpcy5jb21wbGV4Q29tcHV0ZWRMaXN0SW5kZXhdLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVske3RoaXMuY29tcGxleENvbXB1dGVkTGlzdEluZGV4fV1gLFxuICAgICAgKSxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29tcGxleExpc3RcbiAgZXh0ZW5kcyBDb21wbGV4UmVzb2x2YWJsZVxuICBpbXBsZW1lbnRzIElUZXJyYWZvcm1BZGRyZXNzYWJsZVxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgd3JhcHNTZXQ6IGJvb2xlYW4sXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgY29tcHV0ZUZxbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLndyYXBzU2V0KSB7XG4gICAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcoXG4gICAgICAgIEZuLnRvbGlzdChcbiAgICAgICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgICAgICB0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgICAgdGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGluZyBhbiBpdGVyYXRvciBmb3IgdGhpcyBjb21wbGV4IGxpc3QuXG4gICAqIFRoZSBsaXN0IHdpbGwgYmUgY29udmVydGVkIGludG8gYSBtYXAgd2l0aCB0aGUgbWFwS2V5QXR0cmlidXRlTmFtZSBhcyB0aGUga2V5LlxuICAgKiBAcGFyYW0gbWFwS2V5QXR0cmlidXRlTmFtZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFsbFdpdGhNYXBLZXkoXG4gICAgbWFwS2V5QXR0cmlidXRlTmFtZTogc3RyaW5nLFxuICApOiBEeW5hbWljTGlzdFRlcnJhZm9ybUl0ZXJhdG9yIHtcbiAgICByZXR1cm4gVGVycmFmb3JtSXRlcmF0b3IuZnJvbUNvbXBsZXhMaXN0KFxuICAgICAgVG9rZW4uYXNBbnkodGhpcy5jb21wdXRlRnFuKCkpLFxuICAgICAgbWFwS2V5QXR0cmlidXRlTmFtZSxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgQm9vbGVhbkxpc3QgZXh0ZW5kcyBDb21wbGV4TGlzdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB3cmFwc1NldDogYm9vbGVhbixcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpO1xuICB9XG5cbiAgcHVibGljIGdldChpbmRleDogbnVtYmVyKTogSVJlc29sdmFibGUge1xuICAgIHJldHVybiBGbi5lbGVtZW50KHRoaXMsIGluZGV4KTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIFN0cmluZ0xpc3RMaXN0IGV4dGVuZHMgQ29tcGxleExpc3Qge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgd3JhcHNTZXQ6IGJvb2xlYW4sXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIHdyYXBzU2V0KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBUb2tlbi5hc0xpc3QoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVske2luZGV4fV1gLFxuICAgICAgKSxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgTnVtYmVyTGlzdExpc3QgZXh0ZW5kcyBDb21wbGV4TGlzdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB3cmFwc1NldDogYm9vbGVhbixcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpO1xuICB9XG5cbiAgcHVibGljIGdldChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIFRva2VuLmFzTnVtYmVyTGlzdChcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9WyR7aW5kZXh9XWAsXG4gICAgICApLFxuICAgICk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBCb29sZWFuTGlzdExpc3QgZXh0ZW5kcyBDb21wbGV4TGlzdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB3cmFwc1NldDogYm9vbGVhbixcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpO1xuICB9XG5cbiAgcHVibGljIGdldChpbmRleDogbnVtYmVyKSB7XG4gICAgLy8gVGhpcyBpc24ndCBmdWxseSBzdXBwb3J0ZWRcbiAgICByZXR1cm4gdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9WyR7aW5kZXh9XWAsXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIEFueUxpc3RMaXN0IGV4dGVuZHMgQ29tcGxleExpc3Qge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgd3JhcHNTZXQ6IGJvb2xlYW4sXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIHdyYXBzU2V0KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoaW5kZXg6IG51bWJlcikge1xuICAgIC8vIFRoaXMgaXNuJ3QgZnVsbHkgc3VwcG9ydGVkXG4gICAgcmV0dXJuIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVske2luZGV4fV1gLFxuICAgICk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb21wbGV4TWFwXG4gIGV4dGVuZHMgQ29tcGxleFJlc29sdmFibGVcbiAgaW1wbGVtZW50cyBJVGVycmFmb3JtQWRkcmVzc2FibGVcbntcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgY29tcHV0ZUZxbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSksXG4gICAgKTtcbiAgfVxuXG4gIGludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUocHJvcGVydHk6IHN0cmluZykge1xuICAgIHJldHVybiBwcm9wZXJ0eUFjY2VzcyhcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSksXG4gICAgICBbcHJvcGVydHldLFxuICAgICk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBDb21wbGV4T2JqZWN0IGV4dGVuZHMgQ29tcGxleENvbXB1dGVkQXR0cmlidXRlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB0ZXJyYWZvcm1SZXNvdXJjZVxuICAgKiBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlXG4gICAqIEBwYXJhbSBjb21wbGV4T2JqZWN0SW5kZXggdGhlIGluZGV4IG9mIHRoZSBjb21wbGV4IG9iamVjdCBpbiBhIGxpc3RcbiAgICogQHBhcmFtIGNvbXBsZXhPYmplY3RJc0Zyb21TZXQgc2V0IHRvIHRydWUgaWYgdGhpcyBpdGVtIGlzIGZyb20gaW5zaWRlIGEgc2V0IGFuZCBuZWVkcyB0b2xpc3QoKSBmb3IgYWNjZXNzaW5nIGl0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0byBcIjBcIiBmb3Igc2luZ2xlIGxpc3QgaXRlbXNcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCBjb21wbGV4T2JqZWN0SXNGcm9tU2V0OiBib29sZWFuLFxuICAgIHByb3RlY3RlZCBjb21wbGV4T2JqZWN0SW5kZXg/OiBudW1iZXIgfCBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgcHVibGljIGludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUocHJvcGVydHk6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmNvbXBsZXhPYmplY3RJc0Zyb21TZXQpIHtcbiAgICAgIHJldHVybiBwcm9wZXJ0eUFjY2VzcyhcbiAgICAgICAgRm4udG9saXN0KFxuICAgICAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgICAgIHRoaXMudGVycmFmb3JtQXR0cmlidXRlLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICAgIFt0aGlzLmNvbXBsZXhPYmplY3RJbmRleCwgcHJvcGVydHldLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgdGhpcy5jb21wbGV4T2JqZWN0SW5kZXggIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVske3RoaXMuY29tcGxleE9iamVjdEluZGV4fV0uJHtwcm9wZXJ0eX1gXG4gICAgICAgIDogYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9LiR7cHJvcGVydHl9YCxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGludGVycG9sYXRpb25Bc0xpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfS4qYCxcbiAgICApO1xuICB9XG5cbiAgY29tcHV0ZUZxbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmNvbXBsZXhPYmplY3RJc0Zyb21TZXQpIHtcbiAgICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgICAgcHJvcGVydHlBY2Nlc3MoXG4gICAgICAgICAgRm4udG9saXN0KFxuICAgICAgICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgICAgICAgICB0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgICBbdGhpcy5jb21wbGV4T2JqZWN0SW5kZXhdLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgIHRoaXMuY29tcGxleE9iamVjdEluZGV4ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVske3RoaXMuY29tcGxleE9iamVjdEluZGV4fV1gXG4gICAgICAgICAgOiB0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE1hcExpc3RcbiAgZXh0ZW5kcyBDb21wbGV4UmVzb2x2YWJsZVxuICBpbXBsZW1lbnRzIElUZXJyYWZvcm1BZGRyZXNzYWJsZSwgSUludGVycG9sYXRpbmdQYXJlbnRcbntcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHdyYXBzU2V0OiBib29sZWFuLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtcbiAgfVxuXG4gIGNvbXB1dGVGcW4oKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy53cmFwc1NldCkge1xuICAgICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgICBGbi50b2xpc3QoXG4gICAgICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgICAgICAgdGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUsXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgICAgIHRoaXMudGVycmFmb3JtQXR0cmlidXRlLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHByb3BlcnR5OiBzdHJpbmcpOiBJUmVzb2x2YWJsZSB7XG4gICAgaWYgKHRoaXMud3JhcHNTZXQpIHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBwcm9wZXJ0eS5tYXRjaCgvXFxbKFteXFxdXSopXFxdLyk7IC8vIG5lZWQgdG8gZXh0cmFjdCBvdXQgdGhlIGluZGV4XG4gICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gcHJvcGVydHlBY2Nlc3MoXG4gICAgICAgICAgRm4udG9saXN0KFxuICAgICAgICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgICAgICAgICB0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgICBbbWF0Y2hlc1sxXSwgcHJvcGVydHldLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX0ke3Byb3BlcnR5fWAsXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIFN0cmluZ01hcExpc3QgZXh0ZW5kcyBNYXBMaXN0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHdyYXBzU2V0OiBib29sZWFuLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCB3cmFwc1NldCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IFN0cmluZ01hcCh0aGlzLCBgWyR7aW5kZXh9XWApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgTnVtYmVyTWFwTGlzdCBleHRlbmRzIE1hcExpc3Qge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgd3JhcHNTZXQ6IGJvb2xlYW4sXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIHdyYXBzU2V0KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgTnVtYmVyTWFwKHRoaXMsIGBbJHtpbmRleH1dYCk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBCb29sZWFuTWFwTGlzdCBleHRlbmRzIE1hcExpc3Qge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgd3JhcHNTZXQ6IGJvb2xlYW4sXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIHdyYXBzU2V0KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgQm9vbGVhbk1hcCh0aGlzLCBgWyR7aW5kZXh9XWApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgQW55TWFwTGlzdCBleHRlbmRzIE1hcExpc3Qge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgd3JhcHNTZXQ6IGJvb2xlYW4sXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIHdyYXBzU2V0KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgQW55TWFwKHRoaXMsIGBbJHtpbmRleH1dYCk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBTdHJpbmdMaXN0TWFwIGV4dGVuZHMgQ29tcGxleE1hcCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNMaXN0KFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bJHtrZXl9XWAsXG4gICAgICApLFxuICAgICk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBOdW1iZXJMaXN0TWFwIGV4dGVuZHMgQ29tcGxleE1hcCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNOdW1iZXJMaXN0KFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bJHtrZXl9XWAsXG4gICAgICApLFxuICAgICk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBCb29sZWFuTGlzdE1hcCBleHRlbmRzIENvbXBsZXhNYXAge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0KGtleTogc3RyaW5nKSB7XG4gICAgLy8gVGhpcyBpc24ndCBmdWxseSBzdXBwb3J0ZWRcbiAgICByZXR1cm4gdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9WyR7a2V5fV1gLFxuICAgICk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBBbnlMaXN0TWFwIGV4dGVuZHMgQ29tcGxleE1hcCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoa2V5OiBzdHJpbmcpIHtcbiAgICAvLyBUaGlzIGlzbid0IGZ1bGx5IHN1cHBvcnRlZFxuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bJHtrZXl9XWAsXG4gICAgKTtcbiAgfVxufVxuIl19
|
package/lib/errors.js
CHANGED
|
@@ -369,4 +369,4 @@ const terraformModuleHasChildren = (pathName) => {
|
|
|
369
369
|
return new Error(`Trying to add children to a TerraformModule at '${pathName}'. TerraformModules cannot have children, if you want to group resources or constructs in general together please use the Constructs class instead. See https://cdk.tf/constructs for more details.`);
|
|
370
370
|
};
|
|
371
371
|
exports.terraformModuleHasChildren = terraformModuleHasChildren;
|
|
372
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7Ozs7QUFLSSxNQUFNLFVBQVUsR0FBRyxDQUFDLGFBQXFCLEVBQUUsRUFBRSxDQUNsRCxJQUFJLEtBQUssQ0FDUCx5REFBeUQsYUFBYTs7O0tBR3JFLENBQ0YsQ0FBQztBQU5TLFFBQUEsVUFBVSxjQU1uQjtBQUVHLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRTtJQUMzRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNELE9BQU8sSUFBSSxLQUFLLENBQ2QsbUdBQW1HLFVBQVU7Q0FDaEgsQ0FDRSxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBTlcsUUFBQSx5QkFBeUIsNkJBTXBDO0FBRUssTUFBTSxvQkFBb0IsR0FBRyxDQUFDLFNBQWlCLEVBQUUsRUFBRSxDQUN4RCxJQUFJLEtBQUssQ0FDUCw2REFBNkQsU0FBUzs7O0tBR3JFLENBQ0YsQ0FBQztBQU5TLFFBQUEsb0JBQW9CLHdCQU03QjtBQUVHLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxFQUFFLENBQzFDLElBQUksS0FBSyxDQUNQOztLQUVDLENBQ0YsQ0FBQztBQUxTLFFBQUEsdUJBQXVCLDJCQUtoQztBQUVHLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxFQUFVLEVBQUUsVUFBa0IsRUFBRSxFQUFFLENBQzNFLElBQUksS0FBSyxDQUNQLGtCQUFrQixFQUFFLHNDQUFzQyxVQUFVLCtFQUErRSxPQUFPLENBQUMsR0FBRyxFQUFFOzs7Ozs7Q0FNbkssQ0FDRSxDQUFDO0FBVFMsUUFBQSwwQkFBMEIsOEJBU25DO0FBRUcsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEVBQVUsRUFBRSxVQUFrQixF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LENBQUM7QUFEOUQsUUFBQSxvQkFBb0Isd0JBQzBDO0FBRXBFLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxnQkFBd0IsRUFBRSxFQUFFLENBQ3JFLElBQUksS0FBSyxDQUNQLDRGQUE0RixnQkFBZ0Isb09BQW9PLENBQ2pWLENBQUM7QUFIUyxRQUFBLDBCQUEwQiw4QkFHbkM7QUFFRyxNQUFNLDJCQUEyQixHQUFHLENBQ3pDLEdBQVcsRUFDWCxJQUFZLEVBQ1osS0FBWSxFQUNaLEVBQUUsQ0FDRixJQUFJLEtBQUssQ0FDUCwyQ0FBMkMsR0FBRyxVQUFVLElBQUksWUFBWSxLQUFLLEVBQUUsQ0FDaEYsQ0FBQztBQVBTLFFBQUEsMkJBQTJCLCtCQU9wQztBQUVHLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxRQUFnQixFQUFFLEVBQUU7SUFDN0QsT0FBTyxJQUFJLEtBQUssQ0FDZCxtREFBbUQsUUFBUSxxTUFBcU0sQ0FDalEsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUpXLFFBQUEsMEJBQTBCLDhCQUlyQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluYy5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4gKi9cblxuaW1wb3J0IHsgSURlcGVuZGFibGUgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgVGVycmFmb3JtU3RhY2sgfSBmcm9tIFwiLi90ZXJyYWZvcm0tc3RhY2tcIjtcblxuZXhwb3J0IGNvbnN0IG5vQXBwRm91bmQgPSAoY29uc3RydWN0UGF0aDogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYE5vIGFwcCBjb3VsZCBiZSBpZGVudGlmaWVkIGZvciB0aGUgY29uc3RydWN0IGF0IHBhdGggJyR7Y29uc3RydWN0UGF0aH0nIChsaWtlbHkgYSBUZXJyYWZvcm1TdGFjaykuXG5UaGUgc2NvcGUgb2YgQ0RLVE4ncyBUZXJyYWZvcm1TdGFjayBjbGFzcyBpcyBhIHNpbmdsZSBBcHAgaW5zdGFuY2UgY3JlYXRlZCBieSAnY29uc3QgYXBwID0gbmV3IEFwcCgpJy4gVGhlIEFwcCBpcyB5b3VyIHByb2plY3QncyByb290LCBob2xkaW5nIHByb2plY3QgY29uZmlndXJhdGlvbiBhbmQgdmFsaWRhdGlvbnMuXG5MZWFybiBtb3JlIGFib3V0IHRoZSBBcHA6IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy9jZGt0bi1hcmNoaXRlY3R1cmUjYXBwLWNsYXNzXG4gICAgYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdHNPdXRzaWRlT2ZTdGFja3MgPSAocGF0aHM6IHN0cmluZ1tdKSA9PiB7XG4gIGNvbnN0IGJ1bGxldExpc3QgPSBwYXRocy5tYXAoKHApID0+IGAgIC0gJHtwfWApLmpvaW4oXCJcXG5cIik7XG4gIHJldHVybiBuZXcgRXJyb3IoXG4gICAgYEZvdW5kIGNvbnN0cnVjdHMgb3V0c2lkZSBvZiBhIFRlcnJhZm9ybVN0YWNrIChkaWQgeW91IHBhc3Mgc2NvcGU9YXBwIGluc3RlYWQgb2Ygc2NvcGU9c3RhY2s/KTpcXG4ke2J1bGxldExpc3R9XG5gLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGFwcFZhbGlkYXRpb25GYWlsdXJlID0gKGVycm9yTGlzdDogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYEFwcC1sZXZlbCB2YWxpZGF0aW9uIGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxcbiAgJHtlcnJvckxpc3R9XG5WYWxpZGF0aW9ucyBhbGxvdyBmb3IgZHluYW1pYyB2ZXJpZmljYXRpb24gb2YgeW91ciBwcm9qZWN0LlxuVG8gc2tpcCB2YWxpZGF0aW9ucywgYWRkICdza2lwVmFsaWRhdGlvbjogdHJ1ZScgdG8geW91ciBBcHAgY29uZmlnLlxuICAgIGAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBwcm92aWRlclZlcnNpb25NaXNtYXRjaCA9ICgpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgVmVyc2lvbiBtaXNtYXRjaCBkZXRlY3RlZDogWW91ciBwcm92aWRlciBiaW5kaW5ncyBhcmUgYnVpbHQgZm9yIGFuIG9sZGVyIHZlcnNpb24gb2YgQ0RLVG4uXG5VcGdyYWRlIHlvdXIgcHJlLWJ1aWx0IHByb3ZpZGVyIG9yIHJlLXJ1biBjZGt0biBnZXQgd2l0aCBhIG1vcmUgcmVjZW50IHZlcnNpb24gKD49IDAuMTApIG9mIHRoZSBjZGt0bi1jbGkuXG4gICAgYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGFzc2V0T3V0T2ZTY29wZU9mQ0RLVEZKc29uID0gKGlkOiBzdHJpbmcsIGNvbmZpZ1BhdGg6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBUZXJyYWZvcm1Bc3NldCAke2lkfSB3YXMgY3JlYXRlZCB3aXRoIGEgcmVsYXRpdmUgcGF0aCAnJHtjb25maWdQYXRofScsIGJ1dCB3ZSBjYW5ub3QgZmluZCB0aGUgY2RrdGYuanNvbiB3aXRoaW4geW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5ICcke3Byb2Nlc3MuY3dkKCl9J1xuXG5UaGUgY2RrdGYuanNvbiBmaWxlIGlzIG5lZWRlZCB0byBlc3RhYmxpc2ggdGhlIGJhc2UgZm9yIHRoZSByZWxhdGl2ZSBwYXRoICh0aGUgJy4nIGluICcuL2Zvby9iYXInKS5cblxuUGxhY2UgYSBjZGt0Zi5qc29uIGF0IHRoZSByb290IG9mIHlvdXIgcHJvamVjdC4gTGVhcm4gbW9yZTogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL2NyZWF0ZS1hbmQtZGVwbG95L2NvbmZpZ3VyYXRpb24tZmlsZVxuTGVhcm4gbW9yZSBhYm91dCBUZXJyYWZvcm1Bc3NldDogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL2NvbmNlcHRzL2Fzc2V0c1xuYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGFzc2V0RXhwZWN0c0RpcmVjdG9yeSA9IChpZDogc3RyaW5nLCBjb25maWdQYXRoOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgVGVycmFmb3JtQXNzZXQgJHtpZH0gZXhwZWN0cyBwYXRoIHRvIHBvaW50IHRvIGEgZGlyZWN0b3J5LiBJbnN0ZWFkLCB0aGlzIGZpbGUgd2FzIHBhc3NlZDogJyR7Y29uZmlnUGF0aH0nLiBQbGVhc2UgY29ycmVjdCB0aGUgcGF0aCB0byBwb2ludCB0byBhIGRpcmVjdG9yeS5cbkxlYXJuIG1vcmUgYWJvdXQgVGVycmFmb3JtQXNzZXQ6IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy9hc3NldHNcbiAgICBgLFxuICApO1xuXG5leHBvcnQgY29uc3QgYXNzZXRUeXBlTm90SW1wbGVtZW50ZWQgPSAoKSA9PlxuICBuZXcgRXJyb3IoYEFzc2V0IHR5cGUgaXMgbm90IGltcGxlbWVudGVkLlxuUG9zc2libGUgQXNzZXQgdHlwZXMgaW5jbHVkZTogRklMRSwgRElSRUNUT1JZLCBhbmQgQVJDSElWRS5cblRha2Ugb25lIG9mIHRoZXNlIHZhbHVlcyBmcm9tIHRoZSBBc3NldFR5cGUgRW51bS5cbkxlYXJuIG1vcmUgYWJvdXQgVGVycmFmb3JtQXNzZXQ6IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy9hc3NldHNcbiAgYCk7XG5cbmV4cG9ydCBjb25zdCBkeW5hbWljQmxvY2tOb3RTdXBwb3J0ZWQgPSAoX2ZvcmVhY2hFeHByZXNzaW9uOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgV2UgZG8gbm90IHN1cHBvcnQgZGlyZWN0bHkgcmVzb2x2aW5nIGEgVGVycmFmb3JtRHluYW1pY0Jsb2NrLiBEeW5hbWljIGJsb2NrcyBhcmUgb25seSBzdXBwb3J0ZWQgb24gYmxvY2sgYXR0cmlidXRlcyBvZiByZXNvdXJjZXMsIGRhdGEgc291cmNlcywgYW5kIHByb3ZpZGVycy5cblxuWW91IGNhbiBjcmVhdGUgYSBUZXJyYWZvcm1EeW5hbWljQmxvY2sgYnkgY2FsbGluZyAnLmR5bmFtaWMnIG9uIGEgVGVycmFmb3JtSXRlcmF0b3IgaW5zdGFuY2UuXG5cblRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbiB3YXMgdXNlZCBmb3IgdGhlIGR5bmFtaWMgYmxvY2s6IC5keW5hbWljKHtcbiAgJHtfZm9yZWFjaEV4cHJlc3Npb259XG59KVxuYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IHVucmVzb2x2ZWRUb2tlbkluQ29uc3RydWN0SWQgPSAoaWQ6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBZb3UgY2Fubm90IHVzZSBhIHRva2VuIChlLmcuLCBhIHJlZmVyZW5jZSB0byBhbiBhdHRyaWJ1dGUpIGFzIHRoZSBpZCBvZiBhIGNvbnN0cnVjdC4gSWRzIG9mIGNvbnN0cnVjdHMgbXVzdCBiZSBrbm93biBhdCBzeW50aGVzaXMgdGltZSwgYW5kIHRva2VuIHZhbHVlcyBhcmUgb25seSBrbm93biB3aGVuIFRlcnJhZm9ybSBydW5zLiBQbGVhc2UgdXNlIGEgY29uY3JldGUgdmFsdWUgZm9yIHlvdXIgY29uc3RydWN0cyBJRCBpbnN0ZWFkLlxuWW91IHBhc3NlZCB0aGUgZm9sbG93aW5nIGlkOiBcIiR7aWR9XCJcbmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBpdGVyYXRvck9uUmVzb3VyY2VXaXRoQ291bnQgPSAoKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYFlvdSBjYW5ub3QgY3JlYXRlIGFuIGl0ZXJhdG9yIGZyb20gYSByZXNvdXJjZSB3aXRoIGEgY291bnQgYXJndW1lbnQuXG5JbnN0ZWFkLCByZXVzZSB0aGlzIHJlc291cmNlJ3MgVGVycmFmb3JtQ291bnQgaW5zdGFuY2UgaW4gdGhlIHJlc291cmNlIHlvdSB3YW50IHRvIHVzZSBhcyBhbiBpdGVyYXRvci5cblxuSWYgeW91IHdhbnQgdG8gdXNlIGFuIGl0ZXJhdG9yIHRvIHBvcHVsYXRlIGEgbGlzdCBhdHRyaWJ1dGUsIHJlcGxhY2UgdGhlIGNvdW50IG9uIHRoZSByZXNvdXJjZSB3aXRoIGFuIGl0ZXJhdG9yIHBhc3NlZCBpbnRvIHRoZSBmb3JFYWNoIGFyZ3VtZW50LmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBpdGVyYXRvck9uUmVzb3VyY2VXaXRob3V0Rm9yRWFjaCA9ICgpID0+XG4gIG5ldyBFcnJvcihgQ2Fubm90IGNyZWF0ZSBhbiBpdGVyYXRvciBmcm9tIGEgcmVzb3VyY2Ugd2l0aG91dCBhIGZvckVhY2ggYXJndW1lbnQuIElmIHlvdSB3YW50IHRvIGNyZWF0ZSBtb3JlIGluc3RhbmNlcyBvZiB0aGlzIHJlc291cmNlLCBwYXNzIGFuIGl0ZXJhdG9yIHRvIHRoZSBmb3JFYWNoIGFyZ3VtZW50IG9mIHRoZSByZXNvdXJjZSBmaXJzdC5cbiAgYCk7XG5cbmV4cG9ydCBjb25zdCBtb2R1bGVzV2l0aFNhbWVBbGlhcyA9IChhbGlhczogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoYE11bHRpcGxlIHByb3ZpZGVycyBoYXZlIHRoZSBzYW1lIGFsaWFzOiBcIiR7YWxpYXN9XCJcbkVhY2ggcHJvdmlkZXIgbXVzdCBoYXZlIGEgdW5pcXVlIGFsaWFzIHdoZW4gcGFzc2luZyBtdWx0aXBsZSBwcm92aWRlcnMgb2YgdGhlIHNhbWUgdHlwZSB0byBtb2R1bGVzLlxuICBgKTtcblxuZXhwb3J0IGNvbnN0IG1vdmVUYXJnZXRBbHJlYWR5U2V0ID0gKFxuICB0YXJnZXQ6IHN0cmluZyxcbiAgZnJpZW5kbHlVbmlxdWVJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuKSA9PlxuICBuZXcgRXJyb3IoYFRhcmdldCBcIiR7dGFyZ2V0fVwiIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBmb3IgdGhlIGNvbnN0cnVjdCAke2ZyaWVuZGx5VW5pcXVlSWR9LlxuVGFyZ2V0IG11c3QgYmUgYSBzdHJpbmcgdGhhdCBpcyB1bmlxdWUgYWNyb3NzIGFsbCByZXNvdXJjZXMgaW4gdGhlIHNhbWUgc3RhY2suYCk7XG5cbmV4cG9ydCBjb25zdCBtb3ZlVGFyZ2V0Tm90U2V0ID0gKHRhcmdldDogc3RyaW5nLCBlbnRyaWVzOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihgVGFyZ2V0IFwiJHt0YXJnZXR9XCIgaGFzIG5vdCBiZWVuIHNldC5cbllvdSB0cmllZCB0byBtb3ZlIGEgcmVzb3VyY2Ugd2l0aG91dCBhIHRhcmdldC5cbkNhbGwgLmFkZE1vdmVUYXJnZXQoXCIke3RhcmdldH1cIikgb24gdGhlIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZSB5b3Ugd2FudCB0byBtb3ZlIHRoaXMgcmVzb3VyY2UgdG8uXG5cbkFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHRhcmdldHMgKGluIGNhc2UgeW91IGhhZCBhIHR5cG8pOlxuJHtlbnRyaWVzfVxuYCk7XG5cbmV4cG9ydCBjb25zdCBtb3ZlZFRvUmVzb3VyY2VPZkRpZmZlcmVudFR5cGUgPSAoXG4gIG1vdmVUYXJnZXQ6IHN0cmluZyxcbiAgb3JpZ2luYWxSZXNvdXJjZVR5cGU6IHN0cmluZyxcbiAgZGVzdGluYXRpb25SZXNvdXJjZVR5cGU6IHN0cmluZyxcbikgPT5cbiAgbmV3IEVycm9yKGBXZSBkbyBub3Qgc3VwcG9ydCBtb3ZpbmcgcmVzb3VyY2VzIHRvIGEgZGlmZmVyZW50IHR5cGUuXG5cblRoZSBkZXN0aW5hdGlvbiBcIiR7bW92ZVRhcmdldH1cIidzIHJlc291cmNlIHR5cGUgJHtkZXN0aW5hdGlvblJlc291cmNlVHlwZX0gZGlmZmVycyBmcm9tIHRoZSBvcmlnaW5hbCByZXNvdXJjZSB0eXBlICgke29yaWdpbmFsUmVzb3VyY2VUeXBlfSkgeW91IGFyZSB0cnlpbmcgdG8gbW92ZS5cblxuSWYgdGhpcyB3YXMgaW50ZW50aW9uYWwsIHRyeSBpbXBvcnRpbmcgdGhlIGV4aXN0aW5nIHJlc291cmNlIGludG8geW91ciB0YXJnZXQgaW5zdGVhZC4gTGVhcm4gbW9yZTpcbmh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy9yZXNvdXJjZXMjaW1wb3J0aW5nLXJlc291cmNlc1xuXG5Ob3RlIHRoYXQgeW91IG11c3QgbWFudWFsbHkgcmVtb3ZlIHRoZSBvcmlnaW5hbCByZXNvdXJjZSBmcm9tIHlvdXIgc3RhdGUgZmlsZSBhZnRlciBpbXBvcnRpbmcgaXQuIFVzZSB0aGUgXCJ0ZXJyYWZvcm0gc3RhdGUgcm1cIiBjb21tYW5kIGluIHRoZSBvdXRwdXQgZGlyZWN0b3J5IG9mIHRoZSBzdGFjayB5b3UgZGVmaW5lZCB0aGlzIHJlc291cmNlIGluLiBMZWFybiBtb3JlOlxuaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vY2xpL2NvbW1hbmRzL3N0YXRlL3JtXG5gKTtcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlR2l2ZW5Ud29Nb3ZlT3BlcmF0aW9uc0J5VGFyZ2V0QW5kSWQgPSAoXG4gIGlkOiBzdHJpbmcsXG4gIGV4aXN0aW5nVGFyZ2V0OiBzdHJpbmcsXG4gIG5ld01vdmU6IHsgdG86IHN0cmluZzsgZnJvbTogc3RyaW5nIH0sXG4pID0+XG4gIG5ldyBFcnJvcihgXG5UaGUgcmVzb3VyY2UgJHtpZH0gaGFzIGJlZW4gZ2l2ZW4gdHdvIGRpZmZlcmVudCBtb3ZlIG9wZXJhdGlvbnMuXG5cbk1vdmUgdGFyZ2V0OiBcIiR7ZXhpc3RpbmdUYXJnZXR9XCJcbk1vdmUgYnkgaWQ6IHtcbiAgZnJvbTogJHtuZXdNb3ZlLmZyb219XG4gIHRvOiAke25ld01vdmUudG99XG59XG5cbk9ubHkgb25lIG1vdmUgb3BlcmF0aW9uIGNhbiBvY2N1ciBwZXIgcGxhbi9hcHBseS4gUmVtb3ZlIG9uZSBvZiB0aGUgb3BlcmF0aW9ucy5cblxuTGVhcm4gbW9yZSBhYm91dCBtb3ZpbmcgcmVzb3VyY2VzOiBodHRwczovL2Nka3RuLmlvL2RvY3MvZXhhbXBsZXMtYW5kLWd1aWRlcy9yZWZhY3RvcmluZyM6fjp0ZXh0PU1vdmluZyUyMCUyNiUyMFJlbmFtaW5nJTIwUmVzb3VyY2VzJTIwV2l0aGluJTIwYSUyMFN0YWNrXG5gKTtcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlR2l2ZW5Ud29Nb3ZlT3BlcmF0aW9uc0J5SWQgPSAoXG4gIGlkOiBzdHJpbmcsXG4gIGV4aXN0aW5nTW92ZTogeyB0bzogc3RyaW5nOyBmcm9tOiBzdHJpbmcgfSxcbiAgbmV3TW92ZTogeyB0bzogc3RyaW5nOyBmcm9tOiBzdHJpbmcgfSxcbikgPT5cbiAgbmV3IEVycm9yKGBcblRoZSByZXNvdXJjZSAke2lkfSBoYXMgYmVlbiBnaXZlbiB0d28gZGlmZmVyZW50IG1vdmUgb3BlcmF0aW9ucy5cblxue1xuICBmcm9tOiAke2V4aXN0aW5nTW92ZS5mcm9tfVxuICB0bzogJHtleGlzdGluZ01vdmUudG99XG59XG57XG4gIGZyb206ICR7bmV3TW92ZS5mcm9tfVxuICB0bzogJHtuZXdNb3ZlLnRvfSAoUmVzb3VyY2UgY2FsbGluZyB0aGUgbW92ZSB0byBvcGVyYXRpb24pXG59XG5cbk9ubHkgb25lIG1vdmUgb3BlcmF0aW9uIGNhbiBvY2N1ciBwZXIgcGxhbi9hcHBseS4gUmVtb3ZlIG9uZSBvZiB0aGUgb3BlcmF0aW9ucy5cblxuTGVhcm4gbW9yZSBhYm91dCBtb3ZpbmcgcmVzb3VyY2VzOiBodHRwczovL2Nka3RuLmlvL2RvY3MvZXhhbXBsZXMtYW5kLWd1aWRlcy9yZWZhY3RvcmluZyM6fjp0ZXh0PU1vdmluZyUyMCUyNiUyMFJlbmFtaW5nJTIwUmVzb3VyY2VzJTIwV2l0aGluJTIwYSUyMFN0YWNrXG5gKTtcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlR2l2ZW5Ud29Nb3ZlT3BlcmF0aW9uc0J5VGFyZ2V0ID0gKFxuICByZXNvdXJjZUlkOiBzdHJpbmcsXG4gIGV4aXN0aW5nTW92ZVRhcmdldDogc3RyaW5nLFxuICBuZXdNb3ZlVGFyZ2V0OiBzdHJpbmcsXG4pID0+XG4gIG5ldyBFcnJvcihgVGhlIHJlc291cmNlICR7cmVzb3VyY2VJZH0gaGFzIGJlZW4gZ2l2ZW4gdHdvIGRpZmZlcmVudCBtb3ZlVGFyZ2V0czogXCIke25ld01vdmVUYXJnZXR9XCIgYW5kIFwiJHtleGlzdGluZ01vdmVUYXJnZXR9XCJcblxuQSByZXNvdXJjZSBjYW4gb25seSBiZSBtb3ZlZCBvbmNlIHBlciBwbGFuL2FwcGx5LlxuXG5MZWFybiBtb3JlIGFib3V0IG1vdmluZyByZXNvdXJjZXM6IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9leGFtcGxlcy1hbmQtZ3VpZGVzL3JlZmFjdG9yaW5nIzp+OnRleHQ9TW92aW5nJTIwJTI2JTIwUmVuYW1pbmclMjBSZXNvdXJjZXMlMjBXaXRoaW4lMjBhJTIwU3RhY2tcbmApO1xuXG5leHBvcnQgY29uc3Qgc3RhY2tDb250YWluc0Rpc2FsbG93ZWRDaGFyID0gKFxuICBzdGFja0lkOiBzdHJpbmcsXG4gIGludmFsaWRDaGFyOiBzdHJpbmcsXG4pID0+XG4gIG5ldyBFcnJvcihgQ2Fubm90IGNyZWF0ZSBUZXJyYWZvcm0gc3RhY2sgd2l0aCBpZCBcIiR7c3RhY2tJZH1cIi4gSXQgY29udGFpbnMgYW4gaW52YWxpZCBnbG9iIGNoYXJhY3RlcjogXCIke2ludmFsaWRDaGFyfVwiLlxuXG5HbG9iIGNoYXJhY3RlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gc3RhY2sgbmFtZXMgYmVjYXVzZSB3ZSB1c2UgdGhlbSB0byBkZXBsb3kgYW5kIGRlc3Ryb3kgbXVsdGlwbGUgc3RhY2tzLiBGb3IgZXhhbXBsZSwgJ2Nka3RuIGRlcGxveSBcXGAqLXByb2R1Y3Rpb25cXGAnIGRlcGxveXMgYWxsIHN0YWNrcyB3aXRoIG5hbWVzIHRoYXQgZW5kIGluICctcHJvZHVjdGlvbicuXG5gKTtcblxuZXhwb3J0IGNvbnN0IHN0YWNrSWRDb250YWluc1doaXRlc3BhY2UgPSAoc3RhY2tJZDogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoYENhbm5vdCBjcmVhdGUgVGVycmFmb3JtU3RhY2sgd2l0aCBpZCBcIiR7c3RhY2tJZH1cIi4gSXQgY29udGFpbnMgYSB3aGl0ZXNwYWNlIGNoYXJhY3Rlci5cblxuUGxlYXNlIHJlbW92ZSBhbnkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGluIHlvdXIgVGVycmFmb3JtU3RhY2sgaWQsIGxpa2Ugc286IFwiJHtzdGFja0lkLnJlcGxhY2UoXG4gICAgL1xccy9nLFxuICAgIFwiXCIsXG4gICl9XCJcbmApO1xuXG5leHBvcnQgY29uc3Qgbm9TdGFja0ZvckNvbnN0cnVjdCA9IChjb25zdHJ1Y3RQYXRoOiBzdHJpbmcsIGhpbnQ6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKGBObyBzdGFjayBjb3VsZCBiZSBpZGVudGlmaWVkIGZvciB0aGUgY29uc3RydWN0IGF0IHBhdGggJyR7Y29uc3RydWN0UGF0aH0nJHtoaW50fVxuXG5Zb3UgY2FuIG9ubHkgdXNlIGNvbnN0cnVjdHMgYXMgcGFydCBvZiBhIFRlcnJhZm9ybVN0YWNrLlxuXG5UbyBsZWFybiBtb3JlIGFib3V0IENvbnN0cnVjdHMgdnMuIFRlcnJhZm9ybVN0YWNrcywgcmVmZXIgdG86IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy9jb25zdHJ1Y3RzIzp+OnRleHQ9Q29uc3RydWN0cyUyMHZzLiUyMFN0YWNrc1xuYCk7XG5cbmV4cG9ydCBjb25zdCBzdGFja0hhc0NpcmN1bGFyRGVwZW5kZW5jeSA9IChcbiAgdGhpc1N0YWNrOiBUZXJyYWZvcm1TdGFjayxcbiAgZGVwZW5kZW5jeTogVGVycmFmb3JtU3RhY2ssXG4pID0+XG4gIG5ldyBFcnJvcihgQ2Fubm90IGFkZCBkZXBlbmRlbmN5ICR7ZGVwZW5kZW5jeX0gdG8gJHt0aGlzU3RhY2t9LCBiZWNhdXNlIGl0IHdvdWxkIGNhdXNlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeS5cblxuVGVycmFmb3JtU3RhY2sgJHtkZXBlbmRlbmN5fSBpcyBhbHJlYWR5IGRlcGVuZGVudCBvbiAke3RoaXNTdGFja30gZGlyZWN0bHksIG9yIGRlcGVuZGVudCBvbiBhIFRlcnJhZm9ybVN0YWNrIHdpdGhpbiAke3RoaXNTdGFja30uXG5cblRvIGxlYXJuIG1vcmUgYWJvdXQgY2lyY3VsYXIgZGVwZW5kZW5jeSByZWZlcmVuY2VzLCByZWZlciB0bzogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL2NvbmNlcHRzL3N0YWNrcyM6fjp0ZXh0PUNyb3NzJTJEU3RhY2slMjBSZWZlcmVuY2VzXG5gKTtcblxuZXhwb3J0IGNvbnN0IHN0YWNrVmFsaWRhdGlvbkZhaWx1cmUgPSAoZXJyb3JMaXN0OiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihgVmFsaWRhdGlvbiBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGVycm9yczpcXG4gICR7ZXJyb3JMaXN0fVxuXG5JZiB5b3Ugd2lzaCB0byBpZ25vcmUgdGhlc2UgdmFsaWRhdGlvbnMsIHBhc3MgJ3NraXBWYWxpZGF0aW9uOiB0cnVlJyB0byB5b3VyIEFwcCBjb25maWd1cmF0aW9uLlxuYCk7XG5cbmV4cG9ydCBjb25zdCBtYXRjaGVyc1BhdGhJc05vdERpcmVjdG9yeSA9IChmdW5jdGlvbk5hbWU6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKGBQYXRoIGlzIG5vdCBhIGRpcmVjdG9yeS5cblxuRW5zdXJlIHlvdSBhcmUgcGFzc2luZyB0aGUgcmVzdWx0IG9mIFRlc3RpbmcuZnVsbFN5bnRoKCdzdGFjayBpbnN0YW5jZScpIHRvICcke2Z1bmN0aW9uTmFtZX0nLCBub3QgVGVzdGluZy5zeW50aCgnc3RhY2sgaW5zdGFuY2UnKS5cblxuVGVzdGluZy5mdWxsU3ludGggcmV0dXJucyBhIGZpbGUgcGF0aCB0byBhIHRlbXBvcmFyeSB0ZXN0aW5nIGVudmlyb25tZW50LiBUZXN0aW5nLnN5bnRoIHJldHVybnMgdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgeW91ciBzdGFjay5cblxuVG8gbGVhcm4gbW9yZSBhYm91dCB0ZXN0aW5nIGluIENES1ROLCByZWZlciB0bzogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL3Rlc3QvdW5pdC10ZXN0c2ApO1xuXG5leHBvcnQgY29uc3QgbWF0Y2hlcnNGb3VuZEVycm9yc0luU3RhY2sgPSAoXG4gIGVycm9yQ291bnQ6IGFueSxcbiAgc3RhY2tOYW1lOiBzdHJpbmcsXG4gIGRpYWdub3N0aWNzOiBzdHJpbmcsXG4pID0+XG4gIG5ldyBFcnJvcihgRm91bmQgJHtlcnJvckNvdW50fSBFcnJvcnMgaW4gc3RhY2sgJHtzdGFja05hbWV9OiAke2RpYWdub3N0aWNzfVxuXG5UaGVzZSBlcnJvcnMgYXJlIG5vdCB0ZXN0IGZhaWx1cmVzLCBidXQgaXNzdWVzIHdpdGggdGhlIHVuZGVybHlpbmcgVGVycmFmb3JtU3RhY2sgYmVpbmcgdGVzdGVkLiBGaXggdGhlIGFib3ZlIGlzc3VlcyBiZWZvcmUgcnVubmluZyB5b3VyIHRlc3RzIGFnYWluLlxuYCk7XG5cbmV4cG9ydCBjb25zdCBqZXN0Tm90SW5zdGFudGlhdGVkID0gKCkgPT5cbiAgbmV3IEVycm9yKGBKZXN0IHdhcyBub3QgcHJvcGVybHkgaW5zdGFudGlhdGVkLlxuXG5FbnN1cmUgeW91IGhhdmUgYSAnc2V0dXAuanMnIGZpbGUgaW4geW91ciBwcm9qZWN0J3MgZGlyZWN0b3J5IHRoYXQgY2FsbHMgJ2Nka3RuLlRlc3Rpbmcuc2V0dXBKZXN0KCknLlxuXG5UbyBsZWFybiBtb3JlIGFib3V0IHNldHRpbmcgdXAgdGVzdGluZywgcmVmZXIgdG86IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy90ZXN0L3VuaXQtdGVzdHMjOn46dGV4dD1BZGQlMjBUZXN0aW5nJTIwdG8lMjBZb3VyJTIwQXBwbGljYXRpb25cbmApO1xuXG5leHBvcnQgY29uc3QgZXhwZWN0Tm90R2xvYmFsbHlBY2Nlc3NpYmxlID0gKCkgPT5cbiAgbmV3IEVycm9yKGBUaGUgZXhwZWN0IGZ1bmN0aW9uIGlzIG5vdCBnbG9iYWxseSBhY2Nlc3NpYmxlLlxuXG5UbyBsZWFybiBtb3JlIGFib3V0IHNldHRpbmcgdXAgdGVzdGluZywgcmVmZXIgdG86IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy90ZXN0L3VuaXQtdGVzdHMjOn46dGV4dD1BZGQlMjBUZXN0aW5nJTIwdG8lMjBZb3VyJTIwQXBwbGljYXRpb25cbmApO1xuXG5leHBvcnQgY29uc3QgaW52YWxpZFN0YWNrID0gKGZ1bmN0aW9uTmFtZTogc3RyaW5nLCBzdGFja0NvbnRlbnQ6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKGBJbnZhbGlkIEpTT04gc3RyaW5nIHBhc3NlZDogJHtzdGFja0NvbnRlbnR9XG5cblxuRW5zdXJlIHlvdSBhcmUgcGFzc2luZyB0aGUgcmVzdWx0IG9mIFRlc3Rpbmcuc3ludGgoJ3N0YWNrIGluc3RhbmNlJykgdG8gJyR7ZnVuY3Rpb25OYW1lfScsIG5vdCBUZXN0aW5nLmZ1bGxTeW50aCgnc3RhY2sgaW5zdGFuY2UnKS5cblxuXG5UZXN0aW5nLnN5bnRoIHJldHVybnMgdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgeW91ciBzdGFjay4gQ0RLVE4gY2FuIHVzZSBhc3NlcnRpb25zIHdpdGggdGhpcyBKU09OIHRvIGNoZWNrIHRoZSBjb21wb3NpdGlvbiBvZiB5b3VyIHN0YWNrcywgbGlrZSBzbzogXCJUZXN0aW5nLnRvSGF2ZVJlc291cmNlKFRlc3Rpbmcuc3ludGgoJ1RlcnJhZm9ybVN0YWNrIGluc3RhbmNlJyksIFMzQnVja2V0KVwiXG5cblRlc3RpbmcuZnVsbFN5bnRoIHJldHVybnMgYSBmaWxlIHBhdGggdG8gYSB0ZW1wb3JhcnkgdGVzdGluZyBlbnZpcm9ubWVudC5cblxuVG8gbGVhcm4gbW9yZSBhYm91dCB0ZXN0aW5nIGluIENES1ROLCByZWZlciB0bzogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL3Rlc3QvdW5pdC10ZXN0c1xuYCk7XG5cbmV4cG9ydCBjb25zdCB0YXJnZXROb3RSZXNvbHZhYmxlV2l0aE92ZXJyaWRlcyA9ICh0YXJnZXQ6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKGBUYXJnZXQgKCR7dGFyZ2V0fSkgY2Fubm90IGJlIGEgcmVzb2x2YWJsZSB0b2tlbiBpZiB5b3Ugc3BlY2lmaWVkIG92ZXJyaWRlcy4gUmVwbGFjZSB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIHlvdSBhcmUgb3ZlcnJpZGluZyB3aXRoIGEgc3RhdGljIHZhbHVlLlxuXG5UbyBsZWFybiBtb3JlIGFib3V0IFRva2VucywgcmVmZXIgdG86IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy90b2tlbnNcbmApO1xuXG5leHBvcnQgY29uc3Qgc291cmNlT3JUYXJnZXROb3RBbk9iamVjdCA9IChcbiAgc291cmNlOiBzdHJpbmcsXG4gIHNvdXJjZVR5cGU6IHN0cmluZyxcbiAgdGFyZ2V0OiBzdHJpbmcsXG4gIHRhcmdldFR5cGU6IHN0cmluZyxcbikgPT5cbiAgbmV3IEVycm9yKGBBbiBpc3N1ZSBvY2N1cnJlZCBkdXJpbmcgdGhlIHN5bnRoZXNpemF0aW9uIG9mIHlvdXIgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb24uXG5cbkJvdGggdGhlIHNvdXJjZSBlbGVtZW50ICgke3NvdXJjZX0pIGFuZCBpdHMgY29udGFpbmluZyB0YXJnZXQgZWxlbWVudCAoJHt0YXJnZXR9KSBtdXN0IGJlIG9iamVjdHMuXG5cblR5cGUgb2Ygc291cmNlOiAke3NvdXJjZVR5cGV9XG5UeXBlIG9mIHRhcmdldDogJHt0YXJnZXRUeXBlfVxuYCk7XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3REZXBlbmRlbmN5QmVsb3dWMTAgPSAoKSA9PlxuICBuZXcgRXJyb3IoYFZlcnNpb24gbWlzbWF0Y2ghIENES1ROIHZlcnNpb24gMC42IHJlcXVpcmVzIHlvdXIgY29uc3RydWN0cyB2ZXJzaW9uIHRvIGJlIHYxMCBvciBhYm92ZS5cblxuVXBkYXRlIHlvdXIgY29uc3RydWN0cyBkZXBlbmRlbmN5OiBodHRwczovL2Nkay50Zi91cGdyYWRlLWNvbnN0cnVjdHMtdjEwXG5gKTtcblxuZXhwb3J0IGNvbnN0IGNsb3VkQmFja2VuZFdvcmtzcGFjZUlzTm90RGVmaW5lZEJ5TmFtZSA9ICgpID0+XG4gIG5ldyBFcnJvcihgVGhlIENsb3VkIGJhY2tlbmQgb25seSBzdXBwb3J0cyBjcm9zcy1zdGFjayByZWZlcmVuY2VzIGlmIHRoZSB3b3Jrc3BhY2UgaXMgZGVmaW5lZCBieSBuYW1lIChub3QgYnkgdGFncykuXG5cblRvIHVzZSBjcm9zcy1zdGFjayByZWZlcmVuY2VzLCByZXBsYWNlIGFsbCBtZW50aW9ucyBvZiAnVGFnZ2VkQ2xvdWRXb3Jrc3BhY2VzJyB3aXRoICdOYW1lZENsb3VkV29ya3NwYWNlJywgbGlrZSBzbzpcblxubmV3IENsb3VkQmFja2VuZChzdGFjaywge1xuICAuLi5cbiAgd29ya3NwYWNlczogbmV3IE5hbWVkQ2xvdWRXb3Jrc3BhY2UoXCJteS1hcHBcIiksXG59KTtcblxuVG8gbGVhcm4gbW9yZSBhYm91dCBSZW1vdGUgQmFja2VuZHMsIHJlZmVyIHRvOiBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvcmVtb3RlLWJhY2tlbmRzXG5gKTtcblxuZXhwb3J0IGNvbnN0IHZhbHVlQ29udGFpbnNVbmVzY2FwZWRRdW90ZXMgPSAodmFsdWU6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBZb3VyIHZhbHVlLCAnJHt2YWx1ZX0nLCBoYXMgdW5lc2NhcGVkIGRvdWJsZSBxdW90ZXMgaW4gaXQsIHNvIGl0IGNhbm5vdCBiZSB1c2VkIGFzIGEgdmFsdWUuXG5cblRvIHNhZmVseSB1c2UgdGhlIHZhbHVlLCB1c2UgRm4ucmF3U3RyaW5nIG9uIHlvdXIgc3RyaW5nLCBsaWtlIHNvOlxuXG5Gbi5yYXdTdHJpbmcoJyR7dmFsdWV9JylcblxuRG9pbmcgdGhpcyBlbnN1cmVzIENES1ROIGFuZCBUZXJyYWZvcm0gaW50ZXJwcmV0IHlvdXIgdmFsdWVzIGNvcnJlY3RseS5cblxuVG8gbGVhcm4gbW9yZSBhYm91dCBidWlsdCBpbiBUZXJyYWZvcm0gZnVuY3Rpb25zIHdpdGhpbiBDREtUTiwgcmVmZXIgdG86IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy9mdW5jdGlvbnNcbmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBlbmNvdW50ZXJlZEFubm90YXRpb25XaXRoTGV2ZWxFcnJvciA9IChlcnJvcnM6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKGBFbmNvdW50ZXJlZCBBbm5vdGF0aW9ucyB3aXRoIGxldmVsIFwiRVJST1JcIjpcXG4ke2Vycm9yc31cblxuRWl0aGVyIGZpeCB0aGUgaXNzdWVzIGFib3ZlLCBvciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIENES1RGX0NPTlRJTlVFX1NZTlRIX09OX0VSUk9SX0FOTk9UQVRJT05TIHRvIGlnbm9yZSB0aGVzZSBhbm5vdGF0aW9ucy5cbmApO1xuXG5leHBvcnQgY29uc3QgdmFsdWVJc0ludmFsaWRTdHJpbmdPclRva2VuID0gKHZhbHVlOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgJyR7dmFsdWV9JyBpcyBub3QgYSB2YWxpZCBzdHJpbmcgbm9yIGEgdG9rZW4uIFRoaXMgZnVuY3Rpb24gb25seSBhY2NlcHRzIHN0cmluZ3Mgb3IgdG9rZW5zIHJlc29sdmluZyB0byBzdHJpbmdzLiBQbGVhc2UgY2hhbmdlIHlvdXIgY29kZSBhY2NvcmRpbmdseS5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgdmFsdWVJc0ludmFsaWROdW1iZXJPclRva2VuID0gKHZhbHVlOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgJHt2YWx1ZX0gaXMgbm90IGEgdmFsaWQgbnVtYmVyIG5vciBhIHRva2VuLiBUaGlzIGZ1bmN0aW9uIG9ubHkgYWNjZXB0cyBudW1iZXJzIG9yIHRva2VucyByZXNvbHZpbmcgdG8gbnVtYmVycy4gUGxlYXNlIGNoYW5nZSB5b3VyIGNvZGUgYWNjb3JkaW5nbHkuYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGxpc3RFbGVtZW50SXNPZldyb25nVHlwZSA9IChcbiAgdmFsdWU6IGFueVtdLFxuICBwb3NpdGlvbjogbnVtYmVyLFxuICBlcnJvcjogdW5rbm93bixcbikgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBFbGVtZW50IGluIGxpc3QgJHt2YWx1ZX0gYXQgcG9zaXRpb24gJHtwb3NpdGlvbn0gaXMgbm90IHRoZSByaWdodCB0eXBlOiAke2Vycm9yfS5cbiAgICBQbGVhc2UgZW5zdXJlIGFsbCBlbGVtZW50cyBpbiB0aGUgbGlzdCBhcmUgdGhlIGNvcnJlY3QgdHlwZSBmb3IgdGhpcyBmdW5jdGlvbi5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgZnVuY3Rpb25SZWNlaXZlZFdyb25nTnVtYmVyT2ZBcmdzID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGFyZ1ZhbGlkYXRvcnNMZW5ndGg6IG51bWJlcixcbiAgYXJnc0xlbmd0aDogbnVtYmVyLFxuKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYEZ1bmN0aW9uICR7bmFtZX0gdGFrZXMgJHthcmdWYWxpZGF0b3JzTGVuZ3RofSBhcmd1bWVudHMsIGJ1dCAke2FyZ3NMZW5ndGh9IHdlcmUgcHJvdmlkZWQuIFBsZWFzZSBhZGQgdGhlIG1pc3NpbmcgYXJndW1lbnRzIHRvIHRoZSBmdW5jdGlvbi5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgZnVuY3Rpb25Bcmd1bWVudFZhbGlkYXRpb25GYWlsdXJlID0gKFxuICBhcmdOdW1iZXI6IG51bWJlcixcbiAgbmFtZTogc3RyaW5nLFxuICBlcnJvcjogdW5rbm93bixcbikgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBBcmd1bWVudCAke2FyZ051bWJlcn0gb2YgJHtuYW1lfSBmYWlsZWQgdGhlIHZhbGlkYXRpb246ICR7ZXJyb3J9LiBQbGVhc2UgY2hhbmdlIHlvdXIgY29kZSB0byBwYXNzIGEgdmFsaWQgdmFsdWUgZm9yIHRoaXMgYXJndW1lbnQuYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGNhbm5vdENhbGNJZEZvckVtcHR5U2V0T2ZDb21wb25lbnRzID0gKCkgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBVbmFibGUgdG8gY2FsY3VsYXRlIGEgdW5pcXVlIGlkIGZvciBhbiBlbXB0eSBzZXQgb2YgY29tcG9uZW50cy5cblxuICAgIFRoaXMgaGFwcGVucyB3aGVuIHlvdSBhdHRlbXB0IHRvIGNyZWF0ZSBhIHVuaXF1ZSBpZCwgYnV0IGRvIG5vdCBwYXNzIGluIGFueSBjb25zdHJ1Y3Qgbm9kZSBpZHMuIFRoaXMgbWVhbnMgeW91ciBjb25zdHJ1Y3QgbGlrZWx5IGhhcyBubyBwYXJlbnQsIHdoaWNoIGlzIG5vdCBhbGxvd2VkLlxuXG4gICAgUGxlYXNlIG1ha2Ugc3VyZSB5b3VyIGNvbnN0cnVjdCBoYXMgYSBwYXJlbnQuIEZvciBleGFtcGxlOiAnbmV3IEFwcCh0aGlzKScgb3IgJ25ldyBUZXJyYWZvcm1TdGFjayh0aGlzLCAnc3RhY2snKScuYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IHN0cmluZ1ZhbHVlQWRkZWRUb1JlZmVyZW5jZUxpc3QgPSAobGlzdFRva2VuOiBzdHJpbmdbXSkgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBDYW5ub3QgYWRkIGVsZW1lbnRzIHRvIGxpc3QgdG9rZW4sIGdvdDogJHtsaXN0VG9rZW59LlxuXG4gICAgV2UgZXhwZWN0IHRoZSBlbGVtZW50cyBvZiBhIHRva2VuaXplZCBzdHJpbmcgYXJyYXkgdG8gYmUgYSBzaW5nbGUgdG9rZW4gc3RyaW5nLiBGb3IgZXhhbXBsZSwgW1wiJntUZlRva2VuW1Rva2VuLjFdfVwiXS5cblxuICAgIE9uZSBlbGVtZW50IGluIHlvdXIgYXJyYXkgY29uc2lzdHMgb2YgbW9yZSB0aGFuIGEgc2luZ2xlIHZhbHVlLiBUbyBhZGQgdmFsdWVzIHRvIGEgdG9rZW5pemVkIGxpc3QsIHVzZSBUZXJyYWZvcm0gZnVuY3Rpb25zIGluc3RlYWQuIEZvciBleGFtcGxlOiAnRm4uY29uY2F0KFt5b3VyUmVmZXJlbmNlZExpc3QsIFtcIm15XCIsIFwibmV3XCIsIFwiaXRlbXNcIl1dKScuYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGNhbm5vdENvbmNhdGVuYXRlU3RyaW5nc0luVG9rZW5pemVkU3RyaW5nQXJyYXkgPSAoXG4gIGxpc3RUb2tlbjogc3RyaW5nLFxuKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYENhbm5vdCBjb25jYXRlbmF0ZSBzdHJpbmdzIGluIGEgdG9rZW5pemVkIHN0cmluZyBhcnJheSwgZ290OiAke2xpc3RUb2tlbn0uXG5cbiAgICBXZSBleHBlY3QgdGhlIGVsZW1lbnRzIG9mIGEgdG9rZW5pemVkIHN0cmluZyBhcnJheSB0byBiZSBhIHNpbmdsZSB0b2tlbiBzdHJpbmcuIEZvciBleGFtcGxlLCBbXCIme1RmVG9rZW5bVG9rZW4uMV19XCJdLiBPbmUgZWxlbWVudCBpbiB5b3VyIGFycmF5IGNvbnNpc3RzIG9mIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgc2luZ2xlIHRva2VuLlxuXG4gICAgWW91IGFyZSBsaWtlbHkgbXV0YXRpbmcgdGhlIHZhbHVlIGluc2lkZSB5b3VyIGFycmF5LCB3aGljaCBDREtUTiBjYW5ub3QgcmVzb2x2ZSBpbnRvIHRoZSBhcHByb3ByaWF0ZSBydW50aW1lIHZhbHVlLmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBudW1iZXJWYWx1ZUFkZGVkVG9SZWZlcmVuY2VMaXN0ID0gKGxpc3RUb2tlbjogbnVtYmVyW10pID0+XG4gIG5ldyBFcnJvcihcbiAgICBgQ2Fubm90IGFkZCBlbGVtZW50cyB0byBsaXN0IHRva2VuLCBnb3Q6ICR7bGlzdFRva2VufS5cblxuICAgIFdlIHVzZSB0b2tlbnMgdG8gcmVwcmVzZW50IHJ1bnRpbWUgdmFsdWVzIChlLmcuLCByZWZlcmVuY2VzIHRvIGF0dHJpYnV0ZXMgb2YgcmVzb3VyY2Ugb3IgZGF0YSBzb3VyY2VzKS4gTGlzdCB0b2tlbnMgZG9uJ3QgY29udGFpbiB0aGUgYWN0dWFsIHZhbHVlcyBiZWNhdXNlIHRob3NlIGFyZSBvbmx5IGF2YWlsYWJsZSBhdCBhcHBseSB0aW1lLCB3aGVyZWFzIHRva2VucyBhcmUgcHJlc2VudCBkdXJpbmcgY29tcGlsZSB0aW1lLlxuXG4gICAgSWYgeW91IHdhbnQgdG8gYWRkIGEgdmFsdWUgdG8gYSB0b2tlbml6ZWQgbGlzdCwgdXNlIGEgVGVycmFmb3JtIGZ1bmN0aW9uIGluc3RlYWQuIEZvciBleGFtcGxlOiBGbi5jb25jYXQoW3lvdXJSZWZlcmVuY2VkTGlzdCwgWzQyLCA0MywgNDRdXSkuYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IG1hcFZhbHVlQWRkZWRUb1JlZmVyZW5jZUxpc3QgPSAobWFwVG9rZW46IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBDYW5ub3QgYWRkIGVsZW1lbnRzIHRvIG1hcCB0b2tlbiwgZ290OiAke21hcFRva2VufS4gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBtZXJnZSBtdWx0aXBsZSBtYXBzLCBvciBpZiB5b3UgYWRkIGEgbmV3IGtleSB2YWx1ZSBwYWlyIHRvIHRoZSBtYXAgdG9rZW4uXG5cbiAgICBXZSB1c2UgdG9rZW5zIHRvIHJlcHJlc2VudCBydW50aW1lIHZhbHVlcyAoZS5nLiwgcmVmZXJlbmNlcyB0byBhdHRyaWJ1dGVzIG9mIHJlc291cmNlIG9yIGRhdGEgc291cmNlcykuIExpc3QgdG9rZW5zIGRvbid0IGNvbnRhaW4gdGhlIGFjdHVhbCB2YWx1ZXMgYmVjYXVzZSB0aG9zZSBhcmUgb25seSBhdmFpbGFibGUgYXQgYXBwbHkgdGltZSwgd2hlcmVhcyB0b2tlbnMgYXJlIHByZXNlbnQgZHVyaW5nIGNvbXBpbGUgdGltZS5cblxuICAgIEluc3RlYWQgb2YgYWRkaW5nIHRoZSB2YWx1ZSB0byB0aGUgdG9rZW5pemVkIG1hcCwgdXNlIGEgVGVycmFmb3JtIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZTogRm4ubWVyZ2UoW3lvdXJSZWZlcmVuY2VkTWFwLCB7IHlvdXI6ICd2YWx1ZScgfV0pLiBUaGlzIGNyZWF0ZXMgYSBuZXcgbWFwIFRva2VuIGZvciBhIHZhbHVlLCB3aGljaCBjb3VsZCBnZXQgcmVuZGVyZWQgYXM6XG4gICAgbWVyZ2UobXlfcmVzb3VyY2UucmVzb3VyY2VfbmFtZS5vbmVfc3BlY2lmaWNfbWFwX2F0dHJpYnV0ZSwgeyB5b3VyOiAnIHZhbHVlJyB9KWAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBjYW5ub3RDb25jYXRlbmF0ZVN0cmluZ3NJblRva2VuaXplZE1hcCA9ICh0b2tlbml6ZWRNYXA6IGFueSkgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBDYW5ub3QgY29uY2F0ZW5hdGUgc3RyaW5ncyBpbiBhIHRva2VuaXplZCBtYXAsIGdvdDogJHt0b2tlbml6ZWRNYXB9LlxuXG4gICAgV2UgZXhwZWN0IHRoZSBlbGVtZW50cyBvZiBhIHRva2VuaXplZCBzdHJpbmcgYXJyYXkgdG8gYmUgYSBzaW5nbGUgdG9rZW4gc3RyaW5nLiBGb3IgZXhhbXBsZSwgW1wiJntUZlRva2VuW1Rva2VuLjFdfVwiXS4gQSBrZXkgaW4geW91ciBtYXAgY29uc2lzdHMgb2YgbW9yZSB0aGFuIGEgc3RyaW5nIHRva2VuIChlLmcuLCB0aGUgVG9rZW4gYW5kIGEgc3RhdGljIHN0cmluZyBvciBtdWx0aXBsZSBUb2tlbnMpLlxuXG4gICAgVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBtdXRhdGUgdGhlIGtleSBvZiB0aGUgbWFwLiBEbyBub3QgbXV0YXRlIHRva2VuaXplZCBNYXBzLCBiZWNhdXNlIGl0IG1ha2VzIGl0IGltcG9zc2libGUgZm9yIENES1ROIHRvIHRyYW5zbGF0ZSB0aGVtLmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBkb2VzTm90SW1wbGVtZW50RGVwZW5kYWJsZVRyYWl0ID0gKGluc3RhbmNlOiBJRGVwZW5kYWJsZSkgPT5cbiAgbmV3IEVycm9yKGAke2luc3RhbmNlfSBkb2VzIG5vdCBpbXBsZW1lbnQgRGVwZW5kYWJsZVRyYWl0YCk7XG5cbmV4cG9ydCBjb25zdCBjYW5Pbmx5RW5jb2RlUG9zaXRpdmVJbnRlZ2VycyA9ICgpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgQ2FuIG9ubHkgZW5jb2RlIHBvc2l0aXZlIGludGVnZXJzIGludG8gVG9rZW5zLiBUaGlzIGlzIGEgYnVnIGluIENES1ROLCBwbGVhc2UgZmlsZSBhIGJ1ZyByZXBvcnQuYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGluZGV4VG9vTGFyZ2VUb0VuY29kZSA9IChpbmRleDogbnVtYmVyKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYFJlY2VpdmVkIGFuIGluZGV4IHRvbyBsYXJnZSB0byBlbmNvZGUgaW50byBhIFRva2VuIDoke2luZGV4fS5cblxuICAgIFRoaXMgaGFwcGVucyBpZiB5b3UgaGF2ZSB0b28gbWFueSBUb2tlbnMgaW4gYSBzaW5nbGUgQ0RLVE4gYXBwbGljYXRpb24uIFRoaXMgY2FuIGFsc28gb2NjdXIgaWYgeW91IGFyZSBhY2NpZGVudGFsbHkgY3JlYXRpbmcgbnVtZXJpYyB0b2tlbnMgaW4gYW4gaW5maW5pdGUgbG9vcC4gRm9yIGV4YW1wbGUsIGNhbGxpbmcgJ1Rva2VuLmFzTnVtYmVyKCknIHRvbyBtYW55IHRpbWVzLlxuXG4gICAgSWYgeW91IHJlYWNoIHRoZSBtYXhpbXVtIG51bWJlciBvZiBhbGxvd2VkIFRva2VucyAoYSBsaW1pdGF0aW9uIGltcG9zZWQgYnkgdGhlIHdheSB3ZSBlbmNvZGUgVG9rZW5zIGFuZCBzZXBhcmF0ZSB0aGVtIGZyb20gcmVhbCBudW1lcmljIHZhbHVlcykgeW91IGNhbiB3b3JrIGFyb3VuZCB0aGlzIGlzc3VlIGJ5IGRpdmlkaW5nIGEgc2luZ2xlIGFwcGxpY2F0aW9uIGludG8gbXVsdGlwbGUgYXBwbGljYXRpb25zLmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBhcmdUb0ludHJpbnNpY011c3RCZVBsYWluVmFsdWUgPSAoXG4gIHZhbHVlOiBhbnksXG4gIGNyZWF0aW9uU3RhY2s6IHN0cmluZ1tdLFxuKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYFlvdSBjYW4gb25seSB1c2UgYSBwbGFpbiB2YWx1ZSAobm90IGEgZnVuY3Rpb24pIHdoaWxlIGNyZWF0aW5nIGFuIEludHJpbnNpYyB0b2tlbi4gV2UgcmVjZWl2ZWQgdGhlIHZhbHVlICcke3ZhbHVlfScgY3JlYXRlZCBhdDpcXG4ke2NyZWF0aW9uU3RhY2suam9pbihcbiAgICAgIFwiXFxuXCIsXG4gICAgKX0uIElmIHlvdSB3YW50IHRvIHVzZSBhIGZ1bmN0aW9uLCBwbGVhc2UgdXNlIHRoZSBMYXp5IGNsYXNzLiBGb3IgZXhhbXBsZTogIExhenkuYW55VmFsdWUoeyBwcm9kdWNlOiAoKSA9PiBcIkhlbGxvIFdvcmxkXCIgfSkuYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGludHJpbnNpY05ld0Vycm9yID0gKG1lc3NhZ2U6IHN0cmluZywgY3JlYXRlZEF0OiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihgJHttZXNzYWdlfVxcblRva2VuIGNyZWF0ZWQ6XFxuICAgIGF0ICR7Y3JlYXRlZEF0fVxcbkVycm9yIHRocm93bjpgKTtcblxuZXhwb3J0IGNvbnN0IHVuYWJsZVRvUmVzb2x2ZUNpcmN1bGFyUmVmZXJlbmNlID0gKHBhdGhOYW1lOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihgVW5hYmxlIHRvIHJlc29sdmUgb2JqZWN0IHRyZWUgd2l0aCBjaXJjdWxhciByZWZlcmVuY2UgYXQgJyR7cGF0aE5hbWV9Jy5cblxuVGhlIGRlcHRoIG9mIHlvdXIgb2JqZWN0IHRyZWUgaXMgb3ZlciAyMDAsIGluZGljYXRpbmcgeW91IHByb2JhYmx5IGhhdmUgYSBjeWNsaWNhbCByZWZlcmVuY2UuIEluc3BlY3QgdGhlIGNvbnN0cnVjdCBjcmVhdGluZyB0aGlzIGN5Y2xpYyByZWZlcmVuY2UgKG1vc3QgbGlrZWx5IGluICcke3BhdGhOYW1lfScpIGFuZCBlbnN1cmUgaXQgZG9lcyBub3QgaW5maW5pdGVseSBuZXN0IGNvbnN0cnVjdHMuYCk7XG5cbmV4cG9ydCBjb25zdCBjYW5ub3RSZXNvbHZlRnVuY3Rpb24gPSAocGF0aE5hbWU6IHN0cmluZywgb2JqOiBhbnkpID0+XG4gIG5ldyBFcnJvcihgVHJ5aW5nIHRvIHJlc29sdmUgYSBub24tZGF0YSBvYmplY3QgKGUuZy4sIGEgZnVuY3Rpb24pIGF0ICcke3BhdGhOYW1lfSc6ICR7b2JqfS4gT25seSB0b2tlbnMgYXJlIHN1cHBvcnRlZCBmb3IgbGF6eSBldmFsdWF0aW9uLlxuXG5JZiB5b3Ugd2FudCB0byB1c2UgYSBsYXppbHkgY29tcHV0ZWQgdmFsdWUsIHVzZSB0aGUgTGF6eSBjbGFzcy4gRm9yIGV4YW1wbGU6ICBMYXp5LnN0cmluZ1ZhbHVlKHsgcHJvZHVjZTogKCkgPT4gXCJIZWxsbyBXb3JsZFwiIH0pYCk7XG5cbmNvbnN0IExJU1RfRVJST1JfRVhQTEFOQVRJT04gPSBgSW4gQ0RLVE4sIHdlIHJlcHJlc2VudCBsaXN0cywgd2l0aCB2YWx1ZXMgdW5rbm93biB1bnRpbCBhZnRlciBydW50aW1lLCBhcyBhcnJheXMgd2l0aCBhIHNpbmdsZSBlbGVtZW504oCUIGEgc3RyaW5nIHRva2VuIChbXCJUb2tlbi4xXCJdKS5cblxuXG5XZSBkbyB0aGlzIGJlY2F1c2UgQ0RLVE4gZG9lcyBub3Qga25vdyB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGF0IGNvbXBpbGUgdGltZSwgbWVhbmluZyBDREtUTiBoYXMgeWV0IHRvIGludm9rZSBUZXJyYWZvcm0gdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgY2xvdWQgcHJvdmlkZXIuIENES1ROIGxhdGVyIGludm9rZXMgVGVycmFmb3JtIG9uIHRoZSBzeW50aGVzaXplZCBzdGF0aWMgSlNPTiBmaWxlLlxuXG5CZWNhdXNlIHdlIGRvbid0IGtub3cgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCwgd2UgY2FuIG5vdCBkaWZmZXJlbnRpYXRlIGlmIHRoZSBsaXN0IHdhcyBhY2Nlc3NlZCBhdCB0aGUgZmlyc3Qgb3IgbGFzdCBpbmRleCwgb3IgYXMgcGFydCBvZiBhIGxvb3AuIFRvIGF2b2lkIHRoaXMgYW1iaWd1aXR5OlxuXG4tIElmIHlvdSB3YW50IHRvIGFjY2VzcyBhIHNpbmd1bGFyIGl0ZW0sIHVzZSAnRm4uZWxlbWVudChsaXN0LCAwKScuIERvIG5vdCB1c2UgJ2xpc3RbMF0nLlxuLSBJZiB5b3Ugd2FudCB0byBsb29wIG92ZXIgdGhlIGxpc3QgdXNlICdUZXJyYWZvcm1JdGVyYXRvci5mcm9tTGlzdChsaXN0KScuIERvIG5vdCB1c2UgYSAnZm9yJyBvciAnZm9yRWFjaCcgbG9vcC5cblxuTGVhcm4gbW9yZSBhYm91dCB0b2tlbnM6IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy90b2tlbnNcbkxlYXJuIG1vcmUgYWJvdXQgaXRlcmF0b3JzOiBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvaXRlcmF0b3JzYDtcblxuY29uc3QgTUFQX0VSUk9SX0VYUExBTkFUSU9OID0gYFxuSW4gQ0RLVE4sIHdlIHJlcHJlc2VudCBtYXBzLCB3aXRoIHZhbHVlcyB1bmtub3duIHVudGlsIGFmdGVyIHJ1bnRpbWUsIGFzIG9iamVjdHMgd2l0aCBhIHNpbmdsZSBrZXktdmFsdWUgcGFpciB3aGVyZSB0aGUgdmFsdWUgaXMgYSBzdHJpbmcgdG9rZW4uIEZvciBleGFtcGxlOiAneyBcIiZ7VGZUb2tlbltUb2tlbi4xXX1cIjogXCJTdHJpbmcgTWFwIFRva2VuIFZhbHVlXCIgfScuXG5cbldlIGRvIHRoaXMgYmVjYXVzZSBDREtUTiBkb2VzIG5vdCBrbm93IHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYXQgY29tcGlsZSB0aW1lLCBtZWFuaW5nIENES1ROIGhhcyB5ZXQgdG8gaW52b2tlIFRlcnJhZm9ybSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBjbG91ZCBwcm92aWRlci4gQ0RLVE4gbGF0ZXIgaW52b2tlcyBUZXJyYWZvcm0gb24gdGhlIHN5bnRoZXNpemVkIHN0YXRpYyBKU09OIGZpbGUuXG5cbkJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB0aGUgY29udGVudHMgb2YgdGhlIG1hcCwgd2UgY2FuIG5vdCBkaWZmZXJlbnRpYXRlIGlmIHRoZSBtYXAgd2FzIGFjY2Vzc2VkLCBvciB1c2VkIGFzIHBhcnQgb2YgYSBsb29wLiBUbyBhdm9pZCB0aGlzIGFtYmlndWl0eTpcblxuLSBUbyBhY2Nlc3MgYSBzaW5ndWxhciBpdGVtIHVzZSAnRm4ubG9va3VwKG1hcCwga2V5KScuIERvIG5vdCB1c2UgJ21hcFtrZXldJy5cbi0gSWYgeW91IHdhbnQgdG8gbG9vcCBvdmVyIHRoZSBtYXAgdXNlICdUZXJyYWZvcm1JdGVyYXRvci5mcm9tTWFwKG1hcCknLiBEbyBub3QgdXNlIGEgJ2ZvcicgbG9vcCBvciBpdGVyYXRlIG92ZXIgJ09iamVjdC5lbnRyaWVzKG1hcCknIHdpdGggJ2ZvckVhY2gnLlxuXG5MZWFybiBtb3JlIGFib3V0IHRva2VuczogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL2NvbmNlcHRzL3Rva2Vuc1xuTGVhcm4gbW9yZSBhYm91dCBpdGVyYXRvcnM6IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy9pdGVyYXRvcnNgO1xuXG5leHBvcnQgY29uc3QgZW5jb2RlZExpc3RUb2tlbkluU2NhbGFyU3RyaW5nQ29udGV4dCA9ICgpID0+XG4gIG5ldyBFcnJvcihgRm91bmQgYW4gZW5jb2RlZCBsaXN0IHRva2VuIHN0cmluZyBpbiBhIHNjYWxhciBzdHJpbmcgY29udGV4dC5cbiR7TElTVF9FUlJPUl9FWFBMQU5BVElPTn1gKTtcblxuZXhwb3J0IGNvbnN0IGVuY29kZWRNYXBUb2tlbkluU2NhbGFyU3RyaW5nQ29udGV4dCA9ICgpID0+XG4gIG5ldyBFcnJvcihgRm91bmQgYW4gZW5jb2RlZCBtYXAgdG9rZW4gaW4gYSBzY2FsYXIgc3RyaW5nIGNvbnRleHQuXG4ke01BUF9FUlJPUl9FWFBMQU5BVElPTn1gKTtcblxuZXhwb3J0IGNvbnN0IGVuY29kZWRNYXBUb2tlbkluU2NhbGFyTnVtYmVyQ29udGV4dCA9ICgpID0+XG4gIG5ldyBFcnJvcihgRm91bmQgYW4gZW5jb2RlZCBtYXAgdG9rZW4gaW4gYSBzY2FsYXIgbnVtYmVyIGNvbnRleHQuXG4ke01BUF9FUlJPUl9FWFBMQU5BVElPTn1gKTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdHNDYW5ub3RCZVJlc29sdmVkID0gKHBhdGhOYW1lOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihgVHJ5aW5nIHRvICdyZXNvbHZlKCknIGEgQ29uc3RydWN0IGF0ICcke3BhdGhOYW1lfScuXG5cblRoaXMgb2Z0ZW4gbWVhbnMgYW4gdW5pbnRlbmRlZCBjeWNsaWMgZGVwZW5kZW5jeSBpbiB5b3VyIGNvbnN0cnVjdCB0cmVlLCBsZWFkaW5nIHRvIHRoZSByZXNvbHV0aW9uIHN0dWNrIGluIGFuIGluZmluaXRlIGxvb3AgdGhhdCBmYWlscy5cblRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgc2NvcGUgcGFzc2VkIGludG8gdGhpcyBjb25zdHJ1Y3QgaXMgYWxzbyBwYXJ0IG9mIGl0cyBzdWJ0cmVlLlxuXG5UbyByZXNvbHZlIHRoaXMgaXNzdWUsIHJlZmFjdG9yIHlvdXIgY29kZSB0byBhdm9pZCB0aGlzIGN5Y2xpYyBkZXBlbmRlbmN5IGJ5IGNoYW5naW5nIHRoZSBzY29wZSBvZiB0aGlzIGNvbnN0cnVjdC5gKTtcblxuZXhwb3J0IGNvbnN0IG1hcEtleU11c3RSZXNvbHZlVG9TdHJpbmcgPSAoXG4gIHBhdGhOYW1lOiBzdHJpbmcsXG4gIGtleTogc3RyaW5nLFxuICByZXNvbHZlZEtleTogYW55LFxuKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYEF0IFwiJHtwYXRoTmFtZX1cIiBhIG1hcCB1c2VzIHRoZSBrZXkgXCIke2tleX1cIiwgbWVhbmluZyB0aGF0IGtleSBtdXN0IHJlc29sdmUgdG8gYSBzdHJpbmcuIEhvd2V2ZXIsIGl0IHJlc29sdmVzIHRvIGEgJHt0eXBlb2YgcmVzb2x2ZWRLZXl9IHdpdGggdGhlIHZhbHVlICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICByZXNvbHZlZEtleSxcbiAgICApfS4gVG8gZml4IHRoaXMsIGNoYW5nZSB0aGUgVG9rZW4gdG8gcmVzb2x2ZSB0byBhIHN0cmluZy5gLFxuICApO1xuXG5jb25zdCB1bmtub3duVG9rZW5FeHBsYW5hdGlvbiA9IGBUaGlzIG1lYW5zIHlvdSBhcmUgdHJ5aW5nIHRvIGFjY2VzcyBhIFRva2VuIHZhbHVlIHRoYXQgZG9lcyBub3QgZXhpc3QuIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmIHRoZSBUb2tlbiBpcyBmcm9tIGFub3RoZXIgQ0RLIChpLmUuLCBBV1MgQ0RLLCBDREs4cywgZXRjLikgYW5kIGlzIHVua25vd24gdG8gdGhpcyBDREtUTiBBcHBsaWNhdGlvbi4gWW91IGVpdGhlciBuZWVkIHRvIG1ha2UgdGhlIG90aGVyIENESyByZXNvbHZlIHRoaXMgVG9rZW4gYmVmb3JlIENES1ROIHRyaWVzIHRvIHJlc29sdmUgaXQsIG9yIHdvcmsgYXJvdW5kIHVzaW5nIHRoaXMgVG9rZW4gYXQgYWxsLlxuXG5JZiB0aGlzIGVycm9yIG9jY3VycyB3aXRob3V0IGFub3RoZXIgQ0RLIChvciBhIHZhbHVlIGxvb2tpbmcgbGlrZSBhIFRva2VuKSBpbnZvbHZlZCwgcGxlYXNlIGZpbGUgYSBidWcuYDtcblxuZXhwb3J0IGNvbnN0IHVua25vd25OdW1iZXJUb2tlbkZvdW5kID0gKCkgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBFbmNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIHVua25vd24gbnVtYmVyIFRva2VuIGZvdW5kLiAke3Vua25vd25Ub2tlbkV4cGxhbmF0aW9ufWAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCB1bnJlY29nbml6ZWRUb2tlbktleSA9IChrZXk6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgVG9rZW4gS2V5ICcke2tleX0nLiAke3Vua25vd25Ub2tlbkV4cGxhbmF0aW9ufWApO1xuXG5leHBvcnQgY29uc3QgSWRJbmNsdWRlc1VucmVzb2x2ZWRUb2tlbnMgPSAodW5yZXNvbHZlZFRva2Vuczogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYFRoaXMgY29uc3RydWN0IChvciBpdHMgcGFyZW50IGNvbnN0cnVjdCkgaXMgY29uZmlndXJlZCB3aXRoIGFuIElEIHRoYXQgY29udGFpbnMgYSBUb2tlbjogJHt1bnJlc29sdmVkVG9rZW5zfS4gVGhpcyBpcyBub3QgYWxsb3dlZCBiZWNhdXNlIElEcyBtdXN0IGJlIGtub3duIHN0YXRpY2FsbHkgZHVyaW5nIHN5bnRoZXNpcy4gVG9rZW4gdmFsdWVzIGFyZSBvbmx5IGtub3duIGR1cmluZyB0aGUgYXBwbHkgc3RhZ2UsIHRoZXJlZm9yZSB0aGV5IGNhbm5vdCBiZSB1c2VkIGluIElEcy4gUGxlYXNlIHVzZSBhIGNvbmNyZXRlIHZhbHVlIGZvciB5b3VyIGNvbnN0cnVjdHMgSUQgaW5zdGVhZC5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgYXNzZXRDYW5Ob3RDcmVhdGVaaXBBcmNoaXZlID0gKFxuICBzcmM6IHN0cmluZyxcbiAgZGVzdDogc3RyaW5nLFxuICBlcnJvcjogRXJyb3IsXG4pID0+XG4gIG5ldyBFcnJvcihcbiAgICBgQSBUZXJyYWZvcm1Bc3NldCB0cnlpbmcgdG8gemlwIGFyY2hpdmUgJyR7c3JjfScgaW50byAke2Rlc3R9IGZhaWxlZDogJHtlcnJvcn1gLFxuICApO1xuXG5leHBvcnQgY29uc3QgdGVycmFmb3JtTW9kdWxlSGFzQ2hpbGRyZW4gPSAocGF0aE5hbWU6IHN0cmluZykgPT4ge1xuICByZXR1cm4gbmV3IEVycm9yKFxuICAgIGBUcnlpbmcgdG8gYWRkIGNoaWxkcmVuIHRvIGEgVGVycmFmb3JtTW9kdWxlIGF0ICcke3BhdGhOYW1lfScuIFRlcnJhZm9ybU1vZHVsZXMgY2Fubm90IGhhdmUgY2hpbGRyZW4sIGlmIHlvdSB3YW50IHRvIGdyb3VwIHJlc291cmNlcyBvciBjb25zdHJ1Y3RzIGluIGdlbmVyYWwgdG9nZXRoZXIgcGxlYXNlIHVzZSB0aGUgQ29uc3RydWN0cyBjbGFzcyBpbnN0ZWFkLiBTZWUgaHR0cHM6Ly9jZGsudGYvY29uc3RydWN0cyBmb3IgbW9yZSBkZXRhaWxzLmAsXG4gICk7XG59O1xuIl19
|
|
372
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7O0FBS0ksTUFBTSxVQUFVLEdBQUcsQ0FBQyxhQUFxQixFQUFFLEVBQUUsQ0FDbEQsSUFBSSxLQUFLLENBQ1AseURBQXlELGFBQWE7OztLQUdyRSxDQUNGLENBQUM7QUFOUyxRQUFBLFVBQVUsY0FNbkI7QUFFRyxNQUFNLHlCQUF5QixHQUFHLENBQUMsS0FBZSxFQUFFLEVBQUU7SUFDM0QsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzRCxPQUFPLElBQUksS0FBSyxDQUNkLG1HQUFtRyxVQUFVO0NBQ2hILENBQ0UsQ0FBQztBQUNKLENBQUMsQ0FBQztBQU5XLFFBQUEseUJBQXlCLDZCQU1wQztBQUVLLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxTQUFpQixFQUFFLEVBQUUsQ0FDeEQsSUFBSSxLQUFLLENBQ1AsNkRBQTZELFNBQVM7OztLQUdyRSxDQUNGLENBQUM7QUFOUyxRQUFBLG9CQUFvQix3QkFNN0I7QUFFRyxNQUFNLHVCQUF1QixHQUFHLEdBQUcsRUFBRSxDQUMxQyxJQUFJLEtBQUssQ0FDUDs7S0FFQyxDQUNGLENBQUM7QUFMUyxRQUFBLHVCQUF1QiwyQkFLaEM7QUFFRyxNQUFNLDBCQUEwQixHQUFHLENBQUMsRUFBVSxFQUFFLFVBQWtCLEVBQUUsRUFBRSxDQUMzRSxJQUFJLEtBQUssQ0FDUCxrQkFBa0IsRUFBRSxzQ0FBc0MsVUFBVSwrRUFBK0UsT0FBTyxDQUFDLEdBQUcsRUFBRTs7Ozs7O0NBTW5LLENBQ0UsQ0FBQztBQVRTLFFBQUEsMEJBQTBCLDhCQVNuQztBQUVHLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxFQUFVLEVBQUUs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QUUsQ0FBQyxDQUFDO0FBRDlELFFBQUEsb0JBQW9CLHdCQUMwQztBQUVwRSxNQUFNLDBCQUEwQixHQUFHLENBQUMsZ0JBQXdCLEVBQUUsRUFBRSxDQUNyRSxJQUFJLEtBQUssQ0FDUCw0RkFBNEYsZ0JBQWdCLG9PQUFvTyxDQUNqVixDQUFDO0FBSFMsUUFBQSwwQkFBMEIsOEJBR25DO0FBRUcsTUFBTSwyQkFBMkIsR0FBRyxDQUN6QyxHQUFXLEVBQ1gsSUFBWSxFQUNaLEtBQVksRUFDWixFQUFFLENBQ0YsSUFBSSxLQUFLLENBQ1AsMkNBQTJDLEdBQUcsVUFBVSxJQUFJLFlBQVksS0FBSyxFQUFFLENBQ2hGLENBQUM7QUFQUyxRQUFBLDJCQUEyQiwrQkFPcEM7QUFFRyxNQUFNLDBCQUEwQixHQUFHLENBQUMsUUFBZ0IsRUFBRSxFQUFFO0lBQzdELE9BQU8sSUFBSSxLQUFLLENBQ2QsbURBQW1ELFFBQVEscU1BQXFNLENBQ2pRLENBQUM7QUFDSixDQUFDLENBQUM7QUFKVyxRQUFBLDBCQUEwQiw4QkFJckMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmMuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5cbmltcG9ydCB7IElEZXBlbmRhYmxlIH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFRlcnJhZm9ybVN0YWNrIH0gZnJvbSBcIi4vdGVycmFmb3JtLXN0YWNrXCI7XG5cbmV4cG9ydCBjb25zdCBub0FwcEZvdW5kID0gKGNvbnN0cnVjdFBhdGg6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBObyBhcHAgY291bGQgYmUgaWRlbnRpZmllZCBmb3IgdGhlIGNvbnN0cnVjdCBhdCBwYXRoICcke2NvbnN0cnVjdFBhdGh9JyAobGlrZWx5IGEgVGVycmFmb3JtU3RhY2spLlxuVGhlIHNjb3BlIG9mIENES1ROJ3MgVGVycmFmb3JtU3RhY2sgY2xhc3MgaXMgYSBzaW5nbGUgQXBwIGluc3RhbmNlIGNyZWF0ZWQgYnkgJ2NvbnN0IGFwcCA9IG5ldyBBcHAoKScuIFRoZSBBcHAgaXMgeW91ciBwcm9qZWN0J3Mgcm9vdCwgaG9sZGluZyBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gYW5kIHZhbGlkYXRpb25zLlxuTGVhcm4gbW9yZSBhYm91dCB0aGUgQXBwOiBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvY2RrdG4tYXJjaGl0ZWN0dXJlI2FwcC1jbGFzc1xuICAgIGAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RzT3V0c2lkZU9mU3RhY2tzID0gKHBhdGhzOiBzdHJpbmdbXSkgPT4ge1xuICBjb25zdCBidWxsZXRMaXN0ID0gcGF0aHMubWFwKChwKSA9PiBgICAtICR7cH1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gbmV3IEVycm9yKFxuICAgIGBGb3VuZCBjb25zdHJ1Y3RzIG91dHNpZGUgb2YgYSBUZXJyYWZvcm1TdGFjayAoZGlkIHlvdSBwYXNzIHNjb3BlPWFwcCBpbnN0ZWFkIG9mIHNjb3BlPXN0YWNrPyk6XFxuJHtidWxsZXRMaXN0fVxuYCxcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhcHBWYWxpZGF0aW9uRmFpbHVyZSA9IChlcnJvckxpc3Q6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBBcHAtbGV2ZWwgdmFsaWRhdGlvbiBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGVycm9yczpcXG4gICR7ZXJyb3JMaXN0fVxuVmFsaWRhdGlvbnMgYWxsb3cgZm9yIGR5bmFtaWMgdmVyaWZpY2F0aW9uIG9mIHlvdXIgcHJvamVjdC5cblRvIHNraXAgdmFsaWRhdGlvbnMsIGFkZCAnc2tpcFZhbGlkYXRpb246IHRydWUnIHRvIHlvdXIgQXBwIGNvbmZpZy5cbiAgICBgLFxuICApO1xuXG5leHBvcnQgY29uc3QgcHJvdmlkZXJWZXJzaW9uTWlzbWF0Y2ggPSAoKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYFZlcnNpb24gbWlzbWF0Y2ggZGV0ZWN0ZWQ6IFlvdXIgcHJvdmlkZXIgYmluZGluZ3MgYXJlIGJ1aWx0IGZvciBhbiBvbGRlciB2ZXJzaW9uIG9mIENES1RuLlxuVXBncmFkZSB5b3VyIHByZS1idWlsdCBwcm92aWRlciBvciByZS1ydW4gY2RrdG4gZ2V0IHdpdGggYSBtb3JlIHJlY2VudCB2ZXJzaW9uICg+PSAwLjEwKSBvZiB0aGUgY2RrdG4tY2xpLlxuICAgIGAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBhc3NldE91dE9mU2NvcGVPZkNES1RGSnNvbiA9IChpZDogc3RyaW5nLCBjb25maWdQYXRoOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgVGVycmFmb3JtQXNzZXQgJHtpZH0gd2FzIGNyZWF0ZWQgd2l0aCBhIHJlbGF0aXZlIHBhdGggJyR7Y29uZmlnUGF0aH0nLCBidXQgd2UgY2Fubm90IGZpbmQgdGhlIGNka3RmLmpzb24gd2l0aGluIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAnJHtwcm9jZXNzLmN3ZCgpfSdcblxuVGhlIGNka3RmLmpzb24gZmlsZSBpcyBuZWVkZWQgdG8gZXN0YWJsaXNoIHRoZSBiYXNlIGZvciB0aGUgcmVsYXRpdmUgcGF0aCAodGhlICcuJyBpbiAnLi9mb28vYmFyJykuXG5cblBsYWNlIGEgY2RrdGYuanNvbiBhdCB0aGUgcm9vdCBvZiB5b3VyIHByb2plY3QuIExlYXJuIG1vcmU6IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jcmVhdGUtYW5kLWRlcGxveS9jb25maWd1cmF0aW9uLWZpbGVcbkxlYXJuIG1vcmUgYWJvdXQgVGVycmFmb3JtQXNzZXQ6IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy9hc3NldHNcbmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBhc3NldEV4cGVjdHNEaXJlY3RvcnkgPSAoaWQ6IHN0cmluZywgY29uZmlnUGF0aDogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYFRlcnJhZm9ybUFzc2V0ICR7aWR9IGV4cGVjdHMgcGF0aCB0byBwb2ludCB0byBhIGRpcmVjdG9yeS4gSW5zdGVhZCwgdGhpcyBmaWxlIHdhcyBwYXNzZWQ6ICcke2NvbmZpZ1BhdGh9Jy4gUGxlYXNlIGNvcnJlY3QgdGhlIHBhdGggdG8gcG9pbnQgdG8gYSBkaXJlY3RvcnkuXG5MZWFybiBtb3JlIGFib3V0IFRlcnJhZm9ybUFzc2V0OiBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvYXNzZXRzXG4gICAgYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGFzc2V0VHlwZU5vdEltcGxlbWVudGVkID0gKCkgPT5cbiAgbmV3IEVycm9yKGBBc3NldCB0eXBlIGlzIG5vdCBpbXBsZW1lbnRlZC5cblBvc3NpYmxlIEFzc2V0IHR5cGVzIGluY2x1ZGU6IEZJTEUsIERJUkVDVE9SWSwgYW5kIEFSQ0hJVkUuXG5UYWtlIG9uZSBvZiB0aGVzZSB2YWx1ZXMgZnJvbSB0aGUgQXNzZXRUeXBlIEVudW0uXG5MZWFybiBtb3JlIGFib3V0IFRlcnJhZm9ybUFzc2V0OiBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvYXNzZXRzXG4gIGApO1xuXG5leHBvcnQgY29uc3QgZHluYW1pY0Jsb2NrTm90U3VwcG9ydGVkID0gKF9mb3JlYWNoRXhwcmVzc2lvbjogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYFdlIGRvIG5vdCBzdXBwb3J0IGRpcmVjdGx5IHJlc29sdmluZyBhIFRlcnJhZm9ybUR5bmFtaWNCbG9jay4gRHluYW1pYyBibG9ja3MgYXJlIG9ubHkgc3VwcG9ydGVkIG9uIGJsb2NrIGF0dHJpYnV0ZXMgb2YgcmVzb3VyY2VzLCBkYXRhIHNvdXJjZXMsIGFuZCBwcm92aWRlcnMuXG5cbllvdSBjYW4gY3JlYXRlIGEgVGVycmFmb3JtRHluYW1pY0Jsb2NrIGJ5IGNhbGxpbmcgJy5keW5hbWljJyBvbiBhIFRlcnJhZm9ybUl0ZXJhdG9yIGluc3RhbmNlLlxuXG5UaGUgZm9sbG93aW5nIGV4cHJlc3Npb24gd2FzIHVzZWQgZm9yIHRoZSBkeW5hbWljIGJsb2NrOiAuZHluYW1pYyh7XG4gICR7X2ZvcmVhY2hFeHByZXNzaW9ufVxufSlcbmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCB1bnJlc29sdmVkVG9rZW5JbkNvbnN0cnVjdElkID0gKGlkOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgWW91IGNhbm5vdCB1c2UgYSB0b2tlbiAoZS5nLiwgYSByZWZlcmVuY2UgdG8gYW4gYXR0cmlidXRlKSBhcyB0aGUgaWQgb2YgYSBjb25zdHJ1Y3QuIElkcyBvZiBjb25zdHJ1Y3RzIG11c3QgYmUga25vd24gYXQgc3ludGhlc2lzIHRpbWUsIGFuZCB0b2tlbiB2YWx1ZXMgYXJlIG9ubHkga25vd24gd2hlbiBUZXJyYWZvcm0gcnVucy4gUGxlYXNlIHVzZSBhIGNvbmNyZXRlIHZhbHVlIGZvciB5b3VyIGNvbnN0cnVjdHMgSUQgaW5zdGVhZC5cbllvdSBwYXNzZWQgdGhlIGZvbGxvd2luZyBpZDogXCIke2lkfVwiXG5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgaXRlcmF0b3JPblJlc291cmNlV2l0aENvdW50ID0gKCkgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBZb3UgY2Fubm90IGNyZWF0ZSBhbiBpdGVyYXRvciBmcm9tIGEgcmVzb3VyY2Ugd2l0aCBhIGNvdW50IGFyZ3VtZW50LlxuSW5zdGVhZCwgcmV1c2UgdGhpcyByZXNvdXJjZSdzIFRlcnJhZm9ybUNvdW50IGluc3RhbmNlIGluIHRoZSByZXNvdXJjZSB5b3Ugd2FudCB0byB1c2UgYXMgYW4gaXRlcmF0b3IuXG5cbklmIHlvdSB3YW50IHRvIHVzZSBhbiBpdGVyYXRvciB0byBwb3B1bGF0ZSBhIGxpc3QgYXR0cmlidXRlLCByZXBsYWNlIHRoZSBjb3VudCBvbiB0aGUgcmVzb3VyY2Ugd2l0aCBhbiBpdGVyYXRvciBwYXNzZWQgaW50byB0aGUgZm9yRWFjaCBhcmd1bWVudC5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgaXRlcmF0b3JPblJlc291cmNlV2l0aG91dEZvckVhY2ggPSAoKSA9PlxuICBuZXcgRXJyb3IoYENhbm5vdCBjcmVhdGUgYW4gaXRlcmF0b3IgZnJvbSBhIHJlc291cmNlIHdpdGhvdXQgYSBmb3JFYWNoIGFyZ3VtZW50LiBJZiB5b3Ugd2FudCB0byBjcmVhdGUgbW9yZSBpbnN0YW5jZXMgb2YgdGhpcyByZXNvdXJjZSwgcGFzcyBhbiBpdGVyYXRvciB0byB0aGUgZm9yRWFjaCBhcmd1bWVudCBvZiB0aGUgcmVzb3VyY2UgZmlyc3QuXG4gIGApO1xuXG5leHBvcnQgY29uc3QgbW9kdWxlc1dpdGhTYW1lQWxpYXMgPSAoYWxpYXM6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKGBNdWx0aXBsZSBwcm92aWRlcnMgaGF2ZSB0aGUgc2FtZSBhbGlhczogXCIke2FsaWFzfVwiXG5FYWNoIHByb3ZpZGVyIG11c3QgaGF2ZSBhIHVuaXF1ZSBhbGlhcyB3aGVuIHBhc3NpbmcgbXVsdGlwbGUgcHJvdmlkZXJzIG9mIHRoZSBzYW1lIHR5cGUgdG8gbW9kdWxlcy5cbiAgYCk7XG5cbmV4cG9ydCBjb25zdCBtb3ZlVGFyZ2V0QWxyZWFkeVNldCA9IChcbiAgdGFyZ2V0OiBzdHJpbmcsXG4gIGZyaWVuZGx5VW5pcXVlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbikgPT5cbiAgbmV3IEVycm9yKGBUYXJnZXQgXCIke3RhcmdldH1cIiBoYXMgYWxyZWFkeSBiZWVuIHVzZWQgZm9yIHRoZSBjb25zdHJ1Y3QgJHtmcmllbmRseVVuaXF1ZUlkfS5cblRhcmdldCBtdXN0IGJlIGEgc3RyaW5nIHRoYXQgaXMgdW5pcXVlIGFjcm9zcyBhbGwgcmVzb3VyY2VzIGluIHRoZSBzYW1lIHN0YWNrLmApO1xuXG5leHBvcnQgY29uc3QgbW92ZVRhcmdldE5vdFNldCA9ICh0YXJnZXQ6IHN0cmluZywgZW50cmllczogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoYFRhcmdldCBcIiR7dGFyZ2V0fVwiIGhhcyBub3QgYmVlbiBzZXQuXG5Zb3UgdHJpZWQgdG8gbW92ZSBhIHJlc291cmNlIHdpdGhvdXQgYSB0YXJnZXQuXG5DYWxsIC5hZGRNb3ZlVGFyZ2V0KFwiJHt0YXJnZXR9XCIpIG9uIHRoZSBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UgeW91IHdhbnQgdG8gbW92ZSB0aGlzIHJlc291cmNlIHRvLlxuXG5BbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0YXJnZXRzIChpbiBjYXNlIHlvdSBoYWQgYSB0eXBvKTpcbiR7ZW50cmllc31cbmApO1xuXG5leHBvcnQgY29uc3QgbW92ZWRUb1Jlc291cmNlT2ZEaWZmZXJlbnRUeXBlID0gKFxuICBtb3ZlVGFyZ2V0OiBzdHJpbmcsXG4gIG9yaWdpbmFsUmVzb3VyY2VUeXBlOiBzdHJpbmcsXG4gIGRlc3RpbmF0aW9uUmVzb3VyY2VUeXBlOiBzdHJpbmcsXG4pID0+XG4gIG5ldyBFcnJvcihgV2UgZG8gbm90IHN1cHBvcnQgbW92aW5nIHJlc291cmNlcyB0byBhIGRpZmZlcmVudCB0eXBlLlxuXG5UaGUgZGVzdGluYXRpb24gXCIke21vdmVUYXJnZXR9XCIncyByZXNvdXJjZSB0eXBlICR7ZGVzdGluYXRpb25SZXNvdXJjZVR5cGV9IGRpZmZlcnMgZnJvbSB0aGUgb3JpZ2luYWwgcmVzb3VyY2UgdHlwZSAoJHtvcmlnaW5hbFJlc291cmNlVHlwZX0pIHlvdSBhcmUgdHJ5aW5nIHRvIG1vdmUuXG5cbklmIHRoaXMgd2FzIGludGVudGlvbmFsLCB0cnkgaW1wb3J0aW5nIHRoZSBleGlzdGluZyByZXNvdXJjZSBpbnRvIHlvdXIgdGFyZ2V0IGluc3RlYWQuIExlYXJuIG1vcmU6XG5odHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvcmVzb3VyY2VzI2ltcG9ydGluZy1yZXNvdXJjZXNcblxuTm90ZSB0aGF0IHlvdSBtdXN0IG1hbnVhbGx5IHJlbW92ZSB0aGUgb3JpZ2luYWwgcmVzb3VyY2UgZnJvbSB5b3VyIHN0YXRlIGZpbGUgYWZ0ZXIgaW1wb3J0aW5nIGl0LiBVc2UgdGhlIFwidGVycmFmb3JtIHN0YXRlIHJtXCIgY29tbWFuZCBpbiB0aGUgb3V0cHV0IGRpcmVjdG9yeSBvZiB0aGUgc3RhY2sgeW91IGRlZmluZWQgdGhpcyByZXNvdXJjZSBpbi4gTGVhcm4gbW9yZTpcbmh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2NsaS9jb21tYW5kcy9zdGF0ZS9ybVxuYCk7XG5cbmV4cG9ydCBjb25zdCByZXNvdXJjZUdpdmVuVHdvTW92ZU9wZXJhdGlvbnNCeVRhcmdldEFuZElkID0gKFxuICBpZDogc3RyaW5nLFxuICBleGlzdGluZ1RhcmdldDogc3RyaW5nLFxuICBuZXdNb3ZlOiB7IHRvOiBzdHJpbmc7IGZyb206IHN0cmluZyB9LFxuKSA9PlxuICBuZXcgRXJyb3IoYFxuVGhlIHJlc291cmNlICR7aWR9IGhhcyBiZWVuIGdpdmVuIHR3byBkaWZmZXJlbnQgbW92ZSBvcGVyYXRpb25zLlxuXG5Nb3ZlIHRhcmdldDogXCIke2V4aXN0aW5nVGFyZ2V0fVwiXG5Nb3ZlIGJ5IGlkOiB7XG4gIGZyb206ICR7bmV3TW92ZS5mcm9tfVxuICB0bzogJHtuZXdNb3ZlLnRvfVxufVxuXG5Pbmx5IG9uZSBtb3ZlIG9wZXJhdGlvbiBjYW4gb2NjdXIgcGVyIHBsYW4vYXBwbHkuIFJlbW92ZSBvbmUgb2YgdGhlIG9wZXJhdGlvbnMuXG5cbkxlYXJuIG1vcmUgYWJvdXQgbW92aW5nIHJlc291cmNlczogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL2V4YW1wbGVzLWFuZC1ndWlkZXMvcmVmYWN0b3JpbmcjOn46dGV4dD1Nb3ZpbmclMjAlMjYlMjBSZW5hbWluZyUyMFJlc291cmNlcyUyMFdpdGhpbiUyMGElMjBTdGFja1xuYCk7XG5cbmV4cG9ydCBjb25zdCByZXNvdXJjZUdpdmVuVHdvTW92ZU9wZXJhdGlvbnNCeUlkID0gKFxuICBpZDogc3RyaW5nLFxuICBleGlzdGluZ01vdmU6IHsgdG86IHN0cmluZzsgZnJvbTogc3RyaW5nIH0sXG4gIG5ld01vdmU6IHsgdG86IHN0cmluZzsgZnJvbTogc3RyaW5nIH0sXG4pID0+XG4gIG5ldyBFcnJvcihgXG5UaGUgcmVzb3VyY2UgJHtpZH0gaGFzIGJlZW4gZ2l2ZW4gdHdvIGRpZmZlcmVudCBtb3ZlIG9wZXJhdGlvbnMuXG5cbntcbiAgZnJvbTogJHtleGlzdGluZ01vdmUuZnJvbX1cbiAgdG86ICR7ZXhpc3RpbmdNb3ZlLnRvfVxufVxue1xuICBmcm9tOiAke25ld01vdmUuZnJvbX1cbiAgdG86ICR7bmV3TW92ZS50b30gKFJlc291cmNlIGNhbGxpbmcgdGhlIG1vdmUgdG8gb3BlcmF0aW9uKVxufVxuXG5Pbmx5IG9uZSBtb3ZlIG9wZXJhdGlvbiBjYW4gb2NjdXIgcGVyIHBsYW4vYXBwbHkuIFJlbW92ZSBvbmUgb2YgdGhlIG9wZXJhdGlvbnMuXG5cbkxlYXJuIG1vcmUgYWJvdXQgbW92aW5nIHJlc291cmNlczogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL2V4YW1wbGVzLWFuZC1ndWlkZXMvcmVmYWN0b3JpbmcjOn46dGV4dD1Nb3ZpbmclMjAlMjYlMjBSZW5hbWluZyUyMFJlc291cmNlcyUyMFdpdGhpbiUyMGElMjBTdGFja1xuYCk7XG5cbmV4cG9ydCBjb25zdCByZXNvdXJjZUdpdmVuVHdvTW92ZU9wZXJhdGlvbnNCeVRhcmdldCA9IChcbiAgcmVzb3VyY2VJZDogc3RyaW5nLFxuICBleGlzdGluZ01vdmVUYXJnZXQ6IHN0cmluZyxcbiAgbmV3TW92ZVRhcmdldDogc3RyaW5nLFxuKSA9PlxuICBuZXcgRXJyb3IoYFRoZSByZXNvdXJjZSAke3Jlc291cmNlSWR9IGhhcyBiZWVuIGdpdmVuIHR3byBkaWZmZXJlbnQgbW92ZVRhcmdldHM6IFwiJHtuZXdNb3ZlVGFyZ2V0fVwiIGFuZCBcIiR7ZXhpc3RpbmdNb3ZlVGFyZ2V0fVwiXG5cbkEgcmVzb3VyY2UgY2FuIG9ubHkgYmUgbW92ZWQgb25jZSBwZXIgcGxhbi9hcHBseS5cblxuTGVhcm4gbW9yZSBhYm91dCBtb3ZpbmcgcmVzb3VyY2VzOiBodHRwczovL2Nka3RuLmlvL2RvY3MvZXhhbXBsZXMtYW5kLWd1aWRlcy9yZWZhY3RvcmluZyM6fjp0ZXh0PU1vdmluZyUyMCUyNiUyMFJlbmFtaW5nJTIwUmVzb3VyY2VzJTIwV2l0aGluJTIwYSUyMFN0YWNrXG5gKTtcblxuZXhwb3J0IGNvbnN0IHN0YWNrQ29udGFpbnNEaXNhbGxvd2VkQ2hhciA9IChcbiAgc3RhY2tJZDogc3RyaW5nLFxuICBpbnZhbGlkQ2hhcjogc3RyaW5nLFxuKSA9PlxuICBuZXcgRXJyb3IoYENhbm5vdCBjcmVhdGUgVGVycmFmb3JtIHN0YWNrIHdpdGggaWQgXCIke3N0YWNrSWR9XCIuIEl0IGNvbnRhaW5zIGFuIGludmFsaWQgZ2xvYiBjaGFyYWN0ZXI6IFwiJHtpbnZhbGlkQ2hhcn1cIi5cblxuR2xvYiBjaGFyYWN0ZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHN0YWNrIG5hbWVzIGJlY2F1c2Ugd2UgdXNlIHRoZW0gdG8gZGVwbG95IGFuZCBkZXN0cm95IG11bHRpcGxlIHN0YWNrcy4gRm9yIGV4YW1wbGUsICdjZGt0biBkZXBsb3kgXFxgKi1wcm9kdWN0aW9uXFxgJyBkZXBsb3lzIGFsbCBzdGFja3Mgd2l0aCBuYW1lcyB0aGF0IGVuZCBpbiAnLXByb2R1Y3Rpb24nLlxuYCk7XG5cbmV4cG9ydCBjb25zdCBzdGFja0lkQ29udGFpbnNXaGl0ZXNwYWNlID0gKHN0YWNrSWQ6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKGBDYW5ub3QgY3JlYXRlIFRlcnJhZm9ybVN0YWNrIHdpdGggaWQgXCIke3N0YWNrSWR9XCIuIEl0IGNvbnRhaW5zIGEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIuXG5cblBsZWFzZSByZW1vdmUgYW55IHdoaXRlc3BhY2UgY2hhcmFjdGVycyBpbiB5b3VyIFRlcnJhZm9ybVN0YWNrIGlkLCBsaWtlIHNvOiBcIiR7c3RhY2tJZC5yZXBsYWNlKFxuICAgIC9cXHMvZyxcbiAgICBcIlwiLFxuICApfVwiXG5gKTtcblxuZXhwb3J0IGNvbnN0IG5vU3RhY2tGb3JDb25zdHJ1Y3QgPSAoY29uc3RydWN0UGF0aDogc3RyaW5nLCBoaW50OiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihgTm8gc3RhY2sgY291bGQgYmUgaWRlbnRpZmllZCBmb3IgdGhlIGNvbnN0cnVjdCBhdCBwYXRoICcke2NvbnN0cnVjdFBhdGh9JyR7aGludH1cblxuWW91IGNhbiBvbmx5IHVzZSBjb25zdHJ1Y3RzIGFzIHBhcnQgb2YgYSBUZXJyYWZvcm1TdGFjay5cblxuVG8gbGVhcm4gbW9yZSBhYm91dCBDb25zdHJ1Y3RzIHZzLiBUZXJyYWZvcm1TdGFja3MsIHJlZmVyIHRvOiBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvY29uc3RydWN0cyM6fjp0ZXh0PUNvbnN0cnVjdHMlMjB2cy4lMjBTdGFja3NcbmApO1xuXG5leHBvcnQgY29uc3Qgc3RhY2tIYXNDaXJjdWxhckRlcGVuZGVuY3kgPSAoXG4gIHRoaXNTdGFjazogVGVycmFmb3JtU3RhY2ssXG4gIGRlcGVuZGVuY3k6IFRlcnJhZm9ybVN0YWNrLFxuKSA9PlxuICBuZXcgRXJyb3IoYENhbm5vdCBhZGQgZGVwZW5kZW5jeSAke2RlcGVuZGVuY3l9IHRvICR7dGhpc1N0YWNrfSwgYmVjYXVzZSBpdCB3b3VsZCBjYXVzZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kuXG5cblRlcnJhZm9ybVN0YWNrICR7ZGVwZW5kZW5jeX0gaXMgYWxyZWFkeSBkZXBlbmRlbnQgb24gJHt0aGlzU3RhY2t9IGRpcmVjdGx5LCBvciBkZXBlbmRlbnQgb24gYSBUZXJyYWZvcm1TdGFjayB3aXRoaW4gJHt0aGlzU3RhY2t9LlxuXG5UbyBsZWFybiBtb3JlIGFib3V0IGNpcmN1bGFyIGRlcGVuZGVuY3kgcmVmZXJlbmNlcywgcmVmZXIgdG86IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy9zdGFja3MjOn46dGV4dD1Dcm9zcyUyRFN0YWNrJTIwUmVmZXJlbmNlc1xuYCk7XG5cbmV4cG9ydCBjb25zdCBzdGFja1ZhbGlkYXRpb25GYWlsdXJlID0gKGVycm9yTGlzdDogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoYFZhbGlkYXRpb24gZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBlcnJvcnM6XFxuICAke2Vycm9yTGlzdH1cblxuSWYgeW91IHdpc2ggdG8gaWdub3JlIHRoZXNlIHZhbGlkYXRpb25zLCBwYXNzICdza2lwVmFsaWRhdGlvbjogdHJ1ZScgdG8geW91ciBBcHAgY29uZmlndXJhdGlvbi5cbmApO1xuXG5leHBvcnQgY29uc3QgbWF0Y2hlcnNQYXRoSXNOb3REaXJlY3RvcnkgPSAoZnVuY3Rpb25OYW1lOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihgUGF0aCBpcyBub3QgYSBkaXJlY3RvcnkuXG5cbkVuc3VyZSB5b3UgYXJlIHBhc3NpbmcgdGhlIHJlc3VsdCBvZiBUZXN0aW5nLmZ1bGxTeW50aCgnc3RhY2sgaW5zdGFuY2UnKSB0byAnJHtmdW5jdGlvbk5hbWV9Jywgbm90IFRlc3Rpbmcuc3ludGgoJ3N0YWNrIGluc3RhbmNlJykuXG5cblRlc3RpbmcuZnVsbFN5bnRoIHJldHVybnMgYSBmaWxlIHBhdGggdG8gYSB0ZW1wb3JhcnkgdGVzdGluZyBlbnZpcm9ubWVudC4gVGVzdGluZy5zeW50aCByZXR1cm5zIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHlvdXIgc3RhY2suXG5cblRvIGxlYXJuIG1vcmUgYWJvdXQgdGVzdGluZyBpbiBDREtUTiwgcmVmZXIgdG86IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy90ZXN0L3VuaXQtdGVzdHNgKTtcblxuZXhwb3J0IGNvbnN0IG1hdGNoZXJzRm91bmRFcnJvcnNJblN0YWNrID0gKFxuICBlcnJvckNvdW50OiBhbnksXG4gIHN0YWNrTmFtZTogc3RyaW5nLFxuICBkaWFnbm9zdGljczogc3RyaW5nLFxuKSA9PlxuICBuZXcgRXJyb3IoYEZvdW5kICR7ZXJyb3JDb3VudH0gRXJyb3JzIGluIHN0YWNrICR7c3RhY2tOYW1lfTogJHtkaWFnbm9zdGljc31cblxuVGhlc2UgZXJyb3JzIGFyZSBub3QgdGVzdCBmYWlsdXJlcywgYnV0IGlzc3VlcyB3aXRoIHRoZSB1bmRlcmx5aW5nIFRlcnJhZm9ybVN0YWNrIGJlaW5nIHRlc3RlZC4gRml4IHRoZSBhYm92ZSBpc3N1ZXMgYmVmb3JlIHJ1bm5pbmcgeW91ciB0ZXN0cyBhZ2Fpbi5cbmApO1xuXG5leHBvcnQgY29uc3QgamVzdE5vdEluc3RhbnRpYXRlZCA9ICgpID0+XG4gIG5ldyBFcnJvcihgSmVzdCB3YXMgbm90IHByb3Blcmx5IGluc3RhbnRpYXRlZC5cblxuRW5zdXJlIHlvdSBoYXZlIGEgJ3NldHVwLmpzJyBmaWxlIGluIHlvdXIgcHJvamVjdCdzIGRpcmVjdG9yeSB0aGF0IGNhbGxzICdjZGt0bi5UZXN0aW5nLnNldHVwSmVzdCgpJy5cblxuVG8gbGVhcm4gbW9yZSBhYm91dCBzZXR0aW5nIHVwIHRlc3RpbmcsIHJlZmVyIHRvOiBodHRwczovL2Nka3RuLmlvL2RvY3MvdGVzdC91bml0LXRlc3RzIzp+OnRleHQ9QWRkJTIwVGVzdGluZyUyMHRvJTIwWW91ciUyMEFwcGxpY2F0aW9uXG5gKTtcblxuZXhwb3J0IGNvbnN0IGV4cGVjdE5vdEdsb2JhbGx5QWNjZXNzaWJsZSA9ICgpID0+XG4gIG5ldyBFcnJvcihgVGhlIGV4cGVjdCBmdW5jdGlvbiBpcyBub3QgZ2xvYmFsbHkgYWNjZXNzaWJsZS5cblxuVG8gbGVhcm4gbW9yZSBhYm91dCBzZXR0aW5nIHVwIHRlc3RpbmcsIHJlZmVyIHRvOiBodHRwczovL2Nka3RuLmlvL2RvY3MvdGVzdC91bml0LXRlc3RzIzp+OnRleHQ9QWRkJTIwVGVzdGluZyUyMHRvJTIwWW91ciUyMEFwcGxpY2F0aW9uXG5gKTtcblxuZXhwb3J0IGNvbnN0IGludmFsaWRTdGFjayA9IChmdW5jdGlvbk5hbWU6IHN0cmluZywgc3RhY2tDb250ZW50OiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihgSW52YWxpZCBKU09OIHN0cmluZyBwYXNzZWQ6ICR7c3RhY2tDb250ZW50fVxuXG5cbkVuc3VyZSB5b3UgYXJlIHBhc3NpbmcgdGhlIHJlc3VsdCBvZiBUZXN0aW5nLnN5bnRoKCdzdGFjayBpbnN0YW5jZScpIHRvICcke2Z1bmN0aW9uTmFtZX0nLCBub3QgVGVzdGluZy5mdWxsU3ludGgoJ3N0YWNrIGluc3RhbmNlJykuXG5cblxuVGVzdGluZy5zeW50aCByZXR1cm5zIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHlvdXIgc3RhY2suIENES1ROIGNhbiB1c2UgYXNzZXJ0aW9ucyB3aXRoIHRoaXMgSlNPTiB0byBjaGVjayB0aGUgY29tcG9zaXRpb24gb2YgeW91ciBzdGFja3MsIGxpa2Ugc286IFwiVGVzdGluZy50b0hhdmVSZXNvdXJjZShUZXN0aW5nLnN5bnRoKCdUZXJyYWZvcm1TdGFjayBpbnN0YW5jZScpLCBTM0J1Y2tldClcIlxuXG5UZXN0aW5nLmZ1bGxTeW50aCByZXR1cm5zIGEgZmlsZSBwYXRoIHRvIGEgdGVtcG9yYXJ5IHRlc3RpbmcgZW52aXJvbm1lbnQuXG5cblRvIGxlYXJuIG1vcmUgYWJvdXQgdGVzdGluZyBpbiBDREtUTiwgcmVmZXIgdG86IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy90ZXN0L3VuaXQtdGVzdHNcbmApO1xuXG5leHBvcnQgY29uc3QgdGFyZ2V0Tm90UmVzb2x2YWJsZVdpdGhPdmVycmlkZXMgPSAodGFyZ2V0OiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihgVGFyZ2V0ICgke3RhcmdldH0pIGNhbm5vdCBiZSBhIHJlc29sdmFibGUgdG9rZW4gaWYgeW91IHNwZWNpZmllZCBvdmVycmlkZXMuIFJlcGxhY2UgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCB5b3UgYXJlIG92ZXJyaWRpbmcgd2l0aCBhIHN0YXRpYyB2YWx1ZS5cblxuVG8gbGVhcm4gbW9yZSBhYm91dCBUb2tlbnMsIHJlZmVyIHRvOiBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvdG9rZW5zXG5gKTtcblxuZXhwb3J0IGNvbnN0IHNvdXJjZU9yVGFyZ2V0Tm90QW5PYmplY3QgPSAoXG4gIHNvdXJjZTogc3RyaW5nLFxuICBzb3VyY2VUeXBlOiBzdHJpbmcsXG4gIHRhcmdldDogc3RyaW5nLFxuICB0YXJnZXRUeXBlOiBzdHJpbmcsXG4pID0+XG4gIG5ldyBFcnJvcihgQW4gaXNzdWUgb2NjdXJyZWQgZHVyaW5nIHRoZSBzeW50aGVzaXphdGlvbiBvZiB5b3VyIFRlcnJhZm9ybSBjb25maWd1cmF0aW9uLlxuXG5Cb3RoIHRoZSBzb3VyY2UgZWxlbWVudCAoJHtzb3VyY2V9KSBhbmQgaXRzIGNvbnRhaW5pbmcgdGFyZ2V0IGVsZW1lbnQgKCR7dGFyZ2V0fSkgbXVzdCBiZSBvYmplY3RzLlxuXG5UeXBlIG9mIHNvdXJjZTogJHtzb3VyY2VUeXBlfVxuVHlwZSBvZiB0YXJnZXQ6ICR7dGFyZ2V0VHlwZX1cbmApO1xuXG5leHBvcnQgY29uc3QgY29uc3RydWN0RGVwZW5kZW5jeUJlbG93VjEwID0gKCkgPT5cbiAgbmV3IEVycm9yKGBWZXJzaW9uIG1pc21hdGNoISBDREtUTiB2ZXJzaW9uIDAuNiByZXF1aXJlcyB5b3VyIGNvbnN0cnVjdHMgdmVyc2lvbiB0byBiZSB2MTAgb3IgYWJvdmUuXG5cblVwZGF0ZSB5b3VyIGNvbnN0cnVjdHMgZGVwZW5kZW5jeTogaHR0cHM6Ly9jZGsudGYvdXBncmFkZS1jb25zdHJ1Y3RzLXYxMFxuYCk7XG5cbmV4cG9ydCBjb25zdCBjbG91ZEJhY2tlbmRXb3Jrc3BhY2VJc05vdERlZmluZWRCeU5hbWUgPSAoKSA9PlxuICBuZXcgRXJyb3IoYFRoZSBDbG91ZCBiYWNrZW5kIG9ubHkgc3VwcG9ydHMgY3Jvc3Mtc3RhY2sgcmVmZXJlbmNlcyBpZiB0aGUgd29ya3NwYWNlIGlzIGRlZmluZWQgYnkgbmFtZSAobm90IGJ5IHRhZ3MpLlxuXG5UbyB1c2UgY3Jvc3Mtc3RhY2sgcmVmZXJlbmNlcywgcmVwbGFjZSBhbGwgbWVudGlvbnMgb2YgJ1RhZ2dlZENsb3VkV29ya3NwYWNlcycgd2l0aCAnTmFtZWRDbG91ZFdvcmtzcGFjZScsIGxpa2Ugc286XG5cbm5ldyBDbG91ZEJhY2tlbmQoc3RhY2ssIHtcbiAgLi4uXG4gIHdvcmtzcGFjZXM6IG5ldyBOYW1lZENsb3VkV29ya3NwYWNlKFwibXktYXBwXCIpLFxufSk7XG5cblRvIGxlYXJuIG1vcmUgYWJvdXQgUmVtb3RlIEJhY2tlbmRzLCByZWZlciB0bzogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL2NvbmNlcHRzL3JlbW90ZS1iYWNrZW5kc1xuYCk7XG5cbmV4cG9ydCBjb25zdCB2YWx1ZUNvbnRhaW5zVW5lc2NhcGVkUXVvdGVzID0gKHZhbHVlOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgWW91ciB2YWx1ZSwgJyR7dmFsdWV9JywgaGFzIHVuZXNjYXBlZCBkb3VibGUgcXVvdGVzIGluIGl0LCBzbyBpdCBjYW5ub3QgYmUgdXNlZCBhcyBhIHZhbHVlLlxuXG5UbyBzYWZlbHkgdXNlIHRoZSB2YWx1ZSwgdXNlIEZuLnJhd1N0cmluZyBvbiB5b3VyIHN0cmluZywgbGlrZSBzbzpcblxuRm4ucmF3U3RyaW5nKCcke3ZhbHVlfScpXG5cbkRvaW5nIHRoaXMgZW5zdXJlcyBDREtUTiBhbmQgVGVycmFmb3JtIGludGVycHJldCB5b3VyIHZhbHVlcyBjb3JyZWN0bHkuXG5cblRvIGxlYXJuIG1vcmUgYWJvdXQgYnVpbHQgaW4gVGVycmFmb3JtIGZ1bmN0aW9ucyB3aXRoaW4gQ0RLVE4sIHJlZmVyIHRvOiBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvZnVuY3Rpb25zXG5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgZW5jb3VudGVyZWRBbm5vdGF0aW9uV2l0aExldmVsRXJyb3IgPSAoZXJyb3JzOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihgRW5jb3VudGVyZWQgQW5ub3RhdGlvbnMgd2l0aCBsZXZlbCBcIkVSUk9SXCI6XFxuJHtlcnJvcnN9XG5cbkVpdGhlciBmaXggdGhlIGlzc3VlcyBhYm92ZSwgb3Igc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBDREtURl9DT05USU5VRV9TWU5USF9PTl9FUlJPUl9BTk5PVEFUSU9OUyB0byBpZ25vcmUgdGhlc2UgYW5ub3RhdGlvbnMuXG5gKTtcblxuZXhwb3J0IGNvbnN0IHZhbHVlSXNJbnZhbGlkU3RyaW5nT3JUb2tlbiA9ICh2YWx1ZTogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYCcke3ZhbHVlfScgaXMgbm90IGEgdmFsaWQgc3RyaW5nIG5vciBhIHRva2VuLiBUaGlzIGZ1bmN0aW9uIG9ubHkgYWNjZXB0cyBzdHJpbmdzIG9yIHRva2VucyByZXNvbHZpbmcgdG8gc3RyaW5ncy4gUGxlYXNlIGNoYW5nZSB5b3VyIGNvZGUgYWNjb3JkaW5nbHkuYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IHZhbHVlSXNJbnZhbGlkTnVtYmVyT3JUb2tlbiA9ICh2YWx1ZTogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYCR7dmFsdWV9IGlzIG5vdCBhIHZhbGlkIG51bWJlciBub3IgYSB0b2tlbi4gVGhpcyBmdW5jdGlvbiBvbmx5IGFjY2VwdHMgbnVtYmVycyBvciB0b2tlbnMgcmVzb2x2aW5nIHRvIG51bWJlcnMuIFBsZWFzZSBjaGFuZ2UgeW91ciBjb2RlIGFjY29yZGluZ2x5LmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBsaXN0RWxlbWVudElzT2ZXcm9uZ1R5cGUgPSAoXG4gIHZhbHVlOiBhbnlbXSxcbiAgcG9zaXRpb246IG51bWJlcixcbiAgZXJyb3I6IHVua25vd24sXG4pID0+XG4gIG5ldyBFcnJvcihcbiAgICBgRWxlbWVudCBpbiBsaXN0ICR7dmFsdWV9IGF0IHBvc2l0aW9uICR7cG9zaXRpb259IGlzIG5vdCB0aGUgcmlnaHQgdHlwZTogJHtlcnJvcn0uXG4gICAgUGxlYXNlIGVuc3VyZSBhbGwgZWxlbWVudHMgaW4gdGhlIGxpc3QgYXJlIHRoZSBjb3JyZWN0IHR5cGUgZm9yIHRoaXMgZnVuY3Rpb24uYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uUmVjZWl2ZWRXcm9uZ051bWJlck9mQXJncyA9IChcbiAgbmFtZTogc3RyaW5nLFxuICBhcmdWYWxpZGF0b3JzTGVuZ3RoOiBudW1iZXIsXG4gIGFyZ3NMZW5ndGg6IG51bWJlcixcbikgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBGdW5jdGlvbiAke25hbWV9IHRha2VzICR7YXJnVmFsaWRhdG9yc0xlbmd0aH0gYXJndW1lbnRzLCBidXQgJHthcmdzTGVuZ3RofSB3ZXJlIHByb3ZpZGVkLiBQbGVhc2UgYWRkIHRoZSBtaXNzaW5nIGFyZ3VtZW50cyB0byB0aGUgZnVuY3Rpb24uYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uQXJndW1lbnRWYWxpZGF0aW9uRmFpbHVyZSA9IChcbiAgYXJnTnVtYmVyOiBudW1iZXIsXG4gIG5hbWU6IHN0cmluZyxcbiAgZXJyb3I6IHVua25vd24sXG4pID0+XG4gIG5ldyBFcnJvcihcbiAgICBgQXJndW1lbnQgJHthcmdOdW1iZXJ9IG9mICR7bmFtZX0gZmFpbGVkIHRoZSB2YWxpZGF0aW9uOiAke2Vycm9yfS4gUGxlYXNlIGNoYW5nZSB5b3VyIGNvZGUgdG8gcGFzcyBhIHZhbGlkIHZhbHVlIGZvciB0aGlzIGFyZ3VtZW50LmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBjYW5ub3RDYWxjSWRGb3JFbXB0eVNldE9mQ29tcG9uZW50cyA9ICgpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgVW5hYmxlIHRvIGNhbGN1bGF0ZSBhIHVuaXF1ZSBpZCBmb3IgYW4gZW1wdHkgc2V0IG9mIGNvbXBvbmVudHMuXG5cbiAgICBUaGlzIGhhcHBlbnMgd2hlbiB5b3UgYXR0ZW1wdCB0byBjcmVhdGUgYSB1bmlxdWUgaWQsIGJ1dCBkbyBub3QgcGFzcyBpbiBhbnkgY29uc3RydWN0IG5vZGUgaWRzLiBUaGlzIG1lYW5zIHlvdXIgY29uc3RydWN0IGxpa2VseSBoYXMgbm8gcGFyZW50LCB3aGljaCBpcyBub3QgYWxsb3dlZC5cblxuICAgIFBsZWFzZSBtYWtlIHN1cmUgeW91ciBjb25zdHJ1Y3QgaGFzIGEgcGFyZW50LiBGb3IgZXhhbXBsZTogJ25ldyBBcHAodGhpcyknIG9yICduZXcgVGVycmFmb3JtU3RhY2sodGhpcywgJ3N0YWNrJyknLmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBzdHJpbmdWYWx1ZUFkZGVkVG9SZWZlcmVuY2VMaXN0ID0gKGxpc3RUb2tlbjogc3RyaW5nW10pID0+XG4gIG5ldyBFcnJvcihcbiAgICBgQ2Fubm90IGFkZCBlbGVtZW50cyB0byBsaXN0IHRva2VuLCBnb3Q6ICR7bGlzdFRva2VufS5cblxuICAgIFdlIGV4cGVjdCB0aGUgZWxlbWVudHMgb2YgYSB0b2tlbml6ZWQgc3RyaW5nIGFycmF5IHRvIGJlIGEgc2luZ2xlIHRva2VuIHN0cmluZy4gRm9yIGV4YW1wbGUsIFtcIiZ7VGZUb2tlbltUb2tlbi4xXX1cIl0uXG5cbiAgICBPbmUgZWxlbWVudCBpbiB5b3VyIGFycmF5IGNvbnNpc3RzIG9mIG1vcmUgdGhhbiBhIHNpbmdsZSB2YWx1ZS4gVG8gYWRkIHZhbHVlcyB0byBhIHRva2VuaXplZCBsaXN0LCB1c2UgVGVycmFmb3JtIGZ1bmN0aW9ucyBpbnN0ZWFkLiBGb3IgZXhhbXBsZTogJ0ZuLmNvbmNhdChbeW91clJlZmVyZW5jZWRMaXN0LCBbXCJteVwiLCBcIm5ld1wiLCBcIml0ZW1zXCJdXSknLmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBjYW5ub3RDb25jYXRlbmF0ZVN0cmluZ3NJblRva2VuaXplZFN0cmluZ0FycmF5ID0gKFxuICBsaXN0VG9rZW46IHN0cmluZyxcbikgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBDYW5ub3QgY29uY2F0ZW5hdGUgc3RyaW5ncyBpbiBhIHRva2VuaXplZCBzdHJpbmcgYXJyYXksIGdvdDogJHtsaXN0VG9rZW59LlxuXG4gICAgV2UgZXhwZWN0IHRoZSBlbGVtZW50cyBvZiBhIHRva2VuaXplZCBzdHJpbmcgYXJyYXkgdG8gYmUgYSBzaW5nbGUgdG9rZW4gc3RyaW5nLiBGb3IgZXhhbXBsZSwgW1wiJntUZlRva2VuW1Rva2VuLjFdfVwiXS4gT25lIGVsZW1lbnQgaW4geW91ciBhcnJheSBjb25zaXN0cyBvZiBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIHNpbmdsZSB0b2tlbi5cblxuICAgIFlvdSBhcmUgbGlrZWx5IG11dGF0aW5nIHRoZSB2YWx1ZSBpbnNpZGUgeW91ciBhcnJheSwgd2hpY2ggQ0RLVE4gY2Fubm90IHJlc29sdmUgaW50byB0aGUgYXBwcm9wcmlhdGUgcnVudGltZSB2YWx1ZS5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgbnVtYmVyVmFsdWVBZGRlZFRvUmVmZXJlbmNlTGlzdCA9IChsaXN0VG9rZW46IG51bWJlcltdKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYENhbm5vdCBhZGQgZWxlbWVudHMgdG8gbGlzdCB0b2tlbiwgZ290OiAke2xpc3RUb2tlbn0uXG5cbiAgICBXZSB1c2UgdG9rZW5zIHRvIHJlcHJlc2VudCBydW50aW1lIHZhbHVlcyAoZS5nLiwgcmVmZXJlbmNlcyB0byBhdHRyaWJ1dGVzIG9mIHJlc291cmNlIG9yIGRhdGEgc291cmNlcykuIExpc3QgdG9rZW5zIGRvbid0IGNvbnRhaW4gdGhlIGFjdHVhbCB2YWx1ZXMgYmVjYXVzZSB0aG9zZSBhcmUgb25seSBhdmFpbGFibGUgYXQgYXBwbHkgdGltZSwgd2hlcmVhcyB0b2tlbnMgYXJlIHByZXNlbnQgZHVyaW5nIGNvbXBpbGUgdGltZS5cblxuICAgIElmIHlvdSB3YW50IHRvIGFkZCBhIHZhbHVlIHRvIGEgdG9rZW5pemVkIGxpc3QsIHVzZSBhIFRlcnJhZm9ybSBmdW5jdGlvbiBpbnN0ZWFkLiBGb3IgZXhhbXBsZTogRm4uY29uY2F0KFt5b3VyUmVmZXJlbmNlZExpc3QsIFs0MiwgNDMsIDQ0XV0pLmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBtYXBWYWx1ZUFkZGVkVG9SZWZlcmVuY2VMaXN0ID0gKG1hcFRva2VuOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgQ2Fubm90IGFkZCBlbGVtZW50cyB0byBtYXAgdG9rZW4sIGdvdDogJHttYXBUb2tlbn0uIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgbWVyZ2UgbXVsdGlwbGUgbWFwcywgb3IgaWYgeW91IGFkZCBhIG5ldyBrZXkgdmFsdWUgcGFpciB0byB0aGUgbWFwIHRva2VuLlxuXG4gICAgV2UgdXNlIHRva2VucyB0byByZXByZXNlbnQgcnVudGltZSB2YWx1ZXMgKGUuZy4sIHJlZmVyZW5jZXMgdG8gYXR0cmlidXRlcyBvZiByZXNvdXJjZSBvciBkYXRhIHNvdXJjZXMpLiBMaXN0IHRva2VucyBkb24ndCBjb250YWluIHRoZSBhY3R1YWwgdmFsdWVzIGJlY2F1c2UgdGhvc2UgYXJlIG9ubHkgYXZhaWxhYmxlIGF0IGFwcGx5IHRpbWUsIHdoZXJlYXMgdG9rZW5zIGFyZSBwcmVzZW50IGR1cmluZyBjb21waWxlIHRpbWUuXG5cbiAgICBJbnN0ZWFkIG9mIGFkZGluZyB0aGUgdmFsdWUgdG8gdGhlIHRva2VuaXplZCBtYXAsIHVzZSBhIFRlcnJhZm9ybSBmdW5jdGlvbi4gRm9yIGV4YW1wbGU6IEZuLm1lcmdlKFt5b3VyUmVmZXJlbmNlZE1hcCwgeyB5b3VyOiAndmFsdWUnIH1dKS4gVGhpcyBjcmVhdGVzIGEgbmV3IG1hcCBUb2tlbiBmb3IgYSB2YWx1ZSwgd2hpY2ggY291bGQgZ2V0IHJlbmRlcmVkIGFzOlxuICAgIG1lcmdlKG15X3Jlc291cmNlLnJlc291cmNlX25hbWUub25lX3NwZWNpZmljX21hcF9hdHRyaWJ1dGUsIHsgeW91cjogJyB2YWx1ZScgfSlgLFxuICApO1xuXG5leHBvcnQgY29uc3QgY2Fubm90Q29uY2F0ZW5hdGVTdHJpbmdzSW5Ub2tlbml6ZWRNYXAgPSAodG9rZW5pemVkTWFwOiBhbnkpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgQ2Fubm90IGNvbmNhdGVuYXRlIHN0cmluZ3MgaW4gYSB0b2tlbml6ZWQgbWFwLCBnb3Q6ICR7dG9rZW5pemVkTWFwfS5cblxuICAgIFdlIGV4cGVjdCB0aGUgZWxlbWVudHMgb2YgYSB0b2tlbml6ZWQgc3RyaW5nIGFycmF5IHRvIGJlIGEgc2luZ2xlIHRva2VuIHN0cmluZy4gRm9yIGV4YW1wbGUsIFtcIiZ7VGZUb2tlbltUb2tlbi4xXX1cIl0uIEEga2V5IGluIHlvdXIgbWFwIGNvbnNpc3RzIG9mIG1vcmUgdGhhbiBhIHN0cmluZyB0b2tlbiAoZS5nLiwgdGhlIFRva2VuIGFuZCBhIHN0YXRpYyBzdHJpbmcgb3IgbXVsdGlwbGUgVG9rZW5zKS5cblxuICAgIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgbXV0YXRlIHRoZSBrZXkgb2YgdGhlIG1hcC4gRG8gbm90IG11dGF0ZSB0b2tlbml6ZWQgTWFwcywgYmVjYXVzZSBpdCBtYWtlcyBpdCBpbXBvc3NpYmxlIGZvciBDREtUTiB0byB0cmFuc2xhdGUgdGhlbS5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgZG9lc05vdEltcGxlbWVudERlcGVuZGFibGVUcmFpdCA9IChpbnN0YW5jZTogSURlcGVuZGFibGUpID0+XG4gIG5ldyBFcnJvcihgJHtpbnN0YW5jZX0gZG9lcyBub3QgaW1wbGVtZW50IERlcGVuZGFibGVUcmFpdGApO1xuXG5leHBvcnQgY29uc3QgY2FuT25seUVuY29kZVBvc2l0aXZlSW50ZWdlcnMgPSAoKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYENhbiBvbmx5IGVuY29kZSBwb3NpdGl2ZSBpbnRlZ2VycyBpbnRvIFRva2Vucy4gVGhpcyBpcyBhIGJ1ZyBpbiBDREtUTiwgcGxlYXNlIGZpbGUgYSBidWcgcmVwb3J0LmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBpbmRleFRvb0xhcmdlVG9FbmNvZGUgPSAoaW5kZXg6IG51bWJlcikgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBSZWNlaXZlZCBhbiBpbmRleCB0b28gbGFyZ2UgdG8gZW5jb2RlIGludG8gYSBUb2tlbiA6JHtpbmRleH0uXG5cbiAgICBUaGlzIGhhcHBlbnMgaWYgeW91IGhhdmUgdG9vIG1hbnkgVG9rZW5zIGluIGEgc2luZ2xlIENES1ROIGFwcGxpY2F0aW9uLiBUaGlzIGNhbiBhbHNvIG9jY3VyIGlmIHlvdSBhcmUgYWNjaWRlbnRhbGx5IGNyZWF0aW5nIG51bWVyaWMgdG9rZW5zIGluIGFuIGluZmluaXRlIGxvb3AuIEZvciBleGFtcGxlLCBjYWxsaW5nICdUb2tlbi5hc051bWJlcigpJyB0b28gbWFueSB0aW1lcy5cblxuICAgIElmIHlvdSByZWFjaCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYWxsb3dlZCBUb2tlbnMgKGEgbGltaXRhdGlvbiBpbXBvc2VkIGJ5IHRoZSB3YXkgd2UgZW5jb2RlIFRva2VucyBhbmQgc2VwYXJhdGUgdGhlbSBmcm9tIHJlYWwgbnVtZXJpYyB2YWx1ZXMpIHlvdSBjYW4gd29yayBhcm91bmQgdGhpcyBpc3N1ZSBieSBkaXZpZGluZyBhIHNpbmdsZSBhcHBsaWNhdGlvbiBpbnRvIG11bHRpcGxlIGFwcGxpY2F0aW9ucy5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgYXJnVG9JbnRyaW5zaWNNdXN0QmVQbGFpblZhbHVlID0gKFxuICB2YWx1ZTogYW55LFxuICBjcmVhdGlvblN0YWNrOiBzdHJpbmdbXSxcbikgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBZb3UgY2FuIG9ubHkgdXNlIGEgcGxhaW4gdmFsdWUgKG5vdCBhIGZ1bmN0aW9uKSB3aGlsZSBjcmVhdGluZyBhbiBJbnRyaW5zaWMgdG9rZW4uIFdlIHJlY2VpdmVkIHRoZSB2YWx1ZSAnJHt2YWx1ZX0nIGNyZWF0ZWQgYXQ6XFxuJHtjcmVhdGlvblN0YWNrLmpvaW4oXG4gICAgICBcIlxcblwiLFxuICAgICl9LiBJZiB5b3Ugd2FudCB0byB1c2UgYSBmdW5jdGlvbiwgcGxlYXNlIHVzZSB0aGUgTGF6eSBjbGFzcy4gRm9yIGV4YW1wbGU6ICBMYXp5LmFueVZhbHVlKHsgcHJvZHVjZTogKCkgPT4gXCJIZWxsbyBXb3JsZFwiIH0pLmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBpbnRyaW5zaWNOZXdFcnJvciA9IChtZXNzYWdlOiBzdHJpbmcsIGNyZWF0ZWRBdDogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoYCR7bWVzc2FnZX1cXG5Ub2tlbiBjcmVhdGVkOlxcbiAgICBhdCAke2NyZWF0ZWRBdH1cXG5FcnJvciB0aHJvd246YCk7XG5cbmV4cG9ydCBjb25zdCB1bmFibGVUb1Jlc29sdmVDaXJjdWxhclJlZmVyZW5jZSA9IChwYXRoTmFtZTogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoYFVuYWJsZSB0byByZXNvbHZlIG9iamVjdCB0cmVlIHdpdGggY2lyY3VsYXIgcmVmZXJlbmNlIGF0ICcke3BhdGhOYW1lfScuXG5cblRoZSBkZXB0aCBvZiB5b3VyIG9iamVjdCB0cmVlIGlzIG92ZXIgMjAwLCBpbmRpY2F0aW5nIHlvdSBwcm9iYWJseSBoYXZlIGEgY3ljbGljYWwgcmVmZXJlbmNlLiBJbnNwZWN0IHRoZSBjb25zdHJ1Y3QgY3JlYXRpbmcgdGhpcyBjeWNsaWMgcmVmZXJlbmNlIChtb3N0IGxpa2VseSBpbiAnJHtwYXRoTmFtZX0nKSBhbmQgZW5zdXJlIGl0IGRvZXMgbm90IGluZmluaXRlbHkgbmVzdCBjb25zdHJ1Y3RzLmApO1xuXG5leHBvcnQgY29uc3QgY2Fubm90UmVzb2x2ZUZ1bmN0aW9uID0gKHBhdGhOYW1lOiBzdHJpbmcsIG9iajogYW55KSA9PlxuICBuZXcgRXJyb3IoYFRyeWluZyB0byByZXNvbHZlIGEgbm9uLWRhdGEgb2JqZWN0IChlLmcuLCBhIGZ1bmN0aW9uKSBhdCAnJHtwYXRoTmFtZX0nOiAke29ian0uIE9ubHkgdG9rZW5zIGFyZSBzdXBwb3J0ZWQgZm9yIGxhenkgZXZhbHVhdGlvbi5cblxuSWYgeW91IHdhbnQgdG8gdXNlIGEgbGF6aWx5IGNvbXB1dGVkIHZhbHVlLCB1c2UgdGhlIExhenkgY2xhc3MuIEZvciBleGFtcGxlOiAgTGF6eS5zdHJpbmdWYWx1ZSh7IHByb2R1Y2U6ICgpID0+IFwiSGVsbG8gV29ybGRcIiB9KWApO1xuXG5jb25zdCBMSVNUX0VSUk9SX0VYUExBTkFUSU9OID0gYEluIENES1ROLCB3ZSByZXByZXNlbnQgbGlzdHMsIHdpdGggdmFsdWVzIHVua25vd24gdW50aWwgYWZ0ZXIgcnVudGltZSwgYXMgYXJyYXlzIHdpdGggYSBzaW5nbGUgZWxlbWVudOKAlCBhIHN0cmluZyB0b2tlbiAoW1wiVG9rZW4uMVwiXSkuXG5cblxuV2UgZG8gdGhpcyBiZWNhdXNlIENES1ROIGRvZXMgbm90IGtub3cgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBhdCBjb21waWxlIHRpbWUsIG1lYW5pbmcgQ0RLVE4gaGFzIHlldCB0byBpbnZva2UgVGVycmFmb3JtIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGNsb3VkIHByb3ZpZGVyLiBDREtUTiBsYXRlciBpbnZva2VzIFRlcnJhZm9ybSBvbiB0aGUgc3ludGhlc2l6ZWQgc3RhdGljIEpTT04gZmlsZS5cblxuQmVjYXVzZSB3ZSBkb24ndCBrbm93IHRoZSBsZW5ndGggb2YgdGhlIGxpc3QsIHdlIGNhbiBub3QgZGlmZmVyZW50aWF0ZSBpZiB0aGUgbGlzdCB3YXMgYWNjZXNzZWQgYXQgdGhlIGZpcnN0IG9yIGxhc3QgaW5kZXgsIG9yIGFzIHBhcnQgb2YgYSBsb29wLiBUbyBhdm9pZCB0aGlzIGFtYmlndWl0eTpcblxuLSBJZiB5b3Ugd2FudCB0byBhY2Nlc3MgYSBzaW5ndWxhciBpdGVtLCB1c2UgJ0ZuLmVsZW1lbnQobGlzdCwgMCknLiBEbyBub3QgdXNlICdsaXN0WzBdJy5cbi0gSWYgeW91IHdhbnQgdG8gbG9vcCBvdmVyIHRoZSBsaXN0IHVzZSAnVGVycmFmb3JtSXRlcmF0b3IuZnJvbUxpc3QobGlzdCknLiBEbyBub3QgdXNlIGEgJ2Zvcicgb3IgJ2ZvckVhY2gnIGxvb3AuXG5cbkxlYXJuIG1vcmUgYWJvdXQgdG9rZW5zOiBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvdG9rZW5zXG5MZWFybiBtb3JlIGFib3V0IGl0ZXJhdG9yczogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL2NvbmNlcHRzL2l0ZXJhdG9yc2A7XG5cbmNvbnN0IE1BUF9FUlJPUl9FWFBMQU5BVElPTiA9IGBcbkluIENES1ROLCB3ZSByZXByZXNlbnQgbWFwcywgd2l0aCB2YWx1ZXMgdW5rbm93biB1bnRpbCBhZnRlciBydW50aW1lLCBhcyBvYmplY3RzIHdpdGggYSBzaW5nbGUga2V5LXZhbHVlIHBhaXIgd2hlcmUgdGhlIHZhbHVlIGlzIGEgc3RyaW5nIHRva2VuLiBGb3IgZXhhbXBsZTogJ3sgXCIme1RmVG9rZW5bVG9rZW4uMV19XCI6IFwiU3RyaW5nIE1hcCBUb2tlbiBWYWx1ZVwiIH0nLlxuXG5XZSBkbyB0aGlzIGJlY2F1c2UgQ0RLVE4gZG9lcyBub3Qga25vdyB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGF0IGNvbXBpbGUgdGltZSwgbWVhbmluZyBDREtUTiBoYXMgeWV0IHRvIGludm9rZSBUZXJyYWZvcm0gdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgY2xvdWQgcHJvdmlkZXIuIENES1ROIGxhdGVyIGludm9rZXMgVGVycmFmb3JtIG9uIHRoZSBzeW50aGVzaXplZCBzdGF0aWMgSlNPTiBmaWxlLlxuXG5CZWNhdXNlIHdlIGRvbid0IGtub3cgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAsIHdlIGNhbiBub3QgZGlmZmVyZW50aWF0ZSBpZiB0aGUgbWFwIHdhcyBhY2Nlc3NlZCwgb3IgdXNlZCBhcyBwYXJ0IG9mIGEgbG9vcC4gVG8gYXZvaWQgdGhpcyBhbWJpZ3VpdHk6XG5cbi0gVG8gYWNjZXNzIGEgc2luZ3VsYXIgaXRlbSB1c2UgJ0ZuLmxvb2t1cChtYXAsIGtleSknLiBEbyBub3QgdXNlICdtYXBba2V5XScuXG4tIElmIHlvdSB3YW50IHRvIGxvb3Agb3ZlciB0aGUgbWFwIHVzZSAnVGVycmFmb3JtSXRlcmF0b3IuZnJvbU1hcChtYXApJy4gRG8gbm90IHVzZSBhICdmb3InIGxvb3Agb3IgaXRlcmF0ZSBvdmVyICdPYmplY3QuZW50cmllcyhtYXApJyB3aXRoICdmb3JFYWNoJy5cblxuTGVhcm4gbW9yZSBhYm91dCB0b2tlbnM6IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy90b2tlbnNcbkxlYXJuIG1vcmUgYWJvdXQgaXRlcmF0b3JzOiBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvaXRlcmF0b3JzYDtcblxuZXhwb3J0IGNvbnN0IGVuY29kZWRMaXN0VG9rZW5JblNjYWxhclN0cmluZ0NvbnRleHQgPSAoKSA9PlxuICBuZXcgRXJyb3IoYEZvdW5kIGFuIGVuY29kZWQgbGlzdCB0b2tlbiBzdHJpbmcgaW4gYSBzY2FsYXIgc3RyaW5nIGNvbnRleHQuXG4ke0xJU1RfRVJST1JfRVhQTEFOQVRJT059YCk7XG5cbmV4cG9ydCBjb25zdCBlbmNvZGVkTWFwVG9rZW5JblNjYWxhclN0cmluZ0NvbnRleHQgPSAoKSA9PlxuICBuZXcgRXJyb3IoYEZvdW5kIGFuIGVuY29kZWQgbWFwIHRva2VuIGluIGEgc2NhbGFyIHN0cmluZyBjb250ZXh0LlxuJHtNQVBfRVJST1JfRVhQTEFOQVRJT059YCk7XG5cbmV4cG9ydCBjb25zdCBlbmNvZGVkTWFwVG9rZW5JblNjYWxhck51bWJlckNvbnRleHQgPSAoKSA9PlxuICBuZXcgRXJyb3IoYEZvdW5kIGFuIGVuY29kZWQgbWFwIHRva2VuIGluIGEgc2NhbGFyIG51bWJlciBjb250ZXh0LlxuJHtNQVBfRVJST1JfRVhQTEFOQVRJT059YCk7XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RzQ2Fubm90QmVSZXNvbHZlZCA9IChwYXRoTmFtZTogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoYFRyeWluZyB0byAncmVzb2x2ZSgpJyBhIENvbnN0cnVjdCBhdCAnJHtwYXRoTmFtZX0nLlxuXG5UaGlzIG9mdGVuIG1lYW5zIGFuIHVuaW50ZW5kZWQgY3ljbGljIGRlcGVuZGVuY3kgaW4geW91ciBjb25zdHJ1Y3QgdHJlZSwgbGVhZGluZyB0byB0aGUgcmVzb2x1dGlvbiBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wIHRoYXQgZmFpbHMuXG5UaGlzIGNhbiBoYXBwZW4gaWYgdGhlIHNjb3BlIHBhc3NlZCBpbnRvIHRoaXMgY29uc3RydWN0IGlzIGFsc28gcGFydCBvZiBpdHMgc3VidHJlZS5cblxuVG8gcmVzb2x2ZSB0aGlzIGlzc3VlLCByZWZhY3RvciB5b3VyIGNvZGUgdG8gYXZvaWQgdGhpcyBjeWNsaWMgZGVwZW5kZW5jeSBieSBjaGFuZ2luZyB0aGUgc2NvcGUgb2YgdGhpcyBjb25zdHJ1Y3QuYCk7XG5cbmV4cG9ydCBjb25zdCBtYXBLZXlNdXN0UmVzb2x2ZVRvU3RyaW5nID0gKFxuICBwYXRoTmFtZTogc3RyaW5nLFxuICBrZXk6IHN0cmluZyxcbiAgcmVzb2x2ZWRLZXk6IGFueSxcbikgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBBdCBcIiR7cGF0aE5hbWV9XCIgYSBtYXAgdXNlcyB0aGUga2V5IFwiJHtrZXl9XCIsIG1lYW5pbmcgdGhhdCBrZXkgbXVzdCByZXNvbHZlIHRvIGEgc3RyaW5nLiBIb3dldmVyLCBpdCByZXNvbHZlcyB0byBhICR7dHlwZW9mIHJlc29sdmVkS2V5fSB3aXRoIHRoZSB2YWx1ZSAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgcmVzb2x2ZWRLZXksXG4gICAgKX0uIFRvIGZpeCB0aGlzLCBjaGFuZ2UgdGhlIFRva2VuIHRvIHJlc29sdmUgdG8gYSBzdHJpbmcuYCxcbiAgKTtcblxuY29uc3QgdW5rbm93blRva2VuRXhwbGFuYXRpb24gPSBgVGhpcyBtZWFucyB5b3UgYXJlIHRyeWluZyB0byBhY2Nlc3MgYSBUb2tlbiB2YWx1ZSB0aGF0IGRvZXMgbm90IGV4aXN0LiBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpZiB0aGUgVG9rZW4gaXMgZnJvbSBhbm90aGVyIENESyAoaS5lLiwgQVdTIENESywgQ0RLOHMsIGV0Yy4pIGFuZCBpcyB1bmtub3duIHRvIHRoaXMgQ0RLVE4gQXBwbGljYXRpb24uIFlvdSBlaXRoZXIgbmVlZCB0byBtYWtlIHRoZSBvdGhlciBDREsgcmVzb2x2ZSB0aGlzIFRva2VuIGJlZm9yZSBDREtUTiB0cmllcyB0byByZXNvbHZlIGl0LCBvciB3b3JrIGFyb3VuZCB1c2luZyB0aGlzIFRva2VuIGF0IGFsbC5cblxuSWYgdGhpcyBlcnJvciBvY2N1cnMgd2l0aG91dCBhbm90aGVyIENESyAob3IgYSB2YWx1ZSBsb29raW5nIGxpa2UgYSBUb2tlbikgaW52b2x2ZWQsIHBsZWFzZSBmaWxlIGEgYnVnLmA7XG5cbmV4cG9ydCBjb25zdCB1bmtub3duTnVtYmVyVG9rZW5Gb3VuZCA9ICgpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgRW5jb2RlZCByZXByZXNlbnRhdGlvbiBvZiB1bmtub3duIG51bWJlciBUb2tlbiBmb3VuZC4gJHt1bmtub3duVG9rZW5FeHBsYW5hdGlvbn1gLFxuICApO1xuXG5leHBvcnQgY29uc3QgdW5yZWNvZ25pemVkVG9rZW5LZXkgPSAoa2V5OiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIFRva2VuIEtleSAnJHtrZXl9Jy4gJHt1bmtub3duVG9rZW5FeHBsYW5hdGlvbn1gKTtcblxuZXhwb3J0IGNvbnN0IElkSW5jbHVkZXNVbnJlc29sdmVkVG9rZW5zID0gKHVucmVzb2x2ZWRUb2tlbnM6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBUaGlzIGNvbnN0cnVjdCAob3IgaXRzIHBhcmVudCBjb25zdHJ1Y3QpIGlzIGNvbmZpZ3VyZWQgd2l0aCBhbiBJRCB0aGF0IGNvbnRhaW5zIGEgVG9rZW46ICR7dW5yZXNvbHZlZFRva2Vuc30uIFRoaXMgaXMgbm90IGFsbG93ZWQgYmVjYXVzZSBJRHMgbXVzdCBiZSBrbm93biBzdGF0aWNhbGx5IGR1cmluZyBzeW50aGVzaXMuIFRva2VuIHZhbHVlcyBhcmUgb25seSBrbm93biBkdXJpbmcgdGhlIGFwcGx5IHN0YWdlLCB0aGVyZWZvcmUgdGhleSBjYW5ub3QgYmUgdXNlZCBpbiBJRHMuIFBsZWFzZSB1c2UgYSBjb25jcmV0ZSB2YWx1ZSBmb3IgeW91ciBjb25zdHJ1Y3RzIElEIGluc3RlYWQuYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGFzc2V0Q2FuTm90Q3JlYXRlWmlwQXJjaGl2ZSA9IChcbiAgc3JjOiBzdHJpbmcsXG4gIGRlc3Q6IHN0cmluZyxcbiAgZXJyb3I6IEVycm9yLFxuKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYEEgVGVycmFmb3JtQXNzZXQgdHJ5aW5nIHRvIHppcCBhcmNoaXZlICcke3NyY30nIGludG8gJHtkZXN0fSBmYWlsZWQ6ICR7ZXJyb3J9YCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IHRlcnJhZm9ybU1vZHVsZUhhc0NoaWxkcmVuID0gKHBhdGhOYW1lOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICBgVHJ5aW5nIHRvIGFkZCBjaGlsZHJlbiB0byBhIFRlcnJhZm9ybU1vZHVsZSBhdCAnJHtwYXRoTmFtZX0nLiBUZXJyYWZvcm1Nb2R1bGVzIGNhbm5vdCBoYXZlIGNoaWxkcmVuLCBpZiB5b3Ugd2FudCB0byBncm91cCByZXNvdXJjZXMgb3IgY29uc3RydWN0cyBpbiBnZW5lcmFsIHRvZ2V0aGVyIHBsZWFzZSB1c2UgdGhlIENvbnN0cnVjdHMgY2xhc3MgaW5zdGVhZC4gU2VlIGh0dHBzOi8vY2RrLnRmL2NvbnN0cnVjdHMgZm9yIG1vcmUgZGV0YWlscy5gLFxuICApO1xufTtcbiJdfQ==
|