@cdktn/provider-generator 0.25.0-pre.9 → 0.26.0-pre.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/build/__tests__/edge-provider-schema/builder.js +3 -3
- package/build/__tests__/edge-provider-schema/cli.js +18 -8
- package/build/__tests__/edge-provider-schema.test.js +18 -8
- package/build/__tests__/provider.test.js +44 -16
- package/build/get/__tests__/constructs-maker.test.js +91 -8
- package/build/get/__tests__/generator/complex-computed-types.test.js +18 -8
- package/build/get/__tests__/generator/deep-nested-attributes.test.js +18 -8
- package/build/get/__tests__/generator/description-escaping.test.js +18 -8
- package/build/get/__tests__/generator/empty-provider-resources.test.js +18 -8
- package/build/get/__tests__/generator/ephemeral-resources.test.js +18 -8
- package/build/get/__tests__/generator/export-sharding.test.js +18 -8
- package/build/get/__tests__/generator/import-style.test.js +18 -8
- package/build/get/__tests__/generator/module-docs-registry.test.d.ts +2 -0
- package/build/get/__tests__/generator/module-docs-registry.test.js +91 -0
- package/build/get/__tests__/generator/module-generator.test.js +18 -8
- package/build/get/__tests__/generator/nested-types.test.js +18 -8
- package/build/get/__tests__/generator/provider-functions-name-collision.test.d.ts +2 -0
- package/build/get/__tests__/generator/provider-functions-name-collision.test.js +89 -0
- package/build/get/__tests__/generator/provider-functions.test.js +18 -8
- package/build/get/__tests__/generator/provider.test.js +18 -8
- package/build/get/__tests__/generator/resource-types.test.js +18 -8
- package/build/get/__tests__/generator/skipped-attributes.test.js +18 -8
- package/build/get/__tests__/generator/types.test.js +18 -8
- package/build/get/__tests__/generator/versions-file.test.js +25 -10
- package/build/get/__tests__/generator/write-only.test.js +18 -8
- package/build/get/__tests__/registry-class-invalidation.test.d.ts +2 -0
- package/build/get/__tests__/registry-class-invalidation.test.js +120 -0
- package/build/get/__tests__/target-versions.test.js +46 -8
- package/build/get/__tests__/util.js +20 -11
- package/build/get/constructs-maker.d.ts +17 -0
- package/build/get/constructs-maker.js +86 -11
- package/build/get/generator/custom-defaults.js +2 -1
- package/build/get/generator/emitter/struct-emitter.js +20 -10
- package/build/get/generator/loop-detection.js +2 -3
- package/build/get/generator/models/attribute-model.js +3 -3
- package/build/get/generator/models/attribute-type-model.js +3 -3
- package/build/get/generator/models/provider-function-model.js +3 -4
- package/build/get/generator/models/resource-model.d.ts +5 -1
- package/build/get/generator/models/resource-model.js +20 -10
- package/build/get/generator/models/supported-stored-classes.js +2 -3
- package/build/get/generator/module-generator.d.ts +3 -2
- package/build/get/generator/module-generator.js +15 -17
- package/build/get/generator/provider-generator.d.ts +15 -1
- package/build/get/generator/provider-generator.js +20 -5
- package/build/get/generator/resource-parser.d.ts +3 -1
- package/build/get/generator/resource-parser.js +16 -7
- package/build/get/generator/sanitized-comments.js +2 -3
- package/build/get/generator/skipped-attributes.js +2 -3
- package/build/index.js +3 -3
- package/build/util.js +3 -4
- package/package.json +32 -9
- package/src/__tests__/__snapshots__/provider.test.ts.snap +1309 -3206
- package/src/__tests__/provider.test.ts +31 -8
- package/src/get/__tests__/constructs-maker.test.ts +125 -1
- package/src/get/__tests__/generator/fixtures/provider-functions-name-collision.test.fixture.json +42 -0
- package/src/get/__tests__/generator/module-docs-registry.test.ts +89 -0
- package/src/get/__tests__/generator/provider-functions-name-collision.test.ts +84 -0
- package/src/get/__tests__/generator/versions-file.test.ts +10 -5
- package/src/get/__tests__/registry-class-invalidation.test.ts +123 -0
- package/src/get/__tests__/target-versions.test.ts +43 -0
- package/src/get/constructs-maker.ts +108 -7
- package/src/get/generator/custom-defaults.ts +1 -0
- package/src/get/generator/emitter/struct-emitter.ts +2 -2
- package/src/get/generator/models/attribute-type-model.ts +1 -2
- package/src/get/generator/models/resource-model.ts +32 -9
- package/src/get/generator/module-generator.ts +20 -18
- package/src/get/generator/provider-generator.ts +27 -4
- package/src/get/generator/resource-parser.ts +21 -3
- package/tsconfig.json +4 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.assertNoFunctionsGetterCollision = assertNoFunctionsGetterCollision;
|
|
4
|
+
exports.buildProviderFunctionsModel = buildProviderFunctionsModel;
|
|
4
5
|
// Copyright (c) HashiCorp, Inc
|
|
5
6
|
// SPDX-License-Identifier: MPL-2.0
|
|
6
7
|
const codemaker_1 = require("codemaker");
|
|
@@ -639,7 +640,6 @@ function assertNoFunctionsGetterCollision(providerName, attributeNames) {
|
|
|
639
640
|
`the other - please report this as an issue.`);
|
|
640
641
|
}
|
|
641
642
|
}
|
|
642
|
-
exports.assertNoFunctionsGetterCollision = assertNoFunctionsGetterCollision;
|
|
643
643
|
/**
|
|
644
644
|
* Builds the model for a provider's `provider-functions/index.ts` file from
|
|
645
645
|
* its provider schema `functions` map. Returns `undefined` when the provider
|
|
@@ -663,5 +663,4 @@ function buildProviderFunctionsModel(providerName, functions) {
|
|
|
663
663
|
functions: mappedFunctions,
|
|
664
664
|
};
|
|
665
665
|
}
|
|
666
|
-
exports.buildProviderFunctionsModel = buildProviderFunctionsModel;
|
|
667
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItZnVuY3Rpb24tbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2V0L2dlbmVyYXRvci9tb2RlbHMvcHJvdmlkZXItZnVuY3Rpb24tbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx5Q0FBc0Q7QUF5R3RELDZFQUE2RTtBQUM3RSx3RUFBd0U7QUFDeEUsNEVBQTRFO0FBQzVFLDZFQUE2RTtBQUM3RSx1RUFBdUU7QUFDdkUsNkVBQTZFO0FBQzdFLDZDQUE2QztBQUM3QyxNQUFNLHdCQUF3QixHQUErQjtJQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLDhCQUE4QjtJQUN2RCxNQUFNLEVBQUUsS0FBSyxFQUFFLHNCQUFzQjtDQUN0QyxDQUFDO0FBRUYsU0FBUyxxQkFBcUIsQ0FBQyxJQUFZOztJQUN6QyxNQUFNLFVBQVUsR0FBRyxJQUFBLHVCQUFXLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsT0FBTyxNQUFBLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxtQ0FBSSxVQUFVLENBQUM7QUFDNUQsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsSUFBWTtJQUN0QyxJQUFJLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTyxVQUFVLENBQUMsQ0FBQyxxQ0FBcUM7SUFDL0UsT0FBTyxJQUFBLHVCQUFXLEVBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVELHdGQUF3RjtBQUN4Riw4RUFBOEU7QUFDOUUscURBQXFEO0FBQ3JELDZFQUE2RTtBQUM3RSwyRUFBMkU7QUFDM0UsNEVBQTRFO0FBQzVFLDZCQUE2QjtBQUM3Qiw0RUFBNEU7QUFDNUUsMEVBQTBFO0FBQzFFLDRFQUE0RTtBQUM1RSwwQ0FBMEM7QUFDMUMsOEVBQThFO0FBQzlFLHFCQUFxQjtBQUNyQixNQUFNLDZCQUE2QixHQUFHLElBQUksR0FBRyxDQUFDO0lBQzVDLGFBQWE7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QUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFM0MsTUFBTSxlQUFlLEdBQUcsT0FBTztTQUM1QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBRW5FLDRCQUE0QixDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM1RCx1Q0FBdUMsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDdkUsS0FBSyxNQUFNLEVBQUUsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNqQywrQkFBK0IsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELE9BQU87UUFDTCxZQUFZO1FBQ1osU0FBUyxFQUFFLEdBQUcsSUFBQSx3QkFBWSxFQUFDLFlBQVksQ0FBQyxtQkFBbUI7UUFDM0QsU0FBUyxFQUFFLGVBQWU7S0FDM0IsQ0FBQztBQUNKLENBQUM7QUF0QkQsa0VBc0JDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IHRvQ2FtZWxDYXNlLCB0b1Bhc2NhbENhc2UgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGVUeXBlLFxuICBGdW5jdGlvblBhcmFtZXRlcixcbiAgRnVuY3Rpb25TaWduYXR1cmUsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuXG4vKipcbiAqIEEgcHJvdmlkZXItZGVmaW5lZCBmdW5jdGlvbiBwYXJhbWV0ZXIgKHBvc2l0aW9uYWwgb3IgdGhlIHRyYWlsaW5nXG4gKiB2YXJpYWRpYyBvbmUpLCBtYXBwZWQgdG8gdGhlIGpzaWktc2FmZSBUeXBlU2NyaXB0IHR5cGUgdXNlZCBpbiB0aGVcbiAqIGdlbmVyYXRlZCBtZXRob2Qgc2lnbmF0dXJlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyRnVuY3Rpb25QYXJhbWV0ZXJNb2RlbCB7XG4gIHJlYWRvbmx5IHRlcnJhZm9ybU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSB0c1R5cGU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBKU0RvYyB0eXBlIGV4cHJlc3Npb24gZW1pdHRlZCBpbnNpZGUgdGhlIGBAcGFyYW0gey4uLn1gIGJyYWNlcy5cbiAgICogQSBwdXJlIHR5cGUgZXhwcmVzc2lvbiBvbmx5IC0gcHJvc2UgKFRlcnJhZm9ybSBsaXN0L3NldCBzZW1hbnRpY3MsXG4gICAqIGBjZGt0bi5Ub2tlbi5udWxsVmFsdWUoKWAgZ3VpZGFuY2UpIGJlbG9uZ3MgaW4gYGRvY3N0cmluZ05vdGVgLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9jc3RyaW5nVHlwZTogc3RyaW5nO1xuICAvKipcbiAgICogUHJvc2UgYXBwZW5kZWQgYWZ0ZXIgdGhlIHBhcmFtZXRlciBuYW1lIChhbmQgYGRlc2NyaXB0aW9uYCwgaWYgYW55KSBpblxuICAgKiB0aGUgZW1pdHRlZCBgQHBhcmFtYCBsaW5lIC0gZS5nLiBzZXQtb3JkZXJpbmcgc2VtYW50aWNzIG9yIGhvdyB0byBwYXNzXG4gICAqIGFuIGV4cGxpY2l0IFRlcnJhZm9ybSBgbnVsbGAuIE9mZmljaWFsIEpTRG9jIHBsYWNlcyBvbmx5IHRoZSB0eXBlXG4gICAqIGV4cHJlc3Npb24gaW5zaWRlIHRoZSBicmFjZXMsIHNvIHRoaXMgbXVzdCBuZXZlciBiZSBmb2xkZWQgaW50b1xuICAgKiBgZG9jc3RyaW5nVHlwZWAuXG4gICAqL1xuICByZWFkb25seSBkb2NzdHJpbmdOb3RlPzogc3RyaW5nO1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRydWUgd2hlbiB0aGlzIChmaXhlZCwgbm9uLXZhcmlhZGljKSBwYXJhbWV0ZXIgaXMgZW1pdHRlZCBhcyBhXG4gICAqIGpzaWktb3B0aW9uYWwgVHlwZVNjcmlwdCBwYXJhbWV0ZXIgKGBuYW1lPzogVGApIC0gc2VlIHRoZVxuICAgKiBpc19udWxsYWJsZS90cmFpbGluZy1jb21wYXRpYmlsaXR5IGhhbmRsaW5nIGluIGBhcHBseU51bGxhYmlsaXR5YC5cbiAgICogTmV2ZXIgc2V0IG9uIHRoZSB2YXJpYWRpYyBwYXJhbWV0ZXI6IGFuIGFycmF5IHBhcmFtZXRlciBjYW4ndCBiZSBgP2AuXG4gICAqL1xuICByZWFkb25seSBvcHRpb25hbD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogYFByb3ZpZGVyRnVuY3Rpb25QYXJhbWV0ZXJNb2RlbGAgcGx1cyB0aGUgb25lIGJpdCBvZiBpbmZvcm1hdGlvbiB0aGF0J3NcbiAqIG9ubHkgbmVlZGVkIHdoaWxlIGJ1aWxkaW5nIHRoZSBtb2RlbCAoc2VlIGBtYXBQYXJhbWV0ZXJUeXBlYC9cbiAqIGBhcHBseU51bGxhYmlsaXR5YCksIG5ldmVyIGJ5IHRoZSBlbWl0dGVyOiB3aGV0aGVyIGB0c1R5cGVgIGFscmVhZHlcbiAqIGFjY2VwdHMgYW4gYXJiaXRyYXJ5IGBjZGt0bi5JUmVzb2x2YWJsZWAgaW4gdGhpcyBwb3NpdGlvbiAoYSBiYXJlXG4gKiBib29sZWFuL2NvbGxlY3Rpb24tb2YtYm9vbGVhbiB0b2tlbiwgYGFueWAsIG9yIGFuIGV4cGxpY2l0XG4gKiBgfCBjZGt0bi5JUmVzb2x2YWJsZWAgdW5pb24gYWxyZWFkeSBwcmVzZW50KS4gTnVsbGFiaWxpdHkgaGFuZGxpbmcgdXNlc1xuICogdGhpcyB0byBkZWNpZGUgd2hldGhlciBpdCBuZWVkcyB0byBhcHBlbmQgYW5vdGhlciBgfCBjZGt0bi5JUmVzb2x2YWJsZWBcbiAqIHNvIGEgY2FsbGVyIGNhbiBwYXNzIGBjZGt0bi5Ub2tlbi5udWxsVmFsdWUoKWAgLSB3aXRob3V0IHJlc29ydGluZyB0b1xuICogcmUtZGVyaXZpbmcgdGhhdCBhbnN3ZXIgd2l0aCBhIHN0cmluZyBzZWFyY2ggb3ZlciBgdHNUeXBlYC5cbiAqL1xuaW50ZXJmYWNlIEludGVybmFsUGFyYW1ldGVyTW9kZWwgZXh0ZW5kcyBQcm92aWRlckZ1bmN0aW9uUGFyYW1ldGVyTW9kZWwge1xuICByZWFkb25seSBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBzaW5nbGUgcHJvdmlkZXItZGVmaW5lZCBmdW5jdGlvbiwgbWFwcGVkIHRvIGEgc3RhdGljIG1ldGhvZCBvbiB0aGVcbiAqIGdlbmVyYXRlZCBgPFByb3ZpZGVyPlByb3ZpZGVyRnVuY3Rpb25zYCBjbGFzcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlckZ1bmN0aW9uTW9kZWwge1xuICByZWFkb25seSB0ZXJyYWZvcm1OYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1ldGhvZE5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN1bW1hcnk/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUZXJyYWZvcm0gKD49MS44KSBkZXByZWNhdGlvbiBtZXNzYWdlIGZvciB0aGUgZnVuY3Rpb24sIHN1cmZhY2VkIGFzIGFuXG4gICAqIGBAZGVwcmVjYXRlZGAgSlNEb2MgdGFnLiBPcGVuVG9mdSBuZXZlciBlbWl0cyB0aGlzIGZpZWxkIC0gc2VlXG4gICAqIGBGdW5jdGlvblNpZ25hdHVyZS5kZXByZWNhdGlvbl9tZXNzYWdlYC5cbiAgICovXG4gIHJlYWRvbmx5IGRlcHJlY2F0aW9uTWVzc2FnZT86IHN0cmluZztcbiAgcmVhZG9ubHkgcmV0dXJuVHNUeXBlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgYEByZXR1cm5zIHsuLi59YCBKU0RvYyB0eXBlLCBkZXNjcmliaW5nIHRoZSBjb25jZXB0dWFsL1RlcnJhZm9ybVxuICAgKiBzaGFwZSBvZiB0aGUgcmV0dXJuIHZhbHVlIC0gc2VlIGBtYXBSZXR1cm5UeXBlYC4gVGhpcyBkZWxpYmVyYXRlbHkgY2FuXG4gICAqIGRpZmZlciBmcm9tIGByZXR1cm5Uc1R5cGVgIChlLmcuIGEgYGJvb2xgIHJldHVybiBpcyBkZWNsYXJlZFxuICAgKiBgY2RrdG4uSVJlc29sdmFibGVgIGJ1dCBkb2N1bWVudGVkIGFzIGBib29sZWFuIHwgSVJlc29sdmFibGVgKSwgdGhlIHNhbWVcbiAgICogd2F5IGEgcGFyYW1ldGVyJ3MgYGRvY3N0cmluZ1R5cGVgIGNhbiBkaWZmZXIgZnJvbSBpdHMgYHRzVHlwZWAuXG4gICAqL1xuICByZWFkb25seSByZXR1cm5Eb2NzdHJpbmdUeXBlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQcm9zZSBhcHBlbmRlZCBhZnRlciB0aGUgYEByZXR1cm5zIHsuLi59YCBicmFjZXMgKGUuZy4gVGVycmFmb3JtXG4gICAqIGxpc3Qvc2V0IHNlbWFudGljcykgLSB0aGUgcmV0dXJuLXNpZGUgY291bnRlcnBhcnQgb2YgYSBwYXJhbWV0ZXInc1xuICAgKiBgZG9jc3RyaW5nTm90ZWAuXG4gICAqL1xuICByZWFkb25seSByZXR1cm5Eb2NzdHJpbmdOb3RlPzogc3RyaW5nO1xuICAvKipcbiAgICogV3JhcHMgdGhlIGBjZGt0bi5UZXJyYWZvcm1Qcm92aWRlckZ1bmN0aW9uLmludm9rZSguLi4pYCBjYWxsIGV4cHJlc3Npb25cbiAgICogaW50byB0aGUgbWV0aG9kJ3MgYHJldHVybmAgc3RhdGVtZW50IChlLmcuIHdyYXBwaW5nIGl0IGluXG4gICAqIGBjZGt0bi5Ub2tlbi5hc1N0cmluZyguLi4pYCwgb3IgcmV0dXJuaW5nIGl0IHVud3JhcHBlZCBmb3IgYGJvb2xgKS5cbiAgICovXG4gIHJlYWRvbmx5IHdyYXBSZXR1cm46IChpbnZva2VFeHByZXNzaW9uOiBzdHJpbmcpID0+IHN0cmluZztcbiAgcmVhZG9ubHkgcGFyYW1ldGVyczogUHJvdmlkZXJGdW5jdGlvblBhcmFtZXRlck1vZGVsW107XG4gIHJlYWRvbmx5IHZhcmlhZGljUGFyYW1ldGVyPzogUHJvdmlkZXJGdW5jdGlvblBhcmFtZXRlck1vZGVsO1xufVxuXG4vKipcbiAqIEFsbCBwcm92aWRlci1kZWZpbmVkIGZ1bmN0aW9ucyBvZiBhIHNpbmdsZSBwcm92aWRlciwgbWFwcGVkIHRvIGEgc2luZ2xlXG4gKiBnZW5lcmF0ZWQgYHByb3ZpZGVycy88cHJvdmlkZXI+L3Byb3ZpZGVyLWZ1bmN0aW9ucy9pbmRleC50c2AgZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlckZ1bmN0aW9uc01vZGVsIHtcbiAgcmVhZG9ubHkgcHJvdmlkZXJOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNsYXNzTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBmdW5jdGlvbnM6IFByb3ZpZGVyRnVuY3Rpb25Nb2RlbFtdO1xufVxuXG4vLyBQYXJhbWV0ZXIgbmFtZXMgdGhhdCBjb2xsaWRlIHdpdGggYSByZXNlcnZlZCB3b3JkL2lkZW50aWZpZXIgaW4gb25lIG9mIHRoZVxuLy8ganNpaSB0YXJnZXQgbGFuZ3VhZ2VzLiBUaGlzIGlzIHRoZSBzaWJsaW5nIHRhYmxlIGZvciBwcm92aWRlci1kZWZpbmVkXG4vLyBmdW5jdGlvbnM6IHRvb2xzL2dlbmVyYXRlLWZ1bmN0aW9uLWJpbmRpbmdzL3NjcmlwdHMvZ2VuZXJhdGUudHMgaG9sZHMgdGhlXG4vLyBjYW5vbmljYWwgKGFuZCBzZXBhcmF0ZWx5IG1haW50YWluZWQpIHRhYmxlIGZvciBidWlsdC1pbiBgRm4uKmAgZnVuY3Rpb25zLlxuLy8gVGhlIHR3byBhcmUgaW50ZW50aW9uYWxseSBub3Qgc2hhcmVkIC0gdGhhdCBzY3JpcHQgbGl2ZXMgb3V0c2lkZSB0aGVcbi8vIHBhY2thZ2VzLyBidWlsZCBhbmQgZ2VuZXJhdGVzIGEgZGlmZmVyZW50IGFydGlmYWN0IC0gYnV0IGFueSByZXNlcnZlZCBuYW1lXG4vLyBhZGRlZCB0aGVyZSBzaG91bGQgYmUgY29uc2lkZXJlZCBoZXJlIHRvby5cbmNvbnN0IFJFU0VSVkVEX1BBUkFNRVRFUl9OQU1FUzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gIGRlZmF1bHQ6IFwiZGVmYXVsdFZhbHVlXCIsIC8vIHJlc2VydmVkIHdvcmQgaW4gVHlwZVNjcmlwdFxuICBzdHJpbmc6IFwic3RyXCIsIC8vIGNhdXNlcyBpc3N1ZXMgaW4gR29cbn07XG5cbmZ1bmN0aW9uIHNhbml0aXplUGFyYW1ldGVyTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjYW1lbENhc2VkID0gdG9DYW1lbENhc2UobmFtZSk7XG4gIHJldHVybiBSRVNFUlZFRF9QQVJBTUVURVJfTkFNRVNbY2FtZWxDYXNlZF0gPz8gY2FtZWxDYXNlZDtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVNZXRob2ROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChuYW1lID09PSBcImxlbmd0aFwiKSByZXR1cm4gXCJsZW5ndGhPZlwiOyAvLyByZXNlcnZlZCBvbiBqc2lpLWdlbmVyYXRlZCBjbGFzc2VzXG4gIHJldHVybiB0b0NhbWVsQ2FzZShuYW1lKTtcbn1cblxuLy8gTWVtYmVycyB0aGF0IGBQcm92aWRlckZ1bmN0aW9uc0VtaXR0ZXJgIChzZWUgYGVtaXR0ZXIvcHJvdmlkZXItZnVuY3Rpb25zLWVtaXR0ZXIudHNgKVxuLy8gaXRzZWxmIHB1dHMgb24gZXZlcnkgZ2VuZXJhdGVkIGA8UHJvdmlkZXI+UHJvdmlkZXJGdW5jdGlvbnNgIHdyYXBwZXIgY2xhc3MsXG4vLyByZWdhcmRsZXNzIG9mIHdoaWNoIGZ1bmN0aW9ucyBhIHByb3ZpZGVyIGRlY2xhcmVzOlxuLy8gICAtIFwiY29uc3RydWN0b3JcIjogdGhlIGNsYXNzJ3Mgb3duIGNvbnN0cnVjdG9yLCB3aGljaCB0YWtlcyB0aGUgcHJvdmlkZXInc1xuLy8gICAgIGBwcm92aWRlckxvY2FsTmFtZWAuIEEgcHJvdmlkZXItZGVmaW5lZCBmdW5jdGlvbiBuYW1lZCBcImNvbnN0cnVjdG9yXCJcbi8vICAgICB3b3VsZCBzYW5pdGl6ZSB0byBhICpzZWNvbmQqIGBjb25zdHJ1Y3RvcmAgbWVtYmVyIG9uIHRoZSBjbGFzcywgd2hpY2hcbi8vICAgICBpcyBpbnZhbGlkIFR5cGVTY3JpcHQuXG4vLyAgIC0gXCJwcm92aWRlckxvY2FsTmFtZVwiOiB0aGUgYHByaXZhdGUgcmVhZG9ubHkgcHJvdmlkZXJMb2NhbE5hbWU6IHN0cmluZ2Bcbi8vICAgICBmaWVsZCB0aGUgY29uc3RydWN0b3IgYXNzaWducyAoc2VlIHRoZSBlbWl0dGVyJ3MgYGVtaXRDbGFzc0hlYWRlcmAvXG4vLyAgICAgY29uc3RydWN0b3IgZW1pc3Npb24pLiBBIHByb3ZpZGVyLWRlZmluZWQgZnVuY3Rpb24gc2FuaXRpemluZyB0byB0aGlzXG4vLyAgICAgbmFtZSB3b3VsZCBjb2xsaWRlIHdpdGggdGhhdCBmaWVsZC5cbi8vIElmIGBQcm92aWRlckZ1bmN0aW9uc0VtaXR0ZXJgIGV2ZXIgZ3Jvd3MgbW9yZSBtZW1iZXJzIG9uIHRoZSB3cmFwcGVyIGNsYXNzLFxuLy8gYWRkIHRoZW0gaGVyZSB0b28uXG5jb25zdCBSRVNFUlZFRF9XUkFQUEVSX01FTUJFUl9OQU1FUyA9IG5ldyBTZXQoW1xuICBcImNvbnN0cnVjdG9yXCIsXG4gIFwicHJvdmlkZXJMb2NhbE5hbWVcIixcbl0pO1xuXG4vKipcbiAqIFJlc3VsdCBvZiBtYXBwaW5nIGEgc2luZ2xlIFRlcnJhZm9ybSBhdHRyaWJ1dGUgdHlwZSBpbnRvIGEganNpaS1zYWZlXG4gKiBwYXJhbWV0ZXIgc2hhcGUgKHNlZSBgbWFwUGFyYW1ldGVyVHlwZWApLlxuICovXG5pbnRlcmZhY2UgTWFwcGVkUGFyYW1ldGVyVHlwZSB7XG4gIHJlYWRvbmx5IHRzVHlwZTogc3RyaW5nO1xuICByZWFkb25seSBkb2NzdHJpbmdUeXBlOiBzdHJpbmc7XG4gIC8qKiBTZWUgYFByb3ZpZGVyRnVuY3Rpb25QYXJhbWV0ZXJNb2RlbC5kb2NzdHJpbmdOb3RlYC4gKi9cbiAgcmVhZG9ubHkgZG9jc3RyaW5nTm90ZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRydWUgd2hlbiBgdHNUeXBlYCBhbHJlYWR5IGFjY2VwdHMgYW4gYXJiaXRyYXJ5IGBjZGt0bi5JUmVzb2x2YWJsZWAgaW5cbiAgICogdGhpcyBwb3NpdGlvbiB3aXRob3V0IG5lZWRpbmcgYW4gZXh0cmEgYHwgY2RrdG4uSVJlc29sdmFibGVgIHVuaW9uIC1cbiAgICogc2VlIGBJbnRlcm5hbFBhcmFtZXRlck1vZGVsYC5cbiAgICovXG4gIHJlYWRvbmx5IGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgYnJhY2tldC1jb21wb3NhYmxlIChcIlRbXVwiLCBubyB0b3AtbGV2ZWwgdW5pb24pIFR5cGVTY3JpcHQvZG9jc3RyaW5nXG4gKiB0eXBlIGZvciBhbiBlbGVtZW50IHRoYXQgY2FuIG5lc3QgaW5zaWRlIGFuIGFycmF5IHdpdGhvdXQgSVRTRUxGIG5lZWRpbmdcbiAqIHRoZSB3aG9sZS1jb2xsZWN0aW9uIHRva2VuIHVuaW9uIGF0IHRoYXQgbGV2ZWw6IGBzdHJpbmdgLCBgbnVtYmVyYCwgb3IgYVxuICogbGlzdC9zZXQgb2Ygb25lIG9mIHRob3NlLCByZWN1cnNpdmVseSAoZS5nLiBgbGlzdChsaXN0KHN0cmluZykpYCBib3R0b21zXG4gKiBvdXQgYXQgYHN0cmluZ2ApLiBSZXR1cm5zIGB1bmRlZmluZWRgIGZvciBhbnl0aGluZyBlbHNlIChgYm9vbGAsIGBtYXBgLFxuICogYG9iamVjdGAsIGBkeW5hbWljYCwgb3IgYSBuZXN0ZWQgY29sbGVjdGlvbiB0aGF0IGRvZXNuJ3QgaXRzZWxmIHF1YWxpZnkpLFxuICogc28gdGhlIGNhbGxlciBmYWxscyBiYWNrIHRvIHdpZGVuaW5nIHRoZSB3aG9sZSBwYXJhbWV0ZXIgdG9cbiAqIGBhbnlbXSB8IGNka3RuLklSZXNvbHZhYmxlYCBpbnN0ZWFkLlxuICovXG5mdW5jdGlvbiBwbGFpbkFycmF5RWxlbWVudFR5cGUoXG4gIHR5cGU6IEF0dHJpYnV0ZVR5cGUsXG4pOiB7IHRzVHlwZTogc3RyaW5nOyBkb2NzdHJpbmdUeXBlOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSByZXR1cm4geyB0c1R5cGU6IFwic3RyaW5nXCIsIGRvY3N0cmluZ1R5cGU6IFwic3RyaW5nXCIgfTtcbiAgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHJldHVybiB7IHRzVHlwZTogXCJudW1iZXJcIiwgZG9jc3RyaW5nVHlwZTogXCJudW1iZXJcIiB9O1xuICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSAmJiAodHlwZVswXSA9PT0gXCJsaXN0XCIgfHwgdHlwZVswXSA9PT0gXCJzZXRcIikpIHtcbiAgICBjb25zdCBpbm5lciA9IHBsYWluQXJyYXlFbGVtZW50VHlwZSh0eXBlWzFdKTtcbiAgICBpZiAoIWlubmVyKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7XG4gICAgICB0c1R5cGU6IGAke2lubmVyLnRzVHlwZX1bXWAsXG4gICAgICBkb2NzdHJpbmdUeXBlOiBgJHt0eXBlWzBdID09PSBcInNldFwiID8gXCJTZXRcIiA6IFwiQXJyYXlcIn08JHtpbm5lci5kb2NzdHJpbmdUeXBlfT5gLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBNYXBzIGEgYGxpc3RgL2BzZXRgIHBhcmFtZXRlciB0byBpdHMganNpaS1zYWZlIHNoYXBlIC0gbWlycm9yc1xuICogYExpc3RBdHRyaWJ1dGVUeXBlTW9kZWxgL2BTZXRBdHRyaWJ1dGVUeXBlTW9kZWwuaW5wdXRUeXBlRGVmaW5pdGlvbmBcbiAqIChib3RoIGlkZW50aWNhbCkgYnJhbmNoIGZvciBicmFuY2gsIHNpbmNlIGpzaWkgcGFyYW1ldGVycywgbGlrZSByZXNvdXJjZVxuICogaW5wdXRzLCBhcmUgYWxsb3dlZCB0byB1bmlvbiBpbiBhIHdob2xlLWNvbGxlY3Rpb24gYGNka3RuLklSZXNvbHZhYmxlYFxuICogdG9rZW4uIGBraW5kYCBvbmx5IGFmZmVjdHMgdGhlIGRvY3VtZW50YXRpb246IHRoZSBkb2NzdHJpbmcgbm90YXRpb25cbiAqIChgQXJyYXk8Li4uPmAgZm9yIGEgVGVycmFmb3JtIGxpc3QsIGBTZXQ8Li4uPmAgZm9yIGEgVGVycmFmb3JtIHNldCxcbiAqIHJlY3Vyc2l2ZWx5IHZpYSBgcGxhaW5BcnJheUVsZW1lbnRUeXBlYC9gbWFwUGFyYW1ldGVyVHlwZWApIHBsdXMsIGZvclxuICogc2V0cywgYSBwcm9zZSBub3RlIC0gdGhlIGpzaWkgdHlwZSBpcyBhbiBhcnJheSBlaXRoZXIgd2F5LCBzbyB0aGUgbm90ZVxuICoga2VlcHMgYSByZWFkZXIgZnJvbSBsaXRlcmFsbHkgcGFzc2luZyBhIEpTIGBTZXRgIGFuZCBmbGFncyB0aGVcbiAqIG9yZGVyaW5nL2R1cGxpY2F0ZS1lbGVtZW50IHNlbWFudGljcyBkaWZmZXJlbmNlLiBUaGUgdHlwZS1sZXZlbCBoYW5kbGluZ1xuICogaXMgaWRlbnRpY2FsIGZvciBib3RoLlxuICovXG5mdW5jdGlvbiBtYXBMaXN0T3JTZXRQYXJhbWV0ZXJUeXBlKFxuICBraW5kOiBcImxpc3RcIiB8IFwic2V0XCIsXG4gIGVsZW1lbnQ6IEF0dHJpYnV0ZVR5cGUsXG4pOiBNYXBwZWRQYXJhbWV0ZXJUeXBlIHtcbiAgY29uc3Qgd3JhcHBlciA9IGtpbmQgPT09IFwic2V0XCIgPyBcIlNldFwiIDogXCJBcnJheVwiO1xuICBjb25zdCBkb2NzdHJpbmdOb3RlID1cbiAgICBraW5kID09PSBcInNldFwiXG4gICAgICA/IFwiVGVycmFmb3JtIHNldDsgb3JkZXJpbmcgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGR1cGxpY2F0ZSB2YWx1ZXMgYXJlIHJlbW92ZWQuXCJcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gIGlmIChlbGVtZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgLy8gTWlycm9ycyB0aGUgZmluYWwgYGVsc2VgIGJyYW5jaDogZW5jb2RlZCBsaXN0IHRva2VucyBhbHJlYWR5IHNhdGlzZnlcbiAgICAvLyBgc3RyaW5nW11gLCBzbyBubyB1bmlvbiBpcyBuZWVkZWQuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJzdHJpbmdbXVwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogYCR7d3JhcHBlcn08c3RyaW5nPmAsXG4gICAgICBkb2NzdHJpbmdOb3RlLFxuICAgICAgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiBmYWxzZSxcbiAgICB9O1xuICB9XG4gIGlmIChlbGVtZW50ID09PSBcIm51bWJlclwiKSB7XG4gICAgLy8gU2FtZSByZWFzb25pbmcgYXMgYHN0cmluZ2AgYWJvdmUuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJudW1iZXJbXVwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogYCR7d3JhcHBlcn08bnVtYmVyPmAsXG4gICAgICBkb2NzdHJpbmdOb3RlLFxuICAgICAgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiBmYWxzZSxcbiAgICB9O1xuICB9XG4gIGlmIChlbGVtZW50ID09PSBcImJvb2xcIikge1xuICAgIC8vIE1pcnJvcnMgdGhlIGBlbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUgPT09IFwiYm9vbGVhblwiYCBicmFuY2g6IGJvb2xcbiAgICAvLyBoYXMgbm8gbG9zc2xlc3MgcGVyLWVsZW1lbnQgdG9rZW4sIGJ1dCB0aGUgV0hPTEUgY29sbGVjdGlvbiBpcyBzdGlsbFxuICAgIC8vIHRva2VuaXphYmxlLCBzbyB0aGUgdW5pb24gaXMgb24gdGhlIG91dHNpZGUuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJBcnJheTxib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU+IHwgY2RrdG4uSVJlc29sdmFibGVcIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IGAke3dyYXBwZXJ9PGJvb2xlYW4gfCBJUmVzb2x2YWJsZT5gLFxuICAgICAgZG9jc3RyaW5nTm90ZSxcbiAgICAgIGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeTogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcGxhaW5FbGVtZW50ID0gcGxhaW5BcnJheUVsZW1lbnRUeXBlKGVsZW1lbnQpO1xuICBpZiAocGxhaW5FbGVtZW50KSB7XG4gICAgLy8gTWlycm9ycyB0aGUgYGVsZW1lbnRUeXBlLnR5cGVNb2RlbFR5cGUgIT09IFwic2ltcGxlXCJgIGJyYW5jaDogYSBuZXN0ZWRcbiAgICAvLyBsaXN0L3NldCB0aGF0IGl0c2VsZiBib3R0b21zIG91dCBhdCBzdHJpbmcvbnVtYmVyIGNvbXBvc2VzIGludG8gYVxuICAgIC8vIHByb3BlciBuZXN0ZWQgYXJyYXkgdHlwZSAoZS5nLiBgbGlzdChsaXN0KHN0cmluZykpYCAtPiBgc3RyaW5nW11bXWApLFxuICAgIC8vIHdpdGggdGhlIHdob2xlLWNvbGxlY3Rpb24gdG9rZW4gYWRkaXRpb25hbGx5IGFjY2VwdGVkIGFsb25nc2lkZSBpdC5cbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBgJHtwbGFpbkVsZW1lbnQudHNUeXBlfVtdIHwgY2RrdG4uSVJlc29sdmFibGVgLFxuICAgICAgZG9jc3RyaW5nVHlwZTogYCR7d3JhcHBlcn08JHtwbGFpbkVsZW1lbnQuZG9jc3RyaW5nVHlwZX0+YCxcbiAgICAgIGRvY3N0cmluZ05vdGUsXG4gICAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIC8vIG1hcC9vYmplY3QvZHluYW1pYyBlbGVtZW50LCBvciBhIG5lc3RlZCBjb2xsZWN0aW9uIHRoYXQgZG9lc24ndCBpdHNlbGZcbiAgLy8gcmVkdWNlIHRvIHN0cmluZy9udW1iZXI6IG5vIGpzaWktc2FmZSBhcnJheS1vZi1YIHR5cGUgZXhpc3RzIC0gd2lkZW5cbiAgLy8gdGhlIHdob2xlIHBhcmFtZXRlciB0byBgYW55W11gLiBVbmxpa2UgYSBiYXJlIGBhbnlgIHBhcmFtZXRlciwgcGxhaW5cbiAgLy8gYGFueVtdYCBkb2VzIE5PVCBzdHJ1Y3R1cmFsbHkgYWNjZXB0IGEgd2hvbGUtY29sbGVjdGlvblxuICAvLyBgY2RrdG4uSVJlc29sdmFibGVgIHRva2VuLCBzbyB0aGUgdW5pb24gaXMgcmVxdWlyZWQgaGVyZSAodGhpcyBpc1xuICAvLyBzdHJpY3RlciB0aGFuIGBNYXBBdHRyaWJ1dGVUeXBlTW9kZWxgL2BMaXN0QXR0cmlidXRlVHlwZU1vZGVsYCBoYXZlIHRvXG4gIC8vIGJlLCBzaW5jZSB0aG9zZSBvbmx5IGV2ZXIgZmFsbCBiYWNrIHRvIGBhbnlbXSB8IGNka3RuLklSZXNvbHZhYmxlYCB2aWFcbiAgLy8gdGhlIHNhbWUgXCJub3Qgc2ltcGxlXCIgYnJhbmNoIGFib3ZlLCB3aGljaCBhbHJlYWR5IGdyYW50cyBpdCkuIEtlZXAgdGhlXG4gIC8vIGRvY3N0cmluZyBob25lc3QgYWJvdXQgdGhlIHJlYWwgZWxlbWVudCBzaGFwZSByYXRoZXIgdGhhbiBqdXN0IHNheWluZ1xuICAvLyBgYW55YC5cbiAgY29uc3QgZWxlbWVudERlc2NyaXB0aW9uID0gbWFwUGFyYW1ldGVyVHlwZShlbGVtZW50KS5kb2NzdHJpbmdUeXBlO1xuICByZXR1cm4ge1xuICAgIHRzVHlwZTogXCJhbnlbXSB8IGNka3RuLklSZXNvbHZhYmxlXCIsXG4gICAgZG9jc3RyaW5nVHlwZTogYCR7d3JhcHBlcn08JHtlbGVtZW50RGVzY3JpcHRpb259PmAsXG4gICAgZG9jc3RyaW5nTm90ZSxcbiAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IHRydWUsXG4gIH07XG59XG5cbi8qKlxuICogTWFwcyBhIGBtYXBgIHBhcmFtZXRlciB0byBpdHMganNpaS1zYWZlIHNoYXBlIC0gbWlycm9yc1xuICogYE1hcEF0dHJpYnV0ZVR5cGVNb2RlbC5pbnB1dFR5cGVEZWZpbml0aW9uYC4gT25seSB0aGUgYGJvb2xgLWVsZW1lbnQgY2FzZVxuICogaXMgcmVhY2hhYmxlIGZyb20gcmVhbCBwcm92aWRlciBzY2hlbWFzIHRvZGF5IChgc3RyaW5nYC9gbnVtYmVyYCBlbGVtZW50XG4gKiBtYXBzIHN0YXkgYSBwbGFpbiwgbm9uLXVuaW9uIHJlY29yZDsgbmVzdGVkL2NvbXBsZXggbWFwIGVsZW1lbnRzIGFyZW4ndFxuICogZW1pdHRlZCBmb3IgcHJvdmlkZXIgZnVuY3Rpb25zIC0gc2VlIHRoZSBgb2JqZWN0YCBmYWxsYmFjayBpblxuICogYG1hcFBhcmFtZXRlclR5cGVgKSwgYnV0IHRoZSBzaGFwZSBpcyBrZXB0IGJyYW5jaC1mb3ItYnJhbmNoIGFsaWduZWQgd2l0aFxuICogdGhlIG1vZGVsIGl0IG1pcnJvcnMgcmF0aGVyIHRoYW4gY29sbGFwc2VkLlxuICovXG5mdW5jdGlvbiBtYXBNYXBQYXJhbWV0ZXJUeXBlKGVsZW1lbnQ6IEF0dHJpYnV0ZVR5cGUpOiBNYXBwZWRQYXJhbWV0ZXJUeXBlIHtcbiAgaWYgKGVsZW1lbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcInsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVwiLFxuICAgICAgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiBmYWxzZSxcbiAgICB9O1xuICB9XG4gIGlmIChlbGVtZW50ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJ7IFtrZXk6IHN0cmluZ106IG51bWJlciB9XCIsXG4gICAgICBkb2NzdHJpbmdUeXBlOiBcInsgW2tleTogc3RyaW5nXTogbnVtYmVyIH1cIixcbiAgICAgIGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeTogZmFsc2UsXG4gICAgfTtcbiAgfVxuICBpZiAoZWxlbWVudCA9PT0gXCJib29sXCIpIHtcbiAgICAvLyBNaXJyb3JzIHRoZSBgZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlID09PSBcImJvb2xlYW5cImAgYnJhbmNoOiBtYXBcbiAgICAvLyBvZiBib29sZWFucyBoYXMgUEVSLUVOVFJZIHRva2VuIHN1cHBvcnQsIGJ1dCB0aGUgd2hvbGUgbWFwIGl0c2VsZiBpc1xuICAgIC8vIG5vdCBhZGRpdGlvbmFsbHkgdW5pb25lZCB3aXRoIGBjZGt0bi5JUmVzb2x2YWJsZWAgKHVubGlrZSB0aGUgbGlzdC9zZXRcbiAgICAvLyBjYXNlKSAtIG1hdGNoaW5nIGBNYXBBdHRyaWJ1dGVUeXBlTW9kZWwuaW5wdXRUeXBlRGVmaW5pdGlvbmAgZXhhY3RseS5cbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcInsgW2tleTogc3RyaW5nXTogKGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZSkgfVwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogXCJ7IFtrZXk6IHN0cmluZ106IChib29sZWFuIHwgSVJlc29sdmFibGUpIH1cIixcbiAgICAgIGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeTogZmFsc2UsXG4gICAgfTtcbiAgfVxuICAvLyBtYXAvb2JqZWN0L2R5bmFtaWMgZWxlbWVudDogbm8gc3RydWN0dXJhbCBpbnB1dCBoZWxwZXIgZXhpc3RzIGhlcmUgLVxuICAvLyBzdGF5cyBgYW55YCwgd2hpY2ggKGJlaW5nIGBhbnlgKSBhbHJlYWR5IGFjY2VwdHMgYSB3aG9sZS1tYXBcbiAgLy8gYGNka3RuLklSZXNvbHZhYmxlYCB0b2tlbiB0b28uXG4gIHJldHVybiB7XG4gICAgdHNUeXBlOiBcImFueVwiLFxuICAgIGRvY3N0cmluZ1R5cGU6IFwiYW55XCIsXG4gICAgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiB0cnVlLFxuICB9O1xufVxuXG4vKipcbiAqIE1hcHMgYSBwcm92aWRlciBmdW5jdGlvbiBwYXJhbWV0ZXIncyBkZWNsYXJlZCBUZXJyYWZvcm0gdHlwZSB0byBhXG4gKiBqc2lpLXNhZmUgVHlwZVNjcmlwdCBwYXJhbWV0ZXIgdHlwZSwgcmVjdXJzaXZlbHkgZm9yIGNvbGxlY3Rpb24gdHlwZXMuXG4gKlxuICogVW5saWtlIHJldHVybiB0eXBlcywganNpaSBhbGxvd3MgdW5pb25zIGluICpwYXJhbWV0ZXIqIHBvc2l0aW9uLCBzb1xuICogYGJvb2xgIGlzIHR5cGVkIGBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGVgIChtaXJyb3JpbmdcbiAqIGBTaW1wbGVBdHRyaWJ1dGVUeXBlTW9kZWwuaW5wdXRUeXBlRGVmaW5pdGlvbmAncyBpbnB1dC1zaWRlIGNvbnZlbnRpb24pIC1cbiAqIHRoaXMgYm90aCBhY2NlcHRzIGEgcmVhbCBib29sZWFuIGFuZCBzdGlsbCBhY2NlcHRzIGEgdG9rZW4gaW4gcGxhY2Ugb2ZcbiAqIG9uZS4gYGR5bmFtaWNgIGhhcyBubyBzdHJ1Y3R1cmFsIHR5cGluZyBhbmQgc3RheXMgYGFueWAgKHdoaWNoIGFscmVhZHlcbiAqIGFjY2VwdHMgYW55dGhpbmcsIGluY2x1ZGluZyBhIHRva2VuKTsgYG9iamVjdGAgKHN0cnVjdHVyYWwgaW5wdXQgaGVscGVyc1xuICogYXJlIGRlZmVycmVkIHRvIGEgZm9sbG93LXVwIGlzc3VlKSBzdGF5cyBgYW55YCB0b28uXG4gKlxuICogYGxpc3RgL2BzZXRgIGFuZCBgbWFwYCBkZWxlZ2F0ZSB0byBgbWFwTGlzdE9yU2V0UGFyYW1ldGVyVHlwZWAvXG4gKiBgbWFwTWFwUGFyYW1ldGVyVHlwZWAsIHdoaWNoIG1pcnJvciBgTGlzdEF0dHJpYnV0ZVR5cGVNb2RlbGAvXG4gKiBgU2V0QXR0cmlidXRlVHlwZU1vZGVsYC9gTWFwQXR0cmlidXRlVHlwZU1vZGVsLmlucHV0VHlwZURlZmluaXRpb25gXG4gKiBicmFuY2ggZm9yIGJyYW5jaCAoc2VlIGBhdHRyaWJ1dGUtdHlwZS1tb2RlbC50c2ApIC0gdGhlIHNhbWVcbiAqIHdob2xlLWNvbGxlY3Rpb24tdG9rZW4gY29udmVudGlvbnMgYWxyZWFkeSB1c2VkIGZvciByZXNvdXJjZSBpbnB1dHMuXG4gKi9cbmZ1bmN0aW9uIG1hcFBhcmFtZXRlclR5cGUodHlwZTogQXR0cmlidXRlVHlwZSk6IE1hcHBlZFBhcmFtZXRlclR5cGUge1xuICBpZiAodHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB7XG4gICAgICB0c1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkb2NzdHJpbmdUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiBmYWxzZSxcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IFwibnVtYmVyXCIsXG4gICAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IGZhbHNlLFxuICAgIH07XG4gIH1cbiAgaWYgKHR5cGUgPT09IFwiYm9vbFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGVcIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IFwiYm9vbGVhbiB8IElSZXNvbHZhYmxlXCIsXG4gICAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IHRydWUsXG4gICAgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJkeW5hbWljXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcImFueVwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogXCJhbnlcIixcbiAgICAgIGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeTogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodHlwZSkgJiYgKHR5cGVbMF0gPT09IFwibGlzdFwiIHx8IHR5cGVbMF0gPT09IFwic2V0XCIpKSB7XG4gICAgcmV0dXJuIG1hcExpc3RPclNldFBhcmFtZXRlclR5cGUodHlwZVswXSwgdHlwZVsxXSk7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSAmJiB0eXBlWzBdID09PSBcIm1hcFwiKSB7XG4gICAgcmV0dXJuIG1hcE1hcFBhcmFtZXRlclR5cGUodHlwZVsxXSk7XG4gIH1cblxuICAvLyBvYmplY3Q6IHN0cnVjdHVyYWwgaW5wdXQgaGVscGVycyBhcmUgZGVmZXJyZWQgdG8gYSBmb2xsb3ctdXAgaXNzdWUuXG4gIHJldHVybiB7XG4gICAgdHNUeXBlOiBcImFueVwiLFxuICAgIGRvY3N0cmluZ1R5cGU6IFwib2JqZWN0XCIsXG4gICAgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiB0cnVlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZFBhcmFtZXRlck1vZGVsKFxuICBwYXJhbWV0ZXI6IEZ1bmN0aW9uUGFyYW1ldGVyLFxuICBmYWxsYmFja05hbWU6IHN0cmluZyxcbik6IEludGVybmFsUGFyYW1ldGVyTW9kZWwge1xuICBjb25zdCB0ZXJyYWZvcm1OYW1lID0gcGFyYW1ldGVyLm5hbWUgPz8gZmFsbGJhY2tOYW1lO1xuICBjb25zdCB7IHRzVHlwZSwgZG9jc3RyaW5nVHlwZSwgZG9jc3RyaW5nTm90ZSwgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5IH0gPVxuICAgIG1hcFBhcmFtZXRlclR5cGUocGFyYW1ldGVyLnR5cGUpO1xuICByZXR1cm4ge1xuICAgIHRlcnJhZm9ybU5hbWUsXG4gICAgbmFtZTogc2FuaXRpemVQYXJhbWV0ZXJOYW1lKHRlcnJhZm9ybU5hbWUpLFxuICAgIHRzVHlwZSxcbiAgICBkb2NzdHJpbmdUeXBlLFxuICAgIGRvY3N0cmluZ05vdGUsXG4gICAgZGVzY3JpcHRpb246IHBhcmFtZXRlci5kZXNjcmlwdGlvbixcbiAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHksXG4gIH07XG59XG5cbi8qKlxuICogV2lkZW5zIGEgbWFwcGVkIHR5cGUncyBgdHNUeXBlYC9gZG9jc3RyaW5nVHlwZWAgdG8gYWxzbyBhY2NlcHQgYW5cbiAqIGV4cGxpY2l0IGBjZGt0bi5Ub2tlbi5udWxsVmFsdWUoKWAgaW4gdGhpcyBwb3NpdGlvbiAtIHVubGVzc1xuICogYGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeWAgc2F5cyBpdCBhbHJlYWR5IGRvZXMgKGUuZy4gYSBgYm9vbGAgcGFyYW1ldGVyXG4gKiBpcyBhbHJlYWR5IGBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGVgLCBzbyBudWxsYWJpbGl0eSBhZGRzIG5vdGhpbmcgdG9cbiAqIHRoZSB0eXBlIGl0c2VsZiwgb25seSB0byB0aGUgZG9jc3RyaW5nIG5vdGUgYXBwZW5kZWQgYnkgdGhlIGNhbGxlcikuXG4gKi9cbmZ1bmN0aW9uIHdpdGhOdWxsYWJsZVJlc29sdmFibGVVbmlvbihcbiAgbW9kZWw6IFBpY2s8XG4gICAgSW50ZXJuYWxQYXJhbWV0ZXJNb2RlbCxcbiAgICBcInRzVHlwZVwiIHwgXCJkb2NzdHJpbmdUeXBlXCIgfCBcImFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeVwiXG4gID4sXG4pOiB7IHRzVHlwZTogc3RyaW5nOyBkb2NzdHJpbmdUeXBlOiBzdHJpbmcgfSB7XG4gIGlmIChtb2RlbC5hY2NlcHRzUmVzb2x2YWJsZUFscmVhZHkpIHtcbiAgICByZXR1cm4geyB0c1R5cGU6IG1vZGVsLnRzVHlwZSwgZG9jc3RyaW5nVHlwZTogbW9kZWwuZG9jc3RyaW5nVHlwZSB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgdHNUeXBlOiBgJHttb2RlbC50c1R5cGV9IHwgY2RrdG4uSVJlc29sdmFibGVgLFxuICAgIGRvY3N0cmluZ1R5cGU6IGAke21vZGVsLmRvY3N0cmluZ1R5cGV9IHwgSVJlc29sdmFibGVgLFxuICB9O1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYGlzX251bGxhYmxlYCB0cmFpbGluZy1jb21wYXRpYmlsaXR5IHJ1bGVzIGFjcm9zcyBhIGZ1bmN0aW9uJ3NcbiAqIGZpeGVkIChub24tdmFyaWFkaWMpIHBhcmFtZXRlciBsaXN0LiBUaGlzIG5lZWRzIHRoZSB3aG9sZSBsaXN0IGluIHZpZXdcbiAqIChzZWUgYGJ1aWxkRnVuY3Rpb25Nb2RlbGApLCBzaW5jZSB3aGV0aGVyIGEgbnVsbGFibGUgcGFyYW1ldGVyIGNhbiBiZWNvbWVcbiAqIGpzaWktb3B0aW9uYWwgZGVwZW5kcyBvbiBldmVyeSBwYXJhbWV0ZXIgKmFmdGVyKiBpdCB0b286XG4gKlxuICogLSBBIG51bGxhYmxlIHBhcmFtZXRlciB3aGVyZSBpdCBhbmQgZXZlcnkgbGF0ZXIgZml4ZWQgcGFyYW1ldGVyIGFyZSBhbHNvXG4gKiAgIG51bGxhYmxlIGJlY29tZXMganNpaS1vcHRpb25hbCAoYG5hbWU/OiBUYCk6IG9taXR0aW5nIGl0IGluIFR5cGVTY3JpcHRcbiAqICAgbGVhdmVzIGB1bmRlZmluZWRgIGluIHRoZSBpbnZva2UgYXJncyBhcnJheSwgd2hpY2ggYEZ1bmN0aW9uQ2FsbGBcbiAqICAgYWxyZWFkeSByZW5kZXJzIGFzIHRoZSBUZXJyYWZvcm0gYG51bGxgIGtleXdvcmQuIEl0IGFkZGl0aW9uYWxseSBnYWluc1xuICogICB0aGUgYHwgY2RrdG4uSVJlc29sdmFibGVgIHVuaW9uIChzZWUgYHdpdGhOdWxsYWJsZVJlc29sdmFibGVVbmlvbmApLCBzb1xuICogICBhIGNhbGxlciB3aG8gZG9lcyBzdXBwbHkgdGhlIGFyZ3VtZW50IGNhbiBwYXNzXG4gKiAgIGBjZGt0bi5Ub2tlbi5udWxsVmFsdWUoKWAgZm9yIGFuIGV4cGxpY2l0IFRlcnJhZm9ybSBgbnVsbGAgd2l0aG91dFxuICogICBvbWl0dGluZyB0aGUgcGFyYW1ldGVyLlxuICogLSBBIG51bGxhYmxlIHBhcmFtZXRlciBmb2xsb3dlZCBieSBhIHJlcXVpcmVkIG9uZSBrZWVwcyBpdHMgcG9zaXRpb25cbiAqICAgKGpzaWkgY2FuJ3QgZXhwcmVzcyBcIm9wdGlvbmFsIGJ1dCBub3QgdHJhaWxpbmdcIiksIGFuZCBpbnN0ZWFkIGdhaW5zIHRoZVxuICogICBzYW1lIGB8IGNka3RuLklSZXNvbHZhYmxlYCB1bmlvbiBzbyBhIGNhbGxlciBjYW4gc3RpbGwgcGFzcyBhbiBleHBsaWNpdFxuICogICBgY2RrdG4uVG9rZW4ubnVsbFZhbHVlKClgIChhbiBgSVJlc29sdmFibGVgIHJlc29sdmluZyB0byBgbnVsbGAgLSBzZWVcbiAqICAgYFRva2VuLm51bGxWYWx1ZSgpYC9gVG9rZW4uYXNBbnkoKWApIGluIHRoYXQgZml4ZWQgcG9zaXRpb24gLSBrZWVwaW5nXG4gKiAgIHRoZSBwYXJhbWV0ZXIncyByZWFsIHR5cGUgcmF0aGVyIHRoYW4gZ2l2aW5nIHVwIGFsbCB0eXBlIHNhZmV0eSBieVxuICogICB3aWRlbmluZyBpdCB0byBgYW55YC5cbiAqXG4gKiBCb3RoIGNhc2VzIGRvY3VtZW50IHRoZSByZWFsIG1lY2hhbmlzbSBpbiB0aGUgZG9jc3RyaW5nIG5vdGUgcmF0aGVyIHRoYW5cbiAqIGltcGx5aW5nIHRoZSBwbGFpbiBUeXBlU2NyaXB0IGBudWxsYCBsaXRlcmFsIGlzIGFjY2VwdGVkOiB0aGUgdHJhaWxpbmdcbiAqIGNhc2UgY2FuIGFsc28ganVzdCBiZSBvbWl0dGVkLCB0aGUgbWlkLXBvc2l0aW9uIGNhc2UgY2FuJ3QgYmUgb21pdHRlZCBhdFxuICogYWxsIChqc2lpIGNhbid0IGV4cHJlc3MgXCJvcHRpb25hbCBidXQgbm90IHRyYWlsaW5nXCIpLlxuICovXG5mdW5jdGlvbiBhcHBseU51bGxhYmlsaXR5KFxuICBwYXJhbWV0ZXJzOiBGdW5jdGlvblBhcmFtZXRlcltdLFxuICBtb2RlbHM6IEludGVybmFsUGFyYW1ldGVyTW9kZWxbXSxcbik6IEludGVybmFsUGFyYW1ldGVyTW9kZWxbXSB7XG4gIGNvbnN0IHRyYWlsaW5nQ29tcGF0aWJsZSA9IG5ldyBBcnJheShwYXJhbWV0ZXJzLmxlbmd0aCkuZmlsbChmYWxzZSk7XG4gIGxldCBhbGxOdWxsYWJsZVNvRmFyID0gdHJ1ZTtcbiAgZm9yIChsZXQgaSA9IHBhcmFtZXRlcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBhbGxOdWxsYWJsZVNvRmFyID0gYWxsTnVsbGFibGVTb0ZhciAmJiBwYXJhbWV0ZXJzW2ldLmlzX251bGxhYmxlID09PSB0cnVlO1xuICAgIHRyYWlsaW5nQ29tcGF0aWJsZVtpXSA9IGFsbE51bGxhYmxlU29GYXI7XG4gIH1cblxuICByZXR1cm4gbW9kZWxzLm1hcCgobW9kZWwsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyc1tpbmRleF07XG4gICAgaWYgKCFwYXJhbWV0ZXIuaXNfbnVsbGFibGUpIHJldHVybiBtb2RlbDtcblxuICAgIGNvbnN0IHsgdHNUeXBlLCBkb2NzdHJpbmdUeXBlIH0gPSB3aXRoTnVsbGFibGVSZXNvbHZhYmxlVW5pb24obW9kZWwpO1xuICAgIGNvbnN0IG51bGxhYmlsaXR5Tm90ZSA9IHRyYWlsaW5nQ29tcGF0aWJsZVtpbmRleF1cbiAgICAgID8gXCJPbWl0IG9yIHBhc3MgY2RrdG4uVG9rZW4ubnVsbFZhbHVlKCkgdG8gcmVuZGVyIHRoZSBUZXJyYWZvcm0gbnVsbCBrZXl3b3JkLlwiXG4gICAgICA6IFwiUGFzcyBjZGt0bi5Ub2tlbi5udWxsVmFsdWUoKSBmb3IgYW4gZXhwbGljaXQgVGVycmFmb3JtIG51bGwuXCI7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubW9kZWwsXG4gICAgICAuLi4odHJhaWxpbmdDb21wYXRpYmxlW2luZGV4XSA/IHsgb3B0aW9uYWw6IHRydWUgfSA6IHt9KSxcbiAgICAgIHRzVHlwZSxcbiAgICAgIGRvY3N0cmluZ1R5cGUsXG4gICAgICBkb2NzdHJpbmdOb3RlOiBbbW9kZWwuZG9jc3RyaW5nTm90ZSwgbnVsbGFiaWxpdHlOb3RlXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKFwiIFwiKSxcbiAgICB9O1xuICB9KTtcbn1cblxuLyoqXG4gKiBNYXBzIGEgcHJvdmlkZXIgZnVuY3Rpb24ncyBkZWNsYXJlZCByZXR1cm4gdHlwZSB0byB0aGUganNpaS1zYWZlXG4gKiBUeXBlU2NyaXB0IHJldHVybiB0eXBlLCB0aGUgYEByZXR1cm5zYCBKU0RvYyB0eXBlLCBhbmQgdGhlIGV4cHJlc3Npb25cbiAqIHRoYXQgdW53cmFwcyB0aGUgYFRlcnJhZm9ybVByb3ZpZGVyRnVuY3Rpb24uaW52b2tlKC4uLilgIGBJUmVzb2x2YWJsZWBcbiAqIGludG8gaXQuXG4gKlxuICoganNpaSByZXR1cm4gcG9zaXRpb25zIGNhbid0IHVzZSB0aGUgYFQgfCBjZGt0bi5JUmVzb2x2YWJsZWAgdW5pb24gdGhhdFxuICogcGFyYW1ldGVycyBjYW4gKHNlZSBgbWFwUGFyYW1ldGVyVHlwZWApLCBzbyBldmVyeSBzaGFwZSB0aGF0IGNhbid0IGJlXG4gKiBsb3NzbGVzc2x5IHVud3JhcHBlZCB0aHJvdWdoIGFuIGBhc1h4eGAgVG9rZW4gaGVscGVyIGZhbGxzIGJhY2sgdG8gdGhlXG4gKiBwbGFpbiBgY2RrdG4uSVJlc29sdmFibGVgIHByb2R1Y2VkIGJ5IGBpbnZva2UoKWAgaXRzZWxmLCB1bndyYXBwZWQuXG4gKiBQcm92aWRlciBmdW5jdGlvbnMgZnJlcXVlbnRseSByZXR1cm4gb2JqZWN0cyAoZS5nLiBldmVyeSBmdW5jdGlvbiBpbiB0aGVcbiAqIGB0aW1lYCBwcm92aWRlciksIHNvIC0gdW5saWtlIGJ1aWx0LWluIGBGbi4qYCBmdW5jdGlvbnMgLSB0aGUgb2JqZWN0IGNhc2VcbiAqIGlzIGEgcHJpbWFyeSBwYXRoLCBub3QgYW4gZXJyb3I6IGl0IGlzIHRyZWF0ZWQgdGhlIHNhbWUgYXNcbiAqIGBkeW5hbWljYC9hIGBsaXN0YC9gc2V0YCBvZiBhbnl0aGluZyBvdGhlciB0aGFuIGBzdHJpbmdgL2BudW1iZXJgIChub1xuICogYGFzQW55TGlzdGAgVG9rZW4gaGVscGVyIGV4aXN0cyksIGFuZCByZXR1cm5lZCBhcyB0aGUgUkFXIGBpbnZva2UoKWBcbiAqIHJlc3VsdC4gYG1hcGAgcmV0dXJucywgdW5saWtlIHRob3NlLCBETyBoYXZlIGEgZnVsbCBzZXQgb2YgdHlwZWQgVG9rZW5cbiAqIGhlbHBlcnMgKGBhc1N0cmluZ01hcGAvYGFzTnVtYmVyTWFwYC9gYXNCb29sZWFuTWFwYC9gYXNBbnlNYXBgKSwgc28gZXZlcnlcbiAqIGBtYXBgIHNoYXBlIGdldHMgYW4gYWN0dWFsIHR5cGVkIHJlY29yZCByZXR1cm4gaW5zdGVhZCBvZiBmYWxsaW5nIGJhY2sgdG9cbiAqIGBjZGt0bi5JUmVzb2x2YWJsZWAuXG4gKlxuICogV2hlbmV2ZXIgdGhlIGRlY2xhcmVkIHJldHVybiB0eXBlIElTIGBjZGt0bi5JUmVzb2x2YWJsZWAgKG5vdCBgYW55YCk6XG4gKiB1bmxpa2UgYGhlbHBlcnMudHNgIGBhc0FueWAsIHRoaXMgbXVzdCBOT1QgZ28gdGhyb3VnaFxuICogYGNka3RuLlRva2VuLmFzU3RyaW5nKC4uLilgIC0gYFRva2VuLmFzU3RyaW5nKClgIHByb2R1Y2VzIGFuIGVuY29kZWRcbiAqIHN0cmluZyB0b2tlbiB0aGF0IGBUb2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKClgIGRvZXMgbm90IHJlY29nbml6ZSwgc29cbiAqIGdlbmVyYXRlZCBzdHJ1Y3Qgc2V0dGVycyAoZS5nLiBhbiBgT3V0cHV0UmVmZXJlbmNlYCBgaW50ZXJuYWxWYWx1ZWApIHRyZWF0XG4gKiBpdCBhcyBhIHBsYWluIG9iamVjdCB3aXRoIG5vIGtub3duIGtleXMgYW5kIHRoZSBhdHRyaWJ1dGUgc2lsZW50bHlcbiAqIHZhbmlzaGVzIGZyb20gc3ludGggb3V0cHV0LiBUaGUgcmF3IGBJUmVzb2x2YWJsZWAgZnJvbSBgaW52b2tlKClgIElTXG4gKiByZWNvZ25pemVkIGJ5IGBUb2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKClgIGFuZCByZXNvbHZlcyBjb3JyZWN0bHkuXG4gKiBEZWNsYXJpbmcgaXQgYXMgYGNka3RuLklSZXNvbHZhYmxlYCBpbnN0ZWFkIG9mIGBhbnlgIGFsc28gZ2l2ZXMgY2FsbGVyc1xuICogcmVhbCB0eXBlIHNhZmV0eTogYGFueWAgbGV0IGEgY2FsbGVyIHdyaXRlIGByZXN1bHQuaG91cnNgIG9uIGEgdG9rZW4gd2l0aFxuICogbm8gY29tcGlsZS10aW1lIGZlZWRiYWNrLCBzaWxlbnRseSBwcm9kdWNpbmcgYHVuZGVmaW5lZGAgYXQgcnVudGltZTtcbiAqIGBJUmVzb2x2YWJsZWAgaGFzIG5vIHN1Y2ggcHJvcGVydHkgYW5kIGZvcmNlcyB0aGUgY2FsbGVyIHRocm91Z2hcbiAqIGBjZGt0bi5Ub2tlbmAvdGhlIHByb3ZpZGVyJ3Mgc3RydWN0IHR5cGVzIGluc3RlYWQuIGBpbnZva2UoKWAgYWxyZWFkeVxuICogcmV0dXJucyBgSVJlc29sdmFibGVgLCBzbyBubyBjYXN0IGlzIG5lZWRlZCB0byByZXR1cm4gaXQgYXNcbiAqIGBjZGt0bi5JUmVzb2x2YWJsZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcFJldHVyblR5cGUocmV0dXJuVHlwZTogQXR0cmlidXRlVHlwZSk6IHtcbiAgdHNUeXBlOiBzdHJpbmc7XG4gIGRvY3N0cmluZ1R5cGU6IHN0cmluZztcbiAgZG9jc3RyaW5nTm90ZT86IHN0cmluZztcbiAgd3JhcFJldHVybjogKGludm9rZUV4cHJlc3Npb246IHN0cmluZykgPT4gc3RyaW5nO1xufSB7XG4gIGlmIChyZXR1cm5UeXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gYGNka3RuLlRva2VuLmFzU3RyaW5nKCR7ZXhwcn0pYCxcbiAgICB9O1xuICB9XG4gIGlmIChyZXR1cm5UeXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IFwibnVtYmVyXCIsXG4gICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gYGNka3RuLlRva2VuLmFzTnVtYmVyKCR7ZXhwcn0pYCxcbiAgICB9O1xuICB9XG4gIGlmIChyZXR1cm5UeXBlID09PSBcImJvb2xcIikge1xuICAgIC8vIEJvb2xlYW5zIGNhbid0IGJlIHJlcHJlc2VudGVkIGFzIHRva2VucyAoc2VlIGhlbHBlcnMudHMgYXNCb29sZWFuKTpcbiAgICAvLyByZXR1cm4gdGhlIElSZXNvbHZhYmxlIHByb2R1Y2VkIGJ5IGludm9rZSgpIHVud3JhcHBlZC4gVGhlIGRvY3N0cmluZ1xuICAgIC8vIHN0aWxsIGRvY3VtZW50cyB0aGUgcmVhbCBjb25jZXB0dWFsIHNoYXBlLlxuICAgIHJldHVybiB7XG4gICAgICB0c1R5cGU6IFwiY2RrdG4uSVJlc29sdmFibGVcIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IFwiYm9vbGVhbiB8IElSZXNvbHZhYmxlXCIsXG4gICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gZXhwcixcbiAgICB9O1xuICB9XG4gIGlmIChyZXR1cm5UeXBlID09PSBcImR5bmFtaWNcIikge1xuICAgIHJldHVybiB7XG4gICAgICB0c1R5cGU6IFwiY2RrdG4uSVJlc29sdmFibGVcIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IFwiYW55XCIsXG4gICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gZXhwcixcbiAgICB9O1xuICB9XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KHJldHVyblR5cGUpICYmXG4gICAgKHJldHVyblR5cGVbMF0gPT09IFwibGlzdFwiIHx8IHJldHVyblR5cGVbMF0gPT09IFwic2V0XCIpXG4gICkge1xuICAgIC8vIFNhbWUgZG9jdW1lbnRhdGlvbiBjb252ZW50aW9ucyBhcyBgbWFwTGlzdE9yU2V0UGFyYW1ldGVyVHlwZWA6IHRoZVxuICAgIC8vIG5vdGF0aW9uIChgQXJyYXk8Li4uPmAvYFNldDwuLi4+YCkgY2FycmllcyB0aGUgVGVycmFmb3JtIGNvbGxlY3Rpb25cbiAgICAvLyBzdHJ1Y3R1cmUgcmVjdXJzaXZlbHksIGFuZCBvbmx5IHNldHMgZ2V0IGEgcHJvc2Ugbm90ZS5cbiAgICBjb25zdCB3cmFwcGVyID0gcmV0dXJuVHlwZVswXSA9PT0gXCJzZXRcIiA/IFwiU2V0XCIgOiBcIkFycmF5XCI7XG4gICAgY29uc3QgZG9jc3RyaW5nTm90ZSA9XG4gICAgICByZXR1cm5UeXBlWzBdID09PSBcInNldFwiXG4gICAgICAgID8gXCJUZXJyYWZvcm0gc2V0OyBvcmRlcmluZyBpcyBub3QgZ3VhcmFudGVlZCBhbmQgZHVwbGljYXRlIHZhbHVlcyBhcmUgcmVtb3ZlZC5cIlxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBlbGVtZW50ID0gcmV0dXJuVHlwZVsxXTtcbiAgICBpZiAoZWxlbWVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHNUeXBlOiBcInN0cmluZ1tdXCIsXG4gICAgICAgIGRvY3N0cmluZ1R5cGU6IGAke3dyYXBwZXJ9PHN0cmluZz5gLFxuICAgICAgICBkb2NzdHJpbmdOb3RlLFxuICAgICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gYGNka3RuLlRva2VuLmFzTGlzdCgke2V4cHJ9KWAsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoZWxlbWVudCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHNUeXBlOiBcIm51bWJlcltdXCIsXG4gICAgICAgIGRvY3N0cmluZ1R5cGU6IGAke3dyYXBwZXJ9PG51bWJlcj5gLFxuICAgICAgICBkb2NzdHJpbmdOb3RlLFxuICAgICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gYGNka3RuLlRva2VuLmFzTnVtYmVyTGlzdCgke2V4cHJ9KWAsXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyBsaXN0L3NldCBvZiBhbnl0aGluZyBlbHNlOiB0aGVyZSBpcyBubyBgYXNBbnlMaXN0YCBUb2tlbiBoZWxwZXIgLVxuICAgIC8vIGZhbGwgYmFjayB0byB0aGUgcmF3IElSZXNvbHZhYmxlLCBzYW1lIHJlYXNvbmluZyBhcyBkeW5hbWljL29iamVjdFxuICAgIC8vIGJlbG93LCBidXQga2VlcCB0aGUgZG9jc3RyaW5nIGhvbmVzdCBhYm91dCB0aGUgcmVhbCBlbGVtZW50IHNoYXBlXG4gICAgLy8gKHJldXNpbmcgbWFwUGFyYW1ldGVyVHlwZSBwdXJlbHkgZm9yIGl0cyBkZXNjcmlwdGl2ZSBkb2NzdHJpbmdUeXBlIC1cbiAgICAvLyBpdHMgdHNUeXBlL2FjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeSBhcmUgaXJyZWxldmFudCBoZXJlKS5cbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcImNka3RuLklSZXNvbHZhYmxlXCIsXG4gICAgICBkb2NzdHJpbmdUeXBlOiBgJHt3cmFwcGVyfTwke21hcFBhcmFtZXRlclR5cGUoZWxlbWVudCkuZG9jc3RyaW5nVHlwZX0+YCxcbiAgICAgIGRvY3N0cmluZ05vdGUsXG4gICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gZXhwcixcbiAgICB9O1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHJldHVyblR5cGUpICYmIHJldHVyblR5cGVbMF0gPT09IFwibWFwXCIpIHtcbiAgICAvLyBVbmxpa2UgbGlzdC9zZXQgYW5kIG9iamVjdC9keW5hbWljLCBldmVyeSBgbWFwYCBzaGFwZSBoYXMgYSBtYXRjaGluZ1xuICAgIC8vIHR5cGVkIFRva2VuIGhlbHBlciAoc2VlIHRva2VuLnRzKSwgc28gaXQgZ2V0cyBhIHJlYWwgdHlwZWQgcmVjb3JkXG4gICAgLy8gcmV0dXJuIGluc3RlYWQgb2YgZmFsbGluZyBiYWNrIHRvIHRoZSByYXcgSVJlc29sdmFibGUuXG4gICAgY29uc3QgZWxlbWVudCA9IHJldHVyblR5cGVbMV07XG4gICAgaWYgKGVsZW1lbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRzVHlwZTogXCJ7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XCIsXG4gICAgICAgIGRvY3N0cmluZ1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVwiLFxuICAgICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gYGNka3RuLlRva2VuLmFzU3RyaW5nTWFwKCR7ZXhwcn0pYCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChlbGVtZW50ID09PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0c1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiBudW1iZXIgfVwiLFxuICAgICAgICBkb2NzdHJpbmdUeXBlOiBcInsgW2tleTogc3RyaW5nXTogbnVtYmVyIH1cIixcbiAgICAgICAgd3JhcFJldHVybjogKGV4cHIpID0+IGBjZGt0bi5Ub2tlbi5hc051bWJlck1hcCgke2V4cHJ9KWAsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoZWxlbWVudCA9PT0gXCJib29sXCIpIHtcbiAgICAgIC8vIFRva2VuLmFzQm9vbGVhbk1hcCdzIGRlY2xhcmVkIHJldHVybiB0eXBlIGlzIGB7IFtrZXk6IHN0cmluZ106XG4gICAgICAvLyBib29sZWFuIH1gIChzZWUgdG9rZW4udHMpIC0gdXNlZCB2ZXJiYXRpbSwgbm90IHVuaW9uZWQgd2l0aFxuICAgICAgLy8gSVJlc29sdmFibGU6IHRoZSBtYXAncyBpbmRpdmlkdWFsIGVudHJpZXMgYXJlIHBsYWluIGJvb2xlYW5zIG9uY2VcbiAgICAgIC8vIHVud3JhcHBlZCBieSB0aGUgaGVscGVyLlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHNUeXBlOiBcInsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9XCIsXG4gICAgICAgIGRvY3N0cmluZ1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiBib29sZWFuIH1cIixcbiAgICAgICAgd3JhcFJldHVybjogKGV4cHIpID0+IGBjZGt0bi5Ub2tlbi5hc0Jvb2xlYW5NYXAoJHtleHByfSlgLFxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gbWFwIG9mIGFueXRoaW5nIGVsc2UgKG9iamVjdC9keW5hbWljL25lc3RlZCBjb2xsZWN0aW9uKTogYXNBbnlNYXBcbiAgICAvLyBzdGlsbCBnaXZlcyBhIHR5cGVkIChpZiBsb29zZWx5LXR5cGVkKSByZWNvcmQgcmF0aGVyIHRoYW4gZmFsbGluZ1xuICAgIC8vIGJhY2sgdG8gdGhlIHJhdyBJUmVzb2x2YWJsZS5cbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcInsgW2tleTogc3RyaW5nXTogYW55IH1cIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiBhbnkgfVwiLFxuICAgICAgd3JhcFJldHVybjogKGV4cHIpID0+IGBjZGt0bi5Ub2tlbi5hc0FueU1hcCgke2V4cHJ9KWAsXG4gICAgfTtcbiAgfVxuICAvLyBvYmplY3Q6IG5vIHN0cnVjdHVyYWwgdHlwaW5nIGZvciBhcmJpdHJhcnkgcHJvdmlkZXIgZnVuY3Rpb24gcmVzdWx0cyAtXG4gIC8vIGRlY2xhcmVkIGFzIGBjZGt0bi5JUmVzb2x2YWJsZWAsIGFuZCByZXR1cm5lZCBhcyB0aGUgcmF3IGBJUmVzb2x2YWJsZWBcbiAgLy8gZnJvbSBpbnZva2UoKSAoTk9UIHdyYXBwZWQgaW4gYGNka3RuLlRva2VuLmFzU3RyaW5nKC4uLilgLCB3aGljaCB3b3VsZFxuICAvLyBtYWtlIHRoZSByZXN1bHQgdW5yZWNvZ25pemFibGUgdG8gYFRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoKWBcbiAgLy8gZG93bnN0cmVhbSAtIHNlZSB0aGUgbWFwUmV0dXJuVHlwZSBkb2NzdHJpbmcgYWJvdmUpLlxuICByZXR1cm4ge1xuICAgIHRzVHlwZTogXCJjZGt0bi5JUmVzb2x2YWJsZVwiLFxuICAgIGRvY3N0cmluZ1R5cGU6IFwib2JqZWN0XCIsXG4gICAgd3JhcFJldHVybjogKGV4cHIpID0+IGV4cHIsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRnVuY3Rpb25Nb2RlbChcbiAgdGVycmFmb3JtTmFtZTogc3RyaW5nLFxuICBzaWduYXR1cmU6IEZ1bmN0aW9uU2lnbmF0dXJlLFxuKTogUHJvdmlkZXJGdW5jdGlvbk1vZGVsIHtcbiAgY29uc3Qge1xuICAgIHRzVHlwZTogcmV0dXJuVHNUeXBlLFxuICAgIGRvY3N0cmluZ1R5cGU6IHJldHVybkRvY3N0cmluZ1R5cGUsXG4gICAgZG9jc3RyaW5nTm90ZTogcmV0dXJuRG9jc3RyaW5nTm90ZSxcbiAgICB3cmFwUmV0dXJuLFxuICB9ID0gbWFwUmV0dXJuVHlwZShzaWduYXR1cmUucmV0dXJuX3R5cGUpO1xuXG4gIGNvbnN0IHJhd1BhcmFtZXRlcnMgPSBzaWduYXR1cmUucGFyYW1ldGVycyA/PyBbXTtcbiAgY29uc3QgcGFyYW1ldGVycyA9IGFwcGx5TnVsbGFiaWxpdHkoXG4gICAgcmF3UGFyYW1ldGVycyxcbiAgICByYXdQYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyLCBpbmRleCkgPT5cbiAgICAgIGJ1aWxkUGFyYW1ldGVyTW9kZWwocGFyYW1ldGVyLCBgYXJnJHtpbmRleH1gKSxcbiAgICApLFxuICApO1xuXG4gIGxldCB2YXJpYWRpY1BhcmFtZXRlcjogSW50ZXJuYWxQYXJhbWV0ZXJNb2RlbCB8IHVuZGVmaW5lZDtcbiAgaWYgKHNpZ25hdHVyZS52YXJpYWRpY19wYXJhbWV0ZXIpIHtcbiAgICBjb25zdCBlbGVtZW50TW9kZWwgPSBidWlsZFBhcmFtZXRlck1vZGVsKFxuICAgICAgc2lnbmF0dXJlLnZhcmlhZGljX3BhcmFtZXRlcixcbiAgICAgIFwidmFsdWVzXCIsXG4gICAgKTtcbiAgICBpZiAoc2lnbmF0dXJlLnZhcmlhZGljX3BhcmFtZXRlci5pc19udWxsYWJsZSkge1xuICAgICAgLy8gQSBudWxsYWJsZSB2YXJpYWRpYyBwYXJhbWV0ZXI6IGpzaWkgY2FuJ3QgZXhwcmVzcyBcImVhY2ggaW5kaXZpZHVhbFxuICAgICAgLy8gYXJndW1lbnQgbWF5IGluZGVwZW5kZW50bHkgYmUgbnVsbFwiIG9uIHRoZSBnZW5lcmF0ZWQgYHZhbHVlczpcbiAgICAgIC8vIEFycmF5PFQ+YCBhcnJheSBwYXJhbWV0ZXIgKGl0J3MgYW4gb3JkaW5hcnkgYXJyYXkgcGFyYW1ldGVyLCBub3QgYVxuICAgICAgLy8gdHJ1ZSByZXN0L3NwcmVhZCBwYXJhbWV0ZXIgLSBvbmx5IHRoZSBpbnZva2UoKSBjYWxsIHNpdGUgc3ByZWFkc1xuICAgICAgLy8gaXQpLCBzbyBldmVyeSBlbGVtZW50J3MgdHlwZSBpbnN0ZWFkIHdpZGVucyB0byBhbHNvIGFjY2VwdCBhblxuICAgICAgLy8gZXhwbGljaXQgYGNka3RuLlRva2VuLm51bGxWYWx1ZSgpYCwgdGhlIHNhbWUgd2F5IGEgZml4ZWQgbnVsbGFibGVcbiAgICAgIC8vIHBhcmFtZXRlciBkb2VzIChzZWUgYHdpdGhOdWxsYWJsZVJlc29sdmFibGVVbmlvbmApOyB0aGUgZG9jc3RyaW5nXG4gICAgICAvLyBrZWVwcyB0aGUgaG9uZXN0IHBlci1lbGVtZW50IHR5cGUgcGx1cyB0aGF0IGd1aWRhbmNlIGluIGl0cyBub3RlLlxuICAgICAgY29uc3QgeyB0c1R5cGUsIGRvY3N0cmluZ1R5cGUgfSA9XG4gICAgICAgIHdpdGhOdWxsYWJsZVJlc29sdmFibGVVbmlvbihlbGVtZW50TW9kZWwpO1xuICAgICAgdmFyaWFkaWNQYXJhbWV0ZXIgPSB7XG4gICAgICAgIC4uLmVsZW1lbnRNb2RlbCxcbiAgICAgICAgdHNUeXBlLFxuICAgICAgICBkb2NzdHJpbmdUeXBlOiBgQXJyYXk8JHtkb2NzdHJpbmdUeXBlfT5gLFxuICAgICAgICBkb2NzdHJpbmdOb3RlOiBbXG4gICAgICAgICAgZWxlbWVudE1vZGVsLmRvY3N0cmluZ05vdGUsXG4gICAgICAgICAgXCJQYXNzIGNka3RuLlRva2VuLm51bGxWYWx1ZSgpIGZvciBhbiBleHBsaWNpdCBUZXJyYWZvcm0gbnVsbC5cIixcbiAgICAgICAgXVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAuam9pbihcIiBcIiksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOb24tbnVsbGFibGU6IHRoZSBkb2NzdHJpbmcgd3JhcHMgdGhlIGVsZW1lbnQncyBkb2NzdHJpbmcgdHlwZSBpblxuICAgICAgLy8gYEFycmF5PC4uLj5gIGhlcmUgKHJhdGhlciB0aGFuIGluIHRoZSBlbWl0dGVyKSwgc28gZXZlcnkgcGFyYW1ldGVyXG4gICAgICAvLyAtIGZpeGVkIG9yIHZhcmlhZGljIC0gY2FuIHNoYXJlIG9uZSBgQHBhcmFtIHtkb2NzdHJpbmdUeXBlfWBcbiAgICAgIC8vIGVtaXNzaW9uIHBhdGguXG4gICAgICB2YXJpYWRpY1BhcmFtZXRlciA9IHtcbiAgICAgICAgLi4uZWxlbWVudE1vZGVsLFxuICAgICAgICBkb2NzdHJpbmdUeXBlOiBgQXJyYXk8JHtlbGVtZW50TW9kZWwuZG9jc3RyaW5nVHlwZX0+YCxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0ZXJyYWZvcm1OYW1lLFxuICAgIG1ldGhvZE5hbWU6IHNhbml0aXplTWV0aG9kTmFtZSh0ZXJyYWZvcm1OYW1lKSxcbiAgICBkZXNjcmlwdGlvbjogc2lnbmF0dXJlLmRlc2NyaXB0aW9uLFxuICAgIHN1bW1hcnk6IHNpZ25hdHVyZS5zdW1tYXJ5LFxuICAgIGRlcHJlY2F0aW9uTWVzc2FnZTogc2lnbmF0dXJlLmRlcHJlY2F0aW9uX21lc3NhZ2UsXG4gICAgcmV0dXJuVHNUeXBlLFxuICAgIHJldHVybkRvY3N0cmluZ1R5cGUsXG4gICAgcmV0dXJuRG9jc3RyaW5nTm90ZSxcbiAgICB3cmFwUmV0dXJuLFxuICAgIHBhcmFtZXRlcnMsXG4gICAgdmFyaWFkaWNQYXJhbWV0ZXIsXG4gIH07XG59XG5cbi8qKlxuICogVGhyb3dzIGlmIHR3byBmdW5jdGlvbnMgaW4gdGhlIHNhbWUgcHJvdmlkZXIgc2FuaXRpemUgdG8gdGhlIHNhbWVcbiAqIGdlbmVyYXRlZCBtZXRob2QgbmFtZS4gVGVycmFmb3JtIGZ1bmN0aW9uIG5hbWVzIGFyZSB1bmlxdWUsIGJ1dFxuICogYHNhbml0aXplTWV0aG9kTmFtZWAgKGNhbWVsQ2FzaW5nLCBgbGVuZ3RoYCAtPiBgbGVuZ3RoT2ZgKSBpcyBub3RcbiAqIG5lY2Vzc2FyaWx5IGluamVjdGl2ZSwgc28gYSByZWFsIC0gaWYgdW5saWtlbHkgLSBwcm92aWRlciBzY2hlbWEgY291bGRcbiAqIHN0aWxsIHByb2R1Y2UgYSBkdXBsaWNhdGUgbWV0aG9kLiBHZW5lcmF0aW9uIGlzIGFib3J0ZWQgcmF0aGVyIHRoYW5cbiAqIHNpbGVudGx5IGVtaXR0aW5nIG9uZSBtZXRob2QgdGhhdCBzaGFkb3dzIHRoZSBvdGhlci5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9NZXRob2ROYW1lQ29sbGlzaW9ucyhcbiAgcHJvdmlkZXJOYW1lOiBzdHJpbmcsXG4gIGZ1bmN0aW9uczogUHJvdmlkZXJGdW5jdGlvbk1vZGVsW10sXG4pOiB2b2lkIHtcbiAgY29uc3Qgc2VlbkJ5ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTsgLy8gbWV0aG9kTmFtZSAtPiB0ZXJyYWZvcm1OYW1lXG5cbiAgZm9yIChjb25zdCBmbiBvZiBmdW5jdGlvbnMpIHtcbiAgICBjb25zdCBleGlzdGluZ1RlcnJhZm9ybU5hbWUgPSBzZWVuQnkuZ2V0KGZuLm1ldGhvZE5hbWUpO1xuICAgIGlmIChleGlzdGluZ1RlcnJhZm9ybU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUHJvdmlkZXIgXCIke3Byb3ZpZGVyTmFtZX1cIiBkZWNsYXJlcyB0d28gcHJvdmlkZXItZGVmaW5lZCBmdW5jdGlvbnMsIGAgK1xuICAgICAgICAgIGBcIiR7ZXhpc3RpbmdUZXJyYWZvcm1OYW1lfVwiIGFuZCBcIiR7Zm4udGVycmFmb3JtTmFtZX1cIiwgdGhhdCBib3RoIGAgK1xuICAgICAgICAgIGBzYW5pdGl6ZSB0byB0aGUgZ2VuZXJhdGVkIG1ldGhvZCBuYW1lIFwiJHtmbi5tZXRob2ROYW1lfVwiLiBgICtcbiAgICAgICAgICBgR2VuZXJhdGlvbiBhYm9ydGVkIHRvIGF2b2lkIHNpbGVudGx5IG92ZXJ3cml0aW5nIG9uZSBtZXRob2Qgd2l0aCBgICtcbiAgICAgICAgICBgdGhlIG90aGVyIC0gcGxlYXNlIHJlcG9ydCB0aGlzIGFzIGFuIGlzc3VlLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBzZWVuQnkuc2V0KGZuLm1ldGhvZE5hbWUsIGZuLnRlcnJhZm9ybU5hbWUpO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3dzIGlmIGEgZnVuY3Rpb24ncyBzYW5pdGl6ZWQgYG1ldGhvZE5hbWVgIGxhbmRzIG9uIGEgbWVtYmVyIG5hbWVcbiAqIGBQcm92aWRlckZ1bmN0aW9uc0VtaXR0ZXJgIGFscmVhZHkgcHV0cyBvbiBldmVyeSB3cmFwcGVyIGNsYXNzIChzZWVcbiAqIGBSRVNFUlZFRF9XUkFQUEVSX01FTUJFUl9OQU1FU2ApLiBVbmxpa2UgYGFzc2VydE5vTWV0aG9kTmFtZUNvbGxpc2lvbnNgLFxuICogd2hpY2ggb25seSBjYXRjaGVzIHR3byAqZnVuY3Rpb25zKiBjb2xsaWRpbmcgd2l0aCBlYWNoIG90aGVyLCB0aGlzIGNhdGNoZXNcbiAqIGEgc2luZ2xlIGZ1bmN0aW9uIGNvbGxpZGluZyB3aXRoIHRoZSB3cmFwcGVyIGNsYXNzIGl0c2VsZiAtIGUuZy4gYVxuICogVGVycmFmb3JtIGZ1bmN0aW9uIGxpdGVyYWxseSBuYW1lZCBcImNvbnN0cnVjdG9yXCIsIG9yIFwicHJvdmlkZXJfbG9jYWxfbmFtZVwiXG4gKiBjYW1lbENhc2luZyB0byBcInByb3ZpZGVyTG9jYWxOYW1lXCIuXG4gKlxuICogVGhpcyBpbnRlbnRpb25hbGx5IGRvZXMgTk9UIGFsc28gY2hlY2sgc2FuaXRpemVkICpwYXJhbWV0ZXIqIG5hbWVzIGFnYWluc3RcbiAqIFwicHJvdmlkZXJMb2NhbE5hbWVcIjogcGFyYW1ldGVycyBhcmUgZGVjbGFyZWQgaW4gdGhlIGdlbmVyYXRlZCBtZXRob2QncyBvd25cbiAqIHNjb3BlLCBub3QgdGhlIGNsYXNzJ3MsIHNvIGEgcGFyYW1ldGVyIG5hbWVkIGBwcm92aWRlckxvY2FsTmFtZWAgc2hhZG93c1xuICogdGhlIGNsYXNzIGZpZWxkIHdpdGhpbiB0aGF0IG1ldGhvZCBib2R5IHdpdGhvdXQgY29sbGlkaW5nIHdpdGggaXQgKHZhbGlkLFxuICogaWYgY29uZnVzaW5nLCBUeXBlU2NyaXB0KSAtIHRoZXJlIGlzIG5vdGhpbmcgdG8gYWJvcnQgZ2VuZXJhdGlvbiBvdmVyLlxuICovXG5mdW5jdGlvbiBhc3NlcnROb1Jlc2VydmVkV3JhcHBlck1lbWJlckNvbGxpc2lvbnMoXG4gIHByb3ZpZGVyTmFtZTogc3RyaW5nLFxuICBmdW5jdGlvbnM6IFByb3ZpZGVyRnVuY3Rpb25Nb2RlbFtdLFxuKTogdm9pZCB7XG4gIGZvciAoY29uc3QgZm4gb2YgZnVuY3Rpb25zKSB7XG4gICAgaWYgKFJFU0VSVkVEX1dSQVBQRVJfTUVNQkVSX05BTUVTLmhhcyhmbi5tZXRob2ROYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUHJvdmlkZXIgXCIke3Byb3ZpZGVyTmFtZX1cIiBkZWNsYXJlcyBhIHByb3ZpZGVyLWRlZmluZWQgZnVuY3Rpb24gYCArXG4gICAgICAgICAgYFwiJHtmbi50ZXJyYWZvcm1OYW1lfVwiIHRoYXQgc2FuaXRpemVzIHRvIHRoZSBnZW5lcmF0ZWQgbWV0aG9kIG5hbWUgYCArXG4gICAgICAgICAgYFwiJHtmbi5tZXRob2ROYW1lfVwiLCB3aGljaCBjb2xsaWRlcyB3aXRoIGEgbWVtYmVyIHRoYXQgYCArXG4gICAgICAgICAgYFByb3ZpZGVyRnVuY3Rpb25zRW1pdHRlciBhbHJlYWR5IHB1dHMgb24gZXZlcnkgYCArXG4gICAgICAgICAgYFwiPFByb3ZpZGVyPlByb3ZpZGVyRnVuY3Rpb25zXCIgd3JhcHBlciBjbGFzcyAodGhlIGNsYXNzIGAgK1xuICAgICAgICAgIGBjb25zdHJ1Y3Rvciwgb3IgaXRzIFwicHJvdmlkZXJMb2NhbE5hbWVcIiBmaWVsZCkuIEdlbmVyYXRpb24gYCArXG4gICAgICAgICAgYGFib3J0ZWQgdG8gYXZvaWQgZW1pdHRpbmcgaW52YWxpZCBUeXBlU2NyaXB0IG9yIHNpbGVudGx5IGAgK1xuICAgICAgICAgIGBzaGFkb3dpbmcgdGhhdCBtZW1iZXIgLSBwbGVhc2UgcmVwb3J0IHRoaXMgYXMgYW4gaXNzdWUuYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhyb3dzIGlmIHR3byBwYXJhbWV0ZXJzIG9mIHRoZSBzYW1lIGZ1bmN0aW9uIChpbmNsdWRpbmcgdGhlIHZhcmlhZGljXG4gKiBwYXJhbWV0ZXIpIHNhbml0aXplIHRvIHRoZSBzYW1lIGdlbmVyYXRlZCBwYXJhbWV0ZXIgbmFtZSwgZm9yIHRoZSBzYW1lXG4gKiByZWFzb24gYXMgYGFzc2VydE5vTWV0aG9kTmFtZUNvbGxpc2lvbnNgIGFib3ZlIGJ1dCBhdCB0aGUgcGFyYW1ldGVyIGxldmVsLlxuICovXG5mdW5jdGlvbiBhc3NlcnROb1BhcmFtZXRlck5hbWVDb2xsaXNpb25zKFxuICBwcm92aWRlck5hbWU6IHN0cmluZyxcbiAgZm46IFByb3ZpZGVyRnVuY3Rpb25Nb2RlbCxcbik6IHZvaWQge1xuICBjb25zdCBzZWVuQnkgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpOyAvLyBzYW5pdGl6ZWQgbmFtZSAtPiB0ZXJyYWZvcm1OYW1lXG4gIGNvbnN0IGFsbFBhcmFtZXRlcnMgPSBmbi52YXJpYWRpY1BhcmFtZXRlclxuICAgID8gWy4uLmZuLnBhcmFtZXRlcnMsIGZuLnZhcmlhZGljUGFyYW1ldGVyXVxuICAgIDogZm4ucGFyYW1ldGVycztcblxuICBmb3IgKGNvbnN0IHBhcmFtIG9mIGFsbFBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBleGlzdGluZ1RlcnJhZm9ybU5hbWUgPSBzZWVuQnkuZ2V0KHBhcmFtLm5hbWUpO1xuICAgIGlmIChleGlzdGluZ1RlcnJhZm9ybU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUHJvdmlkZXIgXCIke3Byb3ZpZGVyTmFtZX1cIiBmdW5jdGlvbiBcIiR7Zm4udGVycmFmb3JtTmFtZX1cIiBkZWNsYXJlcyBgICtcbiAgICAgICAgICBgdHdvIHBhcmFtZXRlcnMsIFwiJHtleGlzdGluZ1RlcnJhZm9ybU5hbWV9XCIgYW5kIGAgK1xuICAgICAgICAgIGBcIiR7cGFyYW0udGVycmFmb3JtTmFtZX1cIiwgdGhhdCBib3RoIHNhbml0aXplIHRvIHRoZSBnZW5lcmF0ZWQgYCArXG4gICAgICAgICAgYHBhcmFtZXRlciBuYW1lIFwiJHtwYXJhbS5uYW1lfVwiLiBHZW5lcmF0aW9uIGFib3J0ZWQgdG8gYXZvaWQgYCArXG4gICAgICAgICAgYHNpbGVudGx5IGRyb3BwaW5nIG9uZSBwYXJhbWV0ZXIgLSBwbGVhc2UgcmVwb3J0IHRoaXMgYXMgYW4gaXNzdWUuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHNlZW5CeS5zZXQocGFyYW0ubmFtZSwgcGFyYW0udGVycmFmb3JtTmFtZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd3MgaWYgdGhlIHByb3ZpZGVyJ3Mgb3duIGNvbmZpZyBzY2hlbWEgZGVjbGFyZXMgYW4gYXR0cmlidXRlIHdob3NlXG4gKiBnZW5lcmF0ZWQgcHJvcGVydHkgbmFtZSAoc2VlIGBBdHRyaWJ1dGVNb2RlbC5uYW1lYCAvXG4gKiBgZXNjYXBlQXR0cmlidXRlTmFtZWApIGlzIGV4YWN0bHkgXCJmdW5jdGlvbnNcIiwgd2hpbGUgdGhlIHByb3ZpZGVyIGFsc29cbiAqIGRlY2xhcmVzIHByb3ZpZGVyLWRlZmluZWQgZnVuY3Rpb25zLiBUaGF0IGNvbWJpbmF0aW9uIHdvdWxkIGNvbGxpZGUgd2l0aFxuICogdGhlIG1lbW9pemVkIGBmdW5jdGlvbnNgIGdldHRlciBgUmVzb3VyY2VFbWl0dGVyYCBlbWl0cyBvbiB0aGUgcHJvdmlkZXJcbiAqIGNsYXNzIChzZWUgYHJlc291cmNlLWVtaXR0ZXIudHNgJ3MgYGVtaXRGdW5jdGlvbnNHZXR0ZXJgKSAtIG9uZSB3b3VsZFxuICogc2lsZW50bHkgc2hhZG93IHRoZSBvdGhlci4gU2FtZSBsb3VkLWZhaWx1cmUgY29udmVudGlvbiBhc1xuICogYGFzc2VydE5vTWV0aG9kTmFtZUNvbGxpc2lvbnNgL2Bhc3NlcnROb1BhcmFtZXRlck5hbWVDb2xsaXNpb25zYCBhYm92ZTpcbiAqIGdlbmVyYXRpb24gaXMgYWJvcnRlZCByYXRoZXIgdGhhbiBzaWxlbnRseSBwaWNraW5nIGEgd2lubmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0Tm9GdW5jdGlvbnNHZXR0ZXJDb2xsaXNpb24oXG4gIHByb3ZpZGVyTmFtZTogc3RyaW5nLFxuICBhdHRyaWJ1dGVOYW1lczogc3RyaW5nW10sXG4pOiB2b2lkIHtcbiAgaWYgKGF0dHJpYnV0ZU5hbWVzLmluY2x1ZGVzKFwiZnVuY3Rpb25zXCIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFByb3ZpZGVyIFwiJHtwcm92aWRlck5hbWV9XCIgZGVjbGFyZXMgcHJvdmlkZXItZGVmaW5lZCBmdW5jdGlvbnMgYW5kIGl0cyBgICtcbiAgICAgICAgYG93biBjb25maWcgc2NoZW1hIGFsc28gaGFzIGFuIGF0dHJpYnV0ZSB0aGF0IGdlbmVyYXRlcyB0aGUgcHJvcGVydHkgYCArXG4gICAgICAgIGBuYW1lIFwiZnVuY3Rpb25zXCIgb24gdGhlIHByb3ZpZGVyIGNsYXNzLiBUaGlzIGNvbGxpZGVzIHdpdGggdGhlIGAgK1xuICAgICAgICBgZ2VuZXJhdGVkIFwiZnVuY3Rpb25zXCIgZ2V0dGVyIHVzZWQgdG8gaW52b2tlIHByb3ZpZGVyLWRlZmluZWQgYCArXG4gICAgICAgIGBmdW5jdGlvbnMuIEdlbmVyYXRpb24gYWJvcnRlZCB0byBhdm9pZCBzaWxlbnRseSBzaGFkb3dpbmcgb25lIHdpdGggYCArXG4gICAgICAgIGB0aGUgb3RoZXIgLSBwbGVhc2UgcmVwb3J0IHRoaXMgYXMgYW4gaXNzdWUuYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBtb2RlbCBmb3IgYSBwcm92aWRlcidzIGBwcm92aWRlci1mdW5jdGlvbnMvaW5kZXgudHNgIGZpbGUgZnJvbVxuICogaXRzIHByb3ZpZGVyIHNjaGVtYSBgZnVuY3Rpb25zYCBtYXAuIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiB0aGUgcHJvdmlkZXJcbiAqIGRlY2xhcmVzIG5vIGZ1bmN0aW9ucyAtIGNhbGxlcnMgc2hvdWxkIHNraXAgZW1pdHRpbmcgdGhlIGZpbGUgZW50aXJlbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByb3ZpZGVyRnVuY3Rpb25zTW9kZWwoXG4gIHByb3ZpZGVyTmFtZTogc3RyaW5nLFxuICBmdW5jdGlvbnM6IHsgW25hbWU6IHN0cmluZ106IEZ1bmN0aW9uU2lnbmF0dXJlIH0gfCB1bmRlZmluZWQsXG4pOiBQcm92aWRlckZ1bmN0aW9uc01vZGVsIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKGZ1bmN0aW9ucyA/PyB7fSk7XG4gIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBtYXBwZWRGdW5jdGlvbnMgPSBlbnRyaWVzXG4gICAgLnNvcnQoKFthXSwgW2JdKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpXG4gICAgLm1hcCgoW25hbWUsIHNpZ25hdHVyZV0pID0+IGJ1aWxkRnVuY3Rpb25Nb2RlbChuYW1lLCBzaWduYXR1cmUpKTtcblxuICBhc3NlcnROb01ldGhvZE5hbWVDb2xsaXNpb25zKHByb3ZpZGVyTmFtZSwgbWFwcGVkRnVuY3Rpb25zKTtcbiAgYXNzZXJ0Tm9SZXNlcnZlZFdyYXBwZXJNZW1iZXJDb2xsaXNpb25zKHByb3ZpZGVyTmFtZSwgbWFwcGVkRnVuY3Rpb25zKTtcbiAgZm9yIChjb25zdCBmbiBvZiBtYXBwZWRGdW5jdGlvbnMpIHtcbiAgICBhc3NlcnROb1BhcmFtZXRlck5hbWVDb2xsaXNpb25zKHByb3ZpZGVyTmFtZSwgZm4pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlck5hbWUsXG4gICAgY2xhc3NOYW1lOiBgJHt0b1Bhc2NhbENhc2UocHJvdmlkZXJOYW1lKX1Qcm92aWRlckZ1bmN0aW9uc2AsXG4gICAgZnVuY3Rpb25zOiBtYXBwZWRGdW5jdGlvbnMsXG4gIH07XG59XG4iXX0=
|
|
666
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItZnVuY3Rpb24tbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2V0L2dlbmVyYXRvci9tb2RlbHMvcHJvdmlkZXItZnVuY3Rpb24tbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE0ekJBLDRFQWNDO0FBT0Qsa0VBc0JDO0FBdjJCRCwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLHlDQUFzRDtBQXlHdEQsNkVBQTZFO0FBQzdFLHdFQUF3RTtBQUN4RSw0RUFBNEU7QUFDNUUsNkVBQTZFO0FBQzdFLHVFQUF1RTtBQUN2RSw2RUFBNkU7QUFDN0UsNkNBQTZDO0FBQzdDLE1BQU0sd0JBQXdCLEdBQStCO0lBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsOEJBQThCO0lBQ3ZELE1BQU0sRUFBRSxLQUFLLEVBQUUsc0JBQXNCO0NBQ3RDLENBQUM7QUFFRixTQUFTLHFCQUFxQixDQUFDLElBQVk7O0lBQ3pDLE1BQU0sVUFBVSxHQUFHLElBQUEsdUJBQVcsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxPQUFPLE1BQUEsd0JBQXdCLENBQUMsVUFBVSxDQUFDLG1DQUFJLFVBQVUsQ0FBQztBQUM1RCxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxJQUFZO0lBQ3RDLElBQUksSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLFVBQVUsQ0FBQyxDQUFDLHFDQUFxQztJQUMvRSxPQUFPLElBQUEsdUJBQVcsRUFBQyxJQUFJLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsd0ZBQXdGO0FBQ3hGLDhFQUE4RTtBQUM5RSxxREFBcUQ7QUFDckQsNkVBQTZFO0FBQzdFLDJFQUEyRTtBQUMzRSw0RUFBNEU7QUFDNUUsNkJBQTZCO0FBQzdCLDRFQUE0RTtBQUM1RSwwRUFBMEU7QUFDMUUsNEVBQTRFO0FBQzVFLDBDQUEwQztBQUMxQyw4RUFBOEU7QUFDOUUscUJBQXFCO0FBQ3JCLE1BQU0sNkJBQTZCLEdBQUcs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Q2hELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFM0MsTUFBTSxlQUFlLEdBQUcsT0FBTztTQUM1QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBRW5FLDRCQUE0QixDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM1RCx1Q0FBdUMsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDdkUsS0FBSyxNQUFNLEVBQUUsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNqQywrQkFBK0IsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELE9BQU87UUFDTCxZQUFZO1FBQ1osU0FBUyxFQUFFLEdBQUcsSUFBQSx3QkFBWSxFQUFDLFlBQVksQ0FBQyxtQkFBbUI7UUFDM0QsU0FBUyxFQUFFLGVBQWU7S0FDM0IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHsgdG9DYW1lbENhc2UsIHRvUGFzY2FsQ2FzZSB9IGZyb20gXCJjb2RlbWFrZXJcIjtcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZVR5cGUsXG4gIEZ1bmN0aW9uUGFyYW1ldGVyLFxuICBGdW5jdGlvblNpZ25hdHVyZSxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5cbi8qKlxuICogQSBwcm92aWRlci1kZWZpbmVkIGZ1bmN0aW9uIHBhcmFtZXRlciAocG9zaXRpb25hbCBvciB0aGUgdHJhaWxpbmdcbiAqIHZhcmlhZGljIG9uZSksIG1hcHBlZCB0byB0aGUganNpaS1zYWZlIFR5cGVTY3JpcHQgdHlwZSB1c2VkIGluIHRoZVxuICogZ2VuZXJhdGVkIG1ldGhvZCBzaWduYXR1cmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvdmlkZXJGdW5jdGlvblBhcmFtZXRlck1vZGVsIHtcbiAgcmVhZG9ubHkgdGVycmFmb3JtTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRzVHlwZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEpTRG9jIHR5cGUgZXhwcmVzc2lvbiBlbWl0dGVkIGluc2lkZSB0aGUgYEBwYXJhbSB7Li4ufWAgYnJhY2VzLlxuICAgKiBBIHB1cmUgdHlwZSBleHByZXNzaW9uIG9ubHkgLSBwcm9zZSAoVGVycmFmb3JtIGxpc3Qvc2V0IHNlbWFudGljcyxcbiAgICogYGNka3RuLlRva2VuLm51bGxWYWx1ZSgpYCBndWlkYW5jZSkgYmVsb25ncyBpbiBgZG9jc3RyaW5nTm90ZWAuXG4gICAqL1xuICByZWFkb25seSBkb2NzdHJpbmdUeXBlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQcm9zZSBhcHBlbmRlZCBhZnRlciB0aGUgcGFyYW1ldGVyIG5hbWUgKGFuZCBgZGVzY3JpcHRpb25gLCBpZiBhbnkpIGluXG4gICAqIHRoZSBlbWl0dGVkIGBAcGFyYW1gIGxpbmUgLSBlLmcuIHNldC1vcmRlcmluZyBzZW1hbnRpY3Mgb3IgaG93IHRvIHBhc3NcbiAgICogYW4gZXhwbGljaXQgVGVycmFmb3JtIGBudWxsYC4gT2ZmaWNpYWwgSlNEb2MgcGxhY2VzIG9ubHkgdGhlIHR5cGVcbiAgICogZXhwcmVzc2lvbiBpbnNpZGUgdGhlIGJyYWNlcywgc28gdGhpcyBtdXN0IG5ldmVyIGJlIGZvbGRlZCBpbnRvXG4gICAqIGBkb2NzdHJpbmdUeXBlYC5cbiAgICovXG4gIHJlYWRvbmx5IGRvY3N0cmluZ05vdGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogVHJ1ZSB3aGVuIHRoaXMgKGZpeGVkLCBub24tdmFyaWFkaWMpIHBhcmFtZXRlciBpcyBlbWl0dGVkIGFzIGFcbiAgICoganNpaS1vcHRpb25hbCBUeXBlU2NyaXB0IHBhcmFtZXRlciAoYG5hbWU/OiBUYCkgLSBzZWUgdGhlXG4gICAqIGlzX251bGxhYmxlL3RyYWlsaW5nLWNvbXBhdGliaWxpdHkgaGFuZGxpbmcgaW4gYGFwcGx5TnVsbGFiaWxpdHlgLlxuICAgKiBOZXZlciBzZXQgb24gdGhlIHZhcmlhZGljIHBhcmFtZXRlcjogYW4gYXJyYXkgcGFyYW1ldGVyIGNhbid0IGJlIGA/YC5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbmFsPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBgUHJvdmlkZXJGdW5jdGlvblBhcmFtZXRlck1vZGVsYCBwbHVzIHRoZSBvbmUgYml0IG9mIGluZm9ybWF0aW9uIHRoYXQnc1xuICogb25seSBuZWVkZWQgd2hpbGUgYnVpbGRpbmcgdGhlIG1vZGVsIChzZWUgYG1hcFBhcmFtZXRlclR5cGVgL1xuICogYGFwcGx5TnVsbGFiaWxpdHlgKSwgbmV2ZXIgYnkgdGhlIGVtaXR0ZXI6IHdoZXRoZXIgYHRzVHlwZWAgYWxyZWFkeVxuICogYWNjZXB0cyBhbiBhcmJpdHJhcnkgYGNka3RuLklSZXNvbHZhYmxlYCBpbiB0aGlzIHBvc2l0aW9uIChhIGJhcmVcbiAqIGJvb2xlYW4vY29sbGVjdGlvbi1vZi1ib29sZWFuIHRva2VuLCBgYW55YCwgb3IgYW4gZXhwbGljaXRcbiAqIGB8IGNka3RuLklSZXNvbHZhYmxlYCB1bmlvbiBhbHJlYWR5IHByZXNlbnQpLiBOdWxsYWJpbGl0eSBoYW5kbGluZyB1c2VzXG4gKiB0aGlzIHRvIGRlY2lkZSB3aGV0aGVyIGl0IG5lZWRzIHRvIGFwcGVuZCBhbm90aGVyIGB8IGNka3RuLklSZXNvbHZhYmxlYFxuICogc28gYSBjYWxsZXIgY2FuIHBhc3MgYGNka3RuLlRva2VuLm51bGxWYWx1ZSgpYCAtIHdpdGhvdXQgcmVzb3J0aW5nIHRvXG4gKiByZS1kZXJpdmluZyB0aGF0IGFuc3dlciB3aXRoIGEgc3RyaW5nIHNlYXJjaCBvdmVyIGB0c1R5cGVgLlxuICovXG5pbnRlcmZhY2UgSW50ZXJuYWxQYXJhbWV0ZXJNb2RlbCBleHRlbmRzIFByb3ZpZGVyRnVuY3Rpb25QYXJhbWV0ZXJNb2RlbCB7XG4gIHJlYWRvbmx5IGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBwcm92aWRlci1kZWZpbmVkIGZ1bmN0aW9uLCBtYXBwZWQgdG8gYSBzdGF0aWMgbWV0aG9kIG9uIHRoZVxuICogZ2VuZXJhdGVkIGA8UHJvdmlkZXI+UHJvdmlkZXJGdW5jdGlvbnNgIGNsYXNzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyRnVuY3Rpb25Nb2RlbCB7XG4gIHJlYWRvbmx5IHRlcnJhZm9ybU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbWV0aG9kTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgc3VtbWFyeT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRlcnJhZm9ybSAoPj0xLjgpIGRlcHJlY2F0aW9uIG1lc3NhZ2UgZm9yIHRoZSBmdW5jdGlvbiwgc3VyZmFjZWQgYXMgYW5cbiAgICogYEBkZXByZWNhdGVkYCBKU0RvYyB0YWcuIE9wZW5Ub2Z1IG5ldmVyIGVtaXRzIHRoaXMgZmllbGQgLSBzZWVcbiAgICogYEZ1bmN0aW9uU2lnbmF0dXJlLmRlcHJlY2F0aW9uX21lc3NhZ2VgLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwcmVjYXRpb25NZXNzYWdlPzogc3RyaW5nO1xuICByZWFkb25seSByZXR1cm5Uc1R5cGU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBgQHJldHVybnMgey4uLn1gIEpTRG9jIHR5cGUsIGRlc2NyaWJpbmcgdGhlIGNvbmNlcHR1YWwvVGVycmFmb3JtXG4gICAqIHNoYXBlIG9mIHRoZSByZXR1cm4gdmFsdWUgLSBzZWUgYG1hcFJldHVyblR5cGVgLiBUaGlzIGRlbGliZXJhdGVseSBjYW5cbiAgICogZGlmZmVyIGZyb20gYHJldHVyblRzVHlwZWAgKGUuZy4gYSBgYm9vbGAgcmV0dXJuIGlzIGRlY2xhcmVkXG4gICAqIGBjZGt0bi5JUmVzb2x2YWJsZWAgYnV0IGRvY3VtZW50ZWQgYXMgYGJvb2xlYW4gfCBJUmVzb2x2YWJsZWApLCB0aGUgc2FtZVxuICAgKiB3YXkgYSBwYXJhbWV0ZXIncyBgZG9jc3RyaW5nVHlwZWAgY2FuIGRpZmZlciBmcm9tIGl0cyBgdHNUeXBlYC5cbiAgICovXG4gIHJlYWRvbmx5IHJldHVybkRvY3N0cmluZ1R5cGU6IHN0cmluZztcbiAgLyoqXG4gICAqIFByb3NlIGFwcGVuZGVkIGFmdGVyIHRoZSBgQHJldHVybnMgey4uLn1gIGJyYWNlcyAoZS5nLiBUZXJyYWZvcm1cbiAgICogbGlzdC9zZXQgc2VtYW50aWNzKSAtIHRoZSByZXR1cm4tc2lkZSBjb3VudGVycGFydCBvZiBhIHBhcmFtZXRlcidzXG4gICAqIGBkb2NzdHJpbmdOb3RlYC5cbiAgICovXG4gIHJlYWRvbmx5IHJldHVybkRvY3N0cmluZ05vdGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXcmFwcyB0aGUgYGNka3RuLlRlcnJhZm9ybVByb3ZpZGVyRnVuY3Rpb24uaW52b2tlKC4uLilgIGNhbGwgZXhwcmVzc2lvblxuICAgKiBpbnRvIHRoZSBtZXRob2QncyBgcmV0dXJuYCBzdGF0ZW1lbnQgKGUuZy4gd3JhcHBpbmcgaXQgaW5cbiAgICogYGNka3RuLlRva2VuLmFzU3RyaW5nKC4uLilgLCBvciByZXR1cm5pbmcgaXQgdW53cmFwcGVkIGZvciBgYm9vbGApLlxuICAgKi9cbiAgcmVhZG9ubHkgd3JhcFJldHVybjogKGludm9rZUV4cHJlc3Npb246IHN0cmluZykgPT4gc3RyaW5nO1xuICByZWFkb25seSBwYXJhbWV0ZXJzOiBQcm92aWRlckZ1bmN0aW9uUGFyYW1ldGVyTW9kZWxbXTtcbiAgcmVhZG9ubHkgdmFyaWFkaWNQYXJhbWV0ZXI/OiBQcm92aWRlckZ1bmN0aW9uUGFyYW1ldGVyTW9kZWw7XG59XG5cbi8qKlxuICogQWxsIHByb3ZpZGVyLWRlZmluZWQgZnVuY3Rpb25zIG9mIGEgc2luZ2xlIHByb3ZpZGVyLCBtYXBwZWQgdG8gYSBzaW5nbGVcbiAqIGdlbmVyYXRlZCBgcHJvdmlkZXJzLzxwcm92aWRlcj4vcHJvdmlkZXItZnVuY3Rpb25zL2luZGV4LnRzYCBmaWxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyRnVuY3Rpb25zTW9kZWwge1xuICByZWFkb25seSBwcm92aWRlck5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZ1bmN0aW9uczogUHJvdmlkZXJGdW5jdGlvbk1vZGVsW107XG59XG5cbi8vIFBhcmFtZXRlciBuYW1lcyB0aGF0IGNvbGxpZGUgd2l0aCBhIHJlc2VydmVkIHdvcmQvaWRlbnRpZmllciBpbiBvbmUgb2YgdGhlXG4vLyBqc2lpIHRhcmdldCBsYW5ndWFnZXMuIFRoaXMgaXMgdGhlIHNpYmxpbmcgdGFibGUgZm9yIHByb3ZpZGVyLWRlZmluZWRcbi8vIGZ1bmN0aW9uczogdG9vbHMvZ2VuZXJhdGUtZnVuY3Rpb24tYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS50cyBob2xkcyB0aGVcbi8vIGNhbm9uaWNhbCAoYW5kIHNlcGFyYXRlbHkgbWFpbnRhaW5lZCkgdGFibGUgZm9yIGJ1aWx0LWluIGBGbi4qYCBmdW5jdGlvbnMuXG4vLyBUaGUgdHdvIGFyZSBpbnRlbnRpb25hbGx5IG5vdCBzaGFyZWQgLSB0aGF0IHNjcmlwdCBsaXZlcyBvdXRzaWRlIHRoZVxuLy8gcGFja2FnZXMvIGJ1aWxkIGFuZCBnZW5lcmF0ZXMgYSBkaWZmZXJlbnQgYXJ0aWZhY3QgLSBidXQgYW55IHJlc2VydmVkIG5hbWVcbi8vIGFkZGVkIHRoZXJlIHNob3VsZCBiZSBjb25zaWRlcmVkIGhlcmUgdG9vLlxuY29uc3QgUkVTRVJWRURfUEFSQU1FVEVSX05BTUVTOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgZGVmYXVsdDogXCJkZWZhdWx0VmFsdWVcIiwgLy8gcmVzZXJ2ZWQgd29yZCBpbiBUeXBlU2NyaXB0XG4gIHN0cmluZzogXCJzdHJcIiwgLy8gY2F1c2VzIGlzc3VlcyBpbiBHb1xufTtcblxuZnVuY3Rpb24gc2FuaXRpemVQYXJhbWV0ZXJOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGNhbWVsQ2FzZWQgPSB0b0NhbWVsQ2FzZShuYW1lKTtcbiAgcmV0dXJuIFJFU0VSVkVEX1BBUkFNRVRFUl9OQU1FU1tjYW1lbENhc2VkXSA/PyBjYW1lbENhc2VkO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZU1ldGhvZE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKG5hbWUgPT09IFwibGVuZ3RoXCIpIHJldHVybiBcImxlbmd0aE9mXCI7IC8vIHJlc2VydmVkIG9uIGpzaWktZ2VuZXJhdGVkIGNsYXNzZXNcbiAgcmV0dXJuIHRvQ2FtZWxDYXNlKG5hbWUpO1xufVxuXG4vLyBNZW1iZXJzIHRoYXQgYFByb3ZpZGVyRnVuY3Rpb25zRW1pdHRlcmAgKHNlZSBgZW1pdHRlci9wcm92aWRlci1mdW5jdGlvbnMtZW1pdHRlci50c2ApXG4vLyBpdHNlbGYgcHV0cyBvbiBldmVyeSBnZW5lcmF0ZWQgYDxQcm92aWRlcj5Qcm92aWRlckZ1bmN0aW9uc2Agd3JhcHBlciBjbGFzcyxcbi8vIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggZnVuY3Rpb25zIGEgcHJvdmlkZXIgZGVjbGFyZXM6XG4vLyAgIC0gXCJjb25zdHJ1Y3RvclwiOiB0aGUgY2xhc3MncyBvd24gY29uc3RydWN0b3IsIHdoaWNoIHRha2VzIHRoZSBwcm92aWRlcidzXG4vLyAgICAgYHByb3ZpZGVyTG9jYWxOYW1lYC4gQSBwcm92aWRlci1kZWZpbmVkIGZ1bmN0aW9uIG5hbWVkIFwiY29uc3RydWN0b3JcIlxuLy8gICAgIHdvdWxkIHNhbml0aXplIHRvIGEgKnNlY29uZCogYGNvbnN0cnVjdG9yYCBtZW1iZXIgb24gdGhlIGNsYXNzLCB3aGljaFxuLy8gICAgIGlzIGludmFsaWQgVHlwZVNjcmlwdC5cbi8vICAgLSBcInByb3ZpZGVyTG9jYWxOYW1lXCI6IHRoZSBgcHJpdmF0ZSByZWFkb25seSBwcm92aWRlckxvY2FsTmFtZTogc3RyaW5nYFxuLy8gICAgIGZpZWxkIHRoZSBjb25zdHJ1Y3RvciBhc3NpZ25zIChzZWUgdGhlIGVtaXR0ZXIncyBgZW1pdENsYXNzSGVhZGVyYC9cbi8vICAgICBjb25zdHJ1Y3RvciBlbWlzc2lvbikuIEEgcHJvdmlkZXItZGVmaW5lZCBmdW5jdGlvbiBzYW5pdGl6aW5nIHRvIHRoaXNcbi8vICAgICBuYW1lIHdvdWxkIGNvbGxpZGUgd2l0aCB0aGF0IGZpZWxkLlxuLy8gSWYgYFByb3ZpZGVyRnVuY3Rpb25zRW1pdHRlcmAgZXZlciBncm93cyBtb3JlIG1lbWJlcnMgb24gdGhlIHdyYXBwZXIgY2xhc3MsXG4vLyBhZGQgdGhlbSBoZXJlIHRvby5cbmNvbnN0IFJFU0VSVkVEX1dSQVBQRVJfTUVNQkVSX05BTUVTID0gbmV3IFNldChbXG4gIFwiY29uc3RydWN0b3JcIixcbiAgXCJwcm92aWRlckxvY2FsTmFtZVwiLFxuXSk7XG5cbi8qKlxuICogUmVzdWx0IG9mIG1hcHBpbmcgYSBzaW5nbGUgVGVycmFmb3JtIGF0dHJpYnV0ZSB0eXBlIGludG8gYSBqc2lpLXNhZmVcbiAqIHBhcmFtZXRlciBzaGFwZSAoc2VlIGBtYXBQYXJhbWV0ZXJUeXBlYCkuXG4gKi9cbmludGVyZmFjZSBNYXBwZWRQYXJhbWV0ZXJUeXBlIHtcbiAgcmVhZG9ubHkgdHNUeXBlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRvY3N0cmluZ1R5cGU6IHN0cmluZztcbiAgLyoqIFNlZSBgUHJvdmlkZXJGdW5jdGlvblBhcmFtZXRlck1vZGVsLmRvY3N0cmluZ05vdGVgLiAqL1xuICByZWFkb25seSBkb2NzdHJpbmdOb3RlPzogc3RyaW5nO1xuICAvKipcbiAgICogVHJ1ZSB3aGVuIGB0c1R5cGVgIGFscmVhZHkgYWNjZXB0cyBhbiBhcmJpdHJhcnkgYGNka3RuLklSZXNvbHZhYmxlYCBpblxuICAgKiB0aGlzIHBvc2l0aW9uIHdpdGhvdXQgbmVlZGluZyBhbiBleHRyYSBgfCBjZGt0bi5JUmVzb2x2YWJsZWAgdW5pb24gLVxuICAgKiBzZWUgYEludGVybmFsUGFyYW1ldGVyTW9kZWxgLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBicmFja2V0LWNvbXBvc2FibGUgKFwiVFtdXCIsIG5vIHRvcC1sZXZlbCB1bmlvbikgVHlwZVNjcmlwdC9kb2NzdHJpbmdcbiAqIHR5cGUgZm9yIGFuIGVsZW1lbnQgdGhhdCBjYW4gbmVzdCBpbnNpZGUgYW4gYXJyYXkgd2l0aG91dCBJVFNFTEYgbmVlZGluZ1xuICogdGhlIHdob2xlLWNvbGxlY3Rpb24gdG9rZW4gdW5pb24gYXQgdGhhdCBsZXZlbDogYHN0cmluZ2AsIGBudW1iZXJgLCBvciBhXG4gKiBsaXN0L3NldCBvZiBvbmUgb2YgdGhvc2UsIHJlY3Vyc2l2ZWx5IChlLmcuIGBsaXN0KGxpc3Qoc3RyaW5nKSlgIGJvdHRvbXNcbiAqIG91dCBhdCBgc3RyaW5nYCkuIFJldHVybnMgYHVuZGVmaW5lZGAgZm9yIGFueXRoaW5nIGVsc2UgKGBib29sYCwgYG1hcGAsXG4gKiBgb2JqZWN0YCwgYGR5bmFtaWNgLCBvciBhIG5lc3RlZCBjb2xsZWN0aW9uIHRoYXQgZG9lc24ndCBpdHNlbGYgcXVhbGlmeSksXG4gKiBzbyB0aGUgY2FsbGVyIGZhbGxzIGJhY2sgdG8gd2lkZW5pbmcgdGhlIHdob2xlIHBhcmFtZXRlciB0b1xuICogYGFueVtdIHwgY2RrdG4uSVJlc29sdmFibGVgIGluc3RlYWQuXG4gKi9cbmZ1bmN0aW9uIHBsYWluQXJyYXlFbGVtZW50VHlwZShcbiAgdHlwZTogQXR0cmlidXRlVHlwZSxcbik6IHsgdHNUeXBlOiBzdHJpbmc7IGRvY3N0cmluZ1R5cGU6IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHJldHVybiB7IHRzVHlwZTogXCJzdHJpbmdcIiwgZG9jc3RyaW5nVHlwZTogXCJzdHJpbmdcIiB9O1xuICBpZiAodHlwZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHsgdHNUeXBlOiBcIm51bWJlclwiLCBkb2NzdHJpbmdUeXBlOiBcIm51bWJlclwiIH07XG4gIGlmIChBcnJheS5pc0FycmF5KHR5cGUpICYmICh0eXBlWzBdID09PSBcImxpc3RcIiB8fCB0eXBlWzBdID09PSBcInNldFwiKSkge1xuICAgIGNvbnN0IGlubmVyID0gcGxhaW5BcnJheUVsZW1lbnRUeXBlKHR5cGVbMV0pO1xuICAgIGlmICghaW5uZXIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogYCR7aW5uZXIudHNUeXBlfVtdYCxcbiAgICAgIGRvY3N0cmluZ1R5cGU6IGAke3R5cGVbMF0gPT09IFwic2V0XCIgPyBcIlNldFwiIDogXCJBcnJheVwifTwke2lubmVyLmRvY3N0cmluZ1R5cGV9PmAsXG4gICAgfTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIE1hcHMgYSBgbGlzdGAvYHNldGAgcGFyYW1ldGVyIHRvIGl0cyBqc2lpLXNhZmUgc2hhcGUgLSBtaXJyb3JzXG4gKiBgTGlzdEF0dHJpYnV0ZVR5cGVNb2RlbGAvYFNldEF0dHJpYnV0ZVR5cGVNb2RlbC5pbnB1dFR5cGVEZWZpbml0aW9uYFxuICogKGJvdGggaWRlbnRpY2FsKSBicmFuY2ggZm9yIGJyYW5jaCwgc2luY2UganNpaSBwYXJhbWV0ZXJzLCBsaWtlIHJlc291cmNlXG4gKiBpbnB1dHMsIGFyZSBhbGxvd2VkIHRvIHVuaW9uIGluIGEgd2hvbGUtY29sbGVjdGlvbiBgY2RrdG4uSVJlc29sdmFibGVgXG4gKiB0b2tlbi4gYGtpbmRgIG9ubHkgYWZmZWN0cyB0aGUgZG9jdW1lbnRhdGlvbjogdGhlIGRvY3N0cmluZyBub3RhdGlvblxuICogKGBBcnJheTwuLi4+YCBmb3IgYSBUZXJyYWZvcm0gbGlzdCwgYFNldDwuLi4+YCBmb3IgYSBUZXJyYWZvcm0gc2V0LFxuICogcmVjdXJzaXZlbHkgdmlhIGBwbGFpbkFycmF5RWxlbWVudFR5cGVgL2BtYXBQYXJhbWV0ZXJUeXBlYCkgcGx1cywgZm9yXG4gKiBzZXRzLCBhIHByb3NlIG5vdGUgLSB0aGUganNpaSB0eXBlIGlzIGFuIGFycmF5IGVpdGhlciB3YXksIHNvIHRoZSBub3RlXG4gKiBrZWVwcyBhIHJlYWRlciBmcm9tIGxpdGVyYWxseSBwYXNzaW5nIGEgSlMgYFNldGAgYW5kIGZsYWdzIHRoZVxuICogb3JkZXJpbmcvZHVwbGljYXRlLWVsZW1lbnQgc2VtYW50aWNzIGRpZmZlcmVuY2UuIFRoZSB0eXBlLWxldmVsIGhhbmRsaW5nXG4gKiBpcyBpZGVudGljYWwgZm9yIGJvdGguXG4gKi9cbmZ1bmN0aW9uIG1hcExpc3RPclNldFBhcmFtZXRlclR5cGUoXG4gIGtpbmQ6IFwibGlzdFwiIHwgXCJzZXRcIixcbiAgZWxlbWVudDogQXR0cmlidXRlVHlwZSxcbik6IE1hcHBlZFBhcmFtZXRlclR5cGUge1xuICBjb25zdCB3cmFwcGVyID0ga2luZCA9PT0gXCJzZXRcIiA/IFwiU2V0XCIgOiBcIkFycmF5XCI7XG4gIGNvbnN0IGRvY3N0cmluZ05vdGUgPVxuICAgIGtpbmQgPT09IFwic2V0XCJcbiAgICAgID8gXCJUZXJyYWZvcm0gc2V0OyBvcmRlcmluZyBpcyBub3QgZ3VhcmFudGVlZCBhbmQgZHVwbGljYXRlIHZhbHVlcyBhcmUgcmVtb3ZlZC5cIlxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKGVsZW1lbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAvLyBNaXJyb3JzIHRoZSBmaW5hbCBgZWxzZWAgYnJhbmNoOiBlbmNvZGVkIGxpc3QgdG9rZW5zIGFscmVhZHkgc2F0aXNmeVxuICAgIC8vIGBzdHJpbmdbXWAsIHNvIG5vIHVuaW9uIGlzIG5lZWRlZC5cbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcInN0cmluZ1tdXCIsXG4gICAgICBkb2NzdHJpbmdUeXBlOiBgJHt3cmFwcGVyfTxzdHJpbmc+YCxcbiAgICAgIGRvY3N0cmluZ05vdGUsXG4gICAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IGZhbHNlLFxuICAgIH07XG4gIH1cbiAgaWYgKGVsZW1lbnQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAvLyBTYW1lIHJlYXNvbmluZyBhcyBgc3RyaW5nYCBhYm92ZS5cbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcIm51bWJlcltdXCIsXG4gICAgICBkb2NzdHJpbmdUeXBlOiBgJHt3cmFwcGVyfTxudW1iZXI+YCxcbiAgICAgIGRvY3N0cmluZ05vdGUsXG4gICAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IGZhbHNlLFxuICAgIH07XG4gIH1cbiAgaWYgKGVsZW1lbnQgPT09IFwiYm9vbFwiKSB7XG4gICAgLy8gTWlycm9ycyB0aGUgYGVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZSA9PT0gXCJib29sZWFuXCJgIGJyYW5jaDogYm9vbFxuICAgIC8vIGhhcyBubyBsb3NzbGVzcyBwZXItZWxlbWVudCB0b2tlbiwgYnV0IHRoZSBXSE9MRSBjb2xsZWN0aW9uIGlzIHN0aWxsXG4gICAgLy8gdG9rZW5pemFibGUsIHNvIHRoZSB1bmlvbiBpcyBvbiB0aGUgb3V0c2lkZS5cbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcIkFycmF5PGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZT4gfCBjZGt0bi5JUmVzb2x2YWJsZVwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogYCR7d3JhcHBlcn08Ym9vbGVhbiB8IElSZXNvbHZhYmxlPmAsXG4gICAgICBkb2NzdHJpbmdOb3RlLFxuICAgICAgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiB0cnVlLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwbGFpbkVsZW1lbnQgPSBwbGFpbkFycmF5RWxlbWVudFR5cGUoZWxlbWVudCk7XG4gIGlmIChwbGFpbkVsZW1lbnQpIHtcbiAgICAvLyBNaXJyb3JzIHRoZSBgZWxlbWVudFR5cGUudHlwZU1vZGVsVHlwZSAhPT0gXCJzaW1wbGVcImAgYnJhbmNoOiBhIG5lc3RlZFxuICAgIC8vIGxpc3Qvc2V0IHRoYXQgaXRzZWxmIGJvdHRvbXMgb3V0IGF0IHN0cmluZy9udW1iZXIgY29tcG9zZXMgaW50byBhXG4gICAgLy8gcHJvcGVyIG5lc3RlZCBhcnJheSB0eXBlIChlLmcuIGBsaXN0KGxpc3Qoc3RyaW5nKSlgIC0+IGBzdHJpbmdbXVtdYCksXG4gICAgLy8gd2l0aCB0aGUgd2hvbGUtY29sbGVjdGlvbiB0b2tlbiBhZGRpdGlvbmFsbHkgYWNjZXB0ZWQgYWxvbmdzaWRlIGl0LlxuICAgIHJldHVybiB7XG4gICAgICB0c1R5cGU6IGAke3BsYWluRWxlbWVudC50c1R5cGV9W10gfCBjZGt0bi5JUmVzb2x2YWJsZWAsXG4gICAgICBkb2NzdHJpbmdUeXBlOiBgJHt3cmFwcGVyfTwke3BsYWluRWxlbWVudC5kb2NzdHJpbmdUeXBlfT5gLFxuICAgICAgZG9jc3RyaW5nTm90ZSxcbiAgICAgIGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeTogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgLy8gbWFwL29iamVjdC9keW5hbWljIGVsZW1lbnQsIG9yIGEgbmVzdGVkIGNvbGxlY3Rpb24gdGhhdCBkb2Vzbid0IGl0c2VsZlxuICAvLyByZWR1Y2UgdG8gc3RyaW5nL251bWJlcjogbm8ganNpaS1zYWZlIGFycmF5LW9mLVggdHlwZSBleGlzdHMgLSB3aWRlblxuICAvLyB0aGUgd2hvbGUgcGFyYW1ldGVyIHRvIGBhbnlbXWAuIFVubGlrZSBhIGJhcmUgYGFueWAgcGFyYW1ldGVyLCBwbGFpblxuICAvLyBgYW55W11gIGRvZXMgTk9UIHN0cnVjdHVyYWxseSBhY2NlcHQgYSB3aG9sZS1jb2xsZWN0aW9uXG4gIC8vIGBjZGt0bi5JUmVzb2x2YWJsZWAgdG9rZW4sIHNvIHRoZSB1bmlvbiBpcyByZXF1aXJlZCBoZXJlICh0aGlzIGlzXG4gIC8vIHN0cmljdGVyIHRoYW4gYE1hcEF0dHJpYnV0ZVR5cGVNb2RlbGAvYExpc3RBdHRyaWJ1dGVUeXBlTW9kZWxgIGhhdmUgdG9cbiAgLy8gYmUsIHNpbmNlIHRob3NlIG9ubHkgZXZlciBmYWxsIGJhY2sgdG8gYGFueVtdIHwgY2RrdG4uSVJlc29sdmFibGVgIHZpYVxuICAvLyB0aGUgc2FtZSBcIm5vdCBzaW1wbGVcIiBicmFuY2ggYWJvdmUsIHdoaWNoIGFscmVhZHkgZ3JhbnRzIGl0KS4gS2VlcCB0aGVcbiAgLy8gZG9jc3RyaW5nIGhvbmVzdCBhYm91dCB0aGUgcmVhbCBlbGVtZW50IHNoYXBlIHJhdGhlciB0aGFuIGp1c3Qgc2F5aW5nXG4gIC8vIGBhbnlgLlxuICBjb25zdCBlbGVtZW50RGVzY3JpcHRpb24gPSBtYXBQYXJhbWV0ZXJUeXBlKGVsZW1lbnQpLmRvY3N0cmluZ1R5cGU7XG4gIHJldHVybiB7XG4gICAgdHNUeXBlOiBcImFueVtdIHwgY2RrdG4uSVJlc29sdmFibGVcIixcbiAgICBkb2NzdHJpbmdUeXBlOiBgJHt3cmFwcGVyfTwke2VsZW1lbnREZXNjcmlwdGlvbn0+YCxcbiAgICBkb2NzdHJpbmdOb3RlLFxuICAgIGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeTogdHJ1ZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBNYXBzIGEgYG1hcGAgcGFyYW1ldGVyIHRvIGl0cyBqc2lpLXNhZmUgc2hhcGUgLSBtaXJyb3JzXG4gKiBgTWFwQXR0cmlidXRlVHlwZU1vZGVsLmlucHV0VHlwZURlZmluaXRpb25gLiBPbmx5IHRoZSBgYm9vbGAtZWxlbWVudCBjYXNlXG4gKiBpcyByZWFjaGFibGUgZnJvbSByZWFsIHByb3ZpZGVyIHNjaGVtYXMgdG9kYXkgKGBzdHJpbmdgL2BudW1iZXJgIGVsZW1lbnRcbiAqIG1hcHMgc3RheSBhIHBsYWluLCBub24tdW5pb24gcmVjb3JkOyBuZXN0ZWQvY29tcGxleCBtYXAgZWxlbWVudHMgYXJlbid0XG4gKiBlbWl0dGVkIGZvciBwcm92aWRlciBmdW5jdGlvbnMgLSBzZWUgdGhlIGBvYmplY3RgIGZhbGxiYWNrIGluXG4gKiBgbWFwUGFyYW1ldGVyVHlwZWApLCBidXQgdGhlIHNoYXBlIGlzIGtlcHQgYnJhbmNoLWZvci1icmFuY2ggYWxpZ25lZCB3aXRoXG4gKiB0aGUgbW9kZWwgaXQgbWlycm9ycyByYXRoZXIgdGhhbiBjb2xsYXBzZWQuXG4gKi9cbmZ1bmN0aW9uIG1hcE1hcFBhcmFtZXRlclR5cGUoZWxlbWVudDogQXR0cmlidXRlVHlwZSk6IE1hcHBlZFBhcmFtZXRlclR5cGUge1xuICBpZiAoZWxlbWVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB7XG4gICAgICB0c1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogXCJ7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XCIsXG4gICAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IGZhbHNlLFxuICAgIH07XG4gIH1cbiAgaWYgKGVsZW1lbnQgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcInsgW2tleTogc3RyaW5nXTogbnVtYmVyIH1cIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiBudW1iZXIgfVwiLFxuICAgICAgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiBmYWxzZSxcbiAgICB9O1xuICB9XG4gIGlmIChlbGVtZW50ID09PSBcImJvb2xcIikge1xuICAgIC8vIE1pcnJvcnMgdGhlIGBlbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUgPT09IFwiYm9vbGVhblwiYCBicmFuY2g6IG1hcFxuICAgIC8vIG9mIGJvb2xlYW5zIGhhcyBQRVItRU5UUlkgdG9rZW4gc3VwcG9ydCwgYnV0IHRoZSB3aG9sZSBtYXAgaXRzZWxmIGlzXG4gICAgLy8gbm90IGFkZGl0aW9uYWxseSB1bmlvbmVkIHdpdGggYGNka3RuLklSZXNvbHZhYmxlYCAodW5saWtlIHRoZSBsaXN0L3NldFxuICAgIC8vIGNhc2UpIC0gbWF0Y2hpbmcgYE1hcEF0dHJpYnV0ZVR5cGVNb2RlbC5pbnB1dFR5cGVEZWZpbml0aW9uYCBleGFjdGx5LlxuICAgIHJldHVybiB7XG4gICAgICB0c1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiAoYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlKSB9XCIsXG4gICAgICBkb2NzdHJpbmdUeXBlOiBcInsgW2tleTogc3RyaW5nXTogKGJvb2xlYW4gfCBJUmVzb2x2YWJsZSkgfVwiLFxuICAgICAgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiBmYWxzZSxcbiAgICB9O1xuICB9XG4gIC8vIG1hcC9vYmplY3QvZHluYW1pYyBlbGVtZW50OiBubyBzdHJ1Y3R1cmFsIGlucHV0IGhlbHBlciBleGlzdHMgaGVyZSAtXG4gIC8vIHN0YXlzIGBhbnlgLCB3aGljaCAoYmVpbmcgYGFueWApIGFscmVhZHkgYWNjZXB0cyBhIHdob2xlLW1hcFxuICAvLyBgY2RrdG4uSVJlc29sdmFibGVgIHRva2VuIHRvby5cbiAgcmV0dXJuIHtcbiAgICB0c1R5cGU6IFwiYW55XCIsXG4gICAgZG9jc3RyaW5nVHlwZTogXCJhbnlcIixcbiAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IHRydWUsXG4gIH07XG59XG5cbi8qKlxuICogTWFwcyBhIHByb3ZpZGVyIGZ1bmN0aW9uIHBhcmFtZXRlcidzIGRlY2xhcmVkIFRlcnJhZm9ybSB0eXBlIHRvIGFcbiAqIGpzaWktc2FmZSBUeXBlU2NyaXB0IHBhcmFtZXRlciB0eXBlLCByZWN1cnNpdmVseSBmb3IgY29sbGVjdGlvbiB0eXBlcy5cbiAqXG4gKiBVbmxpa2UgcmV0dXJuIHR5cGVzLCBqc2lpIGFsbG93cyB1bmlvbnMgaW4gKnBhcmFtZXRlciogcG9zaXRpb24sIHNvXG4gKiBgYm9vbGAgaXMgdHlwZWQgYGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZWAgKG1pcnJvcmluZ1xuICogYFNpbXBsZUF0dHJpYnV0ZVR5cGVNb2RlbC5pbnB1dFR5cGVEZWZpbml0aW9uYCdzIGlucHV0LXNpZGUgY29udmVudGlvbikgLVxuICogdGhpcyBib3RoIGFjY2VwdHMgYSByZWFsIGJvb2xlYW4gYW5kIHN0aWxsIGFjY2VwdHMgYSB0b2tlbiBpbiBwbGFjZSBvZlxuICogb25lLiBgZHluYW1pY2AgaGFzIG5vIHN0cnVjdHVyYWwgdHlwaW5nIGFuZCBzdGF5cyBgYW55YCAod2hpY2ggYWxyZWFkeVxuICogYWNjZXB0cyBhbnl0aGluZywgaW5jbHVkaW5nIGEgdG9rZW4pOyBgb2JqZWN0YCAoc3RydWN0dXJhbCBpbnB1dCBoZWxwZXJzXG4gKiBhcmUgZGVmZXJyZWQgdG8gYSBmb2xsb3ctdXAgaXNzdWUpIHN0YXlzIGBhbnlgIHRvby5cbiAqXG4gKiBgbGlzdGAvYHNldGAgYW5kIGBtYXBgIGRlbGVnYXRlIHRvIGBtYXBMaXN0T3JTZXRQYXJhbWV0ZXJUeXBlYC9cbiAqIGBtYXBNYXBQYXJhbWV0ZXJUeXBlYCwgd2hpY2ggbWlycm9yIGBMaXN0QXR0cmlidXRlVHlwZU1vZGVsYC9cbiAqIGBTZXRBdHRyaWJ1dGVUeXBlTW9kZWxgL2BNYXBBdHRyaWJ1dGVUeXBlTW9kZWwuaW5wdXRUeXBlRGVmaW5pdGlvbmBcbiAqIGJyYW5jaCBmb3IgYnJhbmNoIChzZWUgYGF0dHJpYnV0ZS10eXBlLW1vZGVsLnRzYCkgLSB0aGUgc2FtZVxuICogd2hvbGUtY29sbGVjdGlvbi10b2tlbiBjb252ZW50aW9ucyBhbHJlYWR5IHVzZWQgZm9yIHJlc291cmNlIGlucHV0cy5cbiAqL1xuZnVuY3Rpb24gbWFwUGFyYW1ldGVyVHlwZSh0eXBlOiBBdHRyaWJ1dGVUeXBlKTogTWFwcGVkUGFyYW1ldGVyVHlwZSB7XG4gIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IGZhbHNlLFxuICAgIH07XG4gIH1cbiAgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcIm51bWJlclwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogXCJudW1iZXJcIixcbiAgICAgIGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeTogZmFsc2UsXG4gICAgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJib29sXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcImJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZVwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogXCJib29sZWFuIHwgSVJlc29sdmFibGVcIixcbiAgICAgIGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeTogdHJ1ZSxcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlID09PSBcImR5bmFtaWNcIikge1xuICAgIHJldHVybiB7XG4gICAgICB0c1R5cGU6IFwiYW55XCIsXG4gICAgICBkb2NzdHJpbmdUeXBlOiBcImFueVwiLFxuICAgICAgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5OiB0cnVlLFxuICAgIH07XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSAmJiAodHlwZVswXSA9PT0gXCJsaXN0XCIgfHwgdHlwZVswXSA9PT0gXCJzZXRcIikpIHtcbiAgICByZXR1cm4gbWFwTGlzdE9yU2V0UGFyYW1ldGVyVHlwZSh0eXBlWzBdLCB0eXBlWzFdKTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHR5cGUpICYmIHR5cGVbMF0gPT09IFwibWFwXCIpIHtcbiAgICByZXR1cm4gbWFwTWFwUGFyYW1ldGVyVHlwZSh0eXBlWzFdKTtcbiAgfVxuXG4gIC8vIG9iamVjdDogc3RydWN0dXJhbCBpbnB1dCBoZWxwZXJzIGFyZSBkZWZlcnJlZCB0byBhIGZvbGxvdy11cCBpc3N1ZS5cbiAgcmV0dXJuIHtcbiAgICB0c1R5cGU6IFwiYW55XCIsXG4gICAgZG9jc3RyaW5nVHlwZTogXCJvYmplY3RcIixcbiAgICBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHk6IHRydWUsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUGFyYW1ldGVyTW9kZWwoXG4gIHBhcmFtZXRlcjogRnVuY3Rpb25QYXJhbWV0ZXIsXG4gIGZhbGxiYWNrTmFtZTogc3RyaW5nLFxuKTogSW50ZXJuYWxQYXJhbWV0ZXJNb2RlbCB7XG4gIGNvbnN0IHRlcnJhZm9ybU5hbWUgPSBwYXJhbWV0ZXIubmFtZSA/PyBmYWxsYmFja05hbWU7XG4gIGNvbnN0IHsgdHNUeXBlLCBkb2NzdHJpbmdUeXBlLCBkb2NzdHJpbmdOb3RlLCBhY2NlcHRzUmVzb2x2YWJsZUFscmVhZHkgfSA9XG4gICAgbWFwUGFyYW1ldGVyVHlwZShwYXJhbWV0ZXIudHlwZSk7XG4gIHJldHVybiB7XG4gICAgdGVycmFmb3JtTmFtZSxcbiAgICBuYW1lOiBzYW5pdGl6ZVBhcmFtZXRlck5hbWUodGVycmFmb3JtTmFtZSksXG4gICAgdHNUeXBlLFxuICAgIGRvY3N0cmluZ1R5cGUsXG4gICAgZG9jc3RyaW5nTm90ZSxcbiAgICBkZXNjcmlwdGlvbjogcGFyYW1ldGVyLmRlc2NyaXB0aW9uLFxuICAgIGFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeSxcbiAgfTtcbn1cblxuLyoqXG4gKiBXaWRlbnMgYSBtYXBwZWQgdHlwZSdzIGB0c1R5cGVgL2Bkb2NzdHJpbmdUeXBlYCB0byBhbHNvIGFjY2VwdCBhblxuICogZXhwbGljaXQgYGNka3RuLlRva2VuLm51bGxWYWx1ZSgpYCBpbiB0aGlzIHBvc2l0aW9uIC0gdW5sZXNzXG4gKiBgYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5YCBzYXlzIGl0IGFscmVhZHkgZG9lcyAoZS5nLiBhIGBib29sYCBwYXJhbWV0ZXJcbiAqIGlzIGFscmVhZHkgYGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZWAsIHNvIG51bGxhYmlsaXR5IGFkZHMgbm90aGluZyB0b1xuICogdGhlIHR5cGUgaXRzZWxmLCBvbmx5IHRvIHRoZSBkb2NzdHJpbmcgbm90ZSBhcHBlbmRlZCBieSB0aGUgY2FsbGVyKS5cbiAqL1xuZnVuY3Rpb24gd2l0aE51bGxhYmxlUmVzb2x2YWJsZVVuaW9uKFxuICBtb2RlbDogUGljazxcbiAgICBJbnRlcm5hbFBhcmFtZXRlck1vZGVsLFxuICAgIFwidHNUeXBlXCIgfCBcImRvY3N0cmluZ1R5cGVcIiB8IFwiYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5XCJcbiAgPixcbik6IHsgdHNUeXBlOiBzdHJpbmc7IGRvY3N0cmluZ1R5cGU6IHN0cmluZyB9IHtcbiAgaWYgKG1vZGVsLmFjY2VwdHNSZXNvbHZhYmxlQWxyZWFkeSkge1xuICAgIHJldHVybiB7IHRzVHlwZTogbW9kZWwudHNUeXBlLCBkb2NzdHJpbmdUeXBlOiBtb2RlbC5kb2NzdHJpbmdUeXBlIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0c1R5cGU6IGAke21vZGVsLnRzVHlwZX0gfCBjZGt0bi5JUmVzb2x2YWJsZWAsXG4gICAgZG9jc3RyaW5nVHlwZTogYCR7bW9kZWwuZG9jc3RyaW5nVHlwZX0gfCBJUmVzb2x2YWJsZWAsXG4gIH07XG59XG5cbi8qKlxuICogQXBwbGllcyBgaXNfbnVsbGFibGVgIHRyYWlsaW5nLWNvbXBhdGliaWxpdHkgcnVsZXMgYWNyb3NzIGEgZnVuY3Rpb24nc1xuICogZml4ZWQgKG5vbi12YXJpYWRpYykgcGFyYW1ldGVyIGxpc3QuIFRoaXMgbmVlZHMgdGhlIHdob2xlIGxpc3QgaW4gdmlld1xuICogKHNlZSBgYnVpbGRGdW5jdGlvbk1vZGVsYCksIHNpbmNlIHdoZXRoZXIgYSBudWxsYWJsZSBwYXJhbWV0ZXIgY2FuIGJlY29tZVxuICoganNpaS1vcHRpb25hbCBkZXBlbmRzIG9uIGV2ZXJ5IHBhcmFtZXRlciAqYWZ0ZXIqIGl0IHRvbzpcbiAqXG4gKiAtIEEgbnVsbGFibGUgcGFyYW1ldGVyIHdoZXJlIGl0IGFuZCBldmVyeSBsYXRlciBmaXhlZCBwYXJhbWV0ZXIgYXJlIGFsc29cbiAqICAgbnVsbGFibGUgYmVjb21lcyBqc2lpLW9wdGlvbmFsIChgbmFtZT86IFRgKTogb21pdHRpbmcgaXQgaW4gVHlwZVNjcmlwdFxuICogICBsZWF2ZXMgYHVuZGVmaW5lZGAgaW4gdGhlIGludm9rZSBhcmdzIGFycmF5LCB3aGljaCBgRnVuY3Rpb25DYWxsYFxuICogICBhbHJlYWR5IHJlbmRlcnMgYXMgdGhlIFRlcnJhZm9ybSBgbnVsbGAga2V5d29yZC4gSXQgYWRkaXRpb25hbGx5IGdhaW5zXG4gKiAgIHRoZSBgfCBjZGt0bi5JUmVzb2x2YWJsZWAgdW5pb24gKHNlZSBgd2l0aE51bGxhYmxlUmVzb2x2YWJsZVVuaW9uYCksIHNvXG4gKiAgIGEgY2FsbGVyIHdobyBkb2VzIHN1cHBseSB0aGUgYXJndW1lbnQgY2FuIHBhc3NcbiAqICAgYGNka3RuLlRva2VuLm51bGxWYWx1ZSgpYCBmb3IgYW4gZXhwbGljaXQgVGVycmFmb3JtIGBudWxsYCB3aXRob3V0XG4gKiAgIG9taXR0aW5nIHRoZSBwYXJhbWV0ZXIuXG4gKiAtIEEgbnVsbGFibGUgcGFyYW1ldGVyIGZvbGxvd2VkIGJ5IGEgcmVxdWlyZWQgb25lIGtlZXBzIGl0cyBwb3NpdGlvblxuICogICAoanNpaSBjYW4ndCBleHByZXNzIFwib3B0aW9uYWwgYnV0IG5vdCB0cmFpbGluZ1wiKSwgYW5kIGluc3RlYWQgZ2FpbnMgdGhlXG4gKiAgIHNhbWUgYHwgY2RrdG4uSVJlc29sdmFibGVgIHVuaW9uIHNvIGEgY2FsbGVyIGNhbiBzdGlsbCBwYXNzIGFuIGV4cGxpY2l0XG4gKiAgIGBjZGt0bi5Ub2tlbi5udWxsVmFsdWUoKWAgKGFuIGBJUmVzb2x2YWJsZWAgcmVzb2x2aW5nIHRvIGBudWxsYCAtIHNlZVxuICogICBgVG9rZW4ubnVsbFZhbHVlKClgL2BUb2tlbi5hc0FueSgpYCkgaW4gdGhhdCBmaXhlZCBwb3NpdGlvbiAtIGtlZXBpbmdcbiAqICAgdGhlIHBhcmFtZXRlcidzIHJlYWwgdHlwZSByYXRoZXIgdGhhbiBnaXZpbmcgdXAgYWxsIHR5cGUgc2FmZXR5IGJ5XG4gKiAgIHdpZGVuaW5nIGl0IHRvIGBhbnlgLlxuICpcbiAqIEJvdGggY2FzZXMgZG9jdW1lbnQgdGhlIHJlYWwgbWVjaGFuaXNtIGluIHRoZSBkb2NzdHJpbmcgbm90ZSByYXRoZXIgdGhhblxuICogaW1wbHlpbmcgdGhlIHBsYWluIFR5cGVTY3JpcHQgYG51bGxgIGxpdGVyYWwgaXMgYWNjZXB0ZWQ6IHRoZSB0cmFpbGluZ1xuICogY2FzZSBjYW4gYWxzbyBqdXN0IGJlIG9taXR0ZWQsIHRoZSBtaWQtcG9zaXRpb24gY2FzZSBjYW4ndCBiZSBvbWl0dGVkIGF0XG4gKiBhbGwgKGpzaWkgY2FuJ3QgZXhwcmVzcyBcIm9wdGlvbmFsIGJ1dCBub3QgdHJhaWxpbmdcIikuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5TnVsbGFiaWxpdHkoXG4gIHBhcmFtZXRlcnM6IEZ1bmN0aW9uUGFyYW1ldGVyW10sXG4gIG1vZGVsczogSW50ZXJuYWxQYXJhbWV0ZXJNb2RlbFtdLFxuKTogSW50ZXJuYWxQYXJhbWV0ZXJNb2RlbFtdIHtcbiAgY29uc3QgdHJhaWxpbmdDb21wYXRpYmxlID0gbmV3IEFycmF5KHBhcmFtZXRlcnMubGVuZ3RoKS5maWxsKGZhbHNlKTtcbiAgbGV0IGFsbE51bGxhYmxlU29GYXIgPSB0cnVlO1xuICBmb3IgKGxldCBpID0gcGFyYW1ldGVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGFsbE51bGxhYmxlU29GYXIgPSBhbGxOdWxsYWJsZVNvRmFyICYmIHBhcmFtZXRlcnNbaV0uaXNfbnVsbGFibGUgPT09IHRydWU7XG4gICAgdHJhaWxpbmdDb21wYXRpYmxlW2ldID0gYWxsTnVsbGFibGVTb0ZhcjtcbiAgfVxuXG4gIHJldHVybiBtb2RlbHMubWFwKChtb2RlbCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzW2luZGV4XTtcbiAgICBpZiAoIXBhcmFtZXRlci5pc19udWxsYWJsZSkgcmV0dXJuIG1vZGVsO1xuXG4gICAgY29uc3QgeyB0c1R5cGUsIGRvY3N0cmluZ1R5cGUgfSA9IHdpdGhOdWxsYWJsZVJlc29sdmFibGVVbmlvbihtb2RlbCk7XG4gICAgY29uc3QgbnVsbGFiaWxpdHlOb3RlID0gdHJhaWxpbmdDb21wYXRpYmxlW2luZGV4XVxuICAgICAgPyBcIk9taXQgb3IgcGFzcyBjZGt0bi5Ub2tlbi5udWxsVmFsdWUoKSB0byByZW5kZXIgdGhlIFRlcnJhZm9ybSBudWxsIGtleXdvcmQuXCJcbiAgICAgIDogXCJQYXNzIGNka3RuLlRva2VuLm51bGxWYWx1ZSgpIGZvciBhbiBleHBsaWNpdCBUZXJyYWZvcm0gbnVsbC5cIjtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5tb2RlbCxcbiAgICAgIC4uLih0cmFpbGluZ0NvbXBhdGlibGVbaW5kZXhdID8geyBvcHRpb25hbDogdHJ1ZSB9IDoge30pLFxuICAgICAgdHNUeXBlLFxuICAgICAgZG9jc3RyaW5nVHlwZSxcbiAgICAgIGRvY3N0cmluZ05vdGU6IFttb2RlbC5kb2NzdHJpbmdOb3RlLCBudWxsYWJpbGl0eU5vdGVdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oXCIgXCIpLFxuICAgIH07XG4gIH0pO1xufVxuXG4vKipcbiAqIE1hcHMgYSBwcm92aWRlciBmdW5jdGlvbidzIGRlY2xhcmVkIHJldHVybiB0eXBlIHRvIHRoZSBqc2lpLXNhZmVcbiAqIFR5cGVTY3JpcHQgcmV0dXJuIHR5cGUsIHRoZSBgQHJldHVybnNgIEpTRG9jIHR5cGUsIGFuZCB0aGUgZXhwcmVzc2lvblxuICogdGhhdCB1bndyYXBzIHRoZSBgVGVycmFmb3JtUHJvdmlkZXJGdW5jdGlvbi5pbnZva2UoLi4uKWAgYElSZXNvbHZhYmxlYFxuICogaW50byBpdC5cbiAqXG4gKiBqc2lpIHJldHVybiBwb3NpdGlvbnMgY2FuJ3QgdXNlIHRoZSBgVCB8IGNka3RuLklSZXNvbHZhYmxlYCB1bmlvbiB0aGF0XG4gKiBwYXJhbWV0ZXJzIGNhbiAoc2VlIGBtYXBQYXJhbWV0ZXJUeXBlYCksIHNvIGV2ZXJ5IHNoYXBlIHRoYXQgY2FuJ3QgYmVcbiAqIGxvc3NsZXNzbHkgdW53cmFwcGVkIHRocm91Z2ggYW4gYGFzWHh4YCBUb2tlbiBoZWxwZXIgZmFsbHMgYmFjayB0byB0aGVcbiAqIHBsYWluIGBjZGt0bi5JUmVzb2x2YWJsZWAgcHJvZHVjZWQgYnkgYGludm9rZSgpYCBpdHNlbGYsIHVud3JhcHBlZC5cbiAqIFByb3ZpZGVyIGZ1bmN0aW9ucyBmcmVxdWVudGx5IHJldHVybiBvYmplY3RzIChlLmcuIGV2ZXJ5IGZ1bmN0aW9uIGluIHRoZVxuICogYHRpbWVgIHByb3ZpZGVyKSwgc28gLSB1bmxpa2UgYnVpbHQtaW4gYEZuLipgIGZ1bmN0aW9ucyAtIHRoZSBvYmplY3QgY2FzZVxuICogaXMgYSBwcmltYXJ5IHBhdGgsIG5vdCBhbiBlcnJvcjogaXQgaXMgdHJlYXRlZCB0aGUgc2FtZSBhc1xuICogYGR5bmFtaWNgL2EgYGxpc3RgL2BzZXRgIG9mIGFueXRoaW5nIG90aGVyIHRoYW4gYHN0cmluZ2AvYG51bWJlcmAgKG5vXG4gKiBgYXNBbnlMaXN0YCBUb2tlbiBoZWxwZXIgZXhpc3RzKSwgYW5kIHJldHVybmVkIGFzIHRoZSBSQVcgYGludm9rZSgpYFxuICogcmVzdWx0LiBgbWFwYCByZXR1cm5zLCB1bmxpa2UgdGhvc2UsIERPIGhhdmUgYSBmdWxsIHNldCBvZiB0eXBlZCBUb2tlblxuICogaGVscGVycyAoYGFzU3RyaW5nTWFwYC9gYXNOdW1iZXJNYXBgL2Bhc0Jvb2xlYW5NYXBgL2Bhc0FueU1hcGApLCBzbyBldmVyeVxuICogYG1hcGAgc2hhcGUgZ2V0cyBhbiBhY3R1YWwgdHlwZWQgcmVjb3JkIHJldHVybiBpbnN0ZWFkIG9mIGZhbGxpbmcgYmFjayB0b1xuICogYGNka3RuLklSZXNvbHZhYmxlYC5cbiAqXG4gKiBXaGVuZXZlciB0aGUgZGVjbGFyZWQgcmV0dXJuIHR5cGUgSVMgYGNka3RuLklSZXNvbHZhYmxlYCAobm90IGBhbnlgKTpcbiAqIHVubGlrZSBgaGVscGVycy50c2AgYGFzQW55YCwgdGhpcyBtdXN0IE5PVCBnbyB0aHJvdWdoXG4gKiBgY2RrdG4uVG9rZW4uYXNTdHJpbmcoLi4uKWAgLSBgVG9rZW4uYXNTdHJpbmcoKWAgcHJvZHVjZXMgYW4gZW5jb2RlZFxuICogc3RyaW5nIHRva2VuIHRoYXQgYFRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoKWAgZG9lcyBub3QgcmVjb2duaXplLCBzb1xuICogZ2VuZXJhdGVkIHN0cnVjdCBzZXR0ZXJzIChlLmcuIGFuIGBPdXRwdXRSZWZlcmVuY2VgIGBpbnRlcm5hbFZhbHVlYCkgdHJlYXRcbiAqIGl0IGFzIGEgcGxhaW4gb2JqZWN0IHdpdGggbm8ga25vd24ga2V5cyBhbmQgdGhlIGF0dHJpYnV0ZSBzaWxlbnRseVxuICogdmFuaXNoZXMgZnJvbSBzeW50aCBvdXRwdXQuIFRoZSByYXcgYElSZXNvbHZhYmxlYCBmcm9tIGBpbnZva2UoKWAgSVNcbiAqIHJlY29nbml6ZWQgYnkgYFRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoKWAgYW5kIHJlc29sdmVzIGNvcnJlY3RseS5cbiAqIERlY2xhcmluZyBpdCBhcyBgY2RrdG4uSVJlc29sdmFibGVgIGluc3RlYWQgb2YgYGFueWAgYWxzbyBnaXZlcyBjYWxsZXJzXG4gKiByZWFsIHR5cGUgc2FmZXR5OiBgYW55YCBsZXQgYSBjYWxsZXIgd3JpdGUgYHJlc3VsdC5ob3Vyc2Agb24gYSB0b2tlbiB3aXRoXG4gKiBubyBjb21waWxlLXRpbWUgZmVlZGJhY2ssIHNpbGVudGx5IHByb2R1Y2luZyBgdW5kZWZpbmVkYCBhdCBydW50aW1lO1xuICogYElSZXNvbHZhYmxlYCBoYXMgbm8gc3VjaCBwcm9wZXJ0eSBhbmQgZm9yY2VzIHRoZSBjYWxsZXIgdGhyb3VnaFxuICogYGNka3RuLlRva2VuYC90aGUgcHJvdmlkZXIncyBzdHJ1Y3QgdHlwZXMgaW5zdGVhZC4gYGludm9rZSgpYCBhbHJlYWR5XG4gKiByZXR1cm5zIGBJUmVzb2x2YWJsZWAsIHNvIG5vIGNhc3QgaXMgbmVlZGVkIHRvIHJldHVybiBpdCBhc1xuICogYGNka3RuLklSZXNvbHZhYmxlYC5cbiAqL1xuZnVuY3Rpb24gbWFwUmV0dXJuVHlwZShyZXR1cm5UeXBlOiBBdHRyaWJ1dGVUeXBlKToge1xuICB0c1R5cGU6IHN0cmluZztcbiAgZG9jc3RyaW5nVHlwZTogc3RyaW5nO1xuICBkb2NzdHJpbmdOb3RlPzogc3RyaW5nO1xuICB3cmFwUmV0dXJuOiAoaW52b2tlRXhwcmVzc2lvbjogc3RyaW5nKSA9PiBzdHJpbmc7XG59IHtcbiAgaWYgKHJldHVyblR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIHdyYXBSZXR1cm46IChleHByKSA9PiBgY2RrdG4uVG9rZW4uYXNTdHJpbmcoJHtleHByfSlgLFxuICAgIH07XG4gIH1cbiAgaWYgKHJldHVyblR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHNUeXBlOiBcIm51bWJlclwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogXCJudW1iZXJcIixcbiAgICAgIHdyYXBSZXR1cm46IChleHByKSA9PiBgY2RrdG4uVG9rZW4uYXNOdW1iZXIoJHtleHByfSlgLFxuICAgIH07XG4gIH1cbiAgaWYgKHJldHVyblR5cGUgPT09IFwiYm9vbFwiKSB7XG4gICAgLy8gQm9vbGVhbnMgY2FuJ3QgYmUgcmVwcmVzZW50ZWQgYXMgdG9rZW5zIChzZWUgaGVscGVycy50cyBhc0Jvb2xlYW4pOlxuICAgIC8vIHJldHVybiB0aGUgSVJlc29sdmFibGUgcHJvZHVjZWQgYnkgaW52b2tlKCkgdW53cmFwcGVkLiBUaGUgZG9jc3RyaW5nXG4gICAgLy8gc3RpbGwgZG9jdW1lbnRzIHRoZSByZWFsIGNvbmNlcHR1YWwgc2hhcGUuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJjZGt0bi5JUmVzb2x2YWJsZVwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogXCJib29sZWFuIHwgSVJlc29sdmFibGVcIixcbiAgICAgIHdyYXBSZXR1cm46IChleHByKSA9PiBleHByLFxuICAgIH07XG4gIH1cbiAgaWYgKHJldHVyblR5cGUgPT09IFwiZHluYW1pY1wiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogXCJjZGt0bi5JUmVzb2x2YWJsZVwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogXCJhbnlcIixcbiAgICAgIHdyYXBSZXR1cm46IChleHByKSA9PiBleHByLFxuICAgIH07XG4gIH1cbiAgaWYgKFxuICAgIEFycmF5LmlzQXJyYXkocmV0dXJuVHlwZSkgJiZcbiAgICAocmV0dXJuVHlwZVswXSA9PT0gXCJsaXN0XCIgfHwgcmV0dXJuVHlwZVswXSA9PT0gXCJzZXRcIilcbiAgKSB7XG4gICAgLy8gU2FtZSBkb2N1bWVudGF0aW9uIGNvbnZlbnRpb25zIGFzIGBtYXBMaXN0T3JTZXRQYXJhbWV0ZXJUeXBlYDogdGhlXG4gICAgLy8gbm90YXRpb24gKGBBcnJheTwuLi4+YC9gU2V0PC4uLj5gKSBjYXJyaWVzIHRoZSBUZXJyYWZvcm0gY29sbGVjdGlvblxuICAgIC8vIHN0cnVjdHVyZSByZWN1cnNpdmVseSwgYW5kIG9ubHkgc2V0cyBnZXQgYSBwcm9zZSBub3RlLlxuICAgIGNvbnN0IHdyYXBwZXIgPSByZXR1cm5UeXBlWzBdID09PSBcInNldFwiID8gXCJTZXRcIiA6IFwiQXJyYXlcIjtcbiAgICBjb25zdCBkb2NzdHJpbmdOb3RlID1cbiAgICAgIHJldHVyblR5cGVbMF0gPT09IFwic2V0XCJcbiAgICAgICAgPyBcIlRlcnJhZm9ybSBzZXQ7IG9yZGVyaW5nIGlzIG5vdCBndWFyYW50ZWVkIGFuZCBkdXBsaWNhdGUgdmFsdWVzIGFyZSByZW1vdmVkLlwiXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGVsZW1lbnQgPSByZXR1cm5UeXBlWzFdO1xuICAgIGlmIChlbGVtZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0c1R5cGU6IFwic3RyaW5nW11cIixcbiAgICAgICAgZG9jc3RyaW5nVHlwZTogYCR7d3JhcHBlcn08c3RyaW5nPmAsXG4gICAgICAgIGRvY3N0cmluZ05vdGUsXG4gICAgICAgIHdyYXBSZXR1cm46IChleHByKSA9PiBgY2RrdG4uVG9rZW4uYXNMaXN0KCR7ZXhwcn0pYCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChlbGVtZW50ID09PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0c1R5cGU6IFwibnVtYmVyW11cIixcbiAgICAgICAgZG9jc3RyaW5nVHlwZTogYCR7d3JhcHBlcn08bnVtYmVyPmAsXG4gICAgICAgIGRvY3N0cmluZ05vdGUsXG4gICAgICAgIHdyYXBSZXR1cm46IChleHByKSA9PiBgY2RrdG4uVG9rZW4uYXNOdW1iZXJMaXN0KCR7ZXhwcn0pYCxcbiAgICAgIH07XG4gICAgfVxuICAgIC8vIGxpc3Qvc2V0IG9mIGFueXRoaW5nIGVsc2U6IHRoZXJlIGlzIG5vIGBhc0FueUxpc3RgIFRva2VuIGhlbHBlciAtXG4gICAgLy8gZmFsbCBiYWNrIHRvIHRoZSByYXcgSVJlc29sdmFibGUsIHNhbWUgcmVhc29uaW5nIGFzIGR5bmFtaWMvb2JqZWN0XG4gICAgLy8gYmVsb3csIGJ1dCBrZWVwIHRoZSBkb2NzdHJpbmcgaG9uZXN0IGFib3V0IHRoZSByZWFsIGVsZW1lbnQgc2hhcGVcbiAgICAvLyAocmV1c2luZyBtYXBQYXJhbWV0ZXJUeXBlIHB1cmVseSBmb3IgaXRzIGRlc2NyaXB0aXZlIGRvY3N0cmluZ1R5cGUgLVxuICAgIC8vIGl0cyB0c1R5cGUvYWNjZXB0c1Jlc29sdmFibGVBbHJlYWR5IGFyZSBpcnJlbGV2YW50IGhlcmUpLlxuICAgIHJldHVybiB7XG4gICAgICB0c1R5cGU6IFwiY2RrdG4uSVJlc29sdmFibGVcIixcbiAgICAgIGRvY3N0cmluZ1R5cGU6IGAke3dyYXBwZXJ9PCR7bWFwUGFyYW1ldGVyVHlwZShlbGVtZW50KS5kb2NzdHJpbmdUeXBlfT5gLFxuICAgICAgZG9jc3RyaW5nTm90ZSxcbiAgICAgIHdyYXBSZXR1cm46IChleHByKSA9PiBleHByLFxuICAgIH07XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkocmV0dXJuVHlwZSkgJiYgcmV0dXJuVHlwZVswXSA9PT0gXCJtYXBcIikge1xuICAgIC8vIFVubGlrZSBsaXN0L3NldCBhbmQgb2JqZWN0L2R5bmFtaWMsIGV2ZXJ5IGBtYXBgIHNoYXBlIGhhcyBhIG1hdGNoaW5nXG4gICAgLy8gdHlwZWQgVG9rZW4gaGVscGVyIChzZWUgdG9rZW4udHMpLCBzbyBpdCBnZXRzIGEgcmVhbCB0eXBlZCByZWNvcmRcbiAgICAvLyByZXR1cm4gaW5zdGVhZCBvZiBmYWxsaW5nIGJhY2sgdG8gdGhlIHJhdyBJUmVzb2x2YWJsZS5cbiAgICBjb25zdCBlbGVtZW50ID0gcmV0dXJuVHlwZVsxXTtcbiAgICBpZiAoZWxlbWVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHNUeXBlOiBcInsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cIixcbiAgICAgICAgZG9jc3RyaW5nVHlwZTogXCJ7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XCIsXG4gICAgICAgIHdyYXBSZXR1cm46IChleHByKSA9PiBgY2RrdG4uVG9rZW4uYXNTdHJpbmdNYXAoJHtleHByfSlgLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRzVHlwZTogXCJ7IFtrZXk6IHN0cmluZ106IG51bWJlciB9XCIsXG4gICAgICAgIGRvY3N0cmluZ1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiBudW1iZXIgfVwiLFxuICAgICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gYGNka3RuLlRva2VuLmFzTnVtYmVyTWFwKCR7ZXhwcn0pYCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChlbGVtZW50ID09PSBcImJvb2xcIikge1xuICAgICAgLy8gVG9rZW4uYXNCb29sZWFuTWFwJ3MgZGVjbGFyZWQgcmV0dXJuIHR5cGUgaXMgYHsgW2tleTogc3RyaW5nXTpcbiAgICAgIC8vIGJvb2xlYW4gfWAgKHNlZSB0b2tlbi50cykgLSB1c2VkIHZlcmJhdGltLCBub3QgdW5pb25lZCB3aXRoXG4gICAgICAvLyBJUmVzb2x2YWJsZTogdGhlIG1hcCdzIGluZGl2aWR1YWwgZW50cmllcyBhcmUgcGxhaW4gYm9vbGVhbnMgb25jZVxuICAgICAgLy8gdW53cmFwcGVkIGJ5IHRoZSBoZWxwZXIuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0c1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiBib29sZWFuIH1cIixcbiAgICAgICAgZG9jc3RyaW5nVHlwZTogXCJ7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfVwiLFxuICAgICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gYGNka3RuLlRva2VuLmFzQm9vbGVhbk1hcCgke2V4cHJ9KWAsXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyBtYXAgb2YgYW55dGhpbmcgZWxzZSAob2JqZWN0L2R5bmFtaWMvbmVzdGVkIGNvbGxlY3Rpb24pOiBhc0FueU1hcFxuICAgIC8vIHN0aWxsIGdpdmVzIGEgdHlwZWQgKGlmIGxvb3NlbHktdHlwZWQpIHJlY29yZCByYXRoZXIgdGhhbiBmYWxsaW5nXG4gICAgLy8gYmFjayB0byB0aGUgcmF3IElSZXNvbHZhYmxlLlxuICAgIHJldHVybiB7XG4gICAgICB0c1R5cGU6IFwieyBba2V5OiBzdHJpbmddOiBhbnkgfVwiLFxuICAgICAgZG9jc3RyaW5nVHlwZTogXCJ7IFtrZXk6IHN0cmluZ106IGFueSB9XCIsXG4gICAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gYGNka3RuLlRva2VuLmFzQW55TWFwKCR7ZXhwcn0pYCxcbiAgICB9O1xuICB9XG4gIC8vIG9iamVjdDogbm8gc3RydWN0dXJhbCB0eXBpbmcgZm9yIGFyYml0cmFyeSBwcm92aWRlciBmdW5jdGlvbiByZXN1bHRzIC1cbiAgLy8gZGVjbGFyZWQgYXMgYGNka3RuLklSZXNvbHZhYmxlYCwgYW5kIHJldHVybmVkIGFzIHRoZSByYXcgYElSZXNvbHZhYmxlYFxuICAvLyBmcm9tIGludm9rZSgpIChOT1Qgd3JhcHBlZCBpbiBgY2RrdG4uVG9rZW4uYXNTdHJpbmcoLi4uKWAsIHdoaWNoIHdvdWxkXG4gIC8vIG1ha2UgdGhlIHJlc3VsdCB1bnJlY29nbml6YWJsZSB0byBgVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZSgpYFxuICAvLyBkb3duc3RyZWFtIC0gc2VlIHRoZSBtYXBSZXR1cm5UeXBlIGRvY3N0cmluZyBhYm92ZSkuXG4gIHJldHVybiB7XG4gICAgdHNUeXBlOiBcImNka3RuLklSZXNvbHZhYmxlXCIsXG4gICAgZG9jc3RyaW5nVHlwZTogXCJvYmplY3RcIixcbiAgICB3cmFwUmV0dXJuOiAoZXhwcikgPT4gZXhwcixcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRGdW5jdGlvbk1vZGVsKFxuICB0ZXJyYWZvcm1OYW1lOiBzdHJpbmcsXG4gIHNpZ25hdHVyZTogRnVuY3Rpb25TaWduYXR1cmUsXG4pOiBQcm92aWRlckZ1bmN0aW9uTW9kZWwge1xuICBjb25zdCB7XG4gICAgdHNUeXBlOiByZXR1cm5Uc1R5cGUsXG4gICAgZG9jc3RyaW5nVHlwZTogcmV0dXJuRG9jc3RyaW5nVHlwZSxcbiAgICBkb2NzdHJpbmdOb3RlOiByZXR1cm5Eb2NzdHJpbmdOb3RlLFxuICAgIHdyYXBSZXR1cm4sXG4gIH0gPSBtYXBSZXR1cm5UeXBlKHNpZ25hdHVyZS5yZXR1cm5fdHlwZSk7XG5cbiAgY29uc3QgcmF3UGFyYW1ldGVycyA9IHNpZ25hdHVyZS5wYXJhbWV0ZXJzID8/IFtdO1xuICBjb25zdCBwYXJhbWV0ZXJzID0gYXBwbHlOdWxsYWJpbGl0eShcbiAgICByYXdQYXJhbWV0ZXJzLFxuICAgIHJhd1BhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIsIGluZGV4KSA9PlxuICAgICAgYnVpbGRQYXJhbWV0ZXJNb2RlbChwYXJhbWV0ZXIsIGBhcmcke2luZGV4fWApLFxuICAgICksXG4gICk7XG5cbiAgbGV0IHZhcmlhZGljUGFyYW1ldGVyOiBJbnRlcm5hbFBhcmFtZXRlck1vZGVsIHwgdW5kZWZpbmVkO1xuICBpZiAoc2lnbmF0dXJlLnZhcmlhZGljX3BhcmFtZXRlcikge1xuICAgIGNvbnN0IGVsZW1lbnRNb2RlbCA9IGJ1aWxkUGFyYW1ldGVyTW9kZWwoXG4gICAgICBzaWduYXR1cmUudmFyaWFkaWNfcGFyYW1ldGVyLFxuICAgICAgXCJ2YWx1ZXNcIixcbiAgICApO1xuICAgIGlmIChzaWduYXR1cmUudmFyaWFkaWNfcGFyYW1ldGVyLmlzX251bGxhYmxlKSB7XG4gICAgICAvLyBBIG51bGxhYmxlIHZhcmlhZGljIHBhcmFtZXRlcjoganNpaSBjYW4ndCBleHByZXNzIFwiZWFjaCBpbmRpdmlkdWFsXG4gICAgICAvLyBhcmd1bWVudCBtYXkgaW5kZXBlbmRlbnRseSBiZSBudWxsXCIgb24gdGhlIGdlbmVyYXRlZCBgdmFsdWVzOlxuICAgICAgLy8gQXJyYXk8VD5gIGFycmF5IHBhcmFtZXRlciAoaXQncyBhbiBvcmRpbmFyeSBhcnJheSBwYXJhbWV0ZXIsIG5vdCBhXG4gICAgICAvLyB0cnVlIHJlc3Qvc3ByZWFkIHBhcmFtZXRlciAtIG9ubHkgdGhlIGludm9rZSgpIGNhbGwgc2l0ZSBzcHJlYWRzXG4gICAgICAvLyBpdCksIHNvIGV2ZXJ5IGVsZW1lbnQncyB0eXBlIGluc3RlYWQgd2lkZW5zIHRvIGFsc28gYWNjZXB0IGFuXG4gICAgICAvLyBleHBsaWNpdCBgY2RrdG4uVG9rZW4ubnVsbFZhbHVlKClgLCB0aGUgc2FtZSB3YXkgYSBmaXhlZCBudWxsYWJsZVxuICAgICAgLy8gcGFyYW1ldGVyIGRvZXMgKHNlZSBgd2l0aE51bGxhYmxlUmVzb2x2YWJsZVVuaW9uYCk7IHRoZSBkb2NzdHJpbmdcbiAgICAgIC8vIGtlZXBzIHRoZSBob25lc3QgcGVyLWVsZW1lbnQgdHlwZSBwbHVzIHRoYXQgZ3VpZGFuY2UgaW4gaXRzIG5vdGUuXG4gICAgICBjb25zdCB7IHRzVHlwZSwgZG9jc3RyaW5nVHlwZSB9ID1cbiAgICAgICAgd2l0aE51bGxhYmxlUmVzb2x2YWJsZVVuaW9uKGVsZW1lbnRNb2RlbCk7XG4gICAgICB2YXJpYWRpY1BhcmFtZXRlciA9IHtcbiAgICAgICAgLi4uZWxlbWVudE1vZGVsLFxuICAgICAgICB0c1R5cGUsXG4gICAgICAgIGRvY3N0cmluZ1R5cGU6IGBBcnJheTwke2RvY3N0cmluZ1R5cGV9PmAsXG4gICAgICAgIGRvY3N0cmluZ05vdGU6IFtcbiAgICAgICAgICBlbGVtZW50TW9kZWwuZG9jc3RyaW5nTm90ZSxcbiAgICAgICAgICBcIlBhc3MgY2RrdG4uVG9rZW4ubnVsbFZhbHVlKCkgZm9yIGFuIGV4cGxpY2l0IFRlcnJhZm9ybSBudWxsLlwiLFxuICAgICAgICBdXG4gICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgIC5qb2luKFwiIFwiKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vbi1udWxsYWJsZTogdGhlIGRvY3N0cmluZyB3cmFwcyB0aGUgZWxlbWVudCdzIGRvY3N0cmluZyB0eXBlIGluXG4gICAgICAvLyBgQXJyYXk8Li4uPmAgaGVyZSAocmF0aGVyIHRoYW4gaW4gdGhlIGVtaXR0ZXIpLCBzbyBldmVyeSBwYXJhbWV0ZXJcbiAgICAgIC8vIC0gZml4ZWQgb3IgdmFyaWFkaWMgLSBjYW4gc2hhcmUgb25lIGBAcGFyYW0ge2RvY3N0cmluZ1R5cGV9YFxuICAgICAgLy8gZW1pc3Npb24gcGF0aC5cbiAgICAgIHZhcmlhZGljUGFyYW1ldGVyID0ge1xuICAgICAgICAuLi5lbGVtZW50TW9kZWwsXG4gICAgICAgIGRvY3N0cmluZ1R5cGU6IGBBcnJheTwke2VsZW1lbnRNb2RlbC5kb2NzdHJpbmdUeXBlfT5gLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRlcnJhZm9ybU5hbWUsXG4gICAgbWV0aG9kTmFtZTogc2FuaXRpemVNZXRob2ROYW1lKHRlcnJhZm9ybU5hbWUpLFxuICAgIGRlc2NyaXB0aW9uOiBzaWduYXR1cmUuZGVzY3JpcHRpb24sXG4gICAgc3VtbWFyeTogc2lnbmF0dXJlLnN1bW1hcnksXG4gICAgZGVwcmVjYXRpb25NZXNzYWdlOiBzaWduYXR1cmUuZGVwcmVjYXRpb25fbWVzc2FnZSxcbiAgICByZXR1cm5Uc1R5cGUsXG4gICAgcmV0dXJuRG9jc3RyaW5nVHlwZSxcbiAgICByZXR1cm5Eb2NzdHJpbmdOb3RlLFxuICAgIHdyYXBSZXR1cm4sXG4gICAgcGFyYW1ldGVycyxcbiAgICB2YXJpYWRpY1BhcmFtZXRlcixcbiAgfTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgaWYgdHdvIGZ1bmN0aW9ucyBpbiB0aGUgc2FtZSBwcm92aWRlciBzYW5pdGl6ZSB0byB0aGUgc2FtZVxuICogZ2VuZXJhdGVkIG1ldGhvZCBuYW1lLiBUZXJyYWZvcm0gZnVuY3Rpb24gbmFtZXMgYXJlIHVuaXF1ZSwgYnV0XG4gKiBgc2FuaXRpemVNZXRob2ROYW1lYCAoY2FtZWxDYXNpbmcsIGBsZW5ndGhgIC0+IGBsZW5ndGhPZmApIGlzIG5vdFxuICogbmVjZXNzYXJpbHkgaW5qZWN0aXZlLCBzbyBhIHJlYWwgLSBpZiB1bmxpa2VseSAtIHByb3ZpZGVyIHNjaGVtYSBjb3VsZFxuICogc3RpbGwgcHJvZHVjZSBhIGR1cGxpY2F0ZSBtZXRob2QuIEdlbmVyYXRpb24gaXMgYWJvcnRlZCByYXRoZXIgdGhhblxuICogc2lsZW50bHkgZW1pdHRpbmcgb25lIG1ldGhvZCB0aGF0IHNoYWRvd3MgdGhlIG90aGVyLlxuICovXG5mdW5jdGlvbiBhc3NlcnROb01ldGhvZE5hbWVDb2xsaXNpb25zKFxuICBwcm92aWRlck5hbWU6IHN0cmluZyxcbiAgZnVuY3Rpb25zOiBQcm92aWRlckZ1bmN0aW9uTW9kZWxbXSxcbik6IHZvaWQge1xuICBjb25zdCBzZWVuQnkgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpOyAvLyBtZXRob2ROYW1lIC0+IHRlcnJhZm9ybU5hbWVcblxuICBmb3IgKGNvbnN0IGZuIG9mIGZ1bmN0aW9ucykge1xuICAgIGNvbnN0IGV4aXN0aW5nVGVycmFmb3JtTmFtZSA9IHNlZW5CeS5nZXQoZm4ubWV0aG9kTmFtZSk7XG4gICAgaWYgKGV4aXN0aW5nVGVycmFmb3JtTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQcm92aWRlciBcIiR7cHJvdmlkZXJOYW1lfVwiIGRlY2xhcmVzIHR3byBwcm92aWRlci1kZWZpbmVkIGZ1bmN0aW9ucywgYCArXG4gICAgICAgICAgYFwiJHtleGlzdGluZ1RlcnJhZm9ybU5hbWV9XCIgYW5kIFwiJHtmbi50ZXJyYWZvcm1OYW1lfVwiLCB0aGF0IGJvdGggYCArXG4gICAgICAgICAgYHNhbml0aXplIHRvIHRoZSBnZW5lcmF0ZWQgbWV0aG9kIG5hbWUgXCIke2ZuLm1ldGhvZE5hbWV9XCIuIGAgK1xuICAgICAgICAgIGBHZW5lcmF0aW9uIGFib3J0ZWQgdG8gYXZvaWQgc2lsZW50bHkgb3ZlcndyaXRpbmcgb25lIG1ldGhvZCB3aXRoIGAgK1xuICAgICAgICAgIGB0aGUgb3RoZXIgLSBwbGVhc2UgcmVwb3J0IHRoaXMgYXMgYW4gaXNzdWUuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHNlZW5CeS5zZXQoZm4ubWV0aG9kTmFtZSwgZm4udGVycmFmb3JtTmFtZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd3MgaWYgYSBmdW5jdGlvbidzIHNhbml0aXplZCBgbWV0aG9kTmFtZWAgbGFuZHMgb24gYSBtZW1iZXIgbmFtZVxuICogYFByb3ZpZGVyRnVuY3Rpb25zRW1pdHRlcmAgYWxyZWFkeSBwdXRzIG9uIGV2ZXJ5IHdyYXBwZXIgY2xhc3MgKHNlZVxuICogYFJFU0VSVkVEX1dSQVBQRVJfTUVNQkVSX05BTUVTYCkuIFVubGlrZSBgYXNzZXJ0Tm9NZXRob2ROYW1lQ29sbGlzaW9uc2AsXG4gKiB3aGljaCBvbmx5IGNhdGNoZXMgdHdvICpmdW5jdGlvbnMqIGNvbGxpZGluZyB3aXRoIGVhY2ggb3RoZXIsIHRoaXMgY2F0Y2hlc1xuICogYSBzaW5nbGUgZnVuY3Rpb24gY29sbGlkaW5nIHdpdGggdGhlIHdyYXBwZXIgY2xhc3MgaXRzZWxmIC0gZS5nLiBhXG4gKiBUZXJyYWZvcm0gZnVuY3Rpb24gbGl0ZXJhbGx5IG5hbWVkIFwiY29uc3RydWN0b3JcIiwgb3IgXCJwcm92aWRlcl9sb2NhbF9uYW1lXCJcbiAqIGNhbWVsQ2FzaW5nIHRvIFwicHJvdmlkZXJMb2NhbE5hbWVcIi5cbiAqXG4gKiBUaGlzIGludGVudGlvbmFsbHkgZG9lcyBOT1QgYWxzbyBjaGVjayBzYW5pdGl6ZWQgKnBhcmFtZXRlciogbmFtZXMgYWdhaW5zdFxuICogXCJwcm92aWRlckxvY2FsTmFtZVwiOiBwYXJhbWV0ZXJzIGFyZSBkZWNsYXJlZCBpbiB0aGUgZ2VuZXJhdGVkIG1ldGhvZCdzIG93blxuICogc2NvcGUsIG5vdCB0aGUgY2xhc3Mncywgc28gYSBwYXJhbWV0ZXIgbmFtZWQgYHByb3ZpZGVyTG9jYWxOYW1lYCBzaGFkb3dzXG4gKiB0aGUgY2xhc3MgZmllbGQgd2l0aGluIHRoYXQgbWV0aG9kIGJvZHkgd2l0aG91dCBjb2xsaWRpbmcgd2l0aCBpdCAodmFsaWQsXG4gKiBpZiBjb25mdXNpbmcsIFR5cGVTY3JpcHQpIC0gdGhlcmUgaXMgbm90aGluZyB0byBhYm9ydCBnZW5lcmF0aW9uIG92ZXIuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vUmVzZXJ2ZWRXcmFwcGVyTWVtYmVyQ29sbGlzaW9ucyhcbiAgcHJvdmlkZXJOYW1lOiBzdHJpbmcsXG4gIGZ1bmN0aW9uczogUHJvdmlkZXJGdW5jdGlvbk1vZGVsW10sXG4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBmbiBvZiBmdW5jdGlvbnMpIHtcbiAgICBpZiAoUkVTRVJWRURfV1JBUFBFUl9NRU1CRVJfTkFNRVMuaGFzKGZuLm1ldGhvZE5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQcm92aWRlciBcIiR7cHJvdmlkZXJOYW1lfVwiIGRlY2xhcmVzIGEgcHJvdmlkZXItZGVmaW5lZCBmdW5jdGlvbiBgICtcbiAgICAgICAgICBgXCIke2ZuLnRlcnJhZm9ybU5hbWV9XCIgdGhhdCBzYW5pdGl6ZXMgdG8gdGhlIGdlbmVyYXRlZCBtZXRob2QgbmFtZSBgICtcbiAgICAgICAgICBgXCIke2ZuLm1ldGhvZE5hbWV9XCIsIHdoaWNoIGNvbGxpZGVzIHdpdGggYSBtZW1iZXIgdGhhdCBgICtcbiAgICAgICAgICBgUHJvdmlkZXJGdW5jdGlvbnNFbWl0dGVyIGFscmVhZHkgcHV0cyBvbiBldmVyeSBgICtcbiAgICAgICAgICBgXCI8UHJvdmlkZXI+UHJvdmlkZXJGdW5jdGlvbnNcIiB3cmFwcGVyIGNsYXNzICh0aGUgY2xhc3MgYCArXG4gICAgICAgICAgYGNvbnN0cnVjdG9yLCBvciBpdHMgXCJwcm92aWRlckxvY2FsTmFtZVwiIGZpZWxkKS4gR2VuZXJhdGlvbiBgICtcbiAgICAgICAgICBgYWJvcnRlZCB0byBhdm9pZCBlbWl0dGluZyBpbnZhbGlkIFR5cGVTY3JpcHQgb3Igc2lsZW50bHkgYCArXG4gICAgICAgICAgYHNoYWRvd2luZyB0aGF0IG1lbWJlciAtIHBsZWFzZSByZXBvcnQgdGhpcyBhcyBhbiBpc3N1ZS5gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd3MgaWYgdHdvIHBhcmFtZXRlcnMgb2YgdGhlIHNhbWUgZnVuY3Rpb24gKGluY2x1ZGluZyB0aGUgdmFyaWFkaWNcbiAqIHBhcmFtZXRlcikgc2FuaXRpemUgdG8gdGhlIHNhbWUgZ2VuZXJhdGVkIHBhcmFtZXRlciBuYW1lLCBmb3IgdGhlIHNhbWVcbiAqIHJlYXNvbiBhcyBgYXNzZXJ0Tm9NZXRob2ROYW1lQ29sbGlzaW9uc2AgYWJvdmUgYnV0IGF0IHRoZSBwYXJhbWV0ZXIgbGV2ZWwuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vUGFyYW1ldGVyTmFtZUNvbGxpc2lvbnMoXG4gIHByb3ZpZGVyTmFtZTogc3RyaW5nLFxuICBmbjogUHJvdmlkZXJGdW5jdGlvbk1vZGVsLFxuKTogdm9pZCB7XG4gIGNvbnN0IHNlZW5CeSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7IC8vIHNhbml0aXplZCBuYW1lIC0+IHRlcnJhZm9ybU5hbWVcbiAgY29uc3QgYWxsUGFyYW1ldGVycyA9IGZuLnZhcmlhZGljUGFyYW1ldGVyXG4gICAgPyBbLi4uZm4ucGFyYW1ldGVycywgZm4udmFyaWFkaWNQYXJhbWV0ZXJdXG4gICAgOiBmbi5wYXJhbWV0ZXJzO1xuXG4gIGZvciAoY29uc3QgcGFyYW0gb2YgYWxsUGFyYW1ldGVycykge1xuICAgIGNvbnN0IGV4aXN0aW5nVGVycmFmb3JtTmFtZSA9IHNlZW5CeS5nZXQocGFyYW0ubmFtZSk7XG4gICAgaWYgKGV4aXN0aW5nVGVycmFmb3JtTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQcm92aWRlciBcIiR7cHJvdmlkZXJOYW1lfVwiIGZ1bmN0aW9uIFwiJHtmbi50ZXJyYWZvcm1OYW1lfVwiIGRlY2xhcmVzIGAgK1xuICAgICAgICAgIGB0d28gcGFyYW1ldGVycywgXCIke2V4aXN0aW5nVGVycmFmb3JtTmFtZX1cIiBhbmQgYCArXG4gICAgICAgICAgYFwiJHtwYXJhbS50ZXJyYWZvcm1OYW1lfVwiLCB0aGF0IGJvdGggc2FuaXRpemUgdG8gdGhlIGdlbmVyYXRlZCBgICtcbiAgICAgICAgICBgcGFyYW1ldGVyIG5hbWUgXCIke3BhcmFtLm5hbWV9XCIuIEdlbmVyYXRpb24gYWJvcnRlZCB0byBhdm9pZCBgICtcbiAgICAgICAgICBgc2lsZW50bHkgZHJvcHBpbmcgb25lIHBhcmFtZXRlciAtIHBsZWFzZSByZXBvcnQgdGhpcyBhcyBhbiBpc3N1ZS5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgc2VlbkJ5LnNldChwYXJhbS5uYW1lLCBwYXJhbS50ZXJyYWZvcm1OYW1lKTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93cyBpZiB0aGUgcHJvdmlkZXIncyBvd24gY29uZmlnIHNjaGVtYSBkZWNsYXJlcyBhbiBhdHRyaWJ1dGUgd2hvc2VcbiAqIGdlbmVyYXRlZCBwcm9wZXJ0eSBuYW1lIChzZWUgYEF0dHJpYnV0ZU1vZGVsLm5hbWVgIC9cbiAqIGBlc2NhcGVBdHRyaWJ1dGVOYW1lYCkgaXMgZXhhY3RseSBcImZ1bmN0aW9uc1wiLCB3aGlsZSB0aGUgcHJvdmlkZXIgYWxzb1xuICogZGVjbGFyZXMgcHJvdmlkZXItZGVmaW5lZCBmdW5jdGlvbnMuIFRoYXQgY29tYmluYXRpb24gd291bGQgY29sbGlkZSB3aXRoXG4gKiB0aGUgbWVtb2l6ZWQgYGZ1bmN0aW9uc2AgZ2V0dGVyIGBSZXNvdXJjZUVtaXR0ZXJgIGVtaXRzIG9uIHRoZSBwcm92aWRlclxuICogY2xhc3MgKHNlZSBgcmVzb3VyY2UtZW1pdHRlci50c2AncyBgZW1pdEZ1bmN0aW9uc0dldHRlcmApIC0gb25lIHdvdWxkXG4gKiBzaWxlbnRseSBzaGFkb3cgdGhlIG90aGVyLiBTYW1lIGxvdWQtZmFpbHVyZSBjb252ZW50aW9uIGFzXG4gKiBgYXNzZXJ0Tm9NZXRob2ROYW1lQ29sbGlzaW9uc2AvYGFzc2VydE5vUGFyYW1ldGVyTmFtZUNvbGxpc2lvbnNgIGFib3ZlOlxuICogZ2VuZXJhdGlvbiBpcyBhYm9ydGVkIHJhdGhlciB0aGFuIHNpbGVudGx5IHBpY2tpbmcgYSB3aW5uZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnROb0Z1bmN0aW9uc0dldHRlckNvbGxpc2lvbihcbiAgcHJvdmlkZXJOYW1lOiBzdHJpbmcsXG4gIGF0dHJpYnV0ZU5hbWVzOiBzdHJpbmdbXSxcbik6IHZvaWQge1xuICBpZiAoYXR0cmlidXRlTmFtZXMuaW5jbHVkZXMoXCJmdW5jdGlvbnNcIikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgUHJvdmlkZXIgXCIke3Byb3ZpZGVyTmFtZX1cIiBkZWNsYXJlcyBwcm92aWRlci1kZWZpbmVkIGZ1bmN0aW9ucyBhbmQgaXRzIGAgK1xuICAgICAgICBgb3duIGNvbmZpZyBzY2hlbWEgYWxzbyBoYXMgYW4gYXR0cmlidXRlIHRoYXQgZ2VuZXJhdGVzIHRoZSBwcm9wZXJ0eSBgICtcbiAgICAgICAgYG5hbWUgXCJmdW5jdGlvbnNcIiBvbiB0aGUgcHJvdmlkZXIgY2xhc3MuIFRoaXMgY29sbGlkZXMgd2l0aCB0aGUgYCArXG4gICAgICAgIGBnZW5lcmF0ZWQgXCJmdW5jdGlvbnNcIiBnZXR0ZXIgdXNlZCB0byBpbnZva2UgcHJvdmlkZXItZGVmaW5lZCBgICtcbiAgICAgICAgYGZ1bmN0aW9ucy4gR2VuZXJhdGlvbiBhYm9ydGVkIHRvIGF2b2lkIHNpbGVudGx5IHNoYWRvd2luZyBvbmUgd2l0aCBgICtcbiAgICAgICAgYHRoZSBvdGhlciAtIHBsZWFzZSByZXBvcnQgdGhpcyBhcyBhbiBpc3N1ZS5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIG1vZGVsIGZvciBhIHByb3ZpZGVyJ3MgYHByb3ZpZGVyLWZ1bmN0aW9ucy9pbmRleC50c2AgZmlsZSBmcm9tXG4gKiBpdHMgcHJvdmlkZXIgc2NoZW1hIGBmdW5jdGlvbnNgIG1hcC4gUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIHRoZSBwcm92aWRlclxuICogZGVjbGFyZXMgbm8gZnVuY3Rpb25zIC0gY2FsbGVycyBzaG91bGQgc2tpcCBlbWl0dGluZyB0aGUgZmlsZSBlbnRpcmVseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUHJvdmlkZXJGdW5jdGlvbnNNb2RlbChcbiAgcHJvdmlkZXJOYW1lOiBzdHJpbmcsXG4gIGZ1bmN0aW9uczogeyBbbmFtZTogc3RyaW5nXTogRnVuY3Rpb25TaWduYXR1cmUgfSB8IHVuZGVmaW5lZCxcbik6IFByb3ZpZGVyRnVuY3Rpb25zTW9kZWwgfCB1bmRlZmluZWQge1xuICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoZnVuY3Rpb25zID8/IHt9KTtcbiAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IG1hcHBlZEZ1bmN0aW9ucyA9IGVudHJpZXNcbiAgICAuc29ydCgoW2FdLCBbYl0pID0+IGEubG9jYWxlQ29tcGFyZShiKSlcbiAgICAubWFwKChbbmFtZSwgc2lnbmF0dXJlXSkgPT4gYnVpbGRGdW5jdGlvbk1vZGVsKG5hbWUsIHNpZ25hdHVyZSkpO1xuXG4gIGFzc2VydE5vTWV0aG9kTmFtZUNvbGxpc2lvbnMocHJvdmlkZXJOYW1lLCBtYXBwZWRGdW5jdGlvbnMpO1xuICBhc3NlcnROb1Jlc2VydmVkV3JhcHBlck1lbWJlckNvbGxpc2lvbnMocHJvdmlkZXJOYW1lLCBtYXBwZWRGdW5jdGlvbnMpO1xuICBmb3IgKGNvbnN0IGZuIG9mIG1hcHBlZEZ1bmN0aW9ucykge1xuICAgIGFzc2VydE5vUGFyYW1ldGVyTmFtZUNvbGxpc2lvbnMocHJvdmlkZXJOYW1lLCBmbik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHByb3ZpZGVyTmFtZSxcbiAgICBjbGFzc05hbWU6IGAke3RvUGFzY2FsQ2FzZShwcm92aWRlck5hbWUpfVByb3ZpZGVyRnVuY3Rpb25zYCxcbiAgICBmdW5jdGlvbnM6IG1hcHBlZEZ1bmN0aW9ucyxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { FQPN, ProviderName } from "@cdktn/provider-schema";
|
|
2
2
|
import { AttributeModel } from "./attribute-model";
|
|
3
3
|
import { Struct, ConfigStruct } from "./struct";
|
|
4
|
-
import { Schema } from "@cdktn/commons";
|
|
4
|
+
import { Schema, TerraformTargetVersions } from "@cdktn/commons";
|
|
5
5
|
import { ProviderFunctionsModel } from "./provider-function-model";
|
|
6
6
|
export declare const STRUCT_SHARDING_THRESHOLD = 400;
|
|
7
7
|
interface ResourceModelOptions {
|
|
@@ -16,6 +16,7 @@ interface ResourceModelOptions {
|
|
|
16
16
|
schema: Schema;
|
|
17
17
|
terraformSchemaType: string;
|
|
18
18
|
configStructName: string;
|
|
19
|
+
targetVersions?: TerraformTargetVersions;
|
|
19
20
|
}
|
|
20
21
|
type DefinitionPath = string;
|
|
21
22
|
export declare class ResourceModel {
|
|
@@ -25,6 +26,7 @@ export declare class ResourceModel {
|
|
|
25
26
|
baseName: string;
|
|
26
27
|
provider: ProviderName;
|
|
27
28
|
fqpn: FQPN;
|
|
29
|
+
private readonly targetVersions?;
|
|
28
30
|
providerVersionConstraint?: string;
|
|
29
31
|
providerVersion?: string;
|
|
30
32
|
terraformProviderSource?: string;
|
|
@@ -47,6 +49,8 @@ export declare class ResourceModel {
|
|
|
47
49
|
get synthesizableAttributes(): AttributeModel[];
|
|
48
50
|
get importStatements(): string[];
|
|
49
51
|
get schemaAsJson(): string;
|
|
52
|
+
/** Registry that linkToDocs points at, for use in the surrounding prose. */
|
|
53
|
+
get docsRegistryName(): string;
|
|
50
54
|
get linkToDocs(): string;
|
|
51
55
|
get isProvider(): boolean;
|
|
52
56
|
get isDataSource(): boolean;
|
|
@@ -10,6 +10,7 @@ const codemaker_1 = require("codemaker");
|
|
|
10
10
|
const path_1 = __importDefault(require("path"));
|
|
11
11
|
const provider_schema_1 = require("@cdktn/provider-schema");
|
|
12
12
|
const struct_1 = require("./struct");
|
|
13
|
+
const commons_1 = require("@cdktn/commons");
|
|
13
14
|
// Limit is 1200 to prevent stack size error.
|
|
14
15
|
// Could increase now that calculation is more accurate;
|
|
15
16
|
// however, probably better to have smaller
|
|
@@ -24,6 +25,7 @@ class ResourceModel {
|
|
|
24
25
|
this.attributes = options.attributes;
|
|
25
26
|
this.schema = options.schema;
|
|
26
27
|
this.fqpn = options.fqpn;
|
|
28
|
+
this.targetVersions = options.targetVersions;
|
|
27
29
|
this.provider = (0, provider_schema_1.parseFQPN)(options.fqpn).name;
|
|
28
30
|
this.terraformProviderName = this.provider;
|
|
29
31
|
this.fileName = options.fileName;
|
|
@@ -53,17 +55,25 @@ class ResourceModel {
|
|
|
53
55
|
get schemaAsJson() {
|
|
54
56
|
return this.escapeSchema(JSON.stringify(this.schema, undefined, 2));
|
|
55
57
|
}
|
|
58
|
+
/** Registry that linkToDocs points at, for use in the surrounding prose. */
|
|
59
|
+
get docsRegistryName() {
|
|
60
|
+
return (0, commons_1.registryForTargetVersions)(this.targetVersions).displayName;
|
|
61
|
+
}
|
|
56
62
|
get linkToDocs() {
|
|
57
|
-
|
|
63
|
+
// Keyed off the project's declared targets, not the FQPN hostname: that
|
|
64
|
+
// hostname reflects whichever CLI fetched the schema, which would make the
|
|
65
|
+
// generated link differ between a terraform and a tofu `cdktn get`.
|
|
66
|
+
const registry = (0, commons_1.registryForTargetVersions)(this.targetVersions);
|
|
67
|
+
const { namespace, name } = (0, provider_schema_1.parseFQPN)(this.fqpn);
|
|
58
68
|
const version = this.providerVersion || "latest";
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
return
|
|
69
|
+
const kind = this.isProvider
|
|
70
|
+
? "provider"
|
|
71
|
+
: this.isDataSource
|
|
72
|
+
? "data-source"
|
|
73
|
+
: this.isEphemeralResource
|
|
74
|
+
? "ephemeral-resource"
|
|
75
|
+
: "resource";
|
|
76
|
+
return registry.docsUrl(namespace, name, version, kind, this.terraformDocName);
|
|
67
77
|
}
|
|
68
78
|
get isProvider() {
|
|
69
79
|
return this.terraformSchemaType === "provider";
|
|
@@ -112,4 +122,4 @@ class ResourceModel {
|
|
|
112
122
|
}
|
|
113
123
|
}
|
|
114
124
|
exports.ResourceModel = ResourceModel;
|
|
115
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2V0L2dlbmVyYXRvci9tb2RlbHMvcmVzb3VyY2UtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx5Q0FBd0M7QUFDeEMsZ0RBQXdCO0FBQ3hCLDREQUF1RTtBQUV2RSxxQ0FBZ0Q7QUFJaEQsNkNBQTZDO0FBQzdDLHdEQUF3RDtBQUN4RCwyQ0FBMkM7QUFDOUIsUUFBQSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7QUFpQjdDLE1BQWEsYUFBYTtJQWdDeEIsWUFBWSxPQUE2QjtRQUZsQyw0QkFBdUIsR0FBNEMsRUFBRSxDQUFDO1FBRzNFLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUEsMkJBQVMsRUFBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzdDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFP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RU8sWUFBWSxDQUFDLE1BQWM7UUFDakMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0NBQ0Y7QUF4SkQsc0NBd0pDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IHRvU25ha2VDYXNlIH0gZnJvbSBcImNvZGVtYWtlclwiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IEZRUE4sIHBhcnNlRlFQTiwgUHJvdmlkZXJOYW1lIH0gZnJvbSBcIkBjZGt0bi9wcm92aWRlci1zY2hlbWFcIjtcbmltcG9ydCB7IEF0dHJpYnV0ZU1vZGVsIH0gZnJvbSBcIi4vYXR0cmlidXRlLW1vZGVsXCI7XG5pbXBvcnQgeyBTdHJ1Y3QsIENvbmZpZ1N0cnVjdCB9IGZyb20gXCIuL3N0cnVjdFwiO1xuaW1wb3J0IHsgU2NoZW1hIH0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBQcm92aWRlckZ1bmN0aW9uc01vZGVsIH0gZnJvbSBcIi4vcHJvdmlkZXItZnVuY3Rpb24tbW9kZWxcIjtcblxuLy8gTGltaXQgaXMgMTIwMCB0byBwcmV2ZW50IHN0YWNrIHNpemUgZXJyb3IuXG4vLyBDb3VsZCBpbmNyZWFzZSBub3cgdGhhdCBjYWxjdWxhdGlvbiBpcyBtb3JlIGFjY3VyYXRlO1xuLy8gaG93ZXZlciwgcHJvYmFibHkgYmV0dGVyIHRvIGhhdmUgc21hbGxlclxuZXhwb3J0IGNvbnN0IFNUUlVDVF9TSEFSRElOR19USFJFU0hPTEQgPSA0MDA7XG5cbmludGVyZmFjZSBSZXNvdXJjZU1vZGVsT3B0aW9ucyB7XG4gIHRlcnJhZm9ybVR5cGU6IHN0cmluZztcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIGJhc2VOYW1lOiBzdHJpbmc7XG4gIGZpbGVOYW1lOiBzdHJpbmc7XG4gIGZpbGVQYXRoOiBzdHJpbmc7XG4gIGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZU1vZGVsW107XG4gIHN0cnVjdHM6IFN0cnVjdFtdO1xuICBmcXBuOiBGUVBOO1xuICBzY2hlbWE6IFNjaGVtYTtcbiAgdGVycmFmb3JtU2NoZW1hVHlwZTogc3RyaW5nO1xuICBjb25maWdTdHJ1Y3ROYW1lOiBzdHJpbmc7XG59XG5cbnR5cGUgRGVmaW5pdGlvblBhdGggPSBzdHJpbmc7XG5leHBvcnQgY2xhc3MgUmVzb3VyY2VNb2RlbCB7XG4gIHB1YmxpYyBjbGFzc05hbWU6IHN0cmluZztcbiAgcHVibGljIGZpbGVQYXRoOiBzdHJpbmc7XG4gIHB1YmxpYyB0ZXJyYWZvcm1UeXBlOiBzdHJpbmc7XG4gIHB1YmxpYyBiYXNlTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcHJvdmlkZXI6IFByb3ZpZGVyTmFtZTtcbiAgcHVibGljIGZxcG46IEZRUE47XG4gIHB1YmxpYyBwcm92aWRlclZlcnNpb25Db25zdHJhaW50Pzogc3RyaW5nO1xuICBwdWJsaWMgcHJvdmlkZXJWZXJzaW9uPzogc3RyaW5nO1xuICBwdWJsaWMgdGVycmFmb3JtUHJvdmlkZXJTb3VyY2U/OiBzdHJpbmc7XG4gIC8qXG4gICAqIHVzdWFsbHkgc2FtZSBhcyBwcm92aWRlciwgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGlmIHVzZXIgcGlja3MgYSBkaWZmZXJlbnQgbmFtZVxuICAgKiB0byBiZSBhYmxlIHRvIHVzZSB0d28gcHJvdmlkZXJzIHdpdGggdGhlIHNhbWUgbmFtZVxuICAgKi9cbiAgcHVibGljIHRlcnJhZm9ybVByb3ZpZGVyTmFtZTogc3RyaW5nO1xuICAvKlxuICAgKiBPbmx5IHNldCAoYnkgcHJvdmlkZXItZ2VuZXJhdG9yLnRzKSB3aGVuIGlzUHJvdmlkZXIgaXMgdHJ1ZSBhbmQgdGhlXG4gICAqIHByb3ZpZGVyIHNjaGVtYSBkZWNsYXJlcyBwcm92aWRlci1kZWZpbmVkIGZ1bmN0aW9ucyAtIGRyaXZlcyB3aGV0aGVyXG4gICAqIFJlc291cmNlRW1pdHRlciBlbWl0cyB0aGUgbWVtb2l6ZWQgYGZ1bmN0aW9uc2AgZ2V0dGVyIGFuZCBpdHNcbiAgICogY3Jvc3MtZGlyZWN0b3J5IGltcG9ydCBvZiB0aGUgc2libGluZyBwcm92aWRlci1mdW5jdGlvbnMvaW5kZXgudHMgZmlsZS5cbiAgICovXG4gIHB1YmxpYyBwcm92aWRlckZ1bmN0aW9uc01vZGVsPzogUHJvdmlkZXJGdW5jdGlvbnNNb2RlbDtcbiAgcHVibGljIGZpbGVOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVNb2RlbFtdO1xuICBwdWJsaWMgc2NoZW1hOiBTY2hlbWE7XG4gIHByaXZhdGUgX3N0cnVjdHM6IFN0cnVjdFtdO1xuICBwcml2YXRlIGRlcGVuZGVuY2llczogc3RyaW5nW107XG4gIHByaXZhdGUgdGVycmFmb3JtU2NoZW1hVHlwZTogc3RyaW5nO1xuICBwcml2YXRlIGNvbmZpZ1N0cnVjdE5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHN0cnVjdHNSZXF1aXJlU2hhcmRpbmc6IGJvb2xlYW47XG4gIHB1YmxpYyByZWN1cnNpdmVBdHRyaWJ1dGVQYXRoczogeyBbdXNhZ2VQYXRoOiBzdHJpbmddOiBEZWZpbml0aW9uUGF0aCB9ID0ge307XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogUmVzb3VyY2VNb2RlbE9wdGlvbnMpIHtcbiAgICB0aGlzLmNsYXNzTmFtZSA9IG9wdGlvbnMuY2xhc3NOYW1lO1xuICAgIHRoaXMuZmlsZVBhdGggPSBvcHRpb25zLmZpbGVQYXRoO1xuICAgIHRoaXMudGVycmFmb3JtVHlwZSA9IG9wdGlvbnMudGVycmFmb3JtVHlwZTtcbiAgICB0aGlzLmJhc2VOYW1lID0gb3B0aW9ucy5iYXNlTmFtZTtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBvcHRpb25zLmF0dHJpYnV0ZXM7XG4gICAgdGhpcy5zY2hlbWEgPSBvcHRpb25zLnNjaGVtYTtcbiAgICB0aGlzLmZxcG4gPSBvcHRpb25zLmZxcG47XG4gICAgdGhpcy5wcm92aWRlciA9IHBhcnNlRlFQTihvcHRpb25zLmZxcG4pLm5hbWU7XG4gICAgdGhpcy50ZXJyYWZvcm1Qcm92aWRlck5hbWUgPSB0aGlzLnByb3ZpZGVyO1xuICAgIHRoaXMuZmlsZU5hbWUgPSBvcHRpb25zLmZpbGVOYW1lO1xuICAgIHRoaXMuX3N0cnVjdHMgPSBvcHRpb25zLnN0cnVjdHM7XG4gICAgdGhpcy50ZXJyYWZvcm1TY2hlbWFUeXBlID0gb3B0aW9ucy50ZXJyYWZvcm1TY2hlbWFUeXBlO1xuICAgIHRoaXMuY29uZmlnU3RydWN0TmFtZSA9IG9wdGlvbnMuY29uZmlnU3RydWN0TmFtZTtcbiAgICB0aGlzLmRlcGVuZGVuY2llcyA9IFtcbiAgICAgIGBpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztgLFxuICAgICAgYGltcG9ydCAqIGFzIGNka3RuIGZyb20gJ2Nka3RuJztgLFxuICAgIF07XG5cbiAgICB0aGlzLnN0cnVjdHNSZXF1aXJlU2hhcmRpbmcgPVxuICAgICAgdGhpcy5fc3RydWN0cy5yZWR1Y2UoKHBhcnRpYWxTdW0sIHMpID0+IHBhcnRpYWxTdW0gKyBzLmV4cG9ydENvdW50LCAwKSA+XG4gICAgICBTVFJVQ1RfU0hBUkRJTkdfVEhSRVNIT0xEO1xuICB9XG5cbiAgcHVibGljIGdldCBzdHJ1Y3RzKCk6IFN0cnVjdFtdIHtcbiAgICByZXR1cm4gW3RoaXMuY29uZmlnU3RydWN0LCAuLi50aGlzLl9zdHJ1Y3RzXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29uZmlnU3RydWN0KCkge1xuICAgIHJldHVybiBuZXcgQ29uZmlnU3RydWN0KFxuICAgICAgdGhpcy5jb25maWdTdHJ1Y3ROYW1lLFxuICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgdGhpcy5pc0VwaGVtZXJhbFJlc291cmNlID8gXCJUZXJyYWZvcm1FcGhlbWVyYWxNZXRhQXJndW1lbnRzXCIgOiB1bmRlZmluZWQsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3ludGhlc2l6YWJsZUF0dHJpYnV0ZXMoKTogQXR0cmlidXRlTW9kZWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU3RydWN0LmFzc2lnbmFibGVBdHRyaWJ1dGVzO1xuICB9XG5cbiAgcHVibGljIGdldCBpbXBvcnRTdGF0ZW1lbnRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5kZXBlbmRlbmNpZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNjaGVtYUFzSnNvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVzY2FwZVNjaGVtYShKU09OLnN0cmluZ2lmeSh0aGlzLnNjaGVtYSwgdW5kZWZpbmVkLCAyKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxpbmtUb0RvY3MoKTogc3RyaW5nIHtcbiAgICBjb25zdCB7IGhvc3RuYW1lLCBuYW1lc3BhY2UsIG5hbWUgfSA9IHBhcnNlRlFQTih0aGlzLmZxcG4pO1xuICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLnByb3ZpZGVyVmVyc2lvbiB8fCBcImxhdGVzdFwiO1xuICAgIGNvbnN0IGJhc2UgPSBgaHR0cHM6Ly8ke2hvc3RuYW1lfS9wcm92aWRlcnMvJHtuYW1lc3BhY2V9LyR7bmFtZX0vJHt2ZXJzaW9ufS9kb2NzYDtcbiAgICBpZiAodGhpcy5pc1Byb3ZpZGVyKSByZXR1cm4gYmFzZTtcbiAgICBpZiAodGhpcy5pc0RhdGFTb3VyY2UpXG4gICAgICByZXR1cm4gYCR7YmFzZX0vZGF0YS1zb3VyY2VzLyR7dGhpcy50ZXJyYWZvcm1Eb2NOYW1lfWA7XG4gICAgaWYgKHRoaXMuaXNFcGhlbWVyYWxSZXNvdXJjZSlcbiAgICAgIHJldHVybiBgJHtiYXNlfS9lcGhlbWVyYWwtcmVzb3VyY2VzLyR7dGhpcy50ZXJyYWZvcm1Eb2NOYW1lfWA7XG4gICAgcmV0dXJuIGAke2Jhc2V9L3Jlc291cmNlcy8ke3RoaXMudGVycmFmb3JtRG9jTmFtZX1gO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1Byb3ZpZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVNjaGVtYVR5cGUgPT09IFwicHJvdmlkZXJcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNEYXRhU291cmNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVNjaGVtYVR5cGUgPT09IFwiZGF0YV9zb3VyY2VcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNFcGhlbWVyYWxSZXNvdXJjZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZXJyYWZvcm1TY2hlbWFUeXBlID09PSBcImVwaGVtZXJhbF9yZXNvdXJjZVwiO1xuICB9XG5cbiAgcHVibGljIGdldCBwYXJlbnRDbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc1Byb3ZpZGVyXG4gICAgICA/IFwiVGVycmFmb3JtUHJvdmlkZXJcIlxuICAgICAgOiB0aGlzLmlzRGF0YVNvdXJjZVxuICAgICAgICA/IFwiVGVycmFmb3JtRGF0YVNvdXJjZVwiXG4gICAgICAgIDogdGhpcy5pc0VwaGVtZXJhbFJlc291cmNlXG4gICAgICAgICAgPyBcIlRlcnJhZm9ybUVwaGVtZXJhbFJlc291cmNlXCJcbiAgICAgICAgICA6IFwiVGVycmFmb3JtUmVzb3VyY2VcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGVycmFmb3JtUmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNQcm92aWRlclxuICAgICAgPyB0aGlzLnRlcnJhZm9ybVByb3ZpZGVyTmFtZVxuICAgICAgOiB0aGlzLmlzRGF0YVNvdXJjZVxuICAgICAgICA/IHRoaXMudGVycmFmb3JtVHlwZS5yZXBsYWNlKC9eZGF0YV8vLCBcIlwiKVxuICAgICAgICA6IHRoaXMuaXNFcGhlbWVyYWxSZXNvdXJjZVxuICAgICAgICAgID8gdGhpcy50ZXJyYWZvcm1UeXBlLnJlcGxhY2UoL15lcGhlbWVyYWxfLywgXCJcIilcbiAgICAgICAgICA6IHRoaXMudGVycmFmb3JtVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGVycmFmb3JtRG9jTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0b1NuYWtlQ2FzZShcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlLnJlcGxhY2UoXG4gICAgICAgIG5ldyBSZWdFeHAoYF4ke3RoaXMucHJvdmlkZXJ9X2AsIFwiaVwiKSxcbiAgICAgICAgXCJcIixcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVmZXJlbmNlZFR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWdTdHJ1Y3QucmVmZXJlbmNlZFR5cGVzO1xuICB9XG5cbiAgcHVibGljIGdldCBzdHJ1Y3RzRm9sZGVyTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtwYXRoLmJhc2VuYW1lKHRoaXMuZmlsZU5hbWUsIFwiLnRzXCIpfS1zdHJ1Y3RzYDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RydWN0c0ZvbGRlclBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKHRoaXMubmFtZXNwYWNlRm9sZGVyUGF0aCwgdGhpcy5zdHJ1Y3RzRm9sZGVyTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5hbWVzcGFjZUZvbGRlclBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWxlUGF0aC5zcGxpdChcIi9cIikuc2xpY2UoMCwgLTEpLmpvaW4oXCIvXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBlc2NhcGVTY2hlbWEoc2NoZW1hOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzY2hlbWEucmVwbGFjZSgvKFxcKlxcLykvZ2ksIGAqXFxcXC9gKTtcbiAgfVxufVxuIl19
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2V0L2dlbmVyYXRvci9tb2RlbHMvcmVzb3VyY2UtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx5Q0FBd0M7QUFDeEMsZ0RBQXdCO0FBQ3hCLDREQUF1RTtBQUV2RSxxQ0FBZ0Q7QUFDaEQsNENBSXdCO0FBR3hCLDZDQUE2QztBQUM3Qyx3REFBd0Q7QUFDeEQsMkNBQTJDO0FBQzlCLFFBQUEseUJBQXlCLEdBQUcsR0FBRyxDQUFDO0FBa0I3QyxNQUFhLGFBQWE7SUFpQ3hCLFlBQVksT0FBNkI7UUFGbEMsNEJBQXVCLEdBQTRDLEVBQUUsQ0FBQztRQUczRSxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBQSwyQkFBUyxFQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDN0MsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNoQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDO1FBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7UUFDakQsSUFBSSxDQUFDLFlBQVksR0FBRztZQUNsQix5Q0FBeUM7WUFDekMsaUNBQWlDO1NBQ2xDLENBQUM7UUFFRixJQUFJLENBQUMsc0JBQXNCO1lBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RSxpQ0FBeUIsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLHFCQUFZLENBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLFVBQVUsRUFDZixJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLGlDQUFpQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQ3pFLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBVyx1QkFBdUI7UUFDaEMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFXLGdCQUFnQjtRQUN6QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsSUFBVyxnQkFBZ0I7UUFDekIsT0FBTyxJQUFBLG1DQUF5QixFQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDcEUsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQix3RUFBd0U7UUFDeEUsMkVBQTJFO1FBQzNFLG9FQUFvRTtRQUNwRSxNQUFNLFFBQVEsR0FBRyxJQUFBLG1DQUF5QixFQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUEsMkJBQVMsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsSUFBSSxRQUFRLENBQUM7UUFDakQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVU7WUFDMUIsQ0FBQyxDQUFDLFVBQVU7WUFDWixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVk7Z0JBQ2pCLENBQUMsQ0FBQyxhQUFhO2dCQUNmLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CO29CQUN4QixDQUFDLENBQUMsb0JBQW9CO29CQUN0QixDQUFDLENBQUMsVUFBVSxDQUFDO1FBQ25CLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FDckIsU0FBUyxFQUNULElBQUksRUFDSixPQUFPLEVBQ1AsSUFBSSxFQUNKLElBQUksQ0FBQyxnQkFBZ0IsQ0FDdEIsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLEtBQUssVUFBVSxDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLEtBQUssYUFBYSxDQUFDO0lBQ3BELENBQUM7SUFFRCxJQUFXLG1CQUFtQjtRQUM1QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxvQkFBb0IsQ0FBQztJQUMzRCxDQUFDO0lBRUQsSUFBVyxlQUFlO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLFVBQVU7WUFDcEIsQ0FBQyxDQUFDLG1CQUFtQjtZQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVk7Z0JBQ2pCLENBQUMsQ0FBQyxxQkFBcUI7Z0JBQ3ZCLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CO29CQUN4QixDQUFDLENBQUMsNEJBQTRCO29CQUM5QixDQUFDLENBQUMsbUJBQW1CLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcscUJBQXFCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLFVBQVU7WUFDcEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUI7WUFDNUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZO2dCQUNqQixDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztnQkFDMUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUI7b0JBQ3hCLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO29CQUMvQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBVyxnQkFBZ0I7UUFDekIsT0FBTyxJQUFBLHVCQUFXLEVBQ2hCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQ2hDLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUNyQyxFQUFFLENBQ0gsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFXLGlCQUFpQjtRQUMxQixPQUFPLEdBQUcsY0FBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDMUQsQ0FBQztJQUVELElBQVcsaUJBQWlCO1FBQzFCLE9BQU8sY0FBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELElBQVcsbUJBQW1CO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU8sWUFBWSxDQUFDLE1BQWM7UUFDakMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0NBQ0Y7QUExS0Qsc0NBMEtDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IHRvU25ha2VDYXNlIH0gZnJvbSBcImNvZGVtYWtlclwiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IEZRUE4sIHBhcnNlRlFQTiwgUHJvdmlkZXJOYW1lIH0gZnJvbSBcIkBjZGt0bi9wcm92aWRlci1zY2hlbWFcIjtcbmltcG9ydCB7IEF0dHJpYnV0ZU1vZGVsIH0gZnJvbSBcIi4vYXR0cmlidXRlLW1vZGVsXCI7XG5pbXBvcnQgeyBTdHJ1Y3QsIENvbmZpZ1N0cnVjdCB9IGZyb20gXCIuL3N0cnVjdFwiO1xuaW1wb3J0IHtcbiAgU2NoZW1hLFxuICBUZXJyYWZvcm1UYXJnZXRWZXJzaW9ucyxcbiAgcmVnaXN0cnlGb3JUYXJnZXRWZXJzaW9ucyxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBQcm92aWRlckZ1bmN0aW9uc01vZGVsIH0gZnJvbSBcIi4vcHJvdmlkZXItZnVuY3Rpb24tbW9kZWxcIjtcblxuLy8gTGltaXQgaXMgMTIwMCB0byBwcmV2ZW50IHN0YWNrIHNpemUgZXJyb3IuXG4vLyBDb3VsZCBpbmNyZWFzZSBub3cgdGhhdCBjYWxjdWxhdGlvbiBpcyBtb3JlIGFjY3VyYXRlO1xuLy8gaG93ZXZlciwgcHJvYmFibHkgYmV0dGVyIHRvIGhhdmUgc21hbGxlclxuZXhwb3J0IGNvbnN0IFNUUlVDVF9TSEFSRElOR19USFJFU0hPTEQgPSA0MDA7XG5cbmludGVyZmFjZSBSZXNvdXJjZU1vZGVsT3B0aW9ucyB7XG4gIHRlcnJhZm9ybVR5cGU6IHN0cmluZztcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIGJhc2VOYW1lOiBzdHJpbmc7XG4gIGZpbGVOYW1lOiBzdHJpbmc7XG4gIGZpbGVQYXRoOiBzdHJpbmc7XG4gIGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZU1vZGVsW107XG4gIHN0cnVjdHM6IFN0cnVjdFtdO1xuICBmcXBuOiBGUVBOO1xuICBzY2hlbWE6IFNjaGVtYTtcbiAgdGVycmFmb3JtU2NoZW1hVHlwZTogc3RyaW5nO1xuICBjb25maWdTdHJ1Y3ROYW1lOiBzdHJpbmc7XG4gIHRhcmdldFZlcnNpb25zPzogVGVycmFmb3JtVGFyZ2V0VmVyc2lvbnM7XG59XG5cbnR5cGUgRGVmaW5pdGlvblBhdGggPSBzdHJpbmc7XG5leHBvcnQgY2xhc3MgUmVzb3VyY2VNb2RlbCB7XG4gIHB1YmxpYyBjbGFzc05hbWU6IHN0cmluZztcbiAgcHVibGljIGZpbGVQYXRoOiBzdHJpbmc7XG4gIHB1YmxpYyB0ZXJyYWZvcm1UeXBlOiBzdHJpbmc7XG4gIHB1YmxpYyBiYXNlTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcHJvdmlkZXI6IFByb3ZpZGVyTmFtZTtcbiAgcHVibGljIGZxcG46IEZRUE47XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFyZ2V0VmVyc2lvbnM/OiBUZXJyYWZvcm1UYXJnZXRWZXJzaW9ucztcbiAgcHVibGljIHByb3ZpZGVyVmVyc2lvbkNvbnN0cmFpbnQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBwcm92aWRlclZlcnNpb24/OiBzdHJpbmc7XG4gIHB1YmxpYyB0ZXJyYWZvcm1Qcm92aWRlclNvdXJjZT86IHN0cmluZztcbiAgLypcbiAgICogdXN1YWxseSBzYW1lIGFzIHByb3ZpZGVyLCBidXQgY2FuIGJlIG92ZXJyaWRkZW4gaWYgdXNlciBwaWNrcyBhIGRpZmZlcmVudCBuYW1lXG4gICAqIHRvIGJlIGFibGUgdG8gdXNlIHR3byBwcm92aWRlcnMgd2l0aCB0aGUgc2FtZSBuYW1lXG4gICAqL1xuICBwdWJsaWMgdGVycmFmb3JtUHJvdmlkZXJOYW1lOiBzdHJpbmc7XG4gIC8qXG4gICAqIE9ubHkgc2V0IChieSBwcm92aWRlci1nZW5lcmF0b3IudHMpIHdoZW4gaXNQcm92aWRlciBpcyB0cnVlIGFuZCB0aGVcbiAgICogcHJvdmlkZXIgc2NoZW1hIGRlY2xhcmVzIHByb3ZpZGVyLWRlZmluZWQgZnVuY3Rpb25zIC0gZHJpdmVzIHdoZXRoZXJcbiAgICogUmVzb3VyY2VFbWl0dGVyIGVtaXRzIHRoZSBtZW1vaXplZCBgZnVuY3Rpb25zYCBnZXR0ZXIgYW5kIGl0c1xuICAgKiBjcm9zcy1kaXJlY3RvcnkgaW1wb3J0IG9mIHRoZSBzaWJsaW5nIHByb3ZpZGVyLWZ1bmN0aW9ucy9pbmRleC50cyBmaWxlLlxuICAgKi9cbiAgcHVibGljIHByb3ZpZGVyRnVuY3Rpb25zTW9kZWw/OiBQcm92aWRlckZ1bmN0aW9uc01vZGVsO1xuICBwdWJsaWMgZmlsZU5hbWU6IHN0cmluZztcbiAgcHVibGljIGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZU1vZGVsW107XG4gIHB1YmxpYyBzY2hlbWE6IFNjaGVtYTtcbiAgcHJpdmF0ZSBfc3RydWN0czogU3RydWN0W107XG4gIHByaXZhdGUgZGVwZW5kZW5jaWVzOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSB0ZXJyYWZvcm1TY2hlbWFUeXBlOiBzdHJpbmc7XG4gIHByaXZhdGUgY29uZmlnU3RydWN0TmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgc3RydWN0c1JlcXVpcmVTaGFyZGluZzogYm9vbGVhbjtcbiAgcHVibGljIHJlY3Vyc2l2ZUF0dHJpYnV0ZVBhdGhzOiB7IFt1c2FnZVBhdGg6IHN0cmluZ106IERlZmluaXRpb25QYXRoIH0gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBSZXNvdXJjZU1vZGVsT3B0aW9ucykge1xuICAgIHRoaXMuY2xhc3NOYW1lID0gb3B0aW9ucy5jbGFzc05hbWU7XG4gICAgdGhpcy5maWxlUGF0aCA9IG9wdGlvbnMuZmlsZVBhdGg7XG4gICAgdGhpcy50ZXJyYWZvcm1UeXBlID0gb3B0aW9ucy50ZXJyYWZvcm1UeXBlO1xuICAgIHRoaXMuYmFzZU5hbWUgPSBvcHRpb25zLmJhc2VOYW1lO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG9wdGlvbnMuYXR0cmlidXRlcztcbiAgICB0aGlzLnNjaGVtYSA9IG9wdGlvbnMuc2NoZW1hO1xuICAgIHRoaXMuZnFwbiA9IG9wdGlvbnMuZnFwbjtcbiAgICB0aGlzLnRhcmdldFZlcnNpb25zID0gb3B0aW9ucy50YXJnZXRWZXJzaW9ucztcbiAgICB0aGlzLnByb3ZpZGVyID0gcGFyc2VGUVBOKG9wdGlvbnMuZnFwbikubmFtZTtcbiAgICB0aGlzLnRlcnJhZm9ybVByb3ZpZGVyTmFtZSA9IHRoaXMucHJvdmlkZXI7XG4gICAgdGhpcy5maWxlTmFtZSA9IG9wdGlvbnMuZmlsZU5hbWU7XG4gICAgdGhpcy5fc3RydWN0cyA9IG9wdGlvbnMuc3RydWN0cztcbiAgICB0aGlzLnRlcnJhZm9ybVNjaGVtYVR5cGUgPSBvcHRpb25zLnRlcnJhZm9ybVNjaGVtYVR5cGU7XG4gICAgdGhpcy5jb25maWdTdHJ1Y3ROYW1lID0gb3B0aW9ucy5jb25maWdTdHJ1Y3ROYW1lO1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gW1xuICAgICAgYGltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO2AsXG4gICAgICBgaW1wb3J0ICogYXMgY2RrdG4gZnJvbSAnY2RrdG4nO2AsXG4gICAgXTtcblxuICAgIHRoaXMuc3RydWN0c1JlcXVpcmVTaGFyZGluZyA9XG4gICAgICB0aGlzLl9zdHJ1Y3RzLnJlZHVjZSgocGFydGlhbFN1bSwgcykgPT4gcGFydGlhbFN1bSArIHMuZXhwb3J0Q291bnQsIDApID5cbiAgICAgIFNUUlVDVF9TSEFSRElOR19USFJFU0hPTEQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN0cnVjdHMoKTogU3RydWN0W10ge1xuICAgIHJldHVybiBbdGhpcy5jb25maWdTdHJ1Y3QsIC4uLnRoaXMuX3N0cnVjdHNdO1xuICB9XG5cbiAgcHVibGljIGdldCBjb25maWdTdHJ1Y3QoKSB7XG4gICAgcmV0dXJuIG5ldyBDb25maWdTdHJ1Y3QoXG4gICAgICB0aGlzLmNvbmZpZ1N0cnVjdE5hbWUsXG4gICAgICB0aGlzLmF0dHJpYnV0ZXMsXG4gICAgICB0aGlzLmlzRXBoZW1lcmFsUmVzb3VyY2UgPyBcIlRlcnJhZm9ybUVwaGVtZXJhbE1ldGFBcmd1bWVudHNcIiA6IHVuZGVmaW5lZCxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBzeW50aGVzaXphYmxlQXR0cmlidXRlcygpOiBBdHRyaWJ1dGVNb2RlbFtdIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWdTdHJ1Y3QuYXNzaWduYWJsZUF0dHJpYnV0ZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGltcG9ydFN0YXRlbWVudHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmRlcGVuZGVuY2llcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2NoZW1hQXNKc29uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZXNjYXBlU2NoZW1hKEpTT04uc3RyaW5naWZ5KHRoaXMuc2NoZW1hLCB1bmRlZmluZWQsIDIpKTtcbiAgfVxuXG4gIC8qKiBSZWdpc3RyeSB0aGF0IGxpbmtUb0RvY3MgcG9pbnRzIGF0LCBmb3IgdXNlIGluIHRoZSBzdXJyb3VuZGluZyBwcm9zZS4gKi9cbiAgcHVibGljIGdldCBkb2NzUmVnaXN0cnlOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlZ2lzdHJ5Rm9yVGFyZ2V0VmVyc2lvbnModGhpcy50YXJnZXRWZXJzaW9ucykuZGlzcGxheU5hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxpbmtUb0RvY3MoKTogc3RyaW5nIHtcbiAgICAvLyBLZXllZCBvZmYgdGhlIHByb2plY3QncyBkZWNsYXJlZCB0YXJnZXRzLCBub3QgdGhlIEZRUE4gaG9zdG5hbWU6IHRoYXRcbiAgICAvLyBob3N0bmFtZSByZWZsZWN0cyB3aGljaGV2ZXIgQ0xJIGZldGNoZWQgdGhlIHNjaGVtYSwgd2hpY2ggd291bGQgbWFrZSB0aGVcbiAgICAvLyBnZW5lcmF0ZWQgbGluayBkaWZmZXIgYmV0d2VlbiBhIHRlcnJhZm9ybSBhbmQgYSB0b2Z1IGBjZGt0biBnZXRgLlxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gcmVnaXN0cnlGb3JUYXJnZXRWZXJzaW9ucyh0aGlzLnRhcmdldFZlcnNpb25zKTtcbiAgICBjb25zdCB7IG5hbWVzcGFjZSwgbmFtZSB9ID0gcGFyc2VGUVBOKHRoaXMuZnFwbik7XG4gICAgY29uc3QgdmVyc2lvbiA9IHRoaXMucHJvdmlkZXJWZXJzaW9uIHx8IFwibGF0ZXN0XCI7XG4gICAgY29uc3Qga2luZCA9IHRoaXMuaXNQcm92aWRlclxuICAgICAgPyBcInByb3ZpZGVyXCJcbiAgICAgIDogdGhpcy5pc0RhdGFTb3VyY2VcbiAgICAgICAgPyBcImRhdGEtc291cmNlXCJcbiAgICAgICAgOiB0aGlzLmlzRXBoZW1lcmFsUmVzb3VyY2VcbiAgICAgICAgICA/IFwiZXBoZW1lcmFsLXJlc291cmNlXCJcbiAgICAgICAgICA6IFwicmVzb3VyY2VcIjtcbiAgICByZXR1cm4gcmVnaXN0cnkuZG9jc1VybChcbiAgICAgIG5hbWVzcGFjZSxcbiAgICAgIG5hbWUsXG4gICAgICB2ZXJzaW9uLFxuICAgICAga2luZCxcbiAgICAgIHRoaXMudGVycmFmb3JtRG9jTmFtZSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1Byb3ZpZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVNjaGVtYVR5cGUgPT09IFwicHJvdmlkZXJcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNEYXRhU291cmNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVNjaGVtYVR5cGUgPT09IFwiZGF0YV9zb3VyY2VcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNFcGhlbWVyYWxSZXNvdXJjZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZXJyYWZvcm1TY2hlbWFUeXBlID09PSBcImVwaGVtZXJhbF9yZXNvdXJjZVwiO1xuICB9XG5cbiAgcHVibGljIGdldCBwYXJlbnRDbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc1Byb3ZpZGVyXG4gICAgICA/IFwiVGVycmFmb3JtUHJvdmlkZXJcIlxuICAgICAgOiB0aGlzLmlzRGF0YVNvdXJjZVxuICAgICAgICA/IFwiVGVycmFmb3JtRGF0YVNvdXJjZVwiXG4gICAgICAgIDogdGhpcy5pc0VwaGVtZXJhbFJlc291cmNlXG4gICAgICAgICAgPyBcIlRlcnJhZm9ybUVwaGVtZXJhbFJlc291cmNlXCJcbiAgICAgICAgICA6IFwiVGVycmFmb3JtUmVzb3VyY2VcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGVycmFmb3JtUmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNQcm92aWRlclxuICAgICAgPyB0aGlzLnRlcnJhZm9ybVByb3ZpZGVyTmFtZVxuICAgICAgOiB0aGlzLmlzRGF0YVNvdXJjZVxuICAgICAgICA/IHRoaXMudGVycmFmb3JtVHlwZS5yZXBsYWNlKC9eZGF0YV8vLCBcIlwiKVxuICAgICAgICA6IHRoaXMuaXNFcGhlbWVyYWxSZXNvdXJjZVxuICAgICAgICAgID8gdGhpcy50ZXJyYWZvcm1UeXBlLnJlcGxhY2UoL15lcGhlbWVyYWxfLywgXCJcIilcbiAgICAgICAgICA6IHRoaXMudGVycmFmb3JtVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGVycmFmb3JtRG9jTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0b1NuYWtlQ2FzZShcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlLnJlcGxhY2UoXG4gICAgICAgIG5ldyBSZWdFeHAoYF4ke3RoaXMucHJvdmlkZXJ9X2AsIFwiaVwiKSxcbiAgICAgICAgXCJcIixcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVmZXJlbmNlZFR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWdTdHJ1Y3QucmVmZXJlbmNlZFR5cGVzO1xuICB9XG5cbiAgcHVibGljIGdldCBzdHJ1Y3RzRm9sZGVyTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtwYXRoLmJhc2VuYW1lKHRoaXMuZmlsZU5hbWUsIFwiLnRzXCIpfS1zdHJ1Y3RzYDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RydWN0c0ZvbGRlclBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKHRoaXMubmFtZXNwYWNlRm9sZGVyUGF0aCwgdGhpcy5zdHJ1Y3RzRm9sZGVyTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5hbWVzcGFjZUZvbGRlclBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWxlUGF0aC5zcGxpdChcIi9cIikuc2xpY2UoMCwgLTEpLmpvaW4oXCIvXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBlc2NhcGVTY2hlbWEoc2NoZW1hOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzY2hlbWEucmVwbGFjZSgvKFxcKlxcLykvZ2ksIGAqXFxcXC9gKTtcbiAgfVxufVxuIl19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.resolveStoredClassName =
|
|
3
|
+
exports.resolveStoredClassName = resolveStoredClassName;
|
|
4
4
|
// Copyright (c) HashiCorp, Inc
|
|
5
5
|
// SPDX-License-Identifier: MPL-2.0
|
|
6
6
|
const util_1 = require("../../../util");
|
|
@@ -82,5 +82,4 @@ function resolveStoredClassName(ownStoredClassType, elementTypeModelType) {
|
|
|
82
82
|
}
|
|
83
83
|
return undefined;
|
|
84
84
|
}
|
|
85
|
-
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcG9ydGVkLXN0b3JlZC1jbGFzc2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvbW9kZWxzL3N1cHBvcnRlZC1zdG9yZWQtY2xhc3Nlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLHdDQUErQztBQUUvQyx3RkFBd0Y7QUFDeEYscUZBQXFGO0FBQ3JGLG9GQUFvRjtBQUNwRix5RkFBeUY7QUFDekYsdUZBQXVGO0FBQ3ZGLDBGQUEwRjtBQUMxRix5RkFBeUY7QUFDekYsbUZBQW1GO0FBQ25GLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDdkMsV0FBVztJQUNYLFdBQVc7SUFDWCxZQUFZO0lBQ1osUUFBUTtJQUNSLGNBQWM7SUFDZCxjQUFjO0lBQ2QsZUFBZTtJQUNmLFdBQVc7SUFDWCxhQUFhO0lBQ2IsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsYUFBYTtJQUNiLGVBQWU7SUFDZixlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLFlBQVk7SUFDWixlQUFlO0lBQ2YsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixZQUFZO0NBQ2IsQ0FBQyxDQUFDO0FBRUgsMkZBQTJGO0FBQzNGLHFFQUFxRTtBQUNyRSxFQUFFO0FBQ0YsNEZBQTRGO0FBQzVGLHdGQUF3RjtBQUN4Riw2Q0FBNkM7QUFDN0MsRUFBRTtBQUNGLG9CQUFvQjtBQUNwQix3RkFBd0Y7QUFDeEYsdUVBQXVFO0FBQ3ZFLDBGQUEwRjtBQUMxRiwwRkFBMEY7QUFDMUYsMEZBQTBGO0FBQzFGLDZCQUE2QjtBQUM3Qix1RkFBdUY7QUFDdkYseURBQXlEO0FBQ3pELFNBQWdCLHNCQUFzQixDQUNwQyxrQkFBMEIsRUFDMUIsb0JBQTRCO0lBRTVCLE1BQU0sVUFBVSxHQUFHLElBQUEscUJBQWMsRUFBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3RELElBQUksd0JBQXdCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDN0MsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFJLFFBQW9DLENBQUM7SUFDekMsSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN4QyxRQUFRLEdBQUcsTUFBTSxDQUFDO0lBQ3BCLENBQUM7U0FBTSxJQUFJLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLFVBQXNDLENBQUM7SUFDM0MsSUFBSSxvQkFBb0IsS0FBSyxNQUFNLElBQUksb0JBQW9CLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDdEUsVUFBVSxHQUFHLE1BQU0sQ0FBQztJQUN0QixDQUFDO1NBQU0sSUFBSSxvQkFBb0IsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUMxQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLE1BQU0sVUFBVSxHQUFHLFFBQVEsRUFBRSxDQUFDO0lBQ2pELElBQUksd0JBQXdCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDN0MsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBbkNELHdEQW1DQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyB1cHBlcmNhc2VGaXJzdCB9IGZyb20gXCIuLi8uLi8uLi91dGlsXCI7XG5cbi8vIFRoZSBjb3JlIGNka3RuIHBhY2thZ2UgKHBhY2thZ2VzL2Nka3RuL3NyYy9jb21wbGV4LWNvbXB1dGVkLWxpc3QudHMpIG9ubHkgaGFuZC13cml0ZXNcbi8vIHRoaXMgZml4ZWQgc2V0IG9mIHdyYXBwZXIgY2xhc3NlcyBmb3IgY29tcHV0ZWQsIG5vbi1jb21wbGV4IGNvbGxlY3Rpb24gYXR0cmlidXRlcy5cbi8vIEFyYml0cmFyaWx5IGRlZXAgbmVzdGluZ3Mgb2YgbGlzdC9zZXQvbWFwIChlLmcuIG1hcChtYXAobGlzdChzdHJpbmcpKSkpIGNvbXBvc2UgYVxuLy8gc3RvcmVkQ2xhc3NUeXBlIChlLmcuIFwic3RyaW5nTGlzdE1hcE1hcFwiKSB0aGF0IGhhcyBubyBjb3JyZXNwb25kaW5nIGNsYXNzLiBSYXRoZXIgdGhhblxuLy8gZmFsbGluZyBiYWNrIHN0cmFpZ2h0IHRvIGEgcGxhaW4sIHVudHlwZWQgZ2V0dGVyLCByZXNvbHZlU3RvcmVkQ2xhc3NOYW1lIGJlbG93IGZpcnN0XG4vLyBsb29rcyBmb3IgdGhlIG5lYXJlc3QgdHlwZWQgXCJBbnlcIi13cmFwcGVyIHRoYXQgc3RpbGwgZXhpc3RzIGluIHRoaXMgc2V0LCBjb2xsYXBzaW5nIHRoZVxuLy8gdW5zdXBwb3J0ZWQgaW5uZXIgc2hhcGUgaW50byBhbiB1bnR5cGVkIGJvdW5kYXJ5IHdoaWxlIHByZXNlcnZpbmcgdHlwZWQgbmF2aWdhdGlvbiBmb3Jcbi8vIHRoZSBvdXRlciBsYXllcnMgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi1jb25zdHJ1Y3RzL2Nkay10ZXJyYWluL2lzc3Vlcy8xMSkuXG5jb25zdCBTVVBQT1JURURfU1RPUkVEX0NMQVNTRVMgPSBuZXcgU2V0KFtcbiAgXCJTdHJpbmdNYXBcIixcbiAgXCJOdW1iZXJNYXBcIixcbiAgXCJCb29sZWFuTWFwXCIsXG4gIFwiQW55TWFwXCIsXG4gIFwiU3RyaW5nTWFwTWFwXCIsXG4gIFwiTnVtYmVyTWFwTWFwXCIsXG4gIFwiQm9vbGVhbk1hcE1hcFwiLFxuICBcIkFueU1hcE1hcFwiLFxuICBcIkJvb2xlYW5MaXN0XCIsXG4gIFwiU3RyaW5nTGlzdExpc3RcIixcbiAgXCJOdW1iZXJMaXN0TGlzdFwiLFxuICBcIkJvb2xlYW5MaXN0TGlzdFwiLFxuICBcIkFueUxpc3RMaXN0XCIsXG4gIFwiU3RyaW5nTWFwTGlzdFwiLFxuICBcIk51bWJlck1hcExpc3RcIixcbiAgXCJCb29sZWFuTWFwTGlzdFwiLFxuICBcIkFueU1hcExpc3RcIixcbiAgXCJTdHJpbmdMaXN0TWFwXCIsXG4gIFwiTnVtYmVyTGlzdE1hcFwiLFxuICBcIkJvb2xlYW5MaXN0TWFwXCIsXG4gIFwiQW55TGlzdE1hcFwiLFxuXSk7XG5cbi8vIFJlc29sdmVzIHRoZSBjb21wb3NlZCBzdG9yZWQgY2xhc3MgbmFtZSB0byB1c2UgZm9yIGEgY29sbGVjdGlvbiBhdHRyaWJ1dGUgKGxpc3Qvc2V0L21hcClcbi8vIHdob3NlIGVsZW1lbnQgaXMgaXRzZWxmIGEgbm9uLWNvbXBsZXggY29sbGVjdGlvbiAob3Igc2ltcGxlIHR5cGUpLlxuLy9cbi8vIGBvd25TdG9yZWRDbGFzc1R5cGVgIGlzIHRoaXMgdHlwZSdzIG93biBjb21wb3NlZCBzdG9yZWRDbGFzc1R5cGUgKGUuZy4gXCJzdHJpbmdMaXN0TWFwTWFwXCJcbi8vIGZvciBtYXAobWFwKGxpc3Qoc3RyaW5nKSkpKSBhbmQgYGVsZW1lbnRUeXBlTW9kZWxUeXBlYCBpcyB0aGUgZWxlbWVudCdzIHR5cGVNb2RlbFR5cGVcbi8vIChcImxpc3RcIiB8IFwic2V0XCIgfCBcIm1hcFwiIHwgXCJzaW1wbGVcIiB8IC4uLikuXG4vL1xuLy8gUmVzb2x1dGlvbiBvcmRlcjpcbi8vICAgMS4gVGhlIG93biBjb21wb3NlZCBuYW1lIChlLmcuIFwiU3RyaW5nTGlzdE1hcE1hcFwiKSAtIHVzZWQgYXMtaXMgd2hlbiBpdCByZWZlcnMgdG8gYVxuLy8gICAgICBjbGFzcyB0aGF0IGlzIGhhbmQtd3JpdHRlbiBpbiB0aGUgY29yZSBwYWNrYWdlIChub3QgY29sbGFwc2VkKS5cbi8vICAgMi4gT3RoZXJ3aXNlLCB0aGUgbmVhcmVzdCB0eXBlZCBcIkFueVwiLXdyYXBwZXIgdGhhdCBzdGlsbCBlbmNvZGVzIHRoZSBvdXRlciB0d28gbGF5ZXJzXG4vLyAgICAgICh0aGlzIHR5cGUncyBvd24gbGF5ZXIgYW5kIGl0cyBlbGVtZW50J3MgbGF5ZXIpLCBlLmcuIFwiQW55TWFwTWFwXCIgLSBjb2xsYXBzaW5nIHRoZVxuLy8gICAgICB1bnN1cHBvcnRlZCBpbm5lciBzaGFwZSBpbnRvIGFuIHVudHlwZWQgYm91bmRhcnkgd2hpbGUgcHJlc2VydmluZyB0eXBlZCBuYXZpZ2F0aW9uXG4vLyAgICAgIGZvciB0aGUgb3V0ZXIgbGF5ZXJzLlxuLy8gICAzLiBPdGhlcndpc2UgKGRlZmVuc2l2ZWx5OyBldmVyeSBkZXB0aCBzaG91bGQgcmVzb2x2ZSB2aWEgMSBvciAyKSwgdW5kZWZpbmVkIC0gdGhlXG4vLyAgICAgIGNhbGxlciBtdXN0IGZhbGwgYmFjayB0byBhIHBsYWluLCB1bnR5cGVkIGdldHRlci5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU3RvcmVkQ2xhc3NOYW1lKFxuICBvd25TdG9yZWRDbGFzc1R5cGU6IHN0cmluZyxcbiAgZWxlbWVudFR5cGVNb2RlbFR5cGU6IHN0cmluZyxcbik6IHsgbmFtZTogc3RyaW5nOyBjb2xsYXBzZWQ6IGJvb2xlYW4gfSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNhbmRpZGF0ZTEgPSB1cHBlcmNhc2VGaXJzdChvd25TdG9yZWRDbGFzc1R5cGUpO1xuICBpZiAoU1VQUE9SVEVEX1NUT1JFRF9DTEFTU0VTLmhhcyhjYW5kaWRhdGUxKSkge1xuICAgIHJldHVybiB7IG5hbWU6IGNhbmRpZGF0ZTEsIGNvbGxhcHNlZDogZmFsc2UgfTtcbiAgfVxuXG4gIGxldCBvd25MYXllcjogXCJMaXN0XCIgfCBcIk1hcFwiIHwgdW5kZWZpbmVkO1xuICBpZiAob3duU3RvcmVkQ2xhc3NUeXBlLmVuZHNXaXRoKFwiTGlzdFwiKSkge1xuICAgIG93bkxheWVyID0gXCJMaXN0XCI7XG4gIH0gZWxzZSBpZiAob3duU3RvcmVkQ2xhc3NUeXBlLmVuZHNXaXRoKFwiTWFwXCIpKSB7XG4gICAgb3duTGF5ZXIgPSBcIk1hcFwiO1xuICB9XG4gIGlmICghb3duTGF5ZXIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IGlubmVyTGF5ZXI6IFwiTGlzdFwiIHwgXCJNYXBcIiB8IHVuZGVmaW5lZDtcbiAgaWYgKGVsZW1lbnRUeXBlTW9kZWxUeXBlID09PSBcImxpc3RcIiB8fCBlbGVtZW50VHlwZU1vZGVsVHlwZSA9PT0gXCJzZXRcIikge1xuICAgIGlubmVyTGF5ZXIgPSBcIkxpc3RcIjtcbiAgfSBlbHNlIGlmIChlbGVtZW50VHlwZU1vZGVsVHlwZSA9PT0gXCJtYXBcIikge1xuICAgIGlubmVyTGF5ZXIgPSBcIk1hcFwiO1xuICB9XG4gIGlmICghaW5uZXJMYXllcikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBjYW5kaWRhdGUyID0gYEFueSR7aW5uZXJMYXllcn0ke293bkxheWVyfWA7XG4gIGlmIChTVVBQT1JURURfU1RPUkVEX0NMQVNTRVMuaGFzKGNhbmRpZGF0ZTIpKSB7XG4gICAgcmV0dXJuIHsgbmFtZTogY2FuZGlkYXRlMiwgY29sbGFwc2VkOiB0cnVlIH07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcG9ydGVkLXN0b3JlZC1jbGFzc2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvbW9kZWxzL3N1cHBvcnRlZC1zdG9yZWQtY2xhc3Nlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW9EQSx3REFtQ0M7QUF2RkQsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx3Q0FBK0M7QUFFL0Msd0ZBQXdGO0FBQ3hGLHFGQUFxRjtBQUNyRixvRkFBb0Y7QUFDcEYseUZBQXlGO0FBQ3pGLHVGQUF1RjtBQUN2RiwwRkFBMEY7QUFDMUYseUZBQXlGO0FBQ3pGLG1GQUFtRjtBQUNuRixNQUFNLHdCQUF3QixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3ZDLFdBQVc7SUFDWCxXQUFXO0lBQ1gsWUFBWTtJQUNaLFFBQVE7SUFDUixjQUFjO0lBQ2QsY0FBYztJQUNkLGVBQWU7SUFDZixXQUFXO0lBQ1gsYUFBYTtJQUNiLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGFBQWE7SUFDYixlQUFlO0lBQ2YsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixZQUFZO0lBQ1osZUFBZTtJQUNmLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsWUFBWTtDQUNiLENBQUMsQ0FBQztBQUVILDJGQUEyRjtBQUMzRixxRUFBcUU7QUFDckUsRUFBRTtBQUNGLDRGQUE0RjtBQUM1Rix3RkFBd0Y7QUFDeEYsNkNBQTZDO0FBQzdDLEVBQUU7QUFDRixvQkFBb0I7QUFDcEIsd0ZBQXdGO0FBQ3hGLHVFQUF1RTtBQUN2RSwwRkFBMEY7QUFDMUYsMEZBQTBGO0FBQzFGLDBGQUEwRjtBQUMxRiw2QkFBNkI7QUFDN0IsdUZBQXVGO0FBQ3ZGLHlEQUF5RDtBQUN6RCxTQUFnQixzQkFBc0IsQ0FDcEMsa0JBQTBCLEVBQzFCLG9CQUE0QjtJQUU1QixNQUFNLFVBQVUsR0FBRyxJQUFBLHFCQUFjLEVBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN0RCxJQUFJLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzdDLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBSSxRQUFvQyxDQUFDO0lBQ3pDLElBQUksa0JBQWtCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDeEMsUUFBUSxHQUFHLE1BQU0sQ0FBQztJQUNwQixDQUFDO1NBQU0sSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxVQUFzQyxDQUFDO0lBQzNDLElBQUksb0JBQW9CLEtBQUssTUFBTSxJQUFJLG9CQUFvQixLQUFLLEtBQUssRUFBRSxDQUFDO1FBQ3RFLFVBQVUsR0FBRyxNQUFNLENBQUM7SUFDdEIsQ0FBQztTQUFNLElBQUksb0JBQW9CLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDMUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxNQUFNLFVBQVUsR0FBRyxRQUFRLEVBQUUsQ0FBQztJQUNqRCxJQUFJLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzdDLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyB1cHBlcmNhc2VGaXJzdCB9IGZyb20gXCIuLi8uLi8uLi91dGlsXCI7XG5cbi8vIFRoZSBjb3JlIGNka3RuIHBhY2thZ2UgKHBhY2thZ2VzL2Nka3RuL3NyYy9jb21wbGV4LWNvbXB1dGVkLWxpc3QudHMpIG9ubHkgaGFuZC13cml0ZXNcbi8vIHRoaXMgZml4ZWQgc2V0IG9mIHdyYXBwZXIgY2xhc3NlcyBmb3IgY29tcHV0ZWQsIG5vbi1jb21wbGV4IGNvbGxlY3Rpb24gYXR0cmlidXRlcy5cbi8vIEFyYml0cmFyaWx5IGRlZXAgbmVzdGluZ3Mgb2YgbGlzdC9zZXQvbWFwIChlLmcuIG1hcChtYXAobGlzdChzdHJpbmcpKSkpIGNvbXBvc2UgYVxuLy8gc3RvcmVkQ2xhc3NUeXBlIChlLmcuIFwic3RyaW5nTGlzdE1hcE1hcFwiKSB0aGF0IGhhcyBubyBjb3JyZXNwb25kaW5nIGNsYXNzLiBSYXRoZXIgdGhhblxuLy8gZmFsbGluZyBiYWNrIHN0cmFpZ2h0IHRvIGEgcGxhaW4sIHVudHlwZWQgZ2V0dGVyLCByZXNvbHZlU3RvcmVkQ2xhc3NOYW1lIGJlbG93IGZpcnN0XG4vLyBsb29rcyBmb3IgdGhlIG5lYXJlc3QgdHlwZWQgXCJBbnlcIi13cmFwcGVyIHRoYXQgc3RpbGwgZXhpc3RzIGluIHRoaXMgc2V0LCBjb2xsYXBzaW5nIHRoZVxuLy8gdW5zdXBwb3J0ZWQgaW5uZXIgc2hhcGUgaW50byBhbiB1bnR5cGVkIGJvdW5kYXJ5IHdoaWxlIHByZXNlcnZpbmcgdHlwZWQgbmF2aWdhdGlvbiBmb3Jcbi8vIHRoZSBvdXRlciBsYXllcnMgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi1jb25zdHJ1Y3RzL2Nkay10ZXJyYWluL2lzc3Vlcy8xMSkuXG5jb25zdCBTVVBQT1JURURfU1RPUkVEX0NMQVNTRVMgPSBuZXcgU2V0KFtcbiAgXCJTdHJpbmdNYXBcIixcbiAgXCJOdW1iZXJNYXBcIixcbiAgXCJCb29sZWFuTWFwXCIsXG4gIFwiQW55TWFwXCIsXG4gIFwiU3RyaW5nTWFwTWFwXCIsXG4gIFwiTnVtYmVyTWFwTWFwXCIsXG4gIFwiQm9vbGVhbk1hcE1hcFwiLFxuICBcIkFueU1hcE1hcFwiLFxuICBcIkJvb2xlYW5MaXN0XCIsXG4gIFwiU3RyaW5nTGlzdExpc3RcIixcbiAgXCJOdW1iZXJMaXN0TGlzdFwiLFxuICBcIkJvb2xlYW5MaXN0TGlzdFwiLFxuICBcIkFueUxpc3RMaXN0XCIsXG4gIFwiU3RyaW5nTWFwTGlzdFwiLFxuICBcIk51bWJlck1hcExpc3RcIixcbiAgXCJCb29sZWFuTWFwTGlzdFwiLFxuICBcIkFueU1hcExpc3RcIixcbiAgXCJTdHJpbmdMaXN0TWFwXCIsXG4gIFwiTnVtYmVyTGlzdE1hcFwiLFxuICBcIkJvb2xlYW5MaXN0TWFwXCIsXG4gIFwiQW55TGlzdE1hcFwiLFxuXSk7XG5cbi8vIFJlc29sdmVzIHRoZSBjb21wb3NlZCBzdG9yZWQgY2xhc3MgbmFtZSB0byB1c2UgZm9yIGEgY29sbGVjdGlvbiBhdHRyaWJ1dGUgKGxpc3Qvc2V0L21hcClcbi8vIHdob3NlIGVsZW1lbnQgaXMgaXRzZWxmIGEgbm9uLWNvbXBsZXggY29sbGVjdGlvbiAob3Igc2ltcGxlIHR5cGUpLlxuLy9cbi8vIGBvd25TdG9yZWRDbGFzc1R5cGVgIGlzIHRoaXMgdHlwZSdzIG93biBjb21wb3NlZCBzdG9yZWRDbGFzc1R5cGUgKGUuZy4gXCJzdHJpbmdMaXN0TWFwTWFwXCJcbi8vIGZvciBtYXAobWFwKGxpc3Qoc3RyaW5nKSkpKSBhbmQgYGVsZW1lbnRUeXBlTW9kZWxUeXBlYCBpcyB0aGUgZWxlbWVudCdzIHR5cGVNb2RlbFR5cGVcbi8vIChcImxpc3RcIiB8IFwic2V0XCIgfCBcIm1hcFwiIHwgXCJzaW1wbGVcIiB8IC4uLikuXG4vL1xuLy8gUmVzb2x1dGlvbiBvcmRlcjpcbi8vICAgMS4gVGhlIG93biBjb21wb3NlZCBuYW1lIChlLmcuIFwiU3RyaW5nTGlzdE1hcE1hcFwiKSAtIHVzZWQgYXMtaXMgd2hlbiBpdCByZWZlcnMgdG8gYVxuLy8gICAgICBjbGFzcyB0aGF0IGlzIGhhbmQtd3JpdHRlbiBpbiB0aGUgY29yZSBwYWNrYWdlIChub3QgY29sbGFwc2VkKS5cbi8vICAgMi4gT3RoZXJ3aXNlLCB0aGUgbmVhcmVzdCB0eXBlZCBcIkFueVwiLXdyYXBwZXIgdGhhdCBzdGlsbCBlbmNvZGVzIHRoZSBvdXRlciB0d28gbGF5ZXJzXG4vLyAgICAgICh0aGlzIHR5cGUncyBvd24gbGF5ZXIgYW5kIGl0cyBlbGVtZW50J3MgbGF5ZXIpLCBlLmcuIFwiQW55TWFwTWFwXCIgLSBjb2xsYXBzaW5nIHRoZVxuLy8gICAgICB1bnN1cHBvcnRlZCBpbm5lciBzaGFwZSBpbnRvIGFuIHVudHlwZWQgYm91bmRhcnkgd2hpbGUgcHJlc2VydmluZyB0eXBlZCBuYXZpZ2F0aW9uXG4vLyAgICAgIGZvciB0aGUgb3V0ZXIgbGF5ZXJzLlxuLy8gICAzLiBPdGhlcndpc2UgKGRlZmVuc2l2ZWx5OyBldmVyeSBkZXB0aCBzaG91bGQgcmVzb2x2ZSB2aWEgMSBvciAyKSwgdW5kZWZpbmVkIC0gdGhlXG4vLyAgICAgIGNhbGxlciBtdXN0IGZhbGwgYmFjayB0byBhIHBsYWluLCB1bnR5cGVkIGdldHRlci5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU3RvcmVkQ2xhc3NOYW1lKFxuICBvd25TdG9yZWRDbGFzc1R5cGU6IHN0cmluZyxcbiAgZWxlbWVudFR5cGVNb2RlbFR5cGU6IHN0cmluZyxcbik6IHsgbmFtZTogc3RyaW5nOyBjb2xsYXBzZWQ6IGJvb2xlYW4gfSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNhbmRpZGF0ZTEgPSB1cHBlcmNhc2VGaXJzdChvd25TdG9yZWRDbGFzc1R5cGUpO1xuICBpZiAoU1VQUE9SVEVEX1NUT1JFRF9DTEFTU0VTLmhhcyhjYW5kaWRhdGUxKSkge1xuICAgIHJldHVybiB7IG5hbWU6IGNhbmRpZGF0ZTEsIGNvbGxhcHNlZDogZmFsc2UgfTtcbiAgfVxuXG4gIGxldCBvd25MYXllcjogXCJMaXN0XCIgfCBcIk1hcFwiIHwgdW5kZWZpbmVkO1xuICBpZiAob3duU3RvcmVkQ2xhc3NUeXBlLmVuZHNXaXRoKFwiTGlzdFwiKSkge1xuICAgIG93bkxheWVyID0gXCJMaXN0XCI7XG4gIH0gZWxzZSBpZiAob3duU3RvcmVkQ2xhc3NUeXBlLmVuZHNXaXRoKFwiTWFwXCIpKSB7XG4gICAgb3duTGF5ZXIgPSBcIk1hcFwiO1xuICB9XG4gIGlmICghb3duTGF5ZXIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IGlubmVyTGF5ZXI6IFwiTGlzdFwiIHwgXCJNYXBcIiB8IHVuZGVmaW5lZDtcbiAgaWYgKGVsZW1lbnRUeXBlTW9kZWxUeXBlID09PSBcImxpc3RcIiB8fCBlbGVtZW50VHlwZU1vZGVsVHlwZSA9PT0gXCJzZXRcIikge1xuICAgIGlubmVyTGF5ZXIgPSBcIkxpc3RcIjtcbiAgfSBlbHNlIGlmIChlbGVtZW50VHlwZU1vZGVsVHlwZSA9PT0gXCJtYXBcIikge1xuICAgIGlubmVyTGF5ZXIgPSBcIk1hcFwiO1xuICB9XG4gIGlmICghaW5uZXJMYXllcikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBjYW5kaWRhdGUyID0gYEFueSR7aW5uZXJMYXllcn0ke293bkxheWVyfWA7XG4gIGlmIChTVVBQT1JURURfU1RPUkVEX0NMQVNTRVMuaGFzKGNhbmRpZGF0ZTIpKSB7XG4gICAgcmV0dXJuIHsgbmFtZTogY2FuZGlkYXRlMiwgY29sbGFwc2VkOiB0cnVlIH07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { CodeMaker } from "codemaker";
|
|
2
|
-
import { ConstructsMakerModuleTarget } from "@cdktn/commons";
|
|
2
|
+
import { ConstructsMakerModuleTarget, TerraformTargetVersions } from "@cdktn/commons";
|
|
3
3
|
export declare class ModuleGenerator {
|
|
4
4
|
private readonly code;
|
|
5
5
|
private readonly targets;
|
|
6
|
-
|
|
6
|
+
private readonly targetVersions?;
|
|
7
|
+
constructor(code: CodeMaker, targets: ConstructsMakerModuleTarget[], targetVersions?: TerraformTargetVersions | undefined);
|
|
7
8
|
private emitSubmodule;
|
|
8
9
|
}
|
|
9
10
|
//# sourceMappingURL=module-generator.d.ts.map
|