@sapui5/sap.fe.core 1.112.0 → 1.114.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 +70 -6
- 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 +118 -3
- package/src/sap/fe/core/AppComponent-dbg.js +16 -6
- 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 +21 -7
- package/src/sap/fe/core/AppStateHandler-dbg.js +11 -10
- 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 +14 -11
- package/src/sap/fe/core/CommonUtils-dbg.js +102 -175
- 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 +114 -211
- package/src/sap/fe/core/ExtensionAPI-dbg.js +3 -1
- package/src/sap/fe/core/ExtensionAPI.js.map +1 -1
- package/src/sap/fe/core/ExtensionAPI.ts +2 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase-dbg.js +2 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport-dbg.js +2 -2
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.ts +13 -18
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor-dbg.js +32 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js +4 -4
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.ts +41 -29
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock-dbg.js +2 -2
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js +1 -1
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment-dbg.js +2 -2
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js +1 -1
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.ts +3 -1
- package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +124 -57
- 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 +146 -73
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +35 -74
- 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 +35 -78
- package/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +217 -127
- 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 +227 -129
- package/src/sap/fe/core/controllerextensions/PageReady-dbg.js +3 -5
- package/src/sap/fe/core/controllerextensions/PageReady.js +1 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/PageReady.ts +2 -4
- package/src/sap/fe/core/controllerextensions/Share-dbg.js +3 -2
- package/src/sap/fe/core/controllerextensions/Share.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
- package/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +19 -14
- 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 +22 -14
- package/src/sap/fe/core/controllerextensions/ViewState-dbg.js +41 -24
- 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 +64 -31
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync-dbg.js +8 -8
- 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 +7 -9
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon-dbg.js +7 -45
- 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 +5 -48
- package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +4 -4
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.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 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +3 -3
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialogTemplating-dbg.js +52 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialogTemplating.js +6 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialogTemplating.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialogTemplating.ts +46 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog-dbg.js +103 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +6 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +124 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +106 -205
- 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 +121 -216
- package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +31 -4
- 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 +38 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup-dbg.js +13 -10
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +7 -20
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal-dbg.js +9 -4
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +12 -3
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade-dbg.js +10 -6
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +20 -11
- package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +1 -8
- 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 +0 -9
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +19 -15
- 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 +19 -22
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy-dbg.js +67 -1
- 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 +68 -0
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -0
- package/src/sap/fe/core/controls/CommandExecution-dbg.js +4 -9
- 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 +0 -8
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block-dbg.js +335 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +6 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js.map +1 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +336 -0
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +3 -28
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +1 -1
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js.map +1 -1
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +8 -29
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +30 -1
- 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 +38 -0
- package/src/sap/fe/core/converters/ConverterContext-dbg.js +3 -5
- package/src/sap/fe/core/converters/ConverterContext.js +1 -1
- package/src/sap/fe/core/converters/ConverterContext.js.map +1 -1
- package/src/sap/fe/core/converters/ConverterContext.ts +2 -5
- package/src/sap/fe/core/converters/ManifestSettings-dbg.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +7 -6
- package/src/sap/fe/core/converters/ManifestWrapper-dbg.js +5 -3
- 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 +7 -1
- package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +49 -28
- 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 +62 -30
- package/src/sap/fe/core/converters/TemplateConverter-dbg.js +2 -3
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.js.map +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.ts +1 -6
- package/src/sap/fe/core/converters/annotations/DataField-dbg.js +22 -7
- 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 +20 -7
- package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +701 -681
- 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 +6 -12
- 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 +9 -14
- package/src/sap/fe/core/converters/controls/Common/Chart-dbg.js +32 -20
- 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 +30 -18
- package/src/sap/fe/core/converters/controls/Common/DataVisualization-dbg.js +4 -5
- 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 +6 -37
- package/src/sap/fe/core/converters/controls/Common/Form-dbg.js +7 -6
- package/src/sap/fe/core/converters/controls/Common/Form.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Form.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Form.ts +5 -11
- package/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +5 -5
- 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 +3 -4
- package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +135 -85
- 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 +189 -119
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +56 -22
- 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 +67 -31
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +137 -49
- 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 +166 -43
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +33 -14
- 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 +31 -12
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection-dbg.js +27 -18
- 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 +36 -23
- package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +37 -15
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +36 -20
- package/src/sap/fe/core/converters/helpers/BindingHelper-dbg.js +8 -6
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/BindingHelper.js.map +1 -1
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +8 -6
- package/src/sap/fe/core/converters/helpers/InsightsHelpers-dbg.js +39 -0
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +6 -0
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +45 -0
- package/src/sap/fe/core/converters/helpers/IssueManager-dbg.js +3 -2
- 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 +2 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +17 -16
- 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 +11 -11
- package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +20 -17
- 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 +25 -56
- package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +13 -13
- 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 +18 -13
- package/src/sap/fe/core/formatters/CollaborationFormatter-dbg.js +17 -33
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
- package/src/sap/fe/core/formatters/CollaborationFormatter.js.map +1 -1
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +27 -22
- package/src/sap/fe/core/formatters/TableFormatter-dbg.js +2 -6
- 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 -5
- package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +13 -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 +19 -9
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +2 -1
- package/src/sap/fe/core/helpers/BindingToolkit.js +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit.ts +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper-dbg.js +58 -35
- 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 +76 -54
- package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +8 -4
- 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 +7 -5
- package/src/sap/fe/core/helpers/MessageStrip-dbg.js +6 -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 +167 -4
- package/src/sap/fe/core/helpers/MetaModelFunction.js +1 -1
- package/src/sap/fe/core/helpers/MetaModelFunction.js.map +1 -1
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +205 -3
- package/src/sap/fe/core/helpers/ModelHelper-dbg.js +37 -73
- package/src/sap/fe/core/helpers/ModelHelper.js +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +41 -68
- package/src/sap/fe/core/helpers/RecommendationHelper-dbg.js +71 -0
- package/src/sap/fe/core/helpers/RecommendationHelper.js +6 -0
- package/src/sap/fe/core/helpers/RecommendationHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/RecommendationHelper.ts +94 -0
- package/src/sap/fe/core/helpers/ResourceModelHelper-dbg.js +19 -3
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +21 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +40 -6
- 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 +39 -5
- package/src/sap/fe/core/helpers/SizeHelper-dbg.js +53 -0
- package/src/sap/fe/core/helpers/SizeHelper.js +6 -0
- package/src/sap/fe/core/helpers/SizeHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/SizeHelper.ts +51 -0
- package/src/sap/fe/core/helpers/StableIdHelper-dbg.js +52 -26
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.ts +49 -25
- package/src/sap/fe/core/helpers/TypeGuards-dbg.js +147 -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 +151 -1
- package/src/sap/fe/core/jsx-runtime/jsx-control-dbg.js +25 -2
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx-control.js.map +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +24 -0
- package/src/sap/fe/core/jsx-runtime/jsx-dbg.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -0
- package/src/sap/fe/core/library-dbg.js +1 -1
- package/src/sap/fe/core/library-preload.js +123 -95
- 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/manifest.json +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +67 -15
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js.map +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -14
- package/src/sap/fe/core/messagebundle.properties +6 -6
- package/src/sap/fe/core/messagebundle_ar.properties +5 -6
- package/src/sap/fe/core/messagebundle_bg.properties +11 -12
- package/src/sap/fe/core/messagebundle_ca.properties +3 -4
- package/src/sap/fe/core/messagebundle_cs.properties +3 -4
- package/src/sap/fe/core/messagebundle_cy.properties +3 -4
- package/src/sap/fe/core/messagebundle_da.properties +3 -4
- package/src/sap/fe/core/messagebundle_de.properties +11 -12
- package/src/sap/fe/core/messagebundle_el.properties +5 -6
- package/src/sap/fe/core/messagebundle_en.properties +3 -4
- package/src/sap/fe/core/messagebundle_en_GB.properties +4 -5
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +3 -4
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +3 -4
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +3 -2
- package/src/sap/fe/core/messagebundle_es.properties +3 -4
- package/src/sap/fe/core/messagebundle_es_MX.properties +3 -4
- package/src/sap/fe/core/messagebundle_et.properties +3 -4
- package/src/sap/fe/core/messagebundle_fi.properties +3 -4
- package/src/sap/fe/core/messagebundle_fr.properties +3 -4
- package/src/sap/fe/core/messagebundle_fr_CA.properties +11 -12
- package/src/sap/fe/core/messagebundle_hi.properties +11 -12
- package/src/sap/fe/core/messagebundle_hr.properties +3 -4
- package/src/sap/fe/core/messagebundle_hu.properties +3 -4
- package/src/sap/fe/core/messagebundle_id.properties +11 -12
- package/src/sap/fe/core/messagebundle_it.properties +3 -4
- package/src/sap/fe/core/messagebundle_iw.properties +3 -4
- package/src/sap/fe/core/messagebundle_ja.properties +4 -5
- package/src/sap/fe/core/messagebundle_kk.properties +3 -4
- package/src/sap/fe/core/messagebundle_ko.properties +11 -12
- package/src/sap/fe/core/messagebundle_lt.properties +3 -4
- package/src/sap/fe/core/messagebundle_lv.properties +11 -12
- package/src/sap/fe/core/messagebundle_ms.properties +3 -4
- package/src/sap/fe/core/messagebundle_nl.properties +3 -4
- package/src/sap/fe/core/messagebundle_no.properties +3 -4
- package/src/sap/fe/core/messagebundle_pl.properties +11 -12
- package/src/sap/fe/core/messagebundle_pt.properties +3 -4
- package/src/sap/fe/core/messagebundle_pt_PT.properties +3 -4
- package/src/sap/fe/core/messagebundle_ro.properties +14 -15
- package/src/sap/fe/core/messagebundle_ru.properties +11 -12
- package/src/sap/fe/core/messagebundle_sh.properties +3 -4
- package/src/sap/fe/core/messagebundle_sk.properties +3 -4
- package/src/sap/fe/core/messagebundle_sl.properties +3 -4
- package/src/sap/fe/core/messagebundle_sv.properties +11 -12
- package/src/sap/fe/core/messagebundle_th.properties +3 -4
- package/src/sap/fe/core/messagebundle_tr.properties +3 -4
- package/src/sap/fe/core/messagebundle_uk.properties +3 -4
- package/src/sap/fe/core/messagebundle_vi.properties +3 -4
- package/src/sap/fe/core/messagebundle_zh_CN.properties +11 -12
- package/src/sap/fe/core/messagebundle_zh_TW.properties +11 -12
- package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +22 -8
- 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 +17 -7
- package/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +36 -3
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +37 -1
- package/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +13 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +13 -0
- package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +7 -1
- 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 +20 -2
- package/src/sap/fe/core/services/ShellServicesFactory-dbg.js +7 -1
- package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.js.map +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.ts +10 -0
- package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +10 -7
- 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 +12 -13
- package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +9 -3
- 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 +11 -15
- package/src/sap/fe/core/templating/CommonFormatters-dbg.js +4 -3
- package/src/sap/fe/core/templating/CommonFormatters.js +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js.map +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.ts +2 -2
- package/src/sap/fe/core/templating/CriticalityFormatters-dbg.js +1 -1
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +2 -2
- package/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +19 -18
- 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 +24 -18
- package/src/sap/fe/core/templating/DisplayModeFormatter-dbg.js +5 -5
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.js.map +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -2
- package/src/sap/fe/core/templating/EntitySetHelper-dbg.js +19 -28
- 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 +14 -24
- package/src/sap/fe/core/templating/EntityTypeHelper-dbg.js +48 -0
- package/src/sap/fe/core/templating/EntityTypeHelper.js +6 -0
- package/src/sap/fe/core/templating/EntityTypeHelper.js.map +1 -0
- package/src/sap/fe/core/templating/EntityTypeHelper.ts +37 -0
- package/src/sap/fe/core/templating/FilterHelper-dbg.js +12 -1
- 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 +12 -0
- package/src/sap/fe/core/templating/FilterTemplating-dbg.js +7 -8
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.js.map +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +5 -8
- package/src/sap/fe/core/templating/PropertyFormatters-dbg.js +1 -6
- package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.js.map +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.ts +0 -5
- package/src/sap/fe/core/templating/PropertyHelper-dbg.js +13 -46
- package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.js.map +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.ts +14 -43
- package/src/sap/fe/core/templating/UIFormatters-dbg.js +32 -26
- package/src/sap/fe/core/templating/UIFormatters.js +1 -1
- package/src/sap/fe/core/templating/UIFormatters.js.map +1 -1
- package/src/sap/fe/core/templating/UIFormatters.ts +45 -34
- package/src/sap/fe/core/controls/ActionPartial.fragment.xml +0 -91
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +0 -59
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +0 -171
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +0 -6
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js.map +0 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +0 -184
|
@@ -58,6 +58,8 @@ export interface IShellServices {
|
|
|
58
58
|
|
|
59
59
|
expandCompactHash(sHashFragment: string): any;
|
|
60
60
|
|
|
61
|
+
getHash(): string;
|
|
62
|
+
|
|
61
63
|
parseShellHash(sHash: string): any;
|
|
62
64
|
|
|
63
65
|
splitHash(sHash: string): object;
|
|
@@ -133,6 +135,10 @@ class ShellServiceMock extends Service<ShellServicesSettings> implements IShellS
|
|
|
133
135
|
return "";
|
|
134
136
|
}
|
|
135
137
|
|
|
138
|
+
getHash() {
|
|
139
|
+
return window.location.href;
|
|
140
|
+
}
|
|
141
|
+
|
|
136
142
|
hrefForExternalAsync(/*oArgs?: object, oComponent?: object*/) {
|
|
137
143
|
return Promise.resolve({});
|
|
138
144
|
}
|
|
@@ -623,6 +629,10 @@ class ShellServices extends Service<Required<ShellServicesSettings>> implements
|
|
|
623
629
|
return this.crossAppNavService.expandCompactHash(sHashFragment);
|
|
624
630
|
}
|
|
625
631
|
|
|
632
|
+
getHash() {
|
|
633
|
+
return `#${this.urlParsingService.getShellHash(window.location.href)}`;
|
|
634
|
+
}
|
|
635
|
+
|
|
626
636
|
/**
|
|
627
637
|
* Will call parseShellHash method of URLParsing service with given sHash.
|
|
628
638
|
*
|
|
@@ -2,17 +2,17 @@
|
|
|
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/base/Log", "sap/fe/core/converters/MetaModelConverter", "sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactory", "../templating/DataModelPathHelper"
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/PropertyHelper", "sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactory", "../templating/DataModelPathHelper"], function (Log, MetaModelConverter, TypeGuards, PropertyHelper, Service, ServiceFactory, DataModelPathHelper) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
|
-
var isProperty = PropertyHelper.isProperty;
|
|
10
|
-
var getAssociatedTextPropertyPath = PropertyHelper.getAssociatedTextPropertyPath;
|
|
11
9
|
var getTargetObjectPath = DataModelPathHelper.getTargetObjectPath;
|
|
12
10
|
var getTargetNavigationPath = DataModelPathHelper.getTargetNavigationPath;
|
|
13
11
|
var enhanceDataModelPath = DataModelPathHelper.enhanceDataModelPath;
|
|
14
|
-
var
|
|
15
|
-
var
|
|
12
|
+
var getAssociatedTextPropertyPath = PropertyHelper.getAssociatedTextPropertyPath;
|
|
13
|
+
var isProperty = TypeGuards.isProperty;
|
|
14
|
+
var isEntityType = TypeGuards.isEntityType;
|
|
15
|
+
var isComplexType = TypeGuards.isComplexType;
|
|
16
16
|
var getInvolvedDataModelObjects = MetaModelConverter.getInvolvedDataModelObjects;
|
|
17
17
|
var convertTypes = MetaModelConverter.convertTypes;
|
|
18
18
|
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
|
|
@@ -241,9 +241,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/MetaModelConverter", "sap
|
|
|
241
241
|
let sideEffectsTargets = [];
|
|
242
242
|
Object.keys(entitySideEffects).filter(
|
|
243
243
|
// Keep relevant SideEffects
|
|
244
|
+
// 1. SourceEntities match OR
|
|
245
|
+
// 2. Only 1 SourceProperties and match
|
|
244
246
|
annotationName => {
|
|
247
|
+
var _sideEffects$sourcePr;
|
|
245
248
|
const sideEffects = entitySideEffects[annotationName];
|
|
246
|
-
return (sideEffects.
|
|
249
|
+
return (sideEffects.sourceEntities || []).some(navigation => navigation.$NavigationPropertyPath === navigationProperty) || ((_sideEffects$sourcePr = sideEffects.sourceProperties) === null || _sideEffects$sourcePr === void 0 ? void 0 : _sideEffects$sourcePr.length) === 1 && sideEffects.sourceProperties.some(propertyPath => propertyPath.startsWith(navigationPath) && propertyPath.replace(navigationPath, "").indexOf("/") === -1);
|
|
247
250
|
}).forEach(sAnnotationName => {
|
|
248
251
|
const sideEffects = entitySideEffects[sAnnotationName];
|
|
249
252
|
if (sideEffects.triggerAction) {
|
|
@@ -735,4 +738,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/MetaModelConverter", "sap
|
|
|
735
738
|
}(ServiceFactory);
|
|
736
739
|
return SideEffectsServiceFactory;
|
|
737
740
|
}, false);
|
|
738
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTaWRlRWZmZWN0c1NlcnZpY2UiLCJpbml0Iiwic2lkZUVmZmVjdHNSZWdpc3RyeSIsIm9EYXRhIiwiZW50aXRpZXMiLCJhY3Rpb25zIiwiY29udHJvbCIsImlzSW5pdGlhbGl6ZWQiLCJpbml0UHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiYWRkQ29udHJvbFNpZGVFZmZlY3RzIiwiZW50aXR5VHlwZSIsInNpZGVFZmZlY3QiLCJzb3VyY2VDb250cm9sSWQiLCJjb250cm9sU2lkZUVmZmVjdCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImVudGl0eUNvbnRyb2xTaWRlRWZmZWN0cyIsImV4ZWN1dGVBY3Rpb24iLCJ0cmlnZ2VyQWN0aW9uIiwiY29udGV4dCIsImdyb3VwSWQiLCJhY3Rpb24iLCJnZXRNb2RlbCIsImJpbmRDb250ZXh0IiwiZXhlY3V0ZSIsImdldEJpbmRpbmciLCJnZXRVcGRhdGVHcm91cElkIiwiZ2V0Q29udmVydGVkTWV0YU1vZGVsIiwiY29udmVydFR5cGVzIiwiZ2V0TWV0YU1vZGVsIiwiY2FwYWJpbGl0aWVzIiwiZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0IiwibWV0YU1vZGVsIiwibWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsImdldFBhdGgiLCJnZXRPYmplY3QiLCJnZXRPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwiZW50aXR5VHlwZU5hbWUiLCJnZXRHbG9iYWxPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwiZW50aXR5U2lkZUVmZmVjdHMiLCJnbG9iYWxTaWRlRWZmZWN0cyIsImtleSIsInNpZGVFZmZlY3RzIiwic291cmNlRW50aXRpZXMiLCJzb3VyY2VQcm9wZXJ0aWVzIiwicHVzaCIsImdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMiLCJhY3Rpb25OYW1lIiwidW5kZWZpbmVkIiwiaW5pdGlhbGl6ZVNpZGVFZmZlY3RzIiwic2lkZUVmZmVjdFNvdXJjZXMiLCJwcm9wZXJ0aWVzIiwiY29udmVydGVkTWV0YU1vZGVsIiwiZW50aXR5VHlwZXMiLCJmb3JFYWNoIiwicmV0cmlldmVPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwicmV0cmlldmVPRGF0YUFjdGlvbnNTaWRlRWZmZWN0cyIsIm1hcFNpZGVFZmZlY3RTb3VyY2VzIiwic291cmNlc1RvU2lkZUVmZmVjdE1hcHBpbmdzIiwicmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzIiwiY29udHJvbElkIiwiT2JqZWN0Iiwia2V5cyIsInNFbnRpdHlUeXBlIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwicGF0aEV4cHJlc3Npb25zIiwibG9nUmVxdWVzdCIsInJlcXVlc3RTaWRlRWZmZWN0c0Zvck9EYXRhQWN0aW9uIiwicHJvbWlzZXMiLCJ0cmlnZ2VyQWN0aW9ucyIsImxlbmd0aCIsIm1hcCIsImFsbCIsInJlcXVlc3RTaWRlRWZmZWN0c0Zvck5hdmlnYXRpb25Qcm9wZXJ0eSIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsImJhc2VFbnRpdHlUeXBlIiwibmF2aWdhdGlvblBhdGgiLCJ0YXJnZXRQcm9wZXJ0aWVzIiwidGFyZ2V0RW50aXRpZXMiLCJzaWRlRWZmZWN0c1RhcmdldHMiLCJmaWx0ZXIiLCJhbm5vdGF0aW9uTmFtZSIsInNvbWUiLCJwcm9wZXJ0eVBhdGgiLCJzdGFydHNXaXRoIiwicmVwbGFjZSIsImluZGV4T2YiLCJuYXZpZ2F0aW9uIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJzQW5ub3RhdGlvbk5hbWUiLCJjb25jYXQiLCJzaWRlRWZmZWN0c1RhcmdldERlZmluaXRpb24iLCJyZW1vdmVEdXBsaWNhdGVUYXJnZXRzIiwiY2F0Y2giLCJlcnJvciIsIkxvZyIsImdldENvbnRyb2xFbnRpdHlTaWRlRWZmZWN0cyIsImdldFNpZGVFZmZlY3RXaGVyZUVudGl0eUlzU291cmNlIiwiY29tcHV0ZUZpZWxkR3JvdXBJZHMiLCJzb3VyY2VFbnRpdHlUeXBlIiwic291cmNlUHJvcGVydHkiLCJlbnRpdHlGaWVsZEdyb3VwSWRzIiwic2lkZUVmZmVjdEluZm8iLCJnZXRGaWVsZEdyb3VwSWRGb3JTaWRlRWZmZWN0IiwiZ2V0U2lkZUVmZmVjdFdoZXJlUHJvcGVydHlJc1NvdXJjZSIsInByb3BlcnR5TmFtZSIsImFkZFRleHRQcm9wZXJ0aWVzIiwic2V0T2ZQcm9wZXJ0aWVzIiwiU2V0Iiwic2V0T2ZFbnRpdGllcyIsInRhcmdldCIsInByb3BlcnRpZXNUb0FuYWx5emUiLCJyZWR1Y2UiLCJkYXRhTW9kZWxQcm9wZXJ0eVBhdGhzIiwiZ2V0RGF0YU1vZGVsUHJvcGVydGllc0Zyb21BUGF0aCIsImRhdGFNb2RlbFByb3BlcnR5UGF0aCIsImFzc29jaWF0ZWRUZXh0UGF0aCIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIiwidGFyZ2V0T2JqZWN0IiwiZGF0YU1vZGVsVGV4dFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInJlbGF0aXZlTmF2aWdhdGlvbiIsImdldFRhcmdldE5hdmlnYXRpb25QYXRoIiwidGFyZ2V0UGF0aCIsImdldFRhcmdldE9iamVjdFBhdGgiLCJpc1Byb3BlcnR5IiwiaGFzIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJ0YXJnZXRFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiYWRkIiwiQXJyYXkiLCJmcm9tIiwiY29udmVydFNpZGVFZmZlY3RzIiwiYmluZGluZ1BhcmFtZXRlciIsIlRyaWdnZXJBY3Rpb24iLCJuZXdTaWRlRWZmZWN0cyIsImNvbnZlcnRTaWRlRWZmZWN0c0Zvcm1hdCIsInJlbW92ZUJpbmRpbmdQYXJhbWV0ZXIiLCJmb3JtYXRQcm9wZXJ0aWVzIiwicGF0aCIsInR5cGUiLCJ2YWx1ZSIsImZvcm1hdEVudGl0aWVzIiwidGFyZ2V0RW50aXR5IiwiU291cmNlUHJvcGVydGllcyIsIlNvdXJjZUVudGl0aWVzIiwiVGFyZ2V0UHJvcGVydGllcyIsIlRhcmdldEVudGl0aWVzIiwiZGF0YU1vZGVsT2JqZWN0UGF0aHMiLCJlbnRpdHlTZXQiLCJlbnRpdHlTZXRzIiwiZmluZCIsInJlbGF0ZWRFbnRpdHlTZXQiLCJzaW5nbGV0b25zIiwic2luZ2xldG9uIiwiZW50aXR5U2V0Q29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwibmFtZSIsImRhdGFNb2RlbEVudGl0eVNldCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJpc0NvbXBsZXhUeXBlIiwidGFyZ2V0VHlwZSIsInByb3BlcnR5IiwiaXNFbnRpdHlUeXBlIiwiZW50aXR5UHJvcGVydGllcyIsImVudGl0eVByb3BlcnR5IiwiZGVzdHJveSIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsIm9Db21wb25lbnQiLCJzY29wZU9iamVjdCIsImdldFNpZGVFZmZlY3RzRnJvbVNvdXJjZSIsInNvdXJjZSIsImJpbmRpbmdBbGlhcyIsImlzU291cmNlRW50aXR5VHlwZSIsImNvbW1vbkFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsInBhcmFtZXRlcnMiLCJwYXJhbWV0ZXIiLCJzcGxpdCIsImdldFNpZGVFZmZlY3RzQW5ub3RhdGlvbkZyb21Tb3VyY2UiLCJzaWRlRWZmZWN0QW5ubyIsImFubm90YXRpb24iLCJpc1NpZGVFZmZlY3RzQW5ub3RhdGlvbiIsIiRUeXBlIiwidGFyZ2V0UGF0aHMiLCJwYXRocyIsImRlYnVnIiwiYmluZGluZ1BhcmFtZXRlck5hbWUiLCJyZXBsYWNlQmluZGluZ1BhcmFtZXRlciIsIlJlZ0V4cCIsInRhcmdldFByb3BlcnR5IiwidGFyZ2V0RW50aXRpZXNQYXRocyIsInVuaXF1ZVRhcmdldGVkRW50aXRpZXNQYXRoIiwidW5pcXVlVGFyZ2V0UHJvcGVydGllcyIsInVuaXF1ZVRhcmdldGVkRW50aXRpZXMiLCJlbnRpdHlQYXRoIiwib0RhdGFTaWRlRWZmZWN0Iiwic2lkZUVmZmVjdHNTb3VyY2VzIiwic2lkZUVmZmVjdERlZmluaXRpb24iLCJzb3VyY2VFbnRpdHkiLCIkdGFyZ2V0IiwiZW50aXR5IiwicXVhbGlmaWVyIiwiaGFzVW5pcXVlU291cmNlUHJvcGVydHkiLCJpc0ltbWVkaWF0ZSIsInNpZGVFZmZlY3RXaXRoUXVhbGlmaWVyIiwiZ2V0SW50ZXJmYWNlIiwiU2VydmljZSIsIlNpZGVFZmZlY3RzU2VydmljZUZhY3RvcnkiLCJjcmVhdGVJbnN0YW5jZSIsIm9TZXJ2aWNlQ29udGV4dCIsIlNpZGVFZmZlY3RzU2VydmljZVNlcnZpY2UiLCJTZXJ2aWNlRmFjdG9yeSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiwgQ29udmVydGVkTWV0YWRhdGEsIEVudGl0eVR5cGUsIE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTaWRlRWZmZWN0c1R5cGUgYXMgQ29tbW9uU2lkZUVmZmVjdHNUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7XG5cdGNvbnZlcnRUeXBlcyxcblx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMsXG5cdGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyxcblx0aXNDb21wbGV4VHlwZSxcblx0aXNFbnRpdHlUeXBlXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IFNlcnZpY2UgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB7IERhdGFNb2RlbE9iamVjdFBhdGgsIGVuaGFuY2VEYXRhTW9kZWxQYXRoLCBnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCwgZ2V0VGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCIuLi90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoLCBpc1Byb3BlcnR5IH0gZnJvbSBcIi4uL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcblxudHlwZSBTaWRlRWZmZWN0c1NldHRpbmdzID0ge307XG5cbmV4cG9ydCB0eXBlIFNpZGVFZmZlY3RzRW50aXR5VHlwZSA9IHtcblx0JE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBTaWRlRWZmZWN0c1RhcmdldCA9IFNpZGVFZmZlY3RzRW50aXR5VHlwZSB8IHN0cmluZztcblxuZXhwb3J0IHR5cGUgU2lkZUVmZmVjdHNUYXJnZXRUeXBlID0ge1xuXHR0YXJnZXRQcm9wZXJ0aWVzOiBzdHJpbmdbXTtcblx0dGFyZ2V0RW50aXRpZXM6IFNpZGVFZmZlY3RzRW50aXR5VHlwZVtdO1xufTtcblxudHlwZSBCYXNlU2lkZUVmZmVjdHNUeXBlID0ge1xuXHRzb3VyY2VQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdHNvdXJjZUVudGl0aWVzPzogU2lkZUVmZmVjdHNFbnRpdHlUeXBlW107XG5cdGZ1bGx5UXVhbGlmaWVkTmFtZTogc3RyaW5nO1xufSAmIFNpZGVFZmZlY3RzVGFyZ2V0VHlwZTtcblxuZXhwb3J0IHR5cGUgT0RhdGFTaWRlRWZmZWN0c1R5cGUgPSBCYXNlU2lkZUVmZmVjdHNUeXBlICYge1xuXHR0cmlnZ2VyQWN0aW9uPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQWN0aW9uU2lkZUVmZmVjdHNUeXBlID0ge1xuXHRwYXRoRXhwcmVzc2lvbnM6IFNpZGVFZmZlY3RzVGFyZ2V0W107XG5cdHRyaWdnZXJBY3Rpb25zPzogc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBDb250cm9sU2lkZUVmZmVjdHNUeXBlID0gUGFydGlhbDxCYXNlU2lkZUVmZmVjdHNUeXBlPiAmIHtcblx0ZnVsbHlRdWFsaWZpZWROYW1lOiBzdHJpbmc7XG5cdHNvdXJjZVByb3BlcnRpZXM6IHN0cmluZ1tdO1xuXHRzb3VyY2VDb250cm9sSWQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNpZGVFZmZlY3RzVHlwZSA9IENvbnRyb2xTaWRlRWZmZWN0c1R5cGUgfCBPRGF0YVNpZGVFZmZlY3RzVHlwZTtcblxuLy9UT0RPIGZpeCB0aGlzIHR5cGUgaW4gdGhlIHV4IHZvY2FidWxhcmllc1xudHlwZSBDb21tb25TaWRlRWZmZWN0VHlwZVdpdGhRdWFsaWZpZXIgPSBDb21tb25TaWRlRWZmZWN0c1R5cGUgJiB7IHF1YWxpZmllcj86IHN0cmluZyB9O1xuXG5leHBvcnQgdHlwZSBPRGF0YVNpZGVFZmZlY3RzRW50aXR5RGljdGlvbmFyeSA9IFJlY29yZDxzdHJpbmcsIE9EYXRhU2lkZUVmZmVjdHNUeXBlPjtcbmV4cG9ydCB0eXBlIE9EYXRhU2lkZUVmZmVjdHNBY3Rpb25EaWN0aW9uYXJ5ID0gUmVjb3JkPHN0cmluZywgQWN0aW9uU2lkZUVmZmVjdHNUeXBlPjtcbmV4cG9ydCB0eXBlIENvbnRyb2xTaWRlRWZmZWN0c0VudGl0eURpY3Rpb25hcnkgPSBSZWNvcmQ8c3RyaW5nLCBDb250cm9sU2lkZUVmZmVjdHNUeXBlPjtcblxuZXhwb3J0IHR5cGUgU2lkZUVmZmVjdEluZm9Gb3JTb3VyY2UgPSB7IGVudGl0eTogc3RyaW5nOyBxdWFsaWZpZXI/OiBzdHJpbmc7IGhhc1VuaXF1ZVNvdXJjZVByb3BlcnR5PzogYm9vbGVhbiB9O1xuXG50eXBlIFNpZGVFZmZlY3RzT3JpZ2luUmVnaXN0cnkgPSB7XG5cdG9EYXRhOiB7XG5cdFx0ZW50aXRpZXM6IHtcblx0XHRcdFtlbnRpdHk6IHN0cmluZ106IFJlY29yZDxzdHJpbmcsIE9EYXRhU2lkZUVmZmVjdHNUeXBlPjtcblx0XHR9O1xuXHRcdGFjdGlvbnM6IHtcblx0XHRcdFtlbnRpdHk6IHN0cmluZ106IFJlY29yZDxzdHJpbmcsIEFjdGlvblNpZGVFZmZlY3RzVHlwZT47XG5cdFx0fTtcblx0fTtcblx0Y29udHJvbDoge1xuXHRcdFtlbnRpdHk6IHN0cmluZ106IFJlY29yZDxzdHJpbmcsIENvbnRyb2xTaWRlRWZmZWN0c1R5cGU+O1xuXHR9O1xufTtcblxuZXhwb3J0IGNsYXNzIFNpZGVFZmZlY3RzU2VydmljZSBleHRlbmRzIFNlcnZpY2U8U2lkZUVmZmVjdHNTZXR0aW5ncz4ge1xuXHRpbml0UHJvbWlzZSE6IFByb21pc2U8U2lkZUVmZmVjdHNTZXJ2aWNlPjtcblxuXHRwcml2YXRlIHNpZGVFZmZlY3RzUmVnaXN0cnkhOiBTaWRlRWZmZWN0c09yaWdpblJlZ2lzdHJ5O1xuXG5cdHByaXZhdGUgY2FwYWJpbGl0aWVzITogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBpc0luaXRpYWxpemVkITogYm9vbGVhbjtcblxuXHRwcml2YXRlIHNvdXJjZXNUb1NpZGVFZmZlY3RNYXBwaW5ncyE6IHtcblx0XHRlbnRpdGllczogUmVjb3JkPHN0cmluZywgU2lkZUVmZmVjdEluZm9Gb3JTb3VyY2VbXT47XG5cdFx0cHJvcGVydGllczogUmVjb3JkPHN0cmluZywgU2lkZUVmZmVjdEluZm9Gb3JTb3VyY2VbXT47XG5cdH07XG5cblx0Ly8gITogbWVhbnMgdGhhdCB3ZSBrbm93IGl0IHdpbGwgYmUgYXNzaWduZWQgYmVmb3JlIHVzYWdlXG5cdGluaXQoKSB7XG5cdFx0dGhpcy5zaWRlRWZmZWN0c1JlZ2lzdHJ5ID0ge1xuXHRcdFx0b0RhdGE6IHtcblx0XHRcdFx0ZW50aXRpZXM6IHt9LFxuXHRcdFx0XHRhY3Rpb25zOiB7fVxuXHRcdFx0fSxcblx0XHRcdGNvbnRyb2w6IHt9XG5cdFx0fTtcblx0XHR0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBTaWRlRWZmZWN0cyBjb250cm9sXG5cdCAqIFNpZGVFZmZlY3RzIGRlZmluaXRpb24gaXMgYWRkZWQgYnkgYSBjb250cm9sIHRvIGtlZXAgZGF0YSB1cCB0byBkYXRlXG5cdCAqIFRoZXNlIFNpZGVFZmZlY3RzIGdldCBsaW1pdGVkIHNjb3BlIGNvbXBhcmVkIHdpdGggU2lkZUVmZmVjdHMgY29taW5nIGZyb20gYW4gT0RhdGEgc2VydmljZTpcblx0ICogLSBPbmx5IG9uZSBTaWRlRWZmZWN0cyBkZWZpbml0aW9uIGNhbiBiZSBkZWZpbmVkIGZvciB0aGUgY29tYmluYXRpb24gZW50aXR5IHR5cGUgLSBjb250cm9sIElkXG5cdCAqIC0gT25seSBTaWRlRWZmZWN0cyBzb3VyY2UgcHJvcGVydGllcyBhcmUgcmVjb2duaXplZCBhbmQgdXNlZCB0byB0cmlnZ2VyIFNpZGVFZmZlY3RzXG5cdCAqXG5cdCAqIEVuc3VyZSB0aGUgc291cmNlQ29udHJvbElkIG1hdGNoZXMgdGhlIGFzc29jaWF0ZWQgU0FQVUk1IGNvbnRyb2wgSUQuXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gZW50aXR5VHlwZSBOYW1lIG9mIHRoZSBlbnRpdHkgdHlwZVxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdCBTaWRlRWZmZWN0cyBkZWZpbml0aW9uXG5cdCAqL1xuXHRwdWJsaWMgYWRkQ29udHJvbFNpZGVFZmZlY3RzKGVudGl0eVR5cGU6IHN0cmluZywgc2lkZUVmZmVjdDogT21pdDxDb250cm9sU2lkZUVmZmVjdHNUeXBlLCBcImZ1bGx5UXVhbGlmaWVkTmFtZVwiPik6IHZvaWQge1xuXHRcdGlmIChzaWRlRWZmZWN0LnNvdXJjZUNvbnRyb2xJZCkge1xuXHRcdFx0Y29uc3QgY29udHJvbFNpZGVFZmZlY3Q6IENvbnRyb2xTaWRlRWZmZWN0c1R5cGUgPSB7XG5cdFx0XHRcdC4uLnNpZGVFZmZlY3QsXG5cdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7ZW50aXR5VHlwZX0vU2lkZUVmZmVjdHNGb3JDb250cm9sLyR7c2lkZUVmZmVjdC5zb3VyY2VDb250cm9sSWR9YFxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGVudGl0eUNvbnRyb2xTaWRlRWZmZWN0cyA9IHRoaXMuc2lkZUVmZmVjdHNSZWdpc3RyeS5jb250cm9sW2VudGl0eVR5cGVdIHx8IHt9O1xuXHRcdFx0ZW50aXR5Q29udHJvbFNpZGVFZmZlY3RzW2NvbnRyb2xTaWRlRWZmZWN0LnNvdXJjZUNvbnRyb2xJZF0gPSBjb250cm9sU2lkZUVmZmVjdDtcblx0XHRcdHRoaXMuc2lkZUVmZmVjdHNSZWdpc3RyeS5jb250cm9sW2VudGl0eVR5cGVdID0gZW50aXR5Q29udHJvbFNpZGVFZmZlY3RzO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyBTaWRlRWZmZWN0cyBhY3Rpb24uXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gdHJpZ2dlckFjdGlvbiBOYW1lIG9mIHRoZSBhY3Rpb25cblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dFxuXHQgKiBAcGFyYW0gZ3JvdXBJZCBUaGUgZ3JvdXAgSUQgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3Rcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2l0aG91dCBkYXRhIG9yIHdpdGggYSByZXR1cm4gdmFsdWUgY29udGV4dCB3aGVuIHRoZSBhY3Rpb24gY2FsbCBzdWNjZWVkZWRcblx0ICovXG5cdHB1YmxpYyBleGVjdXRlQWN0aW9uKHRyaWdnZXJBY3Rpb246IHN0cmluZywgY29udGV4dDogQ29udGV4dCwgZ3JvdXBJZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGFjdGlvbiA9IGNvbnRleHQuZ2V0TW9kZWwoKS5iaW5kQ29udGV4dChgJHt0cmlnZ2VyQWN0aW9ufSguLi4pYCwgY29udGV4dCk7XG5cdFx0cmV0dXJuIGFjdGlvbi5leGVjdXRlKGdyb3VwSWQgfHwgY29udGV4dC5nZXRCaW5kaW5nKCkuZ2V0VXBkYXRlR3JvdXBJZCgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGNvbnZlcnRlZCBPRGF0YSBtZXRhTW9kZWwuXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcmV0dXJucyBDb252ZXJ0ZWQgT0RhdGEgbWV0YU1vZGVsXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Q29udmVydGVkTWV0YU1vZGVsKCk6IENvbnZlcnRlZE1ldGFkYXRhIHtcblx0XHRyZXR1cm4gY29udmVydFR5cGVzKHRoaXMuZ2V0TWV0YU1vZGVsKCksIHRoaXMuY2FwYWJpbGl0aWVzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBlbnRpdHkgdHlwZSBvZiBhIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcblx0ICogQHJldHVybnMgRW50aXR5IFR5cGVcblx0ICovXG5cdHB1YmxpYyBnZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dDogQ29udGV4dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0bWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgoY29udGV4dC5nZXRQYXRoKCkpLFxuXHRcdFx0ZW50aXR5VHlwZSA9IG1ldGFNb2RlbC5nZXRPYmplY3QobWV0YVBhdGgpW1wiJFR5cGVcIl07XG5cdFx0cmV0dXJuIGVudGl0eVR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgU2lkZUVmZmVjdHMgdGhhdCBjb21lIGZyb20gYW4gT0RhdGEgc2VydmljZS5cblx0ICpcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlTmFtZSBOYW1lIG9mIHRoZSBlbnRpdHkgdHlwZVxuXHQgKiBAcmV0dXJucyBTaWRlRWZmZWN0cyBkaWN0aW9uYXJ5XG5cdCAqL1xuXHRwdWJsaWMgZ2V0T0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlTmFtZTogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgT0RhdGFTaWRlRWZmZWN0c1R5cGU+IHtcblx0XHRyZXR1cm4gdGhpcy5zaWRlRWZmZWN0c1JlZ2lzdHJ5Lm9EYXRhLmVudGl0aWVzW2VudGl0eVR5cGVOYW1lXSB8fCB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBnbG9iYWwgU2lkZUVmZmVjdHMgdGhhdCBjb21lIGZyb20gYW4gT0RhdGEgc2VydmljZS5cblx0ICpcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlTmFtZSBOYW1lIG9mIHRoZSBlbnRpdHkgdHlwZVxuXHQgKiBAcmV0dXJucyBHbG9iYWwgU2lkZUVmZmVjdHNcblx0ICovXG5cdHB1YmxpYyBnZXRHbG9iYWxPRGF0YUVudGl0eVNpZGVFZmZlY3RzKGVudGl0eVR5cGVOYW1lOiBzdHJpbmcpOiBPRGF0YVNpZGVFZmZlY3RzVHlwZVtdIHtcblx0XHRjb25zdCBlbnRpdHlTaWRlRWZmZWN0cyA9IHRoaXMuZ2V0T0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlTmFtZSk7XG5cdFx0Y29uc3QgZ2xvYmFsU2lkZUVmZmVjdHM6IE9EYXRhU2lkZUVmZmVjdHNUeXBlW10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBlbnRpdHlTaWRlRWZmZWN0cykge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHMgPSBlbnRpdHlTaWRlRWZmZWN0c1trZXldO1xuXHRcdFx0aWYgKCFzaWRlRWZmZWN0cy5zb3VyY2VFbnRpdGllcyAmJiAhc2lkZUVmZmVjdHMuc291cmNlUHJvcGVydGllcykge1xuXHRcdFx0XHRnbG9iYWxTaWRlRWZmZWN0cy5wdXNoKHNpZGVFZmZlY3RzKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGdsb2JhbFNpZGVFZmZlY3RzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIFNpZGVFZmZlY3RzIHRoYXQgY29tZSBmcm9tIGFuIE9EYXRhIHNlcnZpY2UuXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gYWN0aW9uTmFtZSBOYW1lIG9mIHRoZSBhY3Rpb25cblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dFxuXHQgKiBAcmV0dXJucyBTaWRlRWZmZWN0cyBkZWZpbml0aW9uXG5cdCAqL1xuXHRwdWJsaWMgZ2V0T0RhdGFBY3Rpb25TaWRlRWZmZWN0cyhhY3Rpb25OYW1lOiBzdHJpbmcsIGNvbnRleHQ/OiBDb250ZXh0KTogQWN0aW9uU2lkZUVmZmVjdHNUeXBlIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoY29udGV4dCkge1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IHRoaXMuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KGNvbnRleHQpO1xuXHRcdFx0aWYgKGVudGl0eVR5cGUpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuc2lkZUVmZmVjdHNSZWdpc3RyeS5vRGF0YS5hY3Rpb25zW2VudGl0eVR5cGVdPy5bYWN0aW9uTmFtZV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBkaWN0aW9uYXJ5IGZvciB0aGUgU2lkZUVmZmVjdHMuXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gY2FwYWJpbGl0aWVzIFRoZSBjdXJyZW50IGNhcGFiaWxpdGllc1xuXHQgKi9cblx0cHVibGljIGluaXRpYWxpemVTaWRlRWZmZWN0cyhjYXBhYmlsaXRpZXM/OiBFbnZpcm9ubWVudENhcGFiaWxpdGllcyk6IHZvaWQge1xuXHRcdHRoaXMuY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzO1xuXHRcdGlmICghdGhpcy5pc0luaXRpYWxpemVkKSB7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0U291cmNlczoge1xuXHRcdFx0XHRlbnRpdGllczogUmVjb3JkPHN0cmluZywgU2lkZUVmZmVjdEluZm9Gb3JTb3VyY2VbXT47XG5cdFx0XHRcdHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIFNpZGVFZmZlY3RJbmZvRm9yU291cmNlW10+O1xuXHRcdFx0fSA9IHtcblx0XHRcdFx0ZW50aXRpZXM6IHt9LFxuXHRcdFx0XHRwcm9wZXJ0aWVzOiB7fVxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGNvbnZlcnRlZE1ldGFNb2RlbCA9IHRoaXMuZ2V0Q29udmVydGVkTWV0YU1vZGVsKCk7XG5cdFx0XHRjb252ZXJ0ZWRNZXRhTW9kZWwuZW50aXR5VHlwZXMuZm9yRWFjaCgoZW50aXR5VHlwZTogRW50aXR5VHlwZSkgPT4ge1xuXHRcdFx0XHR0aGlzLnNpZGVFZmZlY3RzUmVnaXN0cnkub0RhdGEuZW50aXRpZXNbZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWVdID0gdGhpcy5yZXRyaWV2ZU9EYXRhRW50aXR5U2lkZUVmZmVjdHMoZW50aXR5VHlwZSk7XG5cdFx0XHRcdHRoaXMuc2lkZUVmZmVjdHNSZWdpc3RyeS5vRGF0YS5hY3Rpb25zW2VudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lXSA9IHRoaXMucmV0cmlldmVPRGF0YUFjdGlvbnNTaWRlRWZmZWN0cyhlbnRpdHlUeXBlKTsgLy8gb25seSBib3VuZCBhY3Rpb25zIGFyZSBhbmFseXplZCBzaW5jZSB1bmJvdW5kIG9uZXMgZG9uJ3QgZ2V0IFNpZGVFZmZlY3RzXG5cdFx0XHRcdHRoaXMubWFwU2lkZUVmZmVjdFNvdXJjZXMoZW50aXR5VHlwZSwgc2lkZUVmZmVjdFNvdXJjZXMpO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnNvdXJjZXNUb1NpZGVFZmZlY3RNYXBwaW5ncyA9IHNpZGVFZmZlY3RTb3VyY2VzO1xuXHRcdFx0dGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhbGwgU2lkZUVmZmVjdHMgcmVsYXRlZCB0byBhIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gY29udHJvbElkIENvbnRyb2wgSWRcblx0ICovXG5cdHB1YmxpYyByZW1vdmVDb250cm9sU2lkZUVmZmVjdHMoY29udHJvbElkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRPYmplY3Qua2V5cyh0aGlzLnNpZGVFZmZlY3RzUmVnaXN0cnkuY29udHJvbCkuZm9yRWFjaCgoc0VudGl0eVR5cGUpID0+IHtcblx0XHRcdGlmICh0aGlzLnNpZGVFZmZlY3RzUmVnaXN0cnkuY29udHJvbFtzRW50aXR5VHlwZV1bY29udHJvbElkXSkge1xuXHRcdFx0XHRkZWxldGUgdGhpcy5zaWRlRWZmZWN0c1JlZ2lzdHJ5LmNvbnRyb2xbc0VudGl0eVR5cGVdW2NvbnRyb2xJZF07XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIFNpZGVFZmZlY3RzIG9uIGEgc3BlY2lmaWMgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIHBhdGhFeHByZXNzaW9ucyBUYXJnZXRzIG9mIFNpZGVFZmZlY3RzIHRvIGJlIGV4ZWN1dGVkXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgd2hlcmUgU2lkZUVmZmVjdHMgbmVlZCB0byBiZSBleGVjdXRlZFxuXHQgKiBAcGFyYW0gZ3JvdXBJZCBUaGUgZ3JvdXAgSUQgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3Rcblx0ICogQHJldHVybnMgUHJvbWlzZSBvbiBTaWRlRWZmZWN0cyByZXF1ZXN0XG5cdCAqL1xuXHRwdWJsaWMgcmVxdWVzdFNpZGVFZmZlY3RzKHBhdGhFeHByZXNzaW9uczogU2lkZUVmZmVjdHNUYXJnZXRbXSwgY29udGV4dDogQ29udGV4dCwgZ3JvdXBJZD86IHN0cmluZyk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0dGhpcy5sb2dSZXF1ZXN0KHBhdGhFeHByZXNzaW9ucywgY29udGV4dCk7XG5cdFx0cmV0dXJuIGNvbnRleHQucmVxdWVzdFNpZGVFZmZlY3RzKHBhdGhFeHByZXNzaW9ucyBhcyBvYmplY3RbXSwgZ3JvdXBJZCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIFNpZGVFZmZlY3RzIGZvciBhbiBPRGF0YSBhY3Rpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBzaWRlRWZmZWN0cyBTaWRlRWZmZWN0cyBkZWZpbml0aW9uXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgd2hlcmUgU2lkZUVmZmVjdHMgbmVlZCB0byBiZSBleGVjdXRlZFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIG9uIFNpZGVFZmZlY3RzIHJlcXVlc3RzIGFuZCBhY3Rpb24gZXhlY3V0aW9uXG5cdCAqL1xuXHRwdWJsaWMgcmVxdWVzdFNpZGVFZmZlY3RzRm9yT0RhdGFBY3Rpb24oc2lkZUVmZmVjdHM6IEFjdGlvblNpZGVFZmZlY3RzVHlwZSwgY29udGV4dDogQ29udGV4dCk6IFByb21pc2U8KHZvaWQgfCB1bmRlZmluZWQpW10+IHtcblx0XHRsZXQgcHJvbWlzZXM6IFByb21pc2U8dm9pZCB8IHVuZGVmaW5lZD5bXTtcblxuXHRcdGlmIChzaWRlRWZmZWN0cy50cmlnZ2VyQWN0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRwcm9taXNlcyA9IHNpZGVFZmZlY3RzLnRyaWdnZXJBY3Rpb25zLm1hcCgoYWN0aW9uTmFtZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQWN0aW9uKGFjdGlvbk5hbWUsIGNvbnRleHQpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb21pc2VzID0gW107XG5cdFx0fVxuXG5cdFx0aWYgKHNpZGVFZmZlY3RzLnBhdGhFeHByZXNzaW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRwcm9taXNlcy5wdXNoKHRoaXMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzLnBhdGhFeHByZXNzaW9ucywgY29udGV4dCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcm9taXNlcy5sZW5ndGggPyBQcm9taXNlLmFsbChwcm9taXNlcykgOiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIHRoZSBTaWRlRWZmZWN0cyBmb3IgYSBuYXZpZ2F0aW9uIHByb3BlcnR5IG9uIGEgc3BlY2lmaWMgY29udGV4dC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uUHJvcGVydHkgTmF2aWdhdGlvbiBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHdoZXJlIFNpZGVFZmZlY3RzIG5lZWQgdG8gYmUgZXhlY3V0ZWRcblx0ICogQHBhcmFtIGdyb3VwSWQgQmF0Y2ggZ3JvdXAgZm9yIHRoZSBxdWVyeVxuXHQgKiBAcmV0dXJucyBTaWRlRWZmZWN0cyByZXF1ZXN0IG9uIFNBUFVJNSBjb250ZXh0XG5cdCAqL1xuXHRwdWJsaWMgcmVxdWVzdFNpZGVFZmZlY3RzRm9yTmF2aWdhdGlvblByb3BlcnR5KFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eTogc3RyaW5nLFxuXHRcdGNvbnRleHQ6IENvbnRleHQsXG5cdFx0Z3JvdXBJZD86IHN0cmluZ1xuXHQpOiBQcm9taXNlPHZvaWQgfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBiYXNlRW50aXR5VHlwZSA9IHRoaXMuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KGNvbnRleHQpO1xuXHRcdGlmIChiYXNlRW50aXR5VHlwZSkge1xuXHRcdFx0Y29uc3QgbmF2aWdhdGlvblBhdGggPSBgJHtuYXZpZ2F0aW9uUHJvcGVydHl9L2A7XG5cdFx0XHRjb25zdCBlbnRpdHlTaWRlRWZmZWN0cyA9IHRoaXMuZ2V0T0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhiYXNlRW50aXR5VHlwZSk7XG5cdFx0XHRsZXQgdGFyZ2V0UHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0XHRcdGxldCB0YXJnZXRFbnRpdGllczogU2lkZUVmZmVjdHNFbnRpdHlUeXBlW10gPSBbXTtcblx0XHRcdGxldCBzaWRlRWZmZWN0c1RhcmdldHM6IFNpZGVFZmZlY3RzVGFyZ2V0W10gPSBbXTtcblx0XHRcdE9iamVjdC5rZXlzKGVudGl0eVNpZGVFZmZlY3RzKVxuXHRcdFx0XHQuZmlsdGVyKFxuXHRcdFx0XHRcdC8vIEtlZXAgcmVsZXZhbnQgU2lkZUVmZmVjdHNcblx0XHRcdFx0XHQoYW5ub3RhdGlvbk5hbWUpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzOiBPRGF0YVNpZGVFZmZlY3RzVHlwZSA9IGVudGl0eVNpZGVFZmZlY3RzW2Fubm90YXRpb25OYW1lXTtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdChzaWRlRWZmZWN0cy5zb3VyY2VQcm9wZXJ0aWVzIHx8IFtdKS5zb21lKFxuXHRcdFx0XHRcdFx0XHRcdChwcm9wZXJ0eVBhdGgpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGguc3RhcnRzV2l0aChuYXZpZ2F0aW9uUGF0aCkgJiYgcHJvcGVydHlQYXRoLnJlcGxhY2UobmF2aWdhdGlvblBhdGgsIFwiXCIpLmluZGV4T2YoXCIvXCIpID09PSAtMVxuXHRcdFx0XHRcdFx0XHQpIHx8XG5cdFx0XHRcdFx0XHRcdChzaWRlRWZmZWN0cy5zb3VyY2VFbnRpdGllcyB8fCBbXSkuc29tZShcblx0XHRcdFx0XHRcdFx0XHQobmF2aWdhdGlvbikgPT4gbmF2aWdhdGlvbi4kTmF2aWdhdGlvblByb3BlcnR5UGF0aCA9PT0gbmF2aWdhdGlvblByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpXG5cdFx0XHRcdC5mb3JFYWNoKChzQW5ub3RhdGlvbk5hbWUpID0+IHtcblx0XHRcdFx0XHRjb25zdCBzaWRlRWZmZWN0cyA9IGVudGl0eVNpZGVFZmZlY3RzW3NBbm5vdGF0aW9uTmFtZV07XG5cdFx0XHRcdFx0aWYgKHNpZGVFZmZlY3RzLnRyaWdnZXJBY3Rpb24pIHtcblx0XHRcdFx0XHRcdHRoaXMuZXhlY3V0ZUFjdGlvbihzaWRlRWZmZWN0cy50cmlnZ2VyQWN0aW9uLCBjb250ZXh0LCBncm91cElkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGFyZ2V0UHJvcGVydGllcyA9IHRhcmdldFByb3BlcnRpZXMuY29uY2F0KHNpZGVFZmZlY3RzLnRhcmdldFByb3BlcnRpZXMpO1xuXHRcdFx0XHRcdHRhcmdldEVudGl0aWVzID0gdGFyZ2V0RW50aXRpZXMuY29uY2F0KHNpZGVFZmZlY3RzLnRhcmdldEVudGl0aWVzKTtcblx0XHRcdFx0fSk7XG5cdFx0XHQvLyBSZW1vdmUgZHVwbGljYXRlIHRhcmdldHNcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzVGFyZ2V0RGVmaW5pdGlvbiA9IHRoaXMucmVtb3ZlRHVwbGljYXRlVGFyZ2V0cyh7XG5cdFx0XHRcdHRhcmdldFByb3BlcnRpZXM6IHRhcmdldFByb3BlcnRpZXMsXG5cdFx0XHRcdHRhcmdldEVudGl0aWVzOiB0YXJnZXRFbnRpdGllc1xuXHRcdFx0fSk7XG5cdFx0XHRzaWRlRWZmZWN0c1RhcmdldHMgPSBbLi4uc2lkZUVmZmVjdHNUYXJnZXREZWZpbml0aW9uLnRhcmdldFByb3BlcnRpZXMsIC4uLnNpZGVFZmZlY3RzVGFyZ2V0RGVmaW5pdGlvbi50YXJnZXRFbnRpdGllc107XG5cdFx0XHRpZiAoc2lkZUVmZmVjdHNUYXJnZXRzLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNUYXJnZXRzLCBjb250ZXh0LCBncm91cElkKS5jYXRjaCgoZXJyb3IpID0+XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBTaWRlRWZmZWN0cyAtIEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgU2lkZUVmZmVjdHMgZm9yIE5hdmlnYXRpb24gUHJvcGVydHkgJHtuYXZpZ2F0aW9uUHJvcGVydHl9YCwgZXJyb3IpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBTaWRlRWZmZWN0cyB0aGF0IGNvbWUgZnJvbSBjb250cm9scy5cblx0ICpcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlTmFtZSBFbnRpdHkgdHlwZSBOYW1lXG5cdCAqIEByZXR1cm5zIFNpZGVFZmZlY3RzIGRpY3Rpb25hcnlcblx0ICovXG5cdHB1YmxpYyBnZXRDb250cm9sRW50aXR5U2lkZUVmZmVjdHMoZW50aXR5VHlwZU5hbWU6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIENvbnRyb2xTaWRlRWZmZWN0c1R5cGU+IHtcblx0XHRyZXR1cm4gdGhpcy5zaWRlRWZmZWN0c1JlZ2lzdHJ5LmNvbnRyb2xbZW50aXR5VHlwZU5hbWVdIHx8IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgU2lkZUVmZmVjdHMnIHF1YWxpZmllciBhbmQgb3duZXIgZW50aXR5IHdoZXJlIHRoaXMgZW50aXR5IGlzIHVzZWQgYXMgc291cmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0gZW50aXR5VHlwZU5hbWUgRW50aXR5IHR5cGUgZnVsbHkgcXVhbGlmaWVkIG5hbWVcblx0ICogQHJldHVybnMgQXJyYXkgb2Ygc2lkZUVmZmVjdHMgaW5mb1xuXHQgKi9cblx0cHVibGljIGdldFNpZGVFZmZlY3RXaGVyZUVudGl0eUlzU291cmNlKGVudGl0eVR5cGVOYW1lOiBzdHJpbmcpOiBTaWRlRWZmZWN0SW5mb0ZvclNvdXJjZVtdIHtcblx0XHRyZXR1cm4gdGhpcy5zb3VyY2VzVG9TaWRlRWZmZWN0TWFwcGluZ3MuZW50aXRpZXNbZW50aXR5VHlwZU5hbWVdIHx8IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbW1vbiBtZXRob2QgdG8gZ2V0IHRoZSBmaWVsZCBncm91cElkcyBmb3IgYSBzb3VyY2UgZW50aXR5IGFuZCBhIHNvdXJjZSBwcm9wZXJ0eS5cblx0ICpcblx0ICogQHBhcmFtIHNvdXJjZUVudGl0eVR5cGVcblx0ICogQHBhcmFtIHNvdXJjZVByb3BlcnR5XG5cdCAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiBmaWVsZEdyb3VwSWRzXG5cdCAqL1xuXHRwdWJsaWMgY29tcHV0ZUZpZWxkR3JvdXBJZHMoc291cmNlRW50aXR5VHlwZTogc3RyaW5nLCBzb3VyY2VQcm9wZXJ0eTogc3RyaW5nKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IGVudGl0eUZpZWxkR3JvdXBJZHMgPSB0aGlzLmdldFNpZGVFZmZlY3RXaGVyZUVudGl0eUlzU291cmNlKHNvdXJjZUVudGl0eVR5cGUpLm1hcCgoc2lkZUVmZmVjdEluZm8pID0+XG5cdFx0XHR0aGlzLmdldEZpZWxkR3JvdXBJZEZvclNpZGVFZmZlY3Qoc2lkZUVmZmVjdEluZm8sIHRydWUpXG5cdFx0KTtcblx0XHRyZXR1cm4gZW50aXR5RmllbGRHcm91cElkcy5jb25jYXQoXG5cdFx0XHR0aGlzLmdldFNpZGVFZmZlY3RXaGVyZVByb3BlcnR5SXNTb3VyY2Uoc291cmNlUHJvcGVydHkpLm1hcCgoc2lkZUVmZmVjdEluZm8pID0+XG5cdFx0XHRcdHRoaXMuZ2V0RmllbGRHcm91cElkRm9yU2lkZUVmZmVjdChzaWRlRWZmZWN0SW5mbylcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgU2lkZUVmZmVjdHMnIHF1YWxpZmllciBhbmQgb3duZXIgZW50aXR5IHdoZXJlIHRoaXMgcHJvcGVydHkgaXMgdXNlZCBhcyBzb3VyY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgUHJvcGVydHkgZnVsbHkgcXVhbGlmaWVkIG5hbWVcblx0ICogQHJldHVybnMgQXJyYXkgb2Ygc2lkZUVmZmVjdHMgaW5mb1xuXHQgKi9cblx0cHVibGljIGdldFNpZGVFZmZlY3RXaGVyZVByb3BlcnR5SXNTb3VyY2UocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBTaWRlRWZmZWN0SW5mb0ZvclNvdXJjZVtdIHtcblx0XHRyZXR1cm4gdGhpcy5zb3VyY2VzVG9TaWRlRWZmZWN0TWFwcGluZ3MucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdIHx8IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgdGhlIHRleHQgcHJvcGVydGllcyByZXF1aXJlZCBmb3IgU2lkZUVmZmVjdHNcblx0ICogSWYgYSBwcm9wZXJ0eSBoYXMgYW4gYXNzb2NpYXRlZCB0ZXh0IHRoZW4gdGhpcyB0ZXh0IG5lZWRzIHRvIGJlIGFkZGVkIGFzIHRhcmdldFByb3BlcnRpZXMuXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdHNUYXJnZXRzIFNpZGVFZmZlY3RzIFRhcmdldHNcblx0ICogQHBhcmFtIGVudGl0eVR5cGUgRW50aXR5IHR5cGVcblx0ICogQHJldHVybnMgU2lkZUVmZmVjdHMgZGVmaW5pdGlvbiB3aXRoIGFkZGVkIHRleHQgcHJvcGVydGllc1xuXHQgKi9cblx0cHJpdmF0ZSBhZGRUZXh0UHJvcGVydGllcyhzaWRlRWZmZWN0c1RhcmdldHM6IFNpZGVFZmZlY3RzVGFyZ2V0VHlwZSwgZW50aXR5VHlwZTogRW50aXR5VHlwZSk6IFNpZGVFZmZlY3RzVGFyZ2V0VHlwZSB7XG5cdFx0Y29uc3Qgc2V0T2ZQcm9wZXJ0aWVzID0gbmV3IFNldChzaWRlRWZmZWN0c1RhcmdldHMudGFyZ2V0UHJvcGVydGllcyk7XG5cdFx0Y29uc3Qgc2V0T2ZFbnRpdGllcyA9IG5ldyBTZXQoc2lkZUVmZmVjdHNUYXJnZXRzLnRhcmdldEVudGl0aWVzLm1hcCgodGFyZ2V0KSA9PiB0YXJnZXQuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpKTtcblxuXHRcdC8vIEdlbmVyYXRlIGFsbCBkYXRhTW9kZWxQYXRoIGZvciB0aGUgcHJvcGVydGllcyB0byBhbmFseXplIChjb3ZlciBcIipcIiBhbmQgLyopXG5cdFx0Y29uc3QgcHJvcGVydGllc1RvQW5hbHl6ZSA9IHNpZGVFZmZlY3RzVGFyZ2V0cy50YXJnZXRQcm9wZXJ0aWVzLnJlZHVjZShcblx0XHRcdChkYXRhTW9kZWxQcm9wZXJ0eVBhdGhzOiBEYXRhTW9kZWxPYmplY3RQYXRoW10sIHByb3BlcnR5UGF0aCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZGF0YU1vZGVsUHJvcGVydHlQYXRocy5jb25jYXQodGhpcy5nZXREYXRhTW9kZWxQcm9wZXJ0aWVzRnJvbUFQYXRoKHByb3BlcnR5UGF0aCwgZW50aXR5VHlwZSkpO1xuXHRcdFx0fSxcblx0XHRcdFtdXG5cdFx0KTtcblxuXHRcdC8vIEdlbmVyYXRlIGFsbCBwYXRocyByZWxhdGVkIHRvIHRoZSB0ZXh0IHByb3BlcnRpZXMgYW5kIG5vdCBhbHJlYWR5IGNvdmVyZWQgYnkgdGhlIFNpZGVFZmZlY3RzXG5cdFx0Zm9yIChjb25zdCBkYXRhTW9kZWxQcm9wZXJ0eVBhdGggb2YgcHJvcGVydGllc1RvQW5hbHl6ZSkge1xuXHRcdFx0Y29uc3QgYXNzb2NpYXRlZFRleHRQYXRoID0gZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgoZGF0YU1vZGVsUHJvcGVydHlQYXRoLnRhcmdldE9iamVjdCk7XG5cdFx0XHRpZiAoYXNzb2NpYXRlZFRleHRQYXRoKSB7XG5cdFx0XHRcdGNvbnN0IGRhdGFNb2RlbFRleHRQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGgoZGF0YU1vZGVsUHJvcGVydHlQYXRoLCBhc3NvY2lhdGVkVGV4dFBhdGgpO1xuXHRcdFx0XHRjb25zdCByZWxhdGl2ZU5hdmlnYXRpb24gPSBnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aChkYXRhTW9kZWxUZXh0UGF0aCwgdHJ1ZSk7XG5cdFx0XHRcdGNvbnN0IHRhcmdldFBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKGRhdGFNb2RlbFRleHRQYXRoLCB0cnVlKTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGlzUHJvcGVydHkoZGF0YU1vZGVsVGV4dFBhdGgudGFyZ2V0T2JqZWN0KSAmJlxuXHRcdFx0XHRcdCFzZXRPZlByb3BlcnRpZXMuaGFzKHRhcmdldFBhdGgpICYmIC8vIHRoZSBwcm9wZXJ0eSBpcyBhbHJlYWR5IGxpc3RlZFxuXHRcdFx0XHRcdCFzZXRPZlByb3BlcnRpZXMuaGFzKGAke3JlbGF0aXZlTmF2aWdhdGlvbn0ke2RhdGFNb2RlbFRleHRQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aCA/IFwiL1wiIDogXCJcIn0qYCkgJiYgLy8gdGhlIHByb3BlcnR5IGlzIGFscmVhZHkgbGlzdGVkIHRoYW5rcyB0byB0aGUgXCIqXCJcblx0XHRcdFx0XHQhc2V0T2ZFbnRpdGllcy5oYXMoYCR7cmVsYXRpdmVOYXZpZ2F0aW9ufWApIC8vIHRoZSBwcm9wZXJ0eSBpcyBub3QgcGFydCBvZiBhIFRhcmdldEVudGl0aWVzXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIFRoZSBUZXh0IGFzc29jaWF0aW9uIGlzIGFkZGVkIGFzIFRhcmdldEVudGl0aWVzIGlmXG5cdFx0XHRcdFx0Ly8gIC0gaXQncyBjb250YWluZWQgb24gYSBkaWZmZXJlbnQgZW50aXR5U2V0IHRoYW4gdGhlIFNpZGVFZmZlY3RzXG5cdFx0XHRcdFx0Ly8gIC0gIGFuZCBpdCdzIGNvbnRhaW5lZCBvbiBhIGRpZmZlcmVudCBlbnRpdHlTZXQgdGhhbiB0aGUgc291cmNlZCBwcm9wZXJ0eVxuXHRcdFx0XHRcdC8vIE90aGVyd2lzZSBpdCdzIGFkZGVkIGFzIHRhcmdldFByb3BlcnRpZXNcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRkYXRhTW9kZWxQcm9wZXJ0eVBhdGgudGFyZ2V0RW50aXR5U2V0ICE9PSBkYXRhTW9kZWxUZXh0UGF0aC50YXJnZXRFbnRpdHlTZXQgJiZcblx0XHRcdFx0XHRcdGRhdGFNb2RlbFRleHRQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzICYmXG5cdFx0XHRcdFx0XHRkYXRhTW9kZWxUZXh0UGF0aC50YXJnZXRFbnRpdHlUeXBlXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRzZXRPZkVudGl0aWVzLmFkZChyZWxhdGl2ZU5hdmlnYXRpb24pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZXRPZlByb3BlcnRpZXMuYWRkKHRhcmdldFBhdGgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHR0YXJnZXRQcm9wZXJ0aWVzOiBBcnJheS5mcm9tKHNldE9mUHJvcGVydGllcyksXG5cdFx0XHR0YXJnZXRFbnRpdGllczogQXJyYXkuZnJvbShzZXRPZkVudGl0aWVzKS5tYXAoKG5hdmlnYXRpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIHsgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IG5hdmlnYXRpb24gfTtcblx0XHRcdH0pXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyB0aGUgU2lkZUVmZmVjdHMgdG8gZXhwZWN0ZWQgZm9ybWF0XG5cdCAqICAtIFNldCBUcmlnZ2VyQWN0aW9uIGFzIHN0cmluZ1xuXHQgKiAgLSBDb252ZXJ0cyBTaWRlRWZmZWN0cyB0YXJnZXRzIHRvIGV4cGVjdGVkIGZvcm1hdFxuXHQgKiAgLSBSZW1vdmVzIGJpbmRpbmcgcGFyYW1ldGVyIGZyb20gU2lkZUVmZmVjdHMgdGFyZ2V0cyBwcm9wZXJ0aWVzXG5cdCAqICAtIEFkZHMgdGhlIHRleHQgcHJvcGVydGllc1xuXHQgKiAgLSBSZXBsYWNlcyBUYXJnZXRQcm9wZXJ0aWVzIGhhdmluZyByZWZlcmVuY2UgdG8gU291cmNlIFByb3BlcnRpZXMgZm9yIGEgU2lkZUVmZmVjdHMuXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdHMgU2lkZUVmZmVjdHMgZGVmaW5pdGlvblxuXHQgKiBAcGFyYW0gZW50aXR5VHlwZSBFbnRpdHkgdHlwZVxuXHQgKiBAcGFyYW0gYmluZGluZ1BhcmFtZXRlciBOYW1lIG9mIHRoZSBiaW5kaW5nIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBTaWRlRWZmZWN0cyBkZWZpbml0aW9uXG5cdCAqL1xuXHRwcml2YXRlIGNvbnZlcnRTaWRlRWZmZWN0cyhcblx0XHRzaWRlRWZmZWN0czogQ29tbW9uU2lkZUVmZmVjdHNUeXBlLFxuXHRcdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdFx0YmluZGluZ1BhcmFtZXRlcj86IHN0cmluZ1xuXHQpOiBPRGF0YVNpZGVFZmZlY3RzVHlwZSB7XG5cdFx0Y29uc3QgdHJpZ2dlckFjdGlvbiA9IHNpZGVFZmZlY3RzLlRyaWdnZXJBY3Rpb24gYXMgc3RyaW5nO1xuXHRcdGNvbnN0IG5ld1NpZGVFZmZlY3RzID0gdGhpcy5jb252ZXJ0U2lkZUVmZmVjdHNGb3JtYXQoc2lkZUVmZmVjdHMpO1xuXHRcdGxldCBzaWRlRWZmZWN0c1RhcmdldHMgPSB7IHRhcmdldFByb3BlcnRpZXM6IG5ld1NpZGVFZmZlY3RzLnRhcmdldFByb3BlcnRpZXMsIHRhcmdldEVudGl0aWVzOiBuZXdTaWRlRWZmZWN0cy50YXJnZXRFbnRpdGllcyB9O1xuXHRcdHNpZGVFZmZlY3RzVGFyZ2V0cyA9IHRoaXMucmVtb3ZlQmluZGluZ1BhcmFtZXRlcihzaWRlRWZmZWN0c1RhcmdldHMsIGJpbmRpbmdQYXJhbWV0ZXIpO1xuXHRcdHNpZGVFZmZlY3RzVGFyZ2V0cyA9IHRoaXMuYWRkVGV4dFByb3BlcnRpZXMoc2lkZUVmZmVjdHNUYXJnZXRzLCBlbnRpdHlUeXBlKTtcblx0XHRzaWRlRWZmZWN0c1RhcmdldHMgPSB0aGlzLnJlbW92ZUR1cGxpY2F0ZVRhcmdldHMoc2lkZUVmZmVjdHNUYXJnZXRzKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4ubmV3U2lkZUVmZmVjdHMsXG5cdFx0XHQuLi57IHRhcmdldEVudGl0aWVzOiBzaWRlRWZmZWN0c1RhcmdldHMudGFyZ2V0RW50aXRpZXMsIHRhcmdldFByb3BlcnRpZXM6IHNpZGVFZmZlY3RzVGFyZ2V0cy50YXJnZXRQcm9wZXJ0aWVzLCB0cmlnZ2VyQWN0aW9uIH1cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIHRoZSBTaWRlRWZmZWN0cyB0YXJnZXRzIChUYXJnZXRFbnRpdGllcyBhbmQgVGFyZ2V0UHJvcGVydGllcykgdG8gZXhwZWN0ZWQgZm9ybWF0XG5cdCAqICAtIFRhcmdldFByb3BlcnRpZXMgYXMgYXJyYXkgb2Ygc3RyaW5nXG5cdCAqICAtIFRhcmdldEVudGl0aWVzIGFzIGFycmF5IG9mIG9iamVjdCB3aXRoIHByb3BlcnR5ICROYXZpZ2F0aW9uUHJvcGVydHlQYXRoLlxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHNpZGVFZmZlY3RzIFNpZGVFZmZlY3RzIGRlZmluaXRpb25cblx0ICogQHJldHVybnMgQ29udmVydGVkIFNpZGVFZmZlY3RzXG5cdCAqL1xuXHRwcml2YXRlIGNvbnZlcnRTaWRlRWZmZWN0c0Zvcm1hdChzaWRlRWZmZWN0czogQ29tbW9uU2lkZUVmZmVjdHNUeXBlKTogT0RhdGFTaWRlRWZmZWN0c1R5cGUge1xuXHRcdGNvbnN0IGZvcm1hdFByb3BlcnRpZXMgPSAocHJvcGVydGllcz86IChzdHJpbmcgfCBQcm9wZXJ0eVBhdGgpW10pID0+IHtcblx0XHRcdHJldHVybiBwcm9wZXJ0aWVzXG5cdFx0XHRcdD8gcHJvcGVydGllcy5yZWR1Y2UoKHRhcmdldFByb3BlcnRpZXM6IHN0cmluZ1tdLCB0YXJnZXQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHBhdGggPSAoKHRhcmdldCBhcyBQcm9wZXJ0eVBhdGgpLnR5cGUgJiYgKHRhcmdldCBhcyBQcm9wZXJ0eVBhdGgpLnZhbHVlKSB8fCAodGFyZ2V0IGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0XHRpZiAocGF0aCkge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXRQcm9wZXJ0aWVzLnB1c2gocGF0aCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXG5cdFx0XHRcdFx0XHRcdFx0YFNpZGVFZmZlY3RzIC0gRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBUYXJnZXRQcm9wZXJ0aWVzIGZvciBTaWRlRWZmZWN0cyAke3NpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZX1gXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGFyZ2V0UHJvcGVydGllcztcblx0XHRcdFx0ICB9LCBbXSlcblx0XHRcdFx0OiBwcm9wZXJ0aWVzO1xuXHRcdH07XG5cdFx0Y29uc3QgZm9ybWF0RW50aXRpZXMgPSAoZW50aXRpZXM/OiBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoW10pID0+IHtcblx0XHRcdHJldHVybiBlbnRpdGllc1xuXHRcdFx0XHQ/IGVudGl0aWVzLm1hcCgodGFyZ2V0RW50aXR5KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4geyAkTmF2aWdhdGlvblByb3BlcnR5UGF0aDogdGFyZ2V0RW50aXR5LnZhbHVlIH07XG5cdFx0XHRcdCAgfSlcblx0XHRcdFx0OiBlbnRpdGllcztcblx0XHR9O1xuXHRcdHJldHVybiB7XG5cdFx0XHRmdWxseVF1YWxpZmllZE5hbWU6IHNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdHNvdXJjZVByb3BlcnRpZXM6IGZvcm1hdFByb3BlcnRpZXMoc2lkZUVmZmVjdHMuU291cmNlUHJvcGVydGllcyksXG5cdFx0XHRzb3VyY2VFbnRpdGllczogZm9ybWF0RW50aXRpZXMoc2lkZUVmZmVjdHMuU291cmNlRW50aXRpZXMpLFxuXHRcdFx0dGFyZ2V0UHJvcGVydGllczogZm9ybWF0UHJvcGVydGllcyhzaWRlRWZmZWN0cy5UYXJnZXRQcm9wZXJ0aWVzIGFzIChzdHJpbmcgfCBQcm9wZXJ0eVBhdGgpW10pID8/IFtdLFxuXHRcdFx0dGFyZ2V0RW50aXRpZXM6IGZvcm1hdEVudGl0aWVzKHNpZGVFZmZlY3RzLlRhcmdldEVudGl0aWVzKSA/PyBbXVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBhbGwgZGF0YU1vZGVsT2JqZWN0UGF0aCByZWxhdGVkIHRvIHByb3BlcnRpZXMgbGlzdGVkIGJ5IGEgcGF0aFxuXHQgKlxuXHQgKiBUaGUgcGF0aCBjYW4gYmU6XG5cdCAqICAtIGEgcGF0aCB0YXJnZXRpbmcgYSBwcm9wZXJ0eSBvbiBhIGNvbXBsZXhUeXBlIG9yIGFuIEVudGl0eVR5cGVcblx0ICogIC0gYSBwYXRoIHdpdGggYSBzdGFyIHRhcmdldGluZyBhbGwgcHJvcGVydGllcyBvbiBhIGNvbXBsZXhUeXBlIG9yIGFuIEVudGl0eVR5cGUuXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byBhbmFseXplXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlIEVudGl0eSB0eXBlXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIGRhdGFNb2RlbE9iamVjdFBhdGggcmVwcmVzZW50aW5nIHRoZSBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRwcml2YXRlIGdldERhdGFNb2RlbFByb3BlcnRpZXNGcm9tQVBhdGgocGF0aDogc3RyaW5nLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogRGF0YU1vZGVsT2JqZWN0UGF0aFtdIHtcblx0XHRsZXQgZGF0YU1vZGVsT2JqZWN0UGF0aHM6IERhdGFNb2RlbE9iamVjdFBhdGhbXSA9IFtdO1xuXHRcdGNvbnN0IGNvbnZlcnRlZE1ldGFNb2RlbCA9IHRoaXMuZ2V0Q29udmVydGVkTWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZW50aXR5U2V0ID1cblx0XHRcdGNvbnZlcnRlZE1ldGFNb2RlbC5lbnRpdHlTZXRzLmZpbmQoKHJlbGF0ZWRFbnRpdHlTZXQpID0+IHJlbGF0ZWRFbnRpdHlTZXQuZW50aXR5VHlwZSA9PT0gZW50aXR5VHlwZSkgfHxcblx0XHRcdGNvbnZlcnRlZE1ldGFNb2RlbC5zaW5nbGV0b25zLmZpbmQoKHNpbmdsZXRvbikgPT4gc2luZ2xldG9uLmVudGl0eVR5cGUgPT09IGVudGl0eVR5cGUpO1xuXG5cdFx0aWYgKGVudGl0eVNldCkge1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gdGhpcy5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0ZW50aXR5U2V0Q29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgLyR7ZW50aXR5U2V0Lm5hbWV9YCk7XG5cdFx0XHRpZiAoZW50aXR5U2V0Q29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBkYXRhTW9kZWxFbnRpdHlTZXQgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoZW50aXR5U2V0Q29udGV4dCk7XG5cdFx0XHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChkYXRhTW9kZWxFbnRpdHlTZXQsIHBhdGgucmVwbGFjZShcIipcIiwgXCJcIikgfHwgXCIvXCIpLCAvLyBcIipcIiBpcyByZXBsYWNlZCBieSBcIi9cIiB0byB0YXJnZXQgdGhlIGN1cnJlbnQgRW50aXR5VHlwZVxuXHRcdFx0XHRcdHRhcmdldE9iamVjdCA9IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdFx0XHRpZiAoaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpKSB7XG5cdFx0XHRcdFx0aWYgKGlzQ29tcGxleFR5cGUodGFyZ2V0T2JqZWN0LnRhcmdldFR5cGUpKSB7XG5cdFx0XHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRocyA9IGRhdGFNb2RlbE9iamVjdFBhdGhzLmNvbmNhdChcblx0XHRcdFx0XHRcdFx0dGFyZ2V0T2JqZWN0LnRhcmdldFR5cGUucHJvcGVydGllcy5tYXAoKHByb3BlcnR5KSA9PiBlbmhhbmNlRGF0YU1vZGVsUGF0aChkYXRhTW9kZWxPYmplY3RQYXRoLCBwcm9wZXJ0eS5uYW1lKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGhzLnB1c2goZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKGlzRW50aXR5VHlwZSh0YXJnZXRPYmplY3QpKSB7XG5cdFx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aHMgPSBkYXRhTW9kZWxPYmplY3RQYXRocy5jb25jYXQoXG5cdFx0XHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5tYXAoKGVudGl0eVByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBlbmhhbmNlRGF0YU1vZGVsUGF0aChkYXRhTW9kZWxPYmplY3RQYXRoLCBlbnRpdHlQcm9wZXJ0eS5uYW1lKTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbnRpdHlTZXRDb250ZXh0LmRlc3Ryb3koKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGRhdGFNb2RlbE9iamVjdFBhdGhzLmZpbHRlcigoZGF0YU1vZGVsT2JqZWN0UGF0aCkgPT4gZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIE9kYXRhIG1ldGFtb2RlbC5cblx0ICpcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEByZXR1cm5zIFRoZSBPRGF0YSBtZXRhbW9kZWxcblx0ICovXG5cdHByaXZhdGUgZ2V0TWV0YU1vZGVsKCk6IE9EYXRhTWV0YU1vZGVsIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29udGV4dC5zY29wZU9iamVjdDtcblx0XHRyZXR1cm4gb0NvbXBvbmVudC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIFNpZGVFZmZlY3RzIHJlbGF0ZWQgdG8gYW4gZW50aXR5IHR5cGUgb3IgYWN0aW9uIHRoYXQgY29tZSBmcm9tIGFuIE9EYXRhIFNlcnZpY2Vcblx0ICogSW50ZXJuYWwgcm91dGluZSB0byBnZXQsIGZyb20gY29udmVydGVkIG9EYXRhIG1ldGFNb2RlbCwgU2lkZUVmZmVjdHMgcmVsYXRlZCB0byBhIHNwZWNpZmljIGVudGl0eSB0eXBlIG9yIGFjdGlvblxuXHQgKiBhbmQgdG8gY29udmVydCB0aGVzZSBTaWRlRWZmZWN0cyB3aXRoIGV4cGVjdGVkIGZvcm1hdC5cblx0ICpcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSBzb3VyY2UgRW50aXR5IHR5cGUgb3IgYWN0aW9uXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIFNpZGVFZmZlY3RzXG5cdCAqL1xuXHRwcml2YXRlIGdldFNpZGVFZmZlY3RzRnJvbVNvdXJjZShzb3VyY2U6IEVudGl0eVR5cGUgfCBBY3Rpb24pOiBPRGF0YVNpZGVFZmZlY3RzVHlwZVtdIHtcblx0XHRsZXQgYmluZGluZ0FsaWFzID0gXCJcIjtcblx0XHRjb25zdCBpc1NvdXJjZUVudGl0eVR5cGUgPSBpc0VudGl0eVR5cGUoc291cmNlKTtcblx0XHRjb25zdCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlIHwgdW5kZWZpbmVkID0gaXNTb3VyY2VFbnRpdHlUeXBlID8gc291cmNlIDogc291cmNlLnNvdXJjZUVudGl0eVR5cGU7XG5cdFx0Y29uc3QgY29tbW9uQW5ub3RhdGlvbiA9IHNvdXJjZS5hbm5vdGF0aW9ucz8uQ29tbW9uIGFzIHVuZGVmaW5lZCB8IHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgQ29tbW9uQW5ub3RhdGlvblR5cGVzPjtcblx0XHRpZiAoZW50aXR5VHlwZSAmJiBjb21tb25Bbm5vdGF0aW9uKSB7XG5cdFx0XHRpZiAoIWlzU291cmNlRW50aXR5VHlwZSkge1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyID0gc291cmNlLnBhcmFtZXRlcnM/LmZpbmQoKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyLnR5cGUgPT09IGVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lKTtcblx0XHRcdFx0YmluZGluZ0FsaWFzID0gYmluZGluZ1BhcmFtZXRlcj8uZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KFwiL1wiKVsxXSA/PyBcIlwiO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0U2lkZUVmZmVjdHNBbm5vdGF0aW9uRnJvbVNvdXJjZShzb3VyY2UpLm1hcCgoc2lkZUVmZmVjdEFubm8pID0+XG5cdFx0XHRcdHRoaXMuY29udmVydFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RBbm5vLCBlbnRpdHlUeXBlLCBiaW5kaW5nQWxpYXMpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gW107XG5cdH1cblx0LyoqXG5cdCAqIEdldHMgdGhlIFNpZGVFZmZlY3RzIHJlbGF0ZWQgdG8gYW4gZW50aXR5IHR5cGUgb3IgYWN0aW9uIHRoYXQgY29tZSBmcm9tIGFuIE9EYXRhIFNlcnZpY2Vcblx0ICogSW50ZXJuYWwgcm91dGluZSB0byBnZXQsIGZyb20gY29udmVydGVkIG9EYXRhIG1ldGFNb2RlbCwgU2lkZUVmZmVjdHMgcmVsYXRlZCB0byBhIHNwZWNpZmljIGVudGl0eSB0eXBlIG9yIGFjdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHNvdXJjZSBFbnRpdHkgdHlwZSBvciBhY3Rpb25cblx0ICogQHJldHVybnMgQXJyYXkgb2YgU2lkZUVmZmVjdHNcblx0ICovXG5cdHByaXZhdGUgZ2V0U2lkZUVmZmVjdHNBbm5vdGF0aW9uRnJvbVNvdXJjZShzb3VyY2U6IEVudGl0eVR5cGUgfCBBY3Rpb24pOiBDb21tb25TaWRlRWZmZWN0VHlwZVdpdGhRdWFsaWZpZXJbXSB7XG5cdFx0Y29uc3Qgc2lkZUVmZmVjdHM6IENvbW1vblNpZGVFZmZlY3RzVHlwZVtdID0gW107XG5cdFx0Y29uc3QgY29tbW9uQW5ub3RhdGlvbiA9IHNvdXJjZS5hbm5vdGF0aW9ucz8uQ29tbW9uIGFzIHVuZGVmaW5lZCB8IHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgQ29tbW9uU2lkZUVmZmVjdFR5cGVXaXRoUXVhbGlmaWVyPjtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBjb21tb25Bbm5vdGF0aW9uKSB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uID0gY29tbW9uQW5ub3RhdGlvbltrZXldO1xuXHRcdFx0aWYgKHRoaXMuaXNTaWRlRWZmZWN0c0Fubm90YXRpb24oYW5ub3RhdGlvbikpIHtcblx0XHRcdFx0c2lkZUVmZmVjdHMucHVzaChhbm5vdGF0aW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNpZGVFZmZlY3RzO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgYW5ub3RhdGlvbiBpcyBhIFNpZGVFZmZlY3RzIGFubm90YXRpb24uXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvbiBBbm5vdGF0aW9uXG5cdCAqIEByZXR1cm5zIEJvb2xlYW5cblx0ICovXG5cdHByaXZhdGUgaXNTaWRlRWZmZWN0c0Fubm90YXRpb24oYW5ub3RhdGlvbjogdW5rbm93bik6IGFubm90YXRpb24gaXMgQ29tbW9uU2lkZUVmZmVjdHNUeXBlIHtcblx0XHRyZXR1cm4gKGFubm90YXRpb24gYXMgQ29tbW9uU2lkZUVmZmVjdHNUeXBlKT8uJFR5cGUgPT09IENvbW1vbkFubm90YXRpb25UeXBlcy5TaWRlRWZmZWN0c1R5cGU7XG5cdH1cblxuXHQvKipcblx0ICogTG9ncyB0aGUgU2lkZUVmZmVjdHMgcmVxdWVzdC5cblx0ICpcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSBwYXRoRXhwcmVzc2lvbnMgU2lkZUVmZmVjdHMgdGFyZ2V0c1xuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0XG5cdCAqL1xuXHRwcml2YXRlIGxvZ1JlcXVlc3QocGF0aEV4cHJlc3Npb25zOiBTaWRlRWZmZWN0c1RhcmdldFtdLCBjb250ZXh0OiBDb250ZXh0KSB7XG5cdFx0Y29uc3QgdGFyZ2V0UGF0aHMgPSBwYXRoRXhwcmVzc2lvbnMucmVkdWNlKGZ1bmN0aW9uIChwYXRocywgdGFyZ2V0KSB7XG5cdFx0XHRyZXR1cm4gYCR7cGF0aHN9XFxuXFx0XFx0JHsodGFyZ2V0IGFzIFNpZGVFZmZlY3RzRW50aXR5VHlwZSkuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggfHwgdGFyZ2V0IHx8IFwiXCJ9YDtcblx0XHR9LCBcIlwiKTtcblx0XHRMb2cuZGVidWcoYFNpZGVFZmZlY3RzIC0gUmVxdWVzdDpcXG5cXHRDb250ZXh0IHBhdGggOiAke2NvbnRleHQuZ2V0UGF0aCgpfVxcblxcdFByb3BlcnR5IHBhdGhzIDoke3RhcmdldFBhdGhzfWApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgdGhlIG5hbWUgb2YgdGhlIGJpbmRpbmcgcGFyYW1ldGVyIG9uIHRoZSBTaWRlRWZmZWN0cyB0YXJnZXRzLlxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHNpZGVFZmZlY3RzVGFyZ2V0cyBTaWRlRWZmZWN0cyBUYXJnZXRzXG5cdCAqIEBwYXJhbSBiaW5kaW5nUGFyYW1ldGVyTmFtZSBOYW1lIG9mIGJpbmRpbmcgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFNpZGVFZmZlY3RzIGRlZmluaXRpb25cblx0ICovXG5cdHByaXZhdGUgcmVtb3ZlQmluZGluZ1BhcmFtZXRlcihzaWRlRWZmZWN0c1RhcmdldHM6IFNpZGVFZmZlY3RzVGFyZ2V0VHlwZSwgYmluZGluZ1BhcmFtZXRlck5hbWU/OiBzdHJpbmcpOiBTaWRlRWZmZWN0c1RhcmdldFR5cGUge1xuXHRcdGlmIChiaW5kaW5nUGFyYW1ldGVyTmFtZSkge1xuXHRcdFx0Y29uc3QgcmVwbGFjZUJpbmRpbmdQYXJhbWV0ZXIgPSBmdW5jdGlvbiAodmFsdWU6IHN0cmluZykge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKGBeJHtiaW5kaW5nUGFyYW1ldGVyTmFtZX0vP2ApLCBcIlwiKTtcblx0XHRcdH07XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0YXJnZXRQcm9wZXJ0aWVzOiBzaWRlRWZmZWN0c1RhcmdldHMudGFyZ2V0UHJvcGVydGllcy5tYXAoKHRhcmdldFByb3BlcnR5KSA9PiByZXBsYWNlQmluZGluZ1BhcmFtZXRlcih0YXJnZXRQcm9wZXJ0eSkpLFxuXHRcdFx0XHR0YXJnZXRFbnRpdGllczogc2lkZUVmZmVjdHNUYXJnZXRzLnRhcmdldEVudGl0aWVzLm1hcCgodGFyZ2V0RW50aXR5KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHJlcGxhY2VCaW5kaW5nUGFyYW1ldGVyKHRhcmdldEVudGl0eS4kTmF2aWdhdGlvblByb3BlcnR5UGF0aCkgfTtcblx0XHRcdFx0fSlcblx0XHRcdH07XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHR0YXJnZXRQcm9wZXJ0aWVzOiBzaWRlRWZmZWN0c1RhcmdldHMudGFyZ2V0UHJvcGVydGllcyxcblx0XHRcdHRhcmdldEVudGl0aWVzOiBzaWRlRWZmZWN0c1RhcmdldHMudGFyZ2V0RW50aXRpZXNcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSBkdXBsaWNhdGVzIGluIFNpZGVFZmZlY3RzIHRhcmdldHMuXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdHNUYXJnZXRzIFNpZGVFZmZlY3RzIFRhcmdldHNcblx0ICogQHJldHVybnMgU2lkZUVmZmVjdHMgdGFyZ2V0cyB3aXRob3V0IGR1cGxpY2F0ZXNcblx0ICovXG5cdHByaXZhdGUgcmVtb3ZlRHVwbGljYXRlVGFyZ2V0cyhzaWRlRWZmZWN0c1RhcmdldHM6IFNpZGVFZmZlY3RzVGFyZ2V0VHlwZSk6IFNpZGVFZmZlY3RzVGFyZ2V0VHlwZSB7XG5cdFx0Y29uc3QgdGFyZ2V0RW50aXRpZXNQYXRocyA9IHNpZGVFZmZlY3RzVGFyZ2V0cy50YXJnZXRFbnRpdGllcy5tYXAoKHRhcmdldEVudGl0eSkgPT4gdGFyZ2V0RW50aXR5LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0XHRjb25zdCB1bmlxdWVUYXJnZXRlZEVudGl0aWVzUGF0aCA9IG5ldyBTZXQ8c3RyaW5nPih0YXJnZXRFbnRpdGllc1BhdGhzKTtcblx0XHRjb25zdCB1bmlxdWVUYXJnZXRQcm9wZXJ0aWVzID0gbmV3IFNldDxzdHJpbmc+KHNpZGVFZmZlY3RzVGFyZ2V0cy50YXJnZXRQcm9wZXJ0aWVzKTtcblxuXHRcdGNvbnN0IHVuaXF1ZVRhcmdldGVkRW50aXRpZXMgPSBBcnJheS5mcm9tKHVuaXF1ZVRhcmdldGVkRW50aXRpZXNQYXRoKS5tYXAoKGVudGl0eVBhdGgpID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdCROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBlbnRpdHlQYXRoXG5cdFx0XHR9O1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHsgdGFyZ2V0UHJvcGVydGllczogQXJyYXkuZnJvbSh1bmlxdWVUYXJnZXRQcm9wZXJ0aWVzKSwgdGFyZ2V0RW50aXRpZXM6IHVuaXF1ZVRhcmdldGVkRW50aXRpZXMgfTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIFNpZGVFZmZlY3RzIGFjdGlvbiB0eXBlIHRoYXQgY29tZSBmcm9tIGFuIE9EYXRhIFNlcnZpY2Vcblx0ICogSW50ZXJuYWwgcm91dGluZSB0byBnZXQsIGZyb20gY29udmVydGVkIG9EYXRhIG1ldGFNb2RlbCwgU2lkZUVmZmVjdHMgb24gYWN0aW9uc1xuXHQgKiByZWxhdGVkIHRvIGEgc3BlY2lmaWMgZW50aXR5IHR5cGUgYW5kIHRvIGNvbnZlcnQgdGhlc2UgU2lkZUVmZmVjdHMgd2l0aFxuXHQgKiBleHBlY3RlZCBmb3JtYXQuXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gZW50aXR5VHlwZSBFbnRpdHkgdHlwZVxuXHQgKiBAcmV0dXJucyBFbnRpdHkgdHlwZSBTaWRlRWZmZWN0cyBkaWN0aW9uYXJ5XG5cdCAqL1xuXHRwcml2YXRlIHJldHJpZXZlT0RhdGFBY3Rpb25zU2lkZUVmZmVjdHMoZW50aXR5VHlwZTogRW50aXR5VHlwZSk6IFJlY29yZDxzdHJpbmcsIEFjdGlvblNpZGVFZmZlY3RzVHlwZT4ge1xuXHRcdGNvbnN0IHNpZGVFZmZlY3RzOiBSZWNvcmQ8c3RyaW5nLCBBY3Rpb25TaWRlRWZmZWN0c1R5cGU+ID0ge307XG5cdFx0Y29uc3QgYWN0aW9ucyA9IGVudGl0eVR5cGUuYWN0aW9ucztcblx0XHRpZiAoYWN0aW9ucykge1xuXHRcdFx0T2JqZWN0LmtleXMoYWN0aW9ucykuZm9yRWFjaCgoYWN0aW9uTmFtZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBhY3Rpb24gPSBlbnRpdHlUeXBlLmFjdGlvbnNbYWN0aW9uTmFtZV07XG5cdFx0XHRcdGNvbnN0IHRyaWdnZXJBY3Rpb25zID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdFx0XHRcdGxldCB0YXJnZXRQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0XHRsZXQgdGFyZ2V0RW50aXRpZXM6IFNpZGVFZmZlY3RzRW50aXR5VHlwZVtdID0gW107XG5cblx0XHRcdFx0dGhpcy5nZXRTaWRlRWZmZWN0c0Zyb21Tb3VyY2UoYWN0aW9uKS5mb3JFYWNoKChvRGF0YVNpZGVFZmZlY3QpID0+IHtcblx0XHRcdFx0XHRjb25zdCB0cmlnZ2VyQWN0aW9uID0gb0RhdGFTaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb247XG5cdFx0XHRcdFx0dGFyZ2V0UHJvcGVydGllcyA9IHRhcmdldFByb3BlcnRpZXMuY29uY2F0KG9EYXRhU2lkZUVmZmVjdC50YXJnZXRQcm9wZXJ0aWVzKTtcblx0XHRcdFx0XHR0YXJnZXRFbnRpdGllcyA9IHRhcmdldEVudGl0aWVzLmNvbmNhdChvRGF0YVNpZGVFZmZlY3QudGFyZ2V0RW50aXRpZXMpO1xuXHRcdFx0XHRcdGlmICh0cmlnZ2VyQWN0aW9uKSB7XG5cdFx0XHRcdFx0XHR0cmlnZ2VyQWN0aW9ucy5hZGQodHJpZ2dlckFjdGlvbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNUYXJnZXRzID0gdGhpcy5yZW1vdmVEdXBsaWNhdGVUYXJnZXRzKHsgdGFyZ2V0UHJvcGVydGllcywgdGFyZ2V0RW50aXRpZXMgfSk7XG5cdFx0XHRcdHNpZGVFZmZlY3RzW2FjdGlvbk5hbWVdID0ge1xuXHRcdFx0XHRcdHBhdGhFeHByZXNzaW9uczogWy4uLnNpZGVFZmZlY3RzVGFyZ2V0cy50YXJnZXRQcm9wZXJ0aWVzLCAuLi5zaWRlRWZmZWN0c1RhcmdldHMudGFyZ2V0RW50aXRpZXNdLFxuXHRcdFx0XHRcdHRyaWdnZXJBY3Rpb25zOiBBcnJheS5mcm9tKHRyaWdnZXJBY3Rpb25zKVxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBzaWRlRWZmZWN0cztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIFNpZGVFZmZlY3RzIGVudGl0eSB0eXBlIHRoYXQgY29tZSBmcm9tIGFuIE9EYXRhIFNlcnZpY2Vcblx0ICogSW50ZXJuYWwgcm91dGluZSB0byBnZXQsIGZyb20gY29udmVydGVkIG9EYXRhIG1ldGFNb2RlbCwgU2lkZUVmZmVjdHNcblx0ICogcmVsYXRlZCB0byBhIHNwZWNpZmljIGVudGl0eSB0eXBlIGFuZCB0byBjb252ZXJ0IHRoZXNlIFNpZGVFZmZlY3RzIHdpdGhcblx0ICogZXhwZWN0ZWQgZm9ybWF0LlxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIGVudGl0eVR5cGUgRW50aXR5IHR5cGVcblx0ICogQHJldHVybnMgRW50aXR5IHR5cGUgU2lkZUVmZmVjdHMgZGljdGlvbmFyeVxuXHQgKi9cblx0cHJpdmF0ZSByZXRyaWV2ZU9EYXRhRW50aXR5U2lkZUVmZmVjdHMoZW50aXR5VHlwZTogRW50aXR5VHlwZSk6IFJlY29yZDxzdHJpbmcsIE9EYXRhU2lkZUVmZmVjdHNUeXBlPiB7XG5cdFx0Y29uc3QgZW50aXR5U2lkZUVmZmVjdHM6IFJlY29yZDxzdHJpbmcsIE9EYXRhU2lkZUVmZmVjdHNUeXBlPiA9IHt9O1xuXHRcdHRoaXMuZ2V0U2lkZUVmZmVjdHNGcm9tU291cmNlKGVudGl0eVR5cGUpLmZvckVhY2goKHNpZGVFZmZlY3RzKSA9PiB7XG5cdFx0XHRlbnRpdHlTaWRlRWZmZWN0c1tzaWRlRWZmZWN0cy5mdWxseVF1YWxpZmllZE5hbWVdID0gc2lkZUVmZmVjdHM7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGVudGl0eVNpZGVFZmZlY3RzO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmluZXMgYSBtYXAgZm9yIHRoZSBTb3VyY2VzIG9mIHNpZGVFZmZlY3Qgb24gdGhlIGVudGl0eSB0byB0cmFjayB3aGVyZSB0aG9zZSBzb3VyY2VzIGFyZSB1c2VkIGluIFNpZGVFZmZlY3RzIGFubm90YXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHlUeXBlIHdlIGxvb2sgZm9yIHNpZGUgRWZmZWN0cyBhbm5vdGF0aW9uXG5cdCAqIEBwYXJhbSBzaWRlRWZmZWN0c1NvdXJjZXMgVGhlIG1hcHBpbmcgb2JqZWN0IGluIGNvbnN0cnVjdGlvblxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdHNTb3VyY2VzLmVudGl0aWVzXG5cdCAqIEBwYXJhbSBzaWRlRWZmZWN0c1NvdXJjZXMucHJvcGVydGllc1xuXHQgKi9cblx0cHJpdmF0ZSBtYXBTaWRlRWZmZWN0U291cmNlcyhcblx0XHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRcdHNpZGVFZmZlY3RzU291cmNlczogeyBlbnRpdGllczogUmVjb3JkPHN0cmluZywgU2lkZUVmZmVjdEluZm9Gb3JTb3VyY2VbXT47IHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIFNpZGVFZmZlY3RJbmZvRm9yU291cmNlW10+IH1cblx0KTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBzaWRlRWZmZWN0RGVmaW5pdGlvbiBvZiB0aGlzLmdldFNpZGVFZmZlY3RzQW5ub3RhdGlvbkZyb21Tb3VyY2UoZW50aXR5VHlwZSkpIHtcblx0XHRcdGZvciAoY29uc3Qgc291cmNlRW50aXR5IG9mIHNpZGVFZmZlY3REZWZpbml0aW9uLlNvdXJjZUVudGl0aWVzID8/IFtdKSB7XG5cdFx0XHRcdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBzb3VyY2VFbnRpdHkudmFsdWUgPyBzb3VyY2VFbnRpdHkuJHRhcmdldD8udGFyZ2V0VHlwZSA6IGVudGl0eVR5cGU7XG5cdFx0XHRcdGlmICh0YXJnZXRFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0aWYgKCFzaWRlRWZmZWN0c1NvdXJjZXMuZW50aXRpZXNbdGFyZ2V0RW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWVdKSB7XG5cdFx0XHRcdFx0XHRzaWRlRWZmZWN0c1NvdXJjZXMuZW50aXRpZXNbdGFyZ2V0RW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWVdID0gW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNpZGVFZmZlY3RzU291cmNlcy5lbnRpdGllc1t0YXJnZXRFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV0ucHVzaCh7XG5cdFx0XHRcdFx0XHRlbnRpdHk6IGVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRcdFx0cXVhbGlmaWVyOiBzaWRlRWZmZWN0RGVmaW5pdGlvbi5xdWFsaWZpZXJcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaGFzVW5pcXVlU291cmNlUHJvcGVydHkgPSBzaWRlRWZmZWN0RGVmaW5pdGlvbi5Tb3VyY2VQcm9wZXJ0aWVzPy5sZW5ndGggPT09IDE7XG5cdFx0XHRmb3IgKGNvbnN0IHNvdXJjZVByb3BlcnR5IG9mIHNpZGVFZmZlY3REZWZpbml0aW9uLlNvdXJjZVByb3BlcnRpZXMgPz8gW10pIHtcblx0XHRcdFx0aWYgKCFzaWRlRWZmZWN0c1NvdXJjZXMucHJvcGVydGllc1tzb3VyY2VQcm9wZXJ0eS4kdGFyZ2V0Py5mdWxseVF1YWxpZmllZE5hbWVdKSB7XG5cdFx0XHRcdFx0c2lkZUVmZmVjdHNTb3VyY2VzLnByb3BlcnRpZXNbc291cmNlUHJvcGVydHkuJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lXSA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNpZGVFZmZlY3RzU291cmNlcy5wcm9wZXJ0aWVzW3NvdXJjZVByb3BlcnR5LiR0YXJnZXQ/LmZ1bGx5UXVhbGlmaWVkTmFtZV0ucHVzaCh7XG5cdFx0XHRcdFx0ZW50aXR5OiBlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0XHRxdWFsaWZpZXI6IHNpZGVFZmZlY3REZWZpbml0aW9uLnF1YWxpZmllcixcblx0XHRcdFx0XHRoYXNVbmlxdWVTb3VyY2VQcm9wZXJ0eVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBmaWVsZEdyb3VwSWQgYmFzZWQgb24gdGhlIHN0b3JlZCBpbmZvcm1hdGlvbiBvbiB0aCBzaWRlIGVmZmVjdC5cblx0ICpcblx0ICogQHBhcmFtIHNpZGVFZmZlY3RJbmZvXG5cdCAqIEBwYXJhbSBpc0ltbWVkaWF0ZVxuXHQgKiBAcmV0dXJucyBBIHN0cmluZyBmb3IgdGhlIGZpZWxkR3JvdXBJZC5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmllbGRHcm91cElkRm9yU2lkZUVmZmVjdChzaWRlRWZmZWN0SW5mbzogU2lkZUVmZmVjdEluZm9Gb3JTb3VyY2UsIGlzSW1tZWRpYXRlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHNpZGVFZmZlY3RXaXRoUXVhbGlmaWVyID0gc2lkZUVmZmVjdEluZm8ucXVhbGlmaWVyXG5cdFx0XHQ/IGAke3NpZGVFZmZlY3RJbmZvLmVudGl0eX0jJHtzaWRlRWZmZWN0SW5mby5xdWFsaWZpZXJ9YFxuXHRcdFx0OiBzaWRlRWZmZWN0SW5mby5lbnRpdHk7XG5cdFx0cmV0dXJuIGlzSW1tZWRpYXRlIHx8IHNpZGVFZmZlY3RJbmZvLmhhc1VuaXF1ZVNvdXJjZVByb3BlcnR5ID09PSB0cnVlXG5cdFx0XHQ/IGAke3NpZGVFZmZlY3RXaXRoUXVhbGlmaWVyfSQkSW1tZWRpYXRlUmVxdWVzdGBcblx0XHRcdDogc2lkZUVmZmVjdFdpdGhRdWFsaWZpZXI7XG5cdH1cblxuXHRnZXRJbnRlcmZhY2UoKTogU2lkZUVmZmVjdHNTZXJ2aWNlIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5jbGFzcyBTaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5IGV4dGVuZHMgU2VydmljZUZhY3Rvcnk8U2lkZUVmZmVjdHNTZXR0aW5ncz4ge1xuXHRjcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PFNpZGVFZmZlY3RzU2V0dGluZ3M+KTogUHJvbWlzZTxTaWRlRWZmZWN0c1NlcnZpY2U+IHtcblx0XHRjb25zdCBTaWRlRWZmZWN0c1NlcnZpY2VTZXJ2aWNlID0gbmV3IFNpZGVFZmZlY3RzU2VydmljZShvU2VydmljZUNvbnRleHQpO1xuXHRcdHJldHVybiBTaWRlRWZmZWN0c1NlcnZpY2VTZXJ2aWNlLmluaXRQcm9taXNlO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNpZGVFZmZlY3RzU2VydmljZUZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7TUE2RWFBLGtCQUFrQjtJQUFBO0lBQUE7TUFBQTtJQUFBO0lBQUE7SUFBQTtJQWM5QjtJQUFBLE9BQ0FDLElBQUksR0FBSixnQkFBTztNQUNOLElBQUksQ0FBQ0MsbUJBQW1CLEdBQUc7UUFDMUJDLEtBQUssRUFBRTtVQUNOQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1VBQ1pDLE9BQU8sRUFBRSxDQUFDO1FBQ1gsQ0FBQztRQUNEQyxPQUFPLEVBQUUsQ0FBQztNQUNYLENBQUM7TUFDRCxJQUFJLENBQUNDLGFBQWEsR0FBRyxLQUFLO01BQzFCLElBQUksQ0FBQ0MsV0FBVyxHQUFHQyxPQUFPLENBQUNDLE9BQU8s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
|
|
741
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTaWRlRWZmZWN0c1NlcnZpY2UiLCJpbml0Iiwic2lkZUVmZmVjdHNSZWdpc3RyeSIsIm9EYXRhIiwiZW50aXRpZXMiLCJhY3Rpb25zIiwiY29udHJvbCIsImlzSW5pdGlhbGl6ZWQiLCJpbml0UHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiYWRkQ29udHJvbFNpZGVFZmZlY3RzIiwiZW50aXR5VHlwZSIsInNpZGVFZmZlY3QiLCJzb3VyY2VDb250cm9sSWQiLCJjb250cm9sU2lkZUVmZmVjdCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImVudGl0eUNvbnRyb2xTaWRlRWZmZWN0cyIsImV4ZWN1dGVBY3Rpb24iLCJ0cmlnZ2VyQWN0aW9uIiwiY29udGV4dCIsImdyb3VwSWQiLCJhY3Rpb24iLCJnZXRNb2RlbCIsImJpbmRDb250ZXh0IiwiZXhlY3V0ZSIsImdldEJpbmRpbmciLCJnZXRVcGRhdGVHcm91cElkIiwiZ2V0Q29udmVydGVkTWV0YU1vZGVsIiwiY29udmVydFR5cGVzIiwiZ2V0TWV0YU1vZGVsIiwiY2FwYWJpbGl0aWVzIiwiZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0IiwibWV0YU1vZGVsIiwibWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsImdldFBhdGgiLCJnZXRPYmplY3QiLCJnZXRPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwiZW50aXR5VHlwZU5hbWUiLCJnZXRHbG9iYWxPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwiZW50aXR5U2lkZUVmZmVjdHMiLCJnbG9iYWxTaWRlRWZmZWN0cyIsImtleSIsInNpZGVFZmZlY3RzIiwic291cmNlRW50aXRpZXMiLCJzb3VyY2VQcm9wZXJ0aWVzIiwicHVzaCIsImdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMiLCJhY3Rpb25OYW1lIiwidW5kZWZpbmVkIiwiaW5pdGlhbGl6ZVNpZGVFZmZlY3RzIiwic2lkZUVmZmVjdFNvdXJjZXMiLCJwcm9wZXJ0aWVzIiwiY29udmVydGVkTWV0YU1vZGVsIiwiZW50aXR5VHlwZXMiLCJmb3JFYWNoIiwicmV0cmlldmVPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwicmV0cmlldmVPRGF0YUFjdGlvbnNTaWRlRWZmZWN0cyIsIm1hcFNpZGVFZmZlY3RTb3VyY2VzIiwic291cmNlc1RvU2lkZUVmZmVjdE1hcHBpbmdzIiwicmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzIiwiY29udHJvbElkIiwiT2JqZWN0Iiwia2V5cyIsInNFbnRpdHlUeXBlIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwicGF0aEV4cHJlc3Npb25zIiwibG9nUmVxdWVzdCIsInJlcXVlc3RTaWRlRWZmZWN0c0Zvck9EYXRhQWN0aW9uIiwicHJvbWlzZXMiLCJ0cmlnZ2VyQWN0aW9ucyIsImxlbmd0aCIsIm1hcCIsImFsbCIsInJlcXVlc3RTaWRlRWZmZWN0c0Zvck5hdmlnYXRpb25Qcm9wZXJ0eSIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsImJhc2VFbnRpdHlUeXBlIiwibmF2aWdhdGlvblBhdGgiLCJ0YXJnZXRQcm9wZXJ0aWVzIiwidGFyZ2V0RW50aXRpZXMiLCJzaWRlRWZmZWN0c1RhcmdldHMiLCJmaWx0ZXIiLCJhbm5vdGF0aW9uTmFtZSIsInNvbWUiLCJuYXZpZ2F0aW9uIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJwcm9wZXJ0eVBhdGgiLCJzdGFydHNXaXRoIiwicmVwbGFjZSIsImluZGV4T2YiLCJzQW5ub3RhdGlvbk5hbWUiLCJjb25jYXQiLCJzaWRlRWZmZWN0c1RhcmdldERlZmluaXRpb24iLCJyZW1vdmVEdXBsaWNhdGVUYXJnZXRzIiwiY2F0Y2giLCJlcnJvciIsIkxvZyIsImdldENvbnRyb2xFbnRpdHlTaWRlRWZmZWN0cyIsImdldFNpZGVFZmZlY3RXaGVyZUVudGl0eUlzU291cmNlIiwiY29tcHV0ZUZpZWxkR3JvdXBJZHMiLCJzb3VyY2VFbnRpdHlUeXBlIiwic291cmNlUHJvcGVydHkiLCJlbnRpdHlGaWVsZEdyb3VwSWRzIiwic2lkZUVmZmVjdEluZm8iLCJnZXRGaWVsZEdyb3VwSWRGb3JTaWRlRWZmZWN0IiwiZ2V0U2lkZUVmZmVjdFdoZXJlUHJvcGVydHlJc1NvdXJjZSIsInByb3BlcnR5TmFtZSIsImFkZFRleHRQcm9wZXJ0aWVzIiwic2V0T2ZQcm9wZXJ0aWVzIiwiU2V0Iiwic2V0T2ZFbnRpdGllcyIsInRhcmdldCIsInByb3BlcnRpZXNUb0FuYWx5emUiLCJyZWR1Y2UiLCJkYXRhTW9kZWxQcm9wZXJ0eVBhdGhzIiwiZ2V0RGF0YU1vZGVsUHJvcGVydGllc0Zyb21BUGF0aCIsImRhdGFNb2RlbFByb3BlcnR5UGF0aCIsImFzc29jaWF0ZWRUZXh0UGF0aCIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIiwidGFyZ2V0T2JqZWN0IiwiZGF0YU1vZGVsVGV4dFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInJlbGF0aXZlTmF2aWdhdGlvbiIsImdldFRhcmdldE5hdmlnYXRpb25QYXRoIiwidGFyZ2V0UGF0aCIsImdldFRhcmdldE9iamVjdFBhdGgiLCJpc1Byb3BlcnR5IiwiaGFzIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJ0YXJnZXRFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiYWRkIiwiQXJyYXkiLCJmcm9tIiwiY29udmVydFNpZGVFZmZlY3RzIiwiYmluZGluZ1BhcmFtZXRlciIsIlRyaWdnZXJBY3Rpb24iLCJuZXdTaWRlRWZmZWN0cyIsImNvbnZlcnRTaWRlRWZmZWN0c0Zvcm1hdCIsInJlbW92ZUJpbmRpbmdQYXJhbWV0ZXIiLCJmb3JtYXRQcm9wZXJ0aWVzIiwicGF0aCIsInR5cGUiLCJ2YWx1ZSIsImZvcm1hdEVudGl0aWVzIiwidGFyZ2V0RW50aXR5IiwiU291cmNlUHJvcGVydGllcyIsIlNvdXJjZUVudGl0aWVzIiwiVGFyZ2V0UHJvcGVydGllcyIsIlRhcmdldEVudGl0aWVzIiwiZGF0YU1vZGVsT2JqZWN0UGF0aHMiLCJlbnRpdHlTZXQiLCJlbnRpdHlTZXRzIiwiZmluZCIsInJlbGF0ZWRFbnRpdHlTZXQiLCJzaW5nbGV0b25zIiwic2luZ2xldG9uIiwiZW50aXR5U2V0Q29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwibmFtZSIsImRhdGFNb2RlbEVudGl0eVNldCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJpc0NvbXBsZXhUeXBlIiwidGFyZ2V0VHlwZSIsInByb3BlcnR5IiwiaXNFbnRpdHlUeXBlIiwiZW50aXR5UHJvcGVydGllcyIsImVudGl0eVByb3BlcnR5IiwiZGVzdHJveSIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsIm9Db21wb25lbnQiLCJzY29wZU9iamVjdCIsImdldFNpZGVFZmZlY3RzRnJvbVNvdXJjZSIsInNvdXJjZSIsImJpbmRpbmdBbGlhcyIsImlzU291cmNlRW50aXR5VHlwZSIsImNvbW1vbkFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsInBhcmFtZXRlcnMiLCJwYXJhbWV0ZXIiLCJzcGxpdCIsImdldFNpZGVFZmZlY3RzQW5ub3RhdGlvbkZyb21Tb3VyY2UiLCJzaWRlRWZmZWN0QW5ubyIsImFubm90YXRpb24iLCJpc1NpZGVFZmZlY3RzQW5ub3RhdGlvbiIsIiRUeXBlIiwidGFyZ2V0UGF0aHMiLCJwYXRocyIsImRlYnVnIiwiYmluZGluZ1BhcmFtZXRlck5hbWUiLCJyZXBsYWNlQmluZGluZ1BhcmFtZXRlciIsIlJlZ0V4cCIsInRhcmdldFByb3BlcnR5IiwidGFyZ2V0RW50aXRpZXNQYXRocyIsInVuaXF1ZVRhcmdldGVkRW50aXRpZXNQYXRoIiwidW5pcXVlVGFyZ2V0UHJvcGVydGllcyIsInVuaXF1ZVRhcmdldGVkRW50aXRpZXMiLCJlbnRpdHlQYXRoIiwib0RhdGFTaWRlRWZmZWN0Iiwic2lkZUVmZmVjdHNTb3VyY2VzIiwic2lkZUVmZmVjdERlZmluaXRpb24iLCJzb3VyY2VFbnRpdHkiLCIkdGFyZ2V0IiwiZW50aXR5IiwicXVhbGlmaWVyIiwiaGFzVW5pcXVlU291cmNlUHJvcGVydHkiLCJpc0ltbWVkaWF0ZSIsInNpZGVFZmZlY3RXaXRoUXVhbGlmaWVyIiwiZ2V0SW50ZXJmYWNlIiwiU2VydmljZSIsIlNpZGVFZmZlY3RzU2VydmljZUZhY3RvcnkiLCJjcmVhdGVJbnN0YW5jZSIsIm9TZXJ2aWNlQ29udGV4dCIsIlNpZGVFZmZlY3RzU2VydmljZVNlcnZpY2UiLCJTZXJ2aWNlRmFjdG9yeSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiwgQ29udmVydGVkTWV0YWRhdGEsIEVudGl0eVR5cGUsIE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTaWRlRWZmZWN0c1R5cGUgYXMgQ29tbW9uU2lkZUVmZmVjdHNUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcywgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgaXNDb21wbGV4VHlwZSwgaXNFbnRpdHlUeXBlLCBpc1Byb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IFNlcnZpY2UgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB7IERhdGFNb2RlbE9iamVjdFBhdGgsIGVuaGFuY2VEYXRhTW9kZWxQYXRoLCBnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCwgZ2V0VGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCIuLi90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcblxudHlwZSBTaWRlRWZmZWN0c1NldHRpbmdzID0ge307XG5cbmV4cG9ydCB0eXBlIFNpZGVFZmZlY3RzRW50aXR5VHlwZSA9IHtcblx0JE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBTaWRlRWZmZWN0c1RhcmdldCA9IFNpZGVFZmZlY3RzRW50aXR5VHlwZSB8IHN0cmluZztcblxuZXhwb3J0IHR5cGUgU2lkZUVmZmVjdHNUYXJnZXRUeXBlID0ge1xuXHR0YXJnZXRQcm9wZXJ0aWVzOiBzdHJpbmdbXTtcblx0dGFyZ2V0RW50aXRpZXM6IFNpZGVFZmZlY3RzRW50aXR5VHlwZVtdO1xufTtcblxudHlwZSBCYXNlU2lkZUVmZmVjdHNUeXBlID0ge1xuXHRzb3VyY2VQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdHNvdXJjZUVudGl0aWVzPzogU2lkZUVmZmVjdHNFbnRpdHlUeXBlW107XG5cdGZ1bGx5UXVhbGlmaWVkTmFtZTogc3RyaW5nO1xufSAmIFNpZGVFZmZlY3RzVGFyZ2V0VHlwZTtcblxuZXhwb3J0IHR5cGUgT0RhdGFTaWRlRWZmZWN0c1R5cGUgPSBCYXNlU2lkZUVmZmVjdHNUeXBlICYge1xuXHR0cmlnZ2VyQWN0aW9uPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQWN0aW9uU2lkZUVmZmVjdHNUeXBlID0ge1xuXHRwYXRoRXhwcmVzc2lvbnM6IFNpZGVFZmZlY3RzVGFyZ2V0W107XG5cdHRyaWdnZXJBY3Rpb25zPzogc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBDb250cm9sU2lkZUVmZmVjdHNUeXBlID0gUGFydGlhbDxCYXNlU2lkZUVmZmVjdHNUeXBlPiAmIHtcblx0ZnVsbHlRdWFsaWZpZWROYW1lOiBzdHJpbmc7XG5cdHNvdXJjZVByb3BlcnRpZXM6IHN0cmluZ1tdO1xuXHRzb3VyY2VDb250cm9sSWQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNpZGVFZmZlY3RzVHlwZSA9IENvbnRyb2xTaWRlRWZmZWN0c1R5cGUgfCBPRGF0YVNpZGVFZmZlY3RzVHlwZTtcblxuLy9UT0RPIGZpeCB0aGlzIHR5cGUgaW4gdGhlIHV4IHZvY2FidWxhcmllc1xudHlwZSBDb21tb25TaWRlRWZmZWN0VHlwZVdpdGhRdWFsaWZpZXIgPSBDb21tb25TaWRlRWZmZWN0c1R5cGUgJiB7IHF1YWxpZmllcj86IHN0cmluZyB9O1xuXG5leHBvcnQgdHlwZSBPRGF0YVNpZGVFZmZlY3RzRW50aXR5RGljdGlvbmFyeSA9IFJlY29yZDxzdHJpbmcsIE9EYXRhU2lkZUVmZmVjdHNUeXBlPjtcbmV4cG9ydCB0eXBlIE9EYXRhU2lkZUVmZmVjdHNBY3Rpb25EaWN0aW9uYXJ5ID0gUmVjb3JkPHN0cmluZywgQWN0aW9uU2lkZUVmZmVjdHNUeXBlPjtcbmV4cG9ydCB0eXBlIENvbnRyb2xTaWRlRWZmZWN0c0VudGl0eURpY3Rpb25hcnkgPSBSZWNvcmQ8c3RyaW5nLCBDb250cm9sU2lkZUVmZmVjdHNUeXBlPjtcblxuZXhwb3J0IHR5cGUgU2lkZUVmZmVjdEluZm9Gb3JTb3VyY2UgPSB7IGVudGl0eTogc3RyaW5nOyBxdWFsaWZpZXI/OiBzdHJpbmc7IGhhc1VuaXF1ZVNvdXJjZVByb3BlcnR5PzogYm9vbGVhbiB9O1xuXG50eXBlIFNpZGVFZmZlY3RzT3JpZ2luUmVnaXN0cnkgPSB7XG5cdG9EYXRhOiB7XG5cdFx0ZW50aXRpZXM6IHtcblx0XHRcdFtlbnRpdHk6IHN0cmluZ106IFJlY29yZDxzdHJpbmcsIE9EYXRhU2lkZUVmZmVjdHNUeXBlPjtcblx0XHR9O1xuXHRcdGFjdGlvbnM6IHtcblx0XHRcdFtlbnRpdHk6IHN0cmluZ106IFJlY29yZDxzdHJpbmcsIEFjdGlvblNpZGVFZmZlY3RzVHlwZT47XG5cdFx0fTtcblx0fTtcblx0Y29udHJvbDoge1xuXHRcdFtlbnRpdHk6IHN0cmluZ106IFJlY29yZDxzdHJpbmcsIENvbnRyb2xTaWRlRWZmZWN0c1R5cGU+O1xuXHR9O1xufTtcblxuZXhwb3J0IGNsYXNzIFNpZGVFZmZlY3RzU2VydmljZSBleHRlbmRzIFNlcnZpY2U8U2lkZUVmZmVjdHNTZXR0aW5ncz4ge1xuXHRpbml0UHJvbWlzZSE6IFByb21pc2U8U2lkZUVmZmVjdHNTZXJ2aWNlPjtcblxuXHRwcml2YXRlIHNpZGVFZmZlY3RzUmVnaXN0cnkhOiBTaWRlRWZmZWN0c09yaWdpblJlZ2lzdHJ5O1xuXG5cdHByaXZhdGUgY2FwYWJpbGl0aWVzITogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBpc0luaXRpYWxpemVkITogYm9vbGVhbjtcblxuXHRwcml2YXRlIHNvdXJjZXNUb1NpZGVFZmZlY3RNYXBwaW5ncyE6IHtcblx0XHRlbnRpdGllczogUmVjb3JkPHN0cmluZywgU2lkZUVmZmVjdEluZm9Gb3JTb3VyY2VbXT47XG5cdFx0cHJvcGVydGllczogUmVjb3JkPHN0cmluZywgU2lkZUVmZmVjdEluZm9Gb3JTb3VyY2VbXT47XG5cdH07XG5cblx0Ly8gITogbWVhbnMgdGhhdCB3ZSBrbm93IGl0IHdpbGwgYmUgYXNzaWduZWQgYmVmb3JlIHVzYWdlXG5cdGluaXQoKSB7XG5cdFx0dGhpcy5zaWRlRWZmZWN0c1JlZ2lzdHJ5ID0ge1xuXHRcdFx0b0RhdGE6IHtcblx0XHRcdFx0ZW50aXRpZXM6IHt9LFxuXHRcdFx0XHRhY3Rpb25zOiB7fVxuXHRcdFx0fSxcblx0XHRcdGNvbnRyb2w6IHt9XG5cdFx0fTtcblx0XHR0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBTaWRlRWZmZWN0cyBjb250cm9sXG5cdCAqIFNpZGVFZmZlY3RzIGRlZmluaXRpb24gaXMgYWRkZWQgYnkgYSBjb250cm9sIHRvIGtlZXAgZGF0YSB1cCB0byBkYXRlXG5cdCAqIFRoZXNlIFNpZGVFZmZlY3RzIGdldCBsaW1pdGVkIHNjb3BlIGNvbXBhcmVkIHdpdGggU2lkZUVmZmVjdHMgY29taW5nIGZyb20gYW4gT0RhdGEgc2VydmljZTpcblx0ICogLSBPbmx5IG9uZSBTaWRlRWZmZWN0cyBkZWZpbml0aW9uIGNhbiBiZSBkZWZpbmVkIGZvciB0aGUgY29tYmluYXRpb24gZW50aXR5IHR5cGUgLSBjb250cm9sIElkXG5cdCAqIC0gT25seSBTaWRlRWZmZWN0cyBzb3VyY2UgcHJvcGVydGllcyBhcmUgcmVjb2duaXplZCBhbmQgdXNlZCB0byB0cmlnZ2VyIFNpZGVFZmZlY3RzXG5cdCAqXG5cdCAqIEVuc3VyZSB0aGUgc291cmNlQ29udHJvbElkIG1hdGNoZXMgdGhlIGFzc29jaWF0ZWQgU0FQVUk1IGNvbnRyb2wgSUQuXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gZW50aXR5VHlwZSBOYW1lIG9mIHRoZSBlbnRpdHkgdHlwZVxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdCBTaWRlRWZmZWN0cyBkZWZpbml0aW9uXG5cdCAqL1xuXHRwdWJsaWMgYWRkQ29udHJvbFNpZGVFZmZlY3RzKGVudGl0eVR5cGU6IHN0cmluZywgc2lkZUVmZmVjdDogT21pdDxDb250cm9sU2lkZUVmZmVjdHNUeXBlLCBcImZ1bGx5UXVhbGlmaWVkTmFtZVwiPik6IHZvaWQge1xuXHRcdGlmIChzaWRlRWZmZWN0LnNvdXJjZUNvbnRyb2xJZCkge1xuXHRcdFx0Y29uc3QgY29udHJvbFNpZGVFZmZlY3Q6IENvbnRyb2xTaWRlRWZmZWN0c1R5cGUgPSB7XG5cdFx0XHRcdC4uLnNpZGVFZmZlY3QsXG5cdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7ZW50aXR5VHlwZX0vU2lkZUVmZmVjdHNGb3JDb250cm9sLyR7c2lkZUVmZmVjdC5zb3VyY2VDb250cm9sSWR9YFxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGVudGl0eUNvbnRyb2xTaWRlRWZmZWN0cyA9IHRoaXMuc2lkZUVmZmVjdHNSZWdpc3RyeS5jb250cm9sW2VudGl0eVR5cGVdIHx8IHt9O1xuXHRcdFx0ZW50aXR5Q29udHJvbFNpZGVFZmZlY3RzW2NvbnRyb2xTaWRlRWZmZWN0LnNvdXJjZUNvbnRyb2xJZF0gPSBjb250cm9sU2lkZUVmZmVjdDtcblx0XHRcdHRoaXMuc2lkZUVmZmVjdHNSZWdpc3RyeS5jb250cm9sW2VudGl0eVR5cGVdID0gZW50aXR5Q29udHJvbFNpZGVFZmZlY3RzO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyBTaWRlRWZmZWN0cyBhY3Rpb24uXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gdHJpZ2dlckFjdGlvbiBOYW1lIG9mIHRoZSBhY3Rpb25cblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dFxuXHQgKiBAcGFyYW0gZ3JvdXBJZCBUaGUgZ3JvdXAgSUQgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3Rcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2l0aG91dCBkYXRhIG9yIHdpdGggYSByZXR1cm4gdmFsdWUgY29udGV4dCB3aGVuIHRoZSBhY3Rpb24gY2FsbCBzdWNjZWVkZWRcblx0ICovXG5cdHB1YmxpYyBleGVjdXRlQWN0aW9uKHRyaWdnZXJBY3Rpb246IHN0cmluZywgY29udGV4dDogQ29udGV4dCwgZ3JvdXBJZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGFjdGlvbiA9IGNvbnRleHQuZ2V0TW9kZWwoKS5iaW5kQ29udGV4dChgJHt0cmlnZ2VyQWN0aW9ufSguLi4pYCwgY29udGV4dCk7XG5cdFx0cmV0dXJuIGFjdGlvbi5leGVjdXRlKGdyb3VwSWQgfHwgY29udGV4dC5nZXRCaW5kaW5nKCkuZ2V0VXBkYXRlR3JvdXBJZCgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGNvbnZlcnRlZCBPRGF0YSBtZXRhTW9kZWwuXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcmV0dXJucyBDb252ZXJ0ZWQgT0RhdGEgbWV0YU1vZGVsXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Q29udmVydGVkTWV0YU1vZGVsKCk6IENvbnZlcnRlZE1ldGFkYXRhIHtcblx0XHRyZXR1cm4gY29udmVydFR5cGVzKHRoaXMuZ2V0TWV0YU1vZGVsKCksIHRoaXMuY2FwYWJpbGl0aWVzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBlbnRpdHkgdHlwZSBvZiBhIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcblx0ICogQHJldHVybnMgRW50aXR5IFR5cGVcblx0ICovXG5cdHB1YmxpYyBnZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dDogQ29udGV4dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0bWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgoY29udGV4dC5nZXRQYXRoKCkpLFxuXHRcdFx0ZW50aXR5VHlwZSA9IG1ldGFNb2RlbC5nZXRPYmplY3QobWV0YVBhdGgpW1wiJFR5cGVcIl07XG5cdFx0cmV0dXJuIGVudGl0eVR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgU2lkZUVmZmVjdHMgdGhhdCBjb21lIGZyb20gYW4gT0RhdGEgc2VydmljZS5cblx0ICpcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlTmFtZSBOYW1lIG9mIHRoZSBlbnRpdHkgdHlwZVxuXHQgKiBAcmV0dXJucyBTaWRlRWZmZWN0cyBkaWN0aW9uYXJ5XG5cdCAqL1xuXHRwdWJsaWMgZ2V0T0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlTmFtZTogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgT0RhdGFTaWRlRWZmZWN0c1R5cGU+IHtcblx0XHRyZXR1cm4gdGhpcy5zaWRlRWZmZWN0c1JlZ2lzdHJ5Lm9EYXRhLmVudGl0aWVzW2VudGl0eVR5cGVOYW1lXSB8fCB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBnbG9iYWwgU2lkZUVmZmVjdHMgdGhhdCBjb21lIGZyb20gYW4gT0RhdGEgc2VydmljZS5cblx0ICpcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlTmFtZSBOYW1lIG9mIHRoZSBlbnRpdHkgdHlwZVxuXHQgKiBAcmV0dXJucyBHbG9iYWwgU2lkZUVmZmVjdHNcblx0ICovXG5cdHB1YmxpYyBnZXRHbG9iYWxPRGF0YUVudGl0eVNpZGVFZmZlY3RzKGVudGl0eVR5cGVOYW1lOiBzdHJpbmcpOiBPRGF0YVNpZGVFZmZlY3RzVHlwZVtdIHtcblx0XHRjb25zdCBlbnRpdHlTaWRlRWZmZWN0cyA9IHRoaXMuZ2V0T0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlTmFtZSk7XG5cdFx0Y29uc3QgZ2xvYmFsU2lkZUVmZmVjdHM6IE9EYXRhU2lkZUVmZmVjdHNUeXBlW10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBlbnRpdHlTaWRlRWZmZWN0cykge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHMgPSBlbnRpdHlTaWRlRWZmZWN0c1trZXldO1xuXHRcdFx0aWYgKCFzaWRlRWZmZWN0cy5zb3VyY2VFbnRpdGllcyAmJiAhc2lkZUVmZmVjdHMuc291cmNlUHJvcGVydGllcykge1xuXHRcdFx0XHRnbG9iYWxTaWRlRWZmZWN0cy5wdXNoKHNpZGVFZmZlY3RzKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGdsb2JhbFNpZGVFZmZlY3RzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIFNpZGVFZmZlY3RzIHRoYXQgY29tZSBmcm9tIGFuIE9EYXRhIHNlcnZpY2UuXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gYWN0aW9uTmFtZSBOYW1lIG9mIHRoZSBhY3Rpb25cblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dFxuXHQgKiBAcmV0dXJucyBTaWRlRWZmZWN0cyBkZWZpbml0aW9uXG5cdCAqL1xuXHRwdWJsaWMgZ2V0T0RhdGFBY3Rpb25TaWRlRWZmZWN0cyhhY3Rpb25OYW1lOiBzdHJpbmcsIGNvbnRleHQ/OiBDb250ZXh0KTogQWN0aW9uU2lkZUVmZmVjdHNUeXBlIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoY29udGV4dCkge1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IHRoaXMuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KGNvbnRleHQpO1xuXHRcdFx0aWYgKGVudGl0eVR5cGUpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuc2lkZUVmZmVjdHNSZWdpc3RyeS5vRGF0YS5hY3Rpb25zW2VudGl0eVR5cGVdPy5bYWN0aW9uTmFtZV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBkaWN0aW9uYXJ5IGZvciB0aGUgU2lkZUVmZmVjdHMuXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gY2FwYWJpbGl0aWVzIFRoZSBjdXJyZW50IGNhcGFiaWxpdGllc1xuXHQgKi9cblx0cHVibGljIGluaXRpYWxpemVTaWRlRWZmZWN0cyhjYXBhYmlsaXRpZXM/OiBFbnZpcm9ubWVudENhcGFiaWxpdGllcyk6IHZvaWQge1xuXHRcdHRoaXMuY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzO1xuXHRcdGlmICghdGhpcy5pc0luaXRpYWxpemVkKSB7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0U291cmNlczoge1xuXHRcdFx0XHRlbnRpdGllczogUmVjb3JkPHN0cmluZywgU2lkZUVmZmVjdEluZm9Gb3JTb3VyY2VbXT47XG5cdFx0XHRcdHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIFNpZGVFZmZlY3RJbmZvRm9yU291cmNlW10+O1xuXHRcdFx0fSA9IHtcblx0XHRcdFx0ZW50aXRpZXM6IHt9LFxuXHRcdFx0XHRwcm9wZXJ0aWVzOiB7fVxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGNvbnZlcnRlZE1ldGFNb2RlbCA9IHRoaXMuZ2V0Q29udmVydGVkTWV0YU1vZGVsKCk7XG5cdFx0XHRjb252ZXJ0ZWRNZXRhTW9kZWwuZW50aXR5VHlwZXMuZm9yRWFjaCgoZW50aXR5VHlwZTogRW50aXR5VHlwZSkgPT4ge1xuXHRcdFx0XHR0aGlzLnNpZGVFZmZlY3RzUmVnaXN0cnkub0RhdGEuZW50aXRpZXNbZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWVdID0gdGhpcy5yZXRyaWV2ZU9EYXRhRW50aXR5U2lkZUVmZmVjdHMoZW50aXR5VHlwZSk7XG5cdFx0XHRcdHRoaXMuc2lkZUVmZmVjdHNSZWdpc3RyeS5vRGF0YS5hY3Rpb25zW2VudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lXSA9IHRoaXMucmV0cmlldmVPRGF0YUFjdGlvbnNTaWRlRWZmZWN0cyhlbnRpdHlUeXBlKTsgLy8gb25seSBib3VuZCBhY3Rpb25zIGFyZSBhbmFseXplZCBzaW5jZSB1bmJvdW5kIG9uZXMgZG9uJ3QgZ2V0IFNpZGVFZmZlY3RzXG5cdFx0XHRcdHRoaXMubWFwU2lkZUVmZmVjdFNvdXJjZXMoZW50aXR5VHlwZSwgc2lkZUVmZmVjdFNvdXJjZXMpO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnNvdXJjZXNUb1NpZGVFZmZlY3RNYXBwaW5ncyA9IHNpZGVFZmZlY3RTb3VyY2VzO1xuXHRcdFx0dGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhbGwgU2lkZUVmZmVjdHMgcmVsYXRlZCB0byBhIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gY29udHJvbElkIENvbnRyb2wgSWRcblx0ICovXG5cdHB1YmxpYyByZW1vdmVDb250cm9sU2lkZUVmZmVjdHMoY29udHJvbElkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRPYmplY3Qua2V5cyh0aGlzLnNpZGVFZmZlY3RzUmVnaXN0cnkuY29udHJvbCkuZm9yRWFjaCgoc0VudGl0eVR5cGUpID0+IHtcblx0XHRcdGlmICh0aGlzLnNpZGVFZmZlY3RzUmVnaXN0cnkuY29udHJvbFtzRW50aXR5VHlwZV1bY29udHJvbElkXSkge1xuXHRcdFx0XHRkZWxldGUgdGhpcy5zaWRlRWZmZWN0c1JlZ2lzdHJ5LmNvbnRyb2xbc0VudGl0eVR5cGVdW2NvbnRyb2xJZF07XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIFNpZGVFZmZlY3RzIG9uIGEgc3BlY2lmaWMgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIHBhdGhFeHByZXNzaW9ucyBUYXJnZXRzIG9mIFNpZGVFZmZlY3RzIHRvIGJlIGV4ZWN1dGVkXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgd2hlcmUgU2lkZUVmZmVjdHMgbmVlZCB0byBiZSBleGVjdXRlZFxuXHQgKiBAcGFyYW0gZ3JvdXBJZCBUaGUgZ3JvdXAgSUQgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3Rcblx0ICogQHJldHVybnMgUHJvbWlzZSBvbiBTaWRlRWZmZWN0cyByZXF1ZXN0XG5cdCAqL1xuXHRwdWJsaWMgcmVxdWVzdFNpZGVFZmZlY3RzKHBhdGhFeHByZXNzaW9uczogU2lkZUVmZmVjdHNUYXJnZXRbXSwgY29udGV4dDogQ29udGV4dCwgZ3JvdXBJZD86IHN0cmluZyk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0dGhpcy5sb2dSZXF1ZXN0KHBhdGhFeHByZXNzaW9ucywgY29udGV4dCk7XG5cdFx0cmV0dXJuIGNvbnRleHQucmVxdWVzdFNpZGVFZmZlY3RzKHBhdGhFeHByZXNzaW9ucyBhcyBvYmplY3RbXSwgZ3JvdXBJZCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIFNpZGVFZmZlY3RzIGZvciBhbiBPRGF0YSBhY3Rpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBzaWRlRWZmZWN0cyBTaWRlRWZmZWN0cyBkZWZpbml0aW9uXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgd2hlcmUgU2lkZUVmZmVjdHMgbmVlZCB0byBiZSBleGVjdXRlZFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIG9uIFNpZGVFZmZlY3RzIHJlcXVlc3RzIGFuZCBhY3Rpb24gZXhlY3V0aW9uXG5cdCAqL1xuXHRwdWJsaWMgcmVxdWVzdFNpZGVFZmZlY3RzRm9yT0RhdGFBY3Rpb24oc2lkZUVmZmVjdHM6IEFjdGlvblNpZGVFZmZlY3RzVHlwZSwgY29udGV4dDogQ29udGV4dCk6IFByb21pc2U8KHZvaWQgfCB1bmRlZmluZWQpW10+IHtcblx0XHRsZXQgcHJvbWlzZXM6IFByb21pc2U8dm9pZCB8IHVuZGVmaW5lZD5bXTtcblxuXHRcdGlmIChzaWRlRWZmZWN0cy50cmlnZ2VyQWN0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRwcm9taXNlcyA9IHNpZGVFZmZlY3RzLnRyaWdnZXJBY3Rpb25zLm1hcCgoYWN0aW9uTmFtZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQWN0aW9uKGFjdGlvbk5hbWUsIGNvbnRleHQpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb21pc2VzID0gW107XG5cdFx0fVxuXG5cdFx0aWYgKHNpZGVFZmZlY3RzLnBhdGhFeHByZXNzaW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRwcm9taXNlcy5wdXNoKHRoaXMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzLnBhdGhFeHByZXNzaW9ucywgY29udGV4dCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcm9taXNlcy5sZW5ndGggPyBQcm9taXNlLmFsbChwcm9taXNlcykgOiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIHRoZSBTaWRlRWZmZWN0cyBmb3IgYSBuYXZpZ2F0aW9uIHByb3BlcnR5IG9uIGEgc3BlY2lmaWMgY29udGV4dC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uUHJvcGVydHkgTmF2aWdhdGlvbiBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHdoZXJlIFNpZGVFZmZlY3RzIG5lZWQgdG8gYmUgZXhlY3V0ZWRcblx0ICogQHBhcmFtIGdyb3VwSWQgQmF0Y2ggZ3JvdXAgZm9yIHRoZSBxdWVyeVxuXHQgKiBAcmV0dXJucyBTaWRlRWZmZWN0cyByZXF1ZXN0IG9uIFNBUFVJNSBjb250ZXh0XG5cdCAqL1xuXHRwdWJsaWMgcmVxdWVzdFNpZGVFZmZlY3RzRm9yTmF2aWdhdGlvblByb3BlcnR5KFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eTogc3RyaW5nLFxuXHRcdGNvbnRleHQ6IENvbnRleHQsXG5cdFx0Z3JvdXBJZD86IHN0cmluZ1xuXHQpOiBQcm9taXNlPHZvaWQgfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBiYXNlRW50aXR5VHlwZSA9IHRoaXMuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KGNvbnRleHQpO1xuXHRcdGlmIChiYXNlRW50aXR5VHlwZSkge1xuXHRcdFx0Y29uc3QgbmF2aWdhdGlvblBhdGggPSBgJHtuYXZpZ2F0aW9uUHJvcGVydHl9L2A7XG5cdFx0XHRjb25zdCBlbnRpdHlTaWRlRWZmZWN0cyA9IHRoaXMuZ2V0T0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhiYXNlRW50aXR5VHlwZSk7XG5cdFx0XHRsZXQgdGFyZ2V0UHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0XHRcdGxldCB0YXJnZXRFbnRpdGllczogU2lkZUVmZmVjdHNFbnRpdHlUeXBlW10gPSBbXTtcblx0XHRcdGxldCBzaWRlRWZmZWN0c1RhcmdldHM6IFNpZGVFZmZlY3RzVGFyZ2V0W10gPSBbXTtcblx0XHRcdE9iamVjdC5rZXlzKGVudGl0eVNpZGVFZmZlY3RzKVxuXHRcdFx0XHQuZmlsdGVyKFxuXHRcdFx0XHRcdC8vIEtlZXAgcmVsZXZhbnQgU2lkZUVmZmVjdHNcblx0XHRcdFx0XHQvLyAxLiBTb3VyY2VFbnRpdGllcyBtYXRjaCBPUlxuXHRcdFx0XHRcdC8vIDIuIE9ubHkgMSBTb3VyY2VQcm9wZXJ0aWVzIGFuZCBtYXRjaFxuXHRcdFx0XHRcdChhbm5vdGF0aW9uTmFtZSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHM6IE9EYXRhU2lkZUVmZmVjdHNUeXBlID0gZW50aXR5U2lkZUVmZmVjdHNbYW5ub3RhdGlvbk5hbWVdO1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0KHNpZGVFZmZlY3RzLnNvdXJjZUVudGl0aWVzIHx8IFtdKS5zb21lKFxuXHRcdFx0XHRcdFx0XHRcdChuYXZpZ2F0aW9uKSA9PiBuYXZpZ2F0aW9uLiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoID09PSBuYXZpZ2F0aW9uUHJvcGVydHlcblx0XHRcdFx0XHRcdFx0KSB8fFxuXHRcdFx0XHRcdFx0XHQoc2lkZUVmZmVjdHMuc291cmNlUHJvcGVydGllcz8ubGVuZ3RoID09PSAxICYmXG5cdFx0XHRcdFx0XHRcdFx0c2lkZUVmZmVjdHMuc291cmNlUHJvcGVydGllcy5zb21lKFxuXHRcdFx0XHRcdFx0XHRcdFx0KHByb3BlcnR5UGF0aCkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoLnN0YXJ0c1dpdGgobmF2aWdhdGlvblBhdGgpICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aC5yZXBsYWNlKG5hdmlnYXRpb25QYXRoLCBcIlwiKS5pbmRleE9mKFwiL1wiKSA9PT0gLTFcblx0XHRcdFx0XHRcdFx0XHQpKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdClcblx0XHRcdFx0LmZvckVhY2goKHNBbm5vdGF0aW9uTmFtZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzID0gZW50aXR5U2lkZUVmZmVjdHNbc0Fubm90YXRpb25OYW1lXTtcblx0XHRcdFx0XHRpZiAoc2lkZUVmZmVjdHMudHJpZ2dlckFjdGlvbikge1xuXHRcdFx0XHRcdFx0dGhpcy5leGVjdXRlQWN0aW9uKHNpZGVFZmZlY3RzLnRyaWdnZXJBY3Rpb24sIGNvbnRleHQsIGdyb3VwSWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0YXJnZXRQcm9wZXJ0aWVzID0gdGFyZ2V0UHJvcGVydGllcy5jb25jYXQoc2lkZUVmZmVjdHMudGFyZ2V0UHJvcGVydGllcyk7XG5cdFx0XHRcdFx0dGFyZ2V0RW50aXRpZXMgPSB0YXJnZXRFbnRpdGllcy5jb25jYXQoc2lkZUVmZmVjdHMudGFyZ2V0RW50aXRpZXMpO1xuXHRcdFx0XHR9KTtcblx0XHRcdC8vIFJlbW92ZSBkdXBsaWNhdGUgdGFyZ2V0c1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNUYXJnZXREZWZpbml0aW9uID0gdGhpcy5yZW1vdmVEdXBsaWNhdGVUYXJnZXRzKHtcblx0XHRcdFx0dGFyZ2V0UHJvcGVydGllczogdGFyZ2V0UHJvcGVydGllcyxcblx0XHRcdFx0dGFyZ2V0RW50aXRpZXM6IHRhcmdldEVudGl0aWVzXG5cdFx0XHR9KTtcblx0XHRcdHNpZGVFZmZlY3RzVGFyZ2V0cyA9IFsuLi5zaWRlRWZmZWN0c1RhcmdldERlZmluaXRpb24udGFyZ2V0UHJvcGVydGllcywgLi4uc2lkZUVmZmVjdHNUYXJnZXREZWZpbml0aW9uLnRhcmdldEVudGl0aWVzXTtcblx0XHRcdGlmIChzaWRlRWZmZWN0c1RhcmdldHMubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlcXVlc3RTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c1RhcmdldHMsIGNvbnRleHQsIGdyb3VwSWQpLmNhdGNoKChlcnJvcikgPT5cblx0XHRcdFx0XHRMb2cuZXJyb3IoYFNpZGVFZmZlY3RzIC0gRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBTaWRlRWZmZWN0cyBmb3IgTmF2aWdhdGlvbiBQcm9wZXJ0eSAke25hdmlnYXRpb25Qcm9wZXJ0eX1gLCBlcnJvcilcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIFNpZGVFZmZlY3RzIHRoYXQgY29tZSBmcm9tIGNvbnRyb2xzLlxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIGVudGl0eVR5cGVOYW1lIEVudGl0eSB0eXBlIE5hbWVcblx0ICogQHJldHVybnMgU2lkZUVmZmVjdHMgZGljdGlvbmFyeVxuXHQgKi9cblx0cHVibGljIGdldENvbnRyb2xFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlTmFtZTogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgQ29udHJvbFNpZGVFZmZlY3RzVHlwZT4ge1xuXHRcdHJldHVybiB0aGlzLnNpZGVFZmZlY3RzUmVnaXN0cnkuY29udHJvbFtlbnRpdHlUeXBlTmFtZV0gfHwge307XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBTaWRlRWZmZWN0cycgcXVhbGlmaWVyIGFuZCBvd25lciBlbnRpdHkgd2hlcmUgdGhpcyBlbnRpdHkgaXMgdXNlZCBhcyBzb3VyY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlTmFtZSBFbnRpdHkgdHlwZSBmdWxseSBxdWFsaWZpZWQgbmFtZVxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBzaWRlRWZmZWN0cyBpbmZvXG5cdCAqL1xuXHRwdWJsaWMgZ2V0U2lkZUVmZmVjdFdoZXJlRW50aXR5SXNTb3VyY2UoZW50aXR5VHlwZU5hbWU6IHN0cmluZyk6IFNpZGVFZmZlY3RJbmZvRm9yU291cmNlW10ge1xuXHRcdHJldHVybiB0aGlzLnNvdXJjZXNUb1NpZGVFZmZlY3RNYXBwaW5ncy5lbnRpdGllc1tlbnRpdHlUeXBlTmFtZV0gfHwgW107XG5cdH1cblxuXHQvKipcblx0ICogQ29tbW9uIG1ldGhvZCB0byBnZXQgdGhlIGZpZWxkIGdyb3VwSWRzIGZvciBhIHNvdXJjZSBlbnRpdHkgYW5kIGEgc291cmNlIHByb3BlcnR5LlxuXHQgKlxuXHQgKiBAcGFyYW0gc291cmNlRW50aXR5VHlwZVxuXHQgKiBAcGFyYW0gc291cmNlUHJvcGVydHlcblx0ICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIGZpZWxkR3JvdXBJZHNcblx0ICovXG5cdHB1YmxpYyBjb21wdXRlRmllbGRHcm91cElkcyhzb3VyY2VFbnRpdHlUeXBlOiBzdHJpbmcsIHNvdXJjZVByb3BlcnR5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgZW50aXR5RmllbGRHcm91cElkcyA9IHRoaXMuZ2V0U2lkZUVmZmVjdFdoZXJlRW50aXR5SXNTb3VyY2Uoc291cmNlRW50aXR5VHlwZSkubWFwKChzaWRlRWZmZWN0SW5mbykgPT5cblx0XHRcdHRoaXMuZ2V0RmllbGRHcm91cElkRm9yU2lkZUVmZmVjdChzaWRlRWZmZWN0SW5mbywgdHJ1ZSlcblx0XHQpO1xuXHRcdHJldHVybiBlbnRpdHlGaWVsZEdyb3VwSWRzLmNvbmNhdChcblx0XHRcdHRoaXMuZ2V0U2lkZUVmZmVjdFdoZXJlUHJvcGVydHlJc1NvdXJjZShzb3VyY2VQcm9wZXJ0eSkubWFwKChzaWRlRWZmZWN0SW5mbykgPT5cblx0XHRcdFx0dGhpcy5nZXRGaWVsZEdyb3VwSWRGb3JTaWRlRWZmZWN0KHNpZGVFZmZlY3RJbmZvKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBTaWRlRWZmZWN0cycgcXVhbGlmaWVyIGFuZCBvd25lciBlbnRpdHkgd2hlcmUgdGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGFzIHNvdXJjZS5cblx0ICpcblx0ICogQHBhcmFtIHByb3BlcnR5TmFtZSBQcm9wZXJ0eSBmdWxseSBxdWFsaWZpZWQgbmFtZVxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBzaWRlRWZmZWN0cyBpbmZvXG5cdCAqL1xuXHRwdWJsaWMgZ2V0U2lkZUVmZmVjdFdoZXJlUHJvcGVydHlJc1NvdXJjZShwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFNpZGVFZmZlY3RJbmZvRm9yU291cmNlW10ge1xuXHRcdHJldHVybiB0aGlzLnNvdXJjZXNUb1NpZGVFZmZlY3RNYXBwaW5ncy5wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gfHwgW107XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyB0aGUgdGV4dCBwcm9wZXJ0aWVzIHJlcXVpcmVkIGZvciBTaWRlRWZmZWN0c1xuXHQgKiBJZiBhIHByb3BlcnR5IGhhcyBhbiBhc3NvY2lhdGVkIHRleHQgdGhlbiB0aGlzIHRleHQgbmVlZHMgdG8gYmUgYWRkZWQgYXMgdGFyZ2V0UHJvcGVydGllcy5cblx0ICpcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSBzaWRlRWZmZWN0c1RhcmdldHMgU2lkZUVmZmVjdHMgVGFyZ2V0c1xuXHQgKiBAcGFyYW0gZW50aXR5VHlwZSBFbnRpdHkgdHlwZVxuXHQgKiBAcmV0dXJucyBTaWRlRWZmZWN0cyBkZWZpbml0aW9uIHdpdGggYWRkZWQgdGV4dCBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRwcml2YXRlIGFkZFRleHRQcm9wZXJ0aWVzKHNpZGVFZmZlY3RzVGFyZ2V0czogU2lkZUVmZmVjdHNUYXJnZXRUeXBlLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogU2lkZUVmZmVjdHNUYXJnZXRUeXBlIHtcblx0XHRjb25zdCBzZXRPZlByb3BlcnRpZXMgPSBuZXcgU2V0KHNpZGVFZmZlY3RzVGFyZ2V0cy50YXJnZXRQcm9wZXJ0aWVzKTtcblx0XHRjb25zdCBzZXRPZkVudGl0aWVzID0gbmV3IFNldChzaWRlRWZmZWN0c1RhcmdldHMudGFyZ2V0RW50aXRpZXMubWFwKCh0YXJnZXQpID0+IHRhcmdldC4kTmF2aWdhdGlvblByb3BlcnR5UGF0aCkpO1xuXG5cdFx0Ly8gR2VuZXJhdGUgYWxsIGRhdGFNb2RlbFBhdGggZm9yIHRoZSBwcm9wZXJ0aWVzIHRvIGFuYWx5emUgKGNvdmVyIFwiKlwiIGFuZCAvKilcblx0XHRjb25zdCBwcm9wZXJ0aWVzVG9BbmFseXplID0gc2lkZUVmZmVjdHNUYXJnZXRzLnRhcmdldFByb3BlcnRpZXMucmVkdWNlKFxuXHRcdFx0KGRhdGFNb2RlbFByb3BlcnR5UGF0aHM6IERhdGFNb2RlbE9iamVjdFBhdGhbXSwgcHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBkYXRhTW9kZWxQcm9wZXJ0eVBhdGhzLmNvbmNhdCh0aGlzLmdldERhdGFNb2RlbFByb3BlcnRpZXNGcm9tQVBhdGgocHJvcGVydHlQYXRoLCBlbnRpdHlUeXBlKSk7XG5cdFx0XHR9LFxuXHRcdFx0W11cblx0XHQpO1xuXG5cdFx0Ly8gR2VuZXJhdGUgYWxsIHBhdGhzIHJlbGF0ZWQgdG8gdGhlIHRleHQgcHJvcGVydGllcyBhbmQgbm90IGFscmVhZHkgY292ZXJlZCBieSB0aGUgU2lkZUVmZmVjdHNcblx0XHRmb3IgKGNvbnN0IGRhdGFNb2RlbFByb3BlcnR5UGF0aCBvZiBwcm9wZXJ0aWVzVG9BbmFseXplKSB7XG5cdFx0XHRjb25zdCBhc3NvY2lhdGVkVGV4dFBhdGggPSBnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aChkYXRhTW9kZWxQcm9wZXJ0eVBhdGgudGFyZ2V0T2JqZWN0KTtcblx0XHRcdGlmIChhc3NvY2lhdGVkVGV4dFBhdGgpIHtcblx0XHRcdFx0Y29uc3QgZGF0YU1vZGVsVGV4dFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChkYXRhTW9kZWxQcm9wZXJ0eVBhdGgsIGFzc29jaWF0ZWRUZXh0UGF0aCk7XG5cdFx0XHRcdGNvbnN0IHJlbGF0aXZlTmF2aWdhdGlvbiA9IGdldFRhcmdldE5hdmlnYXRpb25QYXRoKGRhdGFNb2RlbFRleHRQYXRoLCB0cnVlKTtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0UGF0aCA9IGdldFRhcmdldE9iamVjdFBhdGgoZGF0YU1vZGVsVGV4dFBhdGgsIHRydWUpO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0aXNQcm9wZXJ0eShkYXRhTW9kZWxUZXh0UGF0aC50YXJnZXRPYmplY3QpICYmXG5cdFx0XHRcdFx0IXNldE9mUHJvcGVydGllcy5oYXModGFyZ2V0UGF0aCkgJiYgLy8gdGhlIHByb3BlcnR5IGlzIGFscmVhZHkgbGlzdGVkXG5cdFx0XHRcdFx0IXNldE9mUHJvcGVydGllcy5oYXMoYCR7cmVsYXRpdmVOYXZpZ2F0aW9ufSR7ZGF0YU1vZGVsVGV4dFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMubGVuZ3RoID8gXCIvXCIgOiBcIlwifSpgKSAmJiAvLyB0aGUgcHJvcGVydHkgaXMgYWxyZWFkeSBsaXN0ZWQgdGhhbmtzIHRvIHRoZSBcIipcIlxuXHRcdFx0XHRcdCFzZXRPZkVudGl0aWVzLmhhcyhgJHtyZWxhdGl2ZU5hdmlnYXRpb259YCkgLy8gdGhlIHByb3BlcnR5IGlzIG5vdCBwYXJ0IG9mIGEgVGFyZ2V0RW50aXRpZXNcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Ly8gVGhlIFRleHQgYXNzb2NpYXRpb24gaXMgYWRkZWQgYXMgVGFyZ2V0RW50aXRpZXMgaWZcblx0XHRcdFx0XHQvLyAgLSBpdCdzIGNvbnRhaW5lZCBvbiBhIGRpZmZlcmVudCBlbnRpdHlTZXQgdGhhbiB0aGUgU2lkZUVmZmVjdHNcblx0XHRcdFx0XHQvLyAgLSAgYW5kIGl0J3MgY29udGFpbmVkIG9uIGEgZGlmZmVyZW50IGVudGl0eVNldCB0aGFuIHRoZSBzb3VyY2VkIHByb3BlcnR5XG5cdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGl0J3MgYWRkZWQgYXMgdGFyZ2V0UHJvcGVydGllc1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGRhdGFNb2RlbFByb3BlcnR5UGF0aC50YXJnZXRFbnRpdHlTZXQgIT09IGRhdGFNb2RlbFRleHRQYXRoLnRhcmdldEVudGl0eVNldCAmJlxuXHRcdFx0XHRcdFx0ZGF0YU1vZGVsVGV4dFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMgJiZcblx0XHRcdFx0XHRcdGRhdGFNb2RlbFRleHRQYXRoLnRhcmdldEVudGl0eVR5cGVcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHNldE9mRW50aXRpZXMuYWRkKHJlbGF0aXZlTmF2aWdhdGlvbik7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNldE9mUHJvcGVydGllcy5hZGQodGFyZ2V0UGF0aCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRhcmdldFByb3BlcnRpZXM6IEFycmF5LmZyb20oc2V0T2ZQcm9wZXJ0aWVzKSxcblx0XHRcdHRhcmdldEVudGl0aWVzOiBBcnJheS5mcm9tKHNldE9mRW50aXRpZXMpLm1hcCgobmF2aWdhdGlvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4geyAkTmF2aWdhdGlvblByb3BlcnR5UGF0aDogbmF2aWdhdGlvbiB9O1xuXHRcdFx0fSlcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIHRoZSBTaWRlRWZmZWN0cyB0byBleHBlY3RlZCBmb3JtYXRcblx0ICogIC0gU2V0IFRyaWdnZXJBY3Rpb24gYXMgc3RyaW5nXG5cdCAqICAtIENvbnZlcnRzIFNpZGVFZmZlY3RzIHRhcmdldHMgdG8gZXhwZWN0ZWQgZm9ybWF0XG5cdCAqICAtIFJlbW92ZXMgYmluZGluZyBwYXJhbWV0ZXIgZnJvbSBTaWRlRWZmZWN0cyB0YXJnZXRzIHByb3BlcnRpZXNcblx0ICogIC0gQWRkcyB0aGUgdGV4dCBwcm9wZXJ0aWVzXG5cdCAqICAtIFJlcGxhY2VzIFRhcmdldFByb3BlcnRpZXMgaGF2aW5nIHJlZmVyZW5jZSB0byBTb3VyY2UgUHJvcGVydGllcyBmb3IgYSBTaWRlRWZmZWN0cy5cblx0ICpcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSBzaWRlRWZmZWN0cyBTaWRlRWZmZWN0cyBkZWZpbml0aW9uXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlIEVudGl0eSB0eXBlXG5cdCAqIEBwYXJhbSBiaW5kaW5nUGFyYW1ldGVyIE5hbWUgb2YgdGhlIGJpbmRpbmcgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFNpZGVFZmZlY3RzIGRlZmluaXRpb25cblx0ICovXG5cdHByaXZhdGUgY29udmVydFNpZGVFZmZlY3RzKFxuXHRcdHNpZGVFZmZlY3RzOiBDb21tb25TaWRlRWZmZWN0c1R5cGUsXG5cdFx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0XHRiaW5kaW5nUGFyYW1ldGVyPzogc3RyaW5nXG5cdCk6IE9EYXRhU2lkZUVmZmVjdHNUeXBlIHtcblx0XHRjb25zdCB0cmlnZ2VyQWN0aW9uID0gc2lkZUVmZmVjdHMuVHJpZ2dlckFjdGlvbiBhcyBzdHJpbmc7XG5cdFx0Y29uc3QgbmV3U2lkZUVmZmVjdHMgPSB0aGlzLmNvbnZlcnRTaWRlRWZmZWN0c0Zvcm1hdChzaWRlRWZmZWN0cyk7XG5cdFx0bGV0IHNpZGVFZmZlY3RzVGFyZ2V0cyA9IHsgdGFyZ2V0UHJvcGVydGllczogbmV3U2lkZUVmZmVjdHMudGFyZ2V0UHJvcGVydGllcywgdGFyZ2V0RW50aXRpZXM6IG5ld1NpZGVFZmZlY3RzLnRhcmdldEVudGl0aWVzIH07XG5cdFx0c2lkZUVmZmVjdHNUYXJnZXRzID0gdGhpcy5yZW1vdmVCaW5kaW5nUGFyYW1ldGVyKHNpZGVFZmZlY3RzVGFyZ2V0cywgYmluZGluZ1BhcmFtZXRlcik7XG5cdFx0c2lkZUVmZmVjdHNUYXJnZXRzID0gdGhpcy5hZGRUZXh0UHJvcGVydGllcyhzaWRlRWZmZWN0c1RhcmdldHMsIGVudGl0eVR5cGUpO1xuXHRcdHNpZGVFZmZlY3RzVGFyZ2V0cyA9IHRoaXMucmVtb3ZlRHVwbGljYXRlVGFyZ2V0cyhzaWRlRWZmZWN0c1RhcmdldHMpO1xuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5uZXdTaWRlRWZmZWN0cyxcblx0XHRcdC4uLnsgdGFyZ2V0RW50aXRpZXM6IHNpZGVFZmZlY3RzVGFyZ2V0cy50YXJnZXRFbnRpdGllcywgdGFyZ2V0UHJvcGVydGllczogc2lkZUVmZmVjdHNUYXJnZXRzLnRhcmdldFByb3BlcnRpZXMsIHRyaWdnZXJBY3Rpb24gfVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgdGhlIFNpZGVFZmZlY3RzIHRhcmdldHMgKFRhcmdldEVudGl0aWVzIGFuZCBUYXJnZXRQcm9wZXJ0aWVzKSB0byBleHBlY3RlZCBmb3JtYXRcblx0ICogIC0gVGFyZ2V0UHJvcGVydGllcyBhcyBhcnJheSBvZiBzdHJpbmdcblx0ICogIC0gVGFyZ2V0RW50aXRpZXMgYXMgYXJyYXkgb2Ygb2JqZWN0IHdpdGggcHJvcGVydHkgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGguXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdHMgU2lkZUVmZmVjdHMgZGVmaW5pdGlvblxuXHQgKiBAcmV0dXJucyBDb252ZXJ0ZWQgU2lkZUVmZmVjdHNcblx0ICovXG5cdHByaXZhdGUgY29udmVydFNpZGVFZmZlY3RzRm9ybWF0KHNpZGVFZmZlY3RzOiBDb21tb25TaWRlRWZmZWN0c1R5cGUpOiBPRGF0YVNpZGVFZmZlY3RzVHlwZSB7XG5cdFx0Y29uc3QgZm9ybWF0UHJvcGVydGllcyA9IChwcm9wZXJ0aWVzPzogKHN0cmluZyB8IFByb3BlcnR5UGF0aClbXSkgPT4ge1xuXHRcdFx0cmV0dXJuIHByb3BlcnRpZXNcblx0XHRcdFx0PyBwcm9wZXJ0aWVzLnJlZHVjZSgodGFyZ2V0UHJvcGVydGllczogc3RyaW5nW10sIHRhcmdldCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgcGF0aCA9ICgodGFyZ2V0IGFzIFByb3BlcnR5UGF0aCkudHlwZSAmJiAodGFyZ2V0IGFzIFByb3BlcnR5UGF0aCkudmFsdWUpIHx8ICh0YXJnZXQgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHRcdGlmIChwYXRoKSB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldFByb3BlcnRpZXMucHVzaChwYXRoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcblx0XHRcdFx0XHRcdFx0XHRgU2lkZUVmZmVjdHMgLSBFcnJvciB3aGlsZSBwcm9jZXNzaW5nIFRhcmdldFByb3BlcnRpZXMgZm9yIFNpZGVFZmZlY3RzICR7c2lkZUVmZmVjdHMuZnVsbHlRdWFsaWZpZWROYW1lfWBcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiB0YXJnZXRQcm9wZXJ0aWVzO1xuXHRcdFx0XHQgIH0sIFtdKVxuXHRcdFx0XHQ6IHByb3BlcnRpZXM7XG5cdFx0fTtcblx0XHRjb25zdCBmb3JtYXRFbnRpdGllcyA9IChlbnRpdGllcz86IE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhbXSkgPT4ge1xuXHRcdFx0cmV0dXJuIGVudGl0aWVzXG5cdFx0XHRcdD8gZW50aXRpZXMubWFwKCh0YXJnZXRFbnRpdHkpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB7ICROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiB0YXJnZXRFbnRpdHkudmFsdWUgfTtcblx0XHRcdFx0ICB9KVxuXHRcdFx0XHQ6IGVudGl0aWVzO1xuXHRcdH07XG5cdFx0cmV0dXJuIHtcblx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogc2lkZUVmZmVjdHMuZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0c291cmNlUHJvcGVydGllczogZm9ybWF0UHJvcGVydGllcyhzaWRlRWZmZWN0cy5Tb3VyY2VQcm9wZXJ0aWVzKSxcblx0XHRcdHNvdXJjZUVudGl0aWVzOiBmb3JtYXRFbnRpdGllcyhzaWRlRWZmZWN0cy5Tb3VyY2VFbnRpdGllcyksXG5cdFx0XHR0YXJnZXRQcm9wZXJ0aWVzOiBmb3JtYXRQcm9wZXJ0aWVzKHNpZGVFZmZlY3RzLlRhcmdldFByb3BlcnRpZXMgYXMgKHN0cmluZyB8IFByb3BlcnR5UGF0aClbXSkgPz8gW10sXG5cdFx0XHR0YXJnZXRFbnRpdGllczogZm9ybWF0RW50aXRpZXMoc2lkZUVmZmVjdHMuVGFyZ2V0RW50aXRpZXMpID8/IFtdXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGFsbCBkYXRhTW9kZWxPYmplY3RQYXRoIHJlbGF0ZWQgdG8gcHJvcGVydGllcyBsaXN0ZWQgYnkgYSBwYXRoXG5cdCAqXG5cdCAqIFRoZSBwYXRoIGNhbiBiZTpcblx0ICogIC0gYSBwYXRoIHRhcmdldGluZyBhIHByb3BlcnR5IG9uIGEgY29tcGxleFR5cGUgb3IgYW4gRW50aXR5VHlwZVxuXHQgKiAgLSBhIHBhdGggd2l0aCBhIHN0YXIgdGFyZ2V0aW5nIGFsbCBwcm9wZXJ0aWVzIG9uIGEgY29tcGxleFR5cGUgb3IgYW4gRW50aXR5VHlwZS5cblx0ICpcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGFuYWx5emVcblx0ICogQHBhcmFtIGVudGl0eVR5cGUgRW50aXR5IHR5cGVcblx0ICogQHJldHVybnMgQXJyYXkgb2YgZGF0YU1vZGVsT2JqZWN0UGF0aCByZXByZXNlbnRpbmcgdGhlIHByb3BlcnRpZXNcblx0ICovXG5cdHByaXZhdGUgZ2V0RGF0YU1vZGVsUHJvcGVydGllc0Zyb21BUGF0aChwYXRoOiBzdHJpbmcsIGVudGl0eVR5cGU6IEVudGl0eVR5cGUpOiBEYXRhTW9kZWxPYmplY3RQYXRoW10ge1xuXHRcdGxldCBkYXRhTW9kZWxPYmplY3RQYXRoczogRGF0YU1vZGVsT2JqZWN0UGF0aFtdID0gW107XG5cdFx0Y29uc3QgY29udmVydGVkTWV0YU1vZGVsID0gdGhpcy5nZXRDb252ZXJ0ZWRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBlbnRpdHlTZXQgPVxuXHRcdFx0Y29udmVydGVkTWV0YU1vZGVsLmVudGl0eVNldHMuZmluZCgocmVsYXRlZEVudGl0eVNldCkgPT4gcmVsYXRlZEVudGl0eVNldC5lbnRpdHlUeXBlID09PSBlbnRpdHlUeXBlKSB8fFxuXHRcdFx0Y29udmVydGVkTWV0YU1vZGVsLnNpbmdsZXRvbnMuZmluZCgoc2luZ2xldG9uKSA9PiBzaW5nbGV0b24uZW50aXR5VHlwZSA9PT0gZW50aXR5VHlwZSk7XG5cblx0XHRpZiAoZW50aXR5U2V0KSB7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSB0aGlzLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRlbnRpdHlTZXRDb250ZXh0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAvJHtlbnRpdHlTZXQubmFtZX1gKTtcblx0XHRcdGlmIChlbnRpdHlTZXRDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IGRhdGFNb2RlbEVudGl0eVNldCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhlbnRpdHlTZXRDb250ZXh0KTtcblx0XHRcdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFNb2RlbEVudGl0eVNldCwgcGF0aC5yZXBsYWNlKFwiKlwiLCBcIlwiKSB8fCBcIi9cIiksIC8vIFwiKlwiIGlzIHJlcGxhY2VkIGJ5IFwiL1wiIHRvIHRhcmdldCB0aGUgY3VycmVudCBFbnRpdHlUeXBlXG5cdFx0XHRcdFx0dGFyZ2V0T2JqZWN0ID0gZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0XHRcdGlmIChpc1Byb3BlcnR5KHRhcmdldE9iamVjdCkpIHtcblx0XHRcdFx0XHRpZiAoaXNDb21wbGV4VHlwZSh0YXJnZXRPYmplY3QudGFyZ2V0VHlwZSkpIHtcblx0XHRcdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGhzID0gZGF0YU1vZGVsT2JqZWN0UGF0aHMuY29uY2F0KFxuXHRcdFx0XHRcdFx0XHR0YXJnZXRPYmplY3QudGFyZ2V0VHlwZS5wcm9wZXJ0aWVzLm1hcCgocHJvcGVydHkpID0+IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFNb2RlbE9iamVjdFBhdGgsIHByb3BlcnR5Lm5hbWUpKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aHMucHVzaChkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNFbnRpdHlUeXBlKHRhcmdldE9iamVjdCkpIHtcblx0XHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRocyA9IGRhdGFNb2RlbE9iamVjdFBhdGhzLmNvbmNhdChcblx0XHRcdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLm1hcCgoZW50aXR5UHJvcGVydHkpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFNb2RlbE9iamVjdFBhdGgsIGVudGl0eVByb3BlcnR5Lm5hbWUpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVudGl0eVNldENvbnRleHQuZGVzdHJveSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZGF0YU1vZGVsT2JqZWN0UGF0aHMuZmlsdGVyKChkYXRhTW9kZWxPYmplY3RQYXRoKSA9PiBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgT2RhdGEgbWV0YW1vZGVsLlxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHJldHVybnMgVGhlIE9EYXRhIG1ldGFtb2RlbFxuXHQgKi9cblx0cHJpdmF0ZSBnZXRNZXRhTW9kZWwoKTogT0RhdGFNZXRhTW9kZWwge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db250ZXh0LnNjb3BlT2JqZWN0O1xuXHRcdHJldHVybiBvQ29tcG9uZW50LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgU2lkZUVmZmVjdHMgcmVsYXRlZCB0byBhbiBlbnRpdHkgdHlwZSBvciBhY3Rpb24gdGhhdCBjb21lIGZyb20gYW4gT0RhdGEgU2VydmljZVxuXHQgKiBJbnRlcm5hbCByb3V0aW5lIHRvIGdldCwgZnJvbSBjb252ZXJ0ZWQgb0RhdGEgbWV0YU1vZGVsLCBTaWRlRWZmZWN0cyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgZW50aXR5IHR5cGUgb3IgYWN0aW9uXG5cdCAqIGFuZCB0byBjb252ZXJ0IHRoZXNlIFNpZGVFZmZlY3RzIHdpdGggZXhwZWN0ZWQgZm9ybWF0LlxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHNvdXJjZSBFbnRpdHkgdHlwZSBvciBhY3Rpb25cblx0ICogQHJldHVybnMgQXJyYXkgb2YgU2lkZUVmZmVjdHNcblx0ICovXG5cdHByaXZhdGUgZ2V0U2lkZUVmZmVjdHNGcm9tU291cmNlKHNvdXJjZTogRW50aXR5VHlwZSB8IEFjdGlvbik6IE9EYXRhU2lkZUVmZmVjdHNUeXBlW10ge1xuXHRcdGxldCBiaW5kaW5nQWxpYXMgPSBcIlwiO1xuXHRcdGNvbnN0IGlzU291cmNlRW50aXR5VHlwZSA9IGlzRW50aXR5VHlwZShzb3VyY2UpO1xuXHRcdGNvbnN0IGVudGl0eVR5cGU6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQgPSBpc1NvdXJjZUVudGl0eVR5cGUgPyBzb3VyY2UgOiBzb3VyY2Uuc291cmNlRW50aXR5VHlwZTtcblx0XHRjb25zdCBjb21tb25Bbm5vdGF0aW9uID0gc291cmNlLmFubm90YXRpb25zPy5Db21tb24gYXMgdW5kZWZpbmVkIHwgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBDb21tb25Bbm5vdGF0aW9uVHlwZXM+O1xuXHRcdGlmIChlbnRpdHlUeXBlICYmIGNvbW1vbkFubm90YXRpb24pIHtcblx0XHRcdGlmICghaXNTb3VyY2VFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdGNvbnN0IGJpbmRpbmdQYXJhbWV0ZXIgPSBzb3VyY2UucGFyYW1ldGVycz8uZmluZCgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIudHlwZSA9PT0gZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUpO1xuXHRcdFx0XHRiaW5kaW5nQWxpYXMgPSBiaW5kaW5nUGFyYW1ldGVyPy5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXCIvXCIpWzFdID8/IFwiXCI7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRTaWRlRWZmZWN0c0Fubm90YXRpb25Gcm9tU291cmNlKHNvdXJjZSkubWFwKChzaWRlRWZmZWN0QW5ubykgPT5cblx0XHRcdFx0dGhpcy5jb252ZXJ0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdEFubm8sIGVudGl0eVR5cGUsIGJpbmRpbmdBbGlhcylcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fVxuXHQvKipcblx0ICogR2V0cyB0aGUgU2lkZUVmZmVjdHMgcmVsYXRlZCB0byBhbiBlbnRpdHkgdHlwZSBvciBhY3Rpb24gdGhhdCBjb21lIGZyb20gYW4gT0RhdGEgU2VydmljZVxuXHQgKiBJbnRlcm5hbCByb3V0aW5lIHRvIGdldCwgZnJvbSBjb252ZXJ0ZWQgb0RhdGEgbWV0YU1vZGVsLCBTaWRlRWZmZWN0cyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgZW50aXR5IHR5cGUgb3IgYWN0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gc291cmNlIEVudGl0eSB0eXBlIG9yIGFjdGlvblxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBTaWRlRWZmZWN0c1xuXHQgKi9cblx0cHJpdmF0ZSBnZXRTaWRlRWZmZWN0c0Fubm90YXRpb25Gcm9tU291cmNlKHNvdXJjZTogRW50aXR5VHlwZSB8IEFjdGlvbik6IENvbW1vblNpZGVFZmZlY3RUeXBlV2l0aFF1YWxpZmllcltdIHtcblx0XHRjb25zdCBzaWRlRWZmZWN0czogQ29tbW9uU2lkZUVmZmVjdHNUeXBlW10gPSBbXTtcblx0XHRjb25zdCBjb21tb25Bbm5vdGF0aW9uID0gc291cmNlLmFubm90YXRpb25zPy5Db21tb24gYXMgdW5kZWZpbmVkIHwgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBDb21tb25TaWRlRWZmZWN0VHlwZVdpdGhRdWFsaWZpZXI+O1xuXHRcdGZvciAoY29uc3Qga2V5IGluIGNvbW1vbkFubm90YXRpb24pIHtcblx0XHRcdGNvbnN0IGFubm90YXRpb24gPSBjb21tb25Bbm5vdGF0aW9uW2tleV07XG5cdFx0XHRpZiAodGhpcy5pc1NpZGVFZmZlY3RzQW5ub3RhdGlvbihhbm5vdGF0aW9uKSkge1xuXHRcdFx0XHRzaWRlRWZmZWN0cy5wdXNoKGFubm90YXRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2lkZUVmZmVjdHM7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBhbm5vdGF0aW9uIGlzIGEgU2lkZUVmZmVjdHMgYW5ub3RhdGlvbi5cblx0ICpcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uIEFubm90YXRpb25cblx0ICogQHJldHVybnMgQm9vbGVhblxuXHQgKi9cblx0cHJpdmF0ZSBpc1NpZGVFZmZlY3RzQW5ub3RhdGlvbihhbm5vdGF0aW9uOiB1bmtub3duKTogYW5ub3RhdGlvbiBpcyBDb21tb25TaWRlRWZmZWN0c1R5cGUge1xuXHRcdHJldHVybiAoYW5ub3RhdGlvbiBhcyBDb21tb25TaWRlRWZmZWN0c1R5cGUpPy4kVHlwZSA9PT0gQ29tbW9uQW5ub3RhdGlvblR5cGVzLlNpZGVFZmZlY3RzVHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBMb2dzIHRoZSBTaWRlRWZmZWN0cyByZXF1ZXN0LlxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHBhdGhFeHByZXNzaW9ucyBTaWRlRWZmZWN0cyB0YXJnZXRzXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcblx0ICovXG5cdHByaXZhdGUgbG9nUmVxdWVzdChwYXRoRXhwcmVzc2lvbnM6IFNpZGVFZmZlY3RzVGFyZ2V0W10sIGNvbnRleHQ6IENvbnRleHQpIHtcblx0XHRjb25zdCB0YXJnZXRQYXRocyA9IHBhdGhFeHByZXNzaW9ucy5yZWR1Y2UoZnVuY3Rpb24gKHBhdGhzLCB0YXJnZXQpIHtcblx0XHRcdHJldHVybiBgJHtwYXRoc31cXG5cXHRcXHQkeyh0YXJnZXQgYXMgU2lkZUVmZmVjdHNFbnRpdHlUeXBlKS4kTmF2aWdhdGlvblByb3BlcnR5UGF0aCB8fCB0YXJnZXQgfHwgXCJcIn1gO1xuXHRcdH0sIFwiXCIpO1xuXHRcdExvZy5kZWJ1ZyhgU2lkZUVmZmVjdHMgLSBSZXF1ZXN0OlxcblxcdENvbnRleHQgcGF0aCA6ICR7Y29udGV4dC5nZXRQYXRoKCl9XFxuXFx0UHJvcGVydHkgcGF0aHMgOiR7dGFyZ2V0UGF0aHN9YCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgbmFtZSBvZiB0aGUgYmluZGluZyBwYXJhbWV0ZXIgb24gdGhlIFNpZGVFZmZlY3RzIHRhcmdldHMuXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdHNUYXJnZXRzIFNpZGVFZmZlY3RzIFRhcmdldHNcblx0ICogQHBhcmFtIGJpbmRpbmdQYXJhbWV0ZXJOYW1lIE5hbWUgb2YgYmluZGluZyBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgU2lkZUVmZmVjdHMgZGVmaW5pdGlvblxuXHQgKi9cblx0cHJpdmF0ZSByZW1vdmVCaW5kaW5nUGFyYW1ldGVyKHNpZGVFZmZlY3RzVGFyZ2V0czogU2lkZUVmZmVjdHNUYXJnZXRUeXBlLCBiaW5kaW5nUGFyYW1ldGVyTmFtZT86IHN0cmluZyk6IFNpZGVFZmZlY3RzVGFyZ2V0VHlwZSB7XG5cdFx0aWYgKGJpbmRpbmdQYXJhbWV0ZXJOYW1lKSB7XG5cdFx0XHRjb25zdCByZXBsYWNlQmluZGluZ1BhcmFtZXRlciA9IGZ1bmN0aW9uICh2YWx1ZTogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoYF4ke2JpbmRpbmdQYXJhbWV0ZXJOYW1lfS8/YCksIFwiXCIpO1xuXHRcdFx0fTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHRhcmdldFByb3BlcnRpZXM6IHNpZGVFZmZlY3RzVGFyZ2V0cy50YXJnZXRQcm9wZXJ0aWVzLm1hcCgodGFyZ2V0UHJvcGVydHkpID0+IHJlcGxhY2VCaW5kaW5nUGFyYW1ldGVyKHRhcmdldFByb3BlcnR5KSksXG5cdFx0XHRcdHRhcmdldEVudGl0aWVzOiBzaWRlRWZmZWN0c1RhcmdldHMudGFyZ2V0RW50aXRpZXMubWFwKCh0YXJnZXRFbnRpdHkpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4geyAkTmF2aWdhdGlvblByb3BlcnR5UGF0aDogcmVwbGFjZUJpbmRpbmdQYXJhbWV0ZXIodGFyZ2V0RW50aXR5LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoKSB9O1xuXHRcdFx0XHR9KVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRhcmdldFByb3BlcnRpZXM6IHNpZGVFZmZlY3RzVGFyZ2V0cy50YXJnZXRQcm9wZXJ0aWVzLFxuXHRcdFx0dGFyZ2V0RW50aXRpZXM6IHNpZGVFZmZlY3RzVGFyZ2V0cy50YXJnZXRFbnRpdGllc1xuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlIGR1cGxpY2F0ZXMgaW4gU2lkZUVmZmVjdHMgdGFyZ2V0cy5cblx0ICpcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSBzaWRlRWZmZWN0c1RhcmdldHMgU2lkZUVmZmVjdHMgVGFyZ2V0c1xuXHQgKiBAcmV0dXJucyBTaWRlRWZmZWN0cyB0YXJnZXRzIHdpdGhvdXQgZHVwbGljYXRlc1xuXHQgKi9cblx0cHJpdmF0ZSByZW1vdmVEdXBsaWNhdGVUYXJnZXRzKHNpZGVFZmZlY3RzVGFyZ2V0czogU2lkZUVmZmVjdHNUYXJnZXRUeXBlKTogU2lkZUVmZmVjdHNUYXJnZXRUeXBlIHtcblx0XHRjb25zdCB0YXJnZXRFbnRpdGllc1BhdGhzID0gc2lkZUVmZmVjdHNUYXJnZXRzLnRhcmdldEVudGl0aWVzLm1hcCgodGFyZ2V0RW50aXR5KSA9PiB0YXJnZXRFbnRpdHkuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRcdGNvbnN0IHVuaXF1ZVRhcmdldGVkRW50aXRpZXNQYXRoID0gbmV3IFNldDxzdHJpbmc+KHRhcmdldEVudGl0aWVzUGF0aHMpO1xuXHRcdGNvbnN0IHVuaXF1ZVRhcmdldFByb3BlcnRpZXMgPSBuZXcgU2V0PHN0cmluZz4oc2lkZUVmZmVjdHNUYXJnZXRzLnRhcmdldFByb3BlcnRpZXMpO1xuXG5cdFx0Y29uc3QgdW5pcXVlVGFyZ2V0ZWRFbnRpdGllcyA9IEFycmF5LmZyb20odW5pcXVlVGFyZ2V0ZWRFbnRpdGllc1BhdGgpLm1hcCgoZW50aXR5UGF0aCkgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0JE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IGVudGl0eVBhdGhcblx0XHRcdH07XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4geyB0YXJnZXRQcm9wZXJ0aWVzOiBBcnJheS5mcm9tKHVuaXF1ZVRhcmdldFByb3BlcnRpZXMpLCB0YXJnZXRFbnRpdGllczogdW5pcXVlVGFyZ2V0ZWRFbnRpdGllcyB9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgU2lkZUVmZmVjdHMgYWN0aW9uIHR5cGUgdGhhdCBjb21lIGZyb20gYW4gT0RhdGEgU2VydmljZVxuXHQgKiBJbnRlcm5hbCByb3V0aW5lIHRvIGdldCwgZnJvbSBjb252ZXJ0ZWQgb0RhdGEgbWV0YU1vZGVsLCBTaWRlRWZmZWN0cyBvbiBhY3Rpb25zXG5cdCAqIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBlbnRpdHkgdHlwZSBhbmQgdG8gY29udmVydCB0aGVzZSBTaWRlRWZmZWN0cyB3aXRoXG5cdCAqIGV4cGVjdGVkIGZvcm1hdC5cblx0ICpcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlIEVudGl0eSB0eXBlXG5cdCAqIEByZXR1cm5zIEVudGl0eSB0eXBlIFNpZGVFZmZlY3RzIGRpY3Rpb25hcnlcblx0ICovXG5cdHByaXZhdGUgcmV0cmlldmVPRGF0YUFjdGlvbnNTaWRlRWZmZWN0cyhlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogUmVjb3JkPHN0cmluZywgQWN0aW9uU2lkZUVmZmVjdHNUeXBlPiB7XG5cdFx0Y29uc3Qgc2lkZUVmZmVjdHM6IFJlY29yZDxzdHJpbmcsIEFjdGlvblNpZGVFZmZlY3RzVHlwZT4gPSB7fTtcblx0XHRjb25zdCBhY3Rpb25zID0gZW50aXR5VHlwZS5hY3Rpb25zO1xuXHRcdGlmIChhY3Rpb25zKSB7XG5cdFx0XHRPYmplY3Qua2V5cyhhY3Rpb25zKS5mb3JFYWNoKChhY3Rpb25OYW1lKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbiA9IGVudGl0eVR5cGUuYWN0aW9uc1thY3Rpb25OYW1lXTtcblx0XHRcdFx0Y29uc3QgdHJpZ2dlckFjdGlvbnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0XHRcdFx0bGV0IHRhcmdldFByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRcdGxldCB0YXJnZXRFbnRpdGllczogU2lkZUVmZmVjdHNFbnRpdHlUeXBlW10gPSBbXTtcblxuXHRcdFx0XHR0aGlzLmdldFNpZGVFZmZlY3RzRnJvbVNvdXJjZShhY3Rpb24pLmZvckVhY2goKG9EYXRhU2lkZUVmZmVjdCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHRyaWdnZXJBY3Rpb24gPSBvRGF0YVNpZGVFZmZlY3QudHJpZ2dlckFjdGlvbjtcblx0XHRcdFx0XHR0YXJnZXRQcm9wZXJ0aWVzID0gdGFyZ2V0UHJvcGVydGllcy5jb25jYXQob0RhdGFTaWRlRWZmZWN0LnRhcmdldFByb3BlcnRpZXMpO1xuXHRcdFx0XHRcdHRhcmdldEVudGl0aWVzID0gdGFyZ2V0RW50aXRpZXMuY29uY2F0KG9EYXRhU2lkZUVmZmVjdC50YXJnZXRFbnRpdGllcyk7XG5cdFx0XHRcdFx0aWYgKHRyaWdnZXJBY3Rpb24pIHtcblx0XHRcdFx0XHRcdHRyaWdnZXJBY3Rpb25zLmFkZCh0cmlnZ2VyQWN0aW9uKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCBzaWRlRWZmZWN0c1RhcmdldHMgPSB0aGlzLnJlbW92ZUR1cGxpY2F0ZVRhcmdldHMoeyB0YXJnZXRQcm9wZXJ0aWVzLCB0YXJnZXRFbnRpdGllcyB9KTtcblx0XHRcdFx0c2lkZUVmZmVjdHNbYWN0aW9uTmFtZV0gPSB7XG5cdFx0XHRcdFx0cGF0aEV4cHJlc3Npb25zOiBbLi4uc2lkZUVmZmVjdHNUYXJnZXRzLnRhcmdldFByb3BlcnRpZXMsIC4uLnNpZGVFZmZlY3RzVGFyZ2V0cy50YXJnZXRFbnRpdGllc10sXG5cdFx0XHRcdFx0dHJpZ2dlckFjdGlvbnM6IEFycmF5LmZyb20odHJpZ2dlckFjdGlvbnMpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHNpZGVFZmZlY3RzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgU2lkZUVmZmVjdHMgZW50aXR5IHR5cGUgdGhhdCBjb21lIGZyb20gYW4gT0RhdGEgU2VydmljZVxuXHQgKiBJbnRlcm5hbCByb3V0aW5lIHRvIGdldCwgZnJvbSBjb252ZXJ0ZWQgb0RhdGEgbWV0YU1vZGVsLCBTaWRlRWZmZWN0c1xuXHQgKiByZWxhdGVkIHRvIGEgc3BlY2lmaWMgZW50aXR5IHR5cGUgYW5kIHRvIGNvbnZlcnQgdGhlc2UgU2lkZUVmZmVjdHMgd2l0aFxuXHQgKiBleHBlY3RlZCBmb3JtYXQuXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0gZW50aXR5VHlwZSBFbnRpdHkgdHlwZVxuXHQgKiBAcmV0dXJucyBFbnRpdHkgdHlwZSBTaWRlRWZmZWN0cyBkaWN0aW9uYXJ5XG5cdCAqL1xuXHRwcml2YXRlIHJldHJpZXZlT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogUmVjb3JkPHN0cmluZywgT0RhdGFTaWRlRWZmZWN0c1R5cGU+IHtcblx0XHRjb25zdCBlbnRpdHlTaWRlRWZmZWN0czogUmVjb3JkPHN0cmluZywgT0RhdGFTaWRlRWZmZWN0c1R5cGU+ID0ge307XG5cdFx0dGhpcy5nZXRTaWRlRWZmZWN0c0Zyb21Tb3VyY2UoZW50aXR5VHlwZSkuZm9yRWFjaCgoc2lkZUVmZmVjdHMpID0+IHtcblx0XHRcdGVudGl0eVNpZGVFZmZlY3RzW3NpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZV0gPSBzaWRlRWZmZWN0cztcblx0XHR9KTtcblx0XHRyZXR1cm4gZW50aXR5U2lkZUVmZmVjdHM7XG5cdH1cblxuXHQvKipcblx0ICogRGVmaW5lcyBhIG1hcCBmb3IgdGhlIFNvdXJjZXMgb2Ygc2lkZUVmZmVjdCBvbiB0aGUgZW50aXR5IHRvIHRyYWNrIHdoZXJlIHRob3NlIHNvdXJjZXMgYXJlIHVzZWQgaW4gU2lkZUVmZmVjdHMgYW5ub3RhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGVudGl0eVR5cGUgd2UgbG9vayBmb3Igc2lkZSBFZmZlY3RzIGFubm90YXRpb25cblx0ICogQHBhcmFtIHNpZGVFZmZlY3RzU291cmNlcyBUaGUgbWFwcGluZyBvYmplY3QgaW4gY29uc3RydWN0aW9uXG5cdCAqIEBwYXJhbSBzaWRlRWZmZWN0c1NvdXJjZXMuZW50aXRpZXNcblx0ICogQHBhcmFtIHNpZGVFZmZlY3RzU291cmNlcy5wcm9wZXJ0aWVzXG5cdCAqL1xuXHRwcml2YXRlIG1hcFNpZGVFZmZlY3RTb3VyY2VzKFxuXHRcdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdFx0c2lkZUVmZmVjdHNTb3VyY2VzOiB7IGVudGl0aWVzOiBSZWNvcmQ8c3RyaW5nLCBTaWRlRWZmZWN0SW5mb0ZvclNvdXJjZVtdPjsgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgU2lkZUVmZmVjdEluZm9Gb3JTb3VyY2VbXT4gfVxuXHQpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHNpZGVFZmZlY3REZWZpbml0aW9uIG9mIHRoaXMuZ2V0U2lkZUVmZmVjdHNBbm5vdGF0aW9uRnJvbVNvdXJjZShlbnRpdHlUeXBlKSkge1xuXHRcdFx0Zm9yIChjb25zdCBzb3VyY2VFbnRpdHkgb2Ygc2lkZUVmZmVjdERlZmluaXRpb24uU291cmNlRW50aXRpZXMgPz8gW10pIHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IHNvdXJjZUVudGl0eS52YWx1ZSA/IHNvdXJjZUVudGl0eS4kdGFyZ2V0Py50YXJnZXRUeXBlIDogZW50aXR5VHlwZTtcblx0XHRcdFx0aWYgKHRhcmdldEVudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRpZiAoIXNpZGVFZmZlY3RzU291cmNlcy5lbnRpdGllc1t0YXJnZXRFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV0pIHtcblx0XHRcdFx0XHRcdHNpZGVFZmZlY3RzU291cmNlcy5lbnRpdGllc1t0YXJnZXRFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV0gPSBbXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c2lkZUVmZmVjdHNTb3VyY2VzLmVudGl0aWVzW3RhcmdldEVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lXS5wdXNoKHtcblx0XHRcdFx0XHRcdGVudGl0eTogZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdFx0XHRxdWFsaWZpZXI6IHNpZGVFZmZlY3REZWZpbml0aW9uLnF1YWxpZmllclxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBoYXNVbmlxdWVTb3VyY2VQcm9wZXJ0eSA9IHNpZGVFZmZlY3REZWZpbml0aW9uLlNvdXJjZVByb3BlcnRpZXM/Lmxlbmd0aCA9PT0gMTtcblx0XHRcdGZvciAoY29uc3Qgc291cmNlUHJvcGVydHkgb2Ygc2lkZUVmZmVjdERlZmluaXRpb24uU291cmNlUHJvcGVydGllcyA/PyBbXSkge1xuXHRcdFx0XHRpZiAoIXNpZGVFZmZlY3RzU291cmNlcy5wcm9wZXJ0aWVzW3NvdXJjZVByb3BlcnR5LiR0YXJnZXQ/LmZ1bGx5UXVhbGlmaWVkTmFtZV0pIHtcblx0XHRcdFx0XHRzaWRlRWZmZWN0c1NvdXJjZXMucHJvcGVydGllc1tzb3VyY2VQcm9wZXJ0eS4kdGFyZ2V0Py5mdWxseVF1YWxpZmllZE5hbWVdID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0c2lkZUVmZmVjdHNTb3VyY2VzLnByb3BlcnRpZXNbc291cmNlUHJvcGVydHkuJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lXS5wdXNoKHtcblx0XHRcdFx0XHRlbnRpdHk6IGVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRcdHF1YWxpZmllcjogc2lkZUVmZmVjdERlZmluaXRpb24ucXVhbGlmaWVyLFxuXHRcdFx0XHRcdGhhc1VuaXF1ZVNvdXJjZVByb3BlcnR5XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGZpZWxkR3JvdXBJZCBiYXNlZCBvbiB0aGUgc3RvcmVkIGluZm9ybWF0aW9uIG9uIHRoIHNpZGUgZWZmZWN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdEluZm9cblx0ICogQHBhcmFtIGlzSW1tZWRpYXRlXG5cdCAqIEByZXR1cm5zIEEgc3RyaW5nIGZvciB0aGUgZmllbGRHcm91cElkLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRGaWVsZEdyb3VwSWRGb3JTaWRlRWZmZWN0KHNpZGVFZmZlY3RJbmZvOiBTaWRlRWZmZWN0SW5mb0ZvclNvdXJjZSwgaXNJbW1lZGlhdGU6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc2lkZUVmZmVjdFdpdGhRdWFsaWZpZXIgPSBzaWRlRWZmZWN0SW5mby5xdWFsaWZpZXJcblx0XHRcdD8gYCR7c2lkZUVmZmVjdEluZm8uZW50aXR5fSMke3NpZGVFZmZlY3RJbmZvLnF1YWxpZmllcn1gXG5cdFx0XHQ6IHNpZGVFZmZlY3RJbmZvLmVudGl0eTtcblx0XHRyZXR1cm4gaXNJbW1lZGlhdGUgfHwgc2lkZUVmZmVjdEluZm8uaGFzVW5pcXVlU291cmNlUHJvcGVydHkgPT09IHRydWVcblx0XHRcdD8gYCR7c2lkZUVmZmVjdFdpdGhRdWFsaWZpZXJ9JCRJbW1lZGlhdGVSZXF1ZXN0YFxuXHRcdFx0OiBzaWRlRWZmZWN0V2l0aFF1YWxpZmllcjtcblx0fVxuXG5cdGdldEludGVyZmFjZSgpOiBTaWRlRWZmZWN0c1NlcnZpY2Uge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbmNsYXNzIFNpZGVFZmZlY3RzU2VydmljZUZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxTaWRlRWZmZWN0c1NldHRpbmdzPiB7XG5cdGNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8U2lkZUVmZmVjdHNTZXR0aW5ncz4pOiBQcm9taXNlPFNpZGVFZmZlY3RzU2VydmljZT4ge1xuXHRcdGNvbnN0IFNpZGVFZmZlY3RzU2VydmljZVNlcnZpY2UgPSBuZXcgU2lkZUVmZmVjdHNTZXJ2aWNlKG9TZXJ2aWNlQ29udGV4dCk7XG5cdFx0cmV0dXJuIFNpZGVFZmZlY3RzU2VydmljZVNlcnZpY2UuaW5pdFByb21pc2U7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7OztNQXdFYUEsa0JBQWtCO0lBQUE7SUFBQTtNQUFBO0lBQUE7SUFBQTtJQUFBO0lBYzlCO0lBQUEsT0FDQUMsSUFB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
|
|
@@ -2,5 +2,5 @@
|
|
|
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/base/Log","sap/fe/core/converters/MetaModelConverter","sap/ui/core/service/Service","sap/ui/core/service/ServiceFactory","../templating/DataModelPathHelper","../templating/PropertyHelper"],function(t,e,i,r,o,n){"use strict";var s={};var a=n.isProperty;var c=n.getAssociatedTextPropertyPath;var f=o.getTargetObjectPath;var u=o.getTargetNavigationPath;var l=o.enhanceDataModelPath;var d=e.isEntityType;var g=e.isComplexType;var p=e.getInvolvedDataModelObjects;var h=e.convertTypes;function E(t,e){t.prototype=Object.create(e.prototype);t.prototype.constructor=t;y(t,e)}function y(t,e){y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function t(e,i){e.__proto__=i;return e};return y(t,e)}let v=function(e){E(i,e);function i(){return e.apply(this,arguments)||this}s.SideEffectsService=i;var r=i.prototype;r.init=function t(){this.sideEffectsRegistry={oData:{entities:{},actions:{}},control:{}};this.isInitialized=false;this.initPromise=Promise.resolve(this)};r.addControlSideEffects=function t(e,i){if(i.sourceControlId){const t={...i,fullyQualifiedName:`${e}/SideEffectsForControl/${i.sourceControlId}`};const r=this.sideEffectsRegistry.control[e]||{};r[t.sourceControlId]=t;this.sideEffectsRegistry.control[e]=r}};r.executeAction=function t(e,i,r){const o=i.getModel().bindContext(`${e}(...)`,i);return o.execute(r||i.getBinding().getUpdateGroupId())};r.getConvertedMetaModel=function t(){return h(this.getMetaModel(),this.capabilities)};r.getEntityTypeFromContext=function t(e){const i=e.getModel().getMetaModel(),r=i.getMetaPath(e.getPath()),o=i.getObject(r)["$Type"];return o};r.getODataEntitySideEffects=function t(e){return this.sideEffectsRegistry.oData.entities[e]||{}};r.getGlobalODataEntitySideEffects=function t(e){const i=this.getODataEntitySideEffects(e);const r=[];for(const t in i){const e=i[t];if(!e.sourceEntities&&!e.sourceProperties){r.push(e)}}return r};r.getODataActionSideEffects=function t(e,i){if(i){const t=this.getEntityTypeFromContext(i);if(t){var r;return(r=this.sideEffectsRegistry.oData.actions[t])===null||r===void 0?void 0:r[e]}}return undefined};r.initializeSideEffects=function t(e){this.capabilities=e;if(!this.isInitialized){const t={entities:{},properties:{}};const e=this.getConvertedMetaModel();e.entityTypes.forEach(e=>{this.sideEffectsRegistry.oData.entities[e.fullyQualifiedName]=this.retrieveODataEntitySideEffects(e);this.sideEffectsRegistry.oData.actions[e.fullyQualifiedName]=this.retrieveODataActionsSideEffects(e);this.mapSideEffectSources(e,t)});this.sourcesToSideEffectMappings=t;this.isInitialized=true}};r.removeControlSideEffects=function t(e){Object.keys(this.sideEffectsRegistry.control).forEach(t=>{if(this.sideEffectsRegistry.control[t][e]){delete this.sideEffectsRegistry.control[t][e]}})};r.requestSideEffects=function t(e,i,r){this.logRequest(e,i);return i.requestSideEffects(e,r)};r.requestSideEffectsForODataAction=function t(e,i){var r,o;let n;if((r=e.triggerActions)!==null&&r!==void 0&&r.length){n=e.triggerActions.map(t=>this.executeAction(t,i))}else{n=[]}if((o=e.pathExpressions)!==null&&o!==void 0&&o.length){n.push(this.requestSideEffects(e.pathExpressions,i))}return n.length?Promise.all(n):Promise.resolve([])};r.requestSideEffectsForNavigationProperty=function e(i,r,o){const n=this.getEntityTypeFromContext(r);if(n){const e=`${i}/`;const s=this.getODataEntitySideEffects(n);let a=[];let c=[];let f=[];Object.keys(s).filter(t=>{const r=s[t];return(r.sourceProperties||[]).some(t=>t.startsWith(e)&&t.replace(e,"").indexOf("/")===-1)||(r.sourceEntities||[]).some(t=>t.$NavigationPropertyPath===i)}).forEach(t=>{const e=s[t];if(e.triggerAction){this.executeAction(e.triggerAction,r,o)}a=a.concat(e.targetProperties);c=c.concat(e.targetEntities)});const u=this.removeDuplicateTargets({targetProperties:a,targetEntities:c});f=[...u.targetProperties,...u.targetEntities];if(f.length){return this.requestSideEffects(f,r,o).catch(e=>t.error(`SideEffects - Error while processing SideEffects for Navigation Property ${i}`,e))}}return Promise.resolve()};r.getControlEntitySideEffects=function t(e){return this.sideEffectsRegistry.control[e]||{}};r.getSideEffectWhereEntityIsSource=function t(e){return this.sourcesToSideEffectMappings.entities[e]||[]};r.computeFieldGroupIds=function t(e,i){const r=this.getSideEffectWhereEntityIsSource(e).map(t=>this.getFieldGroupIdForSideEffect(t,true));return r.concat(this.getSideEffectWherePropertyIsSource(i).map(t=>this.getFieldGroupIdForSideEffect(t)))};r.getSideEffectWherePropertyIsSource=function t(e){return this.sourcesToSideEffectMappings.properties[e]||[]};r.addTextProperties=function t(e,i){const r=new Set(e.targetProperties);const o=new Set(e.targetEntities.map(t=>t.$NavigationPropertyPath));const n=e.targetProperties.reduce((t,e)=>t.concat(this.getDataModelPropertiesFromAPath(e,i)),[]);for(const t of n){const e=c(t.targetObject);if(e){const i=l(t,e);const n=u(i,true);const s=f(i,true);if(a(i.targetObject)&&!r.has(s)&&!r.has(`${n}${i.navigationProperties.length?"/":""}*`)&&!o.has(`${n}`)){if(t.targetEntitySet!==i.targetEntitySet&&i.navigationProperties&&i.targetEntityType){o.add(n)}else{r.add(s)}}}}return{targetProperties:Array.from(r),targetEntities:Array.from(o).map(t=>({$NavigationPropertyPath:t}))}};r.convertSideEffects=function t(e,i,r){const o=e.TriggerAction;const n=this.convertSideEffectsFormat(e);let s={targetProperties:n.targetProperties,targetEntities:n.targetEntities};s=this.removeBindingParameter(s,r);s=this.addTextProperties(s,i);s=this.removeDuplicateTargets(s);return{...n,...{targetEntities:s.targetEntities,targetProperties:s.targetProperties,triggerAction:o}}};r.convertSideEffectsFormat=function e(i){const r=e=>e?e.reduce((e,r)=>{const o=r.type&&r.value||r;if(o){e.push(o)}else{t.error(`SideEffects - Error while processing TargetProperties for SideEffects ${i.fullyQualifiedName}`)}return e},[]):e;const o=t=>t?t.map(t=>({$NavigationPropertyPath:t.value})):t;return{fullyQualifiedName:i.fullyQualifiedName,sourceProperties:r(i.SourceProperties),sourceEntities:o(i.SourceEntities),targetProperties:r(i.TargetProperties)??[],targetEntities:o(i.TargetEntities)??[]}};r.getDataModelPropertiesFromAPath=function t(e,i){let r=[];const o=this.getConvertedMetaModel();const n=o.entitySets.find(t=>t.entityType===i)||o.singletons.find(t=>t.entityType===i);if(n){const t=this.getMetaModel(),i=t.createBindingContext(`/${n.name}`);if(i){const t=p(i);const o=l(t,e.replace("*","")||"/"),n=o.targetObject;if(a(n)){if(g(n.targetType)){r=r.concat(n.targetType.properties.map(t=>l(o,t.name)))}else{r.push(o)}}else if(d(n)){r=r.concat(o.targetEntityType.entityProperties.map(t=>l(o,t.name)))}i.destroy()}}return r.filter(t=>t.targetObject)};r.getMetaModel=function t(){const e=this.getContext();const i=e.scopeObject;return i.getModel().getMetaModel()};r.getSideEffectsFromSource=function t(e){var i;let r="";const o=d(e);const n=o?e:e.sourceEntityType;const s=(i=e.annotations)===null||i===void 0?void 0:i.Common;if(n&&s){if(!o){var a;const t=(a=e.parameters)===null||a===void 0?void 0:a.find(t=>t.type===n.fullyQualifiedName);r=(t===null||t===void 0?void 0:t.fullyQualifiedName.split("/")[1])??""}return this.getSideEffectsAnnotationFromSource(e).map(t=>this.convertSideEffects(t,n,r))}return[]};r.getSideEffectsAnnotationFromSource=function t(e){var i;const r=[];const o=(i=e.annotations)===null||i===void 0?void 0:i.Common;for(const t in o){const e=o[t];if(this.isSideEffectsAnnotation(e)){r.push(e)}}return r};r.isSideEffectsAnnotation=function t(e){return(e===null||e===void 0?void 0:e.$Type)==="com.sap.vocabularies.Common.v1.SideEffectsType"};r.logRequest=function e(i,r){const o=i.reduce(function(t,e){return`${t}\n\t\t${e.$NavigationPropertyPath||e||""}`},"");t.debug(`SideEffects - Request:\n\tContext path : ${r.getPath()}\n\tProperty paths :${o}`)};r.removeBindingParameter=function t(e,i){if(i){const t=function(t){return t.replace(new RegExp(`^${i}/?`),"")};return{targetProperties:e.targetProperties.map(e=>t(e)),targetEntities:e.targetEntities.map(e=>({$NavigationPropertyPath:t(e.$NavigationPropertyPath)}))}}return{targetProperties:e.targetProperties,targetEntities:e.targetEntities}};r.removeDuplicateTargets=function t(e){const i=e.targetEntities.map(t=>t.$NavigationPropertyPath);const r=new Set(i);const o=new Set(e.targetProperties);const n=Array.from(r).map(t=>({$NavigationPropertyPath:t}));return{targetProperties:Array.from(o),targetEntities:n}};r.retrieveODataActionsSideEffects=function t(e){const i={};const r=e.actions;if(r){Object.keys(r).forEach(t=>{const r=e.actions[t];const o=new Set;let n=[];let s=[];this.getSideEffectsFromSource(r).forEach(t=>{const e=t.triggerAction;n=n.concat(t.targetProperties);s=s.concat(t.targetEntities);if(e){o.add(e)}});const a=this.removeDuplicateTargets({targetProperties:n,targetEntities:s});i[t]={pathExpressions:[...a.targetProperties,...a.targetEntities],triggerActions:Array.from(o)}})}return i};r.retrieveODataEntitySideEffects=function t(e){const i={};this.getSideEffectsFromSource(e).forEach(t=>{i[t.fullyQualifiedName]=t});return i};r.mapSideEffectSources=function t(e,i){for(const t of this.getSideEffectsAnnotationFromSource(e)){var r;for(const r of t.SourceEntities??[]){var o;const n=r.value?(o=r.$target)===null||o===void 0?void 0:o.targetType:e;if(n){if(!i.entities[n.fullyQualifiedName]){i.entities[n.fullyQualifiedName]=[]}i.entities[n.fullyQualifiedName].push({entity:e.fullyQualifiedName,qualifier:t.qualifier})}}const c=((r=t.SourceProperties)===null||r===void 0?void 0:r.length)===1;for(const r of t.SourceProperties??[]){var n,s;if(!i.properties[(n=r.$target)===null||n===void 0?void 0:n.fullyQualifiedName]){var a;i.properties[(a=r.$target)===null||a===void 0?void 0:a.fullyQualifiedName]=[]}i.properties[(s=r.$target)===null||s===void 0?void 0:s.fullyQualifiedName].push({entity:e.fullyQualifiedName,qualifier:t.qualifier,hasUniqueSourceProperty:c})}}};r.getFieldGroupIdForSideEffect=function t(e){let i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;const r=e.qualifier?`${e.entity}#${e.qualifier}`:e.entity;return i||e.hasUniqueSourceProperty===true?`${r}$$ImmediateRequest`:r};r.getInterface=function t(){return this};return i}(i);s.SideEffectsService=v;let m=function(t){E(e,t);function e(){return t.apply(this,arguments)||this}var i=e.prototype;i.createInstance=function t(e){const i=new v(e);return i.initPromise};return e}(r);return m},false);
|
|
5
|
+
sap.ui.define(["sap/base/Log","sap/fe/core/converters/MetaModelConverter","sap/fe/core/helpers/TypeGuards","sap/fe/core/templating/PropertyHelper","sap/ui/core/service/Service","sap/ui/core/service/ServiceFactory","../templating/DataModelPathHelper"],function(t,e,i,r,o,n,s){"use strict";var a={};var c=s.getTargetObjectPath;var f=s.getTargetNavigationPath;var u=s.enhanceDataModelPath;var l=r.getAssociatedTextPropertyPath;var d=i.isProperty;var p=i.isEntityType;var g=i.isComplexType;var h=e.getInvolvedDataModelObjects;var E=e.convertTypes;function y(t,e){t.prototype=Object.create(e.prototype);t.prototype.constructor=t;v(t,e)}function v(t,e){v=Object.setPrototypeOf?Object.setPrototypeOf.bind():function t(e,i){e.__proto__=i;return e};return v(t,e)}let m=function(e){y(i,e);function i(){return e.apply(this,arguments)||this}a.SideEffectsService=i;var r=i.prototype;r.init=function t(){this.sideEffectsRegistry={oData:{entities:{},actions:{}},control:{}};this.isInitialized=false;this.initPromise=Promise.resolve(this)};r.addControlSideEffects=function t(e,i){if(i.sourceControlId){const t={...i,fullyQualifiedName:`${e}/SideEffectsForControl/${i.sourceControlId}`};const r=this.sideEffectsRegistry.control[e]||{};r[t.sourceControlId]=t;this.sideEffectsRegistry.control[e]=r}};r.executeAction=function t(e,i,r){const o=i.getModel().bindContext(`${e}(...)`,i);return o.execute(r||i.getBinding().getUpdateGroupId())};r.getConvertedMetaModel=function t(){return E(this.getMetaModel(),this.capabilities)};r.getEntityTypeFromContext=function t(e){const i=e.getModel().getMetaModel(),r=i.getMetaPath(e.getPath()),o=i.getObject(r)["$Type"];return o};r.getODataEntitySideEffects=function t(e){return this.sideEffectsRegistry.oData.entities[e]||{}};r.getGlobalODataEntitySideEffects=function t(e){const i=this.getODataEntitySideEffects(e);const r=[];for(const t in i){const e=i[t];if(!e.sourceEntities&&!e.sourceProperties){r.push(e)}}return r};r.getODataActionSideEffects=function t(e,i){if(i){const t=this.getEntityTypeFromContext(i);if(t){var r;return(r=this.sideEffectsRegistry.oData.actions[t])===null||r===void 0?void 0:r[e]}}return undefined};r.initializeSideEffects=function t(e){this.capabilities=e;if(!this.isInitialized){const t={entities:{},properties:{}};const e=this.getConvertedMetaModel();e.entityTypes.forEach(e=>{this.sideEffectsRegistry.oData.entities[e.fullyQualifiedName]=this.retrieveODataEntitySideEffects(e);this.sideEffectsRegistry.oData.actions[e.fullyQualifiedName]=this.retrieveODataActionsSideEffects(e);this.mapSideEffectSources(e,t)});this.sourcesToSideEffectMappings=t;this.isInitialized=true}};r.removeControlSideEffects=function t(e){Object.keys(this.sideEffectsRegistry.control).forEach(t=>{if(this.sideEffectsRegistry.control[t][e]){delete this.sideEffectsRegistry.control[t][e]}})};r.requestSideEffects=function t(e,i,r){this.logRequest(e,i);return i.requestSideEffects(e,r)};r.requestSideEffectsForODataAction=function t(e,i){var r,o;let n;if((r=e.triggerActions)!==null&&r!==void 0&&r.length){n=e.triggerActions.map(t=>this.executeAction(t,i))}else{n=[]}if((o=e.pathExpressions)!==null&&o!==void 0&&o.length){n.push(this.requestSideEffects(e.pathExpressions,i))}return n.length?Promise.all(n):Promise.resolve([])};r.requestSideEffectsForNavigationProperty=function e(i,r,o){const n=this.getEntityTypeFromContext(r);if(n){const e=`${i}/`;const s=this.getODataEntitySideEffects(n);let a=[];let c=[];let f=[];Object.keys(s).filter(t=>{var r;const o=s[t];return(o.sourceEntities||[]).some(t=>t.$NavigationPropertyPath===i)||((r=o.sourceProperties)===null||r===void 0?void 0:r.length)===1&&o.sourceProperties.some(t=>t.startsWith(e)&&t.replace(e,"").indexOf("/")===-1)}).forEach(t=>{const e=s[t];if(e.triggerAction){this.executeAction(e.triggerAction,r,o)}a=a.concat(e.targetProperties);c=c.concat(e.targetEntities)});const u=this.removeDuplicateTargets({targetProperties:a,targetEntities:c});f=[...u.targetProperties,...u.targetEntities];if(f.length){return this.requestSideEffects(f,r,o).catch(e=>t.error(`SideEffects - Error while processing SideEffects for Navigation Property ${i}`,e))}}return Promise.resolve()};r.getControlEntitySideEffects=function t(e){return this.sideEffectsRegistry.control[e]||{}};r.getSideEffectWhereEntityIsSource=function t(e){return this.sourcesToSideEffectMappings.entities[e]||[]};r.computeFieldGroupIds=function t(e,i){const r=this.getSideEffectWhereEntityIsSource(e).map(t=>this.getFieldGroupIdForSideEffect(t,true));return r.concat(this.getSideEffectWherePropertyIsSource(i).map(t=>this.getFieldGroupIdForSideEffect(t)))};r.getSideEffectWherePropertyIsSource=function t(e){return this.sourcesToSideEffectMappings.properties[e]||[]};r.addTextProperties=function t(e,i){const r=new Set(e.targetProperties);const o=new Set(e.targetEntities.map(t=>t.$NavigationPropertyPath));const n=e.targetProperties.reduce((t,e)=>t.concat(this.getDataModelPropertiesFromAPath(e,i)),[]);for(const t of n){const e=l(t.targetObject);if(e){const i=u(t,e);const n=f(i,true);const s=c(i,true);if(d(i.targetObject)&&!r.has(s)&&!r.has(`${n}${i.navigationProperties.length?"/":""}*`)&&!o.has(`${n}`)){if(t.targetEntitySet!==i.targetEntitySet&&i.navigationProperties&&i.targetEntityType){o.add(n)}else{r.add(s)}}}}return{targetProperties:Array.from(r),targetEntities:Array.from(o).map(t=>({$NavigationPropertyPath:t}))}};r.convertSideEffects=function t(e,i,r){const o=e.TriggerAction;const n=this.convertSideEffectsFormat(e);let s={targetProperties:n.targetProperties,targetEntities:n.targetEntities};s=this.removeBindingParameter(s,r);s=this.addTextProperties(s,i);s=this.removeDuplicateTargets(s);return{...n,...{targetEntities:s.targetEntities,targetProperties:s.targetProperties,triggerAction:o}}};r.convertSideEffectsFormat=function e(i){const r=e=>e?e.reduce((e,r)=>{const o=r.type&&r.value||r;if(o){e.push(o)}else{t.error(`SideEffects - Error while processing TargetProperties for SideEffects ${i.fullyQualifiedName}`)}return e},[]):e;const o=t=>t?t.map(t=>({$NavigationPropertyPath:t.value})):t;return{fullyQualifiedName:i.fullyQualifiedName,sourceProperties:r(i.SourceProperties),sourceEntities:o(i.SourceEntities),targetProperties:r(i.TargetProperties)??[],targetEntities:o(i.TargetEntities)??[]}};r.getDataModelPropertiesFromAPath=function t(e,i){let r=[];const o=this.getConvertedMetaModel();const n=o.entitySets.find(t=>t.entityType===i)||o.singletons.find(t=>t.entityType===i);if(n){const t=this.getMetaModel(),i=t.createBindingContext(`/${n.name}`);if(i){const t=h(i);const o=u(t,e.replace("*","")||"/"),n=o.targetObject;if(d(n)){if(g(n.targetType)){r=r.concat(n.targetType.properties.map(t=>u(o,t.name)))}else{r.push(o)}}else if(p(n)){r=r.concat(o.targetEntityType.entityProperties.map(t=>u(o,t.name)))}i.destroy()}}return r.filter(t=>t.targetObject)};r.getMetaModel=function t(){const e=this.getContext();const i=e.scopeObject;return i.getModel().getMetaModel()};r.getSideEffectsFromSource=function t(e){var i;let r="";const o=p(e);const n=o?e:e.sourceEntityType;const s=(i=e.annotations)===null||i===void 0?void 0:i.Common;if(n&&s){if(!o){var a;const t=(a=e.parameters)===null||a===void 0?void 0:a.find(t=>t.type===n.fullyQualifiedName);r=(t===null||t===void 0?void 0:t.fullyQualifiedName.split("/")[1])??""}return this.getSideEffectsAnnotationFromSource(e).map(t=>this.convertSideEffects(t,n,r))}return[]};r.getSideEffectsAnnotationFromSource=function t(e){var i;const r=[];const o=(i=e.annotations)===null||i===void 0?void 0:i.Common;for(const t in o){const e=o[t];if(this.isSideEffectsAnnotation(e)){r.push(e)}}return r};r.isSideEffectsAnnotation=function t(e){return(e===null||e===void 0?void 0:e.$Type)==="com.sap.vocabularies.Common.v1.SideEffectsType"};r.logRequest=function e(i,r){const o=i.reduce(function(t,e){return`${t}\n\t\t${e.$NavigationPropertyPath||e||""}`},"");t.debug(`SideEffects - Request:\n\tContext path : ${r.getPath()}\n\tProperty paths :${o}`)};r.removeBindingParameter=function t(e,i){if(i){const t=function(t){return t.replace(new RegExp(`^${i}/?`),"")};return{targetProperties:e.targetProperties.map(e=>t(e)),targetEntities:e.targetEntities.map(e=>({$NavigationPropertyPath:t(e.$NavigationPropertyPath)}))}}return{targetProperties:e.targetProperties,targetEntities:e.targetEntities}};r.removeDuplicateTargets=function t(e){const i=e.targetEntities.map(t=>t.$NavigationPropertyPath);const r=new Set(i);const o=new Set(e.targetProperties);const n=Array.from(r).map(t=>({$NavigationPropertyPath:t}));return{targetProperties:Array.from(o),targetEntities:n}};r.retrieveODataActionsSideEffects=function t(e){const i={};const r=e.actions;if(r){Object.keys(r).forEach(t=>{const r=e.actions[t];const o=new Set;let n=[];let s=[];this.getSideEffectsFromSource(r).forEach(t=>{const e=t.triggerAction;n=n.concat(t.targetProperties);s=s.concat(t.targetEntities);if(e){o.add(e)}});const a=this.removeDuplicateTargets({targetProperties:n,targetEntities:s});i[t]={pathExpressions:[...a.targetProperties,...a.targetEntities],triggerActions:Array.from(o)}})}return i};r.retrieveODataEntitySideEffects=function t(e){const i={};this.getSideEffectsFromSource(e).forEach(t=>{i[t.fullyQualifiedName]=t});return i};r.mapSideEffectSources=function t(e,i){for(const t of this.getSideEffectsAnnotationFromSource(e)){var r;for(const r of t.SourceEntities??[]){var o;const n=r.value?(o=r.$target)===null||o===void 0?void 0:o.targetType:e;if(n){if(!i.entities[n.fullyQualifiedName]){i.entities[n.fullyQualifiedName]=[]}i.entities[n.fullyQualifiedName].push({entity:e.fullyQualifiedName,qualifier:t.qualifier})}}const c=((r=t.SourceProperties)===null||r===void 0?void 0:r.length)===1;for(const r of t.SourceProperties??[]){var n,s;if(!i.properties[(n=r.$target)===null||n===void 0?void 0:n.fullyQualifiedName]){var a;i.properties[(a=r.$target)===null||a===void 0?void 0:a.fullyQualifiedName]=[]}i.properties[(s=r.$target)===null||s===void 0?void 0:s.fullyQualifiedName].push({entity:e.fullyQualifiedName,qualifier:t.qualifier,hasUniqueSourceProperty:c})}}};r.getFieldGroupIdForSideEffect=function t(e){let i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;const r=e.qualifier?`${e.entity}#${e.qualifier}`:e.entity;return i||e.hasUniqueSourceProperty===true?`${r}$$ImmediateRequest`:r};r.getInterface=function t(){return this};return i}(o);a.SideEffectsService=m;let P=function(t){y(e,t);function e(){return t.apply(this,arguments)||this}var i=e.prototype;i.createInstance=function t(e){const i=new m(e);return i.initPromise};return e}(n);return P},false);
|
|
6
6
|
//# sourceMappingURL=SideEffectsServiceFactory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SideEffectsServiceFactory.js","names":["sap","ui","define","Log","MetaModelConverter","Service","ServiceFactory","DataModelPathHelper","PropertyHelper","_exports","isProperty","getAssociatedTextPropertyPath","getTargetObjectPath","getTargetNavigationPath","enhanceDataModelPath","isEntityType","isComplexType","getInvolvedDataModelObjects","convertTypes","_inheritsLoose","subClass","superClass","prototype","Object","create","constructor","_setPrototypeOf","o","p","setPrototypeOf","bind","__proto__","SideEffectsService","_Service","apply","this","arguments","_proto","init","sideEffectsRegistry","oData","entities","actions","control","isInitialized","initPromise","Promise","resolve","addControlSideEffects","entityType","sideEffect","sourceControlId","controlSideEffect","fullyQualifiedName","entityControlSideEffects","executeAction","triggerAction","context","groupId","action","getModel","bindContext","execute","getBinding","getUpdateGroupId","getConvertedMetaModel","getMetaModel","capabilities","getEntityTypeFromContext","metaModel","metaPath","getMetaPath","getPath","getObject","getODataEntitySideEffects","entityTypeName","getGlobalODataEntitySideEffects","entitySideEffects","globalSideEffects","key","sideEffects","sourceEntities","sourceProperties","push","getODataActionSideEffects","actionName","_this$sideEffectsRegi","undefined","initializeSideEffects","sideEffectSources","properties","convertedMetaModel","entityTypes","forEach","retrieveODataEntitySideEffects","retrieveODataActionsSideEffects","mapSideEffectSources","sourcesToSideEffectMappings","removeControlSideEffects","controlId","keys","sEntityType","requestSideEffects","pathExpressions","logRequest","requestSideEffectsForODataAction","_sideEffects$triggerA","_sideEffects$pathExpr","promises","triggerActions","length","map","all","requestSideEffectsForNavigationProperty","navigationProperty","baseEntityType","navigationPath","targetProperties","targetEntities","sideEffectsTargets","filter","annotationName","some","propertyPath","startsWith","replace","indexOf","navigation","$NavigationPropertyPath","sAnnotationName","concat","sideEffectsTargetDefinition","removeDuplicateTargets","catch","error","getControlEntitySideEffects","getSideEffectWhereEntityIsSource","computeFieldGroupIds","sourceEntityType","sourceProperty","entityFieldGroupIds","sideEffectInfo","getFieldGroupIdForSideEffect","getSideEffectWherePropertyIsSource","propertyName","addTextProperties","setOfProperties","Set","setOfEntities","target","propertiesToAnalyze","reduce","dataModelPropertyPaths","getDataModelPropertiesFromAPath","dataModelPropertyPath","associatedTextPath","targetObject","dataModelTextPath","relativeNavigation","targetPath","has","navigationProperties","targetEntitySet","targetEntityType","add","Array","from","convertSideEffects","bindingParameter","TriggerAction","newSideEffects","convertSideEffectsFormat","removeBindingParameter","formatProperties","path","type","value","formatEntities","targetEntity","SourceProperties","SourceEntities","TargetProperties","TargetEntities","dataModelObjectPaths","entitySet","entitySets","find","relatedEntitySet","singletons","singleton","entitySetContext","createBindingContext","name","dataModelEntitySet","dataModelObjectPath","targetType","property","entityProperties","entityProperty","destroy","oContext","getContext","oComponent","scopeObject","getSideEffectsFromSource","source","_source$annotations","bindingAlias","isSourceEntityType","commonAnnotation","annotations","Common","_source$parameters","parameters","parameter","split","getSideEffectsAnnotationFromSource","sideEffectAnno","_source$annotations2","annotation","isSideEffectsAnnotation","$Type","targetPaths","paths","debug","bindingParameterName","replaceBindingParameter","RegExp","targetProperty","targetEntitiesPaths","uniqueTargetedEntitiesPath","uniqueTargetProperties","uniqueTargetedEntities","entityPath","oDataSideEffect","sideEffectsSources","sideEffectDefinition","_sideEffectDefinition","sourceEntity","_sourceEntity$$target","$target","entity","qualifier","hasUniqueSourceProperty","_sourceProperty$$targ","_sourceProperty$$targ3","_sourceProperty$$targ2","isImmediate","sideEffectWithQualifier","getInterface","SideEffectsServiceFactory","_ServiceFactory","_proto2","createInstance","oServiceContext","SideEffectsServiceService"],"sources":["SideEffectsServiceFactory-dbg.js"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SideEffectsServiceFactory.js","names":["sap","ui","define","Log","MetaModelConverter","TypeGuards","PropertyHelper","Service","ServiceFactory","DataModelPathHelper","_exports","getTargetObjectPath","getTargetNavigationPath","enhanceDataModelPath","getAssociatedTextPropertyPath","isProperty","isEntityType","isComplexType","getInvolvedDataModelObjects","convertTypes","_inheritsLoose","subClass","superClass","prototype","Object","create","constructor","_setPrototypeOf","o","p","setPrototypeOf","bind","__proto__","SideEffectsService","_Service","apply","this","arguments","_proto","init","sideEffectsRegistry","oData","entities","actions","control","isInitialized","initPromise","Promise","resolve","addControlSideEffects","entityType","sideEffect","sourceControlId","controlSideEffect","fullyQualifiedName","entityControlSideEffects","executeAction","triggerAction","context","groupId","action","getModel","bindContext","execute","getBinding","getUpdateGroupId","getConvertedMetaModel","getMetaModel","capabilities","getEntityTypeFromContext","metaModel","metaPath","getMetaPath","getPath","getObject","getODataEntitySideEffects","entityTypeName","getGlobalODataEntitySideEffects","entitySideEffects","globalSideEffects","key","sideEffects","sourceEntities","sourceProperties","push","getODataActionSideEffects","actionName","_this$sideEffectsRegi","undefined","initializeSideEffects","sideEffectSources","properties","convertedMetaModel","entityTypes","forEach","retrieveODataEntitySideEffects","retrieveODataActionsSideEffects","mapSideEffectSources","sourcesToSideEffectMappings","removeControlSideEffects","controlId","keys","sEntityType","requestSideEffects","pathExpressions","logRequest","requestSideEffectsForODataAction","_sideEffects$triggerA","_sideEffects$pathExpr","promises","triggerActions","length","map","all","requestSideEffectsForNavigationProperty","navigationProperty","baseEntityType","navigationPath","targetProperties","targetEntities","sideEffectsTargets","filter","annotationName","_sideEffects$sourcePr","some","navigation","$NavigationPropertyPath","propertyPath","startsWith","replace","indexOf","sAnnotationName","concat","sideEffectsTargetDefinition","removeDuplicateTargets","catch","error","getControlEntitySideEffects","getSideEffectWhereEntityIsSource","computeFieldGroupIds","sourceEntityType","sourceProperty","entityFieldGroupIds","sideEffectInfo","getFieldGroupIdForSideEffect","getSideEffectWherePropertyIsSource","propertyName","addTextProperties","setOfProperties","Set","setOfEntities","target","propertiesToAnalyze","reduce","dataModelPropertyPaths","getDataModelPropertiesFromAPath","dataModelPropertyPath","associatedTextPath","targetObject","dataModelTextPath","relativeNavigation","targetPath","has","navigationProperties","targetEntitySet","targetEntityType","add","Array","from","convertSideEffects","bindingParameter","TriggerAction","newSideEffects","convertSideEffectsFormat","removeBindingParameter","formatProperties","path","type","value","formatEntities","targetEntity","SourceProperties","SourceEntities","TargetProperties","TargetEntities","dataModelObjectPaths","entitySet","entitySets","find","relatedEntitySet","singletons","singleton","entitySetContext","createBindingContext","name","dataModelEntitySet","dataModelObjectPath","targetType","property","entityProperties","entityProperty","destroy","oContext","getContext","oComponent","scopeObject","getSideEffectsFromSource","source","_source$annotations","bindingAlias","isSourceEntityType","commonAnnotation","annotations","Common","_source$parameters","parameters","parameter","split","getSideEffectsAnnotationFromSource","sideEffectAnno","_source$annotations2","annotation","isSideEffectsAnnotation","$Type","targetPaths","paths","debug","bindingParameterName","replaceBindingParameter","RegExp","targetProperty","targetEntitiesPaths","uniqueTargetedEntitiesPath","uniqueTargetProperties","uniqueTargetedEntities","entityPath","oDataSideEffect","sideEffectsSources","sideEffectDefinition","_sideEffectDefinition","sourceEntity","_sourceEntity$$target","$target","entity","qualifier","hasUniqueSourceProperty","_sourceProperty$$targ","_sourceProperty$$targ3","_sourceProperty$$targ2","isImmediate","sideEffectWithQualifier","getInterface","SideEffectsServiceFactory","_ServiceFactory","_proto2","createInstance","oServiceContext","SideEffectsServiceService"],"sources":["SideEffectsServiceFactory-dbg.js"],"mappings":"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"}
|