@aws-cdk/aws-medialive-alpha 2.268.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/.jsii +60888 -0
  2. package/.jsii.tabl.json.gz +0 -0
  3. package/.warnings.jsii.js +524 -0
  4. package/LICENSE +201 -0
  5. package/NOTICE +2 -0
  6. package/README.md +1297 -0
  7. package/grants.json +27 -0
  8. package/lib/audio-codec-settings.d.ts +901 -0
  9. package/lib/audio-codec-settings.js +1098 -0
  10. package/lib/audio-selector.d.ts +170 -0
  11. package/lib/audio-selector.js +306 -0
  12. package/lib/avail-settings.d.ts +231 -0
  13. package/lib/avail-settings.js +226 -0
  14. package/lib/caption-selector.d.ts +234 -0
  15. package/lib/caption-selector.js +413 -0
  16. package/lib/caption-settings.d.ts +349 -0
  17. package/lib/caption-settings.js +482 -0
  18. package/lib/channel-features.d.ts +106 -0
  19. package/lib/channel-features.js +85 -0
  20. package/lib/channel-placement-group.d.ts +73 -0
  21. package/lib/channel-placement-group.js +132 -0
  22. package/lib/channel.d.ts +687 -0
  23. package/lib/channel.js +1096 -0
  24. package/lib/cluster.d.ts +129 -0
  25. package/lib/cluster.js +158 -0
  26. package/lib/color-correction.d.ts +39 -0
  27. package/lib/color-correction.js +29 -0
  28. package/lib/destinations.d.ts +242 -0
  29. package/lib/destinations.js +455 -0
  30. package/lib/encode-configuration.d.ts +615 -0
  31. package/lib/encode-configuration.js +629 -0
  32. package/lib/enums.d.ts +698 -0
  33. package/lib/enums.js +1045 -0
  34. package/lib/file-location.d.ts +65 -0
  35. package/lib/file-location.js +150 -0
  36. package/lib/framerate.d.ts +31 -0
  37. package/lib/framerate.js +71 -0
  38. package/lib/index.d.ts +26 -0
  39. package/lib/index.js +43 -0
  40. package/lib/input-attachment.d.ts +319 -0
  41. package/lib/input-attachment.js +228 -0
  42. package/lib/input-security-group.d.ts +51 -0
  43. package/lib/input-security-group.js +123 -0
  44. package/lib/input-specification.d.ts +111 -0
  45. package/lib/input-specification.js +181 -0
  46. package/lib/input.d.ts +505 -0
  47. package/lib/input.js +803 -0
  48. package/lib/m2ts-settings.d.ts +421 -0
  49. package/lib/m2ts-settings.js +469 -0
  50. package/lib/m3u8-settings.d.ts +272 -0
  51. package/lib/m3u8-settings.js +304 -0
  52. package/lib/medialive-grants.generated.d.ts +30 -0
  53. package/lib/medialive-grants.generated.js +92 -0
  54. package/lib/network.d.ts +83 -0
  55. package/lib/network.js +132 -0
  56. package/lib/output-group.d.ts +924 -0
  57. package/lib/output-group.js +941 -0
  58. package/lib/outputs.d.ts +304 -0
  59. package/lib/outputs.js +598 -0
  60. package/lib/sdi-source.d.ts +124 -0
  61. package/lib/sdi-source.js +180 -0
  62. package/lib/shared.d.ts +44 -0
  63. package/lib/shared.js +146 -0
  64. package/lib/video-codec-settings.d.ts +1500 -0
  65. package/lib/video-codec-settings.js +1722 -0
  66. package/lib/video-selection.d.ts +92 -0
  67. package/lib/video-selection.js +95 -0
  68. package/package.json +135 -0
  69. package/rosetta/_generated.ts-fixture +6 -0
  70. package/rosetta/default.ts-fixture +21 -0
