awscdk-resources-mongodbatlas
Version:
MongoDB Atlas CDK Construct Library for AWS CloudFormation Resources
312 lines • 74.1 kB
JavaScript
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CfnCluster = exports.AdvancedRegionConfigProviderName = exports.CfnClusterPropsEncryptionAtRestProvider = void 0;
exports.toJson_CfnClusterProps = toJson_CfnClusterProps;
exports.toJson_ProcessArgs = toJson_ProcessArgs;
exports.toJson_CfnClusterPropsBiConnector = toJson_CfnClusterPropsBiConnector;
exports.toJson_ConnectionStrings = toJson_ConnectionStrings;
exports.toJson_CfnClusterPropsLabels = toJson_CfnClusterPropsLabels;
exports.toJson_AdvancedReplicationSpec = toJson_AdvancedReplicationSpec;
exports.toJson_Tag = toJson_Tag;
exports.toJson_AdvancedRegionConfig = toJson_AdvancedRegionConfig;
exports.toJson_AdvancedAutoScaling = toJson_AdvancedAutoScaling;
exports.toJson_Specs = toJson_Specs;
exports.toJson_DiskGb = toJson_DiskGb;
exports.toJson_Compute = toJson_Compute;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
// Generated by cdk-import
const cdk = require("aws-cdk-lib");
/**
* Converts an object of type 'CfnClusterProps' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_CfnClusterProps(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
AdvancedSettings: toJson_ProcessArgs(obj.advancedSettings),
BackupEnabled: obj.backupEnabled,
BiConnector: toJson_CfnClusterPropsBiConnector(obj.biConnector),
ClusterType: obj.clusterType,
ConnectionStrings: toJson_ConnectionStrings(obj.connectionStrings),
DiskSizeGB: obj.diskSizeGb,
EncryptionAtRestProvider: obj.encryptionAtRestProvider,
GlobalClusterSelfManagedSharding: obj.globalClusterSelfManagedSharding,
Profile: obj.profile,
ProjectId: obj.projectId,
Labels: obj.labels?.map((y) => toJson_CfnClusterPropsLabels(y)),
MongoDBMajorVersion: obj.mongoDbMajorVersion,
Name: obj.name,
Paused: obj.paused,
PitEnabled: obj.pitEnabled,
ReplicationSpecs: obj.replicationSpecs?.map((y) => toJson_AdvancedReplicationSpec(y)),
RootCertType: obj.rootCertType,
VersionReleaseSystem: obj.versionReleaseSystem,
TerminationProtectionEnabled: obj.terminationProtectionEnabled,
Tags: obj.tags?.map((y) => toJson_Tag(y)),
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'ProcessArgs' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_ProcessArgs(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
DefaultReadConcern: obj.defaultReadConcern,
DefaultWriteConcern: obj.defaultWriteConcern,
FailIndexKeyTooLong: obj.failIndexKeyTooLong,
JavascriptEnabled: obj.javascriptEnabled,
MinimumEnabledTLSProtocol: obj.minimumEnabledTlsProtocol,
TlsCipherConfigMode: obj.tlsCipherConfigMode,
CustomOpensslCipherConfigTls12: obj.customOpensslCipherConfigTls12?.map((y) => y),
NoTableScan: obj.noTableScan,
OplogSizeMB: obj.oplogSizeMb,
SampleSizeBIConnector: obj.sampleSizeBiConnector,
SampleRefreshIntervalBIConnector: obj.sampleRefreshIntervalBiConnector,
OplogMinRetentionHours: obj.oplogMinRetentionHours,
TransactionLifetimeLimitSeconds: obj.transactionLifetimeLimitSeconds,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'CfnClusterPropsBiConnector' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_CfnClusterPropsBiConnector(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
ReadPreference: obj.readPreference,
Enabled: obj.enabled,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'ConnectionStrings' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_ConnectionStrings(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Standard: obj.standard,
StandardSrv: obj.standardSrv,
Private: obj.private,
PrivateSrv: obj.privateSrv,
PrivateEndpoints: obj.privateEndpoints?.map((y) => y),
PrivateEndpointsSrv: obj.privateEndpointsSrv?.map((y) => y),
SRVShardOptimizedConnectionString: obj.srvShardOptimizedConnectionString?.map((y) => y),
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/* eslint-enable max-len, quote-props */
/**
* Cloud service provider that manages your customer keys to provide an additional layer of encryption at rest for the cluster. To enable customer key management for encryption at rest, the cluster replicationSpecs[n].regionConfigs[m].{type}Specs.instanceSize setting must be M10 or higher and "backupEnabled" : false or omitted entirely.
*
* @schema CfnClusterPropsEncryptionAtRestProvider
*/
var CfnClusterPropsEncryptionAtRestProvider;
(function (CfnClusterPropsEncryptionAtRestProvider) {
/** AWS */
CfnClusterPropsEncryptionAtRestProvider["AWS"] = "AWS";
/** GCP */
CfnClusterPropsEncryptionAtRestProvider["GCP"] = "GCP";
/** AZURE */
CfnClusterPropsEncryptionAtRestProvider["AZURE"] = "AZURE";
/** NONE */
CfnClusterPropsEncryptionAtRestProvider["NONE"] = "NONE";
})(CfnClusterPropsEncryptionAtRestProvider || (exports.CfnClusterPropsEncryptionAtRestProvider = CfnClusterPropsEncryptionAtRestProvider = {}));
/**
* Converts an object of type 'CfnClusterPropsLabels' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_CfnClusterPropsLabels(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Key: obj.key,
Value: obj.value,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'AdvancedReplicationSpec' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_AdvancedReplicationSpec(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
ID: obj.id,
NumShards: obj.numShards,
AdvancedRegionConfigs: obj.advancedRegionConfigs?.map((y) => toJson_AdvancedRegionConfig(y)),
ZoneName: obj.zoneName,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'Tag' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_Tag(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Key: obj.key,
Value: obj.value,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'AdvancedRegionConfig' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_AdvancedRegionConfig(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
AnalyticsAutoScaling: toJson_AdvancedAutoScaling(obj.analyticsAutoScaling),
AutoScaling: toJson_AdvancedAutoScaling(obj.autoScaling),
RegionName: obj.regionName,
BackingProviderName: obj.backingProviderName,
ProviderName: obj.providerName,
AnalyticsSpecs: toJson_Specs(obj.analyticsSpecs),
ElectableSpecs: toJson_Specs(obj.electableSpecs),
Priority: obj.priority,
ReadOnlySpecs: toJson_Specs(obj.readOnlySpecs),
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'AdvancedAutoScaling' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_AdvancedAutoScaling(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
DiskGB: toJson_DiskGb(obj.diskGb),
Compute: toJson_Compute(obj.compute),
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/* eslint-enable max-len, quote-props */
/**
* @schema AdvancedRegionConfigProviderName
*/
var AdvancedRegionConfigProviderName;
(function (AdvancedRegionConfigProviderName) {
/** AWS */
AdvancedRegionConfigProviderName["AWS"] = "AWS";
/** GCP */
AdvancedRegionConfigProviderName["GCP"] = "GCP";
/** AZURE */
AdvancedRegionConfigProviderName["AZURE"] = "AZURE";
/** TENANT */
AdvancedRegionConfigProviderName["TENANT"] = "TENANT";
})(AdvancedRegionConfigProviderName || (exports.AdvancedRegionConfigProviderName = AdvancedRegionConfigProviderName = {}));
/**
* Converts an object of type 'Specs' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_Specs(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
DiskIOPS: obj.diskIops,
EbsVolumeType: obj.ebsVolumeType,
InstanceSize: obj.instanceSize,
NodeCount: obj.nodeCount,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'DiskGb' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_DiskGb(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Enabled: obj.enabled,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'Compute' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_Compute(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Enabled: obj.enabled,
ScaleDownEnabled: obj.scaleDownEnabled,
MinInstanceSize: obj.minInstanceSize,
MaxInstanceSize: obj.maxInstanceSize,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/* eslint-enable max-len, quote-props */
/**
* A CloudFormation `MongoDB::Atlas::Cluster`
*
* @cloudformationResource MongoDB::Atlas::Cluster
* @stability external
*/
class CfnCluster extends cdk.CfnResource {
/**
* Create a new `MongoDB::Atlas::Cluster`.
*
* @param scope - scope in which this resource is defined
* @param id - scoped id of the resource
* @param props - resource properties
*/
constructor(scope, id, props) {
super(scope, id, {
type: CfnCluster.CFN_RESOURCE_TYPE_NAME,
properties: toJson_CfnClusterProps(props),
});
this.props = props;
this.attrStateName = cdk.Token.asString(this.getAtt("StateName"));
this.attrMongoDBVersion = cdk.Token.asString(this.getAtt("MongoDBVersion"));
this.attrCreatedDate = cdk.Token.asString(this.getAtt("CreatedDate"));
this.attrId = cdk.Token.asString(this.getAtt("Id"));
}
}
exports.CfnCluster = CfnCluster;
_a = JSII_RTTI_SYMBOL_1;
CfnCluster[_a] = { fqn: "awscdk-resources-mongodbatlas.CfnCluster", version: "3.12.1" };
/**
* The CloudFormation resource type name for this resource class.
*/
CfnCluster.CFN_RESOURCE_TYPE_NAME = "MongoDB::Atlas::Cluster";
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbDEtcmVzb3VyY2VzL2NsdXN0ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQXlKQSx3REFtQ0M7QUF5R0QsZ0RBNEJDO0FBNkJELDhFQWVDO0FBK0RELDREQXFCQztBQXNDRCxvRUFlQztBQThDRCx3RUFtQkM7QUE0QkQsZ0NBZUM7QUErREQsa0VBc0JDO0FBd0JELGdFQWVDO0FBaUVELG9DQWlCQztBQXFCRCxzQ0FjQztBQTZDRCx3Q0FpQkM7O0FBajVCRCwwQkFBMEI7QUFDMUIsbUNBQW1DO0FBb0puQzs7R0FFRztBQUNILHlDQUF5QztBQUN6QyxTQUFnQixzQkFBc0IsQ0FDcEMsR0FBZ0M7SUFFaEMsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDdEIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHO1FBQ2IsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDO1FBQzFELGFBQWEsRUFBRSxHQUFHLENBQUMsYUFBYTtRQUNoQyxXQUFXLEVBQUUsaUNBQWlDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUMvRCxXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVc7UUFDNUIsaUJBQWlCLEVBQUUsd0JBQXdCLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO1FBQ2xFLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVTtRQUMxQix3QkFBd0IsRUFBRSxHQUFHLENBQUMsd0JBQXdCO1FBQ3RELGdDQUFnQyxFQUFFLEdBQUcsQ0FBQyxnQ0FBZ0M7UUFDdEUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO1FBQ3BCLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztRQUN4QixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFD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Ozs7O09BTUc7SUFDSCxZQUFZLEtBQTJCLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQ3pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsSUFBSSxFQUFFLFVBQVUsQ0FBQyxzQkFBc0I7WUFDdkMsVUFBVSxFQUFFLHNCQUFzQixDQUFDLEtBQUssQ0FBRTtTQUMzQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQzs7QUEvQ0gsZ0NBZ0RDOzs7QUEvQ0M7O0dBRUc7QUFDb0IsaUNBQXNCLEdBQUcseUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHZW5lcmF0ZWQgYnkgY2RrLWltcG9ydFxuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIFRoZSBjbHVzdGVyIHJlc291cmNlIHByb3ZpZGVzIGFjY2VzcyB0byB5b3VyIGNsdXN0ZXIgY29uZmlndXJhdGlvbnMuIFRoZSByZXNvdXJjZSBsZXRzIHlvdSBjcmVhdGUsIGVkaXQgYW5kIGRlbGV0ZSBjbHVzdGVycy4gVGhlIHJlc291cmNlIHJlcXVpcmVzIHlvdXIgUHJvamVjdCBJRC5cbiAqXG4gKiBAc2NoZW1hIENmbkNsdXN0ZXJQcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENmbkNsdXN0ZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIENmbkNsdXN0ZXJQcm9wcyNBZHZhbmNlZFNldHRpbmdzXG4gICAqL1xuICByZWFkb25seSBhZHZhbmNlZFNldHRpbmdzPzogUHJvY2Vzc0FyZ3M7XG5cbiAgLyoqXG4gICAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY2x1c3RlciBjYW4gcGVyZm9ybSBiYWNrdXBzLiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGNsdXN0ZXIgY2FuIHBlcmZvcm0gYmFja3Vwcy4gWW91IG11c3Qgc2V0IHRoaXMgdmFsdWUgdG8gdHJ1ZSBmb3IgTlZNZSBjbHVzdGVycy4gQmFja3VwIHVzZXMgQ2xvdWQgQmFja3VwcyBmb3IgZGVkaWNhdGVkIGNsdXN0ZXJzIGFuZCBTaGFyZWQgQ2x1c3RlciBCYWNrdXBzIGZvciB0ZW5hbnQgY2x1c3RlcnMuIElmIHNldCB0byBmYWxzZSwgdGhlIGNsdXN0ZXIgZG9lc24ndCB1c2UgYmFja3Vwcy5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbHVzdGVyUHJvcHMjQmFja3VwRW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgYmFja3VwRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNldHRpbmdzIG5lZWRlZCB0byBjb25maWd1cmUgdGhlIE1vbmdvREIgQ29ubmVjdG9yIGZvciBCdXNpbmVzcyBJbnRlbGxpZ2VuY2UgZm9yIHRoaXMgY2x1c3Rlci5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbHVzdGVyUHJvcHMjQmlDb25uZWN0b3JcbiAgICovXG4gIHJlYWRvbmx5IGJpQ29ubmVjdG9yPzogQ2ZuQ2x1c3RlclByb3BzQmlDb25uZWN0b3I7XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gb2Ygbm9kZXMgdGhhdCBjb21wcmlzZSB0aGUgY2x1c3Rlci5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbHVzdGVyUHJvcHMjQ2x1c3RlclR5cGVcbiAgICovXG4gIHJlYWRvbmx5IGNsdXN0ZXJUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZXQgb2YgY29ubmVjdGlvbiBzdHJpbmdzIHRoYXQgeW91ciBhcHBsaWNhdGlvbnMgdXNlIHRvIGNvbm5lY3QgdG8gdGhpcyBjbHVzdGVyLiBVc2UgdGhlIHBhcmFtZXRlcnMgaW4gdGhpcyBvYmplY3QgdG8gY29ubmVjdCB5b3VyIGFwcGxpY2F0aW9ucyB0byB0aGlzIGNsdXN0ZXIuIFNlZSB0aGUgTW9uZ29EQiBbQ29ubmVjdGlvbiBTdHJpbmcgVVJJIEZvcm1hdF0oaHR0cHM6Ly9kb2NzLm1vbmdvZGIuY29tL21hbnVhbC9yZWZlcmVuY2UvY29ubmVjdGlvbi1zdHJpbmcvKSByZWZlcmVuY2UgZm9yIGZ1cnRoZXIgZGV0YWlscy5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbHVzdGVyUHJvcHMjQ29ubmVjdGlvblN0cmluZ3NcbiAgICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25TdHJpbmdzPzogQ29ubmVjdGlvblN0cmluZ3M7XG5cbiAgLyoqXG4gICAqIFN0b3JhZ2UgY2FwYWNpdHkgdGhhdCB0aGUgaG9zdCdzIHJvb3Qgdm9sdW1lIHBvc3Nlc3NlcyBleHByZXNzZWQgaW4gZ2lnYWJ5dGVzLiBJbmNyZWFzZSB0aGlzIG51bWJlciB0byBhZGQgY2FwYWNpdHkuIE1vbmdvREIgQ2xvdWQgcmVxdWlyZXMgdGhpcyBwYXJhbWV0ZXIgaWYgeW91IHNldCByZXBsaWNhdGlvblNwZWNzLiBJZiB5b3Ugc3BlY2lmeSBhIGRpc2sgc2l6ZSBiZWxvdyB0aGUgbWluaW11bSAoMTAgR0IpLCB0aGlzIHBhcmFtZXRlciBkZWZhdWx0cyB0byB0aGUgbWluaW11bSBkaXNrIHNpemUgdmFsdWUuIFN0b3JhZ2UgY2hhcmdlIGNhbGN1bGF0aW9ucyBkZXBlbmQgb24gd2hldGhlciB5b3UgY2hvb3NlIHRoZSBkZWZhdWx0IHZhbHVlIG9yIGEgY3VzdG9tIHZhbHVlLiBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgZGlzayBzdG9yYWdlIGNhbm5vdCBleGNlZWQgNTAgdGltZXMgdGhlIG1heGltdW0gUkFNIGZvciB0aGUgc2VsZWN0ZWQgY2x1c3Rlci4gSWYgeW91IHJlcXVpcmUgbW9yZSBzdG9yYWdlIHNwYWNlLCBjb25zaWRlciB1cGdyYWRpbmcgeW91ciBjbHVzdGVyIHRvIGEgaGlnaGVyIHRpZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuQ2x1c3RlclByb3BzI0Rpc2tTaXplR0JcbiAgICovXG4gIHJlYWRvbmx5IGRpc2tTaXplR2I/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENsb3VkIHNlcnZpY2UgcHJvdmlkZXIgdGhhdCBtYW5hZ2VzIHlvdXIgY3VzdG9tZXIga2V5cyB0byBwcm92aWRlIGFuIGFkZGl0aW9uYWwgbGF5ZXIgb2YgZW5jcnlwdGlvbiBhdCByZXN0IGZvciB0aGUgY2x1c3Rlci4gVG8gZW5hYmxlIGN1c3RvbWVyIGtleSBtYW5hZ2VtZW50IGZvciBlbmNyeXB0aW9uIGF0IHJlc3QsIHRoZSBjbHVzdGVyIHJlcGxpY2F0aW9uU3BlY3Nbbl0ucmVnaW9uQ29uZmlnc1ttXS57dHlwZX1TcGVjcy5pbnN0YW5jZVNpemUgc2V0dGluZyBtdXN0IGJlIE0xMCBvciBoaWdoZXIgYW5kIFwiYmFja3VwRW5hYmxlZFwiIDogZmFsc2Ugb3Igb21pdHRlZCBlbnRpcmVseS5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbHVzdGVyUHJvcHMjRW5jcnlwdGlvbkF0UmVzdFByb3ZpZGVyXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uQXRSZXN0UHJvdmlkZXI/OiBDZm5DbHVzdGVyUHJvcHNFbmNyeXB0aW9uQXRSZXN0UHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIChPcHRpb25hbCkgRmxhZyB0aGF0IGluZGljYXRlcyBpZiBjbHVzdGVyIHVzZXMgQXRsYXMtTWFuYWdlZCBTaGFyZGluZyAoZmFsc2UsIGRlZmF1bHQpIG9yIFNlbGYtTWFuYWdlZCBTaGFyZGluZyAodHJ1ZSkuIEl0IGNhbiBvbmx5IGJlIGVuYWJsZWQgZm9yIEdsb2JhbCBDbHVzdGVycyAoYEdFT1NIQVJERURgKS4gSXQgY2Fubm90IGJlIGNoYW5nZWQgb25jZSB0aGUgY2x1c3RlciBpcyBjcmVhdGVkLiBVc2UgdGhpcyBtb2RlIGlmIHlvdSdyZSBhbiBhZHZhbmNlZCB1c2VyIGFuZCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIHRvbyByZXN0cmljdGl2ZSBmb3IgeW91ciB3b3JrbG9hZC4gSWYgeW91IHNlbGVjdCB0aGlzIG9wdGlvbiwgeW91IG11c3QgbWFudWFsbHkgY29uZmlndXJlIHRoZSBzaGFyZGluZyBzdHJhdGVneSwgbW9yZSBpbmZvIFtoZXJlXShodHRwczovL3d3dy5tb25nb2RiLmNvbS9kb2NzL2F0bGFzL3R1dG9yaWFsL2NyZWF0ZS1nbG9iYWwtY2x1c3Rlci8jc2VsZWN0LXlvdXItc2hhcmRpbmctY29uZmlndXJhdGlvbikuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuQ2x1c3RlclByb3BzI0dsb2JhbENsdXN0ZXJTZWxmTWFuYWdlZFNoYXJkaW5nXG4gICAqL1xuICByZWFkb25seSBnbG9iYWxDbHVzdGVyU2VsZk1hbmFnZWRTaGFyZGluZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFByb2ZpbGUgdXNlZCB0byBwcm92aWRlIGNyZWRlbnRpYWxzIGluZm9ybWF0aW9uLCAoYSBzZWNyZXQgd2l0aCB0aGUgY2ZuL2F0bGFzL3Byb2ZpbGUve1Byb2ZpbGV9LCBpcyByZXF1aXJlZCksIGlmIG5vdCBwcm92aWRlZCBkZWZhdWx0IGlzIHVzZWRcbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbHVzdGVyUHJvcHMjUHJvZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogVW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHByb2plY3QgdGhlIGNsdXN0ZXIgYmVsb25ncyB0by5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbHVzdGVyUHJvcHMjUHJvamVjdElkXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBrZXktdmFsdWUgcGFpcnMgYmV0d2VlbiAxIHRvIDI1NSBjaGFyYWN0ZXJzIGluIGxlbmd0aCB0aGF0IHRhZyBhbmQgY2F0ZWdvcml6ZSB0aGUgY2x1c3Rlci4gVGhlIE1vbmdvREIgQ2xvdWQgY29uc29sZSBkb2Vzbid0IGRpc3BsYXkgeW91ciBsYWJlbHMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuQ2x1c3RlclByb3BzI0xhYmVsc1xuICAgKi9cbiAgcmVhZG9ubHkgbGFiZWxzPzogQ2ZuQ2x1c3RlclByb3BzTGFiZWxzW107XG5cbiAgLyoqXG4gICAqIE1ham9yIE1vbmdvREIgdmVyc2lvbiBvZiB0aGUgY2x1c3Rlci4gTW9uZ29EQiBDbG91ZCBkZXBsb3lzIHRoZSBjbHVzdGVyIHdpdGggdGhlIGxhdGVzdCBzdGFibGUgcmVsZWFzZSBvZiB0aGUgc3BlY2lmaWVkIHZlcnNpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuQ2x1c3RlclByb3BzI01vbmdvREJNYWpvclZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IG1vbmdvRGJNYWpvclZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIHRoYXQgaWRlbnRpZmllcyB0aGUgYWR2YW5jZWQgY2x1c3Rlci5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbHVzdGVyUHJvcHMjTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNsdXN0ZXIgaXMgcGF1c2VkIG9yIG5vdC5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbHVzdGVyUHJvcHMjUGF1c2VkXG4gICAqL1xuICByZWFkb25seSBwYXVzZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBGbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNsdXN0ZXIgdXNlcyBjb250aW51b3VzIGNsb3VkIGJhY2t1cHMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuQ2x1c3RlclByb3BzI1BpdEVuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IHBpdEVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHNldHRpbmdzIHRoYXQgY29uZmlndXJlIHlvdXIgY2x1c3RlciByZWdpb25zLiBGb3IgR2xvYmFsIENsdXN0ZXJzLCBlYWNoIG9iamVjdCBpbiB0aGUgYXJyYXkgcmVwcmVzZW50cyBhIHpvbmUgd2hlcmUgeW91ciBjbHVzdGVycyBub2RlcyBkZXBsb3kuIEZvciBub24tR2xvYmFsIHJlcGxpY2Egc2V0cyBhbmQgc2hhcmRlZCBjbHVzdGVycywgdGhpcyBhcnJheSBoYXMgb25lIG9iamVjdCByZXByZXNlbnRpbmcgd2hlcmUgeW91ciBjbHVzdGVycyBub2RlcyBkZXBsb3kuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuQ2x1c3RlclByb3BzI1JlcGxpY2F0aW9uU3BlY3NcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxpY2F0aW9uU3BlY3M/OiBBZHZhbmNlZFJlcGxpY2F0aW9uU3BlY1tdO1xuXG4gIC8qKlxuICAgKiBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSB0aGF0IE1vbmdvREIgQ2xvdWQgY2x1c3RlciB1c2VzLiBNb25nb0RCIENsb3VkIHN1cHBvcnRzIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwLlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkNsdXN0ZXJQcm9wcyNSb290Q2VydFR5cGVcbiAgICovXG4gIHJlYWRvbmx5IHJvb3RDZXJ0VHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogTWV0aG9kIGJ5IHdoaWNoIHRoZSBjbHVzdGVyIG1haW50YWlucyB0aGUgTW9uZ29EQiB2ZXJzaW9ucy4gSWYgdmFsdWUgaXMgQ09OVElOVU9VUywgeW91IG11c3Qgbm90IHNwZWNpZnkgbW9uZ29EQk1ham9yVmVyc2lvblxuICAgKlxuICAgKiBAc2NoZW1hIENmbkNsdXN0ZXJQcm9wcyNWZXJzaW9uUmVsZWFzZVN5c3RlbVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvblJlbGVhc2VTeXN0ZW0/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0ZXJtaW5hdGlvbiBwcm90ZWN0aW9uIGlzIGVuYWJsZWQgb24gdGhlIGNsdXN0ZXIuIElmIHNldCB0byB0cnVlLCBNb25nb0RCIENsb3VkIHdvbid0IGRlbGV0ZSB0aGUgY2x1c3Rlci4gSWYgc2V0IHRvIGZhbHNlLCBNb25nb0RCIENsb3VkIHdpbGwgZGVsZXRlIHRoZSBjbHVzdGVyLlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkNsdXN0ZXJQcm9wcyNUZXJtaW5hdGlvblByb3RlY3Rpb25FbmFibGVkXG4gICAqL1xuICByZWFkb25seSB0ZXJtaW5hdGlvblByb3RlY3Rpb25FbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTGlzdCBvZiBzZXR0aW5ncyB0aGF0IGNvbmZpZ3VyZSB5b3VyIGNsdXN0ZXIgcmVnaW9ucy4gRm9yIEdsb2JhbCBDbHVzdGVycywgZWFjaCBvYmplY3QgaW4gdGhlIGFycmF5IHJlcHJlc2VudHMgYSB6b25lIHdoZXJlIHlvdXIgY2x1c3RlcnMgbm9kZXMgZGVwbG95LiBGb3Igbm9uLUdsb2JhbCByZXBsaWNhIHNldHMgYW5kIHNoYXJkZWQgY2x1c3RlcnMsIHRoaXMgYXJyYXkgaGFzIG9uZSBvYmplY3QgcmVwcmVzZW50aW5nIHdoZXJlIHlvdXIgY2x1c3RlcnMgbm9kZXMgZGVwbG95LlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkNsdXN0ZXJQcm9wcyNUYWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogVGFnW107XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0NmbkNsdXN0ZXJQcm9wcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQ2ZuQ2x1c3RlclByb3BzKFxuICBvYmo6IENmbkNsdXN0ZXJQcm9wcyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIEFkdmFuY2VkU2V0dGluZ3M6IHRvSnNvbl9Qcm9jZXNzQXJncyhvYmouYWR2YW5jZWRTZXR0aW5ncyksXG4gICAgQmFja3VwRW5hYmxlZDogb2JqLmJhY2t1cEVuYWJsZWQsXG4gICAgQmlDb25uZWN0b3I6IHRvSnNvbl9DZm5DbHVzdGVyUHJvcHNCaUNvbm5lY3RvcihvYmouYmlDb25uZWN0b3IpLFxuICAgIENsdXN0ZXJUeXBlOiBvYmouY2x1c3RlclR5cGUsXG4gICAgQ29ubmVjdGlvblN0cmluZ3M6IHRvSnNvbl9Db25uZWN0aW9uU3RyaW5ncyhvYmouY29ubmVjdGlvblN0cmluZ3MpLFxuICAgIERpc2tTaXplR0I6IG9iai5kaXNrU2l6ZUdiLFxuICAgIEVuY3J5cHRpb25BdFJlc3RQcm92aWRlcjogb2JqLmVuY3J5cHRpb25BdFJlc3RQcm92aWRlcixcbiAgICBHbG9iYWxDbHVzdGVyU2VsZk1hbmFnZWRTaGFyZGluZzogb2JqLmdsb2JhbENsdXN0ZXJTZWxmTWFuYWdlZFNoYXJkaW5nLFxuICAgIFByb2ZpbGU6IG9iai5wcm9maWxlLFxuICAgIFByb2plY3RJZDogb2JqLnByb2plY3RJZCxcbiAgICBMYWJlbHM6IG9iai5sYWJlbHM/Lm1hcCgoeSkgPT4gdG9Kc29uX0NmbkNsdXN0ZXJQcm9wc0xhYmVscyh5KSksXG4gICAgTW9uZ29EQk1ham9yVmVyc2lvbjogb2JqLm1vbmdvRGJNYWpvclZlcnNpb24sXG4gICAgTmFtZTogb2JqLm5hbWUsXG4gICAgUGF1c2VkOiBvYmoucGF1c2VkLFxuICAgIFBpdEVuYWJsZWQ6IG9iai5waXRFbmFibGVkLFxuICAgIFJlcGxpY2F0aW9uU3BlY3M6IG9iai5yZXBsaWNhdGlvblNwZWNzPy5tYXAoKHkpID0+XG4gICAgICB0b0pzb25fQWR2YW5jZWRSZXBsaWNhdGlvblNwZWMoeSlcbiAgICApLFxuICAgIFJvb3RDZXJ0VHlwZTogb2JqLnJvb3RDZXJ0VHlwZSxcbiAgICBWZXJzaW9uUmVsZWFzZVN5c3RlbTogb2JqLnZlcnNpb25SZWxlYXNlU3lzdGVtLFxuICAgIFRlcm1pbmF0aW9uUHJvdGVjdGlvbkVuYWJsZWQ6IG9iai50ZXJtaW5hdGlvblByb3RlY3Rpb25FbmFibGVkLFxuICAgIFRhZ3M6IG9iai50YWdzPy5tYXAoKHkpID0+IHRvSnNvbl9UYWcoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBZHZhbmNlZCBjb25maWd1cmF0aW9uIGRldGFpbHMgdG8gYWRkIGZvciBvbmUgY2x1c3RlciBpbiB0aGUgc3BlY2lmaWVkIHByb2plY3QuXG4gKlxuICogQHNjaGVtYSBwcm9jZXNzQXJnc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NBcmdzIHtcbiAgLyoqXG4gICAqIERlZmF1bHQgbGV2ZWwgb2YgYWNrbm93bGVkZ21lbnQgcmVxdWVzdGVkIGZyb20gTW9uZ29EQiBmb3IgcmVhZCBvcGVyYXRpb25zIHNldCBmb3IgdGhpcyBjbHVzdGVyLlxuICAgKlxuICAgKiBAc2NoZW1hIHByb2Nlc3NBcmdzI0RlZmF1bHRSZWFkQ29uY2VyblxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFJlYWRDb25jZXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IGxldmVsIG9mIGFja25vd2xlZGdtZW50IHJlcXVlc3RlZCBmcm9tIE1vbmdvREIgZm9yIHdyaXRlIG9wZXJhdGlvbnMgc2V0IGZvciB0aGlzIGNsdXN0ZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgcHJvY2Vzc0FyZ3MjRGVmYXVsdFdyaXRlQ29uY2VyblxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFdyaXRlQ29uY2Vybj86IHN0cmluZztcblxuICAvKipcbiAgICogRmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHlvdSBjYW4gaW5zZXJ0IG9yIHVwZGF0ZSBkb2N1bWVudHMgd2hlcmUgYWxsIGluZGV4ZWQgZW50cmllcyBkb24ndCBleGNlZWQgMTAyNCBieXRlcy4gSWYgeW91IHNldCB0aGlzIHRvIGZhbHNlLCBtb25nb2Qgd3JpdGVzIGRvY3VtZW50cyB0aGF0IGV4Y2VlZCB0aGlzIGxpbWl0IGJ1dCBkb2Vzbid0IGluZGV4IHRoZW0uXG4gICAqXG4gICAqIEBzY2hlbWEgcHJvY2Vzc0FyZ3MjRmFpbEluZGV4S2V5VG9vTG9uZ1xuICAgKi9cbiAgcmVhZG9ubHkgZmFpbEluZGV4S2V5VG9vTG9uZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY2x1c3RlciBhbGxvd3MgZXhlY3V0aW9uIG9mIG9wZXJhdGlvbnMgdGhhdCBwZXJmb3JtIHNlcnZlci1zaWRlIGV4ZWN1dGlvbnMgb2YgSmF2YVNjcmlwdC5cbiAgICpcbiAgICogQHNjaGVtYSBwcm9jZXNzQXJncyNKYXZhc2NyaXB0RW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgamF2YXNjcmlwdEVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSB2ZXJzaW9uIHRoYXQgdGhlIGNsdXN0ZXIgYWNjZXB0cyBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMuIENsdXN0ZXJzIHVzaW5nIFRMUyAxLjAgb3IgMS4xIHNob3VsZCBjb25zaWRlciBzZXR0aW5nIFRMUyAxLjIgYXMgdGhlIG1pbmltdW0gVExTIHByb3RvY29sIHZlcnNpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgcHJvY2Vzc0FyZ3MjTWluaW11bUVuYWJsZWRUTFNQcm90b2NvbFxuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bUVuYWJsZWRUbHNQcm90b2NvbD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFRMUyBjaXBoZXIgc3VpdGUgY29uZmlndXJhdGlvbiBtb2RlLiBWYWxpZCB2YWx1ZXMgaW5jbHVkZSBgQ1VTVE9NYCBvciBgREVGQVVMVGAuIFRoZSBgREVGQVVMVGAgbW9kZSB1c2VzIHRoZSBkZWZhdWx0IGNpcGhlciBzdWl0ZXMuIFRoZSBgQ1VTVE9NYCBtb2RlIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBjdXN0b20gY2lwaGVyIHN1aXRlcyBmb3IgYm90aCBUTFMgMS4yIGFuZCBUTFMgMS4zLiBUbyB1bnNldCwgdGhpcyBzaG91bGQgYmUgc2V0IGJhY2sgdG8gYERFRkFVTFRgLlxuICAgKlxuICAgKiBAc2NoZW1hIHByb2Nlc3NBcmdzI1Rsc0NpcGhlckNvbmZpZ01vZGVcbiAgICovXG4gIHJlYWRvbmx5IHRsc0NpcGhlckNvbmZpZ01vZGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXN0b20gT3BlblNTTCBjaXBoZXIgc3VpdGUgbGlzdCBmb3IgVExTIDEuMi4gVGhpcyBmaWVsZCBpcyBvbmx5IHZhbGlkIHdoZW4gYHRsc19jaXBoZXJfY29uZmlnX21vZGVgIGlzIHNldCB0byBgQ1VTVE9NYC5cbiAgICpcbiAgICogQHNjaGVtYSBwcm9jZXNzQXJncyNDdXN0b21PcGVuc3NsQ2lwaGVyQ29uZmlnVGxzMTJcbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbU9wZW5zc2xDaXBoZXJDb25maWdUbHMxMj86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBGbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNsdXN0ZXIgZGlzYWJsZXMgZXhlY3V0aW5nIGFueSBxdWVyeSB0aGF0IHJlcXVpcmVzIGEgY29sbGVjdGlvbiBzY2FuIHRvIHJldHVybiByZXN1bHRzLlxuICAgKlxuICAgKiBAc2NoZW1hIHByb2Nlc3NBcmdzI05vVGFibGVTY2FuXG4gICAqL1xuICByZWFkb25seSBub1RhYmxlU2Nhbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFN0b3JhZ2UgbGltaXQgb2YgY2x1c3RlcidzIG9wbG9nIGV4cHJlc3NlZCBpbiBtZWdhYnl0ZXMuIEEgdmFsdWUgb2YgbnVsbCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2x1c3RlciB1c2VzIHRoZSBkZWZhdWx0IG9wbG9nIHNpemUgdGhhdCBNb25nb0RCIENsb3VkIGNhbGN1bGF0ZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgcHJvY2Vzc0FyZ3MjT3Bsb2dTaXplTUJcbiAgICovXG4gIHJlYWRvbmx5IG9wbG9nU2l6ZU1iPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJbnRlcnZhbCBpbiBzZWNvbmRzIGF0IHdoaWNoIHRoZSBtb25nb3NxbGQgcHJvY2VzcyByZS1zYW1wbGVzIGRhdGEgdG8gY3JlYXRlIGl0cyByZWxhdGlvbmFsIHNjaGVtYS5cbiAgICpcbiAgICogQHNjaGVtYSBwcm9jZXNzQXJncyNTYW1wbGVTaXplQklDb25uZWN0b3JcbiAgICovXG4gIHJlYWRvbmx5IHNhbXBsZVNpemVCaUNvbm5lY3Rvcj86IG51bWJlcjtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIGRvY3VtZW50cyBwZXIgZGF0YWJhc2UgdG8gc2FtcGxlIHdoZW4gZ2F0aGVyaW5nIHNjaGVtYSBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBwcm9jZXNzQXJncyNTYW1wbGVSZWZyZXNoSW50ZXJ2YWxCSUNvbm5lY3RvclxuICAgKi9cbiAgcmVhZG9ubHkgc2FtcGxlUmVmcmVzaEludGVydmFsQmlDb25uZWN0b3I/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gcmV0ZW50aW9uIHdpbmRvdyBmb3IgY2x1c3RlcidzIG9wbG9nIGV4cHJlc3NlZCBpbiBob3Vycy4gQSB2YWx1ZSBvZiBudWxsIGluZGljYXRlcyB0aGF0IHRoZSBjbHVzdGVyIHVzZXMgdGhlIGRlZmF1bHQgbWluaW11bSBvcGxvZyB3aW5kb3cgdGhhdCBNb25nb0RCIENsb3VkIGNhbGN1bGF0ZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgcHJvY2Vzc0FyZ3MjT3Bsb2dNaW5SZXRlbnRpb25Ib3Vyc1xuICAgKi9cbiAgcmVhZG9ubHkgb3Bsb2dNaW5SZXRlbnRpb25Ib3Vycz86IG51bWJlcjtcblxuICAvKipcbiAgICogTGlmZXRpbWUsIGluIHNlY29uZHMsIG9mIG11bHRpLWRvY3VtZW50IHRyYW5zYWN0aW9ucy4gQXRsYXMgY29uc2lkZXJzIHRoZSB0cmFuc2FjdGlvbnMgdGhhdCBleGNlZWQgdGhpcyBsaW1pdCBhcyBleHBpcmVkIGFuZCBzbyBhYm9ydHMgdGhlbSB0aHJvdWdoIGEgcGVyaW9kaWMgY2xlYW51cCBwcm9jZXNzLlxuICAgKlxuICAgKiBAc2NoZW1hIHByb2Nlc3NBcmdzI1RyYW5zYWN0aW9uTGlmZXRpbWVMaW1pdFNlY29uZHNcbiAgICovXG4gIHJlYWRvbmx5IHRyYW5zYWN0aW9uTGlmZXRpbWVMaW1pdFNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1Byb2Nlc3NBcmdzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Qcm9jZXNzQXJncyhcbiAgb2JqOiBQcm9jZXNzQXJncyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIERlZmF1bHRSZWFkQ29uY2Vybjogb2JqLmRlZmF1bHRSZWFkQ29uY2VybixcbiAgICBEZWZhdWx0V3JpdGVDb25jZXJuOiBvYmouZGVmYXVsdFdyaXRlQ29uY2VybixcbiAgICBGYWlsSW5kZXhLZXlUb29Mb25nOiBvYmouZmFpbEluZGV4S2V5VG9vTG9uZyxcbiAgICBKYXZhc2NyaXB0RW5hYmxlZDogb2JqLmphdmFzY3JpcHRFbmFibGVkLFxuICAgIE1pbmltdW1FbmFibGVkVExTUHJvdG9jb2w6IG9iai5taW5pbXVtRW5hYmxlZFRsc1Byb3RvY29sLFxuICAgIFRsc0NpcGhlckNvbmZpZ01vZGU6IG9iai50bHNDaXBoZXJDb25maWdNb2RlLFxuICAgIEN1c3RvbU9wZW5zc2xDaXBoZXJDb25maWdUbHMxMjogb2JqLmN1c3RvbU9wZW5zc2xDaXBoZXJDb25maWdUbHMxMj8ubWFwKFxuICAgICAgKHkpID0+IHlcbiAgICApLFxuICAgIE5vVGFibGVTY2FuOiBvYmoubm9UYWJsZVNjYW4sXG4gICAgT3Bsb2dTaXplTUI6IG9iai5vcGxvZ1NpemVNYixcbiAgICBTYW1wbGVTaXplQklDb25uZWN0b3I6IG9iai5zYW1wbGVTaXplQmlDb25uZWN0b3IsXG4gICAgU2FtcGxlUmVmcmVzaEludGVydmFsQklDb25uZWN0b3I6IG9iai5zYW1wbGVSZWZyZXNoSW50ZXJ2YWxCaUNvbm5lY3RvcixcbiAgICBPcGxvZ01pblJldGVudGlvbkhvdXJzOiBvYmoub3Bsb2dNaW5SZXRlbnRpb25Ib3VycyxcbiAgICBUcmFuc2FjdGlvbkxpZmV0aW1lTGltaXRTZWNvbmRzOiBvYmoudHJhbnNhY3Rpb25MaWZldGltZUxpbWl0U2Vjb25kcyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU2V0dGluZ3MgbmVlZGVkIHRvIGNvbmZpZ3VyZSB0aGUgTW9uZ29EQiBDb25uZWN0b3IgZm9yIEJ1c2luZXNzIEludGVsbGlnZW5jZSBmb3IgdGhpcyBjbHVzdGVyLlxuICpcbiAqIEBzY2hlbWEgQ2ZuQ2x1c3RlclByb3BzQmlDb25uZWN0b3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZm5DbHVzdGVyUHJvcHNCaUNvbm5lY3RvciB7XG4gIC8qKlxuICAgKiBEYXRhIHNvdXJjZSBub2RlIGRlc2lnbmF0ZWQgZm9yIHRoZSBNb25nb0RCIENvbm5lY3RvciBmb3IgQnVzaW5lc3MgSW50ZWxsaWdlbmNlIG9uIE1vbmdvREIgQ2xvdWQuIFRoZSBNb25nb0RCIENvbm5lY3RvciBmb3IgQnVzaW5lc3MgSW50ZWxsaWdlbmNlIG9uIE1vbmdvREIgQ2xvdWQgcmVhZHMgZGF0YSBmcm9tIHRoZSBwcmltYXJ5LCBzZWNvbmRhcnksIG9yIGFuYWx5dGljcyBub2RlIGJhc2VkIG9uIHlvdXIgcmVhZCBwcmVmZXJlbmNlcy4gRGVmYXVsdHMgdG8gQU5BTFlUSUNTIG5vZGUsIG9yIFNFQ09OREFSWSBpZiB0aGVyZSBhcmUgbm8gQU5BTFlUSUNTIG5vZGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBTkFMWVRJQ1Mgbm9kZSwgb3IgU0VDT05EQVJZIGlmIHRoZXJlIGFyZSBubyBBTkFMWVRJQ1Mgbm9kZXMuXG4gICAqIEBzY2hlbWEgQ2ZuQ2x1c3RlclByb3BzQmlDb25uZWN0b3IjUmVhZFByZWZlcmVuY2VcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRQcmVmZXJlbmNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgTW9uZ29EQiBDb25uZWN0b3IgZm9yIEJ1c2luZXNzIEludGVsbGlnZW5jZSBpcyBlbmFibGVkIG9uIHRoZSBzcGVjaWZpZWQgY2x1c3Rlci5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbHVzdGVyUHJvcHNCaUNvbm5lY3RvciNFbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ2ZuQ2x1c3RlclByb3BzQmlDb25uZWN0b3InIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0NmbkNsdXN0ZXJQcm9wc0JpQ29ubmVjdG9yKFxuICBvYmo6IENmbkNsdXN0ZXJQcm9wc0JpQ29ubmVjdG9yIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgUmVhZFByZWZlcmVuY2U6IG9iai5yZWFkUHJlZmVyZW5jZSxcbiAgICBFbmFibGVkOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29sbGVjdGlvbiBvZiBVbmlmb3JtIFJlc291cmNlIExvY2F0b3JzIHRoYXQgcG9pbnQgdG8gdGhlIE1vbmdvREIgZGF0YWJhc2UuXG4gKlxuICogQHNjaGVtYSBjb25uZWN0aW9uU3RyaW5nc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3Rpb25TdHJpbmdzIHtcbiAgLyoqXG4gICAqIFB1YmxpYyBjb25uZWN0aW9uIHN0cmluZyB0aGF0IHlvdSBjYW4gdXNlIHRvIGNvbm5lY3QgdG8gdGhpcyBjbHVzdGVyLiBUaGlzIGNvbm5lY3Rpb24gc3RyaW5nIHVzZXMgdGhlIG1vbmdvZGI6Ly8gcHJvdG9jb2wuXG4gICAqXG4gICAqIEBzY2hlbWEgY29ubmVjdGlvblN0cmluZ3MjU3RhbmRhcmRcbiAgICovXG4gIHJlYWRvbmx5IHN0YW5kYXJkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgY29ubmVjdGlvbiBzdHJpbmcgdGhhdCB5b3UgY2FuIHVzZSB0byBjb25uZWN0IHRvIHRoaXMgY2x1c3Rlci4gVGhpcyBjb25uZWN0aW9uIHN0cmluZyB1c2VzIHRoZSBtb25nb2RiK3NydjovLyBwcm90b2NvbC5cbiAgICpcbiAgICogQHNjaGVtYSBjb25uZWN0aW9uU3RyaW5ncyNTdGFuZGFyZFNydlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhbmRhcmRTcnY/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5ldHdvcmsgcGVlcmluZyBjb25uZWN0aW9uIHN0cmluZ3MgZm9yIGVhY2ggaW50ZXJmYWNlIFZpcnR1YWwgUHJpdmF0ZSBDbG91ZCAoVlBDKSBlbmRwb2ludCB0aGF0IHlvdSBjb25maWd1cmVkIHRvIGNvbm5lY3QgdG8gdGhpcyBjbHVzdGVyLiBUaGlzIGNvbm5lY3Rpb24gc3RyaW5nIHVzZXMgdGhlIG1vbmdvZGIrc3J2Oi8vIHByb3RvY29sLiBUaGUgcmVzb3VyY2UgcmV0dXJucyB0aGlzIHBhcmFtZXRlciBvbmNlIHNvbWVvbmUgY3JlYXRlcyBhIG5ldHdvcmsgcGVlcmluZyBjb25uZWN0aW9uIHRvIHRoaXMgY2x1c3Rlci4gVGhpcyBwcm90b2NvbCB0ZWxscyB0aGUgYXBwbGljYXRpb24gdG8gbG9vayB1cCB0aGUgaG9zdCBzZWVkIGxpc3QgaW4gdGhlIERvbWFpbiBOYW1lIFN5c3RlbSAoRE5TKS4gVGhpcyBsaXN0IHN5bmNocm9uaXplcyB3aXRoIHRoZSBub2RlcyBpbiBhIGNsdXN0ZXIuIElmIHRoZSBjb25uZWN0aW9uIHN0cmluZyB1c2VzIHRoaXMgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvcm1hdCwgeW91IGRvbid0IG5lZWQgdG8gYXBwZW5kIHRoZSBzZWVkIGxpc3Qgb3IgY2hhbmdlIHRoZSBVUkkgaWYgdGhlIG5vZGVzIGNoYW5nZS4gVXNlIHRoaXMgVVJJIGZvcm1hdCBpZiB5b3VyIGRyaXZlciBzdXBwb3J0cyBpdC4gSWYgaXQgZG9lc24ndCwgdXNlIGNvbm5lY3Rpb25TdHJpbmdzLnByaXZhdGUuIEZvciBBbWF6b24gV2ViIFNlcnZpY2VzIChBV1MpIGNsdXN0ZXJzLCB0aGlzIHJlc291cmNlIHJldHVybnMgdGhpcyBwYXJhbWV0ZXIgb25seSBpZiB5b3UgZW5hYmxlIGN1c3RvbSBETlMuXG4gICAqXG4gICAqIEBzY2hlbWEgY29ubmVjdGlvblN0cmluZ3MjUHJpdmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZT86IHN0cmluZztcblxuICAvKipcbiAgICogTmV0d29yayBwZWVyaW5nIGNvbm5lY3Rpb24gc3RyaW5ncyBmb3IgZWFjaCBpbnRlcmZhY2UgVmlydHVhbCBQcml2YXRlIENsb3VkIChWUEMpIGVuZHBvaW50IHRoYXQgeW91IGNvbmZpZ3VyZWQgdG8gY29ubmVjdCB0byB0aGlzIGNsdXN0ZXIuIFRoaXMgY29ubmVjdGlvbiBzdHJpbmcgdXNlcyB0aGUgbW9uZ29kYitzcnY6Ly8gcHJvdG9jb2wuIFRoZSByZXNvdXJjZSByZXR1cm5zIHRoaXMgcGFyYW1ldGVyIHdoZW4gc29tZW9uZSBjcmVhdGVzIGEgbmV0d29yayBwZWVyaW5nIGNvbm5lY3Rpb24gdG8gdGhpcyBjbHVzdGVyLiBUaGlzIHByb3RvY29sIHRlbGxzIHRoZSBhcHBsaWNhdGlvbiB0byBsb29rIHVwIHRoZSBob3N0IHNlZWQgbGlzdCBpbiB0aGUgRG9tYWluIE5hbWUgU3lzdGVtIChETlMpLiBUaGlzIGxpc3Qgc3luY2hyb25pemVzIHdpdGggdGhlIG5vZGVzIGluIGEgY2x1c3Rlci4gSWYgdGhlIGNvbm5lY3Rpb24gc3RyaW5nIHVzZXMgdGhpcyBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgKFVSSSkgZm9ybWF0LCB5b3UgZG9uJ3QgbmVlZCB0byBhcHBlbmQgdGhlIHNlZWQgbGlzdCBvciBjaGFuZ2UgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSBpZiB0aGUgbm9kZXMgY2hhbmdlLiBVc2UgdGhpcyBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgKFVSSSkgZm9ybWF0IGlmIHlvdXIgZHJpdmVyIHN1cHBvcnRzIGl0LiBJZiBpdCBkb2Vzbid0LCB1c2UgY29ubmVjdGlvblN0cmluZ3MucHJpdmF0ZS4gRm9yIEFtYXpvbiBXZWIgU2VydmljZXMgKEFXUykgY2x1c3RlcnMsIHRoaXMgcGFyYW1ldGVyIHJldHVybnMgb25seSBpZiB5b3UgZW5hYmxlIGN1c3RvbSBETlMuXG4gICAqXG4gICAqIEBzY2hlbWEgY29ubmVjdGlvblN0cmluZ3MjUHJpdmF0ZVNydlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZVNydj86IHN0cmluZztcblxuICAvKipcbiAgICogUHJpdmF0ZSBlbmRwb2ludC1hd2FyZSBjb25uZWN0aW9uIHN0cmluZ3MgdGhhdCB1c2UgQVdTLWhvc3RlZCBjbHVzdGVycyB3aXRoIEFtYXpvbiBXZWIgU2VydmljZXMgKEFXUykgUHJpdmF0ZUxpbmsuIEVhY2gga2V5IGlkZW50aWZpZXMgYW4gQW1hem9uIFdlYiBTZXJ2aWNlcyAoQVdTKSBpbnRlcmZhY2UgZW5kcG9pbnQuIEVhY2ggdmFsdWUgaWRlbnRpZmllcyB0aGUgcmVsYXRlZCBtb25nb2RiOi8vIGNvbm5lY3Rpb24gc3RyaW5nIHRoYXQgeW91IHVzZSB0byBjb25uZWN0IHRvIE1vbmdvREIgQ2xvdWQgdGhyb3VnaCB0aGUgaW50ZXJmYWNlIGVuZHBvaW50IHRoYXQgdGhlIGtleSBuYW1lcy5cbiAgICpcbiAgICogQHNjaGVtYSBjb25uZWN0aW9uU3RyaW5ncyNQcml2YXRlRW5kcG9pbnRzXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlRW5kcG9pbnRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgZW5kcG9pbnQtYXdhcmUgY29ubmVjdGlvbiBzdHJpbmdzIHRoYXQgdXNlIEFXUy1ob3N0ZWQgY2x1c3RlcnMgd2l0aCBBbWF6b24gV2ViIFNlcnZpY2VzIChBV1MpIFByaXZhdGVMaW5rLiBFYWNoIGtleSBpZGVudGlmaWVzIGFuIEFtYXpvbiBXZWIgU2VydmljZXMgKEFXUykgaW50ZXJmYWNlIGVuZHBvaW50LiBFYWNoIHZhbHVlIGlkZW50aWZpZXMgdGhlIHJlbGF0ZWQgbW9uZ29kYjovLyBjb25uZWN0aW9uIHN0cmluZyB0aGF0IHlvdSB1c2UgdG8gY29ubmVjdCB0byBBdGxhcyB0aHJvdWdoIHRoZSBpbnRlcmZhY2UgZW5kcG9pbnQgdGhhdCB0aGUga2V5IG5hbWVzLlxuICAgKlxuICAgKiBAc2NoZW1hIGNvbm5lY3Rpb25TdHJpbmdzI1ByaXZhdGVFbmRwb2ludHNTcnZcbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVFbmRwb2ludHNTcnY/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUHJpdmF0ZSBlbmRwb2ludC1hd2FyZSBjb25uZWN0aW9uIHN0cmluZyBvcHRpbWl6ZWQgZm9yIHNoYXJkZWQgY2x1c3RlcnMgdGhhdCB1c2VzIHRoZSBgbW9uZ29kYitzcnY6Ly9gIHByb3RvY29sIHRvIGNvbm5lY3QgdG8gTW9uZ29EQiBDbG91ZCB0aHJvdWdoIGEgcHJpdmF0ZSBlbmRwb2ludC4gSWYgdGhlIGNvbm5lY3Rpb24gc3RyaW5nIHVzZXMgdGhpcyBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgKFVSSSkgZm9ybWF0LCB5b3UgZG9uJ3QgbmVlZCB0byBjaGFuZ2UgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSBpZiB0aGUgbm9kZXMgY2hhbmdlLiBVc2UgdGhpcyBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgKFVSSSkgZm9ybWF0IGlmIHlvdXIgYXBwbGljYXRpb24gYW5kIEF0bGFzIGNsdXN0ZXIgc3VwcG9ydHMgaXQuIElmIGl0IGRvZXNuJ3QsIHVzZSBhbmQgY29uc3VsdCB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgY29ubmVjdGlvblN0cmluZ3MucHJpdmF0ZUVuZHBvaW50W25dLnNydkNvbm5lY3Rpb25TdHJpbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgY29ubmVjdGlvblN0cmluZ3MjU1JWU2hhcmRPcHRpbWl6ZWRDb25uZWN0aW9uU3RyaW5nXG4gICAqL1xuICByZWFkb25seSBzcnZTaGFyZE9wdGltaXplZENvbm5lY3Rpb25TdHJpbmc/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ29ubmVjdGlvblN0cmluZ3MnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Nvbm5lY3Rpb25TdHJpbmdzKFxuICBvYmo6IENvb