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
JavaScript
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
;