@sapui5/sap.fe.core 1.131.0 → 1.133.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.js +17 -23
- package/src/sap/fe/core/AppComponent.js +74 -36
- package/src/sap/fe/core/AppComponent.ts +70 -3
- package/src/sap/fe/core/AppStateHandler.js +44 -13
- package/src/sap/fe/core/AppStateHandler.ts +38 -0
- package/src/sap/fe/core/BaseController.js +3 -3
- package/src/sap/fe/core/CommonUtils.js +30 -37
- package/src/sap/fe/core/CommonUtils.ts +15 -13
- package/src/sap/fe/core/ExtensionAPI.js +29 -34
- package/src/sap/fe/core/ExtensionAPI.ts +3 -0
- package/src/sap/fe/core/InsightsFormattersExtension.js +2 -2
- package/src/sap/fe/core/PageController.js +40 -31
- package/src/sap/fe/core/PageController.ts +14 -1
- package/src/sap/fe/core/ResourceModel.js +4 -4
- package/src/sap/fe/core/ReuseComponent.js +27 -13
- package/src/sap/fe/core/ReuseComponent.ts +18 -0
- package/src/sap/fe/core/TemplateComponent.js +102 -89
- package/src/sap/fe/core/TemplateComponent.ts +20 -1
- package/src/sap/fe/core/TemplateModel.js +6 -7
- package/src/sap/fe/core/UIProvider.js +1 -1
- package/src/sap/fe/core/UIProvider.ts +2 -9
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +63 -48
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +56 -27
- package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.js +9 -0
- package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.ts +48 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +4 -6
- package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +2 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +32 -18
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +30 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +9 -13
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +2 -1
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlock.js +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +19 -25
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +1 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +3 -4
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +20 -24
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +10 -15
- package/src/sap/fe/core/controllerextensions/ContextSharing.js +3 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.js +296 -246
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -175
- package/src/sap/fe/core/controllerextensions/Feedback.js +10 -11
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +6 -6
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -0
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +27 -36
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +57 -78
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +42 -50
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +12 -19
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +23 -17
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -7
- package/src/sap/fe/core/controllerextensions/PageReady.js +15 -21
- package/src/sap/fe/core/controllerextensions/Paginator.js +3 -3
- package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -3
- package/src/sap/fe/core/controllerextensions/Recommendations.js +23 -36
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Routing.js +3 -3
- package/src/sap/fe/core/controllerextensions/Share.js +19 -28
- package/src/sap/fe/core/controllerextensions/SideEffects.js +68 -32
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +58 -6
- package/src/sap/fe/core/controllerextensions/Telemetry.js +4 -5
- package/src/sap/fe/core/controllerextensions/ViewState.js +23 -24
- package/src/sap/fe/core/controllerextensions/ViewState.ts +6 -1
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +13 -10
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +13 -8
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +15 -16
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +3 -4
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.js +288 -0
- package/src/sap/fe/core/controllerextensions/dialog/{OperationsDialog.block.tsx → OperationsDialog.tsx} +27 -29
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +41 -5
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +61 -8
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.js +404 -0
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.ts +502 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +35 -43
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +34 -14
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -27
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +27 -15
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +51 -39
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +75 -34
- package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +4 -4
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +88 -427
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +82 -620
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +9 -5
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +6 -5
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +116 -79
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +87 -13
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +4 -6
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +5 -7
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +6 -7
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +4 -4
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +58 -20
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +55 -4
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +9 -12
- package/src/sap/fe/core/controls/CommandExecution.js +2 -2
- package/src/sap/fe/core/controls/ComponentLoader.js +20 -21
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +250 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/{DraftDataLossDialog.block.tsx → DraftDataLossDialog.tsx} +31 -19
- package/src/sap/fe/core/controls/FormElementWrapper.js +19 -21
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +114 -0
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +115 -0
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +454 -0
- package/src/sap/fe/core/controls/Recommendations/{ConfirmRecommendationDialog.block.tsx → ConfirmRecommendationDialog.tsx} +5 -9
- package/src/sap/fe/core/converters/ConverterContext.js +17 -18
- package/src/sap/fe/core/converters/ConverterContext.ts +10 -15
- package/src/sap/fe/core/converters/ManifestSettings.js +29 -28
- package/src/sap/fe/core/converters/ManifestSettings.ts +22 -1
- package/src/sap/fe/core/converters/ManifestWrapper.js +26 -48
- package/src/sap/fe/core/converters/MetaModelConverter.js +21 -28
- package/src/sap/fe/core/converters/MetaModelConverter.ts +2 -0
- package/src/sap/fe/core/converters/TemplateConverter.js +17 -21
- package/src/sap/fe/core/converters/TemplateConverter.ts +5 -3
- package/src/sap/fe/core/converters/annotations/DataField.js +69 -66
- package/src/sap/fe/core/converters/annotations/DataField.ts +30 -0
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +20 -23
- package/src/sap/fe/core/converters/controls/Common/Action.js +178 -43
- package/src/sap/fe/core/converters/controls/Common/Action.ts +202 -19
- package/src/sap/fe/core/converters/controls/Common/Chart.js +47 -22
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +50 -5
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +16 -23
- package/src/sap/fe/core/converters/controls/Common/Form.js +25 -38
- package/src/sap/fe/core/converters/controls/Common/Form.ts +3 -0
- package/src/sap/fe/core/converters/controls/Common/KPI.js +32 -47
- package/src/sap/fe/core/converters/controls/Common/Table.js +464 -506
- package/src/sap/fe/core/converters/controls/Common/Table.ts +335 -219
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +17 -28
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -2
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +66 -90
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +10 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +49 -73
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +6 -10
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +35 -50
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +110 -60
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +137 -41
- package/src/sap/fe/core/converters/helpers/Aggregation.js +19 -30
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +5 -5
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +11 -14
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +14 -21
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +4 -6
- package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -7
- package/src/sap/fe/core/converters/helpers/Key.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +2 -3
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +18 -52
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -34
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +103 -74
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +111 -39
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +28 -31
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +17 -9
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +61 -52
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +60 -21
- package/src/sap/fe/core/definition/FEDefinition.js +104 -44
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +37 -7
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +42 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +4 -5
- package/src/sap/fe/core/formatters/FiscalFormat.js +24 -24
- package/src/sap/fe/core/formatters/ValueFormatter.js +4 -23
- package/src/sap/fe/core/formatters/ValueFormatter.ts +0 -18
- package/src/sap/fe/core/fpm/Component.js +12 -14
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +20 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +22 -13
- package/src/sap/fe/core/helpers/BindingHelper.js +3 -3
- package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +55 -62
- package/src/sap/fe/core/helpers/DeleteHelper.ts +48 -51
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +4 -7
- package/src/sap/fe/core/helpers/FPMHelper.js +4 -7
- package/src/sap/fe/core/helpers/HTTP503Handler.js +2 -1
- package/src/sap/fe/core/helpers/HTTP503Handler.ts +4 -3
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +5 -5
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +6 -6
- package/src/sap/fe/core/helpers/LoaderUtils.js +8 -3
- package/src/sap/fe/core/helpers/LoaderUtils.ts +15 -4
- package/src/sap/fe/core/helpers/MessageStrip.js +3 -4
- package/src/sap/fe/core/helpers/MetaModelFunction.js +26 -40
- package/src/sap/fe/core/helpers/MetaPath.js +9 -7
- package/src/sap/fe/core/helpers/MetaPath.ts +9 -3
- package/src/sap/fe/core/helpers/ModelHelper.js +33 -57
- package/src/sap/fe/core/helpers/ModelHelper.ts +3 -3
- package/src/sap/fe/core/helpers/PasteHelper.js +11 -19
- package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -1
- package/src/sap/fe/core/helpers/RecommendationHelper.js +3 -4
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +3 -5
- package/src/sap/fe/core/helpers/SizeHelper.js +3 -5
- package/src/sap/fe/core/helpers/StableIdHelper.js +13 -11
- package/src/sap/fe/core/helpers/StableIdHelper.ts +5 -1
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +28 -38
- package/src/sap/fe/core/helpers/Synchronization.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.js +19 -40
- package/src/sap/fe/core/helpers/TitleHelper.ts +5 -25
- package/src/sap/fe/core/helpers/TypeGuards.js +25 -18
- package/src/sap/fe/core/helpers/TypeGuards.ts +7 -0
- package/src/sap/fe/core/helpers/WebSocket.js +4 -4
- package/src/sap/fe/core/library.js +8 -7
- package/src/sap/fe/core/library.ts +2 -0
- package/src/sap/fe/core/manifestMerger/AddNewPage.js +9 -11
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +14 -25
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +15 -17
- package/src/sap/fe/core/messagebundle.properties +21 -0
- package/src/sap/fe/core/messagebundle_ar.properties +5 -1
- package/src/sap/fe/core/messagebundle_bg.properties +4 -0
- package/src/sap/fe/core/messagebundle_ca.properties +4 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +4 -0
- package/src/sap/fe/core/messagebundle_cs.properties +8 -4
- package/src/sap/fe/core/messagebundle_cy.properties +4 -0
- package/src/sap/fe/core/messagebundle_da.properties +4 -0
- package/src/sap/fe/core/messagebundle_de.properties +4 -0
- package/src/sap/fe/core/messagebundle_el.properties +4 -0
- package/src/sap/fe/core/messagebundle_en.properties +4 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +4 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +4 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +249 -231
- package/src/sap/fe/core/messagebundle_es.properties +5 -1
- package/src/sap/fe/core/messagebundle_es_MX.properties +4 -0
- package/src/sap/fe/core/messagebundle_et.properties +4 -0
- package/src/sap/fe/core/messagebundle_fi.properties +4 -0
- package/src/sap/fe/core/messagebundle_fr.properties +6 -2
- package/src/sap/fe/core/messagebundle_fr_CA.properties +4 -0
- package/src/sap/fe/core/messagebundle_hi.properties +4 -0
- package/src/sap/fe/core/messagebundle_hr.properties +4 -0
- package/src/sap/fe/core/messagebundle_hu.properties +4 -0
- package/src/sap/fe/core/messagebundle_id.properties +4 -0
- package/src/sap/fe/core/messagebundle_it.properties +4 -0
- package/src/sap/fe/core/messagebundle_iw.properties +4 -0
- package/src/sap/fe/core/messagebundle_ja.properties +4 -0
- package/src/sap/fe/core/messagebundle_kk.properties +4 -0
- package/src/sap/fe/core/messagebundle_ko.properties +4 -0
- package/src/sap/fe/core/messagebundle_lt.properties +4 -0
- package/src/sap/fe/core/messagebundle_lv.properties +4 -0
- package/src/sap/fe/core/messagebundle_mk.properties +4 -0
- package/src/sap/fe/core/messagebundle_ms.properties +4 -0
- package/src/sap/fe/core/messagebundle_nl.properties +4 -0
- package/src/sap/fe/core/messagebundle_no.properties +4 -0
- package/src/sap/fe/core/messagebundle_pl.properties +4 -0
- package/src/sap/fe/core/messagebundle_pt.properties +4 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +4 -0
- package/src/sap/fe/core/messagebundle_ro.properties +4 -0
- package/src/sap/fe/core/messagebundle_ru.properties +4 -0
- package/src/sap/fe/core/messagebundle_sh.properties +4 -0
- package/src/sap/fe/core/messagebundle_sk.properties +4 -0
- package/src/sap/fe/core/messagebundle_sl.properties +4 -0
- package/src/sap/fe/core/messagebundle_sr.properties +4 -0
- package/src/sap/fe/core/messagebundle_sv.properties +4 -0
- package/src/sap/fe/core/messagebundle_th.properties +4 -0
- package/src/sap/fe/core/messagebundle_tr.properties +5 -1
- package/src/sap/fe/core/messagebundle_uk.properties +4 -0
- package/src/sap/fe/core/messagebundle_vi.properties +4 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +4 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +4 -0
- package/src/sap/fe/core/operationsHelper.js +23 -27
- package/src/sap/fe/core/operationsHelper.ts +6 -7
- package/src/sap/fe/core/rootView/Fcl.controller.js +53 -40
- package/src/sap/fe/core/rootView/Fcl.controller.ts +42 -7
- package/src/sap/fe/core/rootView/NavContainer.controller.js +7 -10
- package/src/sap/fe/core/rootView/RootViewBaseController.js +22 -21
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +10 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +4 -3
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -0
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +12 -10
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +6 -2
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +8 -13
- package/src/sap/fe/core/services/ContextSharingServiceFactory.js +5 -7
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +31 -8
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +31 -5
- package/src/sap/fe/core/services/InlineEditServiceFactory.js +190 -0
- package/src/sap/fe/core/services/InlineEditServiceFactory.ts +226 -0
- package/src/sap/fe/core/services/NavigationServiceFactory.js +10 -15
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.js +76 -56
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +47 -14
- package/src/sap/fe/core/services/ShellServicesFactory.js +32 -34
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +75 -60
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +58 -12
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +8 -9
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +13 -18
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -0
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +7 -9
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +12 -16
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +4 -7
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +5 -6
- package/src/sap/fe/core/support/CommonHelper.js +2 -3
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/templating/ActionHelper.js +3 -4
- package/src/sap/fe/core/templating/CommonFormatters.js +6 -8
- package/src/sap/fe/core/templating/CommonFormatters.ts +2 -2
- package/src/sap/fe/core/templating/CriticalityFormatters.js +53 -5
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +129 -7
- package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -11
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js +33 -56
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
- package/src/sap/fe/core/templating/EntitySetHelper.js +11 -19
- package/src/sap/fe/core/templating/EntityTypeHelper.js +4 -5
- package/src/sap/fe/core/templating/FieldControlHelper.js +13 -20
- package/src/sap/fe/core/templating/FilterTemplating.js +6 -9
- package/src/sap/fe/core/templating/PropertyHelper.js +33 -63
- package/src/sap/fe/core/templating/PropertyHelper.ts +0 -1
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +13 -21
- package/src/sap/fe/core/templating/UIFormatters.js +57 -78
- package/src/sap/fe/core/templating/UIFormatters.ts +2 -1
- package/src/sap/fe/core/type/Date.js +2 -2
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -3
- package/src/sap/fe/core/type/EDM.js +3 -5
- package/src/sap/fe/core/type/Email.js +17 -6
- package/src/sap/fe/core/type/Email.ts +23 -4
- package/src/sap/fe/core/type/FiscalDate.js +8 -9
- package/src/sap/fe/core/type/InputMask.js +3 -4
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +0 -299
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +0 -87
- package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +0 -43
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +0 -251
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +0 -471
|
@@ -10,8 +10,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/m/AvatarShape"], function (Bin
|
|
|
10
10
|
var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
|
|
11
11
|
var compileExpression = BindingToolkit.compileExpression;
|
|
12
12
|
const isNaturalPersonExpression = converterContext => {
|
|
13
|
-
|
|
14
|
-
return getExpressionFromAnnotation((_converterContext$get = converterContext.getEntityType().annotations.Common) === null || _converterContext$get === void 0 ? void 0 : _converterContext$get.IsNaturalPerson);
|
|
13
|
+
return getExpressionFromAnnotation(converterContext.getEntityType().annotations.Common?.IsNaturalPerson);
|
|
15
14
|
};
|
|
16
15
|
const compileAvatarShape = expression => {
|
|
17
16
|
return compileExpression(ifElse(expression, AvatarShape.Circle, AvatarShape.Square));
|
|
@@ -25,8 +24,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/m/AvatarShape"], function (Bin
|
|
|
25
24
|
return compileExpression(ifElse(expression, "sap-icon://person-placeholder", "sap-icon://product"));
|
|
26
25
|
};
|
|
27
26
|
const getFallBackIcon = converterContext => {
|
|
28
|
-
|
|
29
|
-
const headerInfo = (_converterContext$get2 = converterContext.getEntityType().annotations) === null || _converterContext$get2 === void 0 ? void 0 : (_converterContext$get3 = _converterContext$get2.UI) === null || _converterContext$get3 === void 0 ? void 0 : _converterContext$get3.HeaderInfo;
|
|
27
|
+
const headerInfo = converterContext.getEntityType().annotations?.UI?.HeaderInfo;
|
|
30
28
|
if (!headerInfo || headerInfo && !headerInfo.ImageUrl && !headerInfo.TypeImageUrl) {
|
|
31
29
|
return undefined;
|
|
32
30
|
}
|
|
@@ -36,23 +34,21 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/m/AvatarShape"], function (Bin
|
|
|
36
34
|
return compileFallBackIcon(isNaturalPersonExpression(converterContext));
|
|
37
35
|
};
|
|
38
36
|
const getSource = converterContext => {
|
|
39
|
-
|
|
40
|
-
const headerInfo = (_converterContext$get4 = converterContext.getEntityType().annotations) === null || _converterContext$get4 === void 0 ? void 0 : (_converterContext$get5 = _converterContext$get4.UI) === null || _converterContext$get5 === void 0 ? void 0 : _converterContext$get5.HeaderInfo;
|
|
37
|
+
const headerInfo = converterContext.getEntityType().annotations?.UI?.HeaderInfo;
|
|
41
38
|
if (!headerInfo || !(headerInfo.ImageUrl || headerInfo.TypeImageUrl)) {
|
|
42
39
|
return undefined;
|
|
43
40
|
}
|
|
44
41
|
return compileExpression(getExpressionFromAnnotation(headerInfo.ImageUrl || headerInfo.TypeImageUrl));
|
|
45
42
|
};
|
|
46
43
|
const getAvatar = converterContext => {
|
|
47
|
-
|
|
48
|
-
const headerInfo = (_converterContext$get6 = converterContext.getEntityType().annotations) === null || _converterContext$get6 === void 0 ? void 0 : (_converterContext$get7 = _converterContext$get6.UI) === null || _converterContext$get7 === void 0 ? void 0 : _converterContext$get7.HeaderInfo;
|
|
44
|
+
const headerInfo = converterContext.getEntityType().annotations?.UI?.HeaderInfo;
|
|
49
45
|
const oSource = headerInfo && (headerInfo.ImageUrl || headerInfo.TypeImageUrl || headerInfo.Initials);
|
|
50
46
|
if (!oSource) {
|
|
51
47
|
return undefined;
|
|
52
48
|
}
|
|
53
49
|
return {
|
|
54
50
|
src: getSource(converterContext),
|
|
55
|
-
initials: compileExpression(getExpressionFromAnnotation(headerInfo
|
|
51
|
+
initials: compileExpression(getExpressionFromAnnotation(headerInfo?.Initials, [], "")),
|
|
56
52
|
fallbackIcon: getFallBackIcon(converterContext),
|
|
57
53
|
displayShape: compileAvatarShape(isNaturalPersonExpression(converterContext))
|
|
58
54
|
};
|
|
@@ -60,4 +56,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/m/AvatarShape"], function (Bin
|
|
|
60
56
|
_exports.getAvatar = getAvatar;
|
|
61
57
|
return _exports;
|
|
62
58
|
}, false);
|
|
63
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc05hdHVyYWxQZXJzb25FeHByZXNzaW9uIiwiY29udmVydGVyQ29udGV4dCIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImdldEVudGl0eVR5cGUiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIklzTmF0dXJhbFBlcnNvbiIsImNvbXBpbGVBdmF0YXJTaGFwZSIsImV4cHJlc3Npb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsIkF2YXRhclNoYXBlIiwiQ2lyY2xlIiwiU3F1YXJlIiwiY29tcGlsZUZhbGxCYWNrSWNvbiIsImdldEZhbGxCYWNrSWNvbiIsImhlYWRlckluZm8iLCJVSSIsIkhlYWRlckluZm8iLCJJbWFnZVVybCIsIlR5cGVJbWFnZVVybCIsInVuZGVmaW5lZCIsImdldFNvdXJjZSIsImdldEF2YXRhciIsIm9Tb3VyY2UiLCJJbml0aWFscyIsInNyYyIsImluaXRpYWxzIiwiZmFsbGJhY2tJY29uIiwiZGlzcGxheVNoYXBlIiwiX2V4cG9ydHMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkF2YXRhci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBFeHByZXNzaW9uT3JQcmltaXRpdmUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sIGlmRWxzZSB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IEF2YXRhclNoYXBlIGZyb20gXCJzYXAvbS9BdmF0YXJTaGFwZVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuXG5leHBvcnQgdHlwZSBBdmF0YXIgPSB7XG5cdHNyYz86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRpbml0aWFsczogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGZhbGxiYWNrSWNvbj86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRkaXNwbGF5U2hhcGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xufTtcblxuY29uc3QgaXNOYXR1cmFsUGVyc29uRXhwcmVzc2lvbiA9IChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4gPT4ge1xuXHRyZXR1cm4gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zLkNvbW1vbj8uSXNOYXR1cmFsUGVyc29uKTtcbn07XG5cbmNvbnN0IGNvbXBpbGVBdmF0YXJTaGFwZSA9IChleHByZXNzaW9uOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9PiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoZXhwcmVzc2lvbiwgQXZhdGFyU2hhcGUuQ2lyY2xlLCBBdmF0YXJTaGFwZS5TcXVhcmUpKTtcbn07XG5cbi8vIFRoZSBzaGFwZSBvZiB0aGUgQXZhdGFyIGRlcGVuZHMgdXBvbiB3aGV0aGVyIHRoZSBlbnRpdHkgaW5zdGFuY2UgcmVwcmVzZW50cyBhIG5hdHVyYWwgcGVyc29uLlxuLy8gVGhpcyBjYW4gZGVwZW5kIHVwb24gYSBwcm9wZXJ0eSBpbiB0aGUgZW50aXR5LiBVbmxpa2UgdGhlIHNoYXBlIG9mIGFuIGF2YXRhciBkZWZpbmVkIGluIGEgZmllbGQsIGl0XG4vLyBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gbWFrZSB0aGUgaW1hZ2UgYXQgdGhlIG9iamVjdCBwYWdlIGhlYWRlciBkZXBlbmRlbnQgdXBvbiB0aGUgcHJvcGVydHkgY29udGFpbmdcbi8vIHRoZSBpbWFnZSBvciBpbWFnZVVSTC5cbmNvbnN0IGNvbXBpbGVGYWxsQmFja0ljb24gPSAoZXhwcmVzc2lvbjogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPT4ge1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGV4cHJlc3Npb24sIFwic2FwLWljb246Ly9wZXJzb24tcGxhY2Vob2xkZXJcIiwgXCJzYXAtaWNvbjovL3Byb2R1Y3RcIikpO1xufTtcblxuY29uc3QgZ2V0RmFsbEJhY2tJY29uID0gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgdW5kZWZpbmVkID0+IHtcblx0Y29uc3QgaGVhZGVySW5mbyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbztcblx0aWYgKCFoZWFkZXJJbmZvIHx8IChoZWFkZXJJbmZvICYmICFoZWFkZXJJbmZvLkltYWdlVXJsICYmICFoZWFkZXJJbmZvLlR5cGVJbWFnZVVybCkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmIChoZWFkZXJJbmZvLkltYWdlVXJsICYmIGhlYWRlckluZm8uVHlwZUltYWdlVXJsKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihoZWFkZXJJbmZvLlR5cGVJbWFnZVVybCkpO1xuXHR9XG5cdHJldHVybiBjb21waWxlRmFsbEJhY2tJY29uKGlzTmF0dXJhbFBlcnNvbkV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dCkpO1xufTtcblxuY29uc3QgZ2V0U291cmNlID0gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgdW5kZWZpbmVkID0+IHtcblx0Y29uc3QgaGVhZGVySW5mbyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbztcblx0aWYgKCFoZWFkZXJJbmZvIHx8ICEoaGVhZGVySW5mby5JbWFnZVVybCB8fCBoZWFkZXJJbmZvLlR5cGVJbWFnZVVybCkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oaGVhZGVySW5mby5JbWFnZVVybCB8fCBoZWFkZXJJbmZvLlR5cGVJbWFnZVVybCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEF2YXRhciA9IChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBBdmF0YXIgfCB1bmRlZmluZWQgPT4ge1xuXHRjb25zdCBoZWFkZXJJbmZvID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvO1xuXHRjb25zdCBvU291cmNlID0gaGVhZGVySW5mbyAmJiAoaGVhZGVySW5mby5JbWFnZVVybCB8fCBoZWFkZXJJbmZvLlR5cGVJbWFnZVVybCB8fCBoZWFkZXJJbmZvLkluaXRpYWxzKTtcblx0aWYgKCFvU291cmNlKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHNyYzogZ2V0U291cmNlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGluaXRpYWxzOiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oaGVhZGVySW5mbz8uSW5pdGlhbHMsIFtdLCBcIlwiKSksXG5cdFx0ZmFsbGJhY2tJY29uOiBnZXRGYWxsQmFja0ljb24oY29udmVydGVyQ29udGV4dCksXG5cdFx0ZGlzcGxheVNoYXBlOiBjb21waWxlQXZhdGFyU2hhcGUoaXNOYXR1cmFsUGVyc29uRXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0KSlcblx0fTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0VBYUEsTUFBTUEseUJBQXlCLEdBQUlDLGdCQUF5RCxJQUFxQztJQUNoSSxPQUFPQywyQkFBMkIsQ0FBQ0QsZ0JBQWdCLENBQUNFLGFBQWEsQ0FBQyxDQUFDLENBQUNDLFdBQVcsQ0FBQ0MsTUFBTSxFQUFFQyxlQUFlLENBQUM7RUFDekcsQ0FBQztFQUVELE1BQU1DLGtCQUFrQixHQUFJQyxVQUEwQyxJQUF1QztJQUM1RyxPQUFPQyxpQkFBaUIsQ0FBQ0MsTUFBTSxDQUFDRixVQUFVLEVBQUVHLFdBQVcsQ0FBQ0MsTUFBTSxFQUFFRCxXQUFXLENBQUNFLE1BQU0sQ0FBQyxDQUFDO0VBQ3JGLENBQUM7O0VBRUQ7RUFDQTtFQUNBO0VBQ0E7RUFDQSxNQUFNQyxtQkFBbUIsR0FBSU4sVUFBMEMsSUFBdUM7SUFDN0csT0FBT0MsaUJBQWlCLENBQUNDLE1BQU0sQ0FBQ0YsVUFBVSxFQUFFLCtCQUErQixFQUFFLG9CQUFvQixDQUFDLENBQUM7RUFDcEcsQ0FBQztFQUVELE1BQU1PLGVBQWUsR0FBSWQsZ0JBQXlELElBQW1EO0lBQ3BJLE1BQU1lLFVBQVUsR0FBR2YsZ0JBQWdCLENBQUNFLGFBQWEsQ0FBQyxDQUFDLENBQUNDLFdBQVcsRUFBRWEsRUFBRSxFQUFFQyxVQUFVO0lBQy9FLElBQUksQ0FBQ0YsVUFBVSxJQUFLQSxVQUFVLElBQUksQ0FBQ0EsVUFBVSxDQUFDRyxRQUFRLElBQUksQ0FBQ0gsVUFBVSxDQUFDSSxZQUFhLEVBQUU7TUFDcEYsT0FBT0MsU0FBUztJQUNqQjtJQUNBLElBQUlMLFVBQVUsQ0FBQ0csUUFBUSxJQUFJSCxVQUFVLENBQUNJLFlBQVksRUFBRTtNQUNuRCxPQUFPWCxpQkFBaUIsQ0FBQ1AsMkJBQTJCLENBQUNjLFVBQVUsQ0FBQ0ksWUFBWSxDQUFDLENBQUM7SUFDL0U7SUFDQSxPQUFPTixtQkFBbUIsQ0FBQ2QseUJBQXlCLENBQUNDLGdCQUFnQixDQUFDLENBQUM7RUFDeEUsQ0FBQztFQUVELE1BQU1xQixTQUFTLEdBQUlyQixnQkFBeUQsSUFBbUQ7SUFDOUgsTUFBTWUsVUFBVSxHQUFHZixnQkFBZ0IsQ0FBQ0UsYUFBYSxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxFQUFFYSxFQUFFLEVBQUVDLFVBQVU7SUFDL0UsSUFBSSxDQUFDRixVQUFVLElBQUksRUFBRUEsVUFBVSxDQUFDRyxRQUFRLElBQUlILFVBQVUsQ0FBQ0ksWUFBWSxDQUFDLEVBQUU7TUFDckUsT0FBT0MsU0FBUztJQUNqQjtJQUNBLE9BQU9aLGlCQUFpQixDQUFDUCwyQkFBMkIsQ0FBQ2MsVUFBVSxDQUFDRyxRQUFRLElBQUlILFVBQVUsQ0FBQ0ksWUFBWSxDQUFDLENBQUM7RUFDdEcsQ0FBQztFQUVNLE1BQU1HLFNBQVMsR0FBSXRCLGdCQUF5RCxJQUF5QjtJQUMzRyxNQUFNZSxVQUFVLEdBQUdmLGdCQUFnQixDQUFDRSxhQUFhLENBQUMsQ0FBQyxDQUFDQyxXQUFXLEVBQUVhLEVBQUUsRUFBRUMsVUFBVTtJQUMvRSxNQUFNTSxPQUFPLEdBQUdSLFVBQVUsS0FBS0EsVUFBVSxDQUFDRyxRQUFRLElBQUlILFVBQVUsQ0FBQ0ksWUFBWSxJQUFJSixVQUFVLENBQUNTLFFBQVEsQ0FBQztJQUNyRyxJQUFJLENBQUNELE9BQU8sRUFBRTtNQUNiLE9BQU9ILFNBQVM7SUFDakI7SUFDQSxPQUFPO01BQ05LLEdBQUcsRUFBRUosU0FBUyxDQUFDckIsZ0JBQWdCLENBQUM7TUFDaEMwQixRQUFRLEVBQUVsQixpQkFBaUIsQ0FBQ1AsMkJBQTJCLENBQUNjLFVBQVUsRUFBRVMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztNQUN0RkcsWUFBWSxFQUFFYixlQUFlLENBQUNkLGdCQUFnQixDQUFDO01BQy9DNEIsWUFBWSxFQUFFdEIsa0JBQWtCLENBQUNQLHlCQUF5QixDQUFDQyxnQkFBZ0IsQ0FBQztJQUM3RSxDQUFDO0VBQ0YsQ0FBQztFQUFDNkIsUUFBQSxDQUFBUCxTQUFBLEdBQUFBLFNBQUE7RUFBQSxPQUFBTyxRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -26,34 +26,33 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
|
|
|
26
26
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
27
27
|
// Definitions: Header Facet Types, Generic OP Header Facet, Manifest Properties for Custom Header Facet
|
|
28
28
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
29
|
-
let HeaderFacetType
|
|
30
|
-
(function (HeaderFacetType) {
|
|
29
|
+
let HeaderFacetType = /*#__PURE__*/function (HeaderFacetType) {
|
|
31
30
|
HeaderFacetType["Annotation"] = "Annotation";
|
|
32
31
|
HeaderFacetType["XMLFragment"] = "XMLFragment";
|
|
33
|
-
|
|
32
|
+
return HeaderFacetType;
|
|
33
|
+
}({});
|
|
34
34
|
_exports.HeaderFacetType = HeaderFacetType;
|
|
35
|
-
let FacetType
|
|
36
|
-
(function (FacetType) {
|
|
35
|
+
let FacetType = /*#__PURE__*/function (FacetType) {
|
|
37
36
|
FacetType["Reference"] = "Reference";
|
|
38
37
|
FacetType["Collection"] = "Collection";
|
|
39
|
-
|
|
38
|
+
return FacetType;
|
|
39
|
+
}({});
|
|
40
40
|
_exports.FacetType = FacetType;
|
|
41
|
-
let FlexDesignTimeType
|
|
42
|
-
(function (FlexDesignTimeType) {
|
|
41
|
+
let FlexDesignTimeType = /*#__PURE__*/function (FlexDesignTimeType) {
|
|
43
42
|
FlexDesignTimeType["Default"] = "Default";
|
|
44
43
|
FlexDesignTimeType["NotAdaptable"] = "not-adaptable";
|
|
45
44
|
FlexDesignTimeType["NotAdaptableTree"] = "not-adaptable-tree";
|
|
46
45
|
FlexDesignTimeType["NotAdaptableVisibility"] = "not-adaptable-visibility";
|
|
47
|
-
|
|
46
|
+
return FlexDesignTimeType;
|
|
47
|
+
}({});
|
|
48
48
|
_exports.FlexDesignTimeType = FlexDesignTimeType;
|
|
49
|
-
var HeaderDataPointType
|
|
50
|
-
(function (HeaderDataPointType) {
|
|
49
|
+
var HeaderDataPointType = /*#__PURE__*/function (HeaderDataPointType) {
|
|
51
50
|
HeaderDataPointType["ProgressIndicator"] = "ProgressIndicator";
|
|
52
51
|
HeaderDataPointType["RatingIndicator"] = "RatingIndicator";
|
|
53
52
|
HeaderDataPointType["Content"] = "Content";
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
return HeaderDataPointType;
|
|
54
|
+
}(HeaderDataPointType || {});
|
|
55
|
+
var TargetAnnotationType = /*#__PURE__*/function (TargetAnnotationType) {
|
|
57
56
|
TargetAnnotationType["None"] = "None";
|
|
58
57
|
TargetAnnotationType["DataPoint"] = "DataPoint";
|
|
59
58
|
TargetAnnotationType["Chart"] = "Chart";
|
|
@@ -62,7 +61,8 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
|
|
|
62
61
|
TargetAnnotationType["Address"] = "Address";
|
|
63
62
|
TargetAnnotationType["FieldGroup"] = "FieldGroup";
|
|
64
63
|
TargetAnnotationType["PresentationVariant"] = "PresentationVariant";
|
|
65
|
-
|
|
64
|
+
return TargetAnnotationType;
|
|
65
|
+
}(TargetAnnotationType || {});
|
|
66
66
|
// endregion definitions
|
|
67
67
|
|
|
68
68
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
@@ -75,9 +75,8 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
|
|
|
75
75
|
* @returns Header facets from annotations
|
|
76
76
|
*/
|
|
77
77
|
function getHeaderFacetsFromAnnotations(converterContext) {
|
|
78
|
-
var _converterContext$get, _converterContext$get2, _converterContext$get3;
|
|
79
78
|
const headerFacets = [];
|
|
80
|
-
|
|
79
|
+
converterContext.getEntityType().annotations?.UI?.HeaderFacets?.forEach(facet => {
|
|
81
80
|
const headerFacet = createHeaderFacet(facet, converterContext);
|
|
82
81
|
if (headerFacet) {
|
|
83
82
|
headerFacets.push(headerFacet);
|
|
@@ -110,14 +109,13 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
|
|
|
110
109
|
*/
|
|
111
110
|
_exports.getHeaderFacetsFromManifest = getHeaderFacetsFromManifest;
|
|
112
111
|
function getStashedSettingsForHeaderFacet(facetDefinition, collectionFacetDefinition, converterContext) {
|
|
113
|
-
var _headerFacetsControlC;
|
|
114
112
|
// When a HeaderFacet is nested inside a CollectionFacet, stashing is not supported
|
|
115
113
|
if (facetDefinition.$Type === "com.sap.vocabularies.UI.v1.ReferenceFacet" && collectionFacetDefinition.$Type === "com.sap.vocabularies.UI.v1.CollectionFacet") {
|
|
116
114
|
return false;
|
|
117
115
|
}
|
|
118
116
|
const headerFacetID = createIdForAnnotation(facetDefinition) ?? "";
|
|
119
117
|
const headerFacetsControlConfig = converterContext.getManifestWrapper().getHeaderFacets();
|
|
120
|
-
const stashedSetting =
|
|
118
|
+
const stashedSetting = headerFacetsControlConfig[headerFacetID]?.stashed;
|
|
121
119
|
return stashedSetting === true;
|
|
122
120
|
}
|
|
123
121
|
|
|
@@ -139,8 +137,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
|
|
|
139
137
|
} else {
|
|
140
138
|
const headerFacetsControlConfig = converterContext.getManifestWrapper().getHeaderFacets();
|
|
141
139
|
if (headerFacetID) {
|
|
142
|
-
|
|
143
|
-
const designTime = (_headerFacetsControlC2 = headerFacetsControlConfig[headerFacetID]) === null || _headerFacetsControlC2 === void 0 ? void 0 : (_headerFacetsControlC3 = _headerFacetsControlC2.flexSettings) === null || _headerFacetsControlC3 === void 0 ? void 0 : _headerFacetsControlC3.designtime;
|
|
140
|
+
const designTime = headerFacetsControlConfig[headerFacetID]?.flexSettings?.designtime;
|
|
144
141
|
switch (designTime) {
|
|
145
142
|
case FlexDesignTimeType.NotAdaptable:
|
|
146
143
|
case FlexDesignTimeType.NotAdaptableTree:
|
|
@@ -160,13 +157,10 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
|
|
|
160
157
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
161
158
|
_exports.getDesignTimeMetadataSettingsForHeaderFacet = getDesignTimeMetadataSettingsForHeaderFacet;
|
|
162
159
|
function createReferenceHeaderFacet(facetDefinition, collectionFacetDefinition, converterContext) {
|
|
163
|
-
|
|
164
|
-
if (facetDefinition.$Type === "com.sap.vocabularies.UI.v1.ReferenceFacet" && ((_facetDefinition$anno = facetDefinition.annotations) === null || _facetDefinition$anno === void 0 ? void 0 : (_facetDefinition$anno2 = _facetDefinition$anno.UI) === null || _facetDefinition$anno2 === void 0 ? void 0 : (_facetDefinition$anno3 = _facetDefinition$anno2.Hidden) === null || _facetDefinition$anno3 === void 0 ? void 0 : _facetDefinition$anno3.valueOf()) !== true) {
|
|
165
|
-
var _facetDefinition$Targ, _facetDefinition$Targ2;
|
|
160
|
+
if (facetDefinition.$Type === "com.sap.vocabularies.UI.v1.ReferenceFacet" && facetDefinition.annotations?.UI?.Hidden?.valueOf() !== true) {
|
|
166
161
|
const headerFacetID = getHeaderFacetID(facetDefinition),
|
|
167
162
|
getHeaderFacetKey = (facetDefinitionToCheck, fallback) => {
|
|
168
|
-
|
|
169
|
-
return ((_facetDefinitionToChe = facetDefinitionToCheck.ID) === null || _facetDefinitionToChe === void 0 ? void 0 : _facetDefinitionToChe.toString()) || ((_facetDefinitionToChe2 = facetDefinitionToCheck.Label) === null || _facetDefinitionToChe2 === void 0 ? void 0 : _facetDefinitionToChe2.toString()) || fallback;
|
|
163
|
+
return facetDefinitionToCheck.ID?.toString() || facetDefinitionToCheck.Label?.toString() || fallback;
|
|
170
164
|
},
|
|
171
165
|
targetAnnotationValue = facetDefinition.Target.value,
|
|
172
166
|
targetAnnotationType = getTargetAnnotationType(facetDefinition);
|
|
@@ -183,7 +177,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
|
|
|
183
177
|
default:
|
|
184
178
|
break;
|
|
185
179
|
}
|
|
186
|
-
if (
|
|
180
|
+
if (facetDefinition.Target?.$target?.term === "com.sap.vocabularies.UI.v1.Chart" && isAnnotationFieldStaticallyHidden(facetDefinition)) {
|
|
187
181
|
return undefined;
|
|
188
182
|
} else {
|
|
189
183
|
return {
|
|
@@ -212,8 +206,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
|
|
|
212
206
|
const facets = [],
|
|
213
207
|
headerFacetID = getHeaderFacetID(collectionFacetDefinition),
|
|
214
208
|
getHeaderFacetKey = (facetDefinition, fallback) => {
|
|
215
|
-
|
|
216
|
-
return ((_facetDefinition$ID = facetDefinition.ID) === null || _facetDefinition$ID === void 0 ? void 0 : _facetDefinition$ID.toString()) || ((_facetDefinition$Labe = facetDefinition.Label) === null || _facetDefinition$Labe === void 0 ? void 0 : _facetDefinition$Labe.toString()) || fallback;
|
|
209
|
+
return facetDefinition.ID?.toString() || facetDefinition.Label?.toString() || fallback;
|
|
217
210
|
};
|
|
218
211
|
collectionFacetDefinition.Facets.forEach(facetDefinition => {
|
|
219
212
|
const facet = createReferenceHeaderFacet(facetDefinition, collectionFacetDefinition, converterContext);
|
|
@@ -256,7 +249,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
|
|
|
256
249
|
return annotationType;
|
|
257
250
|
}
|
|
258
251
|
function getFieldGroupFormData(facetDefinition, converterContext) {
|
|
259
|
-
var _facetDefinition$Labe2;
|
|
260
252
|
// split in this from annotation + getFieldGroupFromDefault
|
|
261
253
|
if (!facetDefinition) {
|
|
262
254
|
throw new Error("Cannot get FieldGroup form data without facet definition");
|
|
@@ -264,7 +256,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
|
|
|
264
256
|
const formElements = insertCustomElements(getFormElementsFromAnnotations(facetDefinition, converterContext), getFormElementsFromManifest(facetDefinition, converterContext));
|
|
265
257
|
return {
|
|
266
258
|
id: getHeaderFacetFormID(facetDefinition),
|
|
267
|
-
label:
|
|
259
|
+
label: facetDefinition.Label?.toString(),
|
|
268
260
|
formElements
|
|
269
261
|
};
|
|
270
262
|
}
|
|
@@ -280,34 +272,30 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
|
|
|
280
272
|
|
|
281
273
|
// ReferenceURLFacet and CollectionFacet do not have Target property.
|
|
282
274
|
if (facetDefinition.$Type !== "com.sap.vocabularies.UI.v1.ReferenceURLFacet" && facetDefinition.$Type !== "com.sap.vocabularies.UI.v1.CollectionFacet") {
|
|
283
|
-
var _facetDefinition$Targ3, _facetDefinition$Targ4;
|
|
284
275
|
const resolvedTarget = converterContext.getEntityTypeAnnotation(facetDefinition.Target.value);
|
|
285
276
|
converterContext = resolvedTarget.converterContext;
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
if (((_dataField$annotation = dataField.annotations) === null || _dataField$annotation === void 0 ? void 0 : (_dataField$annotation2 = _dataField$annotation.UI) === null || _dataField$annotation2 === void 0 ? void 0 : (_dataField$annotation3 = _dataField$annotation2.Hidden) === null || _dataField$annotation3 === void 0 ? void 0 : _dataField$annotation3.valueOf()) !== true) {
|
|
277
|
+
facetDefinition.Target?.$target?.Data.forEach(dataField => {
|
|
278
|
+
if (dataField.annotations?.UI?.Hidden?.valueOf() !== true) {
|
|
289
279
|
const semanticObjectAnnotationPath = getSemanticObjectPath(converterContext, dataField);
|
|
290
280
|
if ((dataField.$Type === "com.sap.vocabularies.UI.v1.DataField" || dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldWithUrl" || dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldWithNavigationPath" || dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldWithIntentBasedNavigation" || dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldWithAction") && !isReferencePropertyStaticallyHidden(dataField)) {
|
|
291
|
-
var _dataField$Value, _dataField$Value2, _dataField$Value2$$ta, _dataField$Value2$$ta2, _dataField$Value2$$ta3;
|
|
292
281
|
annotationBasedFormElements.push({
|
|
293
|
-
isValueMultilineText: isMultiLineText(
|
|
282
|
+
isValueMultilineText: isMultiLineText(dataField.Value?.$target),
|
|
294
283
|
type: FormElementType.Annotation,
|
|
295
284
|
key: KeyHelper.generateKeyFromDataField(dataField),
|
|
296
285
|
visible: compileExpression(isVisible(dataField)),
|
|
297
|
-
label:
|
|
286
|
+
label: dataField.Value?.$target?.annotations?.Common?.Label || dataField.Label,
|
|
298
287
|
idPrefix: getHeaderFacetFormID(facetDefinition, dataField),
|
|
299
288
|
annotationPath: `${converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName)}/`,
|
|
300
289
|
semanticObjectPath: semanticObjectAnnotationPath
|
|
301
290
|
});
|
|
302
291
|
} else if (dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAnnotation" && !isReferencePropertyStaticallyHidden(dataField)) {
|
|
303
|
-
var _dataField$Target, _dataField$Target$$ta, _dataField$Target$$ta2, _dataField$Target$$ta3, _dataField$Target$$ta4, _dataField$Label;
|
|
304
292
|
annotationBasedFormElements.push({
|
|
305
293
|
isValueMultilineText: false,
|
|
306
294
|
// was dataField.Target?.$target?.annotations?.UI?.MultiLineText?.valueOf() === true but that doesn't make sense as the target cannot have that annotation
|
|
307
295
|
type: FormElementType.Annotation,
|
|
308
296
|
key: KeyHelper.generateKeyFromDataField(dataField),
|
|
309
297
|
visible: compileExpression(isVisible(dataField)),
|
|
310
|
-
label:
|
|
298
|
+
label: dataField.Target?.$target?.annotations?.Common?.Label?.toString() || dataField.Label?.toString(),
|
|
311
299
|
idPrefix: getHeaderFacetFormID(facetDefinition, dataField),
|
|
312
300
|
annotationPath: `${converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName)}/`,
|
|
313
301
|
semanticObjectPath: semanticObjectAnnotationPath
|
|
@@ -322,20 +310,17 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
|
|
|
322
310
|
let type = HeaderDataPointType.Content;
|
|
323
311
|
let semanticObjectPath;
|
|
324
312
|
if (facetDefinition.$Type === "com.sap.vocabularies.UI.v1.ReferenceFacet" && !isAnnotationFieldStaticallyHidden(facetDefinition)) {
|
|
325
|
-
|
|
326
|
-
if (((_facetDefinition$Targ5 = facetDefinition.Target) === null || _facetDefinition$Targ5 === void 0 ? void 0 : (_facetDefinition$Targ6 = _facetDefinition$Targ5.$target) === null || _facetDefinition$Targ6 === void 0 ? void 0 : _facetDefinition$Targ6.Visualization) === "UI.VisualizationType/Progress") {
|
|
313
|
+
if (facetDefinition.Target?.$target?.Visualization === "UI.VisualizationType/Progress") {
|
|
327
314
|
type = HeaderDataPointType.ProgressIndicator;
|
|
328
|
-
} else if (
|
|
315
|
+
} else if (facetDefinition.Target?.$target?.Visualization === "UI.VisualizationType/Rating") {
|
|
329
316
|
type = HeaderDataPointType.RatingIndicator;
|
|
330
317
|
}
|
|
331
|
-
const dataPoint =
|
|
318
|
+
const dataPoint = facetDefinition.Target?.$target;
|
|
332
319
|
if (typeof dataPoint === "object") {
|
|
333
|
-
|
|
334
|
-
if (dataPoint !== null && dataPoint !== void 0 && (_dataPoint$Value = dataPoint.Value) !== null && _dataPoint$Value !== void 0 && _dataPoint$Value.$target) {
|
|
335
|
-
var _property$annotations, _property$annotations2;
|
|
320
|
+
if (dataPoint?.Value?.$target) {
|
|
336
321
|
const property = dataPoint.Value.$target;
|
|
337
|
-
if (
|
|
338
|
-
semanticObjectPath = converterContext.getEntitySetBasedAnnotationPath(property
|
|
322
|
+
if (property?.annotations?.Common?.SemanticObject !== undefined) {
|
|
323
|
+
semanticObjectPath = converterContext.getEntitySetBasedAnnotationPath(property?.fullyQualifiedName);
|
|
339
324
|
}
|
|
340
325
|
}
|
|
341
326
|
}
|
|
@@ -418,4 +403,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
|
|
|
418
403
|
}
|
|
419
404
|
return _exports;
|
|
420
405
|
}, false);
|
|
421
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJIZWFkZXJGYWNldFR5cGUiLCJfZXhwb3J0cyIsIkZhY2V0VHlwZSIsIkZsZXhEZXNpZ25UaW1lVHlwZSIsIkhlYWRlckRhdGFQb2ludFR5cGUiLCJUYXJnZXRBbm5vdGF0aW9uVHlwZSIsImdldEhlYWRlckZhY2V0c0Zyb21Bbm5vdGF0aW9ucyIsImNvbnZlcnRlckNvbnRleHQiLCJfY29udmVydGVyQ29udGV4dCRnZXQiLCJfY29udmVydGVyQ29udGV4dCRnZXQyIiwiX2NvbnZlcnRlckNvbnRleHQkZ2V0MyIsImhlYWRlckZhY2V0cyIsImdldEVudGl0eVR5cGUiLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGVhZGVyRmFjZXRzIiwiZm9yRWFjaCIsImZhY2V0IiwiaGVhZGVyRmFjZXQiLCJjcmVhdGVIZWFkZXJGYWNldCIsInB1c2giLCJnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QiLCJtYW5pZmVzdEN1c3RvbUhlYWRlckZhY2V0cyIsImN1c3RvbUhlYWRlckZhY2V0cyIsIk9iamVjdCIsImtleXMiLCJtYW5pZmVzdEhlYWRlckZhY2V0S2V5IiwiY3VzdG9tSGVhZGVyRmFjZXQiLCJjcmVhdGVDdXN0b21IZWFkZXJGYWNldCIsImdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0IiwiZmFjZXREZWZpbml0aW9uIiwiY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbiIsIl9oZWFkZXJGYWNldHNDb250cm9sQyIsIiRUeXBlIiwiaGVhZGVyRmFjZXRJRCIsImNyZWF0ZUlkRm9yQW5ub3RhdGlvbiIsImhlYWRlckZhY2V0c0NvbnRyb2xDb25maWciLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRIZWFkZXJGYWNldHMiLCJzdGFzaGVkU2V0dGluZyIsInN0YXNoZWQiLCJnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0IiwiZGVzaWduVGltZU1ldGFkYXRhIiwiRGVmYXVsdCIsIk5vdEFkYXB0YWJsZVRyZWUiLCJfaGVhZGVyRmFjZXRzQ29udHJvbEMyIiwiX2hlYWRlckZhY2V0c0NvbnRyb2xDMyIsImRlc2lnblRpbWUiLCJmbGV4U2V0dGluZ3MiLCJkZXNpZ250aW1lIiwiTm90QWRhcHRhYmxlIiwiTm90QWRhcHRhYmxlVmlzaWJpbGl0eSIsImNyZWF0ZVJlZmVyZW5jZUhlYWRlckZhY2V0IiwiX2ZhY2V0RGVmaW5pdGlvbiRhbm5vIiwiX2ZhY2V0RGVmaW5pdGlvbiRhbm5vMiIsIl9mYWNldERlZmluaXRpb24kYW5ubzMiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwiX2ZhY2V0RGVmaW5pdGlvbiRUYXJnIiwiX2ZhY2V0RGVmaW5pdGlvbiRUYXJnMiIsImdldEhlYWRlckZhY2V0SUQiLCJnZXRIZWFkZXJGYWNldEtleSIsImZhY2V0RGVmaW5pdGlvblRvQ2hlY2siLCJmYWxsYmFjayIsIl9mYWNldERlZmluaXRpb25Ub0NoZSIsIl9mYWNldERlZmluaXRpb25Ub0NoZTIiLCJJRCIsInRvU3RyaW5nIiwiTGFiZWwiLCJ0YXJnZXRBbm5vdGF0aW9uVmFsdWUiLCJUYXJnZXQiLCJ2YWx1ZSIsInRhcmdldEFubm90YXRpb25UeXBlIiwiZ2V0VGFyZ2V0QW5ub3RhdGlvblR5cGUiLCJoZWFkZXJGb3JtRGF0YSIsImhlYWRlckRhdGFQb2ludERhdGEiLCJGaWVsZEdyb3VwIiwiZ2V0RmllbGRHcm91cEZvcm1EYXRhIiwiRGF0YVBvaW50IiwiZ2V0RGF0YVBvaW50RGF0YSIsIiR0YXJnZXQiLCJ0ZXJtIiwiaXNBbm5vdGF0aW9uRmllbGRTdGF0aWNhbGx5SGlkZGVuIiwidW5kZWZpbmVkIiwidHlwZSIsIkFubm90YXRpb24iLCJmYWNldFR5cGUiLCJSZWZlcmVuY2UiLCJpZCIsImNvbnRhaW5lcklkIiwiZ2V0SGVhZGVyRmFjZXRDb250YWluZXJJRCIsImtleSIsInZpc2libGUiLCJjb21waWxlRXhwcmVzc2lvbiIsImlzVmlzaWJsZSIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImNyZWF0ZUNvbGxlY3Rpb25IZWFkZXJGYWNldCIsImZhY2V0cyIsIl9mYWNldERlZmluaXRpb24kSUQiLCJfZmFjZXREZWZpbml0aW9uJExhYmUiLCJGYWNldHMiLCJDb2xsZWN0aW9uIiwiYW5ub3RhdGlvblR5cGUiLCJOb25lIiwiYW5ub3RhdGlvblR5cGVNYXAiLCJDaGFydCIsIklkZW50aWZpY2F0aW9uIiwiQ29udGFjdCIsIkFkZHJlc3MiLCJQcmVzZW50YXRpb25WYXJpYW50IiwiX2ZhY2V0RGVmaW5pdGlvbiRMYWJlMiIsIkVycm9yIiwiZm9ybUVsZW1lbnRzIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRGb3JtRWxlbWVudHNGcm9tQW5ub3RhdGlvbnMiLCJnZXRGb3JtRWxlbWVudHNGcm9tTWFuaWZlc3QiLCJnZXRIZWFkZXJGYWNldEZvcm1JRCIsImxhYmVsIiwiYW5ub3RhdGlvbkJhc2VkRm9ybUVsZW1lbnRzIiwiX2ZhY2V0RGVmaW5pdGlvbiRUYXJnMyIsIl9mYWNldERlZmluaXRpb24kVGFyZzQiLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiRGF0YSIsImRhdGFGaWVsZCIsIl9kYXRhRmllbGQkYW5ub3RhdGlvbiIsIl9kYXRhRmllbGQkYW5ub3RhdGlvbjIiLCJfZGF0YUZpZWxkJGFubm90YXRpb24zIiwic2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCIsImdldFNlbWFudGljT2JqZWN0UGF0aCIsImlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuIiwiX2RhdGFGaWVsZCRWYWx1ZSIsIl9kYXRhRmllbGQkVmFsdWUyIiwiX2RhdGFGaWVsZCRWYWx1ZTIkJHRhIiwiX2RhdGFGaWVsZCRWYWx1ZTIkJHRhMiIsIl9kYXRhRmllbGQkVmFsdWUyJCR0YTMiLCJpc1ZhbHVlTXVsdGlsaW5lVGV4dCIsImlzTXVsdGlMaW5lVGV4dCIsIlZhbHVlIiwiRm9ybUVsZW1lbnRUeXBlIiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiQ29tbW9uIiwiaWRQcmVmaXgiLCJzZW1hbnRpY09iamVjdFBhdGgiLCJfZGF0YUZpZWxkJFRhcmdldCIsIl9kYXRhRmllbGQkVGFyZ2V0JCR0YSIsIl9kYXRhRmllbGQkVGFyZ2V0JCR0YTIiLCJfZGF0YUZpZWxkJFRhcmdldCQkdGEzIiwiX2RhdGFGaWVsZCRUYXJnZXQkJHRhNCIsIl9kYXRhRmllbGQkTGFiZWwiLCJDb250ZW50IiwiX2ZhY2V0RGVmaW5pdGlvbiRUYXJnNSIsIl9mYWNldERlZmluaXRpb24kVGFyZzYiLCJfZmFjZXREZWZpbml0aW9uJFRhcmc3IiwiX2ZhY2V0RGVmaW5pdGlvbiRUYXJnOCIsIl9mYWNldERlZmluaXRpb24kVGFyZzkiLCJWaXN1YWxpemF0aW9uIiwiUHJvZ3Jlc3NJbmRpY2F0b3IiLCJSYXRpbmdJbmRpY2F0b3IiLCJkYXRhUG9pbnQiLCJfZGF0YVBvaW50JFZhbHVlIiwiX3Byb3BlcnR5JGFubm90YXRpb25zIiwiX3Byb3BlcnR5JGFubm90YXRpb25zMiIsInByb3BlcnR5IiwiU2VtYW50aWNPYmplY3QiLCJnZW5lcmF0ZUJpbmRpbmciLCJyZXF1ZXN0R3JvdXBJZCIsImdyb3VwSWQiLCJpbmNsdWRlcyIsImN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbiIsImhlYWRlckZhY2V0S2V5IiwiY3VzdG9tSGVhZGVyRmFjZXRJRCIsImdldEN1c3RvbUhlYWRlckZhY2V0SUQiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwiZnJhZ21lbnROYW1lIiwidGVtcGxhdGUiLCJuYW1lIiwidGl0bGUiLCJzdWJUaXRsZSIsImJpbmRpbmciLCJ0ZW1wbGF0ZUVkaXQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkhlYWRlckZhY2V0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YVBvaW50LFxuXHRGYWNldFR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRSZWZlcmVuY2VGYWNldFR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCB0eXBlIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0SGVhZGVyRmFjZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRTZW1hbnRpY09iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0LCBDb25maWd1cmFibGVSZWNvcmQsIEN1c3RvbUVsZW1lbnQsIFBvc2l0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IFBsYWNlbWVudCwgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHtcblx0Z2V0Q3VzdG9tSGVhZGVyRmFjZXRJRCxcblx0Z2V0SGVhZGVyRmFjZXRDb250YWluZXJJRCxcblx0Z2V0SGVhZGVyRmFjZXRGb3JtSUQsXG5cdGdldEhlYWRlckZhY2V0SURcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB7IGlzTXVsdGlMaW5lVGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBpc1Zpc2libGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7IGNyZWF0ZUlkRm9yQW5ub3RhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBpc0Fubm90YXRpb25GaWVsZFN0YXRpY2FsbHlIaWRkZW4sIGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvRGF0YUZpZWxkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25Gb3JtRWxlbWVudCwgRm9ybUVsZW1lbnQgfSBmcm9tIFwiLi4vQ29tbW9uL0Zvcm1cIjtcbmltcG9ydCB7IEZvcm1FbGVtZW50VHlwZSwgZ2V0Rm9ybUVsZW1lbnRzRnJvbU1hbmlmZXN0IH0gZnJvbSBcIi4uL0NvbW1vbi9Gb3JtXCI7XG5cbi8vIHJlZ2lvbiBkZWZpbml0aW9uc1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBEZWZpbml0aW9uczogSGVhZGVyIEZhY2V0IFR5cGVzLCBHZW5lcmljIE9QIEhlYWRlciBGYWNldCwgTWFuaWZlc3QgUHJvcGVydGllcyBmb3IgQ3VzdG9tIEhlYWRlciBGYWNldFxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmV4cG9ydCBlbnVtIEhlYWRlckZhY2V0VHlwZSB7XG5cdEFubm90YXRpb24gPSBcIkFubm90YXRpb25cIixcblx0WE1MRnJhZ21lbnQgPSBcIlhNTEZyYWdtZW50XCJcbn1cblxuZXhwb3J0IGVudW0gRmFjZXRUeXBlIHtcblx0UmVmZXJlbmNlID0gXCJSZWZlcmVuY2VcIixcblx0Q29sbGVjdGlvbiA9IFwiQ29sbGVjdGlvblwiXG59XG5cbmV4cG9ydCBlbnVtIEZsZXhEZXNpZ25UaW1lVHlwZSB7XG5cdERlZmF1bHQgPSBcIkRlZmF1bHRcIixcblx0Tm90QWRhcHRhYmxlID0gXCJub3QtYWRhcHRhYmxlXCIsIC8vIGRpc2FibGUgYWxsIGFjdGlvbnMgb24gdGhhdCBpbnN0YW5jZVxuXHROb3RBZGFwdGFibGVUcmVlID0gXCJub3QtYWRhcHRhYmxlLXRyZWVcIiwgLy8gZGlzYWJsZSBhbGwgYWN0aW9ucyBvbiB0aGF0IGluc3RhbmNlIGFuZCBvbiBhbGwgY2hpbGRyZW4gb2YgdGhhdCBpbnN0YW5jZVxuXHROb3RBZGFwdGFibGVWaXNpYmlsaXR5ID0gXCJub3QtYWRhcHRhYmxlLXZpc2liaWxpdHlcIiAvLyBkaXNhYmxlIGFsbCBhY3Rpb25zIHRoYXQgaW5mbHVlbmNlIHRoZSB2aXNpYmlsaXR5LCBuYW1lbHkgcmV2ZWFsIGFuZCByZW1vdmVcbn1cblxuZXhwb3J0IHR5cGUgRmxleFNldHRpbmdzID0ge1xuXHRkZXNpZ250aW1lPzogRmxleERlc2lnblRpbWVUeXBlO1xufTtcblxudHlwZSBIZWFkZXJGb3JtRGF0YSA9IHtcblx0aWQ6IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdGZvcm1FbGVtZW50czogRm9ybUVsZW1lbnRbXTtcbn07XG5cbmVudW0gSGVhZGVyRGF0YVBvaW50VHlwZSB7XG5cdFByb2dyZXNzSW5kaWNhdG9yID0gXCJQcm9ncmVzc0luZGljYXRvclwiLFxuXHRSYXRpbmdJbmRpY2F0b3IgPSBcIlJhdGluZ0luZGljYXRvclwiLFxuXHRDb250ZW50ID0gXCJDb250ZW50XCJcbn1cblxudHlwZSBIZWFkZXJEYXRhUG9pbnREYXRhID0ge1xuXHR0eXBlOiBIZWFkZXJEYXRhUG9pbnRUeXBlO1xuXHRzZW1hbnRpY09iamVjdFBhdGg/OiBzdHJpbmc7XG59O1xuXG5lbnVtIFRhcmdldEFubm90YXRpb25UeXBlIHtcblx0Tm9uZSA9IFwiTm9uZVwiLFxuXHREYXRhUG9pbnQgPSBcIkRhdGFQb2ludFwiLFxuXHRDaGFydCA9IFwiQ2hhcnRcIixcblx0SWRlbnRpZmljYXRpb24gPSBcIklkZW50aWZpY2F0aW9uXCIsXG5cdENvbnRhY3QgPSBcIkNvbnRhY3RcIixcblx0QWRkcmVzcyA9IFwiQWRkcmVzc1wiLFxuXHRGaWVsZEdyb3VwID0gXCJGaWVsZEdyb3VwXCIsXG5cdFByZXNlbnRhdGlvblZhcmlhbnQgPSBcIlByZXNlbnRhdGlvblZhcmlhbnRcIlxufVxuXG50eXBlIEJhc2VIZWFkZXJGYWNldCA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0dHlwZT86IEhlYWRlckZhY2V0VHlwZTsgLy8gTWFuaWZlc3Qgb3IgTWV0YWRhdGFcblx0aWQ6IHN0cmluZztcblx0Y29udGFpbmVySWQ6IHN0cmluZztcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmc7XG5cdGZsZXhTZXR0aW5nczogRmxleFNldHRpbmdzO1xuXHRzdGFzaGVkOiBib29sZWFuO1xuXHR2aXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0dGFyZ2V0QW5ub3RhdGlvblZhbHVlPzogc3RyaW5nO1xuXHR0YXJnZXRBbm5vdGF0aW9uVHlwZT86IFRhcmdldEFubm90YXRpb25UeXBlO1xufTtcblxudHlwZSBCYXNlUmVmZXJlbmNlRmFjZXQgPSBCYXNlSGVhZGVyRmFjZXQgJiB7XG5cdGZhY2V0VHlwZTogRmFjZXRUeXBlLlJlZmVyZW5jZTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpZWxkR3JvdXBGYWNldCA9IEJhc2VSZWZlcmVuY2VGYWNldCAmIHtcblx0aGVhZGVyRm9ybURhdGE6IEhlYWRlckZvcm1EYXRhO1xufTtcblxuZXhwb3J0IHR5cGUgRGF0YVBvaW50RmFjZXQgPSBCYXNlUmVmZXJlbmNlRmFjZXQgJiB7XG5cdGhlYWRlckRhdGFQb2ludERhdGE/OiBIZWFkZXJEYXRhUG9pbnREYXRhO1xufTtcblxudHlwZSBSZWZlcmVuY2VGYWNldCA9IEZpZWxkR3JvdXBGYWNldCB8IERhdGFQb2ludEZhY2V0O1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uRmFjZXQgPSBCYXNlSGVhZGVyRmFjZXQgJiB7XG5cdGZhY2V0VHlwZTogRmFjZXRUeXBlLkNvbGxlY3Rpb247XG5cdGZhY2V0czogUmVmZXJlbmNlRmFjZXRbXTtcbn07XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VIZWFkZXJGYWNldCA9IFJlZmVyZW5jZUZhY2V0IHwgQ29sbGVjdGlvbkZhY2V0O1xuXG5leHBvcnQgdHlwZSBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQgPSBDdXN0b21FbGVtZW50PE9iamVjdFBhZ2VIZWFkZXJGYWNldD4gJiB7XG5cdGZyYWdtZW50TmFtZT86IHN0cmluZztcblx0dGl0bGU/OiBzdHJpbmc7XG5cdHN1YlRpdGxlPzogc3RyaW5nO1xuXHRzdGFzaGVkPzogYm9vbGVhbjtcblx0YmluZGluZz86IHN0cmluZztcblx0dGVtcGxhdGVFZGl0Pzogc3RyaW5nO1xufTtcblxuLy8gZW5kcmVnaW9uIGRlZmluaXRpb25zXG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gQ29sbGVjdCBBbGwgSGVhZGVyIEZhY2V0czogQ3VzdG9tICh2aWEgTWFuaWZlc3QpIGFuZCBBbm5vdGF0aW9uIEJhc2VkICh2aWEgTWV0YW1vZGVsKVxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogUmV0cmlldmUgaGVhZGVyIGZhY2V0cyBmcm9tIGFubm90YXRpb25zLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIEhlYWRlciBmYWNldHMgZnJvbSBhbm5vdGF0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IE9iamVjdFBhZ2VIZWFkZXJGYWNldFtdIHtcblx0Y29uc3QgaGVhZGVyRmFjZXRzOiBPYmplY3RQYWdlSGVhZGVyRmFjZXRbXSA9IFtdO1xuXHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckZhY2V0cz8uZm9yRWFjaCgoZmFjZXQpID0+IHtcblx0XHRjb25zdCBoZWFkZXJGYWNldDogT2JqZWN0UGFnZUhlYWRlckZhY2V0IHwgdW5kZWZpbmVkID0gY3JlYXRlSGVhZGVyRmFjZXQoZmFjZXQsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGlmIChoZWFkZXJGYWNldCkge1xuXHRcdFx0aGVhZGVyRmFjZXRzLnB1c2goaGVhZGVyRmFjZXQpO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIGhlYWRlckZhY2V0cztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBjdXN0b20gaGVhZGVyIGZhY2V0cyBmcm9tIG1hbmlmZXN0LlxuICogQHBhcmFtIG1hbmlmZXN0Q3VzdG9tSGVhZGVyRmFjZXRzXG4gKiBAcmV0dXJucyBIZWFkZXJGYWNldHMgZnJvbSBtYW5pZmVzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0KFxuXHRtYW5pZmVzdEN1c3RvbUhlYWRlckZhY2V0czogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0SGVhZGVyRmFjZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQ+IHtcblx0Y29uc3QgY3VzdG9tSGVhZGVyRmFjZXRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQ+ID0ge307XG5cblx0T2JqZWN0LmtleXMobWFuaWZlc3RDdXN0b21IZWFkZXJGYWNldHMpLmZvckVhY2goKG1hbmlmZXN0SGVhZGVyRmFjZXRLZXkpID0+IHtcblx0XHRjb25zdCBjdXN0b21IZWFkZXJGYWNldDogTWFuaWZlc3RIZWFkZXJGYWNldCA9IG1hbmlmZXN0Q3VzdG9tSGVhZGVyRmFjZXRzW21hbmlmZXN0SGVhZGVyRmFjZXRLZXldO1xuXHRcdGN1c3RvbUhlYWRlckZhY2V0c1ttYW5pZmVzdEhlYWRlckZhY2V0S2V5XSA9IGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0KGN1c3RvbUhlYWRlckZhY2V0LCBtYW5pZmVzdEhlYWRlckZhY2V0S2V5KTtcblx0fSk7XG5cblx0cmV0dXJuIGN1c3RvbUhlYWRlckZhY2V0cztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBzdGFzaGVkIHNldHRpbmdzIGZvciBoZWFkZXIgZmFjZXRzIGZyb20gbWFuaWZlc3QuXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0gY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFN0YXNoZWQgc2V0dGluZyBmb3IgaGVhZGVyIGZhY2V0IG9yIGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldChcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IGJvb2xlYW4ge1xuXHQvLyBXaGVuIGEgSGVhZGVyRmFjZXQgaXMgbmVzdGVkIGluc2lkZSBhIENvbGxlY3Rpb25GYWNldCwgc3Rhc2hpbmcgaXMgbm90IHN1cHBvcnRlZFxuXHRpZiAoXG5cdFx0ZmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCAmJlxuXHRcdGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldFxuXHQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0Y29uc3QgaGVhZGVyRmFjZXRJRCA9IGNyZWF0ZUlkRm9yQW5ub3RhdGlvbihmYWNldERlZmluaXRpb24pID8/IFwiXCI7XG5cdGNvbnN0IGhlYWRlckZhY2V0c0NvbnRyb2xDb25maWcgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEhlYWRlckZhY2V0cygpO1xuXHRjb25zdCBzdGFzaGVkU2V0dGluZyA9IGhlYWRlckZhY2V0c0NvbnRyb2xDb25maWdbaGVhZGVyRmFjZXRJRF0/LnN0YXNoZWQ7XG5cdHJldHVybiBzdGFzaGVkU2V0dGluZyA9PT0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBmbGV4aWJpbGl0eSBkZXNpZ250aW1lIHNldHRpbmdzIGZyb20gbWFuaWZlc3QuXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0gY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIERlc2lnbnRpbWUgc2V0dGluZyBvciBkZWZhdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0KFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGNvbGxlY3Rpb25GYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogRmxleERlc2lnblRpbWVUeXBlIHtcblx0bGV0IGRlc2lnblRpbWVNZXRhZGF0YTogRmxleERlc2lnblRpbWVUeXBlID0gRmxleERlc2lnblRpbWVUeXBlLkRlZmF1bHQ7XG5cdGNvbnN0IGhlYWRlckZhY2V0SUQgPSBjcmVhdGVJZEZvckFubm90YXRpb24oZmFjZXREZWZpbml0aW9uKTtcblxuXHQvLyBGb3IgSGVhZGVyRmFjZXRzIG5lc3RlZCBpbnNpZGUgQ29sbGVjdGlvbkZhY2V0IFJUQSBzaG91bGQgYmUgZGlzYWJsZWQsIHRoZXJlZm9yZSBzZXQgdG8gXCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRpZiAoXG5cdFx0ZmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCAmJlxuXHRcdGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldFxuXHQpIHtcblx0XHRkZXNpZ25UaW1lTWV0YWRhdGEgPSBGbGV4RGVzaWduVGltZVR5cGUuTm90QWRhcHRhYmxlVHJlZTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBoZWFkZXJGYWNldHNDb250cm9sQ29uZmlnID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRIZWFkZXJGYWNldHMoKTtcblx0XHRpZiAoaGVhZGVyRmFjZXRJRCkge1xuXHRcdFx0Y29uc3QgZGVzaWduVGltZSA9IGhlYWRlckZhY2V0c0NvbnRyb2xDb25maWdbaGVhZGVyRmFjZXRJRF0/LmZsZXhTZXR0aW5ncz8uZGVzaWdudGltZTtcblx0XHRcdHN3aXRjaCAoZGVzaWduVGltZSkge1xuXHRcdFx0XHRjYXNlIEZsZXhEZXNpZ25UaW1lVHlwZS5Ob3RBZGFwdGFibGU6XG5cdFx0XHRcdGNhc2UgRmxleERlc2lnblRpbWVUeXBlLk5vdEFkYXB0YWJsZVRyZWU6XG5cdFx0XHRcdGNhc2UgRmxleERlc2lnblRpbWVUeXBlLk5vdEFkYXB0YWJsZVZpc2liaWxpdHk6XG5cdFx0XHRcdFx0ZGVzaWduVGltZU1ldGFkYXRhID0gZGVzaWduVGltZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGRlc2lnblRpbWVNZXRhZGF0YTtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBDb252ZXJ0ICYgQnVpbGQgQW5ub3RhdGlvbiBCYXNlZCBIZWFkZXIgRmFjZXRzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmZ1bmN0aW9uIGNyZWF0ZVJlZmVyZW5jZUhlYWRlckZhY2V0KFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGNvbGxlY3Rpb25GYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogUmVmZXJlbmNlRmFjZXQgfCB1bmRlZmluZWQge1xuXHRpZiAoZmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCAmJiBmYWNldERlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSAhPT0gdHJ1ZSkge1xuXHRcdGNvbnN0IGhlYWRlckZhY2V0SUQgPSBnZXRIZWFkZXJGYWNldElEKGZhY2V0RGVmaW5pdGlvbiksXG5cdFx0XHRnZXRIZWFkZXJGYWNldEtleSA9IChmYWNldERlZmluaXRpb25Ub0NoZWNrOiBGYWNldFR5cGVzLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0XHRcdFx0cmV0dXJuIGZhY2V0RGVmaW5pdGlvblRvQ2hlY2suSUQ/LnRvU3RyaW5nKCkgfHwgZmFjZXREZWZpbml0aW9uVG9DaGVjay5MYWJlbD8udG9TdHJpbmcoKSB8fCBmYWxsYmFjaztcblx0XHRcdH0sXG5cdFx0XHR0YXJnZXRBbm5vdGF0aW9uVmFsdWUgPSBmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlLFxuXHRcdFx0dGFyZ2V0QW5ub3RhdGlvblR5cGUgPSBnZXRUYXJnZXRBbm5vdGF0aW9uVHlwZShmYWNldERlZmluaXRpb24pO1xuXG5cdFx0bGV0IGhlYWRlckZvcm1EYXRhOiBIZWFkZXJGb3JtRGF0YSB8IHVuZGVmaW5lZDtcblx0XHRsZXQgaGVhZGVyRGF0YVBvaW50RGF0YTogSGVhZGVyRGF0YVBvaW50RGF0YSB8IHVuZGVmaW5lZDtcblxuXHRcdHN3aXRjaCAodGFyZ2V0QW5ub3RhdGlvblR5cGUpIHtcblx0XHRcdGNhc2UgVGFyZ2V0QW5ub3RhdGlvblR5cGUuRmllbGRHcm91cDpcblx0XHRcdFx0aGVhZGVyRm9ybURhdGEgPSBnZXRGaWVsZEdyb3VwRm9ybURhdGEoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgVGFyZ2V0QW5ub3RhdGlvblR5cGUuRGF0YVBvaW50OlxuXHRcdFx0XHRoZWFkZXJEYXRhUG9pbnREYXRhID0gZ2V0RGF0YVBvaW50RGF0YShmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdC8vIFRvRG86IEhhbmRsZSBvdGhlciBjYXNlc1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0aWYgKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0ICYmIGlzQW5ub3RhdGlvbkZpZWxkU3RhdGljYWxseUhpZGRlbihmYWNldERlZmluaXRpb24pKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiBIZWFkZXJGYWNldFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0ZmFjZXRUeXBlOiBGYWNldFR5cGUuUmVmZXJlbmNlLFxuXHRcdFx0XHRpZDogaGVhZGVyRmFjZXRJRCxcblx0XHRcdFx0Y29udGFpbmVySWQ6IGdldEhlYWRlckZhY2V0Q29udGFpbmVySUQoZmFjZXREZWZpbml0aW9uKSxcblx0XHRcdFx0a2V5OiBnZXRIZWFkZXJGYWNldEtleShmYWNldERlZmluaXRpb24sIGhlYWRlckZhY2V0SUQpLFxuXHRcdFx0XHRmbGV4U2V0dGluZ3M6IHtcblx0XHRcdFx0XHRkZXNpZ250aW1lOiBnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dClcblx0XHRcdFx0fSxcblx0XHRcdFx0c3Rhc2hlZDogZ2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXQoZmFjZXREZWZpbml0aW9uLCBjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oaXNWaXNpYmxlKGZhY2V0RGVmaW5pdGlvbikpLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpfS9gLFxuXHRcdFx0XHR0YXJnZXRBbm5vdGF0aW9uVmFsdWUsXG5cdFx0XHRcdHRhcmdldEFubm90YXRpb25UeXBlLFxuXHRcdFx0XHRoZWFkZXJGb3JtRGF0YSxcblx0XHRcdFx0aGVhZGVyRGF0YVBvaW50RGF0YVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDb2xsZWN0aW9uSGVhZGVyRmFjZXQoXG5cdGNvbGxlY3Rpb25GYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQ29sbGVjdGlvbkZhY2V0IHwgdW5kZWZpbmVkIHtcblx0aWYgKGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldCkge1xuXHRcdGNvbnN0IGZhY2V0czogUmVmZXJlbmNlRmFjZXRbXSA9IFtdLFxuXHRcdFx0aGVhZGVyRmFjZXRJRCA9IGdldEhlYWRlckZhY2V0SUQoY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbiksXG5cdFx0XHRnZXRIZWFkZXJGYWNldEtleSA9IChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmFjZXREZWZpbml0aW9uLklEPy50b1N0cmluZygpIHx8IGZhY2V0RGVmaW5pdGlvbi5MYWJlbD8udG9TdHJpbmcoKSB8fCBmYWxsYmFjaztcblx0XHRcdH07XG5cblx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLkZhY2V0cy5mb3JFYWNoKChmYWNldERlZmluaXRpb24pID0+IHtcblx0XHRcdGNvbnN0IGZhY2V0OiBSZWZlcmVuY2VGYWNldCB8IHVuZGVmaW5lZCA9IGNyZWF0ZVJlZmVyZW5jZUhlYWRlckZhY2V0KFxuXHRcdFx0XHRmYWNldERlZmluaXRpb24sXG5cdFx0XHRcdGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdCk7XG5cdFx0XHRpZiAoZmFjZXQpIHtcblx0XHRcdFx0ZmFjZXRzLnB1c2goZmFjZXQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IEhlYWRlckZhY2V0VHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0ZmFjZXRUeXBlOiBGYWNldFR5cGUuQ29sbGVjdGlvbixcblx0XHRcdGlkOiBoZWFkZXJGYWNldElELFxuXHRcdFx0Y29udGFpbmVySWQ6IGdldEhlYWRlckZhY2V0Q29udGFpbmVySUQoY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbiksXG5cdFx0XHRrZXk6IGdldEhlYWRlckZhY2V0S2V5KGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sIGhlYWRlckZhY2V0SUQpLFxuXHRcdFx0ZmxleFNldHRpbmdzOiB7XG5cdFx0XHRcdGRlc2lnbnRpbWU6IGdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQoXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbixcblx0XHRcdFx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KVxuXHRcdFx0fSxcblx0XHRcdHN0YXNoZWQ6IGdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sIGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oaXNWaXNpYmxlKGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24pKSxcblx0XHRcdGFubm90YXRpb25QYXRoOiBgJHtjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpfS9gLFxuXHRcdFx0ZmFjZXRzXG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEFubm90YXRpb25UeXBlKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyk6IFRhcmdldEFubm90YXRpb25UeXBlIHtcblx0bGV0IGFubm90YXRpb25UeXBlID0gVGFyZ2V0QW5ub3RhdGlvblR5cGUuTm9uZTtcblx0Y29uc3QgYW5ub3RhdGlvblR5cGVNYXA6IFJlY29yZDxzdHJpbmcsIFRhcmdldEFubm90YXRpb25UeXBlPiA9IHtcblx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiOiBUYXJnZXRBbm5vdGF0aW9uVHlwZS5EYXRhUG9pbnQsXG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiOiBUYXJnZXRBbm5vdGF0aW9uVHlwZS5DaGFydCxcblx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLklkZW50aWZpY2F0aW9uXCI6IFRhcmdldEFubm90YXRpb25UeXBlLklkZW50aWZpY2F0aW9uLFxuXHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0XCI6IFRhcmdldEFubm90YXRpb25UeXBlLkNvbnRhY3QsXG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkFkZHJlc3NcIjogVGFyZ2V0QW5ub3RhdGlvblR5cGUuQWRkcmVzcyxcblx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpZWxkR3JvdXBcIjogVGFyZ2V0QW5ub3RhdGlvblR5cGUuRmllbGRHcm91cCxcblx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlByZXNlbnRhdGlvblZhcmlhbnRcIjogVGFyZ2V0QW5ub3RhdGlvblR5cGUuUHJlc2VudGF0aW9uVmFyaWFudFxuXHR9O1xuXHQvLyBSZWZlcmVuY2VVUkxGYWNldCBhbmQgQ29sbGVjdGlvbkZhY2V0IGRvIG5vdCBoYXZlIFRhcmdldCBwcm9wZXJ0eS5cblx0aWYgKFxuXHRcdGZhY2V0RGVmaW5pdGlvbi4kVHlwZSAhPT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlVVJMRmFjZXQgJiZcblx0XHRmYWNldERlZmluaXRpb24uJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldCAmJlxuXHRcdGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldFxuXHQpIHtcblx0XHRhbm5vdGF0aW9uVHlwZSA9IGFubm90YXRpb25UeXBlTWFwW2ZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldC50ZXJtXSA/PyBUYXJnZXRBbm5vdGF0aW9uVHlwZS5Ob25lO1xuXHR9XG5cblx0cmV0dXJuIGFubm90YXRpb25UeXBlO1xufVxuXG5mdW5jdGlvbiBnZXRGaWVsZEdyb3VwRm9ybURhdGEoXG5cdGZhY2V0RGVmaW5pdGlvbjogUmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBIZWFkZXJGb3JtRGF0YSB7XG5cdC8vIHNwbGl0IGluIHRoaXMgZnJvbSBhbm5vdGF0aW9uICsgZ2V0RmllbGRHcm91cEZyb21EZWZhdWx0XG5cdGlmICghZmFjZXREZWZpbml0aW9uKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGdldCBGaWVsZEdyb3VwIGZvcm0gZGF0YSB3aXRob3V0IGZhY2V0IGRlZmluaXRpb25cIik7XG5cdH1cblxuXHRjb25zdCBmb3JtRWxlbWVudHMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRnZXRGb3JtRWxlbWVudHNGcm9tQW5ub3RhdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRnZXRGb3JtRWxlbWVudHNGcm9tTWFuaWZlc3QoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHQpO1xuXG5cdHJldHVybiB7XG5cdFx0aWQ6IGdldEhlYWRlckZhY2V0Rm9ybUlEKGZhY2V0RGVmaW5pdGlvbiksXG5cdFx0bGFiZWw6IGZhY2V0RGVmaW5pdGlvbi5MYWJlbD8udG9TdHJpbmcoKSxcblx0XHRmb3JtRWxlbWVudHNcblx0fTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG1hbmlmZXN0LWJhc2VkIEZvcm1FbGVtZW50cy5cbiAqIEBwYXJhbSBmYWNldERlZmluaXRpb24gVGhlIGRlZmluaXRpb24gb2YgdGhlIGZhY2V0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQgZm9yIHRoZSBmYWNldFxuICogQHJldHVybnMgQW5ub3RhdGlvbi1iYXNlZCBGb3JtRWxlbWVudHNcbiAqL1xuZnVuY3Rpb24gZ2V0Rm9ybUVsZW1lbnRzRnJvbUFubm90YXRpb25zKFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQW5ub3RhdGlvbkZvcm1FbGVtZW50W10ge1xuXHRjb25zdCBhbm5vdGF0aW9uQmFzZWRGb3JtRWxlbWVudHM6IEFubm90YXRpb25Gb3JtRWxlbWVudFtdID0gW107XG5cblx0Ly8gUmVmZXJlbmNlVVJMRmFjZXQgYW5kIENvbGxlY3Rpb25GYWNldCBkbyBub3QgaGF2ZSBUYXJnZXQgcHJvcGVydHkuXG5cdGlmIChmYWNldERlZmluaXRpb24uJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZVVSTEZhY2V0ICYmIGZhY2V0RGVmaW5pdGlvbi4kVHlwZSAhPT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0KSB7XG5cdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWUpO1xuXHRcdGNvbnZlcnRlckNvbnRleHQgPSByZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0O1xuXHRcdChmYWNldERlZmluaXRpb24uVGFyZ2V0Py4kdGFyZ2V0IGFzIEZpZWxkR3JvdXApPy5EYXRhLmZvckVhY2goKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0aWYgKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpICE9PSB0cnVlKSB7XG5cdFx0XHRcdGNvbnN0IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGggPSBnZXRTZW1hbnRpY09iamVjdFBhdGgoY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkKTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsIHx8XG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCB8fFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uIHx8XG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb24pICYmXG5cdFx0XHRcdFx0IWlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKGRhdGFGaWVsZClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbkJhc2VkRm9ybUVsZW1lbnRzLnB1c2goe1xuXHRcdFx0XHRcdFx0aXNWYWx1ZU11bHRpbGluZVRleHQ6IGlzTXVsdGlMaW5lVGV4dChkYXRhRmllbGQuVmFsdWU/LiR0YXJnZXQpLFxuXHRcdFx0XHRcdFx0dHlwZTogRm9ybUVsZW1lbnRUeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZShkYXRhRmllbGQpKSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsIHx8IGRhdGFGaWVsZC5MYWJlbCxcblx0XHRcdFx0XHRcdGlkUHJlZml4OiBnZXRIZWFkZXJGYWNldEZvcm1JRChmYWNldERlZmluaXRpb24sIGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpfS9gLFxuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3RQYXRoOiBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uICYmXG5cdFx0XHRcdFx0IWlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKGRhdGFGaWVsZClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbkJhc2VkRm9ybUVsZW1lbnRzLnB1c2goe1xuXHRcdFx0XHRcdFx0aXNWYWx1ZU11bHRpbGluZVRleHQ6IGZhbHNlLCAvLyB3YXMgZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LlVJPy5NdWx0aUxpbmVUZXh0Py52YWx1ZU9mKCkgPT09IHRydWUgYnV0IHRoYXQgZG9lc24ndCBtYWtlIHNlbnNlIGFzIHRoZSB0YXJnZXQgY2Fubm90IGhhdmUgdGhhdCBhbm5vdGF0aW9uXG5cdFx0XHRcdFx0XHR0eXBlOiBGb3JtRWxlbWVudFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oaXNWaXNpYmxlKGRhdGFGaWVsZCkpLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpIHx8IGRhdGFGaWVsZC5MYWJlbD8udG9TdHJpbmcoKSxcblx0XHRcdFx0XHRcdGlkUHJlZml4OiBnZXRIZWFkZXJGYWNldEZvcm1JRChmYWNldERlZmluaXRpb24sIGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpfS9gLFxuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3RQYXRoOiBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiBhbm5vdGF0aW9uQmFzZWRGb3JtRWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIGdldERhdGFQb2ludERhdGEoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBIZWFkZXJEYXRhUG9pbnREYXRhIHtcblx0bGV0IHR5cGUgPSBIZWFkZXJEYXRhUG9pbnRUeXBlLkNvbnRlbnQ7XG5cdGxldCBzZW1hbnRpY09iamVjdFBhdGg7XG5cdGlmIChmYWNldERlZmluaXRpb24uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0ICYmICFpc0Fubm90YXRpb25GaWVsZFN0YXRpY2FsbHlIaWRkZW4oZmFjZXREZWZpbml0aW9uKSkge1xuXHRcdGlmICgoZmFjZXREZWZpbml0aW9uLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WaXN1YWxpemF0aW9uID09PSBcIlVJLlZpc3VhbGl6YXRpb25UeXBlL1Byb2dyZXNzXCIpIHtcblx0XHRcdHR5cGUgPSBIZWFkZXJEYXRhUG9pbnRUeXBlLlByb2dyZXNzSW5kaWNhdG9yO1xuXHRcdH0gZWxzZSBpZiAoKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmlzdWFsaXphdGlvbiA9PT0gXCJVSS5WaXN1YWxpemF0aW9uVHlwZS9SYXRpbmdcIikge1xuXHRcdFx0dHlwZSA9IEhlYWRlckRhdGFQb2ludFR5cGUuUmF0aW5nSW5kaWNhdG9yO1xuXHRcdH1cblx0XHRjb25zdCBkYXRhUG9pbnQgPSBmYWNldERlZmluaXRpb24uVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludDtcblxuXHRcdGlmICh0eXBlb2YgZGF0YVBvaW50ID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRpZiAoZGF0YVBvaW50Py5WYWx1ZT8uJHRhcmdldCkge1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eSA9IGRhdGFQb2ludC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHRpZiAocHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlNlbWFudGljT2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgocHJvcGVydHk/LmZ1bGx5UXVhbGlmaWVkTmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyB0eXBlLCBzZW1hbnRpY09iamVjdFBhdGggfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFubm90YXRpb24tYmFzZWQgaGVhZGVyIGZhY2V0LlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgZmFjZXRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGNyZWF0ZWQgYW5ub3RhdGlvbi1iYXNlZCBoZWFkZXIgZmFjZXRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSGVhZGVyRmFjZXQoXG5cdGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBPYmplY3RQYWdlSGVhZGVyRmFjZXQgfCB1bmRlZmluZWQge1xuXHRsZXQgaGVhZGVyRmFjZXQ6IE9iamVjdFBhZ2VIZWFkZXJGYWNldCB8IHVuZGVmaW5lZDtcblx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0aGVhZGVyRmFjZXQgPSBjcmVhdGVSZWZlcmVuY2VIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0aGVhZGVyRmFjZXQgPSBjcmVhdGVDb2xsZWN0aW9uSGVhZGVyRmFjZXQoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdHJldHVybiBoZWFkZXJGYWNldDtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBDb252ZXJ0ICYgQnVpbGQgTWFuaWZlc3QgQmFzZWQgSGVhZGVyIEZhY2V0c1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdlbmVyYXRlQmluZGluZyhyZXF1ZXN0R3JvdXBJZD86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghcmVxdWVzdEdyb3VwSWQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGNvbnN0IGdyb3VwSWQgPSBbXCJIZXJvZXNcIiwgXCJEZWNvcmF0aW9uXCIsIFwiV29ya2Vyc1wiLCBcIkxvbmdSdW5uZXJzXCJdLmluY2x1ZGVzKHJlcXVlc3RHcm91cElkKVxuXHRcdD8gYCRhdXRvLiR7cmVxdWVzdEdyb3VwSWR9YFxuXHRcdDogcmVxdWVzdEdyb3VwSWQ7XG5cblx0cmV0dXJuIGB7IHBhdGggOiAnJywgcGFyYW1ldGVycyA6IHsgJCRncm91cElkIDogJyR7Z3JvdXBJZH0nIH0gfWA7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbWFuaWZlc3QgYmFzZWQgY3VzdG9tIGhlYWRlciBmYWNldC5cbiAqIEBwYXJhbSBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBoZWFkZXJGYWNldEtleVxuICogQHJldHVybnMgVGhlIG1hbmlmZXN0IGJhc2VkIGN1c3RvbSBoZWFkZXIgZmFjZXQgY3JlYXRlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVDdXN0b21IZWFkZXJGYWNldChjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb246IE1hbmlmZXN0SGVhZGVyRmFjZXQsIGhlYWRlckZhY2V0S2V5OiBzdHJpbmcpOiBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQge1xuXHRjb25zdCBjdXN0b21IZWFkZXJGYWNldElEID0gZ2V0Q3VzdG9tSGVhZGVyRmFjZXRJRChoZWFkZXJGYWNldEtleSk7XG5cblx0bGV0IHBvc2l0aW9uOiBQb3NpdGlvbiB8IHVuZGVmaW5lZCA9IGN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi5wb3NpdGlvbjtcblx0aWYgKCFwb3NpdGlvbikge1xuXHRcdHBvc2l0aW9uID0ge1xuXHRcdFx0cGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXJcblx0XHR9O1xuXHR9XG5cdC8vIFRPRE8gZm9yIGFuIG5vbiBhbm5vdGF0aW9uIGZyYWdtZW50IHRoZSBuYW1lIGlzIG1hbmRhdG9yeSAtPiBOb3QgY2hlY2tlZFxuXHRyZXR1cm4ge1xuXHRcdGZhY2V0VHlwZTogRmFjZXRUeXBlLlJlZmVyZW5jZSxcblx0XHR0eXBlOiBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24udHlwZSxcblx0XHRpZDogY3VzdG9tSGVhZGVyRmFjZXRJRCxcblx0XHRjb250YWluZXJJZDogY3VzdG9tSGVhZGVyRmFjZXRJRCxcblx0XHRrZXk6IGhlYWRlckZhY2V0S2V5LFxuXHRcdHBvc2l0aW9uOiBwb3NpdGlvbixcblx0XHR2aXNpYmxlOiBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24udmlzaWJsZSxcblx0XHRmcmFnbWVudE5hbWU6IGN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi50ZW1wbGF0ZSB8fCBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24ubmFtZSxcblx0XHR0aXRsZTogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnRpdGxlLFxuXHRcdHN1YlRpdGxlOiBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24uc3ViVGl0bGUsXG5cdFx0c3Rhc2hlZDogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnN0YXNoZWQgfHwgZmFsc2UsXG5cdFx0ZmxleFNldHRpbmdzOiB7IC4uLnsgZGVzaWdudGltZTogRmxleERlc2lnblRpbWVUeXBlLkRlZmF1bHQgfSwgLi4uY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLmZsZXhTZXR0aW5ncyB9LFxuXHRcdGJpbmRpbmc6IGdlbmVyYXRlQmluZGluZyhjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24ucmVxdWVzdEdyb3VwSWQpLFxuXHRcdHRlbXBsYXRlRWRpdDogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnRlbXBsYXRlRWRpdFxuXHR9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE2QkE7RUFDQTtFQUNBO0VBQ0E7RUFBQSxJQUVZQSxlQUFlO0VBQUEsV0FBZkEsZUFBZTtJQUFmQSxlQUFlO0lBQWZBLGVBQWU7RUFBQSxHQUFmQSxlQUFlLEtBQWZBLGVBQWU7RUFBQUMsUUFBQSxDQUFBRCxlQUFBLEdBQUFBLGVBQUE7RUFBQSxJQUtmRSxTQUFTO0VBQUEsV0FBVEEsU0FBUztJQUFUQSxTQUFTO0lBQVRBLFNBQVM7RUFBQSxHQUFUQSxTQUFTLEtBQVRBLFNBQVM7RUFBQUQsUUFBQSxDQUFBQyxTQUFBLEdBQUFBLFNBQUE7RUFBQSxJQUtUQyxrQkFBa0I7RUFBQSxXQUFsQkEsa0JBQWtCO0lBQWxCQSxrQkFBa0I7SUFBbEJBLGtCQUFrQjtJQUFsQkEsa0JBQWtCO0lBQWxCQSxrQkFBa0I7RUFBQSxHQUFs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
|
|
406
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJIZWFkZXJGYWNldFR5cGUiLCJfZXhwb3J0cyIsIkZhY2V0VHlwZSIsIkZsZXhEZXNpZ25UaW1lVHlwZSIsIkhlYWRlckRhdGFQb2ludFR5cGUiLCJUYXJnZXRBbm5vdGF0aW9uVHlwZSIsImdldEhlYWRlckZhY2V0c0Zyb21Bbm5vdGF0aW9ucyIsImNvbnZlcnRlckNvbnRleHQiLCJoZWFkZXJGYWNldHMiLCJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhlYWRlckZhY2V0cyIsImZvckVhY2giLCJmYWNldCIsImhlYWRlckZhY2V0IiwiY3JlYXRlSGVhZGVyRmFjZXQiLCJwdXNoIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0IiwibWFuaWZlc3RDdXN0b21IZWFkZXJGYWNldHMiLCJjdXN0b21IZWFkZXJGYWNldHMiLCJPYmplY3QiLCJrZXlzIiwibWFuaWZlc3RIZWFkZXJGYWNldEtleSIsImN1c3RvbUhlYWRlckZhY2V0IiwiY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXQiLCJnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldCIsImZhY2V0RGVmaW5pdGlvbiIsImNvbGxlY3Rpb25GYWNldERlZmluaXRpb24iLCIkVHlwZSIsImhlYWRlckZhY2V0SUQiLCJjcmVhdGVJZEZvckFubm90YXRpb24iLCJoZWFkZXJGYWNldHNDb250cm9sQ29uZmlnIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0SGVhZGVyRmFjZXRzIiwic3Rhc2hlZFNldHRpbmciLCJzdGFzaGVkIiwiZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldCIsImRlc2lnblRpbWVNZXRhZGF0YSIsIkRlZmF1bHQiLCJOb3RBZGFwdGFibGVUcmVlIiwiZGVzaWduVGltZSIsImZsZXhTZXR0aW5ncyIsImRlc2lnbnRpbWUiLCJOb3RBZGFwdGFibGUiLCJOb3RBZGFwdGFibGVWaXNpYmlsaXR5IiwiY3JlYXRlUmVmZXJlbmNlSGVhZGVyRmFjZXQiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwiZ2V0SGVhZGVyRmFjZXRJRCIsImdldEhlYWRlckZhY2V0S2V5IiwiZmFjZXREZWZpbml0aW9uVG9DaGVjayIsImZhbGxiYWNrIiwiSUQiLCJ0b1N0cmluZyIsIkxhYmVsIiwidGFyZ2V0QW5ub3RhdGlvblZhbHVlIiwiVGFyZ2V0IiwidmFsdWUiLCJ0YXJnZXRBbm5vdGF0aW9uVHlwZSIsImdldFRhcmdldEFubm90YXRpb25UeXBlIiwiaGVhZGVyRm9ybURhdGEiLCJoZWFkZXJEYXRhUG9pbnREYXRhIiwiRmllbGRHcm91cCIsImdldEZpZWxkR3JvdXBGb3JtRGF0YSIsIkRhdGFQb2ludCIsImdldERhdGFQb2ludERhdGEiLCIkdGFyZ2V0IiwidGVybSIsImlzQW5ub3RhdGlvbkZpZWxkU3RhdGljYWxseUhpZGRlbiIsInVuZGVmaW5lZCIsInR5cGUiLCJBbm5vdGF0aW9uIiwiZmFjZXRUeXBlIiwiUmVmZXJlbmNlIiwiaWQiLCJjb250YWluZXJJZCIsImdldEhlYWRlckZhY2V0Q29udGFpbmVySUQiLCJrZXkiLCJ2aXNpYmxlIiwiY29tcGlsZUV4cHJlc3Npb24iLCJpc1Zpc2libGUiLCJhbm5vdGF0aW9uUGF0aCIsImdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJjcmVhdGVDb2xsZWN0aW9uSGVhZGVyRmFjZXQiLCJmYWNldHMiLCJGYWNldHMiLCJDb2xsZWN0aW9uIiwiYW5ub3RhdGlvblR5cGUiLCJOb25lIiwiYW5ub3RhdGlvblR5cGVNYXAiLCJDaGFydCIsIklkZW50aWZpY2F0aW9uIiwiQ29udGFjdCIsIkFkZHJlc3MiLCJQcmVzZW50YXRpb25WYXJpYW50IiwiRXJyb3IiLCJmb3JtRWxlbWVudHMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldEZvcm1FbGVtZW50c0Zyb21Bbm5vdGF0aW9ucyIsImdldEZvcm1FbGVtZW50c0Zyb21NYW5pZmVzdCIsImdldEhlYWRlckZhY2V0Rm9ybUlEIiwibGFiZWwiLCJhbm5vdGF0aW9uQmFzZWRGb3JtRWxlbWVudHMiLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiRGF0YSIsImRhdGFGaWVsZCIsInNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGgiLCJnZXRTZW1hbnRpY09iamVjdFBhdGgiLCJpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbiIsImlzVmFsdWVNdWx0aWxpbmVUZXh0IiwiaXNNdWx0aUxpbmVUZXh0IiwiVmFsdWUiLCJGb3JtRWxlbWVudFR5cGUiLCJLZXlIZWxwZXIiLCJnZW5lcmF0ZUtleUZyb21EYXRhRmllbGQiLCJDb21tb24iLCJpZFByZWZpeCIsInNlbWFudGljT2JqZWN0UGF0aCIsIkNvbnRlbnQiLCJWaXN1YWxpemF0aW9uIiwiUHJvZ3Jlc3NJbmRpY2F0b3IiLCJSYXRpbmdJbmRpY2F0b3IiLCJkYXRhUG9pbnQiLCJwcm9wZXJ0eSIsIlNlbWFudGljT2JqZWN0IiwiZ2VuZXJhdGVCaW5kaW5nIiwicmVxdWVzdEdyb3VwSWQiLCJncm91cElkIiwiaW5jbHVkZXMiLCJjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24iLCJoZWFkZXJGYWNldEtleSIsImN1c3RvbUhlYWRlckZhY2V0SUQiLCJnZXRDdXN0b21IZWFkZXJGYWNldElEIiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsImZyYWdtZW50TmFtZSIsInRlbXBsYXRlIiwibmFtZSIsInRpdGxlIiwic3ViVGl0bGUiLCJiaW5kaW5nIiwidGVtcGxhdGVFZGl0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJIZWFkZXJGYWNldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFQb2ludCxcblx0RmFjZXRUeXBlcyxcblx0RmllbGRHcm91cCxcblx0UmVmZXJlbmNlRmFjZXRUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgdHlwZSBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdEhlYWRlckZhY2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0U2VtYW50aWNPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ29uZmlndXJhYmxlUmVjb3JkLCBDdXN0b21FbGVtZW50LCBQb3NpdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBQbGFjZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7XG5cdGdldEN1c3RvbUhlYWRlckZhY2V0SUQsXG5cdGdldEhlYWRlckZhY2V0Q29udGFpbmVySUQsXG5cdGdldEhlYWRlckZhY2V0Rm9ybUlELFxuXHRnZXRIZWFkZXJGYWNldElEXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgeyBpc011bHRpTGluZVRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgaXNWaXNpYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgeyBjcmVhdGVJZEZvckFubm90YXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uRmllbGRTdGF0aWNhbGx5SGlkZGVuLCBpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbiB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0RhdGFGaWVsZEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uRm9ybUVsZW1lbnQsIEZvcm1FbGVtZW50IH0gZnJvbSBcIi4uL0NvbW1vbi9Gb3JtXCI7XG5pbXBvcnQgeyBGb3JtRWxlbWVudFR5cGUsIGdldEZvcm1FbGVtZW50c0Zyb21NYW5pZmVzdCB9IGZyb20gXCIuLi9Db21tb24vRm9ybVwiO1xuXG4vLyByZWdpb24gZGVmaW5pdGlvbnNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gRGVmaW5pdGlvbnM6IEhlYWRlciBGYWNldCBUeXBlcywgR2VuZXJpYyBPUCBIZWFkZXIgRmFjZXQsIE1hbmlmZXN0IFByb3BlcnRpZXMgZm9yIEN1c3RvbSBIZWFkZXIgRmFjZXRcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5leHBvcnQgZW51bSBIZWFkZXJGYWNldFR5cGUge1xuXHRBbm5vdGF0aW9uID0gXCJBbm5vdGF0aW9uXCIsXG5cdFhNTEZyYWdtZW50ID0gXCJYTUxGcmFnbWVudFwiXG59XG5cbmV4cG9ydCBlbnVtIEZhY2V0VHlwZSB7XG5cdFJlZmVyZW5jZSA9IFwiUmVmZXJlbmNlXCIsXG5cdENvbGxlY3Rpb24gPSBcIkNvbGxlY3Rpb25cIlxufVxuXG5leHBvcnQgZW51bSBGbGV4RGVzaWduVGltZVR5cGUge1xuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsXG5cdE5vdEFkYXB0YWJsZSA9IFwibm90LWFkYXB0YWJsZVwiLCAvLyBkaXNhYmxlIGFsbCBhY3Rpb25zIG9uIHRoYXQgaW5zdGFuY2Vcblx0Tm90QWRhcHRhYmxlVHJlZSA9IFwibm90LWFkYXB0YWJsZS10cmVlXCIsIC8vIGRpc2FibGUgYWxsIGFjdGlvbnMgb24gdGhhdCBpbnN0YW5jZSBhbmQgb24gYWxsIGNoaWxkcmVuIG9mIHRoYXQgaW5zdGFuY2Vcblx0Tm90QWRhcHRhYmxlVmlzaWJpbGl0eSA9IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCIgLy8gZGlzYWJsZSBhbGwgYWN0aW9ucyB0aGF0IGluZmx1ZW5jZSB0aGUgdmlzaWJpbGl0eSwgbmFtZWx5IHJldmVhbCBhbmQgcmVtb3ZlXG59XG5cbmV4cG9ydCB0eXBlIEZsZXhTZXR0aW5ncyA9IHtcblx0ZGVzaWdudGltZT86IEZsZXhEZXNpZ25UaW1lVHlwZTtcbn07XG5cbnR5cGUgSGVhZGVyRm9ybURhdGEgPSB7XG5cdGlkOiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRmb3JtRWxlbWVudHM6IEZvcm1FbGVtZW50W107XG59O1xuXG5lbnVtIEhlYWRlckRhdGFQb2ludFR5cGUge1xuXHRQcm9ncmVzc0luZGljYXRvciA9IFwiUHJvZ3Jlc3NJbmRpY2F0b3JcIixcblx0UmF0aW5nSW5kaWNhdG9yID0gXCJSYXRpbmdJbmRpY2F0b3JcIixcblx0Q29udGVudCA9IFwiQ29udGVudFwiXG59XG5cbnR5cGUgSGVhZGVyRGF0YVBvaW50RGF0YSA9IHtcblx0dHlwZTogSGVhZGVyRGF0YVBvaW50VHlwZTtcblx0c2VtYW50aWNPYmplY3RQYXRoPzogc3RyaW5nO1xufTtcblxuZW51bSBUYXJnZXRBbm5vdGF0aW9uVHlwZSB7XG5cdE5vbmUgPSBcIk5vbmVcIixcblx0RGF0YVBvaW50ID0gXCJEYXRhUG9pbnRcIixcblx0Q2hhcnQgPSBcIkNoYXJ0XCIsXG5cdElkZW50aWZpY2F0aW9uID0gXCJJZGVudGlmaWNhdGlvblwiLFxuXHRDb250YWN0ID0gXCJDb250YWN0XCIsXG5cdEFkZHJlc3MgPSBcIkFkZHJlc3NcIixcblx0RmllbGRHcm91cCA9IFwiRmllbGRHcm91cFwiLFxuXHRQcmVzZW50YXRpb25WYXJpYW50ID0gXCJQcmVzZW50YXRpb25WYXJpYW50XCJcbn1cblxudHlwZSBCYXNlSGVhZGVyRmFjZXQgPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdHR5cGU/OiBIZWFkZXJGYWNldFR5cGU7IC8vIE1hbmlmZXN0IG9yIE1ldGFkYXRhXG5cdGlkOiBzdHJpbmc7XG5cdGNvbnRhaW5lcklkOiBzdHJpbmc7XG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nO1xuXHRmbGV4U2V0dGluZ3M6IEZsZXhTZXR0aW5ncztcblx0c3Rhc2hlZDogYm9vbGVhbjtcblx0dmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHRhcmdldEFubm90YXRpb25WYWx1ZT86IHN0cmluZztcblx0dGFyZ2V0QW5ub3RhdGlvblR5cGU/OiBUYXJnZXRBbm5vdGF0aW9uVHlwZTtcbn07XG5cbnR5cGUgQmFzZVJlZmVyZW5jZUZhY2V0ID0gQmFzZUhlYWRlckZhY2V0ICYge1xuXHRmYWNldFR5cGU6IEZhY2V0VHlwZS5SZWZlcmVuY2U7XG59O1xuXG5leHBvcnQgdHlwZSBGaWVsZEdyb3VwRmFjZXQgPSBCYXNlUmVmZXJlbmNlRmFjZXQgJiB7XG5cdGhlYWRlckZvcm1EYXRhOiBIZWFkZXJGb3JtRGF0YTtcbn07XG5cbmV4cG9ydCB0eXBlIERhdGFQb2ludEZhY2V0ID0gQmFzZVJlZmVyZW5jZUZhY2V0ICYge1xuXHRoZWFkZXJEYXRhUG9pbnREYXRhPzogSGVhZGVyRGF0YVBvaW50RGF0YTtcbn07XG5cbnR5cGUgUmVmZXJlbmNlRmFjZXQgPSBGaWVsZEdyb3VwRmFjZXQgfCBEYXRhUG9pbnRGYWNldDtcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvbkZhY2V0ID0gQmFzZUhlYWRlckZhY2V0ICYge1xuXHRmYWNldFR5cGU6IEZhY2V0VHlwZS5Db2xsZWN0aW9uO1xuXHRmYWNldHM6IFJlZmVyZW5jZUZhY2V0W107XG59O1xuXG5leHBvcnQgdHlwZSBPYmplY3RQYWdlSGVhZGVyRmFjZXQgPSBSZWZlcmVuY2VGYWNldCB8IENvbGxlY3Rpb25GYWNldDtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0ID0gQ3VzdG9tRWxlbWVudDxPYmplY3RQYWdlSGVhZGVyRmFjZXQ+ICYge1xuXHRmcmFnbWVudE5hbWU/OiBzdHJpbmc7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRzdWJUaXRsZT86IHN0cmluZztcblx0c3Rhc2hlZD86IGJvb2xlYW47XG5cdGJpbmRpbmc/OiBzdHJpbmc7XG5cdHRlbXBsYXRlRWRpdD86IHN0cmluZztcbn07XG5cbi8vIGVuZHJlZ2lvbiBkZWZpbml0aW9uc1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIENvbGxlY3QgQWxsIEhlYWRlciBGYWNldHM6IEN1c3RvbSAodmlhIE1hbmlmZXN0KSBhbmQgQW5ub3RhdGlvbiBCYXNlZCAodmlhIE1ldGFtb2RlbClcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIFJldHJpZXZlIGhlYWRlciBmYWNldHMgZnJvbSBhbm5vdGF0aW9ucy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBIZWFkZXIgZmFjZXRzIGZyb20gYW5ub3RhdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlckZhY2V0c0Zyb21Bbm5vdGF0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBPYmplY3RQYWdlSGVhZGVyRmFjZXRbXSB7XG5cdGNvbnN0IGhlYWRlckZhY2V0czogT2JqZWN0UGFnZUhlYWRlckZhY2V0W10gPSBbXTtcblx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJGYWNldHM/LmZvckVhY2goKGZhY2V0KSA9PiB7XG5cdFx0Y29uc3QgaGVhZGVyRmFjZXQ6IE9iamVjdFBhZ2VIZWFkZXJGYWNldCB8IHVuZGVmaW5lZCA9IGNyZWF0ZUhlYWRlckZhY2V0KGZhY2V0LCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRpZiAoaGVhZGVyRmFjZXQpIHtcblx0XHRcdGhlYWRlckZhY2V0cy5wdXNoKGhlYWRlckZhY2V0KTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBoZWFkZXJGYWNldHM7XG59XG5cbi8qKlxuICogUmV0cmlldmUgY3VzdG9tIGhlYWRlciBmYWNldHMgZnJvbSBtYW5pZmVzdC5cbiAqIEBwYXJhbSBtYW5pZmVzdEN1c3RvbUhlYWRlckZhY2V0c1xuICogQHJldHVybnMgSGVhZGVyRmFjZXRzIGZyb20gbWFuaWZlc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdChcblx0bWFuaWZlc3RDdXN0b21IZWFkZXJGYWNldHM6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEhlYWRlckZhY2V0PlxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0PiB7XG5cdGNvbnN0IGN1c3RvbUhlYWRlckZhY2V0czogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0PiA9IHt9O1xuXG5cdE9iamVjdC5rZXlzKG1hbmlmZXN0Q3VzdG9tSGVhZGVyRmFjZXRzKS5mb3JFYWNoKChtYW5pZmVzdEhlYWRlckZhY2V0S2V5KSA9PiB7XG5cdFx0Y29uc3QgY3VzdG9tSGVhZGVyRmFjZXQ6IE1hbmlmZXN0SGVhZGVyRmFjZXQgPSBtYW5pZmVzdEN1c3RvbUhlYWRlckZhY2V0c1ttYW5pZmVzdEhlYWRlckZhY2V0S2V5XTtcblx0XHRjdXN0b21IZWFkZXJGYWNldHNbbWFuaWZlc3RIZWFkZXJGYWNldEtleV0gPSBjcmVhdGVDdXN0b21IZWFkZXJGYWNldChjdXN0b21IZWFkZXJGYWNldCwgbWFuaWZlc3RIZWFkZXJGYWNldEtleSk7XG5cdH0pO1xuXG5cdHJldHVybiBjdXN0b21IZWFkZXJGYWNldHM7XG59XG5cbi8qKlxuICogUmV0cmlldmUgc3Rhc2hlZCBzZXR0aW5ncyBmb3IgaGVhZGVyIGZhY2V0cyBmcm9tIG1hbmlmZXN0LlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb25GYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBTdGFzaGVkIHNldHRpbmcgZm9yIGhlYWRlciBmYWNldCBvciBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXQoXG5cdGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBib29sZWFuIHtcblx0Ly8gV2hlbiBhIEhlYWRlckZhY2V0IGlzIG5lc3RlZCBpbnNpZGUgYSBDb2xsZWN0aW9uRmFjZXQsIHN0YXNoaW5nIGlzIG5vdCBzdXBwb3J0ZWRcblx0aWYgKFxuXHRcdGZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQgJiZcblx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXRcblx0KSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGNvbnN0IGhlYWRlckZhY2V0SUQgPSBjcmVhdGVJZEZvckFubm90YXRpb24oZmFjZXREZWZpbml0aW9uKSA/PyBcIlwiO1xuXHRjb25zdCBoZWFkZXJGYWNldHNDb250cm9sQ29uZmlnID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRIZWFkZXJGYWNldHMoKTtcblx0Y29uc3Qgc3Rhc2hlZFNldHRpbmcgPSBoZWFkZXJGYWNldHNDb250cm9sQ29uZmlnW2hlYWRlckZhY2V0SURdPy5zdGFzaGVkO1xuXHRyZXR1cm4gc3Rhc2hlZFNldHRpbmcgPT09IHRydWU7XG59XG5cbi8qKlxuICogUmV0cmlldmUgZmxleGliaWxpdHkgZGVzaWdudGltZSBzZXR0aW5ncyBmcm9tIG1hbmlmZXN0LlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb25GYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBEZXNpZ250aW1lIHNldHRpbmcgb3IgZGVmYXVsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldChcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEZsZXhEZXNpZ25UaW1lVHlwZSB7XG5cdGxldCBkZXNpZ25UaW1lTWV0YWRhdGE6IEZsZXhEZXNpZ25UaW1lVHlwZSA9IEZsZXhEZXNpZ25UaW1lVHlwZS5EZWZhdWx0O1xuXHRjb25zdCBoZWFkZXJGYWNldElEID0gY3JlYXRlSWRGb3JBbm5vdGF0aW9uKGZhY2V0RGVmaW5pdGlvbik7XG5cblx0Ly8gRm9yIEhlYWRlckZhY2V0cyBuZXN0ZWQgaW5zaWRlIENvbGxlY3Rpb25GYWNldCBSVEEgc2hvdWxkIGJlIGRpc2FibGVkLCB0aGVyZWZvcmUgc2V0IHRvIFwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0aWYgKFxuXHRcdGZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQgJiZcblx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXRcblx0KSB7XG5cdFx0ZGVzaWduVGltZU1ldGFkYXRhID0gRmxleERlc2lnblRpbWVUeXBlLk5vdEFkYXB0YWJsZVRyZWU7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgaGVhZGVyRmFjZXRzQ29udHJvbENvbmZpZyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0SGVhZGVyRmFjZXRzKCk7XG5cdFx0aWYgKGhlYWRlckZhY2V0SUQpIHtcblx0XHRcdGNvbnN0IGRlc2lnblRpbWUgPSBoZWFkZXJGYWNldHNDb250cm9sQ29uZmlnW2hlYWRlckZhY2V0SURdPy5mbGV4U2V0dGluZ3M/LmRlc2lnbnRpbWU7XG5cdFx0XHRzd2l0Y2ggKGRlc2lnblRpbWUpIHtcblx0XHRcdFx0Y2FzZSBGbGV4RGVzaWduVGltZVR5cGUuTm90QWRhcHRhYmxlOlxuXHRcdFx0XHRjYXNlIEZsZXhEZXNpZ25UaW1lVHlwZS5Ob3RBZGFwdGFibGVUcmVlOlxuXHRcdFx0XHRjYXNlIEZsZXhEZXNpZ25UaW1lVHlwZS5Ob3RBZGFwdGFibGVWaXNpYmlsaXR5OlxuXHRcdFx0XHRcdGRlc2lnblRpbWVNZXRhZGF0YSA9IGRlc2lnblRpbWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkZXNpZ25UaW1lTWV0YWRhdGE7XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gQ29udmVydCAmIEJ1aWxkIEFubm90YXRpb24gQmFzZWQgSGVhZGVyIEZhY2V0c1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5mdW5jdGlvbiBjcmVhdGVSZWZlcmVuY2VIZWFkZXJGYWNldChcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlZmVyZW5jZUZhY2V0IHwgdW5kZWZpbmVkIHtcblx0aWYgKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQgJiYgZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgIT09IHRydWUpIHtcblx0XHRjb25zdCBoZWFkZXJGYWNldElEID0gZ2V0SGVhZGVyRmFjZXRJRChmYWNldERlZmluaXRpb24pLFxuXHRcdFx0Z2V0SGVhZGVyRmFjZXRLZXkgPSAoZmFjZXREZWZpbml0aW9uVG9DaGVjazogRmFjZXRUeXBlcywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdFx0XHRcdHJldHVybiBmYWNldERlZmluaXRpb25Ub0NoZWNrLklEPy50b1N0cmluZygpIHx8IGZhY2V0RGVmaW5pdGlvblRvQ2hlY2suTGFiZWw/LnRvU3RyaW5nKCkgfHwgZmFsbGJhY2s7XG5cdFx0XHR9LFxuXHRcdFx0dGFyZ2V0QW5ub3RhdGlvblZhbHVlID0gZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZSxcblx0XHRcdHRhcmdldEFubm90YXRpb25UeXBlID0gZ2V0VGFyZ2V0QW5ub3RhdGlvblR5cGUoZmFjZXREZWZpbml0aW9uKTtcblxuXHRcdGxldCBoZWFkZXJGb3JtRGF0YTogSGVhZGVyRm9ybURhdGEgfCB1bmRlZmluZWQ7XG5cdFx0bGV0IGhlYWRlckRhdGFQb2ludERhdGE6IEhlYWRlckRhdGFQb2ludERhdGEgfCB1bmRlZmluZWQ7XG5cblx0XHRzd2l0Y2ggKHRhcmdldEFubm90YXRpb25UeXBlKSB7XG5cdFx0XHRjYXNlIFRhcmdldEFubm90YXRpb25UeXBlLkZpZWxkR3JvdXA6XG5cdFx0XHRcdGhlYWRlckZvcm1EYXRhID0gZ2V0RmllbGRHcm91cEZvcm1EYXRhKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFRhcmdldEFubm90YXRpb25UeXBlLkRhdGFQb2ludDpcblx0XHRcdFx0aGVhZGVyRGF0YVBvaW50RGF0YSA9IGdldERhdGFQb2ludERhdGEoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHQvLyBUb0RvOiBIYW5kbGUgb3RoZXIgY2FzZXNcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGlmIChmYWNldERlZmluaXRpb24uVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5DaGFydCAmJiBpc0Fubm90YXRpb25GaWVsZFN0YXRpY2FsbHlIaWRkZW4oZmFjZXREZWZpbml0aW9uKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogSGVhZGVyRmFjZXRUeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdGZhY2V0VHlwZTogRmFjZXRUeXBlLlJlZmVyZW5jZSxcblx0XHRcdFx0aWQ6IGhlYWRlckZhY2V0SUQsXG5cdFx0XHRcdGNvbnRhaW5lcklkOiBnZXRIZWFkZXJGYWNldENvbnRhaW5lcklEKGZhY2V0RGVmaW5pdGlvbiksXG5cdFx0XHRcdGtleTogZ2V0SGVhZGVyRmFjZXRLZXkoZmFjZXREZWZpbml0aW9uLCBoZWFkZXJGYWNldElEKSxcblx0XHRcdFx0ZmxleFNldHRpbmdzOiB7XG5cdFx0XHRcdFx0ZGVzaWdudGltZTogZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHN0YXNoZWQ6IGdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZShmYWNldERlZmluaXRpb24pKSxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGAke2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKX0vYCxcblx0XHRcdFx0dGFyZ2V0QW5ub3RhdGlvblZhbHVlLFxuXHRcdFx0XHR0YXJnZXRBbm5vdGF0aW9uVHlwZSxcblx0XHRcdFx0aGVhZGVyRm9ybURhdGEsXG5cdFx0XHRcdGhlYWRlckRhdGFQb2ludERhdGFcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29sbGVjdGlvbkhlYWRlckZhY2V0KFxuXHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IENvbGxlY3Rpb25GYWNldCB8IHVuZGVmaW5lZCB7XG5cdGlmIChjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQpIHtcblx0XHRjb25zdCBmYWNldHM6IFJlZmVyZW5jZUZhY2V0W10gPSBbXSxcblx0XHRcdGhlYWRlckZhY2V0SUQgPSBnZXRIZWFkZXJGYWNldElEKGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24pLFxuXHRcdFx0Z2V0SGVhZGVyRmFjZXRLZXkgPSAoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0XHRcdFx0cmV0dXJuIGZhY2V0RGVmaW5pdGlvbi5JRD8udG9TdHJpbmcoKSB8fCBmYWNldERlZmluaXRpb24uTGFiZWw/LnRvU3RyaW5nKCkgfHwgZmFsbGJhY2s7XG5cdFx0XHR9O1xuXG5cdFx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbi5GYWNldHMuZm9yRWFjaCgoZmFjZXREZWZpbml0aW9uKSA9PiB7XG5cdFx0XHRjb25zdCBmYWNldDogUmVmZXJlbmNlRmFjZXQgfCB1bmRlZmluZWQgPSBjcmVhdGVSZWZlcmVuY2VIZWFkZXJGYWNldChcblx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKGZhY2V0KSB7XG5cdFx0XHRcdGZhY2V0cy5wdXNoKGZhY2V0KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiBIZWFkZXJGYWNldFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdGZhY2V0VHlwZTogRmFjZXRUeXBlLkNvbGxlY3Rpb24sXG5cdFx0XHRpZDogaGVhZGVyRmFjZXRJRCxcblx0XHRcdGNvbnRhaW5lcklkOiBnZXRIZWFkZXJGYWNldENvbnRhaW5lcklEKGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24pLFxuXHRcdFx0a2V5OiBnZXRIZWFkZXJGYWNldEtleShjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLCBoZWFkZXJGYWNldElEKSxcblx0XHRcdGZsZXhTZXR0aW5nczoge1xuXHRcdFx0XHRkZXNpZ250aW1lOiBnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0KFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdClcblx0XHRcdH0sXG5cdFx0XHRzdGFzaGVkOiBnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldChjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLCBjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZShjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uKSksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKX0vYCxcblx0XHRcdGZhY2V0c1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRBbm5vdGF0aW9uVHlwZShmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMpOiBUYXJnZXRBbm5vdGF0aW9uVHlwZSB7XG5cdGxldCBhbm5vdGF0aW9uVHlwZSA9IFRhcmdldEFubm90YXRpb25UeXBlLk5vbmU7XG5cdGNvbnN0IGFubm90YXRpb25UeXBlTWFwOiBSZWNvcmQ8c3RyaW5nLCBUYXJnZXRBbm5vdGF0aW9uVHlwZT4gPSB7XG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRcIjogVGFyZ2V0QW5ub3RhdGlvblR5cGUuRGF0YVBvaW50LFxuXHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRcIjogVGFyZ2V0QW5ub3RhdGlvblR5cGUuQ2hhcnQsXG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JZGVudGlmaWNhdGlvblwiOiBUYXJnZXRBbm5vdGF0aW9uVHlwZS5JZGVudGlmaWNhdGlvbixcblx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdFwiOiBUYXJnZXRBbm5vdGF0aW9uVHlwZS5Db250YWN0LFxuXHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5BZGRyZXNzXCI6IFRhcmdldEFubm90YXRpb25UeXBlLkFkZHJlc3MsXG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwXCI6IFRhcmdldEFubm90YXRpb25UeXBlLkZpZWxkR3JvdXAsXG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QcmVzZW50YXRpb25WYXJpYW50XCI6IFRhcmdldEFubm90YXRpb25UeXBlLlByZXNlbnRhdGlvblZhcmlhbnRcblx0fTtcblx0Ly8gUmVmZXJlbmNlVVJMRmFjZXQgYW5kIENvbGxlY3Rpb25GYWNldCBkbyBub3QgaGF2ZSBUYXJnZXQgcHJvcGVydHkuXG5cdGlmIChcblx0XHRmYWNldERlZmluaXRpb24uJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZVVSTEZhY2V0ICYmXG5cdFx0ZmFjZXREZWZpbml0aW9uLiRUeXBlICE9PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQgJiZcblx0XHRmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXRcblx0KSB7XG5cdFx0YW5ub3RhdGlvblR5cGUgPSBhbm5vdGF0aW9uVHlwZU1hcFtmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybV0gPz8gVGFyZ2V0QW5ub3RhdGlvblR5cGUuTm9uZTtcblx0fVxuXG5cdHJldHVybiBhbm5vdGF0aW9uVHlwZTtcbn1cblxuZnVuY3Rpb24gZ2V0RmllbGRHcm91cEZvcm1EYXRhKFxuXHRmYWNldERlZmluaXRpb246IFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogSGVhZGVyRm9ybURhdGEge1xuXHQvLyBzcGxpdCBpbiB0aGlzIGZyb20gYW5ub3RhdGlvbiArIGdldEZpZWxkR3JvdXBGcm9tRGVmYXVsdFxuXHRpZiAoIWZhY2V0RGVmaW5pdGlvbikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgRmllbGRHcm91cCBmb3JtIGRhdGEgd2l0aG91dCBmYWNldCBkZWZpbml0aW9uXCIpO1xuXHR9XG5cblx0Y29uc3QgZm9ybUVsZW1lbnRzID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0Z2V0Rm9ybUVsZW1lbnRzRnJvbUFubm90YXRpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Z2V0Rm9ybUVsZW1lbnRzRnJvbU1hbmlmZXN0KGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dClcblx0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGlkOiBnZXRIZWFkZXJGYWNldEZvcm1JRChmYWNldERlZmluaXRpb24pLFxuXHRcdGxhYmVsOiBmYWNldERlZmluaXRpb24uTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0Zm9ybUVsZW1lbnRzXG5cdH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBtYW5pZmVzdC1iYXNlZCBGb3JtRWxlbWVudHMuXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBmYWNldFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0IGZvciB0aGUgZmFjZXRcbiAqIEByZXR1cm5zIEFubm90YXRpb24tYmFzZWQgRm9ybUVsZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGdldEZvcm1FbGVtZW50c0Zyb21Bbm5vdGF0aW9ucyhcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEFubm90YXRpb25Gb3JtRWxlbWVudFtdIHtcblx0Y29uc3QgYW5ub3RhdGlvbkJhc2VkRm9ybUVsZW1lbnRzOiBBbm5vdGF0aW9uRm9ybUVsZW1lbnRbXSA9IFtdO1xuXG5cdC8vIFJlZmVyZW5jZVVSTEZhY2V0IGFuZCBDb2xsZWN0aW9uRmFjZXQgZG8gbm90IGhhdmUgVGFyZ2V0IHByb3BlcnR5LlxuXHRpZiAoZmFjZXREZWZpbml0aW9uLiRUeXBlICE9PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VVUkxGYWNldCAmJiBmYWNldERlZmluaXRpb24uJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldCkge1xuXHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlKTtcblx0XHRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHQoZmFjZXREZWZpbml0aW9uLlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwKT8uRGF0YS5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdGlmIChkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRjb25zdCBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoID0gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZCk7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHxcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCB8fFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGggfHxcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbiB8fFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uKSAmJlxuXHRcdFx0XHRcdCFpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihkYXRhRmllbGQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGFubm90YXRpb25CYXNlZEZvcm1FbGVtZW50cy5wdXNoKHtcblx0XHRcdFx0XHRcdGlzVmFsdWVNdWx0aWxpbmVUZXh0OiBpc011bHRpTGluZVRleHQoZGF0YUZpZWxkLlZhbHVlPy4kdGFyZ2V0KSxcblx0XHRcdFx0XHRcdHR5cGU6IEZvcm1FbGVtZW50VHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihpc1Zpc2libGUoZGF0YUZpZWxkKSksXG5cdFx0XHRcdFx0XHRsYWJlbDogZGF0YUZpZWxkLlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbCB8fCBkYXRhRmllbGQuTGFiZWwsXG5cdFx0XHRcdFx0XHRpZFByZWZpeDogZ2V0SGVhZGVyRmFjZXRGb3JtSUQoZmFjZXREZWZpbml0aW9uLCBkYXRhRmllbGQpLFxuXHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGAke2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKX0vYCxcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdFx0XHRcdCFpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihkYXRhRmllbGQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGFubm90YXRpb25CYXNlZEZvcm1FbGVtZW50cy5wdXNoKHtcblx0XHRcdFx0XHRcdGlzVmFsdWVNdWx0aWxpbmVUZXh0OiBmYWxzZSwgLy8gd2FzIGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VST8uTXVsdGlMaW5lVGV4dD8udmFsdWVPZigpID09PSB0cnVlIGJ1dCB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSBhcyB0aGUgdGFyZ2V0IGNhbm5vdCBoYXZlIHRoYXQgYW5ub3RhdGlvblxuXHRcdFx0XHRcdFx0dHlwZTogRm9ybUVsZW1lbnRUeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZShkYXRhRmllbGQpKSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSB8fCBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0XHRpZFByZWZpeDogZ2V0SGVhZGVyRmFjZXRGb3JtSUQoZmFjZXREZWZpbml0aW9uLCBkYXRhRmllbGQpLFxuXHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGAke2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKX0vYCxcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gYW5ub3RhdGlvbkJhc2VkRm9ybUVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBnZXREYXRhUG9pbnREYXRhKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogSGVhZGVyRGF0YVBvaW50RGF0YSB7XG5cdGxldCB0eXBlID0gSGVhZGVyRGF0YVBvaW50VHlwZS5Db250ZW50O1xuXHRsZXQgc2VtYW50aWNPYmplY3RQYXRoO1xuXHRpZiAoZmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCAmJiAhaXNBbm5vdGF0aW9uRmllbGRTdGF0aWNhbGx5SGlkZGVuKGZhY2V0RGVmaW5pdGlvbikpIHtcblx0XHRpZiAoKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmlzdWFsaXphdGlvbiA9PT0gXCJVSS5WaXN1YWxpemF0aW9uVHlwZS9Qcm9ncmVzc1wiKSB7XG5cdFx0XHR0eXBlID0gSGVhZGVyRGF0YVBvaW50VHlwZS5Qcm9ncmVzc0luZGljYXRvcjtcblx0XHR9IGVsc2UgaWYgKChmYWNldERlZmluaXRpb24uVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludCk/LlZpc3VhbGl6YXRpb24gPT09IFwiVUkuVmlzdWFsaXphdGlvblR5cGUvUmF0aW5nXCIpIHtcblx0XHRcdHR5cGUgPSBIZWFkZXJEYXRhUG9pbnRUeXBlLlJhdGluZ0luZGljYXRvcjtcblx0XHR9XG5cdFx0Y29uc3QgZGF0YVBvaW50ID0gZmFjZXREZWZpbml0aW9uLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQ7XG5cblx0XHRpZiAodHlwZW9mIGRhdGFQb2ludCA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0aWYgKGRhdGFQb2ludD8uVmFsdWU/LiR0YXJnZXQpIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHkgPSBkYXRhUG9pbnQuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0aWYgKHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5TZW1hbnRpY09iamVjdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKHByb3BlcnR5Py5mdWxseVF1YWxpZmllZE5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgdHlwZSwgc2VtYW50aWNPYmplY3RQYXRoIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhbm5vdGF0aW9uLWJhc2VkIGhlYWRlciBmYWNldC5cbiAqIEBwYXJhbSBmYWNldERlZmluaXRpb24gVGhlIGRlZmluaXRpb24gb2YgdGhlIGZhY2V0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGFubm90YXRpb24tYmFzZWQgaGVhZGVyIGZhY2V0XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUhlYWRlckZhY2V0KFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogT2JqZWN0UGFnZUhlYWRlckZhY2V0IHwgdW5kZWZpbmVkIHtcblx0bGV0IGhlYWRlckZhY2V0OiBPYmplY3RQYWdlSGVhZGVyRmFjZXQgfCB1bmRlZmluZWQ7XG5cdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldDpcblx0XHRcdGhlYWRlckZhY2V0ID0gY3JlYXRlUmVmZXJlbmNlSGVhZGVyRmFjZXQoZmFjZXREZWZpbml0aW9uLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdGhlYWRlckZhY2V0ID0gY3JlYXRlQ29sbGVjdGlvbkhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRyZXR1cm4gaGVhZGVyRmFjZXQ7XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gQ29udmVydCAmIEJ1aWxkIE1hbmlmZXN0IEJhc2VkIEhlYWRlciBGYWNldHNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZW5lcmF0ZUJpbmRpbmcocmVxdWVzdEdyb3VwSWQ/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIXJlcXVlc3RHcm91cElkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRjb25zdCBncm91cElkID0gW1wiSGVyb2VzXCIsIFwiRGVjb3JhdGlvblwiLCBcIldvcmtlcnNcIiwgXCJMb25nUnVubmVyc1wiXS5pbmNsdWRlcyhyZXF1ZXN0R3JvdXBJZClcblx0XHQ/IGAkYXV0by4ke3JlcXVlc3RHcm91cElkfWBcblx0XHQ6IHJlcXVlc3RHcm91cElkO1xuXG5cdHJldHVybiBgeyBwYXRoIDogJycsIHBhcmFtZXRlcnMgOiB7ICQkZ3JvdXBJZCA6ICcke2dyb3VwSWR9JyB9IH1gO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIG1hbmlmZXN0IGJhc2VkIGN1c3RvbSBoZWFkZXIgZmFjZXQuXG4gKiBAcGFyYW0gY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0gaGVhZGVyRmFjZXRLZXlcbiAqIEByZXR1cm5zIFRoZSBtYW5pZmVzdCBiYXNlZCBjdXN0b20gaGVhZGVyIGZhY2V0IGNyZWF0ZWRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXQoY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uOiBNYW5pZmVzdEhlYWRlckZhY2V0LCBoZWFkZXJGYWNldEtleTogc3RyaW5nKTogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0IHtcblx0Y29uc3QgY3VzdG9tSGVhZGVyRmFjZXRJRCA9IGdldEN1c3RvbUhlYWRlckZhY2V0SUQoaGVhZGVyRmFjZXRLZXkpO1xuXG5cdGxldCBwb3NpdGlvbjogUG9zaXRpb24gfCB1bmRlZmluZWQgPSBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24ucG9zaXRpb247XG5cdGlmICghcG9zaXRpb24pIHtcblx0XHRwb3NpdGlvbiA9IHtcblx0XHRcdHBsYWNlbWVudDogUGxhY2VtZW50LkFmdGVyXG5cdFx0fTtcblx0fVxuXHQvLyBUT0RPIGZvciBhbiBub24gYW5ub3RhdGlvbiBmcmFnbWVudCB0aGUgbmFtZSBpcyBtYW5kYXRvcnkgLT4gTm90IGNoZWNrZWRcblx0cmV0dXJuIHtcblx0XHRmYWNldFR5cGU6IEZhY2V0VHlwZS5SZWZlcmVuY2UsXG5cdFx0dHlwZTogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnR5cGUsXG5cdFx0aWQ6IGN1c3RvbUhlYWRlckZhY2V0SUQsXG5cdFx0Y29udGFpbmVySWQ6IGN1c3RvbUhlYWRlckZhY2V0SUQsXG5cdFx0a2V5OiBoZWFkZXJGYWNldEtleSxcblx0XHRwb3NpdGlvbjogcG9zaXRpb24sXG5cdFx0dmlzaWJsZTogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnZpc2libGUsXG5cdFx0ZnJhZ21lbnROYW1lOiBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24udGVtcGxhdGUgfHwgY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLm5hbWUsXG5cdFx0dGl0bGU6IGN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi50aXRsZSxcblx0XHRzdWJUaXRsZTogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnN1YlRpdGxlLFxuXHRcdHN0YXNoZWQ6IGN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi5zdGFzaGVkIHx8IGZhbHNlLFxuXHRcdGZsZXhTZXR0aW5nczogeyAuLi57IGRlc2lnbnRpbWU6IEZsZXhEZXNpZ25UaW1lVHlwZS5EZWZhdWx0IH0sIC4uLmN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi5mbGV4U2V0dGluZ3MgfSxcblx0XHRiaW5kaW5nOiBnZW5lcmF0ZUJpbmRpbmcoY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnJlcXVlc3RHcm91cElkKSxcblx0XHR0ZW1wbGF0ZUVkaXQ6IGN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi50ZW1wbGF0ZUVkaXRcblx0fTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBNkJBO0VBQ0E7RUFDQTtFQUNBO0VBQUEsSUFFWUEsZUFBZSwwQkFBZkEsZUFBZTtJQUFmQSxlQUFlO0lBQWZBLGVBQWU7SUFBQSxPQUFmQSxlQUFlO0VBQUE7RUFBQUMsUUFBQSxDQUFBRCxlQUFBLEdBQUFBLGVBQUE7RUFBQSxJQUtmRSxTQUFTLDBCQUFUQSxTQUFTO0lBQVRBLFNBQVM7SUFBVEEsU0FBUztJQUFBLE9BQVRBLFNBQVM7RUFBQTtFQUFBRCxRQUFBLENBQUFDLFNBQUEsR0FBQUEsU0FBQTtFQUFBLElBS1RDLGtCQUFrQiwwQkFBbEJBLGtCQUFrQjtJQUFsQkEsa0JBQWtCO0lBQWxCQSxrQkFBa0I7SUFBbEJBLGtCQUFrQjtJQUFsQkEsa0JBQWtCO0lBQUEsT0FBbEJBLGtCQUFrQjtFQUFBO0VBQUFGLFFBQUEsQ0FBQUUsa0JBQUEsR0FBQUEsa0JBQUE7RUFBQSxJQWlCekJDLG1CQUFtQiwwQkFBbkJBLG1CQUFt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
|