@aws-cdk/aws-ec2-alpha 2.156.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js ADDED
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ // The index.ts files contains a list of files we want to
3
+ // include as part of the public API of this module.
4
+ // In general, all files including L2 classes will be listed here,
5
+ // while all files including only utility functions will be omitted from here.
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ __exportStar(require("./vpc-v2"), exports);
22
+ __exportStar(require("./ipam"), exports);
23
+ __exportStar(require("./vpc-v2-base"), exports);
24
+ __exportStar(require("./subnet-v2"), exports);
25
+ __exportStar(require("./route"), exports);
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEseURBQXlEO0FBQ3pELG9EQUFvRDtBQUNwRCxrRUFBa0U7QUFDbEUsOEVBQThFOzs7Ozs7Ozs7Ozs7Ozs7O0FBRTlFLDJDQUF5QjtBQUN6Qix5Q0FBdUI7QUFDdkIsZ0RBQThCO0FBQzlCLDhDQUE0QjtBQUM1QiwwQ0FBd0IiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGUgaW5kZXgudHMgZmlsZXMgY29udGFpbnMgYSBsaXN0IG9mIGZpbGVzIHdlIHdhbnQgdG9cbi8vIGluY2x1ZGUgYXMgcGFydCBvZiB0aGUgcHVibGljIEFQSSBvZiB0aGlzIG1vZHVsZS5cbi8vIEluIGdlbmVyYWwsIGFsbCBmaWxlcyBpbmNsdWRpbmcgTDIgY2xhc3NlcyB3aWxsIGJlIGxpc3RlZCBoZXJlLFxuLy8gd2hpbGUgYWxsIGZpbGVzIGluY2x1ZGluZyBvbmx5IHV0aWxpdHkgZnVuY3Rpb25zIHdpbGwgYmUgb21pdHRlZCBmcm9tIGhlcmUuXG5cbmV4cG9ydCAqIGZyb20gJy4vdnBjLXYyJztcbmV4cG9ydCAqIGZyb20gJy4vaXBhbSc7XG5leHBvcnQgKiBmcm9tICcuL3ZwYy12Mi1iYXNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3VibmV0LXYyJztcbmV4cG9ydCAqIGZyb20gJy4vcm91dGUnO1xuIl19
package/lib/ipam.d.ts ADDED
@@ -0,0 +1,250 @@
1
+ import { CfnIPAMPoolCidr } from 'aws-cdk-lib/aws-ec2';
2
+ import { Construct } from 'constructs';
3
+ import { Resource } from 'aws-cdk-lib';
4
+ /**
5
+ * Represents the address family for IP addresses in an IPAM pool.
6
+ * IP_V4 - Represents the IPv4 address family.
7
+ * IP_V6 - Represents the IPv6 address family.
8
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-addressfamily
9
+ */
10
+ export declare enum AddressFamily {
11
+ /**
12
+ * Represents the IPv4 address family.
13
+ * Allowed under public and private pool.
14
+ */
15
+ IP_V4 = "ipv4",
16
+ /**
17
+ * Represents the IPv6 address family.
18
+ * Only allowed under public pool.
19
+ */
20
+ IP_V6 = "ipv6"
21
+ }
22
+ /**
23
+ * The IP address source for pools in the public scope.
24
+ * Only used for provisioning IP address CIDRs to pools in the public scope.
25
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-publicipsource
26
+ */
27
+ export declare enum IpamPoolPublicIpSource {
28
+ /**
29
+ * BYOIP Ipv6 to be registered under IPAM
30
+ */
31
+ BYOIP = "byoip",
32
+ /**
33
+ * Amazon Provided Ipv6 range
34
+ */
35
+ AMAZON = "amazon"
36
+ }
37
+ /**
38
+ * Limits which service in AWS that the pool can be used in
39
+ */
40
+ export declare enum AwsServiceName {
41
+ /**
42
+ * Allows users to use space for Elastic IP addresses and VPCs
43
+ */
44
+ EC2 = "ec2"
45
+ }
46
+ /**
47
+ * Options to create a new Ipam in the account
48
+ */
49
+ export interface IpamProps {
50
+ /**
51
+ * The operating Regions for an IPAM.
52
+ * Operating Regions are AWS Regions where the IPAM is allowed to manage IP address CIDRs
53
+ * For more information about operating Regions, see [Create an IPAM](https://docs.aws.amazon.com//vpc/latest/ipam/create-ipam.html) in the *Amazon VPC IPAM User Guide* .
54
+ * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipam.html#cfn-ec2-ipam-operatingregions
55
+ * @default Stack.region if defined else []
56
+ */
57
+ readonly operatingRegion?: string[];
58
+ /**
59
+ * Name of IPAM that can be used for tagging resource
60
+ * @default none
61
+ */
62
+ readonly ipamName?: string;
63
+ }
64
+ /**
65
+ * Refers to two possible scope types under IPAM
66
+ */
67
+ export declare enum IpamScopeType {
68
+ /**
69
+ * Default scopes created by IPAM
70
+ */
71
+ DEFAULT = "default",
72
+ /**
73
+ * Custom scope created using method
74
+ */
75
+ CUSTOM = "custom"
76
+ }
77
+ /**
78
+ * Options for configuring an IPAM pool.
79
+ *
80
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html
81
+ */
82
+ export interface PoolOptions {
83
+ /**
84
+ * addressFamily - The address family of the pool (ipv4 or ipv6).
85
+ */
86
+ readonly addressFamily: AddressFamily;
87
+ /**
88
+ * Information about the CIDRs provisioned to the pool.
89
+ * @default - No CIDRs are provisioned
90
+ */
91
+ readonly ipv4ProvisionedCidrs?: string[];
92
+ /**
93
+ * The locale (AWS Region) of the pool. Should be one of the IPAM operating region.
94
+ * Only resources in the same Region as the locale of the pool can get IP address allocations from the pool.
95
+ * You can only allocate a CIDR for a VPC, for example, from an IPAM pool that shares a locale with the VPC’s Region.
96
+ * Note that once you choose a Locale for a pool, you cannot modify it. If you choose an AWS Region for locale that has not been configured as an operating Region for the IPAM, you'll get an error.
97
+ * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-locale
98
+ * @default - Current operating region
99
+ */
100
+ readonly locale?: string;
101
+ /**
102
+ * The IP address source for pools in the public scope.
103
+ * Only used for IPv6 address
104
+ * Only allowed values to this are 'byoip' or 'amazon'
105
+ * @default amazon
106
+ */
107
+ readonly publicIpSource?: IpamPoolPublicIpSource;
108
+ /**
109
+ * Limits which service in AWS that the pool can be used in.
110
+ *
111
+ * "ec2", for example, allows users to use space for Elastic IP addresses and VPCs.
112
+ *
113
+ * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-awsservice
114
+ *
115
+ * @default - No service
116
+ */
117
+ readonly awsService?: AwsServiceName;
118
+ }
119
+ /**
120
+ * Options to provision CIDRs to an IPAM pool.
121
+ * Used to create a new IpamPoolCidr
122
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampoolcidr.html
123
+ */
124
+ export interface IpamPoolCidrProvisioningOptions {
125
+ /**
126
+ * Ipv6 Netmask length for the CIDR
127
+ * @default none
128
+ */
129
+ readonly netmaskLength?: number;
130
+ /**
131
+ * Ipv6 CIDR block for the IPAM pool
132
+ * @default none
133
+ */
134
+ readonly cidr?: string;
135
+ }
136
+ /**
137
+ * Definition used to add or create a new IPAM pool
138
+ */
139
+ export interface IIpamPool {
140
+ /**
141
+ * Pool ID to be passed to the VPC construct
142
+ * @attribute IpamPoolId
143
+ */
144
+ readonly ipamPoolId: string;
145
+ /**
146
+ * Pool CIDR for IPv6 to be provisioned with Public IP source set to 'Amazon'
147
+ */
148
+ readonly ipamCidrs: CfnIPAMPoolCidr[];
149
+ /**
150
+ * Function to associate a IPv6 address with IPAM pool
151
+ */
152
+ provisionCidr(id: string, options: IpamPoolCidrProvisioningOptions): CfnIPAMPoolCidr;
153
+ }
154
+ /**
155
+ * Being used in IPAM class to add pools to default scope created by IPAM.
156
+ */
157
+ export interface IpamScopeOptions {
158
+ /**
159
+ * IPAM scope name that will be used for tagging
160
+ * @default none
161
+ */
162
+ readonly ipamScopeName?: string;
163
+ }
164
+ /**
165
+ * Options for configuring an IP Address Manager (IPAM).
166
+ *
167
+ * For more information, see the {@link https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipam.html}.
168
+ */
169
+ export interface IpamOptions {
170
+ /**
171
+ * CIDR Mask for Vpc
172
+ * Only required when using AWS Ipam
173
+ *
174
+ * @default - None
175
+ */
176
+ readonly netmaskLength?: number;
177
+ /**
178
+ * Ipv4 or an Ipv6 IPAM pool
179
+ * Only required when using AWS Ipam
180
+ *
181
+ * @default - None
182
+ */
183
+ readonly ipamPool?: IIpamPool;
184
+ /**
185
+ * Required to set Secondary cidr block resource name
186
+ * in order to generate unique logical id for the resource.
187
+ */
188
+ readonly cidrBlockName: string;
189
+ }
190
+ /**
191
+ * Interface for IpamScope Class
192
+ */
193
+ export interface IIpamScopeBase {
194
+ /**
195
+ * Reference to the current scope of stack to be passed in order to create
196
+ * a new IPAM pool
197
+ */
198
+ readonly scope: Construct;
199
+ /**
200
+ * Default Scope ids created by the IPAM or a new Resource id
201
+ */
202
+ readonly scopeId: string;
203
+ /**
204
+ * Defines scope type can be either default or custom
205
+ */
206
+ readonly scopeType?: IpamScopeType;
207
+ /**
208
+ * Function to add a new pool to an IPAM scope
209
+ */
210
+ addPool(id: string, options: PoolOptions): IIpamPool;
211
+ }
212
+ /**
213
+ * Creates new IPAM with default public and private scope
214
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamscope.html
215
+ * @resource AWS::EC2::IPAM
216
+ */
217
+ export declare class Ipam extends Resource {
218
+ /**
219
+ * Provides access to default public IPAM scope through add pool method.
220
+ * Usage: To add an Ipam Pool to a default public scope
221
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamscope.html
222
+ */
223
+ readonly publicScope: IIpamScopeBase;
224
+ /**
225
+ * Provides access to default private IPAM scope through add pool method.
226
+ * Usage: To add an Ipam Pool to a default private scope
227
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamscope.html
228
+ * */
229
+ readonly privateScope: IIpamScopeBase;
230
+ private readonly _ipam;
231
+ /**
232
+ * Access to Ipam resource id that can be used later to add a custom private scope to this IPAM
233
+ * @attribute IpamId
234
+ */
235
+ readonly ipamId: string;
236
+ /**
237
+ * List of operating regions for IPAM
238
+ */
239
+ readonly operatingRegions: string[];
240
+ /**
241
+ * List of scopes created under this IPAM
242
+ */
243
+ readonly scopes: IIpamScopeBase[];
244
+ constructor(scope: Construct, id: string, props?: IpamProps);
245
+ /**
246
+ * Function to add custom scope to an existing IPAM
247
+ * Custom scopes can only be private
248
+ */
249
+ addScope(scope: Construct, id: string, options: IpamScopeOptions): IIpamScopeBase;
250
+ }
package/lib/ipam.js ADDED
@@ -0,0 +1,255 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Ipam = exports.IpamScopeType = exports.AwsServiceName = exports.IpamPoolPublicIpSource = exports.AddressFamily = void 0;
5
+ const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
6
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
7
+ const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
8
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
9
+ /**
10
+ * Represents the address family for IP addresses in an IPAM pool.
11
+ * IP_V4 - Represents the IPv4 address family.
12
+ * IP_V6 - Represents the IPv6 address family.
13
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-addressfamily
14
+ */
15
+ var AddressFamily;
16
+ (function (AddressFamily) {
17
+ /**
18
+ * Represents the IPv4 address family.
19
+ * Allowed under public and private pool.
20
+ */
21
+ AddressFamily["IP_V4"] = "ipv4";
22
+ /**
23
+ * Represents the IPv6 address family.
24
+ * Only allowed under public pool.
25
+ */
26
+ AddressFamily["IP_V6"] = "ipv6";
27
+ })(AddressFamily || (exports.AddressFamily = AddressFamily = {}));
28
+ /**
29
+ * The IP address source for pools in the public scope.
30
+ * Only used for provisioning IP address CIDRs to pools in the public scope.
31
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-publicipsource
32
+ */
33
+ var IpamPoolPublicIpSource;
34
+ (function (IpamPoolPublicIpSource) {
35
+ /**
36
+ * BYOIP Ipv6 to be registered under IPAM
37
+ */
38
+ IpamPoolPublicIpSource["BYOIP"] = "byoip";
39
+ /**
40
+ * Amazon Provided Ipv6 range
41
+ */
42
+ IpamPoolPublicIpSource["AMAZON"] = "amazon";
43
+ })(IpamPoolPublicIpSource || (exports.IpamPoolPublicIpSource = IpamPoolPublicIpSource = {}));
44
+ /**
45
+ * Limits which service in AWS that the pool can be used in
46
+ */
47
+ var AwsServiceName;
48
+ (function (AwsServiceName) {
49
+ /**
50
+ * Allows users to use space for Elastic IP addresses and VPCs
51
+ */
52
+ AwsServiceName["EC2"] = "ec2";
53
+ })(AwsServiceName || (exports.AwsServiceName = AwsServiceName = {}));
54
+ /**
55
+ * Refers to two possible scope types under IPAM
56
+ */
57
+ var IpamScopeType;
58
+ (function (IpamScopeType) {
59
+ /**
60
+ * Default scopes created by IPAM
61
+ */
62
+ IpamScopeType["DEFAULT"] = "default";
63
+ /**
64
+ * Custom scope created using method
65
+ */
66
+ IpamScopeType["CUSTOM"] = "custom";
67
+ })(IpamScopeType || (exports.IpamScopeType = IpamScopeType = {}));
68
+ /**
69
+ * Creates new IPAM Pool
70
+ * Pools enable you to organize your IP addresses according to your routing and security needs
71
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html
72
+ * @resource AWS::EC2::IPAMPool
73
+ * @internal
74
+ */
75
+ class IpamPool extends aws_cdk_lib_1.Resource {
76
+ constructor(scope, id, props) {
77
+ super(scope, id, {
78
+ physicalName: props.ipamPoolName ?? aws_cdk_lib_1.Lazy.string({
79
+ produce: () => aws_cdk_lib_1.Names.uniqueResourceName(this, { maxLength: 128, allowedSpecialCharacters: '_' }),
80
+ }),
81
+ });
82
+ /**
83
+ * Pool CIDR for IPv6 to be provisioned with Public IP source set to 'Amazon'
84
+ */
85
+ this.ipamCidrs = [];
86
+ if (props.addressFamily === AddressFamily.IP_V6 && !props.awsService) {
87
+ throw new Error('awsService is required when addressFamily is set to ipv6');
88
+ }
89
+ this._ipamPool = new aws_ec2_1.CfnIPAMPool(this, id, {
90
+ addressFamily: props.addressFamily,
91
+ provisionedCidrs: props.ipv4ProvisionedCidrs?.map(cidr => ({ cidr })),
92
+ locale: props.locale,
93
+ ipamScopeId: props.ipamScopeId,
94
+ publicIpSource: props.publicIpSource,
95
+ awsService: props.awsService,
96
+ });
97
+ this.ipamPoolId = this._ipamPool.attrIpamPoolId;
98
+ this.node.defaultChild = this._ipamPool;
99
+ }
100
+ /**
101
+ * A CIDR provisioned to an IPAM pool.
102
+ * @param id Name of Resource
103
+ * @param options Either a CIDR or netmask length must be provided
104
+ * @returns AWS::EC2::IPAMPoolCidr
105
+ */
106
+ provisionCidr(id, options) {
107
+ const cidr = new aws_ec2_1.CfnIPAMPoolCidr(this, id, {
108
+ ...options,
109
+ ipamPoolId: this.ipamPoolId,
110
+ });
111
+ this.ipamCidrs.push(cidr);
112
+ return cidr;
113
+ }
114
+ }
115
+ /**
116
+ * Creates custom Ipam Scope, custom IPAM scopes can only be private
117
+ * (can be used for adding custom scopes to an existing IPAM)
118
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamscope.html
119
+ * @resource AWS::EC2::IPAMScope
120
+ */
121
+ class IpamScope extends aws_cdk_lib_1.Resource {
122
+ constructor(scope, id, props) {
123
+ super(scope, id);
124
+ this._ipamScope = new aws_ec2_1.CfnIPAMScope(scope, 'IpamScope', {
125
+ ipamId: props.ipamId,
126
+ });
127
+ this.scopeId = this._ipamScope.attrIpamScopeId;
128
+ this.scopeType = IpamScopeType.CUSTOM;
129
+ this.scope = scope;
130
+ this.props = props;
131
+ }
132
+ /**
133
+ * Adds a pool to the IPAM scope.
134
+ * @external
135
+ */
136
+ addPool(id, options) {
137
+ return createIpamPool(this.scope, id, this.props, options, this.scopeId);
138
+ }
139
+ }
140
+ /**
141
+ * Base class for IPAM default scopes.
142
+ */
143
+ class IpamScopeBase {
144
+ constructor(scope, scopeId, props, scopeType) {
145
+ this.scope = scope;
146
+ this.scopeId = scopeId;
147
+ this.props = props;
148
+ this.scopeType = scopeType;
149
+ this.scopeType = IpamScopeType.DEFAULT;
150
+ if (!props.ipamScopeId) {
151
+ throw new Error('ipamScopeId is required');
152
+ }
153
+ else {
154
+ this.scopeId = props.ipamScopeId;
155
+ }
156
+ }
157
+ /**
158
+ * Adds a pool to the IPAM scope.
159
+ * @external
160
+ */
161
+ addPool(id, options) {
162
+ return createIpamPool(this.scope, id, this.props, options, this.scopeId);
163
+ }
164
+ }
165
+ /**
166
+ * Creates new IPAM with default public and private scope
167
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamscope.html
168
+ * @resource AWS::EC2::IPAM
169
+ */
170
+ class Ipam extends aws_cdk_lib_1.Resource {
171
+ constructor(scope, id, props) {
172
+ super(scope, id);
173
+ /**
174
+ * List of scopes created under this IPAM
175
+ */
176
+ this.scopes = [];
177
+ try {
178
+ jsiiDeprecationWarnings._aws_cdk_aws_ec2_alpha_IpamProps(props);
179
+ }
180
+ catch (error) {
181
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
182
+ Error.captureStackTrace(error, Ipam);
183
+ }
184
+ throw error;
185
+ }
186
+ if (!props?.operatingRegion && !aws_cdk_lib_1.Stack.of(this).region) {
187
+ throw new Error('Please provide at least one operating region');
188
+ }
189
+ this.operatingRegions = props?.operatingRegion ?? [aws_cdk_lib_1.Stack.of(this).region];
190
+ this._ipam = new aws_ec2_1.CfnIPAM(this, 'Ipam', {
191
+ operatingRegions: this.operatingRegions ? this.operatingRegions.map(region => ({ regionName: region })) : [],
192
+ });
193
+ this.node.defaultChild = this._ipam;
194
+ this.ipamId = this._ipam.attrIpamId;
195
+ this.publicScope = new IpamScopeBase(this, 'DefaultPublicScope', {
196
+ ipamOperatingRegions: this.operatingRegions,
197
+ ipamId: this._ipam.attrIpamId,
198
+ ipamScopeId: this._ipam.attrPublicDefaultScopeId,
199
+ });
200
+ this.privateScope = new IpamScopeBase(this, 'DefaultPrivateScope', {
201
+ ipamOperatingRegions: this.operatingRegions,
202
+ ipamId: this._ipam.attrIpamId,
203
+ ipamScopeId: this._ipam.attrPrivateDefaultScopeId,
204
+ });
205
+ this.scopes.push(this.publicScope, this.privateScope);
206
+ }
207
+ /**
208
+ * Function to add custom scope to an existing IPAM
209
+ * Custom scopes can only be private
210
+ */
211
+ addScope(scope, id, options) {
212
+ try {
213
+ jsiiDeprecationWarnings._aws_cdk_aws_ec2_alpha_IpamScopeOptions(options);
214
+ }
215
+ catch (error) {
216
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
217
+ Error.captureStackTrace(error, this.addScope);
218
+ }
219
+ throw error;
220
+ }
221
+ const ipamScope = new IpamScope(scope, id, {
222
+ ...options,
223
+ ipamId: this.ipamId,
224
+ ipamOperatingRegions: this.operatingRegions,
225
+ });
226
+ this.scopes.push(ipamScope);
227
+ return ipamScope;
228
+ }
229
+ }
230
+ exports.Ipam = Ipam;
231
+ _a = JSII_RTTI_SYMBOL_1;
232
+ Ipam[_a] = { fqn: "@aws-cdk/aws-ec2-alpha.Ipam", version: "2.156.0-alpha.0" };
233
+ /**
234
+ * Function to create IpamPool under scope
235
+ * @internal
236
+ */
237
+ function createIpamPool(scope, id, scopeOptions, poolOptions, scopeId) {
238
+ const isLocaleInOperatingRegions = scopeOptions.ipamOperatingRegions
239
+ ? scopeOptions.ipamOperatingRegions.map(region => ({ regionName: region }))
240
+ .some(region => region.regionName === poolOptions.locale)
241
+ : false;
242
+ if (!isLocaleInOperatingRegions) {
243
+ throw new Error(`The provided locale '${poolOptions.locale}' is not in the operating regions.`);
244
+ }
245
+ return new IpamPool(scope, id, {
246
+ ipamPoolName: id,
247
+ addressFamily: poolOptions.addressFamily,
248
+ ipv4ProvisionedCidrs: poolOptions.ipv4ProvisionedCidrs,
249
+ ipamScopeId: scopeId,
250
+ locale: poolOptions.locale,
251
+ publicIpSource: poolOptions.publicIpSource,
252
+ awsService: poolOptions.awsService,
253
+ });
254
+ }
255
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImlwYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsaURBQTBGO0FBRTFGLDZDQUEyRDtBQUUzRDs7Ozs7R0FLRztBQUNILElBQVksYUFZWDtBQVpELFdBQVksYUFBYTtJQUN2Qjs7O09BR0c7SUFDSCwrQkFBYyxDQUFBO0lBRWQ7OztPQUdHO0lBQ0gsK0JBQWMsQ0FBQTtBQUNoQixDQUFDLEVBWlcsYUFBYSw2QkFBYixhQUFhLFFBWXhCO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksc0JBVVg7QUFWRCxXQUFZLHNCQUFzQjtJQUNoQzs7T0FFRztJQUNILHlDQUFlLENBQUE7SUFFZjs7T0FFRztJQUNILDJDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFWVyxzQkFBc0Isc0NBQXRCLHNCQUFzQixRQVVqQztBQUVEOztHQUVHO0FBQ0gsSUFBWSxjQUtYO0FBTEQsV0FBWSxjQUFjO0lBQ3hCOztPQUVHO0lBQ0gsNkJBQVcsQ0FBQTtBQUNiLENBQUMsRUFMVyxjQUFjLDhCQUFkLGNBQWMsUUFLekI7QUF1QkQ7O0dBRUc7QUFDSCxJQUFZLGFBVVg7QUFWRCxXQUFZLGFBQWE7SUFDdkI7O09BRUc7SUFDSCxvQ0FBbUIsQ0FBQTtJQUVuQjs7T0FFRztJQUNILGtDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFWVyxhQUFhLDZCQUFiLGFBQWEsUUFVeEI7QUEwTUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxRQUFTLFNBQVEsc0JBQVE7SUFrQjdCLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0I7UUFDNUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxrQkFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDOUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLG1CQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxF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O0tBQ2xCOztBQTNFSCxvQkE0RUM7OztBQUVEOzs7R0FHRztBQUNILFNBQVMsY0FBYyxDQUNyQixLQUFnQixFQUNoQixFQUFVLEVBQ1YsWUFBNEIsRUFDNUIsV0FBd0IsRUFDeEIsT0FBZTtJQUVmLE1BQU0sMEJBQTBCLEdBQUcsWUFBWSxDQUFDLG9CQUFvQjtRQUNsRSxDQUFDLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQzthQUN4RSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxLQUFLLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDM0QsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUVWLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLFdBQVcsQ0FBQyxNQUFNLG9DQUFvQyxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUVELE9BQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtRQUM3QixZQUFZLEVBQUUsRUFBRTtRQUNoQixhQUFhLEVBQUUsV0FBVyxDQUFDLGFBQWE7UUFDeEMsb0JBQW9CLEVBQUUsV0FBVyxDQUFDLG9CQUFvQjtRQUN0RCxXQUFXLEVBQUUsT0FBTztRQUNwQixNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU07UUFDMUIsY0FBYyxFQUFFLFdBQVcsQ0FBQyxjQUFjO1FBQzFDLFVBQVUsRUFBRSxXQUFXLENBQUMsVUFBVTtLQUNuQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2ZuSVBBTSwgQ2ZuSVBBTVBvb2wsIENmbklQQU1Qb29sQ2lkciwgQ2ZuSVBBTVNjb3BlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IExhenksIE5hbWVzLCBSZXNvdXJjZSwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYWRkcmVzcyBmYW1pbHkgZm9yIElQIGFkZHJlc3NlcyBpbiBhbiBJUEFNIHBvb2wuXG4gKiBJUF9WNCAtIFJlcHJlc2VudHMgdGhlIElQdjQgYWRkcmVzcyBmYW1pbHkuXG4gKiBJUF9WNiAtIFJlcHJlc2VudHMgdGhlIElQdjYgYWRkcmVzcyBmYW1pbHkuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbCNjZm4tZWMyLWlwYW1wb29sLWFkZHJlc3NmYW1pbHlcbiAqL1xuZXhwb3J0IGVudW0gQWRkcmVzc0ZhbWlseSB7XG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIHRoZSBJUHY0IGFkZHJlc3MgZmFtaWx5LlxuICAgKiBBbGxvd2VkIHVuZGVyIHB1YmxpYyBhbmQgcHJpdmF0ZSBwb29sLlxuICAgKi9cbiAgSVBfVjQgPSAnaXB2NCcsXG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgdGhlIElQdjYgYWRkcmVzcyBmYW1pbHkuXG4gICAqIE9ubHkgYWxsb3dlZCB1bmRlciBwdWJsaWMgcG9vbC5cbiAgICovXG4gIElQX1Y2ID0gJ2lwdjYnLFxufVxuXG4vKipcbiAqIFRoZSBJUCBhZGRyZXNzIHNvdXJjZSBmb3IgcG9vbHMgaW4gdGhlIHB1YmxpYyBzY29wZS5cbiAqIE9ubHkgdXNlZCBmb3IgcHJvdmlzaW9uaW5nIElQIGFkZHJlc3MgQ0lEUnMgdG8gcG9vbHMgaW4gdGhlIHB1YmxpYyBzY29wZS5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtcG9vbC5odG1sI2Nmbi1lYzItaXBhbXBvb2wtcHVibGljaXBzb3VyY2VcbiAqL1xuZXhwb3J0IGVudW0gSXBhbVBvb2xQdWJsaWNJcFNvdXJjZSB7XG4gIC8qKlxuICAgKiBCWU9JUCBJcHY2IHRvIGJlIHJlZ2lzdGVyZWQgdW5kZXIgSVBBTVxuICAgKi9cbiAgQllPSVAgPSAnYnlvaXAnLFxuXG4gIC8qKlxuICAgKiBBbWF6b24gUHJvdmlkZWQgSXB2NiByYW5nZVxuICAgKi9cbiAgQU1BWk9OID0gJ2FtYXpvbicsXG59XG5cbi8qKlxuICogTGltaXRzIHdoaWNoIHNlcnZpY2UgaW4gQVdTIHRoYXQgdGhlIHBvb2wgY2FuIGJlIHVzZWQgaW5cbiAqL1xuZXhwb3J0IGVudW0gQXdzU2VydmljZU5hbWUge1xuICAvKipcbiAgICogIEFsbG93cyB1c2VycyB0byB1c2Ugc3BhY2UgZm9yIEVsYXN0aWMgSVAgYWRkcmVzc2VzIGFuZCBWUENzXG4gICAqL1xuICBFQzIgPSAnZWMyJyxcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGNyZWF0ZSBhIG5ldyBJcGFtIGluIHRoZSBhY2NvdW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXBhbVByb3Bze1xuXG4gIC8qKlxuICAgKiBUaGUgb3BlcmF0aW5nIFJlZ2lvbnMgZm9yIGFuIElQQU0uXG4gICAqIE9wZXJhdGluZyBSZWdpb25zIGFyZSBBV1MgUmVnaW9ucyB3aGVyZSB0aGUgSVBBTSBpcyBhbGxvd2VkIHRvIG1hbmFnZSBJUCBhZGRyZXNzIENJRFJzXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG9wZXJhdGluZyBSZWdpb25zLCBzZWUgW0NyZWF0ZSBhbiBJUEFNXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vL3ZwYy9sYXRlc3QvaXBhbS9jcmVhdGUtaXBhbS5odG1sKSBpbiB0aGUgKkFtYXpvbiBWUEMgSVBBTSBVc2VyIEd1aWRlKiAuXG4gICAqIEBzZWUgaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW0uaHRtbCNjZm4tZWMyLWlwYW0tb3BlcmF0aW5ncmVnaW9uc1xuICAgKiBAZGVmYXVsdCBTdGFjay5yZWdpb24gaWYgZGVmaW5lZCBlbHNlIFtdXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRpbmdSZWdpb24/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTmFtZSBvZiBJUEFNIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHRhZ2dpbmcgcmVzb3VyY2VcbiAgICogQGRlZmF1bHQgbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVmZXJzIHRvIHR3byBwb3NzaWJsZSBzY29wZSB0eXBlcyB1bmRlciBJUEFNXG4gKi9cbmV4cG9ydCBlbnVtIElwYW1TY29wZVR5cGUge1xuICAvKipcbiAgICogRGVmYXVsdCBzY29wZXMgY3JlYXRlZCBieSBJUEFNXG4gICAqL1xuICBERUZBVUxUID0gJ2RlZmF1bHQnLFxuXG4gIC8qKlxuICAgKiBDdXN0b20gc2NvcGUgY3JlYXRlZCB1c2luZyBtZXRob2RcbiAgICovXG4gIENVU1RPTSA9ICdjdXN0b20nLFxufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGFuIElQQU0gcG9vbC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvb2xPcHRpb25ze1xuXG4gIC8qKlxuICAgKiBhZGRyZXNzRmFtaWx5IC0gVGhlIGFkZHJlc3MgZmFtaWx5IG9mIHRoZSBwb29sIChpcHY0IG9yIGlwdjYpLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkcmVzc0ZhbWlseTogQWRkcmVzc0ZhbWlseTtcblxuICAvKipcbiAgICogSW5mb3JtYXRpb24gYWJvdXQgdGhlIENJRFJzIHByb3Zpc2lvbmVkIHRvIHRoZSBwb29sLlxuICAgKiBAZGVmYXVsdCAtIE5vIENJRFJzIGFyZSBwcm92aXNpb25lZFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NFByb3Zpc2lvbmVkQ2lkcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGxvY2FsZSAoQVdTIFJlZ2lvbikgb2YgdGhlIHBvb2wuIFNob3VsZCBiZSBvbmUgb2YgdGhlIElQQU0gb3BlcmF0aW5nIHJlZ2lvbi5cbiAgICogIE9ubHkgcmVzb3VyY2VzIGluIHRoZSBzYW1lIFJlZ2lvbiBhcyB0aGUgbG9jYWxlIG9mIHRoZSBwb29sIGNhbiBnZXQgSVAgYWRkcmVzcyBhbGxvY2F0aW9ucyBmcm9tIHRoZSBwb29sLlxuICAgKiBZb3UgY2FuIG9ubHkgYWxsb2NhdGUgYSBDSURSIGZvciBhIFZQQywgZm9yIGV4YW1wbGUsIGZyb20gYW4gSVBBTSBwb29sIHRoYXQgc2hhcmVzIGEgbG9jYWxlIHdpdGggdGhlIFZQQ+KAmXMgUmVnaW9uLlxuICAgKiBOb3RlIHRoYXQgb25jZSB5b3UgY2hvb3NlIGEgTG9jYWxlIGZvciBhIHBvb2wsIHlvdSBjYW5ub3QgbW9kaWZ5IGl0LiBJZiB5b3UgY2hvb3NlIGFuIEFXUyBSZWdpb24gZm9yIGxvY2FsZSB0aGF0IGhhcyBub3QgYmVlbiBjb25maWd1cmVkIGFzIGFuIG9wZXJhdGluZyBSZWdpb24gZm9yIHRoZSBJUEFNLCB5b3UnbGwgZ2V0IGFuIGVycm9yLlxuICAgKiBAc2VlIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtcG9vbC5odG1sI2Nmbi1lYzItaXBhbXBvb2wtbG9jYWxlXG4gICAqIEBkZWZhdWx0IC0gQ3VycmVudCBvcGVyYXRpbmcgcmVnaW9uXG4gICAqL1xuICByZWFkb25seSBsb2NhbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJUCBhZGRyZXNzIHNvdXJjZSBmb3IgcG9vbHMgaW4gdGhlIHB1YmxpYyBzY29wZS5cbiAgICogT25seSB1c2VkIGZvciBJUHY2IGFkZHJlc3NcbiAgICogT25seSBhbGxvd2VkIHZhbHVlcyB0byB0aGlzIGFyZSAnYnlvaXAnIG9yICdhbWF6b24nXG4gICAqIEBkZWZhdWx0IGFtYXpvblxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljSXBTb3VyY2U/OiBJcGFtUG9vbFB1YmxpY0lwU291cmNlO1xuXG4gIC8qKlxuICAqIExpbWl0cyB3aGljaCBzZXJ2aWNlIGluIEFXUyB0aGF0IHRoZSBwb29sIGNhbiBiZSB1c2VkIGluLlxuICAqXG4gICogXCJlYzJcIiwgZm9yIGV4YW1wbGUsIGFsbG93cyB1c2VycyB0byB1c2Ugc3BhY2UgZm9yIEVsYXN0aWMgSVAgYWRkcmVzc2VzIGFuZCBWUENzLlxuICAqXG4gICogQHNlZSBodHRwOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbCNjZm4tZWMyLWlwYW1wb29sLWF3c3NlcnZpY2VcbiAgKlxuICAqIEBkZWZhdWx0IC0gTm8gc2VydmljZVxuICAqL1xuICByZWFkb25seSBhd3NTZXJ2aWNlPzogQXdzU2VydmljZU5hbWU7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYW4gSVBBTSBwb29sLlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1wb29sLmh0bWxcbiAqL1xuaW50ZXJmYWNlIElwYW1Qb29sUHJvcHMgZXh0ZW5kcyBQb29sT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTY29wZSBpZCB3aGVyZSBwb29sIG5lZWRzIHRvIGJlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1TY29wZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElQQU0gcmVzb3VyY2UgbmFtZVxuICAgKiBAZGVmYXVsdCBhdXRvZ2VuZXJhdGVkIGJ5IENES1xuICAgKi9cbiAgcmVhZG9ubHkgaXBhbVBvb2xOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gcHJvdmlzaW9uIENJRFJzIHRvIGFuIElQQU0gcG9vbC5cbiAqIFVzZWQgdG8gY3JlYXRlIGEgbmV3IElwYW1Qb29sQ2lkclxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1wb29sY2lkci5odG1sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXBhbVBvb2xDaWRyUHJvdmlzaW9uaW5nT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJcHY2IE5ldG1hc2sgbGVuZ3RoIGZvciB0aGUgQ0lEUlxuICAgKiBAZGVmYXVsdCBub25lXG4gICAqL1xuICByZWFkb25seSBuZXRtYXNrTGVuZ3RoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJcHY2IENJRFIgYmxvY2sgZm9yIHRoZSBJUEFNIHBvb2xcbiAgICogQGRlZmF1bHQgbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgY2lkcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZWZpbml0aW9uIHVzZWQgdG8gYWRkIG9yIGNyZWF0ZSBhIG5ldyBJUEFNIHBvb2xcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSXBhbVBvb2x7XG4gIC8qKlxuICogUG9vbCBJRCB0byBiZSBwYXNzZWQgdG8gdGhlIFZQQyBjb25zdHJ1Y3RcbiAqIEBhdHRyaWJ1dGUgSXBhbVBvb2xJZFxuICovXG4gIHJlYWRvbmx5IGlwYW1Qb29sSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogUG9vbCBDSURSIGZvciBJUHY2IHRvIGJlIHByb3Zpc2lvbmVkIHdpdGggUHVibGljIElQIHNvdXJjZSBzZXQgdG8gJ0FtYXpvbidcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1DaWRyczogQ2ZuSVBBTVBvb2xDaWRyW107XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIGFzc29jaWF0ZSBhIElQdjYgYWRkcmVzcyB3aXRoIElQQU0gcG9vbFxuICAgKi9cbiAgcHJvdmlzaW9uQ2lkcihpZDogc3RyaW5nLCBvcHRpb25zOiBJcGFtUG9vbENpZHJQcm92aXNpb25pbmdPcHRpb25zKTogQ2ZuSVBBTVBvb2xDaWRyO1xuXG59XG5cbi8qKlxuICogSVBBTSBzY29wZSBpcyB0aGUgaGlnaGVzdC1sZXZlbCBjb250YWluZXIgd2l0aGluIElQQU0uIEFuIElQQU0gY29udGFpbnMgdHdvIGRlZmF1bHQgc2NvcGVzLlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1zY29wZS5odG1sXG4gKi9cbmludGVyZmFjZSBJcGFtU2NvcGVQcm9wcyBleHRlbmRzIElwYW1TY29wZU9wdGlvbnN7XG4gIC8qKlxuICAgKiBJUEFNIGlkIHRvIHdoaWNoIHNjb3BlIG5lZWRzIHRvIGJlIGFkZGVkXG4gICAqL1xuICByZWFkb25seSBpcGFtSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogT3BlcmF0aW5nIHJlZ2lvbnMgZm9yIHRoZSBJcGFtXG4gICAqIFJlcXVpcmVkIGluIG9yZGVyIHRvIHZhbGlkYXRlIHRoZSBsb2NhbGUgYmVpbmcgc2V0IG9uIHBvb2xcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1PcGVyYXRpbmdSZWdpb25zOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ3VzdG9tIGlwYW0gc2NvcGUgaWQgdG8gYWRkIGEgcG9vbCBpbiBvcmRlciB0byBzdXBwb3J0IGRlZmF1bHQgc2NvcGVzXG4gICAqIEBkZWZhdWx0IG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1TY29wZUlkPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQmVpbmcgdXNlZCBpbiBJUEFNIGNsYXNzIHRvIGFkZCBwb29scyB0byBkZWZhdWx0IHNjb3BlIGNyZWF0ZWQgYnkgSVBBTS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJcGFtU2NvcGVPcHRpb25zIHtcblxuICAvKipcbiAgICogSVBBTSBzY29wZSBuYW1lIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0YWdnaW5nXG4gICAqIEBkZWZhdWx0IG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1TY29wZU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYW4gSVAgQWRkcmVzcyBNYW5hZ2VyIChJUEFNKS5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtLmh0bWx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElwYW1PcHRpb25zIHtcblxuICAvKipcbiAgICogQ0lEUiBNYXNrIGZvciBWcGNcbiAgICogT25seSByZXF1aXJlZCB3aGVuIHVzaW5nIEFXUyBJcGFtXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbmV0bWFza0xlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogSXB2NCBvciBhbiBJcHY2IElQQU0gcG9vbFxuICAgKiBPbmx5IHJlcXVpcmVkIHdoZW4gdXNpbmcgQVdTIElwYW1cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSBpcGFtUG9vbD86IElJcGFtUG9vbDtcblxuICAvKipcbiAgICogUmVxdWlyZWQgdG8gc2V0IFNlY29uZGFyeSBjaWRyIGJsb2NrIHJlc291cmNlIG5hbWVcbiAgICogaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdW5pcXVlIGxvZ2ljYWwgaWQgZm9yIHRoZSByZXNvdXJjZS5cbiAgICovXG4gIHJlYWRvbmx5IGNpZHJCbG9ja05hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIElwYW1TY29wZSBDbGFzc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElJcGFtU2NvcGVCYXNle1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgc2NvcGUgb2Ygc3RhY2sgdG8gYmUgcGFzc2VkIGluIG9yZGVyIHRvIGNyZWF0ZVxuICAgKiBhIG5ldyBJUEFNIHBvb2xcbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgU2NvcGUgaWRzIGNyZWF0ZWQgYnkgdGhlIElQQU0gb3IgYSBuZXcgUmVzb3VyY2UgaWRcbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogRGVmaW5lcyBzY29wZSB0eXBlIGNhbiBiZSBlaXRoZXIgZGVmYXVsdCBvciBjdXN0b21cbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlVHlwZT86IElwYW1TY29wZVR5cGU7XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIGFkZCBhIG5ldyBwb29sIHRvIGFuIElQQU0gc2NvcGVcbiAgICovXG4gIGFkZFBvb2woaWQ6IHN0cmluZywgb3B0aW9uczogUG9vbE9wdGlvbnMpOiBJSXBhbVBvb2w7XG5cbn1cblxuLyoqXG4gKiBDcmVhdGVzIG5ldyBJUEFNIFBvb2xcbiAqIFBvb2xzIGVuYWJsZSB5b3UgdG8gb3JnYW5pemUgeW91ciBJUCBhZGRyZXNzZXMgYWNjb3JkaW5nIHRvIHlvdXIgcm91dGluZyBhbmQgc2VjdXJpdHkgbmVlZHNcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtcG9vbC5odG1sXG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OklQQU1Qb29sXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgSXBhbVBvb2wgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElJcGFtUG9vbCB7XG5cbiAgLyoqXG4gICAqIFBvb2wgSUQgdG8gYmUgcGFzc2VkIHRvIHRoZSBWUEMgY29uc3RydWN0XG4gICAqIEBhdHRyaWJ1dGUgSXBhbVBvb2xJZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwYW1Qb29sSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogUG9vbCBDSURSIGZvciBJUHY2IHRvIGJlIHByb3Zpc2lvbmVkIHdpdGggUHVibGljIElQIHNvdXJjZSBzZXQgdG8gJ0FtYXpvbidcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpcGFtQ2lkcnM6IENmbklQQU1Qb29sQ2lkcltdID0gW11cblxuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIGlwYW1Qb29sIHJlc291cmNlIGNyZWF0ZWQgaW4gdGhpcyBjbGFzc1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfaXBhbVBvb2w6IENmbklQQU1Qb29sO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJcGFtUG9vbFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6IHByb3BzLmlwYW1Qb29sTmFtZSA/PyBMYXp5LnN0cmluZyh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7IG1heExlbmd0aDogMTI4LCBhbGxvd2VkU3BlY2lhbENoYXJhY3RlcnM6ICdfJyB9KSxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmFkZHJlc3NGYW1pbHkgPT09IEFkZHJlc3NGYW1pbHkuSVBfVjYgJiYgIXByb3BzLmF3c1NlcnZpY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYXdzU2VydmljZSBpcyByZXF1aXJlZCB3aGVuIGFkZHJlc3NGYW1pbHkgaXMgc2V0IHRvIGlwdjYnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pcGFtUG9vbCA9IG5ldyBDZm5JUEFNUG9vbCh0aGlzLCBpZCwge1xuICAgICAgYWRkcmVzc0ZhbWlseTogcHJvcHMuYWRkcmVzc0ZhbWlseSxcbiAgICAgIHByb3Zpc2lvbmVkQ2lkcnM6IHByb3BzLmlwdjRQcm92aXNpb25lZENpZHJzPy5tYXAoY2lkciA9PiAoeyBjaWRyIH0pKSxcbiAgICAgIGxvY2FsZTogcHJvcHMubG9jYWxlLFxuICAgICAgaXBhbVNjb3BlSWQ6IHByb3BzLmlwYW1TY29wZUlkLFxuICAgICAgcHVibGljSXBTb3VyY2U6IHByb3BzLnB1YmxpY0lwU291cmNlLFxuICAgICAgYXdzU2VydmljZTogcHJvcHMuYXdzU2VydmljZSxcbiAgICB9KTtcbiAgICB0aGlzLmlwYW1Qb29sSWQgPSB0aGlzLl9pcGFtUG9vbC5hdHRySXBhbVBvb2xJZDtcbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gdGhpcy5faXBhbVBvb2w7XG4gIH1cblxuICAvKipcbiAgICogQSBDSURSIHByb3Zpc2lvbmVkIHRvIGFuIElQQU0gcG9vbC5cbiAgICogQHBhcmFtIGlkIE5hbWUgb2YgUmVzb3VyY2VcbiAgICogQHBhcmFtIG9wdGlvbnMgRWl0aGVyIGEgQ0lEUiBvciBuZXRtYXNrIGxlbmd0aCBtdXN0IGJlIHByb3ZpZGVkXG4gICAqIEByZXR1cm5zIEFXUzo6RUMyOjpJUEFNUG9vbENpZHJcbiAgICovXG4gIHB1YmxpYyBwcm92aXNpb25DaWRyKGlkOiBzdHJpbmcsIG9wdGlvbnM6IElwYW1Qb29sQ2lkclByb3Zpc2lvbmluZ09wdGlvbnMpOiBDZm5JUEFNUG9vbENpZHIge1xuICAgIGNvbnN0IGNpZHIgPSBuZXcgQ2ZuSVBBTVBvb2xDaWRyKHRoaXMsIGlkLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaXBhbVBvb2xJZDogdGhpcy5pcGFtUG9vbElkLFxuICAgIH0pO1xuICAgIHRoaXMuaXBhbUNpZHJzLnB1c2goY2lkcik7XG4gICAgcmV0dXJuIGNpZHI7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGN1c3RvbSBJcGFtIFNjb3BlLCBjdXN0b20gSVBBTSBzY29wZXMgY2FuIG9ubHkgYmUgcHJpdmF0ZVxuICogKGNhbiBiZSB1c2VkIGZvciBhZGRpbmcgY3VzdG9tIHNjb3BlcyB0byBhbiBleGlzdGluZyBJUEFNKVxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1zY29wZS5odG1sXG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OklQQU1TY29wZVxuICovXG5jbGFzcyBJcGFtU2NvcGUgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElJcGFtU2NvcGVCYXNlIHtcblxuICAvKipcbiAgICogU3RvcmVzIHRoZSByZWZlcmVuY2UgdG8gbmV3bHkgY3JlYXRlZCBSZXNvdXJjZVxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfaXBhbVNjb3BlOiBDZm5JUEFNU2NvcGU7XG5cbiAgLyoqXG4gICAqIElEIGZvciBSZXNvdXJjZSBJcGFtU2NvcGVcbiAgICogQGF0dHJpYnV0ZSBJcGFtU2NvcGVJZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNjb3BlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogUHJvcGVydGllcyB0byBjb25maWd1cmUgaXBhbSBzY29wZVxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogSXBhbVNjb3BlUHJvcHM7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byBzdGFjayBzY29wZSB0byBiZSBwYXNzZWQgdGhyb3VnaCBhZGRQb29sIG1ldGhvZCBpbm9yZGVyIHRvIGNyZWF0ZSBhIG5ldyBJcGFtUG9vbFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgc2NvcGUgdHlwZSBjYW4gYmUgZWl0aGVyIGRlZmF1bHQgb3IgY3VzdG9tXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NvcGVUeXBlOiBJcGFtU2NvcGVUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJcGFtU2NvcGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5faXBhbVNjb3BlID0gbmV3IENmbklQQU1TY29wZShzY29wZSwgJ0lwYW1TY29wZScsIHtcbiAgICAgIGlwYW1JZDogcHJvcHMuaXBhbUlkLFxuICAgIH0pO1xuICAgIHRoaXMuc2NvcGVJZCA9IHRoaXMuX2lwYW1TY29wZS5hdHRySXBhbVNjb3BlSWQ7XG4gICAgdGhpcy5zY29wZVR5cGUgPSBJcGFtU2NvcGVUeXBlLkNVU1RPTTtcbiAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBwb29sIHRvIHRoZSBJUEFNIHNjb3BlLlxuICAgKiBAZXh0ZXJuYWxcbiAgICovXG4gIGFkZFBvb2woaWQ6IHN0cmluZywgb3B0aW9uczogUG9vbE9wdGlvbnMpOiBJSXBhbVBvb2wge1xuICAgIHJldHVybiBjcmVhdGVJcGFtUG9vbCh0aGlzLnNjb3BlLCBpZCwgdGhpcy5wcm9wcywgb3B0aW9ucywgdGhpcy5zY29wZUlkKTtcbiAgfVxuXG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgSVBBTSBkZWZhdWx0IHNjb3Blcy5cbiAqL1xuY2xhc3MgSXBhbVNjb3BlQmFzZSBpbXBsZW1lbnRzIElJcGFtU2NvcGVCYXNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdCxcbiAgICByZWFkb25seSBzY29wZUlkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogSXBhbVNjb3BlUHJvcHMsXG4gICAgcmVhZG9ubHkgc2NvcGVUeXBlPzogSXBhbVNjb3BlVHlwZSxcbiAgKSB7XG4gICAgdGhpcy5zY29wZVR5cGUgPSBJcGFtU2NvcGVUeXBlLkRFRkFVTFQ7XG4gICAgaWYgKCFwcm9wcy5pcGFtU2NvcGVJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpcGFtU2NvcGVJZCBpcyByZXF1aXJlZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNjb3BlSWQgPSBwcm9wcy5pcGFtU2NvcGVJZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHBvb2wgdG8gdGhlIElQQU0gc2NvcGUuXG4gICAqIEBleHRlcm5hbFxuICAgKi9cbiAgYWRkUG9vbChpZDogc3RyaW5nLCBvcHRpb25zOiBQb29sT3B0aW9ucyk6IElJcGFtUG9vbCB7XG4gICAgcmV0dXJuIGNyZWF0ZUlwYW1Qb29sKHRoaXMuc2NvcGUsIGlkLCB0aGlzLnByb3BzLCBvcHRpb25zLCB0aGlzLnNjb3BlSWQpO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBuZXcgSVBBTSB3aXRoIGRlZmF1bHQgcHVibGljIGFuZCBwcml2YXRlIHNjb3BlXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXNjb3BlLmh0bWxcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6SVBBTVxuICovXG5leHBvcnQgY2xhc3MgSXBhbSBleHRlbmRzIFJlc291cmNlIHtcbiAgLyoqXG4gKiBQcm92aWRlcyBhY2Nlc3MgdG8gZGVmYXVsdCBwdWJsaWMgSVBBTSBzY29wZSB0aHJvdWdoIGFkZCBwb29sIG1ldGhvZC5cbiAqIFVzYWdlOiBUbyBhZGQgYW4gSXBhbSBQb29sIHRvIGEgZGVmYXVsdCBwdWJsaWMgc2NvcGVcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtc2NvcGUuaHRtbFxuICovXG4gIHB1YmxpYyByZWFkb25seSBwdWJsaWNTY29wZTogSUlwYW1TY29wZUJhc2U7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIGFjY2VzcyB0byBkZWZhdWx0IHByaXZhdGUgSVBBTSBzY29wZSB0aHJvdWdoIGFkZCBwb29sIG1ldGhvZC5cbiAgICogVXNhZ2U6IFRvIGFkZCBhbiBJcGFtIFBvb2wgdG8gYSBkZWZhdWx0IHByaXZhdGUgc2NvcGVcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1zY29wZS5odG1sXG4gICAqICovXG4gIHB1YmxpYyByZWFkb25seSBwcml2YXRlU2NvcGU6IElJcGFtU2NvcGVCYXNlO1xuXG4gIC8vIFJlc291cmNlIElQQU1cbiAgcHJpdmF0ZSByZWFkb25seSBfaXBhbTogQ2ZuSVBBTTtcbiAgLyoqXG4gICAqIEFjY2VzcyB0byBJcGFtIHJlc291cmNlIGlkIHRoYXQgY2FuIGJlIHVzZWQgbGF0ZXIgdG8gYWRkIGEgY3VzdG9tIHByaXZhdGUgc2NvcGUgdG8gdGhpcyBJUEFNXG4gICAqIEBhdHRyaWJ1dGUgSXBhbUlkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXBhbUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2Ygb3BlcmF0aW5nIHJlZ2lvbnMgZm9yIElQQU1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvcGVyYXRpbmdSZWdpb25zOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTGlzdCBvZiBzY29wZXMgY3JlYXRlZCB1bmRlciB0aGlzIElQQU1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzY29wZXM6IElJcGFtU2NvcGVCYXNlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IElwYW1Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAoIXByb3BzPy5vcGVyYXRpbmdSZWdpb24gJiYgIVN0YWNrLm9mKHRoaXMpLnJlZ2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgcHJvdmlkZSBhdCBsZWFzdCBvbmUgb3BlcmF0aW5nIHJlZ2lvbicpO1xuICAgIH1cblxuICAgIHRoaXMub3BlcmF0aW5nUmVnaW9ucyA9IHByb3BzPy5vcGVyYXRpbmdSZWdpb24gPz8gW1N0YWNrLm9mKHRoaXMpLnJlZ2lvbl07XG5cbiAgICB0aGlzLl9pcGFtID0gbmV3IENmbklQQU0odGhpcywgJ0lwYW0nLCB7XG4gICAgICBvcGVyYXRpbmdSZWdpb25zOiB0aGlzLm9wZXJhdGluZ1JlZ2lvbnMgPyB0aGlzLm9wZXJhdGluZ1JlZ2lvbnMubWFwKHJlZ2lvbiA9PiAoeyByZWdpb25OYW1lOiByZWdpb24gfSkpIDogW10sXG4gICAgfSk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMuX2lwYW07XG5cbiAgICB0aGlzLmlwYW1JZCA9IHRoaXMuX2lwYW0uYXR0cklwYW1JZDtcbiAgICB0aGlzLnB1YmxpY1Njb3BlID0gbmV3IElwYW1TY29wZUJhc2UodGhpcywgJ0RlZmF1bHRQdWJsaWNTY29wZScsIHtcbiAgICAgIGlwYW1PcGVyYXRpbmdSZWdpb25zOiB0aGlzLm9wZXJhdGluZ1JlZ2lvbnMsXG4gICAgICBpcGFtSWQ6IHRoaXMuX2lwYW0uYXR0cklwYW1JZCxcbiAgICAgIGlwYW1TY29wZUlkOiB0aGlzLl9pcGFtLmF0dHJQdWJsaWNEZWZhdWx0U2NvcGVJZCxcbiAgICB9KTtcbiAgICB0aGlzLnByaXZhdGVTY29wZSA9IG5ldyBJcGFtU2NvcGVCYXNlKHRoaXMsICdEZWZhdWx0UHJpdmF0ZVNjb3BlJywge1xuICAgICAgaXBhbU9wZXJhdGluZ1JlZ2lvbnM6IHRoaXMub3BlcmF0aW5nUmVnaW9ucyxcbiAgICAgIGlwYW1JZDogdGhpcy5faXBhbS5hdHRySXBhbUlkLFxuICAgICAgaXBhbVNjb3BlSWQ6IHRoaXMuX2lwYW0uYXR0clByaXZhdGVEZWZhdWx0U2NvcGVJZCxcbiAgICB9KTtcblxuICAgIHRoaXMuc2NvcGVzLnB1c2godGhpcy5wdWJsaWNTY29wZSwgdGhpcy5wcml2YXRlU2NvcGUpO1xuXG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gYWRkIGN1c3RvbSBzY29wZSB0byBhbiBleGlzdGluZyBJUEFNXG4gICAqIEN1c3RvbSBzY29wZXMgY2FuIG9ubHkgYmUgcHJpdmF0ZVxuICAgKi9cbiAgcHVibGljIGFkZFNjb3BlKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIG9wdGlvbnM6IElwYW1TY29wZU9wdGlvbnMpOiBJSXBhbVNjb3BlQmFzZSB7XG4gICAgY29uc3QgaXBhbVNjb3BlID0gbmV3IElwYW1TY29wZShzY29wZSwgaWQsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBpcGFtSWQ6IHRoaXMuaXBhbUlkLFxuICAgICAgaXBhbU9wZXJhdGluZ1JlZ2lvbnM6IHRoaXMub3BlcmF0aW5nUmVnaW9ucyxcbiAgICB9KTtcbiAgICB0aGlzLnNjb3Blcy5wdXNoKGlwYW1TY29wZSk7XG4gICAgcmV0dXJuIGlwYW1TY29wZTtcbiAgfVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGNyZWF0ZSBJcGFtUG9vbCB1bmRlciBzY29wZVxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlwYW1Qb29sKFxuICBzY29wZTogQ29uc3RydWN0LFxuICBpZDogc3RyaW5nLFxuICBzY29wZU9wdGlvbnM6IElwYW1TY29wZVByb3BzLFxuICBwb29sT3B0aW9uczogUG9vbE9wdGlvbnMsXG4gIHNjb3BlSWQ6IHN0cmluZyxcbik6IElwYW1Qb29sIHtcbiAgY29uc3QgaXNMb2NhbGVJbk9wZXJhdGluZ1JlZ2lvbnMgPSBzY29wZU9wdGlvbnMuaXBhbU9wZXJhdGluZ1JlZ2lvbnNcbiAgICA/IHNjb3BlT3B0aW9ucy5pcGFtT3BlcmF0aW5nUmVnaW9ucy5tYXAocmVnaW9uID0+ICh7IHJlZ2lvbk5hbWU6IHJlZ2lvbiB9KSlcbiAgICAgIC5zb21lKHJlZ2lvbiA9PiByZWdpb24ucmVnaW9uTmFtZSA9PT0gcG9vbE9wdGlvbnMubG9jYWxlKVxuICAgIDogZmFsc2U7XG5cbiAgaWYgKCFpc0xvY2FsZUluT3BlcmF0aW5nUmVnaW9ucykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHByb3ZpZGVkIGxvY2FsZSAnJHtwb29sT3B0aW9ucy5sb2NhbGV9JyBpcyBub3QgaW4gdGhlIG9wZXJhdGluZyByZWdpb25zLmApO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBJcGFtUG9vbChzY29wZSwgaWQsIHtcbiAgICBpcGFtUG9vbE5hbWU6IGlkLFxuICAgIGFkZHJlc3NGYW1pbHk6IHBvb2xPcHRpb25zLmFkZHJlc3NGYW1pbHksXG4gICAgaXB2NFByb3Zpc2lvbmVkQ2lkcnM6IHBvb2xPcHRpb25zLmlwdjRQcm92aXNpb25lZENpZHJzLFxuICAgIGlwYW1TY29wZUlkOiBzY29wZUlkLFxuICAgIGxvY2FsZTogcG9vbE9wdGlvbnMubG9jYWxlLFxuICAgIHB1YmxpY0lwU291cmNlOiBwb29sT3B0aW9ucy5wdWJsaWNJcFNvdXJjZSxcbiAgICBhd3NTZXJ2aWNlOiBwb29sT3B0aW9ucy5hd3NTZXJ2aWNlLFxuICB9KTtcbn1cblxuIl19