@sapui5/sap.fe.base 1.149.0 → 1.151.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 +141 -6
- package/src/sap/fe/base/BindingToolkit.ts +173 -4
- package/src/sap/fe/base/BuildingBlockBase.js +12 -9
- package/src/sap/fe/base/BuildingBlockBase.ts +11 -8
- package/src/sap/fe/base/ClassSupport.js +1 -31
- package/src/sap/fe/base/ClassSupport.ts +0 -30
- package/src/sap/fe/base/HookSupport.js +1 -1
- package/src/sap/fe/base/HookSupport.ts +3 -0
- package/src/sap/fe/base/library.js +1 -1
|
@@ -66,9 +66,7 @@ type BaseExpression<_T> = {
|
|
|
66
66
|
|
|
67
67
|
/**
|
|
68
68
|
* Collection of functions to support the manipulation of UI5 bindings
|
|
69
|
-
* @public
|
|
70
69
|
* @namespace
|
|
71
|
-
* @ui5-experimental-since 1.145.0
|
|
72
70
|
*/
|
|
73
71
|
export const bindingToolkitNamespace = "sap.fe.base.BindingToolkit";
|
|
74
72
|
|
|
@@ -217,8 +215,6 @@ function isActionParameter(serviceObject: unknown): serviceObject is ActionParam
|
|
|
217
215
|
|
|
218
216
|
/**
|
|
219
217
|
* A binding expression that evaluates to type T.
|
|
220
|
-
* @public
|
|
221
|
-
* @ui5-experimental-since 1.145.0
|
|
222
218
|
*/
|
|
223
219
|
export type BindingToolkitExpression<T> =
|
|
224
220
|
| UnresolvablePathExpression
|
|
@@ -822,6 +818,86 @@ export function pathInModel<TargetType extends PrimitiveType>(
|
|
|
822
818
|
};
|
|
823
819
|
}
|
|
824
820
|
|
|
821
|
+
/**
|
|
822
|
+
* Transforms a binding path from a navigation property context to its parent context.
|
|
823
|
+
*
|
|
824
|
+
* This is used to transform a binding made for a NavProp context /MainObject/NavProp1/NavProp2
|
|
825
|
+
* into a binding on the previous context /MainObject/NavProp1.
|
|
826
|
+
* @param path The path string to transform
|
|
827
|
+
* @param partnerPath The optional partner navigation property name to check against
|
|
828
|
+
* @returns A binding expression for the upper context, or unresolvableExpression if the path cannot be transformed
|
|
829
|
+
*/
|
|
830
|
+
export function getBindingPathExpressionFromPartnerNavigation(path: string, partnerPath?: string): BindingToolkitExpression<unknown> {
|
|
831
|
+
if (path.startsWith("/")) {
|
|
832
|
+
// path is absolute it can be resolved from anywhere
|
|
833
|
+
return pathInModel(path);
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
if (partnerPath && path.startsWith(partnerPath + "/")) {
|
|
837
|
+
// Remove the partner navigation path prefix
|
|
838
|
+
return pathInModel(path.substring(partnerPath.length + 1));
|
|
839
|
+
} else {
|
|
840
|
+
return unresolvableExpression;
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
/**
|
|
845
|
+
* Recursively transforms an expression from a navigation property context to its parent context.
|
|
846
|
+
*
|
|
847
|
+
* This function walks through the expression tree and transforms all PathInModel expressions
|
|
848
|
+
* that reference relative paths (non-absolute, default model) using the partner navigation property.
|
|
849
|
+
* If the resulting expression contains unresolvable parts, the fallback value is returned instead.
|
|
850
|
+
* @template T The type of the binding expression
|
|
851
|
+
* @param expression The initial binding expression to transform
|
|
852
|
+
* @param partnerNavigationPropertyName The partner navigation property name to use for transformation
|
|
853
|
+
* @param fallbackValue The value to return if the expression becomes unresolvable
|
|
854
|
+
* @returns The transformed expression or the fallback value if unresolvable
|
|
855
|
+
*/
|
|
856
|
+
export function getBindingExpressionFromUpperContext<T extends PrimitiveType>(
|
|
857
|
+
expression: BindingToolkitExpression<T>,
|
|
858
|
+
partnerNavigationPropertyName: string | undefined,
|
|
859
|
+
fallbackValue: BindingToolkitExpression<T>
|
|
860
|
+
): BindingToolkitExpression<T> {
|
|
861
|
+
if (expression._type === "Set") {
|
|
862
|
+
const newOperands = expression.operands.map((operand: BindingToolkitExpression<boolean>) =>
|
|
863
|
+
getBindingExpressionFromUpperContext(
|
|
864
|
+
operand,
|
|
865
|
+
partnerNavigationPropertyName,
|
|
866
|
+
fallbackValue as unknown as BindingToolkitExpression<boolean>
|
|
867
|
+
)
|
|
868
|
+
);
|
|
869
|
+
|
|
870
|
+
if (expression.operator === "||") {
|
|
871
|
+
return or(...(newOperands as unknown as BindingToolkitExpression<boolean>[])) as unknown as BindingToolkitExpression<T>;
|
|
872
|
+
} else {
|
|
873
|
+
return and(...(newOperands as unknown as BindingToolkitExpression<boolean>[])) as unknown as BindingToolkitExpression<T>;
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
// Transform PathInModel expressions using the partner navigation
|
|
877
|
+
const transformedExpression = transformRecursively<T, "PathInModel">(
|
|
878
|
+
expression,
|
|
879
|
+
"PathInModel",
|
|
880
|
+
(pathExpression: PathInModelExpression<T>) => {
|
|
881
|
+
// Only transform relative paths in the default model (modelName is undefined or empty)
|
|
882
|
+
if (!pathExpression.modelName || pathExpression.modelName === "") {
|
|
883
|
+
return getBindingPathExpressionFromPartnerNavigation(
|
|
884
|
+
pathExpression.path,
|
|
885
|
+
partnerNavigationPropertyName
|
|
886
|
+
) as BindingToolkitExpression<T>;
|
|
887
|
+
}
|
|
888
|
+
return pathExpression;
|
|
889
|
+
},
|
|
890
|
+
true // includeAllExpression - transform all expression types in the tree
|
|
891
|
+
);
|
|
892
|
+
|
|
893
|
+
// Check if the transformed expression contains unresolvable parts
|
|
894
|
+
if (hasUnresolvableExpression(transformedExpression)) {
|
|
895
|
+
return fallbackValue;
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
return transformedExpression;
|
|
899
|
+
}
|
|
900
|
+
|
|
825
901
|
type PlainExpressionObject = { [index: string]: BindingToolkitExpression<unknown> };
|
|
826
902
|
|
|
827
903
|
/**
|
|
@@ -2491,6 +2567,63 @@ export function concat(...inExpressions: ExpressionOrPrimitive<string>[]): Bindi
|
|
|
2491
2567
|
};
|
|
2492
2568
|
}
|
|
2493
2569
|
|
|
2570
|
+
/**
|
|
2571
|
+
* Concatenate multiple expressions with a separator.
|
|
2572
|
+
* @param separator The separator to insert between expressions
|
|
2573
|
+
* @param inExpressions Expressions to concatenate
|
|
2574
|
+
* @returns The concatenated expression
|
|
2575
|
+
*/
|
|
2576
|
+
export function concatWithSeparator(
|
|
2577
|
+
separator: string,
|
|
2578
|
+
...inExpressions: ExpressionOrPrimitive<string>[]
|
|
2579
|
+
): BindingToolkitExpression<string> {
|
|
2580
|
+
const expressions = inExpressions.map(wrapPrimitive);
|
|
2581
|
+
if (hasUnresolvableExpression(...expressions)) {
|
|
2582
|
+
return unresolvableExpression;
|
|
2583
|
+
}
|
|
2584
|
+
|
|
2585
|
+
const separatorConstant = constant(separator);
|
|
2586
|
+
|
|
2587
|
+
if (expressions.every(isConstant)) {
|
|
2588
|
+
return constant(
|
|
2589
|
+
expressions.reduce((concatenated: string, value, index) => {
|
|
2590
|
+
const constantValue = value;
|
|
2591
|
+
if (constantValue.value !== undefined && constantValue.value !== null) {
|
|
2592
|
+
const prefix = index > 0 ? separator : "";
|
|
2593
|
+
return concatenated + prefix + constantValue.value.toString();
|
|
2594
|
+
}
|
|
2595
|
+
return concatenated;
|
|
2596
|
+
}, "")
|
|
2597
|
+
);
|
|
2598
|
+
}
|
|
2599
|
+
|
|
2600
|
+
// Interleave separator constants between expressions
|
|
2601
|
+
const expressionsWithSeparators: BindingToolkitExpression<string>[] = [];
|
|
2602
|
+
expressions.forEach((expr, index) => {
|
|
2603
|
+
if (index > 0) {
|
|
2604
|
+
expressionsWithSeparators.push(separatorConstant);
|
|
2605
|
+
}
|
|
2606
|
+
expressionsWithSeparators.push(expr);
|
|
2607
|
+
});
|
|
2608
|
+
|
|
2609
|
+
if (expressionsWithSeparators.some(isComplexTypeExpression)) {
|
|
2610
|
+
let pathIdx = 0;
|
|
2611
|
+
const myConcatExpression = formatResult(expressionsWithSeparators, "._formatters.StandardFormatter#concat", undefined, true);
|
|
2612
|
+
const allParts = [];
|
|
2613
|
+
transformRecursively(myConcatExpression, "PathInModel", (constantPath: PathInModelExpression<unknown>) => {
|
|
2614
|
+
allParts.push(constantPath);
|
|
2615
|
+
return pathInModel(`$${pathIdx++}`, "$");
|
|
2616
|
+
});
|
|
2617
|
+
allParts.unshift(constant(JSON.stringify(myConcatExpression)));
|
|
2618
|
+
return formatResult(allParts, "._formatters.StandardFormatter.bind($control)#evaluateComplexExpression", undefined, true);
|
|
2619
|
+
}
|
|
2620
|
+
|
|
2621
|
+
return {
|
|
2622
|
+
_type: "Concat",
|
|
2623
|
+
expressions: expressionsWithSeparators
|
|
2624
|
+
};
|
|
2625
|
+
}
|
|
2626
|
+
|
|
2494
2627
|
type ExpressionTypeToExpression<T extends ExpressionType, V> = T extends "Constant"
|
|
2495
2628
|
? ConstantExpression<V>
|
|
2496
2629
|
: T extends "PathInModel"
|
|
@@ -2838,6 +2971,42 @@ export function wrapBindingExpression(
|
|
|
2838
2971
|
}
|
|
2839
2972
|
}
|
|
2840
2973
|
|
|
2974
|
+
/**
|
|
2975
|
+
* Resolves a binding expression by substituting path values from preloaded data.
|
|
2976
|
+
* Uses transformRecursively to replace PathInModel expressions with constants where values are available.
|
|
2977
|
+
* Only resolves paths from the default (empty) model name.
|
|
2978
|
+
* @template T The target type
|
|
2979
|
+
* @param expression The binding toolkit expression to resolve
|
|
2980
|
+
* @param preloadedValues A flat object with property paths as keys and their values
|
|
2981
|
+
* @returns The resolved expression with PathInModel expressions replaced by constants where possible
|
|
2982
|
+
*/
|
|
2983
|
+
export function resolveWithPreloadedValues<T extends PrimitiveType>(
|
|
2984
|
+
expression: ExpressionOrPrimitive<T>,
|
|
2985
|
+
preloadedValues: Record<string, unknown>
|
|
2986
|
+
): BindingToolkitExpression<T> {
|
|
2987
|
+
const expr = wrapPrimitive(expression);
|
|
2988
|
+
|
|
2989
|
+
return transformRecursively(
|
|
2990
|
+
expr,
|
|
2991
|
+
"PathInModel",
|
|
2992
|
+
(pathExpression: PathInModelExpression<unknown>) => {
|
|
2993
|
+
// Only resolve paths from the default model (empty model name)
|
|
2994
|
+
if (pathExpression.modelName && pathExpression.modelName !== "") {
|
|
2995
|
+
return pathExpression;
|
|
2996
|
+
}
|
|
2997
|
+
|
|
2998
|
+
// Check if this path is in preloaded values
|
|
2999
|
+
if (preloadedValues.hasOwnProperty(pathExpression.path)) {
|
|
3000
|
+
return constant(preloadedValues[pathExpression.path] as T);
|
|
3001
|
+
}
|
|
3002
|
+
|
|
3003
|
+
// Path not in preloaded values, return as-is
|
|
3004
|
+
return pathExpression;
|
|
3005
|
+
},
|
|
3006
|
+
true
|
|
3007
|
+
) as BindingToolkitExpression<T>;
|
|
3008
|
+
}
|
|
3009
|
+
|
|
2841
3010
|
/**
|
|
2842
3011
|
* Compile an expression into an expression binding.
|
|
2843
3012
|
* @template T The target type
|
|
@@ -149,14 +149,21 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/ui
|
|
|
149
149
|
|
|
150
150
|
/**
|
|
151
151
|
* This function (if available on the concrete control) provides the current accessibility state of the control.
|
|
152
|
-
*
|
|
152
|
+
* When the content control is not visible, null is returned so that sap.m.Table can set aria-label=""
|
|
153
|
+
* on the gridcell, preventing screen reader virtual buffer bleed-through (ACC-264.1 / WCAG 2.1 Level A).
|
|
154
|
+
* @returns The accessibility information for the control, or null (cast) when content is not visible.
|
|
153
155
|
*/;
|
|
154
156
|
_proto.getAccessibilityInfo = function getAccessibilityInfo() {
|
|
155
|
-
let accessibilityInfo = {};
|
|
156
157
|
if (this.content?.isA("sap.ui.core.Control") && this.content.getAccessibilityInfo) {
|
|
157
|
-
|
|
158
|
+
if (!this.content.getVisible()) {
|
|
159
|
+
// Content is not visible: return null (cast to preserve the type contract) so that
|
|
160
|
+
// sap.m.Table receives a falsy value and sets aria-label="" on the gridcell,
|
|
161
|
+
// preventing screen reader virtual buffer bleed-through (ACC-264.1 / WCAG 2.1 Level A).
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
return this.content.getAccessibilityInfo();
|
|
158
165
|
}
|
|
159
|
-
return
|
|
166
|
+
return {};
|
|
160
167
|
}
|
|
161
168
|
|
|
162
169
|
/**
|
|
@@ -186,8 +193,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/ui
|
|
|
186
193
|
* Shorthand for the BindingToolkit.bindState function with the current state object.
|
|
187
194
|
* @param path A property in the state object
|
|
188
195
|
* @returns The binding toolkit expression for the state
|
|
189
|
-
* @public
|
|
190
|
-
* @ui5-experimental-since 1.145.0
|
|
191
196
|
*/;
|
|
192
197
|
_proto.bindState = function bindState(path) {
|
|
193
198
|
return BindingToolkit.bindState(this.state, path);
|
|
@@ -211,8 +216,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/ui
|
|
|
211
216
|
* Framework hook for state change handling.
|
|
212
217
|
* Subclasses can override this method to react to state changes.
|
|
213
218
|
* @param _changedProps List of changed property names
|
|
214
|
-
* @public
|
|
215
|
-
* @ui5-experimental-since 1.145.0
|
|
216
219
|
*/;
|
|
217
220
|
_proto.onStateChange = async function onStateChange(_changedProps) {};
|
|
218
221
|
return BuildingBlockBase;
|
|
@@ -234,4 +237,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/ui
|
|
|
234
237
|
}), _class2)) || _class);
|
|
235
238
|
return BuildingBlockBase;
|
|
236
239
|
}, false);
|
|
237
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdWlsZGluZ0Jsb2NrQmFzZSIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwiYWdncmVnYXRpb24iLCJ0eXBlIiwibXVsdGlwbGUiLCJpc0RlZmF1bHQiLCJfZGVjMyIsImFzc29jaWF0aW9uIiwic2luZ3VsYXJOYW1lIiwiX2RlYzQiLCJkZWZpbmVTdGF0ZSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQ29udHJvbCIsInNldHRpbmdzIiwib3RoZXJzIiwic2NvcGUiLCJfdGhpcyIsImlkIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfb2xkRG9tUmVmIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJnZXRQbGFjZWhvbGRlciIsIl9ybSIsInJlbmRlciIsIm9SbSIsIm9Db250cm9sIiwiY29udGVudCIsImdldFZpc2libGUiLCJJbnZpc2libGVSZW5kZXJlciIsInJlbmRlckNvbnRyb2wiLCJzZXRCaW5kaW5nQ29udGV4dCIsImNvbnRleHQiLCJtb2RlbCIsInVuZGVmaW5lZCIsImludmFsaWRhdGUiLCJiaW5kUHJvcGVydHkiLCJuYW1lIiwiYmluZGluZ0luZm8iLCJwcm9wZXJ0eU1ldGFkYXRhIiwiZ2V0TWV0YWRhdGEiLCJnZXRQcm9wZXJ0eSIsImJpbmRhYmxlIiwiZ3JvdXAiLCJvbkFmdGVyUmVuZGVyaW5nIiwiZXZlbnQiLCJkb21SZWYiLCJnZXREb21SZWYiLCJXZWFrUmVmIiwic3VmZml4Iiwib0NvbnRlbnQiLCJkZXJlZiIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRGb2N1c0RvbVJlZiIsImVuaGFuY2VBY2Nlc3NpYmlsaXR5U3RhdGUiLCJfb0VsZW1lbnQiLCJtQXJpYVByb3BzIiwib1BhcmVudCIsImdldFBhcmVudCIsImdldEFjY2Vzc2liaWxpdHlJbmZvIiwiYWNjZXNzaWJpbGl0eUluZm8iLCJpc0EiLCJnZXRJZEZvckxhYmVsIiwiYWRkU3R5bGVDbGFzcyIsInN0eWxlQ2xhc3MiLCJyZW1vdmVTdHlsZUNsYXNzIiwiYmluZFN0YXRlIiwicGF0aCIsIkJpbmRpbmdUb29sa2l0Iiwic3RhdGUiLCJzeW5jU3RhdGVQcm9wZXJ0eSIsInByb3BOYW1lIiwic291cmNlIiwicHJvcGVydHkiLCJwcm9wQmluZGluZyIsImdldE1vZGVsIiwiU1RBVEVfTU9ERUxfTkFNRSIsImF0dGFjaENoYW5nZSIsIm9uU3RhdGVDaGFuZ2UiLCJfY2hhbmdlZFByb3BzIiwiQ29udHJvbCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQnVpbGRpbmdCbG9ja0Jhc2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIFByaW1pdGl2ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCAqIGFzIEJpbmRpbmdUb29sa2l0IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBHZW5lcmljU3RhdGUsIFByb3BlcnRpZXNPZiwgU3RhdGVPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBhc3NvY2lhdGlvbiwgZGVmaW5lU3RhdGUsIGRlZmluZVVJNUNsYXNzLCBTVEFURV9NT0RFTF9OQU1FIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgSW52aXNpYmxlUmVuZGVyZXIgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZVJlbmRlcmVyXCI7XG5pbXBvcnQgdHlwZSBSZW5kZXJNYW5hZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9SZW5kZXJNYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IEFjY2Vzc2liaWxpdHlJbmZvIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmludGVyZmFjZSBCdWlsZGluZ0Jsb2NrQmFzZTxUIGV4dGVuZHMgVUk1RWxlbWVudCA9IENvbnRyb2wsIEsgZXh0ZW5kcyBvYmplY3QgPSB7fT4ge1xuXHQvLyBGb3JjZSBhIHN0YXRlIHVwZGF0ZVxuXHRfdXBkYXRlU3RhdGUoKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBidWlsZGluZyBibG9ja3MuXG4gKiBUaGlzIGNvbnRhaW5zIHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb25hbGl0eSBvZiBoYXZpbmcgYSBjb250ZW50IGFnZ3JlZ2F0aW9uIGFuZCBoYW5kbGluZyB0aGUgcmVuZGVyaW5nIG9mIHRoZSBjb250ZW50IHdpdGhvdXQgYW4gYWN0dWFsIERPTSBlbGVtZW50Ljxici8+XG4gKiBUaGUgYnVpbGRpbmcgYmxvY2sgYWxzbyBkZWZpbmVzIGEgc3RhdGUgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gc3RvcmUgdGhlIHN0YXRlIG9mIHRoZSBidWlsZGluZyBibG9jay48YnIvPlxuICogQWNjZXNzaWJpbGl0eSBhbmQgY2xhc3NlcyBpbmZvcm1hdGlvbiBhcmUgZm9yd2FyZGVkIHRvIHRoZSBjb250ZW50IGNvbnRyb2wuPGJyLz5cbiAqIFRoaXMgY2xhc3MgaXMgbm90IG1lYW50IHRvIGJlIHVzZWQgZGlyZWN0bHksIGl0J3MgdGhlcmUgZm9yIGludGVybmFsIHVzZSBvbmx5IChhbmQgZG9jdW1lbnRhdGlvbilcbiAqIEBwdWJsaWNcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmJhc2UuQnVpbGRpbmdCbG9ja0Jhc2VcIilcbmNsYXNzIEJ1aWxkaW5nQmxvY2tCYXNlPFQgZXh0ZW5kcyBVSTVFbGVtZW50ID0gQ29udHJvbCwgSyBleHRlbmRzIG9iamVjdCA9IHt9PiBleHRlbmRzIENvbnRyb2wge1xuXHQvKipcblx0ICogT3B0aW9uYWwgY29udGVudCBvZiBnZW5lcmljIHR5cGUgVC5cblx0ICpcblx0ICogVGhpcyBwcm9wZXJ0eSBob2xkcyB0aGUgbWFpbiBkYXRhIG9yIHBheWxvYWQgZm9yIHRoZSBjb250YWluaW5nIG9iamVjdC5cblx0ICogV2hlbiB1bmRlZmluZWQsIGl0IGluZGljYXRlcyB0aGF0IG5vIGNvbnRlbnQgaGFzIGJlZW4gc2V0IG9yIGlzIGF2YWlsYWJsZS5cblx0ICogVGhlIHNwZWNpZmljIHR5cGUgYW5kIHN0cnVjdHVyZSBvZiB0aGUgY29udGVudCBkZXBlbmRzIG9uIHRoZSBnZW5lcmljIHR5cGUgcGFyYW1ldGVyIFQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLnVpLmNvcmUuRWxlbWVudFwiLCBtdWx0aXBsZTogZmFsc2UsIGlzRGVmYXVsdDogdHJ1ZSB9KVxuXHRjb250ZW50PzogVDtcblxuXHQvKipcblx0ICogQXNzb2NpYXRpb24gdG8gY29udHJvbHMgLyBJRHMgdGhhdCBsYWJlbCB0aGlzIGNvbnRyb2wgKHNlZSBXQUktQVJJQSBhdHRyaWJ1dGUgYXJpYS1sYWJlbGxlZGJ5KS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGFzc29jaWF0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5Db250cm9sXCIsIG11bHRpcGxlOiB0cnVlLCBzaW5ndWxhck5hbWU6IFwiYXJpYUxhYmVsbGVkQnlcIiB9KVxuXHRhcmlhTGFiZWxsZWRCeSE6IHN0cmluZ1tdO1xuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudCBzdGF0ZSB2YWx1ZSBvZiB0aGUgY29tcG9uZW50LlxuXHQgKlxuXHQgKiBUaGlzIHByb3BlcnR5IGhvbGRzIHRoZSBzdGF0ZSBkYXRhIG1hbmFnZWQgYnkgdGhlIGNvbXBvbmVudCwgd2l0aCB0aGUgdHlwZVxuXHQgKiBkZXRlcm1pbmVkIGJ5IHRoZSBnZW5lcmljIHBhcmFtZXRlciBLLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAZGVmaW5lU3RhdGUoKVxuXHRwcm90ZWN0ZWQgc3RhdGUhOiBTdGF0ZU9mPEs+O1xuXG5cdGdldFBsYWNlaG9sZGVyKF9ybTogUmVuZGVyTWFuYWdlcik6IHZvaWQge31cblxuXHRjb25zdHJ1Y3RvcihzZXR0aW5ncz86IHN0cmluZyB8IFByb3BlcnRpZXNPZjxCdWlsZGluZ0Jsb2NrQmFzZTxUPj4sIG90aGVycz86IFByb3BlcnRpZXNPZjxCdWlsZGluZ0Jsb2NrQmFzZTxUPj4sIHNjb3BlPzogb2JqZWN0KSB7XG5cdFx0aWYgKHR5cGVvZiBzZXR0aW5ncyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0b3RoZXJzID8/PSB7fTtcblx0XHRcdG90aGVycy5pZCA9IHNldHRpbmdzO1xuXHRcdH1cblx0XHQvLyBTY29wZSBpcyBkZWZpbmVkIGFuZCBpcyB0aGVyZSwgYnV0IHNvbWVob3cgZG9lc24ndCBhcHBlYXIgb24gYWxsIHRoZSBjaGlsZHJlbiBvZiBNYW5hZ2VkT2JqZWN0XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRzdXBlcihzZXR0aW5ncyBhcyB1bmtub3duIGFzIHN0cmluZywgb3RoZXJzLCBzY29wZSk7XG5cdH1cblxuXHRwcml2YXRlIF9vbGREb21SZWY6IFdlYWtSZWY8RWxlbWVudD4gfCBudWxsID0gbnVsbDtcblxuXHRzdGF0aWMgcmVuZGVyPFQgZXh0ZW5kcyBDb250cm9sPihvUm06IFJlbmRlck1hbmFnZXIsIG9Db250cm9sOiBCdWlsZGluZ0Jsb2NrQmFzZTxUPik6IHZvaWQge1xuXHRcdGlmICghb0NvbnRyb2wuY29udGVudCB8fCBvQ29udHJvbC5nZXRWaXNpYmxlKCkgPT09IGZhbHNlKSB7XG5cdFx0XHQvLyBJZiB0aGVyZSBpcyBubyBjb250ZW50LCB3ZSByZW5kZXIgYW4gaW52aXNpYmxlIHJlbmRlcmVyIHRvIGF2b2lkIHRoZSBjb250cm9sIGJlaW5nXG5cdFx0XHRJbnZpc2libGVSZW5kZXJlci5yZW5kZXIob1JtLCBvQ29udHJvbCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9Db250cm9sLmdldFBsYWNlaG9sZGVyPy4ob1JtKTtcblx0XHRcdG9SbS5yZW5kZXJDb250cm9sKG9Db250cm9sLmNvbnRlbnQpO1xuXHRcdH1cblx0fVxuXG5cdHNldEJpbmRpbmdDb250ZXh0KGNvbnRleHQ6IENvbnRleHQsIG1vZGVsPzogc3RyaW5nKTogdGhpcyB7XG5cdFx0c3VwZXIuc2V0QmluZGluZ0NvbnRleHQoY29udGV4dCwgbW9kZWwpO1xuXHRcdGlmIChtb2RlbCA9PT0gdW5kZWZpbmVkICYmIGNvbnRleHQpIHtcblx0XHRcdHRoaXMuaW52YWxpZGF0ZSgpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBPdmVycmlkZSB0aGUgYmluZFByb3BlcnR5IHRvIGRlYWwgd2l0aCB0aGUgY2FzZSB3aGVyZSB0aGUgcHJvcGVydHkgaXMgYSBiaW5kaW5nIGluZm8uXG5cdCAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRlIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBiaW5kaW5nSW5mbyBUaGUgYmluZGluZyBpbmZvXG5cdCAqIEByZXR1cm5zIFRoZSBpbnN0YW5jZSBvZiB0aGUgYnVpbGRpbmcgYmxvY2sgZm9yIGNoYWluaW5nXG5cdCAqL1xuXHRvdmVycmlkZSBiaW5kUHJvcGVydHkobmFtZTogc3RyaW5nLCBiaW5kaW5nSW5mbzogUHJvcGVydHlCaW5kaW5nSW5mbyk6IHRoaXMge1xuXHRcdGNvbnN0IHByb3BlcnR5TWV0YWRhdGEgPSB0aGlzLmdldE1ldGFkYXRhKCkuZ2V0UHJvcGVydHkobmFtZSk7XG5cdFx0aWYgKHByb3BlcnR5TWV0YWRhdGE/LmJpbmRhYmxlID09PSBmYWxzZSAmJiBwcm9wZXJ0eU1ldGFkYXRhLmdyb3VwID09PSBcIkRhdGFcIikge1xuXHRcdFx0KHRoaXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW25hbWVdID0gYmluZGluZ0luZm87XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN1cGVyLmJpbmRQcm9wZXJ0eShuYW1lLCBiaW5kaW5nSW5mbyk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Ly9zZXQgdGhlIG9sZCBkb20gcmVmXG5cdG92ZXJyaWRlIG9uQWZ0ZXJSZW5kZXJpbmcoZXZlbnQ6IEpRdWVyeS5FdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IGRvbVJlZiA9IHRoaXMuZ2V0RG9tUmVmKCk7XG5cdFx0aWYgKGRvbVJlZikge1xuXHRcdFx0dGhpcy5fb2xkRG9tUmVmID0gbmV3IFdlYWtSZWYoZG9tUmVmKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fb2xkRG9tUmVmID0gbnVsbDtcblx0XHR9XG5cdFx0c3VwZXIub25BZnRlclJlbmRlcmluZyhldmVudCk7XG5cdH1cblxuXHRvdmVycmlkZSBnZXREb21SZWYoc3VmZml4Pzogc3RyaW5nKTogRWxlbWVudCB8IG51bGwge1xuXHRcdGNvbnN0IG9Db250ZW50ID0gdGhpcy5jb250ZW50O1xuXHRcdGxldCBkb21SZWY6IEVsZW1lbnQgfCBudWxsID0gb0NvbnRlbnQ/LmdldERvbVJlZihzdWZmaXgpID8/IHN1cGVyLmdldERvbVJlZihzdWZmaXgpO1xuXHRcdGlmICghZG9tUmVmICYmICFzdWZmaXgpIHtcblx0XHRcdGRvbVJlZiA9IHRoaXMuX29sZERvbVJlZj8uZGVyZWYoKSA/PyBudWxsO1xuXHRcdFx0aWYgKGRvbVJlZikge1xuXHRcdFx0XHRyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZG9tUmVmLmlkKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGRvbVJlZjtcblx0fVxuXG5cdG92ZXJyaWRlIGdldEZvY3VzRG9tUmVmKCk6IEVsZW1lbnQgfCBudWxsIHtcblx0XHRjb25zdCBvQ29udGVudCA9IHRoaXMuY29udGVudDtcblx0XHRyZXR1cm4gb0NvbnRlbnQgPyBvQ29udGVudC5nZXRGb2N1c0RvbVJlZigpIDogc3VwZXIuZ2V0Rm9jdXNEb21SZWYoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGFza3MgdXAgdGhlIGNvbnRyb2wgdHJlZSB0byBlbmhhbmNlIHRoZSBhY2Nlc3NpYmlsaXR5IHN0YXRlIG9mIHRoZSBjb250cm9sLlxuXHQgKiBAcGFyYW0gX29FbGVtZW50IFRoZSBlbGVtZW50IHRvIGVuaGFuY2Vcblx0ICogQHBhcmFtIG1BcmlhUHJvcHMgVGhlIGN1cnJlbnQgYXJpYSBwcm9wZXJ0aWVzXG5cdCAqIEByZXR1cm5zIFRoZSBlbmhhbmNlZCBhcmlhIHByb3BlcnRpZXNcblx0ICovXG5cdG92ZXJyaWRlIGVuaGFuY2VBY2Nlc3NpYmlsaXR5U3RhdGUoX29FbGVtZW50OiBvYmplY3QsIG1BcmlhUHJvcHM6IG9iamVjdCk6IG9iamVjdCB7XG5cdFx0Y29uc3Qgb1BhcmVudCA9IHRoaXMuZ2V0UGFyZW50KCk7XG5cblx0XHRpZiAob1BhcmVudCAmJiAob1BhcmVudCBhcyBNYW5hZ2VkT2JqZWN0ICYgeyBlbmhhbmNlQWNjZXNzaWJpbGl0eVN0YXRlPzogRnVuY3Rpb24gfSkuZW5oYW5jZUFjY2Vzc2liaWxpdHlTdGF0ZSkge1xuXHRcdFx0Ly8gZm9yd2FyZCAgZW5oYW5jZUFjY2Vzc2liaWxpdHlTdGF0ZSBjYWxsIHRvIHRoZSBwYXJlbnRcblx0XHRcdChvUGFyZW50IGFzIE1hbmFnZWRPYmplY3QgJiB7IGVuaGFuY2VBY2Nlc3NpYmlsaXR5U3RhdGU6IEZ1bmN0aW9uIH0pLmVuaGFuY2VBY2Nlc3NpYmlsaXR5U3RhdGUoX29FbGVtZW50LCBtQXJpYVByb3BzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbUFyaWFQcm9wcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIChpZiBhdmFpbGFibGUgb24gdGhlIGNvbmNyZXRlIGNvbnRyb2wpIHByb3ZpZGVzIHRoZSBjdXJyZW50IGFjY2Vzc2liaWxpdHkgc3RhdGUgb2YgdGhlIGNvbnRyb2wuXG5cdCAqIEByZXR1cm5zIFRoZSBhY2Nlc3NpYmlsaXR5IGluZm9ybWF0aW9uIGZvciB0aGUgY29udHJvbC5cblx0ICovXG5cdG92ZXJyaWRlIGdldEFjY2Vzc2liaWxpdHlJbmZvKCk6IEFjY2Vzc2liaWxpdHlJbmZvIHtcblx0XHRsZXQgYWNjZXNzaWJpbGl0eUluZm8gPSB7fTtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8Q29udHJvbD4oXCJzYXAudWkuY29yZS5Db250cm9sXCIpICYmIHRoaXMuY29udGVudC5nZXRBY2Nlc3NpYmlsaXR5SW5mbykge1xuXHRcdFx0YWNjZXNzaWJpbGl0eUluZm8gPSB0aGlzLmNvbnRlbnQuZ2V0QWNjZXNzaWJpbGl0eUluZm8oKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFjY2Vzc2liaWxpdHlJbmZvO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIERPTU5vZGUgSUQgdG8gYmUgdXNlZCBmb3IgdGhlIFwibGFiZWxGb3JcIiBhdHRyaWJ1dGUuXG5cdCAqXG5cdCAqIFdlIGZvcndhcmQgdGhlIGNhbGwgb2YgdGhpcyBtZXRob2QgdG8gdGhlIGNvbnRlbnQgY29udHJvbC5cblx0ICogQHJldHVybnMgSUQgdG8gYmUgdXNlZCBmb3IgdGhlIDxjb2RlPmxhYmVsRm9yPC9jb2RlPlxuXHQgKi9cblx0b3ZlcnJpZGUgZ2V0SWRGb3JMYWJlbCgpOiBzdHJpbmcge1xuXHRcdGlmICh0aGlzLmNvbnRlbnQ/LmlzQTxDb250cm9sPihcInNhcC51aS5jb3JlLkNvbnRyb2xcIikpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbnRlbnQuZ2V0SWRGb3JMYWJlbCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdG92ZXJyaWRlIGFkZFN0eWxlQ2xhc3Moc3R5bGVDbGFzczogc3RyaW5nKTogdGhpcyB7XG5cdFx0KHRoaXMuY29udGVudCBhcyB1bmtub3duIGFzIENvbnRyb2wpPy5hZGRTdHlsZUNsYXNzKHN0eWxlQ2xhc3MpO1xuXHRcdHN1cGVyLmFkZFN0eWxlQ2xhc3Moc3R5bGVDbGFzcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRvdmVycmlkZSByZW1vdmVTdHlsZUNsYXNzKHN0eWxlQ2xhc3M6IHN0cmluZyk6IHRoaXMge1xuXHRcdCh0aGlzLmNvbnRlbnQgYXMgdW5rbm93biBhcyBDb250cm9sKT8ucmVtb3ZlU3R5bGVDbGFzcyhzdHlsZUNsYXNzKTtcblx0XHRzdXBlci5yZW1vdmVTdHlsZUNsYXNzKHN0eWxlQ2xhc3MpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNob3J0aGFuZCBmb3IgdGhlIEJpbmRpbmdUb29sa2l0LmJpbmRTdGF0ZSBmdW5jdGlvbiB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9iamVjdC5cblx0ICogQHBhcmFtIHBhdGggQSBwcm9wZXJ0eSBpbiB0aGUgc3RhdGUgb2JqZWN0XG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvbiBmb3IgdGhlIHN0YXRlXG5cdCAqIEBwdWJsaWNcblx0ICogQHVpNS1leHBlcmltZW50YWwtc2luY2UgMS4xNDUuMFxuXHQgKi9cblx0cHVibGljIGJpbmRTdGF0ZTxTVCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KHBhdGg6IGtleW9mIEspOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248U1Q+IHtcblx0XHRyZXR1cm4gQmluZGluZ1Rvb2xraXQuYmluZFN0YXRlKHRoaXMuc3RhdGUgYXMgSywgcGF0aCk7XG5cdH1cblxuXHQvKipcblx0ICogU3luY2hyb25pemVzIGEgc3RhdGUgcHJvcGVydHkgd2l0aCBhbm90aGVyIGJ1aWxkaW5nIGJsb2NrJ3Mgc3RhdGUgcHJvcGVydHkuXG5cdCAqIEBwYXJhbSBwcm9wTmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgY3VycmVudCBzdGF0ZSBvYmplY3Rcblx0ICogQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIGJ1aWxkaW5nIGJsb2NrXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgaW4gdGhlIHNvdXJjZSBidWlsZGluZyBibG9jaydzIHN0YXRlIG9iamVjdFxuXHQgKi9cblx0cHVibGljIHN5bmNTdGF0ZVByb3BlcnR5KHByb3BOYW1lOiBzdHJpbmcsIHNvdXJjZTogQnVpbGRpbmdCbG9ja0Jhc2UsIHByb3BlcnR5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHQodGhpcy5zdGF0ZSBhcyBHZW5lcmljU3RhdGUpW3Byb3BOYW1lXSA9IChzb3VyY2Uuc3RhdGUgYXMgR2VuZXJpY1N0YXRlKVtwcm9wZXJ0eV07XG5cdFx0Y29uc3QgcHJvcEJpbmRpbmcgPSBzb3VyY2UuZ2V0TW9kZWwoU1RBVEVfTU9ERUxfTkFNRSk/LmJpbmRQcm9wZXJ0eShcIi9cIiArIHByb3BlcnR5KTtcblx0XHRwcm9wQmluZGluZz8uYXR0YWNoQ2hhbmdlKCgpOiB2b2lkID0+IHtcblx0XHRcdCh0aGlzLnN0YXRlIGFzIEdlbmVyaWNTdGF0ZSlbcHJvcE5hbWVdID0gKHNvdXJjZS5zdGF0ZSBhcyBHZW5lcmljU3RhdGUpW3Byb3BlcnR5XTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGcmFtZXdvcmsgaG9vayBmb3Igc3RhdGUgY2hhbmdlIGhhbmRsaW5nLlxuXHQgKiBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byByZWFjdCB0byBzdGF0ZSBjaGFuZ2VzLlxuXHQgKiBAcGFyYW0gX2NoYW5nZWRQcm9wcyBMaXN0IG9mIGNoYW5nZWQgcHJvcGVydHkgbmFtZXNcblx0ICogQHB1YmxpY1xuXHQgKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG5cdCAqL1xuXHRwcm90ZWN0ZWQgb25TdGF0ZUNoYW5nZShfY2hhbmdlZFByb3BzOiBzdHJpbmdbXSk6IHZvaWQ7XG5cblx0cHJvdGVjdGVkIGFzeW5jIG9uU3RhdGVDaGFuZ2UoX2NoYW5nZWRQcm9wczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHt9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1aWxkaW5nQmxvY2tCYXNlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFhQTtFQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFQQSxJQVNNQSxpQkFBaUIsSUFBQUMsSUFBQSxHQUR0QkMsY0FBYyxDQUFDLCtCQUErQixDQUFDLEVBQUFDLEtBQUEsR0FVOUNDLFdBQVcsQ0FBQztJQUFFQyxJQUFJLEVBQUUscUJBQXFCO0lBQUVDLFFBQVEsRUFBRSxLQUFLO0lBQUVDLFNBQVMsRUFBRTtFQUFLLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBTzlFQyxXQUFXLENBQUM7SUFBRUosSUFBSSxFQUFFLHFCQUFxQjtJQUFFQyxRQUFRLEVBQUUsSUFBSTtJQUFFSSxZQUFZLEVBQUU7RUFBaUIsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FVNUZDLFdBQVcsQ0FBQyxDQUFDLEVBQUFYLElBQUEsQ0FBQVksTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxRQUFBO0lBS2QsU0FBQWYsa0JBQVlnQixRQUFzRCxFQUFFQyxNQUEyQyxFQUFFQyxLQUFjLEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQ2hJLElBQUksT0FBT0gsUUFBUSxLQUFLLFFBQVEsRUFBRTtRQUNqQ0MsTUFBTSxLQUFL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
|
|
240
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdWlsZGluZ0Jsb2NrQmFzZSIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwiYWdncmVnYXRpb24iLCJ0eXBlIiwibXVsdGlwbGUiLCJpc0RlZmF1bHQiLCJfZGVjMyIsImFzc29jaWF0aW9uIiwic2luZ3VsYXJOYW1lIiwiX2RlYzQiLCJkZWZpbmVTdGF0ZSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQ29udHJvbCIsInNldHRpbmdzIiwib3RoZXJzIiwic2NvcGUiLCJfdGhpcyIsImlkIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfb2xkRG9tUmVmIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJnZXRQbGFjZWhvbGRlciIsIl9ybSIsInJlbmRlciIsIm9SbSIsIm9Db250cm9sIiwiY29udGVudCIsImdldFZpc2libGUiLCJJbnZpc2libGVSZW5kZXJlciIsInJlbmRlckNvbnRyb2wiLCJzZXRCaW5kaW5nQ29udGV4dCIsImNvbnRleHQiLCJtb2RlbCIsInVuZGVmaW5lZCIsImludmFsaWRhdGUiLCJiaW5kUHJvcGVydHkiLCJuYW1lIiwiYmluZGluZ0luZm8iLCJwcm9wZXJ0eU1ldGFkYXRhIiwiZ2V0TWV0YWRhdGEiLCJnZXRQcm9wZXJ0eSIsImJpbmRhYmxlIiwiZ3JvdXAiLCJvbkFmdGVyUmVuZGVyaW5nIiwiZXZlbnQiLCJkb21SZWYiLCJnZXREb21SZWYiLCJXZWFrUmVmIiwic3VmZml4Iiwib0NvbnRlbnQiLCJkZXJlZiIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRGb2N1c0RvbVJlZiIsImVuaGFuY2VBY2Nlc3NpYmlsaXR5U3RhdGUiLCJfb0VsZW1lbnQiLCJtQXJpYVByb3BzIiwib1BhcmVudCIsImdldFBhcmVudCIsImdldEFjY2Vzc2liaWxpdHlJbmZvIiwiaXNBIiwiZ2V0SWRGb3JMYWJlbCIsImFkZFN0eWxlQ2xhc3MiLCJzdHlsZUNsYXNzIiwicmVtb3ZlU3R5bGVDbGFzcyIsImJpbmRTdGF0ZSIsInBhdGgiLCJCaW5kaW5nVG9vbGtpdCIsInN0YXRlIiwic3luY1N0YXRlUHJvcGVydHkiLCJwcm9wTmFtZSIsInNvdXJjZSIsInByb3BlcnR5IiwicHJvcEJpbmRpbmciLCJnZXRNb2RlbCIsIlNUQVRFX01PREVMX05BTUUiLCJhdHRhY2hDaGFuZ2UiLCJvblN0YXRlQ2hhbmdlIiwiX2NoYW5nZWRQcm9wcyIsIkNvbnRyb2wiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkJ1aWxkaW5nQmxvY2tCYXNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBQcmltaXRpdmVUeXBlIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgKiBhcyBCaW5kaW5nVG9vbGtpdCBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgR2VuZXJpY1N0YXRlLCBQcm9wZXJ0aWVzT2YsIFN0YXRlT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvbiwgYXNzb2NpYXRpb24sIGRlZmluZVN0YXRlLCBkZWZpbmVVSTVDbGFzcywgU1RBVEVfTU9ERUxfTkFNRSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlCaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEludmlzaWJsZVJlbmRlcmVyIGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVSZW5kZXJlclwiO1xuaW1wb3J0IHR5cGUgUmVuZGVyTWFuYWdlciBmcm9tIFwic2FwL3VpL2NvcmUvUmVuZGVyTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBBY2Nlc3NpYmlsaXR5SW5mbyB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5pbnRlcmZhY2UgQnVpbGRpbmdCbG9ja0Jhc2U8VCBleHRlbmRzIFVJNUVsZW1lbnQgPSBDb250cm9sLCBLIGV4dGVuZHMgb2JqZWN0ID0ge30+IHtcblx0Ly8gRm9yY2UgYSBzdGF0ZSB1cGRhdGVcblx0X3VwZGF0ZVN0YXRlKCk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYnVpbGRpbmcgYmxvY2tzLlxuICogVGhpcyBjb250YWlucyB0aGUgbG93LWxldmVsIGZ1bmN0aW9uYWxpdHkgb2YgaGF2aW5nIGEgY29udGVudCBhZ2dyZWdhdGlvbiBhbmQgaGFuZGxpbmcgdGhlIHJlbmRlcmluZyBvZiB0aGUgY29udGVudCB3aXRob3V0IGFuIGFjdHVhbCBET00gZWxlbWVudC48YnIvPlxuICogVGhlIGJ1aWxkaW5nIGJsb2NrIGFsc28gZGVmaW5lcyBhIHN0YXRlIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHN0b3JlIHRoZSBzdGF0ZSBvZiB0aGUgYnVpbGRpbmcgYmxvY2suPGJyLz5cbiAqIEFjY2Vzc2liaWxpdHkgYW5kIGNsYXNzZXMgaW5mb3JtYXRpb24gYXJlIGZvcndhcmRlZCB0byB0aGUgY29udGVudCBjb250cm9sLjxici8+XG4gKiBUaGlzIGNsYXNzIGlzIG5vdCBtZWFudCB0byBiZSB1c2VkIGRpcmVjdGx5LCBpdCdzIHRoZXJlIGZvciBpbnRlcm5hbCB1c2Ugb25seSAoYW5kIGRvY3VtZW50YXRpb24pXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5iYXNlLkJ1aWxkaW5nQmxvY2tCYXNlXCIpXG5jbGFzcyBCdWlsZGluZ0Jsb2NrQmFzZTxUIGV4dGVuZHMgVUk1RWxlbWVudCA9IENvbnRyb2wsIEsgZXh0ZW5kcyBvYmplY3QgPSB7fT4gZXh0ZW5kcyBDb250cm9sIHtcblx0LyoqXG5cdCAqIE9wdGlvbmFsIGNvbnRlbnQgb2YgZ2VuZXJpYyB0eXBlIFQuXG5cdCAqXG5cdCAqIFRoaXMgcHJvcGVydHkgaG9sZHMgdGhlIG1haW4gZGF0YSBvciBwYXlsb2FkIGZvciB0aGUgY29udGFpbmluZyBvYmplY3QuXG5cdCAqIFdoZW4gdW5kZWZpbmVkLCBpdCBpbmRpY2F0ZXMgdGhhdCBubyBjb250ZW50IGhhcyBiZWVuIHNldCBvciBpcyBhdmFpbGFibGUuXG5cdCAqIFRoZSBzcGVjaWZpYyB0eXBlIGFuZCBzdHJ1Y3R1cmUgb2YgdGhlIGNvbnRlbnQgZGVwZW5kcyBvbiB0aGUgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlciBULlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLkVsZW1lbnRcIiwgbXVsdGlwbGU6IGZhbHNlLCBpc0RlZmF1bHQ6IHRydWUgfSlcblx0Y29udGVudD86IFQ7XG5cblx0LyoqXG5cdCAqIEFzc29jaWF0aW9uIHRvIGNvbnRyb2xzIC8gSURzIHRoYXQgbGFiZWwgdGhpcyBjb250cm9sIChzZWUgV0FJLUFSSUEgYXR0cmlidXRlIGFyaWEtbGFiZWxsZWRieSkuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBhc3NvY2lhdGlvbih7IHR5cGU6IFwic2FwLnVpLmNvcmUuQ29udHJvbFwiLCBtdWx0aXBsZTogdHJ1ZSwgc2luZ3VsYXJOYW1lOiBcImFyaWFMYWJlbGxlZEJ5XCIgfSlcblx0YXJpYUxhYmVsbGVkQnkhOiBzdHJpbmdbXTtcblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgc3RhdGUgdmFsdWUgb2YgdGhlIGNvbXBvbmVudC5cblx0ICpcblx0ICogVGhpcyBwcm9wZXJ0eSBob2xkcyB0aGUgc3RhdGUgZGF0YSBtYW5hZ2VkIGJ5IHRoZSBjb21wb25lbnQsIHdpdGggdGhlIHR5cGVcblx0ICogZGV0ZXJtaW5lZCBieSB0aGUgZ2VuZXJpYyBwYXJhbWV0ZXIgSy5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGRlZmluZVN0YXRlKClcblx0cHJvdGVjdGVkIHN0YXRlITogU3RhdGVPZjxLPjtcblxuXHRnZXRQbGFjZWhvbGRlcihfcm06IFJlbmRlck1hbmFnZXIpOiB2b2lkIHt9XG5cblx0Y29uc3RydWN0b3Ioc2V0dGluZ3M/OiBzdHJpbmcgfCBQcm9wZXJ0aWVzT2Y8QnVpbGRpbmdCbG9ja0Jhc2U8VD4+LCBvdGhlcnM/OiBQcm9wZXJ0aWVzT2Y8QnVpbGRpbmdCbG9ja0Jhc2U8VD4+LCBzY29wZT86IG9iamVjdCkge1xuXHRcdGlmICh0eXBlb2Ygc2V0dGluZ3MgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdG90aGVycyA/Pz0ge307XG5cdFx0XHRvdGhlcnMuaWQgPSBzZXR0aW5ncztcblx0XHR9XG5cdFx0Ly8gU2NvcGUgaXMgZGVmaW5lZCBhbmQgaXMgdGhlcmUsIGJ1dCBzb21laG93IGRvZXNuJ3QgYXBwZWFyIG9uIGFsbCB0aGUgY2hpbGRyZW4gb2YgTWFuYWdlZE9iamVjdFxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0c3VwZXIoc2V0dGluZ3MgYXMgdW5rbm93biBhcyBzdHJpbmcsIG90aGVycywgc2NvcGUpO1xuXHR9XG5cblx0cHJpdmF0ZSBfb2xkRG9tUmVmOiBXZWFrUmVmPEVsZW1lbnQ+IHwgbnVsbCA9IG51bGw7XG5cblx0c3RhdGljIHJlbmRlcjxUIGV4dGVuZHMgQ29udHJvbD4ob1JtOiBSZW5kZXJNYW5hZ2VyLCBvQ29udHJvbDogQnVpbGRpbmdCbG9ja0Jhc2U8VD4pOiB2b2lkIHtcblx0XHRpZiAoIW9Db250cm9sLmNvbnRlbnQgfHwgb0NvbnRyb2wuZ2V0VmlzaWJsZSgpID09PSBmYWxzZSkge1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgbm8gY29udGVudCwgd2UgcmVuZGVyIGFuIGludmlzaWJsZSByZW5kZXJlciB0byBhdm9pZCB0aGUgY29udHJvbCBiZWluZ1xuXHRcdFx0SW52aXNpYmxlUmVuZGVyZXIucmVuZGVyKG9SbSwgb0NvbnRyb2wpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvQ29udHJvbC5nZXRQbGFjZWhvbGRlcj8uKG9SbSk7XG5cdFx0XHRvUm0ucmVuZGVyQ29udHJvbChvQ29udHJvbC5jb250ZW50KTtcblx0XHR9XG5cdH1cblxuXHRzZXRCaW5kaW5nQ29udGV4dChjb250ZXh0OiBDb250ZXh0LCBtb2RlbD86IHN0cmluZyk6IHRoaXMge1xuXHRcdHN1cGVyLnNldEJpbmRpbmdDb250ZXh0KGNvbnRleHQsIG1vZGVsKTtcblx0XHRpZiAobW9kZWwgPT09IHVuZGVmaW5lZCAmJiBjb250ZXh0KSB7XG5cdFx0XHR0aGlzLmludmFsaWRhdGUoKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogT3ZlcnJpZGUgdGhlIGJpbmRQcm9wZXJ0eSB0byBkZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhlIHByb3BlcnR5IGlzIGEgYmluZGluZyBpbmZvLlxuXHQgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0ZSBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gYmluZGluZ0luZm8gVGhlIGJpbmRpbmcgaW5mb1xuXHQgKiBAcmV0dXJucyBUaGUgaW5zdGFuY2Ugb2YgdGhlIGJ1aWxkaW5nIGJsb2NrIGZvciBjaGFpbmluZ1xuXHQgKi9cblx0b3ZlcnJpZGUgYmluZFByb3BlcnR5KG5hbWU6IHN0cmluZywgYmluZGluZ0luZm86IFByb3BlcnR5QmluZGluZ0luZm8pOiB0aGlzIHtcblx0XHRjb25zdCBwcm9wZXJ0eU1ldGFkYXRhID0gdGhpcy5nZXRNZXRhZGF0YSgpLmdldFByb3BlcnR5KG5hbWUpO1xuXHRcdGlmIChwcm9wZXJ0eU1ldGFkYXRhPy5iaW5kYWJsZSA9PT0gZmFsc2UgJiYgcHJvcGVydHlNZXRhZGF0YS5ncm91cCA9PT0gXCJEYXRhXCIpIHtcblx0XHRcdCh0aGlzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtuYW1lXSA9IGJpbmRpbmdJbmZvO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdXBlci5iaW5kUHJvcGVydHkobmFtZSwgYmluZGluZ0luZm8pO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8vc2V0IHRoZSBvbGQgZG9tIHJlZlxuXHRvdmVycmlkZSBvbkFmdGVyUmVuZGVyaW5nKGV2ZW50OiBKUXVlcnkuRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBkb21SZWYgPSB0aGlzLmdldERvbVJlZigpO1xuXHRcdGlmIChkb21SZWYpIHtcblx0XHRcdHRoaXMuX29sZERvbVJlZiA9IG5ldyBXZWFrUmVmKGRvbVJlZik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX29sZERvbVJlZiA9IG51bGw7XG5cdFx0fVxuXHRcdHN1cGVyLm9uQWZ0ZXJSZW5kZXJpbmcoZXZlbnQpO1xuXHR9XG5cblx0b3ZlcnJpZGUgZ2V0RG9tUmVmKHN1ZmZpeD86IHN0cmluZyk6IEVsZW1lbnQgfCBudWxsIHtcblx0XHRjb25zdCBvQ29udGVudCA9IHRoaXMuY29udGVudDtcblx0XHRsZXQgZG9tUmVmOiBFbGVtZW50IHwgbnVsbCA9IG9Db250ZW50Py5nZXREb21SZWYoc3VmZml4KSA/PyBzdXBlci5nZXREb21SZWYoc3VmZml4KTtcblx0XHRpZiAoIWRvbVJlZiAmJiAhc3VmZml4KSB7XG5cdFx0XHRkb21SZWYgPSB0aGlzLl9vbGREb21SZWY/LmRlcmVmKCkgPz8gbnVsbDtcblx0XHRcdGlmIChkb21SZWYpIHtcblx0XHRcdFx0cmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRvbVJlZi5pZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBkb21SZWY7XG5cdH1cblxuXHRvdmVycmlkZSBnZXRGb2N1c0RvbVJlZigpOiBFbGVtZW50IHwgbnVsbCB7XG5cdFx0Y29uc3Qgb0NvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0cmV0dXJuIG9Db250ZW50ID8gb0NvbnRlbnQuZ2V0Rm9jdXNEb21SZWYoKSA6IHN1cGVyLmdldEZvY3VzRG9tUmVmKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBhc2tzIHVwIHRoZSBjb250cm9sIHRyZWUgdG8gZW5oYW5jZSB0aGUgYWNjZXNzaWJpbGl0eSBzdGF0ZSBvZiB0aGUgY29udHJvbC5cblx0ICogQHBhcmFtIF9vRWxlbWVudCBUaGUgZWxlbWVudCB0byBlbmhhbmNlXG5cdCAqIEBwYXJhbSBtQXJpYVByb3BzIFRoZSBjdXJyZW50IGFyaWEgcHJvcGVydGllc1xuXHQgKiBAcmV0dXJucyBUaGUgZW5oYW5jZWQgYXJpYSBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRvdmVycmlkZSBlbmhhbmNlQWNjZXNzaWJpbGl0eVN0YXRlKF9vRWxlbWVudDogb2JqZWN0LCBtQXJpYVByb3BzOiBvYmplY3QpOiBvYmplY3Qge1xuXHRcdGNvbnN0IG9QYXJlbnQgPSB0aGlzLmdldFBhcmVudCgpO1xuXG5cdFx0aWYgKG9QYXJlbnQgJiYgKG9QYXJlbnQgYXMgTWFuYWdlZE9iamVjdCAmIHsgZW5oYW5jZUFjY2Vzc2liaWxpdHlTdGF0ZT86IEZ1bmN0aW9uIH0pLmVuaGFuY2VBY2Nlc3NpYmlsaXR5U3RhdGUpIHtcblx0XHRcdC8vIGZvcndhcmQgIGVuaGFuY2VBY2Nlc3NpYmlsaXR5U3RhdGUgY2FsbCB0byB0aGUgcGFyZW50XG5cdFx0XHQob1BhcmVudCBhcyBNYW5hZ2VkT2JqZWN0ICYgeyBlbmhhbmNlQWNjZXNzaWJpbGl0eVN0YXRlOiBGdW5jdGlvbiB9KS5lbmhhbmNlQWNjZXNzaWJpbGl0eVN0YXRlKF9vRWxlbWVudCwgbUFyaWFQcm9wcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1BcmlhUHJvcHM7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiAoaWYgYXZhaWxhYmxlIG9uIHRoZSBjb25jcmV0ZSBjb250cm9sKSBwcm92aWRlcyB0aGUgY3VycmVudCBhY2Nlc3NpYmlsaXR5IHN0YXRlIG9mIHRoZSBjb250cm9sLlxuXHQgKiBXaGVuIHRoZSBjb250ZW50IGNvbnRyb2wgaXMgbm90IHZpc2libGUsIG51bGwgaXMgcmV0dXJuZWQgc28gdGhhdCBzYXAubS5UYWJsZSBjYW4gc2V0IGFyaWEtbGFiZWw9XCJcIlxuXHQgKiBvbiB0aGUgZ3JpZGNlbGwsIHByZXZlbnRpbmcgc2NyZWVuIHJlYWRlciB2aXJ0dWFsIGJ1ZmZlciBibGVlZC10aHJvdWdoIChBQ0MtMjY0LjEgLyBXQ0FHIDIuMSBMZXZlbCBBKS5cblx0ICogQHJldHVybnMgVGhlIGFjY2Vzc2liaWxpdHkgaW5mb3JtYXRpb24gZm9yIHRoZSBjb250cm9sLCBvciBudWxsIChjYXN0KSB3aGVuIGNvbnRlbnQgaXMgbm90IHZpc2libGUuXG5cdCAqL1xuXHRvdmVycmlkZSBnZXRBY2Nlc3NpYmlsaXR5SW5mbygpOiBBY2Nlc3NpYmlsaXR5SW5mbyB7XG5cdFx0aWYgKHRoaXMuY29udGVudD8uaXNBPENvbnRyb2w+KFwic2FwLnVpLmNvcmUuQ29udHJvbFwiKSAmJiB0aGlzLmNvbnRlbnQuZ2V0QWNjZXNzaWJpbGl0eUluZm8pIHtcblx0XHRcdGlmICghdGhpcy5jb250ZW50LmdldFZpc2libGUoKSkge1xuXHRcdFx0XHQvLyBDb250ZW50IGlzIG5vdCB2aXNpYmxlOiByZXR1cm4gbnVsbCAoY2FzdCB0byBwcmVzZXJ2ZSB0aGUgdHlwZSBjb250cmFjdCkgc28gdGhhdFxuXHRcdFx0XHQvLyBzYXAubS5UYWJsZSByZWNlaXZlcyBhIGZhbHN5IHZhbHVlIGFuZCBzZXRzIGFyaWEtbGFiZWw9XCJcIiBvbiB0aGUgZ3JpZGNlbGwsXG5cdFx0XHRcdC8vIHByZXZlbnRpbmcgc2NyZWVuIHJlYWRlciB2aXJ0dWFsIGJ1ZmZlciBibGVlZC10aHJvdWdoIChBQ0MtMjY0LjEgLyBXQ0FHIDIuMSBMZXZlbCBBKS5cblx0XHRcdFx0cmV0dXJuIG51bGwgYXMgdW5rbm93biBhcyBBY2Nlc3NpYmlsaXR5SW5mbztcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLmNvbnRlbnQuZ2V0QWNjZXNzaWJpbGl0eUluZm8oKTtcblx0XHR9XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIERPTU5vZGUgSUQgdG8gYmUgdXNlZCBmb3IgdGhlIFwibGFiZWxGb3JcIiBhdHRyaWJ1dGUuXG5cdCAqXG5cdCAqIFdlIGZvcndhcmQgdGhlIGNhbGwgb2YgdGhpcyBtZXRob2QgdG8gdGhlIGNvbnRlbnQgY29udHJvbC5cblx0ICogQHJldHVybnMgSUQgdG8gYmUgdXNlZCBmb3IgdGhlIDxjb2RlPmxhYmVsRm9yPC9jb2RlPlxuXHQgKi9cblx0b3ZlcnJpZGUgZ2V0SWRGb3JMYWJlbCgpOiBzdHJpbmcge1xuXHRcdGlmICh0aGlzLmNvbnRlbnQ/LmlzQTxDb250cm9sPihcInNhcC51aS5jb3JlLkNvbnRyb2xcIikpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbnRlbnQuZ2V0SWRGb3JMYWJlbCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdG92ZXJyaWRlIGFkZFN0eWxlQ2xhc3Moc3R5bGVDbGFzczogc3RyaW5nKTogdGhpcyB7XG5cdFx0KHRoaXMuY29udGVudCBhcyB1bmtub3duIGFzIENvbnRyb2wpPy5hZGRTdHlsZUNsYXNzKHN0eWxlQ2xhc3MpO1xuXHRcdHN1cGVyLmFkZFN0eWxlQ2xhc3Moc3R5bGVDbGFzcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRvdmVycmlkZSByZW1vdmVTdHlsZUNsYXNzKHN0eWxlQ2xhc3M6IHN0cmluZyk6IHRoaXMge1xuXHRcdCh0aGlzLmNvbnRlbnQgYXMgdW5rbm93biBhcyBDb250cm9sKT8ucmVtb3ZlU3R5bGVDbGFzcyhzdHlsZUNsYXNzKTtcblx0XHRzdXBlci5yZW1vdmVTdHlsZUNsYXNzKHN0eWxlQ2xhc3MpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNob3J0aGFuZCBmb3IgdGhlIEJpbmRpbmdUb29sa2l0LmJpbmRTdGF0ZSBmdW5jdGlvbiB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9iamVjdC5cblx0ICogQHBhcmFtIHBhdGggQSBwcm9wZXJ0eSBpbiB0aGUgc3RhdGUgb2JqZWN0XG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvbiBmb3IgdGhlIHN0YXRlXG5cdCAqL1xuXHRwdWJsaWMgYmluZFN0YXRlPFNUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4ocGF0aDoga2V5b2YgSyk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxTVD4ge1xuXHRcdHJldHVybiBCaW5kaW5nVG9vbGtpdC5iaW5kU3RhdGUodGhpcy5zdGF0ZSBhcyBLLCBwYXRoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTeW5jaHJvbml6ZXMgYSBzdGF0ZSBwcm9wZXJ0eSB3aXRoIGFub3RoZXIgYnVpbGRpbmcgYmxvY2sncyBzdGF0ZSBwcm9wZXJ0eS5cblx0ICogQHBhcmFtIHByb3BOYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBjdXJyZW50IHN0YXRlIG9iamVjdFxuXHQgKiBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2UgYnVpbGRpbmcgYmxvY2tcblx0ICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSBpbiB0aGUgc291cmNlIGJ1aWxkaW5nIGJsb2NrJ3Mgc3RhdGUgb2JqZWN0XG5cdCAqL1xuXHRwdWJsaWMgc3luY1N0YXRlUHJvcGVydHkocHJvcE5hbWU6IHN0cmluZywgc291cmNlOiBCdWlsZGluZ0Jsb2NrQmFzZSwgcHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xuXHRcdCh0aGlzLnN0YXRlIGFzIEdlbmVyaWNTdGF0ZSlbcHJvcE5hbWVdID0gKHNvdXJjZS5zdGF0ZSBhcyBHZW5lcmljU3RhdGUpW3Byb3BlcnR5XTtcblx0XHRjb25zdCBwcm9wQmluZGluZyA9IHNvdXJjZS5nZXRNb2RlbChTVEFURV9NT0RFTF9OQU1FKT8uYmluZFByb3BlcnR5KFwiL1wiICsgcHJvcGVydHkpO1xuXHRcdHByb3BCaW5kaW5nPy5hdHRhY2hDaGFuZ2UoKCk6IHZvaWQgPT4ge1xuXHRcdFx0KHRoaXMuc3RhdGUgYXMgR2VuZXJpY1N0YXRlKVtwcm9wTmFtZV0gPSAoc291cmNlLnN0YXRlIGFzIEdlbmVyaWNTdGF0ZSlbcHJvcGVydHldO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZyYW1ld29yayBob29rIGZvciBzdGF0ZSBjaGFuZ2UgaGFuZGxpbmcuXG5cdCAqIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHJlYWN0IHRvIHN0YXRlIGNoYW5nZXMuXG5cdCAqIEBwYXJhbSBfY2hhbmdlZFByb3BzIExpc3Qgb2YgY2hhbmdlZCBwcm9wZXJ0eSBuYW1lc1xuXHQgKi9cblx0cHJvdGVjdGVkIG9uU3RhdGVDaGFuZ2UoX2NoYW5nZWRQcm9wczogc3RyaW5nW10pOiB2b2lkO1xuXG5cdHByb3RlY3RlZCBhc3luYyBvblN0YXRlQ2hhbmdlKF9jaGFuZ2VkUHJvcHM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7fVxufVxuXG5leHBvcnQgZGVmYXVsdCBCdWlsZGluZ0Jsb2NrQmFzZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBYUE7RUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBUEEs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
|
|
@@ -151,14 +151,21 @@ class BuildingBlockBase<T extends UI5Element = Control, K extends object = {}> e
|
|
|
151
151
|
|
|
152
152
|
/**
|
|
153
153
|
* This function (if available on the concrete control) provides the current accessibility state of the control.
|
|
154
|
-
*
|
|
154
|
+
* When the content control is not visible, null is returned so that sap.m.Table can set aria-label=""
|
|
155
|
+
* on the gridcell, preventing screen reader virtual buffer bleed-through (ACC-264.1 / WCAG 2.1 Level A).
|
|
156
|
+
* @returns The accessibility information for the control, or null (cast) when content is not visible.
|
|
155
157
|
*/
|
|
156
158
|
override getAccessibilityInfo(): AccessibilityInfo {
|
|
157
|
-
let accessibilityInfo = {};
|
|
158
159
|
if (this.content?.isA<Control>("sap.ui.core.Control") && this.content.getAccessibilityInfo) {
|
|
159
|
-
|
|
160
|
+
if (!this.content.getVisible()) {
|
|
161
|
+
// Content is not visible: return null (cast to preserve the type contract) so that
|
|
162
|
+
// sap.m.Table receives a falsy value and sets aria-label="" on the gridcell,
|
|
163
|
+
// preventing screen reader virtual buffer bleed-through (ACC-264.1 / WCAG 2.1 Level A).
|
|
164
|
+
return null as unknown as AccessibilityInfo;
|
|
165
|
+
}
|
|
166
|
+
return this.content.getAccessibilityInfo();
|
|
160
167
|
}
|
|
161
|
-
return
|
|
168
|
+
return {};
|
|
162
169
|
}
|
|
163
170
|
|
|
164
171
|
/**
|
|
@@ -190,8 +197,6 @@ class BuildingBlockBase<T extends UI5Element = Control, K extends object = {}> e
|
|
|
190
197
|
* Shorthand for the BindingToolkit.bindState function with the current state object.
|
|
191
198
|
* @param path A property in the state object
|
|
192
199
|
* @returns The binding toolkit expression for the state
|
|
193
|
-
* @public
|
|
194
|
-
* @ui5-experimental-since 1.145.0
|
|
195
200
|
*/
|
|
196
201
|
public bindState<ST extends PrimitiveType>(path: keyof K): BindingToolkitExpression<ST> {
|
|
197
202
|
return BindingToolkit.bindState(this.state as K, path);
|
|
@@ -215,8 +220,6 @@ class BuildingBlockBase<T extends UI5Element = Control, K extends object = {}> e
|
|
|
215
220
|
* Framework hook for state change handling.
|
|
216
221
|
* Subclasses can override this method to react to state changes.
|
|
217
222
|
* @param _changedProps List of changed property names
|
|
218
|
-
* @public
|
|
219
|
-
* @ui5-experimental-since 1.145.0
|
|
220
223
|
*/
|
|
221
224
|
protected onStateChange(_changedProps: string[]): void;
|
|
222
225
|
|