@sapui5/sap.fe.base 1.130.6 → 1.132.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/base/.library +1 -1
- package/src/sap/fe/base/BindingToolkit.js +45 -48
- package/src/sap/fe/base/BindingToolkit.ts +19 -14
- package/src/sap/fe/base/BuildingBlockBase.js +184 -0
- package/src/sap/fe/base/BuildingBlockBase.ts +166 -0
- package/src/sap/fe/base/ClassSupport.js +145 -85
- package/src/sap/fe/base/ClassSupport.ts +157 -62
- package/src/sap/fe/base/EventDelegateHook.js +6 -7
- package/src/sap/fe/base/HookSupport.js +4 -5
- package/src/sap/fe/base/jsx-runtime/ViewLoader.js +9 -13
- package/src/sap/fe/base/jsx-runtime/jsx-control.js +9 -10
- package/src/sap/fe/base/jsx-runtime/jsx-control.ts +3 -0
- package/src/sap/fe/base/jsx-runtime/jsx-xml.js +16 -21
- package/src/sap/fe/base/jsx-runtime/jsx-xml.ts +7 -9
- package/src/sap/fe/base/library.js +3 -2
- package/src/sap/fe/base/library.ts +1 -0
|
@@ -12,6 +12,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
|
|
|
12
12
|
var compileExpression = BindingToolkit.compileExpression;
|
|
13
13
|
var compileConstant = BindingToolkit.compileConstant;
|
|
14
14
|
const FL_DELEGATE = "fl:delegate";
|
|
15
|
+
const CORE_REQUIRE = "core:require";
|
|
15
16
|
const DT_DESIGNTIME = "dt:designtime";
|
|
16
17
|
const addChildAggregation = function (aggregationChildren, aggregationName, child) {
|
|
17
18
|
if (child === null || child === undefined || typeof child === "string") {
|
|
@@ -35,11 +36,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
|
|
|
35
36
|
}
|
|
36
37
|
};
|
|
37
38
|
const isChildAnElement = function (children) {
|
|
38
|
-
|
|
39
|
-
return children === null || children === void 0 ? void 0 : (_isA = (_ref = children).isA) === null || _isA === void 0 ? void 0 : _isA.call(_ref, "sap.ui.core.Element");
|
|
39
|
+
return children?.isA?.("sap.ui.core.Element");
|
|
40
40
|
};
|
|
41
41
|
const isAControl = function (children) {
|
|
42
|
-
return !!
|
|
42
|
+
return !!children?.getMetadata;
|
|
43
43
|
};
|
|
44
44
|
function processAggregations(metadata, mSettings) {
|
|
45
45
|
const metadataAggregations = metadata.getAllAggregations();
|
|
@@ -104,8 +104,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
|
|
|
104
104
|
lateProperties[settingsKey] = value;
|
|
105
105
|
delete settings[settingsKey];
|
|
106
106
|
} else if (typeof value === "string" && !value.startsWith("{")) {
|
|
107
|
-
|
|
108
|
-
const propertyType = (_allProperties$settin = allProperties[settingsKey]) === null || _allProperties$settin === void 0 ? void 0 : (_allProperties$settin2 = (_allProperties$settin3 = _allProperties$settin).getType) === null || _allProperties$settin2 === void 0 ? void 0 : _allProperties$settin2.call(_allProperties$settin3);
|
|
107
|
+
const propertyType = allProperties[settingsKey]?.getType?.();
|
|
109
108
|
if (propertyType && propertyType instanceof DataType && ["boolean", "int", "float"].includes(propertyType.getName())) {
|
|
110
109
|
settings[settingsKey] = propertyType.parseValue(value);
|
|
111
110
|
}
|
|
@@ -141,12 +140,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
|
|
|
141
140
|
}
|
|
142
141
|
const jsxControl = function (ControlType, settings, key, jsxContext) {
|
|
143
142
|
let targetControl;
|
|
144
|
-
if (ControlType
|
|
143
|
+
if (ControlType?.isFragment) {
|
|
145
144
|
targetControl = settings.children;
|
|
146
|
-
} else if (ControlType
|
|
147
|
-
var _runtimeBuildingBlock;
|
|
145
|
+
} else if (ControlType?.isRuntime) {
|
|
148
146
|
const runtimeBuildingBlock = new ControlType(settings);
|
|
149
|
-
targetControl =
|
|
147
|
+
targetControl = runtimeBuildingBlock.getContent?.(jsxContext.view, jsxContext.appComponent);
|
|
150
148
|
} else if (isAControl(ControlType)) {
|
|
151
149
|
const metadata = ControlType.getMetadata();
|
|
152
150
|
if (key !== undefined) {
|
|
@@ -165,6 +163,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
|
|
|
165
163
|
delete settings.binding;
|
|
166
164
|
delete settings[FL_DELEGATE];
|
|
167
165
|
delete settings[DT_DESIGNTIME];
|
|
166
|
+
delete settings[CORE_REQUIRE]; // Core require is not useful in control mode
|
|
168
167
|
const targetControlInstance = new ControlType(settings);
|
|
169
168
|
if (classDef) {
|
|
170
169
|
targetControlInstance.addStyleClass(classDef);
|
|
@@ -224,4 +223,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
|
|
|
224
223
|
};
|
|
225
224
|
return jsxControl;
|
|
226
225
|
}, false);
|
|
227
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGTF9ERUxFR0FURSIsIkRUX0RFU0lHTlRJTUUiLCJhZGRDaGlsZEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25DaGlsZHJlbiIsImFnZ3JlZ2F0aW9uTmFtZSIsImNoaWxkIiwidW5kZWZpbmVkIiwiaXNDaGlsZEFuRWxlbWVudCIsInB1c2giLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwic3ViQ2hpbGQiLCJPYmplY3QiLCJrZXlzIiwiY2hpbGRLZXkiLCJjaGlsZHJlbiIsIl9pc0EiLCJfcmVmIiwiaXNBIiwiY2FsbCIsImlzQUNvbnRyb2wiLCJnZXRNZXRhZGF0YSIsInByb2Nlc3NBZ2dyZWdhdGlvbnMiLCJtZXRhZGF0YSIsIm1TZXR0aW5ncyIsIm1ldGFkYXRhQWdncmVnYXRpb25zIiwiZ2V0QWxsQWdncmVnYXRpb25zIiwiZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSIsImdldERlZmF1bHRBZ2dyZWdhdGlvbk5hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsInBhdGgiLCJmYWN0b3J5IiwidGVtcGxhdGUiLCJwcm9jZXNzUHJvcGVydGllcyIsInNldHRpbmdzIiwic2V0dGluZ3NLZXkiLCJsYXRlUHJvcGVydGllcyIsImFsbEV2ZW50cyIsImdldEFsbEV2ZW50cyIsImFsbFByb3BlcnRpZXMiLCJnZXRBbGxQcm9wZXJ0aWVzIiwidmFsdWUiLCJpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiIsImJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiIsImlzQ29uc3RhbnQiLCJjb21waWxlQ29uc3RhbnQiLCJpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbiIsIm1vZGVsIiwibW9kZWxOYW1lIiwiY29tcGlsZUV4cHJlc3Npb24iLCJ0aGVuIiwic3RhcnRzV2l0aCIsIl9hbGxQcm9wZXJ0aWVzJHNldHRpbiIsIl9hbGxQcm9wZXJ0aWVzJHNldHRpbjIiLCJfYWxsUHJvcGVydGllcyRzZXR0aW4zIiwicHJvcGVydHlUeXBlIiwiZ2V0VHlwZSIsIkRhdGFUeXBlIiwiaW5jbHVkZXMiLCJnZXROYW1lIiwicGFyc2VWYWx1ZSIsIl9fYmluZGluZ0luZm8iLCJwcm9jZXNzQ29tbWFuZCIsImNvbW1hbmRQcm9wZXJ0eSIsImNvbW1hbmQiLCJldmVudE5hbWUiLCJzcGxpdCIsImV2ZW50IiwibmFtZSIsIkV2ZW50SGFuZGxlclJlc29sdmVyIiwicmVzb2x2ZUV2ZW50SGFuZGxlciIsImpzeENvbnRyb2wiLCJDb250cm9sVHlwZSIsImtleSIsImpzeENvbnRleHQiLCJ0YXJnZXRDb250cm9sIiwiaXNGcmFnbWVudCIsImlzUnVudGltZSIsIl9ydW50aW1lQnVpbGRpbmdCbG9jayIsInJ1bnRpbWVCdWlsZGluZ0Jsb2NrIiwiZ2V0Q29udGVudCIsInZpZXciLCJhcHBDb21wb25lbnQiLCJjbGFzc0RlZiIsImNsYXNzIiwicmVmRGVmIiwicmVmIiwiYmluZGluZ0RlZiIsImJpbmRpbmciLCJmbERlbGVnYXRlIiwiZHREZXNpZ250aW1lIiwidGFyZ2V0Q29udHJvbEluc3RhbmNlIiwiYWRkU3R5bGVDbGFzcyIsInNldEN1cnJlbnQiLCJjdXN0b21TZXR0aW5ncyIsImRhdGEiLCJkZWxlZ2F0ZSIsImRlc2lnbnRpbWUiLCJsZW5ndGgiLCJiaW5kaW5nSW5mbyIsImJpbmRpbmdQYXJzZXIiLCJiaW5kRWxlbWVudCIsImJpbmRpbmdEZWZLZXkiLCJsYXRlUHJvcGVydGllc0tleSIsInNldFByb3BlcnR5IiwiY2F0Y2giLCJlcnJvciIsIkxvZyIsImNvbnRyb2xUeXBlRm4iLCJUZXh0IiwidGV4dCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsianN4LWNvbnRyb2wudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0Y29tcGlsZUNvbnN0YW50LFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0aXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdGlzQ29uc3RhbnQsXG5cdGlzUGF0aEluTW9kZWxFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nSW5mb0hvbGRlciwgTm9uQWJzdHJhY3RDbGFzcyB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFByb3BlcnRpZXMsIEpTWENvbnRleHQsIE5vbkNvbnRyb2xQcm9wZXJ0aWVzLCBSZWYgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlXCI7XG5pbXBvcnQgdHlwZSBSdW50aW1lQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9SdW50aW1lQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBEYXRhVHlwZSBmcm9tIFwic2FwL3VpL2Jhc2UvRGF0YVR5cGVcIjtcbmltcG9ydCB7IGJpbmRpbmdQYXJzZXIgfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0TWV0YWRhdGFcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgRWxlbWVudCwgZGVmYXVsdCBhcyBVSTVFbGVtZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBFdmVudEhhbmRsZXJSZXNvbHZlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0V2ZW50SGFuZGxlclJlc29sdmVyXCI7XG5cbmNvbnN0IEZMX0RFTEVHQVRFID0gXCJmbDpkZWxlZ2F0ZVwiO1xuY29uc3QgRFRfREVTSUdOVElNRSA9IFwiZHQ6ZGVzaWdudGltZVwiO1xuY29uc3QgYWRkQ2hpbGRBZ2dyZWdhdGlvbiA9IGZ1bmN0aW9uIChcblx0YWdncmVnYXRpb25DaGlsZHJlbjogUmVjb3JkPHN0cmluZywgKHN0cmluZyB8IFVJNUVsZW1lbnQpW10+LFxuXHRhZ2dyZWdhdGlvbk5hbWU6IHN0cmluZyxcblx0Y2hpbGQ/OiBzdHJpbmcgfCBVSTVFbGVtZW50IHwgVUk1RWxlbWVudFtdXG4pOiB2b2lkIHtcblx0aWYgKGNoaWxkID09PSBudWxsIHx8IGNoaWxkID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGNoaWxkID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmICghYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdKSB7XG5cdFx0YWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdID0gW107XG5cdH1cblx0aWYgKGlzQ2hpbGRBbkVsZW1lbnQoY2hpbGQpKSB7XG5cdFx0YWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdLnB1c2goY2hpbGQpO1xuXHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQpKSB7XG5cdFx0Y2hpbGQuZm9yRWFjaCgoc3ViQ2hpbGQpID0+IHtcblx0XHRcdGFkZENoaWxkQWdncmVnYXRpb24oYWdncmVnYXRpb25DaGlsZHJlbiwgYWdncmVnYXRpb25OYW1lLCBzdWJDaGlsZCk7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGNoaWxkID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0gPSBjaGlsZDtcblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyhjaGlsZCkuZm9yRWFjaCgoY2hpbGRLZXkpID0+IHtcblx0XHRcdGFkZENoaWxkQWdncmVnYXRpb24oYWdncmVnYXRpb25DaGlsZHJlbiwgY2hpbGRLZXksIGNoaWxkW2NoaWxkS2V5XSk7XG5cdFx0fSk7XG5cdH1cbn07XG5jb25zdCBpc0NoaWxkQW5FbGVtZW50ID0gZnVuY3Rpb24gKGNoaWxkcmVuPzogdW5rbm93bik6IGNoaWxkcmVuIGlzIEVsZW1lbnQge1xuXHRyZXR1cm4gKGNoaWxkcmVuIGFzIEVsZW1lbnQpPy5pc0E/LihcInNhcC51aS5jb3JlLkVsZW1lbnRcIik7XG59O1xuY29uc3QgaXNBQ29udHJvbCA9IGZ1bmN0aW9uIChjaGlsZHJlbj86IHR5cGVvZiBDb250cm9sIHwgRnVuY3Rpb24pOiBjaGlsZHJlbiBpcyBOb25BYnN0cmFjdENsYXNzPENvbnRyb2w+IHtcblx0cmV0dXJuICEhKGNoaWxkcmVuIGFzIHR5cGVvZiBDb250cm9sKT8uZ2V0TWV0YWRhdGE7XG59O1xuXG5mdW5jdGlvbiBwcm9jZXNzQWdncmVnYXRpb25zKG1ldGFkYXRhOiBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEsIG1TZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcblx0Y29uc3QgbWV0YWRhdGFBZ2dyZWdhdGlvbnMgPSBtZXRhZGF0YS5nZXRBbGxBZ2dyZWdhdGlvbnMoKTtcblx0Y29uc3QgZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSA9IG1ldGFkYXRhLmdldERlZmF1bHRBZ2dyZWdhdGlvbk5hbWUoKTtcblx0Y29uc3QgYWdncmVnYXRpb25DaGlsZHJlbjogUmVjb3JkPHN0cmluZywgKHN0cmluZyB8IFVJNUVsZW1lbnQpW10+ID0ge307XG5cdGFkZENoaWxkQWdncmVnYXRpb24oYWdncmVnYXRpb25DaGlsZHJlbiwgZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSwgbVNldHRpbmdzLmNoaWxkcmVuIGFzIHN0cmluZyB8IFVJNUVsZW1lbnQgfCBVSTVFbGVtZW50W10pO1xuXHRkZWxldGUgbVNldHRpbmdzLmNoaWxkcmVuO1xuXHQvLyBmaW5kIG91dCB3aGljaCBhZ2dyZWdhdGlvbiBhcmUgYm91bmQgKGJvdGggaW4gY2hpbGRyZW4gYW5kIGRpcmVjdGx5IHVuZGVyIGl0KVxuXHRPYmplY3Qua2V5cyhtZXRhZGF0YUFnZ3JlZ2F0aW9ucykuZm9yRWFjaCgoYWdncmVnYXRpb25OYW1lKSA9PiB7XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAobVNldHRpbmdzLmhhc093blByb3BlcnR5KGFnZ3JlZ2F0aW9uTmFtZSkpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBtU2V0dGluZ3NbYWdncmVnYXRpb25OYW1lXSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdID0ge1xuXHRcdFx0XHRcdFx0cGF0aDogbVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0eXBlb2YgYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHQobVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gYXMgeyBmYWN0b3J5OiBGdW5jdGlvbiB9KS5mYWN0b3J5ID0gYWdncmVnYXRpb25DaGlsZHJlbltcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uTmFtZVxuXHRcdFx0XHRcdF0gYXMgdW5rbm93biBhcyBGdW5jdGlvbjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQobVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gYXMgeyB0ZW1wbGF0ZTogc3RyaW5nIHwgVUk1RWxlbWVudCB9KS50ZW1wbGF0ZSA9IGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXVswXTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gPSBhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHByb3BlcnRpZXMuXG4gKlxuICogSWYgdGhlIHByb3BlcnR5IGlzIGEgYmluZGluZ1Rvb2xraXQgZXhwcmVzc2lvbiB3ZSBuZWVkIHRvIGNvbXBpbGUgaXQuXG4gKiBFbHNlIGlmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgYXMgc3RyaW5nIChjb21waWxlZCBiaW5kaW5nIGV4cHJlc3Npb24gcmV0dXJucyBzdHJpbmcgYnkgZGVmYXVsdCBldmVuIGlmIGl0J3MgYSBib29sZWFuLCBpbnQsIGV0Yy4pIGFuZCBpdCBkb2Vzbid0IG1hdGNoIHdpdGggZXhwZWN0ZWRcbiAqIGZvcm1hdCB0aGUgdmFsdWUgaXMgcGFyc2VkIHRvIHByb3ZpZGUgZXhwZWN0ZWQgZm9ybWF0LlxuICogQHBhcmFtIG1ldGFkYXRhIE1ldGFkYXRhIG9mIHRoZSBjb250cm9sXG4gKiBAcGFyYW0gc2V0dGluZ3MgU2V0dGluZ3Mgb2YgdGhlIGNvbnRyb2xcbiAqIEByZXR1cm5zIEEgbWFwIG9mIGxhdGUgcHJvcGVydGllcyB0aGF0IG5lZWQgdG8gYmUgYXdhaXRlZCBhZnRlciB0aGUgY29udHJvbCBpcyBjcmVhdGVkXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NQcm9wZXJ0aWVzKG1ldGFkYXRhOiBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEsIHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIFByb21pc2U8dW5rbm93bj4+IHtcblx0bGV0IHNldHRpbmdzS2V5OiBrZXlvZiB0eXBlb2Ygc2V0dGluZ3M7XG5cdGNvbnN0IGxhdGVQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBQcm9taXNlPHVua25vd24+PiA9IHt9O1xuXHRjb25zdCBhbGxFdmVudHMgPSBtZXRhZGF0YS5nZXRBbGxFdmVudHMoKTtcblx0Y29uc3QgYWxsUHJvcGVydGllcyA9IG1ldGFkYXRhLmdldEFsbFByb3BlcnRpZXMoKTtcblx0Zm9yIChzZXR0aW5nc0tleSBpbiBzZXR0aW5ncykge1xuXHRcdGNvbnN0IHZhbHVlID0gc2V0dGluZ3Nbc2V0dGluZ3NLZXldO1xuXHRcdGlmIChpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbih2YWx1ZSkpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+ID0gdmFsdWU7XG5cdFx0XHRpZiAoaXNDb25zdGFudChiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24pKSB7XG5cdFx0XHRcdHNldHRpbmdzW3NldHRpbmdzS2V5XSA9IGNvbXBpbGVDb25zdGFudChiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIGZhbHNlLCB0cnVlLCB0cnVlKTtcblx0XHRcdH0gZWxzZSBpZiAoIU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFsbFByb3BlcnRpZXMsIHNldHRpbmdzS2V5KSkge1xuXHRcdFx0XHQvLyBBZ2dyZWdhdGlvbiBjYXNlIC0gd2UgbmVlZCB0byBjb21waWxlIHRoZSBleHByZXNzaW9uIGJ1dCBhcyBhbiBvYmplY3Rcblx0XHRcdFx0aWYgKGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbikpIHtcblx0XHRcdFx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSB7IHBhdGg6IGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbi5wYXRoLCBtb2RlbDogYmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLm1vZGVsTmFtZSB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSBjb21waWxlRXhwcmVzc2lvbihiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmICh2YWx1ZSBhcyBQcm9taXNlPHVua25vd24+KS50aGVuKSB7XG5cdFx0XHRsYXRlUHJvcGVydGllc1tzZXR0aW5nc0tleV0gPSB2YWx1ZSBhcyBQcm9taXNlPHVua25vd24+O1xuXHRcdFx0ZGVsZXRlIHNldHRpbmdzW3NldHRpbmdzS2V5XTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAhdmFsdWUuc3RhcnRzV2l0aChcIntcIikpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5VHlwZSA9IChhbGxQcm9wZXJ0aWVzW3NldHRpbmdzS2V5XSBhcyB7IGdldFR5cGU/OiBGdW5jdGlvbiB9KT8uZ2V0VHlwZT8uKCk7XG5cdFx0XHRpZiAocHJvcGVydHlUeXBlICYmIHByb3BlcnR5VHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlICYmIFtcImJvb2xlYW5cIiwgXCJpbnRcIiwgXCJmbG9hdFwiXS5pbmNsdWRlcyhwcm9wZXJ0eVR5cGUuZ2V0TmFtZSgpKSkge1xuXHRcdFx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSBwcm9wZXJ0eVR5cGUucGFyc2VWYWx1ZSh2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgKHZhbHVlIGFzIEJpbmRpbmdJbmZvSG9sZGVyPHVua25vd24+KS5fX2JpbmRpbmdJbmZvKSB7XG5cdFx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSAodmFsdWUgYXMgQmluZGluZ0luZm9Ib2xkZXI8dW5rbm93bj4pLl9fYmluZGluZ0luZm87XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoYWxsRXZlbnRzLCBzZXR0aW5nc0tleSkpIHtcblx0XHRcdFx0ZGVsZXRlIHNldHRpbmdzW3NldHRpbmdzS2V5XTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGxhdGVQcm9wZXJ0aWVzO1xufVxuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgY29tbWFuZC5cbiAqXG4gKiBSZXNvbHZlcyB0aGUgY29tbWFuZCBzZXQgb24gdGhlIGNvbnRyb2wgdmlhIHRoZSBpbnRyaW5zaWMgY2xhc3MgYXR0cmlidXRlIFwianN4OmNvbW1hbmRcIi5cbiAqIElmIG5vIGNvbW1hbmQgaGFzIGJlZW4gc2V0IG9yIHRoZSB0YXJnZXRlZCBldmVudCBkb2Vzbid0IGV4aXN0LCBubyBjb25maWd1cmF0aW9uIGlzIHNldC5cbiAqIEBwYXJhbSBtZXRhZGF0YSBNZXRhZGF0YSBvZiB0aGUgY29udHJvbFxuICogQHBhcmFtIHNldHRpbmdzIFNldHRpbmdzIG9mIHRoZSBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NDb21tYW5kKG1ldGFkYXRhOiBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEsIHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuXHRjb25zdCBjb21tYW5kUHJvcGVydHkgPSBzZXR0aW5nc1tcImpzeDpjb21tYW5kXCJdO1xuXHRpZiAoY29tbWFuZFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgW2NvbW1hbmQsIGV2ZW50TmFtZV0gPSAoY29tbWFuZFByb3BlcnR5IGFzIHN0cmluZykuc3BsaXQoXCJ8XCIpO1xuXHRcdGNvbnN0IGV2ZW50ID0gbWV0YWRhdGEuZ2V0QWxsRXZlbnRzKClbZXZlbnROYW1lXTtcblx0XHRpZiAoZXZlbnQgJiYgY29tbWFuZC5zdGFydHNXaXRoKFwiY21kOlwiKSkge1xuXHRcdFx0c2V0dGluZ3NbZXZlbnQubmFtZV0gPSBFdmVudEhhbmRsZXJSZXNvbHZlci5yZXNvbHZlRXZlbnRIYW5kbGVyKGNvbW1hbmQpO1xuXHRcdH1cblx0fVxuXHRkZWxldGUgc2V0dGluZ3NbXCJqc3g6Y29tbWFuZFwiXTtcbn1cblxuY29uc3QganN4Q29udHJvbCA9IGZ1bmN0aW9uIDxUIGV4dGVuZHMgRWxlbWVudD4oXG5cdENvbnRyb2xUeXBlOiBOb25BYnN0cmFjdENsYXNzPENvbnRyb2w+IHwgRnVuY3Rpb24sXG5cdHNldHRpbmdzOiBOb25Db250cm9sUHJvcGVydGllczxUPiAmIHtcblx0XHRrZXk6IHN0cmluZztcblx0XHRjaGlsZHJlbj86IEVsZW1lbnQgfCBDb250cm9sUHJvcGVydGllczxUPjtcblx0XHRyZWY/OiBSZWY8VD47XG5cdFx0YmluZGluZz86IHN0cmluZztcblx0XHRjbGFzcz86IHN0cmluZztcblx0XHRbRkxfREVMRUdBVEVdPzogc3RyaW5nO1xuXHRcdFtEVF9ERVNJR05USU1FXT86IHN0cmluZztcblx0fSxcblx0a2V5OiBzdHJpbmcsXG5cdGpzeENvbnRleHQ6IEpTWENvbnRleHRcbik6IENvbnRyb2wgfCBDb250cm9sW10gfCB1bmRlZmluZWQge1xuXHRsZXQgdGFyZ2V0Q29udHJvbDogQ29udHJvbCB8IENvbnRyb2xbXSB8IHVuZGVmaW5lZDtcblxuXHRpZiAoKENvbnRyb2xUeXBlIGFzIHsgaXNGcmFnbWVudD86IGJvb2xlYW4gfSk/LmlzRnJhZ21lbnQpIHtcblx0XHR0YXJnZXRDb250cm9sID0gc2V0dGluZ3MuY2hpbGRyZW4gYXMgQ29udHJvbCB8IENvbnRyb2xbXTtcblx0fSBlbHNlIGlmICgoQ29udHJvbFR5cGUgYXMgdHlwZW9mIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSk/LmlzUnVudGltZSkge1xuXHRcdGNvbnN0IHJ1bnRpbWVCdWlsZGluZ0Jsb2NrID0gbmV3IChDb250cm9sVHlwZSBhcyB0eXBlb2YgUnVudGltZUJ1aWxkaW5nQmxvY2spKHNldHRpbmdzIGFzIHVua25vd24gYXMgJENvbnRyb2xTZXR0aW5ncyk7XG5cdFx0dGFyZ2V0Q29udHJvbCA9IHJ1bnRpbWVCdWlsZGluZ0Jsb2NrLmdldENvbnRlbnQ/Lihqc3hDb250ZXh0LnZpZXchLCBqc3hDb250ZXh0LmFwcENvbXBvbmVudCEpO1xuXHR9IGVsc2UgaWYgKGlzQUNvbnRyb2woQ29udHJvbFR5cGUpKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBDb250cm9sVHlwZS5nZXRNZXRhZGF0YSgpO1xuXHRcdGlmIChrZXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c2V0dGluZ3NbXCJrZXlcIl0gPSBrZXk7XG5cdFx0fVxuXHRcdGNvbnN0IGxhdGVQcm9wZXJ0aWVzID0gcHJvY2Vzc1Byb3BlcnRpZXMobWV0YWRhdGEsIHNldHRpbmdzKTtcblx0XHRwcm9jZXNzQ29tbWFuZChtZXRhZGF0YSwgc2V0dGluZ3MpO1xuXHRcdHByb2Nlc3NBZ2dyZWdhdGlvbnMobWV0YWRhdGEsIHNldHRpbmdzKTtcblx0XHRjb25zdCBjbGFzc0RlZiA9IHNldHRpbmdzLmNsYXNzO1xuXHRcdGNvbnN0IHJlZkRlZiA9IHNldHRpbmdzLnJlZjtcblx0XHRjb25zdCBiaW5kaW5nRGVmID0gc2V0dGluZ3MuYmluZGluZztcblx0XHRjb25zdCBmbERlbGVnYXRlID0gc2V0dGluZ3NbRkxfREVMRUdBVEVdO1xuXHRcdGNvbnN0IGR0RGVzaWdudGltZSA9IHNldHRpbmdzW0RUX0RFU0lHTlRJTUVdO1xuXHRcdGRlbGV0ZSBzZXR0aW5ncy5yZWY7XG5cdFx0ZGVsZXRlIHNldHRpbmdzLmNsYXNzO1xuXHRcdGRlbGV0ZSBzZXR0aW5ncy5iaW5kaW5nO1xuXHRcdGRlbGV0ZSBzZXR0aW5nc1tGTF9ERUxFR0FURV07XG5cdFx0ZGVsZXRlIHNldHRpbmdzW0RUX0RFU0lHTlRJTUVdO1xuXHRcdGNvbnN0IHRhcmdldENvbnRyb2xJbnN0YW5jZSA9IG5ldyBDb250cm9sVHlwZShzZXR0aW5ncyBhcyAkQ29udHJvbFNldHRpbmdzKTtcblx0XHRpZiAoY2xhc3NEZWYpIHtcblx0XHRcdHRhcmdldENvbnRyb2xJbnN0YW5jZS5hZGRTdHlsZUNsYXNzKGNsYXNzRGVmKTtcblx0XHR9XG5cdFx0aWYgKHJlZkRlZikge1xuXHRcdFx0cmVmRGVmLnNldEN1cnJlbnQodGFyZ2V0Q29udHJvbEluc3RhbmNlIGFzIHVua25vd24gYXMgVCk7XG5cdFx0fVxuXHRcdGNvbnN0IGN1c3RvbVNldHRpbmdzID0gdGFyZ2V0Q29udHJvbEluc3RhbmNlLmRhdGEoXCJzYXAtdWktY3VzdG9tLXNldHRpbmdzXCIpID8/IHt9O1xuXHRcdGlmIChmbERlbGVnYXRlKSB7XG5cdFx0XHRjdXN0b21TZXR0aW5nc1tcInNhcC51aS5mbFwiXSA/Pz0ge307XG5cdFx0XHRjdXN0b21TZXR0aW5nc1tcInNhcC51aS5mbFwiXS5kZWxlZ2F0ZSA9IGZsRGVsZWdhdGU7XG5cdFx0fVxuXHRcdGlmIChkdERlc2lnbnRpbWUpIHtcblx0XHRcdGN1c3RvbVNldHRpbmdzW1wic2FwLnVpLmR0XCJdID8/PSB7fTtcblx0XHRcdGN1c3RvbVNldHRpbmdzW1wic2FwLnVpLmR0XCJdLmRlc2lnbnRpbWUgPSBkdERlc2lnbnRpbWU7XG5cdFx0fVxuXHRcdGlmIChPYmplY3Qua2V5cyhjdXN0b21TZXR0aW5ncykubGVuZ3RoID4gMCkge1xuXHRcdFx0dGFyZ2V0Q29udHJvbEluc3RhbmNlLmRhdGEoXCJzYXAtdWktY3VzdG9tLXNldHRpbmdzXCIsIGN1c3RvbVNldHRpbmdzKTtcblx0XHR9XG5cblx0XHRpZiAoYmluZGluZ0RlZikge1xuXHRcdFx0aWYgKHR5cGVvZiBiaW5kaW5nRGVmID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGNvbnN0IGJpbmRpbmdJbmZvID0gYmluZGluZ1BhcnNlcihiaW5kaW5nRGVmKTtcblx0XHRcdFx0aWYgKGJpbmRpbmdJbmZvKSB7XG5cdFx0XHRcdFx0dGFyZ2V0Q29udHJvbEluc3RhbmNlLmJpbmRFbGVtZW50KHsgbW9kZWw6IGJpbmRpbmdJbmZvLm1vZGVsID8/IHVuZGVmaW5lZCwgcGF0aDogYmluZGluZ0luZm8ucGF0aCB9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0YXJnZXRDb250cm9sSW5zdGFuY2UuYmluZEVsZW1lbnQoYmluZGluZ0RlZik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBXZSBjb25zaWRlciBpdCdzIGFuIG9iamVjdFxuXHRcdFx0XHRPYmplY3Qua2V5cyhiaW5kaW5nRGVmKS5mb3JFYWNoKChiaW5kaW5nRGVmS2V5KSA9PiB7XG5cdFx0XHRcdFx0dGFyZ2V0Q29udHJvbEluc3RhbmNlLmJpbmRFbGVtZW50KHsgbW9kZWw6IGJpbmRpbmdEZWZLZXksIHBhdGg6IGJpbmRpbmdEZWZbYmluZGluZ0RlZktleV0gfSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IgKGNvbnN0IGxhdGVQcm9wZXJ0aWVzS2V5IGluIGxhdGVQcm9wZXJ0aWVzKSB7XG5cdFx0XHRsYXRlUHJvcGVydGllc1tsYXRlUHJvcGVydGllc0tleV1cblx0XHRcdFx0LnRoZW4oKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRhcmdldENvbnRyb2xJbnN0YW5jZS5zZXRQcm9wZXJ0eShsYXRlUHJvcGVydGllc0tleSwgdmFsdWUpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBDb3VsZG4ndCBzZXQgcHJvcGVydHkgJHtsYXRlUHJvcGVydGllc0tleX0gb24gJHtDb250cm9sVHlwZS5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX1gLCBlcnJvciwgXCJqc3hDb250cm9sXCIpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdFx0dGFyZ2V0Q29udHJvbCA9IHRhcmdldENvbnRyb2xJbnN0YW5jZTtcblx0fSBlbHNlIGlmICh0eXBlb2YgQ29udHJvbFR5cGUgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdGNvbnN0IGNvbnRyb2xUeXBlRm4gPSBDb250cm9sVHlwZTtcblx0XHR0YXJnZXRDb250cm9sID0gY29udHJvbFR5cGVGbihzZXR0aW5ncyBhcyAkQ29udHJvbFNldHRpbmdzKTtcblx0fSBlbHNlIHtcblx0XHR0YXJnZXRDb250cm9sID0gbmV3IFRleHQoeyB0ZXh0OiBcIk1pc3NpbmcgY29tcG9uZW50IFwiICsgKENvbnRyb2xUeXBlIGFzIHN0cmluZykgfSk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0Q29udHJvbDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGpzeENvbnRyb2w7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7RUFzQkEsTUFBTUEsV0FBVyxHQUFHLGFBQWE7RUFDakMsTUFBTUMsYUFBYSxHQUFHLGVBQWU7RUFDckMsTUFBTUMsbUJBQW1CLEdBQUcsU0FBQUEsQ0FDM0JDLG1CQUE0RCxFQUM1REMsZUFBdUIsRUFDdkJDLEtBQTBDLEVBQ25DO0lBQ1AsSUFBSUEsS0FBSyxLQUFLLElBQUksSUFBSUEsS0FBSyxLQUFLQyxTQUFTLElBQUksT0FBT0QsS0FBSyxLQUFLLFFBQVEsRUFBRTtNQUN2RTtJQUNEO0lBQ0EsSUFBSSxDQUFDRixtQkFBbUIsQ0FBQ0MsZUFBZSxDQUFDLEVBQUU7TUFDMUNELG1CQUFtQixDQUFDQyxlQUFlLENBQUMsR0FBRyxFQUFFO0lBQzFDO0lBQ0EsSUFBSUcsZ0JBQWdCLENBQUNGLEtBQUssQ0FBQyxFQUFFO01BQzVCRixtQkFBbUIsQ0FBQ0MsZUFBZSxDQUFDLENBQUNJLElBQUksQ0FBQ0gsS0FBSyxDQUFDO0lBQ2pELENBQUMsTUFBTSxJQUFJSSxLQUFLLENBQUNDLE9BQU8sQ0FBQ0wsS0FBSyxDQUFDLEVBQUU7TUFDaENBLEtBQUssQ0FBQ00sT0FBTyxDQUFFQyxRQUFRLElBQUs7UUFDM0JWLG1CQUFtQixDQUFDQyxtQkFBbUIsRUFBRUMsZUFBZSxFQUFFUSxRQUFRLENBQUM7TUFDcEUsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxNQUFNLElBQUksT0FBT1AsS0FBSyxLQUFLLFVBQVUsRUFBRTtNQUN2Q0YsbUJBQW1CLENBQUNDLGVBQWUsQ0FBQyxHQUFHQyxLQUFLO0lBQzdDLENBQUMsTUFBTTtNQUNOUSxNQUFNLENBQUNDLElBQUksQ0FBQ1QsS0FBSyxDQUFDLENBQUNNLE9BQU8sQ0FBRUksUUFBUSxJQUFLO1FBQ3hD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
|
|
226
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGTF9ERUxFR0FURSIsIkNPUkVfUkVRVUlSRSIsIkRUX0RFU0lHTlRJTUUiLCJhZGRDaGlsZEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25DaGlsZHJlbiIsImFnZ3JlZ2F0aW9uTmFtZSIsImNoaWxkIiwidW5kZWZpbmVkIiwiaXNDaGlsZEFuRWxlbWVudCIsInB1c2giLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwic3ViQ2hpbGQiLCJPYmplY3QiLCJrZXlzIiwiY2hpbGRLZXkiLCJjaGlsZHJlbiIsImlzQSIsImlzQUNvbnRyb2wiLCJnZXRNZXRhZGF0YSIsInByb2Nlc3NBZ2dyZWdhdGlvbnMiLCJtZXRhZGF0YSIsIm1TZXR0aW5ncyIsIm1ldGFkYXRhQWdncmVnYXRpb25zIiwiZ2V0QWxsQWdncmVnYXRpb25zIiwiZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSIsImdldERlZmF1bHRBZ2dyZWdhdGlvbk5hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsInBhdGgiLCJmYWN0b3J5IiwidGVtcGxhdGUiLCJwcm9jZXNzUHJvcGVydGllcyIsInNldHRpbmdzIiwic2V0dGluZ3NLZXkiLCJsYXRlUHJvcGVydGllcyIsImFsbEV2ZW50cyIsImdldEFsbEV2ZW50cyIsImFsbFByb3BlcnRpZXMiLCJnZXRBbGxQcm9wZXJ0aWVzIiwidmFsdWUiLCJpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiIsImJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiIsImlzQ29uc3RhbnQiLCJjb21waWxlQ29uc3RhbnQiLCJjYWxsIiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJtb2RlbCIsIm1vZGVsTmFtZSIsImNvbXBpbGVFeHByZXNzaW9uIiwidGhlbiIsInN0YXJ0c1dpdGgiLCJwcm9wZXJ0eVR5cGUiLCJnZXRUeXBlIiwiRGF0YVR5cGUiLCJpbmNsdWRlcyIsImdldE5hbWUiLCJwYXJzZVZhbHVlIiwiX19iaW5kaW5nSW5mbyIsInByb2Nlc3NDb21tYW5kIiwiY29tbWFuZFByb3BlcnR5IiwiY29tbWFuZCIsImV2ZW50TmFtZSIsInNwbGl0IiwiZXZlbnQiLCJuYW1lIiwiRXZlbnRIYW5kbGVyUmVzb2x2ZXIiLCJyZXNvbHZlRXZlbnRIYW5kbGVyIiwianN4Q29udHJvbCIsIkNvbnRyb2xUeXBlIiwia2V5IiwianN4Q29udGV4dCIsInRhcmdldENvbnRyb2wiLCJpc0ZyYWdtZW50IiwiaXNSdW50aW1lIiwicnVudGltZUJ1aWxkaW5nQmxvY2siLCJnZXRDb250ZW50IiwidmlldyIsImFwcENvbXBvbmVudCIsImNsYXNzRGVmIiwiY2xhc3MiLCJyZWZEZWYiLCJyZWYiLCJiaW5kaW5nRGVmIiwiYmluZGluZyIsImZsRGVsZWdhdGUiLCJkdERlc2lnbnRpbWUiLCJ0YXJnZXRDb250cm9sSW5zdGFuY2UiLCJhZGRTdHlsZUNsYXNzIiwic2V0Q3VycmVudCIsImN1c3RvbVNldHRpbmdzIiwiZGF0YSIsImRlbGVnYXRlIiwiZGVzaWdudGltZSIsImxlbmd0aCIsImJpbmRpbmdJbmZvIiwiYmluZGluZ1BhcnNlciIsImJpbmRFbGVtZW50IiwiYmluZGluZ0RlZktleSIsImxhdGVQcm9wZXJ0aWVzS2V5Iiwic2V0UHJvcGVydHkiLCJjYXRjaCIsImVycm9yIiwiTG9nIiwiY29udHJvbFR5cGVGbiIsIlRleHQiLCJ0ZXh0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJqc3gtY29udHJvbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRjb21waWxlQ29uc3RhbnQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0aXNDb25zdGFudCxcblx0aXNQYXRoSW5Nb2RlbEV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdJbmZvSG9sZGVyLCBOb25BYnN0cmFjdENsYXNzIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sUHJvcGVydGllcywgSlNYQ29udGV4dCwgTm9uQ29udHJvbFByb3BlcnRpZXMsIFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2VcIjtcbmltcG9ydCB0eXBlIFJ1bnRpbWVCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL1J1bnRpbWVCdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IERhdGFUeXBlIGZyb20gXCJzYXAvdWkvYmFzZS9EYXRhVHlwZVwiO1xuaW1wb3J0IHsgYmluZGluZ1BhcnNlciB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RNZXRhZGF0YVwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBFbGVtZW50LCBkZWZhdWx0IGFzIFVJNUVsZW1lbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEV2ZW50SGFuZGxlclJlc29sdmVyIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvRXZlbnRIYW5kbGVyUmVzb2x2ZXJcIjtcblxuY29uc3QgRkxfREVMRUdBVEUgPSBcImZsOmRlbGVnYXRlXCI7XG5jb25zdCBDT1JFX1JFUVVJUkUgPSBcImNvcmU6cmVxdWlyZVwiO1xuY29uc3QgRFRfREVTSUdOVElNRSA9IFwiZHQ6ZGVzaWdudGltZVwiO1xuY29uc3QgYWRkQ2hpbGRBZ2dyZWdhdGlvbiA9IGZ1bmN0aW9uIChcblx0YWdncmVnYXRpb25DaGlsZHJlbjogUmVjb3JkPHN0cmluZywgKHN0cmluZyB8IFVJNUVsZW1lbnQpW10+LFxuXHRhZ2dyZWdhdGlvbk5hbWU6IHN0cmluZyxcblx0Y2hpbGQ/OiBzdHJpbmcgfCBVSTVFbGVtZW50IHwgVUk1RWxlbWVudFtdXG4pOiB2b2lkIHtcblx0aWYgKGNoaWxkID09PSBudWxsIHx8IGNoaWxkID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGNoaWxkID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmICghYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdKSB7XG5cdFx0YWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdID0gW107XG5cdH1cblx0aWYgKGlzQ2hpbGRBbkVsZW1lbnQoY2hpbGQpKSB7XG5cdFx0YWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdLnB1c2goY2hpbGQpO1xuXHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQpKSB7XG5cdFx0Y2hpbGQuZm9yRWFjaCgoc3ViQ2hpbGQpID0+IHtcblx0XHRcdGFkZENoaWxkQWdncmVnYXRpb24oYWdncmVnYXRpb25DaGlsZHJlbiwgYWdncmVnYXRpb25OYW1lLCBzdWJDaGlsZCk7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGNoaWxkID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0gPSBjaGlsZDtcblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyhjaGlsZCkuZm9yRWFjaCgoY2hpbGRLZXkpID0+IHtcblx0XHRcdGFkZENoaWxkQWdncmVnYXRpb24oYWdncmVnYXRpb25DaGlsZHJlbiwgY2hpbGRLZXksIGNoaWxkW2NoaWxkS2V5XSk7XG5cdFx0fSk7XG5cdH1cbn07XG5jb25zdCBpc0NoaWxkQW5FbGVtZW50ID0gZnVuY3Rpb24gKGNoaWxkcmVuPzogdW5rbm93bik6IGNoaWxkcmVuIGlzIEVsZW1lbnQge1xuXHRyZXR1cm4gKGNoaWxkcmVuIGFzIEVsZW1lbnQpPy5pc0E/LihcInNhcC51aS5jb3JlLkVsZW1lbnRcIik7XG59O1xuY29uc3QgaXNBQ29udHJvbCA9IGZ1bmN0aW9uIChjaGlsZHJlbj86IHR5cGVvZiBDb250cm9sIHwgRnVuY3Rpb24pOiBjaGlsZHJlbiBpcyBOb25BYnN0cmFjdENsYXNzPENvbnRyb2w+IHtcblx0cmV0dXJuICEhKGNoaWxkcmVuIGFzIHR5cGVvZiBDb250cm9sKT8uZ2V0TWV0YWRhdGE7XG59O1xuXG5mdW5jdGlvbiBwcm9jZXNzQWdncmVnYXRpb25zKG1ldGFkYXRhOiBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEsIG1TZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcblx0Y29uc3QgbWV0YWRhdGFBZ2dyZWdhdGlvbnMgPSBtZXRhZGF0YS5nZXRBbGxBZ2dyZWdhdGlvbnMoKTtcblx0Y29uc3QgZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSA9IG1ldGFkYXRhLmdldERlZmF1bHRBZ2dyZWdhdGlvbk5hbWUoKTtcblx0Y29uc3QgYWdncmVnYXRpb25DaGlsZHJlbjogUmVjb3JkPHN0cmluZywgKHN0cmluZyB8IFVJNUVsZW1lbnQpW10+ID0ge307XG5cdGFkZENoaWxkQWdncmVnYXRpb24oYWdncmVnYXRpb25DaGlsZHJlbiwgZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSwgbVNldHRpbmdzLmNoaWxkcmVuIGFzIHN0cmluZyB8IFVJNUVsZW1lbnQgfCBVSTVFbGVtZW50W10pO1xuXHRkZWxldGUgbVNldHRpbmdzLmNoaWxkcmVuO1xuXHQvLyBmaW5kIG91dCB3aGljaCBhZ2dyZWdhdGlvbiBhcmUgYm91bmQgKGJvdGggaW4gY2hpbGRyZW4gYW5kIGRpcmVjdGx5IHVuZGVyIGl0KVxuXHRPYmplY3Qua2V5cyhtZXRhZGF0YUFnZ3JlZ2F0aW9ucykuZm9yRWFjaCgoYWdncmVnYXRpb25OYW1lKSA9PiB7XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAobVNldHRpbmdzLmhhc093blByb3BlcnR5KGFnZ3JlZ2F0aW9uTmFtZSkpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBtU2V0dGluZ3NbYWdncmVnYXRpb25OYW1lXSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdID0ge1xuXHRcdFx0XHRcdFx0cGF0aDogbVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0eXBlb2YgYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHQobVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gYXMgeyBmYWN0b3J5OiBGdW5jdGlvbiB9KS5mYWN0b3J5ID0gYWdncmVnYXRpb25DaGlsZHJlbltcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uTmFtZVxuXHRcdFx0XHRcdF0gYXMgdW5rbm93biBhcyBGdW5jdGlvbjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQobVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gYXMgeyB0ZW1wbGF0ZTogc3RyaW5nIHwgVUk1RWxlbWVudCB9KS50ZW1wbGF0ZSA9IGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXVswXTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gPSBhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHByb3BlcnRpZXMuXG4gKlxuICogSWYgdGhlIHByb3BlcnR5IGlzIGEgYmluZGluZ1Rvb2xraXQgZXhwcmVzc2lvbiB3ZSBuZWVkIHRvIGNvbXBpbGUgaXQuXG4gKiBFbHNlIGlmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgYXMgc3RyaW5nIChjb21waWxlZCBiaW5kaW5nIGV4cHJlc3Npb24gcmV0dXJucyBzdHJpbmcgYnkgZGVmYXVsdCBldmVuIGlmIGl0J3MgYSBib29sZWFuLCBpbnQsIGV0Yy4pIGFuZCBpdCBkb2Vzbid0IG1hdGNoIHdpdGggZXhwZWN0ZWRcbiAqIGZvcm1hdCB0aGUgdmFsdWUgaXMgcGFyc2VkIHRvIHByb3ZpZGUgZXhwZWN0ZWQgZm9ybWF0LlxuICogQHBhcmFtIG1ldGFkYXRhIE1ldGFkYXRhIG9mIHRoZSBjb250cm9sXG4gKiBAcGFyYW0gc2V0dGluZ3MgU2V0dGluZ3Mgb2YgdGhlIGNvbnRyb2xcbiAqIEByZXR1cm5zIEEgbWFwIG9mIGxhdGUgcHJvcGVydGllcyB0aGF0IG5lZWQgdG8gYmUgYXdhaXRlZCBhZnRlciB0aGUgY29udHJvbCBpcyBjcmVhdGVkXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NQcm9wZXJ0aWVzKG1ldGFkYXRhOiBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEsIHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIFByb21pc2U8dW5rbm93bj4+IHtcblx0bGV0IHNldHRpbmdzS2V5OiBrZXlvZiB0eXBlb2Ygc2V0dGluZ3M7XG5cdGNvbnN0IGxhdGVQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBQcm9taXNlPHVua25vd24+PiA9IHt9O1xuXHRjb25zdCBhbGxFdmVudHMgPSBtZXRhZGF0YS5nZXRBbGxFdmVudHMoKTtcblx0Y29uc3QgYWxsUHJvcGVydGllcyA9IG1ldGFkYXRhLmdldEFsbFByb3BlcnRpZXMoKTtcblx0Zm9yIChzZXR0aW5nc0tleSBpbiBzZXR0aW5ncykge1xuXHRcdGNvbnN0IHZhbHVlID0gc2V0dGluZ3Nbc2V0dGluZ3NLZXldO1xuXHRcdGlmIChpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbih2YWx1ZSkpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+ID0gdmFsdWU7XG5cdFx0XHRpZiAoaXNDb25zdGFudChiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24pKSB7XG5cdFx0XHRcdHNldHRpbmdzW3NldHRpbmdzS2V5XSA9IGNvbXBpbGVDb25zdGFudChiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIGZhbHNlLCB0cnVlLCB0cnVlKTtcblx0XHRcdH0gZWxzZSBpZiAoIU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFsbFByb3BlcnRpZXMsIHNldHRpbmdzS2V5KSkge1xuXHRcdFx0XHQvLyBBZ2dyZWdhdGlvbiBjYXNlIC0gd2UgbmVlZCB0byBjb21waWxlIHRoZSBleHByZXNzaW9uIGJ1dCBhcyBhbiBvYmplY3Rcblx0XHRcdFx0aWYgKGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbikpIHtcblx0XHRcdFx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSB7IHBhdGg6IGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbi5wYXRoLCBtb2RlbDogYmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLm1vZGVsTmFtZSB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSBjb21waWxlRXhwcmVzc2lvbihiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmICh2YWx1ZSBhcyBQcm9taXNlPHVua25vd24+KS50aGVuKSB7XG5cdFx0XHRsYXRlUHJvcGVydGllc1tzZXR0aW5nc0tleV0gPSB2YWx1ZSBhcyBQcm9taXNlPHVua25vd24+O1xuXHRcdFx0ZGVsZXRlIHNldHRpbmdzW3NldHRpbmdzS2V5XTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAhdmFsdWUuc3RhcnRzV2l0aChcIntcIikpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5VHlwZSA9IChhbGxQcm9wZXJ0aWVzW3NldHRpbmdzS2V5XSBhcyB7IGdldFR5cGU/OiBGdW5jdGlvbiB9KT8uZ2V0VHlwZT8uKCk7XG5cdFx0XHRpZiAocHJvcGVydHlUeXBlICYmIHByb3BlcnR5VHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlICYmIFtcImJvb2xlYW5cIiwgXCJpbnRcIiwgXCJmbG9hdFwiXS5pbmNsdWRlcyhwcm9wZXJ0eVR5cGUuZ2V0TmFtZSgpKSkge1xuXHRcdFx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSBwcm9wZXJ0eVR5cGUucGFyc2VWYWx1ZSh2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgKHZhbHVlIGFzIEJpbmRpbmdJbmZvSG9sZGVyPHVua25vd24+KS5fX2JpbmRpbmdJbmZvKSB7XG5cdFx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSAodmFsdWUgYXMgQmluZGluZ0luZm9Ib2xkZXI8dW5rbm93bj4pLl9fYmluZGluZ0luZm87XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoYWxsRXZlbnRzLCBzZXR0aW5nc0tleSkpIHtcblx0XHRcdFx0ZGVsZXRlIHNldHRpbmdzW3NldHRpbmdzS2V5XTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGxhdGVQcm9wZXJ0aWVzO1xufVxuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgY29tbWFuZC5cbiAqXG4gKiBSZXNvbHZlcyB0aGUgY29tbWFuZCBzZXQgb24gdGhlIGNvbnRyb2wgdmlhIHRoZSBpbnRyaW5zaWMgY2xhc3MgYXR0cmlidXRlIFwianN4OmNvbW1hbmRcIi5cbiAqIElmIG5vIGNvbW1hbmQgaGFzIGJlZW4gc2V0IG9yIHRoZSB0YXJnZXRlZCBldmVudCBkb2Vzbid0IGV4aXN0LCBubyBjb25maWd1cmF0aW9uIGlzIHNldC5cbiAqIEBwYXJhbSBtZXRhZGF0YSBNZXRhZGF0YSBvZiB0aGUgY29udHJvbFxuICogQHBhcmFtIHNldHRpbmdzIFNldHRpbmdzIG9mIHRoZSBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NDb21tYW5kKG1ldGFkYXRhOiBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEsIHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuXHRjb25zdCBjb21tYW5kUHJvcGVydHkgPSBzZXR0aW5nc1tcImpzeDpjb21tYW5kXCJdO1xuXHRpZiAoY29tbWFuZFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgW2NvbW1hbmQsIGV2ZW50TmFtZV0gPSAoY29tbWFuZFByb3BlcnR5IGFzIHN0cmluZykuc3BsaXQoXCJ8XCIpO1xuXHRcdGNvbnN0IGV2ZW50ID0gbWV0YWRhdGEuZ2V0QWxsRXZlbnRzKClbZXZlbnROYW1lXTtcblx0XHRpZiAoZXZlbnQgJiYgY29tbWFuZC5zdGFydHNXaXRoKFwiY21kOlwiKSkge1xuXHRcdFx0c2V0dGluZ3NbZXZlbnQubmFtZV0gPSBFdmVudEhhbmRsZXJSZXNvbHZlci5yZXNvbHZlRXZlbnRIYW5kbGVyKGNvbW1hbmQpO1xuXHRcdH1cblx0fVxuXHRkZWxldGUgc2V0dGluZ3NbXCJqc3g6Y29tbWFuZFwiXTtcbn1cblxuY29uc3QganN4Q29udHJvbCA9IGZ1bmN0aW9uIDxUIGV4dGVuZHMgRWxlbWVudD4oXG5cdENvbnRyb2xUeXBlOiBOb25BYnN0cmFjdENsYXNzPENvbnRyb2w+IHwgRnVuY3Rpb24sXG5cdHNldHRpbmdzOiBOb25Db250cm9sUHJvcGVydGllczxUPiAmIHtcblx0XHRrZXk6IHN0cmluZztcblx0XHRjaGlsZHJlbj86IEVsZW1lbnQgfCBDb250cm9sUHJvcGVydGllczxUPjtcblx0XHRyZWY/OiBSZWY8VD47XG5cdFx0YmluZGluZz86IHN0cmluZztcblx0XHRjbGFzcz86IHN0cmluZztcblx0XHRbRkxfREVMRUdBVEVdPzogc3RyaW5nO1xuXHRcdFtEVF9ERVNJR05USU1FXT86IHN0cmluZztcblx0XHRbQ09SRV9SRVFVSVJFXT86IHN0cmluZztcblx0fSxcblx0a2V5OiBzdHJpbmcsXG5cdGpzeENvbnRleHQ6IEpTWENvbnRleHRcbik6IENvbnRyb2wgfCBDb250cm9sW10gfCB1bmRlZmluZWQge1xuXHRsZXQgdGFyZ2V0Q29udHJvbDogQ29udHJvbCB8IENvbnRyb2xbXSB8IHVuZGVmaW5lZDtcblxuXHRpZiAoKENvbnRyb2xUeXBlIGFzIHsgaXNGcmFnbWVudD86IGJvb2xlYW4gfSk/LmlzRnJhZ21lbnQpIHtcblx0XHR0YXJnZXRDb250cm9sID0gc2V0dGluZ3MuY2hpbGRyZW4gYXMgQ29udHJvbCB8IENvbnRyb2xbXTtcblx0fSBlbHNlIGlmICgoQ29udHJvbFR5cGUgYXMgdHlwZW9mIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSk/LmlzUnVudGltZSkge1xuXHRcdGNvbnN0IHJ1bnRpbWVCdWlsZGluZ0Jsb2NrID0gbmV3IChDb250cm9sVHlwZSBhcyB0eXBlb2YgUnVudGltZUJ1aWxkaW5nQmxvY2spKHNldHRpbmdzIGFzIHVua25vd24gYXMgJENvbnRyb2xTZXR0aW5ncyk7XG5cdFx0dGFyZ2V0Q29udHJvbCA9IHJ1bnRpbWVCdWlsZGluZ0Jsb2NrLmdldENvbnRlbnQ/Lihqc3hDb250ZXh0LnZpZXchLCBqc3hDb250ZXh0LmFwcENvbXBvbmVudCEpO1xuXHR9IGVsc2UgaWYgKGlzQUNvbnRyb2woQ29udHJvbFR5cGUpKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBDb250cm9sVHlwZS5nZXRNZXRhZGF0YSgpO1xuXHRcdGlmIChrZXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c2V0dGluZ3NbXCJrZXlcIl0gPSBrZXk7XG5cdFx0fVxuXHRcdGNvbnN0IGxhdGVQcm9wZXJ0aWVzID0gcHJvY2Vzc1Byb3BlcnRpZXMobWV0YWRhdGEsIHNldHRpbmdzKTtcblx0XHRwcm9jZXNzQ29tbWFuZChtZXRhZGF0YSwgc2V0dGluZ3MpO1xuXHRcdHByb2Nlc3NBZ2dyZWdhdGlvbnMobWV0YWRhdGEsIHNldHRpbmdzKTtcblx0XHRjb25zdCBjbGFzc0RlZiA9IHNldHRpbmdzLmNsYXNzO1xuXHRcdGNvbnN0IHJlZkRlZiA9IHNldHRpbmdzLnJlZjtcblx0XHRjb25zdCBiaW5kaW5nRGVmID0gc2V0dGluZ3MuYmluZGluZztcblx0XHRjb25zdCBmbERlbGVnYXRlID0gc2V0dGluZ3NbRkxfREVMRUdBVEVdO1xuXHRcdGNvbnN0IGR0RGVzaWdudGltZSA9IHNldHRpbmdzW0RUX0RFU0lHTlRJTUVdO1xuXHRcdGRlbGV0ZSBzZXR0aW5ncy5yZWY7XG5cdFx0ZGVsZXRlIHNldHRpbmdzLmNsYXNzO1xuXHRcdGRlbGV0ZSBzZXR0aW5ncy5iaW5kaW5nO1xuXHRcdGRlbGV0ZSBzZXR0aW5nc1tGTF9ERUxFR0FURV07XG5cdFx0ZGVsZXRlIHNldHRpbmdzW0RUX0RFU0lHTlRJTUVdO1xuXHRcdGRlbGV0ZSBzZXR0aW5nc1tDT1JFX1JFUVVJUkVdOyAvLyBDb3JlIHJlcXVpcmUgaXMgbm90IHVzZWZ1bCBpbiBjb250cm9sIG1vZGVcblx0XHRjb25zdCB0YXJnZXRDb250cm9sSW5zdGFuY2UgPSBuZXcgQ29udHJvbFR5cGUoc2V0dGluZ3MgYXMgJENvbnRyb2xTZXR0aW5ncyk7XG5cdFx0aWYgKGNsYXNzRGVmKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sSW5zdGFuY2UuYWRkU3R5bGVDbGFzcyhjbGFzc0RlZik7XG5cdFx0fVxuXHRcdGlmIChyZWZEZWYpIHtcblx0XHRcdHJlZkRlZi5zZXRDdXJyZW50KHRhcmdldENvbnRyb2xJbnN0YW5jZSBhcyB1bmtub3duIGFzIFQpO1xuXHRcdH1cblx0XHRjb25zdCBjdXN0b21TZXR0aW5ncyA9IHRhcmdldENvbnRyb2xJbnN0YW5jZS5kYXRhKFwic2FwLXVpLWN1c3RvbS1zZXR0aW5nc1wiKSA/PyB7fTtcblx0XHRpZiAoZmxEZWxlZ2F0ZSkge1xuXHRcdFx0Y3VzdG9tU2V0dGluZ3NbXCJzYXAudWkuZmxcIl0gPz89IHt9O1xuXHRcdFx0Y3VzdG9tU2V0dGluZ3NbXCJzYXAudWkuZmxcIl0uZGVsZWdhdGUgPSBmbERlbGVnYXRlO1xuXHRcdH1cblx0XHRpZiAoZHREZXNpZ250aW1lKSB7XG5cdFx0XHRjdXN0b21TZXR0aW5nc1tcInNhcC51aS5kdFwiXSA/Pz0ge307XG5cdFx0XHRjdXN0b21TZXR0aW5nc1tcInNhcC51aS5kdFwiXS5kZXNpZ250aW1lID0gZHREZXNpZ250aW1lO1xuXHRcdH1cblx0XHRpZiAoT2JqZWN0LmtleXMoY3VzdG9tU2V0dGluZ3MpLmxlbmd0aCA+IDApIHtcblx0XHRcdHRhcmdldENvbnRyb2xJbnN0YW5jZS5kYXRhKFwic2FwLXVpLWN1c3RvbS1zZXR0aW5nc1wiLCBjdXN0b21TZXR0aW5ncyk7XG5cdFx0fVxuXG5cdFx0aWYgKGJpbmRpbmdEZWYpIHtcblx0XHRcdGlmICh0eXBlb2YgYmluZGluZ0RlZiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nSW5mbyA9IGJpbmRpbmdQYXJzZXIoYmluZGluZ0RlZik7XG5cdFx0XHRcdGlmIChiaW5kaW5nSW5mbykge1xuXHRcdFx0XHRcdHRhcmdldENvbnRyb2xJbnN0YW5jZS5iaW5kRWxlbWVudCh7IG1vZGVsOiBiaW5kaW5nSW5mby5tb2RlbCA/PyB1bmRlZmluZWQsIHBhdGg6IGJpbmRpbmdJbmZvLnBhdGggfSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGFyZ2V0Q29udHJvbEluc3RhbmNlLmJpbmRFbGVtZW50KGJpbmRpbmdEZWYpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gV2UgY29uc2lkZXIgaXQncyBhbiBvYmplY3Rcblx0XHRcdFx0T2JqZWN0LmtleXMoYmluZGluZ0RlZikuZm9yRWFjaCgoYmluZGluZ0RlZktleSkgPT4ge1xuXHRcdFx0XHRcdHRhcmdldENvbnRyb2xJbnN0YW5jZS5iaW5kRWxlbWVudCh7IG1vZGVsOiBiaW5kaW5nRGVmS2V5LCBwYXRoOiBiaW5kaW5nRGVmW2JpbmRpbmdEZWZLZXldIH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Zm9yIChjb25zdCBsYXRlUHJvcGVydGllc0tleSBpbiBsYXRlUHJvcGVydGllcykge1xuXHRcdFx0bGF0ZVByb3BlcnRpZXNbbGF0ZVByb3BlcnRpZXNLZXldXG5cdFx0XHRcdC50aGVuKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0YXJnZXRDb250cm9sSW5zdGFuY2Uuc2V0UHJvcGVydHkobGF0ZVByb3BlcnRpZXNLZXksIHZhbHVlKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgQ291bGRuJ3Qgc2V0IHByb3BlcnR5ICR7bGF0ZVByb3BlcnRpZXNLZXl9IG9uICR7Q29udHJvbFR5cGUuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9YCwgZXJyb3IsIFwianN4Q29udHJvbFwiKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRhcmdldENvbnRyb2wgPSB0YXJnZXRDb250cm9sSW5zdGFuY2U7XG5cdH0gZWxzZSBpZiAodHlwZW9mIENvbnRyb2xUeXBlID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRjb25zdCBjb250cm9sVHlwZUZuID0gQ29udHJvbFR5cGU7XG5cdFx0dGFyZ2V0Q29udHJvbCA9IGNvbnRyb2xUeXBlRm4oc2V0dGluZ3MgYXMgJENvbnRyb2xTZXR0aW5ncyk7XG5cdH0gZWxzZSB7XG5cdFx0dGFyZ2V0Q29udHJvbCA9IG5ldyBUZXh0KHsgdGV4dDogXCJNaXNzaW5nIGNvbXBvbmVudCBcIiArIChDb250cm9sVHlwZSBhcyBzdHJpbmcpIH0pO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldENvbnRyb2w7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBqc3hDb250cm9sO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0VBc0JBLE1BQU1BLFdBQVcsR0FBRyxhQUFhO0VBQ2pDLE1BQU1DLFlBQVksR0FBRyxjQUFjO0VBQ25DLE1BQU1DLGFBQWEsR0FBRyxlQUFlO0VBQ3JDLE1BQU1DLG1CQUFtQixHQUFHLFNBQUFBLENBQzNCQyxtQkFBNEQsRUFDNURDLGVBQXVCLEVBQ3ZCQyxLQUEwQyxFQUNuQztJQUNQLElBQUlBLEtBQUssS0FBSyxJQUFJLElBQUlBLEtBQUssS0FBS0MsU0FBUyxJQUFJLE9BQU9ELEtBQUssS0FBSyxRQUFRLEVBQUU7TUFDdkU7SUFDRDtJQUNBLElBQUksQ0FBQ0YsbUJBQW1CLENBQUNDLGVBQWUsQ0FBQyxFQUFFO01BQzFDRCxtQkFBbUIsQ0FBQ0MsZUFBZSxDQUFDLEdBQUcsRUFBRTtJQUMxQztJQUNBLElBQUlHLGdCQUFnQixDQUFDRixLQUFLLENBQUMsRUFBRTtNQUM1QkYsbUJBQW1CLENBQUNDLGVBQWUsQ0FBQyxDQUFDSSxJQUFJLENBQUNILEtBQUssQ0FBQztJQUNqRCxDQUFDLE1BQU0sSUFBSUksS0FBSyxDQUFDQyxPQUFPLENBQUNMLEtBQUssQ0FBQyxFQUFFO01BQ2hDQSxLQUFLLENBQUNNLE9BQU8sQ0FBRUMsUUFBUSxJQUFLO1FBQzNCVixtQkFBbUIsQ0FBQ0MsbUJBQW1CLEVBQUVDLGVBQWUsRUFBRVEsUUFBUSxDQUFDO01BQ3BFLENBQUMsQ0FBQztJQUNILENBQUMsTUFBTSxJQUFJLE9BQU9QLEtBQUssS0FBSyxVQUFVLEVBQUU7TUFDdkNGLG1CQUFtQixDQUFDQyxlQUFlLENBQUMsR0FBR0MsS0FBSztJQUM3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
|
|
@@ -21,6 +21,7 @@ import type { default as Element, default as UI5Element } from "sap/ui/core/Elem
|
|
|
21
21
|
import EventHandlerResolver from "sap/ui/core/mvc/EventHandlerResolver";
|
|
22
22
|
|
|
23
23
|
const FL_DELEGATE = "fl:delegate";
|
|
24
|
+
const CORE_REQUIRE = "core:require";
|
|
24
25
|
const DT_DESIGNTIME = "dt:designtime";
|
|
25
26
|
const addChildAggregation = function (
|
|
26
27
|
aggregationChildren: Record<string, (string | UI5Element)[]>,
|
|
@@ -161,6 +162,7 @@ const jsxControl = function <T extends Element>(
|
|
|
161
162
|
class?: string;
|
|
162
163
|
[FL_DELEGATE]?: string;
|
|
163
164
|
[DT_DESIGNTIME]?: string;
|
|
165
|
+
[CORE_REQUIRE]?: string;
|
|
164
166
|
},
|
|
165
167
|
key: string,
|
|
166
168
|
jsxContext: JSXContext
|
|
@@ -190,6 +192,7 @@ const jsxControl = function <T extends Element>(
|
|
|
190
192
|
delete settings.binding;
|
|
191
193
|
delete settings[FL_DELEGATE];
|
|
192
194
|
delete settings[DT_DESIGNTIME];
|
|
195
|
+
delete settings[CORE_REQUIRE]; // Core require is not useful in control mode
|
|
193
196
|
const targetControlInstance = new ControlType(settings as $ControlSettings);
|
|
194
197
|
if (classDef) {
|
|
195
198
|
targetControlInstance.addStyleClass(classDef);
|
|
@@ -7,7 +7,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit"], function (BindingToolkit) {
|
|
|
7
7
|
|
|
8
8
|
var compileExpression = BindingToolkit.compileExpression;
|
|
9
9
|
function isBindingToolkitExpression(expression) {
|
|
10
|
-
return
|
|
10
|
+
return expression?._type !== undefined;
|
|
11
11
|
}
|
|
12
12
|
const writeChildren = function (val) {
|
|
13
13
|
if (Array.isArray(val)) {
|
|
@@ -23,7 +23,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit"], function (BindingToolkit) {
|
|
|
23
23
|
* @returns The escaped xml attribute
|
|
24
24
|
*/
|
|
25
25
|
function escapeXMLAttributeValue(value) {
|
|
26
|
-
return value
|
|
26
|
+
return value?.replace(/&/g, "&").replace(/</g, "<").replace(/"/g, """).replace(/'/g, "'");
|
|
27
27
|
}
|
|
28
28
|
const addChildAggregation = function (aggregationChildren, aggregationName, child) {
|
|
29
29
|
if (child === undefined) {
|
|
@@ -47,15 +47,13 @@ sap.ui.define(["sap/fe/base/BindingToolkit"], function (BindingToolkit) {
|
|
|
47
47
|
}
|
|
48
48
|
};
|
|
49
49
|
const isAControl = function (children) {
|
|
50
|
-
return !!
|
|
50
|
+
return !!children?.getMetadata;
|
|
51
51
|
};
|
|
52
52
|
const FL_DELEGATE = "fl:delegate";
|
|
53
53
|
const DT_DESIGNTIME = "dt:designtime";
|
|
54
54
|
const CORE_REQUIRE = "core:require";
|
|
55
55
|
const LOG_SOURCEPATH = "log:sourcePath";
|
|
56
|
-
const CUSTOM_LOADVALUE = "customData:loadValue";
|
|
57
56
|
const CUSTOM_ENTITYTYPE = "customData:entityType";
|
|
58
|
-
const CUSTOM_URL = "customData:url";
|
|
59
57
|
function processObjectPropertyValue(childrenObject, namespaceAlias, propertyName) {
|
|
60
58
|
// This is called when the child is
|
|
61
59
|
const aggregationProperties = [];
|
|
@@ -86,7 +84,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit"], function (BindingToolkit) {
|
|
|
86
84
|
}
|
|
87
85
|
function processProperties(mSettings, metadataProperties, namespaceAlias, propertiesString, aggregationString, isControl) {
|
|
88
86
|
Object.keys(metadataProperties).forEach(propertyName => {
|
|
89
|
-
var _mSettings$children, _mSettings$children2;
|
|
90
87
|
if (mSettings.hasOwnProperty(propertyName) && mSettings[propertyName] !== undefined) {
|
|
91
88
|
const propertyValue = mSettings[propertyName];
|
|
92
89
|
if (propertyName === CORE_REQUIRE) {
|
|
@@ -101,7 +98,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit"], function (BindingToolkit) {
|
|
|
101
98
|
if (propertyName === LOG_SOURCEPATH) {
|
|
102
99
|
propertiesString.push(`xmlns:log="http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1"`);
|
|
103
100
|
}
|
|
104
|
-
if (propertyName ===
|
|
101
|
+
if (propertyName === CUSTOM_ENTITYTYPE) {
|
|
105
102
|
propertiesString.push(`xmlns:customData="http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1"`);
|
|
106
103
|
}
|
|
107
104
|
if (propertyValue && typeof propertyValue === "object") {
|
|
@@ -114,22 +111,26 @@ sap.ui.define(["sap/fe/base/BindingToolkit"], function (BindingToolkit) {
|
|
|
114
111
|
const outValue = typeof propertyValue[0] === "string" ? propertyValue[0] : JSON.stringify(propertyValue[0]);
|
|
115
112
|
propertiesString.push(`${propertyName}='${outValue}'`);
|
|
116
113
|
} else {
|
|
117
|
-
const
|
|
114
|
+
const separator = metadataProperties[propertyName].type?.endsWith("[]") ? "," : " ";
|
|
115
|
+
const outValue = propertyValue.every(val => typeof val === "string") ? propertyValue.join(separator) : JSON.stringify(propertyValue);
|
|
118
116
|
propertiesString.push(`${propertyName}='${outValue}'`);
|
|
119
117
|
}
|
|
120
118
|
} else if (isControl) {
|
|
121
|
-
|
|
119
|
+
const propAsUI5Object = {
|
|
120
|
+
ui5object: true,
|
|
121
|
+
...propertyValue
|
|
122
|
+
};
|
|
123
|
+
propertiesString.push(`${propertyName}='${escapeXMLAttributeValue(JSON.stringify(propAsUI5Object))}'`);
|
|
122
124
|
} else {
|
|
123
125
|
aggregationString.push(processObjectPropertyValue(propertyValue, undefined, propertyName));
|
|
124
126
|
}
|
|
125
|
-
} else if (
|
|
126
|
-
const prop =
|
|
127
|
+
} else if (propertyValue !== null) {
|
|
128
|
+
const prop = propertyValue;
|
|
127
129
|
propertiesString.push(`${propertyName}='${escapeXMLAttributeValue(prop.toString())}'`);
|
|
128
130
|
}
|
|
129
|
-
} else if (
|
|
130
|
-
var _mSettings$children3;
|
|
131
|
+
} else if (mSettings.children?.hasOwnProperty(propertyName) && Object.keys(mSettings.children?.[propertyName] ?? {}).length > 0) {
|
|
131
132
|
// Object / Array properties are part of the `children` aggregation and as such still need to be processed as properties
|
|
132
|
-
const childrenObject =
|
|
133
|
+
const childrenObject = mSettings.children?.[propertyName];
|
|
133
134
|
aggregationString.push(processObjectPropertyValue(childrenObject, namespaceAlias, propertyName));
|
|
134
135
|
}
|
|
135
136
|
});
|
|
@@ -247,15 +248,9 @@ sap.ui.define(["sap/fe/base/BindingToolkit"], function (BindingToolkit) {
|
|
|
247
248
|
metadataProperties[LOG_SOURCEPATH] = {
|
|
248
249
|
name: LOG_SOURCEPATH
|
|
249
250
|
};
|
|
250
|
-
metadataProperties[CUSTOM_LOADVALUE] = {
|
|
251
|
-
name: CUSTOM_LOADVALUE
|
|
252
|
-
};
|
|
253
251
|
metadataProperties[CUSTOM_ENTITYTYPE] = {
|
|
254
252
|
name: CUSTOM_ENTITYTYPE
|
|
255
253
|
};
|
|
256
|
-
metadataProperties[CUSTOM_URL] = {
|
|
257
|
-
name: CUSTOM_URL
|
|
258
|
-
};
|
|
259
254
|
metadataProperties["xmlns:fl"] = {
|
|
260
255
|
name: FL_DELEGATE
|
|
261
256
|
};
|
|
@@ -292,4 +287,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit"], function (BindingToolkit) {
|
|
|
292
287
|
};
|
|
293
288
|
return jsxXml;
|
|
294
289
|
}, false);
|
|
295
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiIsImV4cHJlc3Npb24iLCJfdHlwZSIsInVuZGVmaW5lZCIsIndyaXRlQ2hpbGRyZW4iLCJ2YWwiLCJBcnJheSIsImlzQXJyYXkiLCJqb2luIiwiZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUiLCJ2YWx1ZSIsInJlcGxhY2UiLCJhZGRDaGlsZEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25DaGlsZHJlbiIsImFnZ3JlZ2F0aW9uTmFtZSIsImNoaWxkIiwidHJpbSIsImxlbmd0aCIsInB1c2giLCJmb3JFYWNoIiwic3ViQ2hpbGQiLCJjaGlsZEtleSIsIk9iamVjdCIsImtleXMiLCJpc0FDb250cm9sIiwiY2hpbGRyZW4iLCJnZXRNZXRhZGF0YSIsIkZMX0RFTEVHQVRFIiwiRFRfREVTSUdOVElNRSIsIkNPUkVfUkVRVUlSRSIsIkxPR19TT1VSQ0VQQVRIIiwiQ1VTVE9NX0xPQURWQUxVRSIsIkNVU1RPTV9FTlRJVFlUWVBFIiwiQ1VTVE9NX1VSTCIsInByb2Nlc3NPYmplY3RQcm9wZXJ0eVZhbHVlIiwiY2hpbGRyZW5PYmplY3QiLCJuYW1lc3BhY2VBbGlhcyIsInByb3BlcnR5TmFtZSIsImFnZ3JlZ2F0aW9uUHJvcGVydGllcyIsInN1YlByb3BOYW1lIiwiY2hpbGRWYWx1ZSIsImNoaWxkcmVuT2JqZWN0RWxlbWVudCIsInRvU3RyaW5nIiwibmFtZXNwYWNlZFByb3BlcnR5IiwicHJvY2Vzc1Byb3BlcnRpZXMiLCJtU2V0dGluZ3MiLCJtZXRhZGF0YVByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzU3RyaW5nIiwiYWdncmVnYXRpb25TdHJpbmciLCJpc0NvbnRyb2wiLCJfbVNldHRpbmdzJGNoaWxkcmVuIiwiX21TZXR0aW5ncyRjaGlsZHJlbjIiLCJoYXNPd25Qcm9wZXJ0eSIsInByb3BlcnR5VmFsdWUiLCJ0eXBlIiwiZ2V0UGF0aCIsImNvbXBpbGVFeHByZXNzaW9uIiwib3V0VmFsdWUiLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlcnkiLCJwcm9wIiwiX21TZXR0aW5ncyRjaGlsZHJlbjMiLCJwcm9jZXNzQ29tbWFuZCIsInNldHRpbmdzIiwibWV0YWRhdGFFdmVudHMiLCJjb21tYW5kUHJvcGVydHkiLCJjb21tYW5kIiwiZXZlbnROYW1lIiwic3BsaXQiLCJldmVudCIsInN0YXJ0c1dpdGgiLCJuYW1lIiwicHJvY2Vzc0FnZ3JlZ2F0aW9ucyIsIm1ldGFkYXRhQWdncmVnYXRpb25zIiwiZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSIsImFnZ3JlZ2F0aW9uQ2hpbGRLZXlzIiwid3JpdGVPbmx5RGVmYXVsdEFnZ3JlZ2F0aW9uIiwianN4WG1sIiwia2V5IiwieG1sTmFtZXNwYWNlTWFwIiwib3ZlcnJpZGVOb2RlTmFtZSIsIm1ldGFkYXRhIiwiY29udHJvbE5hbWUiLCJnZXRBbGxQcm9wZXJ0aWVzIiwiZ2V0QWxsRXZlbnRzIiwiZ2V0QWxsQXNzb2NpYXRpb25zIiwiZ2V0TmFtZSIsImdldEFsbEFnZ3JlZ2F0aW9ucyIsImdldERlZmF1bHRBZ2dyZWdhdGlvbk5hbWUiLCJwcm9wZXJ0aWVzIiwiZGVwZW5kZW50cyIsImN1c3RvbURhdGEiLCJhZ2dyZWdhdGlvbnMiLCJkZWZhdWx0QWdncmVnYXRpb24iLCJuYW1lc3BhY2UiLCJuYW1lc1NwbGl0Iiwic2xpY2UiLCJ0YWdOYW1lIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJqc3gteG1sLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sUHJvcGVydGllcywgTm9uQ29udHJvbFByb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuXG5mdW5jdGlvbiBpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbihcblx0ZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHwgdW5rbm93blxuKTogZXhwcmVzc2lvbiBpcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4ge1xuXHRyZXR1cm4gKGV4cHJlc3Npb24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+KT8uX3R5cGUgIT09IHVuZGVmaW5lZDtcbn1cblxuY29uc3Qgd3JpdGVDaGlsZHJlbiA9IGZ1bmN0aW9uICh2YWw6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0aWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuXHRcdHJldHVybiB2YWwuam9pbihcIlwiKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdmFsO1xuXHR9XG59O1xuXG4vKipcbiAqIFNvbWUgY2hhcmFjdGVycyBuZWVkcyB0byBiZSBlc2NhcGVkIHdoZW4gdXNlZCBhcyBYTUwgYXR0cmlidXRlIHZhbHVlLCBvdGhlcndpc2UgdGhpcyByZXN1bHQgaW4gaW5jb3JyZWN0IFhNTC5cbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgeG1sIGF0dHJpYnV0ZVxuICovXG5mdW5jdGlvbiBlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZSh2YWx1ZT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiB2YWx1ZT8ucmVwbGFjZSgvJi9nLCBcIiZhbXA7XCIpLnJlcGxhY2UoLzwvZywgXCImbHQ7XCIpLnJlcGxhY2UoL1wiL2csIFwiJnF1b3Q7XCIpLnJlcGxhY2UoLycvZywgXCImYXBvcztcIik7XG59XG5cbmNvbnN0IGFkZENoaWxkQWdncmVnYXRpb24gPSBmdW5jdGlvbiAoXG5cdGFnZ3JlZ2F0aW9uQ2hpbGRyZW46IFJlY29yZDxzdHJpbmcsIChDb250cm9sIHwgc3RyaW5nKVtdPixcblx0YWdncmVnYXRpb25OYW1lOiBzdHJpbmcsXG5cdGNoaWxkOiBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4pOiB2b2lkIHtcblx0aWYgKGNoaWxkID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0aWYgKCFhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0pIHtcblx0XHRhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0gPSBbXTtcblx0fVxuXHRpZiAodHlwZW9mIGNoaWxkID09PSBcInN0cmluZ1wiKSB7XG5cdFx0aWYgKGNoaWxkLnRyaW0oKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0ucHVzaChjaGlsZCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQpKSB7XG5cdFx0Y2hpbGQuZm9yRWFjaCgoc3ViQ2hpbGQpID0+IHtcblx0XHRcdGFkZENoaWxkQWdncmVnYXRpb24oYWdncmVnYXRpb25DaGlsZHJlbiwgYWdncmVnYXRpb25OYW1lLCBzdWJDaGlsZCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Zm9yIChjb25zdCBjaGlsZEtleSBvZiBPYmplY3Qua2V5cyhjaGlsZCkpIHtcblx0XHRcdGFkZENoaWxkQWdncmVnYXRpb24oYWdncmVnYXRpb25DaGlsZHJlbiwgY2hpbGRLZXksIGNoaWxkW2NoaWxkS2V5XSk7XG5cdFx0fVxuXHR9XG59O1xuXG5jb25zdCBpc0FDb250cm9sID0gZnVuY3Rpb24gKGNoaWxkcmVuPzogdHlwZW9mIENvbnRyb2wgfCBGdW5jdGlvbik6IGNoaWxkcmVuIGlzIHR5cGVvZiBDb250cm9sIHtcblx0cmV0dXJuICEhKGNoaWxkcmVuIGFzIHR5cGVvZiBDb250cm9sKT8uZ2V0TWV0YWRhdGE7XG59O1xuXG5jb25zdCBGTF9ERUxFR0FURSA9IFwiZmw6ZGVsZWdhdGVcIjtcbmNvbnN0IERUX0RFU0lHTlRJTUUgPSBcImR0OmRlc2lnbnRpbWVcIjtcbmNvbnN0IENPUkVfUkVRVUlSRSA9IFwiY29yZTpyZXF1aXJlXCI7XG5jb25zdCBMT0dfU09VUkNFUEFUSCA9IFwibG9nOnNvdXJjZVBhdGhcIjtcbmNvbnN0IENVU1RPTV9MT0FEVkFMVUUgPSBcImN1c3RvbURhdGE6bG9hZFZhbHVlXCI7XG5jb25zdCBDVVNUT01fRU5USVRZVFlQRSA9IFwiY3VzdG9tRGF0YTplbnRpdHlUeXBlXCI7XG5jb25zdCBDVVNUT01fVVJMID0gXCJjdXN0b21EYXRhOnVybFwiO1xuXG5mdW5jdGlvbiBwcm9jZXNzT2JqZWN0UHJvcGVydHlWYWx1ZShcblx0Y2hpbGRyZW5PYmplY3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRuYW1lc3BhY2VBbGlhczogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRwcm9wZXJ0eU5hbWU6IHN0cmluZ1xuKTogc3RyaW5nIHtcblx0Ly8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgY2hpbGQgaXNcblx0Y29uc3QgYWdncmVnYXRpb25Qcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBhZ2dyZWdhdGlvbkNoaWxkcmVuOiBzdHJpbmdbXSA9IFtdO1xuXHRPYmplY3Qua2V5cyhjaGlsZHJlbk9iamVjdCkuZm9yRWFjaCgoc3ViUHJvcE5hbWUpID0+IHtcblx0XHRjb25zdCBjaGlsZFZhbHVlID0gY2hpbGRyZW5PYmplY3Rbc3ViUHJvcE5hbWVdO1xuXHRcdGlmIChjaGlsZFZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmICh0eXBlb2YgY2hpbGRWYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShjaGlsZFZhbHVlKSkge1xuXHRcdFx0XHRcdGFnZ3JlZ2F0aW9uQ2hpbGRyZW4ucHVzaChgPCR7c3ViUHJvcE5hbWV9PmApO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgY2hpbGRyZW5PYmplY3RFbGVtZW50IG9mIGNoaWxkVmFsdWUpIHtcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uQ2hpbGRyZW4ucHVzaChcblx0XHRcdFx0XHRcdFx0cHJvY2Vzc09iamVjdFByb3BlcnR5VmFsdWUoY2hpbGRyZW5PYmplY3RFbGVtZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBuYW1lc3BhY2VBbGlhcywgc3ViUHJvcE5hbWUpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhZ2dyZWdhdGlvbkNoaWxkcmVuLnB1c2goYDwvJHtzdWJQcm9wTmFtZX0+YCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gaWYgdGhlIHByb3BlcnR5IGlzIGEgdmFsdWUgaXQgbmVlZHMgdG8gYmUgc2VyaWFsaXplZCBhcyBhIGNoaWxkcmVuXG5cdFx0XHRcdFx0Ly8gPG15T2JqZWN0UHJvcCBwcm9wMT0neHh4JywgcHJvcDI9J3h4dCcvPlxuXHRcdFx0XHRcdGFnZ3JlZ2F0aW9uQ2hpbGRyZW4ucHVzaChcblx0XHRcdFx0XHRcdHByb2Nlc3NPYmplY3RQcm9wZXJ0eVZhbHVlKGNoaWxkVmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG5hbWVzcGFjZUFsaWFzLCBzdWJQcm9wTmFtZSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBPdGhlcndpc2UgaXQncyBwYXJ0IG9mIHRoZSBtYWluIG9iamVjdCBqdXN0IGFzIGFub3RoZXIgcHJvcGVydHlcblx0XHRcdFx0YWdncmVnYXRpb25Qcm9wZXJ0aWVzLnB1c2goYCR7c3ViUHJvcE5hbWV9PScke2VzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKGNoaWxkVmFsdWUudG9TdHJpbmcoKSl9J2ApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0Y29uc3QgbmFtZXNwYWNlZFByb3BlcnR5ID0gbmFtZXNwYWNlQWxpYXMgPyBgJHtuYW1lc3BhY2VBbGlhc306JHtwcm9wZXJ0eU5hbWV9YCA6IHByb3BlcnR5TmFtZTtcblx0cmV0dXJuIGA8JHtuYW1lc3BhY2VkUHJvcGVydHl9ICR7YWdncmVnYXRpb25Qcm9wZXJ0aWVzLmpvaW4oXCIgXCIpfT4ke2FnZ3JlZ2F0aW9uQ2hpbGRyZW4uam9pbihcIlxcblwiKX08LyR7bmFtZXNwYWNlZFByb3BlcnR5fT5gO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzUHJvcGVydGllczxUPihcblx0bVNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0bWV0YWRhdGFQcm9wZXJ0aWVzOiBSZWNvcmQ8XG5cdFx0c3RyaW5nLFxuXHRcdHtcblx0XHRcdG5hbWU/OiBzdHJpbmc7XG5cdFx0XHR0eXBlPzogc3RyaW5nO1xuXHRcdH1cblx0Pixcblx0bmFtZXNwYWNlQWxpYXM6IHN0cmluZyxcblx0cHJvcGVydGllc1N0cmluZzogc3RyaW5nW10sXG5cdGFnZ3JlZ2F0aW9uU3RyaW5nOiBzdHJpbmdbXSxcblx0aXNDb250cm9sOiBib29sZWFuXG4pOiB2b2lkIHtcblx0T2JqZWN0LmtleXMobWV0YWRhdGFQcm9wZXJ0aWVzKS5mb3JFYWNoKChwcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRpZiAobVNldHRpbmdzLmhhc093blByb3BlcnR5KHByb3BlcnR5TmFtZSkgJiYgbVNldHRpbmdzW3Byb3BlcnR5TmFtZV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlWYWx1ZSA9IG1TZXR0aW5nc1twcm9wZXJ0eU5hbWVdO1xuXHRcdFx0aWYgKHByb3BlcnR5TmFtZSA9PT0gQ09SRV9SRVFVSVJFKSB7XG5cdFx0XHRcdHByb3BlcnRpZXNTdHJpbmcucHVzaChgeG1sbnM6Y29yZT1cInNhcC51aS5jb3JlXCJgKTtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0eU5hbWUgPT09IEZMX0RFTEVHQVRFKSB7XG5cdFx0XHRcdHByb3BlcnRpZXNTdHJpbmcucHVzaChgeG1sbnM6Zmw9XCJzYXAudWkuZmxcImApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5TmFtZSA9PT0gRFRfREVTSUdOVElNRSkge1xuXHRcdFx0XHRwcm9wZXJ0aWVzU3RyaW5nLnB1c2goYHhtbG5zOmR0PVwic2FwLnVpLmR0XCJgKTtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0eU5hbWUgPT09IExPR19TT1VSQ0VQQVRIKSB7XG5cdFx0XHRcdHByb3BlcnRpZXNTdHJpbmcucHVzaChgeG1sbnM6bG9nPVwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiYCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocHJvcGVydHlOYW1lID09PSBDVVNUT01fVVJMIHx8IHByb3BlcnR5TmFtZSA9PT0gQ1VTVE9NX0xPQURWQUxVRSB8fCBwcm9wZXJ0eU5hbWUgPT09IENVU1RPTV9FTlRJVFlUWVBFKSB7XG5cdFx0XHRcdHByb3BlcnRpZXNTdHJpbmcucHVzaChgeG1sbnM6Y3VzdG9tRGF0YT1cImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcImApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5VmFsdWUgJiYgdHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0aWYgKG1ldGFkYXRhUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIikge1xuXHRcdFx0XHRcdHByb3BlcnRpZXNTdHJpbmcucHVzaChgJHtwcm9wZXJ0eU5hbWV9PSckeyhwcm9wZXJ0eVZhbHVlIGFzIENvbnRleHQpLmdldFBhdGgoKX0nYCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ocHJvcGVydHlWYWx1ZSkpIHtcblx0XHRcdFx0XHRwcm9wZXJ0aWVzU3RyaW5nLnB1c2goYCR7cHJvcGVydHlOYW1lfT0nJHtlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShjb21waWxlRXhwcmVzc2lvbihwcm9wZXJ0eVZhbHVlKSl9J2ApO1xuXHRcdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHlWYWx1ZSkpIHtcblx0XHRcdFx0XHRpZiAocHJvcGVydHlWYWx1ZS5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG91dFZhbHVlID0gdHlwZW9mIHByb3BlcnR5VmFsdWVbMF0gPT09IFwic3RyaW5nXCIgPyBwcm9wZXJ0eVZhbHVlWzBdIDogSlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZVswXSk7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0aWVzU3RyaW5nLnB1c2goYCR7cHJvcGVydHlOYW1lfT0nJHtvdXRWYWx1ZX0nYCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnN0IG91dFZhbHVlID0gcHJvcGVydHlWYWx1ZS5ldmVyeSgodmFsKSA9PiB0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKVxuXHRcdFx0XHRcdFx0XHQ/IHByb3BlcnR5VmFsdWUuam9pbihcIiBcIilcblx0XHRcdFx0XHRcdFx0OiBKU09OLnN0cmluZ2lmeShwcm9wZXJ0eVZhbHVlKTtcblx0XHRcdFx0XHRcdHByb3BlcnRpZXNTdHJpbmcucHVzaChgJHtwcm9wZXJ0eU5hbWV9PScke291dFZhbHVlfSdgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNDb250cm9sKSB7XG5cdFx0XHRcdFx0cHJvcGVydGllc1N0cmluZy5wdXNoKGAke3Byb3BlcnR5TmFtZX09JyR7SlNPTi5zdHJpbmdpZnkobVNldHRpbmdzW3Byb3BlcnR5TmFtZV0pfSdgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhZ2dyZWdhdGlvblN0cmluZy5wdXNoKHByb2Nlc3NPYmplY3RQcm9wZXJ0eVZhbHVlKHByb3BlcnR5VmFsdWUgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgdW5kZWZpbmVkLCBwcm9wZXJ0eU5hbWUpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChtU2V0dGluZ3NbcHJvcGVydHlOYW1lXSAhPT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCBwcm9wID0gbVNldHRpbmdzW3Byb3BlcnR5TmFtZV0gYXMgc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcjtcblx0XHRcdFx0cHJvcGVydGllc1N0cmluZy5wdXNoKGAke3Byb3BlcnR5TmFtZX09JyR7ZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUocHJvcC50b1N0cmluZygpKX0nYCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdG1TZXR0aW5ncy5jaGlsZHJlbj8uaGFzT3duUHJvcGVydHkocHJvcGVydHlOYW1lKSAmJlxuXHRcdFx0T2JqZWN0LmtleXMoKG1TZXR0aW5ncy5jaGlsZHJlbiBhcyBDb250cm9sUHJvcGVydGllczxUPik/Lltwcm9wZXJ0eU5hbWVdID8/IHt9KS5sZW5ndGggPiAwXG5cdFx0KSB7XG5cdFx0XHQvLyBPYmplY3QgLyBBcnJheSBwcm9wZXJ0aWVzIGFyZSBwYXJ0IG9mIHRoZSBgY2hpbGRyZW5gIGFnZ3JlZ2F0aW9uIGFuZCBhcyBzdWNoIHN0aWxsIG5lZWQgdG8gYmUgcHJvY2Vzc2VkIGFzIHByb3BlcnRpZXNcblx0XHRcdGNvbnN0IGNoaWxkcmVuT2JqZWN0ID0gKG1TZXR0aW5ncy5jaGlsZHJlbiBhcyBDb250cm9sUHJvcGVydGllczxUPik/Lltwcm9wZXJ0eU5hbWVdIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgb2JqZWN0Pjtcblx0XHRcdGFnZ3JlZ2F0aW9uU3RyaW5nLnB1c2gocHJvY2Vzc09iamVjdFByb3BlcnR5VmFsdWUoY2hpbGRyZW5PYmplY3QsIG5hbWVzcGFjZUFsaWFzLCBwcm9wZXJ0eU5hbWUpKTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgY29tbWFuZC5cbiAqXG4gKiBSZXNvbHZlcyB0aGUgY29tbWFuZCBzZXQgb24gdGhlIGNvbnRyb2wgdmlhIHRoZSBpbnRyaW5zaWMgY2xhc3MgYXR0cmlidXRlIFwianN4OmNvbW1hbmRcIi5cbiAqIElmIG5vIGNvbW1hbmQgaGFzIGJlZW4gc2V0IG9yIHRoZSB0YXJnZXRlZCBldmVudCBkb2Vzbid0IGV4aXN0LCBubyBjb25maWd1cmF0aW9uIGlzIHNldC5cbiAqIEBwYXJhbSBzZXR0aW5ncyBNZXRhZGF0YSBvZiB0aGUgY29udHJvbFxuICogQHBhcmFtIG1ldGFkYXRhRXZlbnRzIFNldHRpbmdzIG9mIHRoZSBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NDb21tYW5kKFxuXHRzZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdG1ldGFkYXRhRXZlbnRzOiBSZWNvcmQ8XG5cdFx0c3RyaW5nLFxuXHRcdHtcblx0XHRcdG5hbWU6IHN0cmluZztcblx0XHR9XG5cdD5cbik6IHZvaWQge1xuXHRjb25zdCBjb21tYW5kUHJvcGVydHkgPSBzZXR0aW5nc1tcImpzeDpjb21tYW5kXCJdO1xuXHRpZiAoY29tbWFuZFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgW2NvbW1hbmQsIGV2ZW50TmFtZV0gPSAoY29tbWFuZFByb3BlcnR5IGFzIHN0cmluZykuc3BsaXQoXCJ8XCIpO1xuXHRcdGNvbnN0IGV2ZW50ID0gbWV0YWRhdGFFdmVudHNbZXZlbnROYW1lXTtcblx0XHRpZiAoZXZlbnQgJiYgY29tbWFuZC5zdGFydHNXaXRoKFwiY21kOlwiKSkge1xuXHRcdFx0c2V0dGluZ3NbZXZlbnQubmFtZV0gPSBjb21tYW5kO1xuXHRcdH1cblx0fVxuXHRkZWxldGUgc2V0dGluZ3NbXCJqc3g6Y29tbWFuZFwiXTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0FnZ3JlZ2F0aW9ucyhcblx0bVNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0bWV0YWRhdGFBZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4sXG5cdG5hbWVzcGFjZUFsaWFzOiBzdHJpbmcsXG5cdGRlZmF1bHRBZ2dyZWdhdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0cHJvcGVydGllc1N0cmluZzogc3RyaW5nW10sXG5cdGFnZ3JlZ2F0aW9uU3RyaW5nOiBzdHJpbmdbXVxuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+IHtcblx0Y29uc3QgYWdncmVnYXRpb25DaGlsZHJlbjogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cdGFkZENoaWxkQWdncmVnYXRpb24oYWdncmVnYXRpb25DaGlsZHJlbiwgZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSA/PyBcImN1c3RvbURhdGFcIiwgbVNldHRpbmdzLmNoaWxkcmVuIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4pO1xuXHRjb25zdCBhZ2dyZWdhdGlvbkNoaWxkS2V5cyA9IE9iamVjdC5rZXlzKGFnZ3JlZ2F0aW9uQ2hpbGRyZW4pO1xuXHRsZXQgd3JpdGVPbmx5RGVmYXVsdEFnZ3JlZ2F0aW9uID0gZmFsc2U7XG5cdGlmIChhZ2dyZWdhdGlvbkNoaWxkS2V5cy5sZW5ndGggPT09IDEgJiYgYWdncmVnYXRpb25DaGlsZEtleXNbMF0gPT09IGRlZmF1bHRBZ2dyZWdhdGlvbk5hbWUpIHtcblx0XHR3cml0ZU9ubHlEZWZhdWx0QWdncmVnYXRpb24gPSB0cnVlO1xuXHR9XG5cdE9iamVjdC5rZXlzKG1ldGFkYXRhQWdncmVnYXRpb25zKS5mb3JFYWNoKChhZ2dyZWdhdGlvbk5hbWUpID0+IHtcblx0XHRpZiAoYWdncmVnYXRpb25DaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShhZ2dyZWdhdGlvbk5hbWUpICYmIGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXS5sZW5ndGggPiAwKSB7XG5cdFx0XHRpZiAoYWdncmVnYXRpb25OYW1lID09PSBkZWZhdWx0QWdncmVnYXRpb25OYW1lICYmIHdyaXRlT25seURlZmF1bHRBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRhZ2dyZWdhdGlvblN0cmluZy5wdXNoKGAke3dyaXRlQ2hpbGRyZW4oYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdKX1gKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFnZ3JlZ2F0aW9uU3RyaW5nLnB1c2goXG5cdFx0XHRcdFx0YDwke25hbWVzcGFjZUFsaWFzfToke2FnZ3JlZ2F0aW9uTmFtZX0+XG5cdFx0XHRcdFx0XHQke3dyaXRlQ2hpbGRyZW4oYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdKX1cblx0XHRcdFx0XHQ8LyR7bmFtZXNwYWNlQWxpYXN9OiR7YWdncmVnYXRpb25OYW1lfT5gXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChtU2V0dGluZ3MuaGFzT3duUHJvcGVydHkoYWdncmVnYXRpb25OYW1lKSAmJiBtU2V0dGluZ3NbYWdncmVnYXRpb25OYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAodHlwZW9mIG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdHByb3BlcnRpZXNTdHJpbmcucHVzaChgJHthZ2dyZWdhdGlvbk5hbWV9PScke0pTT04uc3RyaW5naWZ5KG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdKX0nYCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBJbiBzb21lIGNhc2UgdGhlIGFnZ3JlZ2F0aW9uIGV4cGVjdCBhIHN0cmluZyB2YWx1ZSAobGlrZSBmb3IgdGhlIHRvb2x0aXApLCBpbiB0aGlzIGNhc2Ugd2Ugc2V0IGl0IGRpcmVjdGx5IGFzIGEgcHJvcGVydHlcblx0XHRcdFx0cHJvcGVydGllc1N0cmluZy5wdXNoKGAke2FnZ3JlZ2F0aW9uTmFtZX09JyR7ZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUobVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gYXMgc3RyaW5nKX0nYCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ2hpbGRyZW47XG59XG5cbmNvbnN0IGpzeFhtbCA9IGZ1bmN0aW9uIDxUPihcblx0dHlwZTogdHlwZW9mIENvbnRyb2wgfCB0eXBlb2YgQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlIHwgXCJzbG90XCIsXG5cdG1TZXR0aW5nczogTm9uQ29udHJvbFByb3BlcnRpZXM8VD4gJiB7IGtleT86IHN0cmluZzsgY2hpbGRyZW4/OiBVSTVFbGVtZW50IHwgQ29udHJvbFByb3BlcnRpZXM8VD47IG5hbWU/OiBzdHJpbmcgfSxcblx0a2V5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHhtbE5hbWVzcGFjZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcblx0b3ZlcnJpZGVOb2RlTmFtZT86IHN0cmluZ1xuKTogc3RyaW5nIHtcblx0bGV0IG1ldGFkYXRhO1xuXHRsZXQgbWV0YWRhdGFQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCB7IG5hbWU/OiBzdHJpbmc7IHR5cGU/OiBzdHJpbmcgfT47XG5cdGxldCBtZXRhZGF0YUV2ZW50czogUmVjb3JkPHN0cmluZywgeyBuYW1lOiBzdHJpbmcgfT47XG5cdGxldCBjb250cm9sTmFtZTtcblx0bGV0IG1ldGFkYXRhQWdncmVnYXRpb25zO1xuXHRsZXQgZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRsZXQgaXNDb250cm9sID0gZmFsc2U7XG5cdGlmICh0eXBlID09PSBcInNsb3RcIikge1xuXHRcdHJldHVybiBgPHNsb3QgbmFtZT1cIiR7bVNldHRpbmdzLm5hbWV9XCIvPmA7XG5cdH0gZWxzZSBpZiAoaXNBQ29udHJvbCh0eXBlKSkge1xuXHRcdG1ldGFkYXRhID0gdHlwZS5nZXRNZXRhZGF0YSgpO1xuXHRcdG1ldGFkYXRhUHJvcGVydGllcyA9IG1ldGFkYXRhLmdldEFsbFByb3BlcnRpZXMoKTtcblx0XHRtZXRhZGF0YVByb3BlcnRpZXMgPSB7IC4uLm1ldGFkYXRhUHJvcGVydGllcywgLi4ubWV0YWRhdGEuZ2V0QWxsRXZlbnRzKCksIC4uLm1ldGFkYXRhLmdldEFsbEFzc29jaWF0aW9ucygpIH07XG5cdFx0bWV0YWRhdGFFdmVudHMgPSBtZXRhZGF0YS5nZXRBbGxFdmVudHMoKTtcblx0XHRjb250cm9sTmFtZSA9IG1ldGFkYXRhLmdldE5hbWUoKTtcblx0XHRtZXRhZGF0YUFnZ3JlZ2F0aW9ucyA9IG1ldGFkYXRhLmdldEFsbEFnZ3JlZ2F0aW9ucygpO1xuXHRcdGRlZmF1bHRBZ2dyZWdhdGlvbk5hbWUgPSBtZXRhZGF0YS5nZXREZWZhdWx0QWdncmVnYXRpb25OYW1lKCk7XG5cdFx0aXNDb250cm9sID0gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHRtZXRhZGF0YSA9IHR5cGUubWV0YWRhdGE7XG5cdFx0bWV0YWRhdGFQcm9wZXJ0aWVzID0geyAuLi5tZXRhZGF0YS5wcm9wZXJ0aWVzIH07XG5cdFx0bWV0YWRhdGFBZ2dyZWdhdGlvbnMgPSB7IC4uLnsgZGVwZW5kZW50czoge30sIGN1c3RvbURhdGE6IHt9IH0sIC4uLm1ldGFkYXRhLmFnZ3JlZ2F0aW9ucyB9O1xuXHRcdG1ldGFkYXRhRXZlbnRzID0ge307XG5cdFx0ZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSA9IG1ldGFkYXRhLmRlZmF1bHRBZ2dyZWdhdGlvbjtcblx0XHRjb250cm9sTmFtZSA9IG1ldGFkYXRhLm5hbWVzcGFjZSArIFwiLlwiICsgbWV0YWRhdGEubmFtZTtcblx0fVxuXHRjb25zdCBuYW1lc1NwbGl0ID0gY29udHJvbE5hbWUuc3BsaXQoXCIuXCIpO1xuXHRpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRtU2V0dGluZ3NbXCJrZXlcIl0gPSBrZXk7XG5cdH1cblxuXHRtZXRhZGF0YVByb3BlcnRpZXNbXCJjbGFzc1wiXSA9IHsgbmFtZTogXCJjbGFzc1wiIH07XG5cdG1ldGFkYXRhUHJvcGVydGllc1tcImlkXCJdID0geyBuYW1lOiBcImlkXCIgfTtcblx0bWV0YWRhdGFQcm9wZXJ0aWVzW1wiYmluZGluZ1wiXSA9IHsgbmFtZTogXCJiaW5kaW5nXCIgfTtcblx0bWV0YWRhdGFQcm9wZXJ0aWVzW0ZMX0RFTEVHQVRFXSA9IHsgbmFtZTogRkxfREVMRUdBVEUgfTtcblx0bWV0YWRhdGFQcm9wZXJ0aWVzW0RUX0RFU0lHTlRJTUVdID0geyBuYW1lOiBEVF9ERVNJR05USU1FIH07XG5cdG1ldGFkYXRhUHJvcGVydGllc1tDT1JFX1JFUVVJUkVdID0geyBuYW1lOiBDT1JFX1JFUVVJUkUgfTtcblx0bWV0YWRhdGFQcm9wZXJ0aWVzW0xPR19TT1VSQ0VQQVRIXSA9IHsgbmFtZTogTE9HX1NPVVJDRVBBVEggfTtcblx0bWV0YWRhdGFQcm9wZXJ0aWVzW0NVU1RPTV9MT0FEVkFMVUVdID0geyBuYW1lOiBDVVNUT01fTE9BRFZBTFVFIH07XG5cdG1ldGFkYXRhUHJvcGVydGllc1tDVVNUT01fRU5USVRZVFlQRV0gPSB7IG5hbWU6IENVU1RPTV9FTlRJVFlUWVBFIH07XG5cdG1ldGFkYXRhUHJvcGVydGllc1tDVVNUT01fVVJMXSA9IHsgbmFtZTogQ1VTVE9NX1VSTCB9O1xuXHRtZXRhZGF0YVByb3BlcnRpZXNbXCJ4bWxuczpmbFwiXSA9IHsgbmFtZTogRkxfREVMRUdBVEUgfTtcblx0bWV0YWRhdGFQcm9wZXJ0aWVzW1wieG1sbnM6ZHRcIl0gPSB7IG5hbWU6IERUX0RFU0lHTlRJTUUgfTtcblx0bWV0YWRhdGFQcm9wZXJ0aWVzW1wieG1sbnM6Y29yZVwiXSA9IHsgbmFtZTogQ09SRV9SRVFVSVJFIH07XG5cdG1ldGFkYXRhUHJvcGVydGllc1tcInhtbG5zOmxvZ1wiXSA9IHsgbmFtZTogTE9HX1NPVVJDRVBBVEggfTtcblx0aWYgKGNvbnRyb2xOYW1lID09PSBcInNhcC51aS5jb3JlLkZyYWdtZW50XCIpIHtcblx0XHRtZXRhZGF0YVByb3BlcnRpZXNbXCJmcmFnbWVudE5hbWVcIl0gPSB7IG5hbWU6IFwiZnJhZ21lbnROYW1lXCIgfTtcblx0fVxuXHRjb25zdCBuYW1lc3BhY2UgPSBuYW1lc1NwbGl0LnNsaWNlKDAsIC0xKTtcblx0Y29uc3QgbmFtZSA9IG5hbWVzU3BsaXRbbmFtZXNTcGxpdC5sZW5ndGggLSAxXTtcblx0bGV0IG5hbWVzcGFjZUFsaWFzID0gbmFtZXNwYWNlW25hbWVzcGFjZS5sZW5ndGggLSAxXTtcblx0aWYgKHhtbE5hbWVzcGFjZU1hcFtuYW1lc3BhY2Uuam9pbihcIi5cIildKSB7XG5cdFx0bmFtZXNwYWNlQWxpYXMgPSB4bWxOYW1lc3BhY2VNYXBbbmFtZXNwYWNlLmpvaW4oXCIuXCIpXTtcblx0fVxuXHRsZXQgdGFnTmFtZSA9IGAke25hbWVzcGFjZUFsaWFzfToke25hbWV9YDtcblx0Y29uc3QgcHJvcGVydGllc1N0cmluZzogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgYWdncmVnYXRpb25TdHJpbmc6IHN0cmluZ1tdID0gW107XG5cdHByb2Nlc3NDb21tYW5kKG1TZXR0aW5ncywgbWV0YWRhdGFFdmVudHMpO1xuXHRwcm9jZXNzUHJvcGVydGllcyhtU2V0dGluZ3MsIG1ldGFkYXRhUHJvcGVydGllcywgbmFtZXNwYWNlQWxpYXMsIHByb3BlcnRpZXNTdHJpbmcsIGFnZ3JlZ2F0aW9uU3RyaW5nLCBpc0NvbnRyb2wpO1xuXHRwcm9jZXNzQWdncmVnYXRpb25zKG1TZXR0aW5ncywgbWV0YWRhdGFBZ2dyZWdhdGlvbnMsIG5hbWVzcGFjZUFsaWFzLCBkZWZhdWx0QWdncmVnYXRpb25OYW1lLCBwcm9wZXJ0aWVzU3RyaW5nLCBhZ2dyZWdhdGlvblN0cmluZyk7XG5cdGlmIChvdmVycmlkZU5vZGVOYW1lKSB7XG5cdFx0dGFnTmFtZSA9IG92ZXJyaWRlTm9kZU5hbWU7XG5cdH1cblx0cmV0dXJuIGA8JHt0YWdOYW1lfSB4bWxuczoke25hbWVzcGFjZUFsaWFzfT1cIiR7bmFtZXNwYWNlLmpvaW4oXCIuXCIpfVwiICR7cHJvcGVydGllc1N0cmluZy5qb2luKFwiIFwiKX0+JHthZ2dyZWdhdGlvblN0cmluZy5qb2luKFxuXHRcdFwiXCJcblx0KX08LyR7dGFnTmFtZX0+YDtcbn07XG5leHBvcnQgZGVmYXVsdCBqc3hYbWw7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0VBUUEsU0FBU0EsMEJBQTBCQSxDQUNsQ0MsVUFBdUQsRUFDTDtJQUNsRCxPQUFPLENBQUNBLFVBQVUsYUFBVkEsVUFBVSx1QkFBVkEsVUFBVSxDQUF3Q0MsS0FBSyxNQUFLQyxTQUFTO0VBQzlFO0VBRUEsTUFBTUMsYUFBYSxHQUFHLFNBQUFBLENBQVVDLEdBQXNCLEVBQVU7SUFDL0QsSUFBSUMsS0FBSyxDQUFDQyxPQUFPLENBQUNGLEdBQUcsQ0FBQyxFQUFFO01BQ3ZCLE9BQU9BLEdBQUcsQ0FBQ0csSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNwQixDQUFDLE1BQU07TUFDTixPQUFPSCxHQUFHO0lBQ1g7RUFDRCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTSSx1QkFBdUJBLENBQUNDLEtBQWMsRUFBc0I7SUFDcEUsT0FBT0EsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUNBLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUNBLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUNBLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO0VBQzNHO0VBRUEsTUFBTUMsbUJBQW1CLEdBQUcsU0FBQUEsQ0FDM0JDLG1CQUF5RCxFQUN6REMsZUFBdUIsRUFDdkJDLEtBQXNDLEVBQy9CO0lBQ1AsSUFBSUEsS0FBSyxLQUFLWixTQUFTLEVBQUU7TUFDeEI7SUFDRDtJQUNBLElBQUksQ0FBQ1UsbUJBQW1CLENBQUNDLGVBQWUsQ0FBQyxF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
|
|
290
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiIsImV4cHJlc3Npb24iLCJfdHlwZSIsInVuZGVmaW5lZCIsIndyaXRlQ2hpbGRyZW4iLCJ2YWwiLCJBcnJheSIsImlzQXJyYXkiLCJqb2luIiwiZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUiLCJ2YWx1ZSIsInJlcGxhY2UiLCJhZGRDaGlsZEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25DaGlsZHJlbiIsImFnZ3JlZ2F0aW9uTmFtZSIsImNoaWxkIiwidHJpbSIsImxlbmd0aCIsInB1c2giLCJmb3JFYWNoIiwic3ViQ2hpbGQiLCJjaGlsZEtleSIsIk9iamVjdCIsImtleXMiLCJpc0FDb250cm9sIiwiY2hpbGRyZW4iLCJnZXRNZXRhZGF0YSIsIkZMX0RFTEVHQVRFIiwiRFRfREVTSUdOVElNRSIsIkNPUkVfUkVRVUlSRSIsIkxPR19TT1VSQ0VQQVRIIiwiQ1VTVE9NX0VOVElUWVRZUEUiLCJwcm9jZXNzT2JqZWN0UHJvcGVydHlWYWx1ZSIsImNoaWxkcmVuT2JqZWN0IiwibmFtZXNwYWNlQWxpYXMiLCJwcm9wZXJ0eU5hbWUiLCJhZ2dyZWdhdGlvblByb3BlcnRpZXMiLCJzdWJQcm9wTmFtZSIsImNoaWxkVmFsdWUiLCJjaGlsZHJlbk9iamVjdEVsZW1lbnQiLCJ0b1N0cmluZyIsIm5hbWVzcGFjZWRQcm9wZXJ0eSIsInByb2Nlc3NQcm9wZXJ0aWVzIiwibVNldHRpbmdzIiwibWV0YWRhdGFQcm9wZXJ0aWVzIiwicHJvcGVydGllc1N0cmluZyIsImFnZ3JlZ2F0aW9uU3RyaW5nIiwiaXNDb250cm9sIiwiaGFzT3duUHJvcGVydHkiLCJwcm9wZXJ0eVZhbHVlIiwidHlwZSIsImdldFBhdGgiLCJjb21waWxlRXhwcmVzc2lvbiIsIm91dFZhbHVlIiwiSlNPTiIsInN0cmluZ2lmeSIsInNlcGFyYXRvciIsImVuZHNXaXRoIiwiZXZlcnkiLCJwcm9wQXNVSTVPYmplY3QiLCJ1aTVvYmplY3QiLCJwcm9wIiwicHJvY2Vzc0NvbW1hbmQiLCJzZXR0aW5ncyIsIm1ldGFkYXRhRXZlbnRzIiwiY29tbWFuZFByb3BlcnR5IiwiY29tbWFuZCIsImV2ZW50TmFtZSIsInNwbGl0IiwiZXZlbnQiLCJzdGFydHNXaXRoIiwibmFtZSIsInByb2Nlc3NBZ2dyZWdhdGlvbnMiLCJtZXRhZGF0YUFnZ3JlZ2F0aW9ucyIsImRlZmF1bHRBZ2dyZWdhdGlvbk5hbWUiLCJhZ2dyZWdhdGlvbkNoaWxkS2V5cyIsIndyaXRlT25seURlZmF1bHRBZ2dyZWdhdGlvbiIsImpzeFhtbCIsImtleSIsInhtbE5hbWVzcGFjZU1hcCIsIm92ZXJyaWRlTm9kZU5hbWUiLCJtZXRhZGF0YSIsImNvbnRyb2xOYW1lIiwiZ2V0QWxsUHJvcGVydGllcyIsImdldEFsbEV2ZW50cyIsImdldEFsbEFzc29jaWF0aW9ucyIsImdldE5hbWUiLCJnZXRBbGxBZ2dyZWdhdGlvbnMiLCJnZXREZWZhdWx0QWdncmVnYXRpb25OYW1lIiwicHJvcGVydGllcyIsImRlcGVuZGVudHMiLCJjdXN0b21EYXRhIiwiYWdncmVnYXRpb25zIiwiZGVmYXVsdEFnZ3JlZ2F0aW9uIiwibmFtZXNwYWNlIiwibmFtZXNTcGxpdCIsInNsaWNlIiwidGFnTmFtZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsianN4LXhtbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFByb3BlcnRpZXMsIE5vbkNvbnRyb2xQcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IHR5cGUgQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZVwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcblxuZnVuY3Rpb24gaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24oXG5cdGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB8IHVua25vd25cbik6IGV4cHJlc3Npb24gaXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHtcblx0cmV0dXJuIChleHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPik/Ll90eXBlICE9PSB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IHdyaXRlQ2hpbGRyZW4gPSBmdW5jdGlvbiAodmFsOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZyB7XG5cdGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcblx0XHRyZXR1cm4gdmFsLmpvaW4oXCJcIik7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxufTtcblxuLyoqXG4gKiBTb21lIGNoYXJhY3RlcnMgbmVlZHMgdG8gYmUgZXNjYXBlZCB3aGVuIHVzZWQgYXMgWE1MIGF0dHJpYnV0ZSB2YWx1ZSwgb3RoZXJ3aXNlIHRoaXMgcmVzdWx0IGluIGluY29ycmVjdCBYTUwuXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHhtbCBhdHRyaWJ1dGVcbiAqL1xuZnVuY3Rpb24gZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUodmFsdWU/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gdmFsdWU/LnJlcGxhY2UoLyYvZywgXCImYW1wO1wiKS5yZXBsYWNlKC88L2csIFwiJmx0O1wiKS5yZXBsYWNlKC9cIi9nLCBcIiZxdW90O1wiKS5yZXBsYWNlKC8nL2csIFwiJmFwb3M7XCIpO1xufVxuXG5jb25zdCBhZGRDaGlsZEFnZ3JlZ2F0aW9uID0gZnVuY3Rpb24gKFxuXHRhZ2dyZWdhdGlvbkNoaWxkcmVuOiBSZWNvcmQ8c3RyaW5nLCAoQ29udHJvbCB8IHN0cmluZylbXT4sXG5cdGFnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nLFxuXHRjaGlsZDogc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuKTogdm9pZCB7XG5cdGlmIChjaGlsZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmICghYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdKSB7XG5cdFx0YWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdID0gW107XG5cdH1cblx0aWYgKHR5cGVvZiBjaGlsZCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdGlmIChjaGlsZC50cmltKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0YWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdLnB1c2goY2hpbGQpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuXHRcdGNoaWxkLmZvckVhY2goKHN1YkNoaWxkKSA9PiB7XG5cdFx0XHRhZGRDaGlsZEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uQ2hpbGRyZW4sIGFnZ3JlZ2F0aW9uTmFtZSwgc3ViQ2hpbGQpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGZvciAoY29uc3QgY2hpbGRLZXkgb2YgT2JqZWN0LmtleXMoY2hpbGQpKSB7XG5cdFx0XHRhZGRDaGlsZEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uQ2hpbGRyZW4sIGNoaWxkS2V5LCBjaGlsZFtjaGlsZEtleV0pO1xuXHRcdH1cblx0fVxufTtcblxuY29uc3QgaXNBQ29udHJvbCA9IGZ1bmN0aW9uIChjaGlsZHJlbj86IHR5cGVvZiBDb250cm9sIHwgRnVuY3Rpb24pOiBjaGlsZHJlbiBpcyB0eXBlb2YgQ29udHJvbCB7XG5cdHJldHVybiAhIShjaGlsZHJlbiBhcyB0eXBlb2YgQ29udHJvbCk/LmdldE1ldGFkYXRhO1xufTtcblxuY29uc3QgRkxfREVMRUdBVEUgPSBcImZsOmRlbGVnYXRlXCI7XG5jb25zdCBEVF9ERVNJR05USU1FID0gXCJkdDpkZXNpZ250aW1lXCI7XG5jb25zdCBDT1JFX1JFUVVJUkUgPSBcImNvcmU6cmVxdWlyZVwiO1xuY29uc3QgTE9HX1NPVVJDRVBBVEggPSBcImxvZzpzb3VyY2VQYXRoXCI7XG5jb25zdCBDVVNUT01fRU5USVRZVFlQRSA9IFwiY3VzdG9tRGF0YTplbnRpdHlUeXBlXCI7XG5cbmZ1bmN0aW9uIHByb2Nlc3NPYmplY3RQcm9wZXJ0eVZhbHVlKFxuXHRjaGlsZHJlbk9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdG5hbWVzcGFjZUFsaWFzOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHByb3BlcnR5TmFtZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuXHQvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBjaGlsZCBpc1xuXHRjb25zdCBhZ2dyZWdhdGlvblByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uQ2hpbGRyZW46IHN0cmluZ1tdID0gW107XG5cdE9iamVjdC5rZXlzKGNoaWxkcmVuT2JqZWN0KS5mb3JFYWNoKChzdWJQcm9wTmFtZSkgPT4ge1xuXHRcdGNvbnN0IGNoaWxkVmFsdWUgPSBjaGlsZHJlbk9iamVjdFtzdWJQcm9wTmFtZV07XG5cdFx0aWYgKGNoaWxkVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKHR5cGVvZiBjaGlsZFZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGNoaWxkVmFsdWUpKSB7XG5cdFx0XHRcdFx0YWdncmVnYXRpb25DaGlsZHJlbi5wdXNoKGA8JHtzdWJQcm9wTmFtZX0+YCk7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjaGlsZHJlbk9iamVjdEVsZW1lbnQgb2YgY2hpbGRWYWx1ZSkge1xuXHRcdFx0XHRcdFx0YWdncmVnYXRpb25DaGlsZHJlbi5wdXNoKFxuXHRcdFx0XHRcdFx0XHRwcm9jZXNzT2JqZWN0UHJvcGVydHlWYWx1ZShjaGlsZHJlbk9iamVjdEVsZW1lbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG5hbWVzcGFjZUFsaWFzLCBzdWJQcm9wTmFtZSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFnZ3JlZ2F0aW9uQ2hpbGRyZW4ucHVzaChgPC8ke3N1YlByb3BOYW1lfT5gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBpZiB0aGUgcHJvcGVydHkgaXMgYSB2YWx1ZSBpdCBuZWVkcyB0byBiZSBzZXJpYWxpemVkIGFzIGEgY2hpbGRyZW5cblx0XHRcdFx0XHQvLyA8bXlPYmplY3RQcm9wIHByb3AxPSd4eHgnLCBwcm9wMj0neHh0Jy8+XG5cdFx0XHRcdFx0YWdncmVnYXRpb25DaGlsZHJlbi5wdXNoKFxuXHRcdFx0XHRcdFx0cHJvY2Vzc09iamVjdFByb3BlcnR5VmFsdWUoY2hpbGRWYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgbmFtZXNwYWNlQWxpYXMsIHN1YlByb3BOYW1lKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIE90aGVyd2lzZSBpdCdzIHBhcnQgb2YgdGhlIG1haW4gb2JqZWN0IGp1c3QgYXMgYW5vdGhlciBwcm9wZXJ0eVxuXHRcdFx0XHRhZ2dyZWdhdGlvblByb3BlcnRpZXMucHVzaChgJHtzdWJQcm9wTmFtZX09JyR7ZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUoY2hpbGRWYWx1ZS50b1N0cmluZygpKX0nYCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBuYW1lc3BhY2VkUHJvcGVydHkgPSBuYW1lc3BhY2VBbGlhcyA/IGAke25hbWVzcGFjZUFsaWFzfToke3Byb3BlcnR5TmFtZX1gIDogcHJvcGVydHlOYW1lO1xuXHRyZXR1cm4gYDwke25hbWVzcGFjZWRQcm9wZXJ0eX0gJHthZ2dyZWdhdGlvblByb3BlcnRpZXMuam9pbihcIiBcIil9PiR7YWdncmVnYXRpb25DaGlsZHJlbi5qb2luKFwiXFxuXCIpfTwvJHtuYW1lc3BhY2VkUHJvcGVydHl9PmA7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NQcm9wZXJ0aWVzPFQ+KFxuXHRtU2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRtZXRhZGF0YVByb3BlcnRpZXM6IFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0e1xuXHRcdFx0bmFtZT86IHN0cmluZztcblx0XHRcdHR5cGU/OiBzdHJpbmc7XG5cdFx0fVxuXHQ+LFxuXHRuYW1lc3BhY2VBbGlhczogc3RyaW5nLFxuXHRwcm9wZXJ0aWVzU3RyaW5nOiBzdHJpbmdbXSxcblx0YWdncmVnYXRpb25TdHJpbmc6IHN0cmluZ1tdLFxuXHRpc0NvbnRyb2w6IGJvb2xlYW5cbik6IHZvaWQge1xuXHRPYmplY3Qua2V5cyhtZXRhZGF0YVByb3BlcnRpZXMpLmZvckVhY2goKHByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdGlmIChtU2V0dGluZ3MuaGFzT3duUHJvcGVydHkocHJvcGVydHlOYW1lKSAmJiBtU2V0dGluZ3NbcHJvcGVydHlOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVZhbHVlID0gbVNldHRpbmdzW3Byb3BlcnR5TmFtZV07XG5cdFx0XHRpZiAocHJvcGVydHlOYW1lID09PSBDT1JFX1JFUVVJUkUpIHtcblx0XHRcdFx0cHJvcGVydGllc1N0cmluZy5wdXNoKGB4bWxuczpjb3JlPVwic2FwLnVpLmNvcmVcImApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5TmFtZSA9PT0gRkxfREVMRUdBVEUpIHtcblx0XHRcdFx0cHJvcGVydGllc1N0cmluZy5wdXNoKGB4bWxuczpmbD1cInNhcC51aS5mbFwiYCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocHJvcGVydHlOYW1lID09PSBEVF9ERVNJR05USU1FKSB7XG5cdFx0XHRcdHByb3BlcnRpZXNTdHJpbmcucHVzaChgeG1sbnM6ZHQ9XCJzYXAudWkuZHRcImApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5TmFtZSA9PT0gTE9HX1NPVVJDRVBBVEgpIHtcblx0XHRcdFx0cHJvcGVydGllc1N0cmluZy5wdXNoKGB4bWxuczpsb2c9XCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCJgKTtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0eU5hbWUgPT09IENVU1RPTV9FTlRJVFlUWVBFKSB7XG5cdFx0XHRcdHByb3BlcnRpZXNTdHJpbmcucHVzaChgeG1sbnM6Y3VzdG9tRGF0YT1cImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcImApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5VmFsdWUgJiYgdHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0aWYgKG1ldGFkYXRhUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIikge1xuXHRcdFx0XHRcdHByb3BlcnRpZXNTdHJpbmcucHVzaChgJHtwcm9wZXJ0eU5hbWV9PSckeyhwcm9wZXJ0eVZhbHVlIGFzIENvbnRleHQpLmdldFBhdGgoKX0nYCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ocHJvcGVydHlWYWx1ZSkpIHtcblx0XHRcdFx0XHRwcm9wZXJ0aWVzU3RyaW5nLnB1c2goYCR7cHJvcGVydHlOYW1lfT0nJHtlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShjb21waWxlRXhwcmVzc2lvbihwcm9wZXJ0eVZhbHVlKSl9J2ApO1xuXHRcdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHlWYWx1ZSkpIHtcblx0XHRcdFx0XHRpZiAocHJvcGVydHlWYWx1ZS5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG91dFZhbHVlID0gdHlwZW9mIHByb3BlcnR5VmFsdWVbMF0gPT09IFwic3RyaW5nXCIgPyBwcm9wZXJ0eVZhbHVlWzBdIDogSlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZVswXSk7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0aWVzU3RyaW5nLnB1c2goYCR7cHJvcGVydHlOYW1lfT0nJHtvdXRWYWx1ZX0nYCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNlcGFyYXRvciA9IG1ldGFkYXRhUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdLnR5cGU/LmVuZHNXaXRoKFwiW11cIikgPyBcIixcIiA6IFwiIFwiO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb3V0VmFsdWUgPSBwcm9wZXJ0eVZhbHVlLmV2ZXJ5KCh2YWwpID0+IHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdFx0XHRcdD8gcHJvcGVydHlWYWx1ZS5qb2luKHNlcGFyYXRvcilcblx0XHRcdFx0XHRcdFx0OiBKU09OLnN0cmluZ2lmeShwcm9wZXJ0eVZhbHVlKTtcblx0XHRcdFx0XHRcdHByb3BlcnRpZXNTdHJpbmcucHVzaChgJHtwcm9wZXJ0eU5hbWV9PScke291dFZhbHVlfSdgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNDb250cm9sKSB7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcEFzVUk1T2JqZWN0ID0geyB1aTVvYmplY3Q6IHRydWUsIC4uLnByb3BlcnR5VmFsdWUgfTtcblx0XHRcdFx0XHRwcm9wZXJ0aWVzU3RyaW5nLnB1c2goYCR7cHJvcGVydHlOYW1lfT0nJHtlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShKU09OLnN0cmluZ2lmeShwcm9wQXNVSTVPYmplY3QpKX0nYCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YWdncmVnYXRpb25TdHJpbmcucHVzaChwcm9jZXNzT2JqZWN0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eVZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIHVuZGVmaW5lZCwgcHJvcGVydHlOYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHlWYWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCBwcm9wID0gcHJvcGVydHlWYWx1ZSBhcyBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyO1xuXHRcdFx0XHRwcm9wZXJ0aWVzU3RyaW5nLnB1c2goYCR7cHJvcGVydHlOYW1lfT0nJHtlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShwcm9wLnRvU3RyaW5nKCkpfSdgKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0bVNldHRpbmdzLmNoaWxkcmVuPy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eU5hbWUpICYmXG5cdFx0XHRPYmplY3Qua2V5cygobVNldHRpbmdzLmNoaWxkcmVuIGFzIENvbnRyb2xQcm9wZXJ0aWVzPFQ+KT8uW3Byb3BlcnR5TmFtZV0gPz8ge30pLmxlbmd0aCA+IDBcblx0XHQpIHtcblx0XHRcdC8vIE9iamVjdCAvIEFycmF5IHByb3BlcnRpZXMgYXJlIHBhcnQgb2YgdGhlIGBjaGlsZHJlbmAgYWdncmVnYXRpb24gYW5kIGFzIHN1Y2ggc3RpbGwgbmVlZCB0byBiZSBwcm9jZXNzZWQgYXMgcHJvcGVydGllc1xuXHRcdFx0Y29uc3QgY2hpbGRyZW5PYmplY3QgPSAobVNldHRpbmdzLmNoaWxkcmVuIGFzIENvbnRyb2xQcm9wZXJ0aWVzPFQ+KT8uW3Byb3BlcnR5TmFtZV0gYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+O1xuXHRcdFx0YWdncmVnYXRpb25TdHJpbmcucHVzaChwcm9jZXNzT2JqZWN0UHJvcGVydHlWYWx1ZShjaGlsZHJlbk9iamVjdCwgbmFtZXNwYWNlQWxpYXMsIHByb3BlcnR5TmFtZSkpO1xuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSBjb21tYW5kLlxuICpcbiAqIFJlc29sdmVzIHRoZSBjb21tYW5kIHNldCBvbiB0aGUgY29udHJvbCB2aWEgdGhlIGludHJpbnNpYyBjbGFzcyBhdHRyaWJ1dGUgXCJqc3g6Y29tbWFuZFwiLlxuICogSWYgbm8gY29tbWFuZCBoYXMgYmVlbiBzZXQgb3IgdGhlIHRhcmdldGVkIGV2ZW50IGRvZXNuJ3QgZXhpc3QsIG5vIGNvbmZpZ3VyYXRpb24gaXMgc2V0LlxuICogQHBhcmFtIHNldHRpbmdzIE1ldGFkYXRhIG9mIHRoZSBjb250cm9sXG4gKiBAcGFyYW0gbWV0YWRhdGFFdmVudHMgU2V0dGluZ3Mgb2YgdGhlIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0NvbW1hbmQoXG5cdHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0bWV0YWRhdGFFdmVudHM6IFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0e1xuXHRcdFx0bmFtZTogc3RyaW5nO1xuXHRcdH1cblx0PlxuKTogdm9pZCB7XG5cdGNvbnN0IGNvbW1hbmRQcm9wZXJ0eSA9IHNldHRpbmdzW1wianN4OmNvbW1hbmRcIl07XG5cdGlmIChjb21tYW5kUHJvcGVydHkpIHtcblx0XHRjb25zdCBbY29tbWFuZCwgZXZlbnROYW1lXSA9IChjb21tYW5kUHJvcGVydHkgYXMgc3RyaW5nKS5zcGxpdChcInxcIik7XG5cdFx0Y29uc3QgZXZlbnQgPSBtZXRhZGF0YUV2ZW50c1tldmVudE5hbWVdO1xuXHRcdGlmIChldmVudCAmJiBjb21tYW5kLnN0YXJ0c1dpdGgoXCJjbWQ6XCIpKSB7XG5cdFx0XHRzZXR0aW5nc1tldmVudC5uYW1lXSA9IGNvbW1hbmQ7XG5cdFx0fVxuXHR9XG5cdGRlbGV0ZSBzZXR0aW5nc1tcImpzeDpjb21tYW5kXCJdO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzQWdncmVnYXRpb25zKFxuXHRtU2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRtZXRhZGF0YUFnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgb2JqZWN0Pixcblx0bmFtZXNwYWNlQWxpYXM6IHN0cmluZyxcblx0ZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRwcm9wZXJ0aWVzU3RyaW5nOiBzdHJpbmdbXSxcblx0YWdncmVnYXRpb25TdHJpbmc6IHN0cmluZ1tdXG4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4ge1xuXHRjb25zdCBhZ2dyZWdhdGlvbkNoaWxkcmVuOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblx0YWRkQ2hpbGRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbkNoaWxkcmVuLCBkZWZhdWx0QWdncmVnYXRpb25OYW1lID8/IFwiY3VzdG9tRGF0YVwiLCBtU2V0dGluZ3MuY2hpbGRyZW4gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPik7XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uQ2hpbGRLZXlzID0gT2JqZWN0LmtleXMoYWdncmVnYXRpb25DaGlsZHJlbik7XG5cdGxldCB3cml0ZU9ubHlEZWZhdWx0QWdncmVnYXRpb24gPSBmYWxzZTtcblx0aWYgKGFnZ3JlZ2F0aW9uQ2hpbGRLZXlzLmxlbmd0aCA9PT0gMSAmJiBhZ2dyZWdhdGlvbkNoaWxkS2V5c1swXSA9PT0gZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSkge1xuXHRcdHdyaXRlT25seURlZmF1bHRBZ2dyZWdhdGlvbiA9IHRydWU7XG5cdH1cblx0T2JqZWN0LmtleXMobWV0YWRhdGFBZ2dyZWdhdGlvbnMpLmZvckVhY2goKGFnZ3JlZ2F0aW9uTmFtZSkgPT4ge1xuXHRcdGlmIChhZ2dyZWdhdGlvbkNoaWxkcmVuLmhhc093blByb3BlcnR5KGFnZ3JlZ2F0aW9uTmFtZSkgJiYgYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdLmxlbmd0aCA+IDApIHtcblx0XHRcdGlmIChhZ2dyZWdhdGlvbk5hbWUgPT09IGRlZmF1bHRBZ2dyZWdhdGlvbk5hbWUgJiYgd3JpdGVPbmx5RGVmYXVsdEFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdGFnZ3JlZ2F0aW9uU3RyaW5nLnB1c2goYCR7d3JpdGVDaGlsZHJlbihhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0pfWApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YWdncmVnYXRpb25TdHJpbmcucHVzaChcblx0XHRcdFx0XHRgPCR7bmFtZXNwYWNlQWxpYXN9OiR7YWdncmVnYXRpb25OYW1lfT5cblx0XHRcdFx0XHRcdCR7d3JpdGVDaGlsZHJlbihhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0pfVxuXHRcdFx0XHRcdDwvJHtuYW1lc3BhY2VBbGlhc306JHthZ2dyZWdhdGlvbk5hbWV9PmBcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKG1TZXR0aW5ncy5oYXNPd25Qcm9wZXJ0eShhZ2dyZWdhdGlvbk5hbWUpICYmIG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmICh0eXBlb2YgbVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0cHJvcGVydGllc1N0cmluZy5wdXNoKGAke2FnZ3JlZ2F0aW9uTmFtZX09JyR7SlNPTi5zdHJpbmdpZnkobVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0pfSdgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEluIHNvbWUgY2FzZSB0aGUgYWdncmVnYXRpb24gZXhwZWN0IGEgc3RyaW5nIHZhbHVlIChsaWtlIGZvciB0aGUgdG9vbHRpcCksIGluIHRoaXMgY2FzZSB3ZSBzZXQgaXQgZGlyZWN0bHkgYXMgYSBwcm9wZXJ0eVxuXHRcdFx0XHRwcm9wZXJ0aWVzU3RyaW5nLnB1c2goYCR7YWdncmVnYXRpb25OYW1lfT0nJHtlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShtU2V0dGluZ3NbYWdncmVnYXRpb25OYW1lXSBhcyBzdHJpbmcpfSdgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYWdncmVnYXRpb25DaGlsZHJlbjtcbn1cblxuY29uc3QganN4WG1sID0gZnVuY3Rpb24gPFQ+KFxuXHR0eXBlOiB0eXBlb2YgQ29udHJvbCB8IHR5cGVvZiBCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UgfCBcInNsb3RcIixcblx0bVNldHRpbmdzOiBOb25Db250cm9sUHJvcGVydGllczxUPiAmIHsga2V5Pzogc3RyaW5nOyBjaGlsZHJlbj86IFVJNUVsZW1lbnQgfCBDb250cm9sUHJvcGVydGllczxUPjsgbmFtZT86IHN0cmluZyB9LFxuXHRrZXk6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0eG1sTmFtZXNwYWNlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuXHRvdmVycmlkZU5vZGVOYW1lPzogc3RyaW5nXG4pOiBzdHJpbmcge1xuXHRsZXQgbWV0YWRhdGE7XG5cdGxldCBtZXRhZGF0YVByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHsgbmFtZT86IHN0cmluZzsgdHlwZT86IHN0cmluZyB9Pjtcblx0bGV0IG1ldGFkYXRhRXZlbnRzOiBSZWNvcmQ8c3RyaW5nLCB7IG5hbWU6IHN0cmluZyB9Pjtcblx0bGV0IGNvbnRyb2xOYW1lO1xuXHRsZXQgbWV0YWRhdGFBZ2dyZWdhdGlvbnM7XG5cdGxldCBkZWZhdWx0QWdncmVnYXRpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGxldCBpc0NvbnRyb2wgPSBmYWxzZTtcblx0aWYgKHR5cGUgPT09IFwic2xvdFwiKSB7XG5cdFx0cmV0dXJuIGA8c2xvdCBuYW1lPVwiJHttU2V0dGluZ3MubmFtZX1cIi8+YDtcblx0fSBlbHNlIGlmIChpc0FDb250cm9sKHR5cGUpKSB7XG5cdFx0bWV0YWRhdGEgPSB0eXBlLmdldE1ldGFkYXRhKCk7XG5cdFx0bWV0YWRhdGFQcm9wZXJ0aWVzID0gbWV0YWRhdGEuZ2V0QWxsUHJvcGVydGllcygpO1xuXHRcdG1ldGFkYXRhUHJvcGVydGllcyA9IHsgLi4ubWV0YWRhdGFQcm9wZXJ0aWVzLCAuLi5tZXRhZGF0YS5nZXRBbGxFdmVudHMoKSwgLi4ubWV0YWRhdGEuZ2V0QWxsQXNzb2NpYXRpb25zKCkgfTtcblx0XHRtZXRhZGF0YUV2ZW50cyA9IG1ldGFkYXRhLmdldEFsbEV2ZW50cygpO1xuXHRcdGNvbnRyb2xOYW1lID0gbWV0YWRhdGEuZ2V0TmFtZSgpO1xuXHRcdG1ldGFkYXRhQWdncmVnYXRpb25zID0gbWV0YWRhdGEuZ2V0QWxsQWdncmVnYXRpb25zKCk7XG5cdFx0ZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSA9IG1ldGFkYXRhLmdldERlZmF1bHRBZ2dyZWdhdGlvbk5hbWUoKTtcblx0XHRpc0NvbnRyb2wgPSB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdG1ldGFkYXRhID0gdHlwZS5tZXRhZGF0YTtcblx0XHRtZXRhZGF0YVByb3BlcnRpZXMgPSB7IC4uLm1ldGFkYXRhLnByb3BlcnRpZXMgfTtcblx0XHRtZXRhZGF0YUFnZ3JlZ2F0aW9ucyA9IHsgLi4ueyBkZXBlbmRlbnRzOiB7fSwgY3VzdG9tRGF0YToge30gfSwgLi4ubWV0YWRhdGEuYWdncmVnYXRpb25zIH07XG5cdFx0bWV0YWRhdGFFdmVudHMgPSB7fTtcblx0XHRkZWZhdWx0QWdncmVnYXRpb25OYW1lID0gbWV0YWRhdGEuZGVmYXVsdEFnZ3JlZ2F0aW9uO1xuXHRcdGNvbnRyb2xOYW1lID0gbWV0YWRhdGEubmFtZXNwYWNlICsgXCIuXCIgKyBtZXRhZGF0YS5uYW1lO1xuXHR9XG5cdGNvbnN0IG5hbWVzU3BsaXQgPSBjb250cm9sTmFtZS5zcGxpdChcIi5cIik7XG5cdGlmIChrZXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdG1TZXR0aW5nc1tcImtleVwiXSA9IGtleTtcblx0fVxuXG5cdG1ldGFkYXRhUHJvcGVydGllc1tcImNsYXNzXCJdID0geyBuYW1lOiBcImNsYXNzXCIgfTtcblx0bWV0YWRhdGFQcm9wZXJ0aWVzW1wiaWRcIl0gPSB7IG5hbWU6IFwiaWRcIiB9O1xuXHRtZXRhZGF0YVByb3BlcnRpZXNbXCJiaW5kaW5nXCJdID0geyBuYW1lOiBcImJpbmRpbmdcIiB9O1xuXHRtZXRhZGF0YVByb3BlcnRpZXNbRkxfREVMRUdBVEVdID0geyBuYW1lOiBGTF9ERUxFR0FURSB9O1xuXHRtZXRhZGF0YVByb3BlcnRpZXNbRFRfREVTSUdOVElNRV0gPSB7IG5hbWU6IERUX0RFU0lHTlRJTUUgfTtcblx0bWV0YWRhdGFQcm9wZXJ0aWVzW0NPUkVfUkVRVUlSRV0gPSB7IG5hbWU6IENPUkVfUkVRVUlSRSB9O1xuXHRtZXRhZGF0YVByb3BlcnRpZXNbTE9HX1NPVVJDRVBBVEhdID0geyBuYW1lOiBMT0dfU09VUkNFUEFUSCB9O1xuXHRtZXRhZGF0YVByb3BlcnRpZXNbQ1VTVE9NX0VOVElUWVRZUEVdID0geyBuYW1lOiBDVVNUT01fRU5USVRZVFlQRSB9O1xuXHRtZXRhZGF0YVByb3BlcnRpZXNbXCJ4bWxuczpmbFwiXSA9IHsgbmFtZTogRkxfREVMRUdBVEUgfTtcblx0bWV0YWRhdGFQcm9wZXJ0aWVzW1wieG1sbnM6ZHRcIl0gPSB7IG5hbWU6IERUX0RFU0lHTlRJTUUgfTtcblx0bWV0YWRhdGFQcm9wZXJ0aWVzW1wieG1sbnM6Y29yZVwiXSA9IHsgbmFtZTogQ09SRV9SRVFVSVJFIH07XG5cdG1ldGFkYXRhUHJvcGVydGllc1tcInhtbG5zOmxvZ1wiXSA9IHsgbmFtZTogTE9HX1NPVVJDRVBBVEggfTtcblx0aWYgKGNvbnRyb2xOYW1lID09PSBcInNhcC51aS5jb3JlLkZyYWdtZW50XCIpIHtcblx0XHRtZXRhZGF0YVByb3BlcnRpZXNbXCJmcmFnbWVudE5hbWVcIl0gPSB7IG5hbWU6IFwiZnJhZ21lbnROYW1lXCIgfTtcblx0fVxuXHRjb25zdCBuYW1lc3BhY2UgPSBuYW1lc1NwbGl0LnNsaWNlKDAsIC0xKTtcblx0Y29uc3QgbmFtZSA9IG5hbWVzU3BsaXRbbmFtZXNTcGxpdC5sZW5ndGggLSAxXTtcblx0bGV0IG5hbWVzcGFjZUFsaWFzID0gbmFtZXNwYWNlW25hbWVzcGFjZS5sZW5ndGggLSAxXTtcblx0aWYgKHhtbE5hbWVzcGFjZU1hcFtuYW1lc3BhY2Uuam9pbihcIi5cIildKSB7XG5cdFx0bmFtZXNwYWNlQWxpYXMgPSB4bWxOYW1lc3BhY2VNYXBbbmFtZXNwYWNlLmpvaW4oXCIuXCIpXTtcblx0fVxuXHRsZXQgdGFnTmFtZSA9IGAke25hbWVzcGFjZUFsaWFzfToke25hbWV9YDtcblx0Y29uc3QgcHJvcGVydGllc1N0cmluZzogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgYWdncmVnYXRpb25TdHJpbmc6IHN0cmluZ1tdID0gW107XG5cdHByb2Nlc3NDb21tYW5kKG1TZXR0aW5ncywgbWV0YWRhdGFFdmVudHMpO1xuXHRwcm9jZXNzUHJvcGVydGllcyhtU2V0dGluZ3MsIG1ldGFkYXRhUHJvcGVydGllcywgbmFtZXNwYWNlQWxpYXMsIHByb3BlcnRpZXNTdHJpbmcsIGFnZ3JlZ2F0aW9uU3RyaW5nLCBpc0NvbnRyb2wpO1xuXHRwcm9jZXNzQWdncmVnYXRpb25zKG1TZXR0aW5ncywgbWV0YWRhdGFBZ2dyZWdhdGlvbnMsIG5hbWVzcGFjZUFsaWFzLCBkZWZhdWx0QWdncmVnYXRpb25OYW1lLCBwcm9wZXJ0aWVzU3RyaW5nLCBhZ2dyZWdhdGlvblN0cmluZyk7XG5cdGlmIChvdmVycmlkZU5vZGVOYW1lKSB7XG5cdFx0dGFnTmFtZSA9IG92ZXJyaWRlTm9kZU5hbWU7XG5cdH1cblx0cmV0dXJuIGA8JHt0YWdOYW1lfSB4bWxuczoke25hbWVzcGFjZUFsaWFzfT1cIiR7bmFtZXNwYWNlLmpvaW4oXCIuXCIpfVwiICR7cHJvcGVydGllc1N0cmluZy5qb2luKFwiIFwiKX0+JHthZ2dyZWdhdGlvblN0cmluZy5qb2luKFxuXHRcdFwiXCJcblx0KX08LyR7dGFnTmFtZX0+YDtcbn07XG5leHBvcnQg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
|
|
@@ -63,9 +63,7 @@ const FL_DELEGATE = "fl:delegate";
|
|
|
63
63
|
const DT_DESIGNTIME = "dt:designtime";
|
|
64
64
|
const CORE_REQUIRE = "core:require";
|
|
65
65
|
const LOG_SOURCEPATH = "log:sourcePath";
|
|
66
|
-
const CUSTOM_LOADVALUE = "customData:loadValue";
|
|
67
66
|
const CUSTOM_ENTITYTYPE = "customData:entityType";
|
|
68
|
-
const CUSTOM_URL = "customData:url";
|
|
69
67
|
|
|
70
68
|
function processObjectPropertyValue(
|
|
71
69
|
childrenObject: Record<string, unknown>,
|
|
@@ -134,7 +132,7 @@ function processProperties<T>(
|
|
|
134
132
|
if (propertyName === LOG_SOURCEPATH) {
|
|
135
133
|
propertiesString.push(`xmlns:log="http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1"`);
|
|
136
134
|
}
|
|
137
|
-
if (propertyName ===
|
|
135
|
+
if (propertyName === CUSTOM_ENTITYTYPE) {
|
|
138
136
|
propertiesString.push(`xmlns:customData="http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1"`);
|
|
139
137
|
}
|
|
140
138
|
if (propertyValue && typeof propertyValue === "object") {
|
|
@@ -147,18 +145,20 @@ function processProperties<T>(
|
|
|
147
145
|
const outValue = typeof propertyValue[0] === "string" ? propertyValue[0] : JSON.stringify(propertyValue[0]);
|
|
148
146
|
propertiesString.push(`${propertyName}='${outValue}'`);
|
|
149
147
|
} else {
|
|
148
|
+
const separator = metadataProperties[propertyName].type?.endsWith("[]") ? "," : " ";
|
|
150
149
|
const outValue = propertyValue.every((val) => typeof val === "string")
|
|
151
|
-
? propertyValue.join(
|
|
150
|
+
? propertyValue.join(separator)
|
|
152
151
|
: JSON.stringify(propertyValue);
|
|
153
152
|
propertiesString.push(`${propertyName}='${outValue}'`);
|
|
154
153
|
}
|
|
155
154
|
} else if (isControl) {
|
|
156
|
-
|
|
155
|
+
const propAsUI5Object = { ui5object: true, ...propertyValue };
|
|
156
|
+
propertiesString.push(`${propertyName}='${escapeXMLAttributeValue(JSON.stringify(propAsUI5Object))}'`);
|
|
157
157
|
} else {
|
|
158
158
|
aggregationString.push(processObjectPropertyValue(propertyValue as Record<string, string>, undefined, propertyName));
|
|
159
159
|
}
|
|
160
|
-
} else if (
|
|
161
|
-
const prop =
|
|
160
|
+
} else if (propertyValue !== null) {
|
|
161
|
+
const prop = propertyValue as string | boolean | number;
|
|
162
162
|
propertiesString.push(`${propertyName}='${escapeXMLAttributeValue(prop.toString())}'`);
|
|
163
163
|
}
|
|
164
164
|
} else if (
|
|
@@ -284,9 +284,7 @@ const jsxXml = function <T>(
|
|
|
284
284
|
metadataProperties[DT_DESIGNTIME] = { name: DT_DESIGNTIME };
|
|
285
285
|
metadataProperties[CORE_REQUIRE] = { name: CORE_REQUIRE };
|
|
286
286
|
metadataProperties[LOG_SOURCEPATH] = { name: LOG_SOURCEPATH };
|
|
287
|
-
metadataProperties[CUSTOM_LOADVALUE] = { name: CUSTOM_LOADVALUE };
|
|
288
287
|
metadataProperties[CUSTOM_ENTITYTYPE] = { name: CUSTOM_ENTITYTYPE };
|
|
289
|
-
metadataProperties[CUSTOM_URL] = { name: CUSTOM_URL };
|
|
290
288
|
metadataProperties["xmlns:fl"] = { name: FL_DELEGATE };
|
|
291
289
|
metadataProperties["xmlns:dt"] = { name: DT_DESIGNTIME };
|
|
292
290
|
metadataProperties["xmlns:core"] = { name: CORE_REQUIRE };
|
|
@@ -15,16 +15,17 @@ sap.ui.define(["sap/ui/core/Lib"], function (Library) {
|
|
|
15
15
|
_exports.feBaseNamespace = feBaseNamespace;
|
|
16
16
|
const thisLib = Library.init({
|
|
17
17
|
name: "sap.fe.base",
|
|
18
|
+
apiVersion: 2,
|
|
18
19
|
dependencies: ["sap.ui.core"],
|
|
19
20
|
types: [],
|
|
20
21
|
interfaces: [],
|
|
21
22
|
controls: [],
|
|
22
23
|
elements: [],
|
|
23
24
|
// eslint-disable-next-line no-template-curly-in-string
|
|
24
|
-
version: "1.
|
|
25
|
+
version: "1.132.0",
|
|
25
26
|
noLibraryCSS: true
|
|
26
27
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
27
28
|
});
|
|
28
29
|
return thisLib;
|
|
29
30
|
}, false);
|
|
30
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmZUJhc2VOYW1lc3BhY2UiLCJfZXhwb3J0cyIsInRoaXNMaWIiLCJMaWJyYXJ5IiwiaW5pdCIsIm5hbWUiLCJhcGlWZXJzaW9uIiwiZGVwZW5kZW5jaWVzIiwidHlwZXMiLCJpbnRlcmZhY2VzIiwiY29udHJvbHMiLCJlbGVtZW50cyIsInZlcnNpb24iLCJub0xpYnJhcnlDU1MiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbImxpYnJhcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuLyoqXG4gKiBMaWJyYXJ5IHByb3ZpZGluZyB0aGUgYmFzZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBydW50aW1lIGZvciBTQVAgRmlvcmkgZWxlbWVudHMgZm9yIE9EYXRhIFY0LlxuICogQG5hbWVzcGFjZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZmVCYXNlTmFtZXNwYWNlID0gXCJzYXAuZmUuYmFzZVwiO1xuXG5jb25zdCB0aGlzTGliID0gTGlicmFyeS5pbml0KHtcblx0bmFtZTogXCJzYXAuZmUuYmFzZVwiLFxuXHRhcGlWZXJzaW9uOiAyLFxuXHRkZXBlbmRlbmNpZXM6IFtcInNhcC51aS5jb3JlXCJdLFxuXHR0eXBlczogW10sXG5cdGludGVyZmFjZXM6IFtdLFxuXHRjb250cm9sczogW10sXG5cdGVsZW1lbnRzOiBbXSxcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZ1xuXHR2ZXJzaW9uOiBcIiR7dmVyc2lvbn1cIixcblx0bm9MaWJyYXJ5Q1NTOiB0cnVlXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59KSBhcyBhbnk7XG5cbmV4cG9ydCBkZWZhdWx0IHRoaXNMaWI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0VBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLE1BQU1BLGVBQWUsR0FBRyxhQUFhO0VBQUNDLFFBQUEsQ0FBQUQsZUFBQSxHQUFBQSxlQUFBO0VBRTdDLE1BQU1FLE9BQU8sR0FBR0MsT0FBTyxDQUFDQyxJQUFJLENBQUM7SUFDNUJDLElBQUksRUFBRSxhQUFhO0lBQ25CQyxVQUFVLEVBQUUsQ0FBQztJQUNiQyxZQUFZLEVBQUUsQ0FBQyxhQUFhLENBQUM7SUFDN0JDLEtBQUssRUFBRSxFQUFFO0lBQ1RDLFVBQVUsRUFBRSxFQUFFO0lBQ2RDLFFBQVEsRUFBRSxFQUFFO0lBQ1pDLFFBQVEsRUFBRSxFQUFFO0lBQ1o7SUFDQUMsT0FBTyxFQUFFLFlBQVk7SUFDckJDLFlBQVksRUFBRTtJQUNkO0VBQ0QsQ0FBQyxDQUFRO0VBQUMsT0FFS1gsT0FBTztBQUFBIiwiaWdub3JlTGlzdCI6W119
|