@aws-cdk/aws-eks-v2-alpha
Version:
The CDK Construct Library for AWS::EKS
259 lines • 30.4 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var _a, _b, _c;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AccessEntry = exports.AccessEntryType = exports.AccessPolicy = exports.AccessPolicyArn = exports.AccessScopeType = void 0;
const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const aws_eks_1 = require("aws-cdk-lib/aws-eks");
const core_1 = require("aws-cdk-lib/core");
const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
/**
* Represents the scope type of an access policy.
*
* The scope type determines the level of access granted by the policy.
*
* @export
* @enum {string}
*/
var AccessScopeType;
(function (AccessScopeType) {
/**
* The policy applies to a specific namespace within the cluster.
*/
AccessScopeType["NAMESPACE"] = "namespace";
/**
* The policy applies to the entire cluster.
*/
AccessScopeType["CLUSTER"] = "cluster";
})(AccessScopeType || (exports.AccessScopeType = AccessScopeType = {}));
/**
* Represents an Amazon EKS Access Policy ARN.
*
* Amazon EKS Access Policies are used to control access to Amazon EKS clusters.
*
* @see https://docs.aws.amazon.com/eks/latest/userguide/access-policies.html
*/
class AccessPolicyArn {
/**
* Creates a new instance of the AccessPolicy class with the specified policy name.
* @param policyName The name of the access policy.
* @returns A new instance of the AccessPolicy class.
*/
static of(policyName) { return new AccessPolicyArn(policyName); }
/**
* Constructs a new instance of the `AccessEntry` class.
*
* @param policyName - The name of the Amazon EKS access policy. This is used to construct the policy ARN.
*/
constructor(policyName) {
this.policyName = policyName;
this.policyArn = `arn:${core_1.Aws.PARTITION}:eks::aws:cluster-access-policy/${policyName}`;
}
}
exports.AccessPolicyArn = AccessPolicyArn;
_a = JSII_RTTI_SYMBOL_1;
AccessPolicyArn[_a] = { fqn: "@aws-cdk/aws-eks-v2-alpha.AccessPolicyArn", version: "2.208.0-alpha.0" };
/**
* The Amazon EKS Admin Policy. This access policy includes permissions that grant an IAM principal
* most permissions to resources. When associated to an access entry, its access scope is typically
* one or more Kubernetes namespaces.
*/
AccessPolicyArn.AMAZON_EKS_ADMIN_POLICY = AccessPolicyArn.of('AmazonEKSAdminPolicy');
/**
* The Amazon EKS Cluster Admin Policy. This access policy includes permissions that grant an IAM
* principal administrator access to a cluster. When associated to an access entry, its access scope
* is typically the cluster, rather than a Kubernetes namespace.
*/
AccessPolicyArn.AMAZON_EKS_CLUSTER_ADMIN_POLICY = AccessPolicyArn.of('AmazonEKSClusterAdminPolicy');
/**
* The Amazon EKS Admin View Policy. This access policy includes permissions that grant an IAM principal
* access to list/view all resources in a cluster.
*/
AccessPolicyArn.AMAZON_EKS_ADMIN_VIEW_POLICY = AccessPolicyArn.of('AmazonEKSAdminViewPolicy');
/**
* The Amazon EKS Edit Policy. This access policy includes permissions that allow an IAM principal
* to edit most Kubernetes resources.
*/
AccessPolicyArn.AMAZON_EKS_EDIT_POLICY = AccessPolicyArn.of('AmazonEKSEditPolicy');
/**
* The Amazon EKS View Policy. This access policy includes permissions that grant an IAM principal
* access to list/view all resources in a cluster.
*/
AccessPolicyArn.AMAZON_EKS_VIEW_POLICY = AccessPolicyArn.of('AmazonEKSViewPolicy');
/**
* Represents an Amazon EKS Access Policy that implements the IAccessPolicy interface.
*
* @implements {IAccessPolicy}
*/
class AccessPolicy {
/**
* Import AccessPolicy by name.
*/
static fromAccessPolicyName(policyName, options) {
try {
jsiiDeprecationWarnings._aws_cdk_aws_eks_v2_alpha_AccessPolicyNameOptions(options);
}
catch (error) {
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
Error.captureStackTrace(error, this.fromAccessPolicyName);
}
throw error;
}
class Import {
constructor() {
this.policy = `arn:${core_1.Aws.PARTITION}:eks::aws:cluster-access-policy/${policyName}`;
this.accessScope = {
type: options.accessScopeType,
namespaces: options.namespaces,
};
}
}
return new Import();
}
/**
* Constructs a new instance of the AccessPolicy class.
*
* @param {AccessPolicyProps} props - The properties for configuring the access policy.
*/
constructor(props) {
try {
jsiiDeprecationWarnings._aws_cdk_aws_eks_v2_alpha_AccessPolicyProps(props);
}
catch (error) {
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
Error.captureStackTrace(error, AccessPolicy);
}
throw error;
}
this.accessScope = props.accessScope;
this.policy = props.policy.policyArn;
}
}
exports.AccessPolicy = AccessPolicy;
_b = JSII_RTTI_SYMBOL_1;
AccessPolicy[_b] = { fqn: "@aws-cdk/aws-eks-v2-alpha.AccessPolicy", version: "2.208.0-alpha.0" };
/**
* Represents the different types of access entries that can be used in an Amazon EKS cluster.
*
* @enum {string}
*/
var AccessEntryType;
(function (AccessEntryType) {
/**
* Represents a standard access entry.
*/
AccessEntryType["STANDARD"] = "STANDARD";
/**
* Represents a Fargate Linux access entry.
*/
AccessEntryType["FARGATE_LINUX"] = "FARGATE_LINUX";
/**
* Represents an EC2 Linux access entry.
*/
AccessEntryType["EC2_LINUX"] = "EC2_LINUX";
/**
* Represents an EC2 Windows access entry.
*/
AccessEntryType["EC2_WINDOWS"] = "EC2_WINDOWS";
})(AccessEntryType || (exports.AccessEntryType = AccessEntryType = {}));
/**
* Represents an access entry in an Amazon EKS cluster.
*
* An access entry defines the permissions and scope for a user or role to access an Amazon EKS cluster.
*
* @implements {IAccessEntry}
* @resource AWS::EKS::AccessEntry
*/
let AccessEntry = class AccessEntry extends core_1.Resource {
/**
* Imports an `AccessEntry` from its attributes.
*
* @param scope - The parent construct.
* @param id - The ID of the imported construct.
* @param attrs - The attributes of the access entry to import.
* @returns The imported access entry.
*/
static fromAccessEntryAttributes(scope, id, attrs) {
try {
jsiiDeprecationWarnings._aws_cdk_aws_eks_v2_alpha_AccessEntryAttributes(attrs);
}
catch (error) {
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
Error.captureStackTrace(error, this.fromAccessEntryAttributes);
}
throw error;
}
class Import extends core_1.Resource {
constructor() {
super(...arguments);
this.accessEntryName = attrs.accessEntryName;
this.accessEntryArn = attrs.accessEntryArn;
}
}
return new Import(scope, id);
}
constructor(scope, id, props) {
super(scope, id);
try {
jsiiDeprecationWarnings._aws_cdk_aws_eks_v2_alpha_AccessEntryProps(props);
}
catch (error) {
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
Error.captureStackTrace(error, AccessEntry);
}
throw error;
}
// Enhanced CDK Analytics Telemetry
(0, metadata_resource_1.addConstructMetadata)(this, props);
this.cluster = props.cluster;
this.principal = props.principal;
this.accessPolicies = props.accessPolicies;
const resource = new aws_eks_1.CfnAccessEntry(this, 'Resource', {
clusterName: this.cluster.clusterName,
principalArn: this.principal,
type: props.accessEntryType,
accessPolicies: core_1.Lazy.any({
produce: () => this.accessPolicies.map(p => ({
accessScope: {
type: p.accessScope.type,
namespaces: p.accessScope.namespaces,
},
policyArn: p.policy,
})),
}),
});
this.accessEntryName = this.getResourceNameAttribute(resource.ref);
this.accessEntryArn = this.getResourceArnAttribute(resource.attrAccessEntryArn, {
service: 'eks',
resource: 'accessentry',
resourceName: this.physicalName,
});
}
/**
* Add the access policies for this entry.
* @param newAccessPolicies - The new access policies to add.
*/
addAccessPolicies(newAccessPolicies) {
// add newAccessPolicies to this.accessPolicies
this.accessPolicies.push(...newAccessPolicies);
}
};
exports.AccessEntry = AccessEntry;
_c = JSII_RTTI_SYMBOL_1;
AccessEntry[_c] = { fqn: "@aws-cdk/aws-eks-v2-alpha.AccessEntry", version: "2.208.0-alpha.0" };
/** Uniquely identifies this class. */
AccessEntry.PROPERTY_INJECTION_ID = '@aws-cdk.aws-eks-v2-alpha.AccessEntry';
__decorate([
(0, metadata_resource_1.MethodMetadata)()
], AccessEntry.prototype, "addAccessPolicies", null);
exports.AccessEntry = AccessEntry = __decorate([
prop_injectable_1.propertyInjectable
], AccessEntry);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWVudHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYWNjZXNzLWVudHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUVBLGlEQUFxRDtBQUNyRCwyQ0FBa0U7QUFDbEUsOEVBQThGO0FBQzlGLDBFQUEwRTtBQXVDMUU7Ozs7Ozs7R0FPRztBQUNILElBQVksZUFTWDtBQVRELFdBQVksZUFBZTtJQUN6Qjs7T0FFRztJQUNILDBDQUF1QixDQUFBO0lBQ3ZCOztPQUVHO0lBQ0gsc0NBQW1CLENBQUE7QUFDckIsQ0FBQyxFQVRXLGVBQWUsK0JBQWYsZUFBZSxRQVMxQjtBQXlCRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLGVBQWU7SUFpQzFCOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQWtCLElBQUksT0FBTyxJQUFJLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFO0lBTWhGOzs7O09BSUc7SUFDSCxZQUE0QixVQUFrQjtRQUFsQixlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQzVDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxVQUFHLENBQUMsU0FBUyxtQ0FBbUMsVUFBVSxFQUFFLENBQUM7S0FDdEY7O0FBbkRILDBDQW9EQzs7O0FBbkRDOzs7O0dBSUc7QUFDb0IsdUNBQXVCLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBRTVGOzs7O0dBSUc7QUFDb0IsK0NBQStCLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBRTNHOzs7R0FHRztBQUNvQiw0Q0FBNEIsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFFckc7OztHQUdHO0FBQ29CLHNDQUFzQixHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUUxRjs7O0dBR0c7QUFDb0Isc0NBQXNCLEdBQUcsZUFBZSxDQUFDLEVB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QztRQUNILElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUU7WUFDOUUsT0FBTyxFQUFFLEtBQUs7WUFDZCxRQUFRLEVBQUUsYUFBYTtZQUN2QixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDaEMsQ0FBQyxDQUFDO0tBQ0o7SUFDRDs7O09BR0c7SUFFSSxpQkFBaUIsQ0FBQyxpQkFBa0M7UUFDekQsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQztLQUNoRDs7QUFyRVUsa0NBQVc7OztBQUN0QixzQ0FBc0M7QUFDZixpQ0FBcUIsR0FBVyx1Q0FBdUMsQUFBbEQsQ0FBbUQ7QUFnRXhGO0lBRE4sSUFBQSxrQ0FBYyxHQUFFO29EQUloQjtzQkFyRVUsV0FBVztJQUR2QixvQ0FBa0I7R0FDTixXQUFXLENBc0V2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgSUNsdXN0ZXIgfSBmcm9tICcuL2NsdXN0ZXInO1xuaW1wb3J0IHsgQ2ZuQWNjZXNzRW50cnkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWtzJztcbmltcG9ydCB7IFJlc291cmNlLCBJUmVzb3VyY2UsIEF3cywgTGF6eSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgTWV0aG9kTWV0YWRhdGEsIGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGFjY2VzcyBlbnRyeSBpbiBhbiBBbWF6b24gRUtTIGNsdXN0ZXIuXG4gKlxuICogQW4gYWNjZXNzIGVudHJ5IGRlZmluZXMgdGhlIHBlcm1pc3Npb25zIGFuZCBzY29wZSBmb3IgYSB1c2VyIG9yIHJvbGUgdG8gYWNjZXNzIGFuIEFtYXpvbiBFS1MgY2x1c3Rlci5cbiAqXG4gKiBAaW50ZXJmYWNlIElBY2Nlc3NFbnRyeVxuICogQGV4dGVuZHMge0lSZXNvdXJjZX1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY2Nlc3NFbnRyeU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgYWNjZXNzIGVudHJ5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFjY2Vzc0VudHJ5QXJuIC0gVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBhY2Nlc3MgZW50cnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUFjY2Vzc0VudHJ5IGV4dGVuZHMgSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhY2Nlc3MgZW50cnkuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGFjY2Vzc0VudHJ5TmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBhY2Nlc3MgZW50cnkuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGFjY2Vzc0VudHJ5QXJuOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYXR0cmlidXRlcyBvZiBhbiBhY2Nlc3MgZW50cnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWNjZXNzRW50cnlBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhY2Nlc3MgZW50cnkuXG4gICAqL1xuICByZWFkb25seSBhY2Nlc3NFbnRyeU5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgYWNjZXNzIGVudHJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXNzRW50cnlBcm46IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBzY29wZSB0eXBlIG9mIGFuIGFjY2VzcyBwb2xpY3kuXG4gKlxuICogVGhlIHNjb3BlIHR5cGUgZGV0ZXJtaW5lcyB0aGUgbGV2ZWwgb2YgYWNjZXNzIGdyYW50ZWQgYnkgdGhlIHBvbGljeS5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgZW51bSBBY2Nlc3NTY29wZVR5cGUge1xuICAvKipcbiAgICogVGhlIHBvbGljeSBhcHBsaWVzIHRvIGEgc3BlY2lmaWMgbmFtZXNwYWNlIHdpdGhpbiB0aGUgY2x1c3Rlci5cbiAgICovXG4gIE5BTUVTUEFDRSA9ICduYW1lc3BhY2UnLFxuICAvKipcbiAgICogVGhlIHBvbGljeSBhcHBsaWVzIHRvIHRoZSBlbnRpcmUgY2x1c3Rlci5cbiAgICovXG4gIENMVVNURVIgPSAnY2x1c3RlcicsXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgc2NvcGUgb2YgYW4gYWNjZXNzIHBvbGljeS5cbiAqXG4gKiBUaGUgc2NvcGUgZGVmaW5lcyB0aGUgbmFtZXNwYWNlcyBvciBjbHVzdGVyLWxldmVsIGFjY2VzcyBncmFudGVkIGJ5IHRoZSBwb2xpY3kuXG4gKlxuICogQGludGVyZmFjZSBBY2Nlc3NTY29wZVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW25hbWVzcGFjZXNdIC0gVGhlIG5hbWVzcGFjZXMgdG8gd2hpY2ggdGhlIHBvbGljeSBhcHBsaWVzLCBpZiB0aGUgc2NvcGUgdHlwZSBpcyAnbmFtZXNwYWNlJy5cbiAqIEBwcm9wZXJ0eSB7QWNjZXNzU2NvcGVUeXBlfSB0eXBlIC0gVGhlIHNjb3BlIHR5cGUgb2YgdGhlIHBvbGljeSwgZWl0aGVyICduYW1lc3BhY2UnIG9yICdjbHVzdGVyJy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY2Nlc3NTY29wZSB7XG4gIC8qKlxuICAgKiBBIEt1YmVybmV0ZXMgbmFtZXNwYWNlIHRoYXQgYW4gYWNjZXNzIHBvbGljeSBpcyBzY29wZWQgdG8uIEEgdmFsdWUgaXMgcmVxdWlyZWQgaWYgeW91IHNwZWNpZmllZFxuICAgKiBuYW1lc3BhY2UgZm9yIFR5cGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc3BlY2lmaWMgbmFtZXNwYWNlcyBmb3IgdGhpcyBzY29wZS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWVzcGFjZXM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBzY29wZSB0eXBlIG9mIHRoZSBwb2xpY3ksIGVpdGhlciAnbmFtZXNwYWNlJyBvciAnY2x1c3RlcicuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBBY2Nlc3NTY29wZVR5cGU7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBBbWF6b24gRUtTIEFjY2VzcyBQb2xpY3kgQVJOLlxuICpcbiAqIEFtYXpvbiBFS1MgQWNjZXNzIFBvbGljaWVzIGFyZSB1c2VkIHRvIGNvbnRyb2wgYWNjZXNzIHRvIEFtYXpvbiBFS1MgY2x1c3RlcnMuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWtzL2xhdGVzdC91c2VyZ3VpZGUvYWNjZXNzLXBvbGljaWVzLmh0bWxcbiAqL1xuZXhwb3J0IGNsYXNzIEFjY2Vzc1BvbGljeUFybiB7XG4gIC8qKlxuICAgKiBUaGUgQW1hem9uIEVLUyBBZG1pbiBQb2xpY3kuIFRoaXMgYWNjZXNzIHBvbGljeSBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0aGF0IGdyYW50IGFuIElBTSBwcmluY2lwYWxcbiAgICogbW9zdCBwZXJtaXNzaW9ucyB0byByZXNvdXJjZXMuIFdoZW4gYXNzb2NpYXRlZCB0byBhbiBhY2Nlc3MgZW50cnksIGl0cyBhY2Nlc3Mgc2NvcGUgaXMgdHlwaWNhbGx5XG4gICAqIG9uZSBvciBtb3JlIEt1YmVybmV0ZXMgbmFtZXNwYWNlcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQU1BWk9OX0VLU19BRE1JTl9QT0xJQ1kgPSBBY2Nlc3NQb2xpY3lBcm4ub2YoJ0FtYXpvbkVLU0FkbWluUG9saWN5Jyk7XG5cbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gRUtTIENsdXN0ZXIgQWRtaW4gUG9saWN5LiBUaGlzIGFjY2VzcyBwb2xpY3kgaW5jbHVkZXMgcGVybWlzc2lvbnMgdGhhdCBncmFudCBhbiBJQU1cbiAgICogcHJpbmNpcGFsIGFkbWluaXN0cmF0b3IgYWNjZXNzIHRvIGEgY2x1c3Rlci4gV2hlbiBhc3NvY2lhdGVkIHRvIGFuIGFjY2VzcyBlbnRyeSwgaXRzIGFjY2VzcyBzY29wZVxuICAgKiBpcyB0eXBpY2FsbHkgdGhlIGNsdXN0ZXIsIHJhdGhlciB0aGFuIGEgS3ViZXJuZXRlcyBuYW1lc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFNQVpPTl9FS1NfQ0xVU1RFUl9BRE1JTl9QT0xJQ1kgPSBBY2Nlc3NQb2xpY3lBcm4ub2YoJ0FtYXpvbkVLU0NsdXN0ZXJBZG1pblBvbGljeScpO1xuXG4gIC8qKlxuICAgKiBUaGUgQW1hem9uIEVLUyBBZG1pbiBWaWV3IFBvbGljeS4gVGhpcyBhY2Nlc3MgcG9saWN5IGluY2x1ZGVzIHBlcm1pc3Npb25zIHRoYXQgZ3JhbnQgYW4gSUFNIHByaW5jaXBhbFxuICAgKiBhY2Nlc3MgdG8gbGlzdC92aWV3IGFsbCByZXNvdXJjZXMgaW4gYSBjbHVzdGVyLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBTUFaT05fRUtTX0FETUlOX1ZJRVdfUE9MSUNZID0gQWNjZXNzUG9saWN5QXJuLm9mKCdBbWF6b25FS1NBZG1pblZpZXdQb2xpY3knKTtcblxuICAvKipcbiAgICogVGhlIEFtYXpvbiBFS1MgRWRpdCBQb2xpY3kuIFRoaXMgYWNjZXNzIHBvbGljeSBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IGFuIElBTSBwcmluY2lwYWxcbiAgICogdG8gZWRpdCBtb3N0IEt1YmVybmV0ZXMgcmVzb3VyY2VzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBTUFaT05fRUtTX0VESVRfUE9MSUNZID0gQWNjZXNzUG9saWN5QXJuLm9mKCdBbWF6b25FS1NFZGl0UG9saWN5Jyk7XG5cbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gRUtTIFZpZXcgUG9saWN5LiBUaGlzIGFjY2VzcyBwb2xpY3kgaW5jbHVkZXMgcGVybWlzc2lvbnMgdGhhdCBncmFudCBhbiBJQU0gcHJpbmNpcGFsXG4gICAqIGFjY2VzcyB0byBsaXN0L3ZpZXcgYWxsIHJlc291cmNlcyBpbiBhIGNsdXN0ZXIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFNQVpPTl9FS1NfVklFV19QT0xJQ1kgPSBBY2Nlc3NQb2xpY3lBcm4ub2YoJ0FtYXpvbkVLU1ZpZXdQb2xpY3knKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgQWNjZXNzUG9saWN5IGNsYXNzIHdpdGggdGhlIHNwZWNpZmllZCBwb2xpY3kgbmFtZS5cbiAgICogQHBhcmFtIHBvbGljeU5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjY2VzcyBwb2xpY3kuXG4gICAqIEByZXR1cm5zIEEgbmV3IGluc3RhbmNlIG9mIHRoZSBBY2Nlc3NQb2xpY3kgY2xhc3MuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHBvbGljeU5hbWU6IHN0cmluZykgeyByZXR1cm4gbmV3IEFjY2Vzc1BvbGljeUFybihwb2xpY3lOYW1lKTsgfVxuXG4gIC8qKlxuICAgKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIGFjY2VzcyBwb2xpY3kuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcG9saWN5QXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBgQWNjZXNzRW50cnlgIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0gcG9saWN5TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBBbWF6b24gRUtTIGFjY2VzcyBwb2xpY3kuIFRoaXMgaXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBvbGljeSBBUk4uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgcG9saWN5TmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5wb2xpY3lBcm4gPSBgYXJuOiR7QXdzLlBBUlRJVElPTn06ZWtzOjphd3M6Y2x1c3Rlci1hY2Nlc3MtcG9saWN5LyR7cG9saWN5TmFtZX1gO1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBhY2Nlc3MgcG9saWN5IHRoYXQgZGVmaW5lcyB0aGUgcGVybWlzc2lvbnMgYW5kIHNjb3BlIGZvciBhIHVzZXIgb3Igcm9sZSB0byBhY2Nlc3MgYW4gQW1hem9uIEVLUyBjbHVzdGVyLlxuICpcbiAqIEBpbnRlcmZhY2UgSUFjY2Vzc1BvbGljeVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBY2Nlc3NQb2xpY3kge1xuICAvKipcbiAgICogVGhlIHNjb3BlIG9mIHRoZSBhY2Nlc3MgcG9saWN5LCB3aGljaCBkZXRlcm1pbmVzIHRoZSBsZXZlbCBvZiBhY2Nlc3MgZ3JhbnRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFjY2Vzc1Njb3BlOiBBY2Nlc3NTY29wZTtcbiAgLyoqXG4gICAqIFRoZSBhY2Nlc3MgcG9saWN5IGl0c2VsZiwgd2hpY2ggZGVmaW5lcyB0aGUgc3BlY2lmaWMgcGVybWlzc2lvbnMuXG4gICAqL1xuICByZWFkb25seSBwb2xpY3k6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjb25maWd1cmluZyBhbiBBbWF6b24gRUtTIEFjY2VzcyBQb2xpY3kuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWNjZXNzUG9saWN5UHJvcHMge1xuICAvKipcbiAgICogVGhlIHNjb3BlIG9mIHRoZSBhY2Nlc3MgcG9saWN5LCB3aGljaCBkZXRlcm1pbmVzIHRoZSBsZXZlbCBvZiBhY2Nlc3MgZ3JhbnRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFjY2Vzc1Njb3BlOiBBY2Nlc3NTY29wZTtcbiAgLyoqXG4gICAqIFRoZSBhY2Nlc3MgcG9saWN5IGl0c2VsZiwgd2hpY2ggZGVmaW5lcyB0aGUgc3BlY2lmaWMgcGVybWlzc2lvbnMuXG4gICAqL1xuICByZWFkb25seSBwb2xpY3k6IEFjY2Vzc1BvbGljeUFybjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBvcHRpb25zIHJlcXVpcmVkIHRvIGNyZWF0ZSBhbiBBbWF6b24gRUtTIEFjY2VzcyBQb2xpY3kgdXNpbmcgdGhlIGBmcm9tQWNjZXNzUG9saWN5TmFtZSgpYCBtZXRob2QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWNjZXNzUG9saWN5TmFtZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHNjb3BlIG9mIHRoZSBhY2Nlc3MgcG9saWN5LiBUaGlzIGRldGVybWluZXMgdGhlIGxldmVsIG9mIGFjY2VzcyBncmFudGVkIGJ5IHRoZSBwb2xpY3kuXG4gICAqL1xuICByZWFkb25seSBhY2Nlc3NTY29wZVR5cGU6IEFjY2Vzc1Njb3BlVHlwZTtcbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIGFycmF5IG9mIEt1YmVybmV0ZXMgbmFtZXNwYWNlcyB0byB3aGljaCB0aGUgYWNjZXNzIHBvbGljeSBhcHBsaWVzLlxuICAgKiBAZGVmYXVsdCAtIG5vIHNwZWNpZmljIG5hbWVzcGFjZXMgZm9yIHRoaXMgc2NvcGVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWVzcGFjZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIEFtYXpvbiBFS1MgQWNjZXNzIFBvbGljeSB0aGF0IGltcGxlbWVudHMgdGhlIElBY2Nlc3NQb2xpY3kgaW50ZXJmYWNlLlxuICpcbiAqIEBpbXBsZW1lbnRzIHtJQWNjZXNzUG9saWN5fVxuICovXG5leHBvcnQgY2xhc3MgQWNjZXNzUG9saWN5IGltcGxlbWVudHMgSUFjY2Vzc1BvbGljeSB7XG4gIC8qKlxuICAgKiBJbXBvcnQgQWNjZXNzUG9saWN5IGJ5IG5hbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21BY2Nlc3NQb2xpY3lOYW1lKHBvbGljeU5hbWU6IHN0cmluZywgb3B0aW9uczogQWNjZXNzUG9saWN5TmFtZU9wdGlvbnMpOiBJQWNjZXNzUG9saWN5IHtcbiAgICBjbGFzcyBJbXBvcnQgaW1wbGVtZW50cyBJQWNjZXNzUG9saWN5IHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBwb2xpY3kgPSBgYXJuOiR7QXdzLlBBUlRJVElPTn06ZWtzOjphd3M6Y2x1c3Rlci1hY2Nlc3MtcG9saWN5LyR7cG9saWN5TmFtZX1gO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGFjY2Vzc1Njb3BlOiBBY2Nlc3NTY29wZSA9IHtcbiAgICAgICAgdHlwZTogb3B0aW9ucy5hY2Nlc3NTY29wZVR5cGUsXG4gICAgICAgIG5hbWVzcGFjZXM6IG9wdGlvbnMubmFtZXNwYWNlcyxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wb3J0KCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBzY29wZSBvZiB0aGUgYWNjZXNzIHBvbGljeSwgd2hpY2ggZGV0ZXJtaW5lcyB0aGUgbGV2ZWwgb2YgYWNjZXNzIGdyYW50ZWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWNjZXNzU2NvcGU6IEFjY2Vzc1Njb3BlO1xuXG4gIC8qKlxuICAgKiBUaGUgYWNjZXNzIHBvbGljeSBpdHNlbGYsIHdoaWNoIGRlZmluZXMgdGhlIHNwZWNpZmljIHBlcm1pc3Npb25zLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBvbGljeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBBY2Nlc3NQb2xpY3kgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7QWNjZXNzUG9saWN5UHJvcHN9IHByb3BzIC0gVGhlIHByb3BlcnRpZXMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBhY2Nlc3MgcG9saWN5LlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvcHM6IEFjY2Vzc1BvbGljeVByb3BzKSB7XG4gICAgdGhpcy5hY2Nlc3NTY29wZSA9IHByb3BzLmFjY2Vzc1Njb3BlO1xuICAgIHRoaXMucG9saWN5ID0gcHJvcHMucG9saWN5LnBvbGljeUFybjtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBhY2Nlc3MgZW50cmllcyB0aGF0IGNhbiBiZSB1c2VkIGluIGFuIEFtYXpvbiBFS1MgY2x1c3Rlci5cbiAqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgZW51bSBBY2Nlc3NFbnRyeVR5cGUge1xuICAvKipcbiAgICogUmVwcmVzZW50cyBhIHN0YW5kYXJkIGFjY2VzcyBlbnRyeS5cbiAgICovXG4gIFNUQU5EQVJEID0gJ1NUQU5EQVJEJyxcblxuICAvKipcbiAgICogUmVwcmVzZW50cyBhIEZhcmdhdGUgTGludXggYWNjZXNzIGVudHJ5LlxuICAgKi9cbiAgRkFSR0FURV9MSU5VWCA9ICdGQVJHQVRFX0xJTlVYJyxcblxuICAvKipcbiAgICogUmVwcmVzZW50cyBhbiBFQzIgTGludXggYWNjZXNzIGVudHJ5LlxuICAgKi9cbiAgRUMyX0xJTlVYID0gJ0VDMl9MSU5VWCcsXG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYW4gRUMyIFdpbmRvd3MgYWNjZXNzIGVudHJ5LlxuICAgKi9cbiAgRUMyX1dJTkRPV1MgPSAnRUMyX1dJTkRPV1MnLFxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHByb3BlcnRpZXMgcmVxdWlyZWQgdG8gY3JlYXRlIGFuIEFtYXpvbiBFS1MgYWNjZXNzIGVudHJ5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjY2Vzc0VudHJ5UHJvcHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFjY2Vzc0VudHJ5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGFjY2VzcyBlbnRyeSBuYW1lIGlzIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBhY2Nlc3NFbnRyeU5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgQWNjZXNzRW50cnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IFNUQU5EQVJEXG4gICAqL1xuICByZWFkb25seSBhY2Nlc3NFbnRyeVR5cGU/OiBBY2Nlc3NFbnRyeVR5cGU7XG4gIC8qKlxuICAgKiBUaGUgQW1hem9uIEVLUyBjbHVzdGVyIHRvIHdoaWNoIHRoZSBhY2Nlc3MgZW50cnkgYXBwbGllcy5cbiAgICovXG4gIHJlYWRvbmx5IGNsdXN0ZXI6IElDbHVzdGVyO1xuICAvKipcbiAgICogVGhlIGFjY2VzcyBwb2xpY2llcyB0aGF0IGRlZmluZSB0aGUgcGVybWlzc2lvbnMgYW5kIHNjb3BlIGZvciB0aGUgYWNjZXNzIGVudHJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXNzUG9saWNpZXM6IElBY2Nlc3NQb2xpY3lbXTtcbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgcHJpbmNpcGFsICh1c2VyIG9yIHJvbGUpIHRvIGFzc29jaWF0ZSB0aGUgYWNjZXNzIGVudHJ5IHdpdGguXG4gICAqL1xuICByZWFkb25seSBwcmluY2lwYWw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGFjY2VzcyBlbnRyeSBpbiBhbiBBbWF6b24gRUtTIGNsdXN0ZXIuXG4gKlxuICogQW4gYWNjZXNzIGVudHJ5IGRlZmluZXMgdGhlIHBlcm1pc3Npb25zIGFuZCBzY29wZSBmb3IgYSB1c2VyIG9yIHJvbGUgdG8gYWNjZXNzIGFuIEFtYXpvbiBFS1MgY2x1c3Rlci5cbiAqXG4gKiBAaW1wbGVtZW50cyB7SUFjY2Vzc0VudHJ5fVxuICogQHJlc291cmNlIEFXUzo6RUtTOjpBY2Nlc3NFbnRyeVxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgQWNjZXNzRW50cnkgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElBY2Nlc3NFbnRyeSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWVrcy12Mi1hbHBoYS5BY2Nlc3NFbnRyeSc7XG5cbiAgLyoqXG4gICAqIEltcG9ydHMgYW4gYEFjY2Vzc0VudHJ5YCBmcm9tIGl0cyBhdHRyaWJ1dGVzLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgcGFyZW50IGNvbnN0cnVjdC5cbiAgICogQHBhcmFtIGlkIC0gVGhlIElEIG9mIHRoZSBpbXBvcnRlZCBjb25zdHJ1Y3QuXG4gICAqIEBwYXJhbSBhdHRycyAtIFRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBhY2Nlc3MgZW50cnkgdG8gaW1wb3J0LlxuICAgKiBAcmV0dXJucyBUaGUgaW1wb3J0ZWQgYWNjZXNzIGVudHJ5LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQWNjZXNzRW50cnlBdHRyaWJ1dGVzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBBY2Nlc3NFbnRyeUF0dHJpYnV0ZXMpOiBJQWNjZXNzRW50cnkge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSUFjY2Vzc0VudHJ5IHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBhY2Nlc3NFbnRyeU5hbWUgPSBhdHRycy5hY2Nlc3NFbnRyeU5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYWNjZXNzRW50cnlBcm4gPSBhdHRycy5hY2Nlc3NFbnRyeUFybjtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGFjY2VzcyBlbnRyeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhY2Nlc3NFbnRyeU5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgYWNjZXNzIGVudHJ5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFjY2Vzc0VudHJ5QXJuOiBzdHJpbmc7XG4gIHByaXZhdGUgY2x1c3RlcjogSUNsdXN0ZXI7XG4gIHByaXZhdGUgcHJpbmNpcGFsOiBzdHJpbmc7XG4gIHByaXZhdGUgYWNjZXNzUG9saWNpZXM6IElBY2Nlc3NQb2xpY3lbXTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQWNjZXNzRW50cnlQcm9wcyApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhpcy5jbHVzdGVyID0gcHJvcHMuY2x1c3RlcjtcbiAgICB0aGlzLnByaW5jaXBhbCA9IHByb3BzLnByaW5jaXBhbDtcbiAgICB0aGlzLmFjY2Vzc1BvbGljaWVzID0gcHJvcHMuYWNjZXNzUG9saWNpZXM7XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBDZm5BY2Nlc3NFbnRyeSh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBjbHVzdGVyTmFtZTogdGhpcy5jbHVzdGVyLmNsdXN0ZXJOYW1lLFxuICAgICAgcHJpbmNpcGFsQXJuOiB0aGlzLnByaW5jaXBhbCxcbiAgICAgIHR5cGU6IHByb3BzLmFjY2Vzc0VudHJ5VHlwZSxcbiAgICAgIGFjY2Vzc1BvbGljaWVzOiBMYXp5LmFueSh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMuYWNjZXNzUG9saWNpZXMubWFwKHAgPT4gKHtcbiAgICAgICAgICBhY2Nlc3NTY29wZToge1xuICAgICAgICAgICAgdHlwZTogcC5hY2Nlc3NTY29wZS50eXBlLFxuICAgICAgICAgICAgbmFtZXNwYWNlczogcC5hY2Nlc3NTY29wZS5uYW1lc3BhY2VzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcG9saWN5QXJuOiBwLnBvbGljeSxcbiAgICAgICAgfSkpLFxuICAgICAgfSksXG4gICAgfSk7XG4gICAgdGhpcy5hY2Nlc3NFbnRyeU5hbWUgPSB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZShyZXNvdXJjZS5yZWYpO1xuICAgIHRoaXMuYWNjZXNzRW50cnlBcm4gPSB0aGlzLmdldFJlc291cmNlQXJuQXR0cmlidXRlKHJlc291cmNlLmF0dHJBY2Nlc3NFbnRyeUFybiwge1xuICAgICAgc2VydmljZTogJ2VrcycsXG4gICAgICByZXNvdXJjZTogJ2FjY2Vzc2VudHJ5JyxcbiAgICAgIHJlc291cmNlTmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCB0aGUgYWNjZXNzIHBvbGljaWVzIGZvciB0aGlzIGVudHJ5LlxuICAgKiBAcGFyYW0gbmV3QWNjZXNzUG9saWNpZXMgLSBUaGUgbmV3IGFjY2VzcyBwb2xpY2llcyB0byBhZGQuXG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkQWNjZXNzUG9saWNpZXMobmV3QWNjZXNzUG9saWNpZXM6IElBY2Nlc3NQb2xpY3lbXSk6IHZvaWQge1xuICAgIC8vIGFkZCBuZXdBY2Nlc3NQb2xpY2llcyB0byB0aGlzLmFjY2Vzc1BvbGljaWVzXG4gICAgdGhpcy5hY2Nlc3NQb2xpY2llcy5wdXNoKC4uLm5ld0FjY2Vzc1BvbGljaWVzKTtcbiAgfVxufVxuIl19