@cdktn/cli-core 0.23.3 → 0.23.4
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/LICENSE +355 -0
- package/build/lib/cdktf-config.js +8 -18
- package/build/lib/cdktf-project.js +3 -3
- package/build/lib/cdktf-stack.d.ts +6 -0
- package/build/lib/cdktf-stack.d.ts.map +1 -1
- package/build/lib/cdktf-stack.js +18 -1
- package/build/lib/convert.js +10 -19
- package/build/lib/dependencies/dependency-manager.d.ts.map +1 -1
- package/build/lib/dependencies/dependency-manager.js +8 -18
- package/build/lib/dependencies/package-manager.js +29 -25
- package/build/lib/dependencies/prebuilt-providers.js +16 -25
- package/build/lib/dependencies/registry-api.js +10 -19
- package/build/lib/dependencies/version-constraints.js +11 -20
- package/build/lib/error-reporting.js +13 -22
- package/build/lib/errors.d.ts.map +1 -1
- package/build/lib/execution-logs.js +3 -2
- package/build/lib/get.js +11 -21
- package/build/lib/helpers/stack-helpers.js +9 -8
- package/build/lib/init.js +11 -21
- package/build/lib/installed-binary-check.d.ts +12 -0
- package/build/lib/installed-binary-check.d.ts.map +1 -0
- package/build/lib/installed-binary-check.js +62 -0
- package/build/lib/local-provider-constraints.js +8 -18
- package/build/lib/models/deploy-machine.d.ts +10 -0
- package/build/lib/models/deploy-machine.d.ts.map +1 -1
- package/build/lib/models/deploy-machine.js +49 -14
- package/build/lib/models/interactive-process.js +3 -2
- package/build/lib/models/schema.js +8 -18
- package/build/lib/models/terraform-cli.d.ts.map +1 -1
- package/build/lib/models/terraform-cli.js +11 -21
- package/build/lib/models/terraform.d.ts +1 -0
- package/build/lib/models/terraform.d.ts.map +1 -1
- package/build/lib/models/terraform.js +3 -3
- package/build/lib/output.d.ts.map +1 -1
- package/build/lib/output.js +11 -21
- package/build/lib/provider-add.js +3 -2
- package/build/lib/server/terraform-logs.js +3 -2
- package/build/lib/synth-stack.js +8 -18
- package/build/lib/synth.js +10 -19
- package/build/lib/terraform-json.js +8 -18
- package/build/lib/watch.js +10 -19
- package/package.json +20 -19
- package/templates/csharp/cdktf.json +4 -0
- package/templates/go/cdktf.json +4 -0
- package/templates/java/cdktf.json +4 -0
- package/templates/java/gradlew +0 -0
- package/templates/python/cdktf.json +4 -0
- package/templates/python-pip/cdktf.json +4 -0
- package/templates/typescript/cdktf.json +4 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CdktfProject = void 0;
|
|
4
|
-
exports.isWaitingForUserInputUpdate = isWaitingForUserInputUpdate;
|
|
3
|
+
exports.CdktfProject = exports.isWaitingForUserInputUpdate = void 0;
|
|
5
4
|
// Copyright (c) HashiCorp, Inc
|
|
6
5
|
// SPDX-License-Identifier: MPL-2.0
|
|
7
6
|
const commons_1 = require("@cdktn/commons");
|
|
@@ -14,6 +13,7 @@ const cdktf_project_io_handler_1 = require("./cdktf-project-io-handler");
|
|
|
14
13
|
function isWaitingForUserInputUpdate(update) {
|
|
15
14
|
return ["waiting for approval", "waiting for sentinel override"].includes(update.type);
|
|
16
15
|
}
|
|
16
|
+
exports.isWaitingForUserInputUpdate = isWaitingForUserInputUpdate;
|
|
17
17
|
class CdktfProject {
|
|
18
18
|
constructor({ synthCommand, outDir, onUpdate, onLog, workingDirectory = process.cwd(), synthOrigin, hcl = false, }) {
|
|
19
19
|
// Set during deploy / destroy
|
|
@@ -367,4 +367,4 @@ class CdktfProject {
|
|
|
367
367
|
}
|
|
368
368
|
}
|
|
369
369
|
exports.CdktfProject = CdktfProject;
|
|
370
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrdGYtcHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2RrdGYtcHJvamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE4SEEsa0VBTUM7QUFwSUQsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyw0Q0FNd0I7QUFDeEIsK0NBQTBFO0FBQzFFLG1DQUEyQztBQUMzQywrQ0FRdUI7QUFFdkIscURBQTJEO0FBQzNELDJEQVFpQztBQUNqQyx5RUFBbUU7QUErRm5FLFNBQWdCLDJCQUEyQixDQUN6QyxNQUFtQztJQUVuQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsK0JBQStCLENBQUMsQ0FBQyxRQUFRLENBQ3ZFLE1BQU0sQ0FBQyxJQUFJLENBQ1osQ0FBQztBQUNKLENBQUM7QUFjRCxNQUFhLFlBQVk7SUFxQnZCLFlBQVksRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUNoQyxXQUFXLEVBQ1gsR0FBRyxHQUFHLEtBQUssR0FDUztRQWhCdEIsOEJBQThCO1FBQ3ZCLGdCQUFXLEdBQWlCLEVBQUUsQ0FBQztRQUN0QywrQ0FBK0M7UUFDdkMsc0NBQWlDLEdBQ3ZDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQWFULElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUN6QyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixNQUFNLEVBQUUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFJLENB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LDZCQUE2QixDQUN6QyxPQUFpQixFQUNqQixnQkFBMEIsRUFDMUIsWUFBc0I7UUFFdEIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckMsTUFBTSxLQUFLLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFFLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUF6aUJELG9DQXlpQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHtcbiAgRXJyb3JzLFxuICBlbnN1cmVBbGxTZXR0bGVkQmVmb3JlVGhyb3dpbmcsXG4gIGxvZ2dlcixcbiAgcmVhZENvbmZpZ1N5bmMsXG4gIHNlbmRUZWxlbWV0cnksXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgU3ludGhlc2l6ZWRTdGFjaywgU3ludGhPcmlnaW4sIFN5bnRoU3RhY2sgfSBmcm9tIFwiLi9zeW50aC1zdGFja1wiO1xuaW1wb3J0IHsgcHJpbnRBbm5vdGF0aW9ucyB9IGZyb20gXCIuL3N5bnRoXCI7XG5pbXBvcnQge1xuICBDZGt0ZlN0YWNrLFxuICBFeHRlcm5hbFN0YWNrQXBwcm92YWxVcGRhdGUsXG4gIEV4dGVybmFsU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlLFxuICBTdGFja0FwcHJvdmFsVXBkYXRlLFxuICBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGUsXG4gIFN0YWNrVXBkYXRlLFxuICBTdGFja1VzZXJJbnB1dFVwZGF0ZSxcbn0gZnJvbSBcIi4vY2RrdGYtc3RhY2tcIjtcbmltcG9ydCB7IE5lc3RlZFRlcnJhZm9ybU91dHB1dHMgfSBmcm9tIFwiLi9vdXRwdXRcIjtcbmltcG9ydCB7IGNyZWF0ZUVuaGFuY2VMb2dNZXNzYWdlIH0gZnJvbSBcIi4vZXhlY3V0aW9uLWxvZ3NcIjtcbmltcG9ydCB7XG4gIGNoZWNrSWZBbGxEZXBlbmRhbnRzQXJlSW5jbHVkZWQsXG4gIGNoZWNrSWZBbGxEZXBlbmRlbmNpZXNBcmVJbmNsdWRlZCxcbiAgZmluZEFsbE5lc3RlZERlcGVuZGFudFN0YWNrcyxcbiAgZ2V0TXVsdGlwbGVTdGFja3MsXG4gIGdldFNpbmdsZVN0YWNrLFxuICBnZXRTdGFja1dpdGhOb1VubWV0RGVwZW5kYW50cyxcbiAgZ2V0U3RhY2tXaXRoTm9Vbm1ldERlcGVuZGVuY2llcyxcbn0gZnJvbSBcIi4vaGVscGVycy9zdGFjay1oZWxwZXJzXCI7XG5pbXBvcnQgeyBDZGt0ZlByb2plY3RJT0hhbmRsZXIgfSBmcm9tIFwiLi9jZGt0Zi1wcm9qZWN0LWlvLWhhbmRsZXJcIjtcblxudHlwZSBNdWx0aVN0YWNrQXBwcm92YWxVcGRhdGUgPSB7XG4gIHR5cGU6IFwid2FpdGluZyBmb3IgYXBwcm92YWxcIjtcbiAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIGFwcHJvdmU6ICgpID0+IHZvaWQ7XG4gIGRpc21pc3M6ICgpID0+IHZvaWQ7XG4gIHN0b3A6ICgpID0+IHZvaWQ7XG59O1xuXG50eXBlIE11bHRpU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlID0ge1xuICB0eXBlOiBcIndhaXRpbmcgZm9yIHNlbnRpbmVsIG92ZXJyaWRlXCI7XG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICBvdmVycmlkZTogKCkgPT4gdm9pZDtcbiAgcmVqZWN0OiAoKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgTXVsdGlTdGFja1VwZGF0ZSA9XG4gIHwgTXVsdGlTdGFja0FwcHJvdmFsVXBkYXRlXG4gIHwgTXVsdGlTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGU7XG5cbmV4cG9ydCB0eXBlIFByb2plY3RVcGRhdGUgPVxuICB8IHtcbiAgICAgIHR5cGU6IFwic3ludGhlc2l6aW5nXCI7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwic3ludGhlc2l6ZWRcIjtcbiAgICAgIHN0YWNrczogU3ludGhlc2l6ZWRTdGFja1tdO1xuICAgICAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuICAgIH1cbiAgfCBTdGFja1VwZGF0ZVxuICB8IE11bHRpU3RhY2tVcGRhdGU7XG5cbmV4cG9ydCB0eXBlIFNpbmdsZVN0YWNrT3B0aW9ucyA9IHtcbiAgc3RhY2tOYW1lPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgTXVsdGlwbGVTdGFja09wdGlvbnMgPSB7XG4gIHN0YWNrTmFtZXM/OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFNraXBTeW50aE9wdGlvbnMgPSB7XG4gIHNraXBTeW50aD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBTa2lwUHJvdmlkZXJMb2NrT3B0aW9ucyA9IHtcbiAgc2tpcFByb3ZpZGVyTG9jaz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBGZXRjaE91dHB1dE9wdGlvbnMgPSBTa2lwU3ludGhPcHRpb25zICZcbiAgU2tpcFByb3ZpZGVyTG9ja09wdGlvbnMgJlxuICBNdWx0aXBsZVN0YWNrT3B0aW9ucztcblxuZXhwb3J0IHR5cGUgQXV0b0FwcHJvdmVPcHRpb25zID0ge1xuICBhdXRvQXBwcm92ZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBEaWZmT3B0aW9ucyA9IFNpbmdsZVN0YWNrT3B0aW9ucyAmXG4gIFNraXBQcm92aWRlckxvY2tPcHRpb25zICZcbiAgU2tpcFN5bnRoT3B0aW9ucyAmIHtcbiAgICByZWZyZXNoT25seT86IGJvb2xlYW47XG4gICAgdGVycmFmb3JtUGFyYWxsZWxpc20/OiBudW1iZXI7XG4gICAgdmFycz86IHN0cmluZ1tdO1xuICAgIHZhckZpbGVzPzogc3RyaW5nW107XG4gICAgbm9Db2xvcj86IGJvb2xlYW47XG4gICAgbWlncmF0ZVN0YXRlPzogYm9vbGVhbjtcbiAgfTtcblxuZXhwb3J0IHR5cGUgTXV0YXRpb25PcHRpb25zID0gTXVsdGlwbGVTdGFja09wdGlvbnMgJlxuICBTa2lwUHJvdmlkZXJMb2NrT3B0aW9ucyAmXG4gIFNraXBTeW50aE9wdGlvbnMgJlxuICBBdXRvQXBwcm92ZU9wdGlvbnMgJiB7XG4gICAgcmVmcmVzaE9ubHk/OiBib29sZWFuO1xuICAgIGlnbm9yZU1pc3NpbmdTdGFja0RlcGVuZGVuY2llcz86IGJvb2xlYW47XG4gICAgcGFyYWxsZWxpc20/OiBudW1iZXI7XG4gICAgdGVycmFmb3JtUGFyYWxsZWxpc20/OiBudW1iZXI7XG4gICAgdmFycz86IHN0cmluZ1tdO1xuICAgIHZhckZpbGVzPzogc3RyaW5nW107XG4gICAgbm9Db2xvcj86IGJvb2xlYW47XG4gICAgbWlncmF0ZVN0YXRlPzogYm9vbGVhbjtcbiAgfTtcblxuZXhwb3J0IHR5cGUgTG9nTWVzc2FnZSA9IHtcbiAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIG1lc3NhZ2VXaXRoQ29uc3RydWN0UGF0aD86IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufTtcblxuLy8gU3RvcmVzIGEgbG9nIHZhbHVlIG9mIGEgY2VydGFpbiB0eXBlIHVudGlsIGl0IGNhbiBiZSBzZW50XG50eXBlIEJ1ZmZlcmVkPFQsIFY+ID0ge1xuICBjYjogKGl0ZW06IFQpID0+IHZvaWQ7XG4gIHZhbHVlOiBUO1xuICB0eXBlOiBWO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2FpdGluZ0ZvclVzZXJJbnB1dFVwZGF0ZShcbiAgdXBkYXRlOiBQcm9qZWN0VXBkYXRlIHwgU3RhY2tVcGRhdGUsXG4pIHtcbiAgcmV0dXJuIFtcIndhaXRpbmcgZm9yIGFwcHJvdmFsXCIsIFwid2FpdGluZyBmb3Igc2VudGluZWwgb3ZlcnJpZGVcIl0uaW5jbHVkZXMoXG4gICAgdXBkYXRlLnR5cGUsXG4gICk7XG59XG5cbmV4cG9ydCB0eXBlIFByb2plY3RFdmVudCA9XG4gIHwgQnVmZmVyZWQ8UHJvamVjdFVwZGF0ZSwgXCJwcm9qZWN0VXBkYXRlXCI+XG4gIHwgQnVmZmVyZWQ8TG9nTWVzc2FnZSwgXCJsb2dNZXNzYWdlXCI+O1xuZXhwb3J0IHR5cGUgQ2RrdGZQcm9qZWN0T3B0aW9ucyA9IHtcbiAgc3ludGhDb21tYW5kOiBzdHJpbmc7XG4gIG91dERpcjogc3RyaW5nO1xuICBvblVwZGF0ZTogKHVwZGF0ZTogUHJvamVjdFVwZGF0ZSkgPT4gdm9pZDtcbiAgb25Mb2c/OiAobG9nOiBMb2dNZXNzYWdlKSA9PiB2b2lkO1xuICB3b3JraW5nRGlyZWN0b3J5Pzogc3RyaW5nO1xuICBzeW50aE9yaWdpbj86IFN5bnRoT3JpZ2luO1xuICBoY2w/OiBib29sZWFuO1xufTtcbmV4cG9ydCBjbGFzcyBDZGt0ZlByb2plY3Qge1xuICBwdWJsaWMgc3RhY2tzPzogU3ludGhlc2l6ZWRTdGFja1tdO1xuICBwdWJsaWMgaGFyZEFib3J0OiAoKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgc3ludGhDb21tYW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgb3V0RGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgd29ya2luZ0RpcmVjdG9yeTogc3RyaW5nO1xuICBwcml2YXRlIG9uVXBkYXRlOiAodXBkYXRlOiBQcm9qZWN0VXBkYXRlKSA9PiB2b2lkO1xuICBwcml2YXRlIG9uTG9nPzogKGxvZzogTG9nTWVzc2FnZSkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWw7XG4gIHByaXZhdGUgc3ludGhPcmlnaW4/OiBTeW50aE9yaWdpbjtcbiAgcHJpdmF0ZSBoY2w/OiBib29sZWFuO1xuXG4gIC8vIFNldCBkdXJpbmcgZGVwbG95IC8gZGVzdHJveVxuICBwdWJsaWMgc3RhY2tzVG9SdW46IENka3RmU3RhY2tbXSA9IFtdO1xuICAvLyBUaGlzIG1lYW5zIHN0aCBkaWZmZXJlbnQgaW4gZGVwbG95IC8gZGVzdHJveVxuICBwcml2YXRlIHN0b3BBbGxTdGFja3NUaGF0Q2FuTm90UnVuV2l0aG91dDogKHN0YWNrTmFtZTogc3RyaW5nKSA9PiB2b2lkID1cbiAgICAoKSA9PiB7fTtcblxuICBwcml2YXRlIGlvSGFuZGxlcjogQ2RrdGZQcm9qZWN0SU9IYW5kbGVyO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBzeW50aENvbW1hbmQsXG4gICAgb3V0RGlyLFxuICAgIG9uVXBkYXRlLFxuICAgIG9uTG9nLFxuICAgIHdvcmtpbmdEaXJlY3RvcnkgPSBwcm9jZXNzLmN3ZCgpLFxuICAgIHN5bnRoT3JpZ2luLFxuICAgIGhjbCA9IGZhbHNlLFxuICB9OiBDZGt0ZlByb2plY3RPcHRpb25zKSB7XG4gICAgdGhpcy5zeW50aENvbW1hbmQgPSBzeW50aENvbW1hbmQ7XG4gICAgdGhpcy5vdXREaXIgPSBvdXREaXI7XG4gICAgdGhpcy53b3JraW5nRGlyZWN0b3J5ID0gd29ya2luZ0RpcmVjdG9yeTtcbiAgICB0aGlzLm9uVXBkYXRlID0gb25VcGRhdGU7XG4gICAgdGhpcy5vbkxvZyA9IG9uTG9nO1xuICAgIGNvbnN0IGFjID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIHRoaXMuYWJvcnRTaWduYWwgPSBhYy5zaWduYWw7XG4gICAgdGhpcy5zeW50aE9yaWdpbiA9IHN5bnRoT3JpZ2luO1xuICAgIHRoaXMuaGNsID1cbiAgICAgIHByb2Nlc3MuZW52LlNZTlRIX0hDTF9PVVRQVVQgPT09IFwidHJ1ZVwiIHx8XG4gICAgICBwcm9jZXNzLmVudi5TWU5USF9IQ0xfT1VUUFVUID09PSBcIjFcIiB8fFxuICAgICAgaGNsO1xuXG4gICAgdGhpcy5oYXJkQWJvcnQgPSBhYy5hYm9ydC5iaW5kKGFjKTtcbiAgICB0aGlzLmlvSGFuZGxlciA9IG5ldyBDZGt0ZlByb2plY3RJT0hhbmRsZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcEFsbFN0YWNrcygpIHtcbiAgICB0aGlzLnN0YWNrc1RvUnVuLmZvckVhY2goKHN0YWNrKSA9PiBzdGFjay5zdG9wKCkpO1xuICAgIHRoaXMuaW9IYW5kbGVyLmZpbHRlclVzZXJJbnB1dEV2ZW50c0Zyb21CdWZmZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVXNlclVwZGF0ZTxcbiAgICBUIGV4dGVuZHMgTXVsdGlTdGFja1VwZGF0ZSxcbiAgICBWIGV4dGVuZHMgU3RhY2tVc2VySW5wdXRVcGRhdGUsXG4gID4oXG4gICAgdXBkYXRlOiBTdGFja1VzZXJJbnB1dFVwZGF0ZSxcbiAgICBvcGVyYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCAodXBkYXRlOiBWKSA9PiB2b2lkPixcbiAgICBvcmlnaW5hbENhbGxiYWNrOiAodXBkYXRlVG9TZW5kOiBQcm9qZWN0VXBkYXRlKSA9PiB2b2lkLFxuICAgIGV2ZW50VHlwZTogVFtcInR5cGVcIl0sXG4gICkge1xuICAgIGNvbnN0IGNhbGxiYWNrcyA9ICh1cGRhdGU6IFYpID0+XG4gICAgICBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG9wZXJhdGlvbnMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgcGFzc2VkIGluIHRvIG1ha2UgdHlwZXNjcmlwdCBoYXBweSBvbmx5XG4gICAgICAgICAgICAoXzogVikgPT4ge1xuICAgICAgICAgICAgICB2YWx1ZSh1cGRhdGUpO1xuXG4gICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZGVmZXIgdGhlc2UgY2FsbHMgZm9yIHRoZSBjYXNlIHRoYXQgYXBwcm92ZSgpIGlzIGluc3RhbnRseSBpbnZva2VkXG4gICAgICAgICAgICAgIC8vIGluIHRoZSBsaXN0ZW5lciB0aGF0IHJlY2VpdmVzIHRoZXNlIGNhbGxiYWNrcyBhcyBpdCBvdGhlcndpc2Ugd291bGQgYWxyZWFkeVxuICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIFwid2FpdGluZyBmb3Igc3RhY2sgYXBwcm92YWxcIiBldmVudCBmcm9tIHRoZSBidWZmZXIgYmVmb3JlIHdlIGV2ZW5cbiAgICAgICAgICAgICAgLy8gc2V0IHdhaXRpbmdGb3JBcHByb3ZhbCB0byB0cnVlIChhdCB0aGUgZW5kIG9mIHRoaXMgaWYgc3RhdGVtZW50KSB3aGljaCByZXN1bHRzXG4gICAgICAgICAgICAgIC8vIGluIGJ1ZmZlcmVkIHVwZGF0ZXMgd2hpY2ggd2lsbCBuZXZlciB1bmJsb2NrXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5pb0hhbmRsZXIucmVzdW1lQWZ0ZXJVc2VySW5wdXQodXBkYXRlLnN0YWNrTmFtZSksXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXTtcbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgLy8gYWx3YXlzIHNlbmQgdG8gYnVmZmVyLCBhcyByZXN1bWVBZnRlclVzZXJJbnB1dCgpIGFsd2F5cyBleHBlY3RzIGEgbWF0Y2hpbmcgZXZlbnRcbiAgICB0aGlzLmlvSGFuZGxlci5wdXNoRXZlbnQoe1xuICAgICAgY2I6IG9yaWdpbmFsQ2FsbGJhY2ssXG4gICAgICB2YWx1ZToge1xuICAgICAgICB0eXBlOiBldmVudFR5cGUsXG4gICAgICAgIHN0YWNrTmFtZTogdXBkYXRlLnN0YWNrTmFtZSxcbiAgICAgICAgLi4uY2FsbGJhY2tzKHVwZGF0ZSBhcyBWKSxcbiAgICAgIH0gYXMgVCxcbiAgICAgIHR5cGU6IFwicHJvamVjdFVwZGF0ZVwiLFxuICAgIH0pO1xuXG4gICAgLy8gaWYgd2UgYXJlbid0IGFscmVhZHkgd2FpdGluZywgdGhpcyBuZWVkcyB0byBnbyB0byBjYigpIHRvbyB0byBhcnJpdmUgYXQgdGhlIFVJXG4gICAgaWYgKCF0aGlzLmlvSGFuZGxlci5pc1dhaXRpbmdGb3JVc2VySW5wdXQoKSkge1xuICAgICAgb3JpZ2luYWxDYWxsYmFjayh7XG4gICAgICAgIHR5cGU6IGV2ZW50VHlwZSxcbiAgICAgICAgc3RhY2tOYW1lOiB1cGRhdGUuc3RhY2tOYW1lLFxuICAgICAgICAuLi5jYWxsYmFja3ModXBkYXRlIGFzIFYpLFxuICAgICAgfSBhcyBUKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVVzZXJJbnB1dFByb2Nlc3MoY2I6ICh1cGRhdGVUb1NlbmQ6IFByb2plY3RVcGRhdGUpID0+IHZvaWQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdXBkYXRlOlxuICAgICAgICB8IFN0YWNrVXBkYXRlXG4gICAgICAgIHwgU3RhY2tBcHByb3ZhbFVwZGF0ZVxuICAgICAgICB8IEV4dGVybmFsU3RhY2tBcHByb3ZhbFVwZGF0ZVxuICAgICAgICB8IFN0YWNrU2VudGluZWxPdmVycmlkZVVwZGF0ZVxuICAgICAgICB8IEV4dGVybmFsU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlLFxuICAgICkgPT4ge1xuICAgICAgaWYgKHVwZGF0ZS50eXBlID09PSBcImV4dGVybmFsIHN0YWNrIGFwcHJvdmFsIHJlcGx5XCIpIHtcbiAgICAgICAgaWYgKCF1cGRhdGUuYXBwcm92ZWQpIHtcbiAgICAgICAgICB0aGlzLnN0b3BBbGxTdGFja3NUaGF0Q2FuTm90UnVuV2l0aG91dCh1cGRhdGUuc3RhY2tOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlvSGFuZGxlci5yZXN1bWVBZnRlclVzZXJJbnB1dCh1cGRhdGUuc3RhY2tOYW1lKTtcbiAgICAgICAgcmV0dXJuOyAvLyBha2EgZG9uJ3Qgc2VuZCB0aGlzIGV2ZW50IHRvIGFueSBidWZmZXJcbiAgICAgIH1cbiAgICAgIGlmICh1cGRhdGUudHlwZSA9PT0gXCJleHRlcm5hbCBzdGFjayBzZW50aW5lbCBvdmVycmlkZSByZXBseVwiKSB7XG4gICAgICAgIGlmICghdXBkYXRlLm92ZXJyaWRkZW4pIHtcbiAgICAgICAgICB0aGlzLnN0b3BBbGxTdGFja3NUaGF0Q2FuTm90UnVuV2l0aG91dCh1cGRhdGUuc3RhY2tOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlvSGFuZGxlci5yZXN1bWVBZnRlclVzZXJJbnB1dCh1cGRhdGUuc3RhY2tOYW1lKTtcbiAgICAgICAgcmV0dXJuOyAvLyBha2EgZG9uJ3Qgc2VuZCB0aGlzIGV2ZW50IHRvIGFueSBidWZmZXJcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB1cGRhdGUudHlwZSA9PT0gXCJ3YWl0aW5nIGZvciBzdGFjayBhcHByb3ZhbFwiIHx8XG4gICAgICAgIHVwZGF0ZS50eXBlID09PSBcIndhaXRpbmcgZm9yIHN0YWNrIHNlbnRpbmVsIG92ZXJyaWRlXCJcbiAgICAgICkge1xuICAgICAgICBpZiAodXBkYXRlLnR5cGUgPT09IFwid2FpdGluZyBmb3Igc3RhY2sgYXBwcm92YWxcIikge1xuICAgICAgICAgIHRoaXMuaGFuZGxlVXNlclVwZGF0ZTxNdWx0aVN0YWNrQXBwcm92YWxVcGRhdGUsIFN0YWNrQXBwcm92YWxVcGRhdGU+KFxuICAgICAgICAgICAgdXBkYXRlLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhcHByb3ZlOiAodXBkYXRlKSA9PiB1cGRhdGUuYXBwcm92ZSgpLFxuICAgICAgICAgICAgICBkaXNtaXNzOiAodXBkYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgdXBkYXRlLnJlamVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcEFsbFN0YWNrc1RoYXRDYW5Ob3RSdW5XaXRob3V0KHVwZGF0ZS5zdGFja05hbWUpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBzdG9wOiAodXBkYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgdXBkYXRlLnJlamVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcEFsbFN0YWNrcygpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNiLFxuICAgICAgICAgICAgXCJ3YWl0aW5nIGZvciBhcHByb3ZhbFwiLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodXBkYXRlLnR5cGUgPT09IFwid2FpdGluZyBmb3Igc3RhY2sgc2VudGluZWwgb3ZlcnJpZGVcIikge1xuICAgICAgICAgIHRoaXMuaGFuZGxlVXNlclVwZGF0ZTxcbiAgICAgICAgICAgIE11bHRpU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlLFxuICAgICAgICAgICAgU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlXG4gICAgICAgICAgPihcbiAgICAgICAgICAgIHVwZGF0ZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb3ZlcnJpZGU6ICh1cGRhdGUpID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGUub3ZlcnJpZGUoKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcmVqZWN0OiAodXBkYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgdXBkYXRlLnJlamVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcEFsbFN0YWNrc1RoYXRDYW5Ob3RSdW5XaXRob3V0KHVwZGF0ZS5zdGFja05hbWUpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNiLFxuICAgICAgICAgICAgXCJ3YWl0aW5nIGZvciBzZW50aW5lbCBvdmVycmlkZVwiLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlvSGFuZGxlci5hd2FpdFVzZXJJbnB1dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuaW9IYW5kbGVyLmlzV2FpdGluZ0ZvclVzZXJJbnB1dCgpKSB7XG4gICAgICAgICAgdGhpcy5pb0hhbmRsZXIucHVzaEV2ZW50KHtcbiAgICAgICAgICAgIGNiLFxuICAgICAgICAgICAgdmFsdWU6IHVwZGF0ZSxcbiAgICAgICAgICAgIHR5cGU6IFwicHJvamVjdFVwZGF0ZVwiLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNiKHVwZGF0ZSBhcyBQcm9qZWN0VXBkYXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RhY2tFeGVjdXRvcihcbiAgICBzdGFjazogU3ludGhlc2l6ZWRTdGFjayxcbiAgICBvcHRzOiBBdXRvQXBwcm92ZU9wdGlvbnMgPSB7fSxcbiAgKSB7XG4gICAgY29uc3QgZW5oYW5jZUxvZ01lc3NhZ2UgPSBjcmVhdGVFbmhhbmNlTG9nTWVzc2FnZShzdGFjayk7XG4gICAgY29uc3Qgb25Mb2cgPSB0aGlzLmlvSGFuZGxlci5idWZmZXJXaGlsZUF3YWl0aW5nVXNlcklucHV0KHRoaXMub25Mb2cpO1xuICAgIHJldHVybiBuZXcgQ2RrdGZTdGFjayh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgc3RhY2ssXG4gICAgICBvblVwZGF0ZTogdGhpcy5oYW5kbGVVc2VySW5wdXRQcm9jZXNzKHRoaXMub25VcGRhdGUpLFxuICAgICAgb25Mb2c6IG9uTG9nXG4gICAgICAgID8gKHsgbWVzc2FnZSB9KSA9PlxuICAgICAgICAgICAgb25Mb2coe1xuICAgICAgICAgICAgICBzdGFja05hbWU6IHN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2VXaXRoQ29uc3RydWN0UGF0aDogZW5oYW5jZUxvZ01lc3NhZ2UobWVzc2FnZSksXG4gICAgICAgICAgICB9KVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGFib3J0U2lnbmFsOiB0aGlzLmFib3J0U2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBvdXRwdXRzQnlDb25zdHJ1Y3RJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFja3NUb1J1bi5yZWR1Y2UoXG4gICAgICAoYWNjLCBzdGFjaykgPT4gKHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICAuLi5zdGFjay5vdXRwdXRzQnlDb25zdHJ1Y3RJZCxcbiAgICAgIH0pLFxuICAgICAge30gYXMgTmVzdGVkVGVycmFmb3JtT3V0cHV0cyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHN5bnRoKG5vQ29sb3I/OiBib29sZWFuKSB7XG4gICAgdGhpcy5vblVwZGF0ZSh7XG4gICAgICB0eXBlOiBcInN5bnRoZXNpemluZ1wiLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3RhY2tzID0gYXdhaXQgU3ludGhTdGFjay5zeW50aChcbiAgICAgIHRoaXMuYWJvcnRTaWduYWwgYXMgYW55LFxuICAgICAgdGhpcy5zeW50aENvbW1hbmQsXG4gICAgICB0aGlzLm91dERpcixcbiAgICAgIHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgIGZhbHNlLFxuICAgICAgbm9Db2xvcixcbiAgICAgIHRoaXMuc3ludGhPcmlnaW4sXG4gICAgICB0aGlzLmhjbCxcbiAgICApO1xuXG4gICAgcHJpbnRBbm5vdGF0aW9ucyhzdGFja3MpO1xuXG4gICAgdGhpcy5vblVwZGF0ZSh7XG4gICAgICB0eXBlOiBcInN5bnRoZXNpemVkXCIsXG4gICAgICBzdGFja3MsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3RhY2tzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlYWRTeW50aGVzaXplZFN0YWNrcygpIHtcbiAgICBjb25zdCBzdGFja3MgPSBhd2FpdCBTeW50aFN0YWNrLnJlYWRTeW50aGVzaXplZFN0YWNrcyh0aGlzLm91dERpcik7XG5cbiAgICBwcmludEFubm90YXRpb25zKHN0YWNrcyk7XG5cbiAgICB0aGlzLm9uVXBkYXRlKHtcbiAgICAgIHR5cGU6IFwic3ludGhlc2l6ZWRcIixcbiAgICAgIHN0YWNrcyxcbiAgICB9KTtcbiAgICByZXR1cm4gc3RhY2tzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRpZmYob3B0czogRGlmZk9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHN0YWNrcyA9IG9wdHMuc2tpcFN5bnRoXG4gICAgICA/IGF3YWl0IHRoaXMucmVhZFN5bnRoZXNpemVkU3RhY2tzKClcbiAgICAgIDogYXdhaXQgdGhpcy5zeW50aChvcHRzLm5vQ29sb3IpO1xuICAgIGNvbnN0IHN0YWNrID0gdGhpcy5nZXRTdGFja0V4ZWN1dG9yKFxuICAgICAgZ2V0U2luZ2xlU3RhY2soc3RhY2tzLCBvcHRzPy5zdGFja05hbWUsIFwiZGlmZlwiKSxcbiAgICApO1xuICAgIGF3YWl0IHN0YWNrLmluaXRhbGl6ZVRlcnJhZm9ybShcbiAgICAgIG9wdHMubm9Db2xvcixcbiAgICAgIG9wdHMuc2tpcFByb3ZpZGVyTG9jayxcbiAgICAgIG9wdHMubWlncmF0ZVN0YXRlLFxuICAgICk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgc3RhY2suZGlmZihvcHRzKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IEVycm9ycy5FeHRlcm5hbChcbiAgICAgICAgYFN0YWNrIGZhaWxlZCB0byBwbGFuOiAke3N0YWNrLnN0YWNrLm5hbWV9LiBQbGVhc2UgY2hlY2sgdGhlIGxvZ3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uYCxcbiAgICAgICAgZSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGFjay5lcnJvcikge1xuICAgICAgdGhyb3cgRXJyb3JzLkV4dGVybmFsKFxuICAgICAgICBgU3RhY2sgZmFpbGVkIHRvIHBsYW46ICR7c3RhY2suc3RhY2submFtZX0uIFBsZWFzZSBjaGVjayB0aGUgbG9ncyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gLFxuICAgICAgICBuZXcgRXJyb3Ioc3RhY2suZXJyb3IpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5wcm9qZWN0VGVsZW1ldHJ5KFwiZGlmZlwiLCB7XG4gICAgICAgIHN0YWNrTWV0YWRhdGE6IHN0YWNrcy5tYXAoKHN0YWNrKSA9PlxuICAgICAgICAgIEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCIvL1wiXVxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1wiLy9cIl0ubWV0YWRhdGFcbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICksXG4gICAgICAgIGVycm9yczogc3RhY2suZXJyb3IsXG4gICAgICAgIHJlcXVpcmVkUHJvdmlkZXJzOiBzdGFja3MubWFwKChzdGFjazogYW55KSA9PlxuICAgICAgICAgIEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCJ0ZXJyYWZvcm1cIl1cbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcInRlcnJhZm9ybVwiXS5yZXF1aXJlZF9wcm92aWRlcnNcbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJGYWlsZWQgdG8gc2VuZCB0ZWxlbWV0cnlcIiwgZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlKFxuICAgIG1ldGhvZDogXCJkZXBsb3lcIiB8IFwiZGVzdHJveVwiLFxuICAgIG5leHQ6ICgpID0+IFByb21pc2U8Q2RrdGZTdGFjayB8IHVuZGVmaW5lZD4sXG4gICAgb3B0czogTXV0YXRpb25PcHRpb25zLFxuICApIHtcbiAgICAvLyBXZSBvbmx5IHN1cHBvcnQgcmVmcmVzaCBvbmx5IG9uIGRlcGxveSwgYSBiaXQgb2YgYSBsZWFreSBhYnN0cmFjdGlvbiBoZXJlXG4gICAgaWYgKG9wdHMucmVmcmVzaE9ubHkgJiYgbWV0aG9kICE9PSBcImRlcGxveVwiKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoYFJlZnJlc2ggb25seSBpcyBvbmx5IHN1cHBvcnRlZCBvbiBkZXBsb3lgKTtcbiAgICB9XG4gICAgY29uc3QgbWF4UGFyYWxsZWxSdW5zID1cbiAgICAgICFvcHRzLnBhcmFsbGVsaXNtIHx8IG9wdHMucGFyYWxsZWxpc20gPCAwID8gSW5maW5pdHkgOiBvcHRzLnBhcmFsbGVsaXNtO1xuICAgIGNvbnN0IGFsbEV4ZWN1dGlvbnMgPSBbXTtcblxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVN0YWNrc1RvUnVuSW5TZXJpYWwoXG4gICAgICBvcHRzLm5vQ29sb3IsXG4gICAgICBvcHRzLnNraXBQcm92aWRlckxvY2ssXG4gICAgICBvcHRzLm1pZ3JhdGVTdGF0ZSxcbiAgICApO1xuICAgIHdoaWxlICh0aGlzLnN0YWNrc1RvUnVuLmZpbHRlcigoc3RhY2spID0+IHN0YWNrLmlzUGVuZGluZykubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcnVubmluZ1N0YWNrcyA9IHRoaXMuc3RhY2tzVG9SdW4uZmlsdGVyKChzdGFjaykgPT4gc3RhY2suaXNSdW5uaW5nKTtcbiAgICAgIGlmIChydW5uaW5nU3RhY2tzLmxlbmd0aCA+PSBtYXhQYXJhbGxlbFJ1bnMpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5yYWNlKHJ1bm5pbmdTdGFja3MubWFwKChzKSA9PiBzLmN1cnJlbnRXb3JrUHJvbWlzZSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG5leHRSdW5uaW5nRXhlY3V0b3IgPSBhd2FpdCBuZXh0KCk7XG4gICAgICAgIGlmICghbmV4dFJ1bm5pbmdFeGVjdXRvcikge1xuICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBoYXZlIG5vIHBlbmRpbmcgc3RhY2tzLCBidXQgd2UgYWxzbyBjYW4gbm90IGZpbmQgYSBuZXcgZXhlY3V0b3JcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9taXNlID1cbiAgICAgICAgICBtZXRob2QgPT09IFwiZGVwbG95XCJcbiAgICAgICAgICAgID8gbmV4dFJ1bm5pbmdFeGVjdXRvci5kZXBsb3kob3B0cylcbiAgICAgICAgICAgIDogbmV4dFJ1bm5pbmdFeGVjdXRvci5kZXN0cm95KG9wdHMpO1xuXG4gICAgICAgIGFsbEV4ZWN1dGlvbnMucHVzaChwcm9taXNlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gYXdhaXQgbmV4dCgpIHRocmV3IGFuIGVycm9yIGJlY2F1c2UgYSBzdGFjayBmYWlsZWQgdG8gYXBwbHkvZGVzdHJveVxuICAgICAgICAvLyB3YWl0IGZvciBhbGwgb3RoZXIgY3VycmVudGx5IHJ1bm5pbmcgc3RhY2tzIHRvIGNvbXBsZXRlIGJlZm9yZSBwcm9wYWdhdGluZyB0aGF0IGVycm9yXG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcIkVuY291bnRlcmVkIGFuIGVycm9yIHdoaWxlIGF3YWl0aW5nIHN0YWNrIHRvIGZpbmlzaFwiLCBlKTtcbiAgICAgICAgY29uc3Qgb3BlblN0YWNrcyA9IHRoaXMuc3RhY2tzVG9SdW4uZmlsdGVyKFxuICAgICAgICAgIChleCkgPT4gZXguY3VycmVudFdvcmtQcm9taXNlLFxuICAgICAgICApO1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJXYWl0aW5nIGZvciBzdGlsbCBydW5uaW5nIHN0YWNrcyB0byBmaW5pc2g6XCIsIG9wZW5TdGFja3MpO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQob3BlblN0YWNrcy5tYXAoKGV4KSA9PiBleC5jdXJyZW50V29ya1Byb21pc2UpKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIFwiRG9uZSB3YWl0aW5nIGZvciBzdGlsbCBydW5uaW5nIHN0YWNrcy4gQWxsIHBlbmRpbmcgd29yayBmaW5pc2hlZFwiLFxuICAgICAgICApO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBXZSBlbmQgdGhlIGxvb3Agd2hlbiBhbGwgc3RhY2tzIGFyZSBzdGFydGVkLCBub3cgd2UgbmVlZCB0byB3YWl0IGZvciB0aGVtIHRvIGJlIGRvbmVcbiAgICAvLyBXZSB3YWl0IGZvciBhbGwgd29yayB0byBmaW5pc2ggZXZlbiBpZiBvbmUgb2YgdGhlIHByb21pc2VzIHRocmV3IGFuIGVycm9yLlxuICAgIGF3YWl0IGVuc3VyZUFsbFNldHRsZWRCZWZvcmVUaHJvd2luZyhcbiAgICAgIFByb21pc2UuYWxsKGFsbEV4ZWN1dGlvbnMpLFxuICAgICAgYWxsRXhlY3V0aW9ucyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlcGxveShvcHRzOiBNdXRhdGlvbk9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHN0YWNrcyA9IG9wdHMuc2tpcFN5bnRoXG4gICAgICA/IGF3YWl0IHRoaXMucmVhZFN5bnRoZXNpemVkU3RhY2tzKClcbiAgICAgIDogYXdhaXQgdGhpcy5zeW50aChvcHRzLm5vQ29sb3IpO1xuICAgIGNvbnN0IHN0YWNrc1RvUnVuID0gZ2V0TXVsdGlwbGVTdGFja3Moc3RhY2tzLCBvcHRzLnN0YWNrTmFtZXMsIFwiZGVwbG95XCIpO1xuICAgIGlmICghb3B0cy5pZ25vcmVNaXNzaW5nU3RhY2tEZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNoZWNrSWZBbGxEZXBlbmRlbmNpZXNBcmVJbmNsdWRlZChzdGFja3NUb1J1bik7XG4gICAgfVxuXG4gICAgdGhpcy5zdG9wQWxsU3RhY2tzVGhhdENhbk5vdFJ1bldpdGhvdXQgPSAoc3RhY2tOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGZpbmRBbGxOZXN0ZWREZXBlbmRhbnRTdGFja3ModGhpcy5zdGFja3NUb1J1biwgc3RhY2tOYW1lKS5mb3JFYWNoKFxuICAgICAgICAoc3RhY2spID0+IHN0YWNrLnN0b3AoKSxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIHRoaXMuc3RhY2tzVG9SdW4gPSBzdGFja3NUb1J1bi5tYXAoKHN0YWNrKSA9PlxuICAgICAgdGhpcy5nZXRTdGFja0V4ZWN1dG9yKHN0YWNrLCBvcHRzKSxcbiAgICApO1xuXG4gICAgY29uc3QgbmV4dCA9IG9wdHMuaWdub3JlTWlzc2luZ1N0YWNrRGVwZW5kZW5jaWVzXG4gICAgICA/ICgpID0+XG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgdGhpcy5zdGFja3NUb1J1bi5maWx0ZXIoKHN0YWNrKSA9PiBzdGFjay5pc1BlbmRpbmcpWzBdLFxuICAgICAgICAgIClcbiAgICAgIDogKCkgPT4gZ2V0U3RhY2tXaXRoTm9Vbm1ldERlcGVuZGVuY2llcyh0aGlzLnN0YWNrc1RvUnVuKTtcblxuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZShcImRlcGxveVwiLCBuZXh0LCBvcHRzKTtcblxuICAgIGNvbnN0IHVucHJvY2Vzc2VkU3RhY2tzID0gdGhpcy5zdGFja3NUb1J1bi5maWx0ZXIoXG4gICAgICAoZXhlY3V0b3IpID0+IGV4ZWN1dG9yLmlzUGVuZGluZyxcbiAgICApO1xuICAgIGlmICh1bnByb2Nlc3NlZFN0YWNrcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuRXh0ZXJuYWwoXG4gICAgICAgIGBTb21lIHN0YWNrcyBmYWlsZWQgdG8gZGVwbG95OiAke3VucHJvY2Vzc2VkU3RhY2tzXG4gICAgICAgICAgLm1hcCgocykgPT4gcy5zdGFjay5uYW1lKVxuICAgICAgICAgIC5qb2luKFwiLCBcIil9LiBQbGVhc2UgY2hlY2sgdGhlIGxvZ3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucHJvamVjdFRlbGVtZXRyeShcImRlcGxveVwiLCB7XG4gICAgICAgIHN0YWNrTWV0YWRhdGE6IHN0YWNrc1RvUnVuLm1hcCgoc3RhY2spID0+XG4gICAgICAgICAgSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcIi8vXCJdXG4gICAgICAgICAgICA/IEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCIvL1wiXS5tZXRhZGF0YVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgICAgZmFpbGVkU3RhY2tzOiB1bnByb2Nlc3NlZFN0YWNrcy5tYXAoKHN0YWNrKSA9PiBzdGFjay5lcnJvciksXG4gICAgICAgIHJlcXVpcmVkUHJvdmlkZXJzOiBzdGFja3NUb1J1bi5tYXAoKHN0YWNrOiBhbnkpID0+XG4gICAgICAgICAgSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcInRlcnJhZm9ybVwiXVxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1widGVycmFmb3JtXCJdLnJlcXVpcmVkX3Byb3ZpZGVyc1xuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIkZhaWxlZCB0byBzZW5kIHRlbGVtZXRyeVwiLCBlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVzdHJveShvcHRzOiBNdXRhdGlvbk9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHN0YWNrcyA9IG9wdHMuc2tpcFN5bnRoXG4gICAgICA/IGF3YWl0IHRoaXMucmVhZFN5bnRoZXNpemVkU3RhY2tzKClcbiAgICAgIDogYXdhaXQgdGhpcy5zeW50aChvcHRzLm5vQ29sb3IpO1xuICAgIGNvbnN0IHN0YWNrc1RvUnVuID0gZ2V0TXVsdGlwbGVTdGFja3Moc3RhY2tzLCBvcHRzLnN0YWNrTmFtZXMsIFwiZGVzdHJveVwiKTtcblxuICAgIGlmICghb3B0cy5pZ25vcmVNaXNzaW5nU3RhY2tEZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNoZWNrSWZBbGxEZXBlbmRhbnRzQXJlSW5jbHVkZWQoc3RhY2tzVG9SdW4sIHN0YWNrcyk7XG4gICAgfVxuXG4gICAgdGhpcy5zdG9wQWxsU3RhY2tzVGhhdENhbk5vdFJ1bldpdGhvdXQgPSAoc3RhY2tOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHN0YWNrRXhlY3V0b3IgPSB0aGlzLnN0YWNrc1RvUnVuLmZpbmQoXG4gICAgICAgIChzKSA9PiBzLnN0YWNrLm5hbWUgPT09IHN0YWNrTmFtZSxcbiAgICAgICk7XG4gICAgICBpZiAoIXN0YWNrRXhlY3V0b3IpIHtcbiAgICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKFxuICAgICAgICAgIGBDb3VsZCBub3QgZmluZCBzdGFjayBcIiR7c3RhY2tOYW1lfVwiIHRoYXQgd2FzIHN0b3BwZWRgLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBzdGFja0V4ZWN1dG9yLnN0YWNrLmRlcGVuZGVuY2llcy5mb3JFYWNoKChkZXBlbmRhbnQpID0+IHtcbiAgICAgICAgdGhpcy5zdG9wQWxsU3RhY2tzVGhhdENhbk5vdFJ1bldpdGhvdXQoZGVwZW5kYW50KTtcblxuICAgICAgICBjb25zdCBkZXBlbmRhbnRTdGFjayA9IHRoaXMuc3RhY2tzVG9SdW4uZmluZChcbiAgICAgICAgICAocykgPT4gcy5zdGFjay5uYW1lID09PSBkZXBlbmRhbnQsXG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGVwZW5kYW50U3RhY2spIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXG4gICAgICAgICAgICBgQ291bGQgbm90IGZpbmQgc3RhY2sgXCIke2RlcGVuZGFudH1cIiB0aGF0IHdhcyBzdG9wcGVkYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVwZW5kYW50U3RhY2suc3RvcCgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLnN0YWNrc1RvUnVuID0gc3RhY2tzVG9SdW4ubWFwKChzdGFjaykgPT5cbiAgICAgIHRoaXMuZ2V0U3RhY2tFeGVjdXRvcihzdGFjaywgb3B0cyksXG4gICAgKTtcbiAgICBjb25zdCBuZXh0ID0gb3B0cy5pZ25vcmVNaXNzaW5nU3RhY2tEZXBlbmRlbmNpZXNcbiAgICAgID8gKCkgPT5cbiAgICAgICAgICBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICB0aGlzLnN0YWNrc1RvUnVuLmZpbHRlcihcbiAgICAgICAgICAgICAgKHN0YWNrKSA9PiBzdGFjay5jdXJyZW50U3RhdGUgIT09IFwiZG9uZVwiLFxuICAgICAgICAgICAgKVswXSxcbiAgICAgICAgICApXG4gICAgICA6ICgpID0+IGdldFN0YWNrV2l0aE5vVW5tZXREZXBlbmRhbnRzKHRoaXMuc3RhY2tzVG9SdW4pO1xuXG4gICAgYXdhaXQgdGhpcy5leGVjdXRlKFwiZGVzdHJveVwiLCBuZXh0LCBvcHRzKTtcblxuICAgIGNvbnN0IHVucHJvY2Vzc2VkU3RhY2tzID0gdGhpcy5zdGFja3NUb1J1bi5maWx0ZXIoXG4gICAgICAoZXhlY3V0b3IpID0+IGV4ZWN1dG9yLmlzUGVuZGluZyxcbiAgICApO1xuICAgIGlmICh1bnByb2Nlc3NlZFN0YWNrcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuRXh0ZXJuYWwoXG4gICAgICAgIGBTb21lIHN0YWNrcyBmYWlsZWQgdG8gZGVzdHJveTogJHt1bnByb2Nlc3NlZFN0YWNrc1xuICAgICAgICAgIC5tYXAoKHMpID0+IHMuc3RhY2submFtZSlcbiAgICAgICAgICAuam9pbihcIiwgXCIpfS4gUGxlYXNlIGNoZWNrIHRoZSBsb2dzIGZvciBtb3JlIGluZm9ybWF0aW9uLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnByb2plY3RUZWxlbWV0cnkoXCJkZXN0cm95XCIsIHtcbiAgICAgICAgc3RhY2tNZXRhZGF0YTogc3RhY2tzVG9SdW4ubWFwKChzdGFjaykgPT5cbiAgICAgICAgICBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1wiLy9cIl1cbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcIi8vXCJdLm1ldGFkYXRhXG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgICBmYWlsZWRTdGFja3M6IHVucHJvY2Vzc2VkU3RhY2tzLm1hcCgoc3RhY2spID0+IHN0YWNrLmVycm9yKSxcbiAgICAgICAgcmVxdWlyZWRQcm92aWRlcnM6IHN0YWNrc1RvUnVuLm1hcCgoc3RhY2s6IGFueSkgPT5cbiAgICAgICAgICBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1widGVycmFmb3JtXCJdXG4gICAgICAgICAgICA/IEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCJ0ZXJyYWZvcm1cIl0ucmVxdWlyZWRfcHJvdmlkZXJzXG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiRmFpbGVkIHRvIHNlbmQgdGVsZW1ldHJ5XCIsIGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcm9qZWN0VGVsZW1ldHJ5KGNvbW1hbmQ6IHN0cmluZywgcGF5bG9hZDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY29uZmlnID0gcmVhZENvbmZpZ1N5bmMoKTtcbiAgICBhd2FpdCBzZW5kVGVsZW1ldHJ5KGNvbW1hbmQsIHtcbiAgICAgIC4uLnBheWxvYWQsXG4gICAgICBsYW5ndWFnZTogY29uZmlnLmxhbmd1YWdlLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGZldGNoT3V0cHV0cyhvcHRzOiBGZXRjaE91dHB1dE9wdGlvbnMpIHtcbiAgICBjb25zdCBzdGFja3MgPSBvcHRzLnNraXBTeW50aFxuICAgICAgPyBhd2FpdCB0aGlzLnJlYWRTeW50aGVzaXplZFN0YWNrcygpXG4gICAgICA6IGF3YWl0IHRoaXMuc3ludGgoKTtcblxuICAgIGNvbnN0IHN0YWNrc1RvUnVuID0gZ2V0TXVsdGlwbGVTdGFja3MoXG4gICAgICBzdGFja3MsXG4gICAgICBvcHRzLnN0YWNrTmFtZXMgfHwgW10sXG4gICAgICBcImRlcGxveVwiLFxuICAgICk7XG5cbiAgICBpZiAoc3RhY2tzVG9SdW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdGFja3MgdG8gZmV0Y2ggb3V0cHV0cyBmb3Igc3BlY2lmaWVkXCIpO1xuICAgIH1cblxuICAgIHRoaXMuc3RhY2tzVG9SdW4gPSBzdGFja3NUb1J1bi5tYXAoKHN0YWNrKSA9PlxuICAgICAgLy8gT3B0aW9ucyBhcmUgZW1wdHksIGJlY2F1c2UgTXVsdGlwbGVTdGFja09wdGlvbnMgZG9lc24ndCBoYXZlIGFueSByZWxldmFudFxuICAgICAgLy8gb3B0aW9ucyBmb3IgYGdldFN0YWNrRXhlY3V0b3JgLCBoZW5jZSBkZWZhdWx0cyBhcmUgZmluZVxuICAgICAgdGhpcy5nZXRTdGFja0V4ZWN1dG9yKHN0YWNrLCB7fSksXG4gICAgKTtcblxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVN0YWNrc1RvUnVuSW5TZXJpYWwodW5kZWZpbmVkLCBvcHRzLnNraXBQcm92aWRlckxvY2spO1xuICAgIGNvbnN0IG91dHB1dHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHRoaXMuc3RhY2tzVG9SdW4ubWFwKGFzeW5jIChzKSA9PiB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHMuZmV0Y2hPdXRwdXRzKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgW3Muc3RhY2submFtZV06IG91dHB1dCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gb3V0cHV0cy5yZWR1Y2UoXG4gICAgICAoYWNjLCBjdXJyKSA9PiAoeyAuLi5hY2MsIC4uLmN1cnIgfSksXG4gICAgICB7fSxcbiAgICApIGFzIE5lc3RlZFRlcnJhZm9ybU91dHB1dHM7XG4gIH1cblxuICAvLyBTZXJpYWxseSBydW4gdGVycmFmb3JtIGluaXQgdG8gcHJvaGliaXQgdGV4dCBmaWxlIGJ1c3kgZXJyb3JzIGZvciB0aGUgY2FjaGUgZmlsZXNcbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplU3RhY2tzVG9SdW5JblNlcmlhbChcbiAgICBub0NvbG9yPzogYm9vbGVhbixcbiAgICBza2lwUHJvdmlkZXJMb2NrPzogYm9vbGVhbixcbiAgICBtaWdyYXRlU3RhdGU/OiBib29sZWFuLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IHN0YWNrIG9mIHRoaXMuc3RhY2tzVG9SdW4pIHtcbiAgICAgIGF3YWl0IHN0YWNrLmluaXRhbGl6ZVRlcnJhZm9ybShub0NvbG9yLCBza2lwUHJvdmlkZXJMb2NrLCBtaWdyYXRlU3RhdGUpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
370
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrdGYtcHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2RrdGYtcHJvamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDRDQU13QjtBQUN4QiwrQ0FBMEU7QUFDMUUsbUNBQTJDO0FBQzNDLCtDQVF1QjtBQUV2QixxREFBMkQ7QUFDM0QsMkRBUWlDO0FBQ2pDLHlFQUFtRTtBQStGbkUsU0FBZ0IsMkJBQTJCLENBQ3pDLE1BQW1DO0lBRW5DLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDLFFBQVEsQ0FDdkUsTUFBTSxDQUFDLElBQUksQ0FDWixDQUFDO0FBQ0osQ0FBQztBQU5ELGtFQU1DO0FBY0QsTUFBYSxZQUFZO0lBcUJ2QixZQUFZLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFDaEMsV0FBVyxFQUNYLEdBQUcsR0FBRyxLQUFLLEdBQ1M7UUFoQnRCLDhCQUE4QjtRQUN2QixnQkFBVyxHQUFpQixFQUFFLENBQUM7UUFDdEMsK0NBQStDO1FBQ3ZDLHNDQUFpQyxHQUN2QyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFhVCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsTUFBTSxFQUFFLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFD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QkFBNkIsQ0FDekMsT0FBaUIsRUFDakIsZ0JBQTBCLEVBQzFCLFlBQXNCO1FBRXRCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sS0FBSyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMxRSxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBemlCRCxvQ0F5aUJDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7XG4gIEVycm9ycyxcbiAgZW5zdXJlQWxsU2V0dGxlZEJlZm9yZVRocm93aW5nLFxuICBsb2dnZXIsXG4gIHJlYWRDb25maWdTeW5jLFxuICBzZW5kVGVsZW1ldHJ5LFxufSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IFN5bnRoZXNpemVkU3RhY2ssIFN5bnRoT3JpZ2luLCBTeW50aFN0YWNrIH0gZnJvbSBcIi4vc3ludGgtc3RhY2tcIjtcbmltcG9ydCB7IHByaW50QW5ub3RhdGlvbnMgfSBmcm9tIFwiLi9zeW50aFwiO1xuaW1wb3J0IHtcbiAgQ2RrdGZTdGFjayxcbiAgRXh0ZXJuYWxTdGFja0FwcHJvdmFsVXBkYXRlLFxuICBFeHRlcm5hbFN0YWNrU2VudGluZWxPdmVycmlkZVVwZGF0ZSxcbiAgU3RhY2tBcHByb3ZhbFVwZGF0ZSxcbiAgU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlLFxuICBTdGFja1VwZGF0ZSxcbiAgU3RhY2tVc2VySW5wdXRVcGRhdGUsXG59IGZyb20gXCIuL2Nka3RmLXN0YWNrXCI7XG5pbXBvcnQgeyBOZXN0ZWRUZXJyYWZvcm1PdXRwdXRzIH0gZnJvbSBcIi4vb3V0cHV0XCI7XG5pbXBvcnQgeyBjcmVhdGVFbmhhbmNlTG9nTWVzc2FnZSB9IGZyb20gXCIuL2V4ZWN1dGlvbi1sb2dzXCI7XG5pbXBvcnQge1xuICBjaGVja0lmQWxsRGVwZW5kYW50c0FyZUluY2x1ZGVkLFxuICBjaGVja0lmQWxsRGVwZW5kZW5jaWVzQXJlSW5jbHVkZWQsXG4gIGZpbmRBbGxOZXN0ZWREZXBlbmRhbnRTdGFja3MsXG4gIGdldE11bHRpcGxlU3RhY2tzLFxuICBnZXRTaW5nbGVTdGFjayxcbiAgZ2V0U3RhY2tXaXRoTm9Vbm1ldERlcGVuZGFudHMsXG4gIGdldFN0YWNrV2l0aE5vVW5tZXREZXBlbmRlbmNpZXMsXG59IGZyb20gXCIuL2hlbHBlcnMvc3RhY2staGVscGVyc1wiO1xuaW1wb3J0IHsgQ2RrdGZQcm9qZWN0SU9IYW5kbGVyIH0gZnJvbSBcIi4vY2RrdGYtcHJvamVjdC1pby1oYW5kbGVyXCI7XG5cbnR5cGUgTXVsdGlTdGFja0FwcHJvdmFsVXBkYXRlID0ge1xuICB0eXBlOiBcIndhaXRpbmcgZm9yIGFwcHJvdmFsXCI7XG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICBhcHByb3ZlOiAoKSA9PiB2b2lkO1xuICBkaXNtaXNzOiAoKSA9PiB2b2lkO1xuICBzdG9wOiAoKSA9PiB2b2lkO1xufTtcblxudHlwZSBNdWx0aVN0YWNrU2VudGluZWxPdmVycmlkZVVwZGF0ZSA9IHtcbiAgdHlwZTogXCJ3YWl0aW5nIGZvciBzZW50aW5lbCBvdmVycmlkZVwiO1xuICBzdGFja05hbWU6IHN0cmluZztcbiAgb3ZlcnJpZGU6ICgpID0+IHZvaWQ7XG4gIHJlamVjdDogKCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIE11bHRpU3RhY2tVcGRhdGUgPVxuICB8IE11bHRpU3RhY2tBcHByb3ZhbFVwZGF0ZVxuICB8IE11bHRpU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlO1xuXG5leHBvcnQgdHlwZSBQcm9qZWN0VXBkYXRlID1cbiAgfCB7XG4gICAgICB0eXBlOiBcInN5bnRoZXNpemluZ1wiO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcInN5bnRoZXNpemVkXCI7XG4gICAgICBzdGFja3M6IFN5bnRoZXNpemVkU3RhY2tbXTtcbiAgICAgIGVycm9yTWVzc2FnZT86IHN0cmluZztcbiAgICB9XG4gIHwgU3RhY2tVcGRhdGVcbiAgfCBNdWx0aVN0YWNrVXBkYXRlO1xuXG5leHBvcnQgdHlwZSBTaW5nbGVTdGFja09wdGlvbnMgPSB7XG4gIHN0YWNrTmFtZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIE11bHRpcGxlU3RhY2tPcHRpb25zID0ge1xuICBzdGFja05hbWVzPzogc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBTa2lwU3ludGhPcHRpb25zID0ge1xuICBza2lwU3ludGg/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgU2tpcFByb3ZpZGVyTG9ja09wdGlvbnMgPSB7XG4gIHNraXBQcm92aWRlckxvY2s/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgRmV0Y2hPdXRwdXRPcHRpb25zID0gU2tpcFN5bnRoT3B0aW9ucyAmXG4gIFNraXBQcm92aWRlckxvY2tPcHRpb25zICZcbiAgTXVsdGlwbGVTdGFja09wdGlvbnM7XG5cbmV4cG9ydCB0eXBlIEF1dG9BcHByb3ZlT3B0aW9ucyA9IHtcbiAgYXV0b0FwcHJvdmU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgRGlmZk9wdGlvbnMgPSBTaW5nbGVTdGFja09wdGlvbnMgJlxuICBTa2lwUHJvdmlkZXJMb2NrT3B0aW9ucyAmXG4gIFNraXBTeW50aE9wdGlvbnMgJiB7XG4gICAgcmVmcmVzaE9ubHk/OiBib29sZWFuO1xuICAgIHRlcnJhZm9ybVBhcmFsbGVsaXNtPzogbnVtYmVyO1xuICAgIHZhcnM/OiBzdHJpbmdbXTtcbiAgICB2YXJGaWxlcz86IHN0cmluZ1tdO1xuICAgIG5vQ29sb3I/OiBib29sZWFuO1xuICAgIG1pZ3JhdGVTdGF0ZT86IGJvb2xlYW47XG4gIH07XG5cbmV4cG9ydCB0eXBlIE11dGF0aW9uT3B0aW9ucyA9IE11bHRpcGxlU3RhY2tPcHRpb25zICZcbiAgU2tpcFByb3ZpZGVyTG9ja09wdGlvbnMgJlxuICBTa2lwU3ludGhPcHRpb25zICZcbiAgQXV0b0FwcHJvdmVPcHRpb25zICYge1xuICAgIHJlZnJlc2hPbmx5PzogYm9vbGVhbjtcbiAgICBpZ25vcmVNaXNzaW5nU3RhY2tEZXBlbmRlbmNpZXM/OiBib29sZWFuO1xuICAgIHBhcmFsbGVsaXNtPzogbnVtYmVyO1xuICAgIHRlcnJhZm9ybVBhcmFsbGVsaXNtPzogbnVtYmVyO1xuICAgIHZhcnM/OiBzdHJpbmdbXTtcbiAgICB2YXJGaWxlcz86IHN0cmluZ1tdO1xuICAgIG5vQ29sb3I/OiBib29sZWFuO1xuICAgIG1pZ3JhdGVTdGF0ZT86IGJvb2xlYW47XG4gIH07XG5cbmV4cG9ydCB0eXBlIExvZ01lc3NhZ2UgPSB7XG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICBtZXNzYWdlV2l0aENvbnN0cnVjdFBhdGg/OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn07XG5cbi8vIFN0b3JlcyBhIGxvZyB2YWx1ZSBvZiBhIGNlcnRhaW4gdHlwZSB1bnRpbCBpdCBjYW4gYmUgc2VudFxudHlwZSBCdWZmZXJlZDxULCBWPiA9IHtcbiAgY2I6IChpdGVtOiBUKSA9PiB2b2lkO1xuICB2YWx1ZTogVDtcbiAgdHlwZTogVjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dhaXRpbmdGb3JVc2VySW5wdXRVcGRhdGUoXG4gIHVwZGF0ZTogUHJvamVjdFVwZGF0ZSB8IFN0YWNrVXBkYXRlLFxuKSB7XG4gIHJldHVybiBbXCJ3YWl0aW5nIGZvciBhcHByb3ZhbFwiLCBcIndhaXRpbmcgZm9yIHNlbnRpbmVsIG92ZXJyaWRlXCJdLmluY2x1ZGVzKFxuICAgIHVwZGF0ZS50eXBlLFxuICApO1xufVxuXG5leHBvcnQgdHlwZSBQcm9qZWN0RXZlbnQgPVxuICB8IEJ1ZmZlcmVkPFByb2plY3RVcGRhdGUsIFwicHJvamVjdFVwZGF0ZVwiPlxuICB8IEJ1ZmZlcmVkPExvZ01lc3NhZ2UsIFwibG9nTWVzc2FnZVwiPjtcbmV4cG9ydCB0eXBlIENka3RmUHJvamVjdE9wdGlvbnMgPSB7XG4gIHN5bnRoQ29tbWFuZDogc3RyaW5nO1xuICBvdXREaXI6IHN0cmluZztcbiAgb25VcGRhdGU6ICh1cGRhdGU6IFByb2plY3RVcGRhdGUpID0+IHZvaWQ7XG4gIG9uTG9nPzogKGxvZzogTG9nTWVzc2FnZSkgPT4gdm9pZDtcbiAgd29ya2luZ0RpcmVjdG9yeT86IHN0cmluZztcbiAgc3ludGhPcmlnaW4/OiBTeW50aE9yaWdpbjtcbiAgaGNsPzogYm9vbGVhbjtcbn07XG5leHBvcnQgY2xhc3MgQ2RrdGZQcm9qZWN0IHtcbiAgcHVibGljIHN0YWNrcz86IFN5bnRoZXNpemVkU3RhY2tbXTtcbiAgcHVibGljIGhhcmRBYm9ydDogKCkgPT4gdm9pZDtcblxuICBwcml2YXRlIHN5bnRoQ29tbWFuZDogc3RyaW5nO1xuICBwcml2YXRlIG91dERpcjogc3RyaW5nO1xuICBwcml2YXRlIHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZztcbiAgcHJpdmF0ZSBvblVwZGF0ZTogKHVwZGF0ZTogUHJvamVjdFVwZGF0ZSkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBvbkxvZz86IChsb2c6IExvZ01lc3NhZ2UpID0+IHZvaWQ7XG4gIHByaXZhdGUgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsO1xuICBwcml2YXRlIHN5bnRoT3JpZ2luPzogU3ludGhPcmlnaW47XG4gIHByaXZhdGUgaGNsPzogYm9vbGVhbjtcblxuICAvLyBTZXQgZHVyaW5nIGRlcGxveSAvIGRlc3Ryb3lcbiAgcHVibGljIHN0YWNrc1RvUnVuOiBDZGt0ZlN0YWNrW10gPSBbXTtcbiAgLy8gVGhpcyBtZWFucyBzdGggZGlmZmVyZW50IGluIGRlcGxveSAvIGRlc3Ryb3lcbiAgcHJpdmF0ZSBzdG9wQWxsU3RhY2tzVGhhdENhbk5vdFJ1bldpdGhvdXQ6IChzdGFja05hbWU6IHN0cmluZykgPT4gdm9pZCA9XG4gICAgKCkgPT4ge307XG5cbiAgcHJpdmF0ZSBpb0hhbmRsZXI6IENka3RmUHJvamVjdElPSGFuZGxlcjtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgc3ludGhDb21tYW5kLFxuICAgIG91dERpcixcbiAgICBvblVwZGF0ZSxcbiAgICBvbkxvZyxcbiAgICB3b3JraW5nRGlyZWN0b3J5ID0gcHJvY2Vzcy5jd2QoKSxcbiAgICBzeW50aE9yaWdpbixcbiAgICBoY2wgPSBmYWxzZSxcbiAgfTogQ2RrdGZQcm9qZWN0T3B0aW9ucykge1xuICAgIHRoaXMuc3ludGhDb21tYW5kID0gc3ludGhDb21tYW5kO1xuICAgIHRoaXMub3V0RGlyID0gb3V0RGlyO1xuICAgIHRoaXMud29ya2luZ0RpcmVjdG9yeSA9IHdvcmtpbmdEaXJlY3Rvcnk7XG4gICAgdGhpcy5vblVwZGF0ZSA9IG9uVXBkYXRlO1xuICAgIHRoaXMub25Mb2cgPSBvbkxvZztcbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB0aGlzLmFib3J0U2lnbmFsID0gYWMuc2lnbmFsO1xuICAgIHRoaXMuc3ludGhPcmlnaW4gPSBzeW50aE9yaWdpbjtcbiAgICB0aGlzLmhjbCA9XG4gICAgICBwcm9jZXNzLmVudi5TWU5USF9IQ0xfT1VUUFVUID09PSBcInRydWVcIiB8fFxuICAgICAgcHJvY2Vzcy5lbnYuU1lOVEhfSENMX09VVFBVVCA9PT0gXCIxXCIgfHxcbiAgICAgIGhjbDtcblxuICAgIHRoaXMuaGFyZEFib3J0ID0gYWMuYWJvcnQuYmluZChhYyk7XG4gICAgdGhpcy5pb0hhbmRsZXIgPSBuZXcgQ2RrdGZQcm9qZWN0SU9IYW5kbGVyKCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BBbGxTdGFja3MoKSB7XG4gICAgdGhpcy5zdGFja3NUb1J1bi5mb3JFYWNoKChzdGFjaykgPT4gc3RhY2suc3RvcCgpKTtcbiAgICB0aGlzLmlvSGFuZGxlci5maWx0ZXJVc2VySW5wdXRFdmVudHNGcm9tQnVmZmVyKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVVzZXJVcGRhdGU8XG4gICAgVCBleHRlbmRzIE11bHRpU3RhY2tVcGRhdGUsXG4gICAgViBleHRlbmRzIFN0YWNrVXNlcklucHV0VXBkYXRlLFxuICA+KFxuICAgIHVwZGF0ZTogU3RhY2tVc2VySW5wdXRVcGRhdGUsXG4gICAgb3BlcmF0aW9uczogUmVjb3JkPHN0cmluZywgKHVwZGF0ZTogVikgPT4gdm9pZD4sXG4gICAgb3JpZ2luYWxDYWxsYmFjazogKHVwZGF0ZVRvU2VuZDogUHJvamVjdFVwZGF0ZSkgPT4gdm9pZCxcbiAgICBldmVudFR5cGU6IFRbXCJ0eXBlXCJdLFxuICApIHtcbiAgICBjb25zdCBjYWxsYmFja3MgPSAodXBkYXRlOiBWKSA9PlxuICAgICAgT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhvcGVyYXRpb25zKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAvLyBUaGlzIGlzIHBhc3NlZCBpbiB0byBtYWtlIHR5cGVzY3JpcHQgaGFwcHkgb25seVxuICAgICAgICAgICAgKF86IFYpID0+IHtcbiAgICAgICAgICAgICAgdmFsdWUodXBkYXRlKTtcblxuICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRlZmVyIHRoZXNlIGNhbGxzIGZvciB0aGUgY2FzZSB0aGF0IGFwcHJvdmUoKSBpcyBpbnN0YW50bHkgaW52b2tlZFxuICAgICAgICAgICAgICAvLyBpbiB0aGUgbGlzdGVuZXIgdGhhdCByZWNlaXZlcyB0aGVzZSBjYWxsYmFja3MgYXMgaXQgb3RoZXJ3aXNlIHdvdWxkIGFscmVhZHlcbiAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBcIndhaXRpbmcgZm9yIHN0YWNrIGFwcHJvdmFsXCIgZXZlbnQgZnJvbSB0aGUgYnVmZmVyIGJlZm9yZSB3ZSBldmVuXG4gICAgICAgICAgICAgIC8vIHNldCB3YWl0aW5nRm9yQXBwcm92YWwgdG8gdHJ1ZSAoYXQgdGhlIGVuZCBvZiB0aGlzIGlmIHN0YXRlbWVudCkgd2hpY2ggcmVzdWx0c1xuICAgICAgICAgICAgICAvLyBpbiBidWZmZXJlZCB1cGRhdGVzIHdoaWNoIHdpbGwgbmV2ZXIgdW5ibG9ja1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAgICAgICAgICgpID0+IHRoaXMuaW9IYW5kbGVyLnJlc3VtZUFmdGVyVXNlcklucHV0KHVwZGF0ZS5zdGFja05hbWUpLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF07XG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgIC8vIGFsd2F5cyBzZW5kIHRvIGJ1ZmZlciwgYXMgcmVzdW1lQWZ0ZXJVc2VySW5wdXQoKSBhbHdheXMgZXhwZWN0cyBhIG1hdGNoaW5nIGV2ZW50XG4gICAgdGhpcy5pb0hhbmRsZXIucHVzaEV2ZW50KHtcbiAgICAgIGNiOiBvcmlnaW5hbENhbGxiYWNrLFxuICAgICAgdmFsdWU6IHtcbiAgICAgICAgdHlwZTogZXZlbnRUeXBlLFxuICAgICAgICBzdGFja05hbWU6IHVwZGF0ZS5zdGFja05hbWUsXG4gICAgICAgIC4uLmNhbGxiYWNrcyh1cGRhdGUgYXMgViksXG4gICAgICB9IGFzIFQsXG4gICAgICB0eXBlOiBcInByb2plY3RVcGRhdGVcIixcbiAgICB9KTtcblxuICAgIC8vIGlmIHdlIGFyZW4ndCBhbHJlYWR5IHdhaXRpbmcsIHRoaXMgbmVlZHMgdG8gZ28gdG8gY2IoKSB0b28gdG8gYXJyaXZlIGF0IHRoZSBVSVxuICAgIGlmICghdGhpcy5pb0hhbmRsZXIuaXNXYWl0aW5nRm9yVXNlcklucHV0KCkpIHtcbiAgICAgIG9yaWdpbmFsQ2FsbGJhY2soe1xuICAgICAgICB0eXBlOiBldmVudFR5cGUsXG4gICAgICAgIHN0YWNrTmFtZTogdXBkYXRlLnN0YWNrTmFtZSxcbiAgICAgICAgLi4uY2FsbGJhY2tzKHVwZGF0ZSBhcyBWKSxcbiAgICAgIH0gYXMgVCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVVc2VySW5wdXRQcm9jZXNzKGNiOiAodXBkYXRlVG9TZW5kOiBQcm9qZWN0VXBkYXRlKSA9PiB2b2lkKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHVwZGF0ZTpcbiAgICAgICAgfCBTdGFja1VwZGF0ZVxuICAgICAgICB8IFN0YWNrQXBwcm92YWxVcGRhdGVcbiAgICAgICAgfCBFeHRlcm5hbFN0YWNrQXBwcm92YWxVcGRhdGVcbiAgICAgICAgfCBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGVcbiAgICAgICAgfCBFeHRlcm5hbFN0YWNrU2VudGluZWxPdmVycmlkZVVwZGF0ZSxcbiAgICApID0+IHtcbiAgICAgIGlmICh1cGRhdGUudHlwZSA9PT0gXCJleHRlcm5hbCBzdGFjayBhcHByb3ZhbCByZXBseVwiKSB7XG4gICAgICAgIGlmICghdXBkYXRlLmFwcHJvdmVkKSB7XG4gICAgICAgICAgdGhpcy5zdG9wQWxsU3RhY2tzVGhhdENhbk5vdFJ1bldpdGhvdXQodXBkYXRlLnN0YWNrTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pb0hhbmRsZXIucmVzdW1lQWZ0ZXJVc2VySW5wdXQodXBkYXRlLnN0YWNrTmFtZSk7XG4gICAgICAgIHJldHVybjsgLy8gYWthIGRvbid0IHNlbmQgdGhpcyBldmVudCB0byBhbnkgYnVmZmVyXG4gICAgICB9XG4gICAgICBpZiAodXBkYXRlLnR5cGUgPT09IFwiZXh0ZXJuYWwgc3RhY2sgc2VudGluZWwgb3ZlcnJpZGUgcmVwbHlcIikge1xuICAgICAgICBpZiAoIXVwZGF0ZS5vdmVycmlkZGVuKSB7XG4gICAgICAgICAgdGhpcy5zdG9wQWxsU3RhY2tzVGhhdENhbk5vdFJ1bldpdGhvdXQodXBkYXRlLnN0YWNrTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pb0hhbmRsZXIucmVzdW1lQWZ0ZXJVc2VySW5wdXQodXBkYXRlLnN0YWNrTmFtZSk7XG4gICAgICAgIHJldHVybjsgLy8gYWthIGRvbid0IHNlbmQgdGhpcyBldmVudCB0byBhbnkgYnVmZmVyXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdXBkYXRlLnR5cGUgPT09IFwid2FpdGluZyBmb3Igc3RhY2sgYXBwcm92YWxcIiB8fFxuICAgICAgICB1cGRhdGUudHlwZSA9PT0gXCJ3YWl0aW5nIGZvciBzdGFjayBzZW50aW5lbCBvdmVycmlkZVwiXG4gICAgICApIHtcbiAgICAgICAgaWYgKHVwZGF0ZS50eXBlID09PSBcIndhaXRpbmcgZm9yIHN0YWNrIGFwcHJvdmFsXCIpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZVVzZXJVcGRhdGU8TXVsdGlTdGFja0FwcHJvdmFsVXBkYXRlLCBTdGFja0FwcHJvdmFsVXBkYXRlPihcbiAgICAgICAgICAgIHVwZGF0ZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXBwcm92ZTogKHVwZGF0ZSkgPT4gdXBkYXRlLmFwcHJvdmUoKSxcbiAgICAgICAgICAgICAgZGlzbWlzczogKHVwZGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHVwZGF0ZS5yZWplY3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BBbGxTdGFja3NUaGF0Q2FuTm90UnVuV2l0aG91dCh1cGRhdGUuc3RhY2tOYW1lKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc3RvcDogKHVwZGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHVwZGF0ZS5yZWplY3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BBbGxTdGFja3MoKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYixcbiAgICAgICAgICAgIFwid2FpdGluZyBmb3IgYXBwcm92YWxcIixcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHVwZGF0ZS50eXBlID09PSBcIndhaXRpbmcgZm9yIHN0YWNrIHNlbnRpbmVsIG92ZXJyaWRlXCIpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZVVzZXJVcGRhdGU8XG4gICAgICAgICAgICBNdWx0aVN0YWNrU2VudGluZWxPdmVycmlkZVVwZGF0ZSxcbiAgICAgICAgICAgIFN0YWNrU2VudGluZWxPdmVycmlkZVVwZGF0ZVxuICAgICAgICAgID4oXG4gICAgICAgICAgICB1cGRhdGUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG92ZXJyaWRlOiAodXBkYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgdXBkYXRlLm92ZXJyaWRlKCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHJlamVjdDogKHVwZGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHVwZGF0ZS5yZWplY3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BBbGxTdGFja3NUaGF0Q2FuTm90UnVuV2l0aG91dCh1cGRhdGUuc3RhY2tOYW1lKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYixcbiAgICAgICAgICAgIFwid2FpdGluZyBmb3Igc2VudGluZWwgb3ZlcnJpZGVcIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pb0hhbmRsZXIuYXdhaXRVc2VySW5wdXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmlvSGFuZGxlci5pc1dhaXRpbmdGb3JVc2VySW5wdXQoKSkge1xuICAgICAgICAgIHRoaXMuaW9IYW5kbGVyLnB1c2hFdmVudCh7XG4gICAgICAgICAgICBjYixcbiAgICAgICAgICAgIHZhbHVlOiB1cGRhdGUsXG4gICAgICAgICAgICB0eXBlOiBcInByb2plY3RVcGRhdGVcIixcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYih1cGRhdGUgYXMgUHJvamVjdFVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldFN0YWNrRXhlY3V0b3IoXG4gICAgc3RhY2s6IFN5bnRoZXNpemVkU3RhY2ssXG4gICAgb3B0czogQXV0b0FwcHJvdmVPcHRpb25zID0ge30sXG4gICkge1xuICAgIGNvbnN0IGVuaGFuY2VMb2dNZXNzYWdlID0gY3JlYXRlRW5oYW5jZUxvZ01lc3NhZ2Uoc3RhY2spO1xuICAgIGNvbnN0IG9uTG9nID0gdGhpcy5pb0hhbmRsZXIuYnVmZmVyV2hpbGVBd2FpdGluZ1VzZXJJbnB1dCh0aGlzLm9uTG9nKTtcbiAgICByZXR1cm4gbmV3IENka3RmU3RhY2soe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIHN0YWNrLFxuICAgICAgb25VcGRhdGU6IHRoaXMuaGFuZGxlVXNlcklucHV0UHJvY2Vzcyh0aGlzLm9uVXBkYXRlKSxcbiAgICAgIG9uTG9nOiBvbkxvZ1xuICAgICAgICA/ICh7IG1lc3NhZ2UgfSkgPT5cbiAgICAgICAgICAgIG9uTG9nKHtcbiAgICAgICAgICAgICAgc3RhY2tOYW1lOiBzdGFjay5uYW1lLFxuICAgICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgICBtZXNzYWdlV2l0aENvbnN0cnVjdFBhdGg6IGVuaGFuY2VMb2dNZXNzYWdlKG1lc3NhZ2UpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBhYm9ydFNpZ25hbDogdGhpcy5hYm9ydFNpZ25hbCxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb3V0cHV0c0J5Q29uc3RydWN0SWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tzVG9SdW4ucmVkdWNlKFxuICAgICAgKGFjYywgc3RhY2spID0+ICh7XG4gICAgICAgIC4uLmFjYyxcbiAgICAgICAgLi4uc3RhY2sub3V0cHV0c0J5Q29uc3RydWN0SWQsXG4gICAgICB9KSxcbiAgICAgIHt9IGFzIE5lc3RlZFRlcnJhZm9ybU91dHB1dHMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzeW50aChub0NvbG9yPzogYm9vbGVhbikge1xuICAgIHRoaXMub25VcGRhdGUoe1xuICAgICAgdHlwZTogXCJzeW50aGVzaXppbmdcIixcbiAgICB9KTtcblxuICAgIGNvbnN0IHN0YWNrcyA9IGF3YWl0IFN5bnRoU3RhY2suc3ludGgoXG4gICAgICB0aGlzLmFib3J0U2lnbmFsIGFzIGFueSxcbiAgICAgIHRoaXMuc3ludGhDb21tYW5kLFxuICAgICAgdGhpcy5vdXREaXIsXG4gICAgICB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICBmYWxzZSxcbiAgICAgIG5vQ29sb3IsXG4gICAgICB0aGlzLnN5bnRoT3JpZ2luLFxuICAgICAgdGhpcy5oY2wsXG4gICAgKTtcblxuICAgIHByaW50QW5ub3RhdGlvbnMoc3RhY2tzKTtcblxuICAgIHRoaXMub25VcGRhdGUoe1xuICAgICAgdHlwZTogXCJzeW50aGVzaXplZFwiLFxuICAgICAgc3RhY2tzLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0YWNrcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWFkU3ludGhlc2l6ZWRTdGFja3MoKSB7XG4gICAgY29uc3Qgc3RhY2tzID0gYXdhaXQgU3ludGhTdGFjay5yZWFkU3ludGhlc2l6ZWRTdGFja3ModGhpcy5vdXREaXIpO1xuXG4gICAgcHJpbnRBbm5vdGF0aW9ucyhzdGFja3MpO1xuXG4gICAgdGhpcy5vblVwZGF0ZSh7XG4gICAgICB0eXBlOiBcInN5bnRoZXNpemVkXCIsXG4gICAgICBzdGFja3MsXG4gICAgfSk7XG4gICAgcmV0dXJuIHN0YWNrcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkaWZmKG9wdHM6IERpZmZPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzdGFja3MgPSBvcHRzLnNraXBTeW50aFxuICAgICAgPyBhd2FpdCB0aGlzLnJlYWRTeW50aGVzaXplZFN0YWNrcygpXG4gICAgICA6IGF3YWl0IHRoaXMuc3ludGgob3B0cy5ub0NvbG9yKTtcbiAgICBjb25zdCBzdGFjayA9IHRoaXMuZ2V0U3RhY2tFeGVjdXRvcihcbiAgICAgIGdldFNpbmdsZVN0YWNrKHN0YWNrcywgb3B0cz8uc3RhY2tOYW1lLCBcImRpZmZcIiksXG4gICAgKTtcbiAgICBhd2FpdCBzdGFjay5pbml0YWxpemVUZXJyYWZvcm0oXG4gICAgICBvcHRzLm5vQ29sb3IsXG4gICAgICBvcHRzLnNraXBQcm92aWRlckxvY2ssXG4gICAgICBvcHRzLm1pZ3JhdGVTdGF0ZSxcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHN0YWNrLmRpZmYob3B0cyk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBFcnJvcnMuRXh0ZXJuYWwoXG4gICAgICAgIGBTdGFjayBmYWlsZWQgdG8gcGxhbjogJHtzdGFjay5zdGFjay5uYW1lfS4gUGxlYXNlIGNoZWNrIHRoZSBsb2dzIGZvciBtb3JlIGluZm9ybWF0aW9uLmAsXG4gICAgICAgIGUsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoc3RhY2suZXJyb3IpIHtcbiAgICAgIHRocm93IEVycm9ycy5FeHRlcm5hbChcbiAgICAgICAgYFN0YWNrIGZhaWxlZCB0byBwbGFuOiAke3N0YWNrLnN0YWNrLm5hbWV9LiBQbGVhc2UgY2hlY2sgdGhlIGxvZ3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uYCxcbiAgICAgICAgbmV3IEVycm9yKHN0YWNrLmVycm9yKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucHJvamVjdFRlbGVtZXRyeShcImRpZmZcIiwge1xuICAgICAgICBzdGFja01ldGFkYXRhOiBzdGFja3MubWFwKChzdGFjaykgPT5cbiAgICAgICAgICBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1wiLy9cIl1cbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcIi8vXCJdLm1ldGFkYXRhXG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgICBlcnJvcnM6IHN0YWNrLmVycm9yLFxuICAgICAgICByZXF1aXJlZFByb3ZpZGVyczogc3RhY2tzLm1hcCgoc3RhY2s6IGFueSkgPT5cbiAgICAgICAgICBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1widGVycmFmb3JtXCJdXG4gICAgICAgICAgICA/IEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCJ0ZXJyYWZvcm1cIl0ucmVxdWlyZWRfcHJvdmlkZXJzXG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiRmFpbGVkIHRvIHNlbmQgdGVsZW1ldHJ5XCIsIGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZShcbiAgICBtZXRob2Q6IFwiZGVwbG95XCIgfCBcImRlc3Ryb3lcIixcbiAgICBuZXh0OiAoKSA9PiBQcm9taXNlPENka3RmU3RhY2sgfCB1bmRlZmluZWQ+LFxuICAgIG9wdHM6IE11dGF0aW9uT3B0aW9ucyxcbiAgKSB7XG4gICAgLy8gV2Ugb25seSBzdXBwb3J0IHJlZnJlc2ggb25seSBvbiBkZXBsb3ksIGEgYml0IG9mIGEgbGVha3kgYWJzdHJhY3Rpb24gaGVyZVxuICAgIGlmIChvcHRzLnJlZnJlc2hPbmx5ICYmIG1ldGhvZCAhPT0gXCJkZXBsb3lcIikge1xuICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKGBSZWZyZXNoIG9ubHkgaXMgb25seSBzdXBwb3J0ZWQgb24gZGVwbG95YCk7XG4gICAgfVxuICAgIGNvbnN0IG1heFBhcmFsbGVsUnVucyA9XG4gICAgICAhb3B0cy5wYXJhbGxlbGlzbSB8fCBvcHRzLnBhcmFsbGVsaXNtIDwgMCA/IEluZmluaXR5IDogb3B0cy5wYXJhbGxlbGlzbTtcbiAgICBjb25zdCBhbGxFeGVjdXRpb25zID0gW107XG5cbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVTdGFja3NUb1J1bkluU2VyaWFsKFxuICAgICAgb3B0cy5ub0NvbG9yLFxuICAgICAgb3B0cy5za2lwUHJvdmlkZXJMb2NrLFxuICAgICAgb3B0cy5taWdyYXRlU3RhdGUsXG4gICAgKTtcbiAgICB3aGlsZSAodGhpcy5zdGFja3NUb1J1bi5maWx0ZXIoKHN0YWNrKSA9PiBzdGFjay5pc1BlbmRpbmcpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHJ1bm5pbmdTdGFja3MgPSB0aGlzLnN0YWNrc1RvUnVuLmZpbHRlcigoc3RhY2spID0+IHN0YWNrLmlzUnVubmluZyk7XG4gICAgICBpZiAocnVubmluZ1N0YWNrcy5sZW5ndGggPj0gbWF4UGFyYWxsZWxSdW5zKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UucmFjZShydW5uaW5nU3RhY2tzLm1hcCgocykgPT4gcy5jdXJyZW50V29ya1Byb21pc2UpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBuZXh0UnVubmluZ0V4ZWN1dG9yID0gYXdhaXQgbmV4dCgpO1xuICAgICAgICBpZiAoIW5leHRSdW5uaW5nRXhlY3V0b3IpIHtcbiAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgaGF2ZSBubyBwZW5kaW5nIHN0YWNrcywgYnV0IHdlIGFsc28gY2FuIG5vdCBmaW5kIGEgbmV3IGV4ZWN1dG9yXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvbWlzZSA9XG4gICAgICAgICAgbWV0aG9kID09PSBcImRlcGxveVwiXG4gICAgICAgICAgICA/IG5leHRSdW5uaW5nRXhlY3V0b3IuZGVwbG95KG9wdHMpXG4gICAgICAgICAgICA6IG5leHRSdW5uaW5nRXhlY3V0b3IuZGVzdHJveShvcHRzKTtcblxuICAgICAgICBhbGxFeGVjdXRpb25zLnB1c2gocHJvbWlzZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGF3YWl0IG5leHQoKSB0aHJldyBhbiBlcnJvciBiZWNhdXNlIGEgc3RhY2sgZmFpbGVkIHRvIGFwcGx5L2Rlc3Ryb3lcbiAgICAgICAgLy8gd2FpdCBmb3IgYWxsIG90aGVyIGN1cnJlbnRseSBydW5uaW5nIHN0YWNrcyB0byBjb21wbGV0ZSBiZWZvcmUgcHJvcGFnYXRpbmcgdGhhdCBlcnJvclxuICAgICAgICBsb2dnZXIuZGVidWcoXCJFbmNvdW50ZXJlZCBhbiBlcnJvciB3aGlsZSBhd2FpdGluZyBzdGFjayB0byBmaW5pc2hcIiwgZSk7XG4gICAgICAgIGNvbnN0IG9wZW5TdGFja3MgPSB0aGlzLnN0YWNrc1RvUnVuLmZpbHRlcihcbiAgICAgICAgICAoZXgpID0+IGV4LmN1cnJlbnRXb3JrUHJvbWlzZSxcbiAgICAgICAgKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwiV2FpdGluZyBmb3Igc3RpbGwgcnVubmluZyBzdGFja3MgdG8gZmluaXNoOlwiLCBvcGVuU3RhY2tzKTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKG9wZW5TdGFja3MubWFwKChleCkgPT4gZXguY3VycmVudFdvcmtQcm9taXNlKSk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBcIkRvbmUgd2FpdGluZyBmb3Igc3RpbGwgcnVubmluZyBzdGFja3MuIEFsbCBwZW5kaW5nIHdvcmsgZmluaXNoZWRcIixcbiAgICAgICAgKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gV2UgZW5kIHRoZSBsb29wIHdoZW4gYWxsIHN0YWNrcyBhcmUgc3RhcnRlZCwgbm93IHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlbSB0byBiZSBkb25lXG4gICAgLy8gV2Ugd2FpdCBmb3IgYWxsIHdvcmsgdG8gZmluaXNoIGV2ZW4gaWYgb25lIG9mIHRoZSBwcm9taXNlcyB0aHJldyBhbiBlcnJvci5cbiAgICBhd2FpdCBlbnN1cmVBbGxTZXR0bGVkQmVmb3JlVGhyb3dpbmcoXG4gICAgICBQcm9taXNlLmFsbChhbGxFeGVjdXRpb25zKSxcbiAgICAgIGFsbEV4ZWN1dGlvbnMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZXBsb3kob3B0czogTXV0YXRpb25PcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzdGFja3MgPSBvcHRzLnNraXBTeW50aFxuICAgICAgPyBhd2FpdCB0aGlzLnJlYWRTeW50aGVzaXplZFN0YWNrcygpXG4gICAgICA6IGF3YWl0IHRoaXMuc3ludGgob3B0cy5ub0NvbG9yKTtcbiAgICBjb25zdCBzdGFja3NUb1J1biA9IGdldE11bHRpcGxlU3RhY2tzKHN0YWNrcywgb3B0cy5zdGFja05hbWVzLCBcImRlcGxveVwiKTtcbiAgICBpZiAoIW9wdHMuaWdub3JlTWlzc2luZ1N0YWNrRGVwZW5kZW5jaWVzKSB7XG4gICAgICBjaGVja0lmQWxsRGVwZW5kZW5jaWVzQXJlSW5jbHVkZWQoc3RhY2tzVG9SdW4pO1xuICAgIH1cblxuICAgIHRoaXMuc3RvcEFsbFN0YWNrc1RoYXRDYW5Ob3RSdW5XaXRob3V0ID0gKHN0YWNrTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBmaW5kQWxsTmVzdGVkRGVwZW5kYW50U3RhY2tzKHRoaXMuc3RhY2tzVG9SdW4sIHN0YWNrTmFtZSkuZm9yRWFjaChcbiAgICAgICAgKHN0YWNrKSA9PiBzdGFjay5zdG9wKCksXG4gICAgICApO1xuICAgIH07XG5cbiAgICB0aGlzLnN0YWNrc1RvUnVuID0gc3RhY2tzVG9SdW4ubWFwKChzdGFjaykgPT5cbiAgICAgIHRoaXMuZ2V0U3RhY2tFeGVjdXRvcihzdGFjaywgb3B0cyksXG4gICAgKTtcblxuICAgIGNvbnN0IG5leHQgPSBvcHRzLmlnbm9yZU1pc3NpbmdTdGFja0RlcGVuZGVuY2llc1xuICAgICAgPyAoKSA9PlxuICAgICAgICAgIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICAgIHRoaXMuc3RhY2tzVG9SdW4uZmlsdGVyKChzdGFjaykgPT4gc3RhY2suaXNQZW5kaW5nKVswXSxcbiAgICAgICAgICApXG4gICAgICA6ICgpID0+IGdldFN0YWNrV2l0aE5vVW5tZXREZXBlbmRlbmNpZXModGhpcy5zdGFja3NUb1J1bik7XG5cbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGUoXCJkZXBsb3lcIiwgbmV4dCwgb3B0cyk7XG5cbiAgICBjb25zdCB1bnByb2Nlc3NlZFN0YWNrcyA9IHRoaXMuc3RhY2tzVG9SdW4uZmlsdGVyKFxuICAgICAgKGV4ZWN1dG9yKSA9PiBleGVjdXRvci5pc1BlbmRpbmcsXG4gICAgKTtcbiAgICBpZiAodW5wcm9jZXNzZWRTdGFja3MubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgRXJyb3JzLkV4dGVybmFsKFxuICAgICAgICBgU29tZSBzdGFja3MgZmFpbGVkIHRvIGRlcGxveTogJHt1bnByb2Nlc3NlZFN0YWNrc1xuICAgICAgICAgIC5tYXAoKHMpID0+IHMuc3RhY2submFtZSlcbiAgICAgICAgICAuam9pbihcIiwgXCIpfS4gUGxlYXNlIGNoZWNrIHRoZSBsb2dzIGZvciBtb3JlIGluZm9ybWF0aW9uLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnByb2plY3RUZWxlbWV0cnkoXCJkZXBsb3lcIiwge1xuICAgICAgICBzdGFja01ldGFkYXRhOiBzdGFja3NUb1J1bi5tYXAoKHN0YWNrKSA9PlxuICAgICAgICAgIEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCIvL1wiXVxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1wiLy9cIl0ubWV0YWRhdGFcbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICksXG4gICAgICAgIGZhaWxlZFN0YWNrczogdW5wcm9jZXNzZWRTdGFja3MubWFwKChzdGFjaykgPT4gc3RhY2suZXJyb3IpLFxuICAgICAgICByZXF1aXJlZFByb3ZpZGVyczogc3RhY2tzVG9SdW4ubWFwKChzdGFjazogYW55KSA9PlxuICAgICAgICAgIEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCJ0ZXJyYWZvcm1cIl1cbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcInRlcnJhZm9ybVwiXS5yZXF1aXJlZF9wcm92aWRlcnNcbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJGYWlsZWQgdG8gc2VuZCB0ZWxlbWV0cnlcIiwgZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlc3Ryb3kob3B0czogTXV0YXRpb25PcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzdGFja3MgPSBvcHRzLnNraXBTeW50aFxuICAgICAgPyBhd2FpdCB0aGlzLnJlYWRTeW50aGVzaXplZFN0YWNrcygpXG4gICAgICA6IGF3YWl0IHRoaXMuc3ludGgob3B0cy5ub0NvbG9yKTtcbiAgICBjb25zdCBzdGFja3NUb1J1biA9IGdldE11bHRpcGxlU3RhY2tzKHN0YWNrcywgb3B0cy5zdGFja05hbWVzLCBcImRlc3Ryb3lcIik7XG5cbiAgICBpZiAoIW9wdHMuaWdub3JlTWlzc2luZ1N0YWNrRGVwZW5kZW5jaWVzKSB7XG4gICAgICBjaGVja0lmQWxsRGVwZW5kYW50c0FyZUluY2x1ZGVkKHN0YWNrc1RvUnVuLCBzdGFja3MpO1xuICAgIH1cblxuICAgIHRoaXMuc3RvcEFsbFN0YWNrc1RoYXRDYW5Ob3RSdW5XaXRob3V0ID0gKHN0YWNrTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBzdGFja0V4ZWN1dG9yID0gdGhpcy5zdGFja3NUb1J1bi5maW5kKFxuICAgICAgICAocykgPT4gcy5zdGFjay5uYW1lID09PSBzdGFja05hbWUsXG4gICAgICApO1xuICAgICAgaWYgKCFzdGFja0V4ZWN1dG9yKSB7XG4gICAgICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChcbiAgICAgICAgICBgQ291bGQgbm90IGZpbmQgc3RhY2sgXCIke3N0YWNrTmFtZX1cIiB0aGF0IHdhcyBzdG9wcGVkYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgc3RhY2tFeGVjdXRvci5zdGFjay5kZXBlbmRlbmNpZXMuZm9yRWFjaCgoZGVwZW5kYW50KSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcEFsbFN0YWNrc1RoYXRDYW5Ob3RSdW5XaXRob3V0KGRlcGVuZGFudCk7XG5cbiAgICAgICAgY29uc3QgZGVwZW5kYW50U3RhY2sgPSB0aGlzLnN0YWNrc1RvUnVuLmZpbmQoXG4gICAgICAgICAgKHMpID0+IHMuc3RhY2submFtZSA9PT0gZGVwZW5kYW50LFxuICAgICAgICApO1xuICAgICAgICBpZiAoIWRlcGVuZGFudFN0YWNrKSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKFxuICAgICAgICAgICAgYENvdWxkIG5vdCBmaW5kIHN0YWNrIFwiJHtkZXBlbmRhbnR9XCIgdGhhdCB3YXMgc3RvcHBlZGAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlcGVuZGFudFN0YWNrLnN0b3AoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5zdGFja3NUb1J1biA9IHN0YWNrc1RvUnVuLm1hcCgoc3RhY2spID0+XG4gICAgICB0aGlzLmdldFN0YWNrRXhlY3V0b3Ioc3RhY2ssIG9wdHMpLFxuICAgICk7XG4gICAgY29uc3QgbmV4dCA9IG9wdHMuaWdub3JlTWlzc2luZ1N0YWNrRGVwZW5kZW5jaWVzXG4gICAgICA/ICgpID0+XG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgdGhpcy5zdGFja3NUb1J1bi5maWx0ZXIoXG4gICAgICAgICAgICAgIChzdGFjaykgPT4gc3RhY2suY3VycmVudFN0YXRlICE9PSBcImRvbmVcIixcbiAgICAgICAgICAgIClbMF0sXG4gICAgICAgICAgKVxuICAgICAgOiAoKSA9PiBnZXRTdGFja1dpdGhOb1VubWV0RGVwZW5kYW50cyh0aGlzLnN0YWNrc1RvUnVuKTtcblxuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZShcImRlc3Ryb3lcIiwgbmV4dCwgb3B0cyk7XG5cbiAgICBjb25zdCB1bnByb2Nlc3NlZFN0YWNrcyA9IHRoaXMuc3RhY2tzVG9SdW4uZmlsdGVyKFxuICAgICAgKGV4ZWN1dG9yKSA9PiBleGVjdXRvci5pc1BlbmRpbmcsXG4gICAgKTtcbiAgICBpZiAodW5wcm9jZXNzZWRTdGFja3MubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgRXJyb3JzLkV4dGVybmFsKFxuICAgICAgICBgU29tZSBzdGFja3MgZmFpbGVkIHRvIGRlc3Ryb3k6ICR7dW5wcm9jZXNzZWRTdGFja3NcbiAgICAgICAgICAubWFwKChzKSA9PiBzLnN0YWNrLm5hbWUpXG4gICAgICAgICAgLmpvaW4oXCIsIFwiKX0uIFBsZWFzZSBjaGVjayB0aGUgbG9ncyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5wcm9qZWN0VGVsZW1ldHJ5KFwiZGVzdHJveVwiLCB7XG4gICAgICAgIHN0YWNrTWV0YWRhdGE6IHN0YWNrc1RvUnVuLm1hcCgoc3RhY2spID0+XG4gICAgICAgICAgSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcIi8vXCJdXG4gICAgICAgICAgICA/IEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCIvL1wiXS5tZXRhZGF0YVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgICAgZmFpbGVkU3RhY2tzOiB1bnByb2Nlc3NlZFN0YWNrcy5tYXAoKHN0YWNrKSA9PiBzdGFjay5lcnJvciksXG4gICAgICAgIHJlcXVpcmVkUHJvdmlkZXJzOiBzdGFja3NUb1J1bi5tYXAoKHN0YWNrOiBhbnkpID0+XG4gICAgICAgICAgSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcInRlcnJhZm9ybVwiXVxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1widGVycmFmb3JtXCJdLnJlcXVpcmVkX3Byb3ZpZGVyc1xuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIkZhaWxlZCB0byBzZW5kIHRlbGVtZXRyeVwiLCBlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJvamVjdFRlbGVtZXRyeShjb21tYW5kOiBzdHJpbmcsIHBheWxvYWQ6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlYWRDb25maWdTeW5jKCk7XG4gICAgYXdhaXQgc2VuZFRlbGVtZXRyeShjb21tYW5kLCB7XG4gICAgICAuLi5wYXlsb2FkLFxuICAgICAgbGFuZ3VhZ2U6IGNvbmZpZy5sYW5ndWFnZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmZXRjaE91dHB1dHMob3B0czogRmV0Y2hPdXRwdXRPcHRpb25zKSB7XG4gICAgY29uc3Qgc3RhY2tzID0gb3B0cy5za2lwU3ludGhcbiAgICAgID8gYXdhaXQgdGhpcy5yZWFkU3ludGhlc2l6ZWRTdGFja3MoKVxuICAgICAgOiBhd2FpdCB0aGlzLnN5bnRoKCk7XG5cbiAgICBjb25zdCBzdGFja3NUb1J1biA9IGdldE11bHRpcGxlU3RhY2tzKFxuICAgICAgc3RhY2tzLFxuICAgICAgb3B0cy5zdGFja05hbWVzIHx8IFtdLFxuICAgICAgXCJkZXBsb3lcIixcbiAgICApO1xuXG4gICAgaWYgKHN0YWNrc1RvUnVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RhY2tzIHRvIGZldGNoIG91dHB1dHMgZm9yIHNwZWNpZmllZFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YWNrc1RvUnVuID0gc3RhY2tzVG9SdW4ubWFwKChzdGFjaykgPT5cbiAgICAgIC8vIE9wdGlvbnMgYXJlIGVtcHR5LCBiZWNhdXNlIE11bHRpcGxlU3RhY2tPcHRpb25zIGRvZXNuJ3QgaGF2ZSBhbnkgcmVsZXZhbnRcbiAgICAgIC8vIG9wdGlvbnMgZm9yIGBnZXRTdGFja0V4ZWN1dG9yYCwgaGVuY2UgZGVmYXVsdHMgYXJlIGZpbmVcbiAgICAgIHRoaXMuZ2V0U3RhY2tFeGVjdXRvcihzdGFjaywge30pLFxuICAgICk7XG5cbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVTdGFja3NUb1J1bkluU2VyaWFsKHVuZGVmaW5lZCwgb3B0cy5za2lwUHJvdmlkZXJMb2NrKTtcbiAgICBjb25zdCBvdXRwdXRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB0aGlzLnN0YWNrc1RvUnVuLm1hcChhc3luYyAocykgPT4ge1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBzLmZldGNoT3V0cHV0cygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFtzLnN0YWNrLm5hbWVdOiBvdXRwdXQsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgcmV0dXJuIG91dHB1dHMucmVkdWNlKFxuICAgICAgKGFjYywgY3VycikgPT4gKHsgLi4uYWNjLCAuLi5jdXJyIH0pLFxuICAgICAge30sXG4gICAgKSBhcyBOZXN0ZWRUZXJyYWZvcm1PdXRwdXRzO1xuICB9XG5cbiAgLy8gU2VyaWFsbHkgcnVuIHRlcnJhZm9ybSBpbml0IHRvIHByb2hpYml0IHRleHQgZmlsZSBidXN5IGVycm9ycyBmb3IgdGhlIGNhY2hlIGZpbGVzXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZVN0YWNrc1RvUnVuSW5TZXJpYWwoXG4gICAgbm9Db2xvcj86IGJvb2xlYW4sXG4gICAgc2tpcFByb3ZpZGVyTG9jaz86IGJvb2xlYW4sXG4gICAgbWlncmF0ZVN0YXRlPzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBzdGFjayBvZiB0aGlzLnN0YWNrc1RvUnVuKSB7XG4gICAgICBhd2FpdCBzdGFjay5pbml0YWxpemVUZXJyYWZvcm0obm9Db2xvciwgc2tpcFByb3ZpZGVyTG9jaywgbWlncmF0ZVN0YXRlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -102,6 +102,12 @@ export declare class CdktfStack {
|
|
|
102
102
|
private updateState;
|
|
103
103
|
private createTerraformLogHandler;
|
|
104
104
|
private terraformClient;
|
|
105
|
+
/**
|
|
106
|
+
* When the project opts in via `validateInstalledBinary: true` in
|
|
107
|
+
* cdktf.json, verifies the installed Terraform-compatible binary against
|
|
108
|
+
* the project's declared `targetVersions` before executing it.
|
|
109
|
+
*/
|
|
110
|
+
private validateInstalledBinaryIfConfigured;
|
|
105
111
|
initalizeTerraform(noColor?: boolean, skipProviderLock?: boolean, migrateState?: boolean): Promise<Terraform>;
|
|
106
112
|
private requiredProviders;
|
|
107
113
|
private checkNeedsLockfileUpdate;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdktf-stack.d.ts","sourceRoot":"","sources":["../../src/lib/cdktf-stack.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAA6B,sBAAsB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"cdktf-stack.d.ts","sourceRoot":"","sources":["../../src/lib/cdktf-stack.ts"],"names":[],"mappings":"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"}
|
package/build/lib/cdktf-stack.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.CdktfStack = void 0;
|
|
4
4
|
const output_1 = require("./output");
|
|
5
5
|
const commons_1 = require("@cdktn/commons");
|
|
6
|
+
const installed_binary_check_1 = require("./installed-binary-check");
|
|
6
7
|
const terraform_logs_1 = require("./server/terraform-logs");
|
|
7
8
|
const terraform_cli_1 = require("./models/terraform-cli");
|
|
8
9
|
const dependency_manager_1 = require("./dependencies/dependency-manager");
|
|
@@ -76,8 +77,24 @@ class CdktfStack {
|
|
|
76
77
|
async terraformClient() {
|
|
77
78
|
return await getTerraformClient(this.options.abortSignal, this.options.stack, this.createTerraformLogHandler.bind(this));
|
|
78
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* When the project opts in via `validateInstalledBinary: true` in
|
|
82
|
+
* cdktf.json, verifies the installed Terraform-compatible binary against
|
|
83
|
+
* the project's declared `targetVersions` before executing it.
|
|
84
|
+
*/
|
|
85
|
+
async validateInstalledBinaryIfConfigured(terraform) {
|
|
86
|
+
const config = (0, commons_1.readConfigSync)();
|
|
87
|
+
if (!config.validateInstalledBinary) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const problems = (0, installed_binary_check_1.checkInstalledBinaryAgainstTargets)(await terraform.version(), config.targetVersions, commons_1.terraformBinaryName);
|
|
91
|
+
if (problems.length > 0) {
|
|
92
|
+
throw commons_1.Errors.Usage(problems.join("\n"));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
79
95
|
async initalizeTerraform(noColor, skipProviderLock, migrateState) {
|
|
80
96
|
const terraform = await this.terraformClient();
|
|
97
|
+
await this.validateInstalledBinaryIfConfigured(terraform);
|
|
81
98
|
const needsLockfileUpdate = skipProviderLock
|
|
82
99
|
? false
|
|
83
100
|
: await this.checkNeedsLockfileUpdate();
|
|
@@ -383,4 +400,4 @@ new SomeResource(...).importFrom("some_id")
|
|
|
383
400
|
}
|
|
384
401
|
}
|
|
385
402
|
exports.CdktfStack = CdktfStack;
|
|
386
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrdGYtc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2Nka3RmLXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHFDQUE2RTtBQUM3RSw0Q0FBd0M7QUFDeEMsNERBQWtFO0FBQ2xFLDBEQUtnQztBQUNoQywwRUFBdUU7QUFDdkUscURBQXVFO0FBQ3ZFLHVFQUFrRTtBQUNsRSx1Q0FBcUQ7QUE0RnJELEtBQUssVUFBVSxrQkFBa0IsQ0FDL0IsV0FBd0IsRUFDeEIsS0FBdUIsRUFDdkIseUJBR2lEO0lBRWpELE9BQU8sSUFBSSw0QkFBWSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUseUJBQXlCLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBMkJELE1BQWEsVUFBVTtJQVVyQixZQUFtQixPQUEwQjtRQUExQixZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQU50QyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRVAsaUJBQVksR0FBcUIsTUFBTSxDQUFDO1FBS3RELElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLG9DQUFtQixDQUFDLEtBQUssQ0FDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVELElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN2RCxDQUFDO0lBQ0QsSUFBVyxNQUFNO1FBQ2YsT0FBTyxDQUNMLElBQUksQ0FBQyxZQUFZLEtBQUssTUFBTTtZQUM1QixJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVM7WUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUNELElBQVcsU0FBUztRQUNsQixPQUFPLENBQUMsSUFBSSxDQUFD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ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBTeW50aGVzaXplZFN0YWNrIH0gZnJvbSBcIi4vc3ludGgtc3RhY2tcIjtcbmltcG9ydCB7IFRlcnJhZm9ybSB9IGZyb20gXCIuL21vZGVscy90ZXJyYWZvcm1cIjtcbmltcG9ydCB7IGdldENvbnN0cnVjdElkc0Zvck91dHB1dHMsIE5lc3RlZFRlcnJhZm9ybU91dHB1dHMgfSBmcm9tIFwiLi9vdXRwdXRcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgZXh0cmFjdEpzb25Mb2dJZlByZXNlbnQgfSBmcm9tIFwiLi9zZXJ2ZXIvdGVycmFmb3JtLWxvZ3NcIjtcbmltcG9ydCB7XG4gIFRlcnJhZm9ybUNsaSxcbiAgT3V0cHV0RmlsdGVyLFxuICB0cnlSZWFkR2VuZXJhdGVkQ29uZmlndXJhdGlvbkZpbGUsXG4gIHRyeVJlbW92ZUdlbmVyYXRlZENvbmZpZ3VyYXRpb25GaWxlLFxufSBmcm9tIFwiLi9tb2RlbHMvdGVycmFmb3JtLWNsaVwiO1xuaW1wb3J0IHsgUHJvdmlkZXJDb25zdHJhaW50IH0gZnJvbSBcIi4vZGVwZW5kZW5jaWVzL2RlcGVuZGVuY3ktbWFuYWdlclwiO1xuaW1wb3J0IHsgdGVycmFmb3JtSnNvblNjaGVtYSwgVGVycmFmb3JtU3RhY2sgfSBmcm9tIFwiLi90ZXJyYWZvcm0tanNvblwiO1xuaW1wb3J0IHsgVGVycmFmb3JtUHJvdmlkZXJMb2NrIH0gZnJvbSBcIi4vdGVycmFmb3JtLXByb3ZpZGVyLWxvY2tcIjtcbmltcG9ydCB7IGNvbnZlcnRDb25maWd1cmF0aW9uRmlsZSB9IGZyb20gXCIuL2NvbnZlcnRcIjtcblxuZXhwb3J0IHR5cGUgU3RhY2tVcGRhdGUgPVxuICB8IHtcbiAgICAgIHR5cGU6IFwicGxhbm5pbmdcIjtcbiAgICAgIHN0YWNrTmFtZTogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcInBsYW5uZWRcIjtcbiAgICAgIHN0YWNrTmFtZTogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcImRlcGxveWluZ1wiO1xuICAgICAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwiZGVwbG95IHVwZGF0ZVwiO1xuICAgICAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gICAgICBkZXBsb3lPdXRwdXQ6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJkZXBsb3llZFwiO1xuICAgICAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gICAgICBvdXRwdXRzQnlDb25zdHJ1Y3RJZDogTmVzdGVkVGVycmFmb3JtT3V0cHV0cztcbiAgICAgIG91dHB1dHM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwiZGVzdHJveWluZ1wiO1xuICAgICAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwiZGVzdHJveSB1cGRhdGVcIjtcbiAgICAgIHN0YWNrTmFtZTogc3RyaW5nO1xuICAgICAgZGVzdHJveU91dHB1dDogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcImRlc3Ryb3llZFwiO1xuICAgICAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwib3V0cHV0cyBmZXRjaGVkXCI7XG4gICAgICBzdGFja05hbWU6IHN0cmluZztcbiAgICAgIG91dHB1dHNCeUNvbnN0cnVjdElkOiBOZXN0ZWRUZXJyYWZvcm1PdXRwdXRzO1xuICAgICAgb3V0cHV0czogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJlcnJvcmVkXCI7XG4gICAgICBzdGFja05hbWU6IHN0cmluZztcbiAgICAgIGVycm9yOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwiZGlzbWlzc2VkXCI7XG4gICAgICBzdGFja05hbWU6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJpbXBvcnQgd2l0aCBjb25maWd1cmF0aW9uIGRldGVjdGVkXCI7XG4gICAgICBzdGFja05hbWU6IHN0cmluZztcbiAgICAgIGNvbmZpZ3VyYXRpb246IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJpbXBvcnQgd2l0aCBjb25maWd1cmF0aW9uIGNvbnZlcnRlZFwiO1xuICAgICAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gICAgICBjb25maWd1cmF0aW9uOiBzdHJpbmc7XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgU3RhY2tVc2VySW5wdXRVcGRhdGUgPVxuICB8IFN0YWNrQXBwcm92YWxVcGRhdGVcbiAgfCBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGU7XG5cbmV4cG9ydCB0eXBlIFN0YWNrQXBwcm92YWxVcGRhdGUgPSB7XG4gIHR5cGU6IFwid2FpdGluZyBmb3Igc3RhY2sgYXBwcm92YWxcIjtcbiAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIGFwcHJvdmU6ICgpID0+IHZvaWQ7XG4gIHJlamVjdDogKCkgPT4gdm9pZDtcbn07XG5leHBvcnQgdHlwZSBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGUgPSB7XG4gIHR5cGU6IFwid2FpdGluZyBmb3Igc3RhY2sgc2VudGluZWwgb3ZlcnJpZGVcIjtcbiAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIG92ZXJyaWRlOiAoKSA9PiB2b2lkO1xuICByZWplY3Q6ICgpID0+IHZvaWQ7XG59O1xuZXhwb3J0IHR5cGUgRXh0ZXJuYWxTdGFja0FwcHJvdmFsVXBkYXRlID0ge1xuICB0eXBlOiBcImV4dGVybmFsIHN0YWNrIGFwcHJvdmFsIHJlcGx5XCI7XG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICBhcHByb3ZlZDogYm9vbGVhbjsgLy8gZmFsc2UgPSByZWplY3RlZFxufTtcbmV4cG9ydCB0eXBlIEV4dGVybmFsU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlID0ge1xuICB0eXBlOiBcImV4dGVybmFsIHN0YWNrIHNlbnRpbmVsIG92ZXJyaWRlIHJlcGx5XCI7XG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICBvdmVycmlkZGVuOiBib29sZWFuOyAvLyBmYWxzZSA9IHJlamVjdGVkXG59O1xuXG5hc3luYyBmdW5jdGlvbiBnZXRUZXJyYWZvcm1DbGllbnQoXG4gIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCxcbiAgc3RhY2s6IFN5bnRoZXNpemVkU3RhY2ssXG4gIGNyZWF0ZVRlcnJhZm9ybUxvZ0hhbmRsZXI6IChcbiAgICBwaGFzZTogc3RyaW5nLFxuICAgIGZpbHRlcj86IE91dHB1dEZpbHRlcltdLFxuICApID0+IChtZXNzYWdlOiBzdHJpbmcsIGlzRXJyb3I/OiBib29sZWFuKSA9PiB2b2lkLFxuKTogUHJvbWlzZTxUZXJyYWZvcm0+IHtcbiAgcmV0dXJuIG5ldyBUZXJyYWZvcm1DbGkoYWJvcnRTaWduYWwsIHN0YWNrLCBjcmVhdGVUZXJyYWZvcm1Mb2dIYW5kbGVyKTtcbn1cblxudHlwZSBDZGt0ZlN0YWNrT3B0aW9ucyA9IHtcbiAgc3RhY2s6IFN5bnRoZXNpemVkU3RhY2s7XG4gIG9uVXBkYXRlOiAoXG4gICAgdXBkYXRlOlxuICAgICAgfCBTdGFja1VwZGF0ZVxuICAgICAgfCBTdGFja0FwcHJvdmFsVXBkYXRlXG4gICAgICB8IEV4dGVybmFsU3RhY2tBcHByb3ZhbFVwZGF0ZVxuICAgICAgfCBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGVcbiAgICAgIHwgRXh0ZXJuYWxTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGUsXG4gICkgPT4gdm9pZDtcbiAgb25Mb2c/OiAobG9nOiB7IG1lc3NhZ2U6IHN0cmluZzsgaXNFcnJvcjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBhdXRvQXBwcm92ZT86IGJvb2xlYW47XG4gIG1pZ3JhdGVTdGF0ZT86IGJvb2xlYW47XG4gIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbDtcbn07XG5cbnR5cGUgQ2RrdGZTdGFja1N0YXRlcyA9XG4gIHwgU3RhY2tVcGRhdGVbXCJ0eXBlXCJdXG4gIHwgU3RhY2tBcHByb3ZhbFVwZGF0ZVtcInR5cGVcIl1cbiAgfCBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGVbXCJ0eXBlXCJdXG4gIHwgRXh0ZXJuYWxTdGFja0FwcHJvdmFsVXBkYXRlW1widHlwZVwiXVxuICB8IEV4dGVybmFsU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlW1widHlwZVwiXVxuICB8IFwiaWRsZVwiXG4gIHwgXCJkb25lXCI7XG5cbmV4cG9ydCBjbGFzcyBDZGt0ZlN0YWNrIHtcbiAgcHVibGljIHN0YWNrOiBTeW50aGVzaXplZFN0YWNrO1xuICBwdWJsaWMgb3V0cHV0cz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHB1YmxpYyBvdXRwdXRzQnlDb25zdHJ1Y3RJZD86IE5lc3RlZFRlcnJhZm9ybU91dHB1dHM7XG4gIHB1YmxpYyBzdG9wcGVkID0gZmFsc2U7XG4gIHB1YmxpYyBjdXJyZW50V29ya1Byb21pc2U6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyByZWFkb25seSBjdXJyZW50U3RhdGU6IENka3RmU3RhY2tTdGF0ZXMgPSBcImlkbGVcIjtcbiAgcHVibGljIGVycm9yPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcnNlZENvbnRlbnQ6IFRlcnJhZm9ybVN0YWNrO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBvcHRpb25zOiBDZGt0ZlN0YWNrT3B0aW9ucykge1xuICAgIHRoaXMuc3RhY2sgPSBvcHRpb25zLnN0YWNrO1xuICAgIHRoaXMucGFyc2VkQ29udGVudCA9IHRlcnJhZm9ybUpzb25TY2hlbWEucGFyc2UoXG4gICAgICBKU09OLnBhcnNlKHRoaXMuc3RhY2suY29udGVudCksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNQZW5kaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGF0ZSA9PT0gXCJpZGxlXCIgJiYgIXRoaXMuc3RvcHBlZDtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzRG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXJyZW50U3RhdGUgPT09IFwiZG9uZVwiIHx8XG4gICAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9PT0gXCJlcnJvcmVkXCIgfHxcbiAgICAgIHRoaXMuc3RvcHBlZFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBpc1J1bm5pbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzUGVuZGluZyAmJiAhdGhpcy5pc0RvbmU7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRlKFxuICAgIHVwZGF0ZTpcbiAgICAgIHwgU3RhY2tVcGRhdGVcbiAgICAgIHwgU3RhY2tBcHByb3ZhbFVwZGF0ZVxuICAgICAgfCBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGVcbiAgICAgIHwgRXh0ZXJuYWxTdGFja0FwcHJvdmFsVXBkYXRlXG4gICAgICB8IEV4dGVybmFsU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlXG4gICAgICB8IHsgdHlwZTogXCJpZGxlXCIgfVxuICAgICAgfCB7IHR5cGU6IFwiZG9uZVwiIH0sXG4gICkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgWyR7dGhpcy5zdGFjay5uYW1lfV06ICR7dXBkYXRlLnR5cGV9YCk7XG4gICAgKHRoaXMuY3VycmVudFN0YXRlIGFzIENka3RmU3RhY2tTdGF0ZXMpID0gdXBkYXRlLnR5cGU7XG4gICAgc3dpdGNoICh1cGRhdGUudHlwZSkge1xuICAgICAgY2FzZSBcImlkbGVcIjpcbiAgICAgIGNhc2UgXCJkb25lXCI6XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiZXJyb3JlZFwiOlxuICAgICAgICB0aGlzLmVycm9yID0gdXBkYXRlLmVycm9yO1xuICAgICAgICB0aGlzLm9wdGlvbnMub25VcGRhdGUodXBkYXRlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJvdXRwdXRzIGZldGNoZWRcIjpcbiAgICAgIGNhc2UgXCJkZXBsb3llZFwiOlxuICAgICAgICBsb2dnZXIuZGVidWcoYE91dHB1dHM6ICR7SlNPTi5zdHJpbmdpZnkodXBkYXRlLm91dHB1dHMpfWApO1xuICAgICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgICAgYE91dHB1dHNCeUNvbnN0cnVjdElkOiAke0pTT04uc3RyaW5naWZ5KHVwZGF0ZS5vdXRwdXRzQnlDb25zdHJ1Y3RJZCl9YCxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5vdXRwdXRzID0gdXBkYXRlLm91dHB1dHM7XG4gICAgICAgIHRoaXMub3V0cHV0c0J5Q29uc3RydWN0SWQgPSB1cGRhdGUub3V0cHV0c0J5Q29uc3RydWN0SWQ7XG4gICAgICAgIHRoaXMub3B0aW9ucy5vblVwZGF0ZSh1cGRhdGUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5vcHRpb25zLm9uVXBkYXRlKHVwZGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGVycmFmb3JtTG9nSGFuZGxlcihcbiAgICBwaGFzZTogc3RyaW5nLFxuICAgIGZpbHRlcnM/OiBPdXRwdXRGaWx0ZXJbXSxcbiAgKTogKG1lc3NhZ2U6IHN0cmluZywgaXNFcnJvcj86IGJvb2xlYW4pID0+IHZvaWQge1xuICAgIGxvZ2dlci5kZWJ1ZyhcIkNyZWF0aW5nIHRlcnJhZm9ybSBsb2cgaGFuZGxlclwiLCBwaGFzZSk7XG5cbiAgICBjb25zdCBvbkxvZyA9IHRoaXMub3B0aW9ucy5vbkxvZztcbiAgICByZXR1cm4gKG1zZzogc3RyaW5nLCBpc0Vycm9yID0gZmFsc2UpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBleHRyYWN0SnNvbkxvZ0lmUHJlc2VudChtc2cpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBbJHt0aGlzLm9wdGlvbnMuc3RhY2submFtZX1dKCR7cGhhc2V9KTogJHttc2d9YCk7XG5cbiAgICAgIGNvbnN0IGZpbHRlclRvQXBwbHkgPSBmaWx0ZXJzPy5maW5kKChmaWx0ZXIpID0+XG4gICAgICAgIGZpbHRlci5jb25kaXRpb24obWVzc2FnZSksXG4gICAgICApO1xuICAgICAgY29uc3QgZmlsdGVyZWRNZXNzYWdlID0gZmlsdGVyVG9BcHBseVxuICAgICAgICA/IGZpbHRlclRvQXBwbHkudHJhbnNmb3JtKG1lc3NhZ2UpXG4gICAgICAgIDogbWVzc2FnZTtcblxuICAgICAgaWYgKGZpbHRlcmVkTWVzc2FnZSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgICAgYEZpbHRlciAke2ZpbHRlclRvQXBwbHl9IGFwcGxpZWQgb24gbGluZSAnJHttZXNzYWdlfScgd2l0aCByZXN1bHQgJyR7ZmlsdGVyZWRNZXNzYWdlfSdgLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAob25Mb2cpIHtcbiAgICAgICAgb25Mb2coeyBtZXNzYWdlOiBmaWx0ZXJlZE1lc3NhZ2UsIGlzRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdGVycmFmb3JtQ2xpZW50KCkge1xuICAgIHJldHVybiBhd2FpdCBnZXRUZXJyYWZvcm1DbGllbnQoXG4gICAgICB0aGlzLm9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICB0aGlzLm9wdGlvbnMuc3RhY2ssXG4gICAgICB0aGlzLmNyZWF0ZVRlcnJhZm9ybUxvZ0hhbmRsZXIuYmluZCh0aGlzKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGluaXRhbGl6ZVRlcnJhZm9ybShcbiAgICBub0NvbG9yPzogYm9vbGVhbixcbiAgICBza2lwUHJvdmlkZXJMb2NrPzogYm9vbGVhbixcbiAgICBtaWdyYXRlU3RhdGU/OiBib29sZWFuLFxuICApIHtcbiAgICBjb25zdCB0ZXJyYWZvcm0gPSBhd2FpdCB0aGlzLnRlcnJhZm9ybUNsaWVudCgpO1xuICAgIGNvbnN0IG5lZWRzTG9ja2ZpbGVVcGRhdGUgPSBza2lwUHJvdmlkZXJMb2NrXG4gICAgICA/IGZhbHNlXG4gICAgICA6IGF3YWl0IHRoaXMuY2hlY2tOZWVkc0xvY2tmaWxlVXBkYXRlKCk7XG4gICAgY29uc3QgbmVlZHNVcGdyYWRlID0gYXdhaXQgdGhpcy5jaGVja05lZWRzVXBncmFkZSgpO1xuICAgIGF3YWl0IHRlcnJhZm9ybS5pbml0KHtcbiAgICAgIG5lZWRzVXBncmFkZSxcbiAgICAgIG5vQ29sb3I6IG5vQ29sb3IgPz8gZmFsc2UsXG4gICAgICBuZWVkc0xvY2tmaWxlVXBkYXRlLFxuICAgICAgbWlncmF0ZVN0YXRlOiBtaWdyYXRlU3RhdGUgPz8gZmFsc2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRlcnJhZm9ybTtcbiAgfVxuXG4gIHByaXZhdGUgcmVxdWlyZWRQcm92aWRlcnMoKSB7XG4gICAgLy8gUmVhZCByZXF1aXJlZCBwcm92aWRlcnMgZnJvbSB0aGUgc3RhY2sgb3V0cHV0XG4gICAgY29uc3QgcmVxdWlyZWRQcm92aWRlcnMgPSB0aGlzLnBhcnNlZENvbnRlbnQudGVycmFmb3JtPy5yZXF1aXJlZF9wcm92aWRlcnM7XG5cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZXF1aXJlZFByb3ZpZGVycyB8fCB7fSkucmVkdWNlKFxuICAgICAgKGFjYywgb2JqKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnQgPSBuZXcgUHJvdmlkZXJDb25zdHJhaW50KG9iai5zb3VyY2UsIG9iai52ZXJzaW9uKTtcbiAgICAgICAgYWNjW2NvbnN0cmFpbnQuc291cmNlXSA9IGNvbnN0cmFpbnQ7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LFxuICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgUHJvdmlkZXJDb25zdHJhaW50PixcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja05lZWRzTG9ja2ZpbGVVcGRhdGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5taWdyYXRlU3RhdGUpIHtcbiAgICAgIC8vIElmIHdlJ3JlIG1pZ3JhdGluZyBzdGF0ZSwgd2UgbmVlZCB0byBpbml0XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgbG9jayA9IG5ldyBUZXJyYWZvcm1Qcm92aWRlckxvY2sodGhpcy5zdGFjay53b3JraW5nRGlyZWN0b3J5KTtcbiAgICBjb25zdCBsb2NrRmlsZUV4aXN0cyA9IGF3YWl0IGxvY2suaGFzUHJvdmlkZXJMb2NrRmlsZSgpO1xuXG4gICAgaWYgKCFsb2NrRmlsZUV4aXN0cykge1xuICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGxvY2sgZmlsZSwgdGhpcyBpcyBwcm9iYWJseSB0aGUgZmlyc3QgaW5pdFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWlyZWRQcm92aWRlcnMgPSB0aGlzLnJlcXVpcmVkUHJvdmlkZXJzKCk7XG5cbiAgICBmb3IgKGNvbnN0IHByb3ZpZGVyIG9mIE9iamVjdC52YWx1ZXMocmVxdWlyZWRQcm92aWRlcnMpKSB7XG4gICAgICBjb25zdCBoYXNQcm92aWRlciA9IGF3YWl0IGxvY2suaGFzTWF0Y2hpbmdQcm92aWRlcihwcm92aWRlcik7XG4gICAgICBpZiAoIWhhc1Byb3ZpZGVyKSB7XG4gICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBwcm92aWRlciBvciB2ZXJzaW9uIGRvZXNuJ3QgbWF0Y2gsIHdlIG5lZWQgdG8gaW5pdFxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrTmVlZHNVcGdyYWRlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2sgPSBuZXcgVGVycmFmb3JtUHJvdmlkZXJMb2NrKHRoaXMuc3RhY2sud29ya2luZ0RpcmVjdG9yeSk7XG4gICAgY29uc3QgYWxsUHJvdmlkZXJzID0gdGhpcy5yZXF1aXJlZFByb3ZpZGVycygpO1xuICAgIGNvbnN0IGxvY2tlZFByb3ZpZGVycyA9IE9iamVjdC52YWx1ZXMoYXdhaXQgbG9jay5wcm92aWRlcnMoKSk7XG5cbiAgICAvLyBDaGVjayBpZiBhbnkgcHJvdmlkZXIgY29udGFpbmVkIGluIGBwcm92aWRlcnNgIHZpb2xhdGVzIGNvbnN0cmFpbnRzIGluIGBsb2NrZWRQcm92aWRlcnNgXG4gICAgLy8gVXBncmFkZSBpZiBzb21lIHByb3ZpZGVyIGNvbnN0cmFpbnQgbm90IG1ldFxuICAgIC8vIElmIGEgcHJvdmlkZXIgd2Fzbid0IHByZXNldCBpbiBsb2NrZWRQcm92aWRlcnMsIHRoYXQncyBmaW5lOyBpdCB3aWxsIGp1c3QgZ2V0IGFkZGVkXG4gICAgcmV0dXJuIGxvY2tlZFByb3ZpZGVycy5zb21lKChsb2NrZWRQcm92aWRlcikgPT4ge1xuICAgICAgY29uc3QgbG9ja2VkQ29uc3RyYWludCA9IGxvY2tlZFByb3ZpZGVyLmNvbnN0cmFpbnRzO1xuICAgICAgaWYgKCFsb2NrZWRDb25zdHJhaW50KSB7XG4gICAgICAgIC8vIFByb3ZpZGVyIGxvY2sgZG9lc24ndCBoYXZlIGEgY29uc3RyYWludCBzcGVjaWZpZWQsIHNvIHdlIGNhbid0IGNoZWNrLlxuICAgICAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW5cbiAgICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGBQcm92aWRlciBsb2NrIGRvZXNuJ3QgaGF2ZSBhIGNvbnN0cmFpbnQgZm9yICR7bG9ja2VkUHJvdmlkZXIubmFtZX1gLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYWxsUHJvdmlkZXJzW2xvY2tlZENvbnN0cmFpbnQuc291cmNlXTtcbiAgICAgIGlmICghcHJvdmlkZXIpIHtcbiAgICAgICAgLy8gZWxzZSBubyBsb25nZXIgdXNpbmcgdGhpcyBwcm92aWRlciwgc28gd29uJ3QgY2F1c2UgcHJvYmxlbXNcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWxvY2tlZENvbnN0cmFpbnQubWF0Y2hlc1ZlcnNpb24ocHJvdmlkZXIudmVyc2lvbiA/PyBcIj4wXCIpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBydW4oY2I6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICBpZiAodGhpcy5zdG9wcGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuY3VycmVudFdvcmtQcm9taXNlID0gY2IoKTtcbiAgICAgIGF3YWl0IHRoaXMuY3VycmVudFdvcmtQcm9taXNlO1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7IHR5cGU6IFwiZG9uZVwiIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci50cmFjZShcIkVycm9yIGluIGN1cnJlbnRXb3JrUHJvbWlzZVwiLCBlKTtcbiAgICAgIHRoaXMuY3VycmVudFdvcmtQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgIHR5cGU6IFwiZXJyb3JlZFwiLFxuICAgICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSxcbiAgICAgICAgZXJyb3I6IFN0cmluZyhlKSxcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5jdXJyZW50V29ya1Byb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGRpZmYoe1xuICAgIHJlZnJlc2hPbmx5LFxuICAgIHRlcnJhZm9ybVBhcmFsbGVsaXNtLFxuICAgIHZhcnMsXG4gICAgdmFyRmlsZXMsXG4gICAgbm9Db2xvcixcbiAgfToge1xuICAgIHJlZnJlc2hPbmx5PzogYm9vbGVhbjtcbiAgICB0ZXJyYWZvcm1QYXJhbGxlbGlzbT86IG51bWJlcjtcbiAgICB2YXJzPzogc3RyaW5nW107XG4gICAgdmFyRmlsZXM/OiBzdHJpbmdbXTtcbiAgICBub0NvbG9yPzogYm9vbGVhbjtcbiAgfSkge1xuICAgIGF3YWl0IHRoaXMucnVuKGFzeW5jICgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGUoeyB0eXBlOiBcInBsYW5uaW5nXCIsIHN0YWNrTmFtZTogdGhpcy5zdGFjay5uYW1lIH0pO1xuICAgICAgY29uc3QgdGVycmFmb3JtID0gYXdhaXQgdGhpcy50ZXJyYWZvcm1DbGllbnQoKTtcblxuICAgICAgYXdhaXQgdGVycmFmb3JtLnBsYW4oe1xuICAgICAgICBkZXN0cm95OiBmYWxzZSxcbiAgICAgICAgcmVmcmVzaE9ubHksXG4gICAgICAgIHBhcmFsbGVsaXNtOiB0ZXJyYWZvcm1QYXJhbGxlbGlzbSxcbiAgICAgICAgdmFycyxcbiAgICAgICAgdmFyRmlsZXMsXG4gICAgICAgIG5vQ29sb3IsXG4gICAgICB9KTtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGUoeyB0eXBlOiBcInBsYW5uZWRcIiwgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUgfSk7XG5cbiAgICAgIC8vIEZpbmQgZ2VuZXJhdGVkIGZpbGVcbiAgICAgIGNvbnN0IGNvbmZpZ0ZpbGUgPSBhd2FpdCB0cnlSZWFkR2VuZXJhdGVkQ29uZmlndXJhdGlvbkZpbGUoXG4gICAgICAgIHRoaXMuc3RhY2sud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgICk7XG4gICAgICBpZiAoY29uZmlnRmlsZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgICAgICB0eXBlOiBcImltcG9ydCB3aXRoIGNvbmZpZ3VyYXRpb24gZGV0ZWN0ZWRcIixcbiAgICAgICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWdGaWxlLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBjb252ZXJ0ZWRDb2RlID0gYXdhaXQgY29udmVydENvbmZpZ3VyYXRpb25GaWxlKFxuICAgICAgICAgIGNvbmZpZ0ZpbGUsXG4gICAgICAgICAgdGhpcy5zdGFjay53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgICAgICB0eXBlOiBcImltcG9ydCB3aXRoIGNvbmZpZ3VyYXRpb24gY29udmVydGVkXCIsXG4gICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgY29uZmlndXJhdGlvbjogY29udmVydGVkQ29kZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG9uTG9nID0gdGhpcy5vcHRpb25zLm9uTG9nO1xuICAgICAgICBpZiAob25Mb2cpIHtcbiAgICAgICAgICBvbkxvZyh7XG4gICAgICAgICAgICBtZXNzYWdlOiBgSW1wb3J0IHdpdGhvdXQgY29uZmlndXJhdGlvbiBkZXRlY3RlZC4gVGVycmFmb3JtIGhhcyBjcmVhdGVkIGNvbmZpZ3VyYXRpb24gZm9yIGl0OlxuJHtjb25maWdGaWxlfVxuXG5DREtUTiBoYXMgdHJhbnNsYXRlZCB0aGUgY29kZSB0byB0aGUgZm9sbG93aW5nOlxuXG4ke2NvbnZlcnRlZENvZGV9XG5cblBsZWFzZSByZXZpZXcgdGhlIGNvZGUgYW5kIG1ha2UgYW55IG5lY2Vzc2FyeSBjaGFuZ2VzIGJlZm9yZSBhZGRpbmcgaXQgdG8geW91ciBjb2RlYmFzZS5cbk1ha2Ugc3VyZSB0byBvbmx5IGNvcHkgdGhlIGNvZGUgd2l0aGluIHRoZSBjb25zdHJ1Y3QncyBjb25zdHJ1Y3Rvci5cblxuTk9URTogWW91ciByZXNvdXJjZSBoYXMgbm90IHlldCBiZWNvbWUgbWFuYWdlZCBieSBDREtUTi4gXG5UbyBmaW5pc2ggdGhlIGltcG9ydCByZW1vdmUgdGhlIGNhbGwgXCJnZW5lcmF0ZUNvbmZpZ0ZvckltcG9ydFwiLCBhZGQgdGhlIGFib3ZlIGNvZGUgd2l0aGluIHRoZSBjb25zdHJ1Y3QncyBjb25zdHJ1Y3RvciwgYW5kIHRoZW4gYXBwZW5kIHRoZSBjYWxsIGltcG9ydEZyb20oPHJlc291cmNlX2lkX3RvX2ltcG9ydF9mcm9tPikgdG8gdGhlIGdlbmVyYXRlZCBjb2RlOiBcblxubmV3IFNvbWVSZXNvdXJjZSguLi4pLmltcG9ydEZyb20oXCJzb21lX2lkXCIpXG5gLFxuICAgICAgICAgICAgaXNFcnJvcjogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdHJ5UmVtb3ZlR2VuZXJhdGVkQ29uZmlndXJhdGlvbkZpbGUodGhpcy5zdGFjay53b3JraW5nRGlyZWN0b3J5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZXBsb3kob3B0czoge1xuICAgIHJlZnJlc2hPbmx5PzogYm9vbGVhbjtcbiAgICB0ZXJyYWZvcm1QYXJhbGxlbGlzbT86IG51bWJlcjtcbiAgICBub0NvbG9yPzogYm9vbGVhbjtcbiAgICB2YXJzPzogc3RyaW5nW107XG4gICAgdmFyRmlsZXM/OiBzdHJpbmdbXTtcbiAgfSkge1xuICAgIGNvbnN0IHsgcmVmcmVzaE9ubHksIHRlcnJhZm9ybVBhcmFsbGVsaXNtLCBub0NvbG9yLCB2YXJzLCB2YXJGaWxlcyB9ID0gb3B0cztcbiAgICBhd2FpdCB0aGlzLnJ1bihhc3luYyAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKHsgdHlwZTogXCJwbGFubmluZ1wiLCBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSB9KTtcbiAgICAgIGNvbnN0IHRlcnJhZm9ybSA9IGF3YWl0IHRoaXMudGVycmFmb3JtQ2xpZW50KCk7XG5cbiAgICAgIGNvbnN0IHsgY2FuY2VsbGVkIH0gPSBhd2FpdCB0ZXJyYWZvcm0uZGVwbG95KFxuICAgICAgICB7XG4gICAgICAgICAgYXV0b0FwcHJvdmU6IHRoaXMub3B0aW9ucy5hdXRvQXBwcm92ZSxcbiAgICAgICAgICByZWZyZXNoT25seSxcbiAgICAgICAgICBwYXJhbGxlbGlzbTogdGVycmFmb3JtUGFyYWxsZWxpc20sXG4gICAgICAgICAgdmFycyxcbiAgICAgICAgICB2YXJGaWxlcyxcbiAgICAgICAgICBub0NvbG9yLFxuICAgICAgICB9LFxuICAgICAgICAoc3RhdGUpID0+IHtcbiAgICAgICAgICAvLyBzdGF0ZSB1cGRhdGVzIHdoaWxlIGFwcGx5IHJ1bnMgdGhhdCBhZmZlY3QgdGhlIFVJXG4gICAgICAgICAgaWYgKHN0YXRlLnR5cGUgPT09IFwicnVubmluZ1wiICYmICFzdGF0ZS5jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgICAgICAgICB0eXBlOiBcImRlcGxveWluZ1wiLFxuICAgICAgICAgICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUudHlwZSA9PT0gXCJ3YWl0aW5nIGZvciBhcHByb3ZhbFwiKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ3YWl0aW5nIGZvciBzdGFjayBhcHByb3ZhbFwiLFxuICAgICAgICAgICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSxcbiAgICAgICAgICAgICAgYXBwcm92ZTogc3RhdGUuYXBwcm92ZSxcbiAgICAgICAgICAgICAgcmVqZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUucmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImRpc21pc3NlZFwiLFxuICAgICAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnR5cGUgPT09IFwid2FpdGluZyBmb3Igc2VudGluZWwgb3ZlcnJpZGVcIikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6IFwid2FpdGluZyBmb3Igc3RhY2sgc2VudGluZWwgb3ZlcnJpZGVcIixcbiAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgIG92ZXJyaWRlOiBzdGF0ZS5vdmVycmlkZSxcbiAgICAgICAgICAgICAgcmVqZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUucmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImRpc21pc3NlZFwiLFxuICAgICAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnR5cGUgPT09IFwiZXh0ZXJuYWwgYXBwcm92YWwgcmVwbHlcIikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6IFwiZXh0ZXJuYWwgc3RhY2sgYXBwcm92YWwgcmVwbHlcIixcbiAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgIGFwcHJvdmVkOiBzdGF0ZS5hcHByb3ZlZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUudHlwZSA9PT0gXCJleHRlcm5hbCBzZW50aW5lbCBvdmVycmlkZSByZXBseVwiKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgICAgICAgICAgdHlwZTogXCJleHRlcm5hbCBzdGFjayBzZW50aW5lbCBvdmVycmlkZSByZXBseVwiLFxuICAgICAgICAgICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSxcbiAgICAgICAgICAgICAgb3ZlcnJpZGRlbjogc3RhdGUub3ZlcnJpZGRlbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dHMgPSBhd2FpdCB0ZXJyYWZvcm0ub3V0cHV0KCk7XG4gICAgICAgIGNvbnN0IG91dHB1dHNCeUNvbnN0cnVjdElkID0gZ2V0Q29uc3RydWN0SWRzRm9yT3V0cHV0cyhcbiAgICAgICAgICBKU09OLnBhcnNlKHRoaXMuc3RhY2suY29udGVudCksXG4gICAgICAgICAgb3V0cHV0cyxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgICAgICB0eXBlOiBcImRlcGxveWVkXCIsXG4gICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgb3V0cHV0cyxcbiAgICAgICAgICBvdXRwdXRzQnlDb25zdHJ1Y3RJZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVzdHJveShvcHRzOiB7XG4gICAgdGVycmFmb3JtUGFyYWxsZWxpc20/OiBudW1iZXI7XG4gICAgdmFycz86IHN0cmluZ1tdO1xuICAgIHZhckZpbGVzPzogc3RyaW5nW107XG4gICAgbm9Db2xvcj86IGJvb2xlYW47XG4gIH0pIHtcbiAgICBjb25zdCB7IHRlcnJhZm9ybVBhcmFsbGVsaXNtLCBub0NvbG9yLCB2YXJzLCB2YXJGaWxlcyB9ID0gb3B0cztcbiAgICBhd2FpdCB0aGlzLnJ1bihhc3luYyAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKHsgdHlwZTogXCJwbGFubmluZ1wiLCBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSB9KTtcbiAgICAgIGNvbnN0IHRlcnJhZm9ybSA9IGF3YWl0IHRoaXMudGVycmFmb3JtQ2xpZW50KCk7XG4gICAgICBjb25zdCB7IGNhbmNlbGxlZCB9ID0gYXdhaXQgdGVycmFmb3JtLmRlc3Ryb3koXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvQXBwcm92ZTogdGhpcy5vcHRpb25zLmF1dG9BcHByb3ZlLFxuICAgICAgICAgIHBhcmFsbGVsaXNtOiB0ZXJyYWZvcm1QYXJhbGxlbGlzbSxcbiAgICAgICAgICB2YXJzLFxuICAgICAgICAgIHZhckZpbGVzLFxuICAgICAgICAgIG5vQ29sb3IsXG4gICAgICAgIH0sXG4gICAgICAgIChzdGF0ZSkgPT4ge1xuICAgICAgICAgIC8vIHN0YXRlIHVwZGF0ZXMgd2hpbGUgYXBwbHkgcnVucyB0aGF0IGFmZmVjdCB0aGUgVUlcbiAgICAgICAgICBpZiAoc3RhdGUudHlwZSA9PT0gXCJydW5uaW5nXCIgJiYgIXN0YXRlLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6IFwiZGVzdHJveWluZ1wiLFxuICAgICAgICAgICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUudHlwZSA9PT0gXCJ3YWl0aW5nIGZvciBhcHByb3ZhbFwiKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ3YWl0aW5nIGZvciBzdGFjayBhcHByb3ZhbFwiLFxuICAgICAgICAgICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSxcbiAgICAgICAgICAgICAgYXBwcm92ZTogc3RhdGUuYXBwcm92ZSxcbiAgICAgICAgICAgICAgcmVqZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUucmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImRpc21pc3NlZFwiLFxuICAgICAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnR5cGUgPT09IFwid2FpdGluZyBmb3Igc2VudGluZWwgb3ZlcnJpZGVcIikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6IFwid2FpdGluZyBmb3Igc3RhY2sgc2VudGluZWwgb3ZlcnJpZGVcIixcbiAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgIG92ZXJyaWRlOiBzdGF0ZS5vdmVycmlkZSxcbiAgICAgICAgICAgICAgcmVqZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUucmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImRpc21pc3NlZFwiLFxuICAgICAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnR5cGUgPT09IFwiZXh0ZXJuYWwgYXBwcm92YWwgcmVwbHlcIikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6IFwiZXh0ZXJuYWwgc3RhY2sgYXBwcm92YWwgcmVwbHlcIixcbiAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgIGFwcHJvdmVkOiBzdGF0ZS5hcHByb3ZlZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUudHlwZSA9PT0gXCJleHRlcm5hbCBzZW50aW5lbCBvdmVycmlkZSByZXBseVwiKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgICAgICAgICAgdHlwZTogXCJleHRlcm5hbCBzdGFjayBzZW50aW5lbCBvdmVycmlkZSByZXBseVwiLFxuICAgICAgICAgICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSxcbiAgICAgICAgICAgICAgb3ZlcnJpZGRlbjogc3RhdGUub3ZlcnJpZGRlbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmICghY2FuY2VsbGVkKVxuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgICAgICB0eXBlOiBcImRlc3Ryb3llZFwiLFxuICAgICAgICAgIHN0YWNrTmFtZTogdGhpcy5zdGFjay5uYW1lLFxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmZXRjaE91dHB1dHMoKSB7XG4gICAgYXdhaXQgdGhpcy5ydW4oYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVycmFmb3JtID0gYXdhaXQgdGhpcy50ZXJyYWZvcm1DbGllbnQoKTtcblxuICAgICAgY29uc3Qgb3V0cHV0cyA9IGF3YWl0IHRlcnJhZm9ybS5vdXRwdXQoKTtcbiAgICAgIGNvbnN0IG91dHB1dHNCeUNvbnN0cnVjdElkID0gZ2V0Q29uc3RydWN0SWRzRm9yT3V0cHV0cyhcbiAgICAgICAgSlNPTi5wYXJzZSh0aGlzLnN0YWNrLmNvbnRlbnQpLFxuICAgICAgICBvdXRwdXRzLFxuICAgICAgKTtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgICB0eXBlOiBcIm91dHB1dHMgZmV0Y2hlZFwiLFxuICAgICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSxcbiAgICAgICAgb3V0cHV0cyxcbiAgICAgICAgb3V0cHV0c0J5Q29uc3RydWN0SWQsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLm91dHB1dHM7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc3RvcCgpIHtcbiAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICB9XG59XG4iXX0=
|
|
403
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrdGYtc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2Nka3RmLXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHFDQUE2RTtBQUM3RSw0Q0FLd0I7QUFDeEIscUVBQThFO0FBQzlFLDREQUFrRTtBQUNsRSwwREFLZ0M7QUFDaEMsMEVBQXVFO0FBQ3ZFLHFEQUF1RTtBQUN2RSx1RUFBa0U7QUFDbEUsdUNBQXFEO0FBNEZyRCxLQUFLLFVBQVUsa0JBQWtCLENBQy9CLFdBQXdCLEVBQ3hCLEtBQXVCLEVBQ3ZCLHlCQUdpRDtJQUVqRCxPQUFPLElBQUksNEJBQVksQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLHlCQUF5QixDQUFDLENBQUM7QUFDekUsQ0FBQztBQTJCRCxNQUFhLFVBQVU7SUFVckIsWUFBbUIsT0FBMEI7UUFBMUIsWUFBTyxHQUFQLE9BQU8sQ0FBbUI7UUFOdEMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVQLGlCQUFZLEdBQXFCLE1BQU0sQ0FBQztRQUt0RCxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxvQ0FBbUIsQ0FBQyxLQUFLLENBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdkQsQ0FBQztJQUNELElBQVcsTUFBTTtRQUNmLE9BQU8sQ0FDTCxJQUFJLENBQUMsWUFBWSxLQUFLLE1BQU07WUFDNUIsSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTO1lBQy9CLElBQUksQ0FBQyxPQUFPLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxD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RSxDQUFDO1lBRS9DLE1BQU0sT0FBTyxHQUFHLE1BQU0sU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3pDLE1BQU0sb0JBQW9CLEdBQUcsSUFBQSxrQ0FBeUIsRUFDcEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUM5QixPQUFPLENBQ1IsQ0FBQztZQUNGLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQ2YsSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTtnQkFDMUIsT0FBTztnQkFDUCxvQkFBb0I7YUFDckIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztDQUNGO0FBbmZELGdDQW1mQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBTeW50aGVzaXplZFN0YWNrIH0gZnJvbSBcIi4vc3ludGgtc3RhY2tcIjtcbmltcG9ydCB7IFRlcnJhZm9ybSB9IGZyb20gXCIuL21vZGVscy90ZXJyYWZvcm1cIjtcbmltcG9ydCB7IGdldENvbnN0cnVjdElkc0Zvck91dHB1dHMsIE5lc3RlZFRlcnJhZm9ybU91dHB1dHMgfSBmcm9tIFwiLi9vdXRwdXRcIjtcbmltcG9ydCB7XG4gIEVycm9ycyxcbiAgbG9nZ2VyLFxuICByZWFkQ29uZmlnU3luYyxcbiAgdGVycmFmb3JtQmluYXJ5TmFtZSxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBjaGVja0luc3RhbGxlZEJpbmFyeUFnYWluc3RUYXJnZXRzIH0gZnJvbSBcIi4vaW5zdGFsbGVkLWJpbmFyeS1jaGVja1wiO1xuaW1wb3J0IHsgZXh0cmFjdEpzb25Mb2dJZlByZXNlbnQgfSBmcm9tIFwiLi9zZXJ2ZXIvdGVycmFmb3JtLWxvZ3NcIjtcbmltcG9ydCB7XG4gIFRlcnJhZm9ybUNsaSxcbiAgT3V0cHV0RmlsdGVyLFxuICB0cnlSZWFkR2VuZXJhdGVkQ29uZmlndXJhdGlvbkZpbGUsXG4gIHRyeVJlbW92ZUdlbmVyYXRlZENvbmZpZ3VyYXRpb25GaWxlLFxufSBmcm9tIFwiLi9tb2RlbHMvdGVycmFmb3JtLWNsaVwiO1xuaW1wb3J0IHsgUHJvdmlkZXJDb25zdHJhaW50IH0gZnJvbSBcIi4vZGVwZW5kZW5jaWVzL2RlcGVuZGVuY3ktbWFuYWdlclwiO1xuaW1wb3J0IHsgdGVycmFmb3JtSnNvblNjaGVtYSwgVGVycmFmb3JtU3RhY2sgfSBmcm9tIFwiLi90ZXJyYWZvcm0tanNvblwiO1xuaW1wb3J0IHsgVGVycmFmb3JtUHJvdmlkZXJMb2NrIH0gZnJvbSBcIi4vdGVycmFmb3JtLXByb3ZpZGVyLWxvY2tcIjtcbmltcG9ydCB7IGNvbnZlcnRDb25maWd1cmF0aW9uRmlsZSB9IGZyb20gXCIuL2NvbnZlcnRcIjtcblxuZXhwb3J0IHR5cGUgU3RhY2tVcGRhdGUgPVxuICB8IHtcbiAgICAgIHR5cGU6IFwicGxhbm5pbmdcIjtcbiAgICAgIHN0YWNrTmFtZTogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcInBsYW5uZWRcIjtcbiAgICAgIHN0YWNrTmFtZTogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcImRlcGxveWluZ1wiO1xuICAgICAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwiZGVwbG95IHVwZGF0ZVwiO1xuICAgICAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gICAgICBkZXBsb3lPdXRwdXQ6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJkZXBsb3llZFwiO1xuICAgICAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gICAgICBvdXRwdXRzQnlDb25zdHJ1Y3RJZDogTmVzdGVkVGVycmFmb3JtT3V0cHV0cztcbiAgICAgIG91dHB1dHM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwiZGVzdHJveWluZ1wiO1xuICAgICAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwiZGVzdHJveSB1cGRhdGVcIjtcbiAgICAgIHN0YWNrTmFtZTogc3RyaW5nO1xuICAgICAgZGVzdHJveU91dHB1dDogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcImRlc3Ryb3llZFwiO1xuICAgICAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwib3V0cHV0cyBmZXRjaGVkXCI7XG4gICAgICBzdGFja05hbWU6IHN0cmluZztcbiAgICAgIG91dHB1dHNCeUNvbnN0cnVjdElkOiBOZXN0ZWRUZXJyYWZvcm1PdXRwdXRzO1xuICAgICAgb3V0cHV0czogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJlcnJvcmVkXCI7XG4gICAgICBzdGFja05hbWU6IHN0cmluZztcbiAgICAgIGVycm9yOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwiZGlzbWlzc2VkXCI7XG4gICAgICBzdGFja05hbWU6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJpbXBvcnQgd2l0aCBjb25maWd1cmF0aW9uIGRldGVjdGVkXCI7XG4gICAgICBzdGFja05hbWU6IHN0cmluZztcbiAgICAgIGNvbmZpZ3VyYXRpb246IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJpbXBvcnQgd2l0aCBjb25maWd1cmF0aW9uIGNvbnZlcnRlZFwiO1xuICAgICAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gICAgICBjb25maWd1cmF0aW9uOiBzdHJpbmc7XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgU3RhY2tVc2VySW5wdXRVcGRhdGUgPVxuICB8IFN0YWNrQXBwcm92YWxVcGRhdGVcbiAgfCBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGU7XG5cbmV4cG9ydCB0eXBlIFN0YWNrQXBwcm92YWxVcGRhdGUgPSB7XG4gIHR5cGU6IFwid2FpdGluZyBmb3Igc3RhY2sgYXBwcm92YWxcIjtcbiAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIGFwcHJvdmU6ICgpID0+IHZvaWQ7XG4gIHJlamVjdDogKCkgPT4gdm9pZDtcbn07XG5leHBvcnQgdHlwZSBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGUgPSB7XG4gIHR5cGU6IFwid2FpdGluZyBmb3Igc3RhY2sgc2VudGluZWwgb3ZlcnJpZGVcIjtcbiAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIG92ZXJyaWRlOiAoKSA9PiB2b2lkO1xuICByZWplY3Q6ICgpID0+IHZvaWQ7XG59O1xuZXhwb3J0IHR5cGUgRXh0ZXJuYWxTdGFja0FwcHJvdmFsVXBkYXRlID0ge1xuICB0eXBlOiBcImV4dGVybmFsIHN0YWNrIGFwcHJvdmFsIHJlcGx5XCI7XG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICBhcHByb3ZlZDogYm9vbGVhbjsgLy8gZmFsc2UgPSByZWplY3RlZFxufTtcbmV4cG9ydCB0eXBlIEV4dGVybmFsU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlID0ge1xuICB0eXBlOiBcImV4dGVybmFsIHN0YWNrIHNlbnRpbmVsIG92ZXJyaWRlIHJlcGx5XCI7XG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICBvdmVycmlkZGVuOiBib29sZWFuOyAvLyBmYWxzZSA9IHJlamVjdGVkXG59O1xuXG5hc3luYyBmdW5jdGlvbiBnZXRUZXJyYWZvcm1DbGllbnQoXG4gIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCxcbiAgc3RhY2s6IFN5bnRoZXNpemVkU3RhY2ssXG4gIGNyZWF0ZVRlcnJhZm9ybUxvZ0hhbmRsZXI6IChcbiAgICBwaGFzZTogc3RyaW5nLFxuICAgIGZpbHRlcj86IE91dHB1dEZpbHRlcltdLFxuICApID0+IChtZXNzYWdlOiBzdHJpbmcsIGlzRXJyb3I/OiBib29sZWFuKSA9PiB2b2lkLFxuKTogUHJvbWlzZTxUZXJyYWZvcm0+IHtcbiAgcmV0dXJuIG5ldyBUZXJyYWZvcm1DbGkoYWJvcnRTaWduYWwsIHN0YWNrLCBjcmVhdGVUZXJyYWZvcm1Mb2dIYW5kbGVyKTtcbn1cblxudHlwZSBDZGt0ZlN0YWNrT3B0aW9ucyA9IHtcbiAgc3RhY2s6IFN5bnRoZXNpemVkU3RhY2s7XG4gIG9uVXBkYXRlOiAoXG4gICAgdXBkYXRlOlxuICAgICAgfCBTdGFja1VwZGF0ZVxuICAgICAgfCBTdGFja0FwcHJvdmFsVXBkYXRlXG4gICAgICB8IEV4dGVybmFsU3RhY2tBcHByb3ZhbFVwZGF0ZVxuICAgICAgfCBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGVcbiAgICAgIHwgRXh0ZXJuYWxTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGUsXG4gICkgPT4gdm9pZDtcbiAgb25Mb2c/OiAobG9nOiB7IG1lc3NhZ2U6IHN0cmluZzsgaXNFcnJvcjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBhdXRvQXBwcm92ZT86IGJvb2xlYW47XG4gIG1pZ3JhdGVTdGF0ZT86IGJvb2xlYW47XG4gIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbDtcbn07XG5cbnR5cGUgQ2RrdGZTdGFja1N0YXRlcyA9XG4gIHwgU3RhY2tVcGRhdGVbXCJ0eXBlXCJdXG4gIHwgU3RhY2tBcHByb3ZhbFVwZGF0ZVtcInR5cGVcIl1cbiAgfCBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGVbXCJ0eXBlXCJdXG4gIHwgRXh0ZXJuYWxTdGFja0FwcHJvdmFsVXBkYXRlW1widHlwZVwiXVxuICB8IEV4dGVybmFsU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlW1widHlwZVwiXVxuICB8IFwiaWRsZVwiXG4gIHwgXCJkb25lXCI7XG5cbmV4cG9ydCBjbGFzcyBDZGt0ZlN0YWNrIHtcbiAgcHVibGljIHN0YWNrOiBTeW50aGVzaXplZFN0YWNrO1xuICBwdWJsaWMgb3V0cHV0cz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHB1YmxpYyBvdXRwdXRzQnlDb25zdHJ1Y3RJZD86IE5lc3RlZFRlcnJhZm9ybU91dHB1dHM7XG4gIHB1YmxpYyBzdG9wcGVkID0gZmFsc2U7XG4gIHB1YmxpYyBjdXJyZW50V29ya1Byb21pc2U6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyByZWFkb25seSBjdXJyZW50U3RhdGU6IENka3RmU3RhY2tTdGF0ZXMgPSBcImlkbGVcIjtcbiAgcHVibGljIGVycm9yPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcnNlZENvbnRlbnQ6IFRlcnJhZm9ybVN0YWNrO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBvcHRpb25zOiBDZGt0ZlN0YWNrT3B0aW9ucykge1xuICAgIHRoaXMuc3RhY2sgPSBvcHRpb25zLnN0YWNrO1xuICAgIHRoaXMucGFyc2VkQ29udGVudCA9IHRlcnJhZm9ybUpzb25TY2hlbWEucGFyc2UoXG4gICAgICBKU09OLnBhcnNlKHRoaXMuc3RhY2suY29udGVudCksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNQZW5kaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGF0ZSA9PT0gXCJpZGxlXCIgJiYgIXRoaXMuc3RvcHBlZDtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzRG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXJyZW50U3RhdGUgPT09IFwiZG9uZVwiIHx8XG4gICAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9PT0gXCJlcnJvcmVkXCIgfHxcbiAgICAgIHRoaXMuc3RvcHBlZFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBpc1J1bm5pbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzUGVuZGluZyAmJiAhdGhpcy5pc0RvbmU7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRlKFxuICAgIHVwZGF0ZTpcbiAgICAgIHwgU3RhY2tVcGRhdGVcbiAgICAgIHwgU3RhY2tBcHByb3ZhbFVwZGF0ZVxuICAgICAgfCBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGVcbiAgICAgIHwgRXh0ZXJuYWxTdGFja0FwcHJvdmFsVXBkYXRlXG4gICAgICB8IEV4dGVybmFsU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlXG4gICAgICB8IHsgdHlwZTogXCJpZGxlXCIgfVxuICAgICAgfCB7IHR5cGU6IFwiZG9uZVwiIH0sXG4gICkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgWyR7dGhpcy5zdGFjay5uYW1lfV06ICR7dXBkYXRlLnR5cGV9YCk7XG4gICAgKHRoaXMuY3VycmVudFN0YXRlIGFzIENka3RmU3RhY2tTdGF0ZXMpID0gdXBkYXRlLnR5cGU7XG4gICAgc3dpdGNoICh1cGRhdGUudHlwZSkge1xuICAgICAgY2FzZSBcImlkbGVcIjpcbiAgICAgIGNhc2UgXCJkb25lXCI6XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiZXJyb3JlZFwiOlxuICAgICAgICB0aGlzLmVycm9yID0gdXBkYXRlLmVycm9yO1xuICAgICAgICB0aGlzLm9wdGlvbnMub25VcGRhdGUodXBkYXRlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJvdXRwdXRzIGZldGNoZWRcIjpcbiAgICAgIGNhc2UgXCJkZXBsb3llZFwiOlxuICAgICAgICBsb2dnZXIuZGVidWcoYE91dHB1dHM6ICR7SlNPTi5zdHJpbmdpZnkodXBkYXRlLm91dHB1dHMpfWApO1xuICAgICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgICAgYE91dHB1dHNCeUNvbnN0cnVjdElkOiAke0pTT04uc3RyaW5naWZ5KHVwZGF0ZS5vdXRwdXRzQnlDb25zdHJ1Y3RJZCl9YCxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5vdXRwdXRzID0gdXBkYXRlLm91dHB1dHM7XG4gICAgICAgIHRoaXMub3V0cHV0c0J5Q29uc3RydWN0SWQgPSB1cGRhdGUub3V0cHV0c0J5Q29uc3RydWN0SWQ7XG4gICAgICAgIHRoaXMub3B0aW9ucy5vblVwZGF0ZSh1cGRhdGUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5vcHRpb25zLm9uVXBkYXRlKHVwZGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGVycmFmb3JtTG9nSGFuZGxlcihcbiAgICBwaGFzZTogc3RyaW5nLFxuICAgIGZpbHRlcnM/OiBPdXRwdXRGaWx0ZXJbXSxcbiAgKTogKG1lc3NhZ2U6IHN0cmluZywgaXNFcnJvcj86IGJvb2xlYW4pID0+IHZvaWQge1xuICAgIGxvZ2dlci5kZWJ1ZyhcIkNyZWF0aW5nIHRlcnJhZm9ybSBsb2cgaGFuZGxlclwiLCBwaGFzZSk7XG5cbiAgICBjb25zdCBvbkxvZyA9IHRoaXMub3B0aW9ucy5vbkxvZztcbiAgICByZXR1cm4gKG1zZzogc3RyaW5nLCBpc0Vycm9yID0gZmFsc2UpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBleHRyYWN0SnNvbkxvZ0lmUHJlc2VudChtc2cpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBbJHt0aGlzLm9wdGlvbnMuc3RhY2submFtZX1dKCR7cGhhc2V9KTogJHttc2d9YCk7XG5cbiAgICAgIGNvbnN0IGZpbHRlclRvQXBwbHkgPSBmaWx0ZXJzPy5maW5kKChmaWx0ZXIpID0+XG4gICAgICAgIGZpbHRlci5jb25kaXRpb24obWVzc2FnZSksXG4gICAgICApO1xuICAgICAgY29uc3QgZmlsdGVyZWRNZXNzYWdlID0gZmlsdGVyVG9BcHBseVxuICAgICAgICA/IGZpbHRlclRvQXBwbHkudHJhbnNmb3JtKG1lc3NhZ2UpXG4gICAgICAgIDogbWVzc2FnZTtcblxuICAgICAgaWYgKGZpbHRlcmVkTWVzc2FnZSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgICAgYEZpbHRlciAke2ZpbHRlclRvQXBwbHl9IGFwcGxpZWQgb24gbGluZSAnJHttZXNzYWdlfScgd2l0aCByZXN1bHQgJyR7ZmlsdGVyZWRNZXNzYWdlfSdgLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAob25Mb2cpIHtcbiAgICAgICAgb25Mb2coeyBtZXNzYWdlOiBmaWx0ZXJlZE1lc3NhZ2UsIGlzRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdGVycmFmb3JtQ2xpZW50KCkge1xuICAgIHJldHVybiBhd2FpdCBnZXRUZXJyYWZvcm1DbGllbnQoXG4gICAgICB0aGlzLm9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICB0aGlzLm9wdGlvbnMuc3RhY2ssXG4gICAgICB0aGlzLmNyZWF0ZVRlcnJhZm9ybUxvZ0hhbmRsZXIuYmluZCh0aGlzKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhlIHByb2plY3Qgb3B0cyBpbiB2aWEgYHZhbGlkYXRlSW5zdGFsbGVkQmluYXJ5OiB0cnVlYCBpblxuICAgKiBjZGt0Zi5qc29uLCB2ZXJpZmllcyB0aGUgaW5zdGFsbGVkIFRlcnJhZm9ybS1jb21wYXRpYmxlIGJpbmFyeSBhZ2FpbnN0XG4gICAqIHRoZSBwcm9qZWN0J3MgZGVjbGFyZWQgYHRhcmdldFZlcnNpb25zYCBiZWZvcmUgZXhlY3V0aW5nIGl0LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZUluc3RhbGxlZEJpbmFyeUlmQ29uZmlndXJlZCh0ZXJyYWZvcm06IFRlcnJhZm9ybSkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlYWRDb25maWdTeW5jKCk7XG4gICAgaWYgKCFjb25maWcudmFsaWRhdGVJbnN0YWxsZWRCaW5hcnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9ibGVtcyA9IGNoZWNrSW5zdGFsbGVkQmluYXJ5QWdhaW5zdFRhcmdldHMoXG4gICAgICBhd2FpdCB0ZXJyYWZvcm0udmVyc2lvbigpLFxuICAgICAgY29uZmlnLnRhcmdldFZlcnNpb25zLFxuICAgICAgdGVycmFmb3JtQmluYXJ5TmFtZSxcbiAgICApO1xuICAgIGlmIChwcm9ibGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UocHJvYmxlbXMuam9pbihcIlxcblwiKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGluaXRhbGl6ZVRlcnJhZm9ybShcbiAgICBub0NvbG9yPzogYm9vbGVhbixcbiAgICBza2lwUHJvdmlkZXJMb2NrPzogYm9vbGVhbixcbiAgICBtaWdyYXRlU3RhdGU/OiBib29sZWFuLFxuICApIHtcbiAgICBjb25zdCB0ZXJyYWZvcm0gPSBhd2FpdCB0aGlzLnRlcnJhZm9ybUNsaWVudCgpO1xuICAgIGF3YWl0IHRoaXMudmFsaWRhdGVJbnN0YWxsZWRCaW5hcnlJZkNvbmZpZ3VyZWQodGVycmFmb3JtKTtcbiAgICBjb25zdCBuZWVkc0xvY2tmaWxlVXBkYXRlID0gc2tpcFByb3ZpZGVyTG9ja1xuICAgICAgPyBmYWxzZVxuICAgICAgOiBhd2FpdCB0aGlzLmNoZWNrTmVlZHNMb2NrZmlsZVVwZGF0ZSgpO1xuICAgIGNvbnN0IG5lZWRzVXBncmFkZSA9IGF3YWl0IHRoaXMuY2hlY2tOZWVkc1VwZ3JhZGUoKTtcbiAgICBhd2FpdCB0ZXJyYWZvcm0uaW5pdCh7XG4gICAgICBuZWVkc1VwZ3JhZGUsXG4gICAgICBub0NvbG9yOiBub0NvbG9yID8/IGZhbHNlLFxuICAgICAgbmVlZHNMb2NrZmlsZVVwZGF0ZSxcbiAgICAgIG1pZ3JhdGVTdGF0ZTogbWlncmF0ZVN0YXRlID8/IGZhbHNlLFxuICAgIH0pO1xuICAgIHJldHVybiB0ZXJyYWZvcm07XG4gIH1cblxuICBwcml2YXRlIHJlcXVpcmVkUHJvdmlkZXJzKCkge1xuICAgIC8vIFJlYWQgcmVxdWlyZWQgcHJvdmlkZXJzIGZyb20gdGhlIHN0YWNrIG91dHB1dFxuICAgIGNvbnN0IHJlcXVpcmVkUHJvdmlkZXJzID0gdGhpcy5wYXJzZWRDb250ZW50LnRlcnJhZm9ybT8ucmVxdWlyZWRfcHJvdmlkZXJzO1xuXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVxdWlyZWRQcm92aWRlcnMgfHwge30pLnJlZHVjZShcbiAgICAgIChhY2MsIG9iaikgPT4ge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50ID0gbmV3IFByb3ZpZGVyQ29uc3RyYWludChvYmouc291cmNlLCBvYmoudmVyc2lvbik7XG4gICAgICAgIGFjY1tjb25zdHJhaW50LnNvdXJjZV0gPSBjb25zdHJhaW50O1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIFByb3ZpZGVyQ29uc3RyYWludD4sXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tOZWVkc0xvY2tmaWxlVXBkYXRlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubWlncmF0ZVN0YXRlKSB7XG4gICAgICAvLyBJZiB3ZSdyZSBtaWdyYXRpbmcgc3RhdGUsIHdlIG5lZWQgdG8gaW5pdFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGxvY2sgPSBuZXcgVGVycmFmb3JtUHJvdmlkZXJMb2NrKHRoaXMuc3RhY2sud29ya2luZ0RpcmVjdG9yeSk7XG4gICAgY29uc3QgbG9ja0ZpbGVFeGlzdHMgPSBhd2FpdCBsb2NrLmhhc1Byb3ZpZGVyTG9ja0ZpbGUoKTtcblxuICAgIGlmICghbG9ja0ZpbGVFeGlzdHMpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBsb2NrIGZpbGUsIHRoaXMgaXMgcHJvYmFibHkgdGhlIGZpcnN0IGluaXRcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVpcmVkUHJvdmlkZXJzID0gdGhpcy5yZXF1aXJlZFByb3ZpZGVycygpO1xuXG4gICAgZm9yIChjb25zdCBwcm92aWRlciBvZiBPYmplY3QudmFsdWVzKHJlcXVpcmVkUHJvdmlkZXJzKSkge1xuICAgICAgY29uc3QgaGFzUHJvdmlkZXIgPSBhd2FpdCBsb2NrLmhhc01hdGNoaW5nUHJvdmlkZXIocHJvdmlkZXIpO1xuICAgICAgaWYgKCFoYXNQcm92aWRlcikge1xuICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcHJvdmlkZXIgb3IgdmVyc2lvbiBkb2Vzbid0IG1hdGNoLCB3ZSBuZWVkIHRvIGluaXRcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja05lZWRzVXBncmFkZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrID0gbmV3IFRlcnJhZm9ybVByb3ZpZGVyTG9jayh0aGlzLnN0YWNrLndvcmtpbmdEaXJlY3RvcnkpO1xuICAgIGNvbnN0IGFsbFByb3ZpZGVycyA9IHRoaXMucmVxdWlyZWRQcm92aWRlcnMoKTtcbiAgICBjb25zdCBsb2NrZWRQcm92aWRlcnMgPSBPYmplY3QudmFsdWVzKGF3YWl0IGxvY2sucHJvdmlkZXJzKCkpO1xuXG4gICAgLy8gQ2hlY2sgaWYgYW55IHByb3ZpZGVyIGNvbnRhaW5lZCBpbiBgcHJvdmlkZXJzYCB2aW9sYXRlcyBjb25zdHJhaW50cyBpbiBgbG9ja2VkUHJvdmlkZXJzYFxuICAgIC8vIFVwZ3JhZGUgaWYgc29tZSBwcm92aWRlciBjb25zdHJhaW50IG5vdCBtZXRcbiAgICAvLyBJZiBhIHByb3ZpZGVyIHdhc24ndCBwcmVzZXQgaW4gbG9ja2VkUHJvdmlkZXJzLCB0aGF0J3MgZmluZTsgaXQgd2lsbCBqdXN0IGdldCBhZGRlZFxuICAgIHJldHVybiBsb2NrZWRQcm92aWRlcnMuc29tZSgobG9ja2VkUHJvdmlkZXIpID0+IHtcbiAgICAgIGNvbnN0IGxvY2tlZENvbnN0cmFpbnQgPSBsb2NrZWRQcm92aWRlci5jb25zdHJhaW50cztcbiAgICAgIGlmICghbG9ja2VkQ29uc3RyYWludCkge1xuICAgICAgICAvLyBQcm92aWRlciBsb2NrIGRvZXNuJ3QgaGF2ZSBhIGNvbnN0cmFpbnQgc3BlY2lmaWVkLCBzbyB3ZSBjYW4ndCBjaGVjay5cbiAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuXG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBgUHJvdmlkZXIgbG9jayBkb2Vzbid0IGhhdmUgYSBjb25zdHJhaW50IGZvciAke2xvY2tlZFByb3ZpZGVyLm5hbWV9YCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm92aWRlciA9IGFsbFByb3ZpZGVyc1tsb2NrZWRDb25zdHJhaW50LnNvdXJjZV07XG4gICAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICAgIC8vIGVsc2Ugbm8gbG9uZ2VyIHVzaW5nIHRoaXMgcHJvdmlkZXIsIHNvIHdvbid0IGNhdXNlIHByb2JsZW1zXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFsb2NrZWRDb25zdHJhaW50Lm1hdGNoZXNWZXJzaW9uKHByb3ZpZGVyLnZlcnNpb24gPz8gXCI+MFwiKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcnVuKGNiOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgaWYgKHRoaXMuc3RvcHBlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmN1cnJlbnRXb3JrUHJvbWlzZSA9IGNiKCk7XG4gICAgICBhd2FpdCB0aGlzLmN1cnJlbnRXb3JrUHJvbWlzZTtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGUoeyB0eXBlOiBcImRvbmVcIiB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIudHJhY2UoXCJFcnJvciBpbiBjdXJyZW50V29ya1Byb21pc2VcIiwgZSk7XG4gICAgICB0aGlzLmN1cnJlbnRXb3JrUHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgICB0eXBlOiBcImVycm9yZWRcIixcbiAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgIGVycm9yOiBTdHJpbmcoZSksXG4gICAgICB9KTtcbiAgICAgIHRocm93IGU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuY3VycmVudFdvcmtQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkaWZmKHtcbiAgICByZWZyZXNoT25seSxcbiAgICB0ZXJyYWZvcm1QYXJhbGxlbGlzbSxcbiAgICB2YXJzLFxuICAgIHZhckZpbGVzLFxuICAgIG5vQ29sb3IsXG4gIH06IHtcbiAgICByZWZyZXNoT25seT86IGJvb2xlYW47XG4gICAgdGVycmFmb3JtUGFyYWxsZWxpc20/OiBudW1iZXI7XG4gICAgdmFycz86IHN0cmluZ1tdO1xuICAgIHZhckZpbGVzPzogc3RyaW5nW107XG4gICAgbm9Db2xvcj86IGJvb2xlYW47XG4gIH0pIHtcbiAgICBhd2FpdCB0aGlzLnJ1bihhc3luYyAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKHsgdHlwZTogXCJwbGFubmluZ1wiLCBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSB9KTtcbiAgICAgIGNvbnN0IHRlcnJhZm9ybSA9IGF3YWl0IHRoaXMudGVycmFmb3JtQ2xpZW50KCk7XG5cbiAgICAgIGF3YWl0IHRlcnJhZm9ybS5wbGFuKHtcbiAgICAgICAgZGVzdHJveTogZmFsc2UsXG4gICAgICAgIHJlZnJlc2hPbmx5LFxuICAgICAgICBwYXJhbGxlbGlzbTogdGVycmFmb3JtUGFyYWxsZWxpc20sXG4gICAgICAgIHZhcnMsXG4gICAgICAgIHZhckZpbGVzLFxuICAgICAgICBub0NvbG9yLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKHsgdHlwZTogXCJwbGFubmVkXCIsIHN0YWNrTmFtZTogdGhpcy5zdGFjay5uYW1lIH0pO1xuXG4gICAgICAvLyBGaW5kIGdlbmVyYXRlZCBmaWxlXG4gICAgICBjb25zdCBjb25maWdGaWxlID0gYXdhaXQgdHJ5UmVhZEdlbmVyYXRlZENvbmZpZ3VyYXRpb25GaWxlKFxuICAgICAgICB0aGlzLnN0YWNrLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICApO1xuICAgICAgaWYgKGNvbmZpZ0ZpbGUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgdHlwZTogXCJpbXBvcnQgd2l0aCBjb25maWd1cmF0aW9uIGRldGVjdGVkXCIsXG4gICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgY29uZmlndXJhdGlvbjogY29uZmlnRmlsZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgY29udmVydGVkQ29kZSA9IGF3YWl0IGNvbnZlcnRDb25maWd1cmF0aW9uRmlsZShcbiAgICAgICAgICBjb25maWdGaWxlLFxuICAgICAgICAgIHRoaXMuc3RhY2sud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgdHlwZTogXCJpbXBvcnQgd2l0aCBjb25maWd1cmF0aW9uIGNvbnZlcnRlZFwiLFxuICAgICAgICAgIHN0YWNrTmFtZTogdGhpcy5zdGFjay5uYW1lLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb246IGNvbnZlcnRlZENvZGUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBvbkxvZyA9IHRoaXMub3B0aW9ucy5vbkxvZztcbiAgICAgICAgaWYgKG9uTG9nKSB7XG4gICAgICAgICAgb25Mb2coe1xuICAgICAgICAgICAgbWVzc2FnZTogYEltcG9ydCB3aXRob3V0IGNvbmZpZ3VyYXRpb24gZGV0ZWN0ZWQuIFRlcnJhZm9ybSBoYXMgY3JlYXRlZCBjb25maWd1cmF0aW9uIGZvciBpdDpcbiR7Y29uZmlnRmlsZX1cblxuQ0RLVE4gaGFzIHRyYW5zbGF0ZWQgdGhlIGNvZGUgdG8gdGhlIGZvbGxvd2luZzpcblxuJHtjb252ZXJ0ZWRDb2RlfVxuXG5QbGVhc2UgcmV2aWV3IHRoZSBjb2RlIGFuZCBtYWtlIGFueSBuZWNlc3NhcnkgY2hhbmdlcyBiZWZvcmUgYWRkaW5nIGl0IHRvIHlvdXIgY29kZWJhc2UuXG5NYWtlIHN1cmUgdG8gb25seSBjb3B5IHRoZSBjb2RlIHdpdGhpbiB0aGUgY29uc3RydWN0J3MgY29uc3RydWN0b3IuXG5cbk5PVEU6IFlvdXIgcmVzb3VyY2UgaGFzIG5vdCB5ZXQgYmVjb21lIG1hbmFnZWQgYnkgQ0RLVE4uIFxuVG8gZmluaXNoIHRoZSBpbXBvcnQgcmVtb3ZlIHRoZSBjYWxsIFwiZ2VuZXJhdGVDb25maWdGb3JJbXBvcnRcIiwgYWRkIHRoZSBhYm92ZSBjb2RlIHdpdGhpbiB0aGUgY29uc3RydWN0J3MgY29uc3RydWN0b3IsIGFuZCB0aGVuIGFwcGVuZCB0aGUgY2FsbCBpbXBvcnRGcm9tKDxyZXNvdXJjZV9pZF90b19pbXBvcnRfZnJvbT4pIHRvIHRoZSBnZW5lcmF0ZWQgY29kZTogXG5cbm5ldyBTb21lUmVzb3VyY2UoLi4uKS5pbXBvcnRGcm9tKFwic29tZV9pZFwiKVxuYCxcbiAgICAgICAgICAgIGlzRXJyb3I6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRyeVJlbW92ZUdlbmVyYXRlZENvbmZpZ3VyYXRpb25GaWxlKHRoaXMuc3RhY2sud29ya2luZ0RpcmVjdG9yeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVwbG95KG9wdHM6IHtcbiAgICByZWZyZXNoT25seT86IGJvb2xlYW47XG4gICAgdGVycmFmb3JtUGFyYWxsZWxpc20/OiBudW1iZXI7XG4gICAgbm9Db2xvcj86IGJvb2xlYW47XG4gICAgdmFycz86IHN0cmluZ1tdO1xuICAgIHZhckZpbGVzPzogc3RyaW5nW107XG4gIH0pIHtcbiAgICBjb25zdCB7IHJlZnJlc2hPbmx5LCB0ZXJyYWZvcm1QYXJhbGxlbGlzbSwgbm9Db2xvciwgdmFycywgdmFyRmlsZXMgfSA9IG9wdHM7XG4gICAgYXdhaXQgdGhpcy5ydW4oYXN5bmMgKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7IHR5cGU6IFwicGxhbm5pbmdcIiwgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUgfSk7XG4gICAgICBjb25zdCB0ZXJyYWZvcm0gPSBhd2FpdCB0aGlzLnRlcnJhZm9ybUNsaWVudCgpO1xuXG4gICAgICBjb25zdCB7IGNhbmNlbGxlZCB9ID0gYXdhaXQgdGVycmFmb3JtLmRlcGxveShcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9BcHByb3ZlOiB0aGlzLm9wdGlvbnMuYXV0b0FwcHJvdmUsXG4gICAgICAgICAgcmVmcmVzaE9ubHksXG4gICAgICAgICAgcGFyYWxsZWxpc206IHRlcnJhZm9ybVBhcmFsbGVsaXNtLFxuICAgICAgICAgIHZhcnMsXG4gICAgICAgICAgdmFyRmlsZXMsXG4gICAgICAgICAgbm9Db2xvcixcbiAgICAgICAgfSxcbiAgICAgICAgKHN0YXRlKSA9PiB7XG4gICAgICAgICAgLy8gc3RhdGUgdXBkYXRlcyB3aGlsZSBhcHBseSBydW5zIHRoYXQgYWZmZWN0IHRoZSBVSVxuICAgICAgICAgIGlmIChzdGF0ZS50eXBlID09PSBcInJ1bm5pbmdcIiAmJiAhc3RhdGUuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgICAgICAgICAgdHlwZTogXCJkZXBsb3lpbmdcIixcbiAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnR5cGUgPT09IFwid2FpdGluZyBmb3IgYXBwcm92YWxcIikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6IFwid2FpdGluZyBmb3Igc3RhY2sgYXBwcm92YWxcIixcbiAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgIGFwcHJvdmU6IHN0YXRlLmFwcHJvdmUsXG4gICAgICAgICAgICAgIHJlamVjdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0YXRlLnJlamVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJkaXNtaXNzZWRcIixcbiAgICAgICAgICAgICAgICAgIHN0YWNrTmFtZTogdGhpcy5zdGFjay5uYW1lLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS50eXBlID09PSBcIndhaXRpbmcgZm9yIHNlbnRpbmVsIG92ZXJyaWRlXCIpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgICAgICAgICB0eXBlOiBcIndhaXRpbmcgZm9yIHN0YWNrIHNlbnRpbmVsIG92ZXJyaWRlXCIsXG4gICAgICAgICAgICAgIHN0YWNrTmFtZTogdGhpcy5zdGFjay5uYW1lLFxuICAgICAgICAgICAgICBvdmVycmlkZTogc3RhdGUub3ZlcnJpZGUsXG4gICAgICAgICAgICAgIHJlamVjdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0YXRlLnJlamVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJkaXNtaXNzZWRcIixcbiAgICAgICAgICAgICAgICAgIHN0YWNrTmFtZTogdGhpcy5zdGFjay5uYW1lLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS50eXBlID09PSBcImV4dGVybmFsIGFwcHJvdmFsIHJlcGx5XCIpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgICAgICAgICB0eXBlOiBcImV4dGVybmFsIHN0YWNrIGFwcHJvdmFsIHJlcGx5XCIsXG4gICAgICAgICAgICAgIHN0YWNrTmFtZTogdGhpcy5zdGFjay5uYW1lLFxuICAgICAgICAgICAgICBhcHByb3ZlZDogc3RhdGUuYXBwcm92ZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnR5cGUgPT09IFwiZXh0ZXJuYWwgc2VudGluZWwgb3ZlcnJpZGUgcmVwbHlcIikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6IFwiZXh0ZXJuYWwgc3RhY2sgc2VudGluZWwgb3ZlcnJpZGUgcmVwbHlcIixcbiAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgIG92ZXJyaWRkZW46IHN0YXRlLm92ZXJyaWRkZW4sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBpZiAoIWNhbmNlbGxlZCkge1xuICAgICAgICBjb25zdCBvdXRwdXRzID0gYXdhaXQgdGVycmFmb3JtLm91dHB1dCgpO1xuICAgICAgICBjb25zdCBvdXRwdXRzQnlDb25zdHJ1Y3RJZCA9IGdldENvbnN0cnVjdElkc0Zvck91dHB1dHMoXG4gICAgICAgICAgSlNPTi5wYXJzZSh0aGlzLnN0YWNrLmNvbnRlbnQpLFxuICAgICAgICAgIG91dHB1dHMsXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgdHlwZTogXCJkZXBsb3llZFwiLFxuICAgICAgICAgIHN0YWNrTmFtZTogdGhpcy5zdGFjay5uYW1lLFxuICAgICAgICAgIG91dHB1dHMsXG4gICAgICAgICAgb3V0cHV0c0J5Q29uc3RydWN0SWQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlc3Ryb3kob3B0czoge1xuICAgIHRlcnJhZm9ybVBhcmFsbGVsaXNtPzogbnVtYmVyO1xuICAgIHZhcnM/OiBzdHJpbmdbXTtcbiAgICB2YXJGaWxlcz86IHN0cmluZ1tdO1xuICAgIG5vQ29sb3I/OiBib29sZWFuO1xuICB9KSB7XG4gICAgY29uc3QgeyB0ZXJyYWZvcm1QYXJhbGxlbGlzbSwgbm9Db2xvciwgdmFycywgdmFyRmlsZXMgfSA9IG9wdHM7XG4gICAgYXdhaXQgdGhpcy5ydW4oYXN5bmMgKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7IHR5cGU6IFwicGxhbm5pbmdcIiwgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUgfSk7XG4gICAgICBjb25zdCB0ZXJyYWZvcm0gPSBhd2FpdCB0aGlzLnRlcnJhZm9ybUNsaWVudCgpO1xuICAgICAgY29uc3QgeyBjYW5jZWxsZWQgfSA9IGF3YWl0IHRlcnJhZm9ybS5kZXN0cm95KFxuICAgICAgICB7XG4gICAgICAgICAgYXV0b0FwcHJvdmU6IHRoaXMub3B0aW9ucy5hdXRvQXBwcm92ZSxcbiAgICAgICAgICBwYXJhbGxlbGlzbTogdGVycmFmb3JtUGFyYWxsZWxpc20sXG4gICAgICAgICAgdmFycyxcbiAgICAgICAgICB2YXJGaWxlcyxcbiAgICAgICAgICBub0NvbG9yLFxuICAgICAgICB9LFxuICAgICAgICAoc3RhdGUpID0+IHtcbiAgICAgICAgICAvLyBzdGF0ZSB1cGRhdGVzIHdoaWxlIGFwcGx5IHJ1bnMgdGhhdCBhZmZlY3QgdGhlIFVJXG4gICAgICAgICAgaWYgKHN0YXRlLnR5cGUgPT09IFwicnVubmluZ1wiICYmICFzdGF0ZS5jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgICAgICAgICB0eXBlOiBcImRlc3Ryb3lpbmdcIixcbiAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnR5cGUgPT09IFwid2FpdGluZyBmb3IgYXBwcm92YWxcIikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6IFwid2FpdGluZyBmb3Igc3RhY2sgYXBwcm92YWxcIixcbiAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgIGFwcHJvdmU6IHN0YXRlLmFwcHJvdmUsXG4gICAgICAgICAgICAgIHJlamVjdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0YXRlLnJlamVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJkaXNtaXNzZWRcIixcbiAgICAgICAgICAgICAgICAgIHN0YWNrTmFtZTogdGhpcy5zdGFjay5uYW1lLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS50eXBlID09PSBcIndhaXRpbmcgZm9yIHNlbnRpbmVsIG92ZXJyaWRlXCIpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgICAgICAgICB0eXBlOiBcIndhaXRpbmcgZm9yIHN0YWNrIHNlbnRpbmVsIG92ZXJyaWRlXCIsXG4gICAgICAgICAgICAgIHN0YWNrTmFtZTogdGhpcy5zdGFjay5uYW1lLFxuICAgICAgICAgICAgICBvdmVycmlkZTogc3RhdGUub3ZlcnJpZGUsXG4gICAgICAgICAgICAgIHJlamVjdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0YXRlLnJlamVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJkaXNtaXNzZWRcIixcbiAgICAgICAgICAgICAgICAgIHN0YWNrTmFtZTogdGhpcy5zdGFjay5uYW1lLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS50eXBlID09PSBcImV4dGVybmFsIGFwcHJvdmFsIHJlcGx5XCIpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgICAgICAgICB0eXBlOiBcImV4dGVybmFsIHN0YWNrIGFwcHJvdmFsIHJlcGx5XCIsXG4gICAgICAgICAgICAgIHN0YWNrTmFtZTogdGhpcy5zdGFjay5uYW1lLFxuICAgICAgICAgICAgICBhcHByb3ZlZDogc3RhdGUuYXBwcm92ZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnR5cGUgPT09IFwiZXh0ZXJuYWwgc2VudGluZWwgb3ZlcnJpZGUgcmVwbHlcIikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6IFwiZXh0ZXJuYWwgc3RhY2sgc2VudGluZWwgb3ZlcnJpZGUgcmVwbHlcIixcbiAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgIG92ZXJyaWRkZW46IHN0YXRlLm92ZXJyaWRkZW4sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBpZiAoIWNhbmNlbGxlZClcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgdHlwZTogXCJkZXN0cm95ZWRcIixcbiAgICAgICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZmV0Y2hPdXRwdXRzKCkge1xuICAgIGF3YWl0IHRoaXMucnVuKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRlcnJhZm9ybSA9IGF3YWl0IHRoaXMudGVycmFmb3JtQ2xpZW50KCk7XG5cbiAgICAgIGNvbnN0IG91dHB1dHMgPSBhd2FpdCB0ZXJyYWZvcm0ub3V0cHV0KCk7XG4gICAgICBjb25zdCBvdXRwdXRzQnlDb25zdHJ1Y3RJZCA9IGdldENvbnN0cnVjdElkc0Zvck91dHB1dHMoXG4gICAgICAgIEpTT04ucGFyc2UodGhpcy5zdGFjay5jb250ZW50KSxcbiAgICAgICAgb3V0cHV0cyxcbiAgICAgICk7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgICAgdHlwZTogXCJvdXRwdXRzIGZldGNoZWRcIixcbiAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgIG91dHB1dHMsXG4gICAgICAgIG91dHB1dHNCeUNvbnN0cnVjdElkLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5vdXRwdXRzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHN0b3AoKSB7XG4gICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgfVxufVxuIl19
|
package/build/lib/convert.js
CHANGED
|
@@ -19,25 +19,15 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
19
19
|
}) : function(o, v) {
|
|
20
20
|
o["default"] = v;
|
|
21
21
|
});
|
|
22
|
-
var __importStar = (this && this.__importStar) ||
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return ownKeys(o);
|
|
30
|
-
};
|
|
31
|
-
return function (mod) {
|
|
32
|
-
if (mod && mod.__esModule) return mod;
|
|
33
|
-
var result = {};
|
|
34
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
-
__setModuleDefault(result, mod);
|
|
36
|
-
return result;
|
|
37
|
-
};
|
|
38
|
-
})();
|
|
22
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
23
|
+
if (mod && mod.__esModule) return mod;
|
|
24
|
+
var result = {};
|
|
25
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
26
|
+
__setModuleDefault(result, mod);
|
|
27
|
+
return result;
|
|
28
|
+
};
|
|
39
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
exports.convertConfigurationFile =
|
|
30
|
+
exports.convertConfigurationFile = void 0;
|
|
41
31
|
const hcl2cdk = __importStar(require("@cdktn/hcl2cdk"));
|
|
42
32
|
const cdktf_config_1 = require("./cdktf-config");
|
|
43
33
|
const provider_generator_1 = require("@cdktn/provider-generator");
|
|
@@ -57,4 +47,5 @@ async function convertConfigurationFile(configuration, stackWorkingDirectory) {
|
|
|
57
47
|
});
|
|
58
48
|
return all;
|
|
59
49
|
}
|
|
60
|
-
|
|
50
|
+
exports.convertConfigurationFile = convertConfigurationFile;
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY29udmVydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHdEQUEwQztBQUMxQyxpREFBNkM7QUFDN0Msa0VBQXdFO0FBQ3hFLDREQUFvRDtBQUNwRCw0Q0FJd0I7QUFFakIsS0FBSyxVQUFVLHdCQUF3QixDQUM1QyxhQUFxQixFQUNyQixxQkFBNkI7SUFFN0IsTUFBTSxHQUFHLEdBQUcsMEJBQVcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNwRCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FDeEQsdUNBQTZCLENBQUMsSUFBSSxDQUNoQyxJQUFJLGdEQUEyQixDQUFDLFVBQVUsQ0FBQyxFQUMzQyxtQkFBUyxDQUFDLENBQUMsQ0FBQyxDQUNiLENBQ0YsQ0FBQztJQUNGLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxNQUFNLElBQUEsNEJBQVUsRUFBQyxPQUFPLENBQUMsQ0FBQztJQUNyRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsTUFBTSxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtRQUNuRCxjQUFjO1FBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1FBQ3RCLGFBQWEsRUFBRSxzQkFBc0I7S0FDdEMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBdkJELDREQXVCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluYy5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4gKi9cblxuaW1wb3J0ICogYXMgaGNsMmNkayBmcm9tIFwiQGNka3RuL2hjbDJjZGtcIjtcbmltcG9ydCB7IENka3RmQ29uZmlnIH0gZnJvbSBcIi4vY2RrdGYtY29uZmlnXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1Qcm92aWRlckNvbnN0cmFpbnQgfSBmcm9tIFwiQGNka3RuL3Byb3ZpZGVyLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgcmVhZFNjaGVtYSB9IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItc2NoZW1hXCI7XG5pbXBvcnQge1xuICBFcnJvcnMsXG4gIExBTkdVQUdFUyxcbiAgQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29udmVydENvbmZpZ3VyYXRpb25GaWxlKFxuICBjb25maWd1cmF0aW9uOiBzdHJpbmcsXG4gIHN0YWNrV29ya2luZ0RpcmVjdG9yeTogc3RyaW5nLFxuKSB7XG4gIGNvbnN0IGNmZyA9IENka3RmQ29uZmlnLnJlYWQoc3RhY2tXb3JraW5nRGlyZWN0b3J5KTtcbiAgY29uc3QgdGFyZ2V0cyA9IGNmZy50ZXJyYWZvcm1Qcm92aWRlcnMubWFwKChjb25zdHJhaW50KSA9PlxuICAgIENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0LmZyb20oXG4gICAgICBuZXcgVGVycmFmb3JtUHJvdmlkZXJDb25zdHJhaW50KGNvbnN0cmFpbnQpLFxuICAgICAgTEFOR1VBR0VTWzBdLFxuICAgICksXG4gICk7XG4gIGNvbnN0IHsgcHJvdmlkZXJTY2hlbWEgfSA9IGF3YWl0IHJlYWRTY2hlbWEodGFyZ2V0cyk7XG4gIGlmICghcHJvdmlkZXJTY2hlbWEpIHtcbiAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXCJDb3VsZCBub3QgZmV0Y2ggcHJvdmlkZXIgc2NoZW1hXCIpO1xuICB9XG5cbiAgY29uc3QgeyBhbGwgfSA9IGF3YWl0IGhjbDJjZGsuY29udmVydChjb25maWd1cmF0aW9uLCB7XG4gICAgcHJvdmlkZXJTY2hlbWEsXG4gICAgbGFuZ3VhZ2U6IGNmZy5sYW5ndWFnZSxcbiAgICBjb2RlQ29udGFpbmVyOiBcImNvbnN0cnVjdHMuQ29uc3RydWN0XCIsXG4gIH0pO1xuXG4gIHJldHVybiBhbGw7XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/dependencies/dependency-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EAGR,6BAA6B,EAC9B,MAAM,gBAAgB,CAAC;AAkBxB,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AACxD,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAc7C,qBAAa,kBAAkB;aAYX,OAAO,EAAE,MAAM,GAAG,SAAS;IAX7C;;;OAGG;IACH,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAM7B,MAAM,EAAE,MAAM,EACE,OAAO,EAAE,MAAM,GAAG,SAAS;IAK7C,MAAM,CAAC,eAAe,CACpB,QAAQ,EAAE,MAAM,GAAG,6BAA6B,GAC/C,kBAAkB;IAgBd,uBAAuB,IAAI,OAAO;IAIzC;;;OAGG;IACH,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED;;;OAGG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;;OAGG;IACH,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED;;;OAGG;IACH,IAAW,cAAc,IAAI,MAAM,CAKlC;IAED;;;;OAIG;IACI,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOxC,QAAQ;CAGhB;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IALnC,OAAO,CAAC,cAAc,CAAiB;gBAGpB,cAAc,EAAE,QAAQ,EACjC,YAAY,EAAE,MAAM,EACX,gBAAgB,EAAE,MAAM;IAQrC,WAAW,CACf,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAAC;QAAE,kBAAkB,EAAE,OAAO,CAAA;KAAE,CAAC;IAUrC,eAAe,CAAC,UAAU,EAAE,kBAAkB;;;IAkB9C,4BAA4B,CAAC,UAAU,EAAE,kBAAkB;IA2B3D,uBAAuB,CAC3B,UAAU,EAAE,kBAAkB,EAC9B,cAAc,EAAE,MAAM;IAkBlB,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;YAoC7D,iBAAiB;YAWjB,yBAAyB;IAajC,0BAA0B,CAAC,UAAU,EAAE,kBAAkB
|
|
1
|
+
{"version":3,"file":"dependency-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/dependencies/dependency-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EAGR,6BAA6B,EAC9B,MAAM,gBAAgB,CAAC;AAkBxB,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AACxD,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAc7C,qBAAa,kBAAkB;aAYX,OAAO,EAAE,MAAM,GAAG,SAAS;IAX7C;;;OAGG;IACH,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAM7B,MAAM,EAAE,MAAM,EACE,OAAO,EAAE,MAAM,GAAG,SAAS;IAK7C,MAAM,CAAC,eAAe,CACpB,QAAQ,EAAE,MAAM,GAAG,6BAA6B,GAC/C,kBAAkB;IAgBd,uBAAuB,IAAI,OAAO;IAIzC;;;OAGG;IACH,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED;;;OAGG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;;OAGG;IACH,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED;;;OAGG;IACH,IAAW,cAAc,IAAI,MAAM,CAKlC;IAED;;;;OAIG;IACI,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOxC,QAAQ;CAGhB;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IALnC,OAAO,CAAC,cAAc,CAAiB;gBAGpB,cAAc,EAAE,QAAQ,EACjC,YAAY,EAAE,MAAM,EACX,gBAAgB,EAAE,MAAM;IAQrC,WAAW,CACf,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAAC;QAAE,kBAAkB,EAAE,OAAO,CAAA;KAAE,CAAC;IAUrC,eAAe,CAAC,UAAU,EAAE,kBAAkB;;;IAkB9C,4BAA4B,CAAC,UAAU,EAAE,kBAAkB;IA2B3D,uBAAuB,CAC3B,UAAU,EAAE,kBAAkB,EAC9B,cAAc,EAAE,MAAM;IAkBlB,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;YAoC7D,iBAAiB;YAWjB,yBAAyB;IAajC,0BAA0B,CAAC,UAAU,EAAE,kBAAkB;;;;IAwBzD,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,EAAE,MAAM,UAAQ;YAc1D,iCAAiC;IAgCzC,gBAAgB,CAAC,UAAU,EAAE,kBAAkB;IAuBrD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAwB/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA2B/B;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAwCtB,YAAY;;;;;;;;CAoD1B"}
|