@cdktn/provider-generator 0.24.0-pre.87 → 0.24.0-pre.89

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.
Files changed (66) hide show
  1. package/build/__tests__/edge-provider-schema/builder.d.ts +9 -3
  2. package/build/__tests__/edge-provider-schema/builder.js +6 -3
  3. package/build/__tests__/edge-provider-schema/index.js +119 -1
  4. package/build/__tests__/provider.test.js +4 -1
  5. package/build/get/__tests__/generator/ephemeral-resources.test.d.ts +2 -0
  6. package/build/get/__tests__/generator/ephemeral-resources.test.js +49 -0
  7. package/build/get/__tests__/generator/provider-functions.test.d.ts +2 -0
  8. package/build/get/__tests__/generator/provider-functions.test.js +176 -0
  9. package/build/get/__tests__/generator/provider.test.js +9 -1
  10. package/build/get/__tests__/generator/write-only.test.d.ts +2 -0
  11. package/build/get/__tests__/generator/write-only.test.js +65 -0
  12. package/build/get/__tests__/target-versions.test.d.ts +2 -0
  13. package/build/get/__tests__/target-versions.test.js +171 -0
  14. package/build/get/constructs-maker.d.ts +8 -1
  15. package/build/get/constructs-maker.js +13 -4
  16. package/build/get/generator/emitter/attributes-emitter.d.ts +12 -2
  17. package/build/get/generator/emitter/attributes-emitter.js +47 -5
  18. package/build/get/generator/emitter/index.d.ts +1 -0
  19. package/build/get/generator/emitter/index.js +2 -1
  20. package/build/get/generator/emitter/provider-functions-emitter.d.ts +11 -0
  21. package/build/get/generator/emitter/provider-functions-emitter.js +94 -0
  22. package/build/get/generator/emitter/resource-emitter.d.ts +5 -1
  23. package/build/get/generator/emitter/resource-emitter.js +83 -7
  24. package/build/get/generator/models/attribute-model.d.ts +2 -0
  25. package/build/get/generator/models/attribute-model.js +2 -1
  26. package/build/get/generator/models/index.d.ts +1 -0
  27. package/build/get/generator/models/index.js +2 -1
  28. package/build/get/generator/models/provider-function-model.d.ts +102 -0
  29. package/build/get/generator/models/provider-function-model.js +667 -0
  30. package/build/get/generator/models/resource-model.d.ts +3 -0
  31. package/build/get/generator/models/resource-model.js +13 -4
  32. package/build/get/generator/models/struct.d.ts +2 -0
  33. package/build/get/generator/models/struct.js +6 -2
  34. package/build/get/generator/provider-generator.d.ts +2 -0
  35. package/build/get/generator/provider-generator.js +31 -3
  36. package/build/get/generator/resource-parser.js +3 -1
  37. package/package.json +5 -5
  38. package/src/__tests__/__snapshots__/edge-provider-schema.test.ts.snap +4 -0
  39. package/src/__tests__/edge-provider-schema/builder.ts +17 -1
  40. package/src/__tests__/edge-provider-schema/index.ts +124 -1
  41. package/src/__tests__/provider.test.ts +3 -0
  42. package/src/get/__tests__/generator/__snapshots__/ephemeral-resources.test.ts.snap +524 -0
  43. package/src/get/__tests__/generator/__snapshots__/provider-functions.test.ts.snap +444 -0
  44. package/src/get/__tests__/generator/__snapshots__/write-only.test.ts.snap +262 -0
  45. package/src/get/__tests__/generator/ephemeral-resources.test.ts +46 -0
  46. package/src/get/__tests__/generator/fixtures/ephemeral-resources.test.fixture.json +160 -0
  47. package/src/get/__tests__/generator/fixtures/provider-functions-collision.test.fixture.json +31 -0
  48. package/src/get/__tests__/generator/fixtures/provider-functions-synthetic.test.fixture.json +192 -0
  49. package/src/get/__tests__/generator/fixtures/provider-functions.test.fixture.json +170 -0
  50. package/src/get/__tests__/generator/fixtures/write-only.test.fixture.json +58 -0
  51. package/src/get/__tests__/generator/provider-functions.test.ts +262 -0
  52. package/src/get/__tests__/generator/provider.test.ts +8 -0
  53. package/src/get/__tests__/generator/write-only.test.ts +71 -0
  54. package/src/get/__tests__/target-versions.test.ts +206 -0
  55. package/src/get/constructs-maker.ts +43 -3
  56. package/src/get/generator/emitter/attributes-emitter.ts +61 -6
  57. package/src/get/generator/emitter/index.ts +1 -0
  58. package/src/get/generator/emitter/provider-functions-emitter.ts +117 -0
  59. package/src/get/generator/emitter/resource-emitter.ts +110 -6
  60. package/src/get/generator/models/attribute-model.ts +3 -0
  61. package/src/get/generator/models/index.ts +1 -0
  62. package/src/get/generator/models/provider-function-model.ts +872 -0
  63. package/src/get/generator/models/resource-model.ts +25 -3
  64. package/src/get/generator/models/struct.ts +9 -1
  65. package/src/get/generator/provider-generator.ts +70 -4
  66. package/src/get/generator/resource-parser.ts +2 -0
@@ -2,6 +2,7 @@ import { FQPN, ProviderName } from "@cdktn/provider-schema";
2
2
  import { AttributeModel } from "./attribute-model";
3
3
  import { Struct, ConfigStruct } from "./struct";
4
4
  import { Schema } from "@cdktn/commons";
5
+ import { ProviderFunctionsModel } from "./provider-function-model";
5
6
  export declare const STRUCT_SHARDING_THRESHOLD = 400;
