@sapui5/sap.fe.macros 1.141.2 → 1.143.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 +4 -10
- package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
- package/src/sap/fe/macros/Chart.js +34 -23
- package/src/sap/fe/macros/Chart.tsx +25 -11
- package/src/sap/fe/macros/CollaborativeDraftHandler.js +47 -36
- package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +50 -31
- package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
- package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
- package/src/sap/fe/macros/CommonHelper.js +14 -24
- package/src/sap/fe/macros/CommonHelper.ts +18 -25
- package/src/sap/fe/macros/ConditionalSwitch.js +1 -2
- package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
- package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
- package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
- package/src/sap/fe/macros/Field.js +34 -17
- package/src/sap/fe/macros/Field.ts +64 -32
- package/src/sap/fe/macros/FooterContent.js +7 -3
- package/src/sap/fe/macros/FooterContent.tsx +8 -13
- package/src/sap/fe/macros/KPITag.js +6 -6
- package/src/sap/fe/macros/KPITag.tsx +8 -6
- package/src/sap/fe/macros/MacroAPI.js +4 -3
- package/src/sap/fe/macros/MacroAPI.ts +3 -3
- package/src/sap/fe/macros/MessageButton.js +4 -3
- package/src/sap/fe/macros/MessageButton.tsx +7 -3
- package/src/sap/fe/macros/MicroChart.js +12 -7
- package/src/sap/fe/macros/MicroChart.tsx +9 -3
- package/src/sap/fe/macros/MultiValueField.js +22 -36
- package/src/sap/fe/macros/MultiValueField.tsx +34 -66
- package/src/sap/fe/macros/RichTextEditor.js +3 -4
- package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
- package/src/sap/fe/macros/Share.js +7 -7
- package/src/sap/fe/macros/Share.tsx +9 -6
- package/src/sap/fe/macros/Status.js +39 -11
- package/src/sap/fe/macros/Status.tsx +25 -5
- package/src/sap/fe/macros/ValueHelp.js +5 -2
- package/src/sap/fe/macros/ValueHelp.tsx +5 -0
- package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
- package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
- package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
- package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
- package/src/sap/fe/macros/chart/Action.js +25 -2
- package/src/sap/fe/macros/chart/Action.ts +13 -0
- package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
- package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
- package/src/sap/fe/macros/chart/ChartDelegate.js +29 -8
- package/src/sap/fe/macros/chart/ChartDelegate.ts +46 -14
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +58 -12
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +75 -13
- package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
- package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
- package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
- package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
- package/src/sap/fe/macros/controls/FilterBar.js +39 -3
- package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
- package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
- package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
- package/src/sap/fe/macros/coreUI/CreateDialog.js +3 -3
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +2 -2
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +40 -12
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -9
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
- package/src/sap/fe/macros/field/FieldFormatOptions.js +4 -4
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +2 -2
- package/src/sap/fe/macros/field/FieldHelper.js +4 -3
- package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
- package/src/sap/fe/macros/field/FieldRuntime.js +44 -9
- package/src/sap/fe/macros/field/FieldRuntime.ts +72 -8
- package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
- package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
- package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
- package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
- package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
- package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
- package/src/sap/fe/macros/filter/FilterUtils.js +130 -40
- package/src/sap/fe/macros/filter/FilterUtils.ts +167 -45
- package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
- package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +15 -9
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +36 -17
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +21 -10
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +81 -63
- package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
- package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
- package/src/sap/fe/macros/form/Form.block.js +27 -2
- package/src/sap/fe/macros/form/Form.block.ts +31 -11
- package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
- package/src/sap/fe/macros/form/FormContainer.block.js +110 -63
- package/src/sap/fe/macros/form/FormContainer.block.ts +121 -64
- package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
- package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
- package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
- package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
- package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
- package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
- package/src/sap/fe/macros/insights/InsightsService.js +3 -2
- package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
- package/src/sap/fe/macros/internal/DataPoint.js +7 -8
- package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
- package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
- package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
- package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
- package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
- package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
- package/src/sap/fe/macros/library.js +5 -6
- package/src/sap/fe/macros/{library.ts → library.tsx} +3 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
- package/src/sap/fe/macros/messagebundle.properties +13 -5
- package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
- package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
- package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
- package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
- package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
- package/src/sap/fe/macros/messagebundle_da.properties +12 -3
- package/src/sap/fe/macros/messagebundle_de.properties +16 -7
- package/src/sap/fe/macros/messagebundle_el.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +13 -4
- package/src/sap/fe/macros/messagebundle_es.properties +12 -3
- package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
- package/src/sap/fe/macros/messagebundle_et.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
- package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
- package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
- package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
- package/src/sap/fe/macros/messagebundle_id.properties +18 -9
- package/src/sap/fe/macros/messagebundle_it.properties +12 -3
- package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
- package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
- package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
- package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
- package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
- package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
- package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
- package/src/sap/fe/macros/messagebundle_no.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
- package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
- package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
- package/src/sap/fe/macros/messagebundle_th.properties +11 -2
- package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
- package/src/sap/fe/macros/messages/MessageButton.js +21 -12
- package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
- package/src/sap/fe/macros/quickView/QuickView.js +5 -4
- package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
- package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
- package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
- package/src/sap/fe/macros/table/Action.js +21 -5
- package/src/sap/fe/macros/table/Action.ts +14 -4
- package/src/sap/fe/macros/table/ActionGroup.js +15 -2
- package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
- package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
- package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
- package/src/sap/fe/macros/table/ActionOverride.js +14 -2
- package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
- package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
- package/src/sap/fe/macros/table/Column.js +3 -2
- package/src/sap/fe/macros/table/Column.ts +1 -1
- package/src/sap/fe/macros/table/MdcTableTemplate.js +96 -18
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +136 -17
- package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
- package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
- package/src/sap/fe/macros/table/Table.block.js +74 -30
- package/src/sap/fe/macros/table/Table.block.tsx +77 -14
- package/src/sap/fe/macros/table/TableAPI.js +175 -132
- package/src/sap/fe/macros/table/TableAPI.ts +67 -30
- package/src/sap/fe/macros/table/TableDefinition.js +20 -3
- package/src/sap/fe/macros/table/TableDefinition.ts +18 -2
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -3
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +12 -9
- package/src/sap/fe/macros/table/TableHelper.js +5 -2
- package/src/sap/fe/macros/table/TableHelper.ts +5 -2
- package/src/sap/fe/macros/table/TableRuntime.js +25 -13
- package/src/sap/fe/macros/table/TableRuntime.ts +31 -17
- package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
- package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
- package/src/sap/fe/macros/table/Utils.js +9 -3
- package/src/sap/fe/macros/table/Utils.ts +14 -8
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +72 -29
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +114 -123
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +15 -6
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +14 -5
- package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
- package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +42 -14
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +49 -19
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
- package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
- package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
- package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
- package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
- package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
- package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
|
@@ -44,6 +44,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
44
44
|
// we start by asking to recreate an empty row (if live change has already done it this won't have any effect)
|
|
45
45
|
// but we do not wait
|
|
46
46
|
this.createEmptyRows(activateEvent.getSource(), this.getContent(), true);
|
|
47
|
+
const table = this.getContent();
|
|
48
|
+
const appComponent = CommonUtils.getAppComponent(table);
|
|
49
|
+
const binding = table.getRowBinding();
|
|
47
50
|
if (!this.validateEmptyRow(activatedContext)) {
|
|
48
51
|
activateEvent.preventDefault();
|
|
49
52
|
return;
|
|
@@ -54,7 +57,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
54
57
|
controller = view.getController(),
|
|
55
58
|
editFlow = controller.editFlow;
|
|
56
59
|
try {
|
|
57
|
-
await (activatedContext.created() ?? Promise.resolve());
|
|
60
|
+
await Promise.all([appComponent.getSideEffectsService().requestSideEffectsForNavigationProperty(binding.getPath(), view.getBindingContext()), activatedContext.created?.() ?? Promise.resolve()]);
|
|
58
61
|
await editFlow.onAfterCreate({
|
|
59
62
|
context: activatedContext
|
|
60
63
|
});
|
|
@@ -97,6 +100,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
97
100
|
* @param enablement
|
|
98
101
|
*/;
|
|
99
102
|
_proto.setEmptyRowsEnabled = function setEmptyRowsEnabled(enablement) {
|
|
103
|
+
// INIT: ensure tableDefaultsPromise exists when enabling empty rows
|
|
104
|
+
if (enablement && !this.tableDefaultsPromise) {
|
|
105
|
+
this.tableDefaultsPromise = this.getTableDefaults(this.getContent());
|
|
106
|
+
}
|
|
100
107
|
this.setProperty("emptyRowsEnabled", enablement);
|
|
101
108
|
const navigationPath = this.getContent().data().navigationPath,
|
|
102
109
|
appComponent = CommonUtils.getAppComponent(this.getContent());
|
|
@@ -105,13 +112,18 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
105
112
|
const defaultValuesFunction = listBinding?.getResolvedPath() ? this.getDefaultValuesFunction(listBinding) : undefined;
|
|
106
113
|
if (defaultValuesFunction) {
|
|
107
114
|
appComponent.getSideEffectsService().registerTargetCallback(navigationPath, this.updateEmptyRows.bind(this));
|
|
115
|
+
// Immediate initial setup without defaults
|
|
116
|
+
if (!this.tableDefaultsPromise) {
|
|
117
|
+
this.setUpEmptyRows(this.getContent());
|
|
118
|
+
}
|
|
108
119
|
}
|
|
109
120
|
} else {
|
|
110
121
|
appComponent.getSideEffectsService().deregisterTargetCallback(navigationPath);
|
|
111
122
|
}
|
|
123
|
+
// Immediate initial setup only if no defaults promise exists (to avoid duplicate empty rows)
|
|
112
124
|
if (this.tableDefaultsPromise) {
|
|
113
125
|
this.tableDefaultsPromise.then(tableDefaultData => {
|
|
114
|
-
this.
|
|
126
|
+
this.updateEmptyRows();
|
|
115
127
|
return tableDefaultData;
|
|
116
128
|
}).catch(error => {
|
|
117
129
|
Log.error("Error while setting up empty rows:", error);
|
|
@@ -129,12 +141,22 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
129
141
|
const table = this.getContent();
|
|
130
142
|
const binding = table.getRowBinding();
|
|
131
143
|
const bindingHeaderContext = binding.getHeaderContext();
|
|
132
|
-
if (binding && binding.isResolved() && binding.isLengthFinal() && bindingHeaderContext) {
|
|
133
|
-
|
|
144
|
+
if (!(binding && binding.isResolved() && binding.isLengthFinal() && bindingHeaderContext)) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const contextPath = bindingHeaderContext.getPath();
|
|
148
|
+
|
|
149
|
+
// DO NOT show empty rows in display mode.
|
|
150
|
+
// If any inactive rows are present (from a previous state), remove them and exit.
|
|
151
|
+
if (!CommonUtils.getIsEditable(table)) {
|
|
152
|
+
this.removeEmptyRowsMessages();
|
|
134
153
|
this._deleteEmptyRows(binding, contextPath);
|
|
135
|
-
|
|
154
|
+
return;
|
|
136
155
|
}
|
|
137
|
-
|
|
156
|
+
this._deleteEmptyRows(binding, contextPath);
|
|
157
|
+
const defaults = await this.getTableDefaults(table);
|
|
158
|
+
// Update the empty rows with the latest default values
|
|
159
|
+
await this.createEmptyRows(binding, table, false, undefined, false, defaults);
|
|
138
160
|
}
|
|
139
161
|
|
|
140
162
|
/**
|
|
@@ -308,7 +330,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
308
330
|
let forceCreateatEnd = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
|
309
331
|
let defaultValueFunctionData = arguments.length > 5 ? arguments[5] : undefined;
|
|
310
332
|
const inlineCreationRowCount = newInlineCreationRowFromPaste ?? (this.getTableDefinition().control?.inlineCreationRowCount || 1);
|
|
311
|
-
|
|
333
|
+
/* ensures that at most one additional empty row can exist during LiveChange (when `recreateOneRow` is true).
|
|
334
|
+
In all other cases, the number of inactive contexts cannot exceed `inlineCreationRowCount`.*/
|
|
335
|
+
if (this.creatingEmptyRows || this.getInactiveContextNumber(binding) >= inlineCreationRowCount + (recreateOneRow ? 1 : 0)) {
|
|
312
336
|
return;
|
|
313
337
|
}
|
|
314
338
|
const data = Array.from({
|
|
@@ -318,17 +342,21 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
318
342
|
inactive = true,
|
|
319
343
|
view = CommonUtils.getTargetView(table),
|
|
320
344
|
controller = view.getController(),
|
|
321
|
-
editFlow = controller.editFlow
|
|
322
|
-
appComponent = CommonUtils.getAppComponent(table);
|
|
345
|
+
editFlow = controller.editFlow;
|
|
323
346
|
this.creatingEmptyRows = true;
|
|
324
347
|
try {
|
|
325
348
|
const dataForCreate = recreateOneRow ? [{}] : data;
|
|
326
349
|
const contexts = await editFlow.createMultipleDocuments(binding,
|
|
327
350
|
// during a live change, only 1 new document is created
|
|
328
|
-
dataForCreate,
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
351
|
+
dataForCreate, {
|
|
352
|
+
createAtEnd: recreateOneRow || forceCreateatEnd ? true : atEnd,
|
|
353
|
+
// When editing an empty row, the new empty row is to be created just below and not above
|
|
354
|
+
|
|
355
|
+
beforeCreateCallBack: controller.editFlow.onBeforeCreate,
|
|
356
|
+
createAsInactive: inactive,
|
|
357
|
+
hideBusyIndicator: inactive,
|
|
358
|
+
defaultValueFunctionData
|
|
359
|
+
});
|
|
332
360
|
contexts?.forEach(async function (context) {
|
|
333
361
|
try {
|
|
334
362
|
await context.created();
|
|
@@ -350,4 +378,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
350
378
|
_exports = EmptyRowsHandler;
|
|
351
379
|
return _exports;
|
|
352
380
|
}, false);
|
|
353
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFbXB0eVJvd3NIYW5kbGVyIiwiX2V4cG9ydHMiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJzZXR1cE1peGluIiwiX2Jhc2VDbGFzcyIsIl9vbkZpZWxkTGl2ZUNoYW5nZSIsInVpNUV2ZW50IiwiZmllbGQiLCJnZXRTb3VyY2UiLCJiaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiYmluZGluZyIsImdldEJpbmRpbmciLCJpc0luYWN0aXZlIiwidGFibGUiLCJnZXRDb250ZW50IiwiY3JlYXRlRW1wdHlSb3dzIiwiX2hhbmRsZUNyZWF0ZUFjdGl2YXRlIiwiYWN0aXZhdGVFdmVudCIsImFjdGl2YXRlZENvbnRleHQiLCJnZXRQYXJhbWV0ZXIiLCJ2YWxpZGF0ZUVtcHR5Um93IiwicHJldmVudERlZmF1bHQiLCJ0cmFuc2llbnRQYXRoIiwiZ2V0UGF0aCIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsImVkaXRGbG93IiwiY3JlYXRlZCIsIlByb21pc2UiLCJyZXNvbHZlIiwib25BZnRlckNyZWF0ZSIsImNvbnRleHQiLCJlIiwiTG9nIiwid2FybmluZyIsImNvbnRlbnQiLCJjb2xsYWJvcmF0aXZlRHJhZnQiLCJzZW5kIiwiYWN0aW9uIiwiQWN0aXZpdHkiLCJDcmVhdGUiLCJ1cGRhdGVMb2Nrc0ZvckNvbnRleHRQYXRoIiwiZXJyb3IiLCJnZXREZWZhdWx0VmFsdWVzRnVuY3Rpb24iLCJsaXN0QmluZGluZyIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJtZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJtZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0IiwiZ2V0UmVzb2x2ZWRQYXRoIiwibGlzdEJpbmRpbmdPYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZGVmYXVsdEZ1bmNPblRhcmdldE9iamVjdCIsInRhcmdldE9iamVjdCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiRGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwiZGVmYXVsdEZ1bmNPblRhcmdldEVudGl0eVNldCIsInRhcmdldEVudGl0eVNldCIsInNldEVtcHR5Um93c0VuYWJsZWQiLCJlbmFibGVtZW50Iiwic2V0UHJvcGVydHkiLCJuYXZpZ2F0aW9uUGF0aCIsImRhdGEiLCJhcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRSb3dCaW5kaW5nIiwiZGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwidW5kZWZpbmVkIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwicmVnaXN0ZXJUYXJnZXRDYWxsYmFjayIsInVwZGF0ZUVtcHR5Um93cyIsImJpbmQiLCJkZXJlZ2lzdGVyVGFyZ2V0Q2FsbGJhY2siLCJ0YWJsZURlZmF1bHRzUHJvbWlzZSIsInRoZW4iLCJ0YWJsZURlZmF1bHREYXRhIiwic2V0VXBFbXB0eVJvd3MiLCJjYXRjaCIsImJpbmRpbmdIZWFkZXJDb250ZXh0IiwiZ2V0SGVhZGVyQ29udGV4dCIsImlzUmVzb2x2ZWQiLCJpc0xlbmd0aEZpbmFsIiwiY29udGV4dFBhdGgiLCJfZGVsZXRlRW1wdHlSb3dzIiwiX3ZhbGlkYXRlQW5kUmV0cmlldmVCaW5kaW5nIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsImNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uTW9kZSIsIklubGluZUNyZWF0aW9uUm93cyIsInVpTW9kZWwiLCJnZXRQcm9wZXJ0eSIsIndhdGNoQmluZGluZyIsImJpbmRQcm9wZXJ0eSIsImZuSGFuZGxlciIsImRldGFjaENoYW5nZSIsImRlc3Ryb3kiLCJhdHRhY2hDaGFuZ2UiLCJnZXRUYWJsZURlZmF1bHRzIiwiVHJhbnNhY3Rpb25IZWxwZXIiLCJnZXREYXRhRnJvbURlZmF1bHRWYWx1ZUZ1bmN0aW9uIiwiY3JlYXRlQnV0dG9uV2FzUHJlc3NlZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImVtcHR5Um93c0VuYWJsZWQiLCJyZW1vdmVFbXB0eVJvd3NNZXNzYWdlcyIsImdldElzRWRpdGFibGUiLCJpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlIiwiaW5hY3RpdmVDb250ZXh0IiwiZ2V0QWxsQ3VycmVudENvbnRleHRzIiwiZmluZCIsInN0YXJ0c1dpdGgiLCJkZWxldGUiLCJnZXRJbmFjdGl2ZUNvbnRleHROdW1iZXIiLCJmaWx0ZXIiLCJyZXF1aXJlZFByb3BlcnRpZXMiLCJhbm5vdGF0aW9uIiwibWlzc2luZ1Byb3BlcnRpZXMiLCJyZXF1aXJlZFByb3BlcnR5IiwiZ2V0T2JqZWN0IiwicmVzb3VyY2VCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJtZXNzYWdlcyIsImRpc3BsYXllZENvbHVtbiIsIm1pc3NpbmdQcm9wZXJ0eSIsImVycm9yTWVzc2FnZSIsIm1pc3NpbmdDb2x1bW4iLCJjb2x1bW5zIiwidGFibGVDb2x1bW4iLCJyZWxhdGl2ZVBhdGgiLCJwcm9wZXJ0eUluZm9zIiwiaW5jbHVkZXMiLCJnZXRUZXh0IiwiZ2V0Q29sdW1ucyIsIm1kY0NvbHVtbiIsImdldFByb3BlcnR5S2V5IiwibmFtZSIsImdldEhlYWRlciIsImxhYmVsIiwicHVzaCIsIk1lc3NhZ2UiLCJtZXNzYWdlIiwicHJvY2Vzc29yIiwidHlwZSIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJ0ZWNobmljYWwiLCJwZXJzaXN0ZW50IiwidGVjaG5pY2FsRGV0YWlscyIsInRhYmxlSWQiLCJnZXRJZCIsImVtcHR5Um93TWVzc2FnZSIsInRhcmdldCIsIk1lc3NhZ2luZyIsImFkZE1lc3NhZ2VzIiwiaW5hY3RpdmVDb250ZXh0cyIsInJlbW92ZU1lc3NhZ2VzIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm1zZyIsImdldFRlY2huaWNhbERldGFpbHMiLCJjb250ZXh0TWF0Y2hlcyIsIkFycmF5IiwiaXNBcnJheSIsInNvbWUiLCJnZXRUYXJnZXRzIiwidmFsdWUiLCJyZWNyZWF0ZU9uZVJvdyIsIm5ld0lubGluZUNyZWF0aW9uUm93RnJvbVBhc3RlIiwiZm9yY2VDcmVhdGVhdEVuZCIsImRlZmF1bHRWYWx1ZUZ1bmN0aW9uRGF0YSIsImlubGluZUNyZWF0aW9uUm93Q291bnQiLCJjcmVhdGluZ0VtcHR5Um93cyIsImZyb20iLCJhdEVuZCIsImluYWN0aXZlIiwiZGF0YUZvckNyZWF0ZSIsImNvbnRleHRzIiwiY3JlYXRlTXVsdGlwbGVEb2N1bWVudHMiLCJvbkJlZm9yZUNyZWF0ZSIsInJlcXVlc3RTaWRlRWZmZWN0c0Zvck5hdmlnYXRpb25Qcm9wZXJ0eSIsImZvckVhY2giLCJjYW5jZWxlZCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRW1wdHlSb3dzSGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IERlZmF1bHRWYWx1ZXNGdW5jdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IHR5cGUgSUludGVyZmFjZVdpdGhNaXhpbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IEFjdGl2aXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IFRyYW5zYWN0aW9uSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9UcmFuc2FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IHsgQ3JlYXRpb25Nb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25UYWJsZUNvbHVtbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgTURDQ29sdW1uIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NvbHVtblwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRFcnJvclR5cGUgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgeyB0eXBlIElUYWJsZUJsb2NrIH0gZnJvbSBcIi4uL1RhYmxlQVBJXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVtcHR5Um93c0hhbmRsZXIgaW1wbGVtZW50cyBJSW50ZXJmYWNlV2l0aE1peGluIHtcblx0Y3JlYXRpbmdFbXB0eVJvd3M/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHRhYmxlJ3MgZGVmYXVsdCB2YWx1ZXMuXG5cdCAqL1xuXHRwdWJsaWMgdGFibGVEZWZhdWx0c1Byb21pc2U/OiBQcm9taXNlPG9iamVjdD47XG5cblx0c2V0dXBNaXhpbihfYmFzZUNsYXNzOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdC8vIFRoaXMgbWV0aG9kIGlzIG5lZWRlZCB0byBpbXBsZW1lbnQgaW50ZXJmYWNlIElJbnRlcmZhY2VXaXRoTWl4aW5cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgb25GaWVsZExpdmVDaGFuZ2UgZXZlbnQuXG5cdCAqIEBwYXJhbSB1aTVFdmVudCBUaGUgZXZlbnQgb2JqZWN0IHBhc3NlZCBieSB0aGUgb25GaWVsZExpdmVDaGFuZ2UgZXZlbnRcblx0ICovXG5cdF9vbkZpZWxkTGl2ZUNoYW5nZSh0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsIHVpNUV2ZW50OiBVSTVFdmVudDx7fSwgQ29udHJvbD4pOiB2b2lkIHtcblx0XHRjb25zdCBmaWVsZCA9IHVpNUV2ZW50LmdldFNvdXJjZSgpLFxuXHRcdFx0YmluZGluZ0NvbnRleHQgPSBmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQsXG5cdFx0XHRiaW5kaW5nID0gYmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdC8vIGNyZWF0aW9uIG9mIGEgbmV3IGluYWN0aXZlIHJvdyBpZiByZWxldmFudFxuXHRcdGlmIChiaW5kaW5nQ29udGV4dC5pc0luYWN0aXZlKCkpIHtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGhpcz8uZ2V0Q29udGVudCgpO1xuXHRcdFx0dGhpcz8uY3JlYXRlRW1wdHlSb3dzKGJpbmRpbmcgYXMgT0RhdGFMaXN0QmluZGluZywgdGFibGUsIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBDcmVhdGVBY3RpdmF0ZSBldmVudCBmcm9tIHRoZSBPRGF0YUxpc3RCaW5kaW5nLlxuXHQgKiBAcGFyYW0gYWN0aXZhdGVFdmVudCBUaGUgZXZlbnQgc2VudCBieSB0aGUgYmluZGluZ1xuXHQgKi9cblx0YXN5bmMgX2hhbmRsZUNyZWF0ZUFjdGl2YXRlKFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgRW1wdHlSb3dzSGFuZGxlcixcblx0XHRhY3RpdmF0ZUV2ZW50OiBVSTVFdmVudDx7IGNvbnRleHQ6IENvbnRleHQgfSwgT0RhdGFMaXN0QmluZGluZz5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYWN0aXZhdGVkQ29udGV4dCA9IGFjdGl2YXRlRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29udGV4dFwiKTtcblx0XHQvLyB3ZSBzdGFydCBieSBhc2tpbmcgdG8gcmVjcmVhdGUgYW4gZW1wdHkgcm93IChpZiBsaXZlIGNoYW5nZSBoYXMgYWxyZWFkeSBkb25lIGl0IHRoaXMgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0KVxuXHRcdC8vIGJ1dCB3ZSBkbyBub3Qgd2FpdFxuXHRcdHRoaXMuY3JlYXRlRW1wdHlSb3dzKGFjdGl2YXRlRXZlbnQuZ2V0U291cmNlKCksIHRoaXMuZ2V0Q29udGVudCgpLCB0cnVlKTtcblx0XHRpZiAoIXRoaXMudmFsaWRhdGVFbXB0eVJvdyhhY3RpdmF0ZWRDb250ZXh0KSkge1xuXHRcdFx0YWN0aXZhdGVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdHJhbnNpZW50UGF0aCA9IGFjdGl2YXRlZENvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0XHR2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKSxcblx0XHRcdFx0Y29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpLFxuXHRcdFx0XHRlZGl0RmxvdyA9IGNvbnRyb2xsZXIuZWRpdEZsb3c7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCAoYWN0aXZhdGVkQ29udGV4dC5jcmVhdGVkKCkgPz8gUHJvbWlzZS5yZXNvbHZlKCkpO1xuXHRcdFx0XHRhd2FpdCBlZGl0Rmxvdy5vbkFmdGVyQ3JlYXRlKHsgY29udGV4dDogYWN0aXZhdGVkQ29udGV4dCB9KTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoYEZhaWxlZCB0byBhY3RpdmF0ZSBjb250ZXh0ICR7YWN0aXZhdGVkQ29udGV4dC5nZXRQYXRoKCl9YCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvbnRlbnQgPSBhY3RpdmF0ZWRDb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IGNvbGxhYm9yYXRpdmVEcmFmdCA9IHZpZXcuZ2V0Q29udHJvbGxlcigpLmNvbGxhYm9yYXRpdmVEcmFmdDtcblx0XHRcdC8vIFNlbmQgbm90aWZpY2F0aW9uIHRvIG90aGVyIHVzZXJzIG9ubHkgYWZ0ZXIgdGhlIGNyZWF0aW9uIGhhcyBiZWVuIGZpbmFsaXplZFxuXHRcdFx0Y29sbGFib3JhdGl2ZURyYWZ0LnNlbmQoeyBhY3Rpb246IEFjdGl2aXR5LkNyZWF0ZSwgY29udGVudCB9KTtcblx0XHRcdC8vIFNpbmNlIHRoZSBwYXRoIG9mIHRoZSBjb250ZXh0IGhhcyBjaGFuZ2VkIGR1cmluZyBhY3RpdmF0aW9uLCB3ZSBuZWVkIHRvIHVwZGF0ZSBhbGwgY29sbGFib3JhdGlvbiBsb2Nrc1xuXHRcdFx0Ly8gdGhhdCB3ZXJlIHVzaW5nIHRoZSB0cmFuc2llbnQgcGF0aFxuXHRcdFx0Y29sbGFib3JhdGl2ZURyYWZ0LnVwZGF0ZUxvY2tzRm9yQ29udGV4dFBhdGgodHJhbnNpZW50UGF0aCwgYWN0aXZhdGVkQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJGYWlsZWQgdG8gYWN0aXZhdGUgbmV3IHJvdyAtXCIsIGVycm9yIGFzIEVycm9yKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBkZWZhdWx0IHZhbHVlcyBmcm9tIHRoZSBEZWZhdWx0VmFsdWVzIGZ1bmN0aW9uLlxuXHQgKiBAcGFyYW0gbGlzdEJpbmRpbmcgVGhlIGN1cnJlbnQgbGlzdCBiaW5kaW5nXG5cdCAqIEByZXR1cm5zIFRoZSBEZWZhdWx0VmFsdWVzIGZ1bmN0aW9uIChvciB1bmRlZmluZWQgaWYgbm8gZnVuY3Rpb24gaXMgZm91bmQpXG5cdCAqL1xuXHRnZXREZWZhdWx0VmFsdWVzRnVuY3Rpb24obGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcpOiBEZWZhdWx0VmFsdWVzRnVuY3Rpb24gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1vZGVsID0gbGlzdEJpbmRpbmcuZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBtZXRhQ29udGV4dCA9IG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChsaXN0QmluZGluZy5nZXRSZXNvbHZlZFBhdGgoKSBhcyBzdHJpbmcpO1xuXHRcdGNvbnN0IGxpc3RCaW5kaW5nT2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhQ29udGV4dCk7XG5cblx0XHRjb25zdCBkZWZhdWx0RnVuY09uVGFyZ2V0T2JqZWN0ID0gKGxpc3RCaW5kaW5nT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgYXMgTmF2aWdhdGlvblByb3BlcnR5IHwgRW50aXR5U2V0KS5hbm5vdGF0aW9ucy5Db21tb25cblx0XHRcdD8uRGVmYXVsdFZhbHVlc0Z1bmN0aW9uO1xuXHRcdGNvbnN0IGRlZmF1bHRGdW5jT25UYXJnZXRFbnRpdHlTZXQgPSAobGlzdEJpbmRpbmdPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQgfCB1bmRlZmluZWQpPy5hbm5vdGF0aW9ucy5Db21tb25cblx0XHRcdD8uRGVmYXVsdFZhbHVlc0Z1bmN0aW9uO1xuXG5cdFx0cmV0dXJuIGRlZmF1bHRGdW5jT25UYXJnZXRPYmplY3QgPz8gZGVmYXVsdEZ1bmNPblRhcmdldEVudGl0eVNldDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFbXB0eVJvd3NFbmFibGVkIHNldHRlci5cblx0ICogQHBhcmFtIGVuYWJsZW1lbnRcblx0ICovXG5cdHNldEVtcHR5Um93c0VuYWJsZWQodGhpczogSVRhYmxlQmxvY2sgJiBFbXB0eVJvd3NIYW5kbGVyLCBlbmFibGVtZW50OiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImVtcHR5Um93c0VuYWJsZWRcIiwgZW5hYmxlbWVudCk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblBhdGggPSB0aGlzLmdldENvbnRlbnQoKS5kYXRhKCkubmF2aWdhdGlvblBhdGgsXG5cdFx0XHRhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdGlmIChlbmFibGVtZW50KSB7XG5cdFx0XHRjb25zdCBsaXN0QmluZGluZyA9IHRoaXMuZ2V0Q29udGVudCgpLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdGNvbnN0IGRlZmF1bHRWYWx1ZXNGdW5jdGlvbiA9IGxpc3RCaW5kaW5nPy5nZXRSZXNvbHZlZFBhdGgoKSA/IHRoaXMuZ2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uKGxpc3RCaW5kaW5nKSA6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChkZWZhdWx0VmFsdWVzRnVuY3Rpb24pIHtcblx0XHRcdFx0YXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLnJlZ2lzdGVyVGFyZ2V0Q2FsbGJhY2sobmF2aWdhdGlvblBhdGgsIHRoaXMudXBkYXRlRW1wdHlSb3dzLmJpbmQodGhpcykpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCkuZGVyZWdpc3RlclRhcmdldENhbGxiYWNrKG5hdmlnYXRpb25QYXRoKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy50YWJsZURlZmF1bHRzUHJvbWlzZSkge1xuXHRcdFx0dGhpcy50YWJsZURlZmF1bHRzUHJvbWlzZVxuXHRcdFx0XHQudGhlbigodGFibGVEZWZhdWx0RGF0YSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuc2V0VXBFbXB0eVJvd3ModGhpcy5nZXRDb250ZW50KCksIGZhbHNlLCB0YWJsZURlZmF1bHREYXRhKTtcblx0XHRcdFx0XHRyZXR1cm4gdGFibGVEZWZhdWx0RGF0YTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgdXAgZW1wdHkgcm93czpcIiwgZXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXRVcEVtcHR5Um93cyh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSBhbmQgcmVjcmVhdGUgdGhlIGVtcHR5IHJvd3MgaW4gb3JkZXIgdG8gZ2V0IGFueSB1cGRhdGVkIGRlZmF1bHQgdmFsdWVzLlxuXHQgKlxuXHQgKi9cblx0YXN5bmMgdXBkYXRlRW1wdHlSb3dzKHRoaXM6IElUYWJsZUJsb2NrICYgRW1wdHlSb3dzSGFuZGxlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHRhYmxlID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0Y29uc3QgYmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRjb25zdCBiaW5kaW5nSGVhZGVyQ29udGV4dCA9IGJpbmRpbmcuZ2V0SGVhZGVyQ29udGV4dCgpO1xuXHRcdGlmIChiaW5kaW5nICYmIGJpbmRpbmcuaXNSZXNvbHZlZCgpICYmIGJpbmRpbmcuaXNMZW5ndGhGaW5hbCgpICYmIGJpbmRpbmdIZWFkZXJDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGJpbmRpbmdIZWFkZXJDb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdHRoaXMuX2RlbGV0ZUVtcHR5Um93cyhiaW5kaW5nLCBjb250ZXh0UGF0aCk7XG5cdFx0XHRhd2FpdCB0aGlzLmNyZWF0ZUVtcHR5Um93cyhiaW5kaW5nLCB0YWJsZSk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcGVyZm9ybSBjb21tb24gY2hlY2tzIGZvciB0YWJsZSBkZWZhdWx0cyBhbmQgZW1wdHkgcm93cyBzZXR1cC5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZSBiZWluZyBwcm9jZXNzZWRcblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgb2JqZWN0IGlmIGNoZWNrcyBwYXNzLCBvciB1bmRlZmluZWQgaWYgY2hlY2tzIGZhaWxcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgX3ZhbGlkYXRlQW5kUmV0cmlldmVCaW5kaW5nKFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgRW1wdHlSb3dzSGFuZGxlcixcblx0XHR0YWJsZTogTURDVGFibGVcblx0KTogUHJvbWlzZTxPRGF0YUxpc3RCaW5kaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0aWYgKHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbD8uY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGNvbnN0IHVpTW9kZWwgPSB0YWJsZS5nZXRNb2RlbChcInVpXCIpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIXVpTW9kZWwpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKHVpTW9kZWwuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVBlbmRpbmdcIikpIHtcblx0XHRcdC8vIFdhaXQgdW50aWwgdGhlIGVkaXQgbW9kZSBjb21wdXRhdGlvbiBpcyBjb21wbGV0ZVxuXHRcdFx0Y29uc3Qgd2F0Y2hCaW5kaW5nID0gdWlNb2RlbC5iaW5kUHJvcGVydHkoXCIvaXNFZGl0YWJsZVBlbmRpbmdcIik7XG5cdFx0XHRhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBmbkhhbmRsZXIgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0d2F0Y2hCaW5kaW5nLmRldGFjaENoYW5nZShmbkhhbmRsZXIpO1xuXHRcdFx0XHRcdHdhdGNoQmluZGluZy5kZXN0cm95KCk7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHR3YXRjaEJpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuSGFuZGxlcik7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRjb25zdCBiaW5kaW5nID0gdGFibGUuZ2V0Um93QmluZGluZygpIGFzIE9EYXRhTGlzdEJpbmRpbmcgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWJpbmRpbmcpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBiaW5kaW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHRhYmxlIGRlZmF1bHRzIGJ5IHZhbGlkYXRpbmcgYW5kIHJldHJpZXZpbmcgdGhlIGJpbmRpbmcsIHRoZW4gZmV0Y2hpbmcgZGF0YSBmcm9tIHRoZSBEZWZhdWx0VmFsdWVGdW5jdGlvbi5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZSBiZWluZyBwcm9jZXNzZWRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgdmFsdWVzLCBvciB1bmRlZmluZWQgaWYgbm8gYmluZGluZyBpcyBhdmFpbGFibGUgb3IgdGhlIERlZmF1bHRWYWx1ZUZ1bmN0aW9uIHJldHVybnMgbm8gZGF0YVxuXHQgKi9cblx0YXN5bmMgZ2V0VGFibGVEZWZhdWx0cyh0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsIHRhYmxlOiBNRENUYWJsZSk6IFByb21pc2U8b2JqZWN0IHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgYmluZGluZyA9IGF3YWl0IHRoaXMuX3ZhbGlkYXRlQW5kUmV0cmlldmVCaW5kaW5nKHRhYmxlKTtcblx0XHRpZiAoIWJpbmRpbmcpIHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQoQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSkpO1xuXHRcdHJldHVybiBhcHBDb21wb25lbnQgPyBUcmFuc2FjdGlvbkhlbHBlci5nZXREYXRhRnJvbURlZmF1bHRWYWx1ZUZ1bmN0aW9uKGJpbmRpbmcsIGFwcENvbXBvbmVudCkgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRhc3luYyBzZXRVcEVtcHR5Um93cyhcblx0XHR0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsXG5cdFx0dGFibGU6IE1EQ1RhYmxlLFxuXHRcdGNyZWF0ZUJ1dHRvbldhc1ByZXNzZWQgPSBmYWxzZSxcblx0XHR0YWJsZURlZmF1bHREYXRhID0ge31cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYmluZGluZyA9IGF3YWl0IHRoaXMuX3ZhbGlkYXRlQW5kUmV0cmlldmVCaW5kaW5nKHRhYmxlKTtcblx0XHRpZiAoIWJpbmRpbmcpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgYmluZGluZ0hlYWRlckNvbnRleHQgPSBiaW5kaW5nLmdldEhlYWRlckNvbnRleHQoKTtcblx0XHRpZiAoYmluZGluZyAmJiBiaW5kaW5nLmlzUmVzb2x2ZWQoKSAmJiBiaW5kaW5nLmlzTGVuZ3RoRmluYWwoKSAmJiBiaW5kaW5nSGVhZGVyQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBiaW5kaW5nSGVhZGVyQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRpZiAoIXRoaXMuZW1wdHlSb3dzRW5hYmxlZCkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZUVtcHR5Um93c01lc3NhZ2VzKCk7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9kZWxldGVFbXB0eVJvd3MoYmluZGluZywgY29udGV4dFBhdGgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRhYmxlKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbD8uaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSAmJlxuXHRcdFx0XHQhdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJwYWdlSW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiY3JlYXRlTW9kZVwiKSAmJlxuXHRcdFx0XHQhY3JlYXRlQnV0dG9uV2FzUHJlc3NlZFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGluYWN0aXZlQ29udGV4dCA9IGJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmluZChmdW5jdGlvbiAoY29udGV4dCkge1xuXHRcdFx0XHQvLyB3aGVuIHRoaXMgaXMgY2FsbGVkIGZyb20gY29udHJvbGxlciBjb2RlIHdlIG5lZWQgdG8gY2hlY2sgdGhhdCBpbmFjdGl2ZSBjb250ZXh0cyBhcmUgc3RpbGwgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdGFibGUgY29udGV4dFxuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5pc0luYWN0aXZlKCkgJiYgY29udGV4dC5nZXRQYXRoKCkuc3RhcnRzV2l0aChjb250ZXh0UGF0aCk7XG5cdFx0XHR9KTtcblx0XHRcdGlmICghaW5hY3RpdmVDb250ZXh0KSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRW1wdHlSb3dzTWVzc2FnZXMoKTtcblx0XHRcdFx0YXdhaXQgdGhpcy5jcmVhdGVFbXB0eVJvd3MoYmluZGluZywgdGFibGUsIGZhbHNlLCB1bmRlZmluZWQsIGZhbHNlLCB0YWJsZURlZmF1bHREYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBpbmFjdGl2ZSByb3dzIGZyb20gdGhlIHRhYmxlIGxpc3RCaW5kaW5nLlxuXHQgKiBAcGFyYW0gYmluZGluZ1xuXHQgKiBAcGFyYW0gY29udGV4dFBhdGhcblx0ICovXG5cdF9kZWxldGVFbXB0eVJvd3MoYmluZGluZzogT0RhdGFMaXN0QmluZGluZywgY29udGV4dFBhdGg6IHN0cmluZyk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgY29udGV4dCBvZiBiaW5kaW5nLmdldEFsbEN1cnJlbnRDb250ZXh0cygpKSB7XG5cdFx0XHRpZiAoY29udGV4dC5pc0luYWN0aXZlKCkgJiYgY29udGV4dC5nZXRQYXRoKCkuc3RhcnRzV2l0aChjb250ZXh0UGF0aCkpIHtcblx0XHRcdFx0Y29udGV4dC5kZWxldGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCBudW1iZXIgb2YgaW5hY3RpdmUgY29udGV4dHMgd2l0aGluIHRoZSBsaXN0IGJpbmRpbmcuXG5cdCAqIEBwYXJhbSBiaW5kaW5nIERhdGEgbGlzdCBiaW5kaW5nXG5cdCAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgaW5hY3RpdmUgY29udGV4dHNcblx0ICovXG5cdGdldEluYWN0aXZlQ29udGV4dE51bWJlcihiaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gYmluZGluZy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKS5maWx0ZXIoKGNvbnRleHQpID0+IGNvbnRleHQuaXNJbmFjdGl2ZSgpKS5sZW5ndGg7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgZW1wdHkgcm93LlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZW1wdHkgcm93XG5cdCAqIEByZXR1cm5zIFRoZSB2YWxpZGF0aW9uIHN0YXR1c1xuXHQgKi9cblx0dmFsaWRhdGVFbXB0eVJvdyh0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsIGNvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0XHRjb25zdCByZXF1aXJlZFByb3BlcnRpZXMgPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmFubm90YXRpb24ucmVxdWlyZWRQcm9wZXJ0aWVzO1xuXHRcdGlmIChyZXF1aXJlZFByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0dGhpcy5yZW1vdmVFbXB0eVJvd3NNZXNzYWdlcyhjb250ZXh0KTtcblx0XHRcdGNvbnN0IG1pc3NpbmdQcm9wZXJ0aWVzID0gcmVxdWlyZWRQcm9wZXJ0aWVzLmZpbHRlcigocmVxdWlyZWRQcm9wZXJ0eSkgPT4gIWNvbnRleHQuZ2V0T2JqZWN0KHJlcXVpcmVkUHJvcGVydHkpKTtcblx0XHRcdGlmIChtaXNzaW5nUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLm1hY3Jvc1wiKSE7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblx0XHRcdFx0bGV0IGRpc3BsYXllZENvbHVtbjogTURDQ29sdW1uIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRmb3IgKGNvbnN0IG1pc3NpbmdQcm9wZXJ0eSBvZiBtaXNzaW5nUHJvcGVydGllcykge1xuXHRcdFx0XHRcdGxldCBlcnJvck1lc3NhZ2U6IHN0cmluZztcblx0XHRcdFx0XHRjb25zdCBtaXNzaW5nQ29sdW1uID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zLmZpbmQoXG5cdFx0XHRcdFx0XHQodGFibGVDb2x1bW4pID0+XG5cdFx0XHRcdFx0XHRcdCh0YWJsZUNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pLnJlbGF0aXZlUGF0aCA9PT0gbWlzc2luZ1Byb3BlcnR5IHx8XG5cdFx0XHRcdFx0XHRcdCh0YWJsZUNvbHVtbi5wcm9wZXJ0eUluZm9zICYmIHRhYmxlQ29sdW1uLnByb3BlcnR5SW5mb3MuaW5jbHVkZXMobWlzc2luZ1Byb3BlcnR5KSlcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKCFtaXNzaW5nQ29sdW1uKSB7XG5cdFx0XHRcdFx0XHRlcnJvck1lc3NhZ2UgPSByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9UQUJMRV9FTVBUWVJPV19NQU5EQVRPUllcIiwgW21pc3NpbmdQcm9wZXJ0eV0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5ZWRDb2x1bW4gPSB0aGlzLmdldENvbnRlbnQoKVxuXHRcdFx0XHRcdFx0XHQuZ2V0Q29sdW1ucygpXG5cdFx0XHRcdFx0XHRcdC5maW5kKChtZGNDb2x1bW4pID0+IG1kY0NvbHVtbi5nZXRQcm9wZXJ0eUtleSgpID09PSBtaXNzaW5nQ29sdW1uLm5hbWUpO1xuXHRcdFx0XHRcdFx0ZXJyb3JNZXNzYWdlID0gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcblx0XHRcdFx0XHRcdFx0ZGlzcGxheWVkQ29sdW1uID8gXCJNX1RBQkxFX0VNUFRZUk9XX01BTkRBVE9SWVwiIDogXCJNX1RBQkxFX0VNUFRZUk9XX01BTkRBVE9SWV9ISURERU5cIixcblx0XHRcdFx0XHRcdFx0W2Rpc3BsYXllZENvbHVtbj8uZ2V0SGVhZGVyKCkgfHwgbWlzc2luZ0NvbHVtbi5sYWJlbF1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bWVzc2FnZXMucHVzaChcblx0XHRcdFx0XHRcdG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogZXJyb3JNZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRwcm9jZXNzb3I6IHRoaXMuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdFx0dHlwZTogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFx0XHRcdFx0XHRcdHRlY2huaWNhbDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdHRlY2huaWNhbERldGFpbHM6IHtcblx0XHRcdFx0XHRcdFx0XHR0YWJsZUlkOiB0aGlzLmdldENvbnRlbnQoKS5nZXRJZCgpLCAvLyBOZWVkIHRvIGRvIGl0IHNpbmNlIGhhbmRsZUNyZWF0ZUFjdGl2YXRlIGNhbiBiZSB0cmlnZ2VyZWQgbXVsdGlwbGUgdGltZXMgKGV4dHJhIHByb3BlcnRpZXMgc2V0IGJ5IHZhbHVlIGhlbHApIGJlZm9yZSBjb250cm9sSWRzIGFyZSBzZXQgb24gdGhlIG1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0XHRlbXB0eVJvd01lc3NhZ2U6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0bWlzc2luZ0NvbHVtbjogZGlzcGxheWVkQ29sdW1uID8gdW5kZWZpbmVkIDogbWlzc2luZ1Byb3BlcnR5IC8vIG5lZWRlZCB0byBjaGFuZ2UgdGhlIG1lc3NhZ2VTdHJpcCBtZXNzYWdlXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHRhcmdldDogYCR7Y29udGV4dD8uZ2V0UGF0aCgpfS8ke21pc3NpbmdQcm9wZXJ0eX1gXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKG1lc3NhZ2VzKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBtZXNzYWdlcyByZWxhdGVkIHRvIHRoZSBlbXB0eSByb3dzLlxuXHQgKiBAcGFyYW0gaW5hY3RpdmVDb250ZXh0cyBUaGUgY29udGV4dHMgb2YgdGhlIGVtcHR5IHJvd3MsIGlmIG5vdCBwcm92aWRlZCwgdGhlIG1lc3NhZ2VzIG9mIGFsbCBlbXB0eSByb3dzIGFyZSByZW1vdmVkXG5cdCAqL1xuXHRyZW1vdmVFbXB0eVJvd3NNZXNzYWdlcyh0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsIGluYWN0aXZlQ29udGV4dHM/OiBDb250ZXh0IHwgQ29udGV4dFtdKTogdm9pZCB7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKFxuXHRcdFx0KE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCkgYXMgTWVzc2FnZVtdKS5maWx0ZXIoKG1zZykgPT4ge1xuXHRcdFx0XHRjb25zdCB0ZWNobmljYWxEZXRhaWxzID0gKG1zZy5nZXRUZWNobmljYWxEZXRhaWxzKCkgfHwge30pIGFzIHsgdGFibGVJZD86IHN0cmluZzsgZW1wdHlSb3dNZXNzYWdlPzogYm9vbGVhbiB9O1xuXG5cdFx0XHRcdC8vIENoZWNrIGlmIG1zZyB0YXJnZXQgc3RhcnRzIHdpdGggYW55IHBhdGggaW4gdGhlIGluYWN0aXZlQ29udGV4dCBhcnJheVxuXHRcdFx0XHRjb25zdCBjb250ZXh0TWF0Y2hlcyA9IEFycmF5LmlzQXJyYXkoaW5hY3RpdmVDb250ZXh0cylcblx0XHRcdFx0XHQ/IGluYWN0aXZlQ29udGV4dHMuc29tZSgoY29udGV4dCkgPT4gbXNnLmdldFRhcmdldHMoKS5zb21lKCh2YWx1ZSkgPT4gdmFsdWUuc3RhcnRzV2l0aChjb250ZXh0LmdldFBhdGgoKSkpKVxuXHRcdFx0XHRcdDogIWluYWN0aXZlQ29udGV4dHMgfHwgbXNnLmdldFRhcmdldHMoKS5zb21lKCh2YWx1ZSkgPT4gdmFsdWUuc3RhcnRzV2l0aChpbmFjdGl2ZUNvbnRleHRzLmdldFBhdGgoKSkpO1xuXG5cdFx0XHRcdHJldHVybiBjb250ZXh0TWF0Y2hlcyAmJiB0ZWNobmljYWxEZXRhaWxzLmVtcHR5Um93TWVzc2FnZSAmJiB0ZWNobmljYWxEZXRhaWxzLnRhYmxlSWQgPT09IHRoaXMuZ2V0Q29udGVudCgpLmdldElkKCk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRpb24gb2YgaW5hY3RpdmUgcm93cyBmb3IgdGhlIHRhYmxlIGluIGNyZWF0aW9uIG1vZGUgXCJJbmxpbmVDcmVhdGlvblJvd3NcIi5cblx0ICogQHBhcmFtIGJpbmRpbmcgRGF0YSBsaXN0IGJpbmRpbmdcblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZSBiZWluZyBlZGl0ZWRcblx0ICogQHBhcmFtIHJlY3JlYXRlT25lUm93IGB0cnVlYCBpZiB0aGUgY2FsbCBpcyB0byByZWNyZWF0ZSBhbiBlbXB0eUxpbmVcblx0ICogQHBhcmFtIG5ld0lubGluZUNyZWF0aW9uUm93RnJvbVBhc3RlIE51bWJlciBvZiBuZXcgaW5hY3RpdmUgcm93cyB0byBiZSBjcmVhdGVkXG5cdCAqIEBwYXJhbSBmb3JjZUNyZWF0ZWF0RW5kIGB0cnVlYCBpZiB0aGUgbmV3IHJvdyBpcyB0byBiZSBjcmVhdGVkIGF0IHRoZSBlbmQgb2YgdGhlIHRhYmxlXG5cdCAqIEBwYXJhbSBkZWZhdWx0VmFsdWVGdW5jdGlvbkRhdGEgRGVmYXVsdCB2YWx1ZXMgcmV0cmlldmVkIGZyb20gdGhlIERlZmF1bHRWYWx1ZXNGdW5jdGlvbiB0byBiZSBhcHBsaWVkIHRvIHRoZSBuZXcgcm93c1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY3JlYXRlZCBjb250ZXh0cyBvciB2b2lkIGlmIHRoZSBjcmVhdGlvbiBmYWlsZWRcblx0ICovXG5cdGFzeW5jIGNyZWF0ZUVtcHR5Um93cyhcblx0XHR0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsXG5cdFx0YmluZGluZzogT0RhdGFMaXN0QmluZGluZyxcblx0XHR0YWJsZTogTURDVGFibGUsXG5cdFx0cmVjcmVhdGVPbmVSb3cgPSBmYWxzZSxcblx0XHRuZXdJbmxpbmVDcmVhdGlvblJvd0Zyb21QYXN0ZT86IG51bWJlcixcblx0XHRmb3JjZUNyZWF0ZWF0RW5kID0gZmFsc2UsXG5cdFx0ZGVmYXVsdFZhbHVlRnVuY3Rpb25EYXRhPzogb2JqZWN0IHwgdW5kZWZpbmVkXG5cdCk6IFByb21pc2U8dm9pZCB8IENvbnRleHRbXT4ge1xuXHRcdGNvbnN0IGlubGluZUNyZWF0aW9uUm93Q291bnQgPSBuZXdJbmxpbmVDcmVhdGlvblJvd0Zyb21QYXN0ZSA/PyAodGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sPy5pbmxpbmVDcmVhdGlvblJvd0NvdW50IHx8IDEpO1xuXHRcdGlmICh0aGlzLmNyZWF0aW5nRW1wdHlSb3dzIHx8IHRoaXMuZ2V0SW5hY3RpdmVDb250ZXh0TnVtYmVyKGJpbmRpbmcpID4gaW5saW5lQ3JlYXRpb25Sb3dDb3VudCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBkYXRhID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogaW5saW5lQ3JlYXRpb25Sb3dDb3VudCB9LCAoKSA9PiAoe30pKSxcblx0XHRcdGF0RW5kID0gdGFibGUuZGF0YShcInRhYmxlVHlwZVwiKSAhPT0gXCJSZXNwb25zaXZlVGFibGVcIixcblx0XHRcdGluYWN0aXZlID0gdHJ1ZSxcblx0XHRcdHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKSxcblx0XHRcdGNvbnRyb2xsZXIgPSB2aWV3LmdldENvbnRyb2xsZXIoKSxcblx0XHRcdGVkaXRGbG93ID0gY29udHJvbGxlci5lZGl0Rmxvdyxcblx0XHRcdGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0YWJsZSk7XG5cblx0XHR0aGlzLmNyZWF0aW5nRW1wdHlSb3dzID0gdHJ1ZTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZGF0YUZvckNyZWF0ZSA9IHJlY3JlYXRlT25lUm93ID8gW3t9XSA6IGRhdGE7XG5cdFx0XHRjb25zdCBjb250ZXh0cyA9IGF3YWl0IGVkaXRGbG93LmNyZWF0ZU11bHRpcGxlRG9jdW1lbnRzKFxuXHRcdFx0XHRiaW5kaW5nLFxuXHRcdFx0XHQvLyBkdXJpbmcgYSBsaXZlIGNoYW5nZSwgb25seSAxIG5ldyBkb2N1bWVudCBpcyBjcmVhdGVkXG5cdFx0XHRcdGRhdGFGb3JDcmVhdGUsXG5cdFx0XHRcdC8vIFdoZW4gZWRpdGluZyBhbiBlbXB0eSByb3csIHRoZSBuZXcgZW1wdHkgcm93IGlzIHRvIGJlIGNyZWF0ZWQganVzdCBiZWxvdyBhbmQgbm90IGFib3ZlXG5cdFx0XHRcdHJlY3JlYXRlT25lUm93IHx8IGZvcmNlQ3JlYXRlYXRFbmQgPyB0cnVlIDogYXRFbmQsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRjb250cm9sbGVyLmVkaXRGbG93Lm9uQmVmb3JlQ3JlYXRlLFxuXHRcdFx0XHRpbmFjdGl2ZSxcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRkZWZhdWx0VmFsdWVGdW5jdGlvbkRhdGFcblx0XHRcdCk7XG5cdFx0XHRhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCkucmVxdWVzdFNpZGVFZmZlY3RzRm9yTmF2aWdhdGlvblByb3BlcnR5KGJpbmRpbmcuZ2V0UGF0aCgpLCB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCkpO1xuXHRcdFx0Y29udGV4dHM/LmZvckVhY2goYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IENvbnRleHQpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhd2FpdCBjb250ZXh0LmNyZWF0ZWQoKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRpZiAoIShlcnJvciBhcyBDb250ZXh0RXJyb3JUeXBlKS5jYW5jZWxlZCkge1xuXHRcdFx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBjb250ZXh0cztcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRMb2cuZXJyb3IoZSBhcyBzdHJpbmcpO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHR0aGlzLmNyZWF0aW5nRW1wdHlSb3dzID0gZmFsc2U7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O01Bd0JxQkEsZ0JBQWdCO0lBQUEsU0FBQUEsaUJBQUE7SUFBQUMsUUFBQSxHQUFBRCxnQkFBQTtJQUFBLElBQUFFLE1BQUEsR0FBQUYsZ0JBQUEsQ0FBQUcsU0FBQTtJQUdwQztBQUNEO0FBQ0E7SUFGQ0QsTUFBQSxDQUtBRSxVQUFVLEdBQVYsU0FBQUEsVUFBVUEsQ0FBQ0MsVUFBb0IsRUFBUTtNQUN0QztJQUFBOztJQUdEO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQUgsTUFBQSxDQUlBSSxrQkFBa0IsR0FBbEIsU0FBQUEsa0JBQWtCQSxDQUF1Q0MsUUFBK0IsRUFBUTtNQUMvRixNQUFNQyxLQUFLLEdBQUdELFFBQVEsQ0FBQ0UsU0FBUyxDQUFDLENBQUM7UUFDakNDLGNBQWMsR0FBR0YsS0FBSyxDQUFDRyxpQkFBaUIsQ0FBQyxDQUFZO1FBQ3JEQyxPQUFPLEdBQUdGLGNBQWMsQ0FBQ0csVUFBVSxDQUFDLENBQUM7TUFDdEM7TUFDQSxJQUFJSCxjQUFjLENBQUNJLFVBQVUsQ0FBQyxDQUFDLEVBQUU7UUFDaEMsTUFBTUMsS0FBSyxHQUFHLElBQUksRUFBRUMsVUFBVSxDQUFDLENBQUM7UUFDaEMsSUFBSSxFQUFFQyxlQUFlLENBQUNMLE9BQU8sRUFBc0JHLEtBQUssRUFBRSxJQUFJLENBQUM7TUFDaEU7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFiLE1BQUEsQ0FJTWdCLHFCQUFxQixHQUEzQixlQUFNQSxxQkFBcUJBLENBRTFCQyxhQUErRCxFQUMvQztNQUNoQixNQUFNQyxnQkFBZ0IsR0FBR0QsYUFBYSxDQUFDRSxZQUFZLENBQUMsU0FBUyxDQUFDO01BQzlEO01BQ0E7TUFDQSxJQUFJLENBQUNKLGVBQWUsQ0FBQ0UsYUFBYSxD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
|
|
381
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFbXB0eVJvd3NIYW5kbGVyIiwiX2V4cG9ydHMiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJzZXR1cE1peGluIiwiX2Jhc2VDbGFzcyIsIl9vbkZpZWxkTGl2ZUNoYW5nZSIsInVpNUV2ZW50IiwiZmllbGQiLCJnZXRTb3VyY2UiLCJiaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiYmluZGluZyIsImdldEJpbmRpbmciLCJpc0luYWN0aXZlIiwidGFibGUiLCJnZXRDb250ZW50IiwiY3JlYXRlRW1wdHlSb3dzIiwiX2hhbmRsZUNyZWF0ZUFjdGl2YXRlIiwiYWN0aXZhdGVFdmVudCIsImFjdGl2YXRlZENvbnRleHQiLCJnZXRQYXJhbWV0ZXIiLCJhcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImdldFJvd0JpbmRpbmciLCJ2YWxpZGF0ZUVtcHR5Um93IiwicHJldmVudERlZmF1bHQiLCJ0cmFuc2llbnRQYXRoIiwiZ2V0UGF0aCIsInZpZXciLCJnZXRUYXJnZXRWaWV3IiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJlZGl0RmxvdyIsIlByb21pc2UiLCJhbGwiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJyZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkiLCJjcmVhdGVkIiwicmVzb2x2ZSIsIm9uQWZ0ZXJDcmVhdGUiLCJjb250ZXh0IiwiZSIsIkxvZyIsIndhcm5pbmciLCJjb250ZW50IiwiY29sbGFib3JhdGl2ZURyYWZ0Iiwic2VuZCIsImFjdGlvbiIsIkFjdGl2aXR5IiwiQ3JlYXRlIiwidXBkYXRlTG9ja3NGb3JDb250ZXh0UGF0aCIsImVycm9yIiwiZ2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwibGlzdEJpbmRpbmciLCJtb2RlbCIsImdldE1vZGVsIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwibWV0YUNvbnRleHQiLCJnZXRNZXRhQ29udGV4dCIsImdldFJlc29sdmVkUGF0aCIsImxpc3RCaW5kaW5nT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImRlZmF1bHRGdW5jT25UYXJnZXRPYmplY3QiLCJ0YXJnZXRPYmplY3QiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIkRlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsImRlZmF1bHRGdW5jT25UYXJnZXRFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlTZXQiLCJzZXRFbXB0eVJvd3NFbmFibGVkIiwiZW5hYmxlbWVudCIsInRhYmxlRGVmYXVsdHNQcm9taXNlIiwiZ2V0VGFibGVEZWZhdWx0cyIsInNldFByb3BlcnR5IiwibmF2aWdhdGlvblBhdGgiLCJkYXRhIiwiZGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwidW5kZWZpbmVkIiwicmVnaXN0ZXJUYXJnZXRDYWxsYmFjayIsInVwZGF0ZUVtcHR5Um93cyIsImJpbmQiLCJzZXRVcEVtcHR5Um93cyIsImRlcmVnaXN0ZXJUYXJnZXRDYWxsYmFjayIsInRoZW4iLCJ0YWJsZURlZmF1bHREYXRhIiwiY2F0Y2giLCJiaW5kaW5nSGVhZGVyQ29udGV4dCIsImdldEhlYWRlckNvbnRleHQiLCJpc1Jlc29sdmVkIiwiaXNMZW5ndGhGaW5hbCIsImNvbnRleHRQYXRoIiwiZ2V0SXNFZGl0YWJsZSIsInJlbW92ZUVtcHR5Um93c01lc3NhZ2VzIiwiX2RlbGV0ZUVtcHR5Um93cyIsImRlZmF1bHRzIiwiX3ZhbGlkYXRlQW5kUmV0cmlldmVCaW5kaW5nIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsImNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uTW9kZSIsIklubGluZUNyZWF0aW9uUm93cyIsInVpTW9kZWwiLCJnZXRQcm9wZXJ0eSIsIndhdGNoQmluZGluZyIsImJpbmRQcm9wZXJ0eSIsImZuSGFuZGxlciIsImRldGFjaENoYW5nZSIsImRlc3Ryb3kiLCJhdHRhY2hDaGFuZ2UiLCJUcmFuc2FjdGlvbkhlbHBlciIsImdldERhdGFGcm9tRGVmYXVsdFZhbHVlRnVuY3Rpb24iLCJjcmVhdGVCdXR0b25XYXNQcmVzc2VkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZW1wdHlSb3dzRW5hYmxlZCIsImlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUiLCJpbmFjdGl2ZUNvbnRleHQiLCJnZXRBbGxDdXJyZW50Q29udGV4dHMiLCJmaW5kIiwic3RhcnRzV2l0aCIsImRlbGV0ZSIsImdldEluYWN0aXZlQ29udGV4dE51bWJlciIsImZpbHRlciIsInJlcXVpcmVkUHJvcGVydGllcyIsImFubm90YXRpb24iLCJtaXNzaW5nUHJvcGVydGllcyIsInJlcXVpcmVkUHJvcGVydHkiLCJnZXRPYmplY3QiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsIm1lc3NhZ2VzIiwiZGlzcGxheWVkQ29sdW1uIiwibWlzc2luZ1Byb3BlcnR5IiwiZXJyb3JNZXNzYWdlIiwibWlzc2luZ0NvbHVtbiIsImNvbHVtbnMiLCJ0YWJsZUNvbHVtbiIsInJlbGF0aXZlUGF0aCIsInByb3BlcnR5SW5mb3MiLCJpbmNsdWRlcyIsImdldFRleHQiLCJnZXRDb2x1bW5zIiwibWRjQ29sdW1uIiwiZ2V0UHJvcGVydHlLZXkiLCJuYW1lIiwiZ2V0SGVhZGVyIiwibGFiZWwiLCJwdXNoIiwiTWVzc2FnZSIsIm1lc3NhZ2UiLCJwcm9jZXNzb3IiLCJ0eXBlIiwiTWVzc2FnZVR5cGUiLCJFcnJvciIsInRlY2huaWNhbCIsInBlcnNpc3RlbnQiLCJ0ZWNobmljYWxEZXRhaWxzIiwidGFibGVJZCIsImdldElkIiwiZW1wdHlSb3dNZXNzYWdlIiwidGFyZ2V0IiwiTWVzc2FnaW5nIiwiYWRkTWVzc2FnZXMiLCJpbmFjdGl2ZUNvbnRleHRzIiwicmVtb3ZlTWVzc2FnZXMiLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwibXNnIiwiZ2V0VGVjaG5pY2FsRGV0YWlscyIsImNvbnRleHRNYXRjaGVzIiwiQXJyYXkiLCJpc0FycmF5Iiwic29tZSIsImdldFRhcmdldHMiLCJ2YWx1ZSIsInJlY3JlYXRlT25lUm93IiwibmV3SW5saW5lQ3JlYXRpb25Sb3dGcm9tUGFzdGUiLCJmb3JjZUNyZWF0ZWF0RW5kIiwiZGVmYXVsdFZhbHVlRnVuY3Rpb25EYXRhIiwiaW5saW5lQ3JlYXRpb25Sb3dDb3VudCIsImNyZWF0aW5nRW1wdHlSb3dzIiwiZnJvbSIsImF0RW5kIiwiaW5hY3RpdmUiLCJkYXRhRm9yQ3JlYXRlIiwiY29udGV4dHMiLCJjcmVhdGVNdWx0aXBsZURvY3VtZW50cyIsImNyZWF0ZUF0RW5kIiwiYmVmb3JlQ3JlYXRlQ2FsbEJhY2siLCJvbkJlZm9yZUNyZWF0ZSIsImNyZWF0ZUFzSW5hY3RpdmUiLCJoaWRlQnVzeUluZGljYXRvciIsImZvckVhY2giLCJjYW5jZWxlZCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRW1wdHlSb3dzSGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IERlZmF1bHRWYWx1ZXNGdW5jdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IHR5cGUgSUludGVyZmFjZVdpdGhNaXhpbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IEFjdGl2aXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IFRyYW5zYWN0aW9uSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9UcmFuc2FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IHsgQ3JlYXRpb25Nb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25UYWJsZUNvbHVtbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgTURDQ29sdW1uIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NvbHVtblwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRFcnJvclR5cGUgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgeyB0eXBlIElUYWJsZUJsb2NrIH0gZnJvbSBcIi4uL1RhYmxlQVBJXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVtcHR5Um93c0hhbmRsZXIgaW1wbGVtZW50cyBJSW50ZXJmYWNlV2l0aE1peGluIHtcblx0Y3JlYXRpbmdFbXB0eVJvd3M/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHRhYmxlJ3MgZGVmYXVsdCB2YWx1ZXMuXG5cdCAqL1xuXHRwdWJsaWMgdGFibGVEZWZhdWx0c1Byb21pc2U/OiBQcm9taXNlPG9iamVjdCB8IHVuZGVmaW5lZD47XG5cblx0c2V0dXBNaXhpbihfYmFzZUNsYXNzOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdC8vIFRoaXMgbWV0aG9kIGlzIG5lZWRlZCB0byBpbXBsZW1lbnQgaW50ZXJmYWNlIElJbnRlcmZhY2VXaXRoTWl4aW5cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgb25GaWVsZExpdmVDaGFuZ2UgZXZlbnQuXG5cdCAqIEBwYXJhbSB1aTVFdmVudCBUaGUgZXZlbnQgb2JqZWN0IHBhc3NlZCBieSB0aGUgb25GaWVsZExpdmVDaGFuZ2UgZXZlbnRcblx0ICovXG5cdF9vbkZpZWxkTGl2ZUNoYW5nZSh0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsIHVpNUV2ZW50OiBVSTVFdmVudDx7fSwgQ29udHJvbD4pOiB2b2lkIHtcblx0XHRjb25zdCBmaWVsZCA9IHVpNUV2ZW50LmdldFNvdXJjZSgpLFxuXHRcdFx0YmluZGluZ0NvbnRleHQgPSBmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQsXG5cdFx0XHRiaW5kaW5nID0gYmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdC8vIGNyZWF0aW9uIG9mIGEgbmV3IGluYWN0aXZlIHJvdyBpZiByZWxldmFudFxuXHRcdGlmIChiaW5kaW5nQ29udGV4dC5pc0luYWN0aXZlKCkpIHtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGhpcz8uZ2V0Q29udGVudCgpO1xuXHRcdFx0dGhpcz8uY3JlYXRlRW1wdHlSb3dzKGJpbmRpbmcgYXMgT0RhdGFMaXN0QmluZGluZywgdGFibGUsIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBDcmVhdGVBY3RpdmF0ZSBldmVudCBmcm9tIHRoZSBPRGF0YUxpc3RCaW5kaW5nLlxuXHQgKiBAcGFyYW0gYWN0aXZhdGVFdmVudCBUaGUgZXZlbnQgc2VudCBieSB0aGUgYmluZGluZ1xuXHQgKi9cblx0YXN5bmMgX2hhbmRsZUNyZWF0ZUFjdGl2YXRlKFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgRW1wdHlSb3dzSGFuZGxlcixcblx0XHRhY3RpdmF0ZUV2ZW50OiBVSTVFdmVudDx7IGNvbnRleHQ6IENvbnRleHQgfSwgT0RhdGFMaXN0QmluZGluZz5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYWN0aXZhdGVkQ29udGV4dCA9IGFjdGl2YXRlRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29udGV4dFwiKTtcblx0XHQvLyB3ZSBzdGFydCBieSBhc2tpbmcgdG8gcmVjcmVhdGUgYW4gZW1wdHkgcm93IChpZiBsaXZlIGNoYW5nZSBoYXMgYWxyZWFkeSBkb25lIGl0IHRoaXMgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0KVxuXHRcdC8vIGJ1dCB3ZSBkbyBub3Qgd2FpdFxuXHRcdHRoaXMuY3JlYXRlRW1wdHlSb3dzKGFjdGl2YXRlRXZlbnQuZ2V0U291cmNlKCksIHRoaXMuZ2V0Q29udGVudCgpLCB0cnVlKTtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0YWJsZSk7XG5cdFx0Y29uc3QgYmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRpZiAoIXRoaXMudmFsaWRhdGVFbXB0eVJvdyhhY3RpdmF0ZWRDb250ZXh0KSkge1xuXHRcdFx0YWN0aXZhdGVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdHJhbnNpZW50UGF0aCA9IGFjdGl2YXRlZENvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0XHR2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKSxcblx0XHRcdFx0Y29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpLFxuXHRcdFx0XHRlZGl0RmxvdyA9IGNvbnRyb2xsZXIuZWRpdEZsb3c7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdFx0YXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdFx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkoYmluZGluZy5nZXRQYXRoKCksIHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSksXG5cdFx0XHRcdFx0YWN0aXZhdGVkQ29udGV4dC5jcmVhdGVkPy4oKSA/PyBQcm9taXNlLnJlc29sdmUoKVxuXHRcdFx0XHRdKTtcblx0XHRcdFx0YXdhaXQgZWRpdEZsb3cub25BZnRlckNyZWF0ZSh7IGNvbnRleHQ6IGFjdGl2YXRlZENvbnRleHQgfSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKGBGYWlsZWQgdG8gYWN0aXZhdGUgY29udGV4dCAke2FjdGl2YXRlZENvbnRleHQuZ2V0UGF0aCgpfWApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjb250ZW50ID0gYWN0aXZhdGVkQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aXZlRHJhZnQgPSB2aWV3LmdldENvbnRyb2xsZXIoKS5jb2xsYWJvcmF0aXZlRHJhZnQ7XG5cdFx0XHQvLyBTZW5kIG5vdGlmaWNhdGlvbiB0byBvdGhlciB1c2VycyBvbmx5IGFmdGVyIHRoZSBjcmVhdGlvbiBoYXMgYmVlbiBmaW5hbGl6ZWRcblx0XHRcdGNvbGxhYm9yYXRpdmVEcmFmdC5zZW5kKHsgYWN0aW9uOiBBY3Rpdml0eS5DcmVhdGUsIGNvbnRlbnQgfSk7XG5cdFx0XHQvLyBTaW5jZSB0aGUgcGF0aCBvZiB0aGUgY29udGV4dCBoYXMgY2hhbmdlZCBkdXJpbmcgYWN0aXZhdGlvbiwgd2UgbmVlZCB0byB1cGRhdGUgYWxsIGNvbGxhYm9yYXRpb24gbG9ja3Ncblx0XHRcdC8vIHRoYXQgd2VyZSB1c2luZyB0aGUgdHJhbnNpZW50IHBhdGhcblx0XHRcdGNvbGxhYm9yYXRpdmVEcmFmdC51cGRhdGVMb2Nrc0ZvckNvbnRleHRQYXRoKHRyYW5zaWVudFBhdGgsIGFjdGl2YXRlZENvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiRmFpbGVkIHRvIGFjdGl2YXRlIG5ldyByb3cgLVwiLCBlcnJvciBhcyBFcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZGVmYXVsdCB2YWx1ZXMgZnJvbSB0aGUgRGVmYXVsdFZhbHVlcyBmdW5jdGlvbi5cblx0ICogQHBhcmFtIGxpc3RCaW5kaW5nIFRoZSBjdXJyZW50IGxpc3QgYmluZGluZ1xuXHQgKiBAcmV0dXJucyBUaGUgRGVmYXVsdFZhbHVlcyBmdW5jdGlvbiAob3IgdW5kZWZpbmVkIGlmIG5vIGZ1bmN0aW9uIGlzIGZvdW5kKVxuXHQgKi9cblx0Z2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uKGxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogRGVmYXVsdFZhbHVlc0Z1bmN0aW9uIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBtb2RlbCA9IGxpc3RCaW5kaW5nLmdldE1vZGVsKCk7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQobGlzdEJpbmRpbmcuZ2V0UmVzb2x2ZWRQYXRoKCkgYXMgc3RyaW5nKTtcblx0XHRjb25zdCBsaXN0QmluZGluZ09iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YUNvbnRleHQpO1xuXG5cdFx0Y29uc3QgZGVmYXVsdEZ1bmNPblRhcmdldE9iamVjdCA9IChsaXN0QmluZGluZ09iamVjdFBhdGgudGFyZ2V0T2JqZWN0IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSB8IEVudGl0eVNldCkuYW5ub3RhdGlvbnMuQ29tbW9uXG5cdFx0XHQ/LkRlZmF1bHRWYWx1ZXNGdW5jdGlvbjtcblx0XHRjb25zdCBkZWZhdWx0RnVuY09uVGFyZ2V0RW50aXR5U2V0ID0gKGxpc3RCaW5kaW5nT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQgYXMgRW50aXR5U2V0IHwgdW5kZWZpbmVkKT8uYW5ub3RhdGlvbnMuQ29tbW9uXG5cdFx0XHQ/LkRlZmF1bHRWYWx1ZXNGdW5jdGlvbjtcblxuXHRcdHJldHVybiBkZWZhdWx0RnVuY09uVGFyZ2V0T2JqZWN0ID8/IGRlZmF1bHRGdW5jT25UYXJnZXRFbnRpdHlTZXQ7XG5cdH1cblxuXHQvKipcblx0ICogRW1wdHlSb3dzRW5hYmxlZCBzZXR0ZXIuXG5cdCAqIEBwYXJhbSBlbmFibGVtZW50XG5cdCAqL1xuXHRzZXRFbXB0eVJvd3NFbmFibGVkKHRoaXM6IElUYWJsZUJsb2NrICYgRW1wdHlSb3dzSGFuZGxlciwgZW5hYmxlbWVudDogYm9vbGVhbik6IHZvaWQge1xuXHRcdC8vIElOSVQ6IGVuc3VyZSB0YWJsZURlZmF1bHRzUHJvbWlzZSBleGlzdHMgd2hlbiBlbmFibGluZyBlbXB0eSByb3dzXG5cdFx0aWYgKGVuYWJsZW1lbnQgJiYgIXRoaXMudGFibGVEZWZhdWx0c1Byb21pc2UpIHtcblx0XHRcdHRoaXMudGFibGVEZWZhdWx0c1Byb21pc2UgPSB0aGlzLmdldFRhYmxlRGVmYXVsdHModGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdH1cblx0XHR0aGlzLnNldFByb3BlcnR5KFwiZW1wdHlSb3dzRW5hYmxlZFwiLCBlbmFibGVtZW50KTtcblx0XHRjb25zdCBuYXZpZ2F0aW9uUGF0aCA9IHRoaXMuZ2V0Q29udGVudCgpLmRhdGEoKS5uYXZpZ2F0aW9uUGF0aCxcblx0XHRcdGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0aWYgKGVuYWJsZW1lbnQpIHtcblx0XHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gdGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0Y29uc3QgZGVmYXVsdFZhbHVlc0Z1bmN0aW9uID0gbGlzdEJpbmRpbmc/LmdldFJlc29sdmVkUGF0aCgpID8gdGhpcy5nZXREZWZhdWx0VmFsdWVzRnVuY3Rpb24obGlzdEJpbmRpbmcpIDogdW5kZWZpbmVkO1xuXHRcdFx0aWYgKGRlZmF1bHRWYWx1ZXNGdW5jdGlvbikge1xuXHRcdFx0XHRhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCkucmVnaXN0ZXJUYXJnZXRDYWxsYmFjayhuYXZpZ2F0aW9uUGF0aCwgdGhpcy51cGRhdGVFbXB0eVJvd3MuYmluZCh0aGlzKSk7XG5cdFx0XHRcdC8vIEltbWVkaWF0ZSBpbml0aWFsIHNldHVwIHdpdGhvdXQgZGVmYXVsdHNcblx0XHRcdFx0aWYgKCF0aGlzLnRhYmxlRGVmYXVsdHNQcm9taXNlKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRVcEVtcHR5Um93cyh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLmRlcmVnaXN0ZXJUYXJnZXRDYWxsYmFjayhuYXZpZ2F0aW9uUGF0aCk7XG5cdFx0fVxuXHRcdC8vIEltbWVkaWF0ZSBpbml0aWFsIHNldHVwIG9ubHkgaWYgbm8gZGVmYXVsdHMgcHJvbWlzZSBleGlzdHMgKHRvIGF2b2lkIGR1cGxpY2F0ZSBlbXB0eSByb3dzKVxuXHRcdGlmICh0aGlzLnRhYmxlRGVmYXVsdHNQcm9taXNlKSB7XG5cdFx0XHR0aGlzLnRhYmxlRGVmYXVsdHNQcm9taXNlXG5cdFx0XHRcdC50aGVuKCh0YWJsZURlZmF1bHREYXRhKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVFbXB0eVJvd3MoKTtcblx0XHRcdFx0XHRyZXR1cm4gdGFibGVEZWZhdWx0RGF0YTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgdXAgZW1wdHkgcm93czpcIiwgZXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXRVcEVtcHR5Um93cyh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSBhbmQgcmVjcmVhdGUgdGhlIGVtcHR5IHJvd3MgaW4gb3JkZXIgdG8gZ2V0IGFueSB1cGRhdGVkIGRlZmF1bHQgdmFsdWVzLlxuXHQgKlxuXHQgKi9cblx0YXN5bmMgdXBkYXRlRW1wdHlSb3dzKHRoaXM6IElUYWJsZUJsb2NrICYgRW1wdHlSb3dzSGFuZGxlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHRhYmxlID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0Y29uc3QgYmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRjb25zdCBiaW5kaW5nSGVhZGVyQ29udGV4dCA9IGJpbmRpbmcuZ2V0SGVhZGVyQ29udGV4dCgpO1xuXG5cdFx0aWYgKCEoYmluZGluZyAmJiBiaW5kaW5nLmlzUmVzb2x2ZWQoKSAmJiBiaW5kaW5nLmlzTGVuZ3RoRmluYWwoKSAmJiBiaW5kaW5nSGVhZGVyQ29udGV4dCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGJpbmRpbmdIZWFkZXJDb250ZXh0LmdldFBhdGgoKTtcblxuXHRcdC8vIERPIE5PVCBzaG93IGVtcHR5IHJvd3MgaW4gZGlzcGxheSBtb2RlLlxuXHRcdC8vIElmIGFueSBpbmFjdGl2ZSByb3dzIGFyZSBwcmVzZW50IChmcm9tIGEgcHJldmlvdXMgc3RhdGUpLCByZW1vdmUgdGhlbSBhbmQgZXhpdC5cblx0XHRpZiAoIUNvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGFibGUpKSB7XG5cdFx0XHR0aGlzLnJlbW92ZUVtcHR5Um93c01lc3NhZ2VzKCk7XG5cdFx0XHR0aGlzLl9kZWxldGVFbXB0eVJvd3MoYmluZGluZywgY29udGV4dFBhdGgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX2RlbGV0ZUVtcHR5Um93cyhiaW5kaW5nLCBjb250ZXh0UGF0aCk7XG5cdFx0Y29uc3QgZGVmYXVsdHMgPSBhd2FpdCB0aGlzLmdldFRhYmxlRGVmYXVsdHModGFibGUpO1xuXHRcdC8vIFVwZGF0ZSB0aGUgZW1wdHkgcm93cyB3aXRoIHRoZSBsYXRlc3QgZGVmYXVsdCB2YWx1ZXNcblx0XHRhd2FpdCB0aGlzLmNyZWF0ZUVtcHR5Um93cyhiaW5kaW5nLCB0YWJsZSwgZmFsc2UsIHVuZGVmaW5lZCwgZmFsc2UsIGRlZmF1bHRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcGVyZm9ybSBjb21tb24gY2hlY2tzIGZvciB0YWJsZSBkZWZhdWx0cyBhbmQgZW1wdHkgcm93cyBzZXR1cC5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZSBiZWluZyBwcm9jZXNzZWRcblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgb2JqZWN0IGlmIGNoZWNrcyBwYXNzLCBvciB1bmRlZmluZWQgaWYgY2hlY2tzIGZhaWxcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgX3ZhbGlkYXRlQW5kUmV0cmlldmVCaW5kaW5nKFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgRW1wdHlSb3dzSGFuZGxlcixcblx0XHR0YWJsZTogTURDVGFibGVcblx0KTogUHJvbWlzZTxPRGF0YUxpc3RCaW5kaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0aWYgKHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbD8uY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGNvbnN0IHVpTW9kZWwgPSB0YWJsZS5nZXRNb2RlbChcInVpXCIpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIXVpTW9kZWwpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKHVpTW9kZWwuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVBlbmRpbmdcIikpIHtcblx0XHRcdC8vIFdhaXQgdW50aWwgdGhlIGVkaXQgbW9kZSBjb21wdXRhdGlvbiBpcyBjb21wbGV0ZVxuXHRcdFx0Y29uc3Qgd2F0Y2hCaW5kaW5nID0gdWlNb2RlbC5iaW5kUHJvcGVydHkoXCIvaXNFZGl0YWJsZVBlbmRpbmdcIik7XG5cdFx0XHRhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBmbkhhbmRsZXIgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0d2F0Y2hCaW5kaW5nLmRldGFjaENoYW5nZShmbkhhbmRsZXIpO1xuXHRcdFx0XHRcdHdhdGNoQmluZGluZy5kZXN0cm95KCk7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHR3YXRjaEJpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuSGFuZGxlcik7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRjb25zdCBiaW5kaW5nID0gdGFibGUuZ2V0Um93QmluZGluZygpIGFzIE9EYXRhTGlzdEJpbmRpbmcgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWJpbmRpbmcpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBiaW5kaW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHRhYmxlIGRlZmF1bHRzIGJ5IHZhbGlkYXRpbmcgYW5kIHJldHJpZXZpbmcgdGhlIGJpbmRpbmcsIHRoZW4gZmV0Y2hpbmcgZGF0YSBmcm9tIHRoZSBEZWZhdWx0VmFsdWVGdW5jdGlvbi5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZSBiZWluZyBwcm9jZXNzZWRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgdmFsdWVzLCBvciB1bmRlZmluZWQgaWYgbm8gYmluZGluZyBpcyBhdmFpbGFibGUgb3IgdGhlIERlZmF1bHRWYWx1ZUZ1bmN0aW9uIHJldHVybnMgbm8gZGF0YVxuXHQgKi9cblx0YXN5bmMgZ2V0VGFibGVEZWZhdWx0cyh0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsIHRhYmxlOiBNRENUYWJsZSk6IFByb21pc2U8b2JqZWN0IHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgYmluZGluZyA9IGF3YWl0IHRoaXMuX3ZhbGlkYXRlQW5kUmV0cmlldmVCaW5kaW5nKHRhYmxlKTtcblx0XHRpZiAoIWJpbmRpbmcpIHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQoQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSkpO1xuXHRcdHJldHVybiBhcHBDb21wb25lbnQgPyBUcmFuc2FjdGlvbkhlbHBlci5nZXREYXRhRnJvbURlZmF1bHRWYWx1ZUZ1bmN0aW9uKGJpbmRpbmcsIGFwcENvbXBvbmVudCkgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRhc3luYyBzZXRVcEVtcHR5Um93cyhcblx0XHR0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsXG5cdFx0dGFibGU6IE1EQ1RhYmxlLFxuXHRcdGNyZWF0ZUJ1dHRvbldhc1ByZXNzZWQgPSBmYWxzZSxcblx0XHR0YWJsZURlZmF1bHREYXRhID0ge31cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYmluZGluZyA9IGF3YWl0IHRoaXMuX3ZhbGlkYXRlQW5kUmV0cmlldmVCaW5kaW5nKHRhYmxlKTtcblx0XHRpZiAoIWJpbmRpbmcpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgYmluZGluZ0hlYWRlckNvbnRleHQgPSBiaW5kaW5nLmdldEhlYWRlckNvbnRleHQoKTtcblx0XHRpZiAoYmluZGluZyAmJiBiaW5kaW5nLmlzUmVzb2x2ZWQoKSAmJiBiaW5kaW5nLmlzTGVuZ3RoRmluYWwoKSAmJiBiaW5kaW5nSGVhZGVyQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBiaW5kaW5nSGVhZGVyQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRpZiAoIXRoaXMuZW1wdHlSb3dzRW5hYmxlZCkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZUVtcHR5Um93c01lc3NhZ2VzKCk7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9kZWxldGVFbXB0eVJvd3MoYmluZGluZywgY29udGV4dFBhdGgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRhYmxlKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbD8uaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSAmJlxuXHRcdFx0XHQhdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJwYWdlSW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiY3JlYXRlTW9kZVwiKSAmJlxuXHRcdFx0XHQhY3JlYXRlQnV0dG9uV2FzUHJlc3NlZFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGluYWN0aXZlQ29udGV4dCA9IGJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmluZChmdW5jdGlvbiAoY29udGV4dCkge1xuXHRcdFx0XHQvLyB3aGVuIHRoaXMgaXMgY2FsbGVkIGZyb20gY29udHJvbGxlciBjb2RlIHdlIG5lZWQgdG8gY2hlY2sgdGhhdCBpbmFjdGl2ZSBjb250ZXh0cyBhcmUgc3RpbGwgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdGFibGUgY29udGV4dFxuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5pc0luYWN0aXZlKCkgJiYgY29udGV4dC5nZXRQYXRoKCkuc3RhcnRzV2l0aChjb250ZXh0UGF0aCk7XG5cdFx0XHR9KTtcblx0XHRcdGlmICghaW5hY3RpdmVDb250ZXh0KSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRW1wdHlSb3dzTWVzc2FnZXMoKTtcblx0XHRcdFx0YXdhaXQgdGhpcy5jcmVhdGVFbXB0eVJvd3MoYmluZGluZywgdGFibGUsIGZhbHNlLCB1bmRlZmluZWQsIGZhbHNlLCB0YWJsZURlZmF1bHREYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBpbmFjdGl2ZSByb3dzIGZyb20gdGhlIHRhYmxlIGxpc3RCaW5kaW5nLlxuXHQgKiBAcGFyYW0gYmluZGluZ1xuXHQgKiBAcGFyYW0gY29udGV4dFBhdGhcblx0ICovXG5cdF9kZWxldGVFbXB0eVJvd3MoYmluZGluZzogT0RhdGFMaXN0QmluZGluZywgY29udGV4dFBhdGg6IHN0cmluZyk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgY29udGV4dCBvZiBiaW5kaW5nLmdldEFsbEN1cnJlbnRDb250ZXh0cygpKSB7XG5cdFx0XHRpZiAoY29udGV4dC5pc0luYWN0aXZlKCkgJiYgY29udGV4dC5nZXRQYXRoKCkuc3RhcnRzV2l0aChjb250ZXh0UGF0aCkpIHtcblx0XHRcdFx0Y29udGV4dC5kZWxldGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCBudW1iZXIgb2YgaW5hY3RpdmUgY29udGV4dHMgd2l0aGluIHRoZSBsaXN0IGJpbmRpbmcuXG5cdCAqIEBwYXJhbSBiaW5kaW5nIERhdGEgbGlzdCBiaW5kaW5nXG5cdCAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgaW5hY3RpdmUgY29udGV4dHNcblx0ICovXG5cdGdldEluYWN0aXZlQ29udGV4dE51bWJlcihiaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gYmluZGluZy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKS5maWx0ZXIoKGNvbnRleHQpID0+IGNvbnRleHQuaXNJbmFjdGl2ZSgpKS5sZW5ndGg7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgZW1wdHkgcm93LlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZW1wdHkgcm93XG5cdCAqIEByZXR1cm5zIFRoZSB2YWxpZGF0aW9uIHN0YXR1c1xuXHQgKi9cblx0dmFsaWRhdGVFbXB0eVJvdyh0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsIGNvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0XHRjb25zdCByZXF1aXJlZFByb3BlcnRpZXMgPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmFubm90YXRpb24ucmVxdWlyZWRQcm9wZXJ0aWVzO1xuXHRcdGlmIChyZXF1aXJlZFByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0dGhpcy5yZW1vdmVFbXB0eVJvd3NNZXNzYWdlcyhjb250ZXh0KTtcblx0XHRcdGNvbnN0IG1pc3NpbmdQcm9wZXJ0aWVzID0gcmVxdWlyZWRQcm9wZXJ0aWVzLmZpbHRlcigocmVxdWlyZWRQcm9wZXJ0eSkgPT4gIWNvbnRleHQuZ2V0T2JqZWN0KHJlcXVpcmVkUHJvcGVydHkpKTtcblx0XHRcdGlmIChtaXNzaW5nUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLm1hY3Jvc1wiKSE7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblx0XHRcdFx0bGV0IGRpc3BsYXllZENvbHVtbjogTURDQ29sdW1uIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRmb3IgKGNvbnN0IG1pc3NpbmdQcm9wZXJ0eSBvZiBtaXNzaW5nUHJvcGVydGllcykge1xuXHRcdFx0XHRcdGxldCBlcnJvck1lc3NhZ2U6IHN0cmluZztcblx0XHRcdFx0XHRjb25zdCBtaXNzaW5nQ29sdW1uID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zLmZpbmQoXG5cdFx0XHRcdFx0XHQodGFibGVDb2x1bW4pID0+XG5cdFx0XHRcdFx0XHRcdCh0YWJsZUNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pLnJlbGF0aXZlUGF0aCA9PT0gbWlzc2luZ1Byb3BlcnR5IHx8XG5cdFx0XHRcdFx0XHRcdCh0YWJsZUNvbHVtbi5wcm9wZXJ0eUluZm9zICYmIHRhYmxlQ29sdW1uLnByb3BlcnR5SW5mb3MuaW5jbHVkZXMobWlzc2luZ1Byb3BlcnR5KSlcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKCFtaXNzaW5nQ29sdW1uKSB7XG5cdFx0XHRcdFx0XHRlcnJvck1lc3NhZ2UgPSByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9UQUJMRV9FTVBUWVJPV19NQU5EQVRPUllcIiwgW21pc3NpbmdQcm9wZXJ0eV0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5ZWRDb2x1bW4gPSB0aGlzLmdldENvbnRlbnQoKVxuXHRcdFx0XHRcdFx0XHQuZ2V0Q29sdW1ucygpXG5cdFx0XHRcdFx0XHRcdC5maW5kKChtZGNDb2x1bW4pID0+IG1kY0NvbHVtbi5nZXRQcm9wZXJ0eUtleSgpID09PSBtaXNzaW5nQ29sdW1uLm5hbWUpO1xuXHRcdFx0XHRcdFx0ZXJyb3JNZXNzYWdlID0gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcblx0XHRcdFx0XHRcdFx0ZGlzcGxheWVkQ29sdW1uID8gXCJNX1RBQkxFX0VNUFRZUk9XX01BTkRBVE9SWVwiIDogXCJNX1RBQkxFX0VNUFRZUk9XX01BTkRBVE9SWV9ISURERU5cIixcblx0XHRcdFx0XHRcdFx0W2Rpc3BsYXllZENvbHVtbj8uZ2V0SGVhZGVyKCkgfHwgbWlzc2luZ0NvbHVtbi5sYWJlbF1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bWVzc2FnZXMucHVzaChcblx0XHRcdFx0XHRcdG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogZXJyb3JNZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRwcm9jZXNzb3I6IHRoaXMuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdFx0dHlwZTogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFx0XHRcdFx0XHRcdHRlY2huaWNhbDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdHRlY2huaWNhbERldGFpbHM6IHtcblx0XHRcdFx0XHRcdFx0XHR0YWJsZUlkOiB0aGlzLmdldENvbnRlbnQoKS5nZXRJZCgpLCAvLyBOZWVkIHRvIGRvIGl0IHNpbmNlIGhhbmRsZUNyZWF0ZUFjdGl2YXRlIGNhbiBiZSB0cmlnZ2VyZWQgbXVsdGlwbGUgdGltZXMgKGV4dHJhIHByb3BlcnRpZXMgc2V0IGJ5IHZhbHVlIGhlbHApIGJlZm9yZSBjb250cm9sSWRzIGFyZSBzZXQgb24gdGhlIG1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0XHRlbXB0eVJvd01lc3NhZ2U6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0bWlzc2luZ0NvbHVtbjogZGlzcGxheWVkQ29sdW1uID8gdW5kZWZpbmVkIDogbWlzc2luZ1Byb3BlcnR5IC8vIG5lZWRlZCB0byBjaGFuZ2UgdGhlIG1lc3NhZ2VTdHJpcCBtZXNzYWdlXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHRhcmdldDogYCR7Y29udGV4dD8uZ2V0UGF0aCgpfS8ke21pc3NpbmdQcm9wZXJ0eX1gXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKG1lc3NhZ2VzKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBtZXNzYWdlcyByZWxhdGVkIHRvIHRoZSBlbXB0eSByb3dzLlxuXHQgKiBAcGFyYW0gaW5hY3RpdmVDb250ZXh0cyBUaGUgY29udGV4dHMgb2YgdGhlIGVtcHR5IHJvd3MsIGlmIG5vdCBwcm92aWRlZCwgdGhlIG1lc3NhZ2VzIG9mIGFsbCBlbXB0eSByb3dzIGFyZSByZW1vdmVkXG5cdCAqL1xuXHRyZW1vdmVFbXB0eVJvd3NNZXNzYWdlcyh0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsIGluYWN0aXZlQ29udGV4dHM/OiBDb250ZXh0IHwgQ29udGV4dFtdKTogdm9pZCB7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKFxuXHRcdFx0KE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCkgYXMgTWVzc2FnZVtdKS5maWx0ZXIoKG1zZykgPT4ge1xuXHRcdFx0XHRjb25zdCB0ZWNobmljYWxEZXRhaWxzID0gKG1zZy5nZXRUZWNobmljYWxEZXRhaWxzKCkgfHwge30pIGFzIHsgdGFibGVJZD86IHN0cmluZzsgZW1wdHlSb3dNZXNzYWdlPzogYm9vbGVhbiB9O1xuXG5cdFx0XHRcdC8vIENoZWNrIGlmIG1zZyB0YXJnZXQgc3RhcnRzIHdpdGggYW55IHBhdGggaW4gdGhlIGluYWN0aXZlQ29udGV4dCBhcnJheVxuXHRcdFx0XHRjb25zdCBjb250ZXh0TWF0Y2hlcyA9IEFycmF5LmlzQXJyYXkoaW5hY3RpdmVDb250ZXh0cylcblx0XHRcdFx0XHQ/IGluYWN0aXZlQ29udGV4dHMuc29tZSgoY29udGV4dCkgPT4gbXNnLmdldFRhcmdldHMoKS5zb21lKCh2YWx1ZSkgPT4gdmFsdWUuc3RhcnRzV2l0aChjb250ZXh0LmdldFBhdGgoKSkpKVxuXHRcdFx0XHRcdDogIWluYWN0aXZlQ29udGV4dHMgfHwgbXNnLmdldFRhcmdldHMoKS5zb21lKCh2YWx1ZSkgPT4gdmFsdWUuc3RhcnRzV2l0aChpbmFjdGl2ZUNvbnRleHRzLmdldFBhdGgoKSkpO1xuXG5cdFx0XHRcdHJldHVybiBjb250ZXh0TWF0Y2hlcyAmJiB0ZWNobmljYWxEZXRhaWxzLmVtcHR5Um93TWVzc2FnZSAmJiB0ZWNobmljYWxEZXRhaWxzLnRhYmxlSWQgPT09IHRoaXMuZ2V0Q29udGVudCgpLmdldElkKCk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRpb24gb2YgaW5hY3RpdmUgcm93cyBmb3IgdGhlIHRhYmxlIGluIGNyZWF0aW9uIG1vZGUgXCJJbmxpbmVDcmVhdGlvblJvd3NcIi5cblx0ICogQHBhcmFtIGJpbmRpbmcgRGF0YSBsaXN0IGJpbmRpbmdcblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZSBiZWluZyBlZGl0ZWRcblx0ICogQHBhcmFtIHJlY3JlYXRlT25lUm93IGB0cnVlYCBpZiB0aGUgY2FsbCBpcyB0byByZWNyZWF0ZSBhbiBlbXB0eUxpbmVcblx0ICogQHBhcmFtIG5ld0lubGluZUNyZWF0aW9uUm93RnJvbVBhc3RlIE51bWJlciBvZiBuZXcgaW5hY3RpdmUgcm93cyB0byBiZSBjcmVhdGVkXG5cdCAqIEBwYXJhbSBmb3JjZUNyZWF0ZWF0RW5kIGB0cnVlYCBpZiB0aGUgbmV3IHJvdyBpcyB0byBiZSBjcmVhdGVkIGF0IHRoZSBlbmQgb2YgdGhlIHRhYmxlXG5cdCAqIEBwYXJhbSBkZWZhdWx0VmFsdWVGdW5jdGlvbkRhdGEgRGVmYXVsdCB2YWx1ZXMgcmV0cmlldmVkIGZyb20gdGhlIERlZmF1bHRWYWx1ZXNGdW5jdGlvbiB0byBiZSBhcHBsaWVkIHRvIHRoZSBuZXcgcm93c1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY3JlYXRlZCBjb250ZXh0cyBvciB2b2lkIGlmIHRoZSBjcmVhdGlvbiBmYWlsZWRcblx0ICovXG5cdGFzeW5jIGNyZWF0ZUVtcHR5Um93cyhcblx0XHR0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsXG5cdFx0YmluZGluZzogT0RhdGFMaXN0QmluZGluZyxcblx0XHR0YWJsZTogTURDVGFibGUsXG5cdFx0cmVjcmVhdGVPbmVSb3cgPSBmYWxzZSxcblx0XHRuZXdJbmxpbmVDcmVhdGlvblJvd0Zyb21QYXN0ZT86IG51bWJlcixcblx0XHRmb3JjZUNyZWF0ZWF0RW5kID0gZmFsc2UsXG5cdFx0ZGVmYXVsdFZhbHVlRnVuY3Rpb25EYXRhPzogb2JqZWN0IHwgdW5kZWZpbmVkXG5cdCk6IFByb21pc2U8dm9pZCB8IENvbnRleHRbXT4ge1xuXHRcdGNvbnN0IGlubGluZUNyZWF0aW9uUm93Q291bnQgPSBuZXdJbmxpbmVDcmVhdGlvblJvd0Zyb21QYXN0ZSA/PyAodGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sPy5pbmxpbmVDcmVhdGlvblJvd0NvdW50IHx8IDEpO1xuXHRcdC8qIGVuc3VyZXMgdGhhdCBhdCBtb3N0IG9uZSBhZGRpdGlvbmFsIGVtcHR5IHJvdyBjYW4gZXhpc3QgZHVyaW5nIExpdmVDaGFuZ2UgKHdoZW4gYHJlY3JlYXRlT25lUm93YCBpcyB0cnVlKS5cblx0XHRJbiBhbGwgb3RoZXIgY2FzZXMsIHRoZSBudW1iZXIgb2YgaW5hY3RpdmUgY29udGV4dHMgY2Fubm90IGV4Y2VlZCBgaW5saW5lQ3JlYXRpb25Sb3dDb3VudGAuKi9cblx0XHRpZiAodGhpcy5jcmVhdGluZ0VtcHR5Um93cyB8fCB0aGlzLmdldEluYWN0aXZlQ29udGV4dE51bWJlcihiaW5kaW5nKSA+PSBpbmxpbmVDcmVhdGlvblJvd0NvdW50ICsgKHJlY3JlYXRlT25lUm93ID8gMSA6IDApKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGRhdGEgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpbmxpbmVDcmVhdGlvblJvd0NvdW50IH0sICgpID0+ICh7fSkpLFxuXHRcdFx0YXRFbmQgPSB0YWJsZS5kYXRhKFwidGFibGVUeXBlXCIpICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiLFxuXHRcdFx0aW5hY3RpdmUgPSB0cnVlLFxuXHRcdFx0dmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpLFxuXHRcdFx0Y29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpLFxuXHRcdFx0ZWRpdEZsb3cgPSBjb250cm9sbGVyLmVkaXRGbG93O1xuXG5cdFx0dGhpcy5jcmVhdGluZ0VtcHR5Um93cyA9IHRydWU7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGRhdGFGb3JDcmVhdGUgPSByZWNyZWF0ZU9uZVJvdyA/IFt7fV0gOiBkYXRhO1xuXHRcdFx0Y29uc3QgY29udGV4dHMgPSBhd2FpdCBlZGl0Rmxvdy5jcmVhdGVNdWx0aXBsZURvY3VtZW50cyhcblx0XHRcdFx0YmluZGluZyxcblx0XHRcdFx0Ly8gZHVyaW5nIGEgbGl2ZSBjaGFuZ2UsIG9ubHkgMSBuZXcgZG9jdW1lbnQgaXMgY3JlYXRlZFxuXHRcdFx0XHRkYXRhRm9yQ3JlYXRlLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y3JlYXRlQXRFbmQ6IHJlY3JlYXRlT25lUm93IHx8IGZvcmNlQ3JlYXRlYXRFbmQgPyB0cnVlIDogYXRFbmQsIC8vIFdoZW4gZWRpdGluZyBhbiBlbXB0eSByb3csIHRoZSBuZXcgZW1wdHkgcm93IGlzIHRvIGJlIGNyZWF0ZWQganVzdCBiZWxvdyBhbmQgbm90IGFib3ZlXG5cblx0XHRcdFx0XHRiZWZvcmVDcmVhdGVDYWxsQmFjazogY29udHJvbGxlci5lZGl0Rmxvdy5vbkJlZm9yZUNyZWF0ZSxcblx0XHRcdFx0XHRjcmVhdGVBc0luYWN0aXZlOiBpbmFjdGl2ZSxcblx0XHRcdFx0XHRoaWRlQnVzeUluZGljYXRvcjogaW5hY3RpdmUsXG5cdFx0XHRcdFx0ZGVmYXVsdFZhbHVlRnVuY3Rpb25EYXRhXG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0XHRjb250ZXh0cz8uZm9yRWFjaChhc3luYyBmdW5jdGlvbiAoY29udGV4dDogQ29udGV4dCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGF3YWl0IGNvbnRleHQuY3JlYXRlZCgpO1xuXHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdGlmICghKGVycm9yIGFzIENvbnRleHRFcnJvclR5cGUpLmNhbmNlbGVkKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGNvbnRleHRzO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5lcnJvcihlIGFzIHN0cmluZyk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHRoaXMuY3JlYXRpbmdFbXB0eVJvd3MgPSBmYWxzZTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7TUF3QnFCQSxnQkFBZ0I7SUFBQSxTQUFBQSxpQkFBQTtJQUFBQyxRQUFBLEdBQUFELGdCQUFBO0lBQUEsSUFBQUUsTUFBQSxHQUFBRixnQkFBQSxDQUFBRyxTQUFBO0lBR3BDO0FBQ0Q7QUFDQTtJQUZDRCxNQUFBLENBS0FFLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFDQyxVQUFvQixFQUFRO01BQ3RDO0lBQUE7O0lBR0Q7QUFDRDtBQUNBO0FBQ0Es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QUMsQ0FBQyxDQUFDLENBQUM7UUFDdEVHLEtBQUssR0FBRzNLLEtBQUssQ0FBQytELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxpQkFBaUI7UUFDckQ2RyxRQUFRLEdBQUcsSUFBSTtRQUNmN0osSUFBSSxHQUFHUCxXQUFXLENBQUNRLGFBQWEsQ0FBQ2hCLEtBQUssQ0FBQztRQUN2Q2lCLFVBQVUsR0FBR0YsSUFBSSxDQUFDRyxhQUFhLENBQUMsQ0FBQztRQUNqQ0MsUUFBUSxHQUFHRixVQUFVLENBQUNFLFFBQVE7TUFFL0IsSUFBSSxDQUFDc0osaUJBQWlCLEdBQUcsSUFBSTtNQUM3QixJQUFJO1FBQ0gsTUFBTUksYUFBYSxHQUFHVCxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHckcsSUFBSTtRQUNsRCxNQUFNK0csUUFBUSxHQUFHLE1BQU0zSixRQUFRLENBQUM0Six1QkFBdUIsQ0FDdERsTCxPQUFPO1FBQ1A7UUFDQWdMLGFBQWEsRUFDYjtVQUNDRyxXQUFXLEVBQUVaLGNBQWMsSUFBSUUsZ0JBQWdCLEdBQUcsSUFBSSxHQUFHSyxLQUFLO1VBQUU7O1VBRWhFTSxvQkFBb0IsRUFBRWhLLFVBQVUsQ0FBQ0UsUUFBUSxDQUFDK0osY0FBYztVQUN4REMsZ0JBQWdCLEVBQUVQLFFBQVE7VUFDMUJRLGlCQUFpQixFQUFFUixRQUFRO1VBQzNCTDtRQUNELENBQ0QsQ0FBQztRQUNETyxRQUFRLEVBQUVPLE9BQU8sQ0FBQyxnQkFBZ0IxSixPQUFnQixFQUFFO1VBQ25ELElBQUk7WUFDSCxNQUFNQSxPQUFPLENBQUNILE9BQU8sQ0FBQyxDQUFDO1VBQ3hCLENBQUMsQ0FBQyxPQUFPYyxLQUFLLEVBQUU7WUFDZixJQUFJLENBQUVBLEtBQUssQ0FBc0JnSixRQUFRLEVBQUU7Y0FDMUMsTUFBTWhKLEtBQUs7WUFDWjtVQUNEO1FBQ0QsQ0FBQyxDQUFDO1FBQ0YsT0FBT3dJLFFBQVE7TUFDaEIsQ0FBQyxDQUFDLE9BQU9sSixDQUFDLEVBQUU7UUFDWEMsR0FBRyxDQUFDUyxLQUFLLENBQUNWLENBQVcsQ0FBQztNQUN2QixDQUFDLFNBQVM7UUFDVCxJQUFJLENBQUM2SSxpQkFBaUIsR0FBRyxLQUFLO01BQy9CO0lBQ0QsQ0FBQztJQUFBLE9BQUF4TCxnQkFBQTtFQUFBO0VBQUFDLFFBQUEsR0FBQUQsZ0JBQUE7RUFBQSxPQUFBQyxRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -28,7 +28,7 @@ export default class EmptyRowsHandler implements IInterfaceWithMixin {
|
|
|
28
28
|
/**
|
|
29
29
|
* Promise that resolves to the table's default values.
|
|
30
30
|
*/
|
|
31
|
-
public tableDefaultsPromise?: Promise<object>;
|
|
31
|
+
public tableDefaultsPromise?: Promise<object | undefined>;
|
|
32
32
|
|
|
33
33
|
setupMixin(_baseClass: Function): void {
|
|
34
34
|
// This method is needed to implement interface IInterfaceWithMixin
|
|
@@ -61,6 +61,9 @@ export default class EmptyRowsHandler implements IInterfaceWithMixin {
|
|
|
61
61
|
// we start by asking to recreate an empty row (if live change has already done it this won't have any effect)
|
|
62
62
|
// but we do not wait
|
|
63
63
|
this.createEmptyRows(activateEvent.getSource(), this.getContent(), true);
|
|
64
|
+
const table = this.getContent();
|
|
65
|
+
const appComponent = CommonUtils.getAppComponent(table);
|
|
66
|
+
const binding = table.getRowBinding();
|
|
64
67
|
if (!this.validateEmptyRow(activatedContext)) {
|
|
65
68
|
activateEvent.preventDefault();
|
|
66
69
|
return;
|
|
@@ -71,7 +74,12 @@ export default class EmptyRowsHandler implements IInterfaceWithMixin {
|
|
|
71
74
|
controller = view.getController(),
|
|
72
75
|
editFlow = controller.editFlow;
|
|
73
76
|
try {
|
|
74
|
-
await
|
|
77
|
+
await Promise.all([
|
|
78
|
+
appComponent
|
|
79
|
+
.getSideEffectsService()
|
|
80
|
+
.requestSideEffectsForNavigationProperty(binding.getPath(), view.getBindingContext()),
|
|
81
|
+
activatedContext.created?.() ?? Promise.resolve()
|
|
82
|
+
]);
|
|
75
83
|
await editFlow.onAfterCreate({ context: activatedContext });
|
|
76
84
|
} catch (e) {
|
|
77
85
|
Log.warning(`Failed to activate context ${activatedContext.getPath()}`);
|
|
@@ -113,6 +121,10 @@ export default class EmptyRowsHandler implements IInterfaceWithMixin {
|
|
|
113
121
|
* @param enablement
|
|
114
122
|
*/
|
|
115
123
|
setEmptyRowsEnabled(this: ITableBlock & EmptyRowsHandler, enablement: boolean): void {
|
|
124
|
+
// INIT: ensure tableDefaultsPromise exists when enabling empty rows
|
|
125
|
+
if (enablement && !this.tableDefaultsPromise) {
|
|
126
|
+
this.tableDefaultsPromise = this.getTableDefaults(this.getContent());
|
|
127
|
+
}
|
|
116
128
|
this.setProperty("emptyRowsEnabled", enablement);
|
|
117
129
|
const navigationPath = this.getContent().data().navigationPath,
|
|
118
130
|
appComponent = CommonUtils.getAppComponent(this.getContent());
|
|
@@ -121,15 +133,19 @@ export default class EmptyRowsHandler implements IInterfaceWithMixin {
|
|
|
121
133
|
const defaultValuesFunction = listBinding?.getResolvedPath() ? this.getDefaultValuesFunction(listBinding) : undefined;
|
|
122
134
|
if (defaultValuesFunction) {
|
|
123
135
|
appComponent.getSideEffectsService().registerTargetCallback(navigationPath, this.updateEmptyRows.bind(this));
|
|
136
|
+
// Immediate initial setup without defaults
|
|
137
|
+
if (!this.tableDefaultsPromise) {
|
|
138
|
+
this.setUpEmptyRows(this.getContent());
|
|
139
|
+
}
|
|
124
140
|
}
|
|
125
141
|
} else {
|
|
126
142
|
appComponent.getSideEffectsService().deregisterTargetCallback(navigationPath);
|
|
127
143
|
}
|
|
128
|
-
|
|
144
|
+
// Immediate initial setup only if no defaults promise exists (to avoid duplicate empty rows)
|
|
129
145
|
if (this.tableDefaultsPromise) {
|
|
130
146
|
this.tableDefaultsPromise
|
|
131
147
|
.then((tableDefaultData) => {
|
|
132
|
-
this.
|
|
148
|
+
this.updateEmptyRows();
|
|
133
149
|
return tableDefaultData;
|
|
134
150
|
})
|
|
135
151
|
.catch((error) => {
|
|
@@ -148,12 +164,25 @@ export default class EmptyRowsHandler implements IInterfaceWithMixin {
|
|
|
148
164
|
const table = this.getContent();
|
|
149
165
|
const binding = table.getRowBinding();
|
|
150
166
|
const bindingHeaderContext = binding.getHeaderContext();
|
|
151
|
-
|
|
152
|
-
|
|
167
|
+
|
|
168
|
+
if (!(binding && binding.isResolved() && binding.isLengthFinal() && bindingHeaderContext)) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
const contextPath = bindingHeaderContext.getPath();
|
|
173
|
+
|
|
174
|
+
// DO NOT show empty rows in display mode.
|
|
175
|
+
// If any inactive rows are present (from a previous state), remove them and exit.
|
|
176
|
+
if (!CommonUtils.getIsEditable(table)) {
|
|
177
|
+
this.removeEmptyRowsMessages();
|
|
153
178
|
this._deleteEmptyRows(binding, contextPath);
|
|
154
|
-
|
|
179
|
+
return;
|
|
155
180
|
}
|
|
156
|
-
|
|
181
|
+
|
|
182
|
+
this._deleteEmptyRows(binding, contextPath);
|
|
183
|
+
const defaults = await this.getTableDefaults(table);
|
|
184
|
+
// Update the empty rows with the latest default values
|
|
185
|
+
await this.createEmptyRows(binding, table, false, undefined, false, defaults);
|
|
157
186
|
}
|
|
158
187
|
|
|
159
188
|
/**
|
|
@@ -364,7 +393,9 @@ export default class EmptyRowsHandler implements IInterfaceWithMixin {
|
|
|
364
393
|
defaultValueFunctionData?: object | undefined
|
|
365
394
|
): Promise<void | Context[]> {
|
|
366
395
|
const inlineCreationRowCount = newInlineCreationRowFromPaste ?? (this.getTableDefinition().control?.inlineCreationRowCount || 1);
|
|
367
|
-
|
|
396
|
+
/* ensures that at most one additional empty row can exist during LiveChange (when `recreateOneRow` is true).
|
|
397
|
+
In all other cases, the number of inactive contexts cannot exceed `inlineCreationRowCount`.*/
|
|
398
|
+
if (this.creatingEmptyRows || this.getInactiveContextNumber(binding) >= inlineCreationRowCount + (recreateOneRow ? 1 : 0)) {
|
|
368
399
|
return;
|
|
369
400
|
}
|
|
370
401
|
const data = Array.from({ length: inlineCreationRowCount }, () => ({})),
|
|
@@ -372,8 +403,7 @@ export default class EmptyRowsHandler implements IInterfaceWithMixin {
|
|
|
372
403
|
inactive = true,
|
|
373
404
|
view = CommonUtils.getTargetView(table),
|
|
374
405
|
controller = view.getController(),
|
|
375
|
-
editFlow = controller.editFlow
|
|
376
|
-
appComponent = CommonUtils.getAppComponent(table);
|
|
406
|
+
editFlow = controller.editFlow;
|
|
377
407
|
|
|
378
408
|
this.creatingEmptyRows = true;
|
|
379
409
|
try {
|
|
@@ -382,15 +412,15 @@ export default class EmptyRowsHandler implements IInterfaceWithMixin {
|
|
|
382
412
|
binding,
|
|
383
413
|
// during a live change, only 1 new document is created
|
|
384
414
|
dataForCreate,
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
415
|
+
{
|
|
416
|
+
createAtEnd: recreateOneRow || forceCreateatEnd ? true : atEnd, // When editing an empty row, the new empty row is to be created just below and not above
|
|
417
|
+
|
|
418
|
+
beforeCreateCallBack: controller.editFlow.onBeforeCreate,
|
|
419
|
+
createAsInactive: inactive,
|
|
420
|
+
hideBusyIndicator: inactive,
|
|
421
|
+
defaultValueFunctionData
|
|
422
|
+
}
|
|
392
423
|
);
|
|
393
|
-
appComponent.getSideEffectsService().requestSideEffectsForNavigationProperty(binding.getPath(), view.getBindingContext());
|
|
394
424
|
contexts?.forEach(async function (context: Context) {
|
|
395
425
|
try {
|
|
396
426
|
await context.created();
|
|
@@ -125,18 +125,18 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
125
125
|
* @returns A promise that resolves when the variant has been applied.
|
|
126
126
|
*/;
|
|
127
127
|
_proto.handleVariantIdPassedViaURLParams = async function handleVariantIdPassedViaURLParams() {
|
|
128
|
-
const urlParams = this.getStartupParameters();
|
|
128
|
+
const urlParams = await this.getStartupParameters();
|
|
129
129
|
const tableVariantId = urlParams["sap-ui-fe-table-variant-id"]?.[0];
|
|
130
130
|
const view = CommonUtils.getTargetView(this);
|
|
131
131
|
const viewData = view.getViewData();
|
|
132
132
|
const vmType = viewData.variantManagement;
|
|
133
133
|
const vm = this.content.getVariant();
|
|
134
|
-
if (vm && tableVariantId && vmType === "Control") {
|
|
134
|
+
if (vm && tableVariantId && typeof tableVariantId === "string" && vmType === "Control") {
|
|
135
135
|
const variantToApply = vm.getVariants().find(variant => variant.getKey() === tableVariantId);
|
|
136
136
|
const ControlVariantApplyAPI = (await __ui5_require_async("sap/ui/fl/apply/api/ControlVariantApplyAPI")).default;
|
|
137
137
|
return ControlVariantApplyAPI.activateVariant({
|
|
138
138
|
element: vm,
|
|
139
|
-
variantReference: variantToApply
|
|
139
|
+
variantReference: variantToApply?.getKey()
|
|
140
140
|
});
|
|
141
141
|
}
|
|
142
142
|
}
|
|
@@ -144,14 +144,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
144
144
|
/**
|
|
145
145
|
* Retrieves the startup parameters from the application component data.
|
|
146
146
|
* These parameters contain URL query parameters that were passed when the application was started.
|
|
147
|
-
* @returns The startup parameters
|
|
148
|
-
* or undefined if no parameters are available or if the component chain is not accessible.
|
|
147
|
+
* @returns The startup parameters.
|
|
149
148
|
*/;
|
|
150
|
-
_proto.getStartupParameters = function getStartupParameters() {
|
|
149
|
+
_proto.getStartupParameters = async function getStartupParameters() {
|
|
151
150
|
const controller = this.getPageController();
|
|
152
151
|
const appComponent = controller.getAppComponent();
|
|
153
|
-
|
|
154
|
-
return componentData.startupParameters;
|
|
152
|
+
return appComponent.getStartupParameters();
|
|
155
153
|
}
|
|
156
154
|
|
|
157
155
|
/**
|
|
@@ -251,4 +249,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
251
249
|
_exports = TableAPIStateHandler;
|
|
252
250
|
return _exports;
|
|
253
251
|
}, false);
|
|
254
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZUFQSVN0YXRlSGFuZGxlciIsIl9JVmlld1N0YXRlQ29udHJpYnV0byIsImFwcGx5IiwiYXJndW1lbnRzIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsInJldHJpZXZlU3RhdGUiLCJ0YWJsZVN0YXRlIiwiaW5uZXJUYWJsZSIsImdldENvbnRyb2xTdGF0ZSIsIlN0YXRlVXRpbCIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsImNvbnRlbnQiLCJxdWlja0ZpbHRlciIsImdldFF1aWNrRmlsdGVyIiwicXVpY2tGaWx0ZXJTdGF0ZSIsImdldFNlbGVjdGVkS2V5Iiwic2VsZWN0ZWRLZXkiLCJ2YXJpYW50VG9SZXRyaWV2ZSIsImdldFZhcmlhbnQiLCJnZXRJZCIsInZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbCIsInZhcmlhbnRNYW5hZ2VtZW50IiwidmFyaWFudElkIiwiZ2V0Q3VycmVudFZhcmlhbnRLZXkiLCJzZXRJbml0aWFsU3RhdGUiLCJpbml0aWFsQ29udHJvbFN0YXRlIiwiZSIsIkxvZyIsImVycm9yIiwiYXBwbHlMZWdhY3lTdGF0ZSIsIl9uYXZQYXJhbWV0ZXJzIiwic2hvdWxkQXBwbHlEaWZmU3RhdGUiLCJ0YWJsZSIsInZtIiwidm1TdGF0ZSIsImNvbnRyb2xTdGF0ZSIsImZ1bGxTdGF0ZSIsImluaXRpYWxTdGF0ZSIsInRvU3RyaW5nIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImFwcGx5U3RhdGUiLCJoYW5kbGVWYXJpYW50SWRQYXNzZWRWaWFVUkxQYXJhbXMiLCJ1cmxQYXJhbXMiLCJnZXRTdGFydHVwUGFyYW1ldGVycyIsInRhYmxlVmFyaWFudElkIiwidmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJ2bVR5cGUiLCJ2YXJpYW50VG9BcHBseSIsImdldFZhcmlhbnRzIiwiZmluZCIsInZhcmlhbnQiLCJnZXRLZXkiLCJDb250cm9sVmFyaWFudEFwcGx5QVBJIiwiX191aTVfcmVxdWlyZV9hc3luYyIsImRlZmF1bHQiLCJhY3RpdmF0ZVZhcmlhbnQiLCJlbGVtZW50IiwidmFyaWFudFJlZmVyZW5jZSIsImNvbnRyb2xsZXIiLCJnZXRQYWdlQ29udHJvbGxlciIsImFwcENvbXBvbmVudCIsImdldEFwcENvbXBvbmVudCIsImNvbXBvbmVudERhdGEiLCJnZXRDb21wb25lbnREYXRhIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJhcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibmF2aWdhdGlvblBhcmFtZXRlciIsImFwcGx5VmFyaWFudEZyb21VUkxQYXJhbXMiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImluaXRpYWxpemVkIiwiaW5uZXJUYWJsZVN0YXRlIiwiY3VycmVudFZhcmlhbnQiLCJxdWlja0ZpbHRlcktleSIsInVuZGVmaW5lZCIsIm92TSIsImFWYXJpYW50cyIsInNWYXJpYW50UmVmZXJlbmNlIiwic29tZSIsIm9WYXJpYW50IiwiZ2V0U3RhbmRhcmRWYXJpYW50S2V5IiwiZmluYWxTdGF0ZSIsInN1cHBsZW1lbnRhcnlDb25maWciLCJkaWZmU3RhdGUiLCJhcHBseUV4dGVybmFsU3RhdGUiLCJzZXRTZWxlY3RlZEtleSIsIm9uUXVpY2tGaWx0ZXJTZWxlY3Rpb25DaGFuZ2UiLCJpbml0aWFsTG9hZCIsImZpbHRlckJhciIsImdldEZpbHRlckJhckNvbnRyb2wiLCJpc0EiLCJ3YWl0Rm9ySW5pdGlhbFN0YXRlIiwidGhlbiIsInJlYmluZCIsImNhdGNoIiwiSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yTWl4aW4iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlQVBJU3RhdGVIYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uUGFyYW1ldGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IElWaWV3U3RhdGVDb250cmlidXRvck1peGluIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy92aWV3U3RhdGUvSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yTWl4aW5cIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVyQmFyQVBJXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xTdGF0ZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2luc2lnaHRzL0NvbW1vbkluc2lnaHRzSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVN0YXRlIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFibGVBUElTdGF0ZUhhbmRsZXIgZXh0ZW5kcyBJVmlld1N0YXRlQ29udHJpYnV0b3JNaXhpbjxUYWJsZVN0YXRlPiB7XG5cdC8qKlxuXHQgKiBBc3luY2hyb25vdXNseSByZXRyaWV2ZXMgdGhlIHN0YXRlIG9mIHRoZSB0YWJsZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdmlld3N0YXRlLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdGFibGUgc3RhdGUgb3IgbnVsbCBpZiBub3QgZm91bmQuXG5cdCAqL1xuXHRhc3luYyByZXRyaWV2ZVN0YXRlKHRoaXM6IFRhYmxlQVBJKTogUHJvbWlzZTxUYWJsZVN0YXRlIHwgbnVsbD4ge1xuXHRcdGNvbnN0IHRhYmxlU3RhdGU6IFRhYmxlU3RhdGUgPSB7fTtcblx0XHR0YWJsZVN0YXRlLmlubmVyVGFibGUgPSB0aGlzLmdldENvbnRyb2xTdGF0ZShhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCkpIGFzIG9iamVjdDtcblx0XHRjb25zdCBxdWlja0ZpbHRlciA9IHRoaXMuZ2V0UXVpY2tGaWx0ZXIoKTtcblx0XHRpZiAocXVpY2tGaWx0ZXIpIHtcblx0XHRcdGNvbnN0IHF1aWNrRmlsdGVyU3RhdGUgPSBxdWlja0ZpbHRlci5nZXRTZWxlY3RlZEtleSgpO1xuXHRcdFx0aWYgKCF0YWJsZVN0YXRlLnF1aWNrRmlsdGVyKSB7XG5cdFx0XHRcdHRhYmxlU3RhdGUucXVpY2tGaWx0ZXIgPSB7fTtcblx0XHRcdH1cblx0XHRcdHRhYmxlU3RhdGUucXVpY2tGaWx0ZXIuc2VsZWN0ZWRLZXkgPSBxdWlja0ZpbHRlclN0YXRlO1xuXHRcdH1cblx0XHRjb25zdCB2YXJpYW50VG9SZXRyaWV2ZSA9IHRoaXMuY29udGVudC5nZXRWYXJpYW50KCk/LmdldElkKCk7XG5cdFx0aWYgKHZhcmlhbnRUb1JldHJpZXZlKSB7XG5cdFx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudENvbnRyb2wgPSB0aGlzLmNvbnRlbnQuZ2V0VmFyaWFudCgpO1xuXHRcdFx0aWYgKCF0YWJsZVN0YXRlLnZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRcdHRhYmxlU3RhdGUudmFyaWFudE1hbmFnZW1lbnQgPSB7IHZhcmlhbnRJZDogdmFyaWFudE1hbmFnZW1lbnRDb250cm9sPy5nZXRDdXJyZW50VmFyaWFudEtleSgpIH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0YWJsZVN0YXRlLnZhcmlhbnRNYW5hZ2VtZW50LnZhcmlhbnRJZCA9IHZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbD8uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRhYmxlU3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgY29udHJvbCBieSByZXRyaWV2aW5nIHRoZSBleHRlcm5hbCBzdGF0ZS5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgaW5pdGlhbCBzdGF0ZSBpcyBzZXQuXG5cdCAqL1xuXHRhc3luYyBzZXRJbml0aWFsU3RhdGUodGhpczogVGFibGVBUEkpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgaW5pdGlhbENvbnRyb2xTdGF0ZSA9IGF3YWl0IFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50KTtcblx0XHRcdHRoaXMuaW5pdGlhbENvbnRyb2xTdGF0ZSA9IGluaXRpYWxDb250cm9sU3RhdGU7XG5cdFx0fSBjYXRjaCAoZTogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQXBwbGllcyB0aGUgbGVnYWN5IHN0YXRlIHRvIHRoZSB0YWJsZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29udHJvbCBzdGF0ZSByZXRyaWV2YWwgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBnZXRDb250cm9sU3RhdGUgRnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGNvbnRyb2wgc3RhdGUuXG5cdCAqIEBwYXJhbSBbX25hdlBhcmFtZXRlcnNdIE9wdGlvbmFsIG5hdmlnYXRpb24gcGFyYW1ldGVycy5cblx0ICogQHBhcmFtIFtzaG91bGRBcHBseURpZmZTdGF0ZV0gRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gYXBwbHkgdGhlIGRpZmYgc3RhdGUuXG5cdCAqIEByZXR1cm5zIC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc3RhdGUgaGFzIGJlZW4gYXBwbGllZC5cblx0ICovXG5cdGFzeW5jIGFwcGx5TGVnYWN5U3RhdGUoXG5cdFx0dGhpczogVGFibGVBUEksXG5cdFx0Z2V0Q29udHJvbFN0YXRlOiAoY29udHJvbDogTWFuYWdlZE9iamVjdCkgPT4gQ29udHJvbFN0YXRlLFxuXHRcdF9uYXZQYXJhbWV0ZXJzPzogTmF2aWdhdGlvblBhcmFtZXRlcixcblx0XHRzaG91bGRBcHBseURpZmZTdGF0ZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgdGFibGUgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0Y29uc3Qgdm0gPSB0YWJsZS5nZXRWYXJpYW50KCk7XG5cdFx0Y29uc3QgcXVpY2tGaWx0ZXIgPSB0aGlzLmdldFF1aWNrRmlsdGVyKCk7XG5cblx0XHRjb25zdCB0YWJsZVN0YXRlID0gZ2V0Q29udHJvbFN0YXRlKHRhYmxlKSBhcyB7IGluaXRpYWxTdGF0ZT86IFRhYmxlU3RhdGU7IGZ1bGxTdGF0ZT86IFRhYmxlU3RhdGUgfTtcblx0XHRjb25zdCB2bVN0YXRlID0gdm0gPyBnZXRDb250cm9sU3RhdGUodm0pIDogbnVsbDtcblx0XHRjb25zdCBxdWlja0ZpbHRlclN0YXRlID0gcXVpY2tGaWx0ZXI/LmNvbnRlbnQgPyBnZXRDb250cm9sU3RhdGUocXVpY2tGaWx0ZXIuY29udGVudCkgOiBudWxsO1xuXG5cdFx0Y29uc3QgY29udHJvbFN0YXRlOiBUYWJsZVN0YXRlID0ge307XG5cblx0XHRpZiAodGFibGVTdGF0ZSkge1xuXHRcdFx0Y29udHJvbFN0YXRlLmlubmVyVGFibGUgPSB7XG5cdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS5pbm5lclRhYmxlLFxuXHRcdFx0XHQuLi50YWJsZVN0YXRlLFxuXHRcdFx0XHRmdWxsU3RhdGU6IHtcblx0XHRcdFx0XHQuLi5jb250cm9sU3RhdGUuaW5uZXJUYWJsZT8uZnVsbFN0YXRlLFxuXHRcdFx0XHRcdC4uLnRhYmxlU3RhdGUuZnVsbFN0YXRlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGluaXRpYWxTdGF0ZToge1xuXHRcdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS5pbm5lclRhYmxlPy5pbml0aWFsU3RhdGUsXG5cdFx0XHRcdFx0Li4udGFibGVTdGF0ZS5pbml0aWFsU3RhdGVcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAodm1TdGF0ZT8udmFyaWFudElkKSB7XG5cdFx0XHRjb250cm9sU3RhdGUudmFyaWFudE1hbmFnZW1lbnQgPSB7XG5cdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS52YXJpYW50TWFuYWdlbWVudCxcblx0XHRcdFx0dmFyaWFudElkOiB2bVN0YXRlLnZhcmlhbnRJZC50b1N0cmluZygpXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGlmIChxdWlja0ZpbHRlclN0YXRlPy5zZWxlY3RlZEtleSkge1xuXHRcdFx0Y29udHJvbFN0YXRlLnF1aWNrRmlsdGVyID0ge1xuXHRcdFx0XHQuLi5jb250cm9sU3RhdGUucXVpY2tGaWx0ZXIsXG5cdFx0XHRcdHNlbGVjdGVkS2V5OiBxdWlja0ZpbHRlclN0YXRlLnNlbGVjdGVkS2V5LnRvU3RyaW5nKClcblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmIChjb250cm9sU3RhdGUgJiYgT2JqZWN0LmtleXMoY29udHJvbFN0YXRlKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRhd2FpdCB0aGlzLmFwcGx5U3RhdGUoY29udHJvbFN0YXRlIGFzIG9iamVjdCwgX25hdlBhcmFtZXRlcnMsIHNob3VsZEFwcGx5RGlmZlN0YXRlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgYXBwbGljYXRpb24gb2YgYSB2YXJpYW50IElEIHBhc3NlZCB2aWEgVVJMIHBhcmFtZXRlcnMuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHZhcmlhbnQgaGFzIGJlZW4gYXBwbGllZC5cblx0ICovXG5cdGFzeW5jIGhhbmRsZVZhcmlhbnRJZFBhc3NlZFZpYVVSTFBhcmFtcyh0aGlzOiBUYWJsZUFQSSAmIFRhYmxlQVBJU3RhdGVIYW5kbGVyKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0Y29uc3QgdXJsUGFyYW1zID0gdGhpcy5nZXRTdGFydHVwUGFyYW1ldGVycygpIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuXHRcdGNvbnN0IHRhYmxlVmFyaWFudElkID0gdXJsUGFyYW1zW1wic2FwLXVpLWZlLXRhYmxlLXZhcmlhbnQtaWRcIl0/LlswXTtcblx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKTtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKTtcblx0XHRjb25zdCB2bVR5cGUgPSB2aWV3RGF0YS52YXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCB2bSA9IHRoaXMuY29udGVudC5nZXRWYXJpYW50KCk7XG5cdFx0aWYgKHZtICYmIHRhYmxlVmFyaWFudElkICYmIHZtVHlwZSA9PT0gXCJDb250cm9sXCIpIHtcblx0XHRcdGNvbnN0IHZhcmlhbnRUb0FwcGx5ID0gdm0uZ2V0VmFyaWFudHMoKS5maW5kKCh2YXJpYW50KSA9PiB2YXJpYW50LmdldEtleSgpID09PSB0YWJsZVZhcmlhbnRJZCk7XG5cdFx0XHRjb25zdCBDb250cm9sVmFyaWFudEFwcGx5QVBJID0gKGF3YWl0IGltcG9ydChcInNhcC91aS9mbC9hcHBseS9hcGkvQ29udHJvbFZhcmlhbnRBcHBseUFQSVwiKSkuZGVmYXVsdDtcblx0XHRcdHJldHVybiBDb250cm9sVmFyaWFudEFwcGx5QVBJLmFjdGl2YXRlVmFyaWFudCh7XG5cdFx0XHRcdGVsZW1lbnQ6IHZtLFxuXHRcdFx0XHR2YXJpYW50UmVmZXJlbmNlOiB2YXJpYW50VG9BcHBseS5nZXRLZXkoKVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzIGZyb20gdGhlIGFwcGxpY2F0aW9uIGNvbXBvbmVudCBkYXRhLlxuXHQgKiBUaGVzZSBwYXJhbWV0ZXJzIGNvbnRhaW4gVVJMIHF1ZXJ5IHBhcmFtZXRlcnMgdGhhdCB3ZXJlIHBhc3NlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiB3YXMgc3RhcnRlZC5cblx0ICogQHJldHVybnMgVGhlIHN0YXJ0dXAgcGFyYW1ldGVycyBhcyBhIGtleS12YWx1ZSBtYXBwaW5nIHdoZXJlIGVhY2gga2V5IGNhbiBoYXZlIG11bHRpcGxlIHZhbHVlcyxcblx0ICogICAgICAgICAgb3IgdW5kZWZpbmVkIGlmIG5vIHBhcmFtZXRlcnMgYXJlIGF2YWlsYWJsZSBvciBpZiB0aGUgY29tcG9uZW50IGNoYWluIGlzIG5vdCBhY2Nlc3NpYmxlLlxuXHQgKi9cblx0Z2V0U3RhcnR1cFBhcmFtZXRlcnModGhpczogVGFibGVBUEkpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3QgY29tcG9uZW50RGF0YSA9IGFwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCk7XG5cdFx0cmV0dXJuIGNvbXBvbmVudERhdGEuc3RhcnR1cFBhcmFtZXRlcnMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFzeW5jaHJvbm91c2x5IGFwcGxpZXMgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIHRvIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblBhcmFtZXRlciBUaGUgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIHRvIGJlIGFwcGxpZWQuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIGFwcGxpZWQuXG5cdCAqL1xuXHRhc3luYyBhcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzKHRoaXM6IFRhYmxlQVBJICYgVGFibGVBUElTdGF0ZUhhbmRsZXIsIG5hdmlnYXRpb25QYXJhbWV0ZXI6IE5hdmlnYXRpb25QYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Ly8gT25seSBoYW5kbGUgdmFyaWFudCBJRCBmcm9tIFVSTCBwYXJhbWV0ZXJzIGlmIGFwcGx5VmFyaWFudEZyb21VUkxQYXJhbXMgaXMgdHJ1ZVxuXHRcdFx0aWYgKG5hdmlnYXRpb25QYXJhbWV0ZXIuYXBwbHlWYXJpYW50RnJvbVVSTFBhcmFtcyA/PyBmYWxzZSkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmhhbmRsZVZhcmlhbnRJZFBhc3NlZFZpYVVSTFBhcmFtcygpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoXG5cdFx0XHRcdGBFcnJvciB0eWluZyB0byBhcHBseSBuYXZpZ2F0aW9uIHBhcmFtZXRlcnMgdG8gJHt0aGlzLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfX0gY29udHJvbCB3aXRoIElEOiAke3RoaXMuZ2V0SWQoKX1gLFxuXHRcdFx0XHRlcnJvciBhcyBFcnJvclxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFzeW5jaHJvbm91c2x5IGFwcGxpZXMgdGhlIHByb3ZpZGVkIGNvbnRyb2wgc3RhdGUgdG8gdGhlIHZpZXdzdGF0ZS5cblx0ICogQHBhcmFtIGNvbnRyb2xTdGF0ZSBUaGUgc3RhdGUgdG8gYmUgYXBwbGllZCB0byB0aGUgY29udHJvbC5cblx0ICogQHBhcmFtIFtfbmF2UGFyYW1ldGVyc10gT3B0aW9uYWwgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gW3Nob3VsZEFwcGx5RGlmZlN0YXRlXSBPcHRpb25hbCBmbGFnIHRvIHNraXAgbWVyZ2luZyBzdGF0ZXMuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHN0YXRlIGhhcyBiZWVuIGFwcGxpZWQuXG5cdCAqL1xuXHRhc3luYyBhcHBseVN0YXRlKFxuXHRcdHRoaXM6IFRhYmxlQVBJLFxuXHRcdGNvbnRyb2xTdGF0ZTogVGFibGVTdGF0ZSxcblx0XHRfbmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIsXG5cdFx0c2hvdWxkQXBwbHlEaWZmU3RhdGU/OiBib29sZWFuXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghY29udHJvbFN0YXRlKSByZXR1cm47XG5cblx0XHQvLyBUYWJsZSBwcm9wZXJ0aWVzIG5lZWQgdG8gYmUgYXZhaWxhYmxlIGJlZm9yZSBjYWxsaW5nIGRpZmZTdGF0ZS9yZXRyaWV2ZVN0YXRlLiBIb3dldmVyLCBhcHBseVN0YXRlXG5cdFx0Ly8gZ2V0cyBjYWxsZWQgdG9vIGVhcmx5IGluIHRoZSB0YWJsZSdzIGxpZmVjeWNsZSwgc28gdGhlIGRlbGVnYXRlIGFuZCBwcm9wZXJ0aWVzIGFyZSBub3QgeWV0IGF2YWlsYWJsZS5cblx0XHRhd2FpdCB0aGlzLmNvbnRlbnQuaW5pdGlhbGl6ZWQoKTtcblxuXHRcdGNvbnN0IGlubmVyVGFibGVTdGF0ZSA9IGNvbnRyb2xTdGF0ZT8uaW5uZXJUYWJsZTtcblx0XHRjb25zdCB2YXJpYW50SWQgPSBjb250cm9sU3RhdGU/LnZhcmlhbnRNYW5hZ2VtZW50Py52YXJpYW50SWQ7XG5cdFx0Y29uc3QgY3VycmVudFZhcmlhbnQgPSB0aGlzLmNvbnRlbnQ/LmdldFZhcmlhbnQoKTtcblx0XHRjb25zdCBxdWlja0ZpbHRlcktleSA9IGNvbnRyb2xTdGF0ZT8ucXVpY2tGaWx0ZXI/LnNlbGVjdGVkS2V5O1xuXHRcdGNvbnN0IHF1aWNrRmlsdGVyID0gdGhpcy5nZXRRdWlja0ZpbHRlcigpO1xuXG5cdFx0Ly8gSGFuZGxlIFZhcmlhbnQgTWFuYWdlbWVudFxuXHRcdGlmICh2YXJpYW50SWQgIT09IHVuZGVmaW5lZCAmJiB2YXJpYW50SWQgIT09IGN1cnJlbnRWYXJpYW50LmdldEN1cnJlbnRWYXJpYW50S2V5KCkpIHtcblx0XHRcdGNvbnN0IG92TSA9IHRoaXMuY29udGVudD8uZ2V0VmFyaWFudCgpO1xuXHRcdFx0Y29uc3QgYVZhcmlhbnRzID0gb3ZNPy5nZXRWYXJpYW50cygpO1xuXHRcdFx0Y29uc3Qgc1ZhcmlhbnRSZWZlcmVuY2UgPSBhVmFyaWFudHM/LnNvbWUoKG9WYXJpYW50KSA9PiBvVmFyaWFudC5nZXRLZXkoKSA9PT0gdmFyaWFudElkKVxuXHRcdFx0XHQ/IHZhcmlhbnRJZFxuXHRcdFx0XHQ6IG92TT8uZ2V0U3RhbmRhcmRWYXJpYW50S2V5O1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgQ29udHJvbFZhcmlhbnRBcHBseUFQSSA9IChhd2FpdCBpbXBvcnQoXCJzYXAvdWkvZmwvYXBwbHkvYXBpL0NvbnRyb2xWYXJpYW50QXBwbHlBUElcIikpLmRlZmF1bHQ7XG5cdFx0XHRcdGF3YWl0IENvbnRyb2xWYXJpYW50QXBwbHlBUEkuYWN0aXZhdGVWYXJpYW50KHtcblx0XHRcdFx0XHRlbGVtZW50OiBvdk0sXG5cdFx0XHRcdFx0dmFyaWFudFJlZmVyZW5jZTogc1ZhcmlhbnRSZWZlcmVuY2UgYXMgc3RyaW5nXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRhd2FpdCB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdGF3YWl0IHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHdlIG5lZWQgdG8gdXBkYXRlIGluaXRpYWwgc3RhdGUgZXZlbiBpZiBhYm92ZSBjb25kaXRpb24gbm90IHNhdGllc2ZpZWRcblx0XHRcdGF3YWl0IHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIElubmVyIFRhYmxlIFN0YXRlXG5cblx0XHRsZXQgZmluYWxTdGF0ZTtcblxuXHRcdGlmIChpbm5lclRhYmxlU3RhdGUpIHtcblx0XHRcdGlmIChzaG91bGRBcHBseURpZmZTdGF0ZSAmJiBpbm5lclRhYmxlU3RhdGUuaW5pdGlhbFN0YXRlKSB7XG5cdFx0XHRcdGlmICghaW5uZXJUYWJsZVN0YXRlLmluaXRpYWxTdGF0ZS5zdXBwbGVtZW50YXJ5Q29uZmlnKSB7XG5cdFx0XHRcdFx0aW5uZXJUYWJsZVN0YXRlLmluaXRpYWxTdGF0ZS5zdXBwbGVtZW50YXJ5Q29uZmlnID0ge307XG5cdFx0XHRcdH1cblx0XHRcdFx0ZmluYWxTdGF0ZSA9IGF3YWl0IFN0YXRlVXRpbC5kaWZmU3RhdGUoXG5cdFx0XHRcdFx0dGhpcy5jb250ZW50LFxuXHRcdFx0XHRcdGlubmVyVGFibGVTdGF0ZS5pbml0aWFsU3RhdGUgYXMgb2JqZWN0LFxuXHRcdFx0XHRcdGlubmVyVGFibGVTdGF0ZS5mdWxsU3RhdGUgYXMgb2JqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoY29udHJvbFN0YXRlICYmICFjb250cm9sU3RhdGU/LnN1cHBsZW1lbnRhcnlDb25maWcpIHtcblx0XHRcdFx0XHRjb250cm9sU3RhdGUuc3VwcGxlbWVudGFyeUNvbmZpZyA9IHt9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZpbmFsU3RhdGUgPSBpbm5lclRhYmxlU3RhdGUuZnVsbFN0YXRlO1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZSh0aGlzLmNvbnRlbnQsIGZpbmFsU3RhdGUpO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBRdWljayBGaWx0ZXIgU3RhdGVcblx0XHRpZiAocXVpY2tGaWx0ZXJLZXkgJiYgcXVpY2tGaWx0ZXJLZXkgIT09IHF1aWNrRmlsdGVyPy5nZXRTZWxlY3RlZEtleSgpKSB7XG5cdFx0XHRxdWlja0ZpbHRlcj8uc2V0U2VsZWN0ZWRLZXkocXVpY2tGaWx0ZXJLZXkpO1xuXHRcdFx0dGhpcy5vblF1aWNrRmlsdGVyU2VsZWN0aW9uQ2hhbmdlKCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmluaXRpYWxMb2FkICYmIHRoaXMuZmlsdGVyQmFyKSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLmdldEZpbHRlckJhckNvbnRyb2wodGhpcy5maWx0ZXJCYXIpO1xuXHRcdFx0aWYgKGZpbHRlckJhciAmJiBmaWx0ZXJCYXIuaXNBPEZpbHRlckJhckFQST4oXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5GaWx0ZXJCYXJBUElcIikpIHtcblx0XHRcdFx0ZmlsdGVyQmFyXG5cdFx0XHRcdFx0LndhaXRGb3JJbml0aWFsU3RhdGUoKVxuXHRcdFx0XHRcdC50aGVuKCgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuY29udGVudC5yZWJpbmQoKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciBpbml0aWFsIHN0YXRlIG9mIGZpbHRlciBiYXJcIik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQVdxQkEsb0JBQW9CLDBCQUFBQyxxQkFBQTtJQUFBLFNBQUFELHFCQUFBO01BQUEsT0FBQUMscUJBQUEsQ0FBQUMsS0FBQSxPQUFBQyxTQUFBO0lBQUE7SUFBQUMsUUFBQSxHQUFBSixvQkFBQTtJQUFBSyxjQUFBLENBQUFMLG9CQUFBLEVBQUFDLHFCQUFBO0lBQUEsSUFBQUssTUFBQSxHQUFBTixvQkFBQSxDQUFBTyxTQUFBO0lBQ3hDO0FBQ0Q7QUFDQTtBQUNBO0lBSENELE1BQUEsQ0FJTUUsYUFBYSxHQUFuQixlQUFNQSxhQUFhQSxDQUFBLEVBQTZDO01BQy9ELE1B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
|
|
252
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZUFQSVN0YXRlSGFuZGxlciIsIl9JVmlld1N0YXRlQ29udHJpYnV0byIsImFwcGx5IiwiYXJndW1lbnRzIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsInJldHJpZXZlU3RhdGUiLCJ0YWJsZVN0YXRlIiwiaW5uZXJUYWJsZSIsImdldENvbnRyb2xTdGF0ZSIsIlN0YXRlVXRpbCIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsImNvbnRlbnQiLCJxdWlja0ZpbHRlciIsImdldFF1aWNrRmlsdGVyIiwicXVpY2tGaWx0ZXJTdGF0ZSIsImdldFNlbGVjdGVkS2V5Iiwic2VsZWN0ZWRLZXkiLCJ2YXJpYW50VG9SZXRyaWV2ZSIsImdldFZhcmlhbnQiLCJnZXRJZCIsInZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbCIsInZhcmlhbnRNYW5hZ2VtZW50IiwidmFyaWFudElkIiwiZ2V0Q3VycmVudFZhcmlhbnRLZXkiLCJzZXRJbml0aWFsU3RhdGUiLCJpbml0aWFsQ29udHJvbFN0YXRlIiwiZSIsIkxvZyIsImVycm9yIiwiYXBwbHlMZWdhY3lTdGF0ZSIsIl9uYXZQYXJhbWV0ZXJzIiwic2hvdWxkQXBwbHlEaWZmU3RhdGUiLCJ0YWJsZSIsInZtIiwidm1TdGF0ZSIsImNvbnRyb2xTdGF0ZSIsImZ1bGxTdGF0ZSIsImluaXRpYWxTdGF0ZSIsInRvU3RyaW5nIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImFwcGx5U3RhdGUiLCJoYW5kbGVWYXJpYW50SWRQYXNzZWRWaWFVUkxQYXJhbXMiLCJ1cmxQYXJhbXMiLCJnZXRTdGFydHVwUGFyYW1ldGVycyIsInRhYmxlVmFyaWFudElkIiwidmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJ2bVR5cGUiLCJ2YXJpYW50VG9BcHBseSIsImdldFZhcmlhbnRzIiwiZmluZCIsInZhcmlhbnQiLCJnZXRLZXkiLCJDb250cm9sVmFyaWFudEFwcGx5QVBJIiwiX191aTVfcmVxdWlyZV9hc3luYyIsImRlZmF1bHQiLCJhY3RpdmF0ZVZhcmlhbnQiLCJlbGVtZW50IiwidmFyaWFudFJlZmVyZW5jZSIsImNvbnRyb2xsZXIiLCJnZXRQYWdlQ29udHJvbGxlciIsImFwcENvbXBvbmVudCIsImdldEFwcENvbXBvbmVudCIsImFwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnMiLCJuYXZpZ2F0aW9uUGFyYW1ldGVyIiwiYXBwbHlWYXJpYW50RnJvbVVSTFBhcmFtcyIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiaW5pdGlhbGl6ZWQiLCJpbm5lclRhYmxlU3RhdGUiLCJjdXJyZW50VmFyaWFudCIsInF1aWNrRmlsdGVyS2V5IiwidW5kZWZpbmVkIiwib3ZNIiwiYVZhcmlhbnRzIiwic1ZhcmlhbnRSZWZlcmVuY2UiLCJzb21lIiwib1ZhcmlhbnQiLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJmaW5hbFN0YXRlIiwic3VwcGxlbWVudGFyeUNvbmZpZyIsImRpZmZTdGF0ZSIsImFwcGx5RXh0ZXJuYWxTdGF0ZSIsInNldFNlbGVjdGVkS2V5Iiwib25RdWlja0ZpbHRlclNlbGVjdGlvbkNoYW5nZSIsImluaXRpYWxMb2FkIiwiZmlsdGVyQmFyIiwiZ2V0RmlsdGVyQmFyQ29udHJvbCIsImlzQSIsIndhaXRGb3JJbml0aWFsU3RhdGUiLCJ0aGVuIiwicmViaW5kIiwiY2F0Y2giLCJJVmlld1N0YXRlQ29udHJpYnV0b3JNaXhpbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVBUElTdGF0ZUhhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IFN0YXJ0dXBQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uUGFyYW1ldGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IElWaWV3U3RhdGVDb250cmlidXRvck1peGluIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy92aWV3U3RhdGUvSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yTWl4aW5cIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVyQmFyQVBJXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xTdGF0ZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2luc2lnaHRzL0NvbW1vbkluc2lnaHRzSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVN0YXRlIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFibGVBUElTdGF0ZUhhbmRsZXIgZXh0ZW5kcyBJVmlld1N0YXRlQ29udHJpYnV0b3JNaXhpbjxUYWJsZVN0YXRlPiB7XG5cdC8qKlxuXHQgKiBBc3luY2hyb25vdXNseSByZXRyaWV2ZXMgdGhlIHN0YXRlIG9mIHRoZSB0YWJsZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdmlld3N0YXRlLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdGFibGUgc3RhdGUgb3IgbnVsbCBpZiBub3QgZm91bmQuXG5cdCAqL1xuXHRhc3luYyByZXRyaWV2ZVN0YXRlKHRoaXM6IFRhYmxlQVBJKTogUHJvbWlzZTxUYWJsZVN0YXRlIHwgbnVsbD4ge1xuXHRcdGNvbnN0IHRhYmxlU3RhdGU6IFRhYmxlU3RhdGUgPSB7fTtcblx0XHR0YWJsZVN0YXRlLmlubmVyVGFibGUgPSB0aGlzLmdldENvbnRyb2xTdGF0ZShhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCkpIGFzIG9iamVjdDtcblx0XHRjb25zdCBxdWlja0ZpbHRlciA9IHRoaXMuZ2V0UXVpY2tGaWx0ZXIoKTtcblx0XHRpZiAocXVpY2tGaWx0ZXIpIHtcblx0XHRcdGNvbnN0IHF1aWNrRmlsdGVyU3RhdGUgPSBxdWlja0ZpbHRlci5nZXRTZWxlY3RlZEtleSgpO1xuXHRcdFx0aWYgKCF0YWJsZVN0YXRlLnF1aWNrRmlsdGVyKSB7XG5cdFx0XHRcdHRhYmxlU3RhdGUucXVpY2tGaWx0ZXIgPSB7fTtcblx0XHRcdH1cblx0XHRcdHRhYmxlU3RhdGUucXVpY2tGaWx0ZXIuc2VsZWN0ZWRLZXkgPSBxdWlja0ZpbHRlclN0YXRlO1xuXHRcdH1cblx0XHRjb25zdCB2YXJpYW50VG9SZXRyaWV2ZSA9IHRoaXMuY29udGVudC5nZXRWYXJpYW50KCk/LmdldElkKCk7XG5cdFx0aWYgKHZhcmlhbnRUb1JldHJpZXZlKSB7XG5cdFx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudENvbnRyb2wgPSB0aGlzLmNvbnRlbnQuZ2V0VmFyaWFudCgpO1xuXHRcdFx0aWYgKCF0YWJsZVN0YXRlLnZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRcdHRhYmxlU3RhdGUudmFyaWFudE1hbmFnZW1lbnQgPSB7IHZhcmlhbnRJZDogdmFyaWFudE1hbmFnZW1lbnRDb250cm9sPy5nZXRDdXJyZW50VmFyaWFudEtleSgpIH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0YWJsZVN0YXRlLnZhcmlhbnRNYW5hZ2VtZW50LnZhcmlhbnRJZCA9IHZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbD8uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRhYmxlU3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgY29udHJvbCBieSByZXRyaWV2aW5nIHRoZSBleHRlcm5hbCBzdGF0ZS5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgaW5pdGlhbCBzdGF0ZSBpcyBzZXQuXG5cdCAqL1xuXHRhc3luYyBzZXRJbml0aWFsU3RhdGUodGhpczogVGFibGVBUEkpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgaW5pdGlhbENvbnRyb2xTdGF0ZSA9IGF3YWl0IFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50KTtcblx0XHRcdHRoaXMuaW5pdGlhbENvbnRyb2xTdGF0ZSA9IGluaXRpYWxDb250cm9sU3RhdGU7XG5cdFx0fSBjYXRjaCAoZTogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQXBwbGllcyB0aGUgbGVnYWN5IHN0YXRlIHRvIHRoZSB0YWJsZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29udHJvbCBzdGF0ZSByZXRyaWV2YWwgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBnZXRDb250cm9sU3RhdGUgRnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGNvbnRyb2wgc3RhdGUuXG5cdCAqIEBwYXJhbSBbX25hdlBhcmFtZXRlcnNdIE9wdGlvbmFsIG5hdmlnYXRpb24gcGFyYW1ldGVycy5cblx0ICogQHBhcmFtIFtzaG91bGRBcHBseURpZmZTdGF0ZV0gRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gYXBwbHkgdGhlIGRpZmYgc3RhdGUuXG5cdCAqIEByZXR1cm5zIC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc3RhdGUgaGFzIGJlZW4gYXBwbGllZC5cblx0ICovXG5cdGFzeW5jIGFwcGx5TGVnYWN5U3RhdGUoXG5cdFx0dGhpczogVGFibGVBUEksXG5cdFx0Z2V0Q29udHJvbFN0YXRlOiAoY29udHJvbDogTWFuYWdlZE9iamVjdCkgPT4gQ29udHJvbFN0YXRlLFxuXHRcdF9uYXZQYXJhbWV0ZXJzPzogTmF2aWdhdGlvblBhcmFtZXRlcixcblx0XHRzaG91bGRBcHBseURpZmZTdGF0ZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgdGFibGUgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0Y29uc3Qgdm0gPSB0YWJsZS5nZXRWYXJpYW50KCk7XG5cdFx0Y29uc3QgcXVpY2tGaWx0ZXIgPSB0aGlzLmdldFF1aWNrRmlsdGVyKCk7XG5cblx0XHRjb25zdCB0YWJsZVN0YXRlID0gZ2V0Q29udHJvbFN0YXRlKHRhYmxlKSBhcyB7IGluaXRpYWxTdGF0ZT86IFRhYmxlU3RhdGU7IGZ1bGxTdGF0ZT86IFRhYmxlU3RhdGUgfTtcblx0XHRjb25zdCB2bVN0YXRlID0gdm0gPyBnZXRDb250cm9sU3RhdGUodm0pIDogbnVsbDtcblx0XHRjb25zdCBxdWlja0ZpbHRlclN0YXRlID0gcXVpY2tGaWx0ZXI/LmNvbnRlbnQgPyBnZXRDb250cm9sU3RhdGUocXVpY2tGaWx0ZXIuY29udGVudCkgOiBudWxsO1xuXG5cdFx0Y29uc3QgY29udHJvbFN0YXRlOiBUYWJsZVN0YXRlID0ge307XG5cblx0XHRpZiAodGFibGVTdGF0ZSkge1xuXHRcdFx0Y29udHJvbFN0YXRlLmlubmVyVGFibGUgPSB7XG5cdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS5pbm5lclRhYmxlLFxuXHRcdFx0XHQuLi50YWJsZVN0YXRlLFxuXHRcdFx0XHRmdWxsU3RhdGU6IHtcblx0XHRcdFx0XHQuLi5jb250cm9sU3RhdGUuaW5uZXJUYWJsZT8uZnVsbFN0YXRlLFxuXHRcdFx0XHRcdC4uLnRhYmxlU3RhdGUuZnVsbFN0YXRlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGluaXRpYWxTdGF0ZToge1xuXHRcdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS5pbm5lclRhYmxlPy5pbml0aWFsU3RhdGUsXG5cdFx0XHRcdFx0Li4udGFibGVTdGF0ZS5pbml0aWFsU3RhdGVcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAodm1TdGF0ZT8udmFyaWFudElkKSB7XG5cdFx0XHRjb250cm9sU3RhdGUudmFyaWFudE1hbmFnZW1lbnQgPSB7XG5cdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS52YXJpYW50TWFuYWdlbWVudCxcblx0XHRcdFx0dmFyaWFudElkOiB2bVN0YXRlLnZhcmlhbnRJZC50b1N0cmluZygpXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGlmIChxdWlja0ZpbHRlclN0YXRlPy5zZWxlY3RlZEtleSkge1xuXHRcdFx0Y29udHJvbFN0YXRlLnF1aWNrRmlsdGVyID0ge1xuXHRcdFx0XHQuLi5jb250cm9sU3RhdGUucXVpY2tGaWx0ZXIsXG5cdFx0XHRcdHNlbGVjdGVkS2V5OiBxdWlja0ZpbHRlclN0YXRlLnNlbGVjdGVkS2V5LnRvU3RyaW5nKClcblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmIChjb250cm9sU3RhdGUgJiYgT2JqZWN0LmtleXMoY29udHJvbFN0YXRlKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRhd2FpdCB0aGlzLmFwcGx5U3RhdGUoY29udHJvbFN0YXRlIGFzIG9iamVjdCwgX25hdlBhcmFtZXRlcnMsIHNob3VsZEFwcGx5RGlmZlN0YXRlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgYXBwbGljYXRpb24gb2YgYSB2YXJpYW50IElEIHBhc3NlZCB2aWEgVVJMIHBhcmFtZXRlcnMuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHZhcmlhbnQgaGFzIGJlZW4gYXBwbGllZC5cblx0ICovXG5cdGFzeW5jIGhhbmRsZVZhcmlhbnRJZFBhc3NlZFZpYVVSTFBhcmFtcyh0aGlzOiBUYWJsZUFQSSAmIFRhYmxlQVBJU3RhdGVIYW5kbGVyKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0Y29uc3QgdXJsUGFyYW1zID0gYXdhaXQgdGhpcy5nZXRTdGFydHVwUGFyYW1ldGVycygpO1xuXHRcdGNvbnN0IHRhYmxlVmFyaWFudElkID0gdXJsUGFyYW1zW1wic2FwLXVpLWZlLXRhYmxlLXZhcmlhbnQtaWRcIl0/LlswXTtcblx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKTtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKTtcblx0XHRjb25zdCB2bVR5cGUgPSB2aWV3RGF0YS52YXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCB2bSA9IHRoaXMuY29udGVudC5nZXRWYXJpYW50KCk7XG5cdFx0aWYgKHZtICYmIHRhYmxlVmFyaWFudElkICYmIHR5cGVvZiB0YWJsZVZhcmlhbnRJZCA9PT0gXCJzdHJpbmdcIiAmJiB2bVR5cGUgPT09IFwiQ29udHJvbFwiKSB7XG5cdFx0XHRjb25zdCB2YXJpYW50VG9BcHBseSA9IHZtLmdldFZhcmlhbnRzKCkuZmluZCgodmFyaWFudCkgPT4gdmFyaWFudC5nZXRLZXkoKSA9PT0gdGFibGVWYXJpYW50SWQpO1xuXHRcdFx0Y29uc3QgQ29udHJvbFZhcmlhbnRBcHBseUFQSSA9IChhd2FpdCBpbXBvcnQoXCJzYXAvdWkvZmwvYXBwbHkvYXBpL0NvbnRyb2xWYXJpYW50QXBwbHlBUElcIikpLmRlZmF1bHQ7XG5cdFx0XHRyZXR1cm4gQ29udHJvbFZhcmlhbnRBcHBseUFQSS5hY3RpdmF0ZVZhcmlhbnQoe1xuXHRcdFx0XHRlbGVtZW50OiB2bSxcblx0XHRcdFx0dmFyaWFudFJlZmVyZW5jZTogdmFyaWFudFRvQXBwbHk/LmdldEtleSgpXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMgZnJvbSB0aGUgYXBwbGljYXRpb24gY29tcG9uZW50IGRhdGEuXG5cdCAqIFRoZXNlIHBhcmFtZXRlcnMgY29udGFpbiBVUkwgcXVlcnkgcGFyYW1ldGVycyB0aGF0IHdlcmUgcGFzc2VkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIHdhcyBzdGFydGVkLlxuXHQgKiBAcmV0dXJucyBUaGUgc3RhcnR1cCBwYXJhbWV0ZXJzLlxuXHQgKi9cblx0YXN5bmMgZ2V0U3RhcnR1cFBhcmFtZXRlcnModGhpczogVGFibGVBUEkpOiBQcm9taXNlPFN0YXJ0dXBQYXJhbWV0ZXJzPiB7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKTtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdHJldHVybiBhcHBDb21wb25lbnQuZ2V0U3RhcnR1cFBhcmFtZXRlcnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBc3luY2hyb25vdXNseSBhcHBsaWVzIG5hdmlnYXRpb24gcGFyYW1ldGVycyB0byB0aGUgZmlsdGVyIGJhci5cblx0ICogQHBhcmFtIG5hdmlnYXRpb25QYXJhbWV0ZXIgVGhlIG5hdmlnYXRpb24gcGFyYW1ldGVycyB0byBiZSBhcHBsaWVkLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBhcHBsaWVkLlxuXHQgKi9cblx0YXN5bmMgYXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVycyh0aGlzOiBUYWJsZUFQSSAmIFRhYmxlQVBJU3RhdGVIYW5kbGVyLCBuYXZpZ2F0aW9uUGFyYW1ldGVyOiBOYXZpZ2F0aW9uUGFyYW1ldGVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIE9ubHkgaGFuZGxlIHZhcmlhbnQgSUQgZnJvbSBVUkwgcGFyYW1ldGVycyBpZiBhcHBseVZhcmlhbnRGcm9tVVJMUGFyYW1zIGlzIHRydWVcblx0XHRcdGlmIChuYXZpZ2F0aW9uUGFyYW1ldGVyLmFwcGx5VmFyaWFudEZyb21VUkxQYXJhbXMgPz8gZmFsc2UpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5oYW5kbGVWYXJpYW50SWRQYXNzZWRWaWFVUkxQYXJhbXMoKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFxuXHRcdFx0XHRgRXJyb3IgdHlpbmcgdG8gYXBwbHkgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIHRvICR7dGhpcy5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX19IGNvbnRyb2wgd2l0aCBJRDogJHt0aGlzLmdldElkKCl9YCxcblx0XHRcdFx0ZXJyb3IgYXMgRXJyb3Jcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBc3luY2hyb25vdXNseSBhcHBsaWVzIHRoZSBwcm92aWRlZCBjb250cm9sIHN0YXRlIHRvIHRoZSB2aWV3c3RhdGUuXG5cdCAqIEBwYXJhbSBjb250cm9sU3RhdGUgVGhlIHN0YXRlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBbX25hdlBhcmFtZXRlcnNdIE9wdGlvbmFsIG5hdmlnYXRpb24gcGFyYW1ldGVycy5cblx0ICogQHBhcmFtIFtzaG91bGRBcHBseURpZmZTdGF0ZV0gT3B0aW9uYWwgZmxhZyB0byBza2lwIG1lcmdpbmcgc3RhdGVzLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzdGF0ZSBoYXMgYmVlbiBhcHBsaWVkLlxuXHQgKi9cblx0YXN5bmMgYXBwbHlTdGF0ZShcblx0XHR0aGlzOiBUYWJsZUFQSSxcblx0XHRjb250cm9sU3RhdGU6IFRhYmxlU3RhdGUsXG5cdFx0X25hdlBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyLFxuXHRcdHNob3VsZEFwcGx5RGlmZlN0YXRlPzogYm9vbGVhblxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIWNvbnRyb2xTdGF0ZSkgcmV0dXJuO1xuXG5cdFx0Ly8gVGFibGUgcHJvcGVydGllcyBuZWVkIHRvIGJlIGF2YWlsYWJsZSBiZWZvcmUgY2FsbGluZyBkaWZmU3RhdGUvcmV0cmlldmVTdGF0ZS4gSG93ZXZlciwgYXBwbHlTdGF0ZVxuXHRcdC8vIGdldHMgY2FsbGVkIHRvbyBlYXJseSBpbiB0aGUgdGFibGUncyBsaWZlY3ljbGUsIHNvIHRoZSBkZWxlZ2F0ZSBhbmQgcHJvcGVydGllcyBhcmUgbm90IHlldCBhdmFpbGFibGUuXG5cdFx0YXdhaXQgdGhpcy5jb250ZW50LmluaXRpYWxpemVkKCk7XG5cblx0XHRjb25zdCBpbm5lclRhYmxlU3RhdGUgPSBjb250cm9sU3RhdGU/LmlubmVyVGFibGU7XG5cdFx0Y29uc3QgdmFyaWFudElkID0gY29udHJvbFN0YXRlPy52YXJpYW50TWFuYWdlbWVudD8udmFyaWFudElkO1xuXHRcdGNvbnN0IGN1cnJlbnRWYXJpYW50ID0gdGhpcy5jb250ZW50Py5nZXRWYXJpYW50KCk7XG5cdFx0Y29uc3QgcXVpY2tGaWx0ZXJLZXkgPSBjb250cm9sU3RhdGU/LnF1aWNrRmlsdGVyPy5zZWxlY3RlZEtleTtcblx0XHRjb25zdCBxdWlja0ZpbHRlciA9IHRoaXMuZ2V0UXVpY2tGaWx0ZXIoKTtcblxuXHRcdC8vIEhhbmRsZSBWYXJpYW50IE1hbmFnZW1lbnRcblx0XHRpZiAodmFyaWFudElkICE9PSB1bmRlZmluZWQgJiYgdmFyaWFudElkICE9PSBjdXJyZW50VmFyaWFudC5nZXRDdXJyZW50VmFyaWFudEtleSgpKSB7XG5cdFx0XHRjb25zdCBvdk0gPSB0aGlzLmNvbnRlbnQ/LmdldFZhcmlhbnQoKTtcblx0XHRcdGNvbnN0IGFWYXJpYW50cyA9IG92TT8uZ2V0VmFyaWFudHMoKTtcblx0XHRcdGNvbnN0IHNWYXJpYW50UmVmZXJlbmNlID0gYVZhcmlhbnRzPy5zb21lKChvVmFyaWFudCkgPT4gb1ZhcmlhbnQuZ2V0S2V5KCkgPT09IHZhcmlhbnRJZClcblx0XHRcdFx0PyB2YXJpYW50SWRcblx0XHRcdFx0OiBvdk0/LmdldFN0YW5kYXJkVmFyaWFudEtleTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IENvbnRyb2xWYXJpYW50QXBwbHlBUEkgPSAoYXdhaXQgaW1wb3J0KFwic2FwL3VpL2ZsL2FwcGx5L2FwaS9Db250cm9sVmFyaWFudEFwcGx5QVBJXCIpKS5kZWZhdWx0O1xuXHRcdFx0XHRhd2FpdCBDb250cm9sVmFyaWFudEFwcGx5QVBJLmFjdGl2YXRlVmFyaWFudCh7XG5cdFx0XHRcdFx0ZWxlbWVudDogb3ZNLFxuXHRcdFx0XHRcdHZhcmlhbnRSZWZlcmVuY2U6IHNWYXJpYW50UmVmZXJlbmNlIGFzIHN0cmluZ1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0YXdhaXQgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRhd2FpdCB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyB3ZSBuZWVkIHRvIHVwZGF0ZSBpbml0aWFsIHN0YXRlIGV2ZW4gaWYgYWJvdmUgY29uZGl0aW9uIG5vdCBzYXRpZXNmaWVkXG5cdFx0XHRhd2FpdCB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBJbm5lciBUYWJsZSBTdGF0ZVxuXG5cdFx0bGV0IGZpbmFsU3RhdGU7XG5cblx0XHRpZiAoaW5uZXJUYWJsZVN0YXRlKSB7XG5cdFx0XHRpZiAoc2hvdWxkQXBwbHlEaWZmU3RhdGUgJiYgaW5uZXJUYWJsZVN0YXRlLmluaXRpYWxTdGF0ZSkge1xuXHRcdFx0XHRpZiAoIWlubmVyVGFibGVTdGF0ZS5pbml0aWFsU3RhdGUuc3VwcGxlbWVudGFyeUNvbmZpZykge1xuXHRcdFx0XHRcdGlubmVyVGFibGVTdGF0ZS5pbml0aWFsU3RhdGUuc3VwcGxlbWVudGFyeUNvbmZpZyA9IHt9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZpbmFsU3RhdGUgPSBhd2FpdCBTdGF0ZVV0aWwuZGlmZlN0YXRlKFxuXHRcdFx0XHRcdHRoaXMuY29udGVudCxcblx0XHRcdFx0XHRpbm5lclRhYmxlU3RhdGUuaW5pdGlhbFN0YXRlIGFzIG9iamVjdCxcblx0XHRcdFx0XHRpbm5lclRhYmxlU3RhdGUuZnVsbFN0YXRlIGFzIG9iamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKGNvbnRyb2xTdGF0ZSAmJiAhY29udHJvbFN0YXRlPy5zdXBwbGVtZW50YXJ5Q29uZmlnKSB7XG5cdFx0XHRcdFx0Y29udHJvbFN0YXRlLnN1cHBsZW1lbnRhcnlDb25maWcgPSB7fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRmaW5hbFN0YXRlID0gaW5uZXJUYWJsZVN0YXRlLmZ1bGxTdGF0ZTtcblx0XHRcdH1cblx0XHRcdGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50LCBmaW5hbFN0YXRlKTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgUXVpY2sgRmlsdGVyIFN0YXRlXG5cdFx0aWYgKHF1aWNrRmlsdGVyS2V5ICYmIHF1aWNrRmlsdGVyS2V5ICE9PSBxdWlja0ZpbHRlcj8uZ2V0U2VsZWN0ZWRLZXkoKSkge1xuXHRcdFx0cXVpY2tGaWx0ZXI/LnNldFNlbGVjdGVkS2V5KHF1aWNrRmlsdGVyS2V5KTtcblx0XHRcdHRoaXMub25RdWlja0ZpbHRlclNlbGVjdGlvbkNoYW5nZSgpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5pbml0aWFsTG9hZCAmJiB0aGlzLmZpbHRlckJhcikge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5nZXRGaWx0ZXJCYXJDb250cm9sKHRoaXMuZmlsdGVyQmFyKTtcblx0XHRcdGlmIChmaWx0ZXJCYXIgJiYgZmlsdGVyQmFyLmlzQTxGaWx0ZXJCYXJBUEk+KFwic2FwLmZlLm1hY3Jvcy5maWx0ZXJCYXIuRmlsdGVyQmFyQVBJXCIpKSB7XG5cdFx0XHRcdGZpbHRlckJhclxuXHRcdFx0XHRcdC53YWl0Rm9ySW5pdGlhbFN0YXRlKClcblx0XHRcdFx0XHQudGhlbigoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbnRlbnQucmViaW5kKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgaW5pdGlhbCBzdGF0ZSBvZiBmaWx0ZXIgYmFyXCIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFZcUJBLG9CQUFvQiwwQkFBQUMscUJBQUE7SUFBQSxTQUFBRCxxQkFBQTtNQUFBLE9BQUFDLHFCQUFBLENBQUFDLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0lBQUFDLFFBQUEsR0FBQUosb0JBQUE7SUFBQUssY0FBQSxDQUFBTCxvQkFBQSxFQUFBQyxxQkFBQTtJQUFBLElBQUFLLE1BQUEsR0FBQU4sb0JBQUEsQ0FBQU8sU0FBQTtJQUN4QztBQUNEO0FBQ0E7QUFDQTtJQUhDRCxNQUFBLENBSU1FLGFBQWEsR0FBbkIsZUFBTUEsYUFBYUEsQ0FBQSxFQUE2QztNQUMvRCxNQUFNQyxVQUFzQixHQUFHLENBQUMsQ0FBQztNQUNqQ0EsVUFBVSxDQUFDQyxVQUFVLEdBQUcsSUFBSSxDQUFDQyxlQUFlLENBQUMsTUFBTUMsU0FBUyxDQUFDQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUNDLE9BQU8sQ0FBQyxDQUFXO01BQzNHLE1BQU1DLFdBQVcsR0FBRyxJQUFJLENBQUNDLGNBQWMsQ0FBQyxDQUFDO01BQ3pDLElBQUlELFdBQVcsRUFBRTtRQUNoQixNQUFNRSxnQkFBZ0IsR0FBR0YsV0FBVyxDQUFDRyxjQUFjLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUNULFVBQVUsQ0FBQ00sV0FBVyxFQUFFO1VBQzVCTixVQUFVLENBQUNNLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDNUI7UUFDQU4sVUFBVSxDQUFDTSxXQUFXLENBQUNJLFdBQVcsR0FBR0YsZ0JBQWdCO01BQ3REO01BQ0EsTUFBTUcsaUJBQWlCLEdBQUcsSUFBSSxDQUFDTixPQUFPLENBQUNPLFVBQVUsQ0FBQyxDQUFDLEVBQUVDLEtBQUssQ0FBQyxDQUFDO01BQzVELElBQUlGLGlCQUFpQixFQUFFO1FBQ3RCLE1BQU1HLHdCQUF3QixHQUFHLElBQUksQ0FBQ1QsT0FBTyxDQUFDTyxVQUFVLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUNaLFVBQVUsQ0FBQ2UsaUJBQWlCLEVBQUU7VUFDbENmLFVBQVUsQ0FBQ2UsaUJBQWlCLEdBQUc7WUFBRUMsU0FBUyxFQUFFRix3QkFBd0IsRUFBRUcsb0JBQW9CLENBQUM7VUFBRSxDQUFDO1FBQy9GLENBQUMsTUFBTTtVQUNOakIsVUFBVSxDQUFDZSxpQkFBaUIsQ0FBQ0MsU0FBUyxHQUFHRix3QkFBd0IsRUFBRUcsb0JBQW9CLENBQUMsQ0FBQztRQUMxRjtNQUNEO01BQ0EsT0FBT2pCLFVBQVU7SUFDbEI7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBSCxNQUFBLENBSU1xQixlQUFlLEdBQXJCLGVBQU1BLGVBQWVBLENBQUEsRUFBZ0M7TUFDcEQsSUFBSTtRQUNILE1BQU1DLG1CQUFtQixHQUFHLE1BQU1oQixTQUFTLENBQUNDLHFCQUFxQixDQUFDLElBQUksQ0FBQ0MsT0FBTyxDQUFDO1FBQy9FLElBQUksQ0FBQ2MsbUJBQW1CLEdBQUdBLG1CQUFtQjtNQUMvQyxDQUFDLENBQUMsT0FBT0MsQ0FBVSxFQUFFO1FBQ3BCQyxHQUFHLENBQUNDLEtBQUssQ0FBQ0YsQ0FBVyxDQUFDO01BQ3ZCO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FOQztJQUFBdkIsTUFBQSxDQU9NMEIsZ0JBQWdCLEdBQXRCLGVBQU1BLGdCQUFnQkEsQ0FFckJyQixlQUF5RCxFQUN6RHNCLGNBQW9DLEVBQ3BDQyxvQkFBOEIsRUFDZDtNQUNoQixNQUFNQyxLQUFLLEdBQUcsSUFBSSxDQUFDckIsT0FBTztNQUMxQixNQUFNc0IsRUFBRSxHQUFHRCxLQUFLLENBQUNkLFVBQVUsQ0FBQyxDQUFDO01BQzdCLE1BQU1OLFdBQVcsR0FBRyxJQUFJLENBQUNDLGNBQWMsQ0FBQyxDQUFDO01BRXpDLE1BQU1QLFVBQVUsR0FBR0UsZUFBZSxDQUFDd0IsS0FBSyxDQUEwRDtNQUNsRyxNQUFNRSxPQUFPLEdBQUdELEVBQUUsR0FBR3pCLGVBQWUsQ0FBQ3lCLEVBQUUsQ0FBQyxHQUFHLElBQUk7TUFDL0MsTUFBTW5CLGdCQUFnQixHQUFHRixXQUFXLEVBQUVELE9BQU8sR0FBR0gsZUFBZSxDQUFDSSxXQUFXLENBQUNELE9BQU8sQ0FBQyxHQUFHLElBQUk7TUFFM0YsTUFBTXdCLFlBQXdCLEdBQUcsQ0FBQyxDQUFDO01BRW5DLElBQUk3QixVQUFVLEVBQUU7UUFDZjZCLFlBQVksQ0FBQzVCLFVBQVUsR0FBRztVQUN6QixHQUFHNEIsWUFBWSxDQUFDNUIsVUFBVTtVQUMxQixHQUFHRCxVQUFVO1VBQ2I4QixTQUFTLEVBQUU7WUFDVixHQUFHRCxZQUFZLENBQUM1QixVQUFVLEVBQUU2QixTQUFTO1lBQ3JDLEdBQUc5QixVQUFVLENBQUM4QjtVQUNmLENBQUM7VUFDREMsWUFBWSxFQUFFO1lBQ2IsR0FBR0YsWUFBWSxDQUFDNUIsVUFBVSxFQUFFOEIsWUFBWTtZQUN4QyxHQUFHL0IsVUFBVSxDQUFDK0I7VUFDZjtRQUNELENBQUM7TUFDRjtNQUVBLElBQUlILE9BQU8sRUFBRVosU0FBUyxFQUFFO1FBQ3ZCYSxZQUFZLENBQUNkLGlCQUFpQixHQUFHO1VBQ2hDLEdBQUdjLFlBQVksQ0FBQ2QsaUJBQWlCO1VBQ2pDQyxTQUFTLEVBQUVZLE9BQU8sQ0FBQ1osU0FBUyxDQUFDZ0IsUUFBUSxDQUFDO1FBQ3ZDLENBQUM7TUFDRjtNQUVBLElBQUl4QixnQkFBZ0IsRUFBRUUsV0FBVyxFQUFFO1FBQ2xDbUIsWUFBWSxDQUFDdkIsV0FBVyxHQUFHO1VBQzFCLEdBQUd1QixZQUFZLENBQUN2QixXQUFXO1VBQzNCSSxXQUFXLEVBQUVGLGdCQUFnQixDQUFDRSxXQUFXLENBQUNzQixRQUFRLENBQUM7UUFDcEQsQ0FBQztNQUNGO01BQ0EsSUFBSUgsWUFBWSxJQUFJSSxNQUFNLENBQUNDLElBQUksQ0FBQ0wsWUFBWSxDQUFDLENBQUNNLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDekQsTUFBTSxJQUFJLENBQUNDLFVBQVUsQ0FBQ1AsWUFBWSxFQUFZTCxjQUFjLEVBQUVDLG9CQUFvQixDQUFDO01BQ3BGO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBNUIsTUFBQSxDQUlNd0MsaUNBQWlDLEdBQXZDLGVBQU1BLGlDQUFpQ0EsQ0FBQSxFQUEwRDtNQUNoRyxNQUFNQyxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUNDLG9CQUFvQixDQUFDLENBQUM7TUFDbkQsTUFBTUMsY0FBYyxHQUFHRixTQUFTLENBQUMsNEJBQTRCLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDbkUsTUFBTUcsSUFBSSxHQUFHQyxXQUFXLENBQUNDLGFBQWEsQ0FBQyxJQUFJLENBQUM7TUFDNUMsTUFBTUMsUUFBUSxHQUFHSCxJQUFJLENBQUNJLFdBQVcsQ0FBQyxDQUFDO01BQ25DLE1BQU1DLE1BQU0sR0FBR0YsUUFBUSxDQUFDN0IsaUJBQWlCO01BQ3pDLE1BQU1ZLEVBQUUsR0FBRyxJQUFJLENBQUN0QixPQUFPLENBQUNPLFVBQVUsQ0FBQyxDQUFDO01BQ3BDLElBQUllLEVBQUUsSUFBSWEsY0FBYyxJQUFJLE9BQU9BLGNBQWMsS0FBSyxRQUFRLElBQUlNLE1BQU0sS0FBSyxTQUFTLEVBQUU7UUFDdkYsTUFBTUMsY0FBYyxHQUFHcEIsRUFBRSxDQUFDcUIsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFFQyxPQUFPLElBQUtBLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsS0FBS1gsY0FBYyxDQUFDO1FBQzlGLE1BQU1ZLHNCQUFzQixHQUFHLENBQUMsTUFBTUMsbUJBQUEsQ0FBTyw0Q0FBNEMsQ0FBQyxFQUFFQyxPQUFPO1FBQ25HLE9BQU9GLHNCQUFzQixDQUFDRyxlQUFlLENBQUM7VUFDN0NDLE9BQU8sRUFBRTdCLEVBQUU7VUFDWDhCLGdCQUFnQixFQUFFVixjQUFjLEVBQUVJLE1BQU0sQ0FBQztRQUMxQyxDQUFDLENBQUM7TUFDSDtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBdEQsTUFBQSxDQUtNMEMsb0JBQW9CLEdBQTFCLGVBQU1BLG9CQUFvQkEsQ0FBQSxFQUE2QztNQUN0RSxNQUFNbUIsVUFBVSxHQUFHLElBQUksQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztNQUMzQyxNQUFNQyxZQUFZLEdBQUdGLFVBQVUsQ0FBQ0csZUFBZSxDQUFDLENBQUM7TUFDakQsT0FBT0QsWUFBWSxDQUFDckIsb0JBQW9CLENBQUMsQ0FBQztJQUMzQzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQTFDLE1BQUEsQ0FLTWlFLHlCQUF5QixHQUEvQixlQUFNQSx5QkFBeUJBLENBQXdDQyxtQkFBd0MsRUFBaUI7TUFDL0gsSUFBSTtRQUNIO1FBQ0EsSUFBSUEsbUJBQW1CLENBQUNDLHlCQUF5QixJQUFJLEtBQUssRUFBRTtVQUMzRCxNQUFNLElBQUksQ0FBQzNCLGlDQUFpQyxDQUFDLENBQUM7UUFDL0M7TUFDRCxDQUFDLENBQUMsT0FBT2YsS0FBYyxFQUFFO1FBQ3hCRCxHQUFHLENBQUNDLEtBQUssQ0FDUixpREFBaUQsSUFBSSxDQUFDMkMsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLENBQUMsc0JBQXNCLElBQUksQ0FBQ3JELEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFDakhTLEtBQ0QsQ0FBQztNQUNGO01BQ0EsT0FBTzZDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUM7SUFDekI7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FOQztJQUFBdkUsTUFBQSxDQU9NdUMsVUFBVSxHQUFoQixlQUFNQSxVQUFVQSxDQUVmUCxZQUF3QixFQUN4QkwsY0FBb0MsRUFDcENDLG9CQUE4QixFQUNkO01BQ2hCLElBQUksQ0FBQ0ksWUFBWSxFQUFFOztNQUVuQjtNQUNBO01BQ0EsTUFBTSxJQUFJLENBQUN4QixPQUFPLENBQUNnRSxXQUFXLENBQUMsQ0FBQztNQUVoQyxNQUFNQyxlQUFlLEdBQUd6QyxZQUFZLEVBQUU1QixVQUFVO01BQ2hELE1BQU1lLFNBQVMsR0FBR2EsWUFBWSxFQUFFZCxpQkFBaUIsRUFBRUMsU0FBUztNQUM1RCxNQUFNdUQsY0FBYyxHQUFHLElBQUksQ0FBQ2xFLE9BQU8sRUFBRU8sVUFBVSxDQUFDLENBQUM7TUFDakQsTUFBTTRELGNBQWMsR0FBRzNDLFlBQVksRUFBRXZCLFdBQVcsRUFBRUksV0FBVztNQUM3RCxNQUFNSixXQUFXLEdBQUcsSUFBSSxDQUFDQyxjQUFjLENBQUMsQ0FBQzs7TUFFekM7TUFDQSxJQUFJUyxTQUFTLEtBQUt5RCxTQUFTLElBQUl6RCxTQUFTLEtBQUt1RCxjQUFjLENBQUN0RCxvQkFBb0IsQ0FBQyxDQUFDLEVBQUU7UUFDbkYsTUFBTXlELEdBQUcsR0FBRyxJQUFJLENBQUNyRSxPQUFPLEVBQUVPLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0rRCxTQUFTLEdBQUdELEdBQUcsRUFBRTFCLFdBQVcsQ0FBQyxDQUFDO1FBQ3BDLE1BQU00QixpQkFBaUIsR0FBR0QsU0FBUyxFQUFFRSxJQUFJLENBQUVDLFFBQVEsSUFBS0EsUUFBUSxDQUFDM0IsTUFBTSxDQUFDLENBQUMsS0FBS25DLFNBQVMsQ0FBQyxHQUNyRkEsU0FBUyxHQUNUMEQsR0FBRyxFQUFFSyxxQkFBcUI7UUFDN0IsSUFBSTtVQUNILE1BQU0zQixzQkFBc0IsR0FBRyxDQUFDLE1BQU1DLG1CQUFBLENBQU8sNENBQTRDLENBQUMsRUFBRUMsT0FBTztVQUNuRyxNQUFNRixzQkFBc0IsQ0FBQ0csZUFBZSxDQUFDO1lBQzVDQyxPQUFPLEVBQUVrQixHQUFHO1lBQ1pqQixnQkFBZ0IsRUFBRW1CO1VBQ25CLENBQUMsQ0FBQztVQUNGLE1BQU0sSUFBSSxDQUFDMUQsZUFBZSxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLE9BQU9JLEtBQWMsRUFBRTtVQUN4QkQsR0FBRyxDQUFDQyxLQUFLLENBQUNBLEtBQWUsQ0FBQztVQUMxQixNQUFNLElBQUksQ0FBQ0osZUFBZSxDQUFDLENBQUM7UUFDN0I7TUFDRCxDQUFDLE1BQU07UUFDTjtRQUNBLE1BQU0sSUFBSSxDQUFDQSxlQUFlLENBQUMsQ0FBQztNQUM3Qjs7TUFFQTs7TUFFQSxJQUFJOEQsVUFBVTtNQUVkLElBQUlWLGVBQWUsRUFBRTtRQUNwQixJQUFJN0Msb0JBQW9CLElBQUk2QyxlQUFlLENBQUN2QyxZQUFZLEVBQUU7VUFDekQsSUFBSSxDQUFDdUMsZUFBZSxDQUFDdkMsWUFBWSxDQUFDa0QsbUJBQW1CLEVBQUU7WUFDdERYLGVBQWUsQ0FBQ3ZDLFlBQVksQ0FBQ2tELG1CQUFtQixHQUFHLENBQUMsQ0FBQztVQUN0RDtVQUNBRCxVQUFVLEdBQUcsTUFBTTdFLFNBQVMsQ0FBQytFLFNBQVMsQ0FDckMsSUFBSSxDQUFDN0UsT0FBTyxFQUNaaUUsZUFBZSxDQUFDdkMsWUFBWSxFQUM1QnVDLGVBQWUsQ0FBQ3hDLFNBQ2pCLENBQUM7UUFDRixDQUFDLE1BQU07VUFDTixJQUFJRCxZQUFZLElBQUksQ0FBQ0EsWUFBWSxFQUFFb0QsbUJBQW1CLEVBQUU7WUFDdkRwRCxZQUFZLENBQUNvRCxtQkFBbUIsR0FBRyxDQUFDLENBQUM7VUFDdEM7VUFDQUQsVUFBVSxHQUFHVixlQUFlLENBQUN4QyxTQUFTO1FBQ3ZDO1FBQ0EsTUFBTTNCLFNBQVMsQ0FBQ2dGLGtCQUFrQixDQUFDLElBQUksQ0FBQzlFLE9BQU8sRUFBRTJFLFVBQVUsQ0FBQztNQUM3RDs7TUFFQTtNQUNBLElBQUlSLGNBQWMsSUFBSUEsY0FBYyxLQUFLbEUsV0FBVyxFQUFFRyxjQUFjLENBQUMsQ0FBQyxFQUFFO1FBQ3ZFSCxXQUFXLEVBQUU4RSxjQUFjLENBQUNaLGNBQWMsQ0FBQztRQUMzQyxJQUFJLENBQUNhLDRCQUE0QixDQUFDLENBQUM7TUFDcEM7TUFDQSxJQUFJLElBQUksQ0FBQ0MsV0FBVyxJQUFJLElBQUksQ0FBQ0MsU0FBUyxFQUFFO1FBQ3ZDLE1BQU1BLFNBQVMsR0FBRyxJQUFJLENBQUNDLG1CQUFtQixDQUFDLElBQUksQ0FBQ0QsU0FBUyxDQUFDO1FBQzFELElBQUlBLFNBQVMsSUFBSUEsU0FBUyxDQUFDRSxHQUFHLENBQWUsc0NBQXNDLENBQUMsRUFBRTtVQUNyRkYsU0FBUyxDQUNQRyxtQkFBbUIsQ0FBQyxDQUFDLENBQ3JCQyxJQUFJLENBQUMsTUFBWTtZQUNqQixJQUFJLENBQUN0RixPQUFPLENBQUN1RixNQUFNLENBQUMsQ0FBQztZQUNyQjtVQUNELENBQUMsQ0FBQyxDQUNEQyxLQUFLLENBQUMsTUFBWTtZQUNsQnhFLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLHFEQUFxRCxDQUFDO1VBQ2pFLENBQUMsQ0FBQztRQUNKO01BQ0Q7SUFDRCxDQUFDO0lBQUEsT0FBQS9CLG9CQUFBO0VBQUEsRUEvT2dEdUcsMEJBQTBCO0VBQUFuRyxRQUFBLEdBQUFKLG9CQUFBO0VBQUEsT0FBQUksUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
|