@sapui5/sap.fe.core 1.124.2 → 1.126.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 +5 -1
- package/src/sap/fe/core/ActionRuntime.js +2 -2
- package/src/sap/fe/core/ActionRuntime.ts +4 -4
- package/src/sap/fe/core/AppComponent.js +2 -2
- package/src/sap/fe/core/AppComponent.ts +1 -1
- package/src/sap/fe/core/AppStateHandler.js +2 -2
- package/src/sap/fe/core/AppStateHandler.ts +1 -1
- package/src/sap/fe/core/BaseController.js +2 -2
- package/src/sap/fe/core/BaseController.ts +1 -1
- package/src/sap/fe/core/CommonUtils.js +3 -3
- package/src/sap/fe/core/CommonUtils.ts +12 -15
- package/src/sap/fe/core/ExtensionAPI.js +2 -2
- package/src/sap/fe/core/ExtensionAPI.ts +4 -3
- package/src/sap/fe/core/PageController.js +2 -2
- package/src/sap/fe/core/PageController.ts +1 -1
- package/src/sap/fe/core/ResourceModel.js +2 -2
- package/src/sap/fe/core/ResourceModel.ts +1 -1
- package/src/sap/fe/core/ReuseComponent.js +172 -0
- package/src/sap/fe/core/ReuseComponent.ts +165 -0
- package/src/sap/fe/core/TemplateComponent.js +2 -2
- package/src/sap/fe/core/TemplateComponent.ts +5 -1
- package/src/sap/fe/core/TemplateModel.js +2 -2
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +92 -6
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +90 -10
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +30 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +28 -4
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +10 -16
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +19 -16
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +3 -3
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +5 -5
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +2 -2
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +1 -1
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +17 -5
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +14 -6
- package/src/sap/fe/core/controllerextensions/ContextSharing.js +2 -2
- package/src/sap/fe/core/controllerextensions/ContextSharing.ts +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +57 -43
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +61 -46
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +2 -2
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -11
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +8 -16
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +10 -7
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +5 -5
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +22 -18
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +28 -23
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +4 -4
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +4 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +21 -15
- package/src/sap/fe/core/controllerextensions/PageReady.ts +29 -20
- package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
- package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +12 -6
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +15 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +26 -8
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +29 -3
- package/src/sap/fe/core/controllerextensions/Routing.js +5 -7
- package/src/sap/fe/core/controllerextensions/Routing.ts +4 -4
- package/src/sap/fe/core/controllerextensions/Share.js +4 -4
- package/src/sap/fe/core/controllerextensions/Share.ts +10 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.js +20 -5
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +22 -2
- package/src/sap/fe/core/controllerextensions/Telemetry.js +2 -2
- package/src/sap/fe/core/controllerextensions/Telemetry.ts +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js +79 -81
- package/src/sap/fe/core/controllerextensions/ViewState.ts +117 -105
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +3 -3
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +2 -2
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +17 -8
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +8 -2
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +10 -9
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +15 -10
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +130 -158
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +240 -275
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +1 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +46 -28
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +60 -32
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +2 -2
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +2 -2
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +27 -3
- package/src/sap/fe/core/controls/CommandExecution.js +2 -2
- package/src/sap/fe/core/controls/CommandExecution.ts +2 -2
- package/src/sap/fe/core/controls/ComponentLoader.js +3 -3
- package/src/sap/fe/core/controls/ComponentLoader.ts +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +2 -2
- package/src/sap/fe/core/controls/EventDelegateHook.js +2 -2
- package/src/sap/fe/core/controls/EventDelegateHook.ts +2 -2
- package/src/sap/fe/core/controls/FormElementWrapper.js +51 -6
- package/src/sap/fe/core/controls/FormElementWrapper.ts +43 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +3 -3
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +3 -3
- package/src/sap/fe/core/converters/ConverterContext.js +4 -2
- package/src/sap/fe/core/converters/ConverterContext.ts +5 -2
- package/src/sap/fe/core/converters/ManifestSettings.js +8 -2
- package/src/sap/fe/core/converters/ManifestSettings.ts +25 -3
- package/src/sap/fe/core/converters/ManifestWrapper.js +12 -3
- package/src/sap/fe/core/converters/ManifestWrapper.ts +11 -1
- package/src/sap/fe/core/converters/MetaModelConverter.js +7 -6
- package/src/sap/fe/core/converters/MetaModelConverter.ts +6 -2
- package/src/sap/fe/core/converters/annotations/DataField.js +56 -16
- package/src/sap/fe/core/converters/annotations/DataField.ts +74 -25
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +19 -18
- package/src/sap/fe/core/converters/controls/Common/Action.js +5 -5
- package/src/sap/fe/core/converters/controls/Common/Action.ts +14 -14
- package/src/sap/fe/core/converters/controls/Common/Chart.js +40 -7
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +56 -20
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +8 -11
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +23 -27
- package/src/sap/fe/core/converters/controls/Common/Form.js +10 -3
- package/src/sap/fe/core/converters/controls/Common/Form.ts +13 -4
- package/src/sap/fe/core/converters/controls/Common/KPI.js +3 -2
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +6 -2
- package/src/sap/fe/core/converters/controls/Common/Table.js +137 -48
- package/src/sap/fe/core/converters/controls/Common/Table.ts +174 -52
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +73 -21
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +91 -20
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +4 -4
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -16
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +18 -17
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +2 -2
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +9 -9
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +12 -12
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -7
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -5
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +9 -73
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +4 -74
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +5 -10
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +3 -12
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +4 -7
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/FiscalFormat.js +5 -3
- package/src/sap/fe/core/formatters/FiscalFormat.ts +4 -2
- package/src/sap/fe/core/formatters/StandardFormatter.js +2 -2
- package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
- package/src/sap/fe/core/fpm/Component.js +3 -3
- package/src/sap/fe/core/fpm/Component.ts +3 -3
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +2 -2
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.ts +1 -1
- package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
- package/src/sap/fe/core/helpers/BindingHelper.ts +2 -2
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +2 -2
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.ts +2 -2
- package/src/sap/fe/core/helpers/DeleteHelper.js +7 -4
- package/src/sap/fe/core/helpers/DeleteHelper.ts +9 -3
- package/src/sap/fe/core/helpers/MetaModelFunction.js +5 -5
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +2 -2
- package/src/sap/fe/core/helpers/MetaPath.js +9 -3
- package/src/sap/fe/core/helpers/MetaPath.ts +8 -2
- package/src/sap/fe/core/helpers/ModelHelper.js +149 -3
- package/src/sap/fe/core/helpers/ModelHelper.ts +202 -6
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +3 -3
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +2 -2
- package/src/sap/fe/core/helpers/TitleHelper.js +4 -4
- package/src/sap/fe/core/helpers/TitleHelper.ts +4 -4
- package/src/sap/fe/core/library.js +4 -4
- package/src/sap/fe/core/library.ts +2 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +11 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +10 -2
- package/src/sap/fe/core/messagebundle.properties +8 -57
- package/src/sap/fe/core/messagebundle_ar.properties +2 -0
- package/src/sap/fe/core/messagebundle_bg.properties +2 -0
- package/src/sap/fe/core/messagebundle_ca.properties +2 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +2 -0
- package/src/sap/fe/core/messagebundle_cs.properties +2 -0
- package/src/sap/fe/core/messagebundle_cy.properties +4 -2
- package/src/sap/fe/core/messagebundle_da.properties +2 -0
- package/src/sap/fe/core/messagebundle_de.properties +2 -0
- package/src/sap/fe/core/messagebundle_el.properties +2 -0
- package/src/sap/fe/core/messagebundle_en.properties +6 -57
- package/src/sap/fe/core/messagebundle_en_GB.properties +2 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +3 -36
- package/src/sap/fe/core/messagebundle_es.properties +2 -0
- package/src/sap/fe/core/messagebundle_es_MX.properties +2 -0
- package/src/sap/fe/core/messagebundle_et.properties +2 -0
- package/src/sap/fe/core/messagebundle_fi.properties +2 -0
- package/src/sap/fe/core/messagebundle_fr.properties +2 -0
- package/src/sap/fe/core/messagebundle_fr_CA.properties +3 -1
- package/src/sap/fe/core/messagebundle_hi.properties +2 -0
- package/src/sap/fe/core/messagebundle_hr.properties +2 -0
- package/src/sap/fe/core/messagebundle_hu.properties +3 -1
- package/src/sap/fe/core/messagebundle_id.properties +2 -0
- package/src/sap/fe/core/messagebundle_it.properties +2 -0
- package/src/sap/fe/core/messagebundle_iw.properties +3 -1
- package/src/sap/fe/core/messagebundle_ja.properties +2 -0
- package/src/sap/fe/core/messagebundle_kk.properties +2 -0
- package/src/sap/fe/core/messagebundle_ko.properties +2 -0
- package/src/sap/fe/core/messagebundle_lt.properties +2 -0
- package/src/sap/fe/core/messagebundle_lv.properties +2 -0
- package/src/sap/fe/core/messagebundle_mk.properties +2 -0
- package/src/sap/fe/core/messagebundle_ms.properties +2 -0
- package/src/sap/fe/core/messagebundle_nl.properties +2 -0
- package/src/sap/fe/core/messagebundle_no.properties +2 -0
- package/src/sap/fe/core/messagebundle_pl.properties +2 -0
- package/src/sap/fe/core/messagebundle_pt.properties +2 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -0
- package/src/sap/fe/core/messagebundle_ro.properties +2 -0
- package/src/sap/fe/core/messagebundle_ru.properties +2 -0
- package/src/sap/fe/core/messagebundle_sh.properties +64 -62
- package/src/sap/fe/core/messagebundle_sk.properties +2 -0
- package/src/sap/fe/core/messagebundle_sl.properties +2 -0
- package/src/sap/fe/core/messagebundle_sr.properties +2 -0
- package/src/sap/fe/core/messagebundle_sv.properties +2 -0
- package/src/sap/fe/core/messagebundle_th.properties +2 -0
- package/src/sap/fe/core/messagebundle_tr.properties +2 -0
- package/src/sap/fe/core/messagebundle_uk.properties +3 -1
- package/src/sap/fe/core/messagebundle_vi.properties +2 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -0
- package/src/sap/fe/core/operationsHelper.js +3 -3
- package/src/sap/fe/core/operationsHelper.ts +2 -2
- package/src/sap/fe/core/rootView/Fcl.controller.js +3 -3
- package/src/sap/fe/core/rootView/Fcl.controller.ts +2 -2
- package/src/sap/fe/core/rootView/NavContainer.controller.js +2 -2
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +114 -92
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +120 -106
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +2 -2
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.js +6 -4
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +4 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.ts +12 -2
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +8 -2
- package/src/sap/fe/core/services/TelemetryServiceFactory.ts +7 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +16 -9
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +22 -11
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
- package/src/sap/fe/core/templating/ActionHelper.js +2 -2
- package/src/sap/fe/core/templating/ActionHelper.ts +2 -2
- package/src/sap/fe/core/templating/CommonFormatters.js +2 -2
- package/src/sap/fe/core/templating/CommonFormatters.ts +3 -3
- package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +2 -2
- package/src/sap/fe/core/templating/DataFieldFormatters.js +4 -4
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +2 -2
- package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -2
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +2 -2
- package/src/sap/fe/core/templating/EntityTypeHelper.js +2 -2
- package/src/sap/fe/core/templating/EntityTypeHelper.ts +2 -2
- package/src/sap/fe/core/templating/FieldControlHelper.js +2 -2
- package/src/sap/fe/core/templating/FieldControlHelper.ts +2 -2
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +2 -2
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +2 -2
- package/src/sap/fe/core/templating/UIFormatters.js +7 -7
- package/src/sap/fe/core/templating/UIFormatters.ts +6 -6
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +1 -1
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +1 -1
- package/src/sap/fe/core/type/FiscalDate.js +2 -2
- package/src/sap/fe/core/type/FiscalDate.ts +1 -1
- package/src/sap/fe/core/type/InputMask.js +124 -0
- package/src/sap/fe/core/type/InputMask.ts +131 -0
- package/ui5.yaml +19 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +0 -81
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +0 -117
- package/src/sap/fe/core/helpers/AnnotationEnum.js +0 -33
- package/src/sap/fe/core/helpers/AnnotationEnum.ts +0 -21
- package/src/sap/fe/core/helpers/BindingToolkit.js +0 -1813
- package/src/sap/fe/core/helpers/BindingToolkit.ts +0 -2450
- package/src/sap/fe/core/helpers/ClassSupport.js +0 -584
- package/src/sap/fe/core/helpers/ClassSupport.ts +0 -697
- package/src/sap/fe/core/jsx-runtime/Fragment.js +0 -14
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +0 -3
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js +0 -93
- package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +0 -86
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +0 -177
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +0 -197
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +0 -237
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +0 -246
- package/src/sap/fe/core/jsx-runtime/jsx.js +0 -47
- package/src/sap/fe/core/jsx-runtime/jsx.ts +0 -71
- package/src/sap/fe/core/jsx-runtime/jsxs.js +0 -10
- package/src/sap/fe/core/jsx-runtime/jsxs.ts +0 -3
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +0 -172
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +0 -194
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/* This class contains helpers to be used at runtime to retrieve further information on the model */
|
|
2
|
-
import type { EntitySet, EntityType, Property, Singleton } from "@sap-ux/vocabularies-types";
|
|
2
|
+
import type { ComplexType, EntitySet, EntityType, Property, Singleton } from "@sap-ux/vocabularies-types";
|
|
3
3
|
import type { DraftNode, DraftRoot } from "@sap-ux/vocabularies-types/vocabularies/Common";
|
|
4
4
|
import type { StickySessionSupported } from "@sap-ux/vocabularies-types/vocabularies/Session";
|
|
5
5
|
import type { DeleteHidden, UpdateHidden } from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
6
|
+
import type { EntityTypeAnnotations_UI } from "@sap-ux/vocabularies-types/vocabularies/UI_Edm";
|
|
6
7
|
import Log from "sap/base/Log";
|
|
8
|
+
import { compileExpression } from "sap/fe/base/BindingToolkit";
|
|
7
9
|
import type { FEView } from "sap/fe/core/BaseController";
|
|
8
10
|
import Any from "sap/fe/core/controls/Any";
|
|
9
11
|
import type ConverterContext from "sap/fe/core/converters/ConverterContext";
|
|
@@ -19,20 +21,30 @@ import BindingMode from "sap/ui/model/BindingMode";
|
|
|
19
21
|
import type BaseContext from "sap/ui/model/Context";
|
|
20
22
|
import type ContextBinding from "sap/ui/model/ContextBinding";
|
|
21
23
|
import type MetaModel from "sap/ui/model/MetaModel";
|
|
24
|
+
import type PropertyBinding from "sap/ui/model/PropertyBinding";
|
|
22
25
|
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
26
|
+
import Raw from "sap/ui/model/odata/type/Raw";
|
|
23
27
|
import type { default as Context, default as ODataV4Context } from "sap/ui/model/odata/v4/Context";
|
|
24
|
-
import type ODataListBinding from "sap/ui/model/odata/v4/ODataListBinding";
|
|
28
|
+
import type { default as ODataListBinding } from "sap/ui/model/odata/v4/ODataListBinding";
|
|
25
29
|
import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
|
|
26
30
|
import type ODataModel from "sap/ui/model/odata/v4/ODataModel";
|
|
27
31
|
import type ODataPropertyBinding from "sap/ui/model/odata/v4/ODataPropertyBinding";
|
|
28
|
-
import {
|
|
32
|
+
import type { ODataPropertyBinding$ChangeEvent } from "sap/ui/model/odata/v4/ODataPropertyBinding";
|
|
33
|
+
|
|
34
|
+
// TODO: Right now recommendations is not part of the UI vocabulary.
|
|
35
|
+
// hence we are adding it to the type.
|
|
36
|
+
// once this becomes part of the UI vocabulary then we can remove this.
|
|
37
|
+
export type EntityTypeAnnotations_UI_With_Recommendations = EntityTypeAnnotations_UI & {
|
|
38
|
+
Recommendations?: {
|
|
39
|
+
path: string;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
29
42
|
|
|
30
43
|
const ModelHelper = {
|
|
31
44
|
// global switch to disable the collaboration draft by a private manifest flag
|
|
32
45
|
// this allows customers to disable the collaboration draft in case we run into issues with the first delivery
|
|
33
46
|
// this will be removed with the next S/4 release
|
|
34
47
|
disableCollaborationDraft: false,
|
|
35
|
-
|
|
36
48
|
/**
|
|
37
49
|
* Method to determine if the programming model is sticky.
|
|
38
50
|
*
|
|
@@ -616,6 +628,10 @@ const ModelHelper = {
|
|
|
616
628
|
};
|
|
617
629
|
const fnBindProperty = odataModel.bindProperty.bind(odataModel);
|
|
618
630
|
odataModel.bindProperty = function (path: string, context: ODataV4Context, parameters): ODataPropertyBinding {
|
|
631
|
+
const recommendationPropertyBinding = ModelHelper.setUpRecommendationLocalModelBinding(this, fnBindProperty, path, context);
|
|
632
|
+
if (recommendationPropertyBinding) {
|
|
633
|
+
return recommendationPropertyBinding as ODataPropertyBinding;
|
|
634
|
+
}
|
|
619
635
|
if (path.endsWith("@$ui5.fe.@Common/ExternalID") && context) {
|
|
620
636
|
const internalIdBinding = fnBindProperty(path, context);
|
|
621
637
|
odataModel.virtualPropertyBindingRegistry.push(internalIdBinding);
|
|
@@ -687,7 +703,6 @@ const ModelHelper = {
|
|
|
687
703
|
return fnDestroy.apply(this);
|
|
688
704
|
};
|
|
689
705
|
},
|
|
690
|
-
|
|
691
706
|
/**
|
|
692
707
|
* Resolves a metadata binding to its text, either using the converterContext or the metaModel directly.
|
|
693
708
|
*
|
|
@@ -724,12 +739,193 @@ const ModelHelper = {
|
|
|
724
739
|
getMessagesPath: function (metaModel: ODataMetaModel, contextPath: string): string | undefined {
|
|
725
740
|
const metaContext = metaModel.getMetaContext(contextPath);
|
|
726
741
|
const objectPath = getInvolvedDataModelObjects(metaContext);
|
|
727
|
-
|
|
728
742
|
const messages = objectPath.targetEntityType.annotations.Common?.Messages;
|
|
729
743
|
return isPathAnnotationExpression(messages) ? messages.path : undefined;
|
|
744
|
+
},
|
|
745
|
+
/**
|
|
746
|
+
* Setup recommendation local binding to make recommendations accessible via client side instance annotations.
|
|
747
|
+
*
|
|
748
|
+
* Recommendations is a complex property.
|
|
749
|
+
* Model does not provide an easy way to bind to complex properties. It has 2 major limitations.
|
|
750
|
+
*
|
|
751
|
+
* It only supports one time binding to complex properties. This is needed to show updated recommendations on the UI.
|
|
752
|
+
* It does not support bindings to properties inside a complex property which is needed for recommendations.
|
|
753
|
+
*
|
|
754
|
+
* This function provides a workaround to overcome the above two short comings and
|
|
755
|
+
* to support client side instance annotations for recommendations.
|
|
756
|
+
*
|
|
757
|
+
* @param odataModel The odata model instance.
|
|
758
|
+
* @param fnBindProperty Original bind property of the oDataModel
|
|
759
|
+
* @param path Binding path for which recommendation is being requested
|
|
760
|
+
* @param context Context where recommendation is being requested
|
|
761
|
+
* @returns Recommendation property path for the entity related to the context and whether the bindingPath is relevant or not based on metadata.
|
|
762
|
+
*/
|
|
763
|
+
setUpRecommendationLocalModelBinding: function (
|
|
764
|
+
odataModel: ODataModel,
|
|
765
|
+
fnBindProperty: Function,
|
|
766
|
+
path: string,
|
|
767
|
+
context: ODataV4Context
|
|
768
|
+
): PropertyBinding | undefined {
|
|
769
|
+
if (path.includes("ui5.fe.recommendations")) {
|
|
770
|
+
const recommendationbinding = odataModel
|
|
771
|
+
.getLocalAnnotationModel()
|
|
772
|
+
.bindProperty(path, context) as unknown as ODataPropertyBinding;
|
|
773
|
+
if (context) {
|
|
774
|
+
const { recommendationComplexProperty, isRecommendedProperty } = ModelHelper.validateRecommendationBindingPath(
|
|
775
|
+
context,
|
|
776
|
+
path
|
|
777
|
+
);
|
|
778
|
+
if (recommendationComplexProperty && isRecommendedProperty) {
|
|
779
|
+
const alreadyBound = odataModel.virtualPropertyBindingRegistry.some((existingBinding) => {
|
|
780
|
+
return (
|
|
781
|
+
// binding exists but the context can be destroyed sometimes because of discard and delete.
|
|
782
|
+
// hence we need to check if context exists or not before deciding if we already have a binding or not.
|
|
783
|
+
// TODO: We might want to clear the property binding when the contex is destroyed.
|
|
784
|
+
context.getPath() === existingBinding.getContext()?.getPath() &&
|
|
785
|
+
recommendationComplexProperty === existingBinding.getPath()
|
|
786
|
+
);
|
|
787
|
+
});
|
|
788
|
+
if (!alreadyBound) {
|
|
789
|
+
const odataPropertyBinding = fnBindProperty(recommendationComplexProperty, context) as ODataPropertyBinding;
|
|
790
|
+
// Becuase recommendations is a complex property and not a primitive type hence use a raw type.
|
|
791
|
+
odataPropertyBinding.setType(new Raw(), "any");
|
|
792
|
+
odataPropertyBinding.setBindingMode("OneTime");
|
|
793
|
+
odataModel.virtualPropertyBindingRegistry.push(odataPropertyBinding);
|
|
794
|
+
// Model does not support one way binding to complex properties.
|
|
795
|
+
// so we have to somehow replicate the one way behaviour
|
|
796
|
+
// hence we make the model think we are a ParentBinding somehow...
|
|
797
|
+
// TODO: Discuss with model to provide a better solution.
|
|
798
|
+
(
|
|
799
|
+
odataPropertyBinding as ODataPropertyBinding & {
|
|
800
|
+
refreshDependentListBindingsWithoutCache?: Function;
|
|
801
|
+
refreshInternal: Function;
|
|
802
|
+
}
|
|
803
|
+
).refreshDependentListBindingsWithoutCache = function (): void {
|
|
804
|
+
// Force the binding refresh
|
|
805
|
+
this.refreshInternal("", undefined, true);
|
|
806
|
+
};
|
|
807
|
+
odataPropertyBinding.attachChange((event: ODataPropertyBinding$ChangeEvent) => {
|
|
808
|
+
// refresh the local annotation binding once recommendation binding is updated.
|
|
809
|
+
const propertyBinding = event.getSource();
|
|
810
|
+
const currentContext = event.getSource().getContext() as ODataV4Context;
|
|
811
|
+
if (currentContext) {
|
|
812
|
+
const contextRecommendations = propertyBinding.getValue();
|
|
813
|
+
ModelHelper.setRecommendationsOnLocalAnnotationModel(contextRecommendations, currentContext);
|
|
814
|
+
}
|
|
815
|
+
});
|
|
816
|
+
// reuestValue will add the recommendation property to the $select
|
|
817
|
+
// hence we do not need to add it to the $select when constructing the binding at various places (forms, table etc.)
|
|
818
|
+
odataPropertyBinding.requestValue().catch((error) => {
|
|
819
|
+
Log.error("Recommendations could not be resolved", error);
|
|
820
|
+
});
|
|
821
|
+
}
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
// We need to ensure that the binding becomes invalid and a new binding is created so the recommendation property binding can be created.
|
|
825
|
+
//
|
|
826
|
+
// For this we need to override updateRequired so that the binding is updated until it has not received a context
|
|
827
|
+
// post that we do not need the binding to be updated.
|
|
828
|
+
// If we remove the updateRequired override then recommendations work fine by during save of a newly created document
|
|
829
|
+
// we get binding related issues.
|
|
830
|
+
//
|
|
831
|
+
// Updating the binding to recommendations will be done by setProperty on the localAnnotationModel
|
|
832
|
+
// when the recommendation property is actually updated.
|
|
833
|
+
recommendationbinding.updateRequired = function (model: object): boolean {
|
|
834
|
+
return this.getContext() ? model && model === odataModel : model && this.getModel() === model;
|
|
835
|
+
};
|
|
836
|
+
return recommendationbinding;
|
|
837
|
+
}
|
|
838
|
+
},
|
|
839
|
+
/**
|
|
840
|
+
* Validates based on metadata whether a given binding should deal with recommendations or not.
|
|
841
|
+
*
|
|
842
|
+
* @param context Context where recommendation is being requested.
|
|
843
|
+
* @param bindingPath Binding path for which recommendation is being requested.
|
|
844
|
+
* @returns Recommendation property path for the entity related to the context and whether the bindingPath is relevant or not based on metadata.
|
|
845
|
+
*/
|
|
846
|
+
validateRecommendationBindingPath: function (
|
|
847
|
+
context: ODataV4Context,
|
|
848
|
+
bindingPath: string
|
|
849
|
+
): { recommendationComplexProperty: string | undefined; isRecommendedProperty: boolean } {
|
|
850
|
+
const metaModel = context.getModel().getMetaModel();
|
|
851
|
+
const contextMetaPath = metaModel.getMetaPath(context.getPath());
|
|
852
|
+
const metaContext = metaModel.getMetaContext(contextMetaPath);
|
|
853
|
+
const targetEntityType = getInvolvedDataModelObjects(metaContext).targetEntityType;
|
|
854
|
+
const recommendationComplexProperty = (targetEntityType?.annotations?.UI as EntityTypeAnnotations_UI_With_Recommendations)
|
|
855
|
+
?.Recommendations?.path;
|
|
856
|
+
// sample binding - ShippingCondition@$ui5.fe.recommendations.placeholderValue
|
|
857
|
+
const propertyPath = bindingPath.split("@$ui5.fe.recommendations")[0];
|
|
858
|
+
const isRecommendedProperty = targetEntityType.entityProperties.some((entityProperty) => {
|
|
859
|
+
if (entityProperty.name === recommendationComplexProperty) {
|
|
860
|
+
return (entityProperty?.targetType as ComplexType)?.properties.some((property) => {
|
|
861
|
+
return propertyPath === property.name;
|
|
862
|
+
});
|
|
863
|
+
}
|
|
864
|
+
});
|
|
865
|
+
return {
|
|
866
|
+
recommendationComplexProperty,
|
|
867
|
+
isRecommendedProperty
|
|
868
|
+
};
|
|
869
|
+
},
|
|
870
|
+
/**
|
|
871
|
+
* Update recommendation client side instance annotations.
|
|
872
|
+
*
|
|
873
|
+
* @param contextRecommendations Updated recommendations.
|
|
874
|
+
* @param currentContext Context where recommendation was updated.
|
|
875
|
+
*/
|
|
876
|
+
setRecommendationsOnLocalAnnotationModel: function (contextRecommendations: Recommendations, currentContext: ODataV4Context): void {
|
|
877
|
+
if (contextRecommendations) {
|
|
878
|
+
for (const recommendedProperty in contextRecommendations) {
|
|
879
|
+
const propertyRecommendations = contextRecommendations[recommendedProperty];
|
|
880
|
+
const localModelPath = recommendedProperty;
|
|
881
|
+
const localAnnotationModel = currentContext.getModel().getLocalAnnotationModel();
|
|
882
|
+
const typeAheadValues = [];
|
|
883
|
+
for (const propertyRecommendation of propertyRecommendations) {
|
|
884
|
+
if (propertyRecommendation.RecommendedFieldIsSuggestion) {
|
|
885
|
+
const placeholderValueAnnotationPath = currentContext.getPath(
|
|
886
|
+
localModelPath + "@$ui5.fe.recommendations.placeholderValue"
|
|
887
|
+
);
|
|
888
|
+
const placeholderDescriptionAnnotationPath = currentContext.getPath(
|
|
889
|
+
localModelPath + "@$ui5.fe.recommendations.placeholderDescription"
|
|
890
|
+
);
|
|
891
|
+
localAnnotationModel.setProperty(
|
|
892
|
+
placeholderValueAnnotationPath,
|
|
893
|
+
propertyRecommendation.RecommendedFieldValue,
|
|
894
|
+
currentContext,
|
|
895
|
+
false
|
|
896
|
+
);
|
|
897
|
+
localAnnotationModel.setProperty(
|
|
898
|
+
placeholderDescriptionAnnotationPath,
|
|
899
|
+
propertyRecommendation.RecommendedFieldDescription,
|
|
900
|
+
currentContext,
|
|
901
|
+
false
|
|
902
|
+
);
|
|
903
|
+
// set placeholder description and values
|
|
904
|
+
}
|
|
905
|
+
//localAnnotationModel.
|
|
906
|
+
// push top 3 recommendation values
|
|
907
|
+
if (propertyRecommendation.RecommendedFieldValue) {
|
|
908
|
+
typeAheadValues.push(propertyRecommendation.RecommendedFieldValue);
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
localAnnotationModel.setProperty(
|
|
912
|
+
currentContext.getPath(localModelPath + "@$ui5.fe.recommendations.typeAheadValues"),
|
|
913
|
+
typeAheadValues,
|
|
914
|
+
currentContext,
|
|
915
|
+
false
|
|
916
|
+
);
|
|
917
|
+
}
|
|
918
|
+
}
|
|
730
919
|
}
|
|
731
920
|
};
|
|
732
921
|
|
|
922
|
+
type Recommendations = Record<string, RecommendationDetails[]>;
|
|
923
|
+
type RecommendationDetails = {
|
|
924
|
+
RecommendedFieldValue: string;
|
|
925
|
+
RecommendedFieldIsSuggestion: boolean;
|
|
926
|
+
RecommendedFieldDescription: string;
|
|
927
|
+
};
|
|
928
|
+
|
|
733
929
|
export type InternalModelContext = { getModel(): JSONModel } & BaseContext & {
|
|
734
930
|
setProperty(sPath: string, vValue: unknown): void;
|
|
735
931
|
};
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2024 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "../templating/UIFormatters", "./
|
|
5
|
+
sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/MetaModelConverter", "../templating/UIFormatters", "./BindingToolkitEvaluator", "./TypeGuards"], function (BindingToolkit, MetaModelConverter, UIFormatters, BindingToolkitEvaluator, TypeGuards) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
9
|
var isPropertyPathExpression = TypeGuards.isPropertyPathExpression;
|
|
10
10
|
var isPathAnnotationExpression = TypeGuards.isPathAnnotationExpression;
|
|
11
11
|
var evaluateExpression = BindingToolkitEvaluator.evaluateExpression;
|
|
12
|
+
var getDisplayMode = UIFormatters.getDisplayMode;
|
|
12
13
|
var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
|
|
13
14
|
var compileExpression = BindingToolkit.compileExpression;
|
|
14
|
-
var getDisplayMode = UIFormatters.getDisplayMode;
|
|
15
15
|
let rootContext;
|
|
16
16
|
const standardRecommendationHelper = {
|
|
17
17
|
/**
|
|
@@ -310,4 +310,4 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "../templating/UIFor
|
|
|
310
310
|
_exports.standardRecommendationHelper = standardRecommendationHelper;
|
|
311
311
|
return _exports;
|
|
312
312
|
}, false);
|
|
313
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyb290Q29udGV4dCIsInN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIiLCJzdG9yZVJlY29tbWVuZGF0aW9ucyIsInJlY29tbWVuZGF0aW9ucyIsImludGVybmFsTW9kZWwiLCJyZWNvbW1lbmRhdGlvbnNDb250ZXh0cyIsInJlY29tbWVuZGF0aW9uc0RhdGEiLCJnZXRQcm9wZXJ0eSIsImNsZWFyUmVjb21tZW5kYXRpb25zRGF0YUZyb21Nb2RlbEZvckdpdmVuQ29udGV4dHMiLCJlbmhhbmNlUmVjb21tZW5kYXRpb25Nb2RlbCIsInVwZGF0ZUZldGNoZWRDb250ZXh0UGF0aHMiLCJ1cGRhdGVDb250ZXh0c0tleXNJbk1vZGVsIiwic2V0UHJvcGVydHkiLCJyZWZyZXNoIiwiaWdub3JlUmVjb21tZW5kYXRpb25Gb3JDb250ZXh0cyIsImNvbnRleHRzIiwicmVjb21tZW5kYXRpb25Db250ZXh0cyIsInJlY29tbWVuZGF0aW9uRGF0YSIsImlnbm9yZWRDb250ZXh0UGF0aHMiLCJmb3JFYWNoIiwiY29udGV4dCIsImlnbm9yZWRDb250ZXh0UGF0aCIsImdldFBhdGgiLCJwdXNoIiwiZmlsdGVyIiwiY29udGV4dEluZm8iLCJzdGFydHNXaXRoIiwiT2JqZWN0Iiwia2V5cyIsImRhdGEiLCJjbGVhcklnbm9yZWRDb250ZXh0cyIsImNvbnRleHRQYXRoIiwiY2hlY2tJZlJlY29tbWVuZGF0aW9uUm9sZUV4aXN0c0ZvckNvbnRleHQiLCJyZWNvbW1lbmRhdGlvbnNSZWdpc3RyeSIsImRhdGFNb2RlbE9iamVjdCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGgiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImVudGl0eVR5cGUiLCJ0YXJnZXRFbnRpdHlUeXBlIiwibmFtZSIsInJvbGVzIiwiaW5jbHVkZXMiLCJoYXNPd25Qcm9wZXJ0eSIsImtleXNEYXRhIiwibWV0YU1vZGVsIiwibWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsImRhdGFNb2RlbCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldE1ldGFDb250ZXh0Iiwic2VtYW50aWNLZXlzRm9yR2l2ZW5NZXRhUGF0aCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiU2VtYW50aWNLZXkiLCJtYXAiLCJpIiwidmFsdWUiLCJ0YXJnZXQiLCJpZHgiLCJsYXN0SW5kZXhPZiIsImZpbmQiLCJzdWJzdHJpbmciLCJyZWNvbW1lbmRhdGlvbiIsIkFJUmVjb21tZW5kZWRGaWVsZFBhdGgiLCJyZWNvbW1lbmRhdGlvblZhbHVlcyIsImlzUGxhY2Vob2xkZXJWYWx1ZUZvdW5kIiwiX0FJQWx0dlJlY21kZEZsZFZhbHMiLCJhbHRlcm5hdGl2ZVJlY29tbWVuZGF0aW9uIiwicmVjb21tZW5kYXRpb25WYWx1ZSIsIkFJUmVjb21tZW5kZWRGaWVsZFZhbHVlIiwicHJvYmFiaWxpdHkiLCJBSVJlY29tbWVuZGVkRmllbGRTY29yZVZhbHVlIiwidW5kZWZpbmVkIiwidGV4dCIsIkFJUmVjb21tZW5kZWRGaWVsZERlc2NyaXB0aW9uIiwiYWRkaXRpb25hbFZhbHVlcyIsImdldFN0YW5kYXJkUmVjb21tZW5kYXRpb25zIiwiYmluZGluZ0NvbnRleHQiLCJwcm9wZXJ0eVBhdGgiLCJmdWxsUGF0aCIsImdldERpc3BsYXlNb2RlRm9yVGFyZ2V0UGF0aCIsInRhcmdldFBhdGgiLCJpbnZvbHZlZERhdGFNb2RlbE9iamVjdCIsImRpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJpc1JlY29tbWVuZGF0aW9uRmllbGROdWxsIiwia2V5IiwicHJvcGVydHkiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsInRhcmdldE9iamVjdCIsIlRleHQiLCJwYXRoIiwiZmV0Y2hlZENvbnRleHRQYXRocyIsImdldENvbnRleHRzV2l0aE5vUmVjb21tZW5kYXRpb25zIiwiY29udGV4dHNJbmZvIiwicmVzZXRSZWNvbW1lbmRhdGlvbnMiLCJyZWNvbW1lbmRhdGlvbnNEYXRhSW5Nb2RlbCIsImdldEN1cnJlbnRSb290Q29udGV4dCIsInNldEN1cnJlbnRSb290Q29udGV4dCIsImFkZENvbnRleHRJZGVudGlmaWVyVGV4dCIsInBhcmFtcyIsInZpZXdQYXRoIiwiaW5kZXgiLCJpZGVudGlmaWVyVmFsdWVzIiwiY29udGV4dElkZW50aWZpZXIiLCJpZFBhdGgiLCJjb250ZXh0VGV4dCIsImdldFRleHRGb3JLZXkiLCJjb250ZXh0SWRlbnRpZmllclRleHQiLCJnZXRFbnRpdHlOYW1lIiwidHlwZU5hbWUiLCJVSSIsIkhlYWRlckluZm8iLCJUeXBlTmFtZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwia2V5UGF0aCIsImlzUHJvcGVydHlQYXRoRXhwcmVzc2lvbiIsIiR0YXJnZXQiLCJldmFsdWF0ZUV4cHJlc3Npb24iLCJnZXRPYmplY3QiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBSZWNvbW1lbmRhdGlvbnNSZWdpc3RyeSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBBY2NlcHRBbGxQYXJhbXMgfSBmcm9tIFwiLi4vY29udHJvbGxlcmV4dGVuc2lvbnMvUmVjb21tZW5kYXRpb25zXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwiLi4vdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXREaXNwbGF5TW9kZSB9IGZyb20gXCIuLi90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCIuL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIH0gZnJvbSBcIi4vQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGV2YWx1YXRlRXhwcmVzc2lvbiB9IGZyb20gXCIuL0JpbmRpbmdUb29sa2l0RXZhbHVhdG9yXCI7XG5pbXBvcnQgdHlwZSB7IFJlY29tbWVuZGF0aW9uVmFsdWVUeXBlIH0gZnJvbSBcIi4vUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCB7IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24gfSBmcm9tIFwiLi9UeXBlR3VhcmRzXCI7XG5cbmV4cG9ydCB0eXBlIFN0YW5kYXJkUmVjb21tZW5kYXRpb25SZXNwb25zZSA9IHtcblx0QUlSZWNvbW1lbmRlZEZpZWxkUGF0aD86IHN0cmluZztcblx0QUlSZWNvbW1lbmRlZEZpZWxkVmFsdWU/OiBzdHJpbmc7XG5cdEFJUmVjb21tZW5kZWRGaWVsZERlc2NyaXB0aW9uPzogc3RyaW5nO1xuXHRfQUlBbHR2UmVjbWRkRmxkVmFscz86IEFsdGVybmF0aXZlUmVjb21tZW5kYXRpb25SZXNwb25zZVR5cGVbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvID0ge1xuXHRjb250ZXh0OiBPRGF0YVY0Q29udGV4dDtcblx0Y29udGV4dElkZW50aWZpZXI/OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIEFsdGVybmF0aXZlUmVjb21tZW5kYXRpb25SZXNwb25zZVR5cGUgPSB7XG5cdEFJUmVjb21tZW5kZWRGaWVsZFZhbHVlOiBzdHJpbmc7XG5cdEFJUmVjb21tZW5kZWRGaWVsZFNjb3JlVmFsdWU/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBTdGFuZGFyZFJlY29tbWVuZGF0aW9uRGF0YVR5cGUgPSB7XG5cdHZhbHVlPzogc3RyaW5nO1xuXHR0ZXh0Pzogc3RyaW5nO1xuXHRhZGRpdGlvbmFsVmFsdWVzPzogUmVjb21tZW5kYXRpb25WYWx1ZVR5cGVbXTtcbn07XG5cbnR5cGUgU3RhbmRhcmRCYXNlUmVjb21tZW5kYXRpb24gPSB7XG5cdHZlcnNpb24/OiBudW1iZXI7XG5cdGtleXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG59O1xuXG5leHBvcnQgdHlwZSBCYXNlRHluYW1pY1JlY29tbWVuZGF0aW9uID0gUmVjb3JkPHN0cmluZywgU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkRhdGFUeXBlPjtcblxuZXhwb3J0IHR5cGUgUmVjb21tZW5kYXRpb25JbmZvID0gU3RhbmRhcmRCYXNlUmVjb21tZW5kYXRpb24gJiBCYXNlRHluYW1pY1JlY29tbWVuZGF0aW9uO1xuXG5sZXQgcm9vdENvbnRleHQ6IE9EYXRhVjRDb250ZXh0O1xuXG5leHBvcnQgY29uc3Qgc3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlciA9IHtcblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gd2lsbCBwcm9jZXNzIGFuZCBzZXQgdGhlIHJlY29tbWVuZGF0aW9ucyBhY2NvcmRpbmcgdG8gZGF0YSByZWNlaXZlZCBmcm9tIGJhY2tlbmQuXG5cdCAqXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbnMgVGhlIGRhdGEgcmVjZWl2ZWQgZnJvbSBiYWNrZW5kXG5cdCAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsIFRoZSBpbnRlcm5hbCBqc29uIG1vZGVsXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbnNDb250ZXh0cyBUaGUgY29udGV4dHMgZm9yIHdoaWNoIHJlY29tbWVuZGF0aW9ucyBhcmUgYmVpbmcgZmV0Y2hlZFxuXHQgKi9cblx0c3RvcmVSZWNvbW1lbmRhdGlvbnM6IChcblx0XHRyZWNvbW1lbmRhdGlvbnM6IFN0YW5kYXJkUmVjb21tZW5kYXRpb25SZXNwb25zZVtdLFxuXHRcdGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCxcblx0XHRyZWNvbW1lbmRhdGlvbnNDb250ZXh0czogT0RhdGFWNENvbnRleHRbXVxuXHQpOiB2b2lkID0+IHtcblx0XHRjb25zdCByZWNvbW1lbmRhdGlvbnNEYXRhID0gKGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25zRGF0YVwiKSBhcyBSZWNvbW1lbmRhdGlvbkluZm8pIHx8IHt9O1xuXHRcdHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuY2xlYXJSZWNvbW1lbmRhdGlvbnNEYXRhRnJvbU1vZGVsRm9yR2l2ZW5Db250ZXh0cyhyZWNvbW1lbmRhdGlvbnNEYXRhLCByZWNvbW1lbmRhdGlvbnNDb250ZXh0cyk7XG5cdFx0c3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci5lbmhhbmNlUmVjb21tZW5kYXRpb25Nb2RlbChyZWNvbW1lbmRhdGlvbnMsIHJlY29tbWVuZGF0aW9uc0RhdGEpO1xuXHRcdHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIudXBkYXRlRmV0Y2hlZENvbnRleHRQYXRocyhyZWNvbW1lbmRhdGlvbnNDb250ZXh0cywgaW50ZXJuYWxNb2RlbCk7XG5cdFx0c3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci51cGRhdGVDb250ZXh0c0tleXNJbk1vZGVsKHJlY29tbWVuZGF0aW9uc0RhdGEsIHJlY29tbWVuZGF0aW9uc0NvbnRleHRzKTtcblx0XHQvL1NldHRpbmcgdGhlIHZlcnNpb24gdG8gMi4wIHRvIHNlZ3JlZ2F0ZSB0aGUgcHJvY2Vzc2luZ1xuXHRcdHJlY29tbWVuZGF0aW9uc0RhdGFbXCJ2ZXJzaW9uXCJdID0gMi4wO1xuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25zRGF0YVwiLCByZWNvbW1lbmRhdGlvbnNEYXRhKTtcblx0XHRpbnRlcm5hbE1vZGVsLnJlZnJlc2godHJ1ZSk7XG5cdH0sXG5cblx0aWdub3JlUmVjb21tZW5kYXRpb25Gb3JDb250ZXh0czogKGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLCBpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwpOiB2b2lkID0+IHtcblx0XHRsZXQgcmVjb21tZW5kYXRpb25Db250ZXh0czogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm9bXSA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25Db250ZXh0c1wiKSB8fCBbXTtcblx0XHRjb25zdCByZWNvbW1lbmRhdGlvbkRhdGEgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3JlY29tbWVuZGF0aW9uc0RhdGFcIik7XG5cdFx0Y29uc3QgaWdub3JlZENvbnRleHRQYXRocyA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvaWdub3JlZENvbnRleHRQYXRoc1wiKSB8fCBbXTtcblx0XHRjb250ZXh0cy5mb3JFYWNoKChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCkgPT4ge1xuXHRcdFx0Y29uc3QgaWdub3JlZENvbnRleHRQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRpZ25vcmVkQ29udGV4dFBhdGhzLnB1c2goaWdub3JlZENvbnRleHRQYXRoKTtcblx0XHRcdC8vIGRlbGV0ZSByZWNvbW1lbmRhdGlvbiBkYXRhIGZvciBhIGNvbnRleHQgb3IgaXRzIGNoaWxkcmVuIGZpbHRlciByZWNvbW1lbmRhdGlvbkNvbnRleHRzIHdoaWNoIGRvIG5vdCBtYXRjaFxuXHRcdFx0Ly8gYSBwYXRoLiBUaGlzIHdpbGwgYmUgdGhlIGxpc3Qgb2YgcmVjb21tZW5kYXRpb25zIGNvbnRleHRzIHRvIGJlIGtlcHQgaW4gbW9kZWxcblx0XHRcdHJlY29tbWVuZGF0aW9uQ29udGV4dHMgPSByZWNvbW1lbmRhdGlvbkNvbnRleHRzLmZpbHRlcigoY29udGV4dEluZm86IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvKSA9PiB7XG5cdFx0XHRcdHJldHVybiAhY29udGV4dEluZm8/LmNvbnRleHQuZ2V0UGF0aCgpLnN0YXJ0c1dpdGgoaWdub3JlZENvbnRleHRQYXRoKTtcblx0XHRcdH0pO1xuXHRcdFx0T2JqZWN0LmtleXMocmVjb21tZW5kYXRpb25EYXRhKS5mb3JFYWNoKChkYXRhKSA9PiB7XG5cdFx0XHRcdGlmIChkYXRhLnN0YXJ0c1dpdGgoaWdub3JlZENvbnRleHRQYXRoKSkge1xuXHRcdFx0XHRcdGRlbGV0ZSByZWNvbW1lbmRhdGlvbkRhdGFbZGF0YV07XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25zRGF0YVwiLCByZWNvbW1lbmRhdGlvbkRhdGEpO1xuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25Db250ZXh0c1wiLCByZWNvbW1lbmRhdGlvbkNvbnRleHRzKTtcblx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL2lnbm9yZWRDb250ZXh0UGF0aHNcIiwgaWdub3JlZENvbnRleHRQYXRocyk7XG5cdH0sXG5cblx0Y2xlYXJJZ25vcmVkQ29udGV4dHM6IChpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwsIGNvbnRleHRQYXRoOiBzdHJpbmcpOiB2b2lkID0+IHtcblx0XHRsZXQgaWdub3JlZENvbnRleHRQYXRocyA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvaWdub3JlZENvbnRleHRQYXRoc1wiKSB8fCBbXTtcblx0XHRpZ25vcmVkQ29udGV4dFBhdGhzID0gaWdub3JlZENvbnRleHRQYXRocy5maWx0ZXIoKGlnbm9yZWRDb250ZXh0UGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0XHRyZXR1cm4gIWlnbm9yZWRDb250ZXh0UGF0aC5zdGFydHNXaXRoKGNvbnRleHRQYXRoKTtcblx0XHR9KTtcblx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL2lnbm9yZWRDb250ZXh0UGF0aHNcIiwgaWdub3JlZENvbnRleHRQYXRocyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZXJlIGFyZSByZWNvbW1lbmRhdGlvbiByb2xlcyBmb3IgY29udGV4dCBlbnRpdHkgdHlwZS5cblx0ICpcblx0ICogQHBhcmFtIGNvbnRleHRJbmZvIENvbnRhaW5zIGNvbnRleHQgYW5kIGNvbnRleHRJZGVudGlmaWVyXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbnNSZWdpc3RyeSBSZWdpc3RyeSB3aGljaCBob2xkcyB0aGUgcmVjb21tZW5kYXRpb24gcm9sZXMgZm9yIGFsbCBlbnRpdHkgdHlwZXNcblx0ICogQHJldHVybnMgQm9vbGVhbiB2YWx1ZSBiYXNlZCBvbiB3aGV0aGVyIHJlY29tbWVuZGF0aW9uIHJvbGUgZXhpc3RzIGZvciBlbnRpdHlUeXBlIGFubm90YXRpb24gb3Igbm90XG5cdCAqL1xuXHRjaGVja0lmUmVjb21tZW5kYXRpb25Sb2xlRXhpc3RzRm9yQ29udGV4dDogKFxuXHRcdGNvbnRleHRJbmZvOiBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbyxcblx0XHRyZWNvbW1lbmRhdGlvbnNSZWdpc3RyeTogUmVjb21tZW5kYXRpb25zUmVnaXN0cnlcblx0KTogYm9vbGVhbiA9PiB7XG5cdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0ID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGgoXG5cdFx0XHRjb250ZXh0SW5mbz8uY29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRjb250ZXh0SW5mbz8uY29udGV4dC5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKVxuXHRcdCk7XG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5VHlwZS5uYW1lIGFzIHN0cmluZztcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMocmVjb21tZW5kYXRpb25zUmVnaXN0cnkucm9sZXMpLmluY2x1ZGVzKGVudGl0eVR5cGUpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMgcmVjb21tZW5kYXRpb24gZGF0YSB3aXRoIGtleXMgb2YgYWxsIGNvbnRleHRzLiBUaGlzIG11c3QgYmUgc2hvd24gaW4gdGhlIEFjY2VwdCBSZWNvbW1lbmRhdGlvbnMgRGlhbG9nIGJhc2VkIG9uIHRoZSB1c2UgY2FzZS5cblx0ICpcblx0ICogQHBhcmFtIHJlY29tbWVuZGF0aW9uc0RhdGFcblx0ICogQHBhcmFtIHJlY29tbWVuZGF0aW9uQ29udGV4dHNcblx0ICovXG5cdHVwZGF0ZUNvbnRleHRzS2V5c0luTW9kZWw6IChyZWNvbW1lbmRhdGlvbnNEYXRhOiBSZWNvbW1lbmRhdGlvbkluZm8sIHJlY29tbWVuZGF0aW9uQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10pOiB2b2lkID0+IHtcblx0XHRpZiAoIXJlY29tbWVuZGF0aW9uc0RhdGEuaGFzT3duUHJvcGVydHkoXCJrZXlzXCIpKSB7XG5cdFx0XHRyZWNvbW1lbmRhdGlvbnNEYXRhW1wia2V5c1wiXSA9IHt9O1xuXHRcdH1cblx0XHRjb25zdCBrZXlzRGF0YSA9IHJlY29tbWVuZGF0aW9uc0RhdGFbXCJrZXlzXCJdO1xuXHRcdHJlY29tbWVuZGF0aW9uQ29udGV4dHMuZm9yRWFjaCgoY29udGV4dDogT0RhdGFWNENvbnRleHQpID0+IHtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBtZXRhUGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChjb250ZXh0Py5nZXRQYXRoKCkpO1xuXHRcdFx0Y29uc3QgZGF0YU1vZGVsID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQobWV0YVBhdGgpKTtcblx0XHRcdGNvbnN0IHNlbWFudGljS2V5c0ZvckdpdmVuTWV0YVBhdGggPSBkYXRhTW9kZWwudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucy5Db21tb24/LlNlbWFudGljS2V5O1xuXHRcdFx0aWYgKHNlbWFudGljS2V5c0ZvckdpdmVuTWV0YVBhdGgpIHtcblx0XHRcdFx0aWYgKGtleXNEYXRhICYmICFrZXlzRGF0YS5oYXNPd25Qcm9wZXJ0eShtZXRhUGF0aCkgJiYgc2VtYW50aWNLZXlzRm9yR2l2ZW5NZXRhUGF0aCkge1xuXHRcdFx0XHRcdGtleXNEYXRhW21ldGFQYXRoXSA9IHNlbWFudGljS2V5c0ZvckdpdmVuTWV0YVBhdGgubWFwKChpKSA9PiBpLnZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aGUgb2xkIHJlY29tbWVuZGF0aW9ucyBmb3IgdGhlIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbnNEYXRhIFRoZSByZWNvbW1lbmRhdGlvbiBkYXRhIHdoaWNoIGlzIHN0b3JlZFxuXHQgKiBAcGFyYW0gcmVjb21tZW5kYXRpb25zQ29udGV4dHMgVGhlIGNvbnRleHRzIGZvciB3aGljaCByZWNvbW1lbmRhdGlvbnMgYXJlIGJlaW5nIGZldGNoZWRcblx0ICovXG5cdGNsZWFyUmVjb21tZW5kYXRpb25zRGF0YUZyb21Nb2RlbEZvckdpdmVuQ29udGV4dHM6IChcblx0XHRyZWNvbW1lbmRhdGlvbnNEYXRhOiBSZWNvbW1lbmRhdGlvbkluZm8sXG5cdFx0cmVjb21tZW5kYXRpb25zQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdXG5cdCk6IHZvaWQgPT4ge1xuXHRcdGlmIChyZWNvbW1lbmRhdGlvbnNDb250ZXh0cykge1xuXHRcdFx0T2JqZWN0LmtleXMocmVjb21tZW5kYXRpb25zRGF0YSkuZm9yRWFjaCgodGFyZ2V0KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGlkeCA9IHRhcmdldC5sYXN0SW5kZXhPZihcIilcIik7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRyZWNvbW1lbmRhdGlvbnNDb250ZXh0cy5maW5kKChjb250ZXh0KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRQYXRoKCkgPT09IHRhcmdldC5zdWJzdHJpbmcoMCwgaWR4ICsgMSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0ZGVsZXRlIHJlY29tbWVuZGF0aW9uc0RhdGFbdGFyZ2V0XTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZW5oYW5jZSB0aGUgcmVjb21tZW5kYXRpb25zIGFjY29yZGluZyB0byBkYXRhIHJlY2VpdmVkIGZyb20gYmFja2VuZC5cblx0ICpcblx0ICogQHBhcmFtIHJlY29tbWVuZGF0aW9ucyBUaGUgZGF0YSByZWNlaXZlZCBmcm9tIGJhY2tlbmRcblx0ICogQHBhcmFtIHJlY29tbWVuZGF0aW9uc0RhdGEgVGhlIGV4aXN0aW5nIHJlY29tbWVuZGF0aW9uIE1vZGVsXG5cdCAqL1xuXHRlbmhhbmNlUmVjb21tZW5kYXRpb25Nb2RlbDogKFxuXHRcdHJlY29tbWVuZGF0aW9uczogQXJyYXk8U3RhbmRhcmRSZWNvbW1lbmRhdGlvblJlc3BvbnNlPixcblx0XHRyZWNvbW1lbmRhdGlvbnNEYXRhOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+XG5cdCk6IHZvaWQgPT4ge1xuXHRcdHJlY29tbWVuZGF0aW9ucz8uZm9yRWFjaCgocmVjb21tZW5kYXRpb246IFN0YW5kYXJkUmVjb21tZW5kYXRpb25SZXNwb25zZSkgPT4ge1xuXHRcdFx0Y29uc3QgdGFyZ2V0ID0gcmVjb21tZW5kYXRpb24uQUlSZWNvbW1lbmRlZEZpZWxkUGF0aDtcblx0XHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdFx0Ly8gbG9vcCB0aHJvdWdoIGFsbCB0aGUgcmVjb21tZW5kYXRpb25zIHNlbnQgZnJvbSBiYWNrZW5kXG5cdFx0XHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uVmFsdWVzOiBSZWNvbW1lbmRhdGlvblZhbHVlVHlwZVtdID0gW107XG5cdFx0XHRcdGxldCBpc1BsYWNlaG9sZGVyVmFsdWVGb3VuZCA9IGZhbHNlO1xuXG5cdFx0XHRcdC8vIHNldCB0aGUgb3RoZXIgYWx0ZXJuYXRpdmVzIGFzIHJlY29tbWVuZGF0aW9uc1xuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbi5fQUlBbHR2UmVjbWRkRmxkVmFscz8uZm9yRWFjaCgoYWx0ZXJuYXRpdmVSZWNvbW1lbmRhdGlvbjogQWx0ZXJuYXRpdmVSZWNvbW1lbmRhdGlvblJlc3BvbnNlVHlwZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uVmFsdWU6IFJlY29tbWVuZGF0aW9uVmFsdWVUeXBlID0ge1xuXHRcdFx0XHRcdFx0dmFsdWU6IGFsdGVybmF0aXZlUmVjb21tZW5kYXRpb24uQUlSZWNvbW1lbmRlZEZpZWxkVmFsdWUsXG5cdFx0XHRcdFx0XHRwcm9iYWJpbGl0eTogYWx0ZXJuYXRpdmVSZWNvbW1lbmRhdGlvbi5BSVJlY29tbWVuZGVkRmllbGRTY29yZVZhbHVlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRpZiAocmVjb21tZW5kYXRpb24uQUlSZWNvbW1lbmRlZEZpZWxkVmFsdWUgPT09IGFsdGVybmF0aXZlUmVjb21tZW5kYXRpb24uQUlSZWNvbW1lbmRlZEZpZWxkVmFsdWUpIHtcblx0XHRcdFx0XHRcdGlzUGxhY2Vob2xkZXJWYWx1ZUZvdW5kID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZWNvbW1lbmRhdGlvblZhbHVlcy5wdXNoKHJlY29tbWVuZGF0aW9uVmFsdWUpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmVjb21tZW5kYXRpb25zRGF0YVt0YXJnZXRdID0ge1xuXHRcdFx0XHRcdHZhbHVlOiBpc1BsYWNlaG9sZGVyVmFsdWVGb3VuZCA/IHJlY29tbWVuZGF0aW9uLkFJUmVjb21tZW5kZWRGaWVsZFZhbHVlIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdHRleHQ6IGlzUGxhY2Vob2xkZXJWYWx1ZUZvdW5kID8gcmVjb21tZW5kYXRpb24uQUlSZWNvbW1lbmRlZEZpZWxkRGVzY3JpcHRpb24gOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0YWRkaXRpb25hbFZhbHVlczogcmVjb21tZW5kYXRpb25WYWx1ZXNcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHJlY29tbWVuZGF0aW9ucyBmcm9tIHN0YW5kYXJkIHJlY29tbWVuZGF0aW9ucyBtb2RlbC5cblx0ICpcblx0ICogQHBhcmFtIGJpbmRpbmdDb250ZXh0IEJpbmRpbmcgQ29udGV4dCBvZiB0aGUgZmllbGRcblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBQcm9wZXJ0eSBwYXRoIG9mIHRoZSBmaWVsZFxuXHQgKiBAcGFyYW0gcmVjb21tZW5kYXRpb25EYXRhIE9iamVjdCBjb250YWluaW5nIHJlY29tbWVuZGF0aW9uc1xuXHQgKiBAcmV0dXJucyBSZWNvbW1lbmRhdGlvbiBkYXRhIGZvciB0aGUgZmllbGRcblx0ICovXG5cdGdldFN0YW5kYXJkUmVjb21tZW5kYXRpb25zOiBmdW5jdGlvbiAoXG5cdFx0YmluZGluZ0NvbnRleHQ6IENvbnRleHQsXG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0cmVjb21tZW5kYXRpb25EYXRhOiBSZWNvbW1lbmRhdGlvbkluZm9cblx0KTogU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkRhdGFUeXBlIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoYmluZGluZ0NvbnRleHQgJiYgcHJvcGVydHlQYXRoKSB7XG5cdFx0XHRjb25zdCBmdWxsUGF0aCA9IGJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSArIFwiL1wiICsgcHJvcGVydHlQYXRoO1xuXHRcdFx0cmV0dXJuIHJlY29tbWVuZGF0aW9uRGF0YVtmdWxsUGF0aF0gfHwgdW5kZWZpbmVkO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIEZldGNoZXMgdGhlIGRpc3BsYXkgbW9kZSBmb3IgYSBnaXZlbiB0YXJnZXQgcGF0aC5cblx0ICpcblx0ICogQHBhcmFtIHRhcmdldFBhdGhcblx0ICogQHBhcmFtIG1ldGFNb2RlbFxuXHQgKiBAcmV0dXJucyBEaXNwbGF5IG1vZGUgZm9yIHRhcmdldCBwYXRoXG5cdCAqL1xuXHRnZXREaXNwbGF5TW9kZUZvclRhcmdldFBhdGgodGFyZ2V0UGF0aDogc3RyaW5nLCBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogc3RyaW5nIHtcblx0XHRjb25zdCBpbnZvbHZlZERhdGFNb2RlbE9iamVjdCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHNGb3JUYXJnZXRQYXRoPFByb3BlcnR5Pih0YXJnZXRQYXRoLCBtZXRhTW9kZWwpO1xuXHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gaW52b2x2ZWREYXRhTW9kZWxPYmplY3QgJiYgZ2V0RGlzcGxheU1vZGUoaW52b2x2ZWREYXRhTW9kZWxPYmplY3QpO1xuXHRcdHJldHVybiBkaXNwbGF5TW9kZSA/IGRpc3BsYXlNb2RlIDogXCJEZXNjcmlwdGlvblZhbHVlXCI7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHdoaWNoIGluZm9ybXMgd2hldGhlciBhIHJlY29tbWVuZGF0aW9uIGZpZWxkIGlzIG51bGwgb3Igbm90LlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dFxuXHQgKiBAcGFyYW0ga2V5XG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGhcblx0ICogQHJldHVybnMgYm9vbGVhbiB2YWx1ZSBiYXNlZCBvbiB3aGV0aGVyIGEgcmVjb21tZW5kYXRpb24gZmllbGQgaXMgbnVsbCBvciBub3Rcblx0ICovXG5cblx0aXNSZWNvbW1lbmRhdGlvbkZpZWxkTnVsbChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwga2V5OiBzdHJpbmcsIHByb3BlcnR5UGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzRm9yVGFyZ2V0UGF0aDxQcm9wZXJ0eT4oa2V5LCBjb250ZXh0LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpKTtcblx0XHRpZiAoIWNvbnRleHQ/LmdldFByb3BlcnR5KHByb3BlcnR5UGF0aCkpIHtcblx0XHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gc3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci5nZXREaXNwbGF5TW9kZUZvclRhcmdldFBhdGgoa2V5LCBjb250ZXh0Py5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoZGlzcGxheU1vZGUgJiYgZGlzcGxheU1vZGUgIT09IFwiVmFsdWVcIikge1xuXHRcdFx0XHRjb25zdCB0ZXh0ID1cblx0XHRcdFx0XHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihwcm9wZXJ0eT8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0KSAmJlxuXHRcdFx0XHRcdHByb3BlcnR5Py50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQ/LnBhdGg7XG5cdFx0XHRcdHJldHVybiB0ZXh0ID8gIWNvbnRleHQ/LmdldFByb3BlcnR5KHRleHQpIDogdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0dXBkYXRlRmV0Y2hlZENvbnRleHRQYXRoczogZnVuY3Rpb24gKGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLCBpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwpOiB2b2lkIHtcblx0XHRjb25zdCBmZXRjaGVkQ29udGV4dFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnRleHRzPy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG5cdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnRleHQ/LmdldFBhdGgoKTtcblx0XHRcdGlmIChjb250ZXh0UGF0aCAmJiAhZmV0Y2hlZENvbnRleHRQYXRocy5pbmNsdWRlcyhjb250ZXh0UGF0aCkpIHtcblx0XHRcdFx0ZmV0Y2hlZENvbnRleHRQYXRocy5wdXNoKGNvbnRleHRQYXRoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGludGVybmFsTW9kZWw/LnNldFByb3BlcnR5KFwiL2ZldGNoZWRDb250ZXh0UGF0aHNcIiwgZmV0Y2hlZENvbnRleHRQYXRocyk7XG5cdFx0aW50ZXJuYWxNb2RlbC5yZWZyZXNoKCk7XG5cdH0sXG5cblx0Z2V0Q29udGV4dHNXaXRoTm9SZWNvbW1lbmRhdGlvbnM6IGZ1bmN0aW9uIChcblx0XHRjb250ZXh0c0luZm86IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvW10sXG5cdFx0aW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsXG5cdCk6IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvW10ge1xuXHRcdGNvbnN0IGZldGNoZWRDb250ZXh0UGF0aHMgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL2ZldGNoZWRDb250ZXh0UGF0aHNcIikgfHwgW107XG5cdFx0Y29uc3QgaWdub3JlZENvbnRleHRQYXRocyA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvaWdub3JlZENvbnRleHRQYXRoc1wiKSB8fCBbXTtcblx0XHRyZXR1cm4gY29udGV4dHNJbmZvLmZpbHRlcigoY29udGV4dEluZm8pID0+IHtcblx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gY29udGV4dEluZm8/LmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0cmV0dXJuICFmZXRjaGVkQ29udGV4dFBhdGhzLmluY2x1ZGVzKGNvbnRleHRQYXRoKSAmJiAhaWdub3JlZENvbnRleHRQYXRocy5pbmNsdWRlcyhjb250ZXh0UGF0aCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0cmVzZXRSZWNvbW1lbmRhdGlvbnM6IGZ1bmN0aW9uIChpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwpOiB2b2lkIHtcblx0XHQvLyB3ZSBoYXZlIHZlcnNpb24ga2V5IG1haW50YWluZWQgb25seSBmb3Igc3RhbmRhcmQgc29sdXRpb24gb2YgcmVjb21tZW5kYXRpb25zXG5cdFx0Ly9hbmQgb25seSBpZiB0aGlzIGlzIHN0YW5kYXJkIGltcGxlbWVudGF0aW9uLCB3ZSBzaG91bGQgcmVzZXQgcmVjb21tZW5kYXRpb25zXG5cdFx0Y29uc3QgcmVjb21tZW5kYXRpb25zRGF0YUluTW9kZWwgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3JlY29tbWVuZGF0aW9uc0RhdGFcIik7XG5cdFx0aWYgKHJlY29tbWVuZGF0aW9uc0RhdGFJbk1vZGVsICYmIHJlY29tbWVuZGF0aW9uc0RhdGFJbk1vZGVsLmhhc093blByb3BlcnR5KFwidmVyc2lvblwiKSkge1xuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9yZWNvbW1lbmRhdGlvbnNEYXRhXCIsIHt9KTtcblx0XHRcdGludGVybmFsTW9kZWw/LnNldFByb3BlcnR5KFwiL2ZldGNoZWRDb250ZXh0UGF0aHNcIiwgW10pO1xuXHRcdFx0aW50ZXJuYWxNb2RlbD8uc2V0UHJvcGVydHkoXCIvaWdub3JlZENvbnRleHRQYXRoc1wiLCBbXSk7XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnJlZnJlc2godHJ1ZSk7XG5cdFx0fVxuXHR9LFxuXG5cdGdldEN1cnJlbnRSb290Q29udGV4dDogZnVuY3Rpb24gKCk6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gcm9vdENvbnRleHQ7XG5cdH0sXG5cblx0c2V0Q3VycmVudFJvb3RDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dDogT0RhdGFWNENvbnRleHQpOiB2b2lkIHtcblx0XHRyb290Q29udGV4dCA9IGNvbnRleHQ7XG5cdH0sXG5cdC8qKlxuXHQgKiBBZGRzIHRoZSB0ZXh0IG9mIENvbnRleHRJZGVudGlmaWVyIGVsc2Ugd2lsbCBhZGQgaXRzIHZhbHVlIHRvIHRoZSBhY2NlcHRBbGxQYXJhbXMuXG5cdCAqXG5cdCAqIEBwYXJhbSBwYXJhbXNcblx0ICogQHBhcmFtIHZpZXdQYXRoIENvbnRleHQgUGF0aCBvZiB2aWV3XG5cdCAqL1xuXHRhZGRDb250ZXh0SWRlbnRpZmllclRleHQocGFyYW1zOiBBY2NlcHRBbGxQYXJhbXMsIHZpZXdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHJlY29tbWVuZGF0aW9uRGF0YSBvZiBwYXJhbXM/LnJlY29tbWVuZGF0aW9uRGF0YSB8fCBbXSkge1xuXHRcdFx0bGV0IGluZGV4ID0gMDtcblx0XHRcdGNvbnN0IGlkZW50aWZpZXJWYWx1ZXM6IHN0cmluZ1tdID0gW107XG5cdFx0XHQvLyBmb3IgcmVjb21tZW5kYXRpb24gZmllbGRzIHdoaWNoIGFyZSBkaXJlY3RseSBvbiBwYWdlLCB3ZSBkbyBub3Qgd2FudCB0byBzaG93IGlkZW50aWZpZXIgdmFsdWVzXG5cdFx0XHQvLyBzbyB3ZSBleGNsdWRlIHRoYXQgY2FsY3VsYXRpb25cblx0XHRcdGlmIChyZWNvbW1lbmRhdGlvbkRhdGEuY29udGV4dD8uZ2V0UGF0aCgpICE9PSB2aWV3UGF0aCkge1xuXHRcdFx0XHRpZiAocmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHRJZGVudGlmaWVyICYmIHJlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0KSB7XG5cdFx0XHRcdFx0cmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHRJZGVudGlmaWVyLmZvckVhY2goKGNvbnRleHRJZGVudGlmaWVyKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpZFBhdGggPSBgJHtyZWNvbW1lbmRhdGlvbkRhdGEuY29udGV4dD8uZ2V0UGF0aCgpfSkvJHtjb250ZXh0SWRlbnRpZmllcn1gO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udGV4dFRleHQgPSB0aGlzLmdldFRleHRGb3JLZXkocmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQsIGlkUGF0aCwgY29udGV4dElkZW50aWZpZXIpO1xuXHRcdFx0XHRcdFx0aWYgKGNvbnRleHRUZXh0KSB7XG5cdFx0XHRcdFx0XHRcdGlkZW50aWZpZXJWYWx1ZXMucHVzaChpbmRleCA9PT0gMCA/IGAke2NvbnRleHRUZXh0fWAgOiBgICR7Y29udGV4dFRleHR9YCk7XG5cdFx0XHRcdFx0XHRcdGluZGV4ID0gaW5kZXggKyAxO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZWNvbW1lbmRhdGlvbkRhdGEuY29udGV4dElkZW50aWZpZXJUZXh0ID0gaWRlbnRpZmllclZhbHVlcztcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBGZXRjaGVzIHRhYmxlIG5hbWUgYmFzZWQgb24gdGhlIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFRhYmxlIG5hbWVcblx0ICovXG5cblx0Z2V0RW50aXR5TmFtZShjb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBkYXRhTW9kZWxPYmplY3QgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzRm9yVGFyZ2V0UGF0aChcblx0XHRcdGNvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0Y29udGV4dC5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKVxuXHRcdCk7XG5cdFx0Y29uc3QgdHlwZU5hbWUgPSBkYXRhTW9kZWxPYmplY3Q/LnRhcmdldEVudGl0eVR5cGU/LmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVHlwZU5hbWU7XG5cdFx0cmV0dXJuIHR5cGVOYW1lICYmIGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0eXBlTmFtZSkpO1xuXHR9LFxuXHQvKipcblx0ICogRmV0Y2hlcyBUZXh0IGZvciBrZXkgaWYgaXQgZXhpc3RzIGVsc2Ugd2lsbCByZXR1cm4gaXRzIHZhbHVlLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dFxuXHQgKiBAcGFyYW0ga2V5UGF0aFxuXHQgKiBAcGFyYW0ga2V5XG5cdCAqIEByZXR1cm5zIFRleHQgb3IgVmFsdWUgZm9yIGEga2V5XG5cdCAqL1xuXG5cdGdldFRleHRGb3JLZXkoY29udGV4dDogT0RhdGFWNENvbnRleHQsIGtleVBhdGg6IHN0cmluZywga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGxldCB2YWx1ZSA9IFwiXCI7XG5cdFx0Y29uc3QgaW52b2x2ZWREYXRhTW9kZWxPYmplY3Q6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+IHwgdW5kZWZpbmVkID1cblx0XHRcdE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHNGb3JUYXJnZXRQYXRoPFByb3BlcnR5PihrZXlQYXRoLCBjb250ZXh0Py5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gaW52b2x2ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdDtcblx0XHRjb25zdCBwcm9wZXJ0eSA9XG5cdFx0XHQoKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHRhcmdldE9iamVjdCkgfHwgaXNQcm9wZXJ0eVBhdGhFeHByZXNzaW9uKHRhcmdldE9iamVjdCkpICYmIHRhcmdldE9iamVjdC4kdGFyZ2V0KSB8fFxuXHRcdFx0KHRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eSk7XG5cdFx0Y29uc3QgdGV4dCA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCk7XG5cdFx0aWYgKHRleHQpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHZhbHVlID0gZXZhbHVhdGVFeHByZXNzaW9uKHRleHQsIHsgXCJcIjogY29udGV4dC5nZXRPYmplY3QoKSB9KSBhcyBzdHJpbmc7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUgPyB2YWx1ZSA6IGNvbnRleHQuZ2V0UHJvcGVydHkoa2V5KTtcblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHR2YWx1ZSA9IGNvbnRleHQuZ2V0UHJvcGVydHkoa2V5KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlID8/IGNvbnRleHQuZ2V0UHJvcGVydHkoa2V5KTtcblx0fVxufTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7RUFnREEsSUFBSUEsV0FBMkI7RUFFeEIsTUFBTUMsNEJBQTRCLEdBQUc7SUFDM0M7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0Msb0JBQW9CLEVBQUUsQ0FDckJDLGVBQWlELEVBQ2pEQyxhQUF3QixFQUN4QkMsdUJBQXlDLEtBQy9CO01BQ1YsTUFBTUMsbUJBQW1CLEdBQUlGLGFBQWEsQ0FBQ0csV0FBVyxDQUFDLHNCQUFzQixDQUFDLElBQTJCLENBQUMsQ0FBQztNQUMzR04sNEJBQTRCLENBQUNPLGlEQUFpRCxDQUFDRixtQkFBbUIsRUFBRUQsdUJBQXVCLENBQUM7TUFDNUhKLDRCQUE0QixDQUFDUSwwQkFBMEIsQ0FBQ04sZUFBZSxFQUFFRyxtQkFBbUIsQ0FBQztNQUM3RkwsNEJBQTRCLENBQUNTLHlCQUF5QixDQUFDTCx1QkFBdUIsRUFBRUQsYUFBYSxDQUFDO01BQzlGSCw0QkFBNEIsQ0FBQ1UseUJBQXlCLENB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
|
|
313
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyb290Q29udGV4dCIsInN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIiLCJzdG9yZVJlY29tbWVuZGF0aW9ucyIsInJlY29tbWVuZGF0aW9ucyIsImludGVybmFsTW9kZWwiLCJyZWNvbW1lbmRhdGlvbnNDb250ZXh0cyIsInJlY29tbWVuZGF0aW9uc0RhdGEiLCJnZXRQcm9wZXJ0eSIsImNsZWFyUmVjb21tZW5kYXRpb25zRGF0YUZyb21Nb2RlbEZvckdpdmVuQ29udGV4dHMiLCJlbmhhbmNlUmVjb21tZW5kYXRpb25Nb2RlbCIsInVwZGF0ZUZldGNoZWRDb250ZXh0UGF0aHMiLCJ1cGRhdGVDb250ZXh0c0tleXNJbk1vZGVsIiwic2V0UHJvcGVydHkiLCJyZWZyZXNoIiwiaWdub3JlUmVjb21tZW5kYXRpb25Gb3JDb250ZXh0cyIsImNvbnRleHRzIiwicmVjb21tZW5kYXRpb25Db250ZXh0cyIsInJlY29tbWVuZGF0aW9uRGF0YSIsImlnbm9yZWRDb250ZXh0UGF0aHMiLCJmb3JFYWNoIiwiY29udGV4dCIsImlnbm9yZWRDb250ZXh0UGF0aCIsImdldFBhdGgiLCJwdXNoIiwiZmlsdGVyIiwiY29udGV4dEluZm8iLCJzdGFydHNXaXRoIiwiT2JqZWN0Iiwia2V5cyIsImRhdGEiLCJjbGVhcklnbm9yZWRDb250ZXh0cyIsImNvbnRleHRQYXRoIiwiY2hlY2tJZlJlY29tbWVuZGF0aW9uUm9sZUV4aXN0c0ZvckNvbnRleHQiLCJyZWNvbW1lbmRhdGlvbnNSZWdpc3RyeSIsImRhdGFNb2RlbE9iamVjdCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGgiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImVudGl0eVR5cGUiLCJ0YXJnZXRFbnRpdHlUeXBlIiwibmFtZSIsInJvbGVzIiwiaW5jbHVkZXMiLCJoYXNPd25Qcm9wZXJ0eSIsImtleXNEYXRhIiwibWV0YU1vZGVsIiwibWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsImRhdGFNb2RlbCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldE1ldGFDb250ZXh0Iiwic2VtYW50aWNLZXlzRm9yR2l2ZW5NZXRhUGF0aCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiU2VtYW50aWNLZXkiLCJtYXAiLCJpIiwidmFsdWUiLCJ0YXJnZXQiLCJpZHgiLCJsYXN0SW5kZXhPZiIsImZpbmQiLCJzdWJzdHJpbmciLCJyZWNvbW1lbmRhdGlvbiIsIkFJUmVjb21tZW5kZWRGaWVsZFBhdGgiLCJyZWNvbW1lbmRhdGlvblZhbHVlcyIsImlzUGxhY2Vob2xkZXJWYWx1ZUZvdW5kIiwiX0FJQWx0dlJlY21kZEZsZFZhbHMiLCJhbHRlcm5hdGl2ZVJlY29tbWVuZGF0aW9uIiwicmVjb21tZW5kYXRpb25WYWx1ZSIsIkFJUmVjb21tZW5kZWRGaWVsZFZhbHVlIiwicHJvYmFiaWxpdHkiLCJBSVJlY29tbWVuZGVkRmllbGRTY29yZVZhbHVlIiwidW5kZWZpbmVkIiwidGV4dCIsIkFJUmVjb21tZW5kZWRGaWVsZERlc2NyaXB0aW9uIiwiYWRkaXRpb25hbFZhbHVlcyIsImdldFN0YW5kYXJkUmVjb21tZW5kYXRpb25zIiwiYmluZGluZ0NvbnRleHQiLCJwcm9wZXJ0eVBhdGgiLCJmdWxsUGF0aCIsImdldERpc3BsYXlNb2RlRm9yVGFyZ2V0UGF0aCIsInRhcmdldFBhdGgiLCJpbnZvbHZlZERhdGFNb2RlbE9iamVjdCIsImRpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJpc1JlY29tbWVuZGF0aW9uRmllbGROdWxsIiwia2V5IiwicHJvcGVydHkiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsInRhcmdldE9iamVjdCIsIlRleHQiLCJwYXRoIiwiZmV0Y2hlZENvbnRleHRQYXRocyIsImdldENvbnRleHRzV2l0aE5vUmVjb21tZW5kYXRpb25zIiwiY29udGV4dHNJbmZvIiwicmVzZXRSZWNvbW1lbmRhdGlvbnMiLCJyZWNvbW1lbmRhdGlvbnNEYXRhSW5Nb2RlbCIsImdldEN1cnJlbnRSb290Q29udGV4dCIsInNldEN1cnJlbnRSb290Q29udGV4dCIsImFkZENvbnRleHRJZGVudGlmaWVyVGV4dCIsInBhcmFtcyIsInZpZXdQYXRoIiwiaW5kZXgiLCJpZGVudGlmaWVyVmFsdWVzIiwiY29udGV4dElkZW50aWZpZXIiLCJpZFBhdGgiLCJjb250ZXh0VGV4dCIsImdldFRleHRGb3JLZXkiLCJjb250ZXh0SWRlbnRpZmllclRleHQiLCJnZXRFbnRpdHlOYW1lIiwidHlwZU5hbWUiLCJVSSIsIkhlYWRlckluZm8iLCJUeXBlTmFtZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwia2V5UGF0aCIsImlzUHJvcGVydHlQYXRoRXhwcmVzc2lvbiIsIiR0YXJnZXQiLCJldmFsdWF0ZUV4cHJlc3Npb24iLCJnZXRPYmplY3QiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBSZWNvbW1lbmRhdGlvbnNSZWdpc3RyeSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBBY2NlcHRBbGxQYXJhbXMgfSBmcm9tIFwiLi4vY29udHJvbGxlcmV4dGVuc2lvbnMvUmVjb21tZW5kYXRpb25zXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwiLi4vdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXREaXNwbGF5TW9kZSB9IGZyb20gXCIuLi90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgZXZhbHVhdGVFeHByZXNzaW9uIH0gZnJvbSBcIi4vQmluZGluZ1Rvb2xraXRFdmFsdWF0b3JcIjtcbmltcG9ydCB0eXBlIHsgUmVjb21tZW5kYXRpb25WYWx1ZVR5cGUgfSBmcm9tIFwiLi9SZWNvbW1lbmRhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHsgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIGlzUHJvcGVydHlQYXRoRXhwcmVzc2lvbiB9IGZyb20gXCIuL1R5cGVHdWFyZHNcIjtcblxuZXhwb3J0IHR5cGUgU3RhbmRhcmRSZWNvbW1lbmRhdGlvblJlc3BvbnNlID0ge1xuXHRBSVJlY29tbWVuZGVkRmllbGRQYXRoPzogc3RyaW5nO1xuXHRBSVJlY29tbWVuZGVkRmllbGRWYWx1ZT86IHN0cmluZztcblx0QUlSZWNvbW1lbmRlZEZpZWxkRGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdF9BSUFsdHZSZWNtZGRGbGRWYWxzPzogQWx0ZXJuYXRpdmVSZWNvbW1lbmRhdGlvblJlc3BvbnNlVHlwZVtdO1xufTtcblxuZXhwb3J0IHR5cGUgUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8gPSB7XG5cdGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0O1xuXHRjb250ZXh0SWRlbnRpZmllcj86IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgQWx0ZXJuYXRpdmVSZWNvbW1lbmRhdGlvblJlc3BvbnNlVHlwZSA9IHtcblx0QUlSZWNvbW1lbmRlZEZpZWxkVmFsdWU6IHN0cmluZztcblx0QUlSZWNvbW1lbmRlZEZpZWxkU2NvcmVWYWx1ZT86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFN0YW5kYXJkUmVjb21tZW5kYXRpb25EYXRhVHlwZSA9IHtcblx0dmFsdWU/OiBzdHJpbmc7XG5cdHRleHQ/OiBzdHJpbmc7XG5cdGFkZGl0aW9uYWxWYWx1ZXM/OiBSZWNvbW1lbmRhdGlvblZhbHVlVHlwZVtdO1xufTtcblxudHlwZSBTdGFuZGFyZEJhc2VSZWNvbW1lbmRhdGlvbiA9IHtcblx0dmVyc2lvbj86IG51bWJlcjtcblx0a2V5cz86IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcbn07XG5cbmV4cG9ydCB0eXBlIEJhc2VEeW5hbWljUmVjb21tZW5kYXRpb24gPSBSZWNvcmQ8c3RyaW5nLCBTdGFuZGFyZFJlY29tbWVuZGF0aW9uRGF0YVR5cGU+O1xuXG5leHBvcnQgdHlwZSBSZWNvbW1lbmRhdGlvbkluZm8gPSBTdGFuZGFyZEJhc2VSZWNvbW1lbmRhdGlvbiAmIEJhc2VEeW5hbWljUmVjb21tZW5kYXRpb247XG5cbmxldCByb290Q29udGV4dDogT0RhdGFWNENvbnRleHQ7XG5cbmV4cG9ydCBjb25zdCBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyID0ge1xuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiB3aWxsIHByb2Nlc3MgYW5kIHNldCB0aGUgcmVjb21tZW5kYXRpb25zIGFjY29yZGluZyB0byBkYXRhIHJlY2VpdmVkIGZyb20gYmFja2VuZC5cblx0ICpcblx0ICogQHBhcmFtIHJlY29tbWVuZGF0aW9ucyBUaGUgZGF0YSByZWNlaXZlZCBmcm9tIGJhY2tlbmRcblx0ICogQHBhcmFtIGludGVybmFsTW9kZWwgVGhlIGludGVybmFsIGpzb24gbW9kZWxcblx0ICogQHBhcmFtIHJlY29tbWVuZGF0aW9uc0NvbnRleHRzIFRoZSBjb250ZXh0cyBmb3Igd2hpY2ggcmVjb21tZW5kYXRpb25zIGFyZSBiZWluZyBmZXRjaGVkXG5cdCAqL1xuXHRzdG9yZVJlY29tbWVuZGF0aW9uczogKFxuXHRcdHJlY29tbWVuZGF0aW9uczogU3RhbmRhcmRSZWNvbW1lbmRhdGlvblJlc3BvbnNlW10sXG5cdFx0aW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsLFxuXHRcdHJlY29tbWVuZGF0aW9uc0NvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdXG5cdCk6IHZvaWQgPT4ge1xuXHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uc0RhdGEgPSAoaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9yZWNvbW1lbmRhdGlvbnNEYXRhXCIpIGFzIFJlY29tbWVuZGF0aW9uSW5mbykgfHwge307XG5cdFx0c3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci5jbGVhclJlY29tbWVuZGF0aW9uc0RhdGFGcm9tTW9kZWxGb3JHaXZlbkNvbnRleHRzKHJlY29tbWVuZGF0aW9uc0RhdGEsIHJlY29tbWVuZGF0aW9uc0NvbnRleHRzKTtcblx0XHRzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmVuaGFuY2VSZWNvbW1lbmRhdGlvbk1vZGVsKHJlY29tbWVuZGF0aW9ucywgcmVjb21tZW5kYXRpb25zRGF0YSk7XG5cdFx0c3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci51cGRhdGVGZXRjaGVkQ29udGV4dFBhdGhzKHJlY29tbWVuZGF0aW9uc0NvbnRleHRzLCBpbnRlcm5hbE1vZGVsKTtcblx0XHRzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLnVwZGF0ZUNvbnRleHRzS2V5c0luTW9kZWwocmVjb21tZW5kYXRpb25zRGF0YSwgcmVjb21tZW5kYXRpb25zQ29udGV4dHMpO1xuXHRcdC8vU2V0dGluZyB0aGUgdmVyc2lvbiB0byAyLjAgdG8gc2VncmVnYXRlIHRoZSBwcm9jZXNzaW5nXG5cdFx0cmVjb21tZW5kYXRpb25zRGF0YVtcInZlcnNpb25cIl0gPSAyLjA7XG5cdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9yZWNvbW1lbmRhdGlvbnNEYXRhXCIsIHJlY29tbWVuZGF0aW9uc0RhdGEpO1xuXHRcdGludGVybmFsTW9kZWwucmVmcmVzaCh0cnVlKTtcblx0fSxcblxuXHRpZ25vcmVSZWNvbW1lbmRhdGlvbkZvckNvbnRleHRzOiAoY29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sIGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCk6IHZvaWQgPT4ge1xuXHRcdGxldCByZWNvbW1lbmRhdGlvbkNvbnRleHRzOiBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mb1tdID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9yZWNvbW1lbmRhdGlvbkNvbnRleHRzXCIpIHx8IFtdO1xuXHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uRGF0YSA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25zRGF0YVwiKTtcblx0XHRjb25zdCBpZ25vcmVkQ29udGV4dFBhdGhzID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9pZ25vcmVkQ29udGV4dFBhdGhzXCIpIHx8IFtdO1xuXHRcdGNvbnRleHRzLmZvckVhY2goKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0KSA9PiB7XG5cdFx0XHRjb25zdCBpZ25vcmVkQ29udGV4dFBhdGggPSBjb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdGlnbm9yZWRDb250ZXh0UGF0aHMucHVzaChpZ25vcmVkQ29udGV4dFBhdGgpO1xuXHRcdFx0Ly8gZGVsZXRlIHJlY29tbWVuZGF0aW9uIGRhdGEgZm9yIGEgY29udGV4dCBvciBpdHMgY2hpbGRyZW4gZmlsdGVyIHJlY29tbWVuZGF0aW9uQ29udGV4dHMgd2hpY2ggZG8gbm90IG1hdGNoXG5cdFx0XHQvLyBhIHBhdGguIFRoaXMgd2lsbCBiZSB0aGUgbGlzdCBvZiByZWNvbW1lbmRhdGlvbnMgY29udGV4dHMgdG8gYmUga2VwdCBpbiBtb2RlbFxuXHRcdFx0cmVjb21tZW5kYXRpb25Db250ZXh0cyA9IHJlY29tbWVuZGF0aW9uQ29udGV4dHMuZmlsdGVyKChjb250ZXh0SW5mbzogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8pID0+IHtcblx0XHRcdFx0cmV0dXJuICFjb250ZXh0SW5mbz8uY29udGV4dC5nZXRQYXRoKCkuc3RhcnRzV2l0aChpZ25vcmVkQ29udGV4dFBhdGgpO1xuXHRcdFx0fSk7XG5cdFx0XHRPYmplY3Qua2V5cyhyZWNvbW1lbmRhdGlvbkRhdGEpLmZvckVhY2goKGRhdGEpID0+IHtcblx0XHRcdFx0aWYgKGRhdGEuc3RhcnRzV2l0aChpZ25vcmVkQ29udGV4dFBhdGgpKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIHJlY29tbWVuZGF0aW9uRGF0YVtkYXRhXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9yZWNvbW1lbmRhdGlvbnNEYXRhXCIsIHJlY29tbWVuZGF0aW9uRGF0YSk7XG5cdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9yZWNvbW1lbmRhdGlvbkNvbnRleHRzXCIsIHJlY29tbWVuZGF0aW9uQ29udGV4dHMpO1xuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvaWdub3JlZENvbnRleHRQYXRoc1wiLCBpZ25vcmVkQ29udGV4dFBhdGhzKTtcblx0fSxcblxuXHRjbGVhcklnbm9yZWRDb250ZXh0czogKGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCwgY29udGV4dFBhdGg6IHN0cmluZyk6IHZvaWQgPT4ge1xuXHRcdGxldCBpZ25vcmVkQ29udGV4dFBhdGhzID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9pZ25vcmVkQ29udGV4dFBhdGhzXCIpIHx8IFtdO1xuXHRcdGlnbm9yZWRDb250ZXh0UGF0aHMgPSBpZ25vcmVkQ29udGV4dFBhdGhzLmZpbHRlcigoaWdub3JlZENvbnRleHRQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRcdHJldHVybiAhaWdub3JlZENvbnRleHRQYXRoLnN0YXJ0c1dpdGgoY29udGV4dFBhdGgpO1xuXHRcdH0pO1xuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvaWdub3JlZENvbnRleHRQYXRoc1wiLCBpZ25vcmVkQ29udGV4dFBhdGhzKTtcblx0fSxcblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlcmUgYXJlIHJlY29tbWVuZGF0aW9uIHJvbGVzIGZvciBjb250ZXh0IGVudGl0eSB0eXBlLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dEluZm8gQ29udGFpbnMgY29udGV4dCBhbmQgY29udGV4dElkZW50aWZpZXJcblx0ICogQHBhcmFtIHJlY29tbWVuZGF0aW9uc1JlZ2lzdHJ5IFJlZ2lzdHJ5IHdoaWNoIGhvbGRzIHRoZSByZWNvbW1lbmRhdGlvbiByb2xlcyBmb3IgYWxsIGVudGl0eSB0eXBlc1xuXHQgKiBAcmV0dXJucyBCb29sZWFuIHZhbHVlIGJhc2VkIG9uIHdoZXRoZXIgcmVjb21tZW5kYXRpb24gcm9sZSBleGlzdHMgZm9yIGVudGl0eVR5cGUgYW5ub3RhdGlvbiBvciBub3Rcblx0ICovXG5cdGNoZWNrSWZSZWNvbW1lbmRhdGlvblJvbGVFeGlzdHNGb3JDb250ZXh0OiAoXG5cdFx0Y29udGV4dEluZm86IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvLFxuXHRcdHJlY29tbWVuZGF0aW9uc1JlZ2lzdHJ5OiBSZWNvbW1lbmRhdGlvbnNSZWdpc3RyeVxuXHQpOiBib29sZWFuID0+IHtcblx0XHRjb25zdCBkYXRhTW9kZWxPYmplY3QgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzRm9yVGFyZ2V0UGF0aChcblx0XHRcdGNvbnRleHRJbmZvPy5jb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdGNvbnRleHRJbmZvPy5jb250ZXh0LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpXG5cdFx0KTtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gZGF0YU1vZGVsT2JqZWN0Py50YXJnZXRFbnRpdHlUeXBlLm5hbWUgYXMgc3RyaW5nO1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyhyZWNvbW1lbmRhdGlvbnNSZWdpc3RyeS5yb2xlcykuaW5jbHVkZXMoZW50aXR5VHlwZSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyByZWNvbW1lbmRhdGlvbiBkYXRhIHdpdGgga2V5cyBvZiBhbGwgY29udGV4dHMuIFRoaXMgbXVzdCBiZSBzaG93biBpbiB0aGUgQWNjZXB0IFJlY29tbWVuZGF0aW9ucyBEaWFsb2cgYmFzZWQgb24gdGhlIHVzZSBjYXNlLlxuXHQgKlxuXHQgKiBAcGFyYW0gcmVjb21tZW5kYXRpb25zRGF0YVxuXHQgKiBAcGFyYW0gcmVjb21tZW5kYXRpb25Db250ZXh0c1xuXHQgKi9cblx0dXBkYXRlQ29udGV4dHNLZXlzSW5Nb2RlbDogKHJlY29tbWVuZGF0aW9uc0RhdGE6IFJlY29tbWVuZGF0aW9uSW5mbywgcmVjb21tZW5kYXRpb25Db250ZXh0czogT0RhdGFWNENvbnRleHRbXSk6IHZvaWQgPT4ge1xuXHRcdGlmICghcmVjb21tZW5kYXRpb25zRGF0YS5oYXNPd25Qcm9wZXJ0eShcImtleXNcIikpIHtcblx0XHRcdHJlY29tbWVuZGF0aW9uc0RhdGFbXCJrZXlzXCJdID0ge307XG5cdFx0fVxuXHRcdGNvbnN0IGtleXNEYXRhID0gcmVjb21tZW5kYXRpb25zRGF0YVtcImtleXNcIl07XG5cdFx0cmVjb21tZW5kYXRpb25Db250ZXh0cy5mb3JFYWNoKChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCkgPT4ge1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IG1ldGFQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKGNvbnRleHQ/LmdldFBhdGgoKSk7XG5cdFx0XHRjb25zdCBkYXRhTW9kZWwgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChtZXRhUGF0aCkpO1xuXHRcdFx0Y29uc3Qgc2VtYW50aWNLZXlzRm9yR2l2ZW5NZXRhUGF0aCA9IGRhdGFNb2RlbC50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zLkNvbW1vbj8uU2VtYW50aWNLZXk7XG5cdFx0XHRpZiAoc2VtYW50aWNLZXlzRm9yR2l2ZW5NZXRhUGF0aCkge1xuXHRcdFx0XHRpZiAoa2V5c0RhdGEgJiYgIWtleXNEYXRhLmhhc093blByb3BlcnR5KG1ldGFQYXRoKSAmJiBzZW1hbnRpY0tleXNGb3JHaXZlbk1ldGFQYXRoKSB7XG5cdFx0XHRcdFx0a2V5c0RhdGFbbWV0YVBhdGhdID0gc2VtYW50aWNLZXlzRm9yR2l2ZW5NZXRhUGF0aC5tYXAoKGkpID0+IGkudmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSBvbGQgcmVjb21tZW5kYXRpb25zIGZvciB0aGUgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIHJlY29tbWVuZGF0aW9uc0RhdGEgVGhlIHJlY29tbWVuZGF0aW9uIGRhdGEgd2hpY2ggaXMgc3RvcmVkXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbnNDb250ZXh0cyBUaGUgY29udGV4dHMgZm9yIHdoaWNoIHJlY29tbWVuZGF0aW9ucyBhcmUgYmVpbmcgZmV0Y2hlZFxuXHQgKi9cblx0Y2xlYXJSZWNvbW1lbmRhdGlvbnNEYXRhRnJvbU1vZGVsRm9yR2l2ZW5Db250ZXh0czogKFxuXHRcdHJlY29tbWVuZGF0aW9uc0RhdGE6IFJlY29tbWVuZGF0aW9uSW5mbyxcblx0XHRyZWNvbW1lbmRhdGlvbnNDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W11cblx0KTogdm9pZCA9PiB7XG5cdFx0aWYgKHJlY29tbWVuZGF0aW9uc0NvbnRleHRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyhyZWNvbW1lbmRhdGlvbnNEYXRhKS5mb3JFYWNoKCh0YXJnZXQpID0+IHtcblx0XHRcdFx0Y29uc3QgaWR4ID0gdGFyZ2V0Lmxhc3RJbmRleE9mKFwiKVwiKTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHJlY29tbWVuZGF0aW9uc0NvbnRleHRzLmZpbmQoKGNvbnRleHQpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBjb250ZXh0LmdldFBhdGgoKSA9PT0gdGFyZ2V0LnN1YnN0cmluZygwLCBpZHggKyAxKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRkZWxldGUgcmVjb21tZW5kYXRpb25zRGF0YVt0YXJnZXRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gd2lsbCBlbmhhbmNlIHRoZSByZWNvbW1lbmRhdGlvbnMgYWNjb3JkaW5nIHRvIGRhdGEgcmVjZWl2ZWQgZnJvbSBiYWNrZW5kLlxuXHQgKlxuXHQgKiBAcGFyYW0gcmVjb21tZW5kYXRpb25zIFRoZSBkYXRhIHJlY2VpdmVkIGZyb20gYmFja2VuZFxuXHQgKiBAcGFyYW0gcmVjb21tZW5kYXRpb25zRGF0YSBUaGUgZXhpc3RpbmcgcmVjb21tZW5kYXRpb24gTW9kZWxcblx0ICovXG5cdGVuaGFuY2VSZWNvbW1lbmRhdGlvbk1vZGVsOiAoXG5cdFx0cmVjb21tZW5kYXRpb25zOiBBcnJheTxTdGFuZGFyZFJlY29tbWVuZGF0aW9uUmVzcG9uc2U+LFxuXHRcdHJlY29tbWVuZGF0aW9uc0RhdGE6IFJlY29yZDxzdHJpbmcsIG9iamVjdD5cblx0KTogdm9pZCA9PiB7XG5cdFx0cmVjb21tZW5kYXRpb25zPy5mb3JFYWNoKChyZWNvbW1lbmRhdGlvbjogU3RhbmRhcmRSZWNvbW1lbmRhdGlvblJlc3BvbnNlKSA9PiB7XG5cdFx0XHRjb25zdCB0YXJnZXQgPSByZWNvbW1lbmRhdGlvbi5BSVJlY29tbWVuZGVkRmllbGRQYXRoO1xuXHRcdFx0aWYgKHRhcmdldCkge1xuXHRcdFx0XHQvLyBsb29wIHRocm91Z2ggYWxsIHRoZSByZWNvbW1lbmRhdGlvbnMgc2VudCBmcm9tIGJhY2tlbmRcblx0XHRcdFx0Y29uc3QgcmVjb21tZW5kYXRpb25WYWx1ZXM6IFJlY29tbWVuZGF0aW9uVmFsdWVUeXBlW10gPSBbXTtcblx0XHRcdFx0bGV0IGlzUGxhY2Vob2xkZXJWYWx1ZUZvdW5kID0gZmFsc2U7XG5cblx0XHRcdFx0Ly8gc2V0IHRoZSBvdGhlciBhbHRlcm5hdGl2ZXMgYXMgcmVjb21tZW5kYXRpb25zXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uLl9BSUFsdHZSZWNtZGRGbGRWYWxzPy5mb3JFYWNoKChhbHRlcm5hdGl2ZVJlY29tbWVuZGF0aW9uOiBBbHRlcm5hdGl2ZVJlY29tbWVuZGF0aW9uUmVzcG9uc2VUeXBlKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgcmVjb21tZW5kYXRpb25WYWx1ZTogUmVjb21tZW5kYXRpb25WYWx1ZVR5cGUgPSB7XG5cdFx0XHRcdFx0XHR2YWx1ZTogYWx0ZXJuYXRpdmVSZWNvbW1lbmRhdGlvbi5BSVJlY29tbWVuZGVkRmllbGRWYWx1ZSxcblx0XHRcdFx0XHRcdHByb2JhYmlsaXR5OiBhbHRlcm5hdGl2ZVJlY29tbWVuZGF0aW9uLkFJUmVjb21tZW5kZWRGaWVsZFNjb3JlVmFsdWVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGlmIChyZWNvbW1lbmRhdGlvbi5BSVJlY29tbWVuZGVkRmllbGRWYWx1ZSA9PT0gYWx0ZXJuYXRpdmVSZWNvbW1lbmRhdGlvbi5BSVJlY29tbWVuZGVkRmllbGRWYWx1ZSkge1xuXHRcdFx0XHRcdFx0aXNQbGFjZWhvbGRlclZhbHVlRm91bmQgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJlY29tbWVuZGF0aW9uVmFsdWVzLnB1c2gocmVjb21tZW5kYXRpb25WYWx1ZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbnNEYXRhW3RhcmdldF0gPSB7XG5cdFx0XHRcdFx0dmFsdWU6IGlzUGxhY2Vob2xkZXJWYWx1ZUZvdW5kID8gcmVjb21tZW5kYXRpb24uQUlSZWNvbW1lbmRlZEZpZWxkVmFsdWUgOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0dGV4dDogaXNQbGFjZWhvbGRlclZhbHVlRm91bmQgPyByZWNvbW1lbmRhdGlvbi5BSVJlY29tbWVuZGVkRmllbGREZXNjcmlwdGlvbiA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRhZGRpdGlvbmFsVmFsdWVzOiByZWNvbW1lbmRhdGlvblZhbHVlc1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgcmVjb21tZW5kYXRpb25zIGZyb20gc3RhbmRhcmQgcmVjb21tZW5kYXRpb25zIG1vZGVsLlxuXHQgKlxuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHQgQmluZGluZyBDb250ZXh0IG9mIHRoZSBmaWVsZFxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFByb3BlcnR5IHBhdGggb2YgdGhlIGZpZWxkXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbkRhdGEgT2JqZWN0IGNvbnRhaW5pbmcgcmVjb21tZW5kYXRpb25zXG5cdCAqIEByZXR1cm5zIFJlY29tbWVuZGF0aW9uIGRhdGEgZm9yIHRoZSBmaWVsZFxuXHQgKi9cblx0Z2V0U3RhbmRhcmRSZWNvbW1lbmRhdGlvbnM6IGZ1bmN0aW9uIChcblx0XHRiaW5kaW5nQ29udGV4dDogQ29udGV4dCxcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRyZWNvbW1lbmRhdGlvbkRhdGE6IFJlY29tbWVuZGF0aW9uSW5mb1xuXHQpOiBTdGFuZGFyZFJlY29tbWVuZGF0aW9uRGF0YVR5cGUgfCB1bmRlZmluZWQge1xuXHRcdGlmIChiaW5kaW5nQ29udGV4dCAmJiBwcm9wZXJ0eVBhdGgpIHtcblx0XHRcdGNvbnN0IGZ1bGxQYXRoID0gYmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpICsgXCIvXCIgKyBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb25EYXRhW2Z1bGxQYXRoXSB8fCB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogRmV0Y2hlcyB0aGUgZGlzcGxheSBtb2RlIGZvciBhIGdpdmVuIHRhcmdldCBwYXRoLlxuXHQgKlxuXHQgKiBAcGFyYW0gdGFyZ2V0UGF0aFxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsXG5cdCAqIEByZXR1cm5zIERpc3BsYXkgbW9kZSBmb3IgdGFyZ2V0IHBhdGhcblx0ICovXG5cdGdldERpc3BsYXlNb2RlRm9yVGFyZ2V0UGF0aCh0YXJnZXRQYXRoOiBzdHJpbmcsIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGludm9sdmVkRGF0YU1vZGVsT2JqZWN0ID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGg8UHJvcGVydHk+KHRhcmdldFBhdGgsIG1ldGFNb2RlbCk7XG5cdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBpbnZvbHZlZERhdGFNb2RlbE9iamVjdCAmJiBnZXREaXNwbGF5TW9kZShpbnZvbHZlZERhdGFNb2RlbE9iamVjdCk7XG5cdFx0cmV0dXJuIGRpc3BsYXlNb2RlID8gZGlzcGxheU1vZGUgOiBcIkRlc2NyaXB0aW9uVmFsdWVcIjtcblx0fSxcblxuXHQvKipcblx0ICogRnVuY3Rpb24gd2hpY2ggaW5mb3JtcyB3aGV0aGVyIGEgcmVjb21tZW5kYXRpb24gZmllbGQgaXMgbnVsbCBvciBub3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEBwYXJhbSBrZXlcblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aFxuXHQgKiBAcmV0dXJucyBib29sZWFuIHZhbHVlIGJhc2VkIG9uIHdoZXRoZXIgYSByZWNvbW1lbmRhdGlvbiBmaWVsZCBpcyBudWxsIG9yIG5vdFxuXHQgKi9cblxuXHRpc1JlY29tbWVuZGF0aW9uRmllbGROdWxsKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBrZXk6IHN0cmluZywgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHNGb3JUYXJnZXRQYXRoPFByb3BlcnR5PihrZXksIGNvbnRleHQuZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdGlmICghY29udGV4dD8uZ2V0UHJvcGVydHkocHJvcGVydHlQYXRoKSkge1xuXHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmdldERpc3BsYXlNb2RlRm9yVGFyZ2V0UGF0aChrZXksIGNvbnRleHQ/LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdGlmIChkaXNwbGF5TW9kZSAmJiBkaXNwbGF5TW9kZSAhPT0gXCJWYWx1ZVwiKSB7XG5cdFx0XHRcdGNvbnN0IHRleHQgPVxuXHRcdFx0XHRcdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHByb3BlcnR5Py50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQpICYmXG5cdFx0XHRcdFx0cHJvcGVydHk/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dD8ucGF0aDtcblx0XHRcdFx0cmV0dXJuIHRleHQgPyAhY29udGV4dD8uZ2V0UHJvcGVydHkodGV4dCkgOiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHR1cGRhdGVGZXRjaGVkQ29udGV4dFBhdGhzOiBmdW5jdGlvbiAoY29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sIGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCk6IHZvaWQge1xuXHRcdGNvbnN0IGZldGNoZWRDb250ZXh0UGF0aHM6IHN0cmluZ1tdID0gW107XG5cdFx0Y29udGV4dHM/LmZvckVhY2goKGNvbnRleHQpID0+IHtcblx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gY29udGV4dD8uZ2V0UGF0aCgpO1xuXHRcdFx0aWYgKGNvbnRleHRQYXRoICYmICFmZXRjaGVkQ29udGV4dFBhdGhzLmluY2x1ZGVzKGNvbnRleHRQYXRoKSkge1xuXHRcdFx0XHRmZXRjaGVkQ29udGV4dFBhdGhzLnB1c2goY29udGV4dFBhdGgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aW50ZXJuYWxNb2RlbD8uc2V0UHJvcGVydHkoXCIvZmV0Y2hlZENvbnRleHRQYXRoc1wiLCBmZXRjaGVkQ29udGV4dFBhdGhzKTtcblx0XHRpbnRlcm5hbE1vZGVsLnJlZnJlc2goKTtcblx0fSxcblxuXHRnZXRDb250ZXh0c1dpdGhOb1JlY29tbWVuZGF0aW9uczogZnVuY3Rpb24gKFxuXHRcdGNvbnRleHRzSW5mbzogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm9bXSxcblx0XHRpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWxcblx0KTogUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm9bXSB7XG5cdFx0Y29uc3QgZmV0Y2hlZENvbnRleHRQYXRocyA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvZmV0Y2hlZENvbnRleHRQYXRoc1wiKSB8fCBbXTtcblx0XHRjb25zdCBpZ25vcmVkQ29udGV4dFBhdGhzID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9pZ25vcmVkQ29udGV4dFBhdGhzXCIpIHx8IFtdO1xuXHRcdHJldHVybiBjb250ZXh0c0luZm8uZmlsdGVyKChjb250ZXh0SW5mbykgPT4ge1xuXHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBjb250ZXh0SW5mbz8uY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRyZXR1cm4gIWZldGNoZWRDb250ZXh0UGF0aHMuaW5jbHVkZXMoY29udGV4dFBhdGgpICYmICFpZ25vcmVkQ29udGV4dFBhdGhzLmluY2x1ZGVzKGNvbnRleHRQYXRoKTtcblx0XHR9KTtcblx0fSxcblxuXHRyZXNldFJlY29tbWVuZGF0aW9uczogZnVuY3Rpb24gKGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCk6IHZvaWQge1xuXHRcdC8vIHdlIGhhdmUgdmVyc2lvbiBrZXkgbWFpbnRhaW5lZCBvbmx5IGZvciBzdGFuZGFyZCBzb2x1dGlvbiBvZiByZWNvbW1lbmRhdGlvbnNcblx0XHQvL2FuZCBvbmx5IGlmIHRoaXMgaXMgc3RhbmRhcmQgaW1wbGVtZW50YXRpb24sIHdlIHNob3VsZCByZXNldCByZWNvbW1lbmRhdGlvbnNcblx0XHRjb25zdCByZWNvbW1lbmRhdGlvbnNEYXRhSW5Nb2RlbCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25zRGF0YVwiKTtcblx0XHRpZiAocmVjb21tZW5kYXRpb25zRGF0YUluTW9kZWwgJiYgcmVjb21tZW5kYXRpb25zRGF0YUluTW9kZWwuaGFzT3duUHJvcGVydHkoXCJ2ZXJzaW9uXCIpKSB7XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3JlY29tbWVuZGF0aW9uc0RhdGFcIiwge30pO1xuXHRcdFx0aW50ZXJuYWxNb2RlbD8uc2V0UHJvcGVydHkoXCIvZmV0Y2hlZENvbnRleHRQYXRoc1wiLCBbXSk7XG5cdFx0XHRpbnRlcm5hbE1vZGVsPy5zZXRQcm9wZXJ0eShcIi9pZ25vcmVkQ29udGV4dFBhdGhzXCIsIFtdKTtcblx0XHRcdGludGVybmFsTW9kZWwucmVmcmVzaCh0cnVlKTtcblx0XHR9XG5cdH0sXG5cblx0Z2V0Q3VycmVudFJvb3RDb250ZXh0OiBmdW5jdGlvbiAoKTogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiByb290Q29udGV4dDtcblx0fSxcblxuXHRzZXRDdXJyZW50Um9vdENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHZvaWQge1xuXHRcdHJvb3RDb250ZXh0ID0gY29udGV4dDtcblx0fSxcblx0LyoqXG5cdCAqIEFkZHMgdGhlIHRleHQgb2YgQ29udGV4dElkZW50aWZpZXIgZWxzZSB3aWxsIGFkZCBpdHMgdmFsdWUgdG8gdGhlIGFjY2VwdEFsbFBhcmFtcy5cblx0ICpcblx0ICogQHBhcmFtIHBhcmFtc1xuXHQgKiBAcGFyYW0gdmlld1BhdGggQ29udGV4dCBQYXRoIG9mIHZpZXdcblx0ICovXG5cdGFkZENvbnRleHRJZGVudGlmaWVyVGV4dChwYXJhbXM6IEFjY2VwdEFsbFBhcmFtcywgdmlld1BhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgcmVjb21tZW5kYXRpb25EYXRhIG9mIHBhcmFtcz8ucmVjb21tZW5kYXRpb25EYXRhIHx8IFtdKSB7XG5cdFx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdFx0Y29uc3QgaWRlbnRpZmllclZhbHVlczogc3RyaW5nW10gPSBbXTtcblx0XHRcdC8vIGZvciByZWNvbW1lbmRhdGlvbiBmaWVsZHMgd2hpY2ggYXJlIGRpcmVjdGx5IG9uIHBhZ2UsIHdlIGRvIG5vdCB3YW50IHRvIHNob3cgaWRlbnRpZmllciB2YWx1ZXNcblx0XHRcdC8vIHNvIHdlIGV4Y2x1ZGUgdGhhdCBjYWxjdWxhdGlvblxuXHRcdFx0aWYgKHJlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0Py5nZXRQYXRoKCkgIT09IHZpZXdQYXRoKSB7XG5cdFx0XHRcdGlmIChyZWNvbW1lbmRhdGlvbkRhdGEuY29udGV4dElkZW50aWZpZXIgJiYgcmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHQpIHtcblx0XHRcdFx0XHRyZWNvbW1lbmRhdGlvbkRhdGEuY29udGV4dElkZW50aWZpZXIuZm9yRWFjaCgoY29udGV4dElkZW50aWZpZXIpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGlkUGF0aCA9IGAke3JlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0Py5nZXRQYXRoKCl9KS8ke2NvbnRleHRJZGVudGlmaWVyfWA7XG5cdFx0XHRcdFx0XHRjb25zdCBjb250ZXh0VGV4dCA9IHRoaXMuZ2V0VGV4dEZvcktleShyZWNvbW1lbmRhdGlvbkRhdGEuY29udGV4dCBhcyBPRGF0YVY0Q29udGV4dCwgaWRQYXRoLCBjb250ZXh0SWRlbnRpZmllcik7XG5cdFx0XHRcdFx0XHRpZiAoY29udGV4dFRleHQpIHtcblx0XHRcdFx0XHRcdFx0aWRlbnRpZmllclZhbHVlcy5wdXNoKGluZGV4ID09PSAwID8gYCR7Y29udGV4dFRleHR9YCA6IGAgJHtjb250ZXh0VGV4dH1gKTtcblx0XHRcdFx0XHRcdFx0aW5kZXggPSBpbmRleCArIDE7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0SWRlbnRpZmllclRleHQgPSBpZGVudGlmaWVyVmFsdWVzO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIEZldGNoZXMgdGFibGUgbmFtZSBiYXNlZCBvbiB0aGUgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIGNvbnRleHRcblx0ICogQHJldHVybnMgVGFibGUgbmFtZVxuXHQgKi9cblxuXHRnZXRFbnRpdHlOYW1lKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHNGb3JUYXJnZXRQYXRoKFxuXHRcdFx0Y29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRjb250ZXh0LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpXG5cdFx0KTtcblx0XHRjb25zdCB0eXBlTmFtZSA9IGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvPy5UeXBlTmFtZTtcblx0XHRyZXR1cm4gdHlwZU5hbWUgJiYgY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHR5cGVOYW1lKSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBGZXRjaGVzIFRleHQgZm9yIGtleSBpZiBpdCBleGlzdHMgZWxzZSB3aWxsIHJldHVybiBpdHMgdmFsdWUuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEBwYXJhbSBrZXlQYXRoXG5cdCAqIEBwYXJhbSBrZXlcblx0ICogQHJldHVybnMgVGV4dCBvciBWYWx1ZSBmb3IgYSBrZXlcblx0ICovXG5cblx0Z2V0VGV4dEZvcktleShjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwga2V5UGF0aDogc3RyaW5nLCBrZXk6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0bGV0IHZhbHVlID0gXCJcIjtcblx0XHRjb25zdCBpbnZvbHZlZERhdGFNb2RlbE9iamVjdDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4gfCB1bmRlZmluZWQgPVxuXHRcdFx0TWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGg8UHJvcGVydHk+KGtleVBhdGgsIGNvbnRleHQ/LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpKTtcblx0XHRjb25zdCB0YXJnZXRPYmplY3QgPSBpbnZvbHZlZERhdGFNb2RlbE9iamVjdD8udGFyZ2V0T2JqZWN0O1xuXHRcdGNvbnN0IHByb3BlcnR5ID1cblx0XHRcdCgoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24odGFyZ2V0T2JqZWN0KSB8fCBpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24odGFyZ2V0T2JqZWN0KSkgJiYgdGFyZ2V0T2JqZWN0LiR0YXJnZXQpIHx8XG5cdFx0XHQodGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5KTtcblx0XHRjb25zdCB0ZXh0ID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0KTtcblx0XHRpZiAodGV4dCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dmFsdWUgPSBldmFsdWF0ZUV4cHJlc3Npb24odGV4dCwgeyBcIlwiOiBjb250ZXh0LmdldE9iamVjdCgpIH0pIGFzIHN0cmluZztcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZSA/IHZhbHVlIDogY29udGV4dC5nZXRQcm9wZXJ0eShrZXkpO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdHZhbHVlID0gY29udGV4dC5nZXRQcm9wZXJ0eShrZXkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWUgPz8gY29udGV4dC5nZXRQcm9wZXJ0eShrZXkpO1xuXHR9XG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7OztFQWdEQSxJQUFJQSxXQUEyQjtFQUV4QixNQUFNQyw0QkFBNEIsR0FBRztJQUMzQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyxvQkFBb0IsRUFBRSxDQUNyQkMsZUFBaUQsRUFDakRDLGFBQXdCLEVBQ3hCQyx1QkFBeUMsS0FDL0I7TUFDVixNQUFNQyxtQkFBbUIsR0FBSUYsYUFBYSxDQUFDRyxXQUFXLENBQUMsc0JBQXNCLENBQUMsSUFBMkIsQ0FBQyxDQUFDO01BQzNHTiw0QkFBNEIsQ0FBQ08saURBQWlELENBQUNGLG1CQUFtQixFQUFFRCx1QkFBdUIsQ0FBQztNQUM1SEosNEJBQTRCLENBQUNRLDBCQUEwQixDQUFDTixlQUFlLEVBQUVHLG1CQUFtQixDQUFDO01BQzdGTCw0QkFBNEIsQ0FBQ1MseUJBQXlCLENBQUNMLHVCQUF1QixFQUFFRCxhQUFhLENBQUM7TUFDOUZILDRC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
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { Property } from "@sap-ux/vocabularies-types";
|
|
2
|
+
import type { CompiledBindingToolkitExpression } from "sap/fe/base/BindingToolkit";
|
|
3
|
+
import { compileExpression, getExpressionFromAnnotation } from "sap/fe/base/BindingToolkit";
|
|
2
4
|
import * as MetaModelConverter from "sap/fe/core/converters/MetaModelConverter";
|
|
3
5
|
import type { RecommendationsRegistry } from "sap/fe/core/services/SideEffectsServiceFactory";
|
|
4
6
|
import type Context from "sap/ui/model/Context";
|
|
@@ -8,8 +10,6 @@ import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
|
|
|
8
10
|
import type { AcceptAllParams } from "../controllerextensions/Recommendations";
|
|
9
11
|
import type { DataModelObjectPath } from "../templating/DataModelPathHelper";
|
|
10
12
|
import { getDisplayMode } from "../templating/UIFormatters";
|
|
11
|
-
import type { CompiledBindingToolkitExpression } from "./BindingToolkit";
|
|
12
|
-
import { compileExpression, getExpressionFromAnnotation } from "./BindingToolkit";
|
|
13
13
|
import { evaluateExpression } from "./BindingToolkitEvaluator";
|
|
14
14
|
import type { RecommendationValueType } from "./RecommendationHelper";
|
|
15
15
|
import { isPathAnnotationExpression, isPropertyPathExpression } from "./TypeGuards";
|