@aws-cdk/aws-ec2-alpha 2.257.0-alpha.0 → 2.258.1-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.
Binary file
package/lib/ipam.js CHANGED
@@ -315,7 +315,7 @@ let Ipam = (() => {
315
315
  Ipam = _classThis = _classDescriptor.value;
316
316
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
317
317
  }
318
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.Ipam", version: "2.257.0-alpha.0" };
318
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.Ipam", version: "2.258.1-alpha.0" };
319
319
  /** Uniquely identifies this class. */
320
320
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.Ipam';
321
321
  /**
package/lib/route.js CHANGED
@@ -82,7 +82,7 @@ let EgressOnlyInternetGateway = (() => {
82
82
  EgressOnlyInternetGateway = _classThis = _classDescriptor.value;
83
83
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
84
84
  }
85
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.EgressOnlyInternetGateway", version: "2.257.0-alpha.0" };
85
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.EgressOnlyInternetGateway", version: "2.258.1-alpha.0" };
86
86
  /** Uniquely identifies this class. */
87
87
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.EgressOnlyInternetGateway';
88
88
  /**
@@ -145,7 +145,7 @@ let InternetGateway = (() => {
145
145
  InternetGateway = _classThis = _classDescriptor.value;
146
146
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
147
147
  }
148
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.InternetGateway", version: "2.257.0-alpha.0" };
148
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.InternetGateway", version: "2.258.1-alpha.0" };
149
149
  /** Uniquely identifies this class. */
150
150
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.InternetGateway';
151
151
  /**
@@ -219,7 +219,7 @@ let VPNGatewayV2 = (() => {
219
219
  VPNGatewayV2 = _classThis = _classDescriptor.value;
220
220
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
221
221
  }
222
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.VPNGatewayV2", version: "2.257.0-alpha.0" };
222
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.VPNGatewayV2", version: "2.258.1-alpha.0" };
223
223
  /** Uniquely identifies this class. */
224
224
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.VPNGatewayV2';
225
225
  /**
@@ -317,7 +317,7 @@ let NatGateway = (() => {
317
317
  NatGateway = _classThis = _classDescriptor.value;
318
318
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
319
319
  }
320
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.NatGateway", version: "2.257.0-alpha.0" };
320
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.NatGateway", version: "2.258.1-alpha.0" };
321
321
  /** Uniquely identifies this class. */
322
322
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.NatGateway';
323
323
  /**
@@ -430,7 +430,7 @@ let VPCPeeringConnection = (() => {
430
430
  VPCPeeringConnection = _classThis = _classDescriptor.value;
431
431
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
432
432
  }
433
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.VPCPeeringConnection", version: "2.257.0-alpha.0" };
433
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.VPCPeeringConnection", version: "2.258.1-alpha.0" };
434
434
  /** Uniquely identifies this class. */
435
435
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.VPCPeeringConnection';
436
436
  /**
@@ -528,7 +528,7 @@ exports.VPCPeeringConnection = VPCPeeringConnection;
528
528
  * The gateway or endpoint targeted by the route.
529
529
  */
530
530
  class RouteTargetType {
531
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.RouteTargetType", version: "2.257.0-alpha.0" };
531
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.RouteTargetType", version: "2.258.1-alpha.0" };
532
532
  /**
533
533
  * The gateway route target. This is used for targets such as
534
534
  * egress-only internet gateway or VPC peering connection.
@@ -576,7 +576,7 @@ let Route = (() => {
576
576
  Route = _classThis = _classDescriptor.value;
577
577
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
578
578
  }
579
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.Route", version: "2.257.0-alpha.0" };
579
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.Route", version: "2.258.1-alpha.0" };
580
580
  /** Uniquely identifies this class. */
581
581
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.Route';
582
582
  /**
@@ -689,7 +689,7 @@ let RouteTable = (() => {
689
689
  RouteTable = _classThis = _classDescriptor.value;
690
690
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
691
691
  }
692
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.RouteTable", version: "2.257.0-alpha.0" };
692
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.RouteTable", version: "2.258.1-alpha.0" };
693
693
  /** Uniquely identifies this class. */
694
694
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.RouteTable';
695
695
  /**
@@ -1,7 +1,8 @@
1
1
  import { Resource } from 'aws-cdk-lib';
2
2
  import type { INetworkAcl, IRouteTable, ISubnet } from 'aws-cdk-lib/aws-ec2';
3
3
  import { SubnetType } from 'aws-cdk-lib/aws-ec2';
4
- import type { SubnetReference } from 'aws-cdk-lib/aws-ec2/lib/ec2.generated';
4
+ type SubnetReference = aws_ec2.SubnetReference;
5
+ import type { aws_ec2 } from 'aws-cdk-lib/interfaces';
5
6
  import type { IDependable } from 'constructs';
6
7
  import { Construct } from 'constructs';
7
8
  import type { IVpcV2 } from './vpc-v2-base';
package/lib/subnet-v2.js CHANGED
@@ -49,7 +49,7 @@ const util_1 = require("./util");
49
49
  * IPv4 or IPv6 CIDR range for the subnet
50
50
  */
51
51
  class IpCidr {
52
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.IpCidr", version: "2.257.0-alpha.0" };
52
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.IpCidr", version: "2.258.1-alpha.0" };
53
53
  /**
54
54
  * IPv6 CIDR range for the subnet
55
55
  * Allowed only if IPv6 is enabled on VPc
@@ -97,7 +97,7 @@ let SubnetV2 = (() => {
97
97
  SubnetV2 = _classThis = _classDescriptor.value;
98
98
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
99
99
  }
100
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.SubnetV2", version: "2.257.0-alpha.0" };
100
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.SubnetV2", version: "2.258.1-alpha.0" };
101
101
  /** Uniquely identifies this class. */
102
102
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.SubnetV2';
103
103
  /**
@@ -483,4 +483,4 @@ function validateOverlappingCidrRangesipv6(vpc, ipv6CidrBlock) {
483
483
  }
484
484
  return result;
485
485
  }
486
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibmV0LXYyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3VibmV0LXYyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUEyRztBQU0zRyxpREFNNkI7QUFFN0IsNEVBQTREO0FBQzVELDhFQUE4RjtBQUM5RiwwRUFBMEU7QUFFMUUsMkNBQXdEO0FBQ3hELG1DQUFxQztBQUNyQyxpQ0FBcUU7QUFVckU7O0dBRUc7QUFDSCxNQUFhLE1BQU07O0lBQ2pCOzs7T0FHRztJQUNhLElBQUksQ0FBUztJQUM3QixZQUFZLEtBQWE7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7S0FDbkI7O0FBUkgsd0JBU0M7QUFFRDs7R0FFRztBQUNILE1BQU0sY0FBYyxHQUFHLHFCQUFxQixDQUFDO0FBRTdDOztHQUVHO0FBQ0gsTUFBTSxjQUFjLEdBQUcscUJBQXFCLENBQUM7QUFpRzdDOzs7Ozs7Ozs7O0dBVUc7SUFFVSxRQUFROzRCQURwQixvQ0FBa0I7Ozs7c0JBQ1csc0JBQVE7Ozt3QkFBaEIsU0FBUSxXQUFROzs7OytDQStObkMsSUFBQSxrQ0FBYyxHQUFFO1lBQ2pCLDRNQUFPLG1CQUFtQiw2REFTekI7WUF6T0gsNktBeVBDOzs7OztRQXhQQyxzQ0FBc0M7UUFDL0IsTUFBTSxDQUFVLHFCQUFxQixHQUFXLGlDQUFpQyxDQUFDO1FBRXpGOztXQUVHO1FBQ0ksTUFBTSxDQUFDLHNCQUFzQixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCOzs7Ozs7Ozs7O1lBQzFGOzs7ZUFHRztZQUNILE1BQU0sZ0JBQWlCLFNBQVEsc0JBQVE7Z0JBQ3JDOzttQkFFRztnQkFDYSxhQUFhLEdBQVksS0FBSyxDQUFDLGFBQWEsQ0FBQztnQkFFN0Q7O21CQUVHO2dCQUNhLFVBQVUsR0FBZ0IsS0FBSyxDQUFDLFVBQVUsQ0FBQztnQkFFM0Q7O21CQUVHO2dCQUNhLGdCQUFn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Q0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGF6eSwgTmFtZXMsIFJlc291cmNlLCBUYWdzLCBUb2tlbiwgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB0eXBlIHtcbiAgSU5ldHdvcmtBY2wsXG4gIElSb3V0ZVRhYmxlLFxuICBJU3VibmV0LFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7XG4gIENmblN1Ym5ldCxcbiAgQ2ZuU3VibmV0Um91dGVUYWJsZUFzc29jaWF0aW9uLFxuICBOZXR3b3JrQWNsLFxuICBTdWJuZXROZXR3b3JrQWNsQXNzb2NpYXRpb24sXG4gIFN1Ym5ldFR5cGUsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHR5cGUgeyBTdWJuZXRSZWZlcmVuY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyL2xpYi9lYzIuZ2VuZXJhdGVkJztcbmltcG9ydCB7IGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEsIE1ldGhvZE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB0eXBlIHsgSURlcGVuZGFibGUgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IENvbnN0cnVjdCwgRGVwZW5kZW5jeUdyb3VwIH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBSb3V0ZVRhYmxlIH0gZnJvbSAnLi9yb3V0ZSc7XG5pbXBvcnQgeyBDaWRyQmxvY2ssIENpZHJCbG9ja0lwdjYsIGRlZmF1bHRTdWJuZXROYW1lIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB0eXBlIHsgSVZwY1YyIH0gZnJvbSAnLi92cGMtdjItYmFzZSc7XG5cbi8qKlxuICogSW50ZXJmYWNlIHRvIGRlZmluZSBzdWJuZXQgQ0lEUlxuICovXG5pbnRlcmZhY2UgSUNpZHIge1xuICByZWFkb25seSBjaWRyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSVB2NCBvciBJUHY2IENJRFIgcmFuZ2UgZm9yIHRoZSBzdWJuZXRcbiAqL1xuZXhwb3J0IGNsYXNzIElwQ2lkciBpbXBsZW1lbnRzIElDaWRyIHtcbiAgLyoqXG4gICAqIElQdjYgQ0lEUiByYW5nZSBmb3IgdGhlIHN1Ym5ldFxuICAgKiBBbGxvd2VkIG9ubHkgaWYgSVB2NiBpcyBlbmFibGVkIG9uIFZQY1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNpZHI6IHN0cmluZztcbiAgY29uc3RydWN0b3IocHJvcHM6IHN0cmluZyApIHtcbiAgICB0aGlzLmNpZHIgPSBwcm9wcztcbiAgfVxufVxuXG4vKipcbiAqIFZQQyBOYW1lIHRhZyBjb25zdGFudFxuICovXG5jb25zdCBTVUJORVRUWVBFX1RBRyA9ICdhd3MtY2RrOnN1Ym5ldC10eXBlJztcblxuLyoqXG4gKiBTdWJuZXQgTmFtZSB0YWcgY29uc3RhbnRcbiAqL1xuY29uc3QgU1VCTkVUTkFNRV9UQUcgPSAnYXdzLWNkazpzdWJuZXQtbmFtZSc7XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBkZWZpbmUgc3VibmV0IGZvciBWUEMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3VibmV0VjJQcm9wcyB7XG4vKipcbiAqIFZQQyBQcm9wXG4gKi9cbiAgcmVhZG9ubHkgdnBjOiBJVnBjVjI7XG5cbiAgLyoqXG4gICAqIGlwdjQgY2lkciB0byBhc3NpZ24gdG8gdGhpcyBzdWJuZXQuXG4gICAqIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXN1Ym5ldC5odG1sI2Nmbi1lYzItc3VibmV0LWNpZHJibG9ja1xuICAgKi9cbiAgcmVhZG9ubHkgaXB2NENpZHJCbG9jazogSXBDaWRyO1xuXG4gIC8qKlxuICAgKiBJcHY2IENJRFIgUmFuZ2UgZm9yIHN1Ym5ldFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIElwdjYgYWRkcmVzc1xuICAgKi9cbiAgcmVhZG9ubHkgaXB2NkNpZHJCbG9jaz86IElwQ2lkcjtcblxuICAvKipcbiAgICogQ3VzdG9tIEFaIGZvciB0aGUgc3VibmV0XG4gICAqL1xuICByZWFkb25seSBhdmFpbGFiaWxpdHlab25lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBSb3V0ZSBmb3Igc3VibmV0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYSBkZWZhdWx0IHJvdXRlIHRhYmxlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlVGFibGU/OiBJUm91dGVUYWJsZTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgZGVmYXVsdCBSb3V0ZVRhYmxlIGNyZWF0ZWQgYnkgQ0RLIHRvIGJlIHVzZWQgZm9yIHRhZ2dpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IHJvdXRlIHRhYmxlIG5hbWUgY3JlYXRlZCBieSBDREsgYXMgJ0RlZmF1bHRDREtSb3V0ZVRhYmxlJ1xuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFJvdXRlVGFibGVOYW1lID86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgU3VibmV0IHRvIGNvbmZpZ3VyZS5cbiAgICpcbiAgICogVGhlIFN1Ym5ldCB0eXBlIHdpbGwgY29udHJvbCB0aGUgYWJpbGl0eSB0byByb3V0ZSBhbmQgY29ubmVjdCB0byB0aGVcbiAgICogSW50ZXJuZXQuXG4gICAqXG4gICAqIFRPRE86IEFkZCB2YWxpZGF0aW9uIGNoZWNrIGBzdWJuZXRUeXBlYCB3aGVuIGFkZGluZyByZXNvdXJjZXMgKGUuZy4gY2Fubm90IGFkZCBOYXRHYXRld2F5IHRvIHByaXZhdGUpXG4gICAqL1xuICByZWFkb25seSBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlO1xuXG4gIC8qKlxuICAgKiBTdWJuZXQgbmFtZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHByb3Zpc2lvbmVkIHdpdGggYW4gYXV0b2dlbmVyYXRlZCBuYW1lIGJ5IENES1xuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgYSBuZXR3b3JrIGludGVyZmFjZSBjcmVhdGVkIGluIHRoaXMgc3VibmV0IHJlY2VpdmVzIGFuIElQdjYgYWRkcmVzcy5cbiAgICogSWYgeW91IHNwZWNpZnkgQXNzaWduSXB2NkFkZHJlc3NPbkNyZWF0aW9uLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgSXB2NkNpZHJCbG9jay5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWQgaW4gY2FzZSBub3QgcHJvdmlkZWQgYXMgYW4gaW5wdXRcbiAgICovXG4gIHJlYWRvbmx5IGFzc2lnbklwdjZBZGRyZXNzT25DcmVhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIGlmIGluc3RhbmNlcyBsYXVuY2hlZCBpbnRvIHRoZSBzdWJuZXQgc2hvdWxkIGJlIGFzc2lnbmVkIGEgcHVibGljIElQIGFkZHJlc3MuXG4gICAqIFRoaXMgcHJvcGVydHkgY2FuIG9ubHkgYmUgc2V0IGZvciBwdWJsaWMgc3VibmV0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWQgaW4gY2FzZSBub3QgcHJvdmlkZWQgYXMgYW4gaW5wdXRcbiAgICovXG4gIHJlYWRvbmx5IG1hcFB1YmxpY0lwT25MYXVuY2g/OiBib29sZWFuO1xuXG59XG5cbi8qKlxuICogSW50ZXJmYWNlIHdpdGggYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGZvciBTdWJuZXRWMlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTdWJuZXRWMiBleHRlbmRzIElTdWJuZXQge1xuXG4gIC8qKlxuICAgKiBUaGUgSVB2NiBDSURSIGJsb2NrIGZvciB0aGlzIHN1Ym5ldFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NkNpZHJCbG9jaz86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygc3VibmV0IChwdWJsaWMgb3IgcHJpdmF0ZSkgdGhhdCB0aGlzIHN1Ym5ldCByZXByZXNlbnRzLlxuICAgKlxuICAgKiBAYXR0cmlidXRlIFN1Ym5ldFR5cGVcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldFR5cGU/OiBTdWJuZXRUeXBlO1xuXG59XG5cbi8qKlxuICogVGhlIFN1Ym5ldFYyIGNsYXNzIHJlcHJlc2VudHMgYSBzdWJuZXQgd2l0aGluIGEgVlBDIChWaXJ0dWFsIFByaXZhdGUgQ2xvdWQpIGluIEFXUy5cbiAqIEl0IGV4dGVuZHMgdGhlIFJlc291cmNlIGNsYXNzIGFuZCBpbXBsZW1lbnRzIHRoZSBJU3VibmV0IGludGVyZmFjZS5cbiAqXG4gKiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYW5kIG1hbmFnZSBzdWJuZXRzIHdpdGhpbiBhIFZwY1YyIGluc3RhbmNlLlxuICogU3VibmV0cyBjYW4gYmUgY29uZmlndXJlZCB3aXRoIHNwZWNpZmljIElQIGFkZHJlc3MgcmFuZ2VzIChJUHY0IGFuZCBJUHY2KSwgYXZhaWxhYmlsaXR5IHpvbmVzLFxuICogYW5kIHN1Ym5ldCB0eXBlcyAoZS5nLiwgcHVibGljLCBwcml2YXRlLCBpc29sYXRlZCkuXG4gKlxuICogQHJlc291cmNlIEFXUzo6RUMyOjpTdWJuZXRcbiAqXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBTdWJuZXRWMiBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVN1Ym5ldFYyIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZWMyLWFscGhhLlN1Ym5ldFYyJztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIHN1Ym5ldCB0byB0aGUgVlBDXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TdWJuZXRWMkF0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IFN1Ym5ldFYyQXR0cmlidXRlcykgOiBJU3VibmV0VjIge1xuICAgIC8qKlxuICAgICAqIENsYXNzIHRvIGRlZmluZSBhbiBpbXBvcnQgZm9yIGFuIGV4aXN0aW5nIHN1Ym5ldFxuICAgICAqIEByZXNvdXJjZSBBV1M6OkVDMjo6U3VibmV0XG4gICAgICovXG4gICAgY2xhc3MgSW1wb3J0ZWRTdWJuZXRWMiBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVN1Ym5ldFYyIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIElQdjYgQ0lEUiBCbG9jayBhc3NpZ25lZCB0byB0aGlzIHN1Ym5ldFxuICAgICAgICovXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaXB2NkNpZHJCbG9jaz86IHN0cmluZyA9IGF0dHJzLmlwdjZDaWRyQmxvY2s7XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlIHR5cGUgb2Ygc3VibmV0IChlZy4gcHVibGljIG9yIHByaXZhdGUpIHRoYXQgdGhpcyBzdWJuZXQgcmVwcmVzZW50cy5cbiAgICAgICAqL1xuICAgICAgcHVibGljIHJlYWRvbmx5IHN1Ym5ldFR5cGU/OiBTdWJuZXRUeXBlID0gYXR0cnMuc3VibmV0VHlwZTtcblxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgQXZhaWxhYmlsaXR5IFpvbmUgaW4gd2hpY2ggc3VibmV0IGlzIGxvY2F0ZWRcbiAgICAgICAqL1xuICAgICAgcHVibGljIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZyA9IGF0dHJzLmF2YWlsYWJpbGl0eVpvbmU7XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlIHN1Ym5ldElkIGZvciB0aGlzIHBhcnRpY3VsYXIgc3VibmV0XG4gICAgICAgKiBSZWZlcnMgdG8gdGhlIHBoeXNpY2FsIElEIGNyZWF0ZWRcbiAgICAgICAqL1xuICAgICAgcHVibGljIHJlYWRvbmx5IHN1Ym5ldElkOiBzdHJpbmcgPSBhdHRycy5zdWJuZXRJZDtcblxuICAgICAgLyoqXG4gICAgICAgKiBEZXBlbmRhYmxlIHRoYXQgY2FuIGJlIGRlcGVuZGVkIHVwb24gdG8gZm9yY2UgaW50ZXJuZXQgY29ubmVjdGl2aXR5IGVzdGFibGlzaGVkIG9uIHRoZSBWUENcbiAgICAgICAqL1xuICAgICAgcHVibGljIHJlYWRvbmx5IGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQ6IElEZXBlbmRhYmxlID0gbmV3IERlcGVuZGVuY3lHcm91cCgpO1xuXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBJUHY0IENJRFIgYmxvY2sgYXNzaWduZWQgdG8gdGhpcyBzdWJuZXRcbiAgICAgICAqL1xuICAgICAgcHVibGljIHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s6IHN0cmluZyA9IGF0dHJzLmlwdjRDaWRyQmxvY2s7XG5cbiAgICAgIC8qKlxuICAgICAgICogIEN1cnJlbnQgcm91dGUgdGFibGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3VibmV0XG4gICAgICAgKi9cbiAgICAgIHB1YmxpYyByZWFkb25seSByb3V0ZVRhYmxlOiBJUm91dGVUYWJsZSA9IHsgcm91dGVUYWJsZUlkOiBhdHRycy5yb3V0ZVRhYmxlSWQhIH07XG5cbiAgICAgIHB1YmxpYyBnZXQgc3VibmV0UmVmKCk6IFN1Ym5ldFJlZmVyZW5jZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VibmV0SWQ6IHRoaXMuc3VibmV0SWQsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogQXNzb2NpYXRlIGEgTmV0d29yayBBQ0wgd2l0aCB0aGlzIHN1Ym5ldFxuICAgICAgICogUmVxdWlyZWQgaGVyZSBzaW5jZSBpdCBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgSVN1Ym5ldFYyXG4gICAgICAgKi9cbiAgICAgIHB1YmxpYyBhc3NvY2lhdGVOZXR3b3JrQWNsKGFjbElkOiBzdHJpbmcsIG5ldHdvcmtBY2w6IElOZXR3b3JrQWNsKSB7XG4gICAgICAgIGNvbnN0IGFjbFNjb3BlID0gbmV0d29ya0FjbCBpbnN0YW5jZW9mIENvbnN0cnVjdCA/IG5ldHdvcmtBY2wgOiB0aGlzO1xuICAgICAgICBjb25zdCBvdGhlciA9IG5ldHdvcmtBY2wgaW5zdGFuY2VvZiBDb25zdHJ1Y3QgPyB0aGlzIDogbmV0d29ya0FjbDtcbiAgICAgICAgbmV3IFN1Ym5ldE5ldHdvcmtBY2xBc3NvY2lhdGlvbihhY2xTY29wZSwgYWNsSWQgKyBOYW1lcy5ub2RlVW5pcXVlSWQob3RoZXIubm9kZSksIHtcbiAgICAgICAgICBuZXR3b3JrQWNsLFxuICAgICAgICAgIHN1Ym5ldDogdGhpcyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wb3J0ZWRTdWJuZXRWMihzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBdmFpbGFiaWxpdHkgWm9uZSB0aGUgc3VibmV0IGlzIGxvY2F0ZWQgaW5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhdmFpbGFiaWxpdHlab25lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdWJuZXRJZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHN1Ym5ldFxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3VibmV0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogIERlcGVuZGVuY2llcyBmb3IgaW50ZXJuZXQgY29ubmVjdGl2aXR5XG4gICAqIFRoaXMgUHJvcGVydHkgZXhwb3NlcyB0aGUgUm91dGVUYWJsZS1TdWJuZXQgYXNzb2NpYXRpb24gc28gdGhhdCBvdGhlciByZXNvdXJjZXMgY2FuIGRlcGVuZCBvbiBpdC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkOiBJRGVwZW5kYWJsZTtcblxuICAvKipcbiAgICogVGhlIHZhcmlhYmxlIG5hbWUgYGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWRgIGRvZXMgbm90IHJlZmxlY3Qgd2hhdCBpdCBhY3R1YWxseSBpcy5cbiAgICogVGhlIG5hbWluZyBpcyBlbmZvcmNlZCBieSBJU3VibmV0LiBXZSBuZWVkIHRvIGtlZXAgaXQgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eS5cbiAgICogSXQgZXhwb3NlcyB0aGUgUm91dGVUYWJsZS1TdWJuZXQgYXNzb2NpYXRpb24gc28gdGhhdCBvdGhlciByZXNvdXJjZXMgY2FuIGRlcGVuZCBvbiBpdC5cbiAgICogRS5nLiBSZXNvdXJjZXMgaW4gYSBzdWJuZXQsIHdoZW4gYmVpbmcgZGVsZXRlZCwgbWF5IG5lZWQgdGhlIFJvdXRlVGFibGUgdG8gZXhpc3QgaW4gb3JkZXIgdG8gZGVsZXRlIHByb3Blcmx5XG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkID0gbmV3IERlcGVuZGVuY3lHcm91cCgpO1xuXG4gIC8qKlxuICAgKiBUaGUgSVB2NCBDSURSIGJsb2NrIGZvciB0aGlzIHN1Ym5ldFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElQdjYgQ0lEUiBCbG9jayBmb3IgdGhpcyBzdWJuZXRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpcHY2Q2lkckJsb2NrPzogc3RyaW5nO1xuXG4gIHB1YmxpYyBnZXQgc3VibmV0UmVmKCk6IFN1Ym5ldFJlZmVyZW5jZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Ym5ldElkOiB0aGlzLnN1Ym5ldElkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygc3VibmV0IChwdWJsaWMgb3IgcHJpdmF0ZSkgdGhhdCB0aGlzIHN1Ym5ldCByZXByZXNlbnRzLlxuICAgKiBAYXR0cmlidXRlIFN1Ym5ldFR5cGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdWJuZXRUeXBlPzogU3VibmV0VHlwZTtcblxuICBwcml2YXRlIF9uZXR3b3JrQWNsOiBJTmV0d29ya0FjbDtcblxuICBwcml2YXRlIF9yb3V0ZVRhYmxlOiBJUm91dGVUYWJsZTtcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIG5ldyBTdWJuZXRWMiBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHNjb3BlIFRoZSBwYXJlbnQgQ29uc3RydWN0IHRoYXQgdGhpcyByZXNvdXJjZSB3aWxsIGJlIHBhcnQgb2YuXG4gICAqIEBwYXJhbSBpZCBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgcmVzb3VyY2UuXG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgc3VibmV0LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFN1Ym5ldFYyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuc3VibmV0TmFtZSA/PyBMYXp5LnN0cmluZyh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7IG1heExlbmd0aDogMTI4LCBhbGxvd2VkU3BlY2lhbENoYXJhY3RlcnM6ICdfJyB9KSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgY29uc3QgaXB2NENpZHJCbG9jayA9IHByb3BzLmlwdjRDaWRyQmxvY2suY2lkcjtcbiAgICBjb25zdCBpcHY2Q2lkckJsb2NrID0gcHJvcHMuaXB2NkNpZHJCbG9jaz8uY2lkcjtcblxuICAgIGlmICghY2hlY2tDaWRyUmFuZ2VzKHByb3BzLnZwYywgcHJvcHMuaXB2NENpZHJCbG9jay5jaWRyKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgQ2lkckJsb2NrT3V0c2lkZVZwY1JhbmdlYCwgJ0NJRFIgYmxvY2sgc2hvdWxkIGJlIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgVlBDJywgdGhpcyk7XG4gICAgfVxuXG4gICAgbGV0IG92ZXJsYXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBsZXQgb3ZlcmxhcElwdjY6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmlwdjRDaWRyQmxvY2spKSB7XG4gICAgICBvdmVybGFwID0gdmFsaWRhdGVPdmVybGFwcGluZ0NpZHJSYW5nZXMocHJvcHMudnBjLCBwcm9wcy5pcHY0Q2lkckJsb2NrLmNpZHIpO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIHdoZXRoZXIgVlBDIHN1cHBvcnRzIGlwdjZcbiAgICBpZiAocHJvcHMuaXB2NkNpZHJCbG9jaz8uY2lkciAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmlwdjZDaWRyQmxvY2s/LmNpZHIpKSB7XG4gICAgICB2YWxpZGF0ZVN1cHBvcnRJcHY2KHByb3BzLnZwYyk7XG4gICAgICBvdmVybGFwSXB2NiA9IHZhbGlkYXRlT3ZlcmxhcHBpbmdDaWRyUmFuZ2VzaXB2Nihwcm9wcy52cGMsIHByb3BzLmlwdjZDaWRyQmxvY2s/LmNpZHIpO1xuICAgIH1cblxuICAgIGlmIChvdmVybGFwIHx8IG92ZXJsYXBJcHY2KSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBDaWRyQmxvY2tPdmVybGFwc1dpdGhFeGlzdGluZ1N1Ym5ldHNgLCAnQ0lEUiBibG9jayBzaG91bGQgbm90IG92ZXJsYXAgd2l0aCBleGlzdGluZyBzdWJuZXQgYmxvY2tzJywgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmFzc2lnbklwdjZBZGRyZXNzT25DcmVhdGlvbiAmJiAhcHJvcHMuaXB2NkNpZHJCbG9jaykge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgSXB2NkNpZHJCbG9ja1JlcXVpcmVkRm9ySXB2NkFzc2lnbm1lbnRgLCAnSVB2NiBDSURSIGJsb2NrIGlzIHJlcXVpcmVkIHdoZW4gYXNzaWduaW5nIElQdjYgYWRkcmVzcyBvbiBjcmVhdGlvbicsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5tYXBQdWJsaWNJcE9uTGF1bmNoID09PSB0cnVlICYmIHByb3BzLnN1Ym5ldFR5cGUgIT09IFN1Ym5ldFR5cGUuUFVCTElDKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBNYXBQdWJsaWNJcE9uTGF1bmNoT25seUZvclB1YmxpY1N1Ym5ldHNgLCAnbWFwUHVibGljSXBPbkxhdW5jaCBjYW4gb25seSBiZSBzZXQgdG8gdHJ1ZSBmb3IgcHVibGljIHN1Ym5ldHMnLCB0aGlzKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJuZXQgPSBuZXcgQ2ZuU3VibmV0KHRoaXMsICdTdWJuZXQnLCB7XG4gICAgICB2cGNJZDogcHJvcHMudnBjLnZwY0lkLFxuICAgICAgY2lkckJsb2NrOiBpcHY0Q2lkckJsb2NrLFxuICAgICAgaXB2NkNpZHJCbG9jazogaXB2NkNpZHJCbG9jayxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IHByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICBhc3NpZ25JcHY2QWRkcmVzc09uQ3JlYXRpb246IHByb3BzLmFzc2lnbklwdjZBZGRyZXNzT25DcmVhdGlvbixcbiAgICAgIG1hcFB1YmxpY0lwT25MYXVuY2g6IHByb3BzLm1hcFB1YmxpY0lwT25MYXVuY2gsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gc3VibmV0O1xuICAgIHRoaXMuaXB2NENpZHJCbG9jayA9IHByb3BzLmlwdjRDaWRyQmxvY2suY2lkcjtcbiAgICB0aGlzLmlwdjZDaWRyQmxvY2sgPSBwcm9wcy5pcHY2Q2lkckJsb2NrPy5jaWRyO1xuICAgIHRoaXMuc3VibmV0SWQgPSBzdWJuZXQucmVmO1xuICAgIHRoaXMuYXZhaWxhYmlsaXR5Wm9uZSA9IHByb3BzLmF2YWlsYWJpbGl0eVpvbmU7XG5cbiAgICB0aGlzLl9uZXR3b3JrQWNsID0gTmV0d29ya0FjbC5mcm9tTmV0d29ya0FjbElkKHRoaXMsICdBY2wnLCBzdWJuZXQuYXR0ck5ldHdvcmtBY2xBc3NvY2lhdGlvbklkKTtcblxuICAgIGNvbnN0IGluY2x1ZGVSZXNvdXJjZVR5cGVzID0gW0NmblN1Ym5ldC5DRk5fUkVTT1VSQ0VfVFlQRV9OQU1FXTtcbiAgICBpZiAocHJvcHMuc3VibmV0TmFtZSkge1xuICAgICAgVGFncy5vZihzdWJuZXQpLmFkZChTVUJORVROQU1FX1RBRywgcHJvcHMuc3VibmV0TmFtZSk7XG4gICAgfVxuICAgIGNvbnN0IHN1Ym5ldFR5cGVOYW1lID0gZGVmYXVsdFN1Ym5ldE5hbWUocHJvcHMuc3VibmV0VHlwZSkgPz8gJ3VuZGVmaW5lZCc7XG4gICAgVGFncy5vZihzdWJuZXQpLmFkZChTVUJORVRUWVBFX1RBRywgc3VibmV0VHlwZU5hbWUsIHsgaW5jbHVkZVJlc291cmNlVHlwZXMgfSk7XG5cbiAgICBpZiAocHJvcHMucm91dGVUYWJsZSkge1xuICAgICAgdGhpcy5fcm91dGVUYWJsZSA9IHByb3BzLnJvdXRlVGFibGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFzc2lnbmluZyBhIGRlZmF1bHQgcm91dGUgdGFibGVcbiAgICAgIHRoaXMuX3JvdXRlVGFibGUgPSBuZXcgUm91dGVUYWJsZSh0aGlzLCAnUm91dGVUYWJsZScsIHtcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIHJvdXRlVGFibGVOYW1lOiBwcm9wcy5kZWZhdWx0Um91dGVUYWJsZU5hbWUgPz8gJ0RlZmF1bHRDREtSb3V0ZVRhYmxlJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJvdXRlQXNzb2MgPSBuZXcgQ2ZuU3VibmV0Um91dGVUYWJsZUFzc29jaWF0aW9uKHRoaXMsICdSb3V0ZVRhYmxlQXNzb2NpYXRpb24nLCB7XG4gICAgICBzdWJuZXRJZDogdGhpcy5zdWJuZXRJZCxcbiAgICAgIHJvdXRlVGFibGVJZDogdGhpcy5yb3V0ZVRhYmxlLnJvdXRlVGFibGVJZCxcbiAgICB9KTtcblxuICAgIHRoaXMuX2ludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQuYWRkKHJvdXRlQXNzb2MpO1xuXG4gICAgdGhpcy5pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkID0gdGhpcy5faW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZDtcblxuICAgIHRoaXMuc3VibmV0VHlwZSA9IHByb3BzLnN1Ym5ldFR5cGU7XG4gICAgc3RvcmVTdWJuZXRUb1ZwY0J5VHlwZShwcm9wcy52cGMsIHRoaXMsIHByb3BzLnN1Ym5ldFR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc29jaWF0ZSBhIE5ldHdvcmsgQUNMIHdpdGggdGhpcyBzdWJuZXRcbiAgICpcbiAgICogQHBhcmFtIGlkIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBhc3NvY2lhdGlvbi5cbiAgICogQHBhcmFtIG5ldHdvcmtBY2wgVGhlIE5ldHdvcmsgQUNMIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgc3VibmV0LlxuICAgKiBUaGlzIGFsbG93cyBjb250cm9sbGluZyBpbmJvdW5kIGFuZCBvdXRib3VuZCB0cmFmZmljIGZvciBpbnN0YW5jZXMgaW4gdGhpcyBzdWJuZXQuXG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYXNzb2NpYXRlTmV0d29ya0FjbChpZDogc3RyaW5nLCBuZXR3b3JrQWNsOiBJTmV0d29ya0FjbCkge1xuICAgIHRoaXMuX25ldHdvcmtBY2wgPSBuZXR3b3JrQWNsO1xuXG4gICAgY29uc3Qgc2NvcGUgPSBuZXR3b3JrQWNsIGluc3RhbmNlb2YgQ29uc3RydWN0ID8gbmV0d29ya0FjbCA6IHRoaXM7XG4gICAgY29uc3Qgb3RoZXIgPSBuZXR3b3JrQWNsIGluc3RhbmNlb2YgQ29uc3RydWN0ID8gdGhpcyA6IG5ldHdvcmtBY2w7XG4gICAgbmV3IFN1Ym5ldE5ldHdvcmtBY2xBc3NvY2lhdGlvbihzY29wZSwgaWQgKyBOYW1lcy5ub2RlVW5pcXVlSWQob3RoZXIubm9kZSksIHtcbiAgICAgIG5ldHdvcmtBY2wsXG4gICAgICBzdWJuZXQ6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBSb3V0ZSBUYWJsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdWJuZXRcbiAgICovXG4gIHB1YmxpYyBnZXQgcm91dGVUYWJsZSgpOiBJUm91dGVUYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdXRlVGFibGU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgTmV0d29yayBBQ0wgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3VibmV0LlxuICAgKi9cblxuICBwdWJsaWMgZ2V0IG5ldHdvcmtBY2woKTogSU5ldHdvcmtBY2wge1xuICAgIHJldHVybiB0aGlzLl9uZXR3b3JrQWNsO1xuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyByZXF1aXJlZCB0byBpbXBvcnQgYSBzdWJuZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJuZXRWMkF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIEF2YWlsYWJpbGl0eSBab25lIHRoaXMgc3VibmV0IGlzIGxvY2F0ZWQgaW5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBBWiBpbmZvcm1hdGlvbiwgY2Fubm90IHVzZSBBWiBzZWxlY3Rpb24gZmVhdHVyZXNcbiAgICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElQdjQgQ0lEUiBibG9jayBhc3NvY2lhdGVkIHdpdGggdGhlIHN1Ym5ldFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIENJRFIgaW5mb3JtYXRpb24sIGNhbm5vdCB1c2UgQ0lEUiBmaWx0ZXIgZmVhdHVyZXNcbiAgICovXG4gIHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElQdjQgQ0lEUiBibG9jayBhc3NvY2lhdGVkIHdpdGggdGhlIHN1Ym5ldFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIENJRFIgaW5mb3JtYXRpb24sIGNhbm5vdCB1c2UgQ0lEUiBmaWx0ZXIgZmVhdHVyZXNcbiAgICovXG4gIHJlYWRvbmx5IGlwdjZDaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFibGUgZm9yIHRoaXMgcGFydGljdWxhciBzdWJuZXRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyByb3V0ZSB0YWJsZSBpbmZvcm1hdGlvbiwgY2Fubm90IGNyZWF0ZSBWUEMgZW5kcG9pbnRzXG4gICAqL1xuICByZWFkb25seSByb3V0ZVRhYmxlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdWJuZXRJZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHN1Ym5ldFxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygc3VibmV0IChwdWJsaWMgb3IgcHJpdmF0ZSkgdGhhdCB0aGlzIHN1Ym5ldCByZXByZXNlbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0VHlwZTogU3VibmV0VHlwZTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgZ2l2ZW4gc3VibmV0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc3VibmV0IG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldE5hbWU/OiBzdHJpbmc7XG5cbn1cblxudHlwZSBEZXByZWNhdGVkU3VibmV0VHlwZSA9ICdEZXByZWNhdGVkX0lzb2xhdGVkJyB8ICdEZXByZWNhdGVkX1ByaXZhdGUnO1xuY29uc3Qgc3VibmV0VHlwZU1hcDogeyBba2V5IGluIFN1Ym5ldFR5cGUgfCBEZXByZWNhdGVkU3VibmV0VHlwZV06ICh2cGM6IElWcGNWMiwgc3VibmV0OiBTdWJuZXRWMikgPT4gdm9pZCB9ID0ge1xuICBbU3VibmV0VHlwZS5QUklWQVRFX0lTT0xBVEVEXTogKHZwYzogSVZwY1YyLCBzdWJuZXQ6IFN1Ym5ldFYyKSA9PiB2cGMuaXNvbGF0ZWRTdWJuZXRzLnB1c2goc3VibmV0KSxcbiAgW1N1Ym5ldFR5cGUuUFVCTElDXTogKHZwYzogSVZwY1YyLCBzdWJuZXQ6IFN1Ym5ldFYyKSA9PiB2cGMucHVibGljU3VibmV0cy5wdXNoKHN1Ym5ldCksXG4gIFtTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1NdOiAodnBjOiBJVnBjVjIsIHN1Ym5ldDogU3VibmV0VjIpID0+IHZwYy5wcml2YXRlU3VibmV0cy5wdXNoKHN1Ym5ldCksXG4gIFsnRGVwcmVjYXRlZF9Jc29sYXRlZCddOiAodnBjOiBJVnBjVjIsIHN1Ym5ldDogU3VibmV0VjIpID0+IHZwYy5pc29sYXRlZFN1Ym5ldHMucHVzaChzdWJuZXQpLFxuICBbJ0RlcHJlY2F0ZWRfUHJpdmF0ZSddOiAodnBjOiBJVnBjVjIsIHN1Ym5ldDogU3VibmV0VjIpID0+IHZwYy5wcml2YXRlU3VibmV0cy5wdXNoKHN1Ym5ldCksXG4gIFtTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9OQVRdOiAodnBjOiBJVnBjVjIsIHN1Ym5ldDogU3VibmV0VjIpID0+IHZwYy5wcml2YXRlU3VibmV0cy5wdXNoKHN1Ym5ldCksXG59O1xuXG4vKipcbiAqIFN0b3JlcyB0aGUgcHJvdmlkZWQgc3VibmV0IGluIHRoZSBWUEMncyBjb2xsZWN0aW9uIG9mIHN1Ym5ldHMgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBzdWJuZXQgdHlwZS5cbiAqXG4gKiBAcGFyYW0gdnBjIFRoZSBWUEMgaW5zdGFuY2UgdG8gd2hpY2ggdGhlIHN1Ym5ldCBiZWxvbmdzLlxuICogQHBhcmFtIHN1Ym5ldCBUaGUgc3VibmV0IGluc3RhbmNlIHRvIGJlIHN0b3JlZC5cbiAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBzdWJuZXQgKGUuZy4sIHB1YmxpYywgcHJpdmF0ZSwgaXNvbGF0ZWQpLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHN0b3JlU3VibmV0VG9WcGNCeVR5cGUodnBjOiBJVnBjVjIsIHN1Ym5ldDogU3VibmV0VjIsIHR5cGU6IFN1Ym5ldFR5cGUpIHtcbiAgY29uc3QgZmluZEZ1bmN0aW9uVHlwZSA9IHN1Ym5ldFR5cGVNYXBbdHlwZV07XG4gIGlmIChmaW5kRnVuY3Rpb25UeXBlKSB7XG4gICAgZmluZEZ1bmN0aW9uVHlwZSh2cGMsIHN1Ym5ldCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBVbnN1cHBvcnRlZFN1Ym5ldFR5cGVgLCBgVW5zdXBwb3J0ZWQgc3VibmV0IHR5cGU6ICR7dHlwZX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOZWVkIHRvIHNldCBleHBsaWNpdCBkZXBlbmRlbmN5IGFzIGR1cmluZyBzdGFjayBkZWxldGlvbixcbiAgICogdGhlIGNpZHIgYmxvY2tzIG1heSBnZXQgZGVsZXRlZCBmaXJzdCBhbmQgd2lsbCBmYWlsIGFzIHRoZSBzdWJuZXRzIGFyZSBzdGlsbCB1c2luZyB0aGUgY2lkciBibG9ja3NcbiAgICovXG4gIGlmICh2cGMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgZm9yIChjb25zdCBjaWRyIG9mIHZwYy5zZWNvbmRhcnlDaWRyQmxvY2spIHtcbiAgICAgIHN1Ym5ldC5ub2RlLmFkZERlcGVuZGVuY3koY2lkcik7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIFZQQyBzdXBwb3J0cyBJUHY2IGFkZHJlc3Nlcy5cbiAqXG4gKiBAcGFyYW0gdnBjIFRoZSBWUEMgaW5zdGFuY2UgdG8gYmUgdmFsaWRhdGVkLlxuICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IgaWYgdGhlIFZQQyBkb2VzIG5vdCBzdXBwb3J0IElQdjYgYWRkcmVzc2VzLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgVlBDIHN1cHBvcnRzIElQdjYgYWRkcmVzc2VzLCBmYWxzZSBvdGhlcndpc2UuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTdXBwb3J0SXB2Nih2cGM6IElWcGNWMikge1xuICBpZiAodnBjLnNlY29uZGFyeUNpZHJCbG9jaykge1xuICAgIGlmICh2cGMuc2Vjb25kYXJ5Q2lkckJsb2NrLnNvbWUoKHNlY29uZGFyeUFkZHJlc3MpID0+IHNlY29uZGFyeUFkZHJlc3MuYW1hem9uUHJvdmlkZWRJcHY2Q2lkckJsb2NrID09PSB0cnVlIHx8XG4gIHNlY29uZGFyeUFkZHJlc3MuaXB2NklwYW1Qb29sSWQgIT09IHVuZGVmaW5lZCB8fCBzZWNvbmRhcnlBZGRyZXNzLmlwdjZQb29sICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBJcHY2Tm90U3VwcG9ydGVkYCwgJ1RvIHVzZSBJUHY2LCB0aGUgVlBDIG11c3QgZW5hYmxlIElQdjYgc3VwcG9ydC4nKTtcbiAgICB9XG4gIH0gZWxzZSB7cmV0dXJuIGZhbHNlO31cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHByb3ZpZGVkIENJRFIgcmFuZ2UgZmFsbHMgd2l0aGluIHRoZSBJUCBhZGRyZXNzIHJhbmdlcyBvZiB0aGUgZ2l2ZW4gVlBDLlxuICpcbiAqIEBwYXJhbSB2cGMgVGhlIFZQQyBpbnN0YW5jZSB0byBjaGVjayBhZ2FpbnN0LlxuICogQHBhcmFtIGNpZHJSYW5nZSBUaGUgQ0lEUiByYW5nZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgQ0lEUiByYW5nZSBmYWxscyB3aXRoaW4gdGhlIFZQQydzIElQIGFkZHJlc3MgcmFuZ2VzLCBmYWxzZSBvdGhlcndpc2UuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gY2hlY2tDaWRyUmFuZ2VzKHZwYzogSVZwY1YyLCBjaWRyUmFuZ2U6IHN0cmluZykge1xuICBjb25zdCB2cGNDaWRyQmxvY2sgPSBbdnBjLmlwdjRDaWRyQmxvY2tdO1xuICBjb25zdCBzdWJuZXRDaWRyQmxvY2sgPSBuZXcgQ2lkckJsb2NrKGNpZHJSYW5nZSk7XG4gIGNvbnN0IGFsbENpZHJzOiBDaWRyQmxvY2tbXSA9IFtdO1xuXG4gIC8vIFNlY29uZGFyeSBJUCBhZGRyZXNzZXMgYXNzb2ljYXRlZCB1c2luZyB1c2VyIGRlZmluZWQgSVB2NCByYW5nZVxuICBpZiAodnBjLnNlY29uZGFyeUNpZHJCbG9jaykge1xuICAgIGZvciAoY29uc3QgaXBBZGRyZXNzIG9mIHZwYy5zZWNvbmRhcnlDaWRyQmxvY2spIHtcbiAgICAgIGlmIChpcEFkZHJlc3MuY2lkckJsb2NrKSB7XG4gICAgICAgIHZwY0NpZHJCbG9jay5wdXNoKGlwQWRkcmVzcy5jaWRyQmxvY2spO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjaWRycyA9IHZwY0NpZHJCbG9jay5tYXAoY2lkciA9PiBuZXcgQ2lkckJsb2NrKGNpZHIpKTtcbiAgICBhbGxDaWRycy5wdXNoKC4uLmNpZHJzKTtcbiAgfVxuXG4gIC8vIFNlY29uZGFyeSBJUCBhZGRyZXNzZXMgYXNzb2ljYXRlZCB1c2luZyBJUEFNIElQdjQgcmFuZ2VcbiAgaWYgKHZwYy5pcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnMpIHtcbiAgICBjb25zdCBjaWRycyA9IHZwYy5pcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnMubWFwKGNpZHIgPT4gbmV3IENpZHJCbG9jayhjaWRyKSk7XG4gICAgYWxsQ2lkcnMucHVzaCguLi5jaWRycyk7XG4gIH1cblxuICAvLyBJZiBubyBJUHY0IGlzIGFzc2lnbmVkIGFzIHNlY29uZGFyeSBhZGRyZXNzXG4gIGlmIChhbGxDaWRycy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YE5vU2Vjb25kYXJ5SXBBZGRyZXNzYCwgJ05vIHNlY29uZGFyeSBJUCBhZGRyZXNzIGF0dGFjaGVkIHRvIFZQQycpO1xuICB9XG5cbiAgcmV0dXJuIGFsbENpZHJzLnNvbWUoYyA9PiBjLmNvbnRhaW5zQ2lkcihzdWJuZXRDaWRyQmxvY2spKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgaWYgdGhlIHByb3ZpZGVkIElQdjQgQ0lEUiBibG9jayBvdmVybGFwcyB3aXRoIGV4aXN0aW5nIHN1Ym5ldCBDSURSIGJsb2NrcyB3aXRoaW4gdGhlIGdpdmVuIFZQQy5cbiAqXG4gKiBAcGFyYW0gdnBjIFRoZSBWUEMgaW5zdGFuY2UgdG8gY2hlY2sgYWdhaW5zdC5cbiAqIEBwYXJhbSBpcHY0Q2lkckJsb2NrIFRoZSBJUHY0IENJRFIgYmxvY2sgdG8gYmUgdmFsaWRhdGVkLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgSVB2NCBDSURSIGJsb2NrIG92ZXJsYXBzIHdpdGggZXhpc3Rpbmcgc3VibmV0IENJRFIgYmxvY2tzLCBmYWxzZSBvdGhlcndpc2UuXG4gKiBAaW50ZXJuYWxcbiAqL1xuXG5mdW5jdGlvbiB2YWxpZGF0ZU92ZXJsYXBwaW5nQ2lkclJhbmdlcyh2cGM6IElWcGNWMiwgaXB2NENpZHJCbG9jazogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGxldCBhbGxTdWJuZXRzOiBJU3VibmV0VjJbXTtcbiAgdHJ5IHtcbiAgICBhbGxTdWJuZXRzID0gdnBjLnNlbGVjdFN1Ym5ldHMoKS5zdWJuZXRzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgJ05vIHN1Ym5ldHMgaW4gVlBDJztcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBpcE1hcDogW3N0cmluZywgc3RyaW5nXVtdID0gbmV3IEFycmF5KCk7XG5cbiAgY29uc3QgaW5wdXRSYW5nZSA9IG5ldyBDaWRyQmxvY2soaXB2NENpZHJCbG9jayk7XG5cbiAgY29uc3QgaW5wdXRJcE1hcDogW3N0cmluZywgc3RyaW5nXSA9IFtpbnB1dFJhbmdlLm1pbklwKCksIGlucHV0UmFuZ2UubWF4SXAoKV07XG5cbiAgZm9yIChjb25zdCBzdWJuZXQgb2YgYWxsU3VibmV0cykge1xuICAgIGNvbnN0IGNpZHJCbG9jayA9IG5ldyBDaWRyQmxvY2soc3VibmV0LmlwdjRDaWRyQmxvY2spO1xuICAgIGlwTWFwLnB1c2goW2NpZHJCbG9jay5taW5JcCgpLCBjaWRyQmxvY2subWF4SXAoKV0pO1xuICB9XG5cbiAgZm9yIChjb25zdCByYW5nZSBvZiBpcE1hcCkge1xuICAgIGlmIChpbnB1dFJhbmdlLnJhbmdlc092ZXJsYXAocmFuZ2UsIGlucHV0SXBNYXApKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGlmIHRoZSBwcm92aWRlZCBJUHY2IENJRFIgYmxvY2sgb3ZlcmxhcHMgd2l0aCBleGlzdGluZyBzdWJuZXQgQ0lEUiBibG9ja3Mgd2l0aGluIHRoZSBnaXZlbiBWUEMuXG4gKlxuICogQHBhcmFtIHZwYyBUaGUgVlBDIGluc3RhbmNlIHRvIGNoZWNrIGFnYWluc3QuXG4gKiBAcGFyYW0gaXB2NkNpZHJCbG9jayBUaGUgSVB2NiBDSURSIGJsb2NrIHRvIGJlIHZhbGlkYXRlZC5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIElQdjYgQ0lEUiBibG9jayBvdmVybGFwcyB3aXRoIGV4aXN0aW5nIHN1Ym5ldCBDSURSIGJsb2NrcywgZmFsc2Ugb3RoZXJ3aXNlLlxuICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IgaWYgbm8gc3VibmV0cyBhcmUgZm91bmQgaW4gdGhlIFZQQy5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZU92ZXJsYXBwaW5nQ2lkclJhbmdlc2lwdjYodnBjOiBJVnBjVjIsIGlwdjZDaWRyQmxvY2s6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBsZXQgYWxsU3VibmV0czogSVN1Ym5ldFYyW107XG4gIHRyeSB7XG4gICAgYWxsU3VibmV0cyA9IHZwYy5zZWxlY3RTdWJuZXRzKCkuc3VibmV0cztcbiAgfSBjYXRjaCAoZSkge1xuICAgICdObyBzdWJuZXRzIGluIFZQQyc7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgaXB2Nk1hcDogc3RyaW5nW109IFtdO1xuXG4gIGNvbnN0IGlucHV0UmFuZ2UgPSBuZXcgQ2lkckJsb2NrSXB2NihpcHY2Q2lkckJsb2NrKTtcblxuICBsZXQgcmVzdWx0IDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3Qgc3VibmV0IG9mIGFsbFN1Ym5ldHMpIHtcbiAgICBpZiAoc3VibmV0LmlwdjZDaWRyQmxvY2spIHtcbiAgICAgIGNvbnN0IGNpZHJCbG9jayA9IG5ldyBDaWRyQmxvY2tJcHY2KHN1Ym5ldC5pcHY2Q2lkckJsb2NrKTtcbiAgICAgIGlwdjZNYXAucHVzaChjaWRyQmxvY2suY2lkcik7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCByYW5nZSBvZiBpcHY2TWFwKSB7XG4gICAgaWYgKGlucHV0UmFuZ2UucmFuZ2VzT3ZlcmxhcChyYW5nZSwgaW5wdXRSYW5nZS5jaWRyKSkge1xuICAgICAgcmVzdWx0ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuIl19
486
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibmV0LXYyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3VibmV0LXYyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUEyRztBQU0zRyxpREFNNkI7QUFFN0IsNEVBQTREO0FBQzVELDhFQUE4RjtBQUM5RiwwRUFBMEU7QUFHMUUsMkNBQXdEO0FBQ3hELG1DQUFxQztBQUNyQyxpQ0FBcUU7QUFVckU7O0dBRUc7QUFDSCxNQUFhLE1BQU07O0lBQ2pCOzs7T0FHRztJQUNhLElBQUksQ0FBUztJQUM3QixZQUFZLEtBQWE7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7S0FDbkI7O0FBUkgsd0JBU0M7QUFFRDs7R0FFRztBQUNILE1BQU0sY0FBYyxHQUFHLHFCQUFxQixDQUFDO0FBRTdDOztHQUVHO0FBQ0gsTUFBTSxjQUFjLEdBQUcscUJBQXFCLENBQUM7QUFpRzdDOzs7Ozs7Ozs7O0dBVUc7SUFFVSxRQUFROzRCQURwQixvQ0FBa0I7Ozs7c0JBQ1csc0JBQVE7Ozt3QkFBaEIsU0FBUSxXQUFROzs7OytDQStObkMsSUFBQSxrQ0FBYyxHQUFFO1lBQ2pCLDRNQUFPLG1CQUFtQiw2REFTekI7WUF6T0gsNktBeVBDOzs7OztRQXhQQyxzQ0FBc0M7UUFDL0IsTUFBTSxDQUFVLHFCQUFxQixHQUFXLGlDQUFpQyxDQUFDO1FBRXpGOztXQUVHO1FBQ0ksTUFBTSxDQUFDLHNCQUFzQixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCOzs7Ozs7Ozs7O1lBQzFGOzs7ZUFHRztZQUNILE1BQU0sZ0JBQWlCLFNBQVEsc0JBQVE7Z0JBQ3JDOzttQkFFRztnQkFDYSxhQUFhLEdBQVksS0FBSyxDQUFDLGFBQWEsQ0FBQztnQkFFN0Q7O21CQUVHO2dCQUNhLFVBQVUsR0FBZ0IsS0FBSyxDQUFDLFVBQVUsQ0FBQztnQkFFM0Q7O21CQUVHO2dCQUNhLGdCQUFn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Q0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGF6eSwgTmFtZXMsIFJlc291cmNlLCBUYWdzLCBUb2tlbiwgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB0eXBlIHtcbiAgSU5ldHdvcmtBY2wsXG4gIElSb3V0ZVRhYmxlLFxuICBJU3VibmV0LFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7XG4gIENmblN1Ym5ldCxcbiAgQ2ZuU3VibmV0Um91dGVUYWJsZUFzc29jaWF0aW9uLFxuICBOZXR3b3JrQWNsLFxuICBTdWJuZXROZXR3b3JrQWNsQXNzb2NpYXRpb24sXG4gIFN1Ym5ldFR5cGUsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xudHlwZSBTdWJuZXRSZWZlcmVuY2UgPSBhd3NfZWMyLlN1Ym5ldFJlZmVyZW5jZTtcbmltcG9ydCB7IGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEsIE1ldGhvZE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB0eXBlIHsgYXdzX2VjMiB9IGZyb20gJ2F3cy1jZGstbGliL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBJRGVwZW5kYWJsZSB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBEZXBlbmRlbmN5R3JvdXAgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFJvdXRlVGFibGUgfSBmcm9tICcuL3JvdXRlJztcbmltcG9ydCB7IENpZHJCbG9jaywgQ2lkckJsb2NrSXB2NiwgZGVmYXVsdFN1Ym5ldE5hbWUgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBJVnBjVjIgfSBmcm9tICcuL3ZwYy12Mi1iYXNlJztcblxuLyoqXG4gKiBJbnRlcmZhY2UgdG8gZGVmaW5lIHN1Ym5ldCBDSURSXG4gKi9cbmludGVyZmFjZSBJQ2lkciB7XG4gIHJlYWRvbmx5IGNpZHI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBJUHY0IG9yIElQdjYgQ0lEUiByYW5nZSBmb3IgdGhlIHN1Ym5ldFxuICovXG5leHBvcnQgY2xhc3MgSXBDaWRyIGltcGxlbWVudHMgSUNpZHIge1xuICAvKipcbiAgICogSVB2NiBDSURSIHJhbmdlIGZvciB0aGUgc3VibmV0XG4gICAqIEFsbG93ZWQgb25seSBpZiBJUHY2IGlzIGVuYWJsZWQgb24gVlBjXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2lkcjogc3RyaW5nO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogc3RyaW5nICkge1xuICAgIHRoaXMuY2lkciA9IHByb3BzO1xuICB9XG59XG5cbi8qKlxuICogVlBDIE5hbWUgdGFnIGNvbnN0YW50XG4gKi9cbmNvbnN0IFNVQk5FVFRZUEVfVEFHID0gJ2F3cy1jZGs6c3VibmV0LXR5cGUnO1xuXG4vKipcbiAqIFN1Ym5ldCBOYW1lIHRhZyBjb25zdGFudFxuICovXG5jb25zdCBTVUJORVROQU1FX1RBRyA9ICdhd3MtY2RrOnN1Ym5ldC1uYW1lJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBzdWJuZXQgZm9yIFZQQy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJuZXRWMlByb3BzIHtcbi8qKlxuICogVlBDIFByb3BcbiAqL1xuICByZWFkb25seSB2cGM6IElWcGNWMjtcblxuICAvKipcbiAgICogaXB2NCBjaWRyIHRvIGFzc2lnbiB0byB0aGlzIHN1Ym5ldC5cbiAgICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItc3VibmV0Lmh0bWwjY2ZuLWVjMi1zdWJuZXQtY2lkcmJsb2NrXG4gICAqL1xuICByZWFkb25seSBpcHY0Q2lkckJsb2NrOiBJcENpZHI7XG5cbiAgLyoqXG4gICAqIElwdjYgQ0lEUiBSYW5nZSBmb3Igc3VibmV0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gSXB2NiBhZGRyZXNzXG4gICAqL1xuICByZWFkb25seSBpcHY2Q2lkckJsb2NrPzogSXBDaWRyO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gQVogZm9yIHRoZSBzdWJuZXRcbiAgICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcblxuICAvKipcbiAgICogQ3VzdG9tIFJvdXRlIGZvciBzdWJuZXRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIGRlZmF1bHQgcm91dGUgdGFibGUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVUYWJsZT86IElSb3V0ZVRhYmxlO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBkZWZhdWx0IFJvdXRlVGFibGUgY3JlYXRlZCBieSBDREsgdG8gYmUgdXNlZCBmb3IgdGFnZ2luZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgcm91dGUgdGFibGUgbmFtZSBjcmVhdGVkIGJ5IENESyBhcyAnRGVmYXVsdENES1JvdXRlVGFibGUnXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Um91dGVUYWJsZU5hbWUgPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBTdWJuZXQgdG8gY29uZmlndXJlLlxuICAgKlxuICAgKiBUaGUgU3VibmV0IHR5cGUgd2lsbCBjb250cm9sIHRoZSBhYmlsaXR5IHRvIHJvdXRlIGFuZCBjb25uZWN0IHRvIHRoZVxuICAgKiBJbnRlcm5ldC5cbiAgICpcbiAgICogVE9ETzogQWRkIHZhbGlkYXRpb24gY2hlY2sgYHN1Ym5ldFR5cGVgIHdoZW4gYWRkaW5nIHJlc291cmNlcyAoZS5nLiBjYW5ub3QgYWRkIE5hdEdhdGV3YXkgdG8gcHJpdmF0ZSlcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGU7XG5cbiAgLyoqXG4gICAqIFN1Ym5ldCBuYW1lXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aCBhbiBhdXRvZ2VuZXJhdGVkIG5hbWUgYnkgQ0RLXG4gICAqL1xuICByZWFkb25seSBzdWJuZXROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBhIG5ldHdvcmsgaW50ZXJmYWNlIGNyZWF0ZWQgaW4gdGhpcyBzdWJuZXQgcmVjZWl2ZXMgYW4gSVB2NiBhZGRyZXNzLlxuICAgKiBJZiB5b3Ugc3BlY2lmeSBBc3NpZ25JcHY2QWRkcmVzc09uQ3JlYXRpb24sIHlvdSBtdXN0IGFsc28gc3BlY2lmeSBJcHY2Q2lkckJsb2NrLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZCBpbiBjYXNlIG5vdCBwcm92aWRlZCBhcyBhbiBpbnB1dFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaWduSXB2NkFkZHJlc3NPbkNyZWF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29udHJvbHMgaWYgaW5zdGFuY2VzIGxhdW5jaGVkIGludG8gdGhlIHN1Ym5ldCBzaG91bGQgYmUgYXNzaWduZWQgYSBwdWJsaWMgSVAgYWRkcmVzcy5cbiAgICogVGhpcyBwcm9wZXJ0eSBjYW4gb25seSBiZSBzZXQgZm9yIHB1YmxpYyBzdWJuZXRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZCBpbiBjYXNlIG5vdCBwcm92aWRlZCBhcyBhbiBpbnB1dFxuICAgKi9cbiAgcmVhZG9ubHkgbWFwUHVibGljSXBPbkxhdW5jaD86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBJbnRlcmZhY2Ugd2l0aCBhZGRpdGlvbmFsIHByb3BlcnRpZXMgZm9yIFN1Ym5ldFYyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVN1Ym5ldFYyIGV4dGVuZHMgSVN1Ym5ldCB7XG5cbiAgLyoqXG4gICAqIFRoZSBJUHY2IENJRFIgYmxvY2sgZm9yIHRoaXMgc3VibmV0XG4gICAqL1xuICByZWFkb25seSBpcHY2Q2lkckJsb2NrPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBzdWJuZXQgKHB1YmxpYyBvciBwcml2YXRlKSB0aGF0IHRoaXMgc3VibmV0IHJlcHJlc2VudHMuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGUgU3VibmV0VHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0VHlwZT86IFN1Ym5ldFR5cGU7XG5cbn1cblxuLyoqXG4gKiBUaGUgU3VibmV0VjIgY2xhc3MgcmVwcmVzZW50cyBhIHN1Ym5ldCB3aXRoaW4gYSBWUEMgKFZpcnR1YWwgUHJpdmF0ZSBDbG91ZCkgaW4gQVdTLlxuICogSXQgZXh0ZW5kcyB0aGUgUmVzb3VyY2UgY2xhc3MgYW5kIGltcGxlbWVudHMgdGhlIElTdWJuZXQgaW50ZXJmYWNlLlxuICpcbiAqIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHN1Ym5ldHMgd2l0aGluIGEgVnBjVjIgaW5zdGFuY2UuXG4gKiBTdWJuZXRzIGNhbiBiZSBjb25maWd1cmVkIHdpdGggc3BlY2lmaWMgSVAgYWRkcmVzcyByYW5nZXMgKElQdjQgYW5kIElQdjYpLCBhdmFpbGFiaWxpdHkgem9uZXMsXG4gKiBhbmQgc3VibmV0IHR5cGVzIChlLmcuLCBwdWJsaWMsIHByaXZhdGUsIGlzb2xhdGVkKS5cbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OlN1Ym5ldFxuICpcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIFN1Ym5ldFYyIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJU3VibmV0VjIge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1lYzItYWxwaGEuU3VibmV0VjInO1xuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3Rpbmcgc3VibmV0IHRvIHRoZSBWUENcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN1Ym5ldFYyQXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogU3VibmV0VjJBdHRyaWJ1dGVzKSA6IElTdWJuZXRWMiB7XG4gICAgLyoqXG4gICAgICogQ2xhc3MgdG8gZGVmaW5lIGFuIGltcG9ydCBmb3IgYW4gZXhpc3Rpbmcgc3VibmV0XG4gICAgICogQHJlc291cmNlIEFXUzo6RUMyOjpTdWJuZXRcbiAgICAgKi9cbiAgICBjbGFzcyBJbXBvcnRlZFN1Ym5ldFYyIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJU3VibmV0VjIge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgSVB2NiBDSURSIEJsb2NrIGFzc2lnbmVkIHRvIHRoaXMgc3VibmV0XG4gICAgICAgKi9cbiAgICAgIHB1YmxpYyByZWFkb25seSBpcHY2Q2lkckJsb2NrPzogc3RyaW5nID0gYXR0cnMuaXB2NkNpZHJCbG9jaztcblxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgdHlwZSBvZiBzdWJuZXQgKGVnLiBwdWJsaWMgb3IgcHJpdmF0ZSkgdGhhdCB0aGlzIHN1Ym5ldCByZXByZXNlbnRzLlxuICAgICAgICovXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3VibmV0VHlwZT86IFN1Ym5ldFR5cGUgPSBhdHRycy5zdWJuZXRUeXBlO1xuXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBBdmFpbGFiaWxpdHkgWm9uZSBpbiB3aGljaCBzdWJuZXQgaXMgbG9jYXRlZFxuICAgICAgICovXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nID0gYXR0cnMuYXZhaWxhYmlsaXR5Wm9uZTtcblxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgc3VibmV0SWQgZm9yIHRoaXMgcGFydGljdWxhciBzdWJuZXRcbiAgICAgICAqIFJlZmVycyB0byB0aGUgcGh5c2ljYWwgSUQgY3JlYXRlZFxuICAgICAgICovXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3VibmV0SWQ6IHN0cmluZyA9IGF0dHJzLnN1Ym5ldElkO1xuXG4gICAgICAvKipcbiAgICAgICAqIERlcGVuZGFibGUgdGhhdCBjYW4gYmUgZGVwZW5kZWQgdXBvbiB0byBmb3JjZSBpbnRlcm5ldCBjb25uZWN0aXZpdHkgZXN0YWJsaXNoZWQgb24gdGhlIFZQQ1xuICAgICAgICovXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZDogSURlcGVuZGFibGUgPSBuZXcgRGVwZW5kZW5jeUdyb3VwKCk7XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlIElQdjQgQ0lEUiBibG9jayBhc3NpZ25lZCB0byB0aGlzIHN1Ym5ldFxuICAgICAgICovXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaXB2NENpZHJCbG9jazogc3RyaW5nID0gYXR0cnMuaXB2NENpZHJCbG9jaztcblxuICAgICAgLyoqXG4gICAgICAgKiAgQ3VycmVudCByb3V0ZSB0YWJsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdWJuZXRcbiAgICAgICAqL1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJvdXRlVGFibGU6IElSb3V0ZVRhYmxlID0geyByb3V0ZVRhYmxlSWQ6IGF0dHJzLnJvdXRlVGFibGVJZCEgfTtcblxuICAgICAgcHVibGljIGdldCBzdWJuZXRSZWYoKTogU3VibmV0UmVmZXJlbmNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWJuZXRJZDogdGhpcy5zdWJuZXRJZCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBBc3NvY2lhdGUgYSBOZXR3b3JrIEFDTCB3aXRoIHRoaXMgc3VibmV0XG4gICAgICAgKiBSZXF1aXJlZCBoZXJlIHNpbmNlIGl0IGlzIGltcGxlbWVudGVkIGluIHRoZSBJU3VibmV0VjJcbiAgICAgICAqL1xuICAgICAgcHVibGljIGFzc29jaWF0ZU5ldHdvcmtBY2woYWNsSWQ6IHN0cmluZywgbmV0d29ya0FjbDogSU5ldHdvcmtBY2wpIHtcbiAgICAgICAgY29uc3QgYWNsU2NvcGUgPSBuZXR3b3JrQWNsIGluc3RhbmNlb2YgQ29uc3RydWN0ID8gbmV0d29ya0FjbCA6IHRoaXM7XG4gICAgICAgIGNvbnN0IG90aGVyID0gbmV0d29ya0FjbCBpbnN0YW5jZW9mIENvbnN0cnVjdCA/IHRoaXMgOiBuZXR3b3JrQWNsO1xuICAgICAgICBuZXcgU3VibmV0TmV0d29ya0FjbEFzc29jaWF0aW9uKGFjbFNjb3BlLCBhY2xJZCArIE5hbWVzLm5vZGVVbmlxdWVJZChvdGhlci5ub2RlKSwge1xuICAgICAgICAgIG5ldHdvcmtBY2wsXG4gICAgICAgICAgc3VibmV0OiB0aGlzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZFN1Ym5ldFYyKHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEF2YWlsYWJpbGl0eSBab25lIHRoZSBzdWJuZXQgaXMgbG9jYXRlZCBpblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN1Ym5ldElkIGZvciB0aGlzIHBhcnRpY3VsYXIgc3VibmV0XG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdWJuZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiAgRGVwZW5kZW5jaWVzIGZvciBpbnRlcm5ldCBjb25uZWN0aXZpdHlcbiAgICogVGhpcyBQcm9wZXJ0eSBleHBvc2VzIHRoZSBSb3V0ZVRhYmxlLVN1Ym5ldCBhc3NvY2lhdGlvbiBzbyB0aGF0IG90aGVyIHJlc291cmNlcyBjYW4gZGVwZW5kIG9uIGl0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQ6IElEZXBlbmRhYmxlO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFibGUgbmFtZSBgaW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZGAgZG9lcyBub3QgcmVmbGVjdCB3aGF0IGl0IGFjdHVhbGx5IGlzLlxuICAgKiBUaGUgbmFtaW5nIGlzIGVuZm9yY2VkIGJ5IElTdWJuZXQuIFdlIG5lZWQgdG8ga2VlcCBpdCB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5LlxuICAgKiBJdCBleHBvc2VzIHRoZSBSb3V0ZVRhYmxlLVN1Ym5ldCBhc3NvY2lhdGlvbiBzbyB0aGF0IG90aGVyIHJlc291cmNlcyBjYW4gZGVwZW5kIG9uIGl0LlxuICAgKiBFLmcuIFJlc291cmNlcyBpbiBhIHN1Ym5ldCwgd2hlbiBiZWluZyBkZWxldGVkLCBtYXkgbmVlZCB0aGUgUm91dGVUYWJsZSB0byBleGlzdCBpbiBvcmRlciB0byBkZWxldGUgcHJvcGVybHlcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQgPSBuZXcgRGVwZW5kZW5jeUdyb3VwKCk7XG5cbiAgLyoqXG4gICAqIFRoZSBJUHY0IENJRFIgYmxvY2sgZm9yIHRoaXMgc3VibmV0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXB2NENpZHJCbG9jazogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSVB2NiBDSURSIEJsb2NrIGZvciB0aGlzIHN1Ym5ldFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwdjZDaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgcHVibGljIGdldCBzdWJuZXRSZWYoKTogU3VibmV0UmVmZXJlbmNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3VibmV0SWQ6IHRoaXMuc3VibmV0SWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBzdWJuZXQgKHB1YmxpYyBvciBwcml2YXRlKSB0aGF0IHRoaXMgc3VibmV0IHJlcHJlc2VudHMuXG4gICAqIEBhdHRyaWJ1dGUgU3VibmV0VHlwZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN1Ym5ldFR5cGU/OiBTdWJuZXRUeXBlO1xuXG4gIHByaXZhdGUgX25ldHdvcmtBY2w6IElOZXR3b3JrQWNsO1xuXG4gIHByaXZhdGUgX3JvdXRlVGFibGU6IElSb3V0ZVRhYmxlO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFN1Ym5ldFYyIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBDb25zdHJ1Y3QgdGhhdCB0aGlzIHJlc291cmNlIHdpbGwgYmUgcGFydCBvZi5cbiAgICogQHBhcmFtIGlkIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICogQHBhcmFtIHByb3BzIFRoZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBzdWJuZXQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3VibmV0VjJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy5zdWJuZXROYW1lID8/IExhenkuc3RyaW5nKHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiAxMjgsIGFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVyczogJ18nIH0pLFxuICAgICAgfSksXG4gICAgfSk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICBjb25zdCBpcHY0Q2lkckJsb2NrID0gcHJvcHMuaXB2NENpZHJCbG9jay5jaWRyO1xuICAgIGNvbnN0IGlwdjZDaWRyQmxvY2sgPSBwcm9wcy5pcHY2Q2lkckJsb2NrPy5jaWRyO1xuXG4gICAgaWYgKCFjaGVja0NpZHJSYW5nZXMocHJvcHMudnBjLCBwcm9wcy5pcHY0Q2lkckJsb2NrLmNpZHIpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBDaWRyQmxvY2tPdXRzaWRlVnBjUmFuZ2VgLCAnQ0lEUiBibG9jayBzaG91bGQgYmUgd2l0aGluIHRoZSByYW5nZSBvZiBWUEMnLCB0aGlzKTtcbiAgICB9XG5cbiAgICBsZXQgb3ZlcmxhcDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGxldCBvdmVybGFwSXB2NjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMuaXB2NENpZHJCbG9jaykpIHtcbiAgICAgIG92ZXJsYXAgPSB2YWxpZGF0ZU92ZXJsYXBwaW5nQ2lkclJhbmdlcyhwcm9wcy52cGMsIHByb3BzLmlwdjRDaWRyQmxvY2suY2lkcik7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgd2hldGhlciBWUEMgc3VwcG9ydHMgaXB2NlxuICAgIGlmIChwcm9wcy5pcHY2Q2lkckJsb2NrPy5jaWRyICYmICFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMuaXB2NkNpZHJCbG9jaz8uY2lkcikpIHtcbiAgICAgIHZhbGlkYXRlU3VwcG9ydElwdjYocHJvcHMudnBjKTtcbiAgICAgIG92ZXJsYXBJcHY2ID0gdmFsaWRhdGVPdmVybGFwcGluZ0NpZHJSYW5nZXNpcHY2KHByb3BzLnZwYywgcHJvcHMuaXB2NkNpZHJCbG9jaz8uY2lkcik7XG4gICAgfVxuXG4gICAgaWYgKG92ZXJsYXAgfHwgb3ZlcmxhcElwdjYpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YENpZHJCbG9ja092ZXJsYXBzV2l0aEV4aXN0aW5nU3VibmV0c2AsICdDSURSIGJsb2NrIHNob3VsZCBub3Qgb3ZlcmxhcCB3aXRoIGV4aXN0aW5nIHN1Ym5ldCBibG9ja3MnLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuYXNzaWduSXB2NkFkZHJlc3NPbkNyZWF0aW9uICYmICFwcm9wcy5pcHY2Q2lkckJsb2NrKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBJcHY2Q2lkckJsb2NrUmVxdWlyZWRGb3JJcHY2QXNzaWdubWVudGAsICdJUHY2IENJRFIgYmxvY2sgaXMgcmVxdWlyZWQgd2hlbiBhc3NpZ25pbmcgSVB2NiBhZGRyZXNzIG9uIGNyZWF0aW9uJywgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLm1hcFB1YmxpY0lwT25MYXVuY2ggPT09IHRydWUgJiYgcHJvcHMuc3VibmV0VHlwZSAhPT0gU3VibmV0VHlwZS5QVUJMSUMpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YE1hcFB1YmxpY0lwT25MYXVuY2hPbmx5Rm9yUHVibGljU3VibmV0c2AsICdtYXBQdWJsaWNJcE9uTGF1bmNoIGNhbiBvbmx5IGJlIHNldCB0byB0cnVlIGZvciBwdWJsaWMgc3VibmV0cycsIHRoaXMpO1xuICAgIH1cblxuICAgIGNvbnN0IHN1Ym5ldCA9IG5ldyBDZm5TdWJuZXQodGhpcywgJ1N1Ym5ldCcsIHtcbiAgICAgIHZwY0lkOiBwcm9wcy52cGMudnBjSWQsXG4gICAgICBjaWRyQmxvY2s6IGlwdjRDaWRyQmxvY2ssXG4gICAgICBpcHY2Q2lkckJsb2NrOiBpcHY2Q2lkckJsb2NrLFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgIGFzc2lnbklwdjZBZGRyZXNzT25DcmVhdGlvbjogcHJvcHMuYXNzaWduSXB2NkFkZHJlc3NPbkNyZWF0aW9uLFxuICAgICAgbWFwUHVibGljSXBPbkxhdW5jaDogcHJvcHMubWFwUHVibGljSXBPbkxhdW5jaCxcbiAgICB9KTtcblxuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSBzdWJuZXQ7XG4gICAgdGhpcy5pcHY0Q2lkckJsb2NrID0gcHJvcHMuaXB2NENpZHJCbG9jay5jaWRyO1xuICAgIHRoaXMuaXB2NkNpZHJCbG9jayA9IHByb3BzLmlwdjZDaWRyQmxvY2s/LmNpZHI7XG4gICAgdGhpcy5zdWJuZXRJZCA9IHN1Ym5ldC5yZWY7XG4gICAgdGhpcy5hdmFpbGFiaWxpdHlab25lID0gcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZTtcblxuICAgIHRoaXMuX25ldHdvcmtBY2wgPSBOZXR3b3JrQWNsLmZyb21OZXR3b3JrQWNsSWQodGhpcywgJ0FjbCcsIHN1Ym5ldC5hdHRyTmV0d29ya0FjbEFzc29jaWF0aW9uSWQpO1xuXG4gICAgY29uc3QgaW5jbHVkZVJlc291cmNlVHlwZXMgPSBbQ2ZuU3VibmV0LkNGTl9SRVNPVVJDRV9UWVBFX05BTUVdO1xuICAgIGlmIChwcm9wcy5zdWJuZXROYW1lKSB7XG4gICAgICBUYWdzLm9mKHN1Ym5ldCkuYWRkKFNVQk5FVE5BTUVfVEFHLCBwcm9wcy5zdWJuZXROYW1lKTtcbiAgICB9XG4gICAgY29uc3Qgc3VibmV0VHlwZU5hbWUgPSBkZWZhdWx0U3VibmV0TmFtZShwcm9wcy5zdWJuZXRUeXBlKSA/PyAndW5kZWZpbmVkJztcbiAgICBUYWdzLm9mKHN1Ym5ldCkuYWRkKFNVQk5FVFRZUEVfVEFHLCBzdWJuZXRUeXBlTmFtZSwgeyBpbmNsdWRlUmVzb3VyY2VUeXBlcyB9KTtcblxuICAgIGlmIChwcm9wcy5yb3V0ZVRhYmxlKSB7XG4gICAgICB0aGlzLl9yb3V0ZVRhYmxlID0gcHJvcHMucm91dGVUYWJsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXNzaWduaW5nIGEgZGVmYXVsdCByb3V0ZSB0YWJsZVxuICAgICAgdGhpcy5fcm91dGVUYWJsZSA9IG5ldyBSb3V0ZVRhYmxlKHRoaXMsICdSb3V0ZVRhYmxlJywge1xuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgcm91dGVUYWJsZU5hbWU6IHByb3BzLmRlZmF1bHRSb3V0ZVRhYmxlTmFtZSA/PyAnRGVmYXVsdENES1JvdXRlVGFibGUnLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm91dGVBc3NvYyA9IG5ldyBDZm5TdWJuZXRSb3V0ZVRhYmxlQXNzb2NpYXRpb24odGhpcywgJ1JvdXRlVGFibGVBc3NvY2lhdGlvbicsIHtcbiAgICAgIHN1Ym5ldElkOiB0aGlzLnN1Ym5ldElkLFxuICAgICAgcm91dGVUYWJsZUlkOiB0aGlzLnJvdXRlVGFibGUucm91dGVUYWJsZUlkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5faW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZC5hZGQocm91dGVBc3NvYyk7XG5cbiAgICB0aGlzLmludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQgPSB0aGlzLl9pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkO1xuXG4gICAgdGhpcy5zdWJuZXRUeXBlID0gcHJvcHMuc3VibmV0VHlwZTtcbiAgICBzdG9yZVN1Ym5ldFRvVnBjQnlUeXBlKHByb3BzLnZwYywgdGhpcywgcHJvcHMuc3VibmV0VHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogQXNzb2NpYXRlIGEgTmV0d29yayBBQ0wgd2l0aCB0aGlzIHN1Ym5ldFxuICAgKlxuICAgKiBAcGFyYW0gaWQgVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGFzc29jaWF0aW9uLlxuICAgKiBAcGFyYW0gbmV0d29ya0FjbCBUaGUgTmV0d29yayBBQ0wgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBzdWJuZXQuXG4gICAqIFRoaXMgYWxsb3dzIGNvbnRyb2xsaW5nIGluYm91bmQgYW5kIG91dGJvdW5kIHRyYWZmaWMgZm9yIGluc3RhbmNlcyBpbiB0aGlzIHN1Ym5ldC5cbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhc3NvY2lhdGVOZXR3b3JrQWNsKGlkOiBzdHJpbmcsIG5ldHdvcmtBY2w6IElOZXR3b3JrQWNsKSB7XG4gICAgdGhpcy5fbmV0d29ya0FjbCA9IG5ldHdvcmtBY2w7XG5cbiAgICBjb25zdCBzY29wZSA9IG5ldHdvcmtBY2wgaW5zdGFuY2VvZiBDb25zdHJ1Y3QgPyBuZXR3b3JrQWNsIDogdGhpcztcbiAgICBjb25zdCBvdGhlciA9IG5ldHdvcmtBY2wgaW5zdGFuY2VvZiBDb25zdHJ1Y3QgPyB0aGlzIDogbmV0d29ya0FjbDtcbiAgICBuZXcgU3VibmV0TmV0d29ya0FjbEFzc29jaWF0aW9uKHNjb3BlLCBpZCArIE5hbWVzLm5vZGVVbmlxdWVJZChvdGhlci5ub2RlKSwge1xuICAgICAgbmV0d29ya0FjbCxcbiAgICAgIHN1Ym5ldDogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIFJvdXRlIFRhYmxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN1Ym5ldFxuICAgKi9cbiAgcHVibGljIGdldCByb3V0ZVRhYmxlKCk6IElSb3V0ZVRhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fcm91dGVUYWJsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBOZXR3b3JrIEFDTCBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdWJuZXQuXG4gICAqL1xuXG4gIHB1YmxpYyBnZXQgbmV0d29ya0FjbCgpOiBJTmV0d29ya0FjbCB7XG4gICAgcmV0dXJuIHRoaXMuX25ldHdvcmtBY2w7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHJlcXVpcmVkIHRvIGltcG9ydCBhIHN1Ym5ldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1Ym5ldFYyQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQXZhaWxhYmlsaXR5IFpvbmUgdGhpcyBzdWJuZXQgaXMgbG9jYXRlZCBpblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIEFaIGluZm9ybWF0aW9uLCBjYW5ub3QgdXNlIEFaIHNlbGVjdGlvbiBmZWF0dXJlc1xuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSVB2NCBDSURSIGJsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VibmV0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gQ0lEUiBpbmZvcm1hdGlvbiwgY2Fubm90IHVzZSBDSURSIGZpbHRlciBmZWF0dXJlc1xuICAgKi9cbiAgcmVhZG9ubHkgaXB2NENpZHJCbG9jazogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSVB2NCBDSURSIGJsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VibmV0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gQ0lEUiBpbmZvcm1hdGlvbiwgY2Fubm90IHVzZSBDSURSIGZpbHRlciBmZWF0dXJlc1xuICAgKi9cbiAgcmVhZG9ubHkgaXB2NkNpZHJCbG9jaz86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YWJsZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHN1Ym5ldFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHJvdXRlIHRhYmxlIGluZm9ybWF0aW9uLCBjYW5ub3QgY3JlYXRlIFZQQyBlbmRwb2ludHNcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlVGFibGVJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN1Ym5ldElkIGZvciB0aGlzIHBhcnRpY3VsYXIgc3VibmV0XG4gICAqL1xuICByZWFkb25seSBzdWJuZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBzdWJuZXQgKHB1YmxpYyBvciBwcml2YXRlKSB0aGF0IHRoaXMgc3VibmV0IHJlcHJlc2VudHMuXG4gICAqL1xuICByZWFkb25seSBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBnaXZlbiBzdWJuZXRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBzdWJuZXQgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0TmFtZT86IHN0cmluZztcblxufVxuXG50eXBlIERlcHJlY2F0ZWRTdWJuZXRUeXBlID0gJ0RlcHJlY2F0ZWRfSXNvbGF0ZWQnIHwgJ0RlcHJlY2F0ZWRfUHJpdmF0ZSc7XG5jb25zdCBzdWJuZXRUeXBlTWFwOiB7IFtrZXkgaW4gU3VibmV0VHlwZSB8IERlcHJlY2F0ZWRTdWJuZXRUeXBlXTogKHZwYzogSVZwY1YyLCBzdWJuZXQ6IFN1Ym5ldFYyKSA9PiB2b2lkIH0gPSB7XG4gIFtTdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURURdOiAodnBjOiBJVnBjVjIsIHN1Ym5ldDogU3VibmV0VjIpID0+IHZwYy5pc29sYXRlZFN1Ym5ldHMucHVzaChzdWJuZXQpLFxuICBbU3VibmV0VHlwZS5QVUJMSUNdOiAodnBjOiBJVnBjVjIsIHN1Ym5ldDogU3VibmV0VjIpID0+IHZwYy5wdWJsaWNTdWJuZXRzLnB1c2goc3VibmV0KSxcbiAgW1N1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTU106ICh2cGM6IElWcGNWMiwgc3VibmV0OiBTdWJuZXRWMikgPT4gdnBjLnByaXZhdGVTdWJuZXRzLnB1c2goc3VibmV0KSxcbiAgWydEZXByZWNhdGVkX0lzb2xhdGVkJ106ICh2cGM6IElWcGNWMiwgc3VibmV0OiBTdWJuZXRWMikgPT4gdnBjLmlzb2xhdGVkU3VibmV0cy5wdXNoKHN1Ym5ldCksXG4gIFsnRGVwcmVjYXRlZF9Qcml2YXRlJ106ICh2cGM6IElWcGNWMiwgc3VibmV0OiBTdWJuZXRWMikgPT4gdnBjLnByaXZhdGVTdWJuZXRzLnB1c2goc3VibmV0KSxcbiAgW1N1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX05BVF06ICh2cGM6IElWcGNWMiwgc3VibmV0OiBTdWJuZXRWMikgPT4gdnBjLnByaXZhdGVTdWJuZXRzLnB1c2goc3VibmV0KSxcbn07XG5cbi8qKlxuICogU3RvcmVzIHRoZSBwcm92aWRlZCBzdWJuZXQgaW4gdGhlIFZQQydzIGNvbGxlY3Rpb24gb2Ygc3VibmV0cyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHN1Ym5ldCB0eXBlLlxuICpcbiAqIEBwYXJhbSB2cGMgVGhlIFZQQyBpbnN0YW5jZSB0byB3aGljaCB0aGUgc3VibmV0IGJlbG9uZ3MuXG4gKiBAcGFyYW0gc3VibmV0IFRoZSBzdWJuZXQgaW5zdGFuY2UgdG8gYmUgc3RvcmVkLlxuICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdGhlIHN1Ym5ldCAoZS5nLiwgcHVibGljLCBwcml2YXRlLCBpc29sYXRlZCkuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gc3RvcmVTdWJuZXRUb1ZwY0J5VHlwZSh2cGM6IElWcGNWMiwgc3VibmV0OiBTdWJuZXRWMiwgdHlwZTogU3VibmV0VHlwZSkge1xuICBjb25zdCBmaW5kRnVuY3Rpb25UeXBlID0gc3VibmV0VHlwZU1hcFt0eXBlXTtcbiAgaWYgKGZpbmRGdW5jdGlvblR5cGUpIHtcbiAgICBmaW5kRnVuY3Rpb25UeXBlKHZwYywgc3VibmV0KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFVuc3VwcG9ydGVkU3VibmV0VHlwZWAsIGBVbnN1cHBvcnRlZCBzdWJuZXQgdHlwZTogJHt0eXBlfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIE5lZWQgdG8gc2V0IGV4cGxpY2l0IGRlcGVuZGVuY3kgYXMgZHVyaW5nIHN0YWNrIGRlbGV0aW9uLFxuICAgKiB0aGUgY2lkciBibG9ja3MgbWF5IGdldCBkZWxldGVkIGZpcnN0IGFuZCB3aWxsIGZhaWwgYXMgdGhlIHN1Ym5ldHMgYXJlIHN0aWxsIHVzaW5nIHRoZSBjaWRyIGJsb2Nrc1xuICAgKi9cbiAgaWYgKHZwYy5zZWNvbmRhcnlDaWRyQmxvY2spIHtcbiAgICBmb3IgKGNvbnN0IGNpZHIgb2YgdnBjLnNlY29uZGFyeUNpZHJCbG9jaykge1xuICAgICAgc3VibmV0Lm5vZGUuYWRkRGVwZW5kZW5jeShjaWRyKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgVlBDIHN1cHBvcnRzIElQdjYgYWRkcmVzc2VzLlxuICpcbiAqIEBwYXJhbSB2cGMgVGhlIFZQQyBpbnN0YW5jZSB0byBiZSB2YWxpZGF0ZWQuXG4gKiBAdGhyb3dzIFZhbGlkYXRpb25FcnJvciBpZiB0aGUgVlBDIGRvZXMgbm90IHN1cHBvcnQgSVB2NiBhZGRyZXNzZXMuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBWUEMgc3VwcG9ydHMgSVB2NiBhZGRyZXNzZXMsIGZhbHNlIG90aGVyd2lzZS5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN1cHBvcnRJcHY2KHZwYzogSVZwY1YyKSB7XG4gIGlmICh2cGMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgaWYgKHZwYy5zZWNvbmRhcnlDaWRyQmxvY2suc29tZSgoc2Vjb25kYXJ5QWRkcmVzcykgPT4gc2Vjb25kYXJ5QWRkcmVzcy5hbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2sgPT09IHRydWUgfHxcbiAgc2Vjb25kYXJ5QWRkcmVzcy5pcHY2SXBhbVBvb2xJZCAhPT0gdW5kZWZpbmVkIHx8IHNlY29uZGFyeUFkZHJlc3MuaXB2NlBvb2wgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YElwdjZOb3RTdXBwb3J0ZWRgLCAnVG8gdXNlIElQdjYsIHRoZSBWUEMgbXVzdCBlbmFibGUgSVB2NiBzdXBwb3J0LicpO1xuICAgIH1cbiAgfSBlbHNlIHtyZXR1cm4gZmFsc2U7fVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgcHJvdmlkZWQgQ0lEUiByYW5nZSBmYWxscyB3aXRoaW4gdGhlIElQIGFkZHJlc3MgcmFuZ2VzIG9mIHRoZSBnaXZlbiBWUEMuXG4gKlxuICogQHBhcmFtIHZwYyBUaGUgVlBDIGluc3RhbmNlIHRvIGNoZWNrIGFnYWluc3QuXG4gKiBAcGFyYW0gY2lkclJhbmdlIFRoZSBDSURSIHJhbmdlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBDSURSIHJhbmdlIGZhbGxzIHdpdGhpbiB0aGUgVlBDJ3MgSVAgYWRkcmVzcyByYW5nZXMsIGZhbHNlIG90aGVyd2lzZS5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBjaGVja0NpZHJSYW5nZXModnBjOiBJVnBjVjIsIGNpZHJSYW5nZTogc3RyaW5nKSB7XG4gIGNvbnN0IHZwY0NpZHJCbG9jayA9IFt2cGMuaXB2NENpZHJCbG9ja107XG4gIGNvbnN0IHN1Ym5ldENpZHJCbG9jayA9IG5ldyBDaWRyQmxvY2soY2lkclJhbmdlKTtcbiAgY29uc3QgYWxsQ2lkcnM6IENpZHJCbG9ja1tdID0gW107XG5cbiAgLy8gU2Vjb25kYXJ5IElQIGFkZHJlc3NlcyBhc3NvaWNhdGVkIHVzaW5nIHVzZXIgZGVmaW5lZCBJUHY0IHJhbmdlXG4gIGlmICh2cGMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgZm9yIChjb25zdCBpcEFkZHJlc3Mgb2YgdnBjLnNlY29uZGFyeUNpZHJCbG9jaykge1xuICAgICAgaWYgKGlwQWRkcmVzcy5jaWRyQmxvY2spIHtcbiAgICAgICAgdnBjQ2lkckJsb2NrLnB1c2goaXBBZGRyZXNzLmNpZHJCbG9jayk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNpZHJzID0gdnBjQ2lkckJsb2NrLm1hcChjaWRyID0+IG5ldyBDaWRyQmxvY2soY2lkcikpO1xuICAgIGFsbENpZHJzLnB1c2goLi4uY2lkcnMpO1xuICB9XG5cbiAgLy8gU2Vjb25kYXJ5IElQIGFkZHJlc3NlcyBhc3NvaWNhdGVkIHVzaW5nIElQQU0gSVB2NCByYW5nZVxuICBpZiAodnBjLmlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycykge1xuICAgIGNvbnN0IGNpZHJzID0gdnBjLmlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycy5tYXAoY2lkciA9PiBuZXcgQ2lkckJsb2NrKGNpZHIpKTtcbiAgICBhbGxDaWRycy5wdXNoKC4uLmNpZHJzKTtcbiAgfVxuXG4gIC8vIElmIG5vIElQdjQgaXMgYXNzaWduZWQgYXMgc2Vjb25kYXJ5IGFkZHJlc3NcbiAgaWYgKGFsbENpZHJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgTm9TZWNvbmRhcnlJcEFkZHJlc3NgLCAnTm8gc2Vjb25kYXJ5IElQIGFkZHJlc3MgYXR0YWNoZWQgdG8gVlBDJyk7XG4gIH1cblxuICByZXR1cm4gYWxsQ2lkcnMuc29tZShjID0+IGMuY29udGFpbnNDaWRyKHN1Ym5ldENpZHJCbG9jaykpO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBpZiB0aGUgcHJvdmlkZWQgSVB2NCBDSURSIGJsb2NrIG92ZXJsYXBzIHdpdGggZXhpc3Rpbmcgc3VibmV0IENJRFIgYmxvY2tzIHdpdGhpbiB0aGUgZ2l2ZW4gVlBDLlxuICpcbiAqIEBwYXJhbSB2cGMgVGhlIFZQQyBpbnN0YW5jZSB0byBjaGVjayBhZ2FpbnN0LlxuICogQHBhcmFtIGlwdjRDaWRyQmxvY2sgVGhlIElQdjQgQ0lEUiBibG9jayB0byBiZSB2YWxpZGF0ZWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBJUHY0IENJRFIgYmxvY2sgb3ZlcmxhcHMgd2l0aCBleGlzdGluZyBzdWJuZXQgQ0lEUiBibG9ja3MsIGZhbHNlIG90aGVyd2lzZS5cbiAqIEBpbnRlcm5hbFxuICovXG5cbmZ1bmN0aW9uIHZhbGlkYXRlT3ZlcmxhcHBpbmdDaWRyUmFuZ2VzKHZwYzogSVZwY1YyLCBpcHY0Q2lkckJsb2NrOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgbGV0IGFsbFN1Ym5ldHM6IElTdWJuZXRWMltdO1xuICB0cnkge1xuICAgIGFsbFN1Ym5ldHMgPSB2cGMuc2VsZWN0U3VibmV0cygpLnN1Ym5ldHM7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAnTm8gc3VibmV0cyBpbiBWUEMnO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGlwTWFwOiBbc3RyaW5nLCBzdHJpbmddW10gPSBuZXcgQXJyYXkoKTtcblxuICBjb25zdCBpbnB1dFJhbmdlID0gbmV3IENpZHJCbG9jayhpcHY0Q2lkckJsb2NrKTtcblxuICBjb25zdCBpbnB1dElwTWFwOiBbc3RyaW5nLCBzdHJpbmddID0gW2lucHV0UmFuZ2UubWluSXAoKSwgaW5wdXRSYW5nZS5tYXhJcCgpXTtcblxuICBmb3IgKGNvbnN0IHN1Ym5ldCBvZiBhbGxTdWJuZXRzKSB7XG4gICAgY29uc3QgY2lkckJsb2NrID0gbmV3IENpZHJCbG9jayhzdWJuZXQuaXB2NENpZHJCbG9jayk7XG4gICAgaXBNYXAucHVzaChbY2lkckJsb2NrLm1pbklwKCksIGNpZHJCbG9jay5tYXhJcCgpXSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHJhbmdlIG9mIGlwTWFwKSB7XG4gICAgaWYgKGlucHV0UmFuZ2UucmFuZ2VzT3ZlcmxhcChyYW5nZSwgaW5wdXRJcE1hcCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgaWYgdGhlIHByb3ZpZGVkIElQdjYgQ0lEUiBibG9jayBvdmVybGFwcyB3aXRoIGV4aXN0aW5nIHN1Ym5ldCBDSURSIGJsb2NrcyB3aXRoaW4gdGhlIGdpdmVuIFZQQy5cbiAqXG4gKiBAcGFyYW0gdnBjIFRoZSBWUEMgaW5zdGFuY2UgdG8gY2hlY2sgYWdhaW5zdC5cbiAqIEBwYXJhbSBpcHY2Q2lkckJsb2NrIFRoZSBJUHY2IENJRFIgYmxvY2sgdG8gYmUgdmFsaWRhdGVkLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgSVB2NiBDSURSIGJsb2NrIG92ZXJsYXBzIHdpdGggZXhpc3Rpbmcgc3VibmV0IENJRFIgYmxvY2tzLCBmYWxzZSBvdGhlcndpc2UuXG4gKiBAdGhyb3dzIFZhbGlkYXRpb25FcnJvciBpZiBubyBzdWJuZXRzIGFyZSBmb3VuZCBpbiB0aGUgVlBDLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlT3ZlcmxhcHBpbmdDaWRyUmFuZ2VzaXB2Nih2cGM6IElWcGNWMiwgaXB2NkNpZHJCbG9jazogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGxldCBhbGxTdWJuZXRzOiBJU3VibmV0VjJbXTtcbiAgdHJ5IHtcbiAgICBhbGxTdWJuZXRzID0gdnBjLnNlbGVjdFN1Ym5ldHMoKS5zdWJuZXRzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgJ05vIHN1Ym5ldHMgaW4gVlBDJztcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBpcHY2TWFwOiBzdHJpbmdbXT0gW107XG5cbiAgY29uc3QgaW5wdXRSYW5nZSA9IG5ldyBDaWRyQmxvY2tJcHY2KGlwdjZDaWRyQmxvY2spO1xuXG4gIGxldCByZXN1bHQgOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZm9yIChjb25zdCBzdWJuZXQgb2YgYWxsU3VibmV0cykge1xuICAgIGlmIChzdWJuZXQuaXB2NkNpZHJCbG9jaykge1xuICAgICAgY29uc3QgY2lkckJsb2NrID0gbmV3IENpZHJCbG9ja0lwdjYoc3VibmV0LmlwdjZDaWRyQmxvY2spO1xuICAgICAgaXB2Nk1hcC5wdXNoKGNpZHJCbG9jay5jaWRyKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHJhbmdlIG9mIGlwdjZNYXApIHtcbiAgICBpZiAoaW5wdXRSYW5nZS5yYW5nZXNPdmVybGFwKHJhbmdlLCBpbnB1dFJhbmdlLmNpZHIpKSB7XG4gICAgICByZXN1bHQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=
@@ -60,7 +60,7 @@ let TransitGatewayRouteTableAssociation = (() => {
60
60
  TransitGatewayRouteTableAssociation = _classThis = _classDescriptor.value;
61
61
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
62
62
  }
63
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.TransitGatewayRouteTableAssociation", version: "2.257.0-alpha.0" };
63
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.TransitGatewayRouteTableAssociation", version: "2.258.1-alpha.0" };
64
64
  /** Uniquely identifies this class. */
65
65
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.TransitGatewayRouteTableAssociation';
66
66
  /**
@@ -60,7 +60,7 @@ let TransitGatewayRouteTablePropagation = (() => {
60
60
  TransitGatewayRouteTablePropagation = _classThis = _classDescriptor.value;
61
61
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
62
62
  }
63
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.TransitGatewayRouteTablePropagation", version: "2.257.0-alpha.0" };
63
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.TransitGatewayRouteTablePropagation", version: "2.258.1-alpha.0" };
64
64
  /** Uniquely identifies this class. */
65
65
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.TransitGatewayRouteTablePropagation';
66
66
  /**
@@ -94,7 +94,7 @@ let TransitGatewayRouteTable = (() => {
94
94
  TransitGatewayRouteTable = _classThis = _classDescriptor.value;
95
95
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
96
96
  }
97
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.TransitGatewayRouteTable", version: "2.257.0-alpha.0" };
97
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.TransitGatewayRouteTable", version: "2.258.1-alpha.0" };
98
98
  /** Uniquely identifies this class. */
99
99
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.TransitGatewayRouteTable';
100
100
  routeTableId;
@@ -66,7 +66,7 @@ let TransitGatewayRoute = (() => {
66
66
  TransitGatewayRoute = _classThis = _classDescriptor.value;
67
67
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
68
68
  }
69
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.TransitGatewayRoute", version: "2.257.0-alpha.0" };
69
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.TransitGatewayRoute", version: "2.258.1-alpha.0" };
70
70
  /** Uniquely identifies this class. */
71
71
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.TransitGatewayRoute';
72
72
  routeTable;
@@ -124,7 +124,7 @@ let TransitGatewayBlackholeRoute = (() => {
124
124
  TransitGatewayBlackholeRoute = _classThis = _classDescriptor.value;
125
125
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
126
126
  }
127
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.TransitGatewayBlackholeRoute", version: "2.257.0-alpha.0" };
127
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.TransitGatewayBlackholeRoute", version: "2.258.1-alpha.0" };
128
128
  /** Uniquely identifies this class. */
129
129
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.TransitGatewayBlackholeRoute';
130
130
  routeTable;
@@ -64,7 +64,7 @@ let TransitGatewayVpcAttachment = (() => {
64
64
  TransitGatewayVpcAttachment = _classThis = _classDescriptor.value;
65
65
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
66
66
  }
67
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.TransitGatewayVpcAttachment", version: "2.257.0-alpha.0" };
67
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.TransitGatewayVpcAttachment", version: "2.258.1-alpha.0" };
68
68
  /** Uniquely identifies this class. */
69
69
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.TransitGatewayVpcAttachment';
70
70
  transitGatewayAttachmentId;
@@ -148,7 +148,7 @@ let TransitGateway = (() => {
148
148
  TransitGateway = _classThis = _classDescriptor.value;
149
149
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
150
150
  }
151
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.TransitGateway", version: "2.257.0-alpha.0" };
151
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.TransitGateway", version: "2.258.1-alpha.0" };
152
152
  /** Uniquely identifies this class. */
153
153
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.TransitGateway';
154
154
  routerType;
@@ -1,8 +1,9 @@
1
1
  import { Resource } from 'aws-cdk-lib';
2
2
  import type { ClientVpnEndpointOptions, EnableVpnGatewayOptions, FlowLogOptions, GatewayVpcEndpointOptions, InterfaceVpcEndpointOptions, ISubnet, IVpc, SelectedSubnets, SubnetSelection, VpnConnectionOptions } from 'aws-cdk-lib/aws-ec2';
3
3
  import { ClientVpnEndpoint, FlowLog, GatewayVpcEndpoint, InterfaceVpcEndpoint, VpnConnection, VpnConnectionType } from 'aws-cdk-lib/aws-ec2';
4
- import type { VPCReference } from 'aws-cdk-lib/aws-ec2/lib/ec2.generated';
4
+ type VPCReference = aws_ec2.VPCReference;
5
5
  import { Role } from 'aws-cdk-lib/aws-iam';
6
+ import type { aws_ec2 } from 'aws-cdk-lib/interfaces';
6
7
  import type { IDependable } from 'constructs';
7
8
  import { DependencyGroup } from 'constructs';
8
9
  import type { NatGatewayOptions, VPCPeeringConnectionOptions } from './route';
@@ -369,3 +370,4 @@ export declare abstract class VpcV2Base extends Resource implements IVpcV2 {
369
370
  */
370
371
  private reifySelectionDefaults;
371
372
  }
373
+ export {};