6
7
  interface ResourceModelOptions {
7
8
  terraformType: string;
@@ -28,6 +29,7 @@ export declare class ResourceModel {
28
29
  providerVersion?: string;
29
30
  terraformProviderSource?: string;
30
31
  terraformProviderName: string;
32
+ providerFunctionsModel?: ProviderFunctionsModel;
31
33
  fileName: string;
32
34
  attributes: AttributeModel[];
33
35
  schema: Schema;
@@ -48,6 +50,7 @@ export declare class ResourceModel {
48
50
  get linkToDocs(): string;
49
51
  get isProvider(): boolean;
50
52
  get isDataSource(): boolean;
53
+ get isEphemeralResource(): boolean;
51
54
  get parentClassName(): string;
52
55
  get terraformResourceType(): string;
53
56
  get terraformDocName(): string;
@@ -42,7 +42,7 @@ class ResourceModel {
42
42
  return [this.configStruct, ...this._structs];
43
43
  }
44
44
  get configStruct() {
45
- return new struct_1.ConfigStruct(this.configStructName, this.attributes);
45
+ return new struct_1.ConfigStruct(this.configStructName, this.attributes, this.isEphemeralResource ? "TerraformEphemeralMetaArguments" : undefined);
46
46
  }
47
47
  get synthesizableAttributes() {
48
48
  return this.configStruct.assignableAttributes;
@@ -61,6 +61,8 @@ class ResourceModel {
61
61
  return base;
62
62
  if (this.isDataSource)
63
63
  return `${base}/data-sources/${this.terraformDocName}`;
64
+ if (this.isEphemeralResource)
65
+ return `${base}/ephemeral-resources/${this.terraformDocName}`;
64
66
  return `${base}/resources/${this.terraformDocName}`;
65
67
  }
66
68
  get isProvider() {
@@ -69,19 +71,26 @@ class ResourceModel {
69
71
  get isDataSource() {
70
72
  return this.terraformSchemaType === "data_source";
71
73
  }
74
+ get isEphemeralResource() {
75
+ return this.terraformSchemaType === "ephemeral_resource";
76
+ }
72
77
  get parentClassName() {
73
78
  return this.isProvider
74
79
  ? "TerraformProvider"
75
80
  : this.isDataSource
76
81
  ? "TerraformDataSource"
77
- : "TerraformResource";
82
+ : this.isEphemeralResource
83
+ ? "TerraformEphemeralResource"
84
+ : "TerraformResource";
78
85
  }
79
86
  get terraformResourceType() {
80
87
  return this.isProvider
81
88
  ? this.terraformProviderName
82
89
  : this.isDataSource
83
90
  ? this.terraformType.replace(/^data_/, "")
84
- : this.terraformType;
91
+ : this.isEphemeralResource
92
+ ? this.terraformType.replace(/^ephemeral_/, "")
93
+ : this.terraformType;
85
94
  }
86
95
  get terraformDocName() {
87
96
  return (0, codemaker_1.toSnakeCase)(this.terraformResourceType.replace(new RegExp(`^${this.provider}_`, "i"), ""));
@@ -103,4 +112,4 @@ class ResourceModel {
103
112
  }
104
113
  }
105
114
  exports.ResourceModel = ResourceModel;
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2V0L2dlbmVyYXRvci9tb2RlbHMvcmVzb3VyY2UtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx5Q0FBd0M7QUFDeEMsZ0RBQXdCO0FBQ3hCLDREQUF1RTtBQUV2RSxxQ0FBZ0Q7QUFHaEQsNkNBQTZDO0FBQzdDLHdEQUF3RDtBQUN4RCwyQ0FBMkM7QUFDOUIsUUFBQSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7QUFpQjdDLE1BQWEsYUFBYTtJQXlCeEIsWUFBWSxPQUE2QjtRQUZsQyw0QkFBdUIsR0FBNEMsRUFBRSxDQUFDO1FBRzNFLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUEsMkJBQVMsRUFBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzdDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFP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QUksTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUNyQyxFQUFFLENBQ0gsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFXLGlCQUFpQjtRQUMxQixPQUFPLEdBQUcsY0FBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDMUQsQ0FBQztJQUVELElBQVcsaUJBQWlCO1FBQzFCLE9BQU8sY0FBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELElBQVcsbUJBQW1CO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU8sWUFBWSxDQUFDLE1BQWM7UUFDakMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0NBQ0Y7QUFuSUQsc0NBbUlDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IHRvU25ha2VDYXNlIH0gZnJvbSBcImNvZGVtYWtlclwiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IEZRUE4sIHBhcnNlRlFQTiwgUHJvdmlkZXJOYW1lIH0gZnJvbSBcIkBjZGt0bi9wcm92aWRlci1zY2hlbWFcIjtcbmltcG9ydCB7IEF0dHJpYnV0ZU1vZGVsIH0gZnJvbSBcIi4vYXR0cmlidXRlLW1vZGVsXCI7XG5pbXBvcnQgeyBTdHJ1Y3QsIENvbmZpZ1N0cnVjdCB9IGZyb20gXCIuL3N0cnVjdFwiO1xuaW1wb3J0IHsgU2NoZW1hIH0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5cbi8vIExpbWl0IGlzIDEyMDAgdG8gcHJldmVudCBzdGFjayBzaXplIGVycm9yLlxuLy8gQ291bGQgaW5jcmVhc2Ugbm93IHRoYXQgY2FsY3VsYXRpb24gaXMgbW9yZSBhY2N1cmF0ZTtcbi8vIGhvd2V2ZXIsIHByb2JhYmx5IGJldHRlciB0byBoYXZlIHNtYWxsZXJcbmV4cG9ydCBjb25zdCBTVFJVQ1RfU0hBUkRJTkdfVEhSRVNIT0xEID0gNDAwO1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VNb2RlbE9wdGlvbnMge1xuICB0ZXJyYWZvcm1UeXBlOiBzdHJpbmc7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBiYXNlTmFtZTogc3RyaW5nO1xuICBmaWxlTmFtZTogc3RyaW5nO1xuICBmaWxlUGF0aDogc3RyaW5nO1xuICBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVNb2RlbFtdO1xuICBzdHJ1Y3RzOiBTdHJ1Y3RbXTtcbiAgZnFwbjogRlFQTjtcbiAgc2NoZW1hOiBTY2hlbWE7XG4gIHRlcnJhZm9ybVNjaGVtYVR5cGU6IHN0cmluZztcbiAgY29uZmlnU3RydWN0TmFtZTogc3RyaW5nO1xufVxuXG50eXBlIERlZmluaXRpb25QYXRoID0gc3RyaW5nO1xuZXhwb3J0IGNsYXNzIFJlc291cmNlTW9kZWwge1xuICBwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBmaWxlUGF0aDogc3RyaW5nO1xuICBwdWJsaWMgdGVycmFmb3JtVHlwZTogc3RyaW5nO1xuICBwdWJsaWMgYmFzZU5hbWU6IHN0cmluZztcbiAgcHVibGljIHByb3ZpZGVyOiBQcm92aWRlck5hbWU7XG4gIHB1YmxpYyBmcXBuOiBGUVBOO1xuICBwdWJsaWMgcHJvdmlkZXJWZXJzaW9uQ29uc3RyYWludD86IHN0cmluZztcbiAgcHVibGljIHByb3ZpZGVyVmVyc2lvbj86IHN0cmluZztcbiAgcHVibGljIHRlcnJhZm9ybVByb3ZpZGVyU291cmNlPzogc3RyaW5nO1xuICAvKlxuICAgKiB1c3VhbGx5IHNhbWUgYXMgcHJvdmlkZXIsIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBpZiB1c2VyIHBpY2tzIGEgZGlmZmVyZW50IG5hbWVcbiAgICogdG8gYmUgYWJsZSB0byB1c2UgdHdvIHByb3ZpZGVycyB3aXRoIHRoZSBzYW1lIG5hbWVcbiAgICovXG4gIHB1YmxpYyB0ZXJyYWZvcm1Qcm92aWRlck5hbWU6IHN0cmluZztcbiAgcHVibGljIGZpbGVOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVNb2RlbFtdO1xuICBwdWJsaWMgc2NoZW1hOiBTY2hlbWE7XG4gIHByaXZhdGUgX3N0cnVjdHM6IFN0cnVjdFtdO1xuICBwcml2YXRlIGRlcGVuZGVuY2llczogc3RyaW5nW107XG4gIHByaXZhdGUgdGVycmFmb3JtU2NoZW1hVHlwZTogc3RyaW5nO1xuICBwcml2YXRlIGNvbmZpZ1N0cnVjdE5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHN0cnVjdHNSZXF1aXJlU2hhcmRpbmc6IGJvb2xlYW47XG4gIHB1YmxpYyByZWN1cnNpdmVBdHRyaWJ1dGVQYXRoczogeyBbdXNhZ2VQYXRoOiBzdHJpbmddOiBEZWZpbml0aW9uUGF0aCB9ID0ge307XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogUmVzb3VyY2VNb2RlbE9wdGlvbnMpIHtcbiAgICB0aGlzLmNsYXNzTmFtZSA9IG9wdGlvbnMuY2xhc3NOYW1lO1xuICAgIHRoaXMuZmlsZVBhdGggPSBvcHRpb25zLmZpbGVQYXRoO1xuICAgIHRoaXMudGVycmFmb3JtVHlwZSA9IG9wdGlvbnMudGVycmFmb3JtVHlwZTtcbiAgICB0aGlzLmJhc2VOYW1lID0gb3B0aW9ucy5iYXNlTmFtZTtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBvcHRpb25zLmF0dHJpYnV0ZXM7XG4gICAgdGhpcy5zY2hlbWEgPSBvcHRpb25zLnNjaGVtYTtcbiAgICB0aGlzLmZxcG4gPSBvcHRpb25zLmZxcG47XG4gICAgdGhpcy5wcm92aWRlciA9IHBhcnNlRlFQTihvcHRpb25zLmZxcG4pLm5hbWU7XG4gICAgdGhpcy50ZXJyYWZvcm1Qcm92aWRlck5hbWUgPSB0aGlzLnByb3ZpZGVyO1xuICAgIHRoaXMuZmlsZU5hbWUgPSBvcHRpb25zLmZpbGVOYW1lO1xuICAgIHRoaXMuX3N0cnVjdHMgPSBvcHRpb25zLnN0cnVjdHM7XG4gICAgdGhpcy50ZXJyYWZvcm1TY2hlbWFUeXBlID0gb3B0aW9ucy50ZXJyYWZvcm1TY2hlbWFUeXBlO1xuICAgIHRoaXMuY29uZmlnU3RydWN0TmFtZSA9IG9wdGlvbnMuY29uZmlnU3RydWN0TmFtZTtcbiAgICB0aGlzLmRlcGVuZGVuY2llcyA9IFtcbiAgICAgIGBpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztgLFxuICAgICAgYGltcG9ydCAqIGFzIGNka3RuIGZyb20gJ2Nka3RuJztgLFxuICAgIF07XG5cbiAgICB0aGlzLnN0cnVjdHNSZXF1aXJlU2hhcmRpbmcgPVxuICAgICAgdGhpcy5fc3RydWN0cy5yZWR1Y2UoKHBhcnRpYWxTdW0sIHMpID0+IHBhcnRpYWxTdW0gKyBzLmV4cG9ydENvdW50LCAwKSA+XG4gICAgICBTVFJVQ1RfU0hBUkRJTkdfVEhSRVNIT0xEO1xuICB9XG5cbiAgcHVibGljIGdldCBzdHJ1Y3RzKCk6IFN0cnVjdFtdIHtcbiAgICByZXR1cm4gW3RoaXMuY29uZmlnU3RydWN0LCAuLi50aGlzLl9zdHJ1Y3RzXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29uZmlnU3RydWN0KCkge1xuICAgIHJldHVybiBuZXcgQ29uZmlnU3RydWN0KHRoaXMuY29uZmlnU3RydWN0TmFtZSwgdGhpcy5hdHRyaWJ1dGVzKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3ludGhlc2l6YWJsZUF0dHJpYnV0ZXMoKTogQXR0cmlidXRlTW9kZWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU3RydWN0LmFzc2lnbmFibGVBdHRyaWJ1dGVzO1xuICB9XG5cbiAgcHVibGljIGdldCBpbXBvcnRTdGF0ZW1lbnRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5kZXBlbmRlbmNpZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNjaGVtYUFzSnNvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVzY2FwZVNjaGVtYShKU09OLnN0cmluZ2lmeSh0aGlzLnNjaGVtYSwgdW5kZWZpbmVkLCAyKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxpbmtUb0RvY3MoKTogc3RyaW5nIHtcbiAgICBjb25zdCB7IGhvc3RuYW1lLCBuYW1lc3BhY2UsIG5hbWUgfSA9IHBhcnNlRlFQTih0aGlzLmZxcG4pO1xuICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLnByb3ZpZGVyVmVyc2lvbiB8fCBcImxhdGVzdFwiO1xuICAgIGNvbnN0IGJhc2UgPSBgaHR0cHM6Ly8ke2hvc3RuYW1lfS9wcm92aWRlcnMvJHtuYW1lc3BhY2V9LyR7bmFtZX0vJHt2ZXJzaW9ufS9kb2NzYDtcbiAgICBpZiAodGhpcy5pc1Byb3ZpZGVyKSByZXR1cm4gYmFzZTtcbiAgICBpZiAodGhpcy5pc0RhdGFTb3VyY2UpXG4gICAgICByZXR1cm4gYCR7YmFzZX0vZGF0YS1zb3VyY2VzLyR7dGhpcy50ZXJyYWZvcm1Eb2NOYW1lfWA7XG4gICAgcmV0dXJuIGAke2Jhc2V9L3Jlc291cmNlcy8ke3RoaXMudGVycmFmb3JtRG9jTmFtZX1gO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1Byb3ZpZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVNjaGVtYVR5cGUgPT09IFwicHJvdmlkZXJcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNEYXRhU291cmNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVNjaGVtYVR5cGUgPT09IFwiZGF0YV9zb3VyY2VcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGFyZW50Q2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNQcm92aWRlclxuICAgICAgPyBcIlRlcnJhZm9ybVByb3ZpZGVyXCJcbiAgICAgIDogdGhpcy5pc0RhdGFTb3VyY2VcbiAgICAgICAgPyBcIlRlcnJhZm9ybURhdGFTb3VyY2VcIlxuICAgICAgICA6IFwiVGVycmFmb3JtUmVzb3VyY2VcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGVycmFmb3JtUmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNQcm92aWRlclxuICAgICAgPyB0aGlzLnRlcnJhZm9ybVByb3ZpZGVyTmFtZVxuICAgICAgOiB0aGlzLmlzRGF0YVNvdXJjZVxuICAgICAgICA/IHRoaXMudGVycmFmb3JtVHlwZS5yZXBsYWNlKC9eZGF0YV8vLCBcIlwiKVxuICAgICAgICA6IHRoaXMudGVycmFmb3JtVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGVycmFmb3JtRG9jTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0b1NuYWtlQ2FzZShcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlLnJlcGxhY2UoXG4gICAgICAgIG5ldyBSZWdFeHAoYF4ke3RoaXMucHJvdmlkZXJ9X2AsIFwiaVwiKSxcbiAgICAgICAgXCJcIixcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVmZXJlbmNlZFR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWdTdHJ1Y3QucmVmZXJlbmNlZFR5cGVzO1xuICB9XG5cbiAgcHVibGljIGdldCBzdHJ1Y3RzRm9sZGVyTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtwYXRoLmJhc2VuYW1lKHRoaXMuZmlsZU5hbWUsIFwiLnRzXCIpfS1zdHJ1Y3RzYDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RydWN0c0ZvbGRlclBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKHRoaXMubmFtZXNwYWNlRm9sZGVyUGF0aCwgdGhpcy5zdHJ1Y3RzRm9sZGVyTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5hbWVzcGFjZUZvbGRlclBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWxlUGF0aC5zcGxpdChcIi9cIikuc2xpY2UoMCwgLTEpLmpvaW4oXCIvXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBlc2NhcGVTY2hlbWEoc2NoZW1hOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzY2hlbWEucmVwbGFjZSgvKFxcKlxcLykvZ2ksIGAqXFxcXC9gKTtcbiAgfVxufVxuIl19
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2V0L2dlbmVyYXRvci9tb2RlbHMvcmVzb3VyY2UtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx5Q0FBd0M7QUFDeEMsZ0RBQXdCO0FBQ3hCLDREQUF1RTtBQUV2RSxxQ0FBZ0Q7QUFJaEQsNkNBQTZDO0FBQzdDLHdEQUF3RDtBQUN4RCwyQ0FBMkM7QUFDOUIsUUFBQSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7QUFpQjdDLE1BQWEsYUFBYTtJQWdDeEIsWUFBWSxPQUE2QjtRQUZsQyw0QkFBdUIsR0FBNEMsRUFBRSxDQUFDO1FBRzNFLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUEsMkJBQVMsRUFBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzdDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFP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RU8sWUFBWSxDQUFDLE1BQWM7UUFDakMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0NBQ0Y7QUF4SkQsc0NBd0pDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IHRvU25ha2VDYXNlIH0gZnJvbSBcImNvZGVtYWtlclwiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IEZRUE4sIHBhcnNlRlFQTiwgUHJvdmlkZXJOYW1lIH0gZnJvbSBcIkBjZGt0bi9wcm92aWRlci1zY2hlbWFcIjtcbmltcG9ydCB7IEF0dHJpYnV0ZU1vZGVsIH0gZnJvbSBcIi4vYXR0cmlidXRlLW1vZGVsXCI7XG5pbXBvcnQgeyBTdHJ1Y3QsIENvbmZpZ1N0cnVjdCB9IGZyb20gXCIuL3N0cnVjdFwiO1xuaW1wb3J0IHsgU2NoZW1hIH0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBQcm92aWRlckZ1bmN0aW9uc01vZGVsIH0gZnJvbSBcIi4vcHJvdmlkZXItZnVuY3Rpb24tbW9kZWxcIjtcblxuLy8gTGltaXQgaXMgMTIwMCB0byBwcmV2ZW50IHN0YWNrIHNpemUgZXJyb3IuXG4vLyBDb3VsZCBpbmNyZWFzZSBub3cgdGhhdCBjYWxjdWxhdGlvbiBpcyBtb3JlIGFjY3VyYXRlO1xuLy8gaG93ZXZlciwgcHJvYmFibHkgYmV0dGVyIHRvIGhhdmUgc21hbGxlclxuZXhwb3J0IGNvbnN0IFNUUlVDVF9TSEFSRElOR19USFJFU0hPTEQgPSA0MDA7XG5cbmludGVyZmFjZSBSZXNvdXJjZU1vZGVsT3B0aW9ucyB7XG4gIHRlcnJhZm9ybVR5cGU6IHN0cmluZztcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIGJhc2VOYW1lOiBzdHJpbmc7XG4gIGZpbGVOYW1lOiBzdHJpbmc7XG4gIGZpbGVQYXRoOiBzdHJpbmc7XG4gIGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZU1vZGVsW107XG4gIHN0cnVjdHM6IFN0cnVjdFtdO1xuICBmcXBuOiBGUVBOO1xuICBzY2hlbWE6IFNjaGVtYTtcbiAgdGVycmFmb3JtU2NoZW1hVHlwZTogc3RyaW5nO1xuICBjb25maWdTdHJ1Y3ROYW1lOiBzdHJpbmc7XG59XG5cbnR5cGUgRGVmaW5pdGlvblBhdGggPSBzdHJpbmc7XG5leHBvcnQgY2xhc3MgUmVzb3VyY2VNb2RlbCB7XG4gIHB1YmxpYyBjbGFzc05hbWU6IHN0cmluZztcbiAgcHVibGljIGZpbGVQYXRoOiBzdHJpbmc7XG4gIHB1YmxpYyB0ZXJyYWZvcm1UeXBlOiBzdHJpbmc7XG4gIHB1YmxpYyBiYXNlTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcHJvdmlkZXI6IFByb3ZpZGVyTmFtZTtcbiAgcHVibGljIGZxcG46IEZRUE47XG4gIHB1YmxpYyBwcm92aWRlclZlcnNpb25Db25zdHJhaW50Pzogc3RyaW5nO1xuICBwdWJsaWMgcHJvdmlkZXJWZXJzaW9uPzogc3RyaW5nO1xuICBwdWJsaWMgdGVycmFmb3JtUHJvdmlkZXJTb3VyY2U/OiBzdHJpbmc7XG4gIC8qXG4gICAqIHVzdWFsbHkgc2FtZSBhcyBwcm92aWRlciwgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGlmIHVzZXIgcGlja3MgYSBkaWZmZXJlbnQgbmFtZVxuICAgKiB0byBiZSBhYmxlIHRvIHVzZSB0d28gcHJvdmlkZXJzIHdpdGggdGhlIHNhbWUgbmFtZVxuICAgKi9cbiAgcHVibGljIHRlcnJhZm9ybVByb3ZpZGVyTmFtZTogc3RyaW5nO1xuICAvKlxuICAgKiBPbmx5IHNldCAoYnkgcHJvdmlkZXItZ2VuZXJhdG9yLnRzKSB3aGVuIGlzUHJvdmlkZXIgaXMgdHJ1ZSBhbmQgdGhlXG4gICAqIHByb3ZpZGVyIHNjaGVtYSBkZWNsYXJlcyBwcm92aWRlci1kZWZpbmVkIGZ1bmN0aW9ucyAtIGRyaXZlcyB3aGV0aGVyXG4gICAqIFJlc291cmNlRW1pdHRlciBlbWl0cyB0aGUgbWVtb2l6ZWQgYGZ1bmN0aW9uc2AgZ2V0dGVyIGFuZCBpdHNcbiAgICogY3Jvc3MtZGlyZWN0b3J5IGltcG9ydCBvZiB0aGUgc2libGluZyBwcm92aWRlci1mdW5jdGlvbnMvaW5kZXgudHMgZmlsZS5cbiAgICovXG4gIHB1YmxpYyBwcm92aWRlckZ1bmN0aW9uc01vZGVsPzogUHJvdmlkZXJGdW5jdGlvbnNNb2RlbDtcbiAgcHVibGljIGZpbGVOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVNb2RlbFtdO1xuICBwdWJsaWMgc2NoZW1hOiBTY2hlbWE7XG4gIHByaXZhdGUgX3N0cnVjdHM6IFN0cnVjdFtdO1xuICBwcml2YXRlIGRlcGVuZGVuY2llczogc3RyaW5nW107XG4gIHByaXZhdGUgdGVycmFmb3JtU2NoZW1hVHlwZTogc3RyaW5nO1xuICBwcml2YXRlIGNvbmZpZ1N0cnVjdE5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHN0cnVjdHNSZXF1aXJlU2hhcmRpbmc6IGJvb2xlYW47XG4gIHB1YmxpYyByZWN1cnNpdmVBdHRyaWJ1dGVQYXRoczogeyBbdXNhZ2VQYXRoOiBzdHJpbmddOiBEZWZpbml0aW9uUGF0aCB9ID0ge307XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogUmVzb3VyY2VNb2RlbE9wdGlvbnMpIHtcbiAgICB0aGlzLmNsYXNzTmFtZSA9IG9wdGlvbnMuY2xhc3NOYW1lO1xuICAgIHRoaXMuZmlsZVBhdGggPSBvcHRpb25zLmZpbGVQYXRoO1xuICAgIHRoaXMudGVycmFmb3JtVHlwZSA9IG9wdGlvbnMudGVycmFmb3JtVHlwZTtcbiAgICB0aGlzLmJhc2VOYW1lID0gb3B0aW9ucy5iYXNlTmFtZTtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBvcHRpb25zLmF0dHJpYnV0ZXM7XG4gICAgdGhpcy5zY2hlbWEgPSBvcHRpb25zLnNjaGVtYTtcbiAgICB0aGlzLmZxcG4gPSBvcHRpb25zLmZxcG47XG4gICAgdGhpcy5wcm92aWRlciA9IHBhcnNlRlFQTihvcHRpb25zLmZxcG4pLm5hbWU7XG4gICAgdGhpcy50ZXJyYWZvcm1Qcm92aWRlck5hbWUgPSB0aGlzLnByb3ZpZGVyO1xuICAgIHRoaXMuZmlsZU5hbWUgPSBvcHRpb25zLmZpbGVOYW1lO1xuICAgIHRoaXMuX3N0cnVjdHMgPSBvcHRpb25zLnN0cnVjdHM7XG4gICAgdGhpcy50ZXJyYWZvcm1TY2hlbWFUeXBlID0gb3B0aW9ucy50ZXJyYWZvcm1TY2hlbWFUeXBlO1xuICAgIHRoaXMuY29uZmlnU3RydWN0TmFtZSA9IG9wdGlvbnMuY29uZmlnU3RydWN0TmFtZTtcbiAgICB0aGlzLmRlcGVuZGVuY2llcyA9IFtcbiAgICAgIGBpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztgLFxuICAgICAgYGltcG9ydCAqIGFzIGNka3RuIGZyb20gJ2Nka3RuJztgLFxuICAgIF07XG5cbiAgICB0aGlzLnN0cnVjdHNSZXF1aXJlU2hhcmRpbmcgPVxuICAgICAgdGhpcy5fc3RydWN0cy5yZWR1Y2UoKHBhcnRpYWxTdW0sIHMpID0+IHBhcnRpYWxTdW0gKyBzLmV4cG9ydENvdW50LCAwKSA+XG4gICAgICBTVFJVQ1RfU0hBUkRJTkdfVEhSRVNIT0xEO1xuICB9XG5cbiAgcHVibGljIGdldCBzdHJ1Y3RzKCk6IFN0cnVjdFtdIHtcbiAgICByZXR1cm4gW3RoaXMuY29uZmlnU3RydWN0LCAuLi50aGlzLl9zdHJ1Y3RzXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29uZmlnU3RydWN0KCkge1xuICAgIHJldHVybiBuZXcgQ29uZmlnU3RydWN0KFxuICAgICAgdGhpcy5jb25maWdTdHJ1Y3ROYW1lLFxuICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgdGhpcy5pc0VwaGVtZXJhbFJlc291cmNlID8gXCJUZXJyYWZvcm1FcGhlbWVyYWxNZXRhQXJndW1lbnRzXCIgOiB1bmRlZmluZWQsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3ludGhlc2l6YWJsZUF0dHJpYnV0ZXMoKTogQXR0cmlidXRlTW9kZWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU3RydWN0LmFzc2lnbmFibGVBdHRyaWJ1dGVzO1xuICB9XG5cbiAgcHVibGljIGdldCBpbXBvcnRTdGF0ZW1lbnRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5kZXBlbmRlbmNpZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNjaGVtYUFzSnNvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVzY2FwZVNjaGVtYShKU09OLnN0cmluZ2lmeSh0aGlzLnNjaGVtYSwgdW5kZWZpbmVkLCAyKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxpbmtUb0RvY3MoKTogc3RyaW5nIHtcbiAgICBjb25zdCB7IGhvc3RuYW1lLCBuYW1lc3BhY2UsIG5hbWUgfSA9IHBhcnNlRlFQTih0aGlzLmZxcG4pO1xuICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLnByb3ZpZGVyVmVyc2lvbiB8fCBcImxhdGVzdFwiO1xuICAgIGNvbnN0IGJhc2UgPSBgaHR0cHM6Ly8ke2hvc3RuYW1lfS9wcm92aWRlcnMvJHtuYW1lc3BhY2V9LyR7bmFtZX0vJHt2ZXJzaW9ufS9kb2NzYDtcbiAgICBpZiAodGhpcy5pc1Byb3ZpZGVyKSByZXR1cm4gYmFzZTtcbiAgICBpZiAodGhpcy5pc0RhdGFTb3VyY2UpXG4gICAgICByZXR1cm4gYCR7YmFzZX0vZGF0YS1zb3VyY2VzLyR7dGhpcy50ZXJyYWZvcm1Eb2NOYW1lfWA7XG4gICAgaWYgKHRoaXMuaXNFcGhlbWVyYWxSZXNvdXJjZSlcbiAgICAgIHJldHVybiBgJHtiYXNlfS9lcGhlbWVyYWwtcmVzb3VyY2VzLyR7dGhpcy50ZXJyYWZvcm1Eb2NOYW1lfWA7XG4gICAgcmV0dXJuIGAke2Jhc2V9L3Jlc291cmNlcy8ke3RoaXMudGVycmFmb3JtRG9jTmFtZX1gO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1Byb3ZpZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVNjaGVtYVR5cGUgPT09IFwicHJvdmlkZXJcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNEYXRhU291cmNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVNjaGVtYVR5cGUgPT09IFwiZGF0YV9zb3VyY2VcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNFcGhlbWVyYWxSZXNvdXJjZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZXJyYWZvcm1TY2hlbWFUeXBlID09PSBcImVwaGVtZXJhbF9yZXNvdXJjZVwiO1xuICB9XG5cbiAgcHVibGljIGdldCBwYXJlbnRDbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc1Byb3ZpZGVyXG4gICAgICA/IFwiVGVycmFmb3JtUHJvdmlkZXJcIlxuICAgICAgOiB0aGlzLmlzRGF0YVNvdXJjZVxuICAgICAgICA/IFwiVGVycmFmb3JtRGF0YVNvdXJjZVwiXG4gICAgICAgIDogdGhpcy5pc0VwaGVtZXJhbFJlc291cmNlXG4gICAgICAgICAgPyBcIlRlcnJhZm9ybUVwaGVtZXJhbFJlc291cmNlXCJcbiAgICAgICAgICA6IFwiVGVycmFmb3JtUmVzb3VyY2VcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGVycmFmb3JtUmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNQcm92aWRlclxuICAgICAgPyB0aGlzLnRlcnJhZm9ybVByb3ZpZGVyTmFtZVxuICAgICAgOiB0aGlzLmlzRGF0YVNvdXJjZVxuICAgICAgICA/IHRoaXMudGVycmFmb3JtVHlwZS5yZXBsYWNlKC9eZGF0YV8vLCBcIlwiKVxuICAgICAgICA6IHRoaXMuaXNFcGhlbWVyYWxSZXNvdXJjZVxuICAgICAgICAgID8gdGhpcy50ZXJyYWZvcm1UeXBlLnJlcGxhY2UoL15lcGhlbWVyYWxfLywgXCJcIilcbiAgICAgICAgICA6IHRoaXMudGVycmFmb3JtVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGVycmFmb3JtRG9jTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0b1NuYWtlQ2FzZShcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlLnJlcGxhY2UoXG4gICAgICAgIG5ldyBSZWdFeHAoYF4ke3RoaXMucHJvdmlkZXJ9X2AsIFwiaVwiKSxcbiAgICAgICAgXCJcIixcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVmZXJlbmNlZFR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWdTdHJ1Y3QucmVmZXJlbmNlZFR5cGVzO1xuICB9XG5cbiAgcHVibGljIGdldCBzdHJ1Y3RzRm9sZGVyTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtwYXRoLmJhc2VuYW1lKHRoaXMuZmlsZU5hbWUsIFwiLnRzXCIpfS1zdHJ1Y3RzYDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RydWN0c0ZvbGRlclBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKHRoaXMubmFtZXNwYWNlRm9sZGVyUGF0aCwgdGhpcy5zdHJ1Y3RzRm9sZGVyTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5hbWVzcGFjZUZvbGRlclBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWxlUGF0aC5zcGxpdChcIi9cIikuc2xpY2UoMCwgLTEpLmpvaW4oXCIvXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBlc2NhcGVTY2hlbWEoc2NoZW1hOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzY2hlbWEucmVwbGFjZSgvKFxcKlxcLykvZ2ksIGAqXFxcXC9gKTtcbiAgfVxufVxuIl19
@@ -26,6 +26,8 @@ export declare class Struct {
26
26
  get exportCount(): number;
27
27
  }
28
28
  export declare class ConfigStruct extends Struct {
29
+ private readonly extendsClass;
30
+ constructor(name: string, attributes: AttributeModel[], extendsClass?: string);
29
31
  get extends(): string;
30
32
  }
31
33
  //# sourceMappingURL=struct.d.ts.map
@@ -82,9 +82,13 @@ class Struct {
82
82
  }
83
83
  exports.Struct = Struct;
84
84
  class ConfigStruct extends Struct {
85
+ constructor(name, attributes, extendsClass = "TerraformMetaArguments") {
86
+ super(name, attributes);
87
+ this.extendsClass = extendsClass;
88
+ }
85
89
  get extends() {
86
- return ` extends cdktn.TerraformMetaArguments`;
90
+ return ` extends cdktn.${this.extendsClass}`;
87
91
  }
88
92
  }
89
93
  exports.ConfigStruct = ConfigStruct;
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvbW9kZWxzL3N0cnVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSx3Q0FBOEM7QUFDOUMsTUFBYSxNQUFNO0lBQ2pCLFlBQ2tCLElBQVksRUFDWixVQUE0QixFQUM1QixVQUFVLEtBQUssRUFDZixjQUFjLEtBQUssRUFDNUIsZUFBZSxLQUFLLEVBQ1gsY0FBc0IsRUFBRTtRQUx4QixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQ1gsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFDdkMsQ0FBQztJQUVKLElBQVcsb0JBQW9CO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsSUFBVyxrQkFBa0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxDQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUNwQixDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FDMUQsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUNkLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDMUQsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLEdBQUcsSUFBQSxvQkFBYSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQ2xELENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxHQUFHLElBQUEsb0JBQWEsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ3JELENBQUM7SUFFRCxJQUFXLG1CQUFtQjtRQUM1QixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksaUJBQWlCLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBVyxlQUFlO1FBQ3hCLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUUzQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzlCLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLDZFQUE2RTtZQUNsSSxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7WUFDL0IsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ3BCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU87UUFDdEIsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLHVCQUF1QjtRQUVuQyxJQUNFLElBQUksQ0FBQyxXQUFXLEtBQUssTUFBTTtZQUMzQixJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUs7WUFDMUIsSUFBSSxDQUFDLFdBQVcsS0FBSyxLQUFLLEVBQzFCLENBQUM7WUFDRCxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsbUJBQW1CO1lBRS9CLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3ZCLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBcUI7WUFDbkMsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRjtBQXpHRCx3QkF5R0M7QUFFRCxNQUFhLFlBQWEsU0FBUSxNQUFNO0lBQ3RDLElBQVcsT0FBTztRQUNoQixPQUFPLHVDQUF1QyxDQUFDO0lBQ2pELENBQUM7Q0FDRjtBQUpELG9DQUlDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IEF0dHJpYnV0ZU1vZGVsIH0gZnJvbSBcIi4vYXR0cmlidXRlLW1vZGVsXCI7XG5pbXBvcnQgeyBkb3duY2FzZUZpcnN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxcIjtcbmV4cG9ydCBjbGFzcyBTdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVNb2RlbFtdLFxuICAgIHB1YmxpYyByZWFkb25seSBpc0NsYXNzID0gZmFsc2UsXG4gICAgcHVibGljIHJlYWRvbmx5IGlzQW5vbnltb3VzID0gZmFsc2UsXG4gICAgcHVibGljIGlzU2luZ2xlSXRlbSA9IGZhbHNlLFxuICAgIHB1YmxpYyByZWFkb25seSBuZXN0aW5nTW9kZTogc3RyaW5nID0gXCJcIixcbiAgKSB7fVxuXG4gIHB1YmxpYyBnZXQgYXNzaWduYWJsZUF0dHJpYnV0ZXMoKTogQXR0cmlidXRlTW9kZWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlcy5maWx0ZXIoKGF0dHJpYnV0ZSkgPT4gYXR0cmlidXRlLmlzQXNzaWduYWJsZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG9wdGlvbmFsQXR0cmlidXRlcygpOiBBdHRyaWJ1dGVNb2RlbFtdIHtcbiAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzLmZpbHRlcigoYXR0cmlidXRlKSA9PiBhdHRyaWJ1dGUub3B0aW9uYWwpO1xuICB9XG5cbiAgcHVibGljIGdldCBhbGxPcHRpb25hbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hdHRyaWJ1dGVzLmZpbHRlcihcbiAgICAgICAgKGF0dHJpYnV0ZSkgPT4gIWF0dHJpYnV0ZS5vcHRpb25hbCAmJiAhYXR0cmlidXRlLmNvbXB1dGVkLFxuICAgICAgKS5sZW5ndGggPT0gMFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGF0dHJpYnV0ZVR5cGUoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMubmFtZX0ke3RoaXMuYWxsT3B0aW9uYWwgPyBcIiA9IHt9XCIgOiBcIlwifWA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFzc2lnbmFibGUoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzQ2xhc3MgfHwgdGhpcy5hc3NpZ25hYmxlQXR0cmlidXRlcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHVibGljIGdldCBleHRlbmRzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1hcHBlck5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7ZG93bmNhc2VGaXJzdCh0aGlzLm5hbWUpfVRvVGVycmFmb3JtYDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGNsTWFwcGVyTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtkb3duY2FzZUZpcnN0KHRoaXMubmFtZSl9VG9IY2xUZXJyYWZvcm1gO1xuICB9XG5cbiAgcHVibGljIGdldCBvdXRwdXRSZWZlcmVuY2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMubmFtZX1PdXRwdXRSZWZlcmVuY2VgO1xuICB9XG5cbiAgcHVibGljIGdldCBsaXN0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9TGlzdGA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1hcE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfU1hcGA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1hcExpc3ROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMubmFtZX1NYXBMaXN0YDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGlzdE1hcE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfUxpc3RNYXBgO1xuICB9XG5cbiAgcHVibGljIGdldCBsaXN0TGlzdE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfUxpc3RMaXN0YDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNQcm92aWRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzLnNvbWUoKGF0dCkgPT4gYXR0LmlzUHJvdmlkZXIpO1xuICB9XG5cbiAgcHVibGljIGdldCByZWZlcmVuY2VkVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdGhpcy5hdHRyaWJ1dGVzLmZvckVhY2goKGF0dCkgPT4ge1xuICAgICAgY29uc3QgYXR0UmVmZXJlbmNlcyA9IGF0dC5nZXRSZWZlcmVuY2VkVHlwZXMoZmFsc2UpOyAvLyBUaGlzIG1heSBiZSBhIGNvbmZpZyBzdHJ1Y3QsIGJ1dCBzdGlsbCBuZWVkIHRoZSByZWZlcmVuY2VzIGluIHRoaXMgY29udGV4dFxuICAgICAgaWYgKGF0dFJlZmVyZW5jZXMpIHtcbiAgICAgICAgdHlwZXMucHVzaCguLi5hdHRSZWZlcmVuY2VzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0eXBlcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZXhwb3J0Q291bnQoKTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSAxOyAvLyBzZWxmXG4gICAgY291bnQgKz0gMTsgLy8gdG9UZXJyYWZvcm0gZnVuY3Rpb25cblxuICAgIGlmIChcbiAgICAgIHRoaXMubmVzdGluZ01vZGUgPT09IFwibGlzdFwiIHx8XG4gICAgICB0aGlzLm5lc3RpbmdNb2RlID09PSBcInNldFwiIHx8XG4gICAgICB0aGlzLm5lc3RpbmdNb2RlID09PSBcIm1hcFwiXG4gICAgKSB7XG4gICAgICBjb3VudCArPSAxOyAvLyBvdXRwdXQgcmVmZXJlbmNlXG5cbiAgICAgIGlmICghdGhpcy5pc1NpbmdsZUl0ZW0pIHtcbiAgICAgICAgY291bnQgKz0gMTsgLy8gY29tcGxleCBjb2xsZWN0aW9uXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb25maWdTdHJ1Y3QgZXh0ZW5kcyBTdHJ1Y3Qge1xuICBwdWJsaWMgZ2V0IGV4dGVuZHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCBleHRlbmRzIGNka3RuLlRlcnJhZm9ybU1ldGFBcmd1bWVudHNgO1xuICB9XG59XG4iXX0=
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvbW9kZWxzL3N0cnVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSx3Q0FBOEM7QUFDOUMsTUFBYSxNQUFNO0lBQ2pCLFlBQ2tCLElBQVksRUFDWixVQUE0QixFQUM1QixVQUFVLEtBQUssRUFDZixjQUFjLEtBQUssRUFDNUIsZUFBZSxLQUFLLEVBQ1gsY0FBc0IsRUFBRTtRQUx4QixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQ1gsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFDdkMsQ0FBQztJQUVKLElBQVcsb0JBQW9CO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsSUFBVyxrQkFBa0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxDQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUNwQixDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FDMUQsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUNkLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDMUQsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLEdBQUcsSUFBQSxvQkFBYSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQ2xELENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxHQUFHLElBQUEsb0JBQWEsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ3JELENBQUM7SUFFRCxJQUFXLG1CQUFtQjtRQUM1QixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksaUJBQWlCLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBVyxlQUFlO1FBQ3hCLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUUzQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzlCLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLDZFQUE2RTtZQUNsSSxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7WUFDL0IsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ3BCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU87UUFDdEIsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLHVCQUF1QjtRQUVuQyxJQUNFLElBQUksQ0FBQyxXQUFXLEtBQUssTUFBTTtZQUMzQixJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUs7WUFDMUIsSUFBSSxDQUFDLFdBQVcsS0FBSyxLQUFLLEVBQzFCLENBQUM7WUFDRCxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsbUJBQW1CO1lBRS9CLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3ZCLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBcUI7WUFDbkMsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRjtBQXpHRCx3QkF5R0M7QUFFRCxNQUFhLFlBQWEsU0FBUSxNQUFNO0lBQ3RDLFlBQ0UsSUFBWSxFQUNaLFVBQTRCLEVBQ1gsZUFBdUIsd0JBQXdCO1FBRWhFLEtBQUssQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFGUCxpQkFBWSxHQUFaLFlBQVksQ0FBbUM7SUFHbEUsQ0FBQztJQUVELElBQVcsT0FBTztRQUNoQixPQUFPLGtCQUFrQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0MsQ0FBQztDQUNGO0FBWkQsb0NBWUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHsgQXR0cmlidXRlTW9kZWwgfSBmcm9tIFwiLi9hdHRyaWJ1dGUtbW9kZWxcIjtcbmltcG9ydCB7IGRvd25jYXNlRmlyc3QgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbFwiO1xuZXhwb3J0IGNsYXNzIFN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZU1vZGVsW10sXG4gICAgcHVibGljIHJlYWRvbmx5IGlzQ2xhc3MgPSBmYWxzZSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNBbm9ueW1vdXMgPSBmYWxzZSxcbiAgICBwdWJsaWMgaXNTaW5nbGVJdGVtID0gZmFsc2UsXG4gICAgcHVibGljIHJlYWRvbmx5IG5lc3RpbmdNb2RlOiBzdHJpbmcgPSBcIlwiLFxuICApIHt9XG5cbiAgcHVibGljIGdldCBhc3NpZ25hYmxlQXR0cmlidXRlcygpOiBBdHRyaWJ1dGVNb2RlbFtdIHtcbiAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzLmZpbHRlcigoYXR0cmlidXRlKSA9PiBhdHRyaWJ1dGUuaXNBc3NpZ25hYmxlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb3B0aW9uYWxBdHRyaWJ1dGVzKCk6IEF0dHJpYnV0ZU1vZGVsW10ge1xuICAgIHJldHVybiB0aGlzLmF0dHJpYnV0ZXMuZmlsdGVyKChhdHRyaWJ1dGUpID0+IGF0dHJpYnV0ZS5vcHRpb25hbCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFsbE9wdGlvbmFsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmF0dHJpYnV0ZXMuZmlsdGVyKFxuICAgICAgICAoYXR0cmlidXRlKSA9PiAhYXR0cmlidXRlLm9wdGlvbmFsICYmICFhdHRyaWJ1dGUuY29tcHV0ZWQsXG4gICAgICApLmxlbmd0aCA9PSAwXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXR0cmlidXRlVHlwZSgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSR7dGhpcy5hbGxPcHRpb25hbCA/IFwiID0ge31cIiA6IFwiXCJ9YDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXNzaWduYWJsZSgpIHtcbiAgICByZXR1cm4gIXRoaXMuaXNDbGFzcyB8fCB0aGlzLmFzc2lnbmFibGVBdHRyaWJ1dGVzLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGV4dGVuZHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWFwcGVyTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtkb3duY2FzZUZpcnN0KHRoaXMubmFtZSl9VG9UZXJyYWZvcm1gO1xuICB9XG5cbiAgcHVibGljIGdldCBoY2xNYXBwZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2Rvd25jYXNlRmlyc3QodGhpcy5uYW1lKX1Ub0hjbFRlcnJhZm9ybWA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG91dHB1dFJlZmVyZW5jZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfU91dHB1dFJlZmVyZW5jZWA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxpc3ROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMubmFtZX1MaXN0YDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWFwTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9TWFwYDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWFwTGlzdE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfU1hcExpc3RgO1xuICB9XG5cbiAgcHVibGljIGdldCBsaXN0TWFwTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9TGlzdE1hcGA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxpc3RMaXN0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9TGlzdExpc3RgO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1Byb3ZpZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmF0dHJpYnV0ZXMuc29tZSgoYXR0KSA9PiBhdHQuaXNQcm92aWRlcik7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlZmVyZW5jZWRUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdHlwZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICB0aGlzLmF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0KSA9PiB7XG4gICAgICBjb25zdCBhdHRSZWZlcmVuY2VzID0gYXR0LmdldFJlZmVyZW5jZWRUeXBlcyhmYWxzZSk7IC8vIFRoaXMgbWF5IGJlIGEgY29uZmlnIHN0cnVjdCwgYnV0IHN0aWxsIG5lZWQgdGhlIHJlZmVyZW5jZXMgaW4gdGhpcyBjb250ZXh0XG4gICAgICBpZiAoYXR0UmVmZXJlbmNlcykge1xuICAgICAgICB0eXBlcy5wdXNoKC4uLmF0dFJlZmVyZW5jZXMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHR5cGVzO1xuICB9XG5cbiAgcHVibGljIGdldCBleHBvcnRDb3VudCgpOiBudW1iZXIge1xuICAgIGxldCBjb3VudCA9IDE7IC8vIHNlbGZcbiAgICBjb3VudCArPSAxOyAvLyB0b1RlcnJhZm9ybSBmdW5jdGlvblxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5uZXN0aW5nTW9kZSA9PT0gXCJsaXN0XCIgfHxcbiAgICAgIHRoaXMubmVzdGluZ01vZGUgPT09IFwic2V0XCIgfHxcbiAgICAgIHRoaXMubmVzdGluZ01vZGUgPT09IFwibWFwXCJcbiAgICApIHtcbiAgICAgIGNvdW50ICs9IDE7IC8vIG91dHB1dCByZWZlcmVuY2VcblxuICAgICAgaWYgKCF0aGlzLmlzU2luZ2xlSXRlbSkge1xuICAgICAgICBjb3VudCArPSAxOyAvLyBjb21wbGV4IGNvbGxlY3Rpb25cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY291bnQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbmZpZ1N0cnVjdCBleHRlbmRzIFN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVNb2RlbFtdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXh0ZW5kc0NsYXNzOiBzdHJpbmcgPSBcIlRlcnJhZm9ybU1ldGFBcmd1bWVudHNcIixcbiAgKSB7XG4gICAgc3VwZXIobmFtZSwgYXR0cmlidXRlcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGV4dGVuZHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCBleHRlbmRzIGNka3RuLiR7dGhpcy5leHRlbmRzQ2xhc3N9YDtcbiAgfVxufVxuIl19
@@ -23,6 +23,7 @@ export declare class TerraformProviderGenerator {
23
23
  private resourceParser;
24
24
  private resourceEmitter;
25
25
  private structEmitter;
26
+ private providerFunctionsEmitter;
26
27
  private readonly importExtension;
27
28
  versions: {
28
29
  [fqpn: string]: string | undefined;
@@ -36,6 +37,7 @@ export declare class TerraformProviderGenerator {
36
37
  getClassNameForResource(terraformType: string): string;
37
38
  getNamespaceNameForResource(terraformType: string): string;
38
39
  private emitProvider;
40
+ private emitProviderFunctions;
39
41
  private emitResourceReadme;
40
42
  private emitIndexFile;
41
43
  private emitLazyIndexFile;
@@ -6,6 +6,7 @@ exports.TerraformProviderGenerator = void 0;
6
6
  const codemaker_1 = require("codemaker");
7
7
  const commons_1 = require("@cdktn/commons");
8
8
  const provider_schema_1 = require("@cdktn/provider-schema");
9
+ const models_1 = require("./models");
9
10
  const resource_parser_1 = require("./resource-parser");
10
11
  const emitter_1 = require("./emitter");
11
12
  const isMatching = (target, terraformSchemaName) => {
@@ -69,8 +70,9 @@ class TerraformProviderGenerator {
69
70
  this.versions = {};
70
71
  this.code.indentation = 2;
71
72
  this.importExtension = (_a = options.importExtension) !== null && _a !== void 0 ? _a : "";
72
- this.resourceEmitter = new emitter_1.ResourceEmitter(this.code);
73
+ this.resourceEmitter = new emitter_1.ResourceEmitter(this.code, this.importExtension);
73
74
  this.structEmitter = new emitter_1.StructEmitter(this.code, this.importExtension);
75
+ this.providerFunctionsEmitter = new emitter_1.ProviderFunctionsEmitter(this.code);
74
76
  }
75
77
  getProviderByConstraint(providerConstraint) {
76
78
  return Object.keys(this.schema.provider_schemas || {}).find((fqpn) => isMatching(providerConstraint, fqpn));
@@ -102,7 +104,11 @@ class TerraformProviderGenerator {
102
104
  }
103
105
  const resources = Object.entries(provider.resource_schemas || {}).map(([type, resource]) => this.resourceParser.parse(fqpn, type, resource, "resource", constraint));
104
106
  const dataSources = Object.entries(provider.data_source_schemas || {}).map(([type, resource]) => this.resourceParser.parse(fqpn, `data_${type}`, resource, "data_source", constraint));
105
- return [].concat(...resources, ...dataSources);
107
+ const ephemeralResources = Object.entries(provider.ephemeral_resource_schemas || {}).map(([type, resource]) => this.resourceParser.parse(fqpn, `ephemeral_${type}`, resource, "ephemeral_resource", constraint));
108
+ // CRITICAL: ephemeral resources must be appended AFTER resources and data
109
+ // sources - uniqueClassName dedup is order-dependent and existing
110
+ // prebuilt snapshots must not churn.
111
+ return [].concat(...resources, ...dataSources, ...ephemeralResources);
106
112
  }
107
113
  getClassNameForResource(terraformType) {
108
114
  return this.resourceParser.getClassNameForResource(terraformType);
@@ -134,6 +140,12 @@ class TerraformProviderGenerator {
134
140
  }
135
141
  this.emitResourceReadme(resourceModel);
136
142
  });
143
+ // Built before the provider class is emitted (rather than after, as
144
+ // resources/data sources/ephemeral resources above already are) so that
145
+ // the model can be attached to providerResource and picked up by
146
+ // ResourceEmitter while it still emits the provider class file below -
147
+ // see the engineering brief for why this ordering matters.
148
+ const providerFunctionsModel = (0, models_1.buildProviderFunctionsModel)(name, provider.functions);
137
149
  if (provider.provider) {
138
150
  const providerResource = this.resourceParser.parse(fqpn, `provider`, provider.provider, "provider", constraint);
139
151
  if (constraint) {
@@ -142,12 +154,28 @@ class TerraformProviderGenerator {
142
154
  providerResource.terraformProviderName = constraint.name;
143
155
  }
144
156
  providerResource.providerVersion = providerVersion;
157
+ if (providerFunctionsModel) {
158
+ (0, models_1.assertNoFunctionsGetterCollision)(name, providerResource.attributes.map((att) => att.name));
159
+ providerResource.providerFunctionsModel = providerFunctionsModel;
160
+ }
145
161
  files.push(this.emitResource(providerResource));
146
162
  this.emitResourceReadme(providerResource);
147
163
  }
164
+ if (providerFunctionsModel) {
165
+ files.push(this.emitProviderFunctions(name, providerFunctionsModel));
166
+ }
148
167
  this.emitIndexFile(name, files);
149
168
  this.emitLazyIndexFile(name, files);
150
169
  }
170
+ emitProviderFunctions(provider, model) {
171
+ const filePath = `providers/${provider}/provider-functions/index.ts`;
172
+ this.code.openFile(filePath);
173
+ this.code.line(`// generated from provider function schema`);
174
+ this.code.line();
175
+ this.providerFunctionsEmitter.emit(model);
176
+ this.code.closeFile(filePath);
177
+ return filePath;
178
+ }
151
179
  emitResourceReadme(resource) {
152
180
  const filePath = `${resource.namespaceFolderPath}/README.md`;
153
181
  this.code.openFile(filePath);
@@ -232,4 +260,4 @@ class TerraformProviderGenerator {
232
260
  }
233
261
  }
234
262
  exports.TerraformProviderGenerator = TerraformProviderGenerator;
235
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvcHJvdmlkZXItZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMseUNBQW1EO0FBQ25ELDRDQU93QjtBQUN4Qiw0REFBdUU7QUFFdkUsdURBQW1EO0FBQ25ELHVDQUEyRDtBQWdCM0QsTUFBTSxVQUFVLEdBQUcsQ0FDakIsTUFBNkIsRUFDN0IsbUJBQTJCLEVBQ2xCLEVBQUU7SUFDWCxJQUFJLE1BQU0sQ0FBQyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFbEMsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWhELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssbUJBQW1CLENBQUM7SUFDL0MsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7UUFFakQsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBRUQsMkNBQTJDO1FBQzNDLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sWUFBWSxHQUFHO2dCQUNuQixXQUFXO2dCQUNYLFFBQVEsRUFBRSx1QkFBdUI7Z0JBQ2pDLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixJQUFJLEVBQUUsRUFBRTthQUNULENBQUM7WUFDRixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUss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RSxFQUFFLENBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQixDQUFDO1lBRUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUIsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxjQUFjLENBQUMsUUFBdUI7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakIsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUF0UUQsZ0VBc1FDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IENvZGVNYWtlciwgdG9DYW1lbENhc2UgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQge1xuICBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldCxcbiAgQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICBMQU5HVUFHRVMsXG4gIGxvZ2dlcixcbiAgUHJvdmlkZXJTY2hlbWEsXG4gIFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludCxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBGUVBOLCBwYXJzZUZRUE4sIFByb3ZpZGVyTmFtZSB9IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItc2NoZW1hXCI7XG5pbXBvcnQgeyBSZXNvdXJjZU1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBSZXNvdXJjZVBhcnNlciB9IGZyb20gXCIuL3Jlc291cmNlLXBhcnNlclwiO1xuaW1wb3J0IHsgUmVzb3VyY2VFbWl0dGVyLCBTdHJ1Y3RFbWl0dGVyIH0gZnJvbSBcIi4vZW1pdHRlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBGaWxlIGV4dGVuc2lvbiB0byB3cml0ZSBvbiBlbWl0dGVkIHJlbGF0aXZlIGltcG9ydHMuXG4gICAqIERlZmF1bHRzIHRvIFwiXCIgKENvbW1vbkpTKS5cbiAgICovXG4gIHJlYWRvbmx5IGltcG9ydEV4dGVuc2lvbj86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFByb3ZpZGVyRGF0YSB7XG4gIG5hbWU6IHN0cmluZztcbiAgc291cmNlOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbn1cblxuY29uc3QgaXNNYXRjaGluZyA9IChcbiAgdGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gIHRlcnJhZm9ybVNjaGVtYU5hbWU6IHN0cmluZyxcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAodGFyZ2V0LmlzTW9kdWxlKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgZWxlbWVudHMgPSB0ZXJyYWZvcm1TY2hlbWFOYW1lLnNwbGl0KFwiL1wiKTtcblxuICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHRhcmdldC5zb3VyY2UgPT09IHRlcnJhZm9ybVNjaGVtYU5hbWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgW2hvc3RuYW1lLCBuYW1lc3BhY2UsIHByb3ZpZGVyXSA9IGVsZW1lbnRzO1xuXG4gICAgaWYgKCFob3N0bmFtZSB8fCAhbmFtZXNwYWNlIHx8ICFwcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW4ndCBoYW5kbGUgJHt0ZXJyYWZvcm1TY2hlbWFOYW1lfWApO1xuICAgIH1cblxuICAgIC8vIElmIHRhcmdldC5zb3VyY2UgaXMgc2V0LCB0cnkgdG8gbWF0Y2ggaXRcbiAgICBpZiAodGFyZ2V0LnNvdXJjZSkge1xuICAgICAgY29uc3QgdGFyZ2V0U291cmNlID0ge1xuICAgICAgICAvLyBkZWZhdWx0c1xuICAgICAgICBob3N0bmFtZTogXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW9cIixcbiAgICAgICAgbmFtZXNwYWNlOiBcImhhc2hpY29ycFwiLFxuICAgICAgICBuYW1lOiBcIlwiLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnRzID0gdGFyZ2V0LnNvdXJjZS5zcGxpdChcIi9cIik7XG4gICAgICAvLyBPbmx5IGEgMy1wYXJ0IHNvdXJjZSBleHBsaWNpdGx5IHBpbnMgYSByZWdpc3RyeSBob3N0bmFtZS4gU2hvcnRoYW5kXG4gICAgICAvLyBzb3VyY2VzIChlLmcuIFwiaGFzaGljb3JwL2F3c2NjXCIpIG9taXQgaXQsIHNvIHdlIG11c3Qgbm90IGFzc3VtZSBhXG4gICAgICAvLyBkZWZhdWx0OiBUZXJyYWZvcm0gcmVzb2x2ZXMgdGhlbSB1bmRlciByZWdpc3RyeS50ZXJyYWZvcm0uaW8gd2hpbGVcbiAgICAgIC8vIE9wZW5Ub2Z1IHJlc29sdmVzIHRoZW0gdW5kZXIgcmVnaXN0cnkub3BlbnRvZnUub3JnLiBDb21wYXJpbmcgYWdhaW5zdCBhXG4gICAgICAvLyBoYXJkLWNvZGVkIGRlZmF1bHQgd291bGQgbWFrZSBzY2hlbWEgbG9va3VwIGZhaWwgdW5kZXIgT3BlblRvZnUgZXZlblxuICAgICAgLy8gdGhvdWdoIHRoZSBwcm92aWRlciB3YXMgaW5zdGFsbGVkIGNvcnJlY3RseS5cbiAgICAgIGNvbnN0IGV4cGxpY2l0SG9zdG5hbWUgPSB0YXJnZXRFbGVtZW50cy5sZW5ndGggPT09IDM7XG4gICAgICBzd2l0Y2ggKHRhcmdldEVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6IC8vIG9ubHkgbmFtZSBzZXRcbiAgICAgICAgICB0YXJnZXRTb3VyY2UubmFtZSA9IHRhcmdldEVsZW1lbnRzWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogLy8gbmFtZXNwYWNlIGFuZCBuYW1lIHNldFxuICAgICAgICAgIHRhcmdldFNvdXJjZS5uYW1lc3BhY2UgPSB0YXJnZXRFbGVtZW50c1swXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHRhcmdldFNvdXJjZS5uYW1lID0gdGFyZ2V0RWxlbWVudHNbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOiAvLyBob3N0bmFtZSwgbmFtZXNwYWNlIGFuZCBuYW1lIHNldFxuICAgICAgICAgIHRhcmdldFNvdXJjZS5ob3N0bmFtZSA9IHRhcmdldEVsZW1lbnRzWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgdGFyZ2V0U291cmNlLm5hbWVzcGFjZSA9IHRhcmdldEVsZW1lbnRzWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgdGFyZ2V0U291cmNlLm5hbWUgPSB0YXJnZXRFbGVtZW50c1syXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBjYW4ndCBoYW5kbGUgJHt0YXJnZXQuc291cmNlfS4gRXhwZWN0ZWQgc3RyaW5nIHdpdGggMSwgMiBvciAzIGVsZW1lbnRzIHNlcGFyYXRlZCBieSAnLydgLFxuICAgICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgICghZXhwbGljaXRIb3N0bmFtZSB8fCB0YXJnZXRTb3VyY2UuaG9zdG5hbWUgPT09IGhvc3RuYW1lKSAmJlxuICAgICAgICB0YXJnZXRTb3VyY2UubmFtZXNwYWNlID09PSBuYW1lc3BhY2UgJiZcbiAgICAgICAgdGFyZ2V0U291cmNlLm5hbWUgPT09IHByb3ZpZGVyXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEVsc2UsIHRyeSB0byBtYXRjaCB0YXJnZXQubmFtZSB0byB0aGUgcHJvdmlkZXIgbmFtZVxuXG4gICAgcmV0dXJuIHRhcmdldC5uYW1lID09PSBwcm92aWRlcjtcbiAgfVxufTtcblxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlckNvbnN0cmFpbnRzIHtcbiAgW2Zxbjogc3RyaW5nXTogUHJvdmlkZXJEYXRhO1xufVxuXG5leHBvcnQgY2xhc3MgVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3Ige1xuICBwcml2YXRlIHJlc291cmNlUGFyc2VyID0gbmV3IFJlc291cmNlUGFyc2VyKCk7XG4gIHByaXZhdGUgcmVzb3VyY2VFbWl0dGVyOiBSZXNvdXJjZUVtaXR0ZXI7XG4gIHByaXZhdGUgc3RydWN0RW1pdHRlcjogU3RydWN0RW1pdHRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBpbXBvcnRFeHRlbnNpb246IHN0cmluZztcbiAgcHVibGljIHZlcnNpb25zOiB7IFtmcXBuOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29kZTogQ29kZU1ha2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NoZW1hOiBQcm92aWRlclNjaGVtYSxcbiAgICBvcHRpb25zOiBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvck9wdGlvbnMgPSB7fSxcbiAgKSB7XG4gICAgdGhpcy5jb2RlLmluZGVudGF0aW9uID0gMjtcbiAgICB0aGlzLmltcG9ydEV4dGVuc2lvbiA9IG9wdGlvbnMuaW1wb3J0RXh0ZW5zaW9uID8/IFwiXCI7XG4gICAgdGhpcy5yZXNvdXJjZUVtaXR0ZXIgPSBuZXcgUmVzb3VyY2VFbWl0dGVyKHRoaXMuY29kZSk7XG4gICAgdGhpcy5zdHJ1Y3RFbWl0dGVyID0gbmV3IFN0cnVjdEVtaXR0ZXIodGhpcy5jb2RlLCB0aGlzLmltcG9ydEV4dGVuc2lvbik7XG4gIH1cblxuICBwcml2YXRlIGdldFByb3ZpZGVyQnlDb25zdHJhaW50KFxuICAgIHByb3ZpZGVyQ29uc3RyYWludDogQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICApOiBGUVBOIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5zY2hlbWEucHJvdmlkZXJfc2NoZW1hcyB8fCB7fSkuZmluZCgoZnFwbikgPT5cbiAgICAgIGlzTWF0Y2hpbmcocHJvdmlkZXJDb25zdHJhaW50LCBmcXBuKSxcbiAgICApIGFzIEZRUE4gfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2VuZXJhdGUocHJvdmlkZXJDb25zdHJhaW50OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQpIHtcbiAgICBjb25zdCBmcXBuID0gdGhpcy5nZXRQcm92aWRlckJ5Q29uc3RyYWludChwcm92aWRlckNvbnN0cmFpbnQpO1xuICAgIGlmICghZnFwbikge1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgcHJvdmlkZXIgY29uc3RyYWludCBmb3IgJHtwcm92aWRlckNvbnN0cmFpbnR9IGluIHNjaGVtYTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIDIsXG4gICAgICAgICl9YCxcbiAgICAgICk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZmluZCBwcm92aWRlciB3aXRoIGNvbnN0cmFpbnQgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBwcm92aWRlckNvbnN0cmFpbnQsXG4gICAgICAgICl9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdmlkZXJWZXJzaW9uID0gdGhpcy5zY2hlbWEucHJvdmlkZXJfdmVyc2lvbnM/LltmcXBuXTtcbiAgICB0aGlzLmVtaXRQcm92aWRlcihmcXBuLCBwcm92aWRlclZlcnNpb24sIHByb3ZpZGVyQ29uc3RyYWludCk7XG4gICAgdGhpcy52ZXJzaW9uc1tmcXBuXSA9IHByb3ZpZGVyVmVyc2lvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZW5lcmF0ZUFsbCgpIHtcbiAgICBmb3IgKGNvbnN0IGZxcG4gb2YgT2JqZWN0LmtleXModGhpcy5zY2hlbWEucHJvdmlkZXJfc2NoZW1hcyB8fCB7fSkpIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGUoXG4gICAgICAgIG5ldyBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldChcbiAgICAgICAgICBuZXcgVGVycmFmb3JtUHJvdmlkZXJDb25zdHJhaW50KGZxcG4pLFxuICAgICAgICAgIExBTkdVQUdFU1swXSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHNhdmUob3V0ZGlyOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmNvZGUuc2F2ZShvdXRkaXIpO1xuICB9XG5cbiAgcHVibGljIGJ1aWxkUmVzb3VyY2VNb2RlbHMoXG4gICAgZnFwbjogRlFQTixcbiAgICBjb25zdHJhaW50PzogQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICApOiBSZXNvdXJjZU1vZGVsW10ge1xuICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5zY2hlbWEucHJvdmlkZXJfc2NoZW1hcz8uW2ZxcG5dO1xuICAgIGlmICghcHJvdmlkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuIG5vdCBmaW5kIHByb3ZpZGVyICcke2ZxcG59JyBpbiBzY2hlbWFgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZXMgPSBPYmplY3QuZW50cmllcyhwcm92aWRlci5yZXNvdXJjZV9zY2hlbWFzIHx8IHt9KS5tYXAoXG4gICAgICAoW3R5cGUsIHJlc291cmNlXSkgPT5cbiAgICAgICAgdGhpcy5yZXNvdXJjZVBhcnNlci5wYXJzZShmcXBuLCB0eXBlLCByZXNvdXJjZSwgXCJyZXNvdXJjZVwiLCBjb25zdHJhaW50KSxcbiAgICApO1xuXG4gICAgY29uc3QgZGF0YVNvdXJjZXMgPSBPYmplY3QuZW50cmllcyhwcm92aWRlci5kYXRhX3NvdXJjZV9zY2hlbWFzIHx8IHt9KS5tYXAoXG4gICAgICAoW3R5cGUsIHJlc291cmNlXSkgPT5cbiAgICAgICAgdGhpcy5yZXNvdXJjZVBhcnNlci5wYXJzZShcbiAgICAgICAgICBmcXBuLFxuICAgICAgICAgIGBkYXRhXyR7dHlwZX1gLFxuICAgICAgICAgIHJlc291cmNlLFxuICAgICAgICAgIFwiZGF0YV9zb3VyY2VcIixcbiAgICAgICAgICBjb25zdHJhaW50LFxuICAgICAgICApLFxuICAgICk7XG5cbiAgICByZXR1cm4gKFtdIGFzIFJlc291cmNlTW9kZWxbXSkuY29uY2F0KC4uLnJlc291cmNlcywgLi4uZGF0YVNvdXJjZXMpO1xuICB9XG5cbiAgcHVibGljIGdldENsYXNzTmFtZUZvclJlc291cmNlKHRlcnJhZm9ybVR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlUGFyc2VyLmdldENsYXNzTmFtZUZvclJlc291cmNlKHRlcnJhZm9ybVR5cGUpO1xuICB9XG5cbiAgcHVibGljIGdldE5hbWVzcGFjZU5hbWVGb3JSZXNvdXJjZSh0ZXJyYWZvcm1UeXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVBhcnNlci5nZXROYW1lc3BhY2VOYW1lRm9yUmVzb3VyY2UodGVycmFmb3JtVHlwZSk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRQcm92aWRlcihcbiAgICBmcXBuOiBGUVBOLFxuICAgIHByb3ZpZGVyVmVyc2lvbj86IHN0cmluZyxcbiAgICBjb25zdHJhaW50PzogQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICApIHtcbiAgICBjb25zdCBuYW1lID0gY29uc3RyYWludD8ubmFtZVxuICAgICAgPyAoY29uc3RyYWludC5uYW1lIGFzIFByb3ZpZGVyTmFtZSlcbiAgICAgIDogcGFyc2VGUVBOKGZxcG4pLm5hbWU7XG4gICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLnNjaGVtYS5wcm92aWRlcl9zY2hlbWFzPy5bZnFwbl07XG4gICAgaWYgKCFwcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGZpbmQgcHJvdmlkZXIgJyR7ZnFwbn0nIGluIHNjaGVtYWApO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRoaXMuYnVpbGRSZXNvdXJjZU1vZGVscyhmcXBuLCBjb25zdHJhaW50KS5mb3JFYWNoKChyZXNvdXJjZU1vZGVsKSA9PiB7XG4gICAgICBpZiAoY29uc3RyYWludCkge1xuICAgICAgICByZXNvdXJjZU1vZGVsLnByb3ZpZGVyVmVyc2lvbkNvbnN0cmFpbnQgPSBjb25zdHJhaW50LnZlcnNpb247XG4gICAgICAgIHJlc291cmNlTW9kZWwudGVycmFmb3JtUHJvdmlkZXJTb3VyY2UgPSBjb25zdHJhaW50LnNvdXJjZTtcbiAgICAgIH1cbiAgICAgIHJlc291cmNlTW9kZWwucHJvdmlkZXJWZXJzaW9uID0gcHJvdmlkZXJWZXJzaW9uO1xuXG4gICAgICBpZiAocmVzb3VyY2VNb2RlbC5zdHJ1Y3RzUmVxdWlyZVNoYXJkaW5nKSB7XG4gICAgICAgIGZpbGVzLnB1c2godGhpcy5lbWl0UmVzb3VyY2VXaXRoQ29tcGxleFN0cnVjdChyZXNvdXJjZU1vZGVsKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWxlcy5wdXNoKHRoaXMuZW1pdFJlc291cmNlKHJlc291cmNlTW9kZWwpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW1pdFJlc291cmNlUmVhZG1lKHJlc291cmNlTW9kZWwpO1xuICAgIH0pO1xuXG4gICAgaWYgKHByb3ZpZGVyLnByb3ZpZGVyKSB7XG4gICAgICBjb25zdCBwcm92aWRlclJlc291cmNlID0gdGhpcy5yZXNvdXJjZVBhcnNlci5wYXJzZShcbiAgICAgICAgZnFwbixcbiAgICAgICAgYHByb3ZpZGVyYCxcbiAgICAgICAgcHJvdmlkZXIucHJvdmlkZXIsXG4gICAgICAgIFwicHJvdmlkZXJcIixcbiAgICAgICAgY29uc3RyYWludCxcbiAgICAgICk7XG4gICAgICBpZiAoY29uc3RyYWludCkge1xuICAgICAgICBwcm92aWRlclJlc291cmNlLnByb3ZpZGVyVmVyc2lvbkNvbnN0cmFpbnQgPSBjb25zdHJhaW50LnZlcnNpb247XG4gICAgICAgIHByb3ZpZGVyUmVzb3VyY2UudGVycmFmb3JtUHJvdmlkZXJTb3VyY2UgPSBjb25zdHJhaW50LnNvdXJjZTtcbiAgICAgICAgcHJvdmlkZXJSZXNvdXJjZS50ZXJyYWZvcm1Qcm92aWRlck5hbWUgPSBjb25zdHJhaW50Lm5hbWU7XG4gICAgICB9XG4gICAgICBwcm92aWRlclJlc291cmNlLnByb3ZpZGVyVmVyc2lvbiA9IHByb3ZpZGVyVmVyc2lvbjtcbiAgICAgIGZpbGVzLnB1c2godGhpcy5lbWl0UmVzb3VyY2UocHJvdmlkZXJSZXNvdXJjZSkpO1xuICAgICAgdGhpcy5lbWl0UmVzb3VyY2VSZWFkbWUocHJvdmlkZXJSZXNvdXJjZSk7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0SW5kZXhGaWxlKG5hbWUsIGZpbGVzKTtcbiAgICB0aGlzLmVtaXRMYXp5SW5kZXhGaWxlKG5hbWUsIGZpbGVzKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFJlc291cmNlUmVhZG1lKHJlc291cmNlOiBSZXNvdXJjZU1vZGVsKTogdm9pZCB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBgJHtyZXNvdXJjZS5uYW1lc3BhY2VGb2xkZXJQYXRofS9SRUFETUUubWRgO1xuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYCMgXFxgJHtyZXNvdXJjZS50ZXJyYWZvcm1UeXBlfVxcYGApO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgY29uc3QgdHlwZSA9IHJlc291cmNlLmlzUHJvdmlkZXJcbiAgICAgID8gcmVzb3VyY2UucHJvdmlkZXJcbiAgICAgIDogcmVzb3VyY2UudGVycmFmb3JtVHlwZTtcbiAgICB0aGlzLmNvZGUubGluZShcbiAgICAgIGBSZWZlciB0byB0aGUgVGVycmFmb3JtIFJlZ2lzdHJ5IGZvciBkb2NzOiBbXFxgJHt0eXBlfVxcYF0oJHtyZXNvdXJjZS5saW5rVG9Eb2NzfSkuYCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0SW5kZXhGaWxlKHByb3ZpZGVyOiBQcm92aWRlck5hbWUsIGZpbGVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNvbnN0IGZvbGRlciA9IGBwcm92aWRlcnMvJHtwcm92aWRlcn1gO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7Zm9sZGVyfS9pbmRleC50c2A7XG4gICAgdGhpcy5jb2RlLm9wZW5GaWxlKGZpbGVQYXRoKTtcbiAgICB0aGlzLmNvZGUubGluZShcIi8vIGdlbmVyYXRlZCBieSBjZGt0biBnZXRcIik7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBjb25zdCBkaXJOYW1lID0gZmlsZS5yZXBsYWNlKGAke2ZvbGRlcn0vYCwgXCJcIikucmVwbGFjZShcIi9pbmRleC50c1wiLCBcIlwiKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgZXhwb3J0ICogYXMgJHt0b0NhbWVsQ2FzZShkaXJOYW1lKX0gZnJvbSAnLi8ke2Rpck5hbWV9L2luZGV4JHt0aGlzLmltcG9ydEV4dGVuc2lvbn0nO2AsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0TGF6eUluZGV4RmlsZShwcm92aWRlcjogUHJvdmlkZXJOYW1lLCBmaWxlczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zdCBmb2xkZXIgPSBgcHJvdmlkZXJzLyR7cHJvdmlkZXJ9YDtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGAke2ZvbGRlcn0vbGF6eS1pbmRleC50c2A7XG4gICAgdGhpcy5jb2RlLm9wZW5GaWxlKGZpbGVQYXRoKTtcbiAgICB0aGlzLmNvZGUubGluZShcIi8vIGdlbmVyYXRlZCBieSBjZGt0biBnZXRcIik7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBjb25zdCBkaXJOYW1lID0gZmlsZS5yZXBsYWNlKGAke2ZvbGRlcn0vYCwgXCJcIikucmVwbGFjZShcIi9pbmRleC50c1wiLCBcIlwiKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICcke3RvQ2FtZWxDYXNlKFxuICAgICAgICAgIGRpck5hbWUsXG4gICAgICAgICl9JywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlcXVpcmUoJy4vJHtkaXJOYW1lfScpOyB9IH0pO2AsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UmVzb3VyY2UocmVzb3VyY2U6IFJlc291cmNlTW9kZWwpOiBzdHJpbmcge1xuICAgIHRoaXMuY29kZS5vcGVuRmlsZShyZXNvdXJjZS5maWxlUGF0aCk7XG4gICAgdGhpcy5lbWl0RmlsZUhlYWRlcihyZXNvdXJjZSk7XG4gICAgdGhpcy5zdHJ1Y3RFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuICAgIHRoaXMucmVzb3VyY2VFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUocmVzb3VyY2UuZmlsZVBhdGgpO1xuXG4gICAgcmV0dXJuIHJlc291cmNlLmZpbGVQYXRoO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UmVzb3VyY2VXaXRoQ29tcGxleFN0cnVjdChyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCkge1xuICAgIGNvbnN0IGdlbmVyYXRlZEZpbGVzID0gW107XG5cbiAgICAvLyBkcm9wIHRoZSBsYXN0IHNlZ21lbnQgb2YgdGhlIGZpbGVwYXRoXG4gICAgY29uc3QgZmlsZVBhdGggPSByZXNvdXJjZS5maWxlUGF0aDtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKGAvLyBnZW5lcmF0ZWQgZnJvbSB0ZXJyYWZvcm0gcmVzb3VyY2Ugc2NoZW1hYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcblxuICAgIGlmIChyZXNvdXJjZS5zdHJ1Y3RzUmVxdWlyZVNoYXJkaW5nKSB7XG4gICAgICBjb25zdCBzdHJ1Y3RzU3BlY2lmaWVyID0gYC4vJHtyZXNvdXJjZS5zdHJ1Y3RzRm9sZGVyTmFtZX0vaW5kZXgke3RoaXMuaW1wb3J0RXh0ZW5zaW9ufWA7XG4gICAgICBpZiAocmVzb3VyY2UucmVmZXJlbmNlZFR5cGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgICAgYGltcG9ydCB7ICR7cmVzb3VyY2UucmVmZXJlbmNlZFR5cGVzLmpvaW4oXG4gICAgICAgICAgICBcIiwgXFxuXCIsXG4gICAgICAgICAgKX19IGZyb20gJyR7c3RydWN0c1NwZWNpZmllcn0nO2AsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29kZS5saW5lKGBleHBvcnQgKiBmcm9tICcke3N0cnVjdHNTcGVjaWZpZXJ9JztgKTtcblxuICAgICAgcmVzb3VyY2UuaW1wb3J0U3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+XG4gICAgICAgIHRoaXMuY29kZS5saW5lKHN0YXRlbWVudCksXG4gICAgICApO1xuXG4gICAgICB0aGlzLnN0cnVjdEVtaXR0ZXIuZW1pdEludGVyZmFjZShyZXNvdXJjZSwgcmVzb3VyY2UuY29uZmlnU3RydWN0KTtcbiAgICAgIHRoaXMucmVzb3VyY2VFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuXG4gICAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKGZpbGVQYXRoKTtcblxuICAgICAgdGhpcy5zdHJ1Y3RFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuICAgICAgZ2VuZXJhdGVkRmlsZXMucHVzaChyZXNvdXJjZS5maWxlTmFtZSk7XG4gICAgICBnZW5lcmF0ZWRGaWxlcy5wdXNoKHJlc291cmNlLnN0cnVjdHNGb2xkZXJOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb3VyY2UuaW1wb3J0U3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+XG4gICAgICAgIHRoaXMuY29kZS5saW5lKHN0YXRlbWVudCksXG4gICAgICApO1xuXG4gICAgICB0aGlzLnN0cnVjdEVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG4gICAgICB0aGlzLnJlc291cmNlRW1pdHRlci5lbWl0KHJlc291cmNlKTtcbiAgICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICAgICAgZ2VuZXJhdGVkRmlsZXMucHVzaChyZXNvdXJjZS5maWxlTmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGVQYXRoO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0RmlsZUhlYWRlcihyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCkge1xuICAgIHRoaXMuY29kZS5saW5lKGAvLyAke3Jlc291cmNlLmxpbmtUb0RvY3N9YCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYC8vIGdlbmVyYXRlZCBmcm9tIHRlcnJhZm9ybSByZXNvdXJjZSBzY2hlbWFgKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHJlc291cmNlLmltcG9ydFN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50KSA9PiB0aGlzLmNvZGUubGluZShzdGF0ZW1lbnQpKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHRoaXMuY29kZS5saW5lKFwiLy8gQ29uZmlndXJhdGlvblwiKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICB9XG59XG4iXX0=
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvcHJvdmlkZXItZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMseUNBQW1EO0FBQ25ELDRDQU93QjtBQUN4Qiw0REFBdUU7QUFDdkUscUNBS2tCO0FBQ2xCLHVEQUFtRDtBQUNuRCx1Q0FJbUI7QUFnQm5CLE1BQU0sVUFBVSxHQUFHLENBQ2pCLE1BQTZCLEVBQzdCLG1CQUEyQixFQUNsQixFQUFFO0lBQ1gsSUFBSSxNQUFNLENBQUMsUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRWxDLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVoRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLG1CQUFtQixDQUFDO0lBQy9DLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBRWpELElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELDJDQUEyQztRQUMzQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixNQUFNLFlBQVksR0FBRztnQkFDbkIsV0FBVztnQkFDWCxRQUFRLEVBQUUsdUJBQXVCO2dCQUNqQyxTQUFTLEVBQUUsV0FBVztnQkFDdEIsSUFBSSxFQUFFLEVBQUU7YUFDVCxDQUFDO1lBQ0YsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1B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QyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUEvVEQsZ0VBK1RDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IENvZGVNYWtlciwgdG9DYW1lbENhc2UgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQge1xuICBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldCxcbiAgQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICBMQU5HVUFHRVMsXG4gIGxvZ2dlcixcbiAgUHJvdmlkZXJTY2hlbWEsXG4gIFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludCxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBGUVBOLCBwYXJzZUZRUE4sIFByb3ZpZGVyTmFtZSB9IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItc2NoZW1hXCI7XG5pbXBvcnQge1xuICBQcm92aWRlckZ1bmN0aW9uc01vZGVsLFxuICBSZXNvdXJjZU1vZGVsLFxuICBhc3NlcnROb0Z1bmN0aW9uc0dldHRlckNvbGxpc2lvbixcbiAgYnVpbGRQcm92aWRlckZ1bmN0aW9uc01vZGVsLFxufSBmcm9tIFwiLi9tb2RlbHNcIjtcbmltcG9ydCB7IFJlc291cmNlUGFyc2VyIH0gZnJvbSBcIi4vcmVzb3VyY2UtcGFyc2VyXCI7XG5pbXBvcnQge1xuICBQcm92aWRlckZ1bmN0aW9uc0VtaXR0ZXIsXG4gIFJlc291cmNlRW1pdHRlcixcbiAgU3RydWN0RW1pdHRlcixcbn0gZnJvbSBcIi4vZW1pdHRlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBGaWxlIGV4dGVuc2lvbiB0byB3cml0ZSBvbiBlbWl0dGVkIHJlbGF0aXZlIGltcG9ydHMuXG4gICAqIERlZmF1bHRzIHRvIFwiXCIgKENvbW1vbkpTKS5cbiAgICovXG4gIHJlYWRvbmx5IGltcG9ydEV4dGVuc2lvbj86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFByb3ZpZGVyRGF0YSB7XG4gIG5hbWU6IHN0cmluZztcbiAgc291cmNlOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbn1cblxuY29uc3QgaXNNYXRjaGluZyA9IChcbiAgdGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gIHRlcnJhZm9ybVNjaGVtYU5hbWU6IHN0cmluZyxcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAodGFyZ2V0LmlzTW9kdWxlKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgZWxlbWVudHMgPSB0ZXJyYWZvcm1TY2hlbWFOYW1lLnNwbGl0KFwiL1wiKTtcblxuICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHRhcmdldC5zb3VyY2UgPT09IHRlcnJhZm9ybVNjaGVtYU5hbWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgW2hvc3RuYW1lLCBuYW1lc3BhY2UsIHByb3ZpZGVyXSA9IGVsZW1lbnRzO1xuXG4gICAgaWYgKCFob3N0bmFtZSB8fCAhbmFtZXNwYWNlIHx8ICFwcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW4ndCBoYW5kbGUgJHt0ZXJyYWZvcm1TY2hlbWFOYW1lfWApO1xuICAgIH1cblxuICAgIC8vIElmIHRhcmdldC5zb3VyY2UgaXMgc2V0LCB0cnkgdG8gbWF0Y2ggaXRcbiAgICBpZiAodGFyZ2V0LnNvdXJjZSkge1xuICAgICAgY29uc3QgdGFyZ2V0U291cmNlID0ge1xuICAgICAgICAvLyBkZWZhdWx0c1xuICAgICAgICBob3N0bmFtZTogXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW9cIixcbiAgICAgICAgbmFtZXNwYWNlOiBcImhhc2hpY29ycFwiLFxuICAgICAgICBuYW1lOiBcIlwiLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnRzID0gdGFyZ2V0LnNvdXJjZS5zcGxpdChcIi9cIik7XG4gICAgICAvLyBPbmx5IGEgMy1wYXJ0IHNvdXJjZSBleHBsaWNpdGx5IHBpbnMgYSByZWdpc3RyeSBob3N0bmFtZS4gU2hvcnRoYW5kXG4gICAgICAvLyBzb3VyY2VzIChlLmcuIFwiaGFzaGljb3JwL2F3c2NjXCIpIG9taXQgaXQsIHNvIHdlIG11c3Qgbm90IGFzc3VtZSBhXG4gICAgICAvLyBkZWZhdWx0OiBUZXJyYWZvcm0gcmVzb2x2ZXMgdGhlbSB1bmRlciByZWdpc3RyeS50ZXJyYWZvcm0uaW8gd2hpbGVcbiAgICAgIC8vIE9wZW5Ub2Z1IHJlc29sdmVzIHRoZW0gdW5kZXIgcmVnaXN0cnkub3BlbnRvZnUub3JnLiBDb21wYXJpbmcgYWdhaW5zdCBhXG4gICAgICAvLyBoYXJkLWNvZGVkIGRlZmF1bHQgd291bGQgbWFrZSBzY2hlbWEgbG9va3VwIGZhaWwgdW5kZXIgT3BlblRvZnUgZXZlblxuICAgICAgLy8gdGhvdWdoIHRoZSBwcm92aWRlciB3YXMgaW5zdGFsbGVkIGNvcnJlY3RseS5cbiAgICAgIGNvbnN0IGV4cGxpY2l0SG9zdG5hbWUgPSB0YXJnZXRFbGVtZW50cy5sZW5ndGggPT09IDM7XG4gICAgICBzd2l0Y2ggKHRhcmdldEVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6IC8vIG9ubHkgbmFtZSBzZXRcbiAgICAgICAgICB0YXJnZXRTb3VyY2UubmFtZSA9IHRhcmdldEVsZW1lbnRzWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogLy8gbmFtZXNwYWNlIGFuZCBuYW1lIHNldFxuICAgICAgICAgIHRhcmdldFNvdXJjZS5uYW1lc3BhY2UgPSB0YXJnZXRFbGVtZW50c1swXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHRhcmdldFNvdXJjZS5uYW1lID0gdGFyZ2V0RWxlbWVudHNbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOiAvLyBob3N0bmFtZSwgbmFtZXNwYWNlIGFuZCBuYW1lIHNldFxuICAgICAgICAgIHRhcmdldFNvdXJjZS5ob3N0bmFtZSA9IHRhcmdldEVsZW1lbnRzWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgdGFyZ2V0U291cmNlLm5hbWVzcGFjZSA9IHRhcmdldEVsZW1lbnRzWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgdGFyZ2V0U291cmNlLm5hbWUgPSB0YXJnZXRFbGVtZW50c1syXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBjYW4ndCBoYW5kbGUgJHt0YXJnZXQuc291cmNlfS4gRXhwZWN0ZWQgc3RyaW5nIHdpdGggMSwgMiBvciAzIGVsZW1lbnRzIHNlcGFyYXRlZCBieSAnLydgLFxuICAgICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgICghZXhwbGljaXRIb3N0bmFtZSB8fCB0YXJnZXRTb3VyY2UuaG9zdG5hbWUgPT09IGhvc3RuYW1lKSAmJlxuICAgICAgICB0YXJnZXRTb3VyY2UubmFtZXNwYWNlID09PSBuYW1lc3BhY2UgJiZcbiAgICAgICAgdGFyZ2V0U291cmNlLm5hbWUgPT09IHByb3ZpZGVyXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEVsc2UsIHRyeSB0byBtYXRjaCB0YXJnZXQubmFtZSB0byB0aGUgcHJvdmlkZXIgbmFtZVxuXG4gICAgcmV0dXJuIHRhcmdldC5uYW1lID09PSBwcm92aWRlcjtcbiAgfVxufTtcblxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlckNvbnN0cmFpbnRzIHtcbiAgW2Zxbjogc3RyaW5nXTogUHJvdmlkZXJEYXRhO1xufVxuXG5leHBvcnQgY2xhc3MgVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3Ige1xuICBwcml2YXRlIHJlc291cmNlUGFyc2VyID0gbmV3IFJlc291cmNlUGFyc2VyKCk7XG4gIHByaXZhdGUgcmVzb3VyY2VFbWl0dGVyOiBSZXNvdXJjZUVtaXR0ZXI7XG4gIHByaXZhdGUgc3RydWN0RW1pdHRlcjogU3RydWN0RW1pdHRlcjtcbiAgcHJpdmF0ZSBwcm92aWRlckZ1bmN0aW9uc0VtaXR0ZXI6IFByb3ZpZGVyRnVuY3Rpb25zRW1pdHRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBpbXBvcnRFeHRlbnNpb246IHN0cmluZztcbiAgcHVibGljIHZlcnNpb25zOiB7IFtmcXBuOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29kZTogQ29kZU1ha2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NoZW1hOiBQcm92aWRlclNjaGVtYSxcbiAgICBvcHRpb25zOiBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvck9wdGlvbnMgPSB7fSxcbiAgKSB7XG4gICAgdGhpcy5jb2RlLmluZGVudGF0aW9uID0gMjtcbiAgICB0aGlzLmltcG9ydEV4dGVuc2lvbiA9IG9wdGlvbnMuaW1wb3J0RXh0ZW5zaW9uID8/IFwiXCI7XG4gICAgdGhpcy5yZXNvdXJjZUVtaXR0ZXIgPSBuZXcgUmVzb3VyY2VFbWl0dGVyKHRoaXMuY29kZSwgdGhpcy5pbXBvcnRFeHRlbnNpb24pO1xuICAgIHRoaXMuc3RydWN0RW1pdHRlciA9IG5ldyBTdHJ1Y3RFbWl0dGVyKHRoaXMuY29kZSwgdGhpcy5pbXBvcnRFeHRlbnNpb24pO1xuICAgIHRoaXMucHJvdmlkZXJGdW5jdGlvbnNFbWl0dGVyID0gbmV3IFByb3ZpZGVyRnVuY3Rpb25zRW1pdHRlcih0aGlzLmNvZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcm92aWRlckJ5Q29uc3RyYWludChcbiAgICBwcm92aWRlckNvbnN0cmFpbnQ6IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgKTogRlFQTiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXMgfHwge30pLmZpbmQoKGZxcG4pID0+XG4gICAgICBpc01hdGNoaW5nKHByb3ZpZGVyQ29uc3RyYWludCwgZnFwbiksXG4gICAgKSBhcyBGUVBOIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGdlbmVyYXRlKHByb3ZpZGVyQ29uc3RyYWludDogQ29uc3RydWN0c01ha2VyVGFyZ2V0KSB7XG4gICAgY29uc3QgZnFwbiA9IHRoaXMuZ2V0UHJvdmlkZXJCeUNvbnN0cmFpbnQocHJvdmlkZXJDb25zdHJhaW50KTtcbiAgICBpZiAoIWZxcG4pIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIHByb3ZpZGVyIGNvbnN0cmFpbnQgZm9yICR7cHJvdmlkZXJDb25zdHJhaW50fSBpbiBzY2hlbWE6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICAyLFxuICAgICAgICApfWAsXG4gICAgICApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgcHJvdmlkZXIgd2l0aCBjb25zdHJhaW50ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgcHJvdmlkZXJDb25zdHJhaW50LFxuICAgICAgICApfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3ZpZGVyVmVyc2lvbiA9IHRoaXMuc2NoZW1hLnByb3ZpZGVyX3ZlcnNpb25zPy5bZnFwbl07XG4gICAgdGhpcy5lbWl0UHJvdmlkZXIoZnFwbiwgcHJvdmlkZXJWZXJzaW9uLCBwcm92aWRlckNvbnN0cmFpbnQpO1xuICAgIHRoaXMudmVyc2lvbnNbZnFwbl0gPSBwcm92aWRlclZlcnNpb247XG4gIH1cblxuICBwdWJsaWMgZ2VuZXJhdGVBbGwoKSB7XG4gICAgZm9yIChjb25zdCBmcXBuIG9mIE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXMgfHwge30pKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlKFxuICAgICAgICBuZXcgQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQoXG4gICAgICAgICAgbmV3IFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludChmcXBuKSxcbiAgICAgICAgICBMQU5HVUFHRVNbMF0sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzYXZlKG91dGRpcjogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5jb2RlLnNhdmUob3V0ZGlyKTtcbiAgfVxuXG4gIHB1YmxpYyBidWlsZFJlc291cmNlTW9kZWxzKFxuICAgIGZxcG46IEZRUE4sXG4gICAgY29uc3RyYWludD86IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgKTogUmVzb3VyY2VNb2RlbFtdIHtcbiAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXM/LltmcXBuXTtcbiAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZmluZCBwcm92aWRlciAnJHtmcXBufScgaW4gc2NoZW1hYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2VzID0gT2JqZWN0LmVudHJpZXMocHJvdmlkZXIucmVzb3VyY2Vfc2NoZW1hcyB8fCB7fSkubWFwKFxuICAgICAgKFt0eXBlLCByZXNvdXJjZV0pID0+XG4gICAgICAgIHRoaXMucmVzb3VyY2VQYXJzZXIucGFyc2UoZnFwbiwgdHlwZSwgcmVzb3VyY2UsIFwicmVzb3VyY2VcIiwgY29uc3RyYWludCksXG4gICAgKTtcblxuICAgIGNvbnN0IGRhdGFTb3VyY2VzID0gT2JqZWN0LmVudHJpZXMocHJvdmlkZXIuZGF0YV9zb3VyY2Vfc2NoZW1hcyB8fCB7fSkubWFwKFxuICAgICAgKFt0eXBlLCByZXNvdXJjZV0pID0+XG4gICAgICAgIHRoaXMucmVzb3VyY2VQYXJzZXIucGFyc2UoXG4gICAgICAgICAgZnFwbixcbiAgICAgICAgICBgZGF0YV8ke3R5cGV9YCxcbiAgICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgICBcImRhdGFfc291cmNlXCIsXG4gICAgICAgICAgY29uc3RyYWludCxcbiAgICAgICAgKSxcbiAgICApO1xuXG4gICAgY29uc3QgZXBoZW1lcmFsUmVzb3VyY2VzID0gT2JqZWN0LmVudHJpZXMoXG4gICAgICBwcm92aWRlci5lcGhlbWVyYWxfcmVzb3VyY2Vfc2NoZW1hcyB8fCB7fSxcbiAgICApLm1hcCgoW3R5cGUsIHJlc291cmNlXSkgPT5cbiAgICAgIHRoaXMucmVzb3VyY2VQYXJzZXIucGFyc2UoXG4gICAgICAgIGZxcG4sXG4gICAgICAgIGBlcGhlbWVyYWxfJHt0eXBlfWAsXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICBcImVwaGVtZXJhbF9yZXNvdXJjZVwiLFxuICAgICAgICBjb25zdHJhaW50LFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgLy8gQ1JJVElDQUw6IGVwaGVtZXJhbCByZXNvdXJjZXMgbXVzdCBiZSBhcHBlbmRlZCBBRlRFUiByZXNvdXJjZXMgYW5kIGRhdGFcbiAgICAvLyBzb3VyY2VzIC0gdW5pcXVlQ2xhc3NOYW1lIGRlZHVwIGlzIG9yZGVyLWRlcGVuZGVudCBhbmQgZXhpc3RpbmdcbiAgICAvLyBwcmVidWlsdCBzbmFwc2hvdHMgbXVzdCBub3QgY2h1cm4uXG4gICAgcmV0dXJuIChbXSBhcyBSZXNvdXJjZU1vZGVsW10pLmNvbmNhdChcbiAgICAgIC4uLnJlc291cmNlcyxcbiAgICAgIC4uLmRhdGFTb3VyY2VzLFxuICAgICAgLi4uZXBoZW1lcmFsUmVzb3VyY2VzLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2xhc3NOYW1lRm9yUmVzb3VyY2UodGVycmFmb3JtVHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VQYXJzZXIuZ2V0Q2xhc3NOYW1lRm9yUmVzb3VyY2UodGVycmFmb3JtVHlwZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TmFtZXNwYWNlTmFtZUZvclJlc291cmNlKHRlcnJhZm9ybVR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlUGFyc2VyLmdldE5hbWVzcGFjZU5hbWVGb3JSZXNvdXJjZSh0ZXJyYWZvcm1UeXBlKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFByb3ZpZGVyKFxuICAgIGZxcG46IEZRUE4sXG4gICAgcHJvdmlkZXJWZXJzaW9uPzogc3RyaW5nLFxuICAgIGNvbnN0cmFpbnQ/OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gICkge1xuICAgIGNvbnN0IG5hbWUgPSBjb25zdHJhaW50Py5uYW1lXG4gICAgICA/IChjb25zdHJhaW50Lm5hbWUgYXMgUHJvdmlkZXJOYW1lKVxuICAgICAgOiBwYXJzZUZRUE4oZnFwbikubmFtZTtcbiAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXM/LltmcXBuXTtcbiAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZmluZCBwcm92aWRlciAnJHtmcXBufScgaW4gc2NoZW1hYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgdGhpcy5idWlsZFJlc291cmNlTW9kZWxzKGZxcG4sIGNvbnN0cmFpbnQpLmZvckVhY2goKHJlc291cmNlTW9kZWwpID0+IHtcbiAgICAgIGlmIChjb25zdHJhaW50KSB7XG4gICAgICAgIHJlc291cmNlTW9kZWwucHJvdmlkZXJWZXJzaW9uQ29uc3RyYWludCA9IGNvbnN0cmFpbnQudmVyc2lvbjtcbiAgICAgICAgcmVzb3VyY2VNb2RlbC50ZXJyYWZvcm1Qcm92aWRlclNvdXJjZSA9IGNvbnN0cmFpbnQuc291cmNlO1xuICAgICAgfVxuICAgICAgcmVzb3VyY2VNb2RlbC5wcm92aWRlclZlcnNpb24gPSBwcm92aWRlclZlcnNpb247XG5cbiAgICAgIGlmIChyZXNvdXJjZU1vZGVsLnN0cnVjdHNSZXF1aXJlU2hhcmRpbmcpIHtcbiAgICAgICAgZmlsZXMucHVzaCh0aGlzLmVtaXRSZXNvdXJjZVdpdGhDb21wbGV4U3RydWN0KHJlc291cmNlTW9kZWwpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbGVzLnB1c2godGhpcy5lbWl0UmVzb3VyY2UocmVzb3VyY2VNb2RlbCkpO1xuICAgICAgfVxuICAgICAgdGhpcy5lbWl0UmVzb3VyY2VSZWFkbWUocmVzb3VyY2VNb2RlbCk7XG4gICAgfSk7XG5cbiAgICAvLyBCdWlsdCBiZWZvcmUgdGhlIHByb3ZpZGVyIGNsYXNzIGlzIGVtaXR0ZWQgKHJhdGhlciB0aGFuIGFmdGVyLCBhc1xuICAgIC8vIHJlc291cmNlcy9kYXRhIHNvdXJjZXMvZXBoZW1lcmFsIHJlc291cmNlcyBhYm92ZSBhbHJlYWR5IGFyZSkgc28gdGhhdFxuICAgIC8vIHRoZSBtb2RlbCBjYW4gYmUgYXR0YWNoZWQgdG8gcHJvdmlkZXJSZXNvdXJjZSBhbmQgcGlja2VkIHVwIGJ5XG4gICAgLy8gUmVzb3VyY2VFbWl0dGVyIHdoaWxlIGl0IHN0aWxsIGVtaXRzIHRoZSBwcm92aWRlciBjbGFzcyBmaWxlIGJlbG93IC1cbiAgICAvLyBzZWUgdGhlIGVuZ2luZWVyaW5nIGJyaWVmIGZvciB3aHkgdGhpcyBvcmRlcmluZyBtYXR0ZXJzLlxuICAgIGNvbnN0IHByb3ZpZGVyRnVuY3Rpb25zTW9kZWwgPSBidWlsZFByb3ZpZGVyRnVuY3Rpb25zTW9kZWwoXG4gICAgICBuYW1lLFxuICAgICAgcHJvdmlkZXIuZnVuY3Rpb25zLFxuICAgICk7XG5cbiAgICBpZiAocHJvdmlkZXIucHJvdmlkZXIpIHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyUmVzb3VyY2UgPSB0aGlzLnJlc291cmNlUGFyc2VyLnBhcnNlKFxuICAgICAgICBmcXBuLFxuICAgICAgICBgcHJvdmlkZXJgLFxuICAgICAgICBwcm92aWRlci5wcm92aWRlcixcbiAgICAgICAgXCJwcm92aWRlclwiLFxuICAgICAgICBjb25zdHJhaW50LFxuICAgICAgKTtcbiAgICAgIGlmIChjb25zdHJhaW50KSB7XG4gICAgICAgIHByb3ZpZGVyUmVzb3VyY2UucHJvdmlkZXJWZXJzaW9uQ29uc3RyYWludCA9IGNvbnN0cmFpbnQudmVyc2lvbjtcbiAgICAgICAgcHJvdmlkZXJSZXNvdXJjZS50ZXJyYWZvcm1Qcm92aWRlclNvdXJjZSA9IGNvbnN0cmFpbnQuc291cmNlO1xuICAgICAgICBwcm92aWRlclJlc291cmNlLnRlcnJhZm9ybVByb3ZpZGVyTmFtZSA9IGNvbnN0cmFpbnQubmFtZTtcbiAgICAgIH1cbiAgICAgIHByb3ZpZGVyUmVzb3VyY2UucHJvdmlkZXJWZXJzaW9uID0gcHJvdmlkZXJWZXJzaW9uO1xuXG4gICAgICBpZiAocHJvdmlkZXJGdW5jdGlvbnNNb2RlbCkge1xuICAgICAgICBhc3NlcnROb0Z1bmN0aW9uc0dldHRlckNvbGxpc2lvbihcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHByb3ZpZGVyUmVzb3VyY2UuYXR0cmlidXRlcy5tYXAoKGF0dCkgPT4gYXR0Lm5hbWUpLFxuICAgICAgICApO1xuICAgICAgICBwcm92aWRlclJlc291cmNlLnByb3ZpZGVyRnVuY3Rpb25zTW9kZWwgPSBwcm92aWRlckZ1bmN0aW9uc01vZGVsO1xuICAgICAgfVxuXG4gICAgICBmaWxlcy5wdXNoKHRoaXMuZW1pdFJlc291cmNlKHByb3ZpZGVyUmVzb3VyY2UpKTtcbiAgICAgIHRoaXMuZW1pdFJlc291cmNlUmVhZG1lKHByb3ZpZGVyUmVzb3VyY2UpO1xuICAgIH1cblxuICAgIGlmIChwcm92aWRlckZ1bmN0aW9uc01vZGVsKSB7XG4gICAgICBmaWxlcy5wdXNoKHRoaXMuZW1pdFByb3ZpZGVyRnVuY3Rpb25zKG5hbWUsIHByb3ZpZGVyRnVuY3Rpb25zTW9kZWwpKTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRJbmRleEZpbGUobmFtZSwgZmlsZXMpO1xuICAgIHRoaXMuZW1pdExhenlJbmRleEZpbGUobmFtZSwgZmlsZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UHJvdmlkZXJGdW5jdGlvbnMoXG4gICAgcHJvdmlkZXI6IFByb3ZpZGVyTmFtZSxcbiAgICBtb2RlbDogUHJvdmlkZXJGdW5jdGlvbnNNb2RlbCxcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGBwcm92aWRlcnMvJHtwcm92aWRlcn0vcHJvdmlkZXItZnVuY3Rpb25zL2luZGV4LnRzYDtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKGAvLyBnZW5lcmF0ZWQgZnJvbSBwcm92aWRlciBmdW5jdGlvbiBzY2hlbWFgKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHRoaXMucHJvdmlkZXJGdW5jdGlvbnNFbWl0dGVyLmVtaXQobW9kZWwpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICAgIHJldHVybiBmaWxlUGF0aDtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFJlc291cmNlUmVhZG1lKHJlc291cmNlOiBSZXNvdXJjZU1vZGVsKTogdm9pZCB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBgJHtyZXNvdXJjZS5uYW1lc3BhY2VGb2xkZXJQYXRofS9SRUFETUUubWRgO1xuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYCMgXFxgJHtyZXNvdXJjZS50ZXJyYWZvcm1UeXBlfVxcYGApO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgY29uc3QgdHlwZSA9IHJlc291cmNlLmlzUHJvdmlkZXJcbiAgICAgID8gcmVzb3VyY2UucHJvdmlkZXJcbiAgICAgIDogcmVzb3VyY2UudGVycmFmb3JtVHlwZTtcbiAgICB0aGlzLmNvZGUubGluZShcbiAgICAgIGBSZWZlciB0byB0aGUgVGVycmFmb3JtIFJlZ2lzdHJ5IGZvciBkb2NzOiBbXFxgJHt0eXBlfVxcYF0oJHtyZXNvdXJjZS5saW5rVG9Eb2NzfSkuYCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0SW5kZXhGaWxlKHByb3ZpZGVyOiBQcm92aWRlck5hbWUsIGZpbGVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNvbnN0IGZvbGRlciA9IGBwcm92aWRlcnMvJHtwcm92aWRlcn1gO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7Zm9sZGVyfS9pbmRleC50c2A7XG4gICAgdGhpcy5jb2RlLm9wZW5GaWxlKGZpbGVQYXRoKTtcbiAgICB0aGlzLmNvZGUubGluZShcIi8vIGdlbmVyYXRlZCBieSBjZGt0biBnZXRcIik7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBjb25zdCBkaXJOYW1lID0gZmlsZS5yZXBsYWNlKGAke2ZvbGRlcn0vYCwgXCJcIikucmVwbGFjZShcIi9pbmRleC50c1wiLCBcIlwiKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgZXhwb3J0ICogYXMgJHt0b0NhbWVsQ2FzZShkaXJOYW1lKX0gZnJvbSAnLi8ke2Rpck5hbWV9L2luZGV4JHt0aGlzLmltcG9ydEV4dGVuc2lvbn0nO2AsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0TGF6eUluZGV4RmlsZShwcm92aWRlcjogUHJvdmlkZXJOYW1lLCBmaWxlczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zdCBmb2xkZXIgPSBgcHJvdmlkZXJzLyR7cHJvdmlkZXJ9YDtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGAke2ZvbGRlcn0vbGF6eS1pbmRleC50c2A7XG4gICAgdGhpcy5jb2RlLm9wZW5GaWxlKGZpbGVQYXRoKTtcbiAgICB0aGlzLmNvZGUubGluZShcIi8vIGdlbmVyYXRlZCBieSBjZGt0biBnZXRcIik7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBjb25zdCBkaXJOYW1lID0gZmlsZS5yZXBsYWNlKGAke2ZvbGRlcn0vYCwgXCJcIikucmVwbGFjZShcIi9pbmRleC50c1wiLCBcIlwiKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICcke3RvQ2FtZWxDYXNlKFxuICAgICAgICAgIGRpck5hbWUsXG4gICAgICAgICl9JywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlcXVpcmUoJy4vJHtkaXJOYW1lfScpOyB9IH0pO2AsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UmVzb3VyY2UocmVzb3VyY2U6IFJlc291cmNlTW9kZWwpOiBzdHJpbmcge1xuICAgIHRoaXMuY29kZS5vcGVuRmlsZShyZXNvdXJjZS5maWxlUGF0aCk7XG4gICAgdGhpcy5lbWl0RmlsZUhlYWRlcihyZXNvdXJjZSk7XG4gICAgdGhpcy5zdHJ1Y3RFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuICAgIHRoaXMucmVzb3VyY2VFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUocmVzb3VyY2UuZmlsZVBhdGgpO1xuXG4gICAgcmV0dXJuIHJlc291cmNlLmZpbGVQYXRoO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UmVzb3VyY2VXaXRoQ29tcGxleFN0cnVjdChyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCkge1xuICAgIGNvbnN0IGdlbmVyYXRlZEZpbGVzID0gW107XG5cbiAgICAvLyBkcm9wIHRoZSBsYXN0IHNlZ21lbnQgb2YgdGhlIGZpbGVwYXRoXG4gICAgY29uc3QgZmlsZVBhdGggPSByZXNvdXJjZS5maWxlUGF0aDtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKGAvLyBnZW5lcmF0ZWQgZnJvbSB0ZXJyYWZvcm0gcmVzb3VyY2Ugc2NoZW1hYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcblxuICAgIGlmIChyZXNvdXJjZS5zdHJ1Y3RzUmVxdWlyZVNoYXJkaW5nKSB7XG4gICAgICBjb25zdCBzdHJ1Y3RzU3BlY2lmaWVyID0gYC4vJHtyZXNvdXJjZS5zdHJ1Y3RzRm9sZGVyTmFtZX0vaW5kZXgke3RoaXMuaW1wb3J0RXh0ZW5zaW9ufWA7XG4gICAgICBpZiAocmVzb3VyY2UucmVmZXJlbmNlZFR5cGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgICAgYGltcG9ydCB7ICR7cmVzb3VyY2UucmVmZXJlbmNlZFR5cGVzLmpvaW4oXG4gICAgICAgICAgICBcIiwgXFxuXCIsXG4gICAgICAgICAgKX19IGZyb20gJyR7c3RydWN0c1NwZWNpZmllcn0nO2AsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29kZS5saW5lKGBleHBvcnQgKiBmcm9tICcke3N0cnVjdHNTcGVjaWZpZXJ9JztgKTtcblxuICAgICAgcmVzb3VyY2UuaW1wb3J0U3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+XG4gICAgICAgIHRoaXMuY29kZS5saW5lKHN0YXRlbWVudCksXG4gICAgICApO1xuXG4gICAgICB0aGlzLnN0cnVjdEVtaXR0ZXIuZW1pdEludGVyZmFjZShyZXNvdXJjZSwgcmVzb3VyY2UuY29uZmlnU3RydWN0KTtcbiAgICAgIHRoaXMucmVzb3VyY2VFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuXG4gICAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKGZpbGVQYXRoKTtcblxuICAgICAgdGhpcy5zdHJ1Y3RFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuICAgICAgZ2VuZXJhdGVkRmlsZXMucHVzaChyZXNvdXJjZS5maWxlTmFtZSk7XG4gICAgICBnZW5lcmF0ZWRGaWxlcy5wdXNoKHJlc291cmNlLnN0cnVjdHNGb2xkZXJOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb3VyY2UuaW1wb3J0U3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+XG4gICAgICAgIHRoaXMuY29kZS5saW5lKHN0YXRlbWVudCksXG4gICAgICApO1xuXG4gICAgICB0aGlzLnN0cnVjdEVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG4gICAgICB0aGlzLnJlc291cmNlRW1pdHRlci5lbWl0KHJlc291cmNlKTtcbiAgICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICAgICAgZ2VuZXJhdGVkRmlsZXMucHVzaChyZXNvdXJjZS5maWxlTmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGVQYXRoO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0RmlsZUhlYWRlcihyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCkge1xuICAgIHRoaXMuY29kZS5saW5lKGAvLyAke3Jlc291cmNlLmxpbmtUb0RvY3N9YCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYC8vIGdlbmVyYXRlZCBmcm9tIHRlcnJhZm9ybSByZXNvdXJjZSBzY2hlbWFgKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHJlc291cmNlLmltcG9ydFN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50KSA9PiB0aGlzLmNvZGUubGluZShzdGF0ZW1lbnQpKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHRoaXMuY29kZS5saW5lKFwiLy8gQ29uZmlndXJhdGlvblwiKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICB9XG59XG4iXX0=