@renovosolutions/cdk-library-aws-sso
Version:
AWS CDK Construct Library for AWS SSO
72 lines • 16.7 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.PermissionSet = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const aws_cdk_lib_1 = require("aws-cdk-lib");
const assignment_1 = require("./assignment");
const permissionset_common_1 = require("./private/permissionset-common");
/**
* The base permission set class
*/
class PermissionSetBase extends aws_cdk_lib_1.Resource {
grant(id, assignmentOptions) {
return new assignment_1.Assignment(this, id, {
permissionSet: this,
principal: assignmentOptions.principal,
targetId: assignmentOptions.targetId,
targetType: assignmentOptions.targetType,
});
}
}
;
class PermissionSet extends PermissionSetBase {
/**
* Reference an existing permission set by ARN
*/
static fromPermissionSetArn(scope, id, permissionSetArn) {
class Import extends PermissionSetBase {
constructor() {
super(...arguments);
this.permissionSetArn = permissionSetArn;
this.ssoInstanceArn = `arn:aws:sso:::instance/${(0, permissionset_common_1.permissionSetParseArn)(permissionSetArn).resourceName.split('/')[0]}`;
}
}
;
const permissionSet = new Import(scope, id);
return permissionSet;
}
constructor(scope, id, props) {
super(scope, id);
let managedPolicies = [];
if (props.awsManagedPolicies) {
managedPolicies = props.awsManagedPolicies.map(policy => policy.managedPolicyArn);
}
if (!aws_cdk_lib_1.Token.isUnresolved(props.ssoInstanceArn) && !props.ssoInstanceArn.match(/arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso:::instance\/(sso)?ins-[a-zA-Z0-9-.]{16}/)) {
throw new Error(`Invalid SSO instance ARN: ${props.ssoInstanceArn}`);
}
if (!aws_cdk_lib_1.Token.isUnresolved(props.name) && !props.name.match(/[\w+=,.@-]+/)) {
throw new Error(`Invalid permission set name. Name may only contain alphanumeric characters and any of: +=,.@-: ${props.name}`);
}
if (!aws_cdk_lib_1.Token.isUnresolved(props.relayStateType) && props.relayStateType && !props.relayStateType.match(/[a-zA-Z0-9&$@#\\\/%?=~\-_'"|!:,.;*+\[\]\ \(\)\{\}]+/)) {
throw new Error(`Invalid relay state type: ${props.relayStateType}`);
}
this.cfnPermissionSet = new aws_cdk_lib_1.aws_sso.CfnPermissionSet(this, 'permissionSet', {
instanceArn: props.ssoInstanceArn,
name: props.name,
customerManagedPolicyReferences: props.customerManagedPolicyReferences,
description: props.description,
inlinePolicy: props.inlinePolicy,
managedPolicies,
permissionsBoundary: props.permissionsBoundary,
relayStateType: props.relayStateType,
sessionDuration: props.sessionDuration ? props.sessionDuration.toIsoString() : undefined,
});
this.ssoInstanceArn = props.ssoInstanceArn;
this.permissionSetArn = this.cfnPermissionSet.attrPermissionSetArn;
}
}
exports.PermissionSet = PermissionSet;
_a = JSII_RTTI_SYMBOL_1;
PermissionSet[_a] = { fqn: "@renovosolutions/cdk-library-aws-sso.PermissionSet", version: "0.1.151" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnNldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wZXJtaXNzaW9uc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBT3FCO0FBRXJCLDZDQUE2RDtBQUM3RCx5RUFBdUU7QUE2QnZFOztHQUVHO0FBQ0gsTUFBZSxpQkFBa0IsU0FBUSxzQkFBUTtJQUl4QyxLQUFLLENBQUMsRUFBVSxFQUFFLGlCQUFvQztRQUMzRCxPQUFPLElBQUksdUJBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQzlCLGFBQWEsRUFBRSxJQUFJO1lBQ25CLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxTQUFTO1lBQ3RDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxRQUFRO1lBQ3BDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxVQUFVO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQUFBLENBQUM7QUFrR0YsTUFBYSxhQUFjLFNBQVEsaUJBQWlCO0lBQ2xEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLG9CQUFvQixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLGdCQUF3QjtRQUN2RixNQUFNLE1BQU8sU0FBUSxpQkFBaUI7WUFBdEM7O2dCQUNrQixxQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDcEMsbUJBQWMsR0FBRywwQkFBMEIsSUFBQSw0Q0FBcUIsRUFBQyxnQkFBZ0IsQ0FBQyxDQUFDLFlBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNuSSxDQUFDO1NBQUE7UUFBQSxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTVDLE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFpQkQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWxCLElBQUksZUFBZSxHQUFhLEVBQUUsQ0FBQztRQUNuQyxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzdCLGVBQWUsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDcEYsQ0FBQztRQUVELElBQUksQ0FBQyxtQkFBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQywyRkFBMkYsQ0FBQyxFQUFFLENBQUM7WUFDMUssTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUVELElBQUksQ0FBQyxtQkFBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3hFLE1BQU0sSUFBSSxLQUFLLENBQUMsa0dBQWtHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xJLENBQUM7UUFFRCxJQUFJLENBQUMsbUJBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxjQUFjLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxFQUFFLENBQUM7WUFDNUosTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLHFCQUFHLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtZQUN0RSxXQUFXLEVBQUUsS0FBSyxDQUFDLGNBQWM7WUFDakMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLCtCQUErQixFQUFFLEtBQUssQ0FBQywrQkFBK0I7WUFDdEUsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyxlQUFlO1lBQ2YsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLG1CQUFtQjtZQUM5QyxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWM7WUFDcEMsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDekYsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBQzNDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUM7SUFDckUsQ0FBQzs7QUFoRUgsc0NBaUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXdzX3NzbyBhcyBzc28sXG4gIGF3c19pYW0gYXMgaWFtLFxuICBJUmVzb3VyY2UsXG4gIFJlc291cmNlLFxuICBEdXJhdGlvbixcbiAgVG9rZW4sXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQXNzaWdubWVudCwgQXNzaWdubWVudE9wdGlvbnMgfSBmcm9tICcuL2Fzc2lnbm1lbnQnO1xuaW1wb3J0IHsgcGVybWlzc2lvblNldFBhcnNlQXJuIH0gZnJvbSAnLi9wcml2YXRlL3Blcm1pc3Npb25zZXQtY29tbW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2UgZXh0ZW5kcyBzc28uQ2ZuUGVybWlzc2lvblNldC5DdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2VQcm9wZXJ0eSB7fVxuZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uQm91bmRhcnkgZXh0ZW5kcyBzc28uQ2ZuUGVybWlzc2lvblNldC5QZXJtaXNzaW9uc0JvdW5kYXJ5UHJvcGVydHkge31cblxuLyoqXG4gKiBUaGUgcmVzb3VyY2UgaW50ZXJmYWNlIGZvciBhbiBBV1MgU1NPIHBlcm1pc3Npb24gc2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQZXJtaXNzaW9uU2V0IGV4dGVuZHMgSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBwZXJtaXNzaW9uIHNldCBBUk4gb2YgdGhlIHBlcm1pc3Npb24gc2V0LiBTdWNoIGFzXG4gICAqIGBhcm46YXdzOnNzbzo6OnBlcm1pc3Npb25TZXQvaW5zLWluc3RhbmNlaWQvcHMtcGVybWlzc2lvbnNldGlkYC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcGVybWlzc2lvblNldEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgU1NPIGluc3RhbmNlIEFSTiBvZiB0aGUgcGVybWlzc2lvbiBzZXQuXG4gICAqL1xuICByZWFkb25seSBzc29JbnN0YW5jZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudCB0aGlzIHBlcm1pc3Npb24gc2V0IHRvIGEgZ2l2ZW4gcHJpbmNpcGFsIGZvciBhIGdpdmVuXG4gICAqIHRhcmdldElkIChBV1MgYWNjb3VudCBpZGVudGlmaWVyKSBvbiBhIGdpdmVuIFNTTyBpbnN0YW5jZS5cbiAgICovXG4gIGdyYW50KGlkOiBzdHJpbmcsIGFzc2lnbm1lbnRPcHRpb25zOiBBc3NpZ25tZW50T3B0aW9ucyk6IEFzc2lnbm1lbnQ7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgcGVybWlzc2lvbiBzZXQgY2xhc3NcbiAqL1xuYWJzdHJhY3QgY2xhc3MgUGVybWlzc2lvblNldEJhc2UgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElQZXJtaXNzaW9uU2V0IHtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHBlcm1pc3Npb25TZXRBcm46IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHNzb0luc3RhbmNlQXJuOiBzdHJpbmc7XG5cbiAgcHVibGljIGdyYW50KGlkOiBzdHJpbmcsIGFzc2lnbm1lbnRPcHRpb25zOiBBc3NpZ25tZW50T3B0aW9ucyk6IEFzc2lnbm1lbnQge1xuICAgIHJldHVybiBuZXcgQXNzaWdubWVudCh0aGlzLCBpZCwge1xuICAgICAgcGVybWlzc2lvblNldDogdGhpcyxcbiAgICAgIHByaW5jaXBhbDogYXNzaWdubWVudE9wdGlvbnMucHJpbmNpcGFsLFxuICAgICAgdGFyZ2V0SWQ6IGFzc2lnbm1lbnRPcHRpb25zLnRhcmdldElkLFxuICAgICAgdGFyZ2V0VHlwZTogYXNzaWdubWVudE9wdGlvbnMudGFyZ2V0VHlwZSxcbiAgICB9KTtcbiAgfVxufTtcblxuLyoqXG4gKiBBdHRyaWJ1dGVzIGZvciBhIHBlcm1pc3Npb24gc2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvblNldEF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIHBlcm1pc3Npb24gc2V0IEFSTiBvZiB0aGUgcGVybWlzc2lvbiBzZXQuIFN1Y2ggYXNcbiAgICogYGFybjphd3M6c3NvOjo6cGVybWlzc2lvblNldC9pbnMtaW5zdGFuY2VpZC9wcy1wZXJtaXNzaW9uc2V0aWRgLlxuICAgKi9cbiAgcmVhZG9ubHkgcGVybWlzc2lvblNldEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgU1NPIGluc3RhbmNlIEFSTiBvZiB0aGUgcGVybWlzc2lvbiBzZXQuXG4gICAqL1xuICByZWFkb25seSBzc29JbnN0YW5jZUFybjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBwcm9wZXJ0aWVzIG9mIGEgbmV3IHBlcm1pc3Npb24gc2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvblNldFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIFNTTyBpbnN0YW5jZSB1bmRlciB3aGljaCB0aGUgb3BlcmF0aW9uIHdpbGwgYmUgZXhlY3V0ZWQuXG4gICAqL1xuICByZWFkb25seSBzc29JbnN0YW5jZUFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHBlcm1pc3Npb24gc2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBuYW1lcyBhbmQgcGF0aHMgb2YgYSBjdXN0b21lciBtYW5hZ2VkIHBvbGljeS5cbiAgICogWW91IG11c3QgaGF2ZSBhbiBJQU0gcG9saWN5IHRoYXQgbWF0Y2hlcyB0aGUgbmFtZSBhbmQgcGF0aCBpbiBlYWNoXG4gICAqIEFXUyBhY2NvdW50IHdoZXJlIHlvdSB3YW50IHRvIGRlcGxveSB5b3VyIHBlcm1pc3Npb24gc2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGN1c3RvbWVyIG1hbmFnZWQgcG9saWNpZXNcbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbWVyTWFuYWdlZFBvbGljeVJlZmVyZW5jZXM/OiBDdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2VbXTtcbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYFBlcm1pc3Npb25TZXRgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBJQU0gaW5saW5lIHBvbGljeSB0aGF0IGlzIGF0dGFjaGVkIHRvIHRoZSBwZXJtaXNzaW9uIHNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBpbmxpbmUgcG9saWN5XG4gICAqL1xuICByZWFkb25seSBpbmxpbmVQb2xpY3k/OiBpYW0uUG9saWN5RG9jdW1lbnQ7XG4gIC8qKlxuICAgKiBUaGUgQVdTIG1hbmFnZWQgcG9saWNpZXMgdG8gYXR0YWNoIHRvIHRoZSBgUGVybWlzc2lvblNldGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gQVdTIG1hbmFnZWQgcG9saWNpZXNcbiAgICovXG4gIHJlYWRvbmx5IGF3c01hbmFnZWRQb2xpY2llcz86IGlhbS5JTWFuYWdlZFBvbGljeVtdO1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBBV1MgbWFuYWdlZCBvciBjdXN0b21lciBtYW5hZ2VkXG4gICAqIHBvbGljeSB0aGF0IHlvdSB3YW50IHRvIHNldCBhcyBhIHBlcm1pc3Npb25zIGJvdW5kYXJ5LiBTcGVjaWZ5IGVpdGhlclxuICAgKiBjdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2UgdG8gdXNlIHRoZSBuYW1lIGFuZCBwYXRoIG9mIGEgY3VzdG9tZXJcbiAgICogbWFuYWdlZCBwb2xpY3ksIG9yIG1hbmFnZWRQb2xpY3kgdG8gdXNlIHRoZSBBUk4gb2YgYW4gQVdTIG1hbmFnZWRcbiAgICogcG9saWN5LlxuICAgKlxuICAgKiBBIHBlcm1pc3Npb25zIGJvdW5kYXJ5IHJlcHJlc2VudHMgdGhlIG1heGltdW0gcGVybWlzc2lvbnMgdGhhdCBhbnlcbiAgICogcG9saWN5IGNhbiBncmFudCB5b3VyIHJvbGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUGVybWlzc2lvbnMgYm91bmRhcmllc1xuICAgKiBmb3IgSUFNIGVudGl0aWVzIGluIHRoZSBBV1MgSWRlbnRpdHkgYW5kIEFjY2VzcyBNYW5hZ2VtZW50IFVzZXIgR3VpZGUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL2FjY2Vzc19wb2xpY2llc19ib3VuZGFyaWVzLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBwZXJtaXNzaW9ucyBib3VuZGFyeVxuICAgKi9cbiAgcmVhZG9ubHkgcGVybWlzc2lvbnNCb3VuZGFyeT86IFBlcm1pc3Npb25Cb3VuZGFyeTtcbiAgLyoqXG4gICAqIFVzZWQgdG8gcmVkaXJlY3QgdXNlcnMgd2l0aGluIHRoZSBhcHBsaWNhdGlvbiBkdXJpbmcgdGhlIGZlZGVyYXRpb25cbiAgICogYXV0aGVudGljYXRpb24gcHJvY2Vzcy5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgd2hlbiBhIHVzZXIgc2lnbnMgaW50byB0aGUgQVdTIGFjY2VzcyBwb3J0YWwsIGNob29zZXMgYW4gYWNjb3VudCxcbiAgICogYW5kIHRoZW4gY2hvb3NlcyB0aGUgcm9sZSB0aGF0IEFXUyBjcmVhdGVzIGZyb20gdGhlIGFzc2lnbmVkIHBlcm1pc3Npb24gc2V0LFxuICAgKiBJQU0gSWRlbnRpdHkgQ2VudGVyIHJlZGlyZWN0cyB0aGUgdXNlcuKAmXMgYnJvd3NlciB0byB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS5cbiAgICpcbiAgICogWW91IGNhbiBjaGFuZ2UgdGhpcyBiZWhhdmlvciBieSBzZXR0aW5nIHRoZSByZWxheSBzdGF0ZSB0byBhIGRpZmZlcmVudCBjb25zb2xlXG4gICAqIFVSTC4gU2V0dGluZyB0aGUgcmVsYXkgc3RhdGUgZW5hYmxlcyB5b3UgdG8gcHJvdmlkZSB0aGUgdXNlciB3aXRoIHF1aWNrIGFjY2Vzc1xuICAgKiB0byB0aGUgY29uc29sZSB0aGF0IGlzIG1vc3QgYXBwcm9wcmlhdGUgZm9yIHRoZWlyIHJvbGUuIEZvciBleGFtcGxlLCB5b3UgY2FuXG4gICAqIHNldCB0aGUgcmVsYXkgc3RhdGUgdG8gdGhlIEFtYXpvbiBFQzIgY29uc29sZSBVUkwgKGh0dHBzOi8vY29uc29sZS5hd3MuYW1hem9uLmNvbS9lYzIvKVxuICAgKiB0byByZWRpcmVjdCB0aGUgdXNlciB0byB0aGF0IGNvbnNvbGUgd2hlbiB0aGV5IGNob29zZSB0aGUgQW1hem9uIEVDMlxuICAgKiBhZG1pbmlzdHJhdG9yIHJvbGUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NpbmdsZXNpZ25vbi9sYXRlc3QvdXNlcmd1aWRlL2hvd3RvcGVybXJlbGF5c3RhdGUuaHRtbFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHJlZGlyZWN0aW9uXG4gICAqL1xuICByZWFkb25seSByZWxheVN0YXRlVHlwZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBsZW5ndGggb2YgdGltZSB0aGF0IHRoZSBhcHBsaWNhdGlvbiB1c2VyIHNlc3Npb25zIGFyZSB2YWxpZCBmb3IuXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uRHVyYXRpb24/OiBEdXJhdGlvbjtcbn1cblxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25TZXQgZXh0ZW5kcyBQZXJtaXNzaW9uU2V0QmFzZSB7XG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgYW4gZXhpc3RpbmcgcGVybWlzc2lvbiBzZXQgYnkgQVJOXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21QZXJtaXNzaW9uU2V0QXJuKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHBlcm1pc3Npb25TZXRBcm46IHN0cmluZyk6IElQZXJtaXNzaW9uU2V0IHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBQZXJtaXNzaW9uU2V0QmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcGVybWlzc2lvblNldEFybiA9IHBlcm1pc3Npb25TZXRBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3NvSW5zdGFuY2VBcm4gPSBgYXJuOmF3czpzc286OjppbnN0YW5jZS8ke3Blcm1pc3Npb25TZXRQYXJzZUFybihwZXJtaXNzaW9uU2V0QXJuKS5yZXNvdXJjZU5hbWUhLnNwbGl0KCcvJylbMF19YDtcbiAgICB9O1xuXG4gICAgY29uc3QgcGVybWlzc2lvblNldCA9IG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcblxuICAgIHJldHVybiBwZXJtaXNzaW9uU2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB1bmRlcmx5aW5nIENmblBlcm1pc3Npb25TZXQgcmVzb3VyY2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjZm5QZXJtaXNzaW9uU2V0OiBzc28uQ2ZuUGVybWlzc2lvblNldDtcblxuICAvKipcbiAgICogVGhlIHBlcm1pc3Npb24gc2V0IEFSTiBvZiB0aGUgcGVybWlzc2lvbiBzZXQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGVybWlzc2lvblNldEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgU1NPIGluc3RhbmNlIHRoZSBwZXJtaXNzaW9uIHNldCBiZWxvbmdzIHRvXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3NvSW5zdGFuY2VBcm46IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUGVybWlzc2lvblNldFByb3BzKSB7XG4gICAgc3VwZXIgKHNjb3BlLCBpZCk7XG5cbiAgICBsZXQgbWFuYWdlZFBvbGljaWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChwcm9wcy5hd3NNYW5hZ2VkUG9saWNpZXMpIHtcbiAgICAgIG1hbmFnZWRQb2xpY2llcyA9IHByb3BzLmF3c01hbmFnZWRQb2xpY2llcy5tYXAocG9saWN5ID0+IHBvbGljeS5tYW5hZ2VkUG9saWN5QXJuKTtcbiAgICB9XG5cbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5zc29JbnN0YW5jZUFybikgJiYgIXByb3BzLnNzb0luc3RhbmNlQXJuLm1hdGNoKC9hcm46KGF3c3xhd3MtdXMtZ292fGF3cy1jbnxhd3MtaXNvfGF3cy1pc28tYik6c3NvOjo6aW5zdGFuY2VcXC8oc3NvKT9pbnMtW2EtekEtWjAtOS0uXXsxNn0vKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFNTTyBpbnN0YW5jZSBBUk46ICR7cHJvcHMuc3NvSW5zdGFuY2VBcm59YCk7XG4gICAgfVxuXG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMubmFtZSkgJiYgIXByb3BzLm5hbWUubWF0Y2goL1tcXHcrPSwuQC1dKy8pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGVybWlzc2lvbiBzZXQgbmFtZS4gTmFtZSBtYXkgb25seSBjb250YWluIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBhbnkgb2Y6ICs9LC5ALTogJHtwcm9wcy5uYW1lfWApO1xuICAgIH1cblxuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLnJlbGF5U3RhdGVUeXBlKSAmJiBwcm9wcy5yZWxheVN0YXRlVHlwZSAmJiAhcHJvcHMucmVsYXlTdGF0ZVR5cGUubWF0Y2goL1thLXpBLVowLTkmJEAjXFxcXFxcLyU/PX5cXC1fJ1wifCE6LC47KitcXFtcXF1cXCBcXChcXClcXHtcXH1dKy8pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmVsYXkgc3RhdGUgdHlwZTogJHtwcm9wcy5yZWxheVN0YXRlVHlwZX1gKTtcbiAgICB9XG5cbiAgICB0aGlzLmNmblBlcm1pc3Npb25TZXQgPSBuZXcgc3NvLkNmblBlcm1pc3Npb25TZXQodGhpcywgJ3Blcm1pc3Npb25TZXQnLCB7XG4gICAgICBpbnN0YW5jZUFybjogcHJvcHMuc3NvSW5zdGFuY2VBcm4sXG4gICAgICBuYW1lOiBwcm9wcy5uYW1lLFxuICAgICAgY3VzdG9tZXJNYW5hZ2VkUG9saWN5UmVmZXJlbmNlczogcHJvcHMuY3VzdG9tZXJNYW5hZ2VkUG9saWN5UmVmZXJlbmNlcyxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGlubGluZVBvbGljeTogcHJvcHMuaW5saW5lUG9saWN5LFxuICAgICAgbWFuYWdlZFBvbGljaWVzLFxuICAgICAgcGVybWlzc2lvbnNCb3VuZGFyeTogcHJvcHMucGVybWlzc2lvbnNCb3VuZGFyeSxcbiAgICAgIHJlbGF5U3RhdGVUeXBlOiBwcm9wcy5yZWxheVN0YXRlVHlwZSxcbiAgICAgIHNlc3Npb25EdXJhdGlvbjogcHJvcHMuc2Vzc2lvbkR1cmF0aW9uID8gcHJvcHMuc2Vzc2lvbkR1cmF0aW9uLnRvSXNvU3RyaW5nKCkgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnNzb0luc3RhbmNlQXJuID0gcHJvcHMuc3NvSW5zdGFuY2VBcm47XG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0QXJuID0gdGhpcy5jZm5QZXJtaXNzaW9uU2V0LmF0dHJQZXJtaXNzaW9uU2V0QXJuO1xuICB9XG59Il19