@aws-cdk/aws-mediaconnect-alpha 2.267.0-alpha.0 → 2.269.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.
@@ -3,6 +3,7 @@ import { Duration, Resource } from 'aws-cdk-lib';
3
3
  import type { MetricOptions } from 'aws-cdk-lib/aws-cloudwatch';
4
4
  import { Metric } from 'aws-cdk-lib/aws-cloudwatch';
5
5
  import type { IRouterOutputRef, RouterOutputReference } from 'aws-cdk-lib/aws-mediaconnect';
6
+ import type { IInputRef } from 'aws-cdk-lib/aws-medialive';
6
7
  import type { Construct } from 'constructs';
7
8
  import type { IFlow } from './flow';
8
9
  import type { MaintenanceConfiguration, ForwardErrorCorrection, RoutingScope } from './router-input';
@@ -137,7 +138,8 @@ export interface RouterOutputProps {
137
138
  /** Indicates whether the router output is configured for Regional or global routing. */
138
139
  readonly routingScope: RoutingScope;
139
140
  /**
140
- * Select a tier based on your maximum bitrate requirements.
141
+ * Routing tier that determines the maximum bitrate (in Mbps) for this output.
142
+ *
141
143
  * @default RouterOutputTier.OUTPUT_20
142
144
  */
143
145
  readonly tier?: RouterOutputTier;
@@ -339,14 +341,11 @@ export interface StandardOutputConfigurationProps {
339
341
  */
340
342
  export interface MediaLiveInputConnectionProps {
341
343
  /**
342
- * ARN of the MediaLive input to send output to.
343
- *
344
- * Note: This will change to accept an IInputRef (typed MediaLive Input reference)
345
- * when the @aws-cdk/aws-medialive-alpha L2 construct is released.
344
+ * The MediaLive input to send output to (must be of type `medialive.InputConfiguration.mediaConnectRouter()`).
346
345
  */
347
- readonly mediaLiveInputArn: string;
348
- /** Pipeline ID for MediaLive input */
349
- readonly mediaLivePipelineId: MediaLivePipeline;
346
+ readonly input: IInputRef;
347
+ /** MediaLive pipeline to send output to */
348
+ readonly pipeline: MediaLivePipeline;
350
349
  /**
351
350
  * Optional transit encryption configuration
352
351
  * @default - Automatic encryption will be used
@@ -417,15 +416,7 @@ export declare abstract class RouterOutputConfiguration {
417
416
  *
418
417
  * Use this when the MediaLive input already exists and you want to connect immediately.
419
418
  *
420
- * @example
421
- *
422
- * RouterOutputConfiguration.mediaLiveInput({
423
- * mediaLiveInputArn: 'arn:aws:medialive:us-east-1:123456789012:input:1234567',
424
- * mediaLivePipelineId: MediaLivePipeline.PIPELINE_0,
425
- * });
426
- *
427
419
  * @param props MediaLive input connection properties
428
- * @returns RouterOutputConfiguration instance for MediaLive setup with input connection
429
420
  */
430
421
  static mediaLiveInput(props: MediaLiveInputConnectionProps): RouterOutputConfiguration;
431
422
  /**
@@ -433,14 +424,7 @@ export declare abstract class RouterOutputConfiguration {
433
424
  *
434
425
  * Use this when you want to set up the router output before the MediaLive input exists.
435
426
  *
436
- * @example
437
- *
438
- * RouterOutputConfiguration.mediaLiveInputWithoutConnection({
439
- * availabilityZone: 'us-east-1a',
440
- * });
441
- *
442
427
  * @param props MediaLive no input connection properties
443
- * @returns RouterOutputConfiguration instance for MediaLive setup without input connection
444
428
  */
445
429
  static mediaLiveInputWithoutConnection(props: MediaLiveNoInputConnectionProps): RouterOutputConfiguration;
446
430
  /**
@@ -49,7 +49,7 @@ const shared_1 = require("./shared");
49
49
  */
50
50
  class RouterOutputProtocolOptions {
51
51
  value;
52
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputProtocolOptions", version: "2.267.0-alpha.0" };
52
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputProtocolOptions", version: "2.269.0-alpha.0" };
53
53
  /** Real-time Transport Protocol */
54
54
  static RTP = new RouterOutputProtocolOptions('RTP');
55
55
  /** Reliable Internet Stream Transport */
@@ -80,7 +80,7 @@ exports.RouterOutputProtocolOptions = RouterOutputProtocolOptions;
80
80
  */
81
81
  class RouterOutputTier {
82
82
  value;
83
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputTier", version: "2.267.0-alpha.0" };
83
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputTier", version: "2.269.0-alpha.0" };
84
84
  /** Up to 100 Mbps */
85
85
  static OUTPUT_100 = new RouterOutputTier('OUTPUT_100');
86
86
  /** Up to 50 Mbps */
@@ -110,7 +110,7 @@ exports.RouterOutputTier = RouterOutputTier;
110
110
  * Supported protocols: RTP, RIST, SRT (Listener and Caller).
111
111
  */
112
112
  class RouterOutputProtocol {
113
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputProtocol", version: "2.267.0-alpha.0" };
113
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputProtocol", version: "2.269.0-alpha.0" };
114
114
  /**
115
115
  * Create an RTP protocol configuration
116
116
  *
@@ -300,7 +300,7 @@ exports.RouterOutputProtocol = RouterOutputProtocol;
300
300
  * Factory class for creating Router Output configurations
301
301
  */
302
302
  class RouterOutputConfiguration {
303
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputConfiguration", version: "2.267.0-alpha.0" };
303
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutputConfiguration", version: "2.269.0-alpha.0" };
304
304
  /**
305
305
  * Create a standard Router Output configuration with a single protocol
306
306
  *
@@ -336,15 +336,7 @@ class RouterOutputConfiguration {
336
336
  *
337
337
  * Use this when the MediaLive input already exists and you want to connect immediately.
338
338
  *
339
- * @example
340
- *
341
- * RouterOutputConfiguration.mediaLiveInput({
342
- * mediaLiveInputArn: 'arn:aws:medialive:us-east-1:123456789012:input:1234567',
343
- * mediaLivePipelineId: MediaLivePipeline.PIPELINE_0,
344
- * });
345
- *
346
339
  * @param props MediaLive input connection properties
347
- * @returns RouterOutputConfiguration instance for MediaLive setup with input connection
348
340
  */
349
341
  static mediaLiveInput(props) {
350
342
  try {
@@ -357,8 +349,8 @@ class RouterOutputConfiguration {
357
349
  throw error;
358
350
  }
359
351
  return new MediaLiveInputRouterOutputConfig({
360
- mediaLiveInputArn: props.mediaLiveInputArn,
361
- mediaLivePipelineId: props.mediaLivePipelineId,
352
+ mediaLiveInputArn: props.input.inputRef.inputArn,
353
+ mediaLivePipelineId: props.pipeline,
362
354
  destinationTransitEncryption: props.destinationTransitEncryption,
363
355
  });
364
356
  }
@@ -367,14 +359,7 @@ class RouterOutputConfiguration {
367
359
  *
368
360
  * Use this when you want to set up the router output before the MediaLive input exists.
369
361
  *
370
- * @example
371
- *
372
- * RouterOutputConfiguration.mediaLiveInputWithoutConnection({
373
- * availabilityZone: 'us-east-1a',
374
- * });
375
- *
376
362
  * @param props MediaLive no input connection properties
377
- * @returns RouterOutputConfiguration instance for MediaLive setup without input connection
378
363
  */
379
364
  static mediaLiveInputWithoutConnection(props) {
380
365
  try {
@@ -618,7 +603,7 @@ let RouterOutput = (() => {
618
603
  RouterOutput = _classThis = _classDescriptor.value;
619
604
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
620
605
  }
621
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutput", version: "2.267.0-alpha.0" };
606
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.RouterOutput", version: "2.269.0-alpha.0" };
622
607
  /** Uniquely identifies this class. */
623
608
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-mediaconnect-alpha.RouterOutput';
624
609
  /**
@@ -788,4 +773,4 @@ function extractRouterOutputId(routerOutputArn) {
788
773
  }
789
774
  return parsed;
790
775
  }
791
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLW91dHB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJvdXRlci1vdXRwdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsNkNBQXNJO0FBRXRJLCtEQUEwRDtBQUUxRCxtRUFBK0Q7QUFFL0QsNEVBQTREO0FBQzVELDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFNMUUscUNBQStJO0FBRS9JOztHQUVHO0FBQ0gsTUFBYSwyQkFBMkI7SUFtQkY7O0lBbEJwQyxtQ0FBbUM7SUFDNUIsTUFBTSxDQUFVLEdBQUcsR0FBRyxJQUFJLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLHlDQUF5QztJQUNsQyxNQUFNLENBQVUsSUFBSSxHQUFHLElBQUksMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEUsOENBQThDO0lBQ3ZDLE1BQU0sQ0FBVSxVQUFVLEdBQUcsSUFBSSwyQkFBMkIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRixnREFBZ0Q7SUFDekMsTUFBTSxDQUFVLFlBQVksR0FBRyxJQUFJLDJCQUEyQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXRGOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBYTtRQUM1QixPQUFPLElBQUksMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDL0M7SUFFRCw2Q0FBNkM7SUFDN0MsWUFBb0MsS0FBYTtRQUFiLFVBQUssR0FBTCxLQUFLLENBQVE7S0FBSTtJQUVyRCwrQkFBK0I7SUFDeEIsUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztLQUNuQjs7QUF4Qkgsa0VBeUJDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLGdCQUFnQjtJQWlCUzs7SUFoQnBDLHFCQUFxQjtJQUNkLE1BQU0sQ0FBVSxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2RSxvQkFB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V0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzdDOztZQWpLVSx1REFBWTs7Ozs7QUFBWixvQ0FBWTtBQW9LekIsU0FBUyxxQkFBcUIsQ0FBQyxlQUF1QjtJQUNwRCxNQUFNLE1BQU0sR0FBRyxpQkFBRyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsdUJBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUN0RixJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUkscUNBQXVCLENBQy9CLElBQUEsc0JBQUcsRUFBQSx3QkFBd0IsRUFDM0Isc0NBQXNDLGVBQWUsc0ZBQXNGLENBQzVJLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQml0cmF0ZSwgSVJlc291cmNlIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQXJuLCBBcm5Gb3JtYXQsIER1cmF0aW9uLCBMYXp5LCBOYW1lcywgUmVzb3VyY2UsIFN0YWNrLCBUb2tlbiwgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB0eXBlIHsgTWV0cmljT3B0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB7IE1ldHJpYywgVW5pdCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB0eXBlIHsgR3JhbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENmblJvdXRlck91dHB1dCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1tZWRpYWNvbm5lY3QnO1xuaW1wb3J0IHR5cGUgeyBJUm91dGVyT3V0cHV0UmVmLCBSb3V0ZXJPdXRwdXRSZWZlcmVuY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbWVkaWFjb25uZWN0JztcbmltcG9ydCB7IGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgSUZsb3cgfSBmcm9tICcuL2Zsb3cnO1xuaW1wb3J0IHR5cGUgeyBNYWludGVuYW5jZUNvbmZpZ3VyYXRpb24sIEZvcndhcmRFcnJvckNvcnJlY3Rpb24sIFJvdXRpbmdTY29wZSB9IGZyb20gJy4vcm91dGVyLWlucHV0JztcbmltcG9ydCB0eXBlIHsgSVJvdXRlck5ldHdvcmtJbnRlcmZhY2UgfSBmcm9tICcuL3JvdXRlci1uZXR3b3JrLWludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IE1lZGlhTGl2ZVBpcGVsaW5lLCBSb3V0ZXJTcnRFbmNyeXB0aW9uLCBUcmFuc2l0RW5jcnlwdGlvbiB9IGZyb20gJy4vc2hhcmVkJztcbmltcG9ydCB7IHJlbmRlclRhZ3MsIGV4Y2VlZHNSb3V0ZXJUaWVyQml0cmF0ZSwgcmVzb2x2ZVJvdXRlclNydEVuY3J5cHRpb24sIHJlc29sdmVUcmFuc2l0RW5jcnlwdGlvbiwgdmFsaWRhdGVNYWludGVuYW5jZVRpbWUgfSBmcm9tICcuL3NoYXJlZCc7XG5cbi8qKlxuICogUHJvdG9jb2wgb3B0aW9ucyBhdmFpbGFibGUgZm9yIFJvdXRlciBPdXRwdXQgY29uZmlndXJhdGlvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucyB7XG4gIC8qKiBSZWFsLXRpbWUgVHJhbnNwb3J0IFByb3RvY29sICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUlRQID0gbmV3IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucygnUlRQJyk7XG4gIC8qKiBSZWxpYWJsZSBJbnRlcm5ldCBTdHJlYW0gVHJhbnNwb3J0ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUklTVCA9IG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMoJ1JJU1QnKTtcbiAgLyoqIFNlY3VyZSBSZWxpYWJsZSBUcmFuc3BvcnQgLSBDYWxsZXIgbW9kZSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNSVF9DQUxMRVIgPSBuZXcgUm91dGVyT3V0cHV0UHJvdG9jb2xPcHRpb25zKCdTUlRfQ0FMTEVSJyk7XG4gIC8qKiBTZWN1cmUgUmVsaWFibGUgVHJhbnNwb3J0IC0gTGlzdGVuZXIgbW9kZSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNSVF9MSVNURU5FUiA9IG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMoJ1NSVF9MSVNURU5FUicpO1xuXG4gIC8qKlxuICAgKiBVc2UgYSBjdXN0b20gcHJvdG9jb2wgdmFsdWVcbiAgICogQHBhcmFtIHZhbHVlIFRoZSBwcm90b2NvbCBzdHJpbmcgdmFsdWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucyB7XG4gICAgcmV0dXJuIG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnModmFsdWUpO1xuICB9XG5cbiAgLyoqIEBwYXJhbSB2YWx1ZSBUaGUgcHJvdG9jb2wgc3RyaW5nIHZhbHVlICovXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmcpIHt9XG5cbiAgLyoqIFJldHVybnMgdGhlIHN0cmluZyB2YWx1ZSAqL1xuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFJvdXRpbmcgdGllciB0aGF0IGRldGVybWluZXMgdGhlIG1heGltdW0gYml0cmF0ZSAoaW4gTWJwcykgZm9yIGEgUm91dGVyIE91dHB1dC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlck91dHB1dFRpZXIge1xuICAvKiogVXAgdG8gMTAwIE1icHMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPVVRQVVRfMTAwID0gbmV3IFJvdXRlck91dHB1dFRpZXIoJ09VVFBVVF8xMDAnKTtcbiAgLyoqIFVwIHRvIDUwIE1icHMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPVVRQVVRfNTAgPSBuZXcgUm91dGVyT3V0cHV0VGllcignT1VUUFVUXzUwJyk7XG4gIC8qKiBVcCB0byAyMCBNYnBzICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT1VUUFVUXzIwID0gbmV3IFJvdXRlck91dHB1dFRpZXIoJ09VVFBVVF8yMCcpO1xuXG4gIC8qKlxuICAgKiBVc2UgYSBjdXN0b20gdGllciB2YWx1ZVxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHRpZXIgc3RyaW5nIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBSb3V0ZXJPdXRwdXRUaWVyIHtcbiAgICByZXR1cm4gbmV3IFJvdXRlck91dHB1dFRpZXIodmFsdWUpO1xuICB9XG5cbiAgLyoqIEBwYXJhbSB2YWx1ZSBUaGUgdGllciBzdHJpbmcgdmFsdWUgKi9cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZykge31cblxuICAvKiogUmV0dXJucyB0aGUgc3RyaW5nIHZhbHVlICovXG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBSb3V0ZXIgT3V0cHV0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVJvdXRlck91dHB1dCBleHRlbmRzIElSZXNvdXJjZSwgSVJvdXRlck91dHB1dFJlZiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcm91dGVyIG91dHB1dC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyT3V0cHV0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHJvdXRlciBvdXRwdXQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlck91dHB1dEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJvdXRlciBvdXRwdXQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlck91dHB1dElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJUCBhZGRyZXNzIG9mIHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBpcEFkZHJlc3M6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSByb3V0ZXIgb3V0cHV0IHdhcyBjcmVhdGVkLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgcm91dGVyIG91dHB1dCB3YXMgbGFzdCB1cGRhdGVkLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIENsb3VkV2F0Y2ggbWV0cmljIGZvciB0aGlzIHJvdXRlciBvdXRwdXQuXG4gICAqXG4gICAqIFJvdXRlciBvdXRwdXQgbWV0cmljcyBhcmUgZGltZW5zaW9uZWQgYnkgYFJvdXRlck91dHB1dEFSTmAuIFNlZSB0aGUgTWVkaWFDb25uZWN0XG4gICAqIGRvY3VtZW50YXRpb24gZm9yIGF2YWlsYWJsZSBtZXRyaWMgbmFtZXMgKGUuZy4gYFJvdXRlck91dHB1dEJpdFJhdGVgLFxuICAgKiBgUm91dGVyT3V0cHV0VG90YWxQYWNrZXRzYCkuXG4gICAqL1xuICBtZXRyaWMobWV0cmljTmFtZTogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIGJpdHJhdGUgb2YgdGhlIHJvdXRlciBvdXRwdXQncyBwYXlsb2FkLlxuICAgKiBAZGVmYXVsdCAtIGF2ZXJhZ2Ugb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBtZXRyaWNCaXRyYXRlKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgdG90YWwgbnVtYmVyIG9mIHBhY2tldHMgc2VudCBieSB0aGUgcm91dGVyIG91dHB1dC5cbiAgICogQGRlZmF1bHQgLSBzdW0gb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBtZXRyaWNUb3RhbFBhY2tldHMocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSByb3V0ZXIgb3V0cHV0IGNvbm5lY3Rpb24gc3RhdGUgKDEgY29ubmVjdGVkLCAwIGRpc2Nvbm5lY3RlZCkuIEFwcGxpZXMgdG8gU1JUIG91dHB1dHMgb25seS5cbiAgICogQGRlZmF1bHQgLSBtaW5pbXVtIG92ZXIgNjAgc2Vjb25kc1xuICAgKi9cbiAgbWV0cmljQ29ubmVjdGVkKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgbnVtYmVyIG9mIHJldHJhbnNtaXR0ZWQgcGFja2V0cyByZXF1ZXN0ZWQgdGhyb3VnaCBhdXRvbWF0aWMgcmVwZWF0IHJlcXVlc3QgKEFSUSkuXG4gICAqIEFwcGxpZXMgdG8gUklTVCBhbmQgU1JUIG91dHB1dHMgb25seS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzdW0gb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBtZXRyaWNBcnFSZXF1ZXN0cyhwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBSb3V0ZXIgT3V0cHV0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVyT3V0cHV0UHJvcHMge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgUm91dGVyIE91dHB1dFxuICAgKiBAZGVmYXVsdCAtIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5XG4gICAqL1xuICByZWFkb25seSByb3V0ZXJPdXRwdXROYW1lPzogc3RyaW5nO1xuICAvKiogVGhlIG1heGltdW0gYml0cmF0ZSBmb3IgdGhlIHJvdXRlciBvdXRwdXQuICovXG4gIHJlYWRvbmx5IG1heGltdW1CaXRyYXRlOiBCaXRyYXRlO1xuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJvdXRlciBvdXRwdXQgaXMgY29uZmlndXJlZCBmb3IgUmVnaW9uYWwgb3IgZ2xvYmFsIHJvdXRpbmcuICovXG4gIHJlYWRvbmx5IHJvdXRpbmdTY29wZTogUm91dGluZ1Njb3BlO1xuICAvKipcbiAgICogU2VsZWN0IGEgdGllciBiYXNlZCBvbiB5b3VyIG1heGltdW0gYml0cmF0ZSByZXF1aXJlbWVudHMuXG4gICAqIEBkZWZhdWx0IFJvdXRlck91dHB1dFRpZXIuT1VUUFVUXzIwXG4gICAqL1xuICByZWFkb25seSB0aWVyPzogUm91dGVyT3V0cHV0VGllcjtcbiAgLyoqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBSb3V0ZXIgT3V0cHV0IChzdGFuZGFyZCwgTWVkaWFDb25uZWN0IEZsb3csIG9yIE1lZGlhTGl2ZSkgKi9cbiAgcmVhZG9ubHkgY29uZmlndXJhdGlvbjogUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbjtcbiAgLyoqXG4gICAqIE1haW50ZW5hbmNlIHdpbmRvdyBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBtYWludGVuYW5jZSB3aW5kb3cgd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBtYWludGVuYW5jZUNvbmZpZ3VyYXRpb24/OiBNYWludGVuYW5jZUNvbmZpZ3VyYXRpb247XG4gIC8qKlxuICAgKiBUaGUgQVdTIFJlZ2lvbiB3aGVyZSB0aGUgcm91dGVyIG91dHB1dCBpcyBsb2NhdGVkLlxuICAgKiBAZGVmYXVsdCAtIERlZmF1bHRzIHRvIHRoZSBzYW1lIHJlZ2lvbiBhcyBzdGFja1xuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRhZ3MgdG8gYWRkIHRvIHRoZSBSb3V0ZXIgT3V0cHV0XG4gICAqIEBkZWZhdWx0IC0gTm8gdGFnZ2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogQXR0cmlidXRlcyBmb3IgaW1wb3J0aW5nIGFuIGV4aXN0aW5nIFJvdXRlciBPdXRwdXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVyT3V0cHV0QXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyT3V0cHV0QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKlxuICAgKiBUaGUgbmFtZSBpcyBub3QgZW5jb2RlZCBpbiB0aGUgQVJOICh0aGUgQVJOIGNvbnRhaW5zIG9ubHkgdGhlIHNlcnZpY2UtZ2VuZXJhdGVkIElEKSxcbiAgICogc28gcHJvdmlkZSBpdCBoZXJlIGlmIHlvdSBuZWVkIHRvIGFjY2VzcyBgcm91dGVyT3V0cHV0TmFtZWAgb24gdGhlIGltcG9ydGVkIGNvbnN0cnVjdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSByb3V0ZXJPdXRwdXROYW1lIGlzIG5vdCBhdmFpbGFibGUgb24gdGhlIGltcG9ydGVkIGNvbnN0cnVjdFxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyT3V0cHV0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHBhcnNlZCBmcm9tIHRoZSBBUk4gd2hlbiBhdmFpbGFibGVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlck91dHB1dElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIFJUUCBwcm90b2NvbCBjb25maWd1cmF0aW9uIGZvciBvdXRwdXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnRwT3V0cHV0UHJvdG9jb2xQcm9wcyB7XG4gIC8qKiBEZXN0aW5hdGlvbiBJUCBhZGRyZXNzIGZvciBSVFAgdHJhZmZpYyAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbkFkZHJlc3M6IHN0cmluZztcbiAgLyoqIFBvcnQgbnVtYmVyIGZvciBSVFAgdHJhZmZpYyAqL1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG4gIC8qKlxuICAgKiBGb3J3YXJkIEVycm9yIENvcnJlY3Rpb24gc2V0dGluZ1xuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZDsgd2hlbiBvbWl0dGVkLCBNZWRpYUNvbm5lY3QgYXBwbGllcyBGb3J3YXJkRXJyb3JDb3JyZWN0aW9uLkRJU0FCTEVEIGF0IGRlcGxveSB0aW1lXG4gICAqL1xuICByZWFkb25seSBmb3J3YXJkRXJyb3JDb3JyZWN0aW9uPzogRm9yd2FyZEVycm9yQ29ycmVjdGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBSSVNUIHByb3RvY29sIGNvbmZpZ3VyYXRpb24gZm9yIG91dHB1dHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSaXN0T3V0cHV0UHJvdG9jb2xQcm9wcyB7XG4gIC8qKiBEZXN0aW5hdGlvbiBJUCBhZGRyZXNzIGZvciBSSVNUIHRyYWZmaWMgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25BZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiBQb3J0IG51bWJlciBmb3IgUklTVCB0cmFmZmljICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBTUlQgTGlzdGVuZXIgcHJvdG9jb2wgY29uZmlndXJhdGlvbiBmb3Igb3V0cHV0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNydExpc3RlbmVyT3V0cHV0UHJvdG9jb2xQcm9wcyB7XG4gIC8qKiBQb3J0IG51bWJlciBmb3IgU1JUIGxpc3RlbmVyICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgLyoqIE1pbmltdW0gbGF0ZW5jeSBmb3IgU1JUICovXG4gIHJlYWRvbmx5IG1pbmltdW1MYXRlbmN5OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgU1JUIHN0cmVhbXNcbiAgICogQGRlZmF1bHQgLSBObyBlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uQ29uZmlndXJhdGlvbj86IFJvdXRlclNydEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgU1JUIENhbGxlciBwcm90b2NvbCBjb25maWd1cmF0aW9uIGZvciBvdXRwdXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3J0Q2FsbGVyT3V0cHV0UHJvdG9jb2xQcm9wcyB7XG4gIC8qKiBEZXN0aW5hdGlvbiBJUCBhZGRyZXNzIHRvIGNvbm5lY3QgdG8gKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25BZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiBEZXN0aW5hdGlvbiBwb3J0IHRvIGNvbm5lY3QgdG8gKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25Qb3J0OiBudW1iZXI7XG4gIC8qKiBNaW5pbXVtIGxhdGVuY3kgZm9yIFNSVCAqL1xuICByZWFkb25seSBtaW5pbXVtTGF0ZW5jeTogRHVyYXRpb247XG4gIC8qKlxuICAgKiBPcHRpb25hbCBzdHJlYW0gSUQgZm9yIFNSVCBjb25uZWN0aW9uXG4gICAqIEBkZWZhdWx0IC0gTm8gc3RyZWFtIElEXG4gICAqL1xuICByZWFkb25seSBzdHJlYW1JZD86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgU1JUIHN0cmVhbXNcbiAgICogQGRlZmF1bHQgLSBObyBlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uQ29uZmlndXJhdGlvbj86IFJvdXRlclNydEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogRmFjdG9yeSBjbGFzcyBmb3IgY3JlYXRpbmcgUm91dGVyIE91dHB1dCBwcm90b2NvbCBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBTdXBwb3J0ZWQgcHJvdG9jb2xzOiBSVFAsIFJJU1QsIFNSVCAoTGlzdGVuZXIgYW5kIENhbGxlcikuXG4gKi9cbmV4cG9ydCBjbGFzcyBSb3V0ZXJPdXRwdXRQcm90b2NvbCB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gUlRQIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgUm91dGVyT3V0cHV0UHJvdG9jb2wucnRwKHtcbiAgICogICAgICBkZXN0aW5hdGlvbkFkZHJlc3M6ICcxMC4wLjAuMScsXG4gICAqICAgICAgcG9ydDogNTAwMCxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBSVFAgcHJvdG9jb2wgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJPdXRwdXRQcm90b2NvbCBpbnN0YW5jZSBjb25maWd1cmVkIGZvciBSVFBcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcnRwKHByb3BzOiBSdHBPdXRwdXRQcm90b2NvbFByb3BzKTogUm91dGVyT3V0cHV0UHJvdG9jb2wge1xuICAgIFJvdXRlck91dHB1dFByb3RvY29sLnZhbGlkYXRlUG9ydChwcm9wcy5wb3J0KTtcbiAgICByZXR1cm4gbmV3IFJvdXRlck91dHB1dFByb3RvY29sKFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucy5SVFAsIHtcbiAgICAgIHJ0cDoge1xuICAgICAgICBkZXN0aW5hdGlvbkFkZHJlc3M6IHByb3BzLmRlc3RpbmF0aW9uQWRkcmVzcyxcbiAgICAgICAgZGVzdGluYXRpb25Qb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgICBmb3J3YXJkRXJyb3JDb3JyZWN0aW9uOiBwcm9wcy5mb3J3YXJkRXJyb3JDb3JyZWN0aW9uLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBSSVNUIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgUm91dGVyT3V0cHV0UHJvdG9jb2wucmlzdCh7XG4gICAqICAgICAgZGVzdGluYXRpb25BZGRyZXNzOiAnMTAuMC4wLjEnLFxuICAgKiAgICAgIHBvcnQ6IDUwMDAsXG4gICAqICAgIH0pO1xuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgUklTVCBwcm90b2NvbCBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFJvdXRlck91dHB1dFByb3RvY29sIGluc3RhbmNlIGNvbmZpZ3VyZWQgZm9yIFJJU1RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmlzdChwcm9wczogUmlzdE91dHB1dFByb3RvY29sUHJvcHMpOiBSb3V0ZXJPdXRwdXRQcm90b2NvbCB7XG4gICAgUm91dGVyT3V0cHV0UHJvdG9jb2wudmFsaWRhdGVQb3J0KHByb3BzLnBvcnQpO1xuICAgIHJldHVybiBuZXcgUm91dGVyT3V0cHV0UHJvdG9jb2woUm91dGVyT3V0cHV0UHJvdG9jb2xPcHRpb25zLlJJU1QsIHtcbiAgICAgIHJpc3Q6IHtcbiAgICAgICAgZGVzdGluYXRpb25BZGRyZXNzOiBwcm9wcy5kZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgICAgIGRlc3RpbmF0aW9uUG9ydDogcHJvcHMucG9ydCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIFNSVCBMaXN0ZW5lciBwcm90b2NvbCBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqICAgIFJvdXRlck91dHB1dFByb3RvY29sLnNydExpc3RlbmVyKHtcbiAgICogICAgICBwb3J0OiA1MDAwLFxuICAgKiAgICAgIG1pbmltdW1MYXRlbmN5OiBEdXJhdGlvbi5taWxsaXMoMTI1KSxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBTUlQgTGlzdGVuZXIgcHJvdG9jb2wgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJPdXRwdXRQcm90b2NvbCBpbnN0YW5jZSBjb25maWd1cmVkIGZvciBTUlQgTGlzdGVuZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3J0TGlzdGVuZXIocHJvcHM6IFNydExpc3RlbmVyT3V0cHV0UHJvdG9jb2xQcm9wcyk6IFJvdXRlck91dHB1dFByb3RvY29sIHtcbiAgICBSb3V0ZXJPdXRwdXRQcm90b2NvbC52YWxpZGF0ZVBvcnQocHJvcHMucG9ydCk7XG4gICAgcmV0dXJuIG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbChSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMuU1JUX0xJU1RFTkVSLCB7XG4gICAgICBzcnRMaXN0ZW5lcjoge1xuICAgICAgICBwb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgICBtaW5pbXVtTGF0ZW5jeU1pbGxpc2Vjb25kczogcHJvcHMubWluaW11bUxhdGVuY3kudG9NaWxsaXNlY29uZHMoKSxcbiAgICAgIH0sXG4gICAgfSwgcHJvcHMuZW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBTUlQgQ2FsbGVyIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgUm91dGVyT3V0cHV0UHJvdG9jb2wuc3J0Q2FsbGVyKHtcbiAgICogICAgICBkZXN0aW5hdGlvbkFkZHJlc3M6ICcxMC4wLjAuMScsXG4gICAqICAgICAgZGVzdGluYXRpb25Qb3J0OiA1MDAwLFxuICAgKiAgICAgIG1pbmltdW1MYXRlbmN5OiBEdXJhdGlvbi5taWxsaXMoMTI1KSxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBTUlQgQ2FsbGVyIHByb3RvY29sIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVyT3V0cHV0UHJvdG9jb2wgaW5zdGFuY2UgY29uZmlndXJlZCBmb3IgU1JUIENhbGxlclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzcnRDYWxsZXIocHJvcHM6IFNydENhbGxlck91dHB1dFByb3RvY29sUHJvcHMpOiBSb3V0ZXJPdXRwdXRQcm90b2NvbCB7XG4gICAgUm91dGVyT3V0cHV0UHJvdG9jb2wudmFsaWRhdGVTcnRDYWxsZXJQb3J0KHByb3BzLmRlc3RpbmF0aW9uUG9ydCk7XG4gICAgcmV0dXJuIG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbChSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMuU1JUX0NBTExFUiwge1xuICAgICAgc3J0Q2FsbGVyOiB7XG4gICAgICAgIGRlc3RpbmF0aW9uQWRkcmVzczogcHJvcHMuZGVzdGluYXRpb25BZGRyZXNzLFxuICAgICAgICBkZXN0aW5hdGlvblBvcnQ6IHByb3BzLmRlc3RpbmF0aW9uUG9ydCxcbiAgICAgICAgbWluaW11bUxhdGVuY3lNaWxsaXNlY29uZHM6IHByb3BzLm1pbmltdW1MYXRlbmN5LnRvTWlsbGlzZWNvbmRzKCksXG4gICAgICAgIHN0cmVhbUlkOiBwcm9wcy5zdHJlYW1JZCxcbiAgICAgIH0sXG4gICAgfSwgcHJvcHMuZW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgcG9ydCBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlICgzMDAwLTMwMDAwKVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVQb3J0KHBvcnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHBvcnQpICYmIChwb3J0IDwgMzAwMCB8fCBwb3J0ID4gMzAwMDApKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFJvdXRlck91dHB1dFBvcnRSYW5nZWAsIGBQb3J0IG11c3QgYmUgYmV0d2VlbiAzMDAwIGFuZCAzMDAwMCwgZ290ICR7cG9ydH1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCBTUlQgQ2FsbGVyIHBvcnQgaXMgd2l0aGluIHRoZSB2YWxpZCByYW5nZSAoMC02NTUzNSlcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlU3J0Q2FsbGVyUG9ydChwb3J0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChwb3J0KSAmJiAocG9ydCA8IDAgfHwgcG9ydCA+IDY1NTM1KSkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBTcnRDYWxsZXJQb3J0UmFuZ2VgLCBgU1JUIENhbGxlciBwb3J0IG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2NTUzNSwgZ290ICR7cG9ydH1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9wcm90b2NvbE5hbWU6IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlnOiBDZm5Sb3V0ZXJPdXRwdXQuUm91dGVyT3V0cHV0UHJvdG9jb2xDb25maWd1cmF0aW9uUHJvcGVydHk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VuY3J5cHRpb24/OiBSb3V0ZXJTcnRFbmNyeXB0aW9uO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgcHJvdG9jb2xOYW1lOiBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMsXG4gICAgY29uZmlnOiBDZm5Sb3V0ZXJPdXRwdXQuUm91dGVyT3V0cHV0UHJvdG9jb2xDb25maWd1cmF0aW9uUHJvcGVydHksXG4gICAgZW5jcnlwdGlvbj86IFJvdXRlclNydEVuY3J5cHRpb24sXG4gICkge1xuICAgIHRoaXMuX3Byb3RvY29sTmFtZSA9IHByb3RvY29sTmFtZTtcbiAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5fZW5jcnlwdGlvbiA9IGVuY3J5cHRpb247XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGlzIHByb3RvY29sIHRvIGl0cyBDRk4tcmVhZHkgZm9ybS4gUmV0dXJucyB0aGUgcHJvdG9jb2wgaWRlbnRpZmllclxuICAgKiBhbmQgdGhlIENGTiBjb25maWd1cmF0aW9uIHNoYXBlIHdpdGggU1JUIGVuY3J5cHRpb24gYXV0by1yb2xlIG1hdGVyaWFsaXplZCBpZiBuZWVkZWQuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAgICAgICAgICAgICBDb25zdHJ1Y3QgdGhhdCBzY29wZXMgdGhlIGF1dG8tY3JlYXRlZCBlbmNyeXB0aW9uIHJvbGVcbiAgICogQHBhcmFtIHJvdXRlck91dHB1dEFybiAgIE9wdGlvbmFsIEFSTiBvZiB0aGUgY29uc3VtaW5nIHJvdXRlciBvdXRwdXQg4oCUIHdoZW4gcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZXMgdGhlIGF1dG8tY3JlYXRlZCBlbmNyeXB0aW9uIHJvbGUncyB0cnVzdCBwb2xpY3kuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QsIHJvdXRlck91dHB1dEFybj86IHN0cmluZyk6IHtcbiAgICBuYW1lOiBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnM7XG4gICAgY29uZmlnOiBDZm5Sb3V0ZXJPdXRwdXQuUm91dGVyT3V0cHV0UHJvdG9jb2xDb25maWd1cmF0aW9uUHJvcGVydHk7XG4gICAgZ3JhbnQ/OiBHcmFudDtcbiAgfSB7XG4gICAgaWYgKCF0aGlzLl9lbmNyeXB0aW9uKSB7XG4gICAgICByZXR1cm4geyBuYW1lOiB0aGlzLl9wcm90b2NvbE5hbWUsIGNvbmZpZzogdGhpcy5fY29uZmlnIH07XG4gICAgfVxuXG4gICAgY29uc3QgeyBjb25maWc6IGVuY3J5cHRpb25Db25maWd1cmF0aW9uLCBncmFudCB9ID0gcmVzb2x2ZVJvdXRlclNydEVuY3J5cHRpb24oc2NvcGUsICdFbmNyeXB0aW9uUm9sZScsIHRoaXMuX2VuY3J5cHRpb24sIHJvdXRlck91dHB1dEFybik7XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnNydExpc3RlbmVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiB0aGlzLl9wcm90b2NvbE5hbWUsXG4gICAgICAgIGNvbmZpZzogeyBzcnRMaXN0ZW5lcjogeyAuLi50aGlzLl9jb25maWcuc3J0TGlzdGVuZXIsIGVuY3J5cHRpb25Db25maWd1cmF0aW9uIH0gfSxcbiAgICAgICAgZ3JhbnQsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLnNydENhbGxlcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogdGhpcy5fcHJvdG9jb2xOYW1lLFxuICAgICAgICBjb25maWc6IHsgc3J0Q2FsbGVyOiB7IC4uLnRoaXMuX2NvbmZpZy5zcnRDYWxsZXIsIGVuY3J5cHRpb25Db25maWd1cmF0aW9uIH0gfSxcbiAgICAgICAgZ3JhbnQsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4geyBuYW1lOiB0aGlzLl9wcm90b2NvbE5hbWUsIGNvbmZpZzogdGhpcy5fY29uZmlnIH07XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBzdGFuZGFyZCBSb3V0ZXIgT3V0cHV0IGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFuZGFyZE91dHB1dENvbmZpZ3VyYXRpb25Qcm9wcyB7XG4gIC8qKiBOZXR3b3JrIGludGVyZmFjZSBmb3IgdGhlIFJvdXRlciBPdXRwdXQgKi9cbiAgcmVhZG9ubHkgbmV0d29ya0ludGVyZmFjZTogSVJvdXRlck5ldHdvcmtJbnRlcmZhY2U7XG4gIC8qKiBQcm90b2NvbCBjb25maWd1cmF0aW9uIGZvciB0aGUgb3V0cHV0ICovXG4gIHJlYWRvbmx5IHByb3RvY29sOiBSb3V0ZXJPdXRwdXRQcm90b2NvbDtcbiAgLyoqXG4gICAqIFRoZSBhdmFpbGFiaWxpdHkgem9uZSB3aGVyZSB0aGUgcm91dGVyIG91dHB1dCBpcyBsb2NhdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGFzc2lnbmVkIGJ5IHRoZSBNZWRpYUNvbm5lY3Qgc2VydmljZVxuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBNZWRpYUxpdmUgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGggc3BlY2lmaWMgaW5wdXQgY29ubmVjdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lZGlhTGl2ZUlucHV0Q29ubmVjdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIEFSTiBvZiB0aGUgTWVkaWFMaXZlIGlucHV0IHRvIHNlbmQgb3V0cHV0IHRvLlxuICAgKlxuICAgKiBOb3RlOiBUaGlzIHdpbGwgY2hhbmdlIHRvIGFjY2VwdCBhbiBJSW5wdXRSZWYgKHR5cGVkIE1lZGlhTGl2ZSBJbnB1dCByZWZlcmVuY2UpXG4gICAqIHdoZW4gdGhlIEBhd3MtY2RrL2F3cy1tZWRpYWxpdmUtYWxwaGEgTDIgY29uc3RydWN0IGlzIHJlbGVhc2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVkaWFMaXZlSW5wdXRBcm46IHN0cmluZztcbiAgLyoqIFBpcGVsaW5lIElEIGZvciBNZWRpYUxpdmUgaW5wdXQgKi9cbiAgcmVhZG9ubHkgbWVkaWFMaXZlUGlwZWxpbmVJZDogTWVkaWFMaXZlUGlwZWxpbmU7XG4gIC8qKlxuICAgKiBPcHRpb25hbCB0cmFuc2l0IGVuY3J5cHRpb24gY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCAtIEF1dG9tYXRpYyBlbmNyeXB0aW9uIHdpbGwgYmUgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbj86IFRyYW5zaXRFbmNyeXB0aW9uO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIE1lZGlhTGl2ZSBSb3V0ZXIgT3V0cHV0IGNvbmZpZ3VyYXRpb24gd2l0aG91dCBzcGVjaWZpYyBpbnB1dCBjb25uZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFMaXZlTm9JbnB1dENvbm5lY3Rpb25Qcm9wcyB7XG4gIC8qKiBBdmFpbGFiaWxpdHkgem9uZSBmb3IgdGhlIHJvdXRlciBvdXRwdXQgd2hlbiBub3QgY29ubmVjdGluZyB0byBhIHNwZWNpZmljIGlucHV0ICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHRyYW5zaXQgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IC0gQXV0b21hdGljIGVuY3J5cHRpb24gd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgTWVkaWFDb25uZWN0IEZsb3cgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGggc3BlY2lmaWMgZmxvdyBjb25uZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFDb25uZWN0Rmxvd0Nvbm5lY3Rpb25Qcm9wcyB7XG4gIC8qKiBNZWRpYUNvbm5lY3QgRmxvdyB0byBzZW5kIG91dHB1dCB0byAqL1xuICByZWFkb25seSBmbG93OiBJRmxvdztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHRyYW5zaXQgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IC0gQXV0b21hdGljIGVuY3J5cHRpb24gd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgTWVkaWFDb25uZWN0IEZsb3cgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGhvdXQgc3BlY2lmaWMgZmxvdyBjb25uZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFDb25uZWN0Rmxvd05vQ29ubmVjdGlvblByb3BzIHtcbiAgLyoqIEF2YWlsYWJpbGl0eSB6b25lIGZvciB0aGUgcm91dGVyIG91dHB1dCB3aGVuIG5vdCBjb25uZWN0aW5nIHRvIGEgc3BlY2lmaWMgZmxvdyAqL1xuICByZWFkb25seSBhdmFpbGFiaWxpdHlab25lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcHRpb25hbCB0cmFuc2l0IGVuY3J5cHRpb24gY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCAtIEF1dG9tYXRpYyBlbmNyeXB0aW9uIHdpbGwgYmUgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbj86IFRyYW5zaXRFbmNyeXB0aW9uO1xufVxuXG4vKipcbiAqIEZhY3RvcnkgY2xhc3MgZm9yIGNyZWF0aW5nIFJvdXRlciBPdXRwdXQgY29uZmlndXJhdGlvbnNcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlIGEgc3RhbmRhcmQgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGggYSBzaW5nbGUgcHJvdG9jb2xcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgZGVjbGFyZSBjb25zdCBuZXR3b3JrSW50ZXJmYWNlOiBSb3V0ZXJOZXR3b3JrSW50ZXJmYWNlO1xuICAgKlxuICAgKiAgICBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uLnN0YW5kYXJkKHtcbiAgICogICAgICBuZXR3b3JrSW50ZXJmYWNlLFxuICAgKiAgICAgIHByb3RvY29sOiBSb3V0ZXJPdXRwdXRQcm90b2NvbC5ydHAoe1xuICAgKiAgICAgICAgZGVzdGluYXRpb25BZGRyZXNzOiAnMTAuMC4wLjEnLFxuICAgKiAgICAgICAgcG9ydDogNTAwMCxcbiAgICogICAgICB9KSxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBTdGFuZGFyZCBjb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiBpbnN0YW5jZSBmb3Igc3RhbmRhcmQgc2V0dXBcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3RhbmRhcmQocHJvcHM6IFN0YW5kYXJkT3V0cHV0Q29uZmlndXJhdGlvblByb3BzKTogUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBTdGFuZGFyZFJvdXRlck91dHB1dENvbmZpZyhwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgTWVkaWFMaXZlIFJvdXRlciBPdXRwdXQgY29uZmlndXJhdGlvbiB3aXRoIGEgc3BlY2lmaWMgaW5wdXQgY29ubmVjdGlvbi5cbiAgICpcbiAgICogVXNlIHRoaXMgd2hlbiB0aGUgTWVkaWFMaXZlIGlucHV0IGFscmVhZHkgZXhpc3RzIGFuZCB5b3Ugd2FudCB0byBjb25uZWN0IGltbWVkaWF0ZWx5LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiAgICBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uLm1lZGlhTGl2ZUlucHV0KHtcbiAgICogICAgICBtZWRpYUxpdmVJbnB1dEFybjogJ2Fybjphd3M6bWVkaWFsaXZlOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6aW5wdXQ6MTIzNDU2NycsXG4gICAqICAgICAgbWVkaWFMaXZlUGlwZWxpbmVJZDogTWVkaWFMaXZlUGlwZWxpbmUuUElQRUxJTkVfMCxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBNZWRpYUxpdmUgaW5wdXQgY29ubmVjdGlvbiBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24gaW5zdGFuY2UgZm9yIE1lZGlhTGl2ZSBzZXR1cCB3aXRoIGlucHV0IGNvbm5lY3Rpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWVkaWFMaXZlSW5wdXQocHJvcHM6IE1lZGlhTGl2ZUlucHV0Q29ubmVjdGlvblByb3BzKTogUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBNZWRpYUxpdmVJbnB1dFJvdXRlck91dHB1dENvbmZpZyh7XG4gICAgICBtZWRpYUxpdmVJbnB1dEFybjogcHJvcHMubWVkaWFMaXZlSW5wdXRBcm4sXG4gICAgICBtZWRpYUxpdmVQaXBlbGluZUlkOiBwcm9wcy5tZWRpYUxpdmVQaXBlbGluZUlkLFxuICAgICAgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbjogcHJvcHMuZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBNZWRpYUxpdmUgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGhvdXQgYSBzcGVjaWZpYyBpbnB1dCBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyB3aGVuIHlvdSB3YW50IHRvIHNldCB1cCB0aGUgcm91dGVyIG91dHB1dCBiZWZvcmUgdGhlIE1lZGlhTGl2ZSBpbnB1dCBleGlzdHMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqICAgIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ubWVkaWFMaXZlSW5wdXRXaXRob3V0Q29ubmVjdGlvbih7XG4gICAqICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogJ3VzLWVhc3QtMWEnLFxuICAgKiAgICB9KTtcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIE1lZGlhTGl2ZSBubyBpbnB1dCBjb25uZWN0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiBpbnN0YW5jZSBmb3IgTWVkaWFMaXZlIHNldHVwIHdpdGhvdXQgaW5wdXQgY29ubmVjdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtZWRpYUxpdmVJbnB1dFdpdGhvdXRDb25uZWN0aW9uKHByb3BzOiBNZWRpYUxpdmVOb0lucHV0Q29ubmVjdGlvblByb3BzKTogUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBNZWRpYUxpdmVJbnB1dFJvdXRlck91dHB1dENvbmZpZyhcbiAgICAgIHsgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbjogcHJvcHMuZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbiB9LFxuICAgICAgcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIE1lZGlhQ29ubmVjdCBGbG93IFJvdXRlciBPdXRwdXQgY29uZmlndXJhdGlvbiB3aXRoIGEgc3BlY2lmaWMgZmxvdyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyB3aGVuIHRoZSB0YXJnZXQgZmxvdyBhbHJlYWR5IGV4aXN0cyBhbmQgeW91IHdhbnQgdG8gY29ubmVjdCBpbW1lZGlhdGVseS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgZGVjbGFyZSBjb25zdCBmbG93OiBGbG93O1xuICAgKlxuICAgKiAgICBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uLm1lZGlhQ29ubmVjdEZsb3coe1xuICAgKiAgICAgIGZsb3csXG4gICAqICAgIH0pO1xuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgTWVkaWFDb25uZWN0IEZsb3cgY29ubmVjdGlvbiBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24gaW5zdGFuY2UgZm9yIE1lZGlhQ29ubmVjdCBGbG93IHNldHVwIHdpdGggZmxvdyBjb25uZWN0aW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1lZGlhQ29ubmVjdEZsb3cocHJvcHM6IE1lZGlhQ29ubmVjdEZsb3dDb25uZWN0aW9uUHJvcHMpOiBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IE1lZGlhQ29ubmVjdEZsb3dSb3V0ZXJPdXRwdXRDb25maWcoe1xuICAgICAgZmxvdzogcHJvcHMuZmxvdyxcbiAgICAgIGRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb246IHByb3BzLmRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb24sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgTWVkaWFDb25uZWN0IEZsb3cgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGhvdXQgYSBzcGVjaWZpYyBmbG93IGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIFVzZSB0aGlzIHdoZW4geW91IHdhbnQgdG8gc2V0IHVwIHRoZSByb3V0ZXIgb3V0cHV0IGJlZm9yZSB0aGUgdGFyZ2V0IGZsb3cgZXhpc3RzLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiAgICBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uLm1lZGlhQ29ubmVjdEZsb3dXaXRob3V0Q29ubmVjdGlvbih7XG4gICAqICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogJ3VzLWVhc3QtMWEnLFxuICAgKiAgICB9KTtcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIE1lZGlhQ29ubmVjdCBGbG93IG5vIGNvbm5lY3Rpb24gcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIGluc3RhbmNlIGZvciBNZWRpYUNvbm5lY3QgRmxvdyBzZXR1cCB3aXRob3V0IGZsb3cgY29ubmVjdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtZWRpYUNvbm5lY3RGbG93V2l0aG91dENvbm5lY3Rpb24ocHJvcHM6IE1lZGlhQ29ubmVjdEZsb3dOb0Nvbm5lY3Rpb25Qcm9wcyk6IFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBuZXcgTWVkaWFDb25uZWN0Rmxvd1JvdXRlck91dHB1dENvbmZpZyhcbiAgICAgIHsgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbjogcHJvcHMuZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbiB9LFxuICAgICAgcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhpcyBjb25maWd1cmF0aW9uIHRvIGl0cyBDbG91ZEZvcm1hdGlvbiBzaGFwZS4gQ2FsbGVkIGJ5IHRoZSBSb3V0ZXJPdXRwdXRcbiAgICogY29uc3RydWN0b3Ig4oCUIGVhY2ggY29uY3JldGUgc3ViY2xhc3Mgc3VwcGxpZXMgaXRzIG93biB2YXJpYW50LXNwZWNpZmljIHJlbmRlcmluZy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCwgcm91dGVyT3V0cHV0QXJuPzogc3RyaW5nKToge1xuICAgIGNvbmZpZzogQ2ZuUm91dGVyT3V0cHV0LlJvdXRlck91dHB1dENvbmZpZ3VyYXRpb25Qcm9wZXJ0eTsgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZzsgZ3JhbnQ/OiBHcmFudDtcbiAgfTtcbn1cblxuLyoqXG4gKiBDb25jcmV0ZSB2YXJpYW50OiBzdGFuZGFyZCAoc2luZ2xlLXByb3RvY29sKSByb3V0ZXIgb3V0cHV0IGNvbmZpZ3VyYXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgU3RhbmRhcmRSb3V0ZXJPdXRwdXRDb25maWcgZXh0ZW5kcyBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogU3RhbmRhcmRPdXRwdXRDb25maWd1cmF0aW9uUHJvcHMpIHsgc3VwZXIoKTsgfVxuXG4gIHB1YmxpYyBfYmluZChzY29wZTogQ29uc3RydWN0LCByb3V0ZXJPdXRwdXRBcm4/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBwcm90b2NvbCA9IHRoaXMucHJvcHMucHJvdG9jb2wuX2JpbmQoc2NvcGUsIHJvdXRlck91dHB1dEFybik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBzdGFuZGFyZDoge1xuICAgICAgICAgIG5ldHdvcmtJbnRlcmZhY2VBcm46IHRoaXMucHJvcHMubmV0d29ya0ludGVyZmFjZS5yb3V0ZXJOZXR3b3JrSW50ZXJmYWNlQXJuLFxuICAgICAgICAgIHByb3RvY29sOiBwcm90b2NvbC5uYW1lLnZhbHVlLFxuICAgICAgICAgIHByb3RvY29sQ29uZmlndXJhdGlvbjogcHJvdG9jb2wuY29uZmlnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IHRoaXMucHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgIGdyYW50OiBwcm90b2NvbC5ncmFudCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQ29uY3JldGUgdmFyaWFudDogTWVkaWFMaXZlIElucHV0IHJvdXRlciBvdXRwdXQgY29uZmlndXJhdGlvbiAod2l0aCBvciB3aXRob3V0IGNvbm5lY3Rpb24pLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIE1lZGlhTGl2ZUlucHV0Um91dGVyT3V0cHV0Q29uZmlnIGV4dGVuZHMgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogTWVkaWFMaXZlSW5wdXRSb3V0ZXJPdXRwdXRPcHRpb25zLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZyxcbiAgKSB7IHN1cGVyKCk7IH1cblxuICBwdWJsaWMgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCwgcm91dGVyT3V0cHV0QXJuPzogc3RyaW5nKSB7XG4gICAgY29uc3QgdHJhbnNpdCA9IHJlc29sdmVUcmFuc2l0RW5jcnlwdGlvbihzY29wZSwgJ0Rlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb25Sb2xlJywgdGhpcy5vcHRpb25zLmRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb24sIHJvdXRlck91dHB1dEFybik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBtZWRpYUxpdmVJbnB1dDoge1xuICAgICAgICAgIG1lZGlhTGl2ZUlucHV0QXJuOiB0aGlzLm9wdGlvbnMubWVkaWFMaXZlSW5wdXRBcm4sXG4gICAgICAgICAgbWVkaWFMaXZlUGlwZWxpbmVJZDogdGhpcy5vcHRpb25zLm1lZGlhTGl2ZVBpcGVsaW5lSWQsXG4gICAgICAgICAgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbjogdHJhbnNpdC5jb25maWcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogdGhpcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgZ3JhbnQ6IHRyYW5zaXQuZ3JhbnQsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEludGVybmFsIG9wdGlvbnMgZm9yIHtAbGluayBNZWRpYUxpdmVJbnB1dFJvdXRlck91dHB1dENvbmZpZ30uXG4gKi9cbmludGVyZmFjZSBNZWRpYUxpdmVJbnB1dFJvdXRlck91dHB1dE9wdGlvbnMge1xuICByZWFkb25seSBtZWRpYUxpdmVJbnB1dEFybj86IHN0cmluZztcbiAgcmVhZG9ubHkgbWVkaWFMaXZlUGlwZWxpbmVJZD86IE1lZGlhTGl2ZVBpcGVsaW5lO1xuICByZWFkb25seSBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogQ29uY3JldGUgdmFyaWFudDogTWVkaWFDb25uZWN0IEZsb3cgcm91dGVyIG91dHB1dCBjb25maWd1cmF0aW9uICh3aXRoIG9yIHdpdGhvdXQgY29ubmVjdGlvbikuXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgTWVkaWFDb25uZWN0Rmxvd1JvdXRlck91dHB1dENvbmZpZyBleHRlbmRzIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE1lZGlhQ29ubmVjdEZsb3dSb3V0ZXJPdXRwdXRPcHRpb25zLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZyxcbiAgKSB7IHN1cGVyKCk7IH1cblxuICBwdWJsaWMgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCwgcm91dGVyT3V0cHV0QXJuPzogc3RyaW5nKSB7XG4gICAgY29uc3QgdHJhbnNpdCA9IHJlc29sdmVUcmFuc2l0RW5jcnlwdGlvbihzY29wZSwgJ0Rlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb25Sb2xlJywgdGhpcy5vcHRpb25zLmRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb24sIHJvdXRlck91dHB1dEFybik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBtZWRpYUNvbm5lY3RGbG93OiB7XG4gICAgICAgICAgZmxvd0FybjogdGhpcy5vcHRpb25zLmZsb3c/LmZsb3dBcm4sXG4gICAgICAgICAgZmxvd1NvdXJjZUFybjogdGhpcy5vcHRpb25zLmZsb3c/LnNvdXJjZUFybixcbiAgICAgICAgICBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uOiB0cmFuc2l0LmNvbmZpZyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhdmFpbGFiaWxpdHlab25lOiB0aGlzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICBncmFudDogdHJhbnNpdC5ncmFudCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogSW50ZXJuYWwgb3B0aW9ucyBmb3Ige0BsaW5rIE1lZGlhQ29ubmVjdEZsb3dSb3V0ZXJPdXRwdXRDb25maWd9LlxuICovXG5pbnRlcmZhY2UgTWVkaWFDb25uZWN0Rmxvd1JvdXRlck91dHB1dE9wdGlvbnMge1xuICByZWFkb25seSBmbG93PzogSUZsb3c7XG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb24/OiBUcmFuc2l0RW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBBIE1lZGlhQ29ubmVjdCBSb3V0ZXIgT3V0cHV0IHRoYXQgc2VuZHMgbWVkaWEgc3RyZWFtcyB0byBkZXN0aW5hdGlvbnMuXG4gKlxuICogUm91dGVyIE91dHB1dHMgc3VwcG9ydCBtdWx0aXBsZSBjb25maWd1cmF0aW9uIHR5cGVzOlxuICogLSBTdGFuZGFyZDogU2luZ2xlIHByb3RvY29sIG91dHB1dFxuICogLSBNZWRpYUxpdmUgSW5wdXQ6IE91dHB1dCB0byBBV1MgRWxlbWVudGFsIE1lZGlhTGl2ZVxuICogLSBNZWRpYUNvbm5lY3QgRmxvdzogT3V0cHV0IHRvIGFub3RoZXIgTWVkaWFDb25uZWN0IEZsb3dcbiAqL1xuYWJzdHJhY3QgY2xhc3MgUm91dGVyT3V0cHV0QmFzZSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVJvdXRlck91dHB1dCB7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSByb3V0ZXJPdXRwdXRBcm46IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHJvdXRlck91dHB1dE5hbWU6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHJvdXRlck91dHB1dElkOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBpcEFkZHJlc3M6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogQSByZWZlcmVuY2UgdG8gdGhpcyBSb3V0ZXIgT3V0cHV0IHJlc291cmNlLlxuICAgKiBSZXF1aXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgSVJvdXRlck91dHB1dFJlZiBpbnRlcmZhY2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvdXRlck91dHB1dFJlZigpOiBSb3V0ZXJPdXRwdXRSZWZlcmVuY2Uge1xuICAgIHJldHVybiB7IHJvdXRlck91dHB1dEFybjogdGhpcy5yb3V0ZXJPdXRwdXRBcm4gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBDbG91ZFdhdGNoIG1ldHJpYyBmb3IgdGhpcyByb3V0ZXIgb3V0cHV0LlxuICAgKi9cbiAgcHVibGljIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIG5hbWVzcGFjZTogJ0FXUy9NZWRpYUNvbm5lY3QnLFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgIFJvdXRlck91dHB1dEFSTjogdGhpcy5yb3V0ZXJPdXRwdXRBcm4sXG4gICAgICAgIC4uLnByb3BzPy5kaW1lbnNpb25zTWFwLFxuICAgICAgfSxcbiAgICB9KS5hdHRhY2hUbyh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBiaXRyYXRlIG9mIHRoZSByb3V0ZXIgb3V0cHV0J3MgcGF5bG9hZC5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNCaXRyYXRlKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdSb3V0ZXJPdXRwdXRCaXRSYXRlJywge1xuICAgICAgc3RhdGlzdGljOiAnYXZnJyxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICB1bml0OiBVbml0LkJJVFNfUEVSX1NFQ09ORCxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHRvdGFsIG51bWJlciBvZiBwYWNrZXRzIHNlbnQgYnkgdGhlIHJvdXRlciBvdXRwdXQuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljVG90YWxQYWNrZXRzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdSb3V0ZXJPdXRwdXRUb3RhbFBhY2tldHMnLCB7XG4gICAgICBzdGF0aXN0aWM6ICdzdW0nLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIHVuaXQ6IFVuaXQuQ09VTlQsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSByb3V0ZXIgb3V0cHV0IGNvbm5lY3Rpb24gc3RhdGUgKDEgY29ubmVjdGVkLCAwIGRpc2Nvbm5lY3RlZCkuIEFwcGxpZXMgdG8gU1JUIG91dHB1dHMgb25seS5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNDb25uZWN0ZWQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ1JvdXRlck91dHB1dENvbm5lY3RlZCcsIHtcbiAgICAgIHN0YXRpc3RpYzogJ21pbicsXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgdW5pdDogVW5pdC5OT05FLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgbnVtYmVyIG9mIHJldHJhbnNtaXR0ZWQgcGFja2V0cyByZXF1ZXN0ZWQgdGhyb3VnaCBBUlEuIEFwcGxpZXMgdG8gUklTVCBhbmQgU1JUIG91dHB1dHMuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQXJxUmVxdWVzdHMocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ1JvdXRlck91dHB1dEFSUVJlcXVlc3RzJywge1xuICAgICAgc3RhdGlzdGljOiAnc3VtJyxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICB1bml0OiBVbml0LkNPVU5ULFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuIEFXUyBFbGVtZW50YWwgTWVkaWFDb25uZWN0IFJvdXRlciBPdXRwdXQuXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBSb3V0ZXJPdXRwdXQgZXh0ZW5kcyBSb3V0ZXJPdXRwdXRCYXNlIGltcGxlbWVudHMgSVJvdXRlck91dHB1dCB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLW1lZGlhY29ubmVjdC1hbHBoYS5Sb3V0ZXJPdXRwdXQnO1xuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgUm91dGVyIE91dHB1dCBmcm9tIGl0cyBBUk4uXG4gICAqXG4gICAqIFRoZSBBUk4gb25seSBjb250YWlucyB0aGUgc2VydmljZS1nZW5lcmF0ZWQgSUQgKG5vdCB0aGUgcm91dGVyIG91dHB1dCBuYW1lKS4gQWNjZXNzaW5nXG4gICAqIGByb3V0ZXJPdXRwdXROYW1lYCBvbiBhbiBBUk4gaW1wb3J0IHRocm93cyDigJQgdXNlIGBmcm9tUm91dGVyT3V0cHV0QXR0cmlidXRlcygpYCB0byBwcm92aWRlXG4gICAqIHRoZSBuYW1lIGV4cGxpY2l0bHkuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gcm91dGVyT3V0cHV0QXJuIFRoZSBBUk4gb2YgdGhlIFJvdXRlciBPdXRwdXRcbiAgICogQHJldHVybnMgQSBSb3V0ZXIgT3V0cHV0IGNvbnN0cnVjdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tUm91dGVyT3V0cHV0QXJuKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHJvdXRlck91dHB1dEFybjogc3RyaW5nKTogSVJvdXRlck91dHB1dCB7XG4gICAgcmV0dXJuIFJvdXRlck91dHB1dC5mcm9tUm91dGVyT3V0cHV0QXR0cmlidXRlcyhzY29wZSwgaWQsIHsgcm91dGVyT3V0cHV0QXJuIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBSb3V0ZXIgT3V0cHV0IGZyb20gYXR0cmlidXRlcy5cbiAgICpcbiAgICogVXNlIHRoaXMgd2hlbiB5b3UgbmVlZCB0byByZWZlcmVuY2UgYSByb3V0ZXIgb3V0cHV0IGJ5IG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIFJvdXRlciBPdXRwdXQgYXR0cmlidXRlc1xuICAgKiBAcmV0dXJucyBBIFJvdXRlciBPdXRwdXQgY29uc3RydWN0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Sb3V0ZXJPdXRwdXRBdHRyaWJ1dGVzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBSb3V0ZXJPdXRwdXRBdHRyaWJ1dGVzKTogSVJvdXRlck91dHB1dCB7XG4gICAgLy8gRGVyaXZlIHRoZSBJRCBmcm9tIHRoZSBBUk4gdXNpbmcgQ0ZOIGludHJpbnNpY3Mgc28gdGhpcyB3b3JrcyB3aXRoIHRva2VuIEFSTnMgdG9vLlxuICAgIC8vIFRoZSBBUk4gZm9ybWF0IGlzIGFybjphd3M6bWVkaWFjb25uZWN0OjxyZWdpb24+OjxhY2NvdW50Pjpyb3V0ZXJPdXRwdXQ6PGlkPiwgc28gdGhlXG4gICAgLy8gcmVzb3VyY2UgbmFtZSBpcyB0aGUgSUQuXG4gICAgY29uc3Qgcm91dGVyT3V0cHV0SWQgPSBhdHRycy5yb3V0ZXJPdXRwdXRJZCA/PyBleHRyYWN0Um91dGVyT3V0cHV0SWQoYXR0cnMucm91dGVyT3V0cHV0QXJuKTtcblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFJvdXRlck91dHB1dEJhc2UgaW1wbGVtZW50cyBJUm91dGVyT3V0cHV0IHtcbiAgICAgIHB1YmxpYyByZWFkb25seSByb3V0ZXJPdXRwdXRBcm4gPSBhdHRycy5yb3V0ZXJPdXRwdXRBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcm91dGVyT3V0cHV0SWQgPSByb3V0ZXJPdXRwdXRJZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlZEF0ID0gdW5kZWZpbmVkO1xuXG4gICAgICBwdWJsaWMgZ2V0IHJvdXRlck91dHB1dE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGF0dHJzLnJvdXRlck91dHB1dE5hbWUpIHJldHVybiBhdHRycy5yb3V0ZXJPdXRwdXROYW1lO1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGxpdGBSb3V0ZXJPdXRwdXROYW1lTm90UHJvdmlkZWRgLFxuICAgICAgICAgIGAncm91dGVyT3V0cHV0TmFtZScgd2FzIG5vdCBwcm92aWRlZCB3aGVuIGltcG9ydGluZyBSb3V0ZXJPdXRwdXQgJHt0aGlzLm5vZGUucGF0aH07IHByb3ZpZGUgaXQgaW4gZnJvbVJvdXRlck91dHB1dEF0dHJpYnV0ZXMoKWAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcHVibGljIGdldCBpcEFkZHJlc3MoKTogc3RyaW5nIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBsaXRgUm91dGVyT3V0cHV0SXBBZGRyZXNzTm90UHJvdmlkZWRgLFxuICAgICAgICAgIGAnaXBBZGRyZXNzJyBpcyBub3QgYXZhaWxhYmxlIG9uIGltcG9ydGVkIFJvdXRlck91dHB1dCAke3RoaXMubm9kZS5wYXRofWAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIGJpdHJhdGUgaW4gTWJwcyBmb3IgYSBrbm93biB0aWVyLCBvciB1bmRlZmluZWQgZm9yIGN1c3RvbSB0aWVycy5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHRpZXJMaW1pdE1icHModGllcjogUm91dGVyT3V0cHV0VGllcik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRpZXIudmFsdWUgPT09IFJvdXRlck91dHB1dFRpZXIuT1VUUFVUXzIwLnZhbHVlKSByZXR1cm4gMjA7XG4gICAgaWYgKHRpZXIudmFsdWUgPT09IFJvdXRlck91dHB1dFRpZXIuT1VUUFVUXzUwLnZhbHVlKSByZXR1cm4gNTA7XG4gICAgaWYgKHRpZXIudmFsdWUgPT09IFJvdXRlck91dHB1dFRpZXIuT1VUUFVUXzEwMC52YWx1ZSkgcmV0dXJuIDEwMDtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlck91dHB1dEFybjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcm91dGVyT3V0cHV0TmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcm91dGVyT3V0cHV0SWQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGlwQWRkcmVzczogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSb3V0ZXJPdXRwdXRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy5yb3V0ZXJPdXRwdXROYW1lID8/IExhenkuc3RyaW5nKHsgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiAxMjggfSkgfSksXG4gICAgfSk7XG5cbiAgICAvLyBWYWxpZGF0ZSByb3V0ZXIgb3V0cHV0IG5hbWUgaWYgcHJvdmlkZWRcbiAgICBpZiAocHJvcHMucm91dGVyT3V0cHV0TmFtZSAhPSBudWxsICYmIHByb3BzLnJvdXRlck91dHB1dE5hbWUgIT09ICcnICYmICFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMucm91dGVyT3V0cHV0TmFtZSkpIHtcbiAgICAgIGlmIChwcm9wcy5yb3V0ZXJPdXRwdXROYW1lLmxlbmd0aCA+IDEyOCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBSb3V0ZXJPdXRwdXROYW1lTGVuZ3RoYCwgYFJvdXRlciBvdXRwdXQgbmFtZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTI4IGNoYXJhY3RlcnMsIGdvdCAke3Byb3BzLnJvdXRlck91dHB1dE5hbWUubGVuZ3RofWAsIHRoaXMpO1xuICAgICAgfVxuICAgICAgaWYgKCEvXlthLXpBLVowLTlfLV0rJC8udGVzdChwcm9wcy5yb3V0ZXJPdXRwdXROYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBSb3V0ZXJPdXRwdXROYW1lRm9ybWF0YCwgYFJvdXRlciBvdXRwdXQgbmFtZSBtdXN0IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgaHlwaGVucywgYW5kIHVuZGVyc2NvcmVzLCBnb3QgJyR7cHJvcHMucm91dGVyT3V0cHV0TmFtZX0nYCwgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbWF4aW11bSBiaXRyYXRlXG4gICAgaWYgKCFwcm9wcy5tYXhpbXVtQml0cmF0ZS5pc1VucmVzb2x2ZWQoKSAmJiBwcm9wcy5tYXhpbXVtQml0cmF0ZS50b0JwcygpIDwgMTAwMDAwMCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgUm91dGVyT3V0cHV0TWluQml0cmF0ZWAsIGBNYXhpbXVtIGJpdHJhdGUgbXVzdCBiZSBhdCBsZWFzdCAxLDAwMCwwMDAgYml0cy9zICgxIE1icHMpLCBnb3QgJHtwcm9wcy5tYXhpbXVtQml0cmF0ZS50b0JwcygpfWAsIHRoaXMpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGJpdHJhdGUgZG9lcyBub3QgZXhjZWVkIHRpZXIgbGltaXRcbiAgICBjb25zdCByZXNvbHZlZFRpZXIgPSBwcm9wcy50aWVyID8/IFJvdXRlck91dHB1dFRpZXIuT1VUUFVUXzIwO1xuICAgIGNvbnN0IHRpZXJNYnBzID0gUm91dGVyT3V0cHV0LnRpZXJMaW1pdE1icHMocmVzb2x2ZWRUaWVyKTtcbiAgICBpZiAoZXhjZWVkc1JvdXRlclRpZXJCaXRyYXRlKHRpZXJNYnBzLCBwcm9wcy5tYXhpbXVtQml0cmF0ZSkpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YFJvdXRlck91dHB1dEJpdHJhdGVFeGNlZWRzVGllcmAsIGBNYXhpbXVtIGJpdHJhdGUgJHtwcm9wcy5tYXhpbXVtQml0cmF0ZS50b0JwcygpIC8gMV8wMDBfMDAwfSBNYnBzIGV4Y2VlZHMgdGhlICR7cmVzb2x2ZWRUaWVyLnZhbHVlfSB0aWVyIGxpbWl0IG9mICR7dGllck1icHN9IE1icHNgLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBtYWludGVuYW5jZSB0aW1lIGZvcm1hdFxuICAgIGlmIChwcm9wcy5tYWludGVuYW5jZUNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHZhbGlkYXRlTWFpbnRlbmFuY2VUaW1lKHByb3BzLm1haW50ZW5hbmNlQ29uZmlndXJhdGlvbi50aW1lKTtcbiAgICB9XG5cbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgdGFyZ2V0UmVnaW9uID0gcHJvcHMucmVnaW9uTmFtZSA/PyBzdGFjay5yZWdpb247XG5cbiAgICAvLyBXaWxkY2FyZCB0aGUgaWQg4oCUIHBpbm5pbmcgdGhlIGxpdmUgQVJOIChhdHRyQXJuKSB3b3VsZCBjcmVhdGUgYSByb2xlIOKGkiByb3V0ZXItb3V0cHV0IOKGkiByb2xlIGN5Y2xlLlxuICAgIGNvbnN0IHJvdXRlck91dHB1dEFybiA9IHN0YWNrLmZvcm1hdEFybih7XG4gICAgICBzZXJ2aWNlOiAnbWVkaWFjb25uZWN0JyxcbiAgICAgIHJlZ2lvbjogdGFyZ2V0UmVnaW9uLFxuICAgICAgcmVzb3VyY2U6ICdyb3V0ZXJPdXRwdXQnLFxuICAgICAgcmVzb3VyY2VOYW1lOiAnKicsXG4gICAgICBhcm5Gb3JtYXQ6IEFybkZvcm1hdC5DT0xPTl9SRVNPVVJDRV9OQU1FLFxuICAgIH0pO1xuXG4gICAgY29uc3QgY29uZmlnQmluZCA9IHByb3BzLmNvbmZpZ3VyYXRpb24uX2JpbmQodGhpcywgcm91dGVyT3V0cHV0QXJuKTtcblxuICAgIC8vIENoZWNrIHRvIHNlZSBpZiByZWdpb24gc3BlY2lmaWVkIGlzIGFsc28gY29tcGF0aWJsZSB3aXRoIEFaIGNvbmZpZ3VyZWQgZm9yIHNvbWUgb2YgdGhlIFJvdXRlciBPdXRwdXRzIGNvbmZpZ3VyYXRpb25zXG4gICAgaWYgKGNvbmZpZ0JpbmQuYXZhaWxhYmlsaXR5Wm9uZSAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKGNvbmZpZ0JpbmQuYXZhaWxhYmlsaXR5Wm9uZSkgJiYgIVRva2VuLmlzVW5yZXNvbHZlZCh0YXJnZXRSZWdpb24pXG4gICAgICAmJiAhY29uZmlnQmluZC5hdmFpbGFiaWxpdHlab25lLnN0YXJ0c1dpdGgodGFyZ2V0UmVnaW9uKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgUm91dGVyT3V0cHV0QXpSZWdpb25NaXNtYXRjaGAsIGBBdmFpbGFiaWxpdHkgem9uZSAnJHtjb25maWdCaW5kLmF2YWlsYWJpbGl0eVpvbmV9JyBtdXN0IGJlIHdpdGhpbiByZWdpb24gJyR7dGFyZ2V0UmVnaW9ufSdgLCB0aGlzKTtcbiAgICB9XG5cbiAgICBjb25zdCByb3V0ZXJPdXRwdXQgPSBuZXcgQ2ZuUm91dGVyT3V0cHV0KHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgICAgbWF4aW11bUJpdHJhdGU6IHByb3BzLm1heGltdW1CaXRyYXRlLnRvQnBzKCksXG4gICAgICByb3V0aW5nU2NvcGU6IHByb3BzLnJvdXRpbmdTY29wZS52YWx1ZSxcbiAgICAgIHRpZXI6IChwcm9wcy50aWVyID8/IFJvdXRlck91dHB1dFRpZXIuT1VUUFVUXzIwKS52YWx1ZSxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IGNvbmZpZ0JpbmQuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgIG1haW50ZW5hbmNlQ29uZmlndXJhdGlvbjogcHJvcHMubWFpbnRlbmFuY2VDb25maWd1cmF0aW9uID8ge1xuICAgICAgICBwcmVmZXJyZWREYXlUaW1lOiBwcm9wcy5tYWludGVuYW5jZUNvbmZpZ3VyYXRpb24sXG4gICAgICB9IDoge1xuICAgICAgICBkZWZhdWx0OiB7fSxcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmF0aW9uOiBjb25maWdCaW5kLmNvbmZpZyxcbiAgICAgIHJlZ2lvbk5hbWU6IHRhcmdldFJlZ2lvbixcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MgPyByZW5kZXJUYWdzKHByb3BzLnRhZ3MpIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yb3V0ZXJPdXRwdXRBcm4gPSByb3V0ZXJPdXRwdXQuYXR0ckFybjtcbiAgICB0aGlzLnJvdXRlck91dHB1dE5hbWUgPSB0aGlzLnBoeXNpY2FsTmFtZTtcbiAgICB0aGlzLnJvdXRlck91dHB1dElkID0gcm91dGVyT3V0cHV0LmF0dHJJZDtcbiAgICB0aGlzLmlwQWRkcmVzcyA9IHJvdXRlck91dHB1dC5hdHRySXBBZGRyZXNzO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gcm91dGVyT3V0cHV0LmF0dHJDcmVhdGVkQXQ7XG4gICAgdGhpcy51cGRhdGVkQXQgPSByb3V0ZXJPdXRwdXQuYXR0clVwZGF0ZWRBdDtcblxuICAgIC8vIFdpdGhvdXQgdGhpcyB0aGUgcm91dGVyIGlucHV0IGNhbiBiZSBjcmVhdGVkIGJlZm9yZSB0aGVcbiAgICAvLyBwb2xpY3kgaXMgYXR0YWNoZWQgKFwiYWNjZXNzIGRlbmllZFwiIGF0IGNyZWF0ZSB0aW1lKS4gT3JkZXJpbmcgdGhlIGdyYW50IGJlZm9yZSB0aGVcbiAgICAvLyByb3V0ZXIgaW5wdXQgcHVsbHMgdGhlIHBvbGljeSBpbiBhcyBhIGRlcGVuZGVuY3kuXG4gICAgY29uZmlnQmluZC5ncmFudD8uYXBwbHlCZWZvcmUocm91dGVyT3V0cHV0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0Um91dGVyT3V0cHV0SWQocm91dGVyT3V0cHV0QXJuOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJzZWQgPSBBcm4uc3BsaXQocm91dGVyT3V0cHV0QXJuLCBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSkucmVzb3VyY2VOYW1lO1xuICBpZiAocGFyc2VkID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICBsaXRgSW52YWxpZFJvdXRlck91dHB1dEFybmAsXG4gICAgICBgQ291bGQgbm90IHBhcnNlIFJvdXRlciBPdXRwdXQgQVJOOiAke3JvdXRlck91dHB1dEFybn0uIEV4cGVjdGVkIGZvcm1hdDogYXJuOjxwYXJ0aXRpb24+Om1lZGlhY29ubmVjdDo8cmVnaW9uPjo8YWNjb3VudD46cm91dGVyT3V0cHV0OjxpZD5gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlZDtcbn1cbiJdfQ==
776
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLW91dHB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJvdXRlci1vdXRwdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsNkNBQXNJO0FBRXRJLCtEQUEwRDtBQUUxRCxtRUFBK0Q7QUFHL0QsNEVBQTREO0FBQzVELDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFNMUUscUNBQStJO0FBRS9JOztHQUVHO0FBQ0gsTUFBYSwyQkFBMkI7SUFtQkY7O0lBbEJwQyxtQ0FBbUM7SUFDNUIsTUFBTSxDQUFVLEdBQUcsR0FBRyxJQUFJLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLHlDQUF5QztJQUNsQyxNQUFNLENBQVUsSUFBSSxHQUFHLElBQUksMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEUsOENBQThDO0lBQ3ZDLE1BQU0sQ0FBVSxVQUFVLEdBQUcsSUFBSSwyQkFBMkIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRixnREFBZ0Q7SUFDekMsTUFBTSxDQUFVLFlBQVksR0FBRyxJQUFJLDJCQUEyQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXRGOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBYTtRQUM1QixPQUFPLElBQUksMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDL0M7SUFFRCw2Q0FBNkM7SUFDN0MsWUFBb0MsS0FBYTtRQUFiLFVBQUssR0FBTCxLQUFLLENBQVE7S0FBSTtJQUVyRCwrQkFBK0I7SUFDeEIsUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztLQUNuQjs7QUF4Qkgsa0VBeUJDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLGdCQUFnQjtJQWlCUzs7SUFoQnBDLHFCQUFxQjtJQUNkLE1BQU0sQ0FBVSxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2RSxvQkFB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LFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUM3Qzs7WUFqS1UsdURBQVk7Ozs7O0FBQVosb0NBQVk7QUFvS3pCLFNBQVMscUJBQXFCLENBQUMsZUFBdUI7SUFDcEQsTUFBTSxNQUFNLEdBQUcsaUJBQUcsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLHVCQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDdEYsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDekIsTUFBTSxJQUFJLHFDQUF1QixDQUMvQixJQUFBLHNCQUFHLEVBQUEsd0JBQXdCLEVBQzNCLHNDQUFzQyxlQUFlLHNGQUFzRixDQUM1SSxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEJpdHJhdGUsIElSZXNvdXJjZSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEFybiwgQXJuRm9ybWF0LCBEdXJhdGlvbiwgTGF6eSwgTmFtZXMsIFJlc291cmNlLCBTdGFjaywgVG9rZW4sIFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgdHlwZSB7IE1ldHJpY09wdGlvbnMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBNZXRyaWMsIFVuaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgdHlwZSB7IEdyYW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBDZm5Sb3V0ZXJPdXRwdXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbWVkaWFjb25uZWN0JztcbmltcG9ydCB0eXBlIHsgSVJvdXRlck91dHB1dFJlZiwgUm91dGVyT3V0cHV0UmVmZXJlbmNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLW1lZGlhY29ubmVjdCc7XG5pbXBvcnQgdHlwZSB7IElJbnB1dFJlZiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1tZWRpYWxpdmUnO1xuaW1wb3J0IHsgbGl0IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBJRmxvdyB9IGZyb20gJy4vZmxvdyc7XG5pbXBvcnQgdHlwZSB7IE1haW50ZW5hbmNlQ29uZmlndXJhdGlvbiwgRm9yd2FyZEVycm9yQ29ycmVjdGlvbiwgUm91dGluZ1Njb3BlIH0gZnJvbSAnLi9yb3V0ZXItaW5wdXQnO1xuaW1wb3J0IHR5cGUgeyBJUm91dGVyTmV0d29ya0ludGVyZmFjZSB9IGZyb20gJy4vcm91dGVyLW5ldHdvcmstaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgTWVkaWFMaXZlUGlwZWxpbmUsIFJvdXRlclNydEVuY3J5cHRpb24sIFRyYW5zaXRFbmNyeXB0aW9uIH0gZnJvbSAnLi9zaGFyZWQnO1xuaW1wb3J0IHsgcmVuZGVyVGFncywgZXhjZWVkc1JvdXRlclRpZXJCaXRyYXRlLCByZXNvbHZlUm91dGVyU3J0RW5jcnlwdGlvbiwgcmVzb2x2ZVRyYW5zaXRFbmNyeXB0aW9uLCB2YWxpZGF0ZU1haW50ZW5hbmNlVGltZSB9IGZyb20gJy4vc2hhcmVkJztcblxuLyoqXG4gKiBQcm90b2NvbCBvcHRpb25zIGF2YWlsYWJsZSBmb3IgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgUm91dGVyT3V0cHV0UHJvdG9jb2xPcHRpb25zIHtcbiAgLyoqIFJlYWwtdGltZSBUcmFuc3BvcnQgUHJvdG9jb2wgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSVFAgPSBuZXcgUm91dGVyT3V0cHV0UHJvdG9jb2xPcHRpb25zKCdSVFAnKTtcbiAgLyoqIFJlbGlhYmxlIEludGVybmV0IFN0cmVhbSBUcmFuc3BvcnQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSSVNUID0gbmV3IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucygnUklTVCcpO1xuICAvKiogU2VjdXJlIFJlbGlhYmxlIFRyYW5zcG9ydCAtIENhbGxlciBtb2RlICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1JUX0NBTExFUiA9IG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMoJ1NSVF9DQUxMRVInKTtcbiAgLyoqIFNlY3VyZSBSZWxpYWJsZSBUcmFuc3BvcnQgLSBMaXN0ZW5lciBtb2RlICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1JUX0xJU1RFTkVSID0gbmV3IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucygnU1JUX0xJU1RFTkVSJyk7XG5cbiAgLyoqXG4gICAqIFVzZSBhIGN1c3RvbSBwcm90b2NvbCB2YWx1ZVxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHByb3RvY29sIHN0cmluZyB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogUm91dGVyT3V0cHV0UHJvdG9jb2xPcHRpb25zIHtcbiAgICByZXR1cm4gbmV3IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucyh2YWx1ZSk7XG4gIH1cblxuICAvKiogQHBhcmFtIHZhbHVlIFRoZSBwcm90b2NvbCBzdHJpbmcgdmFsdWUgKi9cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZykge31cblxuICAvKiogUmV0dXJucyB0aGUgc3RyaW5nIHZhbHVlICovXG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogUm91dGluZyB0aWVyIHRoYXQgZGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBiaXRyYXRlIChpbiBNYnBzKSBmb3IgYSBSb3V0ZXIgT3V0cHV0LlxuICovXG5leHBvcnQgY2xhc3MgUm91dGVyT3V0cHV0VGllciB7XG4gIC8qKiBVcCB0byAxMDAgTWJwcyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9VVFBVVF8xMDAgPSBuZXcgUm91dGVyT3V0cHV0VGllcignT1VUUFVUXzEwMCcpO1xuICAvKiogVXAgdG8gNTAgTWJwcyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9VVFBVVF81MCA9IG5ldyBSb3V0ZXJPdXRwdXRUaWVyKCdPVVRQVVRfNTAnKTtcbiAgLyoqIFVwIHRvIDIwIE1icHMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPVVRQVVRfMjAgPSBuZXcgUm91dGVyT3V0cHV0VGllcignT1VUUFVUXzIwJyk7XG5cbiAgLyoqXG4gICAqIFVzZSBhIGN1c3RvbSB0aWVyIHZhbHVlXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdGllciBzdHJpbmcgdmFsdWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IFJvdXRlck91dHB1dFRpZXIge1xuICAgIHJldHVybiBuZXcgUm91dGVyT3V0cHV0VGllcih2YWx1ZSk7XG4gIH1cblxuICAvKiogQHBhcmFtIHZhbHVlIFRoZSB0aWVyIHN0cmluZyB2YWx1ZSAqL1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nKSB7fVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBzdHJpbmcgdmFsdWUgKi9cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIFJvdXRlciBPdXRwdXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUm91dGVyT3V0cHV0IGV4dGVuZHMgSVJlc291cmNlLCBJUm91dGVyT3V0cHV0UmVmIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJPdXRwdXROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgcm91dGVyIG91dHB1dC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyT3V0cHV0QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcm91dGVyIG91dHB1dC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyT3V0cHV0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElQIGFkZHJlc3Mgb2YgdGhlIHJvdXRlciBvdXRwdXQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGlwQWRkcmVzczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIHJvdXRlciBvdXRwdXQgd2FzIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSByb3V0ZXIgb3V0cHV0IHdhcyBsYXN0IHVwZGF0ZWQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlIGEgQ2xvdWRXYXRjaCBtZXRyaWMgZm9yIHRoaXMgcm91dGVyIG91dHB1dC5cbiAgICpcbiAgICogUm91dGVyIG91dHB1dCBtZXRyaWNzIGFyZSBkaW1lbnNpb25lZCBieSBgUm91dGVyT3V0cHV0QVJOYC4gU2VlIHRoZSBNZWRpYUNvbm5lY3RcbiAgICogZG9jdW1lbnRhdGlvbiBmb3IgYXZhaWxhYmxlIG1ldHJpYyBuYW1lcyAoZS5nLiBgUm91dGVyT3V0cHV0Qml0UmF0ZWAsXG4gICAqIGBSb3V0ZXJPdXRwdXRUb3RhbFBhY2tldHNgKS5cbiAgICovXG4gIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgYml0cmF0ZSBvZiB0aGUgcm91dGVyIG91dHB1dCdzIHBheWxvYWQuXG4gICAqIEBkZWZhdWx0IC0gYXZlcmFnZSBvdmVyIDYwIHNlY29uZHNcbiAgICovXG4gIG1ldHJpY0JpdHJhdGUocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyBzZW50IGJ5IHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKiBAZGVmYXVsdCAtIHN1bSBvdmVyIDYwIHNlY29uZHNcbiAgICovXG4gIG1ldHJpY1RvdGFsUGFja2V0cyhwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHJvdXRlciBvdXRwdXQgY29ubmVjdGlvbiBzdGF0ZSAoMSBjb25uZWN0ZWQsIDAgZGlzY29ubmVjdGVkKS4gQXBwbGllcyB0byBTUlQgb3V0cHV0cyBvbmx5LlxuICAgKiBAZGVmYXVsdCAtIG1pbmltdW0gb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBtZXRyaWNDb25uZWN0ZWQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBudW1iZXIgb2YgcmV0cmFuc21pdHRlZCBwYWNrZXRzIHJlcXVlc3RlZCB0aHJvdWdoIGF1dG9tYXRpYyByZXBlYXQgcmVxdWVzdCAoQVJRKS5cbiAgICogQXBwbGllcyB0byBSSVNUIGFuZCBTUlQgb3V0cHV0cyBvbmx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHN1bSBvdmVyIDYwIHNlY29uZHNcbiAgICovXG4gIG1ldHJpY0FycVJlcXVlc3RzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIFJvdXRlciBPdXRwdXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZXJPdXRwdXRQcm9wcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBSb3V0ZXIgT3V0cHV0XG4gICAqIEBkZWZhdWx0IC0gR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHlcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlck91dHB1dE5hbWU/OiBzdHJpbmc7XG4gIC8qKiBUaGUgbWF4aW11bSBiaXRyYXRlIGZvciB0aGUgcm91dGVyIG91dHB1dC4gKi9cbiAgcmVhZG9ubHkgbWF4aW11bUJpdHJhdGU6IEJpdHJhdGU7XG4gIC8qKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcm91dGVyIG91dHB1dCBpcyBjb25maWd1cmVkIGZvciBSZWdpb25hbCBvciBnbG9iYWwgcm91dGluZy4gKi9cbiAgcmVhZG9ubHkgcm91dGluZ1Njb3BlOiBSb3V0aW5nU2NvcGU7XG4gIC8qKlxuICAgKiBSb3V0aW5nIHRpZXIgdGhhdCBkZXRlcm1pbmVzIHRoZSBtYXhpbXVtIGJpdHJhdGUgKGluIE1icHMpIGZvciB0aGlzIG91dHB1dC5cbiAgICpcbiAgICogQGRlZmF1bHQgUm91dGVyT3V0cHV0VGllci5PVVRQVVRfMjBcbiAgICovXG4gIHJlYWRvbmx5IHRpZXI/OiBSb3V0ZXJPdXRwdXRUaWVyO1xuICAvKiogQ29uZmlndXJhdGlvbiBmb3IgdGhlIFJvdXRlciBPdXRwdXQgKHN0YW5kYXJkLCBNZWRpYUNvbm5lY3QgRmxvdywgb3IgTWVkaWFMaXZlKSAqL1xuICByZWFkb25seSBjb25maWd1cmF0aW9uOiBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uO1xuICAvKipcbiAgICogTWFpbnRlbmFuY2Ugd2luZG93IGNvbmZpZ3VyYXRpb25cbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IG1haW50ZW5hbmNlIHdpbmRvdyB3aWxsIGJlIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IG1haW50ZW5hbmNlQ29uZmlndXJhdGlvbj86IE1haW50ZW5hbmNlQ29uZmlndXJhdGlvbjtcbiAgLyoqXG4gICAqIFRoZSBBV1MgUmVnaW9uIHdoZXJlIHRoZSByb3V0ZXIgb3V0cHV0IGlzIGxvY2F0ZWQuXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdHMgdG8gdGhlIHNhbWUgcmVnaW9uIGFzIHN0YWNrXG4gICAqL1xuICByZWFkb25seSByZWdpb25OYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogVGFncyB0byBhZGQgdG8gdGhlIFJvdXRlciBPdXRwdXRcbiAgICogQGRlZmF1bHQgLSBObyB0YWdnaW5nXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGVzIGZvciBpbXBvcnRpbmcgYW4gZXhpc3RpbmcgUm91dGVyIE91dHB1dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZXJPdXRwdXRBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHJvdXRlciBvdXRwdXQuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJPdXRwdXRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHJvdXRlciBvdXRwdXQuXG4gICAqXG4gICAqIFRoZSBuYW1lIGlzIG5vdCBlbmNvZGVkIGluIHRoZSBBUk4gKHRoZSBBUk4gY29udGFpbnMgb25seSB0aGUgc2VydmljZS1nZW5lcmF0ZWQgSUQpLFxuICAgKiBzbyBwcm92aWRlIGl0IGhlcmUgaWYgeW91IG5lZWQgdG8gYWNjZXNzIGByb3V0ZXJPdXRwdXROYW1lYCBvbiB0aGUgaW1wb3J0ZWQgY29uc3RydWN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHJvdXRlck91dHB1dE5hbWUgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGUgaW1wb3J0ZWQgY29uc3RydWN0XG4gICAqL1xuICByZWFkb25seSByb3V0ZXJPdXRwdXROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJvdXRlciBvdXRwdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcGFyc2VkIGZyb20gdGhlIEFSTiB3aGVuIGF2YWlsYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyT3V0cHV0SWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgUlRQIHByb3RvY29sIGNvbmZpZ3VyYXRpb24gZm9yIG91dHB1dHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdHBPdXRwdXRQcm90b2NvbFByb3BzIHtcbiAgLyoqIERlc3RpbmF0aW9uIElQIGFkZHJlc3MgZm9yIFJUUCB0cmFmZmljICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uQWRkcmVzczogc3RyaW5nO1xuICAvKiogUG9ydCBudW1iZXIgZm9yIFJUUCB0cmFmZmljICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIEZvcndhcmQgRXJyb3IgQ29ycmVjdGlvbiBzZXR0aW5nXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkOyB3aGVuIG9taXR0ZWQsIE1lZGlhQ29ubmVjdCBhcHBsaWVzIEZvcndhcmRFcnJvckNvcnJlY3Rpb24uRElTQUJMRUQgYXQgZGVwbG95IHRpbWVcbiAgICovXG4gIHJlYWRvbmx5IGZvcndhcmRFcnJvckNvcnJlY3Rpb24/OiBGb3J3YXJkRXJyb3JDb3JyZWN0aW9uO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIFJJU1QgcHJvdG9jb2wgY29uZmlndXJhdGlvbiBmb3Igb3V0cHV0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJpc3RPdXRwdXRQcm90b2NvbFByb3BzIHtcbiAgLyoqIERlc3RpbmF0aW9uIElQIGFkZHJlc3MgZm9yIFJJU1QgdHJhZmZpYyAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbkFkZHJlc3M6IHN0cmluZztcbiAgLyoqIFBvcnQgbnVtYmVyIGZvciBSSVNUIHRyYWZmaWMgKi9cbiAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIFNSVCBMaXN0ZW5lciBwcm90b2NvbCBjb25maWd1cmF0aW9uIGZvciBvdXRwdXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3J0TGlzdGVuZXJPdXRwdXRQcm90b2NvbFByb3BzIHtcbiAgLyoqIFBvcnQgbnVtYmVyIGZvciBTUlQgbGlzdGVuZXIgKi9cbiAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xuICAvKiogTWluaW11bSBsYXRlbmN5IGZvciBTUlQgKi9cbiAgcmVhZG9ubHkgbWluaW11bUxhdGVuY3k6IER1cmF0aW9uO1xuICAvKipcbiAgICogT3B0aW9uYWwgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIGZvciBTUlQgc3RyZWFtc1xuICAgKiBAZGVmYXVsdCAtIE5vIGVuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25Db25maWd1cmF0aW9uPzogUm91dGVyU3J0RW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBTUlQgQ2FsbGVyIHByb3RvY29sIGNvbmZpZ3VyYXRpb24gZm9yIG91dHB1dHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcnRDYWxsZXJPdXRwdXRQcm90b2NvbFByb3BzIHtcbiAgLyoqIERlc3RpbmF0aW9uIElQIGFkZHJlc3MgdG8gY29ubmVjdCB0byAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbkFkZHJlc3M6IHN0cmluZztcbiAgLyoqIERlc3RpbmF0aW9uIHBvcnQgdG8gY29ubmVjdCB0byAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvblBvcnQ6IG51bWJlcjtcbiAgLyoqIE1pbmltdW0gbGF0ZW5jeSBmb3IgU1JUICovXG4gIHJlYWRvbmx5IG1pbmltdW1MYXRlbmN5OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHN0cmVhbSBJRCBmb3IgU1JUIGNvbm5lY3Rpb25cbiAgICogQGRlZmF1bHQgLSBObyBzdHJlYW0gSURcbiAgICovXG4gIHJlYWRvbmx5IHN0cmVhbUlkPzogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIGZvciBTUlQgc3RyZWFtc1xuICAgKiBAZGVmYXVsdCAtIE5vIGVuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25Db25maWd1cmF0aW9uPzogUm91dGVyU3J0RW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBGYWN0b3J5IGNsYXNzIGZvciBjcmVhdGluZyBSb3V0ZXIgT3V0cHV0IHByb3RvY29sIGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIFN1cHBvcnRlZCBwcm90b2NvbHM6IFJUUCwgUklTVCwgU1JUIChMaXN0ZW5lciBhbmQgQ2FsbGVyKS5cbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlck91dHB1dFByb3RvY29sIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBSVFAgcHJvdG9jb2wgY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiAgICBSb3V0ZXJPdXRwdXRQcm90b2NvbC5ydHAoe1xuICAgKiAgICAgIGRlc3RpbmF0aW9uQWRkcmVzczogJzEwLjAuMC4xJyxcbiAgICogICAgICBwb3J0OiA1MDAwLFxuICAgKiAgICB9KTtcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIFJUUCBwcm90b2NvbCBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFJvdXRlck91dHB1dFByb3RvY29sIGluc3RhbmNlIGNvbmZpZ3VyZWQgZm9yIFJUUFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBydHAocHJvcHM6IFJ0cE91dHB1dFByb3RvY29sUHJvcHMpOiBSb3V0ZXJPdXRwdXRQcm90b2NvbCB7XG4gICAgUm91dGVyT3V0cHV0UHJvdG9jb2wudmFsaWRhdGVQb3J0KHByb3BzLnBvcnQpO1xuICAgIHJldHVybiBuZXcgUm91dGVyT3V0cHV0UHJvdG9jb2woUm91dGVyT3V0cHV0UHJvdG9jb2xPcHRpb25zLlJUUCwge1xuICAgICAgcnRwOiB7XG4gICAgICAgIGRlc3RpbmF0aW9uQWRkcmVzczogcHJvcHMuZGVzdGluYXRpb25BZGRyZXNzLFxuICAgICAgICBkZXN0aW5hdGlvblBvcnQ6IHByb3BzLnBvcnQsXG4gICAgICAgIGZvcndhcmRFcnJvckNvcnJlY3Rpb246IHByb3BzLmZvcndhcmRFcnJvckNvcnJlY3Rpb24sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIFJJU1QgcHJvdG9jb2wgY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiAgICBSb3V0ZXJPdXRwdXRQcm90b2NvbC5yaXN0KHtcbiAgICogICAgICBkZXN0aW5hdGlvbkFkZHJlc3M6ICcxMC4wLjAuMScsXG4gICAqICAgICAgcG9ydDogNTAwMCxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBSSVNUIHByb3RvY29sIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVyT3V0cHV0UHJvdG9jb2wgaW5zdGFuY2UgY29uZmlndXJlZCBmb3IgUklTVFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByaXN0KHByb3BzOiBSaXN0T3V0cHV0UHJvdG9jb2xQcm9wcyk6IFJvdXRlck91dHB1dFByb3RvY29sIHtcbiAgICBSb3V0ZXJPdXRwdXRQcm90b2NvbC52YWxpZGF0ZVBvcnQocHJvcHMucG9ydCk7XG4gICAgcmV0dXJuIG5ldyBSb3V0ZXJPdXRwdXRQcm90b2NvbChSb3V0ZXJPdXRwdXRQcm90b2NvbE9wdGlvbnMuUklTVCwge1xuICAgICAgcmlzdDoge1xuICAgICAgICBkZXN0aW5hdGlvbkFkZHJlc3M6IHByb3BzLmRlc3RpbmF0aW9uQWRkcmVzcyxcbiAgICAgICAgZGVzdGluYXRpb25Qb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gU1JUIExpc3RlbmVyIHByb3RvY29sIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgUm91dGVyT3V0cHV0UHJvdG9jb2wuc3J0TGlzdGVuZXIoe1xuICAgKiAgICAgIHBvcnQ6IDUwMDAsXG4gICAqICAgICAgbWluaW11bUxhdGVuY3k6IER1cmF0aW9uLm1pbGxpcygxMjUpLFxuICAgKiAgICB9KTtcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIFNSVCBMaXN0ZW5lciBwcm90b2NvbCBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFJvdXRlck91dHB1dFByb3RvY29sIGluc3RhbmNlIGNvbmZpZ3VyZWQgZm9yIFNSVCBMaXN0ZW5lclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzcnRMaXN0ZW5lcihwcm9wczogU3J0TGlzdGVuZXJPdXRwdXRQcm90b2NvbFByb3BzKTogUm91dGVyT3V0cHV0UHJvdG9jb2wge1xuICAgIFJvdXRlck91dHB1dFByb3RvY29sLnZhbGlkYXRlUG9ydChwcm9wcy5wb3J0KTtcbiAgICByZXR1cm4gbmV3IFJvdXRlck91dHB1dFByb3RvY29sKFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucy5TUlRfTElTVEVORVIsIHtcbiAgICAgIHNydExpc3RlbmVyOiB7XG4gICAgICAgIHBvcnQ6IHByb3BzLnBvcnQsXG4gICAgICAgIG1pbmltdW1MYXRlbmN5TWlsbGlzZWNvbmRzOiBwcm9wcy5taW5pbXVtTGF0ZW5jeS50b01pbGxpc2Vjb25kcygpLFxuICAgICAgfSxcbiAgICB9LCBwcm9wcy5lbmNyeXB0aW9uQ29uZmlndXJhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIFNSVCBDYWxsZXIgcHJvdG9jb2wgY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiAgICBSb3V0ZXJPdXRwdXRQcm90b2NvbC5zcnRDYWxsZXIoe1xuICAgKiAgICAgIGRlc3RpbmF0aW9uQWRkcmVzczogJzEwLjAuMC4xJyxcbiAgICogICAgICBkZXN0aW5hdGlvblBvcnQ6IDUwMDAsXG4gICAqICAgICAgbWluaW11bUxhdGVuY3k6IER1cmF0aW9uLm1pbGxpcygxMjUpLFxuICAgKiAgICB9KTtcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIFNSVCBDYWxsZXIgcHJvdG9jb2wgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJPdXRwdXRQcm90b2NvbCBpbnN0YW5jZSBjb25maWd1cmVkIGZvciBTUlQgQ2FsbGVyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNydENhbGxlcihwcm9wczogU3J0Q2FsbGVyT3V0cHV0UHJvdG9jb2xQcm9wcyk6IFJvdXRlck91dHB1dFByb3RvY29sIHtcbiAgICBSb3V0ZXJPdXRwdXRQcm90b2NvbC52YWxpZGF0ZVNydENhbGxlclBvcnQocHJvcHMuZGVzdGluYXRpb25Qb3J0KTtcbiAgICByZXR1cm4gbmV3IFJvdXRlck91dHB1dFByb3RvY29sKFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucy5TUlRfQ0FMTEVSLCB7XG4gICAgICBzcnRDYWxsZXI6IHtcbiAgICAgICAgZGVzdGluYXRpb25BZGRyZXNzOiBwcm9wcy5kZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgICAgIGRlc3RpbmF0aW9uUG9ydDogcHJvcHMuZGVzdGluYXRpb25Qb3J0LFxuICAgICAgICBtaW5pbXVtTGF0ZW5jeU1pbGxpc2Vjb25kczogcHJvcHMubWluaW11bUxhdGVuY3kudG9NaWxsaXNlY29uZHMoKSxcbiAgICAgICAgc3RyZWFtSWQ6IHByb3BzLnN0cmVhbUlkLFxuICAgICAgfSxcbiAgICB9LCBwcm9wcy5lbmNyeXB0aW9uQ29uZmlndXJhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCBwb3J0IGlzIHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2UgKDMwMDAtMzAwMDApXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZVBvcnQocG9ydDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQocG9ydCkgJiYgKHBvcnQgPCAzMDAwIHx8IHBvcnQgPiAzMDAwMCkpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgUm91dGVyT3V0cHV0UG9ydFJhbmdlYCwgYFBvcnQgbXVzdCBiZSBiZXR3ZWVuIDMwMDAgYW5kIDMwMDAwLCBnb3QgJHtwb3J0fWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IFNSVCBDYWxsZXIgcG9ydCBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlICgwLTY1NTM1KVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVTcnRDYWxsZXJQb3J0KHBvcnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHBvcnQpICYmIChwb3J0IDwgMCB8fCBwb3J0ID4gNjU1MzUpKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFNydENhbGxlclBvcnRSYW5nZWAsIGBTUlQgQ2FsbGVyIHBvcnQgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDY1NTM1LCBnb3QgJHtwb3J0fWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Byb3RvY29sTmFtZTogUm91dGVyT3V0cHV0UHJvdG9jb2xPcHRpb25zO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb25maWc6IENmblJvdXRlck91dHB1dC5Sb3V0ZXJPdXRwdXRQcm90b2NvbENvbmZpZ3VyYXRpb25Qcm9wZXJ0eTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZW5jcnlwdGlvbj86IFJvdXRlclNydEVuY3J5cHRpb247XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICBwcm90b2NvbE5hbWU6IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucyxcbiAgICBjb25maWc6IENmblJvdXRlck91dHB1dC5Sb3V0ZXJPdXRwdXRQcm90b2NvbENvbmZpZ3VyYXRpb25Qcm9wZXJ0eSxcbiAgICBlbmNyeXB0aW9uPzogUm91dGVyU3J0RW5jcnlwdGlvbixcbiAgKSB7XG4gICAgdGhpcy5fcHJvdG9jb2xOYW1lID0gcHJvdG9jb2xOYW1lO1xuICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLl9lbmNyeXB0aW9uID0gZW5jcnlwdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoaXMgcHJvdG9jb2wgdG8gaXRzIENGTi1yZWFkeSBmb3JtLiBSZXR1cm5zIHRoZSBwcm90b2NvbCBpZGVudGlmaWVyXG4gICAqIGFuZCB0aGUgQ0ZOIGNvbmZpZ3VyYXRpb24gc2hhcGUgd2l0aCBTUlQgZW5jcnlwdGlvbiBhdXRvLXJvbGUgbWF0ZXJpYWxpemVkIGlmIG5lZWRlZC5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlICAgICAgICAgICAgIENvbnN0cnVjdCB0aGF0IHNjb3BlcyB0aGUgYXV0by1jcmVhdGVkIGVuY3J5cHRpb24gcm9sZVxuICAgKiBAcGFyYW0gcm91dGVyT3V0cHV0QXJuICAgT3B0aW9uYWwgQVJOIG9mIHRoZSBjb25zdW1pbmcgcm91dGVyIG91dHB1dCDigJQgd2hlbiBwcm92aWRlZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlcyB0aGUgYXV0by1jcmVhdGVkIGVuY3J5cHRpb24gcm9sZSdzIHRydXN0IHBvbGljeS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCwgcm91dGVyT3V0cHV0QXJuPzogc3RyaW5nKToge1xuICAgIG5hbWU6IFJvdXRlck91dHB1dFByb3RvY29sT3B0aW9ucztcbiAgICBjb25maWc6IENmblJvdXRlck91dHB1dC5Sb3V0ZXJPdXRwdXRQcm90b2NvbENvbmZpZ3VyYXRpb25Qcm9wZXJ0eTtcbiAgICBncmFudD86IEdyYW50O1xuICB9IHtcbiAgICBpZiAoIXRoaXMuX2VuY3J5cHRpb24pIHtcbiAgICAgIHJldHVybiB7IG5hbWU6IHRoaXMuX3Byb3RvY29sTmFtZSwgY29uZmlnOiB0aGlzLl9jb25maWcgfTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGNvbmZpZzogZW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24sIGdyYW50IH0gPSByZXNvbHZlUm91dGVyU3J0RW5jcnlwdGlvbihzY29wZSwgJ0VuY3J5cHRpb25Sb2xlJywgdGhpcy5fZW5jcnlwdGlvbiwgcm91dGVyT3V0cHV0QXJuKTtcblxuICAgIGlmICh0aGlzLl9jb25maWcuc3J0TGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHRoaXMuX3Byb3RvY29sTmFtZSxcbiAgICAgICAgY29uZmlnOiB7IHNydExpc3RlbmVyOiB7IC4uLnRoaXMuX2NvbmZpZy5zcnRMaXN0ZW5lciwgZW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24gfSB9LFxuICAgICAgICBncmFudCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb25maWcuc3J0Q2FsbGVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiB0aGlzLl9wcm90b2NvbE5hbWUsXG4gICAgICAgIGNvbmZpZzogeyBzcnRDYWxsZXI6IHsgLi4udGhpcy5fY29uZmlnLnNydENhbGxlciwgZW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24gfSB9LFxuICAgICAgICBncmFudCxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7IG5hbWU6IHRoaXMuX3Byb3RvY29sTmFtZSwgY29uZmlnOiB0aGlzLl9jb25maWcgfTtcbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHN0YW5kYXJkIFJvdXRlciBPdXRwdXQgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YW5kYXJkT3V0cHV0Q29uZmlndXJhdGlvblByb3BzIHtcbiAgLyoqIE5ldHdvcmsgaW50ZXJmYWNlIGZvciB0aGUgUm91dGVyIE91dHB1dCAqL1xuICByZWFkb25seSBuZXR3b3JrSW50ZXJmYWNlOiBJUm91dGVyTmV0d29ya0ludGVyZmFjZTtcbiAgLyoqIFByb3RvY29sIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBvdXRwdXQgKi9cbiAgcmVhZG9ubHkgcHJvdG9jb2w6IFJvdXRlck91dHB1dFByb3RvY29sO1xuICAvKipcbiAgICogVGhlIGF2YWlsYWJpbGl0eSB6b25lIHdoZXJlIHRoZSByb3V0ZXIgb3V0cHV0IGlzIGxvY2F0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXNzaWduZWQgYnkgdGhlIE1lZGlhQ29ubmVjdCBzZXJ2aWNlXG4gICAqL1xuICByZWFkb25seSBhdmFpbGFiaWxpdHlab25lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIE1lZGlhTGl2ZSBSb3V0ZXIgT3V0cHV0IGNvbmZpZ3VyYXRpb24gd2l0aCBzcGVjaWZpYyBpbnB1dCBjb25uZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFMaXZlSW5wdXRDb25uZWN0aW9uUHJvcHMge1xuICAvKipcbiAgICogVGhlIE1lZGlhTGl2ZSBpbnB1dCB0byBzZW5kIG91dHB1dCB0byAobXVzdCBiZSBvZiB0eXBlIGBtZWRpYWxpdmUuSW5wdXRDb25maWd1cmF0aW9uLm1lZGlhQ29ubmVjdFJvdXRlcigpYCkuXG4gICAqL1xuICByZWFkb25seSBpbnB1dDogSUlucHV0UmVmO1xuICAvKiogTWVkaWFMaXZlIHBpcGVsaW5lIHRvIHNlbmQgb3V0cHV0IHRvICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lOiBNZWRpYUxpdmVQaXBlbGluZTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHRyYW5zaXQgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IC0gQXV0b21hdGljIGVuY3J5cHRpb24gd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgTWVkaWFMaXZlIFJvdXRlciBPdXRwdXQgY29uZmlndXJhdGlvbiB3aXRob3V0IHNwZWNpZmljIGlucHV0IGNvbm5lY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZWRpYUxpdmVOb0lucHV0Q29ubmVjdGlvblByb3BzIHtcbiAgLyoqIEF2YWlsYWJpbGl0eSB6b25lIGZvciB0aGUgcm91dGVyIG91dHB1dCB3aGVuIG5vdCBjb25uZWN0aW5nIHRvIGEgc3BlY2lmaWMgaW5wdXQgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgdHJhbnNpdCBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICogQGRlZmF1bHQgLSBBdXRvbWF0aWMgZW5jcnlwdGlvbiB3aWxsIGJlIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb24/OiBUcmFuc2l0RW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBNZWRpYUNvbm5lY3QgRmxvdyBSb3V0ZXIgT3V0cHV0IGNvbmZpZ3VyYXRpb24gd2l0aCBzcGVjaWZpYyBmbG93IGNvbm5lY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZWRpYUNvbm5lY3RGbG93Q29ubmVjdGlvblByb3BzIHtcbiAgLyoqIE1lZGlhQ29ubmVjdCBGbG93IHRvIHNlbmQgb3V0cHV0IHRvICovXG4gIHJlYWRvbmx5IGZsb3c6IElGbG93O1xuICAvKipcbiAgICogT3B0aW9uYWwgdHJhbnNpdCBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICogQGRlZmF1bHQgLSBBdXRvbWF0aWMgZW5jcnlwdGlvbiB3aWxsIGJlIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb24/OiBUcmFuc2l0RW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBNZWRpYUNvbm5lY3QgRmxvdyBSb3V0ZXIgT3V0cHV0IGNvbmZpZ3VyYXRpb24gd2l0aG91dCBzcGVjaWZpYyBmbG93IGNvbm5lY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZWRpYUNvbm5lY3RGbG93Tm9Db25uZWN0aW9uUHJvcHMge1xuICAvKiogQXZhaWxhYmlsaXR5IHpvbmUgZm9yIHRoZSByb3V0ZXIgb3V0cHV0IHdoZW4gbm90IGNvbm5lY3RpbmcgdG8gYSBzcGVjaWZpYyBmbG93ICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHRyYW5zaXQgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IC0gQXV0b21hdGljIGVuY3J5cHRpb24gd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogRmFjdG9yeSBjbGFzcyBmb3IgY3JlYXRpbmcgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uc1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzdGFuZGFyZCBSb3V0ZXIgT3V0cHV0IGNvbmZpZ3VyYXRpb24gd2l0aCBhIHNpbmdsZSBwcm90b2NvbFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiAgICBkZWNsYXJlIGNvbnN0IG5ldHdvcmtJbnRlcmZhY2U6IFJvdXRlck5ldHdvcmtJbnRlcmZhY2U7XG4gICAqXG4gICAqICAgIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24uc3RhbmRhcmQoe1xuICAgKiAgICAgIG5ldHdvcmtJbnRlcmZhY2UsXG4gICAqICAgICAgcHJvdG9jb2w6IFJvdXRlck91dHB1dFByb3RvY29sLnJ0cCh7XG4gICAqICAgICAgICBkZXN0aW5hdGlvbkFkZHJlc3M6ICcxMC4wLjAuMScsXG4gICAqICAgICAgICBwb3J0OiA1MDAwLFxuICAgKiAgICAgIH0pLFxuICAgKiAgICB9KTtcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIFN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIGluc3RhbmNlIGZvciBzdGFuZGFyZCBzZXR1cFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzdGFuZGFyZChwcm9wczogU3RhbmRhcmRPdXRwdXRDb25maWd1cmF0aW9uUHJvcHMpOiBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IFN0YW5kYXJkUm91dGVyT3V0cHV0Q29uZmlnKHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBNZWRpYUxpdmUgUm91dGVyIE91dHB1dCBjb25maWd1cmF0aW9uIHdpdGggYSBzcGVjaWZpYyBpbnB1dCBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyB3aGVuIHRoZSBNZWRpYUxpdmUgaW5wdXQgYWxyZWFkeSBleGlzdHMgYW5kIHlvdSB3YW50IHRvIGNvbm5lY3QgaW1tZWRpYXRlbHkuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBNZWRpYUxpdmUgaW5wdXQgY29ubmVjdGlvbiBwcm9wZXJ0aWVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1lZGlhTGl2ZUlucHV0KHByb3BzOiBNZWRpYUxpdmVJbnB1dENvbm5lY3Rpb25Qcm9wcyk6IFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBuZXcgTWVkaWFMaXZlSW5wdXRSb3V0ZXJPdXRwdXRDb25maWcoe1xuICAgICAgbWVkaWFMaXZlSW5wdXRBcm46IHByb3BzLmlucHV0LmlucHV0UmVmLmlucHV0QXJuLFxuICAgICAgbWVkaWFMaXZlUGlwZWxpbmVJZDogcHJvcHMucGlwZWxpbmUsXG4gICAgICBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uOiBwcm9wcy5kZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIE1lZGlhTGl2ZSBSb3V0ZXIgT3V0cHV0IGNvbmZpZ3VyYXRpb24gd2l0aG91dCBhIHNwZWNpZmljIGlucHV0IGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIFVzZSB0aGlzIHdoZW4geW91IHdhbnQgdG8gc2V0IHVwIHRoZSByb3V0ZXIgb3V0cHV0IGJlZm9yZSB0aGUgTWVkaWFMaXZlIGlucHV0IGV4aXN0cy5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIE1lZGlhTGl2ZSBubyBpbnB1dCBjb25uZWN0aW9uIHByb3BlcnRpZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWVkaWFMaXZlSW5wdXRXaXRob3V0Q29ubmVjdGlvbihwcm9wczogTWVkaWFMaXZlTm9JbnB1dENvbm5lY3Rpb25Qcm9wcyk6IFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBuZXcgTWVkaWFMaXZlSW5wdXRSb3V0ZXJPdXRwdXRDb25maWcoXG4gICAgICB7IGRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb246IHByb3BzLmRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb24gfSxcbiAgICAgIHByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBNZWRpYUNvbm5lY3QgRmxvdyBSb3V0ZXIgT3V0cHV0IGNvbmZpZ3VyYXRpb24gd2l0aCBhIHNwZWNpZmljIGZsb3cgY29ubmVjdGlvbi5cbiAgICpcbiAgICogVXNlIHRoaXMgd2hlbiB0aGUgdGFyZ2V0IGZsb3cgYWxyZWFkeSBleGlzdHMgYW5kIHlvdSB3YW50IHRvIGNvbm5lY3QgaW1tZWRpYXRlbHkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqICAgIGRlY2xhcmUgY29uc3QgZmxvdzogRmxvdztcbiAgICpcbiAgICogICAgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbi5tZWRpYUNvbm5lY3RGbG93KHtcbiAgICogICAgICBmbG93LFxuICAgKiAgICB9KTtcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIE1lZGlhQ29ubmVjdCBGbG93IGNvbm5lY3Rpb24gcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIGluc3RhbmNlIGZvciBNZWRpYUNvbm5lY3QgRmxvdyBzZXR1cCB3aXRoIGZsb3cgY29ubmVjdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtZWRpYUNvbm5lY3RGbG93KHByb3BzOiBNZWRpYUNvbm5lY3RGbG93Q29ubmVjdGlvblByb3BzKTogUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBNZWRpYUNvbm5lY3RGbG93Um91dGVyT3V0cHV0Q29uZmlnKHtcbiAgICAgIGZsb3c6IHByb3BzLmZsb3csXG4gICAgICBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uOiBwcm9wcy5kZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIE1lZGlhQ29ubmVjdCBGbG93IFJvdXRlciBPdXRwdXQgY29uZmlndXJhdGlvbiB3aXRob3V0IGEgc3BlY2lmaWMgZmxvdyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyB3aGVuIHlvdSB3YW50IHRvIHNldCB1cCB0aGUgcm91dGVyIG91dHB1dCBiZWZvcmUgdGhlIHRhcmdldCBmbG93IGV4aXN0cy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbi5tZWRpYUNvbm5lY3RGbG93V2l0aG91dENvbm5lY3Rpb24oe1xuICAgKiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6ICd1cy1lYXN0LTFhJyxcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBNZWRpYUNvbm5lY3QgRmxvdyBubyBjb25uZWN0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiBpbnN0YW5jZSBmb3IgTWVkaWFDb25uZWN0IEZsb3cgc2V0dXAgd2l0aG91dCBmbG93IGNvbm5lY3Rpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWVkaWFDb25uZWN0Rmxvd1dpdGhvdXRDb25uZWN0aW9uKHByb3BzOiBNZWRpYUNvbm5lY3RGbG93Tm9Db25uZWN0aW9uUHJvcHMpOiBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IE1lZGlhQ29ubmVjdEZsb3dSb3V0ZXJPdXRwdXRDb25maWcoXG4gICAgICB7IGRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb246IHByb3BzLmRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb24gfSxcbiAgICAgIHByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoaXMgY29uZmlndXJhdGlvbiB0byBpdHMgQ2xvdWRGb3JtYXRpb24gc2hhcGUuIENhbGxlZCBieSB0aGUgUm91dGVyT3V0cHV0XG4gICAqIGNvbnN0cnVjdG9yIOKAlCBlYWNoIGNvbmNyZXRlIHN1YmNsYXNzIHN1cHBsaWVzIGl0cyBvd24gdmFyaWFudC1zcGVjaWZpYyByZW5kZXJpbmcuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QsIHJvdXRlck91dHB1dEFybj86IHN0cmluZyk6IHtcbiAgICBjb25maWc6IENmblJvdXRlck91dHB1dC5Sb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uUHJvcGVydHk7IGF2YWlsYWJpbGl0eVpvbmU/OiBzdHJpbmc7IGdyYW50PzogR3JhbnQ7XG4gIH07XG59XG5cbi8qKlxuICogQ29uY3JldGUgdmFyaWFudDogc3RhbmRhcmQgKHNpbmdsZS1wcm90b2NvbCkgcm91dGVyIG91dHB1dCBjb25maWd1cmF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIFN0YW5kYXJkUm91dGVyT3V0cHV0Q29uZmlnIGV4dGVuZHMgUm91dGVyT3V0cHV0Q29uZmlndXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IFN0YW5kYXJkT3V0cHV0Q29uZmlndXJhdGlvblByb3BzKSB7IHN1cGVyKCk7IH1cblxuICBwdWJsaWMgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCwgcm91dGVyT3V0cHV0QXJuPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcHJvdG9jb2wgPSB0aGlzLnByb3BzLnByb3RvY29sLl9iaW5kKHNjb3BlLCByb3V0ZXJPdXRwdXRBcm4pO1xuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgc3RhbmRhcmQ6IHtcbiAgICAgICAgICBuZXR3b3JrSW50ZXJmYWNlQXJuOiB0aGlzLnByb3BzLm5ldHdvcmtJbnRlcmZhY2Uucm91dGVyTmV0d29ya0ludGVyZmFjZUFybixcbiAgICAgICAgICBwcm90b2NvbDogcHJvdG9jb2wubmFtZS52YWx1ZSxcbiAgICAgICAgICBwcm90b2NvbENvbmZpZ3VyYXRpb246IHByb3RvY29sLmNvbmZpZyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhdmFpbGFiaWxpdHlab25lOiB0aGlzLnByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICBncmFudDogcHJvdG9jb2wuZ3JhbnQsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIENvbmNyZXRlIHZhcmlhbnQ6IE1lZGlhTGl2ZSBJbnB1dCByb3V0ZXIgb3V0cHV0IGNvbmZpZ3VyYXRpb24gKHdpdGggb3Igd2l0aG91dCBjb25uZWN0aW9uKS5cbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBNZWRpYUxpdmVJbnB1dFJvdXRlck91dHB1dENvbmZpZyBleHRlbmRzIFJvdXRlck91dHB1dENvbmZpZ3VyYXRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE1lZGlhTGl2ZUlucHV0Um91dGVyT3V0cHV0T3B0aW9ucyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU/OiBzdHJpbmcsXG4gICkgeyBzdXBlcigpOyB9XG5cbiAgcHVibGljIF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QsIHJvdXRlck91dHB1dEFybj86IHN0cmluZykge1xuICAgIGNvbnN0IHRyYW5zaXQgPSByZXNvbHZlVHJhbnNpdEVuY3J5cHRpb24oc2NvcGUsICdEZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uUm9sZScsIHRoaXMub3B0aW9ucy5kZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uLCByb3V0ZXJPdXRwdXRBcm4pO1xuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgbWVkaWFMaXZlSW5wdXQ6IHtcbiAgICAgICAgICBtZWRpYUxpdmVJbnB1dEFybjogdGhpcy5vcHRpb25zLm1lZGlhTGl2ZUlucHV0QXJuLFxuICAgICAgICAgIG1lZGlhTGl2ZVBpcGVsaW5lSWQ6IHRoaXMub3B0aW9ucy5tZWRpYUxpdmVQaXBlbGluZUlkLFxuICAgICAgICAgIGRlc3RpbmF0aW9uVHJhbnNpdEVuY3J5cHRpb246IHRyYW5zaXQuY29uZmlnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IHRoaXMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgIGdyYW50OiB0cmFuc2l0LmdyYW50LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBvcHRpb25zIGZvciB7QGxpbmsgTWVkaWFMaXZlSW5wdXRSb3V0ZXJPdXRwdXRDb25maWd9LlxuICovXG5pbnRlcmZhY2UgTWVkaWFMaXZlSW5wdXRSb3V0ZXJPdXRwdXRPcHRpb25zIHtcbiAgcmVhZG9ubHkgbWVkaWFMaXZlSW5wdXRBcm4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1lZGlhTGl2ZVBpcGVsaW5lSWQ/OiBNZWRpYUxpdmVQaXBlbGluZTtcbiAgcmVhZG9ubHkgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbj86IFRyYW5zaXRFbmNyeXB0aW9uO1xufVxuXG4vKipcbiAqIENvbmNyZXRlIHZhcmlhbnQ6IE1lZGlhQ29ubmVjdCBGbG93IHJvdXRlciBvdXRwdXQgY29uZmlndXJhdGlvbiAod2l0aCBvciB3aXRob3V0IGNvbm5lY3Rpb24pLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIE1lZGlhQ29ubmVjdEZsb3dSb3V0ZXJPdXRwdXRDb25maWcgZXh0ZW5kcyBSb3V0ZXJPdXRwdXRDb25maWd1cmF0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBNZWRpYUNvbm5lY3RGbG93Um91dGVyT3V0cHV0T3B0aW9ucyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU/OiBzdHJpbmcsXG4gICkgeyBzdXBlcigpOyB9XG5cbiAgcHVibGljIF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QsIHJvdXRlck91dHB1dEFybj86IHN0cmluZykge1xuICAgIGNvbnN0IHRyYW5zaXQgPSByZXNvbHZlVHJhbnNpdEVuY3J5cHRpb24oc2NvcGUsICdEZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uUm9sZScsIHRoaXMub3B0aW9ucy5kZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uLCByb3V0ZXJPdXRwdXRBcm4pO1xuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgbWVkaWFDb25uZWN0Rmxvdzoge1xuICAgICAgICAgIGZsb3dBcm46IHRoaXMub3B0aW9ucy5mbG93Py5mbG93QXJuLFxuICAgICAgICAgIGZsb3dTb3VyY2VBcm46IHRoaXMub3B0aW9ucy5mbG93Py5zb3VyY2VBcm4sXG4gICAgICAgICAgZGVzdGluYXRpb25UcmFuc2l0RW5jcnlwdGlvbjogdHJhbnNpdC5jb25maWcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogdGhpcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgZ3JhbnQ6IHRyYW5zaXQuZ3JhbnQsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEludGVybmFsIG9wdGlvbnMgZm9yIHtAbGluayBNZWRpYUNvbm5lY3RGbG93Um91dGVyT3V0cHV0Q29uZmlnfS5cbiAqL1xuaW50ZXJmYWNlIE1lZGlhQ29ubmVjdEZsb3dSb3V0ZXJPdXRwdXRPcHRpb25zIHtcbiAgcmVhZG9ubHkgZmxvdz86IElGbG93O1xuICByZWFkb25seSBkZXN0aW5hdGlvblRyYW5zaXRFbmNyeXB0aW9uPzogVHJhbnNpdEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogQSBNZWRpYUNvbm5lY3QgUm91dGVyIE91dHB1dCB0aGF0IHNlbmRzIG1lZGlhIHN0cmVhbXMgdG8gZGVzdGluYXRpb25zLlxuICpcbiAqIFJvdXRlciBPdXRwdXRzIHN1cHBvcnQgbXVsdGlwbGUgY29uZmlndXJhdGlvbiB0eXBlczpcbiAqIC0gU3RhbmRhcmQ6IFNpbmdsZSBwcm90b2NvbCBvdXRwdXRcbiAqIC0gTWVkaWFMaXZlIElucHV0OiBPdXRwdXQgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYUxpdmVcbiAqIC0gTWVkaWFDb25uZWN0IEZsb3c6IE91dHB1dCB0byBhbm90aGVyIE1lZGlhQ29ubmVjdCBGbG93XG4gKi9cbmFic3RyYWN0IGNsYXNzIFJvdXRlck91dHB1dEJhc2UgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElSb3V0ZXJPdXRwdXQge1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgcm91dGVyT3V0cHV0QXJuOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSByb3V0ZXJPdXRwdXROYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSByb3V0ZXJPdXRwdXRJZDogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgaXBBZGRyZXNzOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB1cGRhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgcmVmZXJlbmNlIHRvIHRoaXMgUm91dGVyIE91dHB1dCByZXNvdXJjZS5cbiAgICogUmVxdWlyZWQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIElSb3V0ZXJPdXRwdXRSZWYgaW50ZXJmYWNlLlxuICAgKi9cbiAgcHVibGljIGdldCByb3V0ZXJPdXRwdXRSZWYoKTogUm91dGVyT3V0cHV0UmVmZXJlbmNlIHtcbiAgICByZXR1cm4geyByb3V0ZXJPdXRwdXRBcm46IHRoaXMucm91dGVyT3V0cHV0QXJuIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgQ2xvdWRXYXRjaCBtZXRyaWMgZm9yIHRoaXMgcm91dGVyIG91dHB1dC5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWMobWV0cmljTmFtZTogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBuYW1lc3BhY2U6ICdBV1MvTWVkaWFDb25uZWN0JyxcbiAgICAgIC4uLnByb3BzLFxuICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICBSb3V0ZXJPdXRwdXRBUk46IHRoaXMucm91dGVyT3V0cHV0QXJuLFxuICAgICAgICAuLi5wcm9wcz8uZGltZW5zaW9uc01hcCxcbiAgICAgIH0sXG4gICAgfSkuYXR0YWNoVG8odGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgYml0cmF0ZSBvZiB0aGUgcm91dGVyIG91dHB1dCdzIHBheWxvYWQuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQml0cmF0ZShwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnUm91dGVyT3V0cHV0Qml0UmF0ZScsIHtcbiAgICAgIHN0YXRpc3RpYzogJ2F2ZycsXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgdW5pdDogVW5pdC5CSVRTX1BFUl9TRUNPTkQsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyBzZW50IGJ5IHRoZSByb3V0ZXIgb3V0cHV0LlxuICAgKi9cbiAgcHVibGljIG1ldHJpY1RvdGFsUGFja2V0cyhwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnUm91dGVyT3V0cHV0VG90YWxQYWNrZXRzJywge1xuICAgICAgc3RhdGlzdGljOiAnc3VtJyxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICB1bml0OiBVbml0LkNPVU5ULFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgcm91dGVyIG91dHB1dCBjb25uZWN0aW9uIHN0YXRlICgxIGNvbm5lY3RlZCwgMCBkaXNjb25uZWN0ZWQpLiBBcHBsaWVzIHRvIFNSVCBvdXRwdXRzIG9ubHkuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQ29ubmVjdGVkKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdSb3V0ZXJPdXRwdXRDb25uZWN0ZWQnLCB7XG4gICAgICBzdGF0aXN0aWM6ICdtaW4nLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIHVuaXQ6IFVuaXQuTk9ORSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIG51bWJlciBvZiByZXRyYW5zbWl0dGVkIHBhY2tldHMgcmVxdWVzdGVkIHRocm91Z2ggQVJRLiBBcHBsaWVzIHRvIFJJU1QgYW5kIFNSVCBvdXRwdXRzLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0FycVJlcXVlc3RzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdSb3V0ZXJPdXRwdXRBUlFSZXF1ZXN0cycsIHtcbiAgICAgIHN0YXRpc3RpYzogJ3N1bScsXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgdW5pdDogVW5pdC5DT1VOVCxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGVmaW5lcyBhbiBBV1MgRWxlbWVudGFsIE1lZGlhQ29ubmVjdCBSb3V0ZXIgT3V0cHV0LlxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgUm91dGVyT3V0cHV0IGV4dGVuZHMgUm91dGVyT3V0cHV0QmFzZSBpbXBsZW1lbnRzIElSb3V0ZXJPdXRwdXQge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1tZWRpYWNvbm5lY3QtYWxwaGEuUm91dGVyT3V0cHV0JztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIFJvdXRlciBPdXRwdXQgZnJvbSBpdHMgQVJOLlxuICAgKlxuICAgKiBUaGUgQVJOIG9ubHkgY29udGFpbnMgdGhlIHNlcnZpY2UtZ2VuZXJhdGVkIElEIChub3QgdGhlIHJvdXRlciBvdXRwdXQgbmFtZSkuIEFjY2Vzc2luZ1xuICAgKiBgcm91dGVyT3V0cHV0TmFtZWAgb24gYW4gQVJOIGltcG9ydCB0aHJvd3Mg4oCUIHVzZSBgZnJvbVJvdXRlck91dHB1dEF0dHJpYnV0ZXMoKWAgdG8gcHJvdmlkZVxuICAgKiB0aGUgbmFtZSBleHBsaWNpdGx5LlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QgaWRcbiAgICogQHBhcmFtIHJvdXRlck91dHB1dEFybiBUaGUgQVJOIG9mIHRoZSBSb3V0ZXIgT3V0cHV0XG4gICAqIEByZXR1cm5zIEEgUm91dGVyIE91dHB1dCBjb25zdHJ1Y3RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVJvdXRlck91dHB1dEFybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCByb3V0ZXJPdXRwdXRBcm46IHN0cmluZyk6IElSb3V0ZXJPdXRwdXQge1xuICAgIHJldHVybiBSb3V0ZXJPdXRwdXQuZnJvbVJvdXRlck91dHB1dEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IHJvdXRlck91dHB1dEFybiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgUm91dGVyIE91dHB1dCBmcm9tIGF0dHJpYnV0ZXMuXG4gICAqXG4gICAqIFVzZSB0aGlzIHdoZW4geW91IG5lZWQgdG8gcmVmZXJlbmNlIGEgcm91dGVyIG91dHB1dCBieSBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QgaWRcbiAgICogQHBhcmFtIGF0dHJzIFRoZSBSb3V0ZXIgT3V0cHV0IGF0dHJpYnV0ZXNcbiAgICogQHJldHVybnMgQSBSb3V0ZXIgT3V0cHV0IGNvbnN0cnVjdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tUm91dGVyT3V0cHV0QXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogUm91dGVyT3V0cHV0QXR0cmlidXRlcyk6IElSb3V0ZXJPdXRwdXQge1xuICAgIC8vIERlcml2ZSB0aGUgSUQgZnJvbSB0aGUgQVJOIHVzaW5nIENGTiBpbnRyaW5zaWNzIHNvIHRoaXMgd29ya3Mgd2l0aCB0b2tlbiBBUk5zIHRvby5cbiAgICAvLyBUaGUgQVJOIGZvcm1hdCBpcyBhcm46YXdzOm1lZGlhY29ubmVjdDo8cmVnaW9uPjo8YWNjb3VudD46cm91dGVyT3V0cHV0OjxpZD4sIHNvIHRoZVxuICAgIC8vIHJlc291cmNlIG5hbWUgaXMgdGhlIElELlxuICAgIGNvbnN0IHJvdXRlck91dHB1dElkID0gYXR0cnMucm91dGVyT3V0cHV0SWQgPz8gZXh0cmFjdFJvdXRlck91dHB1dElkKGF0dHJzLnJvdXRlck91dHB1dEFybik7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBSb3V0ZXJPdXRwdXRCYXNlIGltcGxlbWVudHMgSVJvdXRlck91dHB1dCB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcm91dGVyT3V0cHV0QXJuID0gYXR0cnMucm91dGVyT3V0cHV0QXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJvdXRlck91dHB1dElkID0gcm91dGVyT3V0cHV0SWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0ID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZWRBdCA9IHVuZGVmaW5lZDtcblxuICAgICAgcHVibGljIGdldCByb3V0ZXJPdXRwdXROYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIGlmIChhdHRycy5yb3V0ZXJPdXRwdXROYW1lKSByZXR1cm4gYXR0cnMucm91dGVyT3V0cHV0TmFtZTtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBsaXRgUm91dGVyT3V0cHV0TmFtZU5vdFByb3ZpZGVkYCxcbiAgICAgICAgICBgJ3JvdXRlck91dHB1dE5hbWUnIHdhcyBub3QgcHJvdmlkZWQgd2hlbiBpbXBvcnRpbmcgUm91dGVyT3V0cHV0ICR7dGhpcy5ub2RlLnBhdGh9OyBwcm92aWRlIGl0IGluIGZyb21Sb3V0ZXJPdXRwdXRBdHRyaWJ1dGVzKClgLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBnZXQgaXBBZGRyZXNzKCk6IHN0cmluZyB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgbGl0YFJvdXRlck91dHB1dElwQWRkcmVzc05vdFByb3ZpZGVkYCxcbiAgICAgICAgICBgJ2lwQWRkcmVzcycgaXMgbm90IGF2YWlsYWJsZSBvbiBpbXBvcnRlZCBSb3V0ZXJPdXRwdXQgJHt0aGlzLm5vZGUucGF0aH1gLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbWF4aW11bSBiaXRyYXRlIGluIE1icHMgZm9yIGEga25vd24gdGllciwgb3IgdW5kZWZpbmVkIGZvciBjdXN0b20gdGllcnMuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyB0aWVyTGltaXRNYnBzKHRpZXI6IFJvdXRlck91dHB1dFRpZXIpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aWVyLnZhbHVlID09PSBSb3V0ZXJPdXRwdXRUaWVyLk9VVFBVVF8yMC52YWx1ZSkgcmV0dXJuIDIwO1xuICAgIGlmICh0aWVyLnZhbHVlID09PSBSb3V0ZXJPdXRwdXRUaWVyLk9VVFBVVF81MC52YWx1ZSkgcmV0dXJuIDUwO1xuICAgIGlmICh0aWVyLnZhbHVlID09PSBSb3V0ZXJPdXRwdXRUaWVyLk9VVFBVVF8xMDAudmFsdWUpIHJldHVybiAxMDA7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXJPdXRwdXRBcm46IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlck91dHB1dE5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlck91dHB1dElkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBpcEFkZHJlc3M6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUm91dGVyT3V0cHV0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMucm91dGVyT3V0cHV0TmFtZSA/PyBMYXp5LnN0cmluZyh7IHByb2R1Y2U6ICgpID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7IG1heExlbmd0aDogMTI4IH0pIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gVmFsaWRhdGUgcm91dGVyIG91dHB1dCBuYW1lIGlmIHByb3ZpZGVkXG4gICAgaWYgKHByb3BzLnJvdXRlck91dHB1dE5hbWUgIT0gbnVsbCAmJiBwcm9wcy5yb3V0ZXJPdXRwdXROYW1lICE9PSAnJyAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLnJvdXRlck91dHB1dE5hbWUpKSB7XG4gICAgICBpZiAocHJvcHMucm91dGVyT3V0cHV0TmFtZS5sZW5ndGggPiAxMjgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgUm91dGVyT3V0cHV0TmFtZUxlbmd0aGAsIGBSb3V0ZXIgb3V0cHV0IG5hbWUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEyOCBjaGFyYWN0ZXJzLCBnb3QgJHtwcm9wcy5yb3V0ZXJPdXRwdXROYW1lLmxlbmd0aH1gLCB0aGlzKTtcbiAgICAgIH1cbiAgICAgIGlmICghL15bYS16QS1aMC05Xy1dKyQvLnRlc3QocHJvcHMucm91dGVyT3V0cHV0TmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgUm91dGVyT3V0cHV0TmFtZUZvcm1hdGAsIGBSb3V0ZXIgb3V0cHV0IG5hbWUgbXVzdCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIGh5cGhlbnMsIGFuZCB1bmRlcnNjb3JlcywgZ290ICcke3Byb3BzLnJvdXRlck91dHB1dE5hbWV9J2AsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIG1heGltdW0gYml0cmF0ZVxuICAgIGlmICghcHJvcHMubWF4aW11bUJpdHJhdGUuaXNVbnJlc29sdmVkKCkgJiYgcHJvcHMubWF4aW11bUJpdHJhdGUudG9CcHMoKSA8IDEwMDAwMDApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YFJvdXRlck91dHB1dE1pbkJpdHJhdGVgLCBgTWF4aW11bSBiaXRyYXRlIG11c3QgYmUgYXQgbGVhc3QgMSwwMDAsMDAwIGJpdHMvcyAoMSBNYnBzKSwgZ290ICR7cHJvcHMubWF4aW11bUJpdHJhdGUudG9CcHMoKX1gLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBiaXRyYXRlIGRvZXMgbm90IGV4Y2VlZCB0aWVyIGxpbWl0XG4gICAgY29uc3QgcmVzb2x2ZWRUaWVyID0gcHJvcHMudGllciA/PyBSb3V0ZXJPdXRwdXRUaWVyLk9VVFBVVF8yMDtcbiAgICBjb25zdCB0aWVyTWJwcyA9IFJvdXRlck91dHB1dC50aWVyTGltaXRNYnBzKHJlc29sdmVkVGllcik7XG4gICAgaWYgKGV4Y2VlZHNSb3V0ZXJUaWVyQml0cmF0ZSh0aWVyTWJwcywgcHJvcHMubWF4aW11bUJpdHJhdGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBSb3V0ZXJPdXRwdXRCaXRyYXRlRXhjZWVkc1RpZXJgLCBgTWF4aW11bSBiaXRyYXRlICR7cHJvcHMubWF4aW11bUJpdHJhdGUudG9CcHMoKSAvIDFfMDAwXzAwMH0gTWJwcyBleGNlZWRzIHRoZSAke3Jlc29sdmVkVGllci52YWx1ZX0gdGllciBsaW1pdCBvZiAke3RpZXJNYnBzfSBNYnBzYCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbWFpbnRlbmFuY2UgdGltZSBmb3JtYXRcbiAgICBpZiAocHJvcHMubWFpbnRlbmFuY2VDb25maWd1cmF0aW9uKSB7XG4gICAgICB2YWxpZGF0ZU1haW50ZW5hbmNlVGltZShwcm9wcy5tYWludGVuYW5jZUNvbmZpZ3VyYXRpb24udGltZSk7XG4gICAgfVxuXG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuICAgIGNvbnN0IHRhcmdldFJlZ2lvbiA9IHByb3BzLnJlZ2lvbk5hbWUgPz8gc3RhY2sucmVnaW9uO1xuXG4gICAgLy8gV2lsZGNhcmQgdGhlIGlkIOKAlCBwaW5uaW5nIHRoZSBsaXZlIEFSTiAoYXR0ckFybikgd291bGQgY3JlYXRlIGEgcm9sZSDihpIgcm91dGVyLW91dHB1dCDihpIgcm9sZSBjeWNsZS5cbiAgICBjb25zdCByb3V0ZXJPdXRwdXRBcm4gPSBzdGFjay5mb3JtYXRBcm4oe1xuICAgICAgc2VydmljZTogJ21lZGlhY29ubmVjdCcsXG4gICAgICByZWdpb246IHRhcmdldFJlZ2lvbixcbiAgICAgIHJlc291cmNlOiAncm91dGVyT3V0cHV0JyxcbiAgICAgIHJlc291cmNlTmFtZTogJyonLFxuICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbmZpZ0JpbmQgPSBwcm9wcy5jb25maWd1cmF0aW9uLl9iaW5kKHRoaXMsIHJvdXRlck91dHB1dEFybik7XG5cbiAgICAvLyBDaGVjayB0byBzZWUgaWYgcmVnaW9uIHNwZWNpZmllZCBpcyBhbHNvIGNvbXBhdGlibGUgd2l0aCBBWiBjb25maWd1cmVkIGZvciBzb21lIG9mIHRoZSBSb3V0ZXIgT3V0cHV0cyBjb25maWd1cmF0aW9uc1xuICAgIGlmIChjb25maWdCaW5kLmF2YWlsYWJpbGl0eVpvbmUgJiYgIVRva2VuLmlzVW5yZXNvbHZlZChjb25maWdCaW5kLmF2YWlsYWJpbGl0eVpvbmUpICYmICFUb2tlbi5pc1VucmVzb2x2ZWQodGFyZ2V0UmVnaW9uKVxuICAgICAgJiYgIWNvbmZpZ0JpbmQuYXZhaWxhYmlsaXR5Wm9uZS5zdGFydHNXaXRoKHRhcmdldFJlZ2lvbikpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YFJvdXRlck91dHB1dEF6UmVnaW9uTWlzbWF0Y2hgLCBgQXZhaWxhYmlsaXR5IHpvbmUgJyR7Y29uZmlnQmluZC5hdmFpbGFiaWxpdHlab25lfScgbXVzdCBiZSB3aXRoaW4gcmVnaW9uICcke3RhcmdldFJlZ2lvbn0nYCwgdGhpcyk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm91dGVyT3V0cHV0ID0gbmV3IENmblJvdXRlck91dHB1dCh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBuYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIG1heGltdW1CaXRyYXRlOiBwcm9wcy5tYXhpbXVtQml0cmF0ZS50b0JwcygpLFxuICAgICAgcm91dGluZ1Njb3BlOiBwcm9wcy5yb3V0aW5nU2NvcGUudmFsdWUsXG4gICAgICB0aWVyOiAocHJvcHMudGllciA/PyBSb3V0ZXJPdXRwdXRUaWVyLk9VVFBVVF8yMCkudmFsdWUsXG4gICAgICBhdmFpbGFiaWxpdHlab25lOiBjb25maWdCaW5kLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICBtYWludGVuYW5jZUNvbmZpZ3VyYXRpb246IHByb3BzLm1haW50ZW5hbmNlQ29uZmlndXJhdGlvbiA/IHtcbiAgICAgICAgcHJlZmVycmVkRGF5VGltZTogcHJvcHMubWFpbnRlbmFuY2VDb25maWd1cmF0aW9uLFxuICAgICAgfSA6IHtcbiAgICAgICAgZGVmYXVsdDoge30sXG4gICAgICB9LFxuICAgICAgY29uZmlndXJhdGlvbjogY29uZmlnQmluZC5jb25maWcsXG4gICAgICByZWdpb25OYW1lOiB0YXJnZXRSZWdpb24sXG4gICAgICB0YWdzOiBwcm9wcy50YWdzID8gcmVuZGVyVGFncyhwcm9wcy50YWdzKSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIHRoaXMucm91dGVyT3V0cHV0QXJuID0gcm91dGVyT3V0cHV0LmF0dHJBcm47XG4gICAgdGhpcy5yb3V0ZXJPdXRwdXROYW1lID0gdGhpcy5waHlzaWNhbE5hbWU7XG4gICAgdGhpcy5yb3V0ZXJPdXRwdXRJZCA9IHJvdXRlck91dHB1dC5hdHRySWQ7XG4gICAgdGhpcy5pcEFkZHJlc3MgPSByb3V0ZXJPdXRwdXQuYXR0cklwQWRkcmVzcztcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IHJvdXRlck91dHB1dC5hdHRyQ3JlYXRlZEF0O1xuICAgIHRoaXMudXBkYXRlZEF0ID0gcm91dGVyT3V0cHV0LmF0dHJVcGRhdGVkQXQ7XG5cbiAgICAvLyBXaXRob3V0IHRoaXMgdGhlIHJvdXRlciBpbnB1dCBjYW4gYmUgY3JlYXRlZCBiZWZvcmUgdGhlXG4gICAgLy8gcG9saWN5IGlzIGF0dGFjaGVkIChcImFjY2VzcyBkZW5pZWRcIiBhdCBjcmVhdGUgdGltZSkuIE9yZGVyaW5nIHRoZSBncmFudCBiZWZvcmUgdGhlXG4gICAgLy8gcm91dGVyIGlucHV0IHB1bGxzIHRoZSBwb2xpY3kgaW4gYXMgYSBkZXBlbmRlbmN5LlxuICAgIGNvbmZpZ0JpbmQuZ3JhbnQ/LmFwcGx5QmVmb3JlKHJvdXRlck91dHB1dCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdFJvdXRlck91dHB1dElkKHJvdXRlck91dHB1dEFybjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFyc2VkID0gQXJuLnNwbGl0KHJvdXRlck91dHB1dEFybiwgQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUpLnJlc291cmNlTmFtZTtcbiAgaWYgKHBhcnNlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgbGl0YEludmFsaWRSb3V0ZXJPdXRwdXRBcm5gLFxuICAgICAgYENvdWxkIG5vdCBwYXJzZSBSb3V0ZXIgT3V0cHV0IEFSTjogJHtyb3V0ZXJPdXRwdXRBcm59LiBFeHBlY3RlZCBmb3JtYXQ6IGFybjo8cGFydGl0aW9uPjptZWRpYWNvbm5lY3Q6PHJlZ2lvbj46PGFjY291bnQ+OnJvdXRlck91dHB1dDo8aWQ+YCxcbiAgICApO1xuICB9XG4gIHJldHVybiBwYXJzZWQ7XG59XG4iXX0=
package/lib/shared.js CHANGED
@@ -23,7 +23,7 @@ const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
23
23
  */
24
24
  class EncryptionAlgorithm {
25
25
  value;
26
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.EncryptionAlgorithm", version: "2.267.0-alpha.0" };
26
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.EncryptionAlgorithm", version: "2.269.0-alpha.0" };
27
27
  /**
28
28
  * Option for AES128
29
29
  */
@@ -60,7 +60,7 @@ exports.EncryptionAlgorithm = EncryptionAlgorithm;
60
60
  */
61
61
  class KeyType {
62
62
  value;
63
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.KeyType", version: "2.267.0-alpha.0" };
63
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.KeyType", version: "2.269.0-alpha.0" };
64
64
  /**
65
65
  * Option for Static Key
66
66
  */
@@ -129,7 +129,7 @@ var MaintenanceDay;
129
129
  */
130
130
  class BridgeProtocol {
131
131
  value;
132
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.BridgeProtocol", version: "2.267.0-alpha.0" };
132
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.BridgeProtocol", version: "2.269.0-alpha.0" };
133
133
  /**
134
134
  * Option for RTP-FEC
135
135
  */
@@ -175,7 +175,7 @@ exports.BridgeProtocol = BridgeProtocol;
175
175
  * });
176
176
  */
177
177
  class GatewayNetwork {
178
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.GatewayNetwork", version: "2.267.0-alpha.0" };
178
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.GatewayNetwork", version: "2.269.0-alpha.0" };
179
179
  /**
180
180
  * Define a new gateway network.
181
181
  *
@@ -220,7 +220,7 @@ exports.GatewayNetwork = GatewayNetwork;
220
220
  */
221
221
  class FailoverMode {
222
222
  value;
223
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.FailoverMode", version: "2.267.0-alpha.0" };
223
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.FailoverMode", version: "2.269.0-alpha.0" };
224
224
  /**
225
225
  * MERGE combines the source streams into a single stream, allowing graceful
226
226
  * recovery from any single-source loss.
@@ -299,7 +299,7 @@ var MediaLivePipeline;
299
299
  */
300
300
  class NetworkInterface {
301
301
  value;
302
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.NetworkInterface", version: "2.267.0-alpha.0" };
302
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.NetworkInterface", version: "2.269.0-alpha.0" };
303
303
  /**
304
304
  * Option for ENA
305
305
  */
@@ -332,7 +332,7 @@ exports.NetworkInterface = NetworkInterface;
332
332
  * Factory class for creating VPC Interface configurations
333
333
  */
334
334
  class VpcInterface {
335
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.VpcInterface", version: "2.267.0-alpha.0" };
335
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.VpcInterface", version: "2.269.0-alpha.0" };
336
336
  /**
337
337
  * Define a new VPC Interface configuration. MediaConnect will create network interfaces automatically.
338
338
  *
@@ -525,7 +525,7 @@ function resolveRouterSrtEncryption(scope, id, encryption, sourceArn) {
525
525
  * Use the predefined constants for standard rates, or {@link Framerate.of} for a custom rate.
526
526
  */
527
527
  class Framerate {
528
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.Framerate", version: "2.267.0-alpha.0" };
528
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.Framerate", version: "2.269.0-alpha.0" };
529
529
  /** 24 fps (cinema) — `24/1`. */
530
530
  static FPS_24 = new Framerate(24, 1);
531
531
  /** 25 fps — `25/1`. */
@@ -590,7 +590,7 @@ exports.Framerate = Framerate;
590
590
  * a custom ratio.
591
591
  */
592
592
  class PixelAspectRatio {
593
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.PixelAspectRatio", version: "2.267.0-alpha.0" };
593
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.PixelAspectRatio", version: "2.269.0-alpha.0" };
594
594
  /** Square pixels (`1:1`). */
595
595
  static SQUARE = new PixelAspectRatio(1, 1);
596
596
  /**
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aws-cdk/aws-mediaconnect-alpha",
3
3
  "private": false,
4
- "version": "2.267.0-alpha.0",
4
+ "version": "2.269.0-alpha.0",
5
5
  "description": "The CDK construct library for AWS Elemental MediaConnect",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
@@ -79,17 +79,17 @@
79
79
  },
80
80
  "license": "Apache-2.0",
81
81
  "devDependencies": {
82
- "@aws-cdk/cdk-build-tools": "2.267.0-alpha.0",
82
+ "@aws-cdk/cdk-build-tools": "2.269.0-alpha.0",
83
83
  "@aws-cdk/integ-runner": "^2.202.3",
84
- "@aws-cdk/integ-tests-alpha": "^2.267.0-alpha.0",
85
- "@aws-cdk/pkglint": "2.267.0-alpha.0",
84
+ "@aws-cdk/integ-tests-alpha": "^2.269.0-alpha.0",
85
+ "@aws-cdk/pkglint": "2.269.0-alpha.0",
86
86
  "@types/jest": "^29.5.14",
87
- "aws-cdk-lib": "2.267.0",
87
+ "aws-cdk-lib": "2.269.0",
88
88
  "jest": "^29.7.0"
89
89
  },
90
90
  "homepage": "https://github.com/aws/aws-cdk",
91
91
  "peerDependencies": {
92
- "aws-cdk-lib": "^2.267.0",
92
+ "aws-cdk-lib": "^2.269.0",
93
93
  "constructs": "^10.5.0"
94
94
  },
95
95
  "separate-module": false,
@@ -3,8 +3,9 @@ import { Construct } from 'constructs';
3
3
  import { Bitrate, Duration, Stack } from 'aws-cdk-lib';
4
4
  import * as ec2 from 'aws-cdk-lib/aws-ec2';
5
5
  import * as iam from 'aws-cdk-lib/aws-iam';
6
+ import { Secret } from 'aws-cdk-lib/aws-secretsmanager';
6
7
  import * as secretsmanager from 'aws-cdk-lib/aws-secretsmanager';
7
- import * as medialive from 'aws-cdk-lib/aws-medialive';
8
+ import * as medialive from '@aws-cdk/aws-medialive-alpha';
8
9
  import {
9
10
  Bridge,
10
11
  BridgeConfiguration,