@sapui5/sap.fe.macros 1.140.0 → 1.141.1
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/Chart.js +53 -2
- package/src/sap/fe/macros/Chart.tsx +55 -0
- package/src/sap/fe/macros/CollaborativeDraftHandler.js +230 -0
- package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +218 -0
- package/src/sap/fe/macros/CommonHelper.js +59 -15
- package/src/sap/fe/macros/CommonHelper.ts +65 -14
- package/src/sap/fe/macros/ConditionalSwitch.js +174 -0
- package/src/sap/fe/macros/ConditionalSwitch.tsx +141 -0
- package/src/sap/fe/macros/ConditionalSwitchProperty.js +78 -0
- package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +62 -0
- package/src/sap/fe/macros/Field.js +14 -10
- package/src/sap/fe/macros/Field.ts +15 -12
- package/src/sap/fe/macros/MacroAPI.js +9 -4
- package/src/sap/fe/macros/MacroAPI.ts +9 -4
- package/src/sap/fe/macros/MultiValueField.js +10 -5
- package/src/sap/fe/macros/MultiValueField.tsx +7 -1
- package/src/sap/fe/macros/Page.js +5 -7
- package/src/sap/fe/macros/Page.tsx +4 -6
- package/src/sap/fe/macros/Paginator.js +9 -4
- package/src/sap/fe/macros/Paginator.tsx +12 -3
- package/src/sap/fe/macros/RichTextEditor.js +3 -2
- package/src/sap/fe/macros/RichTextEditor.tsx +2 -1
- package/src/sap/fe/macros/Status.js +38 -13
- package/src/sap/fe/macros/Status.tsx +26 -6
- package/src/sap/fe/macros/ai/EasyFillDialog.js +11 -17
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +11 -16
- package/src/sap/fe/macros/ai/EasyFilterBar.js +195 -55
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +234 -57
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +76 -33
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +89 -40
- package/src/sap/fe/macros/chart/Chart.js +2 -2
- package/src/sap/fe/macros/chart/Chart.tsx +1 -1
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +4 -2
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +4 -1
- package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.js +9 -2
- package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.tsx +8 -0
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +2 -2
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +1 -1
- package/src/sap/fe/macros/controls/FilterBar.js +14 -5
- package/src/sap/fe/macros/controls/FilterBar.ts +3 -0
- package/src/sap/fe/macros/controls/RadioButtons.js +61 -38
- package/src/sap/fe/macros/controls/RadioButtons.tsx +39 -18
- package/src/sap/fe/macros/controls/Section.js +4 -3
- package/src/sap/fe/macros/controls/Section.ts +3 -2
- package/src/sap/fe/macros/controls/section/SubSection.js +63 -8
- package/src/sap/fe/macros/controls/section/SubSection.ts +67 -1
- package/src/sap/fe/macros/field/Field.js +2 -2
- package/src/sap/fe/macros/field/Field.tsx +1 -1
- package/src/sap/fe/macros/field/FieldFormatOptions.js +25 -2
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +13 -0
- package/src/sap/fe/macros/field/FieldHelper.js +2 -2
- package/src/sap/fe/macros/field/FieldHelper.ts +1 -4
- package/src/sap/fe/macros/field/FieldTemplating.js +3 -3
- package/src/sap/fe/macros/field/FieldTemplating.ts +4 -2
- package/src/sap/fe/macros/filter/FilterUtils.js +232 -2
- package/src/sap/fe/macros/filter/FilterUtils.ts +290 -4
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +4 -2
- package/src/sap/fe/macros/filterBar/FilterBar.js +2 -2
- package/src/sap/fe/macros/filterBar/FilterBar.tsx +1 -1
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +63 -27
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +49 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +7 -2
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +6 -1
- package/src/sap/fe/macros/form/Form.block.js +7 -8
- package/src/sap/fe/macros/form/Form.block.ts +4 -6
- package/src/sap/fe/macros/form/FormContainer.block.js +555 -4
- package/src/sap/fe/macros/form/FormContainer.block.ts +665 -6
- package/src/sap/fe/macros/form/FormContainer.fragment.xml +1 -0
- package/src/sap/fe/macros/form/FormDelegate.js +6 -9
- package/src/sap/fe/macros/form/FormDelegate.ts +5 -8
- package/src/sap/fe/macros/internal/DataPoint.js +3 -2
- package/src/sap/fe/macros/internal/DataPoint.tsx +10 -1
- package/src/sap/fe/macros/internal/FilterField.block.js +16 -8
- package/src/sap/fe/macros/internal/FilterField.block.ts +11 -7
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +7 -1
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +8 -0
- package/src/sap/fe/macros/internal/field/EditStyle.js +21 -4
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +18 -4
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +3 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +4 -1
- package/src/sap/fe/macros/internal/filterField/FilterFieldTemplate.fragment.xml +1 -0
- package/src/sap/fe/macros/internal/helpers/ActionHelper.js +36 -5
- package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +34 -4
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.js +2 -1
- package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.ts +1 -0
- package/src/sap/fe/macros/messagebundle.properties +20 -2
- package/src/sap/fe/macros/messagebundle_ar.properties +1 -1
- package/src/sap/fe/macros/messagebundle_bg.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ca.properties +1 -1
- package/src/sap/fe/macros/messagebundle_cnr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_cs.properties +1 -1
- package/src/sap/fe/macros/messagebundle_cy.properties +1 -1
- package/src/sap/fe/macros/messagebundle_da.properties +1 -1
- package/src/sap/fe/macros/messagebundle_de.properties +4 -4
- package/src/sap/fe/macros/messagebundle_el.properties +1 -1
- package/src/sap/fe/macros/messagebundle_en.properties +1 -1
- package/src/sap/fe/macros/messagebundle_en_GB.properties +1 -1
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_es.properties +2 -2
- package/src/sap/fe/macros/messagebundle_es_MX.properties +1 -1
- package/src/sap/fe/macros/messagebundle_et.properties +1 -1
- package/src/sap/fe/macros/messagebundle_fi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_fr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +1 -1
- package/src/sap/fe/macros/messagebundle_hi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_hr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_hu.properties +1 -1
- package/src/sap/fe/macros/messagebundle_id.properties +5 -5
- package/src/sap/fe/macros/messagebundle_it.properties +1 -1
- package/src/sap/fe/macros/messagebundle_iw.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ja.properties +5 -5
- package/src/sap/fe/macros/messagebundle_kk.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ko.properties +2 -2
- package/src/sap/fe/macros/messagebundle_lt.properties +2 -2
- package/src/sap/fe/macros/messagebundle_lv.properties +1 -1
- package/src/sap/fe/macros/messagebundle_mk.properties +2 -2
- package/src/sap/fe/macros/messagebundle_ms.properties +1 -1
- package/src/sap/fe/macros/messagebundle_nl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_no.properties +1 -1
- package/src/sap/fe/macros/messagebundle_pl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_pt.properties +1 -1
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ro.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ru.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sh.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sk.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sv.properties +1 -1
- package/src/sap/fe/macros/messagebundle_th.properties +1 -1
- package/src/sap/fe/macros/messagebundle_tr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_uk.properties +1 -1
- package/src/sap/fe/macros/messagebundle_vi.properties +2 -2
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +1 -1
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +1 -1
- package/src/sap/fe/macros/messages/MessageButton.js +1 -1
- package/src/sap/fe/macros/messages/MessageButton.ts +2 -2
- package/src/sap/fe/macros/messages/MessagePopover.js +3 -1
- package/src/sap/fe/macros/messages/MessagePopover.ts +2 -0
- package/src/sap/fe/macros/microchart/MicroChart.js +2 -2
- package/src/sap/fe/macros/microchart/MicroChart.tsx +1 -1
- package/src/sap/fe/macros/microchart/MicroChartHelper.js +2 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +1 -1
- package/src/sap/fe/macros/table/ActionsTemplating.js +4 -8
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +5 -8
- package/src/sap/fe/macros/table/BasicSearch.js +1 -1
- package/src/sap/fe/macros/table/BasicSearch.ts +2 -1
- package/src/sap/fe/macros/table/Column.js +14 -2
- package/src/sap/fe/macros/table/Column.ts +7 -0
- package/src/sap/fe/macros/table/ColumnExportSettings.js +83 -15
- package/src/sap/fe/macros/table/ColumnExportSettings.ts +44 -0
- package/src/sap/fe/macros/table/ColumnOverride.js +14 -2
- package/src/sap/fe/macros/table/ColumnOverride.ts +7 -0
- package/src/sap/fe/macros/table/MdcTableTemplate.js +5 -5
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +15 -9
- package/src/sap/fe/macros/table/QuickFilterSelector.js +12 -3
- package/src/sap/fe/macros/table/QuickFilterSelector.tsx +15 -2
- package/src/sap/fe/macros/table/Table.block.js +188 -147
- package/src/sap/fe/macros/table/Table.block.tsx +41 -11
- package/src/sap/fe/macros/table/Table.js +16 -10
- package/src/sap/fe/macros/table/Table.tsx +16 -10
- package/src/sap/fe/macros/table/TableAPI.js +224 -184
- package/src/sap/fe/macros/table/TableAPI.ts +63 -19
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -6
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +5 -4
- package/src/sap/fe/macros/table/TableHelper.js +2 -2
- package/src/sap/fe/macros/table/TableHelper.ts +1 -1
- package/src/sap/fe/macros/table/TreeTable.js +16 -10
- package/src/sap/fe/macros/table/TreeTable.tsx +16 -10
- package/src/sap/fe/macros/table/Utils.js +3 -2
- package/src/sap/fe/macros/table/Utils.ts +7 -2
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -33
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +75 -32
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -12
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +11 -10
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +34 -4
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +45 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +55 -12
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +71 -9
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +53 -2
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +55 -0
- package/src/sap/fe/macros/table/mixin/TableExport.js +22 -3
- package/src/sap/fe/macros/table/mixin/TableExport.ts +25 -4
- package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
- package/src/sap/fe/macros/table/mixin/TableSharing.ts +4 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -10
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +31 -13
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +5 -3
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +3 -1
|
@@ -21,6 +21,7 @@ import type { MassEditTableConfiguration } from "sap/fe/core/converters/controls
|
|
|
21
21
|
import type { AnnotationTableColumn } from "sap/fe/core/converters/controls/Common/table/Columns";
|
|
22
22
|
import type { InternalModelContext } from "sap/fe/core/helpers/ModelHelper";
|
|
23
23
|
import ModelHelper from "sap/fe/core/helpers/ModelHelper";
|
|
24
|
+
import ResourceModelHelper from "sap/fe/core/helpers/ResourceModelHelper";
|
|
24
25
|
import { isProperty } from "sap/fe/core/helpers/TypeGuards";
|
|
25
26
|
import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
26
27
|
import { enhanceDataModelPath, getContextRelativeTargetObjectPath, getRelativePaths } from "sap/fe/core/templating/DataModelPathHelper";
|
|
@@ -202,28 +203,28 @@ export default class MassEditDialogHelper {
|
|
|
202
203
|
* @returns A promise that resolves the contexts to be finally managed.
|
|
203
204
|
*/
|
|
204
205
|
private async confirmSelection(contexts: ODataV4Context[], selectedContexts: number): Promise<ODataV4Context[]> {
|
|
205
|
-
const
|
|
206
|
+
const resourceModel = ResourceModelHelper.getResourceModel(this.table);
|
|
206
207
|
const coreResourceBundle = Library.getResourceBundleFor("sap.fe.core") as ResourceBundle;
|
|
207
208
|
|
|
208
209
|
const updatableContexts = contexts.length;
|
|
209
210
|
return new Promise((resolve) => {
|
|
210
211
|
try {
|
|
211
212
|
const tableAPI = this.table.getParent() as TableAPI;
|
|
212
|
-
const editButton =
|
|
213
|
+
const editButton = resourceModel.getText("C_MASS_EDIT_CONFIRM_BUTTON_TEXT"),
|
|
213
214
|
cancelButton = coreResourceBundle.getText("C_COMMON_OBJECT_PAGE_CANCEL"),
|
|
214
215
|
metaModel = (this.table.getModel() as ODataModel).getMetaModel(),
|
|
215
216
|
typeName =
|
|
216
|
-
this.getResourceText(this.headerInfo?.TypeName) ??
|
|
217
|
+
this.getResourceText(this.headerInfo?.TypeName) ?? resourceModel.getText("C_MASS_EDIT_DIALOG_DEFAULT_TYPENAME"),
|
|
217
218
|
typeNamePlural =
|
|
218
219
|
this.getResourceText(this.headerInfo?.TypeNamePlural) ??
|
|
219
|
-
|
|
220
|
+
resourceModel.getText("C_MASS_EDIT_DIALOG_DEFAULT_TYPENAME_PLURAL"),
|
|
220
221
|
messageDetail =
|
|
221
222
|
ModelHelper.isDraftSupported(metaModel, this.table.data("targetCollectionPath")) && tableAPI.readOnly
|
|
222
223
|
? this.getMessageDetailForNonEditable(typeName, typeNamePlural)
|
|
223
224
|
: "";
|
|
224
225
|
|
|
225
226
|
MessageBox.warning(
|
|
226
|
-
|
|
227
|
+
resourceModel.getText("C_MASS_EDIT_CONFIRM_MESSAGE", [
|
|
227
228
|
selectedContexts - updatableContexts,
|
|
228
229
|
selectedContexts,
|
|
229
230
|
updatableContexts,
|
|
@@ -404,7 +405,7 @@ export default class MassEditDialogHelper {
|
|
|
404
405
|
} else if (expBinding === "false") {
|
|
405
406
|
return true;
|
|
406
407
|
}
|
|
407
|
-
const anyObject =
|
|
408
|
+
const anyObject = <Any anyBoolean={expBinding} />;
|
|
408
409
|
anyObject.setModel(this.analyzedContexts[0].getModel());
|
|
409
410
|
const isHidden = !this.analyzedContexts.find((context) => {
|
|
410
411
|
anyObject.setBindingContext(context);
|
|
@@ -612,7 +613,7 @@ export default class MassEditDialogHelper {
|
|
|
612
613
|
const bindingType = binding.type ?? "any";
|
|
613
614
|
parameters[bindingType] = binding.expression;
|
|
614
615
|
for (const context of analyzedContexts) {
|
|
615
|
-
const control =
|
|
616
|
+
const control = <Any {...parameters} />;
|
|
616
617
|
control.setModel(model);
|
|
617
618
|
control.setBindingContext(context);
|
|
618
619
|
controls.push(control);
|
|
@@ -646,7 +647,7 @@ export default class MassEditDialogHelper {
|
|
|
646
647
|
return null;
|
|
647
648
|
} else {
|
|
648
649
|
const context = this.contexts[0];
|
|
649
|
-
const anyObject =
|
|
650
|
+
const anyObject = <Any any={compileExpression(formatWithTypeInformation(property, pathInModel(propertyPath)))} />;
|
|
650
651
|
anyObject.setModel(context.getModel());
|
|
651
652
|
anyObject.setBindingContext(context);
|
|
652
653
|
const value = anyObject.getBindingInfo("any").binding.getType().parseValue("", "string");
|
|
@@ -683,7 +684,7 @@ export default class MassEditDialogHelper {
|
|
|
683
684
|
if (fieldData.inputType === "CheckBox") {
|
|
684
685
|
return [];
|
|
685
686
|
}
|
|
686
|
-
const anyObject =
|
|
687
|
+
const anyObject = (<Any anyText={fieldData.textBinding.expression} />) as typeof Any;
|
|
687
688
|
anyObject.setModel(this.contexts[0].getModel());
|
|
688
689
|
for (const selectedContext of this.analyzedContexts) {
|
|
689
690
|
anyObject.setBindingContext(selectedContext);
|
|
@@ -755,7 +756,7 @@ export default class MassEditDialogHelper {
|
|
|
755
756
|
} else if (Object.keys(FieldEditMode).includes(expBinding as FieldEditMode)) {
|
|
756
757
|
return false;
|
|
757
758
|
} else if (expBinding) {
|
|
758
|
-
const anyControl =
|
|
759
|
+
const anyControl = <Any any={expBinding} />;
|
|
759
760
|
const model = this.analyzedContexts[0].getModel();
|
|
760
761
|
anyControl.setModel(model);
|
|
761
762
|
const visible = this.analyzedContexts.some((context) => {
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/DeleteHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/m/MenuItem", "sap/ui/fl/util/ManagedObjectModel", "sap/ui/performance/trace/FESRHelper", "../TableRuntime"], function (ActionRuntime, CommonUtils, deleteHelper, ModelHelper, StableIdHelper, MenuItem, ManagedObjectModel, FESRHelper, TableRuntime) {
|
|
5
|
+
sap.ui.define(["sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/converters/ManifestSettings", "sap/fe/core/helpers/DeleteHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/m/MenuItem", "sap/ui/fl/util/ManagedObjectModel", "sap/ui/performance/trace/FESRHelper", "../TableRuntime"], function (ActionRuntime, CommonUtils, ManifestSettings, deleteHelper, ModelHelper, StableIdHelper, MenuItem, ManagedObjectModel, FESRHelper, TableRuntime) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
9
|
var generate = StableIdHelper.generate;
|
|
10
|
+
var CreationMode = ManifestSettings.CreationMode;
|
|
10
11
|
let ContextMenuHandler = /*#__PURE__*/function () {
|
|
11
12
|
function ContextMenuHandler() {
|
|
12
13
|
this.contextMenuActive = false;
|
|
@@ -54,6 +55,25 @@ sap.ui.define(["sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/c
|
|
|
54
55
|
}
|
|
55
56
|
}
|
|
56
57
|
|
|
58
|
+
/**
|
|
59
|
+
* Hide all context menu actions except delete.
|
|
60
|
+
* @param table The MDCTable
|
|
61
|
+
*/;
|
|
62
|
+
_proto.hideAllContextMenuActionsExceptDelete = function hideAllContextMenuActionsExceptDelete(table) {
|
|
63
|
+
const contextMenu = table.getContextMenu();
|
|
64
|
+
const menuItems = contextMenu.getItems();
|
|
65
|
+
const deleteAction = table.getActions().find(action => action.getId().endsWith("StandardAction::Delete::ActionToolbarAction"));
|
|
66
|
+
const deleteVisible = deleteAction?.getAction().getVisible() ?? true;
|
|
67
|
+
menuItems.forEach(menuItem => {
|
|
68
|
+
// Check if the menu item is the delete action
|
|
69
|
+
if (menuItem.getId().includes("StandardAction::Delete::ContextMenu")) {
|
|
70
|
+
menuItem.setVisible(deleteVisible);
|
|
71
|
+
} else {
|
|
72
|
+
menuItem.setVisible(false);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
57
77
|
/**
|
|
58
78
|
* Check if the action item has been created by a Combine RTA changes in the table toolbar.
|
|
59
79
|
* @param actionItem The action to check
|
|
@@ -275,7 +295,7 @@ sap.ui.define(["sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/c
|
|
|
275
295
|
}
|
|
276
296
|
|
|
277
297
|
/**
|
|
278
|
-
* Handler
|
|
298
|
+
* Handler for the beforeOpenContextMenu event of the MDC Table.
|
|
279
299
|
* @param oEvent
|
|
280
300
|
*/;
|
|
281
301
|
_proto._onContextMenuPress = function _onContextMenuPress(oEvent) {
|
|
@@ -298,15 +318,26 @@ sap.ui.define(["sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/c
|
|
|
298
318
|
const activeSelectedContexts = contextMenuSelection.filter(function (oContext) {
|
|
299
319
|
return !oContext.isInactive();
|
|
300
320
|
});
|
|
321
|
+
const onlyInActiveContextsSelected = contextMenuSelection.length > 0 && activeSelectedContexts.length === 0;
|
|
322
|
+
const isInlineCreationMode = table.getParent()?.getCreationMode().getName() === CreationMode.InlineCreationRows;
|
|
323
|
+
const tableDefinition = this.getTableDefinition();
|
|
324
|
+
const navigableContexts = contextMenuSelection.filter(function (oContext) {
|
|
325
|
+
return !oContext.isInactive() && oContext.getModel()?.getLocalAnnotationModel().getProperty("@$ui5.fe.virtual.routeNavigable-" + tableDefinition.annotation.row?.navigationInfo?.routePath, oContext) !== false;
|
|
326
|
+
});
|
|
301
327
|
internalModelContext?.setProperty("contextmenu/selectedContextsIncludingInactive", contextMenuSelection);
|
|
302
328
|
internalModelContext?.setProperty("contextmenu/selectedContexts", activeSelectedContexts);
|
|
329
|
+
internalModelContext?.setProperty("contextmenu/navigableContexts", navigableContexts);
|
|
303
330
|
//reset number of selected contexts to ensure callback for custom enable handler
|
|
304
331
|
internalModelContext?.setProperty("contextmenu/numberOfSelectedContexts", -1);
|
|
332
|
+
internalModelContext?.setProperty("contextmenu/numberOfNavigableContexts", navigableContexts.length);
|
|
305
333
|
internalModelContext?.setProperty("contextmenu/numberOfSelectedContexts", activeSelectedContexts.length);
|
|
306
334
|
internalModelContext?.setProperty("contextmenu/numberOfSelectedContextsForDelete", contextMenuSelection.length);
|
|
307
335
|
if (activeSelectedContexts.length > 0) {
|
|
308
336
|
/* Align context menu with RTA changes in table toolbar */
|
|
309
337
|
this.alignContextMenuWithTableToolbarChanges(table);
|
|
338
|
+
} else if (onlyInActiveContextsSelected && isInlineCreationMode) {
|
|
339
|
+
// Only Delete is visible
|
|
340
|
+
this.hideAllContextMenuActionsExceptDelete(table);
|
|
310
341
|
}
|
|
311
342
|
|
|
312
343
|
// Set the visibility of the MenuItem for Collaboration Manager
|
|
@@ -348,7 +379,6 @@ sap.ui.define(["sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/c
|
|
|
348
379
|
}
|
|
349
380
|
}
|
|
350
381
|
internalModelContext?.setProperty("contextmenu/updatableContexts", updatableContexts);
|
|
351
|
-
const tableDefinition = this.getTableDefinition();
|
|
352
382
|
if (tableDefinition.control.createEnablement && contextMenuSelection.length === 1) {
|
|
353
383
|
TableRuntime._updateCreateEnablement(internalModelContext, tableDefinition.control.createEnablement, table, contextMenuSelection[0], tableDefinition.control.nodeType, true);
|
|
354
384
|
}
|
|
@@ -372,4 +402,4 @@ sap.ui.define(["sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/c
|
|
|
372
402
|
_exports = ContextMenuHandler;
|
|
373
403
|
return _exports;
|
|
374
404
|
}, false);
|
|
375
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb250ZXh0TWVudUhhbmRsZXIiLCJjb250ZXh0TWVudUFjdGl2ZSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJhbGlnbkNvbnRleHRNZW51V2l0aFRhYmxlVG9vbGJhckNoYW5nZXMiLCJ0YWJsZSIsImNvbnRleHRNZW51IiwiZ2V0Q29udGV4dE1lbnUiLCJzb3J0SGVscGVyRm9yTWVudUl0ZW1zIiwidGFibGVBY3Rpb25zIiwiZ2V0QWN0aW9ucyIsImZvckVhY2giLCJ0YWJsZUFjdGlvbiIsInRhYmxlQWN0aW9uSXRlbSIsImdldEFnZ3JlZ2F0aW9uIiwiX2lzQWN0aW9uU3BsaXQiLCJfc3BsaXRBY3Rpb25zSW5Db250ZXh0TWVudSIsIl9pc0FjdGlvbkNvbWJpbmVkIiwiX2NvbWJpbmVBY3Rpb25JbkNvbnRleHRNZW51IiwiY29udGV4dE1lbnVJdGVtIiwiX2dldENvcnJlc3BvbmRpbmdDb250ZXh0TWVudUFjdGlvbiIsIl9hbGlnblRleHRBbmRWaXNpYmxpdHlJbkNvbnRleHRNZW51IiwicHVzaCIsImxlbmd0aCIsIm1lbnVJdGVtIiwic29ydEluZGV4IiwiaW5kZXhPZkNvbnRleHRNZW51IiwiaW5kZXhPZkl0ZW0iLCJyZW1vdmVJdGVtIiwiaW5zZXJ0SXRlbSIsImFjdGlvbkl0ZW0iLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJkZXBlbmRlbnRzIiwiZ2V0RGVwZW5kZW50cyIsImZsZXhNYW5hZ2VkT2JqZWN0TW9kZWxzIiwiZmlsdGVyIiwiZGVwZW5kZW50IiwiTWFuYWdlZE9iamVjdE1vZGVsIiwic29tZSIsIm1vZGVsIiwiaW5jbHVkZXMiLCJjb250ZXh0TWVudUl0ZW1zIiwiZ2V0SXRlbXMiLCJtZW51QnV0dG9uIiwiX2ZpbmRPckNyZWF0ZU1lbnVCdXR0b25JbkNvbnRleHRNZW51IiwiYWN0aW9uSXRlbXMiLCJnZXRNZW51IiwiYWN0aW9uIiwidG9vbEJhckFjdGlvbiIsImFjdGlvbklkSW5Db250ZXh0TWVudSIsImRhdGEiLCJhY3Rpb25JZEluVG9vbGJhciIsInJlcGxhY2UiLCJzZXRUZXh0IiwiZ2V0VGV4dCIsImFkZEl0ZW0iLCJnZXRJZCIsImFjdGlvbkluU3ViTWVudSIsIl9maW5kQWN0aW9uSW5TdWJNZW51IiwiZGVzdHJveSIsInN1Yk1lbnUiLCJzcGxpY2UiLCJpbmRleE9mIiwidW5kZWZpbmVkIiwibmV3TWVudUJ1dHRvbiIsIk1lbnVJdGVtIiwiaWQiLCJnZW5lcmF0ZSIsInRleHQiLCJtZW51SXRlbXMiLCJpIiwiaXRlbSIsInN1Ykl0ZW1zIiwic3ViSXRlbSIsImluZGV4IiwidGFibGVBY3Rpb25WaXNpYmlsaXR5IiwiZ2V0VmlzaWJsZSIsInNldFZpc2libGUiLCJzZXRDb250ZXh0TWVudUFjdGl2ZSIsImFjdGl2ZSIsImlzQ29udGV4dE1lbnVBY3RpdmUiLCJzZXRDb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtVmlzaWJpbGl0eSIsImNvbnRleHRzIiwiY29sbGFib3JhdGlvbk1hbmFnZXJNZW51SXRlbSIsImZpbmQiLCJhcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UiLCJnZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIiwiY29sbGFib3JhdGlvbk9wdGlvbiIsImNvbGxhYm9yYXRpb25TZXJ2aWNlIiwiY21IZWxwZXJTZXJ2aWNlIiwiZ2V0T3B0aW9ucyIsInRhYmxlRGVmaW5pdGlvbiIsImdldFBhcmVudCIsImdldFRhYmxlRGVmaW5pdGlvbiIsIm5hdmlnYXRpb25UeXBlIiwiYW5ub3RhdGlvbiIsInJvdyIsIm5hdmlnYXRpb25JbmZvIiwidHlwZSIsInZpZXciLCJnZXRUYXJnZXRWaWV3IiwiY29sbGFib3JhdGl2ZURyYWZ0IiwiZ2V0Q29udHJvbGxlciIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaXNEcmFmdCIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFN1cHBvcnRlZCIsImdldFBhdGgiLCJ2aXNpYmxlIiwiaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCIsImNvbnRleHQiLCJnZXRPYmplY3QiLCJJc0FjdGl2ZUVudGl0eSIsIkhhc0FjdGl2ZUVudGl0eSIsIkZFU1JIZWxwZXIiLCJzZXRTZW1hbnRpY1N0ZXBuYW1lIiwiX29uQ29udGV4dE1lbnVQcmVzcyIsIm9FdmVudCIsImdldFNvdXJjZSIsInRhYmxlQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiY29udGV4dE1lbnVDb250ZXh0IiwiZ2V0UGFyYW1ldGVyIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImNvbnRleHRNZW51U2VsZWN0aW9uIiwiZ2V0UmVsZXZhbnRTZWxlY3Rpb24iLCJvbmVDb250ZXh0SXNBY3RpdmUiLCJpc0luYWN0aXZlIiwic2V0UHJvcGVydHkiLCJhY3RpdmVTZWxlY3RlZENvbnRleHRzIiwib0NvbnRleHQiLCJ2aXNpYmxlTWVudUl0ZW1zIiwicHJldmVudERlZmF1bHQiLCJpc0V4cGFuZGFibGUiLCJzaW5nbGVDb250ZXh0IiwiaXNFeHBhbmRlZCIsImlzQ29sbGFwc2FibGUiLCJkZWxldGVIZWxwZXIiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsIm5hdmlnYXRpb25BdmFpbGFibGVNYXAiLCJUYWJsZVJ1bnRpbWUiLCJzZXRJbnRlbnRCYXNlZE5hdmlnYXRpb25FbmFibGVtZW50IiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwiZHJhZnQiLCJyZWFkT25seURyYWZ0RW5hYmxlZCIsInVwZGF0YWJsZUNvbnRleHRzIiwic2VsZWN0ZWRDb250ZXh0IiwiaXNVcGRhdGFibGVDb250ZXh0IiwiY29udHJvbCIsImNyZWF0ZUVuYWJsZW1lbnQiLCJfdXBkYXRlQ3JlYXRlRW5hYmxlbWVudCIsIm5vZGVUeXBlIiwidXBkYXRlQ3V0Q29weVBhc3RlRW5hYmxlbWVudCIsInVwZGF0ZU1vdmVVcERvd25FbmFibGVtZW50IiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJKU09OIiwicGFyc2UiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbnRleHRNZW51SGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIElJbnRlcmZhY2VXaXRoTWl4aW4gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQWN0aW9uUnVudGltZSBmcm9tIFwic2FwL2ZlL2NvcmUvQWN0aW9uUnVudGltZVwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IGRlbGV0ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9EZWxldGVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IHR5cGUgTWVudUJ1dHRvbiBmcm9tIFwic2FwL20vTWVudUJ1dHRvblwiO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3RNb2RlbCBmcm9tIFwic2FwL3VpL2ZsL3V0aWwvTWFuYWdlZE9iamVjdE1vZGVsXCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZSRCZWZvcmVPcGVuQ29udGV4dE1lbnVFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBGRVNSSGVscGVyIGZyb20gXCJzYXAvdWkvcGVyZm9ybWFuY2UvdHJhY2UvRkVTUkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJVGFibGVCbG9jayB9IGZyb20gXCIuLi9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwiLi4vVGFibGVSdW50aW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRleHRNZW51SGFuZGxlciBpbXBsZW1lbnRzIElJbnRlcmZhY2VXaXRoTWl4aW4ge1xuXHRwcm90ZWN0ZWQgY29udGV4dE1lbnVBY3RpdmUgPSBmYWxzZTtcblxuXHRzZXR1cE1peGluKF9iYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0Ly8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIGltcGxlbWVudCBpbnRlcmZhY2UgSUludGVyZmFjZVdpdGhNaXhpblxuXHR9XG5cblx0LyoqXG5cdCAqIEFsaWduIGNvbnRleHQgbWVudSB3aXRoIHRoZSB0YWJsZSBhY3Rpb25zIGJ5IFJUQSBjaGFuZ2VzIGluIHRhYmxlIHRvb2xiYXIuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGUgd2l0aCBib3VuZCB0YWJsZSBhY3Rpb25zXG5cdCAqL1xuXHRhbGlnbkNvbnRleHRNZW51V2l0aFRhYmxlVG9vbGJhckNoYW5nZXModGFibGU6IE1EQ1RhYmxlKTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dE1lbnUgPSB0YWJsZS5nZXRDb250ZXh0TWVudSgpIGFzIE1lbnU7XG5cdFx0Y29uc3Qgc29ydEhlbHBlckZvck1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuXHRcdGNvbnN0IHRhYmxlQWN0aW9ucyA9IHRhYmxlLmdldEFjdGlvbnMoKTtcblx0XHR0YWJsZUFjdGlvbnM/LmZvckVhY2goKHRhYmxlQWN0aW9uKSA9PiB7XG5cdFx0XHRjb25zdCB0YWJsZUFjdGlvbkl0ZW0gPSB0YWJsZUFjdGlvbi5nZXRBZ2dyZWdhdGlvbihcImFjdGlvblwiKSBhcyBCdXR0b247XG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgYWN0aW9uIGl0ZW0gaGFzIGJlZW4gc3BsaXQgYnkgUlRBXG5cdFx0XHRpZiAodGhpcy5faXNBY3Rpb25TcGxpdCh0YWJsZUFjdGlvbkl0ZW0pKSB7XG5cdFx0XHRcdC8vIFJlbW92ZSBvcmlnaW5hbCBtZW51IGl0ZW0gYW5kIGFkZCBzdWIgaXRlbXMgYXMgbmV3IG1lbnUgaXRlbXNcblx0XHRcdFx0dGhpcy5fc3BsaXRBY3Rpb25zSW5Db250ZXh0TWVudSh0YWJsZUFjdGlvbkl0ZW0sIGNvbnRleHRNZW51KTtcblx0XHRcdH1cblx0XHRcdC8vIENoZWNrIGlmIHRoZSBhY3Rpb24gaXRlbSBoYXMgYmVlbiBjcmVhdGVkIGJ5IGNvbWJpbmluZyB0aGUgdHdvIGFjdGlvbnNcblx0XHRcdGlmICh0aGlzLl9pc0FjdGlvbkNvbWJpbmVkKHRhYmxlQWN0aW9uSXRlbSkpIHtcblx0XHRcdFx0dGhpcy5fY29tYmluZUFjdGlvbkluQ29udGV4dE1lbnUodGFibGVBY3Rpb25JdGVtIGFzIHVua25vd24gYXMgTWVudUJ1dHRvbiwgY29udGV4dE1lbnUsIHRhYmxlKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvbnRleHRNZW51SXRlbSA9IHRoaXMuX2dldENvcnJlc3BvbmRpbmdDb250ZXh0TWVudUFjdGlvbih0YWJsZUFjdGlvbkl0ZW0sIGNvbnRleHRNZW51KTtcblx0XHRcdGlmIChjb250ZXh0TWVudUl0ZW0pIHtcblx0XHRcdFx0dGhpcy5fYWxpZ25UZXh0QW5kVmlzaWJsaXR5SW5Db250ZXh0TWVudSh0YWJsZUFjdGlvbkl0ZW0sIGNvbnRleHRNZW51SXRlbSwgdGFibGVBY3Rpb24gYXMgQWN0aW9uVG9vbGJhckFjdGlvbik7XG5cdFx0XHRcdHNvcnRIZWxwZXJGb3JNZW51SXRlbXMucHVzaChjb250ZXh0TWVudUl0ZW0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vIEFsaWduIHRoZSBvcmRlciBvZiBjb250ZXh0LW1lbnVJdGVtcyB3aXRoIGJvdW5kIHRhYmxlIGFjdGlvbnNcblx0XHRpZiAoc29ydEhlbHBlckZvck1lbnVJdGVtcy5sZW5ndGgpIHtcblx0XHRcdHNvcnRIZWxwZXJGb3JNZW51SXRlbXMuZm9yRWFjaCgobWVudUl0ZW0sIHNvcnRJbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBpbmRleE9mQ29udGV4dE1lbnUgPSBjb250ZXh0TWVudS5pbmRleE9mSXRlbShtZW51SXRlbSk7XG5cdFx0XHRcdGlmIChpbmRleE9mQ29udGV4dE1lbnUgIT09IHNvcnRJbmRleCkge1xuXHRcdFx0XHRcdGNvbnRleHRNZW51LnJlbW92ZUl0ZW0obWVudUl0ZW0pO1xuXHRcdFx0XHRcdGNvbnRleHRNZW51Lmluc2VydEl0ZW0obWVudUl0ZW0sIHNvcnRJbmRleCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiB0aGUgYWN0aW9uIGl0ZW0gaGFzIGJlZW4gY3JlYXRlZCBieSBhIENvbWJpbmUgUlRBIGNoYW5nZXMgaW4gdGhlIHRhYmxlIHRvb2xiYXIuXG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBhY3Rpb24gdG8gY2hlY2tcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgYWN0aW9uIGl0ZW0gaGFzIGJlZW4gY3JlYXRlZCBieSBhIENvbWJpbmUgUlRBIGNoYW5nZXMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcblx0ICovXG5cdF9pc0FjdGlvbkNvbWJpbmVkKGFjdGlvbkl0ZW06IEJ1dHRvbik6IGJvb2xlYW4ge1xuXHRcdGlmIChhY3Rpb25JdGVtLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID09PSBcInNhcC5tLk1lbnVCdXR0b25cIikge1xuXHRcdFx0Ly8gV2UgZG9uJ3QgaGF2ZSBjdXN0b20gZGF0YSBhdHRyaWJ1dGUgb24gdGhlIE1lbnVCdXR0b24gY3JlYXRlZCBieSBSVEEgY29tYmluZSBjaGFuZ2Vcblx0XHRcdGNvbnN0IGRlcGVuZGVudHMgPSBhY3Rpb25JdGVtLmdldERlcGVuZGVudHMoKTtcblx0XHRcdC8vIGZpbmQgYWxsIHRoZSBkZXBlbmRlbnRzIHdoaWNoIGFyZSBhIEZsZXggTWFuYWdlZE9iamVjdE1vZGVsXG5cdFx0XHRjb25zdCBmbGV4TWFuYWdlZE9iamVjdE1vZGVscyA9IGRlcGVuZGVudHMuZmlsdGVyKChkZXBlbmRlbnQpID0+IGRlcGVuZGVudCBpbnN0YW5jZW9mIE1hbmFnZWRPYmplY3RNb2RlbCk7XG5cdFx0XHQvLyBjaGVjayBpZiB0aGUgbmFtZSBvZiBvbmUgb2YgdGhlbSBpbmNsdWRlcyBcIiRzYXAubS5mbGV4aWJpbGl0eS5NZW51QnV0dG9uTW9kZWxcIlxuXHRcdFx0cmV0dXJuIGZsZXhNYW5hZ2VkT2JqZWN0TW9kZWxzLnNvbWUoKG1vZGVsKSA9PlxuXHRcdFx0XHQobW9kZWwgYXMgdW5rbm93biBhcyBNYW5hZ2VkT2JqZWN0TW9kZWwpLmdldE5hbWUoKS5pbmNsdWRlcyhcIiRzYXAubS5mbGV4aWJpbGl0eS5NZW51QnV0dG9uTW9kZWxcIilcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb21iaW5lIHRoZSBhY3Rpb25zIGluIHRoZSBjb250ZXh0IG1lbnUgdG8gYWxpZ24gd2l0aCB0aGUgdGFibGUgYWN0aW9uIHRvb2xiYXIuXG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBhY3Rpb24gaXRlbSB0byBzcGxpdFxuXHQgKiBAcGFyYW0gY29udGV4dE1lbnUgVGhlIGNvbnRleHQgbWVudVxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIE1EQ1RhYmxlXG5cdCAqL1xuXHRfY29tYmluZUFjdGlvbkluQ29udGV4dE1lbnUoYWN0aW9uSXRlbTogTWVudUJ1dHRvbiwgY29udGV4dE1lbnU6IE1lbnUsIHRhYmxlOiBNRENUYWJsZSk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRleHRNZW51SXRlbXMgPSBjb250ZXh0TWVudS5nZXRJdGVtcygpO1xuXHRcdC8vIENyZWF0ZSBhIG5ldyBtZW51IGJ1dHRvbiBpbiB0aGUgY29udGV4dCBtZW51IGlmIGl0IGRvZXMgbm90IGV4aXN0XG5cdFx0Y29uc3QgbWVudUJ1dHRvbiA9IHRoaXMuX2ZpbmRPckNyZWF0ZU1lbnVCdXR0b25JbkNvbnRleHRNZW51KGFjdGlvbkl0ZW0sIHRhYmxlKTtcblx0XHRjb25zdCBhY3Rpb25JdGVtcyA9IGFjdGlvbkl0ZW0uZ2V0TWVudSgpLmdldEl0ZW1zKCk7XG5cdFx0Zm9yIChjb25zdCBhY3Rpb24gb2YgYWN0aW9uSXRlbXMpIHtcblx0XHRcdGNvbnN0IHRvb2xCYXJBY3Rpb24gPSBhY3Rpb247XG5cdFx0XHQvLyBub3cgZmluZCB0aGUgYWN0aW9uIGluIHRoZSBjb250ZXh0IG1lbnUgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBjb250ZXh0IG1lbnVcblx0XHRcdGZvciAoY29uc3QgbWVudUl0ZW0gb2YgY29udGV4dE1lbnVJdGVtcykge1xuXHRcdFx0XHRjb25zdCBhY3Rpb25JZEluQ29udGV4dE1lbnUgPSBtZW51SXRlbS5kYXRhKFwiYWN0aW9uSWRcIik7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbklkSW5Ub29sYmFyID0gdG9vbEJhckFjdGlvbi5kYXRhKFwiYWN0aW9uSWRcIik7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRhY3Rpb25JZEluQ29udGV4dE1lbnUgPT09IGFjdGlvbklkSW5Ub29sYmFyICsgXCI6OkNvbnRleHRNZW51XCIgfHxcblx0XHRcdFx0XHRhY3Rpb25JZEluQ29udGV4dE1lbnUgPT09IGFjdGlvbklkSW5Ub29sYmFyLnJlcGxhY2UoXCI6OkFjdGlvbk1lbnVcIiwgXCI6OkNvbnRleHRNZW51XCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdG1lbnVJdGVtLnNldFRleHQodG9vbEJhckFjdGlvbi5nZXRUZXh0KCkpO1xuXHRcdFx0XHRcdC8vIEFkZCB0aGUgYWN0aW9uIHRvIHRoZSBtZW51IGJ1dHRvblxuXHRcdFx0XHRcdGNvbnRleHRNZW51LnJlbW92ZUl0ZW0obWVudUl0ZW0pO1xuXHRcdFx0XHRcdG1lbnVCdXR0b24uYWRkSXRlbShtZW51SXRlbSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gSWYgd2UgZmluZCBhbm90aGVyIG1lbnUgaW4gdGhlIGNvbnRleHQgbWVudSB3ZSBjaGVjayBpZiB0aGUgYWN0aW9uIGlzIGluIHRoZSBzdWIgbWVudVxuXHRcdFx0XHRpZiAobWVudUl0ZW0uZ2V0SXRlbXMoKS5sZW5ndGggPiAwICYmICFtZW51SXRlbS5nZXRJZCgpLmluY2x1ZGVzKGFjdGlvbkl0ZW0uZ2V0SWQoKSkpIHtcblx0XHRcdFx0XHRjb25zdCBhY3Rpb25JblN1Yk1lbnUgPSB0aGlzLl9maW5kQWN0aW9uSW5TdWJNZW51KG1lbnVJdGVtLmdldEl0ZW1zKCksIHRvb2xCYXJBY3Rpb24pO1xuXHRcdFx0XHRcdGlmIChhY3Rpb25JblN1Yk1lbnUpIHtcblx0XHRcdFx0XHRcdGFjdGlvbkluU3ViTWVudS5zZXRUZXh0KHRvb2xCYXJBY3Rpb24uZ2V0VGV4dCgpKTtcblx0XHRcdFx0XHRcdG1lbnVCdXR0b24uYWRkSXRlbShhY3Rpb25JblN1Yk1lbnUpO1xuXHRcdFx0XHRcdFx0aWYgKG1lbnVJdGVtLmdldEl0ZW1zKCkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdG1lbnVJdGVtLmRlc3Ryb3koKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRmluZHMgdGhlIGFjdGlvbiBpbiBhbiBhY3Rpb24gbWVudSBpbiB0aGUgY29udGV4dCBtZW51LCBpdCByZXR1cm4gdGhlIGFjdGlvbiBpZiBmb3VuZCBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBtZW51LlxuXHQgKiBAcGFyYW0gc3ViTWVudSBUaGUgYXJyYXkgb2YgYWN0aW9ucyBpbiB0aGUgbWVudVxuXHQgKiBAcGFyYW0gYWN0aW9uSXRlbSBUaGUgYWN0aW9uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG5cdCAqIEByZXR1cm5zIFRoZSBhY3Rpb24gaWYgZm91bmQsIG90aGVyd2lzZSB1bmRlZmluZWRcblx0ICovXG5cdF9maW5kQWN0aW9uSW5TdWJNZW51KHN1Yk1lbnU6IE1lbnVJdGVtW10sIGFjdGlvbkl0ZW06IE1lbnVJdGVtKTogTWVudUl0ZW0gfCB1bmRlZmluZWQge1xuXHRcdGZvciAoY29uc3QgbWVudUl0ZW0gb2Ygc3ViTWVudSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRtZW51SXRlbS5kYXRhKFwiYWN0aW9uSWRcIikgPT09IGFjdGlvbkl0ZW0uZGF0YShcImFjdGlvbklkXCIpLnJlcGxhY2UoXCI6OkFjdGlvbk1lbnVcIiwgXCI6OkNvbnRleHRNZW51XCIpIHx8XG5cdFx0XHRcdG1lbnVJdGVtLmRhdGEoXCJhY3Rpb25JZFwiKSA9PT0gYWN0aW9uSXRlbS5kYXRhKFwiYWN0aW9uSWRcIikgKyBcIjo6Q29udGV4dE1lbnVcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbiA9IG1lbnVJdGVtO1xuXHRcdFx0XHRzdWJNZW51LnNwbGljZShzdWJNZW51LmluZGV4T2YobWVudUl0ZW0pLCAxKTtcblx0XHRcdFx0cmV0dXJuIGFjdGlvbjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjaydzIGlmIGEgcGFydGljdWxhciBtZW51IGJ1dHRvbiBleGlzdHMgaW4gdGhlIGNvbnRleHQgbWVudSwgaWYgbm90IGNyZWF0ZXMgYSBuZXcgbWVudSBidXR0b24gYW5kIGFkZHMgaXQgdG8gdGhlIGNvbnRleHQgbWVudS5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIG1lbnUgYnV0dG9uIHRvIGZpbmQgb3IgY3JlYXRlXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgTURDVGFibGVcblx0ICogQHJldHVybnMgVGhlIE1lbnVJdGVtIGlmIGZvdW5kLCBvdGhlcndpc2UgYSBuZXcgTWVudUl0ZW1cblx0ICovXG5cdF9maW5kT3JDcmVhdGVNZW51QnV0dG9uSW5Db250ZXh0TWVudShhY3Rpb25JdGVtOiBNZW51QnV0dG9uLCB0YWJsZTogTURDVGFibGUpOiBNZW51SXRlbSB7XG5cdFx0Y29uc3QgY29udGV4dE1lbnUgPSB0YWJsZS5nZXRDb250ZXh0TWVudSgpIGFzIE1lbnU7XG5cdFx0Y29uc3QgY29udGV4dE1lbnVJdGVtcyA9IGNvbnRleHRNZW51LmdldEl0ZW1zKCk7XG5cdFx0Ly9sb29wIG92ZXIgY29udGV4dE1lbnVJdGVtcyBhbmQgY2hlY2sgaWYgdGhlIHJlcXVpcmVkIG1lbnUgYnV0dG9uIGFscmVhZHkgZXhpc3RzXG5cdFx0Zm9yIChjb25zdCBtZW51SXRlbSBvZiBjb250ZXh0TWVudUl0ZW1zKSB7XG5cdFx0XHRpZiAobWVudUl0ZW0uZ2V0SWQoKS5pbmNsdWRlcyhhY3Rpb25JdGVtLmdldElkKCkpKSB7XG5cdFx0XHRcdHJldHVybiBtZW51SXRlbTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gaWYgdGhlIHJlcXVpcmVkIG1lbnUgYnV0dG9uIGRvZXMgbm90IGV4aXN0LCBjcmVhdGUgYSBuZXcgbWVudSBidXR0b24gYW5kIGFkZCBpdCB0byB0aGUgY29udGV4dE1lbnVcblx0XHRjb25zdCBuZXdNZW51QnV0dG9uID0gbmV3IE1lbnVJdGVtKHtcblx0XHRcdGlkOiBnZW5lcmF0ZShbdGFibGUuZ2V0SWQoKSwgYWN0aW9uSXRlbS5nZXRJZCgpLCBcIjo6Q29udGV4dE1lbnVcIl0pLFxuXHRcdFx0dGV4dDogYWN0aW9uSXRlbS5nZXRUZXh0KClcblx0XHR9KTtcblx0XHRjb250ZXh0TWVudS5hZGRJdGVtKG5ld01lbnVCdXR0b24pO1xuXHRcdHJldHVybiBuZXdNZW51QnV0dG9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNwbGl0IHRoZSBhY3Rpb24gaXRlbXMgaW4gdGhlIGNvbnRleHQgbWVudS5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIGFjdGlvbiBpdGVtIHRvIHNwbGl0XG5cdCAqIEBwYXJhbSBjb250ZXh0TWVudSBUaGUgY29udGV4dCBtZW51XG5cdCAqL1xuXHRfc3BsaXRBY3Rpb25zSW5Db250ZXh0TWVudShhY3Rpb25JdGVtOiBCdXR0b24sIGNvbnRleHRNZW51OiBNZW51KTogdm9pZCB7XG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gY29udGV4dE1lbnUuZ2V0SXRlbXMoKTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1lbnVJdGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Ly9jaGVjayBpZiB0aGUgbWVudSBpdGVtIGlzIGEgTWVudVxuXHRcdFx0aWYgKG1lbnVJdGVtc1tpXS5nZXRJdGVtcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG1lbnVJdGVtc1tpXVxuXHRcdFx0XHRcdFx0LmdldEl0ZW1zKClcblx0XHRcdFx0XHRcdC5zb21lKChpdGVtKSA9PiBpdGVtLmRhdGEoXCJhY3Rpb25JZFwiKSA9PT0gYWN0aW9uSXRlbS5kYXRhKFwiYWN0aW9uSWRcIikucmVwbGFjZShcIjo6QWN0aW9uTWVudVwiLCBcIjo6Q29udGV4dE1lbnVcIikpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGNvbnN0IG1lbnVJdGVtID0gbWVudUl0ZW1zW2ldO1xuXHRcdFx0XHRcdGNvbnN0IHN1Ykl0ZW1zID0gbWVudUl0ZW0uZ2V0SXRlbXMoKTtcblx0XHRcdFx0XHQvLyBSZW1vdmUgdGhlIG1lbnVJdGVtIGZyb20gdGhlIGNvbnRleHQgbWVudVxuXHRcdFx0XHRcdGNvbnRleHRNZW51LnJlbW92ZUl0ZW0obWVudUl0ZW0pO1xuXHRcdFx0XHRcdC8vIEluc2VydCB0aGVzZSBzdWItaXRlbXMgaW50byB0aGUgY29udGV4dE1lbnUgc3RhcnRpbmcgZnJvbSB0aGUgb3JpZ2luYWwgaW5kZXhcblx0XHRcdFx0XHRzdWJJdGVtcy5mb3JFYWNoKChzdWJJdGVtLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29udGV4dE1lbnUuaW5zZXJ0SXRlbShzdWJJdGVtLCBpICsgaW5kZXgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGNvcnJlc3BvbmRpbmcgY29udGV4dCBtZW51IGFjdGlvbiBmb3IgdGhlIHRhYmxlIGFjdGlvbi5cblx0ICogQHBhcmFtIHRhYmxlQWN0aW9uIFRoZSBhY3Rpb24gaXRlbSB0byBzcGxpdFxuXHQgKiBAcGFyYW0gY29udGV4dE1lbnUgVGhlIGNvbnRleHQgbWVudVxuXHQgKiBAcmV0dXJucyAgTWVudUl0ZW18bnVsbCB0aGUgY29ycmVzcG9uZGluZyBjb250ZXh0IG1lbnUgYWN0aW9uIG9yIG51bGwgaWYgbm90IGZvdW5kXG5cdCAqL1xuXHRfZ2V0Q29ycmVzcG9uZGluZ0NvbnRleHRNZW51QWN0aW9uKHRhYmxlQWN0aW9uOiBCdXR0b24sIGNvbnRleHRNZW51OiBNZW51KTogTWVudUl0ZW0gfCBudWxsIHtcblx0XHRjb25zdCBtZW51SXRlbXMgPSBjb250ZXh0TWVudS5nZXRJdGVtcygpO1xuXHRcdGZvciAoY29uc3QgaXRlbSBvZiBtZW51SXRlbXMpIHtcblx0XHRcdC8vIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRleHQgbWVudSBhY3Rpb24gaXMgZWl0aGVyIGFuIGl0ZW0gd2l0aCBhbiBhZGRpdGlvbmFsIFwiOjpDb250ZXh0TWVudVwiIHRleHQgYXQgdGhlIGVuZCBvZiB0aGUgaWRcblx0XHRcdC8vIG9yIGl0IGlzIGEgc3BsaXR0ZWQgbWVudSBpdGVtIHdoZXJlIHRoZSBcIjo6Q29udGV4dE1lbnVcIiBwYXJ0IGlzIGluIHRoZSBtaWRkbGUgb2YgdGhlIGlkXG5cdFx0XHRpZiAoXG5cdFx0XHRcdHRhYmxlQWN0aW9uLmdldElkKCkgKyBcIjo6Q29udGV4dE1lbnVcIiA9PT0gaXRlbS5nZXRJZCgpIHx8XG5cdFx0XHRcdGl0ZW0uZGF0YShcImFjdGlvbklkXCIpID09PSB0YWJsZUFjdGlvbi5kYXRhKFwiYWN0aW9uSWRcIik/LnJlcGxhY2UoXCI6OkFjdGlvbk1lbnVcIiwgXCI6OkNvbnRleHRNZW51XCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIGl0ZW07XG5cdFx0XHR9XG5cdFx0XHQvLyBmb3IgY29tYmluZWQgYWN0aW9ucywgdGhlIGNvbnRleHQgbWVudSBhY3Rpb24gaXMgdGhlIG9uZSB3aXRoIHRoZSBzYW1lIHRleHRcblx0XHRcdGlmIChpdGVtLmdldElkKCkuaW5jbHVkZXModGFibGVBY3Rpb24uZ2V0SWQoKSkpIHtcblx0XHRcdFx0cmV0dXJuIGl0ZW07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkanVzdCB0aGUgdGV4dCBhbmQgdmlzaWJpbGl0eSBvZiB0aGUgYWN0aW9uIGl0ZW1zIGluIHRoZSBjb250ZXh0IG1lbnUuXG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBhY3Rpb24gaXRlbSB0byBzcGxpdFxuXHQgKiBAcGFyYW0gY29udGV4dE1lbnVJdGVtIFRoZSBjb250ZXh0IG1lbnVcblx0ICogQHBhcmFtIHRhYmxlQWN0aW9uIFRoZSBhcnJheSBvZiB0YWJsZSBhY3Rpb25zXG5cdCAqL1xuXHRfYWxpZ25UZXh0QW5kVmlzaWJsaXR5SW5Db250ZXh0TWVudShhY3Rpb25JdGVtOiBCdXR0b24sIGNvbnRleHRNZW51SXRlbTogTWVudUl0ZW0sIHRhYmxlQWN0aW9uOiBBY3Rpb25Ub29sYmFyQWN0aW9uKTogdm9pZCB7XG5cdFx0Ly8gY2hhbmdlIHRoZSB0ZXh0IG9mIHRoZSBtZW51IGl0ZW0gYXMgdGhlIHRleHQgb2YgYWN0aW9uIGl0ZW1cblx0XHRjb250ZXh0TWVudUl0ZW0uc2V0VGV4dChhY3Rpb25JdGVtLmdldFRleHQoKSk7XG5cdFx0Ly8gY2hhbmdlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBjb250ZXh0TWVudSBhY3Rpb24gYXMgdGhlIHZpc2liaWxpdHkgb2YgdGFibGUgYWN0aW9uXG5cdFx0Y29uc3QgdGFibGVBY3Rpb25WaXNpYmlsaXR5ID0gYWN0aW9uSXRlbS5nZXRWaXNpYmxlKCkgJiYgdGFibGVBY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHRcdGlmICh0YWJsZUFjdGlvblZpc2liaWxpdHkgIT09IGNvbnRleHRNZW51SXRlbS5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdGNvbnRleHRNZW51SXRlbS5zZXRWaXNpYmxlKHRhYmxlQWN0aW9uVmlzaWJpbGl0eSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIGFuIGFjdGlvbiBoYXMgYmVlbiBzcGxpdCBieSBSVEEuXG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBvcmlnaW5hbCBhY3Rpb24gaXRlbVxuXHQgKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGFjdGlvbiBoYXMgYmVlbiBzcGxpdFxuXHQgKi9cblx0X2lzQWN0aW9uU3BsaXQoYWN0aW9uSXRlbTogQnV0dG9uKTogYm9vbGVhbiB7XG5cdFx0aWYgKGFjdGlvbkl0ZW0uZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgPT09IFwic2FwLm0uTWVudUJ1dHRvblwiKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IGRlcGVuZGVudHMgPSBhY3Rpb25JdGVtLmdldERlcGVuZGVudHMoKTtcblx0XHQvLyBmaW5kIGFsbCB0aGUgZGVwZW5kZW50cyB3aGljaCBhcmUgYSBGbGV4IE1hbmFnZWRPYmplY3RNb2RlbFxuXHRcdGNvbnN0IGZsZXhNYW5hZ2VkT2JqZWN0TW9kZWxzID0gZGVwZW5kZW50cy5maWx0ZXIoKGRlcGVuZGVudCkgPT4gZGVwZW5kZW50IGluc3RhbmNlb2YgTWFuYWdlZE9iamVjdE1vZGVsKTtcblx0XHQvLyBjaGVjayBpZiBvbmUgb2YgdGhlbSBoYXMgdGhlIG5hbWUgXCIkc2FwLm0uZmxleGliaWxpdHkuU3BsaXRCdXR0b25zTW9kZWxcIlxuXHRcdHJldHVybiBmbGV4TWFuYWdlZE9iamVjdE1vZGVscy5zb21lKFxuXHRcdFx0KG1vZGVsKSA9PiAobW9kZWwgYXMgdW5rbm93biBhcyBNYW5hZ2VkT2JqZWN0TW9kZWwpLmdldE5hbWUoKSA9PT0gXCIkc2FwLm0uZmxleGliaWxpdHkuU3BsaXRCdXR0b25zTW9kZWxcIlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCBhIGNvbnRleHQgbWVudSBpdGVtIGhhcyBiZWVuIHByZXNzZWQuXG5cdCAqIEBwYXJhbSBhY3RpdmVcblx0ICovXG5cdHNldENvbnRleHRNZW51QWN0aXZlKGFjdGl2ZTogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMuY29udGV4dE1lbnVBY3RpdmUgPSBhY3RpdmU7XG5cdH1cblxuXHRpc0NvbnRleHRNZW51QWN0aXZlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmNvbnRleHRNZW51QWN0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ha2UgdGhlIG1lbnUgaXRlbSBvZiBTQVAgQ29sbGFib3JhdGlvbiBNYW5hZ2VyIHZpc2libGUgaWYgaXQgaXMgc3VwcG9ydGVkLlxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHBhcmFtIGNvbnRleHRzXG5cdCAqL1xuXHRzZXRDb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtVmlzaWJpbGl0eSh0YWJsZTogTURDVGFibGUsIGNvbnRleHRzOiBDb250ZXh0W10pOiB2b2lkIHtcblx0XHQvLyBnZXQgY29sbGFib3JhdGlvbiBtZW51IGl0ZW0gZnJvbSBjb250ZXh0IG1lbnVcblx0XHRjb25zdCBjb250ZXh0TWVudSA9IHRhYmxlLmdldENvbnRleHRNZW51KCkgYXMgTWVudTtcblx0XHRjb25zdCBtZW51SXRlbXMgPSBjb250ZXh0TWVudS5nZXRJdGVtcygpO1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpb25NYW5hZ2VyTWVudUl0ZW0gPSBtZW51SXRlbXM/LmZpbmQoKG1lbnVJdGVtKSA9PiBtZW51SXRlbS5nZXRJZCgpLmluY2x1ZGVzKFwiQ29udGV4dE1lbnU6OkNvbGxhYm9yYXRpb25NYW5hZ2VyXCIpKTtcblx0XHRpZiAoY29sbGFib3JhdGlvbk1hbmFnZXJNZW51SXRlbSkge1xuXHRcdFx0Ly8gZ2V0IGNvbGxhYm9yYXRpb24gb3B0aW9uIGZyb20gY29sbGFib3JhdGl2ZSB0b29scyBzZXJ2aWNlXG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGFibGUpO1xuXHRcdFx0Y29uc3QgY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSA9IGFwcENvbXBvbmVudD8uZ2V0Q29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgY29sbGFib3JhdGlvbk9wdGlvbiA9IGNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2U/LmNvbGxhYm9yYXRpb25TZXJ2aWNlLmNtSGVscGVyU2VydmljZT8uZ2V0T3B0aW9ucygpO1xuXHRcdFx0Ly8gZ2V0IG5hdmlnYXRpb24gaW5mbyBmcm9tIHRhYmxlIGRlZmluaXRpb25cblx0XHRcdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9ICh0YWJsZT8uZ2V0UGFyZW50KCkgYXMgSVRhYmxlQmxvY2spPy5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25UeXBlID0gdGFibGVEZWZpbml0aW9uPy5hbm5vdGF0aW9uPy5yb3c/Lm5hdmlnYXRpb25JbmZvPy50eXBlO1xuXHRcdFx0aWYgKGNvbGxhYm9yYXRpb25PcHRpb24gJiYgbmF2aWdhdGlvblR5cGUgPT09IFwiTmF2aWdhdGlvblwiICYmIGNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gSXRlbXMgdG8gc2hhcmUgbmVlZHMgdG8gaGF2ZSBhbiBhY3RpdmUgZW50aXR5LCBpZiBpdCdzIG5vdCBDb2xsYWJvcmF0aXZlIERyYWZ0IG9yIGEgbm9uIGRyYWZ0IHByb2dyYW1taW5nIG1vZGVsXG5cdFx0XHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKTtcblx0XHRcdFx0Y29uc3QgY29sbGFib3JhdGl2ZURyYWZ0ID0gdmlldy5nZXRDb250cm9sbGVyKCkuY29sbGFib3JhdGl2ZURyYWZ0O1xuXHRcdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBjb250ZXh0c1swXS5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdFx0Y29uc3QgaXNEcmFmdCA9IE1vZGVsSGVscGVyLmlzRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsLCBjb250ZXh0c1swXS5nZXRQYXRoKCkpO1xuXHRcdFx0XHQvLyBJZiB3ZSBhcmUgaW4gQ29sbGFib3JhdGl2ZSBEcmFmdCBvciBpbiBhbiBub24tZHJhZnQgYXBwLCB3ZSBzZXQgdmlzaWJsZSB0byB0cnVlLlxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugd2Ugb25seSBzZXQgdmlzaWJsZSB0byB0cnVlLCBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIHNlbGVjdGVkIGNvbnRleHRzIGlzIG9yIGhhcyBhbiBhY3RpdmUgdmVyc2lvbi5cblx0XHRcdFx0Y29uc3QgdmlzaWJsZSA9XG5cdFx0XHRcdFx0Y29sbGFib3JhdGl2ZURyYWZ0LmlzQ29sbGFib3JhdGlvbkVuYWJsZWQoKSB8fCAhaXNEcmFmdFxuXHRcdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0XHQ6IGNvbnRleHRzLnNvbWUoKGNvbnRleHQpID0+IGNvbnRleHQuZ2V0T2JqZWN0KCkuSXNBY3RpdmVFbnRpdHkgfHwgY29udGV4dC5nZXRPYmplY3QoKS5IYXNBY3RpdmVFbnRpdHkpO1xuXHRcdFx0XHRjb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtLnNldFZpc2libGUodmlzaWJsZSk7XG5cdFx0XHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZShjb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtLCBcInByZXNzXCIsIFwiQ006U2hhcmVMaW5rXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29sbGFib3JhdGlvbk1hbmFnZXJNZW51SXRlbS5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciB3aGVuIGFuIGl0ZW0gaW4gdGhlIGNvbnRleHQgbWVudSBpcyBwcmVzc2VkLlxuXHQgKiBAcGFyYW0gb0V2ZW50XG5cdCAqL1xuXHRfb25Db250ZXh0TWVudVByZXNzKHRoaXM6IElUYWJsZUJsb2NrICYgQ29udGV4dE1lbnVIYW5kbGVyLCBvRXZlbnQ6IFRhYmxlJEJlZm9yZU9wZW5Db250ZXh0TWVudUV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgdGFibGUgPSBvRXZlbnQuZ2V0U291cmNlKCksXG5cdFx0XHR0YWJsZUNvbnRleHRzID0gdGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpIGFzIENvbnRleHRbXSwgLy8gc2VsZWN0ZWQgaXRlbXMgaW4gdGhlIHRhYmxlXG5cdFx0XHRjb250ZXh0TWVudUNvbnRleHQgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIikgYXMgQ29udGV4dCwgLy8gcm93IGNsaWNrZWQgZm9yIGNvbnRleHQgbWVudVxuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cblx0XHRjb25zdCBjb250ZXh0TWVudVNlbGVjdGlvbiA9IHRoaXMuZ2V0UmVsZXZhbnRTZWxlY3Rpb24odGFibGVDb250ZXh0cywgY29udGV4dE1lbnVDb250ZXh0KTtcblxuXHRcdC8vIENoZWNrIGlmIGFsbCBjb250ZXh0cyBpbiBjb250ZXh0TWVudVNlbGVjdGlvbiBhcmUgaW5hY3RpdmVcblx0XHQvLyBpZiBzbywgc2V0IHRoZSBpbmFjdGl2ZUNvbnRleHQgcHJvcGVydHkgaW4gdGhlIGludGVybmFsIG1vZGVsIHRvIHRydWVcblx0XHQvLyBpZiBqdXN0IG9uZSBjb250ZXh0IGlzIG5vdCBpbmFjdGl2ZSwgc2V0IHRoZSBpbmFjdGl2ZUNvbnRleHQgcHJvcGVydHkgdG8gZmFsc2Vcblx0XHRsZXQgb25lQ29udGV4dElzQWN0aXZlID0gdHJ1ZTtcblx0XHRvbmVDb250ZXh0SXNBY3RpdmUgPSBjb250ZXh0TWVudVNlbGVjdGlvbi5zb21lKChjb250ZXh0KSA9PiAhY29udGV4dC5pc0luYWN0aXZlKCkpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L2luYWN0aXZlQ29udGV4dFwiLCAhb25lQ29udGV4dElzQWN0aXZlKTtcblxuXHRcdC8vIERvIG5vdCBjb25zaWRlciBlbXB0eSByb3dzIGFzIHNlbGVjdGVkIGNvbnRleHQsIGZvciBvdGhlciBhY3Rpb25zIHRoYW4gZGVsZXRlXG5cdFx0Y29uc3QgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyA9IGNvbnRleHRNZW51U2VsZWN0aW9uLmZpbHRlcihmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpIHtcblx0XHRcdHJldHVybiAhb0NvbnRleHQuaXNJbmFjdGl2ZSgpO1xuXHRcdH0pO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNJbmNsdWRpbmdJbmFjdGl2ZVwiLCBjb250ZXh0TWVudVNlbGVjdGlvbik7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c1wiLCBhY3RpdmVTZWxlY3RlZENvbnRleHRzKTtcblx0XHQvL3Jlc2V0IG51bWJlciBvZiBzZWxlY3RlZCBjb250ZXh0cyB0byBlbnN1cmUgY2FsbGJhY2sgZm9yIGN1c3RvbSBlbmFibGUgaGFuZGxlclxuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCAtMSk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNGb3JEZWxldGVcIiwgY29udGV4dE1lbnVTZWxlY3Rpb24ubGVuZ3RoKTtcblxuXHRcdGlmIChhY3RpdmVTZWxlY3RlZENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8qIEFsaWduIGNvbnRleHQgbWVudSB3aXRoIFJUQSBjaGFuZ2VzIGluIHRhYmxlIHRvb2xiYXIgKi9cblx0XHRcdHRoaXMuYWxpZ25Db250ZXh0TWVudVdpdGhUYWJsZVRvb2xiYXJDaGFuZ2VzKHRhYmxlKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIHZpc2liaWxpdHkgb2YgdGhlIE1lbnVJdGVtIGZvciBDb2xsYWJvcmF0aW9uIE1hbmFnZXJcblx0XHR0aGlzLnNldENvbGxhYm9yYXRpb25NYW5hZ2VyTWVudUl0ZW1WaXNpYmlsaXR5KHRhYmxlLCBhY3RpdmVTZWxlY3RlZENvbnRleHRzKTtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBjb250ZXh0IG1lbnUgY29udGFpbnMgb25seSBub3QgdmlzaWJsZSBpdGVtc1xuXHRcdC8vIGluIHRoYXQgY2FzZSBwcmV2ZW50IHRoZSBjb250ZXh0IG1lbnUgZnJvbSBvcGVuaW5nXG5cdFx0Y29uc3QgY29udGV4dE1lbnUgPSB0YWJsZS5nZXRDb250ZXh0TWVudSgpIGFzIE1lbnU7XG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gY29udGV4dE1lbnUuZ2V0SXRlbXMoKTtcblxuXHRcdGNvbnN0IHZpc2libGVNZW51SXRlbXMgPSBtZW51SXRlbXMuZmlsdGVyKChtZW51SXRlbSkgPT4gbWVudUl0ZW0uZ2V0VmlzaWJsZSgpKTtcblx0XHRpZiAodmlzaWJsZU1lbnVJdGVtcy5sZW5ndGggPT09IDApIHtcblx0XHRcdG9FdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblxuXHRcdC8vIEVuYWJsZW1lbnQgb2YgdGhlIEV4cGFuZC9Db2xsYXBzZSBidXR0b25zXG5cdFx0Y29uc3QgaXNFeHBhbmRhYmxlID0gY29udGV4dE1lbnVTZWxlY3Rpb24uc29tZSgoc2luZ2xlQ29udGV4dCkgPT4gc2luZ2xlQ29udGV4dC5pc0V4cGFuZGVkKCkgIT09IHVuZGVmaW5lZCk7XG5cdFx0Y29uc3QgaXNDb2xsYXBzYWJsZSA9IGNvbnRleHRNZW51U2VsZWN0aW9uLnNvbWUoKHNpbmdsZUNvbnRleHQpID0+IHNpbmdsZUNvbnRleHQuaXNFeHBhbmRlZCgpKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9pc0V4cGFuZGFibGVcIiwgaXNFeHBhbmRhYmxlKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9pc0NvbGxhcHNhYmxlXCIsIGlzQ29sbGFwc2FibGUpO1xuXG5cdFx0Ly8gQWN0aW9uIGVuYWJsZW1lbnQgZm9yIERlbGV0ZVxuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRyb2xJZFwiLCB0YWJsZS5nZXRJZCgpKTtcblx0XHRkZWxldGVIZWxwZXIudXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMoaW50ZXJuYWxNb2RlbENvbnRleHQsIGNvbnRleHRNZW51U2VsZWN0aW9uLCB0cnVlKTtcblxuXHRcdC8vIEFjdGlvbiBlbmFibGVtZW50IGZvciBJQk5cblx0XHRpZiAoIXRhYmxlLmRhdGEoXCJlbmFibGVBbmFseXRpY3NcIikpIHtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25BdmFpbGFibGVNYXAgPSB0YWJsZT8uZGF0YShcIm5hdmlnYXRpb25BdmFpbGFibGVNYXBcIik7XG5cdFx0XHRUYWJsZVJ1bnRpbWUuc2V0SW50ZW50QmFzZWROYXZpZ2F0aW9uRW5hYmxlbWVudChpbnRlcm5hbE1vZGVsQ29udGV4dCwgbmF2aWdhdGlvbkF2YWlsYWJsZU1hcCwgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cywgdHJ1ZSk7XG5cdFx0fVxuXG5cdFx0Ly8gQWN0aW9uIGVuYWJsZW1lbnQgZm9yIE1hc3MgRWRpdFxuXHRcdGNvbnN0IHVwZGF0YWJsZVByb3BlcnR5UGF0aCA9IHRhYmxlPy5kYXRhKFwidXBkYXRhYmxlUHJvcGVydHlQYXRoXCIpO1xuXHRcdGNvbnN0IGRyYWZ0ID0gdGFibGU/LmRhdGEoXCJkcmFmdFwiKTtcblx0XHRjb25zdCByZWFkT25seURyYWZ0RW5hYmxlZCA9IHRhYmxlLmRhdGEoXCJkaXNwbGF5TW9kZVByb3BlcnR5QmluZGluZ1wiKSA9PT0gXCJ0cnVlXCIgJiYgZHJhZnQgIT09IFwidW5kZWZpbmVkXCI7XG5cdFx0Y29uc3QgdXBkYXRhYmxlQ29udGV4dHM6IENvbnRleHRbXSA9IFtdO1xuXHRcdGZvciAoY29uc3Qgc2VsZWN0ZWRDb250ZXh0IG9mIGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMpIHtcblx0XHRcdGlmIChUYWJsZVJ1bnRpbWUuaXNVcGRhdGFibGVDb250ZXh0KHVwZGF0YWJsZVByb3BlcnR5UGF0aCwgc2VsZWN0ZWRDb250ZXh0LCByZWFkT25seURyYWZ0RW5hYmxlZCkpIHtcblx0XHRcdFx0dXBkYXRhYmxlQ29udGV4dHMucHVzaChzZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS91cGRhdGFibGVDb250ZXh0c1wiLCB1cGRhdGFibGVDb250ZXh0cyk7XG5cblx0XHRjb25zdCB0YWJsZURlZmluaXRpb24gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpO1xuXHRcdGlmICh0YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVFbmFibGVtZW50ICYmIGNvbnRleHRNZW51U2VsZWN0aW9uLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0VGFibGVSdW50aW1lLl91cGRhdGVDcmVhdGVFbmFibGVtZW50KFxuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRlRW5hYmxlbWVudCxcblx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdGNvbnRleHRNZW51U2VsZWN0aW9uWzBdLFxuXHRcdFx0XHR0YWJsZURlZmluaXRpb24uY29udHJvbC5ub2RlVHlwZSxcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRUYWJsZVJ1bnRpbWUudXBkYXRlQ3V0Q29weVBhc3RlRW5hYmxlbWVudChpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRPYmplY3QoKSwgdGFibGUsIHRydWUpO1xuXHRcdFRhYmxlUnVudGltZS51cGRhdGVNb3ZlVXBEb3duRW5hYmxlbWVudChpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRPYmplY3QoKSwgdGFibGUsIHRydWUpO1xuXG5cdFx0Ly8gT3RoZXIgYWN0aW9uIGVuYWJsZW1lbnRcblx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdEpTT04ucGFyc2UodGFibGVEZWZpbml0aW9uLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0XHRhY3RpdmVTZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0XCJ0YWJsZVwiLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdH1cblxuXHRnZXRSZWxldmFudFNlbGVjdGlvbih0YWJsZUNvbnRleHRzOiBDb250ZXh0W10sIGNvbnRleHRNZW51Q29udGV4dDogQ29udGV4dCk6IENvbnRleHRbXSB7XG5cdFx0bGV0IGNvbnRleHRNZW51U2VsZWN0aW9uOiBDb250ZXh0W107XG5cdFx0aWYgKHRhYmxlQ29udGV4dHMuaW5jbHVkZXMoY29udGV4dE1lbnVDb250ZXh0KSkge1xuXHRcdFx0Y29udGV4dE1lbnVTZWxlY3Rpb24gPSB0YWJsZUNvbnRleHRzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250ZXh0TWVudVNlbGVjdGlvbiA9IFtjb250ZXh0TWVudUNvbnRleHRdIGFzIENvbnRleHRbXTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRleHRNZW51U2VsZWN0aW9uO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztNQW9CcUJBLGtCQUFrQjtJQUFBLFNBQUFBLG1CQUFBO01BQUEsS0FDNUJDLGlCQUFpQixHQUFHLEtBQUs7SUFBQTtJQUFBQyxRQUFBLEdBQUFGLGtCQUFBO0lBQUEsSUFBQUcsTUFBQSxHQUFBSCxrQkFBQSxDQUFBSSxTQUFBO0lBQUFELE1BQUEsQ0FFbkNFLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFDQyxVQUFvQixFQUFRO01BQ3RDO0lBQUE7O0lBR0Q7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBSCxNQUFBLENBSUFJLHVDQUF1QyxHQUF2QyxTQUFBQSx1Q0FBdUNBLENBQUNDLEtBQWUsRUFBUTtNQUM5RCxNQUFNQyxXQUFXLEdBQUdELEtBQUssQ0FBQ0UsY0FBYyxDQUFDLENBQVM7TUFDbEQsTUFBTUMsc0JBQWtDLEdBQUcsRUFBRTtNQUM3QyxNQUFNQyxZQUFZLEdBQUdKLEtBQUssQ0FBQ0ssVUFBVSxDQUFDLENBQUM7TUFDdkNELFlBQVksRUFBRUUsT0FBTyxDQUFFQyxXQUFXLElBQUs7UUFDdEMsTUFBTUMsZUFBZSxHQUFHRCxXQUFXLENBQUNFLGNBQWMsQ0FBQyxRQUFRLENBQVc7UUFDdEU7UUFDQSxJQUFJLElBQUksQ0FBQ0MsY0FBYyxDQUFDRixlQUFlLENBQUMsRUFBRTtVQUN6QztVQUNBLElBQUksQ0FBQ0csMEJBQTBCLENBQUNILGVBQWUsRUFBRVAsV0FBVyxDQUFDO1FBQzlEO1FBQ0E7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
|
|
405
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb250ZXh0TWVudUhhbmRsZXIiLCJjb250ZXh0TWVudUFjdGl2ZSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJhbGlnbkNvbnRleHRNZW51V2l0aFRhYmxlVG9vbGJhckNoYW5nZXMiLCJ0YWJsZSIsImNvbnRleHRNZW51IiwiZ2V0Q29udGV4dE1lbnUiLCJzb3J0SGVscGVyRm9yTWVudUl0ZW1zIiwidGFibGVBY3Rpb25zIiwiZ2V0QWN0aW9ucyIsImZvckVhY2giLCJ0YWJsZUFjdGlvbiIsInRhYmxlQWN0aW9uSXRlbSIsImdldEFnZ3JlZ2F0aW9uIiwiX2lzQWN0aW9uU3BsaXQiLCJfc3BsaXRBY3Rpb25zSW5Db250ZXh0TWVudSIsIl9pc0FjdGlvbkNvbWJpbmVkIiwiX2NvbWJpbmVBY3Rpb25JbkNvbnRleHRNZW51IiwiY29udGV4dE1lbnVJdGVtIiwiX2dldENvcnJlc3BvbmRpbmdDb250ZXh0TWVudUFjdGlvbiIsIl9hbGlnblRleHRBbmRWaXNpYmxpdHlJbkNvbnRleHRNZW51IiwicHVzaCIsImxlbmd0aCIsIm1lbnVJdGVtIiwic29ydEluZGV4IiwiaW5kZXhPZkNvbnRleHRNZW51IiwiaW5kZXhPZkl0ZW0iLCJyZW1vdmVJdGVtIiwiaW5zZXJ0SXRlbSIsImhpZGVBbGxDb250ZXh0TWVudUFjdGlvbnNFeGNlcHREZWxldGUiLCJtZW51SXRlbXMiLCJnZXRJdGVtcyIsImRlbGV0ZUFjdGlvbiIsImZpbmQiLCJhY3Rpb24iLCJnZXRJZCIsImVuZHNXaXRoIiwiZGVsZXRlVmlzaWJsZSIsImdldEFjdGlvbiIsImdldFZpc2libGUiLCJpbmNsdWRlcyIsInNldFZpc2libGUiLCJhY3Rpb25JdGVtIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiZGVwZW5kZW50cyIsImdldERlcGVuZGVudHMiLCJmbGV4TWFuYWdlZE9iamVjdE1vZGVscyIsImZpbHRlciIsImRlcGVuZGVudCIsIk1hbmFnZWRPYmplY3RNb2RlbCIsInNvbWUiLCJtb2RlbCIsImNvbnRleHRNZW51SXRlbXMiLCJtZW51QnV0dG9uIiwiX2ZpbmRPckNyZWF0ZU1lbnVCdXR0b25JbkNvbnRleHRNZW51IiwiYWN0aW9uSXRlbXMiLCJnZXRNZW51IiwidG9vbEJhckFjdGlvbiIsImFjdGlvbklkSW5Db250ZXh0TWVudSIsImRhdGEiLCJhY3Rpb25JZEluVG9vbGJhciIsInJlcGxhY2UiLCJzZXRUZXh0IiwiZ2V0VGV4dCIsImFkZEl0ZW0iLCJhY3Rpb25JblN1Yk1lbnUiLCJfZmluZEFjdGlvbkluU3ViTWVudSIsImRlc3Ryb3kiLCJzdWJNZW51Iiwic3BsaWNlIiwiaW5kZXhPZiIsInVuZGVmaW5lZCIsIm5ld01lbnVCdXR0b24iLCJNZW51SXRlbSIsImlkIiwiZ2VuZXJhdGUiLCJ0ZXh0IiwiaSIsIml0ZW0iLCJzdWJJdGVtcyIsInN1Ykl0ZW0iLCJpbmRleCIsInRhYmxlQWN0aW9uVmlzaWJpbGl0eSIsInNldENvbnRleHRNZW51QWN0aXZlIiwiYWN0aXZlIiwiaXNDb250ZXh0TWVudUFjdGl2ZSIsInNldENvbGxhYm9yYXRpb25NYW5hZ2VyTWVudUl0ZW1WaXNpYmlsaXR5IiwiY29udGV4dHMiLCJjb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtIiwiYXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIiwiZ2V0Q29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSIsImNvbGxhYm9yYXRpb25PcHRpb24iLCJjb2xsYWJvcmF0aW9uU2VydmljZSIsImNtSGVscGVyU2VydmljZSIsImdldE9wdGlvbnMiLCJ0YWJsZURlZmluaXRpb24iLCJnZXRQYXJlbnQiLCJnZXRUYWJsZURlZmluaXRpb24iLCJuYXZpZ2F0aW9uVHlwZSIsImFubm90YXRpb24iLCJyb3ciLCJuYXZpZ2F0aW9uSW5mbyIsInR5cGUiLCJ2aWV3IiwiZ2V0VGFyZ2V0VmlldyIsImNvbGxhYm9yYXRpdmVEcmFmdCIsImdldENvbnRyb2xsZXIiLCJtZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImlzRHJhZnQiLCJNb2RlbEhlbHBlciIsImlzRHJhZnRTdXBwb3J0ZWQiLCJnZXRQYXRoIiwidmlzaWJsZSIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJjb250ZXh0IiwiZ2V0T2JqZWN0IiwiSXNBY3RpdmVFbnRpdHkiLCJIYXNBY3RpdmVFbnRpdHkiLCJGRVNSSGVscGVyIiwic2V0U2VtYW50aWNTdGVwbmFtZSIsIl9vbkNvbnRleHRNZW51UHJlc3MiLCJvRXZlbnQiLCJnZXRTb3VyY2UiLCJ0YWJsZUNvbnRleHRzIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsImNvbnRleHRNZW51Q29udGV4dCIsImdldFBhcmFtZXRlciIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJjb250ZXh0TWVudVNlbGVjdGlvbiIsImdldFJlbGV2YW50U2VsZWN0aW9uIiwib25lQ29udGV4dElzQWN0aXZlIiwiaXNJbmFjdGl2ZSIsInNldFByb3BlcnR5IiwiYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyIsIm9Db250ZXh0Iiwib25seUluQWN0aXZlQ29udGV4dHNTZWxlY3RlZCIsImlzSW5saW5lQ3JlYXRpb25Nb2RlIiwiZ2V0Q3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Nb2RlIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwibmF2aWdhYmxlQ29udGV4dHMiLCJnZXRMb2NhbEFubm90YXRpb25Nb2RlbCIsImdldFByb3BlcnR5Iiwicm91dGVQYXRoIiwidmlzaWJsZU1lbnVJdGVtcyIsInByZXZlbnREZWZhdWx0IiwiaXNFeHBhbmRhYmxlIiwic2luZ2xlQ29udGV4dCIsImlzRXhwYW5kZWQiLCJpc0NvbGxhcHNhYmxlIiwiZGVsZXRlSGVscGVyIiwidXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMiLCJuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIiwiVGFibGVSdW50aW1lIiwic2V0SW50ZW50QmFzZWROYXZpZ2F0aW9uRW5hYmxlbWVudCIsInVwZGF0YWJsZVByb3BlcnR5UGF0aCIsImRyYWZ0IiwicmVhZE9ubHlEcmFmdEVuYWJsZWQiLCJ1cGRhdGFibGVDb250ZXh0cyIsInNlbGVjdGVkQ29udGV4dCIsImlzVXBkYXRhYmxlQ29udGV4dCIsImNvbnRyb2wiLCJjcmVhdGVFbmFibGVtZW50IiwiX3VwZGF0ZUNyZWF0ZUVuYWJsZW1lbnQiLCJub2RlVHlwZSIsInVwZGF0ZUN1dENvcHlQYXN0ZUVuYWJsZW1lbnQiLCJ1cGRhdGVNb3ZlVXBEb3duRW5hYmxlbWVudCIsIkFjdGlvblJ1bnRpbWUiLCJzZXRBY3Rpb25FbmFibGVtZW50IiwiSlNPTiIsInBhcnNlIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDb250ZXh0TWVudUhhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBJSW50ZXJmYWNlV2l0aE1peGluIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IENyZWF0aW9uTW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBkZWxldGVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRGVsZXRlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvVGFibGVcIjtcbmltcG9ydCB0eXBlIEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBNZW51IGZyb20gXCJzYXAvbS9NZW51XCI7XG5pbXBvcnQgdHlwZSBNZW51QnV0dG9uIGZyb20gXCJzYXAvbS9NZW51QnV0dG9uXCI7XG5pbXBvcnQgTWVudUl0ZW0gZnJvbSBcInNhcC9tL01lbnVJdGVtXCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdE1vZGVsIGZyb20gXCJzYXAvdWkvZmwvdXRpbC9NYW5hZ2VkT2JqZWN0TW9kZWxcIjtcbmltcG9ydCB0eXBlIE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlJEJlZm9yZU9wZW5Db250ZXh0TWVudUV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIEFjdGlvblRvb2xiYXJBY3Rpb24gZnJvbSBcInNhcC91aS9tZGMvYWN0aW9udG9vbGJhci9BY3Rpb25Ub29sYmFyQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IEZFU1JIZWxwZXIgZnJvbSBcInNhcC91aS9wZXJmb3JtYW5jZS90cmFjZS9GRVNSSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IElUYWJsZUJsb2NrIH0gZnJvbSBcIi4uL1RhYmxlQVBJXCI7XG5pbXBvcnQgVGFibGVSdW50aW1lIGZyb20gXCIuLi9UYWJsZVJ1bnRpbWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGV4dE1lbnVIYW5kbGVyIGltcGxlbWVudHMgSUludGVyZmFjZVdpdGhNaXhpbiB7XG5cdHByb3RlY3RlZCBjb250ZXh0TWVudUFjdGl2ZSA9IGZhbHNlO1xuXG5cdHNldHVwTWl4aW4oX2Jhc2VDbGFzczogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHQvLyBUaGlzIG1ldGhvZCBpcyBuZWVkZWQgdG8gaW1wbGVtZW50IGludGVyZmFjZSBJSW50ZXJmYWNlV2l0aE1peGluXG5cdH1cblxuXHQvKipcblx0ICogQWxpZ24gY29udGV4dCBtZW51IHdpdGggdGhlIHRhYmxlIGFjdGlvbnMgYnkgUlRBIGNoYW5nZXMgaW4gdGFibGUgdG9vbGJhci5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZSB3aXRoIGJvdW5kIHRhYmxlIGFjdGlvbnNcblx0ICovXG5cdGFsaWduQ29udGV4dE1lbnVXaXRoVGFibGVUb29sYmFyQ2hhbmdlcyh0YWJsZTogTURDVGFibGUpOiB2b2lkIHtcblx0XHRjb25zdCBjb250ZXh0TWVudSA9IHRhYmxlLmdldENvbnRleHRNZW51KCkgYXMgTWVudTtcblx0XHRjb25zdCBzb3J0SGVscGVyRm9yTWVudUl0ZW1zOiBNZW51SXRlbVtdID0gW107XG5cdFx0Y29uc3QgdGFibGVBY3Rpb25zID0gdGFibGUuZ2V0QWN0aW9ucygpO1xuXHRcdHRhYmxlQWN0aW9ucz8uZm9yRWFjaCgodGFibGVBY3Rpb24pID0+IHtcblx0XHRcdGNvbnN0IHRhYmxlQWN0aW9uSXRlbSA9IHRhYmxlQWN0aW9uLmdldEFnZ3JlZ2F0aW9uKFwiYWN0aW9uXCIpIGFzIEJ1dHRvbjtcblx0XHRcdC8vIENoZWNrIGlmIHRoZSBhY3Rpb24gaXRlbSBoYXMgYmVlbiBzcGxpdCBieSBSVEFcblx0XHRcdGlmICh0aGlzLl9pc0FjdGlvblNwbGl0KHRhYmxlQWN0aW9uSXRlbSkpIHtcblx0XHRcdFx0Ly8gUmVtb3ZlIG9yaWdpbmFsIG1lbnUgaXRlbSBhbmQgYWRkIHN1YiBpdGVtcyBhcyBuZXcgbWVudSBpdGVtc1xuXHRcdFx0XHR0aGlzLl9zcGxpdEFjdGlvbnNJbkNvbnRleHRNZW51KHRhYmxlQWN0aW9uSXRlbSwgY29udGV4dE1lbnUpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIGFjdGlvbiBpdGVtIGhhcyBiZWVuIGNyZWF0ZWQgYnkgY29tYmluaW5nIHRoZSB0d28gYWN0aW9uc1xuXHRcdFx0aWYgKHRoaXMuX2lzQWN0aW9uQ29tYmluZWQodGFibGVBY3Rpb25JdGVtKSkge1xuXHRcdFx0XHR0aGlzLl9jb21iaW5lQWN0aW9uSW5Db250ZXh0TWVudSh0YWJsZUFjdGlvbkl0ZW0gYXMgdW5rbm93biBhcyBNZW51QnV0dG9uLCBjb250ZXh0TWVudSwgdGFibGUpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY29udGV4dE1lbnVJdGVtID0gdGhpcy5fZ2V0Q29ycmVzcG9uZGluZ0NvbnRleHRNZW51QWN0aW9uKHRhYmxlQWN0aW9uSXRlbSwgY29udGV4dE1lbnUpO1xuXHRcdFx0aWYgKGNvbnRleHRNZW51SXRlbSkge1xuXHRcdFx0XHR0aGlzLl9hbGlnblRleHRBbmRWaXNpYmxpdHlJbkNvbnRleHRNZW51KHRhYmxlQWN0aW9uSXRlbSwgY29udGV4dE1lbnVJdGVtLCB0YWJsZUFjdGlvbiBhcyBBY3Rpb25Ub29sYmFyQWN0aW9uKTtcblx0XHRcdFx0c29ydEhlbHBlckZvck1lbnVJdGVtcy5wdXNoKGNvbnRleHRNZW51SXRlbSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly8gQWxpZ24gdGhlIG9yZGVyIG9mIGNvbnRleHQtbWVudUl0ZW1zIHdpdGggYm91bmQgdGFibGUgYWN0aW9uc1xuXHRcdGlmIChzb3J0SGVscGVyRm9yTWVudUl0ZW1zLmxlbmd0aCkge1xuXHRcdFx0c29ydEhlbHBlckZvck1lbnVJdGVtcy5mb3JFYWNoKChtZW51SXRlbSwgc29ydEluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGluZGV4T2ZDb250ZXh0TWVudSA9IGNvbnRleHRNZW51LmluZGV4T2ZJdGVtKG1lbnVJdGVtKTtcblx0XHRcdFx0aWYgKGluZGV4T2ZDb250ZXh0TWVudSAhPT0gc29ydEluZGV4KSB7XG5cdFx0XHRcdFx0Y29udGV4dE1lbnUucmVtb3ZlSXRlbShtZW51SXRlbSk7XG5cdFx0XHRcdFx0Y29udGV4dE1lbnUuaW5zZXJ0SXRlbShtZW51SXRlbSwgc29ydEluZGV4KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhpZGUgYWxsIGNvbnRleHQgbWVudSBhY3Rpb25zIGV4Y2VwdCBkZWxldGUuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgTURDVGFibGVcblx0ICovXG5cdGhpZGVBbGxDb250ZXh0TWVudUFjdGlvbnNFeGNlcHREZWxldGUodGFibGU6IE1EQ1RhYmxlKTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dE1lbnUgPSB0YWJsZS5nZXRDb250ZXh0TWVudSgpIGFzIE1lbnU7XG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gY29udGV4dE1lbnUuZ2V0SXRlbXMoKTtcblx0XHRjb25zdCBkZWxldGVBY3Rpb24gPSB0YWJsZS5nZXRBY3Rpb25zKCkuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24uZ2V0SWQoKS5lbmRzV2l0aChcIlN0YW5kYXJkQWN0aW9uOjpEZWxldGU6OkFjdGlvblRvb2xiYXJBY3Rpb25cIikpO1xuXHRcdGNvbnN0IGRlbGV0ZVZpc2libGUgPSAoZGVsZXRlQWN0aW9uIGFzIEFjdGlvblRvb2xiYXJBY3Rpb24pPy5nZXRBY3Rpb24oKS5nZXRWaXNpYmxlKCkgPz8gdHJ1ZTtcblx0XHRtZW51SXRlbXMuZm9yRWFjaCgobWVudUl0ZW0pID0+IHtcblx0XHRcdC8vIENoZWNrIGlmIHRoZSBtZW51IGl0ZW0gaXMgdGhlIGRlbGV0ZSBhY3Rpb25cblx0XHRcdGlmIChtZW51SXRlbS5nZXRJZCgpLmluY2x1ZGVzKFwiU3RhbmRhcmRBY3Rpb246OkRlbGV0ZTo6Q29udGV4dE1lbnVcIikpIHtcblx0XHRcdFx0bWVudUl0ZW0uc2V0VmlzaWJsZShkZWxldGVWaXNpYmxlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1lbnVJdGVtLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIHRoZSBhY3Rpb24gaXRlbSBoYXMgYmVlbiBjcmVhdGVkIGJ5IGEgQ29tYmluZSBSVEEgY2hhbmdlcyBpbiB0aGUgdGFibGUgdG9vbGJhci5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIGFjdGlvbiB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBhY3Rpb24gaXRlbSBoYXMgYmVlbiBjcmVhdGVkIGJ5IGEgQ29tYmluZSBSVEEgY2hhbmdlcyBpbiB0aGUgdGFibGUgdG9vbGJhclxuXHQgKi9cblx0X2lzQWN0aW9uQ29tYmluZWQoYWN0aW9uSXRlbTogQnV0dG9uKTogYm9vbGVhbiB7XG5cdFx0aWYgKGFjdGlvbkl0ZW0uZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgPT09IFwic2FwLm0uTWVudUJ1dHRvblwiKSB7XG5cdFx0XHQvLyBXZSBkb24ndCBoYXZlIGN1c3RvbSBkYXRhIGF0dHJpYnV0ZSBvbiB0aGUgTWVudUJ1dHRvbiBjcmVhdGVkIGJ5IFJUQSBjb21iaW5lIGNoYW5nZVxuXHRcdFx0Y29uc3QgZGVwZW5kZW50cyA9IGFjdGlvbkl0ZW0uZ2V0RGVwZW5kZW50cygpO1xuXHRcdFx0Ly8gZmluZCBhbGwgdGhlIGRlcGVuZGVudHMgd2hpY2ggYXJlIGEgRmxleCBNYW5hZ2VkT2JqZWN0TW9kZWxcblx0XHRcdGNvbnN0IGZsZXhNYW5hZ2VkT2JqZWN0TW9kZWxzID0gZGVwZW5kZW50cy5maWx0ZXIoKGRlcGVuZGVudCkgPT4gZGVwZW5kZW50IGluc3RhbmNlb2YgTWFuYWdlZE9iamVjdE1vZGVsKTtcblx0XHRcdC8vIGNoZWNrIGlmIHRoZSBuYW1lIG9mIG9uZSBvZiB0aGVtIGluY2x1ZGVzIFwiJHNhcC5tLmZsZXhpYmlsaXR5Lk1lbnVCdXR0b25Nb2RlbFwiXG5cdFx0XHRyZXR1cm4gZmxleE1hbmFnZWRPYmplY3RNb2RlbHMuc29tZSgobW9kZWwpID0+XG5cdFx0XHRcdChtb2RlbCBhcyB1bmtub3duIGFzIE1hbmFnZWRPYmplY3RNb2RlbCkuZ2V0TmFtZSgpLmluY2x1ZGVzKFwiJHNhcC5tLmZsZXhpYmlsaXR5Lk1lbnVCdXR0b25Nb2RlbFwiKVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbWJpbmUgdGhlIGFjdGlvbnMgaW4gdGhlIGNvbnRleHQgbWVudSB0byBhbGlnbiB3aXRoIHRoZSB0YWJsZSBhY3Rpb24gdG9vbGJhci5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIGFjdGlvbiBpdGVtIHRvIHNwbGl0XG5cdCAqIEBwYXJhbSBjb250ZXh0TWVudSBUaGUgY29udGV4dCBtZW51XG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgTURDVGFibGVcblx0ICovXG5cdF9jb21iaW5lQWN0aW9uSW5Db250ZXh0TWVudShhY3Rpb25JdGVtOiBNZW51QnV0dG9uLCBjb250ZXh0TWVudTogTWVudSwgdGFibGU6IE1EQ1RhYmxlKTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dE1lbnVJdGVtcyA9IGNvbnRleHRNZW51LmdldEl0ZW1zKCk7XG5cdFx0Ly8gQ3JlYXRlIGEgbmV3IG1lbnUgYnV0dG9uIGluIHRoZSBjb250ZXh0IG1lbnUgaWYgaXQgZG9lcyBub3QgZXhpc3Rcblx0XHRjb25zdCBtZW51QnV0dG9uID0gdGhpcy5fZmluZE9yQ3JlYXRlTWVudUJ1dHRvbkluQ29udGV4dE1lbnUoYWN0aW9uSXRlbSwgdGFibGUpO1xuXHRcdGNvbnN0IGFjdGlvbkl0ZW1zID0gYWN0aW9uSXRlbS5nZXRNZW51KCkuZ2V0SXRlbXMoKTtcblx0XHRmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25JdGVtcykge1xuXHRcdFx0Y29uc3QgdG9vbEJhckFjdGlvbiA9IGFjdGlvbjtcblx0XHRcdC8vIG5vdyBmaW5kIHRoZSBhY3Rpb24gaW4gdGhlIGNvbnRleHQgbWVudSBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGNvbnRleHQgbWVudVxuXHRcdFx0Zm9yIChjb25zdCBtZW51SXRlbSBvZiBjb250ZXh0TWVudUl0ZW1zKSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbklkSW5Db250ZXh0TWVudSA9IG1lbnVJdGVtLmRhdGEoXCJhY3Rpb25JZFwiKTtcblx0XHRcdFx0Y29uc3QgYWN0aW9uSWRJblRvb2xiYXIgPSB0b29sQmFyQWN0aW9uLmRhdGEoXCJhY3Rpb25JZFwiKTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGFjdGlvbklkSW5Db250ZXh0TWVudSA9PT0gYWN0aW9uSWRJblRvb2xiYXIgKyBcIjo6Q29udGV4dE1lbnVcIiB8fFxuXHRcdFx0XHRcdGFjdGlvbklkSW5Db250ZXh0TWVudSA9PT0gYWN0aW9uSWRJblRvb2xiYXIucmVwbGFjZShcIjo6QWN0aW9uTWVudVwiLCBcIjo6Q29udGV4dE1lbnVcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0bWVudUl0ZW0uc2V0VGV4dCh0b29sQmFyQWN0aW9uLmdldFRleHQoKSk7XG5cdFx0XHRcdFx0Ly8gQWRkIHRoZSBhY3Rpb24gdG8gdGhlIG1lbnUgYnV0dG9uXG5cdFx0XHRcdFx0Y29udGV4dE1lbnUucmVtb3ZlSXRlbShtZW51SXRlbSk7XG5cdFx0XHRcdFx0bWVudUJ1dHRvbi5hZGRJdGVtKG1lbnVJdGVtKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBJZiB3ZSBmaW5kIGFub3RoZXIgbWVudSBpbiB0aGUgY29udGV4dCBtZW51IHdlIGNoZWNrIGlmIHRoZSBhY3Rpb24gaXMgaW4gdGhlIHN1YiBtZW51XG5cdFx0XHRcdGlmIChtZW51SXRlbS5nZXRJdGVtcygpLmxlbmd0aCA+IDAgJiYgIW1lbnVJdGVtLmdldElkKCkuaW5jbHVkZXMoYWN0aW9uSXRlbS5nZXRJZCgpKSkge1xuXHRcdFx0XHRcdGNvbnN0IGFjdGlvbkluU3ViTWVudSA9IHRoaXMuX2ZpbmRBY3Rpb25JblN1Yk1lbnUobWVudUl0ZW0uZ2V0SXRlbXMoKSwgdG9vbEJhckFjdGlvbik7XG5cdFx0XHRcdFx0aWYgKGFjdGlvbkluU3ViTWVudSkge1xuXHRcdFx0XHRcdFx0YWN0aW9uSW5TdWJNZW51LnNldFRleHQodG9vbEJhckFjdGlvbi5nZXRUZXh0KCkpO1xuXHRcdFx0XHRcdFx0bWVudUJ1dHRvbi5hZGRJdGVtKGFjdGlvbkluU3ViTWVudSk7XG5cdFx0XHRcdFx0XHRpZiAobWVudUl0ZW0uZ2V0SXRlbXMoKS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRcdFx0bWVudUl0ZW0uZGVzdHJveSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kcyB0aGUgYWN0aW9uIGluIGFuIGFjdGlvbiBtZW51IGluIHRoZSBjb250ZXh0IG1lbnUsIGl0IHJldHVybiB0aGUgYWN0aW9uIGlmIGZvdW5kIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIG1lbnUuXG5cdCAqIEBwYXJhbSBzdWJNZW51IFRoZSBhcnJheSBvZiBhY3Rpb25zIGluIHRoZSBtZW51XG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBhY3Rpb24gd2UgYXJlIHNlYXJjaGluZyBmb3Jcblx0ICogQHJldHVybnMgVGhlIGFjdGlvbiBpZiBmb3VuZCwgb3RoZXJ3aXNlIHVuZGVmaW5lZFxuXHQgKi9cblx0X2ZpbmRBY3Rpb25JblN1Yk1lbnUoc3ViTWVudTogTWVudUl0ZW1bXSwgYWN0aW9uSXRlbTogTWVudUl0ZW0pOiBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdFx0Zm9yIChjb25zdCBtZW51SXRlbSBvZiBzdWJNZW51KSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG1lbnVJdGVtLmRhdGEoXCJhY3Rpb25JZFwiKSA9PT0gYWN0aW9uSXRlbS5kYXRhKFwiYWN0aW9uSWRcIikucmVwbGFjZShcIjo6QWN0aW9uTWVudVwiLCBcIjo6Q29udGV4dE1lbnVcIikgfHxcblx0XHRcdFx0bWVudUl0ZW0uZGF0YShcImFjdGlvbklkXCIpID09PSBhY3Rpb25JdGVtLmRhdGEoXCJhY3Rpb25JZFwiKSArIFwiOjpDb250ZXh0TWVudVwiXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgYWN0aW9uID0gbWVudUl0ZW07XG5cdFx0XHRcdHN1Yk1lbnUuc3BsaWNlKHN1Yk1lbnUuaW5kZXhPZihtZW51SXRlbSksIDEpO1xuXHRcdFx0XHRyZXR1cm4gYWN0aW9uO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrJ3MgaWYgYSBwYXJ0aWN1bGFyIG1lbnUgYnV0dG9uIGV4aXN0cyBpbiB0aGUgY29udGV4dCBtZW51LCBpZiBub3QgY3JlYXRlcyBhIG5ldyBtZW51IGJ1dHRvbiBhbmQgYWRkcyBpdCB0byB0aGUgY29udGV4dCBtZW51LlxuXHQgKiBAcGFyYW0gYWN0aW9uSXRlbSBUaGUgbWVudSBidXR0b24gdG8gZmluZCBvciBjcmVhdGVcblx0ICogQHBhcmFtIHRhYmxlIFRoZSBNRENUYWJsZVxuXHQgKiBAcmV0dXJucyBUaGUgTWVudUl0ZW0gaWYgZm91bmQsIG90aGVyd2lzZSBhIG5ldyBNZW51SXRlbVxuXHQgKi9cblx0X2ZpbmRPckNyZWF0ZU1lbnVCdXR0b25JbkNvbnRleHRNZW51KGFjdGlvbkl0ZW06IE1lbnVCdXR0b24sIHRhYmxlOiBNRENUYWJsZSk6IE1lbnVJdGVtIHtcblx0XHRjb25zdCBjb250ZXh0TWVudSA9IHRhYmxlLmdldENvbnRleHRNZW51KCkgYXMgTWVudTtcblx0XHRjb25zdCBjb250ZXh0TWVudUl0ZW1zID0gY29udGV4dE1lbnUuZ2V0SXRlbXMoKTtcblx0XHQvL2xvb3Agb3ZlciBjb250ZXh0TWVudUl0ZW1zIGFuZCBjaGVjayBpZiB0aGUgcmVxdWlyZWQgbWVudSBidXR0b24gYWxyZWFkeSBleGlzdHNcblx0XHRmb3IgKGNvbnN0IG1lbnVJdGVtIG9mIGNvbnRleHRNZW51SXRlbXMpIHtcblx0XHRcdGlmIChtZW51SXRlbS5nZXRJZCgpLmluY2x1ZGVzKGFjdGlvbkl0ZW0uZ2V0SWQoKSkpIHtcblx0XHRcdFx0cmV0dXJuIG1lbnVJdGVtO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBpZiB0aGUgcmVxdWlyZWQgbWVudSBidXR0b24gZG9lcyBub3QgZXhpc3QsIGNyZWF0ZSBhIG5ldyBtZW51IGJ1dHRvbiBhbmQgYWRkIGl0IHRvIHRoZSBjb250ZXh0TWVudVxuXHRcdGNvbnN0IG5ld01lbnVCdXR0b24gPSBuZXcgTWVudUl0ZW0oe1xuXHRcdFx0aWQ6IGdlbmVyYXRlKFt0YWJsZS5nZXRJZCgpLCBhY3Rpb25JdGVtLmdldElkKCksIFwiOjpDb250ZXh0TWVudVwiXSksXG5cdFx0XHR0ZXh0OiBhY3Rpb25JdGVtLmdldFRleHQoKVxuXHRcdH0pO1xuXHRcdGNvbnRleHRNZW51LmFkZEl0ZW0obmV3TWVudUJ1dHRvbik7XG5cdFx0cmV0dXJuIG5ld01lbnVCdXR0b247XG5cdH1cblxuXHQvKipcblx0ICogU3BsaXQgdGhlIGFjdGlvbiBpdGVtcyBpbiB0aGUgY29udGV4dCBtZW51LlxuXHQgKiBAcGFyYW0gYWN0aW9uSXRlbSBUaGUgYWN0aW9uIGl0ZW0gdG8gc3BsaXRcblx0ICogQHBhcmFtIGNvbnRleHRNZW51IFRoZSBjb250ZXh0IG1lbnVcblx0ICovXG5cdF9zcGxpdEFjdGlvbnNJbkNvbnRleHRNZW51KGFjdGlvbkl0ZW06IEJ1dHRvbiwgY29udGV4dE1lbnU6IE1lbnUpOiB2b2lkIHtcblx0XHRjb25zdCBtZW51SXRlbXMgPSBjb250ZXh0TWVudS5nZXRJdGVtcygpO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbWVudUl0ZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHQvL2NoZWNrIGlmIHRoZSBtZW51IGl0ZW0gaXMgYSBNZW51XG5cdFx0XHRpZiAobWVudUl0ZW1zW2ldLmdldEl0ZW1zKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bWVudUl0ZW1zW2ldXG5cdFx0XHRcdFx0XHQuZ2V0SXRlbXMoKVxuXHRcdFx0XHRcdFx0LnNvbWUoKGl0ZW0pID0+IGl0ZW0uZGF0YShcImFjdGlvbklkXCIpID09PSBhY3Rpb25JdGVtLmRhdGEoXCJhY3Rpb25JZFwiKS5yZXBsYWNlKFwiOjpBY3Rpb25NZW51XCIsIFwiOjpDb250ZXh0TWVudVwiKSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Y29uc3QgbWVudUl0ZW0gPSBtZW51SXRlbXNbaV07XG5cdFx0XHRcdFx0Y29uc3Qgc3ViSXRlbXMgPSBtZW51SXRlbS5nZXRJdGVtcygpO1xuXHRcdFx0XHRcdC8vIFJlbW92ZSB0aGUgbWVudUl0ZW0gZnJvbSB0aGUgY29udGV4dCBtZW51XG5cdFx0XHRcdFx0Y29udGV4dE1lbnUucmVtb3ZlSXRlbShtZW51SXRlbSk7XG5cdFx0XHRcdFx0Ly8gSW5zZXJ0IHRoZXNlIHN1Yi1pdGVtcyBpbnRvIHRoZSBjb250ZXh0TWVudSBzdGFydGluZyBmcm9tIHRoZSBvcmlnaW5hbCBpbmRleFxuXHRcdFx0XHRcdHN1Ykl0ZW1zLmZvckVhY2goKHN1Ykl0ZW0sIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb250ZXh0TWVudS5pbnNlcnRJdGVtKHN1Ykl0ZW0sIGkgKyBpbmRleCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgY29ycmVzcG9uZGluZyBjb250ZXh0IG1lbnUgYWN0aW9uIGZvciB0aGUgdGFibGUgYWN0aW9uLlxuXHQgKiBAcGFyYW0gdGFibGVBY3Rpb24gVGhlIGFjdGlvbiBpdGVtIHRvIHNwbGl0XG5cdCAqIEBwYXJhbSBjb250ZXh0TWVudSBUaGUgY29udGV4dCBtZW51XG5cdCAqIEByZXR1cm5zICBNZW51SXRlbXxudWxsIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRleHQgbWVudSBhY3Rpb24gb3IgbnVsbCBpZiBub3QgZm91bmRcblx0ICovXG5cdF9nZXRDb3JyZXNwb25kaW5nQ29udGV4dE1lbnVBY3Rpb24odGFibGVBY3Rpb246IEJ1dHRvbiwgY29udGV4dE1lbnU6IE1lbnUpOiBNZW51SXRlbSB8IG51bGwge1xuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IGNvbnRleHRNZW51LmdldEl0ZW1zKCk7XG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIG1lbnVJdGVtcykge1xuXHRcdFx0Ly8gdGhlIGNvcnJlc3BvbmRpbmcgY29udGV4dCBtZW51IGFjdGlvbiBpcyBlaXRoZXIgYW4gaXRlbSB3aXRoIGFuIGFkZGl0aW9uYWwgXCI6OkNvbnRleHRNZW51XCIgdGV4dCBhdCB0aGUgZW5kIG9mIHRoZSBpZFxuXHRcdFx0Ly8gb3IgaXQgaXMgYSBzcGxpdHRlZCBtZW51IGl0ZW0gd2hlcmUgdGhlIFwiOjpDb250ZXh0TWVudVwiIHBhcnQgaXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgaWRcblx0XHRcdGlmIChcblx0XHRcdFx0dGFibGVBY3Rpb24uZ2V0SWQoKSArIFwiOjpDb250ZXh0TWVudVwiID09PSBpdGVtLmdldElkKCkgfHxcblx0XHRcdFx0aXRlbS5kYXRhKFwiYWN0aW9uSWRcIikgPT09IHRhYmxlQWN0aW9uLmRhdGEoXCJhY3Rpb25JZFwiKT8ucmVwbGFjZShcIjo6QWN0aW9uTWVudVwiLCBcIjo6Q29udGV4dE1lbnVcIilcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gaXRlbTtcblx0XHRcdH1cblx0XHRcdC8vIGZvciBjb21iaW5lZCBhY3Rpb25zLCB0aGUgY29udGV4dCBtZW51IGFjdGlvbiBpcyB0aGUgb25lIHdpdGggdGhlIHNhbWUgdGV4dFxuXHRcdFx0aWYgKGl0ZW0uZ2V0SWQoKS5pbmNsdWRlcyh0YWJsZUFjdGlvbi5nZXRJZCgpKSkge1xuXHRcdFx0XHRyZXR1cm4gaXRlbTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQWRqdXN0IHRoZSB0ZXh0IGFuZCB2aXNpYmlsaXR5IG9mIHRoZSBhY3Rpb24gaXRlbXMgaW4gdGhlIGNvbnRleHQgbWVudS5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIGFjdGlvbiBpdGVtIHRvIHNwbGl0XG5cdCAqIEBwYXJhbSBjb250ZXh0TWVudUl0ZW0gVGhlIGNvbnRleHQgbWVudVxuXHQgKiBAcGFyYW0gdGFibGVBY3Rpb24gVGhlIGFycmF5IG9mIHRhYmxlIGFjdGlvbnNcblx0ICovXG5cdF9hbGlnblRleHRBbmRWaXNpYmxpdHlJbkNvbnRleHRNZW51KGFjdGlvbkl0ZW06IEJ1dHRvbiwgY29udGV4dE1lbnVJdGVtOiBNZW51SXRlbSwgdGFibGVBY3Rpb246IEFjdGlvblRvb2xiYXJBY3Rpb24pOiB2b2lkIHtcblx0XHQvLyBjaGFuZ2UgdGhlIHRleHQgb2YgdGhlIG1lbnUgaXRlbSBhcyB0aGUgdGV4dCBvZiBhY3Rpb24gaXRlbVxuXHRcdGNvbnRleHRNZW51SXRlbS5zZXRUZXh0KGFjdGlvbkl0ZW0uZ2V0VGV4dCgpKTtcblx0XHQvLyBjaGFuZ2UgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGNvbnRleHRNZW51IGFjdGlvbiBhcyB0aGUgdmlzaWJpbGl0eSBvZiB0YWJsZSBhY3Rpb25cblx0XHRjb25zdCB0YWJsZUFjdGlvblZpc2liaWxpdHkgPSBhY3Rpb25JdGVtLmdldFZpc2libGUoKSAmJiB0YWJsZUFjdGlvbi5nZXRWaXNpYmxlKCk7XG5cdFx0aWYgKHRhYmxlQWN0aW9uVmlzaWJpbGl0eSAhPT0gY29udGV4dE1lbnVJdGVtLmdldFZpc2libGUoKSkge1xuXHRcdFx0Y29udGV4dE1lbnVJdGVtLnNldFZpc2libGUodGFibGVBY3Rpb25WaXNpYmlsaXR5KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgYW4gYWN0aW9uIGhhcyBiZWVuIHNwbGl0IGJ5IFJUQS5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIG9yaWdpbmFsIGFjdGlvbiBpdGVtXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgYWN0aW9uIGhhcyBiZWVuIHNwbGl0XG5cdCAqL1xuXHRfaXNBY3Rpb25TcGxpdChhY3Rpb25JdGVtOiBCdXR0b24pOiBib29sZWFuIHtcblx0XHRpZiAoYWN0aW9uSXRlbS5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSA9PT0gXCJzYXAubS5NZW51QnV0dG9uXCIpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3QgZGVwZW5kZW50cyA9IGFjdGlvbkl0ZW0uZ2V0RGVwZW5kZW50cygpO1xuXHRcdC8vIGZpbmQgYWxsIHRoZSBkZXBlbmRlbnRzIHdoaWNoIGFyZSBhIEZsZXggTWFuYWdlZE9iamVjdE1vZGVsXG5cdFx0Y29uc3QgZmxleE1hbmFnZWRPYmplY3RNb2RlbHMgPSBkZXBlbmRlbnRzLmZpbHRlcigoZGVwZW5kZW50KSA9PiBkZXBlbmRlbnQgaW5zdGFuY2VvZiBNYW5hZ2VkT2JqZWN0TW9kZWwpO1xuXHRcdC8vIGNoZWNrIGlmIG9uZSBvZiB0aGVtIGhhcyB0aGUgbmFtZSBcIiRzYXAubS5mbGV4aWJpbGl0eS5TcGxpdEJ1dHRvbnNNb2RlbFwiXG5cdFx0cmV0dXJuIGZsZXhNYW5hZ2VkT2JqZWN0TW9kZWxzLnNvbWUoXG5cdFx0XHQobW9kZWwpID0+IChtb2RlbCBhcyB1bmtub3duIGFzIE1hbmFnZWRPYmplY3RNb2RlbCkuZ2V0TmFtZSgpID09PSBcIiRzYXAubS5mbGV4aWJpbGl0eS5TcGxpdEJ1dHRvbnNNb2RlbFwiXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIGEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IGEgY29udGV4dCBtZW51IGl0ZW0gaGFzIGJlZW4gcHJlc3NlZC5cblx0ICogQHBhcmFtIGFjdGl2ZVxuXHQgKi9cblx0c2V0Q29udGV4dE1lbnVBY3RpdmUoYWN0aXZlOiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5jb250ZXh0TWVudUFjdGl2ZSA9IGFjdGl2ZTtcblx0fVxuXG5cdGlzQ29udGV4dE1lbnVBY3RpdmUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuY29udGV4dE1lbnVBY3RpdmU7XG5cdH1cblxuXHQvKipcblx0ICogTWFrZSB0aGUgbWVudSBpdGVtIG9mIFNBUCBDb2xsYWJvcmF0aW9uIE1hbmFnZXIgdmlzaWJsZSBpZiBpdCBpcyBzdXBwb3J0ZWQuXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcGFyYW0gY29udGV4dHNcblx0ICovXG5cdHNldENvbGxhYm9yYXRpb25NYW5hZ2VyTWVudUl0ZW1WaXNpYmlsaXR5KHRhYmxlOiBNRENUYWJsZSwgY29udGV4dHM6IENvbnRleHRbXSk6IHZvaWQge1xuXHRcdC8vIGdldCBjb2xsYWJvcmF0aW9uIG1lbnUgaXRlbSBmcm9tIGNvbnRleHQgbWVudVxuXHRcdGNvbnN0IGNvbnRleHRNZW51ID0gdGFibGUuZ2V0Q29udGV4dE1lbnUoKSBhcyBNZW51O1xuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IGNvbnRleHRNZW51LmdldEl0ZW1zKCk7XG5cdFx0Y29uc3QgY29sbGFib3JhdGlvbk1hbmFnZXJNZW51SXRlbSA9IG1lbnVJdGVtcz8uZmluZCgobWVudUl0ZW0pID0+IG1lbnVJdGVtLmdldElkKCkuaW5jbHVkZXMoXCJDb250ZXh0TWVudTo6Q29sbGFib3JhdGlvbk1hbmFnZXJcIikpO1xuXHRcdGlmIChjb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtKSB7XG5cdFx0XHQvLyBnZXQgY29sbGFib3JhdGlvbiBvcHRpb24gZnJvbSBjb2xsYWJvcmF0aXZlIHRvb2xzIHNlcnZpY2Vcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0YWJsZSk7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50Py5nZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aW9uT3B0aW9uID0gY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZT8uY29sbGFib3JhdGlvblNlcnZpY2UuY21IZWxwZXJTZXJ2aWNlPy5nZXRPcHRpb25zKCk7XG5cdFx0XHQvLyBnZXQgbmF2aWdhdGlvbiBpbmZvIGZyb20gdGFibGUgZGVmaW5pdGlvblxuXHRcdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gKHRhYmxlPy5nZXRQYXJlbnQoKSBhcyBJVGFibGVCbG9jayk/LmdldFRhYmxlRGVmaW5pdGlvbigpO1xuXHRcdFx0Y29uc3QgbmF2aWdhdGlvblR5cGUgPSB0YWJsZURlZmluaXRpb24/LmFubm90YXRpb24/LnJvdz8ubmF2aWdhdGlvbkluZm8/LnR5cGU7XG5cdFx0XHRpZiAoY29sbGFib3JhdGlvbk9wdGlvbiAmJiBuYXZpZ2F0aW9uVHlwZSA9PT0gXCJOYXZpZ2F0aW9uXCIgJiYgY29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQvLyBJdGVtcyB0byBzaGFyZSBuZWVkcyB0byBoYXZlIGFuIGFjdGl2ZSBlbnRpdHksIGlmIGl0J3Mgbm90IENvbGxhYm9yYXRpdmUgRHJhZnQgb3IgYSBub24gZHJhZnQgcHJvZ3JhbW1pbmcgbW9kZWxcblx0XHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpO1xuXHRcdFx0XHRjb25zdCBjb2xsYWJvcmF0aXZlRHJhZnQgPSB2aWV3LmdldENvbnRyb2xsZXIoKS5jb2xsYWJvcmF0aXZlRHJhZnQ7XG5cdFx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IGNvbnRleHRzWzBdLmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBpc0RyYWZ0ID0gTW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwsIGNvbnRleHRzWzBdLmdldFBhdGgoKSk7XG5cdFx0XHRcdC8vIElmIHdlIGFyZSBpbiBDb2xsYWJvcmF0aXZlIERyYWZ0IG9yIGluIGFuIG5vbi1kcmFmdCBhcHAsIHdlIHNldCB2aXNpYmxlIHRvIHRydWUuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSB3ZSBvbmx5IHNldCB2aXNpYmxlIHRvIHRydWUsIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgc2VsZWN0ZWQgY29udGV4dHMgaXMgb3IgaGFzIGFuIGFjdGl2ZSB2ZXJzaW9uLlxuXHRcdFx0XHRjb25zdCB2aXNpYmxlID1cblx0XHRcdFx0XHRjb2xsYWJvcmF0aXZlRHJhZnQuaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCgpIHx8ICFpc0RyYWZ0XG5cdFx0XHRcdFx0XHQ/IHRydWVcblx0XHRcdFx0XHRcdDogY29udGV4dHMuc29tZSgoY29udGV4dCkgPT4gY29udGV4dC5nZXRPYmplY3QoKS5Jc0FjdGl2ZUVudGl0eSB8fCBjb250ZXh0LmdldE9iamVjdCgpLkhhc0FjdGl2ZUVudGl0eSk7XG5cdFx0XHRcdGNvbGxhYm9yYXRpb25NYW5hZ2VyTWVudUl0ZW0uc2V0VmlzaWJsZSh2aXNpYmxlKTtcblx0XHRcdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKGNvbGxhYm9yYXRpb25NYW5hZ2VyTWVudUl0ZW0sIFwicHJlc3NcIiwgXCJDTTpTaGFyZUxpbmtcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgYmVmb3JlT3BlbkNvbnRleHRNZW51IGV2ZW50IG9mIHRoZSBNREMgVGFibGUuXG5cdCAqIEBwYXJhbSBvRXZlbnRcblx0ICovXG5cdF9vbkNvbnRleHRNZW51UHJlc3ModGhpczogSVRhYmxlQmxvY2sgJiBDb250ZXh0TWVudUhhbmRsZXIsIG9FdmVudDogVGFibGUkQmVmb3JlT3BlbkNvbnRleHRNZW51RXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCB0YWJsZSA9IG9FdmVudC5nZXRTb3VyY2UoKSxcblx0XHRcdHRhYmxlQ29udGV4dHMgPSB0YWJsZS5nZXRTZWxlY3RlZENvbnRleHRzKCkgYXMgQ29udGV4dFtdLCAvLyBzZWxlY3RlZCBpdGVtcyBpbiB0aGUgdGFibGVcblx0XHRcdGNvbnRleHRNZW51Q29udGV4dCA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJiaW5kaW5nQ29udGV4dFwiKSBhcyBDb250ZXh0LCAvLyByb3cgY2xpY2tlZCBmb3IgY29udGV4dCBtZW51XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblxuXHRcdGNvbnN0IGNvbnRleHRNZW51U2VsZWN0aW9uID0gdGhpcy5nZXRSZWxldmFudFNlbGVjdGlvbih0YWJsZUNvbnRleHRzLCBjb250ZXh0TWVudUNvbnRleHQpO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgYWxsIGNvbnRleHRzIGluIGNvbnRleHRNZW51U2VsZWN0aW9uIGFyZSBpbmFjdGl2ZVxuXHRcdC8vIGlmIHNvLCBzZXQgdGhlIGluYWN0aXZlQ29udGV4dCBwcm9wZXJ0eSBpbiB0aGUgaW50ZXJuYWwgbW9kZWwgdG8gdHJ1ZVxuXHRcdC8vIGlmIGp1c3Qgb25lIGNvbnRleHQgaXMgbm90IGluYWN0aXZlLCBzZXQgdGhlIGluYWN0aXZlQ29udGV4dCBwcm9wZXJ0eSB0byBmYWxzZVxuXHRcdGxldCBvbmVDb250ZXh0SXNBY3RpdmUgPSB0cnVlO1xuXHRcdG9uZUNvbnRleHRJc0FjdGl2ZSA9IGNvbnRleHRNZW51U2VsZWN0aW9uLnNvbWUoKGNvbnRleHQpID0+ICFjb250ZXh0LmlzSW5hY3RpdmUoKSk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvaW5hY3RpdmVDb250ZXh0XCIsICFvbmVDb250ZXh0SXNBY3RpdmUpO1xuXG5cdFx0Ly8gRG8gbm90IGNvbnNpZGVyIGVtcHR5IHJvd3MgYXMgc2VsZWN0ZWQgY29udGV4dCwgZm9yIG90aGVyIGFjdGlvbnMgdGhhbiBkZWxldGVcblx0XHRjb25zdCBhY3RpdmVTZWxlY3RlZENvbnRleHRzID0gY29udGV4dE1lbnVTZWxlY3Rpb24uZmlsdGVyKGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuICFvQ29udGV4dC5pc0luYWN0aXZlKCk7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgb25seUluQWN0aXZlQ29udGV4dHNTZWxlY3RlZCA9IGNvbnRleHRNZW51U2VsZWN0aW9uLmxlbmd0aCA+IDAgJiYgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPT09IDA7XG5cdFx0Y29uc3QgaXNJbmxpbmVDcmVhdGlvbk1vZGUgPVxuXHRcdFx0KHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJICYgeyBnZXRDcmVhdGlvbk1vZGU6IEZ1bmN0aW9uIH0pPy5nZXRDcmVhdGlvbk1vZGUoKS5nZXROYW1lKCkgPT09XG5cdFx0XHRDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzO1xuXHRcdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9IHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCk7XG5cdFx0Y29uc3QgbmF2aWdhYmxlQ29udGV4dHMgPSBjb250ZXh0TWVudVNlbGVjdGlvbi5maWx0ZXIoZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQhb0NvbnRleHQuaXNJbmFjdGl2ZSgpICYmXG5cdFx0XHRcdG9Db250ZXh0XG5cdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHQ/LmdldExvY2FsQW5ub3RhdGlvbk1vZGVsKClcblx0XHRcdFx0XHQuZ2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0XHRcIkAkdWk1LmZlLnZpcnR1YWwucm91dGVOYXZpZ2FibGUtXCIgK1xuXHRcdFx0XHRcdFx0XHQodGFibGVEZWZpbml0aW9uLmFubm90YXRpb24ucm93Py5uYXZpZ2F0aW9uSW5mbyBhcyB7IHJvdXRlUGF0aD86IHN0cmluZyB9KT8ucm91dGVQYXRoLFxuXHRcdFx0XHRcdFx0b0NvbnRleHRcblx0XHRcdFx0XHQpICE9PSBmYWxzZVxuXHRcdFx0KTtcblx0XHR9KTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzSW5jbHVkaW5nSW5hY3RpdmVcIiwgY29udGV4dE1lbnVTZWxlY3Rpb24pO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiwgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvbmF2aWdhYmxlQ29udGV4dHNcIiwgbmF2aWdhYmxlQ29udGV4dHMpO1xuXHRcdC8vcmVzZXQgbnVtYmVyIG9mIHNlbGVjdGVkIGNvbnRleHRzIHRvIGVuc3VyZSBjYWxsYmFjayBmb3IgY3VzdG9tIGVuYWJsZSBoYW5kbGVyXG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIC0xKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9udW1iZXJPZk5hdmlnYWJsZUNvbnRleHRzXCIsIG5hdmlnYWJsZUNvbnRleHRzLmxlbmd0aCk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNGb3JEZWxldGVcIiwgY29udGV4dE1lbnVTZWxlY3Rpb24ubGVuZ3RoKTtcblxuXHRcdGlmIChhY3RpdmVTZWxlY3RlZENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8qIEFsaWduIGNvbnRleHQgbWVudSB3aXRoIFJUQSBjaGFuZ2VzIGluIHRhYmxlIHRvb2xiYXIgKi9cblx0XHRcdHRoaXMuYWxpZ25Db250ZXh0TWVudVdpdGhUYWJsZVRvb2xiYXJDaGFuZ2VzKHRhYmxlKTtcblx0XHR9IGVsc2UgaWYgKG9ubHlJbkFjdGl2ZUNvbnRleHRzU2VsZWN0ZWQgJiYgaXNJbmxpbmVDcmVhdGlvbk1vZGUpIHtcblx0XHRcdC8vIE9ubHkgRGVsZXRlIGlzIHZpc2libGVcblx0XHRcdHRoaXMuaGlkZUFsbENvbnRleHRNZW51QWN0aW9uc0V4Y2VwdERlbGV0ZSh0YWJsZSk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBNZW51SXRlbSBmb3IgQ29sbGFib3JhdGlvbiBNYW5hZ2VyXG5cdFx0dGhpcy5zZXRDb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtVmlzaWJpbGl0eSh0YWJsZSwgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyk7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgY29udGV4dCBtZW51IGNvbnRhaW5zIG9ubHkgbm90IHZpc2libGUgaXRlbXNcblx0XHQvLyBpbiB0aGF0IGNhc2UgcHJldmVudCB0aGUgY29udGV4dCBtZW51IGZyb20gb3BlbmluZ1xuXHRcdGNvbnN0IGNvbnRleHRNZW51ID0gdGFibGUuZ2V0Q29udGV4dE1lbnUoKSBhcyBNZW51O1xuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IGNvbnRleHRNZW51LmdldEl0ZW1zKCk7XG5cblx0XHRjb25zdCB2aXNpYmxlTWVudUl0ZW1zID0gbWVudUl0ZW1zLmZpbHRlcigobWVudUl0ZW0pID0+IG1lbnVJdGVtLmdldFZpc2libGUoKSk7XG5cdFx0aWYgKHZpc2libGVNZW51SXRlbXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRvRXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cblx0XHQvLyBFbmFibGVtZW50IG9mIHRoZSBFeHBhbmQvQ29sbGFwc2UgYnV0dG9uc1xuXHRcdGNvbnN0IGlzRXhwYW5kYWJsZSA9IGNvbnRleHRNZW51U2VsZWN0aW9uLnNvbWUoKHNpbmdsZUNvbnRleHQpID0+IHNpbmdsZUNvbnRleHQuaXNFeHBhbmRlZCgpICE9PSB1bmRlZmluZWQpO1xuXHRcdGNvbnN0IGlzQ29sbGFwc2FibGUgPSBjb250ZXh0TWVudVNlbGVjdGlvbi5zb21lKChzaW5nbGVDb250ZXh0KSA9PiBzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvaXNFeHBhbmRhYmxlXCIsIGlzRXhwYW5kYWJsZSk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvaXNDb2xsYXBzYWJsZVwiLCBpc0NvbGxhcHNhYmxlKTtcblxuXHRcdC8vIEFjdGlvbiBlbmFibGVtZW50IGZvciBEZWxldGVcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250cm9sSWRcIiwgdGFibGUuZ2V0SWQoKSk7XG5cdFx0ZGVsZXRlSGVscGVyLnVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzKGludGVybmFsTW9kZWxDb250ZXh0LCBjb250ZXh0TWVudVNlbGVjdGlvbiwgdHJ1ZSk7XG5cblx0XHQvLyBBY3Rpb24gZW5hYmxlbWVudCBmb3IgSUJOXG5cdFx0aWYgKCF0YWJsZS5kYXRhKFwiZW5hYmxlQW5hbHl0aWNzXCIpKSB7XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwID0gdGFibGU/LmRhdGEoXCJuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwXCIpO1xuXHRcdFx0VGFibGVSdW50aW1lLnNldEludGVudEJhc2VkTmF2aWdhdGlvbkVuYWJsZW1lbnQoaW50ZXJuYWxNb2RlbENvbnRleHQsIG5hdmlnYXRpb25BdmFpbGFibGVNYXAsIGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMsIHRydWUpO1xuXHRcdH1cblxuXHRcdC8vIEFjdGlvbiBlbmFibGVtZW50IGZvciBNYXNzIEVkaXRcblx0XHRjb25zdCB1cGRhdGFibGVQcm9wZXJ0eVBhdGggPSB0YWJsZT8uZGF0YShcInVwZGF0YWJsZVByb3BlcnR5UGF0aFwiKTtcblx0XHRjb25zdCBkcmFmdCA9IHRhYmxlPy5kYXRhKFwiZHJhZnRcIik7XG5cdFx0Y29uc3QgcmVhZE9ubHlEcmFmdEVuYWJsZWQgPSB0YWJsZS5kYXRhKFwiZGlzcGxheU1vZGVQcm9wZXJ0eUJpbmRpbmdcIikgPT09IFwidHJ1ZVwiICYmIGRyYWZ0ICE9PSBcInVuZGVmaW5lZFwiO1xuXHRcdGNvbnN0IHVwZGF0YWJsZUNvbnRleHRzOiBDb250ZXh0W10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IHNlbGVjdGVkQ29udGV4dCBvZiBhY3RpdmVTZWxlY3RlZENvbnRleHRzKSB7XG5cdFx0XHRpZiAoVGFibGVSdW50aW1lLmlzVXBkYXRhYmxlQ29udGV4dCh1cGRhdGFibGVQcm9wZXJ0eVBhdGgsIHNlbGVjdGVkQ29udGV4dCwgcmVhZE9ubHlEcmFmdEVuYWJsZWQpKSB7XG5cdFx0XHRcdHVwZGF0YWJsZUNvbnRleHRzLnB1c2goc2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvdXBkYXRhYmxlQ29udGV4dHNcIiwgdXBkYXRhYmxlQ29udGV4dHMpO1xuXG5cdFx0aWYgKHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0ZUVuYWJsZW1lbnQgJiYgY29udGV4dE1lbnVTZWxlY3Rpb24ubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRUYWJsZVJ1bnRpbWUuX3VwZGF0ZUNyZWF0ZUVuYWJsZW1lbnQoXG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHR0YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVFbmFibGVtZW50LFxuXHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0Y29udGV4dE1lbnVTZWxlY3Rpb25bMF0sXG5cdFx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm5vZGVUeXBlLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdFRhYmxlUnVudGltZS51cGRhdGVDdXRDb3B5UGFzdGVFbmFibGVtZW50KGludGVybmFsTW9kZWxDb250ZXh0LmdldE9iamVjdCgpLCB0YWJsZSwgdHJ1ZSk7XG5cdFx0VGFibGVSdW50aW1lLnVwZGF0ZU1vdmVVcERvd25FbmFibGVtZW50KGludGVybmFsTW9kZWxDb250ZXh0LmdldE9iamVjdCgpLCB0YWJsZSwgdHJ1ZSk7XG5cblx0XHQvLyBPdGhlciBhY3Rpb24gZW5hYmxlbWVudFxuXHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0SlNPTi5wYXJzZSh0YWJsZURlZmluaXRpb24ub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRcInRhYmxlXCIsXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0fVxuXG5cdGdldFJlbGV2YW50U2VsZWN0aW9uKHRhYmxlQ29udGV4dHM6IENvbnRleHRbXSwgY29udGV4dE1lbnVDb250ZXh0OiBDb250ZXh0KTogQ29udGV4dFtdIHtcblx0XHRsZXQgY29udGV4dE1lbnVTZWxlY3Rpb246IENvbnRleHRbXTtcblx0XHRpZiAodGFibGVDb250ZXh0cy5pbmNsdWRlcyhjb250ZXh0TWVudUNvbnRleHQpKSB7XG5cdFx0XHRjb250ZXh0TWVudVNlbGVjdGlvbiA9IHRhYmxlQ29udGV4dHM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRleHRNZW51U2VsZWN0aW9uID0gW2NvbnRleHRNZW51Q29udGV4dF0gYXMgQ29udGV4dFtdO1xuXHRcdH1cblx0XHRyZXR1cm4gY29udGV4dE1lbnVTZWxlY3Rpb247XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztNQXNCcUJBLGtCQUFrQjtJQUFBLFNBQUFBLG1CQUFBO01BQUEsS0FDNUJDLGlCQUFpQixHQUFHLEtBQUs7SUFBQTtJQUFBQyxRQUFBLEdBQUFGLGtCQUFB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
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { type IInterfaceWithMixin } from "sap/fe/base/ClassSupport";
|
|
2
2
|
import ActionRuntime from "sap/fe/core/ActionRuntime";
|
|
3
3
|
import CommonUtils from "sap/fe/core/CommonUtils";
|
|
4
|
+
import { CreationMode } from "sap/fe/core/converters/ManifestSettings";
|
|
4
5
|
import deleteHelper from "sap/fe/core/helpers/DeleteHelper";
|
|
5
6
|
import type { InternalModelContext } from "sap/fe/core/helpers/ModelHelper";
|
|
6
7
|
import ModelHelper from "sap/fe/core/helpers/ModelHelper";
|
|
7
8
|
import { generate } from "sap/fe/core/helpers/StableIdHelper";
|
|
9
|
+
import type TableAPI from "sap/fe/macros/Table";
|
|
8
10
|
import type Button from "sap/m/Button";
|
|
9
11
|
import type Menu from "sap/m/Menu";
|
|
10
12
|
import type MenuButton from "sap/m/MenuButton";
|
|
@@ -62,6 +64,25 @@ export default class ContextMenuHandler implements IInterfaceWithMixin {
|
|
|
62
64
|
}
|
|
63
65
|
}
|
|
64
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Hide all context menu actions except delete.
|
|
69
|
+
* @param table The MDCTable
|
|
70
|
+
*/
|
|
71
|
+
hideAllContextMenuActionsExceptDelete(table: MDCTable): void {
|
|
72
|
+
const contextMenu = table.getContextMenu() as Menu;
|
|
73
|
+
const menuItems = contextMenu.getItems();
|
|
74
|
+
const deleteAction = table.getActions().find((action) => action.getId().endsWith("StandardAction::Delete::ActionToolbarAction"));
|
|
75
|
+
const deleteVisible = (deleteAction as ActionToolbarAction)?.getAction().getVisible() ?? true;
|
|
76
|
+
menuItems.forEach((menuItem) => {
|
|
77
|
+
// Check if the menu item is the delete action
|
|
78
|
+
if (menuItem.getId().includes("StandardAction::Delete::ContextMenu")) {
|
|
79
|
+
menuItem.setVisible(deleteVisible);
|
|
80
|
+
} else {
|
|
81
|
+
menuItem.setVisible(false);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
65
86
|
/**
|
|
66
87
|
* Check if the action item has been created by a Combine RTA changes in the table toolbar.
|
|
67
88
|
* @param actionItem The action to check
|
|
@@ -304,7 +325,7 @@ export default class ContextMenuHandler implements IInterfaceWithMixin {
|
|
|
304
325
|
}
|
|
305
326
|
|
|
306
327
|
/**
|
|
307
|
-
* Handler
|
|
328
|
+
* Handler for the beforeOpenContextMenu event of the MDC Table.
|
|
308
329
|
* @param oEvent
|
|
309
330
|
*/
|
|
310
331
|
_onContextMenuPress(this: ITableBlock & ContextMenuHandler, oEvent: Table$BeforeOpenContextMenuEvent): void {
|
|
@@ -326,16 +347,39 @@ export default class ContextMenuHandler implements IInterfaceWithMixin {
|
|
|
326
347
|
const activeSelectedContexts = contextMenuSelection.filter(function (oContext: Context) {
|
|
327
348
|
return !oContext.isInactive();
|
|
328
349
|
});
|
|
350
|
+
const onlyInActiveContextsSelected = contextMenuSelection.length > 0 && activeSelectedContexts.length === 0;
|
|
351
|
+
const isInlineCreationMode =
|
|
352
|
+
(table.getParent() as TableAPI & { getCreationMode: Function })?.getCreationMode().getName() ===
|
|
353
|
+
CreationMode.InlineCreationRows;
|
|
354
|
+
const tableDefinition = this.getTableDefinition();
|
|
355
|
+
const navigableContexts = contextMenuSelection.filter(function (oContext: Context) {
|
|
356
|
+
return (
|
|
357
|
+
!oContext.isInactive() &&
|
|
358
|
+
oContext
|
|
359
|
+
.getModel()
|
|
360
|
+
?.getLocalAnnotationModel()
|
|
361
|
+
.getProperty(
|
|
362
|
+
"@$ui5.fe.virtual.routeNavigable-" +
|
|
363
|
+
(tableDefinition.annotation.row?.navigationInfo as { routePath?: string })?.routePath,
|
|
364
|
+
oContext
|
|
365
|
+
) !== false
|
|
366
|
+
);
|
|
367
|
+
});
|
|
329
368
|
internalModelContext?.setProperty("contextmenu/selectedContextsIncludingInactive", contextMenuSelection);
|
|
330
369
|
internalModelContext?.setProperty("contextmenu/selectedContexts", activeSelectedContexts);
|
|
370
|
+
internalModelContext?.setProperty("contextmenu/navigableContexts", navigableContexts);
|
|
331
371
|
//reset number of selected contexts to ensure callback for custom enable handler
|
|
332
372
|
internalModelContext?.setProperty("contextmenu/numberOfSelectedContexts", -1);
|
|
373
|
+
internalModelContext?.setProperty("contextmenu/numberOfNavigableContexts", navigableContexts.length);
|
|
333
374
|
internalModelContext?.setProperty("contextmenu/numberOfSelectedContexts", activeSelectedContexts.length);
|
|
334
375
|
internalModelContext?.setProperty("contextmenu/numberOfSelectedContextsForDelete", contextMenuSelection.length);
|
|
335
376
|
|
|
336
377
|
if (activeSelectedContexts.length > 0) {
|
|
337
378
|
/* Align context menu with RTA changes in table toolbar */
|
|
338
379
|
this.alignContextMenuWithTableToolbarChanges(table);
|
|
380
|
+
} else if (onlyInActiveContextsSelected && isInlineCreationMode) {
|
|
381
|
+
// Only Delete is visible
|
|
382
|
+
this.hideAllContextMenuActionsExceptDelete(table);
|
|
339
383
|
}
|
|
340
384
|
|
|
341
385
|
// Set the visibility of the MenuItem for Collaboration Manager
|
|
@@ -379,7 +423,6 @@ export default class ContextMenuHandler implements IInterfaceWithMixin {
|
|
|
379
423
|
}
|
|
380
424
|
internalModelContext?.setProperty("contextmenu/updatableContexts", updatableContexts);
|
|
381
425
|
|
|
382
|
-
const tableDefinition = this.getTableDefinition();
|
|
383
426
|
if (tableDefinition.control.createEnablement && contextMenuSelection.length === 1) {
|
|
384
427
|
TableRuntime._updateCreateEnablement(
|
|
385
428
|
internalModelContext,
|