@aws-cdk/aws-glue-alpha 2.268.0-alpha.0 → 2.270.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.
- package/.jsii +1820 -1612
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +1649 -10
- package/README.md +105 -35
- package/adr/job-arguments.md +212 -0
- package/lib/catalog.js +88 -4
- package/lib/code.js +59 -4
- package/lib/connection.d.ts +44 -29
- package/lib/connection.js +147 -31
- package/lib/constants.d.ts +17 -0
- package/lib/constants.js +20 -2
- package/lib/data-format.js +43 -6
- package/lib/data-quality-ruleset.js +60 -4
- package/lib/database.js +48 -2
- package/lib/external-table.js +48 -2
- package/lib/jobs/job.d.ts +90 -9
- package/lib/jobs/job.js +219 -38
- package/lib/jobs/pyspark-etl-job.d.ts +1 -3
- package/lib/jobs/pyspark-etl-job.js +28 -14
- package/lib/jobs/pyspark-flex-etl-job.d.ts +1 -3
- package/lib/jobs/pyspark-flex-etl-job.js +28 -14
- package/lib/jobs/pyspark-streaming-job.d.ts +1 -3
- package/lib/jobs/pyspark-streaming-job.js +28 -14
- package/lib/jobs/python-shell-job.d.ts +20 -7
- package/lib/jobs/python-shell-job.js +49 -33
- package/lib/jobs/ray-job.js +8 -13
- package/lib/jobs/scala-spark-etl-job.d.ts +1 -3
- package/lib/jobs/scala-spark-etl-job.js +29 -14
- package/lib/jobs/scala-spark-flex-etl-job.d.ts +1 -3
- package/lib/jobs/scala-spark-flex-etl-job.js +29 -14
- package/lib/jobs/scala-spark-streaming-job.d.ts +1 -3
- package/lib/jobs/scala-spark-streaming-job.js +29 -14
- package/lib/jobs/spark-job.d.ts +9 -7
- package/lib/jobs/spark-job.js +26 -32
- package/lib/partition-projection.d.ts +36 -47
- package/lib/partition-projection.js +34 -40
- package/lib/s3-table.js +106 -5
- package/lib/schema.js +50 -3
- package/lib/security-configuration.js +60 -5
- package/lib/storage-parameter.js +91 -2
- package/lib/table-base.js +32 -2
- package/lib/triggers/trigger-options.d.ts +102 -42
- package/lib/triggers/trigger-options.js +242 -3
- package/lib/triggers/workflow.d.ts +31 -47
- package/lib/triggers/workflow.js +87 -142
- package/package.json +10 -10
package/lib/jobs/job.js
CHANGED
|
@@ -51,7 +51,22 @@ const secret_detection_1 = require("../private/secret-detection");
|
|
|
51
51
|
* event-driven flow using the job.
|
|
52
52
|
*/
|
|
53
53
|
class JobBase extends cdk.Resource {
|
|
54
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.JobBase", version: "2.
|
|
54
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.JobBase", version: "2.270.0-alpha.0" };
|
|
55
|
+
/**
|
|
56
|
+
* A reference to this Job resource, for use with the generated L1 ref interface.
|
|
57
|
+
*/
|
|
58
|
+
get jobRef() {
|
|
59
|
+
try {
|
|
60
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.JobBase#jobRef", "");
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
64
|
+
Error.captureStackTrace(error, jsiiDeprecationWarnings.getPropertyDescriptor(this, "jobRef").get);
|
|
65
|
+
}
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
return { jobName: this.jobName };
|
|
69
|
+
}
|
|
55
70
|
/**
|
|
56
71
|
* Create a CloudWatch Event Rule for this Glue Job when it's in a given state
|
|
57
72
|
*
|
|
@@ -64,6 +79,15 @@ class JobBase extends cdk.Resource {
|
|
|
64
79
|
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/EventTypes.html#glue-event-types
|
|
65
80
|
*/
|
|
66
81
|
onEvent(id, options = {}) {
|
|
82
|
+
try {
|
|
83
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.JobBase#onEvent", "");
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
87
|
+
Error.captureStackTrace(error, this.onEvent);
|
|
88
|
+
}
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
67
91
|
const rule = new events.Rule(this, id, options);
|
|
68
92
|
rule.addTarget(options.target);
|
|
69
93
|
rule.addEventPattern({
|
|
@@ -84,6 +108,7 @@ class JobBase extends cdk.Resource {
|
|
|
84
108
|
*/
|
|
85
109
|
onStateChange(id, jobState, options = {}) {
|
|
86
110
|
try {
|
|
111
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.JobBase#onStateChange", "");
|
|
87
112
|
jsiiDeprecationWarnings._aws_cdk_aws_glue_alpha_JobState(jobState);
|
|
88
113
|
}
|
|
89
114
|
catch (error) {
|
|
@@ -110,6 +135,15 @@ class JobBase extends cdk.Resource {
|
|
|
110
135
|
* @param options optional event options. default is {}.
|
|
111
136
|
*/
|
|
112
137
|
onSuccess(id, options = {}) {
|
|
138
|
+
try {
|
|
139
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.JobBase#onSuccess", "");
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
143
|
+
Error.captureStackTrace(error, this.onSuccess);
|
|
144
|
+
}
|
|
145
|
+
throw error;
|
|
146
|
+
}
|
|
113
147
|
return this.onStateChange(id, constants_1.JobState.SUCCEEDED, options);
|
|
114
148
|
}
|
|
115
149
|
/**
|
|
@@ -119,6 +153,15 @@ class JobBase extends cdk.Resource {
|
|
|
119
153
|
* @param options optional event options. default is {}.
|
|
120
154
|
*/
|
|
121
155
|
onFailure(id, options = {}) {
|
|
156
|
+
try {
|
|
157
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.JobBase#onFailure", "");
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
161
|
+
Error.captureStackTrace(error, this.onFailure);
|
|
162
|
+
}
|
|
163
|
+
throw error;
|
|
164
|
+
}
|
|
122
165
|
return this.onStateChange(id, constants_1.JobState.FAILED, options);
|
|
123
166
|
}
|
|
124
167
|
/**
|
|
@@ -128,6 +171,15 @@ class JobBase extends cdk.Resource {
|
|
|
128
171
|
* @param options optional event options. default is {}.
|
|
129
172
|
*/
|
|
130
173
|
onTimeout(id, options = {}) {
|
|
174
|
+
try {
|
|
175
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.JobBase#onTimeout", "");
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
179
|
+
Error.captureStackTrace(error, this.onTimeout);
|
|
180
|
+
}
|
|
181
|
+
throw error;
|
|
182
|
+
}
|
|
131
183
|
return this.onStateChange(id, constants_1.JobState.TIMEOUT, options);
|
|
132
184
|
}
|
|
133
185
|
/**
|
|
@@ -141,6 +193,7 @@ class JobBase extends cdk.Resource {
|
|
|
141
193
|
*/
|
|
142
194
|
metric(metricName, type, props) {
|
|
143
195
|
try {
|
|
196
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.JobBase#metric", "");
|
|
144
197
|
jsiiDeprecationWarnings._aws_cdk_aws_glue_alpha_MetricType(type);
|
|
145
198
|
}
|
|
146
199
|
catch (error) {
|
|
@@ -166,6 +219,15 @@ class JobBase extends cdk.Resource {
|
|
|
166
219
|
* This metric is based on the Rule returned by no-args onSuccess() call.
|
|
167
220
|
*/
|
|
168
221
|
metricSuccess(props) {
|
|
222
|
+
try {
|
|
223
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.JobBase#metricSuccess", "");
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
227
|
+
Error.captureStackTrace(error, this.metricSuccess);
|
|
228
|
+
}
|
|
229
|
+
throw error;
|
|
230
|
+
}
|
|
169
231
|
return metricRule(this.metricJobStateRule('SuccessMetricRule', constants_1.JobState.SUCCEEDED), props);
|
|
170
232
|
}
|
|
171
233
|
/**
|
|
@@ -174,6 +236,15 @@ class JobBase extends cdk.Resource {
|
|
|
174
236
|
* This metric is based on the Rule returned by no-args onFailure() call.
|
|
175
237
|
*/
|
|
176
238
|
metricFailure(props) {
|
|
239
|
+
try {
|
|
240
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.JobBase#metricFailure", "");
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
244
|
+
Error.captureStackTrace(error, this.metricFailure);
|
|
245
|
+
}
|
|
246
|
+
throw error;
|
|
247
|
+
}
|
|
177
248
|
return metricRule(this.metricJobStateRule('FailureMetricRule', constants_1.JobState.FAILED), props);
|
|
178
249
|
}
|
|
179
250
|
/**
|
|
@@ -182,6 +253,15 @@ class JobBase extends cdk.Resource {
|
|
|
182
253
|
* This metric is based on the Rule returned by no-args onTimeout() call.
|
|
183
254
|
*/
|
|
184
255
|
metricTimeout(props) {
|
|
256
|
+
try {
|
|
257
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.JobBase#metricTimeout", "");
|
|
258
|
+
}
|
|
259
|
+
catch (error) {
|
|
260
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
261
|
+
Error.captureStackTrace(error, this.metricTimeout);
|
|
262
|
+
}
|
|
263
|
+
throw error;
|
|
264
|
+
}
|
|
185
265
|
return metricRule(this.metricJobStateRule('TimeoutMetricRule', constants_1.JobState.TIMEOUT), props);
|
|
186
266
|
}
|
|
187
267
|
/**
|
|
@@ -197,6 +277,15 @@ class JobBase extends cdk.Resource {
|
|
|
197
277
|
* Returns the job arn
|
|
198
278
|
*/
|
|
199
279
|
buildJobArn(scope, jobName) {
|
|
280
|
+
try {
|
|
281
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.JobBase#buildJobArn", "");
|
|
282
|
+
}
|
|
283
|
+
catch (error) {
|
|
284
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
285
|
+
Error.captureStackTrace(error, this.buildJobArn);
|
|
286
|
+
}
|
|
287
|
+
throw error;
|
|
288
|
+
}
|
|
200
289
|
return cdk.Stack.of(scope).formatArn({
|
|
201
290
|
service: 'glue',
|
|
202
291
|
resource: 'job',
|
|
@@ -210,7 +299,7 @@ exports.JobBase = JobBase;
|
|
|
210
299
|
* @resource AWS::Glue::Job
|
|
211
300
|
*/
|
|
212
301
|
class Job extends JobBase {
|
|
213
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Job", version: "2.
|
|
302
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Job", version: "2.270.0-alpha.0" };
|
|
214
303
|
/**
|
|
215
304
|
* Identifies an existing Glue Job from a subset of attributes that can
|
|
216
305
|
* be referenced from within another Stack or Construct.
|
|
@@ -221,6 +310,7 @@ class Job extends JobBase {
|
|
|
221
310
|
*/
|
|
222
311
|
static fromJobAttributes(scope, id, attrs) {
|
|
223
312
|
try {
|
|
313
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.Job#fromJobAttributes", "");
|
|
224
314
|
jsiiDeprecationWarnings._aws_cdk_aws_glue_alpha_JobAttributes(attrs);
|
|
225
315
|
}
|
|
226
316
|
catch (error) {
|
|
@@ -237,31 +327,126 @@ class Job extends JobBase {
|
|
|
237
327
|
return new Import(scope, id);
|
|
238
328
|
}
|
|
239
329
|
/**
|
|
240
|
-
*
|
|
330
|
+
* Argument keys that Glue reserves for its own use and that a caller must never set through
|
|
331
|
+
* `defaultArguments`. Unlike construct-managed arguments (which are derived from what each job
|
|
332
|
+
* class emits), these are owned by the Glue service itself and are reserved for every job type.
|
|
241
333
|
*
|
|
242
334
|
* @see https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html
|
|
243
335
|
*/
|
|
244
|
-
|
|
336
|
+
static GLUE_RESERVED_ARGUMENTS = new Set(['--debug', '--mode', '--JOB_NAME', '--endpoint']);
|
|
337
|
+
/**
|
|
338
|
+
* The construct-managed job arguments that are actually emitted for the current configuration,
|
|
339
|
+
* accumulated via {@link setManagedArgument}. Passed through to `CfnJob.defaultArguments` after
|
|
340
|
+
* being merged with the user-supplied `defaultArguments` by {@link mergeDefaultArguments}.
|
|
341
|
+
*/
|
|
342
|
+
_managedArguments = {};
|
|
343
|
+
/**
|
|
344
|
+
* Every argument key this construct manages, accumulated via {@link setManagedArgument} — whether
|
|
345
|
+
* or not the current configuration emits a value for it. This is the reserved set that a
|
|
346
|
+
* user-supplied `defaultArguments` must not collide with. Registering a key even when its value
|
|
347
|
+
* is `undefined` (feature disabled or unset) is what keeps `defaultArguments` from silently
|
|
348
|
+
* re-enabling it.
|
|
349
|
+
*/
|
|
350
|
+
_managedArgumentKeys = new Set();
|
|
351
|
+
/**
|
|
352
|
+
* Declare `key` as construct-managed and, when `value` is defined, emit it into the job's
|
|
353
|
+
* arguments.
|
|
354
|
+
*
|
|
355
|
+
* This is the single sink for every argument a job construct derives from its typed props (or
|
|
356
|
+
* from the job class itself). Call it once per managed key, passing `undefined` as the value when
|
|
357
|
+
* the corresponding feature is turned off or unset — the key is still reserved from
|
|
358
|
+
* `defaultArguments` either way, so a disabled feature cannot be re-enabled through the escape
|
|
359
|
+
* hatch. There is deliberately no other way for a subclass to emit a managed argument, so the
|
|
360
|
+
* reserved set can never drift from what is emitted.
|
|
361
|
+
*
|
|
362
|
+
* @param key the Glue argument key, e.g. `--enable-metrics`
|
|
363
|
+
* @param value the value to emit, or `undefined` to reserve the key without emitting it
|
|
364
|
+
*/
|
|
365
|
+
setManagedArgument(key, value) {
|
|
366
|
+
try {
|
|
367
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.Job#setManagedArgument", "");
|
|
368
|
+
}
|
|
369
|
+
catch (error) {
|
|
370
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
371
|
+
Error.captureStackTrace(error, this.setManagedArgument);
|
|
372
|
+
}
|
|
373
|
+
throw error;
|
|
374
|
+
}
|
|
375
|
+
this._managedArgumentKeys.add(key);
|
|
376
|
+
if (value !== undefined) {
|
|
377
|
+
this._managedArguments[key] = value;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Merge the customer-supplied `defaultArguments` with the arguments this construct manages.
|
|
382
|
+
*
|
|
383
|
+
* The construct owns every argument it emits — whether the value comes from a dedicated typed
|
|
384
|
+
* prop (e.g. `continuousLogging`, `enableMetrics`, `sparkUI`) or from the job class itself
|
|
385
|
+
* (e.g. `--job-language`). Those arguments, plus the arguments Glue reserves for its own use,
|
|
386
|
+
* MUST be configured through their dedicated props rather than the untyped `defaultArguments`
|
|
387
|
+
* map, so there is exactly one way to express each intent. Passing such a key through
|
|
388
|
+
* `defaultArguments` therefore throws instead of silently winning or being silently dropped.
|
|
389
|
+
*
|
|
390
|
+
* A managed key whose supplied value is identical to the construct's value is not contradictory,
|
|
391
|
+
* so it is allowed rather than rejected (auto-correcting config is preferred over errors).
|
|
392
|
+
* Glue-reserved keys are never emitted by the construct, so there is no value to reconcile and
|
|
393
|
+
* they always throw.
|
|
394
|
+
*
|
|
395
|
+
* The reserved set is `_managedArgumentKeys` — every key the construct declared through
|
|
396
|
+
* {@link setManagedArgument}, whether or not a value was emitted for it. It is deliberately NOT
|
|
397
|
+
* derived from the keys that carry a value: a typed prop that turns a feature *off* (e.g.
|
|
398
|
+
* `enableMetrics: false`) emits no value but still reserves its key, so `defaultArguments` cannot
|
|
399
|
+
* silently re-enable it.
|
|
400
|
+
*
|
|
401
|
+
* Conflict detection relies on string equality of the argument keys, which cannot see through
|
|
402
|
+
* unresolved tokens (e.g. a key produced by `CfnJson` that only resolves at deploy time). If a
|
|
403
|
+
* key is a token, the check is skipped for that key and a synthesis-time warning is emitted, so
|
|
404
|
+
* the (rare) case where a token key resolves to a managed argument at deploy time — in which the
|
|
405
|
+
* construct-managed value would silently take precedence — is surfaced rather than hidden.
|
|
406
|
+
*
|
|
407
|
+
* @param defaultArguments the caller-supplied escape-hatch arguments, if any
|
|
408
|
+
* @see https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html
|
|
409
|
+
*/
|
|
410
|
+
mergeDefaultArguments(defaultArguments) {
|
|
411
|
+
try {
|
|
412
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.Job#mergeDefaultArguments", "");
|
|
413
|
+
}
|
|
414
|
+
catch (error) {
|
|
415
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
416
|
+
Error.captureStackTrace(error, this.mergeDefaultArguments);
|
|
417
|
+
}
|
|
418
|
+
throw error;
|
|
419
|
+
}
|
|
245
420
|
if (defaultArguments) {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
421
|
+
if (Object.keys(defaultArguments).some((arg) => cdk.Token.isUnresolved(arg))) {
|
|
422
|
+
cdk.Annotations.of(this).addWarningV2('@aws-cdk/aws-glue-alpha:tokenJobArgumentKey', 'defaultArguments contains an unresolved token as an argument key, so it cannot be checked for conflicts with construct-managed arguments. If it resolves to a managed argument at deploy time, the construct-managed value will take precedence. Configure managed arguments through their dedicated props (e.g. continuousLogging, enableMetrics, enableObservabilityMetrics, sparkUI).');
|
|
423
|
+
}
|
|
424
|
+
const conflicts = Object.keys(defaultArguments).filter((arg) => Job.GLUE_RESERVED_ARGUMENTS.has(arg)
|
|
425
|
+
|| (this._managedArgumentKeys.has(arg)
|
|
426
|
+
&& !(Object.hasOwn(this._managedArguments, arg) && defaultArguments[arg] === this._managedArguments[arg])));
|
|
427
|
+
if (conflicts.length > 0) {
|
|
428
|
+
throw new cdk.ValidationError((0, helpers_internal_1.lit) `ManagedJobArgument`, `the job argument(s) ${JSON.stringify(conflicts)} are managed by the construct or reserved by Glue; configure them through the corresponding props (e.g. continuousLogging, enableMetrics, enableObservabilityMetrics, sparkUI) instead of defaultArguments`, this);
|
|
429
|
+
}
|
|
252
430
|
}
|
|
253
431
|
(0, secret_detection_1.warnOnPlaintextSecrets)(this, defaultArguments, '@aws-cdk/aws-glue-alpha:plaintextJobArgumentSecret', 'Pass secrets to the job at runtime through AWS Secrets Manager instead of embedding them in `defaultArguments`.');
|
|
254
|
-
return defaultArguments;
|
|
432
|
+
return { ...defaultArguments, ...this._managedArguments };
|
|
255
433
|
}
|
|
256
434
|
/**
|
|
257
|
-
*
|
|
258
|
-
*
|
|
435
|
+
* Register (and, when enabled, emit) the continuous-logging arguments this job manages.
|
|
436
|
+
*
|
|
437
|
+
* All five continuous-logging keys are reserved on every job type regardless of configuration:
|
|
438
|
+
* they are always registered through {@link setManagedArgument}, and carry a value only when
|
|
439
|
+
* logging is enabled. This keeps `defaultArguments` from re-enabling logging a user turned off.
|
|
440
|
+
*
|
|
441
|
+
* @param role The IAM role to grant write access to a custom log group, if one is provided
|
|
259
442
|
* @param props The properties for continuous logging configuration
|
|
260
|
-
* @
|
|
443
|
+
* @param securityConfiguration The security configuration attached to the job, if any
|
|
261
444
|
*/
|
|
262
|
-
setupContinuousLogging(role, props) {
|
|
445
|
+
setupContinuousLogging(role, props, securityConfiguration) {
|
|
263
446
|
try {
|
|
447
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.Job#setupContinuousLogging", "");
|
|
264
448
|
jsiiDeprecationWarnings._aws_cdk_aws_glue_alpha_ContinuousLoggingProps(props);
|
|
449
|
+
jsiiDeprecationWarnings._aws_cdk_aws_glue_alpha_ISecurityConfiguration(securityConfiguration);
|
|
265
450
|
}
|
|
266
451
|
catch (error) {
|
|
267
452
|
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
@@ -269,32 +454,28 @@ class Job extends JobBase {
|
|
|
269
454
|
}
|
|
270
455
|
throw error;
|
|
271
456
|
}
|
|
272
|
-
//
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
//
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
args['--enable-continuous-log-filter'] = 'true';
|
|
282
|
-
}
|
|
283
|
-
// If the developer provided a log group, add its name to the args and update the role.
|
|
284
|
-
if (props?.logGroup) {
|
|
285
|
-
args['--continuous-log-logGroup'] = props.logGroup.logGroupName;
|
|
286
|
-
props.logGroup.grantWrite(role);
|
|
287
|
-
}
|
|
288
|
-
if (props?.logStreamPrefix) {
|
|
289
|
-
args['--continuous-log-logStreamPrefix'] = props.logStreamPrefix;
|
|
290
|
-
}
|
|
291
|
-
if (props?.conversionPattern) {
|
|
292
|
-
args['--continuous-log-conversionPattern'] = props.conversionPattern;
|
|
457
|
+
// Continuous logging is on unless the developer has explicitly disabled it.
|
|
458
|
+
const enabled = !(props && !props.enabled);
|
|
459
|
+
// When logging is on, the logs are written to an unencrypted CloudWatch log group unless a
|
|
460
|
+
// SecurityConfiguration is attached. We cannot introspect whether the attached
|
|
461
|
+
// SecurityConfiguration actually configures cloudWatchEncryption (the ISecurityConfiguration
|
|
462
|
+
// interface only exposes the name), so we only warn when none is attached at all to avoid
|
|
463
|
+
// false positives.
|
|
464
|
+
if (enabled && !securityConfiguration) {
|
|
465
|
+
cdk.Annotations.of(this).addWarningV2('@aws-cdk/aws-glue-alpha:unencryptedContinuousLogging', 'Continuous CloudWatch logging is enabled but no SecurityConfiguration with cloudWatchEncryption is attached. Job stdout and stderr will be written to an unencrypted CloudWatch log group. See https://docs.aws.amazon.com/glue/latest/dg/encryption-security-configuration.html');
|
|
293
466
|
}
|
|
294
|
-
|
|
467
|
+
// A custom log group is only wired up (and only granted write) when logging is enabled.
|
|
468
|
+
const logGroup = enabled ? props?.logGroup : undefined;
|
|
469
|
+
logGroup?.grantWrite(role);
|
|
470
|
+
this.setManagedArgument('--enable-continuous-cloudwatch-log', enabled ? 'true' : undefined);
|
|
471
|
+
this.setManagedArgument('--enable-continuous-log-filter', enabled && props?.quiet ? 'true' : undefined);
|
|
472
|
+
this.setManagedArgument('--continuous-log-logGroup', logGroup?.logGroupName);
|
|
473
|
+
this.setManagedArgument('--continuous-log-logStreamPrefix', enabled ? props?.logStreamPrefix : undefined);
|
|
474
|
+
this.setManagedArgument('--continuous-log-conversionPattern', enabled ? props?.conversionPattern : undefined);
|
|
295
475
|
}
|
|
296
476
|
codeS3ObjectUrl(code) {
|
|
297
477
|
try {
|
|
478
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.Job#codeS3ObjectUrl", "");
|
|
298
479
|
jsiiDeprecationWarnings._aws_cdk_aws_glue_alpha_Code(code);
|
|
299
480
|
}
|
|
300
481
|
catch (error) {
|
|
@@ -325,4 +506,4 @@ function metricRule(rule, props) {
|
|
|
325
506
|
...props,
|
|
326
507
|
}).attachTo(rule);
|
|
327
508
|
}
|
|
328
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdUVBQXlEO0FBQ3pELCtEQUFpRDtBQUNqRCx5REFBMkM7QUFFM0Msc0RBQXdDO0FBQ3hDLDRFQUE0RDtBQUs1RCw0Q0FBd0M7QUFDeEMsa0VBQXFFO0FBcUhyRTs7Ozs7O0dBTUc7QUFDSCxNQUFzQixPQUFRLFNBQVEsR0FBRyxDQUFDLFFBQVE7O0lBS2hEOzs7Ozs7Ozs7O09BVUc7SUFDSSxPQUFPLENBQUMsRUFBVSxFQUFFLFVBQWlDLEVBQUU7UUFDNUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUNuQixNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUM7WUFDcEIsVUFBVSxFQUFFLENBQUMsdUJBQXVCLEVBQUUscUJBQXFCLENBQUM7WUFDNUQsTUFBTSxFQUFFO2dCQUNOLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7YUFDeEI7U0FDRixDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQ7Ozs7OztPQU1HO0lBQ08sYUFBYSxDQUFDLEVBQVUsRUFBRSxRQUFrQixFQUFFLFVBQWlDLEVBQUU7Ozs7Ozs7Ozs7UUFDekYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDNUIsV0FBVyxFQUFFLGdDQUFnQyxJQUFJLENBQUMsT0FBTyxVQUFVLFFBQVEsUUFBUTtZQUNuRixHQUFHLE9BQU87U0FDWCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ25C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QyxHQUFHO1FBQy9CLEdBQUcsS0FBSztLQUNULENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNsb3Vkd2F0Y2ggZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0ICogYXMgZXZlbnRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHR5cGUgKiBhcyBsb2dzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHR5cGUgKiBhcyBjb25zdHJ1Y3RzIGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBDb2RlIH0gZnJvbSAnLi4vY29kZSc7XG5pbXBvcnQgdHlwZSB7IElDb25uZWN0aW9uIH0gZnJvbSAnLi4vY29ubmVjdGlvbic7XG5pbXBvcnQgdHlwZSB7IE1ldHJpY1R5cGUsIEdsdWVWZXJzaW9uIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEpvYlN0YXRlIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHdhcm5PblBsYWludGV4dFNlY3JldHMgfSBmcm9tICcuLi9wcml2YXRlL3NlY3JldC1kZXRlY3Rpb24nO1xuaW1wb3J0IHR5cGUgeyBJU2VjdXJpdHlDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vc2VjdXJpdHktY29uZmlndXJhdGlvbic7XG5cbi8qKlxuICogSW50ZXJmYWNlIHJlcHJlc2VudGluZyBhIG5ldyBvciBhbiBpbXBvcnRlZCBHbHVlIEpvYlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElKb2IgZXh0ZW5kcyBjZGsuSVJlc291cmNlLCBpYW0uSUdyYW50YWJsZSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgam9iLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBqb2JOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGpvYi5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgam9iQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBDbG91ZFdhdGNoIGV2ZW50IHJ1bGUgdHJpZ2dlcmVkIHdoZW4gc29tZXRoaW5nIGhhcHBlbnMgd2l0aCB0aGlzIGpvYi5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvZXZlbnRzL0V2ZW50VHlwZXMuaHRtbCNnbHVlLWV2ZW50LXR5cGVzXG4gICAqL1xuICBvbkV2ZW50KGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBldmVudHMuT25FdmVudE9wdGlvbnMpOiBldmVudHMuUnVsZTtcblxuICAvKipcbiAgICogRGVmaW5lcyBhIENsb3VkV2F0Y2ggZXZlbnQgcnVsZSB0cmlnZ2VyZWQgd2hlbiB0aGlzIGpvYiBtb3ZlcyB0byB0aGUgU1VDQ0VFREVEIHN0YXRlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9ldmVudHMvRXZlbnRUeXBlcy5odG1sI2dsdWUtZXZlbnQtdHlwZXNcbiAgICovXG4gIG9uU3VjY2VzcyhpZDogc3RyaW5nLCBvcHRpb25zPzogZXZlbnRzLk9uRXZlbnRPcHRpb25zKTogZXZlbnRzLlJ1bGU7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBDbG91ZFdhdGNoIGV2ZW50IHJ1bGUgdHJpZ2dlcmVkIHdoZW4gdGhpcyBqb2IgbW92ZXMgdG8gdGhlIEZBSUxFRCBzdGF0ZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvZXZlbnRzL0V2ZW50VHlwZXMuaHRtbCNnbHVlLWV2ZW50LXR5cGVzXG4gICAqL1xuICBvbkZhaWx1cmUoaWQ6IHN0cmluZywgb3B0aW9ucz86IGV2ZW50cy5PbkV2ZW50T3B0aW9ucyk6IGV2ZW50cy5SdWxlO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgQ2xvdWRXYXRjaCBldmVudCBydWxlIHRyaWdnZXJlZCB3aGVuIHRoaXMgam9iIG1vdmVzIHRvIHRoZSBUSU1FT1VUIHN0YXRlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9ldmVudHMvRXZlbnRUeXBlcy5odG1sI2dsdWUtZXZlbnQtdHlwZXNcbiAgICovXG4gIG9uVGltZW91dChpZDogc3RyaW5nLCBvcHRpb25zPzogZXZlbnRzLk9uRXZlbnRPcHRpb25zKTogZXZlbnRzLlJ1bGU7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIENsb3VkV2F0Y2ggbWV0cmljLlxuICAgKlxuICAgKiBAcGFyYW0gbWV0cmljTmFtZSBuYW1lIG9mIHRoZSBtZXRyaWMgdHlwaWNhbGx5IHByZWZpeGVkIHdpdGggYGdsdWUuZHJpdmVyLmAsIGBnbHVlLjxleGVjdXRvcklkPi5gIG9yIGBnbHVlLkFMTC5gLlxuICAgKiBAcGFyYW0gdHlwZSB0aGUgbWV0cmljIHR5cGUuXG4gICAqIEBwYXJhbSBwcm9wcyBtZXRyaWMgb3B0aW9ucy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2x1ZS9sYXRlc3QvZGcvbW9uaXRvcmluZy1hd3NnbHVlLXdpdGgtY2xvdWR3YXRjaC1tZXRyaWNzLmh0bWxcbiAgICovXG4gIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIHR5cGU6IE1ldHJpY1R5cGUsIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIENsb3VkV2F0Y2ggTWV0cmljIGluZGljYXRpbmcgam9iIHN1Y2Nlc3MuXG4gICAqL1xuICBtZXRyaWNTdWNjZXNzKHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIENsb3VkV2F0Y2ggTWV0cmljIGluZGljYXRpbmcgam9iIGZhaWx1cmUuXG4gICAqL1xuICBtZXRyaWNGYWlsdXJlKHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIENsb3VkV2F0Y2ggTWV0cmljIGluZGljYXRpbmcgam9iIHRpbWVvdXQuXG4gICAqL1xuICBtZXRyaWNUaW1lb3V0KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgZW5hYmxpbmcgQ29udGludW91cyBMb2dnaW5nIGZvciBHbHVlIEpvYnMuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2x1ZS9sYXRlc3QvZGcvbW9uaXRvci1jb250aW51b3VzLWxvZ2dpbmctZW5hYmxlLmh0bWxcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dsdWUvbGF0ZXN0L2RnL2F3cy1nbHVlLXByb2dyYW1taW5nLWV0bC1nbHVlLWFyZ3VtZW50cy5odG1sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGludW91c0xvZ2dpbmdQcm9wcyB7XG4gIC8qKlxuICAgKiBFbmFibGUgY29udGludW91cyBsb2dnaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmeSBhIGN1c3RvbSBDbG91ZFdhdGNoIGxvZyBncm91cCBuYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgbG9nIGdyb3VwIGlzIGNyZWF0ZWQgd2l0aCBuYW1lIGAvYXdzLWdsdWUvam9icy9sb2dzLXYyL2AuXG4gICAqL1xuICByZWFkb25seSBsb2dHcm91cD86IGxvZ3MuSUxvZ0dyb3VwO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGEgY3VzdG9tIENsb3VkV2F0Y2ggbG9nIHN0cmVhbSBwcmVmaXguXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIGpvYiBydW4gSUQuXG4gICAqL1xuICByZWFkb25seSBsb2dTdHJlYW1QcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbHRlciBvdXQgbm9uLXVzZWZ1bCBBcGFjaGUgU3BhcmsgZHJpdmVyL2V4ZWN1dG9yIGFuZCBBcGFjaGUgSGFkb29wIFlBUk4gaGVhcnRiZWF0IGxvZyBtZXNzYWdlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBcHBseSB0aGUgcHJvdmlkZWQgY29udmVyc2lvbiBwYXR0ZXJuLlxuICAgKlxuICAgKiBUaGlzIGlzIGEgTG9nNGogQ29udmVyc2lvbiBQYXR0ZXJuIHRvIGN1c3RvbWl6ZSBkcml2ZXIgYW5kIGV4ZWN1dG9yIGxvZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAlZHt5eS9NTS9kZCBISDptbTpzc30gJXAgJWN7MX06ICVtJW5gXG4gICAqL1xuICByZWFkb25seSBjb252ZXJzaW9uUGF0dGVybj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgaXMgbmVlZGVkIHRvIGJlIGFibGUgdG8gaW1wb3J0IGV4aXN0aW5nIEpvYnMgaW50byBhIENESyBhcHAgdG9cbiAqIHJlZmVyZW5jZSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHN0YWNrIG9yIGNvbnN0cnVjdC4gSm9iQmFzZSBoYXMgdGhlIHN1YnNldFxuICogb2YgYXR0cmlidXRlcyByZXF1aXJlZCB0byBpZGVudGlmeSBhbmQgcmVmZXJlbmNlIGFuIGV4aXN0aW5nIEdsdWUgSm9iLFxuICogYXMgd2VsbCBhcyBzb21lIENsb3VkV2F0Y2ggbWV0cmljIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byBjb25maWd1cmUgYW5cbiAqIGV2ZW50LWRyaXZlbiBmbG93IHVzaW5nIHRoZSBqb2IuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBKb2JCYXNlIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSUpvYiB7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBqb2JBcm46IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGpvYk5hbWU6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgQ2xvdWRXYXRjaCBFdmVudCBSdWxlIGZvciB0aGlzIEdsdWUgSm9iIHdoZW4gaXQncyBpbiBhIGdpdmVuIHN0YXRlXG4gICAqXG4gICAqIEBwYXJhbSBpZCBjb25zdHJ1Y3QgaWRcbiAgICogQHBhcmFtIG9wdGlvbnMgZXZlbnQgb3B0aW9ucy4gTm90ZSB0aGF0IHNvbWUgdmFsdWVzIGFyZSBvdmVycmlkZGVuIGlmIHByb3ZpZGVkLCB0aGVzZSBhcmVcbiAgICogIC0gZXZlbnRQYXR0ZXJuLnNvdXJjZSA9IFsnYXdzLmdsdWUnXVxuICAgKiAgLSBldmVudFBhdHRlcm4uZGV0YWlsVHlwZSA9IFsnR2x1ZSBKb2IgU3RhdGUgQ2hhbmdlJywgJ0dsdWUgSm9iIFJ1biBTdGF0dXMnXVxuICAgKiAgLSBldmVudFBhdHRlcm4uZGV0YWlsLmpvYk5hbWUgPSBbdGhpcy5qb2JOYW1lXVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9ldmVudHMvRXZlbnRUeXBlcy5odG1sI2dsdWUtZXZlbnQtdHlwZXNcbiAgICovXG4gIHB1YmxpYyBvbkV2ZW50KGlkOiBzdHJpbmcsIG9wdGlvbnM6IGV2ZW50cy5PbkV2ZW50T3B0aW9ucyA9IHt9KTogZXZlbnRzLlJ1bGUge1xuICAgIGNvbnN0IHJ1bGUgPSBuZXcgZXZlbnRzLlJ1bGUodGhpcywgaWQsIG9wdGlvbnMpO1xuICAgIHJ1bGUuYWRkVGFyZ2V0KG9wdGlvbnMudGFyZ2V0KTtcbiAgICBydWxlLmFkZEV2ZW50UGF0dGVybih7XG4gICAgICBzb3VyY2U6IFsnYXdzLmdsdWUnXSxcbiAgICAgIGRldGFpbFR5cGU6IFsnR2x1ZSBKb2IgU3RhdGUgQ2hhbmdlJywgJ0dsdWUgSm9iIFJ1biBTdGF0dXMnXSxcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBqb2JOYW1lOiBbdGhpcy5qb2JOYW1lXSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgQ2xvdWRXYXRjaCBFdmVudCBSdWxlIGZvciB0aGUgdHJhbnNpdGlvbiBpbnRvIHRoZSBpbnB1dCBqb2JTdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIGlkIGNvbnN0cnVjdCBpZC5cbiAgICogQHBhcmFtIGpvYlN0YXRlIHRoZSBqb2Igc3RhdGUuXG4gICAqIEBwYXJhbSBvcHRpb25zIG9wdGlvbmFsIGV2ZW50IG9wdGlvbnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgb25TdGF0ZUNoYW5nZShpZDogc3RyaW5nLCBqb2JTdGF0ZTogSm9iU3RhdGUsIG9wdGlvbnM6IGV2ZW50cy5PbkV2ZW50T3B0aW9ucyA9IHt9KTogZXZlbnRzLlJ1bGUge1xuICAgIGNvbnN0IHJ1bGUgPSB0aGlzLm9uRXZlbnQoaWQsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBgUnVsZSB0cmlnZ2VyZWQgd2hlbiBHbHVlIGpvYiAke3RoaXMuam9iTmFtZX0gaXMgaW4gJHtqb2JTdGF0ZX0gc3RhdGVgLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgICBydWxlLmFkZEV2ZW50UGF0dGVybih7XG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgc3RhdGU6IFtqb2JTdGF0ZV0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIENsb3VkV2F0Y2ggRXZlbnQgUnVsZSBtYXRjaGluZyBKb2JTdGF0ZS5TVUNDRUVERUQuXG4gICAqXG4gICAqIEBwYXJhbSBpZCBjb25zdHJ1Y3QgaWQuXG4gICAqIEBwYXJhbSBvcHRpb25zIG9wdGlvbmFsIGV2ZW50IG9wdGlvbnMuIGRlZmF1bHQgaXMge30uXG4gICAqL1xuICBwdWJsaWMgb25TdWNjZXNzKGlkOiBzdHJpbmcsIG9wdGlvbnM6IGV2ZW50cy5PbkV2ZW50T3B0aW9ucyA9IHt9KTogZXZlbnRzLlJ1bGUge1xuICAgIHJldHVybiB0aGlzLm9uU3RhdGVDaGFuZ2UoaWQsIEpvYlN0YXRlLlNVQ0NFRURFRCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgQ2xvdWRXYXRjaCBFdmVudCBSdWxlIG1hdGNoaW5nIEZBSUxFRCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIGlkIGNvbnN0cnVjdCBpZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgb3B0aW9uYWwgZXZlbnQgb3B0aW9ucy4gZGVmYXVsdCBpcyB7fS5cbiAgICovXG4gIHB1YmxpYyBvbkZhaWx1cmUoaWQ6IHN0cmluZywgb3B0aW9uczogZXZlbnRzLk9uRXZlbnRPcHRpb25zID0ge30pOiBldmVudHMuUnVsZSB7XG4gICAgcmV0dXJuIHRoaXMub25TdGF0ZUNoYW5nZShpZCwgSm9iU3RhdGUuRkFJTEVELCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBDbG91ZFdhdGNoIEV2ZW50IFJ1bGUgbWF0Y2hpbmcgVElNRU9VVCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIGlkIGNvbnN0cnVjdCBpZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgb3B0aW9uYWwgZXZlbnQgb3B0aW9ucy4gZGVmYXVsdCBpcyB7fS5cbiAgICovXG4gIHB1YmxpYyBvblRpbWVvdXQoaWQ6IHN0cmluZywgb3B0aW9uczogZXZlbnRzLk9uRXZlbnRPcHRpb25zID0ge30pOiBldmVudHMuUnVsZSB7XG4gICAgcmV0dXJuIHRoaXMub25TdGF0ZUNoYW5nZShpZCwgSm9iU3RhdGUuVElNRU9VVCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgQ2xvdWRXYXRjaCBtZXRyaWMuXG4gICAqXG4gICAqIEBwYXJhbSBtZXRyaWNOYW1lIG5hbWUgb2YgdGhlIG1ldHJpYyB0eXBpY2FsbHkgcHJlZml4ZWQgd2l0aCBgZ2x1ZS5kcml2ZXIuYCwgYGdsdWUuPGV4ZWN1dG9ySWQ+LmAgb3IgYGdsdWUuQUxMLmAuXG4gICAqIEBwYXJhbSB0eXBlIHRoZSBtZXRyaWMgdHlwZS5cbiAgICogQHBhcmFtIHByb3BzIG1ldHJpYyBvcHRpb25zLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC9kZy9tb25pdG9yaW5nLWF3c2dsdWUtd2l0aC1jbG91ZHdhdGNoLW1ldHJpY3MuaHRtbFxuICAgKi9cbiAgcHVibGljIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIHR5cGU6IE1ldHJpY1R5cGUsIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIG5hbWVzcGFjZTogJ0dsdWUnLFxuICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICBKb2JOYW1lOiB0aGlzLmpvYk5hbWUsXG4gICAgICAgIEpvYlJ1bklkOiAnQUxMJyxcbiAgICAgICAgVHlwZTogdHlwZSxcbiAgICAgIH0sXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KS5hdHRhY2hUbyh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBDbG91ZFdhdGNoIE1ldHJpYyBpbmRpY2F0aW5nIGpvYiBzdWNjZXNzLlxuICAgKlxuICAgKiBUaGlzIG1ldHJpYyBpcyBiYXNlZCBvbiB0aGUgUnVsZSByZXR1cm5lZCBieSBuby1hcmdzIG9uU3VjY2VzcygpIGNhbGwuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljU3VjY2Vzcyhwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gbWV0cmljUnVsZSh0aGlzLm1ldHJpY0pvYlN0YXRlUnVsZSgnU3VjY2Vzc01ldHJpY1J1bGUnLCBKb2JTdGF0ZS5TVUNDRUVERUQpLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgQ2xvdWRXYXRjaCBNZXRyaWMgaW5kaWNhdGluZyBqb2IgZmFpbHVyZS5cbiAgICpcbiAgICogVGhpcyBtZXRyaWMgaXMgYmFzZWQgb24gdGhlIFJ1bGUgcmV0dXJuZWQgYnkgbm8tYXJncyBvbkZhaWx1cmUoKSBjYWxsLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0ZhaWx1cmUocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIG1ldHJpY1J1bGUodGhpcy5tZXRyaWNKb2JTdGF0ZVJ1bGUoJ0ZhaWx1cmVNZXRyaWNSdWxlJywgSm9iU3RhdGUuRkFJTEVEKSwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIENsb3VkV2F0Y2ggTWV0cmljIGluZGljYXRpbmcgam9iIHRpbWVvdXQuXG4gICAqXG4gICAqIFRoaXMgbWV0cmljIGlzIGJhc2VkIG9uIHRoZSBSdWxlIHJldHVybmVkIGJ5IG5vLWFyZ3Mgb25UaW1lb3V0KCkgY2FsbC5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNUaW1lb3V0KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiBtZXRyaWNSdWxlKHRoaXMubWV0cmljSm9iU3RhdGVSdWxlKCdUaW1lb3V0TWV0cmljUnVsZScsIEpvYlN0YXRlLlRJTUVPVVQpLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBvciByZXRyaWV2ZXMgYSBzaW5nbGV0b24gZXZlbnQgcnVsZSBmb3IgdGhlIGlucHV0IGpvYiBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIG1ldHJpYyBKb2JTdGF0ZSBtZXRob2RzLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgY29uc3RydWN0IGlkLlxuICAgKiBAcGFyYW0gam9iU3RhdGUgdGhlIGpvYiBzdGF0ZS5cbiAgICovXG4gIHByaXZhdGUgbWV0cmljSm9iU3RhdGVSdWxlKGlkOiBzdHJpbmcsIGpvYlN0YXRlOiBKb2JTdGF0ZSk6IGV2ZW50cy5SdWxlIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlLnRyeUZpbmRDaGlsZChpZCkgYXMgZXZlbnRzLlJ1bGUgPz8gdGhpcy5vblN0YXRlQ2hhbmdlKGlkLCBqb2JTdGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgam9iIGFyblxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkSm9iQXJuKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgam9iTmFtZTogc3RyaW5nKSA6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdnbHVlJyxcbiAgICAgIHJlc291cmNlOiAnam9iJyxcbiAgICAgIHJlc291cmNlTmFtZTogam9iTmFtZSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgc3Vic2V0IG9mIEpvYiBhdHRyaWJ1dGVzIGFyZSByZXF1aXJlZCBmb3IgaW1wb3J0aW5nIGFuIGV4aXN0aW5nIGpvYlxuICogaW50byBhIENESyBwcm9qZWN0LiBUaGlzIGlzIG9ubHkgdXNlZCB3aGVuIHVzaW5nIGZyb21Kb2JBdHRyaWJ1dGVzXG4gKiB0byBpZGVudGlmeSBhbmQgcmVmZXJlbmNlIHRoZSBleGlzdGluZyBqb2IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgam9iLlxuICAgKi9cbiAgcmVhZG9ubHkgam9iTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgYXNzdW1lZCBieSBHbHVlIHRvIHJ1biB0aGlzIGpvYi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG5cbn1cblxuLyoqXG4gKiBKb2JQcm9wcyB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIG5ldyBHbHVlIEpvYnMgdXNpbmcgdGhpcyBMMiBDb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iUHJvcHMge1xuICAvKipcbiAgICogU2NyaXB0IENvZGUgTG9jYXRpb24gKHJlcXVpcmVkKVxuICAgKiBTY3JpcHQgdG8gcnVuIHdoZW4gdGhlIEdsdWUgam9iIGV4ZWN1dGVzLiBDYW4gYmUgdXBsb2FkZWRcbiAgICogZnJvbSB0aGUgbG9jYWwgZGlyZWN0b3J5IHN0cnVjdHVyZSB1c2luZyBmcm9tQXNzZXRcbiAgICogb3IgcmVmZXJlbmNlZCB2aWEgUzMgbG9jYXRpb24gdXNpbmcgZnJvbUJ1Y2tldFxuICAgKi9cbiAgcmVhZG9ubHkgc2NyaXB0OiBDb2RlO1xuXG4gIC8qKlxuICAgKiBJQU0gUm9sZSAocmVxdWlyZWQpXG4gICAqIElBTSBSb2xlIHRvIHVzZSBmb3IgR2x1ZSBqb2IgZXhlY3V0aW9uXG4gICAqIE11c3QgYmUgc3BlY2lmaWVkIGJ5IHRoZSBkZXZlbG9wZXIgYmVjYXVzZSB0aGUgTDIgZG9lc24ndCBoYXZlIHZpc2liaWxpdHlcbiAgICogaW50byB0aGUgYWN0aW9ucyB0aGUgc2NyaXB0KHMpIHRha2VzIGR1cmluZyB0aGUgam9iIGV4ZWN1dGlvblxuICAgKiBUaGUgcm9sZSBtdXN0IHRydXN0IHRoZSBHbHVlIHNlcnZpY2UgcHJpbmNpcGFsIChnbHVlLmFtYXpvbmF3cy5jb20pXG4gICAqIGFuZCBiZSBncmFudGVkIHN1ZmZpY2llbnQgcGVybWlzc2lvbnMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dsdWUvbGF0ZXN0L2RnL2dldHRpbmctc3RhcnRlZC1hY2Nlc3MuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZTogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBHbHVlIGpvYiAob3B0aW9uYWwpXG4gICAqIERldmVsb3Blci1zcGVjaWZpZWQgbmFtZSBvZiB0aGUgR2x1ZSBqb2JcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIG5hbWUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGpvYk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlc2NyaXB0aW9uIChvcHRpb25hbClcbiAgICogRGV2ZWxvcGVyLXNwZWNpZmllZCBkZXNjcmlwdGlvbiBvZiB0aGUgR2x1ZSBqb2JcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyB2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1heCBDb25jdXJyZW50IFJ1bnMgKG9wdGlvbmFsKVxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcnVucyB0aGlzIEdsdWUgam9iIGNhbiBjb25jdXJyZW50bHkgcnVuXG4gICAqXG4gICAqIEFuIGVycm9yIGlzIHJldHVybmVkIHdoZW4gdGhpcyB0aHJlc2hvbGQgaXMgcmVhY2hlZC4gVGhlIG1heGltdW0gdmFsdWVcbiAgICogeW91IGNhbiBzcGVjaWZ5IGlzIGNvbnRyb2xsZWQgYnkgYSBzZXJ2aWNlIGxpbWl0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICByZWFkb25seSBtYXhDb25jdXJyZW50UnVucz86IG51bWJlcjtcblxuICAvKipcbiAgICogRGVmYXVsdCBBcmd1bWVudHMgKG9wdGlvbmFsKVxuICAgKiBUaGUgZGVmYXVsdCBhcmd1bWVudHMgZm9yIGV2ZXJ5IHJ1biBvZiB0aGlzIEdsdWUgam9iLFxuICAgKiBzcGVjaWZpZWQgYXMgbmFtZS12YWx1ZSBwYWlycy5cbiAgICpcbiAgICogVGhlc2UgYXJlIGVtaXR0ZWQgdmVyYmF0aW0gaW50byB0aGUgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUsIHNvIGF2b2lkXG4gICAqIHBsYWNpbmcgc2VjcmV0cyBoZXJlIGluIHBsYWludGV4dC4gUGFzcyBzZWNyZXRzIHRvIHRoZSBqb2IgYXQgcnVudGltZVxuICAgKiB0aHJvdWdoIEFXUyBTZWNyZXRzIE1hbmFnZXIgaW5zdGVhZC4gQSBzeW50aGVzaXMtdGltZSB3YXJuaW5nIGlzIGVtaXR0ZWRcbiAgICogd2hlbiBhbiBhcmd1bWVudCBrZXkgbG9va3MgbGlrZSBhIGNyZWRlbnRpYWwgYW5kIGhvbGRzIGEgcGxhaW50ZXh0IGxpdGVyYWwuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dsdWUvbGF0ZXN0L2RnL2F3cy1nbHVlLXByb2dyYW1taW5nLWV0bC1nbHVlLWFyZ3VtZW50cy5odG1sXG4gICAqIGZvciBhIGxpc3Qgb2YgcmVzZXJ2ZWQgcGFyYW1ldGVyc1xuICAgKiBAZGVmYXVsdCAtIG5vIGFyZ3VtZW50c1xuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEFyZ3VtZW50cz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIENvbm5lY3Rpb25zIChvcHRpb25hbClcbiAgICogTGlzdCBvZiBjb25uZWN0aW9ucyB0byB1c2UgZm9yIHRoaXMgR2x1ZSBqb2JcbiAgICogQ29ubmVjdGlvbnMgYXJlIHVzZWQgdG8gY29ubmVjdCB0byBvdGhlciBBV1MgU2VydmljZSBvciByZXNvdXJjZXMgd2l0aGluIGEgVlBDLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbXSAtIG5vIGNvbm5lY3Rpb25zIGFyZSBhZGRlZCB0byB0aGUgam9iXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0aW9ucz86IElDb25uZWN0aW9uW107XG5cbiAgLyoqXG4gICAqIE1heCBSZXRyaWVzIChvcHRpb25hbClcbiAgICogTWF4aW11bSBudW1iZXIgb2YgcmV0cnkgYXR0ZW1wdHMgR2x1ZSBwZXJmb3JtcyBpZiB0aGUgam9iIGZhaWxzXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHJlYWRvbmx5IG1heFJldHJpZXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgKG9wdGlvbmFsKVxuICAgKiBUaGUgbWF4aW11bSB0aW1lIHRoYXQgYSBqb2IgcnVuIGNhbiBjb25zdW1lIHJlc291cmNlcyBiZWZvcmUgaXQgaXNcbiAgICogdGVybWluYXRlZCBhbmQgZW50ZXJzIFRJTUVPVVQgc3RhdHVzLiBTcGVjaWZpZWQgaW4gbWludXRlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgMjg4MCAoMiBkYXlzIGZvciBub24tc3RyZWFtaW5nKVxuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IGNkay5EdXJhdGlvbjtcblxuICAvKipcbiAgICogU2VjdXJpdHkgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpXG4gICAqIERlZmluZXMgdGhlIGVuY3J5cHRpb24gb3B0aW9ucyBmb3IgdGhlIEdsdWUgam9iXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc2VjdXJpdHkgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5Q29uZmlndXJhdGlvbj86IElTZWN1cml0eUNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRhZ3MgKG9wdGlvbmFsKVxuICAgKiBBIGxpc3Qgb2Yga2V5OnZhbHVlIHBhaXJzIG9mIHRhZ3MgdG8gYXBwbHkgdG8gdGhpcyBHbHVlIGpvYiByZXNvdXJjZXNcbiAgICpcbiAgICogQGRlZmF1bHQge30gLSBubyB0YWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogR2x1ZSBWZXJzaW9uXG4gICAqIFRoZSB2ZXJzaW9uIG9mIEdsdWUgdG8gdXNlIHRvIGV4ZWN1dGUgdGhpcyBqb2JcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZXRlcm1pbmVkIGJ5IHRoZSBqb2IgdHlwZTogNC4wIGZvciBFVEwgYW5kIFN0cmVhbWluZywgNS4wIGZvciBGbGV4LCAzLjAgZm9yIFB5dGhvbiBTaGVsbFxuICAgKi9cbiAgcmVhZG9ubHkgZ2x1ZVZlcnNpb24/OiBHbHVlVmVyc2lvbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBjb250aW51b3VzIGxvZ2dpbmcgd2l0aCB0aGUgc3BlY2lmaWVkIHByb3BzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGNvbnRpbnVvdXMgbG9nZ2luZyBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC9kZy9tb25pdG9yLWNvbnRpbnVvdXMtbG9nZ2luZy1lbmFibGUuaHRtbFxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC9kZy9hd3MtZ2x1ZS1wcm9ncmFtbWluZy1ldGwtZ2x1ZS1hcmd1bWVudHMuaHRtbFxuICAgKiovXG4gIHJlYWRvbmx5IGNvbnRpbnVvdXNMb2dnaW5nPzogQ29udGludW91c0xvZ2dpbmdQcm9wcztcbn1cblxuLyoqXG4gKiBBIEdsdWUgSm9iLlxuICogQHJlc291cmNlIEFXUzo6R2x1ZTo6Sm9iXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBKb2IgZXh0ZW5kcyBKb2JCYXNlIHtcbiAgLyoqXG4gICAqIElkZW50aWZpZXMgYW4gZXhpc3RpbmcgR2x1ZSBKb2IgZnJvbSBhIHN1YnNldCBvZiBhdHRyaWJ1dGVzIHRoYXQgY2FuXG4gICAqIGJlIHJlZmVyZW5jZWQgZnJvbSB3aXRoaW4gYW5vdGhlciBTdGFjayBvciBDb25zdHJ1Y3QuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgY3JlYXRpbmcgY29uc3RydWN0ICh1c3VhbGx5IGB0aGlzYClcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBpZC5cbiAgICogQHBhcmFtIGF0dHJzIEF0dHJpYnV0ZXMgZm9yIHRoZSBHbHVlIEpvYiB3ZSB3YW50IHRvIGltcG9ydFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tSm9iQXR0cmlidXRlcyhzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBKb2JBdHRyaWJ1dGVzKTogSUpvYiB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgSm9iQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgam9iTmFtZSA9IGF0dHJzLmpvYk5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgam9iQXJuID0gdGhpcy5idWlsZEpvYkFybihzY29wZSwgYXR0cnMuam9iTmFtZSk7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWwgPSBhdHRycy5yb2xlID8/IG5ldyBpYW0uVW5rbm93blByaW5jaXBhbCh7IHJlc291cmNlOiB0aGlzIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIEdsdWUgYXNzdW1lcyB0byBydW4gdGhpcyBqb2IuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWJzdHJhY3Qgcm9sZTogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBDaGVjayBubyB1c2FnZSBvZiByZXNlcnZlZCBhcmd1bWVudHMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dsdWUvbGF0ZXN0L2RnL2F3cy1nbHVlLXByb2dyYW1taW5nLWV0bC1nbHVlLWFyZ3VtZW50cy5odG1sXG4gICAqL1xuICBwcm90ZWN0ZWQgY2hlY2tOb1Jlc2VydmVkQXJncyhkZWZhdWx0QXJndW1lbnRzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgIGlmIChkZWZhdWx0QXJndW1lbnRzKSB7XG4gICAgICBjb25zdCByZXNlcnZlZEFyZ3MgPSBuZXcgU2V0KFsnLS1kZWJ1ZycsICctLW1vZGUnLCAnLS1KT0JfTkFNRSddKTtcbiAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRBcmd1bWVudHMpLmZvckVhY2goKGFyZykgPT4ge1xuICAgICAgICBpZiAocmVzZXJ2ZWRBcmdzLmhhcyhhcmcpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IobGl0YFJlc2VydmVkQXJndW1lbnRVc2VkYCwgYFRoZSAke2FyZ30gYXJndW1lbnQgaXMgcmVzZXJ2ZWQgYnkgR2x1ZS4gRG9uJ3Qgc2V0IGl0YCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB3YXJuT25QbGFpbnRleHRTZWNyZXRzKFxuICAgICAgdGhpcyxcbiAgICAgIGRlZmF1bHRBcmd1bWVudHMsXG4gICAgICAnQGF3cy1jZGsvYXdzLWdsdWUtYWxwaGE6cGxhaW50ZXh0Sm9iQXJndW1lbnRTZWNyZXQnLFxuICAgICAgJ1Bhc3Mgc2VjcmV0cyB0byB0aGUgam9iIGF0IHJ1bnRpbWUgdGhyb3VnaCBBV1MgU2VjcmV0cyBNYW5hZ2VyIGluc3RlYWQgb2YgZW1iZWRkaW5nIHRoZW0gaW4gYGRlZmF1bHRBcmd1bWVudHNgLicsXG4gICAgKTtcbiAgICByZXR1cm4gZGVmYXVsdEFyZ3VtZW50cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR1cCBDb250aW51b3VzIExvZ2dpbmcgUHJvcGVydGllc1xuICAgKiBAcGFyYW0gcm9sZSBUaGUgSUFNIHJvbGUgdG8gdXNlIGZvciBjb250aW51b3VzIGxvZ2dpbmdcbiAgICogQHBhcmFtIHByb3BzIFRoZSBwcm9wZXJ0aWVzIGZvciBjb250aW51b3VzIGxvZ2dpbmcgY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJucyBTdHJpbmcgY29udGFpbmluZyB0aGUgYXJncyBmb3IgdGhlIGNvbnRpbnVvdXMgbG9nZ2luZyBjb21tYW5kXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0dXBDb250aW51b3VzTG9nZ2luZyhyb2xlOiBpYW0uSVJvbGUsIHByb3BzOiBDb250aW51b3VzTG9nZ2luZ1Byb3BzIHwgdW5kZWZpbmVkKSA6IGFueSB7XG4gICAgLy8gSWYgdGhlIGRldmVsb3BlciBoYXMgZXhwbGljaXRseSBkaXNhYmxlZCBjb250aW51b3VzIGxvZ2dpbmcgcmV0dXJuIG5vIGFyZ3NcbiAgICBpZiAocHJvcHMgJiYgIXByb3BzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvLyBFbHNlIHdlIHR1cm4gb24gY29udGludW91cyBsb2dnaW5nIGJ5IGRlZmF1bHQuIERldGVybWluZSB3aGF0IGxvZyBncm91cCB0byB1c2UuXG4gICAgY29uc3QgYXJnczoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7XG4gICAgICAnLS1lbmFibGUtY29udGludW91cy1jbG91ZHdhdGNoLWxvZyc6ICd0cnVlJyxcbiAgICB9O1xuXG4gICAgaWYgKHByb3BzPy5xdWlldCkge1xuICAgICAgYXJnc1snLS1lbmFibGUtY29udGludW91cy1sb2ctZmlsdGVyJ10gPSAndHJ1ZSc7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGRldmVsb3BlciBwcm92aWRlZCBhIGxvZyBncm91cCwgYWRkIGl0cyBuYW1lIHRvIHRoZSBhcmdzIGFuZCB1cGRhdGUgdGhlIHJvbGUuXG4gICAgaWYgKHByb3BzPy5sb2dHcm91cCkge1xuICAgICAgYXJnc1snLS1jb250aW51b3VzLWxvZy1sb2dHcm91cCddID0gcHJvcHMubG9nR3JvdXAubG9nR3JvdXBOYW1lO1xuICAgICAgcHJvcHMubG9nR3JvdXAuZ3JhbnRXcml0ZShyb2xlKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHM/LmxvZ1N0cmVhbVByZWZpeCkge1xuICAgICAgYXJnc1snLS1jb250aW51b3VzLWxvZy1sb2dTdHJlYW1QcmVmaXgnXSA9IHByb3BzLmxvZ1N0cmVhbVByZWZpeDtcbiAgICB9XG5cbiAgICBpZiAocHJvcHM/LmNvbnZlcnNpb25QYXR0ZXJuKSB7XG4gICAgICBhcmdzWyctLWNvbnRpbnVvdXMtbG9nLWNvbnZlcnNpb25QYXR0ZXJuJ10gPSBwcm9wcy5jb252ZXJzaW9uUGF0dGVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncztcbiAgfVxuXG4gIHByb3RlY3RlZCBjb2RlUzNPYmplY3RVcmwoY29kZTogQ29kZSkge1xuICAgIGNvbnN0IHMzTG9jYXRpb24gPSBjb2RlLmJpbmQodGhpcywgdGhpcy5yb2xlKS5zM0xvY2F0aW9uO1xuICAgIHJldHVybiBgczM6Ly8ke3MzTG9jYXRpb24uYnVja2V0TmFtZX0vJHtzM0xvY2F0aW9uLm9iamVjdEtleX1gO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgQ2xvdWRXYXRjaCBNZXRyaWMgdGhhdCdzIGJhc2VkIG9uIEdsdWUgSm9iIGV2ZW50c1xuICoge0BzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L2V2ZW50cy9FdmVudFR5cGVzLmh0bWwjZ2x1ZS1ldmVudC10eXBlc31cbiAqIFRoZSBtZXRyaWMgaGFzIG5hbWVzcGFjZSA9ICdBV1MvRXZlbnRzJywgbWV0cmljTmFtZSA9ICdUcmlnZ2VyZWRSdWxlcycgYW5kIFJ1bGVOYW1lID0gcnVsZS5ydWxlTmFtZSBkaW1lbnNpb24uXG4gKlxuICogQHBhcmFtIHJ1bGUgZm9yIHVzZSBpbiBzZXR0aW5nIFJ1bGVOYW1lIGRpbWVuc2lvbiB2YWx1ZVxuICogQHBhcmFtIHByb3BzIG1ldHJpYyBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1ldHJpY1J1bGUocnVsZTogZXZlbnRzLklSdWxlLCBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgcmV0dXJuIG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgbmFtZXNwYWNlOiAnQVdTL0V2ZW50cycsXG4gICAgbWV0cmljTmFtZTogJ1RyaWdnZXJlZFJ1bGVzJyxcbiAgICBkaW1lbnNpb25zTWFwOiB7IFJ1bGVOYW1lOiBydWxlLnJ1bGVOYW1lIH0sXG4gICAgc3RhdGlzdGljOiBjbG91ZHdhdGNoLlN0YXRzLlNVTSxcbiAgICAuLi5wcm9wcyxcbiAgfSkuYXR0YWNoVG8ocnVsZSk7XG59XG5cbiJdfQ==
|
|
509
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdUVBQXlEO0FBQ3pELCtEQUFpRDtBQUVqRCx5REFBMkM7QUFFM0Msc0RBQXdDO0FBQ3hDLDRFQUE0RDtBQUs1RCw0Q0FBd0M7QUFDeEMsa0VBQXFFO0FBcUhyRTs7Ozs7O0dBTUc7QUFDSCxNQUFzQixPQUFRLFNBQVEsR0FBRyxDQUFDLFFBQVE7O0lBS2hEOztPQUVHO0lBQ0gsSUFBVyxNQUFNOzs7Ozs7Ozs7O1FBQ2YsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDbEM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksT0FBTyxDQUFDLEVBQVUsRUFBRSxVQUFpQyxFQUFFOzs7Ozs7Ozs7O1FBQzVELE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDbkIsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDO1lBQ3BCLFVBQVUsRUFBRSxDQUFDLHVCQUF1QixFQUFFLHFCQUFxQixDQUFDO1lBQzVELE1BQU0sRUFBRTtnQkFDTixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQ3hCO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVEOzs7Ozs7T0FNRztJQUNPLGFBQWEsQ0FBQyxFQUFVLEVBQUUsUUFBa0IsRUFBRSxVQUFpQyxFQUFFOzs7Ozs7Ozs7OztRQUN6RixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUM1QixXQUFXLEVB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QyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUMvRztJQUVTLGVBQWUsQ0FBQyxJQUFVOzs7Ozs7Ozs7OztRQUNsQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQ3pELE9BQU8sUUFBUSxVQUFVLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztLQUNoRTs7QUE3S0gsa0JBOEtDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsVUFBVSxDQUFDLElBQWtCLEVBQUUsS0FBZ0M7SUFDdEUsT0FBTyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDM0IsU0FBUyxFQUFFLFlBQVk7UUFDdkIsVUFBVSxFQUFFLGdCQUFnQjtRQUM1QixhQUFhLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUMxQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHO1FBQy9CLEdBQUcsS0FBSztLQUNULENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNsb3Vkd2F0Y2ggZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0ICogYXMgZXZlbnRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0IHR5cGUgeyBJSm9iUmVmLCBKb2JSZWZlcmVuY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ2x1ZSc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgdHlwZSAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgbGl0IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgdHlwZSAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IENvZGUgfSBmcm9tICcuLi9jb2RlJztcbmltcG9ydCB0eXBlIHsgSUNvbm5lY3Rpb24gfSBmcm9tICcuLi9jb25uZWN0aW9uJztcbmltcG9ydCB0eXBlIHsgTWV0cmljVHlwZSwgR2x1ZVZlcnNpb24gfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgSm9iU3RhdGUgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgd2Fybk9uUGxhaW50ZXh0U2VjcmV0cyB9IGZyb20gJy4uL3ByaXZhdGUvc2VjcmV0LWRldGVjdGlvbic7XG5pbXBvcnQgdHlwZSB7IElTZWN1cml0eUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9zZWN1cml0eS1jb25maWd1cmF0aW9uJztcblxuLyoqXG4gKiBJbnRlcmZhY2UgcmVwcmVzZW50aW5nIGEgbmV3IG9yIGFuIGltcG9ydGVkIEdsdWUgSm9iXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUpvYiBleHRlbmRzIGNkay5JUmVzb3VyY2UsIGlhbS5JR3JhbnRhYmxlLCBJSm9iUmVmIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBqb2IuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGpvYk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgam9iLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBqb2JBcm46IHN0cmluZztcblxuICAvKipcbiAgICogRGVmaW5lcyBhIENsb3VkV2F0Y2ggZXZlbnQgcnVsZSB0cmlnZ2VyZWQgd2hlbiBzb21ldGhpbmcgaGFwcGVucyB3aXRoIHRoaXMgam9iLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9ldmVudHMvRXZlbnRUeXBlcy5odG1sI2dsdWUtZXZlbnQtdHlwZXNcbiAgICovXG4gIG9uRXZlbnQoaWQ6IHN0cmluZywgb3B0aW9ucz86IGV2ZW50cy5PbkV2ZW50T3B0aW9ucyk6IGV2ZW50cy5SdWxlO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgQ2xvdWRXYXRjaCBldmVudCBydWxlIHRyaWdnZXJlZCB3aGVuIHRoaXMgam9iIG1vdmVzIHRvIHRoZSBTVUNDRUVERUQgc3RhdGUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L2V2ZW50cy9FdmVudFR5cGVzLmh0bWwjZ2x1ZS1ldmVudC10eXBlc1xuICAgKi9cbiAgb25TdWNjZXNzKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBldmVudHMuT25FdmVudE9wdGlvbnMpOiBldmVudHMuUnVsZTtcblxuICAvKipcbiAgICogRGVmaW5lcyBhIENsb3VkV2F0Y2ggZXZlbnQgcnVsZSB0cmlnZ2VyZWQgd2hlbiB0aGlzIGpvYiBtb3ZlcyB0byB0aGUgRkFJTEVEIHN0YXRlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9ldmVudHMvRXZlbnRUeXBlcy5odG1sI2dsdWUtZXZlbnQtdHlwZXNcbiAgICovXG4gIG9uRmFpbHVyZShpZDogc3RyaW5nLCBvcHRpb25zPzogZXZlbnRzLk9uRXZlbnRPcHRpb25zKTogZXZlbnRzLlJ1bGU7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBDbG91ZFdhdGNoIGV2ZW50IHJ1bGUgdHJpZ2dlcmVkIHdoZW4gdGhpcyBqb2IgbW92ZXMgdG8gdGhlIFRJTUVPVVQgc3RhdGUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L2V2ZW50cy9FdmVudFR5cGVzLmh0bWwjZ2x1ZS1ldmVudC10eXBlc1xuICAgKi9cbiAgb25UaW1lb3V0KGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBldmVudHMuT25FdmVudE9wdGlvbnMpOiBldmVudHMuUnVsZTtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgQ2xvdWRXYXRjaCBtZXRyaWMuXG4gICAqXG4gICAqIEBwYXJhbSBtZXRyaWNOYW1lIG5hbWUgb2YgdGhlIG1ldHJpYyB0eXBpY2FsbHkgcHJlZml4ZWQgd2l0aCBgZ2x1ZS5kcml2ZXIuYCwgYGdsdWUuPGV4ZWN1dG9ySWQ+LmAgb3IgYGdsdWUuQUxMLmAuXG4gICAqIEBwYXJhbSB0eXBlIHRoZSBtZXRyaWMgdHlwZS5cbiAgICogQHBhcmFtIHByb3BzIG1ldHJpYyBvcHRpb25zLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC9kZy9tb25pdG9yaW5nLWF3c2dsdWUtd2l0aC1jbG91ZHdhdGNoLW1ldHJpY3MuaHRtbFxuICAgKi9cbiAgbWV0cmljKG1ldHJpY05hbWU6IHN0cmluZywgdHlwZTogTWV0cmljVHlwZSwgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcblxuICAvKipcbiAgICogQ3JlYXRlIGEgQ2xvdWRXYXRjaCBNZXRyaWMgaW5kaWNhdGluZyBqb2Igc3VjY2Vzcy5cbiAgICovXG4gIG1ldHJpY1N1Y2Nlc3MocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcblxuICAvKipcbiAgICogQ3JlYXRlIGEgQ2xvdWRXYXRjaCBNZXRyaWMgaW5kaWNhdGluZyBqb2IgZmFpbHVyZS5cbiAgICovXG4gIG1ldHJpY0ZhaWx1cmUocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcblxuICAvKipcbiAgICogQ3JlYXRlIGEgQ2xvdWRXYXRjaCBNZXRyaWMgaW5kaWNhdGluZyBqb2IgdGltZW91dC5cbiAgICovXG4gIG1ldHJpY1RpbWVvdXQocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBlbmFibGluZyBDb250aW51b3VzIExvZ2dpbmcgZm9yIEdsdWUgSm9icy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC9kZy9tb25pdG9yLWNvbnRpbnVvdXMtbG9nZ2luZy1lbmFibGUuaHRtbFxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2x1ZS9sYXRlc3QvZGcvYXdzLWdsdWUtcHJvZ3JhbW1pbmctZXRsLWdsdWUtYXJndW1lbnRzLmh0bWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250aW51b3VzTG9nZ2luZ1Byb3BzIHtcbiAgLyoqXG4gICAqIEVuYWJsZSBjb250aW51b3VzIGxvZ2dpbmcuXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGEgY3VzdG9tIENsb3VkV2F0Y2ggbG9nIGdyb3VwIG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYSBsb2cgZ3JvdXAgaXMgY3JlYXRlZCB3aXRoIG5hbWUgYC9hd3MtZ2x1ZS9qb2JzL2xvZ3MtdjIvYC5cbiAgICovXG4gIHJlYWRvbmx5IGxvZ0dyb3VwPzogbG9ncy5JTG9nR3JvdXA7XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgYSBjdXN0b20gQ2xvdWRXYXRjaCBsb2cgc3RyZWFtIHByZWZpeC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgam9iIHJ1biBJRC5cbiAgICovXG4gIHJlYWRvbmx5IGxvZ1N0cmVhbVByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogRmlsdGVyIG91dCBub24tdXNlZnVsIEFwYWNoZSBTcGFyayBkcml2ZXIvZXhlY3V0b3IgYW5kIEFwYWNoZSBIYWRvb3AgWUFSTiBoZWFydGJlYXQgbG9nIG1lc3NhZ2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFwcGx5IHRoZSBwcm92aWRlZCBjb252ZXJzaW9uIHBhdHRlcm4uXG4gICAqXG4gICAqIFRoaXMgaXMgYSBMb2c0aiBDb252ZXJzaW9uIFBhdHRlcm4gdG8gY3VzdG9taXplIGRyaXZlciBhbmQgZXhlY3V0b3IgbG9ncy5cbiAgICpcbiAgICogQGRlZmF1bHQgYCVke3l5L01NL2RkIEhIOm1tOnNzfSAlcCAlY3sxfTogJW0lbmBcbiAgICovXG4gIHJlYWRvbmx5IGNvbnZlcnNpb25QYXR0ZXJuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgYmFzZSBjbGFzcyBpcyBuZWVkZWQgdG8gYmUgYWJsZSB0byBpbXBvcnQgZXhpc3RpbmcgSm9icyBpbnRvIGEgQ0RLIGFwcCB0b1xuICogcmVmZXJlbmNlIGFzIHBhcnQgb2YgYSBsYXJnZXIgc3RhY2sgb3IgY29uc3RydWN0LiBKb2JCYXNlIGhhcyB0aGUgc3Vic2V0XG4gKiBvZiBhdHRyaWJ1dGVzIHJlcXVpcmVkIHRvIGlkZW50aWZ5IGFuZCByZWZlcmVuY2UgYW4gZXhpc3RpbmcgR2x1ZSBKb2IsXG4gKiBhcyB3ZWxsIGFzIHNvbWUgQ2xvdWRXYXRjaCBtZXRyaWMgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIGNvbmZpZ3VyZSBhblxuICogZXZlbnQtZHJpdmVuIGZsb3cgdXNpbmcgdGhlIGpvYi5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEpvYkJhc2UgZXh0ZW5kcyBjZGsuUmVzb3VyY2UgaW1wbGVtZW50cyBJSm9iIHtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGpvYkFybjogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgam9iTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWw6IGlhbS5JUHJpbmNpcGFsO1xuXG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0byB0aGlzIEpvYiByZXNvdXJjZSwgZm9yIHVzZSB3aXRoIHRoZSBnZW5lcmF0ZWQgTDEgcmVmIGludGVyZmFjZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgam9iUmVmKCk6IEpvYlJlZmVyZW5jZSB7XG4gICAgcmV0dXJuIHsgam9iTmFtZTogdGhpcy5qb2JOYW1lIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgQ2xvdWRXYXRjaCBFdmVudCBSdWxlIGZvciB0aGlzIEdsdWUgSm9iIHdoZW4gaXQncyBpbiBhIGdpdmVuIHN0YXRlXG4gICAqXG4gICAqIEBwYXJhbSBpZCBjb25zdHJ1Y3QgaWRcbiAgICogQHBhcmFtIG9wdGlvbnMgZXZlbnQgb3B0aW9ucy4gTm90ZSB0aGF0IHNvbWUgdmFsdWVzIGFyZSBvdmVycmlkZGVuIGlmIHByb3ZpZGVkLCB0aGVzZSBhcmVcbiAgICogIC0gZXZlbnRQYXR0ZXJuLnNvdXJjZSA9IFsnYXdzLmdsdWUnXVxuICAgKiAgLSBldmVudFBhdHRlcm4uZGV0YWlsVHlwZSA9IFsnR2x1ZSBKb2IgU3RhdGUgQ2hhbmdlJywgJ0dsdWUgSm9iIFJ1biBTdGF0dXMnXVxuICAgKiAgLSBldmVudFBhdHRlcm4uZGV0YWlsLmpvYk5hbWUgPSBbdGhpcy5qb2JOYW1lXVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9ldmVudHMvRXZlbnRUeXBlcy5odG1sI2dsdWUtZXZlbnQtdHlwZXNcbiAgICovXG4gIHB1YmxpYyBvbkV2ZW50KGlkOiBzdHJpbmcsIG9wdGlvbnM6IGV2ZW50cy5PbkV2ZW50T3B0aW9ucyA9IHt9KTogZXZlbnRzLlJ1bGUge1xuICAgIGNvbnN0IHJ1bGUgPSBuZXcgZXZlbnRzLlJ1bGUodGhpcywgaWQsIG9wdGlvbnMpO1xuICAgIHJ1bGUuYWRkVGFyZ2V0KG9wdGlvbnMudGFyZ2V0KTtcbiAgICBydWxlLmFkZEV2ZW50UGF0dGVybih7XG4gICAgICBzb3VyY2U6IFsnYXdzLmdsdWUnXSxcbiAgICAgIGRldGFpbFR5cGU6IFsnR2x1ZSBKb2IgU3RhdGUgQ2hhbmdlJywgJ0dsdWUgSm9iIFJ1biBTdGF0dXMnXSxcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBqb2JOYW1lOiBbdGhpcy5qb2JOYW1lXSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgQ2xvdWRXYXRjaCBFdmVudCBSdWxlIGZvciB0aGUgdHJhbnNpdGlvbiBpbnRvIHRoZSBpbnB1dCBqb2JTdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIGlkIGNvbnN0cnVjdCBpZC5cbiAgICogQHBhcmFtIGpvYlN0YXRlIHRoZSBqb2Igc3RhdGUuXG4gICAqIEBwYXJhbSBvcHRpb25zIG9wdGlvbmFsIGV2ZW50IG9wdGlvbnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgb25TdGF0ZUNoYW5nZShpZDogc3RyaW5nLCBqb2JTdGF0ZTogSm9iU3RhdGUsIG9wdGlvbnM6IGV2ZW50cy5PbkV2ZW50T3B0aW9ucyA9IHt9KTogZXZlbnRzLlJ1bGUge1xuICAgIGNvbnN0IHJ1bGUgPSB0aGlzLm9uRXZlbnQoaWQsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBgUnVsZSB0cmlnZ2VyZWQgd2hlbiBHbHVlIGpvYiAke3RoaXMuam9iTmFtZX0gaXMgaW4gJHtqb2JTdGF0ZX0gc3RhdGVgLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgICBydWxlLmFkZEV2ZW50UGF0dGVybih7XG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgc3RhdGU6IFtqb2JTdGF0ZV0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIENsb3VkV2F0Y2ggRXZlbnQgUnVsZSBtYXRjaGluZyBKb2JTdGF0ZS5TVUNDRUVERUQuXG4gICAqXG4gICAqIEBwYXJhbSBpZCBjb25zdHJ1Y3QgaWQuXG4gICAqIEBwYXJhbSBvcHRpb25zIG9wdGlvbmFsIGV2ZW50IG9wdGlvbnMuIGRlZmF1bHQgaXMge30uXG4gICAqL1xuICBwdWJsaWMgb25TdWNjZXNzKGlkOiBzdHJpbmcsIG9wdGlvbnM6IGV2ZW50cy5PbkV2ZW50T3B0aW9ucyA9IHt9KTogZXZlbnRzLlJ1bGUge1xuICAgIHJldHVybiB0aGlzLm9uU3RhdGVDaGFuZ2UoaWQsIEpvYlN0YXRlLlNVQ0NFRURFRCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgQ2xvdWRXYXRjaCBFdmVudCBSdWxlIG1hdGNoaW5nIEZBSUxFRCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIGlkIGNvbnN0cnVjdCBpZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgb3B0aW9uYWwgZXZlbnQgb3B0aW9ucy4gZGVmYXVsdCBpcyB7fS5cbiAgICovXG4gIHB1YmxpYyBvbkZhaWx1cmUoaWQ6IHN0cmluZywgb3B0aW9uczogZXZlbnRzLk9uRXZlbnRPcHRpb25zID0ge30pOiBldmVudHMuUnVsZSB7XG4gICAgcmV0dXJuIHRoaXMub25TdGF0ZUNoYW5nZShpZCwgSm9iU3RhdGUuRkFJTEVELCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBDbG91ZFdhdGNoIEV2ZW50IFJ1bGUgbWF0Y2hpbmcgVElNRU9VVCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIGlkIGNvbnN0cnVjdCBpZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgb3B0aW9uYWwgZXZlbnQgb3B0aW9ucy4gZGVmYXVsdCBpcyB7fS5cbiAgICovXG4gIHB1YmxpYyBvblRpbWVvdXQoaWQ6IHN0cmluZywgb3B0aW9uczogZXZlbnRzLk9uRXZlbnRPcHRpb25zID0ge30pOiBldmVudHMuUnVsZSB7XG4gICAgcmV0dXJuIHRoaXMub25TdGF0ZUNoYW5nZShpZCwgSm9iU3RhdGUuVElNRU9VVCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgQ2xvdWRXYXRjaCBtZXRyaWMuXG4gICAqXG4gICAqIEBwYXJhbSBtZXRyaWNOYW1lIG5hbWUgb2YgdGhlIG1ldHJpYyB0eXBpY2FsbHkgcHJlZml4ZWQgd2l0aCBgZ2x1ZS5kcml2ZXIuYCwgYGdsdWUuPGV4ZWN1dG9ySWQ+LmAgb3IgYGdsdWUuQUxMLmAuXG4gICAqIEBwYXJhbSB0eXBlIHRoZSBtZXRyaWMgdHlwZS5cbiAgICogQHBhcmFtIHByb3BzIG1ldHJpYyBvcHRpb25zLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC9kZy9tb25pdG9yaW5nLWF3c2dsdWUtd2l0aC1jbG91ZHdhdGNoLW1ldHJpY3MuaHRtbFxuICAgKi9cbiAgcHVibGljIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIHR5cGU6IE1ldHJpY1R5cGUsIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIG5hbWVzcGFjZTogJ0dsdWUnLFxuICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICBKb2JOYW1lOiB0aGlzLmpvYk5hbWUsXG4gICAgICAgIEpvYlJ1bklkOiAnQUxMJyxcbiAgICAgICAgVHlwZTogdHlwZSxcbiAgICAgIH0sXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KS5hdHRhY2hUbyh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBDbG91ZFdhdGNoIE1ldHJpYyBpbmRpY2F0aW5nIGpvYiBzdWNjZXNzLlxuICAgKlxuICAgKiBUaGlzIG1ldHJpYyBpcyBiYXNlZCBvbiB0aGUgUnVsZSByZXR1cm5lZCBieSBuby1hcmdzIG9uU3VjY2VzcygpIGNhbGwuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljU3VjY2Vzcyhwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gbWV0cmljUnVsZSh0aGlzLm1ldHJpY0pvYlN0YXRlUnVsZSgnU3VjY2Vzc01ldHJpY1J1bGUnLCBKb2JTdGF0ZS5TVUNDRUVERUQpLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgQ2xvdWRXYXRjaCBNZXRyaWMgaW5kaWNhdGluZyBqb2IgZmFpbHVyZS5cbiAgICpcbiAgICogVGhpcyBtZXRyaWMgaXMgYmFzZWQgb24gdGhlIFJ1bGUgcmV0dXJuZWQgYnkgbm8tYXJncyBvbkZhaWx1cmUoKSBjYWxsLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0ZhaWx1cmUocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIG1ldHJpY1J1bGUodGhpcy5tZXRyaWNKb2JTdGF0ZVJ1bGUoJ0ZhaWx1cmVNZXRyaWNSdWxlJywgSm9iU3RhdGUuRkFJTEVEKSwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIENsb3VkV2F0Y2ggTWV0cmljIGluZGljYXRpbmcgam9iIHRpbWVvdXQuXG4gICAqXG4gICAqIFRoaXMgbWV0cmljIGlzIGJhc2VkIG9uIHRoZSBSdWxlIHJldHVybmVkIGJ5IG5vLWFyZ3Mgb25UaW1lb3V0KCkgY2FsbC5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNUaW1lb3V0KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiBtZXRyaWNSdWxlKHRoaXMubWV0cmljSm9iU3RhdGVSdWxlKCdUaW1lb3V0TWV0cmljUnVsZScsIEpvYlN0YXRlLlRJTUVPVVQpLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBvciByZXRyaWV2ZXMgYSBzaW5nbGV0b24gZXZlbnQgcnVsZSBmb3IgdGhlIGlucHV0IGpvYiBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIG1ldHJpYyBKb2JTdGF0ZSBtZXRob2RzLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgY29uc3RydWN0IGlkLlxuICAgKiBAcGFyYW0gam9iU3RhdGUgdGhlIGpvYiBzdGF0ZS5cbiAgICovXG4gIHByaXZhdGUgbWV0cmljSm9iU3RhdGVSdWxlKGlkOiBzdHJpbmcsIGpvYlN0YXRlOiBKb2JTdGF0ZSk6IGV2ZW50cy5SdWxlIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlLnRyeUZpbmRDaGlsZChpZCkgYXMgZXZlbnRzLlJ1bGUgPz8gdGhpcy5vblN0YXRlQ2hhbmdlKGlkLCBqb2JTdGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgam9iIGFyblxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkSm9iQXJuKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgam9iTmFtZTogc3RyaW5nKSA6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdnbHVlJyxcbiAgICAgIHJlc291cmNlOiAnam9iJyxcbiAgICAgIHJlc291cmNlTmFtZTogam9iTmFtZSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgc3Vic2V0IG9mIEpvYiBhdHRyaWJ1dGVzIGFyZSByZXF1aXJlZCBmb3IgaW1wb3J0aW5nIGFuIGV4aXN0aW5nIGpvYlxuICogaW50byBhIENESyBwcm9qZWN0LiBUaGlzIGlzIG9ubHkgdXNlZCB3aGVuIHVzaW5nIGZyb21Kb2JBdHRyaWJ1dGVzXG4gKiB0byBpZGVudGlmeSBhbmQgcmVmZXJlbmNlIHRoZSBleGlzdGluZyBqb2IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgam9iLlxuICAgKi9cbiAgcmVhZG9ubHkgam9iTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgYXNzdW1lZCBieSBHbHVlIHRvIHJ1biB0aGlzIGpvYi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG5cbn1cblxuLyoqXG4gKiBKb2JQcm9wcyB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIG5ldyBHbHVlIEpvYnMgdXNpbmcgdGhpcyBMMiBDb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iUHJvcHMge1xuICAvKipcbiAgICogU2NyaXB0IENvZGUgTG9jYXRpb24gKHJlcXVpcmVkKVxuICAgKiBTY3JpcHQgdG8gcnVuIHdoZW4gdGhlIEdsdWUgam9iIGV4ZWN1dGVzLiBDYW4gYmUgdXBsb2FkZWRcbiAgICogZnJvbSB0aGUgbG9jYWwgZGlyZWN0b3J5IHN0cnVjdHVyZSB1c2luZyBmcm9tQXNzZXRcbiAgICogb3IgcmVmZXJlbmNlZCB2aWEgUzMgbG9jYXRpb24gdXNpbmcgZnJvbUJ1Y2tldFxuICAgKi9cbiAgcmVhZG9ubHkgc2NyaXB0OiBDb2RlO1xuXG4gIC8qKlxuICAgKiBJQU0gUm9sZSAocmVxdWlyZWQpXG4gICAqIElBTSBSb2xlIHRvIHVzZSBmb3IgR2x1ZSBqb2IgZXhlY3V0aW9uXG4gICAqIE11c3QgYmUgc3BlY2lmaWVkIGJ5IHRoZSBkZXZlbG9wZXIgYmVjYXVzZSB0aGUgTDIgZG9lc24ndCBoYXZlIHZpc2liaWxpdHlcbiAgICogaW50byB0aGUgYWN0aW9ucyB0aGUgc2NyaXB0KHMpIHRha2VzIGR1cmluZyB0aGUgam9iIGV4ZWN1dGlvblxuICAgKiBUaGUgcm9sZSBtdXN0IHRydXN0IHRoZSBHbHVlIHNlcnZpY2UgcHJpbmNpcGFsIChnbHVlLmFtYXpvbmF3cy5jb20pXG4gICAqIGFuZCBiZSBncmFudGVkIHN1ZmZpY2llbnQgcGVybWlzc2lvbnMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dsdWUvbGF0ZXN0L2RnL2dldHRpbmctc3RhcnRlZC1hY2Nlc3MuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZTogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBHbHVlIGpvYiAob3B0aW9uYWwpXG4gICAqIERldmVsb3Blci1zcGVjaWZpZWQgbmFtZSBvZiB0aGUgR2x1ZSBqb2JcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIG5hbWUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGpvYk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlc2NyaXB0aW9uIChvcHRpb25hbClcbiAgICogRGV2ZWxvcGVyLXNwZWNpZmllZCBkZXNjcmlwdGlvbiBvZiB0aGUgR2x1ZSBqb2JcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyB2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1heCBDb25jdXJyZW50IFJ1bnMgKG9wdGlvbmFsKVxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcnVucyB0aGlzIEdsdWUgam9iIGNhbiBjb25jdXJyZW50bHkgcnVuXG4gICAqXG4gICAqIEFuIGVycm9yIGlzIHJldHVybmVkIHdoZW4gdGhpcyB0aHJlc2hvbGQgaXMgcmVhY2hlZC4gVGhlIG1heGltdW0gdmFsdWVcbiAgICogeW91IGNhbiBzcGVjaWZ5IGlzIGNvbnRyb2xsZWQgYnkgYSBzZXJ2aWNlIGxpbWl0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICByZWFkb25seSBtYXhDb25jdXJyZW50UnVucz86IG51bWJlcjtcblxuICAvKipcbiAgICogRGVmYXVsdCBBcmd1bWVudHMgKG9wdGlvbmFsKVxuICAgKiBUaGUgZGVmYXVsdCBhcmd1bWVudHMgZm9yIGV2ZXJ5IHJ1biBvZiB0aGlzIEdsdWUgam9iLFxuICAgKiBzcGVjaWZpZWQgYXMgbmFtZS12YWx1ZSBwYWlycy5cbiAgICpcbiAgICogVGhpcyBtYXAgaXMgdGhlIGVzY2FwZSBoYXRjaCBmb3IgR2x1ZSBqb2IgYXJndW1lbnRzIHRoYXQgdGhpcyBjb25zdHJ1Y3QgZG9lcyBub3QgbW9kZWwuIEl0XG4gICAqIE1VU1QgTk9UIGJlIHVzZWQgdG8gc2V0IGFyZ3VtZW50cyB0aGF0IGFscmVhZHkgaGF2ZSBhIGRlZGljYXRlZCBwcm9wIOKAlCBjb25maWd1cmUgdGhvc2UgdGhyb3VnaFxuICAgKiB0aGUgY29ycmVzcG9uZGluZyBwcm9wIGluc3RlYWQgKGBjb250aW51b3VzTG9nZ2luZ2AsIGBlbmFibGVNZXRyaWNzYCxcbiAgICogYGVuYWJsZU9ic2VydmFiaWxpdHlNZXRyaWNzYCwgYHNwYXJrVUlgLCBgY2xhc3NOYW1lYCwgYGV4dHJhSmFyc2AsIGBleHRyYUphcnNGaXJzdGAsXG4gICAqIGBleHRyYVB5dGhvbkZpbGVzYCwgYGV4dHJhRmlsZXNgKS4gUGFzc2luZyBhIGNvbnN0cnVjdC1tYW5hZ2VkIGFyZ3VtZW50IChlLmcuXG4gICAqIGAtLWVuYWJsZS1jb250aW51b3VzLWNsb3Vkd2F0Y2gtbG9nYCwgYC0tZW5hYmxlLW1ldHJpY3NgLCBgLS1lbmFibGUtc3BhcmstdWlgLFxuICAgKiBgLS1qb2ItbGFuZ3VhZ2VgKSBvciBhIEdsdWUtcmVzZXJ2ZWQgYXJndW1lbnQgKGAtLWRlYnVnYCwgYC0tbW9kZWAsIGAtLUpPQl9OQU1FYCwgYC0tZW5kcG9pbnRgKVxuICAgKiBoZXJlIHRocm93cyBhdCBzeW50aGVzaXMgdGltZSwgc28gdGhlcmUgaXMgZXhhY3RseSBvbmUgd2F5IHRvIGV4cHJlc3MgZWFjaCBpbnRlbnQuXG4gICAqXG4gICAqIEFsc28gbm90ZSB0aGF0IHRoZXNlIGFyZSBlbWl0dGVkIHZlcmJhdGltIGludG8gdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlLCBzbyBhdm9pZFxuICAgKiBwbGFjaW5nIHNlY3JldHMgaGVyZSBpbiBwbGFpbnRleHQuIFBhc3Mgc2VjcmV0cyB0byB0aGUgam9iIGF0IHJ1bnRpbWVcbiAgICogdGhyb3VnaCBBV1MgU2VjcmV0cyBNYW5hZ2VyIGluc3RlYWQuIEEgc3ludGhlc2lzLXRpbWUgd2FybmluZyBpcyBlbWl0dGVkXG4gICAqIHdoZW4gYW4gYXJndW1lbnQga2V5IGxvb2tzIGxpa2UgYSBjcmVkZW50aWFsIGFuZCBob2xkcyBhIHBsYWludGV4dCBsaXRlcmFsLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC9kZy9hd3MtZ2x1ZS1wcm9ncmFtbWluZy1ldGwtZ2x1ZS1hcmd1bWVudHMuaHRtbFxuICAgKiBmb3IgYSBsaXN0IG9mIHJlc2VydmVkIHBhcmFtZXRlcnNcbiAgICogQGRlZmF1bHQgLSBubyBhcmd1bWVudHNcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRBcmd1bWVudHM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBDb25uZWN0aW9ucyAob3B0aW9uYWwpXG4gICAqIExpc3Qgb2YgY29ubmVjdGlvbnMgdG8gdXNlIGZvciB0aGlzIEdsdWUgam9iXG4gICAqIENvbm5lY3Rpb25zIGFyZSB1c2VkIHRvIGNvbm5lY3QgdG8gb3RoZXIgQVdTIFNlcnZpY2Ugb3IgcmVzb3VyY2VzIHdpdGhpbiBhIFZQQy5cbiAgICpcbiAgICogQGRlZmF1bHQgW10gLSBubyBjb25uZWN0aW9ucyBhcmUgYWRkZWQgdG8gdGhlIGpvYlxuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGlvbnM/OiBJQ29ubmVjdGlvbltdO1xuXG4gIC8qKlxuICAgKiBNYXggUmV0cmllcyAob3B0aW9uYWwpXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHJldHJ5IGF0dGVtcHRzIEdsdWUgcGVyZm9ybXMgaWYgdGhlIGpvYiBmYWlsc1xuICAgKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICByZWFkb25seSBtYXhSZXRyaWVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaW1lb3V0IChvcHRpb25hbClcbiAgICogVGhlIG1heGltdW0gdGltZSB0aGF0IGEgam9iIHJ1biBjYW4gY29uc3VtZSByZXNvdXJjZXMgYmVmb3JlIGl0IGlzXG4gICAqIHRlcm1pbmF0ZWQgYW5kIGVudGVycyBUSU1FT1VUIHN0YXR1cy4gU3BlY2lmaWVkIGluIG1pbnV0ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IDI4ODAgKDIgZGF5cyBmb3Igbm9uLXN0cmVhbWluZylcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBjZGsuRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFNlY3VyaXR5IENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKVxuICAgKiBEZWZpbmVzIHRoZSBlbmNyeXB0aW9uIG9wdGlvbnMgZm9yIHRoZSBHbHVlIGpvYlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUNvbmZpZ3VyYXRpb24/OiBJU2VjdXJpdHlDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUYWdzIChvcHRpb25hbClcbiAgICogQSBsaXN0IG9mIGtleTp2YWx1ZSBwYWlycyBvZiB0YWdzIHRvIGFwcGx5IHRvIHRoaXMgR2x1ZSBqb2IgcmVzb3VyY2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9IC0gbm8gdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEdsdWUgVmVyc2lvblxuICAgKiBUaGUgdmVyc2lvbiBvZiBHbHVlIHRvIHVzZSB0byBleGVjdXRlIHRoaXMgam9iXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGV0ZXJtaW5lZCBieSB0aGUgam9iIHR5cGU6IDQuMCBmb3IgRVRMIGFuZCBTdHJlYW1pbmcsIDUuMCBmb3IgRmxleCwgMy4wIGZvciBQeXRob24gU2hlbGxcbiAgICovXG4gIHJlYWRvbmx5IGdsdWVWZXJzaW9uPzogR2x1ZVZlcnNpb247XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgY29udGludW91cyBsb2dnaW5nIHdpdGggdGhlIHNwZWNpZmllZCBwcm9wcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBjb250aW51b3VzIGxvZ2dpbmcgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2x1ZS9sYXRlc3QvZGcvbW9uaXRvci1jb250aW51b3VzLWxvZ2dpbmctZW5hYmxlLmh0bWxcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2x1ZS9sYXRlc3QvZGcvYXdzLWdsdWUtcHJvZ3JhbW1pbmctZXRsLWdsdWUtYXJndW1lbnRzLmh0bWxcbiAgICoqL1xuICByZWFkb25seSBjb250aW51b3VzTG9nZ2luZz86IENvbnRpbnVvdXNMb2dnaW5nUHJvcHM7XG59XG5cbi8qKlxuICogQSBHbHVlIEpvYi5cbiAqIEByZXNvdXJjZSBBV1M6OkdsdWU6OkpvYlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSm9iIGV4dGVuZHMgSm9iQmFzZSB7XG4gIC8qKlxuICAgKiBJZGVudGlmaWVzIGFuIGV4aXN0aW5nIEdsdWUgSm9iIGZyb20gYSBzdWJzZXQgb2YgYXR0cmlidXRlcyB0aGF0IGNhblxuICAgKiBiZSByZWZlcmVuY2VkIGZyb20gd2l0aGluIGFub3RoZXIgU3RhY2sgb3IgQ29uc3RydWN0LlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIGNyZWF0aW5nIGNvbnN0cnVjdCAodXN1YWxseSBgdGhpc2ApXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0J3MgaWQuXG4gICAqIEBwYXJhbSBhdHRycyBBdHRyaWJ1dGVzIGZvciB0aGUgR2x1ZSBKb2Igd2Ugd2FudCB0byBpbXBvcnRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUpvYkF0dHJpYnV0ZXMoc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogSm9iQXR0cmlidXRlcyk6IElKb2Ige1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIEpvYkJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGpvYk5hbWUgPSBhdHRycy5qb2JOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGpvYkFybiA9IHRoaXMuYnVpbGRKb2JBcm4oc2NvcGUsIGF0dHJzLmpvYk5hbWUpO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsID0gYXR0cnMucm9sZSA/PyBuZXcgaWFtLlVua25vd25QcmluY2lwYWwoeyByZXNvdXJjZTogdGhpcyB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFyZ3VtZW50IGtleXMgdGhhdCBHbHVlIHJlc2VydmVzIGZvciBpdHMgb3duIHVzZSBhbmQgdGhhdCBhIGNhbGxlciBtdXN0IG5ldmVyIHNldCB0aHJvdWdoXG4gICAqIGBkZWZhdWx0QXJndW1lbnRzYC4gVW5saWtlIGNvbnN0cnVjdC1tYW5hZ2VkIGFyZ3VtZW50cyAod2hpY2ggYXJlIGRlcml2ZWQgZnJvbSB3aGF0IGVhY2ggam9iXG4gICAqIGNsYXNzIGVtaXRzKSwgdGhlc2UgYXJlIG93bmVkIGJ5IHRoZSBHbHVlIHNlcnZpY2UgaXRzZWxmIGFuZCBhcmUgcmVzZXJ2ZWQgZm9yIGV2ZXJ5IGpvYiB0eXBlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC9kZy9hd3MtZ2x1ZS1wcm9ncmFtbWluZy1ldGwtZ2x1ZS1hcmd1bWVudHMuaHRtbFxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgR0xVRV9SRVNFUlZFRF9BUkdVTUVOVFMgPSBuZXcgU2V0KFsnLS1kZWJ1ZycsICctLW1vZGUnLCAnLS1KT0JfTkFNRScsICctLWVuZHBvaW50J10pO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgR2x1ZSBhc3N1bWVzIHRvIHJ1biB0aGlzIGpvYi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhYnN0cmFjdCByb2xlOiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25zdHJ1Y3QtbWFuYWdlZCBqb2IgYXJndW1lbnRzIHRoYXQgYXJlIGFjdHVhbGx5IGVtaXR0ZWQgZm9yIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sXG4gICAqIGFjY3VtdWxhdGVkIHZpYSB7QGxpbmsgc2V0TWFuYWdlZEFyZ3VtZW50fS4gUGFzc2VkIHRocm91Z2ggdG8gYENmbkpvYi5kZWZhdWx0QXJndW1lbnRzYCBhZnRlclxuICAgKiBiZWluZyBtZXJnZWQgd2l0aCB0aGUgdXNlci1zdXBwbGllZCBgZGVmYXVsdEFyZ3VtZW50c2AgYnkge0BsaW5rIG1lcmdlRGVmYXVsdEFyZ3VtZW50c30uXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5hZ2VkQXJndW1lbnRzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgLyoqXG4gICAqIEV2ZXJ5IGFyZ3VtZW50IGtleSB0aGlzIGNvbnN0cnVjdCBtYW5hZ2VzLCBhY2N1bXVsYXRlZCB2aWEge0BsaW5rIHNldE1hbmFnZWRBcmd1bWVudH0g4oCUIHdoZXRoZXJcbiAgICogb3Igbm90IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gZW1pdHMgYSB2YWx1ZSBmb3IgaXQuIFRoaXMgaXMgdGhlIHJlc2VydmVkIHNldCB0aGF0IGFcbiAgICogdXNlci1zdXBwbGllZCBgZGVmYXVsdEFyZ3VtZW50c2AgbXVzdCBub3QgY29sbGlkZSB3aXRoLiBSZWdpc3RlcmluZyBhIGtleSBldmVuIHdoZW4gaXRzIHZhbHVlXG4gICAqIGlzIGB1bmRlZmluZWRgIChmZWF0dXJlIGRpc2FibGVkIG9yIHVuc2V0KSBpcyB3aGF0IGtlZXBzIGBkZWZhdWx0QXJndW1lbnRzYCBmcm9tIHNpbGVudGx5XG4gICAqIHJlLWVuYWJsaW5nIGl0LlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuYWdlZEFyZ3VtZW50S2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIC8qKlxuICAgKiBEZWNsYXJlIGBrZXlgIGFzIGNvbnN0cnVjdC1tYW5hZ2VkIGFuZCwgd2hlbiBgdmFsdWVgIGlzIGRlZmluZWQsIGVtaXQgaXQgaW50byB0aGUgam9iJ3NcbiAgICogYXJndW1lbnRzLlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBzaW5nbGUgc2luayBmb3IgZXZlcnkgYXJndW1lbnQgYSBqb2IgY29uc3RydWN0IGRlcml2ZXMgZnJvbSBpdHMgdHlwZWQgcHJvcHMgKG9yXG4gICAqIGZyb20gdGhlIGpvYiBjbGFzcyBpdHNlbGYpLiBDYWxsIGl0IG9uY2UgcGVyIG1hbmFnZWQga2V5LCBwYXNzaW5nIGB1bmRlZmluZWRgIGFzIHRoZSB2YWx1ZSB3aGVuXG4gICAqIHRoZSBjb3JyZXNwb25kaW5nIGZlYXR1cmUgaXMgdHVybmVkIG9mZiBvciB1bnNldCDigJQgdGhlIGtleSBpcyBzdGlsbCByZXNlcnZlZCBmcm9tXG4gICAqIGBkZWZhdWx0QXJndW1lbnRzYCBlaXRoZXIgd2F5LCBzbyBhIGRpc2FibGVkIGZlYXR1cmUgY2Fubm90IGJlIHJlLWVuYWJsZWQgdGhyb3VnaCB0aGUgZXNjYXBlXG4gICAqIGhhdGNoLiBUaGVyZSBpcyBkZWxpYmVyYXRlbHkgbm8gb3RoZXIgd2F5IGZvciBhIHN1YmNsYXNzIHRvIGVtaXQgYSBtYW5hZ2VkIGFyZ3VtZW50LCBzbyB0aGVcbiAgICogcmVzZXJ2ZWQgc2V0IGNhbiBuZXZlciBkcmlmdCBmcm9tIHdoYXQgaXMgZW1pdHRlZC5cbiAgICpcbiAgICogQHBhcmFtIGtleSB0aGUgR2x1ZSBhcmd1bWVudCBrZXksIGUuZy4gYC0tZW5hYmxlLW1ldHJpY3NgXG4gICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gZW1pdCwgb3IgYHVuZGVmaW5lZGAgdG8gcmVzZXJ2ZSB0aGUga2V5IHdpdGhvdXQgZW1pdHRpbmcgaXRcbiAgICovXG4gIHByb3RlY3RlZCBzZXRNYW5hZ2VkQXJndW1lbnQoa2V5OiBzdHJpbmcsIHZhbHVlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fbWFuYWdlZEFyZ3VtZW50S2V5cy5hZGQoa2V5KTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fbWFuYWdlZEFyZ3VtZW50c1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIHRoZSBjdXN0b21lci1zdXBwbGllZCBgZGVmYXVsdEFyZ3VtZW50c2Agd2l0aCB0aGUgYXJndW1lbnRzIHRoaXMgY29uc3RydWN0IG1hbmFnZXMuXG4gICAqXG4gICAqIFRoZSBjb25zdHJ1Y3Qgb3ducyBldmVyeSBhcmd1bWVudCBpdCBlbWl0cyDigJQgd2hldGhlciB0aGUgdmFsdWUgY29tZXMgZnJvbSBhIGRlZGljYXRlZCB0eXBlZFxuICAgKiBwcm9wIChlLmcuIGBjb250aW51b3VzTG9nZ2luZ2AsIGBlbmFibGVNZXRyaWNzYCwgYHNwYXJrVUlgKSBvciBmcm9tIHRoZSBqb2IgY2xhc3MgaXRzZWxmXG4gICAqIChlLmcuIGAtLWpvYi1sYW5ndWFnZWApLiBUaG9zZSBhcmd1bWVudHMsIHBsdXMgdGhlIGFyZ3VtZW50cyBHbHVlIHJlc2VydmVzIGZvciBpdHMgb3duIHVzZSxcbiAgICogTVVTVCBiZSBjb25maWd1cmVkIHRocm91Z2ggdGhlaXIgZGVkaWNhdGVkIHByb3BzIHJhdGhlciB0aGFuIHRoZSB1bnR5cGVkIGBkZWZhdWx0QXJndW1lbnRzYFxuICAgKiBtYXAsIHNvIHRoZXJlIGlzIGV4YWN0bHkgb25lIHdheSB0byBleHByZXNzIGVhY2ggaW50ZW50LiBQYXNzaW5nIHN1Y2ggYSBrZXkgdGhyb3VnaFxuICAgKiBgZGVmYXVsdEFyZ3VtZW50c2AgdGhlcmVmb3JlIHRocm93cyBpbnN0ZWFkIG9mIHNpbGVudGx5IHdpbm5pbmcgb3IgYmVpbmcgc2lsZW50bHkgZHJvcHBlZC5cbiAgICpcbiAgICogQSBtYW5hZ2VkIGtleSB3aG9zZSBzdXBwbGllZCB2YWx1ZSBpcyBpZGVudGljYWwgdG8gdGhlIGNvbnN0cnVjdCdzIHZhbHVlIGlzIG5vdCBjb250cmFkaWN0b3J5LFxuICAgKiBzbyBpdCBpcyBhbGxvd2VkIHJhdGhlciB0aGFuIHJlamVjdGVkIChhdXRvLWNvcnJlY3RpbmcgY29uZmlnIGlzIHByZWZlcnJlZCBvdmVyIGVycm9ycykuXG4gICAqIEdsdWUtcmVzZXJ2ZWQga2V5cyBhcmUgbmV2ZXIgZW1pdHRlZCBieSB0aGUgY29uc3RydWN0LCBzbyB0aGVyZSBpcyBubyB2YWx1ZSB0byByZWNvbmNpbGUgYW5kXG4gICAqIHRoZXkgYWx3YXlzIHRocm93LlxuICAgKlxuICAgKiBUaGUgcmVzZXJ2ZWQgc2V0IGlzIGBfbWFuYWdlZEFyZ3VtZW50S2V5c2Ag4oCUIGV2ZXJ5IGtleSB0aGUgY29uc3RydWN0IGRlY2xhcmVkIHRocm91Z2hcbiAgICoge0BsaW5rIHNldE1hbmFnZWRBcmd1bWVudH0sIHdoZXRoZXIgb3Igbm90IGEgdmFsdWUgd2FzIGVtaXR0ZWQgZm9yIGl0LiBJdCBpcyBkZWxpYmVyYXRlbHkgTk9UXG4gICAqIGRlcml2ZWQgZnJvbSB0aGUga2V5cyB0aGF0IGNhcnJ5IGEgdmFsdWU6IGEgdHlwZWQgcHJvcCB0aGF0IHR1cm5zIGEgZmVhdHVyZSAqb2ZmKiAoZS5nLlxuICAgKiBgZW5hYmxlTWV0cmljczogZmFsc2VgKSBlbWl0cyBubyB2YWx1ZSBidXQgc3RpbGwgcmVzZXJ2ZXMgaXRzIGtleSwgc28gYGRlZmF1bHRBcmd1bWVudHNgIGNhbm5vdFxuICAgKiBzaWxlbnRseSByZS1lbmFibGUgaXQuXG4gICAqXG4gICAqIENvbmZsaWN0IGRldGVjdGlvbiByZWxpZXMgb24gc3RyaW5nIGVxdWFsaXR5IG9mIHRoZSBhcmd1bWVudCBrZXlzLCB3aGljaCBjYW5ub3Qgc2VlIHRocm91Z2hcbiAgICogdW5yZXNvbHZlZCB0b2tlbnMgKGUuZy4gYSBrZXkgcHJvZHVjZWQgYnkgYENmbkpzb25gIHRoYXQgb25seSByZXNvbHZlcyBhdCBkZXBsb3kgdGltZSkuIElmIGFcbiAgICoga2V5IGlzIGEgdG9rZW4sIHRoZSBjaGVjayBpcyBza2lwcGVkIGZvciB0aGF0IGtleSBhbmQgYSBzeW50aGVzaXMtdGltZSB3YXJuaW5nIGlzIGVtaXR0ZWQsIHNvXG4gICAqIHRoZSAocmFyZSkgY2FzZSB3aGVyZSBhIHRva2VuIGtleSByZXNvbHZlcyB0byBhIG1hbmFnZWQgYXJndW1lbnQgYXQgZGVwbG95IHRpbWUg4oCUIGluIHdoaWNoIHRoZVxuICAgKiBjb25zdHJ1Y3QtbWFuYWdlZCB2YWx1ZSB3b3VsZCBzaWxlbnRseSB0YWtlIHByZWNlZGVuY2Ug4oCUIGlzIHN1cmZhY2VkIHJhdGhlciB0aGFuIGhpZGRlbi5cbiAgICpcbiAgICogQHBhcmFtIGRlZmF1bHRBcmd1bWVudHMgdGhlIGNhbGxlci1zdXBwbGllZCBlc2NhcGUtaGF0Y2ggYXJndW1lbnRzLCBpZiBhbnlcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2x1ZS9sYXRlc3QvZGcvYXdzLWdsdWUtcHJvZ3JhbW1pbmctZXRsLWdsdWUtYXJndW1lbnRzLmh0bWxcbiAgICovXG4gIHByb3RlY3RlZCBtZXJnZURlZmF1bHRBcmd1bWVudHMoXG4gICAgZGVmYXVsdEFyZ3VtZW50cz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIGlmIChkZWZhdWx0QXJndW1lbnRzKSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMoZGVmYXVsdEFyZ3VtZW50cykuc29tZSgoYXJnKSA9PiBjZGsuVG9rZW4uaXNVbnJlc29sdmVkKGFyZykpKSB7XG4gICAgICAgIGNkay5Bbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRXYXJuaW5nVjIoXG4gICAgICAgICAgJ0Bhd3MtY2RrL2F3cy1nbHVlLWFscGhhOnRva2VuSm9iQXJndW1lbnRLZXknLFxuICAgICAgICAgICdkZWZhdWx0QXJndW1lbnRzIGNvbnRhaW5zIGFuIHVucmVzb2x2ZWQgdG9rZW4gYXMgYW4gYXJndW1lbnQga2V5LCBzbyBpdCBjYW5ub3QgYmUgY2hlY2tlZCBmb3IgY29uZmxpY3RzIHdpdGggY29uc3RydWN0LW1hbmFnZWQgYXJndW1lbnRzLiBJZiBpdCByZXNvbHZlcyB0byBhIG1hbmFnZWQgYXJndW1lbnQgYXQgZGVwbG95IHRpbWUsIHRoZSBjb25zdHJ1Y3QtbWFuYWdlZCB2YWx1ZSB3aWxsIHRha2UgcHJlY2VkZW5jZS4gQ29uZmlndXJlIG1hbmFnZWQgYXJndW1lbnRzIHRocm91Z2ggdGhlaXIgZGVkaWNhdGVkIHByb3BzIChlLmcuIGNvbnRpbnVvdXNMb2dnaW5nLCBlbmFibGVNZXRyaWNzLCBlbmFibGVPYnNlcnZhYmlsaXR5TWV0cmljcywgc3BhcmtVSSkuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbmZsaWN0cyA9IE9iamVjdC5rZXlzKGRlZmF1bHRBcmd1bWVudHMpLmZpbHRlcihcbiAgICAgICAgKGFyZykgPT4gSm9iLkdMVUVfUkVTRVJWRURfQVJHVU1FTlRTLmhhcyhhcmcpXG4gICAgICAgICAgfHwgKHRoaXMuX21hbmFnZWRBcmd1bWVudEtleXMuaGFzKGFyZylcbiAgICAgICAgICAgICYmICEoT2JqZWN0Lmhhc093bih0aGlzLl9tYW5hZ2VkQXJndW1lbnRzLCBhcmcpICYmIGRlZmF1bHRBcmd1bWVudHNbYXJnXSA9PT0gdGhpcy5fbWFuYWdlZEFyZ3VtZW50c1thcmddKSksXG4gICAgICApO1xuICAgICAgaWYgKGNvbmZsaWN0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGxpdGBNYW5hZ2VkSm9iQXJndW1lbnRgLFxuICAgICAgICAgIGB0aGUgam9iIGFyZ3VtZW50KHMpICR7SlNPTi5zdHJpbmdpZnkoY29uZmxpY3RzKX0gYXJlIG1hbmFnZWQgYnkgdGhlIGNvbnN0cnVjdCBvciByZXNlcnZlZCBieSBHbHVlOyBjb25maWd1cmUgdGhlbSB0aHJvdWdoIHRoZSBjb3JyZXNwb25kaW5nIHByb3BzIChlLmcuIGNvbnRpbnVvdXNMb2dnaW5nLCBlbmFibGVNZXRyaWNzLCBlbmFibGVPYnNlcnZhYmlsaXR5TWV0cmljcywgc3BhcmtVSSkgaW5zdGVhZCBvZiBkZWZhdWx0QXJndW1lbnRzYCxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB3YXJuT25QbGFpbnRleHRTZWNyZXRzKFxuICAgICAgdGhpcyxcbiAgICAgIGRlZmF1bHRBcmd1bWVudHMsXG4gICAgICAnQGF3cy1jZGsvYXdzLWdsdWUtYWxwaGE6cGxhaW50ZXh0Sm9iQXJndW1lbnRTZWNyZXQnLFxuICAgICAgJ1Bhc3Mgc2VjcmV0cyB0byB0aGUgam9iIGF0IHJ1bnRpbWUgdGhyb3VnaCBBV1MgU2VjcmV0cyBNYW5hZ2VyIGluc3RlYWQgb2YgZW1iZWRkaW5nIHRoZW0gaW4gYGRlZmF1bHRBcmd1bWVudHNgLicsXG4gICAgKTtcbiAgICByZXR1cm4geyAuLi5kZWZhdWx0QXJndW1lbnRzLCAuLi50aGlzLl9tYW5hZ2VkQXJndW1lbnRzIH07XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgKGFuZCwgd2hlbiBlbmFibGVkLCBlbWl0KSB0aGUgY29udGludW91cy1sb2dnaW5nIGFyZ3VtZW50cyB0aGlzIGpvYiBtYW5hZ2VzLlxuICAgKlxuICAgKiBBbGwgZml2ZSBjb250aW51b3VzLWxvZ2dpbmcga2V5cyBhcmUgcmVzZXJ2ZWQgb24gZXZlcnkgam9iIHR5cGUgcmVnYXJkbGVzcyBvZiBjb25maWd1cmF0aW9uOlxuICAgKiB0aGV5IGFyZSBhbHdheXMgcmVnaXN0ZXJlZCB0aHJvdWdoIHtAbGluayBzZXRNYW5hZ2VkQXJndW1lbnR9LCBhbmQgY2FycnkgYSB2YWx1ZSBvbmx5IHdoZW5cbiAgICogbG9nZ2luZyBpcyBlbmFibGVkLiBUaGlzIGtlZXBzIGBkZWZhdWx0QXJndW1lbnRzYCBmcm9tIHJlLWVuYWJsaW5nIGxvZ2dpbmcgYSB1c2VyIHR1cm5lZCBvZmYuXG4gICAqXG4gICAqIEBwYXJhbSByb2xlIFRoZSBJQU0gcm9sZSB0byBncmFudCB3cml0ZSBhY2Nlc3MgdG8gYSBjdXN0b20gbG9nIGdyb3VwLCBpZiBvbmUgaXMgcHJvdmlkZWRcbiAgICogQHBhcmFtIHByb3BzIFRoZSBwcm9wZXJ0aWVzIGZvciBjb250aW51b3VzIGxvZ2dpbmcgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0gc2VjdXJpdHlDb25maWd1cmF0aW9uIFRoZSBzZWN1cml0eSBjb25maWd1cmF0aW9uIGF0dGFjaGVkIHRvIHRoZSBqb2IsIGlmIGFueVxuICAgKi9cbiAgcHJvdGVjdGVkIHNldHVwQ29udGludW91c0xvZ2dpbmcocm9sZTogaWFtLklSb2xlLCBwcm9wczogQ29udGludW91c0xvZ2dpbmdQcm9wcyB8IHVuZGVmaW5lZCwgc2VjdXJpdHlDb25maWd1cmF0aW9uPzogSVNlY3VyaXR5Q29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIC8vIENvbnRpbnVvdXMgbG9nZ2luZyBpcyBvbiB1bmxlc3MgdGhlIGRldmVsb3BlciBoYXMgZXhwbGljaXRseSBkaXNhYmxlZCBpdC5cbiAgICBjb25zdCBlbmFibGVkID0gIShwcm9wcyAmJiAhcHJvcHMuZW5hYmxlZCk7XG5cbiAgICAvLyBXaGVuIGxvZ2dpbmcgaXMgb24sIHRoZSBsb2dzIGFyZSB3cml0dGVuIHRvIGFuIHVuZW5jcnlwdGVkIENsb3VkV2F0Y2ggbG9nIGdyb3VwIHVubGVzcyBhXG4gICAgLy8gU2VjdXJpdHlDb25maWd1cmF0aW9uIGlzIGF0dGFjaGVkLiBXZSBjYW5ub3QgaW50cm9zcGVjdCB3aGV0aGVyIHRoZSBhdHRhY2hlZFxuICAgIC8vIFNlY3VyaXR5Q29uZmlndXJhdGlvbiBhY3R1YWxseSBjb25maWd1cmVzIGNsb3VkV2F0Y2hFbmNyeXB0aW9uICh0aGUgSVNlY3VyaXR5Q29uZmlndXJhdGlvblxuICAgIC8vIGludGVyZmFjZSBvbmx5IGV4cG9zZXMgdGhlIG5hbWUpLCBzbyB3ZSBvbmx5IHdhcm4gd2hlbiBub25lIGlzIGF0dGFjaGVkIGF0IGFsbCB0byBhdm9pZFxuICAgIC8vIGZhbHNlIHBvc2l0aXZlcy5cbiAgICBpZiAoZW5hYmxlZCAmJiAhc2VjdXJpdHlDb25maWd1cmF0aW9uKSB7XG4gICAgICBjZGsuQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZ1YyKFxuICAgICAgICAnQGF3cy1jZGsvYXdzLWdsdWUtYWxwaGE6dW5lbmNyeXB0ZWRDb250aW51b3VzTG9nZ2luZycsXG4gICAgICAgICdDb250aW51b3VzIENsb3VkV2F0Y2ggbG9nZ2luZyBpcyBlbmFibGVkIGJ1dCBubyBTZWN1cml0eUNvbmZpZ3VyYXRpb24gd2l0aCBjbG91ZFdhdGNoRW5jcnlwdGlvbiBpcyBhdHRhY2hlZC4gSm9iIHN0ZG91dCBhbmQgc3RkZXJyIHdpbGwgYmUgd3JpdHRlbiB0byBhbiB1bmVuY3J5cHRlZCBDbG91ZFdhdGNoIGxvZyBncm91cC4gU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC9kZy9lbmNyeXB0aW9uLXNlY3VyaXR5LWNvbmZpZ3VyYXRpb24uaHRtbCcsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEEgY3VzdG9tIGxvZyBncm91cCBpcyBvbmx5IHdpcmVkIHVwIChhbmQgb25seSBncmFudGVkIHdyaXRlKSB3aGVuIGxvZ2dpbmcgaXMgZW5hYmxlZC5cbiAgICBjb25zdCBsb2dHcm91cCA9IGVuYWJsZWQgPyBwcm9wcz8ubG9nR3JvdXAgOiB1bmRlZmluZWQ7XG4gICAgbG9nR3JvdXA/LmdyYW50V3JpdGUocm9sZSk7XG5cbiAgICB0aGlzLnNldE1hbmFnZWRBcmd1bWVudCgnLS1lbmFibGUtY29udGludW91cy1jbG91ZHdhdGNoLWxvZycsIGVuYWJsZWQgPyAndHJ1ZScgOiB1bmRlZmluZWQpO1xuICAgIHRoaXMuc2V0TWFuYWdlZEFyZ3VtZW50KCctLWVuYWJsZS1jb250aW51b3VzLWxvZy1maWx0ZXInLCBlbmFibGVkICYmIHByb3BzPy5xdWlldCA/ICd0cnVlJyA6IHVuZGVmaW5lZCk7XG4gICAgdGhpcy5zZXRNYW5hZ2VkQXJndW1lbnQoJy0tY29udGludW91cy1sb2ctbG9nR3JvdXAnLCBsb2dHcm91cD8ubG9nR3JvdXBOYW1lKTtcbiAgICB0aGlzLnNldE1hbmFnZWRBcmd1bWVudCgnLS1jb250aW51b3VzLWxvZy1sb2dTdHJlYW1QcmVmaXgnLCBlbmFibGVkID8gcHJvcHM/LmxvZ1N0cmVhbVByZWZpeCA6IHVuZGVmaW5lZCk7XG4gICAgdGhpcy5zZXRNYW5hZ2VkQXJndW1lbnQoJy0tY29udGludW91cy1sb2ctY29udmVyc2lvblBhdHRlcm4nLCBlbmFibGVkID8gcHJvcHM/LmNvbnZlcnNpb25QYXR0ZXJuIDogdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb2RlUzNPYmplY3RVcmwoY29kZTogQ29kZSkge1xuICAgIGNvbnN0IHMzTG9jYXRpb24gPSBjb2RlLmJpbmQodGhpcywgdGhpcy5yb2xlKS5zM0xvY2F0aW9uO1xuICAgIHJldHVybiBgczM6Ly8ke3MzTG9jYXRpb24uYnVja2V0TmFtZX0vJHtzM0xvY2F0aW9uLm9iamVjdEtleX1gO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgQ2xvdWRXYXRjaCBNZXRyaWMgdGhhdCdzIGJhc2VkIG9uIEdsdWUgSm9iIGV2ZW50c1xuICoge0BzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L2V2ZW50cy9FdmVudFR5cGVzLmh0bWwjZ2x1ZS1ldmVudC10eXBlc31cbiAqIFRoZSBtZXRyaWMgaGFzIG5hbWVzcGFjZSA9ICdBV1MvRXZlbnRzJywgbWV0cmljTmFtZSA9ICdUcmlnZ2VyZWRSdWxlcycgYW5kIFJ1bGVOYW1lID0gcnVsZS5ydWxlTmFtZSBkaW1lbnNpb24uXG4gKlxuICogQHBhcmFtIHJ1bGUgZm9yIHVzZSBpbiBzZXR0aW5nIFJ1bGVOYW1lIGRpbWVuc2lvbiB2YWx1ZVxuICogQHBhcmFtIHByb3BzIG1ldHJpYyBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1ldHJpY1J1bGUocnVsZTogZXZlbnRzLklSdWxlLCBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgcmV0dXJuIG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgbmFtZXNwYWNlOiAnQVdTL0V2ZW50cycsXG4gICAgbWV0cmljTmFtZTogJ1RyaWdnZXJlZFJ1bGVzJyxcbiAgICBkaW1lbnNpb25zTWFwOiB7IFJ1bGVOYW1lOiBydWxlLnJ1bGVOYW1lIH0sXG4gICAgc3RhdGlzdGljOiBjbG91ZHdhdGNoLlN0YXRzLlNVTSxcbiAgICAuLi5wcm9wcyxcbiAgfSkuYXR0YWNoVG8ocnVsZSk7XG59XG5cbiJdfQ==
|
|
@@ -78,9 +78,7 @@ export declare class PySparkEtlJob extends SparkJob {
|
|
|
78
78
|
get jobArn(): string;
|
|
79
79
|
get jobName(): string;
|
|
80
80
|
/**
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
* @returns An array of arguments for Glue to use on execution
|
|
81
|
+
* Register the executable arguments with best practices enabled by default.
|
|
84
82
|
*/
|
|
85
83
|
private executableArguments;
|
|
86
84
|
}
|