@cdktn/provider-generator 0.24.0-pre.72 → 0.24.0-pre.73
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/build/get/__tests__/generator/supported-stored-classes.test.d.ts +2 -0
- package/build/get/__tests__/generator/supported-stored-classes.test.js +137 -0
- package/build/get/__tests__/generator/types.test.js +44 -1
- package/build/get/generator/emitter/attributes-emitter.d.ts +1 -0
- package/build/get/generator/emitter/attributes-emitter.js +25 -1
- package/build/get/generator/models/attribute-model.d.ts +2 -0
- package/build/get/generator/models/attribute-model.js +49 -4
- package/build/get/generator/models/attribute-type-model.d.ts +24 -0
- package/build/get/generator/models/attribute-type-model.js +91 -5
- package/build/get/generator/models/supported-stored-classes.d.ts +5 -0
- package/build/get/generator/models/supported-stored-classes.js +86 -0
- package/package.json +4 -4
- package/src/get/__tests__/generator/__snapshots__/types.test.ts.snap +149 -0
- package/src/get/__tests__/generator/fixtures/deeply-nested-collections.test.fixture.json +129 -0
- package/src/get/__tests__/generator/supported-stored-classes.test.ts +147 -0
- package/src/get/__tests__/generator/types.test.ts +75 -0
- package/src/get/generator/emitter/attributes-emitter.ts +37 -1
- package/src/get/generator/models/attribute-model.ts +58 -4
- package/src/get/generator/models/attribute-type-model.ts +121 -9
- package/src/get/generator/models/supported-stored-classes.ts +88 -0
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AttributeModel = exports.escapeAttributeName = void 0;
|
|
4
|
+
// Copyright (c) HashiCorp, Inc
|
|
5
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
6
|
+
const commons_1 = require("@cdktn/commons");
|
|
4
7
|
function escapeAttributeName(name) {
|
|
5
8
|
// `self` and `build` doesn't work in as property name in Python
|
|
6
9
|
if (name === "self" || name === "build")
|
|
@@ -34,6 +37,7 @@ function escapeAttributeName(name) {
|
|
|
34
37
|
exports.escapeAttributeName = escapeAttributeName;
|
|
35
38
|
class AttributeModel {
|
|
36
39
|
constructor(options) {
|
|
40
|
+
this.loggedStoredClassUnavailable = false;
|
|
37
41
|
this.storageName = options.storageName;
|
|
38
42
|
this._name = options.name;
|
|
39
43
|
this.type = options.type;
|
|
@@ -78,12 +82,53 @@ class AttributeModel {
|
|
|
78
82
|
else if (this.computed &&
|
|
79
83
|
!this.isAssignable &&
|
|
80
84
|
(!this.type.isTokenizable || this.type.typeModelType === "map")) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
85
|
+
if (this.type.isStoredClassUnavailable) {
|
|
86
|
+
// Defensive fallback: neither the composed stored class name (e.g.
|
|
87
|
+
// "StringListMapMap") nor a collapsed nearest-Any wrapper (e.g. "AnyMapMap")
|
|
88
|
+
// exists in the core cdktn package for this type. This should be rare - see
|
|
89
|
+
// resolveStoredClassName in supported-stored-classes.ts - so log it loudly to
|
|
90
|
+
// make regressions in the collapse logic visible.
|
|
91
|
+
if (!this.loggedStoredClassUnavailable) {
|
|
92
|
+
this.loggedStoredClassUnavailable = true;
|
|
93
|
+
commons_1.logger.debug(`No stored class (not even a collapsed nearest-Any wrapper) is available for computed attribute "${this.terraformFullName}" (composed storedClassType: "${this.type.storedClassType}"). Falling back to a plain, untyped getter.`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
getterType = {
|
|
98
|
+
_type: "stored_class",
|
|
99
|
+
};
|
|
100
|
+
}
|
|
84
101
|
}
|
|
85
102
|
return getterType;
|
|
86
103
|
}
|
|
104
|
+
// Reports whether this attribute's getter sits at a "stored class boundary" that is
|
|
105
|
+
// worth documenting: "collapsed" when a deeper, unsupported nesting was collapsed into
|
|
106
|
+
// the nearest typed "Any"-wrapper (e.g. "AnyMapMap"), or "fallback" when no stored class
|
|
107
|
+
// at all is available and a plain, untyped getter is emitted instead. Mirrors the same
|
|
108
|
+
// condition tree as getterType above, so it only ever reports a boundary for attributes
|
|
109
|
+
// that actually went through that computed-collection branch - plain getters for
|
|
110
|
+
// ordinary tokenizable types (e.g. list(string)) are never flagged.
|
|
111
|
+
get storedClassBoundaryKind() {
|
|
112
|
+
if (this.forcePlainGetterType || this.isProvider) {
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
if (this.type.hasReferenceClass) {
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
if (this.computed &&
|
|
119
|
+
!this.isAssignable &&
|
|
120
|
+
(!this.type.isTokenizable || this.type.typeModelType === "map")) {
|
|
121
|
+
if (this.type.isStoredClassUnavailable) {
|
|
122
|
+
return "fallback";
|
|
123
|
+
}
|
|
124
|
+
const resolvedStoredClass = this.type
|
|
125
|
+
.resolvedStoredClass;
|
|
126
|
+
if (resolvedStoredClass === null || resolvedStoredClass === void 0 ? void 0 : resolvedStoredClass.collapsed) {
|
|
127
|
+
return "collapsed";
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return undefined;
|
|
131
|
+
}
|
|
87
132
|
get isStored() {
|
|
88
133
|
return this.isAssignable;
|
|
89
134
|
}
|
|
@@ -157,4 +202,4 @@ class AttributeModel {
|
|
|
157
202
|
}
|
|
158
203
|
}
|
|
159
204
|
exports.AttributeModel = AttributeModel;
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLW1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvbW9kZWxzL2F0dHJpYnV0ZS1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFxQ0EsU0FBZ0IsbUJBQW1CLENBQUMsSUFBWTtJQUM5QyxnRUFBZ0U7SUFDaEUsSUFBSSxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxPQUFPO1FBQUUsT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDO0lBQ25FLDJFQUEyRTtJQUMzRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyRSx3Q0FBd0M7SUFDeEMsSUFBSSxJQUFJLEtBQUssUUFBUTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3hDLHNEQUFzRDtJQUN0RCxJQUFJLElBQUksS0FBSyxNQUFNO1FBQUUsT0FBTyxlQUFlLENBQUM7SUFDNUMsd0RBQXdEO0lBQ3hELElBQUksSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLGlCQUFpQixDQUFDO0lBQ2hELGdHQUFnRztJQUNoRyxJQUFJLElBQUksS0FBSyxnQkFBZ0I7UUFBRSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDekQsc0VBQXNFO0lBQ3RFLElBQUksSUFBSSxLQUFLLFlBQVk7UUFBRSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDckQseURBQXlEO0lBQ3pELElBQUksSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDakQsc0ZBQXNGO0lBQ3RGLElBQUksSUFBSSxLQUFLLFVBQVU7UUFBRSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDbkQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBcEJELGtEQW9CQztBQUVELE1BQWEsY0FBYztJQWF6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QyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxxREFBcUQ7UUFFckQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUE1SkQsd0NBNEpDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IEF0dHJpYnV0ZVR5cGVNb2RlbCB9IGZyb20gXCIuL2F0dHJpYnV0ZS10eXBlLW1vZGVsXCI7XG5cbmV4cG9ydCB0eXBlIEdldHRlclR5cGUgPVxuICB8IHsgX3R5cGU6IFwicGxhaW5cIiB9XG4gIHwge1xuICAgICAgX3R5cGU6IFwiYXJnc1wiO1xuICAgICAgYXJnczogc3RyaW5nO1xuICAgICAgcmV0dXJuVHlwZT86IHN0cmluZztcbiAgICAgIHJldHVyblN0YXRlbWVudDogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICBfdHlwZTogXCJzdG9yZWRfY2xhc3NcIjtcbiAgICB9O1xuXG5leHBvcnQgdHlwZSBTZXR0ZXJUeXBlID1cbiAgfCB7IF90eXBlOiBcIm5vbmVcIiB9XG4gIHwgeyBfdHlwZTogXCJzZXRcIjsgdHlwZTogc3RyaW5nIH1cbiAgfCB7IF90eXBlOiBcInB1dFwiOyB0eXBlOiBzdHJpbmcgfVxuICB8IHsgX3R5cGU6IFwic3RvcmVkX2NsYXNzXCI7IHR5cGU6IHN0cmluZyB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZU1vZGVsT3B0aW9ucyB7XG4gIHN0b3JhZ2VOYW1lOiBzdHJpbmc7IC8vIHByaXZhdGUgcHJvcGVydHlcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBBdHRyaWJ1dGVUeXBlTW9kZWw7XG4gIG9wdGlvbmFsOiBib29sZWFuO1xuICBjb21wdXRlZDogYm9vbGVhbjtcbiAgdGVycmFmb3JtTmFtZTogc3RyaW5nO1xuICB0ZXJyYWZvcm1GdWxsTmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZ2V0QXR0Q2FsbD86IHN0cmluZztcbiAgcHJvdmlkZXI6IGJvb2xlYW47XG4gIHJlcXVpcmVkOiBib29sZWFuO1xuICBmb3JjZVBsYWluR2V0dGVyVHlwZT86IGJvb2xlYW47IC8vIHVzZWQgZm9yIHNraXBwaW5nIGF0dHJpYnV0ZSB0eXBlIGF0dHJpYnV0ZXMgdGhhdCB1c2UgdGhlIFNraXBwZWRBdHRyaWJ1dGVUeXBlTW9kZWwgd2hpY2ggcmV0dXJucyBhbiBpbnRlcnBvbGF0aW9uIGFuZCBoYXMgbm8gc3RvcmVkIHR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUF0dHJpYnV0ZU5hbWUobmFtZTogc3RyaW5nKSB7XG4gIC8vIGBzZWxmYCBhbmQgYGJ1aWxkYCBkb2Vzbid0IHdvcmsgaW4gYXMgcHJvcGVydHkgbmFtZSBpbiBQeXRob25cbiAgaWYgKG5hbWUgPT09IFwic2VsZlwiIHx8IG5hbWUgPT09IFwiYnVpbGRcIikgcmV0dXJuIGAke25hbWV9QXR0cmlidXRlYDtcbiAgLy8ganNpaSBjYW4ndCBoYW5kbGUgYGdldEZvb2AgcHJvcGVydGllcywgc2luY2UgaXQncyBpbmNvbXBhdGlibGUgd2l0aCBKYXZhXG4gIGlmIChuYW1lLm1hdGNoKC9eZ2V0W0EtWmEtel0rLykpIHJldHVybiBuYW1lLnJlcGxhY2UoXCJnZXRcIiwgXCJmZXRjaFwiKTtcbiAgLy8gYGVxdWFsc2AgaXMgYSBwcm9oaWJpdGVkIG5hbWUgaW4ganNpaVxuICBpZiAobmFtZSA9PT0gXCJlcXVhbHNcIikgcmV0dXJuIFwiZXF1YWxUb1wiO1xuICAvLyBgbm9kZWAgaXMgYWxyZWFkeSB1c2VkIGJ5IHRoZSBDb25zdHJ1Y3RzIGJhc2UgY2xhc3NcbiAgaWYgKG5hbWUgPT09IFwibm9kZVwiKSByZXR1cm4gXCJub2RlQXR0cmlidXRlXCI7XG4gIC8vIGBTeXN0ZW1gIHNoYWRvd3MgYnVpbHQtaW4gdHlwZXMgaW4gQ1NoYXJwIChzZWUgIzE0MjApXG4gIGlmIChuYW1lID09PSBcInN5c3RlbVwiKSByZXR1cm4gXCJzeXN0ZW1BdHRyaWJ1dGVcIjtcbiAgLy8gYHRmUmVzb3VyY2VUeXBlYCBpcyBhbHJlYWR5IHVzZWQgYnkgcmVzb3VyY2VzIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZGlmZmVyZW50IHJlc291cmNlIHR5cGVzXG4gIGlmIChuYW1lID09PSBcInRmUmVzb3VyY2VUeXBlXCIpIHJldHVybiBgJHtuYW1lfUF0dHJpYnV0ZWA7XG4gIC8vIGBpbXBvcnRGcm9tYCBoYXMgcG90ZW50aWFsIGZvciBjb21tb24gbmFtZSBjb2xsaXNpb24gd2l0aCBwcm92aWRlcnNcbiAgaWYgKG5hbWUgPT09IFwiaW1wb3J0RnJvbVwiKSByZXR1cm4gYCR7bmFtZX1BdHRyaWJ1dGVgO1xuICAvLyBgbW92ZWAgY291bGQgaGF2ZSBjb21tb24gbmFtZSBjb2xsaXNpb24gd2l0aCBwcm92aWRlcnNcbiAgaWYgKG5hbWUgPT09IFwibW92ZVRvXCIpIHJldHVybiBgJHtuYW1lfUF0dHJpYnV0ZWA7XG4gIC8vIGBzb2Z0d2FyZWAgYXR0cmlidXRlIGNhbiBiZSBjb25mdXNlZCB3aXRoIHRoZSBKU0lJIEphdmEgcnVudGltZSBwYWNrYWdlIChzZWUgIzMxMTUpXG4gIGlmIChuYW1lID09PSBcInNvZnR3YXJlXCIpIHJldHVybiBgJHtuYW1lfUF0dHJpYnV0ZWA7XG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgY2xhc3MgQXR0cmlidXRlTW9kZWwge1xuICBwdWJsaWMgc3RvcmFnZU5hbWU6IHN0cmluZzsgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICBwcml2YXRlIF9uYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyB0eXBlOiBBdHRyaWJ1dGVUeXBlTW9kZWw7XG4gIHB1YmxpYyBvcHRpb25hbDogYm9vbGVhbjtcbiAgcHVibGljIGNvbXB1dGVkOiBib29sZWFuO1xuICBwdWJsaWMgdGVycmFmb3JtTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgdGVycmFmb3JtRnVsbE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHB1YmxpYyBwcm92aWRlcjogYm9vbGVhbjtcbiAgcHVibGljIHJlcXVpcmVkOiBib29sZWFuO1xuICBwdWJsaWMgZm9yY2VQbGFpbkdldHRlclR5cGU/OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEF0dHJpYnV0ZU1vZGVsT3B0aW9ucykge1xuICAgIHRoaXMuc3RvcmFnZU5hbWUgPSBvcHRpb25zLnN0b3JhZ2VOYW1lO1xuICAgIHRoaXMuX25hbWUgPSBvcHRpb25zLm5hbWU7XG4gICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuICAgIHRoaXMub3B0aW9uYWwgPSBvcHRpb25zLm9wdGlvbmFsO1xuICAgIHRoaXMuY29tcHV0ZWQgPSBvcHRpb25zLmNvbXB1dGVkO1xuICAgIHRoaXMudGVycmFmb3JtTmFtZSA9IG9wdGlvbnMudGVycmFmb3JtTmFtZTtcbiAgICB0aGlzLnRlcnJhZm9ybUZ1bGxOYW1lID0gb3B0aW9ucy50ZXJyYWZvcm1GdWxsTmFtZTtcbiAgICB0aGlzLl9kZXNjcmlwdGlvbiA9IG9wdGlvbnMuZGVzY3JpcHRpb247XG4gICAgdGhpcy5wcm92aWRlciA9IG9wdGlvbnMucHJvdmlkZXI7XG4gICAgdGhpcy5yZXF1aXJlZCA9IG9wdGlvbnMucmVxdWlyZWQ7XG4gICAgdGhpcy5mb3JjZVBsYWluR2V0dGVyVHlwZSA9IG9wdGlvbnMuZm9yY2VQbGFpbkdldHRlclR5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHR5cGVEZWZpbml0aW9uKCkge1xuICAgIGNvbnN0IG9wdGlvbmFsID0gdGhpcy5vcHRpb25hbCA/IFwiP1wiIDogXCJcIjtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSR7b3B0aW9uYWx9OiAke3RoaXMudHlwZS5pbnB1dFR5cGVEZWZpbml0aW9ufWA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzQXNzaWduYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlZCB8fCB0aGlzLm9wdGlvbmFsO1xuICB9XG5cbiAgcHVibGljIGdldCBpc09wdGlvbmFsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbmFsO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1JlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVpcmVkO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1Byb3ZpZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVyO1xuICB9XG5cbiAgcHVibGljIGdldCBnZXR0ZXJUeXBlKCk6IEdldHRlclR5cGUge1xuICAgIGxldCBnZXR0ZXJUeXBlOiBHZXR0ZXJUeXBlID0geyBfdHlwZTogXCJwbGFpblwiIH07XG5cbiAgICBpZiAodGhpcy5mb3JjZVBsYWluR2V0dGVyVHlwZSkge1xuICAgICAgcmV0dXJuIGdldHRlclR5cGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNQcm92aWRlcikge1xuICAgICAgcmV0dXJuIGdldHRlclR5cGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZS5oYXNSZWZlcmVuY2VDbGFzcykge1xuICAgICAgZ2V0dGVyVHlwZSA9IHtcbiAgICAgICAgX3R5cGU6IFwic3RvcmVkX2NsYXNzXCIsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmNvbXB1dGVkICYmXG4gICAgICAhdGhpcy5pc0Fzc2lnbmFibGUgJiZcbiAgICAgICghdGhpcy50eXBlLmlzVG9rZW5pemFibGUgfHwgdGhpcy50eXBlLnR5cGVNb2RlbFR5cGUgPT09IFwibWFwXCIpXG4gICAgKSB7XG4gICAgICBnZXR0ZXJUeXBlID0ge1xuICAgICAgICBfdHlwZTogXCJzdG9yZWRfY2xhc3NcIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldHRlclR5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzU3RvcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzQXNzaWduYWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2V0dGVyVHlwZSgpOiBTZXR0ZXJUeXBlIHtcbiAgICBpZiAoIXRoaXMuaXNTdG9yZWQpIHtcbiAgICAgIHJldHVybiB7IF90eXBlOiBcIm5vbmVcIiB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmdldHRlclR5cGUuX3R5cGUgPT09IFwic3RvcmVkX2NsYXNzXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF90eXBlOiBcInN0b3JlZF9jbGFzc1wiLFxuICAgICAgICB0eXBlOiB0aGlzLnR5cGUuaW5wdXRUeXBlRGVmaW5pdGlvbixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNldFwiLFxuICAgICAgdHlwZTogYCR7dGhpcy50eXBlLmlucHV0VHlwZURlZmluaXRpb259JHtcbiAgICAgICAgdGhpcy5pc1Byb3ZpZGVyID8gXCIgfCB1bmRlZmluZWRcIiA6IFwiXCJcbiAgICAgIH1gLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQXR0cmlidXRlTW9kZWwuZXNjYXBlTmFtZSh0aGlzLl9uYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZXNjYXBlTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBlc2NhcGVBdHRyaWJ1dGVOYW1lKG5hbWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBkZXNjcmlwdGlvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9kZXNjcmlwdGlvbj8ucmVwbGFjZSgvJycnL2dpLCBcImBgYFwiKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZWZlcmVuY2VkVHlwZXMoaXNDb25maWdTdHJ1Y3Q6IGJvb2xlYW4pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYXR0VHlwZVN0cnVjdCA9IHRoaXMudHlwZS5zdHJ1Y3Q7XG4gICAgaWYgKCFhdHRUeXBlU3RydWN0KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuaXNBc3NpZ25hYmxlKSB7XG4gICAgICB0eXBlcy5wdXNoKGF0dFR5cGVTdHJ1Y3QubmFtZSk7XG4gICAgICB0eXBlcy5wdXNoKGF0dFR5cGVTdHJ1Y3QubWFwcGVyTmFtZSk7XG4gICAgICB0eXBlcy5wdXNoKGF0dFR5cGVTdHJ1Y3QuaGNsTWFwcGVyTmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIWF0dFR5cGVTdHJ1Y3QuaXNTaW5nbGVJdGVtICYmXG4gICAgICAoYXR0VHlwZVN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJsaXN0XCIgfHxcbiAgICAgICAgYXR0VHlwZVN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJzZXRcIilcbiAgICApIHtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5saXN0TmFtZSk7XG4gICAgfSBlbHNlIGlmIChhdHRUeXBlU3RydWN0Lm5lc3RpbmdNb2RlID09PSBcIm1hcFwiKSB7XG4gICAgICB0eXBlcy5wdXNoKGF0dFR5cGVTdHJ1Y3QubWFwTmFtZSk7XG4gICAgfSBlbHNlIGlmIChhdHRUeXBlU3RydWN0Lm5lc3RpbmdNb2RlID09PSBcIm1hcGxpc3RcIikge1xuICAgICAgdHlwZXMucHVzaChhdHRUeXBlU3RydWN0Lm1hcExpc3ROYW1lKTtcbiAgICB9IGVsc2UgaWYgKGF0dFR5cGVTdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwibWFwc2V0XCIpIHtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5tYXBMaXN0TmFtZSk7XG4gICAgfSBlbHNlIGlmIChhdHRUeXBlU3RydWN0Lm5lc3RpbmdNb2RlID09PSBcImxpc3RtYXBcIikge1xuICAgICAgdHlwZXMucHVzaChhdHRUeXBlU3RydWN0Lmxpc3RNYXBOYW1lKTtcbiAgICB9IGVsc2UgaWYgKGF0dFR5cGVTdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwic2V0bWFwXCIpIHtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5saXN0TWFwTmFtZSk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGF0dFR5cGVTdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwibGlzdGxpc3RcIiB8fFxuICAgICAgYXR0VHlwZVN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJsaXN0c2V0XCIgfHxcbiAgICAgIGF0dFR5cGVTdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwic2V0bGlzdFwiIHx8XG4gICAgICBhdHRUeXBlU3RydWN0Lm5lc3RpbmdNb2RlID09IFwic2V0c2V0XCJcbiAgICApIHtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5saXN0TGlzdE5hbWUpO1xuICAgIH0gZWxzZSBpZiAoIWlzQ29uZmlnU3RydWN0KSB7XG4gICAgICB0eXBlcy5wdXNoKGF0dFR5cGVTdHJ1Y3Qub3V0cHV0UmVmZXJlbmNlTmFtZSk7XG4gICAgfVxuICAgIC8vIG90aGVyIHR5cGVzIG9mIG5lc3RlZCBjb2xsZWN0aW9ucyBhcmVuJ3Qgc3VwcG9ydGVkXG5cbiAgICByZXR1cm4gdHlwZXM7XG4gIH1cbn1cbiJdfQ==
|
|
205
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLW1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvbW9kZWxzL2F0dHJpYnV0ZS1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDRDQUF3QztBQXVDeEMsU0FBZ0IsbUJBQW1CLENBQUMsSUFBWTtJQUM5QyxnRUFBZ0U7SUFDaEUsSUFBSSxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxPQUFPO1FBQUUsT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDO0lBQ25FLDJFQUEyRTtJQUMzRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyRSx3Q0FBd0M7SUFDeEMsSUFBSSxJQUFJLEtBQUssUUFBUTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3hDLHNEQUFzRDtJQUN0RCxJQUFJLElBQUksS0FBSyxNQUFNO1FBQUUsT0FBTyxlQUFlLENBQUM7SUFDNUMsd0RBQXdEO0lBQ3hELElBQUksSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLGlCQUFpQixDQUFDO0lBQ2hELGdHQUFnRztJQUNoRyxJQUFJLElBQUksS0FBSyxnQkFBZ0I7UUFBRSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDekQsc0VBQXNFO0lBQ3RFLElBQUksSUFBSSxLQUFLLFlBQVk7UUFBRSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDckQseURBQXlEO0lBQ3pELElBQUksSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDakQsc0ZBQXNGO0lBQ3RGLElBQUksSUFBSSxLQUFLLFVBQVU7UUFBRSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDbkQsT0FBTyxJQUFJLENBQUM7QUFD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V0FBVyxLQUFLLFNBQVM7WUFDdkMsYUFBYSxDQUFDLFdBQVcsS0FBSyxTQUFTO1lBQ3ZDLGFBQWEsQ0FBQyxXQUFXLElBQUksUUFBUSxFQUNyQyxDQUFDO1lBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekMsQ0FBQzthQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMzQixLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxxREFBcUQ7UUFFckQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUE5TUQsd0NBOE1DIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHtcbiAgQXR0cmlidXRlVHlwZU1vZGVsLFxuICBDb2xsZWN0aW9uQXR0cmlidXRlVHlwZU1vZGVsLFxufSBmcm9tIFwiLi9hdHRyaWJ1dGUtdHlwZS1tb2RlbFwiO1xuXG5leHBvcnQgdHlwZSBHZXR0ZXJUeXBlID1cbiAgfCB7IF90eXBlOiBcInBsYWluXCIgfVxuICB8IHtcbiAgICAgIF90eXBlOiBcImFyZ3NcIjtcbiAgICAgIGFyZ3M6IHN0cmluZztcbiAgICAgIHJldHVyblR5cGU/OiBzdHJpbmc7XG4gICAgICByZXR1cm5TdGF0ZW1lbnQ6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgX3R5cGU6IFwic3RvcmVkX2NsYXNzXCI7XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgU2V0dGVyVHlwZSA9XG4gIHwgeyBfdHlwZTogXCJub25lXCIgfVxuICB8IHsgX3R5cGU6IFwic2V0XCI7IHR5cGU6IHN0cmluZyB9XG4gIHwgeyBfdHlwZTogXCJwdXRcIjsgdHlwZTogc3RyaW5nIH1cbiAgfCB7IF90eXBlOiBcInN0b3JlZF9jbGFzc1wiOyB0eXBlOiBzdHJpbmcgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBdHRyaWJ1dGVNb2RlbE9wdGlvbnMge1xuICBzdG9yYWdlTmFtZTogc3RyaW5nOyAvLyBwcml2YXRlIHByb3BlcnR5XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogQXR0cmlidXRlVHlwZU1vZGVsO1xuICBvcHRpb25hbDogYm9vbGVhbjtcbiAgY29tcHV0ZWQ6IGJvb2xlYW47XG4gIHRlcnJhZm9ybU5hbWU6IHN0cmluZztcbiAgdGVycmFmb3JtRnVsbE5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGdldEF0dENhbGw/OiBzdHJpbmc7XG4gIHByb3ZpZGVyOiBib29sZWFuO1xuICByZXF1aXJlZDogYm9vbGVhbjtcbiAgZm9yY2VQbGFpbkdldHRlclR5cGU/OiBib29sZWFuOyAvLyB1c2VkIGZvciBza2lwcGluZyBhdHRyaWJ1dGUgdHlwZSBhdHRyaWJ1dGVzIHRoYXQgdXNlIHRoZSBTa2lwcGVkQXR0cmlidXRlVHlwZU1vZGVsIHdoaWNoIHJldHVybnMgYW4gaW50ZXJwb2xhdGlvbiBhbmQgaGFzIG5vIHN0b3JlZCB0eXBlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVBdHRyaWJ1dGVOYW1lKG5hbWU6IHN0cmluZykge1xuICAvLyBgc2VsZmAgYW5kIGBidWlsZGAgZG9lc24ndCB3b3JrIGluIGFzIHByb3BlcnR5IG5hbWUgaW4gUHl0aG9uXG4gIGlmIChuYW1lID09PSBcInNlbGZcIiB8fCBuYW1lID09PSBcImJ1aWxkXCIpIHJldHVybiBgJHtuYW1lfUF0dHJpYnV0ZWA7XG4gIC8vIGpzaWkgY2FuJ3QgaGFuZGxlIGBnZXRGb29gIHByb3BlcnRpZXMsIHNpbmNlIGl0J3MgaW5jb21wYXRpYmxlIHdpdGggSmF2YVxuICBpZiAobmFtZS5tYXRjaCgvXmdldFtBLVphLXpdKy8pKSByZXR1cm4gbmFtZS5yZXBsYWNlKFwiZ2V0XCIsIFwiZmV0Y2hcIik7XG4gIC8vIGBlcXVhbHNgIGlzIGEgcHJvaGliaXRlZCBuYW1lIGluIGpzaWlcbiAgaWYgKG5hbWUgPT09IFwiZXF1YWxzXCIpIHJldHVybiBcImVxdWFsVG9cIjtcbiAgLy8gYG5vZGVgIGlzIGFscmVhZHkgdXNlZCBieSB0aGUgQ29uc3RydWN0cyBiYXNlIGNsYXNzXG4gIGlmIChuYW1lID09PSBcIm5vZGVcIikgcmV0dXJuIFwibm9kZUF0dHJpYnV0ZVwiO1xuICAvLyBgU3lzdGVtYCBzaGFkb3dzIGJ1aWx0LWluIHR5cGVzIGluIENTaGFycCAoc2VlICMxNDIwKVxuICBpZiAobmFtZSA9PT0gXCJzeXN0ZW1cIikgcmV0dXJuIFwic3lzdGVtQXR0cmlidXRlXCI7XG4gIC8vIGB0ZlJlc291cmNlVHlwZWAgaXMgYWxyZWFkeSB1c2VkIGJ5IHJlc291cmNlcyB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGRpZmZlcmVudCByZXNvdXJjZSB0eXBlc1xuICBpZiAobmFtZSA9PT0gXCJ0ZlJlc291cmNlVHlwZVwiKSByZXR1cm4gYCR7bmFtZX1BdHRyaWJ1dGVgO1xuICAvLyBgaW1wb3J0RnJvbWAgaGFzIHBvdGVudGlhbCBmb3IgY29tbW9uIG5hbWUgY29sbGlzaW9uIHdpdGggcHJvdmlkZXJzXG4gIGlmIChuYW1lID09PSBcImltcG9ydEZyb21cIikgcmV0dXJuIGAke25hbWV9QXR0cmlidXRlYDtcbiAgLy8gYG1vdmVgIGNvdWxkIGhhdmUgY29tbW9uIG5hbWUgY29sbGlzaW9uIHdpdGggcHJvdmlkZXJzXG4gIGlmIChuYW1lID09PSBcIm1vdmVUb1wiKSByZXR1cm4gYCR7bmFtZX1BdHRyaWJ1dGVgO1xuICAvLyBgc29mdHdhcmVgIGF0dHJpYnV0ZSBjYW4gYmUgY29uZnVzZWQgd2l0aCB0aGUgSlNJSSBKYXZhIHJ1bnRpbWUgcGFja2FnZSAoc2VlICMzMTE1KVxuICBpZiAobmFtZSA9PT0gXCJzb2Z0d2FyZVwiKSByZXR1cm4gYCR7bmFtZX1BdHRyaWJ1dGVgO1xuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZU1vZGVsIHtcbiAgcHVibGljIHN0b3JhZ2VOYW1lOiBzdHJpbmc7IC8vIHByaXZhdGUgcHJvcGVydHlcbiAgcHJpdmF0ZSBfbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgdHlwZTogQXR0cmlidXRlVHlwZU1vZGVsO1xuICBwdWJsaWMgb3B0aW9uYWw6IGJvb2xlYW47XG4gIHB1YmxpYyBjb21wdXRlZDogYm9vbGVhbjtcbiAgcHVibGljIHRlcnJhZm9ybU5hbWU6IHN0cmluZztcbiAgcHVibGljIHRlcnJhZm9ybUZ1bGxOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Rlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBwdWJsaWMgcHJvdmlkZXI6IGJvb2xlYW47XG4gIHB1YmxpYyByZXF1aXJlZDogYm9vbGVhbjtcbiAgcHVibGljIGZvcmNlUGxhaW5HZXR0ZXJUeXBlPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBsb2dnZWRTdG9yZWRDbGFzc1VuYXZhaWxhYmxlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogQXR0cmlidXRlTW9kZWxPcHRpb25zKSB7XG4gICAgdGhpcy5zdG9yYWdlTmFtZSA9IG9wdGlvbnMuc3RvcmFnZU5hbWU7XG4gICAgdGhpcy5fbmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG4gICAgdGhpcy5vcHRpb25hbCA9IG9wdGlvbnMub3B0aW9uYWw7XG4gICAgdGhpcy5jb21wdXRlZCA9IG9wdGlvbnMuY29tcHV0ZWQ7XG4gICAgdGhpcy50ZXJyYWZvcm1OYW1lID0gb3B0aW9ucy50ZXJyYWZvcm1OYW1lO1xuICAgIHRoaXMudGVycmFmb3JtRnVsbE5hbWUgPSBvcHRpb25zLnRlcnJhZm9ybUZ1bGxOYW1lO1xuICAgIHRoaXMuX2Rlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLnByb3ZpZGVyID0gb3B0aW9ucy5wcm92aWRlcjtcbiAgICB0aGlzLnJlcXVpcmVkID0gb3B0aW9ucy5yZXF1aXJlZDtcbiAgICB0aGlzLmZvcmNlUGxhaW5HZXR0ZXJUeXBlID0gb3B0aW9ucy5mb3JjZVBsYWluR2V0dGVyVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdHlwZURlZmluaXRpb24oKSB7XG4gICAgY29uc3Qgb3B0aW9uYWwgPSB0aGlzLm9wdGlvbmFsID8gXCI/XCIgOiBcIlwiO1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9JHtvcHRpb25hbH06ICR7dGhpcy50eXBlLmlucHV0VHlwZURlZmluaXRpb259YDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNBc3NpZ25hYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnJlcXVpcmVkIHx8IHRoaXMub3B0aW9uYWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzT3B0aW9uYWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9uYWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzUmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWlyZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzUHJvdmlkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGdldHRlclR5cGUoKTogR2V0dGVyVHlwZSB7XG4gICAgbGV0IGdldHRlclR5cGU6IEdldHRlclR5cGUgPSB7IF90eXBlOiBcInBsYWluXCIgfTtcblxuICAgIGlmICh0aGlzLmZvcmNlUGxhaW5HZXR0ZXJUeXBlKSB7XG4gICAgICByZXR1cm4gZ2V0dGVyVHlwZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1Byb3ZpZGVyKSB7XG4gICAgICByZXR1cm4gZ2V0dGVyVHlwZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50eXBlLmhhc1JlZmVyZW5jZUNsYXNzKSB7XG4gICAgICBnZXR0ZXJUeXBlID0ge1xuICAgICAgICBfdHlwZTogXCJzdG9yZWRfY2xhc3NcIixcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuY29tcHV0ZWQgJiZcbiAgICAgICF0aGlzLmlzQXNzaWduYWJsZSAmJlxuICAgICAgKCF0aGlzLnR5cGUuaXNUb2tlbml6YWJsZSB8fCB0aGlzLnR5cGUudHlwZU1vZGVsVHlwZSA9PT0gXCJtYXBcIilcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLnR5cGUuaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlKSB7XG4gICAgICAgIC8vIERlZmVuc2l2ZSBmYWxsYmFjazogbmVpdGhlciB0aGUgY29tcG9zZWQgc3RvcmVkIGNsYXNzIG5hbWUgKGUuZy5cbiAgICAgICAgLy8gXCJTdHJpbmdMaXN0TWFwTWFwXCIpIG5vciBhIGNvbGxhcHNlZCBuZWFyZXN0LUFueSB3cmFwcGVyIChlLmcuIFwiQW55TWFwTWFwXCIpXG4gICAgICAgIC8vIGV4aXN0cyBpbiB0aGUgY29yZSBjZGt0biBwYWNrYWdlIGZvciB0aGlzIHR5cGUuIFRoaXMgc2hvdWxkIGJlIHJhcmUgLSBzZWVcbiAgICAgICAgLy8gcmVzb2x2ZVN0b3JlZENsYXNzTmFtZSBpbiBzdXBwb3J0ZWQtc3RvcmVkLWNsYXNzZXMudHMgLSBzbyBsb2cgaXQgbG91ZGx5IHRvXG4gICAgICAgIC8vIG1ha2UgcmVncmVzc2lvbnMgaW4gdGhlIGNvbGxhcHNlIGxvZ2ljIHZpc2libGUuXG4gICAgICAgIGlmICghdGhpcy5sb2dnZWRTdG9yZWRDbGFzc1VuYXZhaWxhYmxlKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZWRTdG9yZWRDbGFzc1VuYXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgICAgICBgTm8gc3RvcmVkIGNsYXNzIChub3QgZXZlbiBhIGNvbGxhcHNlZCBuZWFyZXN0LUFueSB3cmFwcGVyKSBpcyBhdmFpbGFibGUgZm9yIGNvbXB1dGVkIGF0dHJpYnV0ZSBcIiR7dGhpcy50ZXJyYWZvcm1GdWxsTmFtZX1cIiAoY29tcG9zZWQgc3RvcmVkQ2xhc3NUeXBlOiBcIiR7dGhpcy50eXBlLnN0b3JlZENsYXNzVHlwZX1cIikuIEZhbGxpbmcgYmFjayB0byBhIHBsYWluLCB1bnR5cGVkIGdldHRlci5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdldHRlclR5cGUgPSB7XG4gICAgICAgICAgX3R5cGU6IFwic3RvcmVkX2NsYXNzXCIsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldHRlclR5cGU7XG4gIH1cblxuICAvLyBSZXBvcnRzIHdoZXRoZXIgdGhpcyBhdHRyaWJ1dGUncyBnZXR0ZXIgc2l0cyBhdCBhIFwic3RvcmVkIGNsYXNzIGJvdW5kYXJ5XCIgdGhhdCBpc1xuICAvLyB3b3J0aCBkb2N1bWVudGluZzogXCJjb2xsYXBzZWRcIiB3aGVuIGEgZGVlcGVyLCB1bnN1cHBvcnRlZCBuZXN0aW5nIHdhcyBjb2xsYXBzZWQgaW50b1xuICAvLyB0aGUgbmVhcmVzdCB0eXBlZCBcIkFueVwiLXdyYXBwZXIgKGUuZy4gXCJBbnlNYXBNYXBcIiksIG9yIFwiZmFsbGJhY2tcIiB3aGVuIG5vIHN0b3JlZCBjbGFzc1xuICAvLyBhdCBhbGwgaXMgYXZhaWxhYmxlIGFuZCBhIHBsYWluLCB1bnR5cGVkIGdldHRlciBpcyBlbWl0dGVkIGluc3RlYWQuIE1pcnJvcnMgdGhlIHNhbWVcbiAgLy8gY29uZGl0aW9uIHRyZWUgYXMgZ2V0dGVyVHlwZSBhYm92ZSwgc28gaXQgb25seSBldmVyIHJlcG9ydHMgYSBib3VuZGFyeSBmb3IgYXR0cmlidXRlc1xuICAvLyB0aGF0IGFjdHVhbGx5IHdlbnQgdGhyb3VnaCB0aGF0IGNvbXB1dGVkLWNvbGxlY3Rpb24gYnJhbmNoIC0gcGxhaW4gZ2V0dGVycyBmb3JcbiAgLy8gb3JkaW5hcnkgdG9rZW5pemFibGUgdHlwZXMgKGUuZy4gbGlzdChzdHJpbmcpKSBhcmUgbmV2ZXIgZmxhZ2dlZC5cbiAgcHVibGljIGdldCBzdG9yZWRDbGFzc0JvdW5kYXJ5S2luZCgpOiBcImNvbGxhcHNlZFwiIHwgXCJmYWxsYmFja1wiIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5mb3JjZVBsYWluR2V0dGVyVHlwZSB8fCB0aGlzLmlzUHJvdmlkZXIpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZS5oYXNSZWZlcmVuY2VDbGFzcykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbXB1dGVkICYmXG4gICAgICAhdGhpcy5pc0Fzc2lnbmFibGUgJiZcbiAgICAgICghdGhpcy50eXBlLmlzVG9rZW5pemFibGUgfHwgdGhpcy50eXBlLnR5cGVNb2RlbFR5cGUgPT09IFwibWFwXCIpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy50eXBlLmlzU3RvcmVkQ2xhc3NVbmF2YWlsYWJsZSkge1xuICAgICAgICByZXR1cm4gXCJmYWxsYmFja1wiO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNvbHZlZFN0b3JlZENsYXNzID0gKHRoaXMudHlwZSBhcyBDb2xsZWN0aW9uQXR0cmlidXRlVHlwZU1vZGVsKVxuICAgICAgICAucmVzb2x2ZWRTdG9yZWRDbGFzcztcbiAgICAgIGlmIChyZXNvbHZlZFN0b3JlZENsYXNzPy5jb2xsYXBzZWQpIHtcbiAgICAgICAgcmV0dXJuIFwiY29sbGFwc2VkXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNTdG9yZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNBc3NpZ25hYmxlO1xuICB9XG5cbiAgcHVibGljIGdldCBzZXR0ZXJUeXBlKCk6IFNldHRlclR5cGUge1xuICAgIGlmICghdGhpcy5pc1N0b3JlZCkge1xuICAgICAgcmV0dXJuIHsgX3R5cGU6IFwibm9uZVwiIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2V0dGVyVHlwZS5fdHlwZSA9PT0gXCJzdG9yZWRfY2xhc3NcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX3R5cGU6IFwic3RvcmVkX2NsYXNzXCIsXG4gICAgICAgIHR5cGU6IHRoaXMudHlwZS5pbnB1dFR5cGVEZWZpbml0aW9uLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic2V0XCIsXG4gICAgICB0eXBlOiBgJHt0aGlzLnR5cGUuaW5wdXRUeXBlRGVmaW5pdGlvbn0ke1xuICAgICAgICB0aGlzLmlzUHJvdmlkZXIgPyBcIiB8IHVuZGVmaW5lZFwiIDogXCJcIlxuICAgICAgfWAsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBBdHRyaWJ1dGVNb2RlbC5lc2NhcGVOYW1lKHRoaXMuX25hbWUpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBlc2NhcGVOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGVzY2FwZUF0dHJpYnV0ZU5hbWUobmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlc2NyaXB0aW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Rlc2NyaXB0aW9uPy5yZXBsYWNlKC8nJycvZ2ksIFwiYGBgXCIpO1xuICB9XG5cbiAgcHVibGljIGdldFJlZmVyZW5jZWRUeXBlcyhpc0NvbmZpZ1N0cnVjdDogYm9vbGVhbik6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBhdHRUeXBlU3RydWN0ID0gdGhpcy50eXBlLnN0cnVjdDtcbiAgICBpZiAoIWF0dFR5cGVTdHJ1Y3QpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAodGhpcy5pc0Fzc2lnbmFibGUpIHtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5uYW1lKTtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5tYXBwZXJOYW1lKTtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5oY2xNYXBwZXJOYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhYXR0VHlwZVN0cnVjdC5pc1NpbmdsZUl0ZW0gJiZcbiAgICAgIChhdHRUeXBlU3RydWN0Lm5lc3RpbmdNb2RlID09PSBcImxpc3RcIiB8fFxuICAgICAgICBhdHRUeXBlU3RydWN0Lm5lc3RpbmdNb2RlID09PSBcInNldFwiKVxuICAgICkge1xuICAgICAgdHlwZXMucHVzaChhdHRUeXBlU3RydWN0Lmxpc3ROYW1lKTtcbiAgICB9IGVsc2UgaWYgKGF0dFR5cGVTdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwibWFwXCIpIHtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5tYXBOYW1lKTtcbiAgICB9IGVsc2UgaWYgKGF0dFR5cGVTdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwibWFwbGlzdFwiKSB7XG4gICAgICB0eXBlcy5wdXNoKGF0dFR5cGVTdHJ1Y3QubWFwTGlzdE5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYXR0VHlwZVN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJtYXBzZXRcIikge1xuICAgICAgdHlwZXMucHVzaChhdHRUeXBlU3RydWN0Lm1hcExpc3ROYW1lKTtcbiAgICB9IGVsc2UgaWYgKGF0dFR5cGVTdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwibGlzdG1hcFwiKSB7XG4gICAgICB0eXBlcy5wdXNoKGF0dFR5cGVTdHJ1Y3QubGlzdE1hcE5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYXR0VHlwZVN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJzZXRtYXBcIikge1xuICAgICAgdHlwZXMucHVzaChhdHRUeXBlU3RydWN0Lmxpc3RNYXBOYW1lKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgYXR0VHlwZVN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJsaXN0bGlzdFwiIHx8XG4gICAgICBhdHRUeXBlU3RydWN0Lm5lc3RpbmdNb2RlID09PSBcImxpc3RzZXRcIiB8fFxuICAgICAgYXR0VHlwZVN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJzZXRsaXN0XCIgfHxcbiAgICAgIGF0dFR5cGVTdHJ1Y3QubmVzdGluZ01vZGUgPT0gXCJzZXRzZXRcIlxuICAgICkge1xuICAgICAgdHlwZXMucHVzaChhdHRUeXBlU3RydWN0Lmxpc3RMaXN0TmFtZSk7XG4gICAgfSBlbHNlIGlmICghaXNDb25maWdTdHJ1Y3QpIHtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5vdXRwdXRSZWZlcmVuY2VOYW1lKTtcbiAgICB9XG4gICAgLy8gb3RoZXIgdHlwZXMgb2YgbmVzdGVkIGNvbGxlY3Rpb25zIGFyZW4ndCBzdXBwb3J0ZWRcblxuICAgIHJldHVybiB0eXBlcztcbiAgfVxufVxuIl19
|
|
@@ -11,7 +11,9 @@ export interface AttributeTypeModel {
|
|
|
11
11
|
readonly typeModelType: string;
|
|
12
12
|
readonly hasReferenceClass: boolean;
|
|
13
13
|
readonly isTokenizable: boolean;
|
|
14
|
+
readonly isStoredClassUnavailable: boolean;
|
|
14
15
|
}
|
|
16
|
+
export declare function describeTerraformType(model: AttributeTypeModel): string;
|
|
15
17
|
export declare class SkippedAttributeTypeModel implements AttributeTypeModel {
|
|
16
18
|
constructor();
|
|
17
19
|
get typeModelType(): string;
|
|
@@ -25,6 +27,7 @@ export declare class SkippedAttributeTypeModel implements AttributeTypeModel {
|
|
|
25
27
|
get toHclTerraformFunction(): string;
|
|
26
28
|
get hasReferenceClass(): boolean;
|
|
27
29
|
get isTokenizable(): boolean;
|
|
30
|
+
get isStoredClassUnavailable(): boolean;
|
|
28
31
|
}
|
|
29
32
|
export declare class SimpleAttributeTypeModel implements AttributeTypeModel {
|
|
30
33
|
readonly type: string;
|
|
@@ -40,6 +43,7 @@ export declare class SimpleAttributeTypeModel implements AttributeTypeModel {
|
|
|
40
43
|
get toHclTerraformFunction(): string;
|
|
41
44
|
get hasReferenceClass(): boolean;
|
|
42
45
|
get isTokenizable(): boolean;
|
|
46
|
+
get isStoredClassUnavailable(): boolean;
|
|
43
47
|
}
|
|
44
48
|
export declare class StructAttributeTypeModel implements AttributeTypeModel {
|
|
45
49
|
readonly struct: Struct;
|
|
@@ -54,9 +58,14 @@ export declare class StructAttributeTypeModel implements AttributeTypeModel {
|
|
|
54
58
|
get toHclTerraformFunction(): string;
|
|
55
59
|
get hasReferenceClass(): boolean;
|
|
56
60
|
get isTokenizable(): boolean;
|
|
61
|
+
get isStoredClassUnavailable(): boolean;
|
|
57
62
|
}
|
|
58
63
|
export interface CollectionAttributeTypeModel extends AttributeTypeModel {
|
|
59
64
|
elementType: AttributeTypeModel;
|
|
65
|
+
readonly resolvedStoredClass: {
|
|
66
|
+
name: string;
|
|
67
|
+
collapsed: boolean;
|
|
68
|
+
} | undefined;
|
|
60
69
|
}
|
|
61
70
|
export declare class ListAttributeTypeModel implements CollectionAttributeTypeModel {
|
|
62
71
|
readonly elementType: AttributeTypeModel;
|
|
@@ -68,12 +77,17 @@ export declare class ListAttributeTypeModel implements CollectionAttributeTypeMo
|
|
|
68
77
|
get isComplex(): boolean;
|
|
69
78
|
getStoredClassInitializer(name: string): string;
|
|
70
79
|
get storedClassType(): string;
|
|
80
|
+
get resolvedStoredClass(): {
|
|
81
|
+
name: string;
|
|
82
|
+
collapsed: boolean;
|
|
83
|
+
} | undefined;
|
|
71
84
|
get inputTypeDefinition(): string;
|
|
72
85
|
getAttributeAccessFunction(name: string): string;
|
|
73
86
|
get toTerraformFunction(): string;
|
|
74
87
|
get toHclTerraformFunction(): string;
|
|
75
88
|
get hasReferenceClass(): boolean;
|
|
76
89
|
get isTokenizable(): boolean;
|
|
90
|
+
get isStoredClassUnavailable(): boolean;
|
|
77
91
|
}
|
|
78
92
|
export declare class SetAttributeTypeModel implements CollectionAttributeTypeModel {
|
|
79
93
|
readonly elementType: AttributeTypeModel;
|
|
@@ -85,12 +99,17 @@ export declare class SetAttributeTypeModel implements CollectionAttributeTypeMod
|
|
|
85
99
|
get isComplex(): boolean;
|
|
86
100
|
getStoredClassInitializer(name: string): string;
|
|
87
101
|
get storedClassType(): string;
|
|
102
|
+
get resolvedStoredClass(): {
|
|
103
|
+
name: string;
|
|
104
|
+
collapsed: boolean;
|
|
105
|
+
} | undefined;
|
|
88
106
|
get inputTypeDefinition(): string;
|
|
89
107
|
getAttributeAccessFunction(name: string): string;
|
|
90
108
|
get toTerraformFunction(): string;
|
|
91
109
|
get toHclTerraformFunction(): string;
|
|
92
110
|
get hasReferenceClass(): boolean;
|
|
93
111
|
get isTokenizable(): boolean;
|
|
112
|
+
get isStoredClassUnavailable(): boolean;
|
|
94
113
|
}
|
|
95
114
|
export declare class MapAttributeTypeModel implements CollectionAttributeTypeModel {
|
|
96
115
|
readonly elementType: AttributeTypeModel;
|
|
@@ -100,11 +119,16 @@ export declare class MapAttributeTypeModel implements CollectionAttributeTypeMod
|
|
|
100
119
|
get isComplex(): boolean;
|
|
101
120
|
getStoredClassInitializer(name: string): string;
|
|
102
121
|
get storedClassType(): string;
|
|
122
|
+
get resolvedStoredClass(): {
|
|
123
|
+
name: string;
|
|
124
|
+
collapsed: boolean;
|
|
125
|
+
} | undefined;
|
|
103
126
|
get inputTypeDefinition(): string;
|
|
104
127
|
getAttributeAccessFunction(name: string): string;
|
|
105
128
|
get toTerraformFunction(): string;
|
|
106
129
|
get toHclTerraformFunction(): string;
|
|
107
130
|
get hasReferenceClass(): boolean;
|
|
108
131
|
get isTokenizable(): boolean;
|
|
132
|
+
get isStoredClassUnavailable(): boolean;
|
|
109
133
|
}
|
|
110
134
|
//# sourceMappingURL=attribute-type-model.d.ts.map
|
|
@@ -1,7 +1,32 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MapAttributeTypeModel = exports.SetAttributeTypeModel = exports.ListAttributeTypeModel = exports.StructAttributeTypeModel = exports.SimpleAttributeTypeModel = exports.SkippedAttributeTypeModel = void 0;
|
|
3
|
+
exports.MapAttributeTypeModel = exports.SetAttributeTypeModel = exports.ListAttributeTypeModel = exports.StructAttributeTypeModel = exports.SimpleAttributeTypeModel = exports.SkippedAttributeTypeModel = exports.describeTerraformType = void 0;
|
|
4
4
|
const util_1 = require("../../../util");
|
|
5
|
+
const supported_stored_classes_1 = require("./supported-stored-classes");
|
|
6
|
+
// Describes the Terraform type of an attribute as its `list(...)`/`set(...)`/`map(...)`
|
|
7
|
+
// composed notation (matching how Terraform itself describes nested collection types),
|
|
8
|
+
// for use in generated JSDoc. Used only for collapsed/fallback getters (see
|
|
9
|
+
// AttributesEmitter) so it never needs to be exhaustive/perfectly stable for every shape.
|
|
10
|
+
function describeTerraformType(model) {
|
|
11
|
+
switch (model.typeModelType) {
|
|
12
|
+
case "list":
|
|
13
|
+
return `list(${describeTerraformType(model.elementType)})`;
|
|
14
|
+
case "set":
|
|
15
|
+
return `set(${describeTerraformType(model.elementType)})`;
|
|
16
|
+
case "map":
|
|
17
|
+
return `map(${describeTerraformType(model.elementType)})`;
|
|
18
|
+
case "struct":
|
|
19
|
+
return "object";
|
|
20
|
+
default:
|
|
21
|
+
// Covers both SimpleAttributeTypeModel (storedClassType is the Terraform primitive
|
|
22
|
+
// name, e.g. "string" | "number" | "boolean" | "any") and SkippedAttributeTypeModel
|
|
23
|
+
// (storedClassType is always "any").
|
|
24
|
+
return model.storedClassType === "boolean"
|
|
25
|
+
? "bool"
|
|
26
|
+
: model.storedClassType;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.describeTerraformType = describeTerraformType;
|
|
5
30
|
class SkippedAttributeTypeModel {
|
|
6
31
|
constructor() { }
|
|
7
32
|
get typeModelType() {
|
|
@@ -38,6 +63,9 @@ class SkippedAttributeTypeModel {
|
|
|
38
63
|
get isTokenizable() {
|
|
39
64
|
return false;
|
|
40
65
|
}
|
|
66
|
+
get isStoredClassUnavailable() {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
41
69
|
}
|
|
42
70
|
exports.SkippedAttributeTypeModel = SkippedAttributeTypeModel;
|
|
43
71
|
class SimpleAttributeTypeModel {
|
|
@@ -83,6 +111,9 @@ class SimpleAttributeTypeModel {
|
|
|
83
111
|
get isTokenizable() {
|
|
84
112
|
return true;
|
|
85
113
|
}
|
|
114
|
+
get isStoredClassUnavailable() {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
86
117
|
}
|
|
87
118
|
exports.SimpleAttributeTypeModel = SimpleAttributeTypeModel;
|
|
88
119
|
class StructAttributeTypeModel {
|
|
@@ -120,6 +151,9 @@ class StructAttributeTypeModel {
|
|
|
120
151
|
get isTokenizable() {
|
|
121
152
|
return false;
|
|
122
153
|
}
|
|
154
|
+
get isStoredClassUnavailable() {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
123
157
|
}
|
|
124
158
|
exports.StructAttributeTypeModel = StructAttributeTypeModel;
|
|
125
159
|
class ListAttributeTypeModel {
|
|
@@ -149,13 +183,16 @@ class ListAttributeTypeModel {
|
|
|
149
183
|
return `new ${this.storedClassType}(this, "${name}", false)`;
|
|
150
184
|
}
|
|
151
185
|
else {
|
|
152
|
-
return `new cdktn.${
|
|
186
|
+
return `new cdktn.${this.resolvedStoredClass.name}(this, "${name}", false)`;
|
|
153
187
|
}
|
|
154
188
|
}
|
|
155
189
|
}
|
|
156
190
|
get storedClassType() {
|
|
157
191
|
return `${this.elementType.storedClassType}List`;
|
|
158
192
|
}
|
|
193
|
+
get resolvedStoredClass() {
|
|
194
|
+
return (0, supported_stored_classes_1.resolveStoredClassName)(this.storedClassType, this.elementType.typeModelType);
|
|
195
|
+
}
|
|
159
196
|
get inputTypeDefinition() {
|
|
160
197
|
if (this.isSingleItem) {
|
|
161
198
|
return this.elementType.inputTypeDefinition;
|
|
@@ -207,6 +244,33 @@ class ListAttributeTypeModel {
|
|
|
207
244
|
return false;
|
|
208
245
|
}
|
|
209
246
|
}
|
|
247
|
+
// Complex (struct) elements generate their own class in the provider output, so they
|
|
248
|
+
// are always fine. Otherwise a stored class is only emitted if resolvedStoredClass
|
|
249
|
+
// finds one - see getStoredClassInitializer above. Note: hasReferenceClass (which
|
|
250
|
+
// triggers a stored_class getter) is only ever true here when isSingleItem or isComplex
|
|
251
|
+
// is true, and isSingleItem is only set for struct/block nesting (which is also
|
|
252
|
+
// isComplex), so this check only needs to guard the non-complex, non-single-item case.
|
|
253
|
+
//
|
|
254
|
+
// storedClassType is itself built up recursively (elementType.storedClassType is
|
|
255
|
+
// composed the same way for nested collections), so it already fully encodes the
|
|
256
|
+
// entire nested chain in one string (e.g. map(map(list(string))) composes all the way
|
|
257
|
+
// up to "stringListMapMap"). resolvedStoredClass first checks this type's own composed
|
|
258
|
+
// name (e.g. "StringListMapMap") against the fixed set of hand-written core classes; if
|
|
259
|
+
// that name doesn't exist, it falls back to the nearest typed "Any"-wrapper that still
|
|
260
|
+
// encodes this type's own layer and its element's layer (e.g. "AnyMapMap"), collapsing
|
|
261
|
+
// only the unsupported inner shape while preserving typed navigation for the outer
|
|
262
|
+
// layers; only if neither exists does it fall through to the plain, untyped getter (see
|
|
263
|
+
// AttributeModel.getterType). It must NOT also OR in
|
|
264
|
+
// elementType.isStoredClassUnavailable, since an inner element's un-composed name (e.g.
|
|
265
|
+
// "StringList" for a plain list(string) nested inside a map) is never separately
|
|
266
|
+
// instantiated and is irrelevant on its own; ORing it in would produce false positives
|
|
267
|
+
// that regress supported nestings such as map(list(string)) => cdktn.StringListMap.
|
|
268
|
+
get isStoredClassUnavailable() {
|
|
269
|
+
if (this.isComplex) {
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
return this.resolvedStoredClass === undefined;
|
|
273
|
+
}
|
|
210
274
|
}
|
|
211
275
|
exports.ListAttributeTypeModel = ListAttributeTypeModel;
|
|
212
276
|
class SetAttributeTypeModel {
|
|
@@ -236,13 +300,16 @@ class SetAttributeTypeModel {
|
|
|
236
300
|
return `new ${this.storedClassType}(this, "${name}", true)`;
|
|
237
301
|
}
|
|
238
302
|
else {
|
|
239
|
-
return `new cdktn.${
|
|
303
|
+
return `new cdktn.${this.resolvedStoredClass.name}(this, "${name}", true)`;
|
|
240
304
|
}
|
|
241
305
|
}
|
|
242
306
|
}
|
|
243
307
|
get storedClassType() {
|
|
244
308
|
return `${this.elementType.storedClassType}List`;
|
|
245
309
|
}
|
|
310
|
+
get resolvedStoredClass() {
|
|
311
|
+
return (0, supported_stored_classes_1.resolveStoredClassName)(this.storedClassType, this.elementType.typeModelType);
|
|
312
|
+
}
|
|
246
313
|
get inputTypeDefinition() {
|
|
247
314
|
if (this.isSingleItem) {
|
|
248
315
|
return this.elementType.inputTypeDefinition;
|
|
@@ -301,6 +368,14 @@ class SetAttributeTypeModel {
|
|
|
301
368
|
return false;
|
|
302
369
|
}
|
|
303
370
|
}
|
|
371
|
+
// See comment on ListAttributeTypeModel.isStoredClassUnavailable above - same
|
|
372
|
+
// reasoning applies here.
|
|
373
|
+
get isStoredClassUnavailable() {
|
|
374
|
+
if (this.isComplex) {
|
|
375
|
+
return false;
|
|
376
|
+
}
|
|
377
|
+
return this.resolvedStoredClass === undefined;
|
|
378
|
+
}
|
|
304
379
|
}
|
|
305
380
|
exports.SetAttributeTypeModel = SetAttributeTypeModel;
|
|
306
381
|
class MapAttributeTypeModel {
|
|
@@ -321,12 +396,15 @@ class MapAttributeTypeModel {
|
|
|
321
396
|
return `new ${this.storedClassType}(this, "${name}")`;
|
|
322
397
|
}
|
|
323
398
|
else {
|
|
324
|
-
return `new cdktn.${
|
|
399
|
+
return `new cdktn.${this.resolvedStoredClass.name}(this, "${name}")`;
|
|
325
400
|
}
|
|
326
401
|
}
|
|
327
402
|
get storedClassType() {
|
|
328
403
|
return `${this.elementType.storedClassType}Map`;
|
|
329
404
|
}
|
|
405
|
+
get resolvedStoredClass() {
|
|
406
|
+
return (0, supported_stored_classes_1.resolveStoredClassName)(this.storedClassType, this.elementType.typeModelType);
|
|
407
|
+
}
|
|
330
408
|
get inputTypeDefinition() {
|
|
331
409
|
// map of booleans has token support, but booleans don't
|
|
332
410
|
if (this.elementType.storedClassType === "boolean") {
|
|
@@ -371,6 +449,14 @@ class MapAttributeTypeModel {
|
|
|
371
449
|
return false;
|
|
372
450
|
}
|
|
373
451
|
}
|
|
452
|
+
// See comment on ListAttributeTypeModel.isStoredClassUnavailable above - same
|
|
453
|
+
// reasoning applies here (MapAttributeTypeModel.hasReferenceClass is just isComplex).
|
|
454
|
+
get isStoredClassUnavailable() {
|
|
455
|
+
if (this.isComplex) {
|
|
456
|
+
return false;
|
|
457
|
+
}
|
|
458
|
+
return this.resolvedStoredClass === undefined;
|
|
459
|
+
}
|
|
374
460
|
}
|
|
375
461
|
exports.MapAttributeTypeModel = MapAttributeTypeModel;
|
|
376
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLXR5cGUtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2V0L2dlbmVyYXRvci9tb2RlbHMvYXR0cmlidXRlLXR5cGUtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0Esd0NBQThEO0FBZ0I5RCxNQUFhLHlCQUF5QjtJQUNwQyxnQkFBZSxDQUFDO0lBRWhCLElBQUksYUFBYTtRQUNmLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQseUJBQXlCLENBQUMsS0FBYTtRQUNyQyxXQUFXO1FBQ1gsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELDBCQUEwQixDQUFDLElBQVk7UUFDckMsT0FBTyxtQ0FBbUMsSUFBSSxJQUFJLENBQUM7SUFDckQsQ0FBQztJQUVELElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUksc0JBQXNCO1FBQ3hCLE9BQU8seUJBQXlCLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGO0FBL0NELDhEQStDQztBQUVELE1BQWEsd0JBQXdCO0lBQ25DLFlBQTRCLElBQVk7UUFBWixTQUFJLEdBQUosSUFBSSxDQUFRO0lBQUcsQ0FBQztJQUU1QyxJQUFJLGFBQWE7UUFDZixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFD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SyxRQUFRLEVBQUUsQ0FBQztZQUNuRSxPQUFPLG1DQUFtQyxJQUFJLElBQUksQ0FBQztRQUNyRCxDQUFDO1FBRUQsT0FBTyxXQUFXLElBQUEscUJBQWMsRUFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FDckIsY0FBYyxJQUFJLElBQUksQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsT0FBTyxvQkFBb0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsR0FBRyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN4QixPQUFPLHVCQUF1QixJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixHQUFHLENBQUM7SUFDM0UsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pDLEtBQUssUUFBUTtnQkFDWCxPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssUUFBUTtnQkFDWCxPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssU0FBUztnQkFDWixPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssS0FBSztnQkFDUixPQUFPLElBQUksQ0FBQztZQUNkO2dCQUNFLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUE5RUQsc0RBOEVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IFN0cnVjdCB9IGZyb20gXCIuL3N0cnVjdFwiO1xuaW1wb3J0IHsgdXBwZXJjYXNlRmlyc3QsIGRvd25jYXNlRmlyc3QgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZVR5cGVNb2RlbCB7XG4gIHJlYWRvbmx5IHN0cnVjdD86IFN0cnVjdDsgLy8gY29tcGxleCBvYmplY3QgdHlwZSBjb250YWluZWQgd2l0aGluIHRoZSB0eXBlXG4gIHJlYWRvbmx5IGlzQ29tcGxleDogYm9vbGVhbjsgLy8gYmFzaWNhbGx5IHRoZSBzYW1lIGFzIGhhdmluZyBhIHN0cnVjdFxuICBnZXRTdG9yZWRDbGFzc0luaXRpYWxpemVyKG5hbWU6IHN0cmluZyk6IHN0cmluZzsgLy8gaW5pdGlhbGl6ZXIgZm9yIGtlZXBpbmcgY2xhc3MgbmVlZGVkIHRvIGtlZXAgdHJhY2sgb2YgcmVmZXJlbmNlIGFjY2Vzc1xuICByZWFkb25seSBzdG9yZWRDbGFzc1R5cGU6IHN0cmluZzsgLy8gdXNlZCBtYWlubHkgYnkgY29sbGVjdGlvbiB0eXBlcyB0byBnZW5lcmF0ZSB0aGVpciBzdG9yZWQgY2xhc3MgaW5pdGlhbGl6ZXJcbiAgcmVhZG9ubHkgaW5wdXRUeXBlRGVmaW5pdGlvbjogc3RyaW5nOyAvLyB0aGlzIGlzIHRoZSB0eXBlIHVzZWQgZm9yIGlucHV0dGluZyB2YWx1ZXNcbiAgZ2V0QXR0cmlidXRlQWNjZXNzRnVuY3Rpb24obmFtZTogc3RyaW5nKTogc3RyaW5nOyAvLyB0aGlzIGlzIGZvciBnZXR0aW5nIHJlZmVyZW5jZSBmb3Igc2ltcGxlIHR5cGVzXG4gIHJlYWRvbmx5IHRvVGVycmFmb3JtRnVuY3Rpb246IHN0cmluZzsgLy8gdGhpcyBpcyBmb3IgY29udmVydGluZyBpbnB1dCB2YWx1ZXMgdG8gVGVycmFmb3JtIHN5bnRheFxuICByZWFkb25seSB0b0hjbFRlcnJhZm9ybUZ1bmN0aW9uOiBzdHJpbmc7IC8vIHRoaXMgaXMgZm9yIGNvbnZlcnRpbmcgaW5wdXQgdmFsdWVzIHRvIFRlcnJhZm9ybSBzeW50YXggaW4gSENMXG4gIHJlYWRvbmx5IHR5cGVNb2RlbFR5cGU6IHN0cmluZzsgLy8gc28gd2UgZG9uJ3QgbmVlZCB0byB1c2UgaW5zdGFuY2VvZlxuICByZWFkb25seSBoYXNSZWZlcmVuY2VDbGFzczogYm9vbGVhbjsgLy8gdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBzdG9yZWRfY2xhc3MgZ2V0dGVyIHNob3VsZCBiZSB1c2VkXG4gIHJlYWRvbmx5IGlzVG9rZW5pemFibGU6IGJvb2xlYW47IC8vIGNhbiB0aGUgdHlwZSBiZSByZXByZXNlbnRlZCBieSBhIHRva2VuIHR5cGVcbn1cblxuZXhwb3J0IGNsYXNzIFNraXBwZWRBdHRyaWJ1dGVUeXBlTW9kZWwgaW1wbGVtZW50cyBBdHRyaWJ1dGVUeXBlTW9kZWwge1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgZ2V0IHR5cGVNb2RlbFR5cGUoKSB7XG4gICAgcmV0dXJuIFwic2ltcGxlXCI7XG4gIH1cblxuICBnZXQgc3RydWN0KCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgaXNDb21wbGV4KCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldFN0b3JlZENsYXNzSW5pdGlhbGl6ZXIoX25hbWU6IHN0cmluZykge1xuICAgIC8vIG5vdCB1c2VkXG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXQgc3RvcmVkQ2xhc3NUeXBlKCkge1xuICAgIHJldHVybiBcImFueVwiO1xuICB9XG5cbiAgZ2V0IGlucHV0VHlwZURlZmluaXRpb24oKSB7XG4gICAgcmV0dXJuIFwiYW55XCI7XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVBY2Nlc3NGdW5jdGlvbihuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSgnJHtuYW1lfScpYDtcbiAgfVxuXG4gIGdldCB0b1RlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBgY2RrdG4uYW55VG9UZXJyYWZvcm1gO1xuICB9XG5cbiAgZ2V0IHRvSGNsVGVycmFmb3JtRnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGBjZGt0bi5hbnlUb0hjbFRlcnJhZm9ybWA7XG4gIH1cblxuICBnZXQgaGFzUmVmZXJlbmNlQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IGlzVG9rZW5pemFibGUoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTaW1wbGVBdHRyaWJ1dGVUeXBlTW9kZWwgaW1wbGVtZW50cyBBdHRyaWJ1dGVUeXBlTW9kZWwge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgdHlwZTogc3RyaW5nKSB7fVxuXG4gIGdldCB0eXBlTW9kZWxUeXBlKCkge1xuICAgIHJldHVybiBcInNpbXBsZVwiO1xuICB9XG5cbiAgZ2V0IHN0cnVjdCgpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IGlzQ29tcGxleCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXRTdG9yZWRDbGFzc0luaXRpYWxpemVyKF9uYW1lOiBzdHJpbmcpIHtcbiAgICAvLyBub3QgdXNlZFxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgZ2V0IHN0b3JlZENsYXNzVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0IGlucHV0VHlwZURlZmluaXRpb24oKSB7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBcImJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlO1xuICAgIH1cbiAgfVxuXG4gIGdldEF0dHJpYnV0ZUFjY2Vzc0Z1bmN0aW9uKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBgdGhpcy5nZXQke3VwcGVyY2FzZUZpcnN0KHRoaXMudHlwZSl9QXR0cmlidXRlKCcke25hbWV9JylgO1xuICB9XG5cbiAgZ2V0IHRvVGVycmFmb3JtRnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGBjZGt0bi4ke3RoaXMudHlwZX1Ub1RlcnJhZm9ybWA7XG4gIH1cblxuICBnZXQgdG9IY2xUZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYGNka3RuLiR7dGhpcy50eXBlfVRvSGNsVGVycmFmb3JtYDtcbiAgfVxuXG4gIGdldCBoYXNSZWZlcmVuY2VDbGFzcygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQgaXNUb2tlbml6YWJsZSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RydWN0QXR0cmlidXRlVHlwZU1vZGVsIGltcGxlbWVudHMgQXR0cmlidXRlVHlwZU1vZGVsIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHN0cnVjdDogU3RydWN0KSB7fVxuXG4gIGdldCB0eXBlTW9kZWxUeXBlKCkge1xuICAgIHJldHVybiBcInN0cnVjdFwiO1xuICB9XG5cbiAgZ2V0IGlzQ29tcGxleCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldFN0b3JlZENsYXNzSW5pdGlhbGl6ZXIobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGBuZXcgJHt0aGlzLnN0cnVjdC5vdXRwdXRSZWZlcmVuY2VOYW1lfSh0aGlzLCBcIiR7bmFtZX1cIilgO1xuICB9XG5cbiAgZ2V0IHN0b3JlZENsYXNzVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJ1Y3QubmFtZTtcbiAgfVxuXG4gIGdldCBpbnB1dFR5cGVEZWZpbml0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnN0cnVjdC5uYW1lO1xuICB9XG5cbiAgZ2V0QXR0cmlidXRlQWNjZXNzRnVuY3Rpb24obmFtZTogc3RyaW5nKSB7XG4gICAgLy8gVGhpcyBzaG91bG4ndCBhY3R1YWxseSBiZSBjYWxsZWRcbiAgICByZXR1cm4gYHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSgnJHtuYW1lfScpYDtcbiAgfVxuXG4gIGdldCB0b1RlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBgJHtkb3duY2FzZUZpcnN0KHRoaXMuc3RydWN0Lm5hbWUpfVRvVGVycmFmb3JtYDtcbiAgfVxuXG4gIGdldCB0b0hjbFRlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBgJHtkb3duY2FzZUZpcnN0KHRoaXMuc3RydWN0Lm5hbWUpfVRvSGNsVGVycmFmb3JtYDtcbiAgfVxuXG4gIGdldCBoYXNSZWZlcmVuY2VDbGFzcygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldCBpc1Rva2VuaXphYmxlKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25BdHRyaWJ1dGVUeXBlTW9kZWwgZXh0ZW5kcyBBdHRyaWJ1dGVUeXBlTW9kZWwge1xuICBlbGVtZW50VHlwZTogQXR0cmlidXRlVHlwZU1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgTGlzdEF0dHJpYnV0ZVR5cGVNb2RlbCBpbXBsZW1lbnRzIENvbGxlY3Rpb25BdHRyaWJ1dGVUeXBlTW9kZWwge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFR5cGU6IEF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNTaW5nbGVJdGVtOiBib29sZWFuLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNCbG9jazogYm9vbGVhbixcbiAgKSB7XG4gICAgaWYgKHRoaXMuc3RydWN0KSB7XG4gICAgICB0aGlzLnN0cnVjdC5pc1NpbmdsZUl0ZW0gPSB0aGlzLmlzU2luZ2xlSXRlbSB8fCBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBnZXQgdHlwZU1vZGVsVHlwZSgpIHtcbiAgICByZXR1cm4gXCJsaXN0XCI7XG4gIH1cblxuICBnZXQgc3RydWN0KCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLnN0cnVjdDtcbiAgfVxuXG4gIGdldCBpc0NvbXBsZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUuaXNDb21wbGV4O1xuICB9XG5cbiAgZ2V0U3RvcmVkQ2xhc3NJbml0aWFsaXplcihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pc1NpbmdsZUl0ZW0pIHtcbiAgICAgIHJldHVybiBgbmV3ICR7dGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGV9T3V0cHV0UmVmZXJlbmNlKHRoaXMsIFwiJHtuYW1lfVwiKWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmlzQ29tcGxleCkge1xuICAgICAgICByZXR1cm4gYG5ldyAke3RoaXMuc3RvcmVkQ2xhc3NUeXBlfSh0aGlzLCBcIiR7bmFtZX1cIiwgZmFsc2UpYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBgbmV3IGNka3RuLiR7dXBwZXJjYXNlRmlyc3QoXG4gICAgICAgICAgdGhpcy5zdG9yZWRDbGFzc1R5cGUsXG4gICAgICAgICl9KHRoaXMsIFwiJHtuYW1lfVwiLCBmYWxzZSlgO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBzdG9yZWRDbGFzc1R5cGUoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlfUxpc3RgO1xuICB9XG5cbiAgZ2V0IGlucHV0VHlwZURlZmluaXRpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNTaW5nbGVJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS5pbnB1dFR5cGVEZWZpbml0aW9uO1xuICAgIH0gZWxzZSBpZiAodGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gXCJBcnJheTxib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU+IHwgY2RrdG4uSVJlc29sdmFibGVcIjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb21wbGV4KSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGV9W10gfCBjZGt0bi5JUmVzb2x2YWJsZWA7XG4gICAgfSBlbHNlIGlmICh0aGlzLmVsZW1lbnRUeXBlLnR5cGVNb2RlbFR5cGUgIT09IFwic2ltcGxlXCIpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmVsZW1lbnRUeXBlLmlucHV0VHlwZURlZmluaXRpb259W10gfCBjZGt0bi5JUmVzb2x2YWJsZWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmVsZW1lbnRUeXBlLmlucHV0VHlwZURlZmluaXRpb259W11gO1xuICAgIH1cbiAgfVxuXG4gIGdldEF0dHJpYnV0ZUFjY2Vzc0Z1bmN0aW9uKG5hbWU6IHN0cmluZykge1xuICAgIHN3aXRjaCAodGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgcmV0dXJuIGB0aGlzLmdldExpc3RBdHRyaWJ1dGUoJyR7bmFtZX0nKWA7XG4gICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIHJldHVybiBgdGhpcy5nZXROdW1iZXJMaXN0QXR0cmlidXRlKCcke25hbWV9JylgO1xuICAgIH1cblxuICAgIHJldHVybiBgdGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKCcke25hbWV9JylgO1xuICB9XG5cbiAgZ2V0IHRvVGVycmFmb3JtRnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNTaW5nbGVJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS50b1RlcnJhZm9ybUZ1bmN0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gYGNka3RuLmxpc3RNYXBwZXIoJHt0aGlzLmVsZW1lbnRUeXBlLnRvVGVycmFmb3JtRnVuY3Rpb259LCAke3RoaXMuaXNCbG9ja30pYDtcbiAgfVxuXG4gIGdldCB0b0hjbFRlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmlzU2luZ2xlSXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUudG9IY2xUZXJyYWZvcm1GdW5jdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gYGNka3RuLmxpc3RNYXBwZXJIY2woJHt0aGlzLmVsZW1lbnRUeXBlLnRvSGNsVGVycmFmb3JtRnVuY3Rpb259LCAke3RoaXMuaXNCbG9ja30pYDtcbiAgfVxuXG4gIGdldCBoYXNSZWZlcmVuY2VDbGFzcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUl0ZW0gfHwgdGhpcy5pc0NvbXBsZXg7XG4gIH1cblxuICBnZXQgaXNUb2tlbml6YWJsZSgpIHtcbiAgICBzd2l0Y2ggKHRoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlKSB7XG4gICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNldEF0dHJpYnV0ZVR5cGVNb2RlbCBpbXBsZW1lbnRzIENvbGxlY3Rpb25BdHRyaWJ1dGVUeXBlTW9kZWwge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFR5cGU6IEF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNTaW5nbGVJdGVtOiBib29sZWFuLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNCbG9jazogYm9vbGVhbixcbiAgKSB7XG4gICAgaWYgKHRoaXMuc3RydWN0KSB7XG4gICAgICB0aGlzLnN0cnVjdC5pc1NpbmdsZUl0ZW0gPSB0aGlzLmlzU2luZ2xlSXRlbSB8fCBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBnZXQgdHlwZU1vZGVsVHlwZSgpIHtcbiAgICByZXR1cm4gXCJzZXRcIjtcbiAgfVxuXG4gIGdldCBzdHJ1Y3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUuc3RydWN0O1xuICB9XG5cbiAgZ2V0IGlzQ29tcGxleCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS5pc0NvbXBsZXg7XG4gIH1cblxuICBnZXRTdG9yZWRDbGFzc0luaXRpYWxpemVyKG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzU2luZ2xlSXRlbSkge1xuICAgICAgcmV0dXJuIGBuZXcgJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX1PdXRwdXRSZWZlcmVuY2UodGhpcywgXCIke25hbWV9XCIpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuaXNDb21wbGV4KSB7XG4gICAgICAgIHJldHVybiBgbmV3ICR7dGhpcy5zdG9yZWRDbGFzc1R5cGV9KHRoaXMsIFwiJHtuYW1lfVwiLCB0cnVlKWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYG5ldyBjZGt0bi4ke3VwcGVyY2FzZUZpcnN0KFxuICAgICAgICAgIHRoaXMuc3RvcmVkQ2xhc3NUeXBlLFxuICAgICAgICApfSh0aGlzLCBcIiR7bmFtZX1cIiwgdHJ1ZSlgO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBzdG9yZWRDbGFzc1R5cGUoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlfUxpc3RgO1xuICB9XG5cbiAgZ2V0IGlucHV0VHlwZURlZmluaXRpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNTaW5nbGVJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS5pbnB1dFR5cGVEZWZpbml0aW9uO1xuICAgIH0gZWxzZSBpZiAodGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gXCJBcnJheTxib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU+IHwgY2RrdG4uSVJlc29sdmFibGVcIjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb21wbGV4KSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGV9W10gfCBjZGt0bi5JUmVzb2x2YWJsZWA7XG4gICAgfSBlbHNlIGlmICh0aGlzLmVsZW1lbnRUeXBlLnR5cGVNb2RlbFR5cGUgIT09IFwic2ltcGxlXCIpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmVsZW1lbnRUeXBlLmlucHV0VHlwZURlZmluaXRpb259W10gfCBjZGt0bi5JUmVzb2x2YWJsZWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmVsZW1lbnRUeXBlLmlucHV0VHlwZURlZmluaXRpb259W11gO1xuICAgIH1cbiAgfVxuXG4gIGdldEF0dHJpYnV0ZUFjY2Vzc0Z1bmN0aW9uKG5hbWU6IHN0cmluZykge1xuICAgIHN3aXRjaCAodGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgcmV0dXJuIGBjZGt0bi5Gbi50b2xpc3QodGhpcy5nZXRMaXN0QXR0cmlidXRlKCcke25hbWV9JykpYDtcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgcmV0dXJuIGBjZGt0bi5Ub2tlbi5hc051bWJlckxpc3QoY2RrdG4uRm4udG9saXN0KHRoaXMuZ2V0TnVtYmVyTGlzdEF0dHJpYnV0ZSgnJHtuYW1lfScpKSlgO1xuICAgIH1cblxuICAgIC8vIFRva2VuLmFzQW55IGlzIHJlcXVpcmVkIGJlY2F1c2UgdG9saXN0IHJldHVybnMgYW4gQXJyYXkgZW5jb2RlZCB0b2tlbiB3aGljaCB0aGUgbGlzdE1hcHBlclxuICAgIC8vIHdvdWxkIHRyeSB0byBtYXAgb3ZlciB3aGVuIHRoaXMgaXMgcGFzc2VkIHRvIGFub3RoZXIgcmVzb3VyY2UuIFdpdGggVG9rZW4uYXNBbnkoKSBpdCBpcyBsZWZ0XG4gICAgLy8gYXMgaXMgYnkgdGhlIGxpc3RNYXBwZXIgYW5kIGlzIGxhdGVyIHByb3Blcmx5IHJlc29sdmVkIHRvIGEgcmVmZXJlbmNlXG4gICAgLy8gKHRoaXMgb25seSB3b3JrcyBpbiBUeXBlU2NyaXB0IGN1cnJlbnRseSwgc2FtZSBhcyBmb3IgcmVmZXJlbmNpbmcgbGlzdHNcbiAgICAvLyBbc2VlIFwiaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSguLi4pXCIgZnVydGhlciBiZWxvd10pXG4gICAgcmV0dXJuIGBjZGt0bi5Ub2tlbi5hc0FueShjZGt0bi5Gbi50b2xpc3QodGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKCcke25hbWV9JykpKWA7XG4gIH1cblxuICBnZXQgdG9UZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc1NpbmdsZUl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLnRvVGVycmFmb3JtRnVuY3Rpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgY2RrdG4ubGlzdE1hcHBlcigke3RoaXMuZWxlbWVudFR5cGUudG9UZXJyYWZvcm1GdW5jdGlvbn0sICR7dGhpcy5pc0Jsb2NrfSlgO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0b0hjbFRlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmlzU2luZ2xlSXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUudG9IY2xUZXJyYWZvcm1GdW5jdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGBjZGt0bi5saXN0TWFwcGVySGNsKCR7dGhpcy5lbGVtZW50VHlwZS50b0hjbFRlcnJhZm9ybUZ1bmN0aW9ufSwgJHt0aGlzLmlzQmxvY2t9KWA7XG4gIH1cblxuICBnZXQgaGFzUmVmZXJlbmNlQ2xhc3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVJdGVtIHx8IHRoaXMuaXNDb21wbGV4O1xuICB9XG5cbiAgZ2V0IGlzVG9rZW5pemFibGUoKSB7XG4gICAgc3dpdGNoICh0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZSkge1xuICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNYXBBdHRyaWJ1dGVUeXBlTW9kZWwgaW1wbGVtZW50cyBDb2xsZWN0aW9uQXR0cmlidXRlVHlwZU1vZGVsIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGVsZW1lbnRUeXBlOiBBdHRyaWJ1dGVUeXBlTW9kZWwpIHt9XG5cbiAgZ2V0IHR5cGVNb2RlbFR5cGUoKSB7XG4gICAgcmV0dXJuIFwibWFwXCI7XG4gIH1cblxuICBnZXQgc3RydWN0KCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLnN0cnVjdDtcbiAgfVxuXG4gIGdldCBpc0NvbXBsZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUuaXNDb21wbGV4O1xuICB9XG5cbiAgZ2V0U3RvcmVkQ2xhc3NJbml0aWFsaXplcihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pc0NvbXBsZXgpIHtcbiAgICAgIHJldHVybiBgbmV3ICR7dGhpcy5zdG9yZWRDbGFzc1R5cGV9KHRoaXMsIFwiJHtuYW1lfVwiKWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgbmV3IGNka3RuLiR7dXBwZXJjYXNlRmlyc3QoXG4gICAgICAgIHRoaXMuc3RvcmVkQ2xhc3NUeXBlLFxuICAgICAgKX0odGhpcywgXCIke25hbWV9XCIpYDtcbiAgICB9XG4gIH1cblxuICBnZXQgc3RvcmVkQ2xhc3NUeXBlKCkge1xuICAgIHJldHVybiBgJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX1NYXBgO1xuICB9XG5cbiAgZ2V0IGlucHV0VHlwZURlZmluaXRpb24oKSB7XG4gICAgLy8gbWFwIG9mIGJvb2xlYW5zIGhhcyB0b2tlbiBzdXBwb3J0LCBidXQgYm9vbGVhbnMgZG9uJ3RcbiAgICBpZiAodGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gYHsgW2tleTogc3RyaW5nXTogKCR7dGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGV9IHwgY2RrdG4uSVJlc29sdmFibGUpIH1gO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0NvbXBsZXgpIHtcbiAgICAgIHJldHVybiBgeyBba2V5OiBzdHJpbmddOiAke3RoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlfSB9IHwgY2RrdG4uSVJlc29sdmFibGVgO1xuICAgIH0gZWxzZSBpZiAodGhpcy5lbGVtZW50VHlwZS50eXBlTW9kZWxUeXBlICE9PSBcInNpbXBsZVwiKSB7XG4gICAgICByZXR1cm4gYHsgW2tleTogc3RyaW5nXTogJHt0aGlzLmVsZW1lbnRUeXBlLmlucHV0VHlwZURlZmluaXRpb259IH0gfCBjZGt0bi5JUmVzb2x2YWJsZWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgeyBba2V5OiBzdHJpbmddOiAke3RoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlfSB9YDtcbiAgICB9XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVBY2Nlc3NGdW5jdGlvbihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuaXNDb21wbGV4ICYmIHRoaXMuZWxlbWVudFR5cGUudHlwZU1vZGVsVHlwZSAhPT0gXCJzaW1wbGVcIikge1xuICAgICAgcmV0dXJuIGB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoJyR7bmFtZX0nKWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGB0aGlzLmdldCR7dXBwZXJjYXNlRmlyc3QoXG4gICAgICB0aGlzLnN0b3JlZENsYXNzVHlwZSxcbiAgICApfUF0dHJpYnV0ZSgnJHtuYW1lfScpYDtcbiAgfVxuXG4gIGdldCB0b1RlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBgY2RrdG4uaGFzaE1hcHBlcigke3RoaXMuZWxlbWVudFR5cGUudG9UZXJyYWZvcm1GdW5jdGlvbn0pYDtcbiAgfVxuXG4gIGdldCB0b0hjbFRlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBgY2RrdG4uaGFzaE1hcHBlckhjbCgke3RoaXMuZWxlbWVudFR5cGUudG9IY2xUZXJyYWZvcm1GdW5jdGlvbn0pYDtcbiAgfVxuXG4gIGdldCBoYXNSZWZlcmVuY2VDbGFzcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc0NvbXBsZXg7XG4gIH1cblxuICBnZXQgaXNUb2tlbml6YWJsZSgpIHtcbiAgICBzd2l0Y2ggKHRoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlKSB7XG4gICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSBcImFueVwiOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
462
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLXR5cGUtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2V0L2dlbmVyYXRvci9tb2RlbHMvYXR0cmlidXRlLXR5cGUtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0Esd0NBQThEO0FBQzlELHlFQUFvRTtBQWlCcEUsd0ZBQXdGO0FBQ3hGLHVGQUF1RjtBQUN2Riw0RUFBNEU7QUFDNUUsMEZBQTBGO0FBQzFGLFNBQWdCLHFCQUFxQixDQUFDLEtBQXlCO0lBQzdELFFBQVEsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzVCLEtBQUssTUFBTTtZQUNULE9BQU8sUUFBUSxxQkFBcUIsQ0FDakMsS0FBc0MsQ0FBQyxXQUFXLENBQ3BELEdBQUcsQ0FBQztRQUNQLEtBQUssS0FBSztZQUNSLE9BQU8sT0FBTyxxQkFBcUIsQ0FDaEMsS0FBc0MsQ0FBQyxXQUFXLENBQ3BELEdBQUcsQ0FBQztRQUNQLEtBQUssS0FBSztZQUNSLE9BQU8sT0FBTyxxQkFBcUIsQ0FDaEMsS0FBc0MsQ0FBQyxXQUFXLENBQ3BELEdBQUcsQ0FBQztRQUNQLEtBQUssUUFBUTtZQUNYLE9BQU8sUUFBUSxDQUFDO1FBQ2xCO1lBQ0UsbUZBQW1GO1lBQ25GLG9GQUFvRjtZQUNwRixxQ0FBcUM7WUFDckMsT0FBTyxLQUFLLENBQUMsZUFBZSxLQUFLLFNBQVM7Z0JBQ3hDLENBQUMsQ0FBQyxNQUFNO2dCQUNSLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7QUFDSCxDQUFDO0FBeEJELHNEQXdCQztBQUVELE1BQWEseUJBQXlCO0lBQ3BDLGdCQUFlLENBQUM7SUFFaEIsSUFBSSxhQUFhO1FBQ2YsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLEtBQUssQ0FB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SUFDckUsQ0FBQztJQUVELElBQUksc0JBQXNCO1FBQ3hCLE9BQU8sdUJBQXVCLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEdBQUcsQ0FBQztJQUMzRSxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekMsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxTQUFTO2dCQUNaLE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxLQUFLO2dCQUNSLE9BQU8sSUFBSSxDQUFDO1lBQ2Q7Z0JBQ0UsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsc0ZBQXNGO0lBQ3RGLElBQUksd0JBQXdCO1FBQzFCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixLQUFLLFNBQVMsQ0FBQztJQUNoRCxDQUFDO0NBQ0Y7QUE1RkQsc0RBNEZDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IFN0cnVjdCB9IGZyb20gXCIuL3N0cnVjdFwiO1xuaW1wb3J0IHsgdXBwZXJjYXNlRmlyc3QsIGRvd25jYXNlRmlyc3QgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbFwiO1xuaW1wb3J0IHsgcmVzb2x2ZVN0b3JlZENsYXNzTmFtZSB9IGZyb20gXCIuL3N1cHBvcnRlZC1zdG9yZWQtY2xhc3Nlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZVR5cGVNb2RlbCB7XG4gIHJlYWRvbmx5IHN0cnVjdD86IFN0cnVjdDsgLy8gY29tcGxleCBvYmplY3QgdHlwZSBjb250YWluZWQgd2l0aGluIHRoZSB0eXBlXG4gIHJlYWRvbmx5IGlzQ29tcGxleDogYm9vbGVhbjsgLy8gYmFzaWNhbGx5IHRoZSBzYW1lIGFzIGhhdmluZyBhIHN0cnVjdFxuICBnZXRTdG9yZWRDbGFzc0luaXRpYWxpemVyKG5hbWU6IHN0cmluZyk6IHN0cmluZzsgLy8gaW5pdGlhbGl6ZXIgZm9yIGtlZXBpbmcgY2xhc3MgbmVlZGVkIHRvIGtlZXAgdHJhY2sgb2YgcmVmZXJlbmNlIGFjY2Vzc1xuICByZWFkb25seSBzdG9yZWRDbGFzc1R5cGU6IHN0cmluZzsgLy8gdXNlZCBtYWlubHkgYnkgY29sbGVjdGlvbiB0eXBlcyB0byBnZW5lcmF0ZSB0aGVpciBzdG9yZWQgY2xhc3MgaW5pdGlhbGl6ZXJcbiAgcmVhZG9ubHkgaW5wdXRUeXBlRGVmaW5pdGlvbjogc3RyaW5nOyAvLyB0aGlzIGlzIHRoZSB0eXBlIHVzZWQgZm9yIGlucHV0dGluZyB2YWx1ZXNcbiAgZ2V0QXR0cmlidXRlQWNjZXNzRnVuY3Rpb24obmFtZTogc3RyaW5nKTogc3RyaW5nOyAvLyB0aGlzIGlzIGZvciBnZXR0aW5nIHJlZmVyZW5jZSBmb3Igc2ltcGxlIHR5cGVzXG4gIHJlYWRvbmx5IHRvVGVycmFmb3JtRnVuY3Rpb246IHN0cmluZzsgLy8gdGhpcyBpcyBmb3IgY29udmVydGluZyBpbnB1dCB2YWx1ZXMgdG8gVGVycmFmb3JtIHN5bnRheFxuICByZWFkb25seSB0b0hjbFRlcnJhZm9ybUZ1bmN0aW9uOiBzdHJpbmc7IC8vIHRoaXMgaXMgZm9yIGNvbnZlcnRpbmcgaW5wdXQgdmFsdWVzIHRvIFRlcnJhZm9ybSBzeW50YXggaW4gSENMXG4gIHJlYWRvbmx5IHR5cGVNb2RlbFR5cGU6IHN0cmluZzsgLy8gc28gd2UgZG9uJ3QgbmVlZCB0byB1c2UgaW5zdGFuY2VvZlxuICByZWFkb25seSBoYXNSZWZlcmVuY2VDbGFzczogYm9vbGVhbjsgLy8gdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBzdG9yZWRfY2xhc3MgZ2V0dGVyIHNob3VsZCBiZSB1c2VkXG4gIHJlYWRvbmx5IGlzVG9rZW5pemFibGU6IGJvb2xlYW47IC8vIGNhbiB0aGUgdHlwZSBiZSByZXByZXNlbnRlZCBieSBhIHRva2VuIHR5cGVcbiAgcmVhZG9ubHkgaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlOiBib29sZWFuOyAvLyB0cnVlIHdoZW4gbm8gXCJjZGt0bi48TmFtZT5cIiBzdG9yZWQgY2xhc3MgKG5vdCBldmVuIGEgY29sbGFwc2VkIG5lYXJlc3QtQW55IHdyYXBwZXIpIGlzIGF2YWlsYWJsZSBmb3IgdGhpcyB0eXBlXG59XG5cbi8vIERlc2NyaWJlcyB0aGUgVGVycmFmb3JtIHR5cGUgb2YgYW4gYXR0cmlidXRlIGFzIGl0cyBgbGlzdCguLi4pYC9gc2V0KC4uLilgL2BtYXAoLi4uKWBcbi8vIGNvbXBvc2VkIG5vdGF0aW9uIChtYXRjaGluZyBob3cgVGVycmFmb3JtIGl0c2VsZiBkZXNjcmliZXMgbmVzdGVkIGNvbGxlY3Rpb24gdHlwZXMpLFxuLy8gZm9yIHVzZSBpbiBnZW5lcmF0ZWQgSlNEb2MuIFVzZWQgb25seSBmb3IgY29sbGFwc2VkL2ZhbGxiYWNrIGdldHRlcnMgKHNlZVxuLy8gQXR0cmlidXRlc0VtaXR0ZXIpIHNvIGl0IG5ldmVyIG5lZWRzIHRvIGJlIGV4aGF1c3RpdmUvcGVyZmVjdGx5IHN0YWJsZSBmb3IgZXZlcnkgc2hhcGUuXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVUZXJyYWZvcm1UeXBlKG1vZGVsOiBBdHRyaWJ1dGVUeXBlTW9kZWwpOiBzdHJpbmcge1xuICBzd2l0Y2ggKG1vZGVsLnR5cGVNb2RlbFR5cGUpIHtcbiAgICBjYXNlIFwibGlzdFwiOlxuICAgICAgcmV0dXJuIGBsaXN0KCR7ZGVzY3JpYmVUZXJyYWZvcm1UeXBlKFxuICAgICAgICAobW9kZWwgYXMgQ29sbGVjdGlvbkF0dHJpYnV0ZVR5cGVNb2RlbCkuZWxlbWVudFR5cGUsXG4gICAgICApfSlgO1xuICAgIGNhc2UgXCJzZXRcIjpcbiAgICAgIHJldHVybiBgc2V0KCR7ZGVzY3JpYmVUZXJyYWZvcm1UeXBlKFxuICAgICAgICAobW9kZWwgYXMgQ29sbGVjdGlvbkF0dHJpYnV0ZVR5cGVNb2RlbCkuZWxlbWVudFR5cGUsXG4gICAgICApfSlgO1xuICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgIHJldHVybiBgbWFwKCR7ZGVzY3JpYmVUZXJyYWZvcm1UeXBlKFxuICAgICAgICAobW9kZWwgYXMgQ29sbGVjdGlvbkF0dHJpYnV0ZVR5cGVNb2RlbCkuZWxlbWVudFR5cGUsXG4gICAgICApfSlgO1xuICAgIGNhc2UgXCJzdHJ1Y3RcIjpcbiAgICAgIHJldHVybiBcIm9iamVjdFwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBDb3ZlcnMgYm90aCBTaW1wbGVBdHRyaWJ1dGVUeXBlTW9kZWwgKHN0b3JlZENsYXNzVHlwZSBpcyB0aGUgVGVycmFmb3JtIHByaW1pdGl2ZVxuICAgICAgLy8gbmFtZSwgZS5nLiBcInN0cmluZ1wiIHwgXCJudW1iZXJcIiB8IFwiYm9vbGVhblwiIHwgXCJhbnlcIikgYW5kIFNraXBwZWRBdHRyaWJ1dGVUeXBlTW9kZWxcbiAgICAgIC8vIChzdG9yZWRDbGFzc1R5cGUgaXMgYWx3YXlzIFwiYW55XCIpLlxuICAgICAgcmV0dXJuIG1vZGVsLnN0b3JlZENsYXNzVHlwZSA9PT0gXCJib29sZWFuXCJcbiAgICAgICAgPyBcImJvb2xcIlxuICAgICAgICA6IG1vZGVsLnN0b3JlZENsYXNzVHlwZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2tpcHBlZEF0dHJpYnV0ZVR5cGVNb2RlbCBpbXBsZW1lbnRzIEF0dHJpYnV0ZVR5cGVNb2RlbCB7XG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBnZXQgdHlwZU1vZGVsVHlwZSgpIHtcbiAgICByZXR1cm4gXCJzaW1wbGVcIjtcbiAgfVxuXG4gIGdldCBzdHJ1Y3QoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBpc0NvbXBsZXgoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0U3RvcmVkQ2xhc3NJbml0aWFsaXplcihfbmFtZTogc3RyaW5nKSB7XG4gICAgLy8gbm90IHVzZWRcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldCBzdG9yZWRDbGFzc1R5cGUoKSB7XG4gICAgcmV0dXJuIFwiYW55XCI7XG4gIH1cblxuICBnZXQgaW5wdXRUeXBlRGVmaW5pdGlvbigpIHtcbiAgICByZXR1cm4gXCJhbnlcIjtcbiAgfVxuXG4gIGdldEF0dHJpYnV0ZUFjY2Vzc0Z1bmN0aW9uKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBgdGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKCcke25hbWV9JylgO1xuICB9XG5cbiAgZ2V0IHRvVGVycmFmb3JtRnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGBjZGt0bi5hbnlUb1RlcnJhZm9ybWA7XG4gIH1cblxuICBnZXQgdG9IY2xUZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYGNka3RuLmFueVRvSGNsVGVycmFmb3JtYDtcbiAgfVxuXG4gIGdldCBoYXNSZWZlcmVuY2VDbGFzcygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQgaXNUb2tlbml6YWJsZSgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQgaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2ltcGxlQXR0cmlidXRlVHlwZU1vZGVsIGltcGxlbWVudHMgQXR0cmlidXRlVHlwZU1vZGVsIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHR5cGU6IHN0cmluZykge31cblxuICBnZXQgdHlwZU1vZGVsVHlwZSgpIHtcbiAgICByZXR1cm4gXCJzaW1wbGVcIjtcbiAgfVxuXG4gIGdldCBzdHJ1Y3QoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBpc0NvbXBsZXgoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0U3RvcmVkQ2xhc3NJbml0aWFsaXplcihfbmFtZTogc3RyaW5nKSB7XG4gICAgLy8gbm90IHVzZWRcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldCBzdG9yZWRDbGFzc1R5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldCBpbnB1dFR5cGVEZWZpbml0aW9uKCkge1xuICAgIGlmICh0aGlzLnR5cGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gXCJib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGVcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgICB9XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVBY2Nlc3NGdW5jdGlvbihuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYHRoaXMuZ2V0JHt1cHBlcmNhc2VGaXJzdCh0aGlzLnR5cGUpfUF0dHJpYnV0ZSgnJHtuYW1lfScpYDtcbiAgfVxuXG4gIGdldCB0b1RlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBgY2RrdG4uJHt0aGlzLnR5cGV9VG9UZXJyYWZvcm1gO1xuICB9XG5cbiAgZ2V0IHRvSGNsVGVycmFmb3JtRnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGBjZGt0bi4ke3RoaXMudHlwZX1Ub0hjbFRlcnJhZm9ybWA7XG4gIH1cblxuICBnZXQgaGFzUmVmZXJlbmNlQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IGlzVG9rZW5pemFibGUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXQgaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RydWN0QXR0cmlidXRlVHlwZU1vZGVsIGltcGxlbWVudHMgQXR0cmlidXRlVHlwZU1vZGVsIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHN0cnVjdDogU3RydWN0KSB7fVxuXG4gIGdldCB0eXBlTW9kZWxUeXBlKCkge1xuICAgIHJldHVybiBcInN0cnVjdFwiO1xuICB9XG5cbiAgZ2V0IGlzQ29tcGxleCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldFN0b3JlZENsYXNzSW5pdGlhbGl6ZXIobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGBuZXcgJHt0aGlzLnN0cnVjdC5vdXRwdXRSZWZlcmVuY2VOYW1lfSh0aGlzLCBcIiR7bmFtZX1cIilgO1xuICB9XG5cbiAgZ2V0IHN0b3JlZENsYXNzVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJ1Y3QubmFtZTtcbiAgfVxuXG4gIGdldCBpbnB1dFR5cGVEZWZpbml0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnN0cnVjdC5uYW1lO1xuICB9XG5cbiAgZ2V0QXR0cmlidXRlQWNjZXNzRnVuY3Rpb24obmFtZTogc3RyaW5nKSB7XG4gICAgLy8gVGhpcyBzaG91bG4ndCBhY3R1YWxseSBiZSBjYWxsZWRcbiAgICByZXR1cm4gYHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSgnJHtuYW1lfScpYDtcbiAgfVxuXG4gIGdldCB0b1RlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBgJHtkb3duY2FzZUZpcnN0KHRoaXMuc3RydWN0Lm5hbWUpfVRvVGVycmFmb3JtYDtcbiAgfVxuXG4gIGdldCB0b0hjbFRlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBgJHtkb3duY2FzZUZpcnN0KHRoaXMuc3RydWN0Lm5hbWUpfVRvSGNsVGVycmFmb3JtYDtcbiAgfVxuXG4gIGdldCBoYXNSZWZlcmVuY2VDbGFzcygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldCBpc1Rva2VuaXphYmxlKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldCBpc1N0b3JlZENsYXNzVW5hdmFpbGFibGUoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbkF0dHJpYnV0ZVR5cGVNb2RlbCBleHRlbmRzIEF0dHJpYnV0ZVR5cGVNb2RlbCB7XG4gIGVsZW1lbnRUeXBlOiBBdHRyaWJ1dGVUeXBlTW9kZWw7XG4gIC8vIFJlc29sdmVzIHRoZSBcImNka3RuLjxuYW1lPlwiIHN0b3JlZCBjbGFzcyB0byBpbnN0YW50aWF0ZSBmb3IgdGhpcyAobm9uLWNvbXBsZXgpXG4gIC8vIGNvbGxlY3Rpb24gdHlwZSwgYW5kIHdoZXRoZXIgdGhhdCByZXNvbHV0aW9uIGNvbGxhcHNlZCBhIGRlZXBlciwgdW5zdXBwb3J0ZWQgbmVzdGluZ1xuICAvLyBpbnRvIHRoZSBuZWFyZXN0IHR5cGVkIFwiQW55XCItd3JhcHBlci4gdW5kZWZpbmVkIG9ubHkgZGVmZW5zaXZlbHkgLSBzZWVcbiAgLy8gcmVzb2x2ZVN0b3JlZENsYXNzTmFtZSBpbiBzdXBwb3J0ZWQtc3RvcmVkLWNsYXNzZXMudHMuXG4gIHJlYWRvbmx5IHJlc29sdmVkU3RvcmVkQ2xhc3M6XG4gICAgfCB7IG5hbWU6IHN0cmluZzsgY29sbGFwc2VkOiBib29sZWFuIH1cbiAgICB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIExpc3RBdHRyaWJ1dGVUeXBlTW9kZWwgaW1wbGVtZW50cyBDb2xsZWN0aW9uQXR0cmlidXRlVHlwZU1vZGVsIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnRUeXBlOiBBdHRyaWJ1dGVUeXBlTW9kZWwsXG4gICAgcHVibGljIHJlYWRvbmx5IGlzU2luZ2xlSXRlbTogYm9vbGVhbixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzQmxvY2s6IGJvb2xlYW4sXG4gICkge1xuICAgIGlmICh0aGlzLnN0cnVjdCkge1xuICAgICAgdGhpcy5zdHJ1Y3QuaXNTaW5nbGVJdGVtID0gdGhpcy5pc1NpbmdsZUl0ZW0gfHwgZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHR5cGVNb2RlbFR5cGUoKSB7XG4gICAgcmV0dXJuIFwibGlzdFwiO1xuICB9XG5cbiAgZ2V0IHN0cnVjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS5zdHJ1Y3Q7XG4gIH1cblxuICBnZXQgaXNDb21wbGV4KCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLmlzQ29tcGxleDtcbiAgfVxuXG4gIGdldFN0b3JlZENsYXNzSW5pdGlhbGl6ZXIobmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuaXNTaW5nbGVJdGVtKSB7XG4gICAgICByZXR1cm4gYG5ldyAke3RoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlfU91dHB1dFJlZmVyZW5jZSh0aGlzLCBcIiR7bmFtZX1cIilgO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5pc0NvbXBsZXgpIHtcbiAgICAgICAgcmV0dXJuIGBuZXcgJHt0aGlzLnN0b3JlZENsYXNzVHlwZX0odGhpcywgXCIke25hbWV9XCIsIGZhbHNlKWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYG5ldyBjZGt0bi4ke3RoaXMucmVzb2x2ZWRTdG9yZWRDbGFzcyEubmFtZX0odGhpcywgXCIke25hbWV9XCIsIGZhbHNlKWA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHN0b3JlZENsYXNzVHlwZSgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGV9TGlzdGA7XG4gIH1cblxuICBnZXQgcmVzb2x2ZWRTdG9yZWRDbGFzcygpIHtcbiAgICByZXR1cm4gcmVzb2x2ZVN0b3JlZENsYXNzTmFtZShcbiAgICAgIHRoaXMuc3RvcmVkQ2xhc3NUeXBlLFxuICAgICAgdGhpcy5lbGVtZW50VHlwZS50eXBlTW9kZWxUeXBlLFxuICAgICk7XG4gIH1cblxuICBnZXQgaW5wdXRUeXBlRGVmaW5pdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc1NpbmdsZUl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLmlucHV0VHlwZURlZmluaXRpb247XG4gICAgfSBlbHNlIGlmICh0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBcIkFycmF5PGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZT4gfCBjZGt0bi5JUmVzb2x2YWJsZVwiO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0NvbXBsZXgpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX1bXSB8IGNka3RuLklSZXNvbHZhYmxlYDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZWxlbWVudFR5cGUudHlwZU1vZGVsVHlwZSAhPT0gXCJzaW1wbGVcIikge1xuICAgICAgcmV0dXJuIGAke3RoaXMuZWxlbWVudFR5cGUuaW5wdXRUeXBlRGVmaW5pdGlvbn1bXSB8IGNka3RuLklSZXNvbHZhYmxlYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke3RoaXMuZWxlbWVudFR5cGUuaW5wdXRUeXBlRGVmaW5pdGlvbn1bXWA7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXR0cmlidXRlQWNjZXNzRnVuY3Rpb24obmFtZTogc3RyaW5nKSB7XG4gICAgc3dpdGNoICh0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZSkge1xuICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICByZXR1cm4gYHRoaXMuZ2V0TGlzdEF0dHJpYnV0ZSgnJHtuYW1lfScpYDtcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgcmV0dXJuIGB0aGlzLmdldE51bWJlckxpc3RBdHRyaWJ1dGUoJyR7bmFtZX0nKWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoJyR7bmFtZX0nKWA7XG4gIH1cblxuICBnZXQgdG9UZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc1NpbmdsZUl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLnRvVGVycmFmb3JtRnVuY3Rpb247XG4gICAgfVxuICAgIHJldHVybiBgY2RrdG4ubGlzdE1hcHBlcigke3RoaXMuZWxlbWVudFR5cGUudG9UZXJyYWZvcm1GdW5jdGlvbn0sICR7dGhpcy5pc0Jsb2NrfSlgO1xuICB9XG5cbiAgZ2V0IHRvSGNsVGVycmFmb3JtRnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNTaW5nbGVJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS50b0hjbFRlcnJhZm9ybUZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBgY2RrdG4ubGlzdE1hcHBlckhjbCgke3RoaXMuZWxlbWVudFR5cGUudG9IY2xUZXJyYWZvcm1GdW5jdGlvbn0sICR7dGhpcy5pc0Jsb2NrfSlgO1xuICB9XG5cbiAgZ2V0IGhhc1JlZmVyZW5jZUNsYXNzKCkge1xuICAgIHJldHVybiB0aGlzLmlzU2luZ2xlSXRlbSB8fCB0aGlzLmlzQ29tcGxleDtcbiAgfVxuXG4gIGdldCBpc1Rva2VuaXphYmxlKCkge1xuICAgIHN3aXRjaCAodGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbXBsZXggKHN0cnVjdCkgZWxlbWVudHMgZ2VuZXJhdGUgdGhlaXIgb3duIGNsYXNzIGluIHRoZSBwcm92aWRlciBvdXRwdXQsIHNvIHRoZXlcbiAgLy8gYXJlIGFsd2F5cyBmaW5lLiBPdGhlcndpc2UgYSBzdG9yZWQgY2xhc3MgaXMgb25seSBlbWl0dGVkIGlmIHJlc29sdmVkU3RvcmVkQ2xhc3NcbiAgLy8gZmluZHMgb25lIC0gc2VlIGdldFN0b3JlZENsYXNzSW5pdGlhbGl6ZXIgYWJvdmUuIE5vdGU6IGhhc1JlZmVyZW5jZUNsYXNzICh3aGljaFxuICAvLyB0cmlnZ2VycyBhIHN0b3JlZF9jbGFzcyBnZXR0ZXIpIGlzIG9ubHkgZXZlciB0cnVlIGhlcmUgd2hlbiBpc1NpbmdsZUl0ZW0gb3IgaXNDb21wbGV4XG4gIC8vIGlzIHRydWUsIGFuZCBpc1NpbmdsZUl0ZW0gaXMgb25seSBzZXQgZm9yIHN0cnVjdC9ibG9jayBuZXN0aW5nICh3aGljaCBpcyBhbHNvXG4gIC8vIGlzQ29tcGxleCksIHNvIHRoaXMgY2hlY2sgb25seSBuZWVkcyB0byBndWFyZCB0aGUgbm9uLWNvbXBsZXgsIG5vbi1zaW5nbGUtaXRlbSBjYXNlLlxuICAvL1xuICAvLyBzdG9yZWRDbGFzc1R5cGUgaXMgaXRzZWxmIGJ1aWx0IHVwIHJlY3Vyc2l2ZWx5IChlbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUgaXNcbiAgLy8gY29tcG9zZWQgdGhlIHNhbWUgd2F5IGZvciBuZXN0ZWQgY29sbGVjdGlvbnMpLCBzbyBpdCBhbHJlYWR5IGZ1bGx5IGVuY29kZXMgdGhlXG4gIC8vIGVudGlyZSBuZXN0ZWQgY2hhaW4gaW4gb25lIHN0cmluZyAoZS5nLiBtYXAobWFwKGxpc3Qoc3RyaW5nKSkpIGNvbXBvc2VzIGFsbCB0aGUgd2F5XG4gIC8vIHVwIHRvIFwic3RyaW5nTGlzdE1hcE1hcFwiKS4gcmVzb2x2ZWRTdG9yZWRDbGFzcyBmaXJzdCBjaGVja3MgdGhpcyB0eXBlJ3Mgb3duIGNvbXBvc2VkXG4gIC8vIG5hbWUgKGUuZy4gXCJTdHJpbmdMaXN0TWFwTWFwXCIpIGFnYWluc3QgdGhlIGZpeGVkIHNldCBvZiBoYW5kLXdyaXR0ZW4gY29yZSBjbGFzc2VzOyBpZlxuICAvLyB0aGF0IG5hbWUgZG9lc24ndCBleGlzdCwgaXQgZmFsbHMgYmFjayB0byB0aGUgbmVhcmVzdCB0eXBlZCBcIkFueVwiLXdyYXBwZXIgdGhhdCBzdGlsbFxuICAvLyBlbmNvZGVzIHRoaXMgdHlwZSdzIG93biBsYXllciBhbmQgaXRzIGVsZW1lbnQncyBsYXllciAoZS5nLiBcIkFueU1hcE1hcFwiKSwgY29sbGFwc2luZ1xuICAvLyBvbmx5IHRoZSB1bnN1cHBvcnRlZCBpbm5lciBzaGFwZSB3aGlsZSBwcmVzZXJ2aW5nIHR5cGVkIG5hdmlnYXRpb24gZm9yIHRoZSBvdXRlclxuICAvLyBsYXllcnM7IG9ubHkgaWYgbmVpdGhlciBleGlzdHMgZG9lcyBpdCBmYWxsIHRocm91Z2ggdG8gdGhlIHBsYWluLCB1bnR5cGVkIGdldHRlciAoc2VlXG4gIC8vIEF0dHJpYnV0ZU1vZGVsLmdldHRlclR5cGUpLiBJdCBtdXN0IE5PVCBhbHNvIE9SIGluXG4gIC8vIGVsZW1lbnRUeXBlLmlzU3RvcmVkQ2xhc3NVbmF2YWlsYWJsZSwgc2luY2UgYW4gaW5uZXIgZWxlbWVudCdzIHVuLWNvbXBvc2VkIG5hbWUgKGUuZy5cbiAgLy8gXCJTdHJpbmdMaXN0XCIgZm9yIGEgcGxhaW4gbGlzdChzdHJpbmcpIG5lc3RlZCBpbnNpZGUgYSBtYXApIGlzIG5ldmVyIHNlcGFyYXRlbHlcbiAgLy8gaW5zdGFudGlhdGVkIGFuZCBpcyBpcnJlbGV2YW50IG9uIGl0cyBvd247IE9SaW5nIGl0IGluIHdvdWxkIHByb2R1Y2UgZmFsc2UgcG9zaXRpdmVzXG4gIC8vIHRoYXQgcmVncmVzcyBzdXBwb3J0ZWQgbmVzdGluZ3Mgc3VjaCBhcyBtYXAobGlzdChzdHJpbmcpKSA9PiBjZGt0bi5TdHJpbmdMaXN0TWFwLlxuICBnZXQgaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlKCkge1xuICAgIGlmICh0aGlzLmlzQ29tcGxleCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZFN0b3JlZENsYXNzID09PSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNldEF0dHJpYnV0ZVR5cGVNb2RlbCBpbXBsZW1lbnRzIENvbGxlY3Rpb25BdHRyaWJ1dGVUeXBlTW9kZWwge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFR5cGU6IEF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNTaW5nbGVJdGVtOiBib29sZWFuLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNCbG9jazogYm9vbGVhbixcbiAgKSB7XG4gICAgaWYgKHRoaXMuc3RydWN0KSB7XG4gICAgICB0aGlzLnN0cnVjdC5pc1NpbmdsZUl0ZW0gPSB0aGlzLmlzU2luZ2xlSXRlbSB8fCBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBnZXQgdHlwZU1vZGVsVHlwZSgpIHtcbiAgICByZXR1cm4gXCJzZXRcIjtcbiAgfVxuXG4gIGdldCBzdHJ1Y3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUuc3RydWN0O1xuICB9XG5cbiAgZ2V0IGlzQ29tcGxleCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS5pc0NvbXBsZXg7XG4gIH1cblxuICBnZXRTdG9yZWRDbGFzc0luaXRpYWxpemVyKG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzU2luZ2xlSXRlbSkge1xuICAgICAgcmV0dXJuIGBuZXcgJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX1PdXRwdXRSZWZlcmVuY2UodGhpcywgXCIke25hbWV9XCIpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuaXNDb21wbGV4KSB7XG4gICAgICAgIHJldHVybiBgbmV3ICR7dGhpcy5zdG9yZWRDbGFzc1R5cGV9KHRoaXMsIFwiJHtuYW1lfVwiLCB0cnVlKWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYG5ldyBjZGt0bi4ke3RoaXMucmVzb2x2ZWRTdG9yZWRDbGFzcyEubmFtZX0odGhpcywgXCIke25hbWV9XCIsIHRydWUpYDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgc3RvcmVkQ2xhc3NUeXBlKCkge1xuICAgIHJldHVybiBgJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX1MaXN0YDtcbiAgfVxuXG4gIGdldCByZXNvbHZlZFN0b3JlZENsYXNzKCkge1xuICAgIHJldHVybiByZXNvbHZlU3RvcmVkQ2xhc3NOYW1lKFxuICAgICAgdGhpcy5zdG9yZWRDbGFzc1R5cGUsXG4gICAgICB0aGlzLmVsZW1lbnRUeXBlLnR5cGVNb2RlbFR5cGUsXG4gICAgKTtcbiAgfVxuXG4gIGdldCBpbnB1dFR5cGVEZWZpbml0aW9uKCkge1xuICAgIGlmICh0aGlzLmlzU2luZ2xlSXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUuaW5wdXRUeXBlRGVmaW5pdGlvbjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIFwiQXJyYXk8Ym9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlPiB8IGNka3RuLklSZXNvbHZhYmxlXCI7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzQ29tcGxleCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlfVtdIHwgY2RrdG4uSVJlc29sdmFibGVgO1xuICAgIH0gZWxzZSBpZiAodGhpcy5lbGVtZW50VHlwZS50eXBlTW9kZWxUeXBlICE9PSBcInNpbXBsZVwiKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5lbGVtZW50VHlwZS5pbnB1dFR5cGVEZWZpbml0aW9ufVtdIHwgY2RrdG4uSVJlc29sdmFibGVgO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5lbGVtZW50VHlwZS5pbnB1dFR5cGVEZWZpbml0aW9ufVtdYDtcbiAgICB9XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVBY2Nlc3NGdW5jdGlvbihuYW1lOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHRoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlKSB7XG4gICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgIHJldHVybiBgY2RrdG4uRm4udG9saXN0KHRoaXMuZ2V0TGlzdEF0dHJpYnV0ZSgnJHtuYW1lfScpKWA7XG4gICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIHJldHVybiBgY2RrdG4uVG9rZW4uYXNOdW1iZXJMaXN0KGNka3RuLkZuLnRvbGlzdCh0aGlzLmdldE51bWJlckxpc3RBdHRyaWJ1dGUoJyR7bmFtZX0nKSkpYDtcbiAgICB9XG5cbiAgICAvLyBUb2tlbi5hc0FueSBpcyByZXF1aXJlZCBiZWNhdXNlIHRvbGlzdCByZXR1cm5zIGFuIEFycmF5IGVuY29kZWQgdG9rZW4gd2hpY2ggdGhlIGxpc3RNYXBwZXJcbiAgICAvLyB3b3VsZCB0cnkgdG8gbWFwIG92ZXIgd2hlbiB0aGlzIGlzIHBhc3NlZCB0byBhbm90aGVyIHJlc291cmNlLiBXaXRoIFRva2VuLmFzQW55KCkgaXQgaXMgbGVmdFxuICAgIC8vIGFzIGlzIGJ5IHRoZSBsaXN0TWFwcGVyIGFuZCBpcyBsYXRlciBwcm9wZXJseSByZXNvbHZlZCB0byBhIHJlZmVyZW5jZVxuICAgIC8vICh0aGlzIG9ubHkgd29ya3MgaW4gVHlwZVNjcmlwdCBjdXJyZW50bHksIHNhbWUgYXMgZm9yIHJlZmVyZW5jaW5nIGxpc3RzXG4gICAgLy8gW3NlZSBcImludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoLi4uKVwiIGZ1cnRoZXIgYmVsb3ddKVxuICAgIHJldHVybiBgY2RrdG4uVG9rZW4uYXNBbnkoY2RrdG4uRm4udG9saXN0KHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSgnJHtuYW1lfScpKSlgO1xuICB9XG5cbiAgZ2V0IHRvVGVycmFmb3JtRnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNTaW5nbGVJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS50b1RlcnJhZm9ybUZ1bmN0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYGNka3RuLmxpc3RNYXBwZXIoJHt0aGlzLmVsZW1lbnRUeXBlLnRvVGVycmFmb3JtRnVuY3Rpb259LCAke3RoaXMuaXNCbG9ja30pYDtcbiAgICB9XG4gIH1cblxuICBnZXQgdG9IY2xUZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc1NpbmdsZUl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLnRvSGNsVGVycmFmb3JtRnVuY3Rpb247XG4gICAgfVxuICAgIHJldHVybiBgY2RrdG4ubGlzdE1hcHBlckhjbCgke3RoaXMuZWxlbWVudFR5cGUudG9IY2xUZXJyYWZvcm1GdW5jdGlvbn0sICR7dGhpcy5pc0Jsb2NrfSlgO1xuICB9XG5cbiAgZ2V0IGhhc1JlZmVyZW5jZUNsYXNzKCkge1xuICAgIHJldHVybiB0aGlzLmlzU2luZ2xlSXRlbSB8fCB0aGlzLmlzQ29tcGxleDtcbiAgfVxuXG4gIGdldCBpc1Rva2VuaXphYmxlKCkge1xuICAgIHN3aXRjaCAodGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNlZSBjb21tZW50IG9uIExpc3RBdHRyaWJ1dGVUeXBlTW9kZWwuaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlIGFib3ZlIC0gc2FtZVxuICAvLyByZWFzb25pbmcgYXBwbGllcyBoZXJlLlxuICBnZXQgaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlKCkge1xuICAgIGlmICh0aGlzLmlzQ29tcGxleCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZFN0b3JlZENsYXNzID09PSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1hcEF0dHJpYnV0ZVR5cGVNb2RlbCBpbXBsZW1lbnRzIENvbGxlY3Rpb25BdHRyaWJ1dGVUeXBlTW9kZWwge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFR5cGU6IEF0dHJpYnV0ZVR5cGVNb2RlbCkge31cblxuICBnZXQgdHlwZU1vZGVsVHlwZSgpIHtcbiAgICByZXR1cm4gXCJtYXBcIjtcbiAgfVxuXG4gIGdldCBzdHJ1Y3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUuc3RydWN0O1xuICB9XG5cbiAgZ2V0IGlzQ29tcGxleCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS5pc0NvbXBsZXg7XG4gIH1cblxuICBnZXRTdG9yZWRDbGFzc0luaXRpYWxpemVyKG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzQ29tcGxleCkge1xuICAgICAgcmV0dXJuIGBuZXcgJHt0aGlzLnN0b3JlZENsYXNzVHlwZX0odGhpcywgXCIke25hbWV9XCIpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBuZXcgY2RrdG4uJHt0aGlzLnJlc29sdmVkU3RvcmVkQ2xhc3MhLm5hbWV9KHRoaXMsIFwiJHtuYW1lfVwiKWA7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHN0b3JlZENsYXNzVHlwZSgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGV9TWFwYDtcbiAgfVxuXG4gIGdldCByZXNvbHZlZFN0b3JlZENsYXNzKCkge1xuICAgIHJldHVybiByZXNvbHZlU3RvcmVkQ2xhc3NOYW1lKFxuICAgICAgdGhpcy5zdG9yZWRDbGFzc1R5cGUsXG4gICAgICB0aGlzLmVsZW1lbnRUeXBlLnR5cGVNb2RlbFR5cGUsXG4gICAgKTtcbiAgfVxuXG4gIGdldCBpbnB1dFR5cGVEZWZpbml0aW9uKCkge1xuICAgIC8vIG1hcCBvZiBib29sZWFucyBoYXMgdG9rZW4gc3VwcG9ydCwgYnV0IGJvb2xlYW5zIGRvbid0XG4gICAgaWYgKHRoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIGB7IFtrZXk6IHN0cmluZ106ICgke3RoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlfSB8IGNka3RuLklSZXNvbHZhYmxlKSB9YDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb21wbGV4KSB7XG4gICAgICByZXR1cm4gYHsgW2tleTogc3RyaW5nXTogJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX0gfSB8IGNka3RuLklSZXNvbHZhYmxlYDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZWxlbWVudFR5cGUudHlwZU1vZGVsVHlwZSAhPT0gXCJzaW1wbGVcIikge1xuICAgICAgcmV0dXJuIGB7IFtrZXk6IHN0cmluZ106ICR7dGhpcy5lbGVtZW50VHlwZS5pbnB1dFR5cGVEZWZpbml0aW9ufSB9IHwgY2RrdG4uSVJlc29sdmFibGVgO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYHsgW2tleTogc3RyaW5nXTogJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX0gfWA7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXR0cmlidXRlQWNjZXNzRnVuY3Rpb24obmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmlzQ29tcGxleCAmJiB0aGlzLmVsZW1lbnRUeXBlLnR5cGVNb2RlbFR5cGUgIT09IFwic2ltcGxlXCIpIHtcbiAgICAgIHJldHVybiBgdGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKCcke25hbWV9JylgO1xuICAgIH1cblxuICAgIHJldHVybiBgdGhpcy5nZXQke3VwcGVyY2FzZUZpcnN0KFxuICAgICAgdGhpcy5zdG9yZWRDbGFzc1R5cGUsXG4gICAgKX1BdHRyaWJ1dGUoJyR7bmFtZX0nKWA7XG4gIH1cblxuICBnZXQgdG9UZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYGNka3RuLmhhc2hNYXBwZXIoJHt0aGlzLmVsZW1lbnRUeXBlLnRvVGVycmFmb3JtRnVuY3Rpb259KWA7XG4gIH1cblxuICBnZXQgdG9IY2xUZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYGNka3RuLmhhc2hNYXBwZXJIY2woJHt0aGlzLmVsZW1lbnRUeXBlLnRvSGNsVGVycmFmb3JtRnVuY3Rpb259KWA7XG4gIH1cblxuICBnZXQgaGFzUmVmZXJlbmNlQ2xhc3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb21wbGV4O1xuICB9XG5cbiAgZ2V0IGlzVG9rZW5pemFibGUoKSB7XG4gICAgc3dpdGNoICh0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZSkge1xuICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgXCJhbnlcIjpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gU2VlIGNvbW1lbnQgb24gTGlzdEF0dHJpYnV0ZVR5cGVNb2RlbC5pc1N0b3JlZENsYXNzVW5hdmFpbGFibGUgYWJvdmUgLSBzYW1lXG4gIC8vIHJlYXNvbmluZyBhcHBsaWVzIGhlcmUgKE1hcEF0dHJpYnV0ZVR5cGVNb2RlbC5oYXNSZWZlcmVuY2VDbGFzcyBpcyBqdXN0IGlzQ29tcGxleCkuXG4gIGdldCBpc1N0b3JlZENsYXNzVW5hdmFpbGFibGUoKSB7XG4gICAgaWYgKHRoaXMuaXNDb21wbGV4KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlc29sdmVkU3RvcmVkQ2xhc3MgPT09IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|