UNPKG

@aws-cdk/aws-glue-alpha

Version:

The CDK Construct Library for AWS::Glue

152 lines 19.5 kB
"use strict"; 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; }; 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; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ScalaSparkFlexEtlJob = void 0; const jsiiDeprecationWarnings = require("../../.warnings.jsii.js"); const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const aws_glue_1 = require("aws-cdk-lib/aws-glue"); const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal"); const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource"); const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable"); const constants_1 = require("../constants"); const spark_job_1 = require("./spark-job"); /** * Spark ETL Jobs class * * ETL jobs support pySpark and Scala languages, for which there are separate * but similar constructors. ETL jobs default to the G2 worker type, but you * can override this default with other supported worker type values * (G1, G2, G4 and G8). ETL jobs defaults to Glue version 4.0, which you can * override to 3.0. The following ETL features are enabled by default: * —enable-metrics, —enable-spark-ui, —enable-continuous-cloudwatch-log. * You can find more details about version, worker type and other features * in Glue's public documentation. */ let ScalaSparkFlexEtlJob = (() => { let _classDecorators = [prop_injectable_1.propertyInjectable]; let _classDescriptor; let _classExtraInitializers = []; let _classThis; let _classSuper = spark_job_1.SparkJob; let _instanceExtraInitializers = []; let _get_jobArn_decorators; let _get_jobName_decorators; var ScalaSparkFlexEtlJob = class extends _classSuper { static { _classThis = this; } static { const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0; _get_jobArn_decorators = [helpers_internal_1.memoizedGetter]; _get_jobName_decorators = [helpers_internal_1.memoizedGetter]; __esDecorate(this, null, _get_jobArn_decorators, { kind: "getter", name: "jobArn", static: false, private: false, access: { has: obj => "jobArn" in obj, get: obj => obj.jobArn }, metadata: _metadata }, null, _instanceExtraInitializers); __esDecorate(this, null, _get_jobName_decorators, { kind: "getter", name: "jobName", static: false, private: false, access: { has: obj => "jobName" in obj, get: obj => obj.jobName }, metadata: _metadata }, null, _instanceExtraInitializers); __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); ScalaSparkFlexEtlJob = _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-glue-alpha.ScalaSparkFlexEtlJob", version: "2.257.0-alpha.0" }; /** Uniquely identifies this class. */ static PROPERTY_INJECTION_ID = '@aws-cdk.aws-glue-alpha.ScalaSparkFlexEtlJob'; resource = __runInitializers(this, _instanceExtraInitializers); /** * ScalaSparkFlexEtlJob constructor */ constructor(scope, id, props) { super(scope, id, props); try { jsiiDeprecationWarnings._aws_cdk_aws_glue_alpha_ScalaSparkFlexEtlJobProps(props); } catch (error) { if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") { Error.captureStackTrace(error, ScalaSparkFlexEtlJob); } throw error; } // Enhanced CDK Analytics Telemetry (0, metadata_resource_1.addConstructMetadata)(this, props); // Combine command line arguments into a single line item const defaultArguments = { ...this.executableArguments(props), ...this.nonExecutableCommonArguments(props), }; this.resource = new aws_glue_1.CfnJob(this, 'Resource', { name: props.jobName, description: props.description, role: this.role.roleArn, command: { name: constants_1.JobType.ETL, scriptLocation: this.codeS3ObjectUrl(props.script), }, glueVersion: props.glueVersion ? props.glueVersion : constants_1.GlueVersion.V3_0, workerType: props.workerType ? props.workerType : constants_1.WorkerType.G_1X, numberOfWorkers: props.numberOfWorkers ? props.numberOfWorkers : 10, maxRetries: props.maxRetries, executionProperty: props.maxConcurrentRuns ? { maxConcurrentRuns: props.maxConcurrentRuns } : undefined, notificationProperty: props.notifyDelayAfter ? { notifyDelayAfter: props.notifyDelayAfter.toMinutes() } : undefined, timeout: props.timeout?.toMinutes(), connections: props.connections ? { connections: props.connections.map((connection) => connection.connectionName) } : undefined, securityConfiguration: props.securityConfiguration?.securityConfigurationName, tags: props.tags, executionClass: constants_1.ExecutionClass.FLEX, jobRunQueuingEnabled: false, defaultArguments, }); } get jobArn() { return this.buildJobArn(this, this.jobName); } get jobName() { return this.getResourceNameAttribute(this.resource.ref); } /** * Set the executable arguments with best practices enabled by default * * @returns An array of arguments for Glue to use on execution */ executableArguments(props) { const args = {}; args['--job-language'] = constants_1.JobLanguage.SCALA; args['--class'] = props.className; this.setupExtraCodeArguments(args, props); return args; } static { __runInitializers(_classThis, _classExtraInitializers); } }; return ScalaSparkFlexEtlJob = _classThis; })(); exports.ScalaSparkFlexEtlJob = ScalaSparkFlexEtlJob; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NhbGEtc3BhcmstZmxleC1ldGwtam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2NhbGEtc3BhcmstZmxleC1ldGwtam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQUE4QztBQUU5Qyw0RUFBdUU7QUFDdkUsOEVBQThFO0FBQzlFLDBFQUEwRTtBQUcxRSw0Q0FBNkY7QUFFN0YsMkNBQXVDO0FBd0R2Qzs7Ozs7Ozs7Ozs7R0FXRztJQUVVLG9CQUFvQjs0QkFEaEMsb0NBQWtCOzs7O3NCQUN1QixvQkFBUTs7OztvQ0FBaEIsU0FBUSxXQUFROzs7O3NDQTJDL0MsaUNBQWM7dUNBS2QsaUNBQWM7WUFKZix5S0FBVyxNQUFNLDZEQUVoQjtZQUdELDRLQUFXLE9BQU8sNkRBRWpCO1lBbkRILDZLQWlFQzs7Ozs7UUFoRUMsc0NBQXNDO1FBQy9CLE1BQU0sQ0FBVSxxQkFBcUIsR0FBVyw4Q0FBOEMsQ0FBQztRQUM5RixRQUFRLEdBSEwsbURBQW9CLENBR047UUFFekI7O1dBRUc7UUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWdDO1lBQ3hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDOzs7Ozs7bURBVGYsb0JBQW9COzs7O1lBVTdCLG1DQUFtQztZQUNuQyxJQUFBLHdDQUFvQixFQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVsQyx5REFBeUQ7WUFDekQsTUFBTSxnQkFBZ0IsR0FBRztnQkFDdkIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDO2dCQUNsQyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUM7YUFDNUMsQ0FBQztZQUVGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxpQkFBTSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQzNDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTztnQkFDbkIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2dCQUM5QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO2dCQUN2QixPQUFPLEVBQUU7b0JBQ1AsSUFBSSxFQUFFLG1CQUFPLENBQUMsR0FBRztvQkFDakIsY0FBYyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztpQkFDbkQ7Z0JBQ0QsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLHVCQUFXLENBQUMsSUFBSTtnQkFDckUsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLHNCQUFVLENBQUMsSUFBSTtnQkFDakUsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25FLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtnQkFDNUIsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO2dCQUN2RyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQ25ILE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRTtnQkFDbkMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDOUgscUJBQXFCLEVBQUUsS0FBSyxDQUFDLHFCQUFxQixFQUFFLHlCQUF5QjtnQkFDN0UsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO2dCQUNoQixjQUFjLEVBQUUsMEJBQWMsQ0FBQyxJQUFJO2dCQUNuQyxvQkFBb0IsRUFBRSxLQUFLO2dCQUMzQixnQkFBZ0I7YUFDakIsQ0FBQyxDQUFDO1NBQ0o7UUFHRCxJQUFXLE1BQU07WUFDZixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM3QztRQUdELElBQVcsT0FBTztZQUNoQixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pEO1FBRUQ7Ozs7V0FJRztRQUNLLG1CQUFtQixDQUFDLEtBQWdDO1lBQzFELE1BQU0sSUFBSSxHQUE4QixFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsdUJBQVcsQ0FBQyxLQUFLLENBQUM7WUFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFDbEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxQyxPQUFPLElBQUksQ0FBQztTQUNiOztZQWhFVSx1REFBb0I7Ozs7O0FBQXBCLG9EQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbkpvYiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1nbHVlJztcbmltcG9ydCB0eXBlICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgbWVtb2l6ZWRHZXR0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IENvZGUgfSBmcm9tICcuLi9jb2RlJztcbmltcG9ydCB7IEpvYlR5cGUsIEdsdWVWZXJzaW9uLCBKb2JMYW5ndWFnZSwgV29ya2VyVHlwZSwgRXhlY3V0aW9uQ2xhc3MgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUgeyBTcGFya0pvYlByb3BzIH0gZnJvbSAnLi9zcGFyay1qb2InO1xuaW1wb3J0IHsgU3BhcmtKb2IgfSBmcm9tICcuL3NwYXJrLWpvYic7XG5cbi8qKlxuICogRmxleCBKb2JzIGNsYXNzXG4gKlxuICogRmxleCBqb2JzIHN1cHBvcnRzIFB5dGhvbiBhbmQgU2NhbGEgbGFuZ3VhZ2UuXG4gKiBUaGUgZmxleGlibGUgZXhlY3V0aW9uIGNsYXNzIGlzIGFwcHJvcHJpYXRlIGZvciBub24tdXJnZW50IGpvYnMgc3VjaCBhc1xuICogcHJlLXByb2R1Y3Rpb24gam9icywgdGVzdGluZywgYW5kIG9uZS10aW1lIGRhdGEgbG9hZHMuXG4gKiBGbGV4aWJsZSBqb2IgcnVucyBhcmUgc3VwcG9ydGVkIGZvciBqb2JzIHVzaW5nIEFXUyBHbHVlIHZlcnNpb24gMy4wIG9yIGxhdGVyIGFuZCBHLjFYIG9yXG4gKiBHLjJYIHdvcmtlciB0eXBlcyBidXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBHbHVlIChjdXJyZW50bHkgR2x1ZSAzLjAuKVxuICpcbiAqIFNpbWlsYXIgdG8gRVRMLCB3ZeKAmWxsIGVuYWJsZSB0aGVzZSBmZWF0dXJlczog4oCUZW5hYmxlLW1ldHJpY3MsIOKAlGVuYWJsZS1zcGFyay11aSxcbiAqIOKAlGVuYWJsZS1jb250aW51b3VzLWNsb3Vkd2F0Y2gtbG9nXG4gKlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjYWxhU3BhcmtGbGV4RXRsSm9iUHJvcHMgZXh0ZW5kcyBTcGFya0pvYlByb3BzIHtcbiAgLyoqXG4gICAqIFNwZWNpZmllcyBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgb2YgYSBub3RpZmljYXRpb24gKG9wdGlvbmFsKS5cbiAgICogQWZ0ZXIgYSBqb2IgcnVuIHN0YXJ0cywgdGhlIG51bWJlciBvZiBtaW51dGVzIHRvIHdhaXQgYmVmb3JlIHNlbmRpbmcgYSBqb2IgcnVuIGRlbGF5IG5vdGlmaWNhdGlvbi5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IG5vdGlmeURlbGF5QWZ0ZXI/OiBjZGsuRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBmdWxseSBxdWFsaWZpZWQgU2NhbGEgY2xhc3MgbmFtZSB0aGF0IHNlcnZlcyBhcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBqb2IuXG4gICAqXG4gICAqIEBzZWUgYC0tY2xhc3NgIGluIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC9kZy9hd3MtZ2x1ZS1wcm9ncmFtbWluZy1ldGwtZ2x1ZS1hcmd1bWVudHMuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgY2xhc3NOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgZmlsZXMsIHN1Y2ggYXMgY29uZmlndXJhdGlvbiBmaWxlcyB0aGF0IEFXUyBHbHVlIGNvcGllcyB0byB0aGUgd29ya2luZyBkaXJlY3Rvcnkgb2YgeW91ciBzY3JpcHQgYmVmb3JlIGV4ZWN1dGluZyBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBleHRyYSBmaWxlcyBzcGVjaWZpZWQuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dsdWUvbGF0ZXN0L2RnL2F3cy1nbHVlLXByb2dyYW1taW5nLWV0bC1nbHVlLWFyZ3VtZW50cy5odG1sXG4gICAqL1xuICByZWFkb25seSBleHRyYUZpbGVzPzogQ29kZVtdO1xuXG4gIC8qKlxuICAgKiBFeHRyYSBKYXJzIFMzIFVSTCAob3B0aW9uYWwpXG4gICAqIFMzIFVSTCB3aGVyZSBhZGRpdGlvbmFsIGphciBkZXBlbmRlbmNpZXMgYXJlIGxvY2F0ZWRcbiAgICogQGRlZmF1bHQgLSBubyBleHRyYSBqYXIgZmlsZXNcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhSmFycz86IENvZGVbXTtcblxuICAvKipcbiAgICogU2V0dGluZyB0aGlzIHZhbHVlIHRvIHRydWUgcHJpb3JpdGl6ZXMgdGhlIGN1c3RvbWVyJ3MgZXh0cmEgSkFSIGZpbGVzIGluIHRoZSBjbGFzc3BhdGguXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlIC0gcHJpb3JpdHkgaXMgbm90IGdpdmVuIHRvIHVzZXItcHJvdmlkZWQgamFyc1xuICAgKlxuICAgKiBAc2VlIGAtLXVzZXItamFycy1maXJzdGAgaW4gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dsdWUvbGF0ZXN0L2RnL2F3cy1nbHVlLXByb2dyYW1taW5nLWV0bC1nbHVlLWFyZ3VtZW50cy5odG1sXG4gICAqL1xuICByZWFkb25seSBleHRyYUphcnNGaXJzdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogU3BhcmsgRVRMIEpvYnMgY2xhc3NcbiAqXG4gKiBFVEwgam9icyBzdXBwb3J0IHB5U3BhcmsgYW5kIFNjYWxhIGxhbmd1YWdlcywgZm9yIHdoaWNoIHRoZXJlIGFyZSBzZXBhcmF0ZVxuICogYnV0IHNpbWlsYXIgY29uc3RydWN0b3JzLiBFVEwgam9icyBkZWZhdWx0IHRvIHRoZSBHMiB3b3JrZXIgdHlwZSwgYnV0IHlvdVxuICogY2FuIG92ZXJyaWRlIHRoaXMgZGVmYXVsdCB3aXRoIG90aGVyIHN1cHBvcnRlZCB3b3JrZXIgdHlwZSB2YWx1ZXNcbiAqIChHMSwgRzIsIEc0IGFuZCBHOCkuIEVUTCBqb2JzIGRlZmF1bHRzIHRvIEdsdWUgdmVyc2lvbiA0LjAsIHdoaWNoIHlvdSBjYW5cbiAqIG92ZXJyaWRlIHRvIDMuMC4gVGhlIGZvbGxvd2luZyBFVEwgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdDpcbiAqIOKAlGVuYWJsZS1tZXRyaWNzLCDigJRlbmFibGUtc3BhcmstdWksIOKAlGVuYWJsZS1jb250aW51b3VzLWNsb3Vkd2F0Y2gtbG9nLlxuICogWW91IGNhbiBmaW5kIG1vcmUgZGV0YWlscyBhYm91dCB2ZXJzaW9uLCB3b3JrZXIgdHlwZSBhbmQgb3RoZXIgZmVhdHVyZXNcbiAqIGluIEdsdWUncyBwdWJsaWMgZG9jdW1lbnRhdGlvbi5cbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIFNjYWxhU3BhcmtGbGV4RXRsSm9iIGV4dGVuZHMgU3BhcmtKb2Ige1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1nbHVlLWFscGhhLlNjYWxhU3BhcmtGbGV4RXRsSm9iJztcbiAgcHJpdmF0ZSByZXNvdXJjZTogQ2ZuSm9iO1xuXG4gIC8qKlxuICAgKiBTY2FsYVNwYXJrRmxleEV0bEpvYiBjb25zdHJ1Y3RvclxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNjYWxhU3BhcmtGbGV4RXRsSm9iUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIC8vIENvbWJpbmUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBpbnRvIGEgc2luZ2xlIGxpbmUgaXRlbVxuICAgIGNvbnN0IGRlZmF1bHRBcmd1bWVudHMgPSB7XG4gICAgICAuLi50aGlzLmV4ZWN1dGFibGVBcmd1bWVudHMocHJvcHMpLFxuICAgICAgLi4udGhpcy5ub25FeGVjdXRhYmxlQ29tbW9uQXJndW1lbnRzKHByb3BzKSxcbiAgICB9O1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBDZm5Kb2IodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogcHJvcHMuam9iTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIHJvbGU6IHRoaXMucm9sZS5yb2xlQXJuLFxuICAgICAgY29tbWFuZDoge1xuICAgICAgICBuYW1lOiBKb2JUeXBlLkVUTCxcbiAgICAgICAgc2NyaXB0TG9jYXRpb246IHRoaXMuY29kZVMzT2JqZWN0VXJsKHByb3BzLnNjcmlwdCksXG4gICAgICB9LFxuICAgICAgZ2x1ZVZlcnNpb246IHByb3BzLmdsdWVWZXJzaW9uID8gcHJvcHMuZ2x1ZVZlcnNpb24gOiBHbHVlVmVyc2lvbi5WM18wLFxuICAgICAgd29ya2VyVHlwZTogcHJvcHMud29ya2VyVHlwZSA/IHByb3BzLndvcmtlclR5cGUgOiBXb3JrZXJUeXBlLkdfMVgsXG4gICAgICBudW1iZXJPZldvcmtlcnM6IHByb3BzLm51bWJlck9mV29ya2VycyA/IHByb3BzLm51bWJlck9mV29ya2VycyA6IDEwLFxuICAgICAgbWF4UmV0cmllczogcHJvcHMubWF4UmV0cmllcyxcbiAgICAgIGV4ZWN1dGlvblByb3BlcnR5OiBwcm9wcy5tYXhDb25jdXJyZW50UnVucyA/IHsgbWF4Q29uY3VycmVudFJ1bnM6IHByb3BzLm1heENvbmN1cnJlbnRSdW5zIH0gOiB1bmRlZmluZWQsXG4gICAgICBub3RpZmljYXRpb25Qcm9wZXJ0eTogcHJvcHMubm90aWZ5RGVsYXlBZnRlciA/IHsgbm90aWZ5RGVsYXlBZnRlcjogcHJvcHMubm90aWZ5RGVsYXlBZnRlci50b01pbnV0ZXMoKSB9IDogdW5kZWZpbmVkLFxuICAgICAgdGltZW91dDogcHJvcHMudGltZW91dD8udG9NaW51dGVzKCksXG4gICAgICBjb25uZWN0aW9uczogcHJvcHMuY29ubmVjdGlvbnMgPyB7IGNvbm5lY3Rpb25zOiBwcm9wcy5jb25uZWN0aW9ucy5tYXAoKGNvbm5lY3Rpb24pID0+IGNvbm5lY3Rpb24uY29ubmVjdGlvbk5hbWUpIH0gOiB1bmRlZmluZWQsXG4gICAgICBzZWN1cml0eUNvbmZpZ3VyYXRpb246IHByb3BzLnNlY3VyaXR5Q29uZmlndXJhdGlvbj8uc2VjdXJpdHlDb25maWd1cmF0aW9uTmFtZSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgICBleGVjdXRpb25DbGFzczogRXhlY3V0aW9uQ2xhc3MuRkxFWCxcbiAgICAgIGpvYlJ1blF1ZXVpbmdFbmFibGVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHRBcmd1bWVudHMsXG4gICAgfSk7XG4gIH1cblxuICBAbWVtb2l6ZWRHZXR0ZXJcbiAgcHVibGljIGdldCBqb2JBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZEpvYkFybih0aGlzLCB0aGlzLmpvYk5hbWUpO1xuICB9XG5cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgam9iTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZSh0aGlzLnJlc291cmNlLnJlZik7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBleGVjdXRhYmxlIGFyZ3VtZW50cyB3aXRoIGJlc3QgcHJhY3RpY2VzIGVuYWJsZWQgYnkgZGVmYXVsdFxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBhcmd1bWVudHMgZm9yIEdsdWUgdG8gdXNlIG9uIGV4ZWN1dGlvblxuICAgKi9cbiAgcHJpdmF0ZSBleGVjdXRhYmxlQXJndW1lbnRzKHByb3BzOiBTY2FsYVNwYXJrRmxleEV0bEpvYlByb3BzKSB7XG4gICAgY29uc3QgYXJnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgIGFyZ3NbJy0tam9iLWxhbmd1YWdlJ10gPSBKb2JMYW5ndWFnZS5TQ0FMQTtcbiAgICBhcmdzWyctLWNsYXNzJ10gPSBwcm9wcy5jbGFzc05hbWU7XG4gICAgdGhpcy5zZXR1cEV4dHJhQ29kZUFyZ3VtZW50cyhhcmdzLCBwcm9wcyk7XG4gICAgcmV0dXJuIGFyZ3M7XG4gIH1cbn1cbiJdfQ==