@sapui5/sap.fe.macros 1.138.0 → 1.140.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/macros/.library +1 -1
- package/src/sap/fe/macros/Breadcrumbs.js +269 -0
- package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
- package/src/sap/fe/macros/CommonHelper.js +2 -2
- package/src/sap/fe/macros/CommonHelper.ts +1 -1
- package/src/sap/fe/macros/Field.js +85 -58
- package/src/sap/fe/macros/Field.ts +104 -60
- package/src/sap/fe/macros/FooterContent.js +44 -11
- package/src/sap/fe/macros/FooterContent.tsx +48 -9
- package/src/sap/fe/macros/FormElement.js +2 -2
- package/src/sap/fe/macros/FormElement.ts +1 -2
- package/src/sap/fe/macros/MessageButton.js +1 -2
- package/src/sap/fe/macros/MessageButton.tsx +0 -1
- package/src/sap/fe/macros/MultiValueField.js +17 -6
- package/src/sap/fe/macros/MultiValueField.tsx +7 -4
- package/src/sap/fe/macros/RichTextEditor.js +30 -5
- package/src/sap/fe/macros/RichTextEditor.tsx +34 -6
- package/src/sap/fe/macros/Share.js +85 -40
- package/src/sap/fe/macros/Share.tsx +42 -1
- package/src/sap/fe/macros/Status.js +226 -0
- package/src/sap/fe/macros/Status.tsx +192 -0
- package/src/sap/fe/macros/ValueHelp.js +4 -29
- package/src/sap/fe/macros/ValueHelp.tsx +2 -43
- package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
- package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
- package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
- package/src/sap/fe/macros/ai/EasyFilterBar.js +123 -114
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +140 -124
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
- package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
- package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
- package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
- package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
- package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
- package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
- package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
- package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +3 -1
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +2 -0
- package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
- package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
- package/src/sap/fe/macros/controls/FilterBar.js +49 -2
- package/src/sap/fe/macros/controls/FilterBar.ts +55 -1
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
- package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
- package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
- package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
- package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
- package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
- package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
- package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
- package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
- package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
- package/src/sap/fe/macros/designtime/Designtime.helper.js +39 -2
- package/src/sap/fe/macros/designtime/Designtime.helper.ts +39 -0
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +15 -4
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +5 -0
- package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
- package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
- package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
- package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
- package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
- package/src/sap/fe/macros/filter/FilterUtils.js +3 -5
- package/src/sap/fe/macros/filter/FilterUtils.ts +2 -4
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
- package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
- package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
- package/src/sap/fe/macros/form/Form.js +1 -4
- package/src/sap/fe/macros/form/Form.tsx +0 -3
- package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
- package/src/sap/fe/macros/form/FormContainer.block.js +1 -2
- package/src/sap/fe/macros/form/FormContainer.block.ts +0 -1
- package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
- package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
- package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
- package/src/sap/fe/macros/form/FormDelegate.js +20 -1
- package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
- package/src/sap/fe/macros/form/FormHelper.js +1 -2
- package/src/sap/fe/macros/form/FormHelper.ts +0 -1
- package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
- package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
- package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
- package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
- package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
- package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
- package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
- package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
- package/src/sap/fe/macros/internal/DataPoint.js +2 -1
- package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
- package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
- package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
- package/src/sap/fe/macros/internal/FilterField.block.js +10 -2
- package/src/sap/fe/macros/internal/FilterField.block.ts +11 -1
- package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +51 -13
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +53 -6
- package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +11 -0
- package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
- package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +2 -1
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +16 -5
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +21 -9
- package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +7 -2
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +7 -3
- package/src/sap/fe/macros/messagebundle.properties +42 -32
- package/src/sap/fe/macros/messagebundle_ar.properties +12 -4
- package/src/sap/fe/macros/messagebundle_bg.properties +11 -3
- package/src/sap/fe/macros/messagebundle_ca.properties +15 -7
- package/src/sap/fe/macros/messagebundle_cnr.properties +12 -4
- package/src/sap/fe/macros/messagebundle_cs.properties +10 -2
- package/src/sap/fe/macros/messagebundle_cy.properties +12 -4
- package/src/sap/fe/macros/messagebundle_da.properties +11 -3
- package/src/sap/fe/macros/messagebundle_de.properties +18 -10
- package/src/sap/fe/macros/messagebundle_el.properties +13 -5
- package/src/sap/fe/macros/messagebundle_en.properties +16 -8
- package/src/sap/fe/macros/messagebundle_en_GB.properties +16 -8
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +16 -8
- package/src/sap/fe/macros/messagebundle_es.properties +13 -5
- package/src/sap/fe/macros/messagebundle_es_MX.properties +14 -6
- package/src/sap/fe/macros/messagebundle_et.properties +13 -5
- package/src/sap/fe/macros/messagebundle_fi.properties +14 -6
- package/src/sap/fe/macros/messagebundle_fr.properties +14 -6
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +15 -7
- package/src/sap/fe/macros/messagebundle_hi.properties +11 -3
- package/src/sap/fe/macros/messagebundle_hr.properties +11 -3
- package/src/sap/fe/macros/messagebundle_hu.properties +10 -2
- package/src/sap/fe/macros/messagebundle_id.properties +18 -10
- package/src/sap/fe/macros/messagebundle_it.properties +10 -2
- package/src/sap/fe/macros/messagebundle_iw.properties +10 -2
- package/src/sap/fe/macros/messagebundle_ja.properties +13 -5
- package/src/sap/fe/macros/messagebundle_kk.properties +15 -7
- package/src/sap/fe/macros/messagebundle_ko.properties +10 -2
- package/src/sap/fe/macros/messagebundle_lt.properties +11 -3
- package/src/sap/fe/macros/messagebundle_lv.properties +12 -4
- package/src/sap/fe/macros/messagebundle_mk.properties +12 -4
- package/src/sap/fe/macros/messagebundle_ms.properties +14 -6
- package/src/sap/fe/macros/messagebundle_nl.properties +13 -5
- package/src/sap/fe/macros/messagebundle_no.properties +12 -4
- package/src/sap/fe/macros/messagebundle_pl.properties +12 -4
- package/src/sap/fe/macros/messagebundle_pt.properties +13 -5
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -4
- package/src/sap/fe/macros/messagebundle_ro.properties +12 -4
- package/src/sap/fe/macros/messagebundle_ru.properties +13 -5
- package/src/sap/fe/macros/messagebundle_sh.properties +12 -4
- package/src/sap/fe/macros/messagebundle_sk.properties +11 -3
- package/src/sap/fe/macros/messagebundle_sl.properties +12 -4
- package/src/sap/fe/macros/messagebundle_sr.properties +12 -4
- package/src/sap/fe/macros/messagebundle_sv.properties +11 -3
- package/src/sap/fe/macros/messagebundle_th.properties +11 -3
- package/src/sap/fe/macros/messagebundle_tr.properties +10 -2
- package/src/sap/fe/macros/messagebundle_uk.properties +17 -9
- package/src/sap/fe/macros/messagebundle_vi.properties +12 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +11 -3
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -4
- package/src/sap/fe/macros/messages/MessageButton.js +55 -36
- package/src/sap/fe/macros/messages/MessageButton.ts +64 -39
- package/src/sap/fe/macros/messages/MessagePopover.js +2 -2
- package/src/sap/fe/macros/messages/MessagePopover.ts +4 -4
- package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
- package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.js +1 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +0 -1
- package/src/sap/fe/macros/share/ShareAPI.js +4 -29
- package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
- package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
- package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
- package/src/sap/fe/macros/table/Action.js +24 -2
- package/src/sap/fe/macros/table/Action.ts +13 -0
- package/src/sap/fe/macros/table/ActionGroup.js +24 -2
- package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
- package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
- package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
- package/src/sap/fe/macros/table/ActionOverride.js +24 -2
- package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
- package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
- package/src/sap/fe/macros/table/Column.js +3 -3
- package/src/sap/fe/macros/table/Column.ts +2 -2
- package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +36 -7
- package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
- package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
- package/src/sap/fe/macros/table/Table.block.js +137 -108
- package/src/sap/fe/macros/table/Table.block.tsx +29 -2
- package/src/sap/fe/macros/table/TableAPI.js +143 -133
- package/src/sap/fe/macros/table/TableAPI.ts +5 -1
- package/src/sap/fe/macros/table/TableDefinition.js +4 -2
- package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
- package/src/sap/fe/macros/table/TableHelper.js +1 -2
- package/src/sap/fe/macros/table/TableHelper.ts +0 -1
- package/src/sap/fe/macros/table/TableRuntime.js +26 -7
- package/src/sap/fe/macros/table/TableRuntime.ts +33 -5
- package/src/sap/fe/macros/table/Utils.js +6 -2
- package/src/sap/fe/macros/table/Utils.ts +5 -1
- package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
- package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +25 -20
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +25 -24
- package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
- package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
- package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
- package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
- package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
- package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +8 -1
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +10 -0
- package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
- package/src/sap/fe/macros/table/mixin/TableSharing.ts +9 -1
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +20 -6
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +36 -14
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -7
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +16 -5
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +18 -4
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/controls/Common/table/Columns", "sap/fe/core/helpers/MetaModelFunction", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templating/PropertyHelper", "sap/fe/core/type/EDM", "sap/fe/macros/DelegateUtil", "sap/fe/macros/internal/valuehelp/TableDelegateHelper", "sap/ui/core/Element", "sap/ui/mdc/odata/v4/TableDelegate", "sap/ui/mdc/odata/v4/TypeMap", "sap/ui/mdc/odata/v4/util/DelegateUtil", "sap/ui/mdc/util/FilterUtil", "sap/ui/model/Filter", "sap/ui/model/FilterOperator", "sap/ui/model/Sorter"], function (Log, deepEqual, CommonUtils, MetaModelConverter, Columns, MetaModelFunction, ModelHelper, DataModelPathHelper, DisplayModeFormatter, PropertyHelper, EDM, MacrosDelegateUtil, TableDelegateHelper, Element, TableDelegate, TypeMap, DelegateUtil, FilterUtil, Filter, FilterOperator, Sorter) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/controls/Common/table/Columns", "sap/fe/core/helpers/MetaModelFunction", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templating/PropertyHelper", "sap/fe/core/type/EDM", "sap/fe/macros/CommonHelper", "sap/fe/macros/DelegateUtil", "sap/fe/macros/internal/valuehelp/TableDelegateHelper", "sap/ui/core/Element", "sap/ui/mdc/odata/v4/TableDelegate", "sap/ui/mdc/odata/v4/TypeMap", "sap/ui/mdc/odata/v4/util/DelegateUtil", "sap/ui/mdc/util/FilterUtil", "sap/ui/model/Filter", "sap/ui/model/FilterOperator", "sap/ui/model/Sorter"], function (Log, deepEqual, CommonUtils, MetaModelConverter, Columns, MetaModelFunction, ModelHelper, DataModelPathHelper, DisplayModeFormatter, PropertyHelper, EDM, CommonHelper, MacrosDelegateUtil, TableDelegateHelper, Element, TableDelegate, TypeMap, DelegateUtil, FilterUtil, Filter, FilterOperator, Sorter) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var isSortableProperty = TableDelegateHelper.isSortableProperty;
|
|
@@ -36,10 +36,45 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/CommonUti
|
|
|
36
36
|
const model = await this._getModel(table);
|
|
37
37
|
const properties = await this._createPropertyInfos(table, model);
|
|
38
38
|
ODataTableDelegate.createInternalBindingContext(table);
|
|
39
|
+
ODataTableDelegate.setSortConditions(table, properties);
|
|
39
40
|
MacrosDelegateUtil.setCachedProperties(table, properties);
|
|
40
41
|
table.getBindingContext("internal").setProperty("tablePropertiesAvailable", true);
|
|
41
42
|
return properties;
|
|
42
43
|
};
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Set sort conditions on the table.
|
|
47
|
+
* @param table Valuehelp table instance
|
|
48
|
+
* @param properties PropertyInfo array
|
|
49
|
+
*/
|
|
50
|
+
ODataTableDelegate.setSortConditions = function (table, properties) {
|
|
51
|
+
const sortConditionsCD = table.data("sortConditions");
|
|
52
|
+
const rawSortConditions = CommonHelper.parseCustomData(sortConditionsCD);
|
|
53
|
+
if (rawSortConditions?.sorters) {
|
|
54
|
+
rawSortConditions.sorters.forEach(sortCondition => {
|
|
55
|
+
const infoName = ODataTableDelegate.convertPropertyPathToInfoName(sortCondition.name, properties);
|
|
56
|
+
if (infoName && infoName !== sortCondition.name) {
|
|
57
|
+
sortCondition.name = infoName;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
table.setSortConditions({
|
|
61
|
+
...rawSortConditions
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Convert a property path to its corresponding info name.
|
|
68
|
+
* @param propertyPath Property path to be converted.
|
|
69
|
+
* @param properties Table PropertyInfo array
|
|
70
|
+
* @returns Property info name if found, otherwise returns the original property path.
|
|
71
|
+
*/
|
|
72
|
+
ODataTableDelegate.convertPropertyPathToInfoName = function (propertyPath, properties) {
|
|
73
|
+
const propertyInfo = properties.find(column => {
|
|
74
|
+
return !column.propertyInfos && column.path === propertyPath;
|
|
75
|
+
});
|
|
76
|
+
return propertyInfo?.key ?? propertyPath;
|
|
77
|
+
};
|
|
43
78
|
ODataTableDelegate.createInternalBindingContext = function (table) {
|
|
44
79
|
let dialog = table;
|
|
45
80
|
while (dialog && !dialog.isA("sap.ui.mdc.valuehelp.Dialog")) {
|
|
@@ -353,6 +388,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/CommonUti
|
|
|
353
388
|
* @param existingColumns The list of columns created for properties defined on the Value List.
|
|
354
389
|
* @param sortRestrictionsInfo An object containing the sort restriction information
|
|
355
390
|
* @param filterRestrictionsInfo An object containing the filter restriction information
|
|
391
|
+
* @param caseSensitive
|
|
356
392
|
* @returns The array of properties created.
|
|
357
393
|
* @private
|
|
358
394
|
*/
|
|
@@ -428,4 +464,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/CommonUti
|
|
|
428
464
|
}
|
|
429
465
|
return ODataTableDelegate;
|
|
430
466
|
}, false);
|
|
431
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPRGF0YVRhYmxlRGVsZWdhdGUiLCJPYmplY3QiLCJhc3NpZ24iLCJUYWJsZURlbGVnYXRlIiwiZmV0Y2hQcm9wZXJ0aWVzIiwidGFibGUiLCJtb2RlbCIsIl9nZXRNb2RlbCIsInByb3BlcnRpZXMiLCJfY3JlYXRlUHJvcGVydHlJbmZvcyIsImNyZWF0ZUludGVybmFsQmluZGluZ0NvbnRleHQiLCJNYWNyb3NEZWxlZ2F0ZVV0aWwiLCJzZXRDYWNoZWRQcm9wZXJ0aWVzIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzZXRQcm9wZXJ0eSIsImRpYWxvZyIsImlzQSIsImdldFBhcmVudCIsImludGVybmFsTW9kZWwiLCJnZXRNb2RlbCIsImludGVybmFsQmluZGluZ0NvbnRleHQiLCJuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0UGF0aCIsImdldFBhdGgiLCJnZXRJZCIsImdldFByb3BlcnR5IiwibmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwic2V0QmluZGluZ0NvbnRleHQiLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMiLCJkYXRhTW9kZWxQcm9wZXJ0eVBhdGgiLCJkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHlQYXRoIiwiZ2V0QWRkaXRpb25hbFByb3BlcnR5IiwicmVsYXRlZFByb3BlcnRpZXMiLCJ0YXJnZXRPYmplY3QiLCJhZGRpdGlvbmFsUHJvcGVydHkiLCJhZGRpdGlvbmFsUHJvcGVydHlQYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsInByb3BlcnR5IiwicHJvcGVydHlQYXRoIiwidGV4dEFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlRleHQiLCJ0ZXh0QXJyYW5nZW1lbnQiLCJVSSIsIlRleHRBcnJhbmdlbWVudCIsInRvU3RyaW5nIiwiZGlzcGxheU1vZGUiLCJnZXREaXNwbGF5TW9kZSIsIm1ldGFkYXRhSW5mbyIsImdldERlbGVnYXRlIiwicGF5bG9hZCIsImVudGl0eVNldFBhdGgiLCJjb2xsZWN0aW9uTmFtZSIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInJlcXVlc3RPYmplY3QiLCJ0aGVuIiwiZW50aXR5U2V0QW5ub3RhdGlvbnMiLCJzb3J0UmVzdHJpY3Rpb25zSW5mbyIsImdldFNvcnRSZXN0cmljdGlvbnNJbmZvIiwiZmlsdGVyUmVzdHJpY3Rpb25zIiwiZmlsdGVyUmVzdHJpY3Rpb25zSW5mbyIsImdldEZpbHRlclJlc3RyaWN0aW9uc0luZm8iLCJmaWx0ZXJGdW5jdGlvbnMiLCJjYXNlU2Vuc2l0aXZlIiwiTW9kZWxIZWxwZXIiLCJpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJjdXN0b21EYXRhRm9yQ29sdW1ucyIsImdldEN1c3RvbURhdGEiLCJwcm9wZXJ0aWVzVG9CZUNyZWF0ZWQiLCJkYXRhTW9kZWxFbnRpdHlQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0Q29udGV4dCIsImN1c3RvbURhdGEiLCJmb3JFYWNoIiwiY29sdW1uRGVmIiwidHlwZUNvbmZpZyIsImlzVHlwZUZpbHRlcmFibGUiLCIkVHlwZSIsImdldFR5cGVNYXAiLCJnZXRUeXBlQ29uZmlnIiwiVHlwZU1hcCIsInByb3BlcnR5SW5mbyIsImtleSIsInBhdGgiLCJsYWJlbCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwidGFyZ2V0UHJvcGVydHlQYXRoIiwidHlwZSIsInByb3BlcnR5VHlwZUNvbmZpZyIsImZvcm1hdE9wdGlvbnMiLCJjb25zdHJhaW50cyIsInJlbGF0ZWRQcm9wZXJ0aWVzSW5mbyIsInJlbGF0ZWRQcm9wZXJ0eVBhdGhzIiwia2V5cyIsImxlbmd0aCIsInByb3BlcnR5SW5mb3MiLCJmaW5kIiwiZGF0YVR5cGUiLCJjbGFzc05hbWUiLCJzb3J0YWJsZSIsImlzU29ydGFibGVQcm9wZXJ0eSIsImZpbHRlcmFibGUiLCJpc0ZpbHRlcmFibGVQcm9wZXJ0eSIsIm1heENvbmRpdGlvbnMiLCJnZXRQcm9wZXJ0eU1heENvbmRpdGlvbnMiLCJwdXNoIiwicmVsYXRlZENvbHVtbnMiLCJjcmVhdGVSZWxhdGVkUHJvcGVydGllcyIsImNvbmNhdCIsInVwZGF0ZUJpbmRpbmdJbmZvIiwibWRjVGFibGUiLCJiaW5kaW5nSW5mbyIsImFwcGx5IiwiY29sbGVjdGlvblBhdGgiLCJwYXJhbWV0ZXJzIiwiZmlsdGVyQmFyIiwiRWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiZ2V0RmlsdGVyIiwiaXNGaWx0ZXJFbmFibGVkIiwiaXNGaWx0ZXJpbmdFbmFibGVkIiwiY29uZGl0aW9ucyIsImlubmVyRmlsdGVySW5mbyIsIm91dGVyRmlsdGVySW5mbyIsImZpbHRlcnMiLCJ0YWJsZVByb3BlcnRpZXMiLCJnZXRDYWNoZWRQcm9wZXJ0aWVzIiwiZ2V0Q29uZGl0aW9ucyIsIkZpbHRlclV0aWwiLCJnZXRGaWx0ZXJJbmZvIiwiaXNUcmVlVGFibGUiLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCIkJGFnZ3JlZ2F0aW9uIiwiZXhwYW5kVG8iLCJpbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJwYXJhbWV0ZXJOYW1lcyIsIkRlbGVnYXRlVXRpbCIsImdldFBhcmFtZXRlck5hbWVzIiwiX3VwZGF0ZVByb3BlcnR5SW5mbyIsInBhcmFtZXRlclBhdGgiLCJnZXRQYXJhbWV0ZXJzSW5mbyIsIiRzZWFyY2giLCJDb21tb25VdGlscyIsIm5vcm1hbGl6ZVNlYXJjaFRlcm0iLCJnZXRTZWFyY2giLCJ1bmRlZmluZWQiLCJzZWFyY2giLCJOdW1iZXIiLCJNQVhfU0FGRV9JTlRFR0VSIiwiJCRzaGFyZWRSZXF1ZXN0IiwiX2FwcGx5RGVmYXVsdFNvcnRpbmciLCIkc2VsZWN0IiwicmVkdWNlIiwicXVlcnkiLCJpbmNsdWRlcyIsIiRjb3VudCIsImlzRHJhZnRTdXBwb3J0ZWQiLCJGaWx0ZXIiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhdHRhY2hFdmVudE9uY2UiLCJzb3J0ZXIiLCJkZWZhdWx0U29ydFByb3BlcnR5TmFtZSIsIlNvcnRlciIsImFUYWJsZVByb3BlcnRpZXMiLCJvTURDVGFibGUiLCJtQ29uZGl0aW9ucyIsIm9NZXRhZGF0YUluZm8iLCJhQ29uZGl0aW9uS2V5Iiwib01ldGFNb2RlbCIsImNvbmRpdGlvbktleSIsImNvbmRpdGlvbktleVR5cGUiLCJnZXRPYmplY3QiLCJ0YWJsZVByb3BlcnR5IiwiaW5kZXgiLCJmaW5kSW5kZXgiLCJvQ29sdW1uRGVmIiwidHlwZUluc3RhbmNlIiwiYmFzZVR5cGUiLCJvRm9ybWF0T3B0aW9ucyIsIm9Db25zdHJhaW50cyIsInVwZGF0ZUJpbmRpbmciLCJvVGFibGUiLCJvQmluZGluZ0luZm8iLCJvQmluZGluZyIsImJOZWVkTWFudWFsUmVmcmVzaCIsIm9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Iiwic01hbnVhbFVwZGF0ZVByb3BlcnR5S2V5Iiwic0xhc3RTZWFyY2giLCJzTGFzdEZpbHRlciIsImJQZW5kaW5nTWFudWFsVXBkYXRlIiwibGFzdFNlYXJjaCIsImxhc3RGaWx0ZXIiLCJvUm93QmluZGluZyIsImdldFJvd0JpbmRpbmciLCJkZWVwRXF1YWwiLCJyZXF1ZXN0UmVmcmVzaCIsImdldEdyb3VwSWQiLCJmaW5hbGx5IiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsImZpcmVFdmVudCIsImV4aXN0aW5nQ29sdW1ucyIsInJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXAiLCJyZWxhdGVkQ29sdW1uIiwiY29sdW1uIiwibmV3TmFtZSIsInZhbHVlSGVscENvbHVtblR5cGVDb25maWciLCJ2YWx1ZUhlbHBUYWJsZUNvbHVtbiIsImdldExhYmVsIiwibWFwIiwiY29sdW1uTmFtZSIsImhhc093blByb3BlcnR5IiwiaXNNdWx0aVZhbHVlRmlsdGVyRXhwcmVzc2lvbiIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgiLCJkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlRGVsZWdhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBFcXVhbFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRUeXBlQ29uZmlnIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyUmVzdHJpY3Rpb25zSW5mb1R5cGUsIFNvcnRSZXN0cmljdGlvbnNJbmZvVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFNb2RlbEZ1bmN0aW9uXCI7XG5pbXBvcnQgeyBnZXRGaWx0ZXJSZXN0cmljdGlvbnNJbmZvLCBnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbywgaXNNdWx0aVZhbHVlRmlsdGVyRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFNb2RlbEZ1bmN0aW9uXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoLCBnZXRUYXJnZXRPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0RGlzcGxheU1vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EaXNwbGF5TW9kZUZvcm1hdHRlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCxcblx0Z2V0TGFiZWxcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGVmYXVsdFR5cGVGb3JFZG1UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3R5cGUvRURNXCI7XG5pbXBvcnQgeyBpc1R5cGVGaWx0ZXJhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3R5cGUvRURNXCI7XG5pbXBvcnQgdHlwZSB7IENvbGxlY3Rpb25CaW5kaW5nSW5mbywgRmlsdGVySW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbGxlY3Rpb25CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IE1hY3Jvc0RlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyQ29uZGl0aW9ucyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJIZWxwZXJcIjtcbmltcG9ydCB7IGdldFBhdGgsIGlzRmlsdGVyYWJsZVByb3BlcnR5LCBpc1NvcnRhYmxlUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVGFibGVEZWxlZ2F0ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgTURDVGFibGVQcm9wZXJ0eUluZm8gYXMgUHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IFRhYmxlRGVsZWdhdGUgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvVGFibGVEZWxlZ2F0ZVwiO1xuaW1wb3J0IFR5cGVNYXAgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvVHlwZU1hcFwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC91dGlsL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IEZpbHRlclV0aWwgZnJvbSBcInNhcC91aS9tZGMvdXRpbC9GaWx0ZXJVdGlsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcblxudHlwZSBDb21wbGV4UHJvcGVydHlNYXAgPSBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT47XG5cbnR5cGUgTWRjVGFibGVEZWxlZ2F0ZSA9IHsgbmFtZTogc3RyaW5nOyBwYXlsb2FkOiBQYXlsb2FkIH07XG5cbnR5cGUgUGF5bG9hZCA9IHtcblx0Y29sbGVjdGlvbk5hbWU/OiBzdHJpbmc7XG5cdGNvbGxlY3Rpb25QYXRoPzogc3RyaW5nO1xuXHRkZWZhdWx0U29ydFByb3BlcnR5TmFtZT86IHN0cmluZztcblx0aGllcmFyY2h5UXVhbGlmaWVyPzogc3RyaW5nO1xuXHRpbml0aWFsRXhwYW5zaW9uTGV2ZWw/OiBudW1iZXI7XG59O1xuLyoqXG4gKiBUZXN0IGRlbGVnYXRlIGZvciBPRGF0YSBWNC5cbiAqL1xuY29uc3QgT0RhdGFUYWJsZURlbGVnYXRlID0gT2JqZWN0LmFzc2lnbih7fSwgVGFibGVEZWxlZ2F0ZSk7XG5cbi8qKlxuICogRmV0Y2hlcyB0aGUgcmVsZXZhbnQgbWV0YWRhdGEgZm9yIHRoZSB0YWJsZSBhbmQgcmV0dXJucyBwcm9wZXJ0eSBpbmZvIGFycmF5LlxuICogQHBhcmFtIHRhYmxlIEluc3RhbmNlIG9mIHRoZSBNREN0YWJsZVxuICogQHJldHVybnMgQXJyYXkgb2YgcHJvcGVydHkgaW5mb1xuICovXG5PRGF0YVRhYmxlRGVsZWdhdGUuZmV0Y2hQcm9wZXJ0aWVzID0gYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8UHJvcGVydHlJbmZvPiB7XG5cdGNvbnN0IG1vZGVsID0gYXdhaXQgdGhpcy5fZ2V0TW9kZWwodGFibGUpO1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gYXdhaXQgdGhpcy5fY3JlYXRlUHJvcGVydHlJbmZvcyh0YWJsZSwgbW9kZWwpO1xuXHRPRGF0YVRhYmxlRGVsZWdhdGUuY3JlYXRlSW50ZXJuYWxCaW5kaW5nQ29udGV4dCh0YWJsZSk7XG5cdE1hY3Jvc0RlbGVnYXRlVXRpbC5zZXRDYWNoZWRQcm9wZXJ0aWVzKHRhYmxlLCBwcm9wZXJ0aWVzKTtcblx0KHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgQ29udGV4dCkuc2V0UHJvcGVydHkoXCJ0YWJsZVByb3BlcnRpZXNBdmFpbGFibGVcIiwgdHJ1ZSk7XG5cdHJldHVybiBwcm9wZXJ0aWVzO1xufTtcblxuT0RhdGFUYWJsZURlbGVnYXRlLmNyZWF0ZUludGVybmFsQmluZGluZ0NvbnRleHQgPSBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogdm9pZCB7XG5cdGxldCBkaWFsb2c6IE1hbmFnZWRPYmplY3QgfCBudWxsID0gdGFibGU7XG5cdHdoaWxlIChkaWFsb2cgJiYgIWRpYWxvZy5pc0EoXCJzYXAudWkubWRjLnZhbHVlaGVscC5EaWFsb2dcIikpIHtcblx0XHRkaWFsb2cgPSAoZGlhbG9nIGFzIE1hbmFnZWRPYmplY3QpLmdldFBhcmVudCgpO1xuXHR9XG5cblx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHRhYmxlLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXG5cdGlmIChkaWFsb2cgJiYgaW50ZXJuYWxNb2RlbCkge1xuXHRcdGNvbnN0IGludGVybmFsQmluZGluZ0NvbnRleHQgPSBkaWFsb2cuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRsZXQgbmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dFBhdGg7XG5cdFx0aWYgKGludGVybmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdG5ld0ludGVybmFsQmluZGluZ0NvbnRleHRQYXRoID0gaW50ZXJuYWxCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkgKyBgOjpWSERpYWxvZzo6JHtkaWFsb2cuZ2V0SWQoKX06OnRhYmxlYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dFBhdGggPSBgL2J1aWxkaW5nYmxvY2tzLyR7dGFibGUuZ2V0SWQoKX1gO1xuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9idWlsZGluZ2Jsb2Nrc1wiLCB7IC4uLmludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvYnVpbGRpbmdibG9ja3NcIikgfSk7XG5cdFx0fVxuXHRcdGNvbnN0IG5ld0ludGVybmFsQmluZGluZ0NvbnRleHQgPSBpbnRlcm5hbE1vZGVsLmJpbmRDb250ZXh0KG5ld0ludGVybmFsQmluZGluZ0NvbnRleHRQYXRoKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHR0YWJsZS5zZXRCaW5kaW5nQ29udGV4dChuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0LCBcImludGVybmFsXCIpO1xuXHR9XG59O1xuXG4vKipcbiAqIENvbGxlY3QgcmVsYXRlZCBwcm9wZXJ0aWVzIGZyb20gYSBwcm9wZXJ0eSdzIGFubm90YXRpb25zLlxuICogQHBhcmFtIGRhdGFNb2RlbFByb3BlcnR5UGF0aCBUaGUgbW9kZWwgb2JqZWN0IHBhdGggb2YgdGhlIHByb3BlcnR5LlxuICogQHJldHVybnMgVGhlIHJlbGF0ZWQgcHJvcGVydGllcyB0aGF0IHdlcmUgaWRlbnRpZmllZC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyhkYXRhTW9kZWxQcm9wZXJ0eVBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KTogQ29tcGxleFByb3BlcnR5TWFwIHtcblx0Y29uc3QgZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5UGF0aCA9IGdldEFkZGl0aW9uYWxQcm9wZXJ0eShkYXRhTW9kZWxQcm9wZXJ0eVBhdGgpO1xuXHRjb25zdCByZWxhdGVkUHJvcGVydGllczogQ29tcGxleFByb3BlcnR5TWFwID0ge307XG5cdGlmIChkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHlQYXRoPy50YXJnZXRPYmplY3QpIHtcblx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHkgPSBkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHlQYXRoLnRhcmdldE9iamVjdDtcblx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHlQYXRoLCB0cnVlKTtcblxuXHRcdGNvbnN0IHByb3BlcnR5ID0gZGF0YU1vZGVsUHJvcGVydHlQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKGRhdGFNb2RlbFByb3BlcnR5UGF0aCwgdHJ1ZSk7XG5cblx0XHRjb25zdCB0ZXh0QW5ub3RhdGlvbiA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlRleHQsXG5cdFx0XHR0ZXh0QXJyYW5nZW1lbnQgPSB0ZXh0QW5ub3RhdGlvbj8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQ/LnRvU3RyaW5nKCksXG5cdFx0XHRkaXNwbGF5TW9kZSA9IHRleHRBbm5vdGF0aW9uICYmIHRleHRBcnJhbmdlbWVudCAmJiBnZXREaXNwbGF5TW9kZShwcm9wZXJ0eSk7XG5cblx0XHRpZiAoZGlzcGxheU1vZGUgPT09IFwiRGVzY3JpcHRpb25cIikge1xuXHRcdFx0cmVsYXRlZFByb3BlcnRpZXNbYWRkaXRpb25hbFByb3BlcnR5UGF0aF0gPSBhZGRpdGlvbmFsUHJvcGVydHk7XG5cdFx0fSBlbHNlIGlmICgoZGlzcGxheU1vZGUgJiYgZGlzcGxheU1vZGUgIT09IFwiVmFsdWVcIikgfHwgIXRleHRBbm5vdGF0aW9uKSB7XG5cdFx0XHRyZWxhdGVkUHJvcGVydGllc1twcm9wZXJ0eVBhdGhdID0gcHJvcGVydHk7XG5cdFx0XHRyZWxhdGVkUHJvcGVydGllc1thZGRpdGlvbmFsUHJvcGVydHlQYXRoXSA9IGFkZGl0aW9uYWxQcm9wZXJ0eTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHJlbGF0ZWRQcm9wZXJ0aWVzO1xufVxuXG5PRGF0YVRhYmxlRGVsZWdhdGUuX2NyZWF0ZVByb3BlcnR5SW5mb3MgPSBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBtb2RlbDogT0RhdGFNb2RlbCk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+IHtcblx0Y29uc3QgbWV0YWRhdGFJbmZvID0gKHRhYmxlLmdldERlbGVnYXRlKCkgYXMgeyBwYXlsb2FkOiBQYXlsb2FkIH0pLnBheWxvYWQ7XG5cdGNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdID0gW107XG5cdGNvbnN0IGVudGl0eVNldFBhdGggPSBgLyR7bWV0YWRhdGFJbmZvLmNvbGxlY3Rpb25OYW1lfWA7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXG5cdHJldHVybiBtZXRhTW9kZWwucmVxdWVzdE9iamVjdChgJHtlbnRpdHlTZXRQYXRofUBgKS50aGVuKGZ1bmN0aW9uIChlbnRpdHlTZXRBbm5vdGF0aW9uczogTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbikge1xuXHRcdGNvbnN0IHNvcnRSZXN0cmljdGlvbnNJbmZvID0gZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8oZW50aXR5U2V0QW5ub3RhdGlvbnMpO1xuXHRcdGNvbnN0IGZpbHRlclJlc3RyaWN0aW9ucyA9IGVudGl0eVNldEFubm90YXRpb25zW1wiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zXCJdO1xuXHRcdGNvbnN0IGZpbHRlclJlc3RyaWN0aW9uc0luZm8gPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnNJbmZvKGZpbHRlclJlc3RyaWN0aW9ucyk7XG5cdFx0Y29uc3QgZmlsdGVyRnVuY3Rpb25zID0gZW50aXR5U2V0QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJGdW5jdGlvbnNcIl07XG5cdFx0Y29uc3QgY2FzZVNlbnNpdGl2ZSA9IE1vZGVsSGVscGVyLmlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShtZXRhTW9kZWwsIGZpbHRlckZ1bmN0aW9ucyk7XG5cdFx0Y29uc3QgY3VzdG9tRGF0YUZvckNvbHVtbnMgPSBNYWNyb3NEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTx7XG5cdFx0XHRjdXN0b21EYXRhOiAoUHJvcGVydHlJbmZvICYgeyAkVHlwZToga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZSB9KVtdO1xuXHRcdH0+KHRhYmxlLCBcImNvbHVtbnNcIikhO1xuXHRcdGNvbnN0IHByb3BlcnRpZXNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+ID0ge307XG5cdFx0Y29uc3QgZGF0YU1vZGVsRW50aXR5UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cygodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKS5nZXRDb250ZXh0KGVudGl0eVNldFBhdGgpKTtcblx0XHRjdXN0b21EYXRhRm9yQ29sdW1ucy5jdXN0b21EYXRhLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbkRlZjogUHJvcGVydHlJbmZvICYgeyAkVHlwZToga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZSB9KSB7XG5cdFx0XHRsZXQgdHlwZUNvbmZpZyA9IGlzVHlwZUZpbHRlcmFibGUoY29sdW1uRGVmLiRUeXBlKVxuXHRcdFx0XHQ/IHRhYmxlLmdldFR5cGVNYXAoKS5nZXRUeXBlQ29uZmlnKGNvbHVtbkRlZi4kVHlwZSlcblx0XHRcdFx0OiBUeXBlTWFwLmdldFR5cGVDb25maWcoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIik7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyA9IHtcblx0XHRcdFx0a2V5OiBjb2x1bW5EZWYucGF0aCEsXG5cdFx0XHRcdGxhYmVsOiBjb2x1bW5EZWYubGFiZWxcblx0XHRcdH07XG5cblx0XHRcdGNvbnN0IGRhdGFNb2RlbFByb3BlcnR5UGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5PihkYXRhTW9kZWxFbnRpdHlQYXRoLCBjb2x1bW5EZWYucGF0aCk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eSA9IGRhdGFNb2RlbFByb3BlcnR5UGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdFx0XHRpZiAocHJvcGVydHkpIHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0UHJvcGVydHlQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxQcm9wZXJ0eVBhdGgsIHRydWUpO1xuXHRcdFx0XHRpZiAoaXNUeXBlRmlsdGVyYWJsZShwcm9wZXJ0eS50eXBlIGFzIGtleW9mIHR5cGVvZiBEZWZhdWx0VHlwZUZvckVkbVR5cGUpKSB7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlUeXBlQ29uZmlnID0gZ2V0VHlwZUNvbmZpZyhwcm9wZXJ0eSk7XG5cdFx0XHRcdFx0dHlwZUNvbmZpZyA9XG5cdFx0XHRcdFx0XHRUeXBlTWFwLmdldFR5cGVDb25maWcoXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID8/IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHRcdFx0XHRcdCkgPz8gdHlwZUNvbmZpZztcblx0XHRcdFx0fVxuXHRcdFx0XHQvL0NoZWNrIGlmIHRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgcHJvcGVydHkgbGlua2VkIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIFVuaXQsIEN1cnJlbmN5LCBUaW1lem9uZSBvciB0ZXh0QXJyYW5nZW1lbnRcblx0XHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnRpZXNJbmZvID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKGRhdGFNb2RlbFByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eVBhdGhzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbyk7XG5cblx0XHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0eVBhdGhzLmxlbmd0aCkge1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mby5wcm9wZXJ0eUluZm9zID0gcmVsYXRlZFByb3BlcnR5UGF0aHM7XG5cdFx0XHRcdFx0Ly8gQ29sbGVjdCBpbmZvcm1hdGlvbiBvZiByZWxhdGVkIGNvbHVtbnMgdG8gYmUgY3JlYXRlZC5cblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydHlQYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0aWVzVG9CZUNyZWF0ZWRbcGF0aF0gPSByZWxhdGVkUHJvcGVydGllc0luZm9bcGF0aF07XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Ly8gQWxzbyBhZGQgcHJvcGVydHkgZm9yIHRoZSBpbk91dCBQYXJhbWV0ZXJzIG9uIHRoZSBWYWx1ZUhlbHAgd2hlbiB0ZXh0QXJyYW5nZW1lbnQgaXMgc2V0IHRvICNUZXh0T25seVxuXHRcdFx0XHRcdC8vIEl0IHdpbGwgbm90IGJlIGxpbmtlZCB0byB0aGUgY29tcGxleCBQcm9wZXJ0eSAoQkNQIDIyNzAxNDExNTQpXG5cdFx0XHRcdFx0aWYgKCFyZWxhdGVkUHJvcGVydHlQYXRocy5maW5kKChwYXRoKSA9PiByZWxhdGVkUHJvcGVydGllc0luZm9bcGF0aF0gPT09IHByb3BlcnR5KSkge1xuXHRcdFx0XHRcdFx0cHJvcGVydGllc1RvQmVDcmVhdGVkW3RhcmdldFByb3BlcnR5UGF0aF0gPSBwcm9wZXJ0eTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvLnBhdGggPSBjb2x1bW5EZWYucGF0aDtcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZGF0YVR5cGUgPSB0eXBlQ29uZmlnLmNsYXNzTmFtZTtcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uY29uc3RyYWludHMgPSBjb2x1bW5EZWYuY29uc3RyYWludHM7XG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvLmZvcm1hdE9wdGlvbnMgPSBjb2x1bW5EZWYuZm9ybWF0T3B0aW9ucztcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uc29ydGFibGUgPSBpc1NvcnRhYmxlUHJvcGVydHkoc29ydFJlc3RyaWN0aW9uc0luZm8sIGNvbHVtbkRlZik7XG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvLmZpbHRlcmFibGUgPSBpc0ZpbHRlcmFibGVQcm9wZXJ0eShmaWx0ZXJSZXN0cmljdGlvbnNJbmZvLCBjb2x1bW5EZWYpO1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mby5tYXhDb25kaXRpb25zID0gZ2V0UHJvcGVydHlNYXhDb25kaXRpb25zKGZpbHRlclJlc3RyaWN0aW9uc0luZm8sIGNvbHVtbkRlZik7XG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvLmNhc2VTZW5zaXRpdmUgPSBjYXNlU2Vuc2l0aXZlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwcm9wZXJ0eUluZm8ucGF0aCA9IGNvbHVtbkRlZi5wYXRoO1xuXHRcdFx0XHRwcm9wZXJ0eUluZm8uY2FzZVNlbnNpdGl2ZSA9IGNhc2VTZW5zaXRpdmU7XG5cdFx0XHRcdHByb3BlcnR5SW5mby5kYXRhVHlwZSA9IHR5cGVDb25maWcuY2xhc3NOYW1lO1xuXHRcdFx0fVxuXHRcdFx0cHJvcGVydGllcy5wdXNoKHByb3BlcnR5SW5mbyk7XG5cdFx0fSk7XG5cdFx0Y29uc3QgcmVsYXRlZENvbHVtbnMgPSBjcmVhdGVSZWxhdGVkUHJvcGVydGllcyhcblx0XHRcdHByb3BlcnRpZXNUb0JlQ3JlYXRlZCxcblx0XHRcdHByb3BlcnRpZXMsXG5cdFx0XHRzb3J0UmVzdHJpY3Rpb25zSW5mbyxcblx0XHRcdGZpbHRlclJlc3RyaWN0aW9uc0luZm8sXG5cdFx0XHRjYXNlU2Vuc2l0aXZlXG5cdFx0KTtcblx0XHRyZXR1cm4gcHJvcGVydGllcy5jb25jYXQocmVsYXRlZENvbHVtbnMpO1xuXHR9KTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgYmluZGluZyBpbmZvIHdpdGggdGhlIHJlbGV2YW50IHBhdGggYW5kIG1vZGVsIGZyb20gdGhlIG1ldGFkYXRhLlxuICogQHBhcmFtIG1kY1RhYmxlIFRoZSBNRENUYWJsZSBpbnN0YW5jZVxuICogQHBhcmFtIGJpbmRpbmdJbmZvIFRoZSBiaW5kaW5nSW5mbyBvZiB0aGUgdGFibGVcbiAqL1xuT0RhdGFUYWJsZURlbGVnYXRlLnVwZGF0ZUJpbmRpbmdJbmZvID0gZnVuY3Rpb24gKG1kY1RhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbyk6IHZvaWQge1xuXHRUYWJsZURlbGVnYXRlLnVwZGF0ZUJpbmRpbmdJbmZvLmFwcGx5KHRoaXMsIFttZGNUYWJsZSwgYmluZGluZ0luZm9dKTtcblxuXHRjb25zdCBtZXRhZGF0YUluZm8gPSAobWRjVGFibGUuZ2V0RGVsZWdhdGUoKSBhcyBNZGNUYWJsZURlbGVnYXRlKS5wYXlsb2FkO1xuXG5cdGlmIChtZXRhZGF0YUluZm8pIHtcblx0XHRiaW5kaW5nSW5mby5wYXRoID0gYmluZGluZ0luZm8/LnBhdGggfHwgbWV0YWRhdGFJbmZvLmNvbGxlY3Rpb25QYXRoIHx8IGAvJHttZXRhZGF0YUluZm8uY29sbGVjdGlvbk5hbWV9YDtcblx0fVxuXG5cdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMgPSBiaW5kaW5nSW5mby5wYXJhbWV0ZXJzIHx8IHt9O1xuXG5cdGNvbnN0IGZpbHRlckJhciA9IEVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQobWRjVGFibGUuZ2V0RmlsdGVyKCkpIGFzIEZpbHRlckJhcixcblx0XHRpc0ZpbHRlckVuYWJsZWQgPSBtZGNUYWJsZS5pc0ZpbHRlcmluZ0VuYWJsZWQoKTtcblx0bGV0IGNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT47XG5cdGxldCBpbm5lckZpbHRlckluZm8sIG91dGVyRmlsdGVySW5mbzogRmlsdGVySW5mbztcblx0Y29uc3QgZmlsdGVycyA9IFtdO1xuXHRjb25zdCB0YWJsZVByb3BlcnRpZXMgPSBNYWNyb3NEZWxlZ2F0ZVV0aWwuZ2V0Q2FjaGVkUHJvcGVydGllcyhtZGNUYWJsZSkgYXMgdW5rbm93biBhcyBQcm9wZXJ0eUluZm9bXTtcblxuXHQvL1RPRE86IGNvbnNpZGVyIGEgbWVjaGFuaXNtICgnRmlsdGVyTWVyZ2VVdGlsJyBvciBlbmhhbmNlICdGaWx0ZXJVdGlsJykgdG8gYWxsb3cgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBkaWZmZXJlbnQgZmlsdGVycylcblx0aWYgKGlzRmlsdGVyRW5hYmxlZCkge1xuXHRcdGNvbmRpdGlvbnMgPSBtZGNUYWJsZS5nZXRDb25kaXRpb25zKCk7XG5cdFx0aW5uZXJGaWx0ZXJJbmZvID0gRmlsdGVyVXRpbC5nZXRGaWx0ZXJJbmZvKG1kY1RhYmxlLCBjb25kaXRpb25zLCB0YWJsZVByb3BlcnRpZXMhLCBbXSkgYXMgRmlsdGVySW5mbztcblx0XHRpZiAoaW5uZXJGaWx0ZXJJbmZvLmZpbHRlcnMpIHtcblx0XHRcdGZpbHRlcnMucHVzaChpbm5lckZpbHRlckluZm8uZmlsdGVycyk7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGlzVHJlZVRhYmxlID0gISFtZXRhZGF0YUluZm8/LmhpZXJhcmNoeVF1YWxpZmllcjtcblx0aWYgKGlzVHJlZVRhYmxlKSB7XG5cdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kJGFnZ3JlZ2F0aW9uID0ge1xuXHRcdFx0aGllcmFyY2h5UXVhbGlmaWVyOiBtZXRhZGF0YUluZm8uaGllcmFyY2h5UXVhbGlmaWVyLFxuXHRcdFx0ZXhwYW5kVG86IG1ldGFkYXRhSW5mby5pbml0aWFsRXhwYW5zaW9uTGV2ZWxcblx0XHR9O1xuXHR9XG5cdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRjb25kaXRpb25zID0gZmlsdGVyQmFyLmdldENvbmRpdGlvbnMoKTtcblx0XHRpZiAoY29uZGl0aW9ucykge1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVyTmFtZXMgPSBEZWxlZ2F0ZVV0aWwuZ2V0UGFyYW1ldGVyTmFtZXMoZmlsdGVyQmFyKTtcblx0XHRcdC8vIFRoZSB0YWJsZSBwcm9wZXJ0aWVzIG5lZWRzIHRvIHVwZGF0ZWQgd2l0aCB0aGUgZmlsdGVyIGZpZWxkIGlmIG5vIFNlbGVjdGlvbmZpZWxkcyBhcmUgYW5ub3RhdGVkIGFuZCBub3QgcGFydCBhcyB2YWx1ZSBoZWxwIHBhcmFtZXRlclxuXHRcdFx0T0RhdGFUYWJsZURlbGVnYXRlLl91cGRhdGVQcm9wZXJ0eUluZm8odGFibGVQcm9wZXJ0aWVzLCBtZGNUYWJsZSwgY29uZGl0aW9ucywgbWV0YWRhdGFJbmZvKTtcblx0XHRcdG91dGVyRmlsdGVySW5mbyA9IEZpbHRlclV0aWwuZ2V0RmlsdGVySW5mbyhmaWx0ZXJCYXIsIGNvbmRpdGlvbnMsIHRhYmxlUHJvcGVydGllcyEsIHBhcmFtZXRlck5hbWVzKTtcblxuXHRcdFx0aWYgKG91dGVyRmlsdGVySW5mby5maWx0ZXJzKSB7XG5cdFx0XHRcdGZpbHRlcnMucHVzaChvdXRlckZpbHRlckluZm8uZmlsdGVycyk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHBhcmFtZXRlclBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0UGFyYW1ldGVyc0luZm8oZmlsdGVyQmFyLCBjb25kaXRpb25zKTtcblx0XHRcdGlmIChwYXJhbWV0ZXJQYXRoKSB7XG5cdFx0XHRcdGJpbmRpbmdJbmZvLnBhdGggPSBwYXJhbWV0ZXJQYXRoO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIWlzVHJlZVRhYmxlKSB7XG5cdFx0XHQvLyBnZXQgdGhlIGJhc2ljIHNlYXJjaFxuXHRcdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoID0gQ29tbW9uVXRpbHMubm9ybWFsaXplU2VhcmNoVGVybShmaWx0ZXJCYXIuZ2V0U2VhcmNoKCkpIHx8IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKGZpbHRlckJhci5nZXRTZWFyY2goKSkge1xuXHRcdFx0aWYgKCFiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkYWdncmVnYXRpb24pIHtcblx0XHRcdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kJGFnZ3JlZ2F0aW9uID0ge307XG5cdFx0XHR9XG5cdFx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkYWdncmVnYXRpb24uc2VhcmNoID0gQ29tbW9uVXRpbHMubm9ybWFsaXplU2VhcmNoVGVybShmaWx0ZXJCYXIuZ2V0U2VhcmNoKCkpO1xuXHRcdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kJGFnZ3JlZ2F0aW9uLmV4cGFuZFRvID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG5cdFx0fVxuXHR9XG5cdC8vIEJDUDogMjM3MDA3ODY2MCAtIHNoYXJlZFJlcXVlc3QgaXMgc2V0IHRvIGZhbHNlIGluIG9yZGVyIHRvIGF2b2lkIGRlYWRsb2NrIHNpdHVhdGlvbiB3aGVyZSB0aGUgdGhlIG9EYXRhXG5cdC8vIG1vZGVsIGNhY2hlIGlzIG5laXRoZXIgY2hhbmdlYWJsZSAocmVzdWx0IG9mIExpc3RCaW5kaW5nLiQkc2hhcmVkUmVxdWVzdCA9IHRydWUpIG5vciBkZWxldGFibGVcblx0Ly8gKHJlc3VsdCBvZiBDb250ZXh0LnNldFNlbGVjdGVkKHRydWUpIC0+IExpc3RCaW5kaW5nLmtlZXBBbGl2ZSlcblx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kJHNoYXJlZFJlcXVlc3QgPSBmYWxzZTtcblxuXHR0aGlzLl9hcHBseURlZmF1bHRTb3J0aW5nKGJpbmRpbmdJbmZvLCAobWRjVGFibGUuZ2V0RGVsZWdhdGUoKSBhcyBNZGNUYWJsZURlbGVnYXRlKS5wYXlsb2FkKTtcblx0Ly8gYWRkIHNlbGVjdCB0byBiaW5kaW5nSW5mbyAoQkNQIDIxNzAxNjMwMTIpXG5cdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlbGVjdCA9IHRhYmxlUHJvcGVydGllcz8ucmVkdWNlKGZ1bmN0aW9uIChxdWVyeTogc3RyaW5nLCBwcm9wZXJ0eTogUHJvcGVydHlJbmZvKSB7XG5cdFx0Ly8gTmF2aWdhdGlvbiBwcm9wZXJ0aWVzIChyZXByZXNlbnRlZCBieSBYL1kpIHNob3VsZCBub3QgYmUgYWRkZWQgdG8gJHNlbGVjdC5cblx0XHQvLyBUb0RvIDogVGhleSBzaG91bGQgYmUgYWRkZWQgYXMgJGV4cGFuZD1YKCRzZWxlY3Q9WSkgaW5zdGVhZFxuXHRcdGlmIChwcm9wZXJ0eS5wYXRoICYmICFwcm9wZXJ0eS5wYXRoLmluY2x1ZGVzKFwiL1wiKSkge1xuXHRcdFx0cXVlcnkgPSBxdWVyeSA/IGAke3F1ZXJ5fSwke3Byb3BlcnR5LnBhdGh9YCA6IHByb3BlcnR5LnBhdGg7XG5cdFx0fVxuXHRcdHJldHVybiBxdWVyeTtcblx0fSwgXCJcIik7XG5cblx0Ly8gQWRkICRjb3VudFxuXHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRjb3VudCA9IHRydWU7XG5cblx0Ly9JZiB0aGUgZW50aXR5IGlzIERyYWZ0RW5hYmxlZCBhZGQgYSBEcmFmdEZpbHRlclxuXHRpZiAoYmluZGluZ0luZm8ucGF0aCAmJiBNb2RlbEhlbHBlci5pc0RyYWZ0U3VwcG9ydGVkKG1kY1RhYmxlLmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLCBiaW5kaW5nSW5mby5wYXRoKSkge1xuXHRcdGZpbHRlcnMucHVzaChuZXcgRmlsdGVyKFwiSXNBY3RpdmVFbnRpdHlcIiwgRmlsdGVyT3BlcmF0b3IuRVEsIHRydWUpKTtcblx0fVxuXHRiaW5kaW5nSW5mby5maWx0ZXJzID0gbmV3IEZpbHRlcihmaWx0ZXJzIGFzIEZpbHRlcltdLCB0cnVlKTtcbn07XG5cbk9EYXRhVGFibGVEZWxlZ2F0ZS5nZXRUeXBlTWFwID0gZnVuY3Rpb24gKCk6IG9iamVjdCB7XG5cdHJldHVybiBUeXBlTWFwO1xufTtcblxuLyoqXG4gKiBHZXQgdGFibGUgTW9kZWwuXG4gKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG4gKiBAcmV0dXJucyBNb2RlbFxuICovXG5PRGF0YVRhYmxlRGVsZWdhdGUuX2dldE1vZGVsID0gYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8TW9kZWw+IHtcblx0Y29uc3QgbWV0YWRhdGFJbmZvID0gKHRhYmxlLmdldERlbGVnYXRlKCkgYXMgeyBwYXlsb2FkOiB7IG1vZGVsOiBzdHJpbmcgfSB9KS5wYXlsb2FkO1xuXHRsZXQgbW9kZWw6IE1vZGVsID0gdGFibGUuZ2V0TW9kZWwobWV0YWRhdGFJbmZvLm1vZGVsKSE7XG5cdGlmICghbW9kZWwpIHtcblx0XHRhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0dGFibGUuYXR0YWNoRXZlbnRPbmNlKFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIHJlc29sdmUpO1xuXHRcdH0pO1xuXHRcdG1vZGVsID0gdGFibGUuZ2V0TW9kZWwobWV0YWRhdGFJbmZvLm1vZGVsKSE7XG5cdH1cblx0cmV0dXJuIG1vZGVsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgZGVmYXVsdCBzb3J0IG9yZGVyIGlmIG5lZWRlZC4gVGhpcyBpcyBvbmx5IHRoZSBjYXNlIGlmIHRoZSByZXF1ZXN0IGlzIG5vdCBhICRzZWFyY2ggcmVxdWVzdFxuICogKG1lYW5zIHRoZSBwYXJhbWV0ZXIgJHNlYXJjaCBvZiB0aGUgYmluZGluZ0luZm8gaXMgdW5kZWZpbmVkKSBhbmQgaWYgYSBzb3J0IG9yZGVyIGhhcyBub3QgYmVlbiBzZXQgYWxyZWFkeSxcbiAqIGZvciBleGFtcGxlLCB1c2luZyBhIHByZXNlbnRhdGlvbiB2YXJpYW50IG9yIG1hbnVhbGx5IHNldCBieSB0aGUgdXNlci5cbiAqIEBwYXJhbSBiaW5kaW5nSW5mbyBUaGUgYmluZGluZ0luZm8gb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gcGF5bG9hZCBUaGUgcGF5bG9hZCBvZiB0aGUgVGFibGVEZWxlZ2F0ZVxuICovXG5PRGF0YVRhYmxlRGVsZWdhdGUuX2FwcGx5RGVmYXVsdFNvcnRpbmcgPSBmdW5jdGlvbiAoYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbywgcGF5bG9hZDogUGF5bG9hZCk6IHZvaWQge1xuXHRpZiAoXG5cdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycyAmJlxuXHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaCA9PSB1bmRlZmluZWQgJiZcblx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkYWdncmVnYXRpb24/LnNlYXJjaCA9PSB1bmRlZmluZWQgJiZcblx0XHRiaW5kaW5nSW5mby5zb3J0ZXIgJiZcblx0XHRiaW5kaW5nSW5mby5zb3J0ZXIubGVuZ3RoID09IDBcblx0KSB7XG5cdFx0Y29uc3QgZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUgPSBwYXlsb2FkID8gcGF5bG9hZC5kZWZhdWx0U29ydFByb3BlcnR5TmFtZSA6IHVuZGVmaW5lZDtcblx0XHRpZiAoZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUpIHtcblx0XHRcdGJpbmRpbmdJbmZvLnNvcnRlci5wdXNoKG5ldyBTb3J0ZXIoZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUsIGZhbHNlKSk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRhYmxlIHByb3BlcnRpZXMgd2l0aCBmaWx0ZXIgZmllbGQgaW5mb3MuXG4gKiBAcGFyYW0gYVRhYmxlUHJvcGVydGllcyBBcnJheSB3aXRoIHRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBvTURDVGFibGUgVGhlIE1EQ1RhYmxlIGluc3RhbmNlXG4gKiBAcGFyYW0gbUNvbmRpdGlvbnMgVGhlIGNvbmRpdGlvbnMgb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gb01ldGFkYXRhSW5mbyBUaGUgbWV0YWRhdGEgaW5mbyBvZiB0aGUgZmlsdGVyIGZpZWxkXG4gKi9cbk9EYXRhVGFibGVEZWxlZ2F0ZS5fdXBkYXRlUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKFxuXHRhVGFibGVQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSxcblx0b01EQ1RhYmxlOiBUYWJsZSxcblx0bUNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPixcblx0b01ldGFkYXRhSW5mbzogUGF5bG9hZFxuKTogdm9pZCB7XG5cdGNvbnN0IGFDb25kaXRpb25LZXkgPSBPYmplY3Qua2V5cyhtQ29uZGl0aW9ucyksXG5cdFx0b01ldGFNb2RlbCA9IChvTURDVGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSE7XG5cdGFDb25kaXRpb25LZXkuZm9yRWFjaChmdW5jdGlvbiAoY29uZGl0aW9uS2V5OiBzdHJpbmcpIHtcblx0XHQvLyBUaGUgdHlwZUNvbmZpZyBpcyBub3Qgc2V0IGluIHRoZSB0YWJsZSBwcm9wZXJ0eUluZm9zLCBidXQgd2UgbmVlZCB0byBzZXQgaXQgZm9yIHRoZSBmaWx0ZXIgZmllbGRzXG5cdFx0Y29uc3QgY29uZGl0aW9uS2V5VHlwZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtvTWV0YWRhdGFJbmZvLmNvbGxlY3Rpb25OYW1lfS8ke2NvbmRpdGlvbktleX1gKT8uJFR5cGUgPz8gXCJFZG0uU3RyaW5nXCI7XG5cdFx0Y29uc3QgdHlwZUNvbmZpZyA9IG9NRENUYWJsZS5nZXRUeXBlTWFwKCkuZ2V0VHlwZUNvbmZpZyhjb25kaXRpb25LZXlUeXBlKTtcblx0XHRhVGFibGVQcm9wZXJ0aWVzLmZvckVhY2goKHRhYmxlUHJvcGVydHksIGluZGV4KSA9PiB7XG5cdFx0XHRpZiAodGFibGVQcm9wZXJ0eS5wYXRoID09PSBjb25kaXRpb25LZXkpIHtcblx0XHRcdFx0KGFUYWJsZVByb3BlcnRpZXNbaW5kZXhdIGFzIFByb3BlcnR5SW5mbyAmIHsgdHlwZUNvbmZpZzogb2JqZWN0IH0pLnR5cGVDb25maWcgPSB0eXBlQ29uZmlnO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChcblx0XHRcdGFUYWJsZVByb3BlcnRpZXMuZmluZEluZGV4KGZ1bmN0aW9uICh0YWJsZVByb3BlcnR5OiBQcm9wZXJ0eUluZm8pIHtcblx0XHRcdFx0cmV0dXJuIHRhYmxlUHJvcGVydHkucGF0aCA9PT0gY29uZGl0aW9uS2V5O1xuXHRcdFx0fSkgPT09IC0xXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBvQ29sdW1uRGVmOiBQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRcdGtleTogY29uZGl0aW9uS2V5LFxuXHRcdFx0XHRsYWJlbDogY29uZGl0aW9uS2V5LFxuXHRcdFx0XHRwYXRoOiBjb25kaXRpb25LZXksXG5cdFx0XHRcdGRhdGFUeXBlOiB0eXBlQ29uZmlnLnR5cGVJbnN0YW5jZS5iYXNlVHlwZSxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczogdHlwZUNvbmZpZy50eXBlSW5zdGFuY2U/Lm9Gb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRjb25zdHJhaW50czogdHlwZUNvbmZpZy50eXBlSW5zdGFuY2U/Lm9Db25zdHJhaW50c1xuXHRcdFx0fTtcblx0XHRcdGFUYWJsZVByb3BlcnRpZXMucHVzaChvQ29sdW1uRGVmKTtcblx0XHR9XG5cdH0pO1xufTtcblxuT0RhdGFUYWJsZURlbGVnYXRlLnVwZGF0ZUJpbmRpbmcgPSBmdW5jdGlvbiAoXG5cdG9UYWJsZTogVGFibGUsXG5cdG9CaW5kaW5nSW5mbzogQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8gJiB7XG5cdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0JHNlYXJjaD86IHN0cmluZztcblx0XHR9O1xuXHR9LFxuXHRvQmluZGluZzogT0RhdGFMaXN0QmluZGluZ1xuKTogdm9pZCB7XG5cdGxldCBiTmVlZE1hbnVhbFJlZnJlc2ggPSBmYWxzZTtcblx0Y29uc3Qgb0ludGVybmFsQmluZGluZ0NvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0Y29uc3Qgc01hbnVhbFVwZGF0ZVByb3BlcnR5S2V5ID0gXCJwZW5kaW5nTWFudWFsQmluZGluZ1VwZGF0ZVwiO1xuXHRjb25zdCBzTGFzdFNlYXJjaCA9IFwibGFzdFNlYXJjaFwiO1xuXHRjb25zdCBzTGFzdEZpbHRlciA9IFwibGFzdEZpbHRlclwiO1xuXHRjb25zdCBiUGVuZGluZ01hbnVhbFVwZGF0ZSA9IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShzTWFudWFsVXBkYXRlUHJvcGVydHlLZXkpO1xuXHRjb25zdCBsYXN0U2VhcmNoID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KHNMYXN0U2VhcmNoKTtcblx0Y29uc3QgbGFzdEZpbHRlciA9IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShzTGFzdEZpbHRlcik7XG5cdGxldCBvUm93QmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cblx0Ly9vQmluZGluZz1udWxsIG1lYW5zIHRoYXQgYSByZWJpbmRpbmcgbmVlZHMgdG8gYmUgZm9yY2VkIHZpYSB1cGRhdGVCaW5kaW5nIGluIG1kYyBUYWJsZURlbGVnYXRlXG5cdFRhYmxlRGVsZWdhdGUudXBkYXRlQmluZGluZy5hcHBseShPRGF0YVRhYmxlRGVsZWdhdGUsIFtvVGFibGUsIG9CaW5kaW5nSW5mbywgb0JpbmRpbmddKTtcblx0Ly9nZXQgcm93IGJpbmRpbmcgYWZ0ZXIgcmViaW5kIGZyb20gVGFibGVEZWxlZ2F0ZS51cGRhdGVCaW5kaW5nIGluIGNhc2Ugb0JpbmRpbmcgd2FzIG51bGxcblx0aWYgKCFvUm93QmluZGluZykge1xuXHRcdG9Sb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0fVxuXHRpZiAob1Jvd0JpbmRpbmcpIHtcblx0XHQvKipcblx0XHQgKiBNYW51YWwgcmVmcmVzaCBpZiBmaWx0ZXJzIGFyZSBub3QgY2hhbmdlZCBieSBiaW5kaW5nLnJlZnJlc2goKSBzaW5jZSB1cGRhdGluZyB0aGUgYmluZGluZ0luZm9cblx0XHQgKiBpcyBub3QgZW5vdWdoIHRvIHRyaWdnZXIgYSBiYXRjaCByZXF1ZXN0LlxuXHRcdCAqIEluIGNhc2UgdGhlcmUgaXMgbm8gaW50ZXJuYWxCaW5kaW5nQ29udGV4dCAoc2VlIEJDUCAyMjgwMTYxNTI0KSB3ZSBjYW4gbm90IGRldGVybWluZSBpZiBhIG1hbnVhbFxuXHRcdCAqIHJlZnJlc2ggaXMgbmVlZGVkIG9yIG5vdC4gVGhlcmVmb3JlLCB3ZSBhbHdheXMgcmVmcmVzaCBpbiB0aGlzIHNwZWNpYWwgY2FzZVxuXHRcdCAqL1xuXHRcdGJOZWVkTWFudWFsUmVmcmVzaCA9IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0XG5cdFx0XHQ/IGRlZXBFcXVhbChvQmluZGluZ0luZm8uZmlsdGVycywgbGFzdEZpbHRlcikgJiYgb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnM/LiRzZWFyY2ggPT09IGxhc3RTZWFyY2ggJiYgIWJQZW5kaW5nTWFudWFsVXBkYXRlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblx0b0ludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KHNMYXN0U2VhcmNoLCBvQmluZGluZ0luZm8ucGFyYW1ldGVycz8uJHNlYXJjaCk7XG5cdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShzTGFzdEZpbHRlciwgb0JpbmRpbmdJbmZvLmZpbHRlcnMpO1xuXG5cdGlmIChiTmVlZE1hbnVhbFJlZnJlc2ggJiYgb1RhYmxlLmdldEZpbHRlcigpKSB7XG5cdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KHNNYW51YWxVcGRhdGVQcm9wZXJ0eUtleSwgdHJ1ZSk7XG5cdFx0b1Jvd0JpbmRpbmdcblx0XHRcdC5yZXF1ZXN0UmVmcmVzaChvUm93QmluZGluZy5nZXRHcm91cElkKCkpXG5cdFx0XHQuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShzTWFudWFsVXBkYXRlUHJvcGVydHlLZXksIGZhbHNlKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZWZyZXNoaW5nIGEgZmlsdGVyQmFyIFZIIHRhYmxlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH1cblx0b1RhYmxlLmZpcmVFdmVudChcImJpbmRpbmdVcGRhdGVkXCIpO1xuXHQvL25vIG5lZWQgdG8gY2hlY2sgZm9yIHNlbWFudGljIHRhcmdldHMgaGVyZSBzaW5jZSB3ZSBhcmUgaW4gYSBWSCBhbmQgZG9uJ3Qgd2FudCB0byBhbGxvdyBmdXJ0aGVyIG5hdmlnYXRpb25cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNpbXBsZSBwcm9wZXJ0eSBmb3IgZWFjaCBpZGVudGlmaWVkIGNvbXBsZXggcHJvcGVydHkuXG4gKiBAcGFyYW0gcHJvcGVydGllc1RvQmVDcmVhdGVkIElkZW50aWZpZWQgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBleGlzdGluZ0NvbHVtbnMgVGhlIGxpc3Qgb2YgY29sdW1ucyBjcmVhdGVkIGZvciBwcm9wZXJ0aWVzIGRlZmluZWQgb24gdGhlIFZhbHVlIExpc3QuXG4gKiBAcGFyYW0gc29ydFJlc3RyaWN0aW9uc0luZm8gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHNvcnQgcmVzdHJpY3Rpb24gaW5mb3JtYXRpb25cbiAqIEBwYXJhbSBmaWx0ZXJSZXN0cmljdGlvbnNJbmZvIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBmaWx0ZXIgcmVzdHJpY3Rpb24gaW5mb3JtYXRpb25cbiAqIEByZXR1cm5zIFRoZSBhcnJheSBvZiBwcm9wZXJ0aWVzIGNyZWF0ZWQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjcmVhdGVSZWxhdGVkUHJvcGVydGllcyhcblx0cHJvcGVydGllc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4sXG5cdGV4aXN0aW5nQ29sdW1uczogUHJvcGVydHlJbmZvW10sXG5cdHNvcnRSZXN0cmljdGlvbnNJbmZvOiBTb3J0UmVzdHJpY3Rpb25zSW5mb1R5cGUsXG5cdGZpbHRlclJlc3RyaWN0aW9uc0luZm86IEZpbHRlclJlc3RyaWN0aW9uc0luZm9UeXBlLFxuXHRjYXNlU2Vuc2l0aXZlPzogYm9vbGVhblxuKTogUHJvcGVydHlJbmZvW10ge1xuXHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge30sXG5cdFx0cmVsYXRlZENvbHVtbnM6IFByb3BlcnR5SW5mb1tdID0gW107XG5cdE9iamVjdC5rZXlzKHByb3BlcnRpZXNUb0JlQ3JlYXRlZCkuZm9yRWFjaCgocGF0aCkgPT4ge1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllc1RvQmVDcmVhdGVkW3BhdGhdLFxuXHRcdFx0cmVsYXRlZENvbHVtbiA9IGV4aXN0aW5nQ29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5wYXRoID09PSBwYXRoKTsgLy8gQ29tcGxleCBwcm9wZXJ0aWVzIGRvZXNuJ3QgaGF2ZSBwYXRoIHNvIG9ubHkgc2ltcGxlIGNvbHVtbiBhcmUgZm91bmRcblx0XHRpZiAoIXJlbGF0ZWRDb2x1bW4pIHtcblx0XHRcdGNvbnN0IG5ld05hbWUgPSBgUHJvcGVydHk6OiR7cGF0aH1gO1xuXHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZU1hcFtwYXRoXSA9IG5ld05hbWU7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVR5cGVDb25maWcgPSBnZXRUeXBlQ29uZmlnKHByb3BlcnR5KTtcblx0XHRcdGNvbnN0IHZhbHVlSGVscENvbHVtblR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID8/IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIsXG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHRcdCk7XG5cdFx0XHRjb25zdCB2YWx1ZUhlbHBUYWJsZUNvbHVtbjogUHJvcGVydHlJbmZvID0ge1xuXHRcdFx0XHRrZXk6IG5ld05hbWUsXG5cdFx0XHRcdGxhYmVsOiBnZXRMYWJlbChwcm9wZXJ0eSksXG5cdFx0XHRcdHBhdGgsXG5cdFx0XHRcdHNvcnRhYmxlOiBpc1NvcnRhYmxlUHJvcGVydHkoc29ydFJlc3RyaWN0aW9uc0luZm8sIHByb3BlcnR5KSxcblx0XHRcdFx0ZmlsdGVyYWJsZTogaXNGaWx0ZXJhYmxlUHJvcGVydHkoZmlsdGVyUmVzdHJpY3Rpb25zSW5mbywgcHJvcGVydHkpLFxuXHRcdFx0XHRkYXRhVHlwZTogdmFsdWVIZWxwQ29sdW1uVHlwZUNvbmZpZy5jbGFzc05hbWUsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IGlzVHlwZUZpbHRlcmFibGUocHJvcGVydHkudHlwZSBhcyBrZXlvZiB0eXBlb2YgRGVmYXVsdFR5cGVGb3JFZG1UeXBlKVxuXHRcdFx0XHRcdD8gcHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnNcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdFx0Y29uc3RyYWludHM6IGlzVHlwZUZpbHRlcmFibGUocHJvcGVydHkudHlwZSBhcyBrZXlvZiB0eXBlb2YgRGVmYXVsdFR5cGVGb3JFZG1UeXBlKVxuXHRcdFx0XHRcdD8gcHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmVcblx0XHRcdH07XG5cdFx0XHR2YWx1ZUhlbHBUYWJsZUNvbHVtbi5tYXhDb25kaXRpb25zID0gZ2V0UHJvcGVydHlNYXhDb25kaXRpb25zKGZpbHRlclJlc3RyaWN0aW9uc0luZm8sIHZhbHVlSGVscFRhYmxlQ29sdW1uKTtcblx0XHRcdHJlbGF0ZWRDb2x1bW5zLnB1c2godmFsdWVIZWxwVGFibGVDb2x1bW4pO1xuXHRcdH1cblx0fSk7XG5cdC8vIFRoZSBwcm9wZXJ0eSAna2V5JyBoYXMgYmVlbiBwcmVmaXhlZCB3aXRoICdQcm9wZXJ0eTo6JyBmb3IgdW5pcXVlbmVzcy5cblx0Ly8gVXBkYXRlIHRoZSBzYW1lIGluIG90aGVyIHByb3BlcnR5SW5mb3NbXSByZWZlcmVuY2VzIHdoaWNoIHBvaW50IHRvIHRoaXMgcHJvcGVydHkuXG5cdGV4aXN0aW5nQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRpZiAoY29sdW1uLnByb3BlcnR5SW5mb3MpIHtcblx0XHRcdGNvbHVtbi5wcm9wZXJ0eUluZm9zID0gY29sdW1uLnByb3BlcnR5SW5mb3M/Lm1hcCgoY29sdW1uTmFtZSkgPT4gcmVsYXRlZFByb3BlcnR5TmFtZU1hcFtjb2x1bW5OYW1lXSA/PyBjb2x1bW5OYW1lKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gcmVsYXRlZENvbHVtbnM7XG59XG5cbi8qKlxuICogSWRlbnRpZmllcyB0aGUgbWF4Q29uZGl0aW9ucyBmb3IgYSBnaXZlbiBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBmaWx0ZXJSZXN0cmljdGlvbnNJbmZvIFRoZSBmaWx0ZXIgcmVzdHJpY3Rpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgcmVzdHJpY3Rpb24gYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5LlxuICogQHJldHVybnMgYC0xYCBvciBgMWAgaWYgdGhlIHByb3BlcnR5IGlzIGEgTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24uXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5TWF4Q29uZGl0aW9ucyhmaWx0ZXJSZXN0cmljdGlvbnNJbmZvOiBGaWx0ZXJSZXN0cmljdGlvbnNJbmZvVHlwZSwgcHJvcGVydHk6IFByb3BlcnR5SW5mbyB8IFByb3BlcnR5KTogbnVtYmVyIHtcblx0Y29uc3QgcHJvcGVydHlQYXRoID0gZ2V0UGF0aChwcm9wZXJ0eSk7XG5cdHJldHVybiBwcm9wZXJ0eVBhdGggJiZcblx0XHRmaWx0ZXJSZXN0cmljdGlvbnNJbmZvLnByb3BlcnR5SW5mbz8uaGFzT3duUHJvcGVydHkocHJvcGVydHlQYXRoKSAmJlxuXHRcdGlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24oZmlsdGVyUmVzdHJpY3Rpb25zSW5mby5wcm9wZXJ0eUluZm9bcHJvcGVydHlQYXRoXSBhcyB1bmtub3duIGFzIHN0cmluZylcblx0XHQ/IC0xXG5cdFx0OiAxO1xufVxuXG4vKipcbiAqIElkZW50aWZpZXMgdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgd2hpY2ggcmVmZXJlbmNlcyB0byB0aGUgdW5pdCwgdGltZXpvbmUsIHRleHRBcnJhbmdlbWVudCBvciBjdXJyZW5jeS5cbiAqIEBwYXJhbSBkYXRhTW9kZWxQcm9wZXJ0eVBhdGggVGhlIG1vZGVsIG9iamVjdCBwYXRoIG9mIHRoZSBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIFRoZSBhZGRpdGlvbmFsIHByb3BlcnR5LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZ2V0QWRkaXRpb25hbFByb3BlcnR5KGRhdGFNb2RlbFByb3BlcnR5UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHByb3BlcnR5ID0gZGF0YU1vZGVsUHJvcGVydHlQYXRoLnRhcmdldE9iamVjdDtcblx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5UGF0aCA9XG5cdFx0cHJvcGVydHkgJiZcblx0XHQoZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgocHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgocHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aChwcm9wZXJ0eSkgfHxcblx0XHRcdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aChwcm9wZXJ0eSkpO1xuXHRpZiAoIWFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGNvbnN0IGRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eSA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5PihkYXRhTW9kZWxQcm9wZXJ0eVBhdGgsIGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgpO1xuXG5cdC8vQWRkaXRpb25hbCBQcm9wZXJ0eSBjb3VsZCByZWZlciB0byBhIG5hdmlnYXRpb24gcHJvcGVydHksIGtlZXAgdGhlIGtleSBhbmQgcGF0aCBhcyBuYXZpZ2F0aW9uIHByb3BlcnR5XG5cdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eSA9IGRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eS50YXJnZXRPYmplY3Q7XG5cdGlmICghYWRkaXRpb25hbFByb3BlcnR5KSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBPRGF0YVRhYmxlRGVsZWdhdGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTBEQTtBQUNBO0FBQ0E7RUFDQSxNQUFNQSxrQkFBa0IsR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVDLGFBQWEsQ0FBQzs7RUFFM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBSCxrQkFBa0IsQ0FBQ0ksZUFBZSxH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
|
|
467
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPRGF0YVRhYmxlRGVsZWdhdGUiLCJPYmplY3QiLCJhc3NpZ24iLCJUYWJsZURlbGVnYXRlIiwiZmV0Y2hQcm9wZXJ0aWVzIiwidGFibGUiLCJtb2RlbCIsIl9nZXRNb2RlbCIsInByb3BlcnRpZXMiLCJfY3JlYXRlUHJvcGVydHlJbmZvcyIsImNyZWF0ZUludGVybmFsQmluZGluZ0NvbnRleHQiLCJzZXRTb3J0Q29uZGl0aW9ucyIsIk1hY3Jvc0RlbGVnYXRlVXRpbCIsInNldENhY2hlZFByb3BlcnRpZXMiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNldFByb3BlcnR5Iiwic29ydENvbmRpdGlvbnNDRCIsImRhdGEiLCJyYXdTb3J0Q29uZGl0aW9ucyIsIkNvbW1vbkhlbHBlciIsInBhcnNlQ3VzdG9tRGF0YSIsInNvcnRlcnMiLCJmb3JFYWNoIiwic29ydENvbmRpdGlvbiIsImluZm9OYW1lIiwiY29udmVydFByb3BlcnR5UGF0aFRvSW5mb05hbWUiLCJuYW1lIiwicHJvcGVydHlQYXRoIiwicHJvcGVydHlJbmZvIiwiZmluZCIsImNvbHVtbiIsInByb3BlcnR5SW5mb3MiLCJwYXRoIiwia2V5IiwiZGlhbG9nIiwiaXNBIiwiZ2V0UGFyZW50IiwiaW50ZXJuYWxNb2RlbCIsImdldE1vZGVsIiwiaW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsIm5ld0ludGVybmFsQmluZGluZ0NvbnRleHRQYXRoIiwiZ2V0UGF0aCIsImdldElkIiwiZ2V0UHJvcGVydHkiLCJuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiYmluZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJzZXRCaW5kaW5nQ29udGV4dCIsImNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyIsImRhdGFNb2RlbFByb3BlcnR5UGF0aCIsImRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgiLCJnZXRBZGRpdGlvbmFsUHJvcGVydHkiLCJyZWxhdGVkUHJvcGVydGllcyIsInRhcmdldE9iamVjdCIsImFkZGl0aW9uYWxQcm9wZXJ0eSIsImFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwicHJvcGVydHkiLCJ0ZXh0QW5ub3RhdGlvbiIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiVGV4dCIsInRleHRBcnJhbmdlbWVudCIsIlVJIiwiVGV4dEFycmFuZ2VtZW50IiwidG9TdHJpbmciLCJkaXNwbGF5TW9kZSIsImdldERpc3BsYXlNb2RlIiwibWV0YWRhdGFJbmZvIiwiZ2V0RGVsZWdhdGUiLCJwYXlsb2FkIiwiZW50aXR5U2V0UGF0aCIsImNvbGxlY3Rpb25OYW1lIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicmVxdWVzdE9iamVjdCIsInRoZW4iLCJlbnRpdHlTZXRBbm5vdGF0aW9ucyIsInNvcnRSZXN0cmljdGlvbnNJbmZvIiwiZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8iLCJmaWx0ZXJSZXN0cmljdGlvbnMiLCJmaWx0ZXJSZXN0cmljdGlvbnNJbmZvIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zSW5mbyIsImZpbHRlckZ1bmN0aW9ucyIsImNhc2VTZW5zaXRpdmUiLCJNb2RlbEhlbHBlciIsImlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsImN1c3RvbURhdGFGb3JDb2x1bW5zIiwiZ2V0Q3VzdG9tRGF0YSIsInByb3BlcnRpZXNUb0JlQ3JlYXRlZCIsImRhdGFNb2RlbEVudGl0eVBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJnZXRDb250ZXh0IiwiY3VzdG9tRGF0YSIsImNvbHVtbkRlZiIsInR5cGVDb25maWciLCJpc1R5cGVGaWx0ZXJhYmxlIiwiJFR5cGUiLCJnZXRUeXBlTWFwIiwiZ2V0VHlwZUNvbmZpZyIsIlR5cGVNYXAiLCJsYWJlbCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwidGFyZ2V0UHJvcGVydHlQYXRoIiwidHlwZSIsInByb3BlcnR5VHlwZUNvbmZpZyIsImZvcm1hdE9wdGlvbnMiLCJjb25zdHJhaW50cyIsInJlbGF0ZWRQcm9wZXJ0aWVzSW5mbyIsInJlbGF0ZWRQcm9wZXJ0eVBhdGhzIiwia2V5cyIsImxlbmd0aCIsImRhdGFUeXBlIiwiY2xhc3NOYW1lIiwic29ydGFibGUiLCJpc1NvcnRhYmxlUHJvcGVydHkiLCJmaWx0ZXJhYmxlIiwiaXNGaWx0ZXJhYmxlUHJvcGVydHkiLCJtYXhDb25kaXRpb25zIiwiZ2V0UHJvcGVydHlNYXhDb25kaXRpb25zIiwicHVzaCIsInJlbGF0ZWRDb2x1bW5zIiwiY3JlYXRlUmVsYXRlZFByb3BlcnRpZXMiLCJjb25jYXQiLCJ1cGRhdGVCaW5kaW5nSW5mbyIsIm1kY1RhYmxlIiwiYmluZGluZ0luZm8iLCJhcHBseSIsImNvbGxlY3Rpb25QYXRoIiwicGFyYW1ldGVycyIsImZpbHRlckJhciIsIkVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldEZpbHRlciIsImlzRmlsdGVyRW5hYmxlZCIsImlzRmlsdGVyaW5nRW5hYmxlZCIsImNvbmRpdGlvbnMiLCJpbm5lckZpbHRlckluZm8iLCJvdXRlckZpbHRlckluZm8iLCJmaWx0ZXJzIiwidGFibGVQcm9wZXJ0aWVzIiwiZ2V0Q2FjaGVkUHJvcGVydGllcyIsImdldENvbmRpdGlvbnMiLCJGaWx0ZXJVdGlsIiwiZ2V0RmlsdGVySW5mbyIsImlzVHJlZVRhYmxlIiwiaGllcmFyY2h5UXVhbGlmaWVyIiwiJCRhZ2dyZWdhdGlvbiIsImV4cGFuZFRvIiwiaW5pdGlhbEV4cGFuc2lvbkxldmVsIiwicGFyYW1ldGVyTmFtZXMiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRQYXJhbWV0ZXJOYW1lcyIsIl91cGRhdGVQcm9wZXJ0eUluZm8iLCJwYXJhbWV0ZXJQYXRoIiwiZ2V0UGFyYW1ldGVyc0luZm8iLCIkc2VhcmNoIiwiQ29tbW9uVXRpbHMiLCJub3JtYWxpemVTZWFyY2hUZXJtIiwiZ2V0U2VhcmNoIiwidW5kZWZpbmVkIiwic2VhcmNoIiwiTnVtYmVyIiwiTUFYX1NBRkVfSU5URUdFUiIsIiQkc2hhcmVkUmVxdWVzdCIsIl9hcHBseURlZmF1bHRTb3J0aW5nIiwiJHNlbGVjdCIsInJlZHVjZSIsInF1ZXJ5IiwiaW5jbHVkZXMiLCIkY291bnQiLCJpc0RyYWZ0U3VwcG9ydGVkIiwiRmlsdGVyIiwiRmlsdGVyT3BlcmF0b3IiLCJFUSIsIlByb21pc2UiLCJyZXNvbHZlIiwiYXR0YWNoRXZlbnRPbmNlIiwic29ydGVyIiwiZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUiLCJTb3J0ZXIiLCJhVGFibGVQcm9wZXJ0aWVzIiwib01EQ1RhYmxlIiwibUNvbmRpdGlvbnMiLCJvTWV0YWRhdGFJbmZvIiwiYUNvbmRpdGlvbktleSIsIm9NZXRhTW9kZWwiLCJjb25kaXRpb25LZXkiLCJjb25kaXRpb25LZXlUeXBlIiwiZ2V0T2JqZWN0IiwidGFibGVQcm9wZXJ0eSIsImluZGV4IiwiZmluZEluZGV4Iiwib0NvbHVtbkRlZiIsInR5cGVJbnN0YW5jZSIsImJhc2VUeXBlIiwib0Zvcm1hdE9wdGlvbnMiLCJvQ29uc3RyYWludHMiLCJ1cGRhdGVCaW5kaW5nIiwib1RhYmxlIiwib0JpbmRpbmdJbmZvIiwib0JpbmRpbmciLCJiTmVlZE1hbnVhbFJlZnJlc2giLCJvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsInNNYW51YWxVcGRhdGVQcm9wZXJ0eUtleSIsInNMYXN0U2VhcmNoIiwic0xhc3RGaWx0ZXIiLCJiUGVuZGluZ01hbnVhbFVwZGF0ZSIsImxhc3RTZWFyY2giLCJsYXN0RmlsdGVyIiwib1Jvd0JpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwiZGVlcEVxdWFsIiwicmVxdWVzdFJlZnJlc2giLCJnZXRHcm91cElkIiwiZmluYWxseSIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJmaXJlRXZlbnQiLCJleGlzdGluZ0NvbHVtbnMiLCJyZWxhdGVkUHJvcGVydHlOYW1lTWFwIiwicmVsYXRlZENvbHVtbiIsIm5ld05hbWUiLCJ2YWx1ZUhlbHBDb2x1bW5UeXBlQ29uZmlnIiwidmFsdWVIZWxwVGFibGVDb2x1bW4iLCJnZXRMYWJlbCIsIm1hcCIsImNvbHVtbk5hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsImlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24iLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoIiwiZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZURlbGVnYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0VHlwZUNvbmZpZyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlclJlc3RyaWN0aW9uc0luZm9UeXBlLCBTb3J0UmVzdHJpY3Rpb25zSW5mb1R5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IHsgZ2V0RmlsdGVyUmVzdHJpY3Rpb25zSW5mbywgZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8sIGlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0VGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldERpc3BsYXlNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgsXG5cdGdldExhYmVsXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERlZmF1bHRUeXBlRm9yRWRtVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0VETVwiO1xuaW1wb3J0IHsgaXNUeXBlRmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0VETVwiO1xuaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uQmluZGluZ0luZm8sIEZpbHRlckluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db2xsZWN0aW9uQmluZGluZ0luZm9cIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgTWFjcm9zRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJDb25kaXRpb25zIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UGF0aCwgaXNGaWx0ZXJhYmxlUHJvcGVydHksIGlzU29ydGFibGVQcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9UYWJsZURlbGVnYXRlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBZ2dyZWdhdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBNRENUYWJsZVByb3BlcnR5SW5mbyBhcyBQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBDb25kaXRpb25PYmplY3QgfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgVGFibGVEZWxlZ2F0ZSBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UYWJsZURlbGVnYXRlXCI7XG5pbXBvcnQgVHlwZU1hcCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UeXBlTWFwXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L3V0aWwvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgRmlsdGVyVXRpbCBmcm9tIFwic2FwL3VpL21kYy91dGlsL0ZpbHRlclV0aWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuXG50eXBlIENvbXBsZXhQcm9wZXJ0eU1hcCA9IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5PjtcblxudHlwZSBNZGNUYWJsZURlbGVnYXRlID0geyBuYW1lOiBzdHJpbmc7IHBheWxvYWQ6IFBheWxvYWQgfTtcblxudHlwZSBQYXlsb2FkID0ge1xuXHRjb2xsZWN0aW9uTmFtZT86IHN0cmluZztcblx0Y29sbGVjdGlvblBhdGg/OiBzdHJpbmc7XG5cdGRlZmF1bHRTb3J0UHJvcGVydHlOYW1lPzogc3RyaW5nO1xuXHRoaWVyYXJjaHlRdWFsaWZpZXI/OiBzdHJpbmc7XG5cdGluaXRpYWxFeHBhbnNpb25MZXZlbD86IG51bWJlcjtcbn07XG4vKipcbiAqIFRlc3QgZGVsZWdhdGUgZm9yIE9EYXRhIFY0LlxuICovXG5jb25zdCBPRGF0YVRhYmxlRGVsZWdhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBUYWJsZURlbGVnYXRlKTtcblxuLyoqXG4gKiBGZXRjaGVzIHRoZSByZWxldmFudCBtZXRhZGF0YSBmb3IgdGhlIHRhYmxlIGFuZCByZXR1cm5zIHByb3BlcnR5IGluZm8gYXJyYXkuXG4gKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG4gKiBAcmV0dXJucyBBcnJheSBvZiBwcm9wZXJ0eSBpbmZvXG4gKi9cbk9EYXRhVGFibGVEZWxlZ2F0ZS5mZXRjaFByb3BlcnRpZXMgPSBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTxQcm9wZXJ0eUluZm8+IHtcblx0Y29uc3QgbW9kZWwgPSBhd2FpdCB0aGlzLl9nZXRNb2RlbCh0YWJsZSk7XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBhd2FpdCB0aGlzLl9jcmVhdGVQcm9wZXJ0eUluZm9zKHRhYmxlLCBtb2RlbCk7XG5cdE9EYXRhVGFibGVEZWxlZ2F0ZS5jcmVhdGVJbnRlcm5hbEJpbmRpbmdDb250ZXh0KHRhYmxlKTtcblx0T0RhdGFUYWJsZURlbGVnYXRlLnNldFNvcnRDb25kaXRpb25zKHRhYmxlLCBwcm9wZXJ0aWVzKTtcblx0TWFjcm9zRGVsZWdhdGVVdGlsLnNldENhY2hlZFByb3BlcnRpZXModGFibGUsIHByb3BlcnRpZXMpO1xuXHQodGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBDb250ZXh0KS5zZXRQcm9wZXJ0eShcInRhYmxlUHJvcGVydGllc0F2YWlsYWJsZVwiLCB0cnVlKTtcblx0cmV0dXJuIHByb3BlcnRpZXM7XG59O1xuXG4vKipcbiAqIFNldCBzb3J0IGNvbmRpdGlvbnMgb24gdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlIFZhbHVlaGVscCB0YWJsZSBpbnN0YW5jZVxuICogQHBhcmFtIHByb3BlcnRpZXMgUHJvcGVydHlJbmZvIGFycmF5XG4gKi9cbk9EYXRhVGFibGVEZWxlZ2F0ZS5zZXRTb3J0Q29uZGl0aW9ucyA9IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIHByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdKTogdm9pZCB7XG5cdGNvbnN0IHNvcnRDb25kaXRpb25zQ0QgPSB0YWJsZS5kYXRhKFwic29ydENvbmRpdGlvbnNcIik7XG5cdGNvbnN0IHJhd1NvcnRDb25kaXRpb25zID0gQ29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YShzb3J0Q29uZGl0aW9uc0NEKSBhcyB7IHNvcnRlcnM6IHsgbmFtZTogc3RyaW5nIH1bXSB9IHwgdW5kZWZpbmVkO1xuXHRpZiAocmF3U29ydENvbmRpdGlvbnM/LnNvcnRlcnMpIHtcblx0XHRyYXdTb3J0Q29uZGl0aW9ucy5zb3J0ZXJzLmZvckVhY2goKHNvcnRDb25kaXRpb24pID0+IHtcblx0XHRcdGNvbnN0IGluZm9OYW1lID0gT0RhdGFUYWJsZURlbGVnYXRlLmNvbnZlcnRQcm9wZXJ0eVBhdGhUb0luZm9OYW1lKHNvcnRDb25kaXRpb24ubmFtZSwgcHJvcGVydGllcyk7XG5cdFx0XHRpZiAoaW5mb05hbWUgJiYgaW5mb05hbWUgIT09IHNvcnRDb25kaXRpb24ubmFtZSkge1xuXHRcdFx0XHRzb3J0Q29uZGl0aW9uLm5hbWUgPSBpbmZvTmFtZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHR0YWJsZS5zZXRTb3J0Q29uZGl0aW9ucyh7IC4uLnJhd1NvcnRDb25kaXRpb25zIH0pO1xuXHR9XG59O1xuXG4vKipcbiAqIENvbnZlcnQgYSBwcm9wZXJ0eSBwYXRoIHRvIGl0cyBjb3JyZXNwb25kaW5nIGluZm8gbmFtZS5cbiAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggUHJvcGVydHkgcGF0aCB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcGFyYW0gcHJvcGVydGllcyBUYWJsZSBQcm9wZXJ0eUluZm8gYXJyYXlcbiAqIEByZXR1cm5zIFByb3BlcnR5IGluZm8gbmFtZSBpZiBmb3VuZCwgb3RoZXJ3aXNlIHJldHVybnMgdGhlIG9yaWdpbmFsIHByb3BlcnR5IHBhdGguXG4gKi9cbk9EYXRhVGFibGVEZWxlZ2F0ZS5jb252ZXJ0UHJvcGVydHlQYXRoVG9JbmZvTmFtZSA9IGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGg6IHN0cmluZywgcHJvcGVydGllczogUHJvcGVydHlJbmZvW10pOiBzdHJpbmcge1xuXHRjb25zdCBwcm9wZXJ0eUluZm8gPSBwcm9wZXJ0aWVzLmZpbmQoKGNvbHVtbikgPT4ge1xuXHRcdHJldHVybiAhY29sdW1uLnByb3BlcnR5SW5mb3MgJiYgY29sdW1uLnBhdGggPT09IHByb3BlcnR5UGF0aDtcblx0fSk7XG5cdHJldHVybiBwcm9wZXJ0eUluZm8/LmtleSA/PyBwcm9wZXJ0eVBhdGg7XG59O1xuXG5PRGF0YVRhYmxlRGVsZWdhdGUuY3JlYXRlSW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiB2b2lkIHtcblx0bGV0IGRpYWxvZzogTWFuYWdlZE9iamVjdCB8IG51bGwgPSB0YWJsZTtcblx0d2hpbGUgKGRpYWxvZyAmJiAhZGlhbG9nLmlzQShcInNhcC51aS5tZGMudmFsdWVoZWxwLkRpYWxvZ1wiKSkge1xuXHRcdGRpYWxvZyA9IChkaWFsb2cgYXMgTWFuYWdlZE9iamVjdCkuZ2V0UGFyZW50KCk7XG5cdH1cblxuXHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGFibGUuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cblx0aWYgKGRpYWxvZyAmJiBpbnRlcm5hbE1vZGVsKSB7XG5cdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IGRpYWxvZy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGxldCBuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0UGF0aDtcblx0XHRpZiAoaW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0bmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dFBhdGggPSBpbnRlcm5hbEJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSArIGA6OlZIRGlhbG9nOjoke2RpYWxvZy5nZXRJZCgpfTo6dGFibGVgO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0UGF0aCA9IGAvYnVpbGRpbmdibG9ja3MvJHt0YWJsZS5nZXRJZCgpfWA7XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL2J1aWxkaW5nYmxvY2tzXCIsIHsgLi4uaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9idWlsZGluZ2Jsb2Nrc1wiKSB9KTtcblx0XHR9XG5cdFx0Y29uc3QgbmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IGludGVybmFsTW9kZWwuYmluZENvbnRleHQobmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dFBhdGgpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdHRhYmxlLnNldEJpbmRpbmdDb250ZXh0KG5ld0ludGVybmFsQmluZGluZ0NvbnRleHQsIFwiaW50ZXJuYWxcIik7XG5cdH1cbn07XG5cbi8qKlxuICogQ29sbGVjdCByZWxhdGVkIHByb3BlcnRpZXMgZnJvbSBhIHByb3BlcnR5J3MgYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gZGF0YU1vZGVsUHJvcGVydHlQYXRoIFRoZSBtb2RlbCBvYmplY3QgcGF0aCBvZiB0aGUgcHJvcGVydHkuXG4gKiBAcmV0dXJucyBUaGUgcmVsYXRlZCBwcm9wZXJ0aWVzIHRoYXQgd2VyZSBpZGVudGlmaWVkLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKGRhdGFNb2RlbFByb3BlcnR5UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pOiBDb21wbGV4UHJvcGVydHlNYXAge1xuXHRjb25zdCBkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHlQYXRoID0gZ2V0QWRkaXRpb25hbFByb3BlcnR5KGRhdGFNb2RlbFByb3BlcnR5UGF0aCk7XG5cdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0aWVzOiBDb21wbGV4UHJvcGVydHlNYXAgPSB7fTtcblx0aWYgKGRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eVBhdGg/LnRhcmdldE9iamVjdCkge1xuXHRcdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eSA9IGRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKGRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgsIHRydWUpO1xuXG5cdFx0Y29uc3QgcHJvcGVydHkgPSBkYXRhTW9kZWxQcm9wZXJ0eVBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGdldFRhcmdldE9iamVjdFBhdGgoZGF0YU1vZGVsUHJvcGVydHlQYXRoLCB0cnVlKTtcblxuXHRcdGNvbnN0IHRleHRBbm5vdGF0aW9uID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCxcblx0XHRcdHRleHRBcnJhbmdlbWVudCA9IHRleHRBbm5vdGF0aW9uPy5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudD8udG9TdHJpbmcoKSxcblx0XHRcdGRpc3BsYXlNb2RlID0gdGV4dEFubm90YXRpb24gJiYgdGV4dEFycmFuZ2VtZW50ICYmIGdldERpc3BsYXlNb2RlKHByb3BlcnR5KTtcblxuXHRcdGlmIChkaXNwbGF5TW9kZSA9PT0gXCJEZXNjcmlwdGlvblwiKSB7XG5cdFx0XHRyZWxhdGVkUHJvcGVydGllc1thZGRpdGlvbmFsUHJvcGVydHlQYXRoXSA9IGFkZGl0aW9uYWxQcm9wZXJ0eTtcblx0XHR9IGVsc2UgaWYgKChkaXNwbGF5TW9kZSAmJiBkaXNwbGF5TW9kZSAhPT0gXCJWYWx1ZVwiKSB8fCAhdGV4dEFubm90YXRpb24pIHtcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5UGF0aF0gPSBwcm9wZXJ0eTtcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzW2FkZGl0aW9uYWxQcm9wZXJ0eVBhdGhdID0gYWRkaXRpb25hbFByb3BlcnR5O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVsYXRlZFByb3BlcnRpZXM7XG59XG5cbk9EYXRhVGFibGVEZWxlZ2F0ZS5fY3JlYXRlUHJvcGVydHlJbmZvcyA9IGFzeW5jIGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIG1vZGVsOiBPRGF0YU1vZGVsKTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4ge1xuXHRjb25zdCBtZXRhZGF0YUluZm8gPSAodGFibGUuZ2V0RGVsZWdhdGUoKSBhcyB7IHBheWxvYWQ6IFBheWxvYWQgfSkucGF5bG9hZDtcblx0Y29uc3QgcHJvcGVydGllczogUHJvcGVydHlJbmZvW10gPSBbXTtcblx0Y29uc3QgZW50aXR5U2V0UGF0aCA9IGAvJHttZXRhZGF0YUluZm8uY29sbGVjdGlvbk5hbWV9YDtcblx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cblx0cmV0dXJuIG1ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KGAke2VudGl0eVNldFBhdGh9QGApLnRoZW4oZnVuY3Rpb24gKGVudGl0eVNldEFubm90YXRpb25zOiBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3Qgc29ydFJlc3RyaWN0aW9uc0luZm8gPSBnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbyhlbnRpdHlTZXRBbm5vdGF0aW9ucyk7XG5cdFx0Y29uc3QgZmlsdGVyUmVzdHJpY3Rpb25zID0gZW50aXR5U2V0QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNcIl07XG5cdFx0Y29uc3QgZmlsdGVyUmVzdHJpY3Rpb25zSW5mbyA9IGdldEZpbHRlclJlc3RyaWN0aW9uc0luZm8oZmlsdGVyUmVzdHJpY3Rpb25zKTtcblx0XHRjb25zdCBmaWx0ZXJGdW5jdGlvbnMgPSBlbnRpdHlTZXRBbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlckZ1bmN0aW9uc1wiXTtcblx0XHRjb25zdCBjYXNlU2Vuc2l0aXZlID0gTW9kZWxIZWxwZXIuaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKG1ldGFNb2RlbCwgZmlsdGVyRnVuY3Rpb25zKTtcblx0XHRjb25zdCBjdXN0b21EYXRhRm9yQ29sdW1ucyA9IE1hY3Jvc0RlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHtcblx0XHRcdGN1c3RvbURhdGE6IChQcm9wZXJ0eUluZm8gJiB7ICRUeXBlOiBrZXlvZiB0eXBlb2YgRGVmYXVsdFR5cGVGb3JFZG1UeXBlIH0pW107XG5cdFx0fT4odGFibGUsIFwiY29sdW1uc1wiKSE7XG5cdFx0Y29uc3QgcHJvcGVydGllc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4gPSB7fTtcblx0XHRjb25zdCBkYXRhTW9kZWxFbnRpdHlQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKCh0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpLmdldENvbnRleHQoZW50aXR5U2V0UGF0aCkpO1xuXHRcdGN1c3RvbURhdGFGb3JDb2x1bW5zLmN1c3RvbURhdGEuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uRGVmOiBQcm9wZXJ0eUluZm8gJiB7ICRUeXBlOiBrZXlvZiB0eXBlb2YgRGVmYXVsdFR5cGVGb3JFZG1UeXBlIH0pIHtcblx0XHRcdGxldCB0eXBlQ29uZmlnID0gaXNUeXBlRmlsdGVyYWJsZShjb2x1bW5EZWYuJFR5cGUpXG5cdFx0XHRcdD8gdGFibGUuZ2V0VHlwZU1hcCgpLmdldFR5cGVDb25maWcoY29sdW1uRGVmLiRUeXBlKVxuXHRcdFx0XHQ6IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvID0ge1xuXHRcdFx0XHRrZXk6IGNvbHVtbkRlZi5wYXRoISxcblx0XHRcdFx0bGFiZWw6IGNvbHVtbkRlZi5sYWJlbFxuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3QgZGF0YU1vZGVsUHJvcGVydHlQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHk+KGRhdGFNb2RlbEVudGl0eVBhdGgsIGNvbHVtbkRlZi5wYXRoKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5ID0gZGF0YU1vZGVsUHJvcGVydHlQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0XHRcdGlmIChwcm9wZXJ0eSkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRQcm9wZXJ0eVBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKGRhdGFNb2RlbFByb3BlcnR5UGF0aCwgdHJ1ZSk7XG5cdFx0XHRcdGlmIChpc1R5cGVGaWx0ZXJhYmxlKHByb3BlcnR5LnR5cGUgYXMga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZSkpIHtcblx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0eVR5cGVDb25maWcgPSBnZXRUeXBlQ29uZmlnKHByb3BlcnR5KTtcblx0XHRcdFx0XHR0eXBlQ29uZmlnID1cblx0XHRcdFx0XHRcdFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPz8gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIixcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50c1xuXHRcdFx0XHRcdFx0KSA/PyB0eXBlQ29uZmlnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vQ2hlY2sgaWYgdGhlcmUgaXMgYW4gYWRkaXRpb25hbCBwcm9wZXJ0eSBsaW5rZWQgdG8gdGhlIHByb3BlcnR5IGFzIGEgVW5pdCwgQ3VycmVuY3ksIFRpbWV6b25lIG9yIHRleHRBcnJhbmdlbWVudFxuXHRcdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydGllc0luZm8gPSBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMoZGF0YU1vZGVsUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnR5UGF0aHM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvKTtcblxuXHRcdFx0XHRpZiAocmVsYXRlZFByb3BlcnR5UGF0aHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvLnByb3BlcnR5SW5mb3MgPSByZWxhdGVkUHJvcGVydHlQYXRocztcblx0XHRcdFx0XHQvLyBDb2xsZWN0IGluZm9ybWF0aW9uIG9mIHJlbGF0ZWQgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0eVBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcblx0XHRcdFx0XHRcdHByb3BlcnRpZXNUb0JlQ3JlYXRlZFtwYXRoXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mb1twYXRoXTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQvLyBBbHNvIGFkZCBwcm9wZXJ0eSBmb3IgdGhlIGluT3V0IFBhcmFtZXRlcnMgb24gdGhlIFZhbHVlSGVscCB3aGVuIHRleHRBcnJhbmdlbWVudCBpcyBzZXQgdG8gI1RleHRPbmx5XG5cdFx0XHRcdFx0Ly8gSXQgd2lsbCBub3QgYmUgbGlua2VkIHRvIHRoZSBjb21wbGV4IFByb3BlcnR5IChCQ1AgMjI3MDE0MTE1NClcblx0XHRcdFx0XHRpZiAoIXJlbGF0ZWRQcm9wZXJ0eVBhdGhzLmZpbmQoKHBhdGgpID0+IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mb1twYXRoXSA9PT0gcHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0aWVzVG9CZUNyZWF0ZWRbdGFyZ2V0UHJvcGVydHlQYXRoXSA9IHByb3BlcnR5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8ucGF0aCA9IGNvbHVtbkRlZi5wYXRoO1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mby5kYXRhVHlwZSA9IHR5cGVDb25maWcuY2xhc3NOYW1lO1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mby5jb25zdHJhaW50cyA9IGNvbHVtbkRlZi5jb25zdHJhaW50cztcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZm9ybWF0T3B0aW9ucyA9IGNvbHVtbkRlZi5mb3JtYXRPcHRpb25zO1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mby5zb3J0YWJsZSA9IGlzU29ydGFibGVQcm9wZXJ0eShzb3J0UmVzdHJpY3Rpb25zSW5mbywgY29sdW1uRGVmKTtcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZmlsdGVyYWJsZSA9IGlzRmlsdGVyYWJsZVByb3BlcnR5KGZpbHRlclJlc3RyaWN0aW9uc0luZm8sIGNvbHVtbkRlZik7XG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvLm1heENvbmRpdGlvbnMgPSBnZXRQcm9wZXJ0eU1heENvbmRpdGlvbnMoZmlsdGVyUmVzdHJpY3Rpb25zSW5mbywgY29sdW1uRGVmKTtcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uY2FzZVNlbnNpdGl2ZSA9IGNhc2VTZW5zaXRpdmU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHByb3BlcnR5SW5mby5wYXRoID0gY29sdW1uRGVmLnBhdGg7XG5cdFx0XHRcdHByb3BlcnR5SW5mby5jYXNlU2Vuc2l0aXZlID0gY2FzZVNlbnNpdGl2ZTtcblx0XHRcdFx0cHJvcGVydHlJbmZvLmRhdGFUeXBlID0gdHlwZUNvbmZpZy5jbGFzc05hbWU7XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlJbmZvKTtcblx0XHR9KTtcblx0XHRjb25zdCByZWxhdGVkQ29sdW1ucyA9IGNyZWF0ZVJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0cHJvcGVydGllc1RvQmVDcmVhdGVkLFxuXHRcdFx0cHJvcGVydGllcyxcblx0XHRcdHNvcnRSZXN0cmljdGlvbnNJbmZvLFxuXHRcdFx0ZmlsdGVyUmVzdHJpY3Rpb25zSW5mbyxcblx0XHRcdGNhc2VTZW5zaXRpdmVcblx0XHQpO1xuXHRcdHJldHVybiBwcm9wZXJ0aWVzLmNvbmNhdChyZWxhdGVkQ29sdW1ucyk7XG5cdH0pO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBiaW5kaW5nIGluZm8gd2l0aCB0aGUgcmVsZXZhbnQgcGF0aCBhbmQgbW9kZWwgZnJvbSB0aGUgbWV0YWRhdGEuXG4gKiBAcGFyYW0gbWRjVGFibGUgVGhlIE1EQ1RhYmxlIGluc3RhbmNlXG4gKiBAcGFyYW0gYmluZGluZ0luZm8gVGhlIGJpbmRpbmdJbmZvIG9mIHRoZSB0YWJsZVxuICovXG5PRGF0YVRhYmxlRGVsZWdhdGUudXBkYXRlQmluZGluZ0luZm8gPSBmdW5jdGlvbiAobWRjVGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKTogdm9pZCB7XG5cdFRhYmxlRGVsZWdhdGUudXBkYXRlQmluZGluZ0luZm8uYXBwbHkodGhpcywgW21kY1RhYmxlLCBiaW5kaW5nSW5mb10pO1xuXG5cdGNvbnN0IG1ldGFkYXRhSW5mbyA9IChtZGNUYWJsZS5nZXREZWxlZ2F0ZSgpIGFzIE1kY1RhYmxlRGVsZWdhdGUpLnBheWxvYWQ7XG5cblx0aWYgKG1ldGFkYXRhSW5mbykge1xuXHRcdGJpbmRpbmdJbmZvLnBhdGggPSBiaW5kaW5nSW5mbz8ucGF0aCB8fCBtZXRhZGF0YUluZm8uY29sbGVjdGlvblBhdGggfHwgYC8ke21ldGFkYXRhSW5mby5jb2xsZWN0aW9uTmFtZX1gO1xuXHR9XG5cblx0YmluZGluZ0luZm8ucGFyYW1ldGVycyA9IGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMgfHwge307XG5cblx0Y29uc3QgZmlsdGVyQmFyID0gRWxlbWVudC5nZXRFbGVtZW50QnlJZChtZGNUYWJsZS5nZXRGaWx0ZXIoKSkgYXMgRmlsdGVyQmFyLFxuXHRcdGlzRmlsdGVyRW5hYmxlZCA9IG1kY1RhYmxlLmlzRmlsdGVyaW5nRW5hYmxlZCgpO1xuXHRsZXQgY29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPjtcblx0bGV0IGlubmVyRmlsdGVySW5mbywgb3V0ZXJGaWx0ZXJJbmZvOiBGaWx0ZXJJbmZvO1xuXHRjb25zdCBmaWx0ZXJzID0gW107XG5cdGNvbnN0IHRhYmxlUHJvcGVydGllcyA9IE1hY3Jvc0RlbGVnYXRlVXRpbC5nZXRDYWNoZWRQcm9wZXJ0aWVzKG1kY1RhYmxlKSBhcyB1bmtub3duIGFzIFByb3BlcnR5SW5mb1tdO1xuXG5cdC8vVE9ETzogY29uc2lkZXIgYSBtZWNoYW5pc20gKCdGaWx0ZXJNZXJnZVV0aWwnIG9yIGVuaGFuY2UgJ0ZpbHRlclV0aWwnKSB0byBhbGxvdyB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIGRpZmZlcmVudCBmaWx0ZXJzKVxuXHRpZiAoaXNGaWx0ZXJFbmFibGVkKSB7XG5cdFx0Y29uZGl0aW9ucyA9IG1kY1RhYmxlLmdldENvbmRpdGlvbnMoKTtcblx0XHRpbm5lckZpbHRlckluZm8gPSBGaWx0ZXJVdGlsLmdldEZpbHRlckluZm8obWRjVGFibGUsIGNvbmRpdGlvbnMsIHRhYmxlUHJvcGVydGllcywgW10pIGFzIEZpbHRlckluZm87XG5cdFx0aWYgKGlubmVyRmlsdGVySW5mby5maWx0ZXJzKSB7XG5cdFx0XHRmaWx0ZXJzLnB1c2goaW5uZXJGaWx0ZXJJbmZvLmZpbHRlcnMpO1xuXHRcdH1cblx0fVxuXHRjb25zdCBpc1RyZWVUYWJsZSA9ICEhbWV0YWRhdGFJbmZvPy5oaWVyYXJjaHlRdWFsaWZpZXI7XG5cdGlmIChpc1RyZWVUYWJsZSkge1xuXHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRhZ2dyZWdhdGlvbiA9IHtcblx0XHRcdGhpZXJhcmNoeVF1YWxpZmllcjogbWV0YWRhdGFJbmZvLmhpZXJhcmNoeVF1YWxpZmllcixcblx0XHRcdGV4cGFuZFRvOiBtZXRhZGF0YUluZm8uaW5pdGlhbEV4cGFuc2lvbkxldmVsXG5cdFx0fTtcblx0fVxuXHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0Y29uZGl0aW9ucyA9IGZpbHRlckJhci5nZXRDb25kaXRpb25zKCk7XG5cdFx0aWYgKGNvbmRpdGlvbnMpIHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlck5hbWVzID0gRGVsZWdhdGVVdGlsLmdldFBhcmFtZXRlck5hbWVzKGZpbHRlckJhcik7XG5cdFx0XHQvLyBUaGUgdGFibGUgcHJvcGVydGllcyBuZWVkcyB0byB1cGRhdGVkIHdpdGggdGhlIGZpbHRlciBmaWVsZCBpZiBubyBTZWxlY3Rpb25maWVsZHMgYXJlIGFubm90YXRlZCBhbmQgbm90IHBhcnQgYXMgdmFsdWUgaGVscCBwYXJhbWV0ZXJcblx0XHRcdE9EYXRhVGFibGVEZWxlZ2F0ZS5fdXBkYXRlUHJvcGVydHlJbmZvKHRhYmxlUHJvcGVydGllcywgbWRjVGFibGUsIGNvbmRpdGlvbnMsIG1ldGFkYXRhSW5mbyk7XG5cdFx0XHRvdXRlckZpbHRlckluZm8gPSBGaWx0ZXJVdGlsLmdldEZpbHRlckluZm8oZmlsdGVyQmFyLCBjb25kaXRpb25zLCB0YWJsZVByb3BlcnRpZXMsIHBhcmFtZXRlck5hbWVzKTtcblxuXHRcdFx0aWYgKG91dGVyRmlsdGVySW5mby5maWx0ZXJzKSB7XG5cdFx0XHRcdGZpbHRlcnMucHVzaChvdXRlckZpbHRlckluZm8uZmlsdGVycyk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHBhcmFtZXRlclBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0UGFyYW1ldGVyc0luZm8oZmlsdGVyQmFyLCBjb25kaXRpb25zKTtcblx0XHRcdGlmIChwYXJhbWV0ZXJQYXRoKSB7XG5cdFx0XHRcdGJpbmRpbmdJbmZvLnBhdGggPSBwYXJhbWV0ZXJQYXRoO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIWlzVHJlZVRhYmxlKSB7XG5cdFx0XHQvLyBnZXQgdGhlIGJhc2ljIHNlYXJjaFxuXHRcdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoID0gQ29tbW9uVXRpbHMubm9ybWFsaXplU2VhcmNoVGVybShmaWx0ZXJCYXIuZ2V0U2VhcmNoKCkpIHx8IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKGZpbHRlckJhci5nZXRTZWFyY2goKSkge1xuXHRcdFx0aWYgKCFiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkYWdncmVnYXRpb24pIHtcblx0XHRcdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kJGFnZ3JlZ2F0aW9uID0ge307XG5cdFx0XHR9XG5cdFx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkYWdncmVnYXRpb24uc2VhcmNoID0gQ29tbW9uVXRpbHMubm9ybWFsaXplU2VhcmNoVGVybShmaWx0ZXJCYXIuZ2V0U2VhcmNoKCkpO1xuXHRcdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kJGFnZ3JlZ2F0aW9uLmV4cGFuZFRvID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG5cdFx0fVxuXHR9XG5cdC8vIEJDUDogMjM3MDA3ODY2MCAtIHNoYXJlZFJlcXVlc3QgaXMgc2V0IHRvIGZhbHNlIGluIG9yZGVyIHRvIGF2b2lkIGRlYWRsb2NrIHNpdHVhdGlvbiB3aGVyZSB0aGUgdGhlIG9EYXRhXG5cdC8vIG1vZGVsIGNhY2hlIGlzIG5laXRoZXIgY2hhbmdlYWJsZSAocmVzdWx0IG9mIExpc3RCaW5kaW5nLiQkc2hhcmVkUmVxdWVzdCA9IHRydWUpIG5vciBkZWxldGFibGVcblx0Ly8gKHJlc3VsdCBvZiBDb250ZXh0LnNldFNlbGVjdGVkKHRydWUpIC0+IExpc3RCaW5kaW5nLmtlZXBBbGl2ZSlcblx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kJHNoYXJlZFJlcXVlc3QgPSBmYWxzZTtcblxuXHR0aGlzLl9hcHBseURlZmF1bHRTb3J0aW5nKGJpbmRpbmdJbmZvLCAobWRjVGFibGUuZ2V0RGVsZWdhdGUoKSBhcyBNZGNUYWJsZURlbGVnYXRlKS5wYXlsb2FkKTtcblx0Ly8gYWRkIHNlbGVjdCB0byBiaW5kaW5nSW5mbyAoQkNQIDIxNzAxNjMwMTIpXG5cdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlbGVjdCA9IHRhYmxlUHJvcGVydGllcz8ucmVkdWNlKGZ1bmN0aW9uIChxdWVyeTogc3RyaW5nLCBwcm9wZXJ0eTogUHJvcGVydHlJbmZvKSB7XG5cdFx0Ly8gTmF2aWdhdGlvbiBwcm9wZXJ0aWVzIChyZXByZXNlbnRlZCBieSBYL1kpIHNob3VsZCBub3QgYmUgYWRkZWQgdG8gJHNlbGVjdC5cblx0XHQvLyBUb0RvIDogVGhleSBzaG91bGQgYmUgYWRkZWQgYXMgJGV4cGFuZD1YKCRzZWxlY3Q9WSkgaW5zdGVhZFxuXHRcdGlmIChwcm9wZXJ0eS5wYXRoICYmICFwcm9wZXJ0eS5wYXRoLmluY2x1ZGVzKFwiL1wiKSkge1xuXHRcdFx0cXVlcnkgPSBxdWVyeSA/IGAke3F1ZXJ5fSwke3Byb3BlcnR5LnBhdGh9YCA6IHByb3BlcnR5LnBhdGg7XG5cdFx0fVxuXHRcdHJldHVybiBxdWVyeTtcblx0fSwgXCJcIik7XG5cblx0Ly8gQWRkICRjb3VudFxuXHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRjb3VudCA9IHRydWU7XG5cblx0Ly9JZiB0aGUgZW50aXR5IGlzIERyYWZ0RW5hYmxlZCBhZGQgYSBEcmFmdEZpbHRlclxuXHRpZiAoYmluZGluZ0luZm8ucGF0aCAmJiBNb2RlbEhlbHBlci5pc0RyYWZ0U3VwcG9ydGVkKG1kY1RhYmxlLmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLCBiaW5kaW5nSW5mby5wYXRoKSkge1xuXHRcdGZpbHRlcnMucHVzaChuZXcgRmlsdGVyKFwiSXNBY3RpdmVFbnRpdHlcIiwgRmlsdGVyT3BlcmF0b3IuRVEsIHRydWUpKTtcblx0fVxuXHRiaW5kaW5nSW5mby5maWx0ZXJzID0gbmV3IEZpbHRlcihmaWx0ZXJzIGFzIEZpbHRlcltdLCB0cnVlKTtcbn07XG5cbk9EYXRhVGFibGVEZWxlZ2F0ZS5nZXRUeXBlTWFwID0gZnVuY3Rpb24gKCk6IG9iamVjdCB7XG5cdHJldHVybiBUeXBlTWFwO1xufTtcblxuLyoqXG4gKiBHZXQgdGFibGUgTW9kZWwuXG4gKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG4gKiBAcmV0dXJucyBNb2RlbFxuICovXG5PRGF0YVRhYmxlRGVsZWdhdGUuX2dldE1vZGVsID0gYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8TW9kZWw+IHtcblx0Y29uc3QgbWV0YWRhdGFJbmZvID0gKHRhYmxlLmdldERlbGVnYXRlKCkgYXMgeyBwYXlsb2FkOiB7IG1vZGVsOiBzdHJpbmcgfSB9KS5wYXlsb2FkO1xuXHRsZXQgbW9kZWw6IE1vZGVsID0gdGFibGUuZ2V0TW9kZWwobWV0YWRhdGFJbmZvLm1vZGVsKSE7XG5cdGlmICghbW9kZWwpIHtcblx0XHRhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0dGFibGUuYXR0YWNoRXZlbnRPbmNlKFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIHJlc29sdmUpO1xuXHRcdH0pO1xuXHRcdG1vZGVsID0gdGFibGUuZ2V0TW9kZWwobWV0YWRhdGFJbmZvLm1vZGVsKSE7XG5cdH1cblx0cmV0dXJuIG1vZGVsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgZGVmYXVsdCBzb3J0IG9yZGVyIGlmIG5lZWRlZC4gVGhpcyBpcyBvbmx5IHRoZSBjYXNlIGlmIHRoZSByZXF1ZXN0IGlzIG5vdCBhICRzZWFyY2ggcmVxdWVzdFxuICogKG1lYW5zIHRoZSBwYXJhbWV0ZXIgJHNlYXJjaCBvZiB0aGUgYmluZGluZ0luZm8gaXMgdW5kZWZpbmVkKSBhbmQgaWYgYSBzb3J0IG9yZGVyIGhhcyBub3QgYmVlbiBzZXQgYWxyZWFkeSxcbiAqIGZvciBleGFtcGxlLCB1c2luZyBhIHByZXNlbnRhdGlvbiB2YXJpYW50IG9yIG1hbnVhbGx5IHNldCBieSB0aGUgdXNlci5cbiAqIEBwYXJhbSBiaW5kaW5nSW5mbyBUaGUgYmluZGluZ0luZm8gb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gcGF5bG9hZCBUaGUgcGF5bG9hZCBvZiB0aGUgVGFibGVEZWxlZ2F0ZVxuICovXG5PRGF0YVRhYmxlRGVsZWdhdGUuX2FwcGx5RGVmYXVsdFNvcnRpbmcgPSBmdW5jdGlvbiAoYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbywgcGF5bG9hZDogUGF5bG9hZCk6IHZvaWQge1xuXHRpZiAoXG5cdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycyAmJlxuXHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaCA9PSB1bmRlZmluZWQgJiZcblx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkYWdncmVnYXRpb24/LnNlYXJjaCA9PSB1bmRlZmluZWQgJiZcblx0XHRiaW5kaW5nSW5mby5zb3J0ZXIgJiZcblx0XHRiaW5kaW5nSW5mby5zb3J0ZXIubGVuZ3RoID09IDBcblx0KSB7XG5cdFx0Y29uc3QgZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUgPSBwYXlsb2FkID8gcGF5bG9hZC5kZWZhdWx0U29ydFByb3BlcnR5TmFtZSA6IHVuZGVmaW5lZDtcblx0XHRpZiAoZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUpIHtcblx0XHRcdGJpbmRpbmdJbmZvLnNvcnRlci5wdXNoKG5ldyBTb3J0ZXIoZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUsIGZhbHNlKSk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRhYmxlIHByb3BlcnRpZXMgd2l0aCBmaWx0ZXIgZmllbGQgaW5mb3MuXG4gKiBAcGFyYW0gYVRhYmxlUHJvcGVydGllcyBBcnJheSB3aXRoIHRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBvTURDVGFibGUgVGhlIE1EQ1RhYmxlIGluc3RhbmNlXG4gKiBAcGFyYW0gbUNvbmRpdGlvbnMgVGhlIGNvbmRpdGlvbnMgb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gb01ldGFkYXRhSW5mbyBUaGUgbWV0YWRhdGEgaW5mbyBvZiB0aGUgZmlsdGVyIGZpZWxkXG4gKi9cbk9EYXRhVGFibGVEZWxlZ2F0ZS5fdXBkYXRlUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKFxuXHRhVGFibGVQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSxcblx0b01EQ1RhYmxlOiBUYWJsZSxcblx0bUNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPixcblx0b01ldGFkYXRhSW5mbzogUGF5bG9hZFxuKTogdm9pZCB7XG5cdGNvbnN0IGFDb25kaXRpb25LZXkgPSBPYmplY3Qua2V5cyhtQ29uZGl0aW9ucyksXG5cdFx0b01ldGFNb2RlbCA9IChvTURDVGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSE7XG5cdGFDb25kaXRpb25LZXkuZm9yRWFjaChmdW5jdGlvbiAoY29uZGl0aW9uS2V5OiBzdHJpbmcpIHtcblx0XHQvLyBUaGUgdHlwZUNvbmZpZyBpcyBub3Qgc2V0IGluIHRoZSB0YWJsZSBwcm9wZXJ0eUluZm9zLCBidXQgd2UgbmVlZCB0byBzZXQgaXQgZm9yIHRoZSBmaWx0ZXIgZmllbGRzXG5cdFx0Y29uc3QgY29uZGl0aW9uS2V5VHlwZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtvTWV0YWRhdGFJbmZvLmNvbGxlY3Rpb25OYW1lfS8ke2NvbmRpdGlvbktleX1gKT8uJFR5cGUgPz8gXCJFZG0uU3RyaW5nXCI7XG5cdFx0Y29uc3QgdHlwZUNvbmZpZyA9IG9NRENUYWJsZS5nZXRUeXBlTWFwKCkuZ2V0VHlwZUNvbmZpZyhjb25kaXRpb25LZXlUeXBlKTtcblx0XHRhVGFibGVQcm9wZXJ0aWVzLmZvckVhY2goKHRhYmxlUHJvcGVydHksIGluZGV4KSA9PiB7XG5cdFx0XHRpZiAodGFibGVQcm9wZXJ0eS5wYXRoID09PSBjb25kaXRpb25LZXkpIHtcblx0XHRcdFx0KGFUYWJsZVByb3BlcnRpZXNbaW5kZXhdIGFzIFByb3BlcnR5SW5mbyAmIHsgdHlwZUNvbmZpZzogb2JqZWN0IH0pLnR5cGVDb25maWcgPSB0eXBlQ29uZmlnO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChcblx0XHRcdGFUYWJsZVByb3BlcnRpZXMuZmluZEluZGV4KGZ1bmN0aW9uICh0YWJsZVByb3BlcnR5OiBQcm9wZXJ0eUluZm8pIHtcblx0XHRcdFx0cmV0dXJuIHRhYmxlUHJvcGVydHkucGF0aCA9PT0gY29uZGl0aW9uS2V5O1xuXHRcdFx0fSkgPT09IC0xXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBvQ29sdW1uRGVmOiBQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRcdGtleTogY29uZGl0aW9uS2V5LFxuXHRcdFx0XHRsYWJlbDogY29uZGl0aW9uS2V5LFxuXHRcdFx0XHRwYXRoOiBjb25kaXRpb25LZXksXG5cdFx0XHRcdGRhdGFUeXBlOiB0eXBlQ29uZmlnLnR5cGVJbnN0YW5jZS5iYXNlVHlwZSxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczogdHlwZUNvbmZpZy50eXBlSW5zdGFuY2U/Lm9Gb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRjb25zdHJhaW50czogdHlwZUNvbmZpZy50eXBlSW5zdGFuY2U/Lm9Db25zdHJhaW50c1xuXHRcdFx0fTtcblx0XHRcdGFUYWJsZVByb3BlcnRpZXMucHVzaChvQ29sdW1uRGVmKTtcblx0XHR9XG5cdH0pO1xufTtcblxuT0RhdGFUYWJsZURlbGVnYXRlLnVwZGF0ZUJpbmRpbmcgPSBmdW5jdGlvbiAoXG5cdG9UYWJsZTogVGFibGUsXG5cdG9CaW5kaW5nSW5mbzogQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8gJiB7XG5cdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0JHNlYXJjaD86IHN0cmluZztcblx0XHR9O1xuXHR9LFxuXHRvQmluZGluZzogT0RhdGFMaXN0QmluZGluZ1xuKTogdm9pZCB7XG5cdGxldCBiTmVlZE1hbnVhbFJlZnJlc2ggPSBmYWxzZTtcblx0Y29uc3Qgb0ludGVybmFsQmluZGluZ0NvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0Y29uc3Qgc01hbnVhbFVwZGF0ZVByb3BlcnR5S2V5ID0gXCJwZW5kaW5nTWFudWFsQmluZGluZ1VwZGF0ZVwiO1xuXHRjb25zdCBzTGFzdFNlYXJjaCA9IFwibGFzdFNlYXJjaFwiO1xuXHRjb25zdCBzTGFzdEZpbHRlciA9IFwibGFzdEZpbHRlclwiO1xuXHRjb25zdCBiUGVuZGluZ01hbnVhbFVwZGF0ZSA9IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShzTWFudWFsVXBkYXRlUHJvcGVydHlLZXkpO1xuXHRjb25zdCBsYXN0U2VhcmNoID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KHNMYXN0U2VhcmNoKTtcblx0Y29uc3QgbGFzdEZpbHRlciA9IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShzTGFzdEZpbHRlcik7XG5cdGxldCBvUm93QmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cblx0Ly9vQmluZGluZz1udWxsIG1lYW5zIHRoYXQgYSByZWJpbmRpbmcgbmVlZHMgdG8gYmUgZm9yY2VkIHZpYSB1cGRhdGVCaW5kaW5nIGluIG1kYyBUYWJsZURlbGVnYXRlXG5cdFRhYmxlRGVsZWdhdGUudXBkYXRlQmluZGluZy5hcHBseShPRGF0YVRhYmxlRGVsZWdhdGUsIFtvVGFibGUsIG9CaW5kaW5nSW5mbywgb0JpbmRpbmddKTtcblx0Ly9nZXQgcm93IGJpbmRpbmcgYWZ0ZXIgcmViaW5kIGZyb20gVGFibGVEZWxlZ2F0ZS51cGRhdGVCaW5kaW5nIGluIGNhc2Ugb0JpbmRpbmcgd2FzIG51bGxcblx0aWYgKCFvUm93QmluZGluZykge1xuXHRcdG9Sb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0fVxuXHRpZiAob1Jvd0JpbmRpbmcpIHtcblx0XHQvKipcblx0XHQgKiBNYW51YWwgcmVmcmVzaCBpZiBmaWx0ZXJzIGFyZSBub3QgY2hhbmdlZCBieSBiaW5kaW5nLnJlZnJlc2goKSBzaW5jZSB1cGRhdGluZyB0aGUgYmluZGluZ0luZm9cblx0XHQgKiBpcyBub3QgZW5vdWdoIHRvIHRyaWdnZXIgYSBiYXRjaCByZXF1ZXN0LlxuXHRcdCAqIEluIGNhc2UgdGhlcmUgaXMgbm8gaW50ZXJuYWxCaW5kaW5nQ29udGV4dCAoc2VlIEJDUCAyMjgwMTYxNTI0KSB3ZSBjYW4gbm90IGRldGVybWluZSBpZiBhIG1hbnVhbFxuXHRcdCAqIHJlZnJlc2ggaXMgbmVlZGVkIG9yIG5vdC4gVGhlcmVmb3JlLCB3ZSBhbHdheXMgcmVmcmVzaCBpbiB0aGlzIHNwZWNpYWwgY2FzZVxuXHRcdCAqL1xuXHRcdGJOZWVkTWFudWFsUmVmcmVzaCA9IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0XG5cdFx0XHQ/IGRlZXBFcXVhbChvQmluZGluZ0luZm8uZmlsdGVycywgbGFzdEZpbHRlcikgJiYgb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnM/LiRzZWFyY2ggPT09IGxhc3RTZWFyY2ggJiYgIWJQZW5kaW5nTWFudWFsVXBkYXRlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblx0b0ludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KHNMYXN0U2VhcmNoLCBvQmluZGluZ0luZm8ucGFyYW1ldGVycz8uJHNlYXJjaCk7XG5cdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShzTGFzdEZpbHRlciwgb0JpbmRpbmdJbmZvLmZpbHRlcnMpO1xuXG5cdGlmIChiTmVlZE1hbnVhbFJlZnJlc2ggJiYgb1RhYmxlLmdldEZpbHRlcigpKSB7XG5cdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KHNNYW51YWxVcGRhdGVQcm9wZXJ0eUtleSwgdHJ1ZSk7XG5cdFx0b1Jvd0JpbmRpbmdcblx0XHRcdC5yZXF1ZXN0UmVmcmVzaChvUm93QmluZGluZy5nZXRHcm91cElkKCkpXG5cdFx0XHQuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShzTWFudWFsVXBkYXRlUHJvcGVydHlLZXksIGZhbHNlKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZWZyZXNoaW5nIGEgZmlsdGVyQmFyIFZIIHRhYmxlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH1cblx0b1RhYmxlLmZpcmVFdmVudChcImJpbmRpbmdVcGRhdGVkXCIpO1xuXHQvL25vIG5lZWQgdG8gY2hlY2sgZm9yIHNlbWFudGljIHRhcmdldHMgaGVyZSBzaW5jZSB3ZSBhcmUgaW4gYSBWSCBhbmQgZG9uJ3Qgd2FudCB0byBhbGxvdyBmdXJ0aGVyIG5hdmlnYXRpb25cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNpbXBsZSBwcm9wZXJ0eSBmb3IgZWFjaCBpZGVudGlmaWVkIGNvbXBsZXggcHJvcGVydHkuXG4gKiBAcGFyYW0gcHJvcGVydGllc1RvQmVDcmVhdGVkIElkZW50aWZpZWQgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBleGlzdGluZ0NvbHVtbnMgVGhlIGxpc3Qgb2YgY29sdW1ucyBjcmVhdGVkIGZvciBwcm9wZXJ0aWVzIGRlZmluZWQgb24gdGhlIFZhbHVlIExpc3QuXG4gKiBAcGFyYW0gc29ydFJlc3RyaWN0aW9uc0luZm8gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHNvcnQgcmVzdHJpY3Rpb24gaW5mb3JtYXRpb25cbiAqIEBwYXJhbSBmaWx0ZXJSZXN0cmljdGlvbnNJbmZvIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBmaWx0ZXIgcmVzdHJpY3Rpb24gaW5mb3JtYXRpb25cbiAqIEBwYXJhbSBjYXNlU2Vuc2l0aXZlXG4gKiBAcmV0dXJucyBUaGUgYXJyYXkgb2YgcHJvcGVydGllcyBjcmVhdGVkLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmVsYXRlZFByb3BlcnRpZXMoXG5cdHByb3BlcnRpZXNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+LFxuXHRleGlzdGluZ0NvbHVtbnM6IFByb3BlcnR5SW5mb1tdLFxuXHRzb3J0UmVzdHJpY3Rpb25zSW5mbzogU29ydFJlc3RyaWN0aW9uc0luZm9UeXBlLFxuXHRmaWx0ZXJSZXN0cmljdGlvbnNJbmZvOiBGaWx0ZXJSZXN0cmljdGlvbnNJbmZvVHlwZSxcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW5cbik6IFByb3BlcnR5SW5mb1tdIHtcblx0Y29uc3QgcmVsYXRlZFByb3BlcnR5TmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9LFxuXHRcdHJlbGF0ZWRDb2x1bW5zOiBQcm9wZXJ0eUluZm9bXSA9IFtdO1xuXHRPYmplY3Qua2V5cyhwcm9wZXJ0aWVzVG9CZUNyZWF0ZWQpLmZvckVhY2goKHBhdGgpID0+IHtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnRpZXNUb0JlQ3JlYXRlZFtwYXRoXSxcblx0XHRcdHJlbGF0ZWRDb2x1bW4gPSBleGlzdGluZ0NvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ucGF0aCA9PT0gcGF0aCk7IC8vIENvbXBsZXggcHJvcGVydGllcyBkb2Vzbid0IGhhdmUgcGF0aCBzbyBvbmx5IHNpbXBsZSBjb2x1bW4gYXJlIGZvdW5kXG5cdFx0aWYgKCFyZWxhdGVkQ29sdW1uKSB7XG5cdFx0XHRjb25zdCBuZXdOYW1lID0gYFByb3BlcnR5Ojoke3BhdGh9YDtcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbcGF0aF0gPSBuZXdOYW1lO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlUeXBlQ29uZmlnID0gZ2V0VHlwZUNvbmZpZyhwcm9wZXJ0eSk7XG5cdFx0XHRjb25zdCB2YWx1ZUhlbHBDb2x1bW5UeXBlQ29uZmlnID0gVHlwZU1hcC5nZXRUeXBlQ29uZmlnKFxuXHRcdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcudHlwZSA/PyBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgdmFsdWVIZWxwVGFibGVDb2x1bW46IFByb3BlcnR5SW5mbyA9IHtcblx0XHRcdFx0a2V5OiBuZXdOYW1lLFxuXHRcdFx0XHRsYWJlbDogZ2V0TGFiZWwocHJvcGVydHkpLFxuXHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRzb3J0YWJsZTogaXNTb3J0YWJsZVByb3BlcnR5KHNvcnRSZXN0cmljdGlvbnNJbmZvLCBwcm9wZXJ0eSksXG5cdFx0XHRcdGZpbHRlcmFibGU6IGlzRmlsdGVyYWJsZVByb3BlcnR5KGZpbHRlclJlc3RyaWN0aW9uc0luZm8sIHByb3BlcnR5KSxcblx0XHRcdFx0ZGF0YVR5cGU6IHZhbHVlSGVscENvbHVtblR5cGVDb25maWcuY2xhc3NOYW1lLFxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiBpc1R5cGVGaWx0ZXJhYmxlKHByb3BlcnR5LnR5cGUgYXMga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZSlcblx0XHRcdFx0XHQ/IHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRcdGNvbnN0cmFpbnRzOiBpc1R5cGVGaWx0ZXJhYmxlKHByb3BlcnR5LnR5cGUgYXMga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZSlcblx0XHRcdFx0XHQ/IHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50c1xuXHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0XHRjYXNlU2Vuc2l0aXZlXG5cdFx0XHR9O1xuXHRcdFx0dmFsdWVIZWxwVGFibGVDb2x1bW4ubWF4Q29uZGl0aW9ucyA9IGdldFByb3BlcnR5TWF4Q29uZGl0aW9ucyhmaWx0ZXJSZXN0cmljdGlvbnNJbmZvLCB2YWx1ZUhlbHBUYWJsZUNvbHVtbik7XG5cdFx0XHRyZWxhdGVkQ29sdW1ucy5wdXNoKHZhbHVlSGVscFRhYmxlQ29sdW1uKTtcblx0XHR9XG5cdH0pO1xuXHQvLyBUaGUgcHJvcGVydHkgJ2tleScgaGFzIGJlZW4gcHJlZml4ZWQgd2l0aCAnUHJvcGVydHk6OicgZm9yIHVuaXF1ZW5lc3MuXG5cdC8vIFVwZGF0ZSB0aGUgc2FtZSBpbiBvdGhlciBwcm9wZXJ0eUluZm9zW10gcmVmZXJlbmNlcyB3aGljaCBwb2ludCB0byB0aGlzIHByb3BlcnR5LlxuXHRleGlzdGluZ0NvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0aWYgKGNvbHVtbi5wcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRjb2x1bW4ucHJvcGVydHlJbmZvcyA9IGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5tYXAoKGNvbHVtbk5hbWUpID0+IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbY29sdW1uTmFtZV0gPz8gY29sdW1uTmFtZSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHJlbGF0ZWRDb2x1bW5zO1xufVxuXG4vKipcbiAqIElkZW50aWZpZXMgdGhlIG1heENvbmRpdGlvbnMgZm9yIGEgZ2l2ZW4gcHJvcGVydHkuXG4gKiBAcGFyYW0gZmlsdGVyUmVzdHJpY3Rpb25zSW5mbyBUaGUgZmlsdGVyIHJlc3RyaWN0aW9uIGluZm9ybWF0aW9uIGZyb20gdGhlIHJlc3RyaWN0aW9uIGFubm90YXRpb24uXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIGAtMWAgb3IgYDFgIGlmIHRoZSBwcm9wZXJ0eSBpcyBhIE11bHRpVmFsdWVGaWx0ZXJFeHByZXNzaW9uLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eU1heENvbmRpdGlvbnMoZmlsdGVyUmVzdHJpY3Rpb25zSW5mbzogRmlsdGVyUmVzdHJpY3Rpb25zSW5mb1R5cGUsIHByb3BlcnR5OiBQcm9wZXJ0eUluZm8gfCBQcm9wZXJ0eSk6IG51bWJlciB7XG5cdGNvbnN0IHByb3BlcnR5UGF0aCA9IGdldFBhdGgocHJvcGVydHkpO1xuXHRyZXR1cm4gcHJvcGVydHlQYXRoICYmXG5cdFx0ZmlsdGVyUmVzdHJpY3Rpb25zSW5mby5wcm9wZXJ0eUluZm8/Lmhhc093blByb3BlcnR5KHByb3BlcnR5UGF0aCkgJiZcblx0XHRpc011bHRpVmFsdWVGaWx0ZXJFeHByZXNzaW9uKGZpbHRlclJlc3RyaWN0aW9uc0luZm8ucHJvcGVydHlJbmZvW3Byb3BlcnR5UGF0aF0gYXMgdW5rbm93biBhcyBzdHJpbmcpXG5cdFx0PyAtMVxuXHRcdDogMTtcbn1cblxuLyoqXG4gKiBJZGVudGlmaWVzIHRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IHdoaWNoIHJlZmVyZW5jZXMgdG8gdGhlIHVuaXQsIHRpbWV6b25lLCB0ZXh0QXJyYW5nZW1lbnQgb3IgY3VycmVuY3kuXG4gKiBAcGFyYW0gZGF0YU1vZGVsUHJvcGVydHlQYXRoIFRoZSBtb2RlbCBvYmplY3QgcGF0aCBvZiB0aGUgcHJvcGVydHkuXG4gKiBAcmV0dXJucyBUaGUgYWRkaXRpb25hbCBwcm9wZXJ0eS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldEFkZGl0aW9uYWxQcm9wZXJ0eShkYXRhTW9kZWxQcm9wZXJ0eVBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KTogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4gfCB1bmRlZmluZWQge1xuXHRjb25zdCBwcm9wZXJ0eSA9IGRhdGFNb2RlbFByb3BlcnR5UGF0aC50YXJnZXRPYmplY3Q7XG5cdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGggPVxuXHRcdHByb3BlcnR5ICYmXG5cdFx0KGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoKHByb3BlcnR5KSB8fFxuXHRcdFx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoKHByb3BlcnR5KSB8fFxuXHRcdFx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgocHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgocHJvcGVydHkpKTtcblx0aWYgKCFhZGRpdGlvbmFsUHJvcGVydHlQYXRoKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRjb25zdCBkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHkgPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oZGF0YU1vZGVsUHJvcGVydHlQYXRoLCBhZGRpdGlvbmFsUHJvcGVydHlQYXRoKTtcblxuXHQvL0FkZGl0aW9uYWwgUHJvcGVydHkgY291bGQgcmVmZXIgdG8gYSBuYXZpZ2F0aW9uIHByb3BlcnR5LCBrZWVwIHRoZSBrZXkgYW5kIHBhdGggYXMgbmF2aWdhdGlvbiBwcm9wZXJ0eVxuXHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHkgPSBkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHkudGFyZ2V0T2JqZWN0O1xuXHRpZiAoIWFkZGl0aW9uYWxQcm9wZXJ0eSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIGRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT0RhdGFUYWJsZURlbGVnYXRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEyREE7QUFDQTtBQUNBO0VBQ0EsTUFBTUEsa0JBQWtCLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFQyxhQUFhLENBQUM7O0VBRTNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQUgsa0JBQWtCLENBQUNJLGVBQWUsR0FBRyxnQkFBZ0JDLEtBQVksRUFBeUI7SUFDekYsTUFBTUMsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDQyxTQUFTLENBQUNGLEtBQUssQ0FBQztJQUN6QyxNQUFNRyxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUNDLG9C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
|
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
import type { DefaultTypeForEdmType } from "sap/fe/core/type/EDM";
|
|
21
21
|
import { isTypeFilterable } from "sap/fe/core/type/EDM";
|
|
22
22
|
import type { CollectionBindingInfo, FilterInfo } from "sap/fe/macros/CollectionBindingInfo";
|
|
23
|
+
import CommonHelper from "sap/fe/macros/CommonHelper";
|
|
23
24
|
import MacrosDelegateUtil from "sap/fe/macros/DelegateUtil";
|
|
24
25
|
import type { FilterConditions } from "sap/fe/macros/filterBar/FilterHelper";
|
|
25
26
|
import { getPath, isFilterableProperty, isSortableProperty } from "sap/fe/macros/internal/valuehelp/TableDelegateHelper";
|
|
@@ -70,11 +71,44 @@ ODataTableDelegate.fetchProperties = async function (table: Table): Promise<Prop
|
|
|
70
71
|
const model = await this._getModel(table);
|
|
71
72
|
const properties = await this._createPropertyInfos(table, model);
|
|
72
73
|
ODataTableDelegate.createInternalBindingContext(table);
|
|
74
|
+
ODataTableDelegate.setSortConditions(table, properties);
|
|
73
75
|
MacrosDelegateUtil.setCachedProperties(table, properties);
|
|
74
76
|
(table.getBindingContext("internal") as Context).setProperty("tablePropertiesAvailable", true);
|
|
75
77
|
return properties;
|
|
76
78
|
};
|
|
77
79
|
|
|
80
|
+
/**
|
|
81
|
+
* Set sort conditions on the table.
|
|
82
|
+
* @param table Valuehelp table instance
|
|
83
|
+
* @param properties PropertyInfo array
|
|
84
|
+
*/
|
|
85
|
+
ODataTableDelegate.setSortConditions = function (table: Table, properties: PropertyInfo[]): void {
|
|
86
|
+
const sortConditionsCD = table.data("sortConditions");
|
|
87
|
+
const rawSortConditions = CommonHelper.parseCustomData(sortConditionsCD) as { sorters: { name: string }[] } | undefined;
|
|
88
|
+
if (rawSortConditions?.sorters) {
|
|
89
|
+
rawSortConditions.sorters.forEach((sortCondition) => {
|
|
90
|
+
const infoName = ODataTableDelegate.convertPropertyPathToInfoName(sortCondition.name, properties);
|
|
91
|
+
if (infoName && infoName !== sortCondition.name) {
|
|
92
|
+
sortCondition.name = infoName;
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
table.setSortConditions({ ...rawSortConditions });
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Convert a property path to its corresponding info name.
|
|
101
|
+
* @param propertyPath Property path to be converted.
|
|
102
|
+
* @param properties Table PropertyInfo array
|
|
103
|
+
* @returns Property info name if found, otherwise returns the original property path.
|
|
104
|
+
*/
|
|
105
|
+
ODataTableDelegate.convertPropertyPathToInfoName = function (propertyPath: string, properties: PropertyInfo[]): string {
|
|
106
|
+
const propertyInfo = properties.find((column) => {
|
|
107
|
+
return !column.propertyInfos && column.path === propertyPath;
|
|
108
|
+
});
|
|
109
|
+
return propertyInfo?.key ?? propertyPath;
|
|
110
|
+
};
|
|
111
|
+
|
|
78
112
|
ODataTableDelegate.createInternalBindingContext = function (table: Table): void {
|
|
79
113
|
let dialog: ManagedObject | null = table;
|
|
80
114
|
while (dialog && !dialog.isA("sap.ui.mdc.valuehelp.Dialog")) {
|
|
@@ -235,7 +269,7 @@ ODataTableDelegate.updateBindingInfo = function (mdcTable: Table, bindingInfo: C
|
|
|
235
269
|
//TODO: consider a mechanism ('FilterMergeUtil' or enhance 'FilterUtil') to allow the connection between different filters)
|
|
236
270
|
if (isFilterEnabled) {
|
|
237
271
|
conditions = mdcTable.getConditions();
|
|
238
|
-
innerFilterInfo = FilterUtil.getFilterInfo(mdcTable, conditions, tableProperties
|
|
272
|
+
innerFilterInfo = FilterUtil.getFilterInfo(mdcTable, conditions, tableProperties, []) as FilterInfo;
|
|
239
273
|
if (innerFilterInfo.filters) {
|
|
240
274
|
filters.push(innerFilterInfo.filters);
|
|
241
275
|
}
|
|
@@ -253,7 +287,7 @@ ODataTableDelegate.updateBindingInfo = function (mdcTable: Table, bindingInfo: C
|
|
|
253
287
|
const parameterNames = DelegateUtil.getParameterNames(filterBar);
|
|
254
288
|
// The table properties needs to updated with the filter field if no Selectionfields are annotated and not part as value help parameter
|
|
255
289
|
ODataTableDelegate._updatePropertyInfo(tableProperties, mdcTable, conditions, metadataInfo);
|
|
256
|
-
outerFilterInfo = FilterUtil.getFilterInfo(filterBar, conditions, tableProperties
|
|
290
|
+
outerFilterInfo = FilterUtil.getFilterInfo(filterBar, conditions, tableProperties, parameterNames);
|
|
257
291
|
|
|
258
292
|
if (outerFilterInfo.filters) {
|
|
259
293
|
filters.push(outerFilterInfo.filters);
|
|
@@ -446,6 +480,7 @@ ODataTableDelegate.updateBinding = function (
|
|
|
446
480
|
* @param existingColumns The list of columns created for properties defined on the Value List.
|
|
447
481
|
* @param sortRestrictionsInfo An object containing the sort restriction information
|
|
448
482
|
* @param filterRestrictionsInfo An object containing the filter restriction information
|
|
483
|
+
* @param caseSensitive
|
|
449
484
|
* @returns The array of properties created.
|
|
450
485
|
* @private
|
|
451
486
|
*/
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
threshold="20"
|
|
27
27
|
p13nMode="Sort"
|
|
28
28
|
showRowCount="true"
|
|
29
|
-
sortConditions="{parts: [{path:'valueList>'},{path:'source>/bSuggestion'}], formatter:'VLH.getSortConditionsFromPresentationVariant'}"
|
|
29
|
+
macrodata:sortConditions="{parts: [{path:'valueList>'},{path:'source>/bSuggestion'}, {value: true }], formatter:'VLH.getSortConditionsFromPresentationVariant'}"
|
|
30
30
|
macrodata:columns="{= COMMON.stringifyCustomData(${viewData>/columns})}"
|
|
31
31
|
autoBindOnInit="false"
|
|
32
32
|
>
|
|
@@ -55,6 +55,7 @@
|
|
|
55
55
|
vhIdPrefix="FieldValueHelp"
|
|
56
56
|
>
|
|
57
57
|
<formatOptions
|
|
58
|
+
showEmptyIndicator="false"
|
|
58
59
|
displayMode="{= ValueHelpTemplating.getValueHelpTableDisplayMode(${property>@@Property.getPropertyObjectPath})}"
|
|
59
60
|
/>
|
|
60
61
|
</macro:Field>
|