awscdk-resources-mongodbatlas
Version:
MongoDB Atlas CDK Construct Library for AWS CloudFormation Resources
228 lines • 40.2 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CfnStreamConnection = exports.DbRoleToExecuteType = exports.CfnStreamConnectionPropsType = void 0;
exports.toJson_CfnStreamConnectionProps = toJson_CfnStreamConnectionProps;
exports.toJson_DbRoleToExecute = toJson_DbRoleToExecute;
exports.toJson_StreamsKafkaAuthentication = toJson_StreamsKafkaAuthentication;
exports.toJson_StreamsKafkaSecurity = toJson_StreamsKafkaSecurity;
exports.toJson_Networking = toJson_Networking;
exports.toJson_Aws = toJson_Aws;
exports.toJson_SchemaRegistryAuthentication = toJson_SchemaRegistryAuthentication;
exports.toJson_NetworkingAccess = toJson_NetworkingAccess;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
// Generated by cdk-import
const cdk = require("aws-cdk-lib");
/**
* Converts an object of type 'CfnStreamConnectionProps' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_CfnStreamConnectionProps(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
ProjectId: obj.projectId,
Profile: obj.profile,
ConnectionName: obj.connectionName,
InstanceName: obj.instanceName,
WorkspaceName: obj.workspaceName,
Type: obj.type,
ClusterName: obj.clusterName,
ClusterProjectId: obj.clusterProjectId,
DbRoleToExecute: toJson_DbRoleToExecute(obj.dbRoleToExecute),
Authentication: toJson_StreamsKafkaAuthentication(obj.authentication),
BootstrapServers: obj.bootstrapServers,
Security: toJson_StreamsKafkaSecurity(obj.security),
Config: obj.config,
Networking: toJson_Networking(obj.networking),
Aws: toJson_Aws(obj.aws),
Url: obj.url,
Headers: obj.headers,
Provider: obj.provider,
SchemaRegistryAuthentication: toJson_SchemaRegistryAuthentication(obj.schemaRegistryAuthentication),
SchemaRegistryUrls: obj.schemaRegistryUrls?.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 */
/**
* Type of the connection. Can be Cluster, Kafka, Sample, AWSLambda, or Https.
*
* @schema CfnStreamConnectionPropsType
*/
var CfnStreamConnectionPropsType;
(function (CfnStreamConnectionPropsType) {
/** Kafka */
CfnStreamConnectionPropsType["KAFKA"] = "Kafka";
/** Cluster */
CfnStreamConnectionPropsType["CLUSTER"] = "Cluster";
/** Sample */
CfnStreamConnectionPropsType["SAMPLE"] = "Sample";
/** AWSLambda */
CfnStreamConnectionPropsType["AWS_LAMBDA"] = "AWSLambda";
/** Https */
CfnStreamConnectionPropsType["HTTPS"] = "Https";
})(CfnStreamConnectionPropsType || (exports.CfnStreamConnectionPropsType = CfnStreamConnectionPropsType = {}));
/**
* Converts an object of type 'DbRoleToExecute' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_DbRoleToExecute(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Role: obj.role,
Type: obj.type,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'StreamsKafkaAuthentication' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_StreamsKafkaAuthentication(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Mechanism: obj.mechanism,
Method: obj.method,
Username: obj.username,
Password: obj.password,
TokenEndpointUrl: obj.tokenEndpointUrl,
ClientId: obj.clientId,
ClientSecret: obj.clientSecret,
Scope: obj.scope,
SaslOauthbearerExtensions: obj.saslOauthbearerExtensions,
SslCertificate: obj.sslCertificate,
SslKey: obj.sslKey,
SslKeyPassword: obj.sslKeyPassword,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'StreamsKafkaSecurity' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_StreamsKafkaSecurity(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
BrokerPublicCertificate: obj.brokerPublicCertificate,
Protocol: obj.protocol,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'Networking' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_Networking(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Access: toJson_NetworkingAccess(obj.access),
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'Aws' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_Aws(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
RoleArn: obj.roleArn,
TestBucket: obj.testBucket,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'SchemaRegistryAuthentication' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_SchemaRegistryAuthentication(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Type: obj.type,
Username: obj.username,
Password: obj.password,
};
// 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 */
/**
* Type of the DB role. Can be either BuiltIn or Custom.
*
* @schema DbRoleToExecuteType
*/
var DbRoleToExecuteType;
(function (DbRoleToExecuteType) {
/** BUILT_IN */
DbRoleToExecuteType["BUILT_IN"] = "BUILT_IN";
/** CUSTOM */
DbRoleToExecuteType["CUSTOM"] = "CUSTOM";
})(DbRoleToExecuteType || (exports.DbRoleToExecuteType = DbRoleToExecuteType = {}));
/**
* Converts an object of type 'NetworkingAccess' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_NetworkingAccess(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Type: obj.type,
ConnectionId: obj.connectionId,
Name: obj.name,
TgwRouteId: obj.tgwRouteId,
};
// 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::StreamConnection`
*
* @cloudformationResource MongoDB::Atlas::StreamConnection
* @stability external
*/
class CfnStreamConnection extends cdk.CfnResource {
/**
* Create a new `MongoDB::Atlas::StreamConnection`.
*
* @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: CfnStreamConnection.CFN_RESOURCE_TYPE_NAME,
properties: toJson_CfnStreamConnectionProps(props),
});
this.props = props;
}
}
exports.CfnStreamConnection = CfnStreamConnection;
_a = JSII_RTTI_SYMBOL_1;
CfnStreamConnection[_a] = { fqn: "awscdk-resources-mongodbatlas.CfnStreamConnection", version: "4.0.0" };
/**
* The CloudFormation resource type name for this resource class.
*/
CfnStreamConnection.CFN_RESOURCE_TYPE_NAME = "MongoDB::Atlas::StreamConnection";
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbDEtcmVzb3VyY2VzL3N0cmVhbS1jb25uZWN0aW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUErSUEsMEVBbUNDO0FBOENELHdEQWVDO0FBa0dELDhFQXlCQztBQTRCRCxrRUFlQztBQXFCRCw4Q0FjQztBQTRCRCxnQ0FlQztBQW1DRCxrRkFnQkM7QUFzREQsMERBaUJDOztBQTdsQkQsMEJBQTBCO0FBQzFCLG1DQUFtQztBQTBJbkM7O0dBRUc7QUFDSCx5Q0FBeUM7QUFDekMsU0FBZ0IsK0JBQStCLENBQzdDLEdBQXlDO0lBRXpDLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRztRQUNiLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztRQUN4QixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87UUFDcEIsY0FBYyxFQUFFLEdBQUcsQ0FBQyxjQUFjO1FBQ2xDLFlBQVksRUFBRSxHQUFHLENBQUMsWUFBWTtRQUM5QixhQUFhLEVBQUUsR0FBRyxDQUFDLGFBQWE7UUFDaEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO1FBQ2QsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXO1FBQzVCLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxnQkFBZ0I7UUFDdEMsZUFBZSxFQUFFLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUM7UUFDNUQsY0FBYyxFQUFFLGlDQUFpQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUM7UUFDckUsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLGdCQUFnQjtRQUN0QyxRQUFRLEVBQUUsMkJBQTJCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUNuRCxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU07UUFDbEIsVUFBVSxFQUFFLGlCQUFpQixDQUFD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R0FBRztRQUNiLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtRQUNkLFlBQVksRUFBRSxHQUFHLENBQUMsWUFBWTtRQUM5QixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7UUFDZCxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVU7S0FDM0IsQ0FBQztJQUNGLDBCQUEwQjtJQUMxQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUNsQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDM0QsRUFBRSxDQUNILENBQUM7QUFDSixDQUFDO0FBQ0Qsd0NBQXdDO0FBRXhDOzs7OztHQUtHO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSxHQUFHLENBQUMsV0FBVztJQVl0RDs7Ozs7O09BTUc7SUFDSCxZQUNFLEtBQTJCLEVBQzNCLEVBQVUsRUFDVixLQUErQjtRQUUvQixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxzQkFBc0I7WUFDaEQsVUFBVSxFQUFFLCtCQUErQixDQUFDLEtBQUssQ0FBRTtTQUNwRCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDOztBQTlCSCxrREErQkM7OztBQTlCQzs7R0FFRztBQUNvQiwwQ0FBc0IsR0FDM0Msa0NBQWtDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHZW5lcmF0ZWQgYnkgY2RrLWltcG9ydFxuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIFJldHVybnMsIGFkZHMsIGVkaXRzLCBhbmQgcmVtb3ZlcyBvbmUgY29ubmVjdGlvbiBmb3IgYSBzdHJlYW0gd29ya3NwYWNlIGluIHRoZSBzcGVjaWZpZWQgcHJvamVjdC4gVG8gdXNlIHRoaXMgcmVzb3VyY2UsIHRoZSByZXF1ZXN0aW5nIEFQSSBLZXkgbXVzdCBoYXZlIHRoZSBQcm9qZWN0IE93bmVyIHJvbGVzLlxuICpcbiAqIEBzY2hlbWEgQ2ZuU3RyZWFtQ29ubmVjdGlvblByb3BzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2ZuU3RyZWFtQ29ubmVjdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIFVuaXF1ZSAyNC1oZXhhZGVjaW1hbCBkaWdpdCBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIHlvdXIgcHJvamVjdC4gVXNlIHRoZSBbL2dyb3Vwc10oI3RhZy9Qcm9qZWN0cy9vcGVyYXRpb24vbGlzdFByb2plY3RzKSBlbmRwb2ludCB0byByZXRyaWV2ZSBhbGwgcHJvamVjdHMgdG8gd2hpY2ggdGhlIGF1dGhlbnRpY2F0ZWQgdXNlciBoYXMgYWNjZXNzLlxuICAgKlxuICAgKiAqKk5PVEUqKjogR3JvdXBzIGFuZCBwcm9qZWN0cyBhcmUgc3lub255bW91cyB0ZXJtcy4gWW91ciBncm91cCBpZCBpcyB0aGUgc2FtZSBhcyB5b3VyIHByb2plY3QgaWQuIEZvciBleGlzdGluZyBncm91cHMsIHlvdXIgZ3JvdXAvcHJvamVjdCBpZCByZW1haW5zIHRoZSBzYW1lLiBUaGUgcmVzb3VyY2UgYW5kIGNvcnJlc3BvbmRpbmcgZW5kcG9pbnRzIHVzZSB0aGUgdGVybSBncm91cHMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuU3RyZWFtQ29ubmVjdGlvblByb3BzI1Byb2plY3RJZFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByb2ZpbGUgdXNlZCB0byBwcm92aWRlIGNyZWRlbnRpYWxzIGluZm9ybWF0aW9uLCAoYSBzZWNyZXQgd2l0aCB0aGUgY2ZuL2F0bGFzL3Byb2ZpbGUve1Byb2ZpbGV9LCBpcyByZXF1aXJlZCksIGlmIG5vdCBwcm92aWRlZCBkZWZhdWx0IGlzIHVzZWRcbiAgICpcbiAgICogQHNjaGVtYSBDZm5TdHJlYW1Db25uZWN0aW9uUHJvcHMjUHJvZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBzdHJlYW0gY29ubmVjdGlvbi4gSW4gdGhlIGNhc2Ugb2YgdGhlIFNhbXBsZSB0eXBlLCB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBzYW1wbGUgc291cmNlLlxuICAgKlxuICAgKiBAc2NoZW1hIENmblN0cmVhbUNvbm5lY3Rpb25Qcm9wcyNDb25uZWN0aW9uTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGlvbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBzdHJlYW0gaW5zdGFuY2UuIFdBUk5JTkc6IFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuIFBsZWFzZSB1c2UgV29ya3NwYWNlTmFtZSBpbnN0ZWFkLlxuICAgKlxuICAgKiBAc2NoZW1hIENmblN0cmVhbUNvbm5lY3Rpb25Qcm9wcyNJbnN0YW5jZU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBzdHJlYW0gd29ya3NwYWNlLlxuICAgKlxuICAgKiBAc2NoZW1hIENmblN0cmVhbUNvbm5lY3Rpb25Qcm9wcyNXb3Jrc3BhY2VOYW1lXG4gICAqL1xuICByZWFkb25seSB3b3Jrc3BhY2VOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBjb25uZWN0aW9uLiBDYW4gYmUgQ2x1c3RlciwgS2Fma2EsIFNhbXBsZSwgQVdTTGFtYmRhLCBvciBIdHRwcy5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5TdHJlYW1Db25uZWN0aW9uUHJvcHMjVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogQ2ZuU3RyZWFtQ29ubmVjdGlvblByb3BzVHlwZTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgY2x1c3RlciBjb25maWd1cmVkIGZvciB0aGlzIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuU3RyZWFtQ29ubmVjdGlvblByb3BzI0NsdXN0ZXJOYW1lXG4gICAqL1xuICByZWFkb25seSBjbHVzdGVyTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVW5pcXVlIDI0LWhleGFkZWNpbWFsIGRpZ2l0IHN0cmluZyB0aGF0IGlkZW50aWZpZXMgdGhlIHByb2plY3QgY29udGFpbmluZyB0aGUgY2x1c3RlciBmb3IgY3Jvc3MtcHJvamVjdCBjbHVzdGVyIGNvbm5lY3Rpb25zLlxuICAgKlxuICAgKiBAc2NoZW1hIENmblN0cmVhbUNvbm5lY3Rpb25Qcm9wcyNDbHVzdGVyUHJvamVjdElkXG4gICAqL1xuICByZWFkb25seSBjbHVzdGVyUHJvamVjdElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIENmblN0cmVhbUNvbm5lY3Rpb25Qcm9wcyNEYlJvbGVUb0V4ZWN1dGVcbiAgICovXG4gIHJlYWRvbmx5IGRiUm9sZVRvRXhlY3V0ZT86IERiUm9sZVRvRXhlY3V0ZTtcblxuICAvKipcbiAgICogQHNjaGVtYSBDZm5TdHJlYW1Db25uZWN0aW9uUHJvcHMjQXV0aGVudGljYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uPzogU3RyZWFtc0thZmthQXV0aGVudGljYXRpb247XG5cbiAgLyoqXG4gICAqIENvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHNlcnZlciBhZGRyZXNzZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuU3RyZWFtQ29ubmVjdGlvblByb3BzI0Jvb3RzdHJhcFNlcnZlcnNcbiAgICovXG4gIHJlYWRvbmx5IGJvb3RzdHJhcFNlcnZlcnM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQ2ZuU3RyZWFtQ29ubmVjdGlvblByb3BzI1NlY3VyaXR5XG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eT86IFN0cmVhbXNLYWZrYVNlY3VyaXR5O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIENmblN0cmVhbUNvbm5lY3Rpb25Qcm9wcyNDb25maWdcbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZz86IGFueTtcblxuICAvKipcbiAgICogQHNjaGVtYSBDZm5TdHJlYW1Db25uZWN0aW9uUHJvcHMjTmV0d29ya2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgbmV0d29ya2luZz86IE5ldHdvcmtpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQ2ZuU3RyZWFtQ29ubmVjdGlvblByb3BzI0F3c1xuICAgKi9cbiAgcmVhZG9ubHkgYXdzPzogQXdzO1xuXG4gIC8qKlxuICAgKiBVUkwgZW5kcG9pbnQgZm9yIEhUVFBTIHR5cGUgY29ubmVjdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuU3RyZWFtQ29ubmVjdGlvblByb3BzI1VybFxuICAgKi9cbiAgcmVhZG9ubHkgdXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIVFRQIGhlYWRlcnMgZm9yIEhUVFBTIHR5cGUgY29ubmVjdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuU3RyZWFtQ29ubmVjdGlvblByb3BzI0hlYWRlcnNcbiAgICovXG4gIHJlYWRvbmx5IGhlYWRlcnM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFRoZSBTY2hlbWEgUmVnaXN0cnkgcHJvdmlkZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuU3RyZWFtQ29ubmVjdGlvblByb3BzI1Byb3ZpZGVyXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBDZm5TdHJlYW1Db25uZWN0aW9uUHJvcHMjU2NoZW1hUmVnaXN0cnlBdXRoZW50aWNhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZW1hUmVnaXN0cnlBdXRoZW50aWNhdGlvbj86IFNjaGVtYVJlZ2lzdHJ5QXV0aGVudGljYXRpb247XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgU2NoZW1hIFJlZ2lzdHJ5IGVuZHBvaW50IFVSTHMuIEVhY2ggVVJMIG11c3QgdXNlIHRoZSBodHRwIG9yIGh0dHBzIHNjaGVtZSBhbmQgc3BlY2lmeSBhIHZhbGlkIGhvc3QgYW5kIG9wdGlvbmFsIHBvcnQuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuU3RyZWFtQ29ubmVjdGlvblByb3BzI1NjaGVtYVJlZ2lzdHJ5VXJsc1xuICAgKi9cbiAgcmVhZG9ubHkgc2NoZW1hUmVnaXN0cnlVcmxzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0NmblN0cmVhbUNvbm5lY3Rpb25Qcm9wcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQ2ZuU3RyZWFtQ29ubmVjdGlvblByb3BzKFxuICBvYmo6IENmblN0cmVhbUNvbm5lY3Rpb25Qcm9wcyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIFByb2plY3RJZDogb2JqLnByb2plY3RJZCxcbiAgICBQcm9maWxlOiBvYmoucHJvZmlsZSxcbiAgICBDb25uZWN0aW9uTmFtZTogb2JqLmNvbm5lY3Rpb25OYW1lLFxuICAgIEluc3RhbmNlTmFtZTogb2JqLmluc3RhbmNlTmFtZSxcbiAgICBXb3Jrc3BhY2VOYW1lOiBvYmoud29ya3NwYWNlTmFtZSxcbiAgICBUeXBlOiBvYmoudHlwZSxcbiAgICBDbHVzdGVyTmFtZTogb2JqLmNsdXN0ZXJOYW1lLFxuICAgIENsdXN0ZXJQcm9qZWN0SWQ6IG9iai5jbHVzdGVyUHJvamVjdElkLFxuICAgIERiUm9sZVRvRXhlY3V0ZTogdG9Kc29uX0RiUm9sZVRvRXhlY3V0ZShvYmouZGJSb2xlVG9FeGVjdXRlKSxcbiAgICBBdXRoZW50aWNhdGlvbjogdG9Kc29uX1N0cmVhbXNLYWZrYUF1dGhlbnRpY2F0aW9uKG9iai5hdXRoZW50aWNhdGlvbiksXG4gICAgQm9vdHN0cmFwU2VydmVyczogb2JqLmJvb3RzdHJhcFNlcnZlcnMsXG4gICAgU2VjdXJpdHk6IHRvSnNvbl9TdHJlYW1zS2Fma2FTZWN1cml0eShvYmouc2VjdXJpdHkpLFxuICAgIENvbmZpZzogb2JqLmNvbmZpZyxcbiAgICBOZXR3b3JraW5nOiB0b0pzb25fTmV0d29ya2luZyhvYmoubmV0d29ya2luZyksXG4gICAgQXdzOiB0b0pzb25fQXdzKG9iai5hd3MpLFxuICAgIFVybDogb2JqLnVybCxcbiAgICBIZWFkZXJzOiBvYmouaGVhZGVycyxcbiAgICBQcm92aWRlcjogb2JqLnByb3ZpZGVyLFxuICAgIFNjaGVtYVJlZ2lzdHJ5QXV0aGVudGljYXRpb246IHRvSnNvbl9TY2hlbWFSZWdpc3RyeUF1dGhlbnRpY2F0aW9uKFxuICAgICAgb2JqLnNjaGVtYVJlZ2lzdHJ5QXV0aGVudGljYXRpb25cbiAgICApLFxuICAgIFNjaGVtYVJlZ2lzdHJ5VXJsczogb2JqLnNjaGVtYVJlZ2lzdHJ5VXJscz8ubWFwKCh5KSA9PiB5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogVHlwZSBvZiB0aGUgY29ubmVjdGlvbi4gQ2FuIGJlIENsdXN0ZXIsIEthZmthLCBTYW1wbGUsIEFXU0xhbWJkYSwgb3IgSHR0cHMuXG4gKlxuICogQHNjaGVtYSBDZm5TdHJlYW1Db25uZWN0aW9uUHJvcHNUeXBlXG4gKi9cbmV4cG9ydCBlbnVtIENmblN0cmVhbUNvbm5lY3Rpb25Qcm9wc1R5cGUge1xuICAvKiogS2Fma2EgKi9cbiAgS0FGS0EgPSBcIkthZmthXCIsXG4gIC8qKiBDbHVzdGVyICovXG4gIENMVVNURVIgPSBcIkNsdXN0ZXJcIixcbiAgLyoqIFNhbXBsZSAqL1xuICBTQU1QTEUgPSBcIlNhbXBsZVwiLFxuICAvKiogQVdTTGFtYmRhICovXG4gIEFXU19MQU1CREEgPSBcIkFXU0xhbWJkYVwiLFxuICAvKiogSHR0cHMgKi9cbiAgSFRUUFMgPSBcIkh0dHBzXCIsXG59XG5cbi8qKlxuICogVGhlIG5hbWUgb2YgYSBCdWlsdCBpbiBvciBDdXN0b20gREIgUm9sZSB0byBjb25uZWN0IHRvIGFuIEF0bGFzIENsdXN0ZXIuXG4gKlxuICogQHNjaGVtYSBEQlJvbGVUb0V4ZWN1dGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYlJvbGVUb0V4ZWN1dGUge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHJvbGUgdG8gdXNlLiBDYW4gYmUgYSBidWlsdCBpbiByb2xlIG9yIGEgY3VzdG9tIHJvbGUuXG4gICAqXG4gICAqIEBzY2hlbWEgREJSb2xlVG9FeGVjdXRlI1JvbGVcbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIERCIHJvbGUuIENhbiBiZSBlaXRoZXIgQnVpbHRJbiBvciBDdXN0b20uXG4gICAqXG4gICAqIEBzY2hlbWEgREJSb2xlVG9FeGVjdXRlI1R5cGVcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU/OiBEYlJvbGVUb0V4ZWN1dGVUeXBlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdEYlJvbGVUb0V4ZWN1dGUnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0RiUm9sZVRvRXhlY3V0ZShcbiAgb2JqOiBEYlJvbGVUb0V4ZWN1dGUgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBSb2xlOiBvYmoucm9sZSxcbiAgICBUeXBlOiBvYmoudHlwZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogVXNlciBjcmVkZW50aWFscyByZXF1aXJlZCB0byBjb25uZWN0IHRvIGEgS2Fma2EgQ2x1c3Rlci4gSW5jbHVkZXMgdGhlIGF1dGhlbnRpY2F0aW9uIHR5cGUsIGFzIHdlbGwgYXMgdGhlIHBhcmFtZXRlcnMgZm9yIHRoYXQgYXV0aGVudGljYXRpb24gbW9kZS5cbiAqXG4gKiBAc2NoZW1hIFN0cmVhbXNLYWZrYUF1dGhlbnRpY2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZWFtc0thZmthQXV0aGVudGljYXRpb24ge1xuICAvKipcbiAgICogU3R5bGUgb2YgYXV0aGVudGljYXRpb24uIENhbiBiZSBvbmUgb2YgUExBSU4sIFNDUkFNLTI1NiwgU0NSQU0tNTEyLCBvciBPQVVUSEJFQVJFUi5cbiAgICpcbiAgICogQHNjaGVtYSBTdHJlYW1zS2Fma2FBdXRoZW50aWNhdGlvbiNNZWNoYW5pc21cbiAgICovXG4gIHJlYWRvbmx5IG1lY2hhbmlzbT86IHN0cmluZztcblxuICAvKipcbiAgICogT0F1dGggYXV0aGVudGljYXRpb24gbWV0aG9kLlxuICAgKlxuICAgKiBAc2NoZW1hIFN0cmVhbXNLYWZrYUF1dGhlbnRpY2F0aW9uI01ldGhvZFxuICAgKi9cbiAgcmVhZG9ubHkgbWV0aG9kPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2VybmFtZSBvZiB0aGUgYWNjb3VudCB0byBjb25uZWN0IHRvIHRoZSBLYWZrYSBjbHVzdGVyLlxuICAgKlxuICAgKiBAc2NoZW1hIFN0cmVhbXNLYWZrYUF1dGhlbnRpY2F0aW9uI1VzZXJuYW1lXG4gICAqL1xuICByZWFkb25seSB1c2VybmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogUGFzc3dvcmQgb2YgdGhlIGFjY291bnQgdG8gY29ubmVjdCB0byB0aGUgS2Fma2EgY2x1c3Rlci4gUmV2aWV3IFtBV1Mgc2VjdXJpdHkgYmVzdCBwcmFjdGljZXMgZm9yIENsb3VkRm9ybWF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9zZWN1cml0eS1iZXN0LXByYWN0aWNlcy5odG1sI2NyZWRzKSB0byBtYW5hZ2UgY3JlZGVudGlhbHMuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RyZWFtc0thZmthQXV0aGVudGljYXRpb24jUGFzc3dvcmRcbiAgICovXG4gIHJlYWRvbmx5IHBhc3N3b3JkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPQXV0aCB0b2tlbiBlbmRwb2ludCBVUkwuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RyZWFtc0thZmthQXV0aGVudGljYXRpb24jVG9rZW5FbmRwb2ludFVybFxuICAgKi9cbiAgcmVhZG9ubHkgdG9rZW5FbmRwb2ludFVybD86IHN0cmluZztcblxuICAvKipcbiAgICogT0F1dGggY2xpZW50IElELlxuICAgKlxuICAgKiBAc2NoZW1hIFN0cmVhbXNLYWZrYUF1dGhlbnRpY2F0aW9uI0NsaWVudElkXG4gICAqL1xuICByZWFkb25seSBjbGllbnRJZD86IHN0cmluZztcblxuICAvKipcbiAgICogT0F1dGggY2xpZW50IHNlY3JldC4gUmV2aWV3IFtBV1Mgc2VjdXJpdHkgYmVzdCBwcmFjdGljZXMgZm9yIENsb3VkRm9ybWF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9zZWN1cml0eS1iZXN0LXByYWN0aWNlcy5odG1sI2NyZWRzKSB0byBtYW5hZ2UgY3JlZGVudGlhbHMuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RyZWFtc0thZmthQXV0aGVudGljYXRpb24jQ2xpZW50U2VjcmV0XG4gICAqL1xuICByZWFkb25seSBjbGllbnRTZWNyZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9BdXRoIHNjb3BlLlxuICAgKlxuICAgKiBAc2NoZW1hIFN0cmVhbXNLYWZrYUF1dGhlbnRpY2F0aW9uI1Njb3BlXG4gICAqL1xuICByZWFkb25seSBzY29wZT86IHN0cmluZztcblxuICAvKipcbiAgICogU0FTTCBPQXV0aCBiZWFyZXIgZXh0ZW5zaW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBTdHJlYW1zS2Fma2FBdXRoZW50aWNhdGlvbiNTYXNsT2F1dGhiZWFyZXJFeHRlbnNpb25zXG4gICAqL1xuICByZWFkb25seSBzYXNsT2F1dGhiZWFyZXJFeHRlbnNpb25zPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTU0wgY2VydGlmaWNhdGUgZm9yIGNsaWVudCBhdXRoZW50aWNhdGlvbiB0byBLYWZrYS5cbiAgICpcbiAgICogQHNjaGVtYSBTdHJlYW1zS2Fma2FBdXRoZW50aWNhdGlvbiNTc2xDZXJ0aWZpY2F0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3NsQ2VydGlmaWNhdGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNTTCBrZXkgZm9yIGNsaWVudCBhdXRoZW50aWNhdGlvbiB0byBLYWZrYS4gUmV2aWV3IFtBV1Mgc2VjdXJpdHkgYmVzdCBwcmFjdGljZXMgZm9yIENsb3VkRm9ybWF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9zZWN1cml0eS1iZXN0LXByYWN0aWNlcy5odG1sI2NyZWRzKSB0byBtYW5hZ2UgY3JlZGVudGlhbHMuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RyZWFtc0thZmthQXV0aGVudGljYXRpb24jU3NsS2V5XG4gICAqL1xuICByZWFkb25seSBzc2xLZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhc3N3b3JkIGZvciB0aGUgU1NMIGtleSwgaWYgaXQgaXMgcGFzc3dvcmQgcHJvdGVjdGVkLiBSZXZpZXcgW0FXUyBzZWN1cml0eSBiZXN0IHByYWN0aWNlcyBmb3IgQ2xvdWRGb3JtYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3NlY3VyaXR5LWJlc3QtcHJhY3RpY2VzLmh0bWwjY3JlZHMpIHRvIG1hbmFnZSBjcmVkZW50aWFscy5cbiAgICpcbiAgICogQHNjaGVtYSBTdHJlYW1zS2Fma2FBdXRoZW50aWNhdGlvbiNTc2xLZXlQYXNzd29yZFxuICAgKi9cbiAgcmVhZG9ubHkgc3NsS2V5UGFzc3dvcmQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1N0cmVhbXNLYWZrYUF1dGhlbnRpY2F0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9TdHJlYW1zS2Fma2FBdXRoZW50aWNhdGlvbihcbiAgb2JqOiBTdHJlYW1zS2Fma2FBdXRoZW50aWNhdGlvbiB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIE1lY2hhbmlzbTogb2JqLm1lY2hhbmlzbSxcbiAgICBNZXRob2Q6IG9iai5tZXRob2QsXG4gICAgVXNlcm5hbWU6IG9iai51c2VybmFtZSxcbiAgICBQYXNzd29yZDogb2JqLnBhc3N3b3JkLFxuICAgIFRva2VuRW5kcG9pbnRVcmw6IG9iai50b2tlbkVuZHBvaW50VXJsLFxuICAgIENsaWVudElkOiBvYmouY2xpZW50SWQsXG4gICAgQ2xpZW50U2VjcmV0OiBvYmouY2xpZW50U2VjcmV0LFxuICAgIFNjb3BlOiBvYmouc2NvcGUsXG4gICAgU2FzbE9hdXRoYmVhcmVyRXh0ZW5zaW9uczogb2JqLnNhc2xPYXV0aGJlYXJlckV4dGVuc2lvbnMsXG4gICAgU3NsQ2VydGlmaWNhdGU6IG9iai5zc2xDZXJ0aWZpY2F0ZSxcbiAgICBTc2xLZXk6IG9iai5zc2xLZXksXG4gICAgU3NsS2V5UGFzc3dvcmQ6IG9iai5zc2xLZXlQYXNzd29yZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgdGhlIHNlY3VyZSB0cmFuc3BvcnQgY29ubmVjdGlvbiB0byBLYWZrYS4gRm9yIFNTTCwgdGhpcyBjYW4gaW5jbHVkZSB0aGUgdHJ1c3RlZCBjZXJ0aWZpY2F0ZSB0byB1c2UuXG4gKlxuICogQHNjaGVtYSBTdHJlYW1zS2Fma2FTZWN1cml0eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbXNLYWZrYVNlY3VyaXR5IHtcbiAgLyoqXG4gICAqIEEgdHJ1c3RlZCwgcHVibGljIHg1MDkgY2VydGlmaWNhdGUgZm9yIGNvbm5lY3RpbmcgdG8gS2Fma2Egb3ZlciBTU0wuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RyZWFtc0thZmthU2VjdXJpdHkjQnJva2VyUHVibGljQ2VydGlmaWNhdGVcbiAgICovXG4gIHJlYWRvbmx5IGJyb2tlclB1YmxpY0NlcnRpZmljYXRlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXNjcmliZXMgdGhlIHRyYW5zcG9ydCB0eXBlLiBDYW4gYmUgZWl0aGVyIFBMQUlOVEVYVCBvciBTU0wuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RyZWFtc0thZmthU2VjdXJpdHkjUHJvdG9jb2xcbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdTdHJlYW1zS2Fma2FTZWN1cml0eScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fU3RyZWFtc0thZmthU2VjdXJpdHkoXG4gIG9iajogU3RyZWFtc0thZmthU2VjdXJpdHkgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBCcm9rZXJQdWJsaWNDZXJ0aWZpY2F0ZTogb2JqLmJyb2tlclB1YmxpY0NlcnRpZmljYXRlLFxuICAgIFByb3RvY29sOiBvYmoucHJvdG9jb2wsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE5ldHdvcmtpbmcgY29uZmlndXJhdGlvbiBmb3IgY29ubmVjdGlvbnMuXG4gKlxuICogQHNjaGVtYSBOZXR3b3JraW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya2luZyB7XG4gIC8qKlxuICAgKiBOZXR3b3JrIGFjY2VzcyBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIE5ldHdvcmtpbmcjQWNjZXNzXG4gICAqL1xuICByZWFkb25seSBhY2Nlc3M6IE5ldHdvcmtpbmdBY2Nlc3M7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ05ldHdvcmtpbmcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX05ldHdvcmtpbmcoXG4gIG9iajogTmV0d29ya2luZyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIEFjY2VzczogdG9Kc29uX05ldHdvcmtpbmdBY2Nlc3Mob2JqLmFjY2VzcyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEFXUyBMYW1iZGEgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBzY2hlbWEgQXdzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXdzIHtcbiAgLyoqXG4gICAqIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBJQU0gcm9sZSBmb3IgQVdTIExhbWJkYSBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIEF3cyNSb2xlQXJuXG4gICAqL1xuICByZWFkb25seSByb2xlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIGFuIFMzIGJ1Y2tldCB1c2VkIHRvIGNoZWNrIGF1dGhvcml6YXRpb24gb2YgdGhlIHBhc3NlZC1pbiBJQU0gcm9sZSBBUk4uXG4gICAqXG4gICAqIEBzY2hlbWEgQXdzI1Rlc3RCdWNrZXRcbiAgICovXG4gIHJlYWRvbmx5IHRlc3RCdWNrZXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0F3cycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQXdzKFxuICBvYmo6IEF3cyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIFJvbGVBcm46IG9iai5yb2xlQXJuLFxuICAgIFRlc3RCdWNrZXQ6IG9iai50ZXN0QnVja2V0LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBdXRoZW50aWNhdGlvbiBjb25maWd1cmF0aW9uIGZvciBTY2hlbWEgUmVnaXN0cnkuXG4gKlxuICogQHNjaGVtYSBTY2hlbWFSZWdpc3RyeUF1dGhlbnRpY2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hUmVnaXN0cnlBdXRoZW50aWNhdGlvbiB7XG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdGlvbiB0eXBlIGRpc2NyaW1pbmF0b3IuIFNwZWNpZmllcyB0aGUgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIGZvciBTY2hlbWEgUmVnaXN0cnkuXG4gICAqXG4gICAqIEBzY2hlbWEgU2NoZW1hUmVnaXN0cnlBdXRoZW50aWNhdGlvbiNUeXBlXG4gICAqL1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2VybmFtZSBvciBQdWJsaWMgS2V5IGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBTY2hlbWFSZWdpc3RyeUF1dGhlbnRpY2F0aW9uI1VzZXJuYW1lXG4gICAqL1xuICByZWFkb25seSB1c2VybmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogUGFzc3dvcmQgb3IgUHJpdmF0ZSBLZXkgZm9yIGF1dGhlbnRpY2F0aW9uLiBSZXZpZXcgW0FXUyBzZWN1cml0eSBiZXN0IHByYWN0aWNlcyBmb3IgQ2xvdWRGb3JtYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3NlY3VyaXR5LWJlc3QtcHJhY3RpY2VzLmh0bWwjY3JlZHMpIHRvIG1hbmFnZSBjcmVkZW50aWFscy5cbiAgICpcbiAgICogQHNjaGVtYSBTY2hlbWFSZWdpc3RyeUF1dGhlbnRpY2F0aW9uI1Bhc3N3b3JkXG4gICAqL1xuICByZWFkb25seSBwYXNzd29yZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnU2NoZW1hUmVnaXN0cnlBdXRoZW50aWNhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fU2NoZW1hUmVnaXN0cnlBdXRoZW50aWNhdGlvbihcbiAgb2JqOiBTY2hlbWFSZWdpc3RyeUF1dGhlbnRpY2F0aW9uIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgVHlwZTogb2JqLnR5cGUsXG4gICAgVXNlcm5hbWU6IG9iai51c2VybmFtZSxcbiAgICBQYXNzd29yZDogb2JqLnBhc3N3b3JkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBUeXBlIG9mIHRoZSBEQiByb2xlLiBDYW4gYmUgZWl0aGVyIEJ1aWx0SW4gb3IgQ3VzdG9tLlxuICpcbiAqIEBzY2hlbWEgRGJSb2xlVG9FeGVjdXRlVHlwZVxuICovXG5leHBvcnQgZW51bSBEYlJvbGVUb0V4ZWN1dGVUeXBlIHtcbiAgLyoqIEJVSUxUX0lOICovXG4gIEJVSUxUX0lOID0gXCJCVUlMVF9JTlwiLFxuICAvKiogQ1VTVE9NICovXG4gIENVU1RPTSA9IFwiQ1VTVE9NXCIsXG59XG5cbi8qKlxuICogTmV0d29yayBhY2Nlc3MgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAc2NoZW1hIE5ldHdvcmtpbmdBY2Nlc3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JraW5nQWNjZXNzIHtcbiAgLyoqXG4gICAqIFR5cGUgb2YgbmV0d29yayBhY2Nlc3MuIENhbiBiZSBQVUJMSUMsIFZQQywgUFJJVkFURV9MSU5LLCBvciBUUkFOU0lUX0dBVEVXQVkuXG4gICAqXG4gICAqIEBzY2hlbWEgTmV0d29ya2luZ0FjY2VzcyNUeXBlXG4gICAqL1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVbmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBOZXR3b3JraW5nQWNjZXNzI0Nvbm5lY3Rpb25JZFxuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGlvbklkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNlcnZlZC4gV2lsbCBiZSB1c2VkIGJ5IFBSSVZBVEVfTElOSyBjb25uZWN0aW9uIHR5cGUuXG4gICAqXG4gICAqIEBzY2hlbWEgTmV0d29ya2luZ0FjY2VzcyNOYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNlcnZlZC4gV2lsbCBiZSB1c2VkIGJ5IFRSQU5TSVRfR0FURVdBWSBjb25uZWN0aW9uIHR5cGUuXG4gICAqXG4gICAqIEBzY2hlbWEgTmV0d29ya2luZ0FjY2VzcyNUZ3dSb3V0ZUlkXG4gICAqL1xuICByZWFkb25seSB0Z3dSb3V0ZUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdOZXR3b3JraW5nQWNjZXNzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9OZXR3b3JraW5nQWNjZXNzKFxuICBvYmo6IE5ldHdvcmtpbmdBY2Nlc3MgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBUeXBlOiBvYmoudHlwZSxcbiAgICBDb25uZWN0aW9uSWQ6IG9iai5jb25uZWN0aW9uSWQsXG4gICAgTmFtZTogb2JqLm5hbWUsXG4gICAgVGd3Um91dGVJZDogb2JqLnRnd1JvdXRlSWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgQ2xvdWRGb3JtYXRpb24gYE1vbmdvREI6OkF0bGFzOjpTdHJlYW1Db25uZWN0aW9uYFxuICpcbiAqIEBjbG91ZGZvcm1hdGlvblJlc291cmNlIE1vbmdvREI6OkF0bGFzOjpTdHJlYW1Db25uZWN0aW9uXG4gKiBAc3RhYmlsaXR5IGV4dGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBDZm5TdHJlYW1Db25uZWN0aW9uIGV4dGVuZHMgY2RrLkNmblJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSB0eXBlIG5hbWUgZm9yIHRoaXMgcmVzb3VyY2UgY2xhc3MuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENGTl9SRVNPVVJDRV9UWVBFX05BTUUgPVxuICAgIFwiTW9uZ29EQjo6QXRsYXM6OlN0cmVhbUNvbm5lY3Rpb25cIjtcblxuICAvKipcbiAgICogUmVzb3VyY2UgcHJvcHMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IENmblN0cmVhbUNvbm5lY3Rpb25Qcm9wcztcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGBNb25nb0RCOjpBdGxhczo6U3RyZWFtQ29ubmVjdGlvbmAuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIHNjb3BlIGluIHdoaWNoIHRoaXMgcmVzb3VyY2UgaXMgZGVmaW5lZFxuICAgKiBAcGFyYW0gaWQgICAgLSBzY29wZWQgaWQgb2YgdGhlIHJlc291cmNlXG4gICAqIEBwYXJhbSBwcm9wcyAtIHJlc291cmNlIHByb3BlcnRpZXNcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBDZm5TdHJlYW1Db25uZWN0aW9uUHJvcHNcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICB0eXBlOiBDZm5TdHJlYW1Db25uZWN0aW9uLkNGTl9SRVNPVVJDRV9UWVBFX05BTUUsXG4gICAgICBwcm9wZXJ0aWVzOiB0b0pzb25fQ2ZuU3RyZWFtQ29ubmVjdGlvblByb3BzKHByb3BzKSEsXG4gICAgfSk7XG5cbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIH1cbn1cbiJdfQ==