UNPKG

@aws-cdk/aws-ivs-alpha

Version:

The CDK Construct Library for AWS::IVS

189 lines 25.2 kB
"use strict"; var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); var _, done = false; for (var i = decorators.length - 1; i >= 0; i--) { var context = {}; for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; for (var p in contextIn.access) context.access[p] = contextIn.access[p]; context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); if (kind === "accessor") { if (result === void 0) continue; if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } } if (target) Object.defineProperty(target, contextIn.name, descriptor); done = true; }; var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) { var useValue = arguments.length > 2; for (var i = 0; i < initializers.length; i++) { value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); } return useValue ? value : void 0; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.RecordingConfiguration = void 0; const jsiiDeprecationWarnings = require("../.warnings.jsii.js"); const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const aws_ivs_1 = require("aws-cdk-lib/aws-ivs"); const core_1 = require("aws-cdk-lib/core"); const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource"); const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable"); /** * The IVS Recording configuration * * @resource AWS::IVS::RecordingConfiguration */ let RecordingConfiguration = (() => { let _classDecorators = [prop_injectable_1.propertyInjectable]; let _classDescriptor; let _classExtraInitializers = []; let _classThis; let _classSuper = core_1.Resource; var RecordingConfiguration = class extends _classSuper { static { _classThis = this; } static { const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0; __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); RecordingConfiguration = _classThis = _classDescriptor.value; if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); } static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ivs-alpha.RecordingConfiguration", version: "2.257.0-alpha.0" }; /** Uniquely identifies this class. */ static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ivs-alpha.RecordingConfiguration'; /** * Imports an IVS Recording Configuration from attributes. */ static fromRecordingConfigurationId(scope, id, recordingConfigurationId) { class Import extends core_1.Resource { recordingConfigurationId = recordingConfigurationId; recordingConfigurationArn = core_1.Stack.of(this).formatArn({ resource: 'recording-configuration', service: 'ivs', resourceName: recordingConfigurationId, }); } return new Import(scope, id); } /** * Imports an IVS Recording Configuration from its ARN */ static fromArn(scope, id, recordingConfigurationArn) { const resourceParts = core_1.Fn.split('/', recordingConfigurationArn); if (!resourceParts || resourceParts.length < 2) { throw new Error(`Unexpected ARN format: ${recordingConfigurationArn}`); } const recordingConfigurationId = core_1.Fn.select(1, resourceParts); class Import extends core_1.Resource { recordingConfigurationId = recordingConfigurationId; recordingConfigurationArn = recordingConfigurationArn; } return new Import(scope, id); } /** * The ID of the Recording configuration. * @attribute */ recordingConfigurationId; /** * The ARN of the Recording configuration. * @attribute */ recordingConfigurationArn; props; constructor(scope, id, props) { super(scope, id, { physicalName: props.recordingConfigurationName, }); try { jsiiDeprecationWarnings._aws_cdk_aws_ivs_alpha_RecordingConfigurationProps(props); } catch (error) { if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") { Error.captureStackTrace(error, RecordingConfiguration); } throw error; } // Enhanced CDK Analytics Telemetry (0, metadata_resource_1.addConstructMetadata)(this, props); this.props = props; this.validateRecordingConfigurationName(); this.validateRecordingReconnectWindowSeconds(); const resource = new aws_ivs_1.CfnRecordingConfiguration(this, 'Resource', { destinationConfiguration: { s3: { bucketName: this.props.bucket.bucketRef.bucketName, }, }, name: this.props.recordingConfigurationName, recordingReconnectWindowSeconds: this.props.recordingReconnectWindow?.toSeconds(), renditionConfiguration: this._renderRenditionConfiguration(), thumbnailConfiguration: this._renderThumbnailConfiguration(), }); this.recordingConfigurationId = resource.ref; this.recordingConfigurationArn = resource.attrArn; } _renderRenditionConfiguration() { if (!this.props.renditionConfiguration) { return; } return { renditions: this.props.renditionConfiguration.renditions, renditionSelection: this.props.renditionConfiguration.renditionSelection, }; } _renderThumbnailConfiguration() { if (!this.props.thumbnailConfiguration) { return; } return { recordingMode: this.props.thumbnailConfiguration.recordingMode, resolution: this.props.thumbnailConfiguration.resolution, storage: this.props.thumbnailConfiguration.storage, targetIntervalSeconds: this.props.thumbnailConfiguration.targetInterval?.toSeconds(), }; } validateRecordingConfigurationName() { const recordingConfigurationName = this.props.recordingConfigurationName; if (recordingConfigurationName == undefined || core_1.Token.isUnresolved(recordingConfigurationName)) { return; } if (!/^[a-zA-Z0-9-_]*$/.test(recordingConfigurationName)) { throw new Error(`\`recordingConfigurationName\` must consist only of alphanumeric characters, hyphens or underbars, got: ${recordingConfigurationName}.`); } if (recordingConfigurationName.length > 128) { throw new Error(`\`recordingConfigurationName\` must be less than or equal to 128 characters, got: ${recordingConfigurationName.length} characters.`); } } validateRecordingReconnectWindowSeconds() { const recordingReconnectWindow = this.props.recordingReconnectWindow; if (recordingReconnectWindow === undefined || core_1.Token.isUnresolved(recordingReconnectWindow)) { return; } if (0 < recordingReconnectWindow.toMilliseconds() && recordingReconnectWindow.toMilliseconds() < core_1.Duration.seconds(1).toMilliseconds()) { throw new Error(`\`recordingReconnectWindow\` must be between 0 and 300 seconds, got ${recordingReconnectWindow.toMilliseconds()} milliseconds.`); } if (recordingReconnectWindow.toSeconds() > 300) { throw new Error(`\`recordingReconnectWindow\` must be between 0 and 300 seconds, got ${recordingReconnectWindow.toSeconds()} seconds.`); } } static { __runInitializers(_classThis, _classExtraInitializers); } }; return RecordingConfiguration = _classThis; })(); exports.RecordingConfiguration = RecordingConfiguration; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkaW5nLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZWNvcmRpbmctY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBZ0U7QUFHaEUsMkNBQXdFO0FBQ3hFLDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFvRTFFOzs7O0dBSUc7SUFFVSxzQkFBc0I7NEJBRGxDLG9DQUFrQjs7OztzQkFDeUIsZUFBUTtzQ0FBaEIsU0FBUSxXQUFROzs7O1lBQXBELDZLQTBJQzs7Ozs7UUF6SUMsc0NBQXNDO1FBQy9CLE1BQU0sQ0FBVSxxQkFBcUIsR0FBVywrQ0FBK0MsQ0FBQztRQUV2Rzs7V0FFRztRQUNJLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFDckUsd0JBQWdDO1lBQ2hDLE1BQU0sTUFBTyxTQUFRLGVBQVE7Z0JBQ1gsd0JBQXdCLEdBQUcsd0JBQXdCLENBQUM7Z0JBQ3BELHlCQUF5QixHQUFHLFlBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDO29CQUNuRSxRQUFRLEVBQUUseUJBQXlCO29CQUNuQyxPQUFPLEVBQUUsS0FBSztvQkFDZCxZQUFZLEVBQUUsd0JBQXdCO2lCQUN2QyxDQUFDLENBQUM7YUFDSjtZQUVELE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzlCO1FBRUQ7O1dBRUc7UUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLHlCQUFpQztZQUNuRixNQUFNLGFBQWEsR0FBRyxTQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1lBRS9ELElBQUksQ0FBQyxhQUFhLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDL0Ms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UmVjb3JkaW5nQ29uZmlndXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pdnMnO1xuaW1wb3J0IHR5cGUgeyBJQnVja2V0UmVmIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB0eXBlIHsgSVJlc291cmNlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgRm4sIFJlc291cmNlLCBTdGFjaywgVG9rZW4gfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IFJlbmRpdGlvbkNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3JlbmRpdGlvbi1jb25maWd1cmF0aW9uJztcbmltcG9ydCB0eXBlIHsgVGh1bWJuYWlsQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vdGh1bWJuYWlsLWNvbmZpZ3VyYXRpb24nO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgb2YgdGhlIElWUyBSZWNvcmRpbmcgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZGluZ0NvbmZpZ3VyYXRpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBTMyBidWNrZXQgd2hlcmUgcmVjb3JkZWQgdmlkZW9zIHdpbGwgYmUgc3RvcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0OiBJQnVja2V0UmVmO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgUmVjb3JkaW5nIGNvbmZpZ3VyYXRpb24uXG4gICAqIFRoZSB2YWx1ZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHVuaXF1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdXRvIGdlbmVyYXRlXG4gICAqL1xuICByZWFkb25seSByZWNvcmRpbmdDb25maWd1cmF0aW9uTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgYSBicm9hZGNhc3QgZGlzY29ubmVjdHMgYW5kIHRoZW4gcmVjb25uZWN0cyB3aXRoaW4gdGhlIHNwZWNpZmllZCBpbnRlcnZhbCxcbiAgICogdGhlIG11bHRpcGxlIHN0cmVhbXMgd2lsbCBiZSBjb25zaWRlcmVkIGEgc2luZ2xlIGJyb2FkY2FzdCBhbmQgbWVyZ2VkIHRvZ2V0aGVyLlxuICAgKlxuICAgKiBgcmVjb3JkaW5nUmVjb25uZWN0V2luZG93YCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMzAwIHNlY29uZHNcbiAgICpcbiAgICogQGRlZmF1bHQgLSAwIHNlY29uZHMgKG1lYW5zIGRpc2FibGVkKVxuICAgKi9cbiAgcmVhZG9ubHkgcmVjb3JkaW5nUmVjb25uZWN0V2luZG93PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIEEgcmVuZGl0aW9uIGNvbmZpZ3VyYXRpb24gZGVzY3JpYmVzIHdoaWNoIHJlbmRpdGlvbnMgc2hvdWxkIGJlIHJlY29yZGVkIGZvciBhIHN0cmVhbS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1pdnMtcmVjb3JkaW5nY29uZmlndXJhdGlvbi1yZW5kaXRpb25jb25maWd1cmF0aW9uLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyByZW5kaXRpb24gY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVuZGl0aW9uQ29uZmlndXJhdGlvbj86IFJlbmRpdGlvbkNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEEgdGh1bWJuYWlsIGNvbmZpZ3VyYXRpb24gZW5hYmxlcy9kaXNhYmxlcyB0aGUgcmVjb3JkaW5nIG9mIHRodW1ibmFpbHMgZm9yIGEgbGl2ZSBzZXNzaW9uIGFuZCBjb250cm9scyB0aGUgaW50ZXJ2YWwgYXQgd2hpY2ggdGh1bWJuYWlscyBhcmUgZ2VuZXJhdGVkIGZvciB0aGUgbGl2ZSBzZXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWl2cy1yZWNvcmRpbmdjb25maWd1cmF0aW9uLXRodW1ibmFpbGNvbmZpZ3VyYXRpb24uaHRtbFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHRodW1ibmFpbCBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSB0aHVtYm5haWxDb25maWd1cmF0aW9uPzpUaHVtYm5haWxDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIElWUyBSZWNvcmRpbmcgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUmVjb3JkaW5nQ29uZmlndXJhdGlvbiBleHRlbmRzIElSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFJlY29yZGluZyBjb25maWd1cmF0aW9uLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSByZWNvcmRpbmdDb25maWd1cmF0aW9uSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgUmVjb3JkaW5nIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZGluZ0NvbmZpZ3VyYXRpb25Bcm46IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgSVZTIFJlY29yZGluZyBjb25maWd1cmF0aW9uXG4gKlxuICogQHJlc291cmNlIEFXUzo6SVZTOjpSZWNvcmRpbmdDb25maWd1cmF0aW9uXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBSZWNvcmRpbmdDb25maWd1cmF0aW9uIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJUmVjb3JkaW5nQ29uZmlndXJhdGlvbiB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWl2cy1hbHBoYS5SZWNvcmRpbmdDb25maWd1cmF0aW9uJztcblxuICAvKipcbiAgICogSW1wb3J0cyBhbiBJVlMgUmVjb3JkaW5nIENvbmZpZ3VyYXRpb24gZnJvbSBhdHRyaWJ1dGVzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tUmVjb3JkaW5nQ29uZmlndXJhdGlvbklkKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsXG4gICAgcmVjb3JkaW5nQ29uZmlndXJhdGlvbklkOiBzdHJpbmcpOiBJUmVjb3JkaW5nQ29uZmlndXJhdGlvbiB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJUmVjb3JkaW5nQ29uZmlndXJhdGlvbiB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcmVjb3JkaW5nQ29uZmlndXJhdGlvbklkID0gcmVjb3JkaW5nQ29uZmlndXJhdGlvbklkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJlY29yZGluZ0NvbmZpZ3VyYXRpb25Bcm4gPSBTdGFjay5vZih0aGlzKS5mb3JtYXRBcm4oe1xuICAgICAgICByZXNvdXJjZTogJ3JlY29yZGluZy1jb25maWd1cmF0aW9uJyxcbiAgICAgICAgc2VydmljZTogJ2l2cycsXG4gICAgICAgIHJlc291cmNlTmFtZTogcmVjb3JkaW5nQ29uZmlndXJhdGlvbklkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnRzIGFuIElWUyBSZWNvcmRpbmcgQ29uZmlndXJhdGlvbiBmcm9tIGl0cyBBUk5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUFybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCByZWNvcmRpbmdDb25maWd1cmF0aW9uQXJuOiBzdHJpbmcpOiBJUmVjb3JkaW5nQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgcmVzb3VyY2VQYXJ0cyA9IEZuLnNwbGl0KCcvJywgcmVjb3JkaW5nQ29uZmlndXJhdGlvbkFybik7XG5cbiAgICBpZiAoIXJlc291cmNlUGFydHMgfHwgcmVzb3VyY2VQYXJ0cy5sZW5ndGggPCAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgQVJOIGZvcm1hdDogJHtyZWNvcmRpbmdDb25maWd1cmF0aW9uQXJufWApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlY29yZGluZ0NvbmZpZ3VyYXRpb25JZCA9IEZuLnNlbGVjdCgxLCByZXNvdXJjZVBhcnRzKTtcblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVJlY29yZGluZ0NvbmZpZ3VyYXRpb24ge1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJlY29yZGluZ0NvbmZpZ3VyYXRpb25JZCA9IHJlY29yZGluZ0NvbmZpZ3VyYXRpb25JZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSByZWNvcmRpbmdDb25maWd1cmF0aW9uQXJuID0gcmVjb3JkaW5nQ29uZmlndXJhdGlvbkFybjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgUmVjb3JkaW5nIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZGluZ0NvbmZpZ3VyYXRpb25JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBSZWNvcmRpbmcgY29uZmlndXJhdGlvbi5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVjb3JkaW5nQ29uZmlndXJhdGlvbkFybjogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IFJlY29yZGluZ0NvbmZpZ3VyYXRpb25Qcm9wcztcblxuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJlY29yZGluZ0NvbmZpZ3VyYXRpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy5yZWNvcmRpbmdDb25maWd1cmF0aW9uTmFtZSxcbiAgICB9KTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMudmFsaWRhdGVSZWNvcmRpbmdDb25maWd1cmF0aW9uTmFtZSgpO1xuICAgIHRoaXMudmFsaWRhdGVSZWNvcmRpbmdSZWNvbm5lY3RXaW5kb3dTZWNvbmRzKCk7XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBDZm5SZWNvcmRpbmdDb25maWd1cmF0aW9uKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIGRlc3RpbmF0aW9uQ29uZmlndXJhdGlvbjoge1xuICAgICAgICBzMzoge1xuICAgICAgICAgIGJ1Y2tldE5hbWU6IHRoaXMucHJvcHMuYnVja2V0LmJ1Y2tldFJlZi5idWNrZXROYW1lLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG5hbWU6IHRoaXMucHJvcHMucmVjb3JkaW5nQ29uZmlndXJhdGlvbk5hbWUsXG4gICAgICByZWNvcmRpbmdSZWNvbm5lY3RXaW5kb3dTZWNvbmRzOiB0aGlzLnByb3BzLnJlY29yZGluZ1JlY29ubmVjdFdpbmRvdz8udG9TZWNvbmRzKCksXG4gICAgICByZW5kaXRpb25Db25maWd1cmF0aW9uOiB0aGlzLl9yZW5kZXJSZW5kaXRpb25Db25maWd1cmF0aW9uKCksXG4gICAgICB0aHVtYm5haWxDb25maWd1cmF0aW9uOiB0aGlzLl9yZW5kZXJUaHVtYm5haWxDb25maWd1cmF0aW9uKCksXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlY29yZGluZ0NvbmZpZ3VyYXRpb25JZCA9IHJlc291cmNlLnJlZjtcbiAgICB0aGlzLnJlY29yZGluZ0NvbmZpZ3VyYXRpb25Bcm4gPSByZXNvdXJjZS5hdHRyQXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyUmVuZGl0aW9uQ29uZmlndXJhdGlvbigpOiBDZm5SZWNvcmRpbmdDb25maWd1cmF0aW9uLlJlbmRpdGlvbkNvbmZpZ3VyYXRpb25Qcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLnJlbmRpdGlvbkNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVuZGl0aW9uczogdGhpcy5wcm9wcy5yZW5kaXRpb25Db25maWd1cmF0aW9uLnJlbmRpdGlvbnMsXG4gICAgICByZW5kaXRpb25TZWxlY3Rpb246IHRoaXMucHJvcHMucmVuZGl0aW9uQ29uZmlndXJhdGlvbi5yZW5kaXRpb25TZWxlY3Rpb24sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlclRodW1ibmFpbENvbmZpZ3VyYXRpb24oKTogQ2ZuUmVjb3JkaW5nQ29uZmlndXJhdGlvbi5UaHVtYm5haWxDb25maWd1cmF0aW9uUHJvcGVydHkgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5wcm9wcy50aHVtYm5haWxDb25maWd1cmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlY29yZGluZ01vZGU6IHRoaXMucHJvcHMudGh1bWJuYWlsQ29uZmlndXJhdGlvbi5yZWNvcmRpbmdNb2RlLFxuICAgICAgcmVzb2x1dGlvbjogdGhpcy5wcm9wcy50aHVtYm5haWxDb25maWd1cmF0aW9uLnJlc29sdXRpb24sXG4gICAgICBzdG9yYWdlOiB0aGlzLnByb3BzLnRodW1ibmFpbENvbmZpZ3VyYXRpb24uc3RvcmFnZSxcbiAgICAgIHRhcmdldEludGVydmFsU2Vjb25kczogdGhpcy5wcm9wcy50aHVtYm5haWxDb25maWd1cmF0aW9uLnRhcmdldEludGVydmFsPy50b1NlY29uZHMoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJlY29yZGluZ0NvbmZpZ3VyYXRpb25OYW1lKCk6IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVjb3JkaW5nQ29uZmlndXJhdGlvbk5hbWUgPSB0aGlzLnByb3BzLnJlY29yZGluZ0NvbmZpZ3VyYXRpb25OYW1lO1xuXG4gICAgaWYgKHJlY29yZGluZ0NvbmZpZ3VyYXRpb25OYW1lID09IHVuZGVmaW5lZCB8fCBUb2tlbi5pc1VucmVzb2x2ZWQocmVjb3JkaW5nQ29uZmlndXJhdGlvbk5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEvXlthLXpBLVowLTktX10qJC8udGVzdChyZWNvcmRpbmdDb25maWd1cmF0aW9uTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgXFxgcmVjb3JkaW5nQ29uZmlndXJhdGlvbk5hbWVcXGAgbXVzdCBjb25zaXN0IG9ubHkgb2YgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIGh5cGhlbnMgb3IgdW5kZXJiYXJzLCBnb3Q6ICR7cmVjb3JkaW5nQ29uZmlndXJhdGlvbk5hbWV9LmApO1xuICAgIH1cblxuICAgIGlmIChyZWNvcmRpbmdDb25maWd1cmF0aW9uTmFtZS5sZW5ndGggPiAxMjgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgXFxgcmVjb3JkaW5nQ29uZmlndXJhdGlvbk5hbWVcXGAgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMTI4IGNoYXJhY3RlcnMsIGdvdDogJHtyZWNvcmRpbmdDb25maWd1cmF0aW9uTmFtZS5sZW5ndGh9IGNoYXJhY3RlcnMuYCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJlY29yZGluZ1JlY29ubmVjdFdpbmRvd1NlY29uZHMoKTogdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWNvcmRpbmdSZWNvbm5lY3RXaW5kb3cgPSB0aGlzLnByb3BzLnJlY29yZGluZ1JlY29ubmVjdFdpbmRvdztcblxuICAgIGlmIChyZWNvcmRpbmdSZWNvbm5lY3RXaW5kb3cgPT09IHVuZGVmaW5lZCB8fCBUb2tlbi5pc1VucmVzb2x2ZWQocmVjb3JkaW5nUmVjb25uZWN0V2luZG93KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICgwIDwgcmVjb3JkaW5nUmVjb25uZWN0V2luZG93LnRvTWlsbGlzZWNvbmRzKCkgJiYgcmVjb3JkaW5nUmVjb25uZWN0V2luZG93LnRvTWlsbGlzZWNvbmRzKCkgPCBEdXJhdGlvbi5zZWNvbmRzKDEpLnRvTWlsbGlzZWNvbmRzKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgXFxgcmVjb3JkaW5nUmVjb25uZWN0V2luZG93XFxgIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAzMDAgc2Vjb25kcywgZ290ICR7cmVjb3JkaW5nUmVjb25uZWN0V2luZG93LnRvTWlsbGlzZWNvbmRzKCl9IG1pbGxpc2Vjb25kcy5gKTtcbiAgICB9XG5cbiAgICBpZiAocmVjb3JkaW5nUmVjb25uZWN0V2luZG93LnRvU2Vjb25kcygpID4gMzAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFxcYHJlY29yZGluZ1JlY29ubmVjdFdpbmRvd1xcYCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMzAwIHNlY29uZHMsIGdvdCAke3JlY29yZGluZ1JlY29ubmVjdFdpbmRvdy50b1NlY29uZHMoKX0gc2Vjb25kcy5gKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==