@sapui5/sap.fe.core 1.111.0 → 1.112.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime-dbg.js +4 -4
- package/src/sap/fe/core/ActionRuntime.js +1 -1
- package/src/sap/fe/core/ActionRuntime.js.map +1 -1
- package/src/sap/fe/core/ActionRuntime.ts +11 -11
- package/src/sap/fe/core/AppComponent-dbg.js +27 -5
- package/src/sap/fe/core/AppComponent.js +1 -1
- package/src/sap/fe/core/AppComponent.js.map +1 -1
- package/src/sap/fe/core/AppComponent.ts +58 -3
- package/src/sap/fe/core/AppStateHandler-dbg.js +5 -2
- package/src/sap/fe/core/AppStateHandler.js +1 -1
- package/src/sap/fe/core/AppStateHandler.js.map +1 -1
- package/src/sap/fe/core/AppStateHandler.ts +10 -1
- package/src/sap/fe/core/BaseController-dbg.js +1 -1
- package/src/sap/fe/core/BaseController.ts +2 -1
- package/src/sap/fe/core/CommonUtils-dbg.js +152 -365
- package/src/sap/fe/core/CommonUtils.js +1 -1
- package/src/sap/fe/core/CommonUtils.js.map +1 -1
- package/src/sap/fe/core/CommonUtils.ts +201 -478
- package/src/sap/fe/core/ExtensionAPI-dbg.js +2 -1
- package/src/sap/fe/core/ExtensionAPI.js +1 -1
- package/src/sap/fe/core/ExtensionAPI.js.map +1 -1
- package/src/sap/fe/core/ExtensionAPI.ts +9 -1
- package/src/sap/fe/core/PageController-dbg.js +26 -31
- package/src/sap/fe/core/PageController.js +1 -1
- package/src/sap/fe/core/PageController.js.map +1 -1
- package/src/sap/fe/core/PageController.ts +17 -3
- package/src/sap/fe/core/ResourceModel-dbg.js +71 -0
- package/src/sap/fe/core/ResourceModel.js +6 -0
- package/src/sap/fe/core/ResourceModel.js.map +1 -0
- package/src/sap/fe/core/ResourceModel.ts +67 -0
- package/src/sap/fe/core/TemplateComponent-dbg.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +1 -0
- package/src/sap/fe/core/TemplateModel-dbg.js +1 -1
- package/src/sap/fe/core/TemplateModel.ts +6 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel-dbg.js +5 -7
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +6 -5
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase-dbg.js +163 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +6 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +169 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport-dbg.js +88 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js +6 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.ts +147 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor-dbg.js +905 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js +21 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/{BuildingBlockRuntime.ts → BuildingBlockTemplateProcessor.ts} +279 -335
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock-dbg.js +79 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js +15 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.ts +68 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment-dbg.js +162 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js +6 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.ts +181 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo-dbg.js +4 -2
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +1 -1
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +5 -3
- package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +890 -220
- package/src/sap/fe/core/controllerextensions/EditFlow.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +974 -239
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +24 -34
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +71 -61
- package/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +14 -17
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +23 -17
- package/src/sap/fe/core/controllerextensions/KPIManagement-dbg.js +1 -1
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -0
- package/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +3 -3
- package/src/sap/fe/core/controllerextensions/MassEdit.js +1 -1
- package/src/sap/fe/core/controllerextensions/MassEdit.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +2 -2
- package/src/sap/fe/core/controllerextensions/MessageHandler-dbg.js +2 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +2 -0
- package/src/sap/fe/core/controllerextensions/PageReady-dbg.js +1 -1
- package/src/sap/fe/core/controllerextensions/PageReady.ts +24 -0
- package/src/sap/fe/core/controllerextensions/Paginator-dbg.js +2 -1
- package/src/sap/fe/core/controllerextensions/Paginator.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/Paginator.ts +7 -0
- package/src/sap/fe/core/controllerextensions/Placeholder-dbg.js +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +8 -0
- package/src/sap/fe/core/controllerextensions/Share-dbg.js +8 -1
- package/src/sap/fe/core/controllerextensions/Share.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/Share.ts +11 -0
- package/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +14 -13
- package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +27 -27
- package/src/sap/fe/core/controllerextensions/ViewState-dbg.js +17 -8
- package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.ts +35 -14
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase-dbg.js +6 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +7 -4
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync-dbg.js +285 -82
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +326 -89
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon-dbg.js +23 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +32 -3
- package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +2 -3
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +17 -3
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block-dbg.js +65 -34
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +1 -1
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +33 -18
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +45 -31
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +52 -42
- package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +44 -49
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +43 -63
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal-dbg.js +77 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +6 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +114 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade-dbg.js +1505 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +6 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +1985 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations-dbg.js +3 -1415
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +2 -1921
- package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +10 -11
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +9 -13
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +43 -41
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +1 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +44 -47
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher-dbg.js +12 -1
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.ts +19 -0
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy-dbg.js +12 -13
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +32 -13
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +4 -1
- package/src/sap/fe/core/controls/CommandExecution-dbg.js +16 -5
- package/src/sap/fe/core/controls/CommandExecution.js +1 -1
- package/src/sap/fe/core/controls/CommandExecution.js.map +1 -1
- package/src/sap/fe/core/controls/CommandExecution.ts +15 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +3 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +1 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js.map +1 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +4 -1
- package/src/sap/fe/core/controls/FilterBar-dbg.js +1 -1
- package/src/sap/fe/core/controls/FilterBar.ts +5 -0
- package/src/sap/fe/core/controls/FormElementWrapper-dbg.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +3 -0
- package/src/sap/fe/core/controls/filterbar/FilterContainer-dbg.js +1 -1
- package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +7 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +1 -1
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +4 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer-dbg.js +1 -1
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +10 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +4 -3
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js.map +1 -1
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +3 -2
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +0 -1
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +2 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers-dbg.js +6 -1
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +1 -1
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js.map +1 -1
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +5 -0
- package/src/sap/fe/core/converters/ConverterContext-dbg.js +1 -1
- package/src/sap/fe/core/converters/ConverterContext.ts +2 -1
- package/src/sap/fe/core/converters/ManifestSettings-dbg.js +1 -8
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.js.map +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +15 -6
- package/src/sap/fe/core/converters/ManifestWrapper-dbg.js +17 -1
- package/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
- package/src/sap/fe/core/converters/ManifestWrapper.js.map +1 -1
- package/src/sap/fe/core/converters/ManifestWrapper.ts +16 -0
- package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +61 -49
- package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
- package/src/sap/fe/core/converters/MetaModelConverter.js.map +1 -1
- package/src/sap/fe/core/converters/MetaModelConverter.ts +65 -51
- package/src/sap/fe/core/converters/TemplateConverter-dbg.js +2 -1
- package/src/sap/fe/core/converters/TemplateConverter.js.map +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
- package/src/sap/fe/core/converters/annotations/DataField-dbg.js +65 -16
- package/src/sap/fe/core/converters/annotations/DataField.js +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.js.map +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.ts +62 -18
- package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +1010 -957
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1 -1
- package/src/sap/fe/core/converters/common/AnnotationConverter.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Action-dbg.js +8 -8
- package/src/sap/fe/core/converters/controls/Common/Action.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Action.ts +28 -26
- package/src/sap/fe/core/converters/controls/Common/Chart-dbg.js +95 -33
- package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +133 -49
- package/src/sap/fe/core/converters/controls/Common/DataVisualization-dbg.js +99 -62
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +140 -75
- package/src/sap/fe/core/converters/controls/Common/Form-dbg.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Form.ts +3 -3
- package/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +6 -6
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +15 -15
- package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +97 -69
- package/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.ts +161 -137
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +10 -9
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +48 -44
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +130 -86
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +34 -26
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +62 -45
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar-dbg.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet-dbg.js +6 -6
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +5 -8
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection-dbg.js +34 -13
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +54 -20
- package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +3 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +8 -0
- package/src/sap/fe/core/converters/helpers/ConfigurableObject-dbg.js +7 -6
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js.map +1 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +19 -10
- package/src/sap/fe/core/converters/helpers/DataFieldHelper-dbg.js +1 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +7 -2
- package/src/sap/fe/core/converters/helpers/ID-dbg.js +1 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +2 -1
- package/src/sap/fe/core/converters/helpers/IssueManager-dbg.js +9 -8
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.js.map +1 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.ts +8 -7
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +8 -7
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js.map +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +9 -6
- package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +25 -33
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.js.map +1 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +35 -35
- package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +11 -4
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js.map +1 -1
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +7 -1
- package/src/sap/fe/core/formatters/FPMFormatter-dbg.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
- package/src/sap/fe/core/formatters/FiscalFormat-dbg.js +2 -2
- package/src/sap/fe/core/formatters/FiscalFormat.ts +6 -1
- package/src/sap/fe/core/formatters/TableFormatter-dbg.js +2 -2
- package/src/sap/fe/core/formatters/TableFormatter.js +1 -1
- package/src/sap/fe/core/formatters/TableFormatter.js.map +1 -1
- package/src/sap/fe/core/formatters/TableFormatter.ts +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +5 -5
- package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js.map +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.ts +6 -4
- package/src/sap/fe/core/fpm/Component-dbg.js +1 -1
- package/src/sap/fe/core/fpm/Component.ts +1 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper-dbg.js +2 -2
- package/src/sap/fe/core/helpers/AppStartupHelper.js +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +6 -6
- package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit.ts +8 -8
- package/src/sap/fe/core/helpers/ClassSupport-dbg.js +1 -1
- package/src/sap/fe/core/helpers/ClassSupport.js.map +1 -1
- package/src/sap/fe/core/helpers/ClassSupport.ts +1 -0
- package/src/sap/fe/core/helpers/DeleteHelper-dbg.js +93 -62
- package/src/sap/fe/core/helpers/DeleteHelper.js +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.ts +140 -185
- package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +20 -18
- package/src/sap/fe/core/helpers/MassEditHelper.js +1 -1
- package/src/sap/fe/core/helpers/MassEditHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/MassEditHelper.ts +22 -23
- package/src/sap/fe/core/helpers/MessageStrip-dbg.js +4 -5
- package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
- package/src/sap/fe/core/helpers/MessageStrip.js.map +1 -1
- package/src/sap/fe/core/helpers/MessageStrip.ts +4 -4
- package/src/sap/fe/core/helpers/MetaModelFunction-dbg.js +354 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.js +6 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.js.map +1 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +408 -0
- package/src/sap/fe/core/helpers/ModelHelper-dbg.js +13 -13
- package/src/sap/fe/core/helpers/ModelHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +13 -13
- package/src/sap/fe/core/helpers/PasteHelper-dbg.js +5 -5
- package/src/sap/fe/core/helpers/PasteHelper.js +1 -1
- package/src/sap/fe/core/helpers/PasteHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/PasteHelper.ts +6 -10
- package/src/sap/fe/core/helpers/ResourceModelHelper-dbg.js +26 -0
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +6 -0
- package/src/sap/fe/core/helpers/ResourceModelHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +19 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +93 -18
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.js.map +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +70 -17
- package/src/sap/fe/core/helpers/SemanticKeyHelper-dbg.js +2 -2
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
- package/src/sap/fe/core/helpers/Synchronization-dbg.js +1 -1
- package/src/sap/fe/core/helpers/Synchronization.ts +2 -0
- package/src/sap/fe/core/helpers/TypeGuards-dbg.js +5 -1
- package/src/sap/fe/core/helpers/TypeGuards.js +1 -1
- package/src/sap/fe/core/helpers/TypeGuards.js.map +1 -1
- package/src/sap/fe/core/helpers/TypeGuards.ts +12 -1
- package/src/sap/fe/core/jsx-runtime/ViewLoader-dbg.js +2 -1
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js.map +1 -1
- package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +6 -2
- package/src/sap/fe/core/jsx-runtime/jsx-control-dbg.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +3 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents-dbg.js +3 -3
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +1 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js.map +1 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +1 -1
- package/src/sap/fe/core/library-dbg.js +2 -2
- package/src/sap/fe/core/library-preload.js +127 -125
- package/src/sap/fe/core/library-preload.js.map +1 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/library.ts +7 -0
- package/src/sap/fe/core/manifest.json +1 -1
- package/src/sap/fe/core/messagebundle.properties +33 -0
- package/src/sap/fe/core/messagebundle_ar.properties +12 -10
- package/src/sap/fe/core/messagebundle_bg.properties +11 -9
- package/src/sap/fe/core/messagebundle_ca.properties +11 -9
- package/src/sap/fe/core/messagebundle_cs.properties +11 -9
- package/src/sap/fe/core/messagebundle_cy.properties +11 -9
- package/src/sap/fe/core/messagebundle_da.properties +11 -9
- package/src/sap/fe/core/messagebundle_de.properties +3 -1
- package/src/sap/fe/core/messagebundle_el.properties +11 -9
- package/src/sap/fe/core/messagebundle_en.properties +3 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +2 -0
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +2 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +20 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +21 -3
- package/src/sap/fe/core/messagebundle_es.properties +11 -9
- package/src/sap/fe/core/messagebundle_es_MX.properties +11 -9
- package/src/sap/fe/core/messagebundle_et.properties +11 -9
- package/src/sap/fe/core/messagebundle_fi.properties +11 -9
- package/src/sap/fe/core/messagebundle_fr.properties +11 -9
- package/src/sap/fe/core/messagebundle_fr_CA.properties +3 -1
- package/src/sap/fe/core/messagebundle_hi.properties +2 -0
- package/src/sap/fe/core/messagebundle_hr.properties +11 -9
- package/src/sap/fe/core/messagebundle_hu.properties +11 -9
- package/src/sap/fe/core/messagebundle_id.properties +3 -1
- package/src/sap/fe/core/messagebundle_it.properties +11 -9
- package/src/sap/fe/core/messagebundle_iw.properties +11 -9
- package/src/sap/fe/core/messagebundle_ja.properties +11 -9
- package/src/sap/fe/core/messagebundle_kk.properties +11 -9
- package/src/sap/fe/core/messagebundle_ko.properties +2 -0
- package/src/sap/fe/core/messagebundle_lt.properties +11 -9
- package/src/sap/fe/core/messagebundle_lv.properties +2 -0
- package/src/sap/fe/core/messagebundle_ms.properties +12 -10
- package/src/sap/fe/core/messagebundle_nl.properties +12 -10
- package/src/sap/fe/core/messagebundle_no.properties +11 -9
- package/src/sap/fe/core/messagebundle_pl.properties +2 -0
- package/src/sap/fe/core/messagebundle_pt.properties +11 -9
- package/src/sap/fe/core/messagebundle_pt_PT.properties +11 -9
- package/src/sap/fe/core/messagebundle_ro.properties +3 -1
- package/src/sap/fe/core/messagebundle_ru.properties +3 -1
- package/src/sap/fe/core/messagebundle_sh.properties +11 -9
- package/src/sap/fe/core/messagebundle_sk.properties +11 -9
- package/src/sap/fe/core/messagebundle_sl.properties +11 -9
- package/src/sap/fe/core/messagebundle_sv.properties +2 -0
- package/src/sap/fe/core/messagebundle_th.properties +11 -9
- package/src/sap/fe/core/messagebundle_tr.properties +11 -9
- package/src/sap/fe/core/messagebundle_uk.properties +11 -9
- package/src/sap/fe/core/messagebundle_vi.properties +12 -10
- package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -0
- package/src/sap/fe/core/operationsHelper-dbg.js +70 -44
- package/src/sap/fe/core/operationsHelper.js +1 -1
- package/src/sap/fe/core/operationsHelper.js.map +1 -1
- package/src/sap/fe/core/operationsHelper.ts +88 -63
- package/src/sap/fe/core/rootView/Fcl-dbg.controller.js +1 -1
- package/src/sap/fe/core/rootView/Fcl.controller.ts +10 -0
- package/src/sap/fe/core/rootView/NavContainer-dbg.controller.js +2 -2
- package/src/sap/fe/core/rootView/NavContainer.controller.js +1 -1
- package/src/sap/fe/core/rootView/NavContainer.controller.js.map +1 -1
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +5 -3
- package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +4 -3
- package/src/sap/fe/core/rootView/RootViewBaseController.js +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js.map +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +15 -5
- package/src/sap/fe/core/services/AsyncComponentServiceFactory-dbg.js +1 -1
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory-dbg.js +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +15 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +4 -1
- package/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +9 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +19 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory-dbg.js +2 -2
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +10 -3
- package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +3 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +29 -3
- package/src/sap/fe/core/services/ShellServicesFactory-dbg.js +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.ts +14 -2
- package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +448 -279
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +502 -333
- package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +18 -5
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +41 -12
- package/src/sap/fe/core/support/Diagnostics-dbg.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.ts +5 -0
- package/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +185 -86
- package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js.map +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +190 -82
- package/src/sap/fe/core/templating/DisplayModeFormatter-dbg.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper-dbg.js +2 -3
- package/src/sap/fe/core/templating/EntitySetHelper.js +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js.map +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.ts +1 -3
- package/src/sap/fe/core/templating/FilterHelper-dbg.js +3 -3
- package/src/sap/fe/core/templating/FilterHelper.js +1 -1
- package/src/sap/fe/core/templating/FilterHelper.js.map +1 -1
- package/src/sap/fe/core/templating/FilterHelper.ts +5 -3
- package/src/sap/fe/core/templating/PropertyHelper-dbg.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.ts +2 -2
- package/src/sap/fe/core/templating/UIFormatters-dbg.js +1 -1
- package/src/sap/fe/core/templating/UIFormatters.ts +4 -0
- package/src/sap/fe/core/type/DateTimeWithTimezone-dbg.js +1 -1
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +2 -0
- package/src/sap/fe/core/type/FiscalDate-dbg.js +2 -2
- package/src/sap/fe/core/type/FiscalDate.js.map +1 -1
- package/src/sap/fe/core/type/FiscalDate.ts +2 -1
- package/src/sap/fe/core/type/TypeUtil-dbg.js +5 -10
- package/src/sap/fe/core/type/TypeUtil.js +1 -1
- package/src/sap/fe/core/type/TypeUtil.js.map +1 -1
- package/src/sap/fe/core/type/TypeUtil.ts +3 -6
- package/src/sap/fe/core/buildingBlocks/BuildingBlock-dbg.js +0 -410
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +0 -15
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js.map +0 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +0 -536
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment-dbg.js +0 -44
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js +0 -6
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js.map +0 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.ts +0 -14
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime-dbg.js +0 -932
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +0 -19
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js.map +0 -1
- package/src/sap/fe/core/controllerextensions/InternalEditFlow-dbg.js +0 -711
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +0 -6
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js.map +0 -1
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +0 -863
- package/src/sap/fe/core/controls/ConditionalWrapper-dbg.js +0 -151
- package/src/sap/fe/core/controls/ConditionalWrapper.js +0 -6
- package/src/sap/fe/core/controls/ConditionalWrapper.js.map +0 -1
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +0 -88
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper-dbg.js +0 -330
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +0 -6
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js.map +0 -1
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +0 -292
- package/src/sap/fe/core/controls/CustomQuickViewPage-dbg.js +0 -126
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +0 -6
- package/src/sap/fe/core/controls/CustomQuickViewPage.js.map +0 -1
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +0 -105
- package/src/sap/fe/core/controls/FieldWrapper-dbg.js +0 -194
- package/src/sap/fe/core/controls/FieldWrapper.js +0 -6
- package/src/sap/fe/core/controls/FieldWrapper.js.map +0 -1
- package/src/sap/fe/core/controls/FieldWrapper.ts +0 -121
- package/src/sap/fe/core/controls/FileWrapper-dbg.js +0 -280
- package/src/sap/fe/core/controls/FileWrapper.js +0 -6
- package/src/sap/fe/core/controls/FileWrapper.js.map +0 -1
- package/src/sap/fe/core/controls/FileWrapper.ts +0 -202
- package/src/sap/fe/core/helpers/SideEffectsHelper-dbg.js +0 -141
- package/src/sap/fe/core/helpers/SideEffectsHelper.js +0 -6
- package/src/sap/fe/core/helpers/SideEffectsHelper.js.map +0 -1
- package/src/sap/fe/core/helpers/SideEffectsHelper.ts +0 -129
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2023 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/editFlow/draft", "sap/m/CheckBox", "sap/m/MessageToast", "sap/m/Text"], function (Log, draft, CheckBox, MessageToast, Text) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
@@ -13,6 +13,7 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/edit
|
|
|
13
13
|
DeleteOptionTypes["createModeContexts"] = "createModeContexts";
|
|
14
14
|
DeleteOptionTypes["unSavedContexts"] = "unSavedContexts";
|
|
15
15
|
DeleteOptionTypes["draftsWithNonDeletableActive"] = "draftsWithNonDeletableActive";
|
|
16
|
+
DeleteOptionTypes["draftsToDeleteBeforeActive"] = "draftsToDeleteBeforeActive";
|
|
16
17
|
})(DeleteOptionTypes || (DeleteOptionTypes = {}));
|
|
17
18
|
_exports.DeleteOptionTypes = DeleteOptionTypes;
|
|
18
19
|
let DeleteDialogContentControl;
|
|
@@ -48,7 +49,7 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/edit
|
|
|
48
49
|
internalModelContext.setProperty("selectedContexts", selectedContexts);
|
|
49
50
|
internalModelContext.setProperty("numberOfSelectedContexts", selectedContexts.length);
|
|
50
51
|
}
|
|
51
|
-
function afterDeleteProcess(parameters, options, contexts,
|
|
52
|
+
function afterDeleteProcess(parameters, options, contexts, resourceModel) {
|
|
52
53
|
const {
|
|
53
54
|
internalModelContext,
|
|
54
55
|
entitySetName
|
|
@@ -66,41 +67,41 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/edit
|
|
|
66
67
|
internalModelContext.setProperty("deleteEnabled", options.some(option => !option.selected));
|
|
67
68
|
}
|
|
68
69
|
if (contexts.length === 1) {
|
|
69
|
-
MessageToast.show(
|
|
70
|
+
MessageToast.show(resourceModel.getText("C_TRANSACTION_HELPER_DELETE_TOAST_SINGULAR", undefined, entitySetName));
|
|
70
71
|
} else {
|
|
71
|
-
MessageToast.show(
|
|
72
|
+
MessageToast.show(resourceModel.getText("C_TRANSACTION_HELPER_DELETE_TOAST_PLURAL", undefined, entitySetName));
|
|
72
73
|
}
|
|
73
74
|
}
|
|
74
75
|
function getLockedContextUser(lockedContext) {
|
|
75
76
|
const draftAdminData = lockedContext.getObject()["DraftAdministrativeData"];
|
|
76
77
|
return draftAdminData && draftAdminData["InProcessByUser"] || "";
|
|
77
78
|
}
|
|
78
|
-
function getLockedObjectsText(
|
|
79
|
+
function getLockedObjectsText(resourceModel, numberOfSelectedContexts, lockedContexts) {
|
|
79
80
|
let retTxt = "";
|
|
80
81
|
if (numberOfSelectedContexts === 1 && lockedContexts.length === 1) {
|
|
81
82
|
//only one unsaved object
|
|
82
83
|
const lockedUser = getLockedContextUser(lockedContexts[0]);
|
|
83
|
-
retTxt =
|
|
84
|
+
retTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_SINGLE_OBJECT_LOCKED", [lockedUser]);
|
|
84
85
|
} else if (lockedContexts.length == 1) {
|
|
85
86
|
const lockedUser = getLockedContextUser(lockedContexts[0]);
|
|
86
|
-
retTxt =
|
|
87
|
+
retTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_ONE_OBJECT_LOCKED", [numberOfSelectedContexts, lockedUser]);
|
|
87
88
|
} else if (lockedContexts.length > 1) {
|
|
88
|
-
retTxt =
|
|
89
|
+
retTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_LOCKED", [lockedContexts.length, numberOfSelectedContexts]);
|
|
89
90
|
}
|
|
90
91
|
return retTxt;
|
|
91
92
|
}
|
|
92
|
-
function getNonDeletableActivesOfDraftsText(
|
|
93
|
+
function getNonDeletableActivesOfDraftsText(resourceModel, numberOfDrafts, totalDeletable) {
|
|
93
94
|
let retTxt = "";
|
|
94
95
|
if (totalDeletable === numberOfDrafts) {
|
|
95
96
|
if (numberOfDrafts === 1) {
|
|
96
|
-
retTxt =
|
|
97
|
+
retTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_ONLY_DRAFT_OF_NON_DELETABLE_ACTIVE");
|
|
97
98
|
} else {
|
|
98
|
-
retTxt =
|
|
99
|
+
retTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_ONLY_DRAFTS_OF_NON_DELETABLE_ACTIVE");
|
|
99
100
|
}
|
|
100
101
|
} else if (numberOfDrafts === 1) {
|
|
101
|
-
retTxt =
|
|
102
|
+
retTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_DRAFT_OF_NON_DELETABLE_ACTIVE");
|
|
102
103
|
} else {
|
|
103
|
-
retTxt =
|
|
104
|
+
retTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_DRAFTS_OF_NON_DELETABLE_ACTIVE");
|
|
104
105
|
}
|
|
105
106
|
return retTxt;
|
|
106
107
|
}
|
|
@@ -112,35 +113,35 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/edit
|
|
|
112
113
|
}
|
|
113
114
|
return sLastChangedByUser;
|
|
114
115
|
}
|
|
115
|
-
function getUnsavedContextsText(
|
|
116
|
+
function getUnsavedContextsText(resourceModel, numberOfSelectedContexts, unSavedContexts, totalDeletable) {
|
|
116
117
|
let infoTxt = "",
|
|
117
118
|
optionTxt = "",
|
|
118
119
|
optionWithoutTxt = false;
|
|
119
120
|
if (numberOfSelectedContexts === 1 && unSavedContexts.length === 1) {
|
|
120
121
|
//only one unsaved object are selected
|
|
121
122
|
const lastChangedByUser = getUnSavedContextUser(unSavedContexts[0]);
|
|
122
|
-
infoTxt =
|
|
123
|
+
infoTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_CHANGES", [lastChangedByUser]);
|
|
123
124
|
optionWithoutTxt = true;
|
|
124
125
|
} else if (numberOfSelectedContexts === unSavedContexts.length) {
|
|
125
126
|
//only multiple unsaved objects are selected
|
|
126
|
-
infoTxt =
|
|
127
|
+
infoTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_CHANGES_MULTIPLE_OBJECTS");
|
|
127
128
|
optionWithoutTxt = true;
|
|
128
129
|
} else if (totalDeletable === unSavedContexts.length) {
|
|
129
130
|
// non-deletable/locked exists, all deletable are unsaved by others
|
|
130
131
|
if (unSavedContexts.length === 1) {
|
|
131
132
|
const lastChangedByUser = getUnSavedContextUser(unSavedContexts[0]);
|
|
132
|
-
infoTxt =
|
|
133
|
+
infoTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_AND_FEW_OBJECTS_LOCKED_SINGULAR", [lastChangedByUser]);
|
|
133
134
|
} else {
|
|
134
|
-
infoTxt =
|
|
135
|
+
infoTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_AND_FEW_OBJECTS_LOCKED_PLURAL");
|
|
135
136
|
}
|
|
136
137
|
optionWithoutTxt = true;
|
|
137
138
|
} else if (totalDeletable > unSavedContexts.length) {
|
|
138
139
|
// non-deletable/locked exists, deletable include unsaved and other types.
|
|
139
140
|
if (unSavedContexts.length === 1) {
|
|
140
141
|
const lastChangedByUser = getUnSavedContextUser(unSavedContexts[0]);
|
|
141
|
-
optionTxt =
|
|
142
|
+
optionTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_UNSAVED_SINGULAR", [lastChangedByUser]);
|
|
142
143
|
} else {
|
|
143
|
-
optionTxt =
|
|
144
|
+
optionTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_UNSAVED_PLURAL");
|
|
144
145
|
}
|
|
145
146
|
}
|
|
146
147
|
return {
|
|
@@ -149,11 +150,11 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/edit
|
|
|
149
150
|
optionWithoutTxt
|
|
150
151
|
};
|
|
151
152
|
}
|
|
152
|
-
function getNonDeletableText(mParameters, totalNumDeletableContexts,
|
|
153
|
+
function getNonDeletableText(mParameters, totalNumDeletableContexts, resourceModel) {
|
|
153
154
|
const {
|
|
154
155
|
numberOfSelectedContexts,
|
|
155
|
-
lockedContexts,
|
|
156
|
-
draftsWithNonDeletableActive
|
|
156
|
+
lockedContexts = [],
|
|
157
|
+
draftsWithNonDeletableActive = []
|
|
157
158
|
} = mParameters;
|
|
158
159
|
const nonDeletableContexts = numberOfSelectedContexts - (lockedContexts.length + totalNumDeletableContexts - draftsWithNonDeletableActive.length);
|
|
159
160
|
let retTxt = "";
|
|
@@ -163,32 +164,40 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/edit
|
|
|
163
164
|
if (lockedContexts.length > 0) {
|
|
164
165
|
// Locked contexts exist
|
|
165
166
|
if (nonDeletableContexts === 1) {
|
|
166
|
-
retTxt =
|
|
167
|
+
retTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_ALL_REMAINING_NON_DELETABLE_SINGULAR");
|
|
167
168
|
} else {
|
|
168
|
-
retTxt =
|
|
169
|
+
retTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_ALL_REMAINING_NON_DELETABLE_PLURAL");
|
|
169
170
|
}
|
|
170
171
|
} else if (nonDeletableContexts === 1) {
|
|
171
172
|
// Only pure non-deletable contexts exist single
|
|
172
|
-
retTxt =
|
|
173
|
+
retTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_SINGLE_AND_ONE_OBJECT_NON_DELETABLE");
|
|
173
174
|
} else {
|
|
174
175
|
// Only pure non-deletable contexts exist multiple
|
|
175
|
-
retTxt =
|
|
176
|
+
retTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_MULTIPLE_AND_ALL_OBJECT_NON_DELETABLE");
|
|
176
177
|
}
|
|
177
178
|
} else if (nonDeletableContexts === 1) {
|
|
178
179
|
// deletable and non-deletable exists together, single
|
|
179
|
-
retTxt =
|
|
180
|
+
retTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_ONE_OBJECT_NON_DELETABLE", [numberOfSelectedContexts]);
|
|
180
181
|
} else if (nonDeletableContexts > 1) {
|
|
181
182
|
// deletable and non-deletable exists together, multiple
|
|
182
|
-
retTxt =
|
|
183
|
+
retTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_NON_DELETABLE", [nonDeletableContexts, numberOfSelectedContexts]);
|
|
183
184
|
}
|
|
184
|
-
return retTxt
|
|
185
|
+
return retTxt ? new Text({
|
|
186
|
+
text: retTxt
|
|
187
|
+
}) : undefined;
|
|
185
188
|
}
|
|
186
189
|
function getConfirmedDeletableContext(contexts, options) {
|
|
187
190
|
return options.reduce((result, option) => {
|
|
188
|
-
return option.selected ? result.concat(option.contexts) : result;
|
|
191
|
+
return option.selected && option.type !== DeleteOptionTypes.draftsToDeleteBeforeActive ? result.concat(option.contexts) : result;
|
|
189
192
|
}, contexts);
|
|
190
193
|
}
|
|
191
|
-
function
|
|
194
|
+
function getDraftsToDeleteBeforeActive(options) {
|
|
195
|
+
const contexts = [];
|
|
196
|
+
return options.reduce((result, option) => {
|
|
197
|
+
return option.selected && option.type === DeleteOptionTypes.draftsToDeleteBeforeActive ? result.concat(option.contexts) : result;
|
|
198
|
+
}, contexts);
|
|
199
|
+
}
|
|
200
|
+
function updateDraftOptionsForDeletableTexts(mParameters, vContexts, totalDeletable, resourceModel, items, options) {
|
|
192
201
|
const {
|
|
193
202
|
numberOfSelectedContexts,
|
|
194
203
|
draftsWithDeletableActive,
|
|
@@ -197,14 +206,25 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/edit
|
|
|
197
206
|
lockedContexts,
|
|
198
207
|
draftsWithNonDeletableActive
|
|
199
208
|
} = mParameters;
|
|
200
|
-
let
|
|
201
|
-
lockedContextsTxt = "";
|
|
209
|
+
let lockedContextsTxt = "";
|
|
202
210
|
|
|
203
211
|
// drafts with active
|
|
204
212
|
if (draftsWithDeletableActive.length > 0) {
|
|
213
|
+
const draftsToDeleteBeforeActive = [];
|
|
205
214
|
draftsWithDeletableActive.forEach(deletableDraftInfo => {
|
|
215
|
+
if (deletableDraftInfo.draft.getProperty("DraftAdministrativeData/InProcessByUser")) {
|
|
216
|
+
// If an own draft is locked then the draft needs to be discarded before deleting active record.
|
|
217
|
+
draftsToDeleteBeforeActive.push(deletableDraftInfo.draft);
|
|
218
|
+
}
|
|
206
219
|
vContexts.push(deletableDraftInfo.siblingInfo.targetContext);
|
|
207
220
|
});
|
|
221
|
+
if (draftsToDeleteBeforeActive.length > 0) {
|
|
222
|
+
options.push({
|
|
223
|
+
type: DeleteOptionTypes.draftsToDeleteBeforeActive,
|
|
224
|
+
contexts: draftsToDeleteBeforeActive,
|
|
225
|
+
selected: true
|
|
226
|
+
});
|
|
227
|
+
}
|
|
208
228
|
}
|
|
209
229
|
|
|
210
230
|
// create mode drafts
|
|
@@ -215,23 +235,22 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/edit
|
|
|
215
235
|
|
|
216
236
|
// items locked msg
|
|
217
237
|
if (lockedContexts.length > 0) {
|
|
218
|
-
lockedContextsTxt = deleteHelper.getLockedObjectsText(
|
|
238
|
+
lockedContextsTxt = deleteHelper.getLockedObjectsText(resourceModel, numberOfSelectedContexts, lockedContexts) || "";
|
|
219
239
|
items.push(new Text({
|
|
220
240
|
text: lockedContextsTxt
|
|
221
241
|
}));
|
|
222
242
|
}
|
|
223
243
|
|
|
224
244
|
// non deletable msg
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
}));
|
|
245
|
+
const nonDeletableExists = numberOfSelectedContexts != totalDeletable - draftsWithNonDeletableActive.length + lockedContexts.length;
|
|
246
|
+
const nonDeletableTextCtrl = nonDeletableExists && deleteHelper.getNonDeletableText(mParameters, totalDeletable, resourceModel);
|
|
247
|
+
if (nonDeletableTextCtrl) {
|
|
248
|
+
items.push(nonDeletableTextCtrl);
|
|
230
249
|
}
|
|
231
250
|
|
|
232
251
|
// option: unsaved changes by others
|
|
233
252
|
if (unSavedContexts.length > 0) {
|
|
234
|
-
const unsavedChangesTxts = deleteHelper.getUnsavedContextsText(
|
|
253
|
+
const unsavedChangesTxts = deleteHelper.getUnsavedContextsText(resourceModel, numberOfSelectedContexts, unSavedContexts, totalDeletable) || {};
|
|
235
254
|
if (unsavedChangesTxts.infoTxt) {
|
|
236
255
|
items.push(new Text({
|
|
237
256
|
text: unsavedChangesTxts.infoTxt
|
|
@@ -250,7 +269,7 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/edit
|
|
|
250
269
|
|
|
251
270
|
// option: drafts with active not deletable
|
|
252
271
|
if (draftsWithNonDeletableActive.length > 0) {
|
|
253
|
-
const nonDeletableActivesOfDraftsText = deleteHelper.getNonDeletableActivesOfDraftsText(
|
|
272
|
+
const nonDeletableActivesOfDraftsText = deleteHelper.getNonDeletableActivesOfDraftsText(resourceModel, draftsWithNonDeletableActive.length, totalDeletable) || "";
|
|
254
273
|
if (nonDeletableActivesOfDraftsText) {
|
|
255
274
|
options.push({
|
|
256
275
|
type: DeleteOptionTypes.draftsWithNonDeletableActive,
|
|
@@ -298,7 +317,7 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/edit
|
|
|
298
317
|
});
|
|
299
318
|
}
|
|
300
319
|
}
|
|
301
|
-
function updateOptionsForDeletableTexts(mParameters, directDeletableContexts,
|
|
320
|
+
function updateOptionsForDeletableTexts(mParameters, directDeletableContexts, resourceModel, options) {
|
|
302
321
|
const {
|
|
303
322
|
numberOfSelectedContexts,
|
|
304
323
|
entitySetName,
|
|
@@ -326,15 +345,12 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/edit
|
|
|
326
345
|
} else {
|
|
327
346
|
aParams = [sKeyValue, ""];
|
|
328
347
|
}
|
|
329
|
-
txt =
|
|
330
|
-
} else if (sKeyValue) {
|
|
331
|
-
aParams = [sKeyValue, ""];
|
|
332
|
-
txt = CommonUtils.getTranslatedText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO", oResourceBundle, aParams, entitySetName);
|
|
348
|
+
txt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO", aParams, entitySetName);
|
|
333
349
|
} else {
|
|
334
|
-
txt =
|
|
350
|
+
txt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTTITLE_SINGULAR", undefined, entitySetName);
|
|
335
351
|
}
|
|
336
352
|
} else {
|
|
337
|
-
txt =
|
|
353
|
+
txt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTTITLE_SINGULAR", undefined, entitySetName);
|
|
338
354
|
}
|
|
339
355
|
options.push({
|
|
340
356
|
type: DeleteOptionTypes.deletableContexts,
|
|
@@ -348,9 +364,9 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/edit
|
|
|
348
364
|
// other types exists with pure deletable ones
|
|
349
365
|
let deletableOptionTxt = "";
|
|
350
366
|
if (totalDeletable === 1) {
|
|
351
|
-
deletableOptionTxt =
|
|
367
|
+
deletableOptionTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTTITLE_SINGULAR_NON_DELETABLE", undefined, entitySetName);
|
|
352
368
|
} else {
|
|
353
|
-
deletableOptionTxt =
|
|
369
|
+
deletableOptionTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTTITLE_PLURAL_NON_DELETABLE", undefined, entitySetName);
|
|
354
370
|
}
|
|
355
371
|
options.unshift({
|
|
356
372
|
type: DeleteOptionTypes.deletableContexts,
|
|
@@ -361,7 +377,7 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/edit
|
|
|
361
377
|
});
|
|
362
378
|
} else {
|
|
363
379
|
// only deletable
|
|
364
|
-
const allDeletableTxt = totalDeletable === 1 ?
|
|
380
|
+
const allDeletableTxt = totalDeletable === 1 ? resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTTITLE_SINGULAR", undefined, entitySetName) : resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTTITLE_PLURAL", undefined, entitySetName);
|
|
365
381
|
options.push({
|
|
366
382
|
type: DeleteOptionTypes.deletableContexts,
|
|
367
383
|
contexts: directDeletableContexts,
|
|
@@ -372,9 +388,10 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/edit
|
|
|
372
388
|
}
|
|
373
389
|
}
|
|
374
390
|
}
|
|
375
|
-
async function deleteConfirmHandler(options, mParameters, messageHandler,
|
|
391
|
+
async function deleteConfirmHandler(options, mParameters, messageHandler, resourceModel, appComponent, draftEnabled) {
|
|
376
392
|
try {
|
|
377
393
|
const contexts = deleteHelper.getConfirmedDeletableContext([], options);
|
|
394
|
+
const draftsToDeleteBeforeActive = getDraftsToDeleteBeforeActive(options);
|
|
378
395
|
const {
|
|
379
396
|
beforeDeleteCallBack,
|
|
380
397
|
parentControl
|
|
@@ -386,15 +403,27 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/edit
|
|
|
386
403
|
}
|
|
387
404
|
if (contexts && contexts.length) {
|
|
388
405
|
try {
|
|
406
|
+
const enableStrictHandling = contexts.length === 1 ? true : false;
|
|
407
|
+
const draftErrors = [];
|
|
408
|
+
await Promise.allSettled(draftsToDeleteBeforeActive.map(function (context) {
|
|
409
|
+
try {
|
|
410
|
+
return draft.deleteDraft(context, appComponent, enableStrictHandling);
|
|
411
|
+
} catch (e) {
|
|
412
|
+
Log.error(`FE : core : DeleteHelper : Error while discrding draft with path : ${context.getPath()}`);
|
|
413
|
+
draftErrors.push(e);
|
|
414
|
+
}
|
|
415
|
+
}));
|
|
389
416
|
await Promise.all(contexts.map(function (context) {
|
|
390
417
|
if (draftEnabled && !context.getProperty("IsActiveEntity")) {
|
|
391
418
|
//delete the draft
|
|
392
|
-
const enableStrictHandling = contexts.length === 1 ? true : false;
|
|
393
419
|
return draft.deleteDraft(context, appComponent, enableStrictHandling);
|
|
394
420
|
}
|
|
395
421
|
return context.delete();
|
|
396
422
|
}));
|
|
397
|
-
deleteHelper.afterDeleteProcess(mParameters, options, contexts,
|
|
423
|
+
deleteHelper.afterDeleteProcess(mParameters, options, contexts, resourceModel);
|
|
424
|
+
if (draftErrors.length > 0) {
|
|
425
|
+
throw Error(`FE : core : DeleteHelper : Errors on draft delete : ${draftErrors}`);
|
|
426
|
+
}
|
|
398
427
|
} catch (error) {
|
|
399
428
|
await messageHandler.showMessageDialog({
|
|
400
429
|
control: parentControl
|
|
@@ -441,11 +470,11 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/edit
|
|
|
441
470
|
info.locked = !!((_context$getObject = context.getObject("DraftAdministrativeData")) !== null && _context$getObject !== void 0 && _context$getObject.InProcessByUser);
|
|
442
471
|
info.hasDraft = context.getProperty("HasDraftEntity");
|
|
443
472
|
}
|
|
444
|
-
if (info.isDraftRoot
|
|
473
|
+
if (info.isDraftRoot) {
|
|
445
474
|
info.isActive = context.getProperty("IsActiveEntity");
|
|
446
475
|
info.hasActive = context.getProperty("HasActiveEntity");
|
|
447
476
|
if (!info.isActive && info.hasActive) {
|
|
448
|
-
// get sibling contexts
|
|
477
|
+
// get sibling contexts (only relevant for draft root, not for nodes)
|
|
449
478
|
// draft.computeSiblingInformation expects draft root as first parameter - if we are on a subnode, this is not given
|
|
450
479
|
// - done wrong also above, but seems not to break anything
|
|
451
480
|
// - why is draft.computeSiblingInformation not able to calculate draft root on its own?!
|
|
@@ -476,7 +505,10 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/edit
|
|
|
476
505
|
value: contextInfos.filter(info => info.isDraftRoot && !info.isActive && info.hasActive && info.siblingDeletable)
|
|
477
506
|
}, {
|
|
478
507
|
key: "draftsWithNonDeletableActive",
|
|
479
|
-
|
|
508
|
+
// only for draft root: For draft node, we only rely on information in the draft itself (not its active sibling)
|
|
509
|
+
// application has to take care to set this correctly (in case active sibling must not be deletable, activation
|
|
510
|
+
// of draft with deleted node would also delte active sibling => deletion of draft node to be avoided)
|
|
511
|
+
value: contextInfos.filter(info => info.isDraftRoot && !info.isActive && info.hasActive && !info.siblingDeletable)
|
|
480
512
|
}, {
|
|
481
513
|
key: "lockedContexts",
|
|
482
514
|
value: contextInfos.filter(info => info.isDraftRoot && info.isActive && info.hasDraft && info.locked)
|
|
@@ -487,11 +519,10 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/edit
|
|
|
487
519
|
// non-draft/sticky and deletable
|
|
488
520
|
// active draft root without any draft and deletable
|
|
489
521
|
// created draft root (regardless of deletable)
|
|
490
|
-
// draft node
|
|
491
|
-
// draft node with deletable active
|
|
522
|
+
// draft node only according to its annotation
|
|
492
523
|
{
|
|
493
524
|
key: "deletableContexts",
|
|
494
|
-
value: contextInfos.filter(info => !info.isDraftRoot && !info.isDraftNode && info.deletable || info.isDraftRoot && info.isActive && !info.hasDraft && info.deletable || info.isDraftRoot && !info.isActive && !info.hasActive || info.isDraftNode &&
|
|
525
|
+
value: contextInfos.filter(info => !info.isDraftRoot && !info.isDraftNode && info.deletable || info.isDraftRoot && info.isActive && !info.hasDraft && info.deletable || info.isDraftRoot && !info.isActive && !info.hasActive || info.isDraftNode && info.deletable)
|
|
495
526
|
}];
|
|
496
527
|
for (const {
|
|
497
528
|
key,
|
|
@@ -523,4 +554,4 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/edit
|
|
|
523
554
|
};
|
|
524
555
|
return deleteHelper;
|
|
525
556
|
}, false);
|
|
526
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZWxldGVPcHRpb25UeXBlcyIsIkRlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sIiwiZ2V0VXBkYXRlZFNlbGVjdGlvbnMiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsInR5cGUiLCJzZWxlY3RlZENvbnRleHRzIiwiY29udGV4dHNUb1JlbW92ZSIsImZvckVhY2giLCJjb250ZXh0IiwiaWR4IiwiaW5kZXhPZiIsInNwbGljZSIsInNldFByb3BlcnR5IiwiY2xlYXJTZWxlY3RlZENvbnRleHRzRm9yT3B0aW9uIiwib3B0aW9uIiwiZ2V0UHJvcGVydHkiLCJkZWxldGFibGVDb250ZXh0cyIsImNyZWF0ZU1vZGVDb250ZXh0cyIsImRyYWZ0U2libGluZ1BhaXJzIiwiZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSIsImRyYWZ0cyIsIm1hcCIsImNvbnRleHRQYWlyIiwiZHJhZnQiLCJsZW5ndGgiLCJhZnRlckRlbGV0ZVByb2Nlc3MiLCJwYXJhbWV0ZXJzIiwib3B0aW9ucyIsImNvbnRleHRzIiwib1Jlc291cmNlQnVuZGxlIiwiZW50aXR5U2V0TmFtZSIsInVuZGVmaW5lZCIsInNlbGVjdGVkIiwic29tZSIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJDb21tb25VdGlscyIsImdldFRyYW5zbGF0ZWRUZXh0IiwiZ2V0TG9ja2VkQ29udGV4dFVzZXIiLCJsb2NrZWRDb250ZXh0IiwiZHJhZnRBZG1pbkRhdGEiLCJnZXRPYmplY3QiLCJnZXRMb2NrZWRPYmplY3RzVGV4dCIsIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyIsImxvY2tlZENvbnRleHRzIiwicmV0VHh0IiwibG9ja2VkVXNlciIsImdldE5vbkRlbGV0YWJsZUFjdGl2ZXNPZkRyYWZ0c1RleHQiLCJudW1iZXJPZkRyYWZ0cyIsInRvdGFsRGVsZXRhYmxlIiwiZ2V0VW5TYXZlZENvbnRleHRVc2VyIiwidW5TYXZlZENvbnRleHQiLCJzTGFzdENoYW5nZWRCeVVzZXIiLCJnZXRVbnNhdmVkQ29udGV4dHNUZXh0IiwidW5TYXZlZENvbnRleHRzIiwiaW5mb1R4dCIsIm9wdGlvblR4dCIsIm9wdGlvbldpdGhvdXRUeHQiLCJsYXN0Q2hhbmdlZEJ5VXNlciIsImdldE5vbkRlbGV0YWJsZVRleHQiLCJtUGFyYW1ldGVycyIsInRvdGFsTnVtRGVsZXRhYmxlQ29udGV4dHMiLCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlIiwibm9uRGVsZXRhYmxlQ29udGV4dHMiLCJnZXRDb25maXJtZWREZWxldGFibGVDb250ZXh0IiwicmVkdWNlIiwicmVzdWx0IiwiY29uY2F0IiwidXBkYXRlRHJhZnRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMiLCJ2Q29udGV4dHMiLCJpdGVtcyIsIm5vbkRlbGV0YWJsZUNvbnRleHRUZXh0IiwibG9ja2VkQ29udGV4dHNUeHQiLCJkZWxldGFibGVEcmFmdEluZm8iLCJwdXNoIiwic2libGluZ0luZm8iLCJ0YXJnZXRDb250ZXh0IiwiZGVsZXRlSGVscGVyIiwiVGV4dCIsInRleHQiLCJ1bnNhdmVkQ2hhbmdlc1R4dHMiLCJjb250cm9sIiwiQ0hFQ0tCT1giLCJub25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0IiwiVEVYVCIsInVwZGF0ZUNvbnRlbnRGb3JEZWxldGVEaWFsb2ciLCJDaGVja0JveCIsInNlbGVjdCIsIm9FdmVudCIsImNoZWNrQm94IiwiZ2V0U291cmNlIiwiZ2V0U2VsZWN0ZWQiLCJ1cGRhdGVPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMiLCJkaXJlY3REZWxldGFibGVDb250ZXh0cyIsInBhcmVudENvbnRyb2wiLCJkZXNjcmlwdGlvbiIsIm9MaW5lQ29udGV4dERhdGEiLCJvVGFibGUiLCJzS2V5IiwiZ2V0UGFyZW50IiwiZ2V0SWRlbnRpZmllckNvbHVtbiIsInR4dCIsImFQYXJhbXMiLCJzS2V5VmFsdWUiLCJzRGVzY3JpcHRpb24iLCJwYXRoIiwiZGVsZXRhYmxlT3B0aW9uVHh0IiwidW5zaGlmdCIsImFsbERlbGV0YWJsZVR4dCIsImRlbGV0ZUNvbmZpcm1IYW5kbGVyIiwibWVzc2FnZUhhbmRsZXIiLCJhcHBDb21wb25lbnQiLCJkcmFmdEVuYWJsZWQiLCJiZWZvcmVEZWxldGVDYWxsQmFjayIsIlByb21pc2UiLCJhbGwiLCJlbmFibGVTdHJpY3RIYW5kbGluZyIsImRlbGV0ZURyYWZ0IiwiZGVsZXRlIiwiZXJyb3IiLCJzaG93TWVzc2FnZURpYWxvZyIsIm9FcnJvciIsInNob3dNZXNzYWdlcyIsInVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzIiwiY29udGV4dEluZm9zIiwibWV0YUNvbnRleHQiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImdldE1ldGFDb250ZXh0IiwiZ2V0Q2Fub25pY2FsUGF0aCIsImRlbGV0YWJsZVBhdGgiLCJzdGF0aWNEZWxldGFibGUiLCJpbmZvIiwiaXNEcmFmdFJvb3QiLCJpc0RyYWZ0Tm9kZSIsImlzQWN0aXZlIiwiaGFzQWN0aXZlIiwiaGFzRHJhZnQiLCJsb2NrZWQiLCJkZWxldGFibGUiLCJzaWJsaW5nUHJvbWlzZSIsInJlc29sdmUiLCJzaWJsaW5nRGVsZXRhYmxlIiwiSW5Qcm9jZXNzQnlVc2VyIiwiY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbiIsInRoZW4iLCJzaWJsaW5nSW5mb3JtYXRpb24iLCJyZXF1ZXN0UHJvcGVydHkiLCJidWNrZXRzIiwia2V5IiwidmFsdWUiLCJmaWx0ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRlbGV0ZUhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuXG5pbXBvcnQgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBkcmFmdCwgeyBTaWJsaW5nSW5mb3JtYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuXG5pbXBvcnQgQ2hlY2tCb3ggZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5cbmltcG9ydCBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFY0Q29udGV4dCB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcIi4vTW9kZWxIZWxwZXJcIjtcblxuZXhwb3J0IGVudW0gRGVsZXRlT3B0aW9uVHlwZXMge1xuXHRkZWxldGFibGVDb250ZXh0cyA9IFwiZGVsZXRhYmxlQ29udGV4dHNcIixcblx0ZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSA9IFwiZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZVwiLFxuXHRjcmVhdGVNb2RlQ29udGV4dHMgPSBcImNyZWF0ZU1vZGVDb250ZXh0c1wiLFxuXHR1blNhdmVkQ29udGV4dHMgPSBcInVuU2F2ZWRDb250ZXh0c1wiLFxuXHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlID0gXCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlXCJcbn1cblxuZXhwb3J0IGVudW0gRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wge1xuXHRDSEVDS0JPWCA9IFwiY2hlY2tCb3hcIixcblx0VEVYVCA9IFwidGV4dFwiXG59XG5cbmV4cG9ydCB0eXBlIERyYWZ0U2libGluZ1BhaXIgPSB7XG5cdGRyYWZ0OiBWNENvbnRleHQ7XG5cdHNpYmxpbmdJbmZvOiBTaWJsaW5nSW5mb3JtYXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBEZWxldGVPcHRpb24gPSB7XG5cdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzO1xuXHRjb250ZXh0czogVjRDb250ZXh0W107XG5cdHNlbGVjdGVkOiBib29sZWFuO1xuXHR0ZXh0Pzogc3RyaW5nO1xuXHRjb250cm9sPzogRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2w7XG59O1xuXG5leHBvcnQgdHlwZSBNb2RlbE9iamVjdFByb3BlcnRpZXMgPSB7XG5cdGRlbGV0YWJsZUNvbnRleHRzOiBWNENvbnRleHRbXTtcblx0dW5TYXZlZENvbnRleHRzOiBWNENvbnRleHRbXTtcblx0Y3JlYXRlTW9kZUNvbnRleHRzOiBWNENvbnRleHRbXTtcblx0ZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZTogVjRDb250ZXh0W107XG5cdGxvY2tlZENvbnRleHRzOiBWNENvbnRleHRbXTtcblx0ZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZTogRHJhZnRTaWJsaW5nUGFpcltdO1xuXHRkZWxldGVFbmFibGVkOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFUeXBlID0ge1xuXHREcmFmdFVVSUQ6IHN0cmluZztcblx0SW5Qcm9jZXNzQnlVc2VyPzogc3RyaW5nO1xuXHRJblByb2Nlc3NCeVVzZXJEZXNjcmlwdGlvbj86IHN0cmluZztcblx0Q3JlYXRlZEJ5VXNlckRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXHRDcmVhdGVkQnlVc2VyPzogc3RyaW5nO1xuXHRMYXN0Q2hhbmdlZEJ5VXNlckRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXHRMYXN0Q2hhbmdlZEJ5VXNlcj86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERlbGV0ZVBhcmFtZXRlcnMgPSB7XG5cdGludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzOiBudW1iZXI7XG5cdGVudGl0eVNldE5hbWU6IHN0cmluZztcblx0cGFyZW50Q29udHJvbDogQ29udHJvbDtcblx0ZGVzY3JpcHRpb246IHsgcGF0aDogc3RyaW5nIH07XG5cdGJlZm9yZURlbGV0ZUNhbGxCYWNrOiBGdW5jdGlvbjtcblx0ZGVsZXRhYmxlQ29udGV4dHM6IFY0Q29udGV4dFtdO1xuXHR1blNhdmVkQ29udGV4dHM6IFY0Q29udGV4dFtdO1xuXHRjcmVhdGVNb2RlQ29udGV4dHM6IFY0Q29udGV4dFtdO1xuXHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlOiBWNENvbnRleHRbXTtcblx0bG9ja2VkQ29udGV4dHM6IFY0Q29udGV4dFtdO1xuXHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlOiBEcmFmdFNpYmxpbmdQYWlyW107XG59O1xuXG5leHBvcnQgdHlwZSBEZWxldGVUZXh0SW5mbyA9IHtcblx0aW5mb1R4dD86IHN0cmluZztcblx0b3B0aW9uVHh0Pzogc3RyaW5nO1xuXHRvcHRpb25XaXRob3V0VHh0PzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIGdldFVwZGF0ZWRTZWxlY3Rpb25zKFxuXHRpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzLFxuXHRzZWxlY3RlZENvbnRleHRzOiBWNENvbnRleHRbXSxcblx0Y29udGV4dHNUb1JlbW92ZTogVjRDb250ZXh0W11cbik6IFY0Q29udGV4dFtdIHtcblx0Y29udGV4dHNUb1JlbW92ZS5mb3JFYWNoKChjb250ZXh0OiBWNENvbnRleHQpID0+IHtcblx0XHRjb25zdCBpZHggPSBzZWxlY3RlZENvbnRleHRzLmluZGV4T2YoY29udGV4dCk7XG5cdFx0aWYgKGlkeCAhPT0gLTEpIHtcblx0XHRcdHNlbGVjdGVkQ29udGV4dHMuc3BsaWNlKGlkeCwgMSk7XG5cdFx0fVxuXHR9KTtcblx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkodHlwZSwgW10pO1xuXG5cdHJldHVybiBbLi4uc2VsZWN0ZWRDb250ZXh0c107XG59XG5cbmZ1bmN0aW9uIGNsZWFyU2VsZWN0ZWRDb250ZXh0c0Zvck9wdGlvbihpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsIG9wdGlvbjogRGVsZXRlT3B0aW9uKSB7XG5cdGxldCBzZWxlY3RlZENvbnRleHRzID0gKGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKSBhcyBWNENvbnRleHRbXSkgfHwgW107XG5cblx0aWYgKG9wdGlvbi50eXBlID09PSBEZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cykge1xuXHRcdHNlbGVjdGVkQ29udGV4dHMgPSBnZXRVcGRhdGVkU2VsZWN0aW9ucyhcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0RGVsZXRlT3B0aW9uVHlwZXMuZGVsZXRhYmxlQ29udGV4dHMsXG5cdFx0XHRzZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoRGVsZXRlT3B0aW9uVHlwZXMuZGVsZXRhYmxlQ29udGV4dHMpIHx8IFtdXG5cdFx0KTtcblx0XHRzZWxlY3RlZENvbnRleHRzID0gZ2V0VXBkYXRlZFNlbGVjdGlvbnMoXG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdERlbGV0ZU9wdGlvblR5cGVzLmNyZWF0ZU1vZGVDb250ZXh0cyxcblx0XHRcdHNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShEZWxldGVPcHRpb25UeXBlcy5jcmVhdGVNb2RlQ29udGV4dHMpIHx8IFtdXG5cdFx0KTtcblxuXHRcdGNvbnN0IGRyYWZ0U2libGluZ1BhaXJzID0gaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoRGVsZXRlT3B0aW9uVHlwZXMuZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSkgfHwgW107XG5cdFx0Y29uc3QgZHJhZnRzID0gZHJhZnRTaWJsaW5nUGFpcnMubWFwKChjb250ZXh0UGFpcjogRHJhZnRTaWJsaW5nUGFpcikgPT4ge1xuXHRcdFx0cmV0dXJuIGNvbnRleHRQYWlyLmRyYWZ0O1xuXHRcdH0pO1xuXHRcdHNlbGVjdGVkQ29udGV4dHMgPSBnZXRVcGRhdGVkU2VsZWN0aW9ucyhcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0RGVsZXRlT3B0aW9uVHlwZXMuZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSxcblx0XHRcdHNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRkcmFmdHNcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGNvbnRleHRzVG9SZW1vdmUgPSBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShvcHRpb24udHlwZSkgfHwgW107XG5cdFx0c2VsZWN0ZWRDb250ZXh0cyA9IGdldFVwZGF0ZWRTZWxlY3Rpb25zKGludGVybmFsTW9kZWxDb250ZXh0LCBvcHRpb24udHlwZSwgc2VsZWN0ZWRDb250ZXh0cywgY29udGV4dHNUb1JlbW92ZSk7XG5cdH1cblx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIHNlbGVjdGVkQ29udGV4dHMpO1xuXHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBzZWxlY3RlZENvbnRleHRzLmxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGFmdGVyRGVsZXRlUHJvY2VzcyhwYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLCBvcHRpb25zOiBEZWxldGVPcHRpb25bXSwgY29udGV4dHM6IFY0Q29udGV4dFtdLCBvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlKSB7XG5cdGNvbnN0IHsgaW50ZXJuYWxNb2RlbENvbnRleHQsIGVudGl0eVNldE5hbWUgfSA9IHBhcmFtZXRlcnM7XG5cdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImRlbGV0ZUVuYWJsZWRcIikgIT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4ge1xuXHRcdFx0XHQvLyBpZiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQsIHRoZW4gaXQgaXMgZGVsZXRlZC4gU28sIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZW0gZnJvbSBzZWxlY3RlZCBjb250ZXh0cy5cblx0XHRcdFx0aWYgKG9wdGlvbi5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdGNsZWFyU2VsZWN0ZWRDb250ZXh0c0Zvck9wdGlvbihpbnRlcm5hbE1vZGVsQ29udGV4dCwgb3B0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8vIGlmIGF0bGVhc3Qgb25lIG9mIHRoZSBvcHRpb25zIGlzIG5vdCBzZWxlY3RlZCwgdGhlbiB0aGUgZGVsZXRlIGJ1dHRvbiBuZWVkcyB0byBiZSBlbmFibGVkLlxuXHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFxuXHRcdFx0XCJkZWxldGVFbmFibGVkXCIsXG5cdFx0XHRvcHRpb25zLnNvbWUoKG9wdGlvbikgPT4gIW9wdGlvbi5zZWxlY3RlZClcblx0XHQpO1xuXHR9XG5cblx0aWYgKGNvbnRleHRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdE1lc3NhZ2VUb2FzdC5zaG93KFxuXHRcdFx0Q29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9ERUxFVEVfVE9BU1RfU0lOR1VMQVJcIiwgb1Jlc291cmNlQnVuZGxlLCB1bmRlZmluZWQsIGVudGl0eVNldE5hbWUpXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRNZXNzYWdlVG9hc3Quc2hvdyhcblx0XHRcdENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfREVMRVRFX1RPQVNUX1BMVVJBTFwiLCBvUmVzb3VyY2VCdW5kbGUsIHVuZGVmaW5lZCwgZW50aXR5U2V0TmFtZSlcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldExvY2tlZENvbnRleHRVc2VyKGxvY2tlZENvbnRleHQ6IFY0Q29udGV4dCk6IHN0cmluZyB7XG5cdGNvbnN0IGRyYWZ0QWRtaW5EYXRhID0gbG9ja2VkQ29udGV4dC5nZXRPYmplY3QoKVtcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCJdIGFzIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhVHlwZTtcblx0cmV0dXJuIChkcmFmdEFkbWluRGF0YSAmJiBkcmFmdEFkbWluRGF0YVtcIkluUHJvY2Vzc0J5VXNlclwiXSkgfHwgXCJcIjtcbn1cblxuZnVuY3Rpb24gZ2V0TG9ja2VkT2JqZWN0c1RleHQob1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSwgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzOiBudW1iZXIsIGxvY2tlZENvbnRleHRzOiBWNENvbnRleHRbXSk6IHN0cmluZyB7XG5cdGxldCByZXRUeHQgPSBcIlwiO1xuXG5cdGlmIChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPT09IDEgJiYgbG9ja2VkQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0Ly9vbmx5IG9uZSB1bnNhdmVkIG9iamVjdFxuXHRcdGNvbnN0IGxvY2tlZFVzZXIgPSBnZXRMb2NrZWRDb250ZXh0VXNlcihsb2NrZWRDb250ZXh0c1swXSk7XG5cdFx0cmV0VHh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1NJTkdMRV9PQkpFQ1RfTE9DS0VEXCIsIG9SZXNvdXJjZUJ1bmRsZSwgW1xuXHRcdFx0bG9ja2VkVXNlclxuXHRcdF0pO1xuXHR9IGVsc2UgaWYgKGxvY2tlZENvbnRleHRzLmxlbmd0aCA9PSAxKSB7XG5cdFx0Y29uc3QgbG9ja2VkVXNlciA9IGdldExvY2tlZENvbnRleHRVc2VyKGxvY2tlZENvbnRleHRzWzBdKTtcblx0XHRyZXRUeHQgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcblx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPX0FORF9PTkVfT0JKRUNUX0xPQ0tFRFwiLFxuXHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0W251bWJlck9mU2VsZWN0ZWRDb250ZXh0cywgbG9ja2VkVXNlcl1cblx0XHQpO1xuXHR9IGVsc2UgaWYgKGxvY2tlZENvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXRUeHQgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcblx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPX0FORF9GRVdfT0JKRUNUU19MT0NLRURcIixcblx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFtsb2NrZWRDb250ZXh0cy5sZW5ndGgsIG51bWJlck9mU2VsZWN0ZWRDb250ZXh0c11cblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIHJldFR4dDtcbn1cblxuZnVuY3Rpb24gZ2V0Tm9uRGVsZXRhYmxlQWN0aXZlc09mRHJhZnRzVGV4dChvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLCBudW1iZXJPZkRyYWZ0czogbnVtYmVyLCB0b3RhbERlbGV0YWJsZTogbnVtYmVyKTogc3RyaW5nIHtcblx0bGV0IHJldFR4dCA9IFwiXCI7XG5cblx0aWYgKHRvdGFsRGVsZXRhYmxlID09PSBudW1iZXJPZkRyYWZ0cykge1xuXHRcdGlmIChudW1iZXJPZkRyYWZ0cyA9PT0gMSkge1xuXHRcdFx0cmV0VHh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfT05MWV9EUkFGVF9PRl9OT05fREVMRVRBQkxFX0FDVElWRVwiLFxuXHRcdFx0XHRvUmVzb3VyY2VCdW5kbGVcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldFR4dCA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX09OTFlfRFJBRlRTX09GX05PTl9ERUxFVEFCTEVfQUNUSVZFXCIsXG5cdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZVxuXHRcdFx0KTtcblx0XHR9XG5cdH0gZWxzZSBpZiAobnVtYmVyT2ZEcmFmdHMgPT09IDEpIHtcblx0XHRyZXRUeHQgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX0RSQUZUX09GX05PTl9ERUxFVEFCTEVfQUNUSVZFXCIsIG9SZXNvdXJjZUJ1bmRsZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0VHh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9EUkFGVFNfT0ZfTk9OX0RFTEVUQUJMRV9BQ1RJVkVcIiwgb1Jlc291cmNlQnVuZGxlKTtcblx0fVxuXG5cdHJldHVybiByZXRUeHQ7XG59XG5cbmZ1bmN0aW9uIGdldFVuU2F2ZWRDb250ZXh0VXNlcih1blNhdmVkQ29udGV4dDogVjRDb250ZXh0KTogc3RyaW5nIHtcblx0Y29uc3QgZHJhZnRBZG1pbkRhdGEgPSB1blNhdmVkQ29udGV4dC5nZXRPYmplY3QoKVtcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCJdIGFzIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhVHlwZTtcblx0bGV0IHNMYXN0Q2hhbmdlZEJ5VXNlciA9IFwiXCI7XG5cdGlmIChkcmFmdEFkbWluRGF0YSkge1xuXHRcdHNMYXN0Q2hhbmdlZEJ5VXNlciA9IGRyYWZ0QWRtaW5EYXRhW1wiTGFzdENoYW5nZWRCeVVzZXJEZXNjcmlwdGlvblwiXSB8fCBkcmFmdEFkbWluRGF0YVtcIkxhc3RDaGFuZ2VkQnlVc2VyXCJdIHx8IFwiXCI7XG5cdH1cblxuXHRyZXR1cm4gc0xhc3RDaGFuZ2VkQnlVc2VyO1xufVxuXG5mdW5jdGlvbiBnZXRVbnNhdmVkQ29udGV4dHNUZXh0KFxuXHRvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLFxuXHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHM6IG51bWJlcixcblx0dW5TYXZlZENvbnRleHRzOiBWNENvbnRleHRbXSxcblx0dG90YWxEZWxldGFibGU6IG51bWJlclxuKTogRGVsZXRlVGV4dEluZm8ge1xuXHRsZXQgaW5mb1R4dCA9IFwiXCIsXG5cdFx0b3B0aW9uVHh0ID0gXCJcIixcblx0XHRvcHRpb25XaXRob3V0VHh0ID0gZmFsc2U7XG5cdGlmIChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPT09IDEgJiYgdW5TYXZlZENvbnRleHRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdC8vb25seSBvbmUgdW5zYXZlZCBvYmplY3QgYXJlIHNlbGVjdGVkXG5cdFx0Y29uc3QgbGFzdENoYW5nZWRCeVVzZXIgPSBnZXRVblNhdmVkQ29udGV4dFVzZXIodW5TYXZlZENvbnRleHRzWzBdKTtcblx0XHRpbmZvVHh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1VOU0FWRURfQ0hBTkdFU1wiLCBvUmVzb3VyY2VCdW5kbGUsIFtcblx0XHRcdGxhc3RDaGFuZ2VkQnlVc2VyXG5cdFx0XSk7XG5cdFx0b3B0aW9uV2l0aG91dFR4dCA9IHRydWU7XG5cdH0gZWxzZSBpZiAobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID09PSB1blNhdmVkQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0Ly9vbmx5IG11bHRpcGxlIHVuc2F2ZWQgb2JqZWN0cyBhcmUgc2VsZWN0ZWRcblx0XHRpbmZvVHh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfVU5TQVZFRF9DSEFOR0VTX01VTFRJUExFX09CSkVDVFNcIixcblx0XHRcdG9SZXNvdXJjZUJ1bmRsZVxuXHRcdCk7XG5cdFx0b3B0aW9uV2l0aG91dFR4dCA9IHRydWU7XG5cdH0gZWxzZSBpZiAodG90YWxEZWxldGFibGUgPT09IHVuU2F2ZWRDb250ZXh0cy5sZW5ndGgpIHtcblx0XHQvLyBub24tZGVsZXRhYmxlL2xvY2tlZCBleGlzdHMsIGFsbCBkZWxldGFibGUgYXJlIHVuc2F2ZWQgYnkgb3RoZXJzXG5cdFx0aWYgKHVuU2F2ZWRDb250ZXh0cy5sZW5ndGggPT09IDEpIHtcblx0XHRcdGNvbnN0IGxhc3RDaGFuZ2VkQnlVc2VyID0gZ2V0VW5TYXZlZENvbnRleHRVc2VyKHVuU2F2ZWRDb250ZXh0c1swXSk7XG5cdFx0XHRpbmZvVHh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9VTlNBVkVEX0FORF9GRVdfT0JKRUNUU19MT0NLRURfU0lOR1VMQVJcIixcblx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRbbGFzdENoYW5nZWRCeVVzZXJdXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbmZvVHh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9VTlNBVkVEX0FORF9GRVdfT0JKRUNUU19MT0NLRURfUExVUkFMXCIsXG5cdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0b3B0aW9uV2l0aG91dFR4dCA9IHRydWU7XG5cdH0gZWxzZSBpZiAodG90YWxEZWxldGFibGUgPiB1blNhdmVkQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0Ly8gbm9uLWRlbGV0YWJsZS9sb2NrZWQgZXhpc3RzLCBkZWxldGFibGUgaW5jbHVkZSB1bnNhdmVkIGFuZCBvdGhlciB0eXBlcy5cblx0XHRpZiAodW5TYXZlZENvbnRleHRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Y29uc3QgbGFzdENoYW5nZWRCeVVzZXIgPSBnZXRVblNhdmVkQ29udGV4dFVzZXIodW5TYXZlZENvbnRleHRzWzBdKTtcblx0XHRcdG9wdGlvblR4dCA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUSU5GT19BTkRfRkVXX09CSkVDVFNfVU5TQVZFRF9TSU5HVUxBUlwiLFxuXHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFtsYXN0Q2hhbmdlZEJ5VXNlcl1cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9wdGlvblR4dCA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUSU5GT19BTkRfRkVXX09CSkVDVFNfVU5TQVZFRF9QTFVSQUxcIixcblx0XHRcdFx0b1Jlc291cmNlQnVuZGxlXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IGluZm9UeHQsIG9wdGlvblR4dCwgb3B0aW9uV2l0aG91dFR4dCB9O1xufVxuXG5mdW5jdGlvbiBnZXROb25EZWxldGFibGVUZXh0KG1QYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLCB0b3RhbE51bURlbGV0YWJsZUNvbnRleHRzOiBudW1iZXIsIG9SZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUpOiBzdHJpbmcge1xuXHRjb25zdCB7IG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cywgbG9ja2VkQ29udGV4dHMsIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUgfSA9IG1QYXJhbWV0ZXJzO1xuXHRjb25zdCBub25EZWxldGFibGVDb250ZXh0cyA9XG5cdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzIC0gKGxvY2tlZENvbnRleHRzLmxlbmd0aCArIHRvdGFsTnVtRGVsZXRhYmxlQ29udGV4dHMgLSBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCk7XG5cdGxldCByZXRUeHQgPSBcIlwiO1xuXG5cdGlmIChcblx0XHRub25EZWxldGFibGVDb250ZXh0cyA+IDAgJiZcblx0XHQodG90YWxOdW1EZWxldGFibGVDb250ZXh0cyA9PT0gMCB8fCBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCA9PT0gdG90YWxOdW1EZWxldGFibGVDb250ZXh0cylcblx0KSB7XG5cdFx0Ly8gMS4gTm9uZSBvZiB0aGUgY2NvbnRleHRzIGFyZSBkZWxldGFibGVcblx0XHQvLyAyLiBPbmx5IGRyYWZ0cyBvZiBub24gZGVsZXRhYmxlIGNvbnRleHRzIGV4aXN0LlxuXHRcdGlmIChsb2NrZWRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBMb2NrZWQgY29udGV4dHMgZXhpc3Rcblx0XHRcdGlmIChub25EZWxldGFibGVDb250ZXh0cyA9PT0gMSkge1xuXHRcdFx0XHRyZXRUeHQgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcblx0XHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfQUxMX1JFTUFJTklOR19OT05fREVMRVRBQkxFX1NJTkdVTEFSXCIsXG5cdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRcdHVuZGVmaW5lZFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0VHh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX0FMTF9SRU1BSU5JTkdfTk9OX0RFTEVUQUJMRV9QTFVSQUxcIixcblx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0dW5kZWZpbmVkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChub25EZWxldGFibGVDb250ZXh0cyA9PT0gMSkge1xuXHRcdFx0Ly8gT25seSBwdXJlIG5vbi1kZWxldGFibGUgY29udGV4dHMgZXhpc3Qgc2luZ2xlXG5cdFx0XHRyZXRUeHQgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcblx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1NJTkdMRV9BTkRfT05FX09CSkVDVF9OT05fREVMRVRBQkxFXCIsXG5cdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0dW5kZWZpbmVkXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBPbmx5IHB1cmUgbm9uLWRlbGV0YWJsZSBjb250ZXh0cyBleGlzdCBtdWx0aXBsZVxuXHRcdFx0cmV0VHh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9NVUxUSVBMRV9BTkRfQUxMX09CSkVDVF9OT05fREVMRVRBQkxFXCIsXG5cdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0dW5kZWZpbmVkXG5cdFx0XHQpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChub25EZWxldGFibGVDb250ZXh0cyA9PT0gMSkge1xuXHRcdC8vIGRlbGV0YWJsZSBhbmQgbm9uLWRlbGV0YWJsZSBleGlzdHMgdG9nZXRoZXIsIHNpbmdsZVxuXHRcdHJldFR4dCA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVElORk9fQU5EX09ORV9PQkpFQ1RfTk9OX0RFTEVUQUJMRVwiLFxuXHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0W251bWJlck9mU2VsZWN0ZWRDb250ZXh0c11cblx0XHQpO1xuXHR9IGVsc2UgaWYgKG5vbkRlbGV0YWJsZUNvbnRleHRzID4gMSkge1xuXHRcdC8vIGRlbGV0YWJsZSBhbmQgbm9uLWRlbGV0YWJsZSBleGlzdHMgdG9nZXRoZXIsIG11bHRpcGxlXG5cdFx0cmV0VHh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUSU5GT19BTkRfRkVXX09CSkVDVFNfTk9OX0RFTEVUQUJMRVwiLFxuXHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0W25vbkRlbGV0YWJsZUNvbnRleHRzLCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNdXG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiByZXRUeHQ7XG59XG5cbmZ1bmN0aW9uIGdldENvbmZpcm1lZERlbGV0YWJsZUNvbnRleHQoY29udGV4dHM6IFY0Q29udGV4dFtdLCBvcHRpb25zOiBEZWxldGVPcHRpb25bXSk6IFY0Q29udGV4dFtdIHtcblx0cmV0dXJuIG9wdGlvbnMucmVkdWNlKChyZXN1bHQsIG9wdGlvbikgPT4ge1xuXHRcdHJldHVybiBvcHRpb24uc2VsZWN0ZWQgPyByZXN1bHQuY29uY2F0KG9wdGlvbi5jb250ZXh0cykgOiByZXN1bHQ7XG5cdH0sIGNvbnRleHRzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRHJhZnRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMoXG5cdG1QYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLFxuXHR2Q29udGV4dHM6IFY0Q29udGV4dFtdLFxuXHR0b3RhbERlbGV0YWJsZTogbnVtYmVyLFxuXHRvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLFxuXHRpdGVtczogQ29udHJvbFtdLFxuXHRvcHRpb25zOiBEZWxldGVPcHRpb25bXVxuKSB7XG5cdGNvbnN0IHtcblx0XHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMsXG5cdFx0ZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSxcblx0XHR1blNhdmVkQ29udGV4dHMsXG5cdFx0Y3JlYXRlTW9kZUNvbnRleHRzLFxuXHRcdGxvY2tlZENvbnRleHRzLFxuXHRcdGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVcblx0fSA9IG1QYXJhbWV0ZXJzO1xuXHRsZXQgbm9uRGVsZXRhYmxlQ29udGV4dFRleHQgPSBcIlwiLFxuXHRcdGxvY2tlZENvbnRleHRzVHh0ID0gXCJcIjtcblxuXHQvLyBkcmFmdHMgd2l0aCBhY3RpdmVcblx0aWYgKGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUubGVuZ3RoID4gMCkge1xuXHRcdGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUuZm9yRWFjaCgoZGVsZXRhYmxlRHJhZnRJbmZvOiBEcmFmdFNpYmxpbmdQYWlyKSA9PiB7XG5cdFx0XHR2Q29udGV4dHMucHVzaChkZWxldGFibGVEcmFmdEluZm8uc2libGluZ0luZm8udGFyZ2V0Q29udGV4dCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBjcmVhdGUgbW9kZSBkcmFmdHNcblx0aWYgKGNyZWF0ZU1vZGVDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0Ly8gY3JlYXRlIG1vZGUgZHJhZnRzXG5cdFx0Y3JlYXRlTW9kZUNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHZDb250ZXh0cy5wdXNoKGNvbnRleHQpKTtcblx0fVxuXG5cdC8vIGl0ZW1zIGxvY2tlZCBtc2dcblx0aWYgKGxvY2tlZENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRsb2NrZWRDb250ZXh0c1R4dCA9IGRlbGV0ZUhlbHBlci5nZXRMb2NrZWRPYmplY3RzVGV4dChvUmVzb3VyY2VCdW5kbGUsIG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cywgbG9ja2VkQ29udGV4dHMpIHx8IFwiXCI7XG5cdFx0aXRlbXMucHVzaChuZXcgVGV4dCh7IHRleHQ6IGxvY2tlZENvbnRleHRzVHh0IH0pKTtcblx0fVxuXG5cdC8vIG5vbiBkZWxldGFibGUgbXNnXG5cdGlmIChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgIT0gdG90YWxEZWxldGFibGUgLSBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCArIGxvY2tlZENvbnRleHRzLmxlbmd0aCkge1xuXHRcdG5vbkRlbGV0YWJsZUNvbnRleHRUZXh0ID0gZGVsZXRlSGVscGVyLmdldE5vbkRlbGV0YWJsZVRleHQobVBhcmFtZXRlcnMsIHRvdGFsRGVsZXRhYmxlLCBvUmVzb3VyY2VCdW5kbGUpO1xuXHRcdGl0ZW1zLnB1c2gobmV3IFRleHQoeyB0ZXh0OiBub25EZWxldGFibGVDb250ZXh0VGV4dCB9KSk7XG5cdH1cblxuXHQvLyBvcHRpb246IHVuc2F2ZWQgY2hhbmdlcyBieSBvdGhlcnNcblx0aWYgKHVuU2F2ZWRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgdW5zYXZlZENoYW5nZXNUeHRzID1cblx0XHRcdGRlbGV0ZUhlbHBlci5nZXRVbnNhdmVkQ29udGV4dHNUZXh0KG9SZXNvdXJjZUJ1bmRsZSwgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLCB1blNhdmVkQ29udGV4dHMsIHRvdGFsRGVsZXRhYmxlKSB8fCB7fTtcblx0XHRpZiAodW5zYXZlZENoYW5nZXNUeHRzLmluZm9UeHQpIHtcblx0XHRcdGl0ZW1zLnB1c2gobmV3IFRleHQoeyB0ZXh0OiB1bnNhdmVkQ2hhbmdlc1R4dHMuaW5mb1R4dCB9KSk7XG5cdFx0fVxuXHRcdGlmICh1bnNhdmVkQ2hhbmdlc1R4dHMub3B0aW9uVHh0IHx8IHVuc2F2ZWRDaGFuZ2VzVHh0cy5vcHRpb25XaXRob3V0VHh0KSB7XG5cdFx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy51blNhdmVkQ29udGV4dHMsXG5cdFx0XHRcdGNvbnRleHRzOiB1blNhdmVkQ29udGV4dHMsXG5cdFx0XHRcdHRleHQ6IHVuc2F2ZWRDaGFuZ2VzVHh0cy5vcHRpb25UeHQsXG5cdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRjb250cm9sOiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5DSEVDS0JPWFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gb3B0aW9uOiBkcmFmdHMgd2l0aCBhY3RpdmUgbm90IGRlbGV0YWJsZVxuXHRpZiAoZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZS5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3Qgbm9uRGVsZXRhYmxlQWN0aXZlc09mRHJhZnRzVGV4dCA9XG5cdFx0XHRkZWxldGVIZWxwZXIuZ2V0Tm9uRGVsZXRhYmxlQWN0aXZlc09mRHJhZnRzVGV4dChvUmVzb3VyY2VCdW5kbGUsIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoLCB0b3RhbERlbGV0YWJsZSkgfHwgXCJcIjtcblx0XHRpZiAobm9uRGVsZXRhYmxlQWN0aXZlc09mRHJhZnRzVGV4dCkge1xuXHRcdFx0b3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogRGVsZXRlT3B0aW9uVHlwZXMuZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSxcblx0XHRcdFx0Y29udGV4dHM6IGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUsXG5cdFx0XHRcdHRleHQ6IG5vbkRlbGV0YWJsZUFjdGl2ZXNPZkRyYWZ0c1RleHQsXG5cdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRjb250cm9sOiB0b3RhbERlbGV0YWJsZSA+IDAgPyBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5DSEVDS0JPWCA6IERlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sLlRFWFRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVDb250ZW50Rm9yRGVsZXRlRGlhbG9nKG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdLCBpdGVtczogQ29udHJvbFtdKSB7XG5cdGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuXHRcdC8vIFNpbmdsZSBvcHRpb24gZG9lc24ndCBuZWVkIGNoZWNrQm94XG5cdFx0Y29uc3Qgb3B0aW9uID0gb3B0aW9uc1swXTtcblx0XHRpZiAob3B0aW9uLnRleHQpIHtcblx0XHRcdGl0ZW1zLnB1c2gobmV3IFRleHQoeyB0ZXh0OiBvcHRpb24udGV4dCB9KSk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG9wdGlvbnMubGVuZ3RoID4gMSkge1xuXHRcdC8vIE11bHRpcGxlIE9wdGlvbnNcblxuXHRcdC8vIFRleHRzXG5cdFx0b3B0aW9ucy5mb3JFYWNoKChvcHRpb246IERlbGV0ZU9wdGlvbikgPT4ge1xuXHRcdFx0aWYgKG9wdGlvbi5jb250cm9sID09PSBcInRleHRcIiAmJiBvcHRpb24udGV4dCkge1xuXHRcdFx0XHRpdGVtcy5wdXNoKG5ldyBUZXh0KHsgdGV4dDogb3B0aW9uLnRleHQgfSkpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vIENoZWNrQm94c1xuXHRcdG9wdGlvbnMuZm9yRWFjaCgob3B0aW9uOiBEZWxldGVPcHRpb24pID0+IHtcblx0XHRcdGlmIChvcHRpb24uY29udHJvbCA9PT0gXCJjaGVja0JveFwiICYmIG9wdGlvbi50ZXh0KSB7XG5cdFx0XHRcdGl0ZW1zLnB1c2goXG5cdFx0XHRcdFx0bmV3IENoZWNrQm94KHtcblx0XHRcdFx0XHRcdHRleHQ6IG9wdGlvbi50ZXh0LFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRzZWxlY3Q6IGZ1bmN0aW9uIChvRXZlbnQ6IEV2ZW50KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNoZWNrQm94ID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIENoZWNrQm94O1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzZWxlY3RlZCA9IGNoZWNrQm94LmdldFNlbGVjdGVkKCk7XG5cdFx0XHRcdFx0XHRcdG9wdGlvbi5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlT3B0aW9uc0ZvckRlbGV0YWJsZVRleHRzKFxuXHRtUGFyYW1ldGVyczogRGVsZXRlUGFyYW1ldGVycyxcblx0ZGlyZWN0RGVsZXRhYmxlQ29udGV4dHM6IFY0Q29udGV4dFtdLFxuXHRvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLFxuXHRvcHRpb25zOiBEZWxldGVPcHRpb25bXVxuKSB7XG5cdGNvbnN0IHtcblx0XHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMsXG5cdFx0ZW50aXR5U2V0TmFtZSxcblx0XHRwYXJlbnRDb250cm9sLFxuXHRcdGRlc2NyaXB0aW9uLFxuXHRcdGxvY2tlZENvbnRleHRzLFxuXHRcdGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUsXG5cdFx0dW5TYXZlZENvbnRleHRzXG5cdH0gPSBtUGFyYW1ldGVycztcblx0Y29uc3QgdG90YWxEZWxldGFibGUgPSBkaXJlY3REZWxldGFibGVDb250ZXh0cy5sZW5ndGggKyBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCArIHVuU2F2ZWRDb250ZXh0cy5sZW5ndGg7XG5cdGNvbnN0IG5vbkRlbGV0YWJsZUNvbnRleHRzID0gbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzIC0gKGxvY2tlZENvbnRleHRzLmxlbmd0aCArIHRvdGFsRGVsZXRhYmxlIC0gZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZS5sZW5ndGgpO1xuXG5cdGlmIChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPT09IDEgJiYgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID09PSBkaXJlY3REZWxldGFibGVDb250ZXh0cy5sZW5ndGgpIHtcblx0XHQvLyBzaW5nbGUgZGVsZXRhYmxlIGNvbnRleHRcblx0XHRjb25zdCBvTGluZUNvbnRleHREYXRhID0gZGlyZWN0RGVsZXRhYmxlQ29udGV4dHNbMF0uZ2V0T2JqZWN0KCk7XG5cdFx0Y29uc3Qgb1RhYmxlID0gcGFyZW50Q29udHJvbCBhcyBUYWJsZTtcblx0XHRjb25zdCBzS2V5ID0gb1RhYmxlICYmIChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKTtcblx0XHRsZXQgdHh0O1xuXHRcdGxldCBhUGFyYW1zID0gW107XG5cdFx0aWYgKHNLZXkpIHtcblx0XHRcdGNvbnN0IHNLZXlWYWx1ZSA9IHNLZXkgPyBvTGluZUNvbnRleHREYXRhW3NLZXldIDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3Qgc0Rlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gJiYgZGVzY3JpcHRpb24ucGF0aCA/IG9MaW5lQ29udGV4dERhdGFbZGVzY3JpcHRpb24ucGF0aF0gOiB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoc0tleVZhbHVlKSB7XG5cdFx0XHRcdGlmIChzRGVzY3JpcHRpb24gJiYgZGVzY3JpcHRpb24gJiYgc0tleSAhPT0gZGVzY3JpcHRpb24ucGF0aCkge1xuXHRcdFx0XHRcdGFQYXJhbXMgPSBbc0tleVZhbHVlICsgXCIgXCIsIHNEZXNjcmlwdGlvbl07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YVBhcmFtcyA9IFtzS2V5VmFsdWUsIFwiXCJdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHR4dCA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPXCIsXG5cdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRcdGFQYXJhbXMsXG5cdFx0XHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmIChzS2V5VmFsdWUpIHtcblx0XHRcdFx0YVBhcmFtcyA9IFtzS2V5VmFsdWUsIFwiXCJdO1xuXHRcdFx0XHR0eHQgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcblx0XHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUSU5GT1wiLFxuXHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHRhUGFyYW1zLFxuXHRcdFx0XHRcdGVudGl0eVNldE5hbWVcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHR4dCA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9TSU5HVUxBUlwiLFxuXHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0eHQgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcblx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX1NJTkdVTEFSXCIsXG5cdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRlbnRpdHlTZXROYW1lXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0dHlwZTogRGVsZXRlT3B0aW9uVHlwZXMuZGVsZXRhYmxlQ29udGV4dHMsXG5cdFx0XHRjb250ZXh0czogZGlyZWN0RGVsZXRhYmxlQ29udGV4dHMsXG5cdFx0XHR0ZXh0OiB0eHQsXG5cdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdGNvbnRyb2w6IERlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sLlRFWFRcblx0XHR9KTtcblx0fSBlbHNlIGlmIChcblx0XHR1blNhdmVkQ29udGV4dHMubGVuZ3RoICE9PSB0b3RhbERlbGV0YWJsZSAmJlxuXHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA+IDAgJiZcblx0XHQoZGlyZWN0RGVsZXRhYmxlQ29udGV4dHMubGVuZ3RoID4gMCB8fCAodW5TYXZlZENvbnRleHRzLmxlbmd0aCA+IDAgJiYgZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZS5sZW5ndGggPiAwKSlcblx0KSB7XG5cdFx0aWYgKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA+IGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLmxlbmd0aCAmJiBub25EZWxldGFibGVDb250ZXh0cyArIGxvY2tlZENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIG90aGVyIHR5cGVzIGV4aXN0cyB3aXRoIHB1cmUgZGVsZXRhYmxlIG9uZXNcblx0XHRcdGxldCBkZWxldGFibGVPcHRpb25UeHQgPSBcIlwiO1xuXHRcdFx0aWYgKHRvdGFsRGVsZXRhYmxlID09PSAxKSB7XG5cdFx0XHRcdGRlbGV0YWJsZU9wdGlvblR4dCA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9TSU5HVUxBUl9OT05fREVMRVRBQkxFXCIsXG5cdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRlbnRpdHlTZXROYW1lXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWxldGFibGVPcHRpb25UeHQgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcblx0XHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUVElUTEVfUExVUkFMX05PTl9ERUxFVEFCTEVcIixcblx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdGVudGl0eVNldE5hbWVcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdG9wdGlvbnMudW5zaGlmdCh7XG5cdFx0XHRcdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzLmRlbGV0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHRjb250ZXh0czogZGlyZWN0RGVsZXRhYmxlQ29udGV4dHMsXG5cdFx0XHRcdHRleHQ6IGRlbGV0YWJsZU9wdGlvblR4dCxcblx0XHRcdFx0c2VsZWN0ZWQ6IHRydWUsXG5cdFx0XHRcdGNvbnRyb2w6IERlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sLlRFWFRcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBvbmx5IGRlbGV0YWJsZVxuXHRcdFx0Y29uc3QgYWxsRGVsZXRhYmxlVHh0ID1cblx0XHRcdFx0dG90YWxEZWxldGFibGUgPT09IDFcblx0XHRcdFx0XHQ/IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUVElUTEVfU0lOR1VMQVJcIixcblx0XHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdGVudGl0eVNldE5hbWVcblx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHQ6IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUVElUTEVfUExVUkFMXCIsXG5cdFx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRlbnRpdHlTZXROYW1lXG5cdFx0XHRcdFx0ICApO1xuXHRcdFx0b3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogRGVsZXRlT3B0aW9uVHlwZXMuZGVsZXRhYmxlQ29udGV4dHMsXG5cdFx0XHRcdGNvbnRleHRzOiBkaXJlY3REZWxldGFibGVDb250ZXh0cyxcblx0XHRcdFx0dGV4dDogYWxsRGVsZXRhYmxlVHh0LFxuXHRcdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdFx0Y29udHJvbDogRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wuVEVYVFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUNvbmZpcm1IYW5kbGVyKFxuXHRvcHRpb25zOiBEZWxldGVPcHRpb25bXSxcblx0bVBhcmFtZXRlcnM6IERlbGV0ZVBhcmFtZXRlcnMsXG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0b1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdGRyYWZ0RW5hYmxlZDogYm9vbGVhblxuKSB7XG5cdHRyeSB7XG5cdFx0Y29uc3QgY29udGV4dHMgPSBkZWxldGVIZWxwZXIuZ2V0Q29uZmlybWVkRGVsZXRhYmxlQ29udGV4dChbXSwgb3B0aW9ucyk7XG5cdFx0Y29uc3QgeyBiZWZvcmVEZWxldGVDYWxsQmFjaywgcGFyZW50Q29udHJvbCB9ID0gbVBhcmFtZXRlcnM7XG5cdFx0aWYgKGJlZm9yZURlbGV0ZUNhbGxCYWNrKSB7XG5cdFx0XHRhd2FpdCBiZWZvcmVEZWxldGVDYWxsQmFjayh7IGNvbnRleHRzOiBjb250ZXh0cyB9KTtcblx0XHR9XG5cblx0XHRpZiAoY29udGV4dHMgJiYgY29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRjb250ZXh0cy5tYXAoZnVuY3Rpb24gKGNvbnRleHQ6IFY0Q29udGV4dCkge1xuXHRcdFx0XHRcdFx0aWYgKGRyYWZ0RW5hYmxlZCAmJiAhY29udGV4dC5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpKSB7XG5cdFx0XHRcdFx0XHRcdC8vZGVsZXRlIHRoZSBkcmFmdFxuXHRcdFx0XHRcdFx0XHRjb25zdCBlbmFibGVTdHJpY3RIYW5kbGluZyA9IGNvbnRleHRzLmxlbmd0aCA9PT0gMSA/IHRydWUgOiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGRyYWZ0LmRlbGV0ZURyYWZ0KGNvbnRleHQsIGFwcENvbXBvbmVudCwgZW5hYmxlU3RyaWN0SGFuZGxpbmcpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbnRleHQuZGVsZXRlKCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdFx0ZGVsZXRlSGVscGVyLmFmdGVyRGVsZXRlUHJvY2VzcyhtUGFyYW1ldGVycywgb3B0aW9ucywgY29udGV4dHMsIG9SZXNvdXJjZUJ1bmRsZSk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZyh7IGNvbnRyb2w6IHBhcmVudENvbnRyb2wgfSk7XG5cdFx0XHRcdC8vIHJlLXRocm93IGVycm9yIHRvIGVuZm9yY2UgcmVqZWN0aW5nIHRoZSBnZW5lcmFsIHByb21pc2Vcblx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGNhdGNoIChvRXJyb3IpIHtcblx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoKTtcblx0XHQvLyByZS10aHJvdyBlcnJvciB0byBlbmZvcmNlIHJlamVjdGluZyB0aGUgZ2VuZXJhbCBwcm9taXNlXG5cdFx0dGhyb3cgb0Vycm9yO1xuXHR9XG59XG5cbi8vIFRhYmxlIFJ1bnRpbWUgSGVscGVyczpcblxuLyogcmVmcmVzaGVzIGRhdGEgaW4gaW50ZXJuYWwgbW9kZWwgcmVsZXZhbnQgZm9yIGVuYWJsZW1lbnQgb2YgZGVsZXRlIGJ1dHRvbiBhY2NvcmRpbmcgdG8gc2VsZWN0ZWQgY29udGV4dHNcbnJlbGV2YW50IGRhdGEgYXJlOiBkZWxldGFibGVDb250ZXh0cywgZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSwgZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSwgY3JlYXRlTW9kZUNvbnRleHRzLCB1blNhdmVkQ29udGV4dHMsIGRlbGV0ZUVuYWJsZWRcbm5vdCByZWxldmFudDogbG9ja2VkQ29udGV4dHNcbiovXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyhpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsIHNlbGVjdGVkQ29udGV4dHM6IENvbnRleHRbXSkge1xuXHR0eXBlIGNvbnRleHRJbmZvID0ge1xuXHRcdGNvbnRleHQ6IENvbnRleHQ7XG5cdFx0c2libGluZ1Byb21pc2U6IFByb21pc2U8U2libGluZ0luZm9ybWF0aW9uIHwgdW5kZWZpbmVkIHwgdm9pZD47XG5cdFx0c2libGluZ0luZm86IFNpYmxpbmdJbmZvcm1hdGlvbiB8IHVuZGVmaW5lZDtcblx0XHRpc0RyYWZ0Um9vdDogYm9vbGVhbjtcblx0XHRpc0RyYWZ0Tm9kZTogYm9vbGVhbjtcblx0XHRpc0FjdGl2ZTogYm9vbGVhbjtcblx0XHRoYXNBY3RpdmU6IGJvb2xlYW47XG5cdFx0aGFzRHJhZnQ6IGJvb2xlYW47XG5cdFx0bG9ja2VkOiBib29sZWFuO1xuXHRcdGRlbGV0YWJsZTogYm9vbGVhbjtcblx0XHRzaWJsaW5nRGVsZXRhYmxlOiBib29sZWFuO1xuXHR9O1xuXHRjb25zdCBjb250ZXh0SW5mb3MgPSBzZWxlY3RlZENvbnRleHRzLm1hcCgoY29udGV4dCkgPT4ge1xuXHRcdC8vIGFzc3VtaW5nIG1ldGFDb250ZXh0IGlzIHRoZSBzYW1lIGZvciBhbGwgY29udGV4dHMsIHN0aWxsIG5vdCByZWx5aW5nIG9uIHRoaXMgYXNzdW1wdGlvblxuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gY29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE1ldGFDb250ZXh0KGNvbnRleHQuZ2V0Q2Fub25pY2FsUGF0aCgpKTtcblx0XHRjb25zdCBkZWxldGFibGVQYXRoID0gbWV0YUNvbnRleHQuZ2V0UHJvcGVydHkoXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWxldGVSZXN0cmljdGlvbnMvRGVsZXRhYmxlLyRQYXRoXCIpO1xuXHRcdGNvbnN0IHN0YXRpY0RlbGV0YWJsZSA9XG5cdFx0XHQhZGVsZXRhYmxlUGF0aCAmJiBtZXRhQ29udGV4dC5nZXRQcm9wZXJ0eShcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlbGV0ZVJlc3RyaWN0aW9ucy9EZWxldGFibGVcIikgIT09IGZhbHNlO1xuXHRcdC8vIGRlZmF1bHQgdmFsdWVzIGFjY29yZGluZyB0byBub24tZHJhZnQgY2FzZSAoc3RpY2t5IGJlaGF2ZXMgdGhlIHNhbWUgYXMgbm9uLWRyYWZ0IGZyb20gVUkgcG9pbnQgb2YgdmlldyByZWdhcmRpbmcgZGVsZXRpb24pXG5cdFx0Y29uc3QgaW5mbzogY29udGV4dEluZm8gPSB7XG5cdFx0XHRjb250ZXh0OiBjb250ZXh0LFxuXHRcdFx0aXNEcmFmdFJvb3Q6ICEhbWV0YUNvbnRleHQuZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiKSxcblx0XHRcdGlzRHJhZnROb2RlOiAhIW1ldGFDb250ZXh0LmdldFByb3BlcnR5KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVcIiksXG5cdFx0XHRpc0FjdGl2ZTogdHJ1ZSxcblx0XHRcdGhhc0FjdGl2ZTogZmFsc2UsXG5cdFx0XHRoYXNEcmFmdDogZmFsc2UsXG5cdFx0XHRsb2NrZWQ6IGZhbHNlLFxuXHRcdFx0ZGVsZXRhYmxlOiBkZWxldGFibGVQYXRoID8gY29udGV4dC5nZXRQcm9wZXJ0eShkZWxldGFibGVQYXRoKSA6IHN0YXRpY0RlbGV0YWJsZSxcblx0XHRcdHNpYmxpbmdQcm9taXNlOiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKSxcblx0XHRcdHNpYmxpbmdJbmZvOiB1bmRlZmluZWQsXG5cdFx0XHRzaWJsaW5nRGVsZXRhYmxlOiBmYWxzZVxuXHRcdH07XG5cblx0XHRpZiAoaW5mby5pc0RyYWZ0Um9vdCkge1xuXHRcdFx0aW5mby5sb2NrZWQgPSAhIWNvbnRleHQuZ2V0T2JqZWN0KFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFcIik/LkluUHJvY2Vzc0J5VXNlcjtcblx0XHRcdGluZm8uaGFzRHJhZnQgPSBjb250ZXh0LmdldFByb3BlcnR5KFwiSGFzRHJhZnRFbnRpdHlcIik7XG5cdFx0fVxuXHRcdGlmIChpbmZvLmlzRHJhZnRSb290IHx8IGluZm8uaXNEcmFmdE5vZGUpIHtcblx0XHRcdGluZm8uaXNBY3RpdmUgPSBjb250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIik7XG5cdFx0XHRpbmZvLmhhc0FjdGl2ZSA9IGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNBY3RpdmVFbnRpdHlcIik7XG5cdFx0XHRpZiAoIWluZm8uaXNBY3RpdmUgJiYgaW5mby5oYXNBY3RpdmUpIHtcblx0XHRcdFx0Ly8gZ2V0IHNpYmxpbmcgY29udGV4dHNcblx0XHRcdFx0Ly8gZHJhZnQuY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbiBleHBlY3RzIGRyYWZ0IHJvb3QgYXMgZmlyc3QgcGFyYW1ldGVyIC0gaWYgd2UgYXJlIG9uIGEgc3Vibm9kZSwgdGhpcyBpcyBub3QgZ2l2ZW5cblx0XHRcdFx0Ly8gLSBkb25lIHdyb25nIGFsc28gYWJvdmUsIGJ1dCBzZWVtcyBub3QgdG8gYnJlYWsgYW55dGhpbmdcblx0XHRcdFx0Ly8gLSB3aHkgaXMgZHJhZnQuY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbiBub3QgYWJsZSB0byBjYWxjdWxhdGUgZHJhZnQgcm9vdCBvbiBpdHMgb3duPyFcblx0XHRcdFx0Ly8gLSBhbmQgd2h5IGlzIGl0IG5vdCBhYmxlIHRvIGRlYWwgd2l0aCBjb250ZXh0cyBub3QgZHJhZnQgZW5hYmxlZCAob2YgY291cnNlIHRoZXkgbmV2ZXIgaGF2ZSBhIHNpYmxpbmcgLSBjb3VsZCBqdXN0IHJldHVybiB1bmRlZmluZWQpXG5cdFx0XHRcdGluZm8uc2libGluZ1Byb21pc2UgPSBkcmFmdC5jb21wdXRlU2libGluZ0luZm9ybWF0aW9uKGNvbnRleHQsIGNvbnRleHQpLnRoZW4oYXN5bmMgKHNpYmxpbmdJbmZvcm1hdGlvbikgPT4ge1xuXHRcdFx0XHRcdC8vIEZvciBkcmFmdFdpdGhEZWxldGFibGVBY3RpdmUgYnVja2V0LCBjdXJyZW50bHkgYWxzbyBzaWJsaW5nSW5mb3JtYXRpb24gaXMgcHV0IGludG8gaW50ZXJuYWxNb2RlbCBhbmQgdXNlZFxuXHRcdFx0XHRcdC8vIGZyb20gdGhlcmUgaW4gY2FzZSBvZiBkZWxldGlvbi4gVGhlcmVmb3JlLCBzaWJsaW5nIG5lZWRzIHRvIGJlIHJldHJpZXZlZCBpbiBjYXNlIG9mIHN0YXRpY0RlbGV0YWJsZS5cblx0XHRcdFx0XHQvLyBQb3NzaWJsZSBpbXByb3ZlbWVudDogT25seSByZWFkIHNpYmxpbmdJbmZvIGhlcmUgaWYgbmVlZGVkIGZvciBkZXRlcm1pbmF0aW9uIG9mIGRlbGV0ZSBidXR0b24gZW5hYmxlbWVudCxcblx0XHRcdFx0XHQvLyBpbiBvdGhlciBjYXNlcywgcmVhZCBpdCBvbmx5IGlmIGRlbGV0aW9uIHJlYWxseSBoYXBwZW5zLlxuXHRcdFx0XHRcdGluZm8uc2libGluZ0luZm8gPSBzaWJsaW5nSW5mb3JtYXRpb247XG5cdFx0XHRcdFx0aWYgKGRlbGV0YWJsZVBhdGgpIHtcblx0XHRcdFx0XHRcdGluZm8uc2libGluZ0RlbGV0YWJsZSA9IGF3YWl0IHNpYmxpbmdJbmZvcm1hdGlvbj8udGFyZ2V0Q29udGV4dD8ucmVxdWVzdFByb3BlcnR5KGRlbGV0YWJsZVBhdGgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpbmZvLnNpYmxpbmdEZWxldGFibGUgPSBzdGF0aWNEZWxldGFibGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGluZm87XG5cdH0pO1xuXHQvLyB3YWl0IGZvciBhbGwgc2libGluZ1Byb21pc2VzLiBJZiBubyBzaWJsaW5nIGV4aXN0cywgcHJvbWlzZSBpcyByZXNvbHZlZCB0byB1bmRlZmluZWQgKGJ1dCBpdCdzIHN0aWxsIGEgcHJvbWlzZSlcblx0YXdhaXQgUHJvbWlzZS5hbGwoY29udGV4dEluZm9zLm1hcCgoaW5mbykgPT4gaW5mby5zaWJsaW5nUHJvbWlzZSkpO1xuXG5cdGNvbnN0IGJ1Y2tldHMgPSBbXG5cdFx0e1xuXHRcdFx0a2V5OiBcImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVcIixcblx0XHRcdC8vIG9ubHkgZm9yIGRyYWZ0IHJvb3Q6IEluIHRoYXQgY2FzZSwgdGhlIGRlbGV0ZSByZXF1ZXN0IG5lZWRzIHRvIGJlIHNlbnQgZm9yIHRoZSBhY3RpdmUgKGkuZS4gdGhlIHNpYmxpbmcpLFxuXHRcdFx0Ly8gd2hpbGUgaW4gZHJhZnQgbm9kZSwgdGhlIGRlbGV0ZSByZXF1ZXN0IG5lZWRzIHRvIGJlIHNlbmQgZm9yIHRoZSBkcmFmdCBpdHNlbGZcblx0XHRcdHZhbHVlOiBjb250ZXh0SW5mb3MuZmlsdGVyKChpbmZvKSA9PiBpbmZvLmlzRHJhZnRSb290ICYmICFpbmZvLmlzQWN0aXZlICYmIGluZm8uaGFzQWN0aXZlICYmIGluZm8uc2libGluZ0RlbGV0YWJsZSlcblx0XHR9LFxuXHRcdHtcblx0XHRcdGtleTogXCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlXCIsXG5cdFx0XHR2YWx1ZTogY29udGV4dEluZm9zLmZpbHRlcigoaW5mbykgPT4gIWluZm8uaXNBY3RpdmUgJiYgaW5mby5oYXNBY3RpdmUgJiYgIWluZm8uc2libGluZ0RlbGV0YWJsZSlcblx0XHR9LFxuXHRcdHsga2V5OiBcImxvY2tlZENvbnRleHRzXCIsIHZhbHVlOiBjb250ZXh0SW5mb3MuZmlsdGVyKChpbmZvKSA9PiBpbmZvLmlzRHJhZnRSb290ICYmIGluZm8uaXNBY3RpdmUgJiYgaW5mby5oYXNEcmFmdCAmJiBpbmZvLmxvY2tlZCkgfSxcblx0XHR7XG5cdFx0XHRrZXk6IFwidW5TYXZlZENvbnRleHRzXCIsXG5cdFx0XHR2YWx1ZTogY29udGV4dEluZm9zLmZpbHRlcigoaW5mbykgPT4gaW5mby5pc0RyYWZ0Um9vdCAmJiBpbmZvLmlzQWN0aXZlICYmIGluZm8uaGFzRHJhZnQgJiYgIWluZm8ubG9ja2VkKVxuXHRcdH0sXG5cdFx0Ly8gbm9uLWRyYWZ0L3N0aWNreSBhbmQgZGVsZXRhYmxlXG5cdFx0Ly8gYWN0aXZlIGRyYWZ0IHJvb3Qgd2l0aG91dCBhbnkgZHJhZnQgYW5kIGRlbGV0YWJsZVxuXHRcdC8vIGNyZWF0ZWQgZHJhZnQgcm9vdCAocmVnYXJkbGVzcyBvZiBkZWxldGFibGUpXG5cdFx0Ly8gZHJhZnQgbm9kZSB3aXRob3V0IGFjdGl2ZSAocmVnYXJkbGVzcyB3aGV0aGVyIHJvb3QgaXMgY3JlYXRlIG9yIGVkaXQsIGFuZCByZWdhcmRsZXNzIG9mIGRlbGV0YWJsZSlcblx0XHQvLyBkcmFmdCBub2RlIHdpdGggZGVsZXRhYmxlIGFjdGl2ZVxuXHRcdHtcblx0XHRcdGtleTogXCJkZWxldGFibGVDb250ZXh0c1wiLFxuXHRcdFx0dmFsdWU6IGNvbnRleHRJbmZvcy5maWx0ZXIoXG5cdFx0XHRcdChpbmZvKSA9PlxuXHRcdFx0XHRcdCghaW5mby5pc0RyYWZ0Um9vdCAmJiAhaW5mby5pc0RyYWZ0Tm9kZSAmJiBpbmZvLmRlbGV0YWJsZSkgfHxcblx0XHRcdFx0XHQoaW5mby5pc0RyYWZ0Um9vdCAmJiBpbmZvLmlzQWN0aXZlICYmICFpbmZvLmhhc0RyYWZ0ICYmIGluZm8uZGVsZXRhYmxlKSB8fFxuXHRcdFx0XHRcdChpbmZvLmlzRHJhZnRSb290ICYmICFpbmZvLmlzQWN0aXZlICYmICFpbmZvLmhhc0FjdGl2ZSkgfHxcblx0XHRcdFx0XHQoaW5mby5pc0RyYWZ0Tm9kZSAmJiAhaW5mby5pc0FjdGl2ZSAmJiAhaW5mby5oYXNBY3RpdmUpIHx8XG5cdFx0XHRcdFx0KGluZm8uaXNEcmFmdE5vZGUgJiYgIWluZm8uaXNBY3RpdmUgJiYgaW5mby5oYXNBY3RpdmUgJiYgaW5mby5zaWJsaW5nRGVsZXRhYmxlKVxuXHRcdFx0KVxuXHRcdH1cblx0XTtcblxuXHRmb3IgKGNvbnN0IHsga2V5LCB2YWx1ZSB9IG9mIGJ1Y2tldHMpIHtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcblx0XHRcdGtleSxcblx0XHRcdC8vIEN1cnJlbnRseSwgYnVja2V0IGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUgaGFzIGEgZGlmZmVyZW50IHN0cnVjdHVyZSAoY29udGFpbmluZyBhbHNvIHNpYmxpbmcgaW5mb3JtYXRpb24sIHdoaWNoIGlzIHVzZWRcblx0XHRcdC8vIGluIGNhc2Ugb2YgZGVsZXRpb24pLiBQb3NzaWJsZSBpbXByb3ZlbWVudDogUmVhZCBzaWJsaW5nIGluZm9ybWF0aW9uIG9ubHkgd2hlbiBuZWVkZWQsIGFuZCBidWlsZCBhbGwgYnVja2V0cyB3aXRoIHNhbWVcblx0XHRcdC8vIHN0cnVjdHVyZS4gSG93ZXZlciwgaW4gdGhhdCBjYXNlIHNpYmxpbmdJbmZvcm1hdGlvbiBtaWdodCBuZWVkIHRvIGJlIHJlYWQgdHdpY2UgKGlmIGFscmVhZHkgbmVlZGVkIGZvciBidXR0b24gZW5hYmxlbWVudCksXG5cdFx0XHQvLyB0aHVzIGEgYnVmZmVyIHByb2JhYmx5IHdvdWxkIG1ha2Ugc2Vuc2UuXG5cdFx0XHR2YWx1ZS5tYXAoKGluZm8pID0+XG5cdFx0XHRcdGtleSA9PT0gXCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlXCIgPyB7IGRyYWZ0OiBpbmZvLmNvbnRleHQsIHNpYmxpbmdJbmZvOiBpbmZvLnNpYmxpbmdJbmZvIH0gOiBpbmZvLmNvbnRleHRcblx0XHRcdClcblx0XHQpO1xuXHR9XG59XG5cbmNvbnN0IGRlbGV0ZUhlbHBlciA9IHtcblx0Z2V0Tm9uRGVsZXRhYmxlVGV4dCxcblx0ZGVsZXRlQ29uZmlybUhhbmRsZXIsXG5cdHVwZGF0ZU9wdGlvbnNGb3JEZWxldGFibGVUZXh0cyxcblx0dXBkYXRlQ29udGVudEZvckRlbGV0ZURpYWxvZyxcblx0dXBkYXRlRHJhZnRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMsXG5cdGdldENvbmZpcm1lZERlbGV0YWJsZUNvbnRleHQsXG5cdGdldExvY2tlZE9iamVjdHNUZXh0LFxuXHRnZXRVbnNhdmVkQ29udGV4dHNUZXh0LFxuXHRnZXROb25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0LFxuXHRhZnRlckRlbGV0ZVByb2Nlc3MsXG5cblx0dXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGRlbGV0ZUhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7TUFtQllBLGlCQUFpQjtFQUFBLFdBQWpCQSxpQkFBaUI7SUFBakJBLGlCQUFpQjtJQUFqQkEsaUJBQWlCO0lBQWpCQSxpQkFBaUI7SUFBakJBLGlCQUFpQjtJQUFqQkEsaUJBQWlCO0VBQUEsR0FBakJBLGlCQUFpQixLQUFqQkEsaUJBQWlCO0VBQUE7RUFBQSxJQVFqQkMsMEJBQTBCO0VBQUEsV0FBMUJBLDBCQUEwQjtJQUExQkEsMEJBQTBCO0lBQTFCQSwwQkFBMEI7RUFBQSxHQUExQkEsMEJBQTBCLEtBQTFCQSwwQkFBMEI7RUFBQTtFQTJEdEMsU0FBU0Msb0JBQW9CLENBQzVCQyxvQkFBMEMsRUFDMUNDLElBQXVCLEVBQ3ZCQyxnQkFBNkIsRUFDN0JDLGdCQUE2QixFQUNmO0lBQ2RBLGdCQUFnQixDQUFDQyxPQUFPLENBQUVDLE9BQWtCLElBQUs7TUFDaEQsTUFBTUMsR0FBRyxHQUFHSixnQkFBZ0IsQ0FBQ0ssT0FBTyxDQUFDRixPQUFPLENBQUM7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
|
|
557
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZWxldGVPcHRpb25UeXBlcyIsIkRlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sIiwiZ2V0VXBkYXRlZFNlbGVjdGlvbnMiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsInR5cGUiLCJzZWxlY3RlZENvbnRleHRzIiwiY29udGV4dHNUb1JlbW92ZSIsImZvckVhY2giLCJjb250ZXh0IiwiaWR4IiwiaW5kZXhPZiIsInNwbGljZSIsInNldFByb3BlcnR5IiwiY2xlYXJTZWxlY3RlZENvbnRleHRzRm9yT3B0aW9uIiwib3B0aW9uIiwiZ2V0UHJvcGVydHkiLCJkZWxldGFibGVDb250ZXh0cyIsImNyZWF0ZU1vZGVDb250ZXh0cyIsImRyYWZ0U2libGluZ1BhaXJzIiwiZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSIsImRyYWZ0cyIsIm1hcCIsImNvbnRleHRQYWlyIiwiZHJhZnQiLCJsZW5ndGgiLCJhZnRlckRlbGV0ZVByb2Nlc3MiLCJwYXJhbWV0ZXJzIiwib3B0aW9ucyIsImNvbnRleHRzIiwicmVzb3VyY2VNb2RlbCIsImVudGl0eVNldE5hbWUiLCJ1bmRlZmluZWQiLCJzZWxlY3RlZCIsInNvbWUiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiZ2V0VGV4dCIsImdldExvY2tlZENvbnRleHRVc2VyIiwibG9ja2VkQ29udGV4dCIsImRyYWZ0QWRtaW5EYXRhIiwiZ2V0T2JqZWN0IiwiZ2V0TG9ja2VkT2JqZWN0c1RleHQiLCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMiLCJsb2NrZWRDb250ZXh0cyIsInJldFR4dCIsImxvY2tlZFVzZXIiLCJnZXROb25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0IiwibnVtYmVyT2ZEcmFmdHMiLCJ0b3RhbERlbGV0YWJsZSIsImdldFVuU2F2ZWRDb250ZXh0VXNlciIsInVuU2F2ZWRDb250ZXh0Iiwic0xhc3RDaGFuZ2VkQnlVc2VyIiwiZ2V0VW5zYXZlZENvbnRleHRzVGV4dCIsInVuU2F2ZWRDb250ZXh0cyIsImluZm9UeHQiLCJvcHRpb25UeHQiLCJvcHRpb25XaXRob3V0VHh0IiwibGFzdENoYW5nZWRCeVVzZXIiLCJnZXROb25EZWxldGFibGVUZXh0IiwibVBhcmFtZXRlcnMiLCJ0b3RhbE51bURlbGV0YWJsZUNvbnRleHRzIiwiZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSIsIm5vbkRlbGV0YWJsZUNvbnRleHRzIiwiVGV4dCIsInRleHQiLCJnZXRDb25maXJtZWREZWxldGFibGVDb250ZXh0IiwicmVkdWNlIiwicmVzdWx0IiwiZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUiLCJjb25jYXQiLCJnZXREcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSIsInVwZGF0ZURyYWZ0T3B0aW9uc0ZvckRlbGV0YWJsZVRleHRzIiwidkNvbnRleHRzIiwiaXRlbXMiLCJsb2NrZWRDb250ZXh0c1R4dCIsImRlbGV0YWJsZURyYWZ0SW5mbyIsInB1c2giLCJzaWJsaW5nSW5mbyIsInRhcmdldENvbnRleHQiLCJkZWxldGVIZWxwZXIiLCJub25EZWxldGFibGVFeGlzdHMiLCJub25EZWxldGFibGVUZXh0Q3RybCIsInVuc2F2ZWRDaGFuZ2VzVHh0cyIsImNvbnRyb2wiLCJDSEVDS0JPWCIsIm5vbkRlbGV0YWJsZUFjdGl2ZXNPZkRyYWZ0c1RleHQiLCJURVhUIiwidXBkYXRlQ29udGVudEZvckRlbGV0ZURpYWxvZyIsIkNoZWNrQm94Iiwic2VsZWN0Iiwib0V2ZW50IiwiY2hlY2tCb3giLCJnZXRTb3VyY2UiLCJnZXRTZWxlY3RlZCIsInVwZGF0ZU9wdGlvbnNGb3JEZWxldGFibGVUZXh0cyIsImRpcmVjdERlbGV0YWJsZUNvbnRleHRzIiwicGFyZW50Q29udHJvbCIsImRlc2NyaXB0aW9uIiwib0xpbmVDb250ZXh0RGF0YSIsIm9UYWJsZSIsInNLZXkiLCJnZXRQYXJlbnQiLCJnZXRJZGVudGlmaWVyQ29sdW1uIiwidHh0IiwiYVBhcmFtcyIsInNLZXlWYWx1ZSIsInNEZXNjcmlwdGlvbiIsInBhdGgiLCJkZWxldGFibGVPcHRpb25UeHQiLCJ1bnNoaWZ0IiwiYWxsRGVsZXRhYmxlVHh0IiwiZGVsZXRlQ29uZmlybUhhbmRsZXIiLCJtZXNzYWdlSGFuZGxlciIsImFwcENvbXBvbmVudCIsImRyYWZ0RW5hYmxlZCIsImJlZm9yZURlbGV0ZUNhbGxCYWNrIiwiZW5hYmxlU3RyaWN0SGFuZGxpbmciLCJkcmFmdEVycm9ycyIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwiZGVsZXRlRHJhZnQiLCJlIiwiTG9nIiwiZXJyb3IiLCJnZXRQYXRoIiwiYWxsIiwiZGVsZXRlIiwiRXJyb3IiLCJzaG93TWVzc2FnZURpYWxvZyIsIm9FcnJvciIsInNob3dNZXNzYWdlcyIsInVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzIiwiY29udGV4dEluZm9zIiwibWV0YUNvbnRleHQiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImdldE1ldGFDb250ZXh0IiwiZ2V0Q2Fub25pY2FsUGF0aCIsImRlbGV0YWJsZVBhdGgiLCJzdGF0aWNEZWxldGFibGUiLCJpbmZvIiwiaXNEcmFmdFJvb3QiLCJpc0RyYWZ0Tm9kZSIsImlzQWN0aXZlIiwiaGFzQWN0aXZlIiwiaGFzRHJhZnQiLCJsb2NrZWQiLCJkZWxldGFibGUiLCJzaWJsaW5nUHJvbWlzZSIsInJlc29sdmUiLCJzaWJsaW5nRGVsZXRhYmxlIiwiSW5Qcm9jZXNzQnlVc2VyIiwiY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbiIsInRoZW4iLCJzaWJsaW5nSW5mb3JtYXRpb24iLCJyZXF1ZXN0UHJvcGVydHkiLCJidWNrZXRzIiwia2V5IiwidmFsdWUiLCJmaWx0ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRlbGV0ZUhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IGRyYWZ0LCB7IFNpYmxpbmdJbmZvcm1hdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgQ2hlY2tCb3ggZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5cbmltcG9ydCBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwiLi9Nb2RlbEhlbHBlclwiO1xuXG5leHBvcnQgZW51bSBEZWxldGVPcHRpb25UeXBlcyB7XG5cdGRlbGV0YWJsZUNvbnRleHRzID0gXCJkZWxldGFibGVDb250ZXh0c1wiLFxuXHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlID0gXCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlXCIsXG5cdGNyZWF0ZU1vZGVDb250ZXh0cyA9IFwiY3JlYXRlTW9kZUNvbnRleHRzXCIsXG5cdHVuU2F2ZWRDb250ZXh0cyA9IFwidW5TYXZlZENvbnRleHRzXCIsXG5cdGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUgPSBcImRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVcIixcblx0ZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUgPSBcImRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlXCJcbn1cblxuZXhwb3J0IGVudW0gRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wge1xuXHRDSEVDS0JPWCA9IFwiY2hlY2tCb3hcIixcblx0VEVYVCA9IFwidGV4dFwiXG59XG5cbmV4cG9ydCB0eXBlIERyYWZ0U2libGluZ1BhaXIgPSB7XG5cdGRyYWZ0OiBDb250ZXh0O1xuXHRzaWJsaW5nSW5mbzogU2libGluZ0luZm9ybWF0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgRGVsZXRlT3B0aW9uID0ge1xuXHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcztcblx0Y29udGV4dHM6IENvbnRleHRbXTtcblx0c2VsZWN0ZWQ6IGJvb2xlYW47XG5cdHRleHQ/OiBzdHJpbmc7XG5cdGNvbnRyb2w/OiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbDtcbn07XG5cbmV4cG9ydCB0eXBlIE1vZGVsT2JqZWN0UHJvcGVydGllcyA9IHtcblx0ZGVsZXRhYmxlQ29udGV4dHM6IENvbnRleHRbXTtcblx0dW5TYXZlZENvbnRleHRzOiBDb250ZXh0W107XG5cdGNyZWF0ZU1vZGVDb250ZXh0czogQ29udGV4dFtdO1xuXHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlOiBDb250ZXh0W107XG5cdGxvY2tlZENvbnRleHRzOiBDb250ZXh0W107XG5cdGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmU6IERyYWZ0U2libGluZ1BhaXJbXTtcblx0ZGVsZXRlRW5hYmxlZDogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhVHlwZSA9IHtcblx0RHJhZnRVVUlEOiBzdHJpbmc7XG5cdEluUHJvY2Vzc0J5VXNlcj86IHN0cmluZztcblx0SW5Qcm9jZXNzQnlVc2VyRGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdENyZWF0ZWRCeVVzZXJEZXNjcmlwdGlvbj86IHN0cmluZztcblx0Q3JlYXRlZEJ5VXNlcj86IHN0cmluZztcblx0TGFzdENoYW5nZWRCeVVzZXJEZXNjcmlwdGlvbj86IHN0cmluZztcblx0TGFzdENoYW5nZWRCeVVzZXI/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBEZWxldGVQYXJhbWV0ZXJzID0ge1xuXHRpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0czogbnVtYmVyO1xuXHRlbnRpdHlTZXROYW1lOiBzdHJpbmc7XG5cdHBhcmVudENvbnRyb2w6IENvbnRyb2w7XG5cdGRlc2NyaXB0aW9uOiB7IHBhdGg6IHN0cmluZyB9O1xuXHRiZWZvcmVEZWxldGVDYWxsQmFjazogRnVuY3Rpb247XG5cdGRlbGV0YWJsZUNvbnRleHRzOiBDb250ZXh0W107XG5cdHVuU2F2ZWRDb250ZXh0czogQ29udGV4dFtdO1xuXHRjcmVhdGVNb2RlQ29udGV4dHM6IENvbnRleHRbXTtcblx0ZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZTogQ29udGV4dFtdO1xuXHRsb2NrZWRDb250ZXh0czogQ29udGV4dFtdO1xuXHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlOiBEcmFmdFNpYmxpbmdQYWlyW107XG59O1xuXG5leHBvcnQgdHlwZSBEZWxldGVUZXh0SW5mbyA9IHtcblx0aW5mb1R4dD86IHN0cmluZztcblx0b3B0aW9uVHh0Pzogc3RyaW5nO1xuXHRvcHRpb25XaXRob3V0VHh0PzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIGdldFVwZGF0ZWRTZWxlY3Rpb25zKFxuXHRpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzLFxuXHRzZWxlY3RlZENvbnRleHRzOiBDb250ZXh0W10sXG5cdGNvbnRleHRzVG9SZW1vdmU6IENvbnRleHRbXVxuKTogQ29udGV4dFtdIHtcblx0Y29udGV4dHNUb1JlbW92ZS5mb3JFYWNoKChjb250ZXh0OiBDb250ZXh0KSA9PiB7XG5cdFx0Y29uc3QgaWR4ID0gc2VsZWN0ZWRDb250ZXh0cy5pbmRleE9mKGNvbnRleHQpO1xuXHRcdGlmIChpZHggIT09IC0xKSB7XG5cdFx0XHRzZWxlY3RlZENvbnRleHRzLnNwbGljZShpZHgsIDEpO1xuXHRcdH1cblx0fSk7XG5cdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KHR5cGUsIFtdKTtcblxuXHRyZXR1cm4gWy4uLnNlbGVjdGVkQ29udGV4dHNdO1xufVxuXG5mdW5jdGlvbiBjbGVhclNlbGVjdGVkQ29udGV4dHNGb3JPcHRpb24oaW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LCBvcHRpb246IERlbGV0ZU9wdGlvbikge1xuXHRsZXQgc2VsZWN0ZWRDb250ZXh0cyA9IChpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIikgYXMgQ29udGV4dFtdKSB8fCBbXTtcblxuXHRpZiAob3B0aW9uLnR5cGUgPT09IERlbGV0ZU9wdGlvblR5cGVzLmRlbGV0YWJsZUNvbnRleHRzKSB7XG5cdFx0c2VsZWN0ZWRDb250ZXh0cyA9IGdldFVwZGF0ZWRTZWxlY3Rpb25zKFxuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHREZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cyxcblx0XHRcdHNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShEZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cykgfHwgW11cblx0XHQpO1xuXHRcdHNlbGVjdGVkQ29udGV4dHMgPSBnZXRVcGRhdGVkU2VsZWN0aW9ucyhcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0RGVsZXRlT3B0aW9uVHlwZXMuY3JlYXRlTW9kZUNvbnRleHRzLFxuXHRcdFx0c2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KERlbGV0ZU9wdGlvblR5cGVzLmNyZWF0ZU1vZGVDb250ZXh0cykgfHwgW11cblx0XHQpO1xuXG5cdFx0Y29uc3QgZHJhZnRTaWJsaW5nUGFpcnMgPSBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShEZWxldGVPcHRpb25UeXBlcy5kcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlKSB8fCBbXTtcblx0XHRjb25zdCBkcmFmdHMgPSBkcmFmdFNpYmxpbmdQYWlycy5tYXAoKGNvbnRleHRQYWlyOiBEcmFmdFNpYmxpbmdQYWlyKSA9PiB7XG5cdFx0XHRyZXR1cm4gY29udGV4dFBhaXIuZHJhZnQ7XG5cdFx0fSk7XG5cdFx0c2VsZWN0ZWRDb250ZXh0cyA9IGdldFVwZGF0ZWRTZWxlY3Rpb25zKFxuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHREZWxldGVPcHRpb25UeXBlcy5kcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlLFxuXHRcdFx0c2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdGRyYWZ0c1xuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgY29udGV4dHNUb1JlbW92ZSA9IGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KG9wdGlvbi50eXBlKSB8fCBbXTtcblx0XHRzZWxlY3RlZENvbnRleHRzID0gZ2V0VXBkYXRlZFNlbGVjdGlvbnMoaW50ZXJuYWxNb2RlbENvbnRleHQsIG9wdGlvbi50eXBlLCBzZWxlY3RlZENvbnRleHRzLCBjb250ZXh0c1RvUmVtb3ZlKTtcblx0fVxuXHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiwgc2VsZWN0ZWRDb250ZXh0cyk7XG5cdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24gYWZ0ZXJEZWxldGVQcm9jZXNzKHBhcmFtZXRlcnM6IERlbGV0ZVBhcmFtZXRlcnMsIG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdLCBjb250ZXh0czogQ29udGV4dFtdLCByZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsKSB7XG5cdGNvbnN0IHsgaW50ZXJuYWxNb2RlbENvbnRleHQsIGVudGl0eVNldE5hbWUgfSA9IHBhcmFtZXRlcnM7XG5cdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImRlbGV0ZUVuYWJsZWRcIikgIT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4ge1xuXHRcdFx0XHQvLyBpZiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQsIHRoZW4gaXQgaXMgZGVsZXRlZC4gU28sIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZW0gZnJvbSBzZWxlY3RlZCBjb250ZXh0cy5cblx0XHRcdFx0aWYgKG9wdGlvbi5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdGNsZWFyU2VsZWN0ZWRDb250ZXh0c0Zvck9wdGlvbihpbnRlcm5hbE1vZGVsQ29udGV4dCwgb3B0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8vIGlmIGF0bGVhc3Qgb25lIG9mIHRoZSBvcHRpb25zIGlzIG5vdCBzZWxlY3RlZCwgdGhlbiB0aGUgZGVsZXRlIGJ1dHRvbiBuZWVkcyB0byBiZSBlbmFibGVkLlxuXHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFxuXHRcdFx0XCJkZWxldGVFbmFibGVkXCIsXG5cdFx0XHRvcHRpb25zLnNvbWUoKG9wdGlvbikgPT4gIW9wdGlvbi5zZWxlY3RlZClcblx0XHQpO1xuXHR9XG5cblx0aWYgKGNvbnRleHRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdE1lc3NhZ2VUb2FzdC5zaG93KHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0RFTEVURV9UT0FTVF9TSU5HVUxBUlwiLCB1bmRlZmluZWQsIGVudGl0eVNldE5hbWUpKTtcblx0fSBlbHNlIHtcblx0XHRNZXNzYWdlVG9hc3Quc2hvdyhyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9ERUxFVEVfVE9BU1RfUExVUkFMXCIsIHVuZGVmaW5lZCwgZW50aXR5U2V0TmFtZSkpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldExvY2tlZENvbnRleHRVc2VyKGxvY2tlZENvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRjb25zdCBkcmFmdEFkbWluRGF0YSA9IGxvY2tlZENvbnRleHQuZ2V0T2JqZWN0KClbXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiXSBhcyBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVR5cGU7XG5cdHJldHVybiAoZHJhZnRBZG1pbkRhdGEgJiYgZHJhZnRBZG1pbkRhdGFbXCJJblByb2Nlc3NCeVVzZXJcIl0pIHx8IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGdldExvY2tlZE9iamVjdHNUZXh0KHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsIG51bWJlck9mU2VsZWN0ZWRDb250ZXh0czogbnVtYmVyLCBsb2NrZWRDb250ZXh0czogQ29udGV4dFtdKTogc3RyaW5nIHtcblx0bGV0IHJldFR4dCA9IFwiXCI7XG5cblx0aWYgKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9PT0gMSAmJiBsb2NrZWRDb250ZXh0cy5sZW5ndGggPT09IDEpIHtcblx0XHQvL29ubHkgb25lIHVuc2F2ZWQgb2JqZWN0XG5cdFx0Y29uc3QgbG9ja2VkVXNlciA9IGdldExvY2tlZENvbnRleHRVc2VyKGxvY2tlZENvbnRleHRzWzBdKTtcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1NJTkdMRV9PQkpFQ1RfTE9DS0VEXCIsIFtsb2NrZWRVc2VyXSk7XG5cdH0gZWxzZSBpZiAobG9ja2VkQ29udGV4dHMubGVuZ3RoID09IDEpIHtcblx0XHRjb25zdCBsb2NrZWRVc2VyID0gZ2V0TG9ja2VkQ29udGV4dFVzZXIobG9ja2VkQ29udGV4dHNbMF0pO1xuXHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUSU5GT19BTkRfT05FX09CSkVDVF9MT0NLRURcIiwgW1xuXHRcdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0bG9ja2VkVXNlclxuXHRcdF0pO1xuXHR9IGVsc2UgaWYgKGxvY2tlZENvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVElORk9fQU5EX0ZFV19PQkpFQ1RTX0xPQ0tFRFwiLCBbXG5cdFx0XHRsb2NrZWRDb250ZXh0cy5sZW5ndGgsXG5cdFx0XHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcblx0XHRdKTtcblx0fVxuXG5cdHJldHVybiByZXRUeHQ7XG59XG5cbmZ1bmN0aW9uIGdldE5vbkRlbGV0YWJsZUFjdGl2ZXNPZkRyYWZ0c1RleHQocmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCwgbnVtYmVyT2ZEcmFmdHM6IG51bWJlciwgdG90YWxEZWxldGFibGU6IG51bWJlcik6IHN0cmluZyB7XG5cdGxldCByZXRUeHQgPSBcIlwiO1xuXG5cdGlmICh0b3RhbERlbGV0YWJsZSA9PT0gbnVtYmVyT2ZEcmFmdHMpIHtcblx0XHRpZiAobnVtYmVyT2ZEcmFmdHMgPT09IDEpIHtcblx0XHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX09OTFlfRFJBRlRfT0ZfTk9OX0RFTEVUQUJMRV9BQ1RJVkVcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX09OTFlfRFJBRlRTX09GX05PTl9ERUxFVEFCTEVfQUNUSVZFXCIpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChudW1iZXJPZkRyYWZ0cyA9PT0gMSkge1xuXHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX0RSQUZUX09GX05PTl9ERUxFVEFCTEVfQUNUSVZFXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX0RSQUZUU19PRl9OT05fREVMRVRBQkxFX0FDVElWRVwiKTtcblx0fVxuXG5cdHJldHVybiByZXRUeHQ7XG59XG5cbmZ1bmN0aW9uIGdldFVuU2F2ZWRDb250ZXh0VXNlcih1blNhdmVkQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB7XG5cdGNvbnN0IGRyYWZ0QWRtaW5EYXRhID0gdW5TYXZlZENvbnRleHQuZ2V0T2JqZWN0KClbXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiXSBhcyBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVR5cGU7XG5cdGxldCBzTGFzdENoYW5nZWRCeVVzZXIgPSBcIlwiO1xuXHRpZiAoZHJhZnRBZG1pbkRhdGEpIHtcblx0XHRzTGFzdENoYW5nZWRCeVVzZXIgPSBkcmFmdEFkbWluRGF0YVtcIkxhc3RDaGFuZ2VkQnlVc2VyRGVzY3JpcHRpb25cIl0gfHwgZHJhZnRBZG1pbkRhdGFbXCJMYXN0Q2hhbmdlZEJ5VXNlclwiXSB8fCBcIlwiO1xuXHR9XG5cblx0cmV0dXJuIHNMYXN0Q2hhbmdlZEJ5VXNlcjtcbn1cblxuZnVuY3Rpb24gZ2V0VW5zYXZlZENvbnRleHRzVGV4dChcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzOiBudW1iZXIsXG5cdHVuU2F2ZWRDb250ZXh0czogQ29udGV4dFtdLFxuXHR0b3RhbERlbGV0YWJsZTogbnVtYmVyXG4pOiBEZWxldGVUZXh0SW5mbyB7XG5cdGxldCBpbmZvVHh0ID0gXCJcIixcblx0XHRvcHRpb25UeHQgPSBcIlwiLFxuXHRcdG9wdGlvbldpdGhvdXRUeHQgPSBmYWxzZTtcblx0aWYgKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9PT0gMSAmJiB1blNhdmVkQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0Ly9vbmx5IG9uZSB1bnNhdmVkIG9iamVjdCBhcmUgc2VsZWN0ZWRcblx0XHRjb25zdCBsYXN0Q2hhbmdlZEJ5VXNlciA9IGdldFVuU2F2ZWRDb250ZXh0VXNlcih1blNhdmVkQ29udGV4dHNbMF0pO1xuXHRcdGluZm9UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1VOU0FWRURfQ0hBTkdFU1wiLCBbbGFzdENoYW5nZWRCeVVzZXJdKTtcblx0XHRvcHRpb25XaXRob3V0VHh0ID0gdHJ1ZTtcblx0fSBlbHNlIGlmIChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPT09IHVuU2F2ZWRDb250ZXh0cy5sZW5ndGgpIHtcblx0XHQvL29ubHkgbXVsdGlwbGUgdW5zYXZlZCBvYmplY3RzIGFyZSBzZWxlY3RlZFxuXHRcdGluZm9UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1VOU0FWRURfQ0hBTkdFU19NVUxUSVBMRV9PQkpFQ1RTXCIpO1xuXHRcdG9wdGlvbldpdGhvdXRUeHQgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKHRvdGFsRGVsZXRhYmxlID09PSB1blNhdmVkQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0Ly8gbm9uLWRlbGV0YWJsZS9sb2NrZWQgZXhpc3RzLCBhbGwgZGVsZXRhYmxlIGFyZSB1bnNhdmVkIGJ5IG90aGVyc1xuXHRcdGlmICh1blNhdmVkQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRjb25zdCBsYXN0Q2hhbmdlZEJ5VXNlciA9IGdldFVuU2F2ZWRDb250ZXh0VXNlcih1blNhdmVkQ29udGV4dHNbMF0pO1xuXHRcdFx0aW5mb1R4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfVU5TQVZFRF9BTkRfRkVXX09CSkVDVFNfTE9DS0VEX1NJTkdVTEFSXCIsIFtcblx0XHRcdFx0bGFzdENoYW5nZWRCeVVzZXJcblx0XHRcdF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbmZvVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9VTlNBVkVEX0FORF9GRVdfT0JKRUNUU19MT0NLRURfUExVUkFMXCIpO1xuXHRcdH1cblx0XHRvcHRpb25XaXRob3V0VHh0ID0gdHJ1ZTtcblx0fSBlbHNlIGlmICh0b3RhbERlbGV0YWJsZSA+IHVuU2F2ZWRDb250ZXh0cy5sZW5ndGgpIHtcblx0XHQvLyBub24tZGVsZXRhYmxlL2xvY2tlZCBleGlzdHMsIGRlbGV0YWJsZSBpbmNsdWRlIHVuc2F2ZWQgYW5kIG90aGVyIHR5cGVzLlxuXHRcdGlmICh1blNhdmVkQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRjb25zdCBsYXN0Q2hhbmdlZEJ5VXNlciA9IGdldFVuU2F2ZWRDb250ZXh0VXNlcih1blNhdmVkQ29udGV4dHNbMF0pO1xuXHRcdFx0b3B0aW9uVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPX0FORF9GRVdfT0JKRUNUU19VTlNBVkVEX1NJTkdVTEFSXCIsIFtcblx0XHRcdFx0bGFzdENoYW5nZWRCeVVzZXJcblx0XHRcdF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvcHRpb25UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVElORk9fQU5EX0ZFV19PQkpFQ1RTX1VOU0FWRURfUExVUkFMXCIpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IGluZm9UeHQsIG9wdGlvblR4dCwgb3B0aW9uV2l0aG91dFR4dCB9O1xufVxuXG5mdW5jdGlvbiBnZXROb25EZWxldGFibGVUZXh0KFxuXHRtUGFyYW1ldGVyczogRGVsZXRlUGFyYW1ldGVycyxcblx0dG90YWxOdW1EZWxldGFibGVDb250ZXh0czogbnVtYmVyLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsXG4pOiBUZXh0IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgeyBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMsIGxvY2tlZENvbnRleHRzID0gW10sIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUgPSBbXSB9ID0gbVBhcmFtZXRlcnM7XG5cdGNvbnN0IG5vbkRlbGV0YWJsZUNvbnRleHRzID1cblx0XHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgLSAobG9ja2VkQ29udGV4dHMubGVuZ3RoICsgdG90YWxOdW1EZWxldGFibGVDb250ZXh0cyAtIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoKTtcblx0bGV0IHJldFR4dCA9IFwiXCI7XG5cblx0aWYgKFxuXHRcdG5vbkRlbGV0YWJsZUNvbnRleHRzID4gMCAmJlxuXHRcdCh0b3RhbE51bURlbGV0YWJsZUNvbnRleHRzID09PSAwIHx8IGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoID09PSB0b3RhbE51bURlbGV0YWJsZUNvbnRleHRzKVxuXHQpIHtcblx0XHQvLyAxLiBOb25lIG9mIHRoZSBjY29udGV4dHMgYXJlIGRlbGV0YWJsZVxuXHRcdC8vIDIuIE9ubHkgZHJhZnRzIG9mIG5vbiBkZWxldGFibGUgY29udGV4dHMgZXhpc3QuXG5cdFx0aWYgKGxvY2tlZENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIExvY2tlZCBjb250ZXh0cyBleGlzdFxuXHRcdFx0aWYgKG5vbkRlbGV0YWJsZUNvbnRleHRzID09PSAxKSB7XG5cdFx0XHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfQUxMX1JFTUFJTklOR19OT05fREVMRVRBQkxFX1NJTkdVTEFSXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0VHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9BTExfUkVNQUlOSU5HX05PTl9ERUxFVEFCTEVfUExVUkFMXCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAobm9uRGVsZXRhYmxlQ29udGV4dHMgPT09IDEpIHtcblx0XHRcdC8vIE9ubHkgcHVyZSBub24tZGVsZXRhYmxlIGNvbnRleHRzIGV4aXN0IHNpbmdsZVxuXHRcdFx0cmV0VHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9TSU5HTEVfQU5EX09ORV9PQkpFQ1RfTk9OX0RFTEVUQUJMRVwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gT25seSBwdXJlIG5vbi1kZWxldGFibGUgY29udGV4dHMgZXhpc3QgbXVsdGlwbGVcblx0XHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfTVVMVElQTEVfQU5EX0FMTF9PQkpFQ1RfTk9OX0RFTEVUQUJMRVwiKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAobm9uRGVsZXRhYmxlQ29udGV4dHMgPT09IDEpIHtcblx0XHQvLyBkZWxldGFibGUgYW5kIG5vbi1kZWxldGFibGUgZXhpc3RzIHRvZ2V0aGVyLCBzaW5nbGVcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVElORk9fQU5EX09ORV9PQkpFQ1RfTk9OX0RFTEVUQUJMRVwiLCBbXG5cdFx0XHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcblx0XHRdKTtcblx0fSBlbHNlIGlmIChub25EZWxldGFibGVDb250ZXh0cyA+IDEpIHtcblx0XHQvLyBkZWxldGFibGUgYW5kIG5vbi1kZWxldGFibGUgZXhpc3RzIHRvZ2V0aGVyLCBtdWx0aXBsZVxuXHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUSU5GT19BTkRfRkVXX09CSkVDVFNfTk9OX0RFTEVUQUJMRVwiLCBbXG5cdFx0XHRub25EZWxldGFibGVDb250ZXh0cyxcblx0XHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1xuXHRcdF0pO1xuXHR9XG5cblx0cmV0dXJuIHJldFR4dCA/IG5ldyBUZXh0KHsgdGV4dDogcmV0VHh0IH0pIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRDb25maXJtZWREZWxldGFibGVDb250ZXh0KGNvbnRleHRzOiBDb250ZXh0W10sIG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdKTogQ29udGV4dFtdIHtcblx0cmV0dXJuIG9wdGlvbnMucmVkdWNlKChyZXN1bHQsIG9wdGlvbikgPT4ge1xuXHRcdHJldHVybiBvcHRpb24uc2VsZWN0ZWQgJiYgb3B0aW9uLnR5cGUgIT09IERlbGV0ZU9wdGlvblR5cGVzLmRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlID8gcmVzdWx0LmNvbmNhdChvcHRpb24uY29udGV4dHMpIDogcmVzdWx0O1xuXHR9LCBjb250ZXh0cyk7XG59XG5cbmZ1bmN0aW9uIGdldERyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlKG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdKTogQ29udGV4dFtdIHtcblx0Y29uc3QgY29udGV4dHM6IENvbnRleHRbXSA9IFtdO1xuXHRyZXR1cm4gb3B0aW9ucy5yZWR1Y2UoKHJlc3VsdCwgb3B0aW9uKSA9PiB7XG5cdFx0cmV0dXJuIG9wdGlvbi5zZWxlY3RlZCAmJiBvcHRpb24udHlwZSA9PT0gRGVsZXRlT3B0aW9uVHlwZXMuZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUgPyByZXN1bHQuY29uY2F0KG9wdGlvbi5jb250ZXh0cykgOiByZXN1bHQ7XG5cdH0sIGNvbnRleHRzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRHJhZnRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMoXG5cdG1QYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLFxuXHR2Q29udGV4dHM6IENvbnRleHRbXSxcblx0dG90YWxEZWxldGFibGU6IG51bWJlcixcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0aXRlbXM6IENvbnRyb2xbXSxcblx0b3B0aW9uczogRGVsZXRlT3B0aW9uW11cbikge1xuXHRjb25zdCB7XG5cdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLFxuXHRcdGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUsXG5cdFx0dW5TYXZlZENvbnRleHRzLFxuXHRcdGNyZWF0ZU1vZGVDb250ZXh0cyxcblx0XHRsb2NrZWRDb250ZXh0cyxcblx0XHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlXG5cdH0gPSBtUGFyYW1ldGVycztcblx0bGV0IGxvY2tlZENvbnRleHRzVHh0ID0gXCJcIjtcblxuXHQvLyBkcmFmdHMgd2l0aCBhY3RpdmVcblx0aWYgKGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlOiBDb250ZXh0W10gPSBbXTtcblx0XHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlLmZvckVhY2goKGRlbGV0YWJsZURyYWZ0SW5mbzogRHJhZnRTaWJsaW5nUGFpcikgPT4ge1xuXHRcdFx0aWYgKGRlbGV0YWJsZURyYWZ0SW5mby5kcmFmdC5nZXRQcm9wZXJ0eShcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0luUHJvY2Vzc0J5VXNlclwiKSkge1xuXHRcdFx0XHQvLyBJZiBhbiBvd24gZHJhZnQgaXMgbG9ja2VkIHRoZW4gdGhlIGRyYWZ0IG5lZWRzIHRvIGJlIGRpc2NhcmRlZCBiZWZvcmUgZGVsZXRpbmcgYWN0aXZlIHJlY29yZC5cblx0XHRcdFx0ZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUucHVzaChkZWxldGFibGVEcmFmdEluZm8uZHJhZnQpO1xuXHRcdFx0fVxuXHRcdFx0dkNvbnRleHRzLnB1c2goZGVsZXRhYmxlRHJhZnRJbmZvLnNpYmxpbmdJbmZvLnRhcmdldENvbnRleHQpO1xuXHRcdH0pO1xuXHRcdGlmIChkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy5kcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSxcblx0XHRcdFx0Y29udGV4dHM6IGRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlLFxuXHRcdFx0XHRzZWxlY3RlZDogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gY3JlYXRlIG1vZGUgZHJhZnRzXG5cdGlmIChjcmVhdGVNb2RlQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdC8vIGNyZWF0ZSBtb2RlIGRyYWZ0c1xuXHRcdGNyZWF0ZU1vZGVDb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB2Q29udGV4dHMucHVzaChjb250ZXh0KSk7XG5cdH1cblxuXHQvLyBpdGVtcyBsb2NrZWQgbXNnXG5cdGlmIChsb2NrZWRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0bG9ja2VkQ29udGV4dHNUeHQgPSBkZWxldGVIZWxwZXIuZ2V0TG9ja2VkT2JqZWN0c1RleHQocmVzb3VyY2VNb2RlbCwgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLCBsb2NrZWRDb250ZXh0cykgfHwgXCJcIjtcblx0XHRpdGVtcy5wdXNoKG5ldyBUZXh0KHsgdGV4dDogbG9ja2VkQ29udGV4dHNUeHQgfSkpO1xuXHR9XG5cblx0Ly8gbm9uIGRlbGV0YWJsZSBtc2dcblx0Y29uc3Qgbm9uRGVsZXRhYmxlRXhpc3RzID0gbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzICE9IHRvdGFsRGVsZXRhYmxlIC0gZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZS5sZW5ndGggKyBsb2NrZWRDb250ZXh0cy5sZW5ndGg7XG5cdGNvbnN0IG5vbkRlbGV0YWJsZVRleHRDdHJsID0gbm9uRGVsZXRhYmxlRXhpc3RzICYmIGRlbGV0ZUhlbHBlci5nZXROb25EZWxldGFibGVUZXh0KG1QYXJhbWV0ZXJzLCB0b3RhbERlbGV0YWJsZSwgcmVzb3VyY2VNb2RlbCk7XG5cdGlmIChub25EZWxldGFibGVUZXh0Q3RybCkge1xuXHRcdGl0ZW1zLnB1c2gobm9uRGVsZXRhYmxlVGV4dEN0cmwpO1xuXHR9XG5cblx0Ly8gb3B0aW9uOiB1bnNhdmVkIGNoYW5nZXMgYnkgb3RoZXJzXG5cdGlmICh1blNhdmVkQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IHVuc2F2ZWRDaGFuZ2VzVHh0cyA9XG5cdFx0XHRkZWxldGVIZWxwZXIuZ2V0VW5zYXZlZENvbnRleHRzVGV4dChyZXNvdXJjZU1vZGVsLCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMsIHVuU2F2ZWRDb250ZXh0cywgdG90YWxEZWxldGFibGUpIHx8IHt9O1xuXHRcdGlmICh1bnNhdmVkQ2hhbmdlc1R4dHMuaW5mb1R4dCkge1xuXHRcdFx0aXRlbXMucHVzaChuZXcgVGV4dCh7IHRleHQ6IHVuc2F2ZWRDaGFuZ2VzVHh0cy5pbmZvVHh0IH0pKTtcblx0XHR9XG5cdFx0aWYgKHVuc2F2ZWRDaGFuZ2VzVHh0cy5vcHRpb25UeHQgfHwgdW5zYXZlZENoYW5nZXNUeHRzLm9wdGlvbldpdGhvdXRUeHQpIHtcblx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzLnVuU2F2ZWRDb250ZXh0cyxcblx0XHRcdFx0Y29udGV4dHM6IHVuU2F2ZWRDb250ZXh0cyxcblx0XHRcdFx0dGV4dDogdW5zYXZlZENoYW5nZXNUeHRzLm9wdGlvblR4dCxcblx0XHRcdFx0c2VsZWN0ZWQ6IHRydWUsXG5cdFx0XHRcdGNvbnRyb2w6IERlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sLkNIRUNLQk9YXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvLyBvcHRpb246IGRyYWZ0cyB3aXRoIGFjdGl2ZSBub3QgZGVsZXRhYmxlXG5cdGlmIChkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBub25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0ID1cblx0XHRcdGRlbGV0ZUhlbHBlci5nZXROb25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0KHJlc291cmNlTW9kZWwsIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoLCB0b3RhbERlbGV0YWJsZSkgfHwgXCJcIjtcblx0XHRpZiAobm9uRGVsZXRhYmxlQWN0aXZlc09mRHJhZnRzVGV4dCkge1xuXHRcdFx0b3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogRGVsZXRlT3B0aW9uVHlwZXMuZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSxcblx0XHRcdFx0Y29udGV4dHM6IGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUsXG5cdFx0XHRcdHRleHQ6IG5vbkRlbGV0YWJsZUFjdGl2ZXNPZkRyYWZ0c1RleHQsXG5cdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRjb250cm9sOiB0b3RhbERlbGV0YWJsZSA+IDAgPyBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5DSEVDS0JPWCA6IERlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sLlRFWFRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVDb250ZW50Rm9yRGVsZXRlRGlhbG9nKG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdLCBpdGVtczogQ29udHJvbFtdKSB7XG5cdGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuXHRcdC8vIFNpbmdsZSBvcHRpb24gZG9lc24ndCBuZWVkIGNoZWNrQm94XG5cdFx0Y29uc3Qgb3B0aW9uID0gb3B0aW9uc1swXTtcblx0XHRpZiAob3B0aW9uLnRleHQpIHtcblx0XHRcdGl0ZW1zLnB1c2gobmV3IFRleHQoeyB0ZXh0OiBvcHRpb24udGV4dCB9KSk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG9wdGlvbnMubGVuZ3RoID4gMSkge1xuXHRcdC8vIE11bHRpcGxlIE9wdGlvbnNcblxuXHRcdC8vIFRleHRzXG5cdFx0b3B0aW9ucy5mb3JFYWNoKChvcHRpb246IERlbGV0ZU9wdGlvbikgPT4ge1xuXHRcdFx0aWYgKG9wdGlvbi5jb250cm9sID09PSBcInRleHRcIiAmJiBvcHRpb24udGV4dCkge1xuXHRcdFx0XHRpdGVtcy5wdXNoKG5ldyBUZXh0KHsgdGV4dDogb3B0aW9uLnRleHQgfSkpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vIENoZWNrQm94c1xuXHRcdG9wdGlvbnMuZm9yRWFjaCgob3B0aW9uOiBEZWxldGVPcHRpb24pID0+IHtcblx0XHRcdGlmIChvcHRpb24uY29udHJvbCA9PT0gXCJjaGVja0JveFwiICYmIG9wdGlvbi50ZXh0KSB7XG5cdFx0XHRcdGl0ZW1zLnB1c2goXG5cdFx0XHRcdFx0bmV3IENoZWNrQm94KHtcblx0XHRcdFx0XHRcdHRleHQ6IG9wdGlvbi50ZXh0LFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRzZWxlY3Q6IGZ1bmN0aW9uIChvRXZlbnQ6IEV2ZW50KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNoZWNrQm94ID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIENoZWNrQm94O1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzZWxlY3RlZCA9IGNoZWNrQm94LmdldFNlbGVjdGVkKCk7XG5cdFx0XHRcdFx0XHRcdG9wdGlvbi5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlT3B0aW9uc0ZvckRlbGV0YWJsZVRleHRzKFxuXHRtUGFyYW1ldGVyczogRGVsZXRlUGFyYW1ldGVycyxcblx0ZGlyZWN0RGVsZXRhYmxlQ29udGV4dHM6IENvbnRleHRbXSxcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0b3B0aW9uczogRGVsZXRlT3B0aW9uW11cbikge1xuXHRjb25zdCB7XG5cdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLFxuXHRcdGVudGl0eVNldE5hbWUsXG5cdFx0cGFyZW50Q29udHJvbCxcblx0XHRkZXNjcmlwdGlvbixcblx0XHRsb2NrZWRDb250ZXh0cyxcblx0XHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLFxuXHRcdHVuU2F2ZWRDb250ZXh0c1xuXHR9ID0gbVBhcmFtZXRlcnM7XG5cdGNvbnN0IHRvdGFsRGVsZXRhYmxlID0gZGlyZWN0RGVsZXRhYmxlQ29udGV4dHMubGVuZ3RoICsgZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZS5sZW5ndGggKyB1blNhdmVkQ29udGV4dHMubGVuZ3RoO1xuXHRjb25zdCBub25EZWxldGFibGVDb250ZXh0cyA9IG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyAtIChsb2NrZWRDb250ZXh0cy5sZW5ndGggKyB0b3RhbERlbGV0YWJsZSAtIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoKTtcblxuXHRpZiAobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID09PSAxICYmIG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9PT0gZGlyZWN0RGVsZXRhYmxlQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0Ly8gc2luZ2xlIGRlbGV0YWJsZSBjb250ZXh0XG5cdFx0Y29uc3Qgb0xpbmVDb250ZXh0RGF0YSA9IGRpcmVjdERlbGV0YWJsZUNvbnRleHRzWzBdLmdldE9iamVjdCgpO1xuXHRcdGNvbnN0IG9UYWJsZSA9IHBhcmVudENvbnRyb2wgYXMgVGFibGU7XG5cdFx0Y29uc3Qgc0tleSA9IG9UYWJsZSAmJiAob1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRJZGVudGlmaWVyQ29sdW1uKCk7XG5cdFx0bGV0IHR4dDtcblx0XHRsZXQgYVBhcmFtcyA9IFtdO1xuXHRcdGlmIChzS2V5KSB7XG5cdFx0XHRjb25zdCBzS2V5VmFsdWUgPSBzS2V5ID8gb0xpbmVDb250ZXh0RGF0YVtzS2V5XSA6IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IHNEZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uICYmIGRlc2NyaXB0aW9uLnBhdGggPyBvTGluZUNvbnRleHREYXRhW2Rlc2NyaXB0aW9uLnBhdGhdIDogdW5kZWZpbmVkO1xuXHRcdFx0aWYgKHNLZXlWYWx1ZSkge1xuXHRcdFx0XHRpZiAoc0Rlc2NyaXB0aW9uICYmIGRlc2NyaXB0aW9uICYmIHNLZXkgIT09IGRlc2NyaXB0aW9uLnBhdGgpIHtcblx0XHRcdFx0XHRhUGFyYW1zID0gW3NLZXlWYWx1ZSArIFwiIFwiLCBzRGVzY3JpcHRpb25dO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFQYXJhbXMgPSBbc0tleVZhbHVlLCBcIlwiXTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0eHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVElORk9cIiwgYVBhcmFtcywgZW50aXR5U2V0TmFtZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0eHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX1NJTkdVTEFSXCIsIHVuZGVmaW5lZCwgZW50aXR5U2V0TmFtZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUVElUTEVfU0lOR1VMQVJcIiwgdW5kZWZpbmVkLCBlbnRpdHlTZXROYW1lKTtcblx0XHR9XG5cdFx0b3B0aW9ucy5wdXNoKHtcblx0XHRcdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzLmRlbGV0YWJsZUNvbnRleHRzLFxuXHRcdFx0Y29udGV4dHM6IGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLFxuXHRcdFx0dGV4dDogdHh0LFxuXHRcdFx0c2VsZWN0ZWQ6IHRydWUsXG5cdFx0XHRjb250cm9sOiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5URVhUXG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoXG5cdFx0dW5TYXZlZENvbnRleHRzLmxlbmd0aCAhPT0gdG90YWxEZWxldGFibGUgJiZcblx0XHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPiAwICYmXG5cdFx0KGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLmxlbmd0aCA+IDAgfHwgKHVuU2F2ZWRDb250ZXh0cy5sZW5ndGggPiAwICYmIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoID4gMCkpXG5cdCkge1xuXHRcdGlmIChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPiBkaXJlY3REZWxldGFibGVDb250ZXh0cy5sZW5ndGggJiYgbm9uRGVsZXRhYmxlQ29udGV4dHMgKyBsb2NrZWRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBvdGhlciB0eXBlcyBleGlzdHMgd2l0aCBwdXJlIGRlbGV0YWJsZSBvbmVzXG5cdFx0XHRsZXQgZGVsZXRhYmxlT3B0aW9uVHh0ID0gXCJcIjtcblx0XHRcdGlmICh0b3RhbERlbGV0YWJsZSA9PT0gMSkge1xuXHRcdFx0XHRkZWxldGFibGVPcHRpb25UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX1NJTkdVTEFSX05PTl9ERUxFVEFCTEVcIixcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVsZXRhYmxlT3B0aW9uVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9QTFVSQUxfTk9OX0RFTEVUQUJMRVwiLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRlbnRpdHlTZXROYW1lXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRvcHRpb25zLnVuc2hpZnQoe1xuXHRcdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cyxcblx0XHRcdFx0Y29udGV4dHM6IGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHR0ZXh0OiBkZWxldGFibGVPcHRpb25UeHQsXG5cdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRjb250cm9sOiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5URVhUXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gb25seSBkZWxldGFibGVcblx0XHRcdGNvbnN0IGFsbERlbGV0YWJsZVR4dCA9XG5cdFx0XHRcdHRvdGFsRGVsZXRhYmxlID09PSAxXG5cdFx0XHRcdFx0PyByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX1NJTkdVTEFSXCIsIHVuZGVmaW5lZCwgZW50aXR5U2V0TmFtZSlcblx0XHRcdFx0XHQ6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUVElUTEVfUExVUkFMXCIsIHVuZGVmaW5lZCwgZW50aXR5U2V0TmFtZSk7XG5cdFx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cyxcblx0XHRcdFx0Y29udGV4dHM6IGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHR0ZXh0OiBhbGxEZWxldGFibGVUeHQsXG5cdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRjb250cm9sOiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5URVhUXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVsZXRlQ29uZmlybUhhbmRsZXIoXG5cdG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdLFxuXHRtUGFyYW1ldGVyczogRGVsZXRlUGFyYW1ldGVycyxcblx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0ZHJhZnRFbmFibGVkOiBib29sZWFuXG4pIHtcblx0dHJ5IHtcblx0XHRjb25zdCBjb250ZXh0cyA9IGRlbGV0ZUhlbHBlci5nZXRDb25maXJtZWREZWxldGFibGVDb250ZXh0KFtdLCBvcHRpb25zKTtcblx0XHRjb25zdCBkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSA9IGdldERyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlKG9wdGlvbnMpO1xuXG5cdFx0Y29uc3QgeyBiZWZvcmVEZWxldGVDYWxsQmFjaywgcGFyZW50Q29udHJvbCB9ID0gbVBhcmFtZXRlcnM7XG5cdFx0aWYgKGJlZm9yZURlbGV0ZUNhbGxCYWNrKSB7XG5cdFx0XHRhd2FpdCBiZWZvcmVEZWxldGVDYWxsQmFjayh7IGNvbnRleHRzOiBjb250ZXh0cyB9KTtcblx0XHR9XG5cblx0XHRpZiAoY29udGV4dHMgJiYgY29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBlbmFibGVTdHJpY3RIYW5kbGluZyA9IGNvbnRleHRzLmxlbmd0aCA9PT0gMSA/IHRydWUgOiBmYWxzZTtcblx0XHRcdFx0Y29uc3QgZHJhZnRFcnJvcnM6IHVua25vd25bXSA9IFtdO1xuXHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG5cdFx0XHRcdFx0ZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUubWFwKGZ1bmN0aW9uIChjb250ZXh0OiBDb250ZXh0KSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZHJhZnQuZGVsZXRlRHJhZnQoY29udGV4dCwgYXBwQ29tcG9uZW50LCBlbmFibGVTdHJpY3RIYW5kbGluZyk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRcdExvZy5lcnJvcihgRkUgOiBjb3JlIDogRGVsZXRlSGVscGVyIDogRXJyb3Igd2hpbGUgZGlzY3JkaW5nIGRyYWZ0IHdpdGggcGF0aCA6ICR7Y29udGV4dC5nZXRQYXRoKCl9YCk7XG5cdFx0XHRcdFx0XHRcdGRyYWZ0RXJyb3JzLnB1c2goZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRjb250ZXh0cy5tYXAoZnVuY3Rpb24gKGNvbnRleHQ6IENvbnRleHQpIHtcblx0XHRcdFx0XHRcdGlmIChkcmFmdEVuYWJsZWQgJiYgIWNvbnRleHQuZ2V0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKSkge1xuXHRcdFx0XHRcdFx0XHQvL2RlbGV0ZSB0aGUgZHJhZnRcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGRyYWZ0LmRlbGV0ZURyYWZ0KGNvbnRleHQsIGFwcENvbXBvbmVudCwgZW5hYmxlU3RyaWN0SGFuZGxpbmcpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbnRleHQuZGVsZXRlKCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdFx0ZGVsZXRlSGVscGVyLmFmdGVyRGVsZXRlUHJvY2VzcyhtUGFyYW1ldGVycywgb3B0aW9ucywgY29udGV4dHMsIHJlc291cmNlTW9kZWwpO1xuXHRcdFx0XHRpZiAoZHJhZnRFcnJvcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHRocm93IEVycm9yKGBGRSA6IGNvcmUgOiBEZWxldGVIZWxwZXIgOiBFcnJvcnMgb24gZHJhZnQgZGVsZXRlIDogJHtkcmFmdEVycm9yc31gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VEaWFsb2coeyBjb250cm9sOiBwYXJlbnRDb250cm9sIH0pO1xuXHRcdFx0XHQvLyByZS10aHJvdyBlcnJvciB0byBlbmZvcmNlIHJlamVjdGluZyB0aGUgZ2VuZXJhbCBwcm9taXNlXG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKCk7XG5cdFx0Ly8gcmUtdGhyb3cgZXJyb3IgdG8gZW5mb3JjZSByZWplY3RpbmcgdGhlIGdlbmVyYWwgcHJvbWlzZVxuXHRcdHRocm93IG9FcnJvcjtcblx0fVxufVxuXG4vLyBUYWJsZSBSdW50aW1lIEhlbHBlcnM6XG5cbi8qIHJlZnJlc2hlcyBkYXRhIGluIGludGVybmFsIG1vZGVsIHJlbGV2YW50IGZvciBlbmFibGVtZW50IG9mIGRlbGV0ZSBidXR0b24gYWNjb3JkaW5nIHRvIHNlbGVjdGVkIGNvbnRleHRzXG5yZWxldmFudCBkYXRhIGFyZTogZGVsZXRhYmxlQ29udGV4dHMsIGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUsIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUsIGNyZWF0ZU1vZGVDb250ZXh0cywgdW5TYXZlZENvbnRleHRzLCBkZWxldGVFbmFibGVkXG5ub3QgcmVsZXZhbnQ6IGxvY2tlZENvbnRleHRzXG4qL1xuYXN5bmMgZnVuY3Rpb24gdXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMoaW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LCBzZWxlY3RlZENvbnRleHRzOiBDb250ZXh0W10pIHtcblx0dHlwZSBjb250ZXh0SW5mbyA9IHtcblx0XHRjb250ZXh0OiBDb250ZXh0O1xuXHRcdHNpYmxpbmdQcm9taXNlOiBQcm9taXNlPFNpYmxpbmdJbmZvcm1hdGlvbiB8IHVuZGVmaW5lZCB8IHZvaWQ+O1xuXHRcdHNpYmxpbmdJbmZvOiBTaWJsaW5nSW5mb3JtYXRpb24gfCB1bmRlZmluZWQ7XG5cdFx0aXNEcmFmdFJvb3Q6IGJvb2xlYW47XG5cdFx0aXNEcmFmdE5vZGU6IGJvb2xlYW47XG5cdFx0aXNBY3RpdmU6IGJvb2xlYW47XG5cdFx0aGFzQWN0aXZlOiBib29sZWFuO1xuXHRcdGhhc0RyYWZ0OiBib29sZWFuO1xuXHRcdGxvY2tlZDogYm9vbGVhbjtcblx0XHRkZWxldGFibGU6IGJvb2xlYW47XG5cdFx0c2libGluZ0RlbGV0YWJsZTogYm9vbGVhbjtcblx0fTtcblx0Y29uc3QgY29udGV4dEluZm9zID0gc2VsZWN0ZWRDb250ZXh0cy5tYXAoKGNvbnRleHQpID0+IHtcblx0XHQvLyBhc3N1bWluZyBtZXRhQ29udGV4dCBpcyB0aGUgc2FtZSBmb3IgYWxsIGNvbnRleHRzLCBzdGlsbCBub3QgcmVseWluZyBvbiB0aGlzIGFzc3VtcHRpb25cblx0XHRjb25zdCBtZXRhQ29udGV4dCA9IGNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhQ29udGV4dChjb250ZXh0LmdldENhbm9uaWNhbFBhdGgoKSk7XG5cdFx0Y29uc3QgZGVsZXRhYmxlUGF0aCA9IG1ldGFDb250ZXh0LmdldFByb3BlcnR5KFwiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVsZXRlUmVzdHJpY3Rpb25zL0RlbGV0YWJsZS8kUGF0aFwiKTtcblx0XHRjb25zdCBzdGF0aWNEZWxldGFibGUgPVxuXHRcdFx0IWRlbGV0YWJsZVBhdGggJiYgbWV0YUNvbnRleHQuZ2V0UHJvcGVydHkoXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWxldGVSZXN0cmljdGlvbnMvRGVsZXRhYmxlXCIpICE9PSBmYWxzZTtcblx0XHQvLyBkZWZhdWx0IHZhbHVlcyBhY2NvcmRpbmcgdG8gbm9uLWRyYWZ0IGNhc2UgKHN0aWNreSBiZWhhdmVzIHRoZSBzYW1lIGFzIG5vbi1kcmFmdCBmcm9tIFVJIHBvaW50IG9mIHZpZXcgcmVnYXJkaW5nIGRlbGV0aW9uKVxuXHRcdGNvbnN0IGluZm86IGNvbnRleHRJbmZvID0ge1xuXHRcdFx0Y29udGV4dDogY29udGV4dCxcblx0XHRcdGlzRHJhZnRSb290OiAhIW1ldGFDb250ZXh0LmdldFByb3BlcnR5KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIiksXG5cdFx0XHRpc0RyYWZ0Tm9kZTogISFtZXRhQ29udGV4dC5nZXRQcm9wZXJ0eShcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlXCIpLFxuXHRcdFx0aXNBY3RpdmU6IHRydWUsXG5cdFx0XHRoYXNBY3RpdmU6IGZhbHNlLFxuXHRcdFx0aGFzRHJhZnQ6IGZhbHNlLFxuXHRcdFx0bG9ja2VkOiBmYWxzZSxcblx0XHRcdGRlbGV0YWJsZTogZGVsZXRhYmxlUGF0aCA/IGNvbnRleHQuZ2V0UHJvcGVydHkoZGVsZXRhYmxlUGF0aCkgOiBzdGF0aWNEZWxldGFibGUsXG5cdFx0XHRzaWJsaW5nUHJvbWlzZTogUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCksXG5cdFx0XHRzaWJsaW5nSW5mbzogdW5kZWZpbmVkLFxuXHRcdFx0c2libGluZ0RlbGV0YWJsZTogZmFsc2Vcblx0XHR9O1xuXG5cdFx0aWYgKGluZm8uaXNEcmFmdFJvb3QpIHtcblx0XHRcdGluZm8ubG9ja2VkID0gISFjb250ZXh0LmdldE9iamVjdChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCIpPy5JblByb2Nlc3NCeVVzZXI7XG5cdFx0XHRpbmZvLmhhc0RyYWZ0ID0gY29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0RyYWZ0RW50aXR5XCIpO1xuXHRcdH1cblx0XHRpZiAoaW5mby5pc0RyYWZ0Um9vdCkge1xuXHRcdFx0aW5mby5pc0FjdGl2ZSA9IGNvbnRleHQuZ2V0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKTtcblx0XHRcdGluZm8uaGFzQWN0aXZlID0gY29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0FjdGl2ZUVudGl0eVwiKTtcblx0XHRcdGlmICghaW5mby5pc0FjdGl2ZSAmJiBpbmZvLmhhc0FjdGl2ZSkge1xuXHRcdFx0XHQvLyBnZXQgc2libGluZyBjb250ZXh0cyAob25seSByZWxldmFudCBmb3IgZHJhZnQgcm9vdCwgbm90IGZvciBub2Rlcylcblx0XHRcdFx0Ly8gZHJhZnQuY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbiBleHBlY3RzIGRyYWZ0IHJvb3QgYXMgZmlyc3QgcGFyYW1ldGVyIC0gaWYgd2UgYXJlIG9uIGEgc3Vibm9kZSwgdGhpcyBpcyBub3QgZ2l2ZW5cblx0XHRcdFx0Ly8gLSBkb25lIHdyb25nIGFsc28gYWJvdmUsIGJ1dCBzZWVtcyBub3QgdG8gYnJlYWsgYW55dGhpbmdcblx0XHRcdFx0Ly8gLSB3aHkgaXMgZHJhZnQuY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbiBub3QgYWJsZSB0byBjYWxjdWxhdGUgZHJhZnQgcm9vdCBvbiBpdHMgb3duPyFcblx0XHRcdFx0Ly8gLSBhbmQgd2h5IGlzIGl0IG5vdCBhYmxlIHRvIGRlYWwgd2l0aCBjb250ZXh0cyBub3QgZHJhZnQgZW5hYmxlZCAob2YgY291cnNlIHRoZXkgbmV2ZXIgaGF2ZSBhIHNpYmxpbmcgLSBjb3VsZCBqdXN0IHJldHVybiB1bmRlZmluZWQpXG5cdFx0XHRcdGluZm8uc2libGluZ1Byb21pc2UgPSBkcmFmdC5jb21wdXRlU2libGluZ0luZm9ybWF0aW9uKGNvbnRleHQsIGNvbnRleHQpLnRoZW4oYXN5bmMgKHNpYmxpbmdJbmZvcm1hdGlvbikgPT4ge1xuXHRcdFx0XHRcdC8vIEZvciBkcmFmdFdpdGhEZWxldGFibGVBY3RpdmUgYnVja2V0LCBjdXJyZW50bHkgYWxzbyBzaWJsaW5nSW5mb3JtYXRpb24gaXMgcHV0IGludG8gaW50ZXJuYWxNb2RlbCBhbmQgdXNlZFxuXHRcdFx0XHRcdC8vIGZyb20gdGhlcmUgaW4gY2FzZSBvZiBkZWxldGlvbi4gVGhlcmVmb3JlLCBzaWJsaW5nIG5lZWRzIHRvIGJlIHJldHJpZXZlZCBpbiBjYXNlIG9mIHN0YXRpY0RlbGV0YWJsZS5cblx0XHRcdFx0XHQvLyBQb3NzaWJsZSBpbXByb3ZlbWVudDogT25seSByZWFkIHNpYmxpbmdJbmZvIGhlcmUgaWYgbmVlZGVkIGZvciBkZXRlcm1pbmF0aW9uIG9mIGRlbGV0ZSBidXR0b24gZW5hYmxlbWVudCxcblx0XHRcdFx0XHQvLyBpbiBvdGhlciBjYXNlcywgcmVhZCBpdCBvbmx5IGlmIGRlbGV0aW9uIHJlYWxseSBoYXBwZW5zLlxuXHRcdFx0XHRcdGluZm8uc2libGluZ0luZm8gPSBzaWJsaW5nSW5mb3JtYXRpb247XG5cdFx0XHRcdFx0aWYgKGRlbGV0YWJsZVBhdGgpIHtcblx0XHRcdFx0XHRcdGluZm8uc2libGluZ0RlbGV0YWJsZSA9IGF3YWl0IHNpYmxpbmdJbmZvcm1hdGlvbj8udGFyZ2V0Q29udGV4dD8ucmVxdWVzdFByb3BlcnR5KGRlbGV0YWJsZVBhdGgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpbmZvLnNpYmxpbmdEZWxldGFibGUgPSBzdGF0aWNEZWxldGFibGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGluZm87XG5cdH0pO1xuXHQvLyB3YWl0IGZvciBhbGwgc2libGluZ1Byb21pc2VzLiBJZiBubyBzaWJsaW5nIGV4aXN0cywgcHJvbWlzZSBpcyByZXNvbHZlZCB0byB1bmRlZmluZWQgKGJ1dCBpdCdzIHN0aWxsIGEgcHJvbWlzZSlcblx0YXdhaXQgUHJvbWlzZS5hbGwoY29udGV4dEluZm9zLm1hcCgoaW5mbykgPT4gaW5mby5zaWJsaW5nUHJvbWlzZSkpO1xuXG5cdGNvbnN0IGJ1Y2tldHMgPSBbXG5cdFx0e1xuXHRcdFx0a2V5OiBcImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVcIixcblx0XHRcdC8vIG9ubHkgZm9yIGRyYWZ0IHJvb3Q6IEluIHRoYXQgY2FzZSwgdGhlIGRlbGV0ZSByZXF1ZXN0IG5lZWRzIHRvIGJlIHNlbnQgZm9yIHRoZSBhY3RpdmUgKGkuZS4gdGhlIHNpYmxpbmcpLFxuXHRcdFx0Ly8gd2hpbGUgaW4gZHJhZnQgbm9kZSwgdGhlIGRlbGV0ZSByZXF1ZXN0IG5lZWRzIHRvIGJlIHNlbmQgZm9yIHRoZSBkcmFmdCBpdHNlbGZcblx0XHRcdHZhbHVlOiBjb250ZXh0SW5mb3MuZmlsdGVyKChpbmZvKSA9PiBpbmZvLmlzRHJhZnRSb290ICYmICFpbmZvLmlzQWN0aXZlICYmIGluZm8uaGFzQWN0aXZlICYmIGluZm8uc2libGluZ0RlbGV0YWJsZSlcblx0XHR9LFxuXHRcdHtcblx0XHRcdGtleTogXCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlXCIsXG5cdFx0XHQvLyBvbmx5IGZvciBkcmFmdCByb290OiBGb3IgZHJhZnQgbm9kZSwgd2Ugb25seSByZWx5IG9uIGluZm9ybWF0aW9uIGluIHRoZSBkcmFmdCBpdHNlbGYgKG5vdCBpdHMgYWN0aXZlIHNpYmxpbmcpXG5cdFx0XHQvLyBhcHBsaWNhdGlvbiBoYXMgdG8gdGFrZSBjYXJlIHRvIHNldCB0aGlzIGNvcnJlY3RseSAoaW4gY2FzZSBhY3RpdmUgc2libGluZyBtdXN0IG5vdCBiZSBkZWxldGFibGUsIGFjdGl2YXRpb25cblx0XHRcdC8vIG9mIGRyYWZ0IHdpdGggZGVsZXRlZCBub2RlIHdvdWxkIGFsc28gZGVsdGUgYWN0aXZlIHNpYmxpbmcgPT4gZGVsZXRpb24gb2YgZHJhZnQgbm9kZSB0byBiZSBhdm9pZGVkKVxuXHRcdFx0dmFsdWU6IGNvbnRleHRJbmZvcy5maWx0ZXIoKGluZm8pID0+IGluZm8uaXNEcmFmdFJvb3QgJiYgIWluZm8uaXNBY3RpdmUgJiYgaW5mby5oYXNBY3RpdmUgJiYgIWluZm8uc2libGluZ0RlbGV0YWJsZSlcblx0XHR9LFxuXHRcdHsga2V5OiBcImxvY2tlZENvbnRleHRzXCIsIHZhbHVlOiBjb250ZXh0SW5mb3MuZmlsdGVyKChpbmZvKSA9PiBpbmZvLmlzRHJhZnRSb290ICYmIGluZm8uaXNBY3RpdmUgJiYgaW5mby5oYXNEcmFmdCAmJiBpbmZvLmxvY2tlZCkgfSxcblx0XHR7XG5cdFx0XHRrZXk6IFwidW5TYXZlZENvbnRleHRzXCIsXG5cdFx0XHR2YWx1ZTogY29udGV4dEluZm9zLmZpbHRlcigoaW5mbykgPT4gaW5mby5pc0RyYWZ0Um9vdCAmJiBpbmZvLmlzQWN0aXZlICYmIGluZm8uaGFzRHJhZnQgJiYgIWluZm8ubG9ja2VkKVxuXHRcdH0sXG5cdFx0Ly8gbm9uLWRyYWZ0L3N0aWNreSBhbmQgZGVsZXRhYmxlXG5cdFx0Ly8gYWN0aXZlIGRyYWZ0IHJvb3Qgd2l0aG91dCBhbnkgZHJhZnQgYW5kIGRlbGV0YWJsZVxuXHRcdC8vIGNyZWF0ZWQgZHJhZnQgcm9vdCAocmVnYXJkbGVzcyBvZiBkZWxldGFibGUpXG5cdFx0Ly8gZHJhZnQgbm9kZSBvbmx5IGFjY29yZGluZyB0byBpdHMgYW5ub3RhdGlvblxuXHRcdHtcblx0XHRcdGtleTogXCJkZWxldGFibGVDb250ZXh0c1wiLFxuXHRcdFx0dmFsdWU6IGNvbnRleHRJbmZvcy5maWx0ZXIoXG5cdFx0XHRcdChpbmZvKSA9PlxuXHRcdFx0XHRcdCghaW5mby5pc0RyYWZ0Um9vdCAmJiAhaW5mby5pc0RyYWZ0Tm9kZSAmJiBpbmZvLmRlbGV0YWJsZSkgfHxcblx0XHRcdFx0XHQoaW5mby5pc0RyYWZ0Um9vdCAmJiBpbmZvLmlzQWN0aXZlICYmICFpbmZvLmhhc0RyYWZ0ICYmIGluZm8uZGVsZXRhYmxlKSB8fFxuXHRcdFx0XHRcdChpbmZvLmlzRHJhZnRSb290ICYmICFpbmZvLmlzQWN0aXZlICYmICFpbmZvLmhhc0FjdGl2ZSkgfHxcblx0XHRcdFx0XHQoaW5mby5pc0RyYWZ0Tm9kZSAmJiBpbmZvLmRlbGV0YWJsZSlcblx0XHRcdClcblx0XHR9XG5cdF07XG5cblx0Zm9yIChjb25zdCB7IGtleSwgdmFsdWUgfSBvZiBidWNrZXRzKSB7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXG5cdFx0XHRrZXksXG5cdFx0XHQvLyBDdXJyZW50bHksIGJ1Y2tldCBkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlIGhhcyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgKGNvbnRhaW5pbmcgYWxzbyBzaWJsaW5nIGluZm9ybWF0aW9uLCB3aGljaCBpcyB1c2VkXG5cdFx0XHQvLyBpbiBjYXNlIG9mIGRlbGV0aW9uKS4gUG9zc2libGUgaW1wcm92ZW1lbnQ6IFJlYWQgc2libGluZyBpbmZvcm1hdGlvbiBvbmx5IHdoZW4gbmVlZGVkLCBhbmQgYnVpbGQgYWxsIGJ1Y2tldHMgd2l0aCBzYW1lXG5cdFx0XHQvLyBzdHJ1Y3R1cmUuIEhvd2V2ZXIsIGluIHRoYXQgY2FzZSBzaWJsaW5nSW5mb3JtYXRpb24gbWlnaHQgbmVlZCB0byBiZSByZWFkIHR3aWNlIChpZiBhbHJlYWR5IG5lZWRlZCBmb3IgYnV0dG9uIGVuYWJsZW1lbnQpLFxuXHRcdFx0Ly8gdGh1cyBhIGJ1ZmZlciBwcm9iYWJseSB3b3VsZCBtYWtlIHNlbnNlLlxuXHRcdFx0dmFsdWUubWFwKChpbmZvKSA9PlxuXHRcdFx0XHRrZXkgPT09IFwiZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZVwiID8geyBkcmFmdDogaW5mby5jb250ZXh0LCBzaWJsaW5nSW5mbzogaW5mby5zaWJsaW5nSW5mbyB9IDogaW5mby5jb250ZXh0XG5cdFx0XHQpXG5cdFx0KTtcblx0fVxufVxuXG5jb25zdCBkZWxldGVIZWxwZXIgPSB7XG5cdGdldE5vbkRlbGV0YWJsZVRleHQsXG5cdGRlbGV0ZUNvbmZpcm1IYW5kbGVyLFxuXHR1cGRhdGVPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMsXG5cdHVwZGF0ZUNvbnRlbnRGb3JEZWxldGVEaWFsb2csXG5cdHVwZGF0ZURyYWZ0T3B0aW9uc0ZvckRlbGV0YWJsZVRleHRzLFxuXHRnZXRDb25maXJtZWREZWxldGFibGVDb250ZXh0LFxuXHRnZXRMb2NrZWRPYmplY3RzVGV4dCxcblx0Z2V0VW5zYXZlZENvbnRleHRzVGV4dCxcblx0Z2V0Tm9uRGVsZXRhYmxlQWN0aXZlc09mRHJhZnRzVGV4dCxcblx0YWZ0ZXJEZWxldGVQcm9jZXNzLFxuXHR1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0c1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZGVsZXRlSGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7OztNQWdCWUEsaUJBQWlCO0VBQUEsV0FBakJBLGlCQUFpQjtJQUFqQkEsaUJBQWlCO0lBQWpCQSxpQkFBaUI7SUFBakJBLGlCQUFpQjtJQUFqQkEsaUJBQWlCO0lBQWpCQSxpQkFBaUI7SUFBakJBLGlCQUFpQjtFQUFBLEdBQWpCQSxpQkFBaUIsS0FBakJBLGlCQUFpQjtFQUFBO0VBQUEsSUFTakJDLDBCQUEwQjtFQUFBLFdBQTFCQSwwQkFBMEI7SUFBMUJBLDBCQUEwQjtJQUExQkEsMEJBQTBCO0VBQUEsR0FBMUJBLDBCQUEwQixLQUExQkEsMEJBQTBCO0VBQUE7RUEyRHRDLFNB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
|