@fjall/components-infrastructure 0.87.17 → 0.87.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -3,6 +3,12 @@ interface IpamPoolIdProps {
|
|
|
3
3
|
region: string;
|
|
4
4
|
ownerId: string;
|
|
5
5
|
accountId: string;
|
|
6
|
+
/**
|
|
7
|
+
* Change this value to force a refresh of the IPAM pool ID.
|
|
8
|
+
* Useful when IPAM pools have been modified outside of this stack.
|
|
9
|
+
* @default "v1"
|
|
10
|
+
*/
|
|
11
|
+
refreshToken?: string;
|
|
6
12
|
}
|
|
7
13
|
export declare class IpamPoolId extends Construct {
|
|
8
14
|
constructor(scope: Construct, id: string, props: IpamPoolIdProps);
|
|
@@ -8,21 +8,25 @@ const customResources = require("aws-cdk-lib/custom-resources");
|
|
|
8
8
|
class IpamPoolId extends constructs_1.Construct {
|
|
9
9
|
constructor(scope, id, props) {
|
|
10
10
|
super(scope, id);
|
|
11
|
+
const refreshToken = props.refreshToken ?? "v1";
|
|
12
|
+
const physicalResourceId = customResources.PhysicalResourceId.of(`ipamPoolId-${props.region}-${refreshToken}`);
|
|
13
|
+
const sdkCall = {
|
|
14
|
+
service: "ec2",
|
|
15
|
+
action: "DescribeIpamPoolsCommand",
|
|
16
|
+
parameters: {
|
|
17
|
+
Filters: [
|
|
18
|
+
{
|
|
19
|
+
Name: "locale",
|
|
20
|
+
Values: [props.region]
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
physicalResourceId
|
|
25
|
+
};
|
|
11
26
|
const ipamPoolId = new awsCustomResource_1.AwsCustomResource(this, "IpamPoolIdResource", {
|
|
12
27
|
functionName: "ipamPoolId",
|
|
13
|
-
onCreate:
|
|
14
|
-
|
|
15
|
-
action: "DescribeIpamPoolsCommand",
|
|
16
|
-
parameters: {
|
|
17
|
-
Filters: [
|
|
18
|
-
{
|
|
19
|
-
Name: "locale",
|
|
20
|
-
Values: [props.region]
|
|
21
|
-
}
|
|
22
|
-
]
|
|
23
|
-
},
|
|
24
|
-
physicalResourceId: customResources.PhysicalResourceId.of("ipamPoolId")
|
|
25
|
-
},
|
|
28
|
+
onCreate: sdkCall,
|
|
29
|
+
onUpdate: sdkCall,
|
|
26
30
|
resourceType: "Custom::DescribeIpamPools"
|
|
27
31
|
});
|
|
28
32
|
// Create region-specific suffix for unique exports
|
|
@@ -36,4 +40,4 @@ class IpamPoolId extends constructs_1.Construct {
|
|
|
36
40
|
}
|
|
37
41
|
}
|
|
38
42
|
exports.IpamPoolId = IpamPoolId;
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhbVBvb2xJZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9jb25maWcvYXdzL2lwYW1Qb29sSWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXdDO0FBQ3hDLDJDQUF1QztBQUN2Qyx1RkFBb0Y7QUFDcEYsZ0VBQWdFO0FBY2hFLE1BQWEsVUFBVyxTQUFRLHNCQUFTO0lBQ3ZDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQztRQUNoRCxNQUFNLGtCQUFrQixHQUFHLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQzlELGNBQWMsS0FBSyxDQUFDLE1BQU0sSUFBSSxZQUFZLEVBQUUsQ0FDN0MsQ0FBQztRQUVGLE1BQU0sT0FBTyxHQUFHO1lBQ2QsT0FBTyxFQUFFLEtBQUs7WUFDZCxNQUFNLEVBQUUsMEJBQTBCO1lBQ2xDLFVBQVUsRUFBRTtnQkFDVixPQUFPLEVBQUU7b0JBQ1A7d0JBQ0UsSUFBSSxFQUFFLFFBQVE7d0JBQ2QsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztxQkFDdkI7aUJBQ0Y7YUFDRjtZQUNELGtCQUFrQjtTQUNuQixDQUFDO1FBRUYsTUFBTSxVQUFVLEdBQUcsSUFBSSxxQ0FBaUIsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7WUFDbkUsWUFBWSxFQUFFLFlBQVk7WUFDMUIsUUFBUSxFQUFFLE9BQU87WUFDakIsUUFBUSxFQUFFLE9BQU87WUFDakIsWUFBWSxFQUFFLDJCQUEyQjtTQUMxQyxDQUFDLENBQUM7UUFFSCxtREFBbUQ7UUFDbkQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXBELHdEQUF3RDtRQUN4RCxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQ3RDLEdBQUcsRUFBRSxhQUFhLEtBQUssQ0FBQyxTQUFTLEdBQUcsWUFBWSxFQUFFO1lBQ2xELEtBQUssRUFBRSxVQUFVLENBQUMsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUM7WUFDNUQsVUFBVSxFQUFFLGFBQWEsS0FBSyxDQUFDLFNBQVMsR0FBRyxZQUFZLEVBQUU7U0FDMUQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBeENELGdDQXdDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbk91dHB1dCB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEF3c0N1c3RvbVJlc291cmNlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2F3c0N1c3RvbVJlc291cmNlXCI7XG5pbXBvcnQgKiBhcyBjdXN0b21SZXNvdXJjZXMgZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcblxuaW50ZXJmYWNlIElwYW1Qb29sSWRQcm9wcyB7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICBvd25lcklkOiBzdHJpbmc7XG4gIGFjY291bnRJZDogc3RyaW5nO1xuICAvKipcbiAgICogQ2hhbmdlIHRoaXMgdmFsdWUgdG8gZm9yY2UgYSByZWZyZXNoIG9mIHRoZSBJUEFNIHBvb2wgSUQuXG4gICAqIFVzZWZ1bCB3aGVuIElQQU0gcG9vbHMgaGF2ZSBiZWVuIG1vZGlmaWVkIG91dHNpZGUgb2YgdGhpcyBzdGFjay5cbiAgICogQGRlZmF1bHQgXCJ2MVwiXG4gICAqL1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBJcGFtUG9vbElkIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElwYW1Qb29sSWRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCByZWZyZXNoVG9rZW4gPSBwcm9wcy5yZWZyZXNoVG9rZW4gPz8gXCJ2MVwiO1xuICAgIGNvbnN0IHBoeXNpY2FsUmVzb3VyY2VJZCA9IGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICBgaXBhbVBvb2xJZC0ke3Byb3BzLnJlZ2lvbn0tJHtyZWZyZXNoVG9rZW59YFxuICAgICk7XG5cbiAgICBjb25zdCBzZGtDYWxsID0ge1xuICAgICAgc2VydmljZTogXCJlYzJcIixcbiAgICAgIGFjdGlvbjogXCJEZXNjcmliZUlwYW1Qb29sc0NvbW1hbmRcIixcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgRmlsdGVyczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIE5hbWU6IFwibG9jYWxlXCIsXG4gICAgICAgICAgICBWYWx1ZXM6IFtwcm9wcy5yZWdpb25dXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkXG4gICAgfTtcblxuICAgIGNvbnN0IGlwYW1Qb29sSWQgPSBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJJcGFtUG9vbElkUmVzb3VyY2VcIiwge1xuICAgICAgZnVuY3Rpb25OYW1lOiBcImlwYW1Qb29sSWRcIixcbiAgICAgIG9uQ3JlYXRlOiBzZGtDYWxsLFxuICAgICAgb25VcGRhdGU6IHNka0NhbGwsXG4gICAgICByZXNvdXJjZVR5cGU6IFwiQ3VzdG9tOjpEZXNjcmliZUlwYW1Qb29sc1wiXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgcmVnaW9uLXNwZWNpZmljIHN1ZmZpeCBmb3IgdW5pcXVlIGV4cG9ydHNcbiAgICBjb25zdCByZWdpb25TdWZmaXggPSBwcm9wcy5yZWdpb24ucmVwbGFjZSgvLS9nLCBcIlwiKTtcblxuICAgIC8vIFN0b3JlcyB0aGUgSXBhbVBvb2xJZCBpbiBDZm5PdXRwdXQgd2l0aCByZWdpb24gc3VmZml4XG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBcIklwYW1Qb29sSWRPdXRwdXRcIiwge1xuICAgICAga2V5OiBgSXBhbVBvb2xJZCR7cHJvcHMuYWNjb3VudElkfSR7cmVnaW9uU3VmZml4fWAsXG4gICAgICB2YWx1ZTogaXBhbVBvb2xJZC5nZXRSZXNwb25zZUZpZWxkKFwiSXBhbVBvb2xzLjAuSXBhbVBvb2xJZFwiKSxcbiAgICAgIGV4cG9ydE5hbWU6IGBJcGFtUG9vbElkJHtwcm9wcy5hY2NvdW50SWR9JHtyZWdpb25TdWZmaXh9YFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -50,6 +50,7 @@ export declare class Payload extends Construct implements IPayload {
|
|
|
50
50
|
private _tagCache;
|
|
51
51
|
private _revalidationQueue;
|
|
52
52
|
private _cdn;
|
|
53
|
+
private _resolvedDomain;
|
|
53
54
|
constructor(scope: Construct, id: string, app: App, props: IPayloadProps);
|
|
54
55
|
private registerManifest;
|
|
55
56
|
private validateProps;
|
|
@@ -445,17 +445,22 @@ class Payload extends constructs_1.Construct {
|
|
|
445
445
|
this._cdn = this.app.addCdn(cdn_js_1.CdnFactory.build(`${this.pascalName}Cdn`, cdnProps));
|
|
446
446
|
}
|
|
447
447
|
resolveDomainConfig() {
|
|
448
|
+
if (this._resolvedDomain)
|
|
449
|
+
return this._resolvedDomain;
|
|
448
450
|
if (this.props.domain) {
|
|
449
|
-
|
|
451
|
+
this._resolvedDomain = this.resolveSimpleDomain();
|
|
450
452
|
}
|
|
451
|
-
if (this.props.cdn?.domainNames?.length) {
|
|
452
|
-
|
|
453
|
+
else if (this.props.cdn?.domainNames?.length) {
|
|
454
|
+
this._resolvedDomain = this.resolveAdvancedDomain();
|
|
453
455
|
}
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
456
|
+
else {
|
|
457
|
+
this._resolvedDomain = {
|
|
458
|
+
domainNames: undefined,
|
|
459
|
+
certificate: undefined,
|
|
460
|
+
hostedZone: undefined
|
|
461
|
+
};
|
|
462
|
+
}
|
|
463
|
+
return this._resolvedDomain;
|
|
459
464
|
}
|
|
460
465
|
resolveSimpleDomain() {
|
|
461
466
|
const domain = this.props.domain;
|
|
@@ -485,7 +490,11 @@ class Payload extends constructs_1.Construct {
|
|
|
485
490
|
const { hostedZone } = this.resolveDomainConfig();
|
|
486
491
|
if (!hostedZone)
|
|
487
492
|
return;
|
|
488
|
-
|
|
493
|
+
// Create the DNS record in the CDN stack (not the Compute stack where this
|
|
494
|
+
// Payload construct lives) to avoid a cyclic dependency: CDN references the
|
|
495
|
+
// server Lambda FunctionUrl, so Compute cannot also depend on CDN.
|
|
496
|
+
const cdnStack = this.app.getDefaultCdnStack().getStack();
|
|
497
|
+
new aws_route53_1.ARecord(cdnStack, `${this.pascalName}AliasRecord`, {
|
|
489
498
|
zone: hostedZone,
|
|
490
499
|
recordName: this.props.domain,
|
|
491
500
|
target: aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.CloudFrontTarget(this._cdn.getDistribution()))
|
|
@@ -523,4 +532,4 @@ class Payload extends constructs_1.Construct {
|
|
|
523
532
|
}
|
|
524
533
|
}
|
|
525
534
|
exports.Payload = Payload;
|
|
526
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvcGF5bG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7OztBQUVILDJDQUF1QztBQUN2QyxtQ0FBcUM7QUFDckMsdURBTWdDO0FBQ2hDLCtFQUk0QztBQUM1Qyx5REFBNEU7QUFDNUUseUVBQW1FO0FBS25FLCtDQU91QjtBQUN2Qiw2Q0FLc0I7QUFDdEIsNkNBSXNCO0FBQ3RCLGlEQUl3QjtBQUN4QixxQ0FBb0U7QUFDcEUseUVBQThEO0FBRTlELE1BQU0sZ0JBQWdCLEdBQUc7SUFDdkIscUZBQXFGO0lBQ3JGLE1BQU0sRUFBRSxPQUFPO0lBQ2YsUUFBUSxFQUFFO1FBQ1IsSUFBSSxFQUFFLFVBQW1CO1FBQ3pCLGdCQUFnQixFQUFFLENBQUM7UUFDbkIsbUJBQW1CLEVBQUUsSUFBSTtLQUMxQjtJQUNELE9BQU8sRUFBRTtRQUNQLGFBQWEsRUFBRSxJQUFJO1FBQ25CLGNBQWMsRUFBRSxFQUFFO1FBQ2xCLFlBQVksRUFBRSxJQUFJO1FBQ2xCLGFBQWEsRUFBRSxFQUFFO1FBQ2pCLG1CQUFtQixFQUFFLEdBQUc7UUFDeEIsb0JBQW9CLEVBQUUsR0FBRztLQUMxQjtJQUNELEtBQUssRUFBRTtRQUNMLGVBQWUsRUFBRSxRQUFRLENBQUMsU0FBUztLQUNwQztJQUNELEtBQUssRUFBRTtRQUNMLE1BQU0sRUFBRSxpQkFBaUI7UUFDekIsS0FBSyxFQUFFLGVBQWU7UUFDdEIsR0FBRyxFQUFFLFFBQVE7UUFDYixLQUFLLEVBQUUsVUFBVTtLQUNsQjtDQUNPLENBQUM7QUFFWDs7R0FFRztBQUNILFNBQVMsbUJBQW1CLENBQUMsSUFBWTtJQUN2QyxPQUFPLElBQUk7U0FDUixXQUFXLEVBQUU7U0FDYixPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztTQUNsQixPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsWUFBWSxDQUFDLElBQVk7SUFDaEMsT0FBTyxJQUFJO1NBQ1IsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUM5QyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxNQUFjO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQy9ELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGVBQWUsQ0FBQyxPQUFzQixFQUFFLElBQVk7SUFDM0QsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2pDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNSLE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxJQUFJLHFDQUFxQztZQUMxQyxnRUFBZ0UsQ0FDbkUsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUE4QkQ7O0dBRUc7QUFDSCxTQUFTLG1CQUFtQixDQUMxQixNQUVhLEVBQ2IsUUFBNkM7SUFFN0MsT0FBTztRQUNMLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxJQUFJLFFBQVEsQ0FBQyxNQUFNO1FBQ2pELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxJQUFJLFFBQVEsQ0FBQyxPQUFPO1FBQzVDLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxvQkFBb0I7S0FDbkQsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxPQUFRLFNBQVEsc0JBQVM7SUFtQnBDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsR0FBUSxFQUFFLEtBQW9CO1FBQ3RFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFuQkgsZ0JBQVcsR0FBRyxTQUFrQixDQUFDO1FBcUIvQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUEsb0JBQVcsRUFBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFckQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXJCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLE1BQU0sZUFBZSxHQUFvQjtZQUN2QyxJQUFJLEVBQUUsU0FBUztZQUNmLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUk7WUFDckIsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE1BQU07U0FDaEMsQ0FBQztRQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLGFBQWE7UUFDbkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQzNDLElBQUksUUFBUSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDaEMsaUNBQVcsQ0FBQyxJQUFJLENBQ2QscUJBQXFCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSw2Q0FBNkM7Z0JBQy9FLGtFQUFrRSxDQUNyRSxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFTyxjQUFjO1FBQ3BCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUMzQyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFFckUsSUFBSSxDQUFDLFNBQVM7WUFDWixZQUFZLEtBQUssUUFBUTtnQkFDdkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVPLHNCQUFzQixDQUM1QixRQUFnRDtRQUVoRCxPQUFPO1lBQ0wsWUFBWSxFQUNWLFFBQVEsQ0FBQyxZQUFZLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDL0QsY0FBYyxFQUFFLFFBQVEsQ0FBQyxjQUFjLElBQUksWUFBWTtZQUN2RCxlQUFlLEVBQ2IsUUFBUSxDQUFDLGVBQWUsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCO1lBQ3hFLGtCQUFrQixFQUNoQixRQUFRLENBQUMsa0JBQWtCO2dCQUMzQixnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsbUJBQW1CO1lBQy9DLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxrQkFBa0I7WUFDL0MsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO1lBQ25CLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxtQkFBbUI7WUFDakQsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO1lBQ3JCLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVztZQUNqQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsa0JBQWtCO1lBQy9DLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxnQkFBZ0I7U0FDNUMsQ0FBQztJQUNKLENBQUM7SUFFTyxvQkFBb0IsQ0FDMUIsUUFBZ0Q7UUFFaEQsTUFBTSxXQUFXLEdBQXdCO1lBQ3ZDLElBQUksRUFBRSxRQUFRO1lBQ2QsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDO1lBQ3hDLGFBQWEsRUFBRSxRQUFRLENBQUMsYUFBYTtZQUNyQyxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQStDO1lBQ3BFLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTtZQUN2QixPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU87WUFDekIsY0FBYyxFQUFFLFFBQVEsQ0FBQyxjQUFjO1lBQ3ZDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxrQkFBa0I7WUFDL0MsMEJBQTBCLEVBQUUsUUFBUSxDQUFDLDBCQUEwQjtTQUNoRSxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FDekIsNkJBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQ2pFLENBQUM7SUFDSixDQUFDO0lBRU8sc0JBQXNCLENBQzVCLFFBQWdEO1FBRWhELE1BQU0sYUFBYSxHQUEwQjtZQUMzQyxJQUFJLEVBQUUsVUFBVTtZQUNoQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUM7WUFDeEMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLGtCQUFrQixJQUFJLEtBQUs7WUFDeEQsWUFBWSxFQUFFLFFBQVEsQ0FBQyxZQUFZO1lBQ25DLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxnQkFBZ0I7WUFDM0MsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO1lBQ3pCLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVztZQUNqQyxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQWlEO1NBQ3ZFLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUN6Qiw2QkFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FDbkUsQ0FBQztJQUNKLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ3RELE1BQU0sV0FBVyxHQUFtQjtZQUNsQyxVQUFVLEVBQUUsU0FBUztZQUNyQixTQUFTLEVBQUUsWUFBWSxDQUFDLFNBQVMsSUFBSSxLQUFLO1lBQzFDLFVBQVUsRUFBRTtnQkFDVixNQUFNLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLG9CQUFvQjtnQkFDdEQsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsWUFBWSxFQUFFO29CQUNaLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsZUFBZTtvQkFDOUMsU0FBUyxFQUFFLElBQUk7aUJBQ2hCO2FBQ0Y7U0FDRixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FDeEIsMkJBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQzlELENBQUM7SUFDSixDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDcEQsTUFBTSxVQUFVLEdBQW1CO1lBQ2pDLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLFNBQVMsRUFBRSxXQUFXLENBQUMsU0FBUyxJQUFJLEtBQUs7WUFDekMsVUFBVSxFQUFFO2dCQUNWLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sbUJBQW1CO2dCQUNyRCxLQUFLLEVBQUUsS0FBSyxDQUFDLDRCQUE0QjthQUMxQztTQUNGLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUN4QiwyQkFBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FDNUQsQ0FBQztJQUNKLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNwRCxNQUFNLFVBQVUsR0FBbUI7WUFDakMsVUFBVSxFQUFFLFNBQVM7WUFDckIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTLElBQUksS0FBSztTQUMxQyxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FDeEIsMkJBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQzVELENBQUM7SUFDSixDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLGFBQWEsR0FBMEI7WUFDM0MsSUFBSSxFQUFFLFVBQVU7WUFDaEIsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO1lBQ3hDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtZQUNwQyxzQkFBc0IsRUFBRTtnQkFDdEI7b0JBQ0UsU0FBUyxFQUFFLFlBQVk7b0JBQ3ZCLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtvQkFDekMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO2lCQUM5QzthQUNGO1NBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQ25DLDZCQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUVPLHVCQUF1QjtRQUM3QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsSUFBSSxFQUFFLENBQUM7UUFDbEUsTUFBTSxtQkFBbUIsR0FDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU87WUFDekMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDO1FBRWhELG1DQUFtQztRQUNuQyxJQUFJLFNBQXlDLENBQUM7UUFDOUMsSUFBSSxXQUFXLENBQUMsZUFBZSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDeEIsQ0FBQzthQUFNLElBQUksV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZDLFNBQVMsR0FBRztnQkFDVixPQUFPLEVBQUUsV0FBVyxDQUFDLGVBQWUsQ0FBQyxPQUFPLElBQUksSUFBSTtnQkFDcEQsZUFBZSxFQUFFLFdBQVcsQ0FBQyxlQUFlLENBQUMsZUFBZSxJQUFJLENBQUM7YUFDbEUsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sU0FBUyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDcEQsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFnQjtZQUM5QixJQUFJLEVBQUUsT0FBTztZQUNiLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxpQkFBaUIsSUFBSSxtQkFBbUI7WUFDdkUsc0JBQXNCLEVBQUUsV0FBVyxDQUFDLHNCQUFzQjtZQUMxRCxjQUFjLEVBQUUsV0FBVyxDQUFDLGNBQWM7WUFDMUMseUJBQXlCLEVBQUUsSUFBSTtZQUMvQixlQUFlLEVBQUUsU0FBUztTQUMzQixDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUM3QywrQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQ3JFLENBQUM7SUFDSixDQUFDO0lBRU8scUJBQXFCO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLG1CQUFtQixDQUN2RSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQzFCO1lBQ0UsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxhQUFhO1lBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsY0FBYztTQUNqRCxDQUNGLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBb0I7WUFDbkMsSUFBSSxFQUFFLFFBQVE7WUFDZCxVQUFVLEVBQUUsTUFBTTtZQUNsQixJQUFJLEVBQUUsaUJBQUksQ0FBQyxTQUFTLENBQ2xCLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxzQ0FBc0MsQ0FDakU7WUFDRCxPQUFPLEVBQUUsZUFBZTtZQUN4QixPQUFPLEVBQUUsb0JBQU8sQ0FBQyxXQUFXO1lBQzVCLFlBQVksRUFBRSx5QkFBWSxDQUFDLE1BQU07WUFDakMsVUFBVTtZQUNWLE9BQU87WUFDUCxvQkFBb0I7WUFDcEIsV0FBVyxFQUFFO2dCQUNYLFFBQVEsRUFBRSxnQ0FBbUIsQ0FBQyxJQUFJO2dCQUNsQyxVQUFVLEVBQUUsdUJBQVUsQ0FBQyxlQUFlO2FBQ3ZDO1lBQ0QsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUM3QixhQUFhLEVBQUU7Z0JBQ2IsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVM7cUJBQzlCLGNBQWMsRUFBRTtxQkFDaEIsU0FBUyxDQUFDLFVBQVUsQ0FBQztnQkFDeEIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO2FBQ3pFO1lBQ0QsV0FBVyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtTQUMzQyxDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQ2hDLDJCQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUM5RCxDQUFDO1FBRUYsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsTUFBTSxPQUFPLEdBQTJCO1lBQ3RDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRTtZQUMvQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUU7WUFDM0MsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFO1lBQy9DLFlBQVksRUFBRSxNQUFNO1lBQ3BCLGlCQUFpQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFO1lBQ3BELG1CQUFtQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLFdBQVc7WUFDbkQsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUU7WUFDakQsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRTtZQUM3RCx5QkFBeUIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxXQUFXO1lBQ3pELGlCQUFpQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFO1lBQ3BELGNBQWMsRUFBRSxJQUFJLENBQUMsYUFBYTtTQUNuQyxDQUFDO1FBRUYsZ0RBQWdEO1FBQ2hELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsT0FBTyxDQUFDLHNCQUFzQixHQUFHLFdBQVcsWUFBWSxFQUFFLENBQUM7UUFDN0QsQ0FBQztRQUVELE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVPLHNCQUFzQixDQUFDLE1BQXFCO1FBQ2xELE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLG1CQUFtQixDQUN2RSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFDckM7WUFDRSxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFlBQVk7WUFDN0MsT0FBTyxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxhQUFhO1NBQ2hELENBQ0YsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFvQjtZQUNsQyxJQUFJLEVBQUUsUUFBUTtZQUNkLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLElBQUksRUFBRSxpQkFBSSxDQUFDLFNBQVMsQ0FDbEIsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLHlDQUF5QyxDQUNwRTtZQUNELE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7WUFDNUIsWUFBWSxFQUFFLHlCQUFZLENBQUMsTUFBTTtZQUNqQyxVQUFVO1lBQ1YsT0FBTztZQUNQLG9CQUFvQjtZQUNwQixXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsZ0NBQW1CLENBQUMsSUFBSSxFQUFFO1lBQ25ELFdBQVcsRUFBRTtnQkFDWCxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUU7Z0JBQy9DLGlCQUFpQixFQUFFLFNBQVM7YUFDN0I7U0FDRixDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQy9CLDJCQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsbUJBQW1CLEVBQUUsVUFBVSxDQUFDLENBQ3hFLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFNUMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sd0JBQXdCO1FBQzlCLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsbUJBQW1CLENBQ3ZFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFlBQVksRUFDaEM7WUFDRSxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLG1CQUFtQjtZQUNwRCxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLG9CQUFvQjtTQUN2RCxDQUNGLENBQUM7UUFFRixNQUFNLGlCQUFpQixHQUFvQjtZQUN6QyxJQUFJLEVBQUUsUUFBUTtZQUNkLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLElBQUksRUFBRSxpQkFBSSxDQUFDLFNBQVMsQ0FDbEIsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLG1DQUFtQyxDQUM5RDtZQUNELE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7WUFDNUIsWUFBWSxFQUFFLHlCQUFZLENBQUMsTUFBTTtZQUNqQyxVQUFVO1lBQ1YsT0FBTztZQUNQLG9CQUFvQjtZQUNwQixXQUFXLEVBQUU7Z0JBQ1gsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUU7Z0JBQ2pELGlCQUFpQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFO2FBQ3JEO1NBQ0YsQ0FBQztRQUVGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUN0QywyQkFBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxDQUMxRSxDQUFDO1FBRUYsTUFBTSxrQkFBa0IsR0FBRyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM1RCxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDdkUsU0FBUyxFQUFFLENBQUM7U0FDYixDQUFDLENBQUM7UUFFSCxNQUFNLG9CQUFvQixHQUFHLGVBQWUsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFbkUsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVPLFNBQVM7UUFDZixNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRWhFLE1BQU0sUUFBUSxHQUFrQjtZQUM5QixVQUFVLEVBQUUsTUFBTTtZQUNsQixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDcEIsV0FBVyxFQUFFLGtCQUFrQjtZQUMvQixxQkFBcUIsRUFBRSxLQUFLO1lBQzVCLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsVUFBVSxFQUFFLGdCQUFnQjtZQUM1QixXQUFXO1lBQ1gsV0FBVztZQUNYLFVBQVUsRUFBRTtnQkFDVjtvQkFDRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE1BQU07b0JBQzFDLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYTtvQkFDMUIsV0FBVyxFQUFFLG1CQUFtQjtpQkFDakM7Z0JBQ0Q7b0JBQ0UsV0FBVyxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxLQUFLO29CQUN6QyxNQUFNLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtvQkFDL0IsV0FBVyxFQUFFLG1CQUFtQjtpQkFDakM7Z0JBQ0Q7b0JBQ0UsV0FBVyxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHO29CQUN2QyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87b0JBQ3BCLFdBQVcsRUFBRSxrQkFBa0I7b0JBQy9CLGNBQWMsRUFBRSxLQUFLO2lCQUN0QjtnQkFDRDtvQkFDRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUs7b0JBQ3pDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDcEIsV0FBVyxFQUFFLGtCQUFrQjtvQkFDL0IsY0FBYyxFQUFFLEtBQUs7aUJBQ3RCO2dCQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDO2FBQ3RDO1NBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQ3pCLG1CQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUNwRCxDQUFDO0lBQ0osQ0FBQztJQUVPLG1CQUFtQjtRQUt6QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNwQyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDeEMsT0FBTyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUN0QyxDQUFDO1FBRUQsT0FBTztZQUNMLFdBQVcsRUFBRSxTQUFTO1lBQ3RCLFdBQVcsRUFBRSxTQUFTO1lBQ3RCLFVBQVUsRUFBRSxTQUFTO1NBQ3RCLENBQUM7SUFDSixDQUFDO0lBRU8sbUJBQW1CO1FBS3pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTyxDQUFDO1FBQ2xDLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTdDLE1BQU0sVUFBVSxHQUFHLHdCQUFVLENBQUMsVUFBVSxDQUN0QyxJQUFJLEVBQ0osR0FBRyxJQUFJLENBQUMsVUFBVSxZQUFZLEVBQzlCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUMzQixDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsSUFBSSxvQ0FBVyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLGFBQWEsRUFBRTtZQUN6RSxVQUFVLEVBQUUsTUFBTTtZQUNsQixVQUFVLEVBQUUsOENBQXFCLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztTQUN0RCxDQUFDLENBQUM7UUFFSCxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFFTyxxQkFBcUI7UUFLM0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFJLENBQUM7UUFDbEMsTUFBTSxXQUFXLEdBQ2YsU0FBUyxDQUFDLFdBQVc7WUFDckIsQ0FBQyxTQUFTLENBQUMsY0FBYztnQkFDdkIsQ0FBQyxDQUFDLG9DQUFXLENBQUMsa0JBQWtCLENBQzVCLElBQUksRUFDSixHQUFHLElBQUksQ0FBQyxVQUFVLGFBQWEsRUFDL0IsU0FBUyxDQUFDLGNBQWMsQ0FDekI7Z0JBQ0gsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWpCLE9BQU87WUFDTCxXQUFXLEVBQUUsU0FBUyxDQUFDLFdBQVk7WUFDbkMsV0FBVztZQUNYLFVBQVUsRUFBRSxTQUFTO1NBQ3RCLENBQUM7SUFDSixDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUUvQixNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBRXhCLElBQUkscUJBQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxhQUFhLEVBQUU7WUFDakQsSUFBSSxFQUFFLFVBQVU7WUFDaEIsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUM3QixNQUFNLEVBQUUsMEJBQVksQ0FBQyxTQUFTLENBQzVCLElBQUksc0NBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUNsRDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUEzaUJELDBCQTJpQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBheWxvYWQgQ01TIFBhdHRlcm4uXG4gKlxuICogQSBoaWdoLWxldmVsIHBhdHRlcm4gdGhhdCBjcmVhdGVzIGFsbCBpbmZyYXN0cnVjdHVyZSByZXF1aXJlZCBmb3IgYVxuICogUGF5bG9hZCBDTVMgZGVwbG95bWVudCB1c2luZyBPcGVuTmV4dC5cbiAqXG4gKiBSZXNvdXJjZXMgY3JlYXRlZDpcbiAqIC0gUkRTIFBvc3RncmVTUUwgZGF0YWJhc2UgKEF1cm9yYSBvciBJbnN0YW5jZSlcbiAqIC0gMyBTMyBidWNrZXRzIChhc3NldHMsIGNhY2hlLCBtZWRpYSlcbiAqIC0gRHluYW1vREIgdGFibGUgKHRhZyBjYWNoZSB3aXRoIEdTSSlcbiAqIC0gU1FTIEZJRk8gcXVldWUgKHJldmFsaWRhdGlvbilcbiAqIC0gMyBMYW1iZGEgZnVuY3Rpb25zIChzZXJ2ZXIsIGltYWdlIG9wdGltaXNhdGlvbiwgcmV2YWxpZGF0aW9uKVxuICogLSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvblxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwYXlsb2FkID0gYXBwLmFkZFBhdHRlcm4oUGF0dGVybkZhY3RvcnkuYnVpbGQoXCJQYXlsb2FkQXBwXCIsIHtcbiAqICAgdHlwZTogXCJwYXlsb2FkXCIsXG4gKiAgIG5hbWU6IFwibXktY21zXCJcbiAqIH0pKTtcbiAqXG4gKiAvLyBFc2NhcGUgaGF0Y2hlc1xuICogcGF5bG9hZC5nZXREYXRhYmFzZSgpLmdyYW50Q29ubmVjdChvdGhlckxhbWJkYSk7XG4gKi9cblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHtcbiAgQ29kZSxcbiAgUnVudGltZSxcbiAgQXJjaGl0ZWN0dXJlLFxuICBGdW5jdGlvblVybEF1dGhUeXBlLFxuICB0eXBlIElGdW5jdGlvblxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHtcbiAgQ2VydGlmaWNhdGUsXG4gIENlcnRpZmljYXRlVmFsaWRhdGlvbixcbiAgdHlwZSBJQ2VydGlmaWNhdGVcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXJcIjtcbmltcG9ydCB7IEhvc3RlZFpvbmUsIEFSZWNvcmQsIFJlY29yZFRhcmdldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1M1wiO1xuaW1wb3J0IHsgQ2xvdWRGcm9udFRhcmdldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1My10YXJnZXRzXCI7XG5cbmltcG9ydCB0eXBlIEFwcCBmcm9tIFwiLi4vLi4vYXBwLmpzXCI7XG5pbXBvcnQgeyB0eXBlIElQYXlsb2FkUHJvcHMsIHR5cGUgSVBheWxvYWQgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IHR5cGUgTWFuaWZlc3RQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL21hbmlmZXN0V3JpdGVyLmpzXCI7XG5pbXBvcnQge1xuICB0eXBlIFJlbGF0aW9uYWxEYXRhYmFzZSxcbiAgdHlwZSBEeW5hbW9EQkRhdGFiYXNlLFxuICBEYXRhYmFzZUZhY3RvcnksXG4gIHR5cGUgQXVyb3JhRGF0YWJhc2VQcm9wcyxcbiAgdHlwZSBJbnN0YW5jZURhdGFiYXNlUHJvcHMsXG4gIHR5cGUgRHluYW1vREJEYXRhYmFzZVByb3BzXG59IGZyb20gXCIuL2RhdGFiYXNlLmpzXCI7XG5pbXBvcnQge1xuICBDb21wdXRlRmFjdG9yeSxcbiAgdHlwZSBMYW1iZGFDb21wdXRlLFxuICBJbnZva2VNb2RlLFxuICB0eXBlIENvZGVMYW1iZGFQcm9wc1xufSBmcm9tIFwiLi9jb21wdXRlLmpzXCI7XG5pbXBvcnQge1xuICBTdG9yYWdlRmFjdG9yeSxcbiAgdHlwZSBQcml2YXRlU3RvcmFnZSxcbiAgdHlwZSBQcml2YXRlUzNQcm9wc1xufSBmcm9tIFwiLi9zdG9yYWdlLmpzXCI7XG5pbXBvcnQge1xuICBNZXNzYWdpbmdGYWN0b3J5LFxuICB0eXBlIFF1ZXVlTWVzc2FnaW5nLFxuICB0eXBlIElRdWV1ZVByb3BzXG59IGZyb20gXCIuL21lc3NhZ2luZy5qc1wiO1xuaW1wb3J0IHsgQ2RuRmFjdG9yeSwgdHlwZSBDZG4sIHR5cGUgU21hcnRDZG5Qcm9wcyB9IGZyb20gXCIuL2Nkbi5qc1wiO1xuaW1wb3J0IHsgRmphbGxMb2dnZXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdmFsaWRhdGlvbkxvZ2dlci5qc1wiO1xuXG5jb25zdCBQQVlMT0FEX0RFRkFVTFRTID0ge1xuICAvKiogUGF0aCB0byBPcGVuTmV4dCBvdXRwdXQgcmVsYXRpdmUgdG8gYXBwIGZvbGRlciAoQ0RLIHJ1bnMgZnJvbSBmamFsbC88YXBwbmFtZT4pICovXG4gIFNPVVJDRTogXCIuLi8uLlwiLFxuICBEQVRBQkFTRToge1xuICAgIFRZUEU6IFwiSW5zdGFuY2VcIiBhcyBjb25zdCxcbiAgICBCQUNLVVBfUkVURU5USU9OOiA3LFxuICAgIERFTEVUSU9OX1BST1RFQ1RJT046IHRydWVcbiAgfSxcbiAgQ09NUFVURToge1xuICAgIFNFUlZFUl9NRU1PUlk6IDE1MzYsXG4gICAgU0VSVkVSX1RJTUVPVVQ6IDMwLFxuICAgIElNQUdFX01FTU9SWTogMTUzNixcbiAgICBJTUFHRV9USU1FT1VUOiAzMCxcbiAgICBSRVZBTElEQVRJT05fTUVNT1JZOiA3NjgsXG4gICAgUkVWQUxJREFUSU9OX1RJTUVPVVQ6IDMwMFxuICB9LFxuICBDQUNIRToge1xuICAgIE1BWF9BR0VfU0VDT05EUzogMzE1MzYwMDAgLy8gMSB5ZWFyXG4gIH0sXG4gIFBBVEhTOiB7XG4gICAgU1RBVElDOiBcIi9fbmV4dC9zdGF0aWMvKlwiLFxuICAgIElNQUdFOiBcIi9fbmV4dC9pbWFnZSpcIixcbiAgICBBUEk6IFwiL2FwaS8qXCIsXG4gICAgQURNSU46IFwiL2FkbWluLypcIlxuICB9XG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIENvbnZlcnQgYSBuYW1lIHRvIGEgdmFsaWQgZGF0YWJhc2UgbmFtZSAoc25ha2VfY2FzZSwgYWxwaGFudW1lcmljIG9ubHkpLlxuICovXG5mdW5jdGlvbiB0b1ZhbGlkRGF0YWJhc2VOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBuYW1lXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAucmVwbGFjZSgvLS9nLCBcIl9cIilcbiAgICAucmVwbGFjZSgvW15hLXowLTlfXS9nLCBcIlwiKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgbmFtZSB0byBQYXNjYWxDYXNlIGZvciBjb25zdHJ1Y3QgSURzLlxuICovXG5mdW5jdGlvbiB0b1Bhc2NhbENhc2UobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWVcbiAgICAucmVwbGFjZSgvWy1fXSguKS9nLCAoXywgYykgPT4gYy50b1VwcGVyQ2FzZSgpKVxuICAgIC5yZXBsYWNlKC9eLi8sIChjKSA9PiBjLnRvVXBwZXJDYXNlKCkpO1xufVxuXG4vKipcbiAqIEV4dHJhY3Qgcm9vdCBkb21haW4gZnJvbSBhIGZ1bGwgZG9tYWluIG5hbWUuXG4gKiBlLmcuLCBcImNtcy5leGFtcGxlLmNvbVwiIC0+IFwiZXhhbXBsZS5jb21cIlxuICovXG5mdW5jdGlvbiBleHRyYWN0Um9vdERvbWFpbihkb21haW46IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnRzID0gZG9tYWluLnNwbGl0KFwiLlwiKTtcbiAgcmV0dXJuIHBhcnRzLmxlbmd0aCA+IDIgPyBwYXJ0cy5zbGljZSgtMikuam9pbihcIi5cIikgOiBkb21haW47XG59XG5cbi8qKlxuICogU2FmZWx5IGdldCB0aGUgdW5kZXJseWluZyBMYW1iZGEgZnVuY3Rpb24gZnJvbSBhIGNvbXB1dGUgcmVzb3VyY2UuXG4gKiBUaHJvd3MgYSBjbGVhciBlcnJvciBpZiB0aGUgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZUZ1bmN0aW9uKGNvbXB1dGU6IExhbWJkYUNvbXB1dGUsIG5hbWU6IHN0cmluZyk6IElGdW5jdGlvbiB7XG4gIGNvbnN0IGZuID0gY29tcHV0ZS5nZXRGdW5jdGlvbigpO1xuICBpZiAoIWZuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7bmFtZX0gTGFtYmRhIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuIGAgK1xuICAgICAgICBcIlRoaXMgaW5kaWNhdGVzIGFuIGludGVybmFsIGVycm9yIGluIGNvbXB1dGUgcmVzb3VyY2UgY3JlYXRpb24uXCJcbiAgICApO1xuICB9XG4gIHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBCYXNlIGRhdGFiYXNlIHByb3BlcnRpZXMgc2hhcmVkIGJldHdlZW4gQXVyb3JhIGFuZCBJbnN0YW5jZS5cbiAqIFVzZXMgUGljayB0byBleHRyYWN0IGNvbW1vbiBwcm9wZXJ0aWVzIGZyb20gdGhlIGRhdGFiYXNlIGNvbmZpZy5cbiAqL1xudHlwZSBCYXNlRGF0YWJhc2VQcm9wcyA9IFBpY2s8XG4gIEluc3RhbmNlRGF0YWJhc2VQcm9wcyxcbiAgfCBcImRhdGFiYXNlTmFtZVwiXG4gIHwgXCJkYXRhYmFzZUVuZ2luZVwiXG4gIHwgXCJiYWNrdXBSZXRlbnRpb25cIlxuICB8IFwiZGVsZXRpb25Qcm90ZWN0aW9uXCJcbiAgfCBcInB1YmxpY2x5QWNjZXNzaWJsZVwiXG4gIHwgXCJwb3J0XCJcbiAgfCBcInBlcmZvcm1hbmNlSW5zaWdodHNcIlxuICB8IFwicHJveHlcIlxuICB8IFwiY3JlZGVudGlhbHNcIlxuICB8IFwic25hcHNob3RJZGVudGlmaWVyXCJcbiAgfCBcInNuYXBzaG90VXNlcm5hbWVcIlxuPjtcblxuLyoqXG4gKiBMYW1iZGEgY29uZmlndXJhdGlvbiB3aXRoIHJlc29sdmVkIGRlZmF1bHRzLlxuICovXG5pbnRlcmZhY2UgUmVzb2x2ZWRMYW1iZGFDb25maWcge1xuICBtZW1vcnlTaXplOiBudW1iZXI7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgZXBoZW1lcmFsU3RvcmFnZVNpemU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRXh0cmFjdCBMYW1iZGEgY29uZmlnIGZyb20gcHJvcHMgd2l0aCBkZWZhdWx0cy5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUxhbWJkYUNvbmZpZyhcbiAgY29uZmlnOlxuICAgIHwgeyBtZW1vcnlTaXplPzogbnVtYmVyOyB0aW1lb3V0PzogbnVtYmVyOyBlcGhlbWVyYWxTdG9yYWdlU2l6ZT86IG51bWJlciB9XG4gICAgfCB1bmRlZmluZWQsXG4gIGRlZmF1bHRzOiB7IG1lbW9yeTogbnVtYmVyOyB0aW1lb3V0OiBudW1iZXIgfVxuKTogUmVzb2x2ZWRMYW1iZGFDb25maWcge1xuICByZXR1cm4ge1xuICAgIG1lbW9yeVNpemU6IGNvbmZpZz8ubWVtb3J5U2l6ZSA/PyBkZWZhdWx0cy5tZW1vcnksXG4gICAgdGltZW91dDogY29uZmlnPy50aW1lb3V0ID8/IGRlZmF1bHRzLnRpbWVvdXQsXG4gICAgZXBoZW1lcmFsU3RvcmFnZVNpemU6IGNvbmZpZz8uZXBoZW1lcmFsU3RvcmFnZVNpemVcbiAgfTtcbn1cblxuLyoqXG4gKiBQYXlsb2FkIENNUyBwYXR0ZXJuIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIENvbXBvc2VzIGFsbCByZXF1aXJlZCBBV1MgcmVzb3VyY2VzIGZvciBhIFBheWxvYWQgZGVwbG95bWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBheWxvYWQgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJUGF5bG9hZCB7XG4gIHB1YmxpYyByZWFkb25seSBwYXR0ZXJuVHlwZSA9IFwicGF5bG9hZFwiIGFzIGNvbnN0O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IElQYXlsb2FkUHJvcHM7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFzY2FsTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBheWxvYWRTZWNyZXQ6IHN0cmluZztcblxuICBwcml2YXRlIF9kYXRhYmFzZSE6IFJlbGF0aW9uYWxEYXRhYmFzZTtcbiAgcHJpdmF0ZSBfc2VydmVyITogTGFtYmRhQ29tcHV0ZTtcbiAgcHJpdmF0ZSBfaW1hZ2VPcHRpbWlzYXRpb24hOiBMYW1iZGFDb21wdXRlO1xuICBwcml2YXRlIF9yZXZhbGlkYXRpb24hOiBMYW1iZGFDb21wdXRlO1xuICBwcml2YXRlIF9hc3NldHNCdWNrZXQhOiBQcml2YXRlU3RvcmFnZTtcbiAgcHJpdmF0ZSBfY2FjaGVCdWNrZXQhOiBQcml2YXRlU3RvcmFnZTtcbiAgcHJpdmF0ZSBfbWVkaWFCdWNrZXQhOiBQcml2YXRlU3RvcmFnZTtcbiAgcHJpdmF0ZSBfdGFnQ2FjaGUhOiBEeW5hbW9EQkRhdGFiYXNlO1xuICBwcml2YXRlIF9yZXZhbGlkYXRpb25RdWV1ZSE6IFF1ZXVlTWVzc2FnaW5nO1xuICBwcml2YXRlIF9jZG4hOiBDZG47XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXBwOiBBcHAsIHByb3BzOiBJUGF5bG9hZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuYXBwID0gYXBwO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLnBhc2NhbE5hbWUgPSB0b1Bhc2NhbENhc2UocHJvcHMubmFtZSk7XG4gICAgdGhpcy5wYXlsb2FkU2VjcmV0ID0gcmFuZG9tQnl0ZXMoMzIpLnRvU3RyaW5nKFwiaGV4XCIpO1xuXG4gICAgdGhpcy5yZWdpc3Rlck1hbmlmZXN0KCk7XG4gICAgdGhpcy52YWxpZGF0ZVByb3BzKCk7XG5cbiAgICB0aGlzLmNyZWF0ZURhdGFiYXNlKCk7XG4gICAgdGhpcy5jcmVhdGVTdG9yYWdlQnVja2V0cygpO1xuICAgIHRoaXMuY3JlYXRlVGFnQ2FjaGUoKTtcbiAgICB0aGlzLmNyZWF0ZVJldmFsaWRhdGlvblF1ZXVlKCk7XG4gICAgdGhpcy5jcmVhdGVMYW1iZGFGdW5jdGlvbnMoKTtcbiAgICB0aGlzLmNyZWF0ZUNkbigpO1xuICAgIHRoaXMuY3JlYXRlRG5zUmVjb3JkKCk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyTWFuaWZlc3QoKTogdm9pZCB7XG4gICAgY29uc3QgbWFuaWZlc3RQYXR0ZXJuOiBNYW5pZmVzdFBhdHRlcm4gPSB7XG4gICAgICB0eXBlOiBcInBheWxvYWRcIixcbiAgICAgIG5hbWU6IHRoaXMucHJvcHMubmFtZSxcbiAgICAgIHNvdXJjZTogUEFZTE9BRF9ERUZBVUxUUy5TT1VSQ0VcbiAgICB9O1xuICAgIHRoaXMuYXBwLmdldE1hbmlmZXN0Q29sbGVjdG9yKCkuc2V0UGF0dGVybihtYW5pZmVzdFBhdHRlcm4pO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVByb3BzKCk6IHZvaWQge1xuICAgIGNvbnN0IGRiQ29uZmlnID0gdGhpcy5wcm9wcy5kYXRhYmFzZSA/PyB7fTtcbiAgICBpZiAoZGJDb25maWcucHVibGljbHlBY2Nlc3NpYmxlKSB7XG4gICAgICBGamFsbExvZ2dlci53YXJuKFxuICAgICAgICBgUGF5bG9hZCBkYXRhYmFzZSAnJHt0aGlzLnByb3BzLm5hbWV9JyBpcyBjb25maWd1cmVkIHdpdGggcHVibGljIGFjY2Vzc2liaWxpdHkuIGAgK1xuICAgICAgICAgIFwiVGhpcyBpcyBhIHNlY3VyaXR5IHJpc2sgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGRldmVsb3BtZW50LlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGF0YWJhc2UoKTogdm9pZCB7XG4gICAgY29uc3QgZGJDb25maWcgPSB0aGlzLnByb3BzLmRhdGFiYXNlID8/IHt9O1xuICAgIGNvbnN0IGRhdGFiYXNlVHlwZSA9IGRiQ29uZmlnLnR5cGUgPz8gUEFZTE9BRF9ERUZBVUxUUy5EQVRBQkFTRS5UWVBFO1xuXG4gICAgdGhpcy5fZGF0YWJhc2UgPVxuICAgICAgZGF0YWJhc2VUeXBlID09PSBcIkF1cm9yYVwiXG4gICAgICAgID8gdGhpcy5jcmVhdGVBdXJvcmFEYXRhYmFzZShkYkNvbmZpZylcbiAgICAgICAgOiB0aGlzLmNyZWF0ZUluc3RhbmNlRGF0YWJhc2UoZGJDb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEJhc2VEYXRhYmFzZVByb3BzKFxuICAgIGRiQ29uZmlnOiBOb25OdWxsYWJsZTxJUGF5bG9hZFByb3BzW1wiZGF0YWJhc2VcIl0+XG4gICk6IEJhc2VEYXRhYmFzZVByb3BzIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YWJhc2VOYW1lOlxuICAgICAgICBkYkNvbmZpZy5kYXRhYmFzZU5hbWUgPz8gdG9WYWxpZERhdGFiYXNlTmFtZSh0aGlzLnByb3BzLm5hbWUpLFxuICAgICAgZGF0YWJhc2VFbmdpbmU6IGRiQ29uZmlnLmRhdGFiYXNlRW5naW5lID8/IFwicG9zdGdyZXNxbFwiLFxuICAgICAgYmFja3VwUmV0ZW50aW9uOlxuICAgICAgICBkYkNvbmZpZy5iYWNrdXBSZXRlbnRpb24gPz8gUEFZTE9BRF9ERUZBVUxUUy5EQVRBQkFTRS5CQUNLVVBfUkVURU5USU9OLFxuICAgICAgZGVsZXRpb25Qcm90ZWN0aW9uOlxuICAgICAgICBkYkNvbmZpZy5kZWxldGlvblByb3RlY3Rpb24gPz9cbiAgICAgICAgUEFZTE9BRF9ERUZBVUxUUy5EQVRBQkFTRS5ERUxFVElPTl9QUk9URUNUSU9OLFxuICAgICAgcHVibGljbHlBY2Nlc3NpYmxlOiBkYkNvbmZpZy5wdWJsaWNseUFjY2Vzc2libGUsXG4gICAgICBwb3J0OiBkYkNvbmZpZy5wb3J0LFxuICAgICAgcGVyZm9ybWFuY2VJbnNpZ2h0czogZGJDb25maWcucGVyZm9ybWFuY2VJbnNpZ2h0cyxcbiAgICAgIHByb3h5OiBkYkNvbmZpZy5wcm94eSxcbiAgICAgIGNyZWRlbnRpYWxzOiBkYkNvbmZpZy5jcmVkZW50aWFscyxcbiAgICAgIHNuYXBzaG90SWRlbnRpZmllcjogZGJDb25maWcuc25hcHNob3RJZGVudGlmaWVyLFxuICAgICAgc25hcHNob3RVc2VybmFtZTogZGJDb25maWcuc25hcHNob3RVc2VybmFtZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUF1cm9yYURhdGFiYXNlKFxuICAgIGRiQ29uZmlnOiBOb25OdWxsYWJsZTxJUGF5bG9hZFByb3BzW1wiZGF0YWJhc2VcIl0+XG4gICk6IFJlbGF0aW9uYWxEYXRhYmFzZSB7XG4gICAgY29uc3QgYXVyb3JhUHJvcHM6IEF1cm9yYURhdGFiYXNlUHJvcHMgPSB7XG4gICAgICB0eXBlOiBcIkF1cm9yYVwiLFxuICAgICAgLi4udGhpcy5idWlsZEJhc2VEYXRhYmFzZVByb3BzKGRiQ29uZmlnKSxcbiAgICAgIGFsbG93ZWRJcENpZHI6IGRiQ29uZmlnLmFsbG93ZWRJcENpZHIsXG4gICAgICBlbmNyeXB0aW9uOiBkYkNvbmZpZy5lbmNyeXB0aW9uIGFzIEF1cm9yYURhdGFiYXNlUHJvcHNbXCJlbmNyeXB0aW9uXCJdLFxuICAgICAgd3JpdGVyOiBkYkNvbmZpZy53cml0ZXIsXG4gICAgICByZWFkZXJzOiBkYkNvbmZpZy5yZWFkZXJzLFxuICAgICAgYWxsb3dWcGNBY2Nlc3M6IGRiQ29uZmlnLmFsbG93VnBjQWNjZXNzLFxuICAgICAgbW9uaXRvcmluZ0ludGVydmFsOiBkYkNvbmZpZy5tb25pdG9yaW5nSW50ZXJ2YWwsXG4gICAgICBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdzogZGJDb25maWcucHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3dcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwcC5hZGREYXRhYmFzZShcbiAgICAgIERhdGFiYXNlRmFjdG9yeS5idWlsZChgJHt0aGlzLnBhc2NhbE5hbWV9RGF0YWJhc2VgLCBhdXJvcmFQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVJbnN0YW5jZURhdGFiYXNlKFxuICAgIGRiQ29uZmlnOiBOb25OdWxsYWJsZTxJUGF5bG9hZFByb3BzW1wiZGF0YWJhc2VcIl0+XG4gICk6IFJlbGF0aW9uYWxEYXRhYmFzZSB7XG4gICAgY29uc3QgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VEYXRhYmFzZVByb3BzID0ge1xuICAgICAgdHlwZTogXCJJbnN0YW5jZVwiLFxuICAgICAgLi4udGhpcy5idWlsZEJhc2VEYXRhYmFzZVByb3BzKGRiQ29uZmlnKSxcbiAgICAgIHB1YmxpY2x5QWNjZXNzaWJsZTogZGJDb25maWcucHVibGljbHlBY2Nlc3NpYmxlID8/IGZhbHNlLFxuICAgICAgaW5zdGFuY2VUeXBlOiBkYkNvbmZpZy5pbnN0YW5jZVR5cGUsXG4gICAgICBhbGxvY2F0ZWRTdG9yYWdlOiBkYkNvbmZpZy5hbGxvY2F0ZWRTdG9yYWdlLFxuICAgICAgbXVsdGlBejogZGJDb25maWcubXVsdGlBeixcbiAgICAgIHJlYWRSZXBsaWNhOiBkYkNvbmZpZy5yZWFkUmVwbGljYSxcbiAgICAgIGVuY3J5cHRpb246IGRiQ29uZmlnLmVuY3J5cHRpb24gYXMgSW5zdGFuY2VEYXRhYmFzZVByb3BzW1wiZW5jcnlwdGlvblwiXVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuYXBwLmFkZERhdGFiYXNlKFxuICAgICAgRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKGAke3RoaXMucGFzY2FsTmFtZX1EYXRhYmFzZWAsIGluc3RhbmNlUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU3RvcmFnZUJ1Y2tldHMoKTogdm9pZCB7XG4gICAgdGhpcy5fYXNzZXRzQnVja2V0ID0gdGhpcy5jcmVhdGVBc3NldHNCdWNrZXQoKTtcbiAgICB0aGlzLl9jYWNoZUJ1Y2tldCA9IHRoaXMuY3JlYXRlQ2FjaGVCdWNrZXQoKTtcbiAgICB0aGlzLl9tZWRpYUJ1Y2tldCA9IHRoaXMuY3JlYXRlTWVkaWFCdWNrZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQXNzZXRzQnVja2V0KCk6IFByaXZhdGVTdG9yYWdlIHtcbiAgICBjb25zdCBhc3NldHNDb25maWcgPSB0aGlzLnByb3BzLnN0b3JhZ2U/LmFzc2V0cyA/PyB7fTtcbiAgICBjb25zdCBhc3NldHNQcm9wczogUHJpdmF0ZVMzUHJvcHMgPSB7XG4gICAgICBidWNrZXRUeXBlOiBcInByaXZhdGVcIixcbiAgICAgIHZlcnNpb25lZDogYXNzZXRzQ29uZmlnLnZlcnNpb25lZCA/PyBmYWxzZSxcbiAgICAgIGRlcGxveW1lbnQ6IHtcbiAgICAgICAgc291cmNlOiBgJHtQQVlMT0FEX0RFRkFVTFRTLlNPVVJDRX0vLm9wZW4tbmV4dC9hc3NldHNgLFxuICAgICAgICBwcnVuZTogdHJ1ZSxcbiAgICAgICAgY2FjaGVDb250cm9sOiB7XG4gICAgICAgICAgbWF4QWdlOiBQQVlMT0FEX0RFRkFVTFRTLkNBQ0hFLk1BWF9BR0VfU0VDT05EUyxcbiAgICAgICAgICBpbW11dGFibGU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuYXBwLmFkZFN0b3JhZ2UoXG4gICAgICBTdG9yYWdlRmFjdG9yeS5idWlsZChgJHt0aGlzLnBhc2NhbE5hbWV9QXNzZXRzYCwgYXNzZXRzUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2FjaGVCdWNrZXQoKTogUHJpdmF0ZVN0b3JhZ2Uge1xuICAgIGNvbnN0IGNhY2hlQ29uZmlnID0gdGhpcy5wcm9wcy5zdG9yYWdlPy5jYWNoZSA/PyB7fTtcbiAgICBjb25zdCBjYWNoZVByb3BzOiBQcml2YXRlUzNQcm9wcyA9IHtcbiAgICAgIGJ1Y2tldFR5cGU6IFwicHJpdmF0ZVwiLFxuICAgICAgdmVyc2lvbmVkOiBjYWNoZUNvbmZpZy52ZXJzaW9uZWQgPz8gZmFsc2UsXG4gICAgICBkZXBsb3ltZW50OiB7XG4gICAgICAgIHNvdXJjZTogYCR7UEFZTE9BRF9ERUZBVUxUUy5TT1VSQ0V9Ly5vcGVuLW5leHQvY2FjaGVgLFxuICAgICAgICBwcnVuZTogZmFsc2UgLy8gSVNSIGFkZHMgZmlsZXMgYXQgcnVudGltZVxuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuYXBwLmFkZFN0b3JhZ2UoXG4gICAgICBTdG9yYWdlRmFjdG9yeS5idWlsZChgJHt0aGlzLnBhc2NhbE5hbWV9Q2FjaGVgLCBjYWNoZVByb3BzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1lZGlhQnVja2V0KCk6IFByaXZhdGVTdG9yYWdlIHtcbiAgICBjb25zdCBtZWRpYUNvbmZpZyA9IHRoaXMucHJvcHMuc3RvcmFnZT8ubWVkaWEgPz8ge307XG4gICAgY29uc3QgbWVkaWFQcm9wczogUHJpdmF0ZVMzUHJvcHMgPSB7XG4gICAgICBidWNrZXRUeXBlOiBcInByaXZhdGVcIixcbiAgICAgIHZlcnNpb25lZDogbWVkaWFDb25maWcudmVyc2lvbmVkID8/IGZhbHNlXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5hcHAuYWRkU3RvcmFnZShcbiAgICAgIFN0b3JhZ2VGYWN0b3J5LmJ1aWxkKGAke3RoaXMucGFzY2FsTmFtZX1NZWRpYWAsIG1lZGlhUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGFnQ2FjaGUoKTogdm9pZCB7XG4gICAgY29uc3QgdGFnQ2FjaGVQcm9wczogRHluYW1vREJEYXRhYmFzZVByb3BzID0ge1xuICAgICAgdHlwZTogXCJEeW5hbW9EQlwiLFxuICAgICAgcGFydGl0aW9uS2V5OiB7IG5hbWU6IFwidGFnXCIsIHR5cGU6IFwiU1wiIH0sXG4gICAgICBzb3J0S2V5OiB7IG5hbWU6IFwicGF0aFwiLCB0eXBlOiBcIlNcIiB9LFxuICAgICAgZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlczogW1xuICAgICAgICB7XG4gICAgICAgICAgaW5kZXhOYW1lOiBcInJldmFsaWRhdGVcIixcbiAgICAgICAgICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogXCJwYXRoXCIsIHR5cGU6IFwiU1wiIH0sXG4gICAgICAgICAgc29ydEtleTogeyBuYW1lOiBcInJldmFsaWRhdGVkQXRcIiwgdHlwZTogXCJOXCIgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgICB0aGlzLl90YWdDYWNoZSA9IHRoaXMuYXBwLmFkZERhdGFiYXNlKFxuICAgICAgRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKGAke3RoaXMucGFzY2FsTmFtZX1UYWdDYWNoZWAsIHRhZ0NhY2hlUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUmV2YWxpZGF0aW9uUXVldWUoKTogdm9pZCB7XG4gICAgY29uc3QgcXVldWVDb25maWcgPSB0aGlzLnByb3BzLm1lc3NhZ2luZz8ucmV2YWxpZGF0aW9uUXVldWUgPz8ge307XG4gICAgY29uc3QgcmV2YWxpZGF0aW9uVGltZW91dCA9XG4gICAgICB0aGlzLnByb3BzLmNvbXB1dGU/LnJldmFsaWRhdGlvbj8udGltZW91dCA/P1xuICAgICAgUEFZTE9BRF9ERUZBVUxUUy5DT01QVVRFLlJFVkFMSURBVElPTl9USU1FT1VUO1xuXG4gICAgLy8gUmVzb2x2ZSBkZWFkIGxldHRlciBxdWV1ZSBjb25maWdcbiAgICBsZXQgZGxxQ29uZmlnOiBJUXVldWVQcm9wc1tcImRlYWRMZXR0ZXJRdWV1ZVwiXTtcbiAgICBpZiAocXVldWVDb25maWcuZGVhZExldHRlclF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgZGxxQ29uZmlnID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSBpZiAocXVldWVDb25maWcuZGVhZExldHRlclF1ZXVlKSB7XG4gICAgICBkbHFDb25maWcgPSB7XG4gICAgICAgIGVuYWJsZWQ6IHF1ZXVlQ29uZmlnLmRlYWRMZXR0ZXJRdWV1ZS5lbmFibGVkID8/IHRydWUsXG4gICAgICAgIG1heFJlY2VpdmVDb3VudDogcXVldWVDb25maWcuZGVhZExldHRlclF1ZXVlLm1heFJlY2VpdmVDb3VudCA/PyAzXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkbHFDb25maWcgPSB7IGVuYWJsZWQ6IHRydWUsIG1heFJlY2VpdmVDb3VudDogMyB9O1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXVlUHJvcHM6IElRdWV1ZVByb3BzID0ge1xuICAgICAgdHlwZTogXCJxdWV1ZVwiLFxuICAgICAgcXVldWVUeXBlOiBcImZpZm9cIixcbiAgICAgIHZpc2liaWxpdHlUaW1lb3V0OiBxdWV1ZUNvbmZpZy52aXNpYmlsaXR5VGltZW91dCA/PyByZXZhbGlkYXRpb25UaW1lb3V0LFxuICAgICAgbWVzc2FnZVJldGVudGlvblBlcmlvZDogcXVldWVDb25maWcubWVzc2FnZVJldGVudGlvblBlcmlvZCxcbiAgICAgIG1heE1lc3NhZ2VTaXplOiBxdWV1ZUNvbmZpZy5tYXhNZXNzYWdlU2l6ZSxcbiAgICAgIGNvbnRlbnRCYXNlZERlZHVwbGljYXRpb246IHRydWUsXG4gICAgICBkZWFkTGV0dGVyUXVldWU6IGRscUNvbmZpZ1xuICAgIH07XG4gICAgdGhpcy5fcmV2YWxpZGF0aW9uUXVldWUgPSB0aGlzLmFwcC5hZGRNZXNzYWdpbmcoXG4gICAgICBNZXNzYWdpbmdGYWN0b3J5LmJ1aWxkKGAke3RoaXMucGFzY2FsTmFtZX1SZXZhbGlkYXRpb25gLCBxdWV1ZVByb3BzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUxhbWJkYUZ1bmN0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXJ2ZXIgPSB0aGlzLmNyZWF0ZVNlcnZlckxhbWJkYSgpO1xuICAgIHRoaXMuX2ltYWdlT3B0aW1pc2F0aW9uID0gdGhpcy5jcmVhdGVJbWFnZUxhbWJkYSgpO1xuICAgIHRoaXMuX3JldmFsaWRhdGlvbiA9IHRoaXMuY3JlYXRlUmV2YWxpZGF0aW9uTGFtYmRhKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNlcnZlckxhbWJkYSgpOiBMYW1iZGFDb21wdXRlIHtcbiAgICBjb25zdCB7IG1lbW9yeVNpemUsIHRpbWVvdXQsIGVwaGVtZXJhbFN0b3JhZ2VTaXplIH0gPSByZXNvbHZlTGFtYmRhQ29uZmlnKFxuICAgICAgdGhpcy5wcm9wcy5jb21wdXRlPy5zZXJ2ZXIsXG4gICAgICB7XG4gICAgICAgIG1lbW9yeTogUEFZTE9BRF9ERUZBVUxUUy5DT01QVVRFLlNFUlZFUl9NRU1PUlksXG4gICAgICAgIHRpbWVvdXQ6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5TRVJWRVJfVElNRU9VVFxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBzZXJ2ZXJQcm9wczogQ29kZUxhbWJkYVByb3BzID0ge1xuICAgICAgdHlwZTogXCJsYW1iZGFcIixcbiAgICAgIGRlcGxveW1lbnQ6IFwiY29kZVwiLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIGAke1BBWUxPQURfREVGQVVMVFMuU09VUkNFfS8ub3Blbi1uZXh0L3NlcnZlci1mdW5jdGlvbnMvZGVmYXVsdGBcbiAgICAgICksXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICBtZW1vcnlTaXplLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplLFxuICAgICAgZnVuY3Rpb25Vcmw6IHtcbiAgICAgICAgYXV0aFR5cGU6IEZ1bmN0aW9uVXJsQXV0aFR5cGUuTk9ORSxcbiAgICAgICAgaW52b2tlTW9kZTogSW52b2tlTW9kZS5SRVNQT05TRV9TVFJFQU1cbiAgICAgIH0sXG4gICAgICBjb25uZWN0aW9uczogW3RoaXMuX2RhdGFiYXNlXSxcbiAgICAgIHNlY3JldHNJbXBvcnQ6IHtcbiAgICAgICAgREFUQUJBU0VfVVNFUk5BTUU6IHRoaXMuX2RhdGFiYXNlXG4gICAgICAgICAgLmdldENyZWRlbnRpYWxzKClcbiAgICAgICAgICAuZ2V0SW1wb3J0KFwidXNlcm5hbWVcIiksXG4gICAgICAgIERBVEFCQVNFX1BBU1NXT1JEOiB0aGlzLl9kYXRhYmFzZS5nZXRDcmVkZW50aWFscygpLmdldEltcG9ydChcInBhc3N3b3JkXCIpXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuYnVpbGRTZXJ2ZXJFbnZpcm9ubWVudCgpXG4gICAgfTtcblxuICAgIGNvbnN0IHNlcnZlciA9IHRoaXMuYXBwLmFkZENvbXB1dGUoXG4gICAgICBDb21wdXRlRmFjdG9yeS5idWlsZChgJHt0aGlzLnBhc2NhbE5hbWV9U2VydmVyYCwgc2VydmVyUHJvcHMpXG4gICAgKTtcblxuICAgIHRoaXMuZ3JhbnRTZXJ2ZXJQZXJtaXNzaW9ucyhzZXJ2ZXIpO1xuICAgIHJldHVybiBzZXJ2ZXI7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VydmVyRW52aXJvbm1lbnQoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgYmFzZUVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIERBVEFCQVNFX0hPU1Q6IHRoaXMuX2RhdGFiYXNlLmdldEhvc3RFbmRwb2ludCgpLFxuICAgICAgREFUQUJBU0VfUE9SVDogdGhpcy5fZGF0YWJhc2UuZ2V0SG9zdFBvcnQoKSxcbiAgICAgIERBVEFCQVNFX05BTUU6IHRoaXMuX2RhdGFiYXNlLmdldERhdGFiYXNlTmFtZSgpLFxuICAgICAgREFUQUJBU0VfU1NMOiBcInRydWVcIixcbiAgICAgIENBQ0hFX0JVQ0tFVF9OQU1FOiB0aGlzLl9jYWNoZUJ1Y2tldC5nZXRCdWNrZXROYW1lKCksXG4gICAgICBDQUNIRV9CVUNLRVRfUkVHSU9OOiB0aGlzLmFwcC5yZWdpb24gPz8gXCJ1cy1lYXN0LTFcIixcbiAgICAgIENBQ0hFX0RZTkFNT19UQUJMRTogdGhpcy5fdGFnQ2FjaGUuZ2V0VGFibGVOYW1lKCksXG4gICAgICBSRVZBTElEQVRJT05fUVVFVUVfVVJMOiB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5nZXRRdWV1ZVVybCgpLFxuICAgICAgUkVWQUxJREFUSU9OX1FVRVVFX1JFR0lPTjogdGhpcy5hcHAucmVnaW9uID8/IFwidXMtZWFzdC0xXCIsXG4gICAgICBNRURJQV9CVUNLRVRfTkFNRTogdGhpcy5fbWVkaWFCdWNrZXQuZ2V0QnVja2V0TmFtZSgpLFxuICAgICAgUEFZTE9BRF9TRUNSRVQ6IHRoaXMucGF5bG9hZFNlY3JldFxuICAgIH07XG5cbiAgICAvLyBMb2NrIGRvd24gQ09SUyB0byBjdXN0b20gZG9tYWluIHdoZW4gcHJvdmlkZWRcbiAgICBjb25zdCBjdXN0b21Eb21haW4gPSB0aGlzLnByb3BzLmNkbj8uZG9tYWluTmFtZXM/LlswXTtcbiAgICBpZiAoY3VzdG9tRG9tYWluKSB7XG4gICAgICBiYXNlRW52Lk5FWFRfUFVCTElDX1NFUlZFUl9VUkwgPSBgaHR0cHM6Ly8ke2N1c3RvbURvbWFpbn1gO1xuICAgIH1cblxuICAgIHJldHVybiB7IC4uLmJhc2VFbnYsIC4uLnRoaXMucHJvcHMuZW52aXJvbm1lbnQgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JhbnRTZXJ2ZXJQZXJtaXNzaW9ucyhzZXJ2ZXI6IExhbWJkYUNvbXB1dGUpOiB2b2lkIHtcbiAgICBjb25zdCBzZXJ2ZXJGdW5jdGlvbiA9IHJlcXVpcmVGdW5jdGlvbihzZXJ2ZXIsIFwiU2VydmVyXCIpO1xuICAgIHRoaXMuX2NhY2hlQnVja2V0LmdyYW50UmVhZFdyaXRlKHNlcnZlckZ1bmN0aW9uKTtcbiAgICB0aGlzLl9tZWRpYUJ1Y2tldC5ncmFudFJlYWRXcml0ZShzZXJ2ZXJGdW5jdGlvbik7XG4gICAgdGhpcy5fdGFnQ2FjaGUuZ3JhbnRSZWFkV3JpdGVEYXRhKHNlcnZlckZ1bmN0aW9uKTtcbiAgICB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5ncmFudFNlbmRNZXNzYWdlcyhzZXJ2ZXJGdW5jdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUltYWdlTGFtYmRhKCk6IExhbWJkYUNvbXB1dGUge1xuICAgIGNvbnN0IHsgbWVtb3J5U2l6ZSwgdGltZW91dCwgZXBoZW1lcmFsU3RvcmFnZVNpemUgfSA9IHJlc29sdmVMYW1iZGFDb25maWcoXG4gICAgICB0aGlzLnByb3BzLmNvbXB1dGU/LmltYWdlT3B0aW1pc2F0aW9uLFxuICAgICAge1xuICAgICAgICBtZW1vcnk6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5JTUFHRV9NRU1PUlksXG4gICAgICAgIHRpbWVvdXQ6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5JTUFHRV9USU1FT1VUXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IGltYWdlUHJvcHM6IENvZGVMYW1iZGFQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwibGFtYmRhXCIsXG4gICAgICBkZXBsb3ltZW50OiBcImNvZGVcIixcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KFxuICAgICAgICBgJHtQQVlMT0FEX0RFRkFVTFRTLlNPVVJDRX0vLm9wZW4tbmV4dC9pbWFnZS1vcHRpbWl6YXRpb24tZnVuY3Rpb25gXG4gICAgICApLFxuICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMl9YLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgbWVtb3J5U2l6ZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlcGhlbWVyYWxTdG9yYWdlU2l6ZSxcbiAgICAgIGZ1bmN0aW9uVXJsOiB7IGF1dGhUeXBlOiBGdW5jdGlvblVybEF1dGhUeXBlLk5PTkUgfSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIEJVQ0tFVF9OQU1FOiB0aGlzLl9hc3NldHNCdWNrZXQuZ2V0QnVja2V0TmFtZSgpLFxuICAgICAgICBCVUNLRVRfS0VZX1BSRUZJWDogXCJfYXNzZXRzXCJcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaW1hZ2UgPSB0aGlzLmFwcC5hZGRDb21wdXRlKFxuICAgICAgQ29tcHV0ZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wYXNjYWxOYW1lfUltYWdlT3B0aW1pc2F0aW9uYCwgaW1hZ2VQcm9wcylcbiAgICApO1xuXG4gICAgY29uc3QgaW1hZ2VGdW5jdGlvbiA9IHJlcXVpcmVGdW5jdGlvbihpbWFnZSwgXCJJbWFnZU9wdGltaXNhdGlvblwiKTtcbiAgICB0aGlzLl9hc3NldHNCdWNrZXQuZ3JhbnRSZWFkKGltYWdlRnVuY3Rpb24pO1xuXG4gICAgcmV0dXJuIGltYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSZXZhbGlkYXRpb25MYW1iZGEoKTogTGFtYmRhQ29tcHV0ZSB7XG4gICAgY29uc3QgeyBtZW1vcnlTaXplLCB0aW1lb3V0LCBlcGhlbWVyYWxTdG9yYWdlU2l6ZSB9ID0gcmVzb2x2ZUxhbWJkYUNvbmZpZyhcbiAgICAgIHRoaXMucHJvcHMuY29tcHV0ZT8ucmV2YWxpZGF0aW9uLFxuICAgICAge1xuICAgICAgICBtZW1vcnk6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5SRVZBTElEQVRJT05fTUVNT1JZLFxuICAgICAgICB0aW1lb3V0OiBQQVlMT0FEX0RFRkFVTFRTLkNPTVBVVEUuUkVWQUxJREFUSU9OX1RJTUVPVVRcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgcmV2YWxpZGF0aW9uUHJvcHM6IENvZGVMYW1iZGFQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwibGFtYmRhXCIsXG4gICAgICBkZXBsb3ltZW50OiBcImNvZGVcIixcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KFxuICAgICAgICBgJHtQQVlMT0FEX0RFRkFVTFRTLlNPVVJDRX0vLm9wZW4tbmV4dC9yZXZhbGlkYXRpb24tZnVuY3Rpb25gXG4gICAgICApLFxuICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMl9YLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgbWVtb3J5U2l6ZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlcGhlbWVyYWxTdG9yYWdlU2l6ZSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIENBQ0hFX0RZTkFNT19UQUJMRTogdGhpcy5fdGFnQ2FjaGUuZ2V0VGFibGVOYW1lKCksXG4gICAgICAgIENBQ0hFX0JVQ0tFVF9OQU1FOiB0aGlzLl9jYWNoZUJ1Y2tldC5nZXRCdWNrZXROYW1lKClcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmV2YWxpZGF0aW9uID0gdGhpcy5hcHAuYWRkQ29tcHV0ZShcbiAgICAgIENvbXB1dGVGYWN0b3J5LmJ1aWxkKGAke3RoaXMucGFzY2FsTmFtZX1SZXZhbGlkYXRpb25gLCByZXZhbGlkYXRpb25Qcm9wcylcbiAgICApO1xuXG4gICAgY29uc3QgcmV2YWxpZGF0aW9uTGFtYmRhID0gcmV2YWxpZGF0aW9uLmdldExhbWJkYUZ1bmN0aW9uKCk7XG4gICAgcmV2YWxpZGF0aW9uTGFtYmRhLmFkZFNxc0V2ZW50U291cmNlKHRoaXMuX3JldmFsaWRhdGlvblF1ZXVlLmdldFF1ZXVlKCksIHtcbiAgICAgIGJhdGNoU2l6ZTogNVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmV2YWxpZGF0aW9uRnVuY3Rpb24gPSByZXF1aXJlRnVuY3Rpb24ocmV2YWxpZGF0aW9uLCBcIlJldmFsaWRhdGlvblwiKTtcbiAgICB0aGlzLl90YWdDYWNoZS5ncmFudFJlYWRXcml0ZURhdGEocmV2YWxpZGF0aW9uRnVuY3Rpb24pO1xuICAgIHRoaXMuX2NhY2hlQnVja2V0LmdyYW50UmVhZFdyaXRlKHJldmFsaWRhdGlvbkZ1bmN0aW9uKTtcbiAgICB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5ncmFudENvbnN1bWVNZXNzYWdlcyhyZXZhbGlkYXRpb25GdW5jdGlvbik7XG5cbiAgICByZXR1cm4gcmV2YWxpZGF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDZG4oKTogdm9pZCB7XG4gICAgY29uc3QgeyBkb21haW5OYW1lcywgY2VydGlmaWNhdGUgfSA9IHRoaXMucmVzb2x2ZURvbWFpbkNvbmZpZygpO1xuXG4gICAgY29uc3QgY2RuUHJvcHM6IFNtYXJ0Q2RuUHJvcHMgPSB7XG4gICAgICBvcmlnaW5UeXBlOiBcImF1dG9cIixcbiAgICAgIG9yaWdpbjogdGhpcy5fc2VydmVyLFxuICAgICAgY2FjaGVQb2xpY3k6IFwiQ0FDSElOR19ESVNBQkxFRFwiLFxuICAgICAgZGVmYXVsdEFsbG93ZWRNZXRob2RzOiBcIkFMTFwiLFxuICAgICAgZm9yd2FyZEhvc3RIZWFkZXI6IHRydWUsXG4gICAgICBwcmljZUNsYXNzOiBcIlByaWNlQ2xhc3NfMTAwXCIsXG4gICAgICBkb21haW5OYW1lcyxcbiAgICAgIGNlcnRpZmljYXRlLFxuICAgICAgYmVoYXZpb3VyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcGF0aFBhdHRlcm46IFBBWUxPQURfREVGQVVMVFMuUEFUSFMuU1RBVElDLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5fYXNzZXRzQnVja2V0LFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfT1BUSU1JWkVEXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLklNQUdFLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5faW1hZ2VPcHRpbWlzYXRpb24sXG4gICAgICAgICAgY2FjaGVQb2xpY3k6IFwiQ0FDSElOR19PUFRJTUlaRURcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGF0aFBhdHRlcm46IFBBWUxPQURfREVGQVVMVFMuUEFUSFMuQVBJLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5fc2VydmVyLFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfRElTQUJMRURcIixcbiAgICAgICAgICBhbGxvd2VkTWV0aG9kczogXCJBTExcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGF0aFBhdHRlcm46IFBBWUxPQURfREVGQVVMVFMuUEFUSFMuQURNSU4sXG4gICAgICAgICAgb3JpZ2luOiB0aGlzLl9zZXJ2ZXIsXG4gICAgICAgICAgY2FjaGVQb2xpY3k6IFwiQ0FDSElOR19ESVNBQkxFRFwiLFxuICAgICAgICAgIGFsbG93ZWRNZXRob2RzOiBcIkFMTFwiXG4gICAgICAgIH0sXG4gICAgICAgIC4uLih0aGlzLnByb3BzLmNkbj8uYmVoYXZpb3VycyA/PyBbXSlcbiAgICAgIF1cbiAgICB9O1xuXG4gICAgdGhpcy5fY2RuID0gdGhpcy5hcHAuYWRkQ2RuKFxuICAgICAgQ2RuRmFjdG9yeS5idWlsZChgJHt0aGlzLnBhc2NhbE5hbWV9Q2RuYCwgY2RuUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZURvbWFpbkNvbmZpZygpOiB7XG4gICAgZG9tYWluTmFtZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgIGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGUgfCB1bmRlZmluZWQ7XG4gICAgaG9zdGVkWm9uZTogUmV0dXJuVHlwZTx0eXBlb2YgSG9zdGVkWm9uZS5mcm9tTG9va3VwPiB8IHVuZGVmaW5lZDtcbiAgfSB7XG4gICAgaWYgKHRoaXMucHJvcHMuZG9tYWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlU2ltcGxlRG9tYWluKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuY2RuPy5kb21haW5OYW1lcz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlQWR2YW5jZWREb21haW4oKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZG9tYWluTmFtZXM6IHVuZGVmaW5lZCxcbiAgICAgIGNlcnRpZmljYXRlOiB1bmRlZmluZWQsXG4gICAgICBob3N0ZWRab25lOiB1bmRlZmluZWRcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlU2ltcGxlRG9tYWluKCk6IHtcbiAgICBkb21haW5OYW1lczogc3RyaW5nW107XG4gICAgY2VydGlmaWNhdGU6IElDZXJ0aWZpY2F0ZTtcbiAgICBob3N0ZWRab25lOiBSZXR1cm5UeXBlPHR5cGVvZiBIb3N0ZWRab25lLmZyb21Mb29rdXA+O1xuICB9IHtcbiAgICBjb25zdCBkb21haW4gPSB0aGlzLnByb3BzLmRvbWFpbiE7XG4gICAgY29uc3Qgcm9vdERvbWFpbiA9IGV4dHJhY3RSb290RG9tYWluKGRvbWFpbik7XG5cbiAgICBjb25zdCBob3N0ZWRab25lID0gSG9zdGVkWm9uZS5mcm9tTG9va3VwKFxuICAgICAgdGhpcyxcbiAgICAgIGAke3RoaXMucGFzY2FsTmFtZX1Ib3N0ZWRab25lYCxcbiAgICAgIHsgZG9tYWluTmFtZTogcm9vdERvbWFpbiB9XG4gICAgKTtcblxuICAgIGNvbnN0IGNlcnRpZmljYXRlID0gbmV3IENlcnRpZmljYXRlKHRoaXMsIGAke3RoaXMucGFzY2FsTmFtZX1DZXJ0aWZpY2F0ZWAsIHtcbiAgICAgIGRvbWFpbk5hbWU6IGRvbWFpbixcbiAgICAgIHZhbGlkYXRpb246IENlcnRpZmljYXRlVmFsaWRhdGlvbi5mcm9tRG5zKGhvc3RlZFpvbmUpXG4gICAgfSk7XG5cbiAgICByZXR1cm4geyBkb21haW5OYW1lczogW2RvbWFpbl0sIGNlcnRpZmljYXRlLCBob3N0ZWRab25lIH07XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVBZHZhbmNlZERvbWFpbigpOiB7XG4gICAgZG9tYWluTmFtZXM6IHN0cmluZ1tdO1xuICAgIGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGUgfCB1bmRlZmluZWQ7XG4gICAgaG9zdGVkWm9uZTogdW5kZWZpbmVkO1xuICB9IHtcbiAgICBjb25zdCBjZG5Db25maWcgPSB0aGlzLnByb3BzLmNkbiE7XG4gICAgY29uc3QgY2VydGlmaWNhdGUgPVxuICAgICAgY2RuQ29uZmlnLmNlcnRpZmljYXRlID8/XG4gICAgICAoY2RuQ29uZmlnLmNlcnRpZmljYXRlQXJuXG4gICAgICAgID8gQ2VydGlmaWNhdGUuZnJvbUNlcnRpZmljYXRlQXJuKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGAke3RoaXMucGFzY2FsTmFtZX1DZXJ0aWZpY2F0ZWAsXG4gICAgICAgICAgICBjZG5Db25maWcuY2VydGlmaWNhdGVBcm5cbiAgICAgICAgICApXG4gICAgICAgIDogdW5kZWZpbmVkKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkb21haW5OYW1lczogY2RuQ29uZmlnLmRvbWFpbk5hbWVzISxcbiAgICAgIGNlcnRpZmljYXRlLFxuICAgICAgaG9zdGVkWm9uZTogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRG5zUmVjb3JkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcm9wcy5kb21haW4pIHJldHVybjtcblxuICAgIGNvbnN0IHsgaG9zdGVkWm9uZSB9ID0gdGhpcy5yZXNvbHZlRG9tYWluQ29uZmlnKCk7XG4gICAgaWYgKCFob3N0ZWRab25lKSByZXR1cm47XG5cbiAgICBuZXcgQVJlY29yZCh0aGlzLCBgJHt0aGlzLnBhc2NhbE5hbWV9QWxpYXNSZWNvcmRgLCB7XG4gICAgICB6b25lOiBob3N0ZWRab25lLFxuICAgICAgcmVjb3JkTmFtZTogdGhpcy5wcm9wcy5kb21haW4sXG4gICAgICB0YXJnZXQ6IFJlY29yZFRhcmdldC5mcm9tQWxpYXMoXG4gICAgICAgIG5ldyBDbG91ZEZyb250VGFyZ2V0KHRoaXMuX2Nkbi5nZXREaXN0cmlidXRpb24oKSlcbiAgICAgIClcbiAgICB9KTtcbiAgfVxuXG4gIGdldERhdGFiYXNlKCk6IFJlbGF0aW9uYWxEYXRhYmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFiYXNlO1xuICB9XG5cbiAgZ2V0U2VydmVyKCk6IExhbWJkYUNvbXB1dGUge1xuICAgIHJldHVybiB0aGlzLl9zZXJ2ZXI7XG4gIH1cblxuICBnZXRJbWFnZU9wdGltaXNhdGlvbigpOiBMYW1iZGFDb21wdXRlIHtcbiAgICByZXR1cm4gdGhpcy5faW1hZ2VPcHRpbWlzYXRpb247XG4gIH1cblxuICBnZXRSZXZhbGlkYXRpb24oKTogTGFtYmRhQ29tcHV0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3JldmFsaWRhdGlvbjtcbiAgfVxuXG4gIGdldEFzc2V0c0J1Y2tldCgpOiBQcml2YXRlU3RvcmFnZSB7XG4gICAgcmV0dXJuIHRoaXMuX2Fzc2V0c0J1Y2tldDtcbiAgfVxuXG4gIGdldENhY2hlQnVja2V0KCk6IFByaXZhdGVTdG9yYWdlIHtcbiAgICByZXR1cm4gdGhpcy5fY2FjaGVCdWNrZXQ7XG4gIH1cblxuICBnZXRNZWRpYUJ1Y2tldCgpOiBQcml2YXRlU3RvcmFnZSB7XG4gICAgcmV0dXJuIHRoaXMuX21lZGlhQnVja2V0O1xuICB9XG5cbiAgZ2V0VGFnQ2FjaGUoKTogRHluYW1vREJEYXRhYmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhZ0NhY2hlO1xuICB9XG5cbiAgZ2V0UmV2YWxpZGF0aW9uUXVldWUoKTogUXVldWVNZXNzYWdpbmcge1xuICAgIHJldHVybiB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZTtcbiAgfVxuXG4gIGdldENkbigpOiBDZG4ge1xuICAgIHJldHVybiB0aGlzLl9jZG47XG4gIH1cbn1cbiJdfQ==
|
|
535
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvcGF5bG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7OztBQUVILDJDQUF1QztBQUN2QyxtQ0FBcUM7QUFDckMsdURBTWdDO0FBQ2hDLCtFQUk0QztBQUM1Qyx5REFBNEU7QUFDNUUseUVBQW1FO0FBS25FLCtDQU91QjtBQUN2Qiw2Q0FLc0I7QUFDdEIsNkNBSXNCO0FBQ3RCLGlEQUl3QjtBQUN4QixxQ0FBb0U7QUFDcEUseUVBQThEO0FBRTlELE1BQU0sZ0JBQWdCLEdBQUc7SUFDdkIscUZBQXFGO0lBQ3JGLE1BQU0sRUFBRSxPQUFPO0lBQ2YsUUFBUSxFQUFFO1FBQ1IsSUFBSSxFQUFFLFVBQW1CO1FBQ3pCLGdCQUFnQixFQUFFLENBQUM7UUFDbkIsbUJBQW1CLEVBQUUsSUFBSTtLQUMxQjtJQUNELE9BQU8sRUFBRTtRQUNQLGFBQWEsRUFBRSxJQUFJO1FBQ25CLGNBQWMsRUFBRSxFQUFFO1FBQ2xCLFlBQVksRUFBRSxJQUFJO1FBQ2xCLGFBQWEsRUFBRSxFQUFFO1FBQ2pCLG1CQUFtQixFQUFFLEdBQUc7UUFDeEIsb0JBQW9CLEVBQUUsR0FBRztLQUMxQjtJQUNELEtBQUssRUFBRTtRQUNMLGVBQWUsRUFBRSxRQUFRLENBQUMsU0FBUztLQUNwQztJQUNELEtBQUssRUFBRTtRQUNMLE1BQU0sRUFBRSxpQkFBaUI7UUFDekIsS0FBSyxFQUFFLGVBQWU7UUFDdEIsR0FBRyxFQUFFLFFBQVE7UUFDYixLQUFLLEVBQUUsVUFBVTtLQUNsQjtDQUNPLENBQUM7QUFFWDs7R0FFRztBQUNILFNBQVMsbUJBQW1CLENBQUMsSUFBWTtJQUN2QyxPQUFPLElBQUk7U0FDUixXQUFXLEVBQUU7U0FDYixPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztTQUNsQixPQUFPLENBQUMsYUFB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QUUsQ0FBQztRQUMxRCxJQUFJLHFCQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsYUFBYSxFQUFFO1lBQ3JELElBQUksRUFBRSxVQUFVO1lBQ2hCLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDN0IsTUFBTSxFQUFFLDBCQUFZLENBQUMsU0FBUyxDQUM1QixJQUFJLHNDQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FDbEQ7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBeGpCRCwwQkF3akJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXlsb2FkIENNUyBQYXR0ZXJuLlxuICpcbiAqIEEgaGlnaC1sZXZlbCBwYXR0ZXJuIHRoYXQgY3JlYXRlcyBhbGwgaW5mcmFzdHJ1Y3R1cmUgcmVxdWlyZWQgZm9yIGFcbiAqIFBheWxvYWQgQ01TIGRlcGxveW1lbnQgdXNpbmcgT3Blbk5leHQuXG4gKlxuICogUmVzb3VyY2VzIGNyZWF0ZWQ6XG4gKiAtIFJEUyBQb3N0Z3JlU1FMIGRhdGFiYXNlIChBdXJvcmEgb3IgSW5zdGFuY2UpXG4gKiAtIDMgUzMgYnVja2V0cyAoYXNzZXRzLCBjYWNoZSwgbWVkaWEpXG4gKiAtIER5bmFtb0RCIHRhYmxlICh0YWcgY2FjaGUgd2l0aCBHU0kpXG4gKiAtIFNRUyBGSUZPIHF1ZXVlIChyZXZhbGlkYXRpb24pXG4gKiAtIDMgTGFtYmRhIGZ1bmN0aW9ucyAoc2VydmVyLCBpbWFnZSBvcHRpbWlzYXRpb24sIHJldmFsaWRhdGlvbilcbiAqIC0gQ2xvdWRGcm9udCBkaXN0cmlidXRpb25cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcGF5bG9hZCA9IGFwcC5hZGRQYXR0ZXJuKFBhdHRlcm5GYWN0b3J5LmJ1aWxkKFwiUGF5bG9hZEFwcFwiLCB7XG4gKiAgIHR5cGU6IFwicGF5bG9hZFwiLFxuICogICBuYW1lOiBcIm15LWNtc1wiXG4gKiB9KSk7XG4gKlxuICogLy8gRXNjYXBlIGhhdGNoZXNcbiAqIHBheWxvYWQuZ2V0RGF0YWJhc2UoKS5ncmFudENvbm5lY3Qob3RoZXJMYW1iZGEpO1xuICovXG5cbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7XG4gIENvZGUsXG4gIFJ1bnRpbWUsXG4gIEFyY2hpdGVjdHVyZSxcbiAgRnVuY3Rpb25VcmxBdXRoVHlwZSxcbiAgdHlwZSBJRnVuY3Rpb25cbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7XG4gIENlcnRpZmljYXRlLFxuICBDZXJ0aWZpY2F0ZVZhbGlkYXRpb24sXG4gIHR5cGUgSUNlcnRpZmljYXRlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyXCI7XG5pbXBvcnQgeyBIb3N0ZWRab25lLCBBUmVjb3JkLCBSZWNvcmRUYXJnZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjtcbmltcG9ydCB7IENsb3VkRnJvbnRUYXJnZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0c1wiO1xuXG5pbXBvcnQgdHlwZSBBcHAgZnJvbSBcIi4uLy4uL2FwcC5qc1wiO1xuaW1wb3J0IHsgdHlwZSBJUGF5bG9hZFByb3BzLCB0eXBlIElQYXlsb2FkIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyB0eXBlIE1hbmlmZXN0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9tYW5pZmVzdFdyaXRlci5qc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBSZWxhdGlvbmFsRGF0YWJhc2UsXG4gIHR5cGUgRHluYW1vREJEYXRhYmFzZSxcbiAgRGF0YWJhc2VGYWN0b3J5LFxuICB0eXBlIEF1cm9yYURhdGFiYXNlUHJvcHMsXG4gIHR5cGUgSW5zdGFuY2VEYXRhYmFzZVByb3BzLFxuICB0eXBlIER5bmFtb0RCRGF0YWJhc2VQcm9wc1xufSBmcm9tIFwiLi9kYXRhYmFzZS5qc1wiO1xuaW1wb3J0IHtcbiAgQ29tcHV0ZUZhY3RvcnksXG4gIHR5cGUgTGFtYmRhQ29tcHV0ZSxcbiAgSW52b2tlTW9kZSxcbiAgdHlwZSBDb2RlTGFtYmRhUHJvcHNcbn0gZnJvbSBcIi4vY29tcHV0ZS5qc1wiO1xuaW1wb3J0IHtcbiAgU3RvcmFnZUZhY3RvcnksXG4gIHR5cGUgUHJpdmF0ZVN0b3JhZ2UsXG4gIHR5cGUgUHJpdmF0ZVMzUHJvcHNcbn0gZnJvbSBcIi4vc3RvcmFnZS5qc1wiO1xuaW1wb3J0IHtcbiAgTWVzc2FnaW5nRmFjdG9yeSxcbiAgdHlwZSBRdWV1ZU1lc3NhZ2luZyxcbiAgdHlwZSBJUXVldWVQcm9wc1xufSBmcm9tIFwiLi9tZXNzYWdpbmcuanNcIjtcbmltcG9ydCB7IENkbkZhY3RvcnksIHR5cGUgQ2RuLCB0eXBlIFNtYXJ0Q2RuUHJvcHMgfSBmcm9tIFwiLi9jZG4uanNcIjtcbmltcG9ydCB7IEZqYWxsTG9nZ2VyIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3ZhbGlkYXRpb25Mb2dnZXIuanNcIjtcblxuY29uc3QgUEFZTE9BRF9ERUZBVUxUUyA9IHtcbiAgLyoqIFBhdGggdG8gT3Blbk5leHQgb3V0cHV0IHJlbGF0aXZlIHRvIGFwcCBmb2xkZXIgKENESyBydW5zIGZyb20gZmphbGwvPGFwcG5hbWU+KSAqL1xuICBTT1VSQ0U6IFwiLi4vLi5cIixcbiAgREFUQUJBU0U6IHtcbiAgICBUWVBFOiBcIkluc3RhbmNlXCIgYXMgY29uc3QsXG4gICAgQkFDS1VQX1JFVEVOVElPTjogNyxcbiAgICBERUxFVElPTl9QUk9URUNUSU9OOiB0cnVlXG4gIH0sXG4gIENPTVBVVEU6IHtcbiAgICBTRVJWRVJfTUVNT1JZOiAxNTM2LFxuICAgIFNFUlZFUl9USU1FT1VUOiAzMCxcbiAgICBJTUFHRV9NRU1PUlk6IDE1MzYsXG4gICAgSU1BR0VfVElNRU9VVDogMzAsXG4gICAgUkVWQUxJREFUSU9OX01FTU9SWTogNzY4LFxuICAgIFJFVkFMSURBVElPTl9USU1FT1VUOiAzMDBcbiAgfSxcbiAgQ0FDSEU6IHtcbiAgICBNQVhfQUdFX1NFQ09ORFM6IDMxNTM2MDAwIC8vIDEgeWVhclxuICB9LFxuICBQQVRIUzoge1xuICAgIFNUQVRJQzogXCIvX25leHQvc3RhdGljLypcIixcbiAgICBJTUFHRTogXCIvX25leHQvaW1hZ2UqXCIsXG4gICAgQVBJOiBcIi9hcGkvKlwiLFxuICAgIEFETUlOOiBcIi9hZG1pbi8qXCJcbiAgfVxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBDb252ZXJ0IGEgbmFtZSB0byBhIHZhbGlkIGRhdGFiYXNlIG5hbWUgKHNuYWtlX2Nhc2UsIGFscGhhbnVtZXJpYyBvbmx5KS5cbiAqL1xuZnVuY3Rpb24gdG9WYWxpZERhdGFiYXNlTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbmFtZVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoLy0vZywgXCJfXCIpXG4gICAgLnJlcGxhY2UoL1teYS16MC05X10vZywgXCJcIik7XG59XG5cbi8qKlxuICogQ29udmVydCBhIG5hbWUgdG8gUGFzY2FsQ2FzZSBmb3IgY29uc3RydWN0IElEcy5cbiAqL1xuZnVuY3Rpb24gdG9QYXNjYWxDYXNlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBuYW1lXG4gICAgLnJlcGxhY2UoL1stX10oLikvZywgKF8sIGMpID0+IGMudG9VcHBlckNhc2UoKSlcbiAgICAucmVwbGFjZSgvXi4vLCAoYykgPT4gYy50b1VwcGVyQ2FzZSgpKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHJvb3QgZG9tYWluIGZyb20gYSBmdWxsIGRvbWFpbiBuYW1lLlxuICogZS5nLiwgXCJjbXMuZXhhbXBsZS5jb21cIiAtPiBcImV4YW1wbGUuY29tXCJcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFJvb3REb21haW4oZG9tYWluOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0cyA9IGRvbWFpbi5zcGxpdChcIi5cIik7XG4gIHJldHVybiBwYXJ0cy5sZW5ndGggPiAyID8gcGFydHMuc2xpY2UoLTIpLmpvaW4oXCIuXCIpIDogZG9tYWluO1xufVxuXG4vKipcbiAqIFNhZmVseSBnZXQgdGhlIHVuZGVybHlpbmcgTGFtYmRhIGZ1bmN0aW9uIGZyb20gYSBjb21wdXRlIHJlc291cmNlLlxuICogVGhyb3dzIGEgY2xlYXIgZXJyb3IgaWYgdGhlIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVGdW5jdGlvbihjb21wdXRlOiBMYW1iZGFDb21wdXRlLCBuYW1lOiBzdHJpbmcpOiBJRnVuY3Rpb24ge1xuICBjb25zdCBmbiA9IGNvbXB1dGUuZ2V0RnVuY3Rpb24oKTtcbiAgaWYgKCFmbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke25hbWV9IExhbWJkYSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLiBgICtcbiAgICAgICAgXCJUaGlzIGluZGljYXRlcyBhbiBpbnRlcm5hbCBlcnJvciBpbiBjb21wdXRlIHJlc291cmNlIGNyZWF0aW9uLlwiXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZm47XG59XG5cbi8qKlxuICogQmFzZSBkYXRhYmFzZSBwcm9wZXJ0aWVzIHNoYXJlZCBiZXR3ZWVuIEF1cm9yYSBhbmQgSW5zdGFuY2UuXG4gKiBVc2VzIFBpY2sgdG8gZXh0cmFjdCBjb21tb24gcHJvcGVydGllcyBmcm9tIHRoZSBkYXRhYmFzZSBjb25maWcuXG4gKi9cbnR5cGUgQmFzZURhdGFiYXNlUHJvcHMgPSBQaWNrPFxuICBJbnN0YW5jZURhdGFiYXNlUHJvcHMsXG4gIHwgXCJkYXRhYmFzZU5hbWVcIlxuICB8IFwiZGF0YWJhc2VFbmdpbmVcIlxuICB8IFwiYmFja3VwUmV0ZW50aW9uXCJcbiAgfCBcImRlbGV0aW9uUHJvdGVjdGlvblwiXG4gIHwgXCJwdWJsaWNseUFjY2Vzc2libGVcIlxuICB8IFwicG9ydFwiXG4gIHwgXCJwZXJmb3JtYW5jZUluc2lnaHRzXCJcbiAgfCBcInByb3h5XCJcbiAgfCBcImNyZWRlbnRpYWxzXCJcbiAgfCBcInNuYXBzaG90SWRlbnRpZmllclwiXG4gIHwgXCJzbmFwc2hvdFVzZXJuYW1lXCJcbj47XG5cbi8qKlxuICogTGFtYmRhIGNvbmZpZ3VyYXRpb24gd2l0aCByZXNvbHZlZCBkZWZhdWx0cy5cbiAqL1xuaW50ZXJmYWNlIFJlc29sdmVkTGFtYmRhQ29uZmlnIHtcbiAgbWVtb3J5U2l6ZTogbnVtYmVyO1xuICB0aW1lb3V0OiBudW1iZXI7XG4gIGVwaGVtZXJhbFN0b3JhZ2VTaXplPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgTGFtYmRhIGNvbmZpZyBmcm9tIHByb3BzIHdpdGggZGVmYXVsdHMuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVMYW1iZGFDb25maWcoXG4gIGNvbmZpZzpcbiAgICB8IHsgbWVtb3J5U2l6ZT86IG51bWJlcjsgdGltZW91dD86IG51bWJlcjsgZXBoZW1lcmFsU3RvcmFnZVNpemU/OiBudW1iZXIgfVxuICAgIHwgdW5kZWZpbmVkLFxuICBkZWZhdWx0czogeyBtZW1vcnk6IG51bWJlcjsgdGltZW91dDogbnVtYmVyIH1cbik6IFJlc29sdmVkTGFtYmRhQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBtZW1vcnlTaXplOiBjb25maWc/Lm1lbW9yeVNpemUgPz8gZGVmYXVsdHMubWVtb3J5LFxuICAgIHRpbWVvdXQ6IGNvbmZpZz8udGltZW91dCA/PyBkZWZhdWx0cy50aW1lb3V0LFxuICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplOiBjb25maWc/LmVwaGVtZXJhbFN0b3JhZ2VTaXplXG4gIH07XG59XG5cbi8qKlxuICogUGF5bG9hZCBDTVMgcGF0dGVybiBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBDb21wb3NlcyBhbGwgcmVxdWlyZWQgQVdTIHJlc291cmNlcyBmb3IgYSBQYXlsb2FkIGRlcGxveW1lbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXlsb2FkIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSVBheWxvYWQge1xuICBwdWJsaWMgcmVhZG9ubHkgcGF0dGVyblR5cGUgPSBcInBheWxvYWRcIiBhcyBjb25zdDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGFwcDogQXBwO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBJUGF5bG9hZFByb3BzO1xuICBwcml2YXRlIHJlYWRvbmx5IHBhc2NhbE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBwYXlsb2FkU2VjcmV0OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBfZGF0YWJhc2UhOiBSZWxhdGlvbmFsRGF0YWJhc2U7XG4gIHByaXZhdGUgX3NlcnZlciE6IExhbWJkYUNvbXB1dGU7XG4gIHByaXZhdGUgX2ltYWdlT3B0aW1pc2F0aW9uITogTGFtYmRhQ29tcHV0ZTtcbiAgcHJpdmF0ZSBfcmV2YWxpZGF0aW9uITogTGFtYmRhQ29tcHV0ZTtcbiAgcHJpdmF0ZSBfYXNzZXRzQnVja2V0ITogUHJpdmF0ZVN0b3JhZ2U7XG4gIHByaXZhdGUgX2NhY2hlQnVja2V0ITogUHJpdmF0ZVN0b3JhZ2U7XG4gIHByaXZhdGUgX21lZGlhQnVja2V0ITogUHJpdmF0ZVN0b3JhZ2U7XG4gIHByaXZhdGUgX3RhZ0NhY2hlITogRHluYW1vREJEYXRhYmFzZTtcbiAgcHJpdmF0ZSBfcmV2YWxpZGF0aW9uUXVldWUhOiBRdWV1ZU1lc3NhZ2luZztcbiAgcHJpdmF0ZSBfY2RuITogQ2RuO1xuICBwcml2YXRlIF9yZXNvbHZlZERvbWFpbjpcbiAgICB8IHtcbiAgICAgICAgZG9tYWluTmFtZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgICAgICBjZXJ0aWZpY2F0ZTogSUNlcnRpZmljYXRlIHwgdW5kZWZpbmVkO1xuICAgICAgICBob3N0ZWRab25lOiBSZXR1cm5UeXBlPHR5cGVvZiBIb3N0ZWRab25lLmZyb21Mb29rdXA+IHwgdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGFwcDogQXBwLCBwcm9wczogSVBheWxvYWRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmFwcCA9IGFwcDtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5wYXNjYWxOYW1lID0gdG9QYXNjYWxDYXNlKHByb3BzLm5hbWUpO1xuICAgIHRoaXMucGF5bG9hZFNlY3JldCA9IHJhbmRvbUJ5dGVzKDMyKS50b1N0cmluZyhcImhleFwiKTtcblxuICAgIHRoaXMucmVnaXN0ZXJNYW5pZmVzdCgpO1xuICAgIHRoaXMudmFsaWRhdGVQcm9wcygpO1xuXG4gICAgdGhpcy5jcmVhdGVEYXRhYmFzZSgpO1xuICAgIHRoaXMuY3JlYXRlU3RvcmFnZUJ1Y2tldHMoKTtcbiAgICB0aGlzLmNyZWF0ZVRhZ0NhY2hlKCk7XG4gICAgdGhpcy5jcmVhdGVSZXZhbGlkYXRpb25RdWV1ZSgpO1xuICAgIHRoaXMuY3JlYXRlTGFtYmRhRnVuY3Rpb25zKCk7XG4gICAgdGhpcy5jcmVhdGVDZG4oKTtcbiAgICB0aGlzLmNyZWF0ZURuc1JlY29yZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3Rlck1hbmlmZXN0KCk6IHZvaWQge1xuICAgIGNvbnN0IG1hbmlmZXN0UGF0dGVybjogTWFuaWZlc3RQYXR0ZXJuID0ge1xuICAgICAgdHlwZTogXCJwYXlsb2FkXCIsXG4gICAgICBuYW1lOiB0aGlzLnByb3BzLm5hbWUsXG4gICAgICBzb3VyY2U6IFBBWUxPQURfREVGQVVMVFMuU09VUkNFXG4gICAgfTtcbiAgICB0aGlzLmFwcC5nZXRNYW5pZmVzdENvbGxlY3RvcigpLnNldFBhdHRlcm4obWFuaWZlc3RQYXR0ZXJuKTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVQcm9wcygpOiB2b2lkIHtcbiAgICBjb25zdCBkYkNvbmZpZyA9IHRoaXMucHJvcHMuZGF0YWJhc2UgPz8ge307XG4gICAgaWYgKGRiQ29uZmlnLnB1YmxpY2x5QWNjZXNzaWJsZSkge1xuICAgICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgICAgYFBheWxvYWQgZGF0YWJhc2UgJyR7dGhpcy5wcm9wcy5uYW1lfScgaXMgY29uZmlndXJlZCB3aXRoIHB1YmxpYyBhY2Nlc3NpYmlsaXR5LiBgICtcbiAgICAgICAgICBcIlRoaXMgaXMgYSBzZWN1cml0eSByaXNrIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkZXZlbG9wbWVudC5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURhdGFiYXNlKCk6IHZvaWQge1xuICAgIGNvbnN0IGRiQ29uZmlnID0gdGhpcy5wcm9wcy5kYXRhYmFzZSA/PyB7fTtcbiAgICBjb25zdCBkYXRhYmFzZVR5cGUgPSBkYkNvbmZpZy50eXBlID8/IFBBWUxPQURfREVGQVVMVFMuREFUQUJBU0UuVFlQRTtcblxuICAgIHRoaXMuX2RhdGFiYXNlID1cbiAgICAgIGRhdGFiYXNlVHlwZSA9PT0gXCJBdXJvcmFcIlxuICAgICAgICA/IHRoaXMuY3JlYXRlQXVyb3JhRGF0YWJhc2UoZGJDb25maWcpXG4gICAgICAgIDogdGhpcy5jcmVhdGVJbnN0YW5jZURhdGFiYXNlKGRiQ29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRCYXNlRGF0YWJhc2VQcm9wcyhcbiAgICBkYkNvbmZpZzogTm9uTnVsbGFibGU8SVBheWxvYWRQcm9wc1tcImRhdGFiYXNlXCJdPlxuICApOiBCYXNlRGF0YWJhc2VQcm9wcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGFiYXNlTmFtZTpcbiAgICAgICAgZGJDb25maWcuZGF0YWJhc2VOYW1lID8/IHRvVmFsaWREYXRhYmFzZU5hbWUodGhpcy5wcm9wcy5uYW1lKSxcbiAgICAgIGRhdGFiYXNlRW5naW5lOiBkYkNvbmZpZy5kYXRhYmFzZUVuZ2luZSA/PyBcInBvc3RncmVzcWxcIixcbiAgICAgIGJhY2t1cFJldGVudGlvbjpcbiAgICAgICAgZGJDb25maWcuYmFja3VwUmV0ZW50aW9uID8/IFBBWUxPQURfREVGQVVMVFMuREFUQUJBU0UuQkFDS1VQX1JFVEVOVElPTixcbiAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjpcbiAgICAgICAgZGJDb25maWcuZGVsZXRpb25Qcm90ZWN0aW9uID8/XG4gICAgICAgIFBBWUxPQURfREVGQVVMVFMuREFUQUJBU0UuREVMRVRJT05fUFJPVEVDVElPTixcbiAgICAgIHB1YmxpY2x5QWNjZXNzaWJsZTogZGJDb25maWcucHVibGljbHlBY2Nlc3NpYmxlLFxuICAgICAgcG9ydDogZGJDb25maWcucG9ydCxcbiAgICAgIHBlcmZvcm1hbmNlSW5zaWdodHM6IGRiQ29uZmlnLnBlcmZvcm1hbmNlSW5zaWdodHMsXG4gICAgICBwcm94eTogZGJDb25maWcucHJveHksXG4gICAgICBjcmVkZW50aWFsczogZGJDb25maWcuY3JlZGVudGlhbHMsXG4gICAgICBzbmFwc2hvdElkZW50aWZpZXI6IGRiQ29uZmlnLnNuYXBzaG90SWRlbnRpZmllcixcbiAgICAgIHNuYXBzaG90VXNlcm5hbWU6IGRiQ29uZmlnLnNuYXBzaG90VXNlcm5hbWVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBdXJvcmFEYXRhYmFzZShcbiAgICBkYkNvbmZpZzogTm9uTnVsbGFibGU8SVBheWxvYWRQcm9wc1tcImRhdGFiYXNlXCJdPlxuICApOiBSZWxhdGlvbmFsRGF0YWJhc2Uge1xuICAgIGNvbnN0IGF1cm9yYVByb3BzOiBBdXJvcmFEYXRhYmFzZVByb3BzID0ge1xuICAgICAgdHlwZTogXCJBdXJvcmFcIixcbiAgICAgIC4uLnRoaXMuYnVpbGRCYXNlRGF0YWJhc2VQcm9wcyhkYkNvbmZpZyksXG4gICAgICBhbGxvd2VkSXBDaWRyOiBkYkNvbmZpZy5hbGxvd2VkSXBDaWRyLFxuICAgICAgZW5jcnlwdGlvbjogZGJDb25maWcuZW5jcnlwdGlvbiBhcyBBdXJvcmFEYXRhYmFzZVByb3BzW1wiZW5jcnlwdGlvblwiXSxcbiAgICAgIHdyaXRlcjogZGJDb25maWcud3JpdGVyLFxuICAgICAgcmVhZGVyczogZGJDb25maWcucmVhZGVycyxcbiAgICAgIGFsbG93VnBjQWNjZXNzOiBkYkNvbmZpZy5hbGxvd1ZwY0FjY2VzcyxcbiAgICAgIG1vbml0b3JpbmdJbnRlcnZhbDogZGJDb25maWcubW9uaXRvcmluZ0ludGVydmFsLFxuICAgICAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6IGRiQ29uZmlnLnByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5hcHAuYWRkRGF0YWJhc2UoXG4gICAgICBEYXRhYmFzZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wYXNjYWxOYW1lfURhdGFiYXNlYCwgYXVyb3JhUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlSW5zdGFuY2VEYXRhYmFzZShcbiAgICBkYkNvbmZpZzogTm9uTnVsbGFibGU8SVBheWxvYWRQcm9wc1tcImRhdGFiYXNlXCJdPlxuICApOiBSZWxhdGlvbmFsRGF0YWJhc2Uge1xuICAgIGNvbnN0IGluc3RhbmNlUHJvcHM6IEluc3RhbmNlRGF0YWJhc2VQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwiSW5zdGFuY2VcIixcbiAgICAgIC4uLnRoaXMuYnVpbGRCYXNlRGF0YWJhc2VQcm9wcyhkYkNvbmZpZyksXG4gICAgICBwdWJsaWNseUFjY2Vzc2libGU6IGRiQ29uZmlnLnB1YmxpY2x5QWNjZXNzaWJsZSA/PyBmYWxzZSxcbiAgICAgIGluc3RhbmNlVHlwZTogZGJDb25maWcuaW5zdGFuY2VUeXBlLFxuICAgICAgYWxsb2NhdGVkU3RvcmFnZTogZGJDb25maWcuYWxsb2NhdGVkU3RvcmFnZSxcbiAgICAgIG11bHRpQXo6IGRiQ29uZmlnLm11bHRpQXosXG4gICAgICByZWFkUmVwbGljYTogZGJDb25maWcucmVhZFJlcGxpY2EsXG4gICAgICBlbmNyeXB0aW9uOiBkYkNvbmZpZy5lbmNyeXB0aW9uIGFzIEluc3RhbmNlRGF0YWJhc2VQcm9wc1tcImVuY3J5cHRpb25cIl1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwcC5hZGREYXRhYmFzZShcbiAgICAgIERhdGFiYXNlRmFjdG9yeS5idWlsZChgJHt0aGlzLnBhc2NhbE5hbWV9RGF0YWJhc2VgLCBpbnN0YW5jZVByb3BzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVN0b3JhZ2VCdWNrZXRzKCk6IHZvaWQge1xuICAgIHRoaXMuX2Fzc2V0c0J1Y2tldCA9IHRoaXMuY3JlYXRlQXNzZXRzQnVja2V0KCk7XG4gICAgdGhpcy5fY2FjaGVCdWNrZXQgPSB0aGlzLmNyZWF0ZUNhY2hlQnVja2V0KCk7XG4gICAgdGhpcy5fbWVkaWFCdWNrZXQgPSB0aGlzLmNyZWF0ZU1lZGlhQnVja2V0KCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUFzc2V0c0J1Y2tldCgpOiBQcml2YXRlU3RvcmFnZSB7XG4gICAgY29uc3QgYXNzZXRzQ29uZmlnID0gdGhpcy5wcm9wcy5zdG9yYWdlPy5hc3NldHMgPz8ge307XG4gICAgY29uc3QgYXNzZXRzUHJvcHM6IFByaXZhdGVTM1Byb3BzID0ge1xuICAgICAgYnVja2V0VHlwZTogXCJwcml2YXRlXCIsXG4gICAgICB2ZXJzaW9uZWQ6IGFzc2V0c0NvbmZpZy52ZXJzaW9uZWQgPz8gZmFsc2UsXG4gICAgICBkZXBsb3ltZW50OiB7XG4gICAgICAgIHNvdXJjZTogYCR7UEFZTE9BRF9ERUZBVUxUUy5TT1VSQ0V9Ly5vcGVuLW5leHQvYXNzZXRzYCxcbiAgICAgICAgcHJ1bmU6IHRydWUsXG4gICAgICAgIGNhY2hlQ29udHJvbDoge1xuICAgICAgICAgIG1heEFnZTogUEFZTE9BRF9ERUZBVUxUUy5DQUNIRS5NQVhfQUdFX1NFQ09ORFMsXG4gICAgICAgICAgaW1tdXRhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwcC5hZGRTdG9yYWdlKFxuICAgICAgU3RvcmFnZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wYXNjYWxOYW1lfUFzc2V0c2AsIGFzc2V0c1Byb3BzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNhY2hlQnVja2V0KCk6IFByaXZhdGVTdG9yYWdlIHtcbiAgICBjb25zdCBjYWNoZUNvbmZpZyA9IHRoaXMucHJvcHMuc3RvcmFnZT8uY2FjaGUgPz8ge307XG4gICAgY29uc3QgY2FjaGVQcm9wczogUHJpdmF0ZVMzUHJvcHMgPSB7XG4gICAgICBidWNrZXRUeXBlOiBcInByaXZhdGVcIixcbiAgICAgIHZlcnNpb25lZDogY2FjaGVDb25maWcudmVyc2lvbmVkID8/IGZhbHNlLFxuICAgICAgZGVwbG95bWVudDoge1xuICAgICAgICBzb3VyY2U6IGAke1BBWUxPQURfREVGQVVMVFMuU09VUkNFfS8ub3Blbi1uZXh0L2NhY2hlYCxcbiAgICAgICAgcHJ1bmU6IGZhbHNlIC8vIElTUiBhZGRzIGZpbGVzIGF0IHJ1bnRpbWVcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwcC5hZGRTdG9yYWdlKFxuICAgICAgU3RvcmFnZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wYXNjYWxOYW1lfUNhY2hlYCwgY2FjaGVQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVNZWRpYUJ1Y2tldCgpOiBQcml2YXRlU3RvcmFnZSB7XG4gICAgY29uc3QgbWVkaWFDb25maWcgPSB0aGlzLnByb3BzLnN0b3JhZ2U/Lm1lZGlhID8/IHt9O1xuICAgIGNvbnN0IG1lZGlhUHJvcHM6IFByaXZhdGVTM1Byb3BzID0ge1xuICAgICAgYnVja2V0VHlwZTogXCJwcml2YXRlXCIsXG4gICAgICB2ZXJzaW9uZWQ6IG1lZGlhQ29uZmlnLnZlcnNpb25lZCA/PyBmYWxzZVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuYXBwLmFkZFN0b3JhZ2UoXG4gICAgICBTdG9yYWdlRmFjdG9yeS5idWlsZChgJHt0aGlzLnBhc2NhbE5hbWV9TWVkaWFgLCBtZWRpYVByb3BzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVRhZ0NhY2hlKCk6IHZvaWQge1xuICAgIGNvbnN0IHRhZ0NhY2hlUHJvcHM6IER5bmFtb0RCRGF0YWJhc2VQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwiRHluYW1vREJcIixcbiAgICAgIHBhcnRpdGlvbktleTogeyBuYW1lOiBcInRhZ1wiLCB0eXBlOiBcIlNcIiB9LFxuICAgICAgc29ydEtleTogeyBuYW1lOiBcInBhdGhcIiwgdHlwZTogXCJTXCIgfSxcbiAgICAgIGdsb2JhbFNlY29uZGFyeUluZGV4ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGluZGV4TmFtZTogXCJyZXZhbGlkYXRlXCIsXG4gICAgICAgICAgcGFydGl0aW9uS2V5OiB7IG5hbWU6IFwicGF0aFwiLCB0eXBlOiBcIlNcIiB9LFxuICAgICAgICAgIHNvcnRLZXk6IHsgbmFtZTogXCJyZXZhbGlkYXRlZEF0XCIsIHR5cGU6IFwiTlwiIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gICAgdGhpcy5fdGFnQ2FjaGUgPSB0aGlzLmFwcC5hZGREYXRhYmFzZShcbiAgICAgIERhdGFiYXNlRmFjdG9yeS5idWlsZChgJHt0aGlzLnBhc2NhbE5hbWV9VGFnQ2FjaGVgLCB0YWdDYWNoZVByb3BzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJldmFsaWRhdGlvblF1ZXVlKCk6IHZvaWQge1xuICAgIGNvbnN0IHF1ZXVlQ29uZmlnID0gdGhpcy5wcm9wcy5tZXNzYWdpbmc/LnJldmFsaWRhdGlvblF1ZXVlID8/IHt9O1xuICAgIGNvbnN0IHJldmFsaWRhdGlvblRpbWVvdXQgPVxuICAgICAgdGhpcy5wcm9wcy5jb21wdXRlPy5yZXZhbGlkYXRpb24/LnRpbWVvdXQgPz9cbiAgICAgIFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5SRVZBTElEQVRJT05fVElNRU9VVDtcblxuICAgIC8vIFJlc29sdmUgZGVhZCBsZXR0ZXIgcXVldWUgY29uZmlnXG4gICAgbGV0IGRscUNvbmZpZzogSVF1ZXVlUHJvcHNbXCJkZWFkTGV0dGVyUXVldWVcIl07XG4gICAgaWYgKHF1ZXVlQ29uZmlnLmRlYWRMZXR0ZXJRdWV1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIGRscUNvbmZpZyA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKHF1ZXVlQ29uZmlnLmRlYWRMZXR0ZXJRdWV1ZSkge1xuICAgICAgZGxxQ29uZmlnID0ge1xuICAgICAgICBlbmFibGVkOiBxdWV1ZUNvbmZpZy5kZWFkTGV0dGVyUXVldWUuZW5hYmxlZCA/PyB0cnVlLFxuICAgICAgICBtYXhSZWNlaXZlQ291bnQ6IHF1ZXVlQ29uZmlnLmRlYWRMZXR0ZXJRdWV1ZS5tYXhSZWNlaXZlQ291bnQgPz8gM1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGxxQ29uZmlnID0geyBlbmFibGVkOiB0cnVlLCBtYXhSZWNlaXZlQ291bnQ6IDMgfTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWV1ZVByb3BzOiBJUXVldWVQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwicXVldWVcIixcbiAgICAgIHF1ZXVlVHlwZTogXCJmaWZvXCIsXG4gICAgICB2aXNpYmlsaXR5VGltZW91dDogcXVldWVDb25maWcudmlzaWJpbGl0eVRpbWVvdXQgPz8gcmV2YWxpZGF0aW9uVGltZW91dCxcbiAgICAgIG1lc3NhZ2VSZXRlbnRpb25QZXJpb2Q6IHF1ZXVlQ29uZmlnLm1lc3NhZ2VSZXRlbnRpb25QZXJpb2QsXG4gICAgICBtYXhNZXNzYWdlU2l6ZTogcXVldWVDb25maWcubWF4TWVzc2FnZVNpemUsXG4gICAgICBjb250ZW50QmFzZWREZWR1cGxpY2F0aW9uOiB0cnVlLFxuICAgICAgZGVhZExldHRlclF1ZXVlOiBkbHFDb25maWdcbiAgICB9O1xuICAgIHRoaXMuX3JldmFsaWRhdGlvblF1ZXVlID0gdGhpcy5hcHAuYWRkTWVzc2FnaW5nKFxuICAgICAgTWVzc2FnaW5nRmFjdG9yeS5idWlsZChgJHt0aGlzLnBhc2NhbE5hbWV9UmV2YWxpZGF0aW9uYCwgcXVldWVQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVMYW1iZGFGdW5jdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5fc2VydmVyID0gdGhpcy5jcmVhdGVTZXJ2ZXJMYW1iZGEoKTtcbiAgICB0aGlzLl9pbWFnZU9wdGltaXNhdGlvbiA9IHRoaXMuY3JlYXRlSW1hZ2VMYW1iZGEoKTtcbiAgICB0aGlzLl9yZXZhbGlkYXRpb24gPSB0aGlzLmNyZWF0ZVJldmFsaWRhdGlvbkxhbWJkYSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTZXJ2ZXJMYW1iZGEoKTogTGFtYmRhQ29tcHV0ZSB7XG4gICAgY29uc3QgeyBtZW1vcnlTaXplLCB0aW1lb3V0LCBlcGhlbWVyYWxTdG9yYWdlU2l6ZSB9ID0gcmVzb2x2ZUxhbWJkYUNvbmZpZyhcbiAgICAgIHRoaXMucHJvcHMuY29tcHV0ZT8uc2VydmVyLFxuICAgICAge1xuICAgICAgICBtZW1vcnk6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5TRVJWRVJfTUVNT1JZLFxuICAgICAgICB0aW1lb3V0OiBQQVlMT0FEX0RFRkFVTFRTLkNPTVBVVEUuU0VSVkVSX1RJTUVPVVRcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3Qgc2VydmVyUHJvcHM6IENvZGVMYW1iZGFQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwibGFtYmRhXCIsXG4gICAgICBkZXBsb3ltZW50OiBcImNvZGVcIixcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KFxuICAgICAgICBgJHtQQVlMT0FEX0RFRkFVTFRTLlNPVVJDRX0vLm9wZW4tbmV4dC9zZXJ2ZXItZnVuY3Rpb25zL2RlZmF1bHRgXG4gICAgICApLFxuICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMl9YLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgbWVtb3J5U2l6ZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlcGhlbWVyYWxTdG9yYWdlU2l6ZSxcbiAgICAgIGZ1bmN0aW9uVXJsOiB7XG4gICAgICAgIGF1dGhUeXBlOiBGdW5jdGlvblVybEF1dGhUeXBlLk5PTkUsXG4gICAgICAgIGludm9rZU1vZGU6IEludm9rZU1vZGUuUkVTUE9OU0VfU1RSRUFNXG4gICAgICB9LFxuICAgICAgY29ubmVjdGlvbnM6IFt0aGlzLl9kYXRhYmFzZV0sXG4gICAgICBzZWNyZXRzSW1wb3J0OiB7XG4gICAgICAgIERBVEFCQVNFX1VTRVJOQU1FOiB0aGlzLl9kYXRhYmFzZVxuICAgICAgICAgIC5nZXRDcmVkZW50aWFscygpXG4gICAgICAgICAgLmdldEltcG9ydChcInVzZXJuYW1lXCIpLFxuICAgICAgICBEQVRBQkFTRV9QQVNTV09SRDogdGhpcy5fZGF0YWJhc2UuZ2V0Q3JlZGVudGlhbHMoKS5nZXRJbXBvcnQoXCJwYXNzd29yZFwiKVxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLmJ1aWxkU2VydmVyRW52aXJvbm1lbnQoKVxuICAgIH07XG5cbiAgICBjb25zdCBzZXJ2ZXIgPSB0aGlzLmFwcC5hZGRDb21wdXRlKFxuICAgICAgQ29tcHV0ZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wYXNjYWxOYW1lfVNlcnZlcmAsIHNlcnZlclByb3BzKVxuICAgICk7XG5cbiAgICB0aGlzLmdyYW50U2VydmVyUGVybWlzc2lvbnMoc2VydmVyKTtcbiAgICByZXR1cm4gc2VydmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFNlcnZlckVudmlyb25tZW50KCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IGJhc2VFbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBEQVRBQkFTRV9IT1NUOiB0aGlzLl9kYXRhYmFzZS5nZXRIb3N0RW5kcG9pbnQoKSxcbiAgICAgIERBVEFCQVNFX1BPUlQ6IHRoaXMuX2RhdGFiYXNlLmdldEhvc3RQb3J0KCksXG4gICAgICBEQVRBQkFTRV9OQU1FOiB0aGlzLl9kYXRhYmFzZS5nZXREYXRhYmFzZU5hbWUoKSxcbiAgICAgIERBVEFCQVNFX1NTTDogXCJ0cnVlXCIsXG4gICAgICBDQUNIRV9CVUNLRVRfTkFNRTogdGhpcy5fY2FjaGVCdWNrZXQuZ2V0QnVja2V0TmFtZSgpLFxuICAgICAgQ0FDSEVfQlVDS0VUX1JFR0lPTjogdGhpcy5hcHAucmVnaW9uID8/IFwidXMtZWFzdC0xXCIsXG4gICAgICBDQUNIRV9EWU5BTU9fVEFCTEU6IHRoaXMuX3RhZ0NhY2hlLmdldFRhYmxlTmFtZSgpLFxuICAgICAgUkVWQUxJREFUSU9OX1FVRVVFX1VSTDogdGhpcy5fcmV2YWxpZGF0aW9uUXVldWUuZ2V0UXVldWVVcmwoKSxcbiAgICAgIFJFVkFMSURBVElPTl9RVUVVRV9SRUdJT046IHRoaXMuYXBwLnJlZ2lvbiA/PyBcInVzLWVhc3QtMVwiLFxuICAgICAgTUVESUFfQlVDS0VUX05BTUU6IHRoaXMuX21lZGlhQnVja2V0LmdldEJ1Y2tldE5hbWUoKSxcbiAgICAgIFBBWUxPQURfU0VDUkVUOiB0aGlzLnBheWxvYWRTZWNyZXRcbiAgICB9O1xuXG4gICAgLy8gTG9jayBkb3duIENPUlMgdG8gY3VzdG9tIGRvbWFpbiB3aGVuIHByb3ZpZGVkXG4gICAgY29uc3QgY3VzdG9tRG9tYWluID0gdGhpcy5wcm9wcy5jZG4/LmRvbWFpbk5hbWVzPy5bMF07XG4gICAgaWYgKGN1c3RvbURvbWFpbikge1xuICAgICAgYmFzZUVudi5ORVhUX1BVQkxJQ19TRVJWRVJfVVJMID0gYGh0dHBzOi8vJHtjdXN0b21Eb21haW59YDtcbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi5iYXNlRW52LCAuLi50aGlzLnByb3BzLmVudmlyb25tZW50IH07XG4gIH1cblxuICBwcml2YXRlIGdyYW50U2VydmVyUGVybWlzc2lvbnMoc2VydmVyOiBMYW1iZGFDb21wdXRlKTogdm9pZCB7XG4gICAgY29uc3Qgc2VydmVyRnVuY3Rpb24gPSByZXF1aXJlRnVuY3Rpb24oc2VydmVyLCBcIlNlcnZlclwiKTtcbiAgICB0aGlzLl9jYWNoZUJ1Y2tldC5ncmFudFJlYWRXcml0ZShzZXJ2ZXJGdW5jdGlvbik7XG4gICAgdGhpcy5fbWVkaWFCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoc2VydmVyRnVuY3Rpb24pO1xuICAgIHRoaXMuX3RhZ0NhY2hlLmdyYW50UmVhZFdyaXRlRGF0YShzZXJ2ZXJGdW5jdGlvbik7XG4gICAgdGhpcy5fcmV2YWxpZGF0aW9uUXVldWUuZ3JhbnRTZW5kTWVzc2FnZXMoc2VydmVyRnVuY3Rpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVJbWFnZUxhbWJkYSgpOiBMYW1iZGFDb21wdXRlIHtcbiAgICBjb25zdCB7IG1lbW9yeVNpemUsIHRpbWVvdXQsIGVwaGVtZXJhbFN0b3JhZ2VTaXplIH0gPSByZXNvbHZlTGFtYmRhQ29uZmlnKFxuICAgICAgdGhpcy5wcm9wcy5jb21wdXRlPy5pbWFnZU9wdGltaXNhdGlvbixcbiAgICAgIHtcbiAgICAgICAgbWVtb3J5OiBQQVlMT0FEX0RFRkFVTFRTLkNPTVBVVEUuSU1BR0VfTUVNT1JZLFxuICAgICAgICB0aW1lb3V0OiBQQVlMT0FEX0RFRkFVTFRTLkNPTVBVVEUuSU1BR0VfVElNRU9VVFxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBpbWFnZVByb3BzOiBDb2RlTGFtYmRhUHJvcHMgPSB7XG4gICAgICB0eXBlOiBcImxhbWJkYVwiLFxuICAgICAgZGVwbG95bWVudDogXCJjb2RlXCIsXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChcbiAgICAgICAgYCR7UEFZTE9BRF9ERUZBVUxUUy5TT1VSQ0V9Ly5vcGVuLW5leHQvaW1hZ2Utb3B0aW1pemF0aW9uLWZ1bmN0aW9uYFxuICAgICAgKSxcbiAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjJfWCxcbiAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIG1lbW9yeVNpemUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZXBoZW1lcmFsU3RvcmFnZVNpemUsXG4gICAgICBmdW5jdGlvblVybDogeyBhdXRoVHlwZTogRnVuY3Rpb25VcmxBdXRoVHlwZS5OT05FIH0sXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBCVUNLRVRfTkFNRTogdGhpcy5fYXNzZXRzQnVja2V0LmdldEJ1Y2tldE5hbWUoKSxcbiAgICAgICAgQlVDS0VUX0tFWV9QUkVGSVg6IFwiX2Fzc2V0c1wiXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGltYWdlID0gdGhpcy5hcHAuYWRkQ29tcHV0ZShcbiAgICAgIENvbXB1dGVGYWN0b3J5LmJ1aWxkKGAke3RoaXMucGFzY2FsTmFtZX1JbWFnZU9wdGltaXNhdGlvbmAsIGltYWdlUHJvcHMpXG4gICAgKTtcblxuICAgIGNvbnN0IGltYWdlRnVuY3Rpb24gPSByZXF1aXJlRnVuY3Rpb24oaW1hZ2UsIFwiSW1hZ2VPcHRpbWlzYXRpb25cIik7XG4gICAgdGhpcy5fYXNzZXRzQnVja2V0LmdyYW50UmVhZChpbWFnZUZ1bmN0aW9uKTtcblxuICAgIHJldHVybiBpbWFnZTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUmV2YWxpZGF0aW9uTGFtYmRhKCk6IExhbWJkYUNvbXB1dGUge1xuICAgIGNvbnN0IHsgbWVtb3J5U2l6ZSwgdGltZW91dCwgZXBoZW1lcmFsU3RvcmFnZVNpemUgfSA9IHJlc29sdmVMYW1iZGFDb25maWcoXG4gICAgICB0aGlzLnByb3BzLmNvbXB1dGU/LnJldmFsaWRhdGlvbixcbiAgICAgIHtcbiAgICAgICAgbWVtb3J5OiBQQVlMT0FEX0RFRkFVTFRTLkNPTVBVVEUuUkVWQUxJREFUSU9OX01FTU9SWSxcbiAgICAgICAgdGltZW91dDogUEFZTE9BRF9ERUZBVUxUUy5DT01QVVRFLlJFVkFMSURBVElPTl9USU1FT1VUXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHJldmFsaWRhdGlvblByb3BzOiBDb2RlTGFtYmRhUHJvcHMgPSB7XG4gICAgICB0eXBlOiBcImxhbWJkYVwiLFxuICAgICAgZGVwbG95bWVudDogXCJjb2RlXCIsXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChcbiAgICAgICAgYCR7UEFZTE9BRF9ERUZBVUxUUy5TT1VSQ0V9Ly5vcGVuLW5leHQvcmV2YWxpZGF0aW9uLWZ1bmN0aW9uYFxuICAgICAgKSxcbiAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjJfWCxcbiAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIG1lbW9yeVNpemUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZXBoZW1lcmFsU3RvcmFnZVNpemUsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBDQUNIRV9EWU5BTU9fVEFCTEU6IHRoaXMuX3RhZ0NhY2hlLmdldFRhYmxlTmFtZSgpLFxuICAgICAgICBDQUNIRV9CVUNLRVRfTkFNRTogdGhpcy5fY2FjaGVCdWNrZXQuZ2V0QnVja2V0TmFtZSgpXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHJldmFsaWRhdGlvbiA9IHRoaXMuYXBwLmFkZENvbXB1dGUoXG4gICAgICBDb21wdXRlRmFjdG9yeS5idWlsZChgJHt0aGlzLnBhc2NhbE5hbWV9UmV2YWxpZGF0aW9uYCwgcmV2YWxpZGF0aW9uUHJvcHMpXG4gICAgKTtcblxuICAgIGNvbnN0IHJldmFsaWRhdGlvbkxhbWJkYSA9IHJldmFsaWRhdGlvbi5nZXRMYW1iZGFGdW5jdGlvbigpO1xuICAgIHJldmFsaWRhdGlvbkxhbWJkYS5hZGRTcXNFdmVudFNvdXJjZSh0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5nZXRRdWV1ZSgpLCB7XG4gICAgICBiYXRjaFNpemU6IDVcbiAgICB9KTtcblxuICAgIGNvbnN0IHJldmFsaWRhdGlvbkZ1bmN0aW9uID0gcmVxdWlyZUZ1bmN0aW9uKHJldmFsaWRhdGlvbiwgXCJSZXZhbGlkYXRpb25cIik7XG4gICAgdGhpcy5fdGFnQ2FjaGUuZ3JhbnRSZWFkV3JpdGVEYXRhKHJldmFsaWRhdGlvbkZ1bmN0aW9uKTtcbiAgICB0aGlzLl9jYWNoZUJ1Y2tldC5ncmFudFJlYWRXcml0ZShyZXZhbGlkYXRpb25GdW5jdGlvbik7XG4gICAgdGhpcy5fcmV2YWxpZGF0aW9uUXVldWUuZ3JhbnRDb25zdW1lTWVzc2FnZXMocmV2YWxpZGF0aW9uRnVuY3Rpb24pO1xuXG4gICAgcmV0dXJuIHJldmFsaWRhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2RuKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZG9tYWluTmFtZXMsIGNlcnRpZmljYXRlIH0gPSB0aGlzLnJlc29sdmVEb21haW5Db25maWcoKTtcblxuICAgIGNvbnN0IGNkblByb3BzOiBTbWFydENkblByb3BzID0ge1xuICAgICAgb3JpZ2luVHlwZTogXCJhdXRvXCIsXG4gICAgICBvcmlnaW46IHRoaXMuX3NlcnZlcixcbiAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfRElTQUJMRURcIixcbiAgICAgIGRlZmF1bHRBbGxvd2VkTWV0aG9kczogXCJBTExcIixcbiAgICAgIGZvcndhcmRIb3N0SGVhZGVyOiB0cnVlLFxuICAgICAgcHJpY2VDbGFzczogXCJQcmljZUNsYXNzXzEwMFwiLFxuICAgICAgZG9tYWluTmFtZXMsXG4gICAgICBjZXJ0aWZpY2F0ZSxcbiAgICAgIGJlaGF2aW91cnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLlNUQVRJQyxcbiAgICAgICAgICBvcmlnaW46IHRoaXMuX2Fzc2V0c0J1Y2tldCxcbiAgICAgICAgICBjYWNoZVBvbGljeTogXCJDQUNISU5HX09QVElNSVpFRFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXRoUGF0dGVybjogUEFZTE9BRF9ERUZBVUxUUy5QQVRIUy5JTUFHRSxcbiAgICAgICAgICBvcmlnaW46IHRoaXMuX2ltYWdlT3B0aW1pc2F0aW9uLFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfT1BUSU1JWkVEXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLkFQSSxcbiAgICAgICAgICBvcmlnaW46IHRoaXMuX3NlcnZlcixcbiAgICAgICAgICBjYWNoZVBvbGljeTogXCJDQUNISU5HX0RJU0FCTEVEXCIsXG4gICAgICAgICAgYWxsb3dlZE1ldGhvZHM6IFwiQUxMXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLkFETUlOLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5fc2VydmVyLFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfRElTQUJMRURcIixcbiAgICAgICAgICBhbGxvd2VkTWV0aG9kczogXCJBTExcIlxuICAgICAgICB9LFxuICAgICAgICAuLi4odGhpcy5wcm9wcy5jZG4/LmJlaGF2aW91cnMgPz8gW10pXG4gICAgICBdXG4gICAgfTtcblxuICAgIHRoaXMuX2NkbiA9IHRoaXMuYXBwLmFkZENkbihcbiAgICAgIENkbkZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wYXNjYWxOYW1lfUNkbmAsIGNkblByb3BzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVEb21haW5Db25maWcoKToge1xuICAgIGRvbWFpbk5hbWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgICBjZXJ0aWZpY2F0ZTogSUNlcnRpZmljYXRlIHwgdW5kZWZpbmVkO1xuICAgIGhvc3RlZFpvbmU6IFJldHVyblR5cGU8dHlwZW9mIEhvc3RlZFpvbmUuZnJvbUxvb2t1cD4gfCB1bmRlZmluZWQ7XG4gIH0ge1xuICAgIGlmICh0aGlzLl9yZXNvbHZlZERvbWFpbikgcmV0dXJuIHRoaXMuX3Jlc29sdmVkRG9tYWluO1xuXG4gICAgaWYgKHRoaXMucHJvcHMuZG9tYWluKSB7XG4gICAgICB0aGlzLl9yZXNvbHZlZERvbWFpbiA9IHRoaXMucmVzb2x2ZVNpbXBsZURvbWFpbigpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5jZG4/LmRvbWFpbk5hbWVzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3Jlc29sdmVkRG9tYWluID0gdGhpcy5yZXNvbHZlQWR2YW5jZWREb21haW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcmVzb2x2ZWREb21haW4gPSB7XG4gICAgICAgIGRvbWFpbk5hbWVzOiB1bmRlZmluZWQsXG4gICAgICAgIGNlcnRpZmljYXRlOiB1bmRlZmluZWQsXG4gICAgICAgIGhvc3RlZFpvbmU6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZWREb21haW47XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVTaW1wbGVEb21haW4oKToge1xuICAgIGRvbWFpbk5hbWVzOiBzdHJpbmdbXTtcbiAgICBjZXJ0aWZpY2F0ZTogSUNlcnRpZmljYXRlO1xuICAgIGhvc3RlZFpvbmU6IFJldHVyblR5cGU8dHlwZW9mIEhvc3RlZFpvbmUuZnJvbUxvb2t1cD47XG4gIH0ge1xuICAgIGNvbnN0IGRvbWFpbiA9IHRoaXMucHJvcHMuZG9tYWluITtcbiAgICBjb25zdCByb290RG9tYWluID0gZXh0cmFjdFJvb3REb21haW4oZG9tYWluKTtcblxuICAgIGNvbnN0IGhvc3RlZFpvbmUgPSBIb3N0ZWRab25lLmZyb21Mb29rdXAoXG4gICAgICB0aGlzLFxuICAgICAgYCR7dGhpcy5wYXNjYWxOYW1lfUhvc3RlZFpvbmVgLFxuICAgICAgeyBkb21haW5OYW1lOiByb290RG9tYWluIH1cbiAgICApO1xuXG4gICAgY29uc3QgY2VydGlmaWNhdGUgPSBuZXcgQ2VydGlmaWNhdGUodGhpcywgYCR7dGhpcy5wYXNjYWxOYW1lfUNlcnRpZmljYXRlYCwge1xuICAgICAgZG9tYWluTmFtZTogZG9tYWluLFxuICAgICAgdmFsaWRhdGlvbjogQ2VydGlmaWNhdGVWYWxpZGF0aW9uLmZyb21EbnMoaG9zdGVkWm9uZSlcbiAgICB9KTtcblxuICAgIHJldHVybiB7IGRvbWFpbk5hbWVzOiBbZG9tYWluXSwgY2VydGlmaWNhdGUsIGhvc3RlZFpvbmUgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUFkdmFuY2VkRG9tYWluKCk6IHtcbiAgICBkb21haW5OYW1lczogc3RyaW5nW107XG4gICAgY2VydGlmaWNhdGU6IElDZXJ0aWZpY2F0ZSB8IHVuZGVmaW5lZDtcbiAgICBob3N0ZWRab25lOiB1bmRlZmluZWQ7XG4gIH0ge1xuICAgIGNvbnN0IGNkbkNvbmZpZyA9IHRoaXMucHJvcHMuY2RuITtcbiAgICBjb25zdCBjZXJ0aWZpY2F0ZSA9XG4gICAgICBjZG5Db25maWcuY2VydGlmaWNhdGUgPz9cbiAgICAgIChjZG5Db25maWcuY2VydGlmaWNhdGVBcm5cbiAgICAgICAgPyBDZXJ0aWZpY2F0ZS5mcm9tQ2VydGlmaWNhdGVBcm4oXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgYCR7dGhpcy5wYXNjYWxOYW1lfUNlcnRpZmljYXRlYCxcbiAgICAgICAgICAgIGNkbkNvbmZpZy5jZXJ0aWZpY2F0ZUFyblxuICAgICAgICAgIClcbiAgICAgICAgOiB1bmRlZmluZWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRvbWFpbk5hbWVzOiBjZG5Db25maWcuZG9tYWluTmFtZXMhLFxuICAgICAgY2VydGlmaWNhdGUsXG4gICAgICBob3N0ZWRab25lOiB1bmRlZmluZWRcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEbnNSZWNvcmQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLmRvbWFpbikgcmV0dXJuO1xuXG4gICAgY29uc3QgeyBob3N0ZWRab25lIH0gPSB0aGlzLnJlc29sdmVEb21haW5Db25maWcoKTtcbiAgICBpZiAoIWhvc3RlZFpvbmUpIHJldHVybjtcblxuICAgIC8vIENyZWF0ZSB0aGUgRE5TIHJlY29yZCBpbiB0aGUgQ0ROIHN0YWNrIChub3QgdGhlIENvbXB1dGUgc3RhY2sgd2hlcmUgdGhpc1xuICAgIC8vIFBheWxvYWQgY29uc3RydWN0IGxpdmVzKSB0byBhdm9pZCBhIGN5Y2xpYyBkZXBlbmRlbmN5OiBDRE4gcmVmZXJlbmNlcyB0aGVcbiAgICAvLyBzZXJ2ZXIgTGFtYmRhIEZ1bmN0aW9uVXJsLCBzbyBDb21wdXRlIGNhbm5vdCBhbHNvIGRlcGVuZCBvbiBDRE4uXG4gICAgY29uc3QgY2RuU3RhY2sgPSB0aGlzLmFwcC5nZXREZWZhdWx0Q2RuU3RhY2soKS5nZXRTdGFjaygpO1xuICAgIG5ldyBBUmVjb3JkKGNkblN0YWNrLCBgJHt0aGlzLnBhc2NhbE5hbWV9QWxpYXNSZWNvcmRgLCB7XG4gICAgICB6b25lOiBob3N0ZWRab25lLFxuICAgICAgcmVjb3JkTmFtZTogdGhpcy5wcm9wcy5kb21haW4sXG4gICAgICB0YXJnZXQ6IFJlY29yZFRhcmdldC5mcm9tQWxpYXMoXG4gICAgICAgIG5ldyBDbG91ZEZyb250VGFyZ2V0KHRoaXMuX2Nkbi5nZXREaXN0cmlidXRpb24oKSlcbiAgICAgIClcbiAgICB9KTtcbiAgfVxuXG4gIGdldERhdGFiYXNlKCk6IFJlbGF0aW9uYWxEYXRhYmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFiYXNlO1xuICB9XG5cbiAgZ2V0U2VydmVyKCk6IExhbWJkYUNvbXB1dGUge1xuICAgIHJldHVybiB0aGlzLl9zZXJ2ZXI7XG4gIH1cblxuICBnZXRJbWFnZU9wdGltaXNhdGlvbigpOiBMYW1iZGFDb21wdXRlIHtcbiAgICByZXR1cm4gdGhpcy5faW1hZ2VPcHRpbWlzYXRpb247XG4gIH1cblxuICBnZXRSZXZhbGlkYXRpb24oKTogTGFtYmRhQ29tcHV0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3JldmFsaWRhdGlvbjtcbiAgfVxuXG4gIGdldEFzc2V0c0J1Y2tldCgpOiBQcml2YXRlU3RvcmFnZSB7XG4gICAgcmV0dXJuIHRoaXMuX2Fzc2V0c0J1Y2tldDtcbiAgfVxuXG4gIGdldENhY2hlQnVja2V0KCk6IFByaXZhdGVTdG9yYWdlIHtcbiAgICByZXR1cm4gdGhpcy5fY2FjaGVCdWNrZXQ7XG4gIH1cblxuICBnZXRNZWRpYUJ1Y2tldCgpOiBQcml2YXRlU3RvcmFnZSB7XG4gICAgcmV0dXJuIHRoaXMuX21lZGlhQnVja2V0O1xuICB9XG5cbiAgZ2V0VGFnQ2FjaGUoKTogRHluYW1vREJEYXRhYmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhZ0NhY2hlO1xuICB9XG5cbiAgZ2V0UmV2YWxpZGF0aW9uUXVldWUoKTogUXVldWVNZXNzYWdpbmcge1xuICAgIHJldHVybiB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZTtcbiAgfVxuXG4gIGdldENkbigpOiBDZG4ge1xuICAgIHJldHVybiB0aGlzLl9jZG47XG4gIH1cbn1cbiJdfQ==
|
|
@@ -203,9 +203,11 @@ class EcsCluster extends constructs_1.Construct {
|
|
|
203
203
|
getUrl() {
|
|
204
204
|
if (!this.loadBalancer)
|
|
205
205
|
return undefined;
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
-
|
|
206
|
+
const customDomain = this.props.cluster?.domain ||
|
|
207
|
+
this.props.cluster?.domainConfig?.domainName;
|
|
208
|
+
if (customDomain)
|
|
209
|
+
return `https://${customDomain}`;
|
|
210
|
+
return `http://${this.loadBalancer.loadBalancerDnsName}`;
|
|
209
211
|
}
|
|
210
212
|
/**
|
|
211
213
|
* Add a service to the cluster.
|
|
@@ -945,10 +947,13 @@ class EcsCluster extends constructs_1.Construct {
|
|
|
945
947
|
exportName: `${props.clusterName}LoadBalancerDnsName`,
|
|
946
948
|
value: this.loadBalancer.loadBalancerDnsName
|
|
947
949
|
});
|
|
950
|
+
const customDomain = props.cluster?.domain || props.cluster?.domainConfig?.domainName;
|
|
948
951
|
new aws_cdk_lib_1.CfnOutput(this, `${props.clusterName}LoadBalancerUrl`, {
|
|
949
952
|
key: `${props.clusterName}LoadBalancerUrl`,
|
|
950
953
|
exportName: `${props.clusterName}LoadBalancerUrl`,
|
|
951
|
-
value:
|
|
954
|
+
value: customDomain
|
|
955
|
+
? `https://${customDomain}`
|
|
956
|
+
: `http://${this.loadBalancer.loadBalancerDnsName}`,
|
|
952
957
|
description: `Load Balancer URL for ${props.clusterName}`
|
|
953
958
|
});
|
|
954
959
|
// Export load balancer ARN for monitoring
|
|
@@ -1074,4 +1079,4 @@ class EcsCluster extends constructs_1.Construct {
|
|
|
1074
1079
|
}
|
|
1075
1080
|
}
|
|
1076
1081
|
exports.default = EcsCluster;
|
|
1077
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9lY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBb0I2QjtBQUM3QixpREFTNkI7QUFDN0IsMkNBQXVDO0FBR3ZDLDZDQUFrRTtBQUVsRSx1RkFPZ0Q7QUFDaEQsaURBUTZCO0FBQzdCLHVGQUtnRDtBQUNoRCxpREFBMEQ7QUFDMUQsdUVBQXdEO0FBQ3hELGlEQUFzRDtBQUN0RCwrRUFHNEM7QUFDNUMseURBS2lDO0FBQ2pDLHlFQUFxRTtBQUNyRSxpREFBaUQ7QUFDakQsaUVBQTJFO0FBRTNFLGlFQUFpRjtBQUNqRix3REFBcUQ7QUFFckQseUVBQTBFO0FBSTFFOzs7R0FHRztBQUNILE1BQU0scUJBQXFCLEdBQUc7SUFDNUIsS0FBSztJQUNMLEtBQUs7SUFDTCxNQUFNO0lBQ04sTUFBTTtJQUNOLEtBQUs7SUFDTCxNQUFNO0lBQ04sTUFBTTtJQUNOLEtBQUs7SUFDTCxNQUFNO0lBQ04sS0FBSztJQUNMLE1BQU07SUFDTixLQUFLO0lBQ0wsTUFBTTtJQUNOLEtBQUs7SUFDTCxNQUFNO0lBQ04sSUFBSTtJQUNKLE1BQU07SUFDTixPQUFPO0lBQ1AsUUFBUTtJQUNSLEtBQUs7SUFDTCxPQUFPO0NBQ1IsQ0FBQztBQUVGOzs7Ozs7R0FNRztBQUNILFNBQVMsb0JBQW9CLENBQUMsWUFBb0I7SUFDaEQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxPQUFPLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDM0MsQ0FBQyxDQUFDLHlCQUFlLENBQUMsR0FBRztRQUNyQixDQUFDLENBQUMseUJBQWUsQ0FBQyxRQUFRLENBQUM7QUFDL0IsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLGdDQUFnQztJQUdwQyxZQUFZLE9BQW1CO1FBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBZ0I7UUFDcEIsZ0RBQWdEO1FBQ2hELElBQUksSUFBSSxZQUFZLHdCQUFjLElBQUksSUFBSSxZQUFZLG9CQUFVLEVBQUUsQ0FBQztZQUNqRSwyRUFBMkU7WUFDM0UsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO2lCQUNuQyxPQUFPLEVBQUU7aUJBQ1QsSUFBSSxDQUNILENBQUMsS0FBSyxFQUFtRCxFQUFFLENBQ3pELEtBQUssWUFBWSxnREFBc0MsQ0FDMUQsQ0FBQztZQUVKLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLHlDQUF5QztnQkFDekMseURBQXlEO2dCQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN4QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRjtBQUVELElBQVksUUFHWDtBQUhELFdBQVksUUFBUTtJQUNsQix1Q0FBSSxDQUFBO0lBQ0oseUNBQUssQ0FBQTtBQUNQLENBQUMsRUFIVyxRQUFRLHdCQUFSLFFBQVEsUUFHbkI7QUFFRCxJQUFZLFdBR1g7QUFIRCxXQUFZLFdBQVc7SUFDckIsc0RBQTBELENBQUE7SUFDMUQsNERBQWdFLENBQUE7QUFDbEUsQ0FBQyxFQUhXLFdBQVcsMkJBQVgsV0FBVyxRQUd0QjtBQWdWRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQ0c7QUFDSCxNQUFxQixVQUFXLFNBQVEsc0JBQVM7SUE4Qi9DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQWRuQix1QkFBdUI7UUFDZixhQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7UUFFbEQscUVBQXFFO1FBQzdELHlCQUFvQixHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO1FBTzlELGlCQUFZLEdBQUcsR0FBRyxDQUFDO1FBS3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLFlBQVksS0FBSyxJQUFJLENBQUM7UUFDaEUsSUFBSSxDQUFDLG9CQUFvQjtZQUN2QixLQUFLLENBQUMsT0FBTyxFQUFFLFlBQVksS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBRXBFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2QixLQUFLLE1BQU0sWUFBWSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQyxJQUFJLFlBQVksQ0FBQyxnQkFBZ0IsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3BELENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFNUIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDO2dCQUN6RCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLENBQUM7WUFFRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFFRCxLQUFLLE1BQU0sWUFBWSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV4QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0IscUJBQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksZ0NBQWdDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELDhEQUE4RDtJQUM5RCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCwrREFBK0Q7SUFDL0QsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsVUFBVSxDQUFDLElBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDMUMsQ0FBQztJQUVELHdDQUF3QztJQUN4QyxXQUFXO1FBQ1QsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQXVDLENBQUM7UUFDOUQsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxxQ0FBcUM7SUFDckMsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsNkNBQTZDO0lBQzdDLE1BQU07UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUN6QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNyRCxNQUFNLE1BQU0sR0FDVixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztRQUN0RSxPQUFPLEdBQUcsUUFBUSxNQUFNLE1BQU0sRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRDs7O09BR0c7SUFDSyxtQkFBbUIsQ0FBQyxZQUE2QjtRQUN2RCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO1FBRXRDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUVoRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQzlDLFdBQVcsRUFDWCxZQUFZLEVBQ1osYUFBYSxFQUNiLFFBQVEsQ0FDVCxDQUFDO1FBRUYsTUFBTSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FDL0QsV0FBVyxFQUNYLFlBQVksRUFDWixjQUFjLENBQ2YsQ0FBQztRQUVGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQ2hDLFdBQVcsRUFDWCxZQUFZLEVBQ1osY0FBYyxDQUNmLENBQUM7UUFFRixJQUFJLFdBQWdELENBQUM7UUFDckQsSUFDRSxDQUFDLElBQUksQ0FBQyxvQkFBb0I7WUFDMUIsZ0JBQWdCO1lBQ2hCLElBQUksQ0FBQyxvQkFBb0IsRUFDekIsQ0FBQztZQUNELFdBQVcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQ3ZDLFdBQVcsRUFDWCxZQUFZLEVBQ1osT0FBTyxFQUNQLGdCQUFnQixDQUNqQixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksYUFBc0QsQ0FBQztRQUMzRCxJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM3QixhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUNwQyxXQUFXLEVBQ1gsWUFBWSxFQUNaLE9BQU8sQ0FDUixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRTtZQUM3QixPQUFPO1lBQ1AsY0FBYztZQUNkLGFBQWE7WUFDYixRQUFRO1lBQ1IsVUFBVTtZQUNWLGdCQUFnQjtZQUNoQixXQUFXO1lBQ1gsYUFBYTtTQUNkLENBQUMsQ0FBQztRQUVILElBQUksWUFBWSxDQUFDLFdBQVcsSUFBSSxZQUFZLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwRSxJQUFJLENBQUM7Z0JBQ0gsSUFBQSxtQ0FBa0IsRUFDaEIsWUFBWSxDQUFDLFdBQVcsRUFDeEIsUUFBUSxFQUFFLHdDQUF3QztnQkFDbEQsT0FBTyxDQUFDLG1EQUFtRDtpQkFDNUQsQ0FBQztZQUNKLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0RBQWtELFdBQVcsTUFDM0QsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDdkQsRUFBRSxDQUNILENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxhQUFhLENBQUMsS0FBc0I7UUFDMUMsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25ELE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBRUQsb0NBQW9DO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUMzQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUN0RCxDQUFDO1FBQ0YsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FDYiw0QkFBNEIsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDekUsQ0FBQztRQUNKLENBQUM7UUFFRCxxREFBcUQ7UUFDckQsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3BELENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUMvQyxDQUFDO1FBRUYsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDL0QsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUM3QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUM1QyxDQUFDO1lBQ0YsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM5QixNQUFNLElBQUksS0FBSyxDQUNiLGlGQUFpRjtvQkFDL0UsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO29CQUNuRCxnREFBZ0QsQ0FDbkQsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQscUNBQXFDO1FBQ3JDLEtBQUssTUFBTSxPQUFPLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMzRCxNQUFNLElBQUksS0FBSyxDQUNiLFlBQVksT0FBTyxDQUFDLElBQUksOENBQThDLENBQ3ZFLENBQUM7WUFDSixDQUFDO1lBRUQscURBQXFEO1lBQ3JELE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0QsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUMvQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUN4RCxDQUFDO1lBQ0YsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sSUFBSSxLQUFLLENBQ2IsWUFBWSxPQUFPLENBQUMsSUFBSSxnQ0FBZ0M7b0JBQ3RELEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDcEQsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQXNCO1FBQzdDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNyQixLQUFLLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUM5QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLENBQzVCLENBQUM7WUFDRixJQUFJLGdCQUFnQixFQUFFLElBQUksRUFBRSxDQUFDO2dCQUMzQixXQUFXLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO2dCQUNwQyxNQUFNO1lBQ1IsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBcUIsRUFBRSxDQUFDO1FBRTVDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBRUQsS0FBSyxNQUFNLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDakQsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQztZQUMxRSxLQUFLLE1BQU0sRUFBRSxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUNqQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUkscUJBQVcsQ0FBQztZQUNqQyxjQUFjO1lBQ2QsV0FBVyxFQUFFLGNBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1NBQ25DLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssbUJBQW1CLENBQUMsV0FBbUI7UUFDN0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxjQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsV0FBVyxlQUFlLEVBQUU7WUFDbEUsU0FBUyxFQUFFLElBQUksMEJBQWdCLENBQUMseUJBQXlCLENBQUM7U0FDM0QsQ0FBQyxDQUFDO1FBRUgsYUFBYSxDQUFDLFdBQVcsQ0FDdkIsSUFBSSx5QkFBZSxDQUFDO1lBQ2xCLE1BQU0sRUFBRSxnQkFBTSxDQUFDLEtBQUs7WUFDcEIsT0FBTyxFQUFFO2dCQUNQLDJCQUEyQjtnQkFDM0IsaUNBQWlDO2dCQUNqQyw0QkFBNEI7Z0JBQzVCLG1CQUFtQjthQUNwQjtZQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNqQixDQUFDLENBQ0gsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxtQkFBbUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQztRQUNoSSxhQUFhLENBQUMsV0FBVyxDQUN2QixJQUFJLHlCQUFlLENBQUM7WUFDbEIsTUFBTSxFQUFFLGdCQUFNLENBQUMsS0FBSztZQUNwQixPQUFPLEVBQUU7Z0JBQ1Asc0JBQXNCO2dCQUN0QixtQkFBbUI7Z0JBQ25CLHFCQUFxQjthQUN0QjtZQUNELFNBQVMsRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLFdBQVcsSUFBSSxDQUFDO1NBQzdDLENBQUMsQ0FDSCxDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7UUFDNUQsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQ2hDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FDYiwwQkFBMEIsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sV0FBVyxVQUFVLElBQUksQ0FDckcsQ0FBQztZQUNGLGFBQWEsQ0FBQyxXQUFXLENBQ3ZCLElBQUkseUJBQWUsQ0FBQztnQkFDbEIsTUFBTSxFQUFFLGdCQUFNLENBQUMsS0FBSztnQkFDcEIsT0FBTyxFQUFFO29CQUNQLCtCQUErQjtvQkFDL0IsK0JBQStCO2lCQUNoQztnQkFDRCxTQUFTLEVBQUUsVUFBVTthQUN0QixDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUN6RCxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDckIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNqRSxDQUNGLENBQUM7UUFDRixJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN4QixNQUFNLElBQUksS0FBSyxDQUNiLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsOERBQThEO29CQUNsRywrRkFBK0YsQ0FDbEcsQ0FBQztZQUNKLENBQUM7WUFDRCxhQUFhLENBQUMsV0FBVyxDQUN2QixJQUFJLHlCQUFlLENBQUM7Z0JBQ2xCLE1BQU0sRUFBRSxnQkFBTSxDQUFDLEtBQUs7Z0JBQ3BCLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixFQUFFLGtCQUFrQixDQUFDO2dCQUNsRCxTQUFTLEVBQUUsQ0FBQyw2QkFBNkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQzthQUNqRSxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUM7UUFFRCx5RkFBeUY7UUFDekYsYUFBYSxDQUFDLFdBQVcsQ0FDdkIsSUFBSSx5QkFBZSxDQUFDO1lBQ2xCLE1BQU0sRUFBRSxnQkFBTSxDQUFDLEtBQUs7WUFDcEIsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQ3hCLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztZQUNoQixVQUFVLEVBQUU7Z0JBQ1YsWUFBWSxFQUFFO29CQUNaLGdCQUFnQixFQUFFO3dCQUNoQixPQUFPLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sZ0JBQWdCO3dCQUM1QyxrQkFBa0IsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxnQkFBZ0I7cUJBQ3hEO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQ0gsQ0FBQztRQUVGLE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssY0FBYyxDQUNwQixXQUFtQixFQUNuQixZQUE2QjtRQUU3QixNQUFNLFFBQVEsR0FBRyxJQUFJLGNBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxXQUFXLFVBQVUsRUFBRTtZQUN4RCxTQUFTLEVBQUUsSUFBSSwwQkFBZ0IsQ0FBQyx5QkFBeUIsQ0FBQztTQUMzRCxDQUFDLENBQUM7UUFFSCxxREFBcUQ7UUFDckQsUUFBUSxDQUFDLFdBQVcsQ0FDbEIsSUFBSSx5QkFBZSxDQUFDO1lBQ2xCLE1BQU0sRUFBRSxnQkFBTSxDQUFDLEtBQUs7WUFDcEIsT0FBTyxFQUFFO2dCQUNQLGtDQUFrQztnQkFDbEMsK0JBQStCO2dCQUMvQixnQ0FBZ0M7Z0JBQ2hDLDZCQUE2QjthQUM5QjtZQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNqQixDQUFDLENBQ0gsQ0FBQztRQUVGLElBQUksWUFBWSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDeEMsS0FBSyxNQUFNLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQ3ZELFlBQVksQ0FBQyxzQkFBc0IsQ0FDcEMsRUFBRSxDQUFDO2dCQUNGLFFBQVEsQ0FBQyxrQkFBa0IsQ0FDekIsSUFBSSxnQkFBTSxDQUFDLElBQUksRUFBRSxHQUFHLFdBQVcsR0FBRyxVQUFVLEVBQUUsRUFBRTtvQkFDOUMsUUFBUSxFQUFFLGNBQWM7aUJBQ3pCLENBQUMsQ0FDSCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLFlBQVksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ3pDLEtBQUssTUFBTSxNQUFNLElBQUksWUFBWSxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQzFELFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxvQkFBb0IsQ0FDMUIsV0FBbUIsRUFDbkIsWUFBNkIsRUFDN0IsYUFBbUIsRUFDbkIsUUFBYztRQUVkLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO1FBQ3BDLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxjQUFjLElBQUksR0FBRyxDQUFDO1FBRTFELElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDeEMsT0FBTyxJQUFJLCtCQUFxQixDQUFDLElBQUksRUFBRSxHQUFHLFdBQVcsZ0JBQWdCLEVBQUU7Z0JBQ3JFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLFdBQVcsRUFBRTtnQkFDbEQsR0FBRztnQkFDSCxjQUFjO2dCQUNkLGFBQWE7Z0JBQ2IsUUFBUTtnQkFDUixlQUFlLEVBQUU7b0JBQ2YsZUFBZSxFQUFFLHlCQUFlLENBQUMsS0FBSztvQkFDdEMscUJBQXFCLEVBQUUsK0JBQXFCLENBQUMsS0FBSztpQkFDbkQ7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sSUFBSSwyQkFBaUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxXQUFXLGdCQUFnQixFQUFFO2dCQUNqRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxXQUFXLEVBQUU7Z0JBQ2xELGFBQWE7Z0JBQ2IsUUFBUTtnQkFDUixHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsV0FBVyxFQUFFLHFCQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDbkUsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFTyxtQkFBbUIsQ0FDekIsV0FBbUIsRUFDbkIsWUFBNkIsRUFDN0IsY0FBeUQ7UUFLekQsTUFBTSxVQUFVLEdBQTBCLEVBQUUsQ0FBQztRQUM3QyxJQUFJLGdCQUFpRCxDQUFDO1FBRXRELEtBQUssTUFBTSxlQUFlLElBQUksWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3RELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FDbEMsV0FBVyxFQUNYLGVBQWUsRUFDZixZQUFZLENBQ2IsQ0FBQztZQUNGLE1BQU0sZUFBZSxHQUNuQixDQUFDLGdCQUFnQixJQUFJLGVBQWUsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDO1lBRTFELE1BQU0sT0FBTyxHQUE4QixFQUFFLENBQUM7WUFDOUMsSUFBSSxlQUFlLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ2xDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUM5QyxlQUFlLENBQUMsYUFBYSxDQUM5QixFQUFFLENBQUM7b0JBQ0YsTUFBTSxNQUFNLEdBQUcsMkJBQU0sQ0FBQyxnQkFBZ0IsQ0FDcEMsSUFBSSxFQUNKLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLGVBQWUsQ0FBQyxJQUFJLEdBQUcsR0FBRyxRQUFRLEVBQzVFLFlBQVksQ0FBQyxJQUFJLENBQ2xCLENBQUM7b0JBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGdCQUFTLENBQUMsa0JBQWtCLENBQ3pDLE1BQU0sRUFDTixZQUFZLENBQUMsS0FBSyxDQUNuQixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxlQUFlLENBQUMsT0FBTyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsRSxJQUFJLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDbEMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDckUsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUMzRCxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQ2hDLENBQUM7b0JBQ0YsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUM3QixNQUFNLElBQUksS0FBSyxDQUNiLGNBQWMsZUFBZSxDQUFDLElBQUksaUJBQWlCLFdBQVcsOEJBQThCOzRCQUMxRiw4Q0FBOEMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTs0QkFDMUUscURBQXFELENBQ3hELENBQUM7b0JBQ0osQ0FBQztnQkFDSCxDQUFDO2dCQUVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FDOUMsV0FBVyxFQUNYLFlBQVksQ0FBQyxjQUFjLENBQzVCLENBQUM7Z0JBRUYsS0FBSyxNQUFNLFVBQVUsSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2pELE1BQU0sU0FBUyxHQUFHLEdBQUcsY0FBYyxJQUFJLFVBQVUsRUFBRSxDQUFDO29CQUNwRCxNQUFNLEtBQUssR0FBRyx5QkFBZSxDQUFDLG1DQUFtQyxDQUMvRCxJQUFJLEVBQ0osR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxXQUFXLEdBQUcsZUFBZSxDQUFDLElBQUksR0FBRyxVQUFVLFVBQVUsRUFDckYsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLENBQzdCLENBQUM7b0JBQ0YsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLGdCQUFTLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFELENBQUM7WUFDSCxDQUFDO1lBRUQsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FDM0MsR0FBRyxXQUFXLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxFQUN2QztnQkFDRSxLQUFLO2dCQUNMLGFBQWEsRUFBRSxlQUFlLENBQUMsSUFBSTtnQkFDbkMsT0FBTyxFQUFFLElBQUksc0JBQVksQ0FBQztvQkFDeEIsWUFBWSxFQUFFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksV0FBVyxFQUFFO29CQUM3RCxZQUFZLEVBQUUsRUFBRTtpQkFDakIsQ0FBQztnQkFDRixXQUFXLEVBQUUsZUFBZSxDQUFDLFdBQVc7Z0JBQ3hDLE9BQU87Z0JBQ1AsT0FBTyxFQUFFLGVBQWUsQ0FBQyxPQUFPO2dCQUNoQyxVQUFVLEVBQUUsZUFBZSxDQUFDLFVBQVU7Z0JBQ3RDLFNBQVMsRUFBRSxlQUFlLENBQUMsU0FBUyxJQUFJLElBQUk7Z0JBQzVDLFdBQVcsRUFBRSxlQUFlLENBQUMsV0FBVztvQkFDdEMsQ0FBQyxDQUFDO3dCQUNFLE9BQU8sRUFBRSxlQUFlLENBQUMsV0FBVyxDQUFDLE9BQU87d0JBQzVDLFFBQVEsRUFBRSxlQUFlLENBQUMsV0FBVyxDQUFDLFFBQVE7NEJBQzVDLENBQUMsQ0FBQyxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQzs0QkFDeEQsQ0FBQyxDQUFDLFNBQVM7d0JBQ2IsT0FBTyxFQUFFLGVBQWUsQ0FBQyxXQUFXLENBQUMsT0FBTzs0QkFDMUMsQ0FBQyxDQUFDLHNCQUFRLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDOzRCQUN2RCxDQUFDLENBQUMsU0FBUzt3QkFDYixPQUFPLEVBQUUsZUFBZSxDQUFDLFdBQVcsQ0FBQyxPQUFPO3dCQUM1QyxXQUFXLEVBQUUsZUFBZSxDQUFDLFdBQVcsQ0FBQyxXQUFXOzRCQUNsRCxDQUFDLENBQUMsc0JBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7NEJBQzNELENBQUMsQ0FBQyxTQUFTO3FCQUNkO29CQUNILENBQUMsQ0FBQyxTQUFTO2dCQUNiLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJO29CQUNyQyxjQUFjLEVBQUUsWUFBWSxDQUFDLFNBQVMsRUFBRSxjQUFjLElBQUksSUFBSTtpQkFDL0QsQ0FBQzthQUNILENBQ0YsQ0FBQztZQUVGLElBQUksZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN6QixTQUFTLENBQUMsZUFBZSxDQUFDO29CQUN4QixhQUFhLEVBQUUsZUFBZSxDQUFDLElBQUk7aUJBQ3BDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQixnQkFBZ0IsR0FBRyxTQUFTLENBQUM7WUFDL0IsQ0FBQztZQUVELFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUVELE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRU8saUJBQWlCLENBQ3ZCLFdBQW1CLEVBQ25CLGVBQTBDLEVBQzFDLFlBQTZCO1FBRTdCLE1BQU0sV0FBVyxHQUNmLGVBQWUsQ0FBQyxLQUFLLElBQUksWUFBWSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUUxRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsT0FBTyx3QkFBYyxDQUFDLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFFRCxvREFBb0Q7UUFDcEQsc0NBQXNDO1FBQ3RDLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxZQUFZO1lBQzVDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDL0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLE1BQU0sUUFBUSxHQUFHLEdBQUcsV0FBVyxDQUFDLFdBQVcsRUFBRSxHQUFHLFlBQVksU0FBUyxDQUFDO1FBRXRFLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDcEMsTUFBTSxpQkFBaUIsR0FDckIsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLHVDQUF1QztnQkFDcEcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLDJDQUEyQztnQkFDeEYsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLDhFQUE4RTtZQUVuSCxJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sd0JBQWMsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbEQsQ0FBQztZQUNELE9BQU8sd0JBQWMsQ0FBQyxpQkFBaUIsQ0FDckMsb0JBQVUsQ0FBQyxrQkFBa0IsQ0FDM0IsSUFBSSxFQUNKLEdBQUcsV0FBVyxHQUFHLGVBQWUsQ0FBQyxJQUFJLFNBQVMsRUFDOUMsV0FBVyxDQUNaLEVBQ0QsUUFBUSxDQUNULENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxXQUFXLFlBQVksb0JBQVUsRUFBRSxDQUFDO1lBQ3RDLE9BQU8sd0JBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVELE9BQU8sV0FBNkIsQ0FBQztJQUN2QyxDQUFDO0lBRU8sYUFBYSxDQUNuQixXQUFtQixFQUNuQixZQUE2QixFQUM3QixjQUF5RDtRQUV6RCxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQztRQUNwRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV4RSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sT0FBTyxHQUFHLElBQUksd0JBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxXQUFXLFNBQVMsRUFBRTtnQkFDaEUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNyQixjQUFjLEVBQUUsY0FBdUM7Z0JBQ3ZELFlBQVk7Z0JBQ1osV0FBVztnQkFDWCxVQUFVLEVBQUU7b0JBQ1YsVUFBVSxFQUFFLE1BQU07d0JBQ2hCLENBQUMsQ0FBQyxvQkFBVSxDQUFDLG1CQUFtQjt3QkFDaEMsQ0FBQyxDQUFDLG9CQUFVLENBQUMsTUFBTTtpQkFDdEI7Z0JBQ0QsY0FBYyxFQUFFLENBQUMsTUFBTTtnQkFDdkIsMEJBQTBCLEVBQUU7b0JBQzFCO3dCQUNFLGdCQUFnQixFQUFFLGlCQUFpQjt3QkFDbkMsTUFBTSxFQUFFLENBQUM7cUJBQ1Y7aUJBQ0Y7Z0JBQ0QsYUFBYSxFQUFFLDZCQUFtQixDQUFDLE9BQU87Z0JBQzFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDaEQsb0JBQW9CLEVBQUUsSUFBSTtnQkFDMUIsb0JBQW9CLEVBQUUsSUFBSTtnQkFDMUIsc0JBQXNCLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUM3QyxpQkFBaUIsRUFBRSxHQUFHO2dCQUN0QixpQkFBaUIsRUFBRSxHQUFHO2FBQ3ZCLENBQUMsQ0FBQztZQUVILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxXQUFXLFlBQVksRUFBRTtnQkFDdkUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsV0FBVyxZQUFZO2dCQUN4RCxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxXQUFXLFlBQVk7Z0JBQy9ELEtBQUssRUFBRSxPQUFPLENBQUMsVUFBVTtnQkFDekIsV0FBVyxFQUFFLHVCQUF1QixXQUFXLEVBQUU7YUFDbEQsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFdEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxvQkFBVSxDQUFDLElBQUksRUFBRSxHQUFHLFdBQVcsU0FBUyxFQUFFO2dCQUM1RCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLGNBQWMsRUFBRSxjQUFtQztnQkFDbkQsWUFBWTtnQkFDWixXQUFXO2dCQUNYLDBCQUEwQixFQUFFO29CQUMxQjt3QkFDRSxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsb0JBQW9CO3dCQUNsRCxNQUFNLEVBQUUsQ0FBQztxQkFDVjtpQkFDRjtnQkFDRCxhQUFhLEVBQUUsNkJBQW1CLENBQUMsT0FBTztnQkFDMUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNoRCxtQkFBbUIsRUFBRSxDQUFDLDJCQUFpQixDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQ2hFLG9CQUFvQixFQUFFLElBQUk7Z0JBQzFCLG9CQUFvQixFQUFFLElBQUk7Z0JBQzFCLHNCQUFzQixFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDN0MsaUJBQWlCLEVBQUUsR0FBRztnQkFDdEIsaUJBQWlCLEVBQUUsR0FBRzthQUN2QixDQUFDLENBQUM7WUFFSCxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsV0FBVyxZQUFZLEVBQUU7Z0JBQ3ZFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLFdBQVcsWUFBWTtnQkFDeEQsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsV0FBVyxZQUFZO2dCQUMvRCxLQUFLLEVBQUUsT0FBTyxDQUFDLFVBQVU7Z0JBQ3pCLFdBQVcsRUFBRSx1QkFBdUIsV0FBVyxFQUFFO2FBQ2xELENBQUMsQ0FBQztZQUNILE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRU8sc0JBQXNCLENBQzVCLFdBQW1CLEVBQ25CLFlBQTZCLEVBQzdCLE9BQW9DLEVBQ3BDLGdCQUFxQztRQUVyQyxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUM7UUFDckQsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSxlQUFlLElBQUksR0FBRyxDQUFDO1FBRXJFLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDekQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQy9DLENBQUM7UUFDRixNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1FBRXZELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7WUFDdkQsQ0FBQyxDQUFDO2dCQUNFLFFBQVEsRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLHFCQUFxQixFQUFFLENBQUM7Z0JBQ3hCLHVCQUF1QixFQUFFLENBQUM7Z0JBQzFCLElBQUksRUFBRSxlQUFlO2dCQUNyQixJQUFJLEVBQUUsY0FBdUI7Z0JBQzdCLE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7YUFDOUI7WUFDSCxDQUFDLENBQUM7Z0JBQ0UsUUFBUSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLElBQUksRUFBRSxHQUFHLGFBQWEsRUFBRTtnQkFDeEIsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzthQUM5QixDQUFDO1FBRU4sSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQyxvQkFBcUIsQ0FBQyxVQUFVLENBQzFDLEdBQUcsV0FBVyxhQUFhLEVBQzNCO2dCQUNFLE9BQU8sRUFBRTtvQkFDUCxPQUFPLENBQUMsa0JBQWtCLENBQUM7d0JBQ3pCLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxhQUFhO3dCQUM3QyxhQUFhO3FCQUNkLENBQUM7aUJBQ0g7Z0JBQ0QsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLFFBQVEsRUFBRSxnREFBbUIsQ0FBQyxJQUFJO2dCQUNsQyxXQUFXLEVBQUUsaUJBQWlCO2FBQy9CLENBQ0YsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBRXZFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBcUIsQ0FBQyxVQUFVLENBQ3ZELEdBQUcsV0FBVyxTQUFTLEVBQ3ZCO2dCQUNFLE9BQU8sRUFBRTtvQkFDUCxPQUFPLENBQUMsa0JBQWtCLENBQUM7d0JBQ3pCLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxhQUFhO3dCQUM3QyxhQUFhO3FCQUNkLENBQUM7aUJBQ0g7Z0JBQ0QsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLFFBQVEsRUFBRSxnREFBbUIsQ0FBQyxJQUFJO2dCQUNsQyxXQUFXLEVBQUUsaUJBQWlCO2dCQUM5QixVQUFVLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQztnQkFDckQsUUFBUTthQUNULENBQ0YsQ0FBQztZQUVGLE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRU8sc0JBQXNCLENBQzVCLFlBQTZCO1FBRTdCLE1BQU0sVUFBVSxHQUF3QixFQUFFLENBQUM7UUFFM0MsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQy9CLFVBQVUsQ0FBQyxJQUFJLENBQ2IsOENBQWlCLENBQUMsWUFBWSxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUM1RCxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUMvQixVQUFVLENBQUMsSUFBSSxDQUNiLDhDQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDM0QsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRU8saUJBQWlCLENBQ3ZCLFdBQW1CLEVBQ25CLFlBQTZCLEVBQzdCLE9BQW9DO1FBRXBDLE1BQU0sY0FBYyxHQUFHLElBQUksMkNBQWMsQ0FDdkMsSUFBSSxFQUNKLEdBQUcsV0FBVyxnQkFBZ0IsRUFDOUI7WUFDRSxnQkFBZ0IsRUFBRSw2Q0FBZ0IsQ0FBQyxHQUFHO1lBQ3RDLFVBQVUsRUFBRSxXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDeEUsaUJBQWlCLEVBQUUsMEJBQTBCO1lBQzdDLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVyxJQUFJLENBQUM7WUFDMUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxXQUFXLElBQUksRUFBRTtTQUM1QyxDQUNGLENBQUM7UUFFRixPQUFPLElBQUksd0RBQTJCLENBQ3BDLElBQUksRUFDSixHQUFHLFdBQVcsZUFBZSxFQUM3QjtZQUNFLGFBQWEsRUFBRSxjQUFjO1lBQzdCLGdCQUFnQixFQUNkLFlBQVksQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLE1BQU07Z0JBQzdDLENBQUMsQ0FBQyw2Q0FBZ0IsQ0FBQyxzQ0FBc0M7Z0JBQ3pELENBQUMsQ0FBQyw2Q0FBZ0IsQ0FBQyxtQ0FBbUM7WUFDMUQsV0FBVyxFQUFFLEVBQUU7WUFDZixlQUFlLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3JDLGdCQUFnQixFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUN2QyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGlCQUFpQjtRQUN2QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUM3QixJQUFJLGdCQUFnQixJQUFJLEdBQUcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxjQUFjLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdkUsT0FBTyxHQUFHLENBQUMsY0FBYyxDQUFDO1FBQzVCLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDJCQUEyQixDQUFDLEtBQXNCO1FBQ2hELEtBQUssTUFBTSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkQsSUFBSSx1QkFBUyxDQUNYLElBQUksRUFDSixHQUFHLEtBQUssQ0FBQyxXQUFXLEdBQUcsV0FBVyxtQkFBbUIsRUFDckQ7Z0JBQ0UsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsR0FBRyxXQUFXLG1CQUFtQjtnQkFDMUQsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsR0FBRyxXQUFXLG1CQUFtQjtnQkFDakUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVTtnQkFDckMsV0FBVyxFQUFFLGtDQUFrQyxXQUFXLE9BQU8sS0FBSyxDQUFDLFdBQVcsRUFBRTthQUNyRixDQUNGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLDBCQUEwQixDQUNoQyxZQUE2QjtRQUU3QixPQUFPLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQkFBZ0IsQ0FBQyxZQUE2QjtRQUNwRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0QsT0FBTyxRQUFRLEtBQUssU0FBUyxJQUFJLFFBQVEsS0FBSyxjQUFjLENBQUM7SUFDL0QsQ0FBQztJQUVEOztPQUVHO0lBQ0ssWUFBWSxDQUFDLFlBQTZCO1FBQ2hELE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLFlBQVksQ0FBQyxLQUFLLEtBQUssQ0FBQztJQUNqRSxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLHdCQUF3QixDQUFDLFNBQWlCLEVBQUUsU0FBaUI7UUFDbkUsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFNBQVMsMENBQTBDLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FDYixHQUFHLFNBQVMsd0RBQXdELFNBQVMsSUFBSSxDQUNsRixDQUFDO1FBQ0osQ0FBQztRQUNELG1GQUFtRjtRQUNuRixxRUFBcUU7UUFDckUsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxTQUFTLDJDQUEyQyxDQUFDLENBQUM7UUFDM0UsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0g7OztPQUdHO0lBQ0ssZ0NBQWdDO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDdEMsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFDLEtBQUssTUFBTSxTQUFTLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDNUIsS0FBSyxNQUFNLFlBQVksSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO3dCQUNsRSxXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDckMsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLG9CQUFvQixDQUMxQixXQUFtQixFQUNuQixZQUFxQjtRQUVyQixJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNuQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksS0FBSyxDQUNiLFlBQVksV0FBVyxxREFBcUQ7Z0JBQzFFLGdEQUFnRDtnQkFDaEQsZ0ZBQWdGO2dCQUNoRiwrRUFBK0UsQ0FDbEYsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRTFELE9BQU8sSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksV0FBVyxFQUFFLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGVBQWUsQ0FBQyxTQUE0QjtRQUNsRCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsWUFBWSxJQUFJLFVBQVUsQ0FBQztRQUMxRCxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsZUFBZSxJQUFJLFVBQVUsQ0FBQztRQUNoRSxPQUFPLEdBQUcsWUFBWSxJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRDs7O09BR0c7SUFDSyw4QkFBOEIsQ0FDcEMsWUFBNkI7UUFFN0IsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDL0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLFlBQVksSUFBSSxVQUFVLENBQUM7UUFDMUQsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLGVBQWU7WUFDL0MsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEtBQUssVUFBVTtnQkFDeEMsQ0FBQyxDQUFDLHlCQUFlLENBQUMsUUFBUTtnQkFDMUIsQ0FBQyxDQUFDLHlCQUFlLENBQUMsR0FBRztZQUN2QixDQUFDLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkMsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDL0MsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFFL0MsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLDZCQUFhLENBQ3hDLElBQUksRUFDSixHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsRUFDckQ7WUFDRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHO1lBQ3JCLFdBQVcsRUFBRSxzQkFBc0IsR0FBRyxxQkFBcUI7U0FDNUQsQ0FDRixDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3QixLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUMvQixLQUFLLE1BQU0sU0FBUyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQzt3QkFDM0MsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7NEJBQ25CLGdCQUFnQixDQUFDLGNBQWMsQ0FDN0IsY0FBSSxDQUFDLE9BQU8sRUFBRSxFQUNkLGNBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUN4QixtQ0FBbUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUNwRCxDQUFDO3dCQUNKLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLGtDQUFnQixDQUM5QixJQUFJLEVBQ0osR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsa0JBQWtCLEVBQ3JEO1lBQ0Usb0JBQW9CLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsTUFBTTtZQUN6RixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHO1lBQ3JCLFVBQVUsRUFBRTtnQkFDVixVQUFVLEVBQUUsb0JBQVUsQ0FBQyxNQUFNO2FBQzlCO1lBQ0QsYUFBYSxFQUFFLGdCQUFnQjtZQUMvQixXQUFXO1lBQ1gsV0FBVztZQUNYLFlBQVksRUFBRSxJQUFJLHNCQUFZLENBQUMsWUFBWSxDQUFDO1lBQzVDLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsa0JBQWtCLEVBQUUsNEJBQVUsQ0FBQyxLQUFLO1lBQ3BDLFlBQVksRUFBRSwyQkFBaUIsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDO1NBQzlELENBQ0YsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLElBQUksNkJBQW1CLENBQ3RDLElBQUksRUFDSixHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxxQkFBcUIsRUFDeEQ7WUFDRSxnQkFBZ0IsRUFBRSxHQUFHO1lBQ3JCLHFCQUFxQixFQUFFLElBQUk7WUFDM0Isa0NBQWtDLEVBQUUsS0FBSztTQUMxQyxDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO1FBQzlCLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQzNDLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxxQkFBcUI7UUFDM0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQjtRQUN2QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxVQUFVLENBQUMsS0FBc0I7UUFDL0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGlCQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQzFELEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixtQkFBbUIsRUFBRSwyQkFBaUIsQ0FBQyxPQUFPO1lBQzlDLDhCQUE4QixFQUFFLFlBQVk7U0FDN0MsQ0FBQyxDQUFDO1FBRUgsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLG1CQUFtQixFQUFFO1lBQzNELEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLG1CQUFtQjtZQUM1QyxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxtQkFBbUI7WUFDbkQsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVTtTQUMvQixDQUFDLENBQUM7UUFFSCxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsWUFBWSxFQUFFO1lBQ3BELEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLFlBQVk7WUFDckMsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsWUFBWTtZQUM1QyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO1lBQzlCLFdBQVcsRUFBRSx1QkFBdUIsS0FBSyxDQUFDLFdBQVcsRUFBRTtTQUN4RCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsMEdBQTBHO0lBRTFHLGVBQWUsQ0FBQyxLQUFzQjtRQUNwQyxNQUFNLHVCQUF1QixHQUFHLEdBQUcsS0FBSyxDQUFDLFdBQVcsY0FBYyxDQUFDO1FBQ25FLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBRS9CLElBQUkseUJBQXlCLEdBQzNCLHVCQUF1QixDQUFDLE1BQU0sR0FBRyxtQkFBbUI7WUFDbEQsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUM7WUFDM0QsQ0FBQyxDQUFDLHVCQUF1QixDQUFDO1FBRTlCLHlCQUF5QixHQUFHLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFekUsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxZQUFZLEtBQUssVUFBVSxDQUFDO1FBRTlELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRWhELElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksNkJBQWEsQ0FDaEQsSUFBSSxFQUNKLEdBQUcsS0FBSyxDQUFDLFdBQVcsMkJBQTJCLEVBQy9DO2dCQUNFLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUc7Z0JBQ3JCLFdBQVcsRUFBRSwwQkFBMEIsS0FBSyxDQUFDLFdBQVcsZ0JBQWdCO2FBQ3pFLENBQ0YsQ0FBQztZQUVGLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUNoRCxJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLGNBQUksQ0FBQyxNQUFNLEVBQUUsQ0FDZCxDQUFDO2dCQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUN6QyxJQUFJLENBQUMseUJBQXlCLEVBQzlCLGNBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUM1QixDQUFDO1lBQ0osQ0FBQztZQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxvREFBdUIsQ0FDN0MsSUFBSSxFQUNKLEdBQUcsS0FBSyxDQUFDLFdBQVcsY0FBYyxFQUNsQztnQkFDRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHO2dCQUNyQixjQUFjLEVBQUUsQ0FBQyxVQUFVO2dCQUMzQixhQUFhLEVBQUUsSUFBSSxDQUFDLHlCQUF5QjtnQkFDN0MsZ0JBQWdCLEVBQUUseUJBQXlCO2dCQUMzQyxVQUFVLEVBQUU7b0JBQ1YsVUFBVSxFQUFFLFVBQVU7d0JBQ3BCLENBQUMsQ0FBQyxvQkFBVSxDQUFDLG1CQUFtQjt3QkFDaEMsQ0FBQyxDQUFDLG9CQUFVLENBQUMsTUFBTTtpQkFDdEI7YUFDRixDQUNGLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxvREFBdUIsQ0FDN0MsSUFBSSxFQUNKLEdBQUcsS0FBSyxDQUFDLFdBQVcsY0FBYyxFQUNsQztnQkFDRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHO2dCQUNyQixjQUFjLEVBQUUsQ0FBQyxVQUFVO2dCQUMzQixnQkFBZ0IsRUFBRSx5QkFBeUI7Z0JBQzNDLFVBQVUsRUFBRTtvQkFDVixVQUFVLEVBQUUsVUFBVTt3QkFDcEIsQ0FBQyxDQUFDLG9CQUFVLENBQUMsbUJBQW1CO3dCQUNoQyxDQUFDLENBQUMsb0JBQVUsQ0FBQyxNQUFNO2lCQUN0QjthQUNGLENBQ0YsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcscUJBQXFCLEVBQUU7WUFDN0QsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcscUJBQXFCO1lBQzlDLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLHFCQUFxQjtZQUNyRCxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUI7U0FDN0MsQ0FBQyxDQUFDO1FBRUgsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLGlCQUFpQixFQUFFO1lBQ3pELEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLGlCQUFpQjtZQUMxQyxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxpQkFBaUI7WUFDakQsS0FBSyxFQUFFLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRTtZQUN4RCxXQUFXLEVBQUUseUJBQXlCLEtBQUssQ0FBQyxXQUFXLEVBQUU7U0FDMUQsQ0FBQyxDQUFDO1FBRUgsMENBQTBDO1FBQzFDLElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxpQkFBaUIsRUFBRTtZQUN6RCxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxpQkFBaUI7WUFDMUMsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsaUJBQWlCO1lBQ2pELEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWU7WUFDeEMsV0FBVyxFQUFFLHlCQUF5QixLQUFLLENBQUMsV0FBVyxFQUFFO1NBQzFELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxLQUFzQjtRQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtZQUFFLE9BQU87UUFFaEUsTUFBTSxhQUFhLEdBQ2pCLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSTtZQUNyRSxJQUFJLENBQUM7UUFFUCxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsc0JBQXNCLEVBQUU7WUFDOUQsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsc0JBQXNCO1lBQy9DLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLHNCQUFzQjtZQUN0RCxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQjtZQUNqRCxXQUFXLEVBQUUseUdBQXlHO1NBQ3ZILENBQUMsQ0FBQztRQUVILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxrQkFBa0IsRUFBRTtZQUMxRCxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxrQkFBa0I7WUFDM0MsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsa0JBQWtCO1lBQ2xELEtBQUssRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDO1lBQzVCLFdBQVcsRUFBRSw2Q0FBNkMsYUFBYSxFQUFFO1NBQzFFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxLQUFzQjtRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPO1FBRS9CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXpDLE1BQU0sYUFBYSxHQUFHLDJDQUFjLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRTtZQUN0RCxXQUFXLEVBQUUsWUFBWTtZQUN6QixXQUFXLEVBQUUsV0FBVztTQUN6QixDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQ3ZELEdBQUcsS0FBSyxDQUFDLFdBQVcsVUFBVSxFQUM5QjtnQkFDRSxJQUFJO2dCQUNKLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQ2hDLGFBQWE7YUFDZCxDQUNGLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FDdkQsR0FBRyxLQUFLLENBQUMsV0FBVyxVQUFVLEVBQzlCO2dCQUNFLElBQUk7Z0JBQ0osYUFBYTthQUNkLENBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQXNCO1FBQ2xDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDO1FBQ2pELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO1FBRTNDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZO1lBQUUsT0FBTztRQUUzQyxNQUFNLFVBQVUsR0FBRyxZQUFZLEVBQUUsVUFBVSxJQUFJLFlBQWEsQ0FBQztRQUU3RCxJQUFJLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBQzlCLE1BQU0sVUFBVSxHQUFHLElBQUksdUJBQWUsQ0FDcEMsSUFBSSxFQUNKLEdBQUcsS0FBSyxDQUFDLFdBQVcsWUFBWSxFQUNoQztnQkFDRSxRQUFRLEVBQUUsVUFBVTthQUNyQixDQUNGLENBQUM7WUFFRixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3ZELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDcEUsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLG9DQUFXLENBQ2hDLElBQUksRUFDSixHQUFHLEtBQUssQ0FBQyxXQUFXLGFBQWEsRUFDakM7Z0JBQ0UsVUFBVTtnQkFDVixVQUFVLEVBQUUsOENBQXFCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7YUFDM0QsQ0FDRixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsTUFBTSxhQUFhLEdBQUcsWUFBbUMsQ0FBQztZQUMxRCxNQUFNLGNBQWMsR0FBRyxZQUFvQyxDQUFDO1lBQzVELE1BQU0sU0FBUyxHQUFHLFlBQXVDLENBQUM7WUFFMUQsTUFBTSxnQkFBZ0IsR0FDcEIsQ0FBQyxDQUFDLGFBQWEsRUFBRSxNQUFNO2dCQUN2QixjQUFjLEVBQUUsTUFBTSxLQUFLLFNBQVM7Z0JBQ3BDLENBQUMsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDO1lBRTNCLElBQUksYUFBYSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUM7WUFDL0MsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLGFBQWEsRUFBRSxNQUFNLEVBQUUsQ0FBQztvQkFDMUIsYUFBYSxHQUFHLEdBQUcsS0FBSyxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2hFLENBQUM7cUJBQU0sSUFBSSxjQUFjLEVBQUUsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUNoRCxhQUFhLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxTQUFTLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDdkUsQ0FBQztxQkFBTSxJQUFJLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQztvQkFDbEMsYUFBYSxHQUFHLEdBQUcsS0FBSyxDQUFDLFdBQVcsS0FBSyxDQUFDO2dCQUM1QyxDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUkscUJBQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxTQUFTLEVBQUU7b0JBQzlELFVBQVUsRUFBRSxVQUFVO29CQUN0QixJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVU7b0JBQ3JCLE1BQU0sRUFBRSwwQkFBWSxDQUFDLFNBQVMsQ0FDNUIsSUFBSSx3Q0FBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO3dCQUN4QyxvQkFBb0IsRUFBRSxnQkFBZ0I7cUJBQ3ZDLENBQUMsQ0FDSDtvQkFDRCxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU07b0JBQzdCLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTTtvQkFDOUIsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXO29CQUNuQyxhQUFhLEVBQUUsYUFBYTtpQkFDN0IsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLHFCQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsU0FBUyxFQUFFO2dCQUM5RCxVQUFVLEVBQUUsVUFBVTtnQkFDdEIsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUNyQixNQUFNLEVBQUUsMEJBQVksQ0FBQyxTQUFTLENBQzVCLElBQUksd0NBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUMxQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FDVixFQUFVLEVBQ1YsS0FBc0I7UUFFdEIsT0FBTyxDQUFDLEVBQWdCLEVBQUUsRUFBRTtZQUMxQixNQUFNLFFBQVEsR0FBb0I7Z0JBQ2hDLEdBQUcsS0FBSztnQkFDUixHQUFHO29CQUNELEdBQUcsRUFBRyxFQUFFLENBQUMsVUFBVSxFQUFXLElBQUksS0FBSyxDQUFDLEdBQUc7aUJBQzVDO2FBQ0YsQ0FBQztZQUNGLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUE5eUNELDZCQTh5Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBd3NMb2dEcml2ZXIsXG4gIENsdXN0ZXIgYXMgQ2RrQ2x1c3RlcixcbiAgQ29udGFpbmVySW1hZ2UsXG4gIEZhcmdhdGVTZXJ2aWNlLFxuICBGYXJnYXRlVGFza0RlZmluaXRpb24sXG4gIEVjMlNlcnZpY2UsXG4gIEVjMlRhc2tEZWZpbml0aW9uLFxuICBOZXR3b3JrTW9kZSxcbiAgUHJvcGFnYXRlZFRhZ1NvdXJjZSxcbiAgdHlwZSBSZXBvc2l0b3J5SW1hZ2UsXG4gIHR5cGUgQ29udGFpbmVyRGVmaW5pdGlvbixcbiAgQ29udGFpbmVySW5zaWdodHMsXG4gIFBsYWNlbWVudFN0cmF0ZWd5LFxuICBBc2dDYXBhY2l0eVByb3ZpZGVyLFxuICBFY3NPcHRpbWl6ZWRJbWFnZSxcbiAgQW1pSGFyZHdhcmVUeXBlLFxuICBDcHVBcmNoaXRlY3R1cmUsXG4gIE9wZXJhdGluZ1N5c3RlbUZhbWlseSxcbiAgQ2ZuQ2x1c3RlckNhcGFjaXR5UHJvdmlkZXJBc3NvY2lhdGlvbnNcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3NcIjtcbmltcG9ydCB7XG4gIENvbm5lY3Rpb25zLFxuICB0eXBlIElDb25uZWN0YWJsZSxcbiAgdHlwZSBJU2VjdXJpdHlHcm91cCxcbiAgdHlwZSBJVnBjLFxuICBJbnN0YW5jZVR5cGUsXG4gIFBlZXIsXG4gIFBvcnQsXG4gIFN1Ym5ldFR5cGVcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgdHlwZSB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgdHlwZSBTdGFja0J1aWxkZXIgfSBmcm9tIFwiLi4vYmFzZS9hd3NTdGFja1wiO1xuaW1wb3J0IHsgQ2ZuT3V0cHV0LCBEdXJhdGlvbiwgQXNwZWN0cywgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB0eXBlIHsgSUFzcGVjdCB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgdHlwZSBBcHBsaWNhdGlvbkxpc3RlbmVyLFxuICBBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcixcbiAgQXBwbGljYXRpb25Qcm90b2NvbCxcbiAgdHlwZSBJQXBwbGljYXRpb25UYXJnZXRHcm91cCxcbiAgTGlzdGVuZXJBY3Rpb24sXG4gIExpc3RlbmVyQ29uZGl0aW9uXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2MlwiO1xuaW1wb3J0IHtcbiAgRWZmZWN0LFxuICB0eXBlIElNYW5hZ2VkUG9saWN5LFxuICBQb2xpY3ksXG4gIHR5cGUgUG9saWN5RG9jdW1lbnQsXG4gIFBvbGljeVN0YXRlbWVudCxcbiAgUm9sZSxcbiAgU2VydmljZVByaW5jaXBhbFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHtcbiAgUHJlZGVmaW5lZE1ldHJpYyxcbiAgU2NhbGFibGVUYXJnZXQsXG4gIFNlcnZpY2VOYW1lc3BhY2UsXG4gIFRhcmdldFRyYWNraW5nU2NhbGluZ1BvbGljeVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwcGxpY2F0aW9uYXV0b3NjYWxpbmdcIjtcbmltcG9ydCB7IFNlY3JldCBhcyBFY3NTZWNyZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiO1xuaW1wb3J0IHsgU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zc21cIjtcbmltcG9ydCB7XG4gIENlcnRpZmljYXRlLFxuICBDZXJ0aWZpY2F0ZVZhbGlkYXRpb25cbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXJcIjtcbmltcG9ydCB7XG4gIEFSZWNvcmQsXG4gIFJlY29yZFRhcmdldCxcbiAgdHlwZSBJSG9zdGVkWm9uZSxcbiAgdHlwZSBHZW9Mb2NhdGlvblxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjtcbmltcG9ydCB7IExvYWRCYWxhbmNlclRhcmdldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1My10YXJnZXRzXCI7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3JcIjtcbmltcG9ydCB7IEF1dG9TY2FsaW5nR3JvdXAsIE1vbml0b3JpbmcgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWF1dG9zY2FsaW5nXCI7XG5cbmltcG9ydCB7IEhvc3RlZFpvbmUgYXMgRmphbGxIb3N0ZWRab25lIH0gZnJvbSBcIi4uLy4uLy4uL3BhdHRlcm5zL2F3cy9ob3N0ZWRab25lXCI7XG5pbXBvcnQgeyBTZWN1cml0eUdyb3VwIH0gZnJvbSBcIi4uL2lhbS9zZWN1cml0eUdyb3VwXCI7XG5pbXBvcnQgeyB0eXBlIENvbm5lY3Rpb25TcGVjIH0gZnJvbSBcIi4uLy4uLy4uL3BhdHRlcm5zL2F3cy9pbnRlcmZhY2VzL2Nvbm5lY3Rvci5qc1wiO1xuaW1wb3J0IHsgcHJvY2Vzc0Nvbm5lY3Rpb25zIH0gZnJvbSBcIi4uLy4uLy4uL3BhdHRlcm5zL2F3cy9jb25uZWN0aW9ucy5qc1wiO1xuXG5pbXBvcnQgeyB0eXBlIFNlY3JldEltcG9ydCB9IGZyb20gXCIuLi9zZWNyZXRzXCI7XG5cbi8qKlxuICogSW5zdGFuY2UgdHlwZSBwcmVmaXhlcyB0aGF0IHVzZSBBUk02NCBhcmNoaXRlY3R1cmUgKEdyYXZpdG9uIHByb2Nlc3NvcnMpLlxuICogQWxsIG90aGVyIHByZWZpeGVzIGFyZSBhc3N1bWVkIHRvIGJlIHg4Ni02NCAoU1RBTkRBUkQpLlxuICovXG5jb25zdCBBUk1fSU5TVEFOQ0VfUFJFRklYRVMgPSBbXG4gIFwidDRnXCIsXG4gIFwiYzZnXCIsXG4gIFwiYzZnZFwiLFxuICBcImM2Z25cIixcbiAgXCJjN2dcIixcbiAgXCJjN2dkXCIsXG4gIFwiYzdnblwiLFxuICBcInI2Z1wiLFxuICBcInI2Z2RcIixcbiAgXCJyN2dcIixcbiAgXCJyN2dkXCIsXG4gIFwibTZnXCIsXG4gIFwibTZnZFwiLFxuICBcIm03Z1wiLFxuICBcIm03Z2RcIixcbiAgXCJhMVwiLFxuICBcIngyZ2RcIixcbiAgXCJpbTRnblwiLFxuICBcImlzNGdlblwiLFxuICBcImk0Z1wiLFxuICBcImhwYzdnXCJcbl07XG5cbi8qKlxuICogSW5mZXIgdGhlIEFNSSBoYXJkd2FyZSB0eXBlIGZyb20gYW4gRUMyIGluc3RhbmNlIHR5cGUuXG4gKiBVc2VzIHRoZSBpbnN0YW5jZSB0eXBlIHByZWZpeCB0byBkZXRlcm1pbmUgaWYgaXQncyBBUk0gKEdyYXZpdG9uKSBvciB4ODYtNjQuXG4gKlxuICogQHBhcmFtIGluc3RhbmNlVHlwZSAtIEVDMiBpbnN0YW5jZSB0eXBlIChlLmcuLCBcInQ0Zy5taWNyb1wiLCBcInQzLnNtYWxsXCIpXG4gKiBAcmV0dXJucyBBbWlIYXJkd2FyZVR5cGUuQVJNIGZvciBHcmF2aXRvbiBpbnN0YW5jZXMsIEFtaUhhcmR3YXJlVHlwZS5TVEFOREFSRCBmb3IgSW50ZWwvQU1EXG4gKi9cbmZ1bmN0aW9uIGluZmVyQW1pSGFyZHdhcmVUeXBlKGluc3RhbmNlVHlwZTogc3RyaW5nKTogQW1pSGFyZHdhcmVUeXBlIHtcbiAgY29uc3QgcHJlZml4ID0gaW5zdGFuY2VUeXBlLnNwbGl0KFwiLlwiKVswXTtcbiAgcmV0dXJuIEFSTV9JTlNUQU5DRV9QUkVGSVhFUy5pbmNsdWRlcyhwcmVmaXgpXG4gICAgPyBBbWlIYXJkd2FyZVR5cGUuQVJNXG4gICAgOiBBbWlIYXJkd2FyZVR5cGUuU1RBTkRBUkQ7XG59XG5cbi8qKlxuICogQ0RLIEFzcGVjdCB0aGF0IGZpeGVzIGNhcGFjaXR5IHByb3ZpZGVyIGRlbGV0aW9uIGRlcGVuZGVuY2llcy5cbiAqXG4gKiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgQ0RLIGJ1ZyAjMTUzNjYgd2hlcmUgRUNTIHNlcnZpY2VzIGRvbid0IHByb3Blcmx5XG4gKiBkZXBlbmQgb24gQ2ZuQ2x1c3RlckNhcGFjaXR5UHJvdmlkZXJBc3NvY2lhdGlvbnMsIGNhdXNpbmcgXCJjYXBhY2l0eSBwcm92aWRlclxuICogaXMgaW4gdXNlXCIgZXJyb3JzIGR1cmluZyBzdGFjayBkZWxldGlvbi5cbiAqXG4gKiBUaGUgYXNwZWN0IHJ1bnMgYXQgc3ludGggdGltZSAod2hlbiBhc3NvY2lhdGlvbnMgZXhpc3QpIGFuZCBhZGRzOlxuICogLSBTZXJ2aWNlIGRlcGVuZHMgb24gQ2ZuQ2x1c3RlckNhcGFjaXR5UHJvdmlkZXJBc3NvY2lhdGlvbnNcbiAqXG4gKiBERUxFVEUgb3JkZXIgYmVjb21lczogU2VydmljZXMg4oaSIEFzc29jaWF0aW9ucyDihpIgQ2x1c3RlclxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xNTM2NlxuICovXG5jbGFzcyBDYXBhY2l0eVByb3ZpZGVyRGVwZW5kZW5jeUFzcGVjdCBpbXBsZW1lbnRzIElBc3BlY3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGNsdXN0ZXI6IENka0NsdXN0ZXI7XG5cbiAgY29uc3RydWN0b3IoY2x1c3RlcjogQ2RrQ2x1c3Rlcikge1xuICAgIHRoaXMuY2x1c3RlciA9IGNsdXN0ZXI7XG4gIH1cblxuICB2aXNpdChub2RlOiBJQ29uc3RydWN0KTogdm9pZCB7XG4gICAgLy8gRmluZCBFQ1Mgc2VydmljZXMgdGhhdCBiZWxvbmcgdG8gdGhpcyBjbHVzdGVyXG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBGYXJnYXRlU2VydmljZSB8fCBub2RlIGluc3RhbmNlb2YgRWMyU2VydmljZSkge1xuICAgICAgLy8gRmluZCBDZm5DbHVzdGVyQ2FwYWNpdHlQcm92aWRlckFzc29jaWF0aW9ucyBpbiB0aGUgY2x1c3RlcidzIGRlc2NlbmRhbnRzXG4gICAgICBjb25zdCBhc3NvY2lhdGlvbnMgPSB0aGlzLmNsdXN0ZXIubm9kZVxuICAgICAgICAuZmluZEFsbCgpXG4gICAgICAgIC5maW5kKFxuICAgICAgICAgIChjaGlsZCk6IGNoaWxkIGlzIENmbkNsdXN0ZXJDYXBhY2l0eVByb3ZpZGVyQXNzb2NpYXRpb25zID0+XG4gICAgICAgICAgICBjaGlsZCBpbnN0YW5jZW9mIENmbkNsdXN0ZXJDYXBhY2l0eVByb3ZpZGVyQXNzb2NpYXRpb25zXG4gICAgICAgICk7XG5cbiAgICAgIGlmIChhc3NvY2lhdGlvbnMpIHtcbiAgICAgICAgLy8gQWRkIGRlcGVuZGVuY3k6IFNlcnZpY2Ug4oaSIEFzc29jaWF0aW9uc1xuICAgICAgICAvLyBERUxFVEUgb3JkZXI6IFNlcnZpY2UgZGVsZXRlZCBmaXJzdCwgdGhlbiBBc3NvY2lhdGlvbnNcbiAgICAgICAgbm9kZS5ub2RlLmFkZERlcGVuZGVuY3koYXNzb2NpYXRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGVudW0gUHJvdG9jb2wge1xuICBIVFRQLFxuICBIVFRQU1xufVxuXG5leHBvcnQgZW51bSBTY2FsaW5nVHlwZSB7XG4gIENQVSA9IFByZWRlZmluZWRNZXRyaWMuRUNTX1NFUlZJQ0VfQVZFUkFHRV9DUFVfVVRJTElaQVRJT04sXG4gIE1FTU9SWSA9IFByZWRlZmluZWRNZXRyaWMuRUNTX1NFUlZJQ0VfQVZFUkFHRV9NRU1PUllfVVRJTElaQVRJT05cbn1cblxuZXhwb3J0IHR5cGUgRWNzQ2FwYWNpdHlQcm92aWRlciA9IFwiRkFSR0FURVwiIHwgXCJGQVJHQVRFX1NQT1RcIiB8IFwiRUMyXCI7XG5cbi8qKlxuICogRUMyIGNhcGFjaXR5IGNvbmZpZ3VyYXRpb24gZm9yIEVDUyBFQzItYmFja2VkIGNsdXN0ZXJzLlxuICogT25seSB1c2VkIHdoZW4gY2FwYWNpdHlQcm92aWRlciBpcyBcIkVDMlwiLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjMkNhcGFjaXR5Q29uZmlnIHtcbiAgLyoqIEVDMiBpbnN0YW5jZSB0eXBlLiBEZWZhdWx0OiBcInQzLm1pY3JvXCIgKi9cbiAgaW5zdGFuY2VUeXBlPzogc3RyaW5nO1xuICAvKiogQU1JIGhhcmR3YXJlIHR5cGUuIERlZmF1bHQ6IFwiQVJNXCIgKEdyYXZpdG9uIC0gYmV0dGVyIGNvc3QvcGVyZm9ybWFuY2UpICovXG4gIGFtaUhhcmR3YXJlVHlwZT86IFwiQVJNXCIgfCBcIlNUQU5EQVJEXCI7XG4gIC8qKiBNaW5pbXVtIG51bWJlciBvZiBpbnN0YW5jZXMuIERlZmF1bHQ6IDEgKi9cbiAgbWluQ2FwYWNpdHk/OiBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMuIERlZmF1bHQ6IDMgKi9cbiAgbWF4Q2FwYWNpdHk/OiBudW1iZXI7XG4gIC8qKiBEZXNpcmVkIG51bWJlciBvZiBFQzIgaW5zdGFuY2VzLiBEZWZhdWx0OiAyIChmb3IgYXZhaWxhYmlsaXR5KSAqL1xuICBkZXNpcmVkQ291bnQ/OiBudW1iZXI7XG4gIC8qKiBNZW1vcnkgbGltaXQgaW4gTWlCIGZvciB0aGUgY29udGFpbmVyLiBEZWZhdWx0OiAxMDI0ICovXG4gIG1lbW9yeUxpbWl0TWlCPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIERvbWFpbiBjb25maWd1cmF0aW9uIGZvciBIVFRQUyBhbmQgRE5TLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERvbWFpbkJhc2VDb25maWcge1xuICBkb21haW5OYW1lOiBzdHJpbmc7XG4gIGhvc3RlZFpvbmU/OiBGamFsbEhvc3RlZFpvbmU7XG4gIGNlcnRpZmljYXRlPzogQ2VydGlmaWNhdGU7XG4gIHNldElkZW50aWZpZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF0ZW5jeURvbWFpbkNvbmZpZyBleHRlbmRzIERvbWFpbkJhc2VDb25maWcge1xuICByZWdpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXZWlnaHRlZERvbWFpbkNvbmZpZyBleHRlbmRzIERvbWFpbkJhc2VDb25maWcge1xuICB3ZWlnaHQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW9Mb2NhdGlvbkRvbWFpbkNvbmZpZyBleHRlbmRzIERvbWFpbkJhc2VDb25maWcge1xuICBnZW9Mb2NhdGlvbjogR2VvTG9jYXRpb247XG59XG5cbmV4cG9ydCB0eXBlIERvbWFpbkNvbmZpZyA9XG4gIHwgRG9tYWluQmFzZUNvbmZpZ1xuICB8IExhdGVuY3lEb21haW5Db25maWdcbiAgfCBXZWlnaHRlZERvbWFpbkNvbmZpZ1xuICB8IEdlb0xvY2F0aW9uRG9tYWluQ29uZmlnO1xuXG4vKipcbiAqIEludGVybmFsIGNvbmZpZ3VyYXRpb24gZm9yIGEgY29udGFpbmVyIGluIGEgbXVsdGktY29udGFpbmVyIEVDUyB0YXNrLlxuICpcbiAqIEluIG11bHRpLWNvbnRhaW5lciB0YXNrcywgdGhlIGZpcnN0IGNvbnRhaW5lciB3aXRoIGEgYHBvcnRgIGlzIHRoZSAqKnByaW1hcnkgY29udGFpbmVyKipcbiAqIHRoYXQgcmVjZWl2ZXMgbG9hZCBiYWxhbmNlciB0cmFmZmljLiBBbGwgb3RoZXIgY29udGFpbmVycyBhcmUgKipzaWRlY2FycyoqIHRoYXQgcHJvdmlkZVxuICogc3VwcG9ydGluZyBmdW5jdGlvbmFsaXR5IChsb2dnaW5nLCBtb25pdG9yaW5nLCBwcm94aWVzLCBldGMuKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUHJpbWFyeSBjb250YWluZXIgKGhhcyBwb3J0KSArIHNpZGVjYXIgKG5vIHBvcnQpXG4gKiBjb250YWluZXJzOiBbXG4gKiAgIHsgbmFtZTogXCJhcHBcIiwgcG9ydDogMzAwMCB9LCAgICAgICAgICAgLy8gUHJpbWFyeSAtIHJlY2VpdmVzIEFMQiB0cmFmZmljXG4gKiAgIHsgbmFtZTogXCJkYXRhZG9nXCIsIGltYWdlOiBcImRhdGFkb2cvYWdlbnRcIiB9ICAvLyBTaWRlY2FyIC0gbW9uaXRvcmluZ1xuICogXVxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjc0NsdXN0ZXJDb250YWluZXJDb25maWcge1xuICAvKiogVW5pcXVlIGNvbnRhaW5lciBuYW1lICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIENvbnRhaW5lciBpbWFnZS4gT3B0aW9uczpcbiAgICogLSBPbWl0OiBVc2VzIGRlZmF1bHQgRUNSIHJlcG9zaXRvcnkgKHByaW1hcnkgY29udGFpbmVyIG9ubHkpXG4gICAqIC0gc3RyaW5nOiBFQ1IgcmVwb3NpdG9yeSBuYW1lIG9yIHB1YmxpYyBpbWFnZSBVUkxcbiAgICogLSBSZXBvc2l0b3J5OiBDREsgRUNSIFJlcG9zaXRvcnkgY29uc3RydWN0XG4gICAqL1xuICBpbWFnZT86IHN0cmluZyB8IFJlcG9zaXRvcnk7XG4gIC8qKlxuICAgKiBQb3J0IHRoZSBjb250YWluZXIgbGlzdGVucyBvbi5cbiAgICogVGhlIGZpcnN0IGNvbnRhaW5lciB3aXRoIGEgcG9ydCBiZWNvbWVzIHRoZSAqKnByaW1hcnkgY29udGFpbmVyKipcbiAgICogYW5kIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgbG9hZCBiYWxhbmNlci5cbiAgICovXG4gIHBvcnQ/OiBudW1iZXI7XG4gIC8qKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgKi9cbiAgZW52aXJvbm1lbnQ/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKipcbiAgICogU2VjcmV0cyBmcm9tIEFXUyBTU00gUGFyYW1ldGVyIFN0b3JlLlxuICAgKiBBcnJheSBvZiBzZWNyZXQgbmFtZXMgdGhhdCB3aWxsIGJlIGZldGNoZWQgZnJvbSB0aGUgc2VydmljZSdzIFNTTSBuYW1lc3BhY2UuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHNlY3JldHM6IFtcIkFQSV9LRVlcIiwgXCJEQl9QQVNTV09SRFwiXVxuICAgKi9cbiAgc2VjcmV0cz86IHN0cmluZ1tdO1xuICAvKiogU2VjcmV0cyBpbXBvcnRlZCBmcm9tIG90aGVyIENESyByZXNvdXJjZXMgKEFXUyBTZWNyZXRzIE1hbmFnZXIpICovXG4gIHNlY3JldHNJbXBvcnQ/OiB7IFtrZXk6IHN0cmluZ106IFNlY3JldEltcG9ydCB9O1xuICAvKiogQ29tbWFuZCB0byBydW4gaW4gdGhlIGNvbnRhaW5lciAqL1xuICBjb21tYW5kPzogc3RyaW5nW107XG4gIC8qKiBFbnRyeSBwb2ludCBmb3IgdGhlIGNvbnRhaW5lciAqL1xuICBlbnRyeVBvaW50Pzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgY29udGFpbmVyIGlzIGVzc2VudGlhbC5cbiAgICogSWYgYW4gZXNzZW50aWFsIGNvbnRhaW5lciBzdG9wcywgYWxsIGNvbnRhaW5lcnMgaW4gdGhlIHRhc2sgc3RvcC5cbiAgICogRGVmYXVsdDogdHJ1ZSBmb3IgcHJpbWFyeSBjb250YWluZXIsIHRydWUgZm9yIHNpZGVjYXJzXG4gICAqL1xuICBlc3NlbnRpYWw/OiBib29sZWFuO1xuICAvKipcbiAgICogSGVhbHRoIGNoZWNrIGNvbmZpZ3VyYXRpb24uXG4gICAqIERlZmF1bHQ6IEZvciBwcmltYXJ5IGNvbnRhaW5lciB3aXRoIHBvcnQsIHVzZXMgY3VybCBoZWFsdGggY2hlY2suXG4gICAqL1xuICBoZWFsdGhDaGVjaz86IHtcbiAgICBjb21tYW5kOiBzdHJpbmdbXTtcbiAgICBpbnRlcnZhbD86IG51bWJlcjtcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIHJldHJpZXM/OiBudW1iZXI7XG4gICAgc3RhcnRQZXJpb2Q/OiBudW1iZXI7XG4gIH07XG59XG5cbi8qKlxuICogQ2x1c3Rlci1sZXZlbCBjb25maWd1cmF0aW9uLlxuICogQ29udHJvbHMgdGhlIHNoYXJlZCBBTEIgZm9yIGFsbCBzZXJ2aWNlcyBpbiB0aGlzIGNsdXN0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNzQ2x1c3RlckNsdXN0ZXJDb25maWcge1xuICAvKipcbiAgICogRG9tYWluIGZvciBIVFRQUyBhY2Nlc3MuXG4gICAqIC0gT21pdDogQUxCIGNyZWF0ZWQgd2l0aCBkZWZhdWx0IEROUyAoKi5lbGIuYW1hem9uYXdzLmNvbSlcbiAgICogLSBTcGVjaWZpZWQ6IENyZWF0ZXMgQUNNIGNlcnRpZmljYXRlICsgUm91dGU1MyBETlMgQSByZWNvcmRcbiAgICovXG4gIGRvbWFpbj86IHN0cmluZztcblxuICAvKipcbiAgICogTG9hZCBiYWxhbmNlciBjb25maWd1cmF0aW9uLlxuICAgKiAtIGZhbHNlOiBObyBBTEIgKGZvciB3b3JrZXJzL2ludGVybmFsIHNlcnZpY2VzKVxuICAgKiAtIFwicHVibGljXCI6IEludGVybmV0LWZhY2luZyBBTEIgKGRlZmF1bHQpXG4gICAqIC0gXCJpbnRlcm5hbFwiOiBWUEMtb25seSBBTEJcbiAgICovXG4gIGxvYWRCYWxhbmNlcj86IGZhbHNlIHwgXCJwdWJsaWNcIiB8IFwiaW50ZXJuYWxcIjtcblxuICAvKipcbiAgICogRW5hYmxlIGRpcmVjdCBFQzIgYWNjZXNzIHdpdGhvdXQgQUxCLlxuICAgKiBPcGVucyBjb250YWluZXIgcG9ydHMgb24gc2VjdXJpdHkgZ3JvdXAgZm9yIGRpcmVjdCBhY2Nlc3MgdmlhIEVDMiBwdWJsaWMgSVAuXG4gICAqIFVzZXMgaG9zdCBuZXR3b3JrIG1vZGUgZm9yIHByZWRpY3RhYmxlIHBvcnQgbWFwcGluZyAoY29udGFpbmVyOjMwMDAg4oaSIGhvc3Q6MzAwMCkuXG4gICAqIE9ubHkgdmFsaWQgd2l0aCBFQzIgY2FwYWNpdHkgcHJvdmlkZXIuXG4gICAqL1xuICBkaXJlY3RBY2Nlc3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEb21haW4gY29uZmlndXJhdGlvbiBmb3IgYWR2YW5jZWQgcm91dGluZyBwb2xpY2llcyAobGF0ZW5jeSwgd2VpZ2h0ZWQsIGdlbykuXG4gICAqIE9ubHkgdXNlZCB3aGVuIGRvbWFpbiBpcyBzcGVjaWZpZWQuXG4gICAqL1xuICBkb21haW5Db25maWc/OiBEb21haW5Db25maWc7XG59XG5cbi8qKlxuICogUm91dGluZyBjb25maWd1cmF0aW9uIGZvciBwYXRoL2hvc3QtYmFzZWQgcm91dGluZyBvbiB0aGUgQUxCLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjc1JvdXRpbmdDb25maWcge1xuICAvKiogUGF0aCBwYXR0ZXJuIGZvciByb3V0aW5nIChlLmcuLCBcIi9hcGkvKlwiLCBcIi91c2Vycy8qXCIpICovXG4gIHBhdGg/OiBzdHJpbmc7XG4gIC8qKiBIb3N0IGhlYWRlciBmb3Igcm91dGluZyAoZS5nLiwgXCJhcGkuZXhhbXBsZS5jb21cIikgKi9cbiAgaG9zdD86IHN0cmluZztcbiAgLyoqIFByaW9yaXR5IGZvciB0aGlzIHJvdXRpbmcgcnVsZSAoMS01MDAwMCkuIExvd2VyID0gaGlnaGVyIHByaW9yaXR5LiAqL1xuICBwcmlvcml0eT86IG51bWJlcjtcbiAgLyoqIEhlYWx0aCBjaGVjayBwYXRoIGZvciB0aGlzIHNlcnZpY2UncyB0YXJnZXQgZ3JvdXAuIERlZmF1bHQ6IFwiL1wiICovXG4gIGhlYWx0aENoZWNrUGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBhIHNlcnZpY2UgaW4gYW4gRUNTIGNsdXN0ZXIuXG4gKiBFYWNoIHNlcnZpY2UgZ2V0cyBpdHMgb3duIHRhc2sgZGVmaW5pdGlvbiwgc2NhbGluZywgYW5kIHRhcmdldCBncm91cC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY3NTZXJ2aWNlUHJvcHMge1xuICAvKiogU2VydmljZSBuYW1lICh1bmlxdWUgd2l0aGluIGNsdXN0ZXIpICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQ29udGFpbmVyIGltYWdlIGZvciB0aGlzIHNlcnZpY2UuXG4gICAqIC0gT21pdDogVXNlcyBjbHVzdGVyJ3MgZGVmYXVsdCBFQ1IgcmVwb3NpdG9yeVxuICAgKiAtIHN0cmluZzogRUNSIHJlcG9zaXRvcnkgbmFtZSBvciBwdWJsaWMgaW1hZ2UgVVJMXG4gICAqIC0gUmVwb3NpdG9yeTogQ0RLIEVDUiBSZXBvc2l0b3J5IGNvbnN0cnVjdFxuICAgKi9cbiAgaW1hZ2U/OiBzdHJpbmcgfCBSZXBvc2l0b3J5O1xuXG4gIC8qKlxuICAgKiBDb250YWluZXIgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgc2VydmljZS5cbiAgICogVGhlIGZpcnN0IGNvbnRhaW5lciB3aXRoIGEgcG9ydCBpcyB0aGUgKipwcmltYXJ5IGNvbnRhaW5lcioqIChyZWNlaXZlcyBBTEIgdHJhZmZpYykuXG4gICAqL1xuICBjb250YWluZXJzOiBFY3NDbHVzdGVyQ29udGFpbmVyQ29uZmlnW107XG5cbiAgLyoqIENQVSB1bml0cyBmb3IgdGhpcyBzZXJ2aWNlJ3MgdGFza3MgKDI1Ni00MDk2KSAqL1xuICBjcHU/OiBudW1iZXI7XG5cbiAgLyoqIE1lbW9yeSBpbiBNaUIgZm9yIHRoaXMgc2VydmljZSdzIHRhc2tzICg1MTItMzA3MjApICovXG4gIG1lbW9yeUxpbWl0TWlCPzogbnVtYmVyO1xuXG4gIC8qKiBEZXNpcmVkIG51bWJlciBvZiB0YXNrcy4gRGVmYXVsdDogMiAqL1xuICBkZXNpcmVkQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqIFNjYWxpbmcgdHlwZSAoQ1BVIG9yIE1FTU9SWSkuIE9taXQgdG8gZGlzYWJsZSBhdXRvLXNjYWxpbmcuICovXG4gIHNjYWxpbmdUeXBlPzogU2NhbGluZ1R5cGU7XG5cbiAgLyoqIE1pbmltdW0gbnVtYmVyIG9mIHRhc2tzIGZvciBhdXRvLXNjYWxpbmcuIERlZmF1bHQ6IDIgKi9cbiAgbWluQ2FwYWNpdHk/OiBudW1iZXI7XG5cbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIHRhc2tzIGZvciBhdXRvLXNjYWxpbmcuIERlZmF1bHQ6IDEwICovXG4gIG1heENhcGFjaXR5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBSb3V0aW5nIHJ1bGVzIGZvciB0aGlzIHNlcnZpY2Ugb24gdGhlIGNsdXN0ZXIncyBBTEIuXG4gICAqIFJlcXVpcmVkIHdoZW4gY2x1c3RlciBoYXMgbXVsdGlwbGUgc2VydmljZXMgd2l0aCBwb3J0cy5cbiAgICovXG4gIHJvdXRpbmc/OiBFY3NSb3V0aW5nQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGlubGluZSBwb2xpY2llcyBmb3IgdGhpcyBzZXJ2aWNlJ3MgdGFzayByb2xlLlxuICAgKiBBZGRlZCBvbiB0b3Agb2YgdGhlIGRlZmF1bHQgRUNTIEV4ZWMgcGVybWlzc2lvbnMuXG4gICAqL1xuICB0YXNrUm9sZUlubGluZVBvbGljaWVzPzoge1xuICAgIFtuYW1lOiBzdHJpbmddOiBQb2xpY3lEb2N1bWVudDtcbiAgfTtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBtYW5hZ2VkIHBvbGljaWVzIGZvciB0aGlzIHNlcnZpY2UncyB0YXNrIHJvbGUuXG4gICAqIEFkZGVkIG9uIHRvcCBvZiB0aGUgZGVmYXVsdCBFQ1MgRXhlYyBwZXJtaXNzaW9ucy5cbiAgICovXG4gIHRhc2tSb2xlTWFuYWdlZFBvbGljaWVzPzogSU1hbmFnZWRQb2xpY3lbXTtcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHRoaXMgc2VydmljZSBuZWVkcyB0byBjb25uZWN0IHRvIChlLmcuLCBkYXRhYmFzZXMsIFMzIGJ1Y2tldHMsIFNRUyBxdWV1ZXMpLlxuICAgKiBDcmVhdGVzIHNlY3VyaXR5IGdyb3VwIHJ1bGVzIGZvciBJQ29ubmVjdGFibGUgcmVzb3VyY2VzIGFuZCBJQU0gZ3JhbnRzIGZvciBJQU0gcmVzb3VyY2VzLlxuICAgKlxuICAgKiBTdXBwb3J0czpcbiAgICogLSBJQ29ubmVjdGFibGU6IFNlY3VyaXR5IGdyb3VwIHJlc291cmNlcyAoUkRTLCBFQ1MsIGV0Yy4pXG4gICAqIC0gSVN0b3JhZ2VDb25uZWN0b3I6IFMzIGJ1Y2tldHMgKElBTSBncmFudHMpXG4gICAqIC0gSUR5bmFtb0RCQ29ubmVjdG9yOiBEeW5hbW9EQiB0YWJsZXMgKElBTSBncmFudHMpXG4gICAqIC0gSVF1ZXVlQ29ubmVjdG9yOiBTUVMgcXVldWVzIChJQU0gZ3JhbnRzKVxuICAgKiAtIENvbm5lY3Rpb25Db25maWc6IEV4cGxpY2l0IGFjY2VzcyBsZXZlbCBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbm5lY3Rpb25zOiBbXG4gICAqICAgZGF0YWJhc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VjdXJpdHkgZ3JvdXAgKFJEUylcbiAgICogICB7IHJlc291cmNlOiBjYWNoZSwgYWNjZXNzOiBcInJlYWRcIiB9LCAgIC8vIFJlYWQtb25seSBEeW5hbW9EQlxuICAgKiAgIHsgcmVzb3VyY2U6IGJ1Y2tldCwgYWNjZXNzOiBcIndyaXRlXCIgfSwgLy8gV3JpdGUtb25seSBTM1xuICAgKiAgIHsgcmVzb3VyY2U6IHF1ZXVlLCBhY2Nlc3M6IFwiY29uc3VtZVwiIH0gLy8gQ29uc3VtZS1vbmx5IFNRU1xuICAgKiBdXG4gICAqL1xuICBjb25uZWN0aW9ucz86IENvbm5lY3Rpb25TcGVjW107XG5cbiAgLyoqXG4gICAqIENhcGFjaXR5IHByb3ZpZGVyIGZvciB0aGlzIHNlcnZpY2UuIFJFUVVJUkVELlxuICAgKiBFYWNoIHNlcnZpY2Ugc3BlY2lmaWVzIGl0cyBvd24gY2FwYWNpdHkgcHJvdmlkZXIuXG4gICAqL1xuICBjYXBhY2l0eVByb3ZpZGVyOiBFY3NDYXBhY2l0eVByb3ZpZGVyO1xuXG4gIC8qKlxuICAgKiBFQzIgY2FwYWNpdHkgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBzZXJ2aWNlLlxuICAgKiBPbmx5IHVzZWQgd2hlbiBzZXJ2aWNlIGNhcGFjaXR5UHJvdmlkZXIgaXMgXCJFQzJcIi5cbiAgICogU2VydmljZXMgd2l0aCBtYXRjaGluZyBlYzJDb25maWcgc2hhcmUgYW4gQVNHIGZvciBlZmZpY2llbmN5LlxuICAgKi9cbiAgZWMyQ29uZmlnPzogRWMyQ2FwYWNpdHlDb25maWc7XG5cbiAgLyoqXG4gICAqIFNTTSBQYXJhbWV0ZXIgU3RvcmUgcGF0aCBmb3Igc2VjcmV0cy5cbiAgICogSWYgY29udGFpbmVycyBoYXZlIHNlY3JldHMgZGVmaW5lZCwgdGhpcyBwYXRoIGlzIHVzZWQgYXMgdGhlIGJhc2UgcGF0aC5cbiAgICogRm9ybWF0OiAvPGFwcD4vPGNsdXN0ZXI+LzxzZXJ2aWNlPlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBzc21TZWNyZXRzUGF0aDogXCIvbXlhcHAvYXBpLWNsdXN0ZXIvdXNlcnNcIlxuICAgKi9cbiAgc3NtU2VjcmV0c1BhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERvY2tlciBidWlsZCB0YXJnZXQgc3RhZ2UgZm9yIG11bHRpLXN0YWdlIERvY2tlcmZpbGVzLlxuICAgKiBXaGVuIHNwZWNpZmllZCwgYXBwZW5kcyBgLTx0YXJnZXQ+YCB0byB0aGUgaW1hZ2UgdGFnLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBXaXRoIGRvY2tlclRhcmdldDogXCJhcGlcIiwgaW1hZ2UgdGFnIGJlY29tZXM6IG15c2VydmljZS1hcGktbGF0ZXN0XG4gICAqIGRvY2tlclRhcmdldDogXCJhcGlcIlxuICAgKi9cbiAgZG9ja2VyVGFyZ2V0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BzIGZvciBjcmVhdGluZyBhbiBFQ1MgY2x1c3RlciB3aXRoIG11bHRpcGxlIHNlcnZpY2VzLlxuICovXG5leHBvcnQgdHlwZSBFY3NDbHVzdGVyUHJvcHMgPSB7XG4gIC8qKiBDbHVzdGVyIG5hbWUgKi9cbiAgY2x1c3Rlck5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQXBwbGljYXRpb24gbmFtZSBmb3IgU1NNIHNlY3JldHMgbmFtZXNwYWNlLlxuICAgKiBSZXF1aXJlZCB3aGVuIGFueSBjb250YWluZXIgdXNlcyBzZWNyZXRzIHdpdGhvdXQgZXhwbGljaXQgc3NtU2VjcmV0c1BhdGguXG4gICAqIFVzZWQgdG8gYnVpbGQgdGhlIHBhdGg6IC88YXBwTmFtZT4vPGNsdXN0ZXJOYW1lPi88c2VydmljZU5hbWU+XG4gICAqL1xuICBhcHBOYW1lPzogc3RyaW5nO1xuXG4gIC8qKiBWUEMgdG8gZGVwbG95IGludG8gKi9cbiAgdnBjPzogSVZwYztcblxuICAvKiogRGVmYXVsdCBFQ1IgcmVwb3NpdG9yeSBvciBjb250YWluZXIgaW1hZ2UgKi9cbiAgZWNyUmVwb3NpdG9yeTogUmVwb3NpdG9yeSB8IFJlcG9zaXRvcnlJbWFnZSB8IHN0cmluZztcblxuICAvLyBOb3RlOiBjYXBhY2l0eVByb3ZpZGVyIGFuZCBlYzJDb25maWcgYXJlIHBlci1zZXJ2aWNlIG9ubHkgKGluIEVjc1NlcnZpY2VQcm9wcylcblxuICAvKipcbiAgICogQ2x1c3RlciBjb25maWd1cmF0aW9uLlxuICAgKiBDb250cm9scyB0aGUgc2hhcmVkIEFMQiBmb3IgYWxsIHNlcnZpY2VzLlxuICAgKi9cbiAgY2x1c3Rlcj86IEVjc0NsdXN0ZXJDbHVzdGVyQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBTZXJ2aWNlcyBpbiB0aGlzIGNsdXN0ZXIuXG4gICAqIEVhY2ggc2VydmljZSBnZXRzIGl0cyBvd24gdGFzayBkZWZpbml0aW9uLCBzY2FsaW5nLCBhbmQgdGFyZ2V0IGdyb3VwLlxuICAgKiBFYWNoIHNlcnZpY2UgTVVTVCBzcGVjaWZ5IGl0cyBvd24gY2FwYWNpdHlQcm92aWRlci5cbiAgICogQWxsIHNlcnZpY2VzIHNoYXJlIHRoZSBjbHVzdGVyJ3MgQUxCICh1bmxlc3MgZGlzYWJsZWQpLlxuICAgKiBUYXNrIHJvbGUgcG9saWNpZXMgYXJlIGNvbmZpZ3VyZWQgcGVyLXNlcnZpY2UgZm9yIGxlYXN0LXByaXZpbGVnZS5cbiAgICovXG4gIHNlcnZpY2VzOiBFY3NTZXJ2aWNlUHJvcHNbXTtcbn07XG5cbi8qKlxuICogRGF0YSB0cmFja2VkIGZvciBlYWNoIHNlcnZpY2UgaW4gdGhlIGNsdXN0ZXIuXG4gKi9cbmludGVyZmFjZSBTZXJ2aWNlRGF0YSB7XG4gIHNlcnZpY2U6IEZhcmdhdGVTZXJ2aWNlIHwgRWMyU2VydmljZTtcbiAgdGFza0RlZmluaXRpb246IEZhcmdhdGVUYXNrRGVmaW5pdGlvbiB8IEVjMlRhc2tEZWZpbml0aW9uO1xuICAvKiogUm9sZSBmb3IgRUNTIGFnZW50IChwdWxsIGltYWdlcywgd3JpdGUgbG9ncywgaW5qZWN0IHNlY3JldHMpICovXG4gIGV4ZWN1dGlvblJvbGU6IFJvbGU7XG4gIC8qKiBSb2xlIGZvciBhcHBsaWNhdGlvbiBjb2RlICh1c2VyIHBvbGljaWVzLCBFQ1MgRXhlYykgKi9cbiAgdGFza1JvbGU6IFJvbGU7XG4gIGNvbnRhaW5lcnM6IENvbnRhaW5lckRlZmluaXRpb25bXTtcbiAgcHJpbWFyeUNvbnRhaW5lcj86IENvbnRhaW5lckRlZmluaXRpb247XG4gIHRhcmdldEdyb3VwPzogSUFwcGxpY2F0aW9uVGFyZ2V0R3JvdXA7XG4gIHNjYWxpbmdQb2xpY3k/OiBUYXJnZXRUcmFja2luZ1NjYWxpbmdQb2xpY3k7XG59XG5cbi8qKlxuICogRUNTIENsdXN0ZXIgc3VwcG9ydGluZyBtdWx0aXBsZSBzZXJ2aWNlcyB3aXRoIGEgc2hhcmVkIEFMQi5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2luZ2xlIHNlcnZpY2UgY2x1c3RlclxuICogbmV3IEVjc0NsdXN0ZXIoc2NvcGUsIFwiV2ViQ2x1c3RlclwiLCB7XG4gKiAgIGNsdXN0ZXJOYW1lOiBcIldlYkNsdXN0ZXJcIixcbiAqICAgZWNyUmVwb3NpdG9yeTogZWNyLFxuICogICBzZXJ2aWNlczogW1xuICogICAgIHsgbmFtZTogXCJ3ZWJcIiwgY29udGFpbmVyczogW3sgbmFtZTogXCJhcHBcIiwgcG9ydDogMzAwMCB9XSB9XG4gKiAgIF1cbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBNdWx0aS1zZXJ2aWNlIGNsdXN0ZXIgd2l0aCByb3V0aW5nXG4gKiBuZXcgRWNzQ2x1c3RlcihzY29wZSwgXCJBcGlDbHVzdGVyXCIsIHtcbiAqICAgY2x1c3Rlck5hbWU6IFwiQXBpQ2x1c3RlclwiLFxuICogICBjbHVzdGVyOiB7IGRvbWFpbjogXCJhcGkuZXhhbXBsZS5jb21cIiB9LFxuICogICBlY3JSZXBvc2l0b3J5OiBlY3IsXG4gKiAgIHNlcnZpY2VzOiBbXG4gKiAgICAgeyBuYW1lOiBcInVzZXJzXCIsIGNvbnRhaW5lcnM6IFt7IG5hbWU6IFwiYXBwXCIsIHBvcnQ6IDMwMDAgfV0sIHJvdXRpbmc6IHsgcGF0aDogXCIvdXNlcnMvKlwiIH0gfSxcbiAqICAgICB7IG5hbWU6IFwib3JkZXJzXCIsIGNvbnRhaW5lcnM6IFt7IG5hbWU6IFwiYXBwXCIsIHBvcnQ6IDMwMDEgfV0sIHJvdXRpbmc6IHsgcGF0aDogXCIvb3JkZXJzLypcIiB9IH1cbiAqICAgXVxuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdvcmtlciBjbHVzdGVyIChubyBBTEIpXG4gKiBuZXcgRWNzQ2x1c3RlcihzY29wZSwgXCJXb3JrZXJzXCIsIHtcbiAqICAgY2x1c3Rlck5hbWU6IFwiV29ya2Vyc1wiLFxuICogICBjbHVzdGVyOiB7IGxvYWRCYWxhbmNlcjogZmFsc2UgfSxcbiAqICAgZWNyUmVwb3NpdG9yeTogZWNyLFxuICogICBzZXJ2aWNlczogW1xuICogICAgIHsgbmFtZTogXCJwcm9jZXNzb3JcIiwgY29udGFpbmVyczogW3sgbmFtZTogXCJ3b3JrZXJcIiB9XSB9XG4gKiAgIF1cbiAqIH0pO1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFY3NDbHVzdGVyIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUNvbm5lY3RhYmxlIHtcbiAgcHVibGljIGNvbm5lY3Rpb25zITogQ29ubmVjdGlvbnM7XG5cbiAgLy8gQ2x1c3Rlci1sZXZlbCByZXNvdXJjZXNcbiAgcHJpdmF0ZSBjbHVzdGVyITogQ2RrQ2x1c3RlcjtcbiAgcHJpdmF0ZSBsb2FkQmFsYW5jZXI/OiBBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcjtcbiAgcHJpdmF0ZSBsb2FkQmFsYW5jZXJMaXN0ZW5lcj86IEFwcGxpY2F0aW9uTGlzdGVuZXI7XG4gIHByaXZhdGUgaG9zdGVkWm9uZT86IElIb3N0ZWRab25lO1xuICBwcml2YXRlIGNlcnRpZmljYXRlPzogQ2VydGlmaWNhdGU7XG4gIHByaXZhdGUgYVJlY29yZD86IEFSZWNvcmQ7XG5cbiAgLy8gRUMyLXNwZWNpZmljXG4gIHByaXZhdGUgYXV0b1NjYWxpbmdHcm91cD86IEF1dG9TY2FsaW5nR3JvdXA7XG4gIHByaXZhdGUgYXNnU2VjdXJpdHlHcm91cD86IFNlY3VyaXR5R3JvdXA7XG4gIHByaXZhdGUgYXNnQ2FwYWNpdHlQcm92aWRlcj86IEFzZ0NhcGFjaXR5UHJvdmlkZXI7XG4gIHByaXZhdGUgbG9hZEJhbGFuY2VyU2VjdXJpdHlHcm91cD86IFNlY3VyaXR5R3JvdXA7XG5cbiAgLy8gUGVyLXNlcnZpY2UgdHJhY2tpbmdcbiAgcHJpdmF0ZSBzZXJ2aWNlcyA9IG5ldyBNYXA8c3RyaW5nLCBTZXJ2aWNlRGF0YT4oKTtcblxuICAvLyBQZXItc2VydmljZSBBU0cgY2FwYWNpdHkgcHJvdmlkZXJzIChrZXllZCBieSBFQzIgY29uZmlnIHNpZ25hdHVyZSlcbiAgcHJpdmF0ZSBhc2dDYXBhY2l0eVByb3ZpZGVycyA9IG5ldyBNYXA8c3RyaW5nLCBBc2dDYXBhY2l0eVByb3ZpZGVyPigpO1xuXG4gIC8vIENvbmZpZ3VyYXRpb25cbiAgcHJpdmF0ZSBzY29wZTogQ29uc3RydWN0O1xuICBwcml2YXRlIHByb3BzOiBFY3NDbHVzdGVyUHJvcHM7XG4gIHByaXZhdGUgbG9hZEJhbGFuY2VyRGlzYWJsZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgZGlyZWN0QWNjZXNzRW5hYmxlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBuZXh0UHJpb3JpdHkgPSAxMDA7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEVjc0NsdXN0ZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMuZGlyZWN0QWNjZXNzRW5hYmxlZCA9IHByb3BzLmNsdXN0ZXI/LmRpcmVjdEFjY2VzcyA9PT0gdHJ1ZTtcbiAgICB0aGlzLmxvYWRCYWxhbmNlckRpc2FibGVkID1cbiAgICAgIHByb3BzLmNsdXN0ZXI/LmxvYWRCYWxhbmNlciA9PT0gZmFsc2UgfHwgdGhpcy5kaXJlY3RBY2Nlc3NFbmFibGVkO1xuXG4gICAgdGhpcy52YWxpZGF0ZVByb3BzKHByb3BzKTtcblxuICAgIHRoaXMuYWRkQ2x1c3Rlcihwcm9wcyk7XG5cbiAgICBmb3IgKGNvbnN0IHNlcnZpY2VQcm9wcyBvZiBwcm9wcy5zZXJ2aWNlcykge1xuICAgICAgaWYgKHNlcnZpY2VQcm9wcy5jYXBhY2l0eVByb3ZpZGVyID09PSBcIkVDMlwiKSB7XG4gICAgICAgIHRoaXMuZ2V0T3JDcmVhdGVBc2dDYXBhY2l0eVByb3ZpZGVyKHNlcnZpY2VQcm9wcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmxvYWRCYWxhbmNlckRpc2FibGVkKSB7XG4gICAgICB0aGlzLmFkZExvYWRCYWxhbmNlcihwcm9wcyk7XG5cbiAgICAgIGlmIChwcm9wcy5jbHVzdGVyPy5kb21haW4gfHwgcHJvcHMuY2x1c3Rlcj8uZG9tYWluQ29uZmlnKSB7XG4gICAgICAgIHRoaXMuYWRkSG9zdGVkWm9uZShwcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWRkTG9hZEJhbGFuY2VyTGlzdGVuZXIocHJvcHMpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kaXJlY3RBY2Nlc3NFbmFibGVkKSB7XG4gICAgICB0aGlzLmFkZERpcmVjdEFjY2Vzc091dHB1dHMocHJvcHMpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc2VydmljZVByb3BzIG9mIHByb3BzLnNlcnZpY2VzKSB7XG4gICAgICB0aGlzLmFkZFNlcnZpY2VUb0NsdXN0ZXIoc2VydmljZVByb3BzKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlcGxveWFibGVTZXJ2aWNlT3V0cHV0cyhwcm9wcyk7XG5cbiAgICB0aGlzLnNldHVwQ29ubmVjdGlvbnMocHJvcHMpO1xuXG4gICAgQXNwZWN0cy5vZih0aGlzKS5hZGQobmV3IENhcGFjaXR5UHJvdmlkZXJEZXBlbmRlbmN5QXNwZWN0KHRoaXMuY2x1c3RlcikpO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgY2x1c3RlcidzIGxvYWQgYmFsYW5jZXIuIFVuZGVmaW5lZCBpZiBkaXNhYmxlZC4gKi9cbiAgZ2V0TG9hZEJhbGFuY2VyKCk6IEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkQmFsYW5jZXI7XG4gIH1cblxuICAvKiogR2V0IHRoZSBsb2FkIGJhbGFuY2VyJ3MgbGlzdGVuZXIuIFVuZGVmaW5lZCBpZiBkaXNhYmxlZC4gKi9cbiAgZ2V0TGlzdGVuZXIoKTogQXBwbGljYXRpb25MaXN0ZW5lciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubG9hZEJhbGFuY2VyTGlzdGVuZXI7XG4gIH1cblxuICAvKiogR2V0IGEgc3BlY2lmaWMgc2VydmljZSBieSBuYW1lLiAqL1xuICBnZXRTZXJ2aWNlKG5hbWU6IHN0cmluZyk6IEZhcmdhdGVTZXJ2aWNlIHwgRWMyU2VydmljZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc2VydmljZXMuZ2V0KG5hbWUpPy5zZXJ2aWNlO1xuICB9XG5cbiAgLyoqIEdldCBhbGwgc2VydmljZXMgaW4gdGhpcyBjbHVzdGVyLiAqL1xuICBnZXRTZXJ2aWNlcygpOiBNYXA8c3RyaW5nLCBGYXJnYXRlU2VydmljZSB8IEVjMlNlcnZpY2U+IHtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgTWFwPHN0cmluZywgRmFyZ2F0ZVNlcnZpY2UgfCBFYzJTZXJ2aWNlPigpO1xuICAgIGZvciAoY29uc3QgW25hbWUsIGRhdGFdIG9mIHRoaXMuc2VydmljZXMpIHtcbiAgICAgIHJlc3VsdC5zZXQobmFtZSwgZGF0YS5zZXJ2aWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIEVDUyBjbHVzdGVyIGNvbnN0cnVjdC4gKi9cbiAgZ2V0Q2x1c3RlcigpOiBDZGtDbHVzdGVyIHtcbiAgICByZXR1cm4gdGhpcy5jbHVzdGVyO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgQUxCIFVSTCAoaHR0cDovLyBvciBodHRwczovLykuICovXG4gIGdldFVybCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5sb2FkQmFsYW5jZXIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvdG9jb2wgPSB0aGlzLmNlcnRpZmljYXRlID8gXCJodHRwc1wiIDogXCJodHRwXCI7XG4gICAgY29uc3QgZG9tYWluID1cbiAgICAgIHRoaXMucHJvcHMuY2x1c3Rlcj8uZG9tYWluIHx8IHRoaXMubG9hZEJhbGFuY2VyLmxvYWRCYWxhbmNlckRuc05hbWU7XG4gICAgcmV0dXJuIGAke3Byb3RvY29sfTovLyR7ZG9tYWlufWA7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgc2VydmljZSB0byB0aGUgY2x1c3Rlci5cbiAgICogRWFjaCBzZXJ2aWNlIGdldHMgaXRzIG93biB0YXNrIGRlZmluaXRpb24sIGNvbnRhaW5lcnMsIGFuZCB0YXJnZXQgZ3JvdXAuXG4gICAqL1xuICBwcml2YXRlIGFkZFNlcnZpY2VUb0NsdXN0ZXIoc2VydmljZVByb3BzOiBFY3NTZXJ2aWNlUHJvcHMpOiB2b2lkIHtcbiAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHNlcnZpY2VQcm9wcy5uYW1lO1xuXG4gICAgY29uc3QgZXhlY3V0aW9uUm9sZSA9IHRoaXMuY3JlYXRlRXhlY3V0aW9uUm9sZShzZXJ2aWNlTmFtZSk7XG4gICAgY29uc3QgdGFza1JvbGUgPSB0aGlzLmNyZWF0ZVRhc2tSb2xlKHNlcnZpY2VOYW1lLCBzZXJ2aWNlUHJvcHMpO1xuXG4gICAgY29uc3QgdGFza0RlZmluaXRpb24gPSB0aGlzLmNyZWF0ZVRhc2tEZWZpbml0aW9uKFxuICAgICAgc2VydmljZU5hbWUsXG4gICAgICBzZXJ2aWNlUHJvcHMsXG4gICAgICBleGVjdXRpb25Sb2xlLFxuICAgICAgdGFza1JvbGVcbiAgICApO1xuXG4gICAgY29uc3QgeyBjb250YWluZXJzLCBwcmltYXJ5Q29udGFpbmVyIH0gPSB0aGlzLmFkZENvbnRhaW5lcnNUb1Rhc2soXG4gICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgIHNlcnZpY2VQcm9wcyxcbiAgICAgIHRhc2tEZWZpbml0aW9uXG4gICAgKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLmNyZWF0ZVNlcnZpY2UoXG4gICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgIHNlcnZpY2VQcm9wcyxcbiAgICAgIHRhc2tEZWZpbml0aW9uXG4gICAgKTtcblxuICAgIGxldCB0YXJnZXRHcm91cDogSUFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAgfCB1bmRlZmluZWQ7XG4gICAgaWYgKFxuICAgICAgIXRoaXMubG9hZEJhbGFuY2VyRGlzYWJsZWQgJiZcbiAgICAgIHByaW1hcnlDb250YWluZXIgJiZcbiAgICAgIHRoaXMubG9hZEJhbGFuY2VyTGlzdGVuZXJcbiAgICApIHtcbiAgICAgIHRhcmdldEdyb3VwID0gdGhpcy5yZWdpc3RlclNlcnZpY2VXaXRoQUxCKFxuICAgICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgICAgc2VydmljZVByb3BzLFxuICAgICAgICBzZXJ2aWNlLFxuICAgICAgICBwcmltYXJ5Q29udGFpbmVyXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBzY2FsaW5nUG9saWN5OiBUYXJnZXRUcmFja2luZ1NjYWxpbmdQb2xpY3kgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHNlcnZpY2VQcm9wcy5zY2FsaW5nVHlwZSkge1xuICAgICAgc2NhbGluZ1BvbGljeSA9IHRoaXMuYWRkU2VydmljZVNjYWxpbmcoXG4gICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICBzZXJ2aWNlUHJvcHMsXG4gICAgICAgIHNlcnZpY2VcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXJ2aWNlcy5zZXQoc2VydmljZU5hbWUsIHtcbiAgICAgIHNlcnZpY2UsXG4gICAgICB0YXNrRGVmaW5pdGlvbixcbiAgICAgIGV4ZWN1dGlvblJvbGUsXG4gICAgICB0YXNrUm9sZSxcbiAgICAgIGNvbnRhaW5lcnMsXG4gICAgICBwcmltYXJ5Q29udGFpbmVyLFxuICAgICAgdGFyZ2V0R3JvdXAsXG4gICAgICBzY2FsaW5nUG9saWN5XG4gICAgfSk7XG5cbiAgICBpZiAoc2VydmljZVByb3BzLmNvbm5lY3Rpb25zICYmIHNlcnZpY2VQcm9wcy5jb25uZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwcm9jZXNzQ29ubmVjdGlvbnMoXG4gICAgICAgICAgc2VydmljZVByb3BzLmNvbm5lY3Rpb25zLFxuICAgICAgICAgIHRhc2tSb2xlLCAvLyBJR3JhbnRhYmxlICh0YXNrIHJvbGUgZm9yIElBTSBncmFudHMpXG4gICAgICAgICAgc2VydmljZSAvLyBJQ29ubmVjdGFibGUgKHNlY3VyaXR5IGdyb3VwIGZvciBuZXR3b3JrIGFjY2VzcylcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRmFpbGVkIHRvIHByb2Nlc3MgY29ubmVjdGlvbnMgZm9yIEVDUyBzZXJ2aWNlICcke3NlcnZpY2VOYW1lfSc6ICR7XG4gICAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVQcm9wcyhwcm9wczogRWNzQ2x1c3RlclByb3BzKTogdm9pZCB7XG4gICAgLy8gVmFsaWRhdGUgc2VydmljZXMgYXJyYXlcbiAgICBpZiAoIXByb3BzLnNlcnZpY2VzIHx8IHByb3BzLnNlcnZpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXQgbGVhc3Qgb25lIHNlcnZpY2UgbXVzdCBiZSBzcGVjaWZpZWQuXCIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGUgc2VydmljZSBuYW1lc1xuICAgIGNvbnN0IHNlcnZpY2VOYW1lcyA9IHByb3BzLnNlcnZpY2VzLm1hcCgocykgPT4gcy5uYW1lKTtcbiAgICBjb25zdCBkdXBsaWNhdGVTZXJ2aWNlcyA9IHNlcnZpY2VOYW1lcy5maWx0ZXIoXG4gICAgICAobmFtZSwgaW5kZXgpID0+IHNlcnZpY2VOYW1lcy5pbmRleE9mKG5hbWUpICE9PSBpbmRleFxuICAgICk7XG4gICAgaWYgKGR1cGxpY2F0ZVNlcnZpY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYER1cGxpY2F0ZSBzZXJ2aWNlIG5hbWVzOiAke1suLi5uZXcgU2V0KGR1cGxpY2F0ZVNlcnZpY2VzKV0uam9pbihcIiwgXCIpfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgcm91dGluZyB3aGVuIG11bHRpcGxlIHNlcnZpY2VzIGhhdmUgcG9ydHNcbiAgICBjb25zdCBzZXJ2aWNlc1dpdGhQb3J0cyA9IHByb3BzLnNlcnZpY2VzLmZpbHRlcigocykgPT5cbiAgICAgIHMuY29udGFpbmVycy5zb21lKChjKSA9PiBjLnBvcnQgIT09IHVuZGVmaW5lZClcbiAgICApO1xuXG4gICAgaWYgKHNlcnZpY2VzV2l0aFBvcnRzLmxlbmd0aCA+IDEgJiYgIXRoaXMubG9hZEJhbGFuY2VyRGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IG1pc3NpbmdSb3V0aW5nID0gc2VydmljZXNXaXRoUG9ydHMuZmlsdGVyKFxuICAgICAgICAocykgPT4gIXMucm91dGluZz8ucGF0aCAmJiAhcy5yb3V0aW5nPy5ob3N0XG4gICAgICApO1xuICAgICAgaWYgKG1pc3NpbmdSb3V0aW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBTZXJ2aWNlcyB3aXRoIHBvcnRzIHJlcXVpcmUgcm91dGluZyBjb25maWcgd2hlbiBjbHVzdGVyIGhhcyBtdWx0aXBsZSBzZXJ2aWNlczogYCArXG4gICAgICAgICAgICBgJHttaXNzaW5nUm91dGluZy5tYXAoKHMpID0+IHMubmFtZSkuam9pbihcIiwgXCIpfS4gYCArXG4gICAgICAgICAgICBcIkFkZCByb3V0aW5nOiB7IHBhdGg6ICcvLi4uJyB9IHRvIGVhY2ggc2VydmljZS5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGVhY2ggc2VydmljZSdzIGNvbnRhaW5lcnNcbiAgICBmb3IgKGNvbnN0IHNlcnZpY2Ugb2YgcHJvcHMuc2VydmljZXMpIHtcbiAgICAgIGlmICghc2VydmljZS5jb250YWluZXJzIHx8IHNlcnZpY2UuY29udGFpbmVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBTZXJ2aWNlICcke3NlcnZpY2UubmFtZX0nOiBBdCBsZWFzdCBvbmUgY29udGFpbmVyIG11c3QgYmUgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBjb250YWluZXIgbmFtZXMgd2l0aGluIHNlcnZpY2VcbiAgICAgIGNvbnN0IGNvbnRhaW5lck5hbWVzID0gc2VydmljZS5jb250YWluZXJzLm1hcCgoYykgPT4gYy5uYW1lKTtcbiAgICAgIGNvbnN0IGR1cGxpY2F0ZUNvbnRhaW5lcnMgPSBjb250YWluZXJOYW1lcy5maWx0ZXIoXG4gICAgICAgIChuYW1lLCBpbmRleCkgPT4gY29udGFpbmVyTmFtZXMuaW5kZXhPZihuYW1lKSAhPT0gaW5kZXhcbiAgICAgICk7XG4gICAgICBpZiAoZHVwbGljYXRlQ29udGFpbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgU2VydmljZSAnJHtzZXJ2aWNlLm5hbWV9JzogRHVwbGljYXRlIGNvbnRhaW5lciBuYW1lczogYCArXG4gICAgICAgICAgICBgJHtbLi4ubmV3IFNldChkdXBsaWNhdGVDb250YWluZXJzKV0uam9pbihcIiwgXCIpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldHVwQ29ubmVjdGlvbnMocHJvcHM6IEVjc0NsdXN0ZXJQcm9wcyk6IHZvaWQge1xuICAgIGxldCBkZWZhdWx0UG9ydCA9IDgwO1xuICAgIGZvciAoY29uc3Qgc2VydmljZSBvZiBwcm9wcy5zZXJ2aWNlcykge1xuICAgICAgY29uc3QgcHJpbWFyeUNvbnRhaW5lciA9IHNlcnZpY2UuY29udGFpbmVycy5maW5kKFxuICAgICAgICAoYykgPT4gYy5wb3J0ICE9PSB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgICBpZiAocHJpbWFyeUNvbnRhaW5lcj8ucG9ydCkge1xuICAgICAgICBkZWZhdWx0UG9ydCA9IHByaW1hcnlDb250YWluZXIucG9ydDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2VjdXJpdHlHcm91cHM6IElTZWN1cml0eUdyb3VwW10gPSBbXTtcblxuICAgIGlmICh0aGlzLmFzZ1NlY3VyaXR5R3JvdXApIHtcbiAgICAgIHNlY3VyaXR5R3JvdXBzLnB1c2godGhpcy5hc2dTZWN1cml0eUdyb3VwKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHNlcnZpY2VEYXRhIG9mIHRoaXMuc2VydmljZXMudmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IHNlcnZpY2VTZ3MgPSBzZXJ2aWNlRGF0YS5zZXJ2aWNlPy5jb25uZWN0aW9ucz8uc2VjdXJpdHlHcm91cHMgfHwgW107XG4gICAgICBmb3IgKGNvbnN0IHNnIG9mIHNlcnZpY2VTZ3MpIHtcbiAgICAgICAgaWYgKCFzZWN1cml0eUdyb3Vwcy5pbmNsdWRlcyhzZykpIHtcbiAgICAgICAgICBzZWN1cml0eUdyb3Vwcy5wdXNoKHNnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY29ubmVjdGlvbnMgPSBuZXcgQ29ubmVjdGlvbnMoe1xuICAgICAgc2VjdXJpdHlHcm91cHMsXG4gICAgICBkZWZhdWx0UG9ydDogUG9ydC50Y3AoZGVmYXVsdFBvcnQpXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgZXhlY3V0aW9uIHJvbGUgZm9yIEVDUyBpbmZyYXN0cnVjdHVyZSBvcGVyYXRpb25zLlxuICAgKiBVc2VkIGJ5IHRoZSBFQ1MgYWdlbnQgdG8gcHVsbCBpbWFnZXMsIHdyaXRlIGxvZ3MsIGFuZCBpbmplY3Qgc2VjcmV0cy5cbiAgICogTk9UIHVzZWQgYnkgYXBwbGljYXRpb24gY29kZSAtIHRoYXQncyB0aGUgdGFzayByb2xlLlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVFeGVjdXRpb25Sb2xlKHNlcnZpY2VOYW1lOiBzdHJpbmcpOiBSb2xlIHtcbiAgICBjb25zdCBleGVjdXRpb25Sb2xlID0gbmV3IFJvbGUodGhpcywgYCR7c2VydmljZU5hbWV9RXhlY3V0aW9uUm9sZWAsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoXCJlY3MtdGFza3MuYW1hem9uYXdzLmNvbVwiKVxuICAgIH0pO1xuXG4gICAgZXhlY3V0aW9uUm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwiZWNyOkdldEF1dGhvcml6YXRpb25Ub2tlblwiLFxuICAgICAgICAgIFwiZWNyOkJhdGNoQ2hlY2tMYXllckF2YWlsYWJpbGl0eVwiLFxuICAgICAgICAgIFwiZWNyOkdldERvd25sb2FkVXJsRm9yTGF5ZXJcIixcbiAgICAgICAgICBcImVjcjpCYXRjaEdldEltYWdlXCJcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBsb2dHcm91cEFybiA9IGBhcm46YXdzOmxvZ3M6JHtTdGFjay5vZih0aGlzKS5yZWdpb259OiR7U3RhY2sub2YodGhpcykuYWNjb3VudH06bG9nLWdyb3VwOi9lY3MvJHt0aGlzLnByb3BzLmNsdXN0ZXJOYW1lfSpgO1xuICAgIGV4ZWN1dGlvblJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcImxvZ3M6Q3JlYXRlTG9nU3RyZWFtXCIsXG4gICAgICAgICAgXCJsb2dzOlB1dExvZ0V2ZW50c1wiLFxuICAgICAgICAgIFwibG9nczpDcmVhdGVMb2dHcm91cFwiXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW2xvZ0dyb3VwQXJuLCBgJHtsb2dHcm91cEFybn06KmBdXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBzZWNyZXROYW1lcyA9IHRoaXMuY29sbGVjdFNlY3JldHNNYW5hZ2VyU2VjcmV0TmFtZXMoKTtcbiAgICBpZiAoc2VjcmV0TmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc2VjcmV0QXJucyA9IHNlY3JldE5hbWVzLm1hcChcbiAgICAgICAgKHNlY3JldE5hbWUpID0+XG4gICAgICAgICAgYGFybjphd3M6c2VjcmV0c21hbmFnZXI6JHtTdGFjay5vZih0aGlzKS5yZWdpb259OiR7U3RhY2sub2YodGhpcykuYWNjb3VudH06c2VjcmV0OiR7c2VjcmV0TmFtZX0tKmBcbiAgICAgICk7XG4gICAgICBleGVjdXRpb25Sb2xlLmFkZFRvUG9saWN5KFxuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICBcInNlY3JldHNtYW5hZ2VyOkdldFNlY3JldFZhbHVlXCIsXG4gICAgICAgICAgICBcInNlY3JldHNtYW5hZ2VyOkRlc2NyaWJlU2VjcmV0XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogc2VjcmV0QXJuc1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNTc21TZWNyZXRzID0gdGhpcy5wcm9wcy5zZXJ2aWNlcy5zb21lKChzZXJ2aWNlKSA9PlxuICAgICAgc2VydmljZS5jb250YWluZXJzLnNvbWUoXG4gICAgICAgIChjb250YWluZXIpID0+IGNvbnRhaW5lci5zZWNyZXRzICYmIGNvbnRhaW5lci5zZWNyZXRzLmxlbmd0aCA+IDBcbiAgICAgIClcbiAgICApO1xuICAgIGlmIChoYXNTc21TZWNyZXRzKSB7XG4gICAgICBpZiAoIXRoaXMucHJvcHMuYXBwTmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEVDUyBjbHVzdGVyICcke3RoaXMucHJvcHMuY2x1c3Rlck5hbWV9JyBoYXMgc2VydmljZXMgdXNpbmcgc2VjcmV0cyBidXQgYXBwTmFtZSBpcyBub3QgY29uZmlndXJlZC4gYCArXG4gICAgICAgICAgICBgU2V0IGFwcE5hbWUgb24gY2x1c3RlciBwcm9wcyB0byBlbmFibGUgc2NvcGVkIElBTSBwZXJtaXNzaW9ucyBmb3IgU1NNIFBhcmFtZXRlciBTdG9yZSBhY2Nlc3MuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZXhlY3V0aW9uUm9sZS5hZGRUb1BvbGljeShcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgYWN0aW9uczogW1wic3NtOkdldFBhcmFtZXRlcnNcIiwgXCJzc206R2V0UGFyYW1ldGVyXCJdLFxuICAgICAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOnNzbToqOio6cGFyYW1ldGVyLyR7dGhpcy5wcm9wcy5hcHBOYW1lfS8qYF1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gS01TIGRlY3J5cHQgZm9yIFNTTSBTZWN1cmVTdHJpbmcgYW5kIFNlY3JldHMgTWFuYWdlciB3aXRoIGN1c3RvbWVyLW1hbmFnZWQga2V5cyAoQ01LcylcbiAgICBleGVjdXRpb25Sb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXCJrbXM6RGVjcnlwdFwiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICBcImttczpWaWFTZXJ2aWNlXCI6IFtcbiAgICAgICAgICAgICAgYHNzbS4ke1N0YWNrLm9mKHRoaXMpLnJlZ2lvbn0uYW1hem9uYXdzLmNvbWAsXG4gICAgICAgICAgICAgIGBzZWNyZXRzbWFuYWdlci4ke1N0YWNrLm9mKHRoaXMpLnJlZ2lvbn0uYW1hem9uYXdzLmNvbWBcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJldHVybiBleGVjdXRpb25Sb2xlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHRhc2sgcm9sZSBmb3IgYXBwbGljYXRpb24gY29kZSBydW5uaW5nIGluIHRoZSBjb250YWluZXIuXG4gICAqIFRoaXMgcm9sZSBpcyBhc3N1bWVkIGJ5IHRoZSBhcHBsaWNhdGlvbiwgbm90IHRoZSBFQ1MgYWdlbnQuXG4gICAqIEluY2x1ZGVzIGRlZmF1bHQgRUNTIEV4ZWMgcGVybWlzc2lvbnMgcGx1cyBhbnkgc2VydmljZS1zcGVjaWZpYyBwb2xpY2llcy5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlVGFza1JvbGUoXG4gICAgc2VydmljZU5hbWU6IHN0cmluZyxcbiAgICBzZXJ2aWNlUHJvcHM6IEVjc1NlcnZpY2VQcm9wc1xuICApOiBSb2xlIHtcbiAgICBjb25zdCB0YXNrUm9sZSA9IG5ldyBSb2xlKHRoaXMsIGAke3NlcnZpY2VOYW1lfVRhc2tSb2xlYCwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgU2VydmljZVByaW5jaXBhbChcImVjcy10YXNrcy5hbWF6b25hd3MuY29tXCIpXG4gICAgfSk7XG5cbiAgICAvLyBTU00gcGVybWlzc2lvbnMgZm9yIEVDUyBFeGVjIChlY3MgZXhlY3V0ZS1jb21tYW5kKVxuICAgIHRhc2tSb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJzc21tZXNzYWdlczpDcmVhdGVDb250cm9sQ2hhbm5lbFwiLFxuICAgICAgICAgIFwic3NtbWVzc2FnZXM6Q3JlYXRlRGF0YUNoYW5uZWxcIixcbiAgICAgICAgICBcInNzbW1lc3NhZ2VzOk9wZW5Db250cm9sQ2hhbm5lbFwiLFxuICAgICAgICAgIFwic3NtbWVzc2FnZXM6T3BlbkRhdGFDaGFubmVsXCJcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpZiAoc2VydmljZVByb3BzLnRhc2tSb2xlSW5saW5lUG9saWNpZXMpIHtcbiAgICAgIGZvciAoY29uc3QgW3BvbGljeU5hbWUsIHBvbGljeURvY3VtZW50XSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgICAgc2VydmljZVByb3BzLnRhc2tSb2xlSW5saW5lUG9saWNpZXNcbiAgICAgICkpIHtcbiAgICAgICAgdGFza1JvbGUuYXR0YWNoSW5saW5lUG9saWN5KFxuICAgICAgICAgIG5ldyBQb2xpY3kodGhpcywgYCR7c2VydmljZU5hbWV9JHtwb2xpY3lOYW1lfWAsIHtcbiAgICAgICAgICAgIGRvY3VtZW50OiBwb2xpY3lEb2N1bWVudFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNlcnZpY2VQcm9wcy50YXNrUm9sZU1hbmFnZWRQb2xpY2llcykge1xuICAgICAgZm9yIChjb25zdCBwb2xpY3kgb2Ygc2VydmljZVByb3BzLnRhc2tSb2xlTWFuYWdlZFBvbGljaWVzKSB7XG4gICAgICAgIHRhc2tSb2xlLmFkZE1hbmFnZWRQb2xpY3kocG9saWN5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFza1JvbGU7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVRhc2tEZWZpbml0aW9uKFxuICAgIHNlcnZpY2VOYW1lOiBzdHJpbmcsXG4gICAgc2VydmljZVByb3BzOiBFY3NTZXJ2aWNlUHJvcHMsXG4gICAgZXhlY3V0aW9uUm9sZTogUm9sZSxcbiAgICB0YXNrUm9sZTogUm9sZVxuICApOiBGYXJnYXRlVGFza0RlZmluaXRpb24gfCBFYzJUYXNrRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgY3B1ID0gc2VydmljZVByb3BzLmNwdSB8fCAyNTY7XG4gICAgY29uc3QgbWVtb3J5TGltaXRNaUIgPSBzZXJ2aWNlUHJvcHMubWVtb3J5TGltaXRNaUIgfHwgNTEyO1xuXG4gICAgaWYgKHRoaXMuaXNTZXJ2aWNlRmFyZ2F0ZShzZXJ2aWNlUHJvcHMpKSB7XG4gICAgICByZXR1cm4gbmV3IEZhcmdhdGVUYXNrRGVmaW5pdGlvbih0aGlzLCBgJHtzZXJ2aWNlTmFtZX1UYXNrRGVmaW5pdGlvbmAsIHtcbiAgICAgICAgZmFtaWx5OiBgJHt0aGlzLnByb3BzLmNsdXN0ZXJOYW1lfS0ke3NlcnZpY2VOYW1lfWAsXG4gICAgICAgIGNwdSxcbiAgICAgICAgbWVtb3J5TGltaXRNaUIsXG4gICAgICAgIGV4ZWN1dGlvblJvbGUsXG4gICAgICAgIHRhc2tSb2xlLFxuICAgICAgICBydW50aW1lUGxhdGZvcm06IHtcbiAgICAgICAgICBjcHVBcmNoaXRlY3R1cmU6IENwdUFyY2hpdGVjdHVyZS5BUk02NCxcbiAgICAgICAgICBvcGVyYXRpbmdTeXN0ZW1GYW1pbHk6IE9wZXJhdGluZ1N5c3RlbUZhbWlseS5MSU5VWFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBFYzJUYXNrRGVmaW5pdGlvbih0aGlzLCBgJHtzZXJ2aWNlTmFtZX1UYXNrRGVmaW5pdGlvbmAsIHtcbiAgICAgICAgZmFtaWx5OiBgJHt0aGlzLnByb3BzLmNsdXN0ZXJOYW1lfS0ke3NlcnZpY2VOYW1lfWAsXG4gICAgICAgIGV4ZWN1dGlvblJvbGUsXG4gICAgICAgIHRhc2tSb2xlLFxuICAgICAgICAuLi4odGhpcy5kaXJlY3RBY2Nlc3NFbmFibGVkICYmIHsgbmV0d29ya01vZGU6IE5ldHdvcmtNb2RlLkhPU1QgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkQ29udGFpbmVyc1RvVGFzayhcbiAgICBzZXJ2aWNlTmFtZTogc3RyaW5nLFxuICAgIHNlcnZpY2VQcm9wczogRWNzU2VydmljZVByb3BzLFxuICAgIHRhc2tEZWZpbml0aW9uOiBGYXJnYXRlVGFza0RlZmluaXRpb24gfCBFYzJUYXNrRGVmaW5pdGlvblxuICApOiB7XG4gICAgY29udGFpbmVyczogQ29udGFpbmVyRGVmaW5pdGlvbltdO1xuICAgIHByaW1hcnlDb250YWluZXI/OiBDb250YWluZXJEZWZpbml0aW9uO1xuICB9IHtcbiAgICBjb25zdCBjb250YWluZXJzOiBDb250YWluZXJEZWZpbml0aW9uW10gPSBbXTtcbiAgICBsZXQgcHJpbWFyeUNvbnRhaW5lcjogQ29udGFpbmVyRGVmaW5pdGlvbiB8IHVuZGVmaW5lZDtcblxuICAgIGZvciAoY29uc3QgY29udGFpbmVyQ29uZmlnIG9mIHNlcnZpY2VQcm9wcy5jb250YWluZXJzKSB7XG4gICAgICBjb25zdCBpbWFnZSA9IHRoaXMuZ2V0Q29udGFpbmVySW1hZ2UoXG4gICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICBjb250YWluZXJDb25maWcsXG4gICAgICAgIHNlcnZpY2VQcm9wc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IGlzRmlyc3RXaXRoUG9ydCA9XG4gICAgICAgICFwcmltYXJ5Q29udGFpbmVyICYmIGNvbnRhaW5lckNvbmZpZy5wb3J0ICE9PSB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IHNlY3JldHM6IFJlY29yZDxzdHJpbmcsIEVjc1NlY3JldD4gPSB7fTtcbiAgICAgIGlmIChjb250YWluZXJDb25maWcuc2VjcmV0c0ltcG9ydCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHNlY3JldEltcG9ydF0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICAgICAgY29udGFpbmVyQ29uZmlnLnNlY3JldHNJbXBvcnRcbiAgICAgICAgKSkge1xuICAgICAgICAgIGNvbnN0IHNlY3JldCA9IFNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGAke3RoaXMucHJvcHMuY2x1c3Rlck5hbWV9JHtzZXJ2aWNlTmFtZX0ke2NvbnRhaW5lckNvbmZpZy5uYW1lfSR7a2V5fVNlY3JldGAsXG4gICAgICAgICAgICBzZWNyZXRJbXBvcnQubmFtZVxuICAgICAgICAgICk7XG4gICAgICAgICAgc2VjcmV0c1trZXldID0gRWNzU2VjcmV0LmZyb21TZWNyZXRzTWFuYWdlcihcbiAgICAgICAgICAgIHNlY3JldCxcbiAgICAgICAgICAgIHNlY3JldEltcG9ydC5maWVsZFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnRhaW5lckNvbmZpZy5zZWNyZXRzICYmIGNvbnRhaW5lckNvbmZpZy5zZWNyZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKGNvbnRhaW5lckNvbmZpZy5zZWNyZXRzSW1wb3J0KSB7XG4gICAgICAgICAgY29uc3Qgc2VjcmV0c0ltcG9ydEtleXMgPSBPYmplY3Qua2V5cyhjb250YWluZXJDb25maWcuc2VjcmV0c0ltcG9ydCk7XG4gICAgICAgICAgY29uc3QgZHVwbGljYXRlS2V5cyA9IGNvbnRhaW5lckNvbmZpZy5zZWNyZXRzLmZpbHRlcigoa2V5KSA9PlxuICAgICAgICAgICAgc2VjcmV0c0ltcG9ydEtleXMuaW5jbHVkZXMoa2V5KVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGR1cGxpY2F0ZUtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgQ29udGFpbmVyICcke2NvbnRhaW5lckNvbmZpZy5uYW1lfScgaW4gc2VydmljZSAnJHtzZXJ2aWNlTmFtZX0nIGhhcyBkdXBsaWNhdGUgc2VjcmV0IGtleXMgYCArXG4gICAgICAgICAgICAgICAgYGRlZmluZWQgaW4gYm90aCBzZWNyZXRzIGFuZCBzZWNyZXRzSW1wb3J0OiAke2R1cGxpY2F0ZUtleXMuam9pbihcIiwgXCIpfS4gYCArXG4gICAgICAgICAgICAgICAgYEVhY2ggc2VjcmV0IGtleSBtdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgYm90aCBzb3VyY2VzLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3NtU2VjcmV0c1BhdGggPSB0aGlzLmRlcml2ZVNzbVNlY3JldHNQYXRoKFxuICAgICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICAgIHNlcnZpY2VQcm9wcy5zc21TZWNyZXRzUGF0aFxuICAgICAgICApO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc2VjcmV0TmFtZSBvZiBjb250YWluZXJDb25maWcuc2VjcmV0cykge1xuICAgICAgICAgIGNvbnN0IHBhcmFtUGF0aCA9IGAke3NzbVNlY3JldHNQYXRofS8ke3NlY3JldE5hbWV9YDtcbiAgICAgICAgICBjb25zdCBwYXJhbSA9IFN0cmluZ1BhcmFtZXRlci5mcm9tU2VjdXJlU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyhcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBgJHt0aGlzLnByb3BzLmNsdXN0ZXJOYW1lfSR7c2VydmljZU5hbWV9JHtjb250YWluZXJDb25maWcubmFtZX0ke3NlY3JldE5hbWV9U3NtUGFyYW1gLFxuICAgICAgICAgICAgeyBwYXJhbWV0ZXJOYW1lOiBwYXJhbVBhdGggfVxuICAgICAgICAgICk7XG4gICAgICAgICAgc2VjcmV0c1tzZWNyZXROYW1lXSA9IEVjc1NlY3JldC5mcm9tU3NtUGFyYW1ldGVyKHBhcmFtKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250YWluZXIgPSB0YXNrRGVmaW5pdGlvbi5hZGRDb250YWluZXIoXG4gICAgICAgIGAke3NlcnZpY2VOYW1lfSR7Y29udGFpbmVyQ29uZmlnLm5hbWV9YCxcbiAgICAgICAge1xuICAgICAgICAgIGltYWdlLFxuICAgICAgICAgIGNvbnRhaW5lck5hbWU6IGNvbnRhaW5lckNvbmZpZy5uYW1lLFxuICAgICAgICAgIGxvZ2dpbmc6IG5ldyBBd3NMb2dEcml2ZXIoe1xuICAgICAgICAgICAgc3RyZWFtUHJlZml4OiBgL2Vjcy8ke3RoaXMucHJvcHMuY2x1c3Rlck5hbWV9LyR7c2VydmljZU5hbWV9YCxcbiAgICAgICAgICAgIGxvZ1JldGVudGlvbjogMTRcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBlbnZpcm9ubWVudDogY29udGFpbmVyQ29uZmlnLmVudmlyb25tZW50LFxuICAgICAgICAgIHNlY3JldHMsXG4gICAgICAgICAgY29tbWFuZDogY29udGFpbmVyQ29uZmlnLmNvbW1hbmQsXG4gICAgICAgICAgZW50cnlQb2ludDogY29udGFpbmVyQ29uZmlnLmVudHJ5UG9pbnQsXG4gICAgICAgICAgZXNzZW50aWFsOiBjb250YWluZXJDb25maWcuZXNzZW50aWFsID8/IHRydWUsXG4gICAgICAgICAgaGVhbHRoQ2hlY2s6IGNvbnRhaW5lckNvbmZpZy5oZWFsdGhDaGVja1xuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgY29tbWFuZDogY29udGFpbmVyQ29uZmlnLmhlYWx0aENoZWNrLmNvbW1hbmQsXG4gICAgICAgICAgICAgICAgaW50ZXJ2YWw6IGNvbnRhaW5lckNvbmZpZy5oZWFsdGhDaGVjay5pbnRlcnZhbFxuICAgICAgICAgICAgICAgICAgPyBEdXJhdGlvbi5zZWNvbmRzKGNvbnRhaW5lckNvbmZpZy5oZWFsdGhDaGVjay5pbnRlcnZhbClcbiAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IGNvbnRhaW5lckNvbmZpZy5oZWFsdGhDaGVjay50aW1lb3V0XG4gICAgICAgICAgICAgICAgICA/IER1cmF0aW9uLnNlY29uZHMoY29udGFpbmVyQ29uZmlnLmhlYWx0aENoZWNrLnRpbWVvdXQpXG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICByZXRyaWVzOiBjb250YWluZXJDb25maWcuaGVhbHRoQ2hlY2sucmV0cmllcyxcbiAgICAgICAgICAgICAgICBzdGFydFBlcmlvZDogY29udGFpbmVyQ29uZmlnLmhlYWx0aENoZWNrLnN0YXJ0UGVyaW9kXG4gICAgICAgICAgICAgICAgICA/IER1cmF0aW9uLnNlY29uZHMoY29udGFpbmVyQ29uZmlnLmhlYWx0aENoZWNrLnN0YXJ0UGVyaW9kKVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgLi4uKHRoaXMuaXNTZXJ2aWNlRWMyKHNlcnZpY2VQcm9wcykgJiYge1xuICAgICAgICAgICAgbWVtb3J5TGltaXRNaUI6IHNlcnZpY2VQcm9wcy5lYzJDb25maWc/Lm1lbW9yeUxpbWl0TWlCID8/IDEwMjRcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBpZiAoY29udGFpbmVyQ29uZmlnLnBvcnQpIHtcbiAgICAgICAgY29udGFpbmVyLmFkZFBvcnRNYXBwaW5ncyh7XG4gICAgICAgICAgY29udGFpbmVyUG9ydDogY29udGFpbmVyQ29uZmlnLnBvcnRcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0ZpcnN0V2l0aFBvcnQpIHtcbiAgICAgICAgcHJpbWFyeUNvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgICAgIH1cblxuICAgICAgY29udGFpbmVycy5wdXNoKGNvbnRhaW5lcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29udGFpbmVycywgcHJpbWFyeUNvbnRhaW5lciB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb250YWluZXJJbWFnZShcbiAgICBzZXJ2aWNlTmFtZTogc3RyaW5nLFxuICAgIGNvbnRhaW5lckNvbmZpZzogRWNzQ2x1c3RlckNvbnRhaW5lckNvbmZpZyxcbiAgICBzZXJ2aWNlUHJvcHM6IEVjc1NlcnZpY2VQcm9wc1xuICApOiBDb250YWluZXJJbWFnZSB7XG4gICAgY29uc3QgaW1hZ2VTb3VyY2UgPVxuICAgICAgY29udGFpbmVyQ29uZmlnLmltYWdlIHx8IHNlcnZpY2VQcm9wcy5pbWFnZSB8fCB0aGlzLnByb3BzLmVjclJlcG9zaXRvcnk7XG5cbiAgICBpZiAoIWltYWdlU291cmNlKSB7XG4gICAgICByZXR1cm4gQ29udGFpbmVySW1hZ2UuZnJvbVJlZ2lzdHJ5KFwiYW1hem9uL2FtYXpvbi1lY3Mtc2FtcGxlXCIpO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIGltYWdlIHRhZyB3aXRoIG9wdGlvbmFsIGRvY2tlclRhcmdldCBzdWZmaXhcbiAgICAvLyBGb3JtYXQ6IDxzZXJ2aWNlPi1bPHRhcmdldD4tXWxhdGVzdFxuICAgIGNvbnN0IHRhcmdldFN1ZmZpeCA9IHNlcnZpY2VQcm9wcy5kb2NrZXJUYXJnZXRcbiAgICAgID8gYC0ke3NlcnZpY2VQcm9wcy5kb2NrZXJUYXJnZXQudG9Mb3dlckNhc2UoKX1gXG4gICAgICA6IFwiXCI7XG4gICAgY29uc3QgaW1hZ2VUYWcgPSBgJHtzZXJ2aWNlTmFtZS50b0xvd2VyQ2FzZSgpfSR7dGFyZ2V0U3VmZml4fS1sYXRlc3RgO1xuXG4gICAgaWYgKHR5cGVvZiBpbWFnZVNvdXJjZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgaXNGdWxsUmVnaXN0cnlVcmwgPVxuICAgICAgICAoaW1hZ2VTb3VyY2UuaW5jbHVkZXMoXCIvXCIpICYmICFpbWFnZVNvdXJjZS5pbmNsdWRlcyhcIi5cIikpIHx8IC8vIERvY2tlciBIdWI6IGFtYXpvbi9hbWF6b24tZWNzLXNhbXBsZVxuICAgICAgICBpbWFnZVNvdXJjZS5zdGFydHNXaXRoKFwicHVibGljLmVjci5hd3MvXCIpIHx8IC8vIFB1YmxpYyBFQ1I6IHB1YmxpYy5lY3IuYXdzL2ZqYWxsL3dlbGNvbWVcbiAgICAgICAgaW1hZ2VTb3VyY2UuaW5jbHVkZXMoXCIuZGtyLmVjci5cIik7IC8vIFByaXZhdGUgRUNSIGZ1bGwgVVJMOiAxMjM0NTY3ODkwMTIuZGtyLmVjci51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS9yZXBvOnRhZ1xuXG4gICAgICBpZiAoaXNGdWxsUmVnaXN0cnlVcmwpIHtcbiAgICAgICAgcmV0dXJuIENvbnRhaW5lckltYWdlLmZyb21SZWdpc3RyeShpbWFnZVNvdXJjZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gQ29udGFpbmVySW1hZ2UuZnJvbUVjclJlcG9zaXRvcnkoXG4gICAgICAgIFJlcG9zaXRvcnkuZnJvbVJlcG9zaXRvcnlOYW1lKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYCR7c2VydmljZU5hbWV9JHtjb250YWluZXJDb25maWcubmFtZX1FY3JSZXBvYCxcbiAgICAgICAgICBpbWFnZVNvdXJjZVxuICAgICAgICApLFxuICAgICAgICBpbWFnZVRhZ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoaW1hZ2VTb3VyY2UgaW5zdGFuY2VvZiBSZXBvc2l0b3J5KSB7XG4gICAgICByZXR1cm4gQ29udGFpbmVySW1hZ2UuZnJvbUVjclJlcG9zaXRvcnkoaW1hZ2VTb3VyY2UsIGltYWdlVGFnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW1hZ2VTb3VyY2UgYXMgQ29udGFpbmVySW1hZ2U7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNlcnZpY2UoXG4gICAgc2VydmljZU5hbWU6IHN0cmluZyxcbiAgICBzZXJ2aWNlUHJvcHM6IEVjc1NlcnZpY2VQcm9wcyxcbiAgICB0YXNrRGVmaW5pdGlvbjogRmFyZ2F0ZVRhc2tEZWZpbml0aW9uIHwgRWMyVGFza0RlZmluaXRpb25cbiAgKTogRmFyZ2F0ZVNlcnZpY2UgfCBFYzJTZXJ2aWNlIHtcbiAgICBjb25zdCBkZXNpcmVkQ291bnQgPSBzZXJ2aWNlUHJvcHMuZGVzaXJlZENvdW50ID8/IDI7XG4gICAgY29uc3QgZWZmZWN0aXZlUHJvdmlkZXIgPSB0aGlzLmdldFNlcnZpY2VDYXBhY2l0eVByb3ZpZGVyKHNlcnZpY2VQcm9wcyk7XG5cbiAgICBpZiAodGhpcy5pc1NlcnZpY2VGYXJnYXRlKHNlcnZpY2VQcm9wcykpIHtcbiAgICAgIGNvbnN0IGhhc05hdCA9IHRoaXMudnBjSGFzTmF0R2F0ZXdheXMoKTtcbiAgICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgRmFyZ2F0ZVNlcnZpY2UodGhpcywgYCR7c2VydmljZU5hbWV9U2VydmljZWAsIHtcbiAgICAgICAgY2x1c3RlcjogdGhpcy5jbHVzdGVyLFxuICAgICAgICB0YXNrRGVmaW5pdGlvbjogdGFza0RlZmluaXRpb24gYXMgRmFyZ2F0ZVRhc2tEZWZpbml0aW9uLFxuICAgICAgICBkZXNpcmVkQ291bnQsXG4gICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICB2cGNTdWJuZXRzOiB7XG4gICAgICAgICAgc3VibmV0VHlwZTogaGFzTmF0XG4gICAgICAgICAgICA/IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTU1xuICAgICAgICAgICAgOiBTdWJuZXRUeXBlLlBVQkxJQ1xuICAgICAgICB9LFxuICAgICAgICBhc3NpZ25QdWJsaWNJcDogIWhhc05hdCxcbiAgICAgICAgY2FwYWNpdHlQcm92aWRlclN0cmF0ZWdpZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjYXBhY2l0eVByb3ZpZGVyOiBlZmZlY3RpdmVQcm92aWRlcixcbiAgICAgICAgICAgIHdlaWdodDogMVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcHJvcGFnYXRlVGFnczogUHJvcGFnYXRlZFRhZ1NvdXJjZS5TRVJWSUNFLFxuICAgICAgICBjaXJjdWl0QnJlYWtlcjogeyBlbmFibGU6IHRydWUsIHJvbGxiYWNrOiB0cnVlIH0sXG4gICAgICAgIGVuYWJsZUVDU01hbmFnZWRUYWdzOiB0cnVlLFxuICAgICAgICBlbmFibGVFeGVjdXRlQ29tbWFuZDogdHJ1ZSxcbiAgICAgICAgaGVhbHRoQ2hlY2tHcmFjZVBlcmlvZDogRHVyYXRpb24uc2Vjb25kcygxMjApLFxuICAgICAgICBtaW5IZWFsdGh5UGVyY2VudDogMTAwLFxuICAgICAgICBtYXhIZWFsdGh5UGVyY2VudDogMjAwXG4gICAgICB9KTtcblxuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHt0aGlzLnByb3BzLmNsdXN0ZXJOYW1lfSR7c2VydmljZU5hbWV9U2VydmljZUFybmAsIHtcbiAgICAgICAga2V5OiBgJHt0aGlzLnByb3BzLmNsdXN0ZXJOYW1lfSR7c2VydmljZU5hbWV9U2VydmljZUFybmAsXG4gICAgICAgIGV4cG9ydE5hbWU6IGAke3RoaXMucHJvcHMuY2x1c3Rlck5hbWV9JHtzZXJ2aWNlTmFtZX1TZXJ2aWNlQXJuYCxcbiAgICAgICAgdmFsdWU6IHNlcnZpY2Uuc2VydmljZUFybixcbiAgICAgICAgZGVzY3JpcHRpb246IGBFQ1MgU2VydmljZSBBUk4gZm9yICR7c2VydmljZU5hbWV9YFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc2VydmljZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYXNnUHJvdmlkZXIgPSB0aGlzLmdldE9yQ3JlYXRlQXNnQ2FwYWNpdHlQcm92aWRlcihzZXJ2aWNlUHJvcHMpO1xuXG4gICAgICBjb25zdCBzZXJ2aWNlID0gbmV3IEVjMlNlcnZpY2UodGhpcywgYCR7c2VydmljZU5hbWV9U2VydmljZWAsIHtcbiAgICAgICAgY2x1c3RlcjogdGhpcy5jbHVzdGVyLFxuICAgICAgICB0YXNrRGVmaW5pdGlvbjogdGFza0RlZmluaXRpb24gYXMgRWMyVGFza0RlZmluaXRpb24sXG4gICAgICAgIGRlc2lyZWRDb3VudCxcbiAgICAgICAgc2VydmljZU5hbWUsXG4gICAgICAgIGNhcGFjaXR5UHJvdmlkZXJTdHJhdGVnaWVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FwYWNpdHlQcm92aWRlcjogYXNnUHJvdmlkZXIuY2FwYWNpdHlQcm92aWRlck5hbWUsXG4gICAgICAgICAgICB3ZWlnaHQ6IDFcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHByb3BhZ2F0ZVRhZ3M6IFByb3BhZ2F0ZWRUYWdTb3VyY2UuU0VSVklDRSxcbiAgICAgICAgY2lyY3VpdEJyZWFrZXI6IHsgZW5hYmxlOiB0cnVlLCByb2xsYmFjazogdHJ1ZSB9LFxuICAgICAgICBwbGFjZW1lbnRTdHJhdGVnaWVzOiBbUGxhY2VtZW50U3RyYXRlZ3kuc3ByZWFkQWNyb3NzSW5zdGFuY2VzKCldLFxuICAgICAgICBlbmFibGVFQ1NNYW5hZ2VkVGFnczogdHJ1ZSxcbiAgICAgICAgZW5hYmxlRXhlY3V0ZUNvbW1hbmQ6IHRydWUsXG4gICAgICAgIGhlYWx0aENoZWNrR3JhY2VQZXJpb2Q6IER1cmF0aW9uLnNlY29uZHMoMTIwKSxcbiAgICAgICAgbWluSGVhbHRoeVBlcmNlbnQ6IDEwMCxcbiAgICAgICAgbWF4SGVhbHRoeVBlcmNlbnQ6IDIwMFxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7dGhpcy5wcm9wcy5jbHVzdGVyTmFtZX0ke3NlcnZpY2VOYW1lfVNlcnZpY2VBcm5gLCB7XG4gICAgICAgIGtleTogYCR7dGhpcy5wcm9wcy5jbHVzdGVyTmFtZX0ke3NlcnZpY2VOYW1lfVNlcnZpY2VBcm5gLFxuICAgICAgICBleHBvcnROYW1lOiBgJHt0aGlzLnByb3BzLmNsdXN0ZXJOYW1lfSR7c2VydmljZU5hbWV9U2VydmljZUFybmAsXG4gICAgICAgIHZhbHVlOiBzZXJ2aWNlLnNlcnZpY2VBcm4sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgRUNTIFNlcnZpY2UgQVJOIGZvciAke3NlcnZpY2VOYW1lfWBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHNlcnZpY2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlclNlcnZpY2VXaXRoQUxCKFxuICAgIHNlcnZpY2VOYW1lOiBzdHJpbmcsXG4gICAgc2VydmljZVByb3BzOiBFY3NTZXJ2aWNlUHJvcHMsXG4gICAgc2VydmljZTogRmFyZ2F0ZVNlcnZpY2UgfCBFYzJTZXJ2aWNlLFxuICAgIHByaW1hcnlDb250YWluZXI6IENvbnRhaW5lckRlZmluaXRpb25cbiAgKTogSUFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAge1xuICAgIGNvbnN0IGNvbnRhaW5lclBvcnQgPSBwcmltYXJ5Q29udGFpbmVyLmNvbnRhaW5lclBvcnQ7XG4gICAgY29uc3QgaGVhbHRoQ2hlY2tQYXRoID0gc2VydmljZVByb3BzLnJvdXRpbmc/LmhlYWx0aENoZWNrUGF0aCB8fCBcIi9cIjtcblxuICAgIGNvbnN0IHNlcnZpY2VzV2l0aFBvcnRzID0gdGhpcy5wcm9wcy5zZXJ2aWNlcy5maWx0ZXIoKHMpID0+XG4gICAgICBzLmNvbnRhaW5lcnMuc29tZSgoYykgPT4gYy5wb3J0ICE9PSB1bmRlZmluZWQpXG4gICAgKTtcbiAgICBjb25zdCBpc1NpbmdsZVNlcnZpY2UgPSBzZXJ2aWNlc1dpdGhQb3J0cy5sZW5ndGggPT09IDE7XG5cbiAgICBjb25zdCBoZWFsdGhDaGVja0NvbmZpZyA9IHRoaXMuaXNTZXJ2aWNlRWMyKHNlcnZpY2VQcm9wcylcbiAgICAgID8ge1xuICAgICAgICAgIGludGVydmFsOiBEdXJhdGlvbi5zZWNvbmRzKDMwKSxcbiAgICAgICAgICBoZWFsdGh5VGhyZXNob2xkQ291bnQ6IDMsXG4gICAgICAgICAgdW5oZWFsdGh5VGhyZXNob2xkQ291bnQ6IDMsXG4gICAgICAgICAgcGF0aDogaGVhbHRoQ2hlY2tQYXRoLFxuICAgICAgICAgIHBvcnQ6IFwidHJhZmZpYy1wb3J0XCIgYXMgY29uc3QsXG4gICAgICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygxNSlcbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgaW50ZXJ2YWw6IER1cmF0aW9uLnNlY29uZHMoMTIwKSxcbiAgICAgICAgICBwYXRoOiBoZWFsdGhDaGVja1BhdGgsXG4gICAgICAgICAgcG9ydDogYCR7Y29udGFpbmVyUG9ydH1gLFxuICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMTApXG4gICAgICAgIH07XG5cbiAgICBpZiAoaXNTaW5nbGVTZXJ2aWNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkQmFsYW5jZXJMaXN0ZW5lciEuYWRkVGFyZ2V0cyhcbiAgICAgICAgYCR7c2VydmljZU5hbWV9VGFyZ2V0R3JvdXBgLFxuICAgICAgICB7XG4gICAgICAgICAgdGFyZ2V0czogW1xuICAgICAgICAgICAgc2VydmljZS5sb2FkQmFsYW5jZXJUYXJnZXQoe1xuICAgICAgICAgICAgICBjb250YWluZXJOYW1lOiBwcmltYXJ5Q29udGFpbmVyLmNvbnRhaW5lck5hbWUsXG4gICAgICAgICAgICAgIGNvbnRhaW5lclBvcnRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwb3J0OiBjb250YWluZXJQb3J0LFxuICAgICAgICAgIHByb3RvY29sOiBBcHBsaWNhdGlvblByb3RvY29sLkhUVFAsXG4gICAgICAgICAgaGVhbHRoQ2hlY2s6IGhlYWx0aENoZWNrQ29uZmlnXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHByaW9yaXR5ID0gc2VydmljZVByb3BzLnJvdXRpbmc/LnByaW9yaXR5IHx8IHRoaXMubmV4dFByaW9yaXR5Kys7XG5cbiAgICAgIGNvbnN0IHRhcmdldEdyb3VwID0gdGhpcy5sb2FkQmFsYW5jZXJMaXN0ZW5lciEuYWRkVGFyZ2V0cyhcbiAgICAgICAgYCR7c2VydmljZU5hbWV9VGFyZ2V0c2AsXG4gICAgICAgIHtcbiAgICAgICAgICB0YXJnZXRzOiBbXG4gICAgICAgICAgICBzZXJ2aWNlLmxvYWRCYWxhbmNlclRhcmdldCh7XG4gICAgICAgICAgICAgIGNvbnRhaW5lck5hbWU6IHByaW1hcnlDb250YWluZXIuY29udGFpbmVyTmFtZSxcbiAgICAgICAgICAgICAgY29udGFpbmVyUG9ydFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdLFxuICAgICAgICAgIHBvcnQ6IGNvbnRhaW5lclBvcnQsXG4gICAgICAgICAgcHJvdG9jb2w6IEFwcGxpY2F0aW9uUHJvdG9jb2wuSFRUUCxcbiAgICAgICAgICBoZWFsdGhDaGVjazogaGVhbHRoQ2hlY2tDb25maWcsXG4gICAgICAgICAgY29uZGl0aW9uczogdGhpcy5idWlsZFJvdXRpbmdDb25kaXRpb25zKHNlcnZpY2VQcm9wcyksXG4gICAgICAgICAgcHJpb3JpdHlcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHRhcmdldEdyb3VwO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRSb3V0aW5nQ29uZGl0aW9ucyhcbiAgICBzZXJ2aWNlUHJvcHM6IEVjc1NlcnZpY2VQcm9wc1xuICApOiBMaXN0ZW5lckNvbmRpdGlvbltdIHtcbiAgICBjb25zdCBjb25kaXRpb25zOiBMaXN0ZW5lckNvbmRpdGlvbltdID0gW107XG5cbiAgICBpZiAoc2VydmljZVByb3BzLnJvdXRpbmc/LnBhdGgpIHtcbiAgICAgIGNvbmRpdGlvbnMucHVzaChcbiAgICAgICAgTGlzdGVuZXJDb25kaXRpb24ucGF0aFBhdHRlcm5zKFtzZXJ2aWNlUHJvcHMucm91dGluZy5wYXRoXSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzZXJ2aWNlUHJvcHMucm91dGluZz8uaG9zdCkge1xuICAgICAgY29uZGl0aW9ucy5wdXNoKFxuICAgICAgICBMaXN0ZW5lckNvbmRpdGlvbi5ob3N0SGVhZGVycyhbc2VydmljZVByb3BzLnJvdXRpbmcuaG9zdF0pXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBjb25kaXRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRTZXJ2aWNlU2NhbGluZyhcbiAgICBzZXJ2aWNlTmFtZTogc3RyaW5nLFxuICAgIHNlcnZpY2VQcm9wczogRWNzU2VydmljZVByb3BzLFxuICAgIHNlcnZpY2U6IEZhcmdhdGVTZXJ2aWNlIHwgRWMyU2VydmljZVxuICApOiBUYXJnZXRUcmFja2luZ1NjYWxpbmdQb2xpY3kge1xuICAgIGNvbnN0IHNjYWxhYmxlVGFyZ2V0ID0gbmV3IFNjYWxhYmxlVGFyZ2V0KFxuICAgICAgdGhpcyxcbiAgICAgIGAke3NlcnZpY2VOYW1lfVNjYWxhYmxlVGFyZ2V0YCxcbiAgICAgIHtcbiAgICAgICAgc2VydmljZU5hbWVzcGFjZTogU2VydmljZU5hbWVzcGFjZS5FQ1MsXG4gICAgICAgIHJlc291cmNlSWQ6IGBzZXJ2aWNlLyR7dGhpcy5jbHVzdGVyLmNsdXN0ZXJOYW1lfS8ke3NlcnZpY2Uuc2VydmljZU5hbWV9YCxcbiAgICAgICAgc2NhbGFibGVEaW1lbnNpb246IFwiZWNzOnNlcnZpY2U6RGVzaXJlZENvdW50XCIsXG4gICAgICAgIG1pbkNhcGFjaXR5OiBzZXJ2aWNlUHJvcHMubWluQ2FwYWNpdHkgPz8gMixcbiAgICAgICAgbWF4Q2FwYWNpdHk6IHNlcnZpY2VQcm9wcy5tYXhDYXBhY2l0eSA/PyAxMFxuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gbmV3IFRhcmdldFRyYWNraW5nU2NhbGluZ1BvbGljeShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtzZXJ2aWNlTmFtZX1TY2FsaW5nUG9saWN5YCxcbiAgICAgIHtcbiAgICAgICAgc2NhbGluZ1RhcmdldDogc2NhbGFibGVUYXJnZXQsXG4gICAgICAgIHByZWRlZmluZWRNZXRyaWM6XG4gICAgICAgICAgc2VydmljZVByb3BzLnNjYWxpbmdUeXBlID09PSBTY2FsaW5nVHlwZS5NRU1PUllcbiAgICAgICAgICAgID8gUHJlZGVmaW5lZE1ldHJpYy5FQ1NfU0VSVklDRV9BVkVSQUdFX01FTU9SWV9VVElMSVpBVElPTlxuICAgICAgICAgICAgOiBQcmVkZWZpbmVkTWV0cmljLkVDU19TRVJWSUNFX0FWRVJBR0VfQ1BVX1VUSUxJWkFUSU9OLFxuICAgICAgICB0YXJnZXRWYWx1ZTogNTAsXG4gICAgICAgIHNjYWxlSW5Db29sZG93bjogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICAgIHNjYWxlT3V0Q29vbGRvd246IER1cmF0aW9uLnNlY29uZHMoNjApXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgVlBDIGhhcyBOQVQgZ2F0ZXdheXMuXG4gICAqIC0gRm9yIEZqYWxsIFZwYzogdXNlcyBoYXNOYXRHYXRld2F5cyBwcm9wZXJ0eVxuICAgKiAtIEZvciBvdGhlciBWUENzOiBjaGVja3MgaWYgcHJpdmF0ZSBzdWJuZXRzIGV4aXN0IChhc3N1bWVzIE5BVCBpZiBwcmVzZW50KVxuICAgKi9cbiAgcHJpdmF0ZSB2cGNIYXNOYXRHYXRld2F5cygpOiBib29sZWFuIHtcbiAgICBjb25zdCB2cGMgPSB0aGlzLmNsdXN0ZXIudnBjO1xuICAgIGlmIChcImhhc05hdEdhdGV3YXlzXCIgaW4gdnBjICYmIHR5cGVvZiB2cGMuaGFzTmF0R2F0ZXdheXMgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gdnBjLmhhc05hdEdhdGV3YXlzO1xuICAgIH1cbiAgICByZXR1cm4gdnBjLnByaXZhdGVTdWJuZXRzLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIERlcGxveWFibGVTZXJ2aWNlIG91dHB1dHMgZm9yIGRlcGxveW1lbnQgYXV0b21hdGlvbi5cbiAgICogRWFjaCBzZXJ2aWNlIGdldHMgYSBEZXBsb3lhYmxlU2VydmljZSBvdXRwdXQgc28gdGhlIGRlcGxveW1lbnQgc2VydmljZVxuICAgKiBjYW4gZmluZCBhbmQgZGVwbG95IGFsbCBzZXJ2aWNlcyBpbiB0aGUgY2x1c3Rlci5cbiAgICovXG4gIGFkZERlcGxveWFibGVTZXJ2aWNlT3V0cHV0cyhwcm9wczogRWNzQ2x1c3RlclByb3BzKSB7XG4gICAgZm9yIChjb25zdCBbc2VydmljZU5hbWUsIHNlcnZpY2VEYXRhXSBvZiB0aGlzLnNlcnZpY2VzKSB7XG4gICAgICBuZXcgQ2ZuT3V0cHV0KFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHtwcm9wcy5jbHVzdGVyTmFtZX0ke3NlcnZpY2VOYW1lfURlcGxveWFibGVTZXJ2aWNlYCxcbiAgICAgICAge1xuICAgICAgICAgIGtleTogYCR7cHJvcHMuY2x1c3Rlck5hbWV9JHtzZXJ2aWNlTmFtZX1EZXBsb3lhYmxlU2VydmljZWAsXG4gICAgICAgICAgZXhwb3J0TmFtZTogYCR7cHJvcHMuY2x1c3Rlck5hbWV9JHtzZXJ2aWNlTmFtZX1EZXBsb3lhYmxlU2VydmljZWAsXG4gICAgICAgICAgdmFsdWU6IHNlcnZpY2VEYXRhLnNlcnZpY2Uuc2VydmljZUFybixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYERlcGxveWFibGUgRUNTIFNlcnZpY2UgQVJOIGZvciAke3NlcnZpY2VOYW1lfSBpbiAke3Byb3BzLmNsdXN0ZXJOYW1lfWBcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY2FwYWNpdHkgcHJvdmlkZXIgZm9yIGEgc2VydmljZS5cbiAgICogRWFjaCBzZXJ2aWNlIE1VU1Qgc3BlY2lmeSBpdHMgb3duIGNhcGFjaXR5UHJvdmlkZXIuXG4gICAqL1xuICBwcml2YXRlIGdldFNlcnZpY2VDYXBhY2l0eVByb3ZpZGVyKFxuICAgIHNlcnZpY2VQcm9wczogRWNzU2VydmljZVByb3BzXG4gICk6IEVjc0NhcGFjaXR5UHJvdmlkZXIge1xuICAgIHJldHVybiBzZXJ2aWNlUHJvcHMuY2FwYWNpdHlQcm92aWRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBzZXJ2aWNlIHVzZXMgYSBGYXJnYXRlIGNhcGFjaXR5IHByb3ZpZGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBpc1NlcnZpY2VGYXJnYXRlKHNlcnZpY2VQcm9wczogRWNzU2VydmljZVByb3BzKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFNlcnZpY2VDYXBhY2l0eVByb3ZpZGVyKHNlcnZpY2VQcm9wcyk7XG4gICAgcmV0dXJuIHByb3ZpZGVyID09PSBcIkZBUkdBVEVcIiB8fCBwcm92aWRlciA9PT0gXCJGQVJHQVRFX1NQT1RcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBzZXJ2aWNlIHVzZXMgYW4gRUMyIGNhcGFjaXR5IHByb3ZpZGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBpc1NlcnZpY2VFYzIoc2VydmljZVByb3BzOiBFY3NTZXJ2aWNlUHJvcHMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTZXJ2aWNlQ2FwYWNpdHlQcm92aWRlcihzZXJ2aWNlUHJvcHMpID09PSBcIkVDMlwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhbiBTU00gcGF0aCBjb21wb25lbnQgZm9yIGNvcnJlY3RuZXNzLlxuICAgKiBTU00gcGFyYW1ldGVyIHBhdGhzIGhhdmUgc3BlY2lmaWMgY29uc3RyYWludHMgdGhhdCBtdXN0IGJlIGVuZm9yY2VkLlxuICAgKlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIHBhdGggY29tcG9uZW50IHRvIHZhbGlkYXRlXG4gICAqIEBwYXJhbSBmaWVsZE5hbWUgLSBOYW1lIG9mIHRoZSBmaWVsZCBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICogQHRocm93cyBFcnJvciBpZiB0aGUgY29tcG9uZW50IGlzIGludmFsaWRcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVTc21QYXRoQ29tcG9uZW50KGNvbXBvbmVudDogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghY29tcG9uZW50IHx8IGNvbXBvbmVudC50cmltKCkgPT09IFwiXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtmaWVsZE5hbWV9IGNhbm5vdCBiZSBlbXB0eSBmb3IgU1NNIHBhdGggZGVyaXZhdGlvbmApO1xuICAgIH1cbiAgICBpZiAoY29tcG9uZW50LmluY2x1ZGVzKFwiL1wiKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHtmaWVsZE5hbWV9IGNhbm5vdCBjb250YWluIGZvcndhcmQgc2xhc2hlcyAoLykuIEludmFsaWQgdmFsdWU6IFwiJHtjb21wb25lbnR9XCIuYFxuICAgICAgKTtcbiAgICB9XG4gICAgLy8gU1NNIHBhcmFtZXRlciBuYW1lIGhpZXJhcmNoeSBsYWJlbHMgaGF2ZSBhIG1heCBsZW5ndGggb2YgMjA0OCwgYnV0IHdlIHVzZSBhIG1vcmVcbiAgICAvLyByZWFzb25hYmxlIGxpbWl0IHNpbmNlIGVhY2ggY29tcG9uZW50IGlzIGp1c3Qgb25lIHBhcnQgb2YgdGhlIHBhdGhcbiAgICBpZiAoY29tcG9uZW50Lmxlbmd0aCA+IDEyOCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2ZpZWxkTmFtZX0gZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCAoMTI4IGNoYXJhY3RlcnMpLmApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXJpdmVzIHRoZSBTU00gc2VjcmV0cyBwYXRoIGZvciBhIHNlcnZpY2UuXG4gICAqIFVzZXMgZXhwbGljaXQgcGF0aCBpZiBwcm92aWRlZCwgb3RoZXJ3aXNlIGRlcml2ZXMgZnJvbSBhcHAvY2x1c3Rlci9zZXJ2aWNlIG5hbWVzLlxuICAgKlxuICAgKiBAcGFyYW0gc2VydmljZU5hbWUgLSBUaGUgc2VydmljZSBuYW1lXG4gICAqIEBwYXJhbSBleHBsaWNpdFBhdGggLSBPcHRpb25hbCBleHBsaWNpdCBwYXRoIG92ZXJyaWRlXG4gICAqIEByZXR1cm5zIFRoZSBTU00gc2VjcmV0cyBwYXRoIChlLmcuLCAvbXlhcHAvQXBpQ2x1c3Rlci91c2VycylcbiAgICovXG4gIC8qKlxuICAgKiBDb2xsZWN0cyBhbGwgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBuYW1lcyBmcm9tIHNlY3JldHNJbXBvcnQgYWNyb3NzIGFsbCBzZXJ2aWNlcy5cbiAgICogVXNlZCB0byBzY29wZSBJQU0gcGVybWlzc2lvbnMgZm9yIGxlYXN0LXByaXZpbGVnZSBhY2Nlc3MuXG4gICAqL1xuICBwcml2YXRlIGNvbGxlY3RTZWNyZXRzTWFuYWdlclNlY3JldE5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzZWNyZXROYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3Qgc2VydmljZSBvZiB0aGlzLnByb3BzLnNlcnZpY2VzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbnRhaW5lciBvZiBzZXJ2aWNlLmNvbnRhaW5lcnMpIHtcbiAgICAgICAgaWYgKGNvbnRhaW5lci5zZWNyZXRzSW1wb3J0KSB7XG4gICAgICAgICAgZm9yIChjb25zdCBzZWNyZXRJbXBvcnQgb2YgT2JqZWN0LnZhbHVlcyhjb250YWluZXIuc2VjcmV0c0ltcG9ydCkpIHtcbiAgICAgICAgICAgIHNlY3JldE5hbWVzLmFkZChzZWNyZXRJbXBvcnQubmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5mcm9tKHNlY3JldE5hbWVzKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVyaXZlU3NtU2VjcmV0c1BhdGgoXG4gICAgc2VydmljZU5hbWU6IHN0cmluZyxcbiAgICBleHBsaWNpdFBhdGg/OiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoZXhwbGljaXRQYXRoKSB7XG4gICAgICByZXR1cm4gZXhwbGljaXRQYXRoO1xuICAgIH1cblxuICAgIGNvbnN0IGFwcE5hbWUgPSB0aGlzLnByb3BzLmFwcE5hbWU7XG4gICAgaWYgKCFhcHBOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBTZXJ2aWNlICcke3NlcnZpY2VOYW1lfScgaGFzIHNlY3JldHMgZGVmaW5lZCBidXQgbm8gc3NtU2VjcmV0c1BhdGggaXMgc2V0IGAgK1xuICAgICAgICAgIGBhbmQgYXBwTmFtZSBpcyBub3QgY29uZmlndXJlZCBvbiB0aGUgY2x1c3Rlci4gYCArXG4gICAgICAgICAgYEVpdGhlciBzZXQgc3NtU2VjcmV0c1BhdGggb24gdGhlIHNlcnZpY2UsIG9yIHNldCBhcHBOYW1lIG9uIHRoZSBjbHVzdGVyIHByb3BzIGAgK1xuICAgICAgICAgIGB0byBlbmFibGUgYXV0b21hdGljIHBhdGggZGVyaXZhdGlvbiAoLzxhcHBOYW1lPi88Y2x1c3Rlck5hbWU+LzxzZXJ2aWNlTmFtZT4pLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZGF0ZVNzbVBhdGhDb21wb25lbnQoYXBwTmFtZSwgXCJhcHBOYW1lXCIpO1xuICAgIHRoaXMudmFsaWRhdGVTc21QYXRoQ29tcG9uZW50KHRoaXMucHJvcHMuY2x1c3Rlck5hbWUsIFwiY2x1c3Rlck5hbWVcIik7XG4gICAgdGhpcy52YWxpZGF0ZVNzbVBhdGhDb21wb25lbnQoc2VydmljZU5hbWUsIFwic2VydmljZU5hbWVcIik7XG5cbiAgICByZXR1cm4gYC8ke2FwcE5hbWV9LyR7dGhpcy5wcm9wcy5jbHVzdGVyTmFtZX0vJHtzZXJ2aWNlTmFtZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIHVuaXF1ZSBrZXkgZm9yIEVDMiBjb25maWcgKGZvciBBU0cgZGVkdXBsaWNhdGlvbikuXG4gICAqIFNlcnZpY2VzIHdpdGggbWF0Y2hpbmcga2V5cyBzaGFyZSBhbiBBU0cuXG4gICAqL1xuICBwcml2YXRlIGdldEVjMkNvbmZpZ0tleShlYzJDb25maWc6IEVjMkNhcGFjaXR5Q29uZmlnKTogc3RyaW5nIHtcbiAgICBjb25zdCBpbnN0YW5jZVR5cGUgPSBlYzJDb25maWcuaW5zdGFuY2VUeXBlID8/IFwidDMubWljcm9cIjtcbiAgICBjb25zdCBhbWlIYXJkd2FyZVR5cGUgPSBlYzJDb25maWcuYW1pSGFyZHdhcmVUeXBlID8/IFwiU1RBTkRBUkRcIjtcbiAgICByZXR1cm4gYCR7aW5zdGFuY2VUeXBlfS0ke2FtaUhhcmR3YXJlVHlwZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgb3IgY3JlYXRlcyBhbiBBU0cgY2FwYWNpdHkgcHJvdmlkZXIgZm9yIGEgc2VydmljZS5cbiAgICogU2VydmljZXMgd2l0aCBtYXRjaGluZyBFQzIgY29uZmlncyBzaGFyZSB0aGUgc2FtZSBBU0cuXG4gICAqL1xuICBwcml2YXRlIGdldE9yQ3JlYXRlQXNnQ2FwYWNpdHlQcm92aWRlcihcbiAgICBzZXJ2aWNlUHJvcHM6IEVjc1NlcnZpY2VQcm9wc1xuICApOiBBc2dDYXBhY2l0eVByb3ZpZGVyIHtcbiAgICBjb25zdCBlYzJDb25maWcgPSBzZXJ2aWNlUHJvcHMuZWMyQ29uZmlnID8/IHt9O1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0RWMyQ29uZmlnS2V5KGVjMkNvbmZpZyk7XG5cbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuYXNnQ2FwYWNpdHlQcm92aWRlcnMuZ2V0KGtleSk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuXG4gICAgY29uc3QgaW5zdGFuY2VUeXBlID0gZWMyQ29uZmlnLmluc3RhbmNlVHlwZSA/PyBcInQzLm1pY3JvXCI7XG4gICAgY29uc3QgYW1pSGFyZHdhcmVUeXBlID0gZWMyQ29uZmlnLmFtaUhhcmR3YXJlVHlwZVxuICAgICAgPyBlYzJDb25maWcuYW1pSGFyZHdhcmVUeXBlID09PSBcIlNUQU5EQVJEXCJcbiAgICAgICAgPyBBbWlIYXJkd2FyZVR5cGUuU1RBTkRBUkRcbiAgICAgICAgOiBBbWlIYXJkd2FyZVR5cGUuQVJNXG4gICAgICA6IGluZmVyQW1pSGFyZHdhcmVUeXBlKGluc3RhbmNlVHlwZSk7XG4gICAgY29uc3QgbWluQ2FwYWNpdHkgPSBlYzJDb25maWcubWluQ2FwYWNpdHkgPz8gMjtcbiAgICBjb25zdCBtYXhDYXBhY2l0eSA9IGVjMkNvbmZpZy5tYXhDYXBhY2l0eSA/PyAzO1xuXG4gICAgY29uc3QgYXNnU2VjdXJpdHlHcm91cCA9IG5ldyBTZWN1cml0eUdyb3VwKFxuICAgICAgdGhpcyxcbiAgICAgIGAke2tleS5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZywgXCJcIil9QXNnU2VjdXJpdHlHcm91cGAsXG4gICAgICB7XG4gICAgICAgIHZwYzogdGhpcy5jbHVzdGVyLnZwYyxcbiAgICAgICAgZGVzY3JpcHRpb246IGBTZWN1cml0eSBncm91cCBmb3IgJHtrZXl9IGF1dG8gc2NhbGluZyBncm91cGBcbiAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKHRoaXMuZGlyZWN0QWNjZXNzRW5hYmxlZCkge1xuICAgICAgZm9yIChjb25zdCBzZXJ2aWNlIG9mIHRoaXMucHJvcHMuc2VydmljZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTZXJ2aWNlRWMyKHNlcnZpY2UpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjb250YWluZXIgb2Ygc2VydmljZS5jb250YWluZXJzKSB7XG4gICAgICAgICAgICBpZiAoY29udGFpbmVyLnBvcnQpIHtcbiAgICAgICAgICAgICAgYXNnU2VjdXJpdHlHcm91cC5hZGRJbmdyZXNzUnVsZShcbiAgICAgICAgICAgICAgICBQZWVyLmFueUlwdjQoKSxcbiAgICAgICAgICAgICAgICBQb3J0LnRjcChjb250YWluZXIucG9ydCksXG4gICAgICAgICAgICAgICAgYERpcmVjdCBhY2Nlc3MgdG8gY29udGFpbmVyIHBvcnQgJHtjb250YWluZXIucG9ydH1gXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYXNnID0gbmV3IEF1dG9TY2FsaW5nR3JvdXAoXG4gICAgICB0aGlzLFxuICAgICAgYCR7a2V5LnJlcGxhY2UoL1teYS16QS1aMC05XS9nLCBcIlwiKX1BdXRvU2NhbGluZ0dyb3VwYCxcbiAgICAgIHtcbiAgICAgICAgYXV0b1NjYWxpbmdHcm91cE5hbWU6IGAke3RoaXMucHJvcHMuY2x1c3Rlck5hbWV9LSR7a2V5LnJlcGxhY2UoL1teYS16QS1aMC05XS9nLCBcIlwiKX0tQXNnYCxcbiAgICAgICAgdnBjOiB0aGlzLmNsdXN0ZXIudnBjLFxuICAgICAgICB2cGNTdWJuZXRzOiB7XG4gICAgICAgICAgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QVUJMSUNcbiAgICAgICAgfSxcbiAgICAgICAgc2VjdXJpdHlHcm91cDogYXNnU2VjdXJpdHlHcm91cCxcbiAgICAgICAgbWluQ2FwYWNpdHksXG4gICAgICAgIG1heENhcGFjaXR5LFxuICAgICAgICBpbnN0YW5jZVR5cGU6IG5ldyBJbnN0YW5jZVR5cGUoaW5zdGFuY2VUeXBlKSxcbiAgICAgICAgY2FwYWNpdHlSZWJhbGFuY2U6IHRydWUsXG4gICAgICAgIGluc3RhbmNlTW9uaXRvcmluZzogTW9uaXRvcmluZy5CQVNJQyxcbiAgICAgICAgbWFjaGluZUltYWdlOiBFY3NPcHRpbWl6ZWRJbWFnZS5hbWF6b25MaW51eDIoYW1pSGFyZHdhcmVUeXBlKVxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBBc2dDYXBhY2l0eVByb3ZpZGVyKFxuICAgICAgdGhpcyxcbiAgICAgIGAke2tleS5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZywgXCJcIil9QXNnQ2FwYWNpdHlQcm92aWRlcmAsXG4gICAgICB7XG4gICAgICAgIGF1dG9TY2FsaW5nR3JvdXA6IGFzZyxcbiAgICAgICAgZW5hYmxlTWFuYWdlZERyYWluaW5nOiB0cnVlLFxuICAgICAgICBlbmFibGVNYW5hZ2VkVGVybWluYXRpb25Qcm90ZWN0aW9uOiBmYWxzZVxuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmNsdXN0ZXIuYWRkQXNnQ2FwYWNpdHlQcm92aWRlcihwcm92aWRlcik7XG4gICAgdGhpcy5hc2dDYXBhY2l0eVByb3ZpZGVycy5zZXQoa2V5LCBwcm92aWRlcik7XG5cbiAgICBpZiAoIXRoaXMuYXV0b1NjYWxpbmdHcm91cCkge1xuICAgICAgdGhpcy5hdXRvU2NhbGluZ0dyb3VwID0gYXNnO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuYXNnU2VjdXJpdHlHcm91cCkge1xuICAgICAgdGhpcy5hc2dTZWN1cml0eUdyb3VwID0gYXNnU2VjdXJpdHlHcm91cDtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvdmlkZXI7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGFueSBzZXJ2aWNlIGluIHRoZSBjbHVzdGVyIHVzZXMgYSBGYXJnYXRlIGNhcGFjaXR5IHByb3ZpZGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBhbnlTZXJ2aWNlVXNlc0ZhcmdhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc2VydmljZXMuc29tZSgocykgPT4gdGhpcy5pc1NlcnZpY2VGYXJnYXRlKHMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYW55IHNlcnZpY2UgaW4gdGhlIGNsdXN0ZXIgdXNlcyBhbiBFQzIgY2FwYWNpdHkgcHJvdmlkZXIuXG4gICAqL1xuICBwcml2YXRlIGFueVNlcnZpY2VVc2VzRWMyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnNlcnZpY2VzLnNvbWUoKHMpID0+IHRoaXMuaXNTZXJ2aWNlRWMyKHMpKTtcbiAgfVxuXG4gIGFkZENsdXN0ZXIocHJvcHM6IEVjc0NsdXN0ZXJQcm9wcykge1xuICAgIGNvbnN0IG5lZWRzRmFyZ2F0ZSA9IHRoaXMuYW55U2VydmljZVVzZXNGYXJnYXRlKCk7XG5cbiAgICB0aGlzLmNsdXN0ZXIgPSBuZXcgQ2RrQ2x1c3Rlcih0aGlzLCBgJHtwcm9wcy5jbHVzdGVyTmFtZX1gLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIGNsdXN0ZXJOYW1lOiBwcm9wcy5jbHVzdGVyTmFtZSxcbiAgICAgIGNvbnRhaW5lckluc2lnaHRzVjI6IENvbnRhaW5lckluc2lnaHRzLkVOQUJMRUQsXG4gICAgICBlbmFibGVGYXJnYXRlQ2FwYWNpdHlQcm92aWRlcnM6IG5lZWRzRmFyZ2F0ZVxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtwcm9wcy5jbHVzdGVyTmFtZX1EZXBsb3lhYmxlQ2x1c3RlcmAsIHtcbiAgICAgIGtleTogYCR7cHJvcHMuY2x1c3Rlck5hbWV9RGVwbG95YWJsZUNsdXN0ZXJgLFxuICAgICAgZXhwb3J0TmFtZTogYCR7cHJvcHMuY2x1c3Rlck5hbWV9RGVwbG95YWJsZUNsdXN0ZXJgLFxuICAgICAgdmFsdWU6IHRoaXMuY2x1c3Rlci5jbHVzdGVyQXJuXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3Byb3BzLmNsdXN0ZXJOYW1lfUNsdXN0ZXJBcm5gLCB7XG4gICAgICBrZXk6IGAke3Byb3BzLmNsdXN0ZXJOYW1lfUNsdXN0ZXJBcm5gLFxuICAgICAgZXhwb3J0TmFtZTogYCR7cHJvcHMuY2x1c3Rlck5hbWV9Q2x1c3RlckFybmAsXG4gICAgICB2YWx1ZTogdGhpcy5jbHVzdGVyLmNsdXN0ZXJBcm4sXG4gICAgICBkZXNjcmlwdGlvbjogYEVDUyBDbHVzdGVyIEFSTiBmb3IgJHtwcm9wcy5jbHVzdGVyTmFtZX1gXG4gICAgfSk7XG4gIH1cblxuICAvLyBOb3RlOiBhZGRBdXRvU2NhbGluZ0dyb3VwIHJlbW92ZWQgLSBBU0dzIGFyZSBub3cgY3JlYXRlZCBwZXItc2VydmljZSB2aWEgZ2V0T3JDcmVhdGVBc2dDYXBhY2l0eVByb3ZpZGVyXG5cbiAgYWRkTG9hZEJhbGFuY2VyKHByb3BzOiBFY3NDbHVzdGVyUHJvcHMpIHtcbiAgICBjb25zdCBkZWZhdWx0TG9hZEJhbGFuY2VyTmFtZSA9IGAke3Byb3BzLmNsdXN0ZXJOYW1lfUxvYWRCYWxhbmNlcmA7XG4gICAgY29uc3Qgc3VwcG9ydGVkTmFtZUxlbmd0aCA9IDMyO1xuXG4gICAgbGV0IHRydW5jYXRlZExvYWRCYWxhbmNlck5hbWUgPVxuICAgICAgZGVmYXVsdExvYWRCYWxhbmNlck5hbWUubGVuZ3RoID4gc3VwcG9ydGVkTmFtZUxlbmd0aFxuICAgICAgICA/IGRlZmF1bHRMb2FkQmFsYW5jZXJOYW1lLnN1YnN0cmluZygwLCBzdXBwb3J0ZWROYW1lTGVuZ3RoKVxuICAgICAgICA6IGRlZmF1bHRMb2FkQmFsYW5jZXJOYW1lO1xuXG4gICAgdHJ1bmNhdGVkTG9hZEJhbGFuY2VyTmFtZSA9IHRydW5jYXRlZExvYWRCYWxhbmNlck5hbWUucmVwbGFjZSgvLSskLywgXCJcIik7XG5cbiAgICBjb25zdCBpc0ludGVybmFsID0gcHJvcHMuY2x1c3Rlcj8ubG9hZEJhbGFuY2VyID09PSBcImludGVybmFsXCI7XG5cbiAgICBjb25zdCBoYXNFYzJTZXJ2aWNlcyA9IHRoaXMuYW55U2VydmljZVVzZXNFYzIoKTtcblxuICAgIGlmIChoYXNFYzJTZXJ2aWNlcykge1xuICAgICAgdGhpcy5sb2FkQmFsYW5jZXJTZWN1cml0eUdyb3VwID0gbmV3IFNlY3VyaXR5R3JvdXAoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGAke3Byb3BzLmNsdXN0ZXJOYW1lfUxvYWRCYWxhbmNlclNlY3VyaXR5R3JvdXBgLFxuICAgICAgICB7XG4gICAgICAgICAgdnBjOiB0aGlzLmNsdXN0ZXIudnBjLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBgU2VjdXJpdHkgZ3JvdXAgZm9yIHRoZSAke3Byb3BzLmNsdXN0ZXJOYW1lfSBsb2FkIGJhbGFuY2VyYFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBpZiAodGhpcy5hc2dTZWN1cml0eUdyb3VwKSB7XG4gICAgICAgIHRoaXMubG9hZEJhbGFuY2VyU2VjdXJpdHlHcm91cC5jb25uZWN0aW9ucy5hbGxvd1RvKFxuICAgICAgICAgIHRoaXMuYXNnU2VjdXJpdHlHcm91cCxcbiAgICAgICAgICBQb3J0LmFsbFRjcCgpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYXNnU2VjdXJpdHlHcm91cC5jb25uZWN0aW9ucy5hbGxvd0Zyb20oXG4gICAgICAgICAgdGhpcy5sb2FkQmFsYW5jZXJTZWN1cml0eUdyb3VwLFxuICAgICAgICAgIFBvcnQudGNwUmFuZ2UoNDkxNTIsIDY1NTM1KVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvYWRCYWxhbmNlciA9IG5ldyBBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7cHJvcHMuY2x1c3Rlck5hbWV9TG9hZEJhbGFuY2VyYCxcbiAgICAgICAge1xuICAgICAgICAgIHZwYzogdGhpcy5jbHVzdGVyLnZwYyxcbiAgICAgICAgICBpbnRlcm5ldEZhY2luZzogIWlzSW50ZXJuYWwsXG4gICAgICAgICAgc2VjdXJpdHlHcm91cDogdGhpcy5sb2FkQmFsYW5jZXJTZWN1cml0eUdyb3VwLFxuICAgICAgICAgIGxvYWRCYWxhbmNlck5hbWU6IHRydW5jYXRlZExvYWRCYWxhbmNlck5hbWUsXG4gICAgICAgICAgdnBjU3VibmV0czoge1xuICAgICAgICAgICAgc3VibmV0VHlwZTogaXNJbnRlcm5hbFxuICAgICAgICAgICAgICA/IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTU1xuICAgICAgICAgICAgICA6IFN1Ym5ldFR5cGUuUFVCTElDXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvYWRCYWxhbmNlciA9IG5ldyBBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7cHJvcHMuY2x1c3Rlck5hbWV9TG9hZEJhbGFuY2VyYCxcbiAgICAgICAge1xuICAgICAgICAgIHZwYzogdGhpcy5jbHVzdGVyLnZwYyxcbiAgICAgICAgICBpbnRlcm5ldEZhY2luZzogIWlzSW50ZXJuYWwsXG4gICAgICAgICAgbG9hZEJhbGFuY2VyTmFtZTogdHJ1bmNhdGVkTG9hZEJhbGFuY2VyTmFtZSxcbiAgICAgICAgICB2cGNTdWJuZXRzOiB7XG4gICAgICAgICAgICBzdWJuZXRUeXBlOiBpc0ludGVybmFsXG4gICAgICAgICAgICAgID8gU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTXG4gICAgICAgICAgICAgIDogU3VibmV0VHlwZS5QVUJMSUNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtwcm9wcy5jbHVzdGVyTmFtZX1Mb2FkQmFsYW5jZXJEbnNOYW1lYCwge1xuICAgICAga2V5OiBgJHtwcm9wcy5jbHVzdGVyTmFtZX1Mb2FkQmFsYW5jZXJEbnNOYW1lYCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3Byb3BzLmNsdXN0ZXJOYW1lfUxvYWRCYWxhbmNlckRuc05hbWVgLFxuICAgICAgdmFsdWU6IHRoaXMubG9hZEJhbGFuY2VyLmxvYWRCYWxhbmNlckRuc05hbWVcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7cHJvcHMuY2x1c3Rlck5hbWV9TG9hZEJhbGFuY2VyVXJsYCwge1xuICAgICAga2V5OiBgJHtwcm9wcy5jbHVzdGVyTmFtZX1Mb2FkQmFsYW5jZXJVcmxgLFxuICAgICAgZXhwb3J0TmFtZTogYCR7cHJvcHMuY2x1c3Rlck5hbWV9TG9hZEJhbGFuY2VyVXJsYCxcbiAgICAgIHZhbHVlOiBgaHR0cDovLyR7dGhpcy5sb2FkQmFsYW5jZXIubG9hZEJhbGFuY2VyRG5zTmFtZX1gLFxuICAgICAgZGVzY3JpcHRpb246IGBMb2FkIEJhbGFuY2VyIFVSTCBmb3IgJHtwcm9wcy5jbHVzdGVyTmFtZX1gXG4gICAgfSk7XG5cbiAgICAvLyBFeHBvcnQgbG9hZCBiYWxhbmNlciBBUk4gZm9yIG1vbml0b3JpbmdcbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3Byb3BzLmNsdXN0ZXJOYW1lfUxvYWRCYWxhbmNlckFybmAsIHtcbiAgICAgIGtleTogYCR7cHJvcHMuY2x1c3Rlck5hbWV9TG9hZEJhbGFuY2VyQXJuYCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3Byb3BzLmNsdXN0ZXJOYW1lfUxvYWRCYWxhbmNlckFybmAsXG4gICAgICB2YWx1ZTogdGhpcy5sb2FkQmFsYW5jZXIubG9hZEJhbGFuY2VyQXJuLFxuICAgICAgZGVzY3JpcHRpb246IGBMb2FkIEJhbGFuY2VyIEFSTiBmb3IgJHtwcm9wcy5jbHVzdGVyTmFtZX1gXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFkZERpcmVjdEFjY2Vzc091dHB1dHMocHJvcHM6IEVjc0NsdXN0ZXJQcm9wcykge1xuICAgIGlmICghdGhpcy5kaXJlY3RBY2Nlc3NFbmFibGVkIHx8ICF0aGlzLmF1dG9TY2FsaW5nR3JvdXApIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRhaW5lclBvcnQgPVxuICAgICAgcHJvcHMuc2VydmljZXMuZmxhdE1hcCgocykgPT4gcy5jb250YWluZXJzKS5maW5kKChjKSA9PiBjLnBvcnQpPy5wb3J0IHx8XG4gICAgICAzMDAwO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtwcm9wcy5jbHVzdGVyTmFtZX1BdXRvU2NhbGluZ0dyb3VwTmFtZWAsIHtcbiAgICAgIGtleTogYCR7cHJvcHMuY2x1c3Rlck5hbWV9QXV0b1NjYWxpbmdHcm91cE5hbWVgLFxuICAgICAgZXhwb3J0TmFtZTogYCR7cHJvcHMuY2x1c3Rlck5hbWV9QXV0b1NjYWxpbmdHcm91cE5hbWVgLFxuICAgICAgdmFsdWU6IHRoaXMuYXV0b1NjYWxpbmdHcm91cC5hdXRvU2NhbGluZ0dyb3VwTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgUnVuOiBhd3MgYXV0b3NjYWxpbmcgZGVzY3JpYmUtYXV0by1zY2FsaW5nLWdyb3VwcyAtLWF1dG8tc2NhbGluZy1ncm91cC1uYW1lcyA8bmFtZT4gdG8gZmluZCBpbnN0YW5jZSBJUGBcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7cHJvcHMuY2x1c3Rlck5hbWV9RGlyZWN0QWNjZXNzUG9ydGAsIHtcbiAgICAgIGtleTogYCR7cHJvcHMuY2x1c3Rlck5hbWV9RGlyZWN0QWNjZXNzUG9ydGAsXG4gICAgICBleHBvcnROYW1lOiBgJHtwcm9wcy5jbHVzdGVyTmFtZX1EaXJlY3RBY2Nlc3NQb3J0YCxcbiAgICAgIHZhbHVlOiBTdHJpbmcoY29udGFpbmVyUG9ydCksXG4gICAgICBkZXNjcmlwdGlvbjogYEFjY2VzcyB5b3VyIGFwcCBhdCBodHRwOi8vPEVDMi1QVUJMSUMtSVA+OiR7Y29udGFpbmVyUG9ydH1gXG4gICAgfSk7XG4gIH1cblxuICBhZGRMb2FkQmFsYW5jZXJMaXN0ZW5lcihwcm9wczogRWNzQ2x1c3RlclByb3BzKSB7XG4gICAgaWYgKCF0aGlzLmxvYWRCYWxhbmNlcikgcmV0dXJuO1xuXG4gICAgY29uc3QgcG9ydCA9IHRoaXMuY2VydGlmaWNhdGUgPyA0NDMgOiA4MDtcblxuICAgIGNvbnN0IGRlZmF1bHRBY3Rpb24gPSBMaXN0ZW5lckFjdGlvbi5maXhlZFJlc3BvbnNlKDQwNCwge1xuICAgICAgY29udGVudFR5cGU6IFwidGV4dC9wbGFpblwiLFxuICAgICAgbWVzc2FnZUJvZHk6IFwiTm90IEZvdW5kXCJcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmNlcnRpZmljYXRlKSB7XG4gICAgICB0aGlzLmxvYWRCYWxhbmNlckxpc3RlbmVyID0gdGhpcy5sb2FkQmFsYW5jZXIuYWRkTGlzdGVuZXIoXG4gICAgICAgIGAke3Byb3BzLmNsdXN0ZXJOYW1lfUxpc3RlbmVyYCxcbiAgICAgICAge1xuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgY2VydGlmaWNhdGVzOiBbdGhpcy5jZXJ0aWZpY2F0ZV0sXG4gICAgICAgICAgZGVmYXVsdEFjdGlvblxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvYWRCYWxhbmNlckxpc3RlbmVyID0gdGhpcy5sb2FkQmFsYW5jZXIuYWRkTGlzdGVuZXIoXG4gICAgICAgIGAke3Byb3BzLmNsdXN0ZXJOYW1lfUxpc3RlbmVyYCxcbiAgICAgICAge1xuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgZGVmYXVsdEFjdGlvblxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFkZEhvc3RlZFpvbmUocHJvcHM6IEVjc0NsdXN0ZXJQcm9wcykge1xuICAgIGNvbnN0IGRvbWFpbkNvbmZpZyA9IHByb3BzLmNsdXN0ZXI/LmRvbWFpbkNvbmZpZztcbiAgICBjb25zdCBzaW1wbGVEb21haW4gPSBwcm9wcy5jbHVzdGVyPy5kb21haW47XG5cbiAgICBpZiAoIWRvbWFpbkNvbmZpZyAmJiAhc2ltcGxlRG9tYWluKSByZXR1cm47XG5cbiAgICBjb25zdCBkb21haW5OYW1lID0gZG9tYWluQ29uZmlnPy5kb21haW5OYW1lIHx8IHNpbXBsZURvbWFpbiE7XG5cbiAgICBpZiAoIWRvbWFpbkNvbmZpZz8uaG9zdGVkWm9uZSkge1xuICAgICAgY29uc3QgaG9zdGVkWm9uZSA9IG5ldyBGamFsbEhvc3RlZFpvbmUoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGAke3Byb3BzLmNsdXN0ZXJOYW1lfUhvc3RlZFpvbmVgLFxuICAgICAgICB7XG4gICAgICAgICAgem9uZU5hbWU6IGRvbWFpbk5hbWVcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgdGhpcy5ob3N0ZWRab25lID0gaG9zdGVkWm9uZS5nZXRJbnRlcm5hbEhvc3RlZFpvbmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ob3N0ZWRab25lID0gZG9tYWluQ29uZmlnLmhvc3RlZFpvbmUuZ2V0SW50ZXJuYWxIb3N0ZWRab25lKCk7XG4gICAgfVxuXG4gICAgaWYgKCFkb21haW5Db25maWc/LmNlcnRpZmljYXRlKSB7XG4gICAgICB0aGlzLmNlcnRpZmljYXRlID0gbmV3IENlcnRpZmljYXRlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHtwcm9wcy5jbHVzdGVyTmFtZX1DZXJ0aWZpY2F0ZWAsXG4gICAgICAgIHtcbiAgICAgICAgICBkb21haW5OYW1lLFxuICAgICAgICAgIHZhbGlkYXRpb246IENlcnRpZmljYXRlVmFsaWRhdGlvbi5mcm9tRG5zKHRoaXMuaG9zdGVkWm9uZSlcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZG9tYWluQ29uZmlnKSB7XG4gICAgICBjb25zdCBsYXRlbmN5Q29uZmlnID0gZG9tYWluQ29uZmlnIGFzIExhdGVuY3lEb21haW5Db25maWc7XG4gICAgICBjb25zdCB3ZWlnaHRlZENvbmZpZyA9IGRvbWFpbkNvbmZpZyBhcyBXZWlnaHRlZERvbWFpbkNvbmZpZztcbiAgICAgIGNvbnN0IGdlb0NvbmZpZyA9IGRvbWFpbkNvbmZpZyBhcyBHZW9Mb2NhdGlvbkRvbWFpbkNvbmZpZztcblxuICAgICAgY29uc3QgaGFzUm91dGluZ1BvbGljeTogYm9vbGVhbiA9XG4gICAgICAgICEhbGF0ZW5jeUNvbmZpZz8ucmVnaW9uIHx8XG4gICAgICAgIHdlaWdodGVkQ29uZmlnPy53ZWlnaHQgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAhIWdlb0NvbmZpZz8uZ2VvTG9jYXRpb247XG5cbiAgICAgIGxldCBzZXRJZGVudGlmaWVyID0gZG9tYWluQ29uZmlnLnNldElkZW50aWZpZXI7XG4gICAgICBpZiAoaGFzUm91dGluZ1BvbGljeSAmJiAhc2V0SWRlbnRpZmllcikge1xuICAgICAgICBpZiAobGF0ZW5jeUNvbmZpZz8ucmVnaW9uKSB7XG4gICAgICAgICAgc2V0SWRlbnRpZmllciA9IGAke3Byb3BzLmNsdXN0ZXJOYW1lfSR7bGF0ZW5jeUNvbmZpZy5yZWdpb259YDtcbiAgICAgICAgfSBlbHNlIGlmICh3ZWlnaHRlZENvbmZpZz8ud2VpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzZXRJZGVudGlmaWVyID0gYCR7cHJvcHMuY2x1c3Rlck5hbWV9V2VpZ2h0JHt3ZWlnaHRlZENvbmZpZy53ZWlnaHR9YDtcbiAgICAgICAgfSBlbHNlIGlmIChnZW9Db25maWc/Lmdlb0xvY2F0aW9uKSB7XG4gICAgICAgICAgc2V0SWRlbnRpZmllciA9IGAke3Byb3BzLmNsdXN0ZXJOYW1lfUdlb2A7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubG9hZEJhbGFuY2VyKSB7XG4gICAgICAgIHRoaXMuYVJlY29yZCA9IG5ldyBBUmVjb3JkKHRoaXMsIGAke3Byb3BzLmNsdXN0ZXJOYW1lfUFSZWNvcmRgLCB7XG4gICAgICAgICAgcmVjb3JkTmFtZTogZG9tYWluTmFtZSxcbiAgICAgICAgICB6b25lOiB0aGlzLmhvc3RlZFpvbmUsXG4gICAgICAgICAgdGFyZ2V0OiBSZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICAgICAgbmV3IExvYWRCYWxhbmNlclRhcmdldCh0aGlzLmxvYWRCYWxhbmNlciwge1xuICAgICAgICAgICAgICBldmFsdWF0ZVRhcmdldEhlYWx0aDogaGFzUm91dGluZ1BvbGljeVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApLFxuICAgICAgICAgIHJlZ2lvbjogbGF0ZW5jeUNvbmZpZz8ucmVnaW9uLFxuICAgICAgICAgIHdlaWdodDogd2VpZ2h0ZWRDb25maWc/LndlaWdodCxcbiAgICAgICAgICBnZW9Mb2NhdGlvbjogZ2VvQ29uZmlnPy5nZW9Mb2NhdGlvbixcbiAgICAgICAgICBzZXRJZGVudGlmaWVyOiBzZXRJZGVudGlmaWVyXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2ltcGxlRG9tYWluICYmIHRoaXMubG9hZEJhbGFuY2VyKSB7XG4gICAgICB0aGlzLmFSZWNvcmQgPSBuZXcgQVJlY29yZCh0aGlzLCBgJHtwcm9wcy5jbHVzdGVyTmFtZX1BUmVjb3JkYCwge1xuICAgICAgICByZWNvcmROYW1lOiBkb21haW5OYW1lLFxuICAgICAgICB6b25lOiB0aGlzLmhvc3RlZFpvbmUsXG4gICAgICAgIHRhcmdldDogUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgICBuZXcgTG9hZEJhbGFuY2VyVGFyZ2V0KHRoaXMubG9hZEJhbGFuY2VyKVxuICAgICAgICApXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogRWNzQ2x1c3RlclByb3BzXG4gICk6IChzYjogU3RhY2tCdWlsZGVyKSA9PiBDb25zdHJ1Y3Qge1xuICAgIHJldHVybiAoc2I6IFN0YWNrQnVpbGRlcikgPT4ge1xuICAgICAgY29uc3QgbmV3UHJvcHM6IEVjc0NsdXN0ZXJQcm9wcyA9IHtcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIC4uLntcbiAgICAgICAgICB2cGM6IChzYi5nZXROZXR3b3JrKCkgYXMgSVZwYykgfHwgcHJvcHMudnBjXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gbmV3IHRoaXMoc2IuZ2V0U3RhY2soKSwgaWQsIG5ld1Byb3BzKTtcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
1082
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9lY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBb0I2QjtBQUM3QixpREFTNkI7QUFDN0IsMkNBQXVDO0FBR3ZDLDZDQUFrRTtBQUVsRSx1RkFPZ0Q7QUFDaEQsaURBUTZCO0FBQzdCLHVGQUtnRDtBQUNoRCxpREFBMEQ7QUFDMUQsdUVBQXdEO0FBQ3hELGlEQUFzRDtBQUN0RCwrRUFHNEM7QUFDNUMseURBS2lDO0FBQ2pDLHlFQUFxRTtBQUNyRSxpREFBaUQ7QUFDakQsaUVBQTJFO0FBRTNFLGlFQUFpRjtBQUNqRix3REFBcUQ7QUFFckQseUVBQTBFO0FBSTFFOzs7R0FHRztBQUNILE1BQU0scUJBQXFCLEdBQUc7SUFDNUIsS0FBSztJQUNMLEtBQUs7SUFDTCxNQUFNO0lBQ04sTUFBTTtJQUNOLEtBQUs7SUFDTCxNQUFNO0lBQ04sTUFBTTtJQUNOLEtBQUs7SUFDTCxNQUFNO0lBQ04sS0FBSztJQUNMLE1BQU07SUFDTixLQUFLO0lBQ0wsTUFBTTtJQUNOLEtBQUs7SUFDTCxNQUFNO0lBQ04sSUFBSTtJQUNKLE1BQU07SUFDTixPQUFPO0lBQ1AsUUFBUTtJQUNSLEtBQUs7SUFDTCxPQUFPO0NBQ1IsQ0FBQztBQUVGOzs7Ozs7R0FNRztBQUNILFNBQVMsb0JBQW9CLENBQUMsWUFBb0I7SUFDaEQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxPQUFPLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDM0MsQ0FBQyxDQUFDLHlCQUFlLENBQUMsR0FBRztRQUNyQixDQUFDLENBQUMseUJBQWUsQ0FBQyxRQUFRLENBQUM7QUFDL0IsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLGdDQUFnQztJQUdwQyxZQUFZLE9BQW1CO1FBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBZ0I7UUFDcEIsZ0RBQWdEO1FBQ2hELElBQUksSUFBSSxZQUFZLHdCQUFjLElBQUksSUFBSSxZQUFZLG9CQUFVLEVBQUUsQ0FBQztZQUNqRSwyRUFBMkU7WUFDM0UsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO2lCQUNuQyxPQUFPLEVBQUU7aUJBQ1QsSUFBSSxDQUNILENBQUMsS0FBSyxFQUFtRCxFQUFFLENBQ3pELEtBQUssWUFBWSxnREFBc0MsQ0FDMUQsQ0FBQztZQUVKLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLHlDQUF5QztnQkFDekMseURBQXlEO2dCQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN4QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRjtBQUVELElBQVksUUFHWDtBQUhELFdBQVksUUFBUTtJQUNsQix1Q0FBSSxDQUFBO0lBQ0oseUNBQUssQ0FBQTtBQUNQLENBQUMsRUFIVyxRQUFRLHdCQUFSLFFBQVEsUUFHbkI7QUFFRCxJQUFZLFdBR1g7QUFIRCxXQUFZLFdBQVc7SUFDckIsc0RBQTBELENBQUE7SUFDMUQsNERBQWdFLENBQUE7QUFDbEUsQ0FBQyxFQUhXLFdBQVcsMkJBQVgsV0FBVyxRQUd0QjtBQWdWRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQ0c7QUFDSCxNQUFxQixVQUFXLFNBQVEsc0JBQVM7SUE4Qi9DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQWRuQix1QkFBdUI7UUFDZixhQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7UUFFbEQscUVBQXFFO1FBQzdELHlCQUFvQixHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO1FBTzlELGlCQUFZLEdBQUcsR0FBRyxDQUFDO1FBS3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLFlBQVksS0FBSyxJQUFJLENBQUM7UUFDaEUsSUFBSSxDQUFDLG9CQUFvQjtZQUN2QixLQUFLLENBQUMsT0FBTyxFQUFFLFlBQVksS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBRXBFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2QixLQUFLLE1BQU0sWUFBWSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQyxJQUFJLFlBQVksQ0FBQyxnQkFBZ0IsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3BELENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFNUIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDO2dCQUN6RCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLENBQUM7WUFFRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFFRCxLQUFLLE1BQU0sWUFBWSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV4QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0IscUJBQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksZ0NBQWdDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELDhEQUE4RDtJQUM5RCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCwrREFBK0Q7SUFDL0QsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsVUFBVSxDQUFDLElBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDMUMsQ0FBQztJQUVELHdDQUF3QztJQUN4QyxXQUFXO1FBQ1QsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQXVDLENBQUM7UUFDOUQsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxxQ0FBcUM7SUFDckMsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsNkNBQTZDO0lBQzdDLE1BQU07UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUN6QyxNQUFNLFlBQVksR0FDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTTtZQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDO1FBQy9DLElBQUksWUFBWTtZQUFFLE9BQU8sV0FBVyxZQUFZLEVBQUUsQ0FBQztRQUNuRCxPQUFPLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzNELENBQUM7SUFFRDs7O09BR0c7SUFDSyxtQkFBbUIsQ0FBQyxZQUE2QjtRQUN2RCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO1FBRXRDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUVoRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQzlDLFdBQVcsRUFDWCxZQUFZLEVBQ1osYUFBYSxFQUNiLFFBQVEsQ0FDVCxDQUFDO1FBRUYsTUFBTSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FDL0QsV0FBVyxFQUNYLFlBQVksRUFDWixjQUFjLENBQ2YsQ0FBQztRQUVGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQ2hDLFdBQVcsRUFDWCxZQUFZLEVBQ1osY0FBYyxDQUNmLENBQUM7UUFFRixJQUFJLFdBQWdELENBQUM7UUFDckQsSUFDRSxDQUFDLElBQUksQ0FBQyxvQkFBb0I7WUFDMUIsZ0JBQWdCO1lBQ2hCLElBQUksQ0FBQyxvQkFBb0IsRUFDekIsQ0FBQztZQUNELFdBQVcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQ3ZDLFdBQVcsRUFDWCxZQUFZLEVBQ1osT0FBTyxFQUNQLGdCQUFnQixDQUNqQixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksYUFBc0QsQ0FBQztRQUMzRCxJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM3QixhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUNwQyxXQUFXLEVBQ1gsWUFBWSxFQUNaLE9BQU8sQ0FDUixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRTtZQUM3QixPQUFPO1lBQ1AsY0FBYztZQUNkLGFBQWE7WUFDYixRQUFRO1lBQ1IsVUFBVTtZQUNWLGdCQUFnQjtZQUNoQixXQUFXO1lBQ1gsYUFBYTtTQUNkLENBQUMsQ0FBQztRQUVILElBQUksWUFBWSxDQUFDLFdBQVcsSUFBSSxZQUFZLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwRSxJQUFJLENBQUM7Z0JBQ0gsSUFBQSxtQ0FBa0IsRUFDaEIsWUFBWSxDQUFDLFdBQVcsRUFDeEIsUUFBUSxFQUFFLHdDQUF3QztnQkFDbEQsT0FBTyxDQUFDLG1EQUFtRDtpQkFDNUQsQ0FBQztZQUNKLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0RBQWtELFdBQVcsTUFDM0QsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDdkQsRUFBRSxDQUNILENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxhQUFhLENBQUMsS0FBc0I7UUFDMUMsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25ELE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBRUQsb0NBQW9DO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUMzQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUN0RCxDQUFDO1FBQ0YsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FDYiw0QkFBNEIsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDekUsQ0FBQztRQUNKLENBQUM7UUFFRCxxREFBcUQ7UUFDckQsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3BELENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUMvQyxDQUFDO1FBRUYsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDL0QsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUM3QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUM1QyxDQUFDO1lBQ0YsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM5QixNQUFNLElBQUksS0FBSyxDQUNiLGlGQUFpRjtvQkFDL0UsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO29CQUNuRCxnREFBZ0QsQ0FDbkQsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQscUNBQXFDO1FBQ3JDLEtBQUssTUFBTSxPQUFPLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMzRCxNQUFNLElBQUksS0FBSyxDQUNiLFlBQVksT0FBTyxDQUFDLElBQUksOENBQThDLENBQ3ZFLENBQUM7WUFDSixDQUFDO1lBRUQscURBQXFEO1lBQ3JELE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0QsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUMvQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUN4RCxDQUFDO1lBQ0YsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sSUFBSSxLQUFLLENBQ2IsWUFBWSxPQUFPLENBQUMsSUFBSSxnQ0FBZ0M7b0JBQ3RELEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDcEQsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQXNCO1FBQzdDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNyQixLQUFLLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUM5QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLENBQzVCLENBQUM7WUFDRixJQUFJLGdCQUFnQixFQUFFLElBQUksRUFBRSxDQUFDO2dCQUMzQixXQUFXLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO2dCQUNwQyxNQUFNO1lBQ1IsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBcUIsRUFBRSxDQUFDO1FBRTVDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBRUQsS0FBSyxNQUFNLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDakQsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQztZQUMxRSxLQUFLLE1BQU0sRUFBRSxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUNqQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUkscUJBQVcsQ0FBQztZQUNqQyxjQUFjO1lBQ2QsV0FBVyxFQUFFLGNBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1NBQ25DLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssbUJBQW1CLENBQUMsV0FBbUI7UUFDN0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxjQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsV0FBVyxlQUFlLEVBQUU7WUFDbEUsU0FBUyxFQUFFLElBQUksMEJBQWdCLENBQUMseUJBQXlCLENBQUM7U0FDM0QsQ0FBQyxDQUFDO1FBRUgsYUFBYSxDQUFDLFdBQVcsQ0FDdkIsSUFBSSx5QkFBZSxDQUFDO1lBQ2xCLE1BQU0sRUFBRSxnQkFBTSxDQUFDLEtBQUs7WUFDcEIsT0FBTyxFQUFFO2dCQUNQLDJCQUEyQjtnQkFDM0IsaUNBQWlDO2dCQUNqQyw0QkFBNEI7Z0JBQzVCLG1CQUFtQjthQUNwQjtZQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNqQixDQUFDLENBQ0gsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxtQkFBbUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQztRQUNoSSxhQUFhLENBQUMsV0FBVyxDQUN2QixJQUFJLHlCQUFlLENBQUM7WUFDbEIsTUFBTSxFQUFFLGdCQUFNLENBQUMsS0FBSztZQUNwQixPQUFPLEVBQUU7Z0JBQ1Asc0JBQXNCO2dCQUN0QixtQkFBbUI7Z0JBQ25CLHFCQUFxQjthQUN0QjtZQUNELFNBQVMsRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLFdBQVcsSUFBSSxDQUFDO1NBQzdDLENBQUMsQ0FDSCxDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7UUFDNUQsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQ2hDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FDYiwwQkFBMEIsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sV0FBVyxVQUFVLElBQUksQ0FDckcsQ0FBQztZQUNGLGFBQWEsQ0FBQyxXQUFXLENBQ3ZCLElBQUkseUJBQWUsQ0FBQztnQkFDbEIsTUFBTSxFQUFFLGdCQUFNLENBQUMsS0FBSztnQkFDcEIsT0FBTyxFQUFFO29CQUNQLCtCQUErQjtvQkFDL0IsK0JBQStCO2lCQUNoQztnQkFDRCxTQUFTLEVBQUUsVUFBVTthQUN0QixDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUN6RCxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDckIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNqRSxDQUNGLENBQUM7UUFDRixJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN4QixNQUFNLElBQUksS0FBSyxDQUNiLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsOERBQThEO29CQUNsRywrRkFBK0YsQ0FDbEcsQ0FBQztZQUNKLENBQUM7WUFDRCxhQUFhLENBQUMsV0FBVyxDQUN2QixJQUFJLHlCQUFlLENBQUM7Z0JBQ2xCLE1BQU0sRUFBRSxnQkFBTSxDQUFDLEtBQUs7Z0JBQ3BCLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixFQUFFLGtCQUFrQixDQUFDO2dCQUNsRCxTQUFTLEVBQUUsQ0FBQyw2QkFBNkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQzthQUNqRSxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUM7UUFFRCx5RkFBeUY7UUFDekYsYUFBYSxDQUFDLFdBQVcsQ0FDdkIsSUFBSSx5QkFBZSxDQUFDO1lBQ2xCLE1BQU0sRUFBRSxnQkFBTSxDQUFDLEtBQUs7WUFDcEIsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQ3hCLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztZQUNoQixVQUFVLEVBQUU7Z0JBQ1YsWUFBWSxFQUFFO29CQUNaLGdCQUFnQixFQUFFO3dCQUNoQixPQUFPLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sZ0JBQWdCO3dCQUM1QyxrQkFBa0IsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxnQkFBZ0I7cUJBQ3hEO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQ0gsQ0FBQztRQUVGLE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssY0FBYyxDQUNwQixXQUFtQixFQUNuQixZQUE2QjtRQUU3QixNQUFNLFFBQVEsR0FBRyxJQUFJLGNBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxXQUFXLFVBQVUsRUFBRTtZQUN4RCxTQUFTLEVBQUUsSUFBSSwwQkFBZ0IsQ0FBQyx5QkFBeUIsQ0FBQztTQUMzRCxDQUFDLENBQUM7UUFFSCxxREFBcUQ7UUFDckQsUUFBUSxDQUFDLFdBQVcsQ0FDbEIsSUFBSSx5QkFBZSxDQUFDO1lBQ2xCLE1BQU0sRUFBRSxnQkFBTSxDQUFDLEtBQUs7WUFDcEIsT0FBTyxFQUFFO2dCQUNQLGtDQUFrQztnQkFDbEMsK0JBQStCO2dCQUMvQixnQ0FBZ0M7Z0JBQ2hDLDZCQUE2QjthQUM5QjtZQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNqQixDQUFDLENBQ0gsQ0FBQztRQUVGLElBQUksWUFBWSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDeEMsS0FBSyxNQUFNLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQ3ZELFlBQVksQ0FBQyxzQkFBc0IsQ0FDcEMsRUFBRSxDQUFDO2dCQUNGLFFBQVEsQ0FBQyxrQkFBa0IsQ0FDekIsSUFBSSxnQkFBTSxDQUFDLElBQUksRUFBRSxHQUFHLFdBQVcsR0FBRyxVQUFVLEVBQUUsRUFBRTtvQkFDOUMsUUFBUSxFQUFFLGNBQWM7aUJBQ3pCLENBQUMsQ0FDSCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLFlBQVksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ3pDLEtBQUssTUFBTSxNQUFNLElBQUksWUFBWSxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQzFELFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxvQkFBb0IsQ0FDMUIsV0FBbUIsRUFDbkIsWUFBNkIsRUFDN0IsYUFBbUIsRUFDbkIsUUFBYztRQUVkLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO1FBQ3BDLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxjQUFjLElBQUksR0FBRyxDQUFDO1FBRTFELElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDeEMsT0FBTyxJQUFJLCtCQUFxQixDQUFDLElBQUksRUFBRSxHQUFHLFdBQVcsZ0JBQWdCLEVBQUU7Z0JBQ3JFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLFdBQVcsRUFBRTtnQkFDbEQsR0FBRztnQkFDSCxjQUFjO2dCQUNkLGFBQWE7Z0JBQ2IsUUFBUTtnQkFDUixlQUFlLEVBQUU7b0JBQ2YsZUFBZSxFQUFFLHlCQUFlLENBQUMsS0FBSztvQkFDdEMscUJBQXFCLEVBQUUsK0JBQXFCLENBQUMsS0FBSztpQkFDbkQ7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sSUFBSSwyQkFBaUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxXQUFXLGdCQUFnQixFQUFFO2dCQUNqRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxXQUFXLEVBQUU7Z0JBQ2xELGFBQWE7Z0JBQ2IsUUFBUTtnQkFDUixHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsV0FBVyxFQUFFLHFCQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDbkUsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFTyxtQkFBbUIsQ0FDekIsV0FBbUIsRUFDbkIsWUFBNkIsRUFDN0IsY0FBeUQ7UUFLekQsTUFBTSxVQUFVLEdBQTBCLEVBQUUsQ0FBQztRQUM3QyxJQUFJLGdCQUFpRCxDQUFDO1FBRXRELEtBQUssTUFBTSxlQUFlLElBQUksWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3RELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FDbEMsV0FBVyxFQUNYLGVBQWUsRUFDZixZQUFZLENBQ2IsQ0FBQztZQUNGLE1BQU0sZUFBZSxHQUNuQixDQUFDLGdCQUFnQixJQUFJLGVBQWUsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDO1lBRTFELE1BQU0sT0FBTyxHQUE4QixFQUFFLENBQUM7WUFDOUMsSUFBSSxlQUFlLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ2xDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUM5QyxlQUFlLENBQUMsYUFBYSxDQUM5QixFQUFFLENBQUM7b0JBQ0YsTUFBTSxNQUFNLEdBQUcsMkJBQU0sQ0FBQyxnQkFBZ0IsQ0FDcEMsSUFBSSxFQUNKLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLGVBQWUsQ0FBQyxJQUFJLEdBQUcsR0FBRyxRQUFRLEVBQzVFLFlBQVksQ0FBQyxJQUFJLENBQ2xCLENBQUM7b0JBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGdCQUFTLENBQUMsa0JBQWtCLENBQ3pDLE1BQU0sRUFDTixZQUFZLENBQUMsS0FBSyxDQUNuQixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxlQUFlLENBQUMsT0FBTyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsRSxJQUFJLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDbEMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDckUsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUMzRCxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQ2hDLENBQUM7b0JBQ0YsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUM3QixNQUFNLElBQUksS0FBSyxDQUNiLGNBQWMsZUFBZSxDQUFDLElBQUksaUJBQWlCLFdBQVcsOEJBQThCOzRCQUMxRiw4Q0FBOEMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTs0QkFDMUUscURBQXFELENBQ3hELENBQUM7b0JBQ0osQ0FBQztnQkFDSCxDQUFDO2dCQUVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FDOUMsV0FBVyxFQUNYLFlBQVksQ0FBQyxjQUFjLENBQzVCLENBQUM7Z0JBRUYsS0FBSyxNQUFNLFVBQVUsSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2pELE1BQU0sU0FBUyxHQUFHLEdBQUcsY0FBYyxJQUFJLFVBQVUsRUFBRSxDQUFDO29CQUNwRCxNQUFNLEtBQUssR0FBRyx5QkFBZSxDQUFDLG1DQUFtQyxDQUMvRCxJQUFJLEVBQ0osR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxXQUFXLEdBQUcsZUFBZSxDQUFDLElBQUksR0FBRyxVQUFVLFVBQVUsRUFDckYsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLENBQzdCLENBQUM7b0JBQ0YsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLGdCQUFTLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFELENBQUM7WUFDSCxDQUFDO1lBRUQsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FDM0MsR0FBRyxXQUFXLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxFQUN2QztnQkFDRSxLQUFLO2dCQUNMLGFBQWEsRUFBRSxlQUFlLENBQUMsSUFBSTtnQkFDbkMsT0FBTyxFQUFFLElBQUksc0JBQVksQ0FBQztvQkFDeEIsWUFBWSxFQUFFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksV0FBVyxFQUFFO29CQUM3RCxZQUFZLEVBQUUsRUFBRTtpQkFDakIsQ0FBQztnQkFDRixXQUFXLEVBQUUsZUFBZSxDQUFDLFdBQVc7Z0JBQ3hDLE9BQU87Z0JBQ1AsT0FBTyxFQUFFLGVBQWUsQ0FBQyxPQUFPO2dCQUNoQyxVQUFVLEVBQUUsZUFBZSxDQUFDLFVBQVU7Z0JBQ3RDLFNBQVMsRUFBRSxlQUFlLENBQUMsU0FBUyxJQUFJLElBQUk7Z0JBQzVDLFdBQVcsRUFBRSxlQUFlLENBQUMsV0FBVztvQkFDdEMsQ0FBQyxDQUFDO3dCQUNFLE9BQU8sRUFBRSxlQUFlLENBQUMsV0FBVyxDQUFDLE9BQU87d0JBQzVDLFFBQVEsRUFBRSxlQUFlLENBQUMsV0FBVyxDQUFDLFFBQVE7NEJBQzVDLENBQUMsQ0FBQyxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQzs0QkFDeEQsQ0FBQyxDQUFDLFNBQVM7d0JBQ2IsT0FBTyxFQUFFLGVBQWUsQ0FBQyxXQUFXLENBQUMsT0FBTzs0QkFDMUMsQ0FBQyxDQUFDLHNCQUFRLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDOzRCQUN2RCxDQUFDLENBQUMsU0FBUzt3QkFDYixPQUFPLEVBQUUsZUFBZSxDQUFDLFdBQVcsQ0FBQyxPQUFPO3dCQUM1QyxXQUFXLEVBQUUsZUFBZSxDQUFDLFdBQVcsQ0FBQyxXQUFXOzRCQUNsRCxDQUFDLENBQUMsc0JBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7NEJBQzNELENBQUMsQ0FBQyxTQUFTO3FCQUNkO29CQUNILENBQUMsQ0FBQyxTQUFTO2dCQUNiLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJO29CQUNyQyxjQUFjLEVBQUUsWUFBWSxDQUFDLFNBQVMsRUFBRSxjQUFjLElBQUksSUFBSTtpQkFDL0QsQ0FBQzthQUNILENBQ0YsQ0FBQztZQUVGLElBQUksZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN6QixTQUFTLENBQUMsZUFBZSxDQUFDO29CQUN4QixhQUFhLEVBQUUsZUFBZSxDQUFDLElBQUk7aUJBQ3BDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQixnQkFBZ0IsR0FBRyxTQUFTLENBQUM7WUFDL0IsQ0FBQztZQUVELFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUVELE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRU8saUJBQWlCLENBQ3ZCLFdBQW1CLEVBQ25CLGVBQTBDLEVBQzFDLFlBQTZCO1FBRTdCLE1BQU0sV0FBVyxHQUNmLGVBQWUsQ0FBQyxLQUFLLElBQUksWUFBWSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUUxRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsT0FBTyx3QkFBYyxDQUFDLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFFRCxvREFBb0Q7UUFDcEQsc0NBQXNDO1FBQ3RDLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxZQUFZO1lBQzVDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDL0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLE1BQU0sUUFBUSxHQUFHLEdBQUcsV0FBVyxDQUFDLFdBQVcsRUFBRSxHQUFHLFlBQVksU0FBUyxDQUFDO1FBRXRFLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDcEMsTUFBTSxpQkFBaUIsR0FDckIsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLHVDQUF1QztnQkFDcEcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLDJDQUEyQztnQkFDeEYsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLDhFQUE4RTtZQUVuSCxJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sd0JBQWMsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbEQsQ0FBQztZQUNELE9BQU8sd0JBQWMsQ0FBQyxpQkFBaUIsQ0FDckMsb0JBQVUsQ0FBQyxrQkFBa0IsQ0FDM0IsSUFBSSxFQUNKLEdBQUcsV0FBVyxHQUFHLGVBQWUsQ0FBQyxJQUFJLFNBQVMsRUFDOUMsV0FBVyxDQUNaLEVBQ0QsUUFBUSxDQUNULENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxXQUFXLFlBQVksb0JBQVUsRUFBRSxDQUFDO1lBQ3RDLE9BQU8sd0JBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVELE9BQU8sV0FBNkIsQ0FBQztJQUN2QyxDQUFDO0lBRU8sYUFBYSxDQUNuQixXQUFtQixFQUNuQixZQUE2QixFQUM3QixjQUF5RDtRQUV6RCxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQztRQUNwRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV4RSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sT0FBTyxHQUFHLElBQUksd0JBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxXQUFXLFNBQVMsRUFBRTtnQkFDaEUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNyQixjQUFjLEVBQUUsY0FBdUM7Z0JBQ3ZELFlBQVk7Z0JBQ1osV0FBVztnQkFDWCxVQUFVLEVBQUU7b0JBQ1YsVUFBVSxFQUFFLE1BQU07d0JBQ2hCLENBQUMsQ0FBQyxvQkFBVSxDQUFDLG1CQUFtQjt3QkFDaEMsQ0FBQyxDQUFDLG9CQUFVLENBQUMsTUFBTTtpQkFDdEI7Z0JBQ0QsY0FBYyxFQUFFLENBQUMsTUFBTTtnQkFDdkIsMEJBQTBCLEVBQUU7b0JBQzFCO3dCQUNFLGdCQUFnQixFQUFFLGlCQUFpQjt3QkFDbkMsTUFBTSxFQUFFLENBQUM7cUJBQ1Y7aUJBQ0Y7Z0JBQ0QsYUFBYSxFQUFFLDZCQUFtQixDQUFDLE9BQU87Z0JBQzFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDaEQsb0JBQW9CLEVBQUUsSUFBSTtnQkFDMUIsb0JBQW9CLEVBQUUsSUFBSTtnQkFDMUIsc0JBQXNCLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUM3QyxpQkFBaUIsRUFBRSxHQUFHO2dCQUN0QixpQkFBaUIsRUFBRSxHQUFHO2FBQ3ZCLENBQUMsQ0FBQztZQUVILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxXQUFXLFlBQVksRUFBRTtnQkFDdkUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsV0FBVyxZQUFZO2dCQUN4RCxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxXQUFXLFlBQVk7Z0JBQy9ELEtBQUssRUFBRSxPQUFPLENBQUMsVUFBVTtnQkFDekIsV0FBVyxFQUFFLHVCQUF1QixXQUFXLEVBQUU7YUFDbEQsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFdEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxvQkFBVSxDQUFDLElBQUksRUFBRSxHQUFHLFdBQVcsU0FBUyxFQUFFO2dCQUM1RCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLGNBQWMsRUFBRSxjQUFtQztnQkFDbkQsWUFBWTtnQkFDWixXQUFXO2dCQUNYLDBCQUEwQixFQUFFO29CQUMxQjt3QkFDRSxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsb0JBQW9CO3dCQUNsRCxNQUFNLEVBQUUsQ0FBQztxQkFDVjtpQkFDRjtnQkFDRCxhQUFhLEVBQUUsNkJBQW1CLENBQUMsT0FBTztnQkFDMUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNoRCxtQkFBbUIsRUFBRSxDQUFDLDJCQUFpQixDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQ2hFLG9CQUFvQixFQUFFLElBQUk7Z0JBQzFCLG9CQUFvQixFQUFFLElBQUk7Z0JBQzFCLHNCQUFzQixFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDN0MsaUJBQWlCLEVBQUUsR0FBRztnQkFDdEIsaUJBQWlCLEVBQUUsR0FBRzthQUN2QixDQUFDLENBQUM7WUFFSCxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsV0FBVyxZQUFZLEVBQUU7Z0JBQ3ZFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLFdBQVcsWUFBWTtnQkFDeEQsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsV0FBVyxZQUFZO2dCQUMvRCxLQUFLLEVBQUUsT0FBTyxDQUFDLFVBQVU7Z0JBQ3pCLFdBQVcsRUFBRSx1QkFBdUIsV0FBVyxFQUFFO2FBQ2xELENBQUMsQ0FBQztZQUNILE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRU8sc0JBQXNCLENBQzVCLFdBQW1CLEVBQ25CLFlBQTZCLEVBQzdCLE9BQW9DLEVBQ3BDLGdCQUFxQztRQUVyQyxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUM7UUFDckQsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSxlQUFlLElBQUksR0FBRyxDQUFDO1FBRXJFLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDekQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQy9DLENBQUM7UUFDRixNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1FBRXZELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7WUFDdkQsQ0FBQyxDQUFDO2dCQUNFLFFBQVEsRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLHFCQUFxQixFQUFFLENBQUM7Z0JBQ3hCLHVCQUF1QixFQUFFLENBQUM7Z0JBQzFCLElBQUksRUFBRSxlQUFlO2dCQUNyQixJQUFJLEVBQUUsY0FBdUI7Z0JBQzdCLE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7YUFDOUI7WUFDSCxDQUFDLENBQUM7Z0JBQ0UsUUFBUSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLElBQUksRUFBRSxHQUFHLGFBQWEsRUFBRTtnQkFDeEIsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzthQUM5QixDQUFDO1FBRU4sSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQyxvQkFBcUIsQ0FBQyxVQUFVLENBQzFDLEdBQUcsV0FBVyxhQUFhLEVBQzNCO2dCQUNFLE9BQU8sRUFBRTtvQkFDUCxPQUFPLENBQUMsa0JBQWtCLENBQUM7d0JBQ3pCLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxhQUFhO3dCQUM3QyxhQUFhO3FCQUNkLENBQUM7aUJBQ0g7Z0JBQ0QsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLFFBQVEsRUFBRSxnREFBbUIsQ0FBQyxJQUFJO2dCQUNsQyxXQUFXLEVBQUUsaUJBQWlCO2FBQy9CLENBQ0YsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBRXZFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBcUIsQ0FBQyxVQUFVLENBQ3ZELEdBQUcsV0FBVyxTQUFTLEVBQ3ZCO2dCQUNFLE9BQU8sRUFBRTtvQkFDUCxPQUFPLENBQUMsa0JBQWtCLENBQUM7d0JBQ3pCLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxhQUFhO3dCQUM3QyxhQUFhO3FCQUNkLENBQUM7aUJBQ0g7Z0JBQ0QsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLFFBQVEsRUFBRSxnREFBbUIsQ0FBQyxJQUFJO2dCQUNsQyxXQUFXLEVBQUUsaUJBQWlCO2dCQUM5QixVQUFVLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQztnQkFDckQsUUFBUTthQUNULENBQ0YsQ0FBQztZQUVGLE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRU8sc0JBQXNCLENBQzVCLFlBQTZCO1FBRTdCLE1BQU0sVUFBVSxHQUF3QixFQUFFLENBQUM7UUFFM0MsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQy9CLFVBQVUsQ0FBQyxJQUFJLENBQ2IsOENBQWlCLENBQUMsWUFBWSxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUM1RCxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUMvQixVQUFVLENBQUMsSUFBSSxDQUNiLDhDQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDM0QsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRU8saUJBQWlCLENBQ3ZCLFdBQW1CLEVBQ25CLFlBQTZCLEVBQzdCLE9BQW9DO1FBRXBDLE1BQU0sY0FBYyxHQUFHLElBQUksMkNBQWMsQ0FDdkMsSUFBSSxFQUNKLEdBQUcsV0FBVyxnQkFBZ0IsRUFDOUI7WUFDRSxnQkFBZ0IsRUFBRSw2Q0FBZ0IsQ0FBQyxHQUFHO1lBQ3RDLFVBQVUsRUFBRSxXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDeEUsaUJBQWlCLEVBQUUsMEJBQTBCO1lBQzdDLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVyxJQUFJLENBQUM7WUFDMUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxXQUFXLElBQUksRUFBRTtTQUM1QyxDQUNGLENBQUM7UUFFRixPQUFPLElBQUksd0RBQTJCLENBQ3BDLElBQUksRUFDSixHQUFHLFdBQVcsZUFBZSxFQUM3QjtZQUNFLGFBQWEsRUFBRSxjQUFjO1lBQzdCLGdCQUFnQixFQUNkLFlBQVksQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLE1BQU07Z0JBQzdDLENBQUMsQ0FBQyw2Q0FBZ0IsQ0FBQyxzQ0FBc0M7Z0JBQ3pELENBQUMsQ0FBQyw2Q0FBZ0IsQ0FBQyxtQ0FBbUM7WUFDMUQsV0FBVyxFQUFFLEVBQUU7WUFDZixlQUFlLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3JDLGdCQUFnQixFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUN2QyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGlCQUFpQjtRQUN2QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUM3QixJQUFJLGdCQUFnQixJQUFJLEdBQUcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxjQUFjLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdkUsT0FBTyxHQUFHLENBQUMsY0FBYyxDQUFDO1FBQzVCLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDJCQUEyQixDQUFDLEtBQXNCO1FBQ2hELEtBQUssTUFBTSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkQsSUFBSSx1QkFBUyxDQUNYLElBQUksRUFDSixHQUFHLEtBQUssQ0FBQyxXQUFXLEdBQUcsV0FBVyxtQkFBbUIsRUFDckQ7Z0JBQ0UsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsR0FBRyxXQUFXLG1CQUFtQjtnQkFDMUQsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsR0FBRyxXQUFXLG1CQUFtQjtnQkFDakUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVTtnQkFDckMsV0FBVyxFQUFFLGtDQUFrQyxXQUFXLE9BQU8sS0FBSyxDQUFDLFdBQVcsRUFBRTthQUNyRixDQUNGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLDBCQUEwQixDQUNoQyxZQUE2QjtRQUU3QixPQUFPLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQkFBZ0IsQ0FBQyxZQUE2QjtRQUNwRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0QsT0FBTyxRQUFRLEtBQUssU0FBUyxJQUFJLFFBQVEsS0FBSyxjQUFjLENBQUM7SUFDL0QsQ0FBQztJQUVEOztPQUVHO0lBQ0ssWUFBWSxDQUFDLFlBQTZCO1FBQ2hELE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLFlBQVksQ0FBQyxLQUFLLEtBQUssQ0FBQztJQUNqRSxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLHdCQUF3QixDQUFDLFNBQWlCLEVBQUUsU0FBaUI7UUFDbkUsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFNBQVMsMENBQTBDLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FDYixHQUFHLFNBQVMsd0RBQXdELFNBQVMsSUFBSSxDQUNsRixDQUFDO1FBQ0osQ0FBQztRQUNELG1GQUFtRjtRQUNuRixxRUFBcUU7UUFDckUsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxTQUFTLDJDQUEyQyxDQUFDLENBQUM7UUFDM0UsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0g7OztPQUdHO0lBQ0ssZ0NBQWdDO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDdEMsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFDLEtBQUssTUFBTSxTQUFTLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDNUIsS0FBSyxNQUFNLFlBQVksSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO3dCQUNsRSxXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDckMsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLG9CQUFvQixDQUMxQixXQUFtQixFQUNuQixZQUFxQjtRQUVyQixJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNuQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksS0FBSyxDQUNiLFlBQVksV0FBVyxxREFBcUQ7Z0JBQzFFLGdEQUFnRDtnQkFDaEQsZ0ZBQWdGO2dCQUNoRiwrRUFBK0UsQ0FDbEYsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRTFELE9BQU8sSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksV0FBVyxFQUFFLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGVBQWUsQ0FBQyxTQUE0QjtRQUNsRCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsWUFBWSxJQUFJLFVBQVUsQ0FBQztRQUMxRCxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsZUFBZSxJQUFJLFVBQVUsQ0FBQztRQUNoRSxPQUFPLEdBQUcsWUFBWSxJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRDs7O09BR0c7SUFDSyw4QkFBOEIsQ0FDcEMsWUFBNkI7UUFFN0IsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDL0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLFlBQVksSUFBSSxVQUFVLENBQUM7UUFDMUQsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLGVBQWU7WUFDL0MsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEtBQUssVUFBVTtnQkFDeEMsQ0FBQyxDQUFDLHlCQUFlLENBQUMsUUFBUTtnQkFDMUIsQ0FBQyxDQUFDLHlCQUFlLENBQUMsR0FBRztZQUN2QixDQUFDLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkMsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDL0MsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFFL0MsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLDZCQUFhLENBQ3hDLElBQUksRUFDSixHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsRUFDckQ7WUFDRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHO1lBQ3JCLFdBQVcsRUFBRSxzQkFBc0IsR0FBRyxxQkFBcUI7U0FDNUQsQ0FDRixDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3QixLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUMvQixLQUFLLE1BQU0sU0FBUyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQzt3QkFDM0MsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7NEJBQ25CLGdCQUFnQixDQUFDLGNBQWMsQ0FDN0IsY0FBSSxDQUFDLE9BQU8sRUFBRSxFQUNkLGNBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUN4QixtQ0FBbUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUNwRCxDQUFDO3dCQUNKLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLGtDQUFnQixDQUM5QixJQUFJLEVBQ0osR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsa0JBQWtCLEVBQ3JEO1lBQ0Usb0JBQW9CLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsTUFBTTtZQUN6RixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHO1lBQ3JCLFVBQVUsRUFBRTtnQkFDVixVQUFVLEVBQUUsb0JBQVUsQ0FBQyxNQUFNO2FBQzlCO1lBQ0QsYUFBYSxFQUFFLGdCQUFnQjtZQUMvQixXQUFXO1lBQ1gsV0FBVztZQUNYLFlBQVksRUFBRSxJQUFJLHNCQUFZLENBQUMsWUFBWSxDQUFDO1lBQzVDLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsa0JBQWtCLEVBQUUsNEJBQVUsQ0FBQyxLQUFLO1lBQ3BDLFlBQVksRUFBRSwyQkFBaUIsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDO1NBQzlELENBQ0YsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLElBQUksNkJBQW1CLENBQ3RDLElBQUksRUFDSixHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxxQkFBcUIsRUFDeEQ7WUFDRSxnQkFBZ0IsRUFBRSxHQUFHO1lBQ3JCLHFCQUFxQixFQUFFLElBQUk7WUFDM0Isa0NBQWtDLEVBQUUsS0FBSztTQUMxQyxDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO1FBQzlCLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQzNDLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxxQkFBcUI7UUFDM0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQjtRQUN2QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxVQUFVLENBQUMsS0FBc0I7UUFDL0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGlCQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQzFELEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixtQkFBbUIsRUFBRSwyQkFBaUIsQ0FBQyxPQUFPO1lBQzlDLDhCQUE4QixFQUFFLFlBQVk7U0FDN0MsQ0FBQyxDQUFDO1FBRUgsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLG1CQUFtQixFQUFFO1lBQzNELEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLG1CQUFtQjtZQUM1QyxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxtQkFBbUI7WUFDbkQsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVTtTQUMvQixDQUFDLENBQUM7UUFFSCxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsWUFBWSxFQUFFO1lBQ3BELEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLFlBQVk7WUFDckMsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsWUFBWTtZQUM1QyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO1lBQzlCLFdBQVcsRUFBRSx1QkFBdUIsS0FBSyxDQUFDLFdBQVcsRUFBRTtTQUN4RCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsMEdBQTBHO0lBRTFHLGVBQWUsQ0FBQyxLQUFzQjtRQUNwQyxNQUFNLHVCQUF1QixHQUFHLEdBQUcsS0FBSyxDQUFDLFdBQVcsY0FBYyxDQUFDO1FBQ25FLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBRS9CLElBQUkseUJBQXlCLEdBQzNCLHVCQUF1QixDQUFDLE1BQU0sR0FBRyxtQkFBbUI7WUFDbEQsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUM7WUFDM0QsQ0FBQyxDQUFDLHVCQUF1QixDQUFDO1FBRTlCLHlCQUF5QixHQUFHLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFekUsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxZQUFZLEtBQUssVUFBVSxDQUFDO1FBRTlELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRWhELElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksNkJBQWEsQ0FDaEQsSUFBSSxFQUNKLEdBQUcsS0FBSyxDQUFDLFdBQVcsMkJBQTJCLEVBQy9DO2dCQUNFLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUc7Z0JBQ3JCLFdBQVcsRUFBRSwwQkFBMEIsS0FBSyxDQUFDLFdBQVcsZ0JBQWdCO2FBQ3pFLENBQ0YsQ0FBQztZQUVGLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUNoRCxJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLGNBQUksQ0FBQyxNQUFNLEVBQUUsQ0FDZCxDQUFDO2dCQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUN6QyxJQUFJLENBQUMseUJBQXlCLEVBQzlCLGNBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUM1QixDQUFDO1lBQ0osQ0FBQztZQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxvREFBdUIsQ0FDN0MsSUFBSSxFQUNKLEdBQUcsS0FBSyxDQUFDLFdBQVcsY0FBYyxFQUNsQztnQkFDRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHO2dCQUNyQixjQUFjLEVBQUUsQ0FBQyxVQUFVO2dCQUMzQixhQUFhLEVBQUUsSUFBSSxDQUFDLHlCQUF5QjtnQkFDN0MsZ0JBQWdCLEVBQUUseUJBQXlCO2dCQUMzQyxVQUFVLEVBQUU7b0JBQ1YsVUFBVSxFQUFFLFVBQVU7d0JBQ3BCLENBQUMsQ0FBQyxvQkFBVSxDQUFDLG1CQUFtQjt3QkFDaEMsQ0FBQyxDQUFDLG9CQUFVLENBQUMsTUFBTTtpQkFDdEI7YUFDRixDQUNGLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxvREFBdUIsQ0FDN0MsSUFBSSxFQUNKLEdBQUcsS0FBSyxDQUFDLFdBQVcsY0FBYyxFQUNsQztnQkFDRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHO2dCQUNyQixjQUFjLEVBQUUsQ0FBQyxVQUFVO2dCQUMzQixnQkFBZ0IsRUFBRSx5QkFBeUI7Z0JBQzNDLFVBQVUsRUFBRTtvQkFDVixVQUFVLEVBQUUsVUFBVTt3QkFDcEIsQ0FBQyxDQUFDLG9CQUFVLENBQUMsbUJBQW1CO3dCQUNoQyxDQUFDLENBQUMsb0JBQVUsQ0FBQyxNQUFNO2lCQUN0QjthQUNGLENBQ0YsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcscUJBQXFCLEVBQUU7WUFDN0QsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcscUJBQXFCO1lBQzlDLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLHFCQUFxQjtZQUNyRCxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUI7U0FDN0MsQ0FBQyxDQUFDO1FBRUgsTUFBTSxZQUFZLEdBQ2hCLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQztRQUVuRSxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsaUJBQWlCLEVBQUU7WUFDekQsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsaUJBQWlCO1lBQzFDLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLGlCQUFpQjtZQUNqRCxLQUFLLEVBQUUsWUFBWTtnQkFDakIsQ0FBQyxDQUFDLFdBQVcsWUFBWSxFQUFFO2dCQUMzQixDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFO1lBQ3JELFdBQVcsRUFBRSx5QkFBeUIsS0FBSyxDQUFDLFdBQVcsRUFBRTtTQUMxRCxDQUFDLENBQUM7UUFFSCwwQ0FBMEM7UUFDMUMsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLGlCQUFpQixFQUFFO1lBQ3pELEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLGlCQUFpQjtZQUMxQyxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxpQkFBaUI7WUFDakQsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZTtZQUN4QyxXQUFXLEVBQUUseUJBQXlCLEtBQUssQ0FBQyxXQUFXLEVBQUU7U0FDMUQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHNCQUFzQixDQUFDLEtBQXNCO1FBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsT0FBTztRQUVoRSxNQUFNLGFBQWEsR0FDakIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJO1lBQ3JFLElBQUksQ0FBQztRQUVQLElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxzQkFBc0IsRUFBRTtZQUM5RCxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxzQkFBc0I7WUFDL0MsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsc0JBQXNCO1lBQ3RELEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CO1lBQ2pELFdBQVcsRUFBRSx5R0FBeUc7U0FDdkgsQ0FBQyxDQUFDO1FBRUgsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLGtCQUFrQixFQUFFO1lBQzFELEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLGtCQUFrQjtZQUMzQyxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxrQkFBa0I7WUFDbEQsS0FBSyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUM7WUFDNUIsV0FBVyxFQUFFLDZDQUE2QyxhQUFhLEVBQUU7U0FDMUUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHVCQUF1QixDQUFDLEtBQXNCO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU87UUFFL0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFekMsTUFBTSxhQUFhLEdBQUcsMkNBQWMsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFO1lBQ3RELFdBQVcsRUFBRSxZQUFZO1lBQ3pCLFdBQVcsRUFBRSxXQUFXO1NBQ3pCLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FDdkQsR0FBRyxLQUFLLENBQUMsV0FBVyxVQUFVLEVBQzlCO2dCQUNFLElBQUk7Z0JBQ0osWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDaEMsYUFBYTthQUNkLENBQ0YsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUN2RCxHQUFHLEtBQUssQ0FBQyxXQUFXLFVBQVUsRUFDOUI7Z0JBQ0UsSUFBSTtnQkFDSixhQUFhO2FBQ2QsQ0FDRixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsS0FBc0I7UUFDbEMsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUM7UUFDakQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUM7UUFFM0MsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPO1FBRTNDLE1BQU0sVUFBVSxHQUFHLFlBQVksRUFBRSxVQUFVLElBQUksWUFBYSxDQUFDO1FBRTdELElBQUksQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDOUIsTUFBTSxVQUFVLEdBQUcsSUFBSSx1QkFBZSxDQUNwQyxJQUFJLEVBQ0osR0FBRyxLQUFLLENBQUMsV0FBVyxZQUFZLEVBQ2hDO2dCQUNFLFFBQVEsRUFBRSxVQUFVO2FBQ3JCLENBQ0YsQ0FBQztZQUVGLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDdkQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNwRSxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksb0NBQVcsQ0FDaEMsSUFBSSxFQUNKLEdBQUcsS0FBSyxDQUFDLFdBQVcsYUFBYSxFQUNqQztnQkFDRSxVQUFVO2dCQUNWLFVBQVUsRUFBRSw4Q0FBcUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQzthQUMzRCxDQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixNQUFNLGFBQWEsR0FBRyxZQUFtQyxDQUFDO1lBQzFELE1BQU0sY0FBYyxHQUFHLFlBQW9DLENBQUM7WUFDNUQsTUFBTSxTQUFTLEdBQUcsWUFBdUMsQ0FBQztZQUUxRCxNQUFNLGdCQUFnQixHQUNwQixDQUFDLENBQUMsYUFBYSxFQUFFLE1BQU07Z0JBQ3ZCLGNBQWMsRUFBRSxNQUFNLEtBQUssU0FBUztnQkFDcEMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUM7WUFFM0IsSUFBSSxhQUFhLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQztZQUMvQyxJQUFJLGdCQUFnQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDO29CQUMxQixhQUFhLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDaEUsQ0FBQztxQkFBTSxJQUFJLGNBQWMsRUFBRSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ2hELGFBQWEsR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLFNBQVMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN2RSxDQUFDO3FCQUFNLElBQUksU0FBUyxFQUFFLFdBQVcsRUFBRSxDQUFDO29CQUNsQyxhQUFhLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxLQUFLLENBQUM7Z0JBQzVDLENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxxQkFBTyxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLFNBQVMsRUFBRTtvQkFDOUQsVUFBVSxFQUFFLFVBQVU7b0JBQ3RCLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVTtvQkFDckIsTUFBTSxFQUFFLDBCQUFZLENBQUMsU0FBUyxDQUM1QixJQUFJLHdDQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7d0JBQ3hDLG9CQUFvQixFQUFFLGdCQUFnQjtxQkFDdkMsQ0FBQyxDQUNIO29CQUNELE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTTtvQkFDN0IsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNO29CQUM5QixXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVc7b0JBQ25DLGFBQWEsRUFBRSxhQUFhO2lCQUM3QixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUkscUJBQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxTQUFTLEVBQUU7Z0JBQzlELFVBQVUsRUFBRSxVQUFVO2dCQUN0QixJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0JBQ3JCLE1BQU0sRUFBRSwwQkFBWSxDQUFDLFNBQVMsQ0FDNUIsSUFBSSx3Q0FBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQzFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUNWLEVBQVUsRUFDVixLQUFzQjtRQUV0QixPQUFPLENBQUMsRUFBZ0IsRUFBRSxFQUFFO1lBQzFCLE1BQU0sUUFBUSxHQUFvQjtnQkFDaEMsR0FBRyxLQUFLO2dCQUNSLEdBQUc7b0JBQ0QsR0FBRyxFQUFHLEVBQUUsQ0FBQyxVQUFVLEVBQVcsSUFBSSxLQUFLLENBQUMsR0FBRztpQkFDNUM7YUFDRixDQUFDO1lBQ0YsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXB6Q0QsNkJBb3pDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEF3c0xvZ0RyaXZlcixcbiAgQ2x1c3RlciBhcyBDZGtDbHVzdGVyLFxuICBDb250YWluZXJJbWFnZSxcbiAgRmFyZ2F0ZVNlcnZpY2UsXG4gIEZhcmdhdGVUYXNrRGVmaW5pdGlvbixcbiAgRWMyU2VydmljZSxcbiAgRWMyVGFza0RlZmluaXRpb24sXG4gIE5ldHdvcmtNb2RlLFxuICBQcm9wYWdhdGVkVGFnU291cmNlLFxuICB0eXBlIFJlcG9zaXRvcnlJbWFnZSxcbiAgdHlwZSBDb250YWluZXJEZWZpbml0aW9uLFxuICBDb250YWluZXJJbnNpZ2h0cyxcbiAgUGxhY2VtZW50U3RyYXRlZ3ksXG4gIEFzZ0NhcGFjaXR5UHJvdmlkZXIsXG4gIEVjc09wdGltaXplZEltYWdlLFxuICBBbWlIYXJkd2FyZVR5cGUsXG4gIENwdUFyY2hpdGVjdHVyZSxcbiAgT3BlcmF0aW5nU3lzdGVtRmFtaWx5LFxuICBDZm5DbHVzdGVyQ2FwYWNpdHlQcm92aWRlckFzc29jaWF0aW9uc1xufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiO1xuaW1wb3J0IHtcbiAgQ29ubmVjdGlvbnMsXG4gIHR5cGUgSUNvbm5lY3RhYmxlLFxuICB0eXBlIElTZWN1cml0eUdyb3VwLFxuICB0eXBlIElWcGMsXG4gIEluc3RhbmNlVHlwZSxcbiAgUGVlcixcbiAgUG9ydCxcbiAgU3VibmV0VHlwZVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB0eXBlIHsgSUNvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyB0eXBlIFN0YWNrQnVpbGRlciB9IGZyb20gXCIuLi9iYXNlL2F3c1N0YWNrXCI7XG5pbXBvcnQgeyBDZm5PdXRwdXQsIER1cmF0aW9uLCBBc3BlY3RzLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHR5cGUgeyBJQXNwZWN0IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICB0eXBlIEFwcGxpY2F0aW9uTGlzdGVuZXIsXG4gIEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyLFxuICBBcHBsaWNhdGlvblByb3RvY29sLFxuICB0eXBlIElBcHBsaWNhdGlvblRhcmdldEdyb3VwLFxuICBMaXN0ZW5lckFjdGlvbixcbiAgTGlzdGVuZXJDb25kaXRpb25cbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyXCI7XG5pbXBvcnQge1xuICBFZmZlY3QsXG4gIHR5cGUgSU1hbmFnZWRQb2xpY3ksXG4gIFBvbGljeSxcbiAgdHlwZSBQb2xpY3lEb2N1bWVudCxcbiAgUG9saWN5U3RhdGVtZW50LFxuICBSb2xlLFxuICBTZXJ2aWNlUHJpbmNpcGFsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQge1xuICBQcmVkZWZpbmVkTWV0cmljLFxuICBTY2FsYWJsZVRhcmdldCxcbiAgU2VydmljZU5hbWVzcGFjZSxcbiAgVGFyZ2V0VHJhY2tpbmdTY2FsaW5nUG9saWN5XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXBwbGljYXRpb25hdXRvc2NhbGluZ1wiO1xuaW1wb3J0IHsgU2VjcmV0IGFzIEVjc1NlY3JldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNzXCI7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCI7XG5pbXBvcnQgeyBTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiO1xuaW1wb3J0IHtcbiAgQ2VydGlmaWNhdGUsXG4gIENlcnRpZmljYXRlVmFsaWRhdGlvblxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgQVJlY29yZCxcbiAgUmVjb3JkVGFyZ2V0LFxuICB0eXBlIElIb3N0ZWRab25lLFxuICB0eXBlIEdlb0xvY2F0aW9uXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1M1wiO1xuaW1wb3J0IHsgTG9hZEJhbGFuY2VyVGFyZ2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzLXRhcmdldHNcIjtcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjclwiO1xuaW1wb3J0IHsgQXV0b1NjYWxpbmdHcm91cCwgTW9uaXRvcmluZyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXV0b3NjYWxpbmdcIjtcblxuaW1wb3J0IHsgSG9zdGVkWm9uZSBhcyBGamFsbEhvc3RlZFpvbmUgfSBmcm9tIFwiLi4vLi4vLi4vcGF0dGVybnMvYXdzL2hvc3RlZFpvbmVcIjtcbmltcG9ydCB7IFNlY3VyaXR5R3JvdXAgfSBmcm9tIFwiLi4vaWFtL3NlY3VyaXR5R3JvdXBcIjtcbmltcG9ydCB7IHR5cGUgQ29ubmVjdGlvblNwZWMgfSBmcm9tIFwiLi4vLi4vLi4vcGF0dGVybnMvYXdzL2ludGVyZmFjZXMvY29ubmVjdG9yLmpzXCI7XG5pbXBvcnQgeyBwcm9jZXNzQ29ubmVjdGlvbnMgfSBmcm9tIFwiLi4vLi4vLi4vcGF0dGVybnMvYXdzL2Nvbm5lY3Rpb25zLmpzXCI7XG5cbmltcG9ydCB7IHR5cGUgU2VjcmV0SW1wb3J0IH0gZnJvbSBcIi4uL3NlY3JldHNcIjtcblxuLyoqXG4gKiBJbnN0YW5jZSB0eXBlIHByZWZpeGVzIHRoYXQgdXNlIEFSTTY0IGFyY2hpdGVjdHVyZSAoR3Jhdml0b24gcHJvY2Vzc29ycykuXG4gKiBBbGwgb3RoZXIgcHJlZml4ZXMgYXJlIGFzc3VtZWQgdG8gYmUgeDg2LTY0IChTVEFOREFSRCkuXG4gKi9cbmNvbnN0IEFSTV9JTlNUQU5DRV9QUkVGSVhFUyA9IFtcbiAgXCJ0NGdcIixcbiAgXCJjNmdcIixcbiAgXCJjNmdkXCIsXG4gIFwiYzZnblwiLFxuICBcImM3Z1wiLFxuICBcImM3Z2RcIixcbiAgXCJjN2duXCIsXG4gIFwicjZnXCIsXG4gIFwicjZnZFwiLFxuICBcInI3Z1wiLFxuICBcInI3Z2RcIixcbiAgXCJtNmdcIixcbiAgXCJtNmdkXCIsXG4gIFwibTdnXCIsXG4gIFwibTdnZFwiLFxuICBcImExXCIsXG4gIFwieDJnZFwiLFxuICBcImltNGduXCIsXG4gIFwiaXM0Z2VuXCIsXG4gIFwiaTRnXCIsXG4gIFwiaHBjN2dcIlxuXTtcblxuLyoqXG4gKiBJbmZlciB0aGUgQU1JIGhhcmR3YXJlIHR5cGUgZnJvbSBhbiBFQzIgaW5zdGFuY2UgdHlwZS5cbiAqIFVzZXMgdGhlIGluc3RhbmNlIHR5cGUgcHJlZml4IHRvIGRldGVybWluZSBpZiBpdCdzIEFSTSAoR3Jhdml0b24pIG9yIHg4Ni02NC5cbiAqXG4gKiBAcGFyYW0gaW5zdGFuY2VUeXBlIC0gRUMyIGluc3RhbmNlIHR5cGUgKGUuZy4sIFwidDRnLm1pY3JvXCIsIFwidDMuc21hbGxcIilcbiAqIEByZXR1cm5zIEFtaUhhcmR3YXJlVHlwZS5BUk0gZm9yIEdyYXZpdG9uIGluc3RhbmNlcywgQW1pSGFyZHdhcmVUeXBlLlNUQU5EQVJEIGZvciBJbnRlbC9BTURcbiAqL1xuZnVuY3Rpb24gaW5mZXJBbWlIYXJkd2FyZVR5cGUoaW5zdGFuY2VUeXBlOiBzdHJpbmcpOiBBbWlIYXJkd2FyZVR5cGUge1xuICBjb25zdCBwcmVmaXggPSBpbnN0YW5jZVR5cGUuc3BsaXQoXCIuXCIpWzBdO1xuICByZXR1cm4gQVJNX0lOU1RBTkNFX1BSRUZJWEVTLmluY2x1ZGVzKHByZWZpeClcbiAgICA/IEFtaUhhcmR3YXJlVHlwZS5BUk1cbiAgICA6IEFtaUhhcmR3YXJlVHlwZS5TVEFOREFSRDtcbn1cblxuLyoqXG4gKiBDREsgQXNwZWN0IHRoYXQgZml4ZXMgY2FwYWNpdHkgcHJvdmlkZXIgZGVsZXRpb24gZGVwZW5kZW5jaWVzLlxuICpcbiAqIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBDREsgYnVnICMxNTM2NiB3aGVyZSBFQ1Mgc2VydmljZXMgZG9uJ3QgcHJvcGVybHlcbiAqIGRlcGVuZCBvbiBDZm5DbHVzdGVyQ2FwYWNpdHlQcm92aWRlckFzc29jaWF0aW9ucywgY2F1c2luZyBcImNhcGFjaXR5IHByb3ZpZGVyXG4gKiBpcyBpbiB1c2VcIiBlcnJvcnMgZHVyaW5nIHN0YWNrIGRlbGV0aW9uLlxuICpcbiAqIFRoZSBhc3BlY3QgcnVucyBhdCBzeW50aCB0aW1lICh3aGVuIGFzc29jaWF0aW9ucyBleGlzdCkgYW5kIGFkZHM6XG4gKiAtIFNlcnZpY2UgZGVwZW5kcyBvbiBDZm5DbHVzdGVyQ2FwYWNpdHlQcm92aWRlckFzc29jaWF0aW9uc1xuICpcbiAqIERFTEVURSBvcmRlciBiZWNvbWVzOiBTZXJ2aWNlcyDihpIgQXNzb2NpYXRpb25zIOKGkiBDbHVzdGVyXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzE1MzY2XG4gKi9cbmNsYXNzIENhcGFjaXR5UHJvdmlkZXJEZXBlbmRlbmN5QXNwZWN0IGltcGxlbWVudHMgSUFzcGVjdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2x1c3RlcjogQ2RrQ2x1c3RlcjtcblxuICBjb25zdHJ1Y3RvcihjbHVzdGVyOiBDZGtDbHVzdGVyKSB7XG4gICAgdGhpcy5jbHVzdGVyID0gY2x1c3RlcjtcbiAgfVxuXG4gIHZpc2l0KG5vZGU6IElDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICAvLyBGaW5kIEVDUyBzZXJ2aWNlcyB0aGF0IGJlbG9uZyB0byB0aGlzIGNsdXN0ZXJcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEZhcmdhdGVTZXJ2aWNlIHx8IG5vZGUgaW5zdGFuY2VvZiBFYzJTZXJ2aWNlKSB7XG4gICAgICAvLyBGaW5kIENmbkNsdXN0ZXJDYXBhY2l0eVByb3ZpZGVyQXNzb2NpYXRpb25zIGluIHRoZSBjbHVzdGVyJ3MgZGVzY2VuZGFudHNcbiAgICAgIGNvbnN0IGFzc29jaWF0aW9ucyA9IHRoaXMuY2x1c3Rlci5ub2RlXG4gICAgICAgIC5maW5kQWxsKClcbiAgICAgICAgLmZpbmQoXG4gICAgICAgICAgKGNoaWxkKTogY2hpbGQgaXMgQ2ZuQ2x1c3RlckNhcGFjaXR5UHJvdmlkZXJBc3NvY2lhdGlvbnMgPT5cbiAgICAgICAgICAgIGNoaWxkIGluc3RhbmNlb2YgQ2ZuQ2x1c3RlckNhcGFjaXR5UHJvdmlkZXJBc3NvY2lhdGlvbnNcbiAgICAgICAgKTtcblxuICAgICAgaWYgKGFzc29jaWF0aW9ucykge1xuICAgICAgICAvLyBBZGQgZGVwZW5kZW5jeTogU2VydmljZSDihpIgQXNzb2NpYXRpb25zXG4gICAgICAgIC8vIERFTEVURSBvcmRlcjogU2VydmljZSBkZWxldGVkIGZpcnN0LCB0aGVuIEFzc29jaWF0aW9uc1xuICAgICAgICBub2RlLm5vZGUuYWRkRGVwZW5kZW5jeShhc3NvY2lhdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZW51bSBQcm90b2NvbCB7XG4gIEhUVFAsXG4gIEhUVFBTXG59XG5cbmV4cG9ydCBlbnVtIFNjYWxpbmdUeXBlIHtcbiAgQ1BVID0gUHJlZGVmaW5lZE1ldHJpYy5FQ1NfU0VSVklDRV9BVkVSQUdFX0NQVV9VVElMSVpBVElPTixcbiAgTUVNT1JZID0gUHJlZGVmaW5lZE1ldHJpYy5FQ1NfU0VSVklDRV9BVkVSQUdFX01FTU9SWV9VVElMSVpBVElPTlxufVxuXG5leHBvcnQgdHlwZSBFY3NDYXBhY2l0eVByb3ZpZGVyID0gXCJGQVJHQVRFXCIgfCBcIkZBUkdBVEVfU1BPVFwiIHwgXCJFQzJcIjtcblxuLyoqXG4gKiBFQzIgY2FwYWNpdHkgY29uZmlndXJhdGlvbiBmb3IgRUNTIEVDMi1iYWNrZWQgY2x1c3RlcnMuXG4gKiBPbmx5IHVzZWQgd2hlbiBjYXBhY2l0eVByb3ZpZGVyIGlzIFwiRUMyXCIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWMyQ2FwYWNpdHlDb25maWcge1xuICAvKiogRUMyIGluc3RhbmNlIHR5cGUuIERlZmF1bHQ6IFwidDMubWljcm9cIiAqL1xuICBpbnN0YW5jZVR5cGU/OiBzdHJpbmc7XG4gIC8qKiBBTUkgaGFyZHdhcmUgdHlwZS4gRGVmYXVsdDogXCJBUk1cIiAoR3Jhdml0b24gLSBiZXR0ZXIgY29zdC9wZXJmb3JtYW5jZSkgKi9cbiAgYW1pSGFyZHdhcmVUeXBlPzogXCJBUk1cIiB8IFwiU1RBTkRBUkRcIjtcbiAgLyoqIE1pbmltdW0gbnVtYmVyIG9mIGluc3RhbmNlcy4gRGVmYXVsdDogMSAqL1xuICBtaW5DYXBhY2l0eT86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGluc3RhbmNlcy4gRGVmYXVsdDogMyAqL1xuICBtYXhDYXBhY2l0eT86IG51bWJlcjtcbiAgLyoqIERlc2lyZWQgbnVtYmVyIG9mIEVDMiBpbnN0YW5jZXMuIERlZmF1bHQ6IDIgKGZvciBhdmFpbGFiaWxpdHkpICovXG4gIGRlc2lyZWRDb3VudD86IG51bWJlcjtcbiAgLyoqIE1lbW9yeSBsaW1pdCBpbiBNaUIgZm9yIHRoZSBjb250YWluZXIuIERlZmF1bHQ6IDEwMjQgKi9cbiAgbWVtb3J5TGltaXRNaUI/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRG9tYWluIGNvbmZpZ3VyYXRpb24gZm9yIEhUVFBTIGFuZCBETlMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9tYWluQmFzZUNvbmZpZyB7XG4gIGRvbWFpbk5hbWU6IHN0cmluZztcbiAgaG9zdGVkWm9uZT86IEZqYWxsSG9zdGVkWm9uZTtcbiAgY2VydGlmaWNhdGU/OiBDZXJ0aWZpY2F0ZTtcbiAgc2V0SWRlbnRpZmllcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYXRlbmN5RG9tYWluQ29uZmlnIGV4dGVuZHMgRG9tYWluQmFzZUNvbmZpZyB7XG4gIHJlZ2lvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdlaWdodGVkRG9tYWluQ29uZmlnIGV4dGVuZHMgRG9tYWluQmFzZUNvbmZpZyB7XG4gIHdlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlb0xvY2F0aW9uRG9tYWluQ29uZmlnIGV4dGVuZHMgRG9tYWluQmFzZUNvbmZpZyB7XG4gIGdlb0xvY2F0aW9uOiBHZW9Mb2NhdGlvbjtcbn1cblxuZXhwb3J0IHR5cGUgRG9tYWluQ29uZmlnID1cbiAgfCBEb21haW5CYXNlQ29uZmlnXG4gIHwgTGF0ZW5jeURvbWFpbkNvbmZpZ1xuICB8IFdlaWdodGVkRG9tYWluQ29uZmlnXG4gIHwgR2VvTG9jYXRpb25Eb21haW5Db25maWc7XG5cbi8qKlxuICogSW50ZXJuYWwgY29uZmlndXJhdGlvbiBmb3IgYSBjb250YWluZXIgaW4gYSBtdWx0aS1jb250YWluZXIgRUNTIHRhc2suXG4gKlxuICogSW4gbXVsdGktY29udGFpbmVyIHRhc2tzLCB0aGUgZmlyc3QgY29udGFpbmVyIHdpdGggYSBgcG9ydGAgaXMgdGhlICoqcHJpbWFyeSBjb250YWluZXIqKlxuICogdGhhdCByZWNlaXZlcyBsb2FkIGJhbGFuY2VyIHRyYWZmaWMuIEFsbCBvdGhlciBjb250YWluZXJzIGFyZSAqKnNpZGVjYXJzKiogdGhhdCBwcm92aWRlXG4gKiBzdXBwb3J0aW5nIGZ1bmN0aW9uYWxpdHkgKGxvZ2dpbmcsIG1vbml0b3JpbmcsIHByb3hpZXMsIGV0Yy4pLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBQcmltYXJ5IGNvbnRhaW5lciAoaGFzIHBvcnQpICsgc2lkZWNhciAobm8gcG9ydClcbiAqIGNvbnRhaW5lcnM6IFtcbiAqICAgeyBuYW1lOiBcImFwcFwiLCBwb3J0OiAzMDAwIH0sICAgICAgICAgICAvLyBQcmltYXJ5IC0gcmVjZWl2ZXMgQUxCIHRyYWZmaWNcbiAqICAgeyBuYW1lOiBcImRhdGFkb2dcIiwgaW1hZ2U6IFwiZGF0YWRvZy9hZ2VudFwiIH0gIC8vIFNpZGVjYXIgLSBtb25pdG9yaW5nXG4gKiBdXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNzQ2x1c3RlckNvbnRhaW5lckNvbmZpZyB7XG4gIC8qKiBVbmlxdWUgY29udGFpbmVyIG5hbWUgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogQ29udGFpbmVyIGltYWdlLiBPcHRpb25zOlxuICAgKiAtIE9taXQ6IFVzZXMgZGVmYXVsdCBFQ1IgcmVwb3NpdG9yeSAocHJpbWFyeSBjb250YWluZXIgb25seSlcbiAgICogLSBzdHJpbmc6IEVDUiByZXBvc2l0b3J5IG5hbWUgb3IgcHVibGljIGltYWdlIFVSTFxuICAgKiAtIFJlcG9zaXRvcnk6IENESyBFQ1IgUmVwb3NpdG9yeSBjb25zdHJ1Y3RcbiAgICovXG4gIGltYWdlPzogc3RyaW5nIHwgUmVwb3NpdG9yeTtcbiAgLyoqXG4gICAqIFBvcnQgdGhlIGNvbnRhaW5lciBsaXN0ZW5zIG9uLlxuICAgKiBUaGUgZmlyc3QgY29udGFpbmVyIHdpdGggYSBwb3J0IGJlY29tZXMgdGhlICoqcHJpbWFyeSBjb250YWluZXIqKlxuICAgKiBhbmQgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBsb2FkIGJhbGFuY2VyLlxuICAgKi9cbiAgcG9ydD86IG51bWJlcjtcbiAgLyoqIEVudmlyb25tZW50IHZhcmlhYmxlcyAqL1xuICBlbnZpcm9ubWVudD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKlxuICAgKiBTZWNyZXRzIGZyb20gQVdTIFNTTSBQYXJhbWV0ZXIgU3RvcmUuXG4gICAqIEFycmF5IG9mIHNlY3JldCBuYW1lcyB0aGF0IHdpbGwgYmUgZmV0Y2hlZCBmcm9tIHRoZSBzZXJ2aWNlJ3MgU1NNIG5hbWVzcGFjZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogc2VjcmV0czogW1wiQVBJX0tFWVwiLCBcIkRCX1BBU1NXT1JEXCJdXG4gICAqL1xuICBzZWNyZXRzPzogc3RyaW5nW107XG4gIC8qKiBTZWNyZXRzIGltcG9ydGVkIGZyb20gb3RoZXIgQ0RLIHJlc291cmNlcyAoQVdTIFNlY3JldHMgTWFuYWdlcikgKi9cbiAgc2VjcmV0c0ltcG9ydD86IHsgW2tleTogc3RyaW5nXTogU2VjcmV0SW1wb3J0IH07XG4gIC8qKiBDb21tYW5kIHRvIHJ1biBpbiB0aGUgY29udGFpbmVyICovXG4gIGNvbW1hbmQ/OiBzdHJpbmdbXTtcbiAgLyoqIEVudHJ5IHBvaW50IGZvciB0aGUgY29udGFpbmVyICovXG4gIGVudHJ5UG9pbnQ/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBjb250YWluZXIgaXMgZXNzZW50aWFsLlxuICAgKiBJZiBhbiBlc3NlbnRpYWwgY29udGFpbmVyIHN0b3BzLCBhbGwgY29udGFpbmVycyBpbiB0aGUgdGFzayBzdG9wLlxuICAgKiBEZWZhdWx0OiB0cnVlIGZvciBwcmltYXJ5IGNvbnRhaW5lciwgdHJ1ZSBmb3Igc2lkZWNhcnNcbiAgICovXG4gIGVzc2VudGlhbD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBIZWFsdGggY2hlY2sgY29uZmlndXJhdGlvbi5cbiAgICogRGVmYXVsdDogRm9yIHByaW1hcnkgY29udGFpbmVyIHdpdGggcG9ydCwgdXNlcyBjdXJsIGhlYWx0aCBjaGVjay5cbiAgICovXG4gIGhlYWx0aENoZWNrPzoge1xuICAgIGNvbW1hbmQ6IHN0cmluZ1tdO1xuICAgIGludGVydmFsPzogbnVtYmVyO1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG4gICAgcmV0cmllcz86IG51bWJlcjtcbiAgICBzdGFydFBlcmlvZD86IG51bWJlcjtcbiAgfTtcbn1cblxuLyoqXG4gKiBDbHVzdGVyLWxldmVsIGNvbmZpZ3VyYXRpb24uXG4gKiBDb250cm9scyB0aGUgc2hhcmVkIEFMQiBmb3IgYWxsIHNlcnZpY2VzIGluIHRoaXMgY2x1c3Rlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY3NDbHVzdGVyQ2x1c3RlckNvbmZpZyB7XG4gIC8qKlxuICAgKiBEb21haW4gZm9yIEhUVFBTIGFjY2Vzcy5cbiAgICogLSBPbWl0OiBBTEIgY3JlYXRlZCB3aXRoIGRlZmF1bHQgRE5TICgqLmVsYi5hbWF6b25hd3MuY29tKVxuICAgKiAtIFNwZWNpZmllZDogQ3JlYXRlcyBBQ00gY2VydGlmaWNhdGUgKyBSb3V0ZTUzIEROUyBBIHJlY29yZFxuICAgKi9cbiAgZG9tYWluPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMb2FkIGJhbGFuY2VyIGNvbmZpZ3VyYXRpb24uXG4gICAqIC0gZmFsc2U6IE5vIEFMQiAoZm9yIHdvcmtlcnMvaW50ZXJuYWwgc2VydmljZXMpXG4gICAqIC0gXCJwdWJsaWNcIjogSW50ZXJuZXQtZmFjaW5nIEFMQiAoZGVmYXVsdClcbiAgICogLSBcImludGVybmFsXCI6IFZQQy1vbmx5IEFMQlxuICAgKi9cbiAgbG9hZEJhbGFuY2VyPzogZmFsc2UgfCBcInB1YmxpY1wiIHwgXCJpbnRlcm5hbFwiO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgZGlyZWN0IEVDMiBhY2Nlc3Mgd2l0aG91dCBBTEIuXG4gICAqIE9wZW5zIGNvbnRhaW5lciBwb3J0cyBvbiBzZWN1cml0eSBncm91cCBmb3IgZGlyZWN0IGFjY2VzcyB2aWEgRUMyIHB1YmxpYyBJUC5cbiAgICogVXNlcyBob3N0IG5ldHdvcmsgbW9kZSBmb3IgcHJlZGljdGFibGUgcG9ydCBtYXBwaW5nIChjb250YWluZXI6MzAwMCDihpIgaG9zdDozMDAwKS5cbiAgICogT25seSB2YWxpZCB3aXRoIEVDMiBjYXBhY2l0eSBwcm92aWRlci5cbiAgICovXG4gIGRpcmVjdEFjY2Vzcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERvbWFpbiBjb25maWd1cmF0aW9uIGZvciBhZHZhbmNlZCByb3V0aW5nIHBvbGljaWVzIChsYXRlbmN5LCB3ZWlnaHRlZCwgZ2VvKS5cbiAgICogT25seSB1c2VkIHdoZW4gZG9tYWluIGlzIHNwZWNpZmllZC5cbiAgICovXG4gIGRvbWFpbkNvbmZpZz86IERvbWFpbkNvbmZpZztcbn1cblxuLyoqXG4gKiBSb3V0aW5nIGNvbmZpZ3VyYXRpb24gZm9yIHBhdGgvaG9zdC1iYXNlZCByb3V0aW5nIG9uIHRoZSBBTEIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNzUm91dGluZ0NvbmZpZyB7XG4gIC8qKiBQYXRoIHBhdHRlcm4gZm9yIHJvdXRpbmcgKGUuZy4sIFwiL2FwaS8qXCIsIFwiL3VzZXJzLypcIikgKi9cbiAgcGF0aD86IHN0cmluZztcbiAgLyoqIEhvc3QgaGVhZGVyIGZvciByb3V0aW5nIChlLmcuLCBcImFwaS5leGFtcGxlLmNvbVwiKSAqL1xuICBob3N0Pzogc3RyaW5nO1xuICAvKiogUHJpb3JpdHkgZm9yIHRoaXMgcm91dGluZyBydWxlICgxLTUwMDAwKS4gTG93ZXIgPSBoaWdoZXIgcHJpb3JpdHkuICovXG4gIHByaW9yaXR5PzogbnVtYmVyO1xuICAvKiogSGVhbHRoIGNoZWNrIHBhdGggZm9yIHRoaXMgc2VydmljZSdzIHRhcmdldCBncm91cC4gRGVmYXVsdDogXCIvXCIgKi9cbiAgaGVhbHRoQ2hlY2tQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGEgc2VydmljZSBpbiBhbiBFQ1MgY2x1c3Rlci5cbiAqIEVhY2ggc2VydmljZSBnZXRzIGl0cyBvd24gdGFzayBkZWZpbml0aW9uLCBzY2FsaW5nLCBhbmQgdGFyZ2V0IGdyb3VwLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjc1NlcnZpY2VQcm9wcyB7XG4gIC8qKiBTZXJ2aWNlIG5hbWUgKHVuaXF1ZSB3aXRoaW4gY2x1c3RlcikgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb250YWluZXIgaW1hZ2UgZm9yIHRoaXMgc2VydmljZS5cbiAgICogLSBPbWl0OiBVc2VzIGNsdXN0ZXIncyBkZWZhdWx0IEVDUiByZXBvc2l0b3J5XG4gICAqIC0gc3RyaW5nOiBFQ1IgcmVwb3NpdG9yeSBuYW1lIG9yIHB1YmxpYyBpbWFnZSBVUkxcbiAgICogLSBSZXBvc2l0b3J5OiBDREsgRUNSIFJlcG9zaXRvcnkgY29uc3RydWN0XG4gICAqL1xuICBpbWFnZT86IHN0cmluZyB8IFJlcG9zaXRvcnk7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lciBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBzZXJ2aWNlLlxuICAgKiBUaGUgZmlyc3QgY29udGFpbmVyIHdpdGggYSBwb3J0IGlzIHRoZSAqKnByaW1hcnkgY29udGFpbmVyKiogKHJlY2VpdmVzIEFMQiB0cmFmZmljKS5cbiAgICovXG4gIGNvbnRhaW5lcnM6IEVjc0NsdXN0ZXJDb250YWluZXJDb25maWdbXTtcblxuICAvKiogQ1BVIHVuaXRzIGZvciB0aGlzIHNlcnZpY2UncyB0YXNrcyAoMjU2LTQwOTYpICovXG4gIGNwdT86IG51bWJlcjtcblxuICAvKiogTWVtb3J5IGluIE1pQiBmb3IgdGhpcyBzZXJ2aWNlJ3MgdGFza3MgKDUxMi0zMDcyMCkgKi9cbiAgbWVtb3J5TGltaXRNaUI/OiBudW1iZXI7XG5cbiAgLyoqIERlc2lyZWQgbnVtYmVyIG9mIHRhc2tzLiBEZWZhdWx0OiAyICovXG4gIGRlc2lyZWRDb3VudD86IG51bWJlcjtcblxuICAvKiogU2NhbGluZyB0eXBlIChDUFUgb3IgTUVNT1JZKS4gT21pdCB0byBkaXNhYmxlIGF1dG8tc2NhbGluZy4gKi9cbiAgc2NhbGluZ1R5cGU/OiBTY2FsaW5nVHlwZTtcblxuICAvKiogTWluaW11bSBudW1iZXIgb2YgdGFza3MgZm9yIGF1dG8tc2NhbGluZy4gRGVmYXVsdDogMiAqL1xuICBtaW5DYXBhY2l0eT86IG51bWJlcjtcblxuICAvKiogTWF4aW11bSBudW1iZXIgb2YgdGFza3MgZm9yIGF1dG8tc2NhbGluZy4gRGVmYXVsdDogMTAgKi9cbiAgbWF4Q2FwYWNpdHk/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJvdXRpbmcgcnVsZXMgZm9yIHRoaXMgc2VydmljZSBvbiB0aGUgY2x1c3RlcidzIEFMQi5cbiAgICogUmVxdWlyZWQgd2hlbiBjbHVzdGVyIGhhcyBtdWx0aXBsZSBzZXJ2aWNlcyB3aXRoIHBvcnRzLlxuICAgKi9cbiAgcm91dGluZz86IEVjc1JvdXRpbmdDb25maWc7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgaW5saW5lIHBvbGljaWVzIGZvciB0aGlzIHNlcnZpY2UncyB0YXNrIHJvbGUuXG4gICAqIEFkZGVkIG9uIHRvcCBvZiB0aGUgZGVmYXVsdCBFQ1MgRXhlYyBwZXJtaXNzaW9ucy5cbiAgICovXG4gIHRhc2tSb2xlSW5saW5lUG9saWNpZXM/OiB7XG4gICAgW25hbWU6IHN0cmluZ106IFBvbGljeURvY3VtZW50O1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIG1hbmFnZWQgcG9saWNpZXMgZm9yIHRoaXMgc2VydmljZSdzIHRhc2sgcm9sZS5cbiAgICogQWRkZWQgb24gdG9wIG9mIHRoZSBkZWZhdWx0IEVDUyBFeGVjIHBlcm1pc3Npb25zLlxuICAgKi9cbiAgdGFza1JvbGVNYW5hZ2VkUG9saWNpZXM/OiBJTWFuYWdlZFBvbGljeVtdO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZXMgdGhpcyBzZXJ2aWNlIG5lZWRzIHRvIGNvbm5lY3QgdG8gKGUuZy4sIGRhdGFiYXNlcywgUzMgYnVja2V0cywgU1FTIHF1ZXVlcykuXG4gICAqIENyZWF0ZXMgc2VjdXJpdHkgZ3JvdXAgcnVsZXMgZm9yIElDb25uZWN0YWJsZSByZXNvdXJjZXMgYW5kIElBTSBncmFudHMgZm9yIElBTSByZXNvdXJjZXMuXG4gICAqXG4gICAqIFN1cHBvcnRzOlxuICAgKiAtIElDb25uZWN0YWJsZTogU2VjdXJpdHkgZ3JvdXAgcmVzb3VyY2VzIChSRFMsIEVDUywgZXRjLilcbiAgICogLSBJU3RvcmFnZUNvbm5lY3RvcjogUzMgYnVja2V0cyAoSUFNIGdyYW50cylcbiAgICogLSBJRHluYW1vREJDb25uZWN0b3I6IER5bmFtb0RCIHRhYmxlcyAoSUFNIGdyYW50cylcbiAgICogLSBJUXVldWVDb25uZWN0b3I6IFNRUyBxdWV1ZXMgKElBTSBncmFudHMpXG4gICAqIC0gQ29ubmVjdGlvbkNvbmZpZzogRXhwbGljaXQgYWNjZXNzIGxldmVsIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29ubmVjdGlvbnM6IFtcbiAgICogICBkYXRhYmFzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWN1cml0eSBncm91cCAoUkRTKVxuICAgKiAgIHsgcmVzb3VyY2U6IGNhY2hlLCBhY2Nlc3M6IFwicmVhZFwiIH0sICAgLy8gUmVhZC1vbmx5IER5bmFtb0RCXG4gICAqICAgeyByZXNvdXJjZTogYnVja2V0LCBhY2Nlc3M6IFwid3JpdGVcIiB9LCAvLyBXcml0ZS1vbmx5IFMzXG4gICAqICAgeyByZXNvdXJjZTogcXVldWUsIGFjY2VzczogXCJjb25zdW1lXCIgfSAvLyBDb25zdW1lLW9ubHkgU1FTXG4gICAqIF1cbiAgICovXG4gIGNvbm5lY3Rpb25zPzogQ29ubmVjdGlvblNwZWNbXTtcblxuICAvKipcbiAgICogQ2FwYWNpdHkgcHJvdmlkZXIgZm9yIHRoaXMgc2VydmljZS4gUkVRVUlSRUQuXG4gICAqIEVhY2ggc2VydmljZSBzcGVjaWZpZXMgaXRzIG93biBjYXBhY2l0eSBwcm92aWRlci5cbiAgICovXG4gIGNhcGFjaXR5UHJvdmlkZXI6IEVjc0NhcGFjaXR5UHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIEVDMiBjYXBhY2l0eSBjb25maWd1cmF0aW9uIGZvciB0aGlzIHNlcnZpY2UuXG4gICAqIE9ubHkgdXNlZCB3aGVuIHNlcnZpY2UgY2FwYWNpdHlQcm92aWRlciBpcyBcIkVDMlwiLlxuICAgKiBTZXJ2aWNlcyB3aXRoIG1hdGNoaW5nIGVjMkNvbmZpZyBzaGFyZSBhbiBBU0cgZm9yIGVmZmljaWVuY3kuXG4gICAqL1xuICBlYzJDb25maWc/OiBFYzJDYXBhY2l0eUNvbmZpZztcblxuICAvKipcbiAgICogU1NNIFBhcmFtZXRlciBTdG9yZSBwYXRoIGZvciBzZWNyZXRzLlxuICAgKiBJZiBjb250YWluZXJzIGhhdmUgc2VjcmV0cyBkZWZpbmVkLCB0aGlzIHBhdGggaXMgdXNlZCBhcyB0aGUgYmFzZSBwYXRoLlxuICAgKiBGb3JtYXQ6IC88YXBwPi88Y2x1c3Rlcj4vPHNlcnZpY2U+XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHNzbVNlY3JldHNQYXRoOiBcIi9teWFwcC9hcGktY2x1c3Rlci91c2Vyc1wiXG4gICAqL1xuICBzc21TZWNyZXRzUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogRG9ja2VyIGJ1aWxkIHRhcmdldCBzdGFnZSBmb3IgbXVsdGktc3RhZ2UgRG9ja2VyZmlsZXMuXG4gICAqIFdoZW4gc3BlY2lmaWVkLCBhcHBlbmRzIGAtPHRhcmdldD5gIHRvIHRoZSBpbWFnZSB0YWcuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIFdpdGggZG9ja2VyVGFyZ2V0OiBcImFwaVwiLCBpbWFnZSB0YWcgYmVjb21lczogbXlzZXJ2aWNlLWFwaS1sYXRlc3RcbiAgICogZG9ja2VyVGFyZ2V0OiBcImFwaVwiXG4gICAqL1xuICBkb2NrZXJUYXJnZXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIGNyZWF0aW5nIGFuIEVDUyBjbHVzdGVyIHdpdGggbXVsdGlwbGUgc2VydmljZXMuXG4gKi9cbmV4cG9ydCB0eXBlIEVjc0NsdXN0ZXJQcm9wcyA9IHtcbiAgLyoqIENsdXN0ZXIgbmFtZSAqL1xuICBjbHVzdGVyTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBcHBsaWNhdGlvbiBuYW1lIGZvciBTU00gc2VjcmV0cyBuYW1lc3BhY2UuXG4gICAqIFJlcXVpcmVkIHdoZW4gYW55IGNvbnRhaW5lciB1c2VzIHNlY3JldHMgd2l0aG91dCBleHBsaWNpdCBzc21TZWNyZXRzUGF0aC5cbiAgICogVXNlZCB0byBidWlsZCB0aGUgcGF0aDogLzxhcHBOYW1lPi88Y2x1c3Rlck5hbWU+LzxzZXJ2aWNlTmFtZT5cbiAgICovXG4gIGFwcE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIFZQQyB0byBkZXBsb3kgaW50byAqL1xuICB2cGM/OiBJVnBjO1xuXG4gIC8qKiBEZWZhdWx0IEVDUiByZXBvc2l0b3J5IG9yIGNvbnRhaW5lciBpbWFnZSAqL1xuICBlY3JSZXBvc2l0b3J5OiBSZXBvc2l0b3J5IHwgUmVwb3NpdG9yeUltYWdlIHwgc3RyaW5nO1xuXG4gIC8vIE5vdGU6IGNhcGFjaXR5UHJvdmlkZXIgYW5kIGVjMkNvbmZpZyBhcmUgcGVyLXNlcnZpY2Ugb25seSAoaW4gRWNzU2VydmljZVByb3BzKVxuXG4gIC8qKlxuICAgKiBDbHVzdGVyIGNvbmZpZ3VyYXRpb24uXG4gICAqIENvbnRyb2xzIHRoZSBzaGFyZWQgQUxCIGZvciBhbGwgc2VydmljZXMuXG4gICAqL1xuICBjbHVzdGVyPzogRWNzQ2x1c3RlckNsdXN0ZXJDb25maWc7XG5cbiAgLyoqXG4gICAqIFNlcnZpY2VzIGluIHRoaXMgY2x1c3Rlci5cbiAgICogRWFjaCBzZXJ2aWNlIGdldHMgaXRzIG93biB0YXNrIGRlZmluaXRpb24sIHNjYWxpbmcsIGFuZCB0YXJnZXQgZ3JvdXAuXG4gICAqIEVhY2ggc2VydmljZSBNVVNUIHNwZWNpZnkgaXRzIG93biBjYXBhY2l0eVByb3ZpZGVyLlxuICAgKiBBbGwgc2VydmljZXMgc2hhcmUgdGhlIGNsdXN0ZXIncyBBTEIgKHVubGVzcyBkaXNhYmxlZCkuXG4gICAqIFRhc2sgcm9sZSBwb2xpY2llcyBhcmUgY29uZmlndXJlZCBwZXItc2VydmljZSBmb3IgbGVhc3QtcHJpdmlsZWdlLlxuICAgKi9cbiAgc2VydmljZXM6IEVjc1NlcnZpY2VQcm9wc1tdO1xufTtcblxuLyoqXG4gKiBEYXRhIHRyYWNrZWQgZm9yIGVhY2ggc2VydmljZSBpbiB0aGUgY2x1c3Rlci5cbiAqL1xuaW50ZXJmYWNlIFNlcnZpY2VEYXRhIHtcbiAgc2VydmljZTogRmFyZ2F0ZVNlcnZpY2UgfCBFYzJTZXJ2aWNlO1xuICB0YXNrRGVmaW5pdGlvbjogRmFyZ2F0ZVRhc2tEZWZpbml0aW9uIHwgRWMyVGFza0RlZmluaXRpb247XG4gIC8qKiBSb2xlIGZvciBFQ1MgYWdlbnQgKHB1bGwgaW1hZ2VzLCB3cml0ZSBsb2dzLCBpbmplY3Qgc2VjcmV0cykgKi9cbiAgZXhlY3V0aW9uUm9sZTogUm9sZTtcbiAgLyoqIFJvbGUgZm9yIGFwcGxpY2F0aW9uIGNvZGUgKHVzZXIgcG9saWNpZXMsIEVDUyBFeGVjKSAqL1xuICB0YXNrUm9sZTogUm9sZTtcbiAgY29udGFpbmVyczogQ29udGFpbmVyRGVmaW5pdGlvbltdO1xuICBwcmltYXJ5Q29udGFpbmVyPzogQ29udGFpbmVyRGVmaW5pdGlvbjtcbiAgdGFyZ2V0R3JvdXA/OiBJQXBwbGljYXRpb25UYXJnZXRHcm91cDtcbiAgc2NhbGluZ1BvbGljeT86IFRhcmdldFRyYWNraW5nU2NhbGluZ1BvbGljeTtcbn1cblxuLyoqXG4gKiBFQ1MgQ2x1c3RlciBzdXBwb3J0aW5nIG11bHRpcGxlIHNlcnZpY2VzIHdpdGggYSBzaGFyZWQgQUxCLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTaW5nbGUgc2VydmljZSBjbHVzdGVyXG4gKiBuZXcgRWNzQ2x1c3RlcihzY29wZSwgXCJXZWJDbHVzdGVyXCIsIHtcbiAqICAgY2x1c3Rlck5hbWU6IFwiV2ViQ2x1c3RlclwiLFxuICogICBlY3JSZXBvc2l0b3J5OiBlY3IsXG4gKiAgIHNlcnZpY2VzOiBbXG4gKiAgICAgeyBuYW1lOiBcIndlYlwiLCBjb250YWluZXJzOiBbeyBuYW1lOiBcImFwcFwiLCBwb3J0OiAzMDAwIH1dIH1cbiAqICAgXVxuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE11bHRpLXNlcnZpY2UgY2x1c3RlciB3aXRoIHJvdXRpbmdcbiAqIG5ldyBFY3NDbHVzdGVyKHNjb3BlLCBcIkFwaUNsdXN0ZXJcIiwge1xuICogICBjbHVzdGVyTmFtZTogXCJBcGlDbHVzdGVyXCIsXG4gKiAgIGNsdXN0ZXI6IHsgZG9tYWluOiBcImFwaS5leGFtcGxlLmNvbVwiIH0sXG4gKiAgIGVjclJlcG9zaXRvcnk6IGVjcixcbiAqICAgc2VydmljZXM6IFtcbiAqICAgICB7IG5hbWU6IFwidXNlcnNcIiwgY29udGFpbmVyczogW3sgbmFtZTogXCJhcHBcIiwgcG9ydDogMzAwMCB9XSwgcm91dGluZzogeyBwYXRoOiBcIi91c2Vycy8qXCIgfSB9LFxuICogICAgIHsgbmFtZTogXCJvcmRlcnNcIiwgY29udGFpbmVyczogW3sgbmFtZTogXCJhcHBcIiwgcG9ydDogMzAwMSB9XSwgcm91dGluZzogeyBwYXRoOiBcIi9vcmRlcnMvKlwiIH0gfVxuICogICBdXG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV29ya2VyIGNsdXN0ZXIgKG5vIEFMQilcbiAqIG5ldyBFY3NDbHVzdGVyKHNjb3BlLCBcIldvcmtlcnNcIiwge1xuICogICBjbHVzdGVyTmFtZTogXCJXb3JrZXJzXCIsXG4gKiAgIGNsdXN0ZXI6IHsgbG9hZEJhbGFuY2VyOiBmYWxzZSB9LFxuICogICBlY3JSZXBvc2l0b3J5OiBlY3IsXG4gKiAgIHNlcnZpY2VzOiBbXG4gKiAgICAgeyBuYW1lOiBcInByb2Nlc3NvclwiLCBjb250YWluZXJzOiBbeyBuYW1lOiBcIndvcmtlclwiIH1dIH1cbiAqICAgXVxuICogfSk7XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVjc0NsdXN0ZXIgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJQ29ubmVjdGFibGUge1xuICBwdWJsaWMgY29ubmVjdGlvbnMhOiBDb25uZWN0aW9ucztcblxuICAvLyBDbHVzdGVyLWxldmVsIHJlc291cmNlc1xuICBwcml2YXRlIGNsdXN0ZXIhOiBDZGtDbHVzdGVyO1xuICBwcml2YXRlIGxvYWRCYWxhbmNlcj86IEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyO1xuICBwcml2YXRlIGxvYWRCYWxhbmNlckxpc3RlbmVyPzogQXBwbGljYXRpb25MaXN0ZW5lcjtcbiAgcHJpdmF0ZSBob3N0ZWRab25lPzogSUhvc3RlZFpvbmU7XG4gIHByaXZhdGUgY2VydGlmaWNhdGU/OiBDZXJ0aWZpY2F0ZTtcbiAgcHJpdmF0ZSBhUmVjb3JkPzogQVJlY29yZDtcblxuICAvLyBFQzItc3BlY2lmaWNcbiAgcHJpdmF0ZSBhdXRvU2NhbGluZ0dyb3VwPzogQXV0b1NjYWxpbmdHcm91cDtcbiAgcHJpdmF0ZSBhc2dTZWN1cml0eUdyb3VwPzogU2VjdXJpdHlHcm91cDtcbiAgcHJpdmF0ZSBhc2dDYXBhY2l0eVByb3ZpZGVyPzogQXNnQ2FwYWNpdHlQcm92aWRlcjtcbiAgcHJpdmF0ZSBsb2FkQmFsYW5jZXJTZWN1cml0eUdyb3VwPzogU2VjdXJpdHlHcm91cDtcblxuICAvLyBQZXItc2VydmljZSB0cmFja2luZ1xuICBwcml2YXRlIHNlcnZpY2VzID0gbmV3IE1hcDxzdHJpbmcsIFNlcnZpY2VEYXRhPigpO1xuXG4gIC8vIFBlci1zZXJ2aWNlIEFTRyBjYXBhY2l0eSBwcm92aWRlcnMgKGtleWVkIGJ5IEVDMiBjb25maWcgc2lnbmF0dXJlKVxuICBwcml2YXRlIGFzZ0NhcGFjaXR5UHJvdmlkZXJzID0gbmV3IE1hcDxzdHJpbmcsIEFzZ0NhcGFjaXR5UHJvdmlkZXI+KCk7XG5cbiAgLy8gQ29uZmlndXJhdGlvblxuICBwcml2YXRlIHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIHByaXZhdGUgcHJvcHM6IEVjc0NsdXN0ZXJQcm9wcztcbiAgcHJpdmF0ZSBsb2FkQmFsYW5jZXJEaXNhYmxlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBkaXJlY3RBY2Nlc3NFbmFibGVkOiBib29sZWFuO1xuICBwcml2YXRlIG5leHRQcmlvcml0eSA9IDEwMDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRWNzQ2x1c3RlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5kaXJlY3RBY2Nlc3NFbmFibGVkID0gcHJvcHMuY2x1c3Rlcj8uZGlyZWN0QWNjZXNzID09PSB0cnVlO1xuICAgIHRoaXMubG9hZEJhbGFuY2VyRGlzYWJsZWQgPVxuICAgICAgcHJvcHMuY2x1c3Rlcj8ubG9hZEJhbGFuY2VyID09PSBmYWxzZSB8fCB0aGlzLmRpcmVjdEFjY2Vzc0VuYWJsZWQ7XG5cbiAgICB0aGlzLnZhbGlkYXRlUHJvcHMocHJvcHMpO1xuXG4gICAgdGhpcy5hZGRDbHVzdGVyKHByb3BzKTtcblxuICAgIGZvciAoY29uc3Qgc2VydmljZVByb3BzIG9mIHByb3BzLnNlcnZpY2VzKSB7XG4gICAgICBpZiAoc2VydmljZVByb3BzLmNhcGFjaXR5UHJvdmlkZXIgPT09IFwiRUMyXCIpIHtcbiAgICAgICAgdGhpcy5nZXRPckNyZWF0ZUFzZ0NhcGFjaXR5UHJvdmlkZXIoc2VydmljZVByb3BzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubG9hZEJhbGFuY2VyRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuYWRkTG9hZEJhbGFuY2VyKHByb3BzKTtcblxuICAgICAgaWYgKHByb3BzLmNsdXN0ZXI/LmRvbWFpbiB8fCBwcm9wcy5jbHVzdGVyPy5kb21haW5Db25maWcpIHtcbiAgICAgICAgdGhpcy5hZGRIb3N0ZWRab25lKHByb3BzKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hZGRMb2FkQmFsYW5jZXJMaXN0ZW5lcihwcm9wcyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRpcmVjdEFjY2Vzc0VuYWJsZWQpIHtcbiAgICAgIHRoaXMuYWRkRGlyZWN0QWNjZXNzT3V0cHV0cyhwcm9wcyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzZXJ2aWNlUHJvcHMgb2YgcHJvcHMuc2VydmljZXMpIHtcbiAgICAgIHRoaXMuYWRkU2VydmljZVRvQ2x1c3RlcihzZXJ2aWNlUHJvcHMpO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVwbG95YWJsZVNlcnZpY2VPdXRwdXRzKHByb3BzKTtcblxuICAgIHRoaXMuc2V0dXBDb25uZWN0aW9ucyhwcm9wcyk7XG5cbiAgICBBc3BlY3RzLm9mKHRoaXMpLmFkZChuZXcgQ2FwYWNpdHlQcm92aWRlckRlcGVuZGVuY3lBc3BlY3QodGhpcy5jbHVzdGVyKSk7XG4gIH1cblxuICAvKiogR2V0IHRoZSBjbHVzdGVyJ3MgbG9hZCBiYWxhbmNlci4gVW5kZWZpbmVkIGlmIGRpc2FibGVkLiAqL1xuICBnZXRMb2FkQmFsYW5jZXIoKTogQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxvYWRCYWxhbmNlcjtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIGxvYWQgYmFsYW5jZXIncyBsaXN0ZW5lci4gVW5kZWZpbmVkIGlmIGRpc2FibGVkLiAqL1xuICBnZXRMaXN0ZW5lcigpOiBBcHBsaWNhdGlvbkxpc3RlbmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkQmFsYW5jZXJMaXN0ZW5lcjtcbiAgfVxuXG4gIC8qKiBHZXQgYSBzcGVjaWZpYyBzZXJ2aWNlIGJ5IG5hbWUuICovXG4gIGdldFNlcnZpY2UobmFtZTogc3RyaW5nKTogRmFyZ2F0ZVNlcnZpY2UgfCBFYzJTZXJ2aWNlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlcy5nZXQobmFtZSk/LnNlcnZpY2U7XG4gIH1cblxuICAvKiogR2V0IGFsbCBzZXJ2aWNlcyBpbiB0aGlzIGNsdXN0ZXIuICovXG4gIGdldFNlcnZpY2VzKCk6IE1hcDxzdHJpbmcsIEZhcmdhdGVTZXJ2aWNlIHwgRWMyU2VydmljZT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8c3RyaW5nLCBGYXJnYXRlU2VydmljZSB8IEVjMlNlcnZpY2U+KCk7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgZGF0YV0gb2YgdGhpcy5zZXJ2aWNlcykge1xuICAgICAgcmVzdWx0LnNldChuYW1lLCBkYXRhLnNlcnZpY2UpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqIEdldCB0aGUgRUNTIGNsdXN0ZXIgY29uc3RydWN0LiAqL1xuICBnZXRDbHVzdGVyKCk6IENka0NsdXN0ZXIge1xuICAgIHJldHVybiB0aGlzLmNsdXN0ZXI7XG4gIH1cblxuICAvKiogR2V0IHRoZSBBTEIgVVJMIChodHRwOi8vIG9yIGh0dHBzOi8vKS4gKi9cbiAgZ2V0VXJsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLmxvYWRCYWxhbmNlcikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBjdXN0b21Eb21haW4gPVxuICAgICAgdGhpcy5wcm9wcy5jbHVzdGVyPy5kb21haW4gfHxcbiAgICAgIHRoaXMucHJvcHMuY2x1c3Rlcj8uZG9tYWluQ29uZmlnPy5kb21haW5OYW1lO1xuICAgIGlmIChjdXN0b21Eb21haW4pIHJldHVybiBgaHR0cHM6Ly8ke2N1c3RvbURvbWFpbn1gO1xuICAgIHJldHVybiBgaHR0cDovLyR7dGhpcy5sb2FkQmFsYW5jZXIubG9hZEJhbGFuY2VyRG5zTmFtZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNlcnZpY2UgdG8gdGhlIGNsdXN0ZXIuXG4gICAqIEVhY2ggc2VydmljZSBnZXRzIGl0cyBvd24gdGFzayBkZWZpbml0aW9uLCBjb250YWluZXJzLCBhbmQgdGFyZ2V0IGdyb3VwLlxuICAgKi9cbiAgcHJpdmF0ZSBhZGRTZXJ2aWNlVG9DbHVzdGVyKHNlcnZpY2VQcm9wczogRWNzU2VydmljZVByb3BzKTogdm9pZCB7XG4gICAgY29uc3Qgc2VydmljZU5hbWUgPSBzZXJ2aWNlUHJvcHMubmFtZTtcblxuICAgIGNvbnN0IGV4ZWN1dGlvblJvbGUgPSB0aGlzLmNyZWF0ZUV4ZWN1dGlvblJvbGUoc2VydmljZU5hbWUpO1xuICAgIGNvbnN0IHRhc2tSb2xlID0gdGhpcy5jcmVhdGVUYXNrUm9sZShzZXJ2aWNlTmFtZSwgc2VydmljZVByb3BzKTtcblxuICAgIGNvbnN0IHRhc2tEZWZpbml0aW9uID0gdGhpcy5jcmVhdGVUYXNrRGVmaW5pdGlvbihcbiAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgc2VydmljZVByb3BzLFxuICAgICAgZXhlY3V0aW9uUm9sZSxcbiAgICAgIHRhc2tSb2xlXG4gICAgKTtcblxuICAgIGNvbnN0IHsgY29udGFpbmVycywgcHJpbWFyeUNvbnRhaW5lciB9ID0gdGhpcy5hZGRDb250YWluZXJzVG9UYXNrKFxuICAgICAgc2VydmljZU5hbWUsXG4gICAgICBzZXJ2aWNlUHJvcHMsXG4gICAgICB0YXNrRGVmaW5pdGlvblxuICAgICk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5jcmVhdGVTZXJ2aWNlKFxuICAgICAgc2VydmljZU5hbWUsXG4gICAgICBzZXJ2aWNlUHJvcHMsXG4gICAgICB0YXNrRGVmaW5pdGlvblxuICAgICk7XG5cbiAgICBsZXQgdGFyZ2V0R3JvdXA6IElBcHBsaWNhdGlvblRhcmdldEdyb3VwIHwgdW5kZWZpbmVkO1xuICAgIGlmIChcbiAgICAgICF0aGlzLmxvYWRCYWxhbmNlckRpc2FibGVkICYmXG4gICAgICBwcmltYXJ5Q29udGFpbmVyICYmXG4gICAgICB0aGlzLmxvYWRCYWxhbmNlckxpc3RlbmVyXG4gICAgKSB7XG4gICAgICB0YXJnZXRHcm91cCA9IHRoaXMucmVnaXN0ZXJTZXJ2aWNlV2l0aEFMQihcbiAgICAgICAgc2VydmljZU5hbWUsXG4gICAgICAgIHNlcnZpY2VQcm9wcyxcbiAgICAgICAgc2VydmljZSxcbiAgICAgICAgcHJpbWFyeUNvbnRhaW5lclxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgc2NhbGluZ1BvbGljeTogVGFyZ2V0VHJhY2tpbmdTY2FsaW5nUG9saWN5IHwgdW5kZWZpbmVkO1xuICAgIGlmIChzZXJ2aWNlUHJvcHMuc2NhbGluZ1R5cGUpIHtcbiAgICAgIHNjYWxpbmdQb2xpY3kgPSB0aGlzLmFkZFNlcnZpY2VTY2FsaW5nKFxuICAgICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgICAgc2VydmljZVByb3BzLFxuICAgICAgICBzZXJ2aWNlXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuc2VydmljZXMuc2V0KHNlcnZpY2VOYW1lLCB7XG4gICAgICBzZXJ2aWNlLFxuICAgICAgdGFza0RlZmluaXRpb24sXG4gICAgICBleGVjdXRpb25Sb2xlLFxuICAgICAgdGFza1JvbGUsXG4gICAgICBjb250YWluZXJzLFxuICAgICAgcHJpbWFyeUNvbnRhaW5lcixcbiAgICAgIHRhcmdldEdyb3VwLFxuICAgICAgc2NhbGluZ1BvbGljeVxuICAgIH0pO1xuXG4gICAgaWYgKHNlcnZpY2VQcm9wcy5jb25uZWN0aW9ucyAmJiBzZXJ2aWNlUHJvcHMuY29ubmVjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJvY2Vzc0Nvbm5lY3Rpb25zKFxuICAgICAgICAgIHNlcnZpY2VQcm9wcy5jb25uZWN0aW9ucyxcbiAgICAgICAgICB0YXNrUm9sZSwgLy8gSUdyYW50YWJsZSAodGFzayByb2xlIGZvciBJQU0gZ3JhbnRzKVxuICAgICAgICAgIHNlcnZpY2UgLy8gSUNvbm5lY3RhYmxlIChzZWN1cml0eSBncm91cCBmb3IgbmV0d29yayBhY2Nlc3MpXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEZhaWxlZCB0byBwcm9jZXNzIGNvbm5lY3Rpb25zIGZvciBFQ1Mgc2VydmljZSAnJHtzZXJ2aWNlTmFtZX0nOiAke1xuICAgICAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICAgICAgfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlUHJvcHMocHJvcHM6IEVjc0NsdXN0ZXJQcm9wcyk6IHZvaWQge1xuICAgIC8vIFZhbGlkYXRlIHNlcnZpY2VzIGFycmF5XG4gICAgaWYgKCFwcm9wcy5zZXJ2aWNlcyB8fCBwcm9wcy5zZXJ2aWNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkF0IGxlYXN0IG9uZSBzZXJ2aWNlIG11c3QgYmUgc3BlY2lmaWVkLlwiKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgZHVwbGljYXRlIHNlcnZpY2UgbmFtZXNcbiAgICBjb25zdCBzZXJ2aWNlTmFtZXMgPSBwcm9wcy5zZXJ2aWNlcy5tYXAoKHMpID0+IHMubmFtZSk7XG4gICAgY29uc3QgZHVwbGljYXRlU2VydmljZXMgPSBzZXJ2aWNlTmFtZXMuZmlsdGVyKFxuICAgICAgKG5hbWUsIGluZGV4KSA9PiBzZXJ2aWNlTmFtZXMuaW5kZXhPZihuYW1lKSAhPT0gaW5kZXhcbiAgICApO1xuICAgIGlmIChkdXBsaWNhdGVTZXJ2aWNlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBEdXBsaWNhdGUgc2VydmljZSBuYW1lczogJHtbLi4ubmV3IFNldChkdXBsaWNhdGVTZXJ2aWNlcyldLmpvaW4oXCIsIFwiKX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHJvdXRpbmcgd2hlbiBtdWx0aXBsZSBzZXJ2aWNlcyBoYXZlIHBvcnRzXG4gICAgY29uc3Qgc2VydmljZXNXaXRoUG9ydHMgPSBwcm9wcy5zZXJ2aWNlcy5maWx0ZXIoKHMpID0+XG4gICAgICBzLmNvbnRhaW5lcnMuc29tZSgoYykgPT4gYy5wb3J0ICE9PSB1bmRlZmluZWQpXG4gICAgKTtcblxuICAgIGlmIChzZXJ2aWNlc1dpdGhQb3J0cy5sZW5ndGggPiAxICYmICF0aGlzLmxvYWRCYWxhbmNlckRpc2FibGVkKSB7XG4gICAgICBjb25zdCBtaXNzaW5nUm91dGluZyA9IHNlcnZpY2VzV2l0aFBvcnRzLmZpbHRlcihcbiAgICAgICAgKHMpID0+ICFzLnJvdXRpbmc/LnBhdGggJiYgIXMucm91dGluZz8uaG9zdFxuICAgICAgKTtcbiAgICAgIGlmIChtaXNzaW5nUm91dGluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgU2VydmljZXMgd2l0aCBwb3J0cyByZXF1aXJlIHJvdXRpbmcgY29uZmlnIHdoZW4gY2x1c3RlciBoYXMgbXVsdGlwbGUgc2VydmljZXM6IGAgK1xuICAgICAgICAgICAgYCR7bWlzc2luZ1JvdXRpbmcubWFwKChzKSA9PiBzLm5hbWUpLmpvaW4oXCIsIFwiKX0uIGAgK1xuICAgICAgICAgICAgXCJBZGQgcm91dGluZzogeyBwYXRoOiAnLy4uLicgfSB0byBlYWNoIHNlcnZpY2UuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBlYWNoIHNlcnZpY2UncyBjb250YWluZXJzXG4gICAgZm9yIChjb25zdCBzZXJ2aWNlIG9mIHByb3BzLnNlcnZpY2VzKSB7XG4gICAgICBpZiAoIXNlcnZpY2UuY29udGFpbmVycyB8fCBzZXJ2aWNlLmNvbnRhaW5lcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgU2VydmljZSAnJHtzZXJ2aWNlLm5hbWV9JzogQXQgbGVhc3Qgb25lIGNvbnRhaW5lciBtdXN0IGJlIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGUgY29udGFpbmVyIG5hbWVzIHdpdGhpbiBzZXJ2aWNlXG4gICAgICBjb25zdCBjb250YWluZXJOYW1lcyA9IHNlcnZpY2UuY29udGFpbmVycy5tYXAoKGMpID0+IGMubmFtZSk7XG4gICAgICBjb25zdCBkdXBsaWNhdGVDb250YWluZXJzID0gY29udGFpbmVyTmFtZXMuZmlsdGVyKFxuICAgICAgICAobmFtZSwgaW5kZXgpID0+IGNvbnRhaW5lck5hbWVzLmluZGV4T2YobmFtZSkgIT09IGluZGV4XG4gICAgICApO1xuICAgICAgaWYgKGR1cGxpY2F0ZUNvbnRhaW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFNlcnZpY2UgJyR7c2VydmljZS5uYW1lfSc6IER1cGxpY2F0ZSBjb250YWluZXIgbmFtZXM6IGAgK1xuICAgICAgICAgICAgYCR7Wy4uLm5ldyBTZXQoZHVwbGljYXRlQ29udGFpbmVycyldLmpvaW4oXCIsIFwiKX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cENvbm5lY3Rpb25zKHByb3BzOiBFY3NDbHVzdGVyUHJvcHMpOiB2b2lkIHtcbiAgICBsZXQgZGVmYXVsdFBvcnQgPSA4MDtcbiAgICBmb3IgKGNvbnN0IHNlcnZpY2Ugb2YgcHJvcHMuc2VydmljZXMpIHtcbiAgICAgIGNvbnN0IHByaW1hcnlDb250YWluZXIgPSBzZXJ2aWNlLmNvbnRhaW5lcnMuZmluZChcbiAgICAgICAgKGMpID0+IGMucG9ydCAhPT0gdW5kZWZpbmVkXG4gICAgICApO1xuICAgICAgaWYgKHByaW1hcnlDb250YWluZXI/LnBvcnQpIHtcbiAgICAgICAgZGVmYXVsdFBvcnQgPSBwcmltYXJ5Q29udGFpbmVyLnBvcnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNlY3VyaXR5R3JvdXBzOiBJU2VjdXJpdHlHcm91cFtdID0gW107XG5cbiAgICBpZiAodGhpcy5hc2dTZWN1cml0eUdyb3VwKSB7XG4gICAgICBzZWN1cml0eUdyb3Vwcy5wdXNoKHRoaXMuYXNnU2VjdXJpdHlHcm91cCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzZXJ2aWNlRGF0YSBvZiB0aGlzLnNlcnZpY2VzLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBzZXJ2aWNlU2dzID0gc2VydmljZURhdGEuc2VydmljZT8uY29ubmVjdGlvbnM/LnNlY3VyaXR5R3JvdXBzIHx8IFtdO1xuICAgICAgZm9yIChjb25zdCBzZyBvZiBzZXJ2aWNlU2dzKSB7XG4gICAgICAgIGlmICghc2VjdXJpdHlHcm91cHMuaW5jbHVkZXMoc2cpKSB7XG4gICAgICAgICAgc2VjdXJpdHlHcm91cHMucHVzaChzZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gbmV3IENvbm5lY3Rpb25zKHtcbiAgICAgIHNlY3VyaXR5R3JvdXBzLFxuICAgICAgZGVmYXVsdFBvcnQ6IFBvcnQudGNwKGRlZmF1bHRQb3J0KVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGV4ZWN1dGlvbiByb2xlIGZvciBFQ1MgaW5mcmFzdHJ1Y3R1cmUgb3BlcmF0aW9ucy5cbiAgICogVXNlZCBieSB0aGUgRUNTIGFnZW50IHRvIHB1bGwgaW1hZ2VzLCB3cml0ZSBsb2dzLCBhbmQgaW5qZWN0IHNlY3JldHMuXG4gICAqIE5PVCB1c2VkIGJ5IGFwcGxpY2F0aW9uIGNvZGUgLSB0aGF0J3MgdGhlIHRhc2sgcm9sZS5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRXhlY3V0aW9uUm9sZShzZXJ2aWNlTmFtZTogc3RyaW5nKTogUm9sZSB7XG4gICAgY29uc3QgZXhlY3V0aW9uUm9sZSA9IG5ldyBSb2xlKHRoaXMsIGAke3NlcnZpY2VOYW1lfUV4ZWN1dGlvblJvbGVgLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBTZXJ2aWNlUHJpbmNpcGFsKFwiZWNzLXRhc2tzLmFtYXpvbmF3cy5jb21cIilcbiAgICB9KTtcblxuICAgIGV4ZWN1dGlvblJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcImVjcjpHZXRBdXRob3JpemF0aW9uVG9rZW5cIixcbiAgICAgICAgICBcImVjcjpCYXRjaENoZWNrTGF5ZXJBdmFpbGFiaWxpdHlcIixcbiAgICAgICAgICBcImVjcjpHZXREb3dubG9hZFVybEZvckxheWVyXCIsXG4gICAgICAgICAgXCJlY3I6QmF0Y2hHZXRJbWFnZVwiXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgbG9nR3JvdXBBcm4gPSBgYXJuOmF3czpsb2dzOiR7U3RhY2sub2YodGhpcykucmVnaW9ufToke1N0YWNrLm9mKHRoaXMpLmFjY291bnR9OmxvZy1ncm91cDovZWNzLyR7dGhpcy5wcm9wcy5jbHVzdGVyTmFtZX0qYDtcbiAgICBleGVjdXRpb25Sb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJsb2dzOkNyZWF0ZUxvZ1N0cmVhbVwiLFxuICAgICAgICAgIFwibG9nczpQdXRMb2dFdmVudHNcIixcbiAgICAgICAgICBcImxvZ3M6Q3JlYXRlTG9nR3JvdXBcIlxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtsb2dHcm91cEFybiwgYCR7bG9nR3JvdXBBcm59OipgXVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3Qgc2VjcmV0TmFtZXMgPSB0aGlzLmNvbGxlY3RTZWNyZXRzTWFuYWdlclNlY3JldE5hbWVzKCk7XG4gICAgaWYgKHNlY3JldE5hbWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHNlY3JldEFybnMgPSBzZWNyZXROYW1lcy5tYXAoXG4gICAgICAgIChzZWNyZXROYW1lKSA9PlxuICAgICAgICAgIGBhcm46YXdzOnNlY3JldHNtYW5hZ2VyOiR7U3RhY2sub2YodGhpcykucmVnaW9ufToke1N0YWNrLm9mKHRoaXMpLmFjY291bnR9OnNlY3JldDoke3NlY3JldE5hbWV9LSpgXG4gICAgICApO1xuICAgICAgZXhlY3V0aW9uUm9sZS5hZGRUb1BvbGljeShcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgXCJzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZVwiLFxuICAgICAgICAgICAgXCJzZWNyZXRzbWFuYWdlcjpEZXNjcmliZVNlY3JldFwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICByZXNvdXJjZXM6IHNlY3JldEFybnNcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFzU3NtU2VjcmV0cyA9IHRoaXMucHJvcHMuc2VydmljZXMuc29tZSgoc2VydmljZSkgPT5cbiAgICAgIHNlcnZpY2UuY29udGFpbmVycy5zb21lKFxuICAgICAgICAoY29udGFpbmVyKSA9PiBjb250YWluZXIuc2VjcmV0cyAmJiBjb250YWluZXIuc2VjcmV0cy5sZW5ndGggPiAwXG4gICAgICApXG4gICAgKTtcbiAgICBpZiAoaGFzU3NtU2VjcmV0cykge1xuICAgICAgaWYgKCF0aGlzLnByb3BzLmFwcE5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFQ1MgY2x1c3RlciAnJHt0aGlzLnByb3BzLmNsdXN0ZXJOYW1lfScgaGFzIHNlcnZpY2VzIHVzaW5nIHNlY3JldHMgYnV0IGFwcE5hbWUgaXMgbm90IGNvbmZpZ3VyZWQuIGAgK1xuICAgICAgICAgICAgYFNldCBhcHBOYW1lIG9uIGNsdXN0ZXIgcHJvcHMgdG8gZW5hYmxlIHNjb3BlZCBJQU0gcGVybWlzc2lvbnMgZm9yIFNTTSBQYXJhbWV0ZXIgU3RvcmUgYWNjZXNzLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGV4ZWN1dGlvblJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFtcInNzbTpHZXRQYXJhbWV0ZXJzXCIsIFwic3NtOkdldFBhcmFtZXRlclwiXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtgYXJuOmF3czpzc206KjoqOnBhcmFtZXRlci8ke3RoaXMucHJvcHMuYXBwTmFtZX0vKmBdXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEtNUyBkZWNyeXB0IGZvciBTU00gU2VjdXJlU3RyaW5nIGFuZCBTZWNyZXRzIE1hbmFnZXIgd2l0aCBjdXN0b21lci1tYW5hZ2VkIGtleXMgKENNS3MpXG4gICAgZXhlY3V0aW9uUm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1wia21zOkRlY3J5cHRcIl0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICAgXCJrbXM6VmlhU2VydmljZVwiOiBbXG4gICAgICAgICAgICAgIGBzc20uJHtTdGFjay5vZih0aGlzKS5yZWdpb259LmFtYXpvbmF3cy5jb21gLFxuICAgICAgICAgICAgICBgc2VjcmV0c21hbmFnZXIuJHtTdGFjay5vZih0aGlzKS5yZWdpb259LmFtYXpvbmF3cy5jb21gXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gZXhlY3V0aW9uUm9sZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSB0YXNrIHJvbGUgZm9yIGFwcGxpY2F0aW9uIGNvZGUgcnVubmluZyBpbiB0aGUgY29udGFpbmVyLlxuICAgKiBUaGlzIHJvbGUgaXMgYXNzdW1lZCBieSB0aGUgYXBwbGljYXRpb24sIG5vdCB0aGUgRUNTIGFnZW50LlxuICAgKiBJbmNsdWRlcyBkZWZhdWx0IEVDUyBFeGVjIHBlcm1pc3Npb25zIHBsdXMgYW55IHNlcnZpY2Utc3BlY2lmaWMgcG9saWNpZXMuXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZVRhc2tSb2xlKFxuICAgIHNlcnZpY2VOYW1lOiBzdHJpbmcsXG4gICAgc2VydmljZVByb3BzOiBFY3NTZXJ2aWNlUHJvcHNcbiAgKTogUm9sZSB7XG4gICAgY29uc3QgdGFza1JvbGUgPSBuZXcgUm9sZSh0aGlzLCBgJHtzZXJ2aWNlTmFtZX1UYXNrUm9sZWAsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoXCJlY3MtdGFza3MuYW1hem9uYXdzLmNvbVwiKVxuICAgIH0pO1xuXG4gICAgLy8gU1NNIHBlcm1pc3Npb25zIGZvciBFQ1MgRXhlYyAoZWNzIGV4ZWN1dGUtY29tbWFuZClcbiAgICB0YXNrUm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwic3NtbWVzc2FnZXM6Q3JlYXRlQ29udHJvbENoYW5uZWxcIixcbiAgICAgICAgICBcInNzbW1lc3NhZ2VzOkNyZWF0ZURhdGFDaGFubmVsXCIsXG4gICAgICAgICAgXCJzc21tZXNzYWdlczpPcGVuQ29udHJvbENoYW5uZWxcIixcbiAgICAgICAgICBcInNzbW1lc3NhZ2VzOk9wZW5EYXRhQ2hhbm5lbFwiXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgaWYgKHNlcnZpY2VQcm9wcy50YXNrUm9sZUlubGluZVBvbGljaWVzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtwb2xpY3lOYW1lLCBwb2xpY3lEb2N1bWVudF0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICAgIHNlcnZpY2VQcm9wcy50YXNrUm9sZUlubGluZVBvbGljaWVzXG4gICAgICApKSB7XG4gICAgICAgIHRhc2tSb2xlLmF0dGFjaElubGluZVBvbGljeShcbiAgICAgICAgICBuZXcgUG9saWN5KHRoaXMsIGAke3NlcnZpY2VOYW1lfSR7cG9saWN5TmFtZX1gLCB7XG4gICAgICAgICAgICBkb2N1bWVudDogcG9saWN5RG9jdW1lbnRcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzZXJ2aWNlUHJvcHMudGFza1JvbGVNYW5hZ2VkUG9saWNpZXMpIHtcbiAgICAgIGZvciAoY29uc3QgcG9saWN5IG9mIHNlcnZpY2VQcm9wcy50YXNrUm9sZU1hbmFnZWRQb2xpY2llcykge1xuICAgICAgICB0YXNrUm9sZS5hZGRNYW5hZ2VkUG9saWN5KHBvbGljeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhc2tSb2xlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVUYXNrRGVmaW5pdGlvbihcbiAgICBzZXJ2aWNlTmFtZTogc3RyaW5nLFxuICAgIHNlcnZpY2VQcm9wczogRWNzU2VydmljZVByb3BzLFxuICAgIGV4ZWN1dGlvblJvbGU6IFJvbGUsXG4gICAgdGFza1JvbGU6IFJvbGVcbiAgKTogRmFyZ2F0ZVRhc2tEZWZpbml0aW9uIHwgRWMyVGFza0RlZmluaXRpb24ge1xuICAgIGNvbnN0IGNwdSA9IHNlcnZpY2VQcm9wcy5jcHUgfHwgMjU2O1xuICAgIGNvbnN0IG1lbW9yeUxpbWl0TWlCID0gc2VydmljZVByb3BzLm1lbW9yeUxpbWl0TWlCIHx8IDUxMjtcblxuICAgIGlmICh0aGlzLmlzU2VydmljZUZhcmdhdGUoc2VydmljZVByb3BzKSkge1xuICAgICAgcmV0dXJuIG5ldyBGYXJnYXRlVGFza0RlZmluaXRpb24odGhpcywgYCR7c2VydmljZU5hbWV9VGFza0RlZmluaXRpb25gLCB7XG4gICAgICAgIGZhbWlseTogYCR7dGhpcy5wcm9wcy5jbHVzdGVyTmFtZX0tJHtzZXJ2aWNlTmFtZX1gLFxuICAgICAgICBjcHUsXG4gICAgICAgIG1lbW9yeUxpbWl0TWlCLFxuICAgICAgICBleGVjdXRpb25Sb2xlLFxuICAgICAgICB0YXNrUm9sZSxcbiAgICAgICAgcnVudGltZVBsYXRmb3JtOiB7XG4gICAgICAgICAgY3B1QXJjaGl0ZWN0dXJlOiBDcHVBcmNoaXRlY3R1cmUuQVJNNjQsXG4gICAgICAgICAgb3BlcmF0aW5nU3lzdGVtRmFtaWx5OiBPcGVyYXRpbmdTeXN0ZW1GYW1pbHkuTElOVVhcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRWMyVGFza0RlZmluaXRpb24odGhpcywgYCR7c2VydmljZU5hbWV9VGFza0RlZmluaXRpb25gLCB7XG4gICAgICAgIGZhbWlseTogYCR7dGhpcy5wcm9wcy5jbHVzdGVyTmFtZX0tJHtzZXJ2aWNlTmFtZX1gLFxuICAgICAgICBleGVjdXRpb25Sb2xlLFxuICAgICAgICB0YXNrUm9sZSxcbiAgICAgICAgLi4uKHRoaXMuZGlyZWN0QWNjZXNzRW5hYmxlZCAmJiB7IG5ldHdvcmtNb2RlOiBOZXR3b3JrTW9kZS5IT1NUIH0pXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZENvbnRhaW5lcnNUb1Rhc2soXG4gICAgc2VydmljZU5hbWU6IHN0cmluZyxcbiAgICBzZXJ2aWNlUHJvcHM6IEVjc1NlcnZpY2VQcm9wcyxcbiAgICB0YXNrRGVmaW5pdGlvbjogRmFyZ2F0ZVRhc2tEZWZpbml0aW9uIHwgRWMyVGFza0RlZmluaXRpb25cbiAgKToge1xuICAgIGNvbnRhaW5lcnM6IENvbnRhaW5lckRlZmluaXRpb25bXTtcbiAgICBwcmltYXJ5Q29udGFpbmVyPzogQ29udGFpbmVyRGVmaW5pdGlvbjtcbiAgfSB7XG4gICAgY29uc3QgY29udGFpbmVyczogQ29udGFpbmVyRGVmaW5pdGlvbltdID0gW107XG4gICAgbGV0IHByaW1hcnlDb250YWluZXI6IENvbnRhaW5lckRlZmluaXRpb24gfCB1bmRlZmluZWQ7XG5cbiAgICBmb3IgKGNvbnN0IGNvbnRhaW5lckNvbmZpZyBvZiBzZXJ2aWNlUHJvcHMuY29udGFpbmVycykge1xuICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLmdldENvbnRhaW5lckltYWdlKFxuICAgICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgICAgY29udGFpbmVyQ29uZmlnLFxuICAgICAgICBzZXJ2aWNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBpc0ZpcnN0V2l0aFBvcnQgPVxuICAgICAgICAhcHJpbWFyeUNvbnRhaW5lciAmJiBjb250YWluZXJDb25maWcucG9ydCAhPT0gdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBzZWNyZXRzOiBSZWNvcmQ8c3RyaW5nLCBFY3NTZWNyZXQ+ID0ge307XG4gICAgICBpZiAoY29udGFpbmVyQ29uZmlnLnNlY3JldHNJbXBvcnQpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBzZWNyZXRJbXBvcnRdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgIGNvbnRhaW5lckNvbmZpZy5zZWNyZXRzSW1wb3J0XG4gICAgICAgICkpIHtcbiAgICAgICAgICBjb25zdCBzZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBgJHt0aGlzLnByb3BzLmNsdXN0ZXJOYW1lfSR7c2VydmljZU5hbWV9JHtjb250YWluZXJDb25maWcubmFtZX0ke2tleX1TZWNyZXRgLFxuICAgICAgICAgICAgc2VjcmV0SW1wb3J0Lm5hbWVcbiAgICAgICAgICApO1xuICAgICAgICAgIHNlY3JldHNba2V5XSA9IEVjc1NlY3JldC5mcm9tU2VjcmV0c01hbmFnZXIoXG4gICAgICAgICAgICBzZWNyZXQsXG4gICAgICAgICAgICBzZWNyZXRJbXBvcnQuZmllbGRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjb250YWluZXJDb25maWcuc2VjcmV0cyAmJiBjb250YWluZXJDb25maWcuc2VjcmV0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChjb250YWluZXJDb25maWcuc2VjcmV0c0ltcG9ydCkge1xuICAgICAgICAgIGNvbnN0IHNlY3JldHNJbXBvcnRLZXlzID0gT2JqZWN0LmtleXMoY29udGFpbmVyQ29uZmlnLnNlY3JldHNJbXBvcnQpO1xuICAgICAgICAgIGNvbnN0IGR1cGxpY2F0ZUtleXMgPSBjb250YWluZXJDb25maWcuc2VjcmV0cy5maWx0ZXIoKGtleSkgPT5cbiAgICAgICAgICAgIHNlY3JldHNJbXBvcnRLZXlzLmluY2x1ZGVzKGtleSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChkdXBsaWNhdGVLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYENvbnRhaW5lciAnJHtjb250YWluZXJDb25maWcubmFtZX0nIGluIHNlcnZpY2UgJyR7c2VydmljZU5hbWV9JyBoYXMgZHVwbGljYXRlIHNlY3JldCBrZXlzIGAgK1xuICAgICAgICAgICAgICAgIGBkZWZpbmVkIGluIGJvdGggc2VjcmV0cyBhbmQgc2VjcmV0c0ltcG9ydDogJHtkdXBsaWNhdGVLZXlzLmpvaW4oXCIsIFwiKX0uIGAgK1xuICAgICAgICAgICAgICAgIGBFYWNoIHNlY3JldCBrZXkgbXVzdCBiZSB1bmlxdWUgYWNyb3NzIGJvdGggc291cmNlcy5gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNzbVNlY3JldHNQYXRoID0gdGhpcy5kZXJpdmVTc21TZWNyZXRzUGF0aChcbiAgICAgICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgICAgICBzZXJ2aWNlUHJvcHMuc3NtU2VjcmV0c1BhdGhcbiAgICAgICAgKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHNlY3JldE5hbWUgb2YgY29udGFpbmVyQ29uZmlnLnNlY3JldHMpIHtcbiAgICAgICAgICBjb25zdCBwYXJhbVBhdGggPSBgJHtzc21TZWNyZXRzUGF0aH0vJHtzZWNyZXROYW1lfWA7XG4gICAgICAgICAgY29uc3QgcGFyYW0gPSBTdHJpbmdQYXJhbWV0ZXIuZnJvbVNlY3VyZVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgYCR7dGhpcy5wcm9wcy5jbHVzdGVyTmFtZX0ke3NlcnZpY2VOYW1lfSR7Y29udGFpbmVyQ29uZmlnLm5hbWV9JHtzZWNyZXROYW1lfVNzbVBhcmFtYCxcbiAgICAgICAgICAgIHsgcGFyYW1ldGVyTmFtZTogcGFyYW1QYXRoIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIHNlY3JldHNbc2VjcmV0TmFtZV0gPSBFY3NTZWNyZXQuZnJvbVNzbVBhcmFtZXRlcihwYXJhbSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGFpbmVyID0gdGFza0RlZmluaXRpb24uYWRkQ29udGFpbmVyKFxuICAgICAgICBgJHtzZXJ2aWNlTmFtZX0ke2NvbnRhaW5lckNvbmZpZy5uYW1lfWAsXG4gICAgICAgIHtcbiAgICAgICAgICBpbWFnZSxcbiAgICAgICAgICBjb250YWluZXJOYW1lOiBjb250YWluZXJDb25maWcubmFtZSxcbiAgICAgICAgICBsb2dnaW5nOiBuZXcgQXdzTG9nRHJpdmVyKHtcbiAgICAgICAgICAgIHN0cmVhbVByZWZpeDogYC9lY3MvJHt0aGlzLnByb3BzLmNsdXN0ZXJOYW1lfS8ke3NlcnZpY2VOYW1lfWAsXG4gICAgICAgICAgICBsb2dSZXRlbnRpb246IDE0XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZW52aXJvbm1lbnQ6IGNvbnRhaW5lckNvbmZpZy5lbnZpcm9ubWVudCxcbiAgICAgICAgICBzZWNyZXRzLFxuICAgICAgICAgIGNvbW1hbmQ6IGNvbnRhaW5lckNvbmZpZy5jb21tYW5kLFxuICAgICAgICAgIGVudHJ5UG9pbnQ6IGNvbnRhaW5lckNvbmZpZy5lbnRyeVBvaW50LFxuICAgICAgICAgIGVzc2VudGlhbDogY29udGFpbmVyQ29uZmlnLmVzc2VudGlhbCA/PyB0cnVlLFxuICAgICAgICAgIGhlYWx0aENoZWNrOiBjb250YWluZXJDb25maWcuaGVhbHRoQ2hlY2tcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGNvbW1hbmQ6IGNvbnRhaW5lckNvbmZpZy5oZWFsdGhDaGVjay5jb21tYW5kLFxuICAgICAgICAgICAgICAgIGludGVydmFsOiBjb250YWluZXJDb25maWcuaGVhbHRoQ2hlY2suaW50ZXJ2YWxcbiAgICAgICAgICAgICAgICAgID8gRHVyYXRpb24uc2Vjb25kcyhjb250YWluZXJDb25maWcuaGVhbHRoQ2hlY2suaW50ZXJ2YWwpXG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiBjb250YWluZXJDb25maWcuaGVhbHRoQ2hlY2sudGltZW91dFxuICAgICAgICAgICAgICAgICAgPyBEdXJhdGlvbi5zZWNvbmRzKGNvbnRhaW5lckNvbmZpZy5oZWFsdGhDaGVjay50aW1lb3V0KVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcmV0cmllczogY29udGFpbmVyQ29uZmlnLmhlYWx0aENoZWNrLnJldHJpZXMsXG4gICAgICAgICAgICAgICAgc3RhcnRQZXJpb2Q6IGNvbnRhaW5lckNvbmZpZy5oZWFsdGhDaGVjay5zdGFydFBlcmlvZFxuICAgICAgICAgICAgICAgICAgPyBEdXJhdGlvbi5zZWNvbmRzKGNvbnRhaW5lckNvbmZpZy5oZWFsdGhDaGVjay5zdGFydFBlcmlvZClcbiAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIC4uLih0aGlzLmlzU2VydmljZUVjMihzZXJ2aWNlUHJvcHMpICYmIHtcbiAgICAgICAgICAgIG1lbW9yeUxpbWl0TWlCOiBzZXJ2aWNlUHJvcHMuZWMyQ29uZmlnPy5tZW1vcnlMaW1pdE1pQiA/PyAxMDI0XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgaWYgKGNvbnRhaW5lckNvbmZpZy5wb3J0KSB7XG4gICAgICAgIGNvbnRhaW5lci5hZGRQb3J0TWFwcGluZ3Moe1xuICAgICAgICAgIGNvbnRhaW5lclBvcnQ6IGNvbnRhaW5lckNvbmZpZy5wb3J0XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNGaXJzdFdpdGhQb3J0KSB7XG4gICAgICAgIHByaW1hcnlDb250YWluZXIgPSBjb250YWluZXI7XG4gICAgICB9XG5cbiAgICAgIGNvbnRhaW5lcnMucHVzaChjb250YWluZXIpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGNvbnRhaW5lcnMsIHByaW1hcnlDb250YWluZXIgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udGFpbmVySW1hZ2UoXG4gICAgc2VydmljZU5hbWU6IHN0cmluZyxcbiAgICBjb250YWluZXJDb25maWc6IEVjc0NsdXN0ZXJDb250YWluZXJDb25maWcsXG4gICAgc2VydmljZVByb3BzOiBFY3NTZXJ2aWNlUHJvcHNcbiAgKTogQ29udGFpbmVySW1hZ2Uge1xuICAgIGNvbnN0IGltYWdlU291cmNlID1cbiAgICAgIGNvbnRhaW5lckNvbmZpZy5pbWFnZSB8fCBzZXJ2aWNlUHJvcHMuaW1hZ2UgfHwgdGhpcy5wcm9wcy5lY3JSZXBvc2l0b3J5O1xuXG4gICAgaWYgKCFpbWFnZVNvdXJjZSkge1xuICAgICAgcmV0dXJuIENvbnRhaW5lckltYWdlLmZyb21SZWdpc3RyeShcImFtYXpvbi9hbWF6b24tZWNzLXNhbXBsZVwiKTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCBpbWFnZSB0YWcgd2l0aCBvcHRpb25hbCBkb2NrZXJUYXJnZXQgc3VmZml4XG4gICAgLy8gRm9ybWF0OiA8c2VydmljZT4tWzx0YXJnZXQ+LV1sYXRlc3RcbiAgICBjb25zdCB0YXJnZXRTdWZmaXggPSBzZXJ2aWNlUHJvcHMuZG9ja2VyVGFyZ2V0XG4gICAgICA/IGAtJHtzZXJ2aWNlUHJvcHMuZG9ja2VyVGFyZ2V0LnRvTG93ZXJDYXNlKCl9YFxuICAgICAgOiBcIlwiO1xuICAgIGNvbnN0IGltYWdlVGFnID0gYCR7c2VydmljZU5hbWUudG9Mb3dlckNhc2UoKX0ke3RhcmdldFN1ZmZpeH0tbGF0ZXN0YDtcblxuICAgIGlmICh0eXBlb2YgaW1hZ2VTb3VyY2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvbnN0IGlzRnVsbFJlZ2lzdHJ5VXJsID1cbiAgICAgICAgKGltYWdlU291cmNlLmluY2x1ZGVzKFwiL1wiKSAmJiAhaW1hZ2VTb3VyY2UuaW5jbHVkZXMoXCIuXCIpKSB8fCAvLyBEb2NrZXIgSHViOiBhbWF6b24vYW1hem9uLWVjcy1zYW1wbGVcbiAgICAgICAgaW1hZ2VTb3VyY2Uuc3RhcnRzV2l0aChcInB1YmxpYy5lY3IuYXdzL1wiKSB8fCAvLyBQdWJsaWMgRUNSOiBwdWJsaWMuZWNyLmF3cy9mamFsbC93ZWxjb21lXG4gICAgICAgIGltYWdlU291cmNlLmluY2x1ZGVzKFwiLmRrci5lY3IuXCIpOyAvLyBQcml2YXRlIEVDUiBmdWxsIFVSTDogMTIzNDU2Nzg5MDEyLmRrci5lY3IudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20vcmVwbzp0YWdcblxuICAgICAgaWYgKGlzRnVsbFJlZ2lzdHJ5VXJsKSB7XG4gICAgICAgIHJldHVybiBDb250YWluZXJJbWFnZS5mcm9tUmVnaXN0cnkoaW1hZ2VTb3VyY2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIENvbnRhaW5lckltYWdlLmZyb21FY3JSZXBvc2l0b3J5KFxuICAgICAgICBSZXBvc2l0b3J5LmZyb21SZXBvc2l0b3J5TmFtZShcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGAke3NlcnZpY2VOYW1lfSR7Y29udGFpbmVyQ29uZmlnLm5hbWV9RWNyUmVwb2AsXG4gICAgICAgICAgaW1hZ2VTb3VyY2VcbiAgICAgICAgKSxcbiAgICAgICAgaW1hZ2VUYWdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGltYWdlU291cmNlIGluc3RhbmNlb2YgUmVwb3NpdG9yeSkge1xuICAgICAgcmV0dXJuIENvbnRhaW5lckltYWdlLmZyb21FY3JSZXBvc2l0b3J5KGltYWdlU291cmNlLCBpbWFnZVRhZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGltYWdlU291cmNlIGFzIENvbnRhaW5lckltYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTZXJ2aWNlKFxuICAgIHNlcnZpY2VOYW1lOiBzdHJpbmcsXG4gICAgc2VydmljZVByb3BzOiBFY3NTZXJ2aWNlUHJvcHMsXG4gICAgdGFza0RlZmluaXRpb246IEZhcmdhdGVUYXNrRGVmaW5pdGlvbiB8IEVjMlRhc2tEZWZpbml0aW9uXG4gICk6IEZhcmdhdGVTZXJ2aWNlIHwgRWMyU2VydmljZSB7XG4gICAgY29uc3QgZGVzaXJlZENvdW50ID0gc2VydmljZVByb3BzLmRlc2lyZWRDb3VudCA/PyAyO1xuICAgIGNvbnN0IGVmZmVjdGl2ZVByb3ZpZGVyID0gdGhpcy5nZXRTZXJ2aWNlQ2FwYWNpdHlQcm92aWRlcihzZXJ2aWNlUHJvcHMpO1xuXG4gICAgaWYgKHRoaXMuaXNTZXJ2aWNlRmFyZ2F0ZShzZXJ2aWNlUHJvcHMpKSB7XG4gICAgICBjb25zdCBoYXNOYXQgPSB0aGlzLnZwY0hhc05hdEdhdGV3YXlzKCk7XG4gICAgICBjb25zdCBzZXJ2aWNlID0gbmV3IEZhcmdhdGVTZXJ2aWNlKHRoaXMsIGAke3NlcnZpY2VOYW1lfVNlcnZpY2VgLCB7XG4gICAgICAgIGNsdXN0ZXI6IHRoaXMuY2x1c3RlcixcbiAgICAgICAgdGFza0RlZmluaXRpb246IHRhc2tEZWZpbml0aW9uIGFzIEZhcmdhdGVUYXNrRGVmaW5pdGlvbixcbiAgICAgICAgZGVzaXJlZENvdW50LFxuICAgICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgICAgdnBjU3VibmV0czoge1xuICAgICAgICAgIHN1Ym5ldFR5cGU6IGhhc05hdFxuICAgICAgICAgICAgPyBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1NcbiAgICAgICAgICAgIDogU3VibmV0VHlwZS5QVUJMSUNcbiAgICAgICAgfSxcbiAgICAgICAgYXNzaWduUHVibGljSXA6ICFoYXNOYXQsXG4gICAgICAgIGNhcGFjaXR5UHJvdmlkZXJTdHJhdGVnaWVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FwYWNpdHlQcm92aWRlcjogZWZmZWN0aXZlUHJvdmlkZXIsXG4gICAgICAgICAgICB3ZWlnaHQ6IDFcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHByb3BhZ2F0ZVRhZ3M6IFByb3BhZ2F0ZWRUYWdTb3VyY2UuU0VSVklDRSxcbiAgICAgICAgY2lyY3VpdEJyZWFrZXI6IHsgZW5hYmxlOiB0cnVlLCByb2xsYmFjazogdHJ1ZSB9LFxuICAgICAgICBlbmFibGVFQ1NNYW5hZ2VkVGFnczogdHJ1ZSxcbiAgICAgICAgZW5hYmxlRXhlY3V0ZUNvbW1hbmQ6IHRydWUsXG4gICAgICAgIGhlYWx0aENoZWNrR3JhY2VQZXJpb2Q6IER1cmF0aW9uLnNlY29uZHMoMTIwKSxcbiAgICAgICAgbWluSGVhbHRoeVBlcmNlbnQ6IDEwMCxcbiAgICAgICAgbWF4SGVhbHRoeVBlcmNlbnQ6IDIwMFxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7dGhpcy5wcm9wcy5jbHVzdGVyTmFtZX0ke3NlcnZpY2VOYW1lfVNlcnZpY2VBcm5gLCB7XG4gICAgICAgIGtleTogYCR7dGhpcy5wcm9wcy5jbHVzdGVyTmFtZX0ke3NlcnZpY2VOYW1lfVNlcnZpY2VBcm5gLFxuICAgICAgICBleHBvcnROYW1lOiBgJHt0aGlzLnByb3BzLmNsdXN0ZXJOYW1lfSR7c2VydmljZU5hbWV9U2VydmljZUFybmAsXG4gICAgICAgIHZhbHVlOiBzZXJ2aWNlLnNlcnZpY2VBcm4sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgRUNTIFNlcnZpY2UgQVJOIGZvciAke3NlcnZpY2VOYW1lfWBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHNlcnZpY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGFzZ1Byb3ZpZGVyID0gdGhpcy5nZXRPckNyZWF0ZUFzZ0NhcGFjaXR5UHJvdmlkZXIoc2VydmljZVByb3BzKTtcblxuICAgICAgY29uc3Qgc2VydmljZSA9IG5ldyBFYzJTZXJ2aWNlKHRoaXMsIGAke3NlcnZpY2VOYW1lfVNlcnZpY2VgLCB7XG4gICAgICAgIGNsdXN0ZXI6IHRoaXMuY2x1c3RlcixcbiAgICAgICAgdGFza0RlZmluaXRpb246IHRhc2tEZWZpbml0aW9uIGFzIEVjMlRhc2tEZWZpbml0aW9uLFxuICAgICAgICBkZXNpcmVkQ291bnQsXG4gICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICBjYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ2llczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNhcGFjaXR5UHJvdmlkZXI6IGFzZ1Byb3ZpZGVyLmNhcGFjaXR5UHJvdmlkZXJOYW1lLFxuICAgICAgICAgICAgd2VpZ2h0OiAxXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBwcm9wYWdhdGVUYWdzOiBQcm9wYWdhdGVkVGFnU291cmNlLlNFUlZJQ0UsXG4gICAgICAgIGNpcmN1aXRCcmVha2VyOiB7IGVuYWJsZTogdHJ1ZSwgcm9sbGJhY2s6IHRydWUgfSxcbiAgICAgICAgcGxhY2VtZW50U3RyYXRlZ2llczogW1BsYWNlbWVudFN0cmF0ZWd5LnNwcmVhZEFjcm9zc0luc3RhbmNlcygpXSxcbiAgICAgICAgZW5hYmxlRUNTTWFuYWdlZFRhZ3M6IHRydWUsXG4gICAgICAgIGVuYWJsZUV4ZWN1dGVDb21tYW5kOiB0cnVlLFxuICAgICAgICBoZWFsdGhDaGVja0dyYWNlUGVyaW9kOiBEdXJhdGlvbi5zZWNvbmRzKDEyMCksXG4gICAgICAgIG1pbkhlYWx0aHlQZXJjZW50OiAxMDAsXG4gICAgICAgIG1heEhlYWx0aHlQZXJjZW50OiAyMDBcbiAgICAgIH0pO1xuXG4gICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3RoaXMucHJvcHMuY2x1c3Rlck5hbWV9JHtzZXJ2aWNlTmFtZX1TZXJ2aWNlQXJuYCwge1xuICAgICAgICBrZXk6IGAke3RoaXMucHJvcHMuY2x1c3Rlck5hbWV9JHtzZXJ2aWNlTmFtZX1TZXJ2aWNlQXJuYCxcbiAgICAgICAgZXhwb3J0TmFtZTogYCR7dGhpcy5wcm9wcy5jbHVzdGVyTmFtZX0ke3NlcnZpY2VOYW1lfVNlcnZpY2VBcm5gLFxuICAgICAgICB2YWx1ZTogc2VydmljZS5zZXJ2aWNlQXJuLFxuICAgICAgICBkZXNjcmlwdGlvbjogYEVDUyBTZXJ2aWNlIEFSTiBmb3IgJHtzZXJ2aWNlTmFtZX1gXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBzZXJ2aWNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJTZXJ2aWNlV2l0aEFMQihcbiAgICBzZXJ2aWNlTmFtZTogc3RyaW5nLFxuICAgIHNlcnZpY2VQcm9wczogRWNzU2VydmljZVByb3BzLFxuICAgIHNlcnZpY2U6IEZhcmdhdGVTZXJ2aWNlIHwgRWMyU2VydmljZSxcbiAgICBwcmltYXJ5Q29udGFpbmVyOiBDb250YWluZXJEZWZpbml0aW9uXG4gICk6IElBcHBsaWNhdGlvblRhcmdldEdyb3VwIHtcbiAgICBjb25zdCBjb250YWluZXJQb3J0ID0gcHJpbWFyeUNvbnRhaW5lci5jb250YWluZXJQb3J0O1xuICAgIGNvbnN0IGhlYWx0aENoZWNrUGF0aCA9IHNlcnZpY2VQcm9wcy5yb3V0aW5nPy5oZWFsdGhDaGVja1BhdGggfHwgXCIvXCI7XG5cbiAgICBjb25zdCBzZXJ2aWNlc1dpdGhQb3J0cyA9IHRoaXMucHJvcHMuc2VydmljZXMuZmlsdGVyKChzKSA9PlxuICAgICAgcy5jb250YWluZXJzLnNvbWUoKGMpID0+IGMucG9ydCAhPT0gdW5kZWZpbmVkKVxuICAgICk7XG4gICAgY29uc3QgaXNTaW5nbGVTZXJ2aWNlID0gc2VydmljZXNXaXRoUG9ydHMubGVuZ3RoID09PSAxO1xuXG4gICAgY29uc3QgaGVhbHRoQ2hlY2tDb25maWcgPSB0aGlzLmlzU2VydmljZUVjMihzZXJ2aWNlUHJvcHMpXG4gICAgICA/IHtcbiAgICAgICAgICBpbnRlcnZhbDogRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICAgICAgaGVhbHRoeVRocmVzaG9sZENvdW50OiAzLFxuICAgICAgICAgIHVuaGVhbHRoeVRocmVzaG9sZENvdW50OiAzLFxuICAgICAgICAgIHBhdGg6IGhlYWx0aENoZWNrUGF0aCxcbiAgICAgICAgICBwb3J0OiBcInRyYWZmaWMtcG9ydFwiIGFzIGNvbnN0LFxuICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMTUpXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIGludGVydmFsOiBEdXJhdGlvbi5zZWNvbmRzKDEyMCksXG4gICAgICAgICAgcGF0aDogaGVhbHRoQ2hlY2tQYXRoLFxuICAgICAgICAgIHBvcnQ6IGAke2NvbnRhaW5lclBvcnR9YCxcbiAgICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDEwKVxuICAgICAgICB9O1xuXG4gICAgaWYgKGlzU2luZ2xlU2VydmljZSkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZEJhbGFuY2VyTGlzdGVuZXIhLmFkZFRhcmdldHMoXG4gICAgICAgIGAke3NlcnZpY2VOYW1lfVRhcmdldEdyb3VwYCxcbiAgICAgICAge1xuICAgICAgICAgIHRhcmdldHM6IFtcbiAgICAgICAgICAgIHNlcnZpY2UubG9hZEJhbGFuY2VyVGFyZ2V0KHtcbiAgICAgICAgICAgICAgY29udGFpbmVyTmFtZTogcHJpbWFyeUNvbnRhaW5lci5jb250YWluZXJOYW1lLFxuICAgICAgICAgICAgICBjb250YWluZXJQb3J0XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0sXG4gICAgICAgICAgcG9ydDogY29udGFpbmVyUG9ydCxcbiAgICAgICAgICBwcm90b2NvbDogQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQLFxuICAgICAgICAgIGhlYWx0aENoZWNrOiBoZWFsdGhDaGVja0NvbmZpZ1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwcmlvcml0eSA9IHNlcnZpY2VQcm9wcy5yb3V0aW5nPy5wcmlvcml0eSB8fCB0aGlzLm5leHRQcmlvcml0eSsrO1xuXG4gICAgICBjb25zdCB0YXJnZXRHcm91cCA9IHRoaXMubG9hZEJhbGFuY2VyTGlzdGVuZXIhLmFkZFRhcmdldHMoXG4gICAgICAgIGAke3NlcnZpY2VOYW1lfVRhcmdldHNgLFxuICAgICAgICB7XG4gICAgICAgICAgdGFyZ2V0czogW1xuICAgICAgICAgICAgc2VydmljZS5sb2FkQmFsYW5jZXJUYXJnZXQoe1xuICAgICAgICAgICAgICBjb250YWluZXJOYW1lOiBwcmltYXJ5Q29udGFpbmVyLmNvbnRhaW5lck5hbWUsXG4gICAgICAgICAgICAgIGNvbnRhaW5lclBvcnRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwb3J0OiBjb250YWluZXJQb3J0LFxuICAgICAgICAgIHByb3RvY29sOiBBcHBsaWNhdGlvblByb3RvY29sLkhUVFAsXG4gICAgICAgICAgaGVhbHRoQ2hlY2s6IGhlYWx0aENoZWNrQ29uZmlnLFxuICAgICAgICAgIGNvbmRpdGlvbnM6IHRoaXMuYnVpbGRSb3V0aW5nQ29uZGl0aW9ucyhzZXJ2aWNlUHJvcHMpLFxuICAgICAgICAgIHByaW9yaXR5XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB0YXJnZXRHcm91cDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUm91dGluZ0NvbmRpdGlvbnMoXG4gICAgc2VydmljZVByb3BzOiBFY3NTZXJ2aWNlUHJvcHNcbiAgKTogTGlzdGVuZXJDb25kaXRpb25bXSB7XG4gICAgY29uc3QgY29uZGl0aW9uczogTGlzdGVuZXJDb25kaXRpb25bXSA9IFtdO1xuXG4gICAgaWYgKHNlcnZpY2VQcm9wcy5yb3V0aW5nPy5wYXRoKSB7XG4gICAgICBjb25kaXRpb25zLnB1c2goXG4gICAgICAgIExpc3RlbmVyQ29uZGl0aW9uLnBhdGhQYXR0ZXJucyhbc2VydmljZVByb3BzLnJvdXRpbmcucGF0aF0pXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoc2VydmljZVByb3BzLnJvdXRpbmc/Lmhvc3QpIHtcbiAgICAgIGNvbmRpdGlvbnMucHVzaChcbiAgICAgICAgTGlzdGVuZXJDb25kaXRpb24uaG9zdEhlYWRlcnMoW3NlcnZpY2VQcm9wcy5yb3V0aW5nLmhvc3RdKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZGl0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgYWRkU2VydmljZVNjYWxpbmcoXG4gICAgc2VydmljZU5hbWU6IHN0cmluZyxcbiAgICBzZXJ2aWNlUHJvcHM6IEVjc1NlcnZpY2VQcm9wcyxcbiAgICBzZXJ2aWNlOiBGYXJnYXRlU2VydmljZSB8IEVjMlNlcnZpY2VcbiAgKTogVGFyZ2V0VHJhY2tpbmdTY2FsaW5nUG9saWN5IHtcbiAgICBjb25zdCBzY2FsYWJsZVRhcmdldCA9IG5ldyBTY2FsYWJsZVRhcmdldChcbiAgICAgIHRoaXMsXG4gICAgICBgJHtzZXJ2aWNlTmFtZX1TY2FsYWJsZVRhcmdldGAsXG4gICAgICB7XG4gICAgICAgIHNlcnZpY2VOYW1lc3BhY2U6IFNlcnZpY2VOYW1lc3BhY2UuRUNTLFxuICAgICAgICByZXNvdXJjZUlkOiBgc2VydmljZS8ke3RoaXMuY2x1c3Rlci5jbHVzdGVyTmFtZX0vJHtzZXJ2aWNlLnNlcnZpY2VOYW1lfWAsXG4gICAgICAgIHNjYWxhYmxlRGltZW5zaW9uOiBcImVjczpzZXJ2aWNlOkRlc2lyZWRDb3VudFwiLFxuICAgICAgICBtaW5DYXBhY2l0eTogc2VydmljZVByb3BzLm1pbkNhcGFjaXR5ID8/IDIsXG4gICAgICAgIG1heENhcGFjaXR5OiBzZXJ2aWNlUHJvcHMubWF4Q2FwYWNpdHkgPz8gMTBcbiAgICAgIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBUYXJnZXRUcmFja2luZ1NjYWxpbmdQb2xpY3koXG4gICAgICB0aGlzLFxuICAgICAgYCR7c2VydmljZU5hbWV9U2NhbGluZ1BvbGljeWAsXG4gICAgICB7XG4gICAgICAgIHNjYWxpbmdUYXJnZXQ6IHNjYWxhYmxlVGFyZ2V0LFxuICAgICAgICBwcmVkZWZpbmVkTWV0cmljOlxuICAgICAgICAgIHNlcnZpY2VQcm9wcy5zY2FsaW5nVHlwZSA9PT0gU2NhbGluZ1R5cGUuTUVNT1JZXG4gICAgICAgICAgICA/IFByZWRlZmluZWRNZXRyaWMuRUNTX1NFUlZJQ0VfQVZFUkFHRV9NRU1PUllfVVRJTElaQVRJT05cbiAgICAgICAgICAgIDogUHJlZGVmaW5lZE1ldHJpYy5FQ1NfU0VSVklDRV9BVkVSQUdFX0NQVV9VVElMSVpBVElPTixcbiAgICAgICAgdGFyZ2V0VmFsdWU6IDUwLFxuICAgICAgICBzY2FsZUluQ29vbGRvd246IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgICBzY2FsZU91dENvb2xkb3duOiBEdXJhdGlvbi5zZWNvbmRzKDYwKVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIFZQQyBoYXMgTkFUIGdhdGV3YXlzLlxuICAgKiAtIEZvciBGamFsbCBWcGM6IHVzZXMgaGFzTmF0R2F0ZXdheXMgcHJvcGVydHlcbiAgICogLSBGb3Igb3RoZXIgVlBDczogY2hlY2tzIGlmIHByaXZhdGUgc3VibmV0cyBleGlzdCAoYXNzdW1lcyBOQVQgaWYgcHJlc2VudClcbiAgICovXG4gIHByaXZhdGUgdnBjSGFzTmF0R2F0ZXdheXMoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdnBjID0gdGhpcy5jbHVzdGVyLnZwYztcbiAgICBpZiAoXCJoYXNOYXRHYXRld2F5c1wiIGluIHZwYyAmJiB0eXBlb2YgdnBjLmhhc05hdEdhdGV3YXlzID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIHZwYy5oYXNOYXRHYXRld2F5cztcbiAgICB9XG4gICAgcmV0dXJuIHZwYy5wcml2YXRlU3VibmV0cy5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBEZXBsb3lhYmxlU2VydmljZSBvdXRwdXRzIGZvciBkZXBsb3ltZW50IGF1dG9tYXRpb24uXG4gICAqIEVhY2ggc2VydmljZSBnZXRzIGEgRGVwbG95YWJsZVNlcnZpY2Ugb3V0cHV0IHNvIHRoZSBkZXBsb3ltZW50IHNlcnZpY2VcbiAgICogY2FuIGZpbmQgYW5kIGRlcGxveSBhbGwgc2VydmljZXMgaW4gdGhlIGNsdXN0ZXIuXG4gICAqL1xuICBhZGREZXBsb3lhYmxlU2VydmljZU91dHB1dHMocHJvcHM6IEVjc0NsdXN0ZXJQcm9wcykge1xuICAgIGZvciAoY29uc3QgW3NlcnZpY2VOYW1lLCBzZXJ2aWNlRGF0YV0gb2YgdGhpcy5zZXJ2aWNlcykge1xuICAgICAgbmV3IENmbk91dHB1dChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7cHJvcHMuY2x1c3Rlck5hbWV9JHtzZXJ2aWNlTmFtZX1EZXBsb3lhYmxlU2VydmljZWAsXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6IGAke3Byb3BzLmNsdXN0ZXJOYW1lfSR7c2VydmljZU5hbWV9RGVwbG95YWJsZVNlcnZpY2VgLFxuICAgICAgICAgIGV4cG9ydE5hbWU6IGAke3Byb3BzLmNsdXN0ZXJOYW1lfSR7c2VydmljZU5hbWV9RGVwbG95YWJsZVNlcnZpY2VgLFxuICAgICAgICAgIHZhbHVlOiBzZXJ2aWNlRGF0YS5zZXJ2aWNlLnNlcnZpY2VBcm4sXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBEZXBsb3lhYmxlIEVDUyBTZXJ2aWNlIEFSTiBmb3IgJHtzZXJ2aWNlTmFtZX0gaW4gJHtwcm9wcy5jbHVzdGVyTmFtZX1gXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGNhcGFjaXR5IHByb3ZpZGVyIGZvciBhIHNlcnZpY2UuXG4gICAqIEVhY2ggc2VydmljZSBNVVNUIHNwZWNpZnkgaXRzIG93biBjYXBhY2l0eVByb3ZpZGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTZXJ2aWNlQ2FwYWNpdHlQcm92aWRlcihcbiAgICBzZXJ2aWNlUHJvcHM6IEVjc1NlcnZpY2VQcm9wc1xuICApOiBFY3NDYXBhY2l0eVByb3ZpZGVyIHtcbiAgICByZXR1cm4gc2VydmljZVByb3BzLmNhcGFjaXR5UHJvdmlkZXI7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgc2VydmljZSB1c2VzIGEgRmFyZ2F0ZSBjYXBhY2l0eSBwcm92aWRlci5cbiAgICovXG4gIHByaXZhdGUgaXNTZXJ2aWNlRmFyZ2F0ZShzZXJ2aWNlUHJvcHM6IEVjc1NlcnZpY2VQcm9wcyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRTZXJ2aWNlQ2FwYWNpdHlQcm92aWRlcihzZXJ2aWNlUHJvcHMpO1xuICAgIHJldHVybiBwcm92aWRlciA9PT0gXCJGQVJHQVRFXCIgfHwgcHJvdmlkZXIgPT09IFwiRkFSR0FURV9TUE9UXCI7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgc2VydmljZSB1c2VzIGFuIEVDMiBjYXBhY2l0eSBwcm92aWRlci5cbiAgICovXG4gIHByaXZhdGUgaXNTZXJ2aWNlRWMyKHNlcnZpY2VQcm9wczogRWNzU2VydmljZVByb3BzKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2VydmljZUNhcGFjaXR5UHJvdmlkZXIoc2VydmljZVByb3BzKSA9PT0gXCJFQzJcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYW4gU1NNIHBhdGggY29tcG9uZW50IGZvciBjb3JyZWN0bmVzcy5cbiAgICogU1NNIHBhcmFtZXRlciBwYXRocyBoYXZlIHNwZWNpZmljIGNvbnN0cmFpbnRzIHRoYXQgbXVzdCBiZSBlbmZvcmNlZC5cbiAgICpcbiAgICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBwYXRoIGNvbXBvbmVudCB0byB2YWxpZGF0ZVxuICAgKiBAcGFyYW0gZmllbGROYW1lIC0gTmFtZSBvZiB0aGUgZmllbGQgZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGNvbXBvbmVudCBpcyBpbnZhbGlkXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlU3NtUGF0aENvbXBvbmVudChjb21wb25lbnQ6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWNvbXBvbmVudCB8fCBjb21wb25lbnQudHJpbSgpID09PSBcIlwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZmllbGROYW1lfSBjYW5ub3QgYmUgZW1wdHkgZm9yIFNTTSBwYXRoIGRlcml2YXRpb25gKTtcbiAgICB9XG4gICAgaWYgKGNvbXBvbmVudC5pbmNsdWRlcyhcIi9cIikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7ZmllbGROYW1lfSBjYW5ub3QgY29udGFpbiBmb3J3YXJkIHNsYXNoZXMgKC8pLiBJbnZhbGlkIHZhbHVlOiBcIiR7Y29tcG9uZW50fVwiLmBcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIFNTTSBwYXJhbWV0ZXIgbmFtZSBoaWVyYXJjaHkgbGFiZWxzIGhhdmUgYSBtYXggbGVuZ3RoIG9mIDIwNDgsIGJ1dCB3ZSB1c2UgYSBtb3JlXG4gICAgLy8gcmVhc29uYWJsZSBsaW1pdCBzaW5jZSBlYWNoIGNvbXBvbmVudCBpcyBqdXN0IG9uZSBwYXJ0IG9mIHRoZSBwYXRoXG4gICAgaWYgKGNvbXBvbmVudC5sZW5ndGggPiAxMjgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtmaWVsZE5hbWV9IGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggKDEyOCBjaGFyYWN0ZXJzKS5gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVyaXZlcyB0aGUgU1NNIHNlY3JldHMgcGF0aCBmb3IgYSBzZXJ2aWNlLlxuICAgKiBVc2VzIGV4cGxpY2l0IHBhdGggaWYgcHJvdmlkZWQsIG90aGVyd2lzZSBkZXJpdmVzIGZyb20gYXBwL2NsdXN0ZXIvc2VydmljZSBuYW1lcy5cbiAgICpcbiAgICogQHBhcmFtIHNlcnZpY2VOYW1lIC0gVGhlIHNlcnZpY2UgbmFtZVxuICAgKiBAcGFyYW0gZXhwbGljaXRQYXRoIC0gT3B0aW9uYWwgZXhwbGljaXQgcGF0aCBvdmVycmlkZVxuICAgKiBAcmV0dXJucyBUaGUgU1NNIHNlY3JldHMgcGF0aCAoZS5nLiwgL215YXBwL0FwaUNsdXN0ZXIvdXNlcnMpXG4gICAqL1xuICAvKipcbiAgICogQ29sbGVjdHMgYWxsIFNlY3JldHMgTWFuYWdlciBzZWNyZXQgbmFtZXMgZnJvbSBzZWNyZXRzSW1wb3J0IGFjcm9zcyBhbGwgc2VydmljZXMuXG4gICAqIFVzZWQgdG8gc2NvcGUgSUFNIHBlcm1pc3Npb25zIGZvciBsZWFzdC1wcml2aWxlZ2UgYWNjZXNzLlxuICAgKi9cbiAgcHJpdmF0ZSBjb2xsZWN0U2VjcmV0c01hbmFnZXJTZWNyZXROYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc2VjcmV0TmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IHNlcnZpY2Ugb2YgdGhpcy5wcm9wcy5zZXJ2aWNlcykge1xuICAgICAgZm9yIChjb25zdCBjb250YWluZXIgb2Ygc2VydmljZS5jb250YWluZXJzKSB7XG4gICAgICAgIGlmIChjb250YWluZXIuc2VjcmV0c0ltcG9ydCkge1xuICAgICAgICAgIGZvciAoY29uc3Qgc2VjcmV0SW1wb3J0IG9mIE9iamVjdC52YWx1ZXMoY29udGFpbmVyLnNlY3JldHNJbXBvcnQpKSB7XG4gICAgICAgICAgICBzZWNyZXROYW1lcy5hZGQoc2VjcmV0SW1wb3J0Lm5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuZnJvbShzZWNyZXROYW1lcyk7XG4gIH1cblxuICBwcml2YXRlIGRlcml2ZVNzbVNlY3JldHNQYXRoKFxuICAgIHNlcnZpY2VOYW1lOiBzdHJpbmcsXG4gICAgZXhwbGljaXRQYXRoPzogc3RyaW5nXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKGV4cGxpY2l0UGF0aCkge1xuICAgICAgcmV0dXJuIGV4cGxpY2l0UGF0aDtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBOYW1lID0gdGhpcy5wcm9wcy5hcHBOYW1lO1xuICAgIGlmICghYXBwTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgU2VydmljZSAnJHtzZXJ2aWNlTmFtZX0nIGhhcyBzZWNyZXRzIGRlZmluZWQgYnV0IG5vIHNzbVNlY3JldHNQYXRoIGlzIHNldCBgICtcbiAgICAgICAgICBgYW5kIGFwcE5hbWUgaXMgbm90IGNvbmZpZ3VyZWQgb24gdGhlIGNsdXN0ZXIuIGAgK1xuICAgICAgICAgIGBFaXRoZXIgc2V0IHNzbVNlY3JldHNQYXRoIG9uIHRoZSBzZXJ2aWNlLCBvciBzZXQgYXBwTmFtZSBvbiB0aGUgY2x1c3RlciBwcm9wcyBgICtcbiAgICAgICAgICBgdG8gZW5hYmxlIGF1dG9tYXRpYyBwYXRoIGRlcml2YXRpb24gKC88YXBwTmFtZT4vPGNsdXN0ZXJOYW1lPi88c2VydmljZU5hbWU+KS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWRhdGVTc21QYXRoQ29tcG9uZW50KGFwcE5hbWUsIFwiYXBwTmFtZVwiKTtcbiAgICB0aGlzLnZhbGlkYXRlU3NtUGF0aENvbXBvbmVudCh0aGlzLnByb3BzLmNsdXN0ZXJOYW1lLCBcImNsdXN0ZXJOYW1lXCIpO1xuICAgIHRoaXMudmFsaWRhdGVTc21QYXRoQ29tcG9uZW50KHNlcnZpY2VOYW1lLCBcInNlcnZpY2VOYW1lXCIpO1xuXG4gICAgcmV0dXJuIGAvJHthcHBOYW1lfS8ke3RoaXMucHJvcHMuY2x1c3Rlck5hbWV9LyR7c2VydmljZU5hbWV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSB1bmlxdWUga2V5IGZvciBFQzIgY29uZmlnIChmb3IgQVNHIGRlZHVwbGljYXRpb24pLlxuICAgKiBTZXJ2aWNlcyB3aXRoIG1hdGNoaW5nIGtleXMgc2hhcmUgYW4gQVNHLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFYzJDb25maWdLZXkoZWMyQ29uZmlnOiBFYzJDYXBhY2l0eUNvbmZpZyk6IHN0cmluZyB7XG4gICAgY29uc3QgaW5zdGFuY2VUeXBlID0gZWMyQ29uZmlnLmluc3RhbmNlVHlwZSA/PyBcInQzLm1pY3JvXCI7XG4gICAgY29uc3QgYW1pSGFyZHdhcmVUeXBlID0gZWMyQ29uZmlnLmFtaUhhcmR3YXJlVHlwZSA/PyBcIlNUQU5EQVJEXCI7XG4gICAgcmV0dXJuIGAke2luc3RhbmNlVHlwZX0tJHthbWlIYXJkd2FyZVR5cGV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIG9yIGNyZWF0ZXMgYW4gQVNHIGNhcGFjaXR5IHByb3ZpZGVyIGZvciBhIHNlcnZpY2UuXG4gICAqIFNlcnZpY2VzIHdpdGggbWF0Y2hpbmcgRUMyIGNvbmZpZ3Mgc2hhcmUgdGhlIHNhbWUgQVNHLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRPckNyZWF0ZUFzZ0NhcGFjaXR5UHJvdmlkZXIoXG4gICAgc2VydmljZVByb3BzOiBFY3NTZXJ2aWNlUHJvcHNcbiAgKTogQXNnQ2FwYWNpdHlQcm92aWRlciB7XG4gICAgY29uc3QgZWMyQ29uZmlnID0gc2VydmljZVByb3BzLmVjMkNvbmZpZyA/PyB7fTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEVjMkNvbmZpZ0tleShlYzJDb25maWcpO1xuXG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmFzZ0NhcGFjaXR5UHJvdmlkZXJzLmdldChrZXkpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNlVHlwZSA9IGVjMkNvbmZpZy5pbnN0YW5jZVR5cGUgPz8gXCJ0My5taWNyb1wiO1xuICAgIGNvbnN0IGFtaUhhcmR3YXJlVHlwZSA9IGVjMkNvbmZpZy5hbWlIYXJkd2FyZVR5cGVcbiAgICAgID8gZWMyQ29uZmlnLmFtaUhhcmR3YXJlVHlwZSA9PT0gXCJTVEFOREFSRFwiXG4gICAgICAgID8gQW1pSGFyZHdhcmVUeXBlLlNUQU5EQVJEXG4gICAgICAgIDogQW1pSGFyZHdhcmVUeXBlLkFSTVxuICAgICAgOiBpbmZlckFtaUhhcmR3YXJlVHlwZShpbnN0YW5jZVR5cGUpO1xuICAgIGNvbnN0IG1pbkNhcGFjaXR5ID0gZWMyQ29uZmlnLm1pbkNhcGFjaXR5ID8/IDI7XG4gICAgY29uc3QgbWF4Q2FwYWNpdHkgPSBlYzJDb25maWcubWF4Q2FwYWNpdHkgPz8gMztcblxuICAgIGNvbnN0IGFzZ1NlY3VyaXR5R3JvdXAgPSBuZXcgU2VjdXJpdHlHcm91cChcbiAgICAgIHRoaXMsXG4gICAgICBgJHtrZXkucmVwbGFjZSgvW15hLXpBLVowLTldL2csIFwiXCIpfUFzZ1NlY3VyaXR5R3JvdXBgLFxuICAgICAge1xuICAgICAgICB2cGM6IHRoaXMuY2x1c3Rlci52cGMsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgU2VjdXJpdHkgZ3JvdXAgZm9yICR7a2V5fSBhdXRvIHNjYWxpbmcgZ3JvdXBgXG4gICAgICB9XG4gICAgKTtcblxuICAgIGlmICh0aGlzLmRpcmVjdEFjY2Vzc0VuYWJsZWQpIHtcbiAgICAgIGZvciAoY29uc3Qgc2VydmljZSBvZiB0aGlzLnByb3BzLnNlcnZpY2VzKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU2VydmljZUVjMihzZXJ2aWNlKSkge1xuICAgICAgICAgIGZvciAoY29uc3QgY29udGFpbmVyIG9mIHNlcnZpY2UuY29udGFpbmVycykge1xuICAgICAgICAgICAgaWYgKGNvbnRhaW5lci5wb3J0KSB7XG4gICAgICAgICAgICAgIGFzZ1NlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUoXG4gICAgICAgICAgICAgICAgUGVlci5hbnlJcHY0KCksXG4gICAgICAgICAgICAgICAgUG9ydC50Y3AoY29udGFpbmVyLnBvcnQpLFxuICAgICAgICAgICAgICAgIGBEaXJlY3QgYWNjZXNzIHRvIGNvbnRhaW5lciBwb3J0ICR7Y29udGFpbmVyLnBvcnR9YFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFzZyA9IG5ldyBBdXRvU2NhbGluZ0dyb3VwKFxuICAgICAgdGhpcyxcbiAgICAgIGAke2tleS5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZywgXCJcIil9QXV0b1NjYWxpbmdHcm91cGAsXG4gICAgICB7XG4gICAgICAgIGF1dG9TY2FsaW5nR3JvdXBOYW1lOiBgJHt0aGlzLnByb3BzLmNsdXN0ZXJOYW1lfS0ke2tleS5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZywgXCJcIil9LUFzZ2AsXG4gICAgICAgIHZwYzogdGhpcy5jbHVzdGVyLnZwYyxcbiAgICAgICAgdnBjU3VibmV0czoge1xuICAgICAgICAgIHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGUuUFVCTElDXG4gICAgICAgIH0sXG4gICAgICAgIHNlY3VyaXR5R3JvdXA6IGFzZ1NlY3VyaXR5R3JvdXAsXG4gICAgICAgIG1pbkNhcGFjaXR5LFxuICAgICAgICBtYXhDYXBhY2l0eSxcbiAgICAgICAgaW5zdGFuY2VUeXBlOiBuZXcgSW5zdGFuY2VUeXBlKGluc3RhbmNlVHlwZSksXG4gICAgICAgIGNhcGFjaXR5UmViYWxhbmNlOiB0cnVlLFxuICAgICAgICBpbnN0YW5jZU1vbml0b3Jpbmc6IE1vbml0b3JpbmcuQkFTSUMsXG4gICAgICAgIG1hY2hpbmVJbWFnZTogRWNzT3B0aW1pemVkSW1hZ2UuYW1hem9uTGludXgyKGFtaUhhcmR3YXJlVHlwZSlcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgQXNnQ2FwYWNpdHlQcm92aWRlcihcbiAgICAgIHRoaXMsXG4gICAgICBgJHtrZXkucmVwbGFjZSgvW15hLXpBLVowLTldL2csIFwiXCIpfUFzZ0NhcGFjaXR5UHJvdmlkZXJgLFxuICAgICAge1xuICAgICAgICBhdXRvU2NhbGluZ0dyb3VwOiBhc2csXG4gICAgICAgIGVuYWJsZU1hbmFnZWREcmFpbmluZzogdHJ1ZSxcbiAgICAgICAgZW5hYmxlTWFuYWdlZFRlcm1pbmF0aW9uUHJvdGVjdGlvbjogZmFsc2VcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5jbHVzdGVyLmFkZEFzZ0NhcGFjaXR5UHJvdmlkZXIocHJvdmlkZXIpO1xuICAgIHRoaXMuYXNnQ2FwYWNpdHlQcm92aWRlcnMuc2V0KGtleSwgcHJvdmlkZXIpO1xuXG4gICAgaWYgKCF0aGlzLmF1dG9TY2FsaW5nR3JvdXApIHtcbiAgICAgIHRoaXMuYXV0b1NjYWxpbmdHcm91cCA9IGFzZztcbiAgICB9XG4gICAgaWYgKCF0aGlzLmFzZ1NlY3VyaXR5R3JvdXApIHtcbiAgICAgIHRoaXMuYXNnU2VjdXJpdHlHcm91cCA9IGFzZ1NlY3VyaXR5R3JvdXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3ZpZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbnkgc2VydmljZSBpbiB0aGUgY2x1c3RlciB1c2VzIGEgRmFyZ2F0ZSBjYXBhY2l0eSBwcm92aWRlci5cbiAgICovXG4gIHByaXZhdGUgYW55U2VydmljZVVzZXNGYXJnYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnNlcnZpY2VzLnNvbWUoKHMpID0+IHRoaXMuaXNTZXJ2aWNlRmFyZ2F0ZShzKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGFueSBzZXJ2aWNlIGluIHRoZSBjbHVzdGVyIHVzZXMgYW4gRUMyIGNhcGFjaXR5IHByb3ZpZGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBhbnlTZXJ2aWNlVXNlc0VjMigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zZXJ2aWNlcy5zb21lKChzKSA9PiB0aGlzLmlzU2VydmljZUVjMihzKSk7XG4gIH1cblxuICBhZGRDbHVzdGVyKHByb3BzOiBFY3NDbHVzdGVyUHJvcHMpIHtcbiAgICBjb25zdCBuZWVkc0ZhcmdhdGUgPSB0aGlzLmFueVNlcnZpY2VVc2VzRmFyZ2F0ZSgpO1xuXG4gICAgdGhpcy5jbHVzdGVyID0gbmV3IENka0NsdXN0ZXIodGhpcywgYCR7cHJvcHMuY2x1c3Rlck5hbWV9YCwge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBjbHVzdGVyTmFtZTogcHJvcHMuY2x1c3Rlck5hbWUsXG4gICAgICBjb250YWluZXJJbnNpZ2h0c1YyOiBDb250YWluZXJJbnNpZ2h0cy5FTkFCTEVELFxuICAgICAgZW5hYmxlRmFyZ2F0ZUNhcGFjaXR5UHJvdmlkZXJzOiBuZWVkc0ZhcmdhdGVcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7cHJvcHMuY2x1c3Rlck5hbWV9RGVwbG95YWJsZUNsdXN0ZXJgLCB7XG4gICAgICBrZXk6IGAke3Byb3BzLmNsdXN0ZXJOYW1lfURlcGxveWFibGVDbHVzdGVyYCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3Byb3BzLmNsdXN0ZXJOYW1lfURlcGxveWFibGVDbHVzdGVyYCxcbiAgICAgIHZhbHVlOiB0aGlzLmNsdXN0ZXIuY2x1c3RlckFyblxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtwcm9wcy5jbHVzdGVyTmFtZX1DbHVzdGVyQXJuYCwge1xuICAgICAga2V5OiBgJHtwcm9wcy5jbHVzdGVyTmFtZX1DbHVzdGVyQXJuYCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3Byb3BzLmNsdXN0ZXJOYW1lfUNsdXN0ZXJBcm5gLFxuICAgICAgdmFsdWU6IHRoaXMuY2x1c3Rlci5jbHVzdGVyQXJuLFxuICAgICAgZGVzY3JpcHRpb246IGBFQ1MgQ2x1c3RlciBBUk4gZm9yICR7cHJvcHMuY2x1c3Rlck5hbWV9YFxuICAgIH0pO1xuICB9XG5cbiAgLy8gTm90ZTogYWRkQXV0b1NjYWxpbmdHcm91cCByZW1vdmVkIC0gQVNHcyBhcmUgbm93IGNyZWF0ZWQgcGVyLXNlcnZpY2UgdmlhIGdldE9yQ3JlYXRlQXNnQ2FwYWNpdHlQcm92aWRlclxuXG4gIGFkZExvYWRCYWxhbmNlcihwcm9wczogRWNzQ2x1c3RlclByb3BzKSB7XG4gICAgY29uc3QgZGVmYXVsdExvYWRCYWxhbmNlck5hbWUgPSBgJHtwcm9wcy5jbHVzdGVyTmFtZX1Mb2FkQmFsYW5jZXJgO1xuICAgIGNvbnN0IHN1cHBvcnRlZE5hbWVMZW5ndGggPSAzMjtcblxuICAgIGxldCB0cnVuY2F0ZWRMb2FkQmFsYW5jZXJOYW1lID1cbiAgICAgIGRlZmF1bHRMb2FkQmFsYW5jZXJOYW1lLmxlbmd0aCA+IHN1cHBvcnRlZE5hbWVMZW5ndGhcbiAgICAgICAgPyBkZWZhdWx0TG9hZEJhbGFuY2VyTmFtZS5zdWJzdHJpbmcoMCwgc3VwcG9ydGVkTmFtZUxlbmd0aClcbiAgICAgICAgOiBkZWZhdWx0TG9hZEJhbGFuY2VyTmFtZTtcblxuICAgIHRydW5jYXRlZExvYWRCYWxhbmNlck5hbWUgPSB0cnVuY2F0ZWRMb2FkQmFsYW5jZXJOYW1lLnJlcGxhY2UoLy0rJC8sIFwiXCIpO1xuXG4gICAgY29uc3QgaXNJbnRlcm5hbCA9IHByb3BzLmNsdXN0ZXI/LmxvYWRCYWxhbmNlciA9PT0gXCJpbnRlcm5hbFwiO1xuXG4gICAgY29uc3QgaGFzRWMyU2VydmljZXMgPSB0aGlzLmFueVNlcnZpY2VVc2VzRWMyKCk7XG5cbiAgICBpZiAoaGFzRWMyU2VydmljZXMpIHtcbiAgICAgIHRoaXMubG9hZEJhbGFuY2VyU2VjdXJpdHlHcm91cCA9IG5ldyBTZWN1cml0eUdyb3VwKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHtwcm9wcy5jbHVzdGVyTmFtZX1Mb2FkQmFsYW5jZXJTZWN1cml0eUdyb3VwYCxcbiAgICAgICAge1xuICAgICAgICAgIHZwYzogdGhpcy5jbHVzdGVyLnZwYyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYFNlY3VyaXR5IGdyb3VwIGZvciB0aGUgJHtwcm9wcy5jbHVzdGVyTmFtZX0gbG9hZCBiYWxhbmNlcmBcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgaWYgKHRoaXMuYXNnU2VjdXJpdHlHcm91cCkge1xuICAgICAgICB0aGlzLmxvYWRCYWxhbmNlclNlY3VyaXR5R3JvdXAuY29ubmVjdGlvbnMuYWxsb3dUbyhcbiAgICAgICAgICB0aGlzLmFzZ1NlY3VyaXR5R3JvdXAsXG4gICAgICAgICAgUG9ydC5hbGxUY3AoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmFzZ1NlY3VyaXR5R3JvdXAuY29ubmVjdGlvbnMuYWxsb3dGcm9tKFxuICAgICAgICAgIHRoaXMubG9hZEJhbGFuY2VyU2VjdXJpdHlHcm91cCxcbiAgICAgICAgICBQb3J0LnRjcFJhbmdlKDQ5MTUyLCA2NTUzNSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2FkQmFsYW5jZXIgPSBuZXcgQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGAke3Byb3BzLmNsdXN0ZXJOYW1lfUxvYWRCYWxhbmNlcmAsXG4gICAgICAgIHtcbiAgICAgICAgICB2cGM6IHRoaXMuY2x1c3Rlci52cGMsXG4gICAgICAgICAgaW50ZXJuZXRGYWNpbmc6ICFpc0ludGVybmFsLFxuICAgICAgICAgIHNlY3VyaXR5R3JvdXA6IHRoaXMubG9hZEJhbGFuY2VyU2VjdXJpdHlHcm91cCxcbiAgICAgICAgICBsb2FkQmFsYW5jZXJOYW1lOiB0cnVuY2F0ZWRMb2FkQmFsYW5jZXJOYW1lLFxuICAgICAgICAgIHZwY1N1Ym5ldHM6IHtcbiAgICAgICAgICAgIHN1Ym5ldFR5cGU6IGlzSW50ZXJuYWxcbiAgICAgICAgICAgICAgPyBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1NcbiAgICAgICAgICAgICAgOiBTdWJuZXRUeXBlLlBVQkxJQ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2FkQmFsYW5jZXIgPSBuZXcgQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGAke3Byb3BzLmNsdXN0ZXJOYW1lfUxvYWRCYWxhbmNlcmAsXG4gICAgICAgIHtcbiAgICAgICAgICB2cGM6IHRoaXMuY2x1c3Rlci52cGMsXG4gICAgICAgICAgaW50ZXJuZXRGYWNpbmc6ICFpc0ludGVybmFsLFxuICAgICAgICAgIGxvYWRCYWxhbmNlck5hbWU6IHRydW5jYXRlZExvYWRCYWxhbmNlck5hbWUsXG4gICAgICAgICAgdnBjU3VibmV0czoge1xuICAgICAgICAgICAgc3VibmV0VHlwZTogaXNJbnRlcm5hbFxuICAgICAgICAgICAgICA/IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTU1xuICAgICAgICAgICAgICA6IFN1Ym5ldFR5cGUuUFVCTElDXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7cHJvcHMuY2x1c3Rlck5hbWV9TG9hZEJhbGFuY2VyRG5zTmFtZWAsIHtcbiAgICAgIGtleTogYCR7cHJvcHMuY2x1c3Rlck5hbWV9TG9hZEJhbGFuY2VyRG5zTmFtZWAsXG4gICAgICBleHBvcnROYW1lOiBgJHtwcm9wcy5jbHVzdGVyTmFtZX1Mb2FkQmFsYW5jZXJEbnNOYW1lYCxcbiAgICAgIHZhbHVlOiB0aGlzLmxvYWRCYWxhbmNlci5sb2FkQmFsYW5jZXJEbnNOYW1lXG4gICAgfSk7XG5cbiAgICBjb25zdCBjdXN0b21Eb21haW4gPVxuICAgICAgcHJvcHMuY2x1c3Rlcj8uZG9tYWluIHx8IHByb3BzLmNsdXN0ZXI/LmRvbWFpbkNvbmZpZz8uZG9tYWluTmFtZTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7cHJvcHMuY2x1c3Rlck5hbWV9TG9hZEJhbGFuY2VyVXJsYCwge1xuICAgICAga2V5OiBgJHtwcm9wcy5jbHVzdGVyTmFtZX1Mb2FkQmFsYW5jZXJVcmxgLFxuICAgICAgZXhwb3J0TmFtZTogYCR7cHJvcHMuY2x1c3Rlck5hbWV9TG9hZEJhbGFuY2VyVXJsYCxcbiAgICAgIHZhbHVlOiBjdXN0b21Eb21haW5cbiAgICAgICAgPyBgaHR0cHM6Ly8ke2N1c3RvbURvbWFpbn1gXG4gICAgICAgIDogYGh0dHA6Ly8ke3RoaXMubG9hZEJhbGFuY2VyLmxvYWRCYWxhbmNlckRuc05hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBgTG9hZCBCYWxhbmNlciBVUkwgZm9yICR7cHJvcHMuY2x1c3Rlck5hbWV9YFxuICAgIH0pO1xuXG4gICAgLy8gRXhwb3J0IGxvYWQgYmFsYW5jZXIgQVJOIGZvciBtb25pdG9yaW5nXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtwcm9wcy5jbHVzdGVyTmFtZX1Mb2FkQmFsYW5jZXJBcm5gLCB7XG4gICAgICBrZXk6IGAke3Byb3BzLmNsdXN0ZXJOYW1lfUxvYWRCYWxhbmNlckFybmAsXG4gICAgICBleHBvcnROYW1lOiBgJHtwcm9wcy5jbHVzdGVyTmFtZX1Mb2FkQmFsYW5jZXJBcm5gLFxuICAgICAgdmFsdWU6IHRoaXMubG9hZEJhbGFuY2VyLmxvYWRCYWxhbmNlckFybixcbiAgICAgIGRlc2NyaXB0aW9uOiBgTG9hZCBCYWxhbmNlciBBUk4gZm9yICR7cHJvcHMuY2x1c3Rlck5hbWV9YFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREaXJlY3RBY2Nlc3NPdXRwdXRzKHByb3BzOiBFY3NDbHVzdGVyUHJvcHMpIHtcbiAgICBpZiAoIXRoaXMuZGlyZWN0QWNjZXNzRW5hYmxlZCB8fCAhdGhpcy5hdXRvU2NhbGluZ0dyb3VwKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250YWluZXJQb3J0ID1cbiAgICAgIHByb3BzLnNlcnZpY2VzLmZsYXRNYXAoKHMpID0+IHMuY29udGFpbmVycykuZmluZCgoYykgPT4gYy5wb3J0KT8ucG9ydCB8fFxuICAgICAgMzAwMDtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7cHJvcHMuY2x1c3Rlck5hbWV9QXV0b1NjYWxpbmdHcm91cE5hbWVgLCB7XG4gICAgICBrZXk6IGAke3Byb3BzLmNsdXN0ZXJOYW1lfUF1dG9TY2FsaW5nR3JvdXBOYW1lYCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3Byb3BzLmNsdXN0ZXJOYW1lfUF1dG9TY2FsaW5nR3JvdXBOYW1lYCxcbiAgICAgIHZhbHVlOiB0aGlzLmF1dG9TY2FsaW5nR3JvdXAuYXV0b1NjYWxpbmdHcm91cE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogYFJ1bjogYXdzIGF1dG9zY2FsaW5nIGRlc2NyaWJlLWF1dG8tc2NhbGluZy1ncm91cHMgLS1hdXRvLXNjYWxpbmctZ3JvdXAtbmFtZXMgPG5hbWU+IHRvIGZpbmQgaW5zdGFuY2UgSVBgXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3Byb3BzLmNsdXN0ZXJOYW1lfURpcmVjdEFjY2Vzc1BvcnRgLCB7XG4gICAgICBrZXk6IGAke3Byb3BzLmNsdXN0ZXJOYW1lfURpcmVjdEFjY2Vzc1BvcnRgLFxuICAgICAgZXhwb3J0TmFtZTogYCR7cHJvcHMuY2x1c3Rlck5hbWV9RGlyZWN0QWNjZXNzUG9ydGAsXG4gICAgICB2YWx1ZTogU3RyaW5nKGNvbnRhaW5lclBvcnQpLFxuICAgICAgZGVzY3JpcHRpb246IGBBY2Nlc3MgeW91ciBhcHAgYXQgaHR0cDovLzxFQzItUFVCTElDLUlQPjoke2NvbnRhaW5lclBvcnR9YFxuICAgIH0pO1xuICB9XG5cbiAgYWRkTG9hZEJhbGFuY2VyTGlzdGVuZXIocHJvcHM6IEVjc0NsdXN0ZXJQcm9wcykge1xuICAgIGlmICghdGhpcy5sb2FkQmFsYW5jZXIpIHJldHVybjtcblxuICAgIGNvbnN0IHBvcnQgPSB0aGlzLmNlcnRpZmljYXRlID8gNDQzIDogODA7XG5cbiAgICBjb25zdCBkZWZhdWx0QWN0aW9uID0gTGlzdGVuZXJBY3Rpb24uZml4ZWRSZXNwb25zZSg0MDQsIHtcbiAgICAgIGNvbnRlbnRUeXBlOiBcInRleHQvcGxhaW5cIixcbiAgICAgIG1lc3NhZ2VCb2R5OiBcIk5vdCBGb3VuZFwiXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5jZXJ0aWZpY2F0ZSkge1xuICAgICAgdGhpcy5sb2FkQmFsYW5jZXJMaXN0ZW5lciA9IHRoaXMubG9hZEJhbGFuY2VyLmFkZExpc3RlbmVyKFxuICAgICAgICBgJHtwcm9wcy5jbHVzdGVyTmFtZX1MaXN0ZW5lcmAsXG4gICAgICAgIHtcbiAgICAgICAgICBwb3J0LFxuICAgICAgICAgIGNlcnRpZmljYXRlczogW3RoaXMuY2VydGlmaWNhdGVdLFxuICAgICAgICAgIGRlZmF1bHRBY3Rpb25cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2FkQmFsYW5jZXJMaXN0ZW5lciA9IHRoaXMubG9hZEJhbGFuY2VyLmFkZExpc3RlbmVyKFxuICAgICAgICBgJHtwcm9wcy5jbHVzdGVyTmFtZX1MaXN0ZW5lcmAsXG4gICAgICAgIHtcbiAgICAgICAgICBwb3J0LFxuICAgICAgICAgIGRlZmF1bHRBY3Rpb25cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBhZGRIb3N0ZWRab25lKHByb3BzOiBFY3NDbHVzdGVyUHJvcHMpIHtcbiAgICBjb25zdCBkb21haW5Db25maWcgPSBwcm9wcy5jbHVzdGVyPy5kb21haW5Db25maWc7XG4gICAgY29uc3Qgc2ltcGxlRG9tYWluID0gcHJvcHMuY2x1c3Rlcj8uZG9tYWluO1xuXG4gICAgaWYgKCFkb21haW5Db25maWcgJiYgIXNpbXBsZURvbWFpbikgcmV0dXJuO1xuXG4gICAgY29uc3QgZG9tYWluTmFtZSA9IGRvbWFpbkNvbmZpZz8uZG9tYWluTmFtZSB8fCBzaW1wbGVEb21haW4hO1xuXG4gICAgaWYgKCFkb21haW5Db25maWc/Lmhvc3RlZFpvbmUpIHtcbiAgICAgIGNvbnN0IGhvc3RlZFpvbmUgPSBuZXcgRmphbGxIb3N0ZWRab25lKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHtwcm9wcy5jbHVzdGVyTmFtZX1Ib3N0ZWRab25lYCxcbiAgICAgICAge1xuICAgICAgICAgIHpvbmVOYW1lOiBkb21haW5OYW1lXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIHRoaXMuaG9zdGVkWm9uZSA9IGhvc3RlZFpvbmUuZ2V0SW50ZXJuYWxIb3N0ZWRab25lKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaG9zdGVkWm9uZSA9IGRvbWFpbkNvbmZpZy5ob3N0ZWRab25lLmdldEludGVybmFsSG9zdGVkWm9uZSgpO1xuICAgIH1cblxuICAgIGlmICghZG9tYWluQ29uZmlnPy5jZXJ0aWZpY2F0ZSkge1xuICAgICAgdGhpcy5jZXJ0aWZpY2F0ZSA9IG5ldyBDZXJ0aWZpY2F0ZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7cHJvcHMuY2x1c3Rlck5hbWV9Q2VydGlmaWNhdGVgLFxuICAgICAgICB7XG4gICAgICAgICAgZG9tYWluTmFtZSxcbiAgICAgICAgICB2YWxpZGF0aW9uOiBDZXJ0aWZpY2F0ZVZhbGlkYXRpb24uZnJvbURucyh0aGlzLmhvc3RlZFpvbmUpXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGRvbWFpbkNvbmZpZykge1xuICAgICAgY29uc3QgbGF0ZW5jeUNvbmZpZyA9IGRvbWFpbkNvbmZpZyBhcyBMYXRlbmN5RG9tYWluQ29uZmlnO1xuICAgICAgY29uc3Qgd2VpZ2h0ZWRDb25maWcgPSBkb21haW5Db25maWcgYXMgV2VpZ2h0ZWREb21haW5Db25maWc7XG4gICAgICBjb25zdCBnZW9Db25maWcgPSBkb21haW5Db25maWcgYXMgR2VvTG9jYXRpb25Eb21haW5Db25maWc7XG5cbiAgICAgIGNvbnN0IGhhc1JvdXRpbmdQb2xpY3k6IGJvb2xlYW4gPVxuICAgICAgICAhIWxhdGVuY3lDb25maWc/LnJlZ2lvbiB8fFxuICAgICAgICB3ZWlnaHRlZENvbmZpZz8ud2VpZ2h0ICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgISFnZW9Db25maWc/Lmdlb0xvY2F0aW9uO1xuXG4gICAgICBsZXQgc2V0SWRlbnRpZmllciA9IGRvbWFpbkNvbmZpZy5zZXRJZGVudGlmaWVyO1xuICAgICAgaWYgKGhhc1JvdXRpbmdQb2xpY3kgJiYgIXNldElkZW50aWZpZXIpIHtcbiAgICAgICAgaWYgKGxhdGVuY3lDb25maWc/LnJlZ2lvbikge1xuICAgICAgICAgIHNldElkZW50aWZpZXIgPSBgJHtwcm9wcy5jbHVzdGVyTmFtZX0ke2xhdGVuY3lDb25maWcucmVnaW9ufWA7XG4gICAgICAgIH0gZWxzZSBpZiAod2VpZ2h0ZWRDb25maWc/LndlaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2V0SWRlbnRpZmllciA9IGAke3Byb3BzLmNsdXN0ZXJOYW1lfVdlaWdodCR7d2VpZ2h0ZWRDb25maWcud2VpZ2h0fWA7XG4gICAgICAgIH0gZWxzZSBpZiAoZ2VvQ29uZmlnPy5nZW9Mb2NhdGlvbikge1xuICAgICAgICAgIHNldElkZW50aWZpZXIgPSBgJHtwcm9wcy5jbHVzdGVyTmFtZX1HZW9gO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmxvYWRCYWxhbmNlcikge1xuICAgICAgICB0aGlzLmFSZWNvcmQgPSBuZXcgQVJlY29yZCh0aGlzLCBgJHtwcm9wcy5jbHVzdGVyTmFtZX1BUmVjb3JkYCwge1xuICAgICAgICAgIHJlY29yZE5hbWU6IGRvbWFpbk5hbWUsXG4gICAgICAgICAgem9uZTogdGhpcy5ob3N0ZWRab25lLFxuICAgICAgICAgIHRhcmdldDogUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgICAgIG5ldyBMb2FkQmFsYW5jZXJUYXJnZXQodGhpcy5sb2FkQmFsYW5jZXIsIHtcbiAgICAgICAgICAgICAgZXZhbHVhdGVUYXJnZXRIZWFsdGg6IGhhc1JvdXRpbmdQb2xpY3lcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKSxcbiAgICAgICAgICByZWdpb246IGxhdGVuY3lDb25maWc/LnJlZ2lvbixcbiAgICAgICAgICB3ZWlnaHQ6IHdlaWdodGVkQ29uZmlnPy53ZWlnaHQsXG4gICAgICAgICAgZ2VvTG9jYXRpb246IGdlb0NvbmZpZz8uZ2VvTG9jYXRpb24sXG4gICAgICAgICAgc2V0SWRlbnRpZmllcjogc2V0SWRlbnRpZmllclxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNpbXBsZURvbWFpbiAmJiB0aGlzLmxvYWRCYWxhbmNlcikge1xuICAgICAgdGhpcy5hUmVjb3JkID0gbmV3IEFSZWNvcmQodGhpcywgYCR7cHJvcHMuY2x1c3Rlck5hbWV9QVJlY29yZGAsIHtcbiAgICAgICAgcmVjb3JkTmFtZTogZG9tYWluTmFtZSxcbiAgICAgICAgem9uZTogdGhpcy5ob3N0ZWRab25lLFxuICAgICAgICB0YXJnZXQ6IFJlY29yZFRhcmdldC5mcm9tQWxpYXMoXG4gICAgICAgICAgbmV3IExvYWRCYWxhbmNlclRhcmdldCh0aGlzLmxvYWRCYWxhbmNlcilcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEVjc0NsdXN0ZXJQcm9wc1xuICApOiAoc2I6IFN0YWNrQnVpbGRlcikgPT4gQ29uc3RydWN0IHtcbiAgICByZXR1cm4gKHNiOiBTdGFja0J1aWxkZXIpID0+IHtcbiAgICAgIGNvbnN0IG5ld1Byb3BzOiBFY3NDbHVzdGVyUHJvcHMgPSB7XG4gICAgICAgIC4uLnByb3BzLFxuICAgICAgICAuLi57XG4gICAgICAgICAgdnBjOiAoc2IuZ2V0TmV0d29yaygpIGFzIElWcGMpIHx8IHByb3BzLnZwY1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG5ldyB0aGlzKHNiLmdldFN0YWNrKCksIGlkLCBuZXdQcm9wcyk7XG4gICAgfTtcbiAgfVxufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fjall/components-infrastructure",
|
|
3
|
-
"version": "0.87.
|
|
3
|
+
"version": "0.87.20",
|
|
4
4
|
"bin": {
|
|
5
5
|
"infrastructure": "bin/infrastructure.js"
|
|
6
6
|
},
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@aws-sdk/client-organizations": "^3.716.0",
|
|
39
|
-
"@fjall/util": "^0.87.
|
|
39
|
+
"@fjall/util": "^0.87.20",
|
|
40
40
|
"@pepperize/cdk-organizations": "^0.7.135",
|
|
41
41
|
"cdk-time-sleep": "^1.0.0",
|
|
42
42
|
"constructs": "^10.0.0",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"overrides": {
|
|
46
46
|
"@smithy/core": "2.5.5"
|
|
47
47
|
},
|
|
48
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "75816546c7852a2bedf38fd4f419ed97e9c6fdc4",
|
|
49
49
|
"peerDependencies": {
|
|
50
50
|
"aws-cdk": "^2.206.0",
|
|
51
51
|
"aws-cdk-lib": "^2.206.0",
|