@@ -0,0 +1,1722 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.H265Tier = exports.H265Profile = exports.H265FilterSettings = exports.H264FilterSettings = exports.BandwidthReductionStrength = exports.BandwidthReductionPostFilterSharpening = exports.TemporalFilterStrength = exports.TemporalFilterPostFilterSharpening = exports.Av1ColorSpaceSettings = exports.H265ColorSpaceSettings = exports.H264ColorSpaceSettings = exports.Av1RateControl = exports.H265RateControl = exports.H264RateControl = exports.TimecodeBurninPosition = exports.TimecodeBurninFontSize = exports.Av1TimecodeInsertion = exports.H265SceneChangeDetect = exports.H264TemporalAq = exports.H264SpatialAq = exports.H264SceneChangeDetect = exports.Av1TemporalAq = exports.Av1SpatialAq = exports.Av1SceneChangeDetect = exports.Av1BitDepth = exports.H265TreeblockSize = exports.H265TilePadding = exports.H265MvTemporalPredictor = exports.H265MvOverPictureBoundaries = exports.H265Deblocking = exports.H265AlternativeTransferFunction = exports.H265AdaptiveQuantization = exports.H264QualityLevel = exports.H264Syntax = exports.H264ForceFieldPictures = exports.H264EntropyEncoding = exports.SubgopLength = exports.TimecodeInsertion = exports.LookAheadRateControl = exports.GopBReference = exports.FlickerAq = exports.ScanType = exports.ColorMetadata = exports.AfdSignaling = exports.GopSize = exports.H264AdaptiveQuantization = exports.Av1Level = exports.H265Level = exports.H264Level = exports.H264Profile = void 0;
4
+ exports.VideoCodecSettings = exports.VideoCodecType = void 0;
5
+ const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
6
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
7
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
8
+ const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
9
+ const shared_1 = require("./shared");
10
+ /**
11
+ * H.264 profile.
12
+ */
13
+ class H264Profile {
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264Profile", version: "2.268.0-alpha.0" };
15
+ /** Baseline profile */
16
+ static BASELINE = new H264Profile('BASELINE');
17
+ /** Main profile */
18
+ static MAIN = new H264Profile('MAIN');
19
+ /** High profile */
20
+ static HIGH = new H264Profile('HIGH');
21
+ /** High 10-bit profile */
22
+ static HIGH_10BIT = new H264Profile('HIGH_10BIT');
23
+ /** High 4:2:2 profile */
24
+ static HIGH_422 = new H264Profile('HIGH_422');
25
+ /** High 4:2:2 10-bit profile */
26
+ static HIGH_422_10BIT = new H264Profile('HIGH_422_10BIT');
27
+ /** A value not yet modelled by AWS CDK. */
28
+ static of(value) {
29
+ return new H264Profile(value);
30
+ }
31
+ /** The underlying string value passed to CloudFormation. */
32
+ value;
33
+ constructor(value) {
34
+ this.value = value;
35
+ }
36
+ }
37
+ exports.H264Profile = H264Profile;
38
+ /**
39
+ * H.264 level.
40
+ */
41
+ class H264Level {
42
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264Level", version: "2.268.0-alpha.0" };
43
+ /** Level 1 */
44
+ static H264_LEVEL_1 = new H264Level('H264_LEVEL_1');
45
+ /** Level 1.1 */
46
+ static H264_LEVEL_1_1 = new H264Level('H264_LEVEL_1_1');
47
+ /** Level 1.2 */
48
+ static H264_LEVEL_1_2 = new H264Level('H264_LEVEL_1_2');
49
+ /** Level 1.3 */
50
+ static H264_LEVEL_1_3 = new H264Level('H264_LEVEL_1_3');
51
+ /** Level 2 */
52
+ static H264_LEVEL_2 = new H264Level('H264_LEVEL_2');
53
+ /** Level 2.1 */
54
+ static H264_LEVEL_2_1 = new H264Level('H264_LEVEL_2_1');
55
+ /** Level 2.2 */
56
+ static H264_LEVEL_2_2 = new H264Level('H264_LEVEL_2_2');
57
+ /** Level 3 */
58
+ static H264_LEVEL_3 = new H264Level('H264_LEVEL_3');
59
+ /** Level 3.1 */
60
+ static H264_LEVEL_3_1 = new H264Level('H264_LEVEL_3_1');
61
+ /** Level 3.2 */
62
+ static H264_LEVEL_3_2 = new H264Level('H264_LEVEL_3_2');
63
+ /** Level 4 */
64
+ static H264_LEVEL_4 = new H264Level('H264_LEVEL_4');
65
+ /** Level 4.1 */
66
+ static H264_LEVEL_4_1 = new H264Level('H264_LEVEL_4_1');
67
+ /** Level 4.2 */
68
+ static H264_LEVEL_4_2 = new H264Level('H264_LEVEL_4_2');
69
+ /** Level 5 */
70
+ static H264_LEVEL_5 = new H264Level('H264_LEVEL_5');
71
+ /** Level 5.1 */
72
+ static H264_LEVEL_5_1 = new H264Level('H264_LEVEL_5_1');
73
+ /** Level 5.2 */
74
+ static H264_LEVEL_5_2 = new H264Level('H264_LEVEL_5_2');
75
+ /** Auto-select the level based on the encode configuration */
76
+ static H264_LEVEL_AUTO = new H264Level('H264_LEVEL_AUTO');
77
+ /** A value not yet modelled by AWS CDK. */
78
+ static of(value) {
79
+ return new H264Level(value);
80
+ }
81
+ /** The underlying string value passed to CloudFormation. */
82
+ value;
83
+ constructor(value) {
84
+ this.value = value;
85
+ }
86
+ }
87
+ exports.H264Level = H264Level;
88
+ /**
89
+ * H.265 level.
90
+ */
91
+ class H265Level {
92
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265Level", version: "2.268.0-alpha.0" };
93
+ /** Level 1 */
94
+ static H265_LEVEL_1 = new H265Level('H265_LEVEL_1');
95
+ /** Level 2 */
96
+ static H265_LEVEL_2 = new H265Level('H265_LEVEL_2');
97
+ /** Level 2.1 */
98
+ static H265_LEVEL_2_1 = new H265Level('H265_LEVEL_2_1');
99
+ /** Level 3 */
100
+ static H265_LEVEL_3 = new H265Level('H265_LEVEL_3');
101
+ /** Level 3.1 */
102
+ static H265_LEVEL_3_1 = new H265Level('H265_LEVEL_3_1');
103
+ /** Level 4 */
104
+ static H265_LEVEL_4 = new H265Level('H265_LEVEL_4');
105
+ /** Level 4.1 */
106
+ static H265_LEVEL_4_1 = new H265Level('H265_LEVEL_4_1');
107
+ /** Level 5 */
108
+ static H265_LEVEL_5 = new H265Level('H265_LEVEL_5');
109
+ /** Level 5.1 */
110
+ static H265_LEVEL_5_1 = new H265Level('H265_LEVEL_5_1');
111
+ /** Level 5.2 */
112
+ static H265_LEVEL_5_2 = new H265Level('H265_LEVEL_5_2');
113
+ /** Level 6 */
114
+ static H265_LEVEL_6 = new H265Level('H265_LEVEL_6');
115
+ /** Level 6.1 */
116
+ static H265_LEVEL_6_1 = new H265Level('H265_LEVEL_6_1');
117
+ /** Level 6.2 */
118
+ static H265_LEVEL_6_2 = new H265Level('H265_LEVEL_6_2');
119
+ /** Auto-select the level based on the encode configuration */
120
+ static H265_LEVEL_AUTO = new H265Level('H265_LEVEL_AUTO');
121
+ /** A value not yet modelled by AWS CDK. */
122
+ static of(value) {
123
+ return new H265Level(value);
124
+ }
125
+ /** The underlying string value passed to CloudFormation. */
126
+ value;
127
+ constructor(value) {
128
+ this.value = value;
129
+ }
130
+ }
131
+ exports.H265Level = H265Level;
132
+ /**
133
+ * AV1 level.
134
+ */
135
+ class Av1Level {
136
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.Av1Level", version: "2.268.0-alpha.0" };
137
+ /** Level 2 */
138
+ static AV1_LEVEL_2 = new Av1Level('AV1_LEVEL_2');
139
+ /** Level 2.1 */
140
+ static AV1_LEVEL_2_1 = new Av1Level('AV1_LEVEL_2_1');
141
+ /** Level 3 */
142
+ static AV1_LEVEL_3 = new Av1Level('AV1_LEVEL_3');
143
+ /** Level 3.1 */
144
+ static AV1_LEVEL_3_1 = new Av1Level('AV1_LEVEL_3_1');
145
+ /** Level 4 */
146
+ static AV1_LEVEL_4 = new Av1Level('AV1_LEVEL_4');
147
+ /** Level 4.1 */
148
+ static AV1_LEVEL_4_1 = new Av1Level('AV1_LEVEL_4_1');
149
+ /** Level 5 */
150
+ static AV1_LEVEL_5 = new Av1Level('AV1_LEVEL_5');
151
+ /** Level 5.1 */
152
+ static AV1_LEVEL_5_1 = new Av1Level('AV1_LEVEL_5_1');
153
+ /** Level 5.2 */
154
+ static AV1_LEVEL_5_2 = new Av1Level('AV1_LEVEL_5_2');
155
+ /** Level 5.3 */
156
+ static AV1_LEVEL_5_3 = new Av1Level('AV1_LEVEL_5_3');
157
+ /** Level 6 */
158
+ static AV1_LEVEL_6 = new Av1Level('AV1_LEVEL_6');
159
+ /** Level 6.1 */
160
+ static AV1_LEVEL_6_1 = new Av1Level('AV1_LEVEL_6_1');
161
+ /** Level 6.2 */
162
+ static AV1_LEVEL_6_2 = new Av1Level('AV1_LEVEL_6_2');
163
+ /** Level 6.3 */
164
+ static AV1_LEVEL_6_3 = new Av1Level('AV1_LEVEL_6_3');
165
+ /** Auto-select the level based on the encode configuration */
166
+ static AV1_LEVEL_AUTO = new Av1Level('AV1_LEVEL_AUTO');
167
+ /** A value not yet modelled by AWS CDK. */
168
+ static of(value) {
169
+ return new Av1Level(value);
170
+ }
171
+ /** The underlying string value passed to CloudFormation. */
172
+ value;
173
+ constructor(value) {
174
+ this.value = value;
175
+ }
176
+ }
177
+ exports.Av1Level = Av1Level;
178
+ /**
179
+ * H.264 adaptive quantization strength.
180
+ */
181
+ class H264AdaptiveQuantization {
182
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264AdaptiveQuantization", version: "2.268.0-alpha.0" };
183
+ /** Auto */
184
+ static AUTO = new H264AdaptiveQuantization('AUTO');
185
+ /** High */
186
+ static HIGH = new H264AdaptiveQuantization('HIGH');
187
+ /** Higher */
188
+ static HIGHER = new H264AdaptiveQuantization('HIGHER');
189
+ /** Low */
190
+ static LOW = new H264AdaptiveQuantization('LOW');
191
+ /** Max */
192
+ static MAX = new H264AdaptiveQuantization('MAX');
193
+ /** Medium */
194
+ static MEDIUM = new H264AdaptiveQuantization('MEDIUM');
195
+ /** Off */
196
+ static OFF = new H264AdaptiveQuantization('OFF');
197
+ /** A value not yet modelled by AWS CDK. */
198
+ static of(value) {
199
+ return new H264AdaptiveQuantization(value);
200
+ }
201
+ /** The underlying string value passed to CloudFormation. */
202
+ value;
203
+ constructor(value) {
204
+ this.value = value;
205
+ }
206
+ }
207
+ exports.H264AdaptiveQuantization = H264AdaptiveQuantization;
208
+ /**
209
+ * GOP size (keyframe interval). Use the static factory methods to specify in frames or seconds.
210
+ *
211
+ * The value must be greater than zero. When expressed in frames it must be a whole number;
212
+ * when expressed in seconds it may be fractional.
213
+ */
214
+ class GopSize {
215
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.GopSize", version: "2.268.0-alpha.0" };
216
+ /** GOP size in seconds. May be fractional (e.g. `1.5`). */
217
+ static seconds(value) {
218
+ return new GopSize(value, 'SECONDS');
219
+ }
220
+ /** GOP size in frames. Must be a whole number. */
221
+ static frames(value) {
222
+ return new GopSize(value, 'FRAMES');
223
+ }
224
+ /** @internal */
225
+ _value;
226
+ /** @internal */
227
+ _units;
228
+ constructor(value, units) {
229
+ // MediaLive requires gopSize > 0 for both units. When the unit is FRAMES the value
230
+ // must be a whole number (a fractional frame is meaningless); SECONDS may be
231
+ // fractional. See the H264/H265/AV1/MPEG-2 gopSize docs ("must be greater than zero";
232
+ // frames are converted to a frame count at runtime).
233
+ if (!aws_cdk_lib_1.Token.isUnresolved(value)) {
234
+ if (value <= 0) {
235
+ throw new aws_cdk_lib_1.UnscopedValidationError((0, helpers_internal_1.lit) `GopSize`, `GOP size must be greater than zero, got ${JSON.stringify(value)}`);
236
+ }
237
+ if (units === 'FRAMES' && !Number.isInteger(value)) {
238
+ throw new aws_cdk_lib_1.UnscopedValidationError((0, helpers_internal_1.lit) `GopSizeFrames`, `GOP size in frames must be a whole number, got ${JSON.stringify(value)}`);
239
+ }
240
+ }
241
+ this._value = value;
242
+ this._units = units;
243
+ }
244
+ }
245
+ exports.GopSize = GopSize;
246
+ // =============================================================================
247
+ // Shared enums (used by multiple codecs)
248
+ // =============================================================================
249
+ /**
250
+ * AFD signaling mode.
251
+ */
252
+ class AfdSignaling {
253
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.AfdSignaling", version: "2.268.0-alpha.0" };
254
+ /** Auto — preserve input AFD value */
255
+ static AUTO = new AfdSignaling('AUTO');
256
+ /** Fixed — use the value from fixedAfd */
257
+ static FIXED = new AfdSignaling('FIXED');
258
+ /** None — do not write AFD */
259
+ static NONE = new AfdSignaling('NONE');
260
+ /** A value not yet modelled by AWS CDK. */
261
+ static of(value) {
262
+ return new AfdSignaling(value);
263
+ }
264
+ /** The underlying string value passed to CloudFormation. */
265
+ value;
266
+ constructor(value) {
267
+ this.value = value;
268
+ }
269
+ }
270
+ exports.AfdSignaling = AfdSignaling;
271
+ /**
272
+ * Color metadata inclusion.
273
+ */
274
+ class ColorMetadata {
275
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.ColorMetadata", version: "2.268.0-alpha.0" };
276
+ /** Ignore — do not include color metadata */
277
+ static IGNORE = new ColorMetadata('IGNORE');
278
+ /** Insert — include color metadata */
279
+ static INSERT = new ColorMetadata('INSERT');
280
+ /** A value not yet modelled by AWS CDK. */
281
+ static of(value) {
282
+ return new ColorMetadata(value);
283
+ }
284
+ /** The underlying string value passed to CloudFormation. */
285
+ value;
286
+ constructor(value) {
287
+ this.value = value;
288
+ }
289
+ }
290
+ exports.ColorMetadata = ColorMetadata;
291
+ /**
292
+ * Scan type for the output video.
293
+ */
294
+ class ScanType {
295
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.ScanType", version: "2.268.0-alpha.0" };
296
+ /** Interlaced (top field first) */
297
+ static INTERLACED = new ScanType('INTERLACED');
298
+ /** Progressive */
299
+ static PROGRESSIVE = new ScanType('PROGRESSIVE');
300
+ /** A value not yet modelled by AWS CDK. */
301
+ static of(value) {
302
+ return new ScanType(value);
303
+ }
304
+ /** The underlying string value passed to CloudFormation. */
305
+ value;
306
+ constructor(value) {
307
+ this.value = value;
308
+ }
309
+ }
310
+ exports.ScanType = ScanType;
311
+ /**
312
+ * Flicker adaptive quantization.
313
+ */
314
+ class FlickerAq {
315
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.FlickerAq", version: "2.268.0-alpha.0" };
316
+ /** Enabled */
317
+ static ENABLED = new FlickerAq('ENABLED');
318
+ /** Disabled */
319
+ static DISABLED = new FlickerAq('DISABLED');
320
+ /** A value not yet modelled by AWS CDK. */
321
+ static of(value) {
322
+ return new FlickerAq(value);
323
+ }
324
+ /** The underlying string value passed to CloudFormation. */
325
+ value;
326
+ constructor(value) {
327
+ this.value = value;
328
+ }
329
+ }
330
+ exports.FlickerAq = FlickerAq;
331
+ /**
332
+ * GOP B-frame reference.
333
+ */
334
+ class GopBReference {
335
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.GopBReference", version: "2.268.0-alpha.0" };
336
+ /** Enabled */
337
+ static ENABLED = new GopBReference('ENABLED');
338
+ /** Disabled */
339
+ static DISABLED = new GopBReference('DISABLED');
340
+ /** A value not yet modelled by AWS CDK. */
341
+ static of(value) {
342
+ return new GopBReference(value);
343
+ }
344
+ /** The underlying string value passed to CloudFormation. */
345
+ value;
346
+ constructor(value) {
347
+ this.value = value;
348
+ }
349
+ }
350
+ exports.GopBReference = GopBReference;
351
+ /**
352
+ * Lookahead rate control.
353
+ */
354
+ class LookAheadRateControl {
355
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.LookAheadRateControl", version: "2.268.0-alpha.0" };
356
+ /** High — better quality, more latency and memory */
357
+ static HIGH = new LookAheadRateControl('HIGH');
358
+ /** Low — less latency and memory */
359
+ static LOW = new LookAheadRateControl('LOW');
360
+ /** Medium */
361
+ static MEDIUM = new LookAheadRateControl('MEDIUM');
362
+ /** A value not yet modelled by AWS CDK. */
363
+ static of(value) {
364
+ return new LookAheadRateControl(value);
365
+ }
366
+ /** The underlying string value passed to CloudFormation. */
367
+ value;
368
+ constructor(value) {
369
+ this.value = value;
370
+ }
371
+ }
372
+ exports.LookAheadRateControl = LookAheadRateControl;
373
+ /**
374
+ * Timecode insertion mode.
375
+ *
376
+ * @remarks This controls timecode insertion in the output elementary stream.
377
+ * To preserve source timecodes, set `TimecodeSource.EMBEDDED` on the channel's `timecodeConfig`.
378
+ */
379
+ class TimecodeInsertion {
380
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.TimecodeInsertion", version: "2.268.0-alpha.0" };
381
+ /** Disabled — do not include timecodes */
382
+ static DISABLED = new TimecodeInsertion('DISABLED');
383
+ /** PIC_TIMING_SEI — pass through picture timing SEI messages */
384
+ static PIC_TIMING_SEI = new TimecodeInsertion('PIC_TIMING_SEI');
385
+ /** A value not yet modelled by AWS CDK. */
386
+ static of(value) {
387
+ return new TimecodeInsertion(value);
388
+ }
389
+ /** The underlying string value passed to CloudFormation. */
390
+ value;
391
+ constructor(value) {
392
+ this.value = value;
393
+ }
394
+ }
395
+ exports.TimecodeInsertion = TimecodeInsertion;
396
+ /**
397
+ * Sub-GOP length mode.
398
+ */
399
+ class SubgopLength {
400
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.SubgopLength", version: "2.268.0-alpha.0" };
401
+ /** Dynamic — let MediaLive optimize B-frames per sub-GOP */
402
+ static DYNAMIC = new SubgopLength('DYNAMIC');
403
+ /** Fixed — use gopNumBFrames in each sub-GOP */
404
+ static FIXED = new SubgopLength('FIXED');
405
+ /** A value not yet modelled by AWS CDK. */
406
+ static of(value) {
407
+ return new SubgopLength(value);
408
+ }
409
+ /** The underlying string value passed to CloudFormation. */
410
+ value;
411
+ constructor(value) {
412
+ this.value = value;
413
+ }
414
+ }
415
+ exports.SubgopLength = SubgopLength;
416
+ // =============================================================================
417
+ // H.264-specific enums
418
+ // =============================================================================
419
+ /**
420
+ * H.264 entropy encoding mode.
421
+ */
422
+ class H264EntropyEncoding {
423
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264EntropyEncoding", version: "2.268.0-alpha.0" };
424
+ /** CABAC (requires Main or High profile) */
425
+ static CABAC = new H264EntropyEncoding('CABAC');
426
+ /** CAVLC */
427
+ static CAVLC = new H264EntropyEncoding('CAVLC');
428
+ /** A value not yet modelled by AWS CDK. */
429
+ static of(value) {
430
+ return new H264EntropyEncoding(value);
431
+ }
432
+ /** The underlying string value passed to CloudFormation. */
433
+ value;
434
+ constructor(value) {
435
+ this.value = value;
436
+ }
437
+ }
438
+ exports.H264EntropyEncoding = H264EntropyEncoding;
439
+ /**
440
+ * H.264 force field pictures.
441
+ */
442
+ class H264ForceFieldPictures {
443
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264ForceFieldPictures", version: "2.268.0-alpha.0" };
444
+ /** Enabled — force coding on a field basis */
445
+ static ENABLED = new H264ForceFieldPictures('ENABLED');
446
+ /** Disabled — let encoder decide */
447
+ static DISABLED = new H264ForceFieldPictures('DISABLED');
448
+ /** A value not yet modelled by AWS CDK. */
449
+ static of(value) {
450
+ return new H264ForceFieldPictures(value);
451
+ }
452
+ /** The underlying string value passed to CloudFormation. */
453
+ value;
454
+ constructor(value) {
455
+ this.value = value;
456
+ }
457
+ }
458
+ exports.H264ForceFieldPictures = H264ForceFieldPictures;
459
+ /**
460
+ * H.264 syntax mode.
461
+ */
462
+ class H264Syntax {
463
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264Syntax", version: "2.268.0-alpha.0" };
464
+ /** Default */
465
+ static DEFAULT = new H264Syntax('DEFAULT');
466
+ /** RP-2027 compliant */
467
+ static RP2027 = new H264Syntax('RP2027');
468
+ /** A value not yet modelled by AWS CDK. */
469
+ static of(value) {
470
+ return new H264Syntax(value);
471
+ }
472
+ /** The underlying string value passed to CloudFormation. */
473
+ value;
474
+ constructor(value) {
475
+ this.value = value;
476
+ }
477
+ }
478
+ exports.H264Syntax = H264Syntax;
479
+ /**
480
+ * H.264 quality level.
481
+ */
482
+ class H264QualityLevel {
483
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264QualityLevel", version: "2.268.0-alpha.0" };
484
+ /** Enhanced quality (may incur additional cost) */
485
+ static ENHANCED_QUALITY = new H264QualityLevel('ENHANCED_QUALITY');
486
+ /** Standard quality */
487
+ static STANDARD_QUALITY = new H264QualityLevel('STANDARD_QUALITY');
488
+ /** A value not yet modelled by AWS CDK. */
489
+ static of(value) {
490
+ return new H264QualityLevel(value);
491
+ }
492
+ /** The underlying string value passed to CloudFormation. */
493
+ value;
494
+ constructor(value) {
495
+ this.value = value;
496
+ }
497
+ }
498
+ exports.H264QualityLevel = H264QualityLevel;
499
+ // =============================================================================
500
+ // H.265-specific enums
501
+ // =============================================================================
502
+ /**
503
+ * H.265 adaptive quantization.
504
+ */
505
+ class H265AdaptiveQuantization {
506
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265AdaptiveQuantization", version: "2.268.0-alpha.0" };
507
+ /** Auto */
508
+ static AUTO = new H265AdaptiveQuantization('AUTO');
509
+ /** High */
510
+ static HIGH = new H265AdaptiveQuantization('HIGH');
511
+ /** Higher */
512
+ static HIGHER = new H265AdaptiveQuantization('HIGHER');
513
+ /** Low */
514
+ static LOW = new H265AdaptiveQuantization('LOW');
515
+ /** Max */
516
+ static MAX = new H265AdaptiveQuantization('MAX');
517
+ /** Medium */
518
+ static MEDIUM = new H265AdaptiveQuantization('MEDIUM');
519
+ /** Off */
520
+ static OFF = new H265AdaptiveQuantization('OFF');
521
+ /** A value not yet modelled by AWS CDK. */
522
+ static of(value) {
523
+ return new H265AdaptiveQuantization(value);
524
+ }
525
+ /** The underlying string value passed to CloudFormation. */
526
+ value;
527
+ constructor(value) {
528
+ this.value = value;
529
+ }
530
+ }
531
+ exports.H265AdaptiveQuantization = H265AdaptiveQuantization;
532
+ /**
533
+ * H.265 alternative transfer function.
534
+ */
535
+ class H265AlternativeTransferFunction {
536
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265AlternativeTransferFunction", version: "2.268.0-alpha.0" };
537
+ /** Insert */
538
+ static INSERT = new H265AlternativeTransferFunction('INSERT');
539
+ /** Omit */
540
+ static OMIT = new H265AlternativeTransferFunction('OMIT');
541
+ /** A value not yet modelled by AWS CDK. */
542
+ static of(value) {
543
+ return new H265AlternativeTransferFunction(value);
544
+ }
545
+ /** The underlying string value passed to CloudFormation. */
546
+ value;
547
+ constructor(value) {
548
+ this.value = value;
549
+ }
550
+ }
551
+ exports.H265AlternativeTransferFunction = H265AlternativeTransferFunction;
552
+ /**
553
+ * H.265 deblocking filter.
554
+ */
555
+ class H265Deblocking {
556
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265Deblocking", version: "2.268.0-alpha.0" };
557
+ /** Disabled */
558
+ static DISABLED = new H265Deblocking('DISABLED');
559
+ /** Enabled */
560
+ static ENABLED = new H265Deblocking('ENABLED');
561
+ /** A value not yet modelled by AWS CDK. */
562
+ static of(value) {
563
+ return new H265Deblocking(value);
564
+ }
565
+ /** The underlying string value passed to CloudFormation. */
566
+ value;
567
+ constructor(value) {
568
+ this.value = value;
569
+ }
570
+ }
571
+ exports.H265Deblocking = H265Deblocking;
572
+ /**
573
+ * H.265 motion vector over picture boundaries.
574
+ */
575
+ class H265MvOverPictureBoundaries {
576
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265MvOverPictureBoundaries", version: "2.268.0-alpha.0" };
577
+ /** Disabled */
578
+ static DISABLED = new H265MvOverPictureBoundaries('DISABLED');
579
+ /** Enabled */
580
+ static ENABLED = new H265MvOverPictureBoundaries('ENABLED');
581
+ /** A value not yet modelled by AWS CDK. */
582
+ static of(value) {
583
+ return new H265MvOverPictureBoundaries(value);
584
+ }
585
+ /** The underlying string value passed to CloudFormation. */
586
+ value;
587
+ constructor(value) {
588
+ this.value = value;
589
+ }
590
+ }
591
+ exports.H265MvOverPictureBoundaries = H265MvOverPictureBoundaries;
592
+ /**
593
+ * H.265 motion vector temporal predictor.
594
+ */
595
+ class H265MvTemporalPredictor {
596
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265MvTemporalPredictor", version: "2.268.0-alpha.0" };
597
+ /** Disabled */
598
+ static DISABLED = new H265MvTemporalPredictor('DISABLED');
599
+ /** Enabled */
600
+ static ENABLED = new H265MvTemporalPredictor('ENABLED');
601
+ /** A value not yet modelled by AWS CDK. */
602
+ static of(value) {
603
+ return new H265MvTemporalPredictor(value);
604
+ }
605
+ /** The underlying string value passed to CloudFormation. */
606
+ value;
607
+ constructor(value) {
608
+ this.value = value;
609
+ }
610
+ }
611
+ exports.H265MvTemporalPredictor = H265MvTemporalPredictor;
612
+ /**
613
+ * H.265 tile padding.
614
+ */
615
+ class H265TilePadding {
616
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265TilePadding", version: "2.268.0-alpha.0" };
617
+ /** None */
618
+ static NONE = new H265TilePadding('NONE');
619
+ /** Padded */
620
+ static PADDED = new H265TilePadding('PADDED');
621
+ /** A value not yet modelled by AWS CDK. */
622
+ static of(value) {
623
+ return new H265TilePadding(value);
624
+ }
625
+ /** The underlying string value passed to CloudFormation. */
626
+ value;
627
+ constructor(value) {
628
+ this.value = value;
629
+ }
630
+ }
631
+ exports.H265TilePadding = H265TilePadding;
632
+ /**
633
+ * H.265 treeblock size.
634
+ */
635
+ class H265TreeblockSize {
636
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265TreeblockSize", version: "2.268.0-alpha.0" };
637
+ /** Auto */
638
+ static AUTO = new H265TreeblockSize('AUTO');
639
+ /** 32x32 */
640
+ static TREE_SIZE_32X32 = new H265TreeblockSize('TREE_SIZE_32X32');
641
+ /** A value not yet modelled by AWS CDK. */
642
+ static of(value) {
643
+ return new H265TreeblockSize(value);
644
+ }
645
+ /** The underlying string value passed to CloudFormation. */
646
+ value;
647
+ constructor(value) {
648
+ this.value = value;
649
+ }
650
+ }
651
+ exports.H265TreeblockSize = H265TreeblockSize;
652
+ // =============================================================================
653
+ // AV1-specific enums
654
+ // =============================================================================
655
+ /**
656
+ * AV1 bit depth.
657
+ */
658
+ class Av1BitDepth {
659
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.Av1BitDepth", version: "2.268.0-alpha.0" };
660
+ /** 8-bit */
661
+ static BIT_DEPTH_8 = new Av1BitDepth('DEPTH_8');
662
+ /** 10-bit */
663
+ static BIT_DEPTH_10 = new Av1BitDepth('DEPTH_10');
664
+ /** A value not yet modelled by AWS CDK. */
665
+ static of(value) {
666
+ return new Av1BitDepth(value);
667
+ }
668
+ /** The underlying string value passed to CloudFormation. */
669
+ value;
670
+ constructor(value) {
671
+ this.value = value;
672
+ }
673
+ }
674
+ exports.Av1BitDepth = Av1BitDepth;
675
+ /**
676
+ * AV1 scene change detection.
677
+ */
678
+ class Av1SceneChangeDetect {
679
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.Av1SceneChangeDetect", version: "2.268.0-alpha.0" };
680
+ /** Disabled */
681
+ static DISABLED = new Av1SceneChangeDetect('DISABLED');
682
+ /** Enabled */
683
+ static ENABLED = new Av1SceneChangeDetect('ENABLED');
684
+ /** A value not yet modelled by AWS CDK. */
685
+ static of(value) {
686
+ return new Av1SceneChangeDetect(value);
687
+ }
688
+ /** The underlying string value passed to CloudFormation. */
689
+ value;
690
+ constructor(value) {
691
+ this.value = value;
692
+ }
693
+ }
694
+ exports.Av1SceneChangeDetect = Av1SceneChangeDetect;
695
+ /**
696
+ * AV1 spatial adaptive quantization.
697
+ */
698
+ class Av1SpatialAq {
699
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.Av1SpatialAq", version: "2.268.0-alpha.0" };
700
+ /** Disabled */
701
+ static DISABLED = new Av1SpatialAq('DISABLED');
702
+ /** Enabled */
703
+ static ENABLED = new Av1SpatialAq('ENABLED');
704
+ /** A value not yet modelled by AWS CDK. */
705
+ static of(value) {
706
+ return new Av1SpatialAq(value);
707
+ }
708
+ /** The underlying string value passed to CloudFormation. */
709
+ value;
710
+ constructor(value) {
711
+ this.value = value;
712
+ }
713
+ }
714
+ exports.Av1SpatialAq = Av1SpatialAq;
715
+ /**
716
+ * AV1 temporal adaptive quantization.
717
+ */
718
+ class Av1TemporalAq {
719
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.Av1TemporalAq", version: "2.268.0-alpha.0" };
720
+ /** Disabled */
721
+ static DISABLED = new Av1TemporalAq('DISABLED');
722
+ /** Enabled */
723
+ static ENABLED = new Av1TemporalAq('ENABLED');
724
+ /** A value not yet modelled by AWS CDK. */
725
+ static of(value) {
726
+ return new Av1TemporalAq(value);
727
+ }
728
+ /** The underlying string value passed to CloudFormation. */
729
+ value;
730
+ constructor(value) {
731
+ this.value = value;
732
+ }
733
+ }
734
+ exports.Av1TemporalAq = Av1TemporalAq;
735
+ /**
736
+ * H.264 scene change detection.
737
+ */
738
+ class H264SceneChangeDetect {
739
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264SceneChangeDetect", version: "2.268.0-alpha.0" };
740
+ /** Disabled */
741
+ static DISABLED = new H264SceneChangeDetect('DISABLED');
742
+ /** Enabled */
743
+ static ENABLED = new H264SceneChangeDetect('ENABLED');
744
+ /** A value not yet modelled by AWS CDK. */
745
+ static of(value) {
746
+ return new H264SceneChangeDetect(value);
747
+ }
748
+ /** The underlying string value passed to CloudFormation. */
749
+ value;
750
+ constructor(value) {
751
+ this.value = value;
752
+ }
753
+ }
754
+ exports.H264SceneChangeDetect = H264SceneChangeDetect;
755
+ /**
756
+ * H.264 spatial adaptive quantization.
757
+ */
758
+ class H264SpatialAq {
759
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264SpatialAq", version: "2.268.0-alpha.0" };
760
+ /** Disabled */
761
+ static DISABLED = new H264SpatialAq('DISABLED');
762
+ /** Enabled */
763
+ static ENABLED = new H264SpatialAq('ENABLED');
764
+ /** A value not yet modelled by AWS CDK. */
765
+ static of(value) {
766
+ return new H264SpatialAq(value);
767
+ }
768
+ /** The underlying string value passed to CloudFormation. */
769
+ value;
770
+ constructor(value) {
771
+ this.value = value;
772
+ }
773
+ }
774
+ exports.H264SpatialAq = H264SpatialAq;
775
+ /**
776
+ * H.264 temporal adaptive quantization.
777
+ */
778
+ class H264TemporalAq {
779
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264TemporalAq", version: "2.268.0-alpha.0" };
780
+ /** Disabled */
781
+ static DISABLED = new H264TemporalAq('DISABLED');
782
+ /** Enabled */
783
+ static ENABLED = new H264TemporalAq('ENABLED');
784
+ /** A value not yet modelled by AWS CDK. */
785
+ static of(value) {
786
+ return new H264TemporalAq(value);
787
+ }
788
+ /** The underlying string value passed to CloudFormation. */
789
+ value;
790
+ constructor(value) {
791
+ this.value = value;
792
+ }
793
+ }
794
+ exports.H264TemporalAq = H264TemporalAq;
795
+ /**
796
+ * H.265 scene change detection.
797
+ */
798
+ class H265SceneChangeDetect {
799
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265SceneChangeDetect", version: "2.268.0-alpha.0" };
800
+ /** Disabled */
801
+ static DISABLED = new H265SceneChangeDetect('DISABLED');
802
+ /** Enabled */
803
+ static ENABLED = new H265SceneChangeDetect('ENABLED');
804
+ /** A value not yet modelled by AWS CDK. */
805
+ static of(value) {
806
+ return new H265SceneChangeDetect(value);
807
+ }
808
+ /** The underlying string value passed to CloudFormation. */
809
+ value;
810
+ constructor(value) {
811
+ this.value = value;
812
+ }
813
+ }
814
+ exports.H265SceneChangeDetect = H265SceneChangeDetect;
815
+ /**
816
+ * AV1 timecode insertion.
817
+ */
818
+ class Av1TimecodeInsertion {
819
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.Av1TimecodeInsertion", version: "2.268.0-alpha.0" };
820
+ /** Disabled — do not insert timecodes */
821
+ static DISABLED = new Av1TimecodeInsertion('DISABLED');
822
+ /**
823
+ * Include timecodes as a metadata OBU (Open Bitstream Unit) of type
824
+ * `METADATA_TYPE_TIMECODE`, based on the source specified in the channel's timecode config.
825
+ */
826
+ static METADATA_OBU = new Av1TimecodeInsertion('METADATA_OBU');
827
+ /** A value not yet modelled by AWS CDK. */
828
+ static of(value) {
829
+ return new Av1TimecodeInsertion(value);
830
+ }
831
+ /** The underlying string value passed to CloudFormation. */
832
+ value;
833
+ constructor(value) {
834
+ this.value = value;
835
+ }
836
+ }
837
+ exports.Av1TimecodeInsertion = Av1TimecodeInsertion;
838
+ // =============================================================================
839
+ // Timecode burn-in settings
840
+ // =============================================================================
841
+ /**
842
+ * Font size for timecode burn-in.
843
+ */
844
+ class TimecodeBurninFontSize {
845
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.TimecodeBurninFontSize", version: "2.268.0-alpha.0" };
846
+ /** Extra small */
847
+ static EXTRA_SMALL_10 = new TimecodeBurninFontSize('EXTRA_SMALL_10');
848
+ /** Large */
849
+ static LARGE_48 = new TimecodeBurninFontSize('LARGE_48');
850
+ /** Medium */
851
+ static MEDIUM_32 = new TimecodeBurninFontSize('MEDIUM_32');
852
+ /** Small */
853
+ static SMALL_16 = new TimecodeBurninFontSize('SMALL_16');
854
+ /** A value not yet modelled by AWS CDK. */
855
+ static of(value) {
856
+ return new TimecodeBurninFontSize(value);
857
+ }
858
+ /** The underlying string value passed to CloudFormation. */
859
+ value;
860
+ constructor(value) {
861
+ this.value = value;
862
+ }
863
+ }
864
+ exports.TimecodeBurninFontSize = TimecodeBurninFontSize;
865
+ /**
866
+ * Position for timecode burn-in overlay.
867
+ */
868
+ class TimecodeBurninPosition {
869
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.TimecodeBurninPosition", version: "2.268.0-alpha.0" };
870
+ /** Bottom center */
871
+ static BOTTOM_CENTER = new TimecodeBurninPosition('BOTTOM_CENTER');
872
+ /** Bottom left */
873
+ static BOTTOM_LEFT = new TimecodeBurninPosition('BOTTOM_LEFT');
874
+ /** Bottom right */
875
+ static BOTTOM_RIGHT = new TimecodeBurninPosition('BOTTOM_RIGHT');
876
+ /** Middle center */
877
+ static MIDDLE_CENTER = new TimecodeBurninPosition('MIDDLE_CENTER');
878
+ /** Middle left */
879
+ static MIDDLE_LEFT = new TimecodeBurninPosition('MIDDLE_LEFT');
880
+ /** Middle right */
881
+ static MIDDLE_RIGHT = new TimecodeBurninPosition('MIDDLE_RIGHT');
882
+ /** Top center */
883
+ static TOP_CENTER = new TimecodeBurninPosition('TOP_CENTER');
884
+ /** Top left */
885
+ static TOP_LEFT = new TimecodeBurninPosition('TOP_LEFT');
886
+ /** Top right */
887
+ static TOP_RIGHT = new TimecodeBurninPosition('TOP_RIGHT');
888
+ /** A value not yet modelled by AWS CDK. */
889
+ static of(value) {
890
+ return new TimecodeBurninPosition(value);
891
+ }
892
+ /** The underlying string value passed to CloudFormation. */
893
+ value;
894
+ constructor(value) {
895
+ this.value = value;
896
+ }
897
+ }
898
+ exports.TimecodeBurninPosition = TimecodeBurninPosition;
899
+ /**
900
+ * H.264 rate control. Use the static factory methods to create.
901
+ */
902
+ class H264RateControl {
903
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264RateControl", version: "2.268.0-alpha.0" };
904
+ /** Constant bitrate. */
905
+ static cbr(props) {
906
+ try {
907
+ jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_CbrRateControlProps(props);
908
+ }
909
+ catch (error) {
910
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
911
+ Error.captureStackTrace(error, this.cbr);
912
+ }
913
+ throw error;
914
+ }
915
+ return new H264RateControl('CBR', props.bitrate, undefined, undefined);
916
+ }
917
+ /** Variable bitrate. */
918
+ static vbr(props) {
919
+ try {
920
+ jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_VbrRateControlProps(props);
921
+ }
922
+ catch (error) {
923
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
924
+ Error.captureStackTrace(error, this.vbr);
925
+ }
926
+ throw error;
927
+ }
928
+ return new H264RateControl('VBR', props.bitrate, props.maxBitrate, undefined);
929
+ }
930
+ /** Quality-defined variable bitrate. */
931
+ static qvbr(props) {
932
+ try {
933
+ jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_QvbrRateControlProps(props);
934
+ }
935
+ catch (error) {
936
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
937
+ Error.captureStackTrace(error, this.qvbr);
938
+ }
939
+ throw error;
940
+ }
941
+ return new H264RateControl('QVBR', undefined, props.maxBitrate, props.qvbrQualityLevel);
942
+ }
943
+ /** @internal */
944
+ _mode;
945
+ /** @internal */
946
+ _bitrate;
947
+ /** @internal */
948
+ _maxBitrate;
949
+ /** @internal */
950
+ _qvbrQualityLevel;
951
+ constructor(mode, bitrate, maxBitrate, qvbrQualityLevel) {
952
+ this._mode = mode;
953
+ this._bitrate = bitrate;
954
+ this._maxBitrate = maxBitrate;
955
+ this._qvbrQualityLevel = qvbrQualityLevel;
956
+ }
957
+ }
958
+ exports.H264RateControl = H264RateControl;
959
+ /**
960
+ * H.265 rate control. Use the static factory methods to create.
961
+ */
962
+ class H265RateControl {
963
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265RateControl", version: "2.268.0-alpha.0" };
964
+ /** Constant bitrate. */
965
+ static cbr(props) {
966
+ try {
967
+ jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_CbrRateControlProps(props);
968
+ }
969
+ catch (error) {
970
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
971
+ Error.captureStackTrace(error, this.cbr);
972
+ }
973
+ throw error;
974
+ }
975
+ return new H265RateControl('CBR', props.bitrate, undefined, undefined);
976
+ }
977
+ /** Variable bitrate. */
978
+ static vbr(props) {
979
+ try {
980
+ jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_VbrRateControlProps(props);
981
+ }
982
+ catch (error) {
983
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
984
+ Error.captureStackTrace(error, this.vbr);
985
+ }
986
+ throw error;
987
+ }
988
+ return new H265RateControl('VBR', props.bitrate, props.maxBitrate, undefined);
989
+ }
990
+ /** Quality-defined variable bitrate. */
991
+ static qvbr(props) {
992
+ try {
993
+ jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_QvbrRateControlProps(props);
994
+ }
995
+ catch (error) {
996
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
997
+ Error.captureStackTrace(error, this.qvbr);
998
+ }
999
+ throw error;
1000
+ }
1001
+ return new H265RateControl('QVBR', undefined, props.maxBitrate, props.qvbrQualityLevel);
1002
+ }
1003
+ /** @internal */
1004
+ _mode;
1005
+ /** @internal */
1006
+ _bitrate;
1007
+ /** @internal */
1008
+ _maxBitrate;
1009
+ /** @internal */
1010
+ _qvbrQualityLevel;
1011
+ constructor(mode, bitrate, maxBitrate, qvbrQualityLevel) {
1012
+ this._mode = mode;
1013
+ this._bitrate = bitrate;
1014
+ this._maxBitrate = maxBitrate;
1015
+ this._qvbrQualityLevel = qvbrQualityLevel;
1016
+ }
1017
+ }
1018
+ exports.H265RateControl = H265RateControl;
1019
+ /**
1020
+ * AV1 rate control. AV1 supports QVBR and CBR.
1021
+ */
1022
+ class Av1RateControl {
1023
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.Av1RateControl", version: "2.268.0-alpha.0" };
1024
+ /** Quality-defined variable bitrate. */
1025
+ static qvbr(props) {
1026
+ try {
1027
+ jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_QvbrRateControlProps(props);
1028
+ }
1029
+ catch (error) {
1030
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
1031
+ Error.captureStackTrace(error, this.qvbr);
1032
+ }
1033
+ throw error;
1034
+ }
1035
+ return new Av1RateControl('QVBR', undefined, props.maxBitrate, props.qvbrQualityLevel);
1036
+ }
1037
+ /** Constant bitrate. */
1038
+ static cbr(props) {
1039
+ try {
1040
+ jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_CbrRateControlProps(props);
1041
+ }
1042
+ catch (error) {
1043
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
1044
+ Error.captureStackTrace(error, this.cbr);
1045
+ }
1046
+ throw error;
1047
+ }
1048
+ return new Av1RateControl('CBR', props.bitrate, undefined, undefined);
1049
+ }
1050
+ /** @internal */
1051
+ _mode;
1052
+ /** @internal */
1053
+ _bitrate;
1054
+ /** @internal */
1055
+ _maxBitrate;
1056
+ /** @internal */
1057
+ _qvbrQualityLevel;
1058
+ constructor(mode, bitrate, maxBitrate, qvbrQualityLevel) {
1059
+ this._mode = mode;
1060
+ this._bitrate = bitrate;
1061
+ this._maxBitrate = maxBitrate;
1062
+ this._qvbrQualityLevel = qvbrQualityLevel;
1063
+ }
1064
+ }
1065
+ exports.Av1RateControl = Av1RateControl;
1066
+ // =============================================================================
1067
+ // Color space settings classes
1068
+ // =============================================================================
1069
+ /**
1070
+ * Color space settings for H.264 video.
1071
+ */
1072
+ class H264ColorSpaceSettings {
1073
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264ColorSpaceSettings", version: "2.268.0-alpha.0" };
1074
+ /** Pass through the source color space with no conversion. */
1075
+ static passthrough() {
1076
+ return new H264ColorSpaceSettings({ colorSpacePassthroughSettings: {} });
1077
+ }
1078
+ /** Convert to Rec.601 color space. */
1079
+ static rec601() {
1080
+ return new H264ColorSpaceSettings({ rec601Settings: {} });
1081
+ }
1082
+ /** Convert to Rec.709 color space. */
1083
+ static rec709() {
1084
+ return new H264ColorSpaceSettings({ rec709Settings: {} });
1085
+ }
1086
+ config;
1087
+ constructor(config) { this.config = config; }
1088
+ /** @internal */
1089
+ _bind() { return this.config; }
1090
+ }
1091
+ exports.H264ColorSpaceSettings = H264ColorSpaceSettings;
1092
+ /**
1093
+ * Color space settings for H.265 video.
1094
+ */
1095
+ class H265ColorSpaceSettings {
1096
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265ColorSpaceSettings", version: "2.268.0-alpha.0" };
1097
+ /** Pass through the source color space with no conversion. */
1098
+ static passthrough() {
1099
+ return new H265ColorSpaceSettings({ colorSpacePassthroughSettings: {} });
1100
+ }
1101
+ /** Dolby Vision 8.1 color space. */
1102
+ static dolbyVision81() {
1103
+ return new H265ColorSpaceSettings({ dolbyVision81Settings: {} });
1104
+ }
1105
+ /** HDR10 color space. */
1106
+ static hdr10(props) {
1107
+ try {
1108
+ jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_Hdr10SettingsProps(props);
1109
+ }
1110
+ catch (error) {
1111
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
1112
+ Error.captureStackTrace(error, this.hdr10);
1113
+ }
1114
+ throw error;
1115
+ }
1116
+ return new H265ColorSpaceSettings({ hdr10Settings: props ?? {} });
1117
+ }
1118
+ /** HLG 2020 color space. */
1119
+ static hlg2020() {
1120
+ return new H265ColorSpaceSettings({ hlg2020Settings: {} });
1121
+ }
1122
+ /** Convert to Rec.601 color space. */
1123
+ static rec601() {
1124
+ return new H265ColorSpaceSettings({ rec601Settings: {} });
1125
+ }
1126
+ /** Convert to Rec.709 color space. */
1127
+ static rec709() {
1128
+ return new H265ColorSpaceSettings({ rec709Settings: {} });
1129
+ }
1130
+ config;
1131
+ constructor(config) { this.config = config; }
1132
+ /** @internal */
1133
+ _bind() { return this.config; }
1134
+ }
1135
+ exports.H265ColorSpaceSettings = H265ColorSpaceSettings;
1136
+ /**
1137
+ * Color space settings for AV1 video.
1138
+ */
1139
+ class Av1ColorSpaceSettings {
1140
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.Av1ColorSpaceSettings", version: "2.268.0-alpha.0" };
1141
+ /** Pass through the source color space with no conversion. */
1142
+ static passthrough() {
1143
+ return new Av1ColorSpaceSettings({ colorSpacePassthroughSettings: {} });
1144
+ }
1145
+ /** HDR10 color space. */
1146
+ static hdr10(props) {
1147
+ try {
1148
+ jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_Hdr10SettingsProps(props);
1149
+ }
1150
+ catch (error) {
1151
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
1152
+ Error.captureStackTrace(error, this.hdr10);
1153
+ }
1154
+ throw error;
1155
+ }
1156
+ return new Av1ColorSpaceSettings({ hdr10Settings: props ?? {} });
1157
+ }
1158
+ /** HLG 2020 color space. */
1159
+ static hlg2020() {
1160
+ return new Av1ColorSpaceSettings({ hlg2020Settings: {} });
1161
+ }
1162
+ /** Convert to Rec.601 color space. */
1163
+ static rec601() {
1164
+ return new Av1ColorSpaceSettings({ rec601Settings: {} });
1165
+ }
1166
+ /** Convert to Rec.709 color space. */
1167
+ static rec709() {
1168
+ return new Av1ColorSpaceSettings({ rec709Settings: {} });
1169
+ }
1170
+ config;
1171
+ constructor(config) { this.config = config; }
1172
+ /** @internal */
1173
+ _bind() { return this.config; }
1174
+ }
1175
+ exports.Av1ColorSpaceSettings = Av1ColorSpaceSettings;
1176
+ // =============================================================================
1177
+ // Filter settings classes
1178
+ // =============================================================================
1179
+ /**
1180
+ * Post-filter sharpening for temporal filter.
1181
+ */
1182
+ class TemporalFilterPostFilterSharpening {
1183
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.TemporalFilterPostFilterSharpening", version: "2.268.0-alpha.0" };
1184
+ /** Auto */
1185
+ static AUTO = new TemporalFilterPostFilterSharpening('AUTO');
1186
+ /** Disabled */
1187
+ static DISABLED = new TemporalFilterPostFilterSharpening('DISABLED');
1188
+ /** Enabled */
1189
+ static ENABLED = new TemporalFilterPostFilterSharpening('ENABLED');
1190
+ /** A value not yet modelled by AWS CDK. */
1191
+ static of(value) {
1192
+ return new TemporalFilterPostFilterSharpening(value);
1193
+ }
1194
+ /** The underlying string value passed to CloudFormation. */
1195
+ value;
1196
+ constructor(value) {
1197
+ this.value = value;
1198
+ }
1199
+ }
1200
+ exports.TemporalFilterPostFilterSharpening = TemporalFilterPostFilterSharpening;
1201
+ /**
1202
+ * Temporal filter strength.
1203
+ */
1204
+ class TemporalFilterStrength {
1205
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.TemporalFilterStrength", version: "2.268.0-alpha.0" };
1206
+ /** Auto */
1207
+ static AUTO = new TemporalFilterStrength('AUTO');
1208
+ /** Strength 1 (recommended) */
1209
+ static STRENGTH_1 = new TemporalFilterStrength('STRENGTH_1');
1210
+ /** Strength 2 (recommended) */
1211
+ static STRENGTH_2 = new TemporalFilterStrength('STRENGTH_2');
1212
+ /** Strength 3 */
1213
+ static STRENGTH_3 = new TemporalFilterStrength('STRENGTH_3');
1214
+ /** Strength 4 */
1215
+ static STRENGTH_4 = new TemporalFilterStrength('STRENGTH_4');
1216
+ /** Strength 5 */
1217
+ static STRENGTH_5 = new TemporalFilterStrength('STRENGTH_5');
1218
+ /** Strength 6 */
1219
+ static STRENGTH_6 = new TemporalFilterStrength('STRENGTH_6');
1220
+ /** Strength 7 */
1221
+ static STRENGTH_7 = new TemporalFilterStrength('STRENGTH_7');
1222
+ /** Strength 8 */
1223
+ static STRENGTH_8 = new TemporalFilterStrength('STRENGTH_8');
1224
+ /** Strength 9 */
1225
+ static STRENGTH_9 = new TemporalFilterStrength('STRENGTH_9');
1226
+ /** Strength 10 */
1227
+ static STRENGTH_10 = new TemporalFilterStrength('STRENGTH_10');
1228
+ /** Strength 11 */
1229
+ static STRENGTH_11 = new TemporalFilterStrength('STRENGTH_11');
1230
+ /** Strength 12 */
1231
+ static STRENGTH_12 = new TemporalFilterStrength('STRENGTH_12');
1232
+ /** Strength 13 */
1233
+ static STRENGTH_13 = new TemporalFilterStrength('STRENGTH_13');
1234
+ /** Strength 14 */
1235
+ static STRENGTH_14 = new TemporalFilterStrength('STRENGTH_14');
1236
+ /** Strength 15 */
1237
+ static STRENGTH_15 = new TemporalFilterStrength('STRENGTH_15');
1238
+ /** Strength 16 */
1239
+ static STRENGTH_16 = new TemporalFilterStrength('STRENGTH_16');
1240
+ /** A value not yet modelled by AWS CDK. */
1241
+ static of(value) {
1242
+ return new TemporalFilterStrength(value);
1243
+ }
1244
+ /** The underlying string value passed to CloudFormation. */
1245
+ value;
1246
+ constructor(value) {
1247
+ this.value = value;
1248
+ }
1249
+ }
1250
+ exports.TemporalFilterStrength = TemporalFilterStrength;
1251
+ /**
1252
+ * Post-filter sharpening for bandwidth reduction filter.
1253
+ */
1254
+ class BandwidthReductionPostFilterSharpening {
1255
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.BandwidthReductionPostFilterSharpening", version: "2.268.0-alpha.0" };
1256
+ /** Disabled */
1257
+ static DISABLED = new BandwidthReductionPostFilterSharpening('DISABLED');
1258
+ /** Sharpening level 1 */
1259
+ static SHARPENING_1 = new BandwidthReductionPostFilterSharpening('SHARPENING_1');
1260
+ /** Sharpening level 2 */
1261
+ static SHARPENING_2 = new BandwidthReductionPostFilterSharpening('SHARPENING_2');
1262
+ /** Sharpening level 3 */
1263
+ static SHARPENING_3 = new BandwidthReductionPostFilterSharpening('SHARPENING_3');
1264
+ /** A value not yet modelled by AWS CDK. */
1265
+ static of(value) {
1266
+ return new BandwidthReductionPostFilterSharpening(value);
1267
+ }
1268
+ /** The underlying string value passed to CloudFormation. */
1269
+ value;
1270
+ constructor(value) {
1271
+ this.value = value;
1272
+ }
1273
+ }
1274
+ exports.BandwidthReductionPostFilterSharpening = BandwidthReductionPostFilterSharpening;
1275
+ /**
1276
+ * Bandwidth reduction filter strength.
1277
+ */
1278
+ class BandwidthReductionStrength {
1279
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.BandwidthReductionStrength", version: "2.268.0-alpha.0" };
1280
+ /** Auto */
1281
+ static AUTO = new BandwidthReductionStrength('AUTO');
1282
+ /** Strength 1 */
1283
+ static STRENGTH_1 = new BandwidthReductionStrength('STRENGTH_1');
1284
+ /** Strength 2 */
1285
+ static STRENGTH_2 = new BandwidthReductionStrength('STRENGTH_2');
1286
+ /** Strength 3 */
1287
+ static STRENGTH_3 = new BandwidthReductionStrength('STRENGTH_3');
1288
+ /** Strength 4 */
1289
+ static STRENGTH_4 = new BandwidthReductionStrength('STRENGTH_4');
1290
+ /** A value not yet modelled by AWS CDK. */
1291
+ static of(value) {
1292
+ return new BandwidthReductionStrength(value);
1293
+ }
1294
+ /** The underlying string value passed to CloudFormation. */
1295
+ value;
1296
+ constructor(value) {
1297
+ this.value = value;
1298
+ }
1299
+ }
1300
+ exports.BandwidthReductionStrength = BandwidthReductionStrength;
1301
+ /**
1302
+ * Filter settings for H.264 video. Supports temporal filter and bandwidth reduction filter.
1303
+ */
1304
+ class H264FilterSettings {
1305
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264FilterSettings", version: "2.268.0-alpha.0" };
1306
+ /** Apply a temporal filter. */
1307
+ static temporalFilter(props) {
1308
+ try {
1309
+ jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_TemporalFilterProps(props);
1310
+ }
1311
+ catch (error) {
1312
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
1313
+ Error.captureStackTrace(error, this.temporalFilter);
1314
+ }
1315
+ throw error;
1316
+ }
1317
+ return new H264FilterSettings({
1318
+ temporalFilterSettings: props ? {
1319
+ postFilterSharpening: props.postFilterSharpening?.value,
1320
+ strength: props.strength?.value,
1321
+ } : {},
1322
+ });
1323
+ }
1324
+ /** Apply a bandwidth reduction filter. */
1325
+ static bandwidthReductionFilter(props) {
1326
+ try {
1327
+ jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_BandwidthReductionFilterProps(props);
1328
+ }
1329
+ catch (error) {
1330
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
1331
+ Error.captureStackTrace(error, this.bandwidthReductionFilter);
1332
+ }
1333
+ throw error;
1334
+ }
1335
+ return new H264FilterSettings({
1336
+ bandwidthReductionFilterSettings: props ? {
1337
+ postFilterSharpening: props.postFilterSharpening?.value,
1338
+ strength: props.strength?.value,
1339
+ } : {},
1340
+ });
1341
+ }
1342
+ config;
1343
+ constructor(config) { this.config = config; }
1344
+ /** @internal */
1345
+ _bind() { return this.config; }
1346
+ }
1347
+ exports.H264FilterSettings = H264FilterSettings;
1348
+ /**
1349
+ * Filter settings for H.265 video. Supports temporal filter and bandwidth reduction filter.
1350
+ */
1351
+ class H265FilterSettings {
1352
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265FilterSettings", version: "2.268.0-alpha.0" };
1353
+ /** Apply a temporal filter. */
1354
+ static temporalFilter(props) {
1355
+ try {
1356
+ jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_TemporalFilterProps(props);
1357
+ }
1358
+ catch (error) {
1359
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
1360
+ Error.captureStackTrace(error, this.temporalFilter);
1361
+ }
1362
+ throw error;
1363
+ }
1364
+ return new H265FilterSettings({
1365
+ temporalFilterSettings: props ? {
1366
+ postFilterSharpening: props.postFilterSharpening?.value,
1367
+ strength: props.strength?.value,
1368
+ } : {},
1369
+ });
1370
+ }
1371
+ /** Apply a bandwidth reduction filter. */
1372
+ static bandwidthReductionFilter(props) {
1373
+ try {
1374
+ jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_BandwidthReductionFilterProps(props);
1375
+ }
1376
+ catch (error) {
1377
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
1378
+ Error.captureStackTrace(error, this.bandwidthReductionFilter);
1379
+ }
1380
+ throw error;
1381
+ }
1382
+ return new H265FilterSettings({
1383
+ bandwidthReductionFilterSettings: props ? {
1384
+ postFilterSharpening: props.postFilterSharpening?.value,
1385
+ strength: props.strength?.value,
1386
+ } : {},
1387
+ });
1388
+ }
1389
+ config;
1390
+ constructor(config) { this.config = config; }
1391
+ /** @internal */
1392
+ _bind() { return this.config; }
1393
+ }
1394
+ exports.H265FilterSettings = H265FilterSettings;
1395
+ /**
1396
+ * H.265 profile.
1397
+ */
1398
+ class H265Profile {
1399
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265Profile", version: "2.268.0-alpha.0" };
1400
+ /** Main profile */
1401
+ static MAIN = new H265Profile('MAIN');
1402
+ /** Main 10-bit profile */
1403
+ static MAIN_10BIT = new H265Profile('MAIN_10BIT');
1404
+ /** A value not yet modelled by AWS CDK. */
1405
+ static of(value) {
1406
+ return new H265Profile(value);
1407
+ }
1408
+ /** The underlying string value passed to CloudFormation. */
1409
+ value;
1410
+ constructor(value) {
1411
+ this.value = value;
1412
+ }
1413
+ }
1414
+ exports.H265Profile = H265Profile;
1415
+ /**
1416
+ * H.265 tier.
1417
+ */
1418
+ class H265Tier {
1419
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265Tier", version: "2.268.0-alpha.0" };
1420
+ /** Main tier */
1421
+ static MAIN = new H265Tier('MAIN');
1422
+ /** High tier */
1423
+ static HIGH = new H265Tier('HIGH');
1424
+ /** A value not yet modelled by AWS CDK. */
1425
+ static of(value) {
1426
+ return new H265Tier(value);
1427
+ }
1428
+ /** The underlying string value passed to CloudFormation. */
1429
+ value;
1430
+ constructor(value) {
1431
+ this.value = value;
1432
+ }
1433
+ }
1434
+ exports.H265Tier = H265Tier;
1435
+ // =============================================================================
1436
+ // VideoCodecSettings (abstract + subclasses)
1437
+ // =============================================================================
1438
+ /**
1439
+ * The type of video codec. Users select a codec via the
1440
+ * `VideoCodecSettings` factory methods, never by passing this type directly.
1441
+ * @internal
1442
+ */
1443
+ var VideoCodecType;
1444
+ (function (VideoCodecType) {
1445
+ /** H.264 (AVC) */
1446
+ VideoCodecType["H264"] = "H264";
1447
+ /** H.265 (HEVC) */
1448
+ VideoCodecType["H265"] = "H265";
1449
+ /** AV1 */
1450
+ VideoCodecType["AV1"] = "AV1";
1451
+ /** Frame Capture (JPEG) */
1452
+ VideoCodecType["FRAME_CAPTURE"] = "FRAME_CAPTURE";
1453
+ })(VideoCodecType || (exports.VideoCodecType = VideoCodecType = {}));
1454
+ /**
1455
+ * Video codec settings. Use the static factory methods to create.
1456
+ */
1457
+ class VideoCodecSettings {
1458
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.VideoCodecSettings", version: "2.268.0-alpha.0" };
1459
+ /** Create H.264 (AVC) codec settings. */
1460
+ static h264(props) {
1461
+ try {
1462
+ jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_H264SettingsProps(props);
1463
+ }
1464
+ catch (error) {
1465
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
1466
+ Error.captureStackTrace(error, this.h264);
1467
+ }
1468
+ throw error;
1469
+ }
1470
+ return new H264VideoCodecSettings(props ?? {});
1471
+ }
1472
+ /** Create H.265 (HEVC) codec settings. Framerate is required for H.265. */
1473
+ static h265(props) {
1474
+ try {
1475
+ jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_H265SettingsProps(props);
1476
+ }
1477
+ catch (error) {
1478
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
1479
+ Error.captureStackTrace(error, this.h265);
1480
+ }
1481
+ throw error;
1482
+ }
1483
+ return new H265VideoCodecSettings(props);
1484
+ }
1485
+ /** Create AV1 codec settings. */
1486
+ static av1(props) {
1487
+ try {
1488
+ jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_Av1SettingsProps(props);
1489
+ }
1490
+ catch (error) {
1491
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
1492
+ Error.captureStackTrace(error, this.av1);
1493
+ }
1494
+ throw error;
1495
+ }
1496
+ return new Av1VideoCodecSettings(props ?? {});
1497
+ }
1498
+ /** Create frame capture codec settings. */
1499
+ static frameCapture(props) {
1500
+ try {
1501
+ jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_FrameCaptureSettingsProps(props);
1502
+ }
1503
+ catch (error) {
1504
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
1505
+ Error.captureStackTrace(error, this.frameCapture);
1506
+ }
1507
+ throw error;
1508
+ }
1509
+ return new FrameCaptureVideoCodecSettings(props ?? {});
1510
+ }
1511
+ }
1512
+ exports.VideoCodecSettings = VideoCodecSettings;
1513
+ /** @internal */
1514
+ class H264VideoCodecSettings extends VideoCodecSettings {
1515
+ props;
1516
+ _codecType = VideoCodecType.H264;
1517
+ constructor(props) {
1518
+ super();
1519
+ this.props = props;
1520
+ }
1521
+ _hasExplicitFramerate() {
1522
+ return this.props.framerate != null;
1523
+ }
1524
+ _bind() {
1525
+ const p = this.props;
1526
+ const rc = p.rateControl;
1527
+ return {
1528
+ h264Settings: {
1529
+ bitrate: rc?._bitrate?.toBps(),
1530
+ maxBitrate: rc?._maxBitrate?.toBps(),
1531
+ rateControlMode: rc?._mode,
1532
+ qvbrQualityLevel: rc?._qvbrQualityLevel,
1533
+ profile: (p.profile ?? H264Profile.MAIN).value,
1534
+ gopSize: p.gopSize?._value ?? 1,
1535
+ gopSizeUnits: p.gopSize?._units ?? 'SECONDS',
1536
+ gopNumBFrames: p.gopNumBFrames,
1537
+ adaptiveQuantization: (p.adaptiveQuantization ?? H264AdaptiveQuantization.AUTO).value,
1538
+ framerateControl: p.framerate ? 'SPECIFIED' : 'INITIALIZE_FROM_SOURCE',
1539
+ framerateNumerator: p.framerate?._numerator(),
1540
+ framerateDenominator: p.framerate?._denominator(),
1541
+ parControl: (p.pixelAspectRatio || p.framerate) ? 'SPECIFIED' : 'INITIALIZE_FROM_SOURCE',
1542
+ parNumerator: p.pixelAspectRatio?._numerator() ?? (p.framerate ? shared_1.PixelAspectRatio.SQUARE._numerator() : undefined),
1543
+ parDenominator: p.pixelAspectRatio?._denominator() ?? (p.framerate ? shared_1.PixelAspectRatio.SQUARE._denominator() : undefined),
1544
+ sceneChangeDetect: (p.sceneChangeDetect ?? H264SceneChangeDetect.ENABLED).value,
1545
+ spatialAq: (p.spatialAq ?? H264SpatialAq.ENABLED).value,
1546
+ temporalAq: (p.temporalAq ?? H264TemporalAq.ENABLED).value,
1547
+ timecodeBurninSettings: p.timecodeBurnin ? {
1548
+ fontSize: p.timecodeBurnin.fontSize?.value,
1549
+ position: p.timecodeBurnin.position?.value,
1550
+ prefix: p.timecodeBurnin.prefix,
1551
+ } : undefined,
1552
+ afdSignaling: (p.afdSignaling ?? AfdSignaling.NONE).value,
1553
+ bufFillPct: p.bufFillPct,
1554
+ bufSize: p.bufSize,
1555
+ colorMetadata: p.colorMetadata?.value,
1556
+ colorSpaceSettings: p.colorSpaceSettings?._bind(),
1557
+ entropyEncoding: p.entropyEncoding?.value,
1558
+ filterSettings: p.filterSettings?._bind(),
1559
+ fixedAfd: p.fixedAfd,
1560
+ flickerAq: (p.flickerAq ?? FlickerAq.ENABLED).value,
1561
+ forceFieldPictures: p.forceFieldPictures?.value,
1562
+ gopBReference: p.gopBReference?.value,
1563
+ gopClosedCadence: p.gopClosedCadence,
1564
+ level: (p.level ?? H264Level.H264_LEVEL_AUTO).value,
1565
+ lookAheadRateControl: (p.lookAheadRateControl ?? LookAheadRateControl.HIGH).value,
1566
+ minIInterval: p.minIInterval,
1567
+ numRefFrames: p.numRefFrames,
1568
+ scanType: (p.scanType ?? ScanType.PROGRESSIVE).value,
1569
+ slices: p.slices,
1570
+ softness: p.softness,
1571
+ syntax: (p.syntax ?? H264Syntax.DEFAULT).value,
1572
+ timecodeInsertion: p.timecodeInsertion?.value,
1573
+ minQp: p.minQp,
1574
+ minBitrate: p.minBitrate,
1575
+ qualityLevel: p.qualityLevel?.value,
1576
+ subgopLength: p.subgopLength?.value,
1577
+ },
1578
+ };
1579
+ }
1580
+ }
1581
+ /** @internal */
1582
+ class H265VideoCodecSettings extends VideoCodecSettings {
1583
+ props;
1584
+ _codecType = VideoCodecType.H265;
1585
+ constructor(props) {
1586
+ super();
1587
+ this.props = props;
1588
+ }
1589
+ _hasExplicitFramerate() {
1590
+ return this.props.framerate != null;
1591
+ }
1592
+ _bind() {
1593
+ const p = this.props;
1594
+ const rc = p.rateControl;
1595
+ return {
1596
+ h265Settings: {
1597
+ bitrate: rc?._bitrate?.toBps(),
1598
+ maxBitrate: rc?._maxBitrate?.toBps(),
1599
+ rateControlMode: rc?._mode,
1600
+ qvbrQualityLevel: rc?._qvbrQualityLevel,
1601
+ profile: (p.profile ?? H265Profile.MAIN).value,
1602
+ tier: (p.tier ?? H265Tier.MAIN).value,
1603
+ level: p.level?.value,
1604
+ gopSize: p.gopSize?._value ?? 1,
1605
+ gopSizeUnits: p.gopSize?._units ?? 'SECONDS',
1606
+ framerateNumerator: p.framerate._numerator(),
1607
+ framerateDenominator: p.framerate._denominator(),
1608
+ parNumerator: p.pixelAspectRatio?._numerator() ?? shared_1.PixelAspectRatio.SQUARE._numerator(),
1609
+ parDenominator: p.pixelAspectRatio?._denominator() ?? shared_1.PixelAspectRatio.SQUARE._denominator(),
1610
+ sceneChangeDetect: (p.sceneChangeDetect ?? H265SceneChangeDetect.ENABLED).value,
1611
+ timecodeBurninSettings: p.timecodeBurnin ? {
1612
+ fontSize: p.timecodeBurnin.fontSize?.value,
1613
+ position: p.timecodeBurnin.position?.value,
1614
+ prefix: p.timecodeBurnin.prefix,
1615
+ } : undefined,
1616
+ adaptiveQuantization: (p.adaptiveQuantization ?? H265AdaptiveQuantization.AUTO).value,
1617
+ afdSignaling: (p.afdSignaling ?? AfdSignaling.NONE).value,
1618
+ alternativeTransferFunction: p.alternativeTransferFunction?.value,
1619
+ bufSize: p.bufSize,
1620
+ colorMetadata: p.colorMetadata?.value,
1621
+ colorSpaceSettings: p.colorSpaceSettings?._bind(),
1622
+ deblocking: p.deblocking?.value,
1623
+ filterSettings: p.filterSettings?._bind(),
1624
+ fixedAfd: p.fixedAfd,
1625
+ flickerAq: p.flickerAq?.value,
1626
+ gopBReference: p.gopBReference?.value,
1627
+ gopClosedCadence: p.gopClosedCadence,
1628
+ gopNumBFrames: p.gopNumBFrames,
1629
+ lookAheadRateControl: p.lookAheadRateControl?.value,
1630
+ minIInterval: p.minIInterval,
1631
+ scanType: (p.scanType ?? ScanType.PROGRESSIVE).value,
1632
+ slices: p.slices,
1633
+ timecodeInsertion: p.timecodeInsertion?.value,
1634
+ minQp: p.minQp,
1635
+ minBitrate: p.minBitrate,
1636
+ mvOverPictureBoundaries: p.mvOverPictureBoundaries?.value,
1637
+ mvTemporalPredictor: p.mvTemporalPredictor?.value,
1638
+ subgopLength: p.subgopLength?.value,
1639
+ tileHeight: p.tileHeight,
1640
+ tilePadding: p.tilePadding?.value,
1641
+ tileWidth: p.tileWidth,
1642
+ treeblockSize: p.treeblockSize?.value,
1643
+ },
1644
+ };
1645
+ }
1646
+ }
1647
+ /** @internal */
1648
+ class Av1VideoCodecSettings extends VideoCodecSettings {
1649
+ props;
1650
+ _codecType = VideoCodecType.AV1;
1651
+ constructor(props) {
1652
+ super();
1653
+ this.props = props;
1654
+ }
1655
+ _hasExplicitFramerate() {
1656
+ return this.props.framerate != null;
1657
+ }
1658
+ _bind() {
1659
+ const p = this.props;
1660
+ const rc = p.rateControl;
1661
+ return {
1662
+ av1Settings: {
1663
+ bitrate: rc?._bitrate?.toBps(),
1664
+ maxBitrate: rc?._maxBitrate?.toBps(),
1665
+ rateControlMode: rc?._mode,
1666
+ qvbrQualityLevel: rc?._qvbrQualityLevel,
1667
+ gopSize: p.gopSize?._value ?? 1,
1668
+ gopSizeUnits: p.gopSize?._units ?? 'SECONDS',
1669
+ framerateNumerator: p.framerate?._numerator(),
1670
+ framerateDenominator: p.framerate?._denominator(),
1671
+ timecodeBurninSettings: p.timecodeBurnin ? {
1672
+ fontSize: p.timecodeBurnin.fontSize?.value,
1673
+ position: p.timecodeBurnin.position?.value,
1674
+ prefix: p.timecodeBurnin.prefix,
1675
+ } : undefined,
1676
+ afdSignaling: (p.afdSignaling ?? AfdSignaling.NONE).value,
1677
+ bitDepth: p.bitDepth?.value,
1678
+ bufSize: p.bufSize,
1679
+ colorSpaceSettings: p.colorSpaceSettings?._bind(),
1680
+ fixedAfd: p.fixedAfd,
1681
+ level: (p.level ?? Av1Level.AV1_LEVEL_AUTO).value,
1682
+ minBitrate: p.minBitrate,
1683
+ minIInterval: p.minIInterval,
1684
+ parNumerator: p.pixelAspectRatio?._numerator(),
1685
+ parDenominator: p.pixelAspectRatio?._denominator(),
1686
+ sceneChangeDetect: (p.sceneChangeDetect ?? Av1SceneChangeDetect.ENABLED).value,
1687
+ spatialAq: (p.spatialAq ?? Av1SpatialAq.ENABLED).value,
1688
+ temporalAq: (p.temporalAq ?? Av1TemporalAq.ENABLED).value,
1689
+ lookAheadRateControl: (p.lookAheadRateControl ?? LookAheadRateControl.HIGH).value,
1690
+ timecodeInsertion: p.timecodeInsertion?.value,
1691
+ },
1692
+ };
1693
+ }
1694
+ }
1695
+ /** @internal */
1696
+ class FrameCaptureVideoCodecSettings extends VideoCodecSettings {
1697
+ props;
1698
+ _codecType = VideoCodecType.FRAME_CAPTURE;
1699
+ constructor(props) {
1700
+ super();
1701
+ this.props = props;
1702
+ }
1703
+ _hasExplicitFramerate() { return true; }
1704
+ _bind() {
1705
+ const p = this.props;
1706
+ // Only emit an interval when set. Whole-second Durations render as SECONDS, sub-second as MILLISECONDS.
1707
+ const intervalMs = p.captureInterval?.toMilliseconds();
1708
+ const wholeSeconds = intervalMs !== undefined && intervalMs % 1000 === 0;
1709
+ return {
1710
+ frameCaptureSettings: {
1711
+ captureInterval: intervalMs === undefined ? undefined : (wholeSeconds ? intervalMs / 1000 : intervalMs),
1712
+ captureIntervalUnits: intervalMs === undefined ? undefined : (wholeSeconds ? 'SECONDS' : 'MILLISECONDS'),
1713
+ timecodeBurninSettings: p.timecodeBurnin ? {
1714
+ fontSize: p.timecodeBurnin.fontSize?.value,
1715
+ position: p.timecodeBurnin.position?.value,
1716
+ prefix: p.timecodeBurnin.prefix,
1717
+ } : undefined,
1718
+ },
1719
+ };
1720
+ }
1721
+ }
1722
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlkZW8tY29kZWMtc2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2aWRlby1jb2RlYy1zZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSw2Q0FBNkQ7QUFFN0QsNEVBQTREO0FBRTVELHFDQUE0QztBQUU1Qzs7R0FFRztBQUNILE1BQWEsV0FBVzs7SUFDdEIsdUJBQXVCO0lBQ2hCLE1BQU0sQ0FBVSxRQUFRLEdBQUcsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUQsbUJBQW1CO0lBQ1osTUFBTSxDQUFVLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0RCxtQkFBbUI7SUFDWixNQUFNLENBQVUsSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RELDBCQUEwQjtJQUNuQixNQUFNLENBQVUsVUFBVSxHQUFHLElBQUksV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xFLHlCQUF5QjtJQUNsQixNQUFNLENBQVUsUUFBUSxHQUFHLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlELGdDQUFnQztJQUN6QixNQUFNLENBQVUsY0FBYyxHQUFHLElBQUksV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFMUUsMkNBQTJDO0lBQ3BDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBYTtRQUM1QixPQUFPLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQy9CO0lBRUQsNERBQTREO0lBQzVDLEtBQUssQ0FBUztJQUU5QixZQUFvQixLQUFhO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0tBQ3BCOztBQXhCSCxrQ0F5QkM7QUFFRDs7R0FFRztBQUNILE1BQWEsU0FBUzs7SUFDcEIsY0FBYztJQUNQLE1BQU0sQ0FBVSxZQUFZLEdBQUcsSUFBSSxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEUs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b0JBQW9CLEVBQUU7Z0JBQ3BCLGVBQWUsRUFBRSxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7Z0JBQ3ZHLG9CQUFvQixFQUFFLFVBQVUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO2dCQUN4RyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztvQkFDekMsUUFBUSxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLEtBQUs7b0JBQzFDLFFBQVEsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxLQUFLO29CQUMxQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNO2lCQUNoQyxDQUFDLENBQUMsQ0FBQyxTQUFTO2FBQ2Q7U0FDRixDQUFDO0tBQ0g7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQml0cmF0ZSwgRHVyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBUb2tlbiwgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgdHlwZSB7IENmbkNoYW5uZWwgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbWVkaWFsaXZlJztcbmltcG9ydCB7IGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHR5cGUgeyBGcmFtZXJhdGUgfSBmcm9tICcuL2ZyYW1lcmF0ZSc7XG5pbXBvcnQgeyBQaXhlbEFzcGVjdFJhdGlvIH0gZnJvbSAnLi9zaGFyZWQnO1xuXG4vKipcbiAqIEguMjY0IHByb2ZpbGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBIMjY0UHJvZmlsZSB7XG4gIC8qKiBCYXNlbGluZSBwcm9maWxlICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQkFTRUxJTkUgPSBuZXcgSDI2NFByb2ZpbGUoJ0JBU0VMSU5FJyk7XG4gIC8qKiBNYWluIHByb2ZpbGUgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNQUlOID0gbmV3IEgyNjRQcm9maWxlKCdNQUlOJyk7XG4gIC8qKiBIaWdoIHByb2ZpbGUgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBISUdIID0gbmV3IEgyNjRQcm9maWxlKCdISUdIJyk7XG4gIC8qKiBIaWdoIDEwLWJpdCBwcm9maWxlICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSElHSF8xMEJJVCA9IG5ldyBIMjY0UHJvZmlsZSgnSElHSF8xMEJJVCcpO1xuICAvKiogSGlnaCA0OjI6MiBwcm9maWxlICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSElHSF80MjIgPSBuZXcgSDI2NFByb2ZpbGUoJ0hJR0hfNDIyJyk7XG4gIC8qKiBIaWdoIDQ6MjoyIDEwLWJpdCBwcm9maWxlICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSElHSF80MjJfMTBCSVQgPSBuZXcgSDI2NFByb2ZpbGUoJ0hJR0hfNDIyXzEwQklUJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBIMjY0UHJvZmlsZSB7XG4gICAgcmV0dXJuIG5ldyBIMjY0UHJvZmlsZSh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjQgbGV2ZWwuXG4gKi9cbmV4cG9ydCBjbGFzcyBIMjY0TGV2ZWwge1xuICAvKiogTGV2ZWwgMSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjRfTEVWRUxfMSA9IG5ldyBIMjY0TGV2ZWwoJ0gyNjRfTEVWRUxfMScpO1xuICAvKiogTGV2ZWwgMS4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF8xXzEgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzFfMScpO1xuICAvKiogTGV2ZWwgMS4yICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF8xXzIgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzFfMicpO1xuICAvKiogTGV2ZWwgMS4zICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF8xXzMgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzFfMycpO1xuICAvKiogTGV2ZWwgMiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjRfTEVWRUxfMiA9IG5ldyBIMjY0TGV2ZWwoJ0gyNjRfTEVWRUxfMicpO1xuICAvKiogTGV2ZWwgMi4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF8yXzEgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzJfMScpO1xuICAvKiogTGV2ZWwgMi4yICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF8yXzIgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzJfMicpO1xuICAvKiogTGV2ZWwgMyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjRfTEVWRUxfMyA9IG5ldyBIMjY0TGV2ZWwoJ0gyNjRfTEVWRUxfMycpO1xuICAvKiogTGV2ZWwgMy4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF8zXzEgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzNfMScpO1xuICAvKiogTGV2ZWwgMy4yICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF8zXzIgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzNfMicpO1xuICAvKiogTGV2ZWwgNCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjRfTEVWRUxfNCA9IG5ldyBIMjY0TGV2ZWwoJ0gyNjRfTEVWRUxfNCcpO1xuICAvKiogTGV2ZWwgNC4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF80XzEgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzRfMScpO1xuICAvKiogTGV2ZWwgNC4yICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF80XzIgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzRfMicpO1xuICAvKiogTGV2ZWwgNSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjRfTEVWRUxfNSA9IG5ldyBIMjY0TGV2ZWwoJ0gyNjRfTEVWRUxfNScpO1xuICAvKiogTGV2ZWwgNS4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF81XzEgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzVfMScpO1xuICAvKiogTGV2ZWwgNS4yICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF81XzIgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzVfMicpO1xuICAvKiogQXV0by1zZWxlY3QgdGhlIGxldmVsIGJhc2VkIG9uIHRoZSBlbmNvZGUgY29uZmlndXJhdGlvbiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjRfTEVWRUxfQVVUTyA9IG5ldyBIMjY0TGV2ZWwoJ0gyNjRfTEVWRUxfQVVUTycpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogSDI2NExldmVsIHtcbiAgICByZXR1cm4gbmV3IEgyNjRMZXZlbCh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjUgbGV2ZWwuXG4gKi9cbmV4cG9ydCBjbGFzcyBIMjY1TGV2ZWwge1xuICAvKiogTGV2ZWwgMSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjVfTEVWRUxfMSA9IG5ldyBIMjY1TGV2ZWwoJ0gyNjVfTEVWRUxfMScpO1xuICAvKiogTGV2ZWwgMiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjVfTEVWRUxfMiA9IG5ldyBIMjY1TGV2ZWwoJ0gyNjVfTEVWRUxfMicpO1xuICAvKiogTGV2ZWwgMi4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NV9MRVZFTF8yXzEgPSBuZXcgSDI2NUxldmVsKCdIMjY1X0xFVkVMXzJfMScpO1xuICAvKiogTGV2ZWwgMyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjVfTEVWRUxfMyA9IG5ldyBIMjY1TGV2ZWwoJ0gyNjVfTEVWRUxfMycpO1xuICAvKiogTGV2ZWwgMy4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NV9MRVZFTF8zXzEgPSBuZXcgSDI2NUxldmVsKCdIMjY1X0xFVkVMXzNfMScpO1xuICAvKiogTGV2ZWwgNCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjVfTEVWRUxfNCA9IG5ldyBIMjY1TGV2ZWwoJ0gyNjVfTEVWRUxfNCcpO1xuICAvKiogTGV2ZWwgNC4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NV9MRVZFTF80XzEgPSBuZXcgSDI2NUxldmVsKCdIMjY1X0xFVkVMXzRfMScpO1xuICAvKiogTGV2ZWwgNSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjVfTEVWRUxfNSA9IG5ldyBIMjY1TGV2ZWwoJ0gyNjVfTEVWRUxfNScpO1xuICAvKiogTGV2ZWwgNS4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NV9MRVZFTF81XzEgPSBuZXcgSDI2NUxldmVsKCdIMjY1X0xFVkVMXzVfMScpO1xuICAvKiogTGV2ZWwgNS4yICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NV9MRVZFTF81XzIgPSBuZXcgSDI2NUxldmVsKCdIMjY1X0xFVkVMXzVfMicpO1xuICAvKiogTGV2ZWwgNiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjVfTEVWRUxfNiA9IG5ldyBIMjY1TGV2ZWwoJ0gyNjVfTEVWRUxfNicpO1xuICAvKiogTGV2ZWwgNi4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NV9MRVZFTF82XzEgPSBuZXcgSDI2NUxldmVsKCdIMjY1X0xFVkVMXzZfMScpO1xuICAvKiogTGV2ZWwgNi4yICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NV9MRVZFTF82XzIgPSBuZXcgSDI2NUxldmVsKCdIMjY1X0xFVkVMXzZfMicpO1xuICAvKiogQXV0by1zZWxlY3QgdGhlIGxldmVsIGJhc2VkIG9uIHRoZSBlbmNvZGUgY29uZmlndXJhdGlvbiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjVfTEVWRUxfQVVUTyA9IG5ldyBIMjY1TGV2ZWwoJ0gyNjVfTEVWRUxfQVVUTycpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogSDI2NUxldmVsIHtcbiAgICByZXR1cm4gbmV3IEgyNjVMZXZlbCh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogQVYxIGxldmVsLlxuICovXG5leHBvcnQgY2xhc3MgQXYxTGV2ZWwge1xuICAvKiogTGV2ZWwgMiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFWMV9MRVZFTF8yID0gbmV3IEF2MUxldmVsKCdBVjFfTEVWRUxfMicpO1xuICAvKiogTGV2ZWwgMi4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVYxX0xFVkVMXzJfMSA9IG5ldyBBdjFMZXZlbCgnQVYxX0xFVkVMXzJfMScpO1xuICAvKiogTGV2ZWwgMyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFWMV9MRVZFTF8zID0gbmV3IEF2MUxldmVsKCdBVjFfTEVWRUxfMycpO1xuICAvKiogTGV2ZWwgMy4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVYxX0xFVkVMXzNfMSA9IG5ldyBBdjFMZXZlbCgnQVYxX0xFVkVMXzNfMScpO1xuICAvKiogTGV2ZWwgNCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFWMV9MRVZFTF80ID0gbmV3IEF2MUxldmVsKCdBVjFfTEVWRUxfNCcpO1xuICAvKiogTGV2ZWwgNC4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVYxX0xFVkVMXzRfMSA9IG5ldyBBdjFMZXZlbCgnQVYxX0xFVkVMXzRfMScpO1xuICAvKiogTGV2ZWwgNSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFWMV9MRVZFTF81ID0gbmV3IEF2MUxldmVsKCdBVjFfTEVWRUxfNScpO1xuICAvKiogTGV2ZWwgNS4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVYxX0xFVkVMXzVfMSA9IG5ldyBBdjFMZXZlbCgnQVYxX0xFVkVMXzVfMScpO1xuICAvKiogTGV2ZWwgNS4yICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVYxX0xFVkVMXzVfMiA9IG5ldyBBdjFMZXZlbCgnQVYxX0xFVkVMXzVfMicpO1xuICAvKiogTGV2ZWwgNS4zICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVYxX0xFVkVMXzVfMyA9IG5ldyBBdjFMZXZlbCgnQVYxX0xFVkVMXzVfMycpO1xuICAvKiogTGV2ZWwgNiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFWMV9MRVZFTF82ID0gbmV3IEF2MUxldmVsKCdBVjFfTEVWRUxfNicpO1xuICAvKiogTGV2ZWwgNi4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVYxX0xFVkVMXzZfMSA9IG5ldyBBdjFMZXZlbCgnQVYxX0xFVkVMXzZfMScpO1xuICAvKiogTGV2ZWwgNi4yICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVYxX0xFVkVMXzZfMiA9IG5ldyBBdjFMZXZlbCgnQVYxX0xFVkVMXzZfMicpO1xuICAvKiogTGV2ZWwgNi4zICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVYxX0xFVkVMXzZfMyA9IG5ldyBBdjFMZXZlbCgnQVYxX0xFVkVMXzZfMycpO1xuICAvKiogQXV0by1zZWxlY3QgdGhlIGxldmVsIGJhc2VkIG9uIHRoZSBlbmNvZGUgY29uZmlndXJhdGlvbiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFWMV9MRVZFTF9BVVRPID0gbmV3IEF2MUxldmVsKCdBVjFfTEVWRUxfQVVUTycpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogQXYxTGV2ZWwge1xuICAgIHJldHVybiBuZXcgQXYxTGV2ZWwodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEguMjY0IGFkYXB0aXZlIHF1YW50aXphdGlvbiBzdHJlbmd0aC5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjRBZGFwdGl2ZVF1YW50aXphdGlvbiB7XG4gIC8qKiBBdXRvICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVVUTyA9IG5ldyBIMjY0QWRhcHRpdmVRdWFudGl6YXRpb24oJ0FVVE8nKTtcbiAgLyoqIEhpZ2ggKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBISUdIID0gbmV3IEgyNjRBZGFwdGl2ZVF1YW50aXphdGlvbignSElHSCcpO1xuICAvKiogSGlnaGVyICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSElHSEVSID0gbmV3IEgyNjRBZGFwdGl2ZVF1YW50aXphdGlvbignSElHSEVSJyk7XG4gIC8qKiBMb3cgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMT1cgPSBuZXcgSDI2NEFkYXB0aXZlUXVhbnRpemF0aW9uKCdMT1cnKTtcbiAgLyoqIE1heCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BWCA9IG5ldyBIMjY0QWRhcHRpdmVRdWFudGl6YXRpb24oJ01BWCcpO1xuICAvKiogTWVkaXVtICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUVESVVNID0gbmV3IEgyNjRBZGFwdGl2ZVF1YW50aXphdGlvbignTUVESVVNJyk7XG4gIC8qKiBPZmYgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPRkYgPSBuZXcgSDI2NEFkYXB0aXZlUXVhbnRpemF0aW9uKCdPRkYnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEgyNjRBZGFwdGl2ZVF1YW50aXphdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBIMjY0QWRhcHRpdmVRdWFudGl6YXRpb24odmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEdPUCBzaXplIChrZXlmcmFtZSBpbnRlcnZhbCkuIFVzZSB0aGUgc3RhdGljIGZhY3RvcnkgbWV0aG9kcyB0byBzcGVjaWZ5IGluIGZyYW1lcyBvciBzZWNvbmRzLlxuICpcbiAqIFRoZSB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiBXaGVuIGV4cHJlc3NlZCBpbiBmcmFtZXMgaXQgbXVzdCBiZSBhIHdob2xlIG51bWJlcjtcbiAqIHdoZW4gZXhwcmVzc2VkIGluIHNlY29uZHMgaXQgbWF5IGJlIGZyYWN0aW9uYWwuXG4gKi9cbmV4cG9ydCBjbGFzcyBHb3BTaXplIHtcbiAgLyoqIEdPUCBzaXplIGluIHNlY29uZHMuIE1heSBiZSBmcmFjdGlvbmFsIChlLmcuIGAxLjVgKS4gKi9cbiAgcHVibGljIHN0YXRpYyBzZWNvbmRzKHZhbHVlOiBudW1iZXIpOiBHb3BTaXplIHtcbiAgICByZXR1cm4gbmV3IEdvcFNpemUodmFsdWUsICdTRUNPTkRTJyk7XG4gIH1cbiAgLyoqIEdPUCBzaXplIGluIGZyYW1lcy4gTXVzdCBiZSBhIHdob2xlIG51bWJlci4gKi9cbiAgcHVibGljIHN0YXRpYyBmcmFtZXModmFsdWU6IG51bWJlcik6IEdvcFNpemUge1xuICAgIHJldHVybiBuZXcgR29wU2l6ZSh2YWx1ZSwgJ0ZSQU1FUycpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgX3ZhbHVlOiBudW1iZXI7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIHJlYWRvbmx5IF91bml0czogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IG51bWJlciwgdW5pdHM6IHN0cmluZykge1xuICAgIC8vIE1lZGlhTGl2ZSByZXF1aXJlcyBnb3BTaXplID4gMCBmb3IgYm90aCB1bml0cy4gV2hlbiB0aGUgdW5pdCBpcyBGUkFNRVMgdGhlIHZhbHVlXG4gICAgLy8gbXVzdCBiZSBhIHdob2xlIG51bWJlciAoYSBmcmFjdGlvbmFsIGZyYW1lIGlzIG1lYW5pbmdsZXNzKTsgU0VDT05EUyBtYXkgYmVcbiAgICAvLyBmcmFjdGlvbmFsLiBTZWUgdGhlIEgyNjQvSDI2NS9BVjEvTVBFRy0yIGdvcFNpemUgZG9jcyAoXCJtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvXCI7XG4gICAgLy8gZnJhbWVzIGFyZSBjb252ZXJ0ZWQgdG8gYSBmcmFtZSBjb3VudCBhdCBydW50aW1lKS5cbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZCh2YWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZSA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgR29wU2l6ZWAsIGBHT1Agc2l6ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgICB9XG4gICAgICBpZiAodW5pdHMgPT09ICdGUkFNRVMnICYmICFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YEdvcFNpemVGcmFtZXNgLCBgR09QIHNpemUgaW4gZnJhbWVzIG11c3QgYmUgYSB3aG9sZSBudW1iZXIsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLl91bml0cyA9IHVuaXRzO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTaGFyZWQgZW51bXMgKHVzZWQgYnkgbXVsdGlwbGUgY29kZWNzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBBRkQgc2lnbmFsaW5nIG1vZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBBZmRTaWduYWxpbmcge1xuICAvKiogQXV0byDigJQgcHJlc2VydmUgaW5wdXQgQUZEIHZhbHVlICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVVUTyA9IG5ldyBBZmRTaWduYWxpbmcoJ0FVVE8nKTtcbiAgLyoqIEZpeGVkIOKAlCB1c2UgdGhlIHZhbHVlIGZyb20gZml4ZWRBZmQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGSVhFRCA9IG5ldyBBZmRTaWduYWxpbmcoJ0ZJWEVEJyk7XG4gIC8qKiBOb25lIOKAlCBkbyBub3Qgd3JpdGUgQUZEICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ORSA9IG5ldyBBZmRTaWduYWxpbmcoJ05PTkUnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEFmZFNpZ25hbGluZyB7XG4gICAgcmV0dXJuIG5ldyBBZmRTaWduYWxpbmcodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIENvbG9yIG1ldGFkYXRhIGluY2x1c2lvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbG9yTWV0YWRhdGEge1xuICAvKiogSWdub3JlIOKAlCBkbyBub3QgaW5jbHVkZSBjb2xvciBtZXRhZGF0YSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElHTk9SRSA9IG5ldyBDb2xvck1ldGFkYXRhKCdJR05PUkUnKTtcbiAgLyoqIEluc2VydCDigJQgaW5jbHVkZSBjb2xvciBtZXRhZGF0YSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElOU0VSVCA9IG5ldyBDb2xvck1ldGFkYXRhKCdJTlNFUlQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IENvbG9yTWV0YWRhdGEge1xuICAgIHJldHVybiBuZXcgQ29sb3JNZXRhZGF0YSh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogU2NhbiB0eXBlIGZvciB0aGUgb3V0cHV0IHZpZGVvLlxuICovXG5leHBvcnQgY2xhc3MgU2NhblR5cGUge1xuICAvKiogSW50ZXJsYWNlZCAodG9wIGZpZWxkIGZpcnN0KSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElOVEVSTEFDRUQgPSBuZXcgU2NhblR5cGUoJ0lOVEVSTEFDRUQnKTtcbiAgLyoqIFByb2dyZXNzaXZlICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPR1JFU1NJVkUgPSBuZXcgU2NhblR5cGUoJ1BST0dSRVNTSVZFJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBTY2FuVHlwZSB7XG4gICAgcmV0dXJuIG5ldyBTY2FuVHlwZSh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogRmxpY2tlciBhZGFwdGl2ZSBxdWFudGl6YXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBGbGlja2VyQXEge1xuICAvKiogRW5hYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVOQUJMRUQgPSBuZXcgRmxpY2tlckFxKCdFTkFCTEVEJyk7XG4gIC8qKiBEaXNhYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERJU0FCTEVEID0gbmV3IEZsaWNrZXJBcSgnRElTQUJMRUQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEZsaWNrZXJBcSB7XG4gICAgcmV0dXJuIG5ldyBGbGlja2VyQXEodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEdPUCBCLWZyYW1lIHJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEdvcEJSZWZlcmVuY2Uge1xuICAvKiogRW5hYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVOQUJMRUQgPSBuZXcgR29wQlJlZmVyZW5jZSgnRU5BQkxFRCcpO1xuICAvKiogRGlzYWJsZWQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBESVNBQkxFRCA9IG5ldyBHb3BCUmVmZXJlbmNlKCdESVNBQkxFRCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogR29wQlJlZmVyZW5jZSB7XG4gICAgcmV0dXJuIG5ldyBHb3BCUmVmZXJlbmNlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBMb29rYWhlYWQgcmF0ZSBjb250cm9sLlxuICovXG5leHBvcnQgY2xhc3MgTG9va0FoZWFkUmF0ZUNvbnRyb2wge1xuICAvKiogSGlnaCDigJQgYmV0dGVyIHF1YWxpdHksIG1vcmUgbGF0ZW5jeSBhbmQgbWVtb3J5ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSElHSCA9IG5ldyBMb29rQWhlYWRSYXRlQ29udHJvbCgnSElHSCcpO1xuICAvKiogTG93IOKAlCBsZXNzIGxhdGVuY3kgYW5kIG1lbW9yeSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExPVyA9IG5ldyBMb29rQWhlYWRSYXRlQ29udHJvbCgnTE9XJyk7XG4gIC8qKiBNZWRpdW0gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNRURJVU0gPSBuZXcgTG9va0FoZWFkUmF0ZUNvbnRyb2woJ01FRElVTScpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogTG9va0FoZWFkUmF0ZUNvbnRyb2wge1xuICAgIHJldHVybiBuZXcgTG9va0FoZWFkUmF0ZUNvbnRyb2wodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFRpbWVjb2RlIGluc2VydGlvbiBtb2RlLlxuICpcbiAqIEByZW1hcmtzIFRoaXMgY29udHJvbHMgdGltZWNvZGUgaW5zZXJ0aW9uIGluIHRoZSBvdXRwdXQgZWxlbWVudGFyeSBzdHJlYW0uXG4gKiBUbyBwcmVzZXJ2ZSBzb3VyY2UgdGltZWNvZGVzLCBzZXQgYFRpbWVjb2RlU291cmNlLkVNQkVEREVEYCBvbiB0aGUgY2hhbm5lbCdzIGB0aW1lY29kZUNvbmZpZ2AuXG4gKi9cbmV4cG9ydCBjbGFzcyBUaW1lY29kZUluc2VydGlvbiB7XG4gIC8qKiBEaXNhYmxlZCDigJQgZG8gbm90IGluY2x1ZGUgdGltZWNvZGVzICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRElTQUJMRUQgPSBuZXcgVGltZWNvZGVJbnNlcnRpb24oJ0RJU0FCTEVEJyk7XG4gIC8qKiBQSUNfVElNSU5HX1NFSSDigJQgcGFzcyB0aHJvdWdoIHBpY3R1cmUgdGltaW5nIFNFSSBtZXNzYWdlcyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBJQ19USU1JTkdfU0VJID0gbmV3IFRpbWVjb2RlSW5zZXJ0aW9uKCdQSUNfVElNSU5HX1NFSScpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogVGltZWNvZGVJbnNlcnRpb24ge1xuICAgIHJldHVybiBuZXcgVGltZWNvZGVJbnNlcnRpb24odmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFN1Yi1HT1AgbGVuZ3RoIG1vZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdWJnb3BMZW5ndGgge1xuICAvKiogRHluYW1pYyDigJQgbGV0IE1lZGlhTGl2ZSBvcHRpbWl6ZSBCLWZyYW1lcyBwZXIgc3ViLUdPUCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERZTkFNSUMgPSBuZXcgU3ViZ29wTGVuZ3RoKCdEWU5BTUlDJyk7XG4gIC8qKiBGaXhlZCDigJQgdXNlIGdvcE51bUJGcmFtZXMgaW4gZWFjaCBzdWItR09QICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRklYRUQgPSBuZXcgU3ViZ29wTGVuZ3RoKCdGSVhFRCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogU3ViZ29wTGVuZ3RoIHtcbiAgICByZXR1cm4gbmV3IFN1YmdvcExlbmd0aCh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBILjI2NC1zcGVjaWZpYyBlbnVtc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBILjI2NCBlbnRyb3B5IGVuY29kaW5nIG1vZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBIMjY0RW50cm9weUVuY29kaW5nIHtcbiAgLyoqIENBQkFDIChyZXF1aXJlcyBNYWluIG9yIEhpZ2ggcHJvZmlsZSkgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDQUJBQyA9IG5ldyBIMjY0RW50cm9weUVuY29kaW5nKCdDQUJBQycpO1xuICAvKiogQ0FWTEMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDQVZMQyA9IG5ldyBIMjY0RW50cm9weUVuY29kaW5nKCdDQVZMQycpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogSDI2NEVudHJvcHlFbmNvZGluZyB7XG4gICAgcmV0dXJuIG5ldyBIMjY0RW50cm9weUVuY29kaW5nKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBILjI2NCBmb3JjZSBmaWVsZCBwaWN0dXJlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjRGb3JjZUZpZWxkUGljdHVyZXMge1xuICAvKiogRW5hYmxlZCDigJQgZm9yY2UgY29kaW5nIG9uIGEgZmllbGQgYmFzaXMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTkFCTEVEID0gbmV3IEgyNjRGb3JjZUZpZWxkUGljdHVyZXMoJ0VOQUJMRUQnKTtcbiAgLyoqIERpc2FibGVkIOKAlCBsZXQgZW5jb2RlciBkZWNpZGUgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBESVNBQkxFRCA9IG5ldyBIMjY0Rm9yY2VGaWVsZFBpY3R1cmVzKCdESVNBQkxFRCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogSDI2NEZvcmNlRmllbGRQaWN0dXJlcyB7XG4gICAgcmV0dXJuIG5ldyBIMjY0Rm9yY2VGaWVsZFBpY3R1cmVzKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBILjI2NCBzeW50YXggbW9kZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjRTeW50YXgge1xuICAvKiogRGVmYXVsdCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFQgPSBuZXcgSDI2NFN5bnRheCgnREVGQVVMVCcpO1xuICAvKiogUlAtMjAyNyBjb21wbGlhbnQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSUDIwMjcgPSBuZXcgSDI2NFN5bnRheCgnUlAyMDI3Jyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBIMjY0U3ludGF4IHtcbiAgICByZXR1cm4gbmV3IEgyNjRTeW50YXgodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEguMjY0IHF1YWxpdHkgbGV2ZWwuXG4gKi9cbmV4cG9ydCBjbGFzcyBIMjY0UXVhbGl0eUxldmVsIHtcbiAgLyoqIEVuaGFuY2VkIHF1YWxpdHkgKG1heSBpbmN1ciBhZGRpdGlvbmFsIGNvc3QpICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRU5IQU5DRURfUVVBTElUWSA9IG5ldyBIMjY0UXVhbGl0eUxldmVsKCdFTkhBTkNFRF9RVUFMSVRZJyk7XG4gIC8qKiBTdGFuZGFyZCBxdWFsaXR5ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RBTkRBUkRfUVVBTElUWSA9IG5ldyBIMjY0UXVhbGl0eUxldmVsKCdTVEFOREFSRF9RVUFMSVRZJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBIMjY0UXVhbGl0eUxldmVsIHtcbiAgICByZXR1cm4gbmV3IEgyNjRRdWFsaXR5TGV2ZWwodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSC4yNjUtc3BlY2lmaWMgZW51bXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogSC4yNjUgYWRhcHRpdmUgcXVhbnRpemF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgSDI2NUFkYXB0aXZlUXVhbnRpemF0aW9uIHtcbiAgLyoqIEF1dG8gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBVVRPID0gbmV3IEgyNjVBZGFwdGl2ZVF1YW50aXphdGlvbignQVVUTycpO1xuICAvKiogSGlnaCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhJR0ggPSBuZXcgSDI2NUFkYXB0aXZlUXVhbnRpemF0aW9uKCdISUdIJyk7XG4gIC8qKiBIaWdoZXIgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBISUdIRVIgPSBuZXcgSDI2NUFkYXB0aXZlUXVhbnRpemF0aW9uKCdISUdIRVInKTtcbiAgLyoqIExvdyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExPVyA9IG5ldyBIMjY1QWRhcHRpdmVRdWFudGl6YXRpb24oJ0xPVycpO1xuICAvKiogTWF4ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUFYID0gbmV3IEgyNjVBZGFwdGl2ZVF1YW50aXphdGlvbignTUFYJyk7XG4gIC8qKiBNZWRpdW0gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNRURJVU0gPSBuZXcgSDI2NUFkYXB0aXZlUXVhbnRpemF0aW9uKCdNRURJVU0nKTtcbiAgLyoqIE9mZiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9GRiA9IG5ldyBIMjY1QWRhcHRpdmVRdWFudGl6YXRpb24oJ09GRicpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogSDI2NUFkYXB0aXZlUXVhbnRpemF0aW9uIHtcbiAgICByZXR1cm4gbmV3IEgyNjVBZGFwdGl2ZVF1YW50aXphdGlvbih2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjUgYWx0ZXJuYXRpdmUgdHJhbnNmZXIgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBIMjY1QWx0ZXJuYXRpdmVUcmFuc2ZlckZ1bmN0aW9uIHtcbiAgLyoqIEluc2VydCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElOU0VSVCA9IG5ldyBIMjY1QWx0ZXJuYXRpdmVUcmFuc2ZlckZ1bmN0aW9uKCdJTlNFUlQnKTtcbiAgLyoqIE9taXQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPTUlUID0gbmV3IEgyNjVBbHRlcm5hdGl2ZVRyYW5zZmVyRnVuY3Rpb24oJ09NSVQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEgyNjVBbHRlcm5hdGl2ZVRyYW5zZmVyRnVuY3Rpb24ge1xuICAgIHJldHVybiBuZXcgSDI2NUFsdGVybmF0aXZlVHJhbnNmZXJGdW5jdGlvbih2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjUgZGVibG9ja2luZyBmaWx0ZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBIMjY1RGVibG9ja2luZyB7XG4gIC8qKiBEaXNhYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERJU0FCTEVEID0gbmV3IEgyNjVEZWJsb2NraW5nKCdESVNBQkxFRCcpO1xuICAvKiogRW5hYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVOQUJMRUQgPSBuZXcgSDI2NURlYmxvY2tpbmcoJ0VOQUJMRUQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEgyNjVEZWJsb2NraW5nIHtcbiAgICByZXR1cm4gbmV3IEgyNjVEZWJsb2NraW5nKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBILjI2NSBtb3Rpb24gdmVjdG9yIG92ZXIgcGljdHVyZSBib3VuZGFyaWVzLlxuICovXG5leHBvcnQgY2xhc3MgSDI2NU12T3ZlclBpY3R1cmVCb3VuZGFyaWVzIHtcbiAgLyoqIERpc2FibGVkICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRElTQUJMRUQgPSBuZXcgSDI2NU12T3ZlclBpY3R1cmVCb3VuZGFyaWVzKCdESVNBQkxFRCcpO1xuICAvKiogRW5hYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVOQUJMRUQgPSBuZXcgSDI2NU12T3ZlclBpY3R1cmVCb3VuZGFyaWVzKCdFTkFCTEVEJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBIMjY1TXZPdmVyUGljdHVyZUJvdW5kYXJpZXMge1xuICAgIHJldHVybiBuZXcgSDI2NU12T3ZlclBpY3R1cmVCb3VuZGFyaWVzKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBILjI2NSBtb3Rpb24gdmVjdG9yIHRlbXBvcmFsIHByZWRpY3Rvci5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjVNdlRlbXBvcmFsUHJlZGljdG9yIHtcbiAgLyoqIERpc2FibGVkICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRElTQUJMRUQgPSBuZXcgSDI2NU12VGVtcG9yYWxQcmVkaWN0b3IoJ0RJU0FCTEVEJyk7XG4gIC8qKiBFbmFibGVkICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRU5BQkxFRCA9IG5ldyBIMjY1TXZUZW1wb3JhbFByZWRpY3RvcignRU5BQkxFRCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogSDI2NU12VGVtcG9yYWxQcmVkaWN0b3Ige1xuICAgIHJldHVybiBuZXcgSDI2NU12VGVtcG9yYWxQcmVkaWN0b3IodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEguMjY1IHRpbGUgcGFkZGluZy5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjVUaWxlUGFkZGluZyB7XG4gIC8qKiBOb25lICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ORSA9IG5ldyBIMjY1VGlsZVBhZGRpbmcoJ05PTkUnKTtcbiAgLyoqIFBhZGRlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBBRERFRCA9IG5ldyBIMjY1VGlsZVBhZGRpbmcoJ1BBRERFRCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogSDI2NVRpbGVQYWRkaW5nIHtcbiAgICByZXR1cm4gbmV3IEgyNjVUaWxlUGFkZGluZyh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjUgdHJlZWJsb2NrIHNpemUuXG4gKi9cbmV4cG9ydCBjbGFzcyBIMjY1VHJlZWJsb2NrU2l6ZSB7XG4gIC8qKiBBdXRvICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVVUTyA9IG5ldyBIMjY1VHJlZWJsb2NrU2l6ZSgnQVVUTycpO1xuICAvKiogMzJ4MzIgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUUkVFX1NJWkVfMzJYMzIgPSBuZXcgSDI2NVRyZWVibG9ja1NpemUoJ1RSRUVfU0laRV8zMlgzMicpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogSDI2NVRyZWVibG9ja1NpemUge1xuICAgIHJldHVybiBuZXcgSDI2NVRyZWVibG9ja1NpemUodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQVYxLXNwZWNpZmljIGVudW1zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEFWMSBiaXQgZGVwdGguXG4gKi9cbmV4cG9ydCBjbGFzcyBBdjFCaXREZXB0aCB7XG4gIC8qKiA4LWJpdCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJJVF9ERVBUSF84ID0gbmV3IEF2MUJpdERlcHRoKCdERVBUSF84Jyk7XG4gIC8qKiAxMC1iaXQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBCSVRfREVQVEhfMTAgPSBuZXcgQXYxQml0RGVwdGgoJ0RFUFRIXzEwJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBBdjFCaXREZXB0aCB7XG4gICAgcmV0dXJuIG5ldyBBdjFCaXREZXB0aCh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogQVYxIHNjZW5lIGNoYW5nZSBkZXRlY3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBBdjFTY2VuZUNoYW5nZURldGVjdCB7XG4gIC8qKiBEaXNhYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERJU0FCTEVEID0gbmV3IEF2MVNjZW5lQ2hhbmdlRGV0ZWN0KCdESVNBQkxFRCcpO1xuICAvKiogRW5hYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVOQUJMRUQgPSBuZXcgQXYxU2NlbmVDaGFuZ2VEZXRlY3QoJ0VOQUJMRUQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEF2MVNjZW5lQ2hhbmdlRGV0ZWN0IHtcbiAgICByZXR1cm4gbmV3IEF2MVNjZW5lQ2hhbmdlRGV0ZWN0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBBVjEgc3BhdGlhbCBhZGFwdGl2ZSBxdWFudGl6YXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBBdjFTcGF0aWFsQXEge1xuICAvKiogRGlzYWJsZWQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBESVNBQkxFRCA9IG5ldyBBdjFTcGF0aWFsQXEoJ0RJU0FCTEVEJyk7XG4gIC8qKiBFbmFibGVkICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRU5BQkxFRCA9IG5ldyBBdjFTcGF0aWFsQXEoJ0VOQUJMRUQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEF2MVNwYXRpYWxBcSB7XG4gICAgcmV0dXJuIG5ldyBBdjFTcGF0aWFsQXEodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEFWMSB0ZW1wb3JhbCBhZGFwdGl2ZSBxdWFudGl6YXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBBdjFUZW1wb3JhbEFxIHtcbiAgLyoqIERpc2FibGVkICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRElTQUJMRUQgPSBuZXcgQXYxVGVtcG9yYWxBcSgnRElTQUJMRUQnKTtcbiAgLyoqIEVuYWJsZWQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTkFCTEVEID0gbmV3IEF2MVRlbXBvcmFsQXEoJ0VOQUJMRUQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEF2MVRlbXBvcmFsQXEge1xuICAgIHJldHVybiBuZXcgQXYxVGVtcG9yYWxBcSh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjQgc2NlbmUgY2hhbmdlIGRldGVjdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjRTY2VuZUNoYW5nZURldGVjdCB7XG4gIC8qKiBEaXNhYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERJU0FCTEVEID0gbmV3IEgyNjRTY2VuZUNoYW5nZURldGVjdCgnRElTQUJMRUQnKTtcbiAgLyoqIEVuYWJsZWQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTkFCTEVEID0gbmV3IEgyNjRTY2VuZUNoYW5nZURldGVjdCgnRU5BQkxFRCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogSDI2NFNjZW5lQ2hhbmdlRGV0ZWN0IHtcbiAgICByZXR1cm4gbmV3IEgyNjRTY2VuZUNoYW5nZURldGVjdCh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjQgc3BhdGlhbCBhZGFwdGl2ZSBxdWFudGl6YXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBIMjY0U3BhdGlhbEFxIHtcbiAgLyoqIERpc2FibGVkICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRElTQUJMRUQgPSBuZXcgSDI2NFNwYXRpYWxBcSgnRElTQUJMRUQnKTtcbiAgLyoqIEVuYWJsZWQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTkFCTEVEID0gbmV3IEgyNjRTcGF0aWFsQXEoJ0VOQUJMRUQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEgyNjRTcGF0aWFsQXEge1xuICAgIHJldHVybiBuZXcgSDI2NFNwYXRpYWxBcSh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjQgdGVtcG9yYWwgYWRhcHRpdmUgcXVhbnRpemF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgSDI2NFRlbXBvcmFsQXEge1xuICAvKiogRGlzYWJsZWQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBESVNBQkxFRCA9IG5ldyBIMjY0VGVtcG9yYWxBcSgnRElTQUJMRUQnKTtcbiAgLyoqIEVuYWJsZWQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTkFCTEVEID0gbmV3IEgyNjRUZW1wb3JhbEFxKCdFTkFCTEVEJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBIMjY0VGVtcG9yYWxBcSB7XG4gICAgcmV0dXJuIG5ldyBIMjY0VGVtcG9yYWxBcSh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjUgc2NlbmUgY2hhbmdlIGRldGVjdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjVTY2VuZUNoYW5nZURldGVjdCB7XG4gIC8qKiBEaXNhYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERJU0FCTEVEID0gbmV3IEgyNjVTY2VuZUNoYW5nZURldGVjdCgnRElTQUJMRUQnKTtcbiAgLyoqIEVuYWJsZWQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTkFCTEVEID0gbmV3IEgyNjVTY2VuZUNoYW5nZURldGVjdCgnRU5BQkxFRCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogSDI2NVNjZW5lQ2hhbmdlRGV0ZWN0IHtcbiAgICByZXR1cm4gbmV3IEgyNjVTY2VuZUNoYW5nZURldGVjdCh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogQVYxIHRpbWVjb2RlIGluc2VydGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEF2MVRpbWVjb2RlSW5zZXJ0aW9uIHtcbiAgLyoqIERpc2FibGVkIOKAlCBkbyBub3QgaW5zZXJ0IHRpbWVjb2RlcyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERJU0FCTEVEID0gbmV3IEF2MVRpbWVjb2RlSW5zZXJ0aW9uKCdESVNBQkxFRCcpO1xuICAvKipcbiAgICogSW5jbHVkZSB0aW1lY29kZXMgYXMgYSBtZXRhZGF0YSBPQlUgKE9wZW4gQml0c3RyZWFtIFVuaXQpIG9mIHR5cGVcbiAgICogYE1FVEFEQVRBX1RZUEVfVElNRUNPREVgLCBiYXNlZCBvbiB0aGUgc291cmNlIHNwZWNpZmllZCBpbiB0aGUgY2hhbm5lbCdzIHRpbWVjb2RlIGNvbmZpZy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUVUQURBVEFfT0JVID0gbmV3IEF2MVRpbWVjb2RlSW5zZXJ0aW9uKCdNRVRBREFUQV9PQlUnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEF2MVRpbWVjb2RlSW5zZXJ0aW9uIHtcbiAgICByZXR1cm4gbmV3IEF2MVRpbWVjb2RlSW5zZXJ0aW9uKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRpbWVjb2RlIGJ1cm4taW4gc2V0dGluZ3Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRm9udCBzaXplIGZvciB0aW1lY29kZSBidXJuLWluLlxuICovXG5leHBvcnQgY2xhc3MgVGltZWNvZGVCdXJuaW5Gb250U2l6ZSB7XG4gIC8qKiBFeHRyYSBzbWFsbCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVYVFJBX1NNQUxMXzEwID0gbmV3IFRpbWVjb2RlQnVybmluRm9udFNpemUoJ0VYVFJBX1NNQUxMXzEwJyk7XG4gIC8qKiBMYXJnZSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExBUkdFXzQ4ID0gbmV3IFRpbWVjb2RlQnVybmluRm9udFNpemUoJ0xBUkdFXzQ4Jyk7XG4gIC8qKiBNZWRpdW0gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNRURJVU1fMzIgPSBuZXcgVGltZWNvZGVCdXJuaW5Gb250U2l6ZSgnTUVESVVNXzMyJyk7XG4gIC8qKiBTbWFsbCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNNQUxMXzE2ID0gbmV3IFRpbWVjb2RlQnVybmluRm9udFNpemUoJ1NNQUxMXzE2Jyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBUaW1lY29kZUJ1cm5pbkZvbnRTaXplIHtcbiAgICByZXR1cm4gbmV3IFRpbWVjb2RlQnVybmluRm9udFNpemUodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFBvc2l0aW9uIGZvciB0aW1lY29kZSBidXJuLWluIG92ZXJsYXkuXG4gKi9cbmV4cG9ydCBjbGFzcyBUaW1lY29kZUJ1cm5pblBvc2l0aW9uIHtcbiAgLyoqIEJvdHRvbSBjZW50ZXIgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBCT1RUT01fQ0VOVEVSID0gbmV3IFRpbWVjb2RlQnVybmluUG9zaXRpb24oJ0JPVFRPTV9DRU5URVInKTtcbiAgLyoqIEJvdHRvbSBsZWZ0ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQk9UVE9NX0xFRlQgPSBuZXcgVGltZWNvZGVCdXJuaW5Qb3NpdGlvbignQk9UVE9NX0xFRlQnKTtcbiAgLyoqIEJvdHRvbSByaWdodCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJPVFRPTV9SSUdIVCA9IG5ldyBUaW1lY29kZUJ1cm5pblBvc2l0aW9uKCdCT1RUT01fUklHSFQnKTtcbiAgLyoqIE1pZGRsZSBjZW50ZXIgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNSURETEVfQ0VOVEVSID0gbmV3IFRpbWVjb2RlQnVybmluUG9zaXRpb24oJ01JRERMRV9DRU5URVInKTtcbiAgLyoqIE1pZGRsZSBsZWZ0ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUlERExFX0xFRlQgPSBuZXcgVGltZWNvZGVCdXJuaW5Qb3NpdGlvbignTUlERExFX0xFRlQnKTtcbiAgLyoqIE1pZGRsZSByaWdodCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1JRERMRV9SSUdIVCA9IG5ldyBUaW1lY29kZUJ1cm5pblBvc2l0aW9uKCdNSURETEVfUklHSFQnKTtcbiAgLyoqIFRvcCBjZW50ZXIgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUT1BfQ0VOVEVSID0gbmV3IFRpbWVjb2RlQnVybmluUG9zaXRpb24oJ1RPUF9DRU5URVInKTtcbiAgLyoqIFRvcCBsZWZ0ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVE9QX0xFRlQgPSBuZXcgVGltZWNvZGVCdXJuaW5Qb3NpdGlvbignVE9QX0xFRlQnKTtcbiAgLyoqIFRvcCByaWdodCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRPUF9SSUdIVCA9IG5ldyBUaW1lY29kZUJ1cm5pblBvc2l0aW9uKCdUT1BfUklHSFQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IFRpbWVjb2RlQnVybmluUG9zaXRpb24ge1xuICAgIHJldHVybiBuZXcgVGltZWNvZGVCdXJuaW5Qb3NpdGlvbih2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogU2V0dGluZ3MgZm9yIGJ1cm5pbmcgYSB0aW1lY29kZSBvdmVybGF5IGludG8gdGhlIHZpZGVvIG91dHB1dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lY29kZUJ1cm5pblNldHRpbmdzIHtcbiAgLyoqXG4gICAqIFRoZSBmb250IHNpemUgb2YgdGhlIHRpbWVjb2RlIG92ZXJsYXkuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBmb250U2l6ZT86IFRpbWVjb2RlQnVybmluRm9udFNpemU7XG4gIC8qKlxuICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIHRpbWVjb2RlIG92ZXJsYXkgb24gdGhlIHZpZGVvLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgcG9zaXRpb24/OiBUaW1lY29kZUJ1cm5pblBvc2l0aW9uO1xuICAvKipcbiAgICogQSBzdHJpbmcgcHJlcGVuZGVkIHRvIHRoZSB0aW1lY29kZSAoZS5nLiBhIGNoYW5uZWwgbmFtZSkuXG4gICAqIEBkZWZhdWx0IC0gbm8gcHJlZml4XG4gICAqL1xuICByZWFkb25seSBwcmVmaXg/OiBzdHJpbmc7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSYXRlIGNvbnRyb2wgY2xhc3NlcyAocGVyIGNvZGVjKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIFByb3BlcnRpZXMgZm9yIENCUiByYXRlIGNvbnRyb2wuICovXG5leHBvcnQgaW50ZXJmYWNlIENiclJhdGVDb250cm9sUHJvcHMge1xuICAvKiogVGhlIGNvbnN0YW50IGJpdHJhdGUuICovXG4gIHJlYWRvbmx5IGJpdHJhdGU6IEJpdHJhdGU7XG59XG5cbi8qKiBQcm9wZXJ0aWVzIGZvciBWQlIgcmF0ZSBjb250cm9sLiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYnJSYXRlQ29udHJvbFByb3BzIHtcbiAgLyoqIFRoZSBhdmVyYWdlIGJpdHJhdGUuICovXG4gIHJlYWRvbmx5IGJpdHJhdGU6IEJpdHJhdGU7XG4gIC8qKiBUaGUgbWF4aW11bSBiaXRyYXRlLiAqL1xuICByZWFkb25seSBtYXhCaXRyYXRlOiBCaXRyYXRlO1xufVxuXG4vKiogUHJvcGVydGllcyBmb3IgUVZCUiByYXRlIGNvbnRyb2wuICovXG5leHBvcnQgaW50ZXJmYWNlIFF2YnJSYXRlQ29udHJvbFByb3BzIHtcbiAgLyoqIFRoZSBtYXhpbXVtIGJpdHJhdGUuICovXG4gIHJlYWRvbmx5IG1heEJpdHJhdGU6IEJpdHJhdGU7XG4gIC8qKlxuICAgKiBUaGUgUVZCUiBxdWFsaXR5IGxldmVsICgxLTEwKS4gTGVhdmUgdW5zZXQgdG8gbGV0IE1lZGlhTGl2ZSBpbmZlciB0aGUgdGFyZ2V0IHF1YWxpdHkgZnJvbSB0aGVcbiAgICogb3V0cHV0IHJlc29sdXRpb24gYW5kIG1heCBiaXRyYXRlLlxuICAgKiBAZGVmYXVsdCAtIE1lZGlhTGl2ZSBpbmZlcnMgdGhlIHF1YWxpdHkgbGV2ZWwgZnJvbSB0aGUgcmVzb2x1dGlvbiBhbmQgbWF4IGJpdHJhdGVcbiAgICovXG4gIHJlYWRvbmx5IHF2YnJRdWFsaXR5TGV2ZWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogSC4yNjQgcmF0ZSBjb250cm9sLiBVc2UgdGhlIHN0YXRpYyBmYWN0b3J5IG1ldGhvZHMgdG8gY3JlYXRlLlxuICovXG5leHBvcnQgY2xhc3MgSDI2NFJhdGVDb250cm9sIHtcbiAgLyoqIENvbnN0YW50IGJpdHJhdGUuICovXG4gIHB1YmxpYyBzdGF0aWMgY2JyKHByb3BzOiBDYnJSYXRlQ29udHJvbFByb3BzKTogSDI2NFJhdGVDb250cm9sIHtcbiAgICByZXR1cm4gbmV3IEgyNjRSYXRlQ29udHJvbCgnQ0JSJywgcHJvcHMuYml0cmF0ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuICB9XG4gIC8qKiBWYXJpYWJsZSBiaXRyYXRlLiAqL1xuICBwdWJsaWMgc3RhdGljIHZicihwcm9wczogVmJyUmF0ZUNvbnRyb2xQcm9wcyk6IEgyNjRSYXRlQ29udHJvbCB7XG4gICAgcmV0dXJuIG5ldyBIMjY0UmF0ZUNvbnRyb2woJ1ZCUicsIHByb3BzLmJpdHJhdGUsIHByb3BzLm1heEJpdHJhdGUsIHVuZGVmaW5lZCk7XG4gIH1cbiAgLyoqIFF1YWxpdHktZGVmaW5lZCB2YXJpYWJsZSBiaXRyYXRlLiAqL1xuICBwdWJsaWMgc3RhdGljIHF2YnIocHJvcHM6IFF2YnJSYXRlQ29udHJvbFByb3BzKTogSDI2NFJhdGVDb250cm9sIHtcbiAgICByZXR1cm4gbmV3IEgyNjRSYXRlQ29udHJvbCgnUVZCUicsIHVuZGVmaW5lZCwgcHJvcHMubWF4Qml0cmF0ZSwgcHJvcHMucXZiclF1YWxpdHlMZXZlbCk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyByZWFkb25seSBfbW9kZTogc3RyaW5nO1xuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyByZWFkb25seSBfYml0cmF0ZTogQml0cmF0ZSB8IHVuZGVmaW5lZDtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgX21heEJpdHJhdGU6IEJpdHJhdGUgfCB1bmRlZmluZWQ7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIHJlYWRvbmx5IF9xdmJyUXVhbGl0eUxldmVsOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihtb2RlOiBzdHJpbmcsIGJpdHJhdGU6IEJpdHJhdGUgfCB1bmRlZmluZWQsIG1heEJpdHJhdGU6IEJpdHJhdGUgfCB1bmRlZmluZWQsIHF2YnJRdWFsaXR5TGV2ZWw6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX21vZGUgPSBtb2RlO1xuICAgIHRoaXMuX2JpdHJhdGUgPSBiaXRyYXRlO1xuICAgIHRoaXMuX21heEJpdHJhdGUgPSBtYXhCaXRyYXRlO1xuICAgIHRoaXMuX3F2YnJRdWFsaXR5TGV2ZWwgPSBxdmJyUXVhbGl0eUxldmVsO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjUgcmF0ZSBjb250cm9sLiBVc2UgdGhlIHN0YXRpYyBmYWN0b3J5IG1ldGhvZHMgdG8gY3JlYXRlLlxuICovXG5leHBvcnQgY2xhc3MgSDI2NVJhdGVDb250cm9sIHtcbiAgLyoqIENvbnN0YW50IGJpdHJhdGUuICovXG4gIHB1YmxpYyBzdGF0aWMgY2JyKHByb3BzOiBDYnJSYXRlQ29udHJvbFByb3BzKTogSDI2NVJhdGVDb250cm9sIHtcbiAgICByZXR1cm4gbmV3IEgyNjVSYXRlQ29udHJvbCgnQ0JSJywgcHJvcHMuYml0cmF0ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuICB9XG4gIC8qKiBWYXJpYWJsZSBiaXRyYXRlLiAqL1xuICBwdWJsaWMgc3RhdGljIHZicihwcm9wczogVmJyUmF0ZUNvbnRyb2xQcm9wcyk6IEgyNjVSYXRlQ29udHJvbCB7XG4gICAgcmV0dXJuIG5ldyBIMjY1UmF0ZUNvbnRyb2woJ1ZCUicsIHByb3BzLmJpdHJhdGUsIHByb3BzLm1heEJpdHJhdGUsIHVuZGVmaW5lZCk7XG4gIH1cbiAgLyoqIFF1YWxpdHktZGVmaW5lZCB2YXJpYWJsZSBiaXRyYXRlLiAqL1xuICBwdWJsaWMgc3RhdGljIHF2YnIocHJvcHM6IFF2YnJSYXRlQ29udHJvbFByb3BzKTogSDI2NVJhdGVDb250cm9sIHtcbiAgICByZXR1cm4gbmV3IEgyNjVSYXRlQ29udHJvbCgnUVZCUicsIHVuZGVmaW5lZCwgcHJvcHMubWF4Qml0cmF0ZSwgcHJvcHMucXZiclF1YWxpdHlMZXZlbCk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyByZWFkb25seSBfbW9kZTogc3RyaW5nO1xuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyByZWFkb25seSBfYml0cmF0ZTogQml0cmF0ZSB8IHVuZGVmaW5lZDtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgX21heEJpdHJhdGU6IEJpdHJhdGUgfCB1bmRlZmluZWQ7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIHJlYWRvbmx5IF9xdmJyUXVhbGl0eUxldmVsOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihtb2RlOiBzdHJpbmcsIGJpdHJhdGU6IEJpdHJhdGUgfCB1bmRlZmluZWQsIG1heEJpdHJhdGU6IEJpdHJhdGUgfCB1bmRlZmluZWQsIHF2YnJRdWFsaXR5TGV2ZWw6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX21vZGUgPSBtb2RlO1xuICAgIHRoaXMuX2JpdHJhdGUgPSBiaXRyYXRlO1xuICAgIHRoaXMuX21heEJpdHJhdGUgPSBtYXhCaXRyYXRlO1xuICAgIHRoaXMuX3F2YnJRdWFsaXR5TGV2ZWwgPSBxdmJyUXVhbGl0eUxldmVsO1xuICB9XG59XG5cbi8qKlxuICogQVYxIHJhdGUgY29udHJvbC4gQVYxIHN1cHBvcnRzIFFWQlIgYW5kIENCUi5cbiAqL1xuZXhwb3J0IGNsYXNzIEF2MVJhdGVDb250cm9sIHtcbiAgLyoqIFF1YWxpdHktZGVmaW5lZCB2YXJpYWJsZSBiaXRyYXRlLiAqL1xuICBwdWJsaWMgc3RhdGljIHF2YnIocHJvcHM6IFF2YnJSYXRlQ29udHJvbFByb3BzKTogQXYxUmF0ZUNvbnRyb2wge1xuICAgIHJldHVybiBuZXcgQXYxUmF0ZUNvbnRyb2woJ1FWQlInLCB1bmRlZmluZWQsIHByb3BzLm1heEJpdHJhdGUsIHByb3BzLnF2YnJRdWFsaXR5TGV2ZWwpO1xuICB9XG4gIC8qKiBDb25zdGFudCBiaXRyYXRlLiAqL1xuICBwdWJsaWMgc3RhdGljIGNicihwcm9wczogQ2JyUmF0ZUNvbnRyb2xQcm9wcyk6IEF2MVJhdGVDb250cm9sIHtcbiAgICByZXR1cm4gbmV3IEF2MVJhdGVDb250cm9sKCdDQlInLCBwcm9wcy5iaXRyYXRlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyByZWFkb25seSBfbW9kZTogc3RyaW5nO1xuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyByZWFkb25seSBfYml0cmF0ZTogQml0cmF0ZSB8IHVuZGVmaW5lZDtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgX21heEJpdHJhdGU6IEJpdHJhdGUgfCB1bmRlZmluZWQ7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIHJlYWRvbmx5IF9xdmJyUXVhbGl0eUxldmVsOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihtb2RlOiBzdHJpbmcsIGJpdHJhdGU6IEJpdHJhdGUgfCB1bmRlZmluZWQsIG1heEJpdHJhdGU6IEJpdHJhdGUgfCB1bmRlZmluZWQsIHF2YnJRdWFsaXR5TGV2ZWw6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX21vZGUgPSBtb2RlO1xuICAgIHRoaXMuX2JpdHJhdGUgPSBiaXRyYXRlO1xuICAgIHRoaXMuX21heEJpdHJhdGUgPSBtYXhCaXRyYXRlO1xuICAgIHRoaXMuX3F2YnJRdWFsaXR5TGV2ZWwgPSBxdmJyUXVhbGl0eUxldmVsO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb2xvciBzcGFjZSBzZXR0aW5ncyBjbGFzc2VzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENvbG9yIHNwYWNlIHNldHRpbmdzIGZvciBILjI2NCB2aWRlby5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjRDb2xvclNwYWNlU2V0dGluZ3Mge1xuICAvKiogUGFzcyB0aHJvdWdoIHRoZSBzb3VyY2UgY29sb3Igc3BhY2Ugd2l0aCBubyBjb252ZXJzaW9uLiAqL1xuICBwdWJsaWMgc3RhdGljIHBhc3N0aHJvdWdoKCk6IEgyNjRDb2xvclNwYWNlU2V0dGluZ3Mge1xuICAgIHJldHVybiBuZXcgSDI2NENvbG9yU3BhY2VTZXR0aW5ncyh7IGNvbG9yU3BhY2VQYXNzdGhyb3VnaFNldHRpbmdzOiB7fSB9KTtcbiAgfVxuICAvKiogQ29udmVydCB0byBSZWMuNjAxIGNvbG9yIHNwYWNlLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYzYwMSgpOiBIMjY0Q29sb3JTcGFjZVNldHRpbmdzIHtcbiAgICByZXR1cm4gbmV3IEgyNjRDb2xvclNwYWNlU2V0dGluZ3MoeyByZWM2MDFTZXR0aW5nczoge30gfSk7XG4gIH1cbiAgLyoqIENvbnZlcnQgdG8gUmVjLjcwOSBjb2xvciBzcGFjZS4gKi9cbiAgcHVibGljIHN0YXRpYyByZWM3MDkoKTogSDI2NENvbG9yU3BhY2VTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBIMjY0Q29sb3JTcGFjZVNldHRpbmdzKHsgcmVjNzA5U2V0dGluZ3M6IHt9IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IENmbkNoYW5uZWwuSDI2NENvbG9yU3BhY2VTZXR0aW5nc1Byb3BlcnR5O1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKGNvbmZpZzogQ2ZuQ2hhbm5lbC5IMjY0Q29sb3JTcGFjZVNldHRpbmdzUHJvcGVydHkpIHsgdGhpcy5jb25maWcgPSBjb25maWc7IH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBfYmluZCgpOiBDZm5DaGFubmVsLkgyNjRDb2xvclNwYWNlU2V0dGluZ3NQcm9wZXJ0eSB7IHJldHVybiB0aGlzLmNvbmZpZzsgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIEhEUjEwIGNvbG9yIHNwYWNlIHNldHRpbmdzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhkcjEwU2V0dGluZ3NQcm9wcyB7XG4gIC8qKlxuICAgKiBNYXhpbXVtIENvbnRlbnQgTGlnaHQgTGV2ZWwg4oCUIHRoZSBtYXhpbXVtIGxpZ2h0IGxldmVsIG9mIGFueSBzaW5nbGUgcGl4ZWwgaW4gbml0cy5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IG1heENsbD86IG51bWJlcjtcbiAgLyoqXG4gICAqIE1heGltdW0gRnJhbWUgQXZlcmFnZSBMaWdodCBMZXZlbCDigJQgdGhlIG1heGltdW0gYXZlcmFnZSBsaWdodCBsZXZlbCBvZiBhbnkgc2luZ2xlIGZyYW1lIGluIG5pdHMuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBtYXhGYWxsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbG9yIHNwYWNlIHNldHRpbmdzIGZvciBILjI2NSB2aWRlby5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjVDb2xvclNwYWNlU2V0dGluZ3Mge1xuICAvKiogUGFzcyB0aHJvdWdoIHRoZSBzb3VyY2UgY29sb3Igc3BhY2Ugd2l0aCBubyBjb252ZXJzaW9uLiAqL1xuICBwdWJsaWMgc3RhdGljIHBhc3N0aHJvdWdoKCk6IEgyNjVDb2xvclNwYWNlU2V0dGluZ3Mge1xuICAgIHJldHVybiBuZXcgSDI2NUNvbG9yU3BhY2VTZXR0aW5ncyh7IGNvbG9yU3BhY2VQYXNzdGhyb3VnaFNldHRpbmdzOiB7fSB9KTtcbiAgfVxuICAvKiogRG9sYnkgVmlzaW9uIDguMSBjb2xvciBzcGFjZS4gKi9cbiAgcHVibGljIHN0YXRpYyBkb2xieVZpc2lvbjgxKCk6IEgyNjVDb2xvclNwYWNlU2V0dGluZ3Mge1xuICAgIHJldHVybiBuZXcgSDI2NUNvbG9yU3BhY2VTZXR0aW5ncyh7IGRvbGJ5VmlzaW9uODFTZXR0aW5nczoge30gfSk7XG4gIH1cbiAgLyoqIEhEUjEwIGNvbG9yIHNwYWNlLiAqL1xuICBwdWJsaWMgc3RhdGljIGhkcjEwKHByb3BzPzogSGRyMTBTZXR0aW5nc1Byb3BzKTogSDI2NUNvbG9yU3BhY2VTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBIMjY1Q29sb3JTcGFjZVNldHRpbmdzKHsgaGRyMTBTZXR0aW5nczogcHJvcHMgPz8ge30gfSk7XG4gIH1cbiAgLyoqIEhMRyAyMDIwIGNvbG9yIHNwYWNlLiAqL1xuICBwdWJsaWMgc3RhdGljIGhsZzIwMjAoKTogSDI2NUNvbG9yU3BhY2VTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBIMjY1Q29sb3JTcGFjZVNldHRpbmdzKHsgaGxnMjAyMFNldHRpbmdzOiB7fSB9KTtcbiAgfVxuICAvKiogQ29udmVydCB0byBSZWMuNjAxIGNvbG9yIHNwYWNlLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYzYwMSgpOiBIMjY1Q29sb3JTcGFjZVNldHRpbmdzIHtcbiAgICByZXR1cm4gbmV3IEgyNjVDb2xvclNwYWNlU2V0dGluZ3MoeyByZWM2MDFTZXR0aW5nczoge30gfSk7XG4gIH1cbiAgLyoqIENvbnZlcnQgdG8gUmVjLjcwOSBjb2xvciBzcGFjZS4gKi9cbiAgcHVibGljIHN0YXRpYyByZWM3MDkoKTogSDI2NUNvbG9yU3BhY2VTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBIMjY1Q29sb3JTcGFjZVNldHRpbmdzKHsgcmVjNzA5U2V0dGluZ3M6IHt9IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IENmbkNoYW5uZWwuSDI2NUNvbG9yU3BhY2VTZXR0aW5nc1Byb3BlcnR5O1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKGNvbmZpZzogQ2ZuQ2hhbm5lbC5IMjY1Q29sb3JTcGFjZVNldHRpbmdzUHJvcGVydHkpIHsgdGhpcy5jb25maWcgPSBjb25maWc7IH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBfYmluZCgpOiBDZm5DaGFubmVsLkgyNjVDb2xvclNwYWNlU2V0dGluZ3NQcm9wZXJ0eSB7IHJldHVybiB0aGlzLmNvbmZpZzsgfVxufVxuXG4vKipcbiAqIENvbG9yIHNwYWNlIHNldHRpbmdzIGZvciBBVjEgdmlkZW8uXG4gKi9cbmV4cG9ydCBjbGFzcyBBdjFDb2xvclNwYWNlU2V0dGluZ3Mge1xuICAvKiogUGFzcyB0aHJvdWdoIHRoZSBzb3VyY2UgY29sb3Igc3BhY2Ugd2l0aCBubyBjb252ZXJzaW9uLiAqL1xuICBwdWJsaWMgc3RhdGljIHBhc3N0aHJvdWdoKCk6IEF2MUNvbG9yU3BhY2VTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBBdjFDb2xvclNwYWNlU2V0dGluZ3MoeyBjb2xvclNwYWNlUGFzc3Rocm91Z2hTZXR0aW5nczoge30gfSk7XG4gIH1cbiAgLyoqIEhEUjEwIGNvbG9yIHNwYWNlLiAqL1xuICBwdWJsaWMgc3RhdGljIGhkcjEwKHByb3BzPzogSGRyMTBTZXR0aW5nc1Byb3BzKTogQXYxQ29sb3JTcGFjZVNldHRpbmdzIHtcbiAgICByZXR1cm4gbmV3IEF2MUNvbG9yU3BhY2VTZXR0aW5ncyh7IGhkcjEwU2V0dGluZ3M6IHByb3BzID8/IHt9IH0pO1xuICB9XG4gIC8qKiBITEcgMjAyMCBjb2xvciBzcGFjZS4gKi9cbiAgcHVibGljIHN0YXRpYyBobGcyMDIwKCk6IEF2MUNvbG9yU3BhY2VTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBBdjFDb2xvclNwYWNlU2V0dGluZ3MoeyBobGcyMDIwU2V0dGluZ3M6IHt9IH0pO1xuICB9XG4gIC8qKiBDb252ZXJ0IHRvIFJlYy42MDEgY29sb3Igc3BhY2UuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVjNjAxKCk6IEF2MUNvbG9yU3BhY2VTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBBdjFDb2xvclNwYWNlU2V0dGluZ3MoeyByZWM2MDFTZXR0aW5nczoge30gfSk7XG4gIH1cbiAgLyoqIENvbnZlcnQgdG8gUmVjLjcwOSBjb2xvciBzcGFjZS4gKi9cbiAgcHVibGljIHN0YXRpYyByZWM3MDkoKTogQXYxQ29sb3JTcGFjZVNldHRpbmdzIHtcbiAgICByZXR1cm4gbmV3IEF2MUNvbG9yU3BhY2VTZXR0aW5ncyh7IHJlYzcwOVNldHRpbmdzOiB7fSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBDZm5DaGFubmVsLkF2MUNvbG9yU3BhY2VTZXR0aW5nc1Byb3BlcnR5O1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKGNvbmZpZzogQ2ZuQ2hhbm5lbC5BdjFDb2xvclNwYWNlU2V0dGluZ3NQcm9wZXJ0eSkgeyB0aGlzLmNvbmZpZyA9IGNvbmZpZzsgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIF9iaW5kKCk6IENmbkNoYW5uZWwuQXYxQ29sb3JTcGFjZVNldHRpbmdzUHJvcGVydHkgeyByZXR1cm4gdGhpcy5jb25maWc7IH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEZpbHRlciBzZXR0aW5ncyBjbGFzc2VzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFBvc3QtZmlsdGVyIHNoYXJwZW5pbmcgZm9yIHRlbXBvcmFsIGZpbHRlci5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBvcmFsRmlsdGVyUG9zdEZpbHRlclNoYXJwZW5pbmcge1xuICAvKiogQXV0byAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFVVE8gPSBuZXcgVGVtcG9yYWxGaWx0ZXJQb3N0RmlsdGVyU2hhcnBlbmluZygnQVVUTycpO1xuICAvKiogRGlzYWJsZWQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBESVNBQkxFRCA9IG5ldyBUZW1wb3JhbEZpbHRlclBvc3RGaWx0ZXJTaGFycGVuaW5nKCdESVNBQkxFRCcpO1xuICAvKiogRW5hYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVOQUJMRUQgPSBuZXcgVGVtcG9yYWxGaWx0ZXJQb3N0RmlsdGVyU2hhcnBlbmluZygnRU5BQkxFRCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogVGVtcG9yYWxGaWx0ZXJQb3N0RmlsdGVyU2hhcnBlbmluZyB7XG4gICAgcmV0dXJuIG5ldyBUZW1wb3JhbEZpbHRlclBvc3RGaWx0ZXJTaGFycGVuaW5nKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBUZW1wb3JhbCBmaWx0ZXIgc3RyZW5ndGguXG4gKi9cbmV4cG9ydCBjbGFzcyBUZW1wb3JhbEZpbHRlclN0cmVuZ3RoIHtcbiAgLyoqIEF1dG8gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBVVRPID0gbmV3IFRlbXBvcmFsRmlsdGVyU3RyZW5ndGgoJ0FVVE8nKTtcbiAgLyoqIFN0cmVuZ3RoIDEgKHJlY29tbWVuZGVkKSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUUkVOR1RIXzEgPSBuZXcgVGVtcG9yYWxGaWx0ZXJTdHJlbmd0aCgnU1RSRU5HVEhfMScpO1xuICAvKiogU3RyZW5ndGggMiAocmVjb21tZW5kZWQpICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSRU5HVEhfMiA9IG5ldyBUZW1wb3JhbEZpbHRlclN0cmVuZ3RoKCdTVFJFTkdUSF8yJyk7XG4gIC8qKiBTdHJlbmd0aCAzICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSRU5HVEhfMyA9IG5ldyBUZW1wb3JhbEZpbHRlclN0cmVuZ3RoKCdTVFJFTkdUSF8zJyk7XG4gIC8qKiBTdHJlbmd0aCA0ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSRU5HVEhfNCA9IG5ldyBUZW1wb3JhbEZpbHRlclN0cmVuZ3RoKCdTVFJFTkdUSF80Jyk7XG4gIC8qKiBTdHJlbmd0aCA1ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSRU5HVEhfNSA9IG5ldyBUZW1wb3JhbEZpbHRlclN0cmVuZ3RoKCdTVFJFTkdUSF81Jyk7XG4gIC8qKiBTdHJlbmd0aCA2ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSRU5HVEhfNiA9IG5ldyBUZW1wb3JhbEZpbHRlclN0cmVuZ3RoKCdTVFJFTkdUSF82Jyk7XG4gIC8qKiBTdHJlbmd0aCA3ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSRU5HVEhfNyA9IG5ldyBUZW1wb3JhbEZpbHRlclN0cmVuZ3RoKCdTVFJFTkdUSF83Jyk7XG4gIC8qKiBTdHJlbmd0aCA4ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSRU5HVEhfOCA9IG5ldyBUZW1wb3JhbEZpbHRlclN0cmVuZ3RoKCdTVFJFTkdUSF84Jyk7XG4gIC8qKiBTdHJlbmd0aCA5ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSRU5HVEhfOSA9IG5ldyBUZW1wb3JhbEZpbHRlclN0cmVuZ3RoKCdTVFJFTkdUSF85Jyk7XG4gIC8qKiBTdHJlbmd0aCAxMCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUUkVOR1RIXzEwID0gbmV3IFRlbXBvcmFsRmlsdGVyU3RyZW5ndGgoJ1NUUkVOR1RIXzEwJyk7XG4gIC8qKiBTdHJlbmd0aCAxMSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUUkVOR1RIXzExID0gbmV3IFRlbXBvcmFsRmlsdGVyU3RyZW5ndGgoJ1NUUkVOR1RIXzExJyk7XG4gIC8qKiBTdHJlbmd0aCAxMiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUUkVOR1RIXzEyID0gbmV3IFRlbXBvcmFsRmlsdGVyU3RyZW5ndGgoJ1NUUkVOR1RIXzEyJyk7XG4gIC8qKiBTdHJlbmd0aCAxMyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUUkVOR1RIXzEzID0gbmV3IFRlbXBvcmFsRmlsdGVyU3RyZW5ndGgoJ1NUUkVOR1RIXzEzJyk7XG4gIC8qKiBTdHJlbmd0aCAxNCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUUkVOR1RIXzE0ID0gbmV3IFRlbXBvcmFsRmlsdGVyU3RyZW5ndGgoJ1NUUkVOR1RIXzE0Jyk7XG4gIC8qKiBTdHJlbmd0aCAxNSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUUkVOR1RIXzE1ID0gbmV3IFRlbXBvcmFsRmlsdGVyU3RyZW5ndGgoJ1NUUkVOR1RIXzE1Jyk7XG4gIC8qKiBTdHJlbmd0aCAxNiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUUkVOR1RIXzE2ID0gbmV3IFRlbXBvcmFsRmlsdGVyU3RyZW5ndGgoJ1NUUkVOR1RIXzE2Jyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBUZW1wb3JhbEZpbHRlclN0cmVuZ3RoIHtcbiAgICByZXR1cm4gbmV3IFRlbXBvcmFsRmlsdGVyU3RyZW5ndGgodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFBvc3QtZmlsdGVyIHNoYXJwZW5pbmcgZm9yIGJhbmR3aWR0aCByZWR1Y3Rpb24gZmlsdGVyLlxuICovXG5leHBvcnQgY2xhc3MgQmFuZHdpZHRoUmVkdWN0aW9uUG9zdEZpbHRlclNoYXJwZW5pbmcge1xuICAvKiogRGlzYWJsZWQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBESVNBQkxFRCA9IG5ldyBCYW5kd2lkdGhSZWR1Y3Rpb25Qb3N0RmlsdGVyU2hhcnBlbmluZygnRElTQUJMRUQnKTtcbiAgLyoqIFNoYXJwZW5pbmcgbGV2ZWwgMSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNIQVJQRU5JTkdfMSA9IG5ldyBCYW5kd2lkdGhSZWR1Y3Rpb25Qb3N0RmlsdGVyU2hhcnBlbmluZygnU0hBUlBFTklOR18xJyk7XG4gIC8qKiBTaGFycGVuaW5nIGxldmVsIDIgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTSEFSUEVOSU5HXzIgPSBuZXcgQmFuZHdpZHRoUmVkdWN0aW9uUG9zdEZpbHRlclNoYXJwZW5pbmcoJ1NIQVJQRU5JTkdfMicpO1xuICAvKiogU2hhcnBlbmluZyBsZXZlbCAzICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0hBUlBFTklOR18zID0gbmV3IEJhbmR3aWR0aFJlZHVjdGlvblBvc3RGaWx0ZXJTaGFycGVuaW5nKCdTSEFSUEVOSU5HXzMnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEJhbmR3aWR0aFJlZHVjdGlvblBvc3RGaWx0ZXJTaGFycGVuaW5nIHtcbiAgICByZXR1cm4gbmV3IEJhbmR3aWR0aFJlZHVjdGlvblBvc3RGaWx0ZXJTaGFycGVuaW5nKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBCYW5kd2lkdGggcmVkdWN0aW9uIGZpbHRlciBzdHJlbmd0aC5cbiAqL1xuZXhwb3J0IGNsYXNzIEJhbmR3aWR0aFJlZHVjdGlvblN0cmVuZ3RoIHtcbiAgLyoqIEF1dG8gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBVVRPID0gbmV3IEJhbmR3aWR0aFJlZHVjdGlvblN0cmVuZ3RoKCdBVVRPJyk7XG4gIC8qKiBTdHJlbmd0aCAxICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSRU5HVEhfMSA9IG5ldyBCYW5kd2lkdGhSZWR1Y3Rpb25TdHJlbmd0aCgnU1RSRU5HVEhfMScpO1xuICAvKiogU3RyZW5ndGggMiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUUkVOR1RIXzIgPSBuZXcgQmFuZHdpZHRoUmVkdWN0aW9uU3RyZW5ndGgoJ1NUUkVOR1RIXzInKTtcbiAgLyoqIFN0cmVuZ3RoIDMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTVFJFTkdUSF8zID0gbmV3IEJhbmR3aWR0aFJlZHVjdGlvblN0cmVuZ3RoKCdTVFJFTkdUSF8zJyk7XG4gIC8qKiBTdHJlbmd0aCA0ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSRU5HVEhfNCA9IG5ldyBCYW5kd2lkdGhSZWR1Y3Rpb25TdHJlbmd0aCgnU1RSRU5HVEhfNCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogQmFuZHdpZHRoUmVkdWN0aW9uU3RyZW5ndGgge1xuICAgIHJldHVybiBuZXcgQmFuZHdpZHRoUmVkdWN0aW9uU3RyZW5ndGgodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGEgdGVtcG9yYWwgZmlsdGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBvcmFsRmlsdGVyUHJvcHMge1xuICAvKipcbiAgICogUG9zdC1maWx0ZXIgc2hhcnBlbmluZyBjb250cm9sLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgcG9zdEZpbHRlclNoYXJwZW5pbmc/OiBUZW1wb3JhbEZpbHRlclBvc3RGaWx0ZXJTaGFycGVuaW5nO1xuICAvKipcbiAgICogRmlsdGVyIHN0cmVuZ3RoLiBXZSByZWNvbW1lbmQgMSBvciAyLiBIaWdoZXIgdmFsdWVzIG1heSByZW1vdmUgdXNlZnVsIGRldGFpbC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IHN0cmVuZ3RoPzogVGVtcG9yYWxGaWx0ZXJTdHJlbmd0aDtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIGJhbmR3aWR0aCByZWR1Y3Rpb24gZmlsdGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhbmR3aWR0aFJlZHVjdGlvbkZpbHRlclByb3BzIHtcbiAgLyoqXG4gICAqIFBvc3QtZmlsdGVyIHNoYXJwZW5pbmcgY29udHJvbC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IHBvc3RGaWx0ZXJTaGFycGVuaW5nPzogQmFuZHdpZHRoUmVkdWN0aW9uUG9zdEZpbHRlclNoYXJwZW5pbmc7XG4gIC8qKlxuICAgKiBCYW5kd2lkdGggcmVkdWN0aW9uIHN0cmVuZ3RoLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgc3RyZW5ndGg/OiBCYW5kd2lkdGhSZWR1Y3Rpb25TdHJlbmd0aDtcbn1cblxuLyoqXG4gKiBGaWx0ZXIgc2V0dGluZ3MgZm9yIEguMjY0IHZpZGVvLiBTdXBwb3J0cyB0ZW1wb3JhbCBmaWx0ZXIgYW5kIGJhbmR3aWR0aCByZWR1Y3Rpb24gZmlsdGVyLlxuICovXG5leHBvcnQgY2xhc3MgSDI2NEZpbHRlclNldHRpbmdzIHtcbiAgLyoqIEFwcGx5IGEgdGVtcG9yYWwgZmlsdGVyLiAqL1xuICBwdWJsaWMgc3RhdGljIHRlbXBvcmFsRmlsdGVyKHByb3BzPzogVGVtcG9yYWxGaWx0ZXJQcm9wcyk6IEgyNjRGaWx0ZXJTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBIMjY0RmlsdGVyU2V0dGluZ3Moe1xuICAgICAgdGVtcG9yYWxGaWx0ZXJTZXR0aW5nczogcHJvcHMgPyB7XG4gICAgICAgIHBvc3RGaWx0ZXJTaGFycGVuaW5nOiBwcm9wcy5wb3N0RmlsdGVyU2hhcnBlbmluZz8udmFsdWUsXG4gICAgICAgIHN0cmVuZ3RoOiBwcm9wcy5zdHJlbmd0aD8udmFsdWUsXG4gICAgICB9IDoge30sXG4gICAgfSk7XG4gIH1cbiAgLyoqIEFwcGx5IGEgYmFuZHdpZHRoIHJlZHVjdGlvbiBmaWx0ZXIuICovXG4gIHB1YmxpYyBzdGF0aWMgYmFuZHdpZHRoUmVkdWN0aW9uRmlsdGVyKHByb3BzPzogQmFuZHdpZHRoUmVkdWN0aW9uRmlsdGVyUHJvcHMpOiBIMjY0RmlsdGVyU2V0dGluZ3Mge1xuICAgIHJldHVybiBuZXcgSDI2NEZpbHRlclNldHRpbmdzKHtcbiAgICAgIGJhbmR3aWR0aFJlZHVjdGlvbkZpbHRlclNldHRpbmdzOiBwcm9wcyA/IHtcbiAgICAgICAgcG9zdEZpbHRlclNoYXJwZW5pbmc6IHByb3BzLnBvc3RGaWx0ZXJTaGFycGVuaW5nPy52YWx1ZSxcbiAgICAgICAgc3RyZW5ndGg6IHByb3BzLnN0cmVuZ3RoPy52YWx1ZSxcbiAgICAgIH0gOiB7fSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBDZm5DaGFubmVsLkgyNjRGaWx0ZXJTZXR0aW5nc1Byb3BlcnR5O1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKGNvbmZpZzogQ2ZuQ2hhbm5lbC5IMjY0RmlsdGVyU2V0dGluZ3NQcm9wZXJ0eSkgeyB0aGlzLmNvbmZpZyA9IGNvbmZpZzsgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIF9iaW5kKCk6IENmbkNoYW5uZWwuSDI2NEZpbHRlclNldHRpbmdzUHJvcGVydHkgeyByZXR1cm4gdGhpcy5jb25maWc7IH1cbn1cblxuLyoqXG4gKiBGaWx0ZXIgc2V0dGluZ3MgZm9yIEguMjY1IHZpZGVvLiBTdXBwb3J0cyB0ZW1wb3JhbCBmaWx0ZXIgYW5kIGJhbmR3aWR0aCByZWR1Y3Rpb24gZmlsdGVyLlxuICovXG5leHBvcnQgY2xhc3MgSDI2NUZpbHRlclNldHRpbmdzIHtcbiAgLyoqIEFwcGx5IGEgdGVtcG9yYWwgZmlsdGVyLiAqL1xuICBwdWJsaWMgc3RhdGljIHRlbXBvcmFsRmlsdGVyKHByb3BzPzogVGVtcG9yYWxGaWx0ZXJQcm9wcyk6IEgyNjVGaWx0ZXJTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBIMjY1RmlsdGVyU2V0dGluZ3Moe1xuICAgICAgdGVtcG9yYWxGaWx0ZXJTZXR0aW5nczogcHJvcHMgPyB7XG4gICAgICAgIHBvc3RGaWx0ZXJTaGFycGVuaW5nOiBwcm9wcy5wb3N0RmlsdGVyU2hhcnBlbmluZz8udmFsdWUsXG4gICAgICAgIHN0cmVuZ3RoOiBwcm9wcy5zdHJlbmd0aD8udmFsdWUsXG4gICAgICB9IDoge30sXG4gICAgfSk7XG4gIH1cbiAgLyoqIEFwcGx5IGEgYmFuZHdpZHRoIHJlZHVjdGlvbiBmaWx0ZXIuICovXG4gIHB1YmxpYyBzdGF0aWMgYmFuZHdpZHRoUmVkdWN0aW9uRmlsdGVyKHByb3BzPzogQmFuZHdpZHRoUmVkdWN0aW9uRmlsdGVyUHJvcHMpOiBIMjY1RmlsdGVyU2V0dGluZ3Mge1xuICAgIHJldHVybiBuZXcgSDI2NUZpbHRlclNldHRpbmdzKHtcbiAgICAgIGJhbmR3aWR0aFJlZHVjdGlvbkZpbHRlclNldHRpbmdzOiBwcm9wcyA/IHtcbiAgICAgICAgcG9zdEZpbHRlclNoYXJwZW5pbmc6IHByb3BzLnBvc3RGaWx0ZXJTaGFycGVuaW5nPy52YWx1ZSxcbiAgICAgICAgc3RyZW5ndGg6IHByb3BzLnN0cmVuZ3RoPy52YWx1ZSxcbiAgICAgIH0gOiB7fSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBDZm5DaGFubmVsLkgyNjVGaWx0ZXJTZXR0aW5nc1Byb3BlcnR5O1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKGNvbmZpZzogQ2ZuQ2hhbm5lbC5IMjY1RmlsdGVyU2V0dGluZ3NQcm9wZXJ0eSkgeyB0aGlzLmNvbmZpZyA9IGNvbmZpZzsgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIF9iaW5kKCk6IENmbkNoYW5uZWwuSDI2NUZpbHRlclNldHRpbmdzUHJvcGVydHkgeyByZXR1cm4gdGhpcy5jb25maWc7IH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvZGVjIHNldHRpbmdzIHByb3BzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIEguMjY0IGNvZGVjIHNldHRpbmdzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEgyNjRTZXR0aW5nc1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSByYXRlIGNvbnRyb2wgY29uZmlndXJhdGlvbi5cbiAgICogQGRlZmF1bHQgLSBDQlIgd2l0aCBubyBiaXRyYXRlIChzZXJ2aWNlIGRlZmF1bHQpXG4gICAqL1xuICByZWFkb25seSByYXRlQ29udHJvbD86IEgyNjRSYXRlQ29udHJvbDtcbiAgLyoqXG4gICAqIFRoZSBILjI2NCBwcm9maWxlLlxuICAgKiBAZGVmYXVsdCBIMjY0UHJvZmlsZS5NQUlOXG4gICAqL1xuICByZWFkb25seSBwcm9maWxlPzogSDI2NFByb2ZpbGU7XG4gIC8qKlxuICAgKiBUaGUgR09QIHNpemUgKGtleWZyYW1lIGludGVydmFsKS5cbiAgICogQGRlZmF1bHQgR29wU2l6ZS5zZWNvbmRzKDEpXG4gICAqL1xuICByZWFkb25seSBnb3BTaXplPzogR29wU2l6ZTtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgQi1mcmFtZXMgYmV0d2VlbiByZWZlcmVuY2UgZnJhbWVzLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZ29wTnVtQkZyYW1lcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBhZGFwdGl2ZSBxdWFudGl6YXRpb24uIFRoaXMgYWxsb3dzIGludHJhLWZyYW1lIHF1YW50aXplcnMgdG8gdmFyeSB0byBpbXByb3ZlIHZpc3VhbCBxdWFsaXR5LlxuICAgKiBAZGVmYXVsdCBIMjY0QWRhcHRpdmVRdWFudGl6YXRpb24uQVVUT1xuICAgKi9cbiAgcmVhZG9ubHkgYWRhcHRpdmVRdWFudGl6YXRpb24/OiBIMjY0QWRhcHRpdmVRdWFudGl6YXRpb247XG4gIC8qKlxuICAgKiBUaGUgdmlkZW8gZnJhbWUgcmF0ZS5cbiAgICogQGRlZmF1bHQgLSBmb2xsb3cgc291cmNlXG4gICAqL1xuICByZWFkb25seSBmcmFtZXJhdGU/OiBGcmFtZXJhdGU7XG4gIC8qKlxuICAgKiBUaGUgcGl4ZWwgYXNwZWN0IHJhdGlvIChQQVIpIG9mIHRoZSB2aWRlby5cbiAgICogQGRlZmF1bHQgLSBmb2xsb3cgc291cmNlIChvciBzcXVhcmUgcGl4ZWxzIHdoZW4gZnJhbWVyYXRlIGlzIHNwZWNpZmllZClcbiAgICovXG4gIHJlYWRvbmx5IHBpeGVsQXNwZWN0UmF0aW8/OiBQaXhlbEFzcGVjdFJhdGlvO1xuICAvKipcbiAgICogVGltZWNvZGUgYnVybi1pbiBzZXR0aW5ncyB0byBvdmVybGF5IHRpbWVjb2RlIG9uIHRoZSB2aWRlby5cbiAgICogQGRlZmF1bHQgLSBubyB0aW1lY29kZSBidXJuLWluXG4gICAqL1xuICByZWFkb25seSB0aW1lY29kZUJ1cm5pbj86IFRpbWVjb2RlQnVybmluU2V0dGluZ3M7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBBRkQgdmFsdWVzIHdpbGwgYmUgd3JpdHRlbiBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtLiBJZiBhZmRTaWduYWxpbmcgaXMgYXV0bywgdGhlXG4gICAqIHN5c3RlbSB0cmllcyB0byBwcmVzZXJ2ZSB0aGUgaW5wdXQgQUZEIHZhbHVlIChpbiBjYXNlcyB3aGVyZSBtdWx0aXBsZSBBRkQgdmFsdWVzIGFyZSB2YWxpZCkuIElmXG4gICAqIHNldCB0byBmaXhlZCwgdGhlIEFGRCB2YWx1ZSBpcyB0aGUgdmFsdWUgY29uZmlndXJlZCBpbiB0aGUgZml4ZWRBZmQgcGFyYW1ldGVyLlxuICAgKiBAZGVmYXVsdCBBZmRTaWduYWxpbmcuTk9ORVxuICAgKi9cbiAgcmVhZG9ubHkgYWZkU2lnbmFsaW5nPzogQWZkU2lnbmFsaW5nO1xuICAvKipcbiAgICogUGVyY2VudGFnZSBvZiB0aGUgYnVmZmVyIHRoYXQgc2hvdWxkIGluaXRpYWxseSBiZSBmaWxsZWQgKEhSRCBidWZmZXIgbW9kZWwpLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgYnVmRmlsbFBjdD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFNpemUgb2YgdGhlIGJ1ZmZlciAoSFJEIGJ1ZmZlciBtb2RlbCkgaW4gYml0cy9zZWNvbmQuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBidWZTaXplPzogbnVtYmVyO1xuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIGNvbG9yIHNwYWNlIG1ldGFkYXRhIGluIHRoZSBvdXRwdXQuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBjb2xvck1ldGFkYXRhPzogQ29sb3JNZXRhZGF0YTtcbiAgLyoqXG4gICAqIENvbG9yIHNwYWNlIHNldHRpbmdzIGZvciB0aGUgdmlkZW8uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBjb2xvclNwYWNlU2V0dGluZ3M/OiBIMjY0Q29sb3JTcGFjZVNldHRpbmdzO1xuICAvKipcbiAgICogVGhlIGVudHJvcHkgZW5jb2RpbmcgbW9kZS4gQ0FCQUMgcmVxdWlyZXMgTWFpbiBvciBIaWdoIHByb2ZpbGUuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBlbnRyb3B5RW5jb2Rpbmc/OiBIMjY0RW50cm9weUVuY29kaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgdmlkZW8gZmlsdGVyIHNldHRpbmdzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyU2V0dGluZ3M/OiBIMjY0RmlsdGVyU2V0dGluZ3M7XG4gIC8qKlxuICAgKiBGb3VyLWJpdCBBRkQgdmFsdWUgdG8gd3JpdGUgb24gYWxsIGZyYW1lcy4gT25seSB2YWxpZCB3aGVuIGFmZFNpZ25hbGluZyBpcyBGSVhFRC5cbiAgICpcbiAgICogVmFsaWQgdmFsdWVzOiBGSVhFRF8wMDAwLCBGSVhFRF8wMDEwLCBGSVhFRF8wMDExLCBGSVhFRF8wMTAwLCBGSVhFRF8xMDAwLFxuICAgKiBGSVhFRF8xMDAxLCBGSVhFRF8xMDEwLCBGSVhFRF8xMDExLCBGSVhFRF8xMTAwLCBGSVhFRF8xMTAxLCBGSVhFRF8xMTEwLCBGSVhFRF8xMTExLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZml4ZWRBZmQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJZiBlbmFibGVkLCBhZGp1c3RzIHF1YW50aXphdGlvbiB3aXRoaW4gZWFjaCBmcmFtZSB0byByZWR1Y2UgZmxpY2tlciBvbiBJLWZyYW1lcy5cbiAgICogQGRlZmF1bHQgRmxpY2tlckFxLkVOQUJMRURcbiAgICovXG4gIHJlYWRvbmx5IGZsaWNrZXJBcT86IEZsaWNrZXJBcTtcbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgY29kaW5nIGlzIG9uIGEgZmllbGQgYmFzaXMgb3IgZnJhbWUgYmFzaXMgd2hlbiBzY2FuIHR5cGUgaXMgaW50ZXJsYWNlZC5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGZvcmNlRmllbGRQaWN0dXJlcz86IEgyNjRGb3JjZUZpZWxkUGljdHVyZXM7XG4gIC8qKlxuICAgKiBJZiBlbmFibGVkLCB1c2VzIHJlZmVyZW5jZSBCIGZyYW1lcyBmb3IgR09QIHN0cnVjdHVyZXMgdGhhdCBoYXZlIEIgZnJhbWVzID4gMS5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGdvcEJSZWZlcmVuY2U/OiBHb3BCUmVmZXJlbmNlO1xuICAvKipcbiAgICogRnJlcXVlbmN5IG9mIGNsb3NlZCBHT1BzLiBTZXQgdG8gMSBmb3Igc3RyZWFtaW5nIHNvIGRlY29kZXJzIGpvaW5pbmcgbWlkLXN0cmVhbSBnZXQgYW4gSURSIGZyYW1lIHF1aWNrbHkuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBnb3BDbG9zZWRDYWRlbmNlPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIEguMjY0IGxldmVsLlxuICAgKlxuICAgKiBWYWxpZCB2YWx1ZXM6IEgyNjRfTEVWRUxfMSwgSDI2NF9MRVZFTF8xXzEsIEgyNjRfTEVWRUxfMV8yLCBIMjY0X0xFVkVMXzFfMyxcbiAgICogSDI2NF9MRVZFTF8yLCBIMjY0X0xFVkVMXzJfMSwgSDI2NF9MRVZFTF8yXzIsIEgyNjRfTEVWRUxfMywgSDI2NF9MRVZFTF8zXzEsXG4gICAqIEgyNjRfTEVWRUxfM18yLCBIMjY0X0xFVkVMXzQsIEgyNjRfTEVWRUxfNF8xLCBIMjY0X0xFVkVMXzRfMiwgSDI2NF9MRVZFTF81LFxuICAgKiBIMjY0X0xFVkVMXzVfMSwgSDI2NF9MRVZFTF81XzIsIEgyNjRfTEVWRUxfQVVUTy5cbiAgICpcbiAgICogQGRlZmF1bHQgSDI2NExldmVsLkgyNjRfTEVWRUxfQVVUT1xuICAgKi9cbiAgcmVhZG9ubHkgbGV2ZWw/OiBIMjY0TGV2ZWw7XG4gIC8qKlxuICAgKiBBbW91bnQgb2YgbG9va2FoZWFkLiBMb3cgZGVjcmVhc2VzIGxhdGVuY3kvbWVtb3J5OyBoaWdoIGNhbiBwcm9kdWNlIGJldHRlciBxdWFsaXR5LlxuICAgKiBAZGVmYXVsdCBMb29rQWhlYWRSYXRlQ29udHJvbC5ISUdIXG4gICAqL1xuICByZWFkb25seSBsb29rQWhlYWRSYXRlQ29udHJvbD86IExvb2tBaGVhZFJhdGVDb250cm9sO1xuICAvKipcbiAgICogT25seSBtZWFuaW5nZnVsIGlmIHNjZW5lQ2hhbmdlRGV0ZWN0IGlzIGVuYWJsZWQuIEVuZm9yY2VzIHNlcGFyYXRpb24gYmV0d2VlblxuICAgKiByZXBlYXRlZCAoY2FkZW5jZSkgSS1mcmFtZXMgYW5kIEktZnJhbWVzIGluc2VydGVkIGJ5IHNjZW5lIGNoYW5nZSBkZXRlY3Rpb24uXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBtaW5JSW50ZXJ2YWw/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHJlZmVyZW5jZSBmcmFtZXMgdG8gdXNlLiBUaGUgZW5jb2RlciBtaWdodCB1c2UgbW9yZSBpZiBCLWZyYW1lcyBvciBpbnRlcmxhY2VkIGVuY29kaW5nIGlzIHVzZWQuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBudW1SZWZGcmFtZXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzY2FuIHR5cGUgb2YgdGhlIG91dHB1dC5cbiAgICogQGRlZmF1bHQgU2NhblR5cGUuUFJPR1JFU1NJVkVcbiAgICovXG4gIHJlYWRvbmx5IHNjYW5UeXBlPzogU2NhblR5cGU7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc2xpY2VzIHBlciBwaWN0dXJlLiBNdXN0IGJlIDw9IG1hY3JvYmxvY2sgcm93cyAocHJvZ3Jlc3NpdmUpIG9yIGhhbGYgKGludGVybGFjZWQpLlxuICAgKiBAZGVmYXVsdCAtIGVuY29kZXIgY2hvb3NlcyBiYXNlZCBvbiByZXNvbHV0aW9uXG4gICAqL1xuICByZWFkb25seSBzbGljZXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBTb2Z0bmVzcy4gU2VsZWN0cyBhIHF1YW50aXplciBtYXRyaXg7IGxhcmdlciB2YWx1ZXMgcmVkdWNlIGhpZ2gtZnJlcXVlbmN5IGNvbnRlbnQuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBzb2Z0bmVzcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFByb2R1Y2VzIGEgYml0c3RyZWFtIGNvbXBsaWFudCB3aXRoIFNNUFRFIFJQLTIwMjcuXG4gICAqIEBkZWZhdWx0IEgyNjRTeW50YXguREVGQVVMVFxuICAgKi9cbiAgcmVhZG9ubHkgc3ludGF4PzogSDI2NFN5bnRheDtcbiAgLyoqXG4gICAqIERldGVybWluZXMgaG93IHRpbWVjb2RlcyBhcmUgaW5zZXJ0ZWQgaW50byB0aGUgdmlkZW8gZWxlbWVudGFyeSBzdHJlYW0uXG4gICAqIFRoaXMgY29udHJvbHMgaW5zZXJ0aW9uIGludG8gdGhlIG91dHB1dCBlbGVtZW50YXJ5IHN0cmVhbS4gVGhlIGNoYW5uZWwncyBgdGltZWNvZGVDb25maWdgIGNvbnRyb2xzIHRoZVxuICAgKiBzb3VyY2Ugb2YgdGhlIHRpbWVjb2RlIHVzZWQgZm9yIG91dHB1dC5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVjb2RlSW5zZXJ0aW9uPzogVGltZWNvZGVJbnNlcnRpb247XG4gIC8qKlxuICAgKiBNaW5pbXVtIFFQIHZhbHVlLiBTZXRzIGEgZmxvb3Igb24gdGhlIHF1YW50aXphdGlvbiBwYXJhbWV0ZXIuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBtaW5RcD86IG51bWJlcjtcbiAgLyoqXG4gICAqIE1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3NlY29uZC5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IG1pbkJpdHJhdGU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBRdWFsaXR5IGxldmVsLiBFTkhBTkNFRF9RVUFMSVRZIHByb2R1Y2VzIHNsaWdodGx5IGJldHRlciB2aWRlbyB3aXRob3V0IGluY3JlYXNpbmcgYml0cmF0ZS5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IHF1YWxpdHlMZXZlbD86IEgyNjRRdWFsaXR5TGV2ZWw7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHNjZW5lIGNoYW5nZSBkZXRlY3Rpb24gaW5zZXJ0cyBJLWZyYW1lcyBvbiBzY2VuZSBjaGFuZ2VzLlxuICAgKiBAZGVmYXVsdCBIMjY0U2NlbmVDaGFuZ2VEZXRlY3QuRU5BQkxFRFxuICAgKi9cbiAgcmVhZG9ubHkgc2NlbmVDaGFuZ2VEZXRlY3Q/OiBIMjY0U2NlbmVDaGFuZ2VEZXRlY3Q7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHNwYXRpYWwgYWRhcHRpdmUgcXVhbnRpemF0aW9uIGFkanVzdHMgcXVhbnRpemF0aW9uIHdpdGhpbiBlYWNoIGZyYW1lIGJhc2VkIG9uIHNwYXRpYWwgdmFyaWF0aW9uLlxuICAgKiBAZGVmYXVsdCBIMjY0U3BhdGlhbEFxLkVOQUJMRURcbiAgICovXG4gIHJlYWRvbmx5IHNwYXRpYWxBcT86IEgyNjRTcGF0aWFsQXE7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRlbXBvcmFsIGFkYXB0aXZlIHF1YW50aXphdGlvbiBhZGp1c3RzIHF1YW50aXphdGlvbiBiYXNlZCBvbiB0ZW1wb3JhbCB2YXJpYXRpb24gYmV0d2VlbiBmcmFtZXMuXG4gICAqIEBkZWZhdWx0IEgyNjRUZW1wb3JhbEFxLkVOQUJMRURcbiAgICovXG4gIHJlYWRvbmx5IHRlbXBvcmFsQXE/OiBIMjY0VGVtcG9yYWxBcTtcbiAgLyoqXG4gICAqIFN1Yi1HT1AgbGVuZ3RoIG1vZGUuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBzdWJnb3BMZW5ndGg/OiBTdWJnb3BMZW5ndGg7XG59XG5cbi8qKlxuICogSC4yNjUgcHJvZmlsZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjVQcm9maWxlIHtcbiAgLyoqIE1haW4gcHJvZmlsZSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BSU4gPSBuZXcgSDI2NVByb2ZpbGUoJ01BSU4nKTtcbiAgLyoqIE1haW4gMTAtYml0IHByb2ZpbGUgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNQUlOXzEwQklUID0gbmV3IEgyNjVQcm9maWxlKCdNQUlOXzEwQklUJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBIMjY1UHJvZmlsZSB7XG4gICAgcmV0dXJuIG5ldyBIMjY1UHJvZmlsZSh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjUgdGllci5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjVUaWVyIHtcbiAgLyoqIE1haW4gdGllciAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BSU4gPSBuZXcgSDI2NVRpZXIoJ01BSU4nKTtcbiAgLyoqIEhpZ2ggdGllciAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhJR0ggPSBuZXcgSDI2NVRpZXIoJ0hJR0gnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEgyNjVUaWVyIHtcbiAgICByZXR1cm4gbmV3IEgyNjVUaWVyKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBILjI2NSBjb2RlYyBzZXR0aW5ncy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIMjY1U2V0dGluZ3NQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcmF0ZSBjb250cm9sIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBkZWZhdWx0IC0gQ0JSIHdpdGggbm8gYml0cmF0ZSAoc2VydmljZSBkZWZhdWx0KVxuICAgKi9cbiAgcmVhZG9ubHkgcmF0ZUNvbnRyb2w/OiBIMjY1UmF0ZUNvbnRyb2w7XG4gIC8qKlxuICAgKiBUaGUgSC4yNjUgcHJvZmlsZS5cbiAgICogQGRlZmF1bHQgSDI2NVByb2ZpbGUuTUFJTlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZT86IEgyNjVQcm9maWxlO1xuICAvKipcbiAgICogVGhlIEguMjY1IHRpZXIuXG4gICAqIEBkZWZhdWx0IEgyNjVUaWVyLk1BSU5cbiAgICovXG4gIHJlYWRvbmx5IHRpZXI/OiBIMjY1VGllcjtcbiAgLyoqXG4gICAqIFRoZSBHT1Agc2l6ZSAoa2V5ZnJhbWUgaW50ZXJ2YWwpLlxuICAgKiBAZGVmYXVsdCBHb3BTaXplLnNlY29uZHMoMSlcbiAgICovXG4gIHJlYWRvbmx5IGdvcFNpemU/OiBHb3BTaXplO1xuICAvKipcbiAgICogVGhlIHZpZGVvIGZyYW1lIHJhdGUuIFJlcXVpcmVkIGZvciBILjI2NS5cbiAgICovXG4gIHJlYWRvbmx5IGZyYW1lcmF0ZTogRnJhbWVyYXRlO1xuICAvKipcbiAgICogVGhlIHBpeGVsIGFzcGVjdCByYXRpbyAoUEFSKSBvZiB0aGUgdmlkZW8uXG4gICAqIEBkZWZhdWx0IC0gc3F1YXJlIHBpeGVsc1xuICAgKi9cbiAgcmVhZG9ubHkgcGl4ZWxBc3BlY3RSYXRpbz86IFBpeGVsQXNwZWN0UmF0aW87XG4gIC8qKlxuICAgKiBUaW1lY29kZSBidXJuLWluIHNldHRpbmdzIHRvIG92ZXJsYXkgdGltZWNvZGUgb24gdGhlIHZpZGVvLlxuICAgKiBAZGVmYXVsdCAtIG5vIHRpbWVjb2RlIGJ1cm4taW5cbiAgICovXG4gIHJlYWRvbmx5IHRpbWVjb2RlQnVybmluPzogVGltZWNvZGVCdXJuaW5TZXR0aW5ncztcbiAgLyoqXG4gICAqIFRoZSBhZGFwdGl2ZSBxdWFudGl6YXRpb24uIEFsbG93cyBpbnRyYS1mcmFtZSBxdWFudGl6ZXJzIHRvIHZhcnkgdG8gaW1wcm92ZSB2aXN1YWwgcXVhbGl0eS5cbiAgICogQGRlZmF1bHQgSDI2NUFkYXB0aXZlUXVhbnRpemF0aW9uLkFVVE9cbiAgICovXG4gIHJlYWRvbmx5IGFkYXB0aXZlUXVhbnRpemF0aW9uPzogSDI2NUFkYXB0aXZlUXVhbnRpemF0aW9uO1xuICAvKipcbiAgICogQUZEIHNpZ25hbGluZyBtb2RlLlxuICAgKiBAZGVmYXVsdCBBZmRTaWduYWxpbmcuTk9ORVxuICAgKi9cbiAgcmVhZG9ubHkgYWZkU2lnbmFsaW5nPzogQWZkU2lnbmFsaW5nO1xuICAvKipcbiAgICogV2hldGhlciB0byBpbnNlcnQgYW4gQWx0ZXJuYXRpdmUgVHJhbnNmZXIgRnVuY3Rpb24gU0VJIG1lc3NhZ2UgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggbm9uLUhEUiBkZWNvZGVycy5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGFsdGVybmF0aXZlVHJhbnNmZXJGdW5jdGlvbj86IEgyNjVBbHRlcm5hdGl2ZVRyYW5zZmVyRnVuY3Rpb247XG4gIC8qKlxuICAgKiBTaXplIG9mIGJ1ZmZlciAoSFJEIGJ1ZmZlciBtb2RlbCkgaW4gYml0cy5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGJ1ZlNpemU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgY29sb3Igc3BhY2UgbWV0YWRhdGEgaW4gdGhlIG91dHB1dC5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGNvbG9yTWV0YWRhdGE/OiBDb2xvck1ldGFkYXRhO1xuICAvKipcbiAgICogQ29sb3Igc3BhY2Ugc2V0dGluZ3MgZm9yIHRoZSB2aWRlby5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGNvbG9yU3BhY2VTZXR0aW5ncz86IEgyNjVDb2xvclNwYWNlU2V0dGluZ3M7XG4gIC8qKlxuICAgKiBEZWJsb2NraW5nIGZpbHRlciBjb250cm9sLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZGVibG9ja2luZz86IEgyNjVEZWJsb2NraW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgdmlkZW8gZmlsdGVyIHNldHRpbmdzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyU2V0dGluZ3M/OiBIMjY1RmlsdGVyU2V0dGluZ3M7XG4gIC8qKlxuICAgKiBGb3VyLWJpdCBBRkQgdmFsdWUgdG8gd3JpdGUgb24gYWxsIGZyYW1lcy4gT25seSB2YWxpZCB3aGVuIGFmZFNpZ25hbGluZyBpcyBGSVhFRC5cbiAgICpcbiAgICogVmFsaWQgdmFsdWVzOiBGSVhFRF8wMDAwLCBGSVhFRF8wMDEwLCBGSVhFRF8wMDExLCBGSVhFRF8wMTAwLCBGSVhFRF8xMDAwLFxuICAgKiBGSVhFRF8xMDAxLCBGSVhFRF8xMDEwLCBGSVhFRF8xMDExLCBGSVhFRF8xMTAwLCBGSVhFRF8xMTAxLCBGSVhFRF8xMTEwLCBGSVhFRF8xMTExLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZml4ZWRBZmQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJZiBlbmFibGVkLCBhZGp1c3RzIHF1YW50aXphdGlvbiB3aXRoaW4gZWFjaCBmcmFtZSB0byByZWR1Y2UgZmxpY2tlciBvbiBJLWZyYW1lcy5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGZsaWNrZXJBcT86IEZsaWNrZXJBcTtcbiAgLyoqXG4gICAqIElmIGVuYWJsZWQsIHVzZXMgcmVmZXJlbmNlIEIgZnJhbWVzIGZvciBHT1Agc3RydWN0dXJlcyB0aGF0IGhhdmUgQiBmcmFtZXMgPiAxLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZ29wQlJlZmVyZW5jZT86IEdvcEJSZWZlcmVuY2U7XG4gIC8qKlxuICAgKiBGcmVxdWVuY3kgb2YgY2xvc2VkIEdPUHMuIFNldCB0byAxIGZvciBzdHJlYW1pbmcgc28gZGVjb2RlcnMgam9pbmluZyBtaWQtc3RyZWFtIGdldCBhbiBJRFIgZnJhbWUgcXVpY2tseS5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGdvcENsb3NlZENhZGVuY2U/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgQi1mcmFtZXMgYmV0d2VlbiByZWZlcmVuY2UgZnJhbWVzLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZ29wTnVtQkZyYW1lcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBILjI2NSBsZXZlbC5cbiAgICpcbiAgICogVmFsaWQgdmFsdWVzOiBIMjY1X0xFVkVMXzEsIEgyNjVfTEVWRUxfMiwgSDI2NV9MRVZFTF8yXzEsIEgyNjVfTEVWRUxfMyxcbiAgICogSDI2NV9MRVZFTF8zXzEsIEgyNjVfTEVWRUxfNCwgSDI2NV9MRVZFTF80XzEsIEgyNjVfTEVWRUxfNSwgSDI2NV9MRVZFTF81XzEsXG4gICAqIEgyNjVfTEVWRUxfNV8yLCBIMjY1X0xFVkVMXzYsIEgyNjVfTEVWRUxfNl8xLCBIMjY1X0xFVkVMXzZfMiwgSDI2NV9MRVZFTF9BVVRPLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdCAoYXV0bylcbiAgICovXG4gIHJlYWRvbmx5IGxldmVsPzogSDI2NUxldmVsO1xuICAvKipcbiAgICogQW1vdW50IG9mIGxvb2thaGVhZC4gTG93IGRlY3JlYXNlcyBsYXRlbmN5L21lbW9yeTsgaGlnaCBjYW4gcHJvZHVjZSBiZXR0ZXIgcXVhbGl0eS5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGxvb2tBaGVhZFJhdGVDb250cm9sPzogTG9va0FoZWFkUmF0ZUNvbnRyb2w7XG4gIC8qKlxuICAgKiBPbmx5IG1lYW5pbmdmdWwgaWYgc2NlbmVDaGFuZ2VEZXRlY3QgaXMgZW5hYmxlZC4gRW5mb3JjZXMgc2VwYXJhdGlvbiBiZXR3ZWVuXG4gICAqIHJlcGVhdGVkIChjYWRlbmNlKSBJLWZyYW1lcyBhbmQgSS1mcmFtZXMgaW5zZXJ0ZWQgYnkgc2NlbmUgY2hhbmdlIGRldGVjdGlvbi5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IG1pbklJbnRlcnZhbD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFNldHMgdGhlIHNjYW4gdHlwZSBvZiB0aGUgb3V0cHV0LlxuICAgKiBAZGVmYXVsdCBTY2FuVHlwZS5QUk9HUkVTU0lWRVxuICAgKi9cbiAgcmVhZG9ubHkgc2NhblR5cGU/OiBTY2FuVHlwZTtcbiAgLyoqXG4gICAqIE51bWJlciBvZiBzbGljZXMgcGVyIHBpY3R1cmUuXG4gICAqIEBkZWZhdWx0IC0gZW5jb2RlciBjaG9vc2VzIGJhc2VkIG9uIHJlc29sdXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHNsaWNlcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIERldGVybWluZXMgaG93IHRpbWVjb2RlcyBhcmUgaW5zZXJ0ZWQgaW50byB0aGUgdmlkZW8gZWxlbWVudGFyeSBzdHJlYW0uXG4gICAqIFRoaXMgY29udHJvbHMgaW5zZXJ0aW9uIGludG8gdGhlIG91dHB1dCBlbGVtZW50YXJ5IHN0cmVhbS4gVGhlIGNoYW5uZWwncyBgdGltZWNvZGVDb25maWdgIGNvbnRyb2xzIHRoZVxuICAgKiBzb3VyY2Ugb2YgdGhlIHRpbWVjb2RlIHVzZWQgZm9yIG91dHB1dC5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVjb2RlSW5zZXJ0aW9uPzogVGltZWNvZGVJbnNlcnRpb247XG4gIC8qKlxuICAgKiBNaW5pbXVtIFFQIHZhbHVlLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgbWluUXA/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBNaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zZWNvbmQuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBtaW5CaXRyYXRlPzogbnVtYmVyO1xuICAvKipcbiAgICogV2hldGhlciBtb3Rpb24gdmVjdG9ycyBjYW4gY3Jvc3MgcGljdHVyZSBib3VuZGFyaWVzLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgbXZPdmVyUGljdHVyZUJvdW5kYXJpZXM/OiBIMjY1TXZPdmVyUGljdHVyZUJvdW5kYXJpZXM7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVzZSB0ZW1wb3JhbCBtb3Rpb24gdmVjdG9yIHByZWRpY3Rpb24uXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBtdlRlbXBvcmFsUHJlZGljdG9yPzogSDI2NU12VGVtcG9yYWxQcmVkaWN0b3I7XG4gIC8qKlxuICAgKiBTdWItR09QIGxlbmd0aCBtb2RlLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZ29wTGVuZ3RoPzogU3ViZ29wTGVuZ3RoO1xuICAvKipcbiAgICogVGlsZSBoZWlnaHQgaW4gcGl4ZWxzLiBNdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIENUVSBzaXplLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgdGlsZUhlaWdodD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRpbGUgcGFkZGluZyBtb2RlLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgdGlsZVBhZGRpbmc/OiBIMjY1VGlsZVBhZGRpbmc7XG4gIC8qKlxuICAgKiBUaWxlIHdpZHRoIGluIHBpeGVscy4gTXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBDVFUgc2l6ZS5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IHRpbGVXaWR0aD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRyZWVibG9jayBzaXplIGZvciB0aGUgZW5jb2Rlci5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IHRyZWVibG9ja1NpemU/OiBIMjY1VHJlZWJsb2NrU2l6ZTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgc2NlbmUgY2hhbmdlIGRldGVjdGlvbiBpbnNlcnRzIEktZnJhbWVzIG9uIHNjZW5lIGNoYW5nZXMuXG4gICAqIEBkZWZhdWx0IEgyNjVTY2VuZUNoYW5nZURldGVjdC5FTkFCTEVEXG4gICAqL1xuICByZWFkb25seSBzY2VuZUNoYW5nZURldGVjdD86IEgyNjVTY2VuZUNoYW5nZURldGVjdDtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBBVjEgY29kZWMgc2V0dGluZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXYxU2V0dGluZ3NQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcmF0ZSBjb250cm9sIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSByYXRlQ29udHJvbD86IEF2MVJhdGVDb250cm9sO1xuICAvKipcbiAgICogVGhlIEdPUCBzaXplIChrZXlmcmFtZSBpbnRlcnZhbCkuXG4gICAqIEBkZWZhdWx0IEdvcFNpemUuc2Vjb25kcygxKVxuICAgKi9cbiAgcmVhZG9ubHkgZ29wU2l6ZT86IEdvcFNpemU7XG4gIC8qKlxuICAgKiBUaGUgdmlkZW8gZnJhbWUgcmF0ZS5cbiAgICogQGRlZmF1bHQgLSBmb2xsb3cgc291cmNlXG4gICAqL1xuICByZWFkb25seSBmcmFtZXJhdGU/OiBGcmFtZXJhdGU7XG4gIC8qKlxuICAgKiBUaW1lY29kZSBidXJuLWluIHNldHRpbmdzIHRvIG92ZXJsYXkgdGltZWNvZGUgb24gdGhlIHZpZGVvLlxuICAgKiBAZGVmYXVsdCAtIG5vIHRpbWVjb2RlIGJ1cm4taW5cbiAgICovXG4gIHJlYWRvbmx5IHRpbWVjb2RlQnVybmluPzogVGltZWNvZGVCdXJuaW5TZXR0aW5ncztcbiAgLyoqXG4gICAqIEFGRCBzaWduYWxpbmcgbW9kZS5cbiAgICogQGRlZmF1bHQgQWZkU2lnbmFsaW5nLk5PTkVcbiAgICovXG4gIHJlYWRvbmx5IGFmZFNpZ25hbGluZz86IEFmZFNpZ25hbGluZztcbiAgLyoqXG4gICAqIEJpdCBkZXB0aCBmb3IgdGhlIEFWMSBlbmNvZGUuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBiaXREZXB0aD86IEF2MUJpdERlcHRoO1xuICAvKipcbiAgICogU2l6ZSBvZiBidWZmZXIgKEhSRCBidWZmZXIgbW9kZWwpIGluIGJpdHMuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBidWZTaXplPzogbnVtYmVyO1xuICAvKipcbiAgICogQ29sb3Igc3BhY2Ugc2V0dGluZ3MgZm9yIHRoZSB2aWRlby5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGNvbG9yU3BhY2VTZXR0aW5ncz86IEF2MUNvbG9yU3BhY2VTZXR0aW5ncztcbiAgLyoqXG4gICAqIEZvdXItYml0IEFGRCB2YWx1ZSB0byB3cml0ZSBvbiBhbGwgZnJhbWVzLiBPbmx5IHZhbGlkIHdoZW4gYWZkU2lnbmFsaW5nIGlzIEZJWEVELlxuICAgKlxuICAgKiBWYWxpZCB2YWx1ZXM6IEZJWEVEXzAwMDAsIEZJWEVEXzAwMTAsIEZJWEVEXzAwMTEsIEZJWEVEXzAxMDAsIEZJWEVEXzEwMDAsXG4gICAqIEZJWEVEXzEwMDEsIEZJWEVEXzEwMTAsIEZJWEVEXzEwMTEsIEZJWEVEXzExMDAsIEZJWEVEXzExMDEsIEZJWEVEXzExMTAsIEZJWEVEXzExMTEuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBmaXhlZEFmZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBBVjEgbGV2ZWwuXG4gICAqXG4gICAqIFZhbGlkIHZhbHVlczogQVYxX0xFVkVMXzIsIEFWMV9MRVZFTF8yXzEsIEFWMV9MRVZFTF8zLCBBVjFfTEVWRUxfM18xLFxuICAgKiBBVjFfTEVWRUxfNCwgQVYxX0xFVkVMXzRfMSwgQVYxX0xFVkVMXzUsIEFWMV9MRVZFTF81XzEsIEFWMV9MRVZFTF81XzIsXG4gICAqIEFWMV9MRVZFTF81XzMsIEFWMV9MRVZFTF82LCBBVjFfTEVWRUxfNl8xLCBBVjFfTEVWRUxfNl8yLCBBVjFfTEVWRUxfNl8zLFxuICAgKiBBVjFfTEVWRUxfQVVUTy5cbiAgICpcbiAgICogQGRlZmF1bHQgQXYxTGV2ZWwuQVYxX0xFVkVMX0FVVE9cbiAgICovXG4gIHJlYWRvbmx5IGxldmVsPzogQXYxTGV2ZWw7XG4gIC8qKlxuICAgKiBBbW91bnQgb2YgbG9va2FoZWFkLiBMb3cgZGVjcmVhc2VzIGxhdGVuY3kvbWVtb3J5OyBoaWdoIGNhbiBwcm9kdWNlIGJldHRlciBxdWFsaXR5LlxuICAgKiBAZGVmYXVsdCBMb29rQWhlYWRSYXRlQ29udHJvbC5ISUdIXG4gICAqL1xuICByZWFkb25seSBsb29rQWhlYWRSYXRlQ29udHJvbD86IExvb2tBaGVhZFJhdGVDb250cm9sO1xuICAvKipcbiAgICogTWluaW11bSBiaXRyYXRlIGluIGJpdHMvc2Vjb25kLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgbWluQml0cmF0ZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIE9ubHkgbWVhbmluZ2Z1bCBpZiBzY2VuZUNoYW5nZURldGVjdCBpcyBlbmFibGVkLiBFbmZvcmNlcyBzZXBhcmF0aW9uIGJldHdlZW5cbiAgICogcmVwZWF0ZWQgKGNhZGVuY2UpIEktZnJhbWVzIGFuZCBJLWZyYW1lcyBpbnNlcnRlZCBieSBzY2VuZSBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgbWluSUludGVydmFsPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHBpeGVsIGFzcGVjdCByYXRpbyAoUEFSKSBvZiB0aGUgdmlkZW8uXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBwaXhlbEFzcGVjdFJhdGlvPzogUGl4ZWxBc3BlY3RSYXRpbztcbiAgLyoqXG4gICAqIFNjZW5lIGNoYW5nZSBkZXRlY3Rpb24uXG4gICAqIEBkZWZhdWx0IEF2MVNjZW5lQ2hhbmdlRGV0ZWN0LkVOQUJMRURcbiAgICovXG4gIHJlYWRvbmx5IHNjZW5lQ2hhbmdlRGV0ZWN0PzogQXYxU2NlbmVDaGFuZ2VEZXRlY3Q7XG4gIC8qKlxuICAgKiBTcGF0aWFsIGFkYXB0aXZlIHF1YW50aXphdGlvbi5cbiAgICogQGRlZmF1bHQgQXYxU3BhdGlhbEFxLkVOQUJMRURcbiAgICovXG4gIHJlYWRvbmx5IHNwYXRpYWxBcT86IEF2MVNwYXRpYWxBcTtcbiAgLyoqXG4gICAqIFRlbXBvcmFsIGFkYXB0aXZlIHF1YW50aXphdGlvbi5cbiAgICogQGRlZmF1bHQgQXYxVGVtcG9yYWxBcS5FTkFCTEVEXG4gICAqL1xuICByZWFkb25seSB0ZW1wb3JhbEFxPzogQXYxVGVtcG9yYWxBcTtcbiAgLyoqXG4gICAqIFRpbWVjb2RlIGluc2VydGlvbiBtb2RlLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgdGltZWNvZGVJbnNlcnRpb24/OiBBdjFUaW1lY29kZUluc2VydGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBmcmFtZSBjYXB0dXJlIGNvZGVjIHNldHRpbmdzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyYW1lQ2FwdHVyZVNldHRpbmdzUHJvcHMge1xuICAvKipcbiAgICogVGhlIGludGVydmFsIGJldHdlZW4gZnJhbWUgY2FwdHVyZXMuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBjYXB0dXJlSW50ZXJ2YWw/OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIFRpbWVjb2RlIGJ1cm4taW4gc2V0dGluZ3MgdG8gb3ZlcmxheSB0aW1lY29kZSBvbiB0aGUgdmlkZW8uXG4gICAqIEBkZWZhdWx0IC0gbm8gdGltZWNvZGUgYnVybi1pblxuICAgKi9cbiAgcmVhZG9ubHkgdGltZWNvZGVCdXJuaW4/OiBUaW1lY29kZUJ1cm5pblNldHRpbmdzO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVmlkZW9Db2RlY1NldHRpbmdzIChhYnN0cmFjdCArIHN1YmNsYXNzZXMpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFRoZSB0eXBlIG9mIHZpZGVvIGNvZGVjLiBVc2VycyBzZWxlY3QgYSBjb2RlYyB2aWEgdGhlXG4gKiBgVmlkZW9Db2RlY1NldHRpbmdzYCBmYWN0b3J5IG1ldGhvZHMsIG5ldmVyIGJ5IHBhc3NpbmcgdGhpcyB0eXBlIGRpcmVjdGx5LlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBlbnVtIFZpZGVvQ29kZWNUeXBlIHtcbiAgLyoqIEguMjY0IChBVkMpICovXG4gIEgyNjQgPSAnSDI2NCcsXG4gIC8qKiBILjI2NSAoSEVWQykgKi9cbiAgSDI2NSA9ICdIMjY1JyxcbiAgLyoqIEFWMSAqL1xuICBBVjEgPSAnQVYxJyxcbiAgLyoqIEZyYW1lIENhcHR1cmUgKEpQRUcpICovXG4gIEZSQU1FX0NBUFRVUkUgPSAnRlJBTUVfQ0FQVFVSRScsXG59XG5cbi8qKlxuICogVmlkZW8gY29kZWMgc2V0dGluZ3MuIFVzZSB0aGUgc3RhdGljIGZhY3RvcnkgbWV0aG9kcyB0byBjcmVhdGUuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBWaWRlb0NvZGVjU2V0dGluZ3Mge1xuICAvKiogQ3JlYXRlIEguMjY0IChBVkMpIGNvZGVjIHNldHRpbmdzLiAqL1xuICBwdWJsaWMgc3RhdGljIGgyNjQocHJvcHM/OiBIMjY0U2V0dGluZ3NQcm9wcyk6IFZpZGVvQ29kZWNTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBIMjY0VmlkZW9Db2RlY1NldHRpbmdzKHByb3BzID8/IHt9KTtcbiAgfVxuICAvKiogQ3JlYXRlIEguMjY1IChIRVZDKSBjb2RlYyBzZXR0aW5ncy4gRnJhbWVyYXRlIGlzIHJlcXVpcmVkIGZvciBILjI2NS4gKi9cbiAgcHVibGljIHN0YXRpYyBoMjY1KHByb3BzOiBIMjY1U2V0dGluZ3NQcm9wcyk6IFZpZGVvQ29kZWNTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBIMjY1VmlkZW9Db2RlY1NldHRpbmdzKHByb3BzKTtcbiAgfVxuICAvKiogQ3JlYXRlIEFWMSBjb2RlYyBzZXR0aW5ncy4gKi9cbiAgcHVibGljIHN0YXRpYyBhdjEocHJvcHM/OiBBdjFTZXR0aW5nc1Byb3BzKTogVmlkZW9Db2RlY1NldHRpbmdzIHtcbiAgICByZXR1cm4gbmV3IEF2MVZpZGVvQ29kZWNTZXR0aW5ncyhwcm9wcyA/PyB7fSk7XG4gIH1cbiAgLyoqIENyZWF0ZSBmcmFtZSBjYXB0dXJlIGNvZGVjIHNldHRpbmdzLiAqL1xuICBwdWJsaWMgc3RhdGljIGZyYW1lQ2FwdHVyZShwcm9wcz86IEZyYW1lQ2FwdHVyZVNldHRpbmdzUHJvcHMpOiBWaWRlb0NvZGVjU2V0dGluZ3Mge1xuICAgIHJldHVybiBuZXcgRnJhbWVDYXB0dXJlVmlkZW9Db2RlY1NldHRpbmdzKHByb3BzID8/IHt9KTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IF9jb2RlY1R5cGU6IFZpZGVvQ29kZWNUeXBlO1xuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBhYnN0cmFjdCBfYmluZCgpOiBDZm5DaGFubmVsLlZpZGVvQ29kZWNTZXR0aW5nc1Byb3BlcnR5O1xuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBhYnN0cmFjdCBfaGFzRXhwbGljaXRGcmFtZXJhdGUoKTogYm9vbGVhbjtcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuY2xhc3MgSDI2NFZpZGVvQ29kZWNTZXR0aW5ncyBleHRlbmRzIFZpZGVvQ29kZWNTZXR0aW5ncyB7XG4gIHB1YmxpYyByZWFkb25seSBfY29kZWNUeXBlID0gVmlkZW9Db2RlY1R5cGUuSDI2NDtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogSDI2NFNldHRpbmdzUHJvcHMpIHsgc3VwZXIoKTsgfVxuXG4gIHB1YmxpYyBfaGFzRXhwbGljaXRGcmFtZXJhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZnJhbWVyYXRlICE9IG51bGw7XG4gIH1cblxuICBwdWJsaWMgX2JpbmQoKTogQ2ZuQ2hhbm5lbC5WaWRlb0NvZGVjU2V0dGluZ3NQcm9wZXJ0eSB7XG4gICAgY29uc3QgcCA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgcmMgPSBwLnJhdGVDb250cm9sO1xuICAgIHJldHVybiB7XG4gICAgICBoMjY0U2V0dGluZ3M6IHtcbiAgICAgICAgYml0cmF0ZTogcmM/Ll9iaXRyYXRlPy50b0JwcygpLFxuICAgICAgICBtYXhCaXRyYXRlOiByYz8uX21heEJpdHJhdGU/LnRvQnBzKCksXG4gICAgICAgIHJhdGVDb250cm9sTW9kZTogcmM/Ll9tb2RlLFxuICAgICAgICBxdmJyUXVhbGl0eUxldmVsOiByYz8uX3F2YnJRdWFsaXR5TGV2ZWwsXG4gICAgICAgIHByb2ZpbGU6IChwLnByb2ZpbGUgPz8gSDI2NFByb2ZpbGUuTUFJTikudmFsdWUsXG4gICAgICAgIGdvcFNpemU6IHAuZ29wU2l6ZT8uX3ZhbHVlID8/IDEsXG4gICAgICAgIGdvcFNpemVVbml0czogcC5nb3BTaXplPy5fdW5pdHMgPz8gJ1NFQ09ORFMnLFxuICAgICAgICBnb3BOdW1CRnJhbWVzOiBwLmdvcE51bUJGcmFtZXMsXG4gICAgICAgIGFkYXB0aXZlUXVhbnRpemF0aW9uOiAocC5hZGFwdGl2ZVF1YW50aXphdGlvbiA/PyBIMjY0QWRhcHRpdmVRdWFudGl6YXRpb24uQVVUTykudmFsdWUsXG4gICAgICAgIGZyYW1lcmF0ZUNvbnRyb2w6IHAuZnJhbWVyYXRlID8gJ1NQRUNJRklFRCcgOiAnSU5JVElBTElaRV9GUk9NX1NPVVJDRScsXG4gICAgICAgIGZyYW1lcmF0ZU51bWVyYXRvcjogcC5mcmFtZXJhdGU/Ll9udW1lcmF0b3IoKSxcbiAgICAgICAgZnJhbWVyYXRlRGVub21pbmF0b3I6IHAuZnJhbWVyYXRlPy5fZGVub21pbmF0b3IoKSxcbiAgICAgICAgcGFyQ29udHJvbDogKHAucGl4ZWxBc3BlY3RSYXRpbyB8fCBwLmZyYW1lcmF0ZSkgPyAnU1BFQ0lGSUVEJyA6ICdJTklUSUFMSVpFX0ZST01fU09VUkNFJyxcbiAgICAgICAgcGFyTnVtZXJhdG9yOiBwLnBpeGVsQXNwZWN0UmF0aW8/Ll9udW1lcmF0b3IoKSA/PyAocC5mcmFtZXJhdGUgPyBQaXhlbEFzcGVjdFJhdGlvLlNRVUFSRS5fbnVtZXJhdG9yKCkgOiB1bmRlZmluZWQpLFxuICAgICAgICBwYXJEZW5vbWluYXRvcjogcC5waXhlbEFzcGVjdFJhdGlvPy5fZGVub21pbmF0b3IoKSA/PyAocC5mcmFtZXJhdGUgPyBQaXhlbEFzcGVjdFJhdGlvLlNRVUFSRS5fZGVub21pbmF0b3IoKSA6IHVuZGVmaW5lZCksXG4gICAgICAgIHNjZW5lQ2hhbmdlRGV0ZWN0OiAocC5zY2VuZUNoYW5nZURldGVjdCA/PyBIMjY0U2NlbmVDaGFuZ2VEZXRlY3QuRU5BQkxFRCkudmFsdWUsXG4gICAgICAgIHNwYXRpYWxBcTogKHAuc3BhdGlhbEFxID8/IEgyNjRTcGF0aWFsQXEuRU5BQkxFRCkudmFsdWUsXG4gICAgICAgIHRlbXBvcmFsQXE6IChwLnRlbXBvcmFsQXEgPz8gSDI2NFRlbXBvcmFsQXEuRU5BQkxFRCkudmFsdWUsXG4gICAgICAgIHRpbWVjb2RlQnVybmluU2V0dGluZ3M6IHAudGltZWNvZGVCdXJuaW4gPyB7XG4gICAgICAgICAgZm9udFNpemU6IHAudGltZWNvZGVCdXJuaW4uZm9udFNpemU/LnZhbHVlLFxuICAgICAgICAgIHBvc2l0aW9uOiBwLnRpbWVjb2RlQnVybmluLnBvc2l0aW9uPy52YWx1ZSxcbiAgICAgICAgICBwcmVmaXg6IHAudGltZWNvZGVCdXJuaW4ucHJlZml4LFxuICAgICAgICB9IDogdW5kZWZpbmVkLFxuICAgICAgICBhZmRTaWduYWxpbmc6IChwLmFmZFNpZ25hbGluZyA/PyBBZmRTaWduYWxpbmcuTk9ORSkudmFsdWUsXG4gICAgICAgIGJ1ZkZpbGxQY3Q6IHAuYnVmRmlsbFBjdCxcbiAgICAgICAgYnVmU2l6ZTogcC5idWZTaXplLFxuICAgICAgICBjb2xvck1ldGFkYXRhOiBwLmNvbG9yTWV0YWRhdGE/LnZhbHVlLFxuICAgICAgICBjb2xvclNwYWNlU2V0dGluZ3M6IHAuY29sb3JTcGFjZVNldHRpbmdzPy5fYmluZCgpLFxuICAgICAgICBlbnRyb3B5RW5jb2Rpbmc6IHAuZW50cm9weUVuY29kaW5nPy52YWx1ZSxcbiAgICAgICAgZmlsdGVyU2V0dGluZ3M6IHAuZmlsdGVyU2V0dGluZ3M/Ll9iaW5kKCksXG4gICAgICAgIGZpeGVkQWZkOiBwLmZpeGVkQWZkLFxuICAgICAgICBmbGlja2VyQXE6IChwLmZsaWNrZXJBcSA/PyBGbGlja2VyQXEuRU5BQkxFRCkudmFsdWUsXG4gICAgICAgIGZvcmNlRmllbGRQaWN0dXJlczogcC5mb3JjZUZpZWxkUGljdHVyZXM/LnZhbHVlLFxuICAgICAgICBnb3BCUmVmZXJlbmNlOiBwLmdvcEJSZWZlcmVuY2U/LnZhbHVlLFxuICAgICAgICBnb3BDbG9zZWRDYWRlbmNlOiBwLmdvcENsb3NlZENhZGVuY2UsXG4gICAgICAgIGxldmVsOiAocC5sZXZlbCA/PyBIMjY0TGV2ZWwuSDI2NF9MRVZFTF9BVVRPKS52YWx1ZSxcbiAgICAgICAgbG9va0FoZWFkUmF0ZUNvbnRyb2w6IChwLmxvb2tBaGVhZFJhdGVDb250cm9sID8/IExvb2tBaGVhZFJhdGVDb250cm9sLkhJR0gpLnZhbHVlLFxuICAgICAgICBtaW5JSW50ZXJ2YWw6IHAubWluSUludGVydmFsLFxuICAgICAgICBudW1SZWZGcmFtZXM6IHAubnVtUmVmRnJhbWVzLFxuICAgICAgICBzY2FuVHlwZTogKHAuc2NhblR5cGUgPz8gU2NhblR5cGUuUFJPR1JFU1NJVkUpLnZhbHVlLFxuICAgICAgICBzbGljZXM6IHAuc2xpY2VzLFxuICAgICAgICBzb2Z0bmVzczogcC5zb2Z0bmVzcyxcbiAgICAgICAgc3ludGF4OiAocC5zeW50YXggPz8gSDI2NFN5bnRheC5ERUZBVUxUKS52YWx1ZSxcbiAgICAgICAgdGltZWNvZGVJbnNlcnRpb246IHAudGltZWNvZGVJbnNlcnRpb24/LnZhbHVlLFxuICAgICAgICBtaW5RcDogcC5taW5RcCxcbiAgICAgICAgbWluQml0cmF0ZTogcC5taW5CaXRyYXRlLFxuICAgICAgICBxdWFsaXR5TGV2ZWw6IHAucXVhbGl0eUxldmVsPy52YWx1ZSxcbiAgICAgICAgc3ViZ29wTGVuZ3RoOiBwLnN1YmdvcExlbmd0aD8udmFsdWUsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuY2xhc3MgSDI2NVZpZGVvQ29kZWNTZXR0aW5ncyBleHRlbmRzIFZpZGVvQ29kZWNTZXR0aW5ncyB7XG4gIHB1YmxpYyByZWFkb25seSBfY29kZWNUeXBlID0gVmlkZW9Db2RlY1R5cGUuSDI2NTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogSDI2NVNldHRpbmdzUHJvcHMpIHsgc3VwZXIoKTsgfVxuXG4gIHB1YmxpYyBfaGFzRXhwbGljaXRGcmFtZXJhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZnJhbWVyYXRlICE9IG51bGw7XG4gIH1cblxuICBwdWJsaWMgX2JpbmQoKTogQ2ZuQ2hhbm5lbC5WaWRlb0NvZGVjU2V0dGluZ3NQcm9wZXJ0eSB7XG4gICAgY29uc3QgcCA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgcmMgPSBwLnJhdGVDb250cm9sO1xuICAgIHJldHVybiB7XG4gICAgICBoMjY1U2V0dGluZ3M6IHtcbiAgICAgICAgYml0cmF0ZTogcmM/Ll9iaXRyYXRlPy50b0JwcygpLFxuICAgICAgICBtYXhCaXRyYXRlOiByYz8uX21heEJpdHJhdGU/LnRvQnBzKCksXG4gICAgICAgIHJhdGVDb250cm9sTW9kZTogcmM/Ll9tb2RlLFxuICAgICAgICBxdmJyUXVhbGl0eUxldmVsOiByYz8uX3F2YnJRdWFsaXR5TGV2ZWwsXG4gICAgICAgIHByb2ZpbGU6IChwLnByb2ZpbGUgPz8gSDI2NVByb2ZpbGUuTUFJTikudmFsdWUsXG4gICAgICAgIHRpZXI6IChwLnRpZXIgPz8gSDI2NVRpZXIuTUFJTikudmFsdWUsXG4gICAgICAgIGxldmVsOiBwLmxldmVsPy52YWx1ZSxcbiAgICAgICAgZ29wU2l6ZTogcC5nb3BTaXplPy5fdmFsdWUgPz8gMSxcbiAgICAgICAgZ29wU2l6ZVVuaXRzOiBwLmdvcFNpemU/Ll91bml0cyA/PyAnU0VDT05EUycsXG4gICAgICAgIGZyYW1lcmF0ZU51bWVyYXRvcjogcC5mcmFtZXJhdGUuX251bWVyYXRvcigpLFxuICAgICAgICBmcmFtZXJhdGVEZW5vbWluYXRvcjogcC5mcmFtZXJhdGUuX2Rlbm9taW5hdG9yKCksXG4gICAgICAgIHBhck51bWVyYXRvcjogcC5waXhlbEFzcGVjdFJhdGlvPy5fbnVtZXJhdG9yKCkgPz8gUGl4ZWxBc3BlY3RSYXRpby5TUVVBUkUuX251bWVyYXRvcigpLFxuICAgICAgICBwYXJEZW5vbWluYXRvcjogcC5waXhlbEFzcGVjdFJhdGlvPy5fZGVub21pbmF0b3IoKSA/PyBQaXhlbEFzcGVjdFJhdGlvLlNRVUFSRS5fZGVub21pbmF0b3IoKSxcbiAgICAgICAgc2NlbmVDaGFuZ2VEZXRlY3Q6IChwLnNjZW5lQ2hhbmdlRGV0ZWN0ID8/IEgyNjVTY2VuZUNoYW5nZURldGVjdC5FTkFCTEVEKS52YWx1ZSxcbiAgICAgICAgdGltZWNvZGVCdXJuaW5TZXR0aW5nczogcC50aW1lY29kZUJ1cm5pbiA/IHtcbiAgICAgICAgICBmb250U2l6ZTogcC50aW1lY29kZUJ1cm5pbi5mb250U2l6ZT8udmFsdWUsXG4gICAgICAgICAgcG9zaXRpb246IHAudGltZWNvZGVCdXJuaW4ucG9zaXRpb24/LnZhbHVlLFxuICAgICAgICAgIHByZWZpeDogcC50aW1lY29kZUJ1cm5pbi5wcmVmaXgsXG4gICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICAgIGFkYXB0aXZlUXVhbnRpemF0aW9uOiAocC5hZGFwdGl2ZVF1YW50aXphdGlvbiA/PyBIMjY1QWRhcHRpdmVRdWFudGl6YXRpb24uQVVUTykudmFsdWUsXG4gICAgICAgIGFmZFNpZ25hbGluZzogKHAuYWZkU2lnbmFsaW5nID8/IEFmZFNpZ25hbGluZy5OT05FKS52YWx1ZSxcbiAgICAgICAgYWx0ZXJuYXRpdmVUcmFuc2ZlckZ1bmN0aW9uOiBwLmFsdGVybmF0aXZlVHJhbnNmZXJGdW5jdGlvbj8udmFsdWUsXG4gICAgICAgIGJ1ZlNpemU6IHAuYnVmU2l6ZSxcbiAgICAgICAgY29sb3JNZXRhZGF0YTogcC5jb2xvck1ldGFkYXRhPy52YWx1ZSxcbiAgICAgICAgY29sb3JTcGFjZVNldHRpbmdzOiBwLmNvbG9yU3BhY2VTZXR0aW5ncz8uX2JpbmQoKSxcbiAgICAgICAgZGVibG9ja2luZzogcC5kZWJsb2NraW5nPy52YWx1ZSxcbiAgICAgICAgZmlsdGVyU2V0dGluZ3M6IHAuZmlsdGVyU2V0dGluZ3M/Ll9iaW5kKCksXG4gICAgICAgIGZpeGVkQWZkOiBwLmZpeGVkQWZkLFxuICAgICAgICBmbGlja2VyQXE6IHAuZmxpY2tlckFxPy52YWx1ZSxcbiAgICAgICAgZ29wQlJlZmVyZW5jZTogcC5nb3BCUmVmZXJlbmNlPy52YWx1ZSxcbiAgICAgICAgZ29wQ2xvc2VkQ2FkZW5jZTogcC5nb3BDbG9zZWRDYWRlbmNlLFxuICAgICAgICBnb3BOdW1CRnJhbWVzOiBwLmdvcE51bUJGcmFtZXMsXG4gICAgICAgIGxvb2tBaGVhZFJhdGVDb250cm9sOiBwLmxvb2tBaGVhZFJhdGVDb250cm9sPy52YWx1ZSxcbiAgICAgICAgbWluSUludGVydmFsOiBwLm1pbklJbnRlcnZhbCxcbiAgICAgICAgc2NhblR5cGU6IChwLnNjYW5UeXBlID8/IFNjYW5UeXBlLlBST0dSRVNTSVZFKS52YWx1ZSxcbiAgICAgICAgc2xpY2VzOiBwLnNsaWNlcyxcbiAgICAgICAgdGltZWNvZGVJbnNlcnRpb246IHAudGltZWNvZGVJbnNlcnRpb24/LnZhbHVlLFxuICAgICAgICBtaW5RcDogcC5taW5RcCxcbiAgICAgICAgbWluQml0cmF0ZTogcC5taW5CaXRyYXRlLFxuICAgICAgICBtdk92ZXJQaWN0dXJlQm91bmRhcmllczogcC5tdk92ZXJQaWN0dXJlQm91bmRhcmllcz8udmFsdWUsXG4gICAgICAgIG12VGVtcG9yYWxQcmVkaWN0b3I6IHAubXZUZW1wb3JhbFByZWRpY3Rvcj8udmFsdWUsXG4gICAgICAgIHN1YmdvcExlbmd0aDogcC5zdWJnb3BMZW5ndGg/LnZhbHVlLFxuICAgICAgICB0aWxlSGVpZ2h0OiBwLnRpbGVIZWlnaHQsXG4gICAgICAgIHRpbGVQYWRkaW5nOiBwLnRpbGVQYWRkaW5nPy52YWx1ZSxcbiAgICAgICAgdGlsZVdpZHRoOiBwLnRpbGVXaWR0aCxcbiAgICAgICAgdHJlZWJsb2NrU2l6ZTogcC50cmVlYmxvY2tTaXplPy52YWx1ZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuXG4vKiogQGludGVybmFsICovXG5jbGFzcyBBdjFWaWRlb0NvZGVjU2V0dGluZ3MgZXh0ZW5kcyBWaWRlb0NvZGVjU2V0dGluZ3Mge1xuICBwdWJsaWMgcmVhZG9ubHkgX2NvZGVjVHlwZSA9IFZpZGVvQ29kZWNUeXBlLkFWMTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogQXYxU2V0dGluZ3NQcm9wcykgeyBzdXBlcigpOyB9XG5cbiAgcHVibGljIF9oYXNFeHBsaWNpdEZyYW1lcmF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5mcmFtZXJhdGUgIT0gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBfYmluZCgpOiBDZm5DaGFubmVsLlZpZGVvQ29kZWNTZXR0aW5nc1Byb3BlcnR5IHtcbiAgICBjb25zdCBwID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCByYyA9IHAucmF0ZUNvbnRyb2w7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF2MVNldHRpbmdzOiB7XG4gICAgICAgIGJpdHJhdGU6IHJjPy5fYml0cmF0ZT8udG9CcHMoKSxcbiAgICAgICAgbWF4Qml0cmF0ZTogcmM/Ll9tYXhCaXRyYXRlPy50b0JwcygpLFxuICAgICAgICByYXRlQ29udHJvbE1vZGU6IHJjPy5fbW9kZSxcbiAgICAgICAgcXZiclF1YWxpdHlMZXZlbDogcmM/Ll9xdmJyUXVhbGl0eUxldmVsLFxuICAgICAgICBnb3BTaXplOiBwLmdvcFNpemU/Ll92YWx1ZSA/PyAxLFxuICAgICAgICBnb3BTaXplVW5pdHM6IHAuZ29wU2l6ZT8uX3VuaXRzID8/ICdTRUNPTkRTJyxcbiAgICAgICAgZnJhbWVyYXRlTnVtZXJhdG9yOiBwLmZyYW1lcmF0ZT8uX251bWVyYXRvcigpLFxuICAgICAgICBmcmFtZXJhdGVEZW5vbWluYXRvcjogcC5mcmFtZXJhdGU/Ll9kZW5vbWluYXRvcigpLFxuICAgICAgICB0aW1lY29kZUJ1cm5pblNldHRpbmdzOiBwLnRpbWVjb2RlQnVybmluID8ge1xuICAgICAgICAgIGZvbnRTaXplOiBwLnRpbWVjb2RlQnVybmluLmZvbnRTaXplPy52YWx1ZSxcbiAgICAgICAgICBwb3NpdGlvbjogcC50aW1lY29kZUJ1cm5pbi5wb3NpdGlvbj8udmFsdWUsXG4gICAgICAgICAgcHJlZml4OiBwLnRpbWVjb2RlQnVybmluLnByZWZpeCxcbiAgICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgYWZkU2lnbmFsaW5nOiAocC5hZmRTaWduYWxpbmcgPz8gQWZkU2lnbmFsaW5nLk5PTkUpLnZhbHVlLFxuICAgICAgICBiaXREZXB0aDogcC5iaXREZXB0aD8udmFsdWUsXG4gICAgICAgIGJ1ZlNpemU6IHAuYnVmU2l6ZSxcbiAgICAgICAgY29sb3JTcGFjZVNldHRpbmdzOiBwLmNvbG9yU3BhY2VTZXR0aW5ncz8uX2JpbmQoKSxcbiAgICAgICAgZml4ZWRBZmQ6IHAuZml4ZWRBZmQsXG4gICAgICAgIGxldmVsOiAocC5sZXZlbCA/PyBBdjFMZXZlbC5BVjFfTEVWRUxfQVVUTykudmFsdWUsXG4gICAgICAgIG1pbkJpdHJhdGU6IHAubWluQml0cmF0ZSxcbiAgICAgICAgbWluSUludGVydmFsOiBwLm1pbklJbnRlcnZhbCxcbiAgICAgICAgcGFyTnVtZXJhdG9yOiBwLnBpeGVsQXNwZWN0UmF0aW8/Ll9udW1lcmF0b3IoKSxcbiAgICAgICAgcGFyRGVub21pbmF0b3I6IHAucGl4ZWxBc3BlY3RSYXRpbz8uX2Rlbm9taW5hdG9yKCksXG4gICAgICAgIHNjZW5lQ2hhbmdlRGV0ZWN0OiAocC5zY2VuZUNoYW5nZURldGVjdCA/PyBBdjFTY2VuZUNoYW5nZURldGVjdC5FTkFCTEVEKS52YWx1ZSxcbiAgICAgICAgc3BhdGlhbEFxOiAocC5zcGF0aWFsQXEgPz8gQXYxU3BhdGlhbEFxLkVOQUJMRUQpLnZhbHVlLFxuICAgICAgICB0ZW1wb3JhbEFxOiAocC50ZW1wb3JhbEFxID8/IEF2MVRlbXBvcmFsQXEuRU5BQkxFRCkudmFsdWUsXG4gICAgICAgIGxvb2tBaGVhZFJhdGVDb250cm9sOiAocC5sb29rQWhlYWRSYXRlQ29udHJvbCA/PyBMb29rQWhlYWRSYXRlQ29udHJvbC5ISUdIKS52YWx1ZSxcbiAgICAgICAgdGltZWNvZGVJbnNlcnRpb246IHAudGltZWNvZGVJbnNlcnRpb24/LnZhbHVlLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmNsYXNzIEZyYW1lQ2FwdHVyZVZpZGVvQ29kZWNTZXR0aW5ncyBleHRlbmRzIFZpZGVvQ29kZWNTZXR0aW5ncyB7XG4gIHB1YmxpYyByZWFkb25seSBfY29kZWNUeXBlID0gVmlkZW9Db2RlY1R5cGUuRlJBTUVfQ0FQVFVSRTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogRnJhbWVDYXB0dXJlU2V0dGluZ3NQcm9wcykgeyBzdXBlcigpOyB9XG5cbiAgcHVibGljIF9oYXNFeHBsaWNpdEZyYW1lcmF0ZSgpOiBib29sZWFuIHsgcmV0dXJuIHRydWU7IH1cblxuICBwdWJsaWMgX2JpbmQoKTogQ2ZuQ2hhbm5lbC5WaWRlb0NvZGVjU2V0dGluZ3NQcm9wZXJ0eSB7XG4gICAgY29uc3QgcCA9IHRoaXMucHJvcHM7XG4gICAgLy8gT25seSBlbWl0IGFuIGludGVydmFsIHdoZW4gc2V0LiBXaG9sZS1zZWNvbmQgRHVyYXRpb25zIHJlbmRlciBhcyBTRUNPTkRTLCBzdWItc2Vjb25kIGFzIE1JTExJU0VDT05EUy5cbiAgICBjb25zdCBpbnRlcnZhbE1zID0gcC5jYXB0dXJlSW50ZXJ2YWw/LnRvTWlsbGlzZWNvbmRzKCk7XG4gICAgY29uc3Qgd2hvbGVTZWNvbmRzID0gaW50ZXJ2YWxNcyAhPT0gdW5kZWZpbmVkICYmIGludGVydmFsTXMgJSAxMDAwID09PSAwO1xuICAgIHJldHVybiB7XG4gICAgICBmcmFtZUNhcHR1cmVTZXR0aW5nczoge1xuICAgICAgICBjYXB0dXJlSW50ZXJ2YWw6IGludGVydmFsTXMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICh3aG9sZVNlY29uZHMgPyBpbnRlcnZhbE1zIC8gMTAwMCA6IGludGVydmFsTXMpLFxuICAgICAgICBjYXB0dXJlSW50ZXJ2YWxVbml0czogaW50ZXJ2YWxNcyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogKHdob2xlU2Vjb25kcyA/ICdTRUNPTkRTJyA6ICdNSUxMSVNFQ09ORFMnKSxcbiAgICAgICAgdGltZWNvZGVCdXJuaW5TZXR0aW5nczogcC50aW1lY29kZUJ1cm5pbiA/IHtcbiAgICAgICAgICBmb250U2l6ZTogcC50aW1lY29kZUJ1cm5pbi5mb250U2l6ZT8udmFsdWUsXG4gICAgICAgICAgcG9zaXRpb246IHAudGltZWNvZGVCdXJuaW4ucG9zaXRpb24/LnZhbHVlLFxuICAgICAgICAgIHByZWZpeDogcC50aW1lY29kZUJ1cm5pbi5wcmVmaXgsXG4gICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuIl19