@sapui5/sap.fe.base 1.132.0 → 1.134.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 +11 -6
- package/src/sap/fe/base/BindingToolkit.ts +10 -3
- package/src/sap/fe/base/BuildingBlockBase.js +5 -7
- package/src/sap/fe/base/BuildingBlockBase.ts +4 -4
- package/src/sap/fe/base/ClassSupport.js +84 -50
- package/src/sap/fe/base/ClassSupport.ts +111 -57
- package/src/sap/fe/base/HookSupport.js +41 -10
- package/src/sap/fe/base/HookSupport.ts +52 -14
- package/src/sap/fe/base/jsx-runtime/jsx-control.js +95 -37
- package/src/sap/fe/base/jsx-runtime/jsx-control.ts +112 -34
- package/src/sap/fe/base/library.js +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2024 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/ui/base/DataType", "sap/ui/base/ManagedObject", "sap/ui/core/mvc/EventHandlerResolver"], function (Log, BindingToolkit, Text, DataType, ManagedObject, EventHandlerResolver) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/ui/base/BindingParser", "sap/ui/base/DataType", "sap/ui/base/ManagedObject", "sap/ui/core/mvc/EventHandlerResolver"], function (Log, BindingToolkit, Text, BindingParser, DataType, ManagedObject, EventHandlerResolver) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var bindingParser = ManagedObject.bindingParser;
|
|
@@ -52,9 +52,17 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
|
|
|
52
52
|
if (aggregationChildren[aggregationName] !== undefined) {
|
|
53
53
|
if (mSettings.hasOwnProperty(aggregationName)) {
|
|
54
54
|
if (typeof mSettings[aggregationName] === "string") {
|
|
55
|
-
mSettings[aggregationName]
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
const resultingParse = BindingParser.complexParser(mSettings[aggregationName]);
|
|
56
|
+
if (resultingParse) {
|
|
57
|
+
mSettings[aggregationName] = {
|
|
58
|
+
path: resultingParse.path,
|
|
59
|
+
model: resultingParse.model
|
|
60
|
+
};
|
|
61
|
+
} else {
|
|
62
|
+
mSettings[aggregationName] = {
|
|
63
|
+
path: mSettings[aggregationName]
|
|
64
|
+
};
|
|
65
|
+
}
|
|
58
66
|
}
|
|
59
67
|
if (typeof aggregationChildren[aggregationName] === "function") {
|
|
60
68
|
mSettings[aggregationName].factory = aggregationChildren[aggregationName];
|
|
@@ -68,6 +76,78 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
|
|
|
68
76
|
});
|
|
69
77
|
}
|
|
70
78
|
|
|
79
|
+
/**
|
|
80
|
+
* Processes a binding toolkit expression property for function processProperties
|
|
81
|
+
*
|
|
82
|
+
* If the property is a constant, it compiles it as a constant. If the property is an aggregation,
|
|
83
|
+
* it compiles the expression as an object. Otherwise, it compiles the expression normally.
|
|
84
|
+
* @param settings The settings of the control
|
|
85
|
+
* @param settingsKey The key of the setting being processed
|
|
86
|
+
* @param bindingToolkitExpression The binding toolkit expression to process
|
|
87
|
+
* @param allProperties All properties of the control
|
|
88
|
+
*/
|
|
89
|
+
function processBindingToolkitExpression(settings, settingsKey, bindingToolkitExpression, allProperties) {
|
|
90
|
+
if (isConstant(bindingToolkitExpression)) {
|
|
91
|
+
settings[settingsKey] = compileConstant(bindingToolkitExpression, false, true, true);
|
|
92
|
+
} else if (!Object.hasOwnProperty.call(allProperties, settingsKey)) {
|
|
93
|
+
// Aggregation case - we need to compile the expression but as an object
|
|
94
|
+
if (isPathInModelExpression(bindingToolkitExpression)) {
|
|
95
|
+
settings[settingsKey] = {
|
|
96
|
+
path: bindingToolkitExpression.path,
|
|
97
|
+
model: bindingToolkitExpression.modelName
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
} else {
|
|
101
|
+
settings[settingsKey] = compileExpression(bindingToolkitExpression);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Processes a string property for function processProperties
|
|
107
|
+
*
|
|
108
|
+
* If the property is not a binding expression and does not match the expected format,
|
|
109
|
+
* it parses the value to provide the expected format. If the property is an event handler,
|
|
110
|
+
* it logs an error.
|
|
111
|
+
* @param settings The settings of the control
|
|
112
|
+
* @param settingsKey The key of the setting being processed
|
|
113
|
+
* @param value The string value to process
|
|
114
|
+
* @param allEvents All events of the control
|
|
115
|
+
* @param allProperties All properties of the control
|
|
116
|
+
* @param metadata Metadata of the control
|
|
117
|
+
*/
|
|
118
|
+
function processStringProperty(settings, settingsKey, value, allEvents, allProperties, metadata) {
|
|
119
|
+
if (!value.startsWith("{")) {
|
|
120
|
+
if (Object.hasOwnProperty.call(allEvents, settingsKey)) {
|
|
121
|
+
Log.error(`Event handlers cannot be set as string in JSX, ${settingsKey} in ${metadata.getName()}`);
|
|
122
|
+
}
|
|
123
|
+
const propertyType = allProperties[settingsKey]?.getType?.();
|
|
124
|
+
if (propertyType && propertyType instanceof DataType && ["boolean", "int", "float"].includes(propertyType.getName())) {
|
|
125
|
+
settings[settingsKey] = propertyType.parseValue(value);
|
|
126
|
+
}
|
|
127
|
+
} else {
|
|
128
|
+
settings[settingsKey] = value;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Processes an object property for function processProperties.
|
|
134
|
+
*
|
|
135
|
+
* If the property is a promise, it adds it to the late properties map. If the property is a binding info holder,
|
|
136
|
+
* it sets the binding info to the settings.
|
|
137
|
+
* @param settings The settings of the control
|
|
138
|
+
* @param settingsKey The key of the setting being processed
|
|
139
|
+
* @param value The object value to process
|
|
140
|
+
* @param lateProperties A map of the control's late properties
|
|
141
|
+
*/
|
|
142
|
+
function processObjectProperty(settings, settingsKey, value, lateProperties) {
|
|
143
|
+
if (value.then) {
|
|
144
|
+
lateProperties[settingsKey] = value;
|
|
145
|
+
delete settings[settingsKey];
|
|
146
|
+
} else if (value.__bindingInfo) {
|
|
147
|
+
settings[settingsKey] = value.__bindingInfo;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
71
151
|
/**
|
|
72
152
|
* Processes the properties.
|
|
73
153
|
*
|
|
@@ -86,34 +166,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
|
|
|
86
166
|
for (settingsKey in settings) {
|
|
87
167
|
const value = settings[settingsKey];
|
|
88
168
|
if (isBindingToolkitExpression(value)) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if (isPathInModelExpression(bindingToolkitExpression)) {
|
|
95
|
-
settings[settingsKey] = {
|
|
96
|
-
path: bindingToolkitExpression.path,
|
|
97
|
-
model: bindingToolkitExpression.modelName
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
} else {
|
|
101
|
-
settings[settingsKey] = compileExpression(bindingToolkitExpression);
|
|
102
|
-
}
|
|
103
|
-
} else if (value !== null && typeof value === "object" && value.then) {
|
|
104
|
-
lateProperties[settingsKey] = value;
|
|
105
|
-
delete settings[settingsKey];
|
|
106
|
-
} else if (typeof value === "string" && !value.startsWith("{")) {
|
|
107
|
-
const propertyType = allProperties[settingsKey]?.getType?.();
|
|
108
|
-
if (propertyType && propertyType instanceof DataType && ["boolean", "int", "float"].includes(propertyType.getName())) {
|
|
109
|
-
settings[settingsKey] = propertyType.parseValue(value);
|
|
110
|
-
}
|
|
111
|
-
} else if (typeof value === "object" && value.__bindingInfo) {
|
|
112
|
-
settings[settingsKey] = value.__bindingInfo;
|
|
169
|
+
processBindingToolkitExpression(settings, settingsKey, value, allProperties);
|
|
170
|
+
} else if (value !== null && typeof value === "object") {
|
|
171
|
+
processObjectProperty(settings, settingsKey, value, lateProperties);
|
|
172
|
+
} else if (typeof value === "string") {
|
|
173
|
+
processStringProperty(settings, settingsKey, value, allEvents, allProperties, metadata);
|
|
113
174
|
} else if (value === undefined) {
|
|
114
|
-
|
|
115
|
-
delete settings[settingsKey];
|
|
116
|
-
}
|
|
175
|
+
delete settings[settingsKey];
|
|
117
176
|
}
|
|
118
177
|
}
|
|
119
178
|
return lateProperties;
|
|
@@ -142,9 +201,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
|
|
|
142
201
|
let targetControl;
|
|
143
202
|
if (ControlType?.isFragment) {
|
|
144
203
|
targetControl = settings.children;
|
|
145
|
-
} else if (ControlType?.isRuntime) {
|
|
146
|
-
const runtimeBuildingBlock = new ControlType(settings);
|
|
147
|
-
targetControl = runtimeBuildingBlock.getContent?.(jsxContext.view, jsxContext.appComponent);
|
|
148
204
|
} else if (isAControl(ControlType)) {
|
|
149
205
|
const metadata = ControlType.getMetadata();
|
|
150
206
|
if (key !== undefined) {
|
|
@@ -189,10 +245,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
|
|
|
189
245
|
if (bindingInfo) {
|
|
190
246
|
targetControlInstance.bindElement({
|
|
191
247
|
model: bindingInfo.model ?? undefined,
|
|
192
|
-
path: bindingInfo.path
|
|
248
|
+
path: bindingInfo.path,
|
|
249
|
+
parameters: bindingInfo.parameters ?? undefined
|
|
193
250
|
});
|
|
251
|
+
} else {
|
|
252
|
+
targetControlInstance.bindElement(bindingDef);
|
|
194
253
|
}
|
|
195
|
-
targetControlInstance.bindElement(bindingDef);
|
|
196
254
|
} else {
|
|
197
255
|
// We consider it's an object
|
|
198
256
|
Object.keys(bindingDef).forEach(bindingDefKey => {
|
|
@@ -223,4 +281,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
|
|
|
223
281
|
};
|
|
224
282
|
return jsxControl;
|
|
225
283
|
}, false);
|
|
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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
|
|
284
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGTF9ERUxFR0FURSIsIkNPUkVfUkVRVUlSRSIsIkRUX0RFU0lHTlRJTUUiLCJhZGRDaGlsZEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25DaGlsZHJlbiIsImFnZ3JlZ2F0aW9uTmFtZSIsImNoaWxkIiwidW5kZWZpbmVkIiwiaXNDaGlsZEFuRWxlbWVudCIsInB1c2giLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwic3ViQ2hpbGQiLCJPYmplY3QiLCJrZXlzIiwiY2hpbGRLZXkiLCJjaGlsZHJlbiIsImlzQSIsImlzQUNvbnRyb2wiLCJnZXRNZXRhZGF0YSIsInByb2Nlc3NBZ2dyZWdhdGlvbnMiLCJtZXRhZGF0YSIsIm1TZXR0aW5ncyIsIm1ldGFkYXRhQWdncmVnYXRpb25zIiwiZ2V0QWxsQWdncmVnYXRpb25zIiwiZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSIsImdldERlZmF1bHRBZ2dyZWdhdGlvbk5hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsInJlc3VsdGluZ1BhcnNlIiwiQmluZGluZ1BhcnNlciIsImNvbXBsZXhQYXJzZXIiLCJwYXRoIiwibW9kZWwiLCJmYWN0b3J5IiwidGVtcGxhdGUiLCJwcm9jZXNzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIiwic2V0dGluZ3MiLCJzZXR0aW5nc0tleSIsImJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiIsImFsbFByb3BlcnRpZXMiLCJpc0NvbnN0YW50IiwiY29tcGlsZUNvbnN0YW50IiwiY2FsbCIsImlzUGF0aEluTW9kZWxFeHByZXNzaW9uIiwibW9kZWxOYW1lIiwiY29tcGlsZUV4cHJlc3Npb24iLCJwcm9jZXNzU3RyaW5nUHJvcGVydHkiLCJ2YWx1ZSIsImFsbEV2ZW50cyIsInN0YXJ0c1dpdGgiLCJMb2ciLCJlcnJvciIsImdldE5hbWUiLCJwcm9wZXJ0eVR5cGUiLCJnZXRUeXBlIiwiRGF0YVR5cGUiLCJpbmNsdWRlcyIsInBhcnNlVmFsdWUiLCJwcm9jZXNzT2JqZWN0UHJvcGVydHkiLCJsYXRlUHJvcGVydGllcyIsInRoZW4iLCJfX2JpbmRpbmdJbmZvIiwicHJvY2Vzc1Byb3BlcnRpZXMiLCJnZXRBbGxFdmVudHMiLCJnZXRBbGxQcm9wZXJ0aWVzIiwiaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24iLCJwcm9jZXNzQ29tbWFuZCIsImNvbW1hbmRQcm9wZXJ0eSIsImNvbW1hbmQiLCJldmVudE5hbWUiLCJzcGxpdCIsImV2ZW50IiwibmFtZSIsIkV2ZW50SGFuZGxlclJlc29sdmVyIiwicmVzb2x2ZUV2ZW50SGFuZGxlciIsImpzeENvbnRyb2wiLCJDb250cm9sVHlwZSIsImtleSIsImpzeENvbnRleHQiLCJ0YXJnZXRDb250cm9sIiwiaXNGcmFnbWVudCIsImNsYXNzRGVmIiwiY2xhc3MiLCJyZWZEZWYiLCJyZWYiLCJiaW5kaW5nRGVmIiwiYmluZGluZyIsImZsRGVsZWdhdGUiLCJkdERlc2lnbnRpbWUiLCJ0YXJnZXRDb250cm9sSW5zdGFuY2UiLCJhZGRTdHlsZUNsYXNzIiwic2V0Q3VycmVudCIsImN1c3RvbVNldHRpbmdzIiwiZGF0YSIsImRlbGVnYXRlIiwiZGVzaWdudGltZSIsImxlbmd0aCIsImJpbmRpbmdJbmZvIiwiYmluZGluZ1BhcnNlciIsImJpbmRFbGVtZW50IiwicGFyYW1ldGVycyIsImJpbmRpbmdEZWZLZXkiLCJsYXRlUHJvcGVydGllc0tleSIsInNldFByb3BlcnR5IiwiY2F0Y2giLCJjb250cm9sVHlwZUZuIiwiVGV4dCIsInRleHQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbImpzeC1jb250cm9sLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGNvbXBpbGVDb25zdGFudCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRpc0NvbnN0YW50LFxuXHRpc1BhdGhJbk1vZGVsRXhwcmVzc2lvblxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ0luZm9Ib2xkZXIsIE5vbkFic3RyYWN0Q2xhc3MgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xQcm9wZXJ0aWVzLCBKU1hDb250ZXh0LCBOb25Db250cm9sUHJvcGVydGllcywgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgRGF0YVR5cGUgZnJvbSBcInNhcC91aS9iYXNlL0RhdGFUeXBlXCI7XG5pbXBvcnQgeyBiaW5kaW5nUGFyc2VyIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3RNZXRhZGF0YSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdE1ldGFkYXRhXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIEVsZW1lbnQsIGRlZmF1bHQgYXMgVUk1RWxlbWVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgRXZlbnRIYW5kbGVyUmVzb2x2ZXIgZnJvbSBcInNhcC91aS9jb3JlL212Yy9FdmVudEhhbmRsZXJSZXNvbHZlclwiO1xuXG5jb25zdCBGTF9ERUxFR0FURSA9IFwiZmw6ZGVsZWdhdGVcIjtcbmNvbnN0IENPUkVfUkVRVUlSRSA9IFwiY29yZTpyZXF1aXJlXCI7XG5jb25zdCBEVF9ERVNJR05USU1FID0gXCJkdDpkZXNpZ250aW1lXCI7XG5jb25zdCBhZGRDaGlsZEFnZ3JlZ2F0aW9uID0gZnVuY3Rpb24gKFxuXHRhZ2dyZWdhdGlvbkNoaWxkcmVuOiBSZWNvcmQ8c3RyaW5nLCAoc3RyaW5nIHwgVUk1RWxlbWVudClbXT4sXG5cdGFnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nLFxuXHRjaGlsZD86IHN0cmluZyB8IFVJNUVsZW1lbnQgfCBVSTVFbGVtZW50W11cbik6IHZvaWQge1xuXHRpZiAoY2hpbGQgPT09IG51bGwgfHwgY2hpbGQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgY2hpbGQgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0aWYgKCFhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0pIHtcblx0XHRhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0gPSBbXTtcblx0fVxuXHRpZiAoaXNDaGlsZEFuRWxlbWVudChjaGlsZCkpIHtcblx0XHRhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0ucHVzaChjaGlsZCk7XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjaGlsZCkpIHtcblx0XHRjaGlsZC5mb3JFYWNoKChzdWJDaGlsZCkgPT4ge1xuXHRcdFx0YWRkQ2hpbGRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbkNoaWxkcmVuLCBhZ2dyZWdhdGlvbk5hbWUsIHN1YkNoaWxkKTtcblx0XHR9KTtcblx0fSBlbHNlIGlmICh0eXBlb2YgY2hpbGQgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXSA9IGNoaWxkO1xuXHR9IGVsc2Uge1xuXHRcdE9iamVjdC5rZXlzKGNoaWxkKS5mb3JFYWNoKChjaGlsZEtleSkgPT4ge1xuXHRcdFx0YWRkQ2hpbGRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbkNoaWxkcmVuLCBjaGlsZEtleSwgY2hpbGRbY2hpbGRLZXldKTtcblx0XHR9KTtcblx0fVxufTtcbmNvbnN0IGlzQ2hpbGRBbkVsZW1lbnQgPSBmdW5jdGlvbiAoY2hpbGRyZW4/OiB1bmtub3duKTogY2hpbGRyZW4gaXMgRWxlbWVudCB7XG5cdHJldHVybiAoY2hpbGRyZW4gYXMgRWxlbWVudCk/LmlzQT8uKFwic2FwLnVpLmNvcmUuRWxlbWVudFwiKTtcbn07XG5jb25zdCBpc0FDb250cm9sID0gZnVuY3Rpb24gKGNoaWxkcmVuPzogdHlwZW9mIENvbnRyb2wgfCBGdW5jdGlvbik6IGNoaWxkcmVuIGlzIE5vbkFic3RyYWN0Q2xhc3M8Q29udHJvbD4ge1xuXHRyZXR1cm4gISEoY2hpbGRyZW4gYXMgdHlwZW9mIENvbnRyb2wpPy5nZXRNZXRhZGF0YTtcbn07XG5cbmZ1bmN0aW9uIHByb2Nlc3NBZ2dyZWdhdGlvbnMobWV0YWRhdGE6IE1hbmFnZWRPYmplY3RNZXRhZGF0YSwgbVNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuXHRjb25zdCBtZXRhZGF0YUFnZ3JlZ2F0aW9ucyA9IG1ldGFkYXRhLmdldEFsbEFnZ3JlZ2F0aW9ucygpO1xuXHRjb25zdCBkZWZhdWx0QWdncmVnYXRpb25OYW1lID0gbWV0YWRhdGEuZ2V0RGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSgpO1xuXHRjb25zdCBhZ2dyZWdhdGlvbkNoaWxkcmVuOiBSZWNvcmQ8c3RyaW5nLCAoc3RyaW5nIHwgVUk1RWxlbWVudClbXT4gPSB7fTtcblx0YWRkQ2hpbGRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbkNoaWxkcmVuLCBkZWZhdWx0QWdncmVnYXRpb25OYW1lLCBtU2V0dGluZ3MuY2hpbGRyZW4gYXMgc3RyaW5nIHwgVUk1RWxlbWVudCB8IFVJNUVsZW1lbnRbXSk7XG5cdGRlbGV0ZSBtU2V0dGluZ3MuY2hpbGRyZW47XG5cdC8vIGZpbmQgb3V0IHdoaWNoIGFnZ3JlZ2F0aW9uIGFyZSBib3VuZCAoYm90aCBpbiBjaGlsZHJlbiBhbmQgZGlyZWN0bHkgdW5kZXIgaXQpXG5cdE9iamVjdC5rZXlzKG1ldGFkYXRhQWdncmVnYXRpb25zKS5mb3JFYWNoKChhZ2dyZWdhdGlvbk5hbWUpID0+IHtcblx0XHRpZiAoYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChtU2V0dGluZ3MuaGFzT3duUHJvcGVydHkoYWdncmVnYXRpb25OYW1lKSkge1xuXHRcdFx0XHRpZiAodHlwZW9mIG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0aW5nUGFyc2UgPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIobVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0pO1xuXHRcdFx0XHRcdGlmIChyZXN1bHRpbmdQYXJzZSkge1xuXHRcdFx0XHRcdFx0bVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gPSB7XG5cdFx0XHRcdFx0XHRcdHBhdGg6IHJlc3VsdGluZ1BhcnNlLnBhdGgsXG5cdFx0XHRcdFx0XHRcdG1vZGVsOiByZXN1bHRpbmdQYXJzZS5tb2RlbFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gPSB7XG5cdFx0XHRcdFx0XHRcdHBhdGg6IG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodHlwZW9mIGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdFx0KG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdIGFzIHsgZmFjdG9yeTogRnVuY3Rpb24gfSkuZmFjdG9yeSA9IGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bXG5cdFx0XHRcdFx0XHRhZ2dyZWdhdGlvbk5hbWVcblx0XHRcdFx0XHRdIGFzIHVua25vd24gYXMgRnVuY3Rpb247XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0KG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdIGFzIHsgdGVtcGxhdGU6IHN0cmluZyB8IFVJNUVsZW1lbnQgfSkudGVtcGxhdGUgPSBhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV1bMF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdID0gYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIGEgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb24gcHJvcGVydHkgZm9yIGZ1bmN0aW9uIHByb2Nlc3NQcm9wZXJ0aWVzXG4gKlxuICogSWYgdGhlIHByb3BlcnR5IGlzIGEgY29uc3RhbnQsIGl0IGNvbXBpbGVzIGl0IGFzIGEgY29uc3RhbnQuIElmIHRoZSBwcm9wZXJ0eSBpcyBhbiBhZ2dyZWdhdGlvbixcbiAqIGl0IGNvbXBpbGVzIHRoZSBleHByZXNzaW9uIGFzIGFuIG9iamVjdC4gT3RoZXJ3aXNlLCBpdCBjb21waWxlcyB0aGUgZXhwcmVzc2lvbiBub3JtYWxseS5cbiAqIEBwYXJhbSBzZXR0aW5ncyBUaGUgc2V0dGluZ3Mgb2YgdGhlIGNvbnRyb2xcbiAqIEBwYXJhbSBzZXR0aW5nc0tleSBUaGUga2V5IG9mIHRoZSBzZXR0aW5nIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiBUaGUgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb24gdG8gcHJvY2Vzc1xuICogQHBhcmFtIGFsbFByb3BlcnRpZXMgQWxsIHByb3BlcnRpZXMgb2YgdGhlIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbihcblx0c2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRzZXR0aW5nc0tleToga2V5b2YgdHlwZW9mIHNldHRpbmdzLFxuXHRiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPixcblx0YWxsUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IHZvaWQge1xuXHRpZiAoaXNDb25zdGFudChiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24pKSB7XG5cdFx0c2V0dGluZ3Nbc2V0dGluZ3NLZXldID0gY29tcGlsZUNvbnN0YW50KGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgZmFsc2UsIHRydWUsIHRydWUpO1xuXHR9IGVsc2UgaWYgKCFPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChhbGxQcm9wZXJ0aWVzLCBzZXR0aW5nc0tleSkpIHtcblx0XHQvLyBBZ2dyZWdhdGlvbiBjYXNlIC0gd2UgbmVlZCB0byBjb21waWxlIHRoZSBleHByZXNzaW9uIGJ1dCBhcyBhbiBvYmplY3Rcblx0XHRpZiAoaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24oYmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKSkge1xuXHRcdFx0c2V0dGluZ3Nbc2V0dGluZ3NLZXldID0geyBwYXRoOiBiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ucGF0aCwgbW9kZWw6IGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbi5tb2RlbE5hbWUgfTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0c2V0dGluZ3Nbc2V0dGluZ3NLZXldID0gY29tcGlsZUV4cHJlc3Npb24oYmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKTtcblx0fVxufVxuXG4vKipcbiAqIFByb2Nlc3NlcyBhIHN0cmluZyBwcm9wZXJ0eSBmb3IgZnVuY3Rpb24gcHJvY2Vzc1Byb3BlcnRpZXNcbiAqXG4gKiBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGEgYmluZGluZyBleHByZXNzaW9uIGFuZCBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0LFxuICogaXQgcGFyc2VzIHRoZSB2YWx1ZSB0byBwcm92aWRlIHRoZSBleHBlY3RlZCBmb3JtYXQuIElmIHRoZSBwcm9wZXJ0eSBpcyBhbiBldmVudCBoYW5kbGVyLFxuICogaXQgbG9ncyBhbiBlcnJvci5cbiAqIEBwYXJhbSBzZXR0aW5ncyBUaGUgc2V0dGluZ3Mgb2YgdGhlIGNvbnRyb2xcbiAqIEBwYXJhbSBzZXR0aW5nc0tleSBUaGUga2V5IG9mIHRoZSBzZXR0aW5nIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHZhbHVlIFRoZSBzdHJpbmcgdmFsdWUgdG8gcHJvY2Vzc1xuICogQHBhcmFtIGFsbEV2ZW50cyBBbGwgZXZlbnRzIG9mIHRoZSBjb250cm9sXG4gKiBAcGFyYW0gYWxsUHJvcGVydGllcyBBbGwgcHJvcGVydGllcyBvZiB0aGUgY29udHJvbFxuICogQHBhcmFtIG1ldGFkYXRhIE1ldGFkYXRhIG9mIHRoZSBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NTdHJpbmdQcm9wZXJ0eShcblx0c2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRzZXR0aW5nc0tleToga2V5b2YgdHlwZW9mIHNldHRpbmdzLFxuXHR2YWx1ZTogc3RyaW5nLFxuXHRhbGxFdmVudHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRhbGxQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0bWV0YWRhdGE6IE1hbmFnZWRPYmplY3RNZXRhZGF0YVxuKTogdm9pZCB7XG5cdGlmICghdmFsdWUuc3RhcnRzV2l0aChcIntcIikpIHtcblx0XHRpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoYWxsRXZlbnRzLCBzZXR0aW5nc0tleSkpIHtcblx0XHRcdExvZy5lcnJvcihgRXZlbnQgaGFuZGxlcnMgY2Fubm90IGJlIHNldCBhcyBzdHJpbmcgaW4gSlNYLCAke3NldHRpbmdzS2V5fSBpbiAke21ldGFkYXRhLmdldE5hbWUoKX1gKTtcblx0XHR9XG5cdFx0Y29uc3QgcHJvcGVydHlUeXBlID0gKGFsbFByb3BlcnRpZXNbc2V0dGluZ3NLZXldIGFzIHsgZ2V0VHlwZT86IEZ1bmN0aW9uIH0pPy5nZXRUeXBlPy4oKTtcblx0XHRpZiAocHJvcGVydHlUeXBlICYmIHByb3BlcnR5VHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlICYmIFtcImJvb2xlYW5cIiwgXCJpbnRcIiwgXCJmbG9hdFwiXS5pbmNsdWRlcyhwcm9wZXJ0eVR5cGUuZ2V0TmFtZSgpKSkge1xuXHRcdFx0c2V0dGluZ3Nbc2V0dGluZ3NLZXldID0gcHJvcGVydHlUeXBlLnBhcnNlVmFsdWUodmFsdWUpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSB2YWx1ZTtcblx0fVxufVxuXG4vKipcbiAqIFByb2Nlc3NlcyBhbiBvYmplY3QgcHJvcGVydHkgZm9yIGZ1bmN0aW9uIHByb2Nlc3NQcm9wZXJ0aWVzLlxuICpcbiAqIElmIHRoZSBwcm9wZXJ0eSBpcyBhIHByb21pc2UsIGl0IGFkZHMgaXQgdG8gdGhlIGxhdGUgcHJvcGVydGllcyBtYXAuIElmIHRoZSBwcm9wZXJ0eSBpcyBhIGJpbmRpbmcgaW5mbyBob2xkZXIsXG4gKiBpdCBzZXRzIHRoZSBiaW5kaW5nIGluZm8gdG8gdGhlIHNldHRpbmdzLlxuICogQHBhcmFtIHNldHRpbmdzIFRoZSBzZXR0aW5ncyBvZiB0aGUgY29udHJvbFxuICogQHBhcmFtIHNldHRpbmdzS2V5IFRoZSBrZXkgb2YgdGhlIHNldHRpbmcgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0gdmFsdWUgVGhlIG9iamVjdCB2YWx1ZSB0byBwcm9jZXNzXG4gKiBAcGFyYW0gbGF0ZVByb3BlcnRpZXMgQSBtYXAgb2YgdGhlIGNvbnRyb2wncyBsYXRlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc09iamVjdFByb3BlcnR5KFxuXHRzZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdHNldHRpbmdzS2V5OiBrZXlvZiB0eXBlb2Ygc2V0dGluZ3MsXG5cdHZhbHVlOiB1bmtub3duLFxuXHRsYXRlUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgUHJvbWlzZTx1bmtub3duPj5cbik6IHZvaWQge1xuXHRpZiAoKHZhbHVlIGFzIFByb21pc2U8dW5rbm93bj4pLnRoZW4pIHtcblx0XHRsYXRlUHJvcGVydGllc1tzZXR0aW5nc0tleV0gPSB2YWx1ZSBhcyBQcm9taXNlPHVua25vd24+O1xuXHRcdGRlbGV0ZSBzZXR0aW5nc1tzZXR0aW5nc0tleV07XG5cdH0gZWxzZSBpZiAoKHZhbHVlIGFzIEJpbmRpbmdJbmZvSG9sZGVyPHVua25vd24+KS5fX2JpbmRpbmdJbmZvKSB7XG5cdFx0c2V0dGluZ3Nbc2V0dGluZ3NLZXldID0gKHZhbHVlIGFzIEJpbmRpbmdJbmZvSG9sZGVyPHVua25vd24+KS5fX2JpbmRpbmdJbmZvO1xuXHR9XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSBwcm9wZXJ0aWVzLlxuICpcbiAqIElmIHRoZSBwcm9wZXJ0eSBpcyBhIGJpbmRpbmdUb29sa2l0IGV4cHJlc3Npb24gd2UgbmVlZCB0byBjb21waWxlIGl0LlxuICogRWxzZSBpZiB0aGUgcHJvcGVydHkgaXMgc2V0IGFzIHN0cmluZyAoY29tcGlsZWQgYmluZGluZyBleHByZXNzaW9uIHJldHVybnMgc3RyaW5nIGJ5IGRlZmF1bHQgZXZlbiBpZiBpdCdzIGEgYm9vbGVhbiwgaW50LCBldGMuKSBhbmQgaXQgZG9lc24ndCBtYXRjaCB3aXRoIGV4cGVjdGVkXG4gKiBmb3JtYXQgdGhlIHZhbHVlIGlzIHBhcnNlZCB0byBwcm92aWRlIGV4cGVjdGVkIGZvcm1hdC5cbiAqIEBwYXJhbSBtZXRhZGF0YSBNZXRhZGF0YSBvZiB0aGUgY29udHJvbFxuICogQHBhcmFtIHNldHRpbmdzIFNldHRpbmdzIG9mIHRoZSBjb250cm9sXG4gKiBAcmV0dXJucyBBIG1hcCBvZiBsYXRlIHByb3BlcnRpZXMgdGhhdCBuZWVkIHRvIGJlIGF3YWl0ZWQgYWZ0ZXIgdGhlIGNvbnRyb2wgaXMgY3JlYXRlZFxuICovXG5mdW5jdGlvbiBwcm9jZXNzUHJvcGVydGllcyhtZXRhZGF0YTogTWFuYWdlZE9iamVjdE1ldGFkYXRhLCBzZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCBQcm9taXNlPHVua25vd24+PiB7XG5cdGxldCBzZXR0aW5nc0tleToga2V5b2YgdHlwZW9mIHNldHRpbmdzO1xuXHRjb25zdCBsYXRlUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgUHJvbWlzZTx1bmtub3duPj4gPSB7fTtcblx0Y29uc3QgYWxsRXZlbnRzID0gbWV0YWRhdGEuZ2V0QWxsRXZlbnRzKCk7XG5cdGNvbnN0IGFsbFByb3BlcnRpZXMgPSBtZXRhZGF0YS5nZXRBbGxQcm9wZXJ0aWVzKCk7XG5cblx0Zm9yIChzZXR0aW5nc0tleSBpbiBzZXR0aW5ncykge1xuXHRcdGNvbnN0IHZhbHVlID0gc2V0dGluZ3Nbc2V0dGluZ3NLZXldO1xuXHRcdGlmIChpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbih2YWx1ZSkpIHtcblx0XHRcdHByb2Nlc3NCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24oc2V0dGluZ3MsIHNldHRpbmdzS2V5LCB2YWx1ZSwgYWxsUHJvcGVydGllcyk7XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdHByb2Nlc3NPYmplY3RQcm9wZXJ0eShzZXR0aW5ncywgc2V0dGluZ3NLZXksIHZhbHVlLCBsYXRlUHJvcGVydGllcyk7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHByb2Nlc3NTdHJpbmdQcm9wZXJ0eShzZXR0aW5ncywgc2V0dGluZ3NLZXksIHZhbHVlLCBhbGxFdmVudHMsIGFsbFByb3BlcnRpZXMsIG1ldGFkYXRhKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGRlbGV0ZSBzZXR0aW5nc1tzZXR0aW5nc0tleV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBsYXRlUHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIGNvbW1hbmQuXG4gKlxuICogUmVzb2x2ZXMgdGhlIGNvbW1hbmQgc2V0IG9uIHRoZSBjb250cm9sIHZpYSB0aGUgaW50cmluc2ljIGNsYXNzIGF0dHJpYnV0ZSBcImpzeDpjb21tYW5kXCIuXG4gKiBJZiBubyBjb21tYW5kIGhhcyBiZWVuIHNldCBvciB0aGUgdGFyZ2V0ZWQgZXZlbnQgZG9lc24ndCBleGlzdCwgbm8gY29uZmlndXJhdGlvbiBpcyBzZXQuXG4gKiBAcGFyYW0gbWV0YWRhdGEgTWV0YWRhdGEgb2YgdGhlIGNvbnRyb2xcbiAqIEBwYXJhbSBzZXR0aW5ncyBTZXR0aW5ncyBvZiB0aGUgY29udHJvbFxuICovXG5mdW5jdGlvbiBwcm9jZXNzQ29tbWFuZChtZXRhZGF0YTogTWFuYWdlZE9iamVjdE1ldGFkYXRhLCBzZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcblx0Y29uc3QgY29tbWFuZFByb3BlcnR5ID0gc2V0dGluZ3NbXCJqc3g6Y29tbWFuZFwiXTtcblx0aWYgKGNvbW1hbmRQcm9wZXJ0eSkge1xuXHRcdGNvbnN0IFtjb21tYW5kLCBldmVudE5hbWVdID0gKGNvbW1hbmRQcm9wZXJ0eSBhcyBzdHJpbmcpLnNwbGl0KFwifFwiKTtcblx0XHRjb25zdCBldmVudCA9IG1ldGFkYXRhLmdldEFsbEV2ZW50cygpW2V2ZW50TmFtZV07XG5cdFx0aWYgKGV2ZW50ICYmIGNvbW1hbmQuc3RhcnRzV2l0aChcImNtZDpcIikpIHtcblx0XHRcdHNldHRpbmdzW2V2ZW50Lm5hbWVdID0gRXZlbnRIYW5kbGVyUmVzb2x2ZXIucmVzb2x2ZUV2ZW50SGFuZGxlcihjb21tYW5kKTtcblx0XHR9XG5cdH1cblx0ZGVsZXRlIHNldHRpbmdzW1wianN4OmNvbW1hbmRcIl07XG59XG5cbmNvbnN0IGpzeENvbnRyb2wgPSBmdW5jdGlvbiA8VCBleHRlbmRzIEVsZW1lbnQ+KFxuXHRDb250cm9sVHlwZTogTm9uQWJzdHJhY3RDbGFzczxDb250cm9sPiB8IEZ1bmN0aW9uLFxuXHRzZXR0aW5nczogTm9uQ29udHJvbFByb3BlcnRpZXM8VD4gJiB7XG5cdFx0a2V5OiBzdHJpbmc7XG5cdFx0Y2hpbGRyZW4/OiBFbGVtZW50IHwgQ29udHJvbFByb3BlcnRpZXM8VD47XG5cdFx0cmVmPzogUmVmPFQ+O1xuXHRcdGJpbmRpbmc/OiBzdHJpbmc7XG5cdFx0Y2xhc3M/OiBzdHJpbmc7XG5cdFx0W0ZMX0RFTEVHQVRFXT86IHN0cmluZztcblx0XHRbRFRfREVTSUdOVElNRV0/OiBzdHJpbmc7XG5cdFx0W0NPUkVfUkVRVUlSRV0/OiBzdHJpbmc7XG5cdH0sXG5cdGtleTogc3RyaW5nLFxuXHRqc3hDb250ZXh0OiBKU1hDb250ZXh0XG4pOiBDb250cm9sIHwgQ29udHJvbFtdIHwgdW5kZWZpbmVkIHtcblx0bGV0IHRhcmdldENvbnRyb2w6IENvbnRyb2wgfCBDb250cm9sW10gfCB1bmRlZmluZWQ7XG5cblx0aWYgKChDb250cm9sVHlwZSBhcyB7IGlzRnJhZ21lbnQ/OiBib29sZWFuIH0pPy5pc0ZyYWdtZW50KSB7XG5cdFx0dGFyZ2V0Q29udHJvbCA9IHNldHRpbmdzLmNoaWxkcmVuIGFzIENvbnRyb2wgfCBDb250cm9sW107XG5cdH0gZWxzZSBpZiAoaXNBQ29udHJvbChDb250cm9sVHlwZSkpIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IENvbnRyb2xUeXBlLmdldE1ldGFkYXRhKCk7XG5cdFx0aWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzZXR0aW5nc1tcImtleVwiXSA9IGtleTtcblx0XHR9XG5cdFx0Y29uc3QgbGF0ZVByb3BlcnRpZXMgPSBwcm9jZXNzUHJvcGVydGllcyhtZXRhZGF0YSwgc2V0dGluZ3MpO1xuXHRcdHByb2Nlc3NDb21tYW5kKG1ldGFkYXRhLCBzZXR0aW5ncyk7XG5cdFx0cHJvY2Vzc0FnZ3JlZ2F0aW9ucyhtZXRhZGF0YSwgc2V0dGluZ3MpO1xuXHRcdGNvbnN0IGNsYXNzRGVmID0gc2V0dGluZ3MuY2xhc3M7XG5cdFx0Y29uc3QgcmVmRGVmID0gc2V0dGluZ3MucmVmO1xuXHRcdGNvbnN0IGJpbmRpbmdEZWYgPSBzZXR0aW5ncy5iaW5kaW5nO1xuXHRcdGNvbnN0IGZsRGVsZWdhdGUgPSBzZXR0aW5nc1tGTF9ERUxFR0FURV07XG5cdFx0Y29uc3QgZHREZXNpZ250aW1lID0gc2V0dGluZ3NbRFRfREVTSUdOVElNRV07XG5cdFx0ZGVsZXRlIHNldHRpbmdzLnJlZjtcblx0XHRkZWxldGUgc2V0dGluZ3MuY2xhc3M7XG5cdFx0ZGVsZXRlIHNldHRpbmdzLmJpbmRpbmc7XG5cdFx0ZGVsZXRlIHNldHRpbmdzW0ZMX0RFTEVHQVRFXTtcblx0XHRkZWxldGUgc2V0dGluZ3NbRFRfREVTSUdOVElNRV07XG5cdFx0ZGVsZXRlIHNldHRpbmdzW0NPUkVfUkVRVUlSRV07IC8vIENvcmUgcmVxdWlyZSBpcyBub3QgdXNlZnVsIGluIGNvbnRyb2wgbW9kZVxuXHRcdGNvbnN0IHRhcmdldENvbnRyb2xJbnN0YW5jZSA9IG5ldyBDb250cm9sVHlwZShzZXR0aW5ncyBhcyAkQ29udHJvbFNldHRpbmdzKTtcblx0XHRpZiAoY2xhc3NEZWYpIHtcblx0XHRcdHRhcmdldENvbnRyb2xJbnN0YW5jZS5hZGRTdHlsZUNsYXNzKGNsYXNzRGVmKTtcblx0XHR9XG5cdFx0aWYgKHJlZkRlZikge1xuXHRcdFx0cmVmRGVmLnNldEN1cnJlbnQodGFyZ2V0Q29udHJvbEluc3RhbmNlIGFzIHVua25vd24gYXMgVCk7XG5cdFx0fVxuXHRcdGNvbnN0IGN1c3RvbVNldHRpbmdzID0gdGFyZ2V0Q29udHJvbEluc3RhbmNlLmRhdGEoXCJzYXAtdWktY3VzdG9tLXNldHRpbmdzXCIpID8/IHt9O1xuXHRcdGlmIChmbERlbGVnYXRlKSB7XG5cdFx0XHRjdXN0b21TZXR0aW5nc1tcInNhcC51aS5mbFwiXSA/Pz0ge307XG5cdFx0XHRjdXN0b21TZXR0aW5nc1tcInNhcC51aS5mbFwiXS5kZWxlZ2F0ZSA9IGZsRGVsZWdhdGU7XG5cdFx0fVxuXHRcdGlmIChkdERlc2lnbnRpbWUpIHtcblx0XHRcdGN1c3RvbVNldHRpbmdzW1wic2FwLnVpLmR0XCJdID8/PSB7fTtcblx0XHRcdGN1c3RvbVNldHRpbmdzW1wic2FwLnVpLmR0XCJdLmRlc2lnbnRpbWUgPSBkdERlc2lnbnRpbWU7XG5cdFx0fVxuXHRcdGlmIChPYmplY3Qua2V5cyhjdXN0b21TZXR0aW5ncykubGVuZ3RoID4gMCkge1xuXHRcdFx0dGFyZ2V0Q29udHJvbEluc3RhbmNlLmRhdGEoXCJzYXAtdWktY3VzdG9tLXNldHRpbmdzXCIsIGN1c3RvbVNldHRpbmdzKTtcblx0XHR9XG5cblx0XHRpZiAoYmluZGluZ0RlZikge1xuXHRcdFx0aWYgKHR5cGVvZiBiaW5kaW5nRGVmID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGNvbnN0IGJpbmRpbmdJbmZvID0gYmluZGluZ1BhcnNlcihiaW5kaW5nRGVmKTtcblx0XHRcdFx0aWYgKGJpbmRpbmdJbmZvKSB7XG5cdFx0XHRcdFx0dGFyZ2V0Q29udHJvbEluc3RhbmNlLmJpbmRFbGVtZW50KHtcblx0XHRcdFx0XHRcdG1vZGVsOiBiaW5kaW5nSW5mby5tb2RlbCA/PyB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRwYXRoOiBiaW5kaW5nSW5mby5wYXRoLFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyczogYmluZGluZ0luZm8ucGFyYW1ldGVycyA/PyB1bmRlZmluZWRcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0YXJnZXRDb250cm9sSW5zdGFuY2UuYmluZEVsZW1lbnQoYmluZGluZ0RlZik7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFdlIGNvbnNpZGVyIGl0J3MgYW4gb2JqZWN0XG5cdFx0XHRcdE9iamVjdC5rZXlzKGJpbmRpbmdEZWYpLmZvckVhY2goKGJpbmRpbmdEZWZLZXkpID0+IHtcblx0XHRcdFx0XHR0YXJnZXRDb250cm9sSW5zdGFuY2UuYmluZEVsZW1lbnQoeyBtb2RlbDogYmluZGluZ0RlZktleSwgcGF0aDogYmluZGluZ0RlZltiaW5kaW5nRGVmS2V5XSB9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgbGF0ZVByb3BlcnRpZXNLZXkgaW4gbGF0ZVByb3BlcnRpZXMpIHtcblx0XHRcdGxhdGVQcm9wZXJ0aWVzW2xhdGVQcm9wZXJ0aWVzS2V5XVxuXHRcdFx0XHQudGhlbigodmFsdWUpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGFyZ2V0Q29udHJvbEluc3RhbmNlLnNldFByb3BlcnR5KGxhdGVQcm9wZXJ0aWVzS2V5LCB2YWx1ZSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYENvdWxkbid0IHNldCBwcm9wZXJ0eSAke2xhdGVQcm9wZXJ0aWVzS2V5fSBvbiAke0NvbnRyb2xUeXBlLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfWAsIGVycm9yLCBcImpzeENvbnRyb2xcIik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0XHR0YXJnZXRDb250cm9sID0gdGFyZ2V0Q29udHJvbEluc3RhbmNlO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBDb250cm9sVHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0Y29uc3QgY29udHJvbFR5cGVGbiA9IENvbnRyb2xUeXBlO1xuXHRcdHRhcmdldENvbnRyb2wgPSBjb250cm9sVHlwZUZuKHNldHRpbmdzIGFzICRDb250cm9sU2V0dGluZ3MpO1xuXHR9IGVsc2Uge1xuXHRcdHRhcmdldENvbnRyb2wgPSBuZXcgVGV4dCh7IHRleHQ6IFwiTWlzc2luZyBjb21wb25lbnQgXCIgKyAoQ29udHJvbFR5cGUgYXMgc3RyaW5nKSB9KTtcblx0fVxuXG5cdHJldHVy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
|
|
@@ -9,9 +9,8 @@ import {
|
|
|
9
9
|
} from "sap/fe/base/BindingToolkit";
|
|
10
10
|
import type { BindingInfoHolder, NonAbstractClass } from "sap/fe/base/ClassSupport";
|
|
11
11
|
import type { ControlProperties, JSXContext, NonControlProperties, Ref } from "sap/fe/base/jsx-runtime/jsx";
|
|
12
|
-
import type BuildingBlockTemplatingBase from "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase";
|
|
13
|
-
import type RuntimeBuildingBlock from "sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlock";
|
|
14
12
|
import Text from "sap/m/Text";
|
|
13
|
+
import BindingParser from "sap/ui/base/BindingParser";
|
|
15
14
|
import DataType from "sap/ui/base/DataType";
|
|
16
15
|
import { bindingParser } from "sap/ui/base/ManagedObject";
|
|
17
16
|
import type ManagedObjectMetadata from "sap/ui/base/ManagedObjectMetadata";
|
|
@@ -66,9 +65,17 @@ function processAggregations(metadata: ManagedObjectMetadata, mSettings: Record<
|
|
|
66
65
|
if (aggregationChildren[aggregationName] !== undefined) {
|
|
67
66
|
if (mSettings.hasOwnProperty(aggregationName)) {
|
|
68
67
|
if (typeof mSettings[aggregationName] === "string") {
|
|
69
|
-
mSettings[aggregationName]
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
const resultingParse = BindingParser.complexParser(mSettings[aggregationName]);
|
|
69
|
+
if (resultingParse) {
|
|
70
|
+
mSettings[aggregationName] = {
|
|
71
|
+
path: resultingParse.path,
|
|
72
|
+
model: resultingParse.model
|
|
73
|
+
};
|
|
74
|
+
} else {
|
|
75
|
+
mSettings[aggregationName] = {
|
|
76
|
+
path: mSettings[aggregationName]
|
|
77
|
+
};
|
|
78
|
+
}
|
|
72
79
|
}
|
|
73
80
|
if (typeof aggregationChildren[aggregationName] === "function") {
|
|
74
81
|
(mSettings[aggregationName] as { factory: Function }).factory = aggregationChildren[
|
|
@@ -84,6 +91,92 @@ function processAggregations(metadata: ManagedObjectMetadata, mSettings: Record<
|
|
|
84
91
|
});
|
|
85
92
|
}
|
|
86
93
|
|
|
94
|
+
/**
|
|
95
|
+
* Processes a binding toolkit expression property for function processProperties
|
|
96
|
+
*
|
|
97
|
+
* If the property is a constant, it compiles it as a constant. If the property is an aggregation,
|
|
98
|
+
* it compiles the expression as an object. Otherwise, it compiles the expression normally.
|
|
99
|
+
* @param settings The settings of the control
|
|
100
|
+
* @param settingsKey The key of the setting being processed
|
|
101
|
+
* @param bindingToolkitExpression The binding toolkit expression to process
|
|
102
|
+
* @param allProperties All properties of the control
|
|
103
|
+
*/
|
|
104
|
+
function processBindingToolkitExpression(
|
|
105
|
+
settings: Record<string, unknown>,
|
|
106
|
+
settingsKey: keyof typeof settings,
|
|
107
|
+
bindingToolkitExpression: BindingToolkitExpression<unknown>,
|
|
108
|
+
allProperties: Record<string, unknown>
|
|
109
|
+
): void {
|
|
110
|
+
if (isConstant(bindingToolkitExpression)) {
|
|
111
|
+
settings[settingsKey] = compileConstant(bindingToolkitExpression, false, true, true);
|
|
112
|
+
} else if (!Object.hasOwnProperty.call(allProperties, settingsKey)) {
|
|
113
|
+
// Aggregation case - we need to compile the expression but as an object
|
|
114
|
+
if (isPathInModelExpression(bindingToolkitExpression)) {
|
|
115
|
+
settings[settingsKey] = { path: bindingToolkitExpression.path, model: bindingToolkitExpression.modelName };
|
|
116
|
+
}
|
|
117
|
+
} else {
|
|
118
|
+
settings[settingsKey] = compileExpression(bindingToolkitExpression);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Processes a string property for function processProperties
|
|
124
|
+
*
|
|
125
|
+
* If the property is not a binding expression and does not match the expected format,
|
|
126
|
+
* it parses the value to provide the expected format. If the property is an event handler,
|
|
127
|
+
* it logs an error.
|
|
128
|
+
* @param settings The settings of the control
|
|
129
|
+
* @param settingsKey The key of the setting being processed
|
|
130
|
+
* @param value The string value to process
|
|
131
|
+
* @param allEvents All events of the control
|
|
132
|
+
* @param allProperties All properties of the control
|
|
133
|
+
* @param metadata Metadata of the control
|
|
134
|
+
*/
|
|
135
|
+
function processStringProperty(
|
|
136
|
+
settings: Record<string, unknown>,
|
|
137
|
+
settingsKey: keyof typeof settings,
|
|
138
|
+
value: string,
|
|
139
|
+
allEvents: Record<string, unknown>,
|
|
140
|
+
allProperties: Record<string, unknown>,
|
|
141
|
+
metadata: ManagedObjectMetadata
|
|
142
|
+
): void {
|
|
143
|
+
if (!value.startsWith("{")) {
|
|
144
|
+
if (Object.hasOwnProperty.call(allEvents, settingsKey)) {
|
|
145
|
+
Log.error(`Event handlers cannot be set as string in JSX, ${settingsKey} in ${metadata.getName()}`);
|
|
146
|
+
}
|
|
147
|
+
const propertyType = (allProperties[settingsKey] as { getType?: Function })?.getType?.();
|
|
148
|
+
if (propertyType && propertyType instanceof DataType && ["boolean", "int", "float"].includes(propertyType.getName())) {
|
|
149
|
+
settings[settingsKey] = propertyType.parseValue(value);
|
|
150
|
+
}
|
|
151
|
+
} else {
|
|
152
|
+
settings[settingsKey] = value;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Processes an object property for function processProperties.
|
|
158
|
+
*
|
|
159
|
+
* If the property is a promise, it adds it to the late properties map. If the property is a binding info holder,
|
|
160
|
+
* it sets the binding info to the settings.
|
|
161
|
+
* @param settings The settings of the control
|
|
162
|
+
* @param settingsKey The key of the setting being processed
|
|
163
|
+
* @param value The object value to process
|
|
164
|
+
* @param lateProperties A map of the control's late properties
|
|
165
|
+
*/
|
|
166
|
+
function processObjectProperty(
|
|
167
|
+
settings: Record<string, unknown>,
|
|
168
|
+
settingsKey: keyof typeof settings,
|
|
169
|
+
value: unknown,
|
|
170
|
+
lateProperties: Record<string, Promise<unknown>>
|
|
171
|
+
): void {
|
|
172
|
+
if ((value as Promise<unknown>).then) {
|
|
173
|
+
lateProperties[settingsKey] = value as Promise<unknown>;
|
|
174
|
+
delete settings[settingsKey];
|
|
175
|
+
} else if ((value as BindingInfoHolder<unknown>).__bindingInfo) {
|
|
176
|
+
settings[settingsKey] = (value as BindingInfoHolder<unknown>).__bindingInfo;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
87
180
|
/**
|
|
88
181
|
* Processes the properties.
|
|
89
182
|
*
|
|
@@ -99,34 +192,17 @@ function processProperties(metadata: ManagedObjectMetadata, settings: Record<str
|
|
|
99
192
|
const lateProperties: Record<string, Promise<unknown>> = {};
|
|
100
193
|
const allEvents = metadata.getAllEvents();
|
|
101
194
|
const allProperties = metadata.getAllProperties();
|
|
195
|
+
|
|
102
196
|
for (settingsKey in settings) {
|
|
103
197
|
const value = settings[settingsKey];
|
|
104
198
|
if (isBindingToolkitExpression(value)) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
if (isPathInModelExpression(bindingToolkitExpression)) {
|
|
111
|
-
settings[settingsKey] = { path: bindingToolkitExpression.path, model: bindingToolkitExpression.modelName };
|
|
112
|
-
}
|
|
113
|
-
} else {
|
|
114
|
-
settings[settingsKey] = compileExpression(bindingToolkitExpression);
|
|
115
|
-
}
|
|
116
|
-
} else if (value !== null && typeof value === "object" && (value as Promise<unknown>).then) {
|
|
117
|
-
lateProperties[settingsKey] = value as Promise<unknown>;
|
|
118
|
-
delete settings[settingsKey];
|
|
119
|
-
} else if (typeof value === "string" && !value.startsWith("{")) {
|
|
120
|
-
const propertyType = (allProperties[settingsKey] as { getType?: Function })?.getType?.();
|
|
121
|
-
if (propertyType && propertyType instanceof DataType && ["boolean", "int", "float"].includes(propertyType.getName())) {
|
|
122
|
-
settings[settingsKey] = propertyType.parseValue(value);
|
|
123
|
-
}
|
|
124
|
-
} else if (typeof value === "object" && (value as BindingInfoHolder<unknown>).__bindingInfo) {
|
|
125
|
-
settings[settingsKey] = (value as BindingInfoHolder<unknown>).__bindingInfo;
|
|
199
|
+
processBindingToolkitExpression(settings, settingsKey, value, allProperties);
|
|
200
|
+
} else if (value !== null && typeof value === "object") {
|
|
201
|
+
processObjectProperty(settings, settingsKey, value, lateProperties);
|
|
202
|
+
} else if (typeof value === "string") {
|
|
203
|
+
processStringProperty(settings, settingsKey, value, allEvents, allProperties, metadata);
|
|
126
204
|
} else if (value === undefined) {
|
|
127
|
-
|
|
128
|
-
delete settings[settingsKey];
|
|
129
|
-
}
|
|
205
|
+
delete settings[settingsKey];
|
|
130
206
|
}
|
|
131
207
|
}
|
|
132
208
|
return lateProperties;
|
|
@@ -171,9 +247,6 @@ const jsxControl = function <T extends Element>(
|
|
|
171
247
|
|
|
172
248
|
if ((ControlType as { isFragment?: boolean })?.isFragment) {
|
|
173
249
|
targetControl = settings.children as Control | Control[];
|
|
174
|
-
} else if ((ControlType as typeof BuildingBlockTemplatingBase)?.isRuntime) {
|
|
175
|
-
const runtimeBuildingBlock = new (ControlType as typeof RuntimeBuildingBlock)(settings as unknown as $ControlSettings);
|
|
176
|
-
targetControl = runtimeBuildingBlock.getContent?.(jsxContext.view!, jsxContext.appComponent!);
|
|
177
250
|
} else if (isAControl(ControlType)) {
|
|
178
251
|
const metadata = ControlType.getMetadata();
|
|
179
252
|
if (key !== undefined) {
|
|
@@ -217,9 +290,14 @@ const jsxControl = function <T extends Element>(
|
|
|
217
290
|
if (typeof bindingDef === "string") {
|
|
218
291
|
const bindingInfo = bindingParser(bindingDef);
|
|
219
292
|
if (bindingInfo) {
|
|
220
|
-
targetControlInstance.bindElement({
|
|
293
|
+
targetControlInstance.bindElement({
|
|
294
|
+
model: bindingInfo.model ?? undefined,
|
|
295
|
+
path: bindingInfo.path,
|
|
296
|
+
parameters: bindingInfo.parameters ?? undefined
|
|
297
|
+
});
|
|
298
|
+
} else {
|
|
299
|
+
targetControlInstance.bindElement(bindingDef);
|
|
221
300
|
}
|
|
222
|
-
targetControlInstance.bindElement(bindingDef);
|
|
223
301
|
} else {
|
|
224
302
|
// We consider it's an object
|
|
225
303
|
Object.keys(bindingDef).forEach((bindingDefKey) => {
|
|
@@ -22,7 +22,7 @@ sap.ui.define(["sap/ui/core/Lib"], function (Library) {
|
|
|
22
22
|
controls: [],
|
|
23
23
|
elements: [],
|
|
24
24
|
// eslint-disable-next-line no-template-curly-in-string
|
|
25
|
-
version: "1.
|
|
25
|
+
version: "1.134.0",
|
|
26
26
|
noLibraryCSS: true
|
|
27
27
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
28
|
});
|