UNPKG

aws-ddk-core

Version:

The AWS DataOps Development Kit is an open source development framework for customers that build data workflows and modern data architecture on AWS.

91 lines 14 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.AthenaSQLStage = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const events = require("aws-cdk-lib/aws-events"); const eventsTargets = require("aws-cdk-lib/aws-events-targets"); const sfn = require("aws-cdk-lib/aws-stepfunctions"); const tasks = require("aws-cdk-lib/aws-stepfunctions-tasks"); const stage_1 = require("../pipelines/stage"); /** * Stage that contains a step function that execute Athena SQL query. */ class AthenaSQLStage extends stage_1.StateMachineStage { /** * Constructs `AthenaSQLStage`. * @param scope Scope within which this construct is defined. * @param id Identifier of the stage. * @param props Properties for the stage. */ constructor(scope, id, props) { super(scope, id, props); this.stateMachineInput = props.stateMachineInput; if (props.queryString && props.queryStringPath) { throw TypeError("For this stage provide one of queryString or queryStringPath parameter, not both"); } const queryStringInput = props.queryStringPath ? sfn.JsonPath.stringAt(props.queryStringPath) : props.queryString; if (!queryStringInput) { throw TypeError("For this stage one of queryString or queryStringPath parameter is required"); } var cnt = 0; if (props.queryString) { if (props.parallel) { var athenaQueryExec = new sfn.Parallel(this, "All Jobs"); for (var query of queryStringInput) { const addStep = this.getAthenaStartQueryExecutionStep(query, props, cnt); var athenaQueryExec = athenaQueryExec.branch(addStep); cnt = cnt + 1; } } else { var athenaQueryExec = undefined; for (var query of queryStringInput) { const addStep = this.getAthenaStartQueryExecutionStep(query, props, cnt); var athenaQueryExec = athenaQueryExec ? athenaQueryExec.next(addStep) : addStep; cnt = cnt + 1; } } } else { var athenaQueryExec = this.getAthenaStartQueryExecutionStep(queryStringInput, props, cnt); } const definition = athenaQueryExec.next(new sfn.Succeed(this, "Success")); ({ eventPattern: this.eventPattern, stateMachine: this.stateMachine } = this.createStateMachine({ definition: definition, ...props, })); this.targets = [ new eventsTargets.SfnStateMachine(this.stateMachine, { input: props.queryString ? events.RuleTargetInput.fromObject(this.stateMachineInput) : events.RuleTargetInput.fromEventPath("$.detail"), }), ]; } getAthenaStartQueryExecutionStep(queryStringInput, props, cnt) { const encryptionOption = props.encryptionOption ?? tasks.EncryptionOption.S3_MANAGED; const encryptionKey = props.encryptionKey; const startQueryExec = new tasks.AthenaStartQueryExecution(this, `Query Exec ${cnt}`, { queryString: queryStringInput, integrationPattern: sfn.IntegrationPattern.RUN_JOB, queryExecutionContext: { catalogName: props.catalogName, databaseName: props.databaseName, }, resultConfiguration: { encryptionConfiguration: { encryptionOption: encryptionOption, encryptionKey: encryptionKey, }, outputLocation: props.outputLocation, }, workGroup: props.workGroup, }); return startQueryExec; } } exports.AthenaSQLStage = AthenaSQLStage; _a = JSII_RTTI_SYMBOL_1; AthenaSQLStage[_a] = { fqn: "aws-ddk-core.AthenaSQLStage", version: "1.4.1" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRoZW5hLXNxbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGFnZXMvYXRoZW5hLXNxbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGlEQUFpRDtBQUNqRCxnRUFBZ0U7QUFHaEUscURBQXFEO0FBQ3JELDZEQUE2RDtBQUU3RCw4Q0FBK0U7QUE2Qy9FOztHQUVHO0FBQ0gsTUFBYSxjQUFlLFNBQVEseUJBQWlCO0lBT25EOzs7OztPQUtHO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE0QjtRQUNwRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDO1FBRWpELElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsZUFBZSxFQUFFO1lBQzlDLE1BQU0sU0FBUyxDQUFDLGtGQUFrRixDQUFDLENBQUM7U0FDckc7UUFDRCxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUNsSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDckIsTUFBTSxTQUFTLENBQUMsNEVBQTRFLENBQUMsQ0FBQztTQUMvRjtRQUVELElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNaLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRTtZQUNyQixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xCLElBQUksZUFBZSxHQUFRLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQzlELEtBQUssSUFBSSxLQUFLLElBQUksZ0JBQWdCLEVBQUU7b0JBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUN6RSxJQUFJLGVBQWUsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN0RCxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztpQkFDZjthQUNGO2lCQUFNO2dCQUNMLElBQUksZUFBZSxHQUFRLFNBQVMsQ0FBQztnQkFDckMsS0FBSyxJQUFJLEtBQUssSUFBSSxnQkFBZ0IsRUFBRTtvQkFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3pFLElBQUksZUFBZSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO29CQUNoRixHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztpQkFDZjthQUNGO1NBQ0Y7YUFBTTtZQUNMLElBQUksZUFBZSxHQUFRLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDaEc7UUFFRCxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUUxRSxDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDOUYsVUFBVSxFQUFFLFVBQVU7WUFDdEIsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ2IsSUFBSSxhQUFhLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ25ELEtBQUssRUFBRSxLQUFLLENBQUMsV0FBVztvQkFDdEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztvQkFDM0QsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQzthQUNyRCxDQUFDO1NBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTyxnQ0FBZ0MsQ0FDdEMsZ0JBQXFCLEVBQ3JCLEtBQTRCLEVBQzVCLEdBQVc7UUFFWCxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDO1FBQ3JGLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFDMUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsSUFBSSxFQUFFLGNBQWMsR0FBRyxFQUFFLEVBQUU7WUFDcEYsV0FBVyxFQUFFLGdCQUFnQjtZQUM3QixrQkFBa0IsRUFBRSxHQUFHLENBQUMsa0JBQWtCLENBQUMsT0FBTztZQUNsRCxxQkFBcUIsRUFBRTtnQkFDckIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2dCQUM5QixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7YUFDakM7WUFDRCxtQkFBbUIsRUFBRTtnQkFDbkIsdUJBQXVCLEVBQUU7b0JBQ3ZCLGdCQUFnQixFQUFFLGdCQUFnQjtvQkFDbEMsYUFBYSxFQUFFLGFBQWE7aUJBQzdCO2dCQUNELGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYzthQUNyQztZQUNELFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztTQUMzQixDQUFDLENBQUM7UUFFSCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDOztBQXZGSCx3Q0F3RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBldmVudHMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHNcIjtcbmltcG9ydCAqIGFzIGV2ZW50c1RhcmdldHMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0c1wiO1xuaW1wb3J0ICogYXMga21zIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mta21zXCI7XG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgKiBhcyBzZm4gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zXCI7XG5pbXBvcnQgKiBhcyB0YXNrcyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3NcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBTdGF0ZU1hY2hpbmVTdGFnZSwgU3RhdGVNYWNoaW5lU3RhZ2VQcm9wcyB9IGZyb20gXCIuLi9waXBlbGluZXMvc3RhZ2VcIjtcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBgQXRoZW5hU1FMU3RhZ2VgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF0aGVuYVRvU1FMU3RhZ2VQcm9wcyBleHRlbmRzIFN0YXRlTWFjaGluZVN0YWdlUHJvcHMge1xuICAvKipcbiAgICogU1FMIHF1ZXJpZXMgdGhhdCB3aWxsIGJlIHN0YXJ0ZWQuXG4gICAqL1xuICByZWFkb25seSBxdWVyeVN0cmluZz86IEFycmF5PHN0cmluZz47XG4gIC8qKlxuICAgKiBkeW5hbWljIHBhdGggaW4gc3RhdGVtYWNoaW5lIGZvciBTUUwgcXVlcnkgdG8gYmUgc3RhcnRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHF1ZXJ5U3RyaW5nUGF0aD86IHN0cmluZztcbiAgLyoqXG4gICAqIGZsYWcgdG8gZGV0ZXJtaW5lIHBhcmFsbGVsIG9yIHNlcXVlbnRpYWwgZXhlY3V0aW9uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwYXJhbGxlbD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBdGhlbmEgd29ya2dyb3VwIG5hbWUuXG4gICAqL1xuICByZWFkb25seSB3b3JrR3JvdXA/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDYXRhbG9nIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBjYXRhbG9nTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIERhdGFiYXNlIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZU5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPdXRwdXQgUzMgbG9jYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dExvY2F0aW9uPzogczMuTG9jYXRpb247XG4gIC8qKlxuICAgKiBFbmNyeXB0aW9uIEtNUyBrZXkuXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5Pzoga21zLktleTtcbiAgLyoqXG4gICAqIEVuY3J5cHRpb24gY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25PcHRpb24/OiB0YXNrcy5FbmNyeXB0aW9uT3B0aW9uO1xufVxuXG4vKipcbiAqIFN0YWdlIHRoYXQgY29udGFpbnMgYSBzdGVwIGZ1bmN0aW9uIHRoYXQgZXhlY3V0ZSBBdGhlbmEgU1FMIHF1ZXJ5LlxuICovXG5leHBvcnQgY2xhc3MgQXRoZW5hU1FMU3RhZ2UgZXh0ZW5kcyBTdGF0ZU1hY2hpbmVTdGFnZSB7XG4gIHJlYWRvbmx5IHRhcmdldHM/OiBldmVudHMuSVJ1bGVUYXJnZXRbXTtcbiAgcmVhZG9ubHkgZXZlbnRQYXR0ZXJuPzogZXZlbnRzLkV2ZW50UGF0dGVybjtcbiAgcmVhZG9ubHkgc3RhdGVNYWNoaW5lOiBzZm4uU3RhdGVNYWNoaW5lO1xuICByZWFkb25seSBzdGF0ZU1hY2hpbmVJbnB1dD86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gIHJlYWRvbmx5IGV2ZW50QnJpZGdlRXZlbnRQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGBBdGhlbmFTUUxTdGFnZWAuXG4gICAqIEBwYXJhbSBzY29wZSBTY29wZSB3aXRoaW4gd2hpY2ggdGhpcyBjb25zdHJ1Y3QgaXMgZGVmaW5lZC5cbiAgICogQHBhcmFtIGlkIElkZW50aWZpZXIgb2YgdGhlIHN0YWdlLlxuICAgKiBAcGFyYW0gcHJvcHMgUHJvcGVydGllcyBmb3IgdGhlIHN0YWdlLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEF0aGVuYVRvU1FMU3RhZ2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZU1hY2hpbmVJbnB1dCA9IHByb3BzLnN0YXRlTWFjaGluZUlucHV0O1xuXG4gICAgaWYgKHByb3BzLnF1ZXJ5U3RyaW5nICYmIHByb3BzLnF1ZXJ5U3RyaW5nUGF0aCkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKFwiRm9yIHRoaXMgc3RhZ2UgcHJvdmlkZSBvbmUgb2YgcXVlcnlTdHJpbmcgb3IgcXVlcnlTdHJpbmdQYXRoIHBhcmFtZXRlciwgbm90IGJvdGhcIik7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nSW5wdXQgPSBwcm9wcy5xdWVyeVN0cmluZ1BhdGggPyBzZm4uSnNvblBhdGguc3RyaW5nQXQocHJvcHMucXVlcnlTdHJpbmdQYXRoKSA6IHByb3BzLnF1ZXJ5U3RyaW5nO1xuICAgIGlmICghcXVlcnlTdHJpbmdJbnB1dCkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKFwiRm9yIHRoaXMgc3RhZ2Ugb25lIG9mIHF1ZXJ5U3RyaW5nIG9yIHF1ZXJ5U3RyaW5nUGF0aCBwYXJhbWV0ZXIgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgdmFyIGNudCA9IDA7XG4gICAgaWYgKHByb3BzLnF1ZXJ5U3RyaW5nKSB7XG4gICAgICBpZiAocHJvcHMucGFyYWxsZWwpIHtcbiAgICAgICAgdmFyIGF0aGVuYVF1ZXJ5RXhlYzogYW55ID0gbmV3IHNmbi5QYXJhbGxlbCh0aGlzLCBcIkFsbCBKb2JzXCIpO1xuICAgICAgICBmb3IgKHZhciBxdWVyeSBvZiBxdWVyeVN0cmluZ0lucHV0KSB7XG4gICAgICAgICAgY29uc3QgYWRkU3RlcCA9IHRoaXMuZ2V0QXRoZW5hU3RhcnRRdWVyeUV4ZWN1dGlvblN0ZXAocXVlcnksIHByb3BzLCBjbnQpO1xuICAgICAgICAgIHZhciBhdGhlbmFRdWVyeUV4ZWMgPSBhdGhlbmFRdWVyeUV4ZWMuYnJhbmNoKGFkZFN0ZXApO1xuICAgICAgICAgIGNudCA9IGNudCArIDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBhdGhlbmFRdWVyeUV4ZWM6IGFueSA9IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yICh2YXIgcXVlcnkgb2YgcXVlcnlTdHJpbmdJbnB1dCkge1xuICAgICAgICAgIGNvbnN0IGFkZFN0ZXAgPSB0aGlzLmdldEF0aGVuYVN0YXJ0UXVlcnlFeGVjdXRpb25TdGVwKHF1ZXJ5LCBwcm9wcywgY250KTtcbiAgICAgICAgICB2YXIgYXRoZW5hUXVlcnlFeGVjID0gYXRoZW5hUXVlcnlFeGVjID8gYXRoZW5hUXVlcnlFeGVjLm5leHQoYWRkU3RlcCkgOiBhZGRTdGVwO1xuICAgICAgICAgIGNudCA9IGNudCArIDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGF0aGVuYVF1ZXJ5RXhlYzogYW55ID0gdGhpcy5nZXRBdGhlbmFTdGFydFF1ZXJ5RXhlY3V0aW9uU3RlcChxdWVyeVN0cmluZ0lucHV0LCBwcm9wcywgY250KTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZpbml0aW9uID0gYXRoZW5hUXVlcnlFeGVjLm5leHQobmV3IHNmbi5TdWNjZWVkKHRoaXMsIFwiU3VjY2Vzc1wiKSk7XG5cbiAgICAoeyBldmVudFBhdHRlcm46IHRoaXMuZXZlbnRQYXR0ZXJuLCBzdGF0ZU1hY2hpbmU6IHRoaXMuc3RhdGVNYWNoaW5lIH0gPSB0aGlzLmNyZWF0ZVN0YXRlTWFjaGluZSh7XG4gICAgICBkZWZpbml0aW9uOiBkZWZpbml0aW9uLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSkpO1xuICAgIHRoaXMudGFyZ2V0cyA9IFtcbiAgICAgIG5ldyBldmVudHNUYXJnZXRzLlNmblN0YXRlTWFjaGluZSh0aGlzLnN0YXRlTWFjaGluZSwge1xuICAgICAgICBpbnB1dDogcHJvcHMucXVlcnlTdHJpbmdcbiAgICAgICAgICA/IGV2ZW50cy5SdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdCh0aGlzLnN0YXRlTWFjaGluZUlucHV0KVxuICAgICAgICAgIDogZXZlbnRzLlJ1bGVUYXJnZXRJbnB1dC5mcm9tRXZlbnRQYXRoKFwiJC5kZXRhaWxcIiksXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdGhlbmFTdGFydFF1ZXJ5RXhlY3V0aW9uU3RlcChcbiAgICBxdWVyeVN0cmluZ0lucHV0OiBhbnksXG4gICAgcHJvcHM6IEF0aGVuYVRvU1FMU3RhZ2VQcm9wcyxcbiAgICBjbnQ6IG51bWJlcixcbiAgKTogdGFza3MuQXRoZW5hU3RhcnRRdWVyeUV4ZWN1dGlvbiB7XG4gICAgY29uc3QgZW5jcnlwdGlvbk9wdGlvbiA9IHByb3BzLmVuY3J5cHRpb25PcHRpb24gPz8gdGFza3MuRW5jcnlwdGlvbk9wdGlvbi5TM19NQU5BR0VEO1xuICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBwcm9wcy5lbmNyeXB0aW9uS2V5O1xuICAgIGNvbnN0IHN0YXJ0UXVlcnlFeGVjID0gbmV3IHRhc2tzLkF0aGVuYVN0YXJ0UXVlcnlFeGVjdXRpb24odGhpcywgYFF1ZXJ5IEV4ZWMgJHtjbnR9YCwge1xuICAgICAgcXVlcnlTdHJpbmc6IHF1ZXJ5U3RyaW5nSW5wdXQsXG4gICAgICBpbnRlZ3JhdGlvblBhdHRlcm46IHNmbi5JbnRlZ3JhdGlvblBhdHRlcm4uUlVOX0pPQixcbiAgICAgIHF1ZXJ5RXhlY3V0aW9uQ29udGV4dDoge1xuICAgICAgICBjYXRhbG9nTmFtZTogcHJvcHMuY2F0YWxvZ05hbWUsXG4gICAgICAgIGRhdGFiYXNlTmFtZTogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgfSxcbiAgICAgIHJlc3VsdENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgZW5jcnlwdGlvbkNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBlbmNyeXB0aW9uT3B0aW9uOiBlbmNyeXB0aW9uT3B0aW9uLFxuICAgICAgICAgIGVuY3J5cHRpb25LZXk6IGVuY3J5cHRpb25LZXksXG4gICAgICAgIH0sXG4gICAgICAgIG91dHB1dExvY2F0aW9uOiBwcm9wcy5vdXRwdXRMb2NhdGlvbixcbiAgICAgIH0sXG4gICAgICB3b3JrR3JvdXA6IHByb3BzLndvcmtHcm91cCxcbiAgICB9KTtcblxuICAgIHJldHVybiBzdGFydFF1ZXJ5RXhlYztcbiAgfVxufVxuIl19