@fjall/components-infrastructure 0.88.4 → 0.89.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/lib/config/aws/disasterRecovery.js +28 -7
- package/dist/lib/patterns/aws/compute.d.ts +6 -716
- package/dist/lib/patterns/aws/compute.js +24 -427
- package/dist/lib/patterns/aws/computeEc2.d.ts +67 -0
- package/dist/lib/patterns/aws/computeEc2.js +46 -0
- package/dist/lib/patterns/aws/computeEcs.d.ts +446 -0
- package/dist/lib/patterns/aws/computeEcs.js +246 -0
- package/dist/lib/patterns/aws/computeLambda.d.ts +220 -0
- package/dist/lib/patterns/aws/computeLambda.js +147 -0
- package/dist/lib/patterns/aws/domainDelegation.d.ts +8 -0
- package/dist/lib/patterns/aws/domainDelegation.js +54 -0
- package/dist/lib/patterns/aws/domainFactory.d.ts +8 -0
- package/dist/lib/patterns/aws/domainFactory.js +23 -0
- package/dist/lib/patterns/aws/index.d.ts +3 -0
- package/dist/lib/patterns/aws/index.js +5 -1
- package/dist/lib/patterns/aws/interfaces/domain.d.ts +2 -0
- package/dist/lib/patterns/aws/interfaces/domain.js +6 -0
- package/dist/lib/patterns/aws/interfaces/index.d.ts +1 -0
- package/dist/lib/patterns/aws/interfaces/index.js +1 -1
- package/dist/lib/patterns/aws/interfaces/pattern.d.ts +3 -0
- package/dist/lib/patterns/aws/interfaces/pattern.js +1 -1
- package/dist/lib/patterns/aws/payload.js +11 -1
- package/dist/lib/resources/aws/compute/ecs.d.ts +14 -2
- package/dist/lib/resources/aws/compute/ecs.js +69 -24
- package/dist/lib/resources/aws/networking/domain.d.ts +13 -0
- package/dist/lib/resources/aws/networking/domain.js +102 -0
- package/dist/lib/resources/aws/networking/domainCertificate.d.ts +13 -0
- package/dist/lib/resources/aws/networking/domainCertificate.js +28 -0
- package/dist/lib/resources/aws/networking/hostedZone.js +3 -6
- package/dist/lib/resources/aws/networking/index.d.ts +2 -0
- package/dist/lib/resources/aws/networking/index.js +3 -1
- package/dist/lib/utils/capitaliseString.d.ts +1 -18
- package/dist/lib/utils/capitaliseString.js +8 -37
- package/dist/lib/utils/dnsRecords.d.ts +4 -0
- package/dist/lib/utils/dnsRecords.js +108 -0
- package/dist/lib/utils/domainTypes.d.ts +37 -0
- package/dist/lib/utils/domainTypes.js +10 -0
- package/dist/lib/utils/env.js +23 -29
- package/dist/lib/utils/getConfig.js +42 -16
- package/dist/lib/utils/index.d.ts +1 -0
- package/dist/lib/utils/index.js +2 -1
- package/package.json +4 -3
|
@@ -476,6 +476,16 @@ class Payload extends constructs_1.Construct {
|
|
|
476
476
|
if (!domain) {
|
|
477
477
|
throw new Error("Domain is required for simple domain resolution");
|
|
478
478
|
}
|
|
479
|
+
// Managed domain: import zone and cert from domain stack
|
|
480
|
+
if (this.props.managedDomain) {
|
|
481
|
+
const managed = this.props.managedDomain;
|
|
482
|
+
const hostedZone = aws_route53_1.HostedZone.fromHostedZoneAttributes(this, `${this.pascalName}ManagedHostedZone`, {
|
|
483
|
+
hostedZoneId: aws_cdk_lib_1.Fn.importValue(managed.hostedZoneIdExport),
|
|
484
|
+
zoneName: managed.zoneName
|
|
485
|
+
});
|
|
486
|
+
const certificate = aws_certificatemanager_1.Certificate.fromCertificateArn(this, `${this.pascalName}ManagedCertificate`, aws_cdk_lib_1.Fn.importValue(managed.certificateArnExport));
|
|
487
|
+
return { domainNames: [domain], certificate, hostedZone };
|
|
488
|
+
}
|
|
479
489
|
const rootDomain = extractRootDomain(domain);
|
|
480
490
|
const hostedZone = aws_route53_1.HostedZone.fromLookup(this, `${this.pascalName}HostedZone`, { domainName: rootDomain });
|
|
481
491
|
const certificate = new aws_certificatemanager_1.Certificate(this, `${this.pascalName}Certificate`, {
|
|
@@ -581,4 +591,4 @@ class Payload extends constructs_1.Construct {
|
|
|
581
591
|
}
|
|
582
592
|
}
|
|
583
593
|
exports.Payload = Payload;
|
|
584
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvcGF5bG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7OztBQUVILDJDQUF1QztBQUN2Qyw2Q0FBK0M7QUFDL0MseURBQXFEO0FBQ3JELHVEQU1nQztBQUNoQywrRUFJNEM7QUFDNUMseURBQTRFO0FBQzVFLHlFQUFtRTtBQUtuRSwrQ0FPdUI7QUFDdkIsNkNBS3NCO0FBQ3RCLDZDQUEwRTtBQUMxRSxpREFJd0I7QUFDeEIscUNBQW9FO0FBQ3BFLHlFQUE4RDtBQUM5RCx5RUFHeUM7QUFFekMsTUFBTSxnQkFBZ0IsR0FBRztJQUN2QixxRkFBcUY7SUFDckYsTUFBTSxFQUFFLE9BQU87SUFDZixtRkFBbUY7SUFDbkYsZUFBZSxFQUFFLFdBQVc7SUFDNUIsUUFBUSxFQUFFO1FBQ1IsSUFBSSxFQUFFLFVBQW1CO1FBQ3pCLDhFQUE4RTtRQUM5RSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLG1CQUFtQixFQUFFLElBQUk7S0FDMUI7SUFDRCxPQUFPLEVBQUU7UUFDUCw2RkFBNkY7UUFDN0YsYUFBYSxFQUFFLElBQUk7UUFDbkIsK0RBQStEO1FBQy9ELGNBQWMsRUFBRSxFQUFFO1FBQ2xCLDJFQUEyRTtRQUMzRSxZQUFZLEVBQUUsSUFBSTtRQUNsQix3RUFBd0U7UUFDeEUsYUFBYSxFQUFFLEVBQUU7UUFDakIsNEZBQTRGO1FBQzVGLG1CQUFtQixFQUFFLEdBQUc7UUFDeEIsK0VBQStFO1FBQy9FLG9CQUFvQixFQUFFLEdBQUc7S0FDMUI7SUFDRCxLQUFLLEVBQUU7UUFDTCxnR0FBZ0c7UUFDaEcsZUFBZSxFQUFFLFFBQVE7S0FDMUI7SUFDRCxRQUFRLEVBQUU7UUFDUixNQUFNLEVBQUUsbUJBQW1CO1FBQzNCLEtBQUssRUFBRSxrQkFBa0I7UUFDekIsTUFBTSxFQUFFLHFDQUFxQztR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QUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTO29CQUMzQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRO29CQUMxQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRO2lCQUMzQjtnQkFDRCxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO2FBQ3JCLENBQUM7WUFDRixXQUFXLEVBQUUsc0NBQXNDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO1NBQ3JFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUE1bUJELDBCQTRtQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBheWxvYWQgQ01TIFBhdHRlcm4uXG4gKlxuICogQSBoaWdoLWxldmVsIHBhdHRlcm4gdGhhdCBjcmVhdGVzIGFsbCBpbmZyYXN0cnVjdHVyZSByZXF1aXJlZCBmb3IgYVxuICogUGF5bG9hZCBDTVMgZGVwbG95bWVudCB1c2luZyBPcGVuTmV4dC5cbiAqXG4gKiBSZXNvdXJjZXMgY3JlYXRlZDpcbiAqIC0gUkRTIFBvc3RncmVTUUwgZGF0YWJhc2UgKEF1cm9yYSBvciBJbnN0YW5jZSlcbiAqIC0gMyBTMyBidWNrZXRzIChhc3NldHMsIGNhY2hlLCBtZWRpYSlcbiAqIC0gRHluYW1vREIgdGFibGUgKHRhZyBjYWNoZSB3aXRoIEdTSSlcbiAqIC0gU1FTIEZJRk8gcXVldWUgKHJldmFsaWRhdGlvbilcbiAqIC0gMyBMYW1iZGEgZnVuY3Rpb25zIChzZXJ2ZXIsIGltYWdlIG9wdGltaXNhdGlvbiwgcmV2YWxpZGF0aW9uKVxuICogLSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvblxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwYXlsb2FkID0gYXBwLmFkZFBhdHRlcm4oUGF0dGVybkZhY3RvcnkuYnVpbGQoXCJQYXlsb2FkQXBwXCIsIHtcbiAqICAgdHlwZTogXCJwYXlsb2FkXCIsXG4gKiAgIG5hbWU6IFwibXktY21zXCJcbiAqIH0pKTtcbiAqXG4gKiAvLyBFc2NhcGUgaGF0Y2hlc1xuICogcGF5bG9hZC5nZXREYXRhYmFzZSgpLmdyYW50Q29ubmVjdChvdGhlckxhbWJkYSk7XG4gKi9cblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENmbk91dHB1dCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IFNlY3JldCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3NlY3JldHNcIjtcbmltcG9ydCB7XG4gIENvZGUsXG4gIFJ1bnRpbWUsXG4gIEFyY2hpdGVjdHVyZSxcbiAgRnVuY3Rpb25VcmxBdXRoVHlwZSxcbiAgdHlwZSBJRnVuY3Rpb25cbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7XG4gIENlcnRpZmljYXRlLFxuICBDZXJ0aWZpY2F0ZVZhbGlkYXRpb24sXG4gIHR5cGUgSUNlcnRpZmljYXRlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyXCI7XG5pbXBvcnQgeyBIb3N0ZWRab25lLCBBUmVjb3JkLCBSZWNvcmRUYXJnZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjtcbmltcG9ydCB7IENsb3VkRnJvbnRUYXJnZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0c1wiO1xuXG5pbXBvcnQgdHlwZSBBcHAgZnJvbSBcIi4uLy4uL2FwcC5qc1wiO1xuaW1wb3J0IHsgdHlwZSBJUGF5bG9hZFByb3BzLCB0eXBlIElQYXlsb2FkIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyB0eXBlIE1hbmlmZXN0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9tYW5pZmVzdFdyaXRlci5qc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBSZWxhdGlvbmFsRGF0YWJhc2UsXG4gIHR5cGUgRHluYW1vREJEYXRhYmFzZSxcbiAgRGF0YWJhc2VGYWN0b3J5LFxuICB0eXBlIEF1cm9yYURhdGFiYXNlUHJvcHMsXG4gIHR5cGUgSW5zdGFuY2VEYXRhYmFzZVByb3BzLFxuICB0eXBlIER5bmFtb0RCRGF0YWJhc2VQcm9wc1xufSBmcm9tIFwiLi9kYXRhYmFzZS5qc1wiO1xuaW1wb3J0IHtcbiAgQ29tcHV0ZUZhY3RvcnksXG4gIHR5cGUgTGFtYmRhQ29tcHV0ZSxcbiAgSW52b2tlTW9kZSxcbiAgdHlwZSBDb2RlTGFtYmRhUHJvcHNcbn0gZnJvbSBcIi4vY29tcHV0ZS5qc1wiO1xuaW1wb3J0IHsgU3RvcmFnZUZhY3RvcnksIHR5cGUgU3RvcmFnZSwgdHlwZSBTM1Byb3BzIH0gZnJvbSBcIi4vc3RvcmFnZS5qc1wiO1xuaW1wb3J0IHtcbiAgTWVzc2FnaW5nRmFjdG9yeSxcbiAgdHlwZSBRdWV1ZU1lc3NhZ2luZyxcbiAgdHlwZSBJUXVldWVQcm9wc1xufSBmcm9tIFwiLi9tZXNzYWdpbmcuanNcIjtcbmltcG9ydCB7IENkbkZhY3RvcnksIHR5cGUgQ2RuLCB0eXBlIFNtYXJ0Q2RuUHJvcHMgfSBmcm9tIFwiLi9jZG4uanNcIjtcbmltcG9ydCB7IEZqYWxsTG9nZ2VyIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3ZhbGlkYXRpb25Mb2dnZXIuanNcIjtcbmltcG9ydCB7XG4gIHRvUGFzY2FsQ2FzZSxcbiAgdG9WYWxpZERhdGFiYXNlTmFtZVxufSBmcm9tIFwiLi4vLi4vdXRpbHMvY2FwaXRhbGlzZVN0cmluZy5qc1wiO1xuXG5jb25zdCBQQVlMT0FEX0RFRkFVTFRTID0ge1xuICAvKiogUGF0aCB0byBPcGVuTmV4dCBvdXRwdXQgcmVsYXRpdmUgdG8gYXBwIGZvbGRlciAoQ0RLIHJ1bnMgZnJvbSBmamFsbC88YXBwbmFtZT4pICovXG4gIFNPVVJDRTogXCIuLi8uLlwiLFxuICAvKiogQ2xvdWRGcm9udCByZXF1aXJlcyB1cy1lYXN0LTEgZm9yIGNlcnRhaW4gcmVzb3VyY2VzOyB1c2VkIGFzIHJlZ2lvbiBmYWxsYmFjayAqL1xuICBGQUxMQkFDS19SRUdJT046IFwidXMtZWFzdC0xXCIsXG4gIERBVEFCQVNFOiB7XG4gICAgVFlQRTogXCJJbnN0YW5jZVwiIGFzIGNvbnN0LFxuICAgIC8qKiBBV1MgZGVmYXVsdDsgNyBkYXlzIGNvdmVycyBtb3N0IGFjY2lkZW50YWwgZGF0YSBsb3NzIHJlY292ZXJ5IHNjZW5hcmlvcyAqL1xuICAgIEJBQ0tVUF9SRVRFTlRJT046IDcsXG4gICAgREVMRVRJT05fUFJPVEVDVElPTjogdHJ1ZVxuICB9LFxuICBDT01QVVRFOiB7XG4gICAgLyoqIDEuNSBHQiBiYWxhbmNlcyBOZXh0LmpzIFNTUiBwZXJmb3JtYW5jZSB2cyBjb3N0OyBiZWxvdyB0aGlzIHJpc2tzIE9PTSBvbiBjb21wbGV4IHBhZ2VzICovXG4gICAgU0VSVkVSX01FTU9SWTogMTUzNixcbiAgICAvKiogQVBJIEdhdGV3YXkgZGVmYXVsdCBtYXg7IHN1ZmZpY2llbnQgZm9yIG1vc3QgU1NSIHJlbmRlcnMgKi9cbiAgICBTRVJWRVJfVElNRU9VVDogMzAsXG4gICAgLyoqIFNoYXJwIGltYWdlIHByb2Nlc3NpbmcgbmVlZHMgbWVtb3J5IHByb3BvcnRpb25hbCB0byBpbWFnZSBkaW1lbnNpb25zICovXG4gICAgSU1BR0VfTUVNT1JZOiAxNTM2LFxuICAgIC8qKiBJbWFnZSBwcm9jZXNzaW5nIHR5cGljYWxseSBjb21wbGV0ZXMgaW4gPDEwczsgMzBzIHByb3ZpZGVzIG1hcmdpbiAqL1xuICAgIElNQUdFX1RJTUVPVVQ6IDMwLFxuICAgIC8qKiBSZXZhbGlkYXRpb24gaXMgbGlnaHR3ZWlnaHQgKEhUVFAgY2FsbCArIGNhY2hlIHdyaXRlKTsgaGFsZiBvZiBzZXJ2ZXIgbWVtb3J5IHN1ZmZpY2VzICovXG4gICAgUkVWQUxJREFUSU9OX01FTU9SWTogNzY4LFxuICAgIC8qKiA1IG1pbnV0ZXMgYWxsb3dzIGJhdGNoIHJldmFsaWRhdGlvbiBvZiBtYW55IHBhZ2VzIGluIGEgc2luZ2xlIGludm9jYXRpb24gKi9cbiAgICBSRVZBTElEQVRJT05fVElNRU9VVDogMzAwXG4gIH0sXG4gIENBQ0hFOiB7XG4gICAgLyoqIDEgeWVhciDigJQgc3RhdGljIGFzc2V0cyBhcmUgY29udGVudC1oYXNoZWQgc28gbG9uZyBjYWNoaW5nIGlzIHNhZmU7IG1heGltaXNlcyBDRE4gaGl0IHJhdGUgKi9cbiAgICBNQVhfQUdFX1NFQ09ORFM6IDMxNTM2MDAwXG4gIH0sXG4gIE9QRU5ORVhUOiB7XG4gICAgQVNTRVRTOiBcIi5vcGVuLW5leHQvYXNzZXRzXCIsXG4gICAgQ0FDSEU6IFwiLm9wZW4tbmV4dC9jYWNoZVwiLFxuICAgIFNFUlZFUjogXCIub3Blbi1uZXh0L3NlcnZlci1mdW5jdGlvbnMvZGVmYXVsdFwiLFxuICAgIElNQUdFOiBcIi5vcGVuLW5leHQvaW1hZ2Utb3B0aW1pemF0aW9uLWZ1bmN0aW9uXCIsXG4gICAgUkVWQUxJREFUSU9OOiBcIi5vcGVuLW5leHQvcmV2YWxpZGF0aW9uLWZ1bmN0aW9uXCJcbiAgfSxcbiAgUEFUSFM6IHtcbiAgICBTVEFUSUM6IFwiL19uZXh0L3N0YXRpYy8qXCIsXG4gICAgSU1BR0U6IFwiL19uZXh0L2ltYWdlKlwiLFxuICAgIEFQSTogXCIvYXBpLypcIixcbiAgICBBRE1JTjogXCIvYWRtaW4vKlwiXG4gIH1cbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogRXh0cmFjdCByb290IGRvbWFpbiBmcm9tIGEgZnVsbCBkb21haW4gbmFtZS5cbiAqIGUuZy4sIFwiY21zLmV4YW1wbGUuY29tXCIgLT4gXCJleGFtcGxlLmNvbVwiXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RSb290RG9tYWluKGRvbWFpbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHMgPSBkb21haW4uc3BsaXQoXCIuXCIpO1xuICByZXR1cm4gcGFydHMubGVuZ3RoID4gMiA/IHBhcnRzLnNsaWNlKC0yKS5qb2luKFwiLlwiKSA6IGRvbWFpbjtcbn1cblxuLyoqXG4gKiBTYWZlbHkgZ2V0IHRoZSB1bmRlcmx5aW5nIExhbWJkYSBmdW5jdGlvbiBmcm9tIGEgY29tcHV0ZSByZXNvdXJjZS5cbiAqIFRocm93cyBhIGNsZWFyIGVycm9yIGlmIHRoZSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLlxuICovXG5mdW5jdGlvbiByZXF1aXJlRnVuY3Rpb24oY29tcHV0ZTogTGFtYmRhQ29tcHV0ZSwgbmFtZTogc3RyaW5nKTogSUZ1bmN0aW9uIHtcbiAgY29uc3QgZm4gPSBjb21wdXRlLmdldEZ1bmN0aW9uKCk7XG4gIGlmICghZm4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtuYW1lfSBMYW1iZGEgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4gYCArXG4gICAgICAgIFwiVGhpcyBpbmRpY2F0ZXMgYW4gaW50ZXJuYWwgZXJyb3IgaW4gY29tcHV0ZSByZXNvdXJjZSBjcmVhdGlvbi5cIlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIEJhc2UgZGF0YWJhc2UgcHJvcGVydGllcyBzaGFyZWQgYmV0d2VlbiBBdXJvcmEgYW5kIEluc3RhbmNlLlxuICogVXNlcyBQaWNrIHRvIGV4dHJhY3QgY29tbW9uIHByb3BlcnRpZXMgZnJvbSB0aGUgZGF0YWJhc2UgY29uZmlnLlxuICovXG50eXBlIEJhc2VEYXRhYmFzZVByb3BzID0gUGljazxcbiAgSW5zdGFuY2VEYXRhYmFzZVByb3BzLFxuICB8IFwiZGF0YWJhc2VOYW1lXCJcbiAgfCBcImRhdGFiYXNlRW5naW5lXCJcbiAgfCBcImJhY2t1cFJldGVudGlvblwiXG4gIHwgXCJkZWxldGlvblByb3RlY3Rpb25cIlxuICB8IFwicHVibGljbHlBY2Nlc3NpYmxlXCJcbiAgfCBcInBvcnRcIlxuICB8IFwiZGF0YWJhc2VJbnNpZ2h0c1wiXG4gIHwgXCJwcm94eVwiXG4gIHwgXCJjcmVkZW50aWFsc1wiXG4gIHwgXCJzbmFwc2hvdElkZW50aWZpZXJcIlxuICB8IFwic25hcHNob3RVc2VybmFtZVwiXG4+O1xuXG4vKipcbiAqIExhbWJkYSBjb25maWd1cmF0aW9uIHdpdGggcmVzb2x2ZWQgZGVmYXVsdHMuXG4gKi9cbmludGVyZmFjZSBSZXNvbHZlZExhbWJkYUNvbmZpZyB7XG4gIG1lbW9yeVNpemU6IG51bWJlcjtcbiAgdGltZW91dDogbnVtYmVyO1xuICBlcGhlbWVyYWxTdG9yYWdlU2l6ZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IExhbWJkYSBjb25maWcgZnJvbSBwcm9wcyB3aXRoIGRlZmF1bHRzLlxuICovXG5mdW5jdGlvbiByZXNvbHZlTGFtYmRhQ29uZmlnKFxuICBjb25maWc6XG4gICAgfCB7IG1lbW9yeVNpemU/OiBudW1iZXI7IHRpbWVvdXQ/OiBudW1iZXI7IGVwaGVtZXJhbFN0b3JhZ2VTaXplPzogbnVtYmVyIH1cbiAgICB8IHVuZGVmaW5lZCxcbiAgZGVmYXVsdHM6IHsgbWVtb3J5OiBudW1iZXI7IHRpbWVvdXQ6IG51bWJlciB9XG4pOiBSZXNvbHZlZExhbWJkYUNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgbWVtb3J5U2l6ZTogY29uZmlnPy5tZW1vcnlTaXplID8/IGRlZmF1bHRzLm1lbW9yeSxcbiAgICB0aW1lb3V0OiBjb25maWc/LnRpbWVvdXQgPz8gZGVmYXVsdHMudGltZW91dCxcbiAgICBlcGhlbWVyYWxTdG9yYWdlU2l6ZTogY29uZmlnPy5lcGhlbWVyYWxTdG9yYWdlU2l6ZVxuICB9O1xufVxuXG4vKipcbiAqIFBheWxvYWQgQ01TIHBhdHRlcm4gaW1wbGVtZW50YXRpb24uXG4gKlxuICogQ29tcG9zZXMgYWxsIHJlcXVpcmVkIEFXUyByZXNvdXJjZXMgZm9yIGEgUGF5bG9hZCBkZXBsb3ltZW50LlxuICovXG5leHBvcnQgY2xhc3MgUGF5bG9hZCBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElQYXlsb2FkIHtcbiAgcHVibGljIHJlYWRvbmx5IHBhdHRlcm5UeXBlID0gXCJwYXlsb2FkXCIgYXMgY29uc3Q7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhcHA6IEFwcDtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogSVBheWxvYWRQcm9wcztcbiAgcHJpdmF0ZSByZWFkb25seSBwYXNjYWxOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX3BheWxvYWRTZWNyZXQ6IFNlY3JldDtcblxuICBwcml2YXRlIF9kYXRhYmFzZSE6IFJlbGF0aW9uYWxEYXRhYmFzZTtcbiAgcHJpdmF0ZSBfc2VydmVyITogTGFtYmRhQ29tcHV0ZTtcbiAgcHJpdmF0ZSBfaW1hZ2VPcHRpbWlzYXRpb24hOiBMYW1iZGFDb21wdXRlO1xuICBwcml2YXRlIF9yZXZhbGlkYXRpb24hOiBMYW1iZGFDb21wdXRlO1xuICBwcml2YXRlIF9hc3NldHNCdWNrZXQhOiBTdG9yYWdlO1xuICBwcml2YXRlIF9jYWNoZUJ1Y2tldCE6IFN0b3JhZ2U7XG4gIHByaXZhdGUgX21lZGlhQnVja2V0ITogU3RvcmFnZTtcbiAgcHJpdmF0ZSBfdGFnQ2FjaGUhOiBEeW5hbW9EQkRhdGFiYXNlO1xuICBwcml2YXRlIF9yZXZhbGlkYXRpb25RdWV1ZSE6IFF1ZXVlTWVzc2FnaW5nO1xuICBwcml2YXRlIF9jZG4hOiBDZG47XG4gIHByaXZhdGUgX3Jlc29sdmVkRG9tYWluOlxuICAgIHwge1xuICAgICAgICBkb21haW5OYW1lczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgICAgIGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGUgfCB1bmRlZmluZWQ7XG4gICAgICAgIGhvc3RlZFpvbmU6IFJldHVyblR5cGU8dHlwZW9mIEhvc3RlZFpvbmUuZnJvbUxvb2t1cD4gfCB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXBwOiBBcHAsIHByb3BzOiBJUGF5bG9hZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuYXBwID0gYXBwO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLnBhc2NhbE5hbWUgPSB0b1Bhc2NhbENhc2UocHJvcHMubmFtZSk7XG4gICAgdGhpcy5fcGF5bG9hZFNlY3JldCA9IG5ldyBTZWNyZXQodGhpcywgYCR7dGhpcy5wYXNjYWxOYW1lfVBheWxvYWRTZWNyZXRgLCB7XG4gICAgICBzZWNyZXROYW1lOiBgJHtwcm9wcy5uYW1lfS9wYXlsb2FkLXNlY3JldGAsXG4gICAgICBkZXNjcmlwdGlvbjogYFBheWxvYWQgQ01TIHNlY3JldCBmb3IgJHtwcm9wcy5uYW1lfWAsXG4gICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICBleGNsdWRlUHVuY3R1YXRpb246IHRydWUsXG4gICAgICAgIHBhc3N3b3JkTGVuZ3RoOiA2NFxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3Rlck1hbmlmZXN0KCk7XG4gICAgdGhpcy52YWxpZGF0ZVByb3BzKCk7XG5cbiAgICB0aGlzLmNyZWF0ZURhdGFiYXNlKCk7XG4gICAgdGhpcy5jcmVhdGVTdG9yYWdlQnVja2V0cygpO1xuICAgIHRoaXMuY3JlYXRlVGFnQ2FjaGUoKTtcbiAgICB0aGlzLmNyZWF0ZVJldmFsaWRhdGlvblF1ZXVlKCk7XG4gICAgdGhpcy5jcmVhdGVMYW1iZGFGdW5jdGlvbnMoKTtcbiAgICB0aGlzLmNyZWF0ZUNkbigpO1xuICAgIHRoaXMuY3JlYXRlRG5zUmVjb3JkKCk7XG4gICAgdGhpcy5leHBvcnRQYXR0ZXJuT3V0cHV0cygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3Rlck1hbmlmZXN0KCk6IHZvaWQge1xuICAgIGNvbnN0IG1hbmlmZXN0UGF0dGVybjogTWFuaWZlc3RQYXR0ZXJuID0ge1xuICAgICAgdHlwZTogXCJwYXlsb2FkXCIsXG4gICAgICBuYW1lOiB0aGlzLnByb3BzLm5hbWUsXG4gICAgICBzb3VyY2U6IFBBWUxPQURfREVGQVVMVFMuU09VUkNFXG4gICAgfTtcbiAgICB0aGlzLmFwcC5nZXRNYW5pZmVzdENvbGxlY3RvcigpLnNldFBhdHRlcm4obWFuaWZlc3RQYXR0ZXJuKTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVQcm9wcygpOiB2b2lkIHtcbiAgICBjb25zdCBkYkNvbmZpZyA9IHRoaXMucHJvcHMuZGF0YWJhc2UgPz8ge307XG4gICAgaWYgKGRiQ29uZmlnLnB1YmxpY2x5QWNjZXNzaWJsZSkge1xuICAgICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgICAgYFBheWxvYWQgZGF0YWJhc2UgJyR7dGhpcy5wcm9wcy5uYW1lfScgaXMgY29uZmlndXJlZCB3aXRoIHB1YmxpYyBhY2Nlc3NpYmlsaXR5LiBgICtcbiAgICAgICAgICBcIlRoaXMgaXMgYSBzZWN1cml0eSByaXNrIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkZXZlbG9wbWVudC5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURhdGFiYXNlKCk6IHZvaWQge1xuICAgIGNvbnN0IGRiQ29uZmlnID0gdGhpcy5wcm9wcy5kYXRhYmFzZSA/PyB7fTtcbiAgICBjb25zdCBkYXRhYmFzZVR5cGUgPSBkYkNvbmZpZy50eXBlID8/IFBBWUxPQURfREVGQVVMVFMuREFUQUJBU0UuVFlQRTtcblxuICAgIHRoaXMuX2RhdGFiYXNlID1cbiAgICAgIGRhdGFiYXNlVHlwZSA9PT0gXCJBdXJvcmFcIlxuICAgICAgICA/IHRoaXMuY3JlYXRlQXVyb3JhRGF0YWJhc2UoZGJDb25maWcpXG4gICAgICAgIDogdGhpcy5jcmVhdGVJbnN0YW5jZURhdGFiYXNlKGRiQ29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRCYXNlRGF0YWJhc2VQcm9wcyhcbiAgICBkYkNvbmZpZzogTm9uTnVsbGFibGU8SVBheWxvYWRQcm9wc1tcImRhdGFiYXNlXCJdPlxuICApOiBCYXNlRGF0YWJhc2VQcm9wcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGFiYXNlTmFtZTpcbiAgICAgICAgZGJDb25maWcuZGF0YWJhc2VOYW1lID8/IHRvVmFsaWREYXRhYmFzZU5hbWUodGhpcy5wcm9wcy5uYW1lKSxcbiAgICAgIGRhdGFiYXNlRW5naW5lOiBkYkNvbmZpZy5kYXRhYmFzZUVuZ2luZSA/PyBcInBvc3RncmVzcWxcIixcbiAgICAgIGJhY2t1cFJldGVudGlvbjpcbiAgICAgICAgZGJDb25maWcuYmFja3VwUmV0ZW50aW9uID8/IFBBWUxPQURfREVGQVVMVFMuREFUQUJBU0UuQkFDS1VQX1JFVEVOVElPTixcbiAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjpcbiAgICAgICAgZGJDb25maWcuZGVsZXRpb25Qcm90ZWN0aW9uID8/XG4gICAgICAgIFBBWUxPQURfREVGQVVMVFMuREFUQUJBU0UuREVMRVRJT05fUFJPVEVDVElPTixcbiAgICAgIHB1YmxpY2x5QWNjZXNzaWJsZTogZGJDb25maWcucHVibGljbHlBY2Nlc3NpYmxlLFxuICAgICAgcG9ydDogZGJDb25maWcucG9ydCxcbiAgICAgIGRhdGFiYXNlSW5zaWdodHM6IGRiQ29uZmlnLmRhdGFiYXNlSW5zaWdodHMsXG4gICAgICBwcm94eTogZGJDb25maWcucHJveHksXG4gICAgICBjcmVkZW50aWFsczogZGJDb25maWcuY3JlZGVudGlhbHMsXG4gICAgICBzbmFwc2hvdElkZW50aWZpZXI6IGRiQ29uZmlnLnNuYXBzaG90SWRlbnRpZmllcixcbiAgICAgIHNuYXBzaG90VXNlcm5hbWU6IGRiQ29uZmlnLnNuYXBzaG90VXNlcm5hbWVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBdXJvcmFEYXRhYmFzZShcbiAgICBkYkNvbmZpZzogTm9uTnVsbGFibGU8SVBheWxvYWRQcm9wc1tcImRhdGFiYXNlXCJdPlxuICApOiBSZWxhdGlvbmFsRGF0YWJhc2Uge1xuICAgIGNvbnN0IGF1cm9yYVByb3BzOiBBdXJvcmFEYXRhYmFzZVByb3BzID0ge1xuICAgICAgdHlwZTogXCJBdXJvcmFcIixcbiAgICAgIC4uLnRoaXMuYnVpbGRCYXNlRGF0YWJhc2VQcm9wcyhkYkNvbmZpZyksXG4gICAgICBhbGxvd2VkSXBDaWRyOiBkYkNvbmZpZy5hbGxvd2VkSXBDaWRyLFxuICAgICAgZW5jcnlwdGlvbjogZGJDb25maWcuZW5jcnlwdGlvbixcbiAgICAgIHdyaXRlcjogZGJDb25maWcud3JpdGVyLFxuICAgICAgcmVhZGVyczogZGJDb25maWcucmVhZGVycyxcbiAgICAgIGFsbG93VnBjQWNjZXNzOiBkYkNvbmZpZy5hbGxvd1ZwY0FjY2VzcyxcbiAgICAgIG1vbml0b3JpbmdJbnRlcnZhbDogZGJDb25maWcubW9uaXRvcmluZ0ludGVydmFsLFxuICAgICAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6IGRiQ29uZmlnLnByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5hcHAuYWRkRGF0YWJhc2UoXG4gICAgICBEYXRhYmFzZUZhY3RvcnkuYnVpbGQodGhpcy5wcm9wcy5uYW1lLCBhdXJvcmFQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVJbnN0YW5jZURhdGFiYXNlKFxuICAgIGRiQ29uZmlnOiBOb25OdWxsYWJsZTxJUGF5bG9hZFByb3BzW1wiZGF0YWJhc2VcIl0+XG4gICk6IFJlbGF0aW9uYWxEYXRhYmFzZSB7XG4gICAgY29uc3QgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VEYXRhYmFzZVByb3BzID0ge1xuICAgICAgdHlwZTogXCJJbnN0YW5jZVwiLFxuICAgICAgLi4udGhpcy5idWlsZEJhc2VEYXRhYmFzZVByb3BzKGRiQ29uZmlnKSxcbiAgICAgIHB1YmxpY2x5QWNjZXNzaWJsZTogZGJDb25maWcucHVibGljbHlBY2Nlc3NpYmxlID8/IGZhbHNlLFxuICAgICAgaW5zdGFuY2VUeXBlOiBkYkNvbmZpZy5pbnN0YW5jZVR5cGUsXG4gICAgICBhbGxvY2F0ZWRTdG9yYWdlOiBkYkNvbmZpZy5hbGxvY2F0ZWRTdG9yYWdlLFxuICAgICAgbXVsdGlBejogZGJDb25maWcubXVsdGlBeixcbiAgICAgIHJlYWRSZXBsaWNhOiBkYkNvbmZpZy5yZWFkUmVwbGljYSxcbiAgICAgIGVuY3J5cHRpb246IGRiQ29uZmlnLmVuY3J5cHRpb25cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwcC5hZGREYXRhYmFzZShcbiAgICAgIERhdGFiYXNlRmFjdG9yeS5idWlsZCh0aGlzLnByb3BzLm5hbWUsIGluc3RhbmNlUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU3RvcmFnZUJ1Y2tldHMoKTogdm9pZCB7XG4gICAgdGhpcy5fYXNzZXRzQnVja2V0ID0gdGhpcy5jcmVhdGVBc3NldHNCdWNrZXQoKTtcbiAgICB0aGlzLl9jYWNoZUJ1Y2tldCA9IHRoaXMuY3JlYXRlQ2FjaGVCdWNrZXQoKTtcbiAgICB0aGlzLl9tZWRpYUJ1Y2tldCA9IHRoaXMuY3JlYXRlTWVkaWFCdWNrZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQXNzZXRzQnVja2V0KCk6IFN0b3JhZ2Uge1xuICAgIGNvbnN0IGFzc2V0c0NvbmZpZyA9IHRoaXMucHJvcHMuc3RvcmFnZT8uYXNzZXRzID8/IHt9O1xuICAgIGNvbnN0IGFzc2V0c1Byb3BzOiBTM1Byb3BzID0ge1xuICAgICAgdmVyc2lvbmVkOiBhc3NldHNDb25maWcudmVyc2lvbmVkID8/IGZhbHNlLFxuICAgICAgZGVwbG95bWVudDoge1xuICAgICAgICBzb3VyY2U6IGAke1BBWUxPQURfREVGQVVMVFMuU09VUkNFfS8ke1BBWUxPQURfREVGQVVMVFMuT1BFTk5FWFQuQVNTRVRTfWAsXG4gICAgICAgIHBydW5lOiB0cnVlLFxuICAgICAgICBjYWNoZUNvbnRyb2w6IHtcbiAgICAgICAgICBtYXhBZ2U6IFBBWUxPQURfREVGQVVMVFMuQ0FDSEUuTUFYX0FHRV9TRUNPTkRTLFxuICAgICAgICAgIGltbXV0YWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5hcHAuYWRkU3RvcmFnZShcbiAgICAgIFN0b3JhZ2VGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0tYXNzZXRzYCwgYXNzZXRzUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2FjaGVCdWNrZXQoKTogU3RvcmFnZSB7XG4gICAgY29uc3QgY2FjaGVDb25maWcgPSB0aGlzLnByb3BzLnN0b3JhZ2U/LmNhY2hlID8/IHt9O1xuICAgIGNvbnN0IGNhY2hlUHJvcHM6IFMzUHJvcHMgPSB7XG4gICAgICB2ZXJzaW9uZWQ6IGNhY2hlQ29uZmlnLnZlcnNpb25lZCA/PyBmYWxzZSxcbiAgICAgIGRlcGxveW1lbnQ6IHtcbiAgICAgICAgc291cmNlOiBgJHtQQVlMT0FEX0RFRkFVTFRTLlNPVVJDRX0vJHtQQVlMT0FEX0RFRkFVTFRTLk9QRU5ORVhULkNBQ0hFfWAsXG4gICAgICAgIHBydW5lOiBmYWxzZSAvLyBJU1IgYWRkcyBmaWxlcyBhdCBydW50aW1lXG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5hcHAuYWRkU3RvcmFnZShcbiAgICAgIFN0b3JhZ2VGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0tY2FjaGVgLCBjYWNoZVByb3BzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1lZGlhQnVja2V0KCk6IFN0b3JhZ2Uge1xuICAgIGNvbnN0IG1lZGlhQ29uZmlnID0gdGhpcy5wcm9wcy5zdG9yYWdlPy5tZWRpYSA/PyB7fTtcbiAgICBjb25zdCBtZWRpYVByb3BzOiBTM1Byb3BzID0ge1xuICAgICAgdmVyc2lvbmVkOiBtZWRpYUNvbmZpZy52ZXJzaW9uZWQgPz8gZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwcC5hZGRTdG9yYWdlKFxuICAgICAgU3RvcmFnZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1tZWRpYWAsIG1lZGlhUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGFnQ2FjaGUoKTogdm9pZCB7XG4gICAgY29uc3QgdGFnQ2FjaGVQcm9wczogRHluYW1vREJEYXRhYmFzZVByb3BzID0ge1xuICAgICAgdHlwZTogXCJEeW5hbW9EQlwiLFxuICAgICAgcGFydGl0aW9uS2V5OiB7IG5hbWU6IFwidGFnXCIsIHR5cGU6IFwiU1wiIH0sXG4gICAgICBzb3J0S2V5OiB7IG5hbWU6IFwicGF0aFwiLCB0eXBlOiBcIlNcIiB9LFxuICAgICAgZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlczogW1xuICAgICAgICB7XG4gICAgICAgICAgaW5kZXhOYW1lOiBcInJldmFsaWRhdGVcIixcbiAgICAgICAgICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogXCJwYXRoXCIsIHR5cGU6IFwiU1wiIH0sXG4gICAgICAgICAgc29ydEtleTogeyBuYW1lOiBcInJldmFsaWRhdGVkQXRcIiwgdHlwZTogXCJOXCIgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgICB0aGlzLl90YWdDYWNoZSA9IHRoaXMuYXBwLmFkZERhdGFiYXNlKFxuICAgICAgRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0tdGFnLWNhY2hlYCwgdGFnQ2FjaGVQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSZXZhbGlkYXRpb25RdWV1ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBxdWV1ZUNvbmZpZyA9IHRoaXMucHJvcHMubWVzc2FnaW5nPy5yZXZhbGlkYXRpb25RdWV1ZSA/PyB7fTtcbiAgICBjb25zdCByZXZhbGlkYXRpb25UaW1lb3V0ID1cbiAgICAgIHRoaXMucHJvcHMuY29tcHV0ZT8ucmV2YWxpZGF0aW9uPy50aW1lb3V0ID8/XG4gICAgICBQQVlMT0FEX0RFRkFVTFRTLkNPTVBVVEUuUkVWQUxJREFUSU9OX1RJTUVPVVQ7XG5cbiAgICAvLyBSZXNvbHZlIGRlYWQgbGV0dGVyIHF1ZXVlIGNvbmZpZ1xuICAgIGxldCBkbHFDb25maWc6IElRdWV1ZVByb3BzW1wiZGVhZExldHRlclF1ZXVlXCJdO1xuICAgIGlmIChxdWV1ZUNvbmZpZy5kZWFkTGV0dGVyUXVldWUgPT09IGZhbHNlKSB7XG4gICAgICBkbHFDb25maWcgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChxdWV1ZUNvbmZpZy5kZWFkTGV0dGVyUXVldWUpIHtcbiAgICAgIGRscUNvbmZpZyA9IHtcbiAgICAgICAgZW5hYmxlZDogcXVldWVDb25maWcuZGVhZExldHRlclF1ZXVlLmVuYWJsZWQgPz8gdHJ1ZSxcbiAgICAgICAgbWF4UmVjZWl2ZUNvdW50OiBxdWV1ZUNvbmZpZy5kZWFkTGV0dGVyUXVldWUubWF4UmVjZWl2ZUNvdW50ID8/IDNcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRscUNvbmZpZyA9IHsgZW5hYmxlZDogdHJ1ZSwgbWF4UmVjZWl2ZUNvdW50OiAzIH07XG4gICAgfVxuXG4gICAgY29uc3QgcXVldWVQcm9wczogSVF1ZXVlUHJvcHMgPSB7XG4gICAgICB0eXBlOiBcInF1ZXVlXCIsXG4gICAgICBxdWV1ZVR5cGU6IFwiZmlmb1wiLFxuICAgICAgdmlzaWJpbGl0eVRpbWVvdXQ6IHF1ZXVlQ29uZmlnLnZpc2liaWxpdHlUaW1lb3V0ID8/IHJldmFsaWRhdGlvblRpbWVvdXQsXG4gICAgICBtZXNzYWdlUmV0ZW50aW9uUGVyaW9kOiBxdWV1ZUNvbmZpZy5tZXNzYWdlUmV0ZW50aW9uUGVyaW9kLFxuICAgICAgbWF4TWVzc2FnZVNpemU6IHF1ZXVlQ29uZmlnLm1heE1lc3NhZ2VTaXplLFxuICAgICAgY29udGVudEJhc2VkRGVkdXBsaWNhdGlvbjogdHJ1ZSxcbiAgICAgIGRlYWRMZXR0ZXJRdWV1ZTogZGxxQ29uZmlnXG4gICAgfTtcbiAgICB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZSA9IHRoaXMuYXBwLmFkZE1lc3NhZ2luZyhcbiAgICAgIE1lc3NhZ2luZ0ZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1yZXZhbGlkYXRpb25gLCBxdWV1ZVByb3BzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUxhbWJkYUZ1bmN0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXJ2ZXIgPSB0aGlzLmNyZWF0ZVNlcnZlckxhbWJkYSgpO1xuICAgIHRoaXMuX2ltYWdlT3B0aW1pc2F0aW9uID0gdGhpcy5jcmVhdGVJbWFnZUxhbWJkYSgpO1xuICAgIHRoaXMuX3JldmFsaWRhdGlvbiA9IHRoaXMuY3JlYXRlUmV2YWxpZGF0aW9uTGFtYmRhKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNlcnZlckxhbWJkYSgpOiBMYW1iZGFDb21wdXRlIHtcbiAgICBjb25zdCB7IG1lbW9yeVNpemUsIHRpbWVvdXQsIGVwaGVtZXJhbFN0b3JhZ2VTaXplIH0gPSByZXNvbHZlTGFtYmRhQ29uZmlnKFxuICAgICAgdGhpcy5wcm9wcy5jb21wdXRlPy5zZXJ2ZXIsXG4gICAgICB7XG4gICAgICAgIG1lbW9yeTogUEFZTE9BRF9ERUZBVUxUUy5DT01QVVRFLlNFUlZFUl9NRU1PUlksXG4gICAgICAgIHRpbWVvdXQ6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5TRVJWRVJfVElNRU9VVFxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBzZXJ2ZXJQcm9wczogQ29kZUxhbWJkYVByb3BzID0ge1xuICAgICAgdHlwZTogXCJsYW1iZGFcIixcbiAgICAgIGRlcGxveW1lbnQ6IFwiY29kZVwiLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIGAke1BBWUxPQURfREVGQVVMVFMuU09VUkNFfS8ke1BBWUxPQURfREVGQVVMVFMuT1BFTk5FWFQuU0VSVkVSfWBcbiAgICAgICksXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICBtZW1vcnlTaXplLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplLFxuICAgICAgZnVuY3Rpb25Vcmw6IHtcbiAgICAgICAgYXV0aFR5cGU6IEZ1bmN0aW9uVXJsQXV0aFR5cGUuTk9ORSxcbiAgICAgICAgaW52b2tlTW9kZTogSW52b2tlTW9kZS5SRVNQT05TRV9TVFJFQU1cbiAgICAgIH0sXG4gICAgICBjb25uZWN0aW9uczogW3RoaXMuX2RhdGFiYXNlXSxcbiAgICAgIHNlY3JldHNJbXBvcnQ6IHtcbiAgICAgICAgREFUQUJBU0VfVVNFUk5BTUU6IHRoaXMuX2RhdGFiYXNlXG4gICAgICAgICAgLmdldENyZWRlbnRpYWxzKClcbiAgICAgICAgICAuZ2V0SW1wb3J0KFwidXNlcm5hbWVcIiksXG4gICAgICAgIERBVEFCQVNFX1BBU1NXT1JEOiB0aGlzLl9kYXRhYmFzZVxuICAgICAgICAgIC5nZXRDcmVkZW50aWFscygpXG4gICAgICAgICAgLmdldEltcG9ydChcInBhc3N3b3JkXCIpLFxuICAgICAgICBQQVlMT0FEX1NFQ1JFVDogdGhpcy5fcGF5bG9hZFNlY3JldC5nZXRJbXBvcnQoKVxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLmJ1aWxkU2VydmVyRW52aXJvbm1lbnQoKVxuICAgIH07XG5cbiAgICBjb25zdCBzZXJ2ZXIgPSB0aGlzLmFwcC5hZGRDb21wdXRlKFxuICAgICAgQ29tcHV0ZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1zZXJ2ZXJgLCBzZXJ2ZXJQcm9wcylcbiAgICApO1xuXG4gICAgdGhpcy5ncmFudFNlcnZlclBlcm1pc3Npb25zKHNlcnZlcik7XG4gICAgcmV0dXJuIHNlcnZlcjtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTZXJ2ZXJFbnZpcm9ubWVudCgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBiYXNlRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgREFUQUJBU0VfSE9TVDogdGhpcy5fZGF0YWJhc2UuZ2V0SG9zdEVuZHBvaW50KCksXG4gICAgICBEQVRBQkFTRV9QT1JUOiB0aGlzLl9kYXRhYmFzZS5nZXRIb3N0UG9ydCgpLFxuICAgICAgREFUQUJBU0VfTkFNRTogdGhpcy5fZGF0YWJhc2UuZ2V0RGF0YWJhc2VOYW1lKCksXG4gICAgICBEQVRBQkFTRV9TU0w6IFwidHJ1ZVwiLFxuICAgICAgQ0FDSEVfQlVDS0VUX05BTUU6IHRoaXMuX2NhY2hlQnVja2V0LmdldEJ1Y2tldE5hbWUoKSxcbiAgICAgIENBQ0hFX0JVQ0tFVF9SRUdJT046IFN0YWNrLm9mKHRoaXMpLnJlZ2lvbixcbiAgICAgIENBQ0hFX0RZTkFNT19UQUJMRTogdGhpcy5fdGFnQ2FjaGUuZ2V0VGFibGVOYW1lKCksXG4gICAgICBSRVZBTElEQVRJT05fUVVFVUVfVVJMOiB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5nZXRRdWV1ZVVybCgpLFxuICAgICAgUkVWQUxJREFUSU9OX1FVRVVFX1JFR0lPTjogU3RhY2sub2YodGhpcykucmVnaW9uLFxuICAgICAgTUVESUFfQlVDS0VUX05BTUU6IHRoaXMuX21lZGlhQnVja2V0LmdldEJ1Y2tldE5hbWUoKVxuICAgIH07XG5cbiAgICAvLyBMb2NrIGRvd24gQ09SUyB0byBjdXN0b20gZG9tYWluIHdoZW4gcHJvdmlkZWRcbiAgICBjb25zdCBjdXN0b21Eb21haW4gPSB0aGlzLnByb3BzLmRvbWFpbiA/PyB0aGlzLnByb3BzLmNkbj8uZG9tYWluTmFtZXM/LlswXTtcbiAgICBpZiAoY3VzdG9tRG9tYWluKSB7XG4gICAgICBiYXNlRW52Lk5FWFRfUFVCTElDX1NFUlZFUl9VUkwgPSBgaHR0cHM6Ly8ke2N1c3RvbURvbWFpbn1gO1xuICAgIH1cblxuICAgIHJldHVybiB7IC4uLmJhc2VFbnYsIC4uLnRoaXMucHJvcHMuZW52aXJvbm1lbnQgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JhbnRTZXJ2ZXJQZXJtaXNzaW9ucyhzZXJ2ZXI6IExhbWJkYUNvbXB1dGUpOiB2b2lkIHtcbiAgICBjb25zdCBzZXJ2ZXJGdW5jdGlvbiA9IHJlcXVpcmVGdW5jdGlvbihzZXJ2ZXIsIFwiU2VydmVyXCIpO1xuICAgIHRoaXMuX2NhY2hlQnVja2V0LmdyYW50UmVhZFdyaXRlKHNlcnZlckZ1bmN0aW9uKTtcbiAgICB0aGlzLl9tZWRpYUJ1Y2tldC5ncmFudFJlYWRXcml0ZShzZXJ2ZXJGdW5jdGlvbik7XG4gICAgdGhpcy5fdGFnQ2FjaGUuZ3JhbnRSZWFkV3JpdGVEYXRhKHNlcnZlckZ1bmN0aW9uKTtcbiAgICB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5ncmFudFNlbmRNZXNzYWdlcyhzZXJ2ZXJGdW5jdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUltYWdlTGFtYmRhKCk6IExhbWJkYUNvbXB1dGUge1xuICAgIGNvbnN0IHsgbWVtb3J5U2l6ZSwgdGltZW91dCwgZXBoZW1lcmFsU3RvcmFnZVNpemUgfSA9IHJlc29sdmVMYW1iZGFDb25maWcoXG4gICAgICB0aGlzLnByb3BzLmNvbXB1dGU/LmltYWdlT3B0aW1pc2F0aW9uLFxuICAgICAge1xuICAgICAgICBtZW1vcnk6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5JTUFHRV9NRU1PUlksXG4gICAgICAgIHRpbWVvdXQ6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5JTUFHRV9USU1FT1VUXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IGltYWdlUHJvcHM6IENvZGVMYW1iZGFQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwibGFtYmRhXCIsXG4gICAgICBkZXBsb3ltZW50OiBcImNvZGVcIixcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KFxuICAgICAgICBgJHtQQVlMT0FEX0RFRkFVTFRTLlNPVVJDRX0vJHtQQVlMT0FEX0RFRkFVTFRTLk9QRU5ORVhULklNQUdFfWBcbiAgICAgICksXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICBtZW1vcnlTaXplLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplLFxuICAgICAgZnVuY3Rpb25Vcmw6IHsgYXV0aFR5cGU6IEZ1bmN0aW9uVXJsQXV0aFR5cGUuTk9ORSB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgQlVDS0VUX05BTUU6IHRoaXMuX2Fzc2V0c0J1Y2tldC5nZXRCdWNrZXROYW1lKCksXG4gICAgICAgIEJVQ0tFVF9LRVlfUFJFRklYOiBcIl9hc3NldHNcIlxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpbWFnZSA9IHRoaXMuYXBwLmFkZENvbXB1dGUoXG4gICAgICBDb21wdXRlRmFjdG9yeS5idWlsZChgJHt0aGlzLnByb3BzLm5hbWV9LWltYWdlYCwgaW1hZ2VQcm9wcylcbiAgICApO1xuXG4gICAgY29uc3QgaW1hZ2VGdW5jdGlvbiA9IHJlcXVpcmVGdW5jdGlvbihpbWFnZSwgXCJJbWFnZU9wdGltaXNhdGlvblwiKTtcbiAgICB0aGlzLl9hc3NldHNCdWNrZXQuZ3JhbnRSZWFkKGltYWdlRnVuY3Rpb24pO1xuXG4gICAgcmV0dXJuIGltYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSZXZhbGlkYXRpb25MYW1iZGEoKTogTGFtYmRhQ29tcHV0ZSB7XG4gICAgY29uc3QgeyBtZW1vcnlTaXplLCB0aW1lb3V0LCBlcGhlbWVyYWxTdG9yYWdlU2l6ZSB9ID0gcmVzb2x2ZUxhbWJkYUNvbmZpZyhcbiAgICAgIHRoaXMucHJvcHMuY29tcHV0ZT8ucmV2YWxpZGF0aW9uLFxuICAgICAge1xuICAgICAgICBtZW1vcnk6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5SRVZBTElEQVRJT05fTUVNT1JZLFxuICAgICAgICB0aW1lb3V0OiBQQVlMT0FEX0RFRkFVTFRTLkNPTVBVVEUuUkVWQUxJREFUSU9OX1RJTUVPVVRcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgcmV2YWxpZGF0aW9uUHJvcHM6IENvZGVMYW1iZGFQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwibGFtYmRhXCIsXG4gICAgICBkZXBsb3ltZW50OiBcImNvZGVcIixcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KFxuICAgICAgICBgJHtQQVlMT0FEX0RFRkFVTFRTLlNPVVJDRX0vJHtQQVlMT0FEX0RFRkFVTFRTLk9QRU5ORVhULlJFVkFMSURBVElPTn1gXG4gICAgICApLFxuICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMl9YLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgbWVtb3J5U2l6ZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlcGhlbWVyYWxTdG9yYWdlU2l6ZSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIENBQ0hFX0RZTkFNT19UQUJMRTogdGhpcy5fdGFnQ2FjaGUuZ2V0VGFibGVOYW1lKCksXG4gICAgICAgIENBQ0hFX0JVQ0tFVF9OQU1FOiB0aGlzLl9jYWNoZUJ1Y2tldC5nZXRCdWNrZXROYW1lKClcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmV2YWxpZGF0aW9uID0gdGhpcy5hcHAuYWRkQ29tcHV0ZShcbiAgICAgIENvbXB1dGVGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0tcmV2YWxpZGF0aW9uYCwgcmV2YWxpZGF0aW9uUHJvcHMpXG4gICAgKTtcblxuICAgIGNvbnN0IHJldmFsaWRhdGlvbkxhbWJkYSA9IHJldmFsaWRhdGlvbi5nZXRMYW1iZGFGdW5jdGlvbigpO1xuICAgIHJldmFsaWRhdGlvbkxhbWJkYS5hZGRTcXNFdmVudFNvdXJjZSh0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5nZXRRdWV1ZSgpLCB7XG4gICAgICBiYXRjaFNpemU6IDVcbiAgICB9KTtcblxuICAgIGNvbnN0IHJldmFsaWRhdGlvbkZ1bmN0aW9uID0gcmVxdWlyZUZ1bmN0aW9uKHJldmFsaWRhdGlvbiwgXCJSZXZhbGlkYXRpb25cIik7XG4gICAgdGhpcy5fdGFnQ2FjaGUuZ3JhbnRSZWFkV3JpdGVEYXRhKHJldmFsaWRhdGlvbkZ1bmN0aW9uKTtcbiAgICB0aGlzLl9jYWNoZUJ1Y2tldC5ncmFudFJlYWRXcml0ZShyZXZhbGlkYXRpb25GdW5jdGlvbik7XG4gICAgdGhpcy5fcmV2YWxpZGF0aW9uUXVldWUuZ3JhbnRDb25zdW1lTWVzc2FnZXMocmV2YWxpZGF0aW9uRnVuY3Rpb24pO1xuXG4gICAgcmV0dXJuIHJldmFsaWRhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2RuKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZG9tYWluTmFtZXMsIGNlcnRpZmljYXRlIH0gPSB0aGlzLnJlc29sdmVEb21haW5Db25maWcoKTtcblxuICAgIGNvbnN0IGNkblByb3BzOiBTbWFydENkblByb3BzID0ge1xuICAgICAgb3JpZ2luVHlwZTogXCJhdXRvXCIsXG4gICAgICBvcmlnaW46IHRoaXMuX3NlcnZlcixcbiAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfRElTQUJMRURcIixcbiAgICAgIGRlZmF1bHRBbGxvd2VkTWV0aG9kczogXCJBTExcIixcbiAgICAgIGZvcndhcmRIb3N0SGVhZGVyOiB0cnVlLFxuICAgICAgcHJpY2VDbGFzczogXCJQcmljZUNsYXNzXzEwMFwiLFxuICAgICAgZG9tYWluTmFtZXMsXG4gICAgICBjZXJ0aWZpY2F0ZSxcbiAgICAgIGJlaGF2aW91cnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLlNUQVRJQyxcbiAgICAgICAgICBvcmlnaW46IHRoaXMuX2Fzc2V0c0J1Y2tldCxcbiAgICAgICAgICBjYWNoZVBvbGljeTogXCJDQUNISU5HX09QVElNSVpFRFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXRoUGF0dGVybjogUEFZTE9BRF9ERUZBVUxUUy5QQVRIUy5JTUFHRSxcbiAgICAgICAgICBvcmlnaW46IHRoaXMuX2ltYWdlT3B0aW1pc2F0aW9uLFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfT1BUSU1JWkVEXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLkFQSSxcbiAgICAgICAgICBvcmlnaW46IHRoaXMuX3NlcnZlcixcbiAgICAgICAgICBjYWNoZVBvbGljeTogXCJDQUNISU5HX0RJU0FCTEVEXCIsXG4gICAgICAgICAgYWxsb3dlZE1ldGhvZHM6IFwiQUxMXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLkFETUlOLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5fc2VydmVyLFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfRElTQUJMRURcIixcbiAgICAgICAgICBhbGxvd2VkTWV0aG9kczogXCJBTExcIlxuICAgICAgICB9LFxuICAgICAgICAuLi4odGhpcy5wcm9wcy5jZG4/LmJlaGF2aW91cnMgPz8gW10pXG4gICAgICBdXG4gICAgfTtcblxuICAgIHRoaXMuX2NkbiA9IHRoaXMuYXBwLmFkZENkbihDZG5GYWN0b3J5LmJ1aWxkKHRoaXMucHJvcHMubmFtZSwgY2RuUHJvcHMpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZURvbWFpbkNvbmZpZygpOiB7XG4gICAgZG9tYWluTmFtZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgIGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGUgfCB1bmRlZmluZWQ7XG4gICAgaG9zdGVkWm9uZTogUmV0dXJuVHlwZTx0eXBlb2YgSG9zdGVkWm9uZS5mcm9tTG9va3VwPiB8IHVuZGVmaW5lZDtcbiAgfSB7XG4gICAgaWYgKHRoaXMuX3Jlc29sdmVkRG9tYWluKSByZXR1cm4gdGhpcy5fcmVzb2x2ZWREb21haW47XG5cbiAgICBpZiAodGhpcy5wcm9wcy5kb21haW4pIHtcbiAgICAgIHRoaXMuX3Jlc29sdmVkRG9tYWluID0gdGhpcy5yZXNvbHZlU2ltcGxlRG9tYWluKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmNkbj8uZG9tYWluTmFtZXM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5fcmVzb2x2ZWREb21haW4gPSB0aGlzLnJlc29sdmVBZHZhbmNlZERvbWFpbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZXNvbHZlZERvbWFpbiA9IHtcbiAgICAgICAgZG9tYWluTmFtZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgY2VydGlmaWNhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgaG9zdGVkWm9uZTogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlZERvbWFpbjtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVNpbXBsZURvbWFpbigpOiB7XG4gICAgZG9tYWluTmFtZXM6IHN0cmluZ1tdO1xuICAgIGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGU7XG4gICAgaG9zdGVkWm9uZTogUmV0dXJuVHlwZTx0eXBlb2YgSG9zdGVkWm9uZS5mcm9tTG9va3VwPjtcbiAgfSB7XG4gICAgY29uc3QgZG9tYWluID0gdGhpcy5wcm9wcy5kb21haW47XG4gICAgaWYgKCFkb21haW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRvbWFpbiBpcyByZXF1aXJlZCBmb3Igc2ltcGxlIGRvbWFpbiByZXNvbHV0aW9uXCIpO1xuICAgIH1cbiAgICBjb25zdCByb290RG9tYWluID0gZXh0cmFjdFJvb3REb21haW4oZG9tYWluKTtcblxuICAgIGNvbnN0IGhvc3RlZFpvbmUgPSBIb3N0ZWRab25lLmZyb21Mb29rdXAoXG4gICAgICB0aGlzLFxuICAgICAgYCR7dGhpcy5wYXNjYWxOYW1lfUhvc3RlZFpvbmVgLFxuICAgICAgeyBkb21haW5OYW1lOiByb290RG9tYWluIH1cbiAgICApO1xuXG4gICAgY29uc3QgY2VydGlmaWNhdGUgPSBuZXcgQ2VydGlmaWNhdGUodGhpcywgYCR7dGhpcy5wYXNjYWxOYW1lfUNlcnRpZmljYXRlYCwge1xuICAgICAgZG9tYWluTmFtZTogZG9tYWluLFxuICAgICAgdmFsaWRhdGlvbjogQ2VydGlmaWNhdGVWYWxpZGF0aW9uLmZyb21EbnMoaG9zdGVkWm9uZSlcbiAgICB9KTtcblxuICAgIHJldHVybiB7IGRvbWFpbk5hbWVzOiBbZG9tYWluXSwgY2VydGlmaWNhdGUsIGhvc3RlZFpvbmUgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUFkdmFuY2VkRG9tYWluKCk6IHtcbiAgICBkb21haW5OYW1lczogc3RyaW5nW107XG4gICAgY2VydGlmaWNhdGU6IElDZXJ0aWZpY2F0ZSB8IHVuZGVmaW5lZDtcbiAgICBob3N0ZWRab25lOiB1bmRlZmluZWQ7XG4gIH0ge1xuICAgIGNvbnN0IGNkbkNvbmZpZyA9IHRoaXMucHJvcHMuY2RuO1xuICAgIGlmICghY2RuQ29uZmlnPy5kb21haW5OYW1lcz8ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ0ROIGRvbWFpbiBuYW1lcyBhcmUgcmVxdWlyZWQgZm9yIGFkdmFuY2VkIGRvbWFpbiByZXNvbHV0aW9uXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY2VydGlmaWNhdGUgPVxuICAgICAgY2RuQ29uZmlnLmNlcnRpZmljYXRlID8/XG4gICAgICAoY2RuQ29uZmlnLmNlcnRpZmljYXRlQXJuXG4gICAgICAgID8gQ2VydGlmaWNhdGUuZnJvbUNlcnRpZmljYXRlQXJuKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGAke3RoaXMucGFzY2FsTmFtZX1DZXJ0aWZpY2F0ZWAsXG4gICAgICAgICAgICBjZG5Db25maWcuY2VydGlmaWNhdGVBcm5cbiAgICAgICAgICApXG4gICAgICAgIDogdW5kZWZpbmVkKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkb21haW5OYW1lczogY2RuQ29uZmlnLmRvbWFpbk5hbWVzLFxuICAgICAgY2VydGlmaWNhdGUsXG4gICAgICBob3N0ZWRab25lOiB1bmRlZmluZWRcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEbnNSZWNvcmQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLmRvbWFpbikgcmV0dXJuO1xuXG4gICAgY29uc3QgeyBob3N0ZWRab25lIH0gPSB0aGlzLnJlc29sdmVEb21haW5Db25maWcoKTtcbiAgICBpZiAoIWhvc3RlZFpvbmUpIHJldHVybjtcblxuICAgIC8vIENyZWF0ZSB0aGUgRE5TIHJlY29yZCBpbiB0aGUgQ0ROIHN0YWNrIChub3QgdGhlIENvbXB1dGUgc3RhY2sgd2hlcmUgdGhpc1xuICAgIC8vIFBheWxvYWQgY29uc3RydWN0IGxpdmVzKSB0byBhdm9pZCBhIGN5Y2xpYyBkZXBlbmRlbmN5OiBDRE4gcmVmZXJlbmNlcyB0aGVcbiAgICAvLyBzZXJ2ZXIgTGFtYmRhIEZ1bmN0aW9uVXJsLCBzbyBDb21wdXRlIGNhbm5vdCBhbHNvIGRlcGVuZCBvbiBDRE4uXG4gICAgY29uc3QgY2RuU3RhY2sgPSB0aGlzLmFwcC5nZXREZWZhdWx0Q2RuU3RhY2soKS5nZXRTdGFjaygpO1xuICAgIG5ldyBBUmVjb3JkKGNkblN0YWNrLCBgJHt0aGlzLnBhc2NhbE5hbWV9QWxpYXNSZWNvcmRgLCB7XG4gICAgICB6b25lOiBob3N0ZWRab25lLFxuICAgICAgcmVjb3JkTmFtZTogdGhpcy5wcm9wcy5kb21haW4sXG4gICAgICB0YXJnZXQ6IFJlY29yZFRhcmdldC5mcm9tQWxpYXMoXG4gICAgICAgIG5ldyBDbG91ZEZyb250VGFyZ2V0KHRoaXMuX2Nkbi5nZXREaXN0cmlidXRpb24oKSlcbiAgICAgIClcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZXhwb3J0UGF0dGVybk91dHB1dHMoKTogdm9pZCB7XG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHt0aGlzLnBhc2NhbE5hbWV9UGF0dGVyblR5cGVgLCB7XG4gICAgICBrZXk6IGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuVHlwZWAsXG4gICAgICB2YWx1ZTogXCJwYXlsb2FkXCIsXG4gICAgICBkZXNjcmlwdGlvbjogYFBhdHRlcm4gdHlwZSBmb3IgJHt0aGlzLnByb3BzLm5hbWV9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHt0aGlzLnBhc2NhbE5hbWV9UGF0dGVybk5hbWVgLCB7XG4gICAgICBrZXk6IGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuTmFtZWAsXG4gICAgICB2YWx1ZTogdGhpcy5wcm9wcy5uYW1lLFxuICAgICAgZGVzY3JpcHRpb246IGBQYXR0ZXJuIG5hbWUgZm9yICR7dGhpcy5wcm9wcy5uYW1lfWBcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7dGhpcy5wYXNjYWxOYW1lfVBhdHRlcm5MYW1iZGFzYCwge1xuICAgICAga2V5OiBgJHt0aGlzLnBhc2NhbE5hbWV9UGF0dGVybkxhbWJkYXNgLFxuICAgICAgdmFsdWU6IFtcbiAgICAgICAgYCR7dGhpcy5wcm9wcy5uYW1lfS1zZXJ2ZXJgLFxuICAgICAgICBgJHt0aGlzLnByb3BzLm5hbWV9LWltYWdlYCxcbiAgICAgICAgYCR7dGhpcy5wcm9wcy5uYW1lfS1yZXZhbGlkYXRpb25gXG4gICAgICBdLmpvaW4oXCIsXCIpLFxuICAgICAgZGVzY3JpcHRpb246IGBMYW1iZGEgY29uc3RydWN0IHByZWZpeGVzIGZvciBwYXR0ZXJuICR7dGhpcy5wcm9wcy5uYW1lfWBcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7dGhpcy5wYXNjYWxOYW1lfVBhdHRlcm5SZXNvdXJjZXNgLCB7XG4gICAgICBrZXk6IGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuUmVzb3VyY2VzYCxcbiAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGRhdGFiYXNlczogW3RoaXMucHJvcHMubmFtZSwgYCR7dGhpcy5wcm9wcy5uYW1lfS10YWctY2FjaGVgXSxcbiAgICAgICAgc3RvcmFnZTogW1xuICAgICAgICAgIGAke3RoaXMucHJvcHMubmFtZX0tYXNzZXRzYCxcbiAgICAgICAgICBgJHt0aGlzLnByb3BzLm5hbWV9LWNhY2hlYCxcbiAgICAgICAgICBgJHt0aGlzLnByb3BzLm5hbWV9LW1lZGlhYFxuICAgICAgICBdLFxuICAgICAgICBjZG46IHRoaXMucHJvcHMubmFtZVxuICAgICAgfSksXG4gICAgICBkZXNjcmlwdGlvbjogYFJlbGF0ZWQgcmVzb3VyY2UgbmFtZXMgZm9yIHBhdHRlcm4gJHt0aGlzLnByb3BzLm5hbWV9YFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0RGF0YWJhc2UoKTogUmVsYXRpb25hbERhdGFiYXNlIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YWJhc2U7XG4gIH1cblxuICBnZXRTZXJ2ZXIoKTogTGFtYmRhQ29tcHV0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcnZlcjtcbiAgfVxuXG4gIGdldEltYWdlT3B0aW1pc2F0aW9uKCk6IExhbWJkYUNvbXB1dGUge1xuICAgIHJldHVybiB0aGlzLl9pbWFnZU9wdGltaXNhdGlvbjtcbiAgfVxuXG4gIGdldFJldmFsaWRhdGlvbigpOiBMYW1iZGFDb21wdXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcmV2YWxpZGF0aW9uO1xuICB9XG5cbiAgZ2V0QXNzZXRzQnVja2V0KCk6IFN0b3JhZ2Uge1xuICAgIHJldHVybiB0aGlzLl9hc3NldHNCdWNrZXQ7XG4gIH1cblxuICBnZXRDYWNoZUJ1Y2tldCgpOiBTdG9yYWdlIHtcbiAgICByZXR1cm4gdGhpcy5fY2FjaGVCdWNrZXQ7XG4gIH1cblxuICBnZXRNZWRpYUJ1Y2tldCgpOiBTdG9yYWdlIHtcbiAgICByZXR1cm4gdGhpcy5fbWVkaWFCdWNrZXQ7XG4gIH1cblxuICBnZXRUYWdDYWNoZSgpOiBEeW5hbW9EQkRhdGFiYXNlIHtcbiAgICByZXR1cm4gdGhpcy5fdGFnQ2FjaGU7XG4gIH1cblxuICBnZXRSZXZhbGlkYXRpb25RdWV1ZSgpOiBRdWV1ZU1lc3NhZ2luZyB7XG4gICAgcmV0dXJuIHRoaXMuX3JldmFsaWRhdGlvblF1ZXVlO1xuICB9XG5cbiAgZ2V0Q2RuKCk6IENkbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NkbjtcbiAgfVxufVxuIl19
|
|
594
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvcGF5bG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7OztBQUVILDJDQUF1QztBQUN2Qyw2Q0FBbUQ7QUFDbkQseURBQXFEO0FBQ3JELHVEQU1nQztBQUNoQywrRUFJNEM7QUFDNUMseURBQTRFO0FBQzVFLHlFQUFtRTtBQUtuRSwrQ0FPdUI7QUFDdkIsNkNBS3NCO0FBQ3RCLDZDQUEwRTtBQUMxRSxpREFJd0I7QUFDeEIscUNBQW9FO0FBQ3BFLHlFQUE4RDtBQUM5RCx5RUFHeUM7QUFFekMsTUFBTSxnQkFBZ0IsR0FBRztJQUN2QixxRkFBcUY7SUFDckYsTUFBTSxFQUFFLE9BQU87SUFDZixtRkFBbUY7SUFDbkYsZUFBZSxFQUFFLFdBQVc7SUFDNUIsUUFBUSxFQUFFO1FBQ1IsSUFBSSxFQUFFLFVBQW1CO1FBQ3pCLDhFQUE4RTtRQUM5RSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLG1CQUFtQixFQUFFLElBQUk7S0FDMUI7SUFDRCxPQUFPLEVBQUU7UUFDUCw2RkFBNkY7UUFDN0YsYUFBYSxFQUFFLElBQUk7UUFDbkIsK0RBQStEO1FBQy9ELGNBQWMsRUFBRSxFQUFFO1FBQ2xCLDJFQUEyRTtRQUMzRSxZQUFZLEVBQUUsSUFBSTtRQUNsQix3RUFBd0U7UUFDeEUsYUFBYSxFQUFFLEVBQUU7UUFDakIsNEZBQTRGO1FBQzVGLG1CQUFtQixFQUFFLEdBQUc7UUFDeEIsK0VBQStFO1FBQy9FLG9CQUFvQixFQUFFLEdBQUc7S0FDMUI7SUFDRCxLQUFLLEVBQUU7UUFDTCxnR0FBZ0c7UUFDaEcsZUFBZSxFQUFFLFFBQVE7S0FDMUI7SUFDRCxRQUFRLEVBQUU7UUFDUixNQUFNLEVBQUUsbUJBQW1CO1FBQzNCLEtBQUssRUFBRSxrQkFBa0I7UUFDekIsTUFBTSxFQUFFLHFDQUFxQztR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LE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBaG9CRCwwQkFnb0JDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXlsb2FkIENNUyBQYXR0ZXJuLlxuICpcbiAqIEEgaGlnaC1sZXZlbCBwYXR0ZXJuIHRoYXQgY3JlYXRlcyBhbGwgaW5mcmFzdHJ1Y3R1cmUgcmVxdWlyZWQgZm9yIGFcbiAqIFBheWxvYWQgQ01TIGRlcGxveW1lbnQgdXNpbmcgT3Blbk5leHQuXG4gKlxuICogUmVzb3VyY2VzIGNyZWF0ZWQ6XG4gKiAtIFJEUyBQb3N0Z3JlU1FMIGRhdGFiYXNlIChBdXJvcmEgb3IgSW5zdGFuY2UpXG4gKiAtIDMgUzMgYnVja2V0cyAoYXNzZXRzLCBjYWNoZSwgbWVkaWEpXG4gKiAtIER5bmFtb0RCIHRhYmxlICh0YWcgY2FjaGUgd2l0aCBHU0kpXG4gKiAtIFNRUyBGSUZPIHF1ZXVlIChyZXZhbGlkYXRpb24pXG4gKiAtIDMgTGFtYmRhIGZ1bmN0aW9ucyAoc2VydmVyLCBpbWFnZSBvcHRpbWlzYXRpb24sIHJldmFsaWRhdGlvbilcbiAqIC0gQ2xvdWRGcm9udCBkaXN0cmlidXRpb25cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcGF5bG9hZCA9IGFwcC5hZGRQYXR0ZXJuKFBhdHRlcm5GYWN0b3J5LmJ1aWxkKFwiUGF5bG9hZEFwcFwiLCB7XG4gKiAgIHR5cGU6IFwicGF5bG9hZFwiLFxuICogICBuYW1lOiBcIm15LWNtc1wiXG4gKiB9KSk7XG4gKlxuICogLy8gRXNjYXBlIGhhdGNoZXNcbiAqIHBheWxvYWQuZ2V0RGF0YWJhc2UoKS5ncmFudENvbm5lY3Qob3RoZXJMYW1iZGEpO1xuICovXG5cbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDZm5PdXRwdXQsIEZuLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc2VjcmV0c1wiO1xuaW1wb3J0IHtcbiAgQ29kZSxcbiAgUnVudGltZSxcbiAgQXJjaGl0ZWN0dXJlLFxuICBGdW5jdGlvblVybEF1dGhUeXBlLFxuICB0eXBlIElGdW5jdGlvblxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHtcbiAgQ2VydGlmaWNhdGUsXG4gIENlcnRpZmljYXRlVmFsaWRhdGlvbixcbiAgdHlwZSBJQ2VydGlmaWNhdGVcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXJcIjtcbmltcG9ydCB7IEhvc3RlZFpvbmUsIEFSZWNvcmQsIFJlY29yZFRhcmdldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1M1wiO1xuaW1wb3J0IHsgQ2xvdWRGcm9udFRhcmdldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1My10YXJnZXRzXCI7XG5cbmltcG9ydCB0eXBlIEFwcCBmcm9tIFwiLi4vLi4vYXBwLmpzXCI7XG5pbXBvcnQgeyB0eXBlIElQYXlsb2FkUHJvcHMsIHR5cGUgSVBheWxvYWQgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IHR5cGUgTWFuaWZlc3RQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL21hbmlmZXN0V3JpdGVyLmpzXCI7XG5pbXBvcnQge1xuICB0eXBlIFJlbGF0aW9uYWxEYXRhYmFzZSxcbiAgdHlwZSBEeW5hbW9EQkRhdGFiYXNlLFxuICBEYXRhYmFzZUZhY3RvcnksXG4gIHR5cGUgQXVyb3JhRGF0YWJhc2VQcm9wcyxcbiAgdHlwZSBJbnN0YW5jZURhdGFiYXNlUHJvcHMsXG4gIHR5cGUgRHluYW1vREJEYXRhYmFzZVByb3BzXG59IGZyb20gXCIuL2RhdGFiYXNlLmpzXCI7XG5pbXBvcnQge1xuICBDb21wdXRlRmFjdG9yeSxcbiAgdHlwZSBMYW1iZGFDb21wdXRlLFxuICBJbnZva2VNb2RlLFxuICB0eXBlIENvZGVMYW1iZGFQcm9wc1xufSBmcm9tIFwiLi9jb21wdXRlLmpzXCI7XG5pbXBvcnQgeyBTdG9yYWdlRmFjdG9yeSwgdHlwZSBTdG9yYWdlLCB0eXBlIFMzUHJvcHMgfSBmcm9tIFwiLi9zdG9yYWdlLmpzXCI7XG5pbXBvcnQge1xuICBNZXNzYWdpbmdGYWN0b3J5LFxuICB0eXBlIFF1ZXVlTWVzc2FnaW5nLFxuICB0eXBlIElRdWV1ZVByb3BzXG59IGZyb20gXCIuL21lc3NhZ2luZy5qc1wiO1xuaW1wb3J0IHsgQ2RuRmFjdG9yeSwgdHlwZSBDZG4sIHR5cGUgU21hcnRDZG5Qcm9wcyB9IGZyb20gXCIuL2Nkbi5qc1wiO1xuaW1wb3J0IHsgRmphbGxMb2dnZXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdmFsaWRhdGlvbkxvZ2dlci5qc1wiO1xuaW1wb3J0IHtcbiAgdG9QYXNjYWxDYXNlLFxuICB0b1ZhbGlkRGF0YWJhc2VOYW1lXG59IGZyb20gXCIuLi8uLi91dGlscy9jYXBpdGFsaXNlU3RyaW5nLmpzXCI7XG5cbmNvbnN0IFBBWUxPQURfREVGQVVMVFMgPSB7XG4gIC8qKiBQYXRoIHRvIE9wZW5OZXh0IG91dHB1dCByZWxhdGl2ZSB0byBhcHAgZm9sZGVyIChDREsgcnVucyBmcm9tIGZqYWxsLzxhcHBuYW1lPikgKi9cbiAgU09VUkNFOiBcIi4uLy4uXCIsXG4gIC8qKiBDbG91ZEZyb250IHJlcXVpcmVzIHVzLWVhc3QtMSBmb3IgY2VydGFpbiByZXNvdXJjZXM7IHVzZWQgYXMgcmVnaW9uIGZhbGxiYWNrICovXG4gIEZBTExCQUNLX1JFR0lPTjogXCJ1cy1lYXN0LTFcIixcbiAgREFUQUJBU0U6IHtcbiAgICBUWVBFOiBcIkluc3RhbmNlXCIgYXMgY29uc3QsXG4gICAgLyoqIEFXUyBkZWZhdWx0OyA3IGRheXMgY292ZXJzIG1vc3QgYWNjaWRlbnRhbCBkYXRhIGxvc3MgcmVjb3Zlcnkgc2NlbmFyaW9zICovXG4gICAgQkFDS1VQX1JFVEVOVElPTjogNyxcbiAgICBERUxFVElPTl9QUk9URUNUSU9OOiB0cnVlXG4gIH0sXG4gIENPTVBVVEU6IHtcbiAgICAvKiogMS41IEdCIGJhbGFuY2VzIE5leHQuanMgU1NSIHBlcmZvcm1hbmNlIHZzIGNvc3Q7IGJlbG93IHRoaXMgcmlza3MgT09NIG9uIGNvbXBsZXggcGFnZXMgKi9cbiAgICBTRVJWRVJfTUVNT1JZOiAxNTM2LFxuICAgIC8qKiBBUEkgR2F0ZXdheSBkZWZhdWx0IG1heDsgc3VmZmljaWVudCBmb3IgbW9zdCBTU1IgcmVuZGVycyAqL1xuICAgIFNFUlZFUl9USU1FT1VUOiAzMCxcbiAgICAvKiogU2hhcnAgaW1hZ2UgcHJvY2Vzc2luZyBuZWVkcyBtZW1vcnkgcHJvcG9ydGlvbmFsIHRvIGltYWdlIGRpbWVuc2lvbnMgKi9cbiAgICBJTUFHRV9NRU1PUlk6IDE1MzYsXG4gICAgLyoqIEltYWdlIHByb2Nlc3NpbmcgdHlwaWNhbGx5IGNvbXBsZXRlcyBpbiA8MTBzOyAzMHMgcHJvdmlkZXMgbWFyZ2luICovXG4gICAgSU1BR0VfVElNRU9VVDogMzAsXG4gICAgLyoqIFJldmFsaWRhdGlvbiBpcyBsaWdodHdlaWdodCAoSFRUUCBjYWxsICsgY2FjaGUgd3JpdGUpOyBoYWxmIG9mIHNlcnZlciBtZW1vcnkgc3VmZmljZXMgKi9cbiAgICBSRVZBTElEQVRJT05fTUVNT1JZOiA3NjgsXG4gICAgLyoqIDUgbWludXRlcyBhbGxvd3MgYmF0Y2ggcmV2YWxpZGF0aW9uIG9mIG1hbnkgcGFnZXMgaW4gYSBzaW5nbGUgaW52b2NhdGlvbiAqL1xuICAgIFJFVkFMSURBVElPTl9USU1FT1VUOiAzMDBcbiAgfSxcbiAgQ0FDSEU6IHtcbiAgICAvKiogMSB5ZWFyIOKAlCBzdGF0aWMgYXNzZXRzIGFyZSBjb250ZW50LWhhc2hlZCBzbyBsb25nIGNhY2hpbmcgaXMgc2FmZTsgbWF4aW1pc2VzIENETiBoaXQgcmF0ZSAqL1xuICAgIE1BWF9BR0VfU0VDT05EUzogMzE1MzYwMDBcbiAgfSxcbiAgT1BFTk5FWFQ6IHtcbiAgICBBU1NFVFM6IFwiLm9wZW4tbmV4dC9hc3NldHNcIixcbiAgICBDQUNIRTogXCIub3Blbi1uZXh0L2NhY2hlXCIsXG4gICAgU0VSVkVSOiBcIi5vcGVuLW5leHQvc2VydmVyLWZ1bmN0aW9ucy9kZWZhdWx0XCIsXG4gICAgSU1BR0U6IFwiLm9wZW4tbmV4dC9pbWFnZS1vcHRpbWl6YXRpb24tZnVuY3Rpb25cIixcbiAgICBSRVZBTElEQVRJT046IFwiLm9wZW4tbmV4dC9yZXZhbGlkYXRpb24tZnVuY3Rpb25cIlxuICB9LFxuICBQQVRIUzoge1xuICAgIFNUQVRJQzogXCIvX25leHQvc3RhdGljLypcIixcbiAgICBJTUFHRTogXCIvX25leHQvaW1hZ2UqXCIsXG4gICAgQVBJOiBcIi9hcGkvKlwiLFxuICAgIEFETUlOOiBcIi9hZG1pbi8qXCJcbiAgfVxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBFeHRyYWN0IHJvb3QgZG9tYWluIGZyb20gYSBmdWxsIGRvbWFpbiBuYW1lLlxuICogZS5nLiwgXCJjbXMuZXhhbXBsZS5jb21cIiAtPiBcImV4YW1wbGUuY29tXCJcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFJvb3REb21haW4oZG9tYWluOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0cyA9IGRvbWFpbi5zcGxpdChcIi5cIik7XG4gIHJldHVybiBwYXJ0cy5sZW5ndGggPiAyID8gcGFydHMuc2xpY2UoLTIpLmpvaW4oXCIuXCIpIDogZG9tYWluO1xufVxuXG4vKipcbiAqIFNhZmVseSBnZXQgdGhlIHVuZGVybHlpbmcgTGFtYmRhIGZ1bmN0aW9uIGZyb20gYSBjb21wdXRlIHJlc291cmNlLlxuICogVGhyb3dzIGEgY2xlYXIgZXJyb3IgaWYgdGhlIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVGdW5jdGlvbihjb21wdXRlOiBMYW1iZGFDb21wdXRlLCBuYW1lOiBzdHJpbmcpOiBJRnVuY3Rpb24ge1xuICBjb25zdCBmbiA9IGNvbXB1dGUuZ2V0RnVuY3Rpb24oKTtcbiAgaWYgKCFmbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke25hbWV9IExhbWJkYSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLiBgICtcbiAgICAgICAgXCJUaGlzIGluZGljYXRlcyBhbiBpbnRlcm5hbCBlcnJvciBpbiBjb21wdXRlIHJlc291cmNlIGNyZWF0aW9uLlwiXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZm47XG59XG5cbi8qKlxuICogQmFzZSBkYXRhYmFzZSBwcm9wZXJ0aWVzIHNoYXJlZCBiZXR3ZWVuIEF1cm9yYSBhbmQgSW5zdGFuY2UuXG4gKiBVc2VzIFBpY2sgdG8gZXh0cmFjdCBjb21tb24gcHJvcGVydGllcyBmcm9tIHRoZSBkYXRhYmFzZSBjb25maWcuXG4gKi9cbnR5cGUgQmFzZURhdGFiYXNlUHJvcHMgPSBQaWNrPFxuICBJbnN0YW5jZURhdGFiYXNlUHJvcHMsXG4gIHwgXCJkYXRhYmFzZU5hbWVcIlxuICB8IFwiZGF0YWJhc2VFbmdpbmVcIlxuICB8IFwiYmFja3VwUmV0ZW50aW9uXCJcbiAgfCBcImRlbGV0aW9uUHJvdGVjdGlvblwiXG4gIHwgXCJwdWJsaWNseUFjY2Vzc2libGVcIlxuICB8IFwicG9ydFwiXG4gIHwgXCJkYXRhYmFzZUluc2lnaHRzXCJcbiAgfCBcInByb3h5XCJcbiAgfCBcImNyZWRlbnRpYWxzXCJcbiAgfCBcInNuYXBzaG90SWRlbnRpZmllclwiXG4gIHwgXCJzbmFwc2hvdFVzZXJuYW1lXCJcbj47XG5cbi8qKlxuICogTGFtYmRhIGNvbmZpZ3VyYXRpb24gd2l0aCByZXNvbHZlZCBkZWZhdWx0cy5cbiAqL1xuaW50ZXJmYWNlIFJlc29sdmVkTGFtYmRhQ29uZmlnIHtcbiAgbWVtb3J5U2l6ZTogbnVtYmVyO1xuICB0aW1lb3V0OiBudW1iZXI7XG4gIGVwaGVtZXJhbFN0b3JhZ2VTaXplPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgTGFtYmRhIGNvbmZpZyBmcm9tIHByb3BzIHdpdGggZGVmYXVsdHMuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVMYW1iZGFDb25maWcoXG4gIGNvbmZpZzpcbiAgICB8IHsgbWVtb3J5U2l6ZT86IG51bWJlcjsgdGltZW91dD86IG51bWJlcjsgZXBoZW1lcmFsU3RvcmFnZVNpemU/OiBudW1iZXIgfVxuICAgIHwgdW5kZWZpbmVkLFxuICBkZWZhdWx0czogeyBtZW1vcnk6IG51bWJlcjsgdGltZW91dDogbnVtYmVyIH1cbik6IFJlc29sdmVkTGFtYmRhQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBtZW1vcnlTaXplOiBjb25maWc/Lm1lbW9yeVNpemUgPz8gZGVmYXVsdHMubWVtb3J5LFxuICAgIHRpbWVvdXQ6IGNvbmZpZz8udGltZW91dCA/PyBkZWZhdWx0cy50aW1lb3V0LFxuICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplOiBjb25maWc/LmVwaGVtZXJhbFN0b3JhZ2VTaXplXG4gIH07XG59XG5cbi8qKlxuICogUGF5bG9hZCBDTVMgcGF0dGVybiBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBDb21wb3NlcyBhbGwgcmVxdWlyZWQgQVdTIHJlc291cmNlcyBmb3IgYSBQYXlsb2FkIGRlcGxveW1lbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXlsb2FkIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSVBheWxvYWQge1xuICBwdWJsaWMgcmVhZG9ubHkgcGF0dGVyblR5cGUgPSBcInBheWxvYWRcIiBhcyBjb25zdDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGFwcDogQXBwO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBJUGF5bG9hZFByb3BzO1xuICBwcml2YXRlIHJlYWRvbmx5IHBhc2NhbE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfcGF5bG9hZFNlY3JldDogU2VjcmV0O1xuXG4gIHByaXZhdGUgX2RhdGFiYXNlITogUmVsYXRpb25hbERhdGFiYXNlO1xuICBwcml2YXRlIF9zZXJ2ZXIhOiBMYW1iZGFDb21wdXRlO1xuICBwcml2YXRlIF9pbWFnZU9wdGltaXNhdGlvbiE6IExhbWJkYUNvbXB1dGU7XG4gIHByaXZhdGUgX3JldmFsaWRhdGlvbiE6IExhbWJkYUNvbXB1dGU7XG4gIHByaXZhdGUgX2Fzc2V0c0J1Y2tldCE6IFN0b3JhZ2U7XG4gIHByaXZhdGUgX2NhY2hlQnVja2V0ITogU3RvcmFnZTtcbiAgcHJpdmF0ZSBfbWVkaWFCdWNrZXQhOiBTdG9yYWdlO1xuICBwcml2YXRlIF90YWdDYWNoZSE6IER5bmFtb0RCRGF0YWJhc2U7XG4gIHByaXZhdGUgX3JldmFsaWRhdGlvblF1ZXVlITogUXVldWVNZXNzYWdpbmc7XG4gIHByaXZhdGUgX2NkbiE6IENkbjtcbiAgcHJpdmF0ZSBfcmVzb2x2ZWREb21haW46XG4gICAgfCB7XG4gICAgICAgIGRvbWFpbk5hbWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgICAgICAgY2VydGlmaWNhdGU6IElDZXJ0aWZpY2F0ZSB8IHVuZGVmaW5lZDtcbiAgICAgICAgaG9zdGVkWm9uZTogUmV0dXJuVHlwZTx0eXBlb2YgSG9zdGVkWm9uZS5mcm9tTG9va3VwPiB8IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhcHA6IEFwcCwgcHJvcHM6IElQYXlsb2FkUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5hcHAgPSBhcHA7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMucGFzY2FsTmFtZSA9IHRvUGFzY2FsQ2FzZShwcm9wcy5uYW1lKTtcbiAgICB0aGlzLl9wYXlsb2FkU2VjcmV0ID0gbmV3IFNlY3JldCh0aGlzLCBgJHt0aGlzLnBhc2NhbE5hbWV9UGF5bG9hZFNlY3JldGAsIHtcbiAgICAgIHNlY3JldE5hbWU6IGAke3Byb3BzLm5hbWV9L3BheWxvYWQtc2VjcmV0YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBgUGF5bG9hZCBDTVMgc2VjcmV0IGZvciAke3Byb3BzLm5hbWV9YCxcbiAgICAgIGdlbmVyYXRlU2VjcmV0U3RyaW5nOiB7XG4gICAgICAgIGV4Y2x1ZGVQdW5jdHVhdGlvbjogdHJ1ZSxcbiAgICAgICAgcGFzc3dvcmRMZW5ndGg6IDY0XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyTWFuaWZlc3QoKTtcbiAgICB0aGlzLnZhbGlkYXRlUHJvcHMoKTtcblxuICAgIHRoaXMuY3JlYXRlRGF0YWJhc2UoKTtcbiAgICB0aGlzLmNyZWF0ZVN0b3JhZ2VCdWNrZXRzKCk7XG4gICAgdGhpcy5jcmVhdGVUYWdDYWNoZSgpO1xuICAgIHRoaXMuY3JlYXRlUmV2YWxpZGF0aW9uUXVldWUoKTtcbiAgICB0aGlzLmNyZWF0ZUxhbWJkYUZ1bmN0aW9ucygpO1xuICAgIHRoaXMuY3JlYXRlQ2RuKCk7XG4gICAgdGhpcy5jcmVhdGVEbnNSZWNvcmQoKTtcbiAgICB0aGlzLmV4cG9ydFBhdHRlcm5PdXRwdXRzKCk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyTWFuaWZlc3QoKTogdm9pZCB7XG4gICAgY29uc3QgbWFuaWZlc3RQYXR0ZXJuOiBNYW5pZmVzdFBhdHRlcm4gPSB7XG4gICAgICB0eXBlOiBcInBheWxvYWRcIixcbiAgICAgIG5hbWU6IHRoaXMucHJvcHMubmFtZSxcbiAgICAgIHNvdXJjZTogUEFZTE9BRF9ERUZBVUxUUy5TT1VSQ0VcbiAgICB9O1xuICAgIHRoaXMuYXBwLmdldE1hbmlmZXN0Q29sbGVjdG9yKCkuc2V0UGF0dGVybihtYW5pZmVzdFBhdHRlcm4pO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVByb3BzKCk6IHZvaWQge1xuICAgIGNvbnN0IGRiQ29uZmlnID0gdGhpcy5wcm9wcy5kYXRhYmFzZSA/PyB7fTtcbiAgICBpZiAoZGJDb25maWcucHVibGljbHlBY2Nlc3NpYmxlKSB7XG4gICAgICBGamFsbExvZ2dlci53YXJuKFxuICAgICAgICBgUGF5bG9hZCBkYXRhYmFzZSAnJHt0aGlzLnByb3BzLm5hbWV9JyBpcyBjb25maWd1cmVkIHdpdGggcHVibGljIGFjY2Vzc2liaWxpdHkuIGAgK1xuICAgICAgICAgIFwiVGhpcyBpcyBhIHNlY3VyaXR5IHJpc2sgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGRldmVsb3BtZW50LlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGF0YWJhc2UoKTogdm9pZCB7XG4gICAgY29uc3QgZGJDb25maWcgPSB0aGlzLnByb3BzLmRhdGFiYXNlID8/IHt9O1xuICAgIGNvbnN0IGRhdGFiYXNlVHlwZSA9IGRiQ29uZmlnLnR5cGUgPz8gUEFZTE9BRF9ERUZBVUxUUy5EQVRBQkFTRS5UWVBFO1xuXG4gICAgdGhpcy5fZGF0YWJhc2UgPVxuICAgICAgZGF0YWJhc2VUeXBlID09PSBcIkF1cm9yYVwiXG4gICAgICAgID8gdGhpcy5jcmVhdGVBdXJvcmFEYXRhYmFzZShkYkNvbmZpZylcbiAgICAgICAgOiB0aGlzLmNyZWF0ZUluc3RhbmNlRGF0YWJhc2UoZGJDb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEJhc2VEYXRhYmFzZVByb3BzKFxuICAgIGRiQ29uZmlnOiBOb25OdWxsYWJsZTxJUGF5bG9hZFByb3BzW1wiZGF0YWJhc2VcIl0+XG4gICk6IEJhc2VEYXRhYmFzZVByb3BzIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YWJhc2VOYW1lOlxuICAgICAgICBkYkNvbmZpZy5kYXRhYmFzZU5hbWUgPz8gdG9WYWxpZERhdGFiYXNlTmFtZSh0aGlzLnByb3BzLm5hbWUpLFxuICAgICAgZGF0YWJhc2VFbmdpbmU6IGRiQ29uZmlnLmRhdGFiYXNlRW5naW5lID8/IFwicG9zdGdyZXNxbFwiLFxuICAgICAgYmFja3VwUmV0ZW50aW9uOlxuICAgICAgICBkYkNvbmZpZy5iYWNrdXBSZXRlbnRpb24gPz8gUEFZTE9BRF9ERUZBVUxUUy5EQVRBQkFTRS5CQUNLVVBfUkVURU5USU9OLFxuICAgICAgZGVsZXRpb25Qcm90ZWN0aW9uOlxuICAgICAgICBkYkNvbmZpZy5kZWxldGlvblByb3RlY3Rpb24gPz9cbiAgICAgICAgUEFZTE9BRF9ERUZBVUxUUy5EQVRBQkFTRS5ERUxFVElPTl9QUk9URUNUSU9OLFxuICAgICAgcHVibGljbHlBY2Nlc3NpYmxlOiBkYkNvbmZpZy5wdWJsaWNseUFjY2Vzc2libGUsXG4gICAgICBwb3J0OiBkYkNvbmZpZy5wb3J0LFxuICAgICAgZGF0YWJhc2VJbnNpZ2h0czogZGJDb25maWcuZGF0YWJhc2VJbnNpZ2h0cyxcbiAgICAgIHByb3h5OiBkYkNvbmZpZy5wcm94eSxcbiAgICAgIGNyZWRlbnRpYWxzOiBkYkNvbmZpZy5jcmVkZW50aWFscyxcbiAgICAgIHNuYXBzaG90SWRlbnRpZmllcjogZGJDb25maWcuc25hcHNob3RJZGVudGlmaWVyLFxuICAgICAgc25hcHNob3RVc2VybmFtZTogZGJDb25maWcuc25hcHNob3RVc2VybmFtZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUF1cm9yYURhdGFiYXNlKFxuICAgIGRiQ29uZmlnOiBOb25OdWxsYWJsZTxJUGF5bG9hZFByb3BzW1wiZGF0YWJhc2VcIl0+XG4gICk6IFJlbGF0aW9uYWxEYXRhYmFzZSB7XG4gICAgY29uc3QgYXVyb3JhUHJvcHM6IEF1cm9yYURhdGFiYXNlUHJvcHMgPSB7XG4gICAgICB0eXBlOiBcIkF1cm9yYVwiLFxuICAgICAgLi4udGhpcy5idWlsZEJhc2VEYXRhYmFzZVByb3BzKGRiQ29uZmlnKSxcbiAgICAgIGFsbG93ZWRJcENpZHI6IGRiQ29uZmlnLmFsbG93ZWRJcENpZHIsXG4gICAgICBlbmNyeXB0aW9uOiBkYkNvbmZpZy5lbmNyeXB0aW9uLFxuICAgICAgd3JpdGVyOiBkYkNvbmZpZy53cml0ZXIsXG4gICAgICByZWFkZXJzOiBkYkNvbmZpZy5yZWFkZXJzLFxuICAgICAgYWxsb3dWcGNBY2Nlc3M6IGRiQ29uZmlnLmFsbG93VnBjQWNjZXNzLFxuICAgICAgbW9uaXRvcmluZ0ludGVydmFsOiBkYkNvbmZpZy5tb25pdG9yaW5nSW50ZXJ2YWwsXG4gICAgICBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdzogZGJDb25maWcucHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3dcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwcC5hZGREYXRhYmFzZShcbiAgICAgIERhdGFiYXNlRmFjdG9yeS5idWlsZCh0aGlzLnByb3BzLm5hbWUsIGF1cm9yYVByb3BzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUluc3RhbmNlRGF0YWJhc2UoXG4gICAgZGJDb25maWc6IE5vbk51bGxhYmxlPElQYXlsb2FkUHJvcHNbXCJkYXRhYmFzZVwiXT5cbiAgKTogUmVsYXRpb25hbERhdGFiYXNlIHtcbiAgICBjb25zdCBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZURhdGFiYXNlUHJvcHMgPSB7XG4gICAgICB0eXBlOiBcIkluc3RhbmNlXCIsXG4gICAgICAuLi50aGlzLmJ1aWxkQmFzZURhdGFiYXNlUHJvcHMoZGJDb25maWcpLFxuICAgICAgcHVibGljbHlBY2Nlc3NpYmxlOiBkYkNvbmZpZy5wdWJsaWNseUFjY2Vzc2libGUgPz8gZmFsc2UsXG4gICAgICBpbnN0YW5jZVR5cGU6IGRiQ29uZmlnLmluc3RhbmNlVHlwZSxcbiAgICAgIGFsbG9jYXRlZFN0b3JhZ2U6IGRiQ29uZmlnLmFsbG9jYXRlZFN0b3JhZ2UsXG4gICAgICBtdWx0aUF6OiBkYkNvbmZpZy5tdWx0aUF6LFxuICAgICAgcmVhZFJlcGxpY2E6IGRiQ29uZmlnLnJlYWRSZXBsaWNhLFxuICAgICAgZW5jcnlwdGlvbjogZGJDb25maWcuZW5jcnlwdGlvblxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuYXBwLmFkZERhdGFiYXNlKFxuICAgICAgRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKHRoaXMucHJvcHMubmFtZSwgaW5zdGFuY2VQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTdG9yYWdlQnVja2V0cygpOiB2b2lkIHtcbiAgICB0aGlzLl9hc3NldHNCdWNrZXQgPSB0aGlzLmNyZWF0ZUFzc2V0c0J1Y2tldCgpO1xuICAgIHRoaXMuX2NhY2hlQnVja2V0ID0gdGhpcy5jcmVhdGVDYWNoZUJ1Y2tldCgpO1xuICAgIHRoaXMuX21lZGlhQnVja2V0ID0gdGhpcy5jcmVhdGVNZWRpYUJ1Y2tldCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBc3NldHNCdWNrZXQoKTogU3RvcmFnZSB7XG4gICAgY29uc3QgYXNzZXRzQ29uZmlnID0gdGhpcy5wcm9wcy5zdG9yYWdlPy5hc3NldHMgPz8ge307XG4gICAgY29uc3QgYXNzZXRzUHJvcHM6IFMzUHJvcHMgPSB7XG4gICAgICB2ZXJzaW9uZWQ6IGFzc2V0c0NvbmZpZy52ZXJzaW9uZWQgPz8gZmFsc2UsXG4gICAgICBkZXBsb3ltZW50OiB7XG4gICAgICAgIHNvdXJjZTogYCR7UEFZTE9BRF9ERUZBVUxUUy5TT1VSQ0V9LyR7UEFZTE9BRF9ERUZBVUxUUy5PUEVOTkVYVC5BU1NFVFN9YCxcbiAgICAgICAgcHJ1bmU6IHRydWUsXG4gICAgICAgIGNhY2hlQ29udHJvbDoge1xuICAgICAgICAgIG1heEFnZTogUEFZTE9BRF9ERUZBVUxUUy5DQUNIRS5NQVhfQUdFX1NFQ09ORFMsXG4gICAgICAgICAgaW1tdXRhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwcC5hZGRTdG9yYWdlKFxuICAgICAgU3RvcmFnZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1hc3NldHNgLCBhc3NldHNQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDYWNoZUJ1Y2tldCgpOiBTdG9yYWdlIHtcbiAgICBjb25zdCBjYWNoZUNvbmZpZyA9IHRoaXMucHJvcHMuc3RvcmFnZT8uY2FjaGUgPz8ge307XG4gICAgY29uc3QgY2FjaGVQcm9wczogUzNQcm9wcyA9IHtcbiAgICAgIHZlcnNpb25lZDogY2FjaGVDb25maWcudmVyc2lvbmVkID8/IGZhbHNlLFxuICAgICAgZGVwbG95bWVudDoge1xuICAgICAgICBzb3VyY2U6IGAke1BBWUxPQURfREVGQVVMVFMuU09VUkNFfS8ke1BBWUxPQURfREVGQVVMVFMuT1BFTk5FWFQuQ0FDSEV9YCxcbiAgICAgICAgcHJ1bmU6IGZhbHNlIC8vIElTUiBhZGRzIGZpbGVzIGF0IHJ1bnRpbWVcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwcC5hZGRTdG9yYWdlKFxuICAgICAgU3RvcmFnZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1jYWNoZWAsIGNhY2hlUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTWVkaWFCdWNrZXQoKTogU3RvcmFnZSB7XG4gICAgY29uc3QgbWVkaWFDb25maWcgPSB0aGlzLnByb3BzLnN0b3JhZ2U/Lm1lZGlhID8/IHt9O1xuICAgIGNvbnN0IG1lZGlhUHJvcHM6IFMzUHJvcHMgPSB7XG4gICAgICB2ZXJzaW9uZWQ6IG1lZGlhQ29uZmlnLnZlcnNpb25lZCA/PyBmYWxzZVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuYXBwLmFkZFN0b3JhZ2UoXG4gICAgICBTdG9yYWdlRmFjdG9yeS5idWlsZChgJHt0aGlzLnByb3BzLm5hbWV9LW1lZGlhYCwgbWVkaWFQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVUYWdDYWNoZSgpOiB2b2lkIHtcbiAgICBjb25zdCB0YWdDYWNoZVByb3BzOiBEeW5hbW9EQkRhdGFiYXNlUHJvcHMgPSB7XG4gICAgICB0eXBlOiBcIkR5bmFtb0RCXCIsXG4gICAgICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogXCJ0YWdcIiwgdHlwZTogXCJTXCIgfSxcbiAgICAgIHNvcnRLZXk6IHsgbmFtZTogXCJwYXRoXCIsIHR5cGU6IFwiU1wiIH0sXG4gICAgICBnbG9iYWxTZWNvbmRhcnlJbmRleGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpbmRleE5hbWU6IFwicmV2YWxpZGF0ZVwiLFxuICAgICAgICAgIHBhcnRpdGlvbktleTogeyBuYW1lOiBcInBhdGhcIiwgdHlwZTogXCJTXCIgfSxcbiAgICAgICAgICBzb3J0S2V5OiB7IG5hbWU6IFwicmV2YWxpZGF0ZWRBdFwiLCB0eXBlOiBcIk5cIiB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICAgIHRoaXMuX3RhZ0NhY2hlID0gdGhpcy5hcHAuYWRkRGF0YWJhc2UoXG4gICAgICBEYXRhYmFzZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS10YWctY2FjaGVgLCB0YWdDYWNoZVByb3BzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJldmFsaWRhdGlvblF1ZXVlKCk6IHZvaWQge1xuICAgIGNvbnN0IHF1ZXVlQ29uZmlnID0gdGhpcy5wcm9wcy5tZXNzYWdpbmc/LnJldmFsaWRhdGlvblF1ZXVlID8/IHt9O1xuICAgIGNvbnN0IHJldmFsaWRhdGlvblRpbWVvdXQgPVxuICAgICAgdGhpcy5wcm9wcy5jb21wdXRlPy5yZXZhbGlkYXRpb24/LnRpbWVvdXQgPz9cbiAgICAgIFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5SRVZBTElEQVRJT05fVElNRU9VVDtcblxuICAgIC8vIFJlc29sdmUgZGVhZCBsZXR0ZXIgcXVldWUgY29uZmlnXG4gICAgbGV0IGRscUNvbmZpZzogSVF1ZXVlUHJvcHNbXCJkZWFkTGV0dGVyUXVldWVcIl07XG4gICAgaWYgKHF1ZXVlQ29uZmlnLmRlYWRMZXR0ZXJRdWV1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIGRscUNvbmZpZyA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKHF1ZXVlQ29uZmlnLmRlYWRMZXR0ZXJRdWV1ZSkge1xuICAgICAgZGxxQ29uZmlnID0ge1xuICAgICAgICBlbmFibGVkOiBxdWV1ZUNvbmZpZy5kZWFkTGV0dGVyUXVldWUuZW5hYmxlZCA/PyB0cnVlLFxuICAgICAgICBtYXhSZWNlaXZlQ291bnQ6IHF1ZXVlQ29uZmlnLmRlYWRMZXR0ZXJRdWV1ZS5tYXhSZWNlaXZlQ291bnQgPz8gM1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGxxQ29uZmlnID0geyBlbmFibGVkOiB0cnVlLCBtYXhSZWNlaXZlQ291bnQ6IDMgfTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWV1ZVByb3BzOiBJUXVldWVQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwicXVldWVcIixcbiAgICAgIHF1ZXVlVHlwZTogXCJmaWZvXCIsXG4gICAgICB2aXNpYmlsaXR5VGltZW91dDogcXVldWVDb25maWcudmlzaWJpbGl0eVRpbWVvdXQgPz8gcmV2YWxpZGF0aW9uVGltZW91dCxcbiAgICAgIG1lc3NhZ2VSZXRlbnRpb25QZXJpb2Q6IHF1ZXVlQ29uZmlnLm1lc3NhZ2VSZXRlbnRpb25QZXJpb2QsXG4gICAgICBtYXhNZXNzYWdlU2l6ZTogcXVldWVDb25maWcubWF4TWVzc2FnZVNpemUsXG4gICAgICBjb250ZW50QmFzZWREZWR1cGxpY2F0aW9uOiB0cnVlLFxuICAgICAgZGVhZExldHRlclF1ZXVlOiBkbHFDb25maWdcbiAgICB9O1xuICAgIHRoaXMuX3JldmFsaWRhdGlvblF1ZXVlID0gdGhpcy5hcHAuYWRkTWVzc2FnaW5nKFxuICAgICAgTWVzc2FnaW5nRmFjdG9yeS5idWlsZChgJHt0aGlzLnByb3BzLm5hbWV9LXJldmFsaWRhdGlvbmAsIHF1ZXVlUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTGFtYmRhRnVuY3Rpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuX3NlcnZlciA9IHRoaXMuY3JlYXRlU2VydmVyTGFtYmRhKCk7XG4gICAgdGhpcy5faW1hZ2VPcHRpbWlzYXRpb24gPSB0aGlzLmNyZWF0ZUltYWdlTGFtYmRhKCk7XG4gICAgdGhpcy5fcmV2YWxpZGF0aW9uID0gdGhpcy5jcmVhdGVSZXZhbGlkYXRpb25MYW1iZGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2VydmVyTGFtYmRhKCk6IExhbWJkYUNvbXB1dGUge1xuICAgIGNvbnN0IHsgbWVtb3J5U2l6ZSwgdGltZW91dCwgZXBoZW1lcmFsU3RvcmFnZVNpemUgfSA9IHJlc29sdmVMYW1iZGFDb25maWcoXG4gICAgICB0aGlzLnByb3BzLmNvbXB1dGU/LnNlcnZlcixcbiAgICAgIHtcbiAgICAgICAgbWVtb3J5OiBQQVlMT0FEX0RFRkFVTFRTLkNPTVBVVEUuU0VSVkVSX01FTU9SWSxcbiAgICAgICAgdGltZW91dDogUEFZTE9BRF9ERUZBVUxUUy5DT01QVVRFLlNFUlZFUl9USU1FT1VUXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHNlcnZlclByb3BzOiBDb2RlTGFtYmRhUHJvcHMgPSB7XG4gICAgICB0eXBlOiBcImxhbWJkYVwiLFxuICAgICAgZGVwbG95bWVudDogXCJjb2RlXCIsXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChcbiAgICAgICAgYCR7UEFZTE9BRF9ERUZBVUxUUy5TT1VSQ0V9LyR7UEFZTE9BRF9ERUZBVUxUUy5PUEVOTkVYVC5TRVJWRVJ9YFxuICAgICAgKSxcbiAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjJfWCxcbiAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIG1lbW9yeVNpemUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZXBoZW1lcmFsU3RvcmFnZVNpemUsXG4gICAgICBmdW5jdGlvblVybDoge1xuICAgICAgICBhdXRoVHlwZTogRnVuY3Rpb25VcmxBdXRoVHlwZS5OT05FLFxuICAgICAgICBpbnZva2VNb2RlOiBJbnZva2VNb2RlLlJFU1BPTlNFX1NUUkVBTVxuICAgICAgfSxcbiAgICAgIGNvbm5lY3Rpb25zOiBbdGhpcy5fZGF0YWJhc2VdLFxuICAgICAgc2VjcmV0c0ltcG9ydDoge1xuICAgICAgICBEQVRBQkFTRV9VU0VSTkFNRTogdGhpcy5fZGF0YWJhc2VcbiAgICAgICAgICAuZ2V0Q3JlZGVudGlhbHMoKVxuICAgICAgICAgIC5nZXRJbXBvcnQoXCJ1c2VybmFtZVwiKSxcbiAgICAgICAgREFUQUJBU0VfUEFTU1dPUkQ6IHRoaXMuX2RhdGFiYXNlXG4gICAgICAgICAgLmdldENyZWRlbnRpYWxzKClcbiAgICAgICAgICAuZ2V0SW1wb3J0KFwicGFzc3dvcmRcIiksXG4gICAgICAgIFBBWUxPQURfU0VDUkVUOiB0aGlzLl9wYXlsb2FkU2VjcmV0LmdldEltcG9ydCgpXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuYnVpbGRTZXJ2ZXJFbnZpcm9ubWVudCgpXG4gICAgfTtcblxuICAgIGNvbnN0IHNlcnZlciA9IHRoaXMuYXBwLmFkZENvbXB1dGUoXG4gICAgICBDb21wdXRlRmFjdG9yeS5idWlsZChgJHt0aGlzLnByb3BzLm5hbWV9LXNlcnZlcmAsIHNlcnZlclByb3BzKVxuICAgICk7XG5cbiAgICB0aGlzLmdyYW50U2VydmVyUGVybWlzc2lvbnMoc2VydmVyKTtcbiAgICByZXR1cm4gc2VydmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFNlcnZlckVudmlyb25tZW50KCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IGJhc2VFbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBEQVRBQkFTRV9IT1NUOiB0aGlzLl9kYXRhYmFzZS5nZXRIb3N0RW5kcG9pbnQoKSxcbiAgICAgIERBVEFCQVNFX1BPUlQ6IHRoaXMuX2RhdGFiYXNlLmdldEhvc3RQb3J0KCksXG4gICAgICBEQVRBQkFTRV9OQU1FOiB0aGlzLl9kYXRhYmFzZS5nZXREYXRhYmFzZU5hbWUoKSxcbiAgICAgIERBVEFCQVNFX1NTTDogXCJ0cnVlXCIsXG4gICAgICBDQUNIRV9CVUNLRVRfTkFNRTogdGhpcy5fY2FjaGVCdWNrZXQuZ2V0QnVja2V0TmFtZSgpLFxuICAgICAgQ0FDSEVfQlVDS0VUX1JFR0lPTjogU3RhY2sub2YodGhpcykucmVnaW9uLFxuICAgICAgQ0FDSEVfRFlOQU1PX1RBQkxFOiB0aGlzLl90YWdDYWNoZS5nZXRUYWJsZU5hbWUoKSxcbiAgICAgIFJFVkFMSURBVElPTl9RVUVVRV9VUkw6IHRoaXMuX3JldmFsaWRhdGlvblF1ZXVlLmdldFF1ZXVlVXJsKCksXG4gICAgICBSRVZBTElEQVRJT05fUVVFVUVfUkVHSU9OOiBTdGFjay5vZih0aGlzKS5yZWdpb24sXG4gICAgICBNRURJQV9CVUNLRVRfTkFNRTogdGhpcy5fbWVkaWFCdWNrZXQuZ2V0QnVja2V0TmFtZSgpXG4gICAgfTtcblxuICAgIC8vIExvY2sgZG93biBDT1JTIHRvIGN1c3RvbSBkb21haW4gd2hlbiBwcm92aWRlZFxuICAgIGNvbnN0IGN1c3RvbURvbWFpbiA9IHRoaXMucHJvcHMuZG9tYWluID8/IHRoaXMucHJvcHMuY2RuPy5kb21haW5OYW1lcz8uWzBdO1xuICAgIGlmIChjdXN0b21Eb21haW4pIHtcbiAgICAgIGJhc2VFbnYuTkVYVF9QVUJMSUNfU0VSVkVSX1VSTCA9IGBodHRwczovLyR7Y3VzdG9tRG9tYWlufWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgLi4uYmFzZUVudiwgLi4udGhpcy5wcm9wcy5lbnZpcm9ubWVudCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBncmFudFNlcnZlclBlcm1pc3Npb25zKHNlcnZlcjogTGFtYmRhQ29tcHV0ZSk6IHZvaWQge1xuICAgIGNvbnN0IHNlcnZlckZ1bmN0aW9uID0gcmVxdWlyZUZ1bmN0aW9uKHNlcnZlciwgXCJTZXJ2ZXJcIik7XG4gICAgdGhpcy5fY2FjaGVCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoc2VydmVyRnVuY3Rpb24pO1xuICAgIHRoaXMuX21lZGlhQnVja2V0LmdyYW50UmVhZFdyaXRlKHNlcnZlckZ1bmN0aW9uKTtcbiAgICB0aGlzLl90YWdDYWNoZS5ncmFudFJlYWRXcml0ZURhdGEoc2VydmVyRnVuY3Rpb24pO1xuICAgIHRoaXMuX3JldmFsaWRhdGlvblF1ZXVlLmdyYW50U2VuZE1lc3NhZ2VzKHNlcnZlckZ1bmN0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlSW1hZ2VMYW1iZGEoKTogTGFtYmRhQ29tcHV0ZSB7XG4gICAgY29uc3QgeyBtZW1vcnlTaXplLCB0aW1lb3V0LCBlcGhlbWVyYWxTdG9yYWdlU2l6ZSB9ID0gcmVzb2x2ZUxhbWJkYUNvbmZpZyhcbiAgICAgIHRoaXMucHJvcHMuY29tcHV0ZT8uaW1hZ2VPcHRpbWlzYXRpb24sXG4gICAgICB7XG4gICAgICAgIG1lbW9yeTogUEFZTE9BRF9ERUZBVUxUUy5DT01QVVRFLklNQUdFX01FTU9SWSxcbiAgICAgICAgdGltZW91dDogUEFZTE9BRF9ERUZBVUxUUy5DT01QVVRFLklNQUdFX1RJTUVPVVRcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgaW1hZ2VQcm9wczogQ29kZUxhbWJkYVByb3BzID0ge1xuICAgICAgdHlwZTogXCJsYW1iZGFcIixcbiAgICAgIGRlcGxveW1lbnQ6IFwiY29kZVwiLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIGAke1BBWUxPQURfREVGQVVMVFMuU09VUkNFfS8ke1BBWUxPQURfREVGQVVMVFMuT1BFTk5FWFQuSU1BR0V9YFxuICAgICAgKSxcbiAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjJfWCxcbiAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIG1lbW9yeVNpemUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZXBoZW1lcmFsU3RvcmFnZVNpemUsXG4gICAgICBmdW5jdGlvblVybDogeyBhdXRoVHlwZTogRnVuY3Rpb25VcmxBdXRoVHlwZS5OT05FIH0sXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBCVUNLRVRfTkFNRTogdGhpcy5fYXNzZXRzQnVja2V0LmdldEJ1Y2tldE5hbWUoKSxcbiAgICAgICAgQlVDS0VUX0tFWV9QUkVGSVg6IFwiX2Fzc2V0c1wiXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGltYWdlID0gdGhpcy5hcHAuYWRkQ29tcHV0ZShcbiAgICAgIENvbXB1dGVGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0taW1hZ2VgLCBpbWFnZVByb3BzKVxuICAgICk7XG5cbiAgICBjb25zdCBpbWFnZUZ1bmN0aW9uID0gcmVxdWlyZUZ1bmN0aW9uKGltYWdlLCBcIkltYWdlT3B0aW1pc2F0aW9uXCIpO1xuICAgIHRoaXMuX2Fzc2V0c0J1Y2tldC5ncmFudFJlYWQoaW1hZ2VGdW5jdGlvbik7XG5cbiAgICByZXR1cm4gaW1hZ2U7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJldmFsaWRhdGlvbkxhbWJkYSgpOiBMYW1iZGFDb21wdXRlIHtcbiAgICBjb25zdCB7IG1lbW9yeVNpemUsIHRpbWVvdXQsIGVwaGVtZXJhbFN0b3JhZ2VTaXplIH0gPSByZXNvbHZlTGFtYmRhQ29uZmlnKFxuICAgICAgdGhpcy5wcm9wcy5jb21wdXRlPy5yZXZhbGlkYXRpb24sXG4gICAgICB7XG4gICAgICAgIG1lbW9yeTogUEFZTE9BRF9ERUZBVUxUUy5DT01QVVRFLlJFVkFMSURBVElPTl9NRU1PUlksXG4gICAgICAgIHRpbWVvdXQ6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5SRVZBTElEQVRJT05fVElNRU9VVFxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCByZXZhbGlkYXRpb25Qcm9wczogQ29kZUxhbWJkYVByb3BzID0ge1xuICAgICAgdHlwZTogXCJsYW1iZGFcIixcbiAgICAgIGRlcGxveW1lbnQ6IFwiY29kZVwiLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIGAke1BBWUxPQURfREVGQVVMVFMuU09VUkNFfS8ke1BBWUxPQURfREVGQVVMVFMuT1BFTk5FWFQuUkVWQUxJREFUSU9OfWBcbiAgICAgICksXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICBtZW1vcnlTaXplLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgQ0FDSEVfRFlOQU1PX1RBQkxFOiB0aGlzLl90YWdDYWNoZS5nZXRUYWJsZU5hbWUoKSxcbiAgICAgICAgQ0FDSEVfQlVDS0VUX05BTUU6IHRoaXMuX2NhY2hlQnVja2V0LmdldEJ1Y2tldE5hbWUoKVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCByZXZhbGlkYXRpb24gPSB0aGlzLmFwcC5hZGRDb21wdXRlKFxuICAgICAgQ29tcHV0ZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1yZXZhbGlkYXRpb25gLCByZXZhbGlkYXRpb25Qcm9wcylcbiAgICApO1xuXG4gICAgY29uc3QgcmV2YWxpZGF0aW9uTGFtYmRhID0gcmV2YWxpZGF0aW9uLmdldExhbWJkYUZ1bmN0aW9uKCk7XG4gICAgcmV2YWxpZGF0aW9uTGFtYmRhLmFkZFNxc0V2ZW50U291cmNlKHRoaXMuX3JldmFsaWRhdGlvblF1ZXVlLmdldFF1ZXVlKCksIHtcbiAgICAgIGJhdGNoU2l6ZTogNVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmV2YWxpZGF0aW9uRnVuY3Rpb24gPSByZXF1aXJlRnVuY3Rpb24ocmV2YWxpZGF0aW9uLCBcIlJldmFsaWRhdGlvblwiKTtcbiAgICB0aGlzLl90YWdDYWNoZS5ncmFudFJlYWRXcml0ZURhdGEocmV2YWxpZGF0aW9uRnVuY3Rpb24pO1xuICAgIHRoaXMuX2NhY2hlQnVja2V0LmdyYW50UmVhZFdyaXRlKHJldmFsaWRhdGlvbkZ1bmN0aW9uKTtcbiAgICB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5ncmFudENvbnN1bWVNZXNzYWdlcyhyZXZhbGlkYXRpb25GdW5jdGlvbik7XG5cbiAgICByZXR1cm4gcmV2YWxpZGF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDZG4oKTogdm9pZCB7XG4gICAgY29uc3QgeyBkb21haW5OYW1lcywgY2VydGlmaWNhdGUgfSA9IHRoaXMucmVzb2x2ZURvbWFpbkNvbmZpZygpO1xuXG4gICAgY29uc3QgY2RuUHJvcHM6IFNtYXJ0Q2RuUHJvcHMgPSB7XG4gICAgICBvcmlnaW5UeXBlOiBcImF1dG9cIixcbiAgICAgIG9yaWdpbjogdGhpcy5fc2VydmVyLFxuICAgICAgY2FjaGVQb2xpY3k6IFwiQ0FDSElOR19ESVNBQkxFRFwiLFxuICAgICAgZGVmYXVsdEFsbG93ZWRNZXRob2RzOiBcIkFMTFwiLFxuICAgICAgZm9yd2FyZEhvc3RIZWFkZXI6IHRydWUsXG4gICAgICBwcmljZUNsYXNzOiBcIlByaWNlQ2xhc3NfMTAwXCIsXG4gICAgICBkb21haW5OYW1lcyxcbiAgICAgIGNlcnRpZmljYXRlLFxuICAgICAgYmVoYXZpb3VyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcGF0aFBhdHRlcm46IFBBWUxPQURfREVGQVVMVFMuUEFUSFMuU1RBVElDLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5fYXNzZXRzQnVja2V0LFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfT1BUSU1JWkVEXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLklNQUdFLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5faW1hZ2VPcHRpbWlzYXRpb24sXG4gICAgICAgICAgY2FjaGVQb2xpY3k6IFwiQ0FDSElOR19PUFRJTUlaRURcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGF0aFBhdHRlcm46IFBBWUxPQURfREVGQVVMVFMuUEFUSFMuQVBJLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5fc2VydmVyLFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfRElTQUJMRURcIixcbiAgICAgICAgICBhbGxvd2VkTWV0aG9kczogXCJBTExcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGF0aFBhdHRlcm46IFBBWUxPQURfREVGQVVMVFMuUEFUSFMuQURNSU4sXG4gICAgICAgICAgb3JpZ2luOiB0aGlzLl9zZXJ2ZXIsXG4gICAgICAgICAgY2FjaGVQb2xpY3k6IFwiQ0FDSElOR19ESVNBQkxFRFwiLFxuICAgICAgICAgIGFsbG93ZWRNZXRob2RzOiBcIkFMTFwiXG4gICAgICAgIH0sXG4gICAgICAgIC4uLih0aGlzLnByb3BzLmNkbj8uYmVoYXZpb3VycyA/PyBbXSlcbiAgICAgIF1cbiAgICB9O1xuXG4gICAgdGhpcy5fY2RuID0gdGhpcy5hcHAuYWRkQ2RuKENkbkZhY3RvcnkuYnVpbGQodGhpcy5wcm9wcy5uYW1lLCBjZG5Qcm9wcykpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRG9tYWluQ29uZmlnKCk6IHtcbiAgICBkb21haW5OYW1lczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgY2VydGlmaWNhdGU6IElDZXJ0aWZpY2F0ZSB8IHVuZGVmaW5lZDtcbiAgICBob3N0ZWRab25lOiBSZXR1cm5UeXBlPHR5cGVvZiBIb3N0ZWRab25lLmZyb21Mb29rdXA+IHwgdW5kZWZpbmVkO1xuICB9IHtcbiAgICBpZiAodGhpcy5fcmVzb2x2ZWREb21haW4pIHJldHVybiB0aGlzLl9yZXNvbHZlZERvbWFpbjtcblxuICAgIGlmICh0aGlzLnByb3BzLmRvbWFpbikge1xuICAgICAgdGhpcy5fcmVzb2x2ZWREb21haW4gPSB0aGlzLnJlc29sdmVTaW1wbGVEb21haW4oKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuY2RuPy5kb21haW5OYW1lcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9yZXNvbHZlZERvbWFpbiA9IHRoaXMucmVzb2x2ZUFkdmFuY2VkRG9tYWluKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Jlc29sdmVkRG9tYWluID0ge1xuICAgICAgICBkb21haW5OYW1lczogdW5kZWZpbmVkLFxuICAgICAgICBjZXJ0aWZpY2F0ZTogdW5kZWZpbmVkLFxuICAgICAgICBob3N0ZWRab25lOiB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVkRG9tYWluO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlU2ltcGxlRG9tYWluKCk6IHtcbiAgICBkb21haW5OYW1lczogc3RyaW5nW107XG4gICAgY2VydGlmaWNhdGU6IElDZXJ0aWZpY2F0ZTtcbiAgICBob3N0ZWRab25lOiBSZXR1cm5UeXBlPHR5cGVvZiBIb3N0ZWRab25lLmZyb21Mb29rdXA+O1xuICB9IHtcbiAgICBjb25zdCBkb21haW4gPSB0aGlzLnByb3BzLmRvbWFpbjtcbiAgICBpZiAoIWRvbWFpbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRG9tYWluIGlzIHJlcXVpcmVkIGZvciBzaW1wbGUgZG9tYWluIHJlc29sdXRpb25cIik7XG4gICAgfVxuXG4gICAgLy8gTWFuYWdlZCBkb21haW46IGltcG9ydCB6b25lIGFuZCBjZXJ0IGZyb20gZG9tYWluIHN0YWNrXG4gICAgaWYgKHRoaXMucHJvcHMubWFuYWdlZERvbWFpbikge1xuICAgICAgY29uc3QgbWFuYWdlZCA9IHRoaXMucHJvcHMubWFuYWdlZERvbWFpbjtcbiAgICAgIGNvbnN0IGhvc3RlZFpvbmUgPSBIb3N0ZWRab25lLmZyb21Ib3N0ZWRab25lQXR0cmlidXRlcyhcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7dGhpcy5wYXNjYWxOYW1lfU1hbmFnZWRIb3N0ZWRab25lYCxcbiAgICAgICAge1xuICAgICAgICAgIGhvc3RlZFpvbmVJZDogRm4uaW1wb3J0VmFsdWUobWFuYWdlZC5ob3N0ZWRab25lSWRFeHBvcnQpLFxuICAgICAgICAgIHpvbmVOYW1lOiBtYW5hZ2VkLnpvbmVOYW1lXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBjb25zdCBjZXJ0aWZpY2F0ZSA9IENlcnRpZmljYXRlLmZyb21DZXJ0aWZpY2F0ZUFybihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7dGhpcy5wYXNjYWxOYW1lfU1hbmFnZWRDZXJ0aWZpY2F0ZWAsXG4gICAgICAgIEZuLmltcG9ydFZhbHVlKG1hbmFnZWQuY2VydGlmaWNhdGVBcm5FeHBvcnQpXG4gICAgICApO1xuICAgICAgcmV0dXJuIHsgZG9tYWluTmFtZXM6IFtkb21haW5dLCBjZXJ0aWZpY2F0ZSwgaG9zdGVkWm9uZSB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJvb3REb21haW4gPSBleHRyYWN0Um9vdERvbWFpbihkb21haW4pO1xuXG4gICAgY29uc3QgaG9zdGVkWm9uZSA9IEhvc3RlZFpvbmUuZnJvbUxvb2t1cChcbiAgICAgIHRoaXMsXG4gICAgICBgJHt0aGlzLnBhc2NhbE5hbWV9SG9zdGVkWm9uZWAsXG4gICAgICB7IGRvbWFpbk5hbWU6IHJvb3REb21haW4gfVxuICAgICk7XG5cbiAgICBjb25zdCBjZXJ0aWZpY2F0ZSA9IG5ldyBDZXJ0aWZpY2F0ZSh0aGlzLCBgJHt0aGlzLnBhc2NhbE5hbWV9Q2VydGlmaWNhdGVgLCB7XG4gICAgICBkb21haW5OYW1lOiBkb21haW4sXG4gICAgICB2YWxpZGF0aW9uOiBDZXJ0aWZpY2F0ZVZhbGlkYXRpb24uZnJvbURucyhob3N0ZWRab25lKVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHsgZG9tYWluTmFtZXM6IFtkb21haW5dLCBjZXJ0aWZpY2F0ZSwgaG9zdGVkWm9uZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlQWR2YW5jZWREb21haW4oKToge1xuICAgIGRvbWFpbk5hbWVzOiBzdHJpbmdbXTtcbiAgICBjZXJ0aWZpY2F0ZTogSUNlcnRpZmljYXRlIHwgdW5kZWZpbmVkO1xuICAgIGhvc3RlZFpvbmU6IHVuZGVmaW5lZDtcbiAgfSB7XG4gICAgY29uc3QgY2RuQ29uZmlnID0gdGhpcy5wcm9wcy5jZG47XG4gICAgaWYgKCFjZG5Db25maWc/LmRvbWFpbk5hbWVzPy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDRE4gZG9tYWluIG5hbWVzIGFyZSByZXF1aXJlZCBmb3IgYWR2YW5jZWQgZG9tYWluIHJlc29sdXRpb25cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjZXJ0aWZpY2F0ZSA9XG4gICAgICBjZG5Db25maWcuY2VydGlmaWNhdGUgPz9cbiAgICAgIChjZG5Db25maWcuY2VydGlmaWNhdGVBcm5cbiAgICAgICAgPyBDZXJ0aWZpY2F0ZS5mcm9tQ2VydGlmaWNhdGVBcm4oXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgYCR7dGhpcy5wYXNjYWxOYW1lfUNlcnRpZmljYXRlYCxcbiAgICAgICAgICAgIGNkbkNvbmZpZy5jZXJ0aWZpY2F0ZUFyblxuICAgICAgICAgIClcbiAgICAgICAgOiB1bmRlZmluZWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRvbWFpbk5hbWVzOiBjZG5Db25maWcuZG9tYWluTmFtZXMsXG4gICAgICBjZXJ0aWZpY2F0ZSxcbiAgICAgIGhvc3RlZFpvbmU6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURuc1JlY29yZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMuZG9tYWluKSByZXR1cm47XG5cbiAgICBjb25zdCB7IGhvc3RlZFpvbmUgfSA9IHRoaXMucmVzb2x2ZURvbWFpbkNvbmZpZygpO1xuICAgIGlmICghaG9zdGVkWm9uZSkgcmV0dXJuO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBETlMgcmVjb3JkIGluIHRoZSBDRE4gc3RhY2sgKG5vdCB0aGUgQ29tcHV0ZSBzdGFjayB3aGVyZSB0aGlzXG4gICAgLy8gUGF5bG9hZCBjb25zdHJ1Y3QgbGl2ZXMpIHRvIGF2b2lkIGEgY3ljbGljIGRlcGVuZGVuY3k6IENETiByZWZlcmVuY2VzIHRoZVxuICAgIC8vIHNlcnZlciBMYW1iZGEgRnVuY3Rpb25VcmwsIHNvIENvbXB1dGUgY2Fubm90IGFsc28gZGVwZW5kIG9uIENETi5cbiAgICBjb25zdCBjZG5TdGFjayA9IHRoaXMuYXBwLmdldERlZmF1bHRDZG5TdGFjaygpLmdldFN0YWNrKCk7XG4gICAgbmV3IEFSZWNvcmQoY2RuU3RhY2ssIGAke3RoaXMucGFzY2FsTmFtZX1BbGlhc1JlY29yZGAsIHtcbiAgICAgIHpvbmU6IGhvc3RlZFpvbmUsXG4gICAgICByZWNvcmROYW1lOiB0aGlzLnByb3BzLmRvbWFpbixcbiAgICAgIHRhcmdldDogUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgbmV3IENsb3VkRnJvbnRUYXJnZXQodGhpcy5fY2RuLmdldERpc3RyaWJ1dGlvbigpKVxuICAgICAgKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBleHBvcnRQYXR0ZXJuT3V0cHV0cygpOiB2b2lkIHtcbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuVHlwZWAsIHtcbiAgICAgIGtleTogYCR7dGhpcy5wYXNjYWxOYW1lfVBhdHRlcm5UeXBlYCxcbiAgICAgIHZhbHVlOiBcInBheWxvYWRcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBgUGF0dGVybiB0eXBlIGZvciAke3RoaXMucHJvcHMubmFtZX1gXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuTmFtZWAsIHtcbiAgICAgIGtleTogYCR7dGhpcy5wYXNjYWxOYW1lfVBhdHRlcm5OYW1lYCxcbiAgICAgIHZhbHVlOiB0aGlzLnByb3BzLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogYFBhdHRlcm4gbmFtZSBmb3IgJHt0aGlzLnByb3BzLm5hbWV9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHt0aGlzLnBhc2NhbE5hbWV9UGF0dGVybkxhbWJkYXNgLCB7XG4gICAgICBrZXk6IGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuTGFtYmRhc2AsXG4gICAgICB2YWx1ZTogW1xuICAgICAgICBgJHt0aGlzLnByb3BzLm5hbWV9LXNlcnZlcmAsXG4gICAgICAgIGAke3RoaXMucHJvcHMubmFtZX0taW1hZ2VgLFxuICAgICAgICBgJHt0aGlzLnByb3BzLm5hbWV9LXJldmFsaWRhdGlvbmBcbiAgICAgIF0uam9pbihcIixcIiksXG4gICAgICBkZXNjcmlwdGlvbjogYExhbWJkYSBjb25zdHJ1Y3QgcHJlZml4ZXMgZm9yIHBhdHRlcm4gJHt0aGlzLnByb3BzLm5hbWV9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHt0aGlzLnBhc2NhbE5hbWV9UGF0dGVyblJlc291cmNlc2AsIHtcbiAgICAgIGtleTogYCR7dGhpcy5wYXNjYWxOYW1lfVBhdHRlcm5SZXNvdXJjZXNgLFxuICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZGF0YWJhc2VzOiBbdGhpcy5wcm9wcy5uYW1lLCBgJHt0aGlzLnByb3BzLm5hbWV9LXRhZy1jYWNoZWBdLFxuICAgICAgICBzdG9yYWdlOiBbXG4gICAgICAgICAgYCR7dGhpcy5wcm9wcy5uYW1lfS1hc3NldHNgLFxuICAgICAgICAgIGAke3RoaXMucHJvcHMubmFtZX0tY2FjaGVgLFxuICAgICAgICAgIGAke3RoaXMucHJvcHMubmFtZX0tbWVkaWFgXG4gICAgICAgIF0sXG4gICAgICAgIGNkbjogdGhpcy5wcm9wcy5uYW1lXG4gICAgICB9KSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgUmVsYXRlZCByZXNvdXJjZSBuYW1lcyBmb3IgcGF0dGVybiAke3RoaXMucHJvcHMubmFtZX1gXG4gICAgfSk7XG4gIH1cblxuICBnZXREYXRhYmFzZSgpOiBSZWxhdGlvbmFsRGF0YWJhc2Uge1xuICAgIHJldHVybiB0aGlzLl9kYXRhYmFzZTtcbiAgfVxuXG4gIGdldFNlcnZlcigpOiBMYW1iZGFDb21wdXRlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VydmVyO1xuICB9XG5cbiAgZ2V0SW1hZ2VPcHRpbWlzYXRpb24oKTogTGFtYmRhQ29tcHV0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2ltYWdlT3B0aW1pc2F0aW9uO1xuICB9XG5cbiAgZ2V0UmV2YWxpZGF0aW9uKCk6IExhbWJkYUNvbXB1dGUge1xuICAgIHJldHVybiB0aGlzLl9yZXZhbGlkYXRpb247XG4gIH1cblxuICBnZXRBc3NldHNCdWNrZXQoKTogU3RvcmFnZSB7XG4gICAgcmV0dXJuIHRoaXMuX2Fzc2V0c0J1Y2tldDtcbiAgfVxuXG4gIGdldENhY2hlQnVja2V0KCk6IFN0b3JhZ2Uge1xuICAgIHJldHVybiB0aGlzLl9jYWNoZUJ1Y2tldDtcbiAgfVxuXG4gIGdldE1lZGlhQnVja2V0KCk6IFN0b3JhZ2Uge1xuICAgIHJldHVybiB0aGlzLl9tZWRpYUJ1Y2tldDtcbiAgfVxuXG4gIGdldFRhZ0NhY2hlKCk6IER5bmFtb0RCRGF0YWJhc2Uge1xuICAgIHJldHVybiB0aGlzLl90YWdDYWNoZTtcbiAgfVxuXG4gIGdldFJldmFsaWRhdGlvblF1ZXVlKCk6IFF1ZXVlTWVzc2FnaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcmV2YWxpZGF0aW9uUXVldWU7XG4gIH1cblxuICBnZXRDZG4oKTogQ2RuIHtcbiAgICByZXR1cm4gdGhpcy5fY2RuO1xuICB9XG59XG4iXX0=
|
|
@@ -10,6 +10,7 @@ import { Repository } from "aws-cdk-lib/aws-ecr";
|
|
|
10
10
|
import { HostedZone as FjallHostedZone } from "../networking/hostedZone";
|
|
11
11
|
import { type ConnectionSpec } from "../../../utils/connector.js";
|
|
12
12
|
import { type SecretImport } from "../secrets";
|
|
13
|
+
import type { ManagedDomainExports } from "../../../utils/domainTypes";
|
|
13
14
|
export declare enum Protocol {
|
|
14
15
|
HTTP = 0,
|
|
15
16
|
HTTPS = 1
|
|
@@ -32,10 +33,16 @@ export interface Ec2CapacityConfig {
|
|
|
32
33
|
minCapacity?: number;
|
|
33
34
|
/** Maximum number of instances. Default: 3 */
|
|
34
35
|
maxCapacity?: number;
|
|
35
|
-
/** Desired number of EC2 instances. Default: 2 (for availability) */
|
|
36
|
-
desiredCount?: number;
|
|
37
36
|
/** Memory limit in MiB for the container. Default: 1024 */
|
|
38
37
|
memoryLimitMiB?: number;
|
|
38
|
+
/** Warm pool keeps stopped instances for faster start (10-15s vs 60-90s).
|
|
39
|
+
* Mirrors generator WarmPool type (generator/src/schemas/computeSchemas.ts). */
|
|
40
|
+
warmPool?: {
|
|
41
|
+
/** Minimum instances to keep in the warm pool. Default: 1 */
|
|
42
|
+
minSize?: number;
|
|
43
|
+
/** Return instances to the pool on scale-in instead of terminating. Default: true */
|
|
44
|
+
reuseOnScaleIn?: boolean;
|
|
45
|
+
};
|
|
39
46
|
}
|
|
40
47
|
/**
|
|
41
48
|
* Domain configuration for HTTPS and DNS.
|
|
@@ -45,6 +52,8 @@ export interface DomainBaseConfig {
|
|
|
45
52
|
hostedZone?: FjallHostedZone;
|
|
46
53
|
certificate?: Certificate;
|
|
47
54
|
setIdentifier?: string;
|
|
55
|
+
/** Import zone and cert from a managed domain stack via Fn.importValue() */
|
|
56
|
+
managedDomain?: ManagedDomainExports;
|
|
48
57
|
}
|
|
49
58
|
export interface LatencyDomainConfig extends DomainBaseConfig {
|
|
50
59
|
region: string;
|
|
@@ -353,6 +362,7 @@ export default class EcsCluster extends Construct implements IConnectable {
|
|
|
353
362
|
private loadBalancerDisabled;
|
|
354
363
|
private directAccessEnabled;
|
|
355
364
|
private nextPriority;
|
|
365
|
+
private usedPriorities;
|
|
356
366
|
constructor(scope: Construct, id: string, props: EcsClusterProps);
|
|
357
367
|
/** Get the cluster's load balancer. Undefined if disabled. */
|
|
358
368
|
getLoadBalancer(): ApplicationLoadBalancer | undefined;
|
|
@@ -390,6 +400,8 @@ export default class EcsCluster extends Construct implements IConnectable {
|
|
|
390
400
|
private getContainerImage;
|
|
391
401
|
private createService;
|
|
392
402
|
private registerServiceWithALB;
|
|
403
|
+
/** Returns the next unused auto-incremented ALB priority, skipping any manually assigned values. */
|
|
404
|
+
private getNextPriority;
|
|
393
405
|
private buildRoutingConditions;
|
|
394
406
|
private addServiceScaling;
|
|
395
407
|
/**
|