@cdktn/provider-generator 0.23.2 → 0.23.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +355 -0
- package/README.md +1 -1
- package/build/__tests__/edge-provider-schema/cli.js +8 -3
- package/build/get/__tests__/generator/provider-source-matching.test.d.ts +2 -0
- package/build/get/__tests__/generator/provider-source-matching.test.js +45 -0
- package/build/get/constructs-maker.js +33 -6
- package/build/get/generator/emitter/struct-emitter.js +3 -3
- package/build/get/generator/provider-generator.js +9 -2
- package/package.json +19 -17
- package/package.sh +1 -1
- package/src/__tests__/__snapshots__/provider.test.ts.snap +2334 -2334
- package/src/__tests__/edge-provider-schema/builder.ts +185 -0
- package/src/__tests__/edge-provider-schema/cli.ts +51 -0
- package/src/__tests__/edge-provider-schema/index.ts +161 -0
- package/src/__tests__/edge-provider-schema.test.ts +24 -0
- package/src/__tests__/provider.test.ts +180 -0
- package/src/get/__tests__/constructs-maker.test.ts +118 -0
- package/src/get/__tests__/generator/__snapshots__/complex-computed-types.test.ts.snap +4 -4
- package/src/get/__tests__/generator/__snapshots__/export-sharding.test.ts.snap +3042 -3042
- package/src/get/__tests__/generator/__snapshots__/nested-types.test.ts.snap +6 -6
- package/src/get/__tests__/generator/__snapshots__/provider.test.ts.snap +8 -8
- package/src/get/__tests__/generator/__snapshots__/resource-types.test.ts.snap +106 -106
- package/src/get/__tests__/generator/__snapshots__/skipped-attributes.test.ts.snap +14 -14
- package/src/get/__tests__/generator/__snapshots__/types.test.ts.snap +34 -34
- package/src/get/__tests__/generator/complex-computed-types.test.ts +28 -0
- package/src/get/__tests__/generator/deep-nested-attributes.test.ts +56 -0
- package/src/get/__tests__/generator/description-escaping.test.ts +84 -0
- package/src/get/__tests__/generator/empty-provider-resources.test.ts +26 -0
- package/src/get/__tests__/generator/export-sharding.test.ts +169 -0
- package/src/get/__tests__/generator/import-style.test.ts +129 -0
- package/src/get/__tests__/generator/module-generator.test.ts +528 -0
- package/src/get/__tests__/generator/nested-types.test.ts +54 -0
- package/src/get/__tests__/generator/provider-source-matching.test.ts +84 -0
- package/src/get/__tests__/generator/provider.test.ts +51 -0
- package/src/get/__tests__/generator/resource-types.test.ts +118 -0
- package/src/get/__tests__/generator/skipped-attributes.test.ts +72 -0
- package/src/get/__tests__/generator/types.test.ts +611 -0
- package/src/get/__tests__/generator/versions-file.test.ts +72 -0
- package/src/get/__tests__/util.ts +75 -0
- package/src/get/constructs-maker.ts +845 -0
- package/src/get/generator/custom-defaults.ts +493 -0
- package/src/get/generator/emitter/attributes-emitter.ts +225 -0
- package/src/get/generator/emitter/index.ts +5 -0
- package/src/get/generator/emitter/resource-emitter.ts +226 -0
- package/src/get/generator/emitter/struct-emitter.ts +683 -0
- package/src/get/generator/loop-detection.ts +81 -0
- package/src/get/generator/models/attribute-model.ts +216 -0
- package/src/get/generator/models/attribute-type-model.ts +448 -0
- package/src/get/generator/models/index.ts +7 -0
- package/src/get/generator/models/resource-model.ts +161 -0
- package/src/get/generator/models/scope.ts +54 -0
- package/src/get/generator/models/struct.ts +116 -0
- package/src/get/generator/module-generator.ts +234 -0
- package/src/get/generator/provider-generator.ts +362 -0
- package/src/get/generator/resource-parser.ts +762 -0
- package/src/get/generator/sanitized-comments.ts +49 -0
- package/src/get/generator/skipped-attributes.ts +27 -0
- package/src/index.ts +40 -0
- package/src/util.ts +26 -0
|
@@ -463,7 +463,7 @@ class StructEmitter {
|
|
|
463
463
|
: ""}${struct.name}${!struct.isClass ? " | cdktn.IResolvable" : ""}): any`);
|
|
464
464
|
this.code.line(`if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) { return struct; }`);
|
|
465
465
|
this.code.openBlock(`if (cdktn.isComplexElement(struct))`);
|
|
466
|
-
this.code.line(`throw new Error("A complex element was used as configuration, this is not supported: https://
|
|
466
|
+
this.code.line(`throw new Error("A complex element was used as configuration, this is not supported: https://cdktn.io/docs/concepts/resources#references");`);
|
|
467
467
|
this.code.closeBlock();
|
|
468
468
|
this.code.open(`const attrs = {`);
|
|
469
469
|
for (const att of struct.assignableAttributes) {
|
|
@@ -488,7 +488,7 @@ class StructEmitter {
|
|
|
488
488
|
: ""}${struct.name}${!struct.isClass ? " | cdktn.IResolvable" : ""}): any`);
|
|
489
489
|
this.code.line(`if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) { return struct; }`);
|
|
490
490
|
this.code.openBlock(`if (cdktn.isComplexElement(struct))`);
|
|
491
|
-
this.code.line(`throw new Error("A complex element was used as configuration, this is not supported: https://
|
|
491
|
+
this.code.line(`throw new Error("A complex element was used as configuration, this is not supported: https://cdktn.io/docs/concepts/resources#references");`);
|
|
492
492
|
this.code.closeBlock();
|
|
493
493
|
this.code.openBlock("return");
|
|
494
494
|
for (const att of struct.assignableAttributes) {
|
|
@@ -500,4 +500,4 @@ class StructEmitter {
|
|
|
500
500
|
}
|
|
501
501
|
}
|
|
502
502
|
exports.StructEmitter = StructEmitter;
|
|
503
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RydWN0LWVtaXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2V0L2dlbmVyYXRvci9lbWl0dGVyL3N0cnVjdC1lbWl0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0Esc0NBQWdFO0FBQ2hFLDZEQUF5RDtBQUN6RCx3Q0FBOEM7QUFDOUMsMkNBQTZCO0FBQzdCLDZEQUFxRTtBQUVyRSw4REFBeUQ7QUFFekQsTUFBYSxhQUFhO0lBSXhCLFlBQ21CLElBQWUsRUFDaEMsZUFBdUI7UUFETixTQUFJLEdBQUosSUFBSSxDQUFXO1FBR2hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLHNDQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0lBRU0sSUFBSSxDQUFDLFFBQXVCO1FBQ2pDLElBQUksUUFBUSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVELCtHQUErRztJQUMvRywwRUFBMEU7SUFDMUUscUdBQXFHO0lBQzdGLGdCQUFnQixDQUFDLEdBQW1CO1FBQzFDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDWixvSkFBb0osQ0FDckosQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLDZKQUE2SixDQUM5SixDQUFDO1FBQ0osQ0FBQztJ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QztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQS9wQkQsc0NBK3BCQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBDb2RlTWFrZXIgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQgeyBSZXNvdXJjZU1vZGVsLCBTdHJ1Y3QsIENvbmZpZ1N0cnVjdCB9IGZyb20gXCIuLi9tb2RlbHNcIjtcbmltcG9ydCB7IEF0dHJpYnV0ZXNFbWl0dGVyIH0gZnJvbSBcIi4vYXR0cmlidXRlcy1lbWl0dGVyXCI7XG5pbXBvcnQgeyBkb3duY2FzZUZpcnN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IFNUUlVDVF9TSEFSRElOR19USFJFU0hPTEQgfSBmcm9tIFwiLi4vbW9kZWxzL3Jlc291cmNlLW1vZGVsXCI7XG5pbXBvcnQgeyBBdHRyaWJ1dGVNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHMvYXR0cmlidXRlLW1vZGVsXCI7XG5pbXBvcnQgeyBzYW5pdGl6ZWRDb21tZW50IH0gZnJvbSBcIi4uL3Nhbml0aXplZC1jb21tZW50c1wiO1xuXG5leHBvcnQgY2xhc3MgU3RydWN0RW1pdHRlciB7XG4gIGF0dHJpYnV0ZXNFbWl0dGVyOiBBdHRyaWJ1dGVzRW1pdHRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBpbXBvcnRFeHRlbnNpb246IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvZGU6IENvZGVNYWtlcixcbiAgICBpbXBvcnRFeHRlbnNpb246IHN0cmluZyxcbiAgKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVzRW1pdHRlciA9IG5ldyBBdHRyaWJ1dGVzRW1pdHRlcih0aGlzLmNvZGUpO1xuICAgIHRoaXMuaW1wb3J0RXh0ZW5zaW9uID0gaW1wb3J0RXh0ZW5zaW9uO1xuICB9XG5cbiAgcHVibGljIGVtaXQocmVzb3VyY2U6IFJlc291cmNlTW9kZWwpIHtcbiAgICBpZiAocmVzb3VyY2Uuc3RydWN0c1JlcXVpcmVTaGFyZGluZykge1xuICAgICAgdGhpcy5lbWl0TmFtZXNwYWNlZFN0cnVjdHMocmVzb3VyY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVtaXRTdHJ1Y3RzKHJlc291cmNlKTtcbiAgICB9XG4gIH1cblxuICAvLyBEdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC90ZXJyYWZvcm0tcGx1Z2luLXNkay9jb21taXQvMjM4N2ViODVlMzJjMDY0YjRhNjI3MThjOWY1YzgwYmYwMGRjN2ZiOSBhbGxcbiAgLy8gcmVzb3VyY2VzIGZyb20gcHJvdmlkZXJzIHVzaW5nIHRoZSBvbGQgU0RLIGhhdmUgdGhlIGlkIGZpZWxkIGJ5IGRlZmF1bHRcbiAgLy8gV2UgaGF2ZSBubyB3YXkgdG8gZGlzdGluZ3Vpc2ggdGhlbSB0aHJvdWdoIHRoZSBwcm92aWRlciBzY2hlbWEsIHNvIGEgd29yZCBvZiB3YXJuaW5nIGZvciBvdXIgdXNlcnNcbiAgcHJpdmF0ZSB3YXJuQWJvdXRJZEZpZWxkKGF0dDogQXR0cmlidXRlTW9kZWwpIHtcbiAgICBpZiAoYXR0Lm5hbWUgPT09IFwiaWRcIikge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYCpgKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgKiBQbGVhc2UgYmUgYXdhcmUgdGhhdCB0aGUgaWQgZmllbGQgaXMgYXV0b21hdGljYWxseSBhZGRlZCB0byBhbGwgcmVzb3VyY2VzIGluIFRlcnJhZm9ybSBwcm92aWRlcnMgdXNpbmcgYSBUZXJyYWZvcm0gcHJvdmlkZXIgU0RLIHZlcnNpb24gYmVsb3cgMi5gLFxuICAgICAgKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgKiBJZiB5b3UgZXhwZXJpZW5jZSBwcm9ibGVtcyBzZXR0aW5nIHRoaXMgdmFsdWUgaXQgbWlnaHQgbm90IGJlIHNldHRhYmxlLiBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgdGhlIHByb3ZpZGVyIGRvY3VtZW50YXRpb24gdG8gZW5zdXJlIGl0IHNob3VsZCBiZSBzZXR0YWJsZS5gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZW1pdEludGVyZmFjZShcbiAgICByZXNvdXJjZTogUmVzb3VyY2VNb2RlbCxcbiAgICBzdHJ1Y3Q6IFN0cnVjdCxcbiAgICBuYW1lID0gc3RydWN0Lm5hbWUsXG4gICkge1xuICAgIGlmIChyZXNvdXJjZS5pc1Byb3ZpZGVyKSB7XG4gICAgICB0aGlzLmNvZGUub3BlbkJsb2NrKGBleHBvcnQgaW50ZXJmYWNlICR7bmFtZX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2RlLm9wZW5CbG9jayhgZXhwb3J0IGludGVyZmFjZSAke25hbWV9JHtzdHJ1Y3QuZXh0ZW5kc31gKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGF0dCBvZiBzdHJ1Y3QuYXNzaWduYWJsZUF0dHJpYnV0ZXMpIHtcbiAgICAgIGNvbnN0IGNvbW1lbnQgPSBzYW5pdGl6ZWRDb21tZW50KHRoaXMuY29kZSk7XG4gICAgICBpZiAoYXR0LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGNvbW1lbnQubGluZShhdHQuZGVzY3JpcHRpb24pO1xuICAgICAgICBjb21tZW50LmxpbmUoYGApO1xuICAgICAgICBjb21tZW50LmxpbmUoXG4gICAgICAgICAgYERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgJHtyZXNvdXJjZS5saW5rVG9Eb2NzfSMke2F0dC50ZXJyYWZvcm1OYW1lfSAke3Jlc291cmNlLmNsYXNzTmFtZX0jJHthdHQudGVycmFmb3JtTmFtZX19YCxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy53YXJuQWJvdXRJZEZpZWxkKGF0dCk7XG4gICAgICAgIGNvbW1lbnQuZW5kKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21tZW50LmxpbmUoXG4gICAgICAgICAgYERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgJHtyZXNvdXJjZS5saW5rVG9Eb2NzfSMke2F0dC50ZXJyYWZvcm1OYW1lfSAke3Jlc291cmNlLmNsYXNzTmFtZX0jJHthdHQudGVycmFmb3JtTmFtZX19YCxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy53YXJuQWJvdXRJZEZpZWxkKGF0dCk7XG4gICAgICAgIGNvbW1lbnQuZW5kKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29kZS5saW5lKGByZWFkb25seSAke2F0dC50eXBlRGVmaW5pdGlvbn07YCk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICBpZiAoIShzdHJ1Y3QgaW5zdGFuY2VvZiBDb25maWdTdHJ1Y3QpKSB7XG4gICAgICB0aGlzLmVtaXRUb1RlcnJhZm9ybUZ1bmN0aW9uKHN0cnVjdCk7XG4gICAgICB0aGlzLmVtaXRUb0hjbFRlcnJhZm9ybUZ1bmN0aW9uKHN0cnVjdCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U3RydWN0cyhyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCkge1xuICAgIHJlc291cmNlLnN0cnVjdHMuZm9yRWFjaCgoc3RydWN0KSA9PiB7XG4gICAgICBpZiAoc3RydWN0IGluc3RhbmNlb2YgQ29uZmlnU3RydWN0KSB7XG4gICAgICAgIHRoaXMuZW1pdEludGVyZmFjZShyZXNvdXJjZSwgc3RydWN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdlIHVzZSB0aGUgaW50ZXJmYWNlIGhlcmUgZm9yIHRoZSBjb25maWd1cmF0aW9uIC8gaW5wdXRzIG9mIGEgcmVzb3VyY2UgLyBuZXN0ZWQgYmxvY2tcbiAgICAgICAgdGhpcy5lbWl0SW50ZXJmYWNlKHJlc291cmNlLCBzdHJ1Y3QpO1xuICAgICAgICAvLyBBbmQgd2UgdXNlIHRoZSBjbGFzcyBmb3IgdGhlIGF0dHJpYnV0ZXMgLyBvdXRwdXRzIG9mIGEgcmVzb3VyY2UgLyBuZXN0ZWQgYmxvY2tcbiAgICAgICAgaWYgKCFzdHJ1Y3QuaXNQcm92aWRlcikge1xuICAgICAgICAgIHRoaXMuZW1pdENsYXNzKHN0cnVjdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdE5hbWVzcGFjZWRTdHJ1Y3RzKHJlc291cmNlOiBSZXNvdXJjZU1vZGVsKSB7XG4gICAgLy8gaXRlcmF0ZSBvdmVyIGFsbCBzdHJ1Y3RzIGluIGJhdGNoZXMgb2YgNDAwIHRvIGF2b2lkIHRvbyBtYW55IGV4cG9ydHMgKD4gMTIwMClcbiAgICBjb25zdCBzdHJ1Y3RJbXBvcnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICAvLyBkcm9wIGNvbmZpZ1N0cnVjdCBmcm9tIHJlc291cmNlLnN0cnVjdHMgdG8gYXZvaWQgZG91YmxlIGltcG9ydFxuICAgIGNvbnN0IHN0cnVjdHNXaXRob3V0Q29uZmlnU3RydWN0ID0gcmVzb3VyY2Uuc3RydWN0cy5zbGljZSgxKTtcblxuICAgIGNvbnN0IHN0cnVjdFNwbGl0czogU3RydWN0W11bXSA9IFtbXV07XG4gICAgY29uc3Qgc3BsaXRDb3VudHM6IG51bWJlcltdID0gWzBdO1xuICAgIHN0cnVjdHNXaXRob3V0Q29uZmlnU3RydWN0LmZvckVhY2goKHN0cnVjdCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBzcGxpdENvdW50c1tzcGxpdENvdW50cy5sZW5ndGggLSAxXSArIHN0cnVjdC5leHBvcnRDb3VudCA8PVxuICAgICAgICBTVFJVQ1RfU0hBUkRJTkdfVEhSRVNIT0xEXG4gICAgICApIHtcbiAgICAgICAgc3RydWN0U3BsaXRzW3N0cnVjdFNwbGl0cy5sZW5ndGggLSAxXS5wdXNoKHN0cnVjdCk7XG4gICAgICAgIHNwbGl0Q291bnRzW3NwbGl0Q291bnRzLmxlbmd0aCAtIDFdICs9IHN0cnVjdC5leHBvcnRDb3VudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0cnVjdFNwbGl0cy5wdXNoKFtzdHJ1Y3RdKTtcbiAgICAgICAgc3BsaXRDb3VudHMucHVzaChzdHJ1Y3QuZXhwb3J0Q291bnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gZmlsbCB0aGUgc3RydWN0IGltcG9ydHMgbWFwcGluZyBiZWZvcmUgY29kZSBnZW5lcmF0aW9uIHNvIHRoYXQgaW1wb3J0cyBjYW5cbiAgICAvLyBwb2ludCB0byBub3QgeWV0IGdlbmVyYXRlZCBzdHJ1Y3QgZmlsZXNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cnVjdFNwbGl0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc3RydWN0RmlsZW5hbWUgPSBgc3RydWN0cyR7aSAqIFNUUlVDVF9TSEFSRElOR19USFJFU0hPTER9LnRzYDtcbiAgICAgIGNvbnN0IHN0cnVjdHMgPSBzdHJ1Y3RTcGxpdHNbaV07XG5cbiAgICAgIC8vIGFzc29jaWF0ZSBjdXJyZW50IHN0cnVjdHMgYmF0Y2ggd2l0aCB0aGUgZmlsZSBpdCB3aWxsIGJlIHdyaXR0ZW4gdG9cbiAgICAgIC8vIHRvIGZpbmQgaXQgaW4gc3Vic2VxdWVudCBmaWxlcyBmb3IgaW1wb3J0aW5nXG4gICAgICBzdHJ1Y3RzLmZvckVhY2goXG4gICAgICAgIChzdHJ1Y3QpID0+IChzdHJ1Y3RJbXBvcnRzW3N0cnVjdC5uYW1lXSA9IHN0cnVjdEZpbGVuYW1lKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RydWN0UGF0aHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cnVjdFNwbGl0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc3RydWN0c1RvSW1wb3J0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcbiAgICAgIGNvbnN0IHN0cnVjdHMgPSBzdHJ1Y3RTcGxpdHNbaV07XG4gICAgICBjb25zdCBzdHJ1Y3RGaWxlbmFtZSA9IGBzdHJ1Y3RzJHtpICogU1RSVUNUX1NIQVJESU5HX1RIUkVTSE9MRH0udHNgO1xuICAgICAgc3RydWN0UGF0aHMucHVzaChzdHJ1Y3RGaWxlbmFtZSk7XG5cbiAgICAgIC8vIGZpbmQgYWxsIHN0cnVjdHMgdGhhdCBuZWVkIHRvIGJlIGltcG9ydGVkIGluIHRoaXMgZmlsZVxuICAgICAgc3RydWN0cy5mb3JFYWNoKChzdHJ1Y3QpID0+IHtcbiAgICAgICAgc3RydWN0LmF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0KSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RydWN0VHlwZU5hbWUgPSBhdHQudHlwZS5zdHJ1Y3Q/Lm5hbWU7XG4gICAgICAgICAgY29uc3QgZmlsZVRvSW1wb3J0ID0gc3RydWN0SW1wb3J0c1tzdHJ1Y3RUeXBlTmFtZSA/PyBcIlwiXTtcblxuICAgICAgICAgIGlmIChmaWxlVG9JbXBvcnQgJiYgZmlsZVRvSW1wb3J0ICE9PSBzdHJ1Y3RGaWxlbmFtZSkge1xuICAgICAgICAgICAgY29uc3QgYXR0VHlwZVN0cnVjdCA9IGF0dC50eXBlLnN0cnVjdDtcbiAgICAgICAgICAgIGlmICghYXR0VHlwZVN0cnVjdClcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3N0cnVjdFR5cGVOYW1lfSBpcyBub3QgYSBzdHJ1Y3RgKTtcblxuICAgICAgICAgICAgc3RydWN0c1RvSW1wb3J0W2ZpbGVUb0ltcG9ydF0gPz89IFtdO1xuXG4gICAgICAgICAgICBjb25zdCBhdHRSZWZlcmVuY2VzID0gYXR0LmdldFJlZmVyZW5jZWRUeXBlcyhcbiAgICAgICAgICAgICAgc3RydWN0IGluc3RhbmNlb2YgQ29uZmlnU3RydWN0LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChhdHRSZWZlcmVuY2VzKSB7XG4gICAgICAgICAgICAgIHN0cnVjdHNUb0ltcG9ydFtmaWxlVG9JbXBvcnRdLnB1c2goLi4uYXR0UmVmZXJlbmNlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBuYW1lc3BhY2VkRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgIHJlc291cmNlLnN0cnVjdHNGb2xkZXJQYXRoLFxuICAgICAgICBzdHJ1Y3RGaWxlbmFtZSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuY29kZS5vcGVuRmlsZShuYW1lc3BhY2VkRmlsZVBhdGgpO1xuICAgICAgLy8gdGhlIHN0cnVjdHMgb25seSBtYWtlcyB1c2Ugb2YgY2RrdG4gbm90IGNvbnN0cnVjdHNcbiAgICAgIHRoaXMuY29kZS5saW5lKGBpbXBvcnQgKiBhcyBjZGt0biBmcm9tICdjZGt0bic7YCk7XG4gICAgICBPYmplY3QuZW50cmllcyhzdHJ1Y3RzVG9JbXBvcnQpLmZvckVhY2goKFtmaWxlVG9JbXBvcnQsIHN0cnVjdHNdKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHBhdGguYmFzZW5hbWUoZmlsZVRvSW1wb3J0LCBcIi50c1wiKTtcbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgICAgYGltcG9ydCB7ICR7Wy4uLm5ldyBTZXQoc3RydWN0cyldLmpvaW4oXCIsXFxuXCIpfSB9IGZyb20gJy4vJHt0YXJnZXR9JHt0aGlzLmltcG9ydEV4dGVuc2lvbn0nO2AsXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgc3RydWN0cy5mb3JFYWNoKChzdHJ1Y3QpID0+IHtcbiAgICAgICAgaWYgKHN0cnVjdCBpbnN0YW5jZW9mIENvbmZpZ1N0cnVjdCkge1xuICAgICAgICAgIHRoaXMuZW1pdEludGVyZmFjZShyZXNvdXJjZSwgc3RydWN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXZSB1c2UgdGhlIGludGVyZmFjZSBoZXJlIGZvciB0aGUgY29uZmlndXJhdGlvbiAvIGlucHV0cyBvZiBhIHJlc291cmNlIC8gbmVzdGVkIGJsb2NrXG4gICAgICAgICAgdGhpcy5lbWl0SW50ZXJmYWNlKHJlc291cmNlLCBzdHJ1Y3QpO1xuICAgICAgICAgIC8vIEFuZCB3ZSB1c2UgdGhlIGNsYXNzIGZvciB0aGUgYXR0cmlidXRlcyAvIG91dHB1dHMgb2YgYSByZXNvdXJjZSAvIG5lc3RlZCBibG9ja1xuICAgICAgICAgIGlmICghc3RydWN0LmlzUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdENsYXNzKHN0cnVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29kZS5jbG9zZUZpbGUobmFtZXNwYWNlZEZpbGVQYXRoKTtcbiAgICB9XG5cbiAgICAvLyBlbWl0IHRoZSBpbmRleCBmaWxlIHRoYXQgZXhwb3J0cyBhbGwgdGhlIHN0cnVjdCBmaWxlcyB3ZSd2ZSBqdXN0IGdlbmVyYXRlZFxuICAgIGNvbnN0IGluZGV4RmlsZVBhdGggPSBwYXRoLmpvaW4ocmVzb3VyY2Uuc3RydWN0c0ZvbGRlclBhdGgsIFwiaW5kZXgudHNcIik7XG5cbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoaW5kZXhGaWxlUGF0aCk7XG4gICAgc3RydWN0UGF0aHMuZm9yRWFjaCgoc3RydWN0UGF0aCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gcGF0aC5iYXNlbmFtZShzdHJ1Y3RQYXRoLCBcIi50c1wiKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKGBleHBvcnQgKiBmcm9tICcuLyR7dGFyZ2V0fSR7dGhpcy5pbXBvcnRFeHRlbnNpb259JztgKTtcbiAgICB9KTtcbiAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKGluZGV4RmlsZVBhdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Q2xhc3Moc3RydWN0OiBTdHJ1Y3QpIHtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYGV4cG9ydCBjbGFzcyAke3N0cnVjdC5vdXRwdXRSZWZlcmVuY2VOYW1lfSBleHRlbmRzIGNka3RuLkNvbXBsZXhPYmplY3RgLFxuICAgICk7XG5cbiAgICB0aGlzLmNvZGUubGluZShcInByaXZhdGUgaXNFbXB0eU9iamVjdCA9IGZhbHNlO1wiKTtcbiAgICBpZiAoIXN0cnVjdC5pc0NsYXNzKSB7XG4gICAgICB0aGlzLmNvZGUubGluZShcInByaXZhdGUgcmVzb2x2YWJsZVZhbHVlPzogY2RrdG4uSVJlc29sdmFibGU7XCIpO1xuICAgIH1cbiAgICB0aGlzLmNvZGUubGluZSgpO1xuXG4gICAgY29uc3QgY29tbWVudCA9IHNhbml0aXplZENvbW1lbnQodGhpcy5jb2RlKTtcbiAgICBjb21tZW50LmxpbmUoYEBwYXJhbSB0ZXJyYWZvcm1SZXNvdXJjZSBUaGUgcGFyZW50IHJlc291cmNlYCk7XG4gICAgY29tbWVudC5saW5lKFxuICAgICAgYEBwYXJhbSB0ZXJyYWZvcm1BdHRyaWJ1dGUgVGhlIGF0dHJpYnV0ZSBvbiB0aGUgcGFyZW50IHJlc291cmNlIHRoaXMgY2xhc3MgaXMgcmVmZXJlbmNpbmdgLFxuICAgICk7XG4gICAgaWYgKHN0cnVjdC5pc1NpbmdsZUl0ZW0pIHtcbiAgICAgIGNvbW1lbnQuZW5kKCk7XG4gICAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgICBgcHVibGljIGNvbnN0cnVjdG9yKHRlcnJhZm9ybVJlc291cmNlOiBjZGt0bi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpYCxcbiAgICAgICk7XG4gICAgICB0aGlzLmNvZGUubGluZShgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgZmFsc2UsIDApO2ApO1xuICAgICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc3RydWN0Lm5lc3RpbmdNb2RlID09PSBcInNpbmdsZVwiIHx8XG4gICAgICBzdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwib2JqZWN0XCJcbiAgICApIHtcbiAgICAgIGNvbW1lbnQuZW5kKCk7XG4gICAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgICBgcHVibGljIGNvbnN0cnVjdG9yKHRlcnJhZm9ybVJlc291cmNlOiBjZGt0bi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpYCxcbiAgICAgICk7XG4gICAgICB0aGlzLmNvZGUubGluZShgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgZmFsc2UpO2ApO1xuICAgICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB9IGVsc2UgaWYgKHN0cnVjdC5uZXN0aW5nTW9kZS5zdGFydHNXaXRoKFwibWFwXCIpKSB7XG4gICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgYCogQHBhcmFtIGNvbXBsZXhPYmplY3RLZXkgdGhlIGtleSBvZiB0aGlzIGl0ZW0gaW4gdGhlIG1hcGAsXG4gICAgICApO1xuICAgICAgY29tbWVudC5lbmQoKTtcbiAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICAgIGBwdWJsaWMgY29uc3RydWN0b3IodGVycmFmb3JtUmVzb3VyY2U6IGNka3RuLklJbnRlcnBvbGF0aW5nUGFyZW50LCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZywgY29tcGxleE9iamVjdEtleTogc3RyaW5nKWAsXG4gICAgICApO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgIGBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCBmYWxzZSwgY29tcGxleE9iamVjdEtleSk7YCxcbiAgICAgICk7XG4gICAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21tZW50LmxpbmUoXG4gICAgICAgIGBAcGFyYW0gY29tcGxleE9iamVjdEluZGV4IHRoZSBpbmRleCBvZiB0aGlzIGl0ZW0gaW4gdGhlIGxpc3RgLFxuICAgICAgKTtcbiAgICAgIGNvbW1lbnQubGluZShcbiAgICAgICAgYEBwYXJhbSBjb21wbGV4T2JqZWN0SXNGcm9tU2V0IHdoZXRoZXIgdGhlIGxpc3QgaXMgd3JhcHBpbmcgYSBzZXQgKHdpbGwgYWRkIHRvbGlzdCgpIHRvIGJlIGFibGUgdG8gYWNjZXNzIGFuIGl0ZW0gdmlhIGFuIGluZGV4KWAsXG4gICAgICApO1xuICAgICAgY29tbWVudC5lbmQoKTtcbiAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICAgIGBwdWJsaWMgY29uc3RydWN0b3IodGVycmFmb3JtUmVzb3VyY2U6IGNka3RuLklJbnRlcnBvbGF0aW5nUGFyZW50LCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZywgY29tcGxleE9iamVjdEluZGV4OiBudW1iZXIsIGNvbXBsZXhPYmplY3RJc0Zyb21TZXQ6IGJvb2xlYW4pYCxcbiAgICAgICk7XG4gICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgYHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIGNvbXBsZXhPYmplY3RJc0Zyb21TZXQsIGNvbXBsZXhPYmplY3RJbmRleCk7YCxcbiAgICAgICk7XG4gICAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgIH1cblxuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5lbWl0SW50ZXJuYWxWYWx1ZUdldHRlcihzdHJ1Y3QpO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5lbWl0SW50ZXJuYWxWYWx1ZVNldHRlcihzdHJ1Y3QpO1xuXG4gICAgZm9yIChjb25zdCBhdHQgb2Ygc3RydWN0LmF0dHJpYnV0ZXMpIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlc0VtaXR0ZXIuZW1pdChcbiAgICAgICAgYXR0LFxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNFbWl0dGVyLm5lZWRzUmVzZXRFc2NhcGUoYXR0LCBzdHJ1Y3QuYXR0cmlidXRlcyksXG4gICAgICAgIHRoaXMuYXR0cmlidXRlc0VtaXR0ZXIubmVlZHNJbnB1dEVzY2FwZShhdHQsIHN0cnVjdC5hdHRyaWJ1dGVzKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcblxuICAgIGlmIChcbiAgICAgICFzdHJ1Y3QuaXNTaW5nbGVJdGVtICYmXG4gICAgICAoc3RydWN0Lm5lc3RpbmdNb2RlID09PSBcImxpc3RcIiB8fCBzdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwic2V0XCIpXG4gICAgKSB7XG4gICAgICB0aGlzLmVtaXRDb21wbGV4TGlzdENsYXNzKHN0cnVjdCk7XG4gICAgfSBlbHNlIGlmIChzdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwibWFwXCIpIHtcbiAgICAgIHRoaXMuZW1pdENvbXBsZXhNYXBDbGFzcyhzdHJ1Y3QpO1xuICAgIH0gZWxzZSBpZiAoc3RydWN0Lm5lc3RpbmdNb2RlID09PSBcIm1hcGxpc3RcIikge1xuICAgICAgdGhpcy5lbWl0Q29tcGxleE1hcExpc3RDbGFzc2VzKHN0cnVjdCk7XG4gICAgfSBlbHNlIGlmIChzdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwibWFwc2V0XCIpIHtcbiAgICAgIHRoaXMuZW1pdENvbXBsZXhNYXBMaXN0Q2xhc3NlcyhzdHJ1Y3QpO1xuICAgIH0gZWxzZSBpZiAoc3RydWN0Lm5lc3RpbmdNb2RlID09PSBcImxpc3RtYXBcIikge1xuICAgICAgdGhpcy5lbWl0Q29tcGxleExpc3RNYXBDbGFzc2VzKHN0cnVjdCwgZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAoc3RydWN0Lm5lc3RpbmdNb2RlID09PSBcInNldG1hcFwiKSB7XG4gICAgICB0aGlzLmVtaXRDb21wbGV4TGlzdE1hcENsYXNzZXMoc3RydWN0LCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc3RydWN0Lm5lc3RpbmdNb2RlID09PSBcImxpc3RsaXN0XCIgfHxcbiAgICAgIHN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJsaXN0c2V0XCIgfHxcbiAgICAgIHN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJzZXRsaXN0XCIgfHxcbiAgICAgIHN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJzZXRzZXRcIlxuICAgICkge1xuICAgICAgdGhpcy5lbWl0Q29tcGxleExpc3RMaXN0Q2xhc3NlcyhzdHJ1Y3QpO1xuICAgIH1cbiAgICAvLyBvdGhlciB0eXBlcyBvZiBuZXN0ZWQgY29sbGVjdGlvbnMgYXJlbid0IHN1cHBvcnRlZFxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Q29tcGxleExpc3RDbGFzcyhzdHJ1Y3Q6IFN0cnVjdCkge1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBleHBvcnQgY2xhc3MgJHtzdHJ1Y3QubGlzdE5hbWV9IGV4dGVuZHMgY2RrdG4uQ29tcGxleExpc3RgLFxuICAgICk7XG5cbiAgICBpZiAoc3RydWN0LmFzc2lnbmFibGUpIHtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgcHVibGljIGludGVybmFsVmFsdWU/IDogJHtzdHJ1Y3QubmFtZX1bXSB8IGNka3RuLklSZXNvbHZhYmxlYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICBjb25zdCBjb25zdHJ1Y3RvckNvbW1lbnQgPSBzYW5pdGl6ZWRDb21tZW50KHRoaXMuY29kZSk7XG4gICAgY29uc3RydWN0b3JDb21tZW50LmxpbmUoYEBwYXJhbSB0ZXJyYWZvcm1SZXNvdXJjZSBUaGUgcGFyZW50IHJlc291cmNlYCk7XG4gICAgY29uc3RydWN0b3JDb21tZW50LmxpbmUoXG4gICAgICBgQHBhcmFtIHRlcnJhZm9ybUF0dHJpYnV0ZSBUaGUgYXR0cmlidXRlIG9uIHRoZSBwYXJlbnQgcmVzb3VyY2UgdGhpcyBjbGFzcyBpcyByZWZlcmVuY2luZ2AsXG4gICAgKTtcbiAgICBjb25zdHJ1Y3RvckNvbW1lbnQubGluZShcbiAgICAgIGBAcGFyYW0gd3JhcHNTZXQgd2hldGhlciB0aGUgbGlzdCBpcyB3cmFwcGluZyBhIHNldCAod2lsbCBhZGQgdG9saXN0KCkgdG8gYmUgYWJsZSB0byBhY2Nlc3MgYW4gaXRlbSB2aWEgYW4gaW5kZXgpYCxcbiAgICApO1xuICAgIGNvbnN0cnVjdG9yQ29tbWVudC5lbmQoKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYGNvbnN0cnVjdG9yKHRlcnJhZm9ybVJlc291cmNlOiBjZGt0bi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsIHdyYXBzU2V0OiBib29sZWFuKWAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUubGluZShgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpO2ApO1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIGNvbnN0IGdldHRlckNvbW1lbnQgPSBzYW5pdGl6ZWRDb21tZW50KHRoaXMuY29kZSk7XG4gICAgZ2V0dGVyQ29tbWVudC5saW5lKGBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIHJldHVybmApO1xuICAgIGdldHRlckNvbW1lbnQuZW5kKCk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpOiAke3N0cnVjdC5vdXRwdXRSZWZlcmVuY2VOYW1lfWAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUubGluZShcbiAgICAgIGByZXR1cm4gbmV3ICR7c3RydWN0Lm91dHB1dFJlZmVyZW5jZU5hbWV9KHRoaXMudGVycmFmb3JtUmVzb3VyY2UsIHRoaXMudGVycmFmb3JtQXR0cmlidXRlLCBpbmRleCwgdGhpcy53cmFwc1NldCk7YCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Q29tcGxleE1hcENsYXNzKHN0cnVjdDogU3RydWN0KSB7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYGV4cG9ydCBjbGFzcyAke3N0cnVjdC5tYXBOYW1lfSBleHRlbmRzIGNka3RuLkNvbXBsZXhNYXBgLFxuICAgICk7XG5cbiAgICBpZiAoc3RydWN0LmFzc2lnbmFibGUpIHtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgcHVibGljIGludGVybmFsVmFsdWU/IDogeyBba2V5OiBzdHJpbmddOiAke3N0cnVjdC5uYW1lfSB9IHwgY2RrdG4uSVJlc29sdmFibGVgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIGNvbnN0IGNvbnN0cnVjdG9yQ29tbWVudCA9IHNhbml0aXplZENvbW1lbnQodGhpcy5jb2RlKTtcbiAgICBjb25zdHJ1Y3RvckNvbW1lbnQubGluZShgQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VgKTtcbiAgICBjb25zdHJ1Y3RvckNvbW1lbnQubGluZShcbiAgICAgIGBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nYCxcbiAgICApO1xuICAgIGNvbnN0cnVjdG9yQ29tbWVudC5lbmQoKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYGNvbnN0cnVjdG9yKHRlcnJhZm9ybVJlc291cmNlOiBjZGt0bi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpYCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5saW5lKGBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuXG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICBjb25zdCBnZXR0ZXJDb21tZW50ID0gc2FuaXRpemVkQ29tbWVudCh0aGlzLmNvZGUpO1xuICAgIGdldHRlckNvbW1lbnQubGluZShgQHBhcmFtIGtleSB0aGUga2V5IG9mIHRoZSBpdGVtIHRvIHJldHVybmApO1xuICAgIGdldHRlckNvbW1lbnQuZW5kKCk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBwdWJsaWMgZ2V0KGtleTogc3RyaW5nKTogJHtzdHJ1Y3Qub3V0cHV0UmVmZXJlbmNlTmFtZX1gLFxuICAgICk7XG4gICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICBgcmV0dXJuIG5ldyAke3N0cnVjdC5vdXRwdXRSZWZlcmVuY2VOYW1lfSh0aGlzLnRlcnJhZm9ybVJlc291cmNlLCB0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSwga2V5KTtgLFxuICAgICk7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcblxuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDb21wbGV4TWFwTGlzdENsYXNzZXMoc3RydWN0OiBTdHJ1Y3QpIHtcbiAgICB0aGlzLmVtaXRDb21wbGV4TWFwTGlzdENsYXNzKHN0cnVjdCk7XG4gICAgdGhpcy5lbWl0Q29tcGxleE1hcENsYXNzKHN0cnVjdCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDb21wbGV4TWFwTGlzdENsYXNzKHN0cnVjdDogU3RydWN0KSB7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYGV4cG9ydCBjbGFzcyAke3N0cnVjdC5tYXBMaXN0TmFtZX0gZXh0ZW5kcyBjZGt0bi5NYXBMaXN0YCxcbiAgICApO1xuXG4gICAgaWYgKHN0cnVjdC5hc3NpZ25hYmxlKSB7XG4gICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgYHB1YmxpYyBpbnRlcm5hbFZhbHVlPyA6ICR7c3RydWN0Lm1hcE5hbWV9W10gfCBjZGt0bi5JUmVzb2x2YWJsZWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgY29uc3QgY29uc3RydWN0b3JDb21tZW50ID0gc2FuaXRpemVkQ29tbWVudCh0aGlzLmNvZGUpO1xuICAgIGNvbnN0cnVjdG9yQ29tbWVudC5saW5lKGBAcGFyYW0gdGVycmFmb3JtUmVzb3VyY2UgVGhlIHBhcmVudCByZXNvdXJjZWApO1xuICAgIGNvbnN0cnVjdG9yQ29tbWVudC5saW5lKFxuICAgICAgYEBwYXJhbSB0ZXJyYWZvcm1BdHRyaWJ1dGUgVGhlIGF0dHJpYnV0ZSBvbiB0aGUgcGFyZW50IHJlc291cmNlIHRoaXMgY2xhc3MgaXMgcmVmZXJlbmNpbmdgLFxuICAgICk7XG4gICAgY29uc3RydWN0b3JDb21tZW50LmxpbmUoXG4gICAgICBgQHBhcmFtIHdyYXBzU2V0IHdoZXRoZXIgdGhlIGxpc3QgaXMgd3JhcHBpbmcgYSBzZXQgKHdpbGwgYWRkIHRvbGlzdCgpIHRvIGJlIGFibGUgdG8gYWNjZXNzIGFuIGl0ZW0gdmlhIGFuIGluZGV4KWAsXG4gICAgKTtcbiAgICBjb25zdHJ1Y3RvckNvbW1lbnQuZW5kKCk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBjb25zdHJ1Y3Rvcih0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLCB3cmFwc1NldDogYm9vbGVhbilgLFxuICAgICk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIHdyYXBzU2V0KTtgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuXG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICBjb25zdCBnZXR0ZXJDb21tZW50ID0gc2FuaXRpemVkQ29tbWVudCh0aGlzLmNvZGUpO1xuICAgIGdldHRlckNvbW1lbnQubGluZShgQHBhcmFtIGluZGV4IHRoZSBpbmRleCBvZiB0aGUgaXRlbSB0byByZXR1cm5gKTtcbiAgICBnZXR0ZXJDb21tZW50LmVuZCgpO1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYHB1YmxpYyBnZXQoaW5kZXg6IG51bWJlcik6ICR7c3RydWN0Lm1hcE5hbWV9YCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYHJldHVybiBuZXcgJHtzdHJ1Y3QubWFwTmFtZX0odGhpcywgXFxgW1xcJHtpbmRleH1dXFxgKTtgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuXG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdENvbXBsZXhMaXN0TWFwQ2xhc3NlcyhzdHJ1Y3Q6IFN0cnVjdCwgaXNTZXQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmVtaXRDb21wbGV4TGlzdE1hcENsYXNzKHN0cnVjdCwgaXNTZXQpO1xuICAgIHRoaXMuZW1pdENvbXBsZXhMaXN0Q2xhc3Moc3RydWN0KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdENvbXBsZXhMaXN0TWFwQ2xhc3Moc3RydWN0OiBTdHJ1Y3QsIGlzU2V0OiBib29sZWFuKSB7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYGV4cG9ydCBjbGFzcyAke3N0cnVjdC5saXN0TWFwTmFtZX0gZXh0ZW5kcyBjZGt0bi5Db21wbGV4TWFwYCxcbiAgICApO1xuXG4gICAgaWYgKHN0cnVjdC5hc3NpZ25hYmxlKSB7XG4gICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgYHB1YmxpYyBpbnRlcm5hbFZhbHVlPyA6IHsgW2tleTogc3RyaW5nXTogJHtzdHJ1Y3QubmFtZX1bXSB9IHwgY2RrdG4uSVJlc29sdmFibGVgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIGNvbnN0IGNvbnN0cnVjdG9yQ29tbWVudCA9IHNhbml0aXplZENvbW1lbnQodGhpcy5jb2RlKTtcbiAgICBjb25zdHJ1Y3RvckNvbW1lbnQubGluZShgQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VgKTtcbiAgICBjb25zdHJ1Y3RvckNvbW1lbnQubGluZShcbiAgICAgIGBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nYCxcbiAgICApO1xuICAgIGNvbnN0cnVjdG9yQ29tbWVudC5lbmQoKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYGNvbnN0cnVjdG9yKHRlcnJhZm9ybVJlc291cmNlOiBjZGt0bi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpYCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5saW5lKGBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuXG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICBjb25zdCBnZXR0ZXJDb21tZW50ID0gc2FuaXRpemVkQ29tbWVudCh0aGlzLmNvZGUpO1xuICAgIGdldHRlckNvbW1lbnQubGluZShgQHBhcmFtIGtleSB0aGUga2V5IG9mIHRoZSBpdGVtIHRvIHJldHVybmApO1xuICAgIGdldHRlckNvbW1lbnQuZW5kKCk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhgcHVibGljIGdldChrZXk6IHN0cmluZyk6ICR7c3RydWN0Lmxpc3ROYW1lfWApO1xuICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgYHJldHVybiBuZXcgJHtzdHJ1Y3QubGlzdE5hbWV9KHRoaXMsIFxcYFtcXCR7a2V5fV1cXGAsICR7aXNTZXR9KTtgLFxuICAgICk7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcblxuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDb21wbGV4TGlzdExpc3RDbGFzc2VzKHN0cnVjdDogU3RydWN0KSB7XG4gICAgdGhpcy5lbWl0Q29tcGxleExpc3RMaXN0Q2xhc3Moc3RydWN0KTtcbiAgICB0aGlzLmVtaXRDb21wbGV4TGlzdENsYXNzKHN0cnVjdCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDb21wbGV4TGlzdExpc3RDbGFzcyhzdHJ1Y3Q6IFN0cnVjdCkge1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBleHBvcnQgY2xhc3MgJHtzdHJ1Y3QubGlzdExpc3ROYW1lfSBleHRlbmRzIGNka3RuLk1hcExpc3RgLCAvLyBkZXNwaXRlIG5hbWUsIG5lZWQgdGhlIHNhbWUgYmVoYXZpb3JcbiAgICApO1xuXG4gICAgaWYgKHN0cnVjdC5hc3NpZ25hYmxlKSB7XG4gICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgYHB1YmxpYyBpbnRlcm5hbFZhbHVlPyA6ICR7c3RydWN0Lm5hbWV9W11bXSB8IGNka3RuLklSZXNvbHZhYmxlYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICBjb25zdCBjb25zdHJ1Y3RvckNvbW1lbnQgPSBzYW5pdGl6ZWRDb21tZW50KHRoaXMuY29kZSk7XG4gICAgY29uc3RydWN0b3JDb21tZW50LmxpbmUoYEBwYXJhbSB0ZXJyYWZvcm1SZXNvdXJjZSBUaGUgcGFyZW50IHJlc291cmNlYCk7XG4gICAgY29uc3RydWN0b3JDb21tZW50LmxpbmUoXG4gICAgICBgQHBhcmFtIHRlcnJhZm9ybUF0dHJpYnV0ZSBUaGUgYXR0cmlidXRlIG9uIHRoZSBwYXJlbnQgcmVzb3VyY2UgdGhpcyBjbGFzcyBpcyByZWZlcmVuY2luZ2AsXG4gICAgKTtcbiAgICBjb25zdHJ1Y3RvckNvbW1lbnQubGluZShcbiAgICAgIGBAcGFyYW0gd3JhcHNTZXQgd2hldGhlciB0aGUgbGlzdCBpcyB3cmFwcGluZyBhIHNldCAod2lsbCBhZGQgdG9saXN0KCkgdG8gYmUgYWJsZSB0byBhY2Nlc3MgYW4gaXRlbSB2aWEgYW4gaW5kZXgpYCxcbiAgICApO1xuICAgIGNvbnN0cnVjdG9yQ29tbWVudC5lbmQoKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYGNvbnN0cnVjdG9yKHRlcnJhZm9ybVJlc291cmNlOiBjZGt0bi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsIHdyYXBzU2V0OiBib29sZWFuKWAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUubGluZShgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpO2ApO1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIGNvbnN0IGdldHRlckNvbW1lbnQgPSBzYW5pdGl6ZWRDb21tZW50KHRoaXMuY29kZSk7XG4gICAgZ2V0dGVyQ29tbWVudC5saW5lKGBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIHJldHVybmApO1xuICAgIGdldHRlckNvbW1lbnQuZW5kKCk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhgcHVibGljIGdldChpbmRleDogbnVtYmVyKTogJHtzdHJ1Y3QubGlzdE5hbWV9YCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICBgcmV0dXJuIG5ldyAke3N0cnVjdC5saXN0TmFtZX0odGhpcywgXFxgW1xcJHtpbmRleH1dXFxgLCAke1xuICAgICAgICBzdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwic2V0bGlzdFwiIHx8IHN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJzZXRzZXRcIlxuICAgICAgfSk7YCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0SW50ZXJuYWxWYWx1ZUdldHRlcihzdHJ1Y3Q6IFN0cnVjdCkge1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICBgcHVibGljIGdldCBpbnRlcm5hbFZhbHVlKCk6ICR7c3RydWN0Lm5hbWV9JHtcbiAgICAgICAgIXN0cnVjdC5pc0NsYXNzID8gXCIgfCBjZGt0bi5JUmVzb2x2YWJsZVwiIDogXCJcIlxuICAgICAgfSB8IHVuZGVmaW5lZGAsXG4gICAgKTtcblxuICAgIGlmICghc3RydWN0LmlzQ2xhc3MpIHtcbiAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXCJpZiAodGhpcy5yZXNvbHZhYmxlVmFsdWUpXCIpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoXCJyZXR1cm4gdGhpcy5yZXNvbHZhYmxlVmFsdWU7XCIpO1xuICAgICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGUubGluZShcImxldCBoYXNBbnlWYWx1ZXMgPSB0aGlzLmlzRW1wdHlPYmplY3Q7XCIpO1xuICAgIHRoaXMuY29kZS5saW5lKFwiY29uc3QgaW50ZXJuYWxWYWx1ZVJlc3VsdDogYW55ID0ge307XCIpO1xuICAgIGZvciAoY29uc3QgYXR0IG9mIHN0cnVjdC5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoYXR0LmlzU3RvcmVkKSB7XG4gICAgICAgIGlmIChhdHQuZ2V0dGVyVHlwZS5fdHlwZSA9PT0gXCJzdG9yZWRfY2xhc3NcIikge1xuICAgICAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICAgICAgICBgaWYgKHRoaXMuJHthdHQuc3RvcmFnZU5hbWV9Py5pbnRlcm5hbFZhbHVlICE9PSB1bmRlZmluZWQpYCxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYGlmICh0aGlzLiR7YXR0LnN0b3JhZ2VOYW1lfSAhPT0gdW5kZWZpbmVkKWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29kZS5saW5lKFwiaGFzQW55VmFsdWVzID0gdHJ1ZTtcIik7XG4gICAgICAgIGlmIChhdHQuZ2V0dGVyVHlwZS5fdHlwZSA9PT0gXCJzdG9yZWRfY2xhc3NcIikge1xuICAgICAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICAgICAgYGludGVybmFsVmFsdWVSZXN1bHQuJHthdHQubmFtZX0gPSB0aGlzLiR7YXR0LnN0b3JhZ2VOYW1lfT8uaW50ZXJuYWxWYWx1ZTtgLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgICAgICBgaW50ZXJuYWxWYWx1ZVJlc3VsdC4ke2F0dC5uYW1lfSA9IHRoaXMuJHthdHQuc3RvcmFnZU5hbWV9O2AsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNvZGUubGluZShcInJldHVybiBoYXNBbnlWYWx1ZXMgPyBpbnRlcm5hbFZhbHVlUmVzdWx0IDogdW5kZWZpbmVkO1wiKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0SW50ZXJuYWxWYWx1ZVNldHRlcihzdHJ1Y3Q6IFN0cnVjdCkge1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICBgcHVibGljIHNldCBpbnRlcm5hbFZhbHVlKHZhbHVlOiAke3N0cnVjdC5uYW1lfSR7XG4gICAgICAgICFzdHJ1Y3QuaXNDbGFzcyA/IFwiIHwgY2RrdG4uSVJlc29sdmFibGVcIiA6IFwiXCJcbiAgICAgIH0gfCB1bmRlZmluZWQpYCxcbiAgICApO1xuXG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcImlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVwiKTtcbiAgICB0aGlzLmNvZGUubGluZShcInRoaXMuaXNFbXB0eU9iamVjdCA9IGZhbHNlO1wiKTtcbiAgICBpZiAoIXN0cnVjdC5pc0NsYXNzKSB7XG4gICAgICB0aGlzLmNvZGUubGluZShcInRoaXMucmVzb2x2YWJsZVZhbHVlID0gdW5kZWZpbmVkO1wiKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBhdHQgb2Ygc3RydWN0LmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChhdHQuaXNTdG9yZWQpIHtcbiAgICAgICAgaWYgKGF0dC5zZXR0ZXJUeXBlLl90eXBlID09PSBcInN0b3JlZF9jbGFzc1wiKSB7XG4gICAgICAgICAgdGhpcy5jb2RlLmxpbmUoYHRoaXMuJHthdHQuc3RvcmFnZU5hbWV9LmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7YCk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXR0LnNldHRlclR5cGUuX3R5cGUgIT09IFwibm9uZVwiKSB7XG4gICAgICAgICAgdGhpcy5jb2RlLmxpbmUoYHRoaXMuJHthdHQuc3RvcmFnZU5hbWV9ID0gdW5kZWZpbmVkO2ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgaWYgKCFzdHJ1Y3QuaXNDbGFzcykge1xuICAgICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcImVsc2UgaWYgKGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUodmFsdWUpKVwiKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKFwidGhpcy5pc0VtcHR5T2JqZWN0ID0gZmFsc2U7XCIpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoXCJ0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHZhbHVlO1wiKTtcbiAgICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXCJlbHNlXCIpO1xuICAgIHRoaXMuY29kZS5saW5lKFwidGhpcy5pc0VtcHR5T2JqZWN0ID0gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMDtcIik7XG4gICAgaWYgKCFzdHJ1Y3QuaXNDbGFzcykge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoXCJ0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHVuZGVmaW5lZDtcIik7XG4gICAgfVxuICAgIGZvciAoY29uc3QgYXR0IG9mIHN0cnVjdC5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoYXR0LmlzU3RvcmVkKSB7XG4gICAgICAgIGlmIChhdHQuc2V0dGVyVHlwZS5fdHlwZSA9PT0gXCJzdG9yZWRfY2xhc3NcIikge1xuICAgICAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICAgICAgYHRoaXMuJHthdHQuc3RvcmFnZU5hbWV9LmludGVybmFsVmFsdWUgPSB2YWx1ZS4ke2F0dC5uYW1lfTtgLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXR0LnNldHRlclR5cGUuX3R5cGUgIT09IFwibm9uZVwiKSB7XG4gICAgICAgICAgdGhpcy5jb2RlLmxpbmUoYHRoaXMuJHthdHQuc3RvcmFnZU5hbWV9ID0gdmFsdWUuJHthdHQubmFtZX07YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0VG9IY2xUZXJyYWZvcm1GdW5jdGlvbihzdHJ1Y3Q6IFN0cnVjdCkge1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBleHBvcnQgZnVuY3Rpb24gJHtkb3duY2FzZUZpcnN0KHN0cnVjdC5uYW1lKX1Ub0hjbFRlcnJhZm9ybShzdHJ1Y3Q/OiAke1xuICAgICAgICBzdHJ1Y3QuaXNTaW5nbGVJdGVtICYmICFzdHJ1Y3QuaXNQcm92aWRlclxuICAgICAgICAgID8gYCR7c3RydWN0Lm5hbWV9T3V0cHV0UmVmZXJlbmNlIHwgYFxuICAgICAgICAgIDogXCJcIlxuICAgICAgfSR7c3RydWN0Lm5hbWV9JHshc3RydWN0LmlzQ2xhc3MgPyBcIiB8IGNka3RuLklSZXNvbHZhYmxlXCIgOiBcIlwifSk6IGFueWAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUubGluZShcbiAgICAgIGBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfWAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKGBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKWApO1xuICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgYHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtgLFxuICAgICk7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcblxuICAgIHRoaXMuY29kZS5vcGVuKGBjb25zdCBhdHRycyA9IHtgKTtcblxuICAgIGZvciAoY29uc3QgYXR0IG9mIHN0cnVjdC5hc3NpZ25hYmxlQXR0cmlidXRlcykge1xuICAgICAgdGhpcy5hdHRyaWJ1dGVzRW1pdHRlci5lbWl0VG9IY2xUZXJyYWZvcm0oYXR0LCB0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGUuY2xvc2UoYH07YCk7XG5cbiAgICBpZiAoc3RydWN0LmFzc2lnbmFibGVBdHRyaWJ1dGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgICB0aGlzLmNvZGUubGluZShgLy8gcmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzYCk7XG4gICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgYHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYXR0cnMpLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSk7YCxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29kZS5saW5lKGByZXR1cm4gYXR0cnM7YCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0VG9UZXJyYWZvcm1GdW5jdGlvbihzdHJ1Y3Q6IFN0cnVjdCkge1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBleHBvcnQgZnVuY3Rpb24gJHtkb3duY2FzZUZpcnN0KHN0cnVjdC5uYW1lKX1Ub1RlcnJhZm9ybShzdHJ1Y3Q/OiAke1xuICAgICAgICBzdHJ1Y3QuaXNTaW5nbGVJdGVtICYmICFzdHJ1Y3QuaXNQcm92aWRlclxuICAgICAgICAgID8gYCR7c3RydWN0Lm5hbWV9T3V0cHV0UmVmZXJlbmNlIHwgYFxuICAgICAgICAgIDogXCJcIlxuICAgICAgfSR7c3RydWN0Lm5hbWV9JHshc3RydWN0LmlzQ2xhc3MgPyBcIiB8IGNka3RuLklSZXNvbHZhYmxlXCIgOiBcIlwifSk6IGFueWAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUubGluZShcbiAgICAgIGBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfWAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKGBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKWApO1xuICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgYHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtgLFxuICAgICk7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcblxuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXCJyZXR1cm5cIik7XG4gICAgZm9yIChjb25zdCBhdHQgb2Ygc3RydWN0LmFzc2lnbmFibGVBdHRyaWJ1dGVzKSB7XG4gICAgICB0aGlzLmF0dHJpYnV0ZXNFbWl0dGVyLmVtaXRUb1RlcnJhZm9ybShhdHQsIHRydWUpO1xuICAgIH1cbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jayhcIjtcIik7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICB9XG59XG4iXX0=
|
|
503
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RydWN0LWVtaXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2V0L2dlbmVyYXRvci9lbWl0dGVyL3N0cnVjdC1lbWl0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0Esc0NBQWdFO0FBQ2hFLDZEQUF5RDtBQUN6RCx3Q0FBOEM7QUFDOUMsMkNBQTZCO0FBQzdCLDZEQUFxRTtBQUVyRSw4REFBeUQ7QUFFekQsTUFBYSxhQUFhO0lBSXhCLFlBQ21CLElBQWUsRUFDaEMsZUFBdUI7UUFETixTQUFJLEdBQUosSUFBSSxDQUFXO1FBR2hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLHNDQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0lBRU0sSUFBSSxDQUFDLFFBQXVCO1FBQ2pDLElBQUksUUFBUSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVELCtHQUErRztJQUMvRywwRUFBMEU7SUFDMUUscUdBQXFHO0lBQzdGLGdCQUFnQixDQUFDLEdBQW1CO1FBQzFDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDWixvSkFBb0osQ0FDckosQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLDZKQUE2SixDQUM5SixDQUFDO1FBQ0osQ0FBQztJ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QztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQS9wQkQsc0NBK3BCQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBDb2RlTWFrZXIgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQgeyBSZXNvdXJjZU1vZGVsLCBTdHJ1Y3QsIENvbmZpZ1N0cnVjdCB9IGZyb20gXCIuLi9tb2RlbHNcIjtcbmltcG9ydCB7IEF0dHJpYnV0ZXNFbWl0dGVyIH0gZnJvbSBcIi4vYXR0cmlidXRlcy1lbWl0dGVyXCI7XG5pbXBvcnQgeyBkb3duY2FzZUZpcnN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IFNUUlVDVF9TSEFSRElOR19USFJFU0hPTEQgfSBmcm9tIFwiLi4vbW9kZWxzL3Jlc291cmNlLW1vZGVsXCI7XG5pbXBvcnQgeyBBdHRyaWJ1dGVNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHMvYXR0cmlidXRlLW1vZGVsXCI7XG5pbXBvcnQgeyBzYW5pdGl6ZWRDb21tZW50IH0gZnJvbSBcIi4uL3Nhbml0aXplZC1jb21tZW50c1wiO1xuXG5leHBvcnQgY2xhc3MgU3RydWN0RW1pdHRlciB7XG4gIGF0dHJpYnV0ZXNFbWl0dGVyOiBBdHRyaWJ1dGVzRW1pdHRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBpbXBvcnRFeHRlbnNpb246IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvZGU6IENvZGVNYWtlcixcbiAgICBpbXBvcnRFeHRlbnNpb246IHN0cmluZyxcbiAgKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVzRW1pdHRlciA9IG5ldyBBdHRyaWJ1dGVzRW1pdHRlcih0aGlzLmNvZGUpO1xuICAgIHRoaXMuaW1wb3J0RXh0ZW5zaW9uID0gaW1wb3J0RXh0ZW5zaW9uO1xuICB9XG5cbiAgcHVibGljIGVtaXQocmVzb3VyY2U6IFJlc291cmNlTW9kZWwpIHtcbiAgICBpZiAocmVzb3VyY2Uuc3RydWN0c1JlcXVpcmVTaGFyZGluZykge1xuICAgICAgdGhpcy5lbWl0TmFtZXNwYWNlZFN0cnVjdHMocmVzb3VyY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVtaXRTdHJ1Y3RzKHJlc291cmNlKTtcbiAgICB9XG4gIH1cblxuICAvLyBEdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC90ZXJyYWZvcm0tcGx1Z2luLXNkay9jb21taXQvMjM4N2ViODVlMzJjMDY0YjRhNjI3MThjOWY1YzgwYmYwMGRjN2ZiOSBhbGxcbiAgLy8gcmVzb3VyY2VzIGZyb20gcHJvdmlkZXJzIHVzaW5nIHRoZSBvbGQgU0RLIGhhdmUgdGhlIGlkIGZpZWxkIGJ5IGRlZmF1bHRcbiAgLy8gV2UgaGF2ZSBubyB3YXkgdG8gZGlzdGluZ3Vpc2ggdGhlbSB0aHJvdWdoIHRoZSBwcm92aWRlciBzY2hlbWEsIHNvIGEgd29yZCBvZiB3YXJuaW5nIGZvciBvdXIgdXNlcnNcbiAgcHJpdmF0ZSB3YXJuQWJvdXRJZEZpZWxkKGF0dDogQXR0cmlidXRlTW9kZWwpIHtcbiAgICBpZiAoYXR0Lm5hbWUgPT09IFwiaWRcIikge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYCpgKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgKiBQbGVhc2UgYmUgYXdhcmUgdGhhdCB0aGUgaWQgZmllbGQgaXMgYXV0b21hdGljYWxseSBhZGRlZCB0byBhbGwgcmVzb3VyY2VzIGluIFRlcnJhZm9ybSBwcm92aWRlcnMgdXNpbmcgYSBUZXJyYWZvcm0gcHJvdmlkZXIgU0RLIHZlcnNpb24gYmVsb3cgMi5gLFxuICAgICAgKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgKiBJZiB5b3UgZXhwZXJpZW5jZSBwcm9ibGVtcyBzZXR0aW5nIHRoaXMgdmFsdWUgaXQgbWlnaHQgbm90IGJlIHNldHRhYmxlLiBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgdGhlIHByb3ZpZGVyIGRvY3VtZW50YXRpb24gdG8gZW5zdXJlIGl0IHNob3VsZCBiZSBzZXR0YWJsZS5gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZW1pdEludGVyZmFjZShcbiAgICByZXNvdXJjZTogUmVzb3VyY2VNb2RlbCxcbiAgICBzdHJ1Y3Q6IFN0cnVjdCxcbiAgICBuYW1lID0gc3RydWN0Lm5hbWUsXG4gICkge1xuICAgIGlmIChyZXNvdXJjZS5pc1Byb3ZpZGVyKSB7XG4gICAgICB0aGlzLmNvZGUub3BlbkJsb2NrKGBleHBvcnQgaW50ZXJmYWNlICR7bmFtZX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2RlLm9wZW5CbG9jayhgZXhwb3J0IGludGVyZmFjZSAke25hbWV9JHtzdHJ1Y3QuZXh0ZW5kc31gKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGF0dCBvZiBzdHJ1Y3QuYXNzaWduYWJsZUF0dHJpYnV0ZXMpIHtcbiAgICAgIGNvbnN0IGNvbW1lbnQgPSBzYW5pdGl6ZWRDb21tZW50KHRoaXMuY29kZSk7XG4gICAgICBpZiAoYXR0LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGNvbW1lbnQubGluZShhdHQuZGVzY3JpcHRpb24pO1xuICAgICAgICBjb21tZW50LmxpbmUoYGApO1xuICAgICAgICBjb21tZW50LmxpbmUoXG4gICAgICAgICAgYERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgJHtyZXNvdXJjZS5saW5rVG9Eb2NzfSMke2F0dC50ZXJyYWZvcm1OYW1lfSAke3Jlc291cmNlLmNsYXNzTmFtZX0jJHthdHQudGVycmFmb3JtTmFtZX19YCxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy53YXJuQWJvdXRJZEZpZWxkKGF0dCk7XG4gICAgICAgIGNvbW1lbnQuZW5kKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21tZW50LmxpbmUoXG4gICAgICAgICAgYERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgJHtyZXNvdXJjZS5saW5rVG9Eb2NzfSMke2F0dC50ZXJyYWZvcm1OYW1lfSAke3Jlc291cmNlLmNsYXNzTmFtZX0jJHthdHQudGVycmFmb3JtTmFtZX19YCxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy53YXJuQWJvdXRJZEZpZWxkKGF0dCk7XG4gICAgICAgIGNvbW1lbnQuZW5kKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29kZS5saW5lKGByZWFkb25seSAke2F0dC50eXBlRGVmaW5pdGlvbn07YCk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICBpZiAoIShzdHJ1Y3QgaW5zdGFuY2VvZiBDb25maWdTdHJ1Y3QpKSB7XG4gICAgICB0aGlzLmVtaXRUb1RlcnJhZm9ybUZ1bmN0aW9uKHN0cnVjdCk7XG4gICAgICB0aGlzLmVtaXRUb0hjbFRlcnJhZm9ybUZ1bmN0aW9uKHN0cnVjdCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U3RydWN0cyhyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCkge1xuICAgIHJlc291cmNlLnN0cnVjdHMuZm9yRWFjaCgoc3RydWN0KSA9PiB7XG4gICAgICBpZiAoc3RydWN0IGluc3RhbmNlb2YgQ29uZmlnU3RydWN0KSB7XG4gICAgICAgIHRoaXMuZW1pdEludGVyZmFjZShyZXNvdXJjZSwgc3RydWN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdlIHVzZSB0aGUgaW50ZXJmYWNlIGhlcmUgZm9yIHRoZSBjb25maWd1cmF0aW9uIC8gaW5wdXRzIG9mIGEgcmVzb3VyY2UgLyBuZXN0ZWQgYmxvY2tcbiAgICAgICAgdGhpcy5lbWl0SW50ZXJmYWNlKHJlc291cmNlLCBzdHJ1Y3QpO1xuICAgICAgICAvLyBBbmQgd2UgdXNlIHRoZSBjbGFzcyBmb3IgdGhlIGF0dHJpYnV0ZXMgLyBvdXRwdXRzIG9mIGEgcmVzb3VyY2UgLyBuZXN0ZWQgYmxvY2tcbiAgICAgICAgaWYgKCFzdHJ1Y3QuaXNQcm92aWRlcikge1xuICAgICAgICAgIHRoaXMuZW1pdENsYXNzKHN0cnVjdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdE5hbWVzcGFjZWRTdHJ1Y3RzKHJlc291cmNlOiBSZXNvdXJjZU1vZGVsKSB7XG4gICAgLy8gaXRlcmF0ZSBvdmVyIGFsbCBzdHJ1Y3RzIGluIGJhdGNoZXMgb2YgNDAwIHRvIGF2b2lkIHRvbyBtYW55IGV4cG9ydHMgKD4gMTIwMClcbiAgICBjb25zdCBzdHJ1Y3RJbXBvcnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICAvLyBkcm9wIGNvbmZpZ1N0cnVjdCBmcm9tIHJlc291cmNlLnN0cnVjdHMgdG8gYXZvaWQgZG91YmxlIGltcG9ydFxuICAgIGNvbnN0IHN0cnVjdHNXaXRob3V0Q29uZmlnU3RydWN0ID0gcmVzb3VyY2Uuc3RydWN0cy5zbGljZSgxKTtcblxuICAgIGNvbnN0IHN0cnVjdFNwbGl0czogU3RydWN0W11bXSA9IFtbXV07XG4gICAgY29uc3Qgc3BsaXRDb3VudHM6IG51bWJlcltdID0gWzBdO1xuICAgIHN0cnVjdHNXaXRob3V0Q29uZmlnU3RydWN0LmZvckVhY2goKHN0cnVjdCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBzcGxpdENvdW50c1tzcGxpdENvdW50cy5sZW5ndGggLSAxXSArIHN0cnVjdC5leHBvcnRDb3VudCA8PVxuICAgICAgICBTVFJVQ1RfU0hBUkRJTkdfVEhSRVNIT0xEXG4gICAgICApIHtcbiAgICAgICAgc3RydWN0U3BsaXRzW3N0cnVjdFNwbGl0cy5sZW5ndGggLSAxXS5wdXNoKHN0cnVjdCk7XG4gICAgICAgIHNwbGl0Q291bnRzW3NwbGl0Q291bnRzLmxlbmd0aCAtIDFdICs9IHN0cnVjdC5leHBvcnRDb3VudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0cnVjdFNwbGl0cy5wdXNoKFtzdHJ1Y3RdKTtcbiAgICAgICAgc3BsaXRDb3VudHMucHVzaChzdHJ1Y3QuZXhwb3J0Q291bnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gZmlsbCB0aGUgc3RydWN0IGltcG9ydHMgbWFwcGluZyBiZWZvcmUgY29kZSBnZW5lcmF0aW9uIHNvIHRoYXQgaW1wb3J0cyBjYW5cbiAgICAvLyBwb2ludCB0byBub3QgeWV0IGdlbmVyYXRlZCBzdHJ1Y3QgZmlsZXNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cnVjdFNwbGl0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc3RydWN0RmlsZW5hbWUgPSBgc3RydWN0cyR7aSAqIFNUUlVDVF9TSEFSRElOR19USFJFU0hPTER9LnRzYDtcbiAgICAgIGNvbnN0IHN0cnVjdHMgPSBzdHJ1Y3RTcGxpdHNbaV07XG5cbiAgICAgIC8vIGFzc29jaWF0ZSBjdXJyZW50IHN0cnVjdHMgYmF0Y2ggd2l0aCB0aGUgZmlsZSBpdCB3aWxsIGJlIHdyaXR0ZW4gdG9cbiAgICAgIC8vIHRvIGZpbmQgaXQgaW4gc3Vic2VxdWVudCBmaWxlcyBmb3IgaW1wb3J0aW5nXG4gICAgICBzdHJ1Y3RzLmZvckVhY2goXG4gICAgICAgIChzdHJ1Y3QpID0+IChzdHJ1Y3RJbXBvcnRzW3N0cnVjdC5uYW1lXSA9IHN0cnVjdEZpbGVuYW1lKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RydWN0UGF0aHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cnVjdFNwbGl0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc3RydWN0c1RvSW1wb3J0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcbiAgICAgIGNvbnN0IHN0cnVjdHMgPSBzdHJ1Y3RTcGxpdHNbaV07XG4gICAgICBjb25zdCBzdHJ1Y3RGaWxlbmFtZSA9IGBzdHJ1Y3RzJHtpICogU1RSVUNUX1NIQVJESU5HX1RIUkVTSE9MRH0udHNgO1xuICAgICAgc3RydWN0UGF0aHMucHVzaChzdHJ1Y3RGaWxlbmFtZSk7XG5cbiAgICAgIC8vIGZpbmQgYWxsIHN0cnVjdHMgdGhhdCBuZWVkIHRvIGJlIGltcG9ydGVkIGluIHRoaXMgZmlsZVxuICAgICAgc3RydWN0cy5mb3JFYWNoKChzdHJ1Y3QpID0+IHtcbiAgICAgICAgc3RydWN0LmF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0KSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RydWN0VHlwZU5hbWUgPSBhdHQudHlwZS5zdHJ1Y3Q/Lm5hbWU7XG4gICAgICAgICAgY29uc3QgZmlsZVRvSW1wb3J0ID0gc3RydWN0SW1wb3J0c1tzdHJ1Y3RUeXBlTmFtZSA/PyBcIlwiXTtcblxuICAgICAgICAgIGlmIChmaWxlVG9JbXBvcnQgJiYgZmlsZVRvSW1wb3J0ICE9PSBzdHJ1Y3RGaWxlbmFtZSkge1xuICAgICAgICAgICAgY29uc3QgYXR0VHlwZVN0cnVjdCA9IGF0dC50eXBlLnN0cnVjdDtcbiAgICAgICAgICAgIGlmICghYXR0VHlwZVN0cnVjdClcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3N0cnVjdFR5cGVOYW1lfSBpcyBub3QgYSBzdHJ1Y3RgKTtcblxuICAgICAgICAgICAgc3RydWN0c1RvSW1wb3J0W2ZpbGVUb0ltcG9ydF0gPz89IFtdO1xuXG4gICAgICAgICAgICBjb25zdCBhdHRSZWZlcmVuY2VzID0gYXR0LmdldFJlZmVyZW5jZWRUeXBlcyhcbiAgICAgICAgICAgICAgc3RydWN0IGluc3RhbmNlb2YgQ29uZmlnU3RydWN0LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChhdHRSZWZlcmVuY2VzKSB7XG4gICAgICAgICAgICAgIHN0cnVjdHNUb0ltcG9ydFtmaWxlVG9JbXBvcnRdLnB1c2goLi4uYXR0UmVmZXJlbmNlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBuYW1lc3BhY2VkRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgIHJlc291cmNlLnN0cnVjdHNGb2xkZXJQYXRoLFxuICAgICAgICBzdHJ1Y3RGaWxlbmFtZSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuY29kZS5vcGVuRmlsZShuYW1lc3BhY2VkRmlsZVBhdGgpO1xuICAgICAgLy8gdGhlIHN0cnVjdHMgb25seSBtYWtlcyB1c2Ugb2YgY2RrdG4gbm90IGNvbnN0cnVjdHNcbiAgICAgIHRoaXMuY29kZS5saW5lKGBpbXBvcnQgKiBhcyBjZGt0biBmcm9tICdjZGt0bic7YCk7XG4gICAgICBPYmplY3QuZW50cmllcyhzdHJ1Y3RzVG9JbXBvcnQpLmZvckVhY2goKFtmaWxlVG9JbXBvcnQsIHN0cnVjdHNdKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHBhdGguYmFzZW5hbWUoZmlsZVRvSW1wb3J0LCBcIi50c1wiKTtcbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgICAgYGltcG9ydCB7ICR7Wy4uLm5ldyBTZXQoc3RydWN0cyldLmpvaW4oXCIsXFxuXCIpfSB9IGZyb20gJy4vJHt0YXJnZXR9JHt0aGlzLmltcG9ydEV4dGVuc2lvbn0nO2AsXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgc3RydWN0cy5mb3JFYWNoKChzdHJ1Y3QpID0+IHtcbiAgICAgICAgaWYgKHN0cnVjdCBpbnN0YW5jZW9mIENvbmZpZ1N0cnVjdCkge1xuICAgICAgICAgIHRoaXMuZW1pdEludGVyZmFjZShyZXNvdXJjZSwgc3RydWN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXZSB1c2UgdGhlIGludGVyZmFjZSBoZXJlIGZvciB0aGUgY29uZmlndXJhdGlvbiAvIGlucHV0cyBvZiBhIHJlc291cmNlIC8gbmVzdGVkIGJsb2NrXG4gICAgICAgICAgdGhpcy5lbWl0SW50ZXJmYWNlKHJlc291cmNlLCBzdHJ1Y3QpO1xuICAgICAgICAgIC8vIEFuZCB3ZSB1c2UgdGhlIGNsYXNzIGZvciB0aGUgYXR0cmlidXRlcyAvIG91dHB1dHMgb2YgYSByZXNvdXJjZSAvIG5lc3RlZCBibG9ja1xuICAgICAgICAgIGlmICghc3RydWN0LmlzUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdENsYXNzKHN0cnVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29kZS5jbG9zZUZpbGUobmFtZXNwYWNlZEZpbGVQYXRoKTtcbiAgICB9XG5cbiAgICAvLyBlbWl0IHRoZSBpbmRleCBmaWxlIHRoYXQgZXhwb3J0cyBhbGwgdGhlIHN0cnVjdCBmaWxlcyB3ZSd2ZSBqdXN0IGdlbmVyYXRlZFxuICAgIGNvbnN0IGluZGV4RmlsZVBhdGggPSBwYXRoLmpvaW4ocmVzb3VyY2Uuc3RydWN0c0ZvbGRlclBhdGgsIFwiaW5kZXgudHNcIik7XG5cbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoaW5kZXhGaWxlUGF0aCk7XG4gICAgc3RydWN0UGF0aHMuZm9yRWFjaCgoc3RydWN0UGF0aCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gcGF0aC5iYXNlbmFtZShzdHJ1Y3RQYXRoLCBcIi50c1wiKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKGBleHBvcnQgKiBmcm9tICcuLyR7dGFyZ2V0fSR7dGhpcy5pbXBvcnRFeHRlbnNpb259JztgKTtcbiAgICB9KTtcbiAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKGluZGV4RmlsZVBhdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Q2xhc3Moc3RydWN0OiBTdHJ1Y3QpIHtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYGV4cG9ydCBjbGFzcyAke3N0cnVjdC5vdXRwdXRSZWZlcmVuY2VOYW1lfSBleHRlbmRzIGNka3RuLkNvbXBsZXhPYmplY3RgLFxuICAgICk7XG5cbiAgICB0aGlzLmNvZGUubGluZShcInByaXZhdGUgaXNFbXB0eU9iamVjdCA9IGZhbHNlO1wiKTtcbiAgICBpZiAoIXN0cnVjdC5pc0NsYXNzKSB7XG4gICAgICB0aGlzLmNvZGUubGluZShcInByaXZhdGUgcmVzb2x2YWJsZVZhbHVlPzogY2RrdG4uSVJlc29sdmFibGU7XCIpO1xuICAgIH1cbiAgICB0aGlzLmNvZGUubGluZSgpO1xuXG4gICAgY29uc3QgY29tbWVudCA9IHNhbml0aXplZENvbW1lbnQodGhpcy5jb2RlKTtcbiAgICBjb21tZW50LmxpbmUoYEBwYXJhbSB0ZXJyYWZvcm1SZXNvdXJjZSBUaGUgcGFyZW50IHJlc291cmNlYCk7XG4gICAgY29tbWVudC5saW5lKFxuICAgICAgYEBwYXJhbSB0ZXJyYWZvcm1BdHRyaWJ1dGUgVGhlIGF0dHJpYnV0ZSBvbiB0aGUgcGFyZW50IHJlc291cmNlIHRoaXMgY2xhc3MgaXMgcmVmZXJlbmNpbmdgLFxuICAgICk7XG4gICAgaWYgKHN0cnVjdC5pc1NpbmdsZUl0ZW0pIHtcbiAgICAgIGNvbW1lbnQuZW5kKCk7XG4gICAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgICBgcHVibGljIGNvbnN0cnVjdG9yKHRlcnJhZm9ybVJlc291cmNlOiBjZGt0bi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpYCxcbiAgICAgICk7XG4gICAgICB0aGlzLmNvZGUubGluZShgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgZmFsc2UsIDApO2ApO1xuICAgICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc3RydWN0Lm5lc3RpbmdNb2RlID09PSBcInNpbmdsZVwiIHx8XG4gICAgICBzdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwib2JqZWN0XCJcbiAgICApIHtcbiAgICAgIGNvbW1lbnQuZW5kKCk7XG4gICAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgICBgcHVibGljIGNvbnN0cnVjdG9yKHRlcnJhZm9ybVJlc291cmNlOiBjZGt0bi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpYCxcbiAgICAgICk7XG4gICAgICB0aGlzLmNvZGUubGluZShgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgZmFsc2UpO2ApO1xuICAgICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB9IGVsc2UgaWYgKHN0cnVjdC5uZXN0aW5nTW9kZS5zdGFydHNXaXRoKFwibWFwXCIpKSB7XG4gICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgYCogQHBhcmFtIGNvbXBsZXhPYmplY3RLZXkgdGhlIGtleSBvZiB0aGlzIGl0ZW0gaW4gdGhlIG1hcGAsXG4gICAgICApO1xuICAgICAgY29tbWVudC5lbmQoKTtcbiAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICAgIGBwdWJsaWMgY29uc3RydWN0b3IodGVycmFmb3JtUmVzb3VyY2U6IGNka3RuLklJbnRlcnBvbGF0aW5nUGFyZW50LCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZywgY29tcGxleE9iamVjdEtleTogc3RyaW5nKWAsXG4gICAgICApO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgIGBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCBmYWxzZSwgY29tcGxleE9iamVjdEtleSk7YCxcbiAgICAgICk7XG4gICAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21tZW50LmxpbmUoXG4gICAgICAgIGBAcGFyYW0gY29tcGxleE9iamVjdEluZGV4IHRoZSBpbmRleCBvZiB0aGlzIGl0ZW0gaW4gdGhlIGxpc3RgLFxuICAgICAgKTtcbiAgICAgIGNvbW1lbnQubGluZShcbiAgICAgICAgYEBwYXJhbSBjb21wbGV4T2JqZWN0SXNGcm9tU2V0IHdoZXRoZXIgdGhlIGxpc3QgaXMgd3JhcHBpbmcgYSBzZXQgKHdpbGwgYWRkIHRvbGlzdCgpIHRvIGJlIGFibGUgdG8gYWNjZXNzIGFuIGl0ZW0gdmlhIGFuIGluZGV4KWAsXG4gICAgICApO1xuICAgICAgY29tbWVudC5lbmQoKTtcbiAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICAgIGBwdWJsaWMgY29uc3RydWN0b3IodGVycmFmb3JtUmVzb3VyY2U6IGNka3RuLklJbnRlcnBvbGF0aW5nUGFyZW50LCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZywgY29tcGxleE9iamVjdEluZGV4OiBudW1iZXIsIGNvbXBsZXhPYmplY3RJc0Zyb21TZXQ6IGJvb2xlYW4pYCxcbiAgICAgICk7XG4gICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgYHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIGNvbXBsZXhPYmplY3RJc0Zyb21TZXQsIGNvbXBsZXhPYmplY3RJbmRleCk7YCxcbiAgICAgICk7XG4gICAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgIH1cblxuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5lbWl0SW50ZXJuYWxWYWx1ZUdldHRlcihzdHJ1Y3QpO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5lbWl0SW50ZXJuYWxWYWx1ZVNldHRlcihzdHJ1Y3QpO1xuXG4gICAgZm9yIChjb25zdCBhdHQgb2Ygc3RydWN0LmF0dHJpYnV0ZXMpIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlc0VtaXR0ZXIuZW1pdChcbiAgICAgICAgYXR0LFxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNFbWl0dGVyLm5lZWRzUmVzZXRFc2NhcGUoYXR0LCBzdHJ1Y3QuYXR0cmlidXRlcyksXG4gICAgICAgIHRoaXMuYXR0cmlidXRlc0VtaXR0ZXIubmVlZHNJbnB1dEVzY2FwZShhdHQsIHN0cnVjdC5hdHRyaWJ1dGVzKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcblxuICAgIGlmIChcbiAgICAgICFzdHJ1Y3QuaXNTaW5nbGVJdGVtICYmXG4gICAgICAoc3RydWN0Lm5lc3RpbmdNb2RlID09PSBcImxpc3RcIiB8fCBzdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwic2V0XCIpXG4gICAgKSB7XG4gICAgICB0aGlzLmVtaXRDb21wbGV4TGlzdENsYXNzKHN0cnVjdCk7XG4gICAgfSBlbHNlIGlmIChzdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwibWFwXCIpIHtcbiAgICAgIHRoaXMuZW1pdENvbXBsZXhNYXBDbGFzcyhzdHJ1Y3QpO1xuICAgIH0gZWxzZSBpZiAoc3RydWN0Lm5lc3RpbmdNb2RlID09PSBcIm1hcGxpc3RcIikge1xuICAgICAgdGhpcy5lbWl0Q29tcGxleE1hcExpc3RDbGFzc2VzKHN0cnVjdCk7XG4gICAgfSBlbHNlIGlmIChzdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwibWFwc2V0XCIpIHtcbiAgICAgIHRoaXMuZW1pdENvbXBsZXhNYXBMaXN0Q2xhc3NlcyhzdHJ1Y3QpO1xuICAgIH0gZWxzZSBpZiAoc3RydWN0Lm5lc3RpbmdNb2RlID09PSBcImxpc3RtYXBcIikge1xuICAgICAgdGhpcy5lbWl0Q29tcGxleExpc3RNYXBDbGFzc2VzKHN0cnVjdCwgZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAoc3RydWN0Lm5lc3RpbmdNb2RlID09PSBcInNldG1hcFwiKSB7XG4gICAgICB0aGlzLmVtaXRDb21wbGV4TGlzdE1hcENsYXNzZXMoc3RydWN0LCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc3RydWN0Lm5lc3RpbmdNb2RlID09PSBcImxpc3RsaXN0XCIgfHxcbiAgICAgIHN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJsaXN0c2V0XCIgfHxcbiAgICAgIHN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJzZXRsaXN0XCIgfHxcbiAgICAgIHN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJzZXRzZXRcIlxuICAgICkge1xuICAgICAgdGhpcy5lbWl0Q29tcGxleExpc3RMaXN0Q2xhc3NlcyhzdHJ1Y3QpO1xuICAgIH1cbiAgICAvLyBvdGhlciB0eXBlcyBvZiBuZXN0ZWQgY29sbGVjdGlvbnMgYXJlbid0IHN1cHBvcnRlZFxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Q29tcGxleExpc3RDbGFzcyhzdHJ1Y3Q6IFN0cnVjdCkge1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBleHBvcnQgY2xhc3MgJHtzdHJ1Y3QubGlzdE5hbWV9IGV4dGVuZHMgY2RrdG4uQ29tcGxleExpc3RgLFxuICAgICk7XG5cbiAgICBpZiAoc3RydWN0LmFzc2lnbmFibGUpIHtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgcHVibGljIGludGVybmFsVmFsdWU/IDogJHtzdHJ1Y3QubmFtZX1bXSB8IGNka3RuLklSZXNvbHZhYmxlYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICBjb25zdCBjb25zdHJ1Y3RvckNvbW1lbnQgPSBzYW5pdGl6ZWRDb21tZW50KHRoaXMuY29kZSk7XG4gICAgY29uc3RydWN0b3JDb21tZW50LmxpbmUoYEBwYXJhbSB0ZXJyYWZvcm1SZXNvdXJjZSBUaGUgcGFyZW50IHJlc291cmNlYCk7XG4gICAgY29uc3RydWN0b3JDb21tZW50LmxpbmUoXG4gICAgICBgQHBhcmFtIHRlcnJhZm9ybUF0dHJpYnV0ZSBUaGUgYXR0cmlidXRlIG9uIHRoZSBwYXJlbnQgcmVzb3VyY2UgdGhpcyBjbGFzcyBpcyByZWZlcmVuY2luZ2AsXG4gICAgKTtcbiAgICBjb25zdHJ1Y3RvckNvbW1lbnQubGluZShcbiAgICAgIGBAcGFyYW0gd3JhcHNTZXQgd2hldGhlciB0aGUgbGlzdCBpcyB3cmFwcGluZyBhIHNldCAod2lsbCBhZGQgdG9saXN0KCkgdG8gYmUgYWJsZSB0byBhY2Nlc3MgYW4gaXRlbSB2aWEgYW4gaW5kZXgpYCxcbiAgICApO1xuICAgIGNvbnN0cnVjdG9yQ29tbWVudC5lbmQoKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYGNvbnN0cnVjdG9yKHRlcnJhZm9ybVJlc291cmNlOiBjZGt0bi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsIHdyYXBzU2V0OiBib29sZWFuKWAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUubGluZShgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpO2ApO1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIGNvbnN0IGdldHRlckNvbW1lbnQgPSBzYW5pdGl6ZWRDb21tZW50KHRoaXMuY29kZSk7XG4gICAgZ2V0dGVyQ29tbWVudC5saW5lKGBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIHJldHVybmApO1xuICAgIGdldHRlckNvbW1lbnQuZW5kKCk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpOiAke3N0cnVjdC5vdXRwdXRSZWZlcmVuY2VOYW1lfWAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUubGluZShcbiAgICAgIGByZXR1cm4gbmV3ICR7c3RydWN0Lm91dHB1dFJlZmVyZW5jZU5hbWV9KHRoaXMudGVycmFmb3JtUmVzb3VyY2UsIHRoaXMudGVycmFmb3JtQXR0cmlidXRlLCBpbmRleCwgdGhpcy53cmFwc1NldCk7YCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Q29tcGxleE1hcENsYXNzKHN0cnVjdDogU3RydWN0KSB7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYGV4cG9ydCBjbGFzcyAke3N0cnVjdC5tYXBOYW1lfSBleHRlbmRzIGNka3RuLkNvbXBsZXhNYXBgLFxuICAgICk7XG5cbiAgICBpZiAoc3RydWN0LmFzc2lnbmFibGUpIHtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgcHVibGljIGludGVybmFsVmFsdWU/IDogeyBba2V5OiBzdHJpbmddOiAke3N0cnVjdC5uYW1lfSB9IHwgY2RrdG4uSVJlc29sdmFibGVgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIGNvbnN0IGNvbnN0cnVjdG9yQ29tbWVudCA9IHNhbml0aXplZENvbW1lbnQodGhpcy5jb2RlKTtcbiAgICBjb25zdHJ1Y3RvckNvbW1lbnQubGluZShgQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VgKTtcbiAgICBjb25zdHJ1Y3RvckNvbW1lbnQubGluZShcbiAgICAgIGBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nYCxcbiAgICApO1xuICAgIGNvbnN0cnVjdG9yQ29tbWVudC5lbmQoKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYGNvbnN0cnVjdG9yKHRlcnJhZm9ybVJlc291cmNlOiBjZGt0bi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpYCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5saW5lKGBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuXG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICBjb25zdCBnZXR0ZXJDb21tZW50ID0gc2FuaXRpemVkQ29tbWVudCh0aGlzLmNvZGUpO1xuICAgIGdldHRlckNvbW1lbnQubGluZShgQHBhcmFtIGtleSB0aGUga2V5IG9mIHRoZSBpdGVtIHRvIHJldHVybmApO1xuICAgIGdldHRlckNvbW1lbnQuZW5kKCk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBwdWJsaWMgZ2V0KGtleTogc3RyaW5nKTogJHtzdHJ1Y3Qub3V0cHV0UmVmZXJlbmNlTmFtZX1gLFxuICAgICk7XG4gICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICBgcmV0dXJuIG5ldyAke3N0cnVjdC5vdXRwdXRSZWZlcmVuY2VOYW1lfSh0aGlzLnRlcnJhZm9ybVJlc291cmNlLCB0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSwga2V5KTtgLFxuICAgICk7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcblxuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDb21wbGV4TWFwTGlzdENsYXNzZXMoc3RydWN0OiBTdHJ1Y3QpIHtcbiAgICB0aGlzLmVtaXRDb21wbGV4TWFwTGlzdENsYXNzKHN0cnVjdCk7XG4gICAgdGhpcy5lbWl0Q29tcGxleE1hcENsYXNzKHN0cnVjdCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDb21wbGV4TWFwTGlzdENsYXNzKHN0cnVjdDogU3RydWN0KSB7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYGV4cG9ydCBjbGFzcyAke3N0cnVjdC5tYXBMaXN0TmFtZX0gZXh0ZW5kcyBjZGt0bi5NYXBMaXN0YCxcbiAgICApO1xuXG4gICAgaWYgKHN0cnVjdC5hc3NpZ25hYmxlKSB7XG4gICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgYHB1YmxpYyBpbnRlcm5hbFZhbHVlPyA6ICR7c3RydWN0Lm1hcE5hbWV9W10gfCBjZGt0bi5JUmVzb2x2YWJsZWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgY29uc3QgY29uc3RydWN0b3JDb21tZW50ID0gc2FuaXRpemVkQ29tbWVudCh0aGlzLmNvZGUpO1xuICAgIGNvbnN0cnVjdG9yQ29tbWVudC5saW5lKGBAcGFyYW0gdGVycmFmb3JtUmVzb3VyY2UgVGhlIHBhcmVudCByZXNvdXJjZWApO1xuICAgIGNvbnN0cnVjdG9yQ29tbWVudC5saW5lKFxuICAgICAgYEBwYXJhbSB0ZXJyYWZvcm1BdHRyaWJ1dGUgVGhlIGF0dHJpYnV0ZSBvbiB0aGUgcGFyZW50IHJlc291cmNlIHRoaXMgY2xhc3MgaXMgcmVmZXJlbmNpbmdgLFxuICAgICk7XG4gICAgY29uc3RydWN0b3JDb21tZW50LmxpbmUoXG4gICAgICBgQHBhcmFtIHdyYXBzU2V0IHdoZXRoZXIgdGhlIGxpc3QgaXMgd3JhcHBpbmcgYSBzZXQgKHdpbGwgYWRkIHRvbGlzdCgpIHRvIGJlIGFibGUgdG8gYWNjZXNzIGFuIGl0ZW0gdmlhIGFuIGluZGV4KWAsXG4gICAgKTtcbiAgICBjb25zdHJ1Y3RvckNvbW1lbnQuZW5kKCk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBjb25zdHJ1Y3Rvcih0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLCB3cmFwc1NldDogYm9vbGVhbilgLFxuICAgICk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIHdyYXBzU2V0KTtgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuXG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICBjb25zdCBnZXR0ZXJDb21tZW50ID0gc2FuaXRpemVkQ29tbWVudCh0aGlzLmNvZGUpO1xuICAgIGdldHRlckNvbW1lbnQubGluZShgQHBhcmFtIGluZGV4IHRoZSBpbmRleCBvZiB0aGUgaXRlbSB0byByZXR1cm5gKTtcbiAgICBnZXR0ZXJDb21tZW50LmVuZCgpO1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYHB1YmxpYyBnZXQoaW5kZXg6IG51bWJlcik6ICR7c3RydWN0Lm1hcE5hbWV9YCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYHJldHVybiBuZXcgJHtzdHJ1Y3QubWFwTmFtZX0odGhpcywgXFxgW1xcJHtpbmRleH1dXFxgKTtgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuXG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdENvbXBsZXhMaXN0TWFwQ2xhc3NlcyhzdHJ1Y3Q6IFN0cnVjdCwgaXNTZXQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmVtaXRDb21wbGV4TGlzdE1hcENsYXNzKHN0cnVjdCwgaXNTZXQpO1xuICAgIHRoaXMuZW1pdENvbXBsZXhMaXN0Q2xhc3Moc3RydWN0KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdENvbXBsZXhMaXN0TWFwQ2xhc3Moc3RydWN0OiBTdHJ1Y3QsIGlzU2V0OiBib29sZWFuKSB7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYGV4cG9ydCBjbGFzcyAke3N0cnVjdC5saXN0TWFwTmFtZX0gZXh0ZW5kcyBjZGt0bi5Db21wbGV4TWFwYCxcbiAgICApO1xuXG4gICAgaWYgKHN0cnVjdC5hc3NpZ25hYmxlKSB7XG4gICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgYHB1YmxpYyBpbnRlcm5hbFZhbHVlPyA6IHsgW2tleTogc3RyaW5nXTogJHtzdHJ1Y3QubmFtZX1bXSB9IHwgY2RrdG4uSVJlc29sdmFibGVgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIGNvbnN0IGNvbnN0cnVjdG9yQ29tbWVudCA9IHNhbml0aXplZENvbW1lbnQodGhpcy5jb2RlKTtcbiAgICBjb25zdHJ1Y3RvckNvbW1lbnQubGluZShgQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VgKTtcbiAgICBjb25zdHJ1Y3RvckNvbW1lbnQubGluZShcbiAgICAgIGBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nYCxcbiAgICApO1xuICAgIGNvbnN0cnVjdG9yQ29tbWVudC5lbmQoKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYGNvbnN0cnVjdG9yKHRlcnJhZm9ybVJlc291cmNlOiBjZGt0bi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpYCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5saW5lKGBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuXG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICBjb25zdCBnZXR0ZXJDb21tZW50ID0gc2FuaXRpemVkQ29tbWVudCh0aGlzLmNvZGUpO1xuICAgIGdldHRlckNvbW1lbnQubGluZShgQHBhcmFtIGtleSB0aGUga2V5IG9mIHRoZSBpdGVtIHRvIHJldHVybmApO1xuICAgIGdldHRlckNvbW1lbnQuZW5kKCk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhgcHVibGljIGdldChrZXk6IHN0cmluZyk6ICR7c3RydWN0Lmxpc3ROYW1lfWApO1xuICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgYHJldHVybiBuZXcgJHtzdHJ1Y3QubGlzdE5hbWV9KHRoaXMsIFxcYFtcXCR7a2V5fV1cXGAsICR7aXNTZXR9KTtgLFxuICAgICk7XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcblxuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDb21wbGV4TGlzdExpc3RDbGFzc2VzKHN0cnVjdDogU3RydWN0KSB7XG4gICAgdGhpcy5lbWl0Q29tcGxleExpc3RMaXN0Q2xhc3Moc3RydWN0KTtcbiAgICB0aGlzLmVtaXRDb21wbGV4TGlzdENsYXNzKHN0cnVjdCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDb21wbGV4TGlzdExpc3RDbGFzcyhzdHJ1Y3Q6IFN0cnVjdCkge1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBleHBvcnQgY2xhc3MgJHtzdHJ1Y3QubGlzdExpc3ROYW1lfSBleHRlbmRzIGNka3RuLk1hcExpc3RgLCAvLyBkZXNwaXRlIG5hbWUsIG5lZWQgdGhlIHNhbWUgYmVoYXZpb3JcbiAgICApO1xuXG4gICAgaWYgKHN0cnVjdC5hc3NpZ25hYmxlKSB7XG4gICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgYHB1YmxpYyBpbnRlcm5hbFZhbHVlPyA6ICR7c3RydWN0Lm5hbWV9W11bXSB8IGNka3RuLklSZXNvbHZhYmxlYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICBjb25zdCBjb25zdHJ1Y3RvckNvbW1lbnQgPSBzYW5pdGl6ZWRDb21tZW50KHRoaXMuY29kZSk7XG4gICAgY29uc3RydWN0b3JDb21tZW50LmxpbmUoYEBwYXJhbSB0ZXJyYWZvcm1SZXNvdXJjZSBUaGUgcGFyZW50IHJlc291cmNlYCk7XG4gICAgY29uc3RydWN0b3JDb21tZW50LmxpbmUoXG4gICAgICBgQHBhcmFtIHRlcnJhZm9ybUF0dHJpYnV0ZSBUaGUgYXR0cmlidXRlIG9uIHRoZSBwYXJlbnQgcmVzb3VyY2UgdGhpcyBjbGFzcyBpcyByZWZlcmVuY2luZ2AsXG4gICAgKTtcbiAgICBjb25zdHJ1Y3RvckNvbW1lbnQubGluZShcbiAgICAgIGBAcGFyYW0gd3JhcHNTZXQgd2hldGhlciB0aGUgbGlzdCBpcyB3cmFwcGluZyBhIHNldCAod2lsbCBhZGQgdG9saXN0KCkgdG8gYmUgYWJsZSB0byBhY2Nlc3MgYW4gaXRlbSB2aWEgYW4gaW5kZXgpYCxcbiAgICApO1xuICAgIGNvbnN0cnVjdG9yQ29tbWVudC5lbmQoKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYGNvbnN0cnVjdG9yKHRlcnJhZm9ybVJlc291cmNlOiBjZGt0bi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsIHdyYXBzU2V0OiBib29sZWFuKWAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUubGluZShgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpO2ApO1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIGNvbnN0IGdldHRlckNvbW1lbnQgPSBzYW5pdGl6ZWRDb21tZW50KHRoaXMuY29kZSk7XG4gICAgZ2V0dGVyQ29tbWVudC5saW5lKGBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIHJldHVybmApO1xuICAgIGdldHRlckNvbW1lbnQuZW5kKCk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhgcHVibGljIGdldChpbmRleDogbnVtYmVyKTogJHtzdHJ1Y3QubGlzdE5hbWV9YCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICBgcmV0dXJuIG5ldyAke3N0cnVjdC5saXN0TmFtZX0odGhpcywgXFxgW1xcJHtpbmRleH1dXFxgLCAke1xuICAgICAgICBzdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwic2V0bGlzdFwiIHx8IHN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJzZXRzZXRcIlxuICAgICAgfSk7YCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0SW50ZXJuYWxWYWx1ZUdldHRlcihzdHJ1Y3Q6IFN0cnVjdCkge1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICBgcHVibGljIGdldCBpbnRlcm5hbFZhbHVlKCk6ICR7c3RydWN0Lm5hbWV9JHtcbiAgICAgICAgIXN0cnVjdC5pc0NsYXNzID8gXCIgfCBjZGt0bi5JUmVzb2x2YWJsZVwiIDogXCJcIlxuICAgICAgfSB8IHVuZGVmaW5lZGAsXG4gICAgKTtcblxuICAgIGlmICghc3RydWN0LmlzQ2xhc3MpIHtcbiAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXCJpZiAodGhpcy5yZXNvbHZhYmxlVmFsdWUpXCIpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoXCJyZXR1cm4gdGhpcy5yZXNvbHZhYmxlVmFsdWU7XCIpO1xuICAgICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGUubGluZShcImxldCBoYXNBbnlWYWx1ZXMgPSB0aGlzLmlzRW1wdHlPYmplY3Q7XCIpO1xuICAgIHRoaXMuY29kZS5saW5lKFwiY29uc3QgaW50ZXJuYWxWYWx1ZVJlc3VsdDogYW55ID0ge307XCIpO1xuICAgIGZvciAoY29uc3QgYXR0IG9mIHN0cnVjdC5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoYXR0LmlzU3RvcmVkKSB7XG4gICAgICAgIGlmIChhdHQuZ2V0dGVyVHlwZS5fdHlwZSA9PT0gXCJzdG9yZWRfY2xhc3NcIikge1xuICAgICAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICAgICAgICBgaWYgKHRoaXMuJHthdHQuc3RvcmFnZU5hbWV9Py5pbnRlcm5hbFZhbHVlICE9PSB1bmRlZmluZWQpYCxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYGlmICh0aGlzLiR7YXR0LnN0b3JhZ2VOYW1lfSAhPT0gdW5kZWZpbmVkKWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29kZS5saW5lKFwiaGFzQW55VmFsdWVzID0gdHJ1ZTtcIik7XG4gICAgICAgIGlmIChhdHQuZ2V0dGVyVHlwZS5fdHlwZSA9PT0gXCJzdG9yZWRfY2xhc3NcIikge1xuICAgICAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICAgICAgYGludGVybmFsVmFsdWVSZXN1bHQuJHthdHQubmFtZX0gPSB0aGlzLiR7YXR0LnN0b3JhZ2VOYW1lfT8uaW50ZXJuYWxWYWx1ZTtgLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgICAgICBgaW50ZXJuYWxWYWx1ZVJlc3VsdC4ke2F0dC5uYW1lfSA9IHRoaXMuJHthdHQuc3RvcmFnZU5hbWV9O2AsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNvZGUubGluZShcInJldHVybiBoYXNBbnlWYWx1ZXMgPyBpbnRlcm5hbFZhbHVlUmVzdWx0IDogdW5kZWZpbmVkO1wiKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0SW50ZXJuYWxWYWx1ZVNldHRlcihzdHJ1Y3Q6IFN0cnVjdCkge1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXG4gICAgICBgcHVibGljIHNldCBpbnRlcm5hbFZhbHVlKHZhbHVlOiAke3N0cnVjdC5uYW1lfSR7XG4gICAgICAgICFzdHJ1Y3QuaXNDbGFzcyA/IFwiIHwgY2RrdG4uSVJlc29sdmFibGVcIiA6IFwiXCJcbiAgICAgIH0gfCB1bmRlZmluZWQpYCxcbiAgICApO1xuXG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcImlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVwiKTtcbiAgICB0aGlzLmNvZGUubGluZShcInRoaXMuaXNFbXB0eU9iamVjdCA9IGZhbHNlO1wiKTtcbiAgICBpZiAoIXN0cnVjdC5pc0NsYXNzKSB7XG4gICAgICB0aGlzLmNvZGUubGluZShcInRoaXMucmVzb2x2YWJsZVZhbHVlID0gdW5kZWZpbmVkO1wiKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBhdHQgb2Ygc3RydWN0LmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChhdHQuaXNTdG9yZWQpIHtcbiAgICAgICAgaWYgKGF0dC5zZXR0ZXJUeXBlLl90eXBlID09PSBcInN0b3JlZF9jbGFzc1wiKSB7XG4gICAgICAgICAgdGhpcy5jb2RlLmxpbmUoYHRoaXMuJHthdHQuc3RvcmFnZU5hbWV9LmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7YCk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXR0LnNldHRlclR5cGUuX3R5cGUgIT09IFwibm9uZVwiKSB7XG4gICAgICAgICAgdGhpcy5jb2RlLmxpbmUoYHRoaXMuJHthdHQuc3RvcmFnZU5hbWV9ID0gdW5kZWZpbmVkO2ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgaWYgKCFzdHJ1Y3QuaXNDbGFzcykge1xuICAgICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcImVsc2UgaWYgKGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUodmFsdWUpKVwiKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKFwidGhpcy5pc0VtcHR5T2JqZWN0ID0gZmFsc2U7XCIpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoXCJ0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHZhbHVlO1wiKTtcbiAgICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soXCJlbHNlXCIpO1xuICAgIHRoaXMuY29kZS5saW5lKFwidGhpcy5pc0VtcHR5T2JqZWN0ID0gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMDtcIik7XG4gICAgaWYgKCFzdHJ1Y3QuaXNDbGFzcykge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoXCJ0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHVuZGVmaW5lZDtcIik7XG4gICAgfVxuICAgIGZvciAoY29uc3QgYXR0IG9mIHN0cnVjdC5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoYXR0LmlzU3RvcmVkKSB7XG4gICAgICAgIGlmIChhdHQuc2V0dGVyVHlwZS5fdHlwZSA9PT0gXCJzdG9yZWRfY2xhc3NcIikge1xuICAgICAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICAgICAgYHRoaXMuJHthdHQuc3RvcmFnZU5hbWV9LmludGVybmFsVmFsdWUgPSB2YWx1ZS4ke2F0dC5uYW1lfTtgLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXR0LnNldHRlclR5cGUuX3R5cGUgIT09IFwibm9uZVwiKSB7XG4gICAgICAgICAgdGhpcy5jb2RlLmxpbmUoYHRoaXMuJHthdHQuc3RvcmFnZU5hbWV9ID0gdmFsdWUuJHthdHQubmFtZX07YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0VG9IY2xUZXJyYWZvcm1GdW5jdGlvbihzdHJ1Y3Q6IFN0cnVjdCkge1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBleHBvcnQgZnVuY3Rpb24gJHtkb3duY2FzZUZpcnN0KHN0cnVjdC5uYW1lKX1Ub0hjbFRlcnJhZm9ybShzdHJ1Y3Q/OiAke1xuICAgICAgICBzdHJ1Y3QuaXNTaW5nbGVJdGVtICYmICFzdHJ1Y3QuaXNQcm92aWRlclxuICAgICAgICAgID8gYCR7c3RydWN0Lm5hbWV9T3V0cHV0UmVmZXJlbmNlIHwgYFxuICAgICAgICAgIDogXCJcIlxuICAgICAgfSR7c3RydWN0Lm5hbWV9JHshc3RydWN0LmlzQ2xhc3MgPyBcIiB8IGNka3RuLklSZXNvbHZhYmxlXCIgOiBcIlwifSk6IGFueWAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUubGluZShcbiAgICAgIGBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfWAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKGBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKWApO1xuICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgYHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL2NvbmNlcHRzL3Jlc291cmNlcyNyZWZlcmVuY2VzXCIpO2AsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuXG4gICAgdGhpcy5jb2RlLm9wZW4oYGNvbnN0IGF0dHJzID0ge2ApO1xuXG4gICAgZm9yIChjb25zdCBhdHQgb2Ygc3RydWN0LmFzc2lnbmFibGVBdHRyaWJ1dGVzKSB7XG4gICAgICB0aGlzLmF0dHJpYnV0ZXNFbWl0dGVyLmVtaXRUb0hjbFRlcnJhZm9ybShhdHQsIHRydWUpO1xuICAgIH1cblxuICAgIHRoaXMuY29kZS5jbG9zZShgfTtgKTtcblxuICAgIGlmIChzdHJ1Y3QuYXNzaWduYWJsZUF0dHJpYnV0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKGAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNgKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdHRycykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQpKTtgLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYHJldHVybiBhdHRycztgKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRUb1RlcnJhZm9ybUZ1bmN0aW9uKHN0cnVjdDogU3RydWN0KSB7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYGV4cG9ydCBmdW5jdGlvbiAke2Rvd25jYXNlRmlyc3Qoc3RydWN0Lm5hbWUpfVRvVGVycmFmb3JtKHN0cnVjdD86ICR7XG4gICAgICAgIHN0cnVjdC5pc1NpbmdsZUl0ZW0gJiYgIXN0cnVjdC5pc1Byb3ZpZGVyXG4gICAgICAgICAgPyBgJHtzdHJ1Y3QubmFtZX1PdXRwdXRSZWZlcmVuY2UgfCBgXG4gICAgICAgICAgOiBcIlwiXG4gICAgICB9JHtzdHJ1Y3QubmFtZX0keyFzdHJ1Y3QuaXNDbGFzcyA/IFwiIHwgY2RrdG4uSVJlc29sdmFibGVcIiA6IFwiXCJ9KTogYW55YCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgYGlmICghY2RrdG4uY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9YCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYGlmIChjZGt0bi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICBgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvcmVzb3VyY2VzI3JlZmVyZW5jZXNcIik7YCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFwicmV0dXJuXCIpO1xuICAgIGZvciAoY29uc3QgYXR0IG9mIHN0cnVjdC5hc3NpZ25hYmxlQXR0cmlidXRlcykge1xuICAgICAgdGhpcy5hdHRyaWJ1dGVzRW1pdHRlci5lbWl0VG9UZXJyYWZvcm0oYXR0LCB0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soXCI7XCIpO1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgfVxufVxuIl19
|
|
@@ -29,6 +29,13 @@ const isMatching = (target, terraformSchemaName) => {
|
|
|
29
29
|
name: "",
|
|
30
30
|
};
|
|
31
31
|
const targetElements = target.source.split("/");
|
|
32
|
+
// Only a 3-part source explicitly pins a registry hostname. Shorthand
|
|
33
|
+
// sources (e.g. "hashicorp/awscc") omit it, so we must not assume a
|
|
34
|
+
// default: Terraform resolves them under registry.terraform.io while
|
|
35
|
+
// OpenTofu resolves them under registry.opentofu.org. Comparing against a
|
|
36
|
+
// hard-coded default would make schema lookup fail under OpenTofu even
|
|
37
|
+
// though the provider was installed correctly.
|
|
38
|
+
const explicitHostname = targetElements.length === 3;
|
|
32
39
|
switch (targetElements.length) {
|
|
33
40
|
case 1: // only name set
|
|
34
41
|
targetSource.name = targetElements[0].toLowerCase();
|
|
@@ -45,7 +52,7 @@ const isMatching = (target, terraformSchemaName) => {
|
|
|
45
52
|
default:
|
|
46
53
|
throw new Error(`can't handle ${target.source}. Expected string with 1, 2 or 3 elements separated by '/'`);
|
|
47
54
|
}
|
|
48
|
-
return (targetSource.hostname === hostname &&
|
|
55
|
+
return ((!explicitHostname || targetSource.hostname === hostname) &&
|
|
49
56
|
targetSource.namespace === namespace &&
|
|
50
57
|
targetSource.name === provider);
|
|
51
58
|
}
|
|
@@ -225,4 +232,4 @@ class TerraformProviderGenerator {
|
|
|
225
232
|
}
|
|
226
233
|
}
|
|
227
234
|
exports.TerraformProviderGenerator = TerraformProviderGenerator;
|
|
228
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvcHJvdmlkZXItZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMseUNBQW1EO0FBQ25ELDRDQU93QjtBQUN4Qiw0REFBdUU7QUFFdkUsdURBQW1EO0FBQ25ELHVDQUEyRDtBQWdCM0QsTUFBTSxVQUFVLEdBQUcsQ0FDakIsTUFBNkIsRUFDN0IsbUJBQTJCLEVBQ2xCLEVBQUU7SUFDWCxJQUFJLE1BQU0sQ0FBQyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFbEMsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWhELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssbUJBQW1CLENBQUM7SUFDL0MsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7UUFFakQsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBRUQsMkNBQTJDO1FBQzNDLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sWUFBWSxHQUFHO2dCQUNuQixXQUFXO2dCQUNYLFFBQVEsRUFBRSx1QkFBdUI7Z0JBQ2pDLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixJQUFJLEVBQUUsRUFBRTthQUNULENBQUM7WUFDRixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoRCxRQUFRLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDOUIsS0FBSyxDQUFDLEVBQUUsZ0JBQWdCO29CQUN0QixZQUFZLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDcEQsTUFBTTtnQkFDUixLQUFLLENBQUMsRUFBRSx5QkFBeUI7b0JBQy9CLFlBQVksQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUN6RCxZQUFZLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDcEQsTUFBTTtnQkFDUixLQUFLLENBQUMsRUFBRSxtQ0FBbUM7b0JBQ3pDLFlBQVksQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUN4RCxZQUFZLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDekQsWUFBWSxDQUFDLElBQUksR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ3BELE1BQU07Z0JBQ1I7b0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FDYixnQkFBZ0IsTUFBTSxDQUFDLE1BQU0sNERBQTRELENBQzFGLENBQUM7WUFDTixDQUFDO1lBRUQsT0FBTyxDQUNMLFlBQVksQ0FBQyxRQUFRLEtBQUssUUFBUTtnQkFDbEMsWUFBWSxDQUFDLFNBQVMsS0FBSyxTQUFTO2dCQUNwQyxZQUFZLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FDL0IsQ0FBQztRQUNKLENBQUM7UUFFRCxzREFBc0Q7UUFFdEQsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQztJQUNsQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBTUYsTUFBYSwwQkFBMEI7SUFPckMsWUFDbUIsSUFBZSxFQUNmLE1BQXNCLEVBQ3ZDLFVBQTZDLEVBQUU7O1FBRjlCLFNBQUksR0FBSixJQUFJLENBQVc7UUFDZixXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQVJqQyxtQkFBYyxHQUFHLElBQUksZ0NBQWMsRUFBRSxDQUFDO1FBSXZDLGFBQVEsR0FBMkMsRUFBRSxDQUFDO1FBTzNELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLE1BQUEsT0FBTyxDQUFDLGVBQWUsbUNBQUksRUFBRSxDQUFDO1FBQ3JELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSx5QkFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksdUJBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU8sdUJBQXVCLENBQzdCLGtCQUF5QztRQUV6QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNuRSxVQUFVLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQ2pCLENBQUM7SUFDeEIsQ0FBQztJQUVNLFFBQVEsQ0FBQyxrQkFBeUM7O1FBQ3ZELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLGdCQUFNLENBQUMsS0FBSyxDQUNWLDBDQUEwQyxrQkFBa0IsZUFBZSxJQUFJLENBQUMsU0FBUyxDQUN2RixJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksRUFDSixDQUFDLENBQ0YsRUFBRSxDQUNKLENBQUM7WUFDRixNQUFNLElBQUksS0FBSyxDQUNiLDJDQUEyQyxJQUFJLENBQUMsU0FBUyxDQUN2RCxrQkFBa0IsQ0FDbkIsRUFBRSxDQUNKLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxlQUFlLEdBQUcsTUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQiwwQ0FBRyxJQUFJLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLGVBQWUsQ0FBQztJQUN4QyxDQUFDO0lBRU0sV0FBVztRQUNoQixLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ25FLElBQUksQ0FBQyxRQUFRLENBQ1gsSUFBSSx1Q0FBNkIsQ0FDL0IsSUFBSSxxQ0FBMkIsQ0FBQyxJQUFJLENBQUMsRUFDckMsbUJBQVMsQ0FBQyxDQUFDLENBQUMsQ0FDYixDQUNGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBYztRQUM5QixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxtQkFBbUIsQ0FDeEIsSUFBVSxFQUNWLFVBQWtDOztRQUVsQyxNQUFNLFFBQVEsR0FBRyxNQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLDBDQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLElBQUksYUFBYSxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FDbkUsQ0FBQyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FDMUUsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FDeEUsQ0FBQyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUN2QixJQUFJLEVBQ0osUUFBUSxJQUFJLEVBQUUsRUFDZCxRQUFRLEVBQ1IsYUFBYSxFQUNiLFVBQVUsQ0FDWCxDQUNKLENBQUM7UUFFRixPQUFRLEVBQXNCLENBQUMsTUFBTSxDQUFDLEdBQUcsU0FBUyxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVNLHVCQUF1QixDQUFDLGFBQXFCO1FBQ2xELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRU0sMkJBQTJCLENBQUMsYUFBcUI7UUFDdEQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLDJCQUEyQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxZQUFZLENBQ2xCLElBQVUsRUFDVixlQUF3QixFQUN4QixVQUFrQzs7UUFFbEMsTUFBTSxJQUFJLEdBQUcsQ0FBQSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsSUFBSTtZQUMzQixDQUFDLENBQUUsVUFBVSxDQUFDLElBQXFCO1lBQ25DLENBQUMsQ0FBQyxJQUFBLDJCQUFTLEVBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3pCLE1BQU0sUUFBUSxHQUFHLE1BQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsMENBQUcsSUFBSSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsSUFBSSxhQUFhLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDbkUsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixhQUFhLENBQUMseUJBQXlCLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDN0QsYUFBYSxDQUFDLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDNUQsQ0FBQztZQUNELGFBQWEsQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1lBRWhELElBQUksYUFBYSxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQ3pDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDaEUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQy9DLENBQUM7WUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUNoRCxJQUFJLEVBQ0osVUFBVSxFQUNWLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFVBQVUsRUFDVixVQUFVLENBQ1gsQ0FBQztZQUNGLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsZ0JBQWdCLENBQUMseUJBQXlCLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDaEUsZ0JBQWdCLENBQUMsdUJBQXVCLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztnQkFDN0QsZ0JBQWdCLENBQUMscUJBQXFCLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztZQUMzRCxDQUFDO1lBQ0QsZ0JBQWdCLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztZQUNuRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxRQUF1QjtRQUNoRCxNQUFNLFFBQVEsR0FBRyxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsWUFBWSxDQUFDO1FBQzdELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sUUFBUSxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsVUFBVTtZQUM5QixDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVE7WUFDbkIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1osZ0RBQWdELElBQUksT0FBTyxRQUFRLENBQUMsVUFBVSxJQUFJLENBQ25GLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU8sYUFBYSxDQUFDLFFBQXNCLEVBQUUsS0FBZTtRQUMzRCxNQUFNLE1BQU0sR0FBRyxhQUFhLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLEdBQUcsTUFBTSxXQUFXLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUM1QyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLGVBQWUsSUFBQSx1QkFBVyxFQUFDLE9BQU8sQ0FBQyxZQUFZLE9BQU8sU0FBUyxJQUFJLENBQUMsZUFBZSxJQUFJLENBQ3hGLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU8saUJBQWlCLENBQUMsUUFBc0IsRUFBRSxLQUFlO1FBQy9ELE1BQU0sTUFBTSxHQUFHLGFBQWEsUUFBUSxFQUFFLENBQUM7UUFDdkMsTUFBTSxRQUFRLEdBQUcsR0FBRyxNQUFNLGdCQUFnQixDQUFDO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDNUMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4RSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDWixtQ0FBbUMsSUFBQSx1QkFBVyxFQUM1QyxPQUFPLENBQ1IsNkNBQTZDLE9BQU8sV0FBVyxDQUNqRSxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLFlBQVksQ0FBQyxRQUF1QjtRQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFdkMsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFTyw2QkFBNkIsQ0FBQyxRQUF1QjtRQUMzRCxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFFMUIsd0NBQXdDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRWpCLElBQUksUUFBUSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDcEMsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLFFBQVEsQ0FBQyxpQkFBaUIsU0FBUyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDeEYsSUFBSSxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1osWUFBWSxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FDdkMsTUFBTSxDQUNQLFdBQVcsZ0JBQWdCLElBQUksQ0FDakMsQ0FBQztZQUNKLENBQUM7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsZ0JBQWdCLElBQUksQ0FBQyxDQUFDO1lBRXZELFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUIsQ0FBQztZQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFOUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNsRCxDQUFDO2FBQU0sQ0FBQztZQUNOLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUIsQ0FBQztZQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlCLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU8sY0FBYyxDQUFDLFFBQXVCO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBdFFELGdFQXNRQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBDb2RlTWFrZXIsIHRvQ2FtZWxDYXNlIH0gZnJvbSBcImNvZGVtYWtlclwiO1xuaW1wb3J0IHtcbiAgQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQsXG4gIENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgTEFOR1VBR0VTLFxuICBsb2dnZXIsXG4gIFByb3ZpZGVyU2NoZW1hLFxuICBUZXJyYWZvcm1Qcm92aWRlckNvbnN0cmFpbnQsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgRlFQTiwgcGFyc2VGUVBOLCBQcm92aWRlck5hbWUgfSBmcm9tIFwiQGNka3RuL3Byb3ZpZGVyLXNjaGVtYVwiO1xuaW1wb3J0IHsgUmVzb3VyY2VNb2RlbCB9IGZyb20gXCIuL21vZGVsc1wiO1xuaW1wb3J0IHsgUmVzb3VyY2VQYXJzZXIgfSBmcm9tIFwiLi9yZXNvdXJjZS1wYXJzZXJcIjtcbmltcG9ydCB7IFJlc291cmNlRW1pdHRlciwgU3RydWN0RW1pdHRlciB9IGZyb20gXCIuL2VtaXR0ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvck9wdGlvbnMge1xuICAvKipcbiAgICogRmlsZSBleHRlbnNpb24gdG8gd3JpdGUgb24gZW1pdHRlZCByZWxhdGl2ZSBpbXBvcnRzLlxuICAgKiBEZWZhdWx0cyB0byBcIlwiIChDb21tb25KUykuXG4gICAqL1xuICByZWFkb25seSBpbXBvcnRFeHRlbnNpb24/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBQcm92aWRlckRhdGEge1xuICBuYW1lOiBzdHJpbmc7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbmNvbnN0IGlzTWF0Y2hpbmcgPSAoXG4gIHRhcmdldDogQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICB0ZXJyYWZvcm1TY2hlbWFOYW1lOiBzdHJpbmcsXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKHRhcmdldC5pc01vZHVsZSkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IGVsZW1lbnRzID0gdGVycmFmb3JtU2NoZW1hTmFtZS5zcGxpdChcIi9cIik7XG5cbiAgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB0YXJnZXQuc291cmNlID09PSB0ZXJyYWZvcm1TY2hlbWFOYW1lO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IFtob3N0bmFtZSwgbmFtZXNwYWNlLCBwcm92aWRlcl0gPSBlbGVtZW50cztcblxuICAgIGlmICghaG9zdG5hbWUgfHwgIW5hbWVzcGFjZSB8fCAhcHJvdmlkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgY2FuJ3QgaGFuZGxlICR7dGVycmFmb3JtU2NoZW1hTmFtZX1gKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0YXJnZXQuc291cmNlIGlzIHNldCwgdHJ5IHRvIG1hdGNoIGl0XG4gICAgaWYgKHRhcmdldC5zb3VyY2UpIHtcbiAgICAgIGNvbnN0IHRhcmdldFNvdXJjZSA9IHtcbiAgICAgICAgLy8gZGVmYXVsdHNcbiAgICAgICAgaG9zdG5hbWU6IFwicmVnaXN0cnkudGVycmFmb3JtLmlvXCIsXG4gICAgICAgIG5hbWVzcGFjZTogXCJoYXNoaWNvcnBcIixcbiAgICAgICAgbmFtZTogXCJcIixcbiAgICAgIH07XG4gICAgICBjb25zdCB0YXJnZXRFbGVtZW50cyA9IHRhcmdldC5zb3VyY2Uuc3BsaXQoXCIvXCIpO1xuICAgICAgc3dpdGNoICh0YXJnZXRFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOiAvLyBvbmx5IG5hbWUgc2V0XG4gICAgICAgICAgdGFyZ2V0U291cmNlLm5hbWUgPSB0YXJnZXRFbGVtZW50c1swXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6IC8vIG5hbWVzcGFjZSBhbmQgbmFtZSBzZXRcbiAgICAgICAgICB0YXJnZXRTb3VyY2UubmFtZXNwYWNlID0gdGFyZ2V0RWxlbWVudHNbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICB0YXJnZXRTb3VyY2UubmFtZSA9IHRhcmdldEVsZW1lbnRzWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogLy8gaG9zdG5hbWUsIG5hbWVzcGFjZSBhbmQgbmFtZSBzZXRcbiAgICAgICAgICB0YXJnZXRTb3VyY2UuaG9zdG5hbWUgPSB0YXJnZXRFbGVtZW50c1swXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHRhcmdldFNvdXJjZS5uYW1lc3BhY2UgPSB0YXJnZXRFbGVtZW50c1sxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHRhcmdldFNvdXJjZS5uYW1lID0gdGFyZ2V0RWxlbWVudHNbMl0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgY2FuJ3QgaGFuZGxlICR7dGFyZ2V0LnNvdXJjZX0uIEV4cGVjdGVkIHN0cmluZyB3aXRoIDEsIDIgb3IgMyBlbGVtZW50cyBzZXBhcmF0ZWQgYnkgJy8nYCxcbiAgICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICB0YXJnZXRTb3VyY2UuaG9zdG5hbWUgPT09IGhvc3RuYW1lICYmXG4gICAgICAgIHRhcmdldFNvdXJjZS5uYW1lc3BhY2UgPT09IG5hbWVzcGFjZSAmJlxuICAgICAgICB0YXJnZXRTb3VyY2UubmFtZSA9PT0gcHJvdmlkZXJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRWxzZSwgdHJ5IHRvIG1hdGNoIHRhcmdldC5uYW1lIHRvIHRoZSBwcm92aWRlciBuYW1lXG5cbiAgICByZXR1cm4gdGFyZ2V0Lm5hbWUgPT09IHByb3ZpZGVyO1xuICB9XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyQ29uc3RyYWludHMge1xuICBbZnFuOiBzdHJpbmddOiBQcm92aWRlckRhdGE7XG59XG5cbmV4cG9ydCBjbGFzcyBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvciB7XG4gIHByaXZhdGUgcmVzb3VyY2VQYXJzZXIgPSBuZXcgUmVzb3VyY2VQYXJzZXIoKTtcbiAgcHJpdmF0ZSByZXNvdXJjZUVtaXR0ZXI6IFJlc291cmNlRW1pdHRlcjtcbiAgcHJpdmF0ZSBzdHJ1Y3RFbWl0dGVyOiBTdHJ1Y3RFbWl0dGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGltcG9ydEV4dGVuc2lvbjogc3RyaW5nO1xuICBwdWJsaWMgdmVyc2lvbnM6IHsgW2ZxcG46IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9ID0ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb2RlOiBDb2RlTWFrZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzY2hlbWE6IFByb3ZpZGVyU2NoZW1hLFxuICAgIG9wdGlvbnM6IFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yT3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICB0aGlzLmNvZGUuaW5kZW50YXRpb24gPSAyO1xuICAgIHRoaXMuaW1wb3J0RXh0ZW5zaW9uID0gb3B0aW9ucy5pbXBvcnRFeHRlbnNpb24gPz8gXCJcIjtcbiAgICB0aGlzLnJlc291cmNlRW1pdHRlciA9IG5ldyBSZXNvdXJjZUVtaXR0ZXIodGhpcy5jb2RlKTtcbiAgICB0aGlzLnN0cnVjdEVtaXR0ZXIgPSBuZXcgU3RydWN0RW1pdHRlcih0aGlzLmNvZGUsIHRoaXMuaW1wb3J0RXh0ZW5zaW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJvdmlkZXJCeUNvbnN0cmFpbnQoXG4gICAgcHJvdmlkZXJDb25zdHJhaW50OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gICk6IEZRUE4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYS5wcm92aWRlcl9zY2hlbWFzIHx8IHt9KS5maW5kKChmcXBuKSA9PlxuICAgICAgaXNNYXRjaGluZyhwcm92aWRlckNvbnN0cmFpbnQsIGZxcG4pLFxuICAgICkgYXMgRlFQTiB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZW5lcmF0ZShwcm92aWRlckNvbnN0cmFpbnQ6IENvbnN0cnVjdHNNYWtlclRhcmdldCkge1xuICAgIGNvbnN0IGZxcG4gPSB0aGlzLmdldFByb3ZpZGVyQnlDb25zdHJhaW50KHByb3ZpZGVyQ29uc3RyYWludCk7XG4gICAgaWYgKCFmcXBuKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBDb3VsZCBub3QgZmluZCBwcm92aWRlciBjb25zdHJhaW50IGZvciAke3Byb3ZpZGVyQ29uc3RyYWludH0gaW4gc2NoZW1hOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgMixcbiAgICAgICAgKX1gLFxuICAgICAgKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIHByb3ZpZGVyIHdpdGggY29uc3RyYWludCAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHByb3ZpZGVyQ29uc3RyYWludCxcbiAgICAgICAgKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm92aWRlclZlcnNpb24gPSB0aGlzLnNjaGVtYS5wcm92aWRlcl92ZXJzaW9ucz8uW2ZxcG5dO1xuICAgIHRoaXMuZW1pdFByb3ZpZGVyKGZxcG4sIHByb3ZpZGVyVmVyc2lvbiwgcHJvdmlkZXJDb25zdHJhaW50KTtcbiAgICB0aGlzLnZlcnNpb25zW2ZxcG5dID0gcHJvdmlkZXJWZXJzaW9uO1xuICB9XG5cbiAgcHVibGljIGdlbmVyYXRlQWxsKCkge1xuICAgIGZvciAoY29uc3QgZnFwbiBvZiBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYS5wcm92aWRlcl9zY2hlbWFzIHx8IHt9KSkge1xuICAgICAgdGhpcy5nZW5lcmF0ZShcbiAgICAgICAgbmV3IENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0KFxuICAgICAgICAgIG5ldyBUZXJyYWZvcm1Qcm92aWRlckNvbnN0cmFpbnQoZnFwbiksXG4gICAgICAgICAgTEFOR1VBR0VTWzBdLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2F2ZShvdXRkaXI6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuY29kZS5zYXZlKG91dGRpcik7XG4gIH1cblxuICBwdWJsaWMgYnVpbGRSZXNvdXJjZU1vZGVscyhcbiAgICBmcXBuOiBGUVBOLFxuICAgIGNvbnN0cmFpbnQ/OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gICk6IFJlc291cmNlTW9kZWxbXSB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLnNjaGVtYS5wcm92aWRlcl9zY2hlbWFzPy5bZnFwbl07XG4gICAgaWYgKCFwcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGZpbmQgcHJvdmlkZXIgJyR7ZnFwbn0nIGluIHNjaGVtYWApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlcyA9IE9iamVjdC5lbnRyaWVzKHByb3ZpZGVyLnJlc291cmNlX3NjaGVtYXMgfHwge30pLm1hcChcbiAgICAgIChbdHlwZSwgcmVzb3VyY2VdKSA9PlxuICAgICAgICB0aGlzLnJlc291cmNlUGFyc2VyLnBhcnNlKGZxcG4sIHR5cGUsIHJlc291cmNlLCBcInJlc291cmNlXCIsIGNvbnN0cmFpbnQpLFxuICAgICk7XG5cbiAgICBjb25zdCBkYXRhU291cmNlcyA9IE9iamVjdC5lbnRyaWVzKHByb3ZpZGVyLmRhdGFfc291cmNlX3NjaGVtYXMgfHwge30pLm1hcChcbiAgICAgIChbdHlwZSwgcmVzb3VyY2VdKSA9PlxuICAgICAgICB0aGlzLnJlc291cmNlUGFyc2VyLnBhcnNlKFxuICAgICAgICAgIGZxcG4sXG4gICAgICAgICAgYGRhdGFfJHt0eXBlfWAsXG4gICAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICAgXCJkYXRhX3NvdXJjZVwiLFxuICAgICAgICAgIGNvbnN0cmFpbnQsXG4gICAgICAgICksXG4gICAgKTtcblxuICAgIHJldHVybiAoW10gYXMgUmVzb3VyY2VNb2RlbFtdKS5jb25jYXQoLi4ucmVzb3VyY2VzLCAuLi5kYXRhU291cmNlcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2xhc3NOYW1lRm9yUmVzb3VyY2UodGVycmFmb3JtVHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VQYXJzZXIuZ2V0Q2xhc3NOYW1lRm9yUmVzb3VyY2UodGVycmFmb3JtVHlwZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TmFtZXNwYWNlTmFtZUZvclJlc291cmNlKHRlcnJhZm9ybVR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlUGFyc2VyLmdldE5hbWVzcGFjZU5hbWVGb3JSZXNvdXJjZSh0ZXJyYWZvcm1UeXBlKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFByb3ZpZGVyKFxuICAgIGZxcG46IEZRUE4sXG4gICAgcHJvdmlkZXJWZXJzaW9uPzogc3RyaW5nLFxuICAgIGNvbnN0cmFpbnQ/OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gICkge1xuICAgIGNvbnN0IG5hbWUgPSBjb25zdHJhaW50Py5uYW1lXG4gICAgICA/IChjb25zdHJhaW50Lm5hbWUgYXMgUHJvdmlkZXJOYW1lKVxuICAgICAgOiBwYXJzZUZRUE4oZnFwbikubmFtZTtcbiAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXM/LltmcXBuXTtcbiAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZmluZCBwcm92aWRlciAnJHtmcXBufScgaW4gc2NoZW1hYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgdGhpcy5idWlsZFJlc291cmNlTW9kZWxzKGZxcG4sIGNvbnN0cmFpbnQpLmZvckVhY2goKHJlc291cmNlTW9kZWwpID0+IHtcbiAgICAgIGlmIChjb25zdHJhaW50KSB7XG4gICAgICAgIHJlc291cmNlTW9kZWwucHJvdmlkZXJWZXJzaW9uQ29uc3RyYWludCA9IGNvbnN0cmFpbnQudmVyc2lvbjtcbiAgICAgICAgcmVzb3VyY2VNb2RlbC50ZXJyYWZvcm1Qcm92aWRlclNvdXJjZSA9IGNvbnN0cmFpbnQuc291cmNlO1xuICAgICAgfVxuICAgICAgcmVzb3VyY2VNb2RlbC5wcm92aWRlclZlcnNpb24gPSBwcm92aWRlclZlcnNpb247XG5cbiAgICAgIGlmIChyZXNvdXJjZU1vZGVsLnN0cnVjdHNSZXF1aXJlU2hhcmRpbmcpIHtcbiAgICAgICAgZmlsZXMucHVzaCh0aGlzLmVtaXRSZXNvdXJjZVdpdGhDb21wbGV4U3RydWN0KHJlc291cmNlTW9kZWwpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbGVzLnB1c2godGhpcy5lbWl0UmVzb3VyY2UocmVzb3VyY2VNb2RlbCkpO1xuICAgICAgfVxuICAgICAgdGhpcy5lbWl0UmVzb3VyY2VSZWFkbWUocmVzb3VyY2VNb2RlbCk7XG4gICAgfSk7XG5cbiAgICBpZiAocHJvdmlkZXIucHJvdmlkZXIpIHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyUmVzb3VyY2UgPSB0aGlzLnJlc291cmNlUGFyc2VyLnBhcnNlKFxuICAgICAgICBmcXBuLFxuICAgICAgICBgcHJvdmlkZXJgLFxuICAgICAgICBwcm92aWRlci5wcm92aWRlcixcbiAgICAgICAgXCJwcm92aWRlclwiLFxuICAgICAgICBjb25zdHJhaW50LFxuICAgICAgKTtcbiAgICAgIGlmIChjb25zdHJhaW50KSB7XG4gICAgICAgIHByb3ZpZGVyUmVzb3VyY2UucHJvdmlkZXJWZXJzaW9uQ29uc3RyYWludCA9IGNvbnN0cmFpbnQudmVyc2lvbjtcbiAgICAgICAgcHJvdmlkZXJSZXNvdXJjZS50ZXJyYWZvcm1Qcm92aWRlclNvdXJjZSA9IGNvbnN0cmFpbnQuc291cmNlO1xuICAgICAgICBwcm92aWRlclJlc291cmNlLnRlcnJhZm9ybVByb3ZpZGVyTmFtZSA9IGNvbnN0cmFpbnQubmFtZTtcbiAgICAgIH1cbiAgICAgIHByb3ZpZGVyUmVzb3VyY2UucHJvdmlkZXJWZXJzaW9uID0gcHJvdmlkZXJWZXJzaW9uO1xuICAgICAgZmlsZXMucHVzaCh0aGlzLmVtaXRSZXNvdXJjZShwcm92aWRlclJlc291cmNlKSk7XG4gICAgICB0aGlzLmVtaXRSZXNvdXJjZVJlYWRtZShwcm92aWRlclJlc291cmNlKTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRJbmRleEZpbGUobmFtZSwgZmlsZXMpO1xuICAgIHRoaXMuZW1pdExhenlJbmRleEZpbGUobmFtZSwgZmlsZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UmVzb3VyY2VSZWFkbWUocmVzb3VyY2U6IFJlc291cmNlTW9kZWwpOiB2b2lkIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGAke3Jlc291cmNlLm5hbWVzcGFjZUZvbGRlclBhdGh9L1JFQURNRS5tZGA7XG4gICAgdGhpcy5jb2RlLm9wZW5GaWxlKGZpbGVQYXRoKTtcbiAgICB0aGlzLmNvZGUubGluZShgIyBcXGAke3Jlc291cmNlLnRlcnJhZm9ybVR5cGV9XFxgYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICBjb25zdCB0eXBlID0gcmVzb3VyY2UuaXNQcm92aWRlclxuICAgICAgPyByZXNvdXJjZS5wcm92aWRlclxuICAgICAgOiByZXNvdXJjZS50ZXJyYWZvcm1UeXBlO1xuICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgYFJlZmVyIHRvIHRoZSBUZXJyYWZvcm0gUmVnaXN0cnkgZm9yIGRvY3M6IFtcXGAke3R5cGV9XFxgXSgke3Jlc291cmNlLmxpbmtUb0RvY3N9KS5gLFxuICAgICk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRJbmRleEZpbGUocHJvdmlkZXI6IFByb3ZpZGVyTmFtZSwgZmlsZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgY29uc3QgZm9sZGVyID0gYHByb3ZpZGVycy8ke3Byb3ZpZGVyfWA7XG4gICAgY29uc3QgZmlsZVBhdGggPSBgJHtmb2xkZXJ9L2luZGV4LnRzYDtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKFwiLy8gZ2VuZXJhdGVkIGJ5IGNka3RuIGdldFwiKTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIGNvbnN0IGRpck5hbWUgPSBmaWxlLnJlcGxhY2UoYCR7Zm9sZGVyfS9gLCBcIlwiKS5yZXBsYWNlKFwiL2luZGV4LnRzXCIsIFwiXCIpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgIGBleHBvcnQgKiBhcyAke3RvQ2FtZWxDYXNlKGRpck5hbWUpfSBmcm9tICcuLyR7ZGlyTmFtZX0vaW5kZXgke3RoaXMuaW1wb3J0RXh0ZW5zaW9ufSc7YCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRMYXp5SW5kZXhGaWxlKHByb3ZpZGVyOiBQcm92aWRlck5hbWUsIGZpbGVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNvbnN0IGZvbGRlciA9IGBwcm92aWRlcnMvJHtwcm92aWRlcn1gO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7Zm9sZGVyfS9sYXp5LWluZGV4LnRzYDtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKFwiLy8gZ2VuZXJhdGVkIGJ5IGNka3RuIGdldFwiKTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIGNvbnN0IGRpck5hbWUgPSBmaWxlLnJlcGxhY2UoYCR7Zm9sZGVyfS9gLCBcIlwiKS5yZXBsYWNlKFwiL2luZGV4LnRzXCIsIFwiXCIpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgIGBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJyR7dG9DYW1lbENhc2UoXG4gICAgICAgICAgZGlyTmFtZSxcbiAgICAgICAgKX0nLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWlyZSgnLi8ke2Rpck5hbWV9Jyk7IH0gfSk7YCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRSZXNvdXJjZShyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCk6IHN0cmluZyB7XG4gICAgdGhpcy5jb2RlLm9wZW5GaWxlKHJlc291cmNlLmZpbGVQYXRoKTtcbiAgICB0aGlzLmVtaXRGaWxlSGVhZGVyKHJlc291cmNlKTtcbiAgICB0aGlzLnN0cnVjdEVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG4gICAgdGhpcy5yZXNvdXJjZUVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShyZXNvdXJjZS5maWxlUGF0aCk7XG5cbiAgICByZXR1cm4gcmVzb3VyY2UuZmlsZVBhdGg7XG4gIH1cblxuICBwcml2YXRlIGVtaXRSZXNvdXJjZVdpdGhDb21wbGV4U3RydWN0KHJlc291cmNlOiBSZXNvdXJjZU1vZGVsKSB7XG4gICAgY29uc3QgZ2VuZXJhdGVkRmlsZXMgPSBbXTtcblxuICAgIC8vIGRyb3AgdGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgZmlsZXBhdGhcbiAgICBjb25zdCBmaWxlUGF0aCA9IHJlc291cmNlLmZpbGVQYXRoO1xuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYC8vIGdlbmVyYXRlZCBmcm9tIHRlcnJhZm9ybSByZXNvdXJjZSBzY2hlbWFgKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuXG4gICAgaWYgKHJlc291cmNlLnN0cnVjdHNSZXF1aXJlU2hhcmRpbmcpIHtcbiAgICAgIGNvbnN0IHN0cnVjdHNTcGVjaWZpZXIgPSBgLi8ke3Jlc291cmNlLnN0cnVjdHNGb2xkZXJOYW1lfS9pbmRleCR7dGhpcy5pbXBvcnRFeHRlbnNpb259YDtcbiAgICAgIGlmIChyZXNvdXJjZS5yZWZlcmVuY2VkVHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgICBgaW1wb3J0IHsgJHtyZXNvdXJjZS5yZWZlcmVuY2VkVHlwZXMuam9pbihcbiAgICAgICAgICAgIFwiLCBcXG5cIixcbiAgICAgICAgICApfX0gZnJvbSAnJHtzdHJ1Y3RzU3BlY2lmaWVyfSc7YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jb2RlLmxpbmUoYGV4cG9ydCAqIGZyb20gJyR7c3RydWN0c1NwZWNpZmllcn0nO2ApO1xuXG4gICAgICByZXNvdXJjZS5pbXBvcnRTdGF0ZW1lbnRzLmZvckVhY2goKHN0YXRlbWVudCkgPT5cbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoc3RhdGVtZW50KSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuc3RydWN0RW1pdHRlci5lbWl0SW50ZXJmYWNlKHJlc291cmNlLCByZXNvdXJjZS5jb25maWdTdHJ1Y3QpO1xuICAgICAgdGhpcy5yZXNvdXJjZUVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG5cbiAgICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuXG4gICAgICB0aGlzLnN0cnVjdEVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG4gICAgICBnZW5lcmF0ZWRGaWxlcy5wdXNoKHJlc291cmNlLmZpbGVOYW1lKTtcbiAgICAgIGdlbmVyYXRlZEZpbGVzLnB1c2gocmVzb3VyY2Uuc3RydWN0c0ZvbGRlck5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvdXJjZS5pbXBvcnRTdGF0ZW1lbnRzLmZvckVhY2goKHN0YXRlbWVudCkgPT5cbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoc3RhdGVtZW50KSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuc3RydWN0RW1pdHRlci5lbWl0KHJlc291cmNlKTtcbiAgICAgIHRoaXMucmVzb3VyY2VFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuICAgICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gICAgICBnZW5lcmF0ZWRGaWxlcy5wdXNoKHJlc291cmNlLmZpbGVOYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZVBhdGg7XG4gIH1cblxuICBwcml2YXRlIGVtaXRGaWxlSGVhZGVyKHJlc291cmNlOiBSZXNvdXJjZU1vZGVsKSB7XG4gICAgdGhpcy5jb2RlLmxpbmUoYC8vICR7cmVzb3VyY2UubGlua1RvRG9jc31gKTtcbiAgICB0aGlzLmNvZGUubGluZShgLy8gZ2VuZXJhdGVkIGZyb20gdGVycmFmb3JtIHJlc291cmNlIHNjaGVtYWApO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgcmVzb3VyY2UuaW1wb3J0U3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+IHRoaXMuY29kZS5saW5lKHN0YXRlbWVudCkpO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoXCIvLyBDb25maWd1cmF0aW9uXCIpO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gIH1cbn1cbiJdfQ==
|
|
235
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvcHJvdmlkZXItZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMseUNBQW1EO0FBQ25ELDRDQU93QjtBQUN4Qiw0REFBdUU7QUFFdkUsdURBQW1EO0FBQ25ELHVDQUEyRDtBQWdCM0QsTUFBTSxVQUFVLEdBQUcsQ0FDakIsTUFBNkIsRUFDN0IsbUJBQTJCLEVBQ2xCLEVBQUU7SUFDWCxJQUFJLE1BQU0sQ0FBQyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFbEMsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWhELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssbUJBQW1CLENBQUM7SUFDL0MsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7UUFFakQsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBRUQsMkNBQTJDO1FBQzNDLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sWUFBWSxHQUFHO2dCQUNuQixXQUFXO2dCQUNYLFFBQVEsRUFBRSx1QkFBdUI7Z0JBQ2pDLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixJQUFJLEVBQUUsRUFBRTthQUNULENBQUM7WUFDRixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUss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RSxFQUFFLENBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQixDQUFDO1lBRUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUIsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxjQUFjLENBQUMsUUFBdUI7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakIsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUF0UUQsZ0VBc1FDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IENvZGVNYWtlciwgdG9DYW1lbENhc2UgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQge1xuICBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldCxcbiAgQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICBMQU5HVUFHRVMsXG4gIGxvZ2dlcixcbiAgUHJvdmlkZXJTY2hlbWEsXG4gIFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludCxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBGUVBOLCBwYXJzZUZRUE4sIFByb3ZpZGVyTmFtZSB9IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItc2NoZW1hXCI7XG5pbXBvcnQgeyBSZXNvdXJjZU1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBSZXNvdXJjZVBhcnNlciB9IGZyb20gXCIuL3Jlc291cmNlLXBhcnNlclwiO1xuaW1wb3J0IHsgUmVzb3VyY2VFbWl0dGVyLCBTdHJ1Y3RFbWl0dGVyIH0gZnJvbSBcIi4vZW1pdHRlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBGaWxlIGV4dGVuc2lvbiB0byB3cml0ZSBvbiBlbWl0dGVkIHJlbGF0aXZlIGltcG9ydHMuXG4gICAqIERlZmF1bHRzIHRvIFwiXCIgKENvbW1vbkpTKS5cbiAgICovXG4gIHJlYWRvbmx5IGltcG9ydEV4dGVuc2lvbj86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFByb3ZpZGVyRGF0YSB7XG4gIG5hbWU6IHN0cmluZztcbiAgc291cmNlOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbn1cblxuY29uc3QgaXNNYXRjaGluZyA9IChcbiAgdGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gIHRlcnJhZm9ybVNjaGVtYU5hbWU6IHN0cmluZyxcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAodGFyZ2V0LmlzTW9kdWxlKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgZWxlbWVudHMgPSB0ZXJyYWZvcm1TY2hlbWFOYW1lLnNwbGl0KFwiL1wiKTtcblxuICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHRhcmdldC5zb3VyY2UgPT09IHRlcnJhZm9ybVNjaGVtYU5hbWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgW2hvc3RuYW1lLCBuYW1lc3BhY2UsIHByb3ZpZGVyXSA9IGVsZW1lbnRzO1xuXG4gICAgaWYgKCFob3N0bmFtZSB8fCAhbmFtZXNwYWNlIHx8ICFwcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW4ndCBoYW5kbGUgJHt0ZXJyYWZvcm1TY2hlbWFOYW1lfWApO1xuICAgIH1cblxuICAgIC8vIElmIHRhcmdldC5zb3VyY2UgaXMgc2V0LCB0cnkgdG8gbWF0Y2ggaXRcbiAgICBpZiAodGFyZ2V0LnNvdXJjZSkge1xuICAgICAgY29uc3QgdGFyZ2V0U291cmNlID0ge1xuICAgICAgICAvLyBkZWZhdWx0c1xuICAgICAgICBob3N0bmFtZTogXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW9cIixcbiAgICAgICAgbmFtZXNwYWNlOiBcImhhc2hpY29ycFwiLFxuICAgICAgICBuYW1lOiBcIlwiLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnRzID0gdGFyZ2V0LnNvdXJjZS5zcGxpdChcIi9cIik7XG4gICAgICAvLyBPbmx5IGEgMy1wYXJ0IHNvdXJjZSBleHBsaWNpdGx5IHBpbnMgYSByZWdpc3RyeSBob3N0bmFtZS4gU2hvcnRoYW5kXG4gICAgICAvLyBzb3VyY2VzIChlLmcuIFwiaGFzaGljb3JwL2F3c2NjXCIpIG9taXQgaXQsIHNvIHdlIG11c3Qgbm90IGFzc3VtZSBhXG4gICAgICAvLyBkZWZhdWx0OiBUZXJyYWZvcm0gcmVzb2x2ZXMgdGhlbSB1bmRlciByZWdpc3RyeS50ZXJyYWZvcm0uaW8gd2hpbGVcbiAgICAgIC8vIE9wZW5Ub2Z1IHJlc29sdmVzIHRoZW0gdW5kZXIgcmVnaXN0cnkub3BlbnRvZnUub3JnLiBDb21wYXJpbmcgYWdhaW5zdCBhXG4gICAgICAvLyBoYXJkLWNvZGVkIGRlZmF1bHQgd291bGQgbWFrZSBzY2hlbWEgbG9va3VwIGZhaWwgdW5kZXIgT3BlblRvZnUgZXZlblxuICAgICAgLy8gdGhvdWdoIHRoZSBwcm92aWRlciB3YXMgaW5zdGFsbGVkIGNvcnJlY3RseS5cbiAgICAgIGNvbnN0IGV4cGxpY2l0SG9zdG5hbWUgPSB0YXJnZXRFbGVtZW50cy5sZW5ndGggPT09IDM7XG4gICAgICBzd2l0Y2ggKHRhcmdldEVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6IC8vIG9ubHkgbmFtZSBzZXRcbiAgICAgICAgICB0YXJnZXRTb3VyY2UubmFtZSA9IHRhcmdldEVsZW1lbnRzWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogLy8gbmFtZXNwYWNlIGFuZCBuYW1lIHNldFxuICAgICAgICAgIHRhcmdldFNvdXJjZS5uYW1lc3BhY2UgPSB0YXJnZXRFbGVtZW50c1swXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHRhcmdldFNvdXJjZS5uYW1lID0gdGFyZ2V0RWxlbWVudHNbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOiAvLyBob3N0bmFtZSwgbmFtZXNwYWNlIGFuZCBuYW1lIHNldFxuICAgICAgICAgIHRhcmdldFNvdXJjZS5ob3N0bmFtZSA9IHRhcmdldEVsZW1lbnRzWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgdGFyZ2V0U291cmNlLm5hbWVzcGFjZSA9IHRhcmdldEVsZW1lbnRzWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgdGFyZ2V0U291cmNlLm5hbWUgPSB0YXJnZXRFbGVtZW50c1syXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBjYW4ndCBoYW5kbGUgJHt0YXJnZXQuc291cmNlfS4gRXhwZWN0ZWQgc3RyaW5nIHdpdGggMSwgMiBvciAzIGVsZW1lbnRzIHNlcGFyYXRlZCBieSAnLydgLFxuICAgICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgICghZXhwbGljaXRIb3N0bmFtZSB8fCB0YXJnZXRTb3VyY2UuaG9zdG5hbWUgPT09IGhvc3RuYW1lKSAmJlxuICAgICAgICB0YXJnZXRTb3VyY2UubmFtZXNwYWNlID09PSBuYW1lc3BhY2UgJiZcbiAgICAgICAgdGFyZ2V0U291cmNlLm5hbWUgPT09IHByb3ZpZGVyXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEVsc2UsIHRyeSB0byBtYXRjaCB0YXJnZXQubmFtZSB0byB0aGUgcHJvdmlkZXIgbmFtZVxuXG4gICAgcmV0dXJuIHRhcmdldC5uYW1lID09PSBwcm92aWRlcjtcbiAgfVxufTtcblxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlckNvbnN0cmFpbnRzIHtcbiAgW2Zxbjogc3RyaW5nXTogUHJvdmlkZXJEYXRhO1xufVxuXG5leHBvcnQgY2xhc3MgVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3Ige1xuICBwcml2YXRlIHJlc291cmNlUGFyc2VyID0gbmV3IFJlc291cmNlUGFyc2VyKCk7XG4gIHByaXZhdGUgcmVzb3VyY2VFbWl0dGVyOiBSZXNvdXJjZUVtaXR0ZXI7XG4gIHByaXZhdGUgc3RydWN0RW1pdHRlcjogU3RydWN0RW1pdHRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBpbXBvcnRFeHRlbnNpb246IHN0cmluZztcbiAgcHVibGljIHZlcnNpb25zOiB7IFtmcXBuOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29kZTogQ29kZU1ha2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NoZW1hOiBQcm92aWRlclNjaGVtYSxcbiAgICBvcHRpb25zOiBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvck9wdGlvbnMgPSB7fSxcbiAgKSB7XG4gICAgdGhpcy5jb2RlLmluZGVudGF0aW9uID0gMjtcbiAgICB0aGlzLmltcG9ydEV4dGVuc2lvbiA9IG9wdGlvbnMuaW1wb3J0RXh0ZW5zaW9uID8/IFwiXCI7XG4gICAgdGhpcy5yZXNvdXJjZUVtaXR0ZXIgPSBuZXcgUmVzb3VyY2VFbWl0dGVyKHRoaXMuY29kZSk7XG4gICAgdGhpcy5zdHJ1Y3RFbWl0dGVyID0gbmV3IFN0cnVjdEVtaXR0ZXIodGhpcy5jb2RlLCB0aGlzLmltcG9ydEV4dGVuc2lvbik7XG4gIH1cblxuICBwcml2YXRlIGdldFByb3ZpZGVyQnlDb25zdHJhaW50KFxuICAgIHByb3ZpZGVyQ29uc3RyYWludDogQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICApOiBGUVBOIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5zY2hlbWEucHJvdmlkZXJfc2NoZW1hcyB8fCB7fSkuZmluZCgoZnFwbikgPT5cbiAgICAgIGlzTWF0Y2hpbmcocHJvdmlkZXJDb25zdHJhaW50LCBmcXBuKSxcbiAgICApIGFzIEZRUE4gfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2VuZXJhdGUocHJvdmlkZXJDb25zdHJhaW50OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQpIHtcbiAgICBjb25zdCBmcXBuID0gdGhpcy5nZXRQcm92aWRlckJ5Q29uc3RyYWludChwcm92aWRlckNvbnN0cmFpbnQpO1xuICAgIGlmICghZnFwbikge1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgcHJvdmlkZXIgY29uc3RyYWludCBmb3IgJHtwcm92aWRlckNvbnN0cmFpbnR9IGluIHNjaGVtYTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIDIsXG4gICAgICAgICl9YCxcbiAgICAgICk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZmluZCBwcm92aWRlciB3aXRoIGNvbnN0cmFpbnQgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBwcm92aWRlckNvbnN0cmFpbnQsXG4gICAgICAgICl9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdmlkZXJWZXJzaW9uID0gdGhpcy5zY2hlbWEucHJvdmlkZXJfdmVyc2lvbnM/LltmcXBuXTtcbiAgICB0aGlzLmVtaXRQcm92aWRlcihmcXBuLCBwcm92aWRlclZlcnNpb24sIHByb3ZpZGVyQ29uc3RyYWludCk7XG4gICAgdGhpcy52ZXJzaW9uc1tmcXBuXSA9IHByb3ZpZGVyVmVyc2lvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZW5lcmF0ZUFsbCgpIHtcbiAgICBmb3IgKGNvbnN0IGZxcG4gb2YgT2JqZWN0LmtleXModGhpcy5zY2hlbWEucHJvdmlkZXJfc2NoZW1hcyB8fCB7fSkpIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGUoXG4gICAgICAgIG5ldyBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldChcbiAgICAgICAgICBuZXcgVGVycmFmb3JtUHJvdmlkZXJDb25zdHJhaW50KGZxcG4pLFxuICAgICAgICAgIExBTkdVQUdFU1swXSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHNhdmUob3V0ZGlyOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmNvZGUuc2F2ZShvdXRkaXIpO1xuICB9XG5cbiAgcHVibGljIGJ1aWxkUmVzb3VyY2VNb2RlbHMoXG4gICAgZnFwbjogRlFQTixcbiAgICBjb25zdHJhaW50PzogQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICApOiBSZXNvdXJjZU1vZGVsW10ge1xuICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5zY2hlbWEucHJvdmlkZXJfc2NoZW1hcz8uW2ZxcG5dO1xuICAgIGlmICghcHJvdmlkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuIG5vdCBmaW5kIHByb3ZpZGVyICcke2ZxcG59JyBpbiBzY2hlbWFgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZXMgPSBPYmplY3QuZW50cmllcyhwcm92aWRlci5yZXNvdXJjZV9zY2hlbWFzIHx8IHt9KS5tYXAoXG4gICAgICAoW3R5cGUsIHJlc291cmNlXSkgPT5cbiAgICAgICAgdGhpcy5yZXNvdXJjZVBhcnNlci5wYXJzZShmcXBuLCB0eXBlLCByZXNvdXJjZSwgXCJyZXNvdXJjZVwiLCBjb25zdHJhaW50KSxcbiAgICApO1xuXG4gICAgY29uc3QgZGF0YVNvdXJjZXMgPSBPYmplY3QuZW50cmllcyhwcm92aWRlci5kYXRhX3NvdXJjZV9zY2hlbWFzIHx8IHt9KS5tYXAoXG4gICAgICAoW3R5cGUsIHJlc291cmNlXSkgPT5cbiAgICAgICAgdGhpcy5yZXNvdXJjZVBhcnNlci5wYXJzZShcbiAgICAgICAgICBmcXBuLFxuICAgICAgICAgIGBkYXRhXyR7dHlwZX1gLFxuICAgICAgICAgIHJlc291cmNlLFxuICAgICAgICAgIFwiZGF0YV9zb3VyY2VcIixcbiAgICAgICAgICBjb25zdHJhaW50LFxuICAgICAgICApLFxuICAgICk7XG5cbiAgICByZXR1cm4gKFtdIGFzIFJlc291cmNlTW9kZWxbXSkuY29uY2F0KC4uLnJlc291cmNlcywgLi4uZGF0YVNvdXJjZXMpO1xuICB9XG5cbiAgcHVibGljIGdldENsYXNzTmFtZUZvclJlc291cmNlKHRlcnJhZm9ybVR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlUGFyc2VyLmdldENsYXNzTmFtZUZvclJlc291cmNlKHRlcnJhZm9ybVR5cGUpO1xuICB9XG5cbiAgcHVibGljIGdldE5hbWVzcGFjZU5hbWVGb3JSZXNvdXJjZSh0ZXJyYWZvcm1UeXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVBhcnNlci5nZXROYW1lc3BhY2VOYW1lRm9yUmVzb3VyY2UodGVycmFmb3JtVHlwZSk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRQcm92aWRlcihcbiAgICBmcXBuOiBGUVBOLFxuICAgIHByb3ZpZGVyVmVyc2lvbj86IHN0cmluZyxcbiAgICBjb25zdHJhaW50PzogQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICApIHtcbiAgICBjb25zdCBuYW1lID0gY29uc3RyYWludD8ubmFtZVxuICAgICAgPyAoY29uc3RyYWludC5uYW1lIGFzIFByb3ZpZGVyTmFtZSlcbiAgICAgIDogcGFyc2VGUVBOKGZxcG4pLm5hbWU7XG4gICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLnNjaGVtYS5wcm92aWRlcl9zY2hlbWFzPy5bZnFwbl07XG4gICAgaWYgKCFwcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGZpbmQgcHJvdmlkZXIgJyR7ZnFwbn0nIGluIHNjaGVtYWApO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRoaXMuYnVpbGRSZXNvdXJjZU1vZGVscyhmcXBuLCBjb25zdHJhaW50KS5mb3JFYWNoKChyZXNvdXJjZU1vZGVsKSA9PiB7XG4gICAgICBpZiAoY29uc3RyYWludCkge1xuICAgICAgICByZXNvdXJjZU1vZGVsLnByb3ZpZGVyVmVyc2lvbkNvbnN0cmFpbnQgPSBjb25zdHJhaW50LnZlcnNpb247XG4gICAgICAgIHJlc291cmNlTW9kZWwudGVycmFmb3JtUHJvdmlkZXJTb3VyY2UgPSBjb25zdHJhaW50LnNvdXJjZTtcbiAgICAgIH1cbiAgICAgIHJlc291cmNlTW9kZWwucHJvdmlkZXJWZXJzaW9uID0gcHJvdmlkZXJWZXJzaW9uO1xuXG4gICAgICBpZiAocmVzb3VyY2VNb2RlbC5zdHJ1Y3RzUmVxdWlyZVNoYXJkaW5nKSB7XG4gICAgICAgIGZpbGVzLnB1c2godGhpcy5lbWl0UmVzb3VyY2VXaXRoQ29tcGxleFN0cnVjdChyZXNvdXJjZU1vZGVsKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWxlcy5wdXNoKHRoaXMuZW1pdFJlc291cmNlKHJlc291cmNlTW9kZWwpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW1pdFJlc291cmNlUmVhZG1lKHJlc291cmNlTW9kZWwpO1xuICAgIH0pO1xuXG4gICAgaWYgKHByb3ZpZGVyLnByb3ZpZGVyKSB7XG4gICAgICBjb25zdCBwcm92aWRlclJlc291cmNlID0gdGhpcy5yZXNvdXJjZVBhcnNlci5wYXJzZShcbiAgICAgICAgZnFwbixcbiAgICAgICAgYHByb3ZpZGVyYCxcbiAgICAgICAgcHJvdmlkZXIucHJvdmlkZXIsXG4gICAgICAgIFwicHJvdmlkZXJcIixcbiAgICAgICAgY29uc3RyYWludCxcbiAgICAgICk7XG4gICAgICBpZiAoY29uc3RyYWludCkge1xuICAgICAgICBwcm92aWRlclJlc291cmNlLnByb3ZpZGVyVmVyc2lvbkNvbnN0cmFpbnQgPSBjb25zdHJhaW50LnZlcnNpb247XG4gICAgICAgIHByb3ZpZGVyUmVzb3VyY2UudGVycmFmb3JtUHJvdmlkZXJTb3VyY2UgPSBjb25zdHJhaW50LnNvdXJjZTtcbiAgICAgICAgcHJvdmlkZXJSZXNvdXJjZS50ZXJyYWZvcm1Qcm92aWRlck5hbWUgPSBjb25zdHJhaW50Lm5hbWU7XG4gICAgICB9XG4gICAgICBwcm92aWRlclJlc291cmNlLnByb3ZpZGVyVmVyc2lvbiA9IHByb3ZpZGVyVmVyc2lvbjtcbiAgICAgIGZpbGVzLnB1c2godGhpcy5lbWl0UmVzb3VyY2UocHJvdmlkZXJSZXNvdXJjZSkpO1xuICAgICAgdGhpcy5lbWl0UmVzb3VyY2VSZWFkbWUocHJvdmlkZXJSZXNvdXJjZSk7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0SW5kZXhGaWxlKG5hbWUsIGZpbGVzKTtcbiAgICB0aGlzLmVtaXRMYXp5SW5kZXhGaWxlKG5hbWUsIGZpbGVzKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFJlc291cmNlUmVhZG1lKHJlc291cmNlOiBSZXNvdXJjZU1vZGVsKTogdm9pZCB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBgJHtyZXNvdXJjZS5uYW1lc3BhY2VGb2xkZXJQYXRofS9SRUFETUUubWRgO1xuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYCMgXFxgJHtyZXNvdXJjZS50ZXJyYWZvcm1UeXBlfVxcYGApO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgY29uc3QgdHlwZSA9IHJlc291cmNlLmlzUHJvdmlkZXJcbiAgICAgID8gcmVzb3VyY2UucHJvdmlkZXJcbiAgICAgIDogcmVzb3VyY2UudGVycmFmb3JtVHlwZTtcbiAgICB0aGlzLmNvZGUubGluZShcbiAgICAgIGBSZWZlciB0byB0aGUgVGVycmFmb3JtIFJlZ2lzdHJ5IGZvciBkb2NzOiBbXFxgJHt0eXBlfVxcYF0oJHtyZXNvdXJjZS5saW5rVG9Eb2NzfSkuYCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0SW5kZXhGaWxlKHByb3ZpZGVyOiBQcm92aWRlck5hbWUsIGZpbGVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNvbnN0IGZvbGRlciA9IGBwcm92aWRlcnMvJHtwcm92aWRlcn1gO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7Zm9sZGVyfS9pbmRleC50c2A7XG4gICAgdGhpcy5jb2RlLm9wZW5GaWxlKGZpbGVQYXRoKTtcbiAgICB0aGlzLmNvZGUubGluZShcIi8vIGdlbmVyYXRlZCBieSBjZGt0biBnZXRcIik7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBjb25zdCBkaXJOYW1lID0gZmlsZS5yZXBsYWNlKGAke2ZvbGRlcn0vYCwgXCJcIikucmVwbGFjZShcIi9pbmRleC50c1wiLCBcIlwiKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgZXhwb3J0ICogYXMgJHt0b0NhbWVsQ2FzZShkaXJOYW1lKX0gZnJvbSAnLi8ke2Rpck5hbWV9L2luZGV4JHt0aGlzLmltcG9ydEV4dGVuc2lvbn0nO2AsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0TGF6eUluZGV4RmlsZShwcm92aWRlcjogUHJvdmlkZXJOYW1lLCBmaWxlczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zdCBmb2xkZXIgPSBgcHJvdmlkZXJzLyR7cHJvdmlkZXJ9YDtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGAke2ZvbGRlcn0vbGF6eS1pbmRleC50c2A7XG4gICAgdGhpcy5jb2RlLm9wZW5GaWxlKGZpbGVQYXRoKTtcbiAgICB0aGlzLmNvZGUubGluZShcIi8vIGdlbmVyYXRlZCBieSBjZGt0biBnZXRcIik7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBjb25zdCBkaXJOYW1lID0gZmlsZS5yZXBsYWNlKGAke2ZvbGRlcn0vYCwgXCJcIikucmVwbGFjZShcIi9pbmRleC50c1wiLCBcIlwiKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICcke3RvQ2FtZWxDYXNlKFxuICAgICAgICAgIGRpck5hbWUsXG4gICAgICAgICl9JywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlcXVpcmUoJy4vJHtkaXJOYW1lfScpOyB9IH0pO2AsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UmVzb3VyY2UocmVzb3VyY2U6IFJlc291cmNlTW9kZWwpOiBzdHJpbmcge1xuICAgIHRoaXMuY29kZS5vcGVuRmlsZShyZXNvdXJjZS5maWxlUGF0aCk7XG4gICAgdGhpcy5lbWl0RmlsZUhlYWRlcihyZXNvdXJjZSk7XG4gICAgdGhpcy5zdHJ1Y3RFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuICAgIHRoaXMucmVzb3VyY2VFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUocmVzb3VyY2UuZmlsZVBhdGgpO1xuXG4gICAgcmV0dXJuIHJlc291cmNlLmZpbGVQYXRoO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UmVzb3VyY2VXaXRoQ29tcGxleFN0cnVjdChyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCkge1xuICAgIGNvbnN0IGdlbmVyYXRlZEZpbGVzID0gW107XG5cbiAgICAvLyBkcm9wIHRoZSBsYXN0IHNlZ21lbnQgb2YgdGhlIGZpbGVwYXRoXG4gICAgY29uc3QgZmlsZVBhdGggPSByZXNvdXJjZS5maWxlUGF0aDtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKGAvLyBnZW5lcmF0ZWQgZnJvbSB0ZXJyYWZvcm0gcmVzb3VyY2Ugc2NoZW1hYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcblxuICAgIGlmIChyZXNvdXJjZS5zdHJ1Y3RzUmVxdWlyZVNoYXJkaW5nKSB7XG4gICAgICBjb25zdCBzdHJ1Y3RzU3BlY2lmaWVyID0gYC4vJHtyZXNvdXJjZS5zdHJ1Y3RzRm9sZGVyTmFtZX0vaW5kZXgke3RoaXMuaW1wb3J0RXh0ZW5zaW9ufWA7XG4gICAgICBpZiAocmVzb3VyY2UucmVmZXJlbmNlZFR5cGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgICAgYGltcG9ydCB7ICR7cmVzb3VyY2UucmVmZXJlbmNlZFR5cGVzLmpvaW4oXG4gICAgICAgICAgICBcIiwgXFxuXCIsXG4gICAgICAgICAgKX19IGZyb20gJyR7c3RydWN0c1NwZWNpZmllcn0nO2AsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29kZS5saW5lKGBleHBvcnQgKiBmcm9tICcke3N0cnVjdHNTcGVjaWZpZXJ9JztgKTtcblxuICAgICAgcmVzb3VyY2UuaW1wb3J0U3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+XG4gICAgICAgIHRoaXMuY29kZS5saW5lKHN0YXRlbWVudCksXG4gICAgICApO1xuXG4gICAgICB0aGlzLnN0cnVjdEVtaXR0ZXIuZW1pdEludGVyZmFjZShyZXNvdXJjZSwgcmVzb3VyY2UuY29uZmlnU3RydWN0KTtcbiAgICAgIHRoaXMucmVzb3VyY2VFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuXG4gICAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKGZpbGVQYXRoKTtcblxuICAgICAgdGhpcy5zdHJ1Y3RFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuICAgICAgZ2VuZXJhdGVkRmlsZXMucHVzaChyZXNvdXJjZS5maWxlTmFtZSk7XG4gICAgICBnZW5lcmF0ZWRGaWxlcy5wdXNoKHJlc291cmNlLnN0cnVjdHNGb2xkZXJOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb3VyY2UuaW1wb3J0U3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+XG4gICAgICAgIHRoaXMuY29kZS5saW5lKHN0YXRlbWVudCksXG4gICAgICApO1xuXG4gICAgICB0aGlzLnN0cnVjdEVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG4gICAgICB0aGlzLnJlc291cmNlRW1pdHRlci5lbWl0KHJlc291cmNlKTtcbiAgICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICAgICAgZ2VuZXJhdGVkRmlsZXMucHVzaChyZXNvdXJjZS5maWxlTmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGVQYXRoO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0RmlsZUhlYWRlcihyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCkge1xuICAgIHRoaXMuY29kZS5saW5lKGAvLyAke3Jlc291cmNlLmxpbmtUb0RvY3N9YCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYC8vIGdlbmVyYXRlZCBmcm9tIHRlcnJhZm9ybSByZXNvdXJjZSBzY2hlbWFgKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHJlc291cmNlLmltcG9ydFN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50KSA9PiB0aGlzLmNvZGUubGluZShzdGF0ZW1lbnQpKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHRoaXMuY29kZS5saW5lKFwiLy8gQ29uZmlndXJhdGlvblwiKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICB9XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cdktn/provider-generator",
|
|
3
|
-
"version": "0.23.
|
|
3
|
+
"version": "0.23.4",
|
|
4
4
|
"description": "Exposes API to generate Terraform CDK provider bindings",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -12,16 +12,6 @@
|
|
|
12
12
|
"publishConfig": {
|
|
13
13
|
"access": "public"
|
|
14
14
|
},
|
|
15
|
-
"scripts": {
|
|
16
|
-
"build": "tsc",
|
|
17
|
-
"postbuild": "node ./build/__tests__/edge-provider-schema/cli.js ./edge-provider-bindings",
|
|
18
|
-
"watch": "tsc -w",
|
|
19
|
-
"watch-preserve-output": "tsc -w --preserveWatchOutput",
|
|
20
|
-
"test:update": "jest -u",
|
|
21
|
-
"package": "./package.sh",
|
|
22
|
-
"dist-clean": "rm -rf dist",
|
|
23
|
-
"package:js": "./package.sh"
|
|
24
|
-
},
|
|
25
15
|
"repository": {
|
|
26
16
|
"type": "git",
|
|
27
17
|
"url": "git://github.com/open-constructs/cdk-terrain.git",
|
|
@@ -39,17 +29,29 @@
|
|
|
39
29
|
],
|
|
40
30
|
"license": "MPL-2.0",
|
|
41
31
|
"dependencies": {
|
|
42
|
-
"@cdktn/commons": "0.23.2",
|
|
43
|
-
"@cdktn/provider-schema": "0.23.2",
|
|
44
32
|
"codemaker": "1.128.0",
|
|
33
|
+
"constructs": "10.6.0",
|
|
45
34
|
"fs-extra": "8.1.0",
|
|
46
35
|
"glob": "10.5.0",
|
|
47
|
-
"jsii": "5.9.
|
|
48
|
-
"jsii-pacmak": "1.128.0"
|
|
36
|
+
"jsii": "~5.9.0",
|
|
37
|
+
"jsii-pacmak": "1.128.0",
|
|
38
|
+
"@cdktn/commons": "0.23.4",
|
|
39
|
+
"@cdktn/provider-schema": "0.23.4",
|
|
40
|
+
"cdktn": "0.23.4"
|
|
49
41
|
},
|
|
50
42
|
"devDependencies": {
|
|
51
43
|
"@types/fs-extra": "8.1.5",
|
|
52
44
|
"@types/node": "20.19.37",
|
|
53
|
-
"typescript": "5.
|
|
45
|
+
"typescript": "^5.0.0"
|
|
46
|
+
},
|
|
47
|
+
"scripts": {
|
|
48
|
+
"build": "tsc",
|
|
49
|
+
"postbuild": "node ./build/__tests__/edge-provider-schema/cli.js ./edge-provider-bindings",
|
|
50
|
+
"watch": "tsc -w",
|
|
51
|
+
"watch-preserve-output": "tsc -w --preserveWatchOutput",
|
|
52
|
+
"test:update": "jest -u",
|
|
53
|
+
"package": "./package.sh",
|
|
54
|
+
"dist-clean": "rm -rf dist",
|
|
55
|
+
"package:js": "./package.sh"
|
|
54
56
|
}
|
|
55
|
-
}
|
|
57
|
+
}
|