Socket
Socket
Sign inDemoInstall

@aws-cdk/cdk

Package Overview
Dependencies
Maintainers
4
Versions
42
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@aws-cdk/cdk - npm Package Compare versions

Comparing version 0.9.1 to 0.9.2

71

lib/cloudformation/arn.d.ts

@@ -6,23 +6,56 @@ import { Token } from '..';

*/
export declare class Arn extends Token {
export declare class ArnUtils {
/**
* Creates an ARN from components.
* If any component is the empty string,
* an empty string will be inserted into the generated ARN
* at the location that component corresponds to.
*
* If `partition`, `region` or `account` are not specified, the stack's
* partition, region and account will be used.
*
* If any component is the empty string, an empty string will be inserted
* into the generated ARN at the location that component corresponds to.
*
* The ARN will be formatted as follows:
*
* arn:{partition}:{service}:{region}:{account}:{resource}{sep}}{resource-name}
*
*/
static fromComponents(components: ArnComponents): Arn;
static fromComponents(components: ArnComponents): string;
/**
* Given an ARN, parses it and returns components.
*
* The ARN it will be parsed and validated. The separator (`sep`) will be
* set to '/' if the 6th component includes a '/', in which case, `resource`
* will be set to the value before the '/' and `resourceName` will be the
* rest. In case there is no '/', `resource` will be set to the 6th
* components and `resourceName` will be set to the rest of the string.
* If the ARN is a concrete string, it will be parsed and validated. The
* separator (`sep`) will be set to '/' if the 6th component includes a '/',
* in which case, `resource` will be set to the value before the '/' and
* `resourceName` will be the rest. In case there is no '/', `resource` will
* be set to the 6th components and `resourceName` will be set to the rest
* of the string.
*
* If the ARN includes tokens (or is a token), the ARN cannot be validated,
* since we don't have the actual value yet at the time of this function
* call. You will have to know the separator and the type of ARN. The
* resulting `ArnComponents` object will contain tokens for the
* subexpressions of the ARN, not string literals. In this case this
* function cannot properly parse the complete final resourceName (path) out
* of ARNs that use '/' to both separate the 'resource' from the
* 'resourceName' AND to subdivide the resourceName further. For example, in
* S3 ARNs:
*
* arn:aws:s3:::my_corporate_bucket/path/to/exampleobject.png
*
* After parsing the resourceName will not contain
* 'path/to/exampleobject.png' but simply 'path'. This is a limitation
* because there is no slicing functionality in CloudFormation templates.
*
* @param sep The separator used to separate resource from resourceName
* @param hasName Whether there is a name component in the ARN at all. For
* example, SNS Topics ARNs have the 'resource' component contain the topic
* name, and no 'resourceName' component.
*
* @returns an ArnComponents object which allows access to the various
* components of the ARN.
*
* @returns an ArnComponents object which allows access to the various
* components of the ARN.
*/
static parse(arn: string): ArnComponents;
static parse(arn: string, sepIfToken?: string, hasName?: boolean): ArnComponents;
/**

@@ -61,7 +94,7 @@ * Given a Token evaluating to ARN, parses it and returns components.

*/
resourceComponent(sep?: string): Token;
static resourceComponent(arn: string, sep?: string): string;
/**
* Return a Token that represents the resource Name component of the ARN
*/
resourceNameComponent(sep?: string): Token;
static resourceNameComponent(arn: string, sep?: string): string;
}

@@ -77,3 +110,3 @@ export interface ArnComponents {

*/
partition?: any;
partition?: string;
/**

@@ -83,3 +116,3 @@ * The service namespace that identifies the AWS product (for example,

*/
service: any;
service: string;
/**

@@ -91,3 +124,3 @@ * The region the resource resides in. Note that the ARNs for some resources

*/
region?: any;
region?: string;
/**

@@ -100,3 +133,3 @@ * The ID of the AWS account that owns the resource, without the hyphens.

*/
account?: any;
account?: string;
/**

@@ -106,3 +139,3 @@ * Resource type (e.g. "table", "autoScalingGroup", "certificate").

*/
resource: any;
resource: string;
/**

@@ -119,3 +152,3 @@ * Separator between resource type and the resource.

*/
resourceName?: any;
resourceName?: string;
}

@@ -5,2 +5,4 @@ "use strict";

const fn_1 = require("../cloudformation/fn");
const tokens_1 = require("../core/tokens");
const cloudformation_token_1 = require("./cloudformation-token");
/**

@@ -10,8 +12,16 @@ * An Amazon Resource Name (ARN).

*/
class Arn extends __1.Token {
class ArnUtils {
/**
* Creates an ARN from components.
* If any component is the empty string,
* an empty string will be inserted into the generated ARN
* at the location that component corresponds to.
*
* If `partition`, `region` or `account` are not specified, the stack's
* partition, region and account will be used.
*
* If any component is the empty string, an empty string will be inserted
* into the generated ARN at the location that component corresponds to.
*
* The ARN will be formatted as follows:
*
* arn:{partition}:{service}:{region}:{account}:{resource}{sep}}{resource-name}
*
*/

@@ -37,3 +47,3 @@ static fromComponents(components) {

}
return new Arn(new __1.FnConcat(...values));
return new __1.FnConcat(...values).toString();
}

@@ -43,12 +53,40 @@ /**

*
* The ARN it will be parsed and validated. The separator (`sep`) will be
* set to '/' if the 6th component includes a '/', in which case, `resource`
* will be set to the value before the '/' and `resourceName` will be the
* rest. In case there is no '/', `resource` will be set to the 6th
* components and `resourceName` will be set to the rest of the string.
* If the ARN is a concrete string, it will be parsed and validated. The
* separator (`sep`) will be set to '/' if the 6th component includes a '/',
* in which case, `resource` will be set to the value before the '/' and
* `resourceName` will be the rest. In case there is no '/', `resource` will
* be set to the 6th components and `resourceName` will be set to the rest
* of the string.
*
* If the ARN includes tokens (or is a token), the ARN cannot be validated,
* since we don't have the actual value yet at the time of this function
* call. You will have to know the separator and the type of ARN. The
* resulting `ArnComponents` object will contain tokens for the
* subexpressions of the ARN, not string literals. In this case this
* function cannot properly parse the complete final resourceName (path) out
* of ARNs that use '/' to both separate the 'resource' from the
* 'resourceName' AND to subdivide the resourceName further. For example, in
* S3 ARNs:
*
* arn:aws:s3:::my_corporate_bucket/path/to/exampleobject.png
*
* After parsing the resourceName will not contain
* 'path/to/exampleobject.png' but simply 'path'. This is a limitation
* because there is no slicing functionality in CloudFormation templates.
*
* @param sep The separator used to separate resource from resourceName
* @param hasName Whether there is a name component in the ARN at all. For
* example, SNS Topics ARNs have the 'resource' component contain the topic
* name, and no 'resourceName' component.
*
* @returns an ArnComponents object which allows access to the various
* components of the ARN.
*
* @returns an ArnComponents object which allows access to the various
* components of the ARN.
*/
static parse(arn) {
static parse(arn, sepIfToken = '/', hasName = true) {
if (tokens_1.unresolved(arn)) {
return ArnUtils.parseToken(new cloudformation_token_1.CloudFormationToken(arn), sepIfToken, hasName);
}
const components = arn.split(':');

@@ -150,9 +188,9 @@ if (components.length < 6) {

const components = new fn_1.FnSplit(':', arn);
const partition = new fn_1.FnSelect(1, components);
const service = new fn_1.FnSelect(2, components);
const region = new fn_1.FnSelect(3, components);
const account = new fn_1.FnSelect(4, components);
const partition = new fn_1.FnSelect(1, components).toString();
const service = new fn_1.FnSelect(2, components).toString();
const region = new fn_1.FnSelect(3, components).toString();
const account = new fn_1.FnSelect(4, components).toString();
if (sep === ':') {
const resource = new fn_1.FnSelect(5, components);
const resourceName = hasName ? new fn_1.FnSelect(6, components) : undefined;
const resource = new fn_1.FnSelect(5, components).toString();
const resourceName = hasName ? new fn_1.FnSelect(6, components).toString() : undefined;
return { partition, service, region, account, resource, resourceName, sep };

@@ -162,4 +200,4 @@ }

const lastComponents = new fn_1.FnSplit(sep, new fn_1.FnSelect(5, components));
const resource = new fn_1.FnSelect(0, lastComponents);
const resourceName = hasName ? new fn_1.FnSelect(1, lastComponents) : undefined;
const resource = new fn_1.FnSelect(0, lastComponents).toString();
const resourceName = hasName ? new fn_1.FnSelect(1, lastComponents).toString() : undefined;
return { partition, service, region, account, resource, resourceName, sep };

@@ -171,4 +209,4 @@ }

*/
resourceComponent(sep = '/') {
return Arn.parseToken(this, sep).resource;
static resourceComponent(arn, sep = '/') {
return ArnUtils.parseToken(new __1.Token(arn), sep).resource;
}

@@ -178,7 +216,7 @@ /**

*/
resourceNameComponent(sep = '/') {
return Arn.parseToken(this, sep, true).resourceName;
static resourceNameComponent(arn, sep = '/') {
return ArnUtils.parseToken(new __1.Token(arn), sep, true).resourceName;
}
}
exports.Arn = Arn;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXJuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMEJBQTRFO0FBQzVFLDZDQUF5RDtBQUV6RDs7O0dBR0c7QUFDSCxNQUFhLEdBQUksU0FBUSxTQUFLO0lBQzFCOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUF5QjtRQUNsRCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxJQUFJLElBQUk7WUFDMUMsQ0FBQyxDQUFDLElBQUksZ0JBQVksRUFBRTtZQUNwQixDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUMzQixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxJQUFJLElBQUk7WUFDcEMsQ0FBQyxDQUFDLElBQUksYUFBUyxFQUFFO1lBQ2pCLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ3hCLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLElBQUksSUFBSTtZQUN0QyxDQUFDLENBQUMsSUFBSSxnQkFBWSxFQUFFO1lBQ3BCLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBRXpCLE1BQU0sTUFBTSxHQUFHLENBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFFLENBQUM7UUFFdkgsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDbEMsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLEVBQUU7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1NBQzdEO1FBRUQsSUFBSSxVQUFVLENBQUMsWUFBWSxJQUFJLElBQUksRUFBRTtZQUNqQyxN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LENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ2pELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxhQUFRLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFFM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDO1NBQy9FO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksaUJBQWlCLENBQUMsTUFBYyxHQUFHO1FBQ3RDLE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQzlDLENBQUM7SUFFRDs7T0FFRztJQUNJLHFCQUFxQixDQUFDLE1BQWMsR0FBRztRQUMxQyxPQUFPLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxZQUFhLENBQUM7SUFDekQsQ0FBQztDQUNKO0FBaE1ELGtCQWdNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF3c0FjY291bnRJZCwgQXdzUGFydGl0aW9uLCBBd3NSZWdpb24sIEZuQ29uY2F0LCBUb2tlbiB9IGZyb20gJy4uJztcbmltcG9ydCB7IEZuU2VsZWN0LCBGblNwbGl0IH0gZnJvbSAnLi4vY2xvdWRmb3JtYXRpb24vZm4nO1xuXG4vKipcbiAqIEFuIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pLlxuICogaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2VuZXJhbC9sYXRlc3QvZ3IvYXdzLWFybnMtYW5kLW5hbWVzcGFjZXMuaHRtbFxuICovXG5leHBvcnQgY2xhc3MgQXJuIGV4dGVuZHMgVG9rZW4ge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gQVJOIGZyb20gY29tcG9uZW50cy5cbiAgICAgKiBJZiBhbnkgY29tcG9uZW50IGlzIHRoZSBlbXB0eSBzdHJpbmcsXG4gICAgICogYW4gZW1wdHkgc3RyaW5nIHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0aGUgZ2VuZXJhdGVkIEFSTlxuICAgICAqIGF0IHRoZSBsb2NhdGlvbiB0aGF0IGNvbXBvbmVudCBjb3JyZXNwb25kcyB0by5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21Db21wb25lbnRzKGNvbXBvbmVudHM6IEFybkNvbXBvbmVudHMpIHtcbiAgICAgICAgY29uc3QgcGFydGl0aW9uID0gY29tcG9uZW50cy5wYXJ0aXRpb24gPT0gbnVsbFxuICAgICAgICAgICAgPyBuZXcgQXdzUGFydGl0aW9uKClcbiAgICAgICAgICAgIDogY29tcG9uZW50cy5wYXJ0aXRpb247XG4gICAgICAgIGNvbnN0IHJlZ2lvbiA9IGNvbXBvbmVudHMucmVnaW9uID09IG51bGxcbiAgICAgICAgICAgID8gbmV3IEF3c1JlZ2lvbigpXG4gICAgICAgICAgICA6IGNvbXBvbmVudHMucmVnaW9uO1xuICAgICAgICBjb25zdCBhY2NvdW50ID0gY29tcG9uZW50cy5hY2NvdW50ID09IG51bGxcbiAgICAgICAgICAgID8gbmV3IEF3c0FjY291bnRJZCgpXG4gICAgICAgICAgICA6IGNvbXBvbmVudHMuYWNjb3VudDtcblxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbICdhcm4nLCAnOicsIHBhcnRpdGlvbiwgJzonLCBjb21wb25lbnRzLnNlcnZpY2UsICc6JywgcmVnaW9uLCAnOicsIGFjY291bnQsICc6JywgY29tcG9uZW50cy5yZXNvdXJjZSBdO1xuXG4gICAgICAgIGNvbnN0IHNlcCA9IGNvbXBvbmVudHMuc2VwIHx8ICcvJztcbiAgICAgICAgaWYgKHNlcCAhPT0gJy8nICYmIHNlcCAhPT0gJzonKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc291cmNlUGF0aFNlcCBtYXkgb25seSBiZSBcIjpcIiBvciBcIi9cIicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBvbmVudHMucmVzb3VyY2VOYW1lICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHNlcCk7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChjb21wb25lbnRzLnJlc291cmNlTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEFybihuZXcgRm5Db25jYXQoLi4udmFsdWVzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYW4gQVJOLCBwYXJzZXMgaXQgYW5kIHJldHVybnMgY29tcG9uZW50cy5cbiAgICAgKlxuICAgICAqIFRoZSBBUk4gaXQgd2lsbCBiZSBwYXJzZWQgYW5kIHZhbGlkYXRlZC4gVGhlIHNlcGFyYXRvciAoYHNlcGApIHdpbGwgYmVcbiAgICAgKiBzZXQgdG8gJy8nIGlmIHRoZSA2dGggY29tcG9uZW50IGluY2x1ZGVzIGEgJy8nLCBpbiB3aGljaCBjYXNlLCBgcmVzb3VyY2VgXG4gICAgICogd2lsbCBiZSBzZXQgdG8gdGhlIHZhbHVlIGJlZm9yZSB0aGUgJy8nIGFuZCBgcmVzb3VyY2VOYW1lYCB3aWxsIGJlIHRoZVxuICAgICAqIHJlc3QuIEluIGNhc2UgdGhlcmUgaXMgbm8gJy8nLCBgcmVzb3VyY2VgIHdpbGwgYmUgc2V0IHRvIHRoZSA2dGhcbiAgICAgKiBjb21wb25lbnRzIGFuZCBgcmVzb3VyY2VOYW1lYCB3aWxsIGJlIHNldCB0byB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHJldHVybnMgYW4gQXJuQ29tcG9uZW50cyBvYmplY3Qgd2hpY2ggYWxsb3dzIGFjY2VzcyB0byB0aGUgdmFyaW91c1xuICAgICAqICAgICAgICAgIGNvbXBvbmVudHMgb2YgdGhlIEFSTi5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHBhcnNlKGFybjogc3RyaW5nKTogQXJuQ29tcG9uZW50cyB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBhcm4uc3BsaXQoJzonKSBhcyBBcnJheTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuXG4gICAgICAgIGlmIChjb21wb25lbnRzLmxlbmd0aCA8IDYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQVJOcyBtdXN0IGhhdmUgYXQgbGVhc3QgNiBjb21wb25lbnRzOiAnICsgYXJuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IFsgYXJuUHJlZml4LCBwYXJ0aXRpb24sIHNlcnZpY2UsIHJlZ2lvbiwgYWNjb3VudCwgc2l4dGgsIC4uLnJlc3QgXSA9IGNvbXBvbmVudHM7XG5cbiAgICAgICAgaWYgKGFyblByZWZpeCAhPT0gJ2FybicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQVJOcyBtdXN0IHN0YXJ0IHdpdGggXCJhcm46XCI6ICcgKyBhcm4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgc2VydmljZWAgY29tcG9uZW50ICgzcmQgY29tcG9uZW50KSBpcyByZXF1aXJlZDogJyArIGFybik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNpeHRoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgcmVzb3VyY2VgIGNvbXBvbmVudCAoNnRoIGNvbXBvbmVudCkgaXMgcmVxdWlyZWQ6ICcgKyBhcm4pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc291cmNlOiBzdHJpbmc7XG4gICAgICAgIGxldCByZXNvdXJjZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHNlcDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBzZXBJbmRleCA9IHNpeHRoLmluZGV4T2YoJy8nKTtcbiAgICAgICAgaWYgKHNlcEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgc2VwID0gJy8nO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2VwID0gJzonO1xuICAgICAgICAgICAgc2VwSW5kZXggPSAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZXBJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gc2l4dGguc3Vic3RyKDAsIHNlcEluZGV4KTtcbiAgICAgICAgICAgIHJlc291cmNlTmFtZSA9IHNpeHRoLnN1YnN0cihzZXBJbmRleCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSBzaXh0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmICghcmVzb3VyY2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lID0gJyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc291cmNlTmFtZSArPSAnOic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc291cmNlTmFtZSArPSByZXN0LmpvaW4oJzonKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdDogQXJuQ29tcG9uZW50cyA9IHsgc2VydmljZSwgcmVzb3VyY2UgfTtcbiAgICAgICAgaWYgKHBhcnRpdGlvbikge1xuICAgICAgICAgICAgcmVzdWx0LnBhcnRpdGlvbiA9IHBhcnRpdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZWdpb24pIHtcbiAgICAgICAgICAgIHJlc3VsdC5yZWdpb24gPSByZWdpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWNjb3VudCkge1xuICAgICAgICAgICAgcmVzdWx0LmFjY291bnQgPSBhY2NvdW50O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc291cmNlTmFtZSkge1xuICAgICAgICAgICAgcmVzdWx0LnJlc291cmNlTmFtZSA9IHJlc291cmNlTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZXApIHtcbiAgICAgICAgICAgIHJlc3VsdC5zZXAgPSBzZXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgVG9rZW4gZXZhbHVhdGluZyB0byBBUk4sIHBhcnNlcyBpdCBhbmQgcmV0dXJucyBjb21wb25lbnRzLlxuICAgICAqXG4gICAgICogVGhlIEFSTiBjYW5ub3QgYmUgdmFsaWRhdGVkLCBzaW5jZSB3ZSBkb24ndCBoYXZlIHRoZSBhY3R1YWwgdmFsdWUgeWV0XG4gICAgICogYXQgdGhlIHRpbWUgb2YgdGhpcyBmdW5jdGlvbiBjYWxsLiBZb3Ugd2lsbCBoYXZlIHRvIGtub3cgdGhlIHNlcGFyYXRvclxuICAgICAqIGFuZCB0aGUgdHlwZSBvZiBBUk4uXG4gICAgICpcbiAgICAgKiBUaGUgcmVzdWx0aW5nIGBBcm5Db21wb25lbnRzYCBvYmplY3Qgd2lsbCBjb250YWluIHRva2VucyBmb3IgdGhlXG4gICAgICogc3ViZXhwcmVzc2lvbnMgb2YgdGhlIEFSTiwgbm90IHN0cmluZyBsaXRlcmFscy5cbiAgICAgKlxuICAgICAqIFdBUk5JTkc6IHRoaXMgZnVuY3Rpb24gY2Fubm90IHByb3Blcmx5IHBhcnNlIHRoZSBjb21wbGV0ZSBmaW5hbFxuICAgICAqIHJlc291cmNlTmFtZSAocGF0aCkgb3V0IG9mIEFSTnMgdGhhdCB1c2UgJy8nIHRvIGJvdGggc2VwYXJhdGUgdGhlXG4gICAgICogJ3Jlc291cmNlJyBmcm9tIHRoZSAncmVzb3VyY2VOYW1lJyBBTkQgdG8gc3ViZGl2aWRlIHRoZSByZXNvdXJjZU5hbWVcbiAgICAgKiBmdXJ0aGVyLiBGb3IgZXhhbXBsZSwgaW4gUzMgQVJOczpcbiAgICAgKlxuICAgICAqICAgICAgYXJuOmF3czpzMzo6Om15X2NvcnBvcmF0ZV9idWNrZXQvcGF0aC90by9leGFtcGxlb2JqZWN0LnBuZ1xuICAgICAqXG4gICAgICogQWZ0ZXIgcGFyc2luZyB0aGUgcmVzb3VyY2VOYW1lIHdpbGwgbm90IGNvbnRhaW4gJ3BhdGgvdG8vZXhhbXBsZW9iamVjdC5wbmcnXG4gICAgICogYnV0IHNpbXBseSAncGF0aCcuIFRoaXMgaXMgYSBsaW1pdGF0aW9uIGJlY2F1c2UgdGhlcmUgaXMgbm8gc2xpY2luZ1xuICAgICAqIGZ1bmN0aW9uYWxpdHkgaW4gQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFybiBUaGUgaW5wdXQgdG9rZW4gdGhhdCBjb250YWlucyBhbiBBUk5cbiAgICAgKiBAcGFyYW0gc2VwIFRoZSBzZXBhcmF0b3IgdXNlZCB0byBzZXBhcmF0ZSByZXNvdXJjZSBmcm9tIHJlc291cmNlTmFtZVxuICAgICAqIEBwYXJhbSBoYXNOYW1lIFdoZXRoZXIgdGhlcmUgaXMgYSBuYW1lIGNvbXBvbmVudCBpbiB0aGUgQVJOIGF0IGFsbC5cbiAgICAgKiBGb3IgZXhhbXBsZSwgU05TIFRvcGljcyBBUk5zIGhhdmUgdGhlICdyZXNvdXJjZScgY29tcG9uZW50IGNvbnRhaW4gdGhlXG4gICAgICogdG9waWMgbmFtZSwgYW5kIG5vICdyZXNvdXJjZU5hbWUnIGNvbXBvbmVudC5cbiAgICAgKiBAcmV0dXJucyBhbiBBcm5Db21wb25lbnRzIG9iamVjdCB3aGljaCBhbGxvd3MgYWNjZXNzIHRvIHRoZSB2YXJpb3VzXG4gICAgICogY29tcG9uZW50cyBvZiB0aGUgQVJOLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcGFyc2VUb2tlbihhcm46IFRva2VuLCBzZXA6IHN0cmluZyA9ICcvJywgaGFzTmFtZTogYm9vbGVhbiA9IHRydWUpOiBBcm5Db21wb25lbnRzIHtcbiAgICAgICAgLy8gQXJuIEFSTiBsb29rcyBsaWtlOlxuICAgICAgICAvLyBhcm46cGFydGl0aW9uOnNlcnZpY2U6cmVnaW9uOmFjY291bnQtaWQ6cmVzb3VyY2VcbiAgICAgICAgLy8gYXJuOnBhcnRpdGlvbjpzZXJ2aWNlOnJlZ2lvbjphY2NvdW50LWlkOnJlc291cmNldHlwZS9yZXNvdXJjZVxuICAgICAgICAvLyBhcm46cGFydGl0aW9uOnNlcnZpY2U6cmVnaW9uOmFjY291bnQtaWQ6cmVzb3VyY2V0eXBlOnJlc291cmNlXG5cbiAgICAgICAgLy8gV2UgbmVlZCB0aGUgJ2hhc05hbWUnIGFyZ3VtZW50IGJlY2F1c2Uge0ZuOjpTZWxlY3R9aW5nIGEgbm9uZXhpc3RlbnQgZmllbGRcbiAgICAgICAgLy8gdGhyb3dzIGFuIGVycm9yLlxuXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBuZXcgRm5TcGxpdCgnOicsIGFybik7XG5cbiAgICAgICAgY29uc3QgcGFydGl0aW9uID0gbmV3IEZuU2VsZWN0KDEsIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlID0gbmV3IEZuU2VsZWN0KDIsIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCByZWdpb24gPSBuZXcgRm5TZWxlY3QoMywgY29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IGFjY291bnQgPSBuZXcgRm5TZWxlY3QoNCwgY29tcG9uZW50cyk7XG5cbiAgICAgICAgaWYgKHNlcCA9PT0gJzonKSB7XG4gICAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBGblNlbGVjdCg1LCBjb21wb25lbnRzKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IGhhc05hbWUgPyBuZXcgRm5TZWxlY3QoNiwgY29tcG9uZW50cykgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIHJldHVybiB7IHBhcnRpdGlvbiwgc2VydmljZSwgcmVnaW9uLCBhY2NvdW50LCByZXNvdXJjZSwgcmVzb3VyY2VOYW1lLCBzZXAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RDb21wb25lbnRzID0gbmV3IEZuU3BsaXQoc2VwLCBuZXcgRm5TZWxlY3QoNSwgY29tcG9uZW50cykpO1xuXG4gICAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBGblNlbGVjdCgwLCBsYXN0Q29tcG9uZW50cyk7XG4gICAgICAgICAgICBjb25zdCByZXNvdXJjZU5hbWUgPSBoYXNOYW1lID8gbmV3IEZuU2VsZWN0KDEsIGxhc3RDb21wb25lbnRzKSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgcmV0dXJuIHsgcGFydGl0aW9uLCBzZXJ2aWNlLCByZWdpb24sIGFjY291bnQsIHJlc291cmNlLCByZXNvdXJjZU5hbWUsIHNlcCB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgVG9rZW4gdGhhdCByZXByZXNlbnRzIHRoZSByZXNvdXJjZSBjb21wb25lbnQgb2YgdGhlIEFSTlxuICAgICAqL1xuICAgIHB1YmxpYyByZXNvdXJjZUNvbXBvbmVudChzZXA6IHN0cmluZyA9ICcvJyk6IFRva2VuIHtcbiAgICAgICAgcmV0dXJuIEFybi5wYXJzZVRva2VuKHRoaXMsIHNlcCkucmVzb3VyY2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgVG9rZW4gdGhhdCByZXByZXNlbnRzIHRoZSByZXNvdXJjZSBOYW1lIGNvbXBvbmVudCBvZiB0aGUgQVJOXG4gICAgICovXG4gICAgcHVibGljIHJlc291cmNlTmFtZUNvbXBvbmVudChzZXA6IHN0cmluZyA9ICcvJyk6IFRva2VuIHtcbiAgICAgICAgcmV0dXJuIEFybi5wYXJzZVRva2VuKHRoaXMsIHNlcCwgdHJ1ZSkucmVzb3VyY2VOYW1lITtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXJuQ29tcG9uZW50cyB7XG4gICAgLyoqXG4gICAgICogVGhlIHBhcnRpdGlvbiB0aGF0IHRoZSByZXNvdXJjZSBpcyBpbi4gRm9yIHN0YW5kYXJkIEFXUyByZWdpb25zLCB0aGVcbiAgICAgKiBwYXJ0aXRpb24gaXMgYXdzLiBJZiB5b3UgaGF2ZSByZXNvdXJjZXMgaW4gb3RoZXIgcGFydGl0aW9ucywgdGhlXG4gICAgICogcGFydGl0aW9uIGlzIGF3cy1wYXJ0aXRpb25uYW1lLiBGb3IgZXhhbXBsZSwgdGhlIHBhcnRpdGlvbiBmb3IgcmVzb3VyY2VzXG4gICAgICogaW4gdGhlIENoaW5hIChCZWlqaW5nKSByZWdpb24gaXMgYXdzLWNuLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgVGhlIEFXUyBwYXJ0aXRpb24gdGhlIHN0YWNrIGlzIGRlcGxveWVkIHRvLlxuICAgICAqL1xuICAgIHBhcnRpdGlvbj86IGFueTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzZXJ2aWNlIG5hbWVzcGFjZSB0aGF0IGlkZW50aWZpZXMgdGhlIEFXUyBwcm9kdWN0IChmb3IgZXhhbXBsZSxcbiAgICAgKiAnczMnLCAnaWFtJywgJ2NvZGVwaXBsaW5lJykuXG4gICAgICovXG4gICAgc2VydmljZTogYW55O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlZ2lvbiB0aGUgcmVzb3VyY2UgcmVzaWRlcyBpbi4gTm90ZSB0aGF0IHRoZSBBUk5zIGZvciBzb21lIHJlc291cmNlc1xuICAgICAqIGRvIG5vdCByZXF1aXJlIGEgcmVnaW9uLCBzbyB0aGlzIGNvbXBvbmVudCBtaWdodCBiZSBvbWl0dGVkLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgVGhlIHJlZ2lvbiB0aGUgc3RhY2sgaXMgZGVwbG95ZWQgdG8uXG4gICAgICovXG4gICAgcmVnaW9uPzogYW55O1xuXG4gICAgLyoqXG4gICAgICogVGhlIElEIG9mIHRoZSBBV1MgYWNjb3VudCB0aGF0IG93bnMgdGhlIHJlc291cmNlLCB3aXRob3V0IHRoZSBoeXBoZW5zLlxuICAgICAqIEZvciBleGFtcGxlLCAxMjM0NTY3ODkwMTIuIE5vdGUgdGhhdCB0aGUgQVJOcyBmb3Igc29tZSByZXNvdXJjZXMgZG9uJ3RcbiAgICAgKiByZXF1aXJlIGFuIGFjY291bnQgbnVtYmVyLCBzbyB0aGlzIGNvbXBvbmVudCBtaWdodCBiZSBvbWl0dGVkLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgVGhlIGFjY291bnQgdGhlIHN0YWNrIGlzIGRlcGxveWVkIHRvLlxuICAgICAqL1xuICAgIGFjY291bnQ/OiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBSZXNvdXJjZSB0eXBlIChlLmcuIFwidGFibGVcIiwgXCJhdXRvU2NhbGluZ0dyb3VwXCIsIFwiY2VydGlmaWNhdGVcIikuXG4gICAgICogRm9yIHNvbWUgcmVzb3VyY2UgdHlwZXMsIGUuZy4gUzMgYnVja2V0cywgdGhpcyBmaWVsZCBkZWZpbmVzIHRoZSBidWNrZXQgbmFtZS5cbiAgICAgKi9cbiAgICByZXNvdXJjZTogYW55O1xuXG4gICAgLyoqXG4gICAgICogU2VwYXJhdG9yIGJldHdlZW4gcmVzb3VyY2UgdHlwZSBhbmQgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQ2FuIGJlIGVpdGhlciAnLycgb3IgJzonLiBXaWxsIG9ubHkgYmUgdXNlZCBpZiBwYXRoIGlzIGRlZmluZWQuXG4gICAgICogQGRlZmF1bHQgJy8nXG4gICAgICovXG4gICAgc2VwPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogUmVzb3VyY2UgbmFtZSBvciBwYXRoIHdpdGhpbiB0aGUgcmVzb3VyY2UgKGkuZS4gUzMgYnVja2V0IG9iamVjdCBrZXkpIG9yXG4gICAgICogYSB3aWxkY2FyZCBzdWNoIGFzIGBgXCIqXCJgYC4gVGhpcyBpcyBzZXJ2aWNlLWRlcGVuZGVudC5cbiAgICAgKi9cbiAgICByZXNvdXJjZU5hbWU/OiBhbnk7XG59XG4iXX0=
exports.ArnUtils = ArnUtils;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXJuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMEJBQTRFO0FBQzVFLDZDQUF5RDtBQUN6RCwyQ0FBNEM7QUFDNUMsaUVBQTZEO0FBRTdEOzs7R0FHRztBQUNILE1BQWEsUUFBUTtJQUNqQjs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUF5QjtRQUNsRCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxJQUFJLElBQUk7WUFDMUMsQ0FBQyxDQUFDLElBQUksZ0JBQVksRUFBRTtZQUNwQixDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUMzQixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxJQUFJLElBQUk7WUFDcEMsQ0FBQyxDQUFDLElBQUksYUFBUyxFQUFFO1lBQ2pCLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ3hCLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLElBQUksSUFBSTtZQUN0QyxDQUFDLENBQUMsSUFBSSxnQkFBWSxFQUFFO1lBQ3BCLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBRXpCLE1BQU0sTUFBTSxHQUFHLENBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFFLENBQUM7UUFFdkgsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDbEMsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLEVBQUU7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1NBQzdEO1FBRUQsSUFBSSxVQUFVLENBQUMsWUFB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cU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXdzQWNjb3VudElkLCBBd3NQYXJ0aXRpb24sIEF3c1JlZ2lvbiwgRm5Db25jYXQsIFRva2VuIH0gZnJvbSAnLi4nO1xuaW1wb3J0IHsgRm5TZWxlY3QsIEZuU3BsaXQgfSBmcm9tICcuLi9jbG91ZGZvcm1hdGlvbi9mbic7XG5pbXBvcnQgeyB1bnJlc29sdmVkIH0gZnJvbSAnLi4vY29yZS90b2tlbnMnO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25Ub2tlbiB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24tdG9rZW4nO1xuXG4vKipcbiAqIEFuIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pLlxuICogaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2VuZXJhbC9sYXRlc3QvZ3IvYXdzLWFybnMtYW5kLW5hbWVzcGFjZXMuaHRtbFxuICovXG5leHBvcnQgY2xhc3MgQXJuVXRpbHMge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gQVJOIGZyb20gY29tcG9uZW50cy5cbiAgICAgKlxuICAgICAqIElmIGBwYXJ0aXRpb25gLCBgcmVnaW9uYCBvciBgYWNjb3VudGAgYXJlIG5vdCBzcGVjaWZpZWQsIHRoZSBzdGFjaydzXG4gICAgICogcGFydGl0aW9uLCByZWdpb24gYW5kIGFjY291bnQgd2lsbCBiZSB1c2VkLlxuICAgICAqXG4gICAgICogSWYgYW55IGNvbXBvbmVudCBpcyB0aGUgZW1wdHkgc3RyaW5nLCBhbiBlbXB0eSBzdHJpbmcgd2lsbCBiZSBpbnNlcnRlZFxuICAgICAqIGludG8gdGhlIGdlbmVyYXRlZCBBUk4gYXQgdGhlIGxvY2F0aW9uIHRoYXQgY29tcG9uZW50IGNvcnJlc3BvbmRzIHRvLlxuICAgICAqXG4gICAgICogVGhlIEFSTiB3aWxsIGJlIGZvcm1hdHRlZCBhcyBmb2xsb3dzOlxuICAgICAqXG4gICAgICogICAgIGFybjp7cGFydGl0aW9ufTp7c2VydmljZX06e3JlZ2lvbn06e2FjY291bnR9OntyZXNvdXJjZX17c2VwfX17cmVzb3VyY2UtbmFtZX1cbiAgICAgKlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUNvbXBvbmVudHMoY29tcG9uZW50czogQXJuQ29tcG9uZW50cyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHBhcnRpdGlvbiA9IGNvbXBvbmVudHMucGFydGl0aW9uID09IG51bGxcbiAgICAgICAgICAgID8gbmV3IEF3c1BhcnRpdGlvbigpXG4gICAgICAgICAgICA6IGNvbXBvbmVudHMucGFydGl0aW9uO1xuICAgICAgICBjb25zdCByZWdpb24gPSBjb21wb25lbnRzLnJlZ2lvbiA9PSBudWxsXG4gICAgICAgICAgICA/IG5ldyBBd3NSZWdpb24oKVxuICAgICAgICAgICAgOiBjb21wb25lbnRzLnJlZ2lvbjtcbiAgICAgICAgY29uc3QgYWNjb3VudCA9IGNvbXBvbmVudHMuYWNjb3VudCA9PSBudWxsXG4gICAgICAgICAgICA/IG5ldyBBd3NBY2NvdW50SWQoKVxuICAgICAgICAgICAgOiBjb21wb25lbnRzLmFjY291bnQ7XG5cbiAgICAgICAgY29uc3QgdmFsdWVzID0gWyAnYXJuJywgJzonLCBwYXJ0aXRpb24sICc6JywgY29tcG9uZW50cy5zZXJ2aWNlLCAnOicsIHJlZ2lvbiwgJzonLCBhY2NvdW50LCAnOicsIGNvbXBvbmVudHMucmVzb3VyY2UgXTtcblxuICAgICAgICBjb25zdCBzZXAgPSBjb21wb25lbnRzLnNlcCB8fCAnLyc7XG4gICAgICAgIGlmIChzZXAgIT09ICcvJyAmJiBzZXAgIT09ICc6Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvdXJjZVBhdGhTZXAgbWF5IG9ubHkgYmUgXCI6XCIgb3IgXCIvXCInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb21wb25lbnRzLnJlc291cmNlTmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChzZXApO1xuICAgICAgICAgICAgdmFsdWVzLnB1c2goY29tcG9uZW50cy5yZXNvdXJjZU5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBGbkNvbmNhdCguLi52YWx1ZXMpLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYW4gQVJOLCBwYXJzZXMgaXQgYW5kIHJldHVybnMgY29tcG9uZW50cy5cbiAgICAgKlxuICAgICAqIElmIHRoZSBBUk4gaXMgYSBjb25jcmV0ZSBzdHJpbmcsIGl0IHdpbGwgYmUgcGFyc2VkIGFuZCB2YWxpZGF0ZWQuIFRoZVxuICAgICAqIHNlcGFyYXRvciAoYHNlcGApIHdpbGwgYmUgc2V0IHRvICcvJyBpZiB0aGUgNnRoIGNvbXBvbmVudCBpbmNsdWRlcyBhICcvJyxcbiAgICAgKiBpbiB3aGljaCBjYXNlLCBgcmVzb3VyY2VgIHdpbGwgYmUgc2V0IHRvIHRoZSB2YWx1ZSBiZWZvcmUgdGhlICcvJyBhbmRcbiAgICAgKiBgcmVzb3VyY2VOYW1lYCB3aWxsIGJlIHRoZSByZXN0LiBJbiBjYXNlIHRoZXJlIGlzIG5vICcvJywgYHJlc291cmNlYCB3aWxsXG4gICAgICogYmUgc2V0IHRvIHRoZSA2dGggY29tcG9uZW50cyBhbmQgYHJlc291cmNlTmFtZWAgd2lsbCBiZSBzZXQgdG8gdGhlIHJlc3RcbiAgICAgKiBvZiB0aGUgc3RyaW5nLlxuICAgICAqXG4gICAgICogSWYgdGhlIEFSTiBpbmNsdWRlcyB0b2tlbnMgKG9yIGlzIGEgdG9rZW4pLCB0aGUgQVJOIGNhbm5vdCBiZSB2YWxpZGF0ZWQsXG4gICAgICogc2luY2Ugd2UgZG9uJ3QgaGF2ZSB0aGUgYWN0dWFsIHZhbHVlIHlldCBhdCB0aGUgdGltZSBvZiB0aGlzIGZ1bmN0aW9uXG4gICAgICogY2FsbC4gWW91IHdpbGwgaGF2ZSB0byBrbm93IHRoZSBzZXBhcmF0b3IgYW5kIHRoZSB0eXBlIG9mIEFSTi4gVGhlXG4gICAgICogcmVzdWx0aW5nIGBBcm5Db21wb25lbnRzYCBvYmplY3Qgd2lsbCBjb250YWluIHRva2VucyBmb3IgdGhlXG4gICAgICogc3ViZXhwcmVzc2lvbnMgb2YgdGhlIEFSTiwgbm90IHN0cmluZyBsaXRlcmFscy4gSW4gdGhpcyBjYXNlIHRoaXNcbiAgICAgKiBmdW5jdGlvbiBjYW5ub3QgcHJvcGVybHkgcGFyc2UgdGhlIGNvbXBsZXRlIGZpbmFsIHJlc291cmNlTmFtZSAocGF0aCkgb3V0XG4gICAgICogb2YgQVJOcyB0aGF0IHVzZSAnLycgdG8gYm90aCBzZXBhcmF0ZSB0aGUgJ3Jlc291cmNlJyBmcm9tIHRoZVxuICAgICAqICdyZXNvdXJjZU5hbWUnIEFORCB0byBzdWJkaXZpZGUgdGhlIHJlc291cmNlTmFtZSBmdXJ0aGVyLiBGb3IgZXhhbXBsZSwgaW5cbiAgICAgKiBTMyBBUk5zOlxuICAgICAqXG4gICAgICogICAgICBhcm46YXdzOnMzOjo6bXlfY29ycG9yYXRlX2J1Y2tldC9wYXRoL3RvL2V4YW1wbGVvYmplY3QucG5nXG4gICAgICpcbiAgICAgKiBBZnRlciBwYXJzaW5nIHRoZSByZXNvdXJjZU5hbWUgd2lsbCBub3QgY29udGFpblxuICAgICAqICdwYXRoL3RvL2V4YW1wbGVvYmplY3QucG5nJyBidXQgc2ltcGx5ICdwYXRoJy4gVGhpcyBpcyBhIGxpbWl0YXRpb25cbiAgICAgKiBiZWNhdXNlIHRoZXJlIGlzIG5vIHNsaWNpbmcgZnVuY3Rpb25hbGl0eSBpbiBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2VwIFRoZSBzZXBhcmF0b3IgdXNlZCB0byBzZXBhcmF0ZSByZXNvdXJjZSBmcm9tIHJlc291cmNlTmFtZVxuICAgICAqIEBwYXJhbSBoYXNOYW1lIFdoZXRoZXIgdGhlcmUgaXMgYSBuYW1lIGNvbXBvbmVudCBpbiB0aGUgQVJOIGF0IGFsbC4gRm9yXG4gICAgICogZXhhbXBsZSwgU05TIFRvcGljcyBBUk5zIGhhdmUgdGhlICdyZXNvdXJjZScgY29tcG9uZW50IGNvbnRhaW4gdGhlIHRvcGljXG4gICAgICogbmFtZSwgYW5kIG5vICdyZXNvdXJjZU5hbWUnIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGFuIEFybkNvbXBvbmVudHMgb2JqZWN0IHdoaWNoIGFsbG93cyBhY2Nlc3MgdG8gdGhlIHZhcmlvdXNcbiAgICAgKiBjb21wb25lbnRzIG9mIHRoZSBBUk4uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBhbiBBcm5Db21wb25lbnRzIG9iamVjdCB3aGljaCBhbGxvd3MgYWNjZXNzIHRvIHRoZSB2YXJpb3VzXG4gICAgICogICAgICAgICAgY29tcG9uZW50cyBvZiB0aGUgQVJOLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcGFyc2UoYXJuOiBzdHJpbmcsIHNlcElmVG9rZW46IHN0cmluZyA9ICcvJywgaGFzTmFtZTogYm9vbGVhbiA9IHRydWUpOiBBcm5Db21wb25lbnRzIHtcbiAgICAgICAgaWYgKHVucmVzb2x2ZWQoYXJuKSkge1xuICAgICAgICAgICAgcmV0dXJuIEFyblV0aWxzLnBhcnNlVG9rZW4obmV3IENsb3VkRm9ybWF0aW9uVG9rZW4oYXJuKSwgc2VwSWZUb2tlbiwgaGFzTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gYXJuLnNwbGl0KCc6JykgYXMgQXJyYXk8c3RyaW5nIHwgdW5kZWZpbmVkPjtcblxuICAgICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPCA2KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FSTnMgbXVzdCBoYXZlIGF0IGxlYXN0IDYgY29tcG9uZW50czogJyArIGFybik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbIGFyblByZWZpeCwgcGFydGl0aW9uLCBzZXJ2aWNlLCByZWdpb24sIGFjY291bnQsIHNpeHRoLCAuLi5yZXN0IF0gPSBjb21wb25lbnRzO1xuXG4gICAgICAgIGlmIChhcm5QcmVmaXggIT09ICdhcm4nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FSTnMgbXVzdCBzdGFydCB3aXRoIFwiYXJuOlwiOiAnICsgYXJuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc2VydmljZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYHNlcnZpY2VgIGNvbXBvbmVudCAoM3JkIGNvbXBvbmVudCkgaXMgcmVxdWlyZWQ6ICcgKyBhcm4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzaXh0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYHJlc291cmNlYCBjb21wb25lbnQgKDZ0aCBjb21wb25lbnQpIGlzIHJlcXVpcmVkOiAnICsgYXJuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNvdXJjZTogc3RyaW5nO1xuICAgICAgICBsZXQgcmVzb3VyY2VOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBzZXA6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgc2VwSW5kZXggPSBzaXh0aC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGlmIChzZXBJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHNlcCA9ICcvJztcbiAgICAgICAgfSBlbHNlIGlmIChyZXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNlcCA9ICc6JztcbiAgICAgICAgICAgIHNlcEluZGV4ID0gLTE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VwSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICByZXNvdXJjZSA9IHNpeHRoLnN1YnN0cigwLCBzZXBJbmRleCk7XG4gICAgICAgICAgICByZXNvdXJjZU5hbWUgPSBzaXh0aC5zdWJzdHIoc2VwSW5kZXggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlID0gc2l4dGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAoIXJlc291cmNlTmFtZSkge1xuICAgICAgICAgICAgICAgIHJlc291cmNlTmFtZSA9ICcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZU5hbWUgKz0gJzonO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXNvdXJjZU5hbWUgKz0gcmVzdC5qb2luKCc6Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQ6IEFybkNvbXBvbmVudHMgPSB7IHNlcnZpY2UsIHJlc291cmNlIH07XG4gICAgICAgIGlmIChwYXJ0aXRpb24pIHtcbiAgICAgICAgICAgIHJlc3VsdC5wYXJ0aXRpb24gPSBwYXJ0aXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVnaW9uKSB7XG4gICAgICAgICAgICByZXN1bHQucmVnaW9uID0gcmVnaW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjY291bnQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5hY2NvdW50ID0gYWNjb3VudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXNvdXJjZU5hbWUpIHtcbiAgICAgICAgICAgIHJlc3VsdC5yZXNvdXJjZU5hbWUgPSByZXNvdXJjZU5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VwKSB7XG4gICAgICAgICAgICByZXN1bHQuc2VwID0gc2VwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIFRva2VuIGV2YWx1YXRpbmcgdG8gQVJOLCBwYXJzZXMgaXQgYW5kIHJldHVybnMgY29tcG9uZW50cy5cbiAgICAgKlxuICAgICAqIFRoZSBBUk4gY2Fubm90IGJlIHZhbGlkYXRlZCwgc2luY2Ugd2UgZG9uJ3QgaGF2ZSB0aGUgYWN0dWFsIHZhbHVlIHlldFxuICAgICAqIGF0IHRoZSB0aW1lIG9mIHRoaXMgZnVuY3Rpb24gY2FsbC4gWW91IHdpbGwgaGF2ZSB0byBrbm93IHRoZSBzZXBhcmF0b3JcbiAgICAgKiBhbmQgdGhlIHR5cGUgb2YgQVJOLlxuICAgICAqXG4gICAgICogVGhlIHJlc3VsdGluZyBgQXJuQ29tcG9uZW50c2Agb2JqZWN0IHdpbGwgY29udGFpbiB0b2tlbnMgZm9yIHRoZVxuICAgICAqIHN1YmV4cHJlc3Npb25zIG9mIHRoZSBBUk4sIG5vdCBzdHJpbmcgbGl0ZXJhbHMuXG4gICAgICpcbiAgICAgKiBXQVJOSU5HOiB0aGlzIGZ1bmN0aW9uIGNhbm5vdCBwcm9wZXJseSBwYXJzZSB0aGUgY29tcGxldGUgZmluYWxcbiAgICAgKiByZXNvdXJjZU5hbWUgKHBhdGgpIG91dCBvZiBBUk5zIHRoYXQgdXNlICcvJyB0byBib3RoIHNlcGFyYXRlIHRoZVxuICAgICAqICdyZXNvdXJjZScgZnJvbSB0aGUgJ3Jlc291cmNlTmFtZScgQU5EIHRvIHN1YmRpdmlkZSB0aGUgcmVzb3VyY2VOYW1lXG4gICAgICogZnVydGhlci4gRm9yIGV4YW1wbGUsIGluIFMzIEFSTnM6XG4gICAgICpcbiAgICAgKiAgICAgIGFybjphd3M6czM6OjpteV9jb3Jwb3JhdGVfYnVja2V0L3BhdGgvdG8vZXhhbXBsZW9iamVjdC5wbmdcbiAgICAgKlxuICAgICAqIEFmdGVyIHBhcnNpbmcgdGhlIHJlc291cmNlTmFtZSB3aWxsIG5vdCBjb250YWluICdwYXRoL3RvL2V4YW1wbGVvYmplY3QucG5nJ1xuICAgICAqIGJ1dCBzaW1wbHkgJ3BhdGgnLiBUaGlzIGlzIGEgbGltaXRhdGlvbiBiZWNhdXNlIHRoZXJlIGlzIG5vIHNsaWNpbmdcbiAgICAgKiBmdW5jdGlvbmFsaXR5IGluIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhcm4gVGhlIGlucHV0IHRva2VuIHRoYXQgY29udGFpbnMgYW4gQVJOXG4gICAgICogQHBhcmFtIHNlcCBUaGUgc2VwYXJhdG9yIHVzZWQgdG8gc2VwYXJhdGUgcmVzb3VyY2UgZnJvbSByZXNvdXJjZU5hbWVcbiAgICAgKiBAcGFyYW0gaGFzTmFtZSBXaGV0aGVyIHRoZXJlIGlzIGEgbmFtZSBjb21wb25lbnQgaW4gdGhlIEFSTiBhdCBhbGwuXG4gICAgICogRm9yIGV4YW1wbGUsIFNOUyBUb3BpY3MgQVJOcyBoYXZlIHRoZSAncmVzb3VyY2UnIGNvbXBvbmVudCBjb250YWluIHRoZVxuICAgICAqIHRvcGljIG5hbWUsIGFuZCBubyAncmVzb3VyY2VOYW1lJyBjb21wb25lbnQuXG4gICAgICogQHJldHVybnMgYW4gQXJuQ29tcG9uZW50cyBvYmplY3Qgd2hpY2ggYWxsb3dzIGFjY2VzcyB0byB0aGUgdmFyaW91c1xuICAgICAqIGNvbXBvbmVudHMgb2YgdGhlIEFSTi5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHBhcnNlVG9rZW4oYXJuOiBUb2tlbiwgc2VwOiBzdHJpbmcgPSAnLycsIGhhc05hbWU6IGJvb2xlYW4gPSB0cnVlKTogQXJuQ29tcG9uZW50cyB7XG4gICAgICAgIC8vIEFybiBBUk4gbG9va3MgbGlrZTpcbiAgICAgICAgLy8gYXJuOnBhcnRpdGlvbjpzZXJ2aWNlOnJlZ2lvbjphY2NvdW50LWlkOnJlc291cmNlXG4gICAgICAgIC8vIGFybjpwYXJ0aXRpb246c2VydmljZTpyZWdpb246YWNjb3VudC1pZDpyZXNvdXJjZXR5cGUvcmVzb3VyY2VcbiAgICAgICAgLy8gYXJuOnBhcnRpdGlvbjpzZXJ2aWNlOnJlZ2lvbjphY2NvdW50LWlkOnJlc291cmNldHlwZTpyZXNvdXJjZVxuXG4gICAgICAgIC8vIFdlIG5lZWQgdGhlICdoYXNOYW1lJyBhcmd1bWVudCBiZWNhdXNlIHtGbjo6U2VsZWN0fWluZyBhIG5vbmV4aXN0ZW50IGZpZWxkXG4gICAgICAgIC8vIHRocm93cyBhbiBlcnJvci5cblxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gbmV3IEZuU3BsaXQoJzonLCBhcm4pO1xuXG4gICAgICAgIGNvbnN0IHBhcnRpdGlvbiA9IG5ldyBGblNlbGVjdCgxLCBjb21wb25lbnRzKS50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlID0gbmV3IEZuU2VsZWN0KDIsIGNvbXBvbmVudHMpLnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IHJlZ2lvbiA9IG5ldyBGblNlbGVjdCgzLCBjb21wb25lbnRzKS50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBhY2NvdW50ID0gbmV3IEZuU2VsZWN0KDQsIGNvbXBvbmVudHMpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgaWYgKHNlcCA9PT0gJzonKSB7XG4gICAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBGblNlbGVjdCg1LCBjb21wb25lbnRzKS50b1N0cmluZygpO1xuICAgICAgICAgICAgY29uc3QgcmVzb3VyY2VOYW1lID0gaGFzTmFtZSA/IG5ldyBGblNlbGVjdCg2LCBjb21wb25lbnRzKS50b1N0cmluZygpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICByZXR1cm4geyBwYXJ0aXRpb24sIHNlcnZpY2UsIHJlZ2lvbiwgYWNjb3VudCwgcmVzb3VyY2UsIHJlc291cmNlTmFtZSwgc2VwIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0Q29tcG9uZW50cyA9IG5ldyBGblNwbGl0KHNlcCwgbmV3IEZuU2VsZWN0KDUsIGNvbXBvbmVudHMpKTtcblxuICAgICAgICAgICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgRm5TZWxlY3QoMCwgbGFzdENvbXBvbmVudHMpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCByZXNvdXJjZU5hbWUgPSBoYXNOYW1lID8gbmV3IEZuU2VsZWN0KDEsIGxhc3RDb21wb25lbnRzKS50b1N0cmluZygpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICByZXR1cm4geyBwYXJ0aXRpb24sIHNlcnZpY2UsIHJlZ2lvbiwgYWNjb3VudCwgcmVzb3VyY2UsIHJlc291cmNlTmFtZSwgc2VwIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBUb2tlbiB0aGF0IHJlcHJlc2VudHMgdGhlIHJlc291cmNlIGNvbXBvbmVudCBvZiB0aGUgQVJOXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyByZXNvdXJjZUNvbXBvbmVudChhcm46IHN0cmluZywgc2VwOiBzdHJpbmcgPSAnLycpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gQXJuVXRpbHMucGFyc2VUb2tlbihuZXcgVG9rZW4oYXJuKSwgc2VwKS5yZXNvdXJjZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBUb2tlbiB0aGF0IHJlcHJlc2VudHMgdGhlIHJlc291cmNlIE5hbWUgY29tcG9uZW50IG9mIHRoZSBBUk5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHJlc291cmNlTmFtZUNvbXBvbmVudChhcm46IHN0cmluZywgc2VwOiBzdHJpbmcgPSAnLycpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gQXJuVXRpbHMucGFyc2VUb2tlbihuZXcgVG9rZW4oYXJuKSwgc2VwLCB0cnVlKS5yZXNvdXJjZU5hbWUhO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcm5Db21wb25lbnRzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGFydGl0aW9uIHRoYXQgdGhlIHJlc291cmNlIGlzIGluLiBGb3Igc3RhbmRhcmQgQVdTIHJlZ2lvbnMsIHRoZVxuICAgICAqIHBhcnRpdGlvbiBpcyBhd3MuIElmIHlvdSBoYXZlIHJlc291cmNlcyBpbiBvdGhlciBwYXJ0aXRpb25zLCB0aGVcbiAgICAgKiBwYXJ0aXRpb24gaXMgYXdzLXBhcnRpdGlvbm5hbWUuIEZvciBleGFtcGxlLCB0aGUgcGFydGl0aW9uIGZvciByZXNvdXJjZXNcbiAgICAgKiBpbiB0aGUgQ2hpbmEgKEJlaWppbmcpIHJlZ2lvbiBpcyBhd3MtY24uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBUaGUgQVdTIHBhcnRpdGlvbiB0aGUgc3RhY2sgaXMgZGVwbG95ZWQgdG8uXG4gICAgICovXG4gICAgcGFydGl0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNlcnZpY2UgbmFtZXNwYWNlIHRoYXQgaWRlbnRpZmllcyB0aGUgQVdTIHByb2R1Y3QgKGZvciBleGFtcGxlLFxuICAgICAqICdzMycsICdpYW0nLCAnY29kZXBpcGxpbmUnKS5cbiAgICAgKi9cbiAgICBzZXJ2aWNlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVnaW9uIHRoZSByZXNvdXJjZSByZXNpZGVzIGluLiBOb3RlIHRoYXQgdGhlIEFSTnMgZm9yIHNvbWUgcmVzb3VyY2VzXG4gICAgICogZG8gbm90IHJlcXVpcmUgYSByZWdpb24sIHNvIHRoaXMgY29tcG9uZW50IG1pZ2h0IGJlIG9taXR0ZWQuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBUaGUgcmVnaW9uIHRoZSBzdGFjayBpcyBkZXBsb3llZCB0by5cbiAgICAgKi9cbiAgICByZWdpb24/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgSUQgb2YgdGhlIEFXUyBhY2NvdW50IHRoYXQgb3ducyB0aGUgcmVzb3VyY2UsIHdpdGhvdXQgdGhlIGh5cGhlbnMuXG4gICAgICogRm9yIGV4YW1wbGUsIDEyMzQ1Njc4OTAxMi4gTm90ZSB0aGF0IHRoZSBBUk5zIGZvciBzb21lIHJlc291cmNlcyBkb24ndFxuICAgICAqIHJlcXVpcmUgYW4gYWNjb3VudCBudW1iZXIsIHNvIHRoaXMgY29tcG9uZW50IG1pZ2h0IGJlIG9taXR0ZWQuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBUaGUgYWNjb3VudCB0aGUgc3RhY2sgaXMgZGVwbG95ZWQgdG8uXG4gICAgICovXG4gICAgYWNjb3VudD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFJlc291cmNlIHR5cGUgKGUuZy4gXCJ0YWJsZVwiLCBcImF1dG9TY2FsaW5nR3JvdXBcIiwgXCJjZXJ0aWZpY2F0ZVwiKS5cbiAgICAgKiBGb3Igc29tZSByZXNvdXJjZSB0eXBlcywgZS5nLiBTMyBidWNrZXRzLCB0aGlzIGZpZWxkIGRlZmluZXMgdGhlIGJ1Y2tldCBuYW1lLlxuICAgICAqL1xuICAgIHJlc291cmNlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTZXBhcmF0b3IgYmV0d2VlbiByZXNvdXJjZSB0eXBlIGFuZCB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBDYW4gYmUgZWl0aGVyICcvJyBvciAnOicuIFdpbGwgb25seSBiZSB1c2VkIGlmIHBhdGggaXMgZGVmaW5lZC5cbiAgICAgKiBAZGVmYXVsdCAnLydcbiAgICAgKi9cbiAgICBzZXA/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBSZXNvdXJjZSBuYW1lIG9yIHBhdGggd2l0aGluIHRoZSByZXNvdXJjZSAoaS5lLiBTMyBidWNrZXQgb2JqZWN0IGtleSkgb3JcbiAgICAgKiBhIHdpbGRjYXJkIHN1Y2ggYXMgYGBcIipcImBgLiBUaGlzIGlzIHNlcnZpY2UtZGVwZW5kZW50LlxuICAgICAqL1xuICAgIHJlc291cmNlTmFtZT86IHN0cmluZztcbn1cbiJdfQ==

@@ -76,3 +76,3 @@ import { Construct } from '../core/construct';

toCloudFormation(): object;
readonly ref: Token;
readonly ref: string;
}

@@ -79,0 +79,0 @@ /**

@@ -88,2 +88,2 @@ "use strict";

exports.StringListOutput = StringListOutput;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsib3V0cHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaURBQThDO0FBRzlDLDZCQUFnRTtBQUNoRSxtQ0FBOEM7QUEyQzlDLE1BQWEsTUFBTyxTQUFRLG9CQUFZO0lBMkJwQzs7OztPQUlHO0lBQ0gsWUFBWSxNQUFpQixFQUFFLElBQVksRUFBRSxRQUFxQixFQUFFO1FBQ2hFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFFakMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2QsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFO2dCQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7YUFDNUU7WUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7U0FDOUI7YUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRTtZQUM3Qix1RkFBdUY7WUFDdkYsTUFBTSxTQUFTLEdBQUcsYUFBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDakM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1NBQzFFO1FBQ0QsT0FBTyxJQUFJLGtCQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTSxnQkFBZ0I7UUFDbkIsT0FBTztZQUNILE9BQU8sRUFBRTtnQkFDTCxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDZCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7b0JBQzdCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7b0JBQy9ELFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUztpQkFDbkU7YUFDSjtTQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsSUFBVyxHQUFHO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQ3BELENBQUM7Q0FDSjtBQTlFRCx3QkE4RUM7QUFtREQ7Ozs7O0dBS0c7QUFDSCxNQUFhLGdCQUFpQixTQUFRLHFCQUFTO0lBZ0IzQyxZQUFZLE1BQWlCLEVBQUUsSUFBWSxFQUFFLEtBQTRCO1FBQ3JFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRWxDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUN2QyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtZQUNsQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsS0FBSyxFQUFFLElBQUksV0FBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUNsRCxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0I7UUFDbkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUUvQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDZixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksYUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLFlBQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwRTtRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztDQUNKO0FBNUNELDRDQTRDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJy4uL2NvcmUvY29uc3RydWN0JztcbmltcG9ydCB7IFRva2VuIH0gZnJvbSAnLi4vY29yZS90b2tlbnMnO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSAnLi9jb25kaXRpb24nO1xuaW1wb3J0IHsgRm5JbXBvcnRWYWx1ZSwgRm5Kb2luLCBGblNlbGVjdCwgRm5TcGxpdCB9IGZyb20gJy4vZm4nO1xuaW1wb3J0IHsgU3RhY2ssIFN0YWNrRWxlbWVudCB9IGZyb20gJy4vc3RhY2snO1xuXG5leHBvcnQgaW50ZXJmYWNlIE91dHB1dFByb3BzIHtcbiAgICAvKipcbiAgICAgKiBBIFN0cmluZyB0eXBlIHRoYXQgZGVzY3JpYmVzIHRoZSBvdXRwdXQgdmFsdWUuXG4gICAgICogVGhlIGRlc2NyaXB0aW9uIGNhbiBiZSBhIG1heGltdW0gb2YgNCBLIGluIGxlbmd0aC5cbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgcmV0dXJuZWQgYnkgdGhlIGF3cyBjbG91ZGZvcm1hdGlvbiBkZXNjcmliZS1zdGFja3MgY29tbWFuZC5cbiAgICAgKiBUaGUgdmFsdWUgb2YgYW4gb3V0cHV0IGNhbiBpbmNsdWRlIGxpdGVyYWxzLCBwYXJhbWV0ZXIgcmVmZXJlbmNlcywgcHNldWRvLXBhcmFtZXRlcnMsXG4gICAgICogYSBtYXBwaW5nIHZhbHVlLCBvciBpbnRyaW5zaWMgZnVuY3Rpb25zLlxuICAgICAqL1xuICAgIHZhbHVlPzogYW55O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgdXNlZCB0byBleHBvcnQgdGhlIHZhbHVlIG9mIHRoaXMgb3V0cHV0IGFjcm9zcyBzdGFja3MuIFRvIGltcG9ydFxuICAgICAqIHRoZSB2YWx1ZSBmcm9tIGFub3RoZXIgc3RhY2ssIHVzZSBgRm5JbXBvcnRWYWx1ZShleHBvcnQpYC4gWW91IGNhbiBjcmVhdGVcbiAgICAgKiBhbiBpbXBvcnQgdmFsdWUgdG9rZW4gYnkgY2FsbGluZyBgb3V0cHV0Lm1ha2VJbXBvcnRWYWx1ZSgpYC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIGF1dG9tYXRpY2FsbHkgYWxsb2NhdGUgYW4gZXhwb3J0IG5hbWVcbiAgICAgKiBmb3Igb3V0cHV0cyBiYXNlZCBvbiB0aGUgc3RhY2sgbmFtZSBhbmQgdGhlIG91dHB1dCdzIGxvZ2ljYWwgSUQuIFRvXG4gICAgICogY3JlYXRlIGFuIG91dHB1dCB3aXRob3V0IGFuIGV4cG9ydCwgc2V0IGBkaXNhYmxlRXhwb3J0OiB0cnVlYC5cbiAgICAgKi9cbiAgICBleHBvcnQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgYXV0b21hdGljIGFsbG9jYXRpb24gb2YgYW4gZXhwb3J0IG5hbWUgZm9yIHRoaXMgb3V0cHV0LlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2UsIHdoaWNoIG1lYW5zIHRoYXQgYW4gZXhwb3J0IG5hbWUgaXMgZWl0aGVyIGV4cGxpY2l0bHlcbiAgICAgKiBzcGVjaWZpZWQgb3IgYWxsb2NhdGVkIGJhc2VkIG9uIHRoZSBvdXRwdXQncyBsb2dpY2FsIElEIGFuZCBzdGFjayBuYW1lLlxuICAgICAqL1xuICAgIGRpc2FibGVFeHBvcnQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQSBjb25kaXRpb24gZnJvbSB0aGUgXCJDb25kaXRpb25zXCIgc2VjdGlvbiB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIG91dHB1dFxuICAgICAqIHZhbHVlLiBJZiB0aGUgY29uZGl0aW9uIGV2YWx1YXRlcyB0byBgZmFsc2VgLCB0aGlzIG91dHB1dCB2YWx1ZSB3aWxsIG5vdFxuICAgICAqIGJlIGluY2x1ZGVkIGluIHRoZSBzdGFjay5cbiAgICAgKi9cbiAgICBjb25kaXRpb24/OiBDb25kaXRpb247XG59XG5cbmV4cG9ydCBjbGFzcyBPdXRwdXQgZXh0ZW5kcyBTdGFja0VsZW1lbnQge1xuICAgIC8qKlxuICAgICAqIEEgU3RyaW5nIHR5cGUgdGhhdCBkZXNjcmliZXMgdGhlIG91dHB1dCB2YWx1ZS5cbiAgICAgKiBUaGUgZGVzY3JpcHRpb24gY2FuIGJlIGEgbWF4aW11bSBvZiA0IEsgaW4gbGVuZ3RoLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgcmV0dXJuZWQgYnkgdGhlIGF3cyBjbG91ZGZvcm1hdGlvbiBkZXNjcmliZS1zdGFja3MgY29tbWFuZC5cbiAgICAgKiBUaGUgdmFsdWUgb2YgYW4gb3V0cHV0IGNhbiBpbmNsdWRlIGxpdGVyYWxzLCBwYXJhbWV0ZXIgcmVmZXJlbmNlcywgcHNldWRvLXBhcmFtZXRlcnMsXG4gICAgICogYSBtYXBwaW5nIHZhbHVlLCBvciBpbnRyaW5zaWMgZnVuY3Rpb25zLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSB2YWx1ZT86IGFueTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSBvdXRwdXQgdG8gYmUgZXhwb3J0ZWQgZm9yIGEgY3Jvc3Mtc3RhY2sgcmVmZXJlbmNlLlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBsb2dpY2FsIElEIG9mIHRoZSBPdXRwdXQgZWxlbWVudCBpcyB1c2VkIGFzIGl0J3MgZXhwb3J0IG5hbWUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGV4cG9ydD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEEgY29uZGl0aW9uIGZyb20gdGhlIFwiQ29uZGl0aW9uc1wiIHNlY3Rpb24gdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBvdXRwdXRcbiAgICAgKiB2YWx1ZS4gSWYgdGhlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gYGZhbHNlYCwgdGhpcyBvdXRwdXQgdmFsdWUgd2lsbCBub3RcbiAgICAgKiBiZSBpbmNsdWRlZCBpbiB0aGUgc3RhY2suXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbmRpdGlvbj86IENvbmRpdGlvbjtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gT3V0cHV0IHZhbHVlIGZvciB0aGlzIHN0YWNrLlxuICAgICAqIEBwYXJhbSBwYXJlbnQgVGhlIHBhcmVudCBjb25zdHJ1Y3QuXG4gICAgICogQHBhcmFtIHByb3BzIE91dHB1dCBwcm9wZXJ0aWVzLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBPdXRwdXRQcm9wcyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG5cbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uO1xuICAgICAgICB0aGlzLnZhbHVlID0gcHJvcHMudmFsdWU7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uID0gcHJvcHMuY29uZGl0aW9uO1xuXG4gICAgICAgIGlmIChwcm9wcy5leHBvcnQpIHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5kaXNhYmxlRXhwb3J0KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc2V0IGBkaXNhYmxlRXhwb3J0YCBhbmQgc3BlY2lmeSBhbiBleHBvcnQgbmFtZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5leHBvcnQgPSBwcm9wcy5leHBvcnQ7XG4gICAgICAgIH0gZWxzZSBpZiAoIXByb3BzLmRpc2FibGVFeHBvcnQpIHtcbiAgICAgICAgICAgIC8vIHByZWZpeCBleHBvcnQgbmFtZSB3aXRoIHN0YWNrIG5hbWUgc2luY2UgZXhwb3J0cyBhcmUgZ2xvYmFsIHdpdGhpbiBhY2NvdW50ICsgcmVnaW9uLlxuICAgICAgICAgICAgY29uc3Qgc3RhY2tOYW1lID0gU3RhY2suZmluZCh0aGlzKS5pZDtcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0ID0gc3RhY2tOYW1lID8gc3RhY2tOYW1lICsgJzonIDogJyc7XG4gICAgICAgICAgICB0aGlzLmV4cG9ydCArPSB0aGlzLmxvZ2ljYWxJZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gRm5JbXBvcnRWYWx1ZSBib3VuZCB0byB0aGlzIGV4cG9ydCBuYW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyBtYWtlSW1wb3J0VmFsdWUoKSB7XG4gICAgICAgIGlmICghdGhpcy5leHBvcnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNyZWF0ZSBhbiBJbXBvcnRWYWx1ZSB3aXRob3V0IGFuIGV4cG9ydCBuYW1lJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBGbkltcG9ydFZhbHVlKHRoaXMuZXhwb3J0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9DbG91ZEZvcm1hdGlvbigpOiBvYmplY3Qge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgT3V0cHV0czoge1xuICAgICAgICAgICAgICAgIFt0aGlzLmxvZ2ljYWxJZF06IHtcbiAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIFZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBFeHBvcnQ6IHRoaXMuZXhwb3J0ICE9IG51bGwgPyB7IE5hbWU6IHRoaXMuZXhwb3J0IH0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbjogdGhpcy5jb25kaXRpb24gPyB0aGlzLmNvbmRpdGlvbi5sb2dpY2FsSWQgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZWYoKTogVG9rZW4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ091dHB1dHMgY2Fubm90IGJlIHJlZmVyZW5jZWQnKTtcbiAgICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgTGlzdE91dHB1dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cmluZ0xpc3RPdXRwdXRQcm9wcyB7XG4gICAgLyoqXG4gICAgICogQSBTdHJpbmcgdHlwZSB0aGF0IGRlc2NyaWJlcyB0aGUgb3V0cHV0IHZhbHVlLlxuICAgICAqIFRoZSBkZXNjcmlwdGlvbiBjYW4gYmUgYSBtYXhpbXVtIG9mIDQgSyBpbiBsZW5ndGguXG4gICAgICovXG4gICAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGlzdCBvZiBwcmltaXRpdmVzIHRvIGV4cG9ydFxuICAgICAqL1xuICAgIHJlYWRvbmx5IHZhbHVlczogYW55W107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2VwYXJhdG9yIHRvIHVzZSB0byBzZXBhcmF0ZSBzdHJpbmdpZmllZCB2YWx1ZXNcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiLFwiXG4gICAgICovXG4gICAgcmVhZG9ubHkgc2VwYXJhdG9yPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgdXNlZCB0byBleHBvcnQgdGhlIHZhbHVlIG9mIHRoaXMgb3V0cHV0IGFjcm9zcyBzdGFja3MuIFRvIGltcG9ydFxuICAgICAqIHRoZSB2YWx1ZSBmcm9tIGFub3RoZXIgc3RhY2ssIHVzZSBgRm5JbXBvcnRWYWx1ZShleHBvcnQpYC4gWW91IGNhbiBjcmVhdGVcbiAgICAgKiBhbiBpbXBvcnQgdmFsdWUgdG9rZW4gYnkgY2FsbGluZyBgb3V0cHV0Lm1ha2VJbXBvcnRWYWx1ZSgpYC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIGF1dG9tYXRpY2FsbHkgYWxsb2NhdGUgYW4gZXhwb3J0IG5hbWVcbiAgICAgKiBmb3Igb3V0cHV0cyBiYXNlZCBvbiB0aGUgc3RhY2sgbmFtZSBhbmQgdGhlIG91dHB1dCdzIGxvZ2ljYWwgSUQuIFRvXG4gICAgICogY3JlYXRlIGFuIG91dHB1dCB3aXRob3V0IGFuIGV4cG9ydCwgc2V0IGBkaXNhYmxlRXhwb3J0OiB0cnVlYC5cbiAgICAgKi9cbiAgICByZWFkb25seSBleHBvcnQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgYXV0b21hdGljIGFsbG9jYXRpb24gb2YgYW4gZXhwb3J0IG5hbWUgZm9yIHRoaXMgb3V0cHV0LlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2UsIHdoaWNoIG1lYW5zIHRoYXQgYW4gZXhwb3J0IG5hbWUgaXMgZWl0aGVyIGV4cGxpY2l0bHlcbiAgICAgKiBzcGVjaWZpZWQgb3IgYWxsb2NhdGVkIGJhc2VkIG9uIHRoZSBvdXRwdXQncyBsb2dpY2FsIElEIGFuZCBzdGFjayBuYW1lLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGRpc2FibGVFeHBvcnQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQSBjb25kaXRpb24gZnJvbSB0aGUgXCJDb25kaXRpb25zXCIgc2VjdGlvbiB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIG91dHB1dFxuICAgICAqIHZhbHVlLiBJZiB0aGUgY29uZGl0aW9uIGV2YWx1YXRlcyB0byBgZmFsc2VgLCB0aGlzIG91dHB1dCB2YWx1ZSB3aWxsIG5vdFxuICAgICAqIGJlIGluY2x1ZGVkIGluIHRoZSBzdGFjay5cbiAgICAgKi9cbiAgICByZWFkb25seSBjb25kaXRpb24/OiBDb25kaXRpb247XG59XG5cbi8qKlxuICogQW4gb3V0cHV0IGZvciBhIGxpc3Qgb2Ygc3RyaW5ncy5cbiAqXG4gKiBFeHBvcnRzIGEgbGlzdCBvZiBUb2tlbnMgdmlhIGFuIE91dHB1dCB2YXJpYWJsZSwgYW5kIHJldHVybiBhIGxpc3Qgb2YgVG9rZW5zXG4gKiB0aGF0IHNlbGVjdHMgdGhlIGltcG9ydGVkIHZhbHVlcyBmb3IgdGhlbS5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0cmluZ0xpc3RPdXRwdXQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc3RyaW5nbGlzdFxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBsZW5ndGg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzZXBhcmF0b3IgdXNlZCB0byBjb21iaW5lIHRoZSBzdHJpbmcgdmFsdWVzXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXBhcmF0b3I6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBPdXRwdXQgb2JqZWN0IHRoYXQgd2FzIGNyZWF0ZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IG91dHB1dDogT3V0cHV0O1xuXG4gICAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IFN0cmluZ0xpc3RPdXRwdXRQcm9wcykge1xuICAgICAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuXG4gICAgICAgIHRoaXMuc2VwYXJhdG9yID0gcHJvcHMuc2VwYXJhdG9yIHx8ICcsJztcbiAgICAgICAgdGhpcy5sZW5ndGggPSBwcm9wcy52YWx1ZXMubGVuZ3RoO1xuXG4gICAgICAgIHRoaXMub3V0cHV0ID0gbmV3IE91dHB1dCh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBjb25kaXRpb246IHByb3BzLmNvbmRpdGlvbixcbiAgICAgICAgICAgIGRpc2FibGVFeHBvcnQ6IHByb3BzLmRpc2FibGVFeHBvcnQsXG4gICAgICAgICAgICBleHBvcnQ6IHByb3BzLmV4cG9ydCxcbiAgICAgICAgICAgIHZhbHVlOiBuZXcgRm5Kb2luKHRoaXMuc2VwYXJhdG9yLCBwcm9wcy52YWx1ZXMpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhbiBhcnJheSBvZiBpbXBvcnRlZCB2YWx1ZXMgZm9yIHRoaXMgT3V0cHV0XG4gICAgICovXG4gICAgcHVibGljIG1ha2VJbXBvcnRWYWx1ZXMoKTogVG9rZW5bXSB7XG4gICAgICAgIGNvbnN0IGNvbWJpbmVkID0gdGhpcy5vdXRwdXQubWFrZUltcG9ydFZhbHVlKCk7XG5cbiAgICAgICAgY29uc3QgcmV0ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmV0LnB1c2gobmV3IEZuU2VsZWN0KGksIG5ldyBGblNwbGl0KHRoaXMuc2VwYXJhdG9yLCBjb21iaW5lZCkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsib3V0cHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaURBQThDO0FBRzlDLDZCQUFnRTtBQUNoRSxtQ0FBOEM7QUEyQzlDLE1BQWEsTUFBTyxTQUFRLG9CQUFZO0lBMkJwQzs7OztPQUlHO0lBQ0gsWUFBWSxNQUFpQixFQUFFLElBQVksRUFBRSxRQUFxQixFQUFFO1FBQ2hFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFFakMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2QsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFO2dCQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7YUFDNUU7WUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7U0FDOUI7YUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRTtZQUM3Qix1RkFBdUY7WUFDdkYsTUFBTSxTQUFTLEdBQUcsYUFBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDakM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1NBQzFFO1FBQ0QsT0FBTyxJQUFJLGtCQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTSxnQkFBZ0I7UUFDbkIsT0FBTztZQUNILE9BQU8sRUFBRTtnQkFDTCxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDZCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7b0JBQzdCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7b0JBQy9ELFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUztpQkFDbkU7YUFDSjtTQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsSUFBVyxHQUFHO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQ3BELENBQUM7Q0FDSjtBQTlFRCx3QkE4RUM7QUFtREQ7Ozs7O0dBS0c7QUFDSCxNQUFhLGdCQUFpQixTQUFRLHFCQUFTO0lBZ0IzQyxZQUFZLE1BQWlCLEVBQUUsSUFBWSxFQUFFLEtBQTRCO1FBQ3JFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRWxDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUN2QyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtZQUNsQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsS0FBSyxFQUFFLElBQUksV0FBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUNsRCxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0I7UUFDbkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUUvQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDZixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksYUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLFlBQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwRTtRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztDQUNKO0FBNUNELDRDQTRDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJy4uL2NvcmUvY29uc3RydWN0JztcbmltcG9ydCB7IFRva2VuIH0gZnJvbSAnLi4vY29yZS90b2tlbnMnO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSAnLi9jb25kaXRpb24nO1xuaW1wb3J0IHsgRm5JbXBvcnRWYWx1ZSwgRm5Kb2luLCBGblNlbGVjdCwgRm5TcGxpdCB9IGZyb20gJy4vZm4nO1xuaW1wb3J0IHsgU3RhY2ssIFN0YWNrRWxlbWVudCB9IGZyb20gJy4vc3RhY2snO1xuXG5leHBvcnQgaW50ZXJmYWNlIE91dHB1dFByb3BzIHtcbiAgICAvKipcbiAgICAgKiBBIFN0cmluZyB0eXBlIHRoYXQgZGVzY3JpYmVzIHRoZSBvdXRwdXQgdmFsdWUuXG4gICAgICogVGhlIGRlc2NyaXB0aW9uIGNhbiBiZSBhIG1heGltdW0gb2YgNCBLIGluIGxlbmd0aC5cbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgcmV0dXJuZWQgYnkgdGhlIGF3cyBjbG91ZGZvcm1hdGlvbiBkZXNjcmliZS1zdGFja3MgY29tbWFuZC5cbiAgICAgKiBUaGUgdmFsdWUgb2YgYW4gb3V0cHV0IGNhbiBpbmNsdWRlIGxpdGVyYWxzLCBwYXJhbWV0ZXIgcmVmZXJlbmNlcywgcHNldWRvLXBhcmFtZXRlcnMsXG4gICAgICogYSBtYXBwaW5nIHZhbHVlLCBvciBpbnRyaW5zaWMgZnVuY3Rpb25zLlxuICAgICAqL1xuICAgIHZhbHVlPzogYW55O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgdXNlZCB0byBleHBvcnQgdGhlIHZhbHVlIG9mIHRoaXMgb3V0cHV0IGFjcm9zcyBzdGFja3MuIFRvIGltcG9ydFxuICAgICAqIHRoZSB2YWx1ZSBmcm9tIGFub3RoZXIgc3RhY2ssIHVzZSBgRm5JbXBvcnRWYWx1ZShleHBvcnQpYC4gWW91IGNhbiBjcmVhdGVcbiAgICAgKiBhbiBpbXBvcnQgdmFsdWUgdG9rZW4gYnkgY2FsbGluZyBgb3V0cHV0Lm1ha2VJbXBvcnRWYWx1ZSgpYC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIGF1dG9tYXRpY2FsbHkgYWxsb2NhdGUgYW4gZXhwb3J0IG5hbWVcbiAgICAgKiBmb3Igb3V0cHV0cyBiYXNlZCBvbiB0aGUgc3RhY2sgbmFtZSBhbmQgdGhlIG91dHB1dCdzIGxvZ2ljYWwgSUQuIFRvXG4gICAgICogY3JlYXRlIGFuIG91dHB1dCB3aXRob3V0IGFuIGV4cG9ydCwgc2V0IGBkaXNhYmxlRXhwb3J0OiB0cnVlYC5cbiAgICAgKi9cbiAgICBleHBvcnQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgYXV0b21hdGljIGFsbG9jYXRpb24gb2YgYW4gZXhwb3J0IG5hbWUgZm9yIHRoaXMgb3V0cHV0LlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2UsIHdoaWNoIG1lYW5zIHRoYXQgYW4gZXhwb3J0IG5hbWUgaXMgZWl0aGVyIGV4cGxpY2l0bHlcbiAgICAgKiBzcGVjaWZpZWQgb3IgYWxsb2NhdGVkIGJhc2VkIG9uIHRoZSBvdXRwdXQncyBsb2dpY2FsIElEIGFuZCBzdGFjayBuYW1lLlxuICAgICAqL1xuICAgIGRpc2FibGVFeHBvcnQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQSBjb25kaXRpb24gZnJvbSB0aGUgXCJDb25kaXRpb25zXCIgc2VjdGlvbiB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIG91dHB1dFxuICAgICAqIHZhbHVlLiBJZiB0aGUgY29uZGl0aW9uIGV2YWx1YXRlcyB0byBgZmFsc2VgLCB0aGlzIG91dHB1dCB2YWx1ZSB3aWxsIG5vdFxuICAgICAqIGJlIGluY2x1ZGVkIGluIHRoZSBzdGFjay5cbiAgICAgKi9cbiAgICBjb25kaXRpb24/OiBDb25kaXRpb247XG59XG5cbmV4cG9ydCBjbGFzcyBPdXRwdXQgZXh0ZW5kcyBTdGFja0VsZW1lbnQge1xuICAgIC8qKlxuICAgICAqIEEgU3RyaW5nIHR5cGUgdGhhdCBkZXNjcmliZXMgdGhlIG91dHB1dCB2YWx1ZS5cbiAgICAgKiBUaGUgZGVzY3JpcHRpb24gY2FuIGJlIGEgbWF4aW11bSBvZiA0IEsgaW4gbGVuZ3RoLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgcmV0dXJuZWQgYnkgdGhlIGF3cyBjbG91ZGZvcm1hdGlvbiBkZXNjcmliZS1zdGFja3MgY29tbWFuZC5cbiAgICAgKiBUaGUgdmFsdWUgb2YgYW4gb3V0cHV0IGNhbiBpbmNsdWRlIGxpdGVyYWxzLCBwYXJhbWV0ZXIgcmVmZXJlbmNlcywgcHNldWRvLXBhcmFtZXRlcnMsXG4gICAgICogYSBtYXBwaW5nIHZhbHVlLCBvciBpbnRyaW5zaWMgZnVuY3Rpb25zLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSB2YWx1ZT86IGFueTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSBvdXRwdXQgdG8gYmUgZXhwb3J0ZWQgZm9yIGEgY3Jvc3Mtc3RhY2sgcmVmZXJlbmNlLlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBsb2dpY2FsIElEIG9mIHRoZSBPdXRwdXQgZWxlbWVudCBpcyB1c2VkIGFzIGl0J3MgZXhwb3J0IG5hbWUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGV4cG9ydD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEEgY29uZGl0aW9uIGZyb20gdGhlIFwiQ29uZGl0aW9uc1wiIHNlY3Rpb24gdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBvdXRwdXRcbiAgICAgKiB2YWx1ZS4gSWYgdGhlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gYGZhbHNlYCwgdGhpcyBvdXRwdXQgdmFsdWUgd2lsbCBub3RcbiAgICAgKiBiZSBpbmNsdWRlZCBpbiB0aGUgc3RhY2suXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbmRpdGlvbj86IENvbmRpdGlvbjtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gT3V0cHV0IHZhbHVlIGZvciB0aGlzIHN0YWNrLlxuICAgICAqIEBwYXJhbSBwYXJlbnQgVGhlIHBhcmVudCBjb25zdHJ1Y3QuXG4gICAgICogQHBhcmFtIHByb3BzIE91dHB1dCBwcm9wZXJ0aWVzLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBPdXRwdXRQcm9wcyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG5cbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uO1xuICAgICAgICB0aGlzLnZhbHVlID0gcHJvcHMudmFsdWU7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uID0gcHJvcHMuY29uZGl0aW9uO1xuXG4gICAgICAgIGlmIChwcm9wcy5leHBvcnQpIHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5kaXNhYmxlRXhwb3J0KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc2V0IGBkaXNhYmxlRXhwb3J0YCBhbmQgc3BlY2lmeSBhbiBleHBvcnQgbmFtZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5leHBvcnQgPSBwcm9wcy5leHBvcnQ7XG4gICAgICAgIH0gZWxzZSBpZiAoIXByb3BzLmRpc2FibGVFeHBvcnQpIHtcbiAgICAgICAgICAgIC8vIHByZWZpeCBleHBvcnQgbmFtZSB3aXRoIHN0YWNrIG5hbWUgc2luY2UgZXhwb3J0cyBhcmUgZ2xvYmFsIHdpdGhpbiBhY2NvdW50ICsgcmVnaW9uLlxuICAgICAgICAgICAgY29uc3Qgc3RhY2tOYW1lID0gU3RhY2suZmluZCh0aGlzKS5pZDtcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0ID0gc3RhY2tOYW1lID8gc3RhY2tOYW1lICsgJzonIDogJyc7XG4gICAgICAgICAgICB0aGlzLmV4cG9ydCArPSB0aGlzLmxvZ2ljYWxJZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gRm5JbXBvcnRWYWx1ZSBib3VuZCB0byB0aGlzIGV4cG9ydCBuYW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyBtYWtlSW1wb3J0VmFsdWUoKSB7XG4gICAgICAgIGlmICghdGhpcy5leHBvcnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNyZWF0ZSBhbiBJbXBvcnRWYWx1ZSB3aXRob3V0IGFuIGV4cG9ydCBuYW1lJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBGbkltcG9ydFZhbHVlKHRoaXMuZXhwb3J0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9DbG91ZEZvcm1hdGlvbigpOiBvYmplY3Qge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgT3V0cHV0czoge1xuICAgICAgICAgICAgICAgIFt0aGlzLmxvZ2ljYWxJZF06IHtcbiAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIFZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBFeHBvcnQ6IHRoaXMuZXhwb3J0ICE9IG51bGwgPyB7IE5hbWU6IHRoaXMuZXhwb3J0IH0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbjogdGhpcy5jb25kaXRpb24gPyB0aGlzLmNvbmRpdGlvbi5sb2dpY2FsSWQgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZWYoKTogc3RyaW5nIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPdXRwdXRzIGNhbm5vdCBiZSByZWZlcmVuY2VkJyk7XG4gICAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIExpc3RPdXRwdXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdMaXN0T3V0cHV0UHJvcHMge1xuICAgIC8qKlxuICAgICAqIEEgU3RyaW5nIHR5cGUgdGhhdCBkZXNjcmliZXMgdGhlIG91dHB1dCB2YWx1ZS5cbiAgICAgKiBUaGUgZGVzY3JpcHRpb24gY2FuIGJlIGEgbWF4aW11bSBvZiA0IEsgaW4gbGVuZ3RoLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxpc3Qgb2YgcHJpbWl0aXZlcyB0byBleHBvcnRcbiAgICAgKi9cbiAgICByZWFkb25seSB2YWx1ZXM6IGFueVtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNlcGFyYXRvciB0byB1c2UgdG8gc2VwYXJhdGUgc3RyaW5naWZpZWQgdmFsdWVzXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcIixcIlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHNlcGFyYXRvcj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIHVzZWQgdG8gZXhwb3J0IHRoZSB2YWx1ZSBvZiB0aGlzIG91dHB1dCBhY3Jvc3Mgc3RhY2tzLiBUbyBpbXBvcnRcbiAgICAgKiB0aGUgdmFsdWUgZnJvbSBhbm90aGVyIHN0YWNrLCB1c2UgYEZuSW1wb3J0VmFsdWUoZXhwb3J0KWAuIFlvdSBjYW4gY3JlYXRlXG4gICAgICogYW4gaW1wb3J0IHZhbHVlIHRva2VuIGJ5IGNhbGxpbmcgYG91dHB1dC5tYWtlSW1wb3J0VmFsdWUoKWAuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBhdXRvbWF0aWNhbGx5IGFsbG9jYXRlIGFuIGV4cG9ydCBuYW1lXG4gICAgICogZm9yIG91dHB1dHMgYmFzZWQgb24gdGhlIHN0YWNrIG5hbWUgYW5kIHRoZSBvdXRwdXQncyBsb2dpY2FsIElELiBUb1xuICAgICAqIGNyZWF0ZSBhbiBvdXRwdXQgd2l0aG91dCBhbiBleHBvcnQsIHNldCBgZGlzYWJsZUV4cG9ydDogdHJ1ZWAuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZXhwb3J0Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIGF1dG9tYXRpYyBhbGxvY2F0aW9uIG9mIGFuIGV4cG9ydCBuYW1lIGZvciB0aGlzIG91dHB1dC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlLCB3aGljaCBtZWFucyB0aGF0IGFuIGV4cG9ydCBuYW1lIGlzIGVpdGhlciBleHBsaWNpdGx5XG4gICAgICogc3BlY2lmaWVkIG9yIGFsbG9jYXRlZCBiYXNlZCBvbiB0aGUgb3V0cHV0J3MgbG9naWNhbCBJRCBhbmQgc3RhY2sgbmFtZS5cbiAgICAgKi9cbiAgICByZWFkb25seSBkaXNhYmxlRXhwb3J0PzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEEgY29uZGl0aW9uIGZyb20gdGhlIFwiQ29uZGl0aW9uc1wiIHNlY3Rpb24gdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBvdXRwdXRcbiAgICAgKiB2YWx1ZS4gSWYgdGhlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gYGZhbHNlYCwgdGhpcyBvdXRwdXQgdmFsdWUgd2lsbCBub3RcbiAgICAgKiBiZSBpbmNsdWRlZCBpbiB0aGUgc3RhY2suXG4gICAgICovXG4gICAgcmVhZG9ubHkgY29uZGl0aW9uPzogQ29uZGl0aW9uO1xufVxuXG4vKipcbiAqIEFuIG91dHB1dCBmb3IgYSBsaXN0IG9mIHN0cmluZ3MuXG4gKlxuICogRXhwb3J0cyBhIGxpc3Qgb2YgVG9rZW5zIHZpYSBhbiBPdXRwdXQgdmFyaWFibGUsIGFuZCByZXR1cm4gYSBsaXN0IG9mIFRva2Vuc1xuICogdGhhdCBzZWxlY3RzIHRoZSBpbXBvcnRlZCB2YWx1ZXMgZm9yIHRoZW0uXG4gKi9cbmV4cG9ydCBjbGFzcyBTdHJpbmdMaXN0T3V0cHV0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHN0cmluZ2xpc3RcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgbGVuZ3RoOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2VwYXJhdG9yIHVzZWQgdG8gY29tYmluZSB0aGUgc3RyaW5nIHZhbHVlc1xuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VwYXJhdG9yOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgT3V0cHV0IG9iamVjdCB0aGF0IHdhcyBjcmVhdGVkXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBvdXRwdXQ6IE91dHB1dDtcblxuICAgIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBTdHJpbmdMaXN0T3V0cHV0UHJvcHMpIHtcbiAgICAgICAgc3VwZXIocGFyZW50LCBuYW1lKTtcblxuICAgICAgICB0aGlzLnNlcGFyYXRvciA9IHByb3BzLnNlcGFyYXRvciB8fCAnLCc7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gcHJvcHMudmFsdWVzLmxlbmd0aDtcblxuICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBPdXRwdXQodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgY29uZGl0aW9uOiBwcm9wcy5jb25kaXRpb24sXG4gICAgICAgICAgICBkaXNhYmxlRXhwb3J0OiBwcm9wcy5kaXNhYmxlRXhwb3J0LFxuICAgICAgICAgICAgZXhwb3J0OiBwcm9wcy5leHBvcnQsXG4gICAgICAgICAgICB2YWx1ZTogbmV3IEZuSm9pbih0aGlzLnNlcGFyYXRvciwgcHJvcHMudmFsdWVzKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgaW1wb3J0ZWQgdmFsdWVzIGZvciB0aGlzIE91dHB1dFxuICAgICAqL1xuICAgIHB1YmxpYyBtYWtlSW1wb3J0VmFsdWVzKCk6IFRva2VuW10ge1xuICAgICAgICBjb25zdCBjb21iaW5lZCA9IHRoaXMub3V0cHV0Lm1ha2VJbXBvcnRWYWx1ZSgpO1xuXG4gICAgICAgIGNvbnN0IHJldCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJldC5wdXNoKG5ldyBGblNlbGVjdChpLCBuZXcgRm5TcGxpdCh0aGlzLnNlcGFyYXRvciwgY29tYmluZWQpKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbn1cbiJdfQ==

@@ -21,3 +21,3 @@ "use strict";

this.properties = props;
this.value = this.ref;
this.value = new stack_1.Ref(this);
}

@@ -52,2 +52,2 @@ toCloudFormation() {

exports.Parameter = Parameter;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyYW1ldGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsbUNBQXdDO0FBaUV4Qzs7OztHQUlHO0FBQ0gsTUFBYSxTQUFVLFNBQVEscUJBQWE7SUFReEM7Ozs7Ozs7T0FPRztJQUNILFlBQVksTUFBaUIsRUFBRSxJQUFZLEVBQUUsS0FBcUI7UUFDOUQsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDMUIsQ0FBQztJQUVNLGdCQUFnQjtRQUNuQixPQUFPO1lBQ0gsVUFBVSxFQUFFO2dCQUNSLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO29CQUNkLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUk7b0JBQzFCLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU87b0JBQ2hDLGNBQWMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWM7b0JBQzlDLGFBQWEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWE7b0JBQzVDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMscUJBQXFCO29CQUM1RCxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXO29CQUN4QyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTO29CQUNwQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRO29CQUNsQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTO29CQUNwQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRO29CQUNsQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNO2lCQUNqQzthQUNKO1NBQ0osQ0FBQztJQUNOLENBQUM7SUFFRDs7O09BR0c7SUFDSSxPQUFPO1FBQ1YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7Q0FDSjtBQWpERCw4QkFpREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICcuLi9jb3JlL2NvbnN0cnVjdCc7XG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gJy4uL2NvcmUvdG9rZW5zJztcbmltcG9ydCB7IFJlZmVyZW5jZWFibGUgfSBmcm9tICcuL3N0YWNrJztcblxuZXhwb3J0IGludGVyZmFjZSBQYXJhbWV0ZXJQcm9wcyB7XG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgdHlwZSBmb3IgdGhlIHBhcmFtZXRlciAoRGF0YVR5cGUpLlxuICAgICAqL1xuICAgIHR5cGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEEgdmFsdWUgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUgZm9yIHRoZSB0ZW1wbGF0ZSB0byB1c2UgaWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkXG4gICAgICogd2hlbiBhIHN0YWNrIGlzIGNyZWF0ZWQuIElmIHlvdSBkZWZpbmUgY29uc3RyYWludHMgZm9yIHRoZSBwYXJhbWV0ZXIsIHlvdSBtdXN0IHNwZWNpZnlcbiAgICAgKiBhIHZhbHVlIHRoYXQgYWRoZXJlcyB0byB0aG9zZSBjb25zdHJhaW50cy5cbiAgICAgKi9cbiAgICBkZWZhdWx0PzogYW55O1xuXG4gICAgLyoqXG4gICAgICogQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCByZXByZXNlbnRzIHRoZSBwYXR0ZXJucyB0byBhbGxvdyBmb3IgU3RyaW5nIHR5cGVzLlxuICAgICAqL1xuICAgIGFsbG93ZWRQYXR0ZXJuPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgY29udGFpbmluZyB0aGUgbGlzdCBvZiB2YWx1ZXMgYWxsb3dlZCBmb3IgdGhlIHBhcmFtZXRlci5cbiAgICAgKi9cbiAgICBhbGxvd2VkVmFsdWVzPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBBIHN0cmluZyB0aGF0IGV4cGxhaW5zIGEgY29uc3RyYWludCB3aGVuIHRoZSBjb25zdHJhaW50IGlzIHZpb2xhdGVkLlxuICAgICAqIEZvciBleGFtcGxlLCB3aXRob3V0IGEgY29uc3RyYWludCBkZXNjcmlwdGlvbiwgYSBwYXJhbWV0ZXIgdGhhdCBoYXMgYW4gYWxsb3dlZFxuICAgICAqIHBhdHRlcm4gb2YgW0EtWmEtejAtOV0rIGRpc3BsYXlzIHRoZSBmb2xsb3dpbmcgZXJyb3IgbWVzc2FnZSB3aGVuIHRoZSB1c2VyIHNwZWNpZmllc1xuICAgICAqIGFuIGludmFsaWQgdmFsdWU6XG4gICAgICovXG4gICAgY29uc3RyYWludERlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQSBzdHJpbmcgb2YgdXAgdG8gNDAwMCBjaGFyYWN0ZXJzIHRoYXQgZGVzY3JpYmVzIHRoZSBwYXJhbWV0ZXIuXG4gICAgICovXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlZ2VyIHZhbHVlIHRoYXQgZGV0ZXJtaW5lcyB0aGUgbGFyZ2VzdCBudW1iZXIgb2YgY2hhcmFjdGVycyB5b3Ugd2FudCB0byBhbGxvdyBmb3IgU3RyaW5nIHR5cGVzLlxuICAgICAqL1xuICAgIG1heExlbmd0aD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEEgbnVtZXJpYyB2YWx1ZSB0aGF0IGRldGVybWluZXMgdGhlIGxhcmdlc3QgbnVtZXJpYyB2YWx1ZSB5b3Ugd2FudCB0byBhbGxvdyBmb3IgTnVtYmVyIHR5cGVzLlxuICAgICAqL1xuICAgIG1heFZhbHVlPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZWdlciB2YWx1ZSB0aGF0IGRldGVybWluZXMgdGhlIHNtYWxsZXN0IG51bWJlciBvZiBjaGFyYWN0ZXJzIHlvdSB3YW50IHRvIGFsbG93IGZvciBTdHJpbmcgdHlwZXMuXG4gICAgICovXG4gICAgbWluTGVuZ3RoPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQSBudW1lcmljIHZhbHVlIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc21hbGxlc3QgbnVtZXJpYyB2YWx1ZSB5b3Ugd2FudCB0byBhbGxvdyBmb3IgTnVtYmVyIHR5cGVzLlxuICAgICAqL1xuICAgIG1pblZhbHVlPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBtYXNrIHRoZSBwYXJhbWV0ZXIgdmFsdWUgd2hlbiBhbnlvbmUgbWFrZXMgYSBjYWxsIHRoYXQgZGVzY3JpYmVzIHRoZSBzdGFjay5cbiAgICAgKiBJZiB5b3Ugc2V0IHRoZSB2YWx1ZSB0byBgYHRydWVgYCwgdGhlIHBhcmFtZXRlciB2YWx1ZSBpcyBtYXNrZWQgd2l0aCBhc3Rlcmlza3MgKGBgKioqKipgYCkuXG4gICAgICovXG4gICAgbm9FY2hvPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBVc2UgdGhlIG9wdGlvbmFsIFBhcmFtZXRlcnMgc2VjdGlvbiB0byBjdXN0b21pemUgeW91ciB0ZW1wbGF0ZXMuXG4gKiBQYXJhbWV0ZXJzIGVuYWJsZSB5b3UgdG8gaW5wdXQgY3VzdG9tIHZhbHVlcyB0byB5b3VyIHRlbXBsYXRlIGVhY2ggdGltZSB5b3UgY3JlYXRlIG9yXG4gKiB1cGRhdGUgYSBzdGFjay5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhcmFtZXRlciBleHRlbmRzIFJlZmVyZW5jZWFibGUge1xuICAgIC8qKlxuICAgICAqIEEgdG9rZW4gdGhhdCByZXByZXNlbnRzIHRoZSBhY3R1YWwgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIuXG4gICAgICovXG4gICAgcHVibGljIHZhbHVlOiBUb2tlbjtcblxuICAgIHByaXZhdGUgcHJvcGVydGllczogUGFyYW1ldGVyUHJvcHM7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgcGFyYW1ldGVyIGNvbnN0cnVjdC5cbiAgICAgKiBOb3RlIHRoYXQgdGhlIG5hbWUgKGxvZ2ljYWwgSUQpIG9mIHRoZSBwYXJhbWV0ZXIgd2lsbCBkZXJpdmUgZnJvbSBpdCdzIGBjb25hbWVgIGFuZCBsb2NhdGlvblxuICAgICAqIHdpdGhpbiB0aGUgc3RhY2suIFRoZXJlZm9yZSwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBwYXJhbWV0ZXJzIGFyZSBkZWZpbmVkIGF0IHRoZSBzdGFjayBsZXZlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJlbnQgVGhlIHBhcmVudCBjb25zdHJ1Y3QuXG4gICAgICogQHBhcmFtIHByb3BzIFRoZSBwYXJhbWV0ZXIgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nLCBwcm9wczogUGFyYW1ldGVyUHJvcHMpIHtcbiAgICAgICAgc3VwZXIocGFyZW50LCBuYW1lKTtcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcHM7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnJlZjtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9DbG91ZEZvcm1hdGlvbigpOiBvYmplY3Qge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAgIFt0aGlzLmxvZ2ljYWxJZF06IHtcbiAgICAgICAgICAgICAgICAgICAgVHlwZTogdGhpcy5wcm9wZXJ0aWVzLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIERlZmF1bHQ6IHRoaXMucHJvcGVydGllcy5kZWZhdWx0LFxuICAgICAgICAgICAgICAgICAgICBBbGxvd2VkUGF0dGVybjogdGhpcy5wcm9wZXJ0aWVzLmFsbG93ZWRQYXR0ZXJuLFxuICAgICAgICAgICAgICAgICAgICBBbGxvd2VkVmFsdWVzOiB0aGlzLnByb3BlcnRpZXMuYWxsb3dlZFZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgQ29uc3RyYWludERlc2NyaXB0aW9uOiB0aGlzLnByb3BlcnRpZXMuY29uc3RyYWludERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbjogdGhpcy5wcm9wZXJ0aWVzLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGg6IHRoaXMucHJvcGVydGllcy5tYXhMZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIE1heFZhbHVlOiB0aGlzLnByb3BlcnRpZXMubWF4VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIE1pbkxlbmd0aDogdGhpcy5wcm9wZXJ0aWVzLm1pbkxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgTWluVmFsdWU6IHRoaXMucHJvcGVydGllcy5taW5WYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgTm9FY2hvOiB0aGlzLnByb3BlcnRpZXMubm9FY2hvXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFsbG93cyB1c2luZyBwYXJhbWV0ZXJzIGFzIHRva2VucyB3aXRob3V0IHRoZSBuZWVkIHRvIGRlcmVmZXJlbmNlIHRoZW0uXG4gICAgICogVGhpcyBpbXBsaWNpdGx5IGltcGxlbWVudHMgVG9rZW4sIHVudGlsIHdlIG1ha2UgaXQgYW4gaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZXNvbHZlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyYW1ldGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsbUNBQTZDO0FBaUU3Qzs7OztHQUlHO0FBQ0gsTUFBYSxTQUFVLFNBQVEscUJBQWE7SUFReEM7Ozs7Ozs7T0FPRztJQUNILFlBQVksTUFBaUIsRUFBRSxJQUFZLEVBQUUsS0FBcUI7UUFDOUQsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksV0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxnQkFBZ0I7UUFDbkIsT0FBTztZQUNILFVBQVUsRUFBRTtnQkFDUixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDZCxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJO29CQUMxQixPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPO29CQUNoQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjO29CQUM5QyxhQUFhLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhO29CQUM1QyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQjtvQkFDNUQsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVztvQkFDeEMsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUztvQkFDcEMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtvQkFDbEMsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUztvQkFDcEMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtvQkFDbEMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtpQkFDakM7YUFDSjtTQUNKLENBQUM7SUFDTixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksT0FBTztRQUNWLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0NBQ0o7QUFqREQsOEJBaURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnLi4vY29yZS9jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tICcuLi9jb3JlL3Rva2Vucyc7XG5pbXBvcnQgeyBSZWYsIFJlZmVyZW5jZWFibGUgfSBmcm9tICcuL3N0YWNrJztcblxuZXhwb3J0IGludGVyZmFjZSBQYXJhbWV0ZXJQcm9wcyB7XG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgdHlwZSBmb3IgdGhlIHBhcmFtZXRlciAoRGF0YVR5cGUpLlxuICAgICAqL1xuICAgIHR5cGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEEgdmFsdWUgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUgZm9yIHRoZSB0ZW1wbGF0ZSB0byB1c2UgaWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkXG4gICAgICogd2hlbiBhIHN0YWNrIGlzIGNyZWF0ZWQuIElmIHlvdSBkZWZpbmUgY29uc3RyYWludHMgZm9yIHRoZSBwYXJhbWV0ZXIsIHlvdSBtdXN0IHNwZWNpZnlcbiAgICAgKiBhIHZhbHVlIHRoYXQgYWRoZXJlcyB0byB0aG9zZSBjb25zdHJhaW50cy5cbiAgICAgKi9cbiAgICBkZWZhdWx0PzogYW55O1xuXG4gICAgLyoqXG4gICAgICogQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCByZXByZXNlbnRzIHRoZSBwYXR0ZXJucyB0byBhbGxvdyBmb3IgU3RyaW5nIHR5cGVzLlxuICAgICAqL1xuICAgIGFsbG93ZWRQYXR0ZXJuPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgY29udGFpbmluZyB0aGUgbGlzdCBvZiB2YWx1ZXMgYWxsb3dlZCBmb3IgdGhlIHBhcmFtZXRlci5cbiAgICAgKi9cbiAgICBhbGxvd2VkVmFsdWVzPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBBIHN0cmluZyB0aGF0IGV4cGxhaW5zIGEgY29uc3RyYWludCB3aGVuIHRoZSBjb25zdHJhaW50IGlzIHZpb2xhdGVkLlxuICAgICAqIEZvciBleGFtcGxlLCB3aXRob3V0IGEgY29uc3RyYWludCBkZXNjcmlwdGlvbiwgYSBwYXJhbWV0ZXIgdGhhdCBoYXMgYW4gYWxsb3dlZFxuICAgICAqIHBhdHRlcm4gb2YgW0EtWmEtejAtOV0rIGRpc3BsYXlzIHRoZSBmb2xsb3dpbmcgZXJyb3IgbWVzc2FnZSB3aGVuIHRoZSB1c2VyIHNwZWNpZmllc1xuICAgICAqIGFuIGludmFsaWQgdmFsdWU6XG4gICAgICovXG4gICAgY29uc3RyYWludERlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQSBzdHJpbmcgb2YgdXAgdG8gNDAwMCBjaGFyYWN0ZXJzIHRoYXQgZGVzY3JpYmVzIHRoZSBwYXJhbWV0ZXIuXG4gICAgICovXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlZ2VyIHZhbHVlIHRoYXQgZGV0ZXJtaW5lcyB0aGUgbGFyZ2VzdCBudW1iZXIgb2YgY2hhcmFjdGVycyB5b3Ugd2FudCB0byBhbGxvdyBmb3IgU3RyaW5nIHR5cGVzLlxuICAgICAqL1xuICAgIG1heExlbmd0aD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEEgbnVtZXJpYyB2YWx1ZSB0aGF0IGRldGVybWluZXMgdGhlIGxhcmdlc3QgbnVtZXJpYyB2YWx1ZSB5b3Ugd2FudCB0byBhbGxvdyBmb3IgTnVtYmVyIHR5cGVzLlxuICAgICAqL1xuICAgIG1heFZhbHVlPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZWdlciB2YWx1ZSB0aGF0IGRldGVybWluZXMgdGhlIHNtYWxsZXN0IG51bWJlciBvZiBjaGFyYWN0ZXJzIHlvdSB3YW50IHRvIGFsbG93IGZvciBTdHJpbmcgdHlwZXMuXG4gICAgICovXG4gICAgbWluTGVuZ3RoPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQSBudW1lcmljIHZhbHVlIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc21hbGxlc3QgbnVtZXJpYyB2YWx1ZSB5b3Ugd2FudCB0byBhbGxvdyBmb3IgTnVtYmVyIHR5cGVzLlxuICAgICAqL1xuICAgIG1pblZhbHVlPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBtYXNrIHRoZSBwYXJhbWV0ZXIgdmFsdWUgd2hlbiBhbnlvbmUgbWFrZXMgYSBjYWxsIHRoYXQgZGVzY3JpYmVzIHRoZSBzdGFjay5cbiAgICAgKiBJZiB5b3Ugc2V0IHRoZSB2YWx1ZSB0byBgYHRydWVgYCwgdGhlIHBhcmFtZXRlciB2YWx1ZSBpcyBtYXNrZWQgd2l0aCBhc3Rlcmlza3MgKGBgKioqKipgYCkuXG4gICAgICovXG4gICAgbm9FY2hvPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBVc2UgdGhlIG9wdGlvbmFsIFBhcmFtZXRlcnMgc2VjdGlvbiB0byBjdXN0b21pemUgeW91ciB0ZW1wbGF0ZXMuXG4gKiBQYXJhbWV0ZXJzIGVuYWJsZSB5b3UgdG8gaW5wdXQgY3VzdG9tIHZhbHVlcyB0byB5b3VyIHRlbXBsYXRlIGVhY2ggdGltZSB5b3UgY3JlYXRlIG9yXG4gKiB1cGRhdGUgYSBzdGFjay5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhcmFtZXRlciBleHRlbmRzIFJlZmVyZW5jZWFibGUge1xuICAgIC8qKlxuICAgICAqIEEgdG9rZW4gdGhhdCByZXByZXNlbnRzIHRoZSBhY3R1YWwgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIuXG4gICAgICovXG4gICAgcHVibGljIHZhbHVlOiBUb2tlbjtcblxuICAgIHByaXZhdGUgcHJvcGVydGllczogUGFyYW1ldGVyUHJvcHM7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgcGFyYW1ldGVyIGNvbnN0cnVjdC5cbiAgICAgKiBOb3RlIHRoYXQgdGhlIG5hbWUgKGxvZ2ljYWwgSUQpIG9mIHRoZSBwYXJhbWV0ZXIgd2lsbCBkZXJpdmUgZnJvbSBpdCdzIGBjb25hbWVgIGFuZCBsb2NhdGlvblxuICAgICAqIHdpdGhpbiB0aGUgc3RhY2suIFRoZXJlZm9yZSwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBwYXJhbWV0ZXJzIGFyZSBkZWZpbmVkIGF0IHRoZSBzdGFjayBsZXZlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJlbnQgVGhlIHBhcmVudCBjb25zdHJ1Y3QuXG4gICAgICogQHBhcmFtIHByb3BzIFRoZSBwYXJhbWV0ZXIgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nLCBwcm9wczogUGFyYW1ldGVyUHJvcHMpIHtcbiAgICAgICAgc3VwZXIocGFyZW50LCBuYW1lKTtcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcHM7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgUmVmKHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b0Nsb3VkRm9ybWF0aW9uKCk6IG9iamVjdCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgW3RoaXMubG9naWNhbElkXToge1xuICAgICAgICAgICAgICAgICAgICBUeXBlOiB0aGlzLnByb3BlcnRpZXMudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgRGVmYXVsdDogdGhpcy5wcm9wZXJ0aWVzLmRlZmF1bHQsXG4gICAgICAgICAgICAgICAgICAgIEFsbG93ZWRQYXR0ZXJuOiB0aGlzLnByb3BlcnRpZXMuYWxsb3dlZFBhdHRlcm4sXG4gICAgICAgICAgICAgICAgICAgIEFsbG93ZWRWYWx1ZXM6IHRoaXMucHJvcGVydGllcy5hbGxvd2VkVmFsdWVzLFxuICAgICAgICAgICAgICAgICAgICBDb25zdHJhaW50RGVzY3JpcHRpb246IHRoaXMucHJvcGVydGllcy5jb25zdHJhaW50RGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uOiB0aGlzLnByb3BlcnRpZXMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIE1heExlbmd0aDogdGhpcy5wcm9wZXJ0aWVzLm1heExlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgTWF4VmFsdWU6IHRoaXMucHJvcGVydGllcy5tYXhWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgTWluTGVuZ3RoOiB0aGlzLnByb3BlcnRpZXMubWluTGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBNaW5WYWx1ZTogdGhpcy5wcm9wZXJ0aWVzLm1pblZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBOb0VjaG86IHRoaXMucHJvcGVydGllcy5ub0VjaG9cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHVzaW5nIHBhcmFtZXRlcnMgYXMgdG9rZW5zIHdpdGhvdXQgdGhlIG5lZWQgdG8gZGVyZWZlcmVuY2UgdGhlbS5cbiAgICAgKiBUaGlzIGltcGxpY2l0bHkgaW1wbGVtZW50cyBUb2tlbiwgdW50aWwgd2UgbWFrZSBpdCBhbiBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgcHVibGljIHJlc29sdmUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxufVxuIl19
import { Token } from '../core/tokens';
import { Arn } from './arn';
export declare class PolicyDocument extends Token {

@@ -50,4 +49,4 @@ private readonly baseDocument?;

export declare class ArnPrincipal extends PolicyPrincipal {
readonly arn: Arn;
constructor(arn: Arn);
readonly arn: string;
constructor(arn: string);
policyFragment(): PrincipalPolicyFragment;

@@ -131,3 +130,3 @@ }

addPrincipal(principal: PolicyPrincipal): PolicyStatement;
addAwsPrincipal(arn: Arn): PolicyStatement;
addAwsPrincipal(arn: string): PolicyStatement;
addAwsAccountPrincipal(accountId: string): PolicyStatement;

@@ -139,3 +138,3 @@ addServicePrincipal(service: string): PolicyStatement;

addAccountRootPrincipal(): PolicyStatement;
addResource(resource: Arn): PolicyStatement;
addResource(arn: string): PolicyStatement;
/**

@@ -145,3 +144,3 @@ * Adds a ``"*"`` resource to this statement.

addAllResources(): PolicyStatement;
addResources(...resources: Arn[]): PolicyStatement;
addResources(...arns: string[]): PolicyStatement;
/**

@@ -148,0 +147,0 @@ * Indicates if this permission as at least one resource associated with it.

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tokens_1 = require("../core/tokens");
const arn_1 = require("./arn");
const fn_1 = require("./fn");
const pseudo_1 = require("./pseudo");

@@ -81,3 +79,3 @@ class PolicyDocument extends tokens_1.Token {

constructor(accountId) {
super(new arn_1.Arn(new fn_1.FnConcat('arn:', new pseudo_1.AwsPartition(), ':iam::', accountId, ':root')));
super(`arn:${new pseudo_1.AwsPartition()}:iam::${accountId}:root`);
this.accountId = accountId;

@@ -217,4 +215,4 @@ }

//
addResource(resource) {
this.resource.push(resource);
addResource(arn) {
this.resource.push(arn);
return this;

@@ -226,6 +224,6 @@ }

addAllResources() {
return this.addResource(new arn_1.Arn('*'));
return this.addResource('*');
}
addResources(...resources) {
resources.forEach(r => this.addResource(r));
addResources(...arns) {
arns.forEach(r => this.addResource(r));
return this;

@@ -335,2 +333,2 @@ }

})(PolicyStatementEffect = exports.PolicyStatementEffect || (exports.PolicyStatementEffect = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBlcm1pc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQ0FBdUM7QUFDdkMsK0JBQTRCO0FBQzVCLDZCQUFnQztBQUNoQyxxQ0FBc0Q7QUFFdEQsTUFBYSxjQUFlLFNBQVEsY0FBSztJQUdyQzs7OztPQUlHO0lBQ0gsWUFBNkIsWUFBa0I7UUFDM0MsS0FBSyxFQUFFLENBQUM7UUFEaUIsaUJBQVksR0FBWixZQUFZLENBQU07UUFQdkMsZUFBVSxHQUFHLElBQUksS0FBSyxFQUFtQixDQUFDO0lBU2xELENBQUM7SUFFTSxPQUFPO1FBQ1YsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsT0FBTyxTQUFTLENBQUM7U0FDcEI7UUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUcsQ0FBQztRQUNyQyxHQUFHLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxTQUFTLElBQUksRUFBRyxDQUFDO1FBQ3JDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sSUFBSSxZQUFZLENBQUM7UUFDMUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEQsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksY0FBYztRQUNkLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVNLFlBQVksQ0FBQyxTQUEwQjtRQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQztJQUNo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QU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDbEMsT0FBTyxTQUFTLENBQUM7aUJBQ3BCO2FBQ0o7WUFFRCxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDO0lBQ0wsQ0FBQztDQUNKO0FBeE1ELDBDQXdNQztBQUVELElBQVkscUJBR1g7QUFIRCxXQUFZLHFCQUFxQjtJQUM3Qix3Q0FBZSxDQUFBO0lBQ2Ysc0NBQWEsQ0FBQTtBQUNqQixDQUFDLEVBSFcscUJBQXFCLEdBQXJCLDZCQUFxQixLQUFyQiw2QkFBcUIsUUFHaEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUb2tlbiB9IGZyb20gJy4uL2NvcmUvdG9rZW5zJztcbmltcG9ydCB7IEFybiB9IGZyb20gJy4vYXJuJztcbmltcG9ydCB7IEZuQ29uY2F0IH0gZnJvbSAnLi9mbic7XG5pbXBvcnQgeyBBd3NBY2NvdW50SWQsIEF3c1BhcnRpdGlvbiB9IGZyb20gJy4vcHNldWRvJztcblxuZXhwb3J0IGNsYXNzIFBvbGljeURvY3VtZW50IGV4dGVuZHMgVG9rZW4ge1xuICAgIHByaXZhdGUgc3RhdGVtZW50cyA9IG5ldyBBcnJheTxQb2xpY3lTdGF0ZW1lbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IElBTSBwb2xpY3kgZG9jdW1lbnQuXG4gICAgICogQHBhcmFtIGRlZmF1bHREb2N1bWVudCBBbiBJQU0gcG9saWN5IGRvY3VtZW50IHRvIHVzZSBhcyBhbiBpbml0aWFsXG4gICAgICogcG9saWN5LiBBbGwgc3RhdGVtZW50cyBvZiB0aGlzIGRvY3VtZW50IHdpbGwgYmUgY29waWVkIGluLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYmFzZURvY3VtZW50PzogYW55KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc29sdmUoKTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuYmFzZURvY3VtZW50IHx8IHsgfTtcbiAgICAgICAgZG9jLlN0YXRlbWVudCA9IGRvYy5TdGF0ZW1lbnQgfHwgWyBdO1xuICAgICAgICBkb2MuVmVyc2lvbiA9IGRvYy5WZXJzaW9uIHx8ICcyMDEyLTEwLTE3JztcbiAgICAgICAgZG9jLlN0YXRlbWVudCA9IGRvYy5TdGF0ZW1lbnQuY29uY2F0KHRoaXMuc3RhdGVtZW50cyk7XG4gICAgICAgIHJldHVybiBkb2M7XG4gICAgfVxuXG4gICAgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlbWVudHMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2Ygc3RhdGVtZW50cyBhbHJlYWR5IGFkZGVkIHRvIHRoaXMgcG9saWN5LlxuICAgICAqIENhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gZ2VuZXJhdGUgdW5pdXFlIFwic2lkXCJzIHdpdGhpbiB0aGUgcG9saWN5LlxuICAgICAqL1xuICAgIGdldCBzdGF0ZW1lbnRDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnRzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkU3RhdGVtZW50KHN0YXRlbWVudDogUG9saWN5U3RhdGVtZW50KTogUG9saWN5RG9jdW1lbnQge1xuICAgICAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBJQU0gcHJpbmNpcGFsLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUG9saWN5UHJpbmNpcGFsIHtcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgUHJpbmNpcGFsIGlzIHVzZWQgaW4gYW4gQXNzdW1lUm9sZSBwb2xpY3ksIHRoZSBhY3Rpb24gdG8gdXNlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBhc3N1bWVSb2xlQWN0aW9uOiBzdHJpbmcgPSAnc3RzOkFzc3VtZVJvbGUnO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBwb2xpY3kgZnJhZ21lbnQgdGhhdCBpZGVudGlmaWVzIHRoaXMgcHJpbmNpcGFsIGluIGEgUG9saWN5LlxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBwb2xpY3lGcmFnbWVudCgpOiBQcmluY2lwYWxQb2xpY3lGcmFnbWVudDtcbn1cblxuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2YgdGhlIGZpZWxkcyBpbiBhIFBvbGljeVN0YXRlbWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IGEgcHJpbmNpcGFsLlxuICpcbiAqIFRoaXMgY29uc2lzdHMgb2YgdGhlIEpTT04gdXNlZCBpbiB0aGUgXCJQcmluY2lwYWxcIiBmaWVsZCwgYW5kIG9wdGlvbmFsbHkgYVxuICogc2V0IG9mIFwiQ29uZGl0aW9uXCJzIHRoYXQgbmVlZCB0byBiZSBhcHBsaWVkIHRvIHRoZSBwb2xpY3kuXG4gKi9cbmV4cG9ydCBjbGFzcyBQcmluY2lwYWxQb2xpY3lGcmFnbWVudCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBwcmluY2lwYWxKc29uOiBhbnksXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBjb25kaXRpb25zOiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9KSB7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXJuUHJpbmNpcGFsIGV4dGVuZHMgUG9saWN5UHJpbmNpcGFsIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgYXJuOiBBcm4pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcG9saWN5RnJhZ21lbnQoKTogUHJpbmNpcGFsUG9saWN5RnJhZ21lbnQge1xuICAgICAgICByZXR1cm4gbmV3IFByaW5jaXBhbFBvbGljeUZyYWdtZW50KHsgQVdTOiB0aGlzLmFybiB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY2NvdW50UHJpbmNpcGFsIGV4dGVuZHMgQXJuUHJpbmNpcGFsIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgYWNjb3VudElkOiBhbnkpIHtcbiAgICAgICAgc3VwZXIobmV3IEFybihuZXcgRm5Db25jYXQoJ2FybjonLCBuZXcgQXdzUGFydGl0aW9uKCksICc6aWFtOjonLCBhY2NvdW50SWQsICc6cm9vdCcpKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEFuIElBTSBwcmluY2lwYWwgdGhhdCByZXByZXNlbnRzIGFuIEFXUyBzZXJ2aWNlIChpLmUuIHNxcy5hbWF6b25hd3MuY29tKS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlcnZpY2VQcmluY2lwYWwgZXh0ZW5kcyBQb2xpY3lQcmluY2lwYWwge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBzZXJ2aWNlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcG9saWN5RnJhZ21lbnQoKTogUHJpbmNpcGFsUG9saWN5RnJhZ21lbnQge1xuICAgICAgICByZXR1cm4gbmV3IFByaW5jaXBhbFBvbGljeUZyYWdtZW50KHsgU2VydmljZTogdGhpcy5zZXJ2aWNlIH0pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBIHBvbGljeSBwcmluaWNpcGFsIGZvciBjYW5vbmljYWxVc2VySWRzIC0gdXNlZnVsIGZvciBTMyBidWNrZXQgcG9saWNpZXMgdGhhdCB1c2VcbiAqIE9yaWdpbiBBY2Nlc3MgaWRlbnRpdGllcy5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dlbmVyYWwvbGF0ZXN0L2dyL2FjY3QtaWRlbnRpZmllcnMuaHRtbFxuICpcbiAqIGFuZFxuICpcbiAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9wcml2YXRlLWNvbnRlbnQtcmVzdHJpY3RpbmctYWNjZXNzLXRvLXMzLmh0bWxcbiAqXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIENhbm9uaWNhbFVzZXJQcmluY2lwYWwgZXh0ZW5kcyBQb2xpY3lQcmluY2lwYWwge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBjYW5vbmljYWxVc2VySWQ6IGFueSkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwb2xpY3lGcmFnbWVudCgpOiBQcmluY2lwYWxQb2xpY3lGcmFnbWVudCB7XG4gICAgICAgIHJldHVybiBuZXcgUHJpbmNpcGFsUG9saWN5RnJhZ21lbnQoeyBDYW5vbmljYWxVc2VyOiB0aGlzLmNhbm9uaWNhbFVzZXJJZCB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGZWRlcmF0ZWRQcmluY2lwYWwgZXh0ZW5kcyBQb2xpY3lQcmluY2lwYWwge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZmVkZXJhdGVkOiBhbnksXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBjb25kaXRpb25zOiB7W2tleTogc3RyaW5nXTogYW55fSxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGFzc3VtZVJvbGVBY3Rpb246IHN0cmluZyA9ICdzdHM6QXNzdW1lUm9sZScpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcG9saWN5RnJhZ21lbnQoKTogUHJpbmNpcGFsUG9saWN5RnJhZ21lbnQge1xuICAgICAgICByZXR1cm4gbmV3IFByaW5jaXBhbFBvbGljeUZyYWdtZW50KHsgRmVkZXJhdGVkOiB0aGlzLmZlZGVyYXRlZCB9LCB0aGlzLmNvbmRpdGlvbnMpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjY291bnRSb290UHJpbmNpcGFsIGV4dGVuZHMgQWNjb3VudFByaW5jaXBhbCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKG5ldyBBd3NBY2NvdW50SWQoKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEEgcHJpbmNpcGFsIHJlcHJlc2VudGluZyBhbGwgaWRlbnRpdGllcyBpbiBhbGwgYWNjb3VudHNcbiAqL1xuZXhwb3J0IGNsYXNzIEFueW9uZSBleHRlbmRzIFBvbGljeVByaW5jaXBhbCB7XG4gICAgLyoqXG4gICAgICogSW50ZXJmYWNlIGNvbXBhdGliaWxpdHkgd2l0aCBBY2NvdW50UHJpbmNpcGFsIGZvciB0aGUgcHVycG9zZXMgb2YgdGhlIExhbWJkYSBsaWJyYXJ5XG4gICAgICpcbiAgICAgKiBUaGUgTGFtYmRhJ3MgYWRkUGVybWlzc2lvbigpIGNhbGwgd29ya3MgZGlmZmVyZW50bHkgZnJvbSByZWd1bGFyXG4gICAgICogc3RhdGVtZW50cywgYW5kIHdpbGwgdXNlIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IGRpcmVjdGx5IGlmIHByZXNlbnRcbiAgICAgKiAod2hpY2ggbGVhZHMgdG8gdGhlIGNvcnJlY3Qgc3RhdGVtZW50IHVsdGltYXRlbHkpLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBhY2NvdW50SWQgPSAnKic7XG5cbiAgICBwdWJsaWMgcG9saWN5RnJhZ21lbnQoKTogUHJpbmNpcGFsUG9saWN5RnJhZ21lbnQge1xuICAgICAgICByZXR1cm4gbmV3IFByaW5jaXBhbFBvbGljeUZyYWdtZW50KCcqJyk7XG4gICAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBzdGF0ZW1lbnQgaW4gYW4gSUFNIHBvbGljeSBkb2N1bWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBvbGljeVN0YXRlbWVudCBleHRlbmRzIFRva2VuIHtcbiAgICBwcml2YXRlIGFjdGlvbiA9IG5ldyBBcnJheTxhbnk+KCk7XG4gICAgcHJpdmF0ZSBwcmluY2lwYWwgPSBuZXcgQXJyYXk8YW55PigpO1xuICAgIHByaXZhdGUgcmVzb3VyY2UgPSBuZXcgQXJyYXk8YW55PigpO1xuICAgIHByaXZhdGUgY29uZGl0aW9uOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0geyB9O1xuICAgIHByaXZhdGUgZWZmZWN0PzogUG9saWN5U3RhdGVtZW50RWZmZWN0O1xuICAgIHByaXZhdGUgc2lkPzogYW55O1xuXG4gICAgY29uc3RydWN0b3IoZWZmZWN0OiBQb2xpY3lTdGF0ZW1lbnRFZmZlY3QgPSBQb2xpY3lTdGF0ZW1lbnRFZmZlY3QuQWxsb3cpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5lZmZlY3QgPSBlZmZlY3Q7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBBY3Rpb25zXG4gICAgLy9cblxuICAgIHB1YmxpYyBhZGRBY3Rpb24oYWN0aW9uOiBzdHJpbmcpOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgICAgICB0aGlzLmFjdGlvbi5wdXNoKGFjdGlvbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRBY3Rpb25zKC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgYWN0aW9ucy5mb3JFYWNoKGFjdGlvbiA9PiB0aGlzLmFkZEFjdGlvbihhY3Rpb24pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBQcmluY2lwYWxcbiAgICAvL1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoaXMgcGVybWlzc2lvbiBoYXMgYSBcIlByaW5jaXBhbFwiIHNlY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIGdldCBoYXNQcmluY2lwYWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaW5jaXBhbCAmJiB0aGlzLnByaW5jaXBhbC5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRQcmluY2lwYWwocHJpbmNpcGFsOiBQb2xpY3lQcmluY2lwYWwpOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgICAgICBjb25zdCBmcmFnbWVudCA9IHByaW5jaXBhbC5wb2xpY3lGcmFnbWVudCgpO1xuICAgICAgICB0aGlzLnByaW5jaXBhbC5wdXNoKGZyYWdtZW50LnByaW5jaXBhbEpzb24pO1xuICAgICAgICB0aGlzLmFkZENvbmRpdGlvbnMoZnJhZ21lbnQuY29uZGl0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRBd3NQcmluY2lwYWwoYXJuOiBBcm4pOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRQcmluY2lwYWwobmV3IEFyblByaW5jaXBhbChhcm4pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQXdzQWNjb3VudFByaW5jaXBhbChhY2NvdW50SWQ6IHN0cmluZyk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFByaW5jaXBhbChuZXcgQWNjb3VudFByaW5jaXBhbChhY2NvdW50SWQpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkU2VydmljZVByaW5jaXBhbChzZXJ2aWNlOiBzdHJpbmcpOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRQcmluY2lwYWwobmV3IFNlcnZpY2VQcmluY2lwYWwoc2VydmljZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGZWRlcmF0ZWRQcmluY2lwYWwoZmVkZXJhdGVkOiBhbnksIGNvbmRpdGlvbnM6IHtba2V5OiBzdHJpbmddOiBhbnl9KTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUHJpbmNpcGFsKG5ldyBGZWRlcmF0ZWRQcmluY2lwYWwoZmVkZXJhdGVkLCBjb25kaXRpb25zKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEFjY291bnRSb290UHJpbmNpcGFsKCk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFByaW5jaXBhbChuZXcgQWNjb3VudFJvb3RQcmluY2lwYWwoKSk7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBSZXNvdXJjZXNcbiAgICAvL1xuXG4gICAgcHVibGljIGFkZFJlc291cmNlKHJlc291cmNlOiBBcm4pOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgICAgICB0aGlzLnJlc291cmNlLnB1c2gocmVzb3VyY2UpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgYGBcIipcImBgIHJlc291cmNlIHRvIHRoaXMgc3RhdGVtZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRBbGxSZXNvdXJjZXMoKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmVzb3VyY2UobmV3IEFybignKicpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUmVzb3VyY2VzKC4uLnJlc291cmNlczogQXJuW10pOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgICAgICByZXNvdXJjZXMuZm9yRWFjaChyID0+IHRoaXMuYWRkUmVzb3VyY2UocikpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhpcyBwZXJtaXNzaW9uIGFzIGF0IGxlYXN0IG9uZSByZXNvdXJjZSBhc3NvY2lhdGVkIHdpdGggaXQuXG4gICAgICovXG4gICAgcHVibGljIGdldCBoYXNSZXNvdXJjZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2UgJiYgdGhpcy5yZXNvdXJjZS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZXNjcmliZShzaWQ6IHN0cmluZyk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgICAgIHRoaXMuc2lkID0gc2lkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIEVmZmVjdFxuICAgIC8vXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwZXJtaXNzaW9uIGVmZmVjdCB0byBkZW55IGFjY2VzcyB0byByZXNvdXJjZXMuXG4gICAgICovXG4gICAgcHVibGljIGFsbG93KCk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgICAgIHRoaXMuZWZmZWN0ID0gUG9saWN5U3RhdGVtZW50RWZmZWN0LkFsbG93O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwZXJtaXNzaW9uIGVmZmVjdCB0byBhbGxvdyBhY2Nlc3MgdG8gcmVzb3VyY2VzLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZW55KCk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgICAgIHRoaXMuZWZmZWN0ID0gUG9saWN5U3RhdGVtZW50RWZmZWN0LkRlbnk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gQ29uZGl0aW9uXG4gICAgLy9cblxuICAgIC8qKlxuICAgICAqIEFkZCBhIGNvbmRpdGlvbiB0byB0aGUgUG9saWN5XG4gICAgICovXG4gICAgcHVibGljIGFkZENvbmRpdGlvbihrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIG11bHRpcGxlIGNvbmRpdGlvbnMgdG8gdGhlIFBvbGljeVxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRDb25kaXRpb25zKGNvbmRpdGlvbnM6IHtba2V5OiBzdHJpbmddOiBhbnl9KTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgT2JqZWN0LmtleXMoY29uZGl0aW9ucykubWFwKGtleSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZENvbmRpdGlvbihrZXksIGNvbmRpdGlvbnNba2V5XSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSBjb25kaXRpb24gdG8gdGhlIFBvbGljeS5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gVXNlIGFkZENvbmRpdGlvbigpIGluc3RlYWQuXG4gICAgICovXG4gICAgcHVibGljIHNldENvbmRpdGlvbihrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZENvbmRpdGlvbihrZXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbGltaXRUb0FjY291bnQoYWNjb3VudElkOiBzdHJpbmcpOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRDb25kaXRpb24oJ1N0cmluZ0VxdWFscycsIG5ldyBUb2tlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geyAnc3RzOkV4dGVybmFsSWQnOiBhY2NvdW50SWQgfTtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gU2VyaWFsaXphdGlvblxuICAgIC8vXG5cbiAgICBwdWJsaWMgcmVzb2x2ZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy50b0pzb24oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9Kc29uKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBBY3Rpb246IF9ub3JtKHRoaXMuYWN0aW9uKSxcbiAgICAgICAgICAgIENvbmRpdGlvbjogX25vcm0odGhpcy5jb25kaXRpb24pLFxuICAgICAgICAgICAgRWZmZWN0OiBfbm9ybSh0aGlzLmVmZmVjdCksXG4gICAgICAgICAgICBQcmluY2lwYWw6IF9ub3JtKHRoaXMucHJpbmNpcGFsKSxcbiAgICAgICAgICAgIFJlc291cmNlOiBfbm9ybSh0aGlzLnJlc291cmNlKSxcbiAgICAgICAgICAgIFNpZDogX25vcm0odGhpcy5zaWQpLFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIF9ub3JtKHZhbHVlczogYW55KSB7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YodmFsdWVzKSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWx1ZXMgfHwgdmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXNbMF07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZih2YWx1ZXMpID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh2YWx1ZXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gUG9saWN5U3RhdGVtZW50RWZmZWN0IHtcbiAgICBBbGxvdyA9ICdBbGxvdycsXG4gICAgRGVueSA9ICdEZW55Jyxcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBlcm1pc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQ0FBdUM7QUFDdkMscUNBQXNEO0FBRXRELE1BQWEsY0FBZSxTQUFRLGNBQUs7SUFHckM7Ozs7T0FJRztJQUNILFlBQTZCLFlBQWtCO1FBQzNDLEtBQUssRUFBRSxDQUFDO1FBRGlCLGlCQUFZLEdBQVosWUFBWSxDQUFNO1FBUHZDLGVBQVUsR0FBRyxJQUFJLEtBQUssRUFBbUIsQ0FBQztJQVNsRCxDQUFDO0lBRU0sT0FBTztRQUNWLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLE9BQU8sU0FBUyxDQUFDO1NBQ3BCO1FBRUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFHLENBQUM7UUFDckMsR0FBRyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxJQUFJLEVBQUcsQ0FBQztRQUNyQyxHQUFHLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLElBQUksWUFBWSxDQUFDO1FBQzFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLGNBQWM7UUFDZCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO0lBQ2xDLENBQUM7SUFFTSxZQUFZLENBQUMsU0FBMEI7UUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKO0FBeENELHdDQXdDQztB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UUFDbEIsQ0FBQztJQUNMLENBQUM7Q0FDSjtBQXhNRCwwQ0F3TUM7QUFFRCxJQUFZLHFCQUdYO0FBSEQsV0FBWSxxQkFBcUI7SUFDN0Isd0NBQWUsQ0FBQTtJQUNmLHNDQUFhLENBQUE7QUFDakIsQ0FBQyxFQUhXLHFCQUFxQixHQUFyQiw2QkFBcUIsS0FBckIsNkJBQXFCLFFBR2hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVG9rZW4gfSBmcm9tICcuLi9jb3JlL3Rva2Vucyc7XG5pbXBvcnQgeyBBd3NBY2NvdW50SWQsIEF3c1BhcnRpdGlvbiB9IGZyb20gJy4vcHNldWRvJztcblxuZXhwb3J0IGNsYXNzIFBvbGljeURvY3VtZW50IGV4dGVuZHMgVG9rZW4ge1xuICAgIHByaXZhdGUgc3RhdGVtZW50cyA9IG5ldyBBcnJheTxQb2xpY3lTdGF0ZW1lbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IElBTSBwb2xpY3kgZG9jdW1lbnQuXG4gICAgICogQHBhcmFtIGRlZmF1bHREb2N1bWVudCBBbiBJQU0gcG9saWN5IGRvY3VtZW50IHRvIHVzZSBhcyBhbiBpbml0aWFsXG4gICAgICogcG9saWN5LiBBbGwgc3RhdGVtZW50cyBvZiB0aGlzIGRvY3VtZW50IHdpbGwgYmUgY29waWVkIGluLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYmFzZURvY3VtZW50PzogYW55KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc29sdmUoKTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuYmFzZURvY3VtZW50IHx8IHsgfTtcbiAgICAgICAgZG9jLlN0YXRlbWVudCA9IGRvYy5TdGF0ZW1lbnQgfHwgWyBdO1xuICAgICAgICBkb2MuVmVyc2lvbiA9IGRvYy5WZXJzaW9uIHx8ICcyMDEyLTEwLTE3JztcbiAgICAgICAgZG9jLlN0YXRlbWVudCA9IGRvYy5TdGF0ZW1lbnQuY29uY2F0KHRoaXMuc3RhdGVtZW50cyk7XG4gICAgICAgIHJldHVybiBkb2M7XG4gICAgfVxuXG4gICAgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlbWVudHMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2Ygc3RhdGVtZW50cyBhbHJlYWR5IGFkZGVkIHRvIHRoaXMgcG9saWN5LlxuICAgICAqIENhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gZ2VuZXJhdGUgdW5pdXFlIFwic2lkXCJzIHdpdGhpbiB0aGUgcG9saWN5LlxuICAgICAqL1xuICAgIGdldCBzdGF0ZW1lbnRDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnRzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkU3RhdGVtZW50KHN0YXRlbWVudDogUG9saWN5U3RhdGVtZW50KTogUG9saWN5RG9jdW1lbnQge1xuICAgICAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBJQU0gcHJpbmNpcGFsLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUG9saWN5UHJpbmNpcGFsIHtcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgUHJpbmNpcGFsIGlzIHVzZWQgaW4gYW4gQXNzdW1lUm9sZSBwb2xpY3ksIHRoZSBhY3Rpb24gdG8gdXNlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBhc3N1bWVSb2xlQWN0aW9uOiBzdHJpbmcgPSAnc3RzOkFzc3VtZVJvbGUnO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBwb2xpY3kgZnJhZ21lbnQgdGhhdCBpZGVudGlmaWVzIHRoaXMgcHJpbmNpcGFsIGluIGEgUG9saWN5LlxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBwb2xpY3lGcmFnbWVudCgpOiBQcmluY2lwYWxQb2xpY3lGcmFnbWVudDtcbn1cblxuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2YgdGhlIGZpZWxkcyBpbiBhIFBvbGljeVN0YXRlbWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IGEgcHJpbmNpcGFsLlxuICpcbiAqIFRoaXMgY29uc2lzdHMgb2YgdGhlIEpTT04gdXNlZCBpbiB0aGUgXCJQcmluY2lwYWxcIiBmaWVsZCwgYW5kIG9wdGlvbmFsbHkgYVxuICogc2V0IG9mIFwiQ29uZGl0aW9uXCJzIHRoYXQgbmVlZCB0byBiZSBhcHBsaWVkIHRvIHRoZSBwb2xpY3kuXG4gKi9cbmV4cG9ydCBjbGFzcyBQcmluY2lwYWxQb2xpY3lGcmFnbWVudCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBwcmluY2lwYWxKc29uOiBhbnksXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBjb25kaXRpb25zOiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9KSB7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXJuUHJpbmNpcGFsIGV4dGVuZHMgUG9saWN5UHJpbmNpcGFsIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgYXJuOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcG9saWN5RnJhZ21lbnQoKTogUHJpbmNpcGFsUG9saWN5RnJhZ21lbnQge1xuICAgICAgICByZXR1cm4gbmV3IFByaW5jaXBhbFBvbGljeUZyYWdtZW50KHsgQVdTOiB0aGlzLmFybiB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY2NvdW50UHJpbmNpcGFsIGV4dGVuZHMgQXJuUHJpbmNpcGFsIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgYWNjb3VudElkOiBhbnkpIHtcbiAgICAgICAgc3VwZXIoYGFybjoke25ldyBBd3NQYXJ0aXRpb24oKX06aWFtOjoke2FjY291bnRJZH06cm9vdGApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBbiBJQU0gcHJpbmNpcGFsIHRoYXQgcmVwcmVzZW50cyBhbiBBV1Mgc2VydmljZSAoaS5lLiBzcXMuYW1hem9uYXdzLmNvbSkuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlUHJpbmNpcGFsIGV4dGVuZHMgUG9saWN5UHJpbmNpcGFsIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgc2VydmljZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHBvbGljeUZyYWdtZW50KCk6IFByaW5jaXBhbFBvbGljeUZyYWdtZW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcmluY2lwYWxQb2xpY3lGcmFnbWVudCh7IFNlcnZpY2U6IHRoaXMuc2VydmljZSB9KTtcbiAgICB9XG59XG5cbi8qKlxuICogQSBwb2xpY3kgcHJpbmljaXBhbCBmb3IgY2Fub25pY2FsVXNlcklkcyAtIHVzZWZ1bCBmb3IgUzMgYnVja2V0IHBvbGljaWVzIHRoYXQgdXNlXG4gKiBPcmlnaW4gQWNjZXNzIGlkZW50aXRpZXMuXG4gKlxuICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nZW5lcmFsL2xhdGVzdC9nci9hY2N0LWlkZW50aWZpZXJzLmh0bWxcbiAqXG4gKiBhbmRcbiAqXG4gKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvcHJpdmF0ZS1jb250ZW50LXJlc3RyaWN0aW5nLWFjY2Vzcy10by1zMy5odG1sXG4gKlxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBDYW5vbmljYWxVc2VyUHJpbmNpcGFsIGV4dGVuZHMgUG9saWN5UHJpbmNpcGFsIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgY2Fub25pY2FsVXNlcklkOiBhbnkpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcG9saWN5RnJhZ21lbnQoKTogUHJpbmNpcGFsUG9saWN5RnJhZ21lbnQge1xuICAgICAgICByZXR1cm4gbmV3IFByaW5jaXBhbFBvbGljeUZyYWdtZW50KHsgQ2Fub25pY2FsVXNlcjogdGhpcy5jYW5vbmljYWxVc2VySWQgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmVkZXJhdGVkUHJpbmNpcGFsIGV4dGVuZHMgUG9saWN5UHJpbmNpcGFsIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGZlZGVyYXRlZDogYW55LFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgY29uZGl0aW9uczoge1trZXk6IHN0cmluZ106IGFueX0sXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBhc3N1bWVSb2xlQWN0aW9uOiBzdHJpbmcgPSAnc3RzOkFzc3VtZVJvbGUnKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHBvbGljeUZyYWdtZW50KCk6IFByaW5jaXBhbFBvbGljeUZyYWdtZW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcmluY2lwYWxQb2xpY3lGcmFnbWVudCh7IEZlZGVyYXRlZDogdGhpcy5mZWRlcmF0ZWQgfSwgdGhpcy5jb25kaXRpb25zKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY2NvdW50Um9vdFByaW5jaXBhbCBleHRlbmRzIEFjY291bnRQcmluY2lwYWwge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihuZXcgQXdzQWNjb3VudElkKCkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBIHByaW5jaXBhbCByZXByZXNlbnRpbmcgYWxsIGlkZW50aXRpZXMgaW4gYWxsIGFjY291bnRzXG4gKi9cbmV4cG9ydCBjbGFzcyBBbnlvbmUgZXh0ZW5kcyBQb2xpY3lQcmluY2lwYWwge1xuICAgIC8qKlxuICAgICAqIEludGVyZmFjZSBjb21wYXRpYmlsaXR5IHdpdGggQWNjb3VudFByaW5jaXBhbCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoZSBMYW1iZGEgbGlicmFyeVxuICAgICAqXG4gICAgICogVGhlIExhbWJkYSdzIGFkZFBlcm1pc3Npb24oKSBjYWxsIHdvcmtzIGRpZmZlcmVudGx5IGZyb20gcmVndWxhclxuICAgICAqIHN0YXRlbWVudHMsIGFuZCB3aWxsIHVzZSB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSBkaXJlY3RseSBpZiBwcmVzZW50XG4gICAgICogKHdoaWNoIGxlYWRzIHRvIHRoZSBjb3JyZWN0IHN0YXRlbWVudCB1bHRpbWF0ZWx5KS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgYWNjb3VudElkID0gJyonO1xuXG4gICAgcHVibGljIHBvbGljeUZyYWdtZW50KCk6IFByaW5jaXBhbFBvbGljeUZyYWdtZW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcmluY2lwYWxQb2xpY3lGcmFnbWVudCgnKicpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc3RhdGVtZW50IGluIGFuIElBTSBwb2xpY3kgZG9jdW1lbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBQb2xpY3lTdGF0ZW1lbnQgZXh0ZW5kcyBUb2tlbiB7XG4gICAgcHJpdmF0ZSBhY3Rpb24gPSBuZXcgQXJyYXk8YW55PigpO1xuICAgIHByaXZhdGUgcHJpbmNpcGFsID0gbmV3IEFycmF5PGFueT4oKTtcbiAgICBwcml2YXRlIHJlc291cmNlID0gbmV3IEFycmF5PGFueT4oKTtcbiAgICBwcml2YXRlIGNvbmRpdGlvbjogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHsgfTtcbiAgICBwcml2YXRlIGVmZmVjdD86IFBvbGljeVN0YXRlbWVudEVmZmVjdDtcbiAgICBwcml2YXRlIHNpZD86IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKGVmZmVjdDogUG9saWN5U3RhdGVtZW50RWZmZWN0ID0gUG9saWN5U3RhdGVtZW50RWZmZWN0LkFsbG93KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuZWZmZWN0ID0gZWZmZWN0O1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gQWN0aW9uc1xuICAgIC8vXG5cbiAgICBwdWJsaWMgYWRkQWN0aW9uKGFjdGlvbjogc3RyaW5nKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgdGhpcy5hY3Rpb24ucHVzaChhY3Rpb24pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQWN0aW9ucyguLi5hY3Rpb25zOiBzdHJpbmdbXSk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgICAgIGFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4gdGhpcy5hZGRBY3Rpb24oYWN0aW9uKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gUHJpbmNpcGFsXG4gICAgLy9cblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGlzIHBlcm1pc3Npb24gaGFzIGEgXCJQcmluY2lwYWxcIiBzZWN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGFzUHJpbmNpcGFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmluY2lwYWwgJiYgdGhpcy5wcmluY2lwYWwubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUHJpbmNpcGFsKHByaW5jaXBhbDogUG9saWN5UHJpbmNpcGFsKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBwcmluY2lwYWwucG9saWN5RnJhZ21lbnQoKTtcbiAgICAgICAgdGhpcy5wcmluY2lwYWwucHVzaChmcmFnbWVudC5wcmluY2lwYWxKc29uKTtcbiAgICAgICAgdGhpcy5hZGRDb25kaXRpb25zKGZyYWdtZW50LmNvbmRpdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQXdzUHJpbmNpcGFsKGFybjogc3RyaW5nKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUHJpbmNpcGFsKG5ldyBBcm5QcmluY2lwYWwoYXJuKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEF3c0FjY291bnRQcmluY2lwYWwoYWNjb3VudElkOiBzdHJpbmcpOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRQcmluY2lwYWwobmV3IEFjY291bnRQcmluY2lwYWwoYWNjb3VudElkKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFNlcnZpY2VQcmluY2lwYWwoc2VydmljZTogc3RyaW5nKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUHJpbmNpcGFsKG5ldyBTZXJ2aWNlUHJpbmNpcGFsKHNlcnZpY2UpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmVkZXJhdGVkUHJpbmNpcGFsKGZlZGVyYXRlZDogYW55LCBjb25kaXRpb25zOiB7W2tleTogc3RyaW5nXTogYW55fSk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFByaW5jaXBhbChuZXcgRmVkZXJhdGVkUHJpbmNpcGFsKGZlZGVyYXRlZCwgY29uZGl0aW9ucykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRBY2NvdW50Um9vdFByaW5jaXBhbCgpOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRQcmluY2lwYWwobmV3IEFjY291bnRSb290UHJpbmNpcGFsKCkpO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gUmVzb3VyY2VzXG4gICAgLy9cblxuICAgIHB1YmxpYyBhZGRSZXNvdXJjZShhcm46IHN0cmluZyk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgICAgIHRoaXMucmVzb3VyY2UucHVzaChhcm4pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgYGBcIipcImBgIHJlc291cmNlIHRvIHRoaXMgc3RhdGVtZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRBbGxSZXNvdXJjZXMoKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmVzb3VyY2UoJyonKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUmVzb3VyY2VzKC4uLmFybnM6IHN0cmluZ1tdKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgYXJucy5mb3JFYWNoKHIgPT4gdGhpcy5hZGRSZXNvdXJjZShyKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGlzIHBlcm1pc3Npb24gYXMgYXQgbGVhc3Qgb25lIHJlc291cmNlIGFzc29jaWF0ZWQgd2l0aCBpdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhhc1Jlc291cmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZSAmJiB0aGlzLnJlc291cmNlLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIGRlc2NyaWJlKHNpZDogc3RyaW5nKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgdGhpcy5zaWQgPSBzaWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gRWZmZWN0XG4gICAgLy9cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBlcm1pc3Npb24gZWZmZWN0IHRvIGRlbnkgYWNjZXNzIHRvIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWxsb3coKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgdGhpcy5lZmZlY3QgPSBQb2xpY3lTdGF0ZW1lbnRFZmZlY3QuQWxsb3c7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBlcm1pc3Npb24gZWZmZWN0IHRvIGFsbG93IGFjY2VzcyB0byByZXNvdXJjZXMuXG4gICAgICovXG4gICAgcHVibGljIGRlbnkoKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgdGhpcy5lZmZlY3QgPSBQb2xpY3lTdGF0ZW1lbnRFZmZlY3QuRGVueTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBDb25kaXRpb25cbiAgICAvL1xuXG4gICAgLyoqXG4gICAgICogQWRkIGEgY29uZGl0aW9uIHRvIHRoZSBQb2xpY3lcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkQ29uZGl0aW9uKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25ba2V5XSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgbXVsdGlwbGUgY29uZGl0aW9ucyB0byB0aGUgUG9saWN5XG4gICAgICovXG4gICAgcHVibGljIGFkZENvbmRpdGlvbnMoY29uZGl0aW9uczoge1trZXk6IHN0cmluZ106IGFueX0pOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgICAgICBPYmplY3Qua2V5cyhjb25kaXRpb25zKS5tYXAoa2V5ID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ29uZGl0aW9uKGtleSwgY29uZGl0aW9uc1trZXldKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBhIGNvbmRpdGlvbiB0byB0aGUgUG9saWN5LlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWQgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBVc2UgYWRkQ29uZGl0aW9uKCkgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0Q29uZGl0aW9uKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogUG9saWN5U3RhdGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkQ29uZGl0aW9uKGtleSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBsaW1pdFRvQWNjb3VudChhY2NvdW50SWQ6IHN0cmluZyk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZENvbmRpdGlvbignU3RyaW5nRXF1YWxzJywgbmV3IFRva2VuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7ICdzdHM6RXh0ZXJuYWxJZCc6IGFjY291bnRJZCB9O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBTZXJpYWxpemF0aW9uXG4gICAgLy9cblxuICAgIHB1YmxpYyByZXNvbHZlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvSnNvbigpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b0pzb24oKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIEFjdGlvbjogX25vcm0odGhpcy5hY3Rpb24pLFxuICAgICAgICAgICAgQ29uZGl0aW9uOiBfbm9ybSh0aGlzLmNvbmRpdGlvbiksXG4gICAgICAgICAgICBFZmZlY3Q6IF9ub3JtKHRoaXMuZWZmZWN0KSxcbiAgICAgICAgICAgIFByaW5jaXBhbDogX25vcm0odGhpcy5wcmluY2lwYWwpLFxuICAgICAgICAgICAgUmVzb3VyY2U6IF9ub3JtKHRoaXMucmVzb3VyY2UpLFxuICAgICAgICAgICAgU2lkOiBfbm9ybSh0aGlzLnNpZCksXG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX25vcm0odmFsdWVzOiBhbnkpIHtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZih2YWx1ZXMpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXZhbHVlcyB8fCB2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlc1swXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mKHZhbHVlcykgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZW51bSBQb2xpY3lTdGF0ZW1lbnRFZmZlY3Qge1xuICAgIEFsbG93ID0gJ0FsbG93JyxcbiAgICBEZW55ID0gJ0RlbnknLFxufVxuIl19
import { Construct } from '../core/construct';
import { Token } from '../core/tokens';
import { CloudFormationToken } from './cloudformation-token';
import { Condition } from './condition';
import { CreationPolicy, DeletionPolicy, UpdatePolicy } from './resource-policy';
import { IDependable, StackElement } from './stack';
import { IDependable, Referenceable } from './stack';
export interface ResourceProps {

@@ -19,3 +19,3 @@ /**

*/
export declare class Resource extends StackElement {
export declare class Resource extends Referenceable {
/**

@@ -51,3 +51,3 @@ * A decoration used to create a CloudFormation attribute property.

*/
getAtt(attributeName: string): Token;
getAtt(attributeName: string): CloudFormationToken;
/**

@@ -54,0 +54,0 @@ * Adds a dependency on another resource.

@@ -9,3 +9,3 @@ "use strict";

*/
class Resource extends stack_1.StackElement {
class Resource extends stack_1.Referenceable {
/**

@@ -123,2 +123,2 @@ * Creates a resource construct.

exports.Resource = Resource;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLHVDQUFvRTtBQUNwRSxpRUFBNkQ7QUFHN0QsbUNBQW9EO0FBY3BEOztHQUVHO0FBQ0gsTUFBYSxRQUFTLFNBQVEsb0JBQVk7SUFrQ3RDOzs7T0FHRztJQUNILFlBQVksTUFBaUIsRUFBRSxJQUFZLEVBQUUsS0FBb0I7UUFDN0QsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQXRCeEI7O1dBRUc7UUFDYSxZQUFPLEdBQW9CLEVBQUUsQ0FBQztRQVl0QyxjQUFTLEdBQUcsSUFBSSxLQUFLLEVBQWUsQ0FBQztRQVN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztTQUN0RDtRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRyxDQUFDO1FBRTFDLDJFQUEyRTtRQUMzRSxzRUFBc0U7UUFDdEUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtZQUN0QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1NBQy9CO0lBQ0wsQ0FBQztJQXBERDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFtQjtRQUN2QyxPQUFPLENBQUMsU0FBYyxFQUFFLEdBQVcsRUFBRSxFQUFFO1lBQ25DLE1BQU0sSUFBSSxHQUFHLFVBQVUsSUFBSSxHQUFHLENBQUM7WUFDL0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUNsQyxHQUFHO29CQUNDLE9BQVEsSUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEMsQ0FBQzthQUNK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U0FBUyxDQUFDLENBQUM7aUJBQzdCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxtRkFBbUY7WUFDbkYsSUFBSSxDQUFDLENBQUMsa0JBQWtCLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNwRSxPQUFPO2FBQ1Y7aUJBQU07Z0JBQ0gsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzNEO1FBQ0wsQ0FBQztJQUNMLENBQUM7Q0FDSjtBQXJJRCw0QkFxSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICcuLi9jb3JlL2NvbnN0cnVjdCc7XG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gJy4uL2NvcmUvdG9rZW5zJztcbmltcG9ydCB7IGNhcGl0YWxpemVQcm9wZXJ0eU5hbWVzLCBpZ25vcmVFbXB0eSB9IGZyb20gJy4uL2NvcmUvdXRpbCc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvblRva2VuIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbi10b2tlbic7XG5pbXBvcnQgeyBDb25kaXRpb24gfSBmcm9tICcuL2NvbmRpdGlvbic7XG5pbXBvcnQgeyBDcmVhdGlvblBvbGljeSwgRGVsZXRpb25Qb2xpY3ksIFVwZGF0ZVBvbGljeSB9IGZyb20gJy4vcmVzb3VyY2UtcG9saWN5JztcbmltcG9ydCB7IElEZXBlbmRhYmxlLCBTdGFja0VsZW1lbnQgfSBmcm9tICcuL3N0YWNrJztcblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVByb3BzIHtcbiAgICAvKipcbiAgICAgKiBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSB0eXBlLlxuICAgICAqL1xuICAgIHR5cGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENsb3VkRm9ybWF0aW9uIHByb3BlcnRpZXMuXG4gICAgICovXG4gICAgcHJvcGVydGllcz86IGFueTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZSBleHRlbmRzIFN0YWNrRWxlbWVudCB7XG4gICAgLyoqXG4gICAgICogQSBkZWNvcmF0aW9uIHVzZWQgdG8gY3JlYXRlIGEgQ2xvdWRGb3JtYXRpb24gYXR0cmlidXRlIHByb3BlcnR5LlxuICAgICAqIEBwYXJhbSBjdXN0b21OYW1lIEN1c3RvbSBuYW1lIGZvciB0aGUgYXR0cmlidXRlIChkZWZhdWx0IGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSlcbiAgICAgKiBOT1RFOiB3ZSByZXR1cm4gXCJhbnlcIiBoZXJlIHRvIHNhdGlzdGZ5IGpzaWksIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBsYW1iZGFzLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgYXR0cmlidXRlKGN1c3RvbU5hbWU/OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICByZXR1cm4gKHByb3RvdHlwZTogYW55LCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGN1c3RvbU5hbWUgfHwga2V5O1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwga2V5LCB7XG4gICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMgYXMgYW55KS5nZXRBdHQobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3B0aW9ucyBmb3IgdGhpcyByZXNvdXJjZSwgc3VjaCBhcyBjb25kaXRpb24sIHVwZGF0ZSBwb2xpY3kgZXRjLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBvcHRpb25zOiBSZXNvdXJjZU9wdGlvbnMgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIEFXUyByZXNvdXJjZSB0eXBlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSByZXNvdXJjZVR5cGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEFXUyByZXNvdXJjZSBwcm9wZXJ0aWVzXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHByb3BlcnRpZXM6IGFueTtcblxuICAgIHByaXZhdGUgZGVwZW5kc09uID0gbmV3IEFycmF5PElEZXBlbmRhYmxlPigpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHJlc291cmNlIGNvbnN0cnVjdC5cbiAgICAgKiBAcGFyYW0gcmVzb3VyY2VUeXBlIFRoZSBDbG91ZEZvcm1hdGlvbiB0eXBlIG9mIHRoaXMgcmVzb3VyY2UgKGUuZy4gQVdTOjpEeW5hbW9EQjo6VGFibGUpXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IFJlc291cmNlUHJvcHMpIHtcbiAgICAgICAgc3VwZXIocGFyZW50LCBuYW1lKTtcblxuICAgICAgICBpZiAoIXByb3BzLnR5cGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGB0eXBlYCBwcm9wZXJ0eSBpcyByZXF1aXJlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXNvdXJjZVR5cGUgPSBwcm9wcy50eXBlO1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wcy5wcm9wZXJ0aWVzIHx8IHsgfTtcblxuICAgICAgICAvLyAnbmFtZScgaXMgYSBzcGVjaWFsIHByb3BlcnR5IGluY2x1ZGVkIGZvciByZXNvdXJjZSBjb25zdHJ1Y3RzIGFuZCBwYXNzZWRcbiAgICAgICAgLy8gYXMgJ25hbWUnLCBidXQgd2UgZG9uJ3Qgd2FudCBpdCB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIHRlbXBsYXRlLlxuICAgICAgICBpZiAodGhpcy5wcm9wZXJ0aWVzLm5hbWUpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnByb3BlcnRpZXMubmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB0b2tlbiBmb3IgYW4gcnVudGltZSBhdHRyaWJ1dGUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKiBJZGVhbGx5LCB1c2UgZ2VuZXJhdGVkIGF0dHJpYnV0ZSBhY2Nlc3NvcnMgKGUuZy4gYHJlc291cmNlLmFybmApLCBidXQgdGhpcyBjYW4gYmUgdXNlZCBmb3IgZnV0dXJlIGNvbXBhdGliaWxpdHlcbiAgICAgKiBpbiBjYXNlIHRoZXJlIGlzIG5vIGdlbmVyYXRlZCBhdHRyaWJ1dGUuXG4gICAgICogQHBhcmFtIGF0dHJpYnV0ZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QXR0KGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IFRva2VuIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDbG91ZEZvcm1hdGlvblRva2VuKHsgJ0ZuOjpHZXRBdHQnOiBbdGhpcy5sb2dpY2FsSWQsIGF0dHJpYnV0ZU5hbWVdIH0sIGAke3RoaXMubG9naWNhbElkfS4ke2F0dHJpYnV0ZU5hbWV9YCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGRlcGVuZGVuY3kgb24gYW5vdGhlciByZXNvdXJjZS5cbiAgICAgKiBAcGFyYW0gb3RoZXIgVGhlIG90aGVyIHJlc291cmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGREZXBlbmRlbmN5KC4uLm90aGVyOiBJRGVwZW5kYWJsZVtdKSB7XG4gICAgICAgIHRoaXMuZGVwZW5kc09uLnB1c2goLi4ub3RoZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXRzIENsb3VkRm9ybWF0aW9uIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b0Nsb3VkRm9ybWF0aW9uKCk6IG9iamVjdCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIFJlc291cmNlczoge1xuICAgICAgICAgICAgICAgICAgICBbdGhpcy5sb2dpY2FsSWRdOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUeXBlOiB0aGlzLnJlc291cmNlVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFByb3BlcnRpZXM6IGlnbm9yZUVtcHR5KHRoaXMucmVuZGVyUHJvcGVydGllcygpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIERlcGVuZHNPbjogaWdub3JlRW1wdHkodGhpcy5yZW5kZXJEZXBlbmRzT24oKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGlvblBvbGljeTogIGNhcGl0YWxpemVQcm9wZXJ0eU5hbWVzKHRoaXMub3B0aW9ucy5jcmVhdGlvblBvbGljeSksXG4gICAgICAgICAgICAgICAgICAgICAgICBVcGRhdGVQb2xpY3k6IGNhcGl0YWxpemVQcm9wZXJ0eU5hbWVzKHRoaXMub3B0aW9ucy51cGRhdGVQb2xpY3kpLFxuICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRpb25Qb2xpY3k6IGNhcGl0YWxpemVQcm9wZXJ0eU5hbWVzKHRoaXMub3B0aW9ucy5kZWxldGlvblBvbGljeSksXG4gICAgICAgICAgICAgICAgICAgICAgICBNZXRhZGF0YTogaWdub3JlRW1wdHkodGhpcy5vcHRpb25zLm1ldGFkYXRhKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbjogdGhpcy5vcHRpb25zLmNvbmRpdGlvbiAmJiB0aGlzLm9wdGlvbnMuY29uZGl0aW9uLmxvZ2ljYWxJZFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gQ2hhbmdlIG1lc3NhZ2VcbiAgICAgICAgICAgIGUubWVzc2FnZSA9IGBXaGlsZSBzeW50aGVzaXppbmcgJHt0aGlzLnBhdGh9OiAke2UubWVzc2FnZX1gO1xuICAgICAgICAgICAgLy8gQWRqdXN0IHN0YWNrIHRyYWNlIChtYWtlIGl0IGxvb2sgbGlrZSBub2RlIGJ1aWx0IGl0LCB0b28uLi4pXG4gICAgICAgICAgICBjb25zdCBjcmVhdGlvblN0YWNrID0gWyctLS0gcmVzb3VyY2UgY3JlYXRlZCBhdCAtLS0nLCAuLi50aGlzLmNyZWF0aW9uU3RhY2tUcmFjZV0uam9pbignXFxuICAgIGF0ICcpO1xuICAgICAgICAgICAgY29uc3QgcHJvYmxlbVRyYWNlID0gZS5zdGFjay5zdWJzdHIoZS5zdGFjay5pbmRleE9mKGUubWVzc2FnZSkgKyBlLm1lc3NhZ2UubGVuZ3RoKTtcbiAgICAgICAgICAgIGUuc3RhY2sgPSBgJHtlLm1lc3NhZ2V9XFxuICAgICR7Y3JlYXRpb25TdGFja31cXG4gICAgLS0tIHByb2JsZW0gZGlzY292ZXJlZCBhdCAtLS0ke3Byb2JsZW1UcmFjZX1gO1xuICAgICAgICAgICAgLy8gUmUtdGhyb3dcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVuZGVyUHJvcGVydGllcygpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICAgICAgLy8gRklYTUU6IGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgbm90IGdyZWF0LCBpdCBzaG91bGQgdGhyb3csIGJ1dCBpdCBhdm9pZHMgYnJlYWtpbmcgYWxsIHVuaXQgdGVzdHMgZm9yIG5vdy5cbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckRlcGVuZHNPbigpIHtcbiAgICAgICAgY29uc3QgbG9naWNhbElEcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBmb3IgKGNvbnN0IGQgb2YgdGhpcy5kZXBlbmRzT24pIHtcbiAgICAgICAgICAgIGFkZERlcGVuZGVuY3koZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShsb2dpY2FsSURzKTtcblxuICAgICAgICBmdW5jdGlvbiBhZGREZXBlbmRlbmN5KGQ6IElEZXBlbmRhYmxlKSB7XG4gICAgICAgICAgICBkLmRlcGVuZGVuY3lFbGVtZW50cy5mb3JFYWNoKGRlcCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9naWNhbElkID0gKGRlcCBhcyBTdGFja0VsZW1lbnQpLmxvZ2ljYWxJZDtcbiAgICAgICAgICAgICAgICBpZiAobG9naWNhbElkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxJRHMuYWRkKGxvZ2ljYWxJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGJyZWFrIGlmIGRlcGVuZGVuY3lFbGVtZW50cyBpbmNsdWRlIG9ubHkgJ2QnLCB3aGljaCBtZWFucyB3ZSByZWFjaGVkIGEgdGVybWluYWwuXG4gICAgICAgICAgICBpZiAoZC5kZXBlbmRlbmN5RWxlbWVudHMubGVuZ3RoID09PSAxICYmIGQuZGVwZW5kZW5jeUVsZW1lbnRzWzBdID09PSBkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkLmRlcGVuZGVuY3lFbGVtZW50cy5mb3JFYWNoKGRlcCA9PiBhZGREZXBlbmRlbmN5KGRlcCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogQSBjb25kaXRpb24gdG8gYXNzb2NpYXRlIHdpdGggdGhpcyByZXNvdXJjZS4gVGhpcyBtZWFucyB0aGF0IG9ubHkgaWYgdGhlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gJ3RydWUnIHdoZW4gdGhlIHN0YWNrXG4gICAgICogaXMgZGVwbG95ZWQsIHRoZSByZXNvdXJjZSB3aWxsIGJlIGluY2x1ZGVkLiBUaGlzIGlzIHByb3ZpZGVkIHRvIGFsbG93IENESyBwcm9qZWN0cyB0byBwcm9kdWNlIGxlZ2FjeSB0ZW1wbGF0ZXMsIGJ1dCBub3JhbWxseVxuICAgICAqIHRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIGl0IGluIENESyBwcm9qZWN0cy5cbiAgICAgKi9cbiAgICBjb25kaXRpb24/OiBDb25kaXRpb247XG5cbiAgICAvKipcbiAgICAgKiBBc3NvY2lhdGUgdGhlIENyZWF0aW9uUG9saWN5IGF0dHJpYnV0ZSB3aXRoIGEgcmVzb3VyY2UgdG8gcHJldmVudCBpdHMgc3RhdHVzIGZyb20gcmVhY2hpbmcgY3JlYXRlIGNvbXBsZXRlIHVudGlsXG4gICAgICogQVdTIENsb3VkRm9ybWF0aW9uIHJlY2VpdmVzIGEgc3BlY2lmaWVkIG51bWJlciBvZiBzdWNjZXNzIHNpZ25hbHMgb3IgdGhlIHRpbWVvdXQgcGVyaW9kIGlzIGV4Y2VlZGVkLiBUbyBzaWduYWwgYVxuICAgICAqIHJlc291cmNlLCB5b3UgY2FuIHVzZSB0aGUgY2ZuLXNpZ25hbCBoZWxwZXIgc2NyaXB0IG9yIFNpZ25hbFJlc291cmNlIEFQSS4gQVdTIENsb3VkRm9ybWF0aW9uIHB1Ymxpc2hlcyB2YWxpZCBzaWduYWxzXG4gICAgICogdG8gdGhlIHN0YWNrIGV2ZW50cyBzbyB0aGF0IHlvdSB0cmFjayB0aGUgbnVtYmVyIG9mIHNpZ25hbHMgc2VudC5cbiAgICAgKi9cbiAgICBjcmVhdGlvblBvbGljeT86IENyZWF0aW9uUG9saWN5O1xuXG4gICAgLyoqXG4gICAgICogV2l0aCB0aGUgRGVsZXRpb25Qb2xpY3kgYXR0cmlidXRlIHlvdSBjYW4gcHJlc2VydmUgb3IgKGluIHNvbWUgY2FzZXMpIGJhY2t1cCBhIHJlc291cmNlIHdoZW4gaXRzIHN0YWNrIGlzIGRlbGV0ZWQuXG4gICAgICogWW91IHNwZWNpZnkgYSBEZWxldGlvblBvbGljeSBhdHRyaWJ1dGUgZm9yIGVhY2ggcmVzb3VyY2UgdGhhdCB5b3Ugd2FudCB0byBjb250cm9sLiBJZiBhIHJlc291cmNlIGhhcyBubyBEZWxldGlvblBvbGljeVxuICAgICAqIGF0dHJpYnV0ZSwgQVdTIENsb3VkRm9ybWF0aW9uIGRlbGV0ZXMgdGhlIHJlc291cmNlIGJ5IGRlZmF1bHQuIE5vdGUgdGhhdCB0aGlzIGNhcGFiaWxpdHkgYWxzbyBhcHBsaWVzIHRvIHVwZGF0ZSBvcGVyYXRpb25zXG4gICAgICogdGhhdCBsZWFkIHRvIHJlc291cmNlcyBiZWluZyByZW1vdmVkLlxuICAgICAqL1xuICAgIGRlbGV0aW9uUG9saWN5PzogRGVsZXRpb25Qb2xpY3k7XG5cbiAgICAvKipcbiAgICAgKiBVc2UgdGhlIFVwZGF0ZVBvbGljeSBhdHRyaWJ1dGUgdG8gc3BlY2lmeSBob3cgQVdTIENsb3VkRm9ybWF0aW9uIGhhbmRsZXMgdXBkYXRlcyB0byB0aGUgQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFxuICAgICAqIHJlc291cmNlLiBBV1MgQ2xvdWRGb3JtYXRpb24gaW52b2tlcyBvbmUgb2YgdGhyZWUgdXBkYXRlIHBvbGljaWVzIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBjaGFuZ2UgeW91IG1ha2Ugb3Igd2hldGhlciBhXG4gICAgICogc2NoZWR1bGVkIGFjdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIEF1dG8gU2NhbGluZyBncm91cC5cbiAgICAgKi9cbiAgICB1cGRhdGVQb2xpY3k/OiBVcGRhdGVQb2xpY3k7XG5cbiAgICAvKipcbiAgICAgKiBNZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIENsb3VkRm9ybWF0aW9uIHJlc291cmNlLiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgY29uc3RydWN0IG1ldGFkYXRhIHdoaWNoIGNhbiBiZSBhZGRlZFxuICAgICAqIHVzaW5nIGNvbnN0cnVjdC5hZGRNZXRhZGF0YSgpLCBidXQgd291bGQgbm90IGFwcGVhciBpbiB0aGUgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgYXV0b21hdGljYWxseS5cbiAgICAgKi9cbiAgICBtZXRhZGF0YT86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLHVDQUFvRTtBQUNwRSxpRUFBNkQ7QUFHN0QsbUNBQW1FO0FBY25FOztHQUVHO0FBQ0gsTUFBYSxRQUFTLFNBQVEscUJBQWE7SUFrQ3ZDOzs7T0FHRztJQUNILFlBQVksTUFBaUIsRUFBRSxJQUFZLEVBQUUsS0FBb0I7UUFDN0QsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQXRCeEI7O1dBRUc7UUFDYSxZQUFPLEdBQW9CLEVBQUUsQ0FBQztRQVl0QyxjQUFTLEdBQUcsSUFBSSxLQUFLLEVBQWUsQ0FBQztRQVN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztTQUN0RDtRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRyxDQUFDO1FBRTFDLDJFQUEyRTtRQUMzRSxzRUFBc0U7UUFDdEUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtZQUN0QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1NBQy9CO0lBQ0wsQ0FBQztJQXBERDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFtQjtRQUN2QyxPQUFPLENBQUMsU0FBYyxFQUFFLEdBQVcsRUFBRSxFQUFFO1lBQ25DLE1BQU0sSUFBSSxHQUFHLFVBQVUsSUFBSSxHQUFHLENBQUM7WUFDL0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUNsQyxHQUFHO29CQUNDLE9BQVEsSUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEMsQ0FBQzthQUNK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U0FBUyxDQUFDLENBQUM7aUJBQzdCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxtRkFBbUY7WUFDbkYsSUFBSSxDQUFDLENBQUMsa0JBQWtCLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNwRSxPQUFPO2FBQ1Y7aUJBQU07Z0JBQ0gsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzNEO1FBQ0wsQ0FBQztJQUNMLENBQUM7Q0FDSjtBQXJJRCw0QkFxSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICcuLi9jb3JlL2NvbnN0cnVjdCc7XG5pbXBvcnQgeyBjYXBpdGFsaXplUHJvcGVydHlOYW1lcywgaWdub3JlRW1wdHkgfSBmcm9tICcuLi9jb3JlL3V0aWwnO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25Ub2tlbiB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24tdG9rZW4nO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSAnLi9jb25kaXRpb24nO1xuaW1wb3J0IHsgQ3JlYXRpb25Qb2xpY3ksIERlbGV0aW9uUG9saWN5LCBVcGRhdGVQb2xpY3kgfSBmcm9tICcuL3Jlc291cmNlLXBvbGljeSc7XG5pbXBvcnQgeyBJRGVwZW5kYWJsZSwgUmVmZXJlbmNlYWJsZSwgU3RhY2tFbGVtZW50IH0gZnJvbSAnLi9zdGFjayc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VQcm9wcyB7XG4gICAgLyoqXG4gICAgICogQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgdHlwZS5cbiAgICAgKi9cbiAgICB0eXBlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0aWVzLlxuICAgICAqL1xuICAgIHByb3BlcnRpZXM/OiBhbnk7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIENsb3VkRm9ybWF0aW9uIHJlc291cmNlLlxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2UgZXh0ZW5kcyBSZWZlcmVuY2VhYmxlIHtcbiAgICAvKipcbiAgICAgKiBBIGRlY29yYXRpb24gdXNlZCB0byBjcmVhdGUgYSBDbG91ZEZvcm1hdGlvbiBhdHRyaWJ1dGUgcHJvcGVydHkuXG4gICAgICogQHBhcmFtIGN1c3RvbU5hbWUgQ3VzdG9tIG5hbWUgZm9yIHRoZSBhdHRyaWJ1dGUgKGRlZmF1bHQgaXMgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5KVxuICAgICAqIE5PVEU6IHdlIHJldHVybiBcImFueVwiIGhlcmUgdG8gc2F0aXN0ZnkganNpaSwgd2hpY2ggZG9lc24ndCBzdXBwb3J0IGxhbWJkYXMuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBhdHRyaWJ1dGUoY3VzdG9tTmFtZT86IHN0cmluZyk6IGFueSB7XG4gICAgICAgIHJldHVybiAocHJvdG90eXBlOiBhbnksIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gY3VzdG9tTmFtZSB8fCBrZXk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCBrZXksIHtcbiAgICAgICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAodGhpcyBhcyBhbnkpLmdldEF0dChuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcHRpb25zIGZvciB0aGlzIHJlc291cmNlLCBzdWNoIGFzIGNvbmRpdGlvbiwgdXBkYXRlIHBvbGljeSBldGMuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG9wdGlvbnM6IFJlc291cmNlT3B0aW9ucyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQVdTIHJlc291cmNlIHR5cGUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlVHlwZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQVdTIHJlc291cmNlIHByb3BlcnRpZXNcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHJvcGVydGllczogYW55O1xuXG4gICAgcHJpdmF0ZSBkZXBlbmRzT24gPSBuZXcgQXJyYXk8SURlcGVuZGFibGU+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgcmVzb3VyY2UgY29uc3RydWN0LlxuICAgICAqIEBwYXJhbSByZXNvdXJjZVR5cGUgVGhlIENsb3VkRm9ybWF0aW9uIHR5cGUgb2YgdGhpcyByZXNvdXJjZSAoZS5nLiBBV1M6OkR5bmFtb0RCOjpUYWJsZSlcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nLCBwcm9wczogUmVzb3VyY2VQcm9wcykge1xuICAgICAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuXG4gICAgICAgIGlmICghcHJvcHMudHlwZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYHR5cGVgIHByb3BlcnR5IGlzIHJlcXVpcmVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc291cmNlVHlwZSA9IHByb3BzLnR5cGU7XG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BzLnByb3BlcnRpZXMgfHwgeyB9O1xuXG4gICAgICAgIC8vICduYW1lJyBpcyBhIHNwZWNpYWwgcHJvcGVydHkgaW5jbHVkZWQgZm9yIHJlc291cmNlIGNvbnN0cnVjdHMgYW5kIHBhc3NlZFxuICAgICAgICAvLyBhcyAnbmFtZScsIGJ1dCB3ZSBkb24ndCB3YW50IGl0IHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgdGVtcGxhdGUuXG4gICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMubmFtZSkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMucHJvcGVydGllcy5uYW1lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHRva2VuIGZvciBhbiBydW50aW1lIGF0dHJpYnV0ZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqIElkZWFsbHksIHVzZSBnZW5lcmF0ZWQgYXR0cmlidXRlIGFjY2Vzc29ycyAoZS5nLiBgcmVzb3VyY2UuYXJuYCksIGJ1dCB0aGlzIGNhbiBiZSB1c2VkIGZvciBmdXR1cmUgY29tcGF0aWJpbGl0eVxuICAgICAqIGluIGNhc2UgdGhlcmUgaXMgbm8gZ2VuZXJhdGVkIGF0dHJpYnV0ZS5cbiAgICAgKiBAcGFyYW0gYXR0cmlidXRlTmFtZSBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRBdHQoYXR0cmlidXRlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2xvdWRGb3JtYXRpb25Ub2tlbih7ICdGbjo6R2V0QXR0JzogW3RoaXMubG9naWNhbElkLCBhdHRyaWJ1dGVOYW1lXSB9LCBgJHt0aGlzLmxvZ2ljYWxJZH0uJHthdHRyaWJ1dGVOYW1lfWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBkZXBlbmRlbmN5IG9uIGFub3RoZXIgcmVzb3VyY2UuXG4gICAgICogQHBhcmFtIG90aGVyIFRoZSBvdGhlciByZXNvdXJjZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRGVwZW5kZW5jeSguLi5vdGhlcjogSURlcGVuZGFibGVbXSkge1xuICAgICAgICB0aGlzLmRlcGVuZHNPbi5wdXNoKC4uLm90aGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBDbG91ZEZvcm1hdGlvbiBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG9DbG91ZEZvcm1hdGlvbigpOiBvYmplY3Qge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgW3RoaXMubG9naWNhbElkXToge1xuICAgICAgICAgICAgICAgICAgICAgICAgVHlwZTogdGhpcy5yZXNvdXJjZVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzOiBpZ25vcmVFbXB0eSh0aGlzLnJlbmRlclByb3BlcnRpZXMoKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXBlbmRzT246IGlnbm9yZUVtcHR5KHRoaXMucmVuZGVyRGVwZW5kc09uKCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRpb25Qb2xpY3k6ICBjYXBpdGFsaXplUHJvcGVydHlOYW1lcyh0aGlzLm9wdGlvbnMuY3JlYXRpb25Qb2xpY3kpLFxuICAgICAgICAgICAgICAgICAgICAgICAgVXBkYXRlUG9saWN5OiBjYXBpdGFsaXplUHJvcGVydHlOYW1lcyh0aGlzLm9wdGlvbnMudXBkYXRlUG9saWN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0aW9uUG9saWN5OiBjYXBpdGFsaXplUHJvcGVydHlOYW1lcyh0aGlzLm9wdGlvbnMuZGVsZXRpb25Qb2xpY3kpLFxuICAgICAgICAgICAgICAgICAgICAgICAgTWV0YWRhdGE6IGlnbm9yZUVtcHR5KHRoaXMub3B0aW9ucy5tZXRhZGF0YSksXG4gICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb246IHRoaXMub3B0aW9ucy5jb25kaXRpb24gJiYgdGhpcy5vcHRpb25zLmNvbmRpdGlvbi5sb2dpY2FsSWRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIENoYW5nZSBtZXNzYWdlXG4gICAgICAgICAgICBlLm1lc3NhZ2UgPSBgV2hpbGUgc3ludGhlc2l6aW5nICR7dGhpcy5wYXRofTogJHtlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgIC8vIEFkanVzdCBzdGFjayB0cmFjZSAobWFrZSBpdCBsb29rIGxpa2Ugbm9kZSBidWlsdCBpdCwgdG9vLi4uKVxuICAgICAgICAgICAgY29uc3QgY3JlYXRpb25TdGFjayA9IFsnLS0tIHJlc291cmNlIGNyZWF0ZWQgYXQgLS0tJywgLi4udGhpcy5jcmVhdGlvblN0YWNrVHJhY2VdLmpvaW4oJ1xcbiAgICBhdCAnKTtcbiAgICAgICAgICAgIGNvbnN0IHByb2JsZW1UcmFjZSA9IGUuc3RhY2suc3Vic3RyKGUuc3RhY2suaW5kZXhPZihlLm1lc3NhZ2UpICsgZS5tZXNzYWdlLmxlbmd0aCk7XG4gICAgICAgICAgICBlLnN0YWNrID0gYCR7ZS5tZXNzYWdlfVxcbiAgICAke2NyZWF0aW9uU3RhY2t9XFxuICAgIC0tLSBwcm9ibGVtIGRpc2NvdmVyZWQgYXQgLS0tJHtwcm9ibGVtVHJhY2V9YDtcbiAgICAgICAgICAgIC8vIFJlLXRocm93XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlbmRlclByb3BlcnRpZXMoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgICAgIC8vIEZJWE1FOiBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIG5vdCBncmVhdCwgaXQgc2hvdWxkIHRocm93LCBidXQgaXQgYXZvaWRzIGJyZWFraW5nIGFsbCB1bml0IHRlc3RzIGZvciBub3cuXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJEZXBlbmRzT24oKSB7XG4gICAgICAgIGNvbnN0IGxvZ2ljYWxJRHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgZm9yIChjb25zdCBkIG9mIHRoaXMuZGVwZW5kc09uKSB7XG4gICAgICAgICAgICBhZGREZXBlbmRlbmN5KGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obG9naWNhbElEcyk7XG5cbiAgICAgICAgZnVuY3Rpb24gYWRkRGVwZW5kZW5jeShkOiBJRGVwZW5kYWJsZSkge1xuICAgICAgICAgICAgZC5kZXBlbmRlbmN5RWxlbWVudHMuZm9yRWFjaChkZXAgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ2ljYWxJZCA9IChkZXAgYXMgU3RhY2tFbGVtZW50KS5sb2dpY2FsSWQ7XG4gICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxJZCkge1xuICAgICAgICAgICAgICAgICAgICBsb2dpY2FsSURzLmFkZChsb2dpY2FsSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBicmVhayBpZiBkZXBlbmRlbmN5RWxlbWVudHMgaW5jbHVkZSBvbmx5ICdkJywgd2hpY2ggbWVhbnMgd2UgcmVhY2hlZCBhIHRlcm1pbmFsLlxuICAgICAgICAgICAgaWYgKGQuZGVwZW5kZW5jeUVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJiBkLmRlcGVuZGVuY3lFbGVtZW50c1swXSA9PT0gZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZC5kZXBlbmRlbmN5RWxlbWVudHMuZm9yRWFjaChkZXAgPT4gYWRkRGVwZW5kZW5jeShkZXApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZU9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIEEgY29uZGl0aW9uIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgcmVzb3VyY2UuIFRoaXMgbWVhbnMgdGhhdCBvbmx5IGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvICd0cnVlJyB3aGVuIHRoZSBzdGFja1xuICAgICAqIGlzIGRlcGxveWVkLCB0aGUgcmVzb3VyY2Ugd2lsbCBiZSBpbmNsdWRlZC4gVGhpcyBpcyBwcm92aWRlZCB0byBhbGxvdyBDREsgcHJvamVjdHMgdG8gcHJvZHVjZSBsZWdhY3kgdGVtcGxhdGVzLCBidXQgbm9yYW1sbHlcbiAgICAgKiB0aGVyZSBpcyBubyBuZWVkIHRvIHVzZSBpdCBpbiBDREsgcHJvamVjdHMuXG4gICAgICovXG4gICAgY29uZGl0aW9uPzogQ29uZGl0aW9uO1xuXG4gICAgLyoqXG4gICAgICogQXNzb2NpYXRlIHRoZSBDcmVhdGlvblBvbGljeSBhdHRyaWJ1dGUgd2l0aCBhIHJlc291cmNlIHRvIHByZXZlbnQgaXRzIHN0YXR1cyBmcm9tIHJlYWNoaW5nIGNyZWF0ZSBjb21wbGV0ZSB1bnRpbFxuICAgICAqIEFXUyBDbG91ZEZvcm1hdGlvbiByZWNlaXZlcyBhIHNwZWNpZmllZCBudW1iZXIgb2Ygc3VjY2VzcyBzaWduYWxzIG9yIHRoZSB0aW1lb3V0IHBlcmlvZCBpcyBleGNlZWRlZC4gVG8gc2lnbmFsIGFcbiAgICAgKiByZXNvdXJjZSwgeW91IGNhbiB1c2UgdGhlIGNmbi1zaWduYWwgaGVscGVyIHNjcmlwdCBvciBTaWduYWxSZXNvdXJjZSBBUEkuIEFXUyBDbG91ZEZvcm1hdGlvbiBwdWJsaXNoZXMgdmFsaWQgc2lnbmFsc1xuICAgICAqIHRvIHRoZSBzdGFjayBldmVudHMgc28gdGhhdCB5b3UgdHJhY2sgdGhlIG51bWJlciBvZiBzaWduYWxzIHNlbnQuXG4gICAgICovXG4gICAgY3JlYXRpb25Qb2xpY3k/OiBDcmVhdGlvblBvbGljeTtcblxuICAgIC8qKlxuICAgICAqIFdpdGggdGhlIERlbGV0aW9uUG9saWN5IGF0dHJpYnV0ZSB5b3UgY2FuIHByZXNlcnZlIG9yIChpbiBzb21lIGNhc2VzKSBiYWNrdXAgYSByZXNvdXJjZSB3aGVuIGl0cyBzdGFjayBpcyBkZWxldGVkLlxuICAgICAqIFlvdSBzcGVjaWZ5IGEgRGVsZXRpb25Qb2xpY3kgYXR0cmlidXRlIGZvciBlYWNoIHJlc291cmNlIHRoYXQgeW91IHdhbnQgdG8gY29udHJvbC4gSWYgYSByZXNvdXJjZSBoYXMgbm8gRGVsZXRpb25Qb2xpY3lcbiAgICAgKiBhdHRyaWJ1dGUsIEFXUyBDbG91ZEZvcm1hdGlvbiBkZWxldGVzIHRoZSByZXNvdXJjZSBieSBkZWZhdWx0LiBOb3RlIHRoYXQgdGhpcyBjYXBhYmlsaXR5IGFsc28gYXBwbGllcyB0byB1cGRhdGUgb3BlcmF0aW9uc1xuICAgICAqIHRoYXQgbGVhZCB0byByZXNvdXJjZXMgYmVpbmcgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICBkZWxldGlvblBvbGljeT86IERlbGV0aW9uUG9saWN5O1xuXG4gICAgLyoqXG4gICAgICogVXNlIHRoZSBVcGRhdGVQb2xpY3kgYXR0cmlidXRlIHRvIHNwZWNpZnkgaG93IEFXUyBDbG91ZEZvcm1hdGlvbiBoYW5kbGVzIHVwZGF0ZXMgdG8gdGhlIEFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcbiAgICAgKiByZXNvdXJjZS4gQVdTIENsb3VkRm9ybWF0aW9uIGludm9rZXMgb25lIG9mIHRocmVlIHVwZGF0ZSBwb2xpY2llcyBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgY2hhbmdlIHlvdSBtYWtlIG9yIHdoZXRoZXIgYVxuICAgICAqIHNjaGVkdWxlZCBhY3Rpb24gaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAuXG4gICAgICovXG4gICAgdXBkYXRlUG9saWN5PzogVXBkYXRlUG9saWN5O1xuXG4gICAgLyoqXG4gICAgICogTWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZS4gVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGNvbnN0cnVjdCBtZXRhZGF0YSB3aGljaCBjYW4gYmUgYWRkZWRcbiAgICAgKiB1c2luZyBjb25zdHJ1Y3QuYWRkTWV0YWRhdGEoKSwgYnV0IHdvdWxkIG5vdCBhcHBlYXIgaW4gdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlIGF1dG9tYXRpY2FsbHkuXG4gICAgICovXG4gICAgbWV0YWRhdGE/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xufVxuIl19

@@ -1,2 +0,2 @@

import { Construct } from "../core/construct";
import { Construct } from '../core/construct';
import { Token } from '../core/tokens';

@@ -3,0 +3,0 @@ /**

@@ -46,6 +46,6 @@ "use strict";

});
this.value = param.ref;
this.value = new Secret(param.ref);
}
}
exports.SecretParameter = SecretParameter;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2VjcmV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaURBQThDO0FBQzlDLDJDQUF1QztBQUN2QywyQ0FBd0M7QUFFeEM7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxNQUFPLFNBQVEsY0FBSztDQUVoQztBQUZELHdCQUVDO0FBMkNEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxxQkFBUztJQU0xQyxZQUFZLE1BQWlCLEVBQUUsSUFBWSxFQUFFLEtBQWtCO1FBQzNELEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFcEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxxQkFBUyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUU7WUFDM0MsSUFBSSxFQUFFLG9DQUFvQztZQUMxQyxPQUFPLEVBQUUsS0FBSyxDQUFDLFlBQVk7WUFDM0IsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztZQUNwQyxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7WUFDbEMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLHFCQUFxQjtZQUNsRCxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLE1BQU0sRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQzNCLENBQUM7Q0FDSjtBQXZCRCwwQ0F1QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiLi4vY29yZS9jb25zdHJ1Y3RcIjtcbmltcG9ydCB7IFRva2VuIH0gZnJvbSAnLi4vY29yZS90b2tlbnMnO1xuaW1wb3J0IHsgUGFyYW1ldGVyIH0gZnJvbSAnLi9wYXJhbWV0ZXInO1xuXG4vKipcbiAqIEEgdG9rZW4gdGhhdCByZXByZXNlbnRzIGEgdmFsdWUgdGhhdCdzIGV4cGVjdGVkIHRvIGJlIGEgc2VjcmV0LCBsaWtlXG4gKiBwYXNzd29yZHMgYW5kIGtleXMuXG4gKlxuICogSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgU2VjcmV0UGFyYW1ldGVyYCBjb25zdHJ1Y3QgaW4gb3JkZXIgdG8gaW1wb3J0XG4gKiBzZWNyZXQgdmFsdWVzIGZyb20gdGhlIFNTTSBQYXJhbWV0ZXIgU3RvcmUgaW5zdGVhZCBvZiBzdG9yaW5nIHRoZW0gaW4geW91clxuICogY29kZS5cbiAqXG4gKiBIb3dldmVyLCB5b3UgY2FuIGFsc28ganVzdCBwYXNzIGluIHZhbHVlcywgbGlrZSBhbnkgb3RoZXIgdG9rZW46IGBuZXcgU2VjcmV0KCdibGEnKWBcbiAqL1xuZXhwb3J0IGNsYXNzIFNlY3JldCBleHRlbmRzIFRva2VuIHtcblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldFByb3BzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgU1NNIHBhcmFtZXRlciB3aGVyZSB0aGUgc2VjcmV0IHZhbHVlIGlzIHN0b3JlZC5cbiAgICAgKi9cbiAgICBzc21QYXJhbWV0ZXI6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEEgc3RyaW5nIG9mIHVwIHRvIDQwMDAgY2hhcmFjdGVycyB0aGF0IGRlc2NyaWJlcyB0aGUgcGFyYW1ldGVyLlxuICAgICAqIEBkZWZhdWx0IE5vIGRlc2NyaXB0aW9uXG4gICAgICovXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHJlcHJlc2VudHMgdGhlIHBhdHRlcm5zIHRvIGFsbG93IGZvciBTdHJpbmcgdHlwZXMuXG4gICAgICovXG4gICAgYWxsb3dlZFBhdHRlcm4/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBjb250YWluaW5nIHRoZSBsaXN0IG9mIHZhbHVlcyBhbGxvd2VkIGZvciB0aGUgcGFyYW1ldGVyLlxuICAgICAqL1xuICAgIGFsbG93ZWRWYWx1ZXM/OiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIEEgc3RyaW5nIHRoYXQgZXhwbGFpbnMgYSBjb25zdHJhaW50IHdoZW4gdGhlIGNvbnN0cmFpbnQgaXMgdmlvbGF0ZWQuXG4gICAgICogRm9yIGV4YW1wbGUsIHdpdGhvdXQgYSBjb25zdHJhaW50IGRlc2NyaXB0aW9uLCBhIHBhcmFtZXRlciB0aGF0IGhhcyBhbiBhbGxvd2VkXG4gICAgICogcGF0dGVybiBvZiBbQS1aYS16MC05XSsgZGlzcGxheXMgdGhlIGZvbGxvd2luZyBlcnJvciBtZXNzYWdlIHdoZW4gdGhlIHVzZXIgc3BlY2lmaWVzXG4gICAgICogYW4gaW52YWxpZCB2YWx1ZTpcbiAgICAgKi9cbiAgICBjb25zdHJhaW50RGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlZ2VyIHZhbHVlIHRoYXQgZGV0ZXJtaW5lcyB0aGUgbGFyZ2VzdCBudW1iZXIgb2YgY2hhcmFjdGVycyB5b3Ugd2FudCB0byBhbGxvdyBmb3IgU3RyaW5nIHR5cGVzLlxuICAgICAqL1xuICAgIG1heExlbmd0aD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEFuIGludGVnZXIgdmFsdWUgdGhhdCBkZXRlcm1pbmVzIHRoZSBzbWFsbGVzdCBudW1iZXIgb2YgY2hhcmFjdGVycyB5b3Ugd2FudCB0byBhbGxvdyBmb3IgU3RyaW5nIHR5cGVzLlxuICAgICAqL1xuICAgIG1pbkxlbmd0aD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIGEgc2VjcmV0IHZhbHVlIHJlc29sdmVkIGZyb20gdGhlIFN5c3RlbXMgTWFuYWdlciAoU1NNKSBQYXJhbWV0ZXJcbiAqIFN0b3JlIGR1cmluZyBkZXBsb3ltZW50LiBUaGlzIGlzIHVzZWZ1bCBmb3IgcmVmZXJlbmNpbmcgdmFsdWVzIHRoYXQgeW91IGRvXG4gKiBub3Qgd2lzaCB0byBpbmNsdWRlIGluIHlvdXIgY29kZSBiYXNlLCBzdWNoIGFzIHNlY3JldHMsIHBhc3N3b3JkcyBhbmQga2V5cy5cbiAqXG4gKiBUaGlzIGNvbnN0cnVjdCB3aWxsIGFkZCBhIENsb3VkRm9ybWF0aW9uIHBhcmFtZXRlciB0byB5b3VyIHRlbXBsYXRlIGJvdW5kIHRvXG4gKiBhbiBTU00gcGFyYW1ldGVyIChvZiB0eXBlIFwiQVdTOjpTU006OlBhcmFtZXRlcjo6VmFsdWU8U3RyaW5nPlwiKS4gRGVwbG95bWVudFxuICogd2lsbCBmYWlsIGlmIHRoZSB2YWx1ZSBkb2Vzbid0IGV4aXN0IGluIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQuXG4gKlxuICogSW1wb3J0YW50OiBGb3IgdmFsdWVzIG90aGVyIHRoYW4gc2VjcmV0cywgcHJlZmVyIHRvIHVzZSB0aGVcbiAqIGBTU01QYXJhbWV0ZXJQcm92aWRlcmAgd2hpY2ggcmVzb2x2ZXMgU1NNIHBhcmFtZXRlciBpbiBkZXNpZ24tdGltZSwgYW5kXG4gKiBlbnN1cmVzIHRoYXQgc3RhY2sgZGVwbG95bWVudHMgYXJlIGRldGVybWluaXN0aWMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZWNyZXRQYXJhbWV0ZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgc2VjcmV0IHBhcmFtZXRlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgdmFsdWU6IFNlY3JldDtcblxuICAgIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBTZWNyZXRQcm9wcykge1xuICAgICAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtID0gbmV3IFBhcmFtZXRlcih0aGlzLCAnUGFyYW1ldGVyJywge1xuICAgICAgICAgICAgdHlwZTogJ0FXUzo6U1NNOjpQYXJhbWV0ZXI6OlZhbHVlPFN0cmluZz4nLFxuICAgICAgICAgICAgZGVmYXVsdDogcHJvcHMuc3NtUGFyYW1ldGVyLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgYWxsb3dlZFBhdHRlcm46IHByb3BzLmFsbG93ZWRQYXR0ZXJuLFxuICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogcHJvcHMuYWxsb3dlZFZhbHVlcyxcbiAgICAgICAgICAgIGNvbnN0cmFpbnREZXNjcmlwdGlvbjogcHJvcHMuY29uc3RyYWludERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgbWF4TGVuZ3RoOiBwcm9wcy5tYXhMZW5ndGgsXG4gICAgICAgICAgICBtaW5MZW5ndGg6IHByb3BzLm1pbkxlbmd0aCxcbiAgICAgICAgICAgIG5vRWNobzogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy52YWx1ZSA9IHBhcmFtLnJlZjtcbiAgICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2VjcmV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaURBQThDO0FBQzlDLDJDQUF1QztBQUN2QywyQ0FBd0M7QUFFeEM7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxNQUFPLFNBQVEsY0FBSztDQUFJO0FBQXJDLHdCQUFxQztBQTJDckM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBYSxlQUFnQixTQUFRLHFCQUFTO0lBTTFDLFlBQVksTUFBaUIsRUFBRSxJQUFZLEVBQUUsS0FBa0I7UUFDM0QsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVwQixNQUFNLEtBQUssR0FBRyxJQUFJLHFCQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUMzQyxJQUFJLEVBQUUsb0NBQW9DO1lBQzFDLE9BQU8sRUFBRSxLQUFLLENBQUMsWUFBWTtZQUMzQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO1lBQ3BDLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtZQUNsQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMscUJBQXFCO1lBQ2xELFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsTUFBTSxFQUFFLElBQUk7U0FDZixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0o7QUF2QkQsMENBdUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnLi4vY29yZS9jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tICcuLi9jb3JlL3Rva2Vucyc7XG5pbXBvcnQgeyBQYXJhbWV0ZXIgfSBmcm9tICcuL3BhcmFtZXRlcic7XG5cbi8qKlxuICogQSB0b2tlbiB0aGF0IHJlcHJlc2VudHMgYSB2YWx1ZSB0aGF0J3MgZXhwZWN0ZWQgdG8gYmUgYSBzZWNyZXQsIGxpa2VcbiAqIHBhc3N3b3JkcyBhbmQga2V5cy5cbiAqXG4gKiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBTZWNyZXRQYXJhbWV0ZXJgIGNvbnN0cnVjdCBpbiBvcmRlciB0byBpbXBvcnRcbiAqIHNlY3JldCB2YWx1ZXMgZnJvbSB0aGUgU1NNIFBhcmFtZXRlciBTdG9yZSBpbnN0ZWFkIG9mIHN0b3JpbmcgdGhlbSBpbiB5b3VyXG4gKiBjb2RlLlxuICpcbiAqIEhvd2V2ZXIsIHlvdSBjYW4gYWxzbyBqdXN0IHBhc3MgaW4gdmFsdWVzLCBsaWtlIGFueSBvdGhlciB0b2tlbjogYG5ldyBTZWNyZXQoJ2JsYScpYFxuICovXG5leHBvcnQgY2xhc3MgU2VjcmV0IGV4dGVuZHMgVG9rZW4geyB9XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VjcmV0UHJvcHMge1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBTU00gcGFyYW1ldGVyIHdoZXJlIHRoZSBzZWNyZXQgdmFsdWUgaXMgc3RvcmVkLlxuICAgICAqL1xuICAgIHNzbVBhcmFtZXRlcjogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQSBzdHJpbmcgb2YgdXAgdG8gNDAwMCBjaGFyYWN0ZXJzIHRoYXQgZGVzY3JpYmVzIHRoZSBwYXJhbWV0ZXIuXG4gICAgICogQGRlZmF1bHQgTm8gZGVzY3JpcHRpb25cbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgcmVwcmVzZW50cyB0aGUgcGF0dGVybnMgdG8gYWxsb3cgZm9yIFN0cmluZyB0eXBlcy5cbiAgICAgKi9cbiAgICBhbGxvd2VkUGF0dGVybj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YgdmFsdWVzIGFsbG93ZWQgZm9yIHRoZSBwYXJhbWV0ZXIuXG4gICAgICovXG4gICAgYWxsb3dlZFZhbHVlcz86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogQSBzdHJpbmcgdGhhdCBleHBsYWlucyBhIGNvbnN0cmFpbnQgd2hlbiB0aGUgY29uc3RyYWludCBpcyB2aW9sYXRlZC5cbiAgICAgKiBGb3IgZXhhbXBsZSwgd2l0aG91dCBhIGNvbnN0cmFpbnQgZGVzY3JpcHRpb24sIGEgcGFyYW1ldGVyIHRoYXQgaGFzIGFuIGFsbG93ZWRcbiAgICAgKiBwYXR0ZXJuIG9mIFtBLVphLXowLTldKyBkaXNwbGF5cyB0aGUgZm9sbG93aW5nIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgdXNlciBzcGVjaWZpZXNcbiAgICAgKiBhbiBpbnZhbGlkIHZhbHVlOlxuICAgICAqL1xuICAgIGNvbnN0cmFpbnREZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEFuIGludGVnZXIgdmFsdWUgdGhhdCBkZXRlcm1pbmVzIHRoZSBsYXJnZXN0IG51bWJlciBvZiBjaGFyYWN0ZXJzIHlvdSB3YW50IHRvIGFsbG93IGZvciBTdHJpbmcgdHlwZXMuXG4gICAgICovXG4gICAgbWF4TGVuZ3RoPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZWdlciB2YWx1ZSB0aGF0IGRldGVybWluZXMgdGhlIHNtYWxsZXN0IG51bWJlciBvZiBjaGFyYWN0ZXJzIHlvdSB3YW50IHRvIGFsbG93IGZvciBTdHJpbmcgdHlwZXMuXG4gICAgICovXG4gICAgbWluTGVuZ3RoPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIERlZmluZXMgYSBzZWNyZXQgdmFsdWUgcmVzb2x2ZWQgZnJvbSB0aGUgU3lzdGVtcyBNYW5hZ2VyIChTU00pIFBhcmFtZXRlclxuICogU3RvcmUgZHVyaW5nIGRlcGxveW1lbnQuIFRoaXMgaXMgdXNlZnVsIGZvciByZWZlcmVuY2luZyB2YWx1ZXMgdGhhdCB5b3UgZG9cbiAqIG5vdCB3aXNoIHRvIGluY2x1ZGUgaW4geW91ciBjb2RlIGJhc2UsIHN1Y2ggYXMgc2VjcmV0cywgcGFzc3dvcmRzIGFuZCBrZXlzLlxuICpcbiAqIFRoaXMgY29uc3RydWN0IHdpbGwgYWRkIGEgQ2xvdWRGb3JtYXRpb24gcGFyYW1ldGVyIHRvIHlvdXIgdGVtcGxhdGUgYm91bmQgdG9cbiAqIGFuIFNTTSBwYXJhbWV0ZXIgKG9mIHR5cGUgXCJBV1M6OlNTTTo6UGFyYW1ldGVyOjpWYWx1ZTxTdHJpbmc+XCIpLiBEZXBsb3ltZW50XG4gKiB3aWxsIGZhaWwgaWYgdGhlIHZhbHVlIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIHRhcmdldCBlbnZpcm9ubWVudC5cbiAqXG4gKiBJbXBvcnRhbnQ6IEZvciB2YWx1ZXMgb3RoZXIgdGhhbiBzZWNyZXRzLCBwcmVmZXIgdG8gdXNlIHRoZVxuICogYFNTTVBhcmFtZXRlclByb3ZpZGVyYCB3aGljaCByZXNvbHZlcyBTU00gcGFyYW1ldGVyIGluIGRlc2lnbi10aW1lLCBhbmRcbiAqIGVuc3VyZXMgdGhhdCBzdGFjayBkZXBsb3ltZW50cyBhcmUgZGV0ZXJtaW5pc3RpYy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlY3JldFBhcmFtZXRlciBleHRlbmRzIENvbnN0cnVjdCB7XG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBzZWNyZXQgcGFyYW1ldGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyB2YWx1ZTogU2VjcmV0O1xuXG4gICAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IFNlY3JldFByb3BzKSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG5cbiAgICAgICAgY29uc3QgcGFyYW0gPSBuZXcgUGFyYW1ldGVyKHRoaXMsICdQYXJhbWV0ZXInLCB7XG4gICAgICAgICAgICB0eXBlOiAnQVdTOjpTU006OlBhcmFtZXRlcjo6VmFsdWU8U3RyaW5nPicsXG4gICAgICAgICAgICBkZWZhdWx0OiBwcm9wcy5zc21QYXJhbWV0ZXIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBhbGxvd2VkUGF0dGVybjogcHJvcHMuYWxsb3dlZFBhdHRlcm4sXG4gICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBwcm9wcy5hbGxvd2VkVmFsdWVzLFxuICAgICAgICAgICAgY29uc3RyYWludERlc2NyaXB0aW9uOiBwcm9wcy5jb25zdHJhaW50RGVzY3JpcHRpb24sXG4gICAgICAgICAgICBtYXhMZW5ndGg6IHByb3BzLm1heExlbmd0aCxcbiAgICAgICAgICAgIG1pbkxlbmd0aDogcHJvcHMubWluTGVuZ3RoLFxuICAgICAgICAgICAgbm9FY2hvOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IFNlY3JldChwYXJhbS5yZWYpO1xuICAgIH1cbn1cbiJdfQ==
import cxapi = require('@aws-cdk/cx-api');
import { App } from '../app';
import { Construct } from '../core/construct';
import { Token } from '../core/tokens';
import { Environment } from '../environment';

@@ -223,3 +222,3 @@ import { CloudFormationToken } from './cloudformation-token';

*/
readonly ref: Token;
readonly ref: string;
}

@@ -226,0 +225,0 @@ /**

@@ -276,3 +276,3 @@ "use strict";

get ref() {
return new Ref(this);
return new Ref(this).toString();
}

@@ -315,2 +315,2 @@ }

exports.Ref = Ref;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlDQUEwQztBQUUxQyxpREFBd0Q7QUFDeEQsMkNBQWdEO0FBRWhELGlFQUE2RDtBQUM3RCw2Q0FBcUY7QUFvQnJGOztHQUVHO0FBQ0gsTUFBYSxLQUFNLFNBQVEscUJBQVM7SUFpRWhDOzs7Ozs7T0FNRztJQUNILFlBQW1CLE1BQVksRUFBRSxJQUFhLEVBQUUsS0FBa0I7UUFDOUQsb0dBQW9HO1FBQ3BHLEtBQUssQ0FBQyxNQUFPLEVBQUUsSUFBSyxDQUFDLENBQUM7UUF6QzFCOzs7O1dBSUc7UUFDYSxtQkFBYyxHQUE0QyxFQUFHLENBQUM7UUFPOUU7O1dBRUc7UUFDYSxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBTy9COztXQUVHO1FBQ2Esb0JBQWUsR0FBb0IsRUFBRSxDQUFDO1FBaUJsRCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV4QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksdUJBQVUsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxtQ0FBc0IsRUFBRSxDQUFDLENBQUM7UUFDbEgsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksT0FBTyxDQUFDO0lBQ2hDLENBQUM7SUE5RUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBZTtRQUM5QixJQUFJLElBQUksR0FBMEIsSUFBSSxDQUFDO1FBQ3ZDLE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUN0QjtRQUVELElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtZQUNkLE1B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XG5pbXBvcnQgeyBBcHAgfSBmcm9tICcuLi9hcHAnO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBQQVRIX1NFUCB9IGZyb20gJy4uL2NvcmUvY29uc3RydWN0JztcbmltcG9ydCB7IHJlc29sdmUsIFRva2VuIH0gZnJvbSAnLi4vY29yZS90b2tlbnMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvblRva2VuIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbi10b2tlbic7XG5pbXBvcnQgeyBIYXNoZWRBZGRyZXNzaW5nU2NoZW1lLCBJQWRkcmVzc2luZ1NjaGVtZSwgTG9naWNhbElEcyB9IGZyb20gJy4vbG9naWNhbC1pZCc7XG5pbXBvcnQgeyBSZXNvdXJjZSB9IGZyb20gJy4vcmVzb3VyY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrUHJvcHMge1xuICAgIC8qKlxuICAgICAqIFRoZSBBV1MgZW52aXJvbm1lbnQgKGFjY291bnQvcmVnaW9uKSB3aGVyZSB0aGlzIHN0YWNrIHdpbGwgYmUgZGVwbG95ZWQuXG4gICAgICpcbiAgICAgKiBJZiBub3Qgc3VwcGxpZWQsIHRoZSBgZGVmYXVsdC1hY2NvdW50YCBhbmQgYGRlZmF1bHQtcmVnaW9uYCBjb250ZXh0IHBhcmFtZXRlcnMgd2lsbCBiZVxuICAgICAqIHVzZWQuIElmIHRoZXkgYXJlIHVuZGVmaW5lZCwgaXQgd2lsbCBub3QgYmUgcG9zc2libGUgdG8gZGVwbG95IHRoZSBzdGFjay5cbiAgICAgKi9cbiAgICBlbnY/OiBFbnZpcm9ubWVudDtcblxuICAgIC8qKlxuICAgICAqIFN0cmF0ZWd5IGZvciBsb2dpY2FsIElEIGdlbmVyYXRpb25cbiAgICAgKlxuICAgICAqIE9wdGlvbmFsLiBJZiBub3Qgc3VwcGxpZWQsIHRoZSBIYXNoZWROYW1pbmdTY2hlbWUgd2lsbCBiZSB1c2VkLlxuICAgICAqL1xuICAgIG5hbWluZ1NjaGVtZT86IElBZGRyZXNzaW5nU2NoZW1lO1xufVxuXG4vKipcbiAqIEEgcm9vdCBjb25zdHJ1Y3Qgd2hpY2ggcmVwcmVzZW50cyBhIHNpbmdsZSBDbG91ZEZvcm1hdGlvbiBzdGFjay5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0YWNrIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgICAvKipcbiAgICAgKiBUcmF2ZXJzZXMgdGhlIHRyZWUgYW5kIGxvb2tzIHVwIGZvciB0aGUgU3RhY2sgcm9vdC5cbiAgICAgKiBAcGFyYW0gbm9kZSBBIGNvbnN0cnVjdCBpbiB0aGUgdHJlZVxuICAgICAqIEByZXR1cm5zIFRoZSBTdGFjayBvYmplY3QgKHRocm93cyBpZiB0aGUgbm9kZSBpcyBub3QgcGFydCBvZiBhIFN0YWNrLXJvb3RlZCB0cmVlKVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZmluZChub2RlOiBDb25zdHJ1Y3QpOiBTdGFjayB7XG4gICAgICAgIGxldCBjdXJyOiBDb25zdHJ1Y3QgfCB1bmRlZmluZWQgPSBub2RlO1xuICAgICAgICB3aGlsZSAoY3VyciAhPSBudWxsICYmICFpc1N0YWNrKGN1cnIpKSB7XG4gICAgICAgICAgICBjdXJyID0gY3Vyci5wYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VyciA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIGEgU3RhY2sgcGFyZW50IGZvciAnJHtub2RlLnRvU3RyaW5nKCl9J2ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBtZXRhZGF0YSBhbm5vdGF0aW9uIFwiYXdzOmNkazpwaHlzaWNhbC1uYW1lXCIgdG8gdGhlIGNvbnN0cnVjdCBpZiBwaHlzaWNhbE5hbWVcbiAgICAgKiBpcyBub24tbnVsbC4gVGhpcyBjYW4gYmUgdXNlZCBsYXRlciBieSB0b29scyBhbmQgYXNwZWN0cyB0byBkZXRlcm1pbmUgaWYgcmVzb3VyY2VzXG4gICAgICogaGF2ZSBiZWVuIGNyZWF0ZWQgd2l0aCBwaHlzaWNhbCBuYW1lcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGFubm90YXRlUGh5c2ljYWxOYW1lKGNvbnN0cnVjdDogQ29uc3RydWN0LCBwaHlzaWNhbE5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHBoeXNpY2FsTmFtZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdHJ1Y3QuYWRkTWV0YWRhdGEoJ2F3czpjZGs6cGh5c2ljYWwtbmFtZScsIHBoeXNpY2FsTmFtZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVkFMSURfU1RBQ0tfTkFNRV9SRUdFWCA9IC9eW0EtWmEtel1bQS1aYS16MC05LV0qJC87XG5cbiAgICAvKipcbiAgICAgKiBMaXN0cyBhbGwgbWlzc2luZyBjb250ZXh0dWFsIGluZm9ybWF0aW9uLlxuICAgICAqIFRoaXMgaXMgcmV0dXJuZWQgd2hlbiB0aGUgc3RhY2sgaXMgc3ludGhlc2l6ZWQgdW5kZXIgdGhlICdtaXNzaW5nJyBhdHRyaWJ1dGVcbiAgICAgKiBhbmQgYWxsb3dzIHRvb2xpbmcgdG8gb2J0YWluIHRoZSBjb250ZXh0IGFuZCByZS1zeW50aGVzaXplLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBtaXNzaW5nQ29udGV4dDogeyBba2V5OiBzdHJpbmddOiBjeGFwaS5NaXNzaW5nQ29udGV4dCB9ID0geyB9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVudmlyb25tZW50IGluIHdoaWNoIHRoaXMgc3RhY2sgaXMgZGVwbG95ZWQuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGVudjogRW52aXJvbm1lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVybWluZSBpZiB0aGlzIGNvbnN0cnVjdCBpcyBhIHN0YWNrLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBpc1N0YWNrID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIExvZ2ljYWwgSUQgZ2VuZXJhdGlvbiBzdHJhdGVneVxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBsb2dpY2FsSWRzOiBMb2dpY2FsSURzO1xuXG4gICAgLyoqXG4gICAgICogT3B0aW9ucyBmb3IgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgKGxpa2UgdmVyc2lvbiwgdHJhbnNmb3JtLCBkZXNjcmlwdGlvbikuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHRlbXBsYXRlT3B0aW9uczogVGVtcGxhdGVPcHRpb25zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQ2xvdWRGb3JtYXRpb24gc3RhY2sgbmFtZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBzdGFjay5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJlbnQgUGFyZW50IG9mIHRoaXMgc3RhY2ssIHVzdWFsbHkgYSBQcm9ncmFtIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBDbG91ZEZvcm1hdGlvbiBzdGFjay4gRGVmYXVsdHMgdG8gXCJTdGFja1wiLlxuICAgICAqIEBwYXJhbSBwcm9wcyBTdGFjayBwcm9wZXJ0aWVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJlbnQ/OiBBcHAsIG5hbWU/OiBzdHJpbmcsIHByb3BzPzogU3RhY2tQcm9wcykge1xuICAgICAgICAvLyBGb3IgdW5pdCB0ZXN0IGNvbnZlbmllbmNlIHBhcmVudHMgYXJlIG9wdGlvbmFsLCBzbyBieXBhc3MgdGhlIHR5cGUgY2hlY2sgd2hlbiBjYWxsaW5nIHRoZSBwYXJlbnQuXG4gICAgICAgIHN1cGVyKHBhcmVudCEsIG5hbWUhKTtcbiAgICAgICAgdGhpcy5lbnYgPSB0aGlzLnBhcnNlRW52aXJvbm1lbnQocHJvcHMpO1xuXG4gICAgICAgIHRoaXMubG9naWNhbElkcyA9IG5ldyBMb2dpY2FsSURzKHByb3BzICYmIHByb3BzLm5hbWluZ1NjaGVtZSA/IHByb3BzLm5hbWluZ1NjaGVtZSA6IG5ldyBIYXNoZWRBZGRyZXNzaW5nU2NoZW1lKCkpO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lIHx8ICdTdGFjayc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9va3MgdXAgYSByZXNvdXJjZSBieSBwYXRoLlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIFJlc291cmNlIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBwdWJsaWMgZmluZFJlc291cmNlKHBhdGg6IHN0cmluZyk6IFJlc291cmNlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgciA9IHRoaXMuZmluZENoaWxkKHBhdGgpO1xuICAgICAgICBpZiAoIXIpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuXG4gICAgICAgIC8vIGZvdW5kIGFuIGVsZW1lbnQsIGNoZWNrIGlmIGl0J3MgYSByZXNvdXJjZSAoZHVjay10eXBlKVxuICAgICAgICBpZiAoISgncmVzb3VyY2VUeXBlJyBpbiByKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb3VuZCBhIHN0YWNrIGVsZW1lbnQgZm9yICR7cGF0aH0gYnV0IGl0IGlzIG5vdCBhIHJlc291cmNlOiAke3IudG9TdHJpbmcoKX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByIGFzIFJlc291cmNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlIGZvciB0aGlzIHN0YWNrIGJ5IHRyYXZlcnNpbmdcbiAgICAgKiB0aGUgdHJlZSBhbmQgaW52b2tpbmcgdG9DbG91ZEZvcm1hdGlvbigpIG9uIGFsbCBFbnRpdHkgb2JqZWN0cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG9DbG91ZEZvcm1hdGlvbigpIHtcbiAgICAgICAgLy8gYmVmb3JlIHdlIGJlZ2luIHN5bnRoZXNpcywgd2Ugc2hhbGwgbG9jayB0aGlzIHN0YWNrLCBzbyBjaGlsZHJlbiBjYW5ub3QgYmUgYWRkZWRcbiAgICAgICAgdGhpcy5sb2NrKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgRGVzY3JpcHRpb246IHRoaXMudGVtcGxhdGVPcHRpb25zLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIFRyYW5zZm9ybTogdGhpcy50ZW1wbGF0ZU9wdGlvbnMudHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgIEFXU1RlbXBsYXRlRm9ybWF0VmVyc2lvbjogdGhpcy50ZW1wbGF0ZU9wdGlvbnMudGVtcGxhdGVGb3JtYXRWZXJzaW9uLFxuICAgICAgICAgICAgICAgIE1ldGFkYXRhOiB0aGlzLnRlbXBsYXRlT3B0aW9ucy5tZXRhZGF0YVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBzdGFja0VsZW1lbnRzKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRzID0gZWxlbWVudHMubWFwKGUgPT4gZS50b0Nsb3VkRm9ybWF0aW9uKCkpO1xuXG4gICAgICAgICAgICAvLyBtZXJnZSBpbiBhbGwgQ2xvdWRGb3JtYXRpb24gZnJhZ21lbnRzIGNvbGxlY3RlZCBmcm9tIHRoZSB0cmVlXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50cykge1xuICAgICAgICAgICAgICAgIG1lcmdlKHRlbXBsYXRlLCBmcmFnbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHJlc29sdmUgYWxsIHRva2VucyBhbmQgcmVtb3ZlIGFsbCBlbXB0aWVzXG4gICAgICAgICAgICBjb25zdCByZXQgPSByZXNvbHZlKHRlbXBsYXRlKSB8fCB7IH07XG5cbiAgICAgICAgICAgIHRoaXMubG9naWNhbElkcy5hc3NlcnRBbGxSZW5hbWVzQXBwbGllZCgpO1xuXG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgLy8gYWxsb3cgbXV0YXRpb25zIGFmdGVyIHN5bnRoZXNpcyBpcyBmaW5pc2hlZC5cbiAgICAgICAgICAgIHRoaXMudW5sb2NrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gd2h5IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2h5IHJlZ2lvbiBpcyByZXF1aXJlZC5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVnaW9uIGluIHdoaWNoIHRoaXMgc3RhY2sgaXMgZGVwbG95ZWQuIFRocm93cyBpZiByZWdpb24gaXMgbm90IGRlZmluZWQuXG4gICAgICovXG4gICAgcHVibGljIHJlcXVpcmVSZWdpb24od2h5Pzogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy5lbnYucmVnaW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7d2h5ID8gd2h5ICsgJy4gJyA6ICcnfVN0YWNrIHJlcXVpcmVzIHJlZ2lvbiBpbmZvcm1hdGlvbi4gSXQgY2FuIGJlIGVpdGhlciBzdXBwbGllZCB2aWEgdGhlIFwiZW52XCIgcHJvcGVydHksIGAgK1xuICAgICAgICAgICAgICAgICAgICBgdmlhIHRoZSBcIiR7Y3hhcGkuREVGQVVMVF9SRUdJT05fQ09OVEVYVF9LRVl9XCIgY29udGV4dCBwYXJhbWV0ZXJzIG9yIHVzaW5nIFwiYXdzIGNvbmZpZ3VyZVwiYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5lbnYucmVnaW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlIHRoYXQgYSBjb250ZXh0IGtleSB3YXMgZXhwZWN0ZWRcbiAgICAgKlxuICAgICAqIENvbnRhaW5zIGluc3RydWN0aW9ucyBvbiBob3cgdGhlIGtleSBzaG91bGQgYmUgc3VwcGxpZWQuXG4gICAgICogQHBhcmFtIGtleSBLZXkgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoaXMgbWlzc2luZyBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBkZXRhaWxzIFRoZSBzZXQgb2YgcGFyYW1ldGVycyBuZWVkZWQgdG8gb2J0YWluIHRoZSBjb250ZXh0IChzcGVjaWZpYyB0byBjb250ZXh0IHByb3ZpZGVyKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVwb3J0TWlzc2luZ0NvbnRleHQoa2V5OiBzdHJpbmcsIGRldGFpbHM6IGN4YXBpLk1pc3NpbmdDb250ZXh0KSB7XG4gICAgICAgIHRoaXMubWlzc2luZ0NvbnRleHRba2V5XSA9IGRldGFpbHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVuYW1lIGEgZ2VuZXJhdGVkIGxvZ2ljYWwgaWRlbnRpdGllc1xuICAgICAqL1xuICAgIHB1YmxpYyByZW5hbWVMb2dpY2FsKG9sZElkOiBzdHJpbmcsIG5ld0lkOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWNvbnNvbGVcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWxsIHJlbmFtZXMgbXVzdCBiZSBzZXQgdXAgYmVmb3JlIGFkZGluZyBlbGVtZW50cyB0byB0aGUgc3RhY2tcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZ2ljYWxJZHMucmVuYW1lTG9naWNhbChvbGRJZCwgbmV3SWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIHN0YWNrIG5hbWVcbiAgICAgKlxuICAgICAqIENsb3VkRm9ybWF0aW9uIHN0YWNrIG5hbWVzIGNhbiBpbmNsdWRlIGRhc2hlcyBpbiBhZGRpdGlvbiB0byB0aGUgcmVndWxhciBpZGVudGlmaWVyXG4gICAgICogY2hhcmFjdGVyIGNsYXNzZXMsIGFuZCB3ZSBkb24ndCBhbGxvdyBvbmUgb2YgdGhlIG1hZ2ljIG1hcmtlcnMuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF92YWxpZGF0ZUlkKG5hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAoIVN0YWNrLlZBTElEX1NUQUNLX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdGFjayBuYW1lIG11c3QgbWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbjogJHtTdGFjay5WQUxJRF9TVEFDS19OQU1FX1JFR0VYLnRvU3RyaW5nKCl9LCBnb3QgJyR7bmFtZX0nYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVkIGRlZmF1bHRzIHRvIGVudmlyb25tZW50IGF0dHJpYnV0ZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXJzZUVudmlyb25tZW50KHByb3BzPzogU3RhY2tQcm9wcykge1xuICAgICAgICAvLyBzdGFydCB3aXRoIGBlbnZgLlxuICAgICAgICBjb25zdCBlbnY6IEVudmlyb25tZW50ID0gKHByb3BzICYmIHByb3BzLmVudikgfHwgeyB9O1xuXG4gICAgICAgIC8vIGlmIGFjY291bnQgaXMgbm90IHNwZWNpZmllZCwgYXR0ZW1wdCB0byByZWFkIGZyb20gY29udGV4dC5cbiAgICAgICAgaWYgKCFlbnYuYWNjb3VudCkge1xuICAgICAgICAgICAgZW52LmFjY291bnQgPSB0aGlzLmdldENvbnRleHQoY3hhcGkuREVGQVVMVF9BQ0NPVU5UX0NPTlRFWFRfS0VZKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLCBhdHRlbXB0IHRvIHJlYWQgZnJvbSBjb250ZXh0LlxuICAgICAgICBpZiAoIWVudi5yZWdpb24pIHtcbiAgICAgICAgICAgIGVudi5yZWdpb24gPSB0aGlzLmdldENvbnRleHQoY3hhcGkuREVGQVVMVF9SRUdJT05fQ09OVEVYVF9LRVkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVudjtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlKHRlbXBsYXRlOiBhbnksIHBhcnQ6IGFueSkge1xuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBPYmplY3Qua2V5cyhwYXJ0KSkge1xuICAgICAgICBjb25zdCBzcmMgPSBwYXJ0W3NlY3Rpb25dO1xuXG4gICAgICAgIC8vIGNyZWF0ZSB0b3AtbGV2ZWwgc2VjdGlvbiBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGxldCBkZXN0ID0gdGVtcGxhdGVbc2VjdGlvbl07XG4gICAgICAgIGlmICghZGVzdCkge1xuICAgICAgICAgICAgdGVtcGxhdGVbc2VjdGlvbl0gPSBkZXN0ID0gc3JjO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gYWRkIGFsbCBlbnRpdGllcyBmcm9tIHNvdXJjZSBzZWN0aW9uIHRvIGRlc3RpbmF0aW9uIHNlY3Rpb25cbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgT2JqZWN0LmtleXMoc3JjKSkge1xuICAgICAgICAgICAgICAgIGlmIChpZCBpbiBkZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc2VjdGlvbiAnJHtzZWN0aW9ufScgYWxyZWFkeSBjb250YWlucyAnJHtpZH0nYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlc3RbaWRdID0gc3JjW2lkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuY29uc3QgTE9HSUNBTF9JRF9NRCA9ICdhd3M6Y2RrOmxvZ2ljYWxJZCc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNvbnN0cnVjdCB0aGF0IGNhbiBiZSBcImRlcGVuZGVkIG9uXCIgdmlhIGBhZGREZXBlbmRlbmN5YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGVwZW5kYWJsZSB7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2V0IG9mIGFsbCBzdGFjayBlbGVtZW50cyAocmVzb3VyY2VzLCBwYXJhbWV0ZXJzLCBjb25kaXRpb25zKVxuICAgICAqIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHdoZW4gYSByZXNvdXJjZSBcImRlcGVuZHMgb25cIiB0aGlzIGNvbnN0cnVjdC5cbiAgICAgKi9cbiAgICByZWFkb25seSBkZXBlbmRlbmN5RWxlbWVudHM6IElEZXBlbmRhYmxlW107XG59XG5cbi8qKlxuICogQW4gZWxlbWVudCBvZiBhIENsb3VkRm9ybWF0aW9uIHN0YWNrLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3RhY2tFbGVtZW50IGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSURlcGVuZGFibGUge1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIGEgY29uc3RydWN0IGlzIGEgc3RhY2sgZWxlbWVudCAoaS5lLiBwYXJ0IG9mIHRoZVxuICAgICAqIHN5bnRoZXNpemVkIGNsb3VkZm9ybWF0aW9uIHRlbXBsYXRlKS5cbiAgICAgKlxuICAgICAqIFVzZXMgZHVjay10eXBpbmcgaW5zdGVhZCBvZiBgaW5zdGFuY2VvZmAgdG8gYWxsb3cgc3RhY2sgZWxlbWVudHMgZnJvbSBkaWZmZXJlbnRcbiAgICAgKiB2ZXJzaW9ucyBvZiB0aGlzIGxpYnJhcnkgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIHNhbWUgc3RhY2suXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgY29uc3RydWN0IGFzIGEgc3RhY2sgZWxlbWVudCBvciB1bmRlZmluZWQgaWYgaXQgaXMgbm90IGEgc3RhY2sgZWxlbWVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIF9hc1N0YWNrRWxlbWVudChjb25zdHJ1Y3Q6IENvbnN0cnVjdCk6IFN0YWNrRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICgnbG9naWNhbElkJyBpbiBjb25zdHJ1Y3QgJiYgJ3RvQ2xvdWRGb3JtYXRpb24nIGluIGNvbnN0cnVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdCBhcyBTdGFja0VsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGxvZ2ljYWwgSUQgZm9yIHRoaXMgQ2xvdWRGb3JtYXRpb24gc3RhY2sgZWxlbWVudFxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBsb2dpY2FsSWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdGFjayB0aGlzIENvbnN0cnVjdCBoYXMgYmVlbiBtYWRlIGEgcGFydCBvZlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzdGFjazogU3RhY2s7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGVudGl0eSBhbmQgYmluZHMgaXQgdG8gYSB0cmVlLlxuICAgICAqIE5vdGUgdGhhdCB0aGUgcm9vdCBvZiB0aGUgdHJlZSBtdXN0IGJlIGEgU3RhY2sgb2JqZWN0IChub3QganVzdCBhbnkgUm9vdCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyZW50IFRoZSBwYXJlbnQgY29uc3RydWN0XG4gICAgICogQHBhcmFtIHByb3BzIENvbnN0cnVjdCBwcm9wZXJ0aWVzXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZykge1xuICAgICAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuICAgICAgICBjb25zdCBzID0gU3RhY2suZmluZCh0aGlzKTtcbiAgICAgICAgaWYgKCFzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0cmVlIHJvb3QgbXVzdCBiZSBkZXJpdmVkIGZyb20gXCJTdGFja1wiJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGFjayA9IHM7XG5cbiAgICAgICAgdGhpcy5hZGRNZXRhZGF0YShMT0dJQ0FMX0lEX01ELCBuZXcgVG9rZW4oKCkgPT4gdGhpcy5sb2dpY2FsSWQpLCB0aGlzLmNvbnN0cnVjdG9yKTtcblxuICAgICAgICB0aGlzLmxvZ2ljYWxJZCA9IHRoaXMuc3RhY2subG9naWNhbElkcy5nZXRMb2dpY2FsSWQodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgdGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBwb2ludCB3aGVyZSB0aGlzIFJlc291cmNlIHdhcyBjcmVhdGVkIGZyb20sIHNvdXJjZWRcbiAgICAgKiAgICAgICAgICBmcm9tIHRoZSArbWV0YWRhdGErIGVudHJ5IHR5cGVkICthd3M6Y2RrOmxvZ2ljYWxJZCssIGFuZCB3aXRoIHRoZSBib3R0b20tbW9zdFxuICAgICAqICAgICAgICAgIG5vZGUgK2ludGVybmFsKyBlbnRyaWVzIGZpbHRlcmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY3JlYXRpb25TdGFja1RyYWNlKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlclN0YWNrVHJhY2UodGhpcy5tZXRhZGF0YS5maW5kKG1kID0+IG1kLnR5cGUgPT09IExPR0lDQUxfSURfTUQpIS50cmFjZSk7XG5cbiAgICAgICAgZnVuY3Rpb24gZmlsdGVyU3RhY2tUcmFjZShzdGFjazogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBBcnJheS5vZiguLi5zdGFjayk7XG4gICAgICAgICAgICB3aGlsZSAocmVzdWx0Lmxlbmd0aCA+IDAgJiYgc2hvdWxkRmlsdGVyKHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0pKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSXQncyB3ZWlyZCBpZiB3ZSBmaWx0ZXJlZCBldmVyeXRoaW5nLCBzbyByZXR1cm4gdGhlIHdob2xlIHN0YWNrLi4uXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PT0gMCA/IHN0YWNrIDogcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc2hvdWxkRmlsdGVyKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgICAgICByZXR1cm4gc3RyLm1hdGNoKC9bXihdK1xcKGludGVybmFsXFwvLiovKSAhPT0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgcGF0aCB3aXRoIHJlc3BlY3QgdG8gdGhlIHN0YWNrXG4gICAgICovXG4gICAgcHVibGljIGdldCBzdGFja1BhdGgoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYW5jZXN0b3JzKHRoaXMuc3RhY2spLm1hcChjID0+IGMuaWQpLmpvaW4oUEFUSF9TRVApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGVwZW5kZW5jeUVsZW1lbnRzKCk6IElEZXBlbmRhYmxlW10ge1xuICAgICAgICByZXR1cm4gWyB0aGlzIF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgQ2xvdWRGb3JtYXRpb24gJ3NuaXBwZXQnIGZvciB0aGlzIGVudGl0eS4gVGhlIHNuaXBwZXQgd2lsbCBvbmx5IGJlIG1lcmdlZFxuICAgICAqIGF0IHRoZSByb290IGxldmVsIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gaWRlbnRpdHkgY29uZmxpY3RzLlxuICAgICAqXG4gICAgICogRm9yIGV4YW1wbGUsIGEgUmVzb3VyY2UgY2xhc3Mgd2lsbCByZXR1cm4gc29tZXRoaW5nIGxpa2U6XG4gICAgICoge1xuICAgICAqICAgICBSZXNvdXJjZXM6IHtcbiAgICAgKiAgICAgICAgIFt0aGlzLmxvZ2ljYWxJZF06IHtcbiAgICAgKiAgICAgICAgICAgICBUeXBlOiB0aGlzLnJlc291cmNlVHlwZSxcbiAgICAgKiAgICAgICAgICAgICBQcm9wZXJ0aWVzOiB0aGlzLnByb3BzLFxuICAgICAqICAgICAgICAgICAgIENvbmRpdGlvbjogdGhpcy5jb25kaXRpb25cbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzdHJhY3QgdG9DbG91ZEZvcm1hdGlvbigpOiBvYmplY3Q7XG59XG5cbi8qKlxuICogQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgb3B0aW9ucyBmb3IgYSBzdGFjay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZU9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgZGVzY3JpcHRpb24gb2YgdGhpcyBzdGFjay5cbiAgICAgKiBJZiBwcm92aWRlZCwgaXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUncyBcIkRlc2NyaXB0aW9uXCIgYXR0cmlidXRlLlxuICAgICAqL1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSBBV1NUZW1wbGF0ZUZvcm1hdFZlcnNpb24gZmllbGQgb2YgdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlLlxuICAgICAqL1xuICAgIHRlbXBsYXRlRm9ybWF0VmVyc2lvbj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgdG9wLWxldmVsIHRlbXBsYXRlIHRyYW5zZm9ybSBmb3IgdGhpcyBzdGFjayAoZS5nLiBcIkFXUzo6U2VydmVybGVzcy0yMDE2LTEwLTMxXCIpLlxuICAgICAqL1xuICAgIHRyYW5zZm9ybT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIE1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUuXG4gICAgICovXG4gICAgIG1ldGFkYXRhPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciByZWZlcmVuY2VhYmxlIENsb3VkRm9ybWF0aW9uIGNvbnN0cnVjdHMgd2hpY2ggYXJlIG5vdCBSZXNvdXJjZXNcbiAqXG4gKiBUaGVzZSBjb25zdHJ1Y3RzIGFyZSB0aGluZ3MgbGlrZSBDb25kaXRpb25zIGFuZCBQYXJhbWV0ZXJzLCBjYW4gYmVcbiAqIHJlZmVyZW5jZWQgYnkgdGFraW5nIHRoZSBgLnJlZmAgYXR0cmlidXRlLlxuICpcbiAqIFJlc291cmNlIGNvbnN0cnVjdHMgZG8gbm90IGluaGVyaXQgZnJvbSBSZWZlcmVuY2VhYmxlIGJlY2F1c2UgdGhleSBoYXZlIHRoZWlyXG4gKiBvd24sIG1vcmUgc3BlY2lmaWMgdHlwZXMgcmV0dXJuZWQgZnJvbSB0aGUgLnJlZiBhdHRyaWJ1dGUuIEFsc28sIHNvbWVcbiAqIHJlc291cmNlcyBhcmVuJ3QgcmVmZXJlbmNlYWJsZSBhdCBhbGwgKHN1Y2ggYXMgQnVja2V0UG9saWNpZXMgb3IgR2F0ZXdheUF0dGFjaG1lbnRzKS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlZmVyZW5jZWFibGUgZXh0ZW5kcyBTdGFja0VsZW1lbnQge1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB0b2tlbiB0byBhIENsb3VkRm9ybWF0aW9uIHsgUmVmIH0gdGhhdCByZWZlcmVuY2VzIHRoaXMgZW50aXR5IGJhc2VkIG9uIGl0J3MgbG9naWNhbCBJRC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlZigpOiBUb2tlbiB7XG4gICAgICAgIHJldHVybiBuZXcgUmVmKHRoaXMpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGEgU3RhY2suXG4gKlxuICogV2UgZG8gYXR0cmlidXRlIGRldGVjdGlvbiBzaW5jZSB3ZSBjYW4ndCByZWxpYWJseSB1c2UgJ2luc3RhbmNlb2YnLlxuICovXG5mdW5jdGlvbiBpc1N0YWNrKGNvbnN0cnVjdDogQ29uc3RydWN0KTogY29uc3RydWN0IGlzIFN0YWNrIHtcbiAgICByZXR1cm4gKGNvbnN0cnVjdCBhcyBhbnkpLmlzU3RhY2s7XG59XG5cbi8qKlxuICogQ29sbGVjdCBhbGwgU3RhY2tFbGVtZW50cyBmcm9tIGEgY29uc3RydWN0XG4gKlxuICogQHBhcmFtIG5vZGUgUm9vdCBub2RlIHRvIGNvbGxlY3QgYWxsIFN0YWNrRWxlbWVudHMgZnJvbVxuICogQHBhcmFtIGludG8gQXJyYXkgdG8gYXBwZW5kIFN0YWNrRWxlbWVudHMgdG9cbiAqIEByZXR1cm5zIFRoZSBzYW1lIGFycmF5IGFzIGlzIGJlaW5nIGNvbGxlY3RlZCBpbnRvXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRWxlbWVudHMobm9kZTogQ29uc3RydWN0LCBpbnRvOiBTdGFja0VsZW1lbnRbXSA9IFtdKTogU3RhY2tFbGVtZW50W10ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBTdGFja0VsZW1lbnQuX2FzU3RhY2tFbGVtZW50KG5vZGUpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGludG8ucHVzaChlbGVtZW50KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgc3RhY2tFbGVtZW50cyhjaGlsZCwgaW50byk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGludG87XG59XG5cbi8qKlxuICogQSBnZW5lcmljLCB1bnR5cGVkIHJlZmVyZW5jZSB0byBhIFN0YWNrIEVsZW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIFJlZiBleHRlbmRzIENsb3VkRm9ybWF0aW9uVG9rZW4ge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IFN0YWNrRWxlbWVudCkge1xuICAgICAgICBzdXBlcih7IFJlZjogZWxlbWVudC5sb2dpY2FsSWQgfSwgYCR7ZWxlbWVudC5sb2dpY2FsSWR9LlJlZmApO1xuICAgIH1cbn0iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlDQUEwQztBQUUxQyxpREFBd0Q7QUFDeEQsMkNBQWdEO0FBRWhELGlFQUE2RDtBQUM3RCw2Q0FBcUY7QUFvQnJGOztHQUVHO0FBQ0gsTUFBYSxLQUFNLFNBQVEscUJBQVM7SUFpRWhDOzs7Ozs7T0FNRztJQUNILFlBQW1CLE1BQVksRUFBRSxJQUFhLEVBQUUsS0FBa0I7UUFDOUQsb0dBQW9HO1FBQ3BHLEtBQUssQ0FBQyxNQUFPLEVBQUUsSUFBSyxDQUFDLENBQUM7UUF6QzFCOzs7O1dBSUc7UUFDYSxtQkFBYyxHQUE0QyxFQUFHLENBQUM7UUFPOUU7O1dBRUc7UUFDYSxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBTy9COztXQUVHO1FBQ2Esb0JBQWUsR0FBb0IsRUFBRSxDQUFDO1FBaUJsRCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV4QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksdUJBQVUsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxtQ0FBc0IsRUFBRSxDQUFDLENBQUM7UUFDbEgsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksT0FBTyxDQUFDO0lBQ2hDLENBQUM7SUE5RUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBZTtRQUM5QixJQUFJLElBQUksR0FBMEIsSUFBSSxDQUFDO1FBQ3ZDLE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUN0QjtRQUVELElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtZQUNkLE1B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cy1jZGsvY3gtYXBpJyk7XG5pbXBvcnQgeyBBcHAgfSBmcm9tICcuLi9hcHAnO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBQQVRIX1NFUCB9IGZyb20gJy4uL2NvcmUvY29uc3RydWN0JztcbmltcG9ydCB7IHJlc29sdmUsIFRva2VuIH0gZnJvbSAnLi4vY29yZS90b2tlbnMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvblRva2VuIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbi10b2tlbic7XG5pbXBvcnQgeyBIYXNoZWRBZGRyZXNzaW5nU2NoZW1lLCBJQWRkcmVzc2luZ1NjaGVtZSwgTG9naWNhbElEcyB9IGZyb20gJy4vbG9naWNhbC1pZCc7XG5pbXBvcnQgeyBSZXNvdXJjZSB9IGZyb20gJy4vcmVzb3VyY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrUHJvcHMge1xuICAgIC8qKlxuICAgICAqIFRoZSBBV1MgZW52aXJvbm1lbnQgKGFjY291bnQvcmVnaW9uKSB3aGVyZSB0aGlzIHN0YWNrIHdpbGwgYmUgZGVwbG95ZWQuXG4gICAgICpcbiAgICAgKiBJZiBub3Qgc3VwcGxpZWQsIHRoZSBgZGVmYXVsdC1hY2NvdW50YCBhbmQgYGRlZmF1bHQtcmVnaW9uYCBjb250ZXh0IHBhcmFtZXRlcnMgd2lsbCBiZVxuICAgICAqIHVzZWQuIElmIHRoZXkgYXJlIHVuZGVmaW5lZCwgaXQgd2lsbCBub3QgYmUgcG9zc2libGUgdG8gZGVwbG95IHRoZSBzdGFjay5cbiAgICAgKi9cbiAgICBlbnY/OiBFbnZpcm9ubWVudDtcblxuICAgIC8qKlxuICAgICAqIFN0cmF0ZWd5IGZvciBsb2dpY2FsIElEIGdlbmVyYXRpb25cbiAgICAgKlxuICAgICAqIE9wdGlvbmFsLiBJZiBub3Qgc3VwcGxpZWQsIHRoZSBIYXNoZWROYW1pbmdTY2hlbWUgd2lsbCBiZSB1c2VkLlxuICAgICAqL1xuICAgIG5hbWluZ1NjaGVtZT86IElBZGRyZXNzaW5nU2NoZW1lO1xufVxuXG4vKipcbiAqIEEgcm9vdCBjb25zdHJ1Y3Qgd2hpY2ggcmVwcmVzZW50cyBhIHNpbmdsZSBDbG91ZEZvcm1hdGlvbiBzdGFjay5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0YWNrIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgICAvKipcbiAgICAgKiBUcmF2ZXJzZXMgdGhlIHRyZWUgYW5kIGxvb2tzIHVwIGZvciB0aGUgU3RhY2sgcm9vdC5cbiAgICAgKiBAcGFyYW0gbm9kZSBBIGNvbnN0cnVjdCBpbiB0aGUgdHJlZVxuICAgICAqIEByZXR1cm5zIFRoZSBTdGFjayBvYmplY3QgKHRocm93cyBpZiB0aGUgbm9kZSBpcyBub3QgcGFydCBvZiBhIFN0YWNrLXJvb3RlZCB0cmVlKVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZmluZChub2RlOiBDb25zdHJ1Y3QpOiBTdGFjayB7XG4gICAgICAgIGxldCBjdXJyOiBDb25zdHJ1Y3QgfCB1bmRlZmluZWQgPSBub2RlO1xuICAgICAgICB3aGlsZSAoY3VyciAhPSBudWxsICYmICFpc1N0YWNrKGN1cnIpKSB7XG4gICAgICAgICAgICBjdXJyID0gY3Vyci5wYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VyciA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIGEgU3RhY2sgcGFyZW50IGZvciAnJHtub2RlLnRvU3RyaW5nKCl9J2ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBtZXRhZGF0YSBhbm5vdGF0aW9uIFwiYXdzOmNkazpwaHlzaWNhbC1uYW1lXCIgdG8gdGhlIGNvbnN0cnVjdCBpZiBwaHlzaWNhbE5hbWVcbiAgICAgKiBpcyBub24tbnVsbC4gVGhpcyBjYW4gYmUgdXNlZCBsYXRlciBieSB0b29scyBhbmQgYXNwZWN0cyB0byBkZXRlcm1pbmUgaWYgcmVzb3VyY2VzXG4gICAgICogaGF2ZSBiZWVuIGNyZWF0ZWQgd2l0aCBwaHlzaWNhbCBuYW1lcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGFubm90YXRlUGh5c2ljYWxOYW1lKGNvbnN0cnVjdDogQ29uc3RydWN0LCBwaHlzaWNhbE5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHBoeXNpY2FsTmFtZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdHJ1Y3QuYWRkTWV0YWRhdGEoJ2F3czpjZGs6cGh5c2ljYWwtbmFtZScsIHBoeXNpY2FsTmFtZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVkFMSURfU1RBQ0tfTkFNRV9SRUdFWCA9IC9eW0EtWmEtel1bQS1aYS16MC05LV0qJC87XG5cbiAgICAvKipcbiAgICAgKiBMaXN0cyBhbGwgbWlzc2luZyBjb250ZXh0dWFsIGluZm9ybWF0aW9uLlxuICAgICAqIFRoaXMgaXMgcmV0dXJuZWQgd2hlbiB0aGUgc3RhY2sgaXMgc3ludGhlc2l6ZWQgdW5kZXIgdGhlICdtaXNzaW5nJyBhdHRyaWJ1dGVcbiAgICAgKiBhbmQgYWxsb3dzIHRvb2xpbmcgdG8gb2J0YWluIHRoZSBjb250ZXh0IGFuZCByZS1zeW50aGVzaXplLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBtaXNzaW5nQ29udGV4dDogeyBba2V5OiBzdHJpbmddOiBjeGFwaS5NaXNzaW5nQ29udGV4dCB9ID0geyB9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVudmlyb25tZW50IGluIHdoaWNoIHRoaXMgc3RhY2sgaXMgZGVwbG95ZWQuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGVudjogRW52aXJvbm1lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVybWluZSBpZiB0aGlzIGNvbnN0cnVjdCBpcyBhIHN0YWNrLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBpc1N0YWNrID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIExvZ2ljYWwgSUQgZ2VuZXJhdGlvbiBzdHJhdGVneVxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBsb2dpY2FsSWRzOiBMb2dpY2FsSURzO1xuXG4gICAgLyoqXG4gICAgICogT3B0aW9ucyBmb3IgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgKGxpa2UgdmVyc2lvbiwgdHJhbnNmb3JtLCBkZXNjcmlwdGlvbikuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHRlbXBsYXRlT3B0aW9uczogVGVtcGxhdGVPcHRpb25zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQ2xvdWRGb3JtYXRpb24gc3RhY2sgbmFtZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBzdGFjay5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJlbnQgUGFyZW50IG9mIHRoaXMgc3RhY2ssIHVzdWFsbHkgYSBQcm9ncmFtIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBDbG91ZEZvcm1hdGlvbiBzdGFjay4gRGVmYXVsdHMgdG8gXCJTdGFja1wiLlxuICAgICAqIEBwYXJhbSBwcm9wcyBTdGFjayBwcm9wZXJ0aWVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJlbnQ/OiBBcHAsIG5hbWU/OiBzdHJpbmcsIHByb3BzPzogU3RhY2tQcm9wcykge1xuICAgICAgICAvLyBGb3IgdW5pdCB0ZXN0IGNvbnZlbmllbmNlIHBhcmVudHMgYXJlIG9wdGlvbmFsLCBzbyBieXBhc3MgdGhlIHR5cGUgY2hlY2sgd2hlbiBjYWxsaW5nIHRoZSBwYXJlbnQuXG4gICAgICAgIHN1cGVyKHBhcmVudCEsIG5hbWUhKTtcbiAgICAgICAgdGhpcy5lbnYgPSB0aGlzLnBhcnNlRW52aXJvbm1lbnQocHJvcHMpO1xuXG4gICAgICAgIHRoaXMubG9naWNhbElkcyA9IG5ldyBMb2dpY2FsSURzKHByb3BzICYmIHByb3BzLm5hbWluZ1NjaGVtZSA/IHByb3BzLm5hbWluZ1NjaGVtZSA6IG5ldyBIYXNoZWRBZGRyZXNzaW5nU2NoZW1lKCkpO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lIHx8ICdTdGFjayc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9va3MgdXAgYSByZXNvdXJjZSBieSBwYXRoLlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIFJlc291cmNlIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBwdWJsaWMgZmluZFJlc291cmNlKHBhdGg6IHN0cmluZyk6IFJlc291cmNlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgciA9IHRoaXMuZmluZENoaWxkKHBhdGgpO1xuICAgICAgICBpZiAoIXIpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuXG4gICAgICAgIC8vIGZvdW5kIGFuIGVsZW1lbnQsIGNoZWNrIGlmIGl0J3MgYSByZXNvdXJjZSAoZHVjay10eXBlKVxuICAgICAgICBpZiAoISgncmVzb3VyY2VUeXBlJyBpbiByKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb3VuZCBhIHN0YWNrIGVsZW1lbnQgZm9yICR7cGF0aH0gYnV0IGl0IGlzIG5vdCBhIHJlc291cmNlOiAke3IudG9TdHJpbmcoKX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByIGFzIFJlc291cmNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlIGZvciB0aGlzIHN0YWNrIGJ5IHRyYXZlcnNpbmdcbiAgICAgKiB0aGUgdHJlZSBhbmQgaW52b2tpbmcgdG9DbG91ZEZvcm1hdGlvbigpIG9uIGFsbCBFbnRpdHkgb2JqZWN0cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG9DbG91ZEZvcm1hdGlvbigpIHtcbiAgICAgICAgLy8gYmVmb3JlIHdlIGJlZ2luIHN5bnRoZXNpcywgd2Ugc2hhbGwgbG9jayB0aGlzIHN0YWNrLCBzbyBjaGlsZHJlbiBjYW5ub3QgYmUgYWRkZWRcbiAgICAgICAgdGhpcy5sb2NrKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgRGVzY3JpcHRpb246IHRoaXMudGVtcGxhdGVPcHRpb25zLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIFRyYW5zZm9ybTogdGhpcy50ZW1wbGF0ZU9wdGlvbnMudHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgIEFXU1RlbXBsYXRlRm9ybWF0VmVyc2lvbjogdGhpcy50ZW1wbGF0ZU9wdGlvbnMudGVtcGxhdGVGb3JtYXRWZXJzaW9uLFxuICAgICAgICAgICAgICAgIE1ldGFkYXRhOiB0aGlzLnRlbXBsYXRlT3B0aW9ucy5tZXRhZGF0YVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBzdGFja0VsZW1lbnRzKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRzID0gZWxlbWVudHMubWFwKGUgPT4gZS50b0Nsb3VkRm9ybWF0aW9uKCkpO1xuXG4gICAgICAgICAgICAvLyBtZXJnZSBpbiBhbGwgQ2xvdWRGb3JtYXRpb24gZnJhZ21lbnRzIGNvbGxlY3RlZCBmcm9tIHRoZSB0cmVlXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50cykge1xuICAgICAgICAgICAgICAgIG1lcmdlKHRlbXBsYXRlLCBmcmFnbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHJlc29sdmUgYWxsIHRva2VucyBhbmQgcmVtb3ZlIGFsbCBlbXB0aWVzXG4gICAgICAgICAgICBjb25zdCByZXQgPSByZXNvbHZlKHRlbXBsYXRlKSB8fCB7IH07XG5cbiAgICAgICAgICAgIHRoaXMubG9naWNhbElkcy5hc3NlcnRBbGxSZW5hbWVzQXBwbGllZCgpO1xuXG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgLy8gYWxsb3cgbXV0YXRpb25zIGFmdGVyIHN5bnRoZXNpcyBpcyBmaW5pc2hlZC5cbiAgICAgICAgICAgIHRoaXMudW5sb2NrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gd2h5IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2h5IHJlZ2lvbiBpcyByZXF1aXJlZC5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVnaW9uIGluIHdoaWNoIHRoaXMgc3RhY2sgaXMgZGVwbG95ZWQuIFRocm93cyBpZiByZWdpb24gaXMgbm90IGRlZmluZWQuXG4gICAgICovXG4gICAgcHVibGljIHJlcXVpcmVSZWdpb24od2h5Pzogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy5lbnYucmVnaW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7d2h5ID8gd2h5ICsgJy4gJyA6ICcnfVN0YWNrIHJlcXVpcmVzIHJlZ2lvbiBpbmZvcm1hdGlvbi4gSXQgY2FuIGJlIGVpdGhlciBzdXBwbGllZCB2aWEgdGhlIFwiZW52XCIgcHJvcGVydHksIGAgK1xuICAgICAgICAgICAgICAgICAgICBgdmlhIHRoZSBcIiR7Y3hhcGkuREVGQVVMVF9SRUdJT05fQ09OVEVYVF9LRVl9XCIgY29udGV4dCBwYXJhbWV0ZXJzIG9yIHVzaW5nIFwiYXdzIGNvbmZpZ3VyZVwiYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5lbnYucmVnaW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlIHRoYXQgYSBjb250ZXh0IGtleSB3YXMgZXhwZWN0ZWRcbiAgICAgKlxuICAgICAqIENvbnRhaW5zIGluc3RydWN0aW9ucyBvbiBob3cgdGhlIGtleSBzaG91bGQgYmUgc3VwcGxpZWQuXG4gICAgICogQHBhcmFtIGtleSBLZXkgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoaXMgbWlzc2luZyBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBkZXRhaWxzIFRoZSBzZXQgb2YgcGFyYW1ldGVycyBuZWVkZWQgdG8gb2J0YWluIHRoZSBjb250ZXh0IChzcGVjaWZpYyB0byBjb250ZXh0IHByb3ZpZGVyKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVwb3J0TWlzc2luZ0NvbnRleHQoa2V5OiBzdHJpbmcsIGRldGFpbHM6IGN4YXBpLk1pc3NpbmdDb250ZXh0KSB7XG4gICAgICAgIHRoaXMubWlzc2luZ0NvbnRleHRba2V5XSA9IGRldGFpbHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVuYW1lIGEgZ2VuZXJhdGVkIGxvZ2ljYWwgaWRlbnRpdGllc1xuICAgICAqL1xuICAgIHB1YmxpYyByZW5hbWVMb2dpY2FsKG9sZElkOiBzdHJpbmcsIG5ld0lkOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWNvbnNvbGVcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWxsIHJlbmFtZXMgbXVzdCBiZSBzZXQgdXAgYmVmb3JlIGFkZGluZyBlbGVtZW50cyB0byB0aGUgc3RhY2tcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZ2ljYWxJZHMucmVuYW1lTG9naWNhbChvbGRJZCwgbmV3SWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIHN0YWNrIG5hbWVcbiAgICAgKlxuICAgICAqIENsb3VkRm9ybWF0aW9uIHN0YWNrIG5hbWVzIGNhbiBpbmNsdWRlIGRhc2hlcyBpbiBhZGRpdGlvbiB0byB0aGUgcmVndWxhciBpZGVudGlmaWVyXG4gICAgICogY2hhcmFjdGVyIGNsYXNzZXMsIGFuZCB3ZSBkb24ndCBhbGxvdyBvbmUgb2YgdGhlIG1hZ2ljIG1hcmtlcnMuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF92YWxpZGF0ZUlkKG5hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAoIVN0YWNrLlZBTElEX1NUQUNLX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdGFjayBuYW1lIG11c3QgbWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbjogJHtTdGFjay5WQUxJRF9TVEFDS19OQU1FX1JFR0VYLnRvU3RyaW5nKCl9LCBnb3QgJyR7bmFtZX0nYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVkIGRlZmF1bHRzIHRvIGVudmlyb25tZW50IGF0dHJpYnV0ZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXJzZUVudmlyb25tZW50KHByb3BzPzogU3RhY2tQcm9wcykge1xuICAgICAgICAvLyBzdGFydCB3aXRoIGBlbnZgLlxuICAgICAgICBjb25zdCBlbnY6IEVudmlyb25tZW50ID0gKHByb3BzICYmIHByb3BzLmVudikgfHwgeyB9O1xuXG4gICAgICAgIC8vIGlmIGFjY291bnQgaXMgbm90IHNwZWNpZmllZCwgYXR0ZW1wdCB0byByZWFkIGZyb20gY29udGV4dC5cbiAgICAgICAgaWYgKCFlbnYuYWNjb3VudCkge1xuICAgICAgICAgICAgZW52LmFjY291bnQgPSB0aGlzLmdldENvbnRleHQoY3hhcGkuREVGQVVMVF9BQ0NPVU5UX0NPTlRFWFRfS0VZKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLCBhdHRlbXB0IHRvIHJlYWQgZnJvbSBjb250ZXh0LlxuICAgICAgICBpZiAoIWVudi5yZWdpb24pIHtcbiAgICAgICAgICAgIGVudi5yZWdpb24gPSB0aGlzLmdldENvbnRleHQoY3hhcGkuREVGQVVMVF9SRUdJT05fQ09OVEVYVF9LRVkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVudjtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlKHRlbXBsYXRlOiBhbnksIHBhcnQ6IGFueSkge1xuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBPYmplY3Qua2V5cyhwYXJ0KSkge1xuICAgICAgICBjb25zdCBzcmMgPSBwYXJ0W3NlY3Rpb25dO1xuXG4gICAgICAgIC8vIGNyZWF0ZSB0b3AtbGV2ZWwgc2VjdGlvbiBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGxldCBkZXN0ID0gdGVtcGxhdGVbc2VjdGlvbl07XG4gICAgICAgIGlmICghZGVzdCkge1xuICAgICAgICAgICAgdGVtcGxhdGVbc2VjdGlvbl0gPSBkZXN0ID0gc3JjO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gYWRkIGFsbCBlbnRpdGllcyBmcm9tIHNvdXJjZSBzZWN0aW9uIHRvIGRlc3RpbmF0aW9uIHNlY3Rpb25cbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgT2JqZWN0LmtleXMoc3JjKSkge1xuICAgICAgICAgICAgICAgIGlmIChpZCBpbiBkZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc2VjdGlvbiAnJHtzZWN0aW9ufScgYWxyZWFkeSBjb250YWlucyAnJHtpZH0nYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlc3RbaWRdID0gc3JjW2lkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuY29uc3QgTE9HSUNBTF9JRF9NRCA9ICdhd3M6Y2RrOmxvZ2ljYWxJZCc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNvbnN0cnVjdCB0aGF0IGNhbiBiZSBcImRlcGVuZGVkIG9uXCIgdmlhIGBhZGREZXBlbmRlbmN5YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGVwZW5kYWJsZSB7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2V0IG9mIGFsbCBzdGFjayBlbGVtZW50cyAocmVzb3VyY2VzLCBwYXJhbWV0ZXJzLCBjb25kaXRpb25zKVxuICAgICAqIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHdoZW4gYSByZXNvdXJjZSBcImRlcGVuZHMgb25cIiB0aGlzIGNvbnN0cnVjdC5cbiAgICAgKi9cbiAgICByZWFkb25seSBkZXBlbmRlbmN5RWxlbWVudHM6IElEZXBlbmRhYmxlW107XG59XG5cbi8qKlxuICogQW4gZWxlbWVudCBvZiBhIENsb3VkRm9ybWF0aW9uIHN0YWNrLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3RhY2tFbGVtZW50IGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSURlcGVuZGFibGUge1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIGEgY29uc3RydWN0IGlzIGEgc3RhY2sgZWxlbWVudCAoaS5lLiBwYXJ0IG9mIHRoZVxuICAgICAqIHN5bnRoZXNpemVkIGNsb3VkZm9ybWF0aW9uIHRlbXBsYXRlKS5cbiAgICAgKlxuICAgICAqIFVzZXMgZHVjay10eXBpbmcgaW5zdGVhZCBvZiBgaW5zdGFuY2VvZmAgdG8gYWxsb3cgc3RhY2sgZWxlbWVudHMgZnJvbSBkaWZmZXJlbnRcbiAgICAgKiB2ZXJzaW9ucyBvZiB0aGlzIGxpYnJhcnkgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIHNhbWUgc3RhY2suXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgY29uc3RydWN0IGFzIGEgc3RhY2sgZWxlbWVudCBvciB1bmRlZmluZWQgaWYgaXQgaXMgbm90IGEgc3RhY2sgZWxlbWVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIF9hc1N0YWNrRWxlbWVudChjb25zdHJ1Y3Q6IENvbnN0cnVjdCk6IFN0YWNrRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICgnbG9naWNhbElkJyBpbiBjb25zdHJ1Y3QgJiYgJ3RvQ2xvdWRGb3JtYXRpb24nIGluIGNvbnN0cnVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdCBhcyBTdGFja0VsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGxvZ2ljYWwgSUQgZm9yIHRoaXMgQ2xvdWRGb3JtYXRpb24gc3RhY2sgZWxlbWVudFxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBsb2dpY2FsSWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdGFjayB0aGlzIENvbnN0cnVjdCBoYXMgYmVlbiBtYWRlIGEgcGFydCBvZlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzdGFjazogU3RhY2s7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGVudGl0eSBhbmQgYmluZHMgaXQgdG8gYSB0cmVlLlxuICAgICAqIE5vdGUgdGhhdCB0aGUgcm9vdCBvZiB0aGUgdHJlZSBtdXN0IGJlIGEgU3RhY2sgb2JqZWN0IChub3QganVzdCBhbnkgUm9vdCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyZW50IFRoZSBwYXJlbnQgY29uc3RydWN0XG4gICAgICogQHBhcmFtIHByb3BzIENvbnN0cnVjdCBwcm9wZXJ0aWVzXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZykge1xuICAgICAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuICAgICAgICBjb25zdCBzID0gU3RhY2suZmluZCh0aGlzKTtcbiAgICAgICAgaWYgKCFzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0cmVlIHJvb3QgbXVzdCBiZSBkZXJpdmVkIGZyb20gXCJTdGFja1wiJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGFjayA9IHM7XG5cbiAgICAgICAgdGhpcy5hZGRNZXRhZGF0YShMT0dJQ0FMX0lEX01ELCBuZXcgVG9rZW4oKCkgPT4gdGhpcy5sb2dpY2FsSWQpLCB0aGlzLmNvbnN0cnVjdG9yKTtcblxuICAgICAgICB0aGlzLmxvZ2ljYWxJZCA9IHRoaXMuc3RhY2subG9naWNhbElkcy5nZXRMb2dpY2FsSWQodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgdGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBwb2ludCB3aGVyZSB0aGlzIFJlc291cmNlIHdhcyBjcmVhdGVkIGZyb20sIHNvdXJjZWRcbiAgICAgKiAgICAgICAgICBmcm9tIHRoZSArbWV0YWRhdGErIGVudHJ5IHR5cGVkICthd3M6Y2RrOmxvZ2ljYWxJZCssIGFuZCB3aXRoIHRoZSBib3R0b20tbW9zdFxuICAgICAqICAgICAgICAgIG5vZGUgK2ludGVybmFsKyBlbnRyaWVzIGZpbHRlcmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY3JlYXRpb25TdGFja1RyYWNlKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlclN0YWNrVHJhY2UodGhpcy5tZXRhZGF0YS5maW5kKG1kID0+IG1kLnR5cGUgPT09IExPR0lDQUxfSURfTUQpIS50cmFjZSk7XG5cbiAgICAgICAgZnVuY3Rpb24gZmlsdGVyU3RhY2tUcmFjZShzdGFjazogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBBcnJheS5vZiguLi5zdGFjayk7XG4gICAgICAgICAgICB3aGlsZSAocmVzdWx0Lmxlbmd0aCA+IDAgJiYgc2hvdWxkRmlsdGVyKHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0pKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSXQncyB3ZWlyZCBpZiB3ZSBmaWx0ZXJlZCBldmVyeXRoaW5nLCBzbyByZXR1cm4gdGhlIHdob2xlIHN0YWNrLi4uXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PT0gMCA/IHN0YWNrIDogcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc2hvdWxkRmlsdGVyKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgICAgICByZXR1cm4gc3RyLm1hdGNoKC9bXihdK1xcKGludGVybmFsXFwvLiovKSAhPT0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgcGF0aCB3aXRoIHJlc3BlY3QgdG8gdGhlIHN0YWNrXG4gICAgICovXG4gICAgcHVibGljIGdldCBzdGFja1BhdGgoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYW5jZXN0b3JzKHRoaXMuc3RhY2spLm1hcChjID0+IGMuaWQpLmpvaW4oUEFUSF9TRVApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGVwZW5kZW5jeUVsZW1lbnRzKCk6IElEZXBlbmRhYmxlW10ge1xuICAgICAgICByZXR1cm4gWyB0aGlzIF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgQ2xvdWRGb3JtYXRpb24gJ3NuaXBwZXQnIGZvciB0aGlzIGVudGl0eS4gVGhlIHNuaXBwZXQgd2lsbCBvbmx5IGJlIG1lcmdlZFxuICAgICAqIGF0IHRoZSByb290IGxldmVsIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gaWRlbnRpdHkgY29uZmxpY3RzLlxuICAgICAqXG4gICAgICogRm9yIGV4YW1wbGUsIGEgUmVzb3VyY2UgY2xhc3Mgd2lsbCByZXR1cm4gc29tZXRoaW5nIGxpa2U6XG4gICAgICoge1xuICAgICAqICAgICBSZXNvdXJjZXM6IHtcbiAgICAgKiAgICAgICAgIFt0aGlzLmxvZ2ljYWxJZF06IHtcbiAgICAgKiAgICAgICAgICAgICBUeXBlOiB0aGlzLnJlc291cmNlVHlwZSxcbiAgICAgKiAgICAgICAgICAgICBQcm9wZXJ0aWVzOiB0aGlzLnByb3BzLFxuICAgICAqICAgICAgICAgICAgIENvbmRpdGlvbjogdGhpcy5jb25kaXRpb25cbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzdHJhY3QgdG9DbG91ZEZvcm1hdGlvbigpOiBvYmplY3Q7XG59XG5cbi8qKlxuICogQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgb3B0aW9ucyBmb3IgYSBzdGFjay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZU9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgZGVzY3JpcHRpb24gb2YgdGhpcyBzdGFjay5cbiAgICAgKiBJZiBwcm92aWRlZCwgaXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUncyBcIkRlc2NyaXB0aW9uXCIgYXR0cmlidXRlLlxuICAgICAqL1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSBBV1NUZW1wbGF0ZUZvcm1hdFZlcnNpb24gZmllbGQgb2YgdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlLlxuICAgICAqL1xuICAgIHRlbXBsYXRlRm9ybWF0VmVyc2lvbj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgdG9wLWxldmVsIHRlbXBsYXRlIHRyYW5zZm9ybSBmb3IgdGhpcyBzdGFjayAoZS5nLiBcIkFXUzo6U2VydmVybGVzcy0yMDE2LTEwLTMxXCIpLlxuICAgICAqL1xuICAgIHRyYW5zZm9ybT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIE1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUuXG4gICAgICovXG4gICAgIG1ldGFkYXRhPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciByZWZlcmVuY2VhYmxlIENsb3VkRm9ybWF0aW9uIGNvbnN0cnVjdHMgd2hpY2ggYXJlIG5vdCBSZXNvdXJjZXNcbiAqXG4gKiBUaGVzZSBjb25zdHJ1Y3RzIGFyZSB0aGluZ3MgbGlrZSBDb25kaXRpb25zIGFuZCBQYXJhbWV0ZXJzLCBjYW4gYmVcbiAqIHJlZmVyZW5jZWQgYnkgdGFraW5nIHRoZSBgLnJlZmAgYXR0cmlidXRlLlxuICpcbiAqIFJlc291cmNlIGNvbnN0cnVjdHMgZG8gbm90IGluaGVyaXQgZnJvbSBSZWZlcmVuY2VhYmxlIGJlY2F1c2UgdGhleSBoYXZlIHRoZWlyXG4gKiBvd24sIG1vcmUgc3BlY2lmaWMgdHlwZXMgcmV0dXJuZWQgZnJvbSB0aGUgLnJlZiBhdHRyaWJ1dGUuIEFsc28sIHNvbWVcbiAqIHJlc291cmNlcyBhcmVuJ3QgcmVmZXJlbmNlYWJsZSBhdCBhbGwgKHN1Y2ggYXMgQnVja2V0UG9saWNpZXMgb3IgR2F0ZXdheUF0dGFjaG1lbnRzKS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlZmVyZW5jZWFibGUgZXh0ZW5kcyBTdGFja0VsZW1lbnQge1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB0b2tlbiB0byBhIENsb3VkRm9ybWF0aW9uIHsgUmVmIH0gdGhhdCByZWZlcmVuY2VzIHRoaXMgZW50aXR5IGJhc2VkIG9uIGl0J3MgbG9naWNhbCBJRC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlZigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gbmV3IFJlZih0aGlzKS50b1N0cmluZygpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGEgU3RhY2suXG4gKlxuICogV2UgZG8gYXR0cmlidXRlIGRldGVjdGlvbiBzaW5jZSB3ZSBjYW4ndCByZWxpYWJseSB1c2UgJ2luc3RhbmNlb2YnLlxuICovXG5mdW5jdGlvbiBpc1N0YWNrKGNvbnN0cnVjdDogQ29uc3RydWN0KTogY29uc3RydWN0IGlzIFN0YWNrIHtcbiAgICByZXR1cm4gKGNvbnN0cnVjdCBhcyBhbnkpLmlzU3RhY2s7XG59XG5cbi8qKlxuICogQ29sbGVjdCBhbGwgU3RhY2tFbGVtZW50cyBmcm9tIGEgY29uc3RydWN0XG4gKlxuICogQHBhcmFtIG5vZGUgUm9vdCBub2RlIHRvIGNvbGxlY3QgYWxsIFN0YWNrRWxlbWVudHMgZnJvbVxuICogQHBhcmFtIGludG8gQXJyYXkgdG8gYXBwZW5kIFN0YWNrRWxlbWVudHMgdG9cbiAqIEByZXR1cm5zIFRoZSBzYW1lIGFycmF5IGFzIGlzIGJlaW5nIGNvbGxlY3RlZCBpbnRvXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRWxlbWVudHMobm9kZTogQ29uc3RydWN0LCBpbnRvOiBTdGFja0VsZW1lbnRbXSA9IFtdKTogU3RhY2tFbGVtZW50W10ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBTdGFja0VsZW1lbnQuX2FzU3RhY2tFbGVtZW50KG5vZGUpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGludG8ucHVzaChlbGVtZW50KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgc3RhY2tFbGVtZW50cyhjaGlsZCwgaW50byk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGludG87XG59XG5cbi8qKlxuICogQSBnZW5lcmljLCB1bnR5cGVkIHJlZmVyZW5jZSB0byBhIFN0YWNrIEVsZW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIFJlZiBleHRlbmRzIENsb3VkRm9ybWF0aW9uVG9rZW4ge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IFN0YWNrRWxlbWVudCkge1xuICAgICAgICBzdXBlcih7IFJlZjogZWxlbWVudC5sb2dpY2FsSWQgfSwgYCR7ZWxlbWVudC5sb2dpY2FsSWR9LlJlZmApO1xuICAgIH1cbn0iXX0=

@@ -1,2 +0,1 @@

import { Token } from '../core/tokens';
/**

@@ -9,7 +8,7 @@ * @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html

*/
key: string | Token;
key: string;
/**
* @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html#cfn-resource-tags-value
*/
value: string | Token;
value: string;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGFnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUb2tlbiB9IGZyb20gJy4uL2NvcmUvdG9rZW5zJztcblxuLyoqXG4gKiBAbGluayBodHRwOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLXJlc291cmNlLXRhZ3MuaHRtbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4gICAgLyoqXG4gICAgICogQGxpbmsgaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1yZXNvdXJjZS10YWdzLmh0bWwjY2ZuLXJlc291cmNlLXRhZ3Mta2V5XG4gICAgICovXG4gICAga2V5OiBzdHJpbmcgfCBUb2tlbjtcblxuICAgIC8qKlxuICAgICAqIEBsaW5rIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtcmVzb3VyY2UtdGFncy5odG1sI2Nmbi1yZXNvdXJjZS10YWdzLXZhbHVlXG4gICAgICovXG4gICAgdmFsdWU6IHN0cmluZyB8IFRva2VuO1xufSJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGFnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaW5rIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtcmVzb3VyY2UtdGFncy5odG1sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbiAgICAvKipcbiAgICAgKiBAbGluayBodHRwOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLXJlc291cmNlLXRhZ3MuaHRtbCNjZm4tcmVzb3VyY2UtdGFncy1rZXlcbiAgICAgKi9cbiAgICBrZXk6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBsaW5rIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtcmVzb3VyY2UtdGFncy5odG1sI2Nmbi1yZXNvdXJjZS10YWdzLXZhbHVlXG4gICAgICovXG4gICAgdmFsdWU6IHN0cmluZztcbn0iXX0=

@@ -193,3 +193,3 @@ export declare const PATH_SEP = "/";

*/
private readonly locked;
protected readonly locked: boolean;
}

@@ -196,0 +196,0 @@ /**

@@ -361,2 +361,2 @@ "use strict";

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUNBQTBDO0FBQzFDLCtDQUFnRDtBQUNuQyxRQUFBLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFFNUI7OztHQUdHO0FBQ0gsTUFBYSxTQUFTO0lBc0NsQjs7Ozs7T0FLRztJQUNILFlBQVksTUFBaUIsRUFBRSxFQUFVO1FBbkJ6Qzs7V0FFRztRQUNjLGNBQVMsR0FBa0MsRUFBRyxDQUFDO1FBQy9DLFlBQU8sR0FBMkIsRUFBRyxDQUFDO1FBQ3RDLGNBQVMsR0FBRyxJQUFJLEtBQUssRUFBaUIsQ0FBQztRQUV4RDs7O1dBR0c7UUFDSyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBU3BCLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsc0ZBQXNGO1FBQ3RGLGdDQUFnQztRQUNoQyxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7WUFDaEIsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQzthQUNsRTtZQUVELDREQUE0RDtZQUM1RCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbEM7YUFBTTtZQUNILDRCQUE0QjtZQUM1QixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUNoQjtRQUVELHFDQUFxQztRQUNyQyxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzdCO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFD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O0FBc0JELE1BQWEsZUFBZTtJQUN4QixZQUE0QixNQUFpQixFQUFrQixPQUFlO1FBQWxELFdBQU0sR0FBTixNQUFNLENBQVc7UUFBa0IsWUFBTyxHQUFQLE9BQU8sQ0FBUTtJQUU5RSxDQUFDO0NBQ0o7QUFKRCwwQ0FJQztBQUVELHFDQUFxQztBQUNyQyxTQUFTLGdCQUFnQixDQUFDLEtBQWU7SUFDckMsTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDN0IsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztJQUM1QyxJQUFJO1FBQ0EsS0FBSyxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFDaEQsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztLQUMxQztZQUFTO1FBQ04sS0FBSyxDQUFDLGVBQWUsR0FBRyxhQUFhLENBQUM7S0FDekM7SUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUNmLE9BQU8sRUFBRSxDQUFDO0tBQ2I7SUFDRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3hhcGkgPSByZXF1aXJlKCdAYXdzLWNkay9jeC1hcGknKTtcbmltcG9ydCB7IG1ha2VVbmlxdWVJZCB9IGZyb20gJy4uL3V0aWwvdW5pcXVlaWQnO1xuZXhwb3J0IGNvbnN0IFBBVEhfU0VQID0gJy8nO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGJ1aWxkaW5nIGJsb2NrIG9mIHRoZSBjb25zdHJ1Y3QgZ3JhcGguXG4gKiBXaGVuIGEgY29uc3RydWN0IGlzIGNyZWF0ZWQsIGl0IGlzIGFsd2F5cyBhZGRlZCBhcyBhIGNoaWxkXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25zdHJ1Y3Qge1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHBhcmVudCBvZiB0aGlzIG5vZGUgb3IgdW5kZWZpbmVkIGlmIHRoaXMgaXMgYSByb290IG5vZGUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHBhcmVudD86IENvbnN0cnVjdDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBsb2NhbCBpZCBvZiB0aGUgY29uc3RydWN0LlxuICAgICAqIFRoaXMgaWQgaXMgdW5pcXVlIGFtb25nc3QgaXRzIHNpYmxpbmdzLlxuICAgICAqIFRvIG9idGFpbiBhIHRyZWUtZ2xvYmFsIHVuaXF1ZSBpZCBmb3IgdGhpcyBjb25zdHJ1Y3QsIHVzZSBgdW5pcXVlSWRgLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZ1bGwgcGF0aCBvZiB0aGlzIGNvbnN0cnVjdCBpbiB0aGUgdHJlZS5cbiAgICAgKiBDb21wb25lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgJy8nLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBIHRyZWUtZ2xvYmFsIHVuaXF1ZSBhbHBoYW51bWVyaWMgaWRlbnRpZmllciBmb3IgdGhpcyBjb25zdHJ1Y3QuXG4gICAgICogSW5jbHVkZXMgYWxsIGNvbXBvbmVudHMgb2YgdGhlIHRyZWUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHVuaXF1ZUlkOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGNoaWxkcmVuIGFuZCB0aGVpciBuYW1lc1xuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NoaWxkcmVuOiB7IFtuYW1lOiBzdHJpbmddOiBDb25zdHJ1Y3QgfSA9IHsgfTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7IH07XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbWV0YWRhdGEgPSBuZXcgQXJyYXk8TWV0YWRhdGFFbnRyeT4oKTtcblxuICAgIC8qKlxuICAgICAqIElmIHRoaXMgaXMgc2V0IHRvICd0cnVlJy4gYWRkQ2hpbGQoKSBjYWxscyBmb3IgdGhpcyBjb25zdHJ1Y3QgYW5kIGFueSBjaGlsZFxuICAgICAqIHdpbGwgZmFpbC4gVGhpcyBpcyB1c2VkIHRvIHByZXZlbnQgdHJlZSBtdXRhdGlvbnMgZHVyaW5nIHN5bnRoZXNpcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9sb2NrZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgY29uc3RydWN0IG5vZGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyZW50IFRoZSBwYXJlbnQgY29uc3RydWN0XG4gICAgICogQHBhcmFtIHByb3BzICBQcm9wZXJ0aWVzIGZvciB0aGlzIGNvbnN0cnVjdFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG5cbiAgICAgICAgLy8gV2Ugc2F5IHRoYXQgcGFyZW50IGlzIHJlcXVpcmVkLCBidXQgc29tZSByb290IGNvbnN0cnVjdHMgYnlwYXNzIHRoZSB0eXBlIGNoZWNrcyBhbmRcbiAgICAgICAgLy8gYWN0dWFsbHkgcGFzcyBpbiAndW5kZWZpbmVkJy5cbiAgICAgICAgaWYgKHBhcmVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoaWQgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IHJvb3QgY29uc3RydWN0cyBtYXkgaGF2ZSBhbiBlbXB0eSBuYW1lJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEhhcyBzaWRlIGVmZmVjdCBzbyBtdXN0IGJlIHZlcnkgbGFzdCB0aGluZyBpbiBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgcGFyZW50LmFkZENoaWxkKHRoaXMsIHRoaXMuaWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHJvb3QgY29uc3RydWN0LlxuICAgICAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgdGhlIG5hbWUgd2UgZW5kZWQgdXAgd2l0aFxuICAgICAgICBpZiAodGhpcy5pZCAhPT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlSWQodGhpcy5pZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5yb290UGF0aCgpLm1hcChjID0+IGMuaWQpO1xuICAgICAgICB0aGlzLnBhdGggPSBjb21wb25lbnRzLmpvaW4oUEFUSF9TRVApO1xuICAgICAgICB0aGlzLnVuaXF1ZUlkID0gY29tcG9uZW50cy5sZW5ndGggPiAwID8gbWFrZVVuaXF1ZUlkKGNvbXBvbmVudHMpIDogJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGNvbnN0cnVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLnBhdGg7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVuYW1lICsgKHBhdGgubGVuZ3RoID4gMCA/IGAgWyR7cGF0aH1dYCA6ICcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHdpdGggYSB0cmVlIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgY29uc3RydWN0IGFuZCBpdCdzIGNoaWxkcmVuLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b1RyZWVTdHJpbmcoZGVwdGggPSAwKSB7XG4gICAgICAgIGxldCBvdXQgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAgJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5pZCB8fCAnJztcbiAgICAgICAgb3V0ICs9IGAke3RoaXMudHlwZW5hbWV9JHtuYW1lLmxlbmd0aCA+IDAgPyAnIFsnICsgbmFtZSArICddJyA6ICcnfVxcbmA7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgICAgICAgb3V0ICs9IGNoaWxkLnRvVHJlZVN0cmluZyhkZXB0aCArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgZGVzY2VuZGFudCBieSBwYXRoLCBvciB1bmRlZmluZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lIFJlbGF0aXZlIG5hbWUgb2YgYSBkaXJlY3Qgb3IgaW5kaXJlY3QgY2hpbGRcbiAgICAgKiBAcmV0dXJucyBhIGNoaWxkIGJ5IHBhdGggb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdHJ5RmluZENoaWxkKHBhdGg6IHN0cmluZyk6IENvbnN0cnVjdCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1jb25zb2xlXG4gICAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoUEFUSF9TRVApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhdGggbXVzdCBiZSByZWxhdGl2ZScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChQQVRIX1NFUCk7XG5cbiAgICAgICAgbGV0IGN1cnI6IENvbnN0cnVjdHx1bmRlZmluZWQgPSB0aGlzO1xuICAgICAgICB3aGlsZSAoY3VyciAhPSBudWxsICYmIHBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGN1cnIgPSBjdXJyLl9jaGlsZHJlbltwYXJ0cy5zaGlmdCgpIV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgZGVzY2VuZGFudCBieSBwYXRoXG4gICAgICpcbiAgICAgKiBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBkZXNjZW5kYW50IGlzIG5vdCBmb3VuZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lIFJlbGF0aXZlIG5hbWUgb2YgYSBkaXJlY3Qgb3IgaW5kaXJlY3QgY2hpbGRcbiAgICAgKiBAcmV0dXJucyBDaGlsZCB3aXRoIHRoZSBnaXZlbiBwYXRoLlxuICAgICAqL1xuICAgIHB1YmxpYyBmaW5kQ2hpbGQocGF0aDogc3RyaW5nKTogQ29uc3RydWN0IHtcbiAgICAgICAgY29uc3QgcmV0ID0gdGhpcy50cnlGaW5kQ2hpbGQocGF0aCk7XG4gICAgICAgIGlmICghcmV0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGNoaWxkIHdpdGggcGF0aDogJyR7cGF0aH0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGwgZGlyZWN0IGNoaWxkcmVuIG9mIHRoaXMgY29uc3RydWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY2hpbGRyZW4oKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9jaGlsZHJlbikubWFwKGsgPT4gdGhpcy5fY2hpbGRyZW5ba10pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2V0IGNvbnRleHR1YWwgdmFsdWVzLlxuICAgICAqIENvbnRleHQgbXVzdCBiZSBzZXQgYmVmb3JlIGFueSBjaGlsZHJlbiBhcmUgYWRkZWQsIHNpbmNlIGNoaWxkcmVuIG1heSBjb25zdWx0IGNvbnRleHQgaW5mbyBkdXJpbmcgY29uc3RydWN0aW9uLlxuICAgICAqIElmIHRoZSBrZXkgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgb3ZlcnJpZGRlbi5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBjb250ZXh0IGtleVxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgY29udGV4dCB2YWx1ZVxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRDb250ZXh0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVzID0gdGhpcy5jaGlsZHJlbi5tYXAoYyA9PiBjLmlkKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHNldCBjb250ZXh0IGFmdGVyIGNoaWxkcmVuIGhhdmUgYmVlbiBhZGRlZDogJyArIG5hbWVzLmpvaW4oJywnKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250ZXh0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSB2YWx1ZSBmcm9tIHRyZWUgY29udGV4dC5cbiAgICAgKlxuICAgICAqIENvbnRleHQgaXMgdXN1YWxseSBpbml0aWFsaXplZCBhdCB0aGUgcm9vdCwgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGF0IGFueSBwb2ludCBpbiB0aGUgdHJlZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGNvbnRleHQga2V5XG4gICAgICogQHJldHVybnMgVGhlIGNvbnRleHQgdmFsdWUgb3IgdW5kZWZpbmVkXG4gICAgICovXG4gICAgcHVibGljIGdldENvbnRleHQoa2V5OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29udGV4dFtrZXldO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdmFsdWU7IH1cblxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuZ2V0Q29udGV4dChrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlIGEgdmFsdWUgZnJvbSB0cmVlLWdsb2JhbCBjb250ZXh0XG4gICAgICpcbiAgICAgKiBJdCBpcyBhbiBlcnJvciBpZiB0aGUgY29udGV4dCBvYmplY3QgaXMgbm90IGF2YWlsYWJsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVxdWlyZUNvbnRleHQoa2V5OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0Q29udGV4dChrZXkpO1xuXG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSBtdXN0IHN1cHBseSBhIGNvbnRleHQgdmFsdWUgbmFtZWQgJyR7a2V5fSdgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBtZXRhZGF0YSBvYmplY3RzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbnN0cnVjdC5cbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gaW1wbGVtZW50IHN1cHBvcnQgZm9yIGRlcHJlY2F0aW9uIG5vdGljZXMsIHNvdXJjZSBtYXBwaW5nLCBldGMuXG4gICAgICovXG4gICAgcHVibGljIGdldCBtZXRhZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBtZXRhZGF0YSBlbnRyeSB0byB0aGlzIGNvbnN0cnVjdC5cbiAgICAgKiBFbnRyaWVzIGFyZSBhcmJpdHJhcnkgdmFsdWVzIGFuZCB3aWxsIGFsc28gaW5jbHVkZSBhIHN0YWNrIHRyYWNlIHRvIGFsbG93IHRyYWNpbmcgYmFjayB0b1xuICAgICAqIHRoZSBjb2RlIGxvY2F0aW9uIGZvciB3aGVuIHRoZSBlbnRyeSB3YXMgYWRkZWQuIEl0IGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gaW5jbHVkZSBzb3VyY2VcbiAgICAgKiBtYXBwaW5nIGluIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlcyB0byBpbXByb3ZlIGRpYWdub3N0aWNzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHR5cGUgYSBzdHJpbmcgZGVub3RpbmcgdGhlIHR5cGUgb2YgbWV0YWRhdGFcbiAgICAgKiBAcGFyYW0gZGF0YSB0aGUgdmFsdWUgb2YgdGhlIG1ldGFkYXRhIChjYW4gYmUgYSBUb2tlbikuIElmIG51bGwvdW5kZWZpbmVkLCBtZXRhZGF0YSB3aWxsIG5vdCBiZSBhZGRlZC5cbiAgICAgKiBAcGFyYW0gZnJvbSBhIGZ1bmN0aW9uIHVuZGVyIHdoaWNoIHRvIHJlc3RyaWN0IHRoZSBtZXRhZGF0YSBlbnRyeSdzIHN0YWNrIHRyYWNlIChkZWZhdWx0cyB0byB0aGlzLmFkZE1ldGFkYXRhKVxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRNZXRhZGF0YSh0eXBlOiBzdHJpbmcsIGRhdGE6IGFueSwgZnJvbT86IGFueSk6IENvbnN0cnVjdCB7XG4gICAgICAgIGlmIChkYXRhID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRyYWNlID0gY3JlYXRlU3RhY2tUcmFjZShmcm9tIHx8IHRoaXMuYWRkTWV0YWRhdGEpO1xuICAgICAgICB0aGlzLl9tZXRhZGF0YS5wdXNoKHsgdHlwZSwgZGF0YSwgdHJhY2UgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSB7IFwiYXdzOmNkazppbmZvXCI6IDxtZXNzYWdlPiB9IG1ldGFkYXRhIGVudHJ5IHRvIHRoaXMgY29uc3RydWN0LlxuICAgICAqIFRoZSB0b29sa2l0IHdpbGwgZGlzcGxheSB0aGUgaW5mbyBtZXNzYWdlIHdoZW4gYXBwcyBhcmUgc3ludGhlc2l6ZWQuXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIGluZm8gbWVzc2FnZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkSW5mbyhtZXNzYWdlOiBzdHJpbmcpOiBDb25zdHJ1Y3Qge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRNZXRhZGF0YShjeGFwaS5JTkZPX01FVEFEQVRBX0tFWSwgbWVzc2FnZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHsgd2FybmluZzogPG1lc3NhZ2U+IH0gbWV0YWRhdGEgZW50cnkgdG8gdGhpcyBjb25zdHJ1Y3QuXG4gICAgICogVGhlIHRvb2xraXQgd2lsbCBkaXNwbGF5IHRoZSB3YXJuaW5nIHdoZW4gYW4gYXBwIGlzIHN5bnRoZXNpemVkLCBvciBmYWlsXG4gICAgICogaWYgcnVuIGluIC0tc3RyaWN0IG1vZGUuXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIHdhcm5pbmcgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkV2FybmluZyhtZXNzYWdlOiBzdHJpbmcpOiBDb25zdHJ1Y3Qge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRNZXRhZGF0YShjeGFwaS5XQVJOSU5HX01FVEFEQVRBX0tFWSwgbWVzc2FnZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhbiB7IGVycm9yOiA8bWVzc2FnZT4gfSBtZXRhZGF0YSBlbnRyeSB0byB0aGlzIGNvbnN0cnVjdC5cbiAgICAgKiBUaGUgdG9vbGtpdCB3aWxsIGZhaWwgc3ludGhlc2lzIHdoZW4gZXJyb3JzIGFyZSByZXBvcnRlZC5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRXJyb3IobWVzc2FnZTogc3RyaW5nKTogQ29uc3RydWN0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkTWV0YWRhdGEoY3hhcGkuRVJST1JfTUVUQURBVEFfS0VZLCBtZXNzYWdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjb25zdHJ1Y3RzIGluIG9yZGVyIHRvIHBlcmZvcm1cbiAgICAgKiB2YWxpZGF0aW9uIGxvZ2ljLiBJdCBpcyBjYWxsZWQgb24gYWxsIGNvbnN0cnVjdHMgYmVmb3JlIHN5bnRoZXNpcy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIG9yIGFuIGVtcHR5IGFycmF5IGlmIHRoZXJlIHRoZSBjb25zdHJ1Y3QgaXMgdmFsaWQuXG4gICAgICovXG4gICAgcHVibGljIHZhbGlkYXRlKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEludm9rZXMgJ3ZhbGlkYXRlJyBvbiBhbGwgY2hpbGQgY29uc3RydWN0cyBhbmQgdGhlbiBvbiB0aGlzIGNvbnN0cnVjdCAoZGVwdGgtZmlyc3QpLlxuICAgICAqIEByZXR1cm5zIEEgbGlzdCBvZiB2YWxpZGF0aW9uIGVycm9ycy4gSWYgdGhlIGxpc3QgaXMgZW1wdHksIGFsbCBjb25zdHJ1Y3RzIGFyZSB2YWxpZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdmFsaWRhdGVUcmVlKCk6IFZhbGlkYXRpb25FcnJvcltdIHtcbiAgICAgICAgbGV0IGVycm9ycyA9IG5ldyBBcnJheTxWYWxpZGF0aW9uRXJyb3I+KCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KGNoaWxkLnZhbGlkYXRlVHJlZSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxvY2FsRXJyb3JzID0gdGhpcy52YWxpZGF0ZSgpO1xuICAgICAgICByZXR1cm4gZXJyb3JzLmNvbmNhdChsb2NhbEVycm9ycy5tYXAobXNnID0+IG5ldyBWYWxpZGF0aW9uRXJyb3IodGhpcywgbXNnKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgYW5jZXN0b3JzIChpbmNsdWRpbmcgc2VsZikgb2YgdGhpcyBDb25zdHJ1Y3QgdXAgdW50aWwgYW5kIGV4Y2x1ZGluZyB0aGUgaW5kaWNhdGVkIGNvbXBvbmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIHRvIFRoZSBjb25zdHJ1Y3QgdG8gcmV0dXJuIHRoZSBwYXRoIGNvbXBvbmVudHMgcmVsYXRpdmUgdG8sIG9yXG4gICAgICogdGhlIGVudGlyZSBsaXN0IG9mIGFuY2VzdG9ycyAoaW5jbHVkaW5nIHJvb3QpIGlmIG9taXR0ZWQuXG4gICAgICovXG4gICAgcHVibGljIGFuY2VzdG9ycyh1cFRvPzogQ29uc3RydWN0KTogQ29uc3RydWN0W10ge1xuICAgICAgICBjb25zdCByZXQgPSBuZXcgQXJyYXk8Q29uc3RydWN0PigpO1xuXG4gICAgICAgIGxldCBjdXJyOiBDb25zdHJ1Y3QgfCB1bmRlZmluZWQgPSB0aGlzO1xuICAgICAgICB3aGlsZSAoY3VyciAmJiBjdXJyICE9PSB1cFRvKSB7XG4gICAgICAgICAgICByZXQudW5zaGlmdChjdXJyKTtcbiAgICAgICAgICAgIGN1cnIgPSBjdXJyLnBhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhdGUgdGhhdCB0aGUgaWQgb2YgdGhlIGNvbnN0cnVjdCBsZWdhbC5cbiAgICAgKiBDb25zdHJ1Y3QgSURzIGNhbiBiZSBhbnkgY2hhcmFjdGVycyBiZXNpZGVzIHRoZSBwYXRoIHNlcGFyYXRvci5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX3ZhbGlkYXRlSWQoaWQ6IHN0cmluZykge1xuICAgICAgICBpZiAoaWQuaW5kZXhPZihQQVRIX1NFUCkgIT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbnN0cnVjdCBuYW1lcyBjYW5ub3QgaW5jbHVkZSAnJHtQQVRIX1NFUH0nOiAke2lkfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhyb3dzIGlmIHRoZSBgcHJvcHNgIGJhZyBkb2Vzbid0IGluY2x1ZGUgdGhlIHByb3BlcnR5IGBuYW1lYC5cbiAgICAgKiBJbiB0aGUgZnV0dXJlIHdlIGNhbiBhZGQgc29tZSB0eXBlLWNoZWNraW5nIGhlcmUsIG1heWJlIGV2ZW4gYXV0by1nZW5lcmF0ZSBkdXJpbmcgY29tcGlsYXRpb24uXG4gICAgICogQHBhcmFtIHByb3BzIFRoZSBwcm9wcyBiYWcuXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHJlcXVpcmVkIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGBgcmVxdWlyZVByb3BlcnR5YGAgZnJvbSBgYEBhd3MtY2RrL3J1bnRpbWVgYCBpbnN0ZWFkLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZXF1aXJlZChwcm9wczogYW55LCBuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBpZiAoIShuYW1lIGluIHByb3BzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb25zdHJ1Y3Qgb2YgdHlwZSAke3RoaXMudHlwZW5hbWV9IGlzIG1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHk6ICR7bmFtZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gcHJvcHNbbmFtZV07XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBUaGUgdHlwZSBuYW1lIG9mIHRoaXMgbm9kZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldCB0eXBlbmFtZSgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBjdG9yOiBhbnkgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgICAgICByZXR1cm4gY3Rvci5uYW1lIHx8ICdDb25zdHJ1Y3QnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBjaGlsZCBjb25zdHJ1Y3QgdG8gdGhpcyBub2RlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNoaWxkIFRoZSBjaGlsZCBjb25zdHJ1Y3RcbiAgICAgKiBAcGFyYW0gbmFtZSBUaGUgdHlwZSBuYW1lIG9mIHRoZSBjaGlsZCBjb25zdHJ1Y3QuXG4gICAgICogQHJldHVybnMgVGhlIHJlc29sdmVkIHBhdGggcGFydCBuYW1lIG9mIHRoZSBjaGlsZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhZGRDaGlsZChjaGlsZDogQ29uc3RydWN0LCBjaGlsZE5hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5sb2NrZWQpIHtcblxuICAgICAgICAgICAgLy8gc3BlY2lhbCBlcnJvciBpZiByb290IGlzIGxvY2tlZFxuICAgICAgICAgICAgaWYgKCF0aGlzLnBhdGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhZGQgY2hpbGRyZW4gZHVyaW5nIHN5bnRoZXNpcycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBhZGQgY2hpbGRyZW4gdG8gXCIke3RoaXMucGF0aH1cIiBkdXJpbmcgc3ludGhlc2lzYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGROYW1lIGluIHRoaXMuX2NoaWxkcmVuKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIGFscmVhZHkgYSBDb25zdHJ1Y3Qgd2l0aCBuYW1lICcke2NoaWxkTmFtZX0nIGluICR7dGhpcy50b1N0cmluZygpfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hpbGRyZW5bY2hpbGROYW1lXSA9IGNoaWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvY2tzIHRoaXMgY29uc3RydWN0IGZyb20gYWxsb3dpbmcgbW9yZSBjaGlsZHJlbiB0byBiZSBhZGRlZC4gQWZ0ZXIgdGhpc1xuICAgICAqIGNhbGwsIG5vIG1vcmUgY2hpbGRyZW4gY2FuIGJlIGFkZGVkIHRvIHRoaXMgY29uc3RydWN0IG9yIHRvIGFueSBjaGlsZHJlbi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgbG9jaygpIHtcbiAgICAgICAgdGhpcy5fbG9ja2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVbmxvY2tzIHRoaXMgY29zdHJ1Y3QgYW5kIGFsbG93cyBtdXRhdGlvbnMgKGFkZGluZyBjaGlsZHJlbikuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVubG9jaygpIHtcbiAgICAgICAgdGhpcy5fbG9ja2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBwYXRoIG9mIGNvbXBvbmVudHMgdXAgdG8gYnV0IGV4Y2x1ZGluZyB0aGUgcm9vdFxuICAgICAqL1xuICAgIHByaXZhdGUgcm9vdFBhdGgoKTogQ29uc3RydWN0W10ge1xuICAgICAgICBjb25zdCBhbmNlc3RvcnMgPSB0aGlzLmFuY2VzdG9ycygpO1xuICAgICAgICBhbmNlc3RvcnMuc2hpZnQoKTtcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ycztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBjb25zdHJ1Y3Qgb3IgYW55IG9mIGl0J3MgcGFyZW50IGNvbnN0cnVjdHMgYXJlXG4gICAgICogbG9ja2VkLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0IGxvY2tlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xvY2tlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQubG9ja2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgcm9vdCBvZiBhIGNvbnN0cnVjdCB0cmVlLlxuICogTm8gcGFyZW50IGFuZCBubyBuYW1lLlxuICovXG5leHBvcnQgY2xhc3MgUm9vdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8vIEJ5cGFzcyB0eXBlIGNoZWNrc1xuICAgICAgICBzdXBlcih1bmRlZmluZWQgYXMgYW55LCAnJyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEFuIG1ldGFkYXRhIGVudHJ5IGluIHRoZSBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFFbnRyeSB7XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG1ldGFkYXRhIGVudHJ5LlxuICAgICAqL1xuICAgIHR5cGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhLlxuICAgICAqL1xuICAgIGRhdGE/OiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBBIHN0YWNrIHRyYWNlIGZvciB3aGVuIHRoZSBlbnRyeSB3YXMgY3JlYXRlZC5cbiAgICAgKi9cbiAgICB0cmFjZTogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBzb3VyY2U6IENvbnN0cnVjdCwgcHVibGljIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZykge1xuXG4gICAgfVxufVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6YmFuLXR5cGVzXG5mdW5jdGlvbiBjcmVhdGVTdGFja1RyYWNlKGJlbG93OiBGdW5jdGlvbik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBvYmplY3QgPSB7IHN0YWNrOiAnJyB9O1xuICAgIGNvbnN0IHByZXZpb3VzTGltaXQgPSBFcnJvci5zdGFja1RyYWNlTGltaXQ7XG4gICAgdHJ5IHtcbiAgICAgICAgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKG9iamVjdCwgYmVsb3cpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IHByZXZpb3VzTGltaXQ7XG4gICAgfVxuICAgIGlmICghb2JqZWN0LnN0YWNrKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdC5zdGFjay5zcGxpdCgnXFxuJykuc2xpY2UoMSkubWFwKHMgPT4gcy5yZXBsYWNlKC9eXFxzKmF0XFxzKy8sICcnKSk7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUNBQTBDO0FBQzFDLCtDQUFnRDtBQUNuQyxRQUFBLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFFNUI7OztHQUdHO0FBQ0gsTUFBYSxTQUFTO0lBc0NsQjs7Ozs7T0FLRztJQUNILFlBQVksTUFBaUIsRUFBRSxFQUFVO1FBbkJ6Qzs7V0FFRztRQUNjLGNBQVMsR0FBa0MsRUFBRyxDQUFDO1FBQy9DLFlBQU8sR0FBMkIsRUFBRyxDQUFDO1FBQ3RDLGNBQVMsR0FBRyxJQUFJLEtBQUssRUFBaUIsQ0FBQztRQUV4RDs7O1dBR0c7UUFDSyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBU3BCLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsc0ZBQXNGO1FBQ3RGLGdDQUFnQztRQUNoQyxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7WUFDaEIsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQzthQUNsRTtZQUVELDREQUE0RDtZQUM1RCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbEM7YUFBTTtZQUNILDRCQUE0QjtZQUM1QixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUNoQjtRQUVELHFDQUFxQztRQUNyQyxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzdCO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFD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QztBQXNCRCxNQUFhLGVBQWU7SUFDeEIsWUFBNEIsTUFBaUIsRUFBa0IsT0FBZTtRQUFsRCxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQWtCLFlBQU8sR0FBUCxPQUFPLENBQVE7SUFFOUUsQ0FBQztDQUNKO0FBSkQsMENBSUM7QUFFRCxxQ0FBcUM7QUFDckMsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFlO0lBQ3JDLE1BQU0sTUFBTSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzdCLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUM7SUFDNUMsSUFBSTtRQUNBLEtBQUssQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQ2hELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDMUM7WUFBUztRQUNOLEtBQUssQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDO0tBQ3pDO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDZixPQUFPLEVBQUUsQ0FBQztLQUNiO0lBQ0QsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGN4YXBpID0gcmVxdWlyZSgnQGF3cy1jZGsvY3gtYXBpJyk7XG5pbXBvcnQgeyBtYWtlVW5pcXVlSWQgfSBmcm9tICcuLi91dGlsL3VuaXF1ZWlkJztcbmV4cG9ydCBjb25zdCBQQVRIX1NFUCA9ICcvJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBidWlsZGluZyBibG9jayBvZiB0aGUgY29uc3RydWN0IGdyYXBoLlxuICogV2hlbiBhIGNvbnN0cnVjdCBpcyBjcmVhdGVkLCBpdCBpcyBhbHdheXMgYWRkZWQgYXMgYSBjaGlsZFxuICovXG5leHBvcnQgY2xhc3MgQ29uc3RydWN0IHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBwYXJlbnQgb2YgdGhpcyBub2RlIG9yIHVuZGVmaW5lZCBpZiB0aGlzIGlzIGEgcm9vdCBub2RlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBwYXJlbnQ/OiBDb25zdHJ1Y3Q7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbG9jYWwgaWQgb2YgdGhlIGNvbnN0cnVjdC5cbiAgICAgKiBUaGlzIGlkIGlzIHVuaXF1ZSBhbW9uZ3N0IGl0cyBzaWJsaW5ncy5cbiAgICAgKiBUbyBvYnRhaW4gYSB0cmVlLWdsb2JhbCB1bmlxdWUgaWQgZm9yIHRoaXMgY29uc3RydWN0LCB1c2UgYHVuaXF1ZUlkYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmdWxsIHBhdGggb2YgdGhpcyBjb25zdHJ1Y3QgaW4gdGhlIHRyZWUuXG4gICAgICogQ29tcG9uZW50cyBhcmUgc2VwYXJhdGVkIGJ5ICcvJy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQSB0cmVlLWdsb2JhbCB1bmlxdWUgYWxwaGFudW1lcmljIGlkZW50aWZpZXIgZm9yIHRoaXMgY29uc3RydWN0LlxuICAgICAqIEluY2x1ZGVzIGFsbCBjb21wb25lbnRzIG9mIHRoZSB0cmVlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSB1bmlxdWVJZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBjaGlsZHJlbiBhbmQgdGhlaXIgbmFtZXNcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jaGlsZHJlbjogeyBbbmFtZTogc3RyaW5nXTogQ29uc3RydWN0IH0gPSB7IH07XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250ZXh0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0geyB9O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX21ldGFkYXRhID0gbmV3IEFycmF5PE1ldGFkYXRhRW50cnk+KCk7XG5cbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGlzIHNldCB0byAndHJ1ZScuIGFkZENoaWxkKCkgY2FsbHMgZm9yIHRoaXMgY29uc3RydWN0IGFuZCBhbnkgY2hpbGRcbiAgICAgKiB3aWxsIGZhaWwuIFRoaXMgaXMgdXNlZCB0byBwcmV2ZW50IHRyZWUgbXV0YXRpb25zIGR1cmluZyBzeW50aGVzaXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbG9ja2VkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbnN0cnVjdCBub2RlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IGNvbnN0cnVjdFxuICAgICAqIEBwYXJhbSBwcm9wcyAgUHJvcGVydGllcyBmb3IgdGhpcyBjb25zdHJ1Y3RcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuXG4gICAgICAgIC8vIFdlIHNheSB0aGF0IHBhcmVudCBpcyByZXF1aXJlZCwgYnV0IHNvbWUgcm9vdCBjb25zdHJ1Y3RzIGJ5cGFzcyB0aGUgdHlwZSBjaGVja3MgYW5kXG4gICAgICAgIC8vIGFjdHVhbGx5IHBhc3MgaW4gJ3VuZGVmaW5lZCcuXG4gICAgICAgIGlmIChwYXJlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGlkID09PSAnJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignT25seSByb290IGNvbnN0cnVjdHMgbWF5IGhhdmUgYW4gZW1wdHkgbmFtZScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBIYXMgc2lkZSBlZmZlY3Qgc28gbXVzdCBiZSB2ZXJ5IGxhc3QgdGhpbmcgaW4gY29uc3RydWN0b3JcbiAgICAgICAgICAgIHBhcmVudC5hZGRDaGlsZCh0aGlzLCB0aGlzLmlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSByb290IGNvbnN0cnVjdC5cbiAgICAgICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIHRoZSBuYW1lIHdlIGVuZGVkIHVwIHdpdGhcbiAgICAgICAgaWYgKHRoaXMuaWQgIT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLl92YWxpZGF0ZUlkKHRoaXMuaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMucm9vdFBhdGgoKS5tYXAoYyA9PiBjLmlkKTtcbiAgICAgICAgdGhpcy5wYXRoID0gY29tcG9uZW50cy5qb2luKFBBVEhfU0VQKTtcbiAgICAgICAgdGhpcy51bmlxdWVJZCA9IGNvbXBvbmVudHMubGVuZ3RoID4gMCA/IG1ha2VVbmlxdWVJZChjb21wb25lbnRzKSA6ICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBjb25zdHJ1Y3QuXG4gICAgICovXG4gICAgcHVibGljIHRvU3RyaW5nKCkge1xuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5wYXRoO1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlbmFtZSArIChwYXRoLmxlbmd0aCA+IDAgPyBgIFske3BhdGh9XWAgOiAnJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHN0cmluZyB3aXRoIGEgdHJlZSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGNvbnN0cnVjdCBhbmQgaXQncyBjaGlsZHJlbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG9UcmVlU3RyaW5nKGRlcHRoID0gMCkge1xuICAgICAgICBsZXQgb3V0ID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVwdGg7ICsraSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgICc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuaWQgfHwgJyc7XG4gICAgICAgIG91dCArPSBgJHt0aGlzLnR5cGVuYW1lfSR7bmFtZS5sZW5ndGggPiAwID8gJyBbJyArIG5hbWUgKyAnXScgOiAnJ31cXG5gO1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIG91dCArPSBjaGlsZC50b1RyZWVTdHJpbmcoZGVwdGggKyAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGRlc2NlbmRhbnQgYnkgcGF0aCwgb3IgdW5kZWZpbmVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSBSZWxhdGl2ZSBuYW1lIG9mIGEgZGlyZWN0IG9yIGluZGlyZWN0IGNoaWxkXG4gICAgICogQHJldHVybnMgYSBjaGlsZCBieSBwYXRoIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmQuXG4gICAgICovXG4gICAgcHVibGljIHRyeUZpbmRDaGlsZChwYXRoOiBzdHJpbmcpOiBDb25zdHJ1Y3QgfCB1bmRlZmluZWQge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tY29uc29sZVxuICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKFBBVEhfU0VQKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXRoIG11c3QgYmUgcmVsYXRpdmUnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoUEFUSF9TRVApO1xuXG4gICAgICAgIGxldCBjdXJyOiBDb25zdHJ1Y3R8dW5kZWZpbmVkID0gdGhpcztcbiAgICAgICAgd2hpbGUgKGN1cnIgIT0gbnVsbCAmJiBwYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjdXJyID0gY3Vyci5fY2hpbGRyZW5bcGFydHMuc2hpZnQoKSFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGRlc2NlbmRhbnQgYnkgcGF0aFxuICAgICAqXG4gICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgZGVzY2VuZGFudCBpcyBub3QgZm91bmQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSBSZWxhdGl2ZSBuYW1lIG9mIGEgZGlyZWN0IG9yIGluZGlyZWN0IGNoaWxkXG4gICAgICogQHJldHVybnMgQ2hpbGQgd2l0aCB0aGUgZ2l2ZW4gcGF0aC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZmluZENoaWxkKHBhdGg6IHN0cmluZyk6IENvbnN0cnVjdCB7XG4gICAgICAgIGNvbnN0IHJldCA9IHRoaXMudHJ5RmluZENoaWxkKHBhdGgpO1xuICAgICAgICBpZiAoIXJldCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBjaGlsZCB3aXRoIHBhdGg6ICcke3BhdGh9J2ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWxsIGRpcmVjdCBjaGlsZHJlbiBvZiB0aGlzIGNvbnN0cnVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNoaWxkcmVuKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fY2hpbGRyZW4pLm1hcChrID0+IHRoaXMuX2NoaWxkcmVuW2tdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNldCBjb250ZXh0dWFsIHZhbHVlcy5cbiAgICAgKiBDb250ZXh0IG11c3QgYmUgc2V0IGJlZm9yZSBhbnkgY2hpbGRyZW4gYXJlIGFkZGVkLCBzaW5jZSBjaGlsZHJlbiBtYXkgY29uc3VsdCBjb250ZXh0IGluZm8gZHVyaW5nIGNvbnN0cnVjdGlvbi5cbiAgICAgKiBJZiB0aGUga2V5IGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIGJlIG92ZXJyaWRkZW4uXG4gICAgICogQHBhcmFtIGtleSBUaGUgY29udGV4dCBrZXlcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIGNvbnRleHQgdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0Q29udGV4dChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lcyA9IHRoaXMuY2hpbGRyZW4ubWFwKGMgPT4gYy5pZCk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzZXQgY29udGV4dCBhZnRlciBjaGlsZHJlbiBoYXZlIGJlZW4gYWRkZWQ6ICcgKyBuYW1lcy5qb2luKCcsJykpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udGV4dFtrZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIGEgdmFsdWUgZnJvbSB0cmVlIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBDb250ZXh0IGlzIHVzdWFsbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIHJvb3QsIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBhdCBhbnkgcG9pbnQgaW4gdGhlIHRyZWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBjb250ZXh0IGtleVxuICAgICAqIEByZXR1cm5zIFRoZSBjb250ZXh0IHZhbHVlIG9yIHVuZGVmaW5lZFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb250ZXh0KGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmNvbnRleHRba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHsgcmV0dXJuIHZhbHVlOyB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LmdldENvbnRleHQoa2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZSBhIHZhbHVlIGZyb20gdHJlZS1nbG9iYWwgY29udGV4dFxuICAgICAqXG4gICAgICogSXQgaXMgYW4gZXJyb3IgaWYgdGhlIGNvbnRleHQgb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUuXG4gICAgICovXG4gICAgcHVibGljIHJlcXVpcmVDb250ZXh0KGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldENvbnRleHQoa2V5KTtcblxuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgbXVzdCBzdXBwbHkgYSBjb250ZXh0IHZhbHVlIG5hbWVkICcke2tleX0nYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgbWV0YWRhdGEgb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb25zdHJ1Y3QuXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIGltcGxlbWVudCBzdXBwb3J0IGZvciBkZXByZWNhdGlvbiBub3RpY2VzLCBzb3VyY2UgbWFwcGluZywgZXRjLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbWV0YWRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbWV0YWRhdGEgZW50cnkgdG8gdGhpcyBjb25zdHJ1Y3QuXG4gICAgICogRW50cmllcyBhcmUgYXJiaXRyYXJ5IHZhbHVlcyBhbmQgd2lsbCBhbHNvIGluY2x1ZGUgYSBzdGFjayB0cmFjZSB0byBhbGxvdyB0cmFjaW5nIGJhY2sgdG9cbiAgICAgKiB0aGUgY29kZSBsb2NhdGlvbiBmb3Igd2hlbiB0aGUgZW50cnkgd2FzIGFkZGVkLiBJdCBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIGluY2x1ZGUgc291cmNlXG4gICAgICogbWFwcGluZyBpbiBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZXMgdG8gaW1wcm92ZSBkaWFnbm9zdGljcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0eXBlIGEgc3RyaW5nIGRlbm90aW5nIHRoZSB0eXBlIG9mIG1ldGFkYXRhXG4gICAgICogQHBhcmFtIGRhdGEgdGhlIHZhbHVlIG9mIHRoZSBtZXRhZGF0YSAoY2FuIGJlIGEgVG9rZW4pLiBJZiBudWxsL3VuZGVmaW5lZCwgbWV0YWRhdGEgd2lsbCBub3QgYmUgYWRkZWQuXG4gICAgICogQHBhcmFtIGZyb20gYSBmdW5jdGlvbiB1bmRlciB3aGljaCB0byByZXN0cmljdCB0aGUgbWV0YWRhdGEgZW50cnkncyBzdGFjayB0cmFjZSAoZGVmYXVsdHMgdG8gdGhpcy5hZGRNZXRhZGF0YSlcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkTWV0YWRhdGEodHlwZTogc3RyaW5nLCBkYXRhOiBhbnksIGZyb20/OiBhbnkpOiBDb25zdHJ1Y3Qge1xuICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0cmFjZSA9IGNyZWF0ZVN0YWNrVHJhY2UoZnJvbSB8fCB0aGlzLmFkZE1ldGFkYXRhKTtcbiAgICAgICAgdGhpcy5fbWV0YWRhdGEucHVzaCh7IHR5cGUsIGRhdGEsIHRyYWNlIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgeyBcImF3czpjZGs6aW5mb1wiOiA8bWVzc2FnZT4gfSBtZXRhZGF0YSBlbnRyeSB0byB0aGlzIGNvbnN0cnVjdC5cbiAgICAgKiBUaGUgdG9vbGtpdCB3aWxsIGRpc3BsYXkgdGhlIGluZm8gbWVzc2FnZSB3aGVuIGFwcHMgYXJlIHN5bnRoZXNpemVkLlxuICAgICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBpbmZvIG1lc3NhZ2UuXG4gICAgICovXG4gICAgcHVibGljIGFkZEluZm8obWVzc2FnZTogc3RyaW5nKTogQ29uc3RydWN0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkTWV0YWRhdGEoY3hhcGkuSU5GT19NRVRBREFUQV9LRVksIG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSB7IHdhcm5pbmc6IDxtZXNzYWdlPiB9IG1ldGFkYXRhIGVudHJ5IHRvIHRoaXMgY29uc3RydWN0LlxuICAgICAqIFRoZSB0b29sa2l0IHdpbGwgZGlzcGxheSB0aGUgd2FybmluZyB3aGVuIGFuIGFwcCBpcyBzeW50aGVzaXplZCwgb3IgZmFpbFxuICAgICAqIGlmIHJ1biBpbiAtLXN0cmljdCBtb2RlLlxuICAgICAqIEBwYXJhbSBtZXNzYWdlIFRoZSB3YXJuaW5nIG1lc3NhZ2UuXG4gICAgICovXG4gICAgcHVibGljIGFkZFdhcm5pbmcobWVzc2FnZTogc3RyaW5nKTogQ29uc3RydWN0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkTWV0YWRhdGEoY3hhcGkuV0FSTklOR19NRVRBREFUQV9LRVksIG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4geyBlcnJvcjogPG1lc3NhZ2U+IH0gbWV0YWRhdGEgZW50cnkgdG8gdGhpcyBjb25zdHJ1Y3QuXG4gICAgICogVGhlIHRvb2xraXQgd2lsbCBmYWlsIHN5bnRoZXNpcyB3aGVuIGVycm9ycyBhcmUgcmVwb3J0ZWQuXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAgICovXG4gICAgcHVibGljIGFkZEVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IENvbnN0cnVjdCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZE1ldGFkYXRhKGN4YXBpLkVSUk9SX01FVEFEQVRBX0tFWSwgbWVzc2FnZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgY2FuIGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY29uc3RydWN0cyBpbiBvcmRlciB0byBwZXJmb3JtXG4gICAgICogdmFsaWRhdGlvbiBsb2dpYy4gSXQgaXMgY2FsbGVkIG9uIGFsbCBjb25zdHJ1Y3RzIGJlZm9yZSBzeW50aGVzaXMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB0aGVyZSB0aGUgY29uc3RydWN0IGlzIHZhbGlkLlxuICAgICAqL1xuICAgIHB1YmxpYyB2YWxpZGF0ZSgpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VzICd2YWxpZGF0ZScgb24gYWxsIGNoaWxkIGNvbnN0cnVjdHMgYW5kIHRoZW4gb24gdGhpcyBjb25zdHJ1Y3QgKGRlcHRoLWZpcnN0KS5cbiAgICAgKiBAcmV0dXJucyBBIGxpc3Qgb2YgdmFsaWRhdGlvbiBlcnJvcnMuIElmIHRoZSBsaXN0IGlzIGVtcHR5LCBhbGwgY29uc3RydWN0cyBhcmUgdmFsaWQuXG4gICAgICovXG4gICAgcHVibGljIHZhbGlkYXRlVHJlZSgpOiBWYWxpZGF0aW9uRXJyb3JbXSB7XG4gICAgICAgIGxldCBlcnJvcnMgPSBuZXcgQXJyYXk8VmFsaWRhdGlvbkVycm9yPigpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdChjaGlsZC52YWxpZGF0ZVRyZWUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2NhbEVycm9ycyA9IHRoaXMudmFsaWRhdGUoKTtcbiAgICAgICAgcmV0dXJuIGVycm9ycy5jb25jYXQobG9jYWxFcnJvcnMubWFwKG1zZyA9PiBuZXcgVmFsaWRhdGlvbkVycm9yKHRoaXMsIG1zZykpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGFuY2VzdG9ycyAoaW5jbHVkaW5nIHNlbGYpIG9mIHRoaXMgQ29uc3RydWN0IHVwIHVudGlsIGFuZCBleGNsdWRpbmcgdGhlIGluZGljYXRlZCBjb21wb25lbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0byBUaGUgY29uc3RydWN0IHRvIHJldHVybiB0aGUgcGF0aCBjb21wb25lbnRzIHJlbGF0aXZlIHRvLCBvclxuICAgICAqIHRoZSBlbnRpcmUgbGlzdCBvZiBhbmNlc3RvcnMgKGluY2x1ZGluZyByb290KSBpZiBvbWl0dGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBhbmNlc3RvcnModXBUbz86IENvbnN0cnVjdCk6IENvbnN0cnVjdFtdIHtcbiAgICAgICAgY29uc3QgcmV0ID0gbmV3IEFycmF5PENvbnN0cnVjdD4oKTtcblxuICAgICAgICBsZXQgY3VycjogQ29uc3RydWN0IHwgdW5kZWZpbmVkID0gdGhpcztcbiAgICAgICAgd2hpbGUgKGN1cnIgJiYgY3VyciAhPT0gdXBUbykge1xuICAgICAgICAgICAgcmV0LnVuc2hpZnQoY3Vycik7XG4gICAgICAgICAgICBjdXJyID0gY3Vyci5wYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIHRoYXQgdGhlIGlkIG9mIHRoZSBjb25zdHJ1Y3QgbGVnYWwuXG4gICAgICogQ29uc3RydWN0IElEcyBjYW4gYmUgYW55IGNoYXJhY3RlcnMgYmVzaWRlcyB0aGUgcGF0aCBzZXBhcmF0b3IuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF92YWxpZGF0ZUlkKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGlkLmluZGV4T2YoUEFUSF9TRVApICE9PSAtMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb25zdHJ1Y3QgbmFtZXMgY2Fubm90IGluY2x1ZGUgJyR7UEFUSF9TRVB9JzogJHtpZH1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRocm93cyBpZiB0aGUgYHByb3BzYCBiYWcgZG9lc24ndCBpbmNsdWRlIHRoZSBwcm9wZXJ0eSBgbmFtZWAuXG4gICAgICogSW4gdGhlIGZ1dHVyZSB3ZSBjYW4gYWRkIHNvbWUgdHlwZS1jaGVja2luZyBoZXJlLCBtYXliZSBldmVuIGF1dG8tZ2VuZXJhdGUgZHVyaW5nIGNvbXBpbGF0aW9uLlxuICAgICAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcHMgYmFnLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBgYHJlcXVpcmVQcm9wZXJ0eWBgIGZyb20gYGBAYXdzLWNkay9ydW50aW1lYGAgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVxdWlyZWQocHJvcHM6IGFueSwgbmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgaWYgKCEobmFtZSBpbiBwcm9wcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29uc3RydWN0IG9mIHR5cGUgJHt0aGlzLnR5cGVuYW1lfSBpcyBtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5OiAke25hbWV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9IHByb3BzW25hbWVdO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIHR5cGUgbmFtZSBvZiB0aGlzIG5vZGUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXQgdHlwZW5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgY3RvcjogYW55ID0gdGhpcy5jb25zdHJ1Y3RvcjtcbiAgICAgICAgcmV0dXJuIGN0b3IubmFtZSB8fCAnQ29uc3RydWN0JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgY2hpbGQgY29uc3RydWN0IHRvIHRoaXMgbm9kZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaGlsZCBUaGUgY2hpbGQgY29uc3RydWN0XG4gICAgICogQHBhcmFtIG5hbWUgVGhlIHR5cGUgbmFtZSBvZiB0aGUgY2hpbGQgY29uc3RydWN0LlxuICAgICAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBwYXRoIHBhcnQgbmFtZSBvZiB0aGUgY2hpbGRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYWRkQ2hpbGQoY2hpbGQ6IENvbnN0cnVjdCwgY2hpbGROYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMubG9ja2VkKSB7XG5cbiAgICAgICAgICAgIC8vIHNwZWNpYWwgZXJyb3IgaWYgcm9vdCBpcyBsb2NrZWRcbiAgICAgICAgICAgIGlmICghdGhpcy5wYXRoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWRkIGNoaWxkcmVuIGR1cmluZyBzeW50aGVzaXMnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYWRkIGNoaWxkcmVuIHRvIFwiJHt0aGlzLnBhdGh9XCIgZHVyaW5nIHN5bnRoZXNpc2ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkTmFtZSBpbiB0aGlzLl9jaGlsZHJlbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBhbHJlYWR5IGEgQ29uc3RydWN0IHdpdGggbmFtZSAnJHtjaGlsZE5hbWV9JyBpbiAke3RoaXMudG9TdHJpbmcoKX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoaWxkcmVuW2NoaWxkTmFtZV0gPSBjaGlsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2NrcyB0aGlzIGNvbnN0cnVjdCBmcm9tIGFsbG93aW5nIG1vcmUgY2hpbGRyZW4gdG8gYmUgYWRkZWQuIEFmdGVyIHRoaXNcbiAgICAgKiBjYWxsLCBubyBtb3JlIGNoaWxkcmVuIGNhbiBiZSBhZGRlZCB0byB0aGlzIGNvbnN0cnVjdCBvciB0byBhbnkgY2hpbGRyZW4uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGxvY2soKSB7XG4gICAgICAgIHRoaXMuX2xvY2tlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW5sb2NrcyB0aGlzIGNvc3RydWN0IGFuZCBhbGxvd3MgbXV0YXRpb25zIChhZGRpbmcgY2hpbGRyZW4pLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCB1bmxvY2soKSB7XG4gICAgICAgIHRoaXMuX2xvY2tlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgcGF0aCBvZiBjb21wb25lbnRzIHVwIHRvIGJ1dCBleGNsdWRpbmcgdGhlIHJvb3RcbiAgICAgKi9cbiAgICBwcml2YXRlIHJvb3RQYXRoKCk6IENvbnN0cnVjdFtdIHtcbiAgICAgICAgY29uc3QgYW5jZXN0b3JzID0gdGhpcy5hbmNlc3RvcnMoKTtcbiAgICAgICAgYW5jZXN0b3JzLnNoaWZ0KCk7XG4gICAgICAgIHJldHVybiBhbmNlc3RvcnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgY29uc3RydWN0IG9yIGFueSBvZiBpdCdzIHBhcmVudCBjb25zdHJ1Y3RzIGFyZVxuICAgICAqIGxvY2tlZC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IGxvY2tlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xvY2tlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQubG9ja2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgcm9vdCBvZiBhIGNvbnN0cnVjdCB0cmVlLlxuICogTm8gcGFyZW50IGFuZCBubyBuYW1lLlxuICovXG5leHBvcnQgY2xhc3MgUm9vdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8vIEJ5cGFzcyB0eXBlIGNoZWNrc1xuICAgICAgICBzdXBlcih1bmRlZmluZWQgYXMgYW55LCAnJyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEFuIG1ldGFkYXRhIGVudHJ5IGluIHRoZSBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFFbnRyeSB7XG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG1ldGFkYXRhIGVudHJ5LlxuICAgICAqL1xuICAgIHR5cGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhLlxuICAgICAqL1xuICAgIGRhdGE/OiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBBIHN0YWNrIHRyYWNlIGZvciB3aGVuIHRoZSBlbnRyeSB3YXMgY3JlYXRlZC5cbiAgICAgKi9cbiAgICB0cmFjZTogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBzb3VyY2U6IENvbnN0cnVjdCwgcHVibGljIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZykge1xuXG4gICAgfVxufVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6YmFuLXR5cGVzXG5mdW5jdGlvbiBjcmVhdGVTdGFja1RyYWNlKGJlbG93OiBGdW5jdGlvbik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBvYmplY3QgPSB7IHN0YWNrOiAnJyB9O1xuICAgIGNvbnN0IHByZXZpb3VzTGltaXQgPSBFcnJvci5zdGFja1RyYWNlTGltaXQ7XG4gICAgdHJ5IHtcbiAgICAgICAgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKG9iamVjdCwgYmVsb3cpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IHByZXZpb3VzTGltaXQ7XG4gICAgfVxuICAgIGlmICghb2JqZWN0LnN0YWNrKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdC5zdGFjay5zcGxpdCgnXFxuJykuc2xpY2UoMSkubWFwKHMgPT4gcy5yZXBsYWNlKC9eXFxzKmF0XFxzKy8sICcnKSk7XG59XG4iXX0=

@@ -72,6 +72,7 @@ /**

/**
* Returns true if obj is a token (i.e. has the resolve() method)
* Returns true if obj is a token (i.e. has the resolve() method or is a string
* that includes token markers).
* @param obj The object to test.
*/
export declare function isToken(obj: any): obj is Token;
export declare function unresolved(obj: any): obj is Token;
/**

@@ -78,0 +79,0 @@ * Resolves an object by evaluating all tokens and removing any undefined or empty objects or arrays.

@@ -99,9 +99,15 @@ "use strict";

/**
* Returns true if obj is a token (i.e. has the resolve() method)
* Returns true if obj is a token (i.e. has the resolve() method or is a string
* that includes token markers).
* @param obj The object to test.
*/
function isToken(obj) {
return typeof (obj[exports.RESOLVE_METHOD]) === 'function';
function unresolved(obj) {
if (typeof (obj) === 'string') {
return TOKEN_STRING_MAP.createTokenString(obj).test();
}
else {
return typeof (obj[exports.RESOLVE_METHOD]) === 'function';
}
}
exports.isToken = isToken;
exports.unresolved = unresolved;
/**

@@ -154,3 +160,3 @@ * Resolves an object by evaluating all tokens and removing any undefined or empty objects or arrays.

//
if (isToken(obj)) {
if (unresolved(obj)) {
const value = obj[exports.RESOLVE_METHOD]();

@@ -179,2 +185,6 @@ return resolve(value, path);

for (const key of Object.keys(obj)) {
const resolvedKey = resolve(key);
if (typeof (resolvedKey) !== 'string') {
throw new Error(`The key "${key}" has been resolved to ${JSON.stringify(resolvedKey)} but must be resolvable to a string`);
}
const value = resolve(obj[key], path.concat(key));

@@ -185,3 +195,3 @@ // skip undefined

}
result[key] = value;
result[resolvedKey] = value;
}

@@ -227,6 +237,12 @@ return result;

/**
* Returns a `TokenString` for this string.
*/
createTokenString(s) {
return new TokenString(s, BEGIN_TOKEN_MARKER, `[${VALID_KEY_CHARS}]+`, END_TOKEN_MARKER);
}
/**
* Replace any Token markers in this string with their resolved values
*/
resolveMarkers(s) {
const str = new TokenString(s, BEGIN_TOKEN_MARKER, `[${VALID_KEY_CHARS}]+`, END_TOKEN_MARKER);
const str = this.createTokenString(s);
const fragments = str.split(this.lookupToken.bind(this));

@@ -261,2 +277,3 @@ return fragments.join();

this.endMarker = endMarker;
this.pattern = `${regexQuote(this.beginMarker)}(${this.idPattern})${regexQuote(this.endMarker)}`;
}

@@ -267,3 +284,3 @@ /**

split(lookup) {
const re = new RegExp(`${regexQuote(this.beginMarker)}(${this.idPattern})${regexQuote(this.endMarker)}`, 'g');
const re = new RegExp(this.pattern, 'g');
const ret = new TokenStringFragments();

@@ -285,2 +302,9 @@ let rest = 0;

}
/**
* Indicates if this string includes tokens.
*/
test() {
const re = new RegExp(this.pattern, 'g');
return re.test(this.str);
}
}

@@ -346,2 +370,2 @@ /**

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidG9rZW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMkNBQXdDO0FBRXhDOzs7R0FHRztBQUNVLFFBQUEsY0FBYyxHQUFHLFNBQVMsQ0FBQztBQUV4Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLEtBQUs7SUFHZDs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba0JHO0lBQ0gsWUFBNkIsZUFBcUIsRUFBbUIsV0FBb0I7UUFBNUQsb0JBQWUsR0FBZixlQUFlLENBQU07UUFBbUIsZ0JBQVcsR0FBWCxXQUFXLENBQVM7SUFDekYsQ0FBQztJQUVEOztPQUVHO0lBQ0ksT0FBTztRQUNWLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDakMsSUFBSSxPQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssVUFBVSxFQUFFO1lBQzlCLEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBQztTQUNuQjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksUUFBUTtRQUNYLE1BQU0sU0FBUyxHQUFHLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM5QyxpRUFBaUU7UUFDakUsdUJBQXVCO1FBQ3ZCLElBQUksU0FBUyxLQUFLLFFBQVEsSUFBSSxTQUFTLEtBQUssUUFBUSxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDN0UsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQzFDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3JFO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU07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QUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVoQyxJQUFJLENBQUMsQ0FBQztRQUNOLElBQUksS0FBWSxDQUFDO1FBRWpCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7WUFDeEIsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDcEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNUO2FBQU07WUFDSCxxQ0FBcUM7WUFDckMsS0FBSyxHQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFtQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNoRixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ1Q7UUFFRCxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUM5QixLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLENBQUMsRUFBRSxDQUFDO1NBQ1A7UUFFRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILFNBQVMsZUFBZSxDQUFDLFFBQWtCO0lBQ3ZDLE9BQU8sUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxVQUFVLENBQUMsQ0FBUztJQUN6QixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCIuL2NvbnN0cnVjdFwiO1xuXG4vKipcbiAqIElmIG9iamVjdHMgaGFzIGEgZnVuY3Rpb24gcHJvcGVydHkgYnkgdGhpcyBuYW1lLCB0aGV5IHdpbGwgYmUgY29uc2lkZXJlZCB0b2tlbnMsIGFuZCB0aGlzXG4gKiBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB0byByZXNvbHZlIHRoZSB2YWx1ZSBmb3IgdGhpcyBvYmplY3QuXG4gKi9cbmV4cG9ydCBjb25zdCBSRVNPTFZFX01FVEhPRCA9ICdyZXNvbHZlJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc3BlY2lhbCBvciBsYXppbHktZXZhbHVhdGVkIHZhbHVlLlxuICpcbiAqIENhbiBiZSB1c2VkIHRvIGRlbGF5IGV2YWx1YXRpb24gb2YgYSBjZXJ0YWluIHZhbHVlIGluIGNhc2UsIGZvciBleGFtcGxlLFxuICogdGhhdCBpdCByZXF1aXJlcyBzb21lIGNvbnRleHQgb3IgbGF0ZS1ib3VuZCBkYXRhLiBDYW4gYWxzbyBiZSB1c2VkIHRvXG4gKiBtYXJrIHZhbHVlcyB0aGF0IG5lZWQgc3BlY2lhbCBwcm9jZXNzaW5nIGF0IGRvY3VtZW50IHJlbmRlcmluZyB0aW1lLlxuICpcbiAqIFRva2VucyBjYW4gYmUgZW1iZWRkZWQgaW50byBzdHJpbmdzIHdoaWxlIHJldGFpbmluZyB0aGVpciBvcmlnaW5hbFxuICogc2VtYW50aWNzLlxuICovXG5leHBvcnQgY2xhc3MgVG9rZW4ge1xuICAgIHByaXZhdGUgdG9rZW5LZXk/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgdG9rZW4gdGhhdCByZXNvbHZlcyB0byBgdmFsdWVgLlxuICAgICAqXG4gICAgICogSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCB1cG9uIHJlc29sdXRpb24gYW5kXG4gICAgICogdGhlIHZhbHVlIGl0IHJldHVybnMgd2lsbCBiZSB1c2VkIGFzIHRoZSB0b2tlbidzIHZhbHVlLlxuICAgICAqXG4gICAgICogZGlzcGxheU5hbWUgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIFRva2VuIHdoZW4gaXQncyBlbWJlZGRlZCBpbnRvIGEgc3RyaW5nOyBpdFxuICAgICAqIHdpbGwgbG9vayBzb21ldGhpbmcgbGlrZSB0aGlzOlxuICAgICAqXG4gICAgICogICAgICBcImVtYmVkZGVkIGluIGEgbGFyZ2VyIHN0cmluZyBpcyAke1Rva2VuW0RJU1BMQVlfTkFNRS4xMjNdfVwiXG4gICAgICpcbiAgICAgKiBUaGlzIHZhbHVlIGlzIHVzZWQgYXMgYSBoaW50IHRvIGh1bWFucyB3aGF0IHRoZSBtZWFuaW5nIG9mIHRoZSBUb2tlbiBpcyxcbiAgICAgKiBhbmQgZG9lcyBub3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBldmFsdWF0aW9uLlxuICAgICAqXG4gICAgICogTXVzdCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGFuZCBzaW1wbGUgc2VwYXJhdG9yIGNoYXJhY3RlcnMgKF8uOi0pLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlT3JGdW5jdGlvbiBXaGF0IHRoaXMgdG9rZW4gd2lsbCBldmFsdWF0ZSB0bywgbGl0ZXJhbCBvciBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0gZGlzcGxheU5hbWUgQSBodW1hbi1yZWFkYWJsZSBkaXNwbGF5IGhpbnQgZm9yIHRoaXMgVG9rZW5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHZhbHVlT3JGdW5jdGlvbj86IGFueSwgcHJpdmF0ZSByZWFkb25seSBkaXNwbGF5TmFtZT86IHN0cmluZykge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCB2YWx1ZSBmb3IgdGhpcyB0b2tlbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVzb2x2ZSgpOiBhbnkge1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnZhbHVlT3JGdW5jdGlvbjtcbiAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSByZXZlcnNpYmxlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHRva2VuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgVG9rZW4gaXMgaW5pdGlhbGl6ZWQgd2l0aCBhIGxpdGVyYWwsIHRoZSBzdHJpbmdpZmllZCB2YWx1ZSBvZiB0aGVcbiAgICAgKiBsaXRlcmFsIGlzIHJldHVybmVkLiBPdGhlcndpc2UsIGEgc3BlY2lhbCBxdW90ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAgICogb2YgdGhlIFRva2VuIGlzIHJldHVybmVkIHRoYXQgY2FuIGJlIGVtYmVkZGVkIGludG8gb3RoZXIgc3RyaW5ncy5cbiAgICAgKlxuICAgICAqIFN0cmluZ3Mgd2l0aCBxdW90ZWQgVG9rZW5zIGluIHRoZW0gY2FuIGJlIHJlc3RvcmVkIGJhY2sgaW50b1xuICAgICAqIGNvbXBsZXggdmFsdWVzIHdpdGggdGhlIFRva2VucyByZXN0b3JlZCBieSBjYWxsaW5nIGByZXNvbHZlKClgXG4gICAgICogb24gdGhlIHN0cmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgdmFsdWVUeXBlID0gdHlwZW9mIHRoaXMudmFsdWVPckZ1bmN0aW9uO1xuICAgICAgICAvLyBPcHRpbWl6YXRpb246IGlmIHdlIGNhbiBpbW1lZGlhdGVseSByZXNvbHZlIHRoaXMsIGRvbid0IGJvdGhlclxuICAgICAgICAvLyByZWdpc3RlcmluZyBhIFRva2VuLlxuICAgICAgICBpZiAodmFsdWVUeXBlID09PSAnc3RyaW5nJyB8fCB2YWx1ZVR5cGUgPT09ICdudW1iZXInIHx8IHZhbHVlVHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9yRnVuY3Rpb24udG9TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRva2VuS2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5LZXkgPSBUT0tFTl9TVFJJTkdfTUFQLnJlZ2lzdGVyKHRoaXMsIHRoaXMuZGlzcGxheU5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuS2V5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFR1cm4gdGhpcyBUb2tlbiBpbnRvIEpTT05cbiAgICAgKlxuICAgICAqIFRoaXMgZ2V0cyBjYWxsZWQgYnkgSlNPTi5zdHJpbmdpZnkoKS4gV2Ugd2FudCB0byBwcm9oaWJpdCB0aGlzLCBiZWNhdXNlXG4gICAgICogaXQncyBub3QgcG9zc2libGUgdG8gZG8gdGhpcyBwcm9wZXJseSwgc28gd2UganVzdCB0aHJvdyBhbiBlcnJvciBoZXJlLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b0pTT04oKTogYW55IHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0pTT04uc3RyaW5naWZ5KCkgY2Fubm90IGJlIGFwcGxpZWQgdG8gc3RydWN0dXJlIHdpdGggYSBUb2tlbiBpbiBpdC4gVXNlIGEgZG9jdW1lbnQtc3BlY2lmaWMgc3RyaW5naWZpY2F0aW9uIG1ldGhvZCBpbnN0ZWFkLicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGNvbmNhdGVkIHZlcnNpb24gb2YgdGhpcyBUb2tlbiBpbiBhIHN0cmluZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNvbWJpbmVzIHN0cmluZ3MsIGJ1dCBzcGVjaWFsaXplZFxuICAgICAqIGltcGxlbWVudHMgb2YgVG9rZW4gY2FuIHJldHVybiBhIG1vcmUgYXBwcm9wcmlhdGUgdmFsdWUuXG4gICAgICovXG4gICAgcHVibGljIGNvbmNhdChsZWZ0OiBhbnkgfCB1bmRlZmluZWQsIHJpZ2h0OiBhbnkgfCB1bmRlZmluZWQpOiBUb2tlbiB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gW2xlZnQsIHJlc29sdmUodGhpcyksIHJpZ2h0XS5maWx0ZXIoeCA9PiB4ICE9PSB1bmRlZmluZWQpO1xuICAgICAgICByZXR1cm4gbmV3IFRva2VuKHBhcnRzLm1hcCh4ID0+IGAke3h9YCkuam9pbignJykpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgb2JqIGlzIGEgdG9rZW4gKGkuZS4gaGFzIHRoZSByZXNvbHZlKCkgbWV0aG9kKVxuICogQHBhcmFtIG9iaiBUaGUgb2JqZWN0IHRvIHRlc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Rva2VuKG9iajogYW55KTogb2JqIGlzIFRva2VuIHtcbiAgICByZXR1cm4gdHlwZW9mKG9ialtSRVNPTFZFX01FVEhPRF0pID09PSAnZnVuY3Rpb24nO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGFuIG9iamVjdCBieSBldmFsdWF0aW5nIGFsbCB0b2tlbnMgYW5kIHJlbW92aW5nIGFueSB1bmRlZmluZWQgb3IgZW1wdHkgb2JqZWN0cyBvciBhcnJheXMuXG4gKiBWYWx1ZXMgY2FuIG9ubHkgYmUgcHJpbWl0aXZlcywgYXJyYXlzIG9yIHRva2Vucy4gT3RoZXIgb2JqZWN0cyAoaS5lLiB3aXRoIG1ldGhvZHMpIHdpbGwgYmUgcmVqZWN0ZWQuXG4gKlxuICogQHBhcmFtIG9iaiBUaGUgb2JqZWN0IHRvIHJlc29sdmUuXG4gKiBAcGFyYW0gcHJlZml4IFByZWZpeCBrZXkgcGF0aCBjb21wb25lbnRzIGZvciBkaWFnbm9zdGljcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmUob2JqOiBhbnksIHByZWZpeD86IHN0cmluZ1tdKTogYW55IHtcbiAgICBjb25zdCBwYXRoID0gcHJlZml4IHx8IFsgXTtcbiAgICBjb25zdCBwYXRoTmFtZSA9ICcvJyArIHBhdGguam9pbignLycpO1xuXG4gICAgLy8gcHJvdGVjdCBhZ2FpbnN0IGN5Y2xpYyByZWZlcmVuY2VzIGJ5IGxpbWl0aW5nIGRlcHRoLlxuICAgIGlmIChwYXRoLmxlbmd0aCA+IDIwMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byByZXNvbHZlIG9iamVjdCB0cmVlIHdpdGggY2lyY3VsYXIgcmVmZXJlbmNlLiBQYXRoOiAnICsgcGF0aE5hbWUpO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gdW5kZWZpbmVkXG4gICAgLy9cblxuICAgIGlmICh0eXBlb2Yob2JqKSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIG51bGxcbiAgICAvL1xuXG4gICAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIGZ1bmN0aW9ucyAtIG5vdCBzdXBwb3J0ZWQgKG9ubHkgdG9rZW5zIGFyZSBzdXBwb3J0ZWQpXG4gICAgLy9cblxuICAgIGlmICh0eXBlb2Yob2JqKSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byByZXNvbHZlIGEgbm9uLWRhdGEgb2JqZWN0LiBPbmx5IHRva2VuIGFyZSBzdXBwb3J0ZWQgZm9yIGxhenkgZXZhbHVhdGlvbi4gUGF0aDogJHtwYXRoTmFtZX0uIE9iamVjdDogJHtvYmp9YCk7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBzdHJpbmcgLSBwb3RlbnRpYWxseSByZXBsYWNlIGFsbCBzdHJpbmdpZmllZCBUb2tlbnNcbiAgICAvL1xuICAgIGlmICh0eXBlb2Yob2JqKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIFRPS0VOX1NUUklOR19NQVAucmVzb2x2ZU1hcmtlcnMob2JqIGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBwcmltaXRpdmVzIC0gYXMtaXNcbiAgICAvL1xuXG4gICAgaWYgKHR5cGVvZihvYmopICE9PSAnb2JqZWN0JyB8fCBvYmogaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyB0b2tlbnMgLSBpbnZva2UgJ3Jlc29sdmUnIGFuZCBjb250aW51ZSB0byByZXNvbHZlIHJlY3Vyc2l2ZWx5XG4gICAgLy9cblxuICAgIGlmIChpc1Rva2VuKG9iaikpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBvYmpbUkVTT0xWRV9NRVRIT0RdKCk7XG4gICAgICAgIHJldHVybiByZXNvbHZlKHZhbHVlLCBwYXRoKTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIGFycmF5cyAtIHJlc29sdmUgYWxsIHZhbHVlcywgcmVtb3ZlIHVuZGVmaW5lZCBhbmQgcmVtb3ZlIGVtcHR5IGFycmF5c1xuICAgIC8vXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IG9ialxuICAgICAgICAgICAgLm1hcCgoeCwgaSkgPT4gcmVzb2x2ZSh4LCBwYXRoLmNvbmNhdChpLnRvU3RyaW5nKCkpKSlcbiAgICAgICAgICAgIC5maWx0ZXIoeCA9PiB0eXBlb2YoeCkgIT09ICd1bmRlZmluZWQnKTtcblxuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gb2JqZWN0cyAtIGRlZXAtcmVzb2x2ZSBhbGwgdmFsdWVzXG4gICAgLy9cblxuICAgIC8vIE11c3Qgbm90IGJlIGEgQ29uc3RydWN0IGF0IHRoaXMgcG9pbnQsIG90aGVyd2lzZSB5b3UgcHJvYmFibHkgbWFkZSBhIHR5cGVcbiAgICAvLyBtaXN0YWtlIHNvbWV3aGVyZSBhbmQgcmVzb2x2ZSB3aWxsIGdldCBpbnRvIGFuIGluZmluaXRlIGxvb3AgcmVjdXJzaW5nIGludG9cbiAgICAvLyBjaGlsZC5wYXJlbnQgPC0tLT4gcGFyZW50LmNoaWxkcmVuXG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIENvbnN0cnVjdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyeWluZyB0byByZXNvbHZlKCkgYSBDb25zdHJ1Y3QgYXQgJyArIHBhdGhOYW1lKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHsgfTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmVzb2x2ZShvYmpba2V5XSwgcGF0aC5jb25jYXQoa2V5KSk7XG5cbiAgICAgICAgLy8gc2tpcCB1bmRlZmluZWRcbiAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDZW50cmFsIHBsYWNlIHdoZXJlIHdlIGtlZXAgYSBtYXBwaW5nIGZyb20gVG9rZW5zIHRvIHRoZWlyIFN0cmluZyByZXByZXNlbnRhdGlvblxuICpcbiAqIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgdXNlZCB0byBlbWJlZCB0b2tlbiBpbnRvIHN0cmluZ3MsXG4gKiBhbmQgc3RvcmVkIHRvIGJlIGFibGUgdG9cbiAqXG4gKiBBbGwgaW5zdGFuY2VzIG9mIFRva2VuU3RyaW5nTWFwIHNoYXJlIHRoZSBzYW1lIHN0b3JhZ2UsIHNvIHRoYXQgdGhpcyBwcm9jZXNzXG4gKiB3b3JrcyBldmVuIHdoZW4gZGlmZmVyZW50IGNvcGllcyBvZiB0aGUgbGlicmFyeSBhcmUgbG9hZGVkLlxuICovXG5jbGFzcyBUb2tlblN0cmluZ01hcCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0b2tlbk1hcDoge1trZXk6IHN0cmluZ106IFRva2VufTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb25zdCBnbG9iID0gZ2xvYmFsIGFzIGFueTtcbiAgICAgICAgdGhpcy50b2tlbk1hcCA9IGdsb2IuX19jZGtUb2tlbk1hcCA9IGdsb2IuX19jZGtUb2tlbk1hcCB8fCB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0aW5nIGEgdW5pcXVlIHN0cmluZyBmb3IgdGhpcyBUb2tlbiwgcmV0dXJuaW5nIGEga2V5XG4gICAgICpcbiAgICAgKiBFdmVyeSBjYWxsIGZvciB0aGUgc2FtZSBUb2tlbiB3aWxsIHByb2R1Y2UgYSBuZXcgdW5pcXVlIHN0cmluZywgbm9cbiAgICAgKiBhdHRlbXB0IGlzIG1hZGUgdG8gZGVkdXBsaWNhdGUuIFRva2VuIG9iamVjdHMgc2hvdWxkIGNhY2hlIHRoZVxuICAgICAqIHZhbHVlIHRoZW1zZWx2ZXMsIGlmIHJlcXVpcmVkLlxuICAgICAqXG4gICAgICogVGhlIHRva2VuIGNhbiBjaG9vc2UgKHBhcnQgb2YpIGl0cyBvd24gcmVwcmVzZW50YXRpb24gc3RyaW5nIHdpdGggYVxuICAgICAqIGhpbnQuIFRoaXMgbWF5IGJlIHVzZWQgdG8gcHJvZHVjZSBhZXN0aGV0aWNhbGx5IHBsZWFzaW5nIGFuZFxuICAgICAqIHJlY29nbml6YWJsZSB0b2tlbiByZXByZXNlbnRhdGlvbnMgZm9yIGh1bWFucy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXIodG9rZW46IFRva2VuLCByZXByZXNlbnRhdGlvbkhpbnQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBjb3VudGVyID0gT2JqZWN0LmtleXModGhpcy50b2tlbk1hcCkubGVuZ3RoO1xuICAgICAgICBjb25zdCByZXByZXNlbnRhdGlvbiA9IHJlcHJlc2VudGF0aW9uSGludCB8fCBgVE9LRU5gO1xuXG4gICAgICAgIGNvbnN0IGtleSA9IGAke3JlcHJlc2VudGF0aW9ufS4ke2NvdW50ZXJ9YDtcbiAgICAgICAgaWYgKG5ldyBSZWdFeHAoYFteJHtWQUxJRF9LRVlfQ0hBUlN9XWApLmV4ZWMoa2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdG9rZW4gcmVwcmVzZW50YXRpb246ICR7a2V5fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b2tlbk1hcFtrZXldID0gdG9rZW47XG4gICAgICAgIHJldHVybiBgJHtCRUdJTl9UT0tFTl9NQVJLRVJ9JHtrZXl9JHtFTkRfVE9LRU5fTUFSS0VSfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwbGFjZSBhbnkgVG9rZW4gbWFya2VycyBpbiB0aGlzIHN0cmluZyB3aXRoIHRoZWlyIHJlc29sdmVkIHZhbHVlc1xuICAgICAqL1xuICAgIHB1YmxpYyByZXNvbHZlTWFya2VycyhzOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBjb25zdCBzdHIgPSBuZXcgVG9rZW5TdHJpbmcocywgQkVHSU5fVE9LRU5fTUFSS0VSLCBgWyR7VkFMSURfS0VZX0NIQVJTfV0rYCwgRU5EX1RPS0VOX01BUktFUik7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50cyA9IHN0ci5zcGxpdCh0aGlzLmxvb2t1cFRva2VuLmJpbmQodGhpcykpO1xuICAgICAgICByZXR1cm4gZnJhZ21lbnRzLmpvaW4oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIGEgVG9rZW4gYnkga2V5XG4gICAgICovXG4gICAgcHVibGljIGxvb2t1cFRva2VuKGtleTogc3RyaW5nKTogVG9rZW4ge1xuICAgICAgICBpZiAoIShrZXkgaW4gdGhpcy50b2tlbk1hcCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIHRva2VuIGtleTogJHtrZXl9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy50b2tlbk1hcFtrZXldO1xuICAgIH1cbn1cblxuY29uc3QgQkVHSU5fVE9LRU5fTUFSS0VSID0gJyR7VG9rZW5bJztcbmNvbnN0IEVORF9UT0tFTl9NQVJLRVIgPSAnXX0nO1xuY29uc3QgVkFMSURfS0VZX0NIQVJTID0gJ2EtekEtWjAtOTouXy0nO1xuXG4vKipcbiAqIFNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgdG9rZW4gc3RyaW5nIG1hcFxuICovXG5jb25zdCBUT0tFTl9TVFJJTkdfTUFQID0gbmV3IFRva2VuU3RyaW5nTWFwKCk7XG5cbi8qKlxuICogSW50ZXJmYWNlIHRoYXQgVG9rZW4gam9pbmVycyBpbXBsZW1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVG9rZW5Kb2luZXIge1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBqb2luZXIuXG4gICAgICpcbiAgICAgKiBNdXN0IGJlIHVuaXF1ZSBwZXIgam9pbmVyOiB0aGlzIHZhbHVlIHdpbGwgYmUgdXNlZCB0byBhc3NlcnQgdGhhdCB0aGVyZVxuICAgICAqIGlzIGV4YWN0bHkgb25seSB0eXBlIG9mIGpvaW5lciBpbiBhIGpvaW4gb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGlkOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGxhbmd1YWdlIGludHJpbnNpYyB0aGF0IHdpbGwgY29tYmluZSB0aGUgc3RyaW5ncyBpbiB0aGUgZ2l2ZW4gZW5naW5lXG4gICAgICovXG4gICAgam9pbihmcmFnbWVudHM6IGFueVtdKTogYW55O1xufVxuXG4vKipcbiAqIEEgc3RyaW5nIHdpdGggbWFya2VycyBpbiBpdCB0aGF0IGNhbiBiZSByZXNvbHZlZCB0byBleHRlcm5hbCB2YWx1ZXNcbiAqL1xuY2xhc3MgVG9rZW5TdHJpbmcge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN0cjogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGJlZ2luTWFya2VyOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaWRQYXR0ZXJuOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZW5kTWFya2VyOiBzdHJpbmcpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTcGxpdCBzdHJpbmcgb24gbWFya2Vycywgc3Vic3RpdHV0aW5nIG1hcmtlcnMgd2l0aCBUb2tlbnNcbiAgICAgKi9cbiAgICBwdWJsaWMgc3BsaXQobG9va3VwOiAoaWQ6IHN0cmluZykgPT4gVG9rZW4pOiBUb2tlblN0cmluZ0ZyYWdtZW50cyB7XG4gICAgICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgJHtyZWdleFF1b3RlKHRoaXMuYmVnaW5NYXJrZXIpfSgke3RoaXMuaWRQYXR0ZXJufSkke3JlZ2V4UXVvdGUodGhpcy5lbmRNYXJrZXIpfWAsICdnJyk7XG4gICAgICAgIGNvbnN0IHJldCA9IG5ldyBUb2tlblN0cmluZ0ZyYWdtZW50cygpO1xuXG4gICAgICAgIGxldCByZXN0ID0gMDtcbiAgICAgICAgbGV0IG0gPSByZS5leGVjKHRoaXMuc3RyKTtcbiAgICAgICAgd2hpbGUgKG0pIHtcbiAgICAgICAgICAgIGlmIChtLmluZGV4ID4gcmVzdCkge1xuICAgICAgICAgICAgICAgIHJldC5hZGRTdHJpbmcodGhpcy5zdHIuc3Vic3RyaW5nKHJlc3QsIG0uaW5kZXgpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0LmFkZFRva2VuKGxvb2t1cChtWzFdKSk7XG5cbiAgICAgICAgICAgIHJlc3QgPSByZS5sYXN0SW5kZXg7XG4gICAgICAgICAgICBtID0gcmUuZXhlYyh0aGlzLnN0cik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdCA8IHRoaXMuc3RyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0LmFkZFN0cmluZyh0aGlzLnN0ci5zdWJzdHJpbmcocmVzdCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIHRoZSBzcGxpdCBvZiBhIHN0cmluZyB3aXRoIFRva2Vuc1xuICpcbiAqIEVpdGhlciBhIGxpdGVyYWwgcGFydCBvZiB0aGUgc3RyaW5nLCBvciBhbiB1bnJlc29sdmVkIFRva2VuLlxuICovXG50eXBlIFN0cmluZ0ZyYWdtZW50ID0geyB0eXBlOiAnc3RyaW5nJzsgc3RyOiBzdHJpbmcgfTtcbnR5cGUgVG9rZW5GcmFnbWVudCA9IHsgdHlwZTogJ3Rva2VuJzsgdG9rZW46IFRva2VuIH07XG50eXBlIEZyYWdtZW50ID0gIFN0cmluZ0ZyYWdtZW50IHwgVG9rZW5GcmFnbWVudDtcblxuLyoqXG4gKiBGcmFnbWVudHMgb2YgYSBzdHJpbmcgd2l0aCBtYXJrZXJzXG4gKi9cbmNsYXNzIFRva2VuU3RyaW5nRnJhZ21lbnRzIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZyYWdtZW50cyA9IG5ldyBBcnJheTxGcmFnbWVudD4oKTtcblxuICAgIHB1YmxpYyB2YWx1ZXMoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5mcmFnbWVudHMubWFwKGYgPT4gZi50eXBlID09PSAndG9rZW4nID8gcmVzb2x2ZShmLnRva2VuKSA6IGYuc3RyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkU3RyaW5nKHN0cjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZnJhZ21lbnRzLnB1c2goeyB0eXBlOiAnc3RyaW5nJywgc3RyIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRUb2tlbih0b2tlbjogVG9rZW4pIHtcbiAgICAgICAgdGhpcy5mcmFnbWVudHMucHVzaCh7IHR5cGU6ICd0b2tlbicsIHRva2VuIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbWJpbmUgdGhlIHJlc29sdmVkIHN0cmluZyBmcmFnbWVudHMgdXNpbmcgdGhlIFRva2VucyB0byBqb2luLlxuICAgICAqXG4gICAgICogUmVzb2x2ZXMgdGhlIHJlc3VsdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgam9pbigpOiBhbnkge1xuICAgICAgICBpZiAodGhpcy5mcmFnbWVudHMubGVuZ3RoID09PSAwKSB7IHJldHVybiAnJzsgfVxuICAgICAgICBpZiAodGhpcy5mcmFnbWVudHMubGVuZ3RoID09PSAxKSB7IHJldHVybiByZXNvbHZlRnJhZ21lbnQodGhpcy5mcmFnbWVudHNbMF0pOyB9XG5cbiAgICAgICAgY29uc3QgZmlyc3QgPSB0aGlzLmZyYWdtZW50c1swXTtcblxuICAgICAgICBsZXQgaTtcbiAgICAgICAgbGV0IHRva2VuOiBUb2tlbjtcblxuICAgICAgICBpZiAoZmlyc3QudHlwZSA9PT0gJ3Rva2VuJykge1xuICAgICAgICAgICAgdG9rZW4gPSBmaXJzdC50b2tlbjtcbiAgICAgICAgICAgIGkgPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gV2UgbmV2ZXIgaGF2ZSB0d28gc3RyaW5ncyBpbiBhIHJvd1xuICAgICAgICAgICAgdG9rZW4gPSAodGhpcy5mcmFnbWVudHNbMV0gYXMgVG9rZW5GcmFnbWVudCkudG9rZW4uY29uY2F0KGZpcnN0LnN0ciwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIGkgPSAyO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKGkgPCB0aGlzLmZyYWdtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRva2VuID0gdG9rZW4uY29uY2F0KHVuZGVmaW5lZCwgcmVzb2x2ZUZyYWdtZW50KHRoaXMuZnJhZ21lbnRzW2ldKSk7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzb2x2ZSh0b2tlbik7XG4gICAgfVxufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIHZhbHVlIGZyb20gYSBzaW5nbGUgZnJhZ21lbnRcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUZyYWdtZW50KGZyYWdtZW50OiBGcmFnbWVudCk6IGFueSB7XG4gICAgcmV0dXJuIGZyYWdtZW50LnR5cGUgPT09ICdzdHJpbmcnID8gZnJhZ21lbnQuc3RyIDogcmVzb2x2ZShmcmFnbWVudC50b2tlbik7XG59XG5cbi8qKlxuICogUXVvdGUgYSBzdHJpbmcgZm9yIHVzZSBpbiBhIHJlZ2V4XG4gKi9cbmZ1bmN0aW9uIHJlZ2V4UXVvdGUoczogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHMucmVwbGFjZSgvWy4/KiteJFtcXF1cXFxcKCl7fXwtXS9nLCBcIlxcXFwkJlwiKTtcbn0iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidG9rZW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMkNBQXdDO0FBRXhDOzs7R0FHRztBQUNVLFFBQUEsY0FBYyxHQUFHLFNBQVMsQ0FBQztBQUV4Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLEtBQUs7SUFHZDs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba0JHO0lBQ0gsWUFBNkIsZUFBcUIsRUFBbUIsV0FBb0I7UUFBNUQsb0JBQWUsR0FBZixlQUFlLENBQU07UUFBbUIsZ0JBQVcsR0FBWCxXQUFXLENBQVM7SUFDekYsQ0FBQztJQUVEOztPQUVHO0lBQ0ksT0FBTztRQUNWLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDakMsSUFBSSxPQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssVUFBVSxFQUFFO1lBQzlCLEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBQztTQUNuQjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksUUFBUTtRQUNYLE1BQU0sU0FBUyxHQUFHLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM5QyxpRUFBaUU7UUFDakUsdUJBQXVCO1FBQ3ZCLElBQUksU0FBUyxLQUFLLFFBQVEsSUFBSSxTQUFTLEtBQUssUUFBUSxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDN0UsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQzFDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3JFO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU07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QVMsQ0FBQyxDQUFDO1lBQ2hGLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDVDtRQUVELE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQzlCLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsQ0FBQyxFQUFFLENBQUM7U0FDUDtRQUVELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7Q0FDSjtBQUVEOztHQUVHO0FBQ0gsU0FBUyxlQUFlLENBQUMsUUFBa0I7SUFDdkMsT0FBTyxRQUFRLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLFVBQVUsQ0FBQyxDQUFTO0lBQ3pCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcIi4vY29uc3RydWN0XCI7XG5cbi8qKlxuICogSWYgb2JqZWN0cyBoYXMgYSBmdW5jdGlvbiBwcm9wZXJ0eSBieSB0aGlzIG5hbWUsIHRoZXkgd2lsbCBiZSBjb25zaWRlcmVkIHRva2VucywgYW5kIHRoaXNcbiAqIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHRvIHJlc29sdmUgdGhlIHZhbHVlIGZvciB0aGlzIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFJFU09MVkVfTUVUSE9EID0gJ3Jlc29sdmUnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBzcGVjaWFsIG9yIGxhemlseS1ldmFsdWF0ZWQgdmFsdWUuXG4gKlxuICogQ2FuIGJlIHVzZWQgdG8gZGVsYXkgZXZhbHVhdGlvbiBvZiBhIGNlcnRhaW4gdmFsdWUgaW4gY2FzZSwgZm9yIGV4YW1wbGUsXG4gKiB0aGF0IGl0IHJlcXVpcmVzIHNvbWUgY29udGV4dCBvciBsYXRlLWJvdW5kIGRhdGEuIENhbiBhbHNvIGJlIHVzZWQgdG9cbiAqIG1hcmsgdmFsdWVzIHRoYXQgbmVlZCBzcGVjaWFsIHByb2Nlc3NpbmcgYXQgZG9jdW1lbnQgcmVuZGVyaW5nIHRpbWUuXG4gKlxuICogVG9rZW5zIGNhbiBiZSBlbWJlZGRlZCBpbnRvIHN0cmluZ3Mgd2hpbGUgcmV0YWluaW5nIHRoZWlyIG9yaWdpbmFsXG4gKiBzZW1hbnRpY3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBUb2tlbiB7XG4gICAgcHJpdmF0ZSB0b2tlbktleT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB0b2tlbiB0aGF0IHJlc29sdmVzIHRvIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIHVwb24gcmVzb2x1dGlvbiBhbmRcbiAgICAgKiB0aGUgdmFsdWUgaXQgcmV0dXJucyB3aWxsIGJlIHVzZWQgYXMgdGhlIHRva2VuJ3MgdmFsdWUuXG4gICAgICpcbiAgICAgKiBkaXNwbGF5TmFtZSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgVG9rZW4gd2hlbiBpdCdzIGVtYmVkZGVkIGludG8gYSBzdHJpbmc7IGl0XG4gICAgICogd2lsbCBsb29rIHNvbWV0aGluZyBsaWtlIHRoaXM6XG4gICAgICpcbiAgICAgKiAgICAgIFwiZW1iZWRkZWQgaW4gYSBsYXJnZXIgc3RyaW5nIGlzICR7VG9rZW5bRElTUExBWV9OQU1FLjEyM119XCJcbiAgICAgKlxuICAgICAqIFRoaXMgdmFsdWUgaXMgdXNlZCBhcyBhIGhpbnQgdG8gaHVtYW5zIHdoYXQgdGhlIG1lYW5pbmcgb2YgdGhlIFRva2VuIGlzLFxuICAgICAqIGFuZCBkb2VzIG5vdCBoYXZlIGFueSBlZmZlY3Qgb24gdGhlIGV2YWx1YXRpb24uXG4gICAgICpcbiAgICAgKiBNdXN0IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgYW5kIHNpbXBsZSBzZXBhcmF0b3IgY2hhcmFjdGVycyAoXy46LSkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWVPckZ1bmN0aW9uIFdoYXQgdGhpcyB0b2tlbiB3aWxsIGV2YWx1YXRlIHRvLCBsaXRlcmFsIG9yIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSBkaXNwbGF5TmFtZSBBIGh1bWFuLXJlYWRhYmxlIGRpc3BsYXkgaGludCBmb3IgdGhpcyBUb2tlblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdmFsdWVPckZ1bmN0aW9uPzogYW55LCBwcml2YXRlIHJlYWRvbmx5IGRpc3BsYXlOYW1lPzogc3RyaW5nKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIHJlc29sdmVkIHZhbHVlIGZvciB0aGlzIHRva2VuLlxuICAgICAqL1xuICAgIHB1YmxpYyByZXNvbHZlKCk6IGFueSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMudmFsdWVPckZ1bmN0aW9uO1xuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIHJldmVyc2libGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdG9rZW5cbiAgICAgKlxuICAgICAqIElmIHRoZSBUb2tlbiBpcyBpbml0aWFsaXplZCB3aXRoIGEgbGl0ZXJhbCwgdGhlIHN0cmluZ2lmaWVkIHZhbHVlIG9mIHRoZVxuICAgICAqIGxpdGVyYWwgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSwgYSBzcGVjaWFsIHF1b3RlZCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICAgKiBvZiB0aGUgVG9rZW4gaXMgcmV0dXJuZWQgdGhhdCBjYW4gYmUgZW1iZWRkZWQgaW50byBvdGhlciBzdHJpbmdzLlxuICAgICAqXG4gICAgICogU3RyaW5ncyB3aXRoIHF1b3RlZCBUb2tlbnMgaW4gdGhlbSBjYW4gYmUgcmVzdG9yZWQgYmFjayBpbnRvXG4gICAgICogY29tcGxleCB2YWx1ZXMgd2l0aCB0aGUgVG9rZW5zIHJlc3RvcmVkIGJ5IGNhbGxpbmcgYHJlc29sdmUoKWBcbiAgICAgKiBvbiB0aGUgc3RyaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB2YWx1ZVR5cGUgPSB0eXBlb2YgdGhpcy52YWx1ZU9yRnVuY3Rpb247XG4gICAgICAgIC8vIE9wdGltaXphdGlvbjogaWYgd2UgY2FuIGltbWVkaWF0ZWx5IHJlc29sdmUgdGhpcywgZG9uJ3QgYm90aGVyXG4gICAgICAgIC8vIHJlZ2lzdGVyaW5nIGEgVG9rZW4uXG4gICAgICAgIGlmICh2YWx1ZVR5cGUgPT09ICdzdHJpbmcnIHx8IHZhbHVlVHlwZSA9PT0gJ251bWJlcicgfHwgdmFsdWVUeXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT3JGdW5jdGlvbi50b1N0cmluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudG9rZW5LZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy50b2tlbktleSA9IFRPS0VOX1NUUklOR19NQVAucmVnaXN0ZXIodGhpcywgdGhpcy5kaXNwbGF5TmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5LZXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHVybiB0aGlzIFRva2VuIGludG8gSlNPTlxuICAgICAqXG4gICAgICogVGhpcyBnZXRzIGNhbGxlZCBieSBKU09OLnN0cmluZ2lmeSgpLiBXZSB3YW50IHRvIHByb2hpYml0IHRoaXMsIGJlY2F1c2VcbiAgICAgKiBpdCdzIG5vdCBwb3NzaWJsZSB0byBkbyB0aGlzIHByb3Blcmx5LCBzbyB3ZSBqdXN0IHRocm93IGFuIGVycm9yIGhlcmUuXG4gICAgICovXG4gICAgcHVibGljIHRvSlNPTigpOiBhbnkge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSlNPTi5zdHJpbmdpZnkoKSBjYW5ub3QgYmUgYXBwbGllZCB0byBzdHJ1Y3R1cmUgd2l0aCBhIFRva2VuIGluIGl0LiBVc2UgYSBkb2N1bWVudC1zcGVjaWZpYyBzdHJpbmdpZmljYXRpb24gbWV0aG9kIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgY29uY2F0ZWQgdmVyc2lvbiBvZiB0aGlzIFRva2VuIGluIGEgc3RyaW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgY29tYmluZXMgc3RyaW5ncywgYnV0IHNwZWNpYWxpemVkXG4gICAgICogaW1wbGVtZW50cyBvZiBUb2tlbiBjYW4gcmV0dXJuIGEgbW9yZSBhcHByb3ByaWF0ZSB2YWx1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uY2F0KGxlZnQ6IGFueSB8IHVuZGVmaW5lZCwgcmlnaHQ6IGFueSB8IHVuZGVmaW5lZCk6IFRva2VuIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSBbbGVmdCwgcmVzb2x2ZSh0aGlzKSwgcmlnaHRdLmZpbHRlcih4ID0+IHggIT09IHVuZGVmaW5lZCk7XG4gICAgICAgIHJldHVybiBuZXcgVG9rZW4ocGFydHMubWFwKHggPT4gYCR7eH1gKS5qb2luKCcnKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBvYmogaXMgYSB0b2tlbiAoaS5lLiBoYXMgdGhlIHJlc29sdmUoKSBtZXRob2Qgb3IgaXMgYSBzdHJpbmdcbiAqIHRoYXQgaW5jbHVkZXMgdG9rZW4gbWFya2VycykuXG4gKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QgdG8gdGVzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVucmVzb2x2ZWQob2JqOiBhbnkpOiBvYmogaXMgVG9rZW4ge1xuICAgIGlmICh0eXBlb2Yob2JqKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIFRPS0VOX1NUUklOR19NQVAuY3JlYXRlVG9rZW5TdHJpbmcob2JqKS50ZXN0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZihvYmpbUkVTT0xWRV9NRVRIT0RdKSA9PT0gJ2Z1bmN0aW9uJztcbiAgICB9XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYW4gb2JqZWN0IGJ5IGV2YWx1YXRpbmcgYWxsIHRva2VucyBhbmQgcmVtb3ZpbmcgYW55IHVuZGVmaW5lZCBvciBlbXB0eSBvYmplY3RzIG9yIGFycmF5cy5cbiAqIFZhbHVlcyBjYW4gb25seSBiZSBwcmltaXRpdmVzLCBhcnJheXMgb3IgdG9rZW5zLiBPdGhlciBvYmplY3RzIChpLmUuIHdpdGggbWV0aG9kcykgd2lsbCBiZSByZWplY3RlZC5cbiAqXG4gKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QgdG8gcmVzb2x2ZS5cbiAqIEBwYXJhbSBwcmVmaXggUHJlZml4IGtleSBwYXRoIGNvbXBvbmVudHMgZm9yIGRpYWdub3N0aWNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZShvYmo6IGFueSwgcHJlZml4Pzogc3RyaW5nW10pOiBhbnkge1xuICAgIGNvbnN0IHBhdGggPSBwcmVmaXggfHwgWyBdO1xuICAgIGNvbnN0IHBhdGhOYW1lID0gJy8nICsgcGF0aC5qb2luKCcvJyk7XG5cbiAgICAvLyBwcm90ZWN0IGFnYWluc3QgY3ljbGljIHJlZmVyZW5jZXMgYnkgbGltaXRpbmcgZGVwdGguXG4gICAgaWYgKHBhdGgubGVuZ3RoID4gMjAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHJlc29sdmUgb2JqZWN0IHRyZWUgd2l0aCBjaXJjdWxhciByZWZlcmVuY2UuIFBhdGg6ICcgKyBwYXRoTmFtZSk7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyB1bmRlZmluZWRcbiAgICAvL1xuXG4gICAgaWYgKHR5cGVvZihvYmopID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gbnVsbFxuICAgIC8vXG5cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gZnVuY3Rpb25zIC0gbm90IHN1cHBvcnRlZCAob25seSB0b2tlbnMgYXJlIHN1cHBvcnRlZClcbiAgICAvL1xuXG4gICAgaWYgKHR5cGVvZihvYmopID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVHJ5aW5nIHRvIHJlc29sdmUgYSBub24tZGF0YSBvYmplY3QuIE9ubHkgdG9rZW4gYXJlIHN1cHBvcnRlZCBmb3IgbGF6eSBldmFsdWF0aW9uLiBQYXRoOiAke3BhdGhOYW1lfS4gT2JqZWN0OiAke29ian1gKTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIHN0cmluZyAtIHBvdGVudGlhbGx5IHJlcGxhY2UgYWxsIHN0cmluZ2lmaWVkIFRva2Vuc1xuICAgIC8vXG4gICAgaWYgKHR5cGVvZihvYmopID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gVE9LRU5fU1RSSU5HX01BUC5yZXNvbHZlTWFya2VycyhvYmogYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIHByaW1pdGl2ZXMgLSBhcy1pc1xuICAgIC8vXG5cbiAgICBpZiAodHlwZW9mKG9iaikgIT09ICdvYmplY3QnIHx8IG9iaiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIHRva2VucyAtIGludm9rZSAncmVzb2x2ZScgYW5kIGNvbnRpbnVlIHRvIHJlc29sdmUgcmVjdXJzaXZlbHlcbiAgICAvL1xuXG4gICAgaWYgKHVucmVzb2x2ZWQob2JqKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtSRVNPTFZFX01FVEhPRF0oKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUodmFsdWUsIHBhdGgpO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gYXJyYXlzIC0gcmVzb2x2ZSBhbGwgdmFsdWVzLCByZW1vdmUgdW5kZWZpbmVkIGFuZCByZW1vdmUgZW1wdHkgYXJyYXlzXG4gICAgLy9cblxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgY29uc3QgYXJyID0gb2JqXG4gICAgICAgICAgICAubWFwKCh4LCBpKSA9PiByZXNvbHZlKHgsIHBhdGguY29uY2F0KGkudG9TdHJpbmcoKSkpKVxuICAgICAgICAgICAgLmZpbHRlcih4ID0+IHR5cGVvZih4KSAhPT0gJ3VuZGVmaW5lZCcpO1xuXG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBvYmplY3RzIC0gZGVlcC1yZXNvbHZlIGFsbCB2YWx1ZXNcbiAgICAvL1xuXG4gICAgLy8gTXVzdCBub3QgYmUgYSBDb25zdHJ1Y3QgYXQgdGhpcyBwb2ludCwgb3RoZXJ3aXNlIHlvdSBwcm9iYWJseSBtYWRlIGEgdHlwZVxuICAgIC8vIG1pc3Rha2Ugc29tZXdoZXJlIGFuZCByZXNvbHZlIHdpbGwgZ2V0IGludG8gYW4gaW5maW5pdGUgbG9vcCByZWN1cnNpbmcgaW50b1xuICAgIC8vIGNoaWxkLnBhcmVudCA8LS0tPiBwYXJlbnQuY2hpbGRyZW5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgQ29uc3RydWN0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIHJlc29sdmUoKSBhIENvbnN0cnVjdCBhdCAnICsgcGF0aE5hbWUpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogYW55ID0geyB9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRLZXkgPSByZXNvbHZlKGtleSk7XG4gICAgICAgIGlmICh0eXBlb2YocmVzb2x2ZWRLZXkpICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUga2V5IFwiJHtrZXl9XCIgaGFzIGJlZW4gcmVzb2x2ZWQgdG8gJHtKU09OLnN0cmluZ2lmeShyZXNvbHZlZEtleSl9IGJ1dCBtdXN0IGJlIHJlc29sdmFibGUgdG8gYSBzdHJpbmdgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmVzb2x2ZShvYmpba2V5XSwgcGF0aC5jb25jYXQoa2V5KSk7XG5cbiAgICAgICAgLy8gc2tpcCB1bmRlZmluZWRcbiAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdFtyZXNvbHZlZEtleV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENlbnRyYWwgcGxhY2Ugd2hlcmUgd2Uga2VlcCBhIG1hcHBpbmcgZnJvbSBUb2tlbnMgdG8gdGhlaXIgU3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gKlxuICogVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBpcyB1c2VkIHRvIGVtYmVkIHRva2VuIGludG8gc3RyaW5ncyxcbiAqIGFuZCBzdG9yZWQgdG8gYmUgYWJsZSB0b1xuICpcbiAqIEFsbCBpbnN0YW5jZXMgb2YgVG9rZW5TdHJpbmdNYXAgc2hhcmUgdGhlIHNhbWUgc3RvcmFnZSwgc28gdGhhdCB0aGlzIHByb2Nlc3NcbiAqIHdvcmtzIGV2ZW4gd2hlbiBkaWZmZXJlbnQgY29waWVzIG9mIHRoZSBsaWJyYXJ5IGFyZSBsb2FkZWQuXG4gKi9cbmNsYXNzIFRva2VuU3RyaW5nTWFwIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRva2VuTWFwOiB7W2tleTogc3RyaW5nXTogVG9rZW59O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbnN0IGdsb2IgPSBnbG9iYWwgYXMgYW55O1xuICAgICAgICB0aGlzLnRva2VuTWFwID0gZ2xvYi5fX2Nka1Rva2VuTWFwID0gZ2xvYi5fX2Nka1Rva2VuTWFwIHx8IHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRpbmcgYSB1bmlxdWUgc3RyaW5nIGZvciB0aGlzIFRva2VuLCByZXR1cm5pbmcgYSBrZXlcbiAgICAgKlxuICAgICAqIEV2ZXJ5IGNhbGwgZm9yIHRoZSBzYW1lIFRva2VuIHdpbGwgcHJvZHVjZSBhIG5ldyB1bmlxdWUgc3RyaW5nLCBub1xuICAgICAqIGF0dGVtcHQgaXMgbWFkZSB0byBkZWR1cGxpY2F0ZS4gVG9rZW4gb2JqZWN0cyBzaG91bGQgY2FjaGUgdGhlXG4gICAgICogdmFsdWUgdGhlbXNlbHZlcywgaWYgcmVxdWlyZWQuXG4gICAgICpcbiAgICAgKiBUaGUgdG9rZW4gY2FuIGNob29zZSAocGFydCBvZikgaXRzIG93biByZXByZXNlbnRhdGlvbiBzdHJpbmcgd2l0aCBhXG4gICAgICogaGludC4gVGhpcyBtYXkgYmUgdXNlZCB0byBwcm9kdWNlIGFlc3RoZXRpY2FsbHkgcGxlYXNpbmcgYW5kXG4gICAgICogcmVjb2duaXphYmxlIHRva2VuIHJlcHJlc2VudGF0aW9ucyBmb3IgaHVtYW5zLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlcih0b2tlbjogVG9rZW4sIHJlcHJlc2VudGF0aW9uSGludD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGNvdW50ZXIgPSBPYmplY3Qua2V5cyh0aGlzLnRva2VuTWFwKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJlcHJlc2VudGF0aW9uID0gcmVwcmVzZW50YXRpb25IaW50IHx8IGBUT0tFTmA7XG5cbiAgICAgICAgY29uc3Qga2V5ID0gYCR7cmVwcmVzZW50YXRpb259LiR7Y291bnRlcn1gO1xuICAgICAgICBpZiAobmV3IFJlZ0V4cChgW14ke1ZBTElEX0tFWV9DSEFSU31dYCkuZXhlYyhrZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2hhcmFjdGVycyBpbiB0b2tlbiByZXByZXNlbnRhdGlvbjogJHtrZXl9YCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRva2VuTWFwW2tleV0gPSB0b2tlbjtcbiAgICAgICAgcmV0dXJuIGAke0JFR0lOX1RPS0VOX01BUktFUn0ke2tleX0ke0VORF9UT0tFTl9NQVJLRVJ9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgYFRva2VuU3RyaW5nYCBmb3IgdGhpcyBzdHJpbmcuXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZVRva2VuU3RyaW5nKHM6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IFRva2VuU3RyaW5nKHMsIEJFR0lOX1RPS0VOX01BUktFUiwgYFske1ZBTElEX0tFWV9DSEFSU31dK2AsIEVORF9UT0tFTl9NQVJLRVIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcGxhY2UgYW55IFRva2VuIG1hcmtlcnMgaW4gdGhpcyBzdHJpbmcgd2l0aCB0aGVpciByZXNvbHZlZCB2YWx1ZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVzb2x2ZU1hcmtlcnMoczogc3RyaW5nKTogYW55IHtcbiAgICAgICAgY29uc3Qgc3RyID0gdGhpcy5jcmVhdGVUb2tlblN0cmluZyhzKTtcbiAgICAgICAgY29uc3QgZnJhZ21lbnRzID0gc3RyLnNwbGl0KHRoaXMubG9va3VwVG9rZW4uYmluZCh0aGlzKSk7XG4gICAgICAgIHJldHVybiBmcmFnbWVudHMuam9pbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgYSBUb2tlbiBieSBrZXlcbiAgICAgKi9cbiAgICBwdWJsaWMgbG9va3VwVG9rZW4oa2V5OiBzdHJpbmcpOiBUb2tlbiB7XG4gICAgICAgIGlmICghKGtleSBpbiB0aGlzLnRva2VuTWFwKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgdG9rZW4ga2V5OiAke2tleX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuTWFwW2tleV07XG4gICAgfVxufVxuXG5jb25zdCBCRUdJTl9UT0tFTl9NQVJLRVIgPSAnJHtUb2tlblsnO1xuY29uc3QgRU5EX1RPS0VOX01BUktFUiA9ICddfSc7XG5jb25zdCBWQUxJRF9LRVlfQ0hBUlMgPSAnYS16QS1aMC05Oi5fLSc7XG5cbi8qKlxuICogU2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSB0b2tlbiBzdHJpbmcgbWFwXG4gKi9cbmNvbnN0IFRPS0VOX1NUUklOR19NQVAgPSBuZXcgVG9rZW5TdHJpbmdNYXAoKTtcblxuLyoqXG4gKiBJbnRlcmZhY2UgdGhhdCBUb2tlbiBqb2luZXJzIGltcGxlbWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElUb2tlbkpvaW5lciB7XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIGpvaW5lci5cbiAgICAgKlxuICAgICAqIE11c3QgYmUgdW5pcXVlIHBlciBqb2luZXI6IHRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIHRvIGFzc2VydCB0aGF0IHRoZXJlXG4gICAgICogaXMgZXhhY3RseSBvbmx5IHR5cGUgb2Ygam9pbmVyIGluIGEgam9pbiBvcGVyYXRpb24uXG4gICAgICovXG4gICAgaWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgbGFuZ3VhZ2UgaW50cmluc2ljIHRoYXQgd2lsbCBjb21iaW5lIHRoZSBzdHJpbmdzIGluIHRoZSBnaXZlbiBlbmdpbmVcbiAgICAgKi9cbiAgICBqb2luKGZyYWdtZW50czogYW55W10pOiBhbnk7XG59XG5cbi8qKlxuICogQSBzdHJpbmcgd2l0aCBtYXJrZXJzIGluIGl0IHRoYXQgY2FuIGJlIHJlc29sdmVkIHRvIGV4dGVybmFsIHZhbHVlc1xuICovXG5jbGFzcyBUb2tlblN0cmluZyB7XG4gICAgcHJpdmF0ZSBwYXR0ZXJuOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzdHI6IHN0cmluZyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBiZWdpbk1hcmtlcjogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGlkUGF0dGVybjogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGVuZE1hcmtlcjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucGF0dGVybiA9IGAke3JlZ2V4UXVvdGUodGhpcy5iZWdpbk1hcmtlcil9KCR7dGhpcy5pZFBhdHRlcm59KSR7cmVnZXhRdW90ZSh0aGlzLmVuZE1hcmtlcil9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTcGxpdCBzdHJpbmcgb24gbWFya2Vycywgc3Vic3RpdHV0aW5nIG1hcmtlcnMgd2l0aCBUb2tlbnNcbiAgICAgKi9cbiAgICBwdWJsaWMgc3BsaXQobG9va3VwOiAoaWQ6IHN0cmluZykgPT4gVG9rZW4pOiBUb2tlblN0cmluZ0ZyYWdtZW50cyB7XG4gICAgICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cCh0aGlzLnBhdHRlcm4sICdnJyk7XG4gICAgICAgIGNvbnN0IHJldCA9IG5ldyBUb2tlblN0cmluZ0ZyYWdtZW50cygpO1xuXG4gICAgICAgIGxldCByZXN0ID0gMDtcbiAgICAgICAgbGV0IG0gPSByZS5leGVjKHRoaXMuc3RyKTtcbiAgICAgICAgd2hpbGUgKG0pIHtcbiAgICAgICAgICAgIGlmIChtLmluZGV4ID4gcmVzdCkge1xuICAgICAgICAgICAgICAgIHJldC5hZGRTdHJpbmcodGhpcy5zdHIuc3Vic3RyaW5nKHJlc3QsIG0uaW5kZXgpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0LmFkZFRva2VuKGxvb2t1cChtWzFdKSk7XG5cbiAgICAgICAgICAgIHJlc3QgPSByZS5sYXN0SW5kZXg7XG4gICAgICAgICAgICBtID0gcmUuZXhlYyh0aGlzLnN0cik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdCA8IHRoaXMuc3RyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0LmFkZFN0cmluZyh0aGlzLnN0ci5zdWJzdHJpbmcocmVzdCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhpcyBzdHJpbmcgaW5jbHVkZXMgdG9rZW5zLlxuICAgICAqL1xuICAgIHB1YmxpYyB0ZXN0KCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAodGhpcy5wYXR0ZXJuLCAnZycpO1xuICAgICAgICByZXR1cm4gcmUudGVzdCh0aGlzLnN0cik7XG4gICAgfVxufVxuXG4vKipcbiAqIFJlc3VsdCBvZiB0aGUgc3BsaXQgb2YgYSBzdHJpbmcgd2l0aCBUb2tlbnNcbiAqXG4gKiBFaXRoZXIgYSBsaXRlcmFsIHBhcnQgb2YgdGhlIHN0cmluZywgb3IgYW4gdW5yZXNvbHZlZCBUb2tlbi5cbiAqL1xudHlwZSBTdHJpbmdGcmFnbWVudCA9IHsgdHlwZTogJ3N0cmluZyc7IHN0cjogc3RyaW5nIH07XG50eXBlIFRva2VuRnJhZ21lbnQgPSB7IHR5cGU6ICd0b2tlbic7IHRva2VuOiBUb2tlbiB9O1xudHlwZSBGcmFnbWVudCA9ICBTdHJpbmdGcmFnbWVudCB8IFRva2VuRnJhZ21lbnQ7XG5cbi8qKlxuICogRnJhZ21lbnRzIG9mIGEgc3RyaW5nIHdpdGggbWFya2Vyc1xuICovXG5jbGFzcyBUb2tlblN0cmluZ0ZyYWdtZW50cyB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmcmFnbWVudHMgPSBuZXcgQXJyYXk8RnJhZ21lbnQ+KCk7XG5cbiAgICBwdWJsaWMgdmFsdWVzKCk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJhZ21lbnRzLm1hcChmID0+IGYudHlwZSA9PT0gJ3Rva2VuJyA/IHJlc29sdmUoZi50b2tlbikgOiBmLnN0cik7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFN0cmluZyhzdHI6IHN0cmluZykge1xuICAgICAgICB0aGlzLmZyYWdtZW50cy5wdXNoKHsgdHlwZTogJ3N0cmluZycsIHN0ciB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkVG9rZW4odG9rZW46IFRva2VuKSB7XG4gICAgICAgIHRoaXMuZnJhZ21lbnRzLnB1c2goeyB0eXBlOiAndG9rZW4nLCB0b2tlbiB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21iaW5lIHRoZSByZXNvbHZlZCBzdHJpbmcgZnJhZ21lbnRzIHVzaW5nIHRoZSBUb2tlbnMgdG8gam9pbi5cbiAgICAgKlxuICAgICAqIFJlc29sdmVzIHRoZSByZXN1bHQuXG4gICAgICovXG4gICAgcHVibGljIGpvaW4oKTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJyc7IH1cbiAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRzLmxlbmd0aCA9PT0gMSkgeyByZXR1cm4gcmVzb2x2ZUZyYWdtZW50KHRoaXMuZnJhZ21lbnRzWzBdKTsgfVxuXG4gICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpcy5mcmFnbWVudHNbMF07XG5cbiAgICAgICAgbGV0IGk7XG4gICAgICAgIGxldCB0b2tlbjogVG9rZW47XG5cbiAgICAgICAgaWYgKGZpcnN0LnR5cGUgPT09ICd0b2tlbicpIHtcbiAgICAgICAgICAgIHRva2VuID0gZmlyc3QudG9rZW47XG4gICAgICAgICAgICBpID0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFdlIG5ldmVyIGhhdmUgdHdvIHN0cmluZ3MgaW4gYSByb3dcbiAgICAgICAgICAgIHRva2VuID0gKHRoaXMuZnJhZ21lbnRzWzFdIGFzIFRva2VuRnJhZ21lbnQpLnRva2VuLmNvbmNhdChmaXJzdC5zdHIsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBpID0gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChpIDwgdGhpcy5mcmFnbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2VuLmNvbmNhdCh1bmRlZmluZWQsIHJlc29sdmVGcmFnbWVudCh0aGlzLmZyYWdtZW50c1tpXSkpO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc29sdmUodG9rZW4pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSB2YWx1ZSBmcm9tIGEgc2luZ2xlIGZyYWdtZW50XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVGcmFnbWVudChmcmFnbWVudDogRnJhZ21lbnQpOiBhbnkge1xuICAgIHJldHVybiBmcmFnbWVudC50eXBlID09PSAnc3RyaW5nJyA/IGZyYWdtZW50LnN0ciA6IHJlc29sdmUoZnJhZ21lbnQudG9rZW4pO1xufVxuXG4vKipcbiAqIFF1b3RlIGEgc3RyaW5nIGZvciB1c2UgaW4gYSByZWdleFxuICovXG5mdW5jdGlvbiByZWdleFF1b3RlKHM6IHN0cmluZykge1xuICAgIHJldHVybiBzLnJlcGxhY2UoL1suPyorXiRbXFxdXFxcXCgpe318LV0vZywgXCJcXFxcJCZcIik7XG59Il19

@@ -5,3 +5,3 @@ {

"cli-color@0.1.7",
"/codebuild/output/src515441016/src/packages/@aws-cdk/cdk"
"/codebuild/output/src577315738/src/packages/@aws-cdk/cdk"
]

@@ -30,3 +30,3 @@ ],

"_spec": "0.1.7",
"_where": "/codebuild/output/src515441016/src/packages/@aws-cdk/cdk",
"_where": "/codebuild/output/src577315738/src/packages/@aws-cdk/cdk",
"author": {

@@ -33,0 +33,0 @@ "name": "Mariusz Nowak",

@@ -5,3 +5,3 @@ {

"difflib@0.2.4",
"/codebuild/output/src515441016/src/packages/@aws-cdk/cdk"
"/codebuild/output/src577315738/src/packages/@aws-cdk/cdk"
]

@@ -30,3 +30,3 @@ ],

"_spec": "0.2.4",
"_where": "/codebuild/output/src515441016/src/packages/@aws-cdk/cdk",
"_where": "/codebuild/output/src577315738/src/packages/@aws-cdk/cdk",
"author": {

@@ -33,0 +33,0 @@ "name": "Xueqiao Xu",

@@ -5,3 +5,3 @@ {

"dreamopt@0.6.0",
"/codebuild/output/src515441016/src/packages/@aws-cdk/cdk"
"/codebuild/output/src577315738/src/packages/@aws-cdk/cdk"
]

@@ -30,3 +30,3 @@ ],

"_spec": "0.6.0",
"_where": "/codebuild/output/src515441016/src/packages/@aws-cdk/cdk",
"_where": "/codebuild/output/src577315738/src/packages/@aws-cdk/cdk",
"author": {

@@ -33,0 +33,0 @@ "name": "Andrey Tarantsov",

@@ -5,3 +5,3 @@ {

"es5-ext@0.8.2",
"/codebuild/output/src515441016/src/packages/@aws-cdk/cdk"
"/codebuild/output/src577315738/src/packages/@aws-cdk/cdk"
]

@@ -30,3 +30,3 @@ ],

"_spec": "0.8.2",
"_where": "/codebuild/output/src515441016/src/packages/@aws-cdk/cdk",
"_where": "/codebuild/output/src577315738/src/packages/@aws-cdk/cdk",
"author": {

@@ -33,0 +33,0 @@ "name": "Mariusz Nowak",

@@ -5,3 +5,3 @@ {

"heap@0.2.6",
"/codebuild/output/src515441016/src/packages/@aws-cdk/cdk"
"/codebuild/output/src577315738/src/packages/@aws-cdk/cdk"
]

@@ -30,3 +30,3 @@ ],

"_spec": "0.2.6",
"_where": "/codebuild/output/src515441016/src/packages/@aws-cdk/cdk",
"_where": "/codebuild/output/src577315738/src/packages/@aws-cdk/cdk",
"author": {

@@ -33,0 +33,0 @@ "name": "Xueqiao Xu",

@@ -5,3 +5,3 @@ {

"js-base64@2.4.9",
"/codebuild/output/src515441016/src/packages/@aws-cdk/cdk"
"/codebuild/output/src577315738/src/packages/@aws-cdk/cdk"
]

@@ -30,3 +30,3 @@ ],

"_spec": "2.4.9",
"_where": "/codebuild/output/src515441016/src/packages/@aws-cdk/cdk",
"_where": "/codebuild/output/src577315738/src/packages/@aws-cdk/cdk",
"author": {

@@ -33,0 +33,0 @@ "name": "Dan Kogai"

@@ -5,3 +5,3 @@ {

"json-diff@0.3.1",
"/codebuild/output/src515441016/src/packages/@aws-cdk/cdk"
"/codebuild/output/src577315738/src/packages/@aws-cdk/cdk"
]

@@ -30,3 +30,3 @@ ],

"_spec": "0.3.1",
"_where": "/codebuild/output/src515441016/src/packages/@aws-cdk/cdk",
"_where": "/codebuild/output/src577315738/src/packages/@aws-cdk/cdk",
"author": {

@@ -33,0 +33,0 @@ "name": "Andrey Tarantsov",

@@ -5,3 +5,3 @@ {

"wordwrap@1.0.0",
"/codebuild/output/src515441016/src/packages/@aws-cdk/cdk"
"/codebuild/output/src577315738/src/packages/@aws-cdk/cdk"
]

@@ -30,3 +30,3 @@ ],

"_spec": "1.0.0",
"_where": "/codebuild/output/src515441016/src/packages/@aws-cdk/cdk",
"_where": "/codebuild/output/src577315738/src/packages/@aws-cdk/cdk",
"author": {

@@ -33,0 +33,0 @@ "name": "James Halliday",

{
"name": "@aws-cdk/cdk",
"version": "0.9.1",
"version": "0.9.2",
"description": "AWS Cloud Development Kit Core Library",

@@ -56,8 +56,8 @@ "main": "lib/index.js",

"@types/js-base64": "^2.3.1",
"cdk-build-tools": "^0.9.1",
"cfn2ts": "^0.9.1",
"pkglint": "^0.9.1"
"cdk-build-tools": "^0.9.2",
"cfn2ts": "^0.9.2",
"pkglint": "^0.9.2"
},
"dependencies": {
"@aws-cdk/cx-api": "^0.9.1",
"@aws-cdk/cx-api": "^0.9.2",
"js-base64": "^2.4.5",

@@ -64,0 +64,0 @@ "json-diff": "^0.3.1"

@@ -5,3 +5,3 @@ "use strict";

'create from components with defaults'(test) {
const arn = lib_1.Arn.fromComponents({
const arn = lib_1.ArnUtils.fromComponents({
service: 'sqs',

@@ -25,3 +25,3 @@ resource: 'myqueuename'

'create from components with specific values for the various components'(test) {
const arn = lib_1.Arn.fromComponents({
const arn = lib_1.ArnUtils.fromComponents({
service: 'dynamodb',

@@ -51,3 +51,3 @@ resource: 'table',

'allow empty string in components'(test) {
const arn = lib_1.Arn.fromComponents({
const arn = lib_1.ArnUtils.fromComponents({
service: 's3',

@@ -80,3 +80,3 @@ resource: 'my-bucket',

'resourcePathSep can be set to ":" instead of the default "/"'(test) {
const arn = lib_1.Arn.fromComponents({
const arn = lib_1.ArnUtils.fromComponents({
service: 'codedeploy',

@@ -104,3 +104,3 @@ resource: 'application',

'fails if resourcePathSep is neither ":" nor "/"'(test) {
test.throws(() => lib_1.Arn.fromComponents({
test.throws(() => lib_1.ArnUtils.fromComponents({
service: 'foo',

@@ -115,15 +115,15 @@ resource: 'bar',

'if doesn\'t start with "arn:"'(test) {
test.throws(() => lib_1.Arn.parse("barn:foo:x:a:1:2"), /ARNs must start with "arn:": barn:foo/);
test.throws(() => lib_1.ArnUtils.parse("barn:foo:x:a:1:2"), /ARNs must start with "arn:": barn:foo/);
test.done();
},
'if the ARN doesnt have enough components'(test) {
test.throws(() => lib_1.Arn.parse('arn:is:too:short'), /ARNs must have at least 6 components: arn:is:too:short/);
test.throws(() => lib_1.ArnUtils.parse('arn:is:too:short'), /ARNs must have at least 6 components: arn:is:too:short/);
test.done();
},
'if "service" is not specified'(test) {
test.throws(() => lib_1.Arn.parse('arn:aws::4:5:6'), /The `service` component \(3rd component\) is required/);
test.throws(() => lib_1.ArnUtils.parse('arn:aws::4:5:6'), /The `service` component \(3rd component\) is required/);
test.done();
},
'if "resource" is not specified'(test) {
test.throws(() => lib_1.Arn.parse('arn:aws:service:::'), /The `resource` component \(6th component\) is required/);
test.throws(() => lib_1.ArnUtils.parse('arn:aws:service:::'), /The `resource` component \(6th component\) is required/);
test.done();

@@ -173,3 +173,3 @@ }

const expected = tests[arn];
test.deepEqual(lib_1.Arn.parse(arn), expected, arn);
test.deepEqual(lib_1.ArnUtils.parse(arn), expected, arn);
});

@@ -180,3 +180,3 @@ test.done();

const theToken = { Ref: 'SomeParameter' };
const parsed = lib_1.Arn.parseToken(new lib_1.Token(() => theToken), ':');
const parsed = lib_1.ArnUtils.parseToken(new lib_1.Token(() => theToken), ':');
test.deepEqual(lib_1.resolve(parsed.partition), { 'Fn::Select': [1, { 'Fn::Split': [':', theToken] }] });

@@ -193,3 +193,3 @@ test.deepEqual(lib_1.resolve(parsed.service), { 'Fn::Select': [2, { 'Fn::Split': [':', theToken] }] });

const theToken = { Ref: 'SomeParameter' };
const parsed = lib_1.Arn.parseToken(new lib_1.Token(() => theToken));
const parsed = lib_1.ArnUtils.parseToken(new lib_1.Token(() => theToken));
test.equal(parsed.sep, '/');

@@ -204,2 +204,2 @@ // tslint:disable-next-line:max-line-length

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5hcm4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LmFybi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsbUNBQStEO0FBRS9ELGlCQUFTO0lBQ0wsc0NBQXNDLENBQUMsSUFBVTtRQUM3QyxNQUFNLEdBQUcsR0FBRyxTQUFHLENBQUMsY0FBYyxDQUFDO1lBQzNCLE9BQU8sRUFBRSxLQUFLO1lBQ2QsUUFBUSxFQUFFLGFBQWE7U0FDMUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQ3pDLENBQUUsRUFBRTtnQkFDRixDQUFFLEtBQUs7b0JBQ0wsR0FBRztvQkFDSCxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRTtvQkFDekIsR0FBRztvQkFDSCxLQUFLO29CQUNMLEdBQUc7b0JBQ0gsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFO29CQUN0QixHQUFHO29CQUNILEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFO29CQUN6QixHQUFHO29CQUNILGFBQWEsQ0FBRSxDQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsd0VBQXdFLENBQUMsSUFBVTtRQUMvRSxNQUFNLEdBQUcsR0FBRyxTQUFHLENBQUMsY0FBYyxDQUFDO1lBQzNCLE9BQU8sRUFBRSxVQUFVO1lBQ25CLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLE9BQU8sRUFBRSxjQUFjO1lBQ3ZCLE1BQU0sRUFBRSxXQUFXO1lBQ25CLFNBQVMsRUFBRSxRQUFRO1lBQ25CLFlBQVksRUFBRSxzQkFBc0I7U0FDdkMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQ3pDLENBQUUsRUFBRTtnQkFDRixDQUFFLEtBQUs7b0JBQ0wsR0FBRztvQkFDSCxRQUFR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QUEyQztZQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsUUFBUSxDQUFFLEVBQUMsQ0FBRSxFQUFDLENBQUUsRUFBQyxDQUFFLEVBQUMsQ0FBQyxDQUFDO1lBQ3JKLDJDQUEyQztZQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsUUFBUSxDQUFFLEVBQUMsQ0FBRSxFQUFDLENBQUUsRUFBQyxDQUFFLEVBQUMsQ0FBQyxDQUFDO1lBRXpKLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQixDQUFDO0tBQ0o7Q0FFSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcbmltcG9ydCB7IEFybiwgQXJuQ29tcG9uZW50cywgcmVzb2x2ZSwgVG9rZW4gfSBmcm9tICcuLi8uLi9saWInO1xuXG5leHBvcnQgPSB7XG4gICAgJ2NyZWF0ZSBmcm9tIGNvbXBvbmVudHMgd2l0aCBkZWZhdWx0cycodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBhcm4gPSBBcm4uZnJvbUNvbXBvbmVudHMoe1xuICAgICAgICAgICAgc2VydmljZTogJ3NxcycsXG4gICAgICAgICAgICByZXNvdXJjZTogJ215cXVldWVuYW1lJ1xuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKGFybiksIHsgJ0ZuOjpKb2luJzpcbiAgICAgICAgWyAnJyxcbiAgICAgICAgICBbICdhcm4nLFxuICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgeyBSZWY6ICdBV1M6OlBhcnRpdGlvbicgfSxcbiAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICdzcXMnLFxuICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgeyBSZWY6ICdBV1M6OlJlZ2lvbicgfSxcbiAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgIHsgUmVmOiAnQVdTOjpBY2NvdW50SWQnIH0sXG4gICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAnbXlxdWV1ZW5hbWUnIF0gXSB9KTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdjcmVhdGUgZnJvbSBjb21wb25lbnRzIHdpdGggc3BlY2lmaWMgdmFsdWVzIGZvciB0aGUgdmFyaW91cyBjb21wb25lbnRzJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IGFybiA9IEFybi5mcm9tQ29tcG9uZW50cyh7XG4gICAgICAgICAgICBzZXJ2aWNlOiAnZHluYW1vZGInLFxuICAgICAgICAgICAgcmVzb3VyY2U6ICd0YWJsZScsXG4gICAgICAgICAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgICAgICAgICBwYXJ0aXRpb246ICdhd3MtY24nLFxuICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiAnbXl0YWJsZS9zdHJlYW0vbGFiZWwnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUoYXJuKSwgeyAnRm46OkpvaW4nOlxuICAgICAgICBbICcnLFxuICAgICAgICAgIFsgJ2FybicsXG4gICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAnYXdzLWNuJyxcbiAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICdkeW5hbW9kYicsXG4gICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAndXMtZWFzdC0xJyxcbiAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICcxMjM0NTY3ODkwMTInLFxuICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgJ3RhYmxlJyxcbiAgICAgICAgICAgICcvJyxcbiAgICAgICAgICAgICdteXRhYmxlL3N0cmVhbS9sYWJlbCcgXSBdIH0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2FsbG93IGVtcHR5IHN0cmluZyBpbiBjb21wb25lbnRzJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IGFybiA9IEFybi5mcm9tQ29tcG9uZW50cyh7XG4gICAgICAgICAgICBzZXJ2aWNlOiAnczMnLFxuICAgICAgICAgICAgcmVzb3VyY2U6ICdteS1idWNrZXQnLFxuICAgICAgICAgICAgYWNjb3VudDogJycsXG4gICAgICAgICAgICByZWdpb246ICcnLFxuICAgICAgICAgICAgcGFydGl0aW9uOiAnYXdzLWNuJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShhcm4pLCB7XG4gICAgICAgICAgICAnRm46OkpvaW4nOiBbXG4gICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAnYXJuJyxcbiAgICAgICAgICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgICAgICAgICAnYXdzLWNuJyxcbiAgICAgICAgICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgICAgICAgICAnczMnLFxuICAgICAgICAgICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAgICAgICAgICdteS1idWNrZXQnLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdyZXNvdXJjZVBhdGhTZXAgY2FuIGJlIHNldCB0byBcIjpcIiBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IFwiL1wiJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IGFybiA9IEFybi5mcm9tQ29tcG9uZW50cyh7XG4gICAgICAgICAgICBzZXJ2aWNlOiAnY29kZWRlcGxveScsXG4gICAgICAgICAgICByZXNvdXJjZTogJ2FwcGxpY2F0aW9uJyxcbiAgICAgICAgICAgIHNlcDogJzonLFxuICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiAnV29yZFByZXNzX0FwcCdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShhcm4pLCB7ICdGbjo6Sm9pbic6XG4gICAgICAgIFsgJycsXG4gICAgICAgICAgWyAnYXJuJyxcbiAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgIHsgUmVmOiAnQVdTOjpQYXJ0aXRpb24nIH0sXG4gICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAnY29kZWRlcGxveScsXG4gICAgICAgICAgICAnOicsXG4gICAgICAgICAgICB7IFJlZjogJ0FXUzo6UmVnaW9uJyB9LFxuICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgeyBSZWY6ICdBV1M6OkFjY291bnRJZCcgfSxcbiAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbicsXG4gICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAnV29yZFByZXNzX0FwcCcgXSBdIH0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2ZhaWxzIGlmIHJlc291cmNlUGF0aFNlcCBpcyBuZWl0aGVyIFwiOlwiIG5vciBcIi9cIicodGVzdDogVGVzdCkge1xuICAgICAgICB0ZXN0LnRocm93cygoKSA9PiBBcm4uZnJvbUNvbXBvbmVudHMoe1xuICAgICAgICAgICAgc2VydmljZTogJ2ZvbycsXG4gICAgICAgICAgICByZXNvdXJjZTogJ2JhcicsXG4gICAgICAgICAgICBzZXA6ICd4JyB9KSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnQXJuLnBhcnNlKHMpJzoge1xuXG4gICAgICAgICdmYWlscyc6IHtcbiAgICAgICAgICAgICdpZiBkb2VzblxcJ3Qgc3RhcnQgd2l0aCBcImFybjpcIicodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgICAgIHRlc3QudGhyb3dzKCgpID0+IEFybi5wYXJzZShcImJhcm46Zm9vOng6YToxOjJcIiksIC9BUk5zIG11c3Qgc3RhcnQgd2l0aCBcImFybjpcIjogYmFybjpmb28vKTtcbiAgICAgICAgICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICdpZiB0aGUgQVJOIGRvZXNudCBoYXZlIGVub3VnaCBjb21wb25lbnRzJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgICAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4gQXJuLnBhcnNlKCdhcm46aXM6dG9vOnNob3J0JyksIC9BUk5zIG11c3QgaGF2ZSBhdCBsZWFzdCA2IGNvbXBvbmVudHM6IGFybjppczp0b286c2hvcnQvKTtcbiAgICAgICAgICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICdpZiBcInNlcnZpY2VcIiBpcyBub3Qgc3BlY2lmaWVkJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgICAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4gQXJuLnBhcnNlKCdhcm46YXdzOjo0OjU6NicpLCAvVGhlIGBzZXJ2aWNlYCBjb21wb25lbnQgXFwoM3JkIGNvbXBvbmVudFxcKSBpcyByZXF1aXJlZC8pO1xuICAgICAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgJ2lmIFwicmVzb3VyY2VcIiBpcyBub3Qgc3BlY2lmaWVkJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgICAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4gQXJuLnBhcnNlKCdhcm46YXdzOnNlcnZpY2U6OjonKSwgL1RoZSBgcmVzb3VyY2VgIGNvbXBvbmVudCBcXCg2dGggY29tcG9uZW50XFwpIGlzIHJlcXVpcmVkLyk7XG4gICAgICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ3ZhcmlvdXMgc3VjY2Vzc2Z1bCBwYXJzZXMnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RzOiB7IFthcm46IHN0cmluZ106IEFybkNvbXBvbmVudHMgfSA9IHtcbiAgICAgICAgICAgICAgICAnYXJuOmF3czphNGI6cmVnaW9uOmFjY291bnRpZDpyZXNvdXJjZXR5cGUvcmVzb3VyY2UnOiB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbjogJ2F3cycsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZpY2U6ICdhNGInLFxuICAgICAgICAgICAgICAgICAgICByZWdpb246ICdyZWdpb24nLFxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50OiAnYWNjb3VudGlkJyxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2U6ICdyZXNvdXJjZXR5cGUnLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZU5hbWU6ICdyZXNvdXJjZScsXG4gICAgICAgICAgICAgICAgICAgIHNlcDogJy8nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnYXJuOmF3czphcGlnYXRld2F5OnVzLWVhc3QtMTo6YTEyMzQ1Njc4OTAxMmJjM2RlNDU2Nzg5MDFmMjNhNDU6L3Rlc3QvbXlkZW1vcmVzb3VyY2UvKic6IHtcbiAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uOiAnYXdzJyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZTogJ2FwaWdhdGV3YXknLFxuICAgICAgICAgICAgICAgICAgICByZWdpb246ICd1cy1lYXN0LTEnLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZTogJ2ExMjM0NTY3ODkwMTJiYzNkZTQ1Njc4OTAxZjIzYTQ1JyxcbiAgICAgICAgICAgICAgICAgICAgc2VwOiAnOicsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlTmFtZTogJy90ZXN0L215ZGVtb3Jlc291cmNlLyonXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnYXJuOmF3cy1jbjpjbG91ZDk6OjEyMzQ1Njc4OTAxMjplbnZpcm9ubWVudDo4MWU5MDAzMTczNDc1ODVhMDYwMWUwNGM4ZDUyZWFFWCc6IHtcbiAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uOiAnYXdzLWNuJyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZTogJ2Nsb3VkOScsXG4gICAgICAgICAgICAgICAgICAgIGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZTogJ2Vudmlyb25tZW50JyxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiAnODFlOTAwMzE3MzQ3NTg1YTA2MDFlMDRjOGQ1MmVhRVgnLFxuICAgICAgICAgICAgICAgICAgICBzZXA6ICc6J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ2Fybjo6Y29nbml0by1zeW5jOjo6aWRlbnRpdHlwb29sL3VzLWVhc3QtMToxYTFhMWExYS1mZmZmLTExMTEtOTk5OS0xMjM0NTY3ODpibGEnOiB7XG4gICAgICAgICAgICAgICAgICAgIHNlcnZpY2U6ICdjb2duaXRvLXN5bmMnLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZTogJ2lkZW50aXR5cG9vbCcsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlTmFtZTogJ3VzLWVhc3QtMToxYTFhMWExYS1mZmZmLTExMTEtOTk5OS0xMjM0NTY3ODpibGEnLFxuICAgICAgICAgICAgICAgICAgICBzZXA6ICcvJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ2Fybjphd3M6czM6OjpteV9jb3Jwb3JhdGVfYnVja2V0Jzoge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb246ICdhd3MnLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlOiAnczMnLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZTogJ215X2NvcnBvcmF0ZV9idWNrZXQnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgT2JqZWN0LmtleXModGVzdHMpLmZvckVhY2goYXJuID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IHRlc3RzW2Fybl07XG4gICAgICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwoQXJuLnBhcnNlKGFybiksIGV4cGVjdGVkLCBhcm4pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICB9LFxuXG4gICAgICAgICdhIFRva2VuIHdpdGggOiBzZXBhcmF0b3InKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHRoZVRva2VuID0geyBSZWY6ICdTb21lUGFyYW1ldGVyJyB9O1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gQXJuLnBhcnNlVG9rZW4obmV3IFRva2VuKCgpID0+IHRoZVRva2VuKSwgJzonKTtcblxuICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQucGFydGl0aW9uKSwgeyAnRm46OlNlbGVjdCc6IFsgMSwgeyAnRm46OlNwbGl0JzogWyAnOicsIHRoZVRva2VuIF19IF19KTtcbiAgICAgICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocGFyc2VkLnNlcnZpY2UpLCB7ICdGbjo6U2VsZWN0JzogWyAyLCB7ICdGbjo6U3BsaXQnOiBbICc6JywgdGhlVG9rZW4gXX0gXX0pO1xuICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQucmVnaW9uKSwgeyAnRm46OlNlbGVjdCc6IFsgMywgeyAnRm46OlNwbGl0JzogWyAnOicsIHRoZVRva2VuIF19IF19KTtcbiAgICAgICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocGFyc2VkLmFjY291bnQpLCB7ICdGbjo6U2VsZWN0JzogWyA0LCB7ICdGbjo6U3BsaXQnOiBbICc6JywgdGhlVG9rZW4gXX0gXX0pO1xuICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQucmVzb3VyY2UpLCB7ICdGbjo6U2VsZWN0JzogWyA1LCB7ICdGbjo6U3BsaXQnOiBbICc6JywgdGhlVG9rZW4gXX0gXX0pO1xuICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQucmVzb3VyY2VOYW1lKSwgeyAnRm46OlNlbGVjdCc6IFsgNiwgeyAnRm46OlNwbGl0JzogWyAnOicsIHRoZVRva2VuIF19IF19KTtcbiAgICAgICAgICAgIHRlc3QuZXF1YWwocGFyc2VkLnNlcCwgJzonKTtcblxuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ2EgVG9rZW4gd2l0aCAvIHNlcGFyYXRvcicodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgY29uc3QgdGhlVG9rZW4gPSB7IFJlZjogJ1NvbWVQYXJhbWV0ZXInIH07XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBBcm4ucGFyc2VUb2tlbihuZXcgVG9rZW4oKCkgPT4gdGhlVG9rZW4pKTtcblxuICAgICAgICAgICAgdGVzdC5lcXVhbChwYXJzZWQuc2VwLCAnLycpO1xuXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHBhcnNlZC5yZXNvdXJjZSksIHsgJ0ZuOjpTZWxlY3QnOiBbIDAsIHsgJ0ZuOjpTcGxpdCc6IFsgJy8nLCB7ICdGbjo6U2VsZWN0JzogWyA1LCB7ICdGbjo6U3BsaXQnOiBbICc6JywgdGhlVG9rZW4gXX0gXX0gXX0gXX0pO1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQucmVzb3VyY2VOYW1lKSwgeyAnRm46OlNlbGVjdCc6IFsgMSwgeyAnRm46OlNwbGl0JzogWyAnLycsIHsgJ0ZuOjpTZWxlY3QnOiBbIDUsIHsgJ0ZuOjpTcGxpdCc6IFsgJzonLCB0aGVUb2tlbiBdfSBdfSBdfSBdfSk7XG5cbiAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICB9XG4gICAgfSxcblxufTsiXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5hcm4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LmFybi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsbUNBQW9FO0FBRXBFLGlCQUFTO0lBQ0wsc0NBQXNDLENBQUMsSUFBVTtRQUM3QyxNQUFNLEdBQUcsR0FBRyxjQUFRLENBQUMsY0FBYyxDQUFDO1lBQ2hDLE9BQU8sRUFBRSxLQUFLO1lBQ2QsUUFBUSxFQUFFLGFBQWE7U0FDMUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQ3pDLENBQUUsRUFBRTtnQkFDRixDQUFFLEtBQUs7b0JBQ0wsR0FBRztvQkFDSCxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRTtvQkFDekIsR0FBRztvQkFDSCxLQUFLO29CQUNMLEdBQUc7b0JBQ0gsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFO29CQUN0QixHQUFHO29CQUNILEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFO29CQUN6QixHQUFHO29CQUNILGFBQWEsQ0FBRSxDQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsd0VBQXdFLENBQUMsSUFBVTtRQUMvRSxNQUFNLEdBQUcsR0FBRyxjQUFRLENBQUMsY0FBYyxDQUFDO1lBQ2hDLE9BQU8sRUFBRSxVQUFVO1lBQ25CLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLE9BQU8sRUFBRSxjQUFjO1lBQ3ZCLE1BQU0sRUFBRSxXQUFXO1lBQ25CLFNBQVMsRUFBRSxRQUFRO1lBQ25CLFlBQVksRUFBRSxzQkFBc0I7U0FDdkMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQ3pDLENBQUUsRUFBRTtnQkFDRixDQUFFLEtBQUs7b0JBQ0wsR0FBRztvQkFDSCxRQUFR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QUEyQztZQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsUUFBUSxDQUFFLEVBQUMsQ0FBRSxFQUFDLENBQUUsRUFBQyxDQUFFLEVBQUMsQ0FBQyxDQUFDO1lBQ3JKLDJDQUEyQztZQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBRSxHQUFHLEVBQUUsUUFBUSxDQUFFLEVBQUMsQ0FBRSxFQUFDLENBQUUsRUFBQyxDQUFFLEVBQUMsQ0FBQyxDQUFDO1lBRXpKLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQixDQUFDO0tBQ0o7Q0FFSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcbmltcG9ydCB7IEFybkNvbXBvbmVudHMsIEFyblV0aWxzLCByZXNvbHZlLCBUb2tlbiB9IGZyb20gJy4uLy4uL2xpYic7XG5cbmV4cG9ydCA9IHtcbiAgICAnY3JlYXRlIGZyb20gY29tcG9uZW50cyB3aXRoIGRlZmF1bHRzJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IGFybiA9IEFyblV0aWxzLmZyb21Db21wb25lbnRzKHtcbiAgICAgICAgICAgIHNlcnZpY2U6ICdzcXMnLFxuICAgICAgICAgICAgcmVzb3VyY2U6ICdteXF1ZXVlbmFtZSdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShhcm4pLCB7ICdGbjo6Sm9pbic6XG4gICAgICAgIFsgJycsXG4gICAgICAgICAgWyAnYXJuJyxcbiAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgIHsgUmVmOiAnQVdTOjpQYXJ0aXRpb24nIH0sXG4gICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAnc3FzJyxcbiAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgIHsgUmVmOiAnQVdTOjpSZWdpb24nIH0sXG4gICAgICAgICAgICAnOicsXG4gICAgICAgICAgICB7IFJlZjogJ0FXUzo6QWNjb3VudElkJyB9LFxuICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgJ215cXVldWVuYW1lJyBdIF0gfSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnY3JlYXRlIGZyb20gY29tcG9uZW50cyB3aXRoIHNwZWNpZmljIHZhbHVlcyBmb3IgdGhlIHZhcmlvdXMgY29tcG9uZW50cycodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBhcm4gPSBBcm5VdGlscy5mcm9tQ29tcG9uZW50cyh7XG4gICAgICAgICAgICBzZXJ2aWNlOiAnZHluYW1vZGInLFxuICAgICAgICAgICAgcmVzb3VyY2U6ICd0YWJsZScsXG4gICAgICAgICAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgICAgICAgICBwYXJ0aXRpb246ICdhd3MtY24nLFxuICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiAnbXl0YWJsZS9zdHJlYW0vbGFiZWwnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUoYXJuKSwgeyAnRm46OkpvaW4nOlxuICAgICAgICBbICcnLFxuICAgICAgICAgIFsgJ2FybicsXG4gICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAnYXdzLWNuJyxcbiAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICdkeW5hbW9kYicsXG4gICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAndXMtZWFzdC0xJyxcbiAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICcxMjM0NTY3ODkwMTInLFxuICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgJ3RhYmxlJyxcbiAgICAgICAgICAgICcvJyxcbiAgICAgICAgICAgICdteXRhYmxlL3N0cmVhbS9sYWJlbCcgXSBdIH0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2FsbG93IGVtcHR5IHN0cmluZyBpbiBjb21wb25lbnRzJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IGFybiA9IEFyblV0aWxzLmZyb21Db21wb25lbnRzKHtcbiAgICAgICAgICAgIHNlcnZpY2U6ICdzMycsXG4gICAgICAgICAgICByZXNvdXJjZTogJ215LWJ1Y2tldCcsXG4gICAgICAgICAgICBhY2NvdW50OiAnJyxcbiAgICAgICAgICAgIHJlZ2lvbjogJycsXG4gICAgICAgICAgICBwYXJ0aXRpb246ICdhd3MtY24nLFxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKGFybiksIHtcbiAgICAgICAgICAgICdGbjo6Sm9pbic6IFtcbiAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICdhcm4nLFxuICAgICAgICAgICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAgICAgICAgICdhd3MtY24nLFxuICAgICAgICAgICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAgICAgICAgICdzMycsXG4gICAgICAgICAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgICAgICAgICAgJ215LWJ1Y2tldCcsXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgXVxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3Jlc291cmNlUGF0aFNlcCBjYW4gYmUgc2V0IHRvIFwiOlwiIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgXCIvXCInKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3QgYXJuID0gQXJuVXRpbHMuZnJvbUNvbXBvbmVudHMoe1xuICAgICAgICAgICAgc2VydmljZTogJ2NvZGVkZXBsb3knLFxuICAgICAgICAgICAgcmVzb3VyY2U6ICdhcHBsaWNhdGlvbicsXG4gICAgICAgICAgICBzZXA6ICc6JyxcbiAgICAgICAgICAgIHJlc291cmNlTmFtZTogJ1dvcmRQcmVzc19BcHAnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUoYXJuKSwgeyAnRm46OkpvaW4nOlxuICAgICAgICBbICcnLFxuICAgICAgICAgIFsgJ2FybicsXG4gICAgICAgICAgICAnOicsXG4gICAgICAgICAgICB7IFJlZjogJ0FXUzo6UGFydGl0aW9uJyB9LFxuICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgJ2NvZGVkZXBsb3knLFxuICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgeyBSZWY6ICdBV1M6OlJlZ2lvbicgfSxcbiAgICAgICAgICAgICc6JyxcbiAgICAgICAgICAgIHsgUmVmOiAnQVdTOjpBY2NvdW50SWQnIH0sXG4gICAgICAgICAgICAnOicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24nLFxuICAgICAgICAgICAgJzonLFxuICAgICAgICAgICAgJ1dvcmRQcmVzc19BcHAnIF0gXSB9KTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdmYWlscyBpZiByZXNvdXJjZVBhdGhTZXAgaXMgbmVpdGhlciBcIjpcIiBub3IgXCIvXCInKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4gQXJuVXRpbHMuZnJvbUNvbXBvbmVudHMoe1xuICAgICAgICAgICAgc2VydmljZTogJ2ZvbycsXG4gICAgICAgICAgICByZXNvdXJjZTogJ2JhcicsXG4gICAgICAgICAgICBzZXA6ICd4JyB9KSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnQXJuLnBhcnNlKHMpJzoge1xuXG4gICAgICAgICdmYWlscyc6IHtcbiAgICAgICAgICAgICdpZiBkb2VzblxcJ3Qgc3RhcnQgd2l0aCBcImFybjpcIicodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgICAgIHRlc3QudGhyb3dzKCgpID0+IEFyblV0aWxzLnBhcnNlKFwiYmFybjpmb286eDphOjE6MlwiKSwgL0FSTnMgbXVzdCBzdGFydCB3aXRoIFwiYXJuOlwiOiBiYXJuOmZvby8pO1xuICAgICAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgJ2lmIHRoZSBBUk4gZG9lc250IGhhdmUgZW5vdWdoIGNvbXBvbmVudHMnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgICAgICB0ZXN0LnRocm93cygoKSA9PiBBcm5VdGlscy5wYXJzZSgnYXJuOmlzOnRvbzpzaG9ydCcpLCAvQVJOcyBtdXN0IGhhdmUgYXQgbGVhc3QgNiBjb21wb25lbnRzOiBhcm46aXM6dG9vOnNob3J0Lyk7XG4gICAgICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAnaWYgXCJzZXJ2aWNlXCIgaXMgbm90IHNwZWNpZmllZCcodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgICAgIHRlc3QudGhyb3dzKCgpID0+IEFyblV0aWxzLnBhcnNlKCdhcm46YXdzOjo0OjU6NicpLCAvVGhlIGBzZXJ2aWNlYCBjb21wb25lbnQgXFwoM3JkIGNvbXBvbmVudFxcKSBpcyByZXF1aXJlZC8pO1xuICAgICAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgJ2lmIFwicmVzb3VyY2VcIiBpcyBub3Qgc3BlY2lmaWVkJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgICAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4gQXJuVXRpbHMucGFyc2UoJ2Fybjphd3M6c2VydmljZTo6OicpLCAvVGhlIGByZXNvdXJjZWAgY29tcG9uZW50IFxcKDZ0aCBjb21wb25lbnRcXCkgaXMgcmVxdWlyZWQvKTtcbiAgICAgICAgICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAndmFyaW91cyBzdWNjZXNzZnVsIHBhcnNlcycodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgY29uc3QgdGVzdHM6IHsgW2Fybjogc3RyaW5nXTogQXJuQ29tcG9uZW50cyB9ID0ge1xuICAgICAgICAgICAgICAgICdhcm46YXdzOmE0YjpyZWdpb246YWNjb3VudGlkOnJlc291cmNldHlwZS9yZXNvdXJjZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uOiAnYXdzJyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZTogJ2E0YicsXG4gICAgICAgICAgICAgICAgICAgIHJlZ2lvbjogJ3JlZ2lvbicsXG4gICAgICAgICAgICAgICAgICAgIGFjY291bnQ6ICdhY2NvdW50aWQnLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZTogJ3Jlc291cmNldHlwZScsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlTmFtZTogJ3Jlc291cmNlJyxcbiAgICAgICAgICAgICAgICAgICAgc2VwOiAnLydcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICdhcm46YXdzOmFwaWdhdGV3YXk6dXMtZWFzdC0xOjphMTIzNDU2Nzg5MDEyYmMzZGU0NTY3ODkwMWYyM2E0NTovdGVzdC9teWRlbW9yZXNvdXJjZS8qJzoge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb246ICdhd3MnLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlOiAnYXBpZ2F0ZXdheScsXG4gICAgICAgICAgICAgICAgICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlOiAnYTEyMzQ1Njc4OTAxMmJjM2RlNDU2Nzg5MDFmMjNhNDUnLFxuICAgICAgICAgICAgICAgICAgICBzZXA6ICc6JyxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiAnL3Rlc3QvbXlkZW1vcmVzb3VyY2UvKidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICdhcm46YXdzLWNuOmNsb3VkOTo6MTIzNDU2Nzg5MDEyOmVudmlyb25tZW50OjgxZTkwMDMxNzM0NzU4NWEwNjAxZTA0YzhkNTJlYUVYJzoge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb246ICdhd3MtY24nLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlOiAnY2xvdWQ5JyxcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlOiAnZW52aXJvbm1lbnQnLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZU5hbWU6ICc4MWU5MDAzMTczNDc1ODVhMDYwMWUwNGM4ZDUyZWFFWCcsXG4gICAgICAgICAgICAgICAgICAgIHNlcDogJzonXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnYXJuOjpjb2duaXRvLXN5bmM6OjppZGVudGl0eXBvb2wvdXMtZWFzdC0xOjFhMWExYTFhLWZmZmYtMTExMS05OTk5LTEyMzQ1Njc4OmJsYSc6IHtcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZTogJ2NvZ25pdG8tc3luYycsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlOiAnaWRlbnRpdHlwb29sJyxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiAndXMtZWFzdC0xOjFhMWExYTFhLWZmZmYtMTExMS05OTk5LTEyMzQ1Njc4OmJsYScsXG4gICAgICAgICAgICAgICAgICAgIHNlcDogJy8nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnYXJuOmF3czpzMzo6Om15X2NvcnBvcmF0ZV9idWNrZXQnOiB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbjogJ2F3cycsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZpY2U6ICdzMycsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlOiAnbXlfY29ycG9yYXRlX2J1Y2tldCdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0ZXN0cykuZm9yRWFjaChhcm4gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gdGVzdHNbYXJuXTtcbiAgICAgICAgICAgICAgICB0ZXN0LmRlZXBFcXVhbChBcm5VdGlscy5wYXJzZShhcm4pLCBleHBlY3RlZCwgYXJuKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICAgICAgfSxcblxuICAgICAgICAnYSBUb2tlbiB3aXRoIDogc2VwYXJhdG9yJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgICAgICBjb25zdCB0aGVUb2tlbiA9IHsgUmVmOiAnU29tZVBhcmFtZXRlcicgfTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEFyblV0aWxzLnBhcnNlVG9rZW4obmV3IFRva2VuKCgpID0+IHRoZVRva2VuKSwgJzonKTtcblxuICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQucGFydGl0aW9uKSwgeyAnRm46OlNlbGVjdCc6IFsgMSwgeyAnRm46OlNwbGl0JzogWyAnOicsIHRoZVRva2VuIF19IF19KTtcbiAgICAgICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocGFyc2VkLnNlcnZpY2UpLCB7ICdGbjo6U2VsZWN0JzogWyAyLCB7ICdGbjo6U3BsaXQnOiBbICc6JywgdGhlVG9rZW4gXX0gXX0pO1xuICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQucmVnaW9uKSwgeyAnRm46OlNlbGVjdCc6IFsgMywgeyAnRm46OlNwbGl0JzogWyAnOicsIHRoZVRva2VuIF19IF19KTtcbiAgICAgICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocGFyc2VkLmFjY291bnQpLCB7ICdGbjo6U2VsZWN0JzogWyA0LCB7ICdGbjo6U3BsaXQnOiBbICc6JywgdGhlVG9rZW4gXX0gXX0pO1xuICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQucmVzb3VyY2UpLCB7ICdGbjo6U2VsZWN0JzogWyA1LCB7ICdGbjo6U3BsaXQnOiBbICc6JywgdGhlVG9rZW4gXX0gXX0pO1xuICAgICAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwYXJzZWQucmVzb3VyY2VOYW1lKSwgeyAnRm46OlNlbGVjdCc6IFsgNiwgeyAnRm46OlNwbGl0JzogWyAnOicsIHRoZVRva2VuIF19IF19KTtcbiAgICAgICAgICAgIHRlc3QuZXF1YWwocGFyc2VkLnNlcCwgJzonKTtcblxuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ2EgVG9rZW4gd2l0aCAvIHNlcGFyYXRvcicodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgY29uc3QgdGhlVG9rZW4gPSB7IFJlZjogJ1NvbWVQYXJhbWV0ZXInIH07XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBBcm5VdGlscy5wYXJzZVRva2VuKG5ldyBUb2tlbigoKSA9PiB0aGVUb2tlbikpO1xuXG4gICAgICAgICAgICB0ZXN0LmVxdWFsKHBhcnNlZC5zZXAsICcvJyk7XG5cbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocGFyc2VkLnJlc291cmNlKSwgeyAnRm46OlNlbGVjdCc6IFsgMCwgeyAnRm46OlNwbGl0JzogWyAnLycsIHsgJ0ZuOjpTZWxlY3QnOiBbIDUsIHsgJ0ZuOjpTcGxpdCc6IFsgJzonLCB0aGVUb2tlbiBdfSBdfSBdfSBdfSk7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHBhcnNlZC5yZXNvdXJjZU5hbWUpLCB7ICdGbjo6U2VsZWN0JzogWyAxLCB7ICdGbjo6U3BsaXQnOiBbICcvJywgeyAnRm46OlNlbGVjdCc6IFsgNSwgeyAnRm46OlNwbGl0JzogWyAnOicsIHRoZVRva2VuIF19IF19IF19IF19KTtcblxuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG59OyJdfQ==

@@ -8,4 +8,4 @@ "use strict";

p.addActions('dynamodb:CreateTable', 'dynamodb:DeleteTable');
p.addResource(new lib_1.Arn('myQueue'));
p.addResource(new lib_1.Arn('yourQueue'));
p.addResource('myQueue');
p.addResource('yourQueue');
p.addAllResources();

@@ -32,3 +32,3 @@ p.addAwsAccountPrincipal(new lib_1.FnConcat('my', 'account', 'name').toString());

p1.addAction('sqs:SendMessage');
p1.addResource(new lib_1.Arn('*'));
p1.addResource('*');
const p2 = new lib_1.PolicyStatement();

@@ -56,3 +56,3 @@ p2.deny();

const doc = new lib_1.PolicyDocument(base);
doc.addStatement(new lib_1.PolicyStatement().addResource(new lib_1.Arn('resource')).addAction('action'));
doc.addStatement(new lib_1.PolicyStatement().addResource('resource').addAction('action'));
test.deepEqual(lib_1.resolve(doc), { Version: 'Foo',

@@ -66,3 +66,3 @@ Something: 123,

'Permission allows specifying multiple actions upon construction'(test) {
const perm = new lib_1.PolicyStatement().addResource(new lib_1.Arn('MyResource')).addActions('Action1', 'Action2', 'Action3');
const perm = new lib_1.PolicyStatement().addResource('MyResource').addActions('Action1', 'Action2', 'Action3');
test.deepEqual(lib_1.resolve(perm), {

@@ -134,3 +134,3 @@ Effect: 'Allow',

'true if there is one resource'(test) {
test.equal(new lib_1.PolicyStatement().addResource(new lib_1.Arn('one-resource')).hasResource, true, 'hasResource is true when there is one resource');
test.equal(new lib_1.PolicyStatement().addResource('one-resource').hasResource, true, 'hasResource is true when there is one resource');
test.done();

@@ -140,4 +140,4 @@ },

const p = new lib_1.PolicyStatement();
p.addResource(new lib_1.Arn('r1'));
p.addResource(new lib_1.Arn('r2'));
p.addResource('r1');
p.addResource('r2');
test.equal(p.hasResource, true, 'hasResource is true when there are multiple resource');

@@ -154,3 +154,3 @@ test.done();

const p = new lib_1.PolicyStatement();
p.addAwsPrincipal(new lib_1.Arn('bla'));
p.addAwsPrincipal('bla');
test.equal(p.hasPrincipal, true);

@@ -170,2 +170,2 @@ test.done();

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5wZXJtcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QucGVybXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLG1DQUE0RztBQUU1RyxpQkFBUztJQUNMLHFEQUFxRCxDQUFDLElBQVU7UUFDNUQsTUFBTSxDQUFDLEdBQUcsSUFBSSxxQkFBZSxFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksU0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLFNBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBRXBDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNwQixDQUFDLENBQUMsc0JBQXNCLENBQUMsSUFBSSxjQUFRLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLENBQUMsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQy9CLENBQUUsaUJBQWlCO2dCQUNqQixzQkFBc0I7Z0JBQ3RCLHNCQUFzQixDQUFFO1lBQzNCLFFBQVEsRUFBRSxDQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsR0FBRyxDQUFFO1lBQ3pDLE1BQU0sRUFBRSxPQUFPO1lBQ2YsU0FBUyxFQUNSLEVBQUUsR0FBRyxFQUNGLEVBQUUsVUFBVSxFQUNULENBQUUsRUFBRTt3QkFDRixDQUFFLE1BQU07NEJBQ04sRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUU7NEJBQ3pCLFFBQVE7NEJBQ1IsRUFBRSxVQUFVLEVB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Q2hDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxxQkFBZSxFQUFFLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcbmltcG9ydCB7IEFybiwgQ2Fub25pY2FsVXNlclByaW5jaXBhbCwgRm5Db25jYXQsIFBvbGljeURvY3VtZW50LCBQb2xpY3lTdGF0ZW1lbnQsIHJlc29sdmUgfSBmcm9tICcuLi8uLi9saWInO1xuXG5leHBvcnQgPSB7XG4gICAgJ3RoZSBQZXJtaXNzaW9uIGNsYXNzIGlzIGEgcHJvZ3JhbW1pbmcgbW9kZWwgZm9yIGlhbScodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBwID0gbmV3IFBvbGljeVN0YXRlbWVudCgpO1xuICAgICAgICBwLmFkZEFjdGlvbignc3FzOlNlbmRNZXNzYWdlJyk7XG4gICAgICAgIHAuYWRkQWN0aW9ucygnZHluYW1vZGI6Q3JlYXRlVGFibGUnLCAnZHluYW1vZGI6RGVsZXRlVGFibGUnKTtcbiAgICAgICAgcC5hZGRSZXNvdXJjZShuZXcgQXJuKCdteVF1ZXVlJykpO1xuICAgICAgICBwLmFkZFJlc291cmNlKG5ldyBBcm4oJ3lvdXJRdWV1ZScpKTtcblxuICAgICAgICBwLmFkZEFsbFJlc291cmNlcygpO1xuICAgICAgICBwLmFkZEF3c0FjY291bnRQcmluY2lwYWwobmV3IEZuQ29uY2F0KCdteScsICdhY2NvdW50JywgJ25hbWUnKS50b1N0cmluZygpKTtcbiAgICAgICAgcC5saW1pdFRvQWNjb3VudCgnMTIyMjExMjEyMjEnKTtcblxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHApLCB7IEFjdGlvbjpcbiAgICAgICAgICAgIFsgJ3NxczpTZW5kTWVzc2FnZScsXG4gICAgICAgICAgICAgICdkeW5hbW9kYjpDcmVhdGVUYWJsZScsXG4gICAgICAgICAgICAgICdkeW5hbW9kYjpEZWxldGVUYWJsZScgXSxcbiAgICAgICAgICAgUmVzb3VyY2U6IFsgJ215UXVldWUnLCAneW91clF1ZXVlJywgJyonIF0sXG4gICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgUHJpbmNpcGFsOlxuICAgICAgICAgICAgeyBBV1M6XG4gICAgICAgICAgICAgICB7ICdGbjo6Sm9pbic6XG4gICAgICAgICAgICAgICAgICBbICcnLFxuICAgICAgICAgICAgICAgICAgICBbICdhcm46JyxcbiAgICAgICAgICAgICAgICAgICAgICB7IFJlZjogJ0FXUzo6UGFydGl0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICc6aWFtOjonLFxuICAgICAgICAgICAgICAgICAgICAgIHsgJ0ZuOjpKb2luJzogWyAnJywgWyAnbXknLCAnYWNjb3VudCcsICduYW1lJyBdIF0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAnOnJvb3QnIF0gXSB9IH0sXG4gICAgICAgICAgIENvbmRpdGlvbjogeyBTdHJpbmdFcXVhbHM6IHsgJ3N0czpFeHRlcm5hbElkJzogJzEyMjIxMTIxMjIxJyB9IH0gfSk7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICd0aGUgUG9saWN5RG9jdW1lbnQgY2xhc3MgaXMgYSBkb20gZm9yIGlhbSBwb2xpY3kgZG9jdW1lbnRzJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IGRvYyA9IG5ldyBQb2xpY3lEb2N1bWVudCgpO1xuICAgICAgICBjb25zdCBwMSA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoKTtcbiAgICAgICAgcDEuYWRkQWN0aW9uKCdzcXM6U2VuZE1lc3NhZ2UnKTtcbiAgICAgICAgcDEuYWRkUmVzb3VyY2UobmV3IEFybignKicpKTtcblxuICAgICAgICBjb25zdCBwMiA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoKTtcbiAgICAgICAgcDIuZGVueSgpO1xuICAgICAgICBwMi5hZGRBY3Rpb25zKCdjbG91ZGZvcm1hdGlvbjpDcmVhdGVTdGFjaycpO1xuXG4gICAgICAgIGRvYy5hZGRTdGF0ZW1lbnQocDEpO1xuICAgICAgICBkb2MuYWRkU3RhdGVtZW50KHAyKTtcblxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKGRvYyksIHtcbiAgICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgICAgIFN0YXRlbWVudDpcbiAgICAgICAgICAgICAgICBbIHsgRWZmZWN0OiAnQWxsb3cnLCBBY3Rpb246ICdzcXM6U2VuZE1lc3NhZ2UnLCBSZXNvdXJjZTogJyonIH0sXG4gICAgICAgICAgICAgICAgICB7IEVmZmVjdDogJ0RlbnknLCBBY3Rpb246ICdjbG91ZGZvcm1hdGlvbjpDcmVhdGVTdGFjaycgfSBdIH0pO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnQSBQb2xpY3lEb2N1bWVudCBjYW4gYmUgaW5pdGlhbGl6ZWQgd2l0aCBhbiBleGlzdGluZyBwb2xpY3ksIHdoaWNoIGlzIG1lcmdlZCB1cG9uIHNlcmlhbGl6YXRpb24nKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3QgYmFzZSA9IHtcbiAgICAgICAgICAgIFZlcnNpb246ICdGb28nLFxuICAgICAgICAgICAgU29tZXRoaW5nOiAxMjMsXG4gICAgICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICAgICAgICB7IFN0YXRlbWVudDE6IDEgfSxcbiAgICAgICAgICAgICAgICB7IFN0YXRlbWVudDI6IDIgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBkb2MgPSBuZXcgUG9saWN5RG9jdW1lbnQoYmFzZSk7XG4gICAgICAgIGRvYy5hZGRTdGF0ZW1lbnQobmV3IFBvbGljeVN0YXRlbWVudCgpLmFkZFJlc291cmNlKG5ldyBBcm4oJ3Jlc291cmNlJykpLmFkZEFjdGlvbignYWN0aW9uJykpO1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUoZG9jKSwgeyBWZXJzaW9uOiAnRm9vJyxcbiAgICAgICAgU29tZXRoaW5nOiAxMjMsXG4gICAgICAgIFN0YXRlbWVudDpcbiAgICAgICAgIFsgeyBTdGF0ZW1lbnQxOiAxIH0sXG4gICAgICAgICAgIHsgU3RhdGVtZW50MjogMiB9LFxuICAgICAgICAgICB7IEVmZmVjdDogJ0FsbG93JywgQWN0aW9uOiAnYWN0aW9uJywgUmVzb3VyY2U6ICdyZXNvdXJjZScgfSBdIH0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ1Blcm1pc3Npb24gYWxsb3dzIHNwZWNpZnlpbmcgbXVsdGlwbGUgYWN0aW9ucyB1cG9uIGNvbnN0cnVjdGlvbicodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBwZXJtID0gbmV3IFBvbGljeVN0YXRlbWVudCgpLmFkZFJlc291cmNlKG5ldyBBcm4oJ015UmVzb3VyY2UnKSkuYWRkQWN0aW9ucygnQWN0aW9uMScsICdBY3Rpb24yJywgJ0FjdGlvbjMnKTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwZXJtKSwge1xuICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgQWN0aW9uOiBbICdBY3Rpb24xJywgJ0FjdGlvbjInLCAnQWN0aW9uMycgXSxcbiAgICAgICAgICAgIFJlc291cmNlOiAnTXlSZXNvdXJjZScgfSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnUG9saWN5RG9jIHJlc29sdmVzIHRvIHVuZGVmaW5lZCBpZiB0aGVyZSBhcmUgbm8gcGVybWlzc2lvbnMnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3QgcCA9IG5ldyBQb2xpY3lEb2N1bWVudCgpO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHApLCB1bmRlZmluZWQpO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2Nhbm9uaWNhbFVzZXJQcmluY2lwYWwgYWRkcyBhIHByaW5jaXBhbCB0byBhIHBvbGljeSB3aXRoIHRoZSBwYXNzZWQgY2Fub25pY2FsIHVzZXIgaWQnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3QgcCA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoKTtcbiAgICAgICAgY29uc3QgY2Fub25jaWFsVXNlciA9IFwiYXZlcnlzdXBlcmR1cGVybG9uZ3N0cmluZ2ZvclwiO1xuICAgICAgICBwLmFkZFByaW5jaXBhbChuZXcgQ2Fub25pY2FsVXNlclByaW5jaXBhbChjYW5vbmNpYWxVc2VyKSk7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocCksIHtcbiAgICAgICAgICAgIEVmZmVjdDogXCJBbGxvd1wiLFxuICAgICAgICAgICAgUHJpbmNpcGFsOiB7XG4gICAgICAgICAgICAgIENhbm9uaWNhbFVzZXI6IGNhbm9uY2lhbFVzZXJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnYWRkQWNjb3VudFJvb3RQcmluY2lwYWwgYWRkcyBhIHByaW5jaXBhbCB3aXRoIHRoZSBjdXJyZW50IGFjY291bnQgcm9vdCcodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBwID0gbmV3IFBvbGljeVN0YXRlbWVudCgpO1xuICAgICAgICBwLmFkZEFjY291bnRSb290UHJpbmNpcGFsKCk7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocCksIHtcbiAgICAgICAgICAgIEVmZmVjdDogXCJBbGxvd1wiLFxuICAgICAgICAgICAgUHJpbmNpcGFsOiB7XG4gICAgICAgICAgICAgIEFXUzoge1xuICAgICAgICAgICAgICAgIFwiRm46OkpvaW5cIjogW1xuICAgICAgICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgXCJhcm46XCIsXG4gICAgICAgICAgICAgICAgICAgIHsgUmVmOiBcIkFXUzo6UGFydGl0aW9uXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgXCI6aWFtOjpcIixcbiAgICAgICAgICAgICAgICAgICAgeyBSZWY6IFwiQVdTOjpBY2NvdW50SWRcIiB9LFxuICAgICAgICAgICAgICAgICAgICBcIjpyb290XCJcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnYWRkRmVkZXJhdGVkUHJpbmNpcGFsIGFkZHMgYSBGZWRlcmF0ZWQgcHJpbmNpcGFsIHdpdGggdGhlIHBhc3NlZCB2YWx1ZScodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBwID0gbmV3IFBvbGljeVN0YXRlbWVudCgpO1xuICAgICAgICBwLmFkZEZlZGVyYXRlZFByaW5jaXBhbChcImNvbS5hbWF6b24uY29nbml0b1wiLCB7IFN0cmluZ0VxdWFsczogeyBrZXk6ICd2YWx1ZScgfX0pO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHApLCB7XG4gICAgICAgICAgICBFZmZlY3Q6IFwiQWxsb3dcIixcbiAgICAgICAgICAgIFByaW5jaXBhbDoge1xuICAgICAgICAgICAgICAgIEZlZGVyYXRlZDogXCJjb20uYW1hem9uLmNvZ25pdG9cIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIENvbmRpdGlvbjoge1xuICAgICAgICAgICAgICAgIFN0cmluZ0VxdWFsczogeyBrZXk6ICd2YWx1ZScgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdoYXNSZXNvdXJjZSc6IHtcbiAgICAgICAgJ2ZhbHNlIGlmIHRoZXJlIGFyZSBubyByZXNvdXJjZXMnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIHRlc3QuZXF1YWwobmV3IFBvbGljeVN0YXRlbWVudCgpLmhhc1Jlc291cmNlLCBmYWxzZSwgJ2hhc1Jlc291cmNlIHNob3VsZCBiZSBmYWxzZSBmb3IgYW4gZW1wdHkgcGVybWlzc2lvbicpO1xuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ3RydWUgaWYgdGhlcmUgaXMgb25lIHJlc291cmNlJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgICAgICB0ZXN0LmVxdWFsKFxuICAgICAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoKS5hZGRSZXNvdXJjZShuZXcgQXJuKCdvbmUtcmVzb3VyY2UnKSkuaGFzUmVzb3VyY2UsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICAnaGFzUmVzb3VyY2UgaXMgdHJ1ZSB3aGVuIHRoZXJlIGlzIG9uZSByZXNvdXJjZScpO1xuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ3RydWUgZm9yIG11bHRpcGxlIHJlc291cmNlcycodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgY29uc3QgcCA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoKTtcbiAgICAgICAgICAgIHAuYWRkUmVzb3VyY2UobmV3IEFybigncjEnKSk7XG4gICAgICAgICAgICBwLmFkZFJlc291cmNlKG5ldyBBcm4oJ3IyJykpO1xuICAgICAgICAgICAgdGVzdC5lcXVhbChwLmhhc1Jlc291cmNlLCB0cnVlLCAnaGFzUmVzb3VyY2UgaXMgdHJ1ZSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSByZXNvdXJjZScpO1xuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgICdoYXNQcmluY2lwYWwnOiB7XG4gICAgICAgICdmYWxzZSBpZiB0aGVyZSBpcyBubyBwcmluY2lwYWwnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIHRlc3QuZXF1YWwobmV3IFBvbGljeVN0YXRlbWVudCgpLmhhc1ByaW5jaXBhbCwgZmFsc2UpO1xuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ3RydWUgaWYgdGhlcmUgaXMgYSBwcmluY2lwYWwnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBuZXcgUG9saWN5U3RhdGVtZW50KCk7XG4gICAgICAgICAgICBwLmFkZEF3c1ByaW5jaXBhbChuZXcgQXJuKCdibGEnKSk7XG4gICAgICAgICAgICB0ZXN0LmVxdWFsKHAuaGFzUHJpbmNpcGFsLCB0cnVlKTtcbiAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgICdzdGF0ZW1lbnRDb3VudCByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3RhdGVtZW50IGluIHRoZSBwb2xpY3kgZG9jdW1lbnQnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3QgcCA9IG5ldyBQb2xpY3lEb2N1bWVudCgpO1xuICAgICAgICB0ZXN0LmVxdWFsKHAuc3RhdGVtZW50Q291bnQsIDApO1xuICAgICAgICBwLmFkZFN0YXRlbWVudChuZXcgUG9saWN5U3RhdGVtZW50KCkpO1xuICAgICAgICB0ZXN0LmVxdWFsKHAuc3RhdGVtZW50Q291bnQsIDEpO1xuICAgICAgICBwLmFkZFN0YXRlbWVudChuZXcgUG9saWN5U3RhdGVtZW50KCkpO1xuICAgICAgICB0ZXN0LmVxdWFsKHAuc3RhdGVtZW50Q291bnQsIDIpO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9XG59O1xuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5wZXJtcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QucGVybXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLG1DQUF1RztBQUV2RyxpQkFBUztJQUNMLHFEQUFxRCxDQUFDLElBQVU7UUFDNUQsTUFBTSxDQUFDLEdBQUcsSUFBSSxxQkFBZSxFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFM0IsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLGNBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVoQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFDL0IsQ0FBRSxpQkFBaUI7Z0JBQ2pCLHNCQUFzQjtnQkFDdEIsc0JBQXNCLENBQUU7WUFDM0IsUUFBUSxFQUFFLENBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUU7WUFDekMsTUFBTSxFQUFFLE9BQU87WUFDZixTQUFTLEVBQ1IsRUFBRSxHQUFHLEVBQ0YsRUFBRSxVQUFVLEVBQ1QsQ0FBRSxFQUFFO3dCQUNGLENBQUUsTUFBTTs0QkFDTixFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRTs0QkFDekIsUUFBUTs0QkFDUixFQUFFLFVBQVUsRUFBRSxDQUFFLEVBQUUsRUFBRSxDQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFFLENBQUUsRUFBRTs0QkFDbkQsT0FBTyxDQUFFLENBQUUsRUFBRSxFQUFFO1lBQzFCLFNBQVMsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXZFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsNERBQTRELENBQUMsSUFBVTtRQUNuRSxNQUFNLEdBQUcsR0FBRyxJQUFJLG9CQUFjLEVBQUUsQ0FBQztRQUNqQyxNQUFNLEVBQUUsR0FBRyxJQUFJLHFCQUFlLEVBQUUsQ0FBQztRQUNqQyxFQUFFLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwQixNQUFNLEVBQUUsR0FBRyxJQUFJLHFCQUFlLEVBQUUsQ0FBQztRQUNqQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixFQUFFLENBQUMsVUFBVSxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFFNUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQixHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXJCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sRUFBRSxZQUFZO1lBQ3JCLFNBQVMsRUFDTCxDQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDN0QsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSw0QkFBNEIsRUFBRSxDQUFFO1NBQUUsQ0FBQyxDQUFDO1FBRXhFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsaUdBQWlHLENBQUMsSUFBVTtRQUN4RyxNQUFNLElBQUksR0FBRztZQUNULE9BQU8sRUFBRSxLQUFLO1lBQ2QsU0FBUyxFQUFFLEdBQUc7WUFDZCxTQUFTLEVBQUU7Z0JBQ1AsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFO2dCQUNqQixFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUU7YUFDcEI7U0FDSixDQUFDO1FBQ0YsTUFBTSxHQUFHLEdBQUcsSUFBSSxvQkFBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxxQkFBZSxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRXBGLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUs7WUFDN0MsU0FBUyxFQUFFLEdBQUc7WUFDZCxTQUFTLEVBQ1IsQ0FBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUU7Z0JBQ2pCLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRTtnQkFDakIsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsaUVBQWlFLENBQUMsSUFBVTtRQUN4RSxNQUFNLElBQUksR0FBRyxJQUFJLHFCQUFlLEVBQUUsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDekcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUIsTUFBTSxFQUFFLE9BQU87WUFDZixNQUFNLEVBQUUsQ0FBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBRTtZQUMzQyxRQUFRLEVBQUUsWUFBWTtTQUFFLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELDZEQUE2RCxDQUFDLElBQVU7UUFDcEUsTUFBTSxDQUFDLEdBQUcsSUFBSSxvQkFBYyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCx1RkFBdUYsQ0FBQyxJQUFVO1FBQzlGLE1BQU0sQ0FBQyxHQUFHLElBQUkscUJBQWUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sYUFBYSxHQUFHLDhCQUE4QixDQUFDO1FBQ3JELENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSw0QkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxTQUFTLENBQUMsYUFBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sRUFBRSxPQUFPO1lBQ2YsU0FBUyxFQUFFO2dCQUNULGFBQWEsRUFBRSxhQUFhO2FBQzdCO1NBQ0osQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCx3RUFBd0UsQ0FBQyxJQUFVO1FBQy9FLE1BQU0sQ0FBQyxHQUFHLElBQUkscUJBQWUsRUFBRSxDQUFDO1FBQ2hDLENBQUMsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sRUFBRSxPQUFPO1lBQ2YsU0FBUyxFQUFFO2dCQUNULEdBQUcsRUFBRTtvQkFDSCxVQUFVLEVBQUU7d0JBQ1YsRUFBRTt3QkFDRjs0QkFDRSxNQUFNOzRCQUNOLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFOzRCQUN6QixRQUFROzRCQUNSLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFOzRCQUN6QixPQUFPO3lCQUNSO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDSixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELHdFQUF3RSxDQUFDLElBQVU7UUFDL0UsTUFBTSxDQUFDLEdBQUcsSUFBSSxxQkFBZSxFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFDLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN2QixNQUFNLEVBQUUsT0FBTztZQUNmLFNBQVMsRUFBRTtnQkFDUCxTQUFTLEVBQUUsb0JBQW9CO2FBQ2xDO1lBQ0QsU0FBUyxFQUFFO2dCQUNQLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUU7YUFDakM7U0FDSixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELGFBQWEsRUFBRTtRQUNYLGlDQUFpQyxDQUFDLElBQVU7WUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLHFCQUFlLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLHFEQUFxRCxDQUFDLENBQUM7WUFDNUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hCLENBQUM7UUFFRCwrQkFBK0IsQ0FBQyxJQUFVO1lBQ3RDLElBQUksQ0FBQyxLQUFLLENBQ04sSUFBSSxxQkFBZSxFQUFFLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLFdBQVcsRUFDN0QsSUFBSSxFQUNKLGdEQUFnRCxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hCLENBQUM7UUFFRCw2QkFBNkIsQ0FBQyxJQUFVO1lBQ3BDLE1BQU0sQ0FBQyxHQUFHLElBQUkscUJBQWUsRUFBRSxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLHNEQUFzRCxDQUFDLENBQUM7WUFDeEYsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hCLENBQUM7S0FDSjtJQUVELGNBQWMsRUFBRTtRQUNaLGdDQUFnQyxDQUFDLElBQVU7WUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLHFCQUFlLEVBQUUsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hCLENBQUM7UUFFRCw4QkFBOEIsQ0FBQyxJQUFVO1lBQ3JDLE1BQU0sQ0FBQyxHQUFHLElBQUkscUJBQWUsRUFBRSxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQixDQUFDO0tBQ0o7SUFFRCx1RUFBdUUsQ0FBQyxJQUFVO1FBQzlFLE1BQU0sQ0FBQyxHQUFHLElBQUksb0JBQWMsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUkscUJBQWUsRUFBRSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxxQkFBZSxFQUFFLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcbmltcG9ydCB7IENhbm9uaWNhbFVzZXJQcmluY2lwYWwsIEZuQ29uY2F0LCBQb2xpY3lEb2N1bWVudCwgUG9saWN5U3RhdGVtZW50LCByZXNvbHZlIH0gZnJvbSAnLi4vLi4vbGliJztcblxuZXhwb3J0ID0ge1xuICAgICd0aGUgUGVybWlzc2lvbiBjbGFzcyBpcyBhIHByb2dyYW1taW5nIG1vZGVsIGZvciBpYW0nKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3QgcCA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoKTtcbiAgICAgICAgcC5hZGRBY3Rpb24oJ3NxczpTZW5kTWVzc2FnZScpO1xuICAgICAgICBwLmFkZEFjdGlvbnMoJ2R5bmFtb2RiOkNyZWF0ZVRhYmxlJywgJ2R5bmFtb2RiOkRlbGV0ZVRhYmxlJyk7XG4gICAgICAgIHAuYWRkUmVzb3VyY2UoJ215UXVldWUnKTtcbiAgICAgICAgcC5hZGRSZXNvdXJjZSgneW91clF1ZXVlJyk7XG5cbiAgICAgICAgcC5hZGRBbGxSZXNvdXJjZXMoKTtcbiAgICAgICAgcC5hZGRBd3NBY2NvdW50UHJpbmNpcGFsKG5ldyBGbkNvbmNhdCgnbXknLCAnYWNjb3VudCcsICduYW1lJykudG9TdHJpbmcoKSk7XG4gICAgICAgIHAubGltaXRUb0FjY291bnQoJzEyMjIxMTIxMjIxJyk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwKSwgeyBBY3Rpb246XG4gICAgICAgICAgICBbICdzcXM6U2VuZE1lc3NhZ2UnLFxuICAgICAgICAgICAgICAnZHluYW1vZGI6Q3JlYXRlVGFibGUnLFxuICAgICAgICAgICAgICAnZHluYW1vZGI6RGVsZXRlVGFibGUnIF0sXG4gICAgICAgICAgIFJlc291cmNlOiBbICdteVF1ZXVlJywgJ3lvdXJRdWV1ZScsICcqJyBdLFxuICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgIFByaW5jaXBhbDpcbiAgICAgICAgICAgIHsgQVdTOlxuICAgICAgICAgICAgICAgeyAnRm46OkpvaW4nOlxuICAgICAgICAgICAgICAgICAgWyAnJyxcbiAgICAgICAgICAgICAgICAgICAgWyAnYXJuOicsXG4gICAgICAgICAgICAgICAgICAgICAgeyBSZWY6ICdBV1M6OlBhcnRpdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAnOmlhbTo6JyxcbiAgICAgICAgICAgICAgICAgICAgICB7ICdGbjo6Sm9pbic6IFsgJycsIFsgJ215JywgJ2FjY291bnQnLCAnbmFtZScgXSBdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgJzpyb290JyBdIF0gfSB9LFxuICAgICAgICAgICBDb25kaXRpb246IHsgU3RyaW5nRXF1YWxzOiB7ICdzdHM6RXh0ZXJuYWxJZCc6ICcxMjIyMTEyMTIyMScgfSB9IH0pO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAndGhlIFBvbGljeURvY3VtZW50IGNsYXNzIGlzIGEgZG9tIGZvciBpYW0gcG9saWN5IGRvY3VtZW50cycodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBkb2MgPSBuZXcgUG9saWN5RG9jdW1lbnQoKTtcbiAgICAgICAgY29uc3QgcDEgPSBuZXcgUG9saWN5U3RhdGVtZW50KCk7XG4gICAgICAgIHAxLmFkZEFjdGlvbignc3FzOlNlbmRNZXNzYWdlJyk7XG4gICAgICAgIHAxLmFkZFJlc291cmNlKCcqJyk7XG5cbiAgICAgICAgY29uc3QgcDIgPSBuZXcgUG9saWN5U3RhdGVtZW50KCk7XG4gICAgICAgIHAyLmRlbnkoKTtcbiAgICAgICAgcDIuYWRkQWN0aW9ucygnY2xvdWRmb3JtYXRpb246Q3JlYXRlU3RhY2snKTtcblxuICAgICAgICBkb2MuYWRkU3RhdGVtZW50KHAxKTtcbiAgICAgICAgZG9jLmFkZFN0YXRlbWVudChwMik7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShkb2MpLCB7XG4gICAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgICBTdGF0ZW1lbnQ6XG4gICAgICAgICAgICAgICAgWyB7IEVmZmVjdDogJ0FsbG93JywgQWN0aW9uOiAnc3FzOlNlbmRNZXNzYWdlJywgUmVzb3VyY2U6ICcqJyB9LFxuICAgICAgICAgICAgICAgICAgeyBFZmZlY3Q6ICdEZW55JywgQWN0aW9uOiAnY2xvdWRmb3JtYXRpb246Q3JlYXRlU3RhY2snIH0gXSB9KTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ0EgUG9saWN5RG9jdW1lbnQgY2FuIGJlIGluaXRpYWxpemVkIHdpdGggYW4gZXhpc3RpbmcgcG9saWN5LCB3aGljaCBpcyBtZXJnZWQgdXBvbiBzZXJpYWxpemF0aW9uJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IGJhc2UgPSB7XG4gICAgICAgICAgICBWZXJzaW9uOiAnRm9vJyxcbiAgICAgICAgICAgIFNvbWV0aGluZzogMTIzLFxuICAgICAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAgICAgICAgeyBTdGF0ZW1lbnQxOiAxIH0sXG4gICAgICAgICAgICAgICAgeyBTdGF0ZW1lbnQyOiAyIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZG9jID0gbmV3IFBvbGljeURvY3VtZW50KGJhc2UpO1xuICAgICAgICBkb2MuYWRkU3RhdGVtZW50KG5ldyBQb2xpY3lTdGF0ZW1lbnQoKS5hZGRSZXNvdXJjZSgncmVzb3VyY2UnKS5hZGRBY3Rpb24oJ2FjdGlvbicpKTtcblxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKGRvYyksIHsgVmVyc2lvbjogJ0ZvbycsXG4gICAgICAgIFNvbWV0aGluZzogMTIzLFxuICAgICAgICBTdGF0ZW1lbnQ6XG4gICAgICAgICBbIHsgU3RhdGVtZW50MTogMSB9LFxuICAgICAgICAgICB7IFN0YXRlbWVudDI6IDIgfSxcbiAgICAgICAgICAgeyBFZmZlY3Q6ICdBbGxvdycsIEFjdGlvbjogJ2FjdGlvbicsIFJlc291cmNlOiAncmVzb3VyY2UnIH0gXSB9KTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdQZXJtaXNzaW9uIGFsbG93cyBzcGVjaWZ5aW5nIG11bHRpcGxlIGFjdGlvbnMgdXBvbiBjb25zdHJ1Y3Rpb24nKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3QgcGVybSA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoKS5hZGRSZXNvdXJjZSgnTXlSZXNvdXJjZScpLmFkZEFjdGlvbnMoJ0FjdGlvbjEnLCAnQWN0aW9uMicsICdBY3Rpb24zJyk7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUocGVybSksIHtcbiAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgIEFjdGlvbjogWyAnQWN0aW9uMScsICdBY3Rpb24yJywgJ0FjdGlvbjMnIF0sXG4gICAgICAgICAgICBSZXNvdXJjZTogJ015UmVzb3VyY2UnIH0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ1BvbGljeURvYyByZXNvbHZlcyB0byB1bmRlZmluZWQgaWYgdGhlcmUgYXJlIG5vIHBlcm1pc3Npb25zJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHAgPSBuZXcgUG9saWN5RG9jdW1lbnQoKTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwKSwgdW5kZWZpbmVkKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdjYW5vbmljYWxVc2VyUHJpbmNpcGFsIGFkZHMgYSBwcmluY2lwYWwgdG8gYSBwb2xpY3kgd2l0aCB0aGUgcGFzc2VkIGNhbm9uaWNhbCB1c2VyIGlkJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHAgPSBuZXcgUG9saWN5U3RhdGVtZW50KCk7XG4gICAgICAgIGNvbnN0IGNhbm9uY2lhbFVzZXIgPSBcImF2ZXJ5c3VwZXJkdXBlcmxvbmdzdHJpbmdmb3JcIjtcbiAgICAgICAgcC5hZGRQcmluY2lwYWwobmV3IENhbm9uaWNhbFVzZXJQcmluY2lwYWwoY2Fub25jaWFsVXNlcikpO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHApLCB7XG4gICAgICAgICAgICBFZmZlY3Q6IFwiQWxsb3dcIixcbiAgICAgICAgICAgIFByaW5jaXBhbDoge1xuICAgICAgICAgICAgICBDYW5vbmljYWxVc2VyOiBjYW5vbmNpYWxVc2VyXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2FkZEFjY291bnRSb290UHJpbmNpcGFsIGFkZHMgYSBwcmluY2lwYWwgd2l0aCB0aGUgY3VycmVudCBhY2NvdW50IHJvb3QnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3QgcCA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoKTtcbiAgICAgICAgcC5hZGRBY2NvdW50Um9vdFByaW5jaXBhbCgpO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHApLCB7XG4gICAgICAgICAgICBFZmZlY3Q6IFwiQWxsb3dcIixcbiAgICAgICAgICAgIFByaW5jaXBhbDoge1xuICAgICAgICAgICAgICBBV1M6IHtcbiAgICAgICAgICAgICAgICBcIkZuOjpKb2luXCI6IFtcbiAgICAgICAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIFwiYXJuOlwiLFxuICAgICAgICAgICAgICAgICAgICB7IFJlZjogXCJBV1M6OlBhcnRpdGlvblwiIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiOmlhbTo6XCIsXG4gICAgICAgICAgICAgICAgICAgIHsgUmVmOiBcIkFXUzo6QWNjb3VudElkXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgXCI6cm9vdFwiXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2FkZEZlZGVyYXRlZFByaW5jaXBhbCBhZGRzIGEgRmVkZXJhdGVkIHByaW5jaXBhbCB3aXRoIHRoZSBwYXNzZWQgdmFsdWUnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3QgcCA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoKTtcbiAgICAgICAgcC5hZGRGZWRlcmF0ZWRQcmluY2lwYWwoXCJjb20uYW1hem9uLmNvZ25pdG9cIiwgeyBTdHJpbmdFcXVhbHM6IHsga2V5OiAndmFsdWUnIH19KTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShwKSwge1xuICAgICAgICAgICAgRWZmZWN0OiBcIkFsbG93XCIsXG4gICAgICAgICAgICBQcmluY2lwYWw6IHtcbiAgICAgICAgICAgICAgICBGZWRlcmF0ZWQ6IFwiY29tLmFtYXpvbi5jb2duaXRvXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBDb25kaXRpb246IHtcbiAgICAgICAgICAgICAgICBTdHJpbmdFcXVhbHM6IHsga2V5OiAndmFsdWUnIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnaGFzUmVzb3VyY2UnOiB7XG4gICAgICAgICdmYWxzZSBpZiB0aGVyZSBhcmUgbm8gcmVzb3VyY2VzJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgICAgICB0ZXN0LmVxdWFsKG5ldyBQb2xpY3lTdGF0ZW1lbnQoKS5oYXNSZXNvdXJjZSwgZmFsc2UsICdoYXNSZXNvdXJjZSBzaG91bGQgYmUgZmFsc2UgZm9yIGFuIGVtcHR5IHBlcm1pc3Npb24nKTtcbiAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICB9LFxuXG4gICAgICAgICd0cnVlIGlmIHRoZXJlIGlzIG9uZSByZXNvdXJjZScodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgdGVzdC5lcXVhbChcbiAgICAgICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KCkuYWRkUmVzb3VyY2UoJ29uZS1yZXNvdXJjZScpLmhhc1Jlc291cmNlLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgJ2hhc1Jlc291cmNlIGlzIHRydWUgd2hlbiB0aGVyZSBpcyBvbmUgcmVzb3VyY2UnKTtcbiAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICB9LFxuXG4gICAgICAgICd0cnVlIGZvciBtdWx0aXBsZSByZXNvdXJjZXMnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBuZXcgUG9saWN5U3RhdGVtZW50KCk7XG4gICAgICAgICAgICBwLmFkZFJlc291cmNlKCdyMScpO1xuICAgICAgICAgICAgcC5hZGRSZXNvdXJjZSgncjInKTtcbiAgICAgICAgICAgIHRlc3QuZXF1YWwocC5oYXNSZXNvdXJjZSwgdHJ1ZSwgJ2hhc1Jlc291cmNlIGlzIHRydWUgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgcmVzb3VyY2UnKTtcbiAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICAnaGFzUHJpbmNpcGFsJzoge1xuICAgICAgICAnZmFsc2UgaWYgdGhlcmUgaXMgbm8gcHJpbmNpcGFsJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgICAgICB0ZXN0LmVxdWFsKG5ldyBQb2xpY3lTdGF0ZW1lbnQoKS5oYXNQcmluY2lwYWwsIGZhbHNlKTtcbiAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICB9LFxuXG4gICAgICAgICd0cnVlIGlmIHRoZXJlIGlzIGEgcHJpbmNpcGFsJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgICAgICBjb25zdCBwID0gbmV3IFBvbGljeVN0YXRlbWVudCgpO1xuICAgICAgICAgICAgcC5hZGRBd3NQcmluY2lwYWwoJ2JsYScpO1xuICAgICAgICAgICAgdGVzdC5lcXVhbChwLmhhc1ByaW5jaXBhbCwgdHJ1ZSk7XG4gICAgICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAnc3RhdGVtZW50Q291bnQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHN0YXRlbWVudCBpbiB0aGUgcG9saWN5IGRvY3VtZW50Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHAgPSBuZXcgUG9saWN5RG9jdW1lbnQoKTtcbiAgICAgICAgdGVzdC5lcXVhbChwLnN0YXRlbWVudENvdW50LCAwKTtcbiAgICAgICAgcC5hZGRTdGF0ZW1lbnQobmV3IFBvbGljeVN0YXRlbWVudCgpKTtcbiAgICAgICAgdGVzdC5lcXVhbChwLnN0YXRlbWVudENvdW50LCAxKTtcbiAgICAgICAgcC5hZGRTdGF0ZW1lbnQobmV3IFBvbGljeVN0YXRlbWVudCgpKTtcbiAgICAgICAgdGVzdC5lcXVhbChwLnN0YXRlbWVudENvdW50LCAyKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfVxufTtcbiJdfQ==

@@ -17,3 +17,4 @@ import { Test } from 'nodeunit';

'addDependency adds all dependencyElements of dependent constructs'(test: Test): void;
'resource.ref returns the {Ref} token'(test: Test): void;
};
export = _default;

@@ -6,4 +6,4 @@ "use strict";

super(parent, name, { type: 'My::Counter', properties: { Count: props.Count } });
this.arn = new CounterArnAttr(this.getAtt('Arn'));
this.url = new CounterUrlAttr(() => this.getAtt('URL'));
this.arn = this.getAtt('Arn').toString();
this.url = this.getAtt('URL').toString();
}

@@ -14,6 +14,2 @@ increment(by = 1) {

}
class CounterArnAttr extends lib_1.Arn {
}
class CounterUrlAttr extends lib_1.Token {
}
function withoutHash(logId) {

@@ -292,3 +288,9 @@ return logId.substr(0, logId.length - 8);

},
'resource.ref returns the {Ref} token'(test) {
const stack = new lib_1.Stack();
const r = new lib_1.Resource(stack, 'MyResource', { type: 'R' });
test.deepEqual(lib_1.resolve(r.ref), { Ref: 'MyResource' });
test.done();
}
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5yZXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QucmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLG1DQUV1RTtBQTBWdkUsTUFBTSxPQUFRLFNBQVEsY0FBUTtJQUkxQixZQUFZLE1BQWlCLEVBQUUsSUFBWSxFQUFFLEtBQW1CO1FBQzVELEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRU0sU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0NBQ0o7QUFFRCxNQUFNLGNBQWUsU0FBUSxTQUFHO0NBQUk7QUFDcEMsTUFBTSxjQUFlLFNBQVEsV0FBSztDQUFJO0FBRXRDLFNBQVMsV0FBVyxDQUFDLEtBQWE7SUFDOUIsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUE1V0QsaUJBQVM7SUFDTCwrREFBK0QsQ0FBQyxJQUFVO1FBQ3RFLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxFQUFFLENBQUM7UUFFMUIsSUFBSSxjQUFRLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRTtZQUM5QixJQUFJLEVBQUUsZ0JBQWdC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LEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMzRSxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVwQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUNoRCxFQUFFLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQzlCLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQzlCLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQzlCLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQzlCLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQzlCLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQzlCLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtnQkFDaEMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2dCQUNoQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQ2hDLFVBQVUsRUFDVCxFQUFFLElBQUksRUFBRSxHQUFHO29CQUNULFNBQVMsRUFDUixDQUFFLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLGtCQUFrQixDQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXN0IH0gZnJvbSAnbm9kZXVuaXQnO1xuaW1wb3J0IHsgYXBwbHlSZW1vdmFsUG9saWN5LCBBcm4sIENvbmRpdGlvbiwgQ29uc3RydWN0LCBEZWxldGlvblBvbGljeSxcbiAgICAgICAgRm5FcXVhbHMsIEZuTm90LCBIYXNoZWRBZGRyZXNzaW5nU2NoZW1lLCBJRGVwZW5kYWJsZSwgUG9saWN5U3RhdGVtZW50LFxuICAgICAgICBSZW1vdmFsUG9saWN5LCBSZXNvdXJjZSwgUm9vdCwgU3RhY2ssIFRva2VuIH0gZnJvbSAnLi4vLi4vbGliJztcblxuZXhwb3J0ID0ge1xuICAgICdhbGwgcmVzb3VyY2VzIGRlcml2ZSBmcm9tIFJlc291cmNlLCB3aGljaCBkZXJpdmVzIGZyb20gRW50aXR5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgICAgICAgbmV3IFJlc291cmNlKHN0YWNrLCAnTXlSZXNvdXJjZScsIHtcbiAgICAgICAgICAgIHR5cGU6ICdNeVJlc291cmNlVHlwZScsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgUHJvcDE6ICdwMScsIFByb3AyOiAxMjNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLCB7XG4gICAgICAgICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgICAgICBNeVJlc291cmNlOiB7XG4gICAgICAgICAgICAgICAgICAgIFR5cGU6IFwiTXlSZXNvdXJjZVR5cGVcIixcbiAgICAgICAgICAgICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgUHJvcDE6IFwicDFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFByb3AyOiAxMjNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdyZXNvdXJjZXMgbXVzdCByZXNpZGUgd2l0aGluIGEgU3RhY2sgYW5kIGZhaWwgdXBvbiBjcmVhdGlvbiBpZiBub3QnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgICAgIHRlc3QudGhyb3dzKCgpID0+IG5ldyBSZXNvdXJjZShyb290LCAnUjEnLCB7IHR5cGU6ICdSZXNvdXJjZVR5cGUnIH0pKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdhbGwgZW50aXRpZXMgaGF2ZSBhIGxvZ2ljYWwgSUQgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGVpciBmdWxsIHBhdGggaW4gdGhlIHRyZWUnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2sodW5kZWZpbmVkLCAnVGVzdFN0YWNrJywgeyBuYW1pbmdTY2hlbWU6IG5ldyBIYXNoZWRBZGRyZXNzaW5nU2NoZW1lKCkgfSk7XG4gICAgICAgIGNvbnN0IGxldmVsMSA9IG5ldyBDb25zdHJ1Y3Qoc3RhY2ssICdsZXZlbDEnKTtcbiAgICAgICAgY29uc3QgbGV2ZWwyID0gbmV3IENvbnN0cnVjdChsZXZlbDEsICdsZXZlbDInKTtcbiAgICAgICAgY29uc3QgbGV2ZWwzID0gbmV3IENvbnN0cnVjdChsZXZlbDIsICdsZXZlbDMnKTtcbiAgICAgICAgY29uc3QgcmVzMSA9IG5ldyBSZXNvdXJjZShsZXZlbDEsICdjaGlsZG9mbGV2ZWwxJywgeyB0eXBlOiAnTXlSZXNvdXJjZVR5cGUxJyB9KTtcbiAgICAgICAgY29uc3QgcmVzMiA9IG5ldyBSZXNvdXJjZShsZXZlbDMsICdjaGlsZG9mbGV2ZWwzJywgeyB0eXBlOiAnTXlSZXNvdXJjZVR5cGUyJyB9KTtcblxuICAgICAgICB0ZXN0LmVxdWFsKHdpdGhvdXRIYXNoKHJlczEubG9naWNhbElkKSwgJ2xldmVsMWNoaWxkb2ZsZXZlbDEnKTtcbiAgICAgICAgdGVzdC5lcXVhbCh3aXRob3V0SGFzaChyZXMyLmxvZ2ljYWxJZCksICdsZXZlbDFsZXZlbDJsZXZlbDNjaGlsZG9mbGV2ZWwzJyk7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdyZXNvdXJjZS5wcm9wcyBjYW4gb25seSBiZSBhY2Nlc3NlZCBieSBkZXJpdmVkIGNsYXNzZXMnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IENvdW50ZXIoc3RhY2ssICdNeVJlc291cmNlJywgeyBDb3VudDogMTAgfSk7XG4gICAgICAgIHJlcy5pbmNyZW1lbnQoKTtcbiAgICAgICAgcmVzLmluY3JlbWVudCgyKTtcblxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChzdGFjay50b0Nsb3VkRm9ybWF0aW9uKCksIHtcbiAgICAgICAgICAgIFJlc291cmNlczoge1xuICAgICAgICAgICAgICAgIE15UmVzb3VyY2U6IHsgVHlwZTogJ015OjpDb3VudGVyJywgUHJvcGVydGllczogeyBDb3VudDogMTMgfSB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAncmVzb3VyY2UgYXR0cmlidXRlcyBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIGdldEF0dChzKSBvciBhdHRyaWJ1dGUgcHJvcGVydGllcycodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgQ291bnRlcihzdGFjaywgJ015UmVzb3VyY2UnLCB7IENvdW50OiAxMCB9KTtcblxuICAgICAgICBuZXcgUmVzb3VyY2Uoc3RhY2ssICdZb3VyUmVzb3VyY2UnLCB7XG4gICAgICAgICAgICB0eXBlOiAnVHlwZScsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgQ291bnRlck5hbWU6IHJlcy5nZXRBdHQoJ05hbWUnKSxcbiAgICAgICAgICAgICAgICBDb3VudGVyQXJuOiByZXMuYXJuLFxuICAgICAgICAgICAgICAgIENvdW50ZXJVUkw6IHJlcy51cmwsXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHN0YWNrLnRvQ2xvdWRGb3JtYXRpb24oKSwge1xuICAgICAgICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgICAgICAgICAgTXlSZXNvdXJjZTogeyBUeXBlOiAnTXk6OkNvdW50ZXInLCBQcm9wZXJ0aWVzOiB7IENvdW50OiAxMCB9IH0sXG4gICAgICAgICAgICAgICAgWW91clJlc291cmNlOiB7XG4gICAgICAgICAgICAgICAgICAgIFR5cGU6ICdUeXBlJyxcbiAgICAgICAgICAgICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRlck5hbWU6IHsgJ0ZuOjpHZXRBdHQnOiBbICdNeVJlc291cmNlJywgJ05hbWUnIF0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIENvdW50ZXJBcm46IHsgJ0ZuOjpHZXRBdHQnOiBbICdNeVJlc291cmNlJywgJ0FybicgXSB9ICxcbiAgICAgICAgICAgICAgICAgICAgICAgIENvdW50ZXJVUkw6IHsgJ0ZuOjpHZXRBdHQnOiBbICdNeVJlc291cmNlJywgJ1VSTCcgXSB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnQVJOLXR5cGUgcmVzb3VyY2UgYXR0cmlidXRlcyBoYXZlIHNvbWUgY29tbW9uIGZ1bmN0aW9uYWxpdHknKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IENvdW50ZXIoc3RhY2ssICdNeVJlc291cmNlJywgeyBDb3VudDogMSB9KTtcbiAgICAgICAgbmV3IFJlc291cmNlKHN0YWNrLCAnTXlSZXNvdXJjZTInLCB7XG4gICAgICAgICAgICB0eXBlOiAnVHlwZScsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgUGVybTogbmV3IFBvbGljeVN0YXRlbWVudCgpLmFkZFJlc291cmNlKHJlcy5hcm4pLmFkZEFjdGlvbnMoJ2NvdW50ZXI6YWRkJywgJ2NvdW50ZXI6cmVtb3ZlJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLCB7XG4gICAgICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgICAgICBNeVJlc291cmNlOiB7IFR5cGU6IFwiTXk6OkNvdW50ZXJcIiwgUHJvcGVydGllczogeyBDb3VudDogMSB9IH0sXG4gICAgICAgICAgICBNeVJlc291cmNlMjoge1xuICAgICAgICAgICAgICBUeXBlOiBcIlR5cGVcIixcbiAgICAgICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIFBlcm06IHtcbiAgICAgICAgICAgICAgICAgIEVmZmVjdDogXCJBbGxvd1wiLFxuICAgICAgICAgICAgICAgICAgQWN0aW9uOiBbIFwiY291bnRlcjphZGRcIiwgXCJjb3VudGVyOnJlbW92ZVwiIF0sXG4gICAgICAgICAgICAgICAgICBSZXNvdXJjZToge1xuICAgICAgICAgICAgICAgICAgICBcIkZuOjpHZXRBdHRcIjogWyBcIk15UmVzb3VyY2VcIiwgXCJBcm5cIiBdXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3Jlc291cmNlLmFkZERlcGVuZGVuY3koZSkgY2FuIGJlIHVzZWQgdG8gYWRkIGEgRGVwZW5kc09uIG9uIGFub3RoZXIgcmVzb3VyY2UnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICAgICAgY29uc3QgcjEgPSBuZXcgQ291bnRlcihzdGFjaywgJ0NvdW50ZXIxJywgeyBDb3VudDogMSB9KTtcbiAgICAgICAgY29uc3QgcjIgPSBuZXcgQ291bnRlcihzdGFjaywgJ0NvdW50ZXIyJywgeyBDb3VudDogMSB9KTtcbiAgICAgICAgY29uc3QgcjMgPSBuZXcgUmVzb3VyY2Uoc3RhY2ssICdSZXNvdXJjZTMnLCB7IHR5cGU6ICdNeVJlc291cmNlVHlwZScgfSk7XG4gICAgICAgIHIyLmFkZERlcGVuZGVuY3kocjEpO1xuICAgICAgICByMi5hZGREZXBlbmRlbmN5KHIzKTtcblxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChzdGFjay50b0Nsb3VkRm9ybWF0aW9uKCksIHtcbiAgICAgICAgICAgIFJlc291cmNlczoge1xuICAgICAgICAgICAgICAgIENvdW50ZXIxOiB7XG4gICAgICAgICAgICAgICAgICAgIFR5cGU6IFwiTXk6OkNvdW50ZXJcIixcbiAgICAgICAgICAgICAgICAgICAgUHJvcGVydGllczogeyBDb3VudDogMSB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBDb3VudGVyMjoge1xuICAgICAgICAgICAgICAgICAgICBUeXBlOiBcIk15OjpDb3VudGVyXCIsXG4gICAgICAgICAgICAgICAgICAgIFByb3BlcnRpZXM6IHsgQ291bnQ6IDEgfSxcbiAgICAgICAgICAgICAgICAgICAgRGVwZW5kc09uOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvdW50ZXIxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlJlc291cmNlM1wiXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFJlc291cmNlMzogeyBUeXBlOiBcIk15UmVzb3VyY2VUeXBlXCIgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2NvbmRpdGlvbnMgY2FuIGJlIGF0dGFjaGVkIHRvIGEgcmVzb3VyY2UnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICAgICAgY29uc3QgcjEgPSBuZXcgUmVzb3VyY2Uoc3RhY2ssICdSZXNvdXJjZScsIHsgdHlwZTogJ1R5cGUnIH0pO1xuICAgICAgICBjb25zdCBjb25kID0gbmV3IENvbmRpdGlvbihzdGFjaywgJ015Q29uZGl0aW9uJywgeyBleHByZXNzaW9uOiBuZXcgRm5Ob3QobmV3IEZuRXF1YWxzKCdhJywgJ2InKSkgfSk7XG4gICAgICAgIHIxLm9wdGlvbnMuY29uZGl0aW9uID0gY29uZDtcblxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChzdGFjay50b0Nsb3VkRm9ybWF0aW9uKCksIHtcbiAgICAgICAgICAgIFJlc291cmNlczogeyBSZXNvdXJjZTogeyBUeXBlOiAnVHlwZScsIENvbmRpdGlvbjogJ015Q29uZGl0aW9uJyB9IH0sXG4gICAgICAgICAgICBDb25kaXRpb25zOiB7IE15Q29uZGl0aW9uOiB7ICdGbjo6Tm90JzogWyB7ICdGbjo6RXF1YWxzJzogWyAnYScsICdiJyBdIH0gXSB9IH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdjcmVhdGlvbi91cGRhdGUvZGVsZXRpb24gcG9saWNpZXMgY2FuIGJlIHNldCBvbiBhIHJlc291cmNlJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgICAgIGNvbnN0IHIxID0gbmV3IFJlc291cmNlKHN0YWNrLCAnUmVzb3VyY2UnLCB7IHR5cGU6ICdUeXBlJyB9KTtcblxuICAgICAgICByMS5vcHRpb25zLmNyZWF0aW9uUG9saWN5ID0geyBhdXRvU2NhbGluZ0NyZWF0aW9uUG9saWN5OiB7IG1pblN1Y2Nlc3NmdWxJbnN0YW5jZXNQZXJjZW50OiAxMCB9IH07XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgICAgcjEub3B0aW9ucy51cGRhdGVQb2xpY3kgPSB7IGF1dG9TY2FsaW5nU2NoZWR1bGVkQWN0aW9uOiB7IGlnbm9yZVVubW9kaWZpZWRHcm91cFNpemVQcm9wZXJ0aWVzOiBmYWxzZSB9LCBhdXRvU2NhbGluZ1JlcGxhY2luZ1VwZGF0ZTogeyB3aWxsUmVwbGFjZTogdHJ1ZSB9IH07XG4gICAgICAgIHIxLm9wdGlvbnMuZGVsZXRpb25Qb2xpY3kgPSBEZWxldGlvblBvbGljeS5SZXRhaW47XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLCB7XG4gICAgICAgICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgICAgICBSZXNvdXJjZToge1xuICAgICAgICAgICAgICAgICAgICBUeXBlOiAnVHlwZScsXG4gICAgICAgICAgICAgICAgICAgIENyZWF0aW9uUG9saWN5OiB7IEF1dG9TY2FsaW5nQ3JlYXRpb25Qb2xpY3k6IHsgTWluU3VjY2Vzc2Z1bEluc3RhbmNlc1BlcmNlbnQ6IDEwIH0gfSxcbiAgICAgICAgICAgICAgICAgICAgVXBkYXRlUG9saWN5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBdXRvU2NhbGluZ1NjaGVkdWxlZEFjdGlvbjogeyBJZ25vcmVVbm1vZGlmaWVkR3JvdXBTaXplUHJvcGVydGllczogZmFsc2UgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEF1dG9TY2FsaW5nUmVwbGFjaW5nVXBkYXRlOiB7IFdpbGxSZXBsYWNlOiB0cnVlIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgRGVsZXRpb25Qb2xpY3k6ICdSZXRhaW4nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ21ldGFkYXRhIGNhbiBiZSBzZXQgb24gYSByZXNvdXJjZScodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgICAgICBjb25zdCByMSA9IG5ldyBSZXNvdXJjZShzdGFjaywgJ1Jlc291cmNlJywgeyB0eXBlOiAnVHlwZScgfSk7XG5cbiAgICAgICAgcjEub3B0aW9ucy5tZXRhZGF0YSA9IHtcbiAgICAgICAgICAgIE15S2V5OiAxMCxcbiAgICAgICAgICAgIE15VmFsdWU6IDk5XG4gICAgICAgIH07XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLCB7XG4gICAgICAgICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgICAgICBSZXNvdXJjZToge1xuICAgICAgICAgICAgICAgICAgICBUeXBlOiBcIlR5cGVcIixcbiAgICAgICAgICAgICAgICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE15S2V5OiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIE15VmFsdWU6IDk5XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAndGhlIFwidHlwZVwiIHByb3BlcnR5IGlzIHJlcXVpcmVkIHdoZW4gY3JlYXRpbmcgYSByZXNvdXJjZScodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgICAgICB0ZXN0LnRocm93cygoKSA9PiBuZXcgUmVzb3VyY2Uoc3RhY2ssICdSZXNvdXJjZScsIHsgbm90eXBlaGVyZTogdHJ1ZSB9IGFzIGFueSkpO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3RoZSBcIm5hbWVcIiBwcm9wZXJ0eSBpcyBkZWxldGVkIHdoZW4gc3ludGhlc2l6aW5nIGludG8gYSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZScodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gICAgICAgIG5ldyBSZXNvdXJjZShzdGFjaywgJ0JsYScsIHtcbiAgICAgICAgICAgIHR5cGU6ICdNeVJlc291cmNlJyxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBQcm9wMTogJ3ZhbHVlMScsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0JsYSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLCB7IFJlc291cmNlczpcbiAgICAgICAgICAgIHsgQmxhOiB7IFR5cGU6ICdNeVJlc291cmNlJywgUHJvcGVydGllczogeyBQcm9wMTogJ3ZhbHVlMScgfSB9IH0gfSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAncmVtb3ZhbCBwb2xpY3kgaXMgYSBoaWdoIGxldmVsIGFic3RyYWN0aW9uIG9mIGRlbGV0aW9uIHBvbGljeSB1c2VkIGJ5IGwyJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgICAgICAgY29uc3Qgb3JwaGFuID0gbmV3IFJlc291cmNlKHN0YWNrLCAnT3JwaGFuJywgeyB0eXBlOiAnVDEnIH0pO1xuICAgICAgICBjb25zdCBmb3JiaWQgPSBuZXcgUmVzb3VyY2Uoc3RhY2ssICdGb3JiaWQnLCB7IHR5cGU6ICdUMicgfSk7XG4gICAgICAgIGNvbnN0IGRlc3Ryb3kgPSBuZXcgUmVzb3VyY2Uoc3RhY2ssICdEZXN0cm95JywgeyB0eXBlOiAnVDMnIH0pO1xuXG4gICAgICAgIGFwcGx5UmVtb3ZhbFBvbGljeShvcnBoYW4sIFJlbW92YWxQb2xpY3kuT3JwaGFuKTtcbiAgICAgICAgYXBwbHlSZW1vdmFsUG9saWN5KGZvcmJpZCwgUmVtb3ZhbFBvbGljeS5Gb3JiaWQpO1xuICAgICAgICBhcHBseVJlbW92YWxQb2xpY3koZGVzdHJveSwgUmVtb3ZhbFBvbGljeS5EZXN0cm95KTtcblxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChzdGFjay50b0Nsb3VkRm9ybWF0aW9uKCksIHsgUmVzb3VyY2VzOlxuICAgICAgICAgICAgeyBPcnBoYW46IHsgVHlwZTogJ1QxJywgRGVsZXRpb25Qb2xpY3k6ICdSZXRhaW4nIH0sXG4gICAgICAgICAgICAgIEZvcmJpZDogeyBUeXBlOiAnVDInLCBEZWxldGlvblBvbGljeTogJ1JldGFpbicgfSxcbiAgICAgICAgICAgICAgRGVzdHJveTogeyBUeXBlOiAnVDMnIH0gfSB9KTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdhZGREZXBlbmRlbmN5IGFkZHMgYWxsIGRlcGVuZGVuY3lFbGVtZW50cyBvZiBkZXBlbmRlbnQgY29uc3RydWN0cycodGVzdDogVGVzdCkge1xuXG4gICAgICAgIGNsYXNzIEMxIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSURlcGVuZGFibGUge1xuICAgICAgICAgICAgcHVibGljIHJlYWRvbmx5IHIxOiBSZXNvdXJjZTtcbiAgICAgICAgICAgIHB1YmxpYyByZWFkb25seSByMjogUmVzb3VyY2U7XG4gICAgICAgICAgICBwdWJsaWMgcmVhZG9ubHkgcjM6IFJlc291cmNlO1xuXG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocGFyZW50LCBuYW1lKTtcblxuICAgICAgICAgICAgICAgIHRoaXMucjEgPSBuZXcgUmVzb3VyY2UodGhpcywgJ1IxJywgeyB0eXBlOiAnVDEnIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMucjIgPSBuZXcgUmVzb3VyY2UodGhpcywgJ1IyJywgeyB0eXBlOiAnVDInIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMucjMgPSBuZXcgUmVzb3VyY2UodGhpcywgJ1IzJywgeyB0eXBlOiAnVDMnIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnZXQgZGVwZW5kZW5jeUVsZW1lbnRzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbIHRoaXMucjEsIHRoaXMucjIgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNsYXNzIEMyIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSURlcGVuZGFibGUge1xuICAgICAgICAgICAgcHVibGljIHJlYWRvbmx5IHIxOiBSZXNvdXJjZTtcbiAgICAgICAgICAgIHB1YmxpYyByZWFkb25seSByMjogUmVzb3VyY2U7XG4gICAgICAgICAgICBwdWJsaWMgcmVhZG9ubHkgcjM6IFJlc291cmNlO1xuXG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocGFyZW50LCBuYW1lKTtcblxuICAgICAgICAgICAgICAgIHRoaXMucjEgPSBuZXcgUmVzb3VyY2UodGhpcywgJ1IxJywgeyB0eXBlOiAnVDEnIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMucjIgPSBuZXcgUmVzb3VyY2UodGhpcywgJ1IyJywgeyB0eXBlOiAnVDInIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMucjMgPSBuZXcgUmVzb3VyY2UodGhpcywgJ1IzJywgeyB0eXBlOiAnVDMnIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnZXQgZGVwZW5kZW5jeUVsZW1lbnRzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbIHRoaXMucjMgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEMzIHJldHVybnMgWyBjMiBdIGZvciBpdCdzIGRlcGVuZGVuY3kgZWxlbWVudHNcbiAgICAgICAgLy8gdGhpcyBzaG91bGQgcmVzdWx0IGluICdmbGF0dGVuaW5nJyB0aGUgbGlzdCBvZiBlbGVtZW50cy5cbiAgICAgICAgY2xhc3MgQzMgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJRGVwZW5kYWJsZSB7XG4gICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGMyOiBDMjtcblxuICAgICAgICAgICAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZykge1xuICAgICAgICAgICAgICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmMyID0gbmV3IEMyKHRoaXMsICdDMicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnZXQgZGVwZW5kZW5jeUVsZW1lbnRzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbIHRoaXMuYzIgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgICAgIGNvbnN0IGMxID0gbmV3IEMxKHN0YWNrLCAnTXlDMScpO1xuICAgICAgICBjb25zdCBjMiA9IG5ldyBDMihzdGFjaywgJ015QzInKTtcbiAgICAgICAgY29uc3QgYzMgPSBuZXcgQzMoc3RhY2ssICdNeUMzJyk7XG5cbiAgICAgICAgY29uc3QgZGVwZW5kaW5nUmVzb3VyY2UgPSBuZXcgUmVzb3VyY2Uoc3RhY2ssICdNeVJlc291cmNlJywgeyB0eXBlOiAnUicgfSk7XG4gICAgICAgIGRlcGVuZGluZ1Jlc291cmNlLmFkZERlcGVuZGVuY3koYzEsIGMyKTtcbiAgICAgICAgZGVwZW5kaW5nUmVzb3VyY2UuYWRkRGVwZW5kZW5jeShjMyk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLCB7IFJlc291cmNlczpcbiAgICAgICAgICAgIHsgTXlDMVIxRkIyQTU2MkY6IHsgVHlwZTogJ1QxJyB9LFxuICAgICAgICAgICAgICBNeUMxUjJBRTJCNTA2NjogeyBUeXBlOiAnVDInIH0sXG4gICAgICAgICAgICAgIE15QzFSMzc0OTY3RDAyOiB7IFR5cGU6ICdUMycgfSxcbiAgICAgICAgICAgICAgTXlDMlIxM0M5QTYxOEQ6IHsgVHlwZTogJ1QxJyB9LFxuICAgICAgICAgICAgICBNeUMyUjI1MzMwRjkwNTogeyBUeXBlOiAnVDInIH0sXG4gICAgICAgICAgICAgIE15QzJSMzgwOUVFQUQ2OiB7IFR5cGU6ICdUMycgfSxcbiAgICAgICAgICAgICAgTXlDM0MyUjFDNjQ1NTFBNzogeyBUeXBlOiAnVDEnIH0sXG4gICAgICAgICAgICAgIE15QzNDMlIyRjIxM0JEMjY6IHsgVHlwZTogJ1QyJyB9LFxuICAgICAgICAgICAgICBNeUMzQzJSMzhDRTZGOUY3OiB7IFR5cGU6ICdUMycgfSxcbiAgICAgICAgICAgICAgTXlSZXNvdXJjZTpcbiAgICAgICAgICAgICAgIHsgVHlwZTogJ1InLFxuICAgICAgICAgICAgICAgICBEZXBlbmRzT246XG4gICAgICAgICAgICAgICAgICBbICdNeUMxUjFGQjJBNTYyRicsXG4gICAgICAgICAgICAgICAgICAgICdNeUMxUjJBRTJCNTA2NicsXG4gICAgICAgICAgICAgICAgICAgICdNeUMyUjM4MDlFRUFENicsXG4gICAgICAgICAgICAgICAgICAgICdNeUMzQzJSMzhDRTZGOUY3JyBdIH0gfSB9KTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcbn07XG5cbmludGVyZmFjZSBDb3VudGVyUHJvcHMge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gICAgQ291bnQ6IG51bWJlcjtcbn1cblxuY2xhc3MgQ291bnRlciBleHRlbmRzIFJlc291cmNlIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgYXJuOiBDb3VudGVyQXJuQXR0cjtcbiAgICBwdWJsaWMgcmVhZG9ubHkgdXJsOiBDb3VudGVyVXJsQXR0cjtcblxuICAgIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBDb3VudGVyUHJvcHMpIHtcbiAgICAgICAgc3VwZXIocGFyZW50LCBuYW1lLCB7IHR5cGU6ICdNeTo6Q291bnRlcicsIHByb3BlcnRpZXM6IHsgQ291bnQ6IHByb3BzLkNvdW50IH0gfSk7XG4gICAgICAgIHRoaXMuYXJuID0gbmV3IENvdW50ZXJBcm5BdHRyKHRoaXMuZ2V0QXR0KCdBcm4nKSk7XG4gICAgICAgIHRoaXMudXJsID0gbmV3IENvdW50ZXJVcmxBdHRyKCgpID0+IHRoaXMuZ2V0QXR0KCdVUkwnKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGluY3JlbWVudChieSA9IDEpIHtcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzLkNvdW50ICs9IGJ5O1xuICAgIH1cbn1cblxuY2xhc3MgQ291bnRlckFybkF0dHIgZXh0ZW5kcyBBcm4geyB9XG5jbGFzcyBDb3VudGVyVXJsQXR0ciBleHRlbmRzIFRva2VuIHsgfVxuXG5mdW5jdGlvbiB3aXRob3V0SGFzaChsb2dJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGxvZ0lkLnN1YnN0cigwLCBsb2dJZC5sZW5ndGggLSA4KTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5yZXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QucmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLG1DQUV5RTtBQWtXekUsTUFBTSxPQUFRLFNBQVEsY0FBUTtJQUkxQixZQUFZLE1BQWlCLEVBQUUsSUFBWSxFQUFFLEtBQW1CO1FBQzVELEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFTSxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7Q0FDSjtBQUVELFNBQVMsV0FBVyxDQUFDLEtBQWE7SUFDOUIsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFqWEQsaUJBQVM7SUFDTCwrREFBK0QsQ0FBQyxJQUFVO1FBQ3RFLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxFQUFFLENBQUM7UUFFMUIsSUFBSSxjQUFRLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRTtZQUM5QixJQUFJLEVBQUUsZ0JBQWdCO1lBQ3RCLFVBQVUsRUFBRTtnQkFDUixLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHO2FBQzFCO1NBQ0osQ0FBQyxDQUFDO1FBRUgsSUFB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RUFBRSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcbmltcG9ydCB7IGFwcGx5UmVtb3ZhbFBvbGljeSwgQ29uZGl0aW9uLCBDb25zdHJ1Y3QsIERlbGV0aW9uUG9saWN5LFxuICAgICAgICBGbkVxdWFscywgRm5Ob3QsIEhhc2hlZEFkZHJlc3NpbmdTY2hlbWUsIElEZXBlbmRhYmxlLCBQb2xpY3lTdGF0ZW1lbnQsXG4gICAgICAgIFJlbW92YWxQb2xpY3ksIHJlc29sdmUsIFJlc291cmNlLCBSb290LCBTdGFjayB9IGZyb20gJy4uLy4uL2xpYic7XG5cbmV4cG9ydCA9IHtcbiAgICAnYWxsIHJlc291cmNlcyBkZXJpdmUgZnJvbSBSZXNvdXJjZSwgd2hpY2ggZGVyaXZlcyBmcm9tIEVudGl0eScodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gICAgICAgIG5ldyBSZXNvdXJjZShzdGFjaywgJ015UmVzb3VyY2UnLCB7XG4gICAgICAgICAgICB0eXBlOiAnTXlSZXNvdXJjZVR5cGUnLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIFByb3AxOiAncDEnLCBQcm9wMjogMTIzXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHN0YWNrLnRvQ2xvdWRGb3JtYXRpb24oKSwge1xuICAgICAgICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgICAgICAgICAgTXlSZXNvdXJjZToge1xuICAgICAgICAgICAgICAgICAgICBUeXBlOiBcIk15UmVzb3VyY2VUeXBlXCIsXG4gICAgICAgICAgICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFByb3AxOiBcInAxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBQcm9wMjogMTIzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAncmVzb3VyY2VzIG11c3QgcmVzaWRlIHdpdGhpbiBhIFN0YWNrIGFuZCBmYWlsIHVwb24gY3JlYXRpb24gaWYgbm90Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBuZXcgUm9vdCgpO1xuICAgICAgICB0ZXN0LnRocm93cygoKSA9PiBuZXcgUmVzb3VyY2Uocm9vdCwgJ1IxJywgeyB0eXBlOiAnUmVzb3VyY2VUeXBlJyB9KSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnYWxsIGVudGl0aWVzIGhhdmUgYSBsb2dpY2FsIElEIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlaXIgZnVsbCBwYXRoIGluIHRoZSB0cmVlJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKHVuZGVmaW5lZCwgJ1Rlc3RTdGFjaycsIHsgbmFtaW5nU2NoZW1lOiBuZXcgSGFzaGVkQWRkcmVzc2luZ1NjaGVtZSgpIH0pO1xuICAgICAgICBjb25zdCBsZXZlbDEgPSBuZXcgQ29uc3RydWN0KHN0YWNrLCAnbGV2ZWwxJyk7XG4gICAgICAgIGNvbnN0IGxldmVsMiA9IG5ldyBDb25zdHJ1Y3QobGV2ZWwxLCAnbGV2ZWwyJyk7XG4gICAgICAgIGNvbnN0IGxldmVsMyA9IG5ldyBDb25zdHJ1Y3QobGV2ZWwyLCAnbGV2ZWwzJyk7XG4gICAgICAgIGNvbnN0IHJlczEgPSBuZXcgUmVzb3VyY2UobGV2ZWwxLCAnY2hpbGRvZmxldmVsMScsIHsgdHlwZTogJ015UmVzb3VyY2VUeXBlMScgfSk7XG4gICAgICAgIGNvbnN0IHJlczIgPSBuZXcgUmVzb3VyY2UobGV2ZWwzLCAnY2hpbGRvZmxldmVsMycsIHsgdHlwZTogJ015UmVzb3VyY2VUeXBlMicgfSk7XG5cbiAgICAgICAgdGVzdC5lcXVhbCh3aXRob3V0SGFzaChyZXMxLmxvZ2ljYWxJZCksICdsZXZlbDFjaGlsZG9mbGV2ZWwxJyk7XG4gICAgICAgIHRlc3QuZXF1YWwod2l0aG91dEhhc2gocmVzMi5sb2dpY2FsSWQpLCAnbGV2ZWwxbGV2ZWwybGV2ZWwzY2hpbGRvZmxldmVsMycpO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAncmVzb3VyY2UucHJvcHMgY2FuIG9ubHkgYmUgYWNjZXNzZWQgYnkgZGVyaXZlZCBjbGFzc2VzJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBDb3VudGVyKHN0YWNrLCAnTXlSZXNvdXJjZScsIHsgQ291bnQ6IDEwIH0pO1xuICAgICAgICByZXMuaW5jcmVtZW50KCk7XG4gICAgICAgIHJlcy5pbmNyZW1lbnQoMik7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLCB7XG4gICAgICAgICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgICAgICBNeVJlc291cmNlOiB7IFR5cGU6ICdNeTo6Q291bnRlcicsIFByb3BlcnRpZXM6IHsgQ291bnQ6IDEzIH0gfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3Jlc291cmNlIGF0dHJpYnV0ZXMgY2FuIGJlIHJldHJpZXZlZCB1c2luZyBnZXRBdHQocykgb3IgYXR0cmlidXRlIHByb3BlcnRpZXMnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IENvdW50ZXIoc3RhY2ssICdNeVJlc291cmNlJywgeyBDb3VudDogMTAgfSk7XG5cbiAgICAgICAgbmV3IFJlc291cmNlKHN0YWNrLCAnWW91clJlc291cmNlJywge1xuICAgICAgICAgICAgdHlwZTogJ1R5cGUnLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIENvdW50ZXJOYW1lOiByZXMuZ2V0QXR0KCdOYW1lJyksXG4gICAgICAgICAgICAgICAgQ291bnRlckFybjogcmVzLmFybixcbiAgICAgICAgICAgICAgICBDb3VudGVyVVJMOiByZXMudXJsLFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChzdGFjay50b0Nsb3VkRm9ybWF0aW9uKCksIHtcbiAgICAgICAgICAgIFJlc291cmNlczoge1xuICAgICAgICAgICAgICAgIE15UmVzb3VyY2U6IHsgVHlwZTogJ015OjpDb3VudGVyJywgUHJvcGVydGllczogeyBDb3VudDogMTAgfSB9LFxuICAgICAgICAgICAgICAgIFlvdXJSZXNvdXJjZToge1xuICAgICAgICAgICAgICAgICAgICBUeXBlOiAnVHlwZScsXG4gICAgICAgICAgICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIENvdW50ZXJOYW1lOiB7ICdGbjo6R2V0QXR0JzogWyAnTXlSZXNvdXJjZScsICdOYW1lJyBdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBDb3VudGVyQXJuOiB7ICdGbjo6R2V0QXR0JzogWyAnTXlSZXNvdXJjZScsICdBcm4nIF0gfSAsXG4gICAgICAgICAgICAgICAgICAgICAgICBDb3VudGVyVVJMOiB7ICdGbjo6R2V0QXR0JzogWyAnTXlSZXNvdXJjZScsICdVUkwnIF0gfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ0FSTi10eXBlIHJlc291cmNlIGF0dHJpYnV0ZXMgaGF2ZSBzb21lIGNvbW1vbiBmdW5jdGlvbmFsaXR5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBDb3VudGVyKHN0YWNrLCAnTXlSZXNvdXJjZScsIHsgQ291bnQ6IDEgfSk7XG4gICAgICAgIG5ldyBSZXNvdXJjZShzdGFjaywgJ015UmVzb3VyY2UyJywge1xuICAgICAgICAgICAgdHlwZTogJ1R5cGUnLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIFBlcm06IG5ldyBQb2xpY3lTdGF0ZW1lbnQoKS5hZGRSZXNvdXJjZShyZXMuYXJuKS5hZGRBY3Rpb25zKCdjb3VudGVyOmFkZCcsICdjb3VudGVyOnJlbW92ZScpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHN0YWNrLnRvQ2xvdWRGb3JtYXRpb24oKSwge1xuICAgICAgICAgIFJlc291cmNlczoge1xuICAgICAgICAgICAgTXlSZXNvdXJjZTogeyBUeXBlOiBcIk15OjpDb3VudGVyXCIsIFByb3BlcnRpZXM6IHsgQ291bnQ6IDEgfSB9LFxuICAgICAgICAgICAgTXlSZXNvdXJjZTI6IHtcbiAgICAgICAgICAgICAgVHlwZTogXCJUeXBlXCIsXG4gICAgICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBQZXJtOiB7XG4gICAgICAgICAgICAgICAgICBFZmZlY3Q6IFwiQWxsb3dcIixcbiAgICAgICAgICAgICAgICAgIEFjdGlvbjogWyBcImNvdW50ZXI6YWRkXCIsIFwiY291bnRlcjpyZW1vdmVcIiBdLFxuICAgICAgICAgICAgICAgICAgUmVzb3VyY2U6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJGbjo6R2V0QXR0XCI6IFsgXCJNeVJlc291cmNlXCIsIFwiQXJuXCIgXVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdyZXNvdXJjZS5hZGREZXBlbmRlbmN5KGUpIGNhbiBiZSB1c2VkIHRvIGFkZCBhIERlcGVuZHNPbiBvbiBhbm90aGVyIHJlc291cmNlJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgICAgIGNvbnN0IHIxID0gbmV3IENvdW50ZXIoc3RhY2ssICdDb3VudGVyMScsIHsgQ291bnQ6IDEgfSk7XG4gICAgICAgIGNvbnN0IHIyID0gbmV3IENvdW50ZXIoc3RhY2ssICdDb3VudGVyMicsIHsgQ291bnQ6IDEgfSk7XG4gICAgICAgIGNvbnN0IHIzID0gbmV3IFJlc291cmNlKHN0YWNrLCAnUmVzb3VyY2UzJywgeyB0eXBlOiAnTXlSZXNvdXJjZVR5cGUnIH0pO1xuICAgICAgICByMi5hZGREZXBlbmRlbmN5KHIxKTtcbiAgICAgICAgcjIuYWRkRGVwZW5kZW5jeShyMyk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLCB7XG4gICAgICAgICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgICAgICBDb3VudGVyMToge1xuICAgICAgICAgICAgICAgICAgICBUeXBlOiBcIk15OjpDb3VudGVyXCIsXG4gICAgICAgICAgICAgICAgICAgIFByb3BlcnRpZXM6IHsgQ291bnQ6IDEgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgQ291bnRlcjI6IHtcbiAgICAgICAgICAgICAgICAgICAgVHlwZTogXCJNeTo6Q291bnRlclwiLFxuICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzOiB7IENvdW50OiAxIH0sXG4gICAgICAgICAgICAgICAgICAgIERlcGVuZHNPbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJDb3VudGVyMVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJSZXNvdXJjZTNcIlxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBSZXNvdXJjZTM6IHsgVHlwZTogXCJNeVJlc291cmNlVHlwZVwiIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdjb25kaXRpb25zIGNhbiBiZSBhdHRhY2hlZCB0byBhIHJlc291cmNlJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgICAgIGNvbnN0IHIxID0gbmV3IFJlc291cmNlKHN0YWNrLCAnUmVzb3VyY2UnLCB7IHR5cGU6ICdUeXBlJyB9KTtcbiAgICAgICAgY29uc3QgY29uZCA9IG5ldyBDb25kaXRpb24oc3RhY2ssICdNeUNvbmRpdGlvbicsIHsgZXhwcmVzc2lvbjogbmV3IEZuTm90KG5ldyBGbkVxdWFscygnYScsICdiJykpIH0pO1xuICAgICAgICByMS5vcHRpb25zLmNvbmRpdGlvbiA9IGNvbmQ7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLCB7XG4gICAgICAgICAgICBSZXNvdXJjZXM6IHsgUmVzb3VyY2U6IHsgVHlwZTogJ1R5cGUnLCBDb25kaXRpb246ICdNeUNvbmRpdGlvbicgfSB9LFxuICAgICAgICAgICAgQ29uZGl0aW9uczogeyBNeUNvbmRpdGlvbjogeyAnRm46Ok5vdCc6IFsgeyAnRm46OkVxdWFscyc6IFsgJ2EnLCAnYicgXSB9IF0gfSB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnY3JlYXRpb24vdXBkYXRlL2RlbGV0aW9uIHBvbGljaWVzIGNhbiBiZSBzZXQgb24gYSByZXNvdXJjZScodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgICAgICBjb25zdCByMSA9IG5ldyBSZXNvdXJjZShzdGFjaywgJ1Jlc291cmNlJywgeyB0eXBlOiAnVHlwZScgfSk7XG5cbiAgICAgICAgcjEub3B0aW9ucy5jcmVhdGlvblBvbGljeSA9IHsgYXV0b1NjYWxpbmdDcmVhdGlvblBvbGljeTogeyBtaW5TdWNjZXNzZnVsSW5zdGFuY2VzUGVyY2VudDogMTAgfSB9O1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgIHIxLm9wdGlvbnMudXBkYXRlUG9saWN5ID0geyBhdXRvU2NhbGluZ1NjaGVkdWxlZEFjdGlvbjogeyBpZ25vcmVVbm1vZGlmaWVkR3JvdXBTaXplUHJvcGVydGllczogZmFsc2UgfSwgYXV0b1NjYWxpbmdSZXBsYWNpbmdVcGRhdGU6IHsgd2lsbFJlcGxhY2U6IHRydWUgfSB9O1xuICAgICAgICByMS5vcHRpb25zLmRlbGV0aW9uUG9saWN5ID0gRGVsZXRpb25Qb2xpY3kuUmV0YWluO1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHN0YWNrLnRvQ2xvdWRGb3JtYXRpb24oKSwge1xuICAgICAgICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgICAgICAgICAgUmVzb3VyY2U6IHtcbiAgICAgICAgICAgICAgICAgICAgVHlwZTogJ1R5cGUnLFxuICAgICAgICAgICAgICAgICAgICBDcmVhdGlvblBvbGljeTogeyBBdXRvU2NhbGluZ0NyZWF0aW9uUG9saWN5OiB7IE1pblN1Y2Nlc3NmdWxJbnN0YW5jZXNQZXJjZW50OiAxMCB9IH0sXG4gICAgICAgICAgICAgICAgICAgIFVwZGF0ZVBvbGljeToge1xuICAgICAgICAgICAgICAgICAgICAgICAgQXV0b1NjYWxpbmdTY2hlZHVsZWRBY3Rpb246IHsgSWdub3JlVW5tb2RpZmllZEdyb3VwU2l6ZVByb3BlcnRpZXM6IGZhbHNlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBBdXRvU2NhbGluZ1JlcGxhY2luZ1VwZGF0ZTogeyBXaWxsUmVwbGFjZTogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIERlbGV0aW9uUG9saWN5OiAnUmV0YWluJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdtZXRhZGF0YSBjYW4gYmUgc2V0IG9uIGEgcmVzb3VyY2UnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICAgICAgY29uc3QgcjEgPSBuZXcgUmVzb3VyY2Uoc3RhY2ssICdSZXNvdXJjZScsIHsgdHlwZTogJ1R5cGUnIH0pO1xuXG4gICAgICAgIHIxLm9wdGlvbnMubWV0YWRhdGEgPSB7XG4gICAgICAgICAgICBNeUtleTogMTAsXG4gICAgICAgICAgICBNeVZhbHVlOiA5OVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHN0YWNrLnRvQ2xvdWRGb3JtYXRpb24oKSwge1xuICAgICAgICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgICAgICAgICAgUmVzb3VyY2U6IHtcbiAgICAgICAgICAgICAgICAgICAgVHlwZTogXCJUeXBlXCIsXG4gICAgICAgICAgICAgICAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBNeUtleTogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBNeVZhbHVlOiA5OVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3RoZSBcInR5cGVcIiBwcm9wZXJ0eSBpcyByZXF1aXJlZCB3aGVuIGNyZWF0aW5nIGEgcmVzb3VyY2UnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4gbmV3IFJlc291cmNlKHN0YWNrLCAnUmVzb3VyY2UnLCB7IG5vdHlwZWhlcmU6IHRydWUgfSBhcyBhbnkpKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICd0aGUgXCJuYW1lXCIgcHJvcGVydHkgaXMgZGVsZXRlZCB3aGVuIHN5bnRoZXNpemluZyBpbnRvIGEgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICAgICAgICBuZXcgUmVzb3VyY2Uoc3RhY2ssICdCbGEnLCB7XG4gICAgICAgICAgICB0eXBlOiAnTXlSZXNvdXJjZScsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgUHJvcDE6ICd2YWx1ZTEnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdCbGEnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHN0YWNrLnRvQ2xvdWRGb3JtYXRpb24oKSwgeyBSZXNvdXJjZXM6XG4gICAgICAgICAgICB7IEJsYTogeyBUeXBlOiAnTXlSZXNvdXJjZScsIFByb3BlcnRpZXM6IHsgUHJvcDE6ICd2YWx1ZTEnIH0gfSB9IH0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3JlbW92YWwgcG9saWN5IGlzIGEgaGlnaCBsZXZlbCBhYnN0cmFjdGlvbiBvZiBkZWxldGlvbiBwb2xpY3kgdXNlZCBieSBsMicodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gICAgICAgIGNvbnN0IG9ycGhhbiA9IG5ldyBSZXNvdXJjZShzdGFjaywgJ09ycGhhbicsIHsgdHlwZTogJ1QxJyB9KTtcbiAgICAgICAgY29uc3QgZm9yYmlkID0gbmV3IFJlc291cmNlKHN0YWNrLCAnRm9yYmlkJywgeyB0eXBlOiAnVDInIH0pO1xuICAgICAgICBjb25zdCBkZXN0cm95ID0gbmV3IFJlc291cmNlKHN0YWNrLCAnRGVzdHJveScsIHsgdHlwZTogJ1QzJyB9KTtcblxuICAgICAgICBhcHBseVJlbW92YWxQb2xpY3kob3JwaGFuLCBSZW1vdmFsUG9saWN5Lk9ycGhhbik7XG4gICAgICAgIGFwcGx5UmVtb3ZhbFBvbGljeShmb3JiaWQsIFJlbW92YWxQb2xpY3kuRm9yYmlkKTtcbiAgICAgICAgYXBwbHlSZW1vdmFsUG9saWN5KGRlc3Ryb3ksIFJlbW92YWxQb2xpY3kuRGVzdHJveSk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoc3RhY2sudG9DbG91ZEZvcm1hdGlvbigpLCB7IFJlc291cmNlczpcbiAgICAgICAgICAgIHsgT3JwaGFuOiB7IFR5cGU6ICdUMScsIERlbGV0aW9uUG9saWN5OiAnUmV0YWluJyB9LFxuICAgICAgICAgICAgICBGb3JiaWQ6IHsgVHlwZTogJ1QyJywgRGVsZXRpb25Qb2xpY3k6ICdSZXRhaW4nIH0sXG4gICAgICAgICAgICAgIERlc3Ryb3k6IHsgVHlwZTogJ1QzJyB9IH0gfSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnYWRkRGVwZW5kZW5jeSBhZGRzIGFsbCBkZXBlbmRlbmN5RWxlbWVudHMgb2YgZGVwZW5kZW50IGNvbnN0cnVjdHMnKHRlc3Q6IFRlc3QpIHtcblxuICAgICAgICBjbGFzcyBDMSBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElEZXBlbmRhYmxlIHtcbiAgICAgICAgICAgIHB1YmxpYyByZWFkb25seSByMTogUmVzb3VyY2U7XG4gICAgICAgICAgICBwdWJsaWMgcmVhZG9ubHkgcjI6IFJlc291cmNlO1xuICAgICAgICAgICAgcHVibGljIHJlYWRvbmx5IHIzOiBSZXNvdXJjZTtcblxuICAgICAgICAgICAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZykge1xuICAgICAgICAgICAgICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnIxID0gbmV3IFJlc291cmNlKHRoaXMsICdSMScsIHsgdHlwZTogJ1QxJyB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnIyID0gbmV3IFJlc291cmNlKHRoaXMsICdSMicsIHsgdHlwZTogJ1QyJyB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnIzID0gbmV3IFJlc291cmNlKHRoaXMsICdSMycsIHsgdHlwZTogJ1QzJyB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0IGRlcGVuZGVuY3lFbGVtZW50cygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWyB0aGlzLnIxLCB0aGlzLnIyIF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjbGFzcyBDMiBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElEZXBlbmRhYmxlIHtcbiAgICAgICAgICAgIHB1YmxpYyByZWFkb25seSByMTogUmVzb3VyY2U7XG4gICAgICAgICAgICBwdWJsaWMgcmVhZG9ubHkgcjI6IFJlc291cmNlO1xuICAgICAgICAgICAgcHVibGljIHJlYWRvbmx5IHIzOiBSZXNvdXJjZTtcblxuICAgICAgICAgICAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZykge1xuICAgICAgICAgICAgICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnIxID0gbmV3IFJlc291cmNlKHRoaXMsICdSMScsIHsgdHlwZTogJ1QxJyB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnIyID0gbmV3IFJlc291cmNlKHRoaXMsICdSMicsIHsgdHlwZTogJ1QyJyB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnIzID0gbmV3IFJlc291cmNlKHRoaXMsICdSMycsIHsgdHlwZTogJ1QzJyB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0IGRlcGVuZGVuY3lFbGVtZW50cygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWyB0aGlzLnIzIF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDMyByZXR1cm5zIFsgYzIgXSBmb3IgaXQncyBkZXBlbmRlbmN5IGVsZW1lbnRzXG4gICAgICAgIC8vIHRoaXMgc2hvdWxkIHJlc3VsdCBpbiAnZmxhdHRlbmluZycgdGhlIGxpc3Qgb2YgZWxlbWVudHMuXG4gICAgICAgIGNsYXNzIEMzIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSURlcGVuZGFibGUge1xuICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjMjogQzI7XG5cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5jMiA9IG5ldyBDMih0aGlzLCAnQzInKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0IGRlcGVuZGVuY3lFbGVtZW50cygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWyB0aGlzLmMyIF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgICAgICBjb25zdCBjMSA9IG5ldyBDMShzdGFjaywgJ015QzEnKTtcbiAgICAgICAgY29uc3QgYzIgPSBuZXcgQzIoc3RhY2ssICdNeUMyJyk7XG4gICAgICAgIGNvbnN0IGMzID0gbmV3IEMzKHN0YWNrLCAnTXlDMycpO1xuXG4gICAgICAgIGNvbnN0IGRlcGVuZGluZ1Jlc291cmNlID0gbmV3IFJlc291cmNlKHN0YWNrLCAnTXlSZXNvdXJjZScsIHsgdHlwZTogJ1InIH0pO1xuICAgICAgICBkZXBlbmRpbmdSZXNvdXJjZS5hZGREZXBlbmRlbmN5KGMxLCBjMik7XG4gICAgICAgIGRlcGVuZGluZ1Jlc291cmNlLmFkZERlcGVuZGVuY3koYzMpO1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHN0YWNrLnRvQ2xvdWRGb3JtYXRpb24oKSwgeyBSZXNvdXJjZXM6XG4gICAgICAgICAgICB7IE15QzFSMUZCMkE1NjJGOiB7IFR5cGU6ICdUMScgfSxcbiAgICAgICAgICAgICAgTXlDMVIyQUUyQjUwNjY6IHsgVHlwZTogJ1QyJyB9LFxuICAgICAgICAgICAgICBNeUMxUjM3NDk2N0QwMjogeyBUeXBlOiAnVDMnIH0sXG4gICAgICAgICAgICAgIE15QzJSMTNDOUE2MThEOiB7IFR5cGU6ICdUMScgfSxcbiAgICAgICAgICAgICAgTXlDMlIyNTMzMEY5MDU6IHsgVHlwZTogJ1QyJyB9LFxuICAgICAgICAgICAgICBNeUMyUjM4MDlFRUFENjogeyBUeXBlOiAnVDMnIH0sXG4gICAgICAgICAgICAgIE15QzNDMlIxQzY0NTUxQTc6IHsgVHlwZTogJ1QxJyB9LFxuICAgICAgICAgICAgICBNeUMzQzJSMkYyMTNCRDI2OiB7IFR5cGU6ICdUMicgfSxcbiAgICAgICAgICAgICAgTXlDM0MyUjM4Q0U2RjlGNzogeyBUeXBlOiAnVDMnIH0sXG4gICAgICAgICAgICAgIE15UmVzb3VyY2U6XG4gICAgICAgICAgICAgICB7IFR5cGU6ICdSJyxcbiAgICAgICAgICAgICAgICAgRGVwZW5kc09uOlxuICAgICAgICAgICAgICAgICAgWyAnTXlDMVIxRkIyQTU2MkYnLFxuICAgICAgICAgICAgICAgICAgICAnTXlDMVIyQUUyQjUwNjYnLFxuICAgICAgICAgICAgICAgICAgICAnTXlDMlIzODA5RUVBRDYnLFxuICAgICAgICAgICAgICAgICAgICAnTXlDM0MyUjM4Q0U2RjlGNycgXSB9IH0gfSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAncmVzb3VyY2UucmVmIHJldHVybnMgdGhlIHtSZWZ9IHRva2VuJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgICAgIGNvbnN0IHIgPSBuZXcgUmVzb3VyY2Uoc3RhY2ssICdNeVJlc291cmNlJywgeyB0eXBlOiAnUicgfSk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShyLnJlZiksIHsgUmVmOiAnTXlSZXNvdXJjZScgfSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH1cbn07XG5cbmludGVyZmFjZSBDb3VudGVyUHJvcHMge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gICAgQ291bnQ6IG51bWJlcjtcbn1cblxuY2xhc3MgQ291bnRlciBleHRlbmRzIFJlc291cmNlIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgYXJuOiBzdHJpbmc7XG4gICAgcHVibGljIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IENvdW50ZXJQcm9wcykge1xuICAgICAgICBzdXBlcihwYXJlbnQsIG5hbWUsIHsgdHlwZTogJ015OjpDb3VudGVyJywgcHJvcGVydGllczogeyBDb3VudDogcHJvcHMuQ291bnQgfSB9KTtcbiAgICAgICAgdGhpcy5hcm4gPSB0aGlzLmdldEF0dCgnQXJuJykudG9TdHJpbmcoKTtcbiAgICAgICAgdGhpcy51cmwgPSB0aGlzLmdldEF0dCgnVVJMJykudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5jcmVtZW50KGJ5ID0gMSkge1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMuQ291bnQgKz0gYnk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB3aXRob3V0SGFzaChsb2dJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGxvZ0lkLnN1YnN0cigwLCBsb2dJZC5sZW5ndGggLSA4KTtcbn1cbiJdfQ==

@@ -20,3 +20,5 @@ import { Test } from 'nodeunit';

'side-by-side Tokens resolve correctly'(test: Test): void;
'tokens can be used in hash keys but must resolve to a string'(test: Test): void;
'fails if token in a hash key resolves to a non-string'(test: Test): void;
};
export = _default;

@@ -164,5 +164,5 @@ "use strict";

'isToken(obj) can be used to determine if an object is a token'(test) {
test.ok(lib_1.isToken({ resolve: () => 123 }));
test.ok(lib_1.isToken({ a: 1, b: 2, resolve: () => 'hello' }));
test.ok(!lib_1.isToken({ a: 1, b: 2, resolve: 3 }));
test.ok(lib_1.unresolved({ resolve: () => 123 }));
test.ok(lib_1.unresolved({ a: 1, b: 2, resolve: () => 'hello' }));
test.ok(!lib_1.unresolved({ a: 1, b: 2, resolve: 3 }));
test.done();

@@ -260,3 +260,25 @@ },

},
'tokens can be used in hash keys but must resolve to a string'(test) {
// GIVEN
const token = new lib_1.Token(() => 'I am a string');
// WHEN
const s = {
[token.toString()]: `boom ${token}`
};
// THEN
test.deepEqual(lib_1.resolve(s), { 'I am a string': 'boom I am a string' });
test.done();
},
'fails if token in a hash key resolves to a non-string'(test) {
// GIVEN
const token = new lib_1.CloudFormationToken({ Ref: 'Other' });
// WHEN
const s = {
[token.toString()]: `boom ${token}`
};
// THEN
test.throws(() => lib_1.resolve(s), 'The key "${Token[TOKEN.19]}" has been resolved to {"Ref":"Other"} but must be resolvable to a string');
test.done();
}
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC50b2tlbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LnRva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsbUNBQXlFO0FBQ3pFLGlFQUE2RDtBQW9QN0QsTUFBTSxRQUFTLFNBQVEsV0FBSztJQUNqQixPQUFPO1FBQ1YsT0FBTztZQUNILElBQUksRUFBRTtnQkFDRixVQUFVLEVBQUUsT0FBTztnQkFDbkIsVUFBVSxFQUFFLElBQUk7YUFDbkI7WUFDRCxPQUFPLEVBQUUsSUFBSSxXQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQy9CLENBQUM7SUFDTixDQUFDO0NBQ0o7QUFFRCxNQUFNLFFBQVMsU0FBUSxXQUFLO0lBQTVCOztRQUNXLE9BQUUsR0FBRyxDQUFFLElBQUksUUFBUSxFQUFFLEVBQUUsSUFBSSxRQUFRLEVBQUUsQ0FBRSxDQUFDO0lBS25ELENBQUM7SUFIVSxPQUFPO1FBQ1YsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ25CLENBQUM7Q0FDSjtBQUVELE1BQU0sWUFBWTtJQUNkLFlBQXFCLEdBQVc7UUFBWCxRQUFHLEdBQUgsR0FBRyxDQUFRO0lBQ2hDLENBQUM7Q0FDSjtBQUVELE1BQU0sUUFBUyxTQUFRLFlBQVk7SUFHL0I7UUFDSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFIUCxRQUFHLEdBQUcsT0FBTyxDQUFDO0lBSXJCLENBQUM7Q0FDSjtBQUVEOztHQUVHO0FBQ0gsU0FBUywwQkFBMEIsQ0FBQyxLQUFVO0lBQzFDLE9BQU87UUFDSCxJQUFJLFdBQUssQ0FBQyxLQUFLLENBQUM7UUFDaEIsSUFBSSxXQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO0tBQ3pCLENBQUM7QUFDTixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGlDQUFpQyxDQUFDLEtBQVU7SUFDakQsT0FBTztRQUNILElBQUkseUJBQW1CLENBQUMsS0FBSyxDQUFDO1FBQzlCLElBQUks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QUNwRDtTQUNKO1FBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uVG9rZW4sIGlzVG9rZW4sIHJlc29sdmUsIFRva2VuIH0gZnJvbSAnLi4vLi4vbGliJztcbmltcG9ydCB7IGV2YWx1YXRlQ0ZOIH0gZnJvbSAnLi4vY2xvdWRmb3JtYXRpb24vZXZhbHVhdGUtY2ZuJztcblxuZXhwb3J0ID0ge1xuICAgICdyZXNvbHZlIGEgcGxhaW4gb2xkIG9iamVjdCBzaG91bGQganVzdCByZXR1cm4gdGhlIG9iamVjdCcodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBvYmogPSB7IFBsYWluT2xkT2JqZWN0OiAxMjMsIEFycmF5OiBbIDEsIDIsIDMgXSB9O1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKG9iaiksIG9iaik7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnaWYgYSB2YWx1ZSBpcyBhbiBvYmplY3Qgd2l0aCBhIHRva2VuIHZhbHVlLCBpdCB3aWxsIGJlIGV2YWx1YXRlZCcodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBSZWd1bGFyVmFsdWU6ICdoZWxsbycsXG4gICAgICAgICAgICBMYXp5VmFsdWU6IG5ldyBUb2tlbignV29ybGQnKVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUob2JqKSwge1xuICAgICAgICAgICAgUmVndWxhclZhbHVlOiAnaGVsbG8nLFxuICAgICAgICAgICAgTGF6eVZhbHVlOiAnV29ybGQnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAndG9rZW5zIGFyZSBldmFsdWF0ZWQgYW55d2hlcmUgaW4gdGhlIG9iamVjdCB0cmVlJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IG5ldyBQcm9taXNlMSgpO1xuICAgICAgICBjb25zdCBhY3R1YWwgPSByZXNvbHZlKHsgT2JqOiBvYmogfSk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoYWN0dWFsLCB7XG4gICAgICAgICAgICBPYmo6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIERhdGE6IHtcbiAgICAgICAgICAgICAgICAgIHN0cmluZ1Byb3A6IFwiaGVsbG9cIixcbiAgICAgICAgICAgICAgICAgIG51bWJlclByb3A6IDEyMzRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFJlY3Vyc2U6IDQyXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBEYXRhOiB7XG4gICAgICAgICAgICAgICAgICBzdHJpbmdQcm9wOiBcImhlbGxvXCIsXG4gICAgICAgICAgICAgICAgICBudW1iZXJQcm9wOiAxMjM0XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBSZWN1cnNlOiA0MlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAndG9rZW5zIGFyZSBldmFsdWF0ZWQgcmVjdXJzaXZlbHknKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gbmV3IFByb21pc2UxKCk7XG4gICAgICAgIGNvbnN0IGFjdHVhbCA9IHJlc29sdmUobmV3IFRva2VuKCgpID0+ICh7IE9iajogb2JqIH0pKSk7XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoYWN0dWFsLCB7XG4gICAgICAgICAgICBPYmo6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIERhdGE6IHtcbiAgICAgICAgICAgICAgICAgIHN0cmluZ1Byb3A6IFwiaGVsbG9cIixcbiAgICAgICAgICAgICAgICAgIG51bWJlclByb3A6IDEyMzRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFJlY3Vyc2U6IDQyXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBEYXRhOiB7XG4gICAgICAgICAgICAgICAgICBzdHJpbmdQcm9wOiBcImhlbGxvXCIsXG4gICAgICAgICAgICAgICAgICBudW1iZXJQcm9wOiAxMjM0XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBSZWN1cnNlOiA0MlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnZW1wdHkgYXJyYXlzIG9yIG9iamVjdHMgYXJlIGtlcHQnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZSh7IH0pLCB7IH0pO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKFsgXSksIFsgXSk7XG5cbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgUHJvcDE6IDEyMzQsXG4gICAgICAgICAgICBQcm9wMjogeyB9LFxuICAgICAgICAgICAgUHJvcDM6IFsgXSxcbiAgICAgICAgICAgIFByb3A0OiAnaGVsbG8nLFxuICAgICAgICAgICAgUHJvcDU6IHtcbiAgICAgICAgICAgICAgICBQcm9wQTogeyB9LFxuICAgICAgICAgICAgICAgIFByb3BCOiB7XG4gICAgICAgICAgICAgICAgICAgIFByb3BDOiBbIHVuZGVmaW5lZCwgdW5kZWZpbmVkIF0sXG4gICAgICAgICAgICAgICAgICAgIFByb3BEOiAnWW9vaG9vJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKG9iaiksIHtcbiAgICAgICAgICAgIFByb3AxOiAxMjM0LFxuICAgICAgICAgICAgUHJvcDI6IHsgfSxcbiAgICAgICAgICAgIFByb3AzOiBbIF0sXG4gICAgICAgICAgICBQcm9wNDogJ2hlbGxvJyxcbiAgICAgICAgICAgIFByb3A1OiB7XG4gICAgICAgICAgICAgICAgUHJvcEE6IHsgfSxcbiAgICAgICAgICAgICAgICBQcm9wQjoge1xuICAgICAgICAgICAgICAgICAgICBQcm9wQzogWyBdLFxuICAgICAgICAgICAgICAgICAgICBQcm9wRDogJ1lvb2hvbydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnaWYgYW4gb2JqZWN0IGhhcyBhIFwicmVzb2x2ZVwiIHByb3BlcnR5IHRoYXQgaXMgbm90IGEgZnVuY3Rpb24sIGl0IGlzIG5vdCBjb25zaWRlcmVkIGEgdG9rZW4nKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZSh7IGFfdG9rZW46IHsgcmVzb2x2ZTogKCkgPT4gNzg3ODcgfX0pLCB7IGFfdG9rZW46IDc4Nzg3IH0pO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHsgbm90X2FfdG9rZW46IHsgcmVzb2x2ZTogMTIgfSB9KSwgICAgIHsgbm90X2FfdG9rZW46IHsgcmVzb2x2ZTogMTIgfSB9KTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAnaWYgYSByZXNvbHZhYmxlIG9iamVjdCBpbmhlcml0cyBmcm9tIGEgY2xhc3MgdGhhdCBpcyBhbHNvIHJlc29sdmFibGUsIHRoZSBcImNvbnN0cnVjdG9yXCIgZnVuY3Rpb24gd2lsbCBub3QgZ2V0IGluIHRoZSB3YXkgKHVzZXMgT2JqZWN0LmtleXMgaW5zdGVhZCBvZiBcImZvciBpblwiKScodGVzdDogVGVzdCkge1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKHsgcHJvcDogbmV3IERhdGFUeXBlKCkgfSksIHsgcHJvcDogeyBmb286IDEyLCBnb286ICdoZWxsbycgfSB9KTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdpc1Rva2VuKG9iaikgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBhIHRva2VuJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIHRlc3Qub2soaXNUb2tlbih7IHJlc29sdmU6ICgpID0+IDEyMyB9KSk7XG4gICAgICAgIHRlc3Qub2soaXNUb2tlbih7IGE6IDEsIGI6IDIsIHJlc29sdmU6ICgpID0+ICdoZWxsbycgfSkpO1xuICAgICAgICB0ZXN0Lm9rKCFpc1Rva2VuKHsgYTogMSwgYjogMiwgcmVzb2x2ZTogMyB9KSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnVG9rZW4gY2FuIGJlIHVzZWQgdG8gY3JlYXRlIHRva2VucyB0aGF0IGNvbnRhaW4gYSBjb25zdGFudCB2YWx1ZScodGVzdDogVGVzdCkge1xuICAgICAgICB0ZXN0LmVxdWFsKHJlc29sdmUobmV3IFRva2VuKDEyKSksIDEyKTtcbiAgICAgICAgdGVzdC5lcXVhbChyZXNvbHZlKG5ldyBUb2tlbignaGVsbG8nKSksICdoZWxsbycpO1xuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKG5ldyBUb2tlbihbICdoaScsICd0aGVyZScgXSkpLCBbICdoaScsICd0aGVyZScgXSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAncmVzb2x2aW5nIGxlYXZlcyBhIERhdGUgb2JqZWN0IGluIHdvcmtpbmcgb3JkZXInKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCcyMDAwLTAxLTAxJyk7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShkYXRlKTtcblxuICAgICAgICB0ZXN0LmVxdWFsKGRhdGUudG9TdHJpbmcoKSwgcmVzb2x2ZWQudG9TdHJpbmcoKSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAndG9rZW5zIGNhbiBiZSBzdHJpbmdpZmllZCBhbmQgZXZhbHVhdGVkIHRvIGNvbmNlcHR1YWwgdmFsdWUnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4oKCkgPT4gJ3dvb2Ygd29vZicpO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSBgVGhlIGRvZyBzYXlzOiAke3Rva2VufWA7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShzdHJpbmdpZmllZCk7XG5cbiAgICAgICAgLy8gVEhFTlxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlZCksICdUaGUgZG9nIHNheXM6IHdvb2Ygd29vZicpO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ1Rva2VucyBzdHJpbmdpZmljYXRpb24gYW5kIHJldmVyc2luZyBvZiBDbG91ZEZvcm1hdGlvbiBUb2tlbnMgaXMgaW1wbGVtZW50ZWQgdXNpbmcgRm46OkpvaW4nKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgY29uc3QgdG9rZW4gPSBuZXcgQ2xvdWRGb3JtYXRpb25Ub2tlbigoKSA9PiAnd29vZiB3b29mJyk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBjb25zdCBzdHJpbmdpZmllZCA9IGBUaGUgZG9nIHNheXM6ICR7dG9rZW59YDtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKHN0cmluZ2lmaWVkKTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmVkLCB7XG4gICAgICAgICAgICAnRm46OkpvaW4nOiBbJycsIFsnVGhlIGRvZyBzYXlzOiAnLCAnd29vZiB3b29mJ11dXG4gICAgICAgIH0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ0RvdWJseSBuZXN0ZWQgc3RyaW5ncyBldmFsdWF0ZSBjb3JyZWN0bHkgaW4gc2NhbGFyIGNvbnRleHQnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgY29uc3QgdG9rZW4xID0gbmV3IFRva2VuKCgpID0+IFwid29ybGRcIik7XG4gICAgICAgIGNvbnN0IHRva2VuMiA9IG5ldyBUb2tlbigoKSA9PiBgaGVsbG8gJHt0b2tlbjF9YCk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBjb25zdCByZXNvbHZlZDEgPSByZXNvbHZlKHRva2VuMi50b1N0cmluZygpKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQyID0gcmVzb2x2ZSh0b2tlbjIpO1xuXG4gICAgICAgIC8vIFRIRU5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoZXZhbHVhdGVDRk4ocmVzb2x2ZWQxKSwgXCJoZWxsbyB3b3JsZFwiKTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoZXZhbHVhdGVDRk4ocmVzb2x2ZWQyKSwgXCJoZWxsbyB3b3JsZFwiKTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2ludGVnZXIgVG9rZW5zIGNhbiBiZSBzdHJpbmdpZmllZCBhbmQgZXZhbHVhdGUgdG8gY29uY2VwdHVhbCB2YWx1ZScodGVzdDogVGVzdCkge1xuICAgICAgICAvLyBHSVZFTlxuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIGxpdGVyYWxUb2tlbnNUaGF0UmVzb2x2ZVRvKDEpKSB7XG4gICAgICAgICAgICAvLyBXSEVOXG4gICAgICAgICAgICBjb25zdCBzdHJpbmdpZmllZCA9IGB0aGUgbnVtYmVyIGlzICR7dG9rZW59YDtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShzdHJpbmdpZmllZCk7XG5cbiAgICAgICAgICAgIC8vIFRIRU5cbiAgICAgICAgICAgIHRlc3QuZGVlcEVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmVkKSwgJ3RoZSBudW1iZXIgaXMgMScpO1xuICAgICAgICB9XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnaW50cmluc2ljIFRva2VucyBjYW4gYmUgc3RyaW5naWZpZWQgYW5kIGV2YWx1YXRlIHRvIGNvbmNlcHR1YWwgdmFsdWUnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgZm9yIChjb25zdCBidWNrZXROYW1lIG9mIGNsb3VkRm9ybWF0aW9uVG9rZW5zVGhhdFJlc29sdmVUbyh7IFJlZjogJ015QnVja2V0JyB9KSkge1xuICAgICAgICAgICAgLy8gV0hFTlxuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKGBteSBidWNrZXQgaXMgbmFtZWQgJHtidWNrZXROYW1lfWApO1xuXG4gICAgICAgICAgICAvLyBUSEVOXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge015QnVja2V0OiAnVGhlTmFtZSd9O1xuICAgICAgICAgICAgdGVzdC5lcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlZCwgY29udGV4dCksICdteSBidWNrZXQgaXMgbmFtZWQgVGhlTmFtZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICd0b2tlbnMgcmVzb2x2ZSBwcm9wZXJseSBpbiBpbml0aWFsIHBvc2l0aW9uJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zVGhhdFJlc29sdmVUbygnSGVsbG8nKSkge1xuICAgICAgICAgICAgLy8gV0hFTlxuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKGAke3Rva2VufSB3b3JsZGApO1xuXG4gICAgICAgICAgICAvLyBUSEVOXG4gICAgICAgICAgICB0ZXN0LmVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmVkKSwgJ0hlbGxvIHdvcmxkJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3NpZGUtYnktc2lkZSBUb2tlbnMgcmVzb2x2ZSBjb3JyZWN0bHknKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgZm9yIChjb25zdCB0b2tlbjEgb2YgdG9rZW5zVGhhdFJlc29sdmVUbygnSGVsbG8gJykpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdG9rZW4yIG9mIHRva2Vuc1RoYXRSZXNvbHZlVG8oJ3dvcmxkJykpIHtcbiAgICAgICAgICAgICAgICAvLyBXSEVOXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKGAke3Rva2VuMX0ke3Rva2VuMn1gKTtcblxuICAgICAgICAgICAgICAgIC8vIFRIRU5cbiAgICAgICAgICAgICAgICB0ZXN0LmVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmVkKSwgJ0hlbGxvIHdvcmxkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxufTtcblxuY2xhc3MgUHJvbWlzZTIgZXh0ZW5kcyBUb2tlbiB7XG4gICAgcHVibGljIHJlc29sdmUoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBEYXRhOiB7XG4gICAgICAgICAgICAgICAgc3RyaW5nUHJvcDogJ2hlbGxvJyxcbiAgICAgICAgICAgICAgICBudW1iZXJQcm9wOiAxMjM0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFJlY3Vyc2U6IG5ldyBUb2tlbigoKSA9PiA0MilcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmNsYXNzIFByb21pc2UxIGV4dGVuZHMgVG9rZW4ge1xuICAgIHB1YmxpYyBwMiA9IFsgbmV3IFByb21pc2UyKCksIG5ldyBQcm9taXNlMigpIF07XG5cbiAgICBwdWJsaWMgcmVzb2x2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucDI7XG4gICAgfVxufVxuXG5jbGFzcyBCYXNlRGF0YVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGZvbzogbnVtYmVyKSB7XG4gICAgfVxufVxuXG5jbGFzcyBEYXRhVHlwZSBleHRlbmRzIEJhc2VEYXRhVHlwZSB7XG4gICAgcHVibGljIGdvbyA9ICdoZWxsbyc7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoMTIpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdmFyaW91cyBmbGF2b3JzIG9mIFRva2VucyB0aGF0IHJlc29sdmUgdG8gdGhlIGdpdmVuIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGxpdGVyYWxUb2tlbnNUaGF0UmVzb2x2ZVRvKHZhbHVlOiBhbnkpOiBUb2tlbltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgICBuZXcgVG9rZW4odmFsdWUpLFxuICAgICAgICBuZXcgVG9rZW4oKCkgPT4gdmFsdWUpXG4gICAgXTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdmFyaW91cyBmbGF2b3JzIG9mIFRva2VucyB0aGF0IHJlc29sdmUgdG8gdGhlIGdpdmVuIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGNsb3VkRm9ybWF0aW9uVG9rZW5zVGhhdFJlc29sdmVUbyh2YWx1ZTogYW55KTogVG9rZW5bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgbmV3IENsb3VkRm9ybWF0aW9uVG9rZW4odmFsdWUpLFxuICAgICAgICBuZXcgQ2xvdWRGb3JtYXRpb25Ub2tlbigoKSA9PiB2YWx1ZSlcbiAgICBdO1xufVxuXG4vKipcbiAqIFJldHVybiBUb2tlbnMgaW4gYm90aCBmbGF2b3JzIHRoYXQgcmVzb2x2ZSB0byB0aGUgZ2l2ZW4gc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHRva2Vuc1RoYXRSZXNvbHZlVG8odmFsdWU6IHN0cmluZyk6IFRva2VuW10ge1xuICAgIHJldHVybiBsaXRlcmFsVG9rZW5zVGhhdFJlc29sdmVUbyh2YWx1ZSkuY29uY2F0KGNsb3VkRm9ybWF0aW9uVG9rZW5zVGhhdFJlc29sdmVUbyh2YWx1ZSkpO1xufSJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC50b2tlbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LnRva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsbUNBQTRFO0FBQzVFLGlFQUE2RDtBQWdSN0QsTUFBTSxRQUFTLFNBQVEsV0FBSztJQUNqQixPQUFPO1FBQ1YsT0FBTztZQUNILElBQUksRUFBRTtnQkFDRixVQUFVLEVBQUUsT0FBTztnQkFDbkIsVUFBVSxFQUFFLElBQUk7YUFDbkI7WUFDRCxPQUFPLEVBQUUsSUFBSSxXQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQy9CLENBQUM7SUFDTixDQUFDO0NBQ0o7QUFFRCxNQUFNLFFBQVMsU0FBUSxXQUFLO0lBQTVCOztRQUNXLE9BQUUsR0FBRyxDQUFFLElBQUksUUFBUSxFQUFFLEVBQUUsSUFBSSxRQUFRLEVBQUUsQ0FBRSxDQUFDO0lBS25ELENBQUM7SUFIVSxPQUFPO1FBQ1YsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ25CLENBQUM7Q0FDSjtBQUVELE1BQU0sWUFBWTtJQUNkLFlBQXFCLEdBQVc7UUFBWCxRQUFHLEdBQUgsR0FBRyxDQUFRO0lBQ2hDLENBQUM7Q0FDSjtBQUVELE1BQU0sUUFBUyxTQUFRLFlBQVk7SUFHL0I7UUFDSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFIUCxRQUFHLEdBQUcsT0FBTyxDQUFDO0lBSXJCLENBQUM7Q0FDSjtBQUVEOztHQUVHO0FBQ0gsU0FBUywwQkFBMEIsQ0FBQyxLQUFVO0lBQzFDLE9BQU87UUFDSCxJQUFJLFdBQUssQ0FBQyxLQUFLLENBQUM7UUFDaEIsSUFBSSxXQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO0tBQ3pCLENBQUM7QUFDTixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGlDQUFpQyxDQUFDLEtBQVU7SUFDakQsT0FBTztRQUNILElBQUkseUJBQW1CLENBQUMsS0FBSyxDQUFDO1FBQzlCLElBQUks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QzthQUNwRDtTQUNKO1FBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCw4REFBOEQsQ0FBQyxJQUFVO1FBQ3JFLFFBQVE7UUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUUvQyxPQUFPO1FBQ1AsTUFBTSxDQUFDLEdBQUc7WUFDTixDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLFFBQVEsS0FBSyxFQUFFO1NBQ3RDLENBQUM7UUFFRixPQUFPO1FBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsdURBQXVELENBQUMsSUFBVTtRQUM5RCxRQUFRO1FBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSx5QkFBbUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBRXhELE9BQU87UUFDUCxNQUFNLENBQUMsR0FBRztZQUNOLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxLQUFLLEVBQUU7U0FDdEMsQ0FBQztRQUVGLE9BQU87UUFDUCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxzR0FBc0csQ0FBQyxDQUFDO1FBQ3RJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3QgfSBmcm9tICdub2RldW5pdCc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvblRva2VuLCByZXNvbHZlLCBUb2tlbiwgdW5yZXNvbHZlZCB9IGZyb20gJy4uLy4uL2xpYic7XG5pbXBvcnQgeyBldmFsdWF0ZUNGTiB9IGZyb20gJy4uL2Nsb3VkZm9ybWF0aW9uL2V2YWx1YXRlLWNmbic7XG5cbmV4cG9ydCA9IHtcbiAgICAncmVzb2x2ZSBhIHBsYWluIG9sZCBvYmplY3Qgc2hvdWxkIGp1c3QgcmV0dXJuIHRoZSBvYmplY3QnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgb2JqID0geyBQbGFpbk9sZE9iamVjdDogMTIzLCBBcnJheTogWyAxLCAyLCAzIF0gfTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShvYmopLCBvYmopO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2lmIGEgdmFsdWUgaXMgYW4gb2JqZWN0IHdpdGggYSB0b2tlbiB2YWx1ZSwgaXQgd2lsbCBiZSBldmFsdWF0ZWQnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgUmVndWxhclZhbHVlOiAnaGVsbG8nLFxuICAgICAgICAgICAgTGF6eVZhbHVlOiBuZXcgVG9rZW4oJ1dvcmxkJylcbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlKG9iaiksIHtcbiAgICAgICAgICAgIFJlZ3VsYXJWYWx1ZTogJ2hlbGxvJyxcbiAgICAgICAgICAgIExhenlWYWx1ZTogJ1dvcmxkJ1xuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3Rva2VucyBhcmUgZXZhbHVhdGVkIGFueXdoZXJlIGluIHRoZSBvYmplY3QgdHJlZScodGVzdDogVGVzdCkge1xuICAgICAgICBjb25zdCBvYmogPSBuZXcgUHJvbWlzZTEoKTtcbiAgICAgICAgY29uc3QgYWN0dWFsID0gcmVzb2x2ZSh7IE9iajogb2JqIH0pO1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGFjdHVhbCwge1xuICAgICAgICAgICAgT2JqOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBEYXRhOiB7XG4gICAgICAgICAgICAgICAgICBzdHJpbmdQcm9wOiBcImhlbGxvXCIsXG4gICAgICAgICAgICAgICAgICBudW1iZXJQcm9wOiAxMjM0XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBSZWN1cnNlOiA0MlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRGF0YToge1xuICAgICAgICAgICAgICAgICAgc3RyaW5nUHJvcDogXCJoZWxsb1wiLFxuICAgICAgICAgICAgICAgICAgbnVtYmVyUHJvcDogMTIzNFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgUmVjdXJzZTogNDJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3Rva2VucyBhcmUgZXZhbHVhdGVkIHJlY3Vyc2l2ZWx5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IG5ldyBQcm9taXNlMSgpO1xuICAgICAgICBjb25zdCBhY3R1YWwgPSByZXNvbHZlKG5ldyBUb2tlbigoKSA9PiAoeyBPYmo6IG9iaiB9KSkpO1xuXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGFjdHVhbCwge1xuICAgICAgICAgICAgT2JqOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBEYXRhOiB7XG4gICAgICAgICAgICAgICAgICBzdHJpbmdQcm9wOiBcImhlbGxvXCIsXG4gICAgICAgICAgICAgICAgICBudW1iZXJQcm9wOiAxMjM0XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBSZWN1cnNlOiA0MlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRGF0YToge1xuICAgICAgICAgICAgICAgICAgc3RyaW5nUHJvcDogXCJoZWxsb1wiLFxuICAgICAgICAgICAgICAgICAgbnVtYmVyUHJvcDogMTIzNFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgUmVjdXJzZTogNDJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2VtcHR5IGFycmF5cyBvciBvYmplY3RzIGFyZSBrZXB0Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUoeyB9KSwgeyB9KTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShbIF0pLCBbIF0pO1xuXG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIFByb3AxOiAxMjM0LFxuICAgICAgICAgICAgUHJvcDI6IHsgfSxcbiAgICAgICAgICAgIFByb3AzOiBbIF0sXG4gICAgICAgICAgICBQcm9wNDogJ2hlbGxvJyxcbiAgICAgICAgICAgIFByb3A1OiB7XG4gICAgICAgICAgICAgICAgUHJvcEE6IHsgfSxcbiAgICAgICAgICAgICAgICBQcm9wQjoge1xuICAgICAgICAgICAgICAgICAgICBQcm9wQzogWyB1bmRlZmluZWQsIHVuZGVmaW5lZCBdLFxuICAgICAgICAgICAgICAgICAgICBQcm9wRDogJ1lvb2hvbydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShvYmopLCB7XG4gICAgICAgICAgICBQcm9wMTogMTIzNCxcbiAgICAgICAgICAgIFByb3AyOiB7IH0sXG4gICAgICAgICAgICBQcm9wMzogWyBdLFxuICAgICAgICAgICAgUHJvcDQ6ICdoZWxsbycsXG4gICAgICAgICAgICBQcm9wNToge1xuICAgICAgICAgICAgICAgIFByb3BBOiB7IH0sXG4gICAgICAgICAgICAgICAgUHJvcEI6IHtcbiAgICAgICAgICAgICAgICAgICAgUHJvcEM6IFsgXSxcbiAgICAgICAgICAgICAgICAgICAgUHJvcEQ6ICdZb29ob28nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2lmIGFuIG9iamVjdCBoYXMgYSBcInJlc29sdmVcIiBwcm9wZXJ0eSB0aGF0IGlzIG5vdCBhIGZ1bmN0aW9uLCBpdCBpcyBub3QgY29uc2lkZXJlZCBhIHRva2VuJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKHJlc29sdmUoeyBhX3Rva2VuOiB7IHJlc29sdmU6ICgpID0+IDc4Nzg3IH19KSwgeyBhX3Rva2VuOiA3ODc4NyB9KTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZSh7IG5vdF9hX3Rva2VuOiB7IHJlc29sdmU6IDEyIH0gfSksICAgICB7IG5vdF9hX3Rva2VuOiB7IHJlc29sdmU6IDEyIH0gfSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgJ2lmIGEgcmVzb2x2YWJsZSBvYmplY3QgaW5oZXJpdHMgZnJvbSBhIGNsYXNzIHRoYXQgaXMgYWxzbyByZXNvbHZhYmxlLCB0aGUgXCJjb25zdHJ1Y3RvclwiIGZ1bmN0aW9uIHdpbGwgbm90IGdldCBpbiB0aGUgd2F5ICh1c2VzIE9iamVjdC5rZXlzIGluc3RlYWQgb2YgXCJmb3IgaW5cIiknKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZSh7IHByb3A6IG5ldyBEYXRhVHlwZSgpIH0pLCB7IHByb3A6IHsgZm9vOiAxMiwgZ29vOiAnaGVsbG8nIH0gfSk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAnaXNUb2tlbihvYmopIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSBpZiBhbiBvYmplY3QgaXMgYSB0b2tlbicodGVzdDogVGVzdCkge1xuICAgICAgICB0ZXN0Lm9rKHVucmVzb2x2ZWQoeyByZXNvbHZlOiAoKSA9PiAxMjMgfSkpO1xuICAgICAgICB0ZXN0Lm9rKHVucmVzb2x2ZWQoeyBhOiAxLCBiOiAyLCByZXNvbHZlOiAoKSA9PiAnaGVsbG8nIH0pKTtcbiAgICAgICAgdGVzdC5vayghdW5yZXNvbHZlZCh7IGE6IDEsIGI6IDIsIHJlc29sdmU6IDMgfSkpO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ1Rva2VuIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSB0b2tlbnMgdGhhdCBjb250YWluIGEgY29uc3RhbnQgdmFsdWUnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgdGVzdC5lcXVhbChyZXNvbHZlKG5ldyBUb2tlbigxMikpLCAxMik7XG4gICAgICAgIHRlc3QuZXF1YWwocmVzb2x2ZShuZXcgVG9rZW4oJ2hlbGxvJykpLCAnaGVsbG8nKTtcbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShuZXcgVG9rZW4oWyAnaGknLCAndGhlcmUnIF0pKSwgWyAnaGknLCAndGhlcmUnIF0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3Jlc29sdmluZyBsZWF2ZXMgYSBEYXRlIG9iamVjdCBpbiB3b3JraW5nIG9yZGVyJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgnMjAwMC0wMS0wMScpO1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoZGF0ZSk7XG5cbiAgICAgICAgdGVzdC5lcXVhbChkYXRlLnRvU3RyaW5nKCksIHJlc29sdmVkLnRvU3RyaW5nKCkpO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ3Rva2VucyBjYW4gYmUgc3RyaW5naWZpZWQgYW5kIGV2YWx1YXRlZCB0byBjb25jZXB0dWFsIHZhbHVlJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGNvbnN0IHRva2VuID0gbmV3IFRva2VuKCgpID0+ICd3b29mIHdvb2YnKTtcblxuICAgICAgICAvLyBXSEVOXG4gICAgICAgIGNvbnN0IHN0cmluZ2lmaWVkID0gYFRoZSBkb2cgc2F5czogJHt0b2tlbn1gO1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoc3RyaW5naWZpZWQpO1xuXG4gICAgICAgIC8vIFRIRU5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwoZXZhbHVhdGVDRk4ocmVzb2x2ZWQpLCAnVGhlIGRvZyBzYXlzOiB3b29mIHdvb2YnKTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdUb2tlbnMgc3RyaW5naWZpY2F0aW9uIGFuZCByZXZlcnNpbmcgb2YgQ2xvdWRGb3JtYXRpb24gVG9rZW5zIGlzIGltcGxlbWVudGVkIHVzaW5nIEZuOjpKb2luJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGNvbnN0IHRva2VuID0gbmV3IENsb3VkRm9ybWF0aW9uVG9rZW4oKCkgPT4gJ3dvb2Ygd29vZicpO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSBgVGhlIGRvZyBzYXlzOiAke3Rva2VufWA7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShzdHJpbmdpZmllZCk7XG5cbiAgICAgICAgLy8gVEhFTlxuICAgICAgICB0ZXN0LmRlZXBFcXVhbChyZXNvbHZlZCwge1xuICAgICAgICAgICAgJ0ZuOjpKb2luJzogWycnLCBbJ1RoZSBkb2cgc2F5czogJywgJ3dvb2Ygd29vZiddXVxuICAgICAgICB9KTtcbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdEb3VibHkgbmVzdGVkIHN0cmluZ3MgZXZhbHVhdGUgY29ycmVjdGx5IGluIHNjYWxhciBjb250ZXh0Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGNvbnN0IHRva2VuMSA9IG5ldyBUb2tlbigoKSA9PiBcIndvcmxkXCIpO1xuICAgICAgICBjb25zdCB0b2tlbjIgPSBuZXcgVG9rZW4oKCkgPT4gYGhlbGxvICR7dG9rZW4xfWApO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWQxID0gcmVzb2x2ZSh0b2tlbjIudG9TdHJpbmcoKSk7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkMiA9IHJlc29sdmUodG9rZW4yKTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmVkMSksIFwiaGVsbG8gd29ybGRcIik7XG4gICAgICAgIHRlc3QuZGVlcEVxdWFsKGV2YWx1YXRlQ0ZOKHJlc29sdmVkMiksIFwiaGVsbG8gd29ybGRcIik7XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdpbnRlZ2VyIFRva2VucyBjYW4gYmUgc3RyaW5naWZpZWQgYW5kIGV2YWx1YXRlIHRvIGNvbmNlcHR1YWwgdmFsdWUnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiBsaXRlcmFsVG9rZW5zVGhhdFJlc29sdmVUbygxKSkge1xuICAgICAgICAgICAgLy8gV0hFTlxuICAgICAgICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSBgdGhlIG51bWJlciBpcyAke3Rva2VufWA7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUoc3RyaW5naWZpZWQpO1xuXG4gICAgICAgICAgICAvLyBUSEVOXG4gICAgICAgICAgICB0ZXN0LmRlZXBFcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlZCksICd0aGUgbnVtYmVyIGlzIDEnKTtcbiAgICAgICAgfVxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2ludHJpbnNpYyBUb2tlbnMgY2FuIGJlIHN0cmluZ2lmaWVkIGFuZCBldmFsdWF0ZSB0byBjb25jZXB0dWFsIHZhbHVlJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGZvciAoY29uc3QgYnVja2V0TmFtZSBvZiBjbG91ZEZvcm1hdGlvblRva2Vuc1RoYXRSZXNvbHZlVG8oeyBSZWY6ICdNeUJ1Y2tldCcgfSkpIHtcbiAgICAgICAgICAgIC8vIFdIRU5cbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShgbXkgYnVja2V0IGlzIG5hbWVkICR7YnVja2V0TmFtZX1gKTtcblxuICAgICAgICAgICAgLy8gVEhFTlxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtNeUJ1Y2tldDogJ1RoZU5hbWUnfTtcbiAgICAgICAgICAgIHRlc3QuZXF1YWwoZXZhbHVhdGVDRk4ocmVzb2x2ZWQsIGNvbnRleHQpLCAnbXkgYnVja2V0IGlzIG5hbWVkIFRoZU5hbWUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH0sXG5cbiAgICAndG9rZW5zIHJlc29sdmUgcHJvcGVybHkgaW4gaW5pdGlhbCBwb3NpdGlvbicodGVzdDogVGVzdCkge1xuICAgICAgICAvLyBHSVZFTlxuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vuc1RoYXRSZXNvbHZlVG8oJ0hlbGxvJykpIHtcbiAgICAgICAgICAgIC8vIFdIRU5cbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShgJHt0b2tlbn0gd29ybGRgKTtcblxuICAgICAgICAgICAgLy8gVEhFTlxuICAgICAgICAgICAgdGVzdC5lcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlZCksICdIZWxsbyB3b3JsZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICdzaWRlLWJ5LXNpZGUgVG9rZW5zIHJlc29sdmUgY29ycmVjdGx5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4xIG9mIHRva2Vuc1RoYXRSZXNvbHZlVG8oJ0hlbGxvICcpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRva2VuMiBvZiB0b2tlbnNUaGF0UmVzb2x2ZVRvKCd3b3JsZCcpKSB7XG4gICAgICAgICAgICAgICAgLy8gV0hFTlxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShgJHt0b2tlbjF9JHt0b2tlbjJ9YCk7XG5cbiAgICAgICAgICAgICAgICAvLyBUSEVOXG4gICAgICAgICAgICAgICAgdGVzdC5lcXVhbChldmFsdWF0ZUNGTihyZXNvbHZlZCksICdIZWxsbyB3b3JsZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgfSxcblxuICAgICd0b2tlbnMgY2FuIGJlIHVzZWQgaW4gaGFzaCBrZXlzIGJ1dCBtdXN0IHJlc29sdmUgdG8gYSBzdHJpbmcnKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgY29uc3QgdG9rZW4gPSBuZXcgVG9rZW4oKCkgPT4gJ0kgYW0gYSBzdHJpbmcnKTtcblxuICAgICAgICAvLyBXSEVOXG4gICAgICAgIGNvbnN0IHMgPSB7XG4gICAgICAgICAgICBbdG9rZW4udG9TdHJpbmcoKV06IGBib29tICR7dG9rZW59YFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFRIRU5cbiAgICAgICAgdGVzdC5kZWVwRXF1YWwocmVzb2x2ZShzKSwgeyAnSSBhbSBhIHN0cmluZyc6ICdib29tIEkgYW0gYSBzdHJpbmcnIH0pO1xuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2ZhaWxzIGlmIHRva2VuIGluIGEgaGFzaCBrZXkgcmVzb2x2ZXMgdG8gYSBub24tc3RyaW5nJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGNvbnN0IHRva2VuID0gbmV3IENsb3VkRm9ybWF0aW9uVG9rZW4oeyBSZWY6ICdPdGhlcicgfSk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBjb25zdCBzID0ge1xuICAgICAgICAgICAgW3Rva2VuLnRvU3RyaW5nKCldOiBgYm9vbSAke3Rva2VufWBcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIHRlc3QudGhyb3dzKCgpID0+IHJlc29sdmUocyksICdUaGUga2V5IFwiJHtUb2tlbltUT0tFTi4xOV19XCIgaGFzIGJlZW4gcmVzb2x2ZWQgdG8ge1wiUmVmXCI6XCJPdGhlclwifSBidXQgbXVzdCBiZSByZXNvbHZhYmxlIHRvIGEgc3RyaW5nJyk7XG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH1cbn07XG5cbmNsYXNzIFByb21pc2UyIGV4dGVuZHMgVG9rZW4ge1xuICAgIHB1YmxpYyByZXNvbHZlKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgRGF0YToge1xuICAgICAgICAgICAgICAgIHN0cmluZ1Byb3A6ICdoZWxsbycsXG4gICAgICAgICAgICAgICAgbnVtYmVyUHJvcDogMTIzNCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBSZWN1cnNlOiBuZXcgVG9rZW4oKCkgPT4gNDIpXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5jbGFzcyBQcm9taXNlMSBleHRlbmRzIFRva2VuIHtcbiAgICBwdWJsaWMgcDIgPSBbIG5ldyBQcm9taXNlMigpLCBuZXcgUHJvbWlzZTIoKSBdO1xuXG4gICAgcHVibGljIHJlc29sdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnAyO1xuICAgIH1cbn1cblxuY2xhc3MgQmFzZURhdGFUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBmb286IG51bWJlcikge1xuICAgIH1cbn1cblxuY2xhc3MgRGF0YVR5cGUgZXh0ZW5kcyBCYXNlRGF0YVR5cGUge1xuICAgIHB1YmxpYyBnb28gPSAnaGVsbG8nO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKDEyKTtcbiAgICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHZhcmlvdXMgZmxhdm9ycyBvZiBUb2tlbnMgdGhhdCByZXNvbHZlIHRvIHRoZSBnaXZlbiB2YWx1ZVxuICovXG5mdW5jdGlvbiBsaXRlcmFsVG9rZW5zVGhhdFJlc29sdmVUbyh2YWx1ZTogYW55KTogVG9rZW5bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgbmV3IFRva2VuKHZhbHVlKSxcbiAgICAgICAgbmV3IFRva2VuKCgpID0+IHZhbHVlKVxuICAgIF07XG59XG5cbi8qKlxuICogUmV0dXJuIHZhcmlvdXMgZmxhdm9ycyBvZiBUb2tlbnMgdGhhdCByZXNvbHZlIHRvIHRoZSBnaXZlbiB2YWx1ZVxuICovXG5mdW5jdGlvbiBjbG91ZEZvcm1hdGlvblRva2Vuc1RoYXRSZXNvbHZlVG8odmFsdWU6IGFueSk6IFRva2VuW10ge1xuICAgIHJldHVybiBbXG4gICAgICAgIG5ldyBDbG91ZEZvcm1hdGlvblRva2VuKHZhbHVlKSxcbiAgICAgICAgbmV3IENsb3VkRm9ybWF0aW9uVG9rZW4oKCkgPT4gdmFsdWUpXG4gICAgXTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gVG9rZW5zIGluIGJvdGggZmxhdm9ycyB0aGF0IHJlc29sdmUgdG8gdGhlIGdpdmVuIHN0cmluZ1xuICovXG5mdW5jdGlvbiB0b2tlbnNUaGF0UmVzb2x2ZVRvKHZhbHVlOiBzdHJpbmcpOiBUb2tlbltdIHtcbiAgICByZXR1cm4gbGl0ZXJhbFRva2Vuc1RoYXRSZXNvbHZlVG8odmFsdWUpLmNvbmNhdChjbG91ZEZvcm1hdGlvblRva2Vuc1RoYXRSZXNvbHZlVG8odmFsdWUpKTtcbn0iXX0=

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc