@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,629 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CaptionDashRole = exports.CaptionAccessibility = exports.AudioDashRole = exports.DvbDashAccessibility = exports.AudioType = exports.AudioLanguageCodeControl = exports.AudioTypeControl = exports.NielsenDistributionType = exports.NielsenWatermarkTimezone = exports.NielsenCbetStepaside = exports.AudioNormalizationPeakCalculation = exports.AudioNormalizationAlgorithmControl = exports.AudioNormalizationAlgorithm = exports.ScalingBehavior = exports.RespondToAfd = exports.EncodeConfiguration = void 0;
4
+ const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
7
+ const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
8
+ /**
9
+ * Base interface for an encode configuration (video, audio, or caption).
10
+ *
11
+ * The same EncodeConfiguration instance can be shared across multiple output groups within a channel.
12
+ * The channel automatically deduplicates encode descriptions by name at synth time.
13
+ */
14
+ class EncodeConfiguration {
15
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.EncodeConfiguration", version: "2.268.0-alpha.0" };
16
+ /**
17
+ * Create a video encode configuration.
18
+ */
19
+ static video(props) {
20
+ try {
21
+ jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_VideoEncodeProps(props);
22
+ }
23
+ catch (error) {
24
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
25
+ Error.captureStackTrace(error, this.video);
26
+ }
27
+ throw error;
28
+ }
29
+ return new VideoEncodeConfiguration(props);
30
+ }
31
+ /**
32
+ * Create an audio encode configuration.
33
+ */
34
+ static audio(props) {
35
+ try {
36
+ jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_AudioEncodeProps(props);
37
+ }
38
+ catch (error) {
39
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
40
+ Error.captureStackTrace(error, this.audio);
41
+ }
42
+ throw error;
43
+ }
44
+ return new AudioEncodeConfiguration(props);
45
+ }
46
+ /**
47
+ * Create a caption encode configuration.
48
+ */
49
+ static caption(props) {
50
+ try {
51
+ jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_CaptionEncodeProps(props);
52
+ }
53
+ catch (error) {
54
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
55
+ Error.captureStackTrace(error, this.caption);
56
+ }
57
+ throw error;
58
+ }
59
+ return new CaptionEncodeConfiguration(props);
60
+ }
61
+ /**
62
+ * Grant the channel role read access to any external files this encode references (e.g. a
63
+ * burn-in caption font in S3). Default is a no-op; caption encodes override it.
64
+ * @internal
65
+ */
66
+ _grantRead(_role) { }
67
+ /**
68
+ * Whether this is an in-band caption encode (burn-in, embedded) that does not produce a
69
+ * separate track. Returns false for non-caption encodes and out-of-band caption types.
70
+ * @internal
71
+ */
72
+ _isInBandCaption() {
73
+ return false;
74
+ }
75
+ /**
76
+ * Whether this is an embedded-family caption encode. Only one per output is allowed.
77
+ * @internal
78
+ */
79
+ _isEmbeddedCaption() {
80
+ return false;
81
+ }
82
+ }
83
+ exports.EncodeConfiguration = EncodeConfiguration;
84
+ /**
85
+ * How to respond to AFD values in the input stream.
86
+ */
87
+ class RespondToAfd {
88
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.RespondToAfd", version: "2.268.0-alpha.0" };
89
+ /** Clip input video based on AFD values */
90
+ static RESPOND = new RespondToAfd('RESPOND');
91
+ /** Pass AFD values through without clipping */
92
+ static PASSTHROUGH = new RespondToAfd('PASSTHROUGH');
93
+ /** Ignore AFD values */
94
+ static NONE = new RespondToAfd('NONE');
95
+ /** A value not yet modelled by AWS CDK. */
96
+ static of(value) {
97
+ return new RespondToAfd(value);
98
+ }
99
+ /** The underlying string value passed to CloudFormation. */
100
+ value;
101
+ constructor(value) {
102
+ this.value = value;
103
+ }
104
+ }
105
+ exports.RespondToAfd = RespondToAfd;
106
+ /**
107
+ * Video scaling behavior.
108
+ */
109
+ class ScalingBehavior {
110
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.ScalingBehavior", version: "2.268.0-alpha.0" };
111
+ /** May insert black boxes to match output resolution */
112
+ static DEFAULT = new ScalingBehavior('DEFAULT');
113
+ /** Stretch video to fill the output resolution */
114
+ static STRETCH_TO_OUTPUT = new ScalingBehavior('STRETCH_TO_OUTPUT');
115
+ /** Intelligently crop the video to focus on key subjects (9:16 vertical). Requires an Elemental Inference feed on the channel via `inferenceFeed`. Do NOT include `FeedOutput.cropping()` on the feed — MediaLive auto-inserts it. */
116
+ static SMART_CROP = new ScalingBehavior('SMART_CROP');
117
+ /** A value not yet modelled by AWS CDK. */
118
+ static of(value) {
119
+ return new ScalingBehavior(value);
120
+ }
121
+ /** The underlying string value passed to CloudFormation. */
122
+ value;
123
+ constructor(value) {
124
+ this.value = value;
125
+ }
126
+ }
127
+ exports.ScalingBehavior = ScalingBehavior;
128
+ /**
129
+ * Audio normalization algorithm.
130
+ */
131
+ class AudioNormalizationAlgorithm {
132
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.AudioNormalizationAlgorithm", version: "2.268.0-alpha.0" };
133
+ /** CALM Act specification (ITU-R BS.1770-1) */
134
+ static ITU_1770_1 = new AudioNormalizationAlgorithm('ITU_1770_1');
135
+ /** EBU R-128 specification (ITU-R BS.1770-2) */
136
+ static ITU_1770_2 = new AudioNormalizationAlgorithm('ITU_1770_2');
137
+ /** A value not yet modelled by AWS CDK. */
138
+ static of(value) {
139
+ return new AudioNormalizationAlgorithm(value);
140
+ }
141
+ /** The underlying string value passed to CloudFormation. */
142
+ value;
143
+ constructor(value) {
144
+ this.value = value;
145
+ }
146
+ }
147
+ exports.AudioNormalizationAlgorithm = AudioNormalizationAlgorithm;
148
+ /**
149
+ * Audio normalization algorithm control.
150
+ */
151
+ class AudioNormalizationAlgorithmControl {
152
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.AudioNormalizationAlgorithmControl", version: "2.268.0-alpha.0" };
153
+ /** Correct the audio using the chosen algorithm */
154
+ static CORRECT_AUDIO = new AudioNormalizationAlgorithmControl('CORRECT_AUDIO');
155
+ /** Measure audio but do not adjust */
156
+ static MEASURE_ONLY = new AudioNormalizationAlgorithmControl('MEASURE_ONLY');
157
+ /** A value not yet modelled by AWS CDK. */
158
+ static of(value) {
159
+ return new AudioNormalizationAlgorithmControl(value);
160
+ }
161
+ /** The underlying string value passed to CloudFormation. */
162
+ value;
163
+ constructor(value) {
164
+ this.value = value;
165
+ }
166
+ }
167
+ exports.AudioNormalizationAlgorithmControl = AudioNormalizationAlgorithmControl;
168
+ /**
169
+ * Peak calculation method for audio normalization.
170
+ */
171
+ class AudioNormalizationPeakCalculation {
172
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.AudioNormalizationPeakCalculation", version: "2.268.0-alpha.0" };
173
+ /** Calculate and log the TruePeak for each audio track. */
174
+ static TRUE_PEAK = new AudioNormalizationPeakCalculation('TRUE_PEAK');
175
+ /** A value not yet modelled by AWS CDK. */
176
+ static of(value) {
177
+ return new AudioNormalizationPeakCalculation(value);
178
+ }
179
+ /** The underlying string value passed to CloudFormation. */
180
+ value;
181
+ constructor(value) {
182
+ this.value = value;
183
+ }
184
+ }
185
+ exports.AudioNormalizationPeakCalculation = AudioNormalizationPeakCalculation;
186
+ /**
187
+ * CBET insertion behavior when prior encoding is detected on the same layer.
188
+ */
189
+ class NielsenCbetStepaside {
190
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.NielsenCbetStepaside", version: "2.268.0-alpha.0" };
191
+ /**
192
+ * Existing Nielsen watermarks are removed. New watermarks are inserted throughout the audio.
193
+ */
194
+ static DISABLED = new NielsenCbetStepaside('DISABLED');
195
+ /**
196
+ * Existing Nielsen watermarks are left intact. New watermarks are inserted only in portions
197
+ * of the audio where there are no existing watermarks.
198
+ */
199
+ static ENABLED = new NielsenCbetStepaside('ENABLED');
200
+ /** A value not yet modelled by AWS CDK. */
201
+ static of(value) {
202
+ return new NielsenCbetStepaside(value);
203
+ }
204
+ /** The underlying string value passed to CloudFormation. */
205
+ value;
206
+ constructor(value) {
207
+ this.value = value;
208
+ }
209
+ }
210
+ exports.NielsenCbetStepaside = NielsenCbetStepaside;
211
+ /**
212
+ * Timezone applied to the timestamps in a Nielsen NAES II/NW watermark.
213
+ */
214
+ class NielsenWatermarkTimezone {
215
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.NielsenWatermarkTimezone", version: "2.268.0-alpha.0" };
216
+ /** America/Puerto Rico */
217
+ static AMERICA_PUERTO_RICO = new NielsenWatermarkTimezone('AMERICA_PUERTO_RICO');
218
+ /** US Alaska */
219
+ static US_ALASKA = new NielsenWatermarkTimezone('US_ALASKA');
220
+ /** US Arizona */
221
+ static US_ARIZONA = new NielsenWatermarkTimezone('US_ARIZONA');
222
+ /** US Central */
223
+ static US_CENTRAL = new NielsenWatermarkTimezone('US_CENTRAL');
224
+ /** US Eastern */
225
+ static US_EASTERN = new NielsenWatermarkTimezone('US_EASTERN');
226
+ /** US Hawaii */
227
+ static US_HAWAII = new NielsenWatermarkTimezone('US_HAWAII');
228
+ /** US Mountain */
229
+ static US_MOUNTAIN = new NielsenWatermarkTimezone('US_MOUNTAIN');
230
+ /** US Pacific */
231
+ static US_PACIFIC = new NielsenWatermarkTimezone('US_PACIFIC');
232
+ /** US Samoa */
233
+ static US_SAMOA = new NielsenWatermarkTimezone('US_SAMOA');
234
+ /** Coordinated Universal Time */
235
+ static UTC = new NielsenWatermarkTimezone('UTC');
236
+ /** A value not yet modelled by AWS CDK. */
237
+ static of(value) {
238
+ return new NielsenWatermarkTimezone(value);
239
+ }
240
+ /** The underlying string value passed to CloudFormation. */
241
+ value;
242
+ constructor(value) {
243
+ this.value = value;
244
+ }
245
+ }
246
+ exports.NielsenWatermarkTimezone = NielsenWatermarkTimezone;
247
+ /**
248
+ * Nielsen watermark distribution type.
249
+ */
250
+ class NielsenDistributionType {
251
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.NielsenDistributionType", version: "2.268.0-alpha.0" };
252
+ /** Program content */
253
+ static PROGRAM_CONTENT = new NielsenDistributionType('PROGRAM_CONTENT');
254
+ /** Final distributor */
255
+ static FINAL_DISTRIBUTOR = new NielsenDistributionType('FINAL_DISTRIBUTOR');
256
+ /** A value not yet modelled by AWS CDK. */
257
+ static of(value) {
258
+ return new NielsenDistributionType(value);
259
+ }
260
+ /** The underlying string value passed to CloudFormation. */
261
+ value;
262
+ constructor(value) {
263
+ this.value = value;
264
+ }
265
+ }
266
+ exports.NielsenDistributionType = NielsenDistributionType;
267
+ /**
268
+ * Determines how the audio type is signaled in the output.
269
+ */
270
+ class AudioTypeControl {
271
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.AudioTypeControl", version: "2.268.0-alpha.0" };
272
+ /**
273
+ * If the input contains an ISO 639 audioType it is passed through; otherwise the
274
+ * configured `audioType` is used.
275
+ */
276
+ static FOLLOW_INPUT = new AudioTypeControl('FOLLOW_INPUT');
277
+ /** The configured `audioType` is always used. */
278
+ static USE_CONFIGURED = new AudioTypeControl('USE_CONFIGURED');
279
+ /** A value not yet modelled by AWS CDK. */
280
+ static of(value) {
281
+ return new AudioTypeControl(value);
282
+ }
283
+ /** The underlying string value passed to CloudFormation. */
284
+ value;
285
+ constructor(value) {
286
+ this.value = value;
287
+ }
288
+ }
289
+ exports.AudioTypeControl = AudioTypeControl;
290
+ /**
291
+ * Determines how the audio language code is signaled in the output.
292
+ */
293
+ class AudioLanguageCodeControl {
294
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.AudioLanguageCodeControl", version: "2.268.0-alpha.0" };
295
+ /**
296
+ * If the input contains a language code it is passed through; otherwise the configured
297
+ * `languageCode` is used as a fallback.
298
+ */
299
+ static FOLLOW_INPUT = new AudioLanguageCodeControl('FOLLOW_INPUT');
300
+ /** The configured `languageCode` is always used. */
301
+ static USE_CONFIGURED = new AudioLanguageCodeControl('USE_CONFIGURED');
302
+ /** A value not yet modelled by AWS CDK. */
303
+ static of(value) {
304
+ return new AudioLanguageCodeControl(value);
305
+ }
306
+ /** The underlying string value passed to CloudFormation. */
307
+ value;
308
+ constructor(value) {
309
+ this.value = value;
310
+ }
311
+ }
312
+ exports.AudioLanguageCodeControl = AudioLanguageCodeControl;
313
+ /**
314
+ * The audio type, as defined in ISO/IEC 13818-1.
315
+ */
316
+ class AudioType {
317
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.AudioType", version: "2.268.0-alpha.0" };
318
+ /** Clean effects (no dialogue). */
319
+ static CLEAN_EFFECTS = new AudioType('CLEAN_EFFECTS');
320
+ /** Hearing impaired. */
321
+ static HEARING_IMPAIRED = new AudioType('HEARING_IMPAIRED');
322
+ /** Undefined. */
323
+ static UNDEFINED = new AudioType('UNDEFINED');
324
+ /** Visual impaired commentary. */
325
+ static VISUAL_IMPAIRED_COMMENTARY = new AudioType('VISUAL_IMPAIRED_COMMENTARY');
326
+ /** A value not yet modelled by AWS CDK. */
327
+ static of(value) {
328
+ return new AudioType(value);
329
+ }
330
+ /** The underlying string value passed to CloudFormation. */
331
+ value;
332
+ constructor(value) {
333
+ this.value = value;
334
+ }
335
+ }
336
+ exports.AudioType = AudioType;
337
+ /**
338
+ * DVB DASH accessibility signaling for an audio output.
339
+ */
340
+ class DvbDashAccessibility {
341
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.DvbDashAccessibility", version: "2.268.0-alpha.0" };
342
+ /** Visually impaired. */
343
+ static VISUALLY_IMPAIRED = new DvbDashAccessibility('DVBDASH_1_VISUALLY_IMPAIRED');
344
+ /** Hard of hearing. */
345
+ static HARD_OF_HEARING = new DvbDashAccessibility('DVBDASH_2_HARD_OF_HEARING');
346
+ /** Supplemental commentary. */
347
+ static SUPPLEMENTAL_COMMENTARY = new DvbDashAccessibility('DVBDASH_3_SUPPLEMENTAL_COMMENTARY');
348
+ /** Director's commentary. */
349
+ static DIRECTORS_COMMENTARY = new DvbDashAccessibility('DVBDASH_4_DIRECTORS_COMMENTARY');
350
+ /** Educational notes. */
351
+ static EDUCATIONAL_NOTES = new DvbDashAccessibility('DVBDASH_5_EDUCATIONAL_NOTES');
352
+ /** Main program. */
353
+ static MAIN_PROGRAM = new DvbDashAccessibility('DVBDASH_6_MAIN_PROGRAM');
354
+ /** Clean feed. */
355
+ static CLEAN_FEED = new DvbDashAccessibility('DVBDASH_7_CLEAN_FEED');
356
+ /** A value not yet modelled by AWS CDK. */
357
+ static of(value) {
358
+ return new DvbDashAccessibility(value);
359
+ }
360
+ /** The underlying string value passed to CloudFormation. */
361
+ value;
362
+ constructor(value) {
363
+ this.value = value;
364
+ }
365
+ }
366
+ exports.DvbDashAccessibility = DvbDashAccessibility;
367
+ /**
368
+ * A DASH role to assign to an audio output (used when the output carries DVB DASH accessibility
369
+ * signaling).
370
+ */
371
+ class AudioDashRole {
372
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.AudioDashRole", version: "2.268.0-alpha.0" };
373
+ /** Alternate. */
374
+ static ALTERNATE = new AudioDashRole('ALTERNATE');
375
+ /** Commentary. */
376
+ static COMMENTARY = new AudioDashRole('COMMENTARY');
377
+ /** Description. */
378
+ static DESCRIPTION = new AudioDashRole('DESCRIPTION');
379
+ /** Dub. */
380
+ static DUB = new AudioDashRole('DUB');
381
+ /** Emergency. */
382
+ static EMERGENCY = new AudioDashRole('EMERGENCY');
383
+ /** Enhanced audio intelligibility. */
384
+ static ENHANCED_AUDIO_INTELLIGIBILITY = new AudioDashRole('ENHANCED-AUDIO-INTELLIGIBILITY');
385
+ /** Karaoke. */
386
+ static KARAOKE = new AudioDashRole('KARAOKE');
387
+ /** Main. */
388
+ static MAIN = new AudioDashRole('MAIN');
389
+ /** Supplementary. */
390
+ static SUPPLEMENTARY = new AudioDashRole('SUPPLEMENTARY');
391
+ /** A value not yet modelled by AWS CDK. */
392
+ static of(value) {
393
+ return new AudioDashRole(value);
394
+ }
395
+ /** The underlying string value passed to CloudFormation. */
396
+ value;
397
+ constructor(value) {
398
+ this.value = value;
399
+ }
400
+ }
401
+ exports.AudioDashRole = AudioDashRole;
402
+ /** @internal */
403
+ class VideoEncodeConfiguration extends EncodeConfiguration {
404
+ name;
405
+ props;
406
+ constructor(props) {
407
+ super();
408
+ if (!aws_cdk_lib_1.Token.isUnresolved(props.width) && props.width % 2 !== 0) {
409
+ throw new aws_cdk_lib_1.UnscopedValidationError((0, helpers_internal_1.lit) `VideoWidthEven`, `Video width must be an even number, got ${props.width}.`);
410
+ }
411
+ if (!aws_cdk_lib_1.Token.isUnresolved(props.height) && props.height % 2 !== 0) {
412
+ throw new aws_cdk_lib_1.UnscopedValidationError((0, helpers_internal_1.lit) `VideoHeightEven`, `Video height must be an even number, got ${props.height}.`);
413
+ }
414
+ this.name = props.name;
415
+ this.props = props;
416
+ }
417
+ _hasExplicitFramerate() {
418
+ return this.props.codec._hasExplicitFramerate();
419
+ }
420
+ _bindVideo() {
421
+ return {
422
+ name: this.name,
423
+ width: this.props.width,
424
+ height: this.props.height,
425
+ respondToAfd: (this.props.respondToAfd ?? RespondToAfd.NONE).value,
426
+ scalingBehavior: (this.props.scalingBehavior ?? ScalingBehavior.DEFAULT).value,
427
+ sharpness: this.props.sharpness ?? 50,
428
+ codecSettings: this.props.codec._bind(),
429
+ };
430
+ }
431
+ _bindAudio() {
432
+ return undefined;
433
+ }
434
+ _bindCaption() {
435
+ return undefined;
436
+ }
437
+ _videoCodecType() {
438
+ return this.props.codec._codecType;
439
+ }
440
+ _audioCodecType() {
441
+ return undefined;
442
+ }
443
+ }
444
+ /** @internal */
445
+ class AudioEncodeConfiguration extends EncodeConfiguration {
446
+ name;
447
+ props;
448
+ constructor(props) {
449
+ super();
450
+ this.name = props.name;
451
+ this.props = props;
452
+ }
453
+ _hasExplicitFramerate() {
454
+ return true; // Not applicable for audio
455
+ }
456
+ _bindVideo() {
457
+ return undefined;
458
+ }
459
+ _bindAudio() {
460
+ const codecSettings = this.props.codec;
461
+ return {
462
+ name: this.name,
463
+ audioSelectorName: this.props.audioSelectorName,
464
+ audioTypeControl: this.props.audioTypeControl?.value
465
+ ?? (this.props.audioType !== undefined ? AudioTypeControl.USE_CONFIGURED : AudioTypeControl.FOLLOW_INPUT).value,
466
+ languageCode: this.props.languageCode,
467
+ languageCodeControl: this.props.languageCodeControl?.value
468
+ ?? (this.props.languageCode !== undefined ? AudioLanguageCodeControl.USE_CONFIGURED : AudioLanguageCodeControl.FOLLOW_INPUT).value,
469
+ streamName: this.props.streamName,
470
+ audioType: this.props.audioType?.value,
471
+ audioDashRoles: this.props.audioDashRoles?.map(r => r.value),
472
+ dvbDashAccessibility: this.props.dvbDashAccessibility?.value,
473
+ codecSettings: codecSettings._bind(),
474
+ audioNormalizationSettings: this.props.audioNormalization ? {
475
+ algorithm: this.props.audioNormalization.algorithm?.value,
476
+ algorithmControl: this.props.audioNormalization.algorithmControl?.value,
477
+ targetLkfs: this.props.audioNormalization.targetLkfs,
478
+ peakCalculation: this.props.audioNormalization.peakCalculation?.value,
479
+ peakLimiterThreshold: this.props.audioNormalization.peakLimiterThreshold,
480
+ } : undefined,
481
+ remixSettings: this.props.remixSettings ? {
482
+ channelMappings: this.props.remixSettings.channelMappings.map(m => ({
483
+ outputChannel: m.outputChannel,
484
+ inputChannelLevels: m.inputChannelLevels.map(l => ({
485
+ inputChannel: l.inputChannel,
486
+ gain: l.gain ?? 0,
487
+ })),
488
+ })),
489
+ channelsIn: this.props.remixSettings.channelsIn,
490
+ channelsOut: this.props.remixSettings.channelsOut,
491
+ } : undefined,
492
+ audioWatermarkingSettings: this.props.audioWatermarkSettings ? {
493
+ nielsenWatermarksSettings: this.props.audioWatermarkSettings.nielsenWatermarks ? {
494
+ nielsenDistributionType: this.props.audioWatermarkSettings.nielsenWatermarks.distributionType?.value,
495
+ nielsenCbetSettings: this.props.audioWatermarkSettings.nielsenWatermarks.cbetSettings ? {
496
+ cbetCheckDigitString: this.props.audioWatermarkSettings.nielsenWatermarks.cbetSettings.cbetCheckDigitString,
497
+ cbetStepaside: this.props.audioWatermarkSettings.nielsenWatermarks.cbetSettings.cbetStepaside?.value,
498
+ csid: this.props.audioWatermarkSettings.nielsenWatermarks.cbetSettings.csid,
499
+ } : undefined,
500
+ nielsenNaesIiNwSettings: this.props.audioWatermarkSettings.nielsenWatermarks.naesIiNwSettings ? {
501
+ checkDigitString: this.props.audioWatermarkSettings.nielsenWatermarks.naesIiNwSettings.checkDigitString,
502
+ sid: this.props.audioWatermarkSettings.nielsenWatermarks.naesIiNwSettings.sid,
503
+ timezone: this.props.audioWatermarkSettings.nielsenWatermarks.naesIiNwSettings.timezone?.value,
504
+ } : undefined,
505
+ } : undefined,
506
+ } : undefined,
507
+ };
508
+ }
509
+ _bindCaption() {
510
+ return undefined;
511
+ }
512
+ _videoCodecType() {
513
+ return undefined;
514
+ }
515
+ _audioCodecType() {
516
+ return this.props.codec._codecType;
517
+ }
518
+ }
519
+ /**
520
+ * Whether a caption track implements accessibility features (written descriptions of dialog,
521
+ * music, and sounds). Signaled in HLS and MediaPackage output groups.
522
+ */
523
+ class CaptionAccessibility {
524
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.CaptionAccessibility", version: "2.268.0-alpha.0" };
525
+ /** The captions do not implement accessibility features. */
526
+ static DOES_NOT_IMPLEMENT_ACCESSIBILITY_FEATURES = new CaptionAccessibility('DOES_NOT_IMPLEMENT_ACCESSIBILITY_FEATURES');
527
+ /** The captions implement accessibility features. */
528
+ static IMPLEMENTS_ACCESSIBILITY_FEATURES = new CaptionAccessibility('IMPLEMENTS_ACCESSIBILITY_FEATURES');
529
+ /** A value not yet modelled by AWS CDK. */
530
+ static of(value) {
531
+ return new CaptionAccessibility(value);
532
+ }
533
+ /** The underlying string value passed to CloudFormation. */
534
+ value;
535
+ constructor(value) {
536
+ this.value = value;
537
+ }
538
+ }
539
+ exports.CaptionAccessibility = CaptionAccessibility;
540
+ /**
541
+ * A DASH role to assign to a captions output (used when the output carries DVB DASH accessibility
542
+ * signaling).
543
+ */
544
+ class CaptionDashRole {
545
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.CaptionDashRole", version: "2.268.0-alpha.0" };
546
+ /** Alternate. */
547
+ static ALTERNATE = new CaptionDashRole('ALTERNATE');
548
+ /** Caption. */
549
+ static CAPTION = new CaptionDashRole('CAPTION');
550
+ /** Commentary. */
551
+ static COMMENTARY = new CaptionDashRole('COMMENTARY');
552
+ /** Description. */
553
+ static DESCRIPTION = new CaptionDashRole('DESCRIPTION');
554
+ /** Dub. */
555
+ static DUB = new CaptionDashRole('DUB');
556
+ /** Easy reader. */
557
+ static EASYREADER = new CaptionDashRole('EASYREADER');
558
+ /** Emergency. */
559
+ static EMERGENCY = new CaptionDashRole('EMERGENCY');
560
+ /** Forced subtitle. */
561
+ static FORCED_SUBTITLE = new CaptionDashRole('FORCED-SUBTITLE');
562
+ /** Karaoke. */
563
+ static KARAOKE = new CaptionDashRole('KARAOKE');
564
+ /** Main. */
565
+ static MAIN = new CaptionDashRole('MAIN');
566
+ /** Metadata. */
567
+ static METADATA = new CaptionDashRole('METADATA');
568
+ /** Subtitle. */
569
+ static SUBTITLE = new CaptionDashRole('SUBTITLE');
570
+ /** Supplementary. */
571
+ static SUPPLEMENTARY = new CaptionDashRole('SUPPLEMENTARY');
572
+ /** A value not yet modelled by AWS CDK. */
573
+ static of(value) {
574
+ return new CaptionDashRole(value);
575
+ }
576
+ /** The underlying string value passed to CloudFormation. */
577
+ value;
578
+ constructor(value) {
579
+ this.value = value;
580
+ }
581
+ }
582
+ exports.CaptionDashRole = CaptionDashRole;
583
+ /** @internal */
584
+ class CaptionEncodeConfiguration extends EncodeConfiguration {
585
+ name;
586
+ props;
587
+ constructor(props) {
588
+ super();
589
+ this.name = props.name;
590
+ this.props = props;
591
+ }
592
+ _hasExplicitFramerate() {
593
+ return true; // Not applicable for captions
594
+ }
595
+ _bindVideo() {
596
+ return undefined;
597
+ }
598
+ _bindAudio() {
599
+ return undefined;
600
+ }
601
+ _bindCaption() {
602
+ return {
603
+ name: this.name,
604
+ captionSelectorName: this.props.captionSelectorName,
605
+ destinationSettings: this.props.destination._bind(),
606
+ languageCode: this.props.languageCode,
607
+ languageDescription: this.props.languageDescription,
608
+ accessibility: (this.props.accessibility ?? CaptionAccessibility.DOES_NOT_IMPLEMENT_ACCESSIBILITY_FEATURES).value,
609
+ captionDashRoles: this.props.captionDashRoles?.map(r => r.value),
610
+ dvbDashAccessibility: this.props.dvbDashAccessibility?.value,
611
+ };
612
+ }
613
+ _videoCodecType() {
614
+ return undefined;
615
+ }
616
+ _audioCodecType() {
617
+ return undefined;
618
+ }
619
+ _grantRead(role) {
620
+ this.props.destination._grantRead(role);
621
+ }
622
+ _isInBandCaption() {
623
+ return this.props.destination._isInBand();
624
+ }
625
+ _isEmbeddedCaption() {
626
+ return this.props.destination._isEmbedded();
627
+ }
628
+ }
629
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2RlLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlbmNvZGUtY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUE2RDtBQUc3RCw0RUFBNEQ7QUFLNUQ7Ozs7O0dBS0c7QUFDSCxNQUFzQixtQkFBbUI7O0lBQ3ZDOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUF1Qjs7Ozs7Ozs7OztRQUN6QyxPQUFPLElBQUksd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDNUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBdUI7Ozs7Ozs7Ozs7UUFDekMsT0FBTyxJQUFJLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzVDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQXlCOzs7Ozs7Ozs7O1FBQzdDLE9BQU8sSUFBSSwwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM5QztJQXVCRDs7OztPQUlHO0lBQ0ksVUFBVSxDQUFDLEtBQWUsS0FBVTtJQUUzQzs7OztPQUlHO0lBQ0ksZ0JBQWdCO1FBQ3JCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRDs7O09BR0c7SUFDSSxrQkFBa0I7UUFDdkIsT0FBTyxLQUFLLENBQUM7S0FDZDs7QUFqRUgsa0RBa0VDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLFlBQVk7O0lBQ3ZCLDJDQUEyQztJQUNwQyxNQUFNLENBQVUsT0FBTyxHQUFHLElBQUksWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdELCtDQUErQztJQUN4QyxNQUFNLENBQVUsV0FBVyxHQUFHLElBQUksWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JFLHdCQUF3QjtJQUNqQixNQUFNLENBQVUsSUFBSSxHQUFHLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXZELDJDQUEyQztJQUNwQyxNQUFN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SSxvQkFBb0IsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLEtBQUs7WUFDakgsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ2hFLG9CQUFvQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsS0FBSztTQUM3RCxDQUFDO0tBQ0g7SUFFTSxlQUFlO1FBQ3BCLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0lBRU0sZUFBZTtRQUNwQixPQUFPLFNBQVMsQ0FBQztLQUNsQjtJQUVlLFVBQVUsQ0FBQyxJQUFXO1FBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN6QztJQUVlLGdCQUFnQjtRQUM5QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO0tBQzNDO0lBRWUsa0JBQWtCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7S0FDN0M7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRva2VuLCBVbnNjb3BlZFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB0eXBlIHsgSVJvbGUsIElSb2xlUmVmIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgdHlwZSB7IENmbkNoYW5uZWwgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbWVkaWFsaXZlJztcbmltcG9ydCB7IGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHR5cGUgeyBBdWRpb0NvZGVjU2V0dGluZ3MsIEF1ZGlvQ29kZWNUeXBlIH0gZnJvbSAnLi9hdWRpby1jb2RlYy1zZXR0aW5ncyc7XG5pbXBvcnQgdHlwZSB7IENhcHRpb25EZXN0aW5hdGlvbiB9IGZyb20gJy4vY2FwdGlvbi1zZXR0aW5ncyc7XG5pbXBvcnQgdHlwZSB7IFZpZGVvQ29kZWNTZXR0aW5ncywgVmlkZW9Db2RlY1R5cGUgfSBmcm9tICcuL3ZpZGVvLWNvZGVjLXNldHRpbmdzJztcblxuLyoqXG4gKiBCYXNlIGludGVyZmFjZSBmb3IgYW4gZW5jb2RlIGNvbmZpZ3VyYXRpb24gKHZpZGVvLCBhdWRpbywgb3IgY2FwdGlvbikuXG4gKlxuICogVGhlIHNhbWUgRW5jb2RlQ29uZmlndXJhdGlvbiBpbnN0YW5jZSBjYW4gYmUgc2hhcmVkIGFjcm9zcyBtdWx0aXBsZSBvdXRwdXQgZ3JvdXBzIHdpdGhpbiBhIGNoYW5uZWwuXG4gKiBUaGUgY2hhbm5lbCBhdXRvbWF0aWNhbGx5IGRlZHVwbGljYXRlcyBlbmNvZGUgZGVzY3JpcHRpb25zIGJ5IG5hbWUgYXQgc3ludGggdGltZS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVuY29kZUNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlIGEgdmlkZW8gZW5jb2RlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHZpZGVvKHByb3BzOiBWaWRlb0VuY29kZVByb3BzKTogRW5jb2RlQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBWaWRlb0VuY29kZUNvbmZpZ3VyYXRpb24ocHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhdWRpbyBlbmNvZGUgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXVkaW8ocHJvcHM6IEF1ZGlvRW5jb2RlUHJvcHMpOiBFbmNvZGVDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IEF1ZGlvRW5jb2RlQ29uZmlndXJhdGlvbihwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY2FwdGlvbiBlbmNvZGUgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY2FwdGlvbihwcm9wczogQ2FwdGlvbkVuY29kZVByb3BzKTogRW5jb2RlQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDYXB0aW9uRW5jb2RlQ29uZmlndXJhdGlvbihwcm9wcyk7XG4gIH1cblxuICAvKiogVGhlIHVuaXF1ZSBuYW1lIGZvciB0aGlzIGVuY29kZSwgdXNlZCB0byByZWZlcmVuY2UgaXQgZnJvbSBvdXRwdXRzLiAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgZW5jb2RlIGhhcyBleHBsaWNpdCBmcmFtZXJhdGUgYW5kIFBBUiBjb25maWd1cmVkLlxuICAgKiBSZXF1aXJlZCBmb3IgTWVkaWFQYWNrYWdlIFYyIHZpZGVvIG91dHB1dHMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IF9oYXNFeHBsaWNpdEZyYW1lcmF0ZSgpOiBib29sZWFuO1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIGFic3RyYWN0IF9iaW5kVmlkZW8oKTogQ2ZuQ2hhbm5lbC5WaWRlb0Rlc2NyaXB0aW9uUHJvcGVydHkgfCB1bmRlZmluZWQ7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIGFic3RyYWN0IF9iaW5kQXVkaW8oKTogQ2ZuQ2hhbm5lbC5BdWRpb0Rlc2NyaXB0aW9uUHJvcGVydHkgfCB1bmRlZmluZWQ7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIGFic3RyYWN0IF9iaW5kQ2FwdGlvbigpOiBDZm5DaGFubmVsLkNhcHRpb25EZXNjcmlwdGlvblByb3BlcnR5IHwgdW5kZWZpbmVkO1xuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBhYnN0cmFjdCBfdmlkZW9Db2RlY1R5cGUoKTogVmlkZW9Db2RlY1R5cGUgfCB1bmRlZmluZWQ7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIGFic3RyYWN0IF9hdWRpb0NvZGVjVHlwZSgpOiBBdWRpb0NvZGVjVHlwZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogR3JhbnQgdGhlIGNoYW5uZWwgcm9sZSByZWFkIGFjY2VzcyB0byBhbnkgZXh0ZXJuYWwgZmlsZXMgdGhpcyBlbmNvZGUgcmVmZXJlbmNlcyAoZS5nLiBhXG4gICAqIGJ1cm4taW4gY2FwdGlvbiBmb250IGluIFMzKS4gRGVmYXVsdCBpcyBhIG5vLW9wOyBjYXB0aW9uIGVuY29kZXMgb3ZlcnJpZGUgaXQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9ncmFudFJlYWQoX3JvbGU6IElSb2xlUmVmKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgYW4gaW4tYmFuZCBjYXB0aW9uIGVuY29kZSAoYnVybi1pbiwgZW1iZWRkZWQpIHRoYXQgZG9lcyBub3QgcHJvZHVjZSBhXG4gICAqIHNlcGFyYXRlIHRyYWNrLiBSZXR1cm5zIGZhbHNlIGZvciBub24tY2FwdGlvbiBlbmNvZGVzIGFuZCBvdXQtb2YtYmFuZCBjYXB0aW9uIHR5cGVzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfaXNJbkJhbmRDYXB0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgYW4gZW1iZWRkZWQtZmFtaWx5IGNhcHRpb24gZW5jb2RlLiBPbmx5IG9uZSBwZXIgb3V0cHV0IGlzIGFsbG93ZWQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9pc0VtYmVkZGVkQ2FwdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBIb3cgdG8gcmVzcG9uZCB0byBBRkQgdmFsdWVzIGluIHRoZSBpbnB1dCBzdHJlYW0uXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNwb25kVG9BZmQge1xuICAvKiogQ2xpcCBpbnB1dCB2aWRlbyBiYXNlZCBvbiBBRkQgdmFsdWVzICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVTUE9ORCA9IG5ldyBSZXNwb25kVG9BZmQoJ1JFU1BPTkQnKTtcbiAgLyoqIFBhc3MgQUZEIHZhbHVlcyB0aHJvdWdoIHdpdGhvdXQgY2xpcHBpbmcgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQQVNTVEhST1VHSCA9IG5ldyBSZXNwb25kVG9BZmQoJ1BBU1NUSFJPVUdIJyk7XG4gIC8qKiBJZ25vcmUgQUZEIHZhbHVlcyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PTkUgPSBuZXcgUmVzcG9uZFRvQWZkKCdOT05FJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBSZXNwb25kVG9BZmQge1xuICAgIHJldHVybiBuZXcgUmVzcG9uZFRvQWZkKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBWaWRlbyBzY2FsaW5nIGJlaGF2aW9yLlxuICovXG5leHBvcnQgY2xhc3MgU2NhbGluZ0JlaGF2aW9yIHtcbiAgLyoqIE1heSBpbnNlcnQgYmxhY2sgYm94ZXMgdG8gbWF0Y2ggb3V0cHV0IHJlc29sdXRpb24gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUID0gbmV3IFNjYWxpbmdCZWhhdmlvcignREVGQVVMVCcpO1xuICAvKiogU3RyZXRjaCB2aWRlbyB0byBmaWxsIHRoZSBvdXRwdXQgcmVzb2x1dGlvbiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUUkVUQ0hfVE9fT1VUUFVUID0gbmV3IFNjYWxpbmdCZWhhdmlvcignU1RSRVRDSF9UT19PVVRQVVQnKTtcbiAgLyoqIEludGVsbGlnZW50bHkgY3JvcCB0aGUgdmlkZW8gdG8gZm9jdXMgb24ga2V5IHN1YmplY3RzICg5OjE2IHZlcnRpY2FsKS4gUmVxdWlyZXMgYW4gRWxlbWVudGFsIEluZmVyZW5jZSBmZWVkIG9uIHRoZSBjaGFubmVsIHZpYSBgaW5mZXJlbmNlRmVlZGAuIERvIE5PVCBpbmNsdWRlIGBGZWVkT3V0cHV0LmNyb3BwaW5nKClgIG9uIHRoZSBmZWVkIOKAlCBNZWRpYUxpdmUgYXV0by1pbnNlcnRzIGl0LiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNNQVJUX0NST1AgPSBuZXcgU2NhbGluZ0JlaGF2aW9yKCdTTUFSVF9DUk9QJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBTY2FsaW5nQmVoYXZpb3Ige1xuICAgIHJldHVybiBuZXcgU2NhbGluZ0JlaGF2aW9yKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIHZpZGVvIGVuY29kZSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRW5jb2RlUHJvcHMge1xuICAvKipcbiAgICogQSB1bmlxdWUgbmFtZSBmb3IgdGhpcyB2aWRlbyBlbmNvZGUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgd2lkdGggb2YgdGhlIG91dHB1dCB2aWRlbyBpbiBwaXhlbHMuIE11c3QgYmUgYW4gZXZlbiBudW1iZXIuXG4gICAqL1xuICByZWFkb25seSB3aWR0aDogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGhlaWdodCBvZiB0aGUgb3V0cHV0IHZpZGVvIGluIHBpeGVscy4gTXVzdCBiZSBhbiBldmVuIG51bWJlci5cbiAgICovXG4gIHJlYWRvbmx5IGhlaWdodDogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGNvZGVjIGZvciB0aGUgdmlkZW8gZW5jb2RlLlxuICAgKlxuICAgKiBDaG9vc2UgdGhlIGNvZGVjIGV4cGxpY2l0bHkgKGUuZy4gYFZpZGVvQ29kZWNTZXR0aW5ncy5oMjY0KC4uLilgKVxuICAgKi9cbiAgcmVhZG9ubHkgY29kZWM6IFZpZGVvQ29kZWNTZXR0aW5ncztcbiAgLyoqXG4gICAqIEhvdyB0byByZXNwb25kIHRvIEFGRCB2YWx1ZXMgaW4gdGhlIGlucHV0IHN0cmVhbS5cbiAgICogQGRlZmF1bHQgUmVzcG9uZFRvQWZkLk5PTkVcbiAgICovXG4gIHJlYWRvbmx5IHJlc3BvbmRUb0FmZD86IFJlc3BvbmRUb0FmZDtcbiAgLyoqXG4gICAqIFRoZSB2aWRlbyBzY2FsaW5nIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCBTY2FsaW5nQmVoYXZpb3IuREVGQVVMVFxuICAgKi9cbiAgcmVhZG9ubHkgc2NhbGluZ0JlaGF2aW9yPzogU2NhbGluZ0JlaGF2aW9yO1xuICAvKipcbiAgICogVGhlIGFudGktYWxpYXMgZmlsdGVyIHN0cmVuZ3RoICgwLTEwMCkuIDAgaXMgc29mdGVzdCwgMTAwIGlzIHNoYXJwZXN0LlxuICAgKiBAZGVmYXVsdCA1MFxuICAgKi9cbiAgcmVhZG9ubHkgc2hhcnBuZXNzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEF1ZGlvIG5vcm1hbGl6YXRpb24gYWxnb3JpdGhtLlxuICovXG5leHBvcnQgY2xhc3MgQXVkaW9Ob3JtYWxpemF0aW9uQWxnb3JpdGhtIHtcbiAgLyoqIENBTE0gQWN0IHNwZWNpZmljYXRpb24gKElUVS1SIEJTLjE3NzAtMSkgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJVFVfMTc3MF8xID0gbmV3IEF1ZGlvTm9ybWFsaXphdGlvbkFsZ29yaXRobSgnSVRVXzE3NzBfMScpO1xuICAvKiogRUJVIFItMTI4IHNwZWNpZmljYXRpb24gKElUVS1SIEJTLjE3NzAtMikgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJVFVfMTc3MF8yID0gbmV3IEF1ZGlvTm9ybWFsaXphdGlvbkFsZ29yaXRobSgnSVRVXzE3NzBfMicpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogQXVkaW9Ob3JtYWxpemF0aW9uQWxnb3JpdGhtIHtcbiAgICByZXR1cm4gbmV3IEF1ZGlvTm9ybWFsaXphdGlvbkFsZ29yaXRobSh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogQXVkaW8gbm9ybWFsaXphdGlvbiBhbGdvcml0aG0gY29udHJvbC5cbiAqL1xuZXhwb3J0IGNsYXNzIEF1ZGlvTm9ybWFsaXphdGlvbkFsZ29yaXRobUNvbnRyb2wge1xuICAvKiogQ29ycmVjdCB0aGUgYXVkaW8gdXNpbmcgdGhlIGNob3NlbiBhbGdvcml0aG0gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT1JSRUNUX0FVRElPID0gbmV3IEF1ZGlvTm9ybWFsaXphdGlvbkFsZ29yaXRobUNvbnRyb2woJ0NPUlJFQ1RfQVVESU8nKTtcbiAgLyoqIE1lYXN1cmUgYXVkaW8gYnV0IGRvIG5vdCBhZGp1c3QgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNRUFTVVJFX09OTFkgPSBuZXcgQXVkaW9Ob3JtYWxpemF0aW9uQWxnb3JpdGhtQ29udHJvbCgnTUVBU1VSRV9PTkxZJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBBdWRpb05vcm1hbGl6YXRpb25BbGdvcml0aG1Db250cm9sIHtcbiAgICByZXR1cm4gbmV3IEF1ZGlvTm9ybWFsaXphdGlvbkFsZ29yaXRobUNvbnRyb2wodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFBlYWsgY2FsY3VsYXRpb24gbWV0aG9kIGZvciBhdWRpbyBub3JtYWxpemF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgQXVkaW9Ob3JtYWxpemF0aW9uUGVha0NhbGN1bGF0aW9uIHtcbiAgLyoqIENhbGN1bGF0ZSBhbmQgbG9nIHRoZSBUcnVlUGVhayBmb3IgZWFjaCBhdWRpbyB0cmFjay4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUUlVFX1BFQUsgPSBuZXcgQXVkaW9Ob3JtYWxpemF0aW9uUGVha0NhbGN1bGF0aW9uKCdUUlVFX1BFQUsnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEF1ZGlvTm9ybWFsaXphdGlvblBlYWtDYWxjdWxhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBBdWRpb05vcm1hbGl6YXRpb25QZWFrQ2FsY3VsYXRpb24odmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEF1ZGlvIG5vcm1hbGl6YXRpb24gc2V0dGluZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9Ob3JtYWxpemF0aW9uU2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIG5vcm1hbGl6YXRpb24gYWxnb3JpdGhtLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgYWxnb3JpdGhtPzogQXVkaW9Ob3JtYWxpemF0aW9uQWxnb3JpdGhtO1xuICAvKipcbiAgICogV2hldGhlciB0byBjb3JyZWN0IG9yIG9ubHkgbWVhc3VyZS5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGFsZ29yaXRobUNvbnRyb2w/OiBBdWRpb05vcm1hbGl6YXRpb25BbGdvcml0aG1Db250cm9sO1xuICAvKipcbiAgICogVGhlIHRhcmdldCBsb3VkbmVzcyBpbiBMS0ZTLiBDQUxNIEFjdCByZWNvbW1lbmRzIC0yNCwgRUJVIFItMTI4IHJlY29tbWVuZHMgLTIzLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0TGtmcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdXNlIGEgcGVhayBsaW1pdGVyIGFuZCBob3cgdG8gY2FsY3VsYXRlIHBlYWsgbGV2ZWxzLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgcGVha0NhbGN1bGF0aW9uPzogQXVkaW9Ob3JtYWxpemF0aW9uUGVha0NhbGN1bGF0aW9uO1xuICAvKipcbiAgICogVGhlIHBlYWsgbGltaXRlciB0aHJlc2hvbGQgaW4gZEJGUy4gT25seSB1c2VkIHdoZW4gcGVhayBsaW1pdGluZyBpcyBlbmFibGVkLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgcGVha0xpbWl0ZXJUaHJlc2hvbGQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQW4gaW5wdXQgY2hhbm5lbCBsZXZlbCBmb3IgYXVkaW8gcmVtaXhpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXRDaGFubmVsTGV2ZWwge1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBpbnB1dCBjaGFubmVsIHRvIHVzZSBhcyBhIHNvdXJjZS5cbiAgICovXG4gIHJlYWRvbmx5IGlucHV0Q2hhbm5lbDogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHJlbWl4aW5nIGdhaW4gaW4gZEIgKC02MCB0byA2KS5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgcmVhZG9ubHkgZ2Fpbj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIG1hcHBpbmcgZnJvbSBpbnB1dCBjaGFubmVscyB0byBhbiBvdXRwdXQgY2hhbm5lbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpb0NoYW5uZWxNYXBwaW5nIHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgb3V0cHV0IGNoYW5uZWwgYmVpbmcgcHJvZHVjZWQuXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRDaGFubmVsOiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgY2hhbm5lbHMgYW5kIHRoZWlyIGdhaW4gbGV2ZWxzIHRvIG1peCBpbnRvIHRoaXMgb3V0cHV0IGNoYW5uZWwuXG4gICAqL1xuICByZWFkb25seSBpbnB1dENoYW5uZWxMZXZlbHM6IElucHV0Q2hhbm5lbExldmVsW107XG59XG5cbi8qKlxuICogQXVkaW8gcmVtaXggc2V0dGluZ3MgZm9yIGNoYW5uZWwgcmVtYXBwaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbWl4U2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIGNoYW5uZWwgbWFwcGluZ3MgZnJvbSBpbnB1dCB0byBvdXRwdXQuXG4gICAqL1xuICByZWFkb25seSBjaGFubmVsTWFwcGluZ3M6IEF1ZGlvQ2hhbm5lbE1hcHBpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgaW5wdXQgY2hhbm5lbHMuXG4gICAqIEBkZWZhdWx0IC0gYXV0by1kZXRlY3RlZFxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbm5lbHNJbj86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2Ygb3V0cHV0IGNoYW5uZWxzLiBWYWxpZCB2YWx1ZXM6IDEsIDIsIDQsIDYsIDguXG4gICAqIEBkZWZhdWx0IC0gYXV0by1kZXRlY3RlZFxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbm5lbHNPdXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ0JFVCBpbnNlcnRpb24gYmVoYXZpb3Igd2hlbiBwcmlvciBlbmNvZGluZyBpcyBkZXRlY3RlZCBvbiB0aGUgc2FtZSBsYXllci5cbiAqL1xuZXhwb3J0IGNsYXNzIE5pZWxzZW5DYmV0U3RlcGFzaWRlIHtcbiAgLyoqXG4gICAqIEV4aXN0aW5nIE5pZWxzZW4gd2F0ZXJtYXJrcyBhcmUgcmVtb3ZlZC4gTmV3IHdhdGVybWFya3MgYXJlIGluc2VydGVkIHRocm91Z2hvdXQgdGhlIGF1ZGlvLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBESVNBQkxFRCA9IG5ldyBOaWVsc2VuQ2JldFN0ZXBhc2lkZSgnRElTQUJMRUQnKTtcbiAgLyoqXG4gICAqIEV4aXN0aW5nIE5pZWxzZW4gd2F0ZXJtYXJrcyBhcmUgbGVmdCBpbnRhY3QuIE5ldyB3YXRlcm1hcmtzIGFyZSBpbnNlcnRlZCBvbmx5IGluIHBvcnRpb25zXG4gICAqIG9mIHRoZSBhdWRpbyB3aGVyZSB0aGVyZSBhcmUgbm8gZXhpc3Rpbmcgd2F0ZXJtYXJrcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRU5BQkxFRCA9IG5ldyBOaWVsc2VuQ2JldFN0ZXBhc2lkZSgnRU5BQkxFRCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogTmllbHNlbkNiZXRTdGVwYXNpZGUge1xuICAgIHJldHVybiBuZXcgTmllbHNlbkNiZXRTdGVwYXNpZGUodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFRpbWV6b25lIGFwcGxpZWQgdG8gdGhlIHRpbWVzdGFtcHMgaW4gYSBOaWVsc2VuIE5BRVMgSUkvTlcgd2F0ZXJtYXJrLlxuICovXG5leHBvcnQgY2xhc3MgTmllbHNlbldhdGVybWFya1RpbWV6b25lIHtcbiAgLyoqIEFtZXJpY2EvUHVlcnRvIFJpY28gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBTUVSSUNBX1BVRVJUT19SSUNPID0gbmV3IE5pZWxzZW5XYXRlcm1hcmtUaW1lem9uZSgnQU1FUklDQV9QVUVSVE9fUklDTycpO1xuICAvKiogVVMgQWxhc2thICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVVNfQUxBU0tBID0gbmV3IE5pZWxzZW5XYXRlcm1hcmtUaW1lem9uZSgnVVNfQUxBU0tBJyk7XG4gIC8qKiBVUyBBcml6b25hICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVVNfQVJJWk9OQSA9IG5ldyBOaWVsc2VuV2F0ZXJtYXJrVGltZXpvbmUoJ1VTX0FSSVpPTkEnKTtcbiAgLyoqIFVTIENlbnRyYWwgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBVU19DRU5UUkFMID0gbmV3IE5pZWxzZW5XYXRlcm1hcmtUaW1lem9uZSgnVVNfQ0VOVFJBTCcpO1xuICAvKiogVVMgRWFzdGVybiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFVTX0VBU1RFUk4gPSBuZXcgTmllbHNlbldhdGVybWFya1RpbWV6b25lKCdVU19FQVNURVJOJyk7XG4gIC8qKiBVUyBIYXdhaWkgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBVU19IQVdBSUkgPSBuZXcgTmllbHNlbldhdGVybWFya1RpbWV6b25lKCdVU19IQVdBSUknKTtcbiAgLyoqIFVTIE1vdW50YWluICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVVNfTU9VTlRBSU4gPSBuZXcgTmllbHNlbldhdGVybWFya1RpbWV6b25lKCdVU19NT1VOVEFJTicpO1xuICAvKiogVVMgUGFjaWZpYyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFVTX1BBQ0lGSUMgPSBuZXcgTmllbHNlbldhdGVybWFya1RpbWV6b25lKCdVU19QQUNJRklDJyk7XG4gIC8qKiBVUyBTYW1vYSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFVTX1NBTU9BID0gbmV3IE5pZWxzZW5XYXRlcm1hcmtUaW1lem9uZSgnVVNfU0FNT0EnKTtcbiAgLyoqIENvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVVRDID0gbmV3IE5pZWxzZW5XYXRlcm1hcmtUaW1lem9uZSgnVVRDJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBOaWVsc2VuV2F0ZXJtYXJrVGltZXpvbmUge1xuICAgIHJldHVybiBuZXcgTmllbHNlbldhdGVybWFya1RpbWV6b25lKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBOaWVsc2VuIENCRVQgd2F0ZXJtYXJrIHNldHRpbmdzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5pZWxzZW5DYmV0U2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIENCRVQgY2hlY2sgZGlnaXQgc3RyaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY2JldENoZWNrRGlnaXRTdHJpbmc6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBDQkVUIFNvdXJjZSBJRCAoQ1NJRCkuXG4gICAqL1xuICByZWFkb25seSBjc2lkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgQ0JFVCBzdGVwYXNpZGUgYmVoYXZpb3Igd2hlbiBwcmlvciBlbmNvZGluZyBpcyBkZXRlY3RlZC5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGNiZXRTdGVwYXNpZGU/OiBOaWVsc2VuQ2JldFN0ZXBhc2lkZTtcbn1cblxuLyoqXG4gKiBOaWVsc2VuIE5BRVMgSUkvTlcgd2F0ZXJtYXJrIHNldHRpbmdzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5pZWxzZW5OYWVzSWlOd1NldHRpbmdzIHtcbiAgLyoqXG4gICAqIFRoZSBjaGVjayBkaWdpdCBzdHJpbmcgZm9yIHRoZSB3YXRlcm1hcmsuXG4gICAqL1xuICByZWFkb25seSBjaGVja0RpZ2l0U3RyaW5nOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgTmllbHNlbiBTb3VyY2UgSUQgKFNJRCkuXG4gICAqL1xuICByZWFkb25seSBzaWQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSB0aW1lem9uZSBmb3IgdGhlIHRpbWVzdGFtcHMgaW4gdGhlIHdhdGVybWFyay5cbiAgICogQGRlZmF1bHQgLSBDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSAoVVRDKVxuICAgKi9cbiAgcmVhZG9ubHkgdGltZXpvbmU/OiBOaWVsc2VuV2F0ZXJtYXJrVGltZXpvbmU7XG59XG5cbi8qKlxuICogTmllbHNlbiB3YXRlcm1hcmsgZGlzdHJpYnV0aW9uIHR5cGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBOaWVsc2VuRGlzdHJpYnV0aW9uVHlwZSB7XG4gIC8qKiBQcm9ncmFtIGNvbnRlbnQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9HUkFNX0NPTlRFTlQgPSBuZXcgTmllbHNlbkRpc3RyaWJ1dGlvblR5cGUoJ1BST0dSQU1fQ09OVEVOVCcpO1xuICAvKiogRmluYWwgZGlzdHJpYnV0b3IgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGSU5BTF9ESVNUUklCVVRPUiA9IG5ldyBOaWVsc2VuRGlzdHJpYnV0aW9uVHlwZSgnRklOQUxfRElTVFJJQlVUT1InKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IE5pZWxzZW5EaXN0cmlidXRpb25UeXBlIHtcbiAgICByZXR1cm4gbmV3IE5pZWxzZW5EaXN0cmlidXRpb25UeXBlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBOaWVsc2VuIHdhdGVybWFyayBzZXR0aW5ncyBmb3IgYXVkaW8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmllbHNlbldhdGVybWFya3NTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBUaGUgZGlzdHJpYnV0aW9uIHR5cGUgZm9yIHRoZSB3YXRlcm1hcmsuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBkaXN0cmlidXRpb25UeXBlPzogTmllbHNlbkRpc3RyaWJ1dGlvblR5cGU7XG4gIC8qKlxuICAgKiBOaWVsc2VuIENCRVQgd2F0ZXJtYXJrIHNldHRpbmdzLlxuICAgKiBAZGVmYXVsdCAtIG5vIENCRVQgd2F0ZXJtYXJrc1xuICAgKi9cbiAgcmVhZG9ubHkgY2JldFNldHRpbmdzPzogTmllbHNlbkNiZXRTZXR0aW5ncztcbiAgLyoqXG4gICAqIE5pZWxzZW4gTkFFUyBJSS9OVyB3YXRlcm1hcmsgc2V0dGluZ3MuXG4gICAqIEBkZWZhdWx0IC0gbm8gTkFFUyBJSS9OVyB3YXRlcm1hcmtzXG4gICAqL1xuICByZWFkb25seSBuYWVzSWlOd1NldHRpbmdzPzogTmllbHNlbk5hZXNJaU53U2V0dGluZ3M7XG59XG5cbi8qKlxuICogQXVkaW8gd2F0ZXJtYXJraW5nIHNldHRpbmdzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvV2F0ZXJtYXJrU2V0dGluZ3Mge1xuICAvKipcbiAgICogTmllbHNlbiB3YXRlcm1hcmsgc2V0dGluZ3MuXG4gICAqIEBkZWZhdWx0IC0gbm8gTmllbHNlbiB3YXRlcm1hcmtzXG4gICAqL1xuICByZWFkb25seSBuaWVsc2VuV2F0ZXJtYXJrcz86IE5pZWxzZW5XYXRlcm1hcmtzU2V0dGluZ3M7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBob3cgdGhlIGF1ZGlvIHR5cGUgaXMgc2lnbmFsZWQgaW4gdGhlIG91dHB1dC5cbiAqL1xuZXhwb3J0IGNsYXNzIEF1ZGlvVHlwZUNvbnRyb2wge1xuICAvKipcbiAgICogSWYgdGhlIGlucHV0IGNvbnRhaW5zIGFuIElTTyA2MzkgYXVkaW9UeXBlIGl0IGlzIHBhc3NlZCB0aHJvdWdoOyBvdGhlcndpc2UgdGhlXG4gICAqIGNvbmZpZ3VyZWQgYGF1ZGlvVHlwZWAgaXMgdXNlZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRk9MTE9XX0lOUFVUID0gbmV3IEF1ZGlvVHlwZUNvbnRyb2woJ0ZPTExPV19JTlBVVCcpO1xuICAvKiogVGhlIGNvbmZpZ3VyZWQgYGF1ZGlvVHlwZWAgaXMgYWx3YXlzIHVzZWQuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVVNFX0NPTkZJR1VSRUQgPSBuZXcgQXVkaW9UeXBlQ29udHJvbCgnVVNFX0NPTkZJR1VSRUQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEF1ZGlvVHlwZUNvbnRyb2wge1xuICAgIHJldHVybiBuZXcgQXVkaW9UeXBlQ29udHJvbCh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBob3cgdGhlIGF1ZGlvIGxhbmd1YWdlIGNvZGUgaXMgc2lnbmFsZWQgaW4gdGhlIG91dHB1dC5cbiAqL1xuZXhwb3J0IGNsYXNzIEF1ZGlvTGFuZ3VhZ2VDb2RlQ29udHJvbCB7XG4gIC8qKlxuICAgKiBJZiB0aGUgaW5wdXQgY29udGFpbnMgYSBsYW5ndWFnZSBjb2RlIGl0IGlzIHBhc3NlZCB0aHJvdWdoOyBvdGhlcndpc2UgdGhlIGNvbmZpZ3VyZWRcbiAgICogYGxhbmd1YWdlQ29kZWAgaXMgdXNlZCBhcyBhIGZhbGxiYWNrLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGT0xMT1dfSU5QVVQgPSBuZXcgQXVkaW9MYW5ndWFnZUNvZGVDb250cm9sKCdGT0xMT1dfSU5QVVQnKTtcbiAgLyoqIFRoZSBjb25maWd1cmVkIGBsYW5ndWFnZUNvZGVgIGlzIGFsd2F5cyB1c2VkLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFVTRV9DT05GSUdVUkVEID0gbmV3IEF1ZGlvTGFuZ3VhZ2VDb2RlQ29udHJvbCgnVVNFX0NPTkZJR1VSRUQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEF1ZGlvTGFuZ3VhZ2VDb2RlQ29udHJvbCB7XG4gICAgcmV0dXJuIG5ldyBBdWRpb0xhbmd1YWdlQ29kZUNvbnRyb2wodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBhdWRpbyB0eXBlLCBhcyBkZWZpbmVkIGluIElTTy9JRUMgMTM4MTgtMS5cbiAqL1xuZXhwb3J0IGNsYXNzIEF1ZGlvVHlwZSB7XG4gIC8qKiBDbGVhbiBlZmZlY3RzIChubyBkaWFsb2d1ZSkuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ0xFQU5fRUZGRUNUUyA9IG5ldyBBdWRpb1R5cGUoJ0NMRUFOX0VGRkVDVFMnKTtcbiAgLyoqIEhlYXJpbmcgaW1wYWlyZWQuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSEVBUklOR19JTVBBSVJFRCA9IG5ldyBBdWRpb1R5cGUoJ0hFQVJJTkdfSU1QQUlSRUQnKTtcbiAgLyoqIFVuZGVmaW5lZC4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBVTkRFRklORUQgPSBuZXcgQXVkaW9UeXBlKCdVTkRFRklORUQnKTtcbiAgLyoqIFZpc3VhbCBpbXBhaXJlZCBjb21tZW50YXJ5LiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFZJU1VBTF9JTVBBSVJFRF9DT01NRU5UQVJZID0gbmV3IEF1ZGlvVHlwZSgnVklTVUFMX0lNUEFJUkVEX0NPTU1FTlRBUlknKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEF1ZGlvVHlwZSB7XG4gICAgcmV0dXJuIG5ldyBBdWRpb1R5cGUodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERWQiBEQVNIIGFjY2Vzc2liaWxpdHkgc2lnbmFsaW5nIGZvciBhbiBhdWRpbyBvdXRwdXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBEdmJEYXNoQWNjZXNzaWJpbGl0eSB7XG4gIC8qKiBWaXN1YWxseSBpbXBhaXJlZC4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWSVNVQUxMWV9JTVBBSVJFRCA9IG5ldyBEdmJEYXNoQWNjZXNzaWJpbGl0eSgnRFZCREFTSF8xX1ZJU1VBTExZX0lNUEFJUkVEJyk7XG4gIC8qKiBIYXJkIG9mIGhlYXJpbmcuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSEFSRF9PRl9IRUFSSU5HID0gbmV3IER2YkRhc2hBY2Nlc3NpYmlsaXR5KCdEVkJEQVNIXzJfSEFSRF9PRl9IRUFSSU5HJyk7XG4gIC8qKiBTdXBwbGVtZW50YWwgY29tbWVudGFyeS4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTVVBQTEVNRU5UQUxfQ09NTUVOVEFSWSA9IG5ldyBEdmJEYXNoQWNjZXNzaWJpbGl0eSgnRFZCREFTSF8zX1NVUFBMRU1FTlRBTF9DT01NRU5UQVJZJyk7XG4gIC8qKiBEaXJlY3RvcidzIGNvbW1lbnRhcnkuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRElSRUNUT1JTX0NPTU1FTlRBUlkgPSBuZXcgRHZiRGFzaEFjY2Vzc2liaWxpdHkoJ0RWQkRBU0hfNF9ESVJFQ1RPUlNfQ09NTUVOVEFSWScpO1xuICAvKiogRWR1Y2F0aW9uYWwgbm90ZXMuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRURVQ0FUSU9OQUxfTk9URVMgPSBuZXcgRHZiRGFzaEFjY2Vzc2liaWxpdHkoJ0RWQkRBU0hfNV9FRFVDQVRJT05BTF9OT1RFUycpO1xuICAvKiogTWFpbiBwcm9ncmFtLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BSU5fUFJPR1JBTSA9IG5ldyBEdmJEYXNoQWNjZXNzaWJpbGl0eSgnRFZCREFTSF82X01BSU5fUFJPR1JBTScpO1xuICAvKiogQ2xlYW4gZmVlZC4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDTEVBTl9GRUVEID0gbmV3IER2YkRhc2hBY2Nlc3NpYmlsaXR5KCdEVkJEQVNIXzdfQ0xFQU5fRkVFRCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogRHZiRGFzaEFjY2Vzc2liaWxpdHkge1xuICAgIHJldHVybiBuZXcgRHZiRGFzaEFjY2Vzc2liaWxpdHkodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEEgREFTSCByb2xlIHRvIGFzc2lnbiB0byBhbiBhdWRpbyBvdXRwdXQgKHVzZWQgd2hlbiB0aGUgb3V0cHV0IGNhcnJpZXMgRFZCIERBU0ggYWNjZXNzaWJpbGl0eVxuICogc2lnbmFsaW5nKS5cbiAqL1xuZXhwb3J0IGNsYXNzIEF1ZGlvRGFzaFJvbGUge1xuICAvKiogQWx0ZXJuYXRlLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFMVEVSTkFURSA9IG5ldyBBdWRpb0Rhc2hSb2xlKCdBTFRFUk5BVEUnKTtcbiAgLyoqIENvbW1lbnRhcnkuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ09NTUVOVEFSWSA9IG5ldyBBdWRpb0Rhc2hSb2xlKCdDT01NRU5UQVJZJyk7XG4gIC8qKiBEZXNjcmlwdGlvbi4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERVNDUklQVElPTiA9IG5ldyBBdWRpb0Rhc2hSb2xlKCdERVNDUklQVElPTicpO1xuICAvKiogRHViLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERVQiA9IG5ldyBBdWRpb0Rhc2hSb2xlKCdEVUInKTtcbiAgLyoqIEVtZXJnZW5jeS4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTUVSR0VOQ1kgPSBuZXcgQXVkaW9EYXNoUm9sZSgnRU1FUkdFTkNZJyk7XG4gIC8qKiBFbmhhbmNlZCBhdWRpbyBpbnRlbGxpZ2liaWxpdHkuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRU5IQU5DRURfQVVESU9fSU5URUxMSUdJQklMSVRZID0gbmV3IEF1ZGlvRGFzaFJvbGUoJ0VOSEFOQ0VELUFVRElPLUlOVEVMTElHSUJJTElUWScpO1xuICAvKiogS2FyYW9rZS4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBLQVJBT0tFID0gbmV3IEF1ZGlvRGFzaFJvbGUoJ0tBUkFPS0UnKTtcbiAgLyoqIE1haW4uICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUFJTiA9IG5ldyBBdWRpb0Rhc2hSb2xlKCdNQUlOJyk7XG4gIC8qKiBTdXBwbGVtZW50YXJ5LiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNVUFBMRU1FTlRBUlkgPSBuZXcgQXVkaW9EYXNoUm9sZSgnU1VQUExFTUVOVEFSWScpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogQXVkaW9EYXNoUm9sZSB7XG4gICAgcmV0dXJuIG5ldyBBdWRpb0Rhc2hSb2xlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhbiBhdWRpbyBlbmNvZGUgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpb0VuY29kZVByb3BzIHtcbiAgLyoqXG4gICAqIEEgdW5pcXVlIG5hbWUgZm9yIHRoaXMgYXVkaW8gZW5jb2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGF1ZGlvIHNlbGVjdG9yIGluIHRoZSBpbnB1dCB0byB1c2UgYXMgdGhlIHNvdXJjZS4gTXVzdCBtYXRjaCB0aGUgYG5hbWVgIG9mIGFuXG4gICAqIGBBdWRpb1NlbGVjdG9yYCBvbiB0aGUgaW5wdXQgYXR0YWNobWVudC4gV2hlbiBvbWl0dGVkLCBNZWRpYUxpdmUgdXNlcyB0aGUgaW5wdXQncyBkZWZhdWx0IGF1ZGlvLlxuICAgKiBAZGVmYXVsdCAtIHRoZSBpbnB1dCdzIGRlZmF1bHQgYXVkaW9cbiAgICovXG4gIHJlYWRvbmx5IGF1ZGlvU2VsZWN0b3JOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGNvZGVjIGZvciB0aGUgYXVkaW8gZW5jb2RlLlxuICAgKlxuICAgKiBDaG9vc2UgdGhlIGNvZGVjIGV4cGxpY2l0bHkgKGUuZy4gYEF1ZGlvQ29kZWNTZXR0aW5ncy5hYWMoLi4uKWApXG4gICAqL1xuICByZWFkb25seSBjb2RlYzogQXVkaW9Db2RlY1NldHRpbmdzO1xuICAvKipcbiAgICogVGhlIElTTyA2MzktMiBsYW5ndWFnZSBjb2RlIGZvciB0aGUgYXVkaW8gb3V0cHV0IHRyYWNrIChlLmcuICdlbmcnLCAnc3BhJykuXG4gICAqIEBkZWZhdWx0IC0gZm9sbG93IGlucHV0XG4gICAqL1xuICByZWFkb25seSBsYW5ndWFnZUNvZGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIb3cgdGhlIGF1ZGlvIGxhbmd1YWdlIGNvZGUgaXMgc2lnbmFsZWQgaW4gdGhlIG91dHB1dC4gV2hlbiBgRk9MTE9XX0lOUFVUYCwgYSBjb25maWd1cmVkXG4gICAqIGBsYW5ndWFnZUNvZGVgIGlzIHVzZWQgb25seSBhcyBhIGZhbGxiYWNrIHdoZW4gdGhlIGlucHV0IGhhcyBub25lLlxuICAgKiBAZGVmYXVsdCAtIFVTRV9DT05GSUdVUkVEIHdoZW4gYGxhbmd1YWdlQ29kZWAgaXMgc2V0LCBvdGhlcndpc2UgRk9MTE9XX0lOUFVUXG4gICAqL1xuICByZWFkb25seSBsYW5ndWFnZUNvZGVDb250cm9sPzogQXVkaW9MYW5ndWFnZUNvZGVDb250cm9sO1xuICAvKipcbiAgICogVGhlIGRpc3BsYXkgbmFtZSBmb3IgdGhlIGF1ZGlvIHRyYWNrIChlLmcuICdFbmdsaXNoJywgJ0RpcmVjdG9yIENvbW1lbnRhcnknKS5cbiAgICogVXNlZCBmb3IgSExTIGFuZCBNUyBTbW9vdGggb3V0cHV0cy5cbiAgICogQGRlZmF1bHQgLSBubyBzdHJlYW0gbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RyZWFtTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEF1ZGlvIG5vcm1hbGl6YXRpb24gc2V0dGluZ3MgZm9yIGxvdWRuZXNzIGNvcnJlY3Rpb24uXG4gICAqIEBkZWZhdWx0IC0gbm8gbm9ybWFsaXphdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXVkaW9Ob3JtYWxpemF0aW9uPzogQXVkaW9Ob3JtYWxpemF0aW9uU2V0dGluZ3M7XG4gIC8qKlxuICAgKiBUaGUgYXVkaW8gdHlwZSB3aGVuIGF1ZGlvVHlwZUNvbnRyb2wgaXMgVVNFX0NPTkZJR1VSRUQuIFRoZSB2YWx1ZXMgYXJlIGRlZmluZWQgaW4gSVNPLUlFQyAxMzgxOC0xLlxuICAgKiBAZGVmYXVsdCAtIGZvbGxvdyBpbnB1dFxuICAgKi9cbiAgcmVhZG9ubHkgYXVkaW9UeXBlPzogQXVkaW9UeXBlO1xuICAvKipcbiAgICogSG93IHRoZSBhdWRpbyB0eXBlIGlzIHNpZ25hbGVkIGluIHRoZSBvdXRwdXQuXG4gICAqIEBkZWZhdWx0IC0gVVNFX0NPTkZJR1VSRUQgd2hlbiBgYXVkaW9UeXBlYCBpcyBzZXQsIG90aGVyd2lzZSBGT0xMT1dfSU5QVVRcbiAgICovXG4gIHJlYWRvbmx5IGF1ZGlvVHlwZUNvbnRyb2w/OiBBdWRpb1R5cGVDb250cm9sO1xuICAvKipcbiAgICogVGhlIERBU0ggcm9sZXMgdG8gYXNzaWduIHRvIHRoaXMgYXVkaW8gb3V0cHV0LiBBcHBsaWVzIG9ubHkgd2hlbiB0aGUgb3V0cHV0IGlzIGNvbmZpZ3VyZWRcbiAgICogZm9yIERWQiBEQVNIIGFjY2Vzc2liaWxpdHkgc2lnbmFsaW5nLlxuICAgKiBAZGVmYXVsdCAtIG5vIERBU0ggcm9sZXNcbiAgICovXG4gIHJlYWRvbmx5IGF1ZGlvRGFzaFJvbGVzPzogQXVkaW9EYXNoUm9sZVtdO1xuICAvKipcbiAgICogRFZCIERBU0ggYWNjZXNzaWJpbGl0eSBzaWduYWxpbmcgZm9yIHRoaXMgYXVkaW8gb3V0cHV0LlxuICAgKiBAZGVmYXVsdCAtIG5vIERWQiBEQVNIIGFjY2Vzc2liaWxpdHkgc2lnbmFsaW5nXG4gICAqL1xuICByZWFkb25seSBkdmJEYXNoQWNjZXNzaWJpbGl0eT86IER2YkRhc2hBY2Nlc3NpYmlsaXR5O1xuICAvKipcbiAgICogQXVkaW8gcmVtaXggc2V0dGluZ3MgZm9yIGNoYW5uZWwgcmVtYXBwaW5nLlxuICAgKiBAZGVmYXVsdCAtIG5vIHJlbWl4aW5nXG4gICAqL1xuICByZWFkb25seSByZW1peFNldHRpbmdzPzogUmVtaXhTZXR0aW5ncztcbiAgLyoqXG4gICAqIEF1ZGlvIHdhdGVybWFya2luZyBzZXR0aW5ncyAoZS5nLiBOaWVsc2VuIHdhdGVybWFya3MpLlxuICAgKiBAZGVmYXVsdCAtIG5vIHdhdGVybWFya2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgYXVkaW9XYXRlcm1hcmtTZXR0aW5ncz86IEF1ZGlvV2F0ZXJtYXJrU2V0dGluZ3M7XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmNsYXNzIFZpZGVvRW5jb2RlQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuY29kZUNvbmZpZ3VyYXRpb24ge1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBWaWRlb0VuY29kZVByb3BzO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBWaWRlb0VuY29kZVByb3BzKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy53aWR0aCkgJiYgcHJvcHMud2lkdGggJSAyICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFZpZGVvV2lkdGhFdmVuYCwgYFZpZGVvIHdpZHRoIG11c3QgYmUgYW4gZXZlbiBudW1iZXIsIGdvdCAke3Byb3BzLndpZHRofS5gKTtcbiAgICB9XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMuaGVpZ2h0KSAmJiBwcm9wcy5oZWlnaHQgJSAyICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFZpZGVvSGVpZ2h0RXZlbmAsIGBWaWRlbyBoZWlnaHQgbXVzdCBiZSBhbiBldmVuIG51bWJlciwgZ290ICR7cHJvcHMuaGVpZ2h0fS5gKTtcbiAgICB9XG4gICAgdGhpcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIH1cblxuICBwdWJsaWMgX2hhc0V4cGxpY2l0RnJhbWVyYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNvZGVjLl9oYXNFeHBsaWNpdEZyYW1lcmF0ZSgpO1xuICB9XG5cbiAgcHVibGljIF9iaW5kVmlkZW8oKTogQ2ZuQ2hhbm5lbC5WaWRlb0Rlc2NyaXB0aW9uUHJvcGVydHkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICB3aWR0aDogdGhpcy5wcm9wcy53aWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5wcm9wcy5oZWlnaHQsXG4gICAgICByZXNwb25kVG9BZmQ6ICh0aGlzLnByb3BzLnJlc3BvbmRUb0FmZCA/PyBSZXNwb25kVG9BZmQuTk9ORSkudmFsdWUsXG4gICAgICBzY2FsaW5nQmVoYXZpb3I6ICh0aGlzLnByb3BzLnNjYWxpbmdCZWhhdmlvciA/PyBTY2FsaW5nQmVoYXZpb3IuREVGQVVMVCkudmFsdWUsXG4gICAgICBzaGFycG5lc3M6IHRoaXMucHJvcHMuc2hhcnBuZXNzID8/IDUwLFxuICAgICAgY29kZWNTZXR0aW5nczogdGhpcy5wcm9wcy5jb2RlYy5fYmluZCgpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgX2JpbmRBdWRpbygpOiB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgX2JpbmRDYXB0aW9uKCk6IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBfdmlkZW9Db2RlY1R5cGUoKTogVmlkZW9Db2RlY1R5cGUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNvZGVjLl9jb2RlY1R5cGU7XG4gIH1cblxuICBwdWJsaWMgX2F1ZGlvQ29kZWNUeXBlKCk6IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKiogQGludGVybmFsICovXG5jbGFzcyBBdWRpb0VuY29kZUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmNvZGVDb25maWd1cmF0aW9uIHtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogQXVkaW9FbmNvZGVQcm9wcztcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQXVkaW9FbmNvZGVQcm9wcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIH1cblxuICBwdWJsaWMgX2hhc0V4cGxpY2l0RnJhbWVyYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlOyAvLyBOb3QgYXBwbGljYWJsZSBmb3IgYXVkaW9cbiAgfVxuXG4gIHB1YmxpYyBfYmluZFZpZGVvKCk6IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBfYmluZEF1ZGlvKCk6IENmbkNoYW5uZWwuQXVkaW9EZXNjcmlwdGlvblByb3BlcnR5IHtcbiAgICBjb25zdCBjb2RlY1NldHRpbmdzID0gdGhpcy5wcm9wcy5jb2RlYztcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgYXVkaW9TZWxlY3Rvck5hbWU6IHRoaXMucHJvcHMuYXVkaW9TZWxlY3Rvck5hbWUsXG4gICAgICBhdWRpb1R5cGVDb250cm9sOiB0aGlzLnByb3BzLmF1ZGlvVHlwZUNvbnRyb2w/LnZhbHVlXG4gICAgICAgID8/ICh0aGlzLnByb3BzLmF1ZGlvVHlwZSAhPT0gdW5kZWZpbmVkID8gQXVkaW9UeXBlQ29udHJvbC5VU0VfQ09ORklHVVJFRCA6IEF1ZGlvVHlwZUNvbnRyb2wuRk9MTE9XX0lOUFVUKS52YWx1ZSxcbiAgICAgIGxhbmd1YWdlQ29kZTogdGhpcy5wcm9wcy5sYW5ndWFnZUNvZGUsXG4gICAgICBsYW5ndWFnZUNvZGVDb250cm9sOiB0aGlzLnByb3BzLmxhbmd1YWdlQ29kZUNvbnRyb2w/LnZhbHVlXG4gICAgICAgID8/ICh0aGlzLnByb3BzLmxhbmd1YWdlQ29kZSAhPT0gdW5kZWZpbmVkID8gQXVkaW9MYW5ndWFnZUNvZGVDb250cm9sLlVTRV9DT05GSUdVUkVEIDogQXVkaW9MYW5ndWFnZUNvZGVDb250cm9sLkZPTExPV19JTlBVVCkudmFsdWUsXG4gICAgICBzdHJlYW1OYW1lOiB0aGlzLnByb3BzLnN0cmVhbU5hbWUsXG4gICAgICBhdWRpb1R5cGU6IHRoaXMucHJvcHMuYXVkaW9UeXBlPy52YWx1ZSxcbiAgICAgIGF1ZGlvRGFzaFJvbGVzOiB0aGlzLnByb3BzLmF1ZGlvRGFzaFJvbGVzPy5tYXAociA9PiByLnZhbHVlKSxcbiAgICAgIGR2YkRhc2hBY2Nlc3NpYmlsaXR5OiB0aGlzLnByb3BzLmR2YkRhc2hBY2Nlc3NpYmlsaXR5Py52YWx1ZSxcbiAgICAgIGNvZGVjU2V0dGluZ3M6IGNvZGVjU2V0dGluZ3MuX2JpbmQoKSxcbiAgICAgIGF1ZGlvTm9ybWFsaXphdGlvblNldHRpbmdzOiB0aGlzLnByb3BzLmF1ZGlvTm9ybWFsaXphdGlvbiA/IHtcbiAgICAgICAgYWxnb3JpdGhtOiB0aGlzLnByb3BzLmF1ZGlvTm9ybWFsaXphdGlvbi5hbGdvcml0aG0/LnZhbHVlLFxuICAgICAgICBhbGdvcml0aG1Db250cm9sOiB0aGlzLnByb3BzLmF1ZGlvTm9ybWFsaXphdGlvbi5hbGdvcml0aG1Db250cm9sPy52YWx1ZSxcbiAgICAgICAgdGFyZ2V0TGtmczogdGhpcy5wcm9wcy5hdWRpb05vcm1hbGl6YXRpb24udGFyZ2V0TGtmcyxcbiAgICAgICAgcGVha0NhbGN1bGF0aW9uOiB0aGlzLnByb3BzLmF1ZGlvTm9ybWFsaXphdGlvbi5wZWFrQ2FsY3VsYXRpb24/LnZhbHVlLFxuICAgICAgICBwZWFrTGltaXRlclRocmVzaG9sZDogdGhpcy5wcm9wcy5hdWRpb05vcm1hbGl6YXRpb24ucGVha0xpbWl0ZXJUaHJlc2hvbGQsXG4gICAgICB9IDogdW5kZWZpbmVkLFxuICAgICAgcmVtaXhTZXR0aW5nczogdGhpcy5wcm9wcy5yZW1peFNldHRpbmdzID8ge1xuICAgICAgICBjaGFubmVsTWFwcGluZ3M6IHRoaXMucHJvcHMucmVtaXhTZXR0aW5ncy5jaGFubmVsTWFwcGluZ3MubWFwKG0gPT4gKHtcbiAgICAgICAgICBvdXRwdXRDaGFubmVsOiBtLm91dHB1dENoYW5uZWwsXG4gICAgICAgICAgaW5wdXRDaGFubmVsTGV2ZWxzOiBtLmlucHV0Q2hhbm5lbExldmVscy5tYXAobCA9PiAoe1xuICAgICAgICAgICAgaW5wdXRDaGFubmVsOiBsLmlucHV0Q2hhbm5lbCxcbiAgICAgICAgICAgIGdhaW46IGwuZ2FpbiA/PyAwLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpLFxuICAgICAgICBjaGFubmVsc0luOiB0aGlzLnByb3BzLnJlbWl4U2V0dGluZ3MuY2hhbm5lbHNJbixcbiAgICAgICAgY2hhbm5lbHNPdXQ6IHRoaXMucHJvcHMucmVtaXhTZXR0aW5ncy5jaGFubmVsc091dCxcbiAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICBhdWRpb1dhdGVybWFya2luZ1NldHRpbmdzOiB0aGlzLnByb3BzLmF1ZGlvV2F0ZXJtYXJrU2V0dGluZ3MgPyB7XG4gICAgICAgIG5pZWxzZW5XYXRlcm1hcmtzU2V0dGluZ3M6IHRoaXMucHJvcHMuYXVkaW9XYXRlcm1hcmtTZXR0aW5ncy5uaWVsc2VuV2F0ZXJtYXJrcyA/IHtcbiAgICAgICAgICBuaWVsc2VuRGlzdHJpYnV0aW9uVHlwZTogdGhpcy5wcm9wcy5hdWRpb1dhdGVybWFya1NldHRpbmdzLm5pZWxzZW5XYXRlcm1hcmtzLmRpc3RyaWJ1dGlvblR5cGU/LnZhbHVlLFxuICAgICAgICAgIG5pZWxzZW5DYmV0U2V0dGluZ3M6IHRoaXMucHJvcHMuYXVkaW9XYXRlcm1hcmtTZXR0aW5ncy5uaWVsc2VuV2F0ZXJtYXJrcy5jYmV0U2V0dGluZ3MgPyB7XG4gICAgICAgICAgICBjYmV0Q2hlY2tEaWdpdFN0cmluZzogdGhpcy5wcm9wcy5hdWRpb1dhdGVybWFya1NldHRpbmdzLm5pZWxzZW5XYXRlcm1hcmtzLmNiZXRTZXR0aW5ncy5jYmV0Q2hlY2tEaWdpdFN0cmluZyxcbiAgICAgICAgICAgIGNiZXRTdGVwYXNpZGU6IHRoaXMucHJvcHMuYXVkaW9XYXRlcm1hcmtTZXR0aW5ncy5uaWVsc2VuV2F0ZXJtYXJrcy5jYmV0U2V0dGluZ3MuY2JldFN0ZXBhc2lkZT8udmFsdWUsXG4gICAgICAgICAgICBjc2lkOiB0aGlzLnByb3BzLmF1ZGlvV2F0ZXJtYXJrU2V0dGluZ3MubmllbHNlbldhdGVybWFya3MuY2JldFNldHRpbmdzLmNzaWQsXG4gICAgICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBuaWVsc2VuTmFlc0lpTndTZXR0aW5nczogdGhpcy5wcm9wcy5hdWRpb1dhdGVybWFya1NldHRpbmdzLm5pZWxzZW5XYXRlcm1hcmtzLm5hZXNJaU53U2V0dGluZ3MgPyB7XG4gICAgICAgICAgICBjaGVja0RpZ2l0U3RyaW5nOiB0aGlzLnByb3BzLmF1ZGlvV2F0ZXJtYXJrU2V0dGluZ3MubmllbHNlbldhdGVybWFya3MubmFlc0lpTndTZXR0aW5ncy5jaGVja0RpZ2l0U3RyaW5nLFxuICAgICAgICAgICAgc2lkOiB0aGlzLnByb3BzLmF1ZGlvV2F0ZXJtYXJrU2V0dGluZ3MubmllbHNlbldhdGVybWFya3MubmFlc0lpTndTZXR0aW5ncy5zaWQsXG4gICAgICAgICAgICB0aW1lem9uZTogdGhpcy5wcm9wcy5hdWRpb1dhdGVybWFya1NldHRpbmdzLm5pZWxzZW5XYXRlcm1hcmtzLm5hZXNJaU53U2V0dGluZ3MudGltZXpvbmU/LnZhbHVlLFxuICAgICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICB9IDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgX2JpbmRDYXB0aW9uKCk6IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBfdmlkZW9Db2RlY1R5cGUoKTogdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIF9hdWRpb0NvZGVjVHlwZSgpOiBBdWRpb0NvZGVjVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY29kZWMuX2NvZGVjVHlwZTtcbiAgfVxufVxuXG4vKipcbiAqIFdoZXRoZXIgYSBjYXB0aW9uIHRyYWNrIGltcGxlbWVudHMgYWNjZXNzaWJpbGl0eSBmZWF0dXJlcyAod3JpdHRlbiBkZXNjcmlwdGlvbnMgb2YgZGlhbG9nLFxuICogbXVzaWMsIGFuZCBzb3VuZHMpLiBTaWduYWxlZCBpbiBITFMgYW5kIE1lZGlhUGFja2FnZSBvdXRwdXQgZ3JvdXBzLlxuICovXG5leHBvcnQgY2xhc3MgQ2FwdGlvbkFjY2Vzc2liaWxpdHkge1xuICAvKiogVGhlIGNhcHRpb25zIGRvIG5vdCBpbXBsZW1lbnQgYWNjZXNzaWJpbGl0eSBmZWF0dXJlcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBET0VTX05PVF9JTVBMRU1FTlRfQUNDRVNTSUJJTElUWV9GRUFUVVJFUyA9IG5ldyBDYXB0aW9uQWNjZXNzaWJpbGl0eSgnRE9FU19OT1RfSU1QTEVNRU5UX0FDQ0VTU0lCSUxJVFlfRkVBVFVSRVMnKTtcbiAgLyoqIFRoZSBjYXB0aW9ucyBpbXBsZW1lbnQgYWNjZXNzaWJpbGl0eSBmZWF0dXJlcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJTVBMRU1FTlRTX0FDQ0VTU0lCSUxJVFlfRkVBVFVSRVMgPSBuZXcgQ2FwdGlvbkFjY2Vzc2liaWxpdHkoJ0lNUExFTUVOVFNfQUNDRVNTSUJJTElUWV9GRUFUVVJFUycpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogQ2FwdGlvbkFjY2Vzc2liaWxpdHkge1xuICAgIHJldHVybiBuZXcgQ2FwdGlvbkFjY2Vzc2liaWxpdHkodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEEgREFTSCByb2xlIHRvIGFzc2lnbiB0byBhIGNhcHRpb25zIG91dHB1dCAodXNlZCB3aGVuIHRoZSBvdXRwdXQgY2FycmllcyBEVkIgREFTSCBhY2Nlc3NpYmlsaXR5XG4gKiBzaWduYWxpbmcpLlxuICovXG5leHBvcnQgY2xhc3MgQ2FwdGlvbkRhc2hSb2xlIHtcbiAgLyoqIEFsdGVybmF0ZS4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBTFRFUk5BVEUgPSBuZXcgQ2FwdGlvbkRhc2hSb2xlKCdBTFRFUk5BVEUnKTtcbiAgLyoqIENhcHRpb24uICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ0FQVElPTiA9IG5ldyBDYXB0aW9uRGFzaFJvbGUoJ0NBUFRJT04nKTtcbiAgLyoqIENvbW1lbnRhcnkuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ09NTUVOVEFSWSA9IG5ldyBDYXB0aW9uRGFzaFJvbGUoJ0NPTU1FTlRBUlknKTtcbiAgLyoqIERlc2NyaXB0aW9uLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFU0NSSVBUSU9OID0gbmV3IENhcHRpb25EYXNoUm9sZSgnREVTQ1JJUFRJT04nKTtcbiAgLyoqIER1Yi4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBEVUIgPSBuZXcgQ2FwdGlvbkRhc2hSb2xlKCdEVUInKTtcbiAgLyoqIEVhc3kgcmVhZGVyLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVBU1lSRUFERVIgPSBuZXcgQ2FwdGlvbkRhc2hSb2xlKCdFQVNZUkVBREVSJyk7XG4gIC8qKiBFbWVyZ2VuY3kuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRU1FUkdFTkNZID0gbmV3IENhcHRpb25EYXNoUm9sZSgnRU1FUkdFTkNZJyk7XG4gIC8qKiBGb3JjZWQgc3VidGl0bGUuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRk9SQ0VEX1NVQlRJVExFID0gbmV3IENhcHRpb25EYXNoUm9sZSgnRk9SQ0VELVNVQlRJVExFJyk7XG4gIC8qKiBLYXJhb2tlLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEtBUkFPS0UgPSBuZXcgQ2FwdGlvbkRhc2hSb2xlKCdLQVJBT0tFJyk7XG4gIC8qKiBNYWluLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BSU4gPSBuZXcgQ2FwdGlvbkRhc2hSb2xlKCdNQUlOJyk7XG4gIC8qKiBNZXRhZGF0YS4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNRVRBREFUQSA9IG5ldyBDYXB0aW9uRGFzaFJvbGUoJ01FVEFEQVRBJyk7XG4gIC8qKiBTdWJ0aXRsZS4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTVUJUSVRMRSA9IG5ldyBDYXB0aW9uRGFzaFJvbGUoJ1NVQlRJVExFJyk7XG4gIC8qKiBTdXBwbGVtZW50YXJ5LiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNVUFBMRU1FTlRBUlkgPSBuZXcgQ2FwdGlvbkRhc2hSb2xlKCdTVVBQTEVNRU5UQVJZJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBDYXB0aW9uRGFzaFJvbGUge1xuICAgIHJldHVybiBuZXcgQ2FwdGlvbkRhc2hSb2xlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIGNhcHRpb24gZW5jb2RlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwdGlvbkVuY29kZVByb3BzIHtcbiAgLyoqXG4gICAqIEEgdW5pcXVlIG5hbWUgZm9yIHRoaXMgY2FwdGlvbiBlbmNvZGUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY2FwdGlvbiBzZWxlY3RvciBpbiB0aGUgaW5wdXQgdG8gdXNlIGFzIHRoZSBzb3VyY2UuXG4gICAqL1xuICByZWFkb25seSBjYXB0aW9uU2VsZWN0b3JOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgb3V0cHV0IGNhcHRpb24gZm9ybWF0LiBVc2UgdGhlIGBDYXB0aW9uRGVzdGluYXRpb25gIGZhY3RvcnkgbWV0aG9kcyAoZS5nLlxuICAgKiBgQ2FwdGlvbkRlc3RpbmF0aW9uLmJ1cm5JbigpYCwgYC53ZWJ2dHQoKWAsIGAuZW1iZWRkZWQoKWApLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb246IENhcHRpb25EZXN0aW5hdGlvbjtcbiAgLyoqXG4gICAqIFRoZSBJU08gNjM5LTIgbGFuZ3VhZ2UgY29kZSBmb3IgdGhlIGNhcHRpb25zIChlLmcuICdlbmcnLCAnc3BhJykuXG4gICAqIEBkZWZhdWx0IC0gbm8gbGFuZ3VhZ2UgY29kZVxuICAgKi9cbiAgcmVhZG9ubHkgbGFuZ3VhZ2VDb2RlPzogc3RyaW5nO1xuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGNhcHRpb25zIChlLmcuICdFbmdsaXNoJywgJ1NwYW5pc2gnKS5cbiAgICogQGRlZmF1bHQgLSBubyBsYW5ndWFnZSBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgbGFuZ3VhZ2VEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBjYXB0aW9uIHRyYWNrIGltcGxlbWVudHMgYWNjZXNzaWJpbGl0eSBmZWF0dXJlcy5cbiAgICogQGRlZmF1bHQgLSBUaGUgY2FwdGlvbnMgZG8gbm90IGltcGxlbWVudCBhY2Nlc3NpYmlsaXR5IGZlYXR1cmVzXG4gICAqL1xuICByZWFkb25seSBhY2Nlc3NpYmlsaXR5PzogQ2FwdGlvbkFjY2Vzc2liaWxpdHk7XG4gIC8qKlxuICAgKiBUaGUgREFTSCByb2xlcyB0byBhc3NpZ24gdG8gdGhpcyBjYXB0aW9ucyBvdXRwdXQuIEFwcGxpZXMgb25seSB3aGVuIHRoZSBvdXRwdXQgaXMgY29uZmlndXJlZFxuICAgKiBmb3IgRFZCIERBU0ggYWNjZXNzaWJpbGl0eSBzaWduYWxpbmcuXG4gICAqIEBkZWZhdWx0IC0gbm8gREFTSCByb2xlc1xuICAgKi9cbiAgcmVhZG9ubHkgY2FwdGlvbkRhc2hSb2xlcz86IENhcHRpb25EYXNoUm9sZVtdO1xuICAvKipcbiAgICogRFZCIERBU0ggYWNjZXNzaWJpbGl0eSBzaWduYWxpbmcgZm9yIHRoaXMgY2FwdGlvbnMgb3V0cHV0LlxuICAgKiBAZGVmYXVsdCAtIG5vIERWQiBEQVNIIGFjY2Vzc2liaWxpdHkgc2lnbmFsaW5nXG4gICAqL1xuICByZWFkb25seSBkdmJEYXNoQWNjZXNzaWJpbGl0eT86IER2YkRhc2hBY2Nlc3NpYmlsaXR5O1xufVxuXG4vKiogQGludGVybmFsICovXG5jbGFzcyBDYXB0aW9uRW5jb2RlQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuY29kZUNvbmZpZ3VyYXRpb24ge1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBDYXB0aW9uRW5jb2RlUHJvcHM7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IENhcHRpb25FbmNvZGVQcm9wcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIH1cblxuICBwdWJsaWMgX2hhc0V4cGxpY2l0RnJhbWVyYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlOyAvLyBOb3QgYXBwbGljYWJsZSBmb3IgY2FwdGlvbnNcbiAgfVxuXG4gIHB1YmxpYyBfYmluZFZpZGVvKCk6IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBfYmluZEF1ZGlvKCk6IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBfYmluZENhcHRpb24oKTogQ2ZuQ2hhbm5lbC5DYXB0aW9uRGVzY3JpcHRpb25Qcm9wZXJ0eSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIGNhcHRpb25TZWxlY3Rvck5hbWU6IHRoaXMucHJvcHMuY2FwdGlvblNlbGVjdG9yTmFtZSxcbiAgICAgIGRlc3RpbmF0aW9uU2V0dGluZ3M6IHRoaXMucHJvcHMuZGVzdGluYXRpb24uX2JpbmQoKSxcbiAgICAgIGxhbmd1YWdlQ29kZTogdGhpcy5wcm9wcy5sYW5ndWFnZUNvZGUsXG4gICAgICBsYW5ndWFnZURlc2NyaXB0aW9uOiB0aGlzLnByb3BzLmxhbmd1YWdlRGVzY3JpcHRpb24sXG4gICAgICBhY2Nlc3NpYmlsaXR5OiAodGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5ID8/IENhcHRpb25BY2Nlc3NpYmlsaXR5LkRPRVNfTk9UX0lNUExFTUVOVF9BQ0NFU1NJQklMSVRZX0ZFQVRVUkVTKS52YWx1ZSxcbiAgICAgIGNhcHRpb25EYXNoUm9sZXM6IHRoaXMucHJvcHMuY2FwdGlvbkRhc2hSb2xlcz8ubWFwKHIgPT4gci52YWx1ZSksXG4gICAgICBkdmJEYXNoQWNjZXNzaWJpbGl0eTogdGhpcy5wcm9wcy5kdmJEYXNoQWNjZXNzaWJpbGl0eT8udmFsdWUsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBfdmlkZW9Db2RlY1R5cGUoKTogdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIF9hdWRpb0NvZGVjVHlwZSgpOiB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgX2dyYW50UmVhZChyb2xlOiBJUm9sZSk6IHZvaWQge1xuICAgIHRoaXMucHJvcHMuZGVzdGluYXRpb24uX2dyYW50UmVhZChyb2xlKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBfaXNJbkJhbmRDYXB0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRlc3RpbmF0aW9uLl9pc0luQmFuZCgpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIF9pc0VtYmVkZGVkQ2FwdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kZXN0aW5hdGlvbi5faXNFbWJlZGRlZCgpO1xuICB9XG59XG4iXX0=