UNPKG

@cdk-cloudformation/freyraim-spider-loadbalancer-module

Version:

Schema for Module Fragment of type FreyrAIM::Spider::LoadBalancer::MODULE

301 lines 53 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.CfnLoadBalancerModule = exports.toJson_CfnLoadBalancerModulePropsResourcesElbBucket = exports.toJson_CfnLoadBalancerModulePropsResourcesElbBucketPolicy = exports.toJson_CfnLoadBalancerModulePropsResourcesListenerRule1 = exports.toJson_CfnLoadBalancerModulePropsResourcesListener1 = exports.toJson_CfnLoadBalancerModulePropsResourcesLoadBalancer1 = exports.toJson_CfnLoadBalancerModulePropsResourcesTargetGroup2 = exports.toJson_CfnLoadBalancerModulePropsResourcesTargetGroup1 = exports.toJson_CfnLoadBalancerModulePropsResourcesSpiderEc2Instance = exports.toJson_CfnLoadBalancerModulePropsParametersVpcId = exports.toJson_CfnLoadBalancerModulePropsParametersRunTime = exports.toJson_CfnLoadBalancerModulePropsParametersImageDigest = exports.toJson_CfnLoadBalancerModulePropsParametersEnvName = exports.toJson_CfnLoadBalancerModulePropsParametersElbBucketName = exports.toJson_CfnLoadBalancerModulePropsResources = exports.toJson_CfnLoadBalancerModulePropsParameters = exports.toJson_CfnLoadBalancerModuleProps = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); // Generated by cdk-import const cdk = require("aws-cdk-lib"); /** * Converts an object of type 'CfnLoadBalancerModuleProps' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnLoadBalancerModuleProps(obj) { if (obj === undefined) { return undefined; } const result = { 'Parameters': toJson_CfnLoadBalancerModulePropsParameters(obj.parameters), 'Resources': toJson_CfnLoadBalancerModulePropsResources(obj.resources), }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {}); } exports.toJson_CfnLoadBalancerModuleProps = toJson_CfnLoadBalancerModuleProps; /** * Converts an object of type 'CfnLoadBalancerModulePropsParameters' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnLoadBalancerModulePropsParameters(obj) { if (obj === undefined) { return undefined; } const result = { 'ELBBucketName': toJson_CfnLoadBalancerModulePropsParametersElbBucketName(obj.elbBucketName), 'EnvName': toJson_CfnLoadBalancerModulePropsParametersEnvName(obj.envName), 'ImageDigest': toJson_CfnLoadBalancerModulePropsParametersImageDigest(obj.imageDigest), 'RunTime': toJson_CfnLoadBalancerModulePropsParametersRunTime(obj.runTime), 'VpcID': toJson_CfnLoadBalancerModulePropsParametersVpcId(obj.vpcId), }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {}); } exports.toJson_CfnLoadBalancerModulePropsParameters = toJson_CfnLoadBalancerModulePropsParameters; /** * Converts an object of type 'CfnLoadBalancerModulePropsResources' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnLoadBalancerModulePropsResources(obj) { if (obj === undefined) { return undefined; } const result = { 'SpiderEC2Instance': toJson_CfnLoadBalancerModulePropsResourcesSpiderEc2Instance(obj.spiderEc2Instance), 'TargetGroup1': toJson_CfnLoadBalancerModulePropsResourcesTargetGroup1(obj.targetGroup1), 'TargetGroup2': toJson_CfnLoadBalancerModulePropsResourcesTargetGroup2(obj.targetGroup2), 'LoadBalancer1': toJson_CfnLoadBalancerModulePropsResourcesLoadBalancer1(obj.loadBalancer1), 'Listener1': toJson_CfnLoadBalancerModulePropsResourcesListener1(obj.listener1), 'ListenerRule1': toJson_CfnLoadBalancerModulePropsResourcesListenerRule1(obj.listenerRule1), 'ELBBucketPolicy': toJson_CfnLoadBalancerModulePropsResourcesElbBucketPolicy(obj.elbBucketPolicy), 'ELBBucket': toJson_CfnLoadBalancerModulePropsResourcesElbBucket(obj.elbBucket), }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {}); } exports.toJson_CfnLoadBalancerModulePropsResources = toJson_CfnLoadBalancerModulePropsResources; /** * Converts an object of type 'CfnLoadBalancerModulePropsParametersElbBucketName' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnLoadBalancerModulePropsParametersElbBucketName(obj) { if (obj === undefined) { return undefined; } const result = { 'Type': obj.type, 'Description': obj.description, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {}); } exports.toJson_CfnLoadBalancerModulePropsParametersElbBucketName = toJson_CfnLoadBalancerModulePropsParametersElbBucketName; /** * Converts an object of type 'CfnLoadBalancerModulePropsParametersEnvName' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnLoadBalancerModulePropsParametersEnvName(obj) { if (obj === undefined) { return undefined; } const result = { 'Type': obj.type, 'Description': obj.description, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {}); } exports.toJson_CfnLoadBalancerModulePropsParametersEnvName = toJson_CfnLoadBalancerModulePropsParametersEnvName; /** * Converts an object of type 'CfnLoadBalancerModulePropsParametersImageDigest' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnLoadBalancerModulePropsParametersImageDigest(obj) { if (obj === undefined) { return undefined; } const result = { 'Type': obj.type, 'Description': obj.description, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {}); } exports.toJson_CfnLoadBalancerModulePropsParametersImageDigest = toJson_CfnLoadBalancerModulePropsParametersImageDigest; /** * Converts an object of type 'CfnLoadBalancerModulePropsParametersRunTime' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnLoadBalancerModulePropsParametersRunTime(obj) { if (obj === undefined) { return undefined; } const result = { 'Type': obj.type, 'Description': obj.description, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {}); } exports.toJson_CfnLoadBalancerModulePropsParametersRunTime = toJson_CfnLoadBalancerModulePropsParametersRunTime; /** * Converts an object of type 'CfnLoadBalancerModulePropsParametersVpcId' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnLoadBalancerModulePropsParametersVpcId(obj) { if (obj === undefined) { return undefined; } const result = { 'Type': obj.type, 'Description': obj.description, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {}); } exports.toJson_CfnLoadBalancerModulePropsParametersVpcId = toJson_CfnLoadBalancerModulePropsParametersVpcId; /** * Converts an object of type 'CfnLoadBalancerModulePropsResourcesSpiderEc2Instance' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnLoadBalancerModulePropsResourcesSpiderEc2Instance(obj) { if (obj === undefined) { return undefined; } const result = { 'Type': obj.type, 'Properties': obj.properties, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {}); } exports.toJson_CfnLoadBalancerModulePropsResourcesSpiderEc2Instance = toJson_CfnLoadBalancerModulePropsResourcesSpiderEc2Instance; /** * Converts an object of type 'CfnLoadBalancerModulePropsResourcesTargetGroup1' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnLoadBalancerModulePropsResourcesTargetGroup1(obj) { if (obj === undefined) { return undefined; } const result = { 'Type': obj.type, 'Properties': obj.properties, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {}); } exports.toJson_CfnLoadBalancerModulePropsResourcesTargetGroup1 = toJson_CfnLoadBalancerModulePropsResourcesTargetGroup1; /** * Converts an object of type 'CfnLoadBalancerModulePropsResourcesTargetGroup2' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnLoadBalancerModulePropsResourcesTargetGroup2(obj) { if (obj === undefined) { return undefined; } const result = { 'Type': obj.type, 'Properties': obj.properties, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {}); } exports.toJson_CfnLoadBalancerModulePropsResourcesTargetGroup2 = toJson_CfnLoadBalancerModulePropsResourcesTargetGroup2; /** * Converts an object of type 'CfnLoadBalancerModulePropsResourcesLoadBalancer1' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnLoadBalancerModulePropsResourcesLoadBalancer1(obj) { if (obj === undefined) { return undefined; } const result = { 'Type': obj.type, 'Properties': obj.properties, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {}); } exports.toJson_CfnLoadBalancerModulePropsResourcesLoadBalancer1 = toJson_CfnLoadBalancerModulePropsResourcesLoadBalancer1; /** * Converts an object of type 'CfnLoadBalancerModulePropsResourcesListener1' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnLoadBalancerModulePropsResourcesListener1(obj) { if (obj === undefined) { return undefined; } const result = { 'Type': obj.type, 'Properties': obj.properties, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {}); } exports.toJson_CfnLoadBalancerModulePropsResourcesListener1 = toJson_CfnLoadBalancerModulePropsResourcesListener1; /** * Converts an object of type 'CfnLoadBalancerModulePropsResourcesListenerRule1' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnLoadBalancerModulePropsResourcesListenerRule1(obj) { if (obj === undefined) { return undefined; } const result = { 'Type': obj.type, 'Properties': obj.properties, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {}); } exports.toJson_CfnLoadBalancerModulePropsResourcesListenerRule1 = toJson_CfnLoadBalancerModulePropsResourcesListenerRule1; /** * Converts an object of type 'CfnLoadBalancerModulePropsResourcesElbBucketPolicy' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnLoadBalancerModulePropsResourcesElbBucketPolicy(obj) { if (obj === undefined) { return undefined; } const result = { 'Type': obj.type, 'Properties': obj.properties, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {}); } exports.toJson_CfnLoadBalancerModulePropsResourcesElbBucketPolicy = toJson_CfnLoadBalancerModulePropsResourcesElbBucketPolicy; /** * Converts an object of type 'CfnLoadBalancerModulePropsResourcesElbBucket' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnLoadBalancerModulePropsResourcesElbBucket(obj) { if (obj === undefined) { return undefined; } const result = { 'Type': obj.type, 'Properties': obj.properties, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {}); } exports.toJson_CfnLoadBalancerModulePropsResourcesElbBucket = toJson_CfnLoadBalancerModulePropsResourcesElbBucket; /* eslint-enable max-len, quote-props */ /** * A CloudFormation `FreyrAIM::Spider::LoadBalancer::MODULE` * * @cloudformationResource FreyrAIM::Spider::LoadBalancer::MODULE * @stability external * @link http://unknown-url */ class CfnLoadBalancerModule extends cdk.CfnResource { /** * Create a new `FreyrAIM::Spider::LoadBalancer::MODULE`. * * @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: CfnLoadBalancerModule.CFN_RESOURCE_TYPE_NAME, properties: toJson_CfnLoadBalancerModuleProps(props) }); this.props = props; } } exports.CfnLoadBalancerModule = CfnLoadBalancerModule; _a = JSII_RTTI_SYMBOL_1; CfnLoadBalancerModule[_a] = { fqn: "@cdk-cloudformation/freyraim-spider-loadbalancer-module.CfnLoadBalancerModule", version: "1.1.0-alpha.7" }; /** * The CloudFormation resource type name for this resource class. */ CfnLoadBalancerModule.CFN_RESOURCE_TYPE_NAME = "FreyrAIM::Spider::LoadBalancer::MODULE"; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwwQkFBMEI7QUFDMUIsbUNBQW1DO0FBcUJuQzs7R0FFRztBQUNILHlDQUF5QztBQUN6QyxTQUFnQixpQ0FBaUMsQ0FBQyxHQUEyQztJQUMzRixJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7UUFBRSxPQUFPLFNBQVMsQ0FBQztLQUFFO0lBQzVDLE1BQU0sTUFBTSxHQUFHO1FBQ2IsWUFBWSxFQUFFLDJDQUEyQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDekUsV0FBVyxFQUFFLDBDQUEwQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7S0FDdkUsQ0FBQztJQUNGLDBCQUEwQjtJQUMxQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxRyxDQUFDO0FBUkQsOEVBUUM7QUE0Q0Q7O0dBRUc7QUFDSCx5Q0FBeUM7QUFDekMsU0FBZ0IsMkNBQTJDLENBQUMsR0FBcUQ7SUFDL0csSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1FBQUUsT0FBTyxTQUFTLENBQUM7S0FBRTtJQUM1QyxNQUFNLE1BQU0sR0FBRztRQUNiLGVBQWUsRUFBRSx3REFBd0QsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDO1FBQzVGLFNBQVMsRUFBRSxrREFBa0QsQ0FBQyxHQUFHLENBQUMsT0FBTyxD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cEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLGlDQUFpQyxDQUFDLEtBQUssQ0FBRSxFQUFFLENBQUMsQ0FBQztRQUVoSSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUVyQixDQUFDOztBQXhCSCxzREF5QkM7OztBQXhCQzs7RUFFRTtBQUNxQiw0Q0FBc0IsR0FBRyx3Q0FBd0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdlbmVyYXRlZCBieSBjZGstaW1wb3J0XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBTY2hlbWEgZm9yIE1vZHVsZSBGcmFnbWVudCBvZiB0eXBlIEZyZXlyQUlNOjpTcGlkZXI6OkxvYWRCYWxhbmNlcjo6TU9EVUxFXG4gKlxuICogQHNjaGVtYSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHMjUGFyYW1ldGVyc1xuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVycz86IENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUGFyYW1ldGVycztcblxuICAvKipcbiAgICogQHNjaGVtYSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wcyNSZXNvdXJjZXNcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlcz86IENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0NmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9DZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wcyhvYmo6IENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnUGFyYW1ldGVycyc6IHRvSnNvbl9DZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1BhcmFtZXRlcnMob2JqLnBhcmFtZXRlcnMpLFxuICAgICdSZXNvdXJjZXMnOiB0b0pzb25fQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXMob2JqLnJlc291cmNlcyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1BhcmFtZXRlcnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1BhcmFtZXRlcnMge1xuICAvKipcbiAgICogVGhlIEVMQiBsb2dzIGJ1Y2tldCBuYW1lXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNQYXJhbWV0ZXJzI0VMQkJ1Y2tldE5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGVsYkJ1Y2tldE5hbWU/OiBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1BhcmFtZXRlcnNFbGJCdWNrZXROYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgbmFtZVxuICAgKlxuICAgKiBAc2NoZW1hIENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUGFyYW1ldGVycyNFbnZOYW1lXG4gICAqL1xuICByZWFkb25seSBlbnZOYW1lPzogQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNQYXJhbWV0ZXJzRW52TmFtZTtcblxuICAvKipcbiAgICogVGhlIEltYWdlRGlnZXN0XG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNQYXJhbWV0ZXJzI0ltYWdlRGlnZXN0XG4gICAqL1xuICByZWFkb25seSBpbWFnZURpZ2VzdD86IENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUGFyYW1ldGVyc0ltYWdlRGlnZXN0O1xuXG4gIC8qKlxuICAgKiBUaGUgUnVuVGltZVxuICAgKlxuICAgKiBAc2NoZW1hIENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUGFyYW1ldGVycyNSdW5UaW1lXG4gICAqL1xuICByZWFkb25seSBydW5UaW1lPzogQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNQYXJhbWV0ZXJzUnVuVGltZTtcblxuICAvKipcbiAgICogVnBjLUlEXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNQYXJhbWV0ZXJzI1ZwY0lEXG4gICAqL1xuICByZWFkb25seSB2cGNJZD86IENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUGFyYW1ldGVyc1ZwY0lkO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0NmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUGFyYW1ldGVycycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNQYXJhbWV0ZXJzKG9iajogQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNQYXJhbWV0ZXJzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnRUxCQnVja2V0TmFtZSc6IHRvSnNvbl9DZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1BhcmFtZXRlcnNFbGJCdWNrZXROYW1lKG9iai5lbGJCdWNrZXROYW1lKSxcbiAgICAnRW52TmFtZSc6IHRvSnNvbl9DZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1BhcmFtZXRlcnNFbnZOYW1lKG9iai5lbnZOYW1lKSxcbiAgICAnSW1hZ2VEaWdlc3QnOiB0b0pzb25fQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNQYXJhbWV0ZXJzSW1hZ2VEaWdlc3Qob2JqLmltYWdlRGlnZXN0KSxcbiAgICAnUnVuVGltZSc6IHRvSnNvbl9DZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1BhcmFtZXRlcnNSdW5UaW1lKG9iai5ydW5UaW1lKSxcbiAgICAnVnBjSUQnOiB0b0pzb25fQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNQYXJhbWV0ZXJzVnBjSWQob2JqLnZwY0lkKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXMge1xuICAvKipcbiAgICogQHNjaGVtYSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlcyNTcGlkZXJFQzJJbnN0YW5jZVxuICAgKi9cbiAgcmVhZG9ubHkgc3BpZGVyRWMySW5zdGFuY2U/OiBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc1NwaWRlckVjMkluc3RhbmNlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzI1RhcmdldEdyb3VwMVxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0R3JvdXAxPzogQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXNUYXJnZXRHcm91cDE7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXMjVGFyZ2V0R3JvdXAyXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRHcm91cDI/OiBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc1RhcmdldEdyb3VwMjtcblxuICAvKipcbiAgICogQHNjaGVtYSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlcyNMb2FkQmFsYW5jZXIxXG4gICAqL1xuICByZWFkb25seSBsb2FkQmFsYW5jZXIxPzogQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXNMb2FkQmFsYW5jZXIxO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzI0xpc3RlbmVyMVxuICAgKi9cbiAgcmVhZG9ubHkgbGlzdGVuZXIxPzogQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXNMaXN0ZW5lcjE7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXMjTGlzdGVuZXJSdWxlMVxuICAgKi9cbiAgcmVhZG9ubHkgbGlzdGVuZXJSdWxlMT86IENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzTGlzdGVuZXJSdWxlMTtcblxuICAvKipcbiAgICogQHNjaGVtYSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlcyNFTEJCdWNrZXRQb2xpY3lcbiAgICovXG4gIHJlYWRvbmx5IGVsYkJ1Y2tldFBvbGljeT86IENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzRWxiQnVja2V0UG9saWN5O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzI0VMQkJ1Y2tldFxuICAgKi9cbiAgcmVhZG9ubHkgZWxiQnVja2V0PzogQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXNFbGJCdWNrZXQ7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0NmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzKG9iajogQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdTcGlkZXJFQzJJbnN0YW5jZSc6IHRvSnNvbl9DZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc1NwaWRlckVjMkluc3RhbmNlKG9iai5zcGlkZXJFYzJJbnN0YW5jZSksXG4gICAgJ1RhcmdldEdyb3VwMSc6IHRvSnNvbl9DZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc1RhcmdldEdyb3VwMShvYmoudGFyZ2V0R3JvdXAxKSxcbiAgICAnVGFyZ2V0R3JvdXAyJzogdG9Kc29uX0NmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzVGFyZ2V0R3JvdXAyKG9iai50YXJnZXRHcm91cDIpLFxuICAgICdMb2FkQmFsYW5jZXIxJzogdG9Kc29uX0NmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzTG9hZEJhbGFuY2VyMShvYmoubG9hZEJhbGFuY2VyMSksXG4gICAgJ0xpc3RlbmVyMSc6IHRvSnNvbl9DZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc0xpc3RlbmVyMShvYmoubGlzdGVuZXIxKSxcbiAgICAnTGlzdGVuZXJSdWxlMSc6IHRvSnNvbl9DZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc0xpc3RlbmVyUnVsZTEob2JqLmxpc3RlbmVyUnVsZTEpLFxuICAgICdFTEJCdWNrZXRQb2xpY3knOiB0b0pzb25fQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXNFbGJCdWNrZXRQb2xpY3kob2JqLmVsYkJ1Y2tldFBvbGljeSksXG4gICAgJ0VMQkJ1Y2tldCc6IHRvSnNvbl9DZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc0VsYkJ1Y2tldChvYmouZWxiQnVja2V0KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBUaGUgRUxCIGxvZ3MgYnVja2V0IG5hbWVcbiAqXG4gKiBAc2NoZW1hIENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUGFyYW1ldGVyc0VsYkJ1Y2tldE5hbWVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1BhcmFtZXRlcnNFbGJCdWNrZXROYW1lIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNQYXJhbWV0ZXJzRWxiQnVja2V0TmFtZSNUeXBlXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNQYXJhbWV0ZXJzRWxiQnVja2V0TmFtZSNEZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1BhcmFtZXRlcnNFbGJCdWNrZXROYW1lJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9DZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1BhcmFtZXRlcnNFbGJCdWNrZXROYW1lKG9iajogQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNQYXJhbWV0ZXJzRWxiQnVja2V0TmFtZSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ1R5cGUnOiBvYmoudHlwZSxcbiAgICAnRGVzY3JpcHRpb24nOiBvYmouZGVzY3JpcHRpb24sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogVGhlIGVudmlyb25tZW50IG5hbWVcbiAqXG4gKiBAc2NoZW1hIENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUGFyYW1ldGVyc0Vudk5hbWVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1BhcmFtZXRlcnNFbnZOYW1lIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNQYXJhbWV0ZXJzRW52TmFtZSNUeXBlXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNQYXJhbWV0ZXJzRW52TmFtZSNEZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1BhcmFtZXRlcnNFbnZOYW1lJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9DZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1BhcmFtZXRlcnNFbnZOYW1lKG9iajogQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNQYXJhbWV0ZXJzRW52TmFtZSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ1R5cGUnOiBvYmoudHlwZSxcbiAgICAnRGVzY3JpcHRpb24nOiBvYmouZGVzY3JpcHRpb24sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogVGhlIEltYWdlRGlnZXN0XG4gKlxuICogQHNjaGVtYSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1BhcmFtZXRlcnNJbWFnZURpZ2VzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUGFyYW1ldGVyc0ltYWdlRGlnZXN0IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNQYXJhbWV0ZXJzSW1hZ2VEaWdlc3QjVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUGFyYW1ldGVyc0ltYWdlRGlnZXN0I0Rlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0NmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUGFyYW1ldGVyc0ltYWdlRGlnZXN0JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9DZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1BhcmFtZXRlcnNJbWFnZURpZ2VzdChvYmo6IENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUGFyYW1ldGVyc0ltYWdlRGlnZXN0IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnVHlwZSc6IG9iai50eXBlLFxuICAgICdEZXNjcmlwdGlvbic6IG9iai5kZXNjcmlwdGlvbixcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBUaGUgUnVuVGltZVxuICpcbiAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNQYXJhbWV0ZXJzUnVuVGltZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUGFyYW1ldGVyc1J1blRpbWUge1xuICAvKipcbiAgICogQHNjaGVtYSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1BhcmFtZXRlcnNSdW5UaW1lI1R5cGVcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1BhcmFtZXRlcnNSdW5UaW1lI0Rlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0NmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUGFyYW1ldGVyc1J1blRpbWUnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0NmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUGFyYW1ldGVyc1J1blRpbWUob2JqOiBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1BhcmFtZXRlcnNSdW5UaW1lIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnVHlwZSc6IG9iai50eXBlLFxuICAgICdEZXNjcmlwdGlvbic6IG9iai5kZXNjcmlwdGlvbixcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBWcGMtSURcbiAqXG4gKiBAc2NoZW1hIENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUGFyYW1ldGVyc1ZwY0lkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNQYXJhbWV0ZXJzVnBjSWQge1xuICAvKipcbiAgICogQHNjaGVtYSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1BhcmFtZXRlcnNWcGNJZCNUeXBlXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNQYXJhbWV0ZXJzVnBjSWQjRGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNQYXJhbWV0ZXJzVnBjSWQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0NmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUGFyYW1ldGVyc1ZwY0lkKG9iajogQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNQYXJhbWV0ZXJzVnBjSWQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdUeXBlJzogb2JqLnR5cGUsXG4gICAgJ0Rlc2NyaXB0aW9uJzogb2JqLmRlc2NyaXB0aW9uLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXNTcGlkZXJFYzJJbnN0YW5jZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzU3BpZGVyRWMySW5zdGFuY2Uge1xuICAvKipcbiAgICogQHNjaGVtYSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc1NwaWRlckVjMkluc3RhbmNlI1R5cGVcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXNTcGlkZXJFYzJJbnN0YW5jZSNQcm9wZXJ0aWVzXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0aWVzPzogYW55O1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0NmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzU3BpZGVyRWMySW5zdGFuY2UnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0NmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzU3BpZGVyRWMySW5zdGFuY2Uob2JqOiBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc1NwaWRlckVjMkluc3RhbmNlIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnVHlwZSc6IG9iai50eXBlLFxuICAgICdQcm9wZXJ0aWVzJzogb2JqLnByb3BlcnRpZXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc1RhcmdldEdyb3VwMVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzVGFyZ2V0R3JvdXAxIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXNUYXJnZXRHcm91cDEjVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc1RhcmdldEdyb3VwMSNQcm9wZXJ0aWVzXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0aWVzPzogYW55O1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0NmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzVGFyZ2V0R3JvdXAxJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9DZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc1RhcmdldEdyb3VwMShvYmo6IENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzVGFyZ2V0R3JvdXAxIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnVHlwZSc6IG9iai50eXBlLFxuICAgICdQcm9wZXJ0aWVzJzogb2JqLnByb3BlcnRpZXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc1RhcmdldEdyb3VwMlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzVGFyZ2V0R3JvdXAyIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXNUYXJnZXRHcm91cDIjVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc1RhcmdldEdyb3VwMiNQcm9wZXJ0aWVzXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0aWVzPzogYW55O1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0NmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzVGFyZ2V0R3JvdXAyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9DZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc1RhcmdldEdyb3VwMihvYmo6IENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzVGFyZ2V0R3JvdXAyIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnVHlwZSc6IG9iai50eXBlLFxuICAgICdQcm9wZXJ0aWVzJzogb2JqLnByb3BlcnRpZXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc0xvYWRCYWxhbmNlcjFcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc0xvYWRCYWxhbmNlcjEge1xuICAvKipcbiAgICogQHNjaGVtYSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc0xvYWRCYWxhbmNlcjEjVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc0xvYWRCYWxhbmNlcjEjUHJvcGVydGllc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJvcGVydGllcz86IGFueTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc0xvYWRCYWxhbmNlcjEnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0NmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzTG9hZEJhbGFuY2VyMShvYmo6IENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzTG9hZEJhbGFuY2VyMSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ1R5cGUnOiBvYmoudHlwZSxcbiAgICAnUHJvcGVydGllcyc6IG9iai5wcm9wZXJ0aWVzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXNMaXN0ZW5lcjFcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc0xpc3RlbmVyMSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzTGlzdGVuZXIxI1R5cGVcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXNMaXN0ZW5lcjEjUHJvcGVydGllc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJvcGVydGllcz86IGFueTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc0xpc3RlbmVyMScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXNMaXN0ZW5lcjEob2JqOiBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc0xpc3RlbmVyMSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ1R5cGUnOiBvYmoudHlwZSxcbiAgICAnUHJvcGVydGllcyc6IG9iai5wcm9wZXJ0aWVzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXNMaXN0ZW5lclJ1bGUxXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXNMaXN0ZW5lclJ1bGUxIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXNMaXN0ZW5lclJ1bGUxI1R5cGVcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXNMaXN0ZW5lclJ1bGUxI1Byb3BlcnRpZXNcbiAgICovXG4gIHJlYWRvbmx5IHByb3BlcnRpZXM/OiBhbnk7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXNMaXN0ZW5lclJ1bGUxJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9DZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc0xpc3RlbmVyUnVsZTEob2JqOiBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc0xpc3RlbmVyUnVsZTEgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdUeXBlJzogb2JqLnR5cGUsXG4gICAgJ1Byb3BlcnRpZXMnOiBvYmoucHJvcGVydGllcyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzRWxiQnVja2V0UG9saWN5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXNFbGJCdWNrZXRQb2xpY3kge1xuICAvKipcbiAgICogQHNjaGVtYSBDZm5Mb2FkQmFsYW5jZXJNb2R1bGVQcm9wc1Jlc291cmNlc0VsYkJ1Y2tldFBvbGljeSNUeXBlXG4gICAqL1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIENmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzRWxiQnVja2V0UG9saWN5I1Byb3BlcnRpZXNcbiAgICovXG4gIHJlYWRvbmx5IHByb3BlcnRpZXM/OiBhbnk7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXNFbGJCdWNrZXRQb2xpY3knIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0NmbkxvYWRCYWxhbmNlck1vZHVsZVByb3BzUmVzb3VyY2VzRWxiQnVja2V0UG9saWN5KG9iajogQ2ZuTG9hZEJhbGFuY2VyTW9kdWxlUHJvcHNSZXNvdXJjZXNFbGJCdWNrZXRQb2xpY3kgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx