rds-database-auto-start-preventer 0.2.5 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +7 -6
- package/README.md +3 -3
- package/assets/funcs/auto-start-prevent.lambda/index.js +720 -219
- package/assets/funcs/auto-start-prevent.lambda/index.js.map +4 -4
- package/lib/constructs/rds-database-auto-start-preventer.d.ts +2 -1
- package/lib/constructs/rds-database-auto-start-preventer.js +5 -3
- package/lib/funcs/auto-start-prevent.lambda.d.ts +7 -4
- package/lib/funcs/auto-start-prevent.lambda.js +45 -169
- package/lib/funcs/auto-start-prevent.predicates.d.ts +251 -0
- package/lib/funcs/auto-start-prevent.predicates.js +253 -0
- package/lib/stacks/rds-database-auto-start-prevent-stack.js +1 -1
- package/package.json +9 -9
|
@@ -41,7 +41,8 @@ export declare class RDSDatabaseAutoStartPreventer extends Construct {
|
|
|
41
41
|
* Creates the Durable Lambda, EventBridge rules, and IAM policies.
|
|
42
42
|
*
|
|
43
43
|
* The Lambda receives `{ event, params }` where `params` carries `tagKey` and `tagValues`
|
|
44
|
-
* from {@link RDSDatabaseAutoStartPreventerProps.targetResource}.
|
|
44
|
+
* from {@link RDSDatabaseAutoStartPreventerProps.targetResource}. Tag filters are passed
|
|
45
|
+
* only via that payload (not via `TAG_KEY` / `TAG_VALUES` environment variables).
|
|
45
46
|
*
|
|
46
47
|
* @param scope - Parent construct.
|
|
47
48
|
* @param id - Construct id.
|
|
@@ -53,12 +53,13 @@ const auto_start_prevent_function_1 = require("../funcs/auto-start-prevent-funct
|
|
|
53
53
|
* IAM grants RDS describe and stop actions only (no Resource Groups Tagging API).
|
|
54
54
|
*/
|
|
55
55
|
class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
|
|
56
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "rds-database-auto-start-preventer.RDSDatabaseAutoStartPreventer", version: "0.
|
|
56
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "rds-database-auto-start-preventer.RDSDatabaseAutoStartPreventer", version: "0.3.0" };
|
|
57
57
|
/**
|
|
58
58
|
* Creates the Durable Lambda, EventBridge rules, and IAM policies.
|
|
59
59
|
*
|
|
60
60
|
* The Lambda receives `{ event, params }` where `params` carries `tagKey` and `tagValues`
|
|
61
|
-
* from {@link RDSDatabaseAutoStartPreventerProps.targetResource}.
|
|
61
|
+
* from {@link RDSDatabaseAutoStartPreventerProps.targetResource}. Tag filters are passed
|
|
62
|
+
* only via that payload (not via `TAG_KEY` / `TAG_VALUES` environment variables).
|
|
62
63
|
*
|
|
63
64
|
* @param scope - Parent construct.
|
|
64
65
|
* @param id - Construct id.
|
|
@@ -82,6 +83,7 @@ class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
|
|
|
82
83
|
environment: {
|
|
83
84
|
SLACK_SECRET_NAME: slackSecret.secretName,
|
|
84
85
|
},
|
|
86
|
+
// Required by aws-lambda-secret-fetcher (^0.6+): Extension HTTP API + AWS_SESSION_TOKEN.
|
|
85
87
|
paramsAndSecrets: lambda.ParamsAndSecretsLayerVersion.fromVersion(lambda.ParamsAndSecretsVersions.V1_0_103, {
|
|
86
88
|
cacheSize: 500,
|
|
87
89
|
logLevel: lambda.ParamsAndSecretsLogLevel.INFO,
|
|
@@ -168,4 +170,4 @@ class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
|
|
|
168
170
|
}
|
|
169
171
|
}
|
|
170
172
|
exports.RDSDatabaseAutoStartPreventer = RDSDatabaseAutoStartPreventer;
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBc0Q7QUFDdEQsK0RBQWlEO0FBQ2pELHdFQUEwRDtBQUMxRCx5REFBMkM7QUFDM0MsK0RBQWlEO0FBQ2pELDJEQUE2QztBQUM3Qyx1RUFBd0Q7QUFDeEQsMkNBQXVDO0FBQ3ZDLHNGQUFnRjtBQWtDaEY7Ozs7Ozs7R0FPRztBQUNILE1BQWEsNkJBQThCLFNBQVEsc0JBQVM7O0lBRTFEOzs7Ozs7Ozs7T0FTRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBeUM7UUFDakYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFdBQVcsR0FBRywyQkFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVoRyxtR0FBbUc7UUFDbkcsMENBQTBDO1FBQzFDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxzREFBd0IsQ0FBQyxJQUFJLEVBQUUsMEJBQTBCLEVBQUU7WUFDOUYsV0FBVyxFQUFFLGdGQUFnRjtZQUM3RixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQ3hDLE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDN0IsVUFBVSxFQUFFLEdBQUc7WUFDZixhQUFhLEVBQUUsQ0FBQztZQUNoQixhQUFhLEVBQUU7Z0JBQ2IsZ0JBQWdCLEVBQUUsc0JBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNuQyxlQUFlLEVBQUUsc0JBQVEsQ0FBQyxJ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QUNGO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyw2QkFBNkIsRUFBRTtvQkFDeEQsYUFBYSxFQUFFLENBQUM7b0JBQ2hCLEtBQUssRUFBRSxXQUFXO2lCQUNuQixDQUFDO2FBQ0g7U0FDRixDQUFDLENBQUM7UUFFSCxvREFBb0Q7UUFDcEQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUN0QyxXQUFXLEVBQUUsd0NBQXdDO1lBQ3JELE9BQU8sRUFBRSxVQUFVO1lBQ25CLFlBQVksRUFBRTtnQkFDWixNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBQ25CLFVBQVUsRUFBRSxDQUFDLHNCQUFzQixDQUFDO2dCQUNwQyxNQUFNLEVBQUU7b0JBQ04sT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQzVCO2FBQ0Y7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLDZCQUE2QixFQUFFO29CQUN4RCxhQUFhLEVBQUUsQ0FBQztvQkFDaEIsS0FBSyxFQUFFLFdBQVc7aUJBQ25CLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBeEhILHNFQXlIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uLCBSZW1vdmFsUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgZXZlbnRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0ICogYXMgdGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBBdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24gfSBmcm9tICcuLi9mdW5jcy9hdXRvLXN0YXJ0LXByZXZlbnQtZnVuY3Rpb24nO1xuXG4vKipcbiAqIFRhZy1iYXNlZCBjcml0ZXJpYSBldmFsdWF0ZWQgaW4gdGhlIExhbWJkYSBoYW5kbGVyIChub3Qgb24gdGhlIEV2ZW50QnJpZGdlIHJ1bGUpLlxuICogUmVzb3VyY2VzIHdob3NlIHRhZyB2YWx1ZSBmb3Ige0BsaW5rIFRhcmdldFJlc291cmNlLnRhZ0tleX0gaXMgbm90IGluXG4gKiB7QGxpbmsgVGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzfSBhcmUgc2tpcHBlZCB3aXRob3V0IGNhbGxpbmcgU3RvcERCKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYXJnZXRSZXNvdXJjZSB7XG4gIC8qKiBUYWcga2V5IHRvIG1hdGNoIChlLmcuIFwiRW52aXJvbm1lbnRcIiwgXCJBdXRvU3RhcnRQcmV2ZW50XCIpLiAqL1xuICByZWFkb25seSB0YWdLZXk6IHN0cmluZztcbiAgLyoqIFRhZyB2YWx1ZXMgdGhhdCBpbmRpY2F0ZSB0aGUgcmVzb3VyY2Ugc2hvdWxkIGJlIHByb3RlY3RlZCAoZS5nLiBbXCJwcm9kdWN0aW9uXCJdKS4gKi9cbiAgcmVhZG9ubHkgdGFnVmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBFeHRlcm5hbCBzZWNyZXRzIHJlcXVpcmVkIGZvciBub3RpZmljYXRpb25zIChlLmcuIFNsYWNrKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRzIHtcbiAgLyoqIE5hbWUgb2YgdGhlIFNlY3JldHMgTWFuYWdlciBzZWNyZXQgY29udGFpbmluZyBTbGFjayB0b2tlbiBhbmQgY2hhbm5lbC4gKi9cbiAgcmVhZG9ubHkgc2xhY2tTZWNyZXROYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBSRFMgZGF0YWJhc2UgYXV0by1zdGFydCBwcmV2ZW50ZXIgY29uc3RydWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyUHJvcHMge1xuICAvKiogVGFnLWJhc2VkIHRhcmdldCByZXNvdXJjZSBjcml0ZXJpYSBmb3IgUkRTIGluc3RhbmNlcy9jbHVzdGVycyB0byBwcm90ZWN0LiAqL1xuICByZWFkb25seSB0YXJnZXRSZXNvdXJjZTogVGFyZ2V0UmVzb3VyY2U7XG4gIC8qKiBXaGV0aGVyIHRoZSBFdmVudEJyaWRnZSBydWxlcyBhcmUgZW5hYmxlZC4gRGVmYXVsdHMgdG8gdHJ1ZSBpZiBvbWl0dGVkLiAqL1xuICByZWFkb25seSBlbmFibGVSdWxlPzogYm9vbGVhbjtcbiAgLyoqIFNlY3JldHMgdXNlZCBmb3Igbm90aWZpY2F0aW9ucyAoZS5nLiBTbGFjaykuICovXG4gIHJlYWRvbmx5IHNlY3JldHM6IFNlY3JldHM7XG59XG5cbi8qKlxuICogRGVwbG95cyBFdmVudEJyaWRnZSBydWxlcyBhbmQgYSBEdXJhYmxlIExhbWJkYSB0byBzdG9wIG1hdGNoaW5nIFJEUyByZXNvdXJjZXNcbiAqIGFmdGVyIGF1dG8tc3RhcnQgZXZlbnRzIChSRFMtRVZFTlQtMDE1NCAvIFJEUy1FVkVOVC0wMTUzKS5cbiAqXG4gKiBFdmVudEJyaWRnZSBydWxlcyBtYXRjaCBhbGwgYXV0by1zdGFydCBldmVudHM7IHRhZyBmaWx0ZXJpbmcgcnVucyBpbiB0aGUgaGFuZGxlclxuICogdXNpbmcgYFRhZ0xpc3RgIGZyb20gYHJkczpEZXNjcmliZURCSW5zdGFuY2VzYCAvIGByZHM6RGVzY3JpYmVEQkNsdXN0ZXJzYC5cbiAqIElBTSBncmFudHMgUkRTIGRlc2NyaWJlIGFuZCBzdG9wIGFjdGlvbnMgb25seSAobm8gUmVzb3VyY2UgR3JvdXBzIFRhZ2dpbmcgQVBJKS5cbiAqL1xuZXhwb3J0IGNsYXNzIFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgRHVyYWJsZSBMYW1iZGEsIEV2ZW50QnJpZGdlIHJ1bGVzLCBhbmQgSUFNIHBvbGljaWVzLlxuICAgKlxuICAgKiBUaGUgTGFtYmRhIHJlY2VpdmVzIGB7IGV2ZW50LCBwYXJhbXMgfWAgd2hlcmUgYHBhcmFtc2AgY2FycmllcyBgdGFnS2V5YCBhbmQgYHRhZ1ZhbHVlc2BcbiAgICogZnJvbSB7QGxpbmsgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXJQcm9wcy50YXJnZXRSZXNvdXJjZX0uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFBhcmVudCBjb25zdHJ1Y3QuXG4gICAqIEBwYXJhbSBpZCAtIENvbnN0cnVjdCBpZC5cbiAgICogQHBhcmFtIHByb3BzIC0gVGFyZ2V0IHJlc291cmNlICh0YWcga2V5L3ZhbHVlcyksIGVuYWJsZSBydWxlIGZsYWcsIGFuZCBzZWNyZXRzLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3Qgc2xhY2tTZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMih0aGlzLCAnU2xhY2tTZWNyZXQnLCBwcm9wcy5zZWNyZXRzLnNsYWNrU2VjcmV0TmFtZSk7XG5cbiAgICAvLyBEdXJhYmxlIEZ1bmN0aW9ucy1iYXNlZCBSdW5uaW5nIFNjaGVkdWxlciAocHJldmlvdXMgU3RlcCBGdW5jdGlvbnMgbG9naWMgaW1wbGVtZW50ZWQgaW4gTGFtYmRhKS5cbiAgICAvLyBEdXJhYmxlIEV4ZWN1dGlvbiByZXF1aXJlcyBOb2RlLmpzIDIyKy5cbiAgICBjb25zdCBhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24gPSBuZXcgQXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uKHRoaXMsICdBdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24nLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0EgZnVuY3Rpb24gdG8gcHJldmVudCB0aGUgUkRTIERhdGFiYXNlIG9yIENsdXN0ZXIgZnJvbSBzdGFydGluZyBhdXRvbWF0aWNhbGx5LicsXG4gICAgICBhcmNoaXRlY3R1cmU6IGxhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICByZXRyeUF0dGVtcHRzOiAyLFxuICAgICAgZHVyYWJsZUNvbmZpZzoge1xuICAgICAgICBleGVjdXRpb25UaW1lb3V0OiBEdXJhdGlvbi5ob3VycygyKSxcbiAgICAgICAgcmV0ZW50aW9uUGVyaW9kOiBEdXJhdGlvbi5kYXlzKDEpLFxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFNMQUNLX1NFQ1JFVF9OQU1FOiBzbGFja1NlY3JldC5zZWNyZXROYW1lLFxuICAgICAgfSxcbiAgICAgIHBhcmFtc0FuZFNlY3JldHM6IGxhbWJkYS5QYXJhbXNBbmRTZWNyZXRzTGF5ZXJWZXJzaW9uLmZyb21WZXJzaW9uKGxhbWJkYS5QYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMuVjFfMF8xMDMsIHtcbiAgICAgICAgY2FjaGVTaXplOiA1MDAsXG4gICAgICAgIGxvZ0xldmVsOiBsYW1iZGEuUGFyYW1zQW5kU2VjcmV0c0xvZ0xldmVsLklORk8sXG4gICAgICB9KSxcbiAgICAgIHJvbGU6IG5ldyBpYW0uUm9sZSh0aGlzLCAnQXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uUm9sZScsIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdBIHJvbGUgdG8gY29udHJvbCB0aGUgUkRTIERhdGFiYXNlIG9yIENsdXN0ZXIuJyxcbiAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2xhbWJkYS5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZScpLFxuICAgICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRHVyYWJsZUV4ZWN1dGlvblJvbGVQb2xpY3knKSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICAgbG9nR3JvdXA6IG5ldyBsb2dzLkxvZ0dyb3VwKHRoaXMsICdBdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25Mb2dHcm91cCcsIHtcbiAgICAgICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuVEhSRUVfTU9OVEhTLFxuICAgICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICB9KSxcbiAgICAgIGxvZ2dpbmdGb3JtYXQ6IGxhbWJkYS5Mb2dnaW5nRm9ybWF0LkpTT04sXG4gICAgICBzeXN0ZW1Mb2dMZXZlbFYyOiBsYW1iZGEuU3lzdGVtTG9nTGV2ZWwuSU5GTyxcbiAgICAgIGFwcGxpY2F0aW9uTG9nTGV2ZWxWMjogbGFtYmRhLkFwcGxpY2F0aW9uTG9nTGV2ZWwuSU5GTyxcbiAgICB9KTtcbiAgICAvLyBHcmFudCBSRFMgZGVzY3JpYmUgKHN0YXR1cyBhbmQgVGFnTGlzdCkgYW5kIHN0b3AgcGVybWlzc2lvbnMgdG8gdGhlIGhhbmRsZXIgcm9sZS5cbiAgICBhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ1Jkc0F1dG9TdGFydENvbnRyb2wnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAncmRzOkRlc2NyaWJlREJJbnN0YW5jZXMnLFxuICAgICAgICAncmRzOkRlc2NyaWJlREJDbHVzdGVycycsXG4gICAgICAgICdyZHM6U3RvcERCSW5zdGFuY2UnLFxuICAgICAgICAncmRzOlN0b3BEQkNsdXN0ZXInLFxuICAgICAgXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuICAgIC8vIEdyYW50IHJlYWQgYWNjZXNzIHRvIHRoZSBTbGFjayBzZWNyZXRcbiAgICBzbGFja1NlY3JldC5ncmFudFJlYWQoYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uKTtcblxuICAgIC8vIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2xhbWJkYS9sYXRlc3QvZGcvZHVyYWJsZS1nZXR0aW5nLXN0YXJ0ZWQtaWFjLmh0bWxcbiAgICBjb25zdCBhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25BbGlhcyA9IGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbi5hZGRBbGlhcygnbGl2ZScpO1xuXG4gICAgY29uc3QgZW5hYmxlUnVsZTogYm9vbGVhbiA9ICgoKSA9PiB7XG4gICAgICByZXR1cm4gcHJvcHMuZW5hYmxlUnVsZSA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmVuYWJsZVJ1bGU7XG4gICAgfSkoKTtcblxuICAgIC8vIFBhc3MgdGhlIEV2ZW50QnJpZGdlIGV2ZW50IGFuZCB0YWcgZmlsdGVyIHBhcmFtcyB0byB0aGUgTGFtYmRhIHRhcmdldCBpbnB1dC5cbiAgICBjb25zdCBsYW1iZGFJbnB1dCA9IGV2ZW50cy5SdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICBldmVudDogZXZlbnRzLkV2ZW50RmllbGQuZnJvbVBhdGgoJyQnKSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICB0YWdLZXk6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ0tleSxcbiAgICAgICAgdGFnVmFsdWVzOiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdWYWx1ZXMsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8g8J+RhyBFdmVudEJyaWRnZSBieSBSRFMgREIgSW5zdGFuY2UgYXV0byBzdGFydCBldmVudFxuICAgIG5ldyBldmVudHMuUnVsZSh0aGlzLCAnREJJbnN0YW5jZUV2ZW50Jywge1xuICAgICAgZGVzY3JpcHRpb246ICdyZHMgZGIgaW5zdGFuY2UgYXV0byBzdGFydCBldmVudCBjYXRjaCBydWxlLicsXG4gICAgICBlbmFibGVkOiBlbmFibGVSdWxlLFxuICAgICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICAgIHNvdXJjZTogWydhd3MucmRzJ10sXG4gICAgICAgIGRldGFpbFR5cGU6IFsnUkRTIERCIEluc3RhbmNlIEV2ZW50J10sXG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIEV2ZW50SUQ6IFsnUkRTLUVWRU5ULTAxNTQnXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0YXJnZXRzOiBbXG4gICAgICAgIG5ldyB0YXJnZXRzLkxhbWJkYUZ1bmN0aW9uKGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbkFsaWFzLCB7XG4gICAgICAgICAgcmV0cnlBdHRlbXB0czogMixcbiAgICAgICAgICBldmVudDogbGFtYmRhSW5wdXQsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIPCfkYcgRXZlbnRCcmlkZ2UgYnkgUkRTIERCIENsdXN0ZXIgYXV0byBzdGFydCBldmVudFxuICAgIG5ldyBldmVudHMuUnVsZSh0aGlzLCAnREJDbHVzdGVyRXZlbnQnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ2RiIGNsdXN0ZXIgYXV0byBzdGFydCBldmVudCBjYXRjaCBydWxlJyxcbiAgICAgIGVuYWJsZWQ6IGVuYWJsZVJ1bGUsXG4gICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgc291cmNlOiBbJ2F3cy5yZHMnXSxcbiAgICAgICAgZGV0YWlsVHlwZTogWydSRFMgREIgQ2x1c3RlciBFdmVudCddLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBFdmVudElEOiBbJ1JEUy1FVkVOVC0wMTUzJ10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdGFyZ2V0czogW1xuICAgICAgICBuZXcgdGFyZ2V0cy5MYW1iZGFGdW5jdGlvbihhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25BbGlhcywge1xuICAgICAgICAgIHJldHJ5QXR0ZW1wdHM6IDIsXG4gICAgICAgICAgZXZlbnQ6IGxhbWJkYUlucHV0LFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBc0Q7QUFDdEQsK0RBQWlEO0FBQ2pELHdFQUEwRDtBQUMxRCx5REFBMkM7QUFDM0MsK0RBQWlEO0FBQ2pELDJEQUE2QztBQUM3Qyx1RUFBd0Q7QUFDeEQsMkNBQXVDO0FBQ3ZDLHNGQUFnRjtBQWtDaEY7Ozs7Ozs7R0FPRztBQUNILE1BQWEsNkJBQThCLFNBQVEsc0JBQVM7O0lBRTFEOzs7Ozs7Ozs7O09BVUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlDO1FBQ2pGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxXQUFXLEdBQUcsMkJBQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFaEcsbUdBQW1HO1FBQ25HLDBDQUEwQztRQUMxQyxNQUFNLHdCQUF3QixHQUFHLElBQUksc0RBQXdCLENBQUMsSUFBSSxFQUFFLDBCQUEwQixFQUFFO1lBQzlGLFdBQVcsRUFBRSxnRkFBZ0Y7WUFDN0YsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTTtZQUN4QyxPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzdCLFVBQVUsRUFBRSxHQUFHO1lBQ2YsYUFBYSxFQUFFLENBQUM7WUFDaEIsYUFBYSxFQUFFO2dCQUNiLGdCQUFnQixFQUFFLHNCQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDbkMsZUFBZSxFQUFFLHNCQUFRLENBQUMs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LENBQUM7aUJBQzVCO2FBQ0Y7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLDZCQUE2QixFQUFFO29CQUN4RCxhQUFhLEVBQUUsQ0FBQztvQkFDaEIsS0FBSyxFQUFFLFdBQVc7aUJBQ25CLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztRQUVILG9EQUFvRDtRQUNwRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ3RDLFdBQVcsRUFBRSx3Q0FBd0M7WUFDckQsT0FBTyxFQUFFLFVBQVU7WUFDbkIsWUFBWSxFQUFFO2dCQUNaLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQztnQkFDbkIsVUFBVSxFQUFFLENBQUMsc0JBQXNCLENBQUM7Z0JBQ3BDLE1BQU0sRUFBRTtvQkFDTixPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDNUI7YUFDRjtZQUNELE9BQU8sRUFBRTtnQkFDUCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsNkJBQTZCLEVBQUU7b0JBQ3hELGFBQWEsRUFBRSxDQUFDO29CQUNoQixLQUFLLEVBQUUsV0FBVztpQkFDbkIsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUExSEgsc0VBMkhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIFJlbW92YWxQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBldmVudHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgKiBhcyB0YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0cyc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IFNlY3JldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlcic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEF1dG9TdGFydFByZXZlbnRGdW5jdGlvbiB9IGZyb20gJy4uL2Z1bmNzL2F1dG8tc3RhcnQtcHJldmVudC1mdW5jdGlvbic7XG5cbi8qKlxuICogVGFnLWJhc2VkIGNyaXRlcmlhIGV2YWx1YXRlZCBpbiB0aGUgTGFtYmRhIGhhbmRsZXIgKG5vdCBvbiB0aGUgRXZlbnRCcmlkZ2UgcnVsZSkuXG4gKiBSZXNvdXJjZXMgd2hvc2UgdGFnIHZhbHVlIGZvciB7QGxpbmsgVGFyZ2V0UmVzb3VyY2UudGFnS2V5fSBpcyBub3QgaW5cbiAqIHtAbGluayBUYXJnZXRSZXNvdXJjZS50YWdWYWx1ZXN9IGFyZSBza2lwcGVkIHdpdGhvdXQgY2FsbGluZyBTdG9wREIqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldFJlc291cmNlIHtcbiAgLyoqIFRhZyBrZXkgdG8gbWF0Y2ggKGUuZy4gXCJFbnZpcm9ubWVudFwiLCBcIkF1dG9TdGFydFByZXZlbnRcIikuICovXG4gIHJlYWRvbmx5IHRhZ0tleTogc3RyaW5nO1xuICAvKiogVGFnIHZhbHVlcyB0aGF0IGluZGljYXRlIHRoZSByZXNvdXJjZSBzaG91bGQgYmUgcHJvdGVjdGVkIChlLmcuIFtcInByb2R1Y3Rpb25cIl0pLiAqL1xuICByZWFkb25seSB0YWdWYWx1ZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEV4dGVybmFsIHNlY3JldHMgcmVxdWlyZWQgZm9yIG5vdGlmaWNhdGlvbnMgKGUuZy4gU2xhY2spLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldHMge1xuICAvKiogTmFtZSBvZiB0aGUgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBjb250YWluaW5nIFNsYWNrIHRva2VuIGFuZCBjaGFubmVsLiAqL1xuICByZWFkb25seSBzbGFja1NlY3JldE5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFJEUyBkYXRhYmFzZSBhdXRvLXN0YXJ0IHByZXZlbnRlciBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXJQcm9wcyB7XG4gIC8qKiBUYWctYmFzZWQgdGFyZ2V0IHJlc291cmNlIGNyaXRlcmlhIGZvciBSRFMgaW5zdGFuY2VzL2NsdXN0ZXJzIHRvIHByb3RlY3QuICovXG4gIHJlYWRvbmx5IHRhcmdldFJlc291cmNlOiBUYXJnZXRSZXNvdXJjZTtcbiAgLyoqIFdoZXRoZXIgdGhlIEV2ZW50QnJpZGdlIHJ1bGVzIGFyZSBlbmFibGVkLiBEZWZhdWx0cyB0byB0cnVlIGlmIG9taXR0ZWQuICovXG4gIHJlYWRvbmx5IGVuYWJsZVJ1bGU/OiBib29sZWFuO1xuICAvKiogU2VjcmV0cyB1c2VkIGZvciBub3RpZmljYXRpb25zIChlLmcuIFNsYWNrKS4gKi9cbiAgcmVhZG9ubHkgc2VjcmV0czogU2VjcmV0cztcbn1cblxuLyoqXG4gKiBEZXBsb3lzIEV2ZW50QnJpZGdlIHJ1bGVzIGFuZCBhIER1cmFibGUgTGFtYmRhIHRvIHN0b3AgbWF0Y2hpbmcgUkRTIHJlc291cmNlc1xuICogYWZ0ZXIgYXV0by1zdGFydCBldmVudHMgKFJEUy1FVkVOVC0wMTU0IC8gUkRTLUVWRU5ULTAxNTMpLlxuICpcbiAqIEV2ZW50QnJpZGdlIHJ1bGVzIG1hdGNoIGFsbCBhdXRvLXN0YXJ0IGV2ZW50czsgdGFnIGZpbHRlcmluZyBydW5zIGluIHRoZSBoYW5kbGVyXG4gKiB1c2luZyBgVGFnTGlzdGAgZnJvbSBgcmRzOkRlc2NyaWJlREJJbnN0YW5jZXNgIC8gYHJkczpEZXNjcmliZURCQ2x1c3RlcnNgLlxuICogSUFNIGdyYW50cyBSRFMgZGVzY3JpYmUgYW5kIHN0b3AgYWN0aW9ucyBvbmx5IChubyBSZXNvdXJjZSBHcm91cHMgVGFnZ2luZyBBUEkpLlxuICovXG5leHBvcnQgY2xhc3MgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBEdXJhYmxlIExhbWJkYSwgRXZlbnRCcmlkZ2UgcnVsZXMsIGFuZCBJQU0gcG9saWNpZXMuXG4gICAqXG4gICAqIFRoZSBMYW1iZGEgcmVjZWl2ZXMgYHsgZXZlbnQsIHBhcmFtcyB9YCB3aGVyZSBgcGFyYW1zYCBjYXJyaWVzIGB0YWdLZXlgIGFuZCBgdGFnVmFsdWVzYFxuICAgKiBmcm9tIHtAbGluayBSRFNEYXRhYmFzZUF1dG9TdGFydFByZXZlbnRlclByb3BzLnRhcmdldFJlc291cmNlfS4gVGFnIGZpbHRlcnMgYXJlIHBhc3NlZFxuICAgKiBvbmx5IHZpYSB0aGF0IHBheWxvYWQgKG5vdCB2aWEgYFRBR19LRVlgIC8gYFRBR19WQUxVRVNgIGVudmlyb25tZW50IHZhcmlhYmxlcykuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFBhcmVudCBjb25zdHJ1Y3QuXG4gICAqIEBwYXJhbSBpZCAtIENvbnN0cnVjdCBpZC5cbiAgICogQHBhcmFtIHByb3BzIC0gVGFyZ2V0IHJlc291cmNlICh0YWcga2V5L3ZhbHVlcyksIGVuYWJsZSBydWxlIGZsYWcsIGFuZCBzZWNyZXRzLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3Qgc2xhY2tTZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMih0aGlzLCAnU2xhY2tTZWNyZXQnLCBwcm9wcy5zZWNyZXRzLnNsYWNrU2VjcmV0TmFtZSk7XG5cbiAgICAvLyBEdXJhYmxlIEZ1bmN0aW9ucy1iYXNlZCBSdW5uaW5nIFNjaGVkdWxlciAocHJldmlvdXMgU3RlcCBGdW5jdGlvbnMgbG9naWMgaW1wbGVtZW50ZWQgaW4gTGFtYmRhKS5cbiAgICAvLyBEdXJhYmxlIEV4ZWN1dGlvbiByZXF1aXJlcyBOb2RlLmpzIDIyKy5cbiAgICBjb25zdCBhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24gPSBuZXcgQXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uKHRoaXMsICdBdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24nLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0EgZnVuY3Rpb24gdG8gcHJldmVudCB0aGUgUkRTIERhdGFiYXNlIG9yIENsdXN0ZXIgZnJvbSBzdGFydGluZyBhdXRvbWF0aWNhbGx5LicsXG4gICAgICBhcmNoaXRlY3R1cmU6IGxhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICByZXRyeUF0dGVtcHRzOiAyLFxuICAgICAgZHVyYWJsZUNvbmZpZzoge1xuICAgICAgICBleGVjdXRpb25UaW1lb3V0OiBEdXJhdGlvbi5ob3VycygyKSxcbiAgICAgICAgcmV0ZW50aW9uUGVyaW9kOiBEdXJhdGlvbi5kYXlzKDEpLFxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFNMQUNLX1NFQ1JFVF9OQU1FOiBzbGFja1NlY3JldC5zZWNyZXROYW1lLFxuICAgICAgfSxcbiAgICAgIC8vIFJlcXVpcmVkIGJ5IGF3cy1sYW1iZGEtc2VjcmV0LWZldGNoZXIgKF4wLjYrKTogRXh0ZW5zaW9uIEhUVFAgQVBJICsgQVdTX1NFU1NJT05fVE9LRU4uXG4gICAgICBwYXJhbXNBbmRTZWNyZXRzOiBsYW1iZGEuUGFyYW1zQW5kU2VjcmV0c0xheWVyVmVyc2lvbi5mcm9tVmVyc2lvbihsYW1iZGEuUGFyYW1zQW5kU2VjcmV0c1ZlcnNpb25zLlYxXzBfMTAzLCB7XG4gICAgICAgIGNhY2hlU2l6ZTogNTAwLFxuICAgICAgICBsb2dMZXZlbDogbGFtYmRhLlBhcmFtc0FuZFNlY3JldHNMb2dMZXZlbC5JTkZPLFxuICAgICAgfSksXG4gICAgICByb2xlOiBuZXcgaWFtLlJvbGUodGhpcywgJ0F1dG9TdGFydFByZXZlbnRGdW5jdGlvblJvbGUnLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQSByb2xlIHRvIGNvbnRyb2wgdGhlIFJEUyBEYXRhYmFzZSBvciBDbHVzdGVyLicsXG4gICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUnKSxcbiAgICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0R1cmFibGVFeGVjdXRpb25Sb2xlUG9saWN5JyksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICAgIGxvZ0dyb3VwOiBuZXcgbG9ncy5Mb2dHcm91cCh0aGlzLCAnQXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uTG9nR3JvdXAnLCB7XG4gICAgICAgIHJldGVudGlvbjogbG9ncy5SZXRlbnRpb25EYXlzLlRIUkVFX01PTlRIUyxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgfSksXG4gICAgICBsb2dnaW5nRm9ybWF0OiBsYW1iZGEuTG9nZ2luZ0Zvcm1hdC5KU09OLFxuICAgICAgc3lzdGVtTG9nTGV2ZWxWMjogbGFtYmRhLlN5c3RlbUxvZ0xldmVsLklORk8sXG4gICAgICBhcHBsaWNhdGlvbkxvZ0xldmVsVjI6IGxhbWJkYS5BcHBsaWNhdGlvbkxvZ0xldmVsLklORk8sXG4gICAgfSk7XG4gICAgLy8gR3JhbnQgUkRTIGRlc2NyaWJlIChzdGF0dXMgYW5kIFRhZ0xpc3QpIGFuZCBzdG9wIHBlcm1pc3Npb25zIHRvIHRoZSBoYW5kbGVyIHJvbGUuXG4gICAgYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdSZHNBdXRvU3RhcnRDb250cm9sJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgJ3JkczpEZXNjcmliZURCSW5zdGFuY2VzJyxcbiAgICAgICAgJ3JkczpEZXNjcmliZURCQ2x1c3RlcnMnLFxuICAgICAgICAncmRzOlN0b3BEQkluc3RhbmNlJyxcbiAgICAgICAgJ3JkczpTdG9wREJDbHVzdGVyJyxcbiAgICAgIF0sXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgIH0pKTtcbiAgICAvLyBHcmFudCByZWFkIGFjY2VzcyB0byB0aGUgU2xhY2sgc2VjcmV0XG4gICAgc2xhY2tTZWNyZXQuZ3JhbnRSZWFkKGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbik7XG5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL2R1cmFibGUtZ2V0dGluZy1zdGFydGVkLWlhYy5odG1sXG4gICAgY29uc3QgYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uQWxpYXMgPSBhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24uYWRkQWxpYXMoJ2xpdmUnKTtcblxuICAgIGNvbnN0IGVuYWJsZVJ1bGU6IGJvb2xlYW4gPSAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHByb3BzLmVuYWJsZVJ1bGUgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy5lbmFibGVSdWxlO1xuICAgIH0pKCk7XG5cbiAgICAvLyBQYXNzIHRoZSBFdmVudEJyaWRnZSBldmVudCBhbmQgdGFnIGZpbHRlciBwYXJhbXMgdG8gdGhlIExhbWJkYSB0YXJnZXQgaW5wdXQuXG4gICAgY29uc3QgbGFtYmRhSW5wdXQgPSBldmVudHMuUnVsZVRhcmdldElucHV0LmZyb21PYmplY3Qoe1xuICAgICAgZXZlbnQ6IGV2ZW50cy5FdmVudEZpZWxkLmZyb21QYXRoKCckJyksXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgdGFnS2V5OiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdLZXksXG4gICAgICAgIHRhZ1ZhbHVlczogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIPCfkYcgRXZlbnRCcmlkZ2UgYnkgUkRTIERCIEluc3RhbmNlIGF1dG8gc3RhcnQgZXZlbnRcbiAgICBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ0RCSW5zdGFuY2VFdmVudCcsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAncmRzIGRiIGluc3RhbmNlIGF1dG8gc3RhcnQgZXZlbnQgY2F0Y2ggcnVsZS4nLFxuICAgICAgZW5hYmxlZDogZW5hYmxlUnVsZSxcbiAgICAgIGV2ZW50UGF0dGVybjoge1xuICAgICAgICBzb3VyY2U6IFsnYXdzLnJkcyddLFxuICAgICAgICBkZXRhaWxUeXBlOiBbJ1JEUyBEQiBJbnN0YW5jZSBFdmVudCddLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBFdmVudElEOiBbJ1JEUy1FVkVOVC0wMTU0J10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdGFyZ2V0czogW1xuICAgICAgICBuZXcgdGFyZ2V0cy5MYW1iZGFGdW5jdGlvbihhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25BbGlhcywge1xuICAgICAgICAgIHJldHJ5QXR0ZW1wdHM6IDIsXG4gICAgICAgICAgZXZlbnQ6IGxhbWJkYUlucHV0LFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyDwn5GHIEV2ZW50QnJpZGdlIGJ5IFJEUyBEQiBDbHVzdGVyIGF1dG8gc3RhcnQgZXZlbnRcbiAgICBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ0RCQ2x1c3RlckV2ZW50Jywge1xuICAgICAgZGVzY3JpcHRpb246ICdkYiBjbHVzdGVyIGF1dG8gc3RhcnQgZXZlbnQgY2F0Y2ggcnVsZScsXG4gICAgICBlbmFibGVkOiBlbmFibGVSdWxlLFxuICAgICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICAgIHNvdXJjZTogWydhd3MucmRzJ10sXG4gICAgICAgIGRldGFpbFR5cGU6IFsnUkRTIERCIENsdXN0ZXIgRXZlbnQnXSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgRXZlbnRJRDogWydSRFMtRVZFTlQtMDE1MyddLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHRhcmdldHM6IFtcbiAgICAgICAgbmV3IHRhcmdldHMuTGFtYmRhRnVuY3Rpb24oYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uQWxpYXMsIHtcbiAgICAgICAgICByZXRyeUF0dGVtcHRzOiAyLFxuICAgICAgICAgIGV2ZW50OiBsYW1iZGFJbnB1dCxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1,18 +1,21 @@
|
|
|
1
|
+
import { DurableContext } from '@aws/durable-execution-sdk-js';
|
|
2
|
+
import { NoOpResult, StoppedResult } from './auto-start-prevent.predicates';
|
|
1
3
|
/**
|
|
2
4
|
* Durable Lambda handler for RDS auto-start prevention.
|
|
3
5
|
*
|
|
4
6
|
* Workflow:
|
|
5
|
-
* 1. Wait 1 minute, then
|
|
7
|
+
* 1. Wait 1 minute, then wait on DescribeDB* until the resource leaves transitional statuses.
|
|
6
8
|
* 2. Read tags from the describe response `TagList`; skip when {@link matchTag} returns false.
|
|
7
|
-
* 3. If status is `available`, call StopDB* and
|
|
9
|
+
* 3. If status is `available`, call StopDB* and wait until `stopped`.
|
|
8
10
|
* 4. If already `stopped` without calling StopDB*, return {@link NoOpResult} (no Slack notification).
|
|
9
11
|
* 5. Post to Slack only when StopDB* was invoked and the resource reached `stopped`.
|
|
10
12
|
*
|
|
11
13
|
* Tag matching uses RDS Describe APIs only; Resource Groups Tagging API is not used.
|
|
12
14
|
*
|
|
13
|
-
* @param input - `{ event, params }` from EventBridge
|
|
15
|
+
* @param input - `{ event, params }` from EventBridge InputTransformer (same shape required for direct Invoke).
|
|
14
16
|
* @param context - Durable execution context for steps and waits.
|
|
15
17
|
* @returns {@link StoppedResult} or {@link NoOpResult}.
|
|
16
|
-
* @throws When the event is unsupported, secrets are invalid, or stop did not reach `stopped`.
|
|
18
|
+
* @throws When the payload is invalid, required env vars are missing, the event is unsupported, secrets are invalid, or stop did not reach `stopped`.
|
|
17
19
|
*/
|
|
20
|
+
export declare const processAutoStartPrevent: (input: unknown, context: DurableContext) => Promise<StoppedResult | NoOpResult>;
|
|
18
21
|
export declare const handler: import("@aws/durable-execution-sdk-js").DurableLambdaHandler;
|
|
@@ -1,131 +1,53 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handler = void 0;
|
|
3
|
+
exports.handler = exports.processAutoStartPrevent = void 0;
|
|
4
4
|
const durable_execution_sdk_js_1 = require("@aws/durable-execution-sdk-js");
|
|
5
5
|
const client_rds_1 = require("@aws-sdk/client-rds");
|
|
6
6
|
const web_api_1 = require("@slack/web-api");
|
|
7
7
|
const aws_lambda_secret_fetcher_1 = require("aws-lambda-secret-fetcher");
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
input != null &&
|
|
11
|
-
'detail' in input &&
|
|
12
|
-
'detail-type' in input;
|
|
13
|
-
/**
|
|
14
|
-
* Builds tag filter parameters from `TAG_KEY` and `TAG_VALUES` environment variables.
|
|
15
|
-
*
|
|
16
|
-
* @returns Parsed tag key and values.
|
|
17
|
-
* @throws When required environment variables are missing or `TAG_VALUES` is not a JSON string array.
|
|
18
|
-
*/
|
|
19
|
-
const paramsFromEnv = () => {
|
|
20
|
-
const tagKey = process.env.TAG_KEY;
|
|
21
|
-
const tagValuesJson = process.env.TAG_VALUES;
|
|
22
|
-
if (!tagKey || !tagValuesJson) {
|
|
23
|
-
throw new Error('missing environment variables TAG_KEY or TAG_VALUES.');
|
|
24
|
-
}
|
|
25
|
-
let tagValues;
|
|
26
|
-
try {
|
|
27
|
-
tagValues = JSON.parse(tagValuesJson);
|
|
28
|
-
}
|
|
29
|
-
catch {
|
|
30
|
-
throw new Error('TAG_VALUES must be a JSON array of strings.');
|
|
31
|
-
}
|
|
32
|
-
if (!Array.isArray(tagValues)) {
|
|
33
|
-
throw new Error('TAG_VALUES must be a JSON array of strings.');
|
|
34
|
-
}
|
|
35
|
-
return { tagKey, tagValues };
|
|
36
|
-
};
|
|
37
|
-
/**
|
|
38
|
-
* Normalizes invocation input to {@link AutoStartPreventInput}.
|
|
39
|
-
*
|
|
40
|
-
* @param input - `{ event, params }` or a raw EventBridge RDS event.
|
|
41
|
-
* @returns Event plus tag filter parameters.
|
|
42
|
-
* @throws When the payload shape is invalid.
|
|
43
|
-
*/
|
|
44
|
-
const normalizeInput = (input) => {
|
|
45
|
-
if (isRawEvent(input)) {
|
|
46
|
-
return { event: input, params: paramsFromEnv() };
|
|
47
|
-
}
|
|
48
|
-
const candidate = input;
|
|
49
|
-
if (typeof candidate === 'object' &&
|
|
50
|
-
candidate != null &&
|
|
51
|
-
candidate.event != null &&
|
|
52
|
-
candidate.params != null) {
|
|
53
|
-
return candidate;
|
|
54
|
-
}
|
|
55
|
-
throw new Error('Invalid input: expected RDS event or { event, params }.');
|
|
56
|
-
};
|
|
8
|
+
const strict_env_resolver_1 = require("strict-env-resolver");
|
|
9
|
+
const auto_start_prevent_predicates_1 = require("./auto-start-prevent.predicates");
|
|
57
10
|
/** Shared RDS client for describe and stop API calls. */
|
|
58
11
|
const rdsClient = new client_rds_1.RDSClient({});
|
|
59
|
-
/**
|
|
60
|
-
* RDS statuses that indicate an in-progress transition.
|
|
61
|
-
* The handler polls every 5 minutes while the resource remains in one of these states.
|
|
62
|
-
*/
|
|
63
|
-
const TRANSITIONAL_STATUSES = new Set([
|
|
64
|
-
'starting',
|
|
65
|
-
'configuring-enhanced-monitoring',
|
|
66
|
-
'backing-up',
|
|
67
|
-
'modifying',
|
|
68
|
-
'stopping',
|
|
69
|
-
]);
|
|
70
|
-
/**
|
|
71
|
-
* Returns true if the resource has a tag with the given key and a value in the allowed list.
|
|
72
|
-
*
|
|
73
|
-
* @param params - Tag key and allowed values.
|
|
74
|
-
* @param tags - Resource tag list (e.g. from DescribeDBInstances / DescribeDBClusters).
|
|
75
|
-
* @returns Whether the tag matches.
|
|
76
|
-
*/
|
|
77
|
-
const matchTag = (params, tags) => {
|
|
78
|
-
if (!tags || tags.length === 0) {
|
|
79
|
-
return false;
|
|
80
|
-
}
|
|
81
|
-
const value = tags.find(t => t.Key === params.tagKey)?.Value;
|
|
82
|
-
if (!value) {
|
|
83
|
-
return false;
|
|
84
|
-
}
|
|
85
|
-
return params.tagValues.includes(value);
|
|
86
|
-
};
|
|
87
12
|
/**
|
|
88
13
|
* Durable Lambda handler for RDS auto-start prevention.
|
|
89
14
|
*
|
|
90
15
|
* Workflow:
|
|
91
|
-
* 1. Wait 1 minute, then
|
|
16
|
+
* 1. Wait 1 minute, then wait on DescribeDB* until the resource leaves transitional statuses.
|
|
92
17
|
* 2. Read tags from the describe response `TagList`; skip when {@link matchTag} returns false.
|
|
93
|
-
* 3. If status is `available`, call StopDB* and
|
|
18
|
+
* 3. If status is `available`, call StopDB* and wait until `stopped`.
|
|
94
19
|
* 4. If already `stopped` without calling StopDB*, return {@link NoOpResult} (no Slack notification).
|
|
95
20
|
* 5. Post to Slack only when StopDB* was invoked and the resource reached `stopped`.
|
|
96
21
|
*
|
|
97
22
|
* Tag matching uses RDS Describe APIs only; Resource Groups Tagging API is not used.
|
|
98
23
|
*
|
|
99
|
-
* @param input - `{ event, params }` from EventBridge
|
|
24
|
+
* @param input - `{ event, params }` from EventBridge InputTransformer (same shape required for direct Invoke).
|
|
100
25
|
* @param context - Durable execution context for steps and waits.
|
|
101
26
|
* @returns {@link StoppedResult} or {@link NoOpResult}.
|
|
102
|
-
* @throws When the event is unsupported, secrets are invalid, or stop did not reach `stopped`.
|
|
27
|
+
* @throws When the payload is invalid, required env vars are missing, the event is unsupported, secrets are invalid, or stop did not reach `stopped`.
|
|
103
28
|
*/
|
|
104
|
-
|
|
105
|
-
const { event, params } = normalizeInput(input);
|
|
29
|
+
const processAutoStartPrevent = async (input, context) => {
|
|
30
|
+
const { event, params } = (0, auto_start_prevent_predicates_1.normalizeInput)(input);
|
|
106
31
|
const { detail, 'detail-type': detailType } = event;
|
|
107
|
-
const slackSecretName =
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
32
|
+
const slackSecretName = strict_env_resolver_1.StrictEnvResolver.resolve('SLACK_SECRET_NAME', strict_env_resolver_1.StrictEnvType.String, {
|
|
33
|
+
trim: true,
|
|
34
|
+
});
|
|
35
|
+
// Requires AWS Parameters and Secrets Extension (ParamsAndSecrets layer) and
|
|
36
|
+
// AWS_SESSION_TOKEN from the Lambda runtime (aws-lambda-secret-fetcher ^0.6+).
|
|
111
37
|
const slackSecretValue = await context.step('fetch-slack-secret', async () => {
|
|
112
38
|
return aws_lambda_secret_fetcher_1.secretFetcher.getSecretValue(slackSecretName);
|
|
113
39
|
});
|
|
114
|
-
if (!
|
|
115
|
-
throw new Error('Slack secret must
|
|
40
|
+
if (!(0, auto_start_prevent_predicates_1.isSlackSecret)(slackSecretValue)) {
|
|
41
|
+
throw new Error('Slack secret must be JSON with non-empty token and channel.');
|
|
116
42
|
}
|
|
117
|
-
const isInstance = detailType
|
|
118
|
-
|
|
119
|
-
detail.EventID === 'RDS-EVENT-0154';
|
|
120
|
-
const isCluster = detailType === 'RDS DB Cluster Event' &&
|
|
121
|
-
detail.SourceType === 'CLUSTER' &&
|
|
122
|
-
detail.EventID === 'RDS-EVENT-0153';
|
|
43
|
+
const isInstance = (0, auto_start_prevent_predicates_1.isDbInstanceAutoStart)(detailType, detail);
|
|
44
|
+
const isCluster = (0, auto_start_prevent_predicates_1.isDbClusterAutoStart)(detailType, detail);
|
|
123
45
|
if (!isInstance && !isCluster) {
|
|
124
46
|
throw new Error(`Unsupported event: detail-type=${detailType}, SourceType=${detail.SourceType}, EventID=${detail.EventID}`);
|
|
125
47
|
}
|
|
126
48
|
// Initial delay before the first describe (allows RDS to report a stable status).
|
|
127
49
|
await context.wait({ minutes: 1 });
|
|
128
|
-
//
|
|
50
|
+
// Wait until the resource is no longer in a transitional status; capture status and TagList.
|
|
129
51
|
const firstDescribe = await context.waitForCondition(async (_state, _ctx) => {
|
|
130
52
|
if (isInstance) {
|
|
131
53
|
const res = await rdsClient.send(new client_rds_1.DescribeDBInstancesCommand({
|
|
@@ -152,27 +74,17 @@ exports.handler = (0, durable_execution_sdk_js_1.withDurableExecution)(async (in
|
|
|
152
74
|
status: 'starting',
|
|
153
75
|
identifier: detail.SourceIdentifier,
|
|
154
76
|
},
|
|
155
|
-
waitStrategy:
|
|
156
|
-
// Re-poll every 5 minutes while the status is still transitional.
|
|
157
|
-
if (TRANSITIONAL_STATUSES.has(state.status)) {
|
|
158
|
-
return { shouldContinue: true, delay: { minutes: 5 } };
|
|
159
|
-
}
|
|
160
|
-
// available, stopped, or other terminal status — proceed to tag check and stop logic.
|
|
161
|
-
return { shouldContinue: false };
|
|
162
|
-
},
|
|
77
|
+
waitStrategy: auto_start_prevent_predicates_1.waitStrategyUntilStable,
|
|
163
78
|
});
|
|
164
79
|
// Skip when TagList is missing or does not match tagKey / tagValues.
|
|
165
|
-
if (!matchTag(params, firstDescribe.tags)) {
|
|
166
|
-
return
|
|
167
|
-
action: 'no-op',
|
|
168
|
-
reason: 'tag not matched or not found',
|
|
169
|
-
status: firstDescribe.status,
|
|
170
|
-
};
|
|
80
|
+
if (!(0, auto_start_prevent_predicates_1.matchTag)(params, firstDescribe.tags)) {
|
|
81
|
+
return (0, auto_start_prevent_predicates_1.tagMismatchNoOp)(firstDescribe.status);
|
|
171
82
|
}
|
|
172
83
|
let didStop = false;
|
|
173
84
|
let finalStatus = firstDescribe.status;
|
|
174
|
-
// When available, invoke StopDB* and
|
|
175
|
-
|
|
85
|
+
// When available, invoke StopDB* and wait until stopped.
|
|
86
|
+
const afterTagMatch = (0, auto_start_prevent_predicates_1.decideAfterTagMatch)(firstDescribe.status);
|
|
87
|
+
if (afterTagMatch.kind === 'stop') {
|
|
176
88
|
if (isInstance) {
|
|
177
89
|
await context.step('stop-db-instance', async () => {
|
|
178
90
|
await rdsClient.send(new client_rds_1.StopDBInstanceCommand({
|
|
@@ -211,78 +123,42 @@ exports.handler = (0, durable_execution_sdk_js_1.withDurableExecution)(async (in
|
|
|
211
123
|
status: firstDescribe.status,
|
|
212
124
|
identifier: firstDescribe.identifier,
|
|
213
125
|
},
|
|
214
|
-
waitStrategy:
|
|
215
|
-
if (state.status === 'stopped') {
|
|
216
|
-
return { shouldContinue: false };
|
|
217
|
-
}
|
|
218
|
-
if (TRANSITIONAL_STATUSES.has(state.status)) {
|
|
219
|
-
return { shouldContinue: true, delay: { minutes: 5 } };
|
|
220
|
-
}
|
|
221
|
-
throw new Error(`Unexpected status while waiting for stop: ${state.status}`);
|
|
222
|
-
},
|
|
126
|
+
waitStrategy: auto_start_prevent_predicates_1.waitStrategyUntilStopped,
|
|
223
127
|
});
|
|
224
128
|
didStop = true;
|
|
225
129
|
finalStatus = stopped.status;
|
|
226
130
|
}
|
|
227
131
|
// Already stopped without calling StopDB* (e.g. stopped by another process) — no Slack notification.
|
|
228
132
|
if (!didStop) {
|
|
229
|
-
if (
|
|
230
|
-
return
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
};
|
|
133
|
+
if (afterTagMatch.kind === 'no-op') {
|
|
134
|
+
return afterTagMatch.result;
|
|
135
|
+
}
|
|
136
|
+
if (afterTagMatch.kind === 'error') {
|
|
137
|
+
throw new Error(afterTagMatch.message);
|
|
235
138
|
}
|
|
236
|
-
throw new Error(`DB status is not stopped after processing: ${finalStatus}`);
|
|
237
139
|
}
|
|
238
140
|
// Fail when StopDB* was called but the resource did not reach stopped.
|
|
239
141
|
if (finalStatus !== 'stopped') {
|
|
240
142
|
throw new Error(`DB status is not stopped after processing: ${finalStatus}`);
|
|
241
143
|
}
|
|
242
|
-
const
|
|
243
|
-
const region = sourceArnParts[3];
|
|
244
|
-
const account = sourceArnParts[4];
|
|
144
|
+
const { region, account } = (0, auto_start_prevent_predicates_1.parseRdsSourceArn)(detail.SourceArn);
|
|
245
145
|
const client = new web_api_1.WebClient(slackSecretValue.token);
|
|
246
|
-
const channel = slackSecretValue.channel;
|
|
247
146
|
await context.step('post-slack-messages', async () => {
|
|
248
|
-
return client.chat.postMessage({
|
|
249
|
-
channel,
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
{
|
|
256
|
-
title: 'Account',
|
|
257
|
-
value: account,
|
|
258
|
-
short: true,
|
|
259
|
-
},
|
|
260
|
-
{
|
|
261
|
-
title: 'Region',
|
|
262
|
-
value: region,
|
|
263
|
-
short: true,
|
|
264
|
-
},
|
|
265
|
-
{
|
|
266
|
-
title: 'Type',
|
|
267
|
-
value: detail.SourceType,
|
|
268
|
-
short: true,
|
|
269
|
-
},
|
|
270
|
-
{
|
|
271
|
-
title: 'Identifier',
|
|
272
|
-
value: detail.SourceIdentifier,
|
|
273
|
-
short: true,
|
|
274
|
-
},
|
|
275
|
-
],
|
|
276
|
-
},
|
|
277
|
-
],
|
|
278
|
-
});
|
|
147
|
+
return client.chat.postMessage((0, auto_start_prevent_predicates_1.buildSlackStopNotification)({
|
|
148
|
+
channel: slackSecretValue.channel,
|
|
149
|
+
sourceType: detail.SourceType,
|
|
150
|
+
sourceIdentifier: detail.SourceIdentifier,
|
|
151
|
+
account,
|
|
152
|
+
region,
|
|
153
|
+
}));
|
|
279
154
|
});
|
|
280
|
-
return {
|
|
281
|
-
action: 'stopped',
|
|
155
|
+
return (0, auto_start_prevent_predicates_1.buildStoppedResult)({
|
|
282
156
|
finalStatus,
|
|
283
157
|
account,
|
|
284
158
|
region,
|
|
285
159
|
identifier: detail.SourceIdentifier,
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1zdGFydC1wcmV2ZW50LmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdW5jcy9hdXRvLXN0YXJ0LXByZXZlbnQubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRFQUFxRjtBQUNyRixvREFNNkI7QUFDN0IsNENBQTJDO0FBQzNDLHlFQUEwRDtBQTZFMUQsbUVBQW1FO0FBQ25FLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBYyxFQUE4QixFQUFFLENBQ2hFLE9BQU8sS0FBSyxLQUFLLFFBQVE7SUFDekIsS0FBSyxJQUFJLElBQUk7SUFDYixRQUFRLElBQUksS0FBSztJQUNqQixhQUFhLElBQUksS0FBSyxDQUFDO0FBRXpCOzs7OztHQUtHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsR0FBb0IsRUFBRTtJQUMxQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUNuQyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztJQUM3QyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFDRCxJQUFJLFNBQW1CLENBQUM7SUFDeEIsSUFBSSxDQUFDO1FBQ0gsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFhLENBQUM7SUFDcEQsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUNELE9BQU8sRUFBRSxNQUFNLEVBQUUs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Q2IsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsS0FBSyxFQUFFLE1BQU07NEJBQ2IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVOzRCQUN4QixLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRDs0QkFDRSxLQUFLLEVBQUUsWUFBWTs0QkFDbkIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7NEJBQzlCLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxNQUFNLEVBQUUsU0FBUztRQUNqQixXQUFXO1FBQ1gsT0FBTztRQUNQLE1BQU07UUFDTixVQUFVLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtLQUNwQyxDQUFDO0FBQ0osQ0FBQyxDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB3aXRoRHVyYWJsZUV4ZWN1dGlvbiwgRHVyYWJsZUNvbnRleHQgfSBmcm9tICdAYXdzL2R1cmFibGUtZXhlY3V0aW9uLXNkay1qcyc7XG5pbXBvcnQge1xuICBSRFNDbGllbnQsXG4gIERlc2NyaWJlREJJbnN0YW5jZXNDb21tYW5kLFxuICBEZXNjcmliZURCQ2x1c3RlcnNDb21tYW5kLFxuICBTdG9wREJJbnN0YW5jZUNvbW1hbmQsXG4gIFN0b3BEQkNsdXN0ZXJDb21tYW5kLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtcmRzJztcbmltcG9ydCB7IFdlYkNsaWVudCB9IGZyb20gJ0BzbGFjay93ZWItYXBpJztcbmltcG9ydCB7IHNlY3JldEZldGNoZXIgfSBmcm9tICdhd3MtbGFtYmRhLXNlY3JldC1mZXRjaGVyJztcblxuLyoqXG4gKiBEZXRhaWwgcGF5bG9hZCBvZiBhbiBSRFMgYXV0by1zdGFydCBldmVudCBmcm9tIEV2ZW50QnJpZGdlLlxuICovXG5pbnRlcmZhY2UgUmRzQXV0b1N0YXJ0RGV0YWlsIHtcbiAgLyoqIEV2ZW50IElEOiBSRFMtRVZFTlQtMDE1NCAoREIgaW5zdGFuY2UpIG9yIFJEUy1FVkVOVC0wMTUzIChEQiBjbHVzdGVyKS4gKi9cbiAgRXZlbnRJRDogJ1JEUy1FVkVOVC0wMTU0JyB8ICdSRFMtRVZFTlQtMDE1Myc7XG4gIC8qKiBSZXNvdXJjZSB0eXBlIHRoYXQgZW1pdHRlZCB0aGUgZXZlbnQuICovXG4gIFNvdXJjZVR5cGU6ICdEQl9JTlNUQU5DRScgfCAnQ0xVU1RFUic7XG4gIC8qKiBBUk4gb2YgdGhlIERCIGluc3RhbmNlIG9yIGNsdXN0ZXIuICovXG4gIFNvdXJjZUFybjogc3RyaW5nO1xuICAvKiogREIgaW5zdGFuY2Ugb3IgY2x1c3RlciBpZGVudGlmaWVyIGZyb20gdGhlIGV2ZW50LiAqL1xuICBTb3VyY2VJZGVudGlmaWVyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUkRTIGF1dG8tc3RhcnQgZXZlbnQgYXMgcmVjZWl2ZWQgZnJvbSBFdmVudEJyaWRnZS5cbiAqL1xuaW50ZXJmYWNlIFJkc0F1dG9TdGFydEV2ZW50IHtcbiAgJ2RldGFpbC10eXBlJzogJ1JEUyBEQiBJbnN0YW5jZSBFdmVudCcgfCAnUkRTIERCIENsdXN0ZXIgRXZlbnQnO1xuICAnc291cmNlJzogJ2F3cy5yZHMnO1xuICAnZGV0YWlsJzogUmRzQXV0b1N0YXJ0RGV0YWlsO1xufVxuXG4vKipcbiAqIFRhZy1iYXNlZCBmaWx0ZXIgcGFyYW1ldGVycyBmb3IgdGhlIGhhbmRsZXIuXG4gKi9cbmludGVyZmFjZSBBdXRvU3RhcnRQYXJhbXMge1xuICAvKiogVGFnIGtleSB0byBtYXRjaCBvbiB0aGUgcmVzb3VyY2UuICovXG4gIHRhZ0tleTogc3RyaW5nO1xuICAvKiogQWxsb3dlZCB0YWcgdmFsdWVzOyB0aGUgcmVzb3VyY2UgaXMgcHJvY2Vzc2VkIG9ubHkgd2hlbiBpdHMgdGFnIHZhbHVlIGlzIGluIHRoaXMgbGlzdC4gKi9cbiAgdGFnVmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBTbGFjayBjcmVkZW50aWFscyBzdG9yZWQgaW4gU2VjcmV0cyBNYW5hZ2VyLlxuICovXG5pbnRlcmZhY2UgU2xhY2tTZWNyZXQge1xuICAvKiogU2xhY2sgYm90IG9yIHVzZXIgT0F1dGggdG9rZW4uICovXG4gIHRva2VuOiBzdHJpbmc7XG4gIC8qKiBDaGFubmVsIElEIG9yIG5hbWUgdG8gcG9zdCBub3RpZmljYXRpb25zIHRvLiAqL1xuICBjaGFubmVsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogTm9ybWFsaXplZCBoYW5kbGVyIGlucHV0OiBFdmVudEJyaWRnZSBldmVudCBhbmQgdGFnIGZpbHRlciBwYXJhbWV0ZXJzLlxuICpcbiAqIENESyBpbnZva2VzIHRoZSBmdW5jdGlvbiB3aXRoIGB7IGV2ZW50LCBwYXJhbXMgfWAgdmlhIEV2ZW50QnJpZGdlIHRhcmdldCBpbnB1dC5cbiAqIEEgcmF3IEV2ZW50QnJpZGdlIGV2ZW50IGFsb25lIGlzIGFsc28gYWNjZXB0ZWQ7IGBwYXJhbXNgIGFyZSB0aGVuIHJlYWQgZnJvbVxuICogYFRBR19LRVlgIGFuZCBgVEFHX1ZBTFVFU2AgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICovXG5pbnRlcmZhY2UgQXV0b1N0YXJ0UHJldmVudElucHV0IHtcbiAgZXZlbnQ6IFJkc0F1dG9TdGFydEV2ZW50O1xuICBwYXJhbXM6IEF1dG9TdGFydFBhcmFtcztcbn1cblxuLyoqXG4gKiBIYW5kbGVyIHJlc3VsdCB3aGVuIG5vIHN0b3AgYWN0aW9uIHdhcyB0YWtlbi5cbiAqL1xuaW50ZXJmYWNlIE5vT3BSZXN1bHQge1xuICBhY3Rpb246ICduby1vcCc7XG4gIHJlYXNvbjogJ3RhZyBub3QgbWF0Y2hlZCBvciBub3QgZm91bmQnIHwgJ2FscmVhZHkgc3RvcHBlZCc7XG4gIHN0YXR1czogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhhbmRsZXIgcmVzdWx0IHdoZW4gdGhpcyBpbnZvY2F0aW9uIGNhbGxlZCBTdG9wREIqIGFuZCB0aGUgcmVzb3VyY2UgcmVhY2hlZCBgc3RvcHBlZGAuXG4gKi9cbmludGVyZmFjZSBTdG9wcGVkUmVzdWx0IHtcbiAgYWN0aW9uOiAnc3RvcHBlZCc7XG4gIGZpbmFsU3RhdHVzOiBzdHJpbmc7XG4gIGFjY291bnQ6IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIGlkZW50aWZpZXI6IHN0cmluZztcbn1cblxuLyoqIFR5cGUgZ3VhcmQ6IGlucHV0IGlzIGEgcmF3IEV2ZW50QnJpZGdlIFJEUyBhdXRvLXN0YXJ0IGV2ZW50LiAqL1xuY29uc3QgaXNSYXdFdmVudCA9IChpbnB1dDogdW5rbm93bik6IGlucHV0IGlzIFJkc0F1dG9TdGFydEV2ZW50ID0+XG4gIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiZcbiAgaW5wdXQgIT0gbnVsbCAmJlxuICAnZGV0YWlsJyBpbiBpbnB1dCAmJlxuICAnZGV0YWlsLXR5cGUnIGluIGlucHV0O1xuXG4vKipcbiAqIEJ1aWxkcyB0YWcgZmlsdGVyIHBhcmFtZXRlcnMgZnJvbSBgVEFHX0tFWWAgYW5kIGBUQUdfVkFMVUVTYCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogQHJldHVybnMgUGFyc2VkIHRhZyBrZXkgYW5kIHZhbHVlcy5cbiAqIEB0aHJvd3MgV2hlbiByZXF1aXJlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG1pc3Npbmcgb3IgYFRBR19WQUxVRVNgIGlzIG5vdCBhIEpTT04gc3RyaW5nIGFycmF5LlxuICovXG5jb25zdCBwYXJhbXNGcm9tRW52ID0gKCk6IEF1dG9TdGFydFBhcmFtcyA9PiB7XG4gIGNvbnN0IHRhZ0tleSA9IHByb2Nlc3MuZW52LlRBR19LRVk7XG4gIGNvbnN0IHRhZ1ZhbHVlc0pzb24gPSBwcm9jZXNzLmVudi5UQUdfVkFMVUVTO1xuICBpZiAoIXRhZ0tleSB8fCAhdGFnVmFsdWVzSnNvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgVEFHX0tFWSBvciBUQUdfVkFMVUVTLicpO1xuICB9XG4gIGxldCB0YWdWYWx1ZXM6IHN0cmluZ1tdO1xuICB0cnkge1xuICAgIHRhZ1ZhbHVlcyA9IEpTT04ucGFyc2UodGFnVmFsdWVzSnNvbikgYXMgc3RyaW5nW107XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBFcnJvcignVEFHX1ZBTFVFUyBtdXN0IGJlIGEgSlNPTiBhcnJheSBvZiBzdHJpbmdzLicpO1xuICB9XG4gIGlmICghQXJyYXkuaXNBcnJheSh0YWdWYWx1ZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUQUdfVkFMVUVTIG11c3QgYmUgYSBKU09OIGFycmF5IG9mIHN0cmluZ3MuJyk7XG4gIH1cbiAgcmV0dXJuIHsgdGFnS2V5LCB0YWdWYWx1ZXMgfTtcbn07XG5cbi8qKlxuICogTm9ybWFsaXplcyBpbnZvY2F0aW9uIGlucHV0IHRvIHtAbGluayBBdXRvU3RhcnRQcmV2ZW50SW5wdXR9LlxuICpcbiAqIEBwYXJhbSBpbnB1dCAtIGB7IGV2ZW50LCBwYXJhbXMgfWAgb3IgYSByYXcgRXZlbnRCcmlkZ2UgUkRTIGV2ZW50LlxuICogQHJldHVybnMgRXZlbnQgcGx1cyB0YWcgZmlsdGVyIHBhcmFtZXRlcnMuXG4gKiBAdGhyb3dzIFdoZW4gdGhlIHBheWxvYWQgc2hhcGUgaXMgaW52YWxpZC5cbiAqL1xuY29uc3Qgbm9ybWFsaXplSW5wdXQgPSAoaW5wdXQ6IHVua25vd24pOiBBdXRvU3RhcnRQcmV2ZW50SW5wdXQgPT4ge1xuICBpZiAoaXNSYXdFdmVudChpbnB1dCkpIHtcbiAgICByZXR1cm4geyBldmVudDogaW5wdXQsIHBhcmFtczogcGFyYW1zRnJvbUVudigpIH07XG4gIH1cbiAgY29uc3QgY2FuZGlkYXRlID0gaW5wdXQgYXMgQXV0b1N0YXJ0UHJldmVudElucHV0O1xuICBpZiAoXG4gICAgdHlwZW9mIGNhbmRpZGF0ZSA9PT0gJ29iamVjdCcgJiZcbiAgICBjYW5kaWRhdGUgIT0gbnVsbCAmJlxuICAgIGNhbmRpZGF0ZS5ldmVudCAhPSBudWxsICYmXG4gICAgY2FuZGlkYXRlLnBhcmFtcyAhPSBudWxsXG4gICkge1xuICAgIHJldHVybiBjYW5kaWRhdGU7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlucHV0OiBleHBlY3RlZCBSRFMgZXZlbnQgb3IgeyBldmVudCwgcGFyYW1zIH0uJyk7XG59O1xuXG4vKipcbiAqIEFXUy1zdHlsZSB0YWcgKEtleS9WYWx1ZSkuXG4gKi9cbmludGVyZmFjZSBUYWcge1xuICBLZXk/OiBzdHJpbmc7XG4gIFZhbHVlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN0YXRlIHNuYXBzaG90IHdoaWxlIHBvbGxpbmcgUkRTIGRlc2NyaWJlIEFQSXMuXG4gKi9cbmludGVyZmFjZSBQb2xsU3RhdGUge1xuICAvKiogQ3VycmVudCBEQiBpbnN0YW5jZSBvciBjbHVzdGVyIHN0YXR1cy4gKi9cbiAgc3RhdHVzOiBzdHJpbmc7XG4gIC8qKiBEQiBpbnN0YW5jZSBvciBjbHVzdGVyIGlkZW50aWZpZXIuICovXG4gIGlkZW50aWZpZXI6IHN0cmluZztcbiAgLyoqIFRhZ3MgZnJvbSB0aGUgZGVzY3JpYmUgcmVzcG9uc2U7IHByZXNlbnQgb24gdGhlIGZpcnN0IHBvbGwgb25seS4gKi9cbiAgdGFncz86IFRhZ1tdO1xufVxuXG4vKiogU2hhcmVkIFJEUyBjbGllbnQgZm9yIGRlc2NyaWJlIGFuZCBzdG9wIEFQSSBjYWxscy4gKi9cbmNvbnN0IHJkc0NsaWVudCA9IG5ldyBSRFNDbGllbnQoe30pO1xuXG4vKipcbiAqIFJEUyBzdGF0dXNlcyB0aGF0IGluZGljYXRlIGFuIGluLXByb2dyZXNzIHRyYW5zaXRpb24uXG4gKiBUaGUgaGFuZGxlciBwb2xscyBldmVyeSA1IG1pbnV0ZXMgd2hpbGUgdGhlIHJlc291cmNlIHJlbWFpbnMgaW4gb25lIG9mIHRoZXNlIHN0YXRlcy5cbiAqL1xuY29uc3QgVFJBTlNJVElPTkFMX1NUQVRVU0VTID0gbmV3IFNldChbXG4gICdzdGFydGluZycsXG4gICdjb25maWd1cmluZy1lbmhhbmNlZC1tb25pdG9yaW5nJyxcbiAgJ2JhY2tpbmctdXAnLFxuICAnbW9kaWZ5aW5nJyxcbiAgJ3N0b3BwaW5nJyxcbl0pO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzb3VyY2UgaGFzIGEgdGFnIHdpdGggdGhlIGdpdmVuIGtleSBhbmQgYSB2YWx1ZSBpbiB0aGUgYWxsb3dlZCBsaXN0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUYWcga2V5IGFuZCBhbGxvd2VkIHZhbHVlcy5cbiAqIEBwYXJhbSB0YWdzIC0gUmVzb3VyY2UgdGFnIGxpc3QgKGUuZy4gZnJvbSBEZXNjcmliZURCSW5zdGFuY2VzIC8gRGVzY3JpYmVEQkNsdXN0ZXJzKS5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHRhZyBtYXRjaGVzLlxuICovXG5jb25zdCBtYXRjaFRhZyA9IChwYXJhbXM6IEF1dG9TdGFydFBhcmFtcywgdGFncz86IFRhZ1tdKTogYm9vbGVhbiA9PiB7XG4gIGlmICghdGFncyB8fCB0YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCB2YWx1ZSA9IHRhZ3MuZmluZCh0ID0+IHQuS2V5ID09PSBwYXJhbXMudGFnS2V5KT8uVmFsdWU7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHBhcmFtcy50YWdWYWx1ZXMuaW5jbHVkZXModmFsdWUpO1xufTtcblxuLyoqXG4gKiBEdXJhYmxlIExhbWJkYSBoYW5kbGVyIGZvciBSRFMgYXV0by1zdGFydCBwcmV2ZW50aW9uLlxuICpcbiAqIFdvcmtmbG93OlxuICogMS4gV2FpdCAxIG1pbnV0ZSwgdGhlbiBwb2xsIERlc2NyaWJlREIqIHVudGlsIHRoZSByZXNvdXJjZSBsZWF2ZXMgdHJhbnNpdGlvbmFsIHN0YXR1c2VzLlxuICogMi4gUmVhZCB0YWdzIGZyb20gdGhlIGRlc2NyaWJlIHJlc3BvbnNlIGBUYWdMaXN0YDsgc2tpcCB3aGVuIHtAbGluayBtYXRjaFRhZ30gcmV0dXJucyBmYWxzZS5cbiAqIDMuIElmIHN0YXR1cyBpcyBgYXZhaWxhYmxlYCwgY2FsbCBTdG9wREIqIGFuZCBwb2xsIHVudGlsIGBzdG9wcGVkYC5cbiAqIDQuIElmIGFscmVhZHkgYHN0b3BwZWRgIHdpdGhvdXQgY2FsbGluZyBTdG9wREIqLCByZXR1cm4ge0BsaW5rIE5vT3BSZXN1bHR9IChubyBTbGFjayBub3RpZmljYXRpb24pLlxuICogNS4gUG9zdCB0byBTbGFjayBvbmx5IHdoZW4gU3RvcERCKiB3YXMgaW52b2tlZCBhbmQgdGhlIHJlc291cmNlIHJlYWNoZWQgYHN0b3BwZWRgLlxuICpcbiAqIFRhZyBtYXRjaGluZyB1c2VzIFJEUyBEZXNjcmliZSBBUElzIG9ubHk7IFJlc291cmNlIEdyb3VwcyBUYWdnaW5nIEFQSSBpcyBub3QgdXNlZC5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgLSBgeyBldmVudCwgcGFyYW1zIH1gIGZyb20gRXZlbnRCcmlkZ2UsIG9yIGEgcmF3IFJEUyBldmVudC5cbiAqIEBwYXJhbSBjb250ZXh0IC0gRHVyYWJsZSBleGVjdXRpb24gY29udGV4dCBmb3Igc3RlcHMgYW5kIHdhaXRzLlxuICogQHJldHVybnMge0BsaW5rIFN0b3BwZWRSZXN1bHR9IG9yIHtAbGluayBOb09wUmVzdWx0fS5cbiAqIEB0aHJvd3MgV2hlbiB0aGUgZXZlbnQgaXMgdW5zdXBwb3J0ZWQsIHNlY3JldHMgYXJlIGludmFsaWQsIG9yIHN0b3AgZGlkIG5vdCByZWFjaCBgc3RvcHBlZGAuXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gd2l0aER1cmFibGVFeGVjdXRpb24oXG4gIGFzeW5jIChpbnB1dDogdW5rbm93biwgY29udGV4dDogRHVyYWJsZUNvbnRleHQpOiBQcm9taXNlPFN0b3BwZWRSZXN1bHQgfCBOb09wUmVzdWx0PiA9PiB7XG4gICAgY29uc3QgeyBldmVudCwgcGFyYW1zIH0gPSBub3JtYWxpemVJbnB1dChpbnB1dCk7XG4gICAgY29uc3QgeyBkZXRhaWwsICdkZXRhaWwtdHlwZSc6IGRldGFpbFR5cGUgfSA9IGV2ZW50O1xuXG4gICAgY29uc3Qgc2xhY2tTZWNyZXROYW1lID0gcHJvY2Vzcy5lbnYuU0xBQ0tfU0VDUkVUX05BTUU7XG4gICAgaWYgKCFzbGFja1NlY3JldE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZSBTTEFDS19TRUNSRVRfTkFNRS4nKTtcbiAgICB9XG4gICAgY29uc3Qgc2xhY2tTZWNyZXRWYWx1ZSA9IGF3YWl0IGNvbnRleHQuc3RlcCgnZmV0Y2gtc2xhY2stc2VjcmV0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIHNlY3JldEZldGNoZXIuZ2V0U2VjcmV0VmFsdWU8U2xhY2tTZWNyZXQ+KHNsYWNrU2VjcmV0TmFtZSk7XG4gICAgfSk7XG5cbiAgICBpZiAoIXNsYWNrU2VjcmV0VmFsdWU/LnRva2VuIHx8ICFzbGFja1NlY3JldFZhbHVlPy5jaGFubmVsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NsYWNrIHNlY3JldCBtdXN0IGNvbnRhaW4gdG9rZW4gYW5kIGNoYW5uZWwuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNJbnN0YW5jZSA9XG4gICAgICBkZXRhaWxUeXBlID09PSAnUkRTIERCIEluc3RhbmNlIEV2ZW50JyAmJlxuICAgICAgZGV0YWlsLlNvdXJjZVR5cGUgPT09ICdEQl9JTlNUQU5DRScgJiZcbiAgICAgIGRldGFpbC5FdmVudElEID09PSAnUkRTLUVWRU5ULTAxNTQnO1xuXG4gICAgY29uc3QgaXNDbHVzdGVyID1cbiAgICAgIGRldGFpbFR5cGUgPT09ICdSRFMgREIgQ2x1c3RlciBFdmVudCcgJiZcbiAgICAgIGRldGFpbC5Tb3VyY2VUeXBlID09PSAnQ0xVU1RFUicgJiZcbiAgICAgIGRldGFpbC5FdmVudElEID09PSAnUkRTLUVWRU5ULTAxNTMnO1xuXG4gICAgaWYgKCFpc0luc3RhbmNlICYmICFpc0NsdXN0ZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFVuc3VwcG9ydGVkIGV2ZW50OiBkZXRhaWwtdHlwZT0ke2RldGFpbFR5cGV9LCBTb3VyY2VUeXBlPSR7ZGV0YWlsLlNvdXJjZVR5cGV9LCBFdmVudElEPSR7ZGV0YWlsLkV2ZW50SUR9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbCBkZWxheSBiZWZvcmUgdGhlIGZpcnN0IGRlc2NyaWJlIChhbGxvd3MgUkRTIHRvIHJlcG9ydCBhIHN0YWJsZSBzdGF0dXMpLlxuICAgIGF3YWl0IGNvbnRleHQud2FpdCh7IG1pbnV0ZXM6IDEgfSk7XG5cbiAgICAvLyBQb2xsIHVudGlsIHRoZSByZXNvdXJjZSBpcyBubyBsb25nZXIgaW4gYSB0cmFuc2l0aW9uYWwgc3RhdHVzOyBjYXB0dXJlIHN0YXR1cyBhbmQgVGFnTGlzdC5cbiAgICBjb25zdCBmaXJzdERlc2NyaWJlID0gYXdhaXQgY29udGV4dC53YWl0Rm9yQ29uZGl0aW9uPFBvbGxTdGF0ZT4oXG4gICAgICBhc3luYyAoX3N0YXRlLCBfY3R4KSA9PiB7XG4gICAgICAgIGlmIChpc0luc3RhbmNlKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmRzQ2xpZW50LnNlbmQoXG4gICAgICAgICAgICBuZXcgRGVzY3JpYmVEQkluc3RhbmNlc0NvbW1hbmQoe1xuICAgICAgICAgICAgICBEQkluc3RhbmNlSWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGRiID0gcmVzLkRCSW5zdGFuY2VzPy5bMF07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXR1czogZGI/LkRCSW5zdGFuY2VTdGF0dXMgPz8gJ3Vua25vd24nLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogZGI/LkRCSW5zdGFuY2VJZGVudGlmaWVyID8/IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgICAgdGFnczogKGRiPy5UYWdMaXN0ID8/IFtdKSBhcyBUYWdbXSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmRzQ2xpZW50LnNlbmQoXG4gICAgICAgICAgbmV3IERlc2NyaWJlREJDbHVzdGVyc0NvbW1hbmQoe1xuICAgICAgICAgICAgREJDbHVzdGVySWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXIgPSByZXMuREJDbHVzdGVycz8uWzBdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXR1czogY2x1c3Rlcj8uU3RhdHVzID8/ICd1bmtub3duJyxcbiAgICAgICAgICBpZGVudGlmaWVyOiBjbHVzdGVyPy5EQkNsdXN0ZXJJZGVudGlmaWVyID8/IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgIHRhZ3M6IChjbHVzdGVyPy5UYWdMaXN0ID8/IFtdKSBhcyBUYWdbXSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgIHN0YXR1czogJ3N0YXJ0aW5nJyxcbiAgICAgICAgICBpZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgfSxcbiAgICAgICAgd2FpdFN0cmF0ZWd5OiBzdGF0ZSA9PiB7XG4gICAgICAgICAgLy8gUmUtcG9sbCBldmVyeSA1IG1pbnV0ZXMgd2hpbGUgdGhlIHN0YXR1cyBpcyBzdGlsbCB0cmFuc2l0aW9uYWwuXG4gICAgICAgICAgaWYgKFRSQU5TSVRJT05BTF9TVEFUVVNFUy5oYXMoc3RhdGUuc3RhdHVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc2hvdWxkQ29udGludWU6IHRydWUsIGRlbGF5OiB7IG1pbnV0ZXM6IDUgfSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBhdmFpbGFibGUsIHN0b3BwZWQsIG9yIG90aGVyIHRlcm1pbmFsIHN0YXR1cyDigJQgcHJvY2VlZCB0byB0YWcgY2hlY2sgYW5kIHN0b3AgbG9naWMuXG4gICAgICAgICAgcmV0dXJuIHsgc2hvdWxkQ29udGludWU6IGZhbHNlIH07XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBTa2lwIHdoZW4gVGFnTGlzdCBpcyBtaXNzaW5nIG9yIGRvZXMgbm90IG1hdGNoIHRhZ0tleSAvIHRhZ1ZhbHVlcy5cbiAgICBpZiAoIW1hdGNoVGFnKHBhcmFtcywgZmlyc3REZXNjcmliZS50YWdzKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWN0aW9uOiAnbm8tb3AnLFxuICAgICAgICByZWFzb246ICd0YWcgbm90IG1hdGNoZWQgb3Igbm90IGZvdW5kJyxcbiAgICAgICAgc3RhdHVzOiBmaXJzdERlc2NyaWJlLnN0YXR1cyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IGRpZFN0b3AgPSBmYWxzZTtcbiAgICBsZXQgZmluYWxTdGF0dXMgPSBmaXJzdERlc2NyaWJlLnN0YXR1cztcblxuICAgIC8vIFdoZW4gYXZhaWxhYmxlLCBpbnZva2UgU3RvcERCKiBhbmQgcG9sbCB1bnRpbCBzdG9wcGVkLlxuICAgIGlmIChmaXJzdERlc2NyaWJlLnN0YXR1cyA9PT0gJ2F2YWlsYWJsZScpIHtcbiAgICAgIGlmIChpc0luc3RhbmNlKSB7XG4gICAgICAgIGF3YWl0IGNvbnRleHQuc3RlcCgnc3RvcC1kYi1pbnN0YW5jZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCByZHNDbGllbnQuc2VuZChcbiAgICAgICAgICAgIG5ldyBTdG9wREJJbnN0YW5jZUNvbW1hbmQoe1xuICAgICAgICAgICAgICBEQkluc3RhbmNlSWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGNvbnRleHQuc3RlcCgnc3RvcC1kYi1jbHVzdGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgICAgbmV3IFN0b3BEQkNsdXN0ZXJDb21tYW5kKHtcbiAgICAgICAgICAgICAgREJDbHVzdGVySWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RvcHBlZCA9IGF3YWl0IGNvbnRleHQud2FpdEZvckNvbmRpdGlvbjxQb2xsU3RhdGU+KFxuICAgICAgICBhc3luYyAoX3N0YXRlLCBfY3R4KSA9PiB7XG4gICAgICAgICAgaWYgKGlzSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgICAgICBuZXcgRGVzY3JpYmVEQkluc3RhbmNlc0NvbW1hbmQoe1xuICAgICAgICAgICAgICAgIERCSW5zdGFuY2VJZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgZGIgPSByZXMuREJJbnN0YW5jZXM/LlswXTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN0YXR1czogZGI/LkRCSW5zdGFuY2VTdGF0dXMgPz8gJ3Vua25vd24nLFxuICAgICAgICAgICAgICBpZGVudGlmaWVyOiBkYj8uREJJbnN0YW5jZUlkZW50aWZpZXIgPz8gZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgICAgbmV3IERlc2NyaWJlREJDbHVzdGVyc0NvbW1hbmQoe1xuICAgICAgICAgICAgICBEQkNsdXN0ZXJJZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgY2x1c3RlciA9IHJlcy5EQkNsdXN0ZXJzPy5bMF07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXR1czogY2x1c3Rlcj8uU3RhdHVzID8/ICd1bmtub3duJyxcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IGNsdXN0ZXI/LkRCQ2x1c3RlcklkZW50aWZpZXIgPz8gZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgICAgc3RhdHVzOiBmaXJzdERlc2NyaWJlLnN0YXR1cyxcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IGZpcnN0RGVzY3JpYmUuaWRlbnRpZmllcixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhaXRTdHJhdGVneTogc3RhdGUgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnN0YXR1cyA9PT0gJ3N0b3BwZWQnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IHNob3VsZENvbnRpbnVlOiBmYWxzZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFRSQU5TSVRJT05BTF9TVEFUVVNFUy5oYXMoc3RhdGUuc3RhdHVzKSkge1xuICAgICAgICAgICAgICByZXR1cm4geyBzaG91bGRDb250aW51ZTogdHJ1ZSwgZGVsYXk6IHsgbWludXRlczogNSB9IH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdHVzIHdoaWxlIHdhaXRpbmcgZm9yIHN0b3A6ICR7c3RhdGUuc3RhdHVzfWApO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBkaWRTdG9wID0gdHJ1ZTtcbiAgICAgIGZpbmFsU3RhdHVzID0gc3RvcHBlZC5zdGF0dXM7XG4gICAgfVxuXG4gICAgLy8gQWxyZWFkeSBzdG9wcGVkIHdpdGhvdXQgY2FsbGluZyBTdG9wREIqIChlLmcuIHN0b3BwZWQgYnkgYW5vdGhlciBwcm9jZXNzKSDigJQgbm8gU2xhY2sgbm90aWZpY2F0aW9uLlxuICAgIGlmICghZGlkU3RvcCkge1xuICAgICAgaWYgKGZpbmFsU3RhdHVzID09PSAnc3RvcHBlZCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY3Rpb246ICduby1vcCcsXG4gICAgICAgICAgcmVhc29uOiAnYWxyZWFkeSBzdG9wcGVkJyxcbiAgICAgICAgICBzdGF0dXM6IGZpbmFsU3RhdHVzLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEQiBzdGF0dXMgaXMgbm90IHN0b3BwZWQgYWZ0ZXIgcHJvY2Vzc2luZzogJHtmaW5hbFN0YXR1c31gKTtcbiAgICB9XG5cbiAgICAvLyBGYWlsIHdoZW4gU3RvcERCKiB3YXMgY2FsbGVkIGJ1dCB0aGUgcmVzb3VyY2UgZGlkIG5vdCByZWFjaCBzdG9wcGVkLlxuICAgIGlmIChmaW5hbFN0YXR1cyAhPT0gJ3N0b3BwZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERCIHN0YXR1cyBpcyBub3Qgc3RvcHBlZCBhZnRlciBwcm9jZXNzaW5nOiAke2ZpbmFsU3RhdHVzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZUFyblBhcnRzID0gZGV0YWlsLlNvdXJjZUFybi5zcGxpdCgnOicpO1xuICAgIGNvbnN0IHJlZ2lvbiA9IHNvdXJjZUFyblBhcnRzWzNdO1xuICAgIGNvbnN0IGFjY291bnQgPSBzb3VyY2VBcm5QYXJ0c1s0XTtcblxuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBXZWJDbGllbnQoc2xhY2tTZWNyZXRWYWx1ZS50b2tlbik7XG4gICAgY29uc3QgY2hhbm5lbCA9IHNsYWNrU2VjcmV0VmFsdWUuY2hhbm5lbDtcblxuICAgIGF3YWl0IGNvbnRleHQuc3RlcCgncG9zdC1zbGFjay1tZXNzYWdlcycsIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBjbGllbnQuY2hhdC5wb3N0TWVzc2FnZSh7XG4gICAgICAgIGNoYW5uZWwsXG4gICAgICAgIGF0dGFjaG1lbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29sb3I6ICcjMzZhNjRmJyxcbiAgICAgICAgICAgIHByZXRleHQ6IGDwn5i0IFN1Y2Nlc3NmdWxseSBzdG9wcGVkIHRoZSBhdXRvbWF0aWNhbGx5IHJ1bm5pbmcgUkRTICR7ZGV0YWlsLlNvdXJjZVR5cGV9ICR7ZGV0YWlsLlNvdXJjZUlkZW50aWZpZXJ9LmAsXG4gICAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnQWNjb3VudCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFjY291bnQsXG4gICAgICAgICAgICAgICAgc2hvcnQ6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ1JlZ2lvbicsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlZ2lvbixcbiAgICAgICAgICAgICAgICBzaG9ydDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnVHlwZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGRldGFpbC5Tb3VyY2VUeXBlLFxuICAgICAgICAgICAgICAgIHNob3J0OiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdJZGVudGlmaWVyJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICAgICAgc2hvcnQ6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBhY3Rpb246ICdzdG9wcGVkJyxcbiAgICAgIGZpbmFsU3RhdHVzLFxuICAgICAgYWNjb3VudCxcbiAgICAgIHJlZ2lvbixcbiAgICAgIGlkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgIH07XG4gIH0sXG4pO1xuXG4iXX0=
|
|
160
|
+
});
|
|
161
|
+
};
|
|
162
|
+
exports.processAutoStartPrevent = processAutoStartPrevent;
|
|
163
|
+
exports.handler = (0, durable_execution_sdk_js_1.withDurableExecution)(exports.processAutoStartPrevent);
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1zdGFydC1wcmV2ZW50LmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdW5jcy9hdXRvLXN0YXJ0LXByZXZlbnQubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRFQUFxRjtBQUNyRixvREFNNkI7QUFDN0IsNENBQTJDO0FBQzNDLHlFQUEwRDtBQUMxRCw2REFBdUU7QUFDdkUsbUZBa0J5QztBQUV6Qyx5REFBeUQ7QUFDekQsTUFBTSxTQUFTLEdBQUcsSUFBSSxzQkFBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXBDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0ksTUFBTSx1QkFBdUIsR0FBRyxLQUFLLEVBQzFDLEtBQWMsRUFDZCxPQUF1QixFQUNjLEVBQUU7SUFDdkMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFBLDhDQUFjLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRXBELE1BQU0sZUFBZSxHQUFHLHVDQUFpQixDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxtQ0FBYSxDQUFDLE1BQU0sRUFBRTtRQUMzRixJQUFJLEVBQUUsSUFBSTtLQUNYLENBQUMsQ0FBQztJQUNILDZFQUE2RTtJQUM3RSwrRUFBK0U7SUFDL0UsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDM0UsT0FBTyx5Q0FBYSxDQUFDLGNBQWMsQ0FBYyxlQUFlLENBQUMsQ0FBQztJQUNwRSxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxJQUFBLDZDQUFhLEVBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQztJQUNqRixDQUFD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QUksQ0FBQyxXQUFXLENBQzVCLElBQUEsMERBQTBCLEVBQUM7WUFDekIsT0FBTyxFQUFFLGdCQUFnQixDQUFDLE9BQU87WUFDakMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQzdCLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7WUFDekMsT0FBTztZQUNQLE1BQU07U0FDUCxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFBLGtEQUFrQixFQUFDO1FBQ3hCLFdBQVc7UUFDWCxPQUFPO1FBQ1AsTUFBTTtRQUNOLFVBQVUsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO0tBQ3BDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQS9LVyxRQUFBLHVCQUF1QiwyQkErS2xDO0FBRVcsUUFBQSxPQUFPLEdBQUcsSUFBQSwrQ0FBb0IsRUFBQywrQkFBdUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2l0aER1cmFibGVFeGVjdXRpb24sIER1cmFibGVDb250ZXh0IH0gZnJvbSAnQGF3cy9kdXJhYmxlLWV4ZWN1dGlvbi1zZGstanMnO1xuaW1wb3J0IHtcbiAgUkRTQ2xpZW50LFxuICBEZXNjcmliZURCSW5zdGFuY2VzQ29tbWFuZCxcbiAgRGVzY3JpYmVEQkNsdXN0ZXJzQ29tbWFuZCxcbiAgU3RvcERCSW5zdGFuY2VDb21tYW5kLFxuICBTdG9wREJDbHVzdGVyQ29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXJkcyc7XG5pbXBvcnQgeyBXZWJDbGllbnQgfSBmcm9tICdAc2xhY2svd2ViLWFwaSc7XG5pbXBvcnQgeyBzZWNyZXRGZXRjaGVyIH0gZnJvbSAnYXdzLWxhbWJkYS1zZWNyZXQtZmV0Y2hlcic7XG5pbXBvcnQgeyBTdHJpY3RFbnZSZXNvbHZlciwgU3RyaWN0RW52VHlwZSB9IGZyb20gJ3N0cmljdC1lbnYtcmVzb2x2ZXInO1xuaW1wb3J0IHtcbiAgYnVpbGRTbGFja1N0b3BOb3RpZmljYXRpb24sXG4gIGJ1aWxkU3RvcHBlZFJlc3VsdCxcbiAgZGVjaWRlQWZ0ZXJUYWdNYXRjaCxcbiAgaXNEYkNsdXN0ZXJBdXRvU3RhcnQsXG4gIGlzRGJJbnN0YW5jZUF1dG9TdGFydCxcbiAgaXNTbGFja1NlY3JldCxcbiAgbWF0Y2hUYWcsXG4gIG5vcm1hbGl6ZUlucHV0LFxuICBOb09wUmVzdWx0LFxuICBwYXJzZVJkc1NvdXJjZUFybixcbiAgV2FpdFN0YXRlLFxuICBTbGFja1NlY3JldCxcbiAgU3RvcHBlZFJlc3VsdCxcbiAgVGFnLFxuICB0YWdNaXNtYXRjaE5vT3AsXG4gIHdhaXRTdHJhdGVneVVudGlsU3RhYmxlLFxuICB3YWl0U3RyYXRlZ3lVbnRpbFN0b3BwZWQsXG59IGZyb20gJy4vYXV0by1zdGFydC1wcmV2ZW50LnByZWRpY2F0ZXMnO1xuXG4vKiogU2hhcmVkIFJEUyBjbGllbnQgZm9yIGRlc2NyaWJlIGFuZCBzdG9wIEFQSSBjYWxscy4gKi9cbmNvbnN0IHJkc0NsaWVudCA9IG5ldyBSRFNDbGllbnQoe30pO1xuXG4vKipcbiAqIER1cmFibGUgTGFtYmRhIGhhbmRsZXIgZm9yIFJEUyBhdXRvLXN0YXJ0IHByZXZlbnRpb24uXG4gKlxuICogV29ya2Zsb3c6XG4gKiAxLiBXYWl0IDEgbWludXRlLCB0aGVuIHdhaXQgb24gRGVzY3JpYmVEQiogdW50aWwgdGhlIHJlc291cmNlIGxlYXZlcyB0cmFuc2l0aW9uYWwgc3RhdHVzZXMuXG4gKiAyLiBSZWFkIHRhZ3MgZnJvbSB0aGUgZGVzY3JpYmUgcmVzcG9uc2UgYFRhZ0xpc3RgOyBza2lwIHdoZW4ge0BsaW5rIG1hdGNoVGFnfSByZXR1cm5zIGZhbHNlLlxuICogMy4gSWYgc3RhdHVzIGlzIGBhdmFpbGFibGVgLCBjYWxsIFN0b3BEQiogYW5kIHdhaXQgdW50aWwgYHN0b3BwZWRgLlxuICogNC4gSWYgYWxyZWFkeSBgc3RvcHBlZGAgd2l0aG91dCBjYWxsaW5nIFN0b3BEQiosIHJldHVybiB7QGxpbmsgTm9PcFJlc3VsdH0gKG5vIFNsYWNrIG5vdGlmaWNhdGlvbikuXG4gKiA1LiBQb3N0IHRvIFNsYWNrIG9ubHkgd2hlbiBTdG9wREIqIHdhcyBpbnZva2VkIGFuZCB0aGUgcmVzb3VyY2UgcmVhY2hlZCBgc3RvcHBlZGAuXG4gKlxuICogVGFnIG1hdGNoaW5nIHVzZXMgUkRTIERlc2NyaWJlIEFQSXMgb25seTsgUmVzb3VyY2UgR3JvdXBzIFRhZ2dpbmcgQVBJIGlzIG5vdCB1c2VkLlxuICpcbiAqIEBwYXJhbSBpbnB1dCAtIGB7IGV2ZW50LCBwYXJhbXMgfWAgZnJvbSBFdmVudEJyaWRnZSBJbnB1dFRyYW5zZm9ybWVyIChzYW1lIHNoYXBlIHJlcXVpcmVkIGZvciBkaXJlY3QgSW52b2tlKS5cbiAqIEBwYXJhbSBjb250ZXh0IC0gRHVyYWJsZSBleGVjdXRpb24gY29udGV4dCBmb3Igc3RlcHMgYW5kIHdhaXRzLlxuICogQHJldHVybnMge0BsaW5rIFN0b3BwZWRSZXN1bHR9IG9yIHtAbGluayBOb09wUmVzdWx0fS5cbiAqIEB0aHJvd3MgV2hlbiB0aGUgcGF5bG9hZCBpcyBpbnZhbGlkLCByZXF1aXJlZCBlbnYgdmFycyBhcmUgbWlzc2luZywgdGhlIGV2ZW50IGlzIHVuc3VwcG9ydGVkLCBzZWNyZXRzIGFyZSBpbnZhbGlkLCBvciBzdG9wIGRpZCBub3QgcmVhY2ggYHN0b3BwZWRgLlxuICovXG5leHBvcnQgY29uc3QgcHJvY2Vzc0F1dG9TdGFydFByZXZlbnQgPSBhc3luYyAoXG4gIGlucHV0OiB1bmtub3duLFxuICBjb250ZXh0OiBEdXJhYmxlQ29udGV4dCxcbik6IFByb21pc2U8U3RvcHBlZFJlc3VsdCB8IE5vT3BSZXN1bHQ+ID0+IHtcbiAgY29uc3QgeyBldmVudCwgcGFyYW1zIH0gPSBub3JtYWxpemVJbnB1dChpbnB1dCk7XG4gIGNvbnN0IHsgZGV0YWlsLCAnZGV0YWlsLXR5cGUnOiBkZXRhaWxUeXBlIH0gPSBldmVudDtcblxuICBjb25zdCBzbGFja1NlY3JldE5hbWUgPSBTdHJpY3RFbnZSZXNvbHZlci5yZXNvbHZlKCdTTEFDS19TRUNSRVRfTkFNRScsIFN0cmljdEVudlR5cGUuU3RyaW5nLCB7XG4gICAgdHJpbTogdHJ1ZSxcbiAgfSk7XG4gIC8vIFJlcXVpcmVzIEFXUyBQYXJhbWV0ZXJzIGFuZCBTZWNyZXRzIEV4dGVuc2lvbiAoUGFyYW1zQW5kU2VjcmV0cyBsYXllcikgYW5kXG4gIC8vIEFXU19TRVNTSU9OX1RPS0VOIGZyb20gdGhlIExhbWJkYSBydW50aW1lIChhd3MtbGFtYmRhLXNlY3JldC1mZXRjaGVyIF4wLjYrKS5cbiAgY29uc3Qgc2xhY2tTZWNyZXRWYWx1ZSA9IGF3YWl0IGNvbnRleHQuc3RlcCgnZmV0Y2gtc2xhY2stc2VjcmV0JywgYXN5bmMgKCkgPT4ge1xuICAgIHJldHVybiBzZWNyZXRGZXRjaGVyLmdldFNlY3JldFZhbHVlPFNsYWNrU2VjcmV0PihzbGFja1NlY3JldE5hbWUpO1xuICB9KTtcblxuICBpZiAoIWlzU2xhY2tTZWNyZXQoc2xhY2tTZWNyZXRWYWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NsYWNrIHNlY3JldCBtdXN0IGJlIEpTT04gd2l0aCBub24tZW1wdHkgdG9rZW4gYW5kIGNoYW5uZWwuJyk7XG4gIH1cblxuICBjb25zdCBpc0luc3RhbmNlID0gaXNEYkluc3RhbmNlQXV0b1N0YXJ0KGRldGFpbFR5cGUsIGRldGFpbCk7XG4gIGNvbnN0IGlzQ2x1c3RlciA9IGlzRGJDbHVzdGVyQXV0b1N0YXJ0KGRldGFpbFR5cGUsIGRldGFpbCk7XG5cbiAgaWYgKCFpc0luc3RhbmNlICYmICFpc0NsdXN0ZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVW5zdXBwb3J0ZWQgZXZlbnQ6IGRldGFpbC10eXBlPSR7ZGV0YWlsVHlwZX0sIFNvdXJjZVR5cGU9JHtkZXRhaWwuU291cmNlVHlwZX0sIEV2ZW50SUQ9JHtkZXRhaWwuRXZlbnRJRH1gLFxuICAgICk7XG4gIH1cblxuICAvLyBJbml0aWFsIGRlbGF5IGJlZm9yZSB0aGUgZmlyc3QgZGVzY3JpYmUgKGFsbG93cyBSRFMgdG8gcmVwb3J0IGEgc3RhYmxlIHN0YXR1cykuXG4gIGF3YWl0IGNvbnRleHQud2FpdCh7IG1pbnV0ZXM6IDEgfSk7XG5cbiAgLy8gV2FpdCB1bnRpbCB0aGUgcmVzb3VyY2UgaXMgbm8gbG9uZ2VyIGluIGEgdHJhbnNpdGlvbmFsIHN0YXR1czsgY2FwdHVyZSBzdGF0dXMgYW5kIFRhZ0xpc3QuXG4gIGNvbnN0IGZpcnN0RGVzY3JpYmUgPSBhd2FpdCBjb250ZXh0LndhaXRGb3JDb25kaXRpb248V2FpdFN0YXRlPihcbiAgICBhc3luYyAoX3N0YXRlLCBfY3R4KSA9PiB7XG4gICAgICBpZiAoaXNJbnN0YW5jZSkge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCByZHNDbGllbnQuc2VuZChcbiAgICAgICAgICBuZXcgRGVzY3JpYmVEQkluc3RhbmNlc0NvbW1hbmQoe1xuICAgICAgICAgICAgREJJbnN0YW5jZUlkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBkYiA9IHJlcy5EQkluc3RhbmNlcz8uWzBdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXR1czogZGI/LkRCSW5zdGFuY2VTdGF0dXMgPz8gJ3Vua25vd24nLFxuICAgICAgICAgIGlkZW50aWZpZXI6IGRiPy5EQkluc3RhbmNlSWRlbnRpZmllciA/PyBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICB0YWdzOiAoZGI/LlRhZ0xpc3QgPz8gW10pIGFzIFRhZ1tdLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCByZHNDbGllbnQuc2VuZChcbiAgICAgICAgbmV3IERlc2NyaWJlREJDbHVzdGVyc0NvbW1hbmQoe1xuICAgICAgICAgIERCQ2x1c3RlcklkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBjb25zdCBjbHVzdGVyID0gcmVzLkRCQ2x1c3RlcnM/LlswXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogY2x1c3Rlcj8uU3RhdHVzID8/ICd1bmtub3duJyxcbiAgICAgICAgaWRlbnRpZmllcjogY2x1c3Rlcj8uREJDbHVzdGVySWRlbnRpZmllciA/PyBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgdGFnczogKGNsdXN0ZXI/LlRhZ0xpc3QgPz8gW10pIGFzIFRhZ1tdLFxuICAgICAgfTtcbiAgICB9LFxuICAgIHtcbiAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICBzdGF0dXM6ICdzdGFydGluZycsXG4gICAgICAgIGlkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgfSxcbiAgICAgIHdhaXRTdHJhdGVneTogd2FpdFN0cmF0ZWd5VW50aWxTdGFibGUsXG4gICAgfSxcbiAgKTtcblxuICAvLyBTa2lwIHdoZW4gVGFnTGlzdCBpcyBtaXNzaW5nIG9yIGRvZXMgbm90IG1hdGNoIHRhZ0tleSAvIHRhZ1ZhbHVlcy5cbiAgaWYgKCFtYXRjaFRhZyhwYXJhbXMsIGZpcnN0RGVzY3JpYmUudGFncykpIHtcbiAgICByZXR1cm4gdGFnTWlzbWF0Y2hOb09wKGZpcnN0RGVzY3JpYmUuc3RhdHVzKTtcbiAgfVxuXG4gIGxldCBkaWRTdG9wID0gZmFsc2U7XG4gIGxldCBmaW5hbFN0YXR1cyA9IGZpcnN0RGVzY3JpYmUuc3RhdHVzO1xuXG4gIC8vIFdoZW4gYXZhaWxhYmxlLCBpbnZva2UgU3RvcERCKiBhbmQgd2FpdCB1bnRpbCBzdG9wcGVkLlxuICBjb25zdCBhZnRlclRhZ01hdGNoID0gZGVjaWRlQWZ0ZXJUYWdNYXRjaChmaXJzdERlc2NyaWJlLnN0YXR1cyk7XG4gIGlmIChhZnRlclRhZ01hdGNoLmtpbmQgPT09ICdzdG9wJykge1xuICAgIGlmIChpc0luc3RhbmNlKSB7XG4gICAgICBhd2FpdCBjb250ZXh0LnN0ZXAoJ3N0b3AtZGItaW5zdGFuY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgIG5ldyBTdG9wREJJbnN0YW5jZUNvbW1hbmQoe1xuICAgICAgICAgICAgREJJbnN0YW5jZUlkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IGNvbnRleHQuc3RlcCgnc3RvcC1kYi1jbHVzdGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCByZHNDbGllbnQuc2VuZChcbiAgICAgICAgICBuZXcgU3RvcERCQ2x1c3RlckNvbW1hbmQoe1xuICAgICAgICAgICAgREJDbHVzdGVySWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBzdG9wcGVkID0gYXdhaXQgY29udGV4dC53YWl0Rm9yQ29uZGl0aW9uPFdhaXRTdGF0ZT4oXG4gICAgICBhc3luYyAoX3N0YXRlLCBfY3R4KSA9PiB7XG4gICAgICAgIGlmIChpc0luc3RhbmNlKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmRzQ2xpZW50LnNlbmQoXG4gICAgICAgICAgICBuZXcgRGVzY3JpYmVEQkluc3RhbmNlc0NvbW1hbmQoe1xuICAgICAgICAgICAgICBEQkluc3RhbmNlSWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGRiID0gcmVzLkRCSW5zdGFuY2VzPy5bMF07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXR1czogZGI/LkRCSW5zdGFuY2VTdGF0dXMgPz8gJ3Vua25vd24nLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogZGI/LkRCSW5zdGFuY2VJZGVudGlmaWVyID8/IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCByZHNDbGllbnQuc2VuZChcbiAgICAgICAgICBuZXcgRGVzY3JpYmVEQkNsdXN0ZXJzQ29tbWFuZCh7XG4gICAgICAgICAgICBEQkNsdXN0ZXJJZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY2x1c3RlciA9IHJlcy5EQkNsdXN0ZXJzPy5bMF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhdHVzOiBjbHVzdGVyPy5TdGF0dXMgPz8gJ3Vua25vd24nLFxuICAgICAgICAgIGlkZW50aWZpZXI6IGNsdXN0ZXI/LkRCQ2x1c3RlcklkZW50aWZpZXIgPz8gZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgICBzdGF0dXM6IGZpcnN0RGVzY3JpYmUuc3RhdHVzLFxuICAgICAgICAgIGlkZW50aWZpZXI6IGZpcnN0RGVzY3JpYmUuaWRlbnRpZmllcixcbiAgICAgICAgfSxcbiAgICAgICAgd2FpdFN0cmF0ZWd5OiB3YWl0U3RyYXRlZ3lVbnRpbFN0b3BwZWQsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBkaWRTdG9wID0gdHJ1ZTtcbiAgICBmaW5hbFN0YXR1cyA9IHN0b3BwZWQuc3RhdHVzO1xuICB9XG5cbiAgLy8gQWxyZWFkeSBzdG9wcGVkIHdpdGhvdXQgY2FsbGluZyBTdG9wREIqIChlLmcuIHN0b3BwZWQgYnkgYW5vdGhlciBwcm9jZXNzKSDigJQgbm8gU2xhY2sgbm90aWZpY2F0aW9uLlxuICBpZiAoIWRpZFN0b3ApIHtcbiAgICBpZiAoYWZ0ZXJUYWdNYXRjaC5raW5kID09PSAnbm8tb3AnKSB7XG4gICAgICByZXR1cm4gYWZ0ZXJUYWdNYXRjaC5yZXN1bHQ7XG4gICAgfVxuICAgIGlmIChhZnRlclRhZ01hdGNoLmtpbmQgPT09ICdlcnJvcicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihhZnRlclRhZ01hdGNoLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZhaWwgd2hlbiBTdG9wREIqIHdhcyBjYWxsZWQgYnV0IHRoZSByZXNvdXJjZSBkaWQgbm90IHJlYWNoIHN0b3BwZWQuXG4gIGlmIChmaW5hbFN0YXR1cyAhPT0gJ3N0b3BwZWQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEQiBzdGF0dXMgaXMgbm90IHN0b3BwZWQgYWZ0ZXIgcHJvY2Vzc2luZzogJHtmaW5hbFN0YXR1c31gKTtcbiAgfVxuXG4gIGNvbnN0IHsgcmVnaW9uLCBhY2NvdW50IH0gPSBwYXJzZVJkc1NvdXJjZUFybihkZXRhaWwuU291cmNlQXJuKTtcblxuICBjb25zdCBjbGllbnQgPSBuZXcgV2ViQ2xpZW50KHNsYWNrU2VjcmV0VmFsdWUudG9rZW4pO1xuXG4gIGF3YWl0IGNvbnRleHQuc3RlcCgncG9zdC1zbGFjay1tZXNzYWdlcycsIGFzeW5jICgpID0+IHtcbiAgICByZXR1cm4gY2xpZW50LmNoYXQucG9zdE1lc3NhZ2UoXG4gICAgICBidWlsZFNsYWNrU3RvcE5vdGlmaWNhdGlvbih7XG4gICAgICAgIGNoYW5uZWw6IHNsYWNrU2VjcmV0VmFsdWUuY2hhbm5lbCxcbiAgICAgICAgc291cmNlVHlwZTogZGV0YWlsLlNvdXJjZVR5cGUsXG4gICAgICAgIHNvdXJjZUlkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICBhY2NvdW50LFxuICAgICAgICByZWdpb24sXG4gICAgICB9KSxcbiAgICApO1xuICB9KTtcblxuICByZXR1cm4gYnVpbGRTdG9wcGVkUmVzdWx0KHtcbiAgICBmaW5hbFN0YXR1cyxcbiAgICBhY2NvdW50LFxuICAgIHJlZ2lvbixcbiAgICBpZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IHdpdGhEdXJhYmxlRXhlY3V0aW9uKHByb2Nlc3NBdXRvU3RhcnRQcmV2ZW50KTtcbiJdfQ==
|