@sapui5/sap.fe.core 1.110.0 → 1.111.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/README.md +0 -4
- package/package.json +2 -23
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime-dbg.js +182 -0
- package/src/sap/fe/core/ActionRuntime.js +3 -181
- package/src/sap/fe/core/ActionRuntime.js.map +1 -0
- package/src/sap/fe/core/ActionRuntime.ts +3 -5
- package/src/sap/fe/core/AppComponent-dbg.js +435 -0
- package/src/sap/fe/core/AppComponent.js +3 -439
- package/src/sap/fe/core/AppComponent.js.map +1 -0
- package/src/sap/fe/core/AppComponent.ts +0 -3
- package/src/sap/fe/core/AppStateHandler-dbg.js +200 -0
- package/src/sap/fe/core/AppStateHandler.js +3 -227
- package/src/sap/fe/core/AppStateHandler.js.map +1 -0
- package/src/sap/fe/core/BaseController-dbg.js +76 -0
- package/src/sap/fe/core/BaseController.js +3 -73
- package/src/sap/fe/core/BaseController.js.map +1 -0
- package/src/sap/fe/core/CommonUtils-dbg.js +2135 -0
- package/src/sap/fe/core/CommonUtils.js +3 -2296
- package/src/sap/fe/core/CommonUtils.js.map +1 -0
- package/src/sap/fe/core/CommonUtils.ts +34 -28
- package/src/sap/fe/core/ExtensionAPI-dbg.js +273 -0
- package/src/sap/fe/core/ExtensionAPI.js +3 -280
- package/src/sap/fe/core/ExtensionAPI.js.map +1 -0
- package/src/sap/fe/core/PageController-dbg.js +203 -0
- package/src/sap/fe/core/PageController.js +3 -200
- package/src/sap/fe/core/PageController.js.map +1 -0
- package/src/sap/fe/core/TemplateComponent-dbg.js +218 -0
- package/src/sap/fe/core/TemplateComponent.js +3 -216
- package/src/sap/fe/core/TemplateComponent.js.map +1 -0
- package/src/sap/fe/core/TemplateModel-dbg.js +75 -0
- package/src/sap/fe/core/TemplateModel.js +3 -72
- package/src/sap/fe/core/TemplateModel.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/AttributeModel-dbg.js +57 -0
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +3 -54
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock-dbg.js +410 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +11 -355
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +118 -52
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter-dbg.js +14 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +3 -11
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment-dbg.js +44 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js +3 -40
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.ts +3 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime-dbg.js +932 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +16 -1292
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +40 -42
- package/src/sap/fe/core/buildingBlocks/TraceInfo-dbg.js +434 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +3 -481
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +5 -5
- package/src/sap/fe/core/controllerextensions/BusyLocker-dbg.js +92 -0
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +3 -89
- package/src/sap/fe/core/controllerextensions/BusyLocker.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +1659 -0
- package/src/sap/fe/core/controllerextensions/EditFlow.js +3 -1868
- package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +180 -125
- package/src/sap/fe/core/controllerextensions/Feedback-dbg.js +70 -0
- package/src/sap/fe/core/controllerextensions/Feedback.js +3 -67
- package/src/sap/fe/core/controllerextensions/Feedback.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation-dbg.js +83 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +3 -84
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +6 -8
- package/src/sap/fe/core/controllerextensions/InternalEditFlow-dbg.js +711 -0
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +3 -707
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +79 -48
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +791 -0
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +3 -696
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +107 -7
- package/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +984 -0
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +3 -996
- package/src/sap/fe/core/controllerextensions/InternalRouting.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +43 -23
- package/src/sap/fe/core/controllerextensions/KPIManagement-dbg.js +1013 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +3 -1011
- package/src/sap/fe/core/controllerextensions/KPIManagement.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +12 -10
- package/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +135 -0
- package/src/sap/fe/core/controllerextensions/MassEdit.js +3 -133
- package/src/sap/fe/core/controllerextensions/MassEdit.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +1 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler-dbg.js +221 -0
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +3 -224
- package/src/sap/fe/core/controllerextensions/MessageHandler.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/PageReady-dbg.js +254 -0
- package/src/sap/fe/core/controllerextensions/PageReady.js +3 -279
- package/src/sap/fe/core/controllerextensions/PageReady.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/PageReady.ts +2 -2
- package/src/sap/fe/core/controllerextensions/Paginator-dbg.js +169 -0
- package/src/sap/fe/core/controllerextensions/Paginator.js +3 -174
- package/src/sap/fe/core/controllerextensions/Paginator.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/Paginator.ts +4 -5
- package/src/sap/fe/core/controllerextensions/Placeholder-dbg.js +132 -0
- package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -130
- package/src/sap/fe/core/controllerextensions/Placeholder.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/Routing-dbg.js +138 -0
- package/src/sap/fe/core/controllerextensions/Routing.js +3 -135
- package/src/sap/fe/core/controllerextensions/Routing.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/RoutingListener-dbg.js +10 -0
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +3 -7
- package/src/sap/fe/core/controllerextensions/RoutingListener.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/Share-dbg.js +317 -0
- package/src/sap/fe/core/controllerextensions/Share.js +3 -356
- package/src/sap/fe/core/controllerextensions/Share.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/Share.ts +6 -1
- package/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +553 -0
- package/src/sap/fe/core/controllerextensions/SideEffects.js +3 -651
- package/src/sap/fe/core/controllerextensions/SideEffects.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +411 -553
- package/src/sap/fe/core/controllerextensions/ViewState-dbg.js +903 -0
- package/src/sap/fe/core/controllerextensions/ViewState.js +3 -967
- package/src/sap/fe/core/controllerextensions/ViewState.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/ViewState.ts +90 -41
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase-dbg.js +99 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +3 -96
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync-dbg.js +314 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +3 -336
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon-dbg.js +152 -0
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +3 -161
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +243 -0
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +3 -302
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block-dbg.js +252 -0
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +6 -0
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +188 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +1196 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +3 -1479
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +239 -289
- package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +689 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +3 -785
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +134 -142
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup-dbg.js +236 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -287
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations-dbg.js +1422 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +3 -1598
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +40 -24
- package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +185 -0
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +3 -214
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +4 -5
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +1219 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +3 -1213
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher-dbg.js +304 -0
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +3 -339
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason-dbg.js +15 -0
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +6 -0
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.ts +6 -0
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy-dbg.js +798 -0
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +3 -799
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js.map +1 -0
- package/src/sap/fe/core/controls/Any-dbg.js +32 -0
- package/src/sap/fe/core/controls/Any.js +3 -29
- package/src/sap/fe/core/controls/Any.js.map +1 -0
- package/src/sap/fe/core/controls/AnyElement-dbg.js +29 -0
- package/src/sap/fe/core/controls/AnyElement.js +3 -26
- package/src/sap/fe/core/controls/AnyElement.js.map +1 -0
- package/src/sap/fe/core/controls/CommandExecution-dbg.js +72 -0
- package/src/sap/fe/core/controls/CommandExecution.js +3 -69
- package/src/sap/fe/core/controls/CommandExecution.js.map +1 -0
- package/src/sap/fe/core/controls/ConditionalWrapper-dbg.js +151 -0
- package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -148
- package/src/sap/fe/core/controls/ConditionalWrapper.js.map +1 -0
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper-dbg.js +330 -0
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +3 -328
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js.map +1 -0
- package/src/sap/fe/core/controls/CustomQuickViewPage-dbg.js +126 -0
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -124
- package/src/sap/fe/core/controls/CustomQuickViewPage.js.map +1 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +170 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -171
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js.map +1 -0
- package/src/sap/fe/core/controls/FieldWrapper-dbg.js +194 -0
- package/src/sap/fe/core/controls/FieldWrapper.js +3 -191
- package/src/sap/fe/core/controls/FieldWrapper.js.map +1 -0
- package/src/sap/fe/core/controls/FileWrapper-dbg.js +280 -0
- package/src/sap/fe/core/controls/FileWrapper.js +3 -277
- package/src/sap/fe/core/controls/FileWrapper.js.map +1 -0
- package/src/sap/fe/core/controls/FilterBar-dbg.js +167 -0
- package/src/sap/fe/core/controls/FilterBar.js +3 -166
- package/src/sap/fe/core/controls/FilterBar.js.map +1 -0
- package/src/sap/fe/core/controls/FormElementWrapper-dbg.js +92 -0
- package/src/sap/fe/core/controls/FormElementWrapper.js +3 -89
- package/src/sap/fe/core/controls/FormElementWrapper.js.map +1 -0
- package/src/sap/fe/core/controls/MassEditSelect-dbg.js +33 -0
- package/src/sap/fe/core/controls/MassEditSelect.js +3 -30
- package/src/sap/fe/core/controls/MassEditSelect.js.map +1 -0
- package/src/sap/fe/core/controls/MultiValueParameterDelegate-dbg.js +37 -0
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -34
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js.map +1 -0
- package/src/sap/fe/core/controls/filterbar/FilterContainer-dbg.js +119 -0
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +3 -121
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js.map +1 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +267 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +3 -264
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js.map +1 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer-dbg.js +150 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -150
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js.map +1 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +310 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -307
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js.map +1 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +1 -1
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers-dbg.js +491 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +3 -504
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js.map +1 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +2 -2
- package/src/sap/fe/core/converters/ConverterContext-dbg.js +403 -0
- package/src/sap/fe/core/converters/ConverterContext.js +3 -406
- package/src/sap/fe/core/converters/ConverterContext.js.map +1 -0
- package/src/sap/fe/core/converters/ManifestSettings-dbg.js +88 -0
- package/src/sap/fe/core/converters/ManifestSettings.js +3 -84
- package/src/sap/fe/core/converters/ManifestSettings.js.map +1 -0
- package/src/sap/fe/core/converters/ManifestSettings.ts +3 -1
- package/src/sap/fe/core/converters/ManifestWrapper-dbg.js +402 -0
- package/src/sap/fe/core/converters/ManifestWrapper.js +3 -406
- package/src/sap/fe/core/converters/ManifestWrapper.js.map +1 -0
- package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +1161 -0
- package/src/sap/fe/core/converters/MetaModelConverter.js +3 -1225
- package/src/sap/fe/core/converters/MetaModelConverter.js.map +1 -0
- package/src/sap/fe/core/converters/MetaModelConverter.ts +193 -199
- package/src/sap/fe/core/converters/TemplateConverter-dbg.js +89 -0
- package/src/sap/fe/core/converters/TemplateConverter.js +3 -86
- package/src/sap/fe/core/converters/TemplateConverter.js.map +1 -0
- package/src/sap/fe/core/converters/annotations/DataField-dbg.js +396 -0
- package/src/sap/fe/core/converters/annotations/DataField.js +3 -394
- package/src/sap/fe/core/converters/annotations/DataField.js.map +1 -0
- package/src/sap/fe/core/converters/annotations/DataField.ts +5 -5
- package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +1948 -0
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +3 -1868
- package/src/sap/fe/core/converters/common/AnnotationConverter.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/Action-dbg.js +424 -0
- package/src/sap/fe/core/converters/controls/Common/Action.js +3 -446
- package/src/sap/fe/core/converters/controls/Common/Action.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/Action.ts +31 -14
- package/src/sap/fe/core/converters/controls/Common/Chart-dbg.js +276 -0
- package/src/sap/fe/core/converters/controls/Common/Chart.js +3 -260
- package/src/sap/fe/core/converters/controls/Common/Chart.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +52 -7
- package/src/sap/fe/core/converters/controls/Common/Criticality-dbg.js +42 -0
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -39
- package/src/sap/fe/core/converters/controls/Common/Criticality.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/DataVisualization-dbg.js +247 -0
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -242
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +1 -1
- package/src/sap/fe/core/converters/controls/Common/Form-dbg.js +229 -0
- package/src/sap/fe/core/converters/controls/Common/Form.js +3 -234
- package/src/sap/fe/core/converters/controls/Common/Form.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +374 -0
- package/src/sap/fe/core/converters/controls/Common/KPI.js +3 -371
- package/src/sap/fe/core/converters/controls/Common/KPI.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +2596 -0
- package/src/sap/fe/core/converters/controls/Common/Table.js +3 -2527
- package/src/sap/fe/core/converters/controls/Common/Table.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/Table.ts +214 -77
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +522 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +3 -527
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +51 -50
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +786 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +3 -845
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js.map +1 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +0 -64
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +291 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +3 -316
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js.map +1 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +30 -12
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar-dbg.js +56 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +3 -53
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js.map +1 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet-dbg.js +438 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -431
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js.map +1 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection-dbg.js +597 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +3 -630
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js.map +1 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +1 -1
- package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +204 -0
- package/src/sap/fe/core/converters/helpers/Aggregation.js +3 -204
- package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/BindingHelper-dbg.js +100 -0
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -99
- package/src/sap/fe/core/converters/helpers/BindingHelper.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/ConfigurableObject-dbg.js +199 -0
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +3 -199
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/DataFieldHelper-dbg.js +143 -0
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +3 -140
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +2 -1
- package/src/sap/fe/core/converters/helpers/ID-dbg.js +92 -0
- package/src/sap/fe/core/converters/helpers/ID.js +3 -89
- package/src/sap/fe/core/converters/helpers/ID.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/IssueManager-dbg.js +62 -0
- package/src/sap/fe/core/converters/helpers/IssueManager.js +3 -59
- package/src/sap/fe/core/converters/helpers/IssueManager.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/Key-dbg.js +62 -0
- package/src/sap/fe/core/converters/helpers/Key.js +3 -59
- package/src/sap/fe/core/converters/helpers/Key.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper-dbg.js +80 -0
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +3 -77
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js.map +1 -0
- package/src/sap/fe/core/converters/objectPage/FormMenuActions-dbg.js +142 -0
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +3 -139
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js.map +1 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +406 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +3 -422
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js.map +1 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +132 -111
- package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +557 -0
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +3 -589
- package/src/sap/fe/core/converters/templates/ListReportConverter.js.map +1 -0
- package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +474 -0
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +3 -477
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js.map +1 -0
- package/src/sap/fe/core/designtime/AppComponent-dbg.designtime.js +103 -0
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -100
- package/src/sap/fe/core/designtime/AppComponent.designtime.js.map +1 -0
- package/src/sap/fe/core/designtime/library-preload.designtime.js +7 -0
- package/src/sap/fe/core/designtime/library-preload.designtime.js.map +1 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter-dbg.js +95 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +3 -92
- package/src/sap/fe/core/formatters/CollaborationFormatter.js.map +1 -0
- package/src/sap/fe/core/formatters/FPMFormatter-dbg.js +46 -0
- package/src/sap/fe/core/formatters/FPMFormatter.js +3 -44
- package/src/sap/fe/core/formatters/FPMFormatter.js.map +1 -0
- package/src/sap/fe/core/formatters/FPMFormatter.ts +3 -2
- package/src/sap/fe/core/formatters/FiscalFormat-dbg.js +343 -0
- package/src/sap/fe/core/formatters/FiscalFormat.js +6 -0
- package/src/sap/fe/core/formatters/FiscalFormat.js.map +1 -0
- package/src/sap/fe/core/formatters/FiscalFormat.ts +319 -0
- package/src/sap/fe/core/formatters/KPIFormatter-dbg.js +86 -0
- package/src/sap/fe/core/formatters/KPIFormatter.js +3 -83
- package/src/sap/fe/core/formatters/KPIFormatter.js.map +1 -0
- package/src/sap/fe/core/formatters/StandardFormatter-dbg.js +80 -0
- package/src/sap/fe/core/formatters/StandardFormatter.js +3 -78
- package/src/sap/fe/core/formatters/StandardFormatter.js.map +1 -0
- package/src/sap/fe/core/formatters/TableFormatter-dbg.js +276 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +3 -275
- package/src/sap/fe/core/formatters/TableFormatter.js.map +1 -0
- package/src/sap/fe/core/formatters/TableFormatter.ts +1 -1
- package/src/sap/fe/core/formatters/TableFormatterTypes-dbg.js +20 -0
- package/src/sap/fe/core/formatters/TableFormatterTypes.js +3 -17
- package/src/sap/fe/core/formatters/TableFormatterTypes.js.map +1 -0
- package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +172 -0
- package/src/sap/fe/core/formatters/ValueFormatter.js +3 -161
- package/src/sap/fe/core/formatters/ValueFormatter.js.map +1 -0
- package/src/sap/fe/core/formatters/ValueFormatter.ts +25 -8
- package/src/sap/fe/core/fpm/Component-dbg.js +94 -0
- package/src/sap/fe/core/fpm/Component.js +3 -91
- package/src/sap/fe/core/fpm/Component.js.map +1 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AnnotationEnum-dbg.js +30 -0
- package/src/sap/fe/core/helpers/AnnotationEnum.js +3 -36
- package/src/sap/fe/core/helpers/AnnotationEnum.js.map +1 -0
- package/src/sap/fe/core/helpers/AppStartupHelper-dbg.js +334 -0
- package/src/sap/fe/core/helpers/AppStartupHelper.js +3 -335
- package/src/sap/fe/core/helpers/AppStartupHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +1739 -0
- package/src/sap/fe/core/helpers/BindingToolkit.js +3 -1611
- package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -0
- package/src/sap/fe/core/helpers/BindingToolkit.ts +277 -97
- package/src/sap/fe/core/helpers/ClassSupport-dbg.js +421 -0
- package/src/sap/fe/core/helpers/ClassSupport.js +3 -420
- package/src/sap/fe/core/helpers/ClassSupport.js.map +1 -0
- package/src/sap/fe/core/helpers/ClassSupport.ts +13 -15
- package/src/sap/fe/core/helpers/DeleteHelper-dbg.js +526 -0
- package/src/sap/fe/core/helpers/DeleteHelper.js +3 -618
- package/src/sap/fe/core/helpers/DeleteHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/DeleteHelper.ts +116 -134
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper-dbg.js +55 -0
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +3 -52
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/EditState-dbg.js +80 -0
- package/src/sap/fe/core/helpers/EditState.js +3 -77
- package/src/sap/fe/core/helpers/EditState.js.map +1 -0
- package/src/sap/fe/core/helpers/ExcelFormatHelper-dbg.js +55 -0
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +3 -52
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/FPMHelper-dbg.js +55 -0
- package/src/sap/fe/core/helpers/FPMHelper.js +3 -52
- package/src/sap/fe/core/helpers/FPMHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/KeepAliveHelper-dbg.js +180 -0
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +3 -177
- package/src/sap/fe/core/helpers/KeepAliveHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes-dbg.js +28 -0
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +3 -25
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js.map +1 -0
- package/src/sap/fe/core/helpers/LoaderUtils-dbg.js +29 -0
- package/src/sap/fe/core/helpers/LoaderUtils.js +3 -30
- package/src/sap/fe/core/helpers/LoaderUtils.js.map +1 -0
- package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +1229 -0
- package/src/sap/fe/core/helpers/MassEditHelper.js +3 -1309
- package/src/sap/fe/core/helpers/MassEditHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/MassEditHelper.ts +6 -6
- package/src/sap/fe/core/helpers/MessageStrip-dbg.js +65 -0
- package/src/sap/fe/core/helpers/MessageStrip.js +3 -62
- package/src/sap/fe/core/helpers/MessageStrip.js.map +1 -0
- package/src/sap/fe/core/helpers/ModelHelper-dbg.js +489 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +3 -503
- package/src/sap/fe/core/helpers/ModelHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/ModelHelper.ts +13 -36
- package/src/sap/fe/core/helpers/PasteHelper-dbg.js +174 -0
- package/src/sap/fe/core/helpers/PasteHelper.js +3 -185
- package/src/sap/fe/core/helpers/PasteHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +371 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +3 -368
- package/src/sap/fe/core/helpers/SemanticDateOperators.js.map +1 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper-dbg.js +70 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -67
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/SideEffectsHelper-dbg.js +141 -0
- package/src/sap/fe/core/helpers/SideEffectsHelper.js +3 -137
- package/src/sap/fe/core/helpers/SideEffectsHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/SideEffectsHelper.ts +3 -2
- package/src/sap/fe/core/helpers/StableIdHelper-dbg.js +204 -0
- package/src/sap/fe/core/helpers/StableIdHelper.js +3 -208
- package/src/sap/fe/core/helpers/StableIdHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/Synchronization-dbg.js +35 -0
- package/src/sap/fe/core/helpers/Synchronization.js +3 -33
- package/src/sap/fe/core/helpers/Synchronization.js.map +1 -0
- package/src/sap/fe/core/helpers/ToES6Promise-dbg.js +29 -0
- package/src/sap/fe/core/helpers/ToES6Promise.js +3 -26
- package/src/sap/fe/core/helpers/ToES6Promise.js.map +1 -0
- package/src/sap/fe/core/helpers/TypeGuards-dbg.js +20 -0
- package/src/sap/fe/core/helpers/TypeGuards.js +3 -19
- package/src/sap/fe/core/helpers/TypeGuards.js.map +1 -0
- package/src/sap/fe/core/helpers/TypeGuards.ts +5 -1
- package/src/sap/fe/core/jsx-runtime/Fragment-dbg.js +14 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.js +3 -11
- package/src/sap/fe/core/jsx-runtime/Fragment.js.map +1 -0
- package/src/sap/fe/core/jsx-runtime/ViewLoader-dbg.js +76 -0
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js +3 -86
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js.map +1 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control-dbg.js +124 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +3 -98
- package/src/sap/fe/core/jsx-runtime/jsx-control.js.map +1 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +43 -17
- package/src/sap/fe/core/jsx-runtime/jsx-dbg.js +41 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml-dbg.js +94 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +3 -90
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js.map +1 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.js +3 -28
- package/src/sap/fe/core/jsx-runtime/jsx.js.map +1 -0
- package/src/sap/fe/core/jsx-runtime/jsx.ts +19 -1
- package/src/sap/fe/core/jsx-runtime/jsxs-dbg.js +10 -0
- package/src/sap/fe/core/jsx-runtime/jsxs.js +3 -7
- package/src/sap/fe/core/jsx-runtime/jsxs.js.map +1 -0
- package/src/sap/fe/core/jsx-runtime/useMDXComponents-dbg.js +154 -0
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +3 -153
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js.map +1 -0
- package/src/sap/fe/core/library-dbg.js +437 -0
- package/src/sap/fe/core/library-preload.js +900 -0
- package/src/sap/fe/core/library-preload.js.map +1 -0
- package/src/sap/fe/core/library-preload.support.js +177 -0
- package/src/sap/fe/core/library-preload.support.js.map +1 -0
- package/src/sap/fe/core/library.js +3 -461
- package/src/sap/fe/core/library.js.map +1 -0
- package/src/sap/fe/core/library.support.js +1 -1
- package/src/sap/fe/core/library.ts +12 -25
- package/src/sap/fe/core/manifest.json +100 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +99 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -96
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js.map +1 -0
- package/src/sap/fe/core/messagebundle.properties +6 -0
- package/src/sap/fe/core/messagebundle_ar.properties +22 -0
- package/src/sap/fe/core/messagebundle_bg.properties +22 -0
- package/src/sap/fe/core/messagebundle_ca.properties +22 -0
- package/src/sap/fe/core/messagebundle_cs.properties +22 -0
- package/src/sap/fe/core/messagebundle_cy.properties +22 -0
- package/src/sap/fe/core/messagebundle_da.properties +22 -0
- package/src/sap/fe/core/messagebundle_de.properties +22 -0
- package/src/sap/fe/core/messagebundle_el.properties +22 -0
- package/src/sap/fe/core/messagebundle_en.properties +22 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +22 -0
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +22 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +4 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +4 -0
- package/src/sap/fe/core/messagebundle_es.properties +22 -0
- package/src/sap/fe/core/messagebundle_es_MX.properties +22 -0
- package/src/sap/fe/core/messagebundle_et.properties +22 -0
- package/src/sap/fe/core/messagebundle_fi.properties +22 -0
- package/src/sap/fe/core/messagebundle_fr.properties +22 -0
- package/src/sap/fe/core/messagebundle_fr_CA.properties +22 -0
- package/src/sap/fe/core/messagebundle_hi.properties +22 -0
- package/src/sap/fe/core/messagebundle_hr.properties +23 -1
- package/src/sap/fe/core/messagebundle_hu.properties +22 -0
- package/src/sap/fe/core/messagebundle_id.properties +22 -0
- package/src/sap/fe/core/messagebundle_it.properties +22 -0
- package/src/sap/fe/core/messagebundle_iw.properties +22 -0
- package/src/sap/fe/core/messagebundle_ja.properties +22 -0
- package/src/sap/fe/core/messagebundle_kk.properties +22 -0
- package/src/sap/fe/core/messagebundle_ko.properties +22 -0
- package/src/sap/fe/core/messagebundle_lt.properties +22 -0
- package/src/sap/fe/core/messagebundle_lv.properties +22 -0
- package/src/sap/fe/core/messagebundle_ms.properties +22 -0
- package/src/sap/fe/core/messagebundle_nl.properties +22 -0
- package/src/sap/fe/core/messagebundle_no.properties +22 -0
- package/src/sap/fe/core/messagebundle_pl.properties +22 -0
- package/src/sap/fe/core/messagebundle_pt.properties +22 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +22 -0
- package/src/sap/fe/core/messagebundle_ro.properties +22 -0
- package/src/sap/fe/core/messagebundle_ru.properties +22 -0
- package/src/sap/fe/core/messagebundle_sh.properties +22 -0
- package/src/sap/fe/core/messagebundle_sk.properties +22 -0
- package/src/sap/fe/core/messagebundle_sl.properties +22 -0
- package/src/sap/fe/core/messagebundle_sv.properties +22 -0
- package/src/sap/fe/core/messagebundle_th.properties +22 -0
- package/src/sap/fe/core/messagebundle_tr.properties +22 -0
- package/src/sap/fe/core/messagebundle_uk.properties +22 -0
- package/src/sap/fe/core/messagebundle_vi.properties +22 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +22 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +22 -0
- package/src/sap/fe/core/operationsHelper-dbg.js +155 -0
- package/src/sap/fe/core/operationsHelper.js +3 -205
- package/src/sap/fe/core/operationsHelper.js.map +1 -0
- package/src/sap/fe/core/operationsHelper.ts +14 -68
- package/src/sap/fe/core/rootView/Fcl-dbg.controller.js +837 -0
- package/src/sap/fe/core/rootView/Fcl.controller.js +3 -855
- package/src/sap/fe/core/rootView/Fcl.controller.js.map +1 -0
- package/src/sap/fe/core/rootView/NavContainer-dbg.controller.js +190 -0
- package/src/sap/fe/core/rootView/NavContainer.controller.js +3 -190
- package/src/sap/fe/core/rootView/NavContainer.controller.js.map +1 -0
- package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +506 -0
- package/src/sap/fe/core/rootView/RootViewBaseController.js +3 -538
- package/src/sap/fe/core/rootView/RootViewBaseController.js.map +1 -0
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +3 -4
- package/src/sap/fe/core/services/AsyncComponentServiceFactory-dbg.js +60 -0
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -60
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/CacheHandlerServiceFactory-dbg.js +196 -0
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +3 -219
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +80 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +3 -82
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +320 -0
- package/src/sap/fe/core/services/NavigationServiceFactory.js +3 -320
- package/src/sap/fe/core/services/NavigationServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/ResourceModelServiceFactory-dbg.js +91 -0
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -89
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +817 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -847
- package/src/sap/fe/core/services/RoutingServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +6 -3
- package/src/sap/fe/core/services/ShellServicesFactory-dbg.js +732 -0
- package/src/sap/fe/core/services/ShellServicesFactory.js +3 -752
- package/src/sap/fe/core/services/ShellServicesFactory.js.map +1 -0
- package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +569 -0
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +3 -599
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +3 -3
- package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +355 -0
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +3 -387
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/view/TemplatingErrorPage-dbg.controller.js +37 -0
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +3 -34
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js.map +1 -0
- package/src/sap/fe/core/support/AnnotationIssue.support.js +4 -4
- package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +3 -3
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +3 -3
- package/src/sap/fe/core/support/CommonHelper-dbg.js +63 -0
- package/src/sap/fe/core/support/CommonHelper.js +3 -60
- package/src/sap/fe/core/support/CommonHelper.js.map +1 -0
- package/src/sap/fe/core/support/Diagnostics-dbg.js +44 -0
- package/src/sap/fe/core/support/Diagnostics.js +3 -49
- package/src/sap/fe/core/support/Diagnostics.js.map +1 -0
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +3 -3
- package/src/sap/fe/core/templating/CommonFormatters-dbg.js +70 -0
- package/src/sap/fe/core/templating/CommonFormatters.js +3 -66
- package/src/sap/fe/core/templating/CommonFormatters.js.map +1 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +9 -3
- package/src/sap/fe/core/templating/CriticalityFormatters-dbg.js +136 -0
- package/src/sap/fe/core/templating/CriticalityFormatters.js +3 -133
- package/src/sap/fe/core/templating/CriticalityFormatters.js.map +1 -0
- package/src/sap/fe/core/templating/DataFieldFormatters-dbg.js +58 -0
- package/src/sap/fe/core/templating/DataFieldFormatters.js +3 -55
- package/src/sap/fe/core/templating/DataFieldFormatters.js.map +1 -0
- package/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +363 -0
- package/src/sap/fe/core/templating/DataModelPathHelper.js +3 -372
- package/src/sap/fe/core/templating/DataModelPathHelper.js.map +1 -0
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +17 -8
- package/src/sap/fe/core/templating/DisplayModeFormatter-dbg.js +56 -0
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +3 -124
- package/src/sap/fe/core/templating/DisplayModeFormatter.js.map +1 -0
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +0 -47
- package/src/sap/fe/core/templating/EntitySetHelper-dbg.js +68 -0
- package/src/sap/fe/core/templating/EntitySetHelper.js +3 -81
- package/src/sap/fe/core/templating/EntitySetHelper.js.map +1 -0
- package/src/sap/fe/core/templating/FieldControlHelper-dbg.js +77 -0
- package/src/sap/fe/core/templating/FieldControlHelper.js +3 -74
- package/src/sap/fe/core/templating/FieldControlHelper.js.map +1 -0
- package/src/sap/fe/core/templating/FilterHelper-dbg.js +346 -0
- package/src/sap/fe/core/templating/FilterHelper.js +3 -339
- package/src/sap/fe/core/templating/FilterHelper.js.map +1 -0
- package/src/sap/fe/core/templating/FilterHelper.ts +2 -21
- package/src/sap/fe/core/templating/FilterTemplating-dbg.js +62 -0
- package/src/sap/fe/core/templating/FilterTemplating.js +3 -59
- package/src/sap/fe/core/templating/FilterTemplating.js.map +1 -0
- package/src/sap/fe/core/templating/PropertyFormatters-dbg.js +93 -0
- package/src/sap/fe/core/templating/PropertyFormatters.js +3 -90
- package/src/sap/fe/core/templating/PropertyFormatters.js.map +1 -0
- package/src/sap/fe/core/templating/PropertyHelper-dbg.js +340 -0
- package/src/sap/fe/core/templating/PropertyHelper.js +3 -337
- package/src/sap/fe/core/templating/PropertyHelper.js.map +1 -0
- package/src/sap/fe/core/templating/SemanticObjectHelper-dbg.js +91 -0
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +3 -43
- package/src/sap/fe/core/templating/SemanticObjectHelper.js.map +1 -0
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +45 -1
- package/src/sap/fe/core/templating/UIFormatters-dbg.js +498 -0
- package/src/sap/fe/core/templating/UIFormatters.js +3 -544
- package/src/sap/fe/core/templating/UIFormatters.js.map +1 -0
- package/src/sap/fe/core/templating/UIFormatters.ts +60 -110
- package/src/sap/fe/core/type/DateTimeWithTimezone-dbg.js +35 -0
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -33
- package/src/sap/fe/core/type/DateTimeWithTimezone.js.map +1 -0
- package/src/sap/fe/core/type/EDM-dbg.js +84 -0
- package/src/sap/fe/core/type/EDM.js +6 -0
- package/src/sap/fe/core/type/EDM.js.map +1 -0
- package/src/sap/fe/core/type/EDM.ts +70 -0
- package/src/sap/fe/core/type/Email-dbg.js +29 -0
- package/src/sap/fe/core/type/Email.js +3 -26
- package/src/sap/fe/core/type/Email.js.map +1 -0
- package/src/sap/fe/core/type/FiscalDate-dbg.js +174 -0
- package/src/sap/fe/core/type/FiscalDate.js +6 -0
- package/src/sap/fe/core/type/FiscalDate.js.map +1 -0
- package/src/sap/fe/core/type/FiscalDate.ts +179 -0
- package/src/sap/fe/core/type/TypeUtil-dbg.js +58 -0
- package/src/sap/fe/core/type/TypeUtil.js +3 -55
- package/src/sap/fe/core/type/TypeUtil.js.map +1 -0
- package/src/sap/fe/core/type/TypeUtil.ts +1 -0
- package/src/.eslintrc +0 -7
|
@@ -1,1312 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2023 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/BindingToolkit", "sap/fe/core/library", "sap/fe/core/TemplateModel", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/PropertyHelper", "sap/fe/macros/field/FieldHelper", "sap/fe/macros/field/FieldTemplating", "sap/fe/macros/table/TableHelper", "sap/m/Button", "sap/m/Dialog", "sap/m/MessageToast", "sap/ui/core/Core", "sap/ui/core/Fragment", "sap/ui/core/util/XMLPreprocessor", "sap/ui/core/XMLTemplateProcessor", "sap/ui/mdc/enum/EditMode", "sap/ui/model/json/JSONModel", "../controllerextensions/messageHandler/messageHandling", "../controls/Any", "../converters/MetaModelConverter", "../templating/FieldControlHelper", "../templating/UIFormatters", "./SideEffectsHelper"], function (Log, CommonUtils, BindingToolkit, FELibrary, TemplateModel, DataModelPathHelper, PropertyHelper, FieldHelper, FieldTemplating, TableHelper, Button, Dialog, MessageToast, Core, Fragment, XMLPreprocessor, XMLTemplateProcessor, EditMode, JSONModel, messageHandling, Any, MetaModelConverter, FieldControlHelper, UIFormatters, SideEffectsHelper) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var isCollectionField = UIFormatters.isCollectionField;
|
|
9
|
-
var getRequiredExpression = UIFormatters.getRequiredExpression;
|
|
10
|
-
var getEditMode = UIFormatters.getEditMode;
|
|
11
|
-
var isReadOnlyExpression = FieldControlHelper.isReadOnlyExpression;
|
|
12
|
-
var getInvolvedDataModelObjects = MetaModelConverter.getInvolvedDataModelObjects;
|
|
13
|
-
var convertMetaModelContext = MetaModelConverter.convertMetaModelContext;
|
|
14
|
-
var setEditStyleProperties = FieldTemplating.setEditStyleProperties;
|
|
15
|
-
var getTextBinding = FieldTemplating.getTextBinding;
|
|
16
|
-
var hasValueHelpWithFixedValues = PropertyHelper.hasValueHelpWithFixedValues;
|
|
17
|
-
var hasValueHelp = PropertyHelper.hasValueHelp;
|
|
18
|
-
var hasUnit = PropertyHelper.hasUnit;
|
|
19
|
-
var hasCurrency = PropertyHelper.hasCurrency;
|
|
20
|
-
var getAssociatedUnitPropertyPath = PropertyHelper.getAssociatedUnitPropertyPath;
|
|
21
|
-
var getAssociatedUnitProperty = PropertyHelper.getAssociatedUnitProperty;
|
|
22
|
-
var getRelativePaths = DataModelPathHelper.getRelativePaths;
|
|
23
|
-
var enhanceDataModelPath = DataModelPathHelper.enhanceDataModelPath;
|
|
24
|
-
var pathInModel = BindingToolkit.pathInModel;
|
|
25
|
-
var or = BindingToolkit.or;
|
|
26
|
-
var not = BindingToolkit.not;
|
|
27
|
-
var ifElse = BindingToolkit.ifElse;
|
|
28
|
-
var constant = BindingToolkit.constant;
|
|
29
|
-
var compileExpression = BindingToolkit.compileExpression;
|
|
30
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
31
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
32
|
-
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
33
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
34
|
-
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function () {}; return { s: F, n: function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function (e) { throw e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function () { it = it.call(o); }, n: function () { var step = it.next(); normalCompletion = step.done; return step; }, e: function (e) { didErr = true; err = e; }, f: function () { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
35
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
36
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
37
|
-
var MassEditHelper = {
|
|
38
|
-
/**
|
|
39
|
-
* Initializes the value at final or deepest level path with a blank array.
|
|
40
|
-
* Return an empty array pointing to the final or deepest level path.
|
|
41
|
-
*
|
|
42
|
-
* @param sPath Property path
|
|
43
|
-
* @param aValues Array instance where the default data needs to be added
|
|
44
|
-
* @returns The final path
|
|
45
|
-
*/
|
|
46
|
-
initLastLevelOfPropertyPath: function (sPath, aValues) {
|
|
47
|
-
var aFinalPath;
|
|
48
|
-
var index = 0;
|
|
49
|
-
var aPaths = sPath.split("/");
|
|
50
|
-
var sFullPath = "";
|
|
51
|
-
aPaths.forEach(function (sPropertyPath) {
|
|
52
|
-
if (!aValues[sPropertyPath] && index === 0) {
|
|
53
|
-
aValues[sPropertyPath] = {};
|
|
54
|
-
aFinalPath = aValues[sPropertyPath];
|
|
55
|
-
sFullPath = sFullPath + sPropertyPath;
|
|
56
|
-
index++;
|
|
57
|
-
} else if (!aFinalPath[sPropertyPath]) {
|
|
58
|
-
sFullPath = "".concat(sFullPath, "/").concat(sPropertyPath);
|
|
59
|
-
if (sFullPath !== sPath) {
|
|
60
|
-
aFinalPath[sPropertyPath] = {};
|
|
61
|
-
aFinalPath = aFinalPath[sPropertyPath];
|
|
62
|
-
} else {
|
|
63
|
-
aFinalPath[sPropertyPath] = [];
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
return aFinalPath;
|
|
68
|
-
},
|
|
69
|
-
/**
|
|
70
|
-
* Method to get unique values for given array values.
|
|
71
|
-
*
|
|
72
|
-
* @param sValue Property value
|
|
73
|
-
* @param index Index of the property value
|
|
74
|
-
* @param self Instance of the array
|
|
75
|
-
* @returns The unique value
|
|
76
|
-
*/
|
|
77
|
-
getUniqueValues: function (sValue, index, self) {
|
|
78
|
-
return sValue != undefined && sValue != null ? self.indexOf(sValue) === index : undefined;
|
|
79
|
-
},
|
|
80
|
-
/**
|
|
81
|
-
* Gets the property value for a multi-level path (for example: _Materials/Material_Details gets the value of Material_Details under _Materials Object).
|
|
82
|
-
* Returns the propertyValue, which can be of any type (string, number, etc..).
|
|
83
|
-
*
|
|
84
|
-
* @param sDataPropertyPath Property path
|
|
85
|
-
* @param oValues Object of property values
|
|
86
|
-
* @returns The property value
|
|
87
|
-
*/
|
|
88
|
-
getValueForMultiLevelPath: function (sDataPropertyPath, oValues) {
|
|
89
|
-
var result;
|
|
90
|
-
if (sDataPropertyPath && sDataPropertyPath.indexOf("/") > 0) {
|
|
91
|
-
var aPropertyPaths = sDataPropertyPath.split("/");
|
|
92
|
-
aPropertyPaths.forEach(function (sPath) {
|
|
93
|
-
result = oValues && oValues[sPath] ? oValues[sPath] : result && result[sPath];
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
return result;
|
|
97
|
-
},
|
|
98
|
-
/**
|
|
99
|
-
* Gets the key path for the key of a combo box that must be selected initially when the dialog opens:
|
|
100
|
-
* => If propertyValue for all selected contexts is different, then < Keep Existing Values > is preselected.
|
|
101
|
-
* => If propertyValue for all selected contexts is the same, then the propertyValue is preselected.
|
|
102
|
-
* => If propertyValue for all selected contexts is empty, then < Leave Blank > is preselected.
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
* @param aContexts Contexts for mass edit
|
|
106
|
-
* @param sDataPropertyPath Data property path
|
|
107
|
-
* @returns The key path
|
|
108
|
-
*/
|
|
109
|
-
getDefaultSelectionPathComboBox: function (aContexts, sDataPropertyPath) {
|
|
110
|
-
var result;
|
|
111
|
-
if (sDataPropertyPath && aContexts.length > 0) {
|
|
112
|
-
var oSelectedContext = aContexts,
|
|
113
|
-
aPropertyValues = [];
|
|
114
|
-
oSelectedContext.forEach(function (oContext) {
|
|
115
|
-
var oDataObject = oContext.getObject();
|
|
116
|
-
var sMultiLevelPathCondition = sDataPropertyPath.indexOf("/") > -1 && oDataObject.hasOwnProperty(sDataPropertyPath.split("/")[0]);
|
|
117
|
-
if (oContext && (oDataObject.hasOwnProperty(sDataPropertyPath) || sMultiLevelPathCondition)) {
|
|
118
|
-
aPropertyValues.push(oContext.getObject(sDataPropertyPath));
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
var aUniquePropertyValues = aPropertyValues.filter(MassEditHelper.getUniqueValues);
|
|
122
|
-
if (aUniquePropertyValues.length > 1) {
|
|
123
|
-
result = "Default/".concat(sDataPropertyPath);
|
|
124
|
-
} else if (aUniquePropertyValues.length === 0) {
|
|
125
|
-
result = "Empty/".concat(sDataPropertyPath);
|
|
126
|
-
} else if (aUniquePropertyValues.length === 1) {
|
|
127
|
-
result = "".concat(sDataPropertyPath, "/").concat(aUniquePropertyValues[0]);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
return result;
|
|
131
|
-
},
|
|
132
|
-
/**
|
|
133
|
-
* Checks hidden annotation value [both static and path based] for table's selected context.
|
|
134
|
-
*
|
|
135
|
-
* @param hiddenValue Hidden annotation value / path for field
|
|
136
|
-
* @param aContexts Contexts for mass edit
|
|
137
|
-
* @returns The hidden annotation value
|
|
138
|
-
*/
|
|
139
|
-
getHiddenValueForContexts: function (hiddenValue, aContexts) {
|
|
140
|
-
if (hiddenValue && hiddenValue.$Path) {
|
|
141
|
-
return !aContexts.some(function (oSelectedContext) {
|
|
142
|
-
return oSelectedContext.getObject(hiddenValue.$Path) === false;
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
return hiddenValue;
|
|
146
|
-
},
|
|
147
|
-
getInputType: function (propertyInfo, dataFieldConverted, oDataModelPath) {
|
|
148
|
-
var editStyleProperties = {};
|
|
149
|
-
var inputType;
|
|
150
|
-
if (propertyInfo) {
|
|
151
|
-
setEditStyleProperties(editStyleProperties, dataFieldConverted, oDataModelPath, true);
|
|
152
|
-
inputType = (editStyleProperties === null || editStyleProperties === void 0 ? void 0 : editStyleProperties.editStyle) || "";
|
|
153
|
-
}
|
|
154
|
-
var isValidForMassEdit = inputType && ["DatePicker", "TimePicker", "DateTimePicker", "RatingIndicator"].indexOf(inputType) === -1 && !isCollectionField(oDataModelPath) && !hasValueHelpWithFixedValues(propertyInfo);
|
|
155
|
-
return (isValidForMassEdit || "") && inputType;
|
|
156
|
-
},
|
|
157
|
-
getIsFieldGrp: function (dataFieldConverted) {
|
|
158
|
-
return dataFieldConverted && dataFieldConverted.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAnnotation" && dataFieldConverted.Target && dataFieldConverted.Target.value && dataFieldConverted.Target.value.indexOf("FieldGroup") > -1;
|
|
159
|
-
},
|
|
160
|
-
/**
|
|
161
|
-
* Get text path for the mass edit field.
|
|
162
|
-
*
|
|
163
|
-
* @param property Property path
|
|
164
|
-
* @param textBinding Text Binding Info
|
|
165
|
-
* @param displayMode Display mode
|
|
166
|
-
* @returns Text Property Path if it exists
|
|
167
|
-
*/
|
|
168
|
-
getTextPath: function (property, textBinding, displayMode) {
|
|
169
|
-
var descriptionPath;
|
|
170
|
-
if (textBinding && (textBinding.path || textBinding.parameters && textBinding.parameters.length) && property) {
|
|
171
|
-
if (textBinding.path && displayMode === "Description") {
|
|
172
|
-
descriptionPath = textBinding.path;
|
|
173
|
-
} else if (textBinding.parameters) {
|
|
174
|
-
textBinding.parameters.forEach(function (props) {
|
|
175
|
-
if (props.path && props.path !== property) {
|
|
176
|
-
descriptionPath = props.path;
|
|
177
|
-
}
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
return descriptionPath;
|
|
182
|
-
},
|
|
183
|
-
/**
|
|
184
|
-
* Initializes a JSON Model for properties of dialog fields [label, visiblity, dataproperty, etc.].
|
|
185
|
-
*
|
|
186
|
-
* @param oTable Instance of Table
|
|
187
|
-
* @param aContexts Contexts for mass edit
|
|
188
|
-
* @param aDataArray Array containing data related to the dialog used by both the static and the runtime model
|
|
189
|
-
* @returns The model
|
|
190
|
-
*/
|
|
191
|
-
prepareDataForDialog: function (oTable, aContexts, aDataArray) {
|
|
192
|
-
var oMetaModel = oTable && oTable.getModel().getMetaModel(),
|
|
193
|
-
sCurrentEntitySetName = oTable.data("metaPath"),
|
|
194
|
-
aTableFields = MassEditHelper.getTableFields(oTable),
|
|
195
|
-
oEntityTypeContext = oMetaModel.getContext("".concat(sCurrentEntitySetName, "/@")),
|
|
196
|
-
oEntitySetContext = oMetaModel.getContext(sCurrentEntitySetName),
|
|
197
|
-
oDataModelObjectPath = getInvolvedDataModelObjects(oEntityTypeContext);
|
|
198
|
-
var oDataFieldModel = new JSONModel();
|
|
199
|
-
var oResult;
|
|
200
|
-
var sLabelText;
|
|
201
|
-
var bValueHelpEnabled;
|
|
202
|
-
var sUnitPropertyPath;
|
|
203
|
-
var bValueHelpEnabledForUnit;
|
|
204
|
-
var oTextBinding;
|
|
205
|
-
aTableFields.forEach(function (oColumnInfo) {
|
|
206
|
-
var sDataPropertyPath = oColumnInfo.dataProperty;
|
|
207
|
-
if (sDataPropertyPath) {
|
|
208
|
-
var _oDataFieldConverted$, _oDataFieldConverted$2, _oPropertyInfo, _oPropertyInfo$annota, _oPropertyInfo$annota2, _unitPropertyInfo$ann, _unitPropertyInfo$ann2;
|
|
209
|
-
var oPropertyInfo = sDataPropertyPath && oMetaModel.getObject("".concat(sCurrentEntitySetName, "/").concat(sDataPropertyPath, "@"));
|
|
210
|
-
sLabelText = oColumnInfo.label || oPropertyInfo && oPropertyInfo["@com.sap.vocabularies.Common.v1.Label"] || sDataPropertyPath;
|
|
211
|
-
if (oDataModelObjectPath) {
|
|
212
|
-
oDataModelObjectPath.targetObject = oDataModelObjectPath.targetEntityType.entityProperties.filter(function (oProperty) {
|
|
213
|
-
return oProperty.name === sDataPropertyPath;
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
oDataModelObjectPath.targetObject = oDataModelObjectPath.targetObject[0] || {};
|
|
217
|
-
oTextBinding = getTextBinding(oDataModelObjectPath, {}, true) || {};
|
|
218
|
-
var oFieldContext = oMetaModel.getContext(oColumnInfo.annotationPath),
|
|
219
|
-
oDataFieldConverted = convertMetaModelContext(oFieldContext),
|
|
220
|
-
oPropertyContext = oMetaModel.getContext("".concat(sCurrentEntitySetName, "/").concat(sDataPropertyPath, "@")),
|
|
221
|
-
oInterface = oPropertyContext && oPropertyContext.getInterface();
|
|
222
|
-
var oDataModelPath = getInvolvedDataModelObjects(oFieldContext, oEntitySetContext);
|
|
223
|
-
if ((oDataFieldConverted === null || oDataFieldConverted === void 0 ? void 0 : (_oDataFieldConverted$ = oDataFieldConverted.Value) === null || _oDataFieldConverted$ === void 0 ? void 0 : (_oDataFieldConverted$2 = _oDataFieldConverted$.path) === null || _oDataFieldConverted$2 === void 0 ? void 0 : _oDataFieldConverted$2.length) > 0) {
|
|
224
|
-
oDataModelPath = enhanceDataModelPath(oDataModelPath, sDataPropertyPath);
|
|
225
|
-
}
|
|
226
|
-
var bHiddenField = MassEditHelper.getHiddenValueForContexts(oFieldContext && oFieldContext.getObject()["@com.sap.vocabularies.UI.v1.Hidden"], aContexts) || false;
|
|
227
|
-
var isImage = oPropertyInfo && oPropertyInfo["@com.sap.vocabularies.UI.v1.IsImageURL"];
|
|
228
|
-
oInterface.context = {
|
|
229
|
-
getModel: function () {
|
|
230
|
-
return oInterface.getModel();
|
|
231
|
-
},
|
|
232
|
-
getPath: function () {
|
|
233
|
-
return "".concat(sCurrentEntitySetName, "/").concat(sDataPropertyPath);
|
|
234
|
-
}
|
|
235
|
-
};
|
|
236
|
-
oPropertyInfo = oDataFieldConverted._type === "Property" ? oDataFieldConverted : oDataFieldConverted && oDataFieldConverted.Value && oDataFieldConverted.Value.$target || oDataFieldConverted && oDataFieldConverted.Target && oDataFieldConverted.Target.$target;
|
|
237
|
-
// Datafield is not included in the FieldControl calculation, needs to be implemented
|
|
238
|
-
|
|
239
|
-
var chartProperty = oPropertyInfo && oPropertyInfo.term && oPropertyInfo.term === "com.sap.vocabularies.UI.v1.Chart";
|
|
240
|
-
var isAction = !!oDataFieldConverted.Action;
|
|
241
|
-
var isFieldGrp = MassEditHelper.getIsFieldGrp(oDataFieldConverted);
|
|
242
|
-
if (isImage || bHiddenField || chartProperty || isAction || isFieldGrp) {
|
|
243
|
-
return;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
// ValueHelp properties
|
|
247
|
-
sUnitPropertyPath = (hasCurrency(oPropertyInfo) || hasUnit(oPropertyInfo)) && getAssociatedUnitPropertyPath(oPropertyInfo) || "";
|
|
248
|
-
var unitPropertyInfo = sUnitPropertyPath && getAssociatedUnitProperty(oPropertyInfo);
|
|
249
|
-
bValueHelpEnabled = hasValueHelp(oPropertyInfo);
|
|
250
|
-
bValueHelpEnabledForUnit = unitPropertyInfo && hasValueHelp(unitPropertyInfo);
|
|
251
|
-
var hasContextDependentVH = (bValueHelpEnabled || bValueHelpEnabledForUnit) && (((_oPropertyInfo = oPropertyInfo) === null || _oPropertyInfo === void 0 ? void 0 : (_oPropertyInfo$annota = _oPropertyInfo.annotations) === null || _oPropertyInfo$annota === void 0 ? void 0 : (_oPropertyInfo$annota2 = _oPropertyInfo$annota.Common) === null || _oPropertyInfo$annota2 === void 0 ? void 0 : _oPropertyInfo$annota2.ValueListRelevantQualifiers) || unitPropertyInfo && (unitPropertyInfo === null || unitPropertyInfo === void 0 ? void 0 : (_unitPropertyInfo$ann = unitPropertyInfo.annotations) === null || _unitPropertyInfo$ann === void 0 ? void 0 : (_unitPropertyInfo$ann2 = _unitPropertyInfo$ann.Common) === null || _unitPropertyInfo$ann2 === void 0 ? void 0 : _unitPropertyInfo$ann2.ValueListRelevantQualifiers));
|
|
252
|
-
if (hasContextDependentVH) {
|
|
253
|
-
// context dependent VH is not supported for Mass Edit.
|
|
254
|
-
return;
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
// EditMode and InputType
|
|
258
|
-
var propertyForFieldControl = oPropertyInfo && oPropertyInfo.Value ? oPropertyInfo.Value : oPropertyInfo;
|
|
259
|
-
var expBinding = getEditMode(propertyForFieldControl, oDataModelPath, false, false, oDataFieldConverted, constant(true));
|
|
260
|
-
var editModeValues = Object.keys(EditMode);
|
|
261
|
-
var editModeIsStatic = !!expBinding && editModeValues.includes(expBinding);
|
|
262
|
-
var editable = !!expBinding && (editModeIsStatic && expBinding === EditMode.Editable || !editModeIsStatic);
|
|
263
|
-
var navPropertyWithValueHelp = sDataPropertyPath.includes("/") && bValueHelpEnabled;
|
|
264
|
-
if (!editable || navPropertyWithValueHelp) {
|
|
265
|
-
return;
|
|
266
|
-
}
|
|
267
|
-
var inputType = MassEditHelper.getInputType(oPropertyInfo, oDataFieldConverted, oDataModelPath);
|
|
268
|
-
if (inputType) {
|
|
269
|
-
var relativePath = getRelativePaths(oDataModelPath);
|
|
270
|
-
var isReadOnly = isReadOnlyExpression(oPropertyInfo, relativePath);
|
|
271
|
-
var displayMode = CommonUtils.computeDisplayMode(oPropertyContext.getObject());
|
|
272
|
-
var isValueHelpEnabled = bValueHelpEnabled ? bValueHelpEnabled : false;
|
|
273
|
-
var isValueHelpEnabledForUnit = bValueHelpEnabledForUnit && !sUnitPropertyPath.includes("/") ? bValueHelpEnabledForUnit : false;
|
|
274
|
-
var unitProperty = sUnitPropertyPath && !sDataPropertyPath.includes("/") ? sUnitPropertyPath : false;
|
|
275
|
-
oResult = {
|
|
276
|
-
label: sLabelText,
|
|
277
|
-
dataProperty: sDataPropertyPath,
|
|
278
|
-
isValueHelpEnabled: bValueHelpEnabled ? bValueHelpEnabled : false,
|
|
279
|
-
unitProperty: unitProperty,
|
|
280
|
-
isFieldRequired: getRequiredExpression(oPropertyInfo, oDataFieldConverted, true, false, {}, oDataModelPath),
|
|
281
|
-
defaultSelectionPath: sDataPropertyPath ? MassEditHelper.getDefaultSelectionPathComboBox(aContexts, sDataPropertyPath) : false,
|
|
282
|
-
defaultSelectionUnitPath: sUnitPropertyPath ? MassEditHelper.getDefaultSelectionPathComboBox(aContexts, sUnitPropertyPath) : false,
|
|
283
|
-
entitySet: sCurrentEntitySetName,
|
|
284
|
-
display: displayMode,
|
|
285
|
-
descriptionPath: MassEditHelper.getTextPath(sDataPropertyPath, oTextBinding, displayMode),
|
|
286
|
-
nullable: oPropertyInfo.nullable !== undefined ? oPropertyInfo.nullable : true,
|
|
287
|
-
isPropertyReadOnly: isReadOnly !== undefined ? isReadOnly : false,
|
|
288
|
-
inputType: inputType,
|
|
289
|
-
editMode: editable ? expBinding : undefined,
|
|
290
|
-
propertyInfo: {
|
|
291
|
-
hasVH: isValueHelpEnabled,
|
|
292
|
-
runtimePath: "fieldsInfo>/values/",
|
|
293
|
-
relativePath: sDataPropertyPath,
|
|
294
|
-
propertyPathForValueHelp: "".concat(sCurrentEntitySetName, "/").concat(sDataPropertyPath)
|
|
295
|
-
},
|
|
296
|
-
unitInfo: unitProperty && {
|
|
297
|
-
hasVH: isValueHelpEnabledForUnit,
|
|
298
|
-
runtimePath: "fieldsInfo>/unitData/",
|
|
299
|
-
relativePath: unitProperty,
|
|
300
|
-
propertyPathForValueHelp: "".concat(sCurrentEntitySetName, "/").concat(unitProperty)
|
|
301
|
-
}
|
|
302
|
-
};
|
|
303
|
-
aDataArray.push(oResult);
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
});
|
|
307
|
-
oDataFieldModel.setData(aDataArray);
|
|
308
|
-
return oDataFieldModel;
|
|
309
|
-
},
|
|
310
|
-
getTableFields: function (oTable) {
|
|
311
|
-
var aColumns = oTable && oTable.getColumns() || [];
|
|
312
|
-
var columnsData = oTable && oTable.getParent().getTableDefinition().columns;
|
|
313
|
-
return aColumns.map(function (oColumn) {
|
|
314
|
-
var sDataProperty = oColumn && oColumn.getDataProperty(),
|
|
315
|
-
aRealtedColumnInfo = columnsData && columnsData.filter(function (oColumnInfo) {
|
|
316
|
-
return oColumnInfo.name === sDataProperty && oColumnInfo.type === "Annotation";
|
|
317
|
-
});
|
|
318
|
-
return {
|
|
319
|
-
dataProperty: sDataProperty,
|
|
320
|
-
label: oColumn.getHeader(),
|
|
321
|
-
annotationPath: aRealtedColumnInfo && aRealtedColumnInfo[0] && aRealtedColumnInfo[0].annotationPath
|
|
322
|
-
};
|
|
323
|
-
});
|
|
324
|
-
},
|
|
325
|
-
getDefaultTextsForDialog: function (oResourceBundle, iSelectedContexts, oTable) {
|
|
326
|
-
// The confirm button text is "Save" for table in Display mode and "Apply" for table in edit mode. This can be later exposed if needed.
|
|
327
|
-
var bDisplayMode = oTable.data("displayModePropertyBinding") === "true";
|
|
328
|
-
return {
|
|
329
|
-
keepExistingPrefix: "< Keep",
|
|
330
|
-
leaveBlankValue: "< Leave Blank >",
|
|
331
|
-
clearFieldValue: "< Clear Values >",
|
|
332
|
-
massEditTitle: oResourceBundle.getText("C_MASS_EDIT_DIALOG_TITLE", iSelectedContexts.toString()),
|
|
333
|
-
applyButtonText: bDisplayMode ? oResourceBundle.getText("C_MASS_EDIT_SAVE_BUTTON_TEXT") : oResourceBundle.getText("C_MASS_EDIT_APPLY_BUTTON_TEXT"),
|
|
334
|
-
useValueHelpValue: "< Use Value Help >",
|
|
335
|
-
cancelButtonText: oResourceBundle.getText("C_COMMON_OBJECT_PAGE_CANCEL"),
|
|
336
|
-
noFields: oResourceBundle.getText("C_MASS_EDIT_NO_EDITABLE_FIELDS"),
|
|
337
|
-
okButtonText: oResourceBundle.getText("C_COMMON_DIALOG_OK")
|
|
338
|
-
};
|
|
339
|
-
},
|
|
340
|
-
/**
|
|
341
|
-
* Adds a suffix to the 'keep existing' property of the comboBox.
|
|
342
|
-
*
|
|
343
|
-
* @param sInputType InputType of the field
|
|
344
|
-
* @returns The modified string
|
|
345
|
-
*/
|
|
346
|
-
// getSuffixForKeepExisiting: function (sInputType: string) {
|
|
347
|
-
// let sResult = "Values";
|
|
348
|
-
|
|
349
|
-
// switch (sInputType) {
|
|
350
|
-
// //TODO - Add for other control types as well (Radio Button, Email, Input, MDC Fields, Image etc.)
|
|
351
|
-
// case "DatePicker":
|
|
352
|
-
// sResult = "Dates";
|
|
353
|
-
// break;
|
|
354
|
-
// case "CheckBox":
|
|
355
|
-
// sResult = "Settings";
|
|
356
|
-
// break;
|
|
357
|
-
// default:
|
|
358
|
-
// sResult = "Values";
|
|
359
|
-
// }
|
|
360
|
-
// return sResult;
|
|
361
|
-
// },
|
|
362
|
-
|
|
363
|
-
/**
|
|
364
|
-
* Adds default values to the model [Keep Existing Values, Leave Blank].
|
|
365
|
-
*
|
|
366
|
-
* @param aValues Array instance where the default data needs to be added
|
|
367
|
-
* @param oDefaultValues Default values from Application Manifest
|
|
368
|
-
* @param oPropertyInfo Property information
|
|
369
|
-
* @param bUOMField
|
|
370
|
-
*/
|
|
371
|
-
setDefaultValuesToDialog: function (aValues, oDefaultValues, oPropertyInfo, bUOMField) {
|
|
372
|
-
var sPropertyPath = bUOMField ? oPropertyInfo.unitProperty : oPropertyInfo.dataProperty,
|
|
373
|
-
sInputType = oPropertyInfo.inputType,
|
|
374
|
-
bPropertyRequired = oPropertyInfo.isFieldRequired;
|
|
375
|
-
// const sSuffixForKeepExisting = MassEditHelper.getSuffixForKeepExisiting(sInputType);
|
|
376
|
-
var sSuffixForKeepExisting = "Values";
|
|
377
|
-
aValues.defaultOptions = aValues.defaultOptions || [];
|
|
378
|
-
var selectOptionsExist = aValues.selectOptions && aValues.selectOptions.length > 0;
|
|
379
|
-
var keepEntry = {
|
|
380
|
-
text: "".concat(oDefaultValues.keepExistingPrefix, " ").concat(sSuffixForKeepExisting, " >"),
|
|
381
|
-
key: "Default/".concat(sPropertyPath)
|
|
382
|
-
};
|
|
383
|
-
if (sInputType === "CheckBox") {
|
|
384
|
-
var falseEntry = {
|
|
385
|
-
text: "No",
|
|
386
|
-
key: "".concat(sPropertyPath, "/false"),
|
|
387
|
-
textInfo: {
|
|
388
|
-
value: false
|
|
389
|
-
}
|
|
390
|
-
};
|
|
391
|
-
var truthyEntry = {
|
|
392
|
-
text: "Yes",
|
|
393
|
-
key: "".concat(sPropertyPath, "/true"),
|
|
394
|
-
textInfo: {
|
|
395
|
-
value: true
|
|
396
|
-
}
|
|
397
|
-
};
|
|
398
|
-
aValues.unshift(falseEntry);
|
|
399
|
-
aValues.defaultOptions.unshift(falseEntry);
|
|
400
|
-
aValues.unshift(truthyEntry);
|
|
401
|
-
aValues.defaultOptions.unshift(truthyEntry);
|
|
402
|
-
aValues.unshift(keepEntry);
|
|
403
|
-
aValues.defaultOptions.unshift(keepEntry);
|
|
404
|
-
} else {
|
|
405
|
-
var _oPropertyInfo$proper, _oPropertyInfo$unitIn;
|
|
406
|
-
if (oPropertyInfo !== null && oPropertyInfo !== void 0 && (_oPropertyInfo$proper = oPropertyInfo.propertyInfo) !== null && _oPropertyInfo$proper !== void 0 && _oPropertyInfo$proper.hasVH || oPropertyInfo !== null && oPropertyInfo !== void 0 && (_oPropertyInfo$unitIn = oPropertyInfo.unitInfo) !== null && _oPropertyInfo$unitIn !== void 0 && _oPropertyInfo$unitIn.hasVH && bUOMField) {
|
|
407
|
-
var vhdEntry = {
|
|
408
|
-
text: oDefaultValues.useValueHelpValue,
|
|
409
|
-
key: "UseValueHelpValue/".concat(sPropertyPath)
|
|
410
|
-
};
|
|
411
|
-
aValues.unshift(vhdEntry);
|
|
412
|
-
aValues.defaultOptions.unshift(vhdEntry);
|
|
413
|
-
}
|
|
414
|
-
if (selectOptionsExist) {
|
|
415
|
-
if (bPropertyRequired !== "true" && !bUOMField) {
|
|
416
|
-
var clearEntry = {
|
|
417
|
-
text: oDefaultValues.clearFieldValue,
|
|
418
|
-
key: "ClearFieldValue/".concat(sPropertyPath)
|
|
419
|
-
};
|
|
420
|
-
aValues.unshift(clearEntry);
|
|
421
|
-
aValues.defaultOptions.unshift(clearEntry);
|
|
422
|
-
}
|
|
423
|
-
aValues.unshift(keepEntry);
|
|
424
|
-
aValues.defaultOptions.unshift(keepEntry);
|
|
425
|
-
} else {
|
|
426
|
-
var emptyEntry = {
|
|
427
|
-
text: oDefaultValues.leaveBlankValue,
|
|
428
|
-
key: "Default/".concat(sPropertyPath)
|
|
429
|
-
};
|
|
430
|
-
aValues.unshift(emptyEntry);
|
|
431
|
-
aValues.defaultOptions.unshift(emptyEntry);
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
},
|
|
435
|
-
/**
|
|
436
|
-
* Get text arrangement info for a context property.
|
|
437
|
-
*
|
|
438
|
-
* @param property Property Path
|
|
439
|
-
* @param descriptionPath Path to text association of the property
|
|
440
|
-
* @param displayMode Display mode of the property and text association
|
|
441
|
-
* @param selectedContext Context to find the full text
|
|
442
|
-
* @returns The text arrangement
|
|
443
|
-
*/
|
|
444
|
-
getTextArrangementInfo: function (property, descriptionPath, displayMode, selectedContext) {
|
|
445
|
-
var value = selectedContext.getObject(property),
|
|
446
|
-
descriptionValue,
|
|
447
|
-
fullText;
|
|
448
|
-
if (descriptionPath && property) {
|
|
449
|
-
switch (displayMode) {
|
|
450
|
-
case "Description":
|
|
451
|
-
descriptionValue = selectedContext.getObject(descriptionPath) || "";
|
|
452
|
-
fullText = descriptionValue;
|
|
453
|
-
break;
|
|
454
|
-
case "Value":
|
|
455
|
-
value = selectedContext.getObject(property) || "";
|
|
456
|
-
fullText = value;
|
|
457
|
-
break;
|
|
458
|
-
case "ValueDescription":
|
|
459
|
-
value = selectedContext.getObject(property) || "";
|
|
460
|
-
descriptionValue = selectedContext.getObject(descriptionPath) || "";
|
|
461
|
-
fullText = descriptionValue ? "".concat(value, " (").concat(descriptionValue, ")") : value;
|
|
462
|
-
break;
|
|
463
|
-
case "DescriptionValue":
|
|
464
|
-
value = selectedContext.getObject(property) || "";
|
|
465
|
-
descriptionValue = selectedContext.getObject(descriptionPath) || "";
|
|
466
|
-
fullText = descriptionValue ? "".concat(descriptionValue, " (").concat(value, ")") : value;
|
|
467
|
-
break;
|
|
468
|
-
default:
|
|
469
|
-
Log.info("Display Property not applicable: ".concat(property));
|
|
470
|
-
break;
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
return {
|
|
474
|
-
textArrangement: displayMode,
|
|
475
|
-
valuePath: property,
|
|
476
|
-
descriptionPath: descriptionPath,
|
|
477
|
-
value: value,
|
|
478
|
-
description: descriptionValue,
|
|
479
|
-
fullText: fullText
|
|
480
|
-
};
|
|
481
|
-
},
|
|
482
|
-
/**
|
|
483
|
-
* Return the visibility valuue for the ManagedObject Any.
|
|
484
|
-
*
|
|
485
|
-
* @param any The ManagedObject Any to be used to calculate the visible value of the binding.
|
|
486
|
-
* @returns Returns true if the mass edit field is editable.
|
|
487
|
-
*/
|
|
488
|
-
isEditable: function (any) {
|
|
489
|
-
var binding = any.getBinding("any");
|
|
490
|
-
var value = binding.getExternalValue();
|
|
491
|
-
return value === EditMode.Editable;
|
|
492
|
-
},
|
|
493
|
-
/**
|
|
494
|
-
* Calculate and update the visibility of mass edit field on change of the ManagedObject Any binding.
|
|
495
|
-
*
|
|
496
|
-
* @param oDialogDataModel Model to be used runtime.
|
|
497
|
-
* @param dataProperty Field name.
|
|
498
|
-
*/
|
|
499
|
-
onContextEditableChange: function (oDialogDataModel, dataProperty) {
|
|
500
|
-
var objectsForVisibility = oDialogDataModel.getProperty("/values/".concat(dataProperty, "/objectsForVisibility")) || [];
|
|
501
|
-
var editable = objectsForVisibility.some(MassEditHelper.isEditable);
|
|
502
|
-
if (editable) {
|
|
503
|
-
oDialogDataModel.setProperty("/values/".concat(dataProperty, "/visible"), editable);
|
|
504
|
-
}
|
|
505
|
-
},
|
|
506
|
-
/**
|
|
507
|
-
* Update Managed Object Any for visibility of the mass edit fields.
|
|
508
|
-
*
|
|
509
|
-
* @param mOToUse The ManagedObject Any to be used to calculate the visible value of the binding.
|
|
510
|
-
* @param oDialogDataModel Model to be used runtime.
|
|
511
|
-
* @param dataProperty Field name.
|
|
512
|
-
* @param values Values of the field.
|
|
513
|
-
*/
|
|
514
|
-
updateOnContextChange: function (mOToUse, oDialogDataModel, dataProperty, values) {
|
|
515
|
-
var binding = mOToUse.getBinding("any");
|
|
516
|
-
values.objectsForVisibility = values.objectsForVisibility || [];
|
|
517
|
-
values.objectsForVisibility.push(mOToUse);
|
|
518
|
-
binding === null || binding === void 0 ? void 0 : binding.attachChange(MassEditHelper.onContextEditableChange.bind(null, oDialogDataModel, dataProperty));
|
|
519
|
-
},
|
|
520
|
-
/**
|
|
521
|
-
* Get bound object to calculate the visibility of contexts.
|
|
522
|
-
*
|
|
523
|
-
* @param expBinding Binding String object.
|
|
524
|
-
* @param context Context the binding value.
|
|
525
|
-
* @returns The ManagedObject Any to be used to calculate the visible value of the binding.
|
|
526
|
-
*/
|
|
527
|
-
getBoundObject: function (expBinding, context) {
|
|
528
|
-
var mOToUse = new Any({
|
|
529
|
-
any: expBinding
|
|
530
|
-
});
|
|
531
|
-
var model = context.getModel();
|
|
532
|
-
mOToUse.setModel(model);
|
|
533
|
-
mOToUse.setBindingContext(context);
|
|
534
|
-
return mOToUse;
|
|
535
|
-
},
|
|
536
|
-
/**
|
|
537
|
-
* Get the visibility of the field.
|
|
538
|
-
*
|
|
539
|
-
* @param expBinding Binding String object.
|
|
540
|
-
* @param oDialogDataModel Model to be used runtime.
|
|
541
|
-
* @param dataProperty Field name.
|
|
542
|
-
* @param values Values of the field.
|
|
543
|
-
* @param context Context the binding value.
|
|
544
|
-
* @returns Returns true if the mass edit field is editable.
|
|
545
|
-
*/
|
|
546
|
-
getFieldVisiblity: function (expBinding, oDialogDataModel, dataProperty, values, context) {
|
|
547
|
-
var mOToUse = MassEditHelper.getBoundObject(expBinding, context);
|
|
548
|
-
var isContextEditable = MassEditHelper.isEditable(mOToUse);
|
|
549
|
-
if (!isContextEditable) {
|
|
550
|
-
MassEditHelper.updateOnContextChange(mOToUse, oDialogDataModel, dataProperty, values);
|
|
551
|
-
}
|
|
552
|
-
return isContextEditable;
|
|
553
|
-
},
|
|
554
|
-
/**
|
|
555
|
-
* Initializes a runtime model:
|
|
556
|
-
* => The model consists of values shown in the comboBox of the dialog (Leave Blank, Keep Existing Values, or any property value for the selected context, etc.)
|
|
557
|
-
* => The model will capture runtime changes in the results property (the value entered in the comboBox).
|
|
558
|
-
*
|
|
559
|
-
* @param aContexts Contexts for mass edit
|
|
560
|
-
* @param aDataArray Array containing data related to the dialog used by both the static and the runtime model
|
|
561
|
-
* @param oDefaultValues Default values from i18n
|
|
562
|
-
* @param dialogContext Transient context for mass edit dialog.
|
|
563
|
-
* @returns The runtime model
|
|
564
|
-
*/
|
|
565
|
-
setRuntimeModelOnDialog: function (aContexts, aDataArray, oDefaultValues, dialogContext) {
|
|
566
|
-
var aValues = [];
|
|
567
|
-
var aUnitData = [];
|
|
568
|
-
var aResults = [];
|
|
569
|
-
var textPaths = [];
|
|
570
|
-
var aReadOnlyFieldInfo = [];
|
|
571
|
-
var oData = {
|
|
572
|
-
values: aValues,
|
|
573
|
-
unitData: aUnitData,
|
|
574
|
-
results: aResults,
|
|
575
|
-
readablePropertyData: aReadOnlyFieldInfo,
|
|
576
|
-
selectedKey: undefined,
|
|
577
|
-
textPaths: textPaths,
|
|
578
|
-
noFields: oDefaultValues.noFields
|
|
579
|
-
};
|
|
580
|
-
var oDialogDataModel = new JSONModel(oData);
|
|
581
|
-
aDataArray.forEach(function (oInData) {
|
|
582
|
-
var oTextInfo;
|
|
583
|
-
var sPropertyKey;
|
|
584
|
-
var sUnitPropertyName;
|
|
585
|
-
var oDistinctValueMap = {};
|
|
586
|
-
var oDistinctUnitMap = {};
|
|
587
|
-
if (oInData.dataProperty && oInData.dataProperty.indexOf("/") > -1) {
|
|
588
|
-
var aFinalPath = MassEditHelper.initLastLevelOfPropertyPath(oInData.dataProperty, aValues /*, dialogContext */);
|
|
589
|
-
var aPropertyPaths = oInData.dataProperty.split("/");
|
|
590
|
-
var _iterator = _createForOfIteratorHelper(aContexts),
|
|
591
|
-
_step;
|
|
592
|
-
try {
|
|
593
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
594
|
-
var context = _step.value;
|
|
595
|
-
var sMultiLevelPathValue = context.getObject(oInData.dataProperty);
|
|
596
|
-
sPropertyKey = "".concat(oInData.dataProperty, "/").concat(sMultiLevelPathValue);
|
|
597
|
-
if (!oDistinctValueMap[sPropertyKey] && aFinalPath[aPropertyPaths[aPropertyPaths.length - 1]]) {
|
|
598
|
-
oTextInfo = MassEditHelper.getTextArrangementInfo(oInData.dataProperty, oInData.descriptionPath, oInData.display, context);
|
|
599
|
-
aFinalPath[aPropertyPaths[aPropertyPaths.length - 1]].push({
|
|
600
|
-
text: oTextInfo && oTextInfo.fullText || sMultiLevelPathValue,
|
|
601
|
-
key: sPropertyKey,
|
|
602
|
-
textInfo: oTextInfo
|
|
603
|
-
});
|
|
604
|
-
oDistinctValueMap[sPropertyKey] = sMultiLevelPathValue;
|
|
605
|
-
}
|
|
606
|
-
}
|
|
607
|
-
// if (Object.keys(oDistinctValueMap).length === 1) {
|
|
608
|
-
// dialogContext.setProperty(oData.dataProperty, sPropertyKey && oDistinctValueMap[sPropertyKey]);
|
|
609
|
-
// }
|
|
610
|
-
} catch (err) {
|
|
611
|
-
_iterator.e(err);
|
|
612
|
-
} finally {
|
|
613
|
-
_iterator.f();
|
|
614
|
-
}
|
|
615
|
-
aFinalPath[aPropertyPaths[aPropertyPaths.length - 1]].textInfo = {
|
|
616
|
-
descriptionPath: oInData.descriptionPath,
|
|
617
|
-
valuePath: oInData.dataProperty,
|
|
618
|
-
displayMode: oInData.display
|
|
619
|
-
};
|
|
620
|
-
} else {
|
|
621
|
-
aValues[oInData.dataProperty] = aValues[oInData.dataProperty] || [];
|
|
622
|
-
aValues[oInData.dataProperty]["selectOptions"] = aValues[oInData.dataProperty]["selectOptions"] || [];
|
|
623
|
-
if (oInData.unitProperty) {
|
|
624
|
-
aUnitData[oInData.unitProperty] = aUnitData[oInData.unitProperty] || [];
|
|
625
|
-
aUnitData[oInData.unitProperty]["selectOptions"] = aUnitData[oInData.unitProperty]["selectOptions"] || [];
|
|
626
|
-
}
|
|
627
|
-
var _iterator2 = _createForOfIteratorHelper(aContexts),
|
|
628
|
-
_step2;
|
|
629
|
-
try {
|
|
630
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
631
|
-
var _context = _step2.value;
|
|
632
|
-
var oDataObject = _context.getObject();
|
|
633
|
-
sPropertyKey = "".concat(oInData.dataProperty, "/").concat(oDataObject[oInData.dataProperty]);
|
|
634
|
-
if (oInData.dataProperty && oDataObject[oInData.dataProperty] && !oDistinctValueMap[sPropertyKey]) {
|
|
635
|
-
if (oInData.inputType != "CheckBox") {
|
|
636
|
-
oTextInfo = MassEditHelper.getTextArrangementInfo(oInData.dataProperty, oInData.descriptionPath, oInData.display, _context);
|
|
637
|
-
var entry = {
|
|
638
|
-
text: oTextInfo && oTextInfo.fullText || oDataObject[oInData.dataProperty],
|
|
639
|
-
key: sPropertyKey,
|
|
640
|
-
textInfo: oTextInfo
|
|
641
|
-
};
|
|
642
|
-
aValues[oInData.dataProperty].push(entry);
|
|
643
|
-
aValues[oInData.dataProperty]["selectOptions"].push(entry);
|
|
644
|
-
}
|
|
645
|
-
oDistinctValueMap[sPropertyKey] = oDataObject[oInData.dataProperty];
|
|
646
|
-
}
|
|
647
|
-
if (oInData.unitProperty && oDataObject[oInData.unitProperty]) {
|
|
648
|
-
sUnitPropertyName = "".concat(oInData.unitProperty, "/").concat(oDataObject[oInData.unitProperty]);
|
|
649
|
-
if (!oDistinctUnitMap[sUnitPropertyName]) {
|
|
650
|
-
if (oInData.inputType != "CheckBox") {
|
|
651
|
-
oTextInfo = MassEditHelper.getTextArrangementInfo(oInData.unitProperty, oInData.descriptionPath, oInData.display, _context);
|
|
652
|
-
var unitEntry = {
|
|
653
|
-
text: oTextInfo && oTextInfo.fullText || oDataObject[oInData.unitProperty],
|
|
654
|
-
key: sUnitPropertyName,
|
|
655
|
-
textInfo: oTextInfo
|
|
656
|
-
};
|
|
657
|
-
aUnitData[oInData.unitProperty].push(unitEntry);
|
|
658
|
-
aUnitData[oInData.unitProperty]["selectOptions"].push(unitEntry);
|
|
659
|
-
}
|
|
660
|
-
oDistinctUnitMap[sUnitPropertyName] = oDataObject[oInData.unitProperty];
|
|
661
|
-
}
|
|
662
|
-
}
|
|
663
|
-
}
|
|
664
|
-
} catch (err) {
|
|
665
|
-
_iterator2.e(err);
|
|
666
|
-
} finally {
|
|
667
|
-
_iterator2.f();
|
|
668
|
-
}
|
|
669
|
-
aValues[oInData.dataProperty].textInfo = {
|
|
670
|
-
descriptionPath: oInData.descriptionPath,
|
|
671
|
-
valuePath: oInData.dataProperty,
|
|
672
|
-
displayMode: oInData.display
|
|
673
|
-
};
|
|
674
|
-
if (Object.keys(oDistinctValueMap).length === 1) {
|
|
675
|
-
dialogContext.setProperty(oInData.dataProperty, sPropertyKey && oDistinctValueMap[sPropertyKey]);
|
|
676
|
-
}
|
|
677
|
-
if (Object.keys(oDistinctUnitMap).length === 1) {
|
|
678
|
-
dialogContext.setProperty(oInData.unitProperty, sUnitPropertyName && oDistinctUnitMap[sUnitPropertyName]);
|
|
679
|
-
}
|
|
680
|
-
}
|
|
681
|
-
textPaths[oInData.dataProperty] = oInData.descriptionPath ? [oInData.descriptionPath] : [];
|
|
682
|
-
});
|
|
683
|
-
aDataArray.forEach(function (oInData) {
|
|
684
|
-
var values = {};
|
|
685
|
-
if (oInData.dataProperty.indexOf("/") > -1) {
|
|
686
|
-
var sMultiLevelPropPathValue = MassEditHelper.getValueForMultiLevelPath(oInData.dataProperty, aValues);
|
|
687
|
-
if (!sMultiLevelPropPathValue) {
|
|
688
|
-
sMultiLevelPropPathValue.push({
|
|
689
|
-
text: oDefaultValues.leaveBlankValue,
|
|
690
|
-
key: "Empty/".concat(oInData.dataProperty)
|
|
691
|
-
});
|
|
692
|
-
} else {
|
|
693
|
-
MassEditHelper.setDefaultValuesToDialog(sMultiLevelPropPathValue, oDefaultValues, oInData);
|
|
694
|
-
}
|
|
695
|
-
values = sMultiLevelPropPathValue;
|
|
696
|
-
} else if (aValues[oInData.dataProperty]) {
|
|
697
|
-
aValues[oInData.dataProperty] = aValues[oInData.dataProperty] || [];
|
|
698
|
-
MassEditHelper.setDefaultValuesToDialog(aValues[oInData.dataProperty], oDefaultValues, oInData);
|
|
699
|
-
values = aValues[oInData.dataProperty];
|
|
700
|
-
}
|
|
701
|
-
if (aUnitData[oInData.unitProperty] && aUnitData[oInData.unitProperty].length) {
|
|
702
|
-
MassEditHelper.setDefaultValuesToDialog(aUnitData[oInData.unitProperty], oDefaultValues, oInData, true);
|
|
703
|
-
aUnitData[oInData.unitProperty].textInfo = {};
|
|
704
|
-
aUnitData[oInData.unitProperty].selectedKey = MassEditHelper.getDefaultSelectionPathComboBox(aContexts, oInData.unitProperty);
|
|
705
|
-
aUnitData[oInData.unitProperty].inputType = oInData.inputType;
|
|
706
|
-
} else if (oInData.dataProperty && aValues[oInData.dataProperty] && !aValues[oInData.dataProperty].length || oInData.unitProperty && aUnitData[oInData.unitProperty] && !aUnitData[oInData.unitProperty].length) {
|
|
707
|
-
var bClearFieldOrBlankValueExists = aValues[oInData.dataProperty] && aValues[oInData.dataProperty].some(function (obj) {
|
|
708
|
-
return obj.text === "< Clear Values >" || obj.text === "< Leave Blank >";
|
|
709
|
-
});
|
|
710
|
-
if (oInData.dataProperty && !bClearFieldOrBlankValueExists) {
|
|
711
|
-
aValues[oInData.dataProperty].push({
|
|
712
|
-
text: oDefaultValues.leaveBlankValue,
|
|
713
|
-
key: "Empty/".concat(oInData.dataProperty)
|
|
714
|
-
});
|
|
715
|
-
}
|
|
716
|
-
var bClearFieldOrBlankUnitValueExists = aUnitData[oInData.unitProperty] && aUnitData[oInData.unitProperty].some(function (obj) {
|
|
717
|
-
return obj.text === "< Clear Values >" || obj.text === "< Leave Blank >";
|
|
718
|
-
});
|
|
719
|
-
if (oInData.unitProperty) {
|
|
720
|
-
if (!bClearFieldOrBlankUnitValueExists) {
|
|
721
|
-
aUnitData[oInData.unitProperty].push({
|
|
722
|
-
text: oDefaultValues.leaveBlankValue,
|
|
723
|
-
key: "Empty/".concat(oInData.unitProperty)
|
|
724
|
-
});
|
|
725
|
-
}
|
|
726
|
-
aUnitData[oInData.unitProperty].textInfo = {};
|
|
727
|
-
aUnitData[oInData.unitProperty].selectedKey = MassEditHelper.getDefaultSelectionPathComboBox(aContexts, oInData.unitProperty);
|
|
728
|
-
aUnitData[oInData.unitProperty].inputType = oInData.inputType;
|
|
729
|
-
}
|
|
730
|
-
}
|
|
731
|
-
if (oInData.isPropertyReadOnly && typeof oInData.isPropertyReadOnly === "boolean") {
|
|
732
|
-
aReadOnlyFieldInfo.push({
|
|
733
|
-
property: oInData.dataProperty,
|
|
734
|
-
value: oInData.isPropertyReadOnly,
|
|
735
|
-
type: "Default"
|
|
736
|
-
});
|
|
737
|
-
} else if (oInData.isPropertyReadOnly && oInData.isPropertyReadOnly.operands && oInData.isPropertyReadOnly.operands[0] && oInData.isPropertyReadOnly.operands[0].operand1 && oInData.isPropertyReadOnly.operands[0].operand2) {
|
|
738
|
-
// This needs to be refactored in accordance with the ReadOnlyExpression change
|
|
739
|
-
aReadOnlyFieldInfo.push({
|
|
740
|
-
property: oInData.dataProperty,
|
|
741
|
-
propertyPath: oInData.isPropertyReadOnly.operands[0].operand1.path,
|
|
742
|
-
propertyValue: oInData.isPropertyReadOnly.operands[0].operand2.value,
|
|
743
|
-
type: "Path"
|
|
744
|
-
});
|
|
745
|
-
}
|
|
746
|
-
|
|
747
|
-
// Setting visbility of the mass edit field.
|
|
748
|
-
if (oInData.editMode) {
|
|
749
|
-
values.visible = oInData.editMode === EditMode.Editable || aContexts.some(MassEditHelper.getFieldVisiblity.bind(MassEditHelper, oInData.editMode, oDialogDataModel, oInData.dataProperty, values));
|
|
750
|
-
} else {
|
|
751
|
-
values.visible = true;
|
|
752
|
-
}
|
|
753
|
-
values.selectedKey = MassEditHelper.getDefaultSelectionPathComboBox(aContexts, oInData.dataProperty);
|
|
754
|
-
values.inputType = oInData.inputType;
|
|
755
|
-
values.unitProperty = oInData.unitProperty;
|
|
756
|
-
});
|
|
757
|
-
return oDialogDataModel;
|
|
758
|
-
},
|
|
759
|
-
/**
|
|
760
|
-
* Gets transient context for dialog.
|
|
761
|
-
*
|
|
762
|
-
* @param table Instance of Table.
|
|
763
|
-
* @param dialog Mass Edit Dialog.
|
|
764
|
-
* @returns Promise returning instance of dialog.
|
|
765
|
-
*/
|
|
766
|
-
getDialogContext: function (table, dialog) {
|
|
767
|
-
var transCtx = dialog && dialog.getBindingContext();
|
|
768
|
-
if (!transCtx) {
|
|
769
|
-
var model = table.getModel();
|
|
770
|
-
var listBinding = table.getRowBinding();
|
|
771
|
-
var transientListBinding = model.bindList(listBinding.getPath(), listBinding.getContext(), [], [], {
|
|
772
|
-
$$updateGroupId: "submitLater"
|
|
773
|
-
});
|
|
774
|
-
transientListBinding.refreshInternal = function () {
|
|
775
|
-
/* */
|
|
776
|
-
};
|
|
777
|
-
transCtx = transientListBinding.create({}, true);
|
|
778
|
-
}
|
|
779
|
-
return transCtx;
|
|
780
|
-
},
|
|
781
|
-
onDialogOpen: function (event) {
|
|
782
|
-
var source = event.getSource();
|
|
783
|
-
var fieldsInfoModel = source.getModel("fieldsInfo");
|
|
784
|
-
fieldsInfoModel.setProperty("/isOpen", true);
|
|
785
|
-
},
|
|
786
|
-
closeDialog: function (oDialog) {
|
|
787
|
-
oDialog.close();
|
|
788
|
-
oDialog.destroy();
|
|
789
|
-
},
|
|
790
|
-
messageHandlingForMassEdit: function (oTable, aContexts, oController, oInDialog, aResults, errorContexts) {
|
|
791
|
-
try {
|
|
792
|
-
var _oController$getView, _oController$getView$, _oController$getView4, _oController$getView5;
|
|
793
|
-
var DraftStatus = FELibrary.DraftStatus;
|
|
794
|
-
var oResourceBundle = Core.getLibraryResourceBundle("sap.fe.core");
|
|
795
|
-
(_oController$getView = oController.getView()) === null || _oController$getView === void 0 ? void 0 : (_oController$getView$ = _oController$getView.getBindingContext("internal")) === null || _oController$getView$ === void 0 ? void 0 : _oController$getView$.setProperty("getBoundMessagesForMassEdit", true);
|
|
796
|
-
oController._editFlow.getMessageHandler().showMessages({
|
|
797
|
-
onBeforeShowMessage: function (messages, showMessageParameters) {
|
|
798
|
-
//messages.concatenate(messageHandling.getMessages(true, true));
|
|
799
|
-
showMessageParameters.fnGetMessageSubtitle = messageHandling.setMessageSubtitle.bind({}, oTable, aContexts);
|
|
800
|
-
var unboundErrors = [];
|
|
801
|
-
messages.forEach(function (message) {
|
|
802
|
-
if (!message.getTarget()) {
|
|
803
|
-
unboundErrors.push(message);
|
|
804
|
-
}
|
|
805
|
-
});
|
|
806
|
-
if (aResults.length > 0 && errorContexts.length === 0) {
|
|
807
|
-
oController._editFlow.setDraftStatus(DraftStatus.Saved);
|
|
808
|
-
var successToast = oResourceBundle.getText("C_MASS_EDIT_SUCCESS_TOAST");
|
|
809
|
-
MessageToast.show(successToast);
|
|
810
|
-
} else if (errorContexts.length < oTable.getSelectedContexts().length) {
|
|
811
|
-
oController._editFlow.setDraftStatus(DraftStatus.Saved);
|
|
812
|
-
} else if (errorContexts.length === oTable.getSelectedContexts().length) {
|
|
813
|
-
oController._editFlow.setDraftStatus(DraftStatus.Clear);
|
|
814
|
-
}
|
|
815
|
-
if (oController.getModel("ui").getProperty("/isEditable") && unboundErrors.length === 0) {
|
|
816
|
-
showMessageParameters.showMessageBox = false;
|
|
817
|
-
showMessageParameters.showMessageDialog = false;
|
|
818
|
-
}
|
|
819
|
-
return showMessageParameters;
|
|
820
|
-
}
|
|
821
|
-
});
|
|
822
|
-
if (oInDialog.isOpen()) {
|
|
823
|
-
var _oController$getView2, _oController$getView3;
|
|
824
|
-
MassEditHelper.closeDialog(oInDialog);
|
|
825
|
-
(_oController$getView2 = oController.getView()) === null || _oController$getView2 === void 0 ? void 0 : (_oController$getView3 = _oController$getView2.getBindingContext("internal")) === null || _oController$getView3 === void 0 ? void 0 : _oController$getView3.setProperty("skipPatchHandlers", false);
|
|
826
|
-
}
|
|
827
|
-
(_oController$getView4 = oController.getView()) === null || _oController$getView4 === void 0 ? void 0 : (_oController$getView5 = _oController$getView4.getBindingContext("internal")) === null || _oController$getView5 === void 0 ? void 0 : _oController$getView5.setProperty("getBoundMessagesForMassEdit", false);
|
|
828
|
-
return Promise.resolve();
|
|
829
|
-
} catch (e) {
|
|
830
|
-
return Promise.reject(e);
|
|
831
|
-
}
|
|
832
|
-
},
|
|
833
|
-
/**
|
|
834
|
-
* This function generates side effects map from side effects ids(which is a combination of entity type and qualifier).
|
|
835
|
-
*
|
|
836
|
-
* @param oEntitySetContext
|
|
837
|
-
* @param aSideEffects
|
|
838
|
-
* @param oController
|
|
839
|
-
* @param aResults
|
|
840
|
-
* @returns Side effect map with data.
|
|
841
|
-
*/
|
|
842
|
-
getSideEffectDataForKey: function (oEntitySetContext, aSideEffects, oController, aResults) {
|
|
843
|
-
var sOwnerEntityType = oEntitySetContext.getProperty("$Type");
|
|
844
|
-
var baseSideEffectsMapArray = {};
|
|
845
|
-
aResults.forEach(function (result) {
|
|
846
|
-
var sPath = result.keyValue;
|
|
847
|
-
var sideEffectsArray = FieldHelper.getSideEffectsOnEntityAndProperty(sPath, sOwnerEntityType, aSideEffects);
|
|
848
|
-
baseSideEffectsMapArray[sPath] = oController._sideEffects.generateSideEffectsMapFromSideEffectId(sideEffectsArray);
|
|
849
|
-
});
|
|
850
|
-
return baseSideEffectsMapArray;
|
|
851
|
-
},
|
|
852
|
-
/**
|
|
853
|
-
* Give the entity type for a given spath for e.g.RequestedQuantity.
|
|
854
|
-
*
|
|
855
|
-
* @param sPath
|
|
856
|
-
* @param sEntityType
|
|
857
|
-
* @param oMetaModel
|
|
858
|
-
* @returns Object having entity, spath and navigation path.
|
|
859
|
-
*/
|
|
860
|
-
fnGetPathForSourceProperty: function (sPath, sEntityType, oMetaModel) {
|
|
861
|
-
// if the property path has a navigation, get the target entity type of the navigation
|
|
862
|
-
var sNavigationPath = sPath.indexOf("/") > 0 ? "/" + sEntityType + "/" + sPath.substr(0, sPath.lastIndexOf("/") + 1) + "@sapui.name" : false,
|
|
863
|
-
pOwnerEntity = !sNavigationPath ? Promise.resolve(sEntityType) : oMetaModel.requestObject(sNavigationPath);
|
|
864
|
-
sPath = sNavigationPath ? sPath.substr(sPath.lastIndexOf("/") + 1) : sPath;
|
|
865
|
-
return {
|
|
866
|
-
sPath: sPath,
|
|
867
|
-
pOwnerEntity: pOwnerEntity,
|
|
868
|
-
sNavigationPath: sNavigationPath
|
|
869
|
-
};
|
|
870
|
-
},
|
|
871
|
-
fnGetEntityTypeOfOwner: function (oMetaModel, baseNavPath, oEntitySetContext, targetEntity, aTargets) {
|
|
872
|
-
var ownerEntityType = oEntitySetContext.getProperty("$Type");
|
|
873
|
-
var _oMetaModel$getObject = oMetaModel.getObject("".concat(oEntitySetContext, "/").concat(baseNavPath)),
|
|
874
|
-
pOwner = _oMetaModel$getObject.$Type,
|
|
875
|
-
ownerNavPath = _oMetaModel$getObject.$Partner; // nav path
|
|
876
|
-
if (ownerNavPath) {
|
|
877
|
-
var entityObjOfOwnerPartner = oMetaModel.getObject("/".concat(pOwner, "/").concat(ownerNavPath));
|
|
878
|
-
if (entityObjOfOwnerPartner) {
|
|
879
|
-
var entityTypeOfOwnerPartner = entityObjOfOwnerPartner["$Type"];
|
|
880
|
-
// if the entity types defer, then base nav path is not from owner
|
|
881
|
-
if (entityTypeOfOwnerPartner !== ownerEntityType) {
|
|
882
|
-
// if target Prop is not from owner, we add it as immediate
|
|
883
|
-
aTargets.push(targetEntity);
|
|
884
|
-
}
|
|
885
|
-
}
|
|
886
|
-
} else {
|
|
887
|
-
// if there is no $Partner attribute, it may not be from owner
|
|
888
|
-
aTargets.push(targetEntity);
|
|
889
|
-
}
|
|
890
|
-
return aTargets;
|
|
891
|
-
},
|
|
892
|
-
/**
|
|
893
|
-
* Give targets that are immediate or deferred based on the entity type of that target.
|
|
894
|
-
*
|
|
895
|
-
*
|
|
896
|
-
* @param sideEffectsData
|
|
897
|
-
* @param oEntitySetContext
|
|
898
|
-
* @param sEntityType
|
|
899
|
-
* @param oMetaModel
|
|
900
|
-
* @returns Targets to request side effects.
|
|
901
|
-
*/
|
|
902
|
-
fnGetTargetsForMassEdit: function (sideEffectsData, oEntitySetContext, sEntityType, oMetaModel) {
|
|
903
|
-
var aTargetProperties = sideEffectsData.TargetProperties,
|
|
904
|
-
aTargetEntities = sideEffectsData.TargetEntities;
|
|
905
|
-
var aPromises = [];
|
|
906
|
-
var aTargets = [];
|
|
907
|
-
var ownerEntityType = oEntitySetContext.getProperty("$Type");
|
|
908
|
-
if (sEntityType === ownerEntityType) {
|
|
909
|
-
// if SalesOrdr Item
|
|
910
|
-
aTargetEntities === null || aTargetEntities === void 0 ? void 0 : aTargetEntities.forEach(function (targetEntity) {
|
|
911
|
-
targetEntity = targetEntity["$NavigationPropertyPath"];
|
|
912
|
-
var baseNavPath;
|
|
913
|
-
if (targetEntity.includes("/")) {
|
|
914
|
-
baseNavPath = targetEntity.split("/")[0];
|
|
915
|
-
} else {
|
|
916
|
-
baseNavPath = targetEntity;
|
|
917
|
-
}
|
|
918
|
-
aTargets = MassEditHelper.fnGetEntityTypeOfOwner(oMetaModel, baseNavPath, oEntitySetContext, targetEntity, aTargets);
|
|
919
|
-
});
|
|
920
|
-
}
|
|
921
|
-
if (aTargetProperties.length) {
|
|
922
|
-
aTargetProperties.forEach(function (targetProp) {
|
|
923
|
-
var _MassEditHelper$fnGet = MassEditHelper.fnGetPathForSourceProperty(targetProp, sEntityType, oMetaModel),
|
|
924
|
-
pOwnerEntity = _MassEditHelper$fnGet.pOwnerEntity;
|
|
925
|
-
aPromises.push(pOwnerEntity.then(function (resultEntity) {
|
|
926
|
-
// if entity is SalesOrderItem, Target Property is from Items table
|
|
927
|
-
if (resultEntity === ownerEntityType) {
|
|
928
|
-
aTargets.push(targetProp); // get immediate targets
|
|
929
|
-
} else if (targetProp.includes("/")) {
|
|
930
|
-
var baseNavPath = targetProp.split("/")[0];
|
|
931
|
-
aTargets = MassEditHelper.fnGetEntityTypeOfOwner(oMetaModel, baseNavPath, oEntitySetContext, targetProp, aTargets);
|
|
932
|
-
}
|
|
933
|
-
return Promise.resolve(aTargets);
|
|
934
|
-
}));
|
|
935
|
-
});
|
|
936
|
-
} else {
|
|
937
|
-
aPromises.push(Promise.resolve(aTargets));
|
|
938
|
-
}
|
|
939
|
-
return Promise.all(aPromises);
|
|
940
|
-
},
|
|
941
|
-
/**
|
|
942
|
-
* This function checks if in the given side Effects Obj, if _Item is set as Target Entity for any side Effects on
|
|
943
|
-
* other entity set.
|
|
944
|
-
*
|
|
945
|
-
* @param sideEffectsMap
|
|
946
|
-
* @param oEntitySetContext
|
|
947
|
-
* @returns Length of sideEffectsArray where current Entity is set as Target Entity
|
|
948
|
-
*/
|
|
949
|
-
checkIfEntityExistsAsTargetEntity: function (sideEffectsMap, oEntitySetContext) {
|
|
950
|
-
var ownerEntityType = oEntitySetContext.getProperty("$Type");
|
|
951
|
-
var sideEffectsOnOtherEntity = Object.values(sideEffectsMap).filter(function (obj) {
|
|
952
|
-
return obj.name.indexOf(ownerEntityType) == -1;
|
|
953
|
-
});
|
|
954
|
-
var entitySetName = oEntitySetContext.getPath().split("/").pop();
|
|
955
|
-
var sideEffectsWithCurrentEntityAsTarget = sideEffectsOnOtherEntity.filter(function (obj) {
|
|
956
|
-
var targetEntitiesArray = obj.sideEffects.TargetEntities;
|
|
957
|
-
return targetEntitiesArray !== null && targetEntitiesArray !== void 0 && targetEntitiesArray.filter(function (innerObj) {
|
|
958
|
-
return innerObj["$NavigationPropertyPath"] === entitySetName;
|
|
959
|
-
}).length ? obj : false;
|
|
960
|
-
});
|
|
961
|
-
return sideEffectsWithCurrentEntityAsTarget.length;
|
|
962
|
-
},
|
|
963
|
-
/**
|
|
964
|
-
* Upon updating the field, array of immediate and deferred side effects for that field are created.
|
|
965
|
-
* If there are any failed side effects for that context, they will also be used to generate the map.
|
|
966
|
-
* If the field has text associated with it, then add it to request side effects.
|
|
967
|
-
*
|
|
968
|
-
* @param mParams
|
|
969
|
-
* @param mParams.oController Controller
|
|
970
|
-
* @param mParams.oFieldPromise Promise to update field
|
|
971
|
-
* @param mParams.sideEffectMap SideEffectsMap for the field
|
|
972
|
-
* @param mParams.textPaths TextPaths of the field if any
|
|
973
|
-
* @param mParams.groupId Group Id to used to group requests
|
|
974
|
-
* @param mParams.key KeyValue of the field
|
|
975
|
-
* @param mParams.oEntitySetContext EntitySetcontext
|
|
976
|
-
* @param mParams.oMetaModel Metamodel data
|
|
977
|
-
* @param mParams.selectedContext Selected row context
|
|
978
|
-
* @param mParams.deferredTargetsForAQualifiedName Deferred targets data
|
|
979
|
-
* @returns Promise for all immediately requested side effects.
|
|
980
|
-
*/
|
|
981
|
-
handleMassEditFieldUpdateAndRequestSideEffects: function (mParams) {
|
|
982
|
-
try {
|
|
983
|
-
var _ret = function () {
|
|
984
|
-
var oController = mParams.oController,
|
|
985
|
-
oFieldPromise = mParams.oFieldPromise,
|
|
986
|
-
sideEffectsMap = mParams.sideEffectsMap,
|
|
987
|
-
textPaths = mParams.textPaths,
|
|
988
|
-
groupId = mParams.groupId,
|
|
989
|
-
key = mParams.key,
|
|
990
|
-
oEntitySetContext = mParams.oEntitySetContext,
|
|
991
|
-
oMetaModel = mParams.oMetaModel,
|
|
992
|
-
oSelectedContext = mParams.oSelectedContext,
|
|
993
|
-
deferredTargetsForAQualifiedName = mParams.deferredTargetsForAQualifiedName;
|
|
994
|
-
var immediateSideEffectsPromises = [oFieldPromise];
|
|
995
|
-
var ownerEntityType = oEntitySetContext.getProperty("$Type");
|
|
996
|
-
var oAppComponent = CommonUtils.getAppComponent(oController.getView());
|
|
997
|
-
var oSideEffectsService = oAppComponent.getSideEffectsService();
|
|
998
|
-
var isSideEffectsWithCurrentEntityAsTarget = MassEditHelper.checkIfEntityExistsAsTargetEntity(sideEffectsMap, oEntitySetContext);
|
|
999
|
-
if (sideEffectsMap) {
|
|
1000
|
-
var allEntityTypesWithQualifier = Object.keys(sideEffectsMap);
|
|
1001
|
-
var sideEffectsDataForField = Object.values(sideEffectsMap);
|
|
1002
|
-
var mVisitedSideEffects = {};
|
|
1003
|
-
deferredTargetsForAQualifiedName[key] = {};
|
|
1004
|
-
var _iterator3 = _createForOfIteratorHelper(sideEffectsDataForField.entries()),
|
|
1005
|
-
_step3;
|
|
1006
|
-
try {
|
|
1007
|
-
var _loop = function () {
|
|
1008
|
-
var _step3$value = _slicedToArray(_step3.value, 2),
|
|
1009
|
-
index = _step3$value[0],
|
|
1010
|
-
data = _step3$value[1];
|
|
1011
|
-
var entityTypeWithQualifier = allEntityTypesWithQualifier[index];
|
|
1012
|
-
var sEntityType = entityTypeWithQualifier.split("#")[0];
|
|
1013
|
-
var oContext = oController._sideEffects.getContextForSideEffects(oSelectedContext, sEntityType);
|
|
1014
|
-
data.context = oContext;
|
|
1015
|
-
var allFailedSideEffects = oController._sideEffects.getRegisteredFailedRequests();
|
|
1016
|
-
var aFailedSideEffects = allFailedSideEffects[oContext.getPath()];
|
|
1017
|
-
oController._sideEffects.deleteFailedRequestsForAContext(oContext);
|
|
1018
|
-
var sideEffectsForCurrentContext = [data.sideEffects];
|
|
1019
|
-
sideEffectsForCurrentContext = aFailedSideEffects && aFailedSideEffects.length ? sideEffectsForCurrentContext.concat(aFailedSideEffects) : sideEffectsForCurrentContext;
|
|
1020
|
-
mVisitedSideEffects[oContext] = {};
|
|
1021
|
-
var _iterator4 = _createForOfIteratorHelper(sideEffectsForCurrentContext),
|
|
1022
|
-
_step4;
|
|
1023
|
-
try {
|
|
1024
|
-
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
1025
|
-
var aSideEffect = _step4.value;
|
|
1026
|
-
if (!mVisitedSideEffects[oContext].hasOwnProperty(aSideEffect.fullyQualifiedName)) {
|
|
1027
|
-
(function () {
|
|
1028
|
-
mVisitedSideEffects[oContext][aSideEffect.fullyQualifiedName] = true;
|
|
1029
|
-
var aImmediateTargets = [],
|
|
1030
|
-
allTargets = [],
|
|
1031
|
-
triggerActionName = void 0;
|
|
1032
|
-
var fnGetImmediateTargetsAndActions = function (mSideEffect) {
|
|
1033
|
-
try {
|
|
1034
|
-
var aTargetProperties = mSideEffect.TargetProperties,
|
|
1035
|
-
aTargetEntities = mSideEffect.TargetEntities;
|
|
1036
|
-
var sideEffectEntityType = mSideEffect.fullyQualifiedName.split("@")[0];
|
|
1037
|
-
return Promise.resolve(MassEditHelper.fnGetTargetsForMassEdit(mSideEffect, oEntitySetContext, sideEffectEntityType, oMetaModel)).then(function (targetsArrayForAllProperties) {
|
|
1038
|
-
aImmediateTargets = targetsArrayForAllProperties[0];
|
|
1039
|
-
allTargets = (aTargetProperties || []).concat(aTargetEntities || []);
|
|
1040
|
-
var actionName = mSideEffect.TriggerAction;
|
|
1041
|
-
var aDeferredTargets = allTargets.filter(function (target) {
|
|
1042
|
-
return !aImmediateTargets.includes(target);
|
|
1043
|
-
});
|
|
1044
|
-
deferredTargetsForAQualifiedName[key][mSideEffect.fullyQualifiedName] = {
|
|
1045
|
-
aTargets: aDeferredTargets,
|
|
1046
|
-
oContext: oContext,
|
|
1047
|
-
mSideEffect: mSideEffect
|
|
1048
|
-
};
|
|
1049
|
-
|
|
1050
|
-
// if entity is other than items table then action is defered
|
|
1051
|
-
if (actionName && sideEffectEntityType === ownerEntityType) {
|
|
1052
|
-
// static action is on collection, so we defer it, else add to immediate requests array
|
|
1053
|
-
var isStaticAction = TableHelper._isStaticAction(oMetaModel.getObject("/".concat(actionName)), actionName);
|
|
1054
|
-
if (!isStaticAction) {
|
|
1055
|
-
triggerActionName = actionName;
|
|
1056
|
-
} else {
|
|
1057
|
-
deferredTargetsForAQualifiedName[key][mSideEffect.fullyQualifiedName]["TriggerAction"] = actionName;
|
|
1058
|
-
}
|
|
1059
|
-
} else {
|
|
1060
|
-
deferredTargetsForAQualifiedName[key][mSideEffect.fullyQualifiedName]["TriggerAction"] = actionName;
|
|
1061
|
-
}
|
|
1062
|
-
if (isSideEffectsWithCurrentEntityAsTarget) {
|
|
1063
|
-
aImmediateTargets = [];
|
|
1064
|
-
}
|
|
1065
|
-
return {
|
|
1066
|
-
aTargets: aImmediateTargets,
|
|
1067
|
-
TriggerAction: triggerActionName
|
|
1068
|
-
};
|
|
1069
|
-
});
|
|
1070
|
-
} catch (e) {
|
|
1071
|
-
return Promise.reject(e);
|
|
1072
|
-
}
|
|
1073
|
-
};
|
|
1074
|
-
immediateSideEffectsPromises.push(oController._sideEffects.requestSideEffects(aSideEffect, oContext, groupId, fnGetImmediateTargetsAndActions));
|
|
1075
|
-
})();
|
|
1076
|
-
}
|
|
1077
|
-
}
|
|
1078
|
-
} catch (err) {
|
|
1079
|
-
_iterator4.e(err);
|
|
1080
|
-
} finally {
|
|
1081
|
-
_iterator4.f();
|
|
1082
|
-
}
|
|
1083
|
-
};
|
|
1084
|
-
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
1085
|
-
_loop();
|
|
1086
|
-
}
|
|
1087
|
-
} catch (err) {
|
|
1088
|
-
_iterator3.e(err);
|
|
1089
|
-
} finally {
|
|
1090
|
-
_iterator3.f();
|
|
1091
|
-
}
|
|
1092
|
-
}
|
|
1093
|
-
if (textPaths !== null && textPaths !== void 0 && textPaths[key] && textPaths[key].length) {
|
|
1094
|
-
immediateSideEffectsPromises.push(oSideEffectsService.requestSideEffects(textPaths[key], oSelectedContext, groupId));
|
|
1095
|
-
}
|
|
1096
|
-
return {
|
|
1097
|
-
v: Promise.resolve(Promise.allSettled(immediateSideEffectsPromises))
|
|
1098
|
-
};
|
|
1099
|
-
}();
|
|
1100
|
-
if (typeof _ret === "object") return _ret.v;
|
|
1101
|
-
} catch (e) {
|
|
1102
|
-
return Promise.reject(e);
|
|
1103
|
-
}
|
|
1104
|
-
},
|
|
1105
|
-
/**
|
|
1106
|
-
* Create the mass edit dialog.
|
|
1107
|
-
*
|
|
1108
|
-
* @param oTable Instance of Table
|
|
1109
|
-
* @param aContexts Contexts for mass edit
|
|
1110
|
-
* @param oController Controller for the view
|
|
1111
|
-
* @returns Promise returning instance of dialog.
|
|
1112
|
-
*/
|
|
1113
|
-
createDialog: function (oTable, aContexts, oController) {
|
|
1114
|
-
try {
|
|
1115
|
-
var sFragmentName = "sap/fe/core/controls/massEdit/MassEditDialog",
|
|
1116
|
-
aDataArray = [],
|
|
1117
|
-
oResourceBundle = Core.getLibraryResourceBundle("sap.fe.core"),
|
|
1118
|
-
oDefaultValues = MassEditHelper.getDefaultTextsForDialog(oResourceBundle, aContexts.length, oTable),
|
|
1119
|
-
oDataFieldModel = MassEditHelper.prepareDataForDialog(oTable, aContexts, aDataArray),
|
|
1120
|
-
dialogContext = MassEditHelper.getDialogContext(oTable),
|
|
1121
|
-
oDialogDataModel = MassEditHelper.setRuntimeModelOnDialog(aContexts, aDataArray, oDefaultValues, dialogContext),
|
|
1122
|
-
model = oTable.getModel(),
|
|
1123
|
-
metaModel = model.getMetaModel(),
|
|
1124
|
-
itemsModel = new TemplateModel(oDataFieldModel.getData(), metaModel);
|
|
1125
|
-
var oFragment = XMLTemplateProcessor.loadTemplate(sFragmentName, "fragment");
|
|
1126
|
-
return Promise.resolve(Promise.resolve(XMLPreprocessor.process(oFragment, {
|
|
1127
|
-
name: sFragmentName
|
|
1128
|
-
}, {
|
|
1129
|
-
bindingContexts: {
|
|
1130
|
-
dataFieldModel: itemsModel.createBindingContext("/"),
|
|
1131
|
-
metaModel: metaModel.createBindingContext("/"),
|
|
1132
|
-
contextPath: metaModel.createBindingContext(metaModel.getMetaPath(dialogContext.getPath()))
|
|
1133
|
-
},
|
|
1134
|
-
models: {
|
|
1135
|
-
dataFieldModel: itemsModel,
|
|
1136
|
-
metaModel: metaModel,
|
|
1137
|
-
contextPath: metaModel
|
|
1138
|
-
}
|
|
1139
|
-
}))).then(function (oCreatedFragment) {
|
|
1140
|
-
return Promise.resolve(Fragment.load({
|
|
1141
|
-
definition: oCreatedFragment
|
|
1142
|
-
})).then(function (oDialogContent) {
|
|
1143
|
-
var oDialog = new Dialog({
|
|
1144
|
-
resizable: true,
|
|
1145
|
-
title: oDefaultValues.massEditTitle,
|
|
1146
|
-
content: [oDialogContent],
|
|
1147
|
-
afterOpen: MassEditHelper.onDialogOpen,
|
|
1148
|
-
beginButton: new Button({
|
|
1149
|
-
text: MassEditHelper.helpers.getExpBindingForApplyButtonTxt(oDefaultValues, oDataFieldModel.getObject("/")),
|
|
1150
|
-
type: "Emphasized",
|
|
1151
|
-
press: function (oEvent) {
|
|
1152
|
-
try {
|
|
1153
|
-
var _oController$getView6, _oController$getView7;
|
|
1154
|
-
messageHandling.removeBoundTransitionMessages();
|
|
1155
|
-
messageHandling.removeUnboundTransitionMessages();
|
|
1156
|
-
(_oController$getView6 = oController.getView()) === null || _oController$getView6 === void 0 ? void 0 : (_oController$getView7 = _oController$getView6.getBindingContext("internal")) === null || _oController$getView7 === void 0 ? void 0 : _oController$getView7.setProperty("skipPatchHandlers", true);
|
|
1157
|
-
var oInDialog = oEvent.getSource().getParent();
|
|
1158
|
-
var oModel = oInDialog.getModel("fieldsInfo");
|
|
1159
|
-
var aResults = oModel.getProperty("/results");
|
|
1160
|
-
var oMetaModel = oTable && oTable.getModel().getMetaModel(),
|
|
1161
|
-
sCurrentEntitySetName = oTable.data("metaPath"),
|
|
1162
|
-
oEntitySetContext = oMetaModel.getContext(sCurrentEntitySetName);
|
|
1163
|
-
return Promise.resolve(SideEffectsHelper.generateSideEffectsMapFromMetaModel(oMetaModel)).then(function (aSideEffects) {
|
|
1164
|
-
var errorContexts = [];
|
|
1165
|
-
var textPaths = oModel.getProperty("/textPaths");
|
|
1166
|
-
var aPropertyReadableInfo = oModel.getProperty("/readablePropertyData");
|
|
1167
|
-
var groupId;
|
|
1168
|
-
var allSideEffects;
|
|
1169
|
-
var massEditPromises = [];
|
|
1170
|
-
var failedFieldsData = {};
|
|
1171
|
-
var selectedRowsLength = aContexts.length;
|
|
1172
|
-
var deferredTargetsForAQualifiedName = {};
|
|
1173
|
-
var baseSideEffectsMapArray = MassEditHelper.getSideEffectDataForKey(oEntitySetContext, aSideEffects, oController, aResults);
|
|
1174
|
-
//const changePromise: any[] = [];
|
|
1175
|
-
//let bReadOnlyField = false;
|
|
1176
|
-
//const errorContexts: object[] = [];
|
|
1177
|
-
|
|
1178
|
-
aContexts.forEach(function (oSelectedContext, idx) {
|
|
1179
|
-
allSideEffects = [];
|
|
1180
|
-
aResults.forEach(function (oResult) {
|
|
1181
|
-
try {
|
|
1182
|
-
if (!failedFieldsData.hasOwnProperty(oResult.keyValue)) {
|
|
1183
|
-
failedFieldsData[oResult.keyValue] = 0;
|
|
1184
|
-
}
|
|
1185
|
-
//TODO - Add save implementation for Value Help.
|
|
1186
|
-
if (baseSideEffectsMapArray[oResult.keyValue]) {
|
|
1187
|
-
allSideEffects[oResult.keyValue] = baseSideEffectsMapArray[oResult.keyValue];
|
|
1188
|
-
}
|
|
1189
|
-
if (aPropertyReadableInfo) {
|
|
1190
|
-
aPropertyReadableInfo.some(function (oPropertyInfo) {
|
|
1191
|
-
if (oResult.keyValue === oPropertyInfo.property) {
|
|
1192
|
-
if (oPropertyInfo.type === "Default") {
|
|
1193
|
-
return oPropertyInfo.value === true;
|
|
1194
|
-
} else if (oPropertyInfo.type === "Path" && oPropertyInfo.propertyValue && oPropertyInfo.propertyPath) {
|
|
1195
|
-
return oSelectedContext.getObject(oPropertyInfo.propertyPath) === oPropertyInfo.propertyValue;
|
|
1196
|
-
}
|
|
1197
|
-
}
|
|
1198
|
-
});
|
|
1199
|
-
}
|
|
1200
|
-
groupId = "$auto.".concat(idx);
|
|
1201
|
-
var oFieldPromise = oSelectedContext.setProperty(oResult.keyValue, oResult.value, groupId).catch(function (oError) {
|
|
1202
|
-
errorContexts.push(oSelectedContext.getObject());
|
|
1203
|
-
Log.error("Mass Edit: Something went wrong in updating entries.", oError);
|
|
1204
|
-
failedFieldsData[oResult.keyValue] = failedFieldsData[oResult.keyValue] + 1;
|
|
1205
|
-
return Promise.reject({
|
|
1206
|
-
isFieldUpdateFailed: true
|
|
1207
|
-
});
|
|
1208
|
-
});
|
|
1209
|
-
var dataToUpdateFieldAndSideEffects = {
|
|
1210
|
-
oController: oController,
|
|
1211
|
-
oFieldPromise: oFieldPromise,
|
|
1212
|
-
sideEffectsMap: baseSideEffectsMapArray[oResult.keyValue],
|
|
1213
|
-
textPaths: textPaths,
|
|
1214
|
-
groupId: groupId,
|
|
1215
|
-
key: oResult.keyValue,
|
|
1216
|
-
oEntitySetContext: oEntitySetContext,
|
|
1217
|
-
oMetaModel: oMetaModel,
|
|
1218
|
-
oSelectedContext: oSelectedContext,
|
|
1219
|
-
deferredTargetsForAQualifiedName: deferredTargetsForAQualifiedName
|
|
1220
|
-
};
|
|
1221
|
-
massEditPromises.push(MassEditHelper.handleMassEditFieldUpdateAndRequestSideEffects(dataToUpdateFieldAndSideEffects));
|
|
1222
|
-
return Promise.resolve();
|
|
1223
|
-
} catch (e) {
|
|
1224
|
-
return Promise.reject(e);
|
|
1225
|
-
}
|
|
1226
|
-
});
|
|
1227
|
-
});
|
|
1228
|
-
return Promise.resolve(Promise.allSettled(massEditPromises).then(function () {
|
|
1229
|
-
try {
|
|
1230
|
-
groupId = "$auto.massEditDeferred";
|
|
1231
|
-
var deferredRequests = [];
|
|
1232
|
-
var sideEffectsDataForAllKeys = Object.values(deferredTargetsForAQualifiedName);
|
|
1233
|
-
var keysWithSideEffects = Object.keys(deferredTargetsForAQualifiedName);
|
|
1234
|
-
sideEffectsDataForAllKeys.forEach(function (aSideEffect, index) {
|
|
1235
|
-
var currentKey = keysWithSideEffects[index];
|
|
1236
|
-
if (failedFieldsData[currentKey] !== selectedRowsLength) {
|
|
1237
|
-
var deferredSideEffectsData = Object.values(aSideEffect);
|
|
1238
|
-
deferredSideEffectsData.forEach(function (req) {
|
|
1239
|
-
var aTargets = req.aTargets,
|
|
1240
|
-
oContext = req.oContext,
|
|
1241
|
-
TriggerAction = req.TriggerAction,
|
|
1242
|
-
mSideEffect = req.mSideEffect;
|
|
1243
|
-
var fnGetDeferredTargets = function () {
|
|
1244
|
-
return aTargets;
|
|
1245
|
-
};
|
|
1246
|
-
var fnGetDeferredTargetsAndActions = function () {
|
|
1247
|
-
return {
|
|
1248
|
-
aTargets: fnGetDeferredTargets(),
|
|
1249
|
-
TriggerAction: TriggerAction
|
|
1250
|
-
};
|
|
1251
|
-
};
|
|
1252
|
-
deferredRequests.push(
|
|
1253
|
-
// if some deferred is rejected, it will be add to failed queue
|
|
1254
|
-
oController._sideEffects.requestSideEffects(mSideEffect, oContext, groupId, fnGetDeferredTargetsAndActions));
|
|
1255
|
-
});
|
|
1256
|
-
}
|
|
1257
|
-
});
|
|
1258
|
-
return Promise.resolve();
|
|
1259
|
-
} catch (e) {
|
|
1260
|
-
return Promise.reject(e);
|
|
1261
|
-
}
|
|
1262
|
-
}).then(function () {
|
|
1263
|
-
MassEditHelper.messageHandlingForMassEdit(oTable, aContexts, oController, oInDialog, aResults, errorContexts);
|
|
1264
|
-
}).catch(function (e) {
|
|
1265
|
-
MassEditHelper.closeDialog(oDialog);
|
|
1266
|
-
return Promise.reject(e);
|
|
1267
|
-
})).then(function () {});
|
|
1268
|
-
});
|
|
1269
|
-
} catch (e) {
|
|
1270
|
-
return Promise.reject(e);
|
|
1271
|
-
}
|
|
1272
|
-
}
|
|
1273
|
-
}),
|
|
1274
|
-
endButton: new Button({
|
|
1275
|
-
text: oDefaultValues.cancelButtonText,
|
|
1276
|
-
visible: MassEditHelper.helpers.hasEditableFieldsBinding(oDataFieldModel.getObject("/"), true),
|
|
1277
|
-
press: function (oEvent) {
|
|
1278
|
-
var oInDialog = oEvent.getSource().getParent();
|
|
1279
|
-
MassEditHelper.closeDialog(oInDialog);
|
|
1280
|
-
}
|
|
1281
|
-
})
|
|
1282
|
-
});
|
|
1283
|
-
oDialog.setModel(oDialogDataModel, "fieldsInfo");
|
|
1284
|
-
oDialog.setModel(model);
|
|
1285
|
-
oDialog.setBindingContext(dialogContext);
|
|
1286
|
-
return oDialog;
|
|
1287
|
-
});
|
|
1288
|
-
});
|
|
1289
|
-
} catch (e) {
|
|
1290
|
-
return Promise.reject(e);
|
|
1291
|
-
}
|
|
1292
|
-
},
|
|
1293
|
-
helpers: {
|
|
1294
|
-
getBindingExpForHasEditableFields: function (fields, editable) {
|
|
1295
|
-
var totalExp = fields.reduce(function (expression, field) {
|
|
1296
|
-
return or(expression, pathInModel("/values/" + field.dataProperty + "/visible", "fieldsInfo"));
|
|
1297
|
-
}, constant(false));
|
|
1298
|
-
return editable ? totalExp : not(totalExp);
|
|
1299
|
-
},
|
|
1300
|
-
getExpBindingForApplyButtonTxt: function (defaultValues, fields) {
|
|
1301
|
-
var editableExp = MassEditHelper.helpers.getBindingExpForHasEditableFields(fields, true);
|
|
1302
|
-
var totalExp = ifElse(editableExp, constant(defaultValues.applyButtonText), constant(defaultValues.okButtonText));
|
|
1303
|
-
return compileExpression(totalExp);
|
|
1304
|
-
},
|
|
1305
|
-
hasEditableFieldsBinding: function (fields, editable) {
|
|
1306
|
-
return compileExpression(MassEditHelper.helpers.getBindingExpForHasEditableFields(fields, editable));
|
|
1307
|
-
}
|
|
1308
|
-
}
|
|
1309
|
-
};
|
|
1310
|
-
return MassEditHelper;
|
|
1311
|
-
}, false);
|
|
1312
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNYXNzRWRpdEhlbHBlciIsImluaXRMYXN0TGV2ZWxPZlByb3BlcnR5UGF0aCIsInNQYXRoIiwiYVZhbHVlcyIsImFGaW5hbFBhdGgiLCJpbmRleCIsImFQYXRocyIsInNwbGl0Iiwic0Z1bGxQYXRoIiwiZm9yRWFjaCIsInNQcm9wZXJ0eVBhdGgiLCJnZXRVbmlxdWVWYWx1ZXMiLCJzVmFsdWUiLCJzZWxmIiwidW5kZWZpbmVkIiwiaW5kZXhPZiIsImdldFZhbHVlRm9yTXVsdGlMZXZlbFBhdGgiLCJzRGF0YVByb3BlcnR5UGF0aCIsIm9WYWx1ZXMiLCJyZXN1bHQiLCJhUHJvcGVydHlQYXRocyIsImdldERlZmF1bHRTZWxlY3Rpb25QYXRoQ29tYm9Cb3giLCJhQ29udGV4dHMiLCJsZW5ndGgiLCJvU2VsZWN0ZWRDb250ZXh0IiwiYVByb3BlcnR5VmFsdWVzIiwib0NvbnRleHQiLCJvRGF0YU9iamVjdCIsImdldE9iamVjdCIsInNNdWx0aUxldmVsUGF0aENvbmRpdGlvbiIsImhhc093blByb3BlcnR5IiwicHVzaCIsImFVbmlxdWVQcm9wZXJ0eVZhbHVlcyIsImZpbHRlciIsImdldEhpZGRlblZhbHVlRm9yQ29udGV4dHMiLCJoaWRkZW5WYWx1ZSIsIiRQYXRoIiwic29tZSIsImdldElucHV0VHlwZSIsInByb3BlcnR5SW5mbyIsImRhdGFGaWVsZENvbnZlcnRlZCIsIm9EYXRhTW9kZWxQYXRoIiwiZWRpdFN0eWxlUHJvcGVydGllcyIsImlucHV0VHlwZSIsInNldEVkaXRTdHlsZVByb3BlcnRpZXMiLCJlZGl0U3R5bGUiLCJpc1ZhbGlkRm9yTWFzc0VkaXQiLCJpc0NvbGxlY3Rpb25GaWVsZCIsImhhc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyIsImdldElzRmllbGRHcnAiLCIkVHlwZSIsIlRhcmdldCIsInZhbHVlIiwiZ2V0VGV4dFBhdGgiLCJwcm9wZXJ0eSIsInRleHRCaW5kaW5nIiwiZGlzcGxheU1vZGUiLCJkZXNjcmlwdGlvblBhdGgiLCJwYXRoIiwicGFyYW1ldGVycyIsInByb3BzIiwicHJlcGFyZURhdGFGb3JEaWFsb2ciLCJvVGFibGUiLCJhRGF0YUFycmF5Iiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic0N1cnJlbnRFbnRpdHlTZXROYW1lIiwiZGF0YSIsImFUYWJsZUZpZWxkcyIsImdldFRhYmxlRmllbGRzIiwib0VudGl0eVR5cGVDb250ZXh0IiwiZ2V0Q29udGV4dCIsIm9FbnRpdHlTZXRDb250ZXh0Iiwib0RhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJvRGF0YUZpZWxkTW9kZWwiLCJKU09OTW9kZWwiLCJvUmVzdWx0Iiwic0xhYmVsVGV4dCIsImJWYWx1ZUhlbHBFbmFibGVkIiwic1VuaXRQcm9wZXJ0eVBhdGgiLCJiVmFsdWVIZWxwRW5hYmxlZEZvclVuaXQiLCJvVGV4dEJpbmRpbmciLCJvQ29sdW1uSW5mbyIsImRhdGFQcm9wZXJ0eSIsIm9Qcm9wZXJ0eUluZm8iLCJsYWJlbCIsInRhcmdldE9iamVjdCIsInRhcmdldEVudGl0eVR5cGUiLCJlbnRpdHlQcm9wZXJ0aWVzIiwib1Byb3BlcnR5IiwibmFtZSIsImdldFRleHRCaW5kaW5nIiwib0ZpZWxkQ29udGV4dCIsImFubm90YXRpb25QYXRoIiwib0RhdGFGaWVsZENvbnZlcnRlZCIsImNvbnZlcnRNZXRhTW9kZWxDb250ZXh0Iiwib1Byb3BlcnR5Q29udGV4dCIsIm9JbnRlcmZhY2UiLCJnZXRJbnRlcmZhY2UiLCJWYWx1ZSIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwiYkhpZGRlbkZpZWxkIiwiaXNJbWFnZSIsImNvbnRleHQiLCJnZXRQYXRoIiwiX3R5cGUiLCIkdGFyZ2V0IiwiY2hhcnRQcm9wZXJ0eSIsInRlcm0iLCJpc0FjdGlvbiIsIkFjdGlvbiIsImlzRmllbGRHcnAiLCJoYXNDdXJyZW5jeSIsImhhc1VuaXQiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCIsInVuaXRQcm9wZXJ0eUluZm8iLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5IiwiaGFzVmFsdWVIZWxwIiwiaGFzQ29udGV4dERlcGVuZGVudFZIIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJWYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnMiLCJwcm9wZXJ0eUZvckZpZWxkQ29udHJvbCIsImV4cEJpbmRpbmciLCJnZXRFZGl0TW9kZSIsImNvbnN0YW50IiwiZWRpdE1vZGVWYWx1ZXMiLCJPYmplY3QiLCJrZXlzIiwiRWRpdE1vZGUiLCJlZGl0TW9kZUlzU3RhdGljIiwiaW5jbHVkZXMiLCJlZGl0YWJsZSIsIkVkaXRhYmxlIiwibmF2UHJvcGVydHlXaXRoVmFsdWVIZWxwIiwicmVsYXRpdmVQYXRoIiwiZ2V0UmVsYXRpdmVQYXRocyIsImlzUmVhZE9ubHkiLCJpc1JlYWRPbmx5RXhwcmVzc2lvbiIsIkNvbW1vblV0aWxzIiwiY29tcHV0ZURpc3BsYXlNb2RlIiwiaXNWYWx1ZUhlbHBFbmFibGVkIiwiaXNWYWx1ZUhlbHBFbmFibGVkRm9yVW5pdCIsInVuaXRQcm9wZXJ0eSIsImlzRmllbGRSZXF1aXJlZCIsImdldFJlcXVpcmVkRXhwcmVzc2lvbiIsImRlZmF1bHRTZWxlY3Rpb25QYXRoIiwiZGVmYXVsdFNlbGVjdGlvblVuaXRQYXRoIiwiZW50aXR5U2V0IiwiZGlzcGxheSIsIm51bGxhYmxlIiwiaXNQcm9wZXJ0eVJlYWRPbmx5IiwiZWRpdE1vZGUiLCJoYXNWSCIsInJ1bnRpbWVQYXRoIiwicHJvcGVydHlQYXRoRm9yVmFsdWVIZWxwIiwidW5pdEluZm8iLCJzZXREYXRhIiwiYUNvbHVtbnMiLCJnZXRDb2x1bW5zIiwiY29sdW1uc0RhdGEiLCJnZXRQYXJlbnQiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb2x1bW5zIiwibWFwIiwib0NvbHVtbiIsInNEYXRhUHJvcGVydHkiLCJnZXREYXRhUHJvcGVydHkiLCJhUmVhbHRlZENvbHVtbkluZm8iLCJ0eXBlIiwiZ2V0SGVhZGVyIiwiZ2V0RGVmYXVsdFRleHRzRm9yRGlhbG9nIiwib1Jlc291cmNlQnVuZGxlIiwiaVNlbGVjdGVkQ29udGV4dHMiLCJiRGlzcGxheU1vZGUiLCJrZWVwRXhpc3RpbmdQcmVmaXgiLCJsZWF2ZUJsYW5rVmFsdWUiLCJjbGVhckZpZWxkVmFsdWUiLCJtYXNzRWRpdFRpdGxlIiwiZ2V0VGV4dCIsInRvU3RyaW5nIiwiYXBwbHlCdXR0b25UZXh0IiwidXNlVmFsdWVIZWxwVmFsdWUiLCJjYW5jZWxCdXR0b25UZXh0Iiwibm9GaWVsZHMiLCJva0J1dHRvblRleHQiLCJzZXREZWZhdWx0VmFsdWVzVG9EaWFsb2ciLCJvRGVmYXVsdFZhbHVlcyIsImJVT01GaWVsZCIsInNJbnB1dFR5cGUiLCJiUHJvcGVydHlSZXF1aXJlZCIsInNTdWZmaXhGb3JLZWVwRXhpc3RpbmciLCJkZWZhdWx0T3B0aW9ucyIsInNlbGVjdE9wdGlvbnNFeGlzdCIsInNlbGVjdE9wdGlvbnMiLCJrZWVwRW50cnkiLCJ0ZXh0Iiwia2V5IiwiZmFsc2VFbnRyeSIsInRleHRJbmZvIiwidHJ1dGh5RW50cnkiLCJ1bnNoaWZ0IiwidmhkRW50cnkiLCJjbGVhckVudHJ5IiwiZW1wdHlFbnRyeSIsImdldFRleHRBcnJhbmdlbWVudEluZm8iLCJzZWxlY3RlZENvbnRleHQiLCJkZXNjcmlwdGlvblZhbHVlIiwiZnVsbFRleHQiLCJMb2ciLCJpbmZvIiwidGV4dEFycmFuZ2VtZW50IiwidmFsdWVQYXRoIiwiZGVzY3JpcHRpb24iLCJpc0VkaXRhYmxlIiwiYW55IiwiYmluZGluZyIsImdldEJpbmRpbmciLCJnZXRFeHRlcm5hbFZhbHVlIiwib25Db250ZXh0RWRpdGFibGVDaGFuZ2UiLCJvRGlhbG9nRGF0YU1vZGVsIiwib2JqZWN0c0ZvclZpc2liaWxpdHkiLCJnZXRQcm9wZXJ0eSIsInNldFByb3BlcnR5IiwidXBkYXRlT25Db250ZXh0Q2hhbmdlIiwibU9Ub1VzZSIsInZhbHVlcyIsImF0dGFjaENoYW5nZSIsImJpbmQiLCJnZXRCb3VuZE9iamVjdCIsIkFueSIsIm1vZGVsIiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsImdldEZpZWxkVmlzaWJsaXR5IiwiaXNDb250ZXh0RWRpdGFibGUiLCJzZXRSdW50aW1lTW9kZWxPbkRpYWxvZyIsImRpYWxvZ0NvbnRleHQiLCJhVW5pdERhdGEiLCJhUmVzdWx0cyIsInRleHRQYXRocyIsImFSZWFkT25seUZpZWxkSW5mbyIsIm9EYXRhIiwidW5pdERhdGEiLCJyZXN1bHRzIiwicmVhZGFibGVQcm9wZXJ0eURhdGEiLCJzZWxlY3RlZEtleSIsIm9JbkRhdGEiLCJvVGV4dEluZm8iLCJzUHJvcGVydHlLZXkiLCJzVW5pdFByb3BlcnR5TmFtZSIsIm9EaXN0aW5jdFZhbHVlTWFwIiwib0Rpc3RpbmN0VW5pdE1hcCIsInNNdWx0aUxldmVsUGF0aFZhbHVlIiwiZW50cnkiLCJ1bml0RW50cnkiLCJzTXVsdGlMZXZlbFByb3BQYXRoVmFsdWUiLCJiQ2xlYXJGaWVsZE9yQmxhbmtWYWx1ZUV4aXN0cyIsIm9iaiIsImJDbGVhckZpZWxkT3JCbGFua1VuaXRWYWx1ZUV4aXN0cyIsIm9wZXJhbmRzIiwib3BlcmFuZDEiLCJvcGVyYW5kMiIsInByb3BlcnR5UGF0aCIsInByb3BlcnR5VmFsdWUiLCJ2aXNpYmxlIiwiZ2V0RGlhbG9nQ29udGV4dCIsInRhYmxlIiwiZGlhbG9nIiwidHJhbnNDdHgiLCJnZXRCaW5kaW5nQ29udGV4dCIsImxpc3RCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsInRyYW5zaWVudExpc3RCaW5kaW5nIiwiYmluZExpc3QiLCIkJHVwZGF0ZUdyb3VwSWQiLCJyZWZyZXNoSW50ZXJuYWwiLCJjcmVhdGUiLCJvbkRpYWxvZ09wZW4iLCJldmVudCIsInNvdXJjZSIsImdldFNvdXJjZSIsImZpZWxkc0luZm9Nb2RlbCIsImNsb3NlRGlhbG9nIiwib0RpYWxvZyIsImNsb3NlIiwiZGVzdHJveSIsIm1lc3NhZ2VIYW5kbGluZ0Zvck1hc3NFZGl0Iiwib0NvbnRyb2xsZXIiLCJvSW5EaWFsb2ciLCJlcnJvckNvbnRleHRzIiwiRHJhZnRTdGF0dXMiLCJGRUxpYnJhcnkiLCJDb3JlIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwiZ2V0VmlldyIsIl9lZGl0RmxvdyIsImdldE1lc3NhZ2VIYW5kbGVyIiwic2hvd01lc3NhZ2VzIiwib25CZWZvcmVTaG93TWVzc2FnZSIsIm1lc3NhZ2VzIiwic2hvd01lc3NhZ2VQYXJhbWV0ZXJzIiwiZm5HZXRNZXNzYWdlU3VidGl0bGUiLCJtZXNzYWdlSGFuZGxpbmciLCJzZXRNZXNzYWdlU3VidGl0bGUiLCJ1bmJvdW5kRXJyb3JzIiwibWVzc2FnZSIsImdldFRhcmdldCIsInNldERyYWZ0U3RhdHVzIiwiU2F2ZWQiLCJzdWNjZXNzVG9hc3QiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsIkNsZWFyIiwic2hvd01lc3NhZ2VCb3giLCJzaG93TWVzc2FnZURpYWxvZyIsImlzT3BlbiIsImdldFNpZGVFZmZlY3REYXRhRm9yS2V5IiwiYVNpZGVFZmZlY3RzIiwic093bmVyRW50aXR5VHlwZSIsImJhc2VTaWRlRWZmZWN0c01hcEFycmF5Iiwia2V5VmFsdWUiLCJzaWRlRWZmZWN0c0FycmF5IiwiRmllbGRIZWxwZXIiLCJnZXRTaWRlRWZmZWN0c09uRW50aXR5QW5kUHJvcGVydHkiLCJfc2lkZUVmZmVjdHMiLCJnZW5lcmF0ZVNpZGVFZmZlY3RzTWFwRnJvbVNpZGVFZmZlY3RJZCIsImZuR2V0UGF0aEZvclNvdXJjZVByb3BlcnR5Iiwic0VudGl0eVR5cGUiLCJzTmF2aWdhdGlvblBhdGgiLCJzdWJzdHIiLCJsYXN0SW5kZXhPZiIsInBPd25lckVudGl0eSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVxdWVzdE9iamVjdCIsImZuR2V0RW50aXR5VHlwZU9mT3duZXIiLCJiYXNlTmF2UGF0aCIsInRhcmdldEVudGl0eSIsImFUYXJnZXRzIiwib3duZXJFbnRpdHlUeXBlIiwicE93bmVyIiwib3duZXJOYXZQYXRoIiwiJFBhcnRuZXIiLCJlbnRpdHlPYmpPZk93bmVyUGFydG5lciIsImVudGl0eVR5cGVPZk93bmVyUGFydG5lciIsImZuR2V0VGFyZ2V0c0Zvck1hc3NFZGl0Iiwic2lkZUVmZmVjdHNEYXRhIiwiYVRhcmdldFByb3BlcnRpZXMiLCJUYXJnZXRQcm9wZXJ0aWVzIiwiYVRhcmdldEVudGl0aWVzIiwiVGFyZ2V0RW50aXRpZXMiLCJhUHJvbWlzZXMiLCJ0YXJnZXRQcm9wIiwidGhlbiIsInJlc3VsdEVudGl0eSIsImFsbCIsImNoZWNrSWZFbnRpdHlFeGlzdHNBc1RhcmdldEVudGl0eSIsInNpZGVFZmZlY3RzTWFwIiwic2lkZUVmZmVjdHNPbk90aGVyRW50aXR5IiwiZW50aXR5U2V0TmFtZSIsInBvcCIsInNpZGVFZmZlY3RzV2l0aEN1cnJlbnRFbnRpdHlBc1RhcmdldCIsInRhcmdldEVudGl0aWVzQXJyYXkiLCJzaWRlRWZmZWN0cyIsImlubmVyT2JqIiwiaGFuZGxlTWFzc0VkaXRGaWVsZFVwZGF0ZUFuZFJlcXVlc3RTaWRlRWZmZWN0cyIsIm1QYXJhbXMiLCJvRmllbGRQcm9taXNlIiwiZ3JvdXBJZCIsImRlZmVycmVkVGFyZ2V0c0ZvckFRdWFsaWZpZWROYW1lIiwiaW1tZWRpYXRlU2lkZUVmZmVjdHNQcm9taXNlcyIsIm9BcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiaXNTaWRlRWZmZWN0c1dpdGhDdXJyZW50RW50aXR5QXNUYXJnZXQiLCJhbGxFbnRpdHlUeXBlc1dpdGhRdWFsaWZpZXIiLCJzaWRlRWZmZWN0c0RhdGFGb3JGaWVsZCIsIm1WaXNpdGVkU2lkZUVmZmVjdHMiLCJlbnRyaWVzIiwiZW50aXR5VHlwZVdpdGhRdWFsaWZpZXIiLCJnZXRDb250ZXh0Rm9yU2lkZUVmZmVjdHMiLCJhbGxGYWlsZWRTaWRlRWZmZWN0cyIsImdldFJlZ2lzdGVyZWRGYWlsZWRSZXF1ZXN0cyIsImFGYWlsZWRTaWRlRWZmZWN0cyIsImRlbGV0ZUZhaWxlZFJlcXVlc3RzRm9yQUNvbnRleHQiLCJzaWRlRWZmZWN0c0ZvckN1cnJlbnRDb250ZXh0IiwiY29uY2F0IiwiYVNpZGVFZmZlY3QiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJhSW1tZWRpYXRlVGFyZ2V0cyIsImFsbFRhcmdldHMiLCJ0cmlnZ2VyQWN0aW9uTmFtZSIsImZuR2V0SW1tZWRpYXRlVGFyZ2V0c0FuZEFjdGlvbnMiLCJtU2lkZUVmZmVjdCIsInNpZGVFZmZlY3RFbnRpdHlUeXBlIiwidGFyZ2V0c0FycmF5Rm9yQWxsUHJvcGVydGllcyIsImFjdGlvbk5hbWUiLCJUcmlnZ2VyQWN0aW9uIiwiYURlZmVycmVkVGFyZ2V0cyIsInRhcmdldCIsImlzU3RhdGljQWN0aW9uIiwiVGFibGVIZWxwZXIiLCJfaXNTdGF0aWNBY3Rpb24iLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJhbGxTZXR0bGVkIiwiY3JlYXRlRGlhbG9nIiwic0ZyYWdtZW50TmFtZSIsIm1ldGFNb2RlbCIsIml0ZW1zTW9kZWwiLCJUZW1wbGF0ZU1vZGVsIiwiZ2V0RGF0YSIsIm9GcmFnbWVudCIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImJpbmRpbmdDb250ZXh0cyIsImRhdGFGaWVsZE1vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJjb250ZXh0UGF0aCIsImdldE1ldGFQYXRoIiwibW9kZWxzIiwib0NyZWF0ZWRGcmFnbWVudCIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJvRGlhbG9nQ29udGVudCIsIkRpYWxvZyIsInJlc2l6YWJsZSIsInRpdGxlIiwiY29udGVudCIsImFmdGVyT3BlbiIsImJlZ2luQnV0dG9uIiwiQnV0dG9uIiwiaGVscGVycyIsImdldEV4cEJpbmRpbmdGb3JBcHBseUJ1dHRvblR4dCIsInByZXNzIiwib0V2ZW50IiwicmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwib01vZGVsIiwiU2lkZUVmZmVjdHNIZWxwZXIiLCJnZW5lcmF0ZVNpZGVFZmZlY3RzTWFwRnJvbU1ldGFNb2RlbCIsImFQcm9wZXJ0eVJlYWRhYmxlSW5mbyIsImFsbFNpZGVFZmZlY3RzIiwibWFzc0VkaXRQcm9taXNlcyIsImZhaWxlZEZpZWxkc0RhdGEiLCJzZWxlY3RlZFJvd3NMZW5ndGgiLCJpZHgiLCJjYXRjaCIsIm9FcnJvciIsImVycm9yIiwicmVqZWN0IiwiaXNGaWVsZFVwZGF0ZUZhaWxlZCIsImRhdGFUb1VwZGF0ZUZpZWxkQW5kU2lkZUVmZmVjdHMiLCJkZWZlcnJlZFJlcXVlc3RzIiwic2lkZUVmZmVjdHNEYXRhRm9yQWxsS2V5cyIsImtleXNXaXRoU2lkZUVmZmVjdHMiLCJjdXJyZW50S2V5IiwiZGVmZXJyZWRTaWRlRWZmZWN0c0RhdGEiLCJyZXEiLCJmbkdldERlZmVycmVkVGFyZ2V0cyIsImZuR2V0RGVmZXJyZWRUYXJnZXRzQW5kQWN0aW9ucyIsImUiLCJlbmRCdXR0b24iLCJoYXNFZGl0YWJsZUZpZWxkc0JpbmRpbmciLCJnZXRCaW5kaW5nRXhwRm9ySGFzRWRpdGFibGVGaWVsZHMiLCJmaWVsZHMiLCJ0b3RhbEV4cCIsInJlZHVjZSIsImV4cHJlc3Npb24iLCJmaWVsZCIsIm9yIiwicGF0aEluTW9kZWwiLCJub3QiLCJkZWZhdWx0VmFsdWVzIiwiZWRpdGFibGVFeHAiLCJpZkVsc2UiLCJjb21waWxlRXhwcmVzc2lvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTWFzc0VkaXRIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnksXG5cdE1hc3NFZGl0RmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSxcblx0TWFzc0VkaXRGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGNvbnN0YW50LCBpZkVsc2UsIG5vdCwgb3IsIHBhdGhJbk1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBPRGF0YVNpZGVFZmZlY3RzVHlwZSwgU2lkZUVmZmVjdHNUYXJnZXRFbnRpdHlUeXBlLCBTaWRlRWZmZWN0c1R5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFRlbXBsYXRlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoLCBnZXRSZWxhdGl2ZVBhdGhzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgsXG5cdGhhc0N1cnJlbmN5LFxuXHRoYXNVbml0LFxuXHRoYXNWYWx1ZUhlbHAsXG5cdGhhc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRUZXh0QmluZGluZywgc2V0RWRpdFN0eWxlUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZFByb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9JbnRlcm5hbEZpZWxkXCI7XG5pbXBvcnQgVGFibGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVIZWxwZXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW0vRWRpdE1vZGVcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwiLi4vY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgdHlwZSB7IEFueVR5cGUgfSBmcm9tIFwiLi4vY29udHJvbHMvQW55XCI7XG5pbXBvcnQgQW55IGZyb20gXCIuLi9jb250cm9scy9BbnlcIjtcbmltcG9ydCB7IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0LCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwiLi4vY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzUmVhZE9ubHlFeHByZXNzaW9uIH0gZnJvbSBcIi4uL3RlbXBsYXRpbmcvRmllbGRDb250cm9sSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRFZGl0TW9kZSwgZ2V0UmVxdWlyZWRFeHByZXNzaW9uLCBpc0NvbGxlY3Rpb25GaWVsZCB9IGZyb20gXCIuLi90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCIuL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHNIZWxwZXIgZnJvbSBcIi4vU2lkZUVmZmVjdHNIZWxwZXJcIjtcblxuLyogVGhpcyBjbGFzcyBjb250YWlucyBoZWxwZXJzIHRvIGJlIHVzZWQgZm9yIG1hc3MgZWRpdCBmdW5jdGlvbmFsaXR5ICovXG50eXBlIFRleHRBcnJhbmdlbWVudEluZm8gPSB7XG5cdHRleHRBcnJhbmdlbWVudDogc3RyaW5nO1xuXHR2YWx1ZVBhdGg6IHN0cmluZztcblx0ZGVzY3JpcHRpb25QYXRoPzogc3RyaW5nO1xuXHR2YWx1ZTogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbjogc3RyaW5nO1xuXHRmdWxsVGV4dDogc3RyaW5nO1xufTtcblxudHlwZSBCaW5kaW5nSW5mbyA9IHtcblx0cGF0aD86IHN0cmluZztcblx0bW9kZWw/OiBzdHJpbmcgfCBvYmplY3Q7XG5cdHBhcmFtZXRlcnM/OiBBcnJheTxCaW5kaW5nSW5mbz47XG59O1xuXG5leHBvcnQgdHlwZSBEYXRhVG9VcGRhdGVGaWVsZEFuZFNpZGVFZmZlY3RzVHlwZSA9IHtcblx0b0NvbnRyb2xsZXI6IGFueTtcblx0b0ZpZWxkUHJvbWlzZTogUHJvbWlzZTxhbnk+O1xuXHRzaWRlRWZmZWN0c01hcDogTWFzc0VkaXRGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5IHwgRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeTtcblx0dGV4dFBhdGhzOiBhbnk7XG5cdGdyb3VwSWQ6IHN0cmluZztcblx0a2V5OiBzdHJpbmc7XG5cdG9FbnRpdHlTZXRDb250ZXh0OiBDb250ZXh0O1xuXHRvTWV0YU1vZGVsOiBhbnk7XG5cdG9TZWxlY3RlZENvbnRleHQ6IGFueTtcblx0ZGVmZXJyZWRUYXJnZXRzRm9yQVF1YWxpZmllZE5hbWU6IGFueTtcbn07XG5cbmNvbnN0IE1hc3NFZGl0SGVscGVyID0ge1xuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIHZhbHVlIGF0IGZpbmFsIG9yIGRlZXBlc3QgbGV2ZWwgcGF0aCB3aXRoIGEgYmxhbmsgYXJyYXkuXG5cdCAqIFJldHVybiBhbiBlbXB0eSBhcnJheSBwb2ludGluZyB0byB0aGUgZmluYWwgb3IgZGVlcGVzdCBsZXZlbCBwYXRoLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1BhdGggUHJvcGVydHkgcGF0aFxuXHQgKiBAcGFyYW0gYVZhbHVlcyBBcnJheSBpbnN0YW5jZSB3aGVyZSB0aGUgZGVmYXVsdCBkYXRhIG5lZWRzIHRvIGJlIGFkZGVkXG5cdCAqIEByZXR1cm5zIFRoZSBmaW5hbCBwYXRoXG5cdCAqL1xuXHRpbml0TGFzdExldmVsT2ZQcm9wZXJ0eVBhdGg6IGZ1bmN0aW9uIChzUGF0aDogc3RyaW5nLCBhVmFsdWVzOiBhbnkgLyosIHRyYW5zQ3R4OiBDb250ZXh0ICovKSB7XG5cdFx0bGV0IGFGaW5hbFBhdGg6IGFueTtcblx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdGNvbnN0IGFQYXRocyA9IHNQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRsZXQgc0Z1bGxQYXRoID0gXCJcIjtcblx0XHRhUGF0aHMuZm9yRWFjaChmdW5jdGlvbiAoc1Byb3BlcnR5UGF0aDogc3RyaW5nKSB7XG5cdFx0XHRpZiAoIWFWYWx1ZXNbc1Byb3BlcnR5UGF0aF0gJiYgaW5kZXggPT09IDApIHtcblx0XHRcdFx0YVZhbHVlc1tzUHJvcGVydHlQYXRoXSA9IHt9O1xuXHRcdFx0XHRhRmluYWxQYXRoID0gYVZhbHVlc1tzUHJvcGVydHlQYXRoXTtcblx0XHRcdFx0c0Z1bGxQYXRoID0gc0Z1bGxQYXRoICsgc1Byb3BlcnR5UGF0aDtcblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdH0gZWxzZSBpZiAoIWFGaW5hbFBhdGhbc1Byb3BlcnR5UGF0aF0pIHtcblx0XHRcdFx0c0Z1bGxQYXRoID0gYCR7c0Z1bGxQYXRofS8ke3NQcm9wZXJ0eVBhdGh9YDtcblx0XHRcdFx0aWYgKHNGdWxsUGF0aCAhPT0gc1BhdGgpIHtcblx0XHRcdFx0XHRhRmluYWxQYXRoW3NQcm9wZXJ0eVBhdGhdID0ge307XG5cdFx0XHRcdFx0YUZpbmFsUGF0aCA9IGFGaW5hbFBhdGhbc1Byb3BlcnR5UGF0aF07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUZpbmFsUGF0aFtzUHJvcGVydHlQYXRoXSA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFGaW5hbFBhdGg7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdW5pcXVlIHZhbHVlcyBmb3IgZ2l2ZW4gYXJyYXkgdmFsdWVzLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1ZhbHVlIFByb3BlcnR5IHZhbHVlXG5cdCAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiB0aGUgcHJvcGVydHkgdmFsdWVcblx0ICogQHBhcmFtIHNlbGYgSW5zdGFuY2Ugb2YgdGhlIGFycmF5XG5cdCAqIEByZXR1cm5zIFRoZSB1bmlxdWUgdmFsdWVcblx0ICovXG5cdGdldFVuaXF1ZVZhbHVlczogZnVuY3Rpb24gKHNWYWx1ZTogc3RyaW5nLCBpbmRleDogbnVtYmVyLCBzZWxmOiBhbnlbXSkge1xuXHRcdHJldHVybiBzVmFsdWUgIT0gdW5kZWZpbmVkICYmIHNWYWx1ZSAhPSBudWxsID8gc2VsZi5pbmRleE9mKHNWYWx1ZSkgPT09IGluZGV4IDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcm9wZXJ0eSB2YWx1ZSBmb3IgYSBtdWx0aS1sZXZlbCBwYXRoIChmb3IgZXhhbXBsZTogX01hdGVyaWFscy9NYXRlcmlhbF9EZXRhaWxzIGdldHMgdGhlIHZhbHVlIG9mIE1hdGVyaWFsX0RldGFpbHMgdW5kZXIgX01hdGVyaWFscyBPYmplY3QpLlxuXHQgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eVZhbHVlLCB3aGljaCBjYW4gYmUgb2YgYW55IHR5cGUgKHN0cmluZywgbnVtYmVyLCBldGMuLikuXG5cdCAqXG5cdCAqIEBwYXJhbSBzRGF0YVByb3BlcnR5UGF0aCBQcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSBvVmFsdWVzIE9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXNcblx0ICogQHJldHVybnMgVGhlIHByb3BlcnR5IHZhbHVlXG5cdCAqL1xuXHRnZXRWYWx1ZUZvck11bHRpTGV2ZWxQYXRoOiBmdW5jdGlvbiAoc0RhdGFQcm9wZXJ0eVBhdGg6IHN0cmluZywgb1ZhbHVlczogYW55KSB7XG5cdFx0bGV0IHJlc3VsdDogYW55O1xuXHRcdGlmIChzRGF0YVByb3BlcnR5UGF0aCAmJiBzRGF0YVByb3BlcnR5UGF0aC5pbmRleE9mKFwiL1wiKSA+IDApIHtcblx0XHRcdGNvbnN0IGFQcm9wZXJ0eVBhdGhzID0gc0RhdGFQcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0YVByb3BlcnR5UGF0aHMuZm9yRWFjaChmdW5jdGlvbiAoc1BhdGg6IHN0cmluZykge1xuXHRcdFx0XHRyZXN1bHQgPSBvVmFsdWVzICYmIG9WYWx1ZXNbc1BhdGhdID8gb1ZhbHVlc1tzUGF0aF0gOiByZXN1bHQgJiYgcmVzdWx0W3NQYXRoXTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBrZXkgcGF0aCBmb3IgdGhlIGtleSBvZiBhIGNvbWJvIGJveCB0aGF0IG11c3QgYmUgc2VsZWN0ZWQgaW5pdGlhbGx5IHdoZW4gdGhlIGRpYWxvZyBvcGVuczpcblx0ICogPT4gSWYgcHJvcGVydHlWYWx1ZSBmb3IgYWxsIHNlbGVjdGVkIGNvbnRleHRzIGlzIGRpZmZlcmVudCwgdGhlbiA8IEtlZXAgRXhpc3RpbmcgVmFsdWVzID4gaXMgcHJlc2VsZWN0ZWQuXG5cdCAqID0+IElmIHByb3BlcnR5VmFsdWUgZm9yIGFsbCBzZWxlY3RlZCBjb250ZXh0cyBpcyB0aGUgc2FtZSwgdGhlbiB0aGUgcHJvcGVydHlWYWx1ZSBpcyBwcmVzZWxlY3RlZC5cblx0ICogPT4gSWYgcHJvcGVydHlWYWx1ZSBmb3IgYWxsIHNlbGVjdGVkIGNvbnRleHRzIGlzIGVtcHR5LCB0aGVuIDwgTGVhdmUgQmxhbmsgPiBpcyBwcmVzZWxlY3RlZC5cblx0ICpcblx0ICpcblx0ICogQHBhcmFtIGFDb250ZXh0cyBDb250ZXh0cyBmb3IgbWFzcyBlZGl0XG5cdCAqIEBwYXJhbSBzRGF0YVByb3BlcnR5UGF0aCBEYXRhIHByb3BlcnR5IHBhdGhcblx0ICogQHJldHVybnMgVGhlIGtleSBwYXRoXG5cdCAqL1xuXHRnZXREZWZhdWx0U2VsZWN0aW9uUGF0aENvbWJvQm94OiBmdW5jdGlvbiAoYUNvbnRleHRzOiBhbnlbXSwgc0RhdGFQcm9wZXJ0eVBhdGg6IHN0cmluZykge1xuXHRcdGxldCByZXN1bHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRpZiAoc0RhdGFQcm9wZXJ0eVBhdGggJiYgYUNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IG9TZWxlY3RlZENvbnRleHQgPSBhQ29udGV4dHMsXG5cdFx0XHRcdGFQcm9wZXJ0eVZhbHVlczogYW55W10gPSBbXTtcblx0XHRcdG9TZWxlY3RlZENvbnRleHQuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvRGF0YU9iamVjdCA9IG9Db250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRjb25zdCBzTXVsdGlMZXZlbFBhdGhDb25kaXRpb24gPVxuXHRcdFx0XHRcdHNEYXRhUHJvcGVydHlQYXRoLmluZGV4T2YoXCIvXCIpID4gLTEgJiYgb0RhdGFPYmplY3QuaGFzT3duUHJvcGVydHkoc0RhdGFQcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpWzBdKTtcblx0XHRcdFx0aWYgKG9Db250ZXh0ICYmIChvRGF0YU9iamVjdC5oYXNPd25Qcm9wZXJ0eShzRGF0YVByb3BlcnR5UGF0aCkgfHwgc011bHRpTGV2ZWxQYXRoQ29uZGl0aW9uKSkge1xuXHRcdFx0XHRcdGFQcm9wZXJ0eVZhbHVlcy5wdXNoKG9Db250ZXh0LmdldE9iamVjdChzRGF0YVByb3BlcnR5UGF0aCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGFVbmlxdWVQcm9wZXJ0eVZhbHVlcyA9IGFQcm9wZXJ0eVZhbHVlcy5maWx0ZXIoTWFzc0VkaXRIZWxwZXIuZ2V0VW5pcXVlVmFsdWVzKTtcblx0XHRcdGlmIChhVW5pcXVlUHJvcGVydHlWYWx1ZXMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRyZXN1bHQgPSBgRGVmYXVsdC8ke3NEYXRhUHJvcGVydHlQYXRofWA7XG5cdFx0XHR9IGVsc2UgaWYgKGFVbmlxdWVQcm9wZXJ0eVZhbHVlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0cmVzdWx0ID0gYEVtcHR5LyR7c0RhdGFQcm9wZXJ0eVBhdGh9YDtcblx0XHRcdH0gZWxzZSBpZiAoYVVuaXF1ZVByb3BlcnR5VmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRyZXN1bHQgPSBgJHtzRGF0YVByb3BlcnR5UGF0aH0vJHthVW5pcXVlUHJvcGVydHlWYWx1ZXNbMF19YDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGhpZGRlbiBhbm5vdGF0aW9uIHZhbHVlIFtib3RoIHN0YXRpYyBhbmQgcGF0aCBiYXNlZF0gZm9yIHRhYmxlJ3Mgc2VsZWN0ZWQgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIGhpZGRlblZhbHVlIEhpZGRlbiBhbm5vdGF0aW9uIHZhbHVlIC8gcGF0aCBmb3IgZmllbGRcblx0ICogQHBhcmFtIGFDb250ZXh0cyBDb250ZXh0cyBmb3IgbWFzcyBlZGl0XG5cdCAqIEByZXR1cm5zIFRoZSBoaWRkZW4gYW5ub3RhdGlvbiB2YWx1ZVxuXHQgKi9cblx0Z2V0SGlkZGVuVmFsdWVGb3JDb250ZXh0czogZnVuY3Rpb24gKGhpZGRlblZhbHVlOiBhbnksIGFDb250ZXh0czogYW55W10pIHtcblx0XHRpZiAoaGlkZGVuVmFsdWUgJiYgaGlkZGVuVmFsdWUuJFBhdGgpIHtcblx0XHRcdHJldHVybiAhYUNvbnRleHRzLnNvbWUoZnVuY3Rpb24gKG9TZWxlY3RlZENvbnRleHQ6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoaGlkZGVuVmFsdWUuJFBhdGgpID09PSBmYWxzZTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gaGlkZGVuVmFsdWU7XG5cdH0sXG5cblx0Z2V0SW5wdXRUeXBlOiBmdW5jdGlvbiAocHJvcGVydHlJbmZvOiBhbnksIGRhdGFGaWVsZENvbnZlcnRlZDogYW55LCBvRGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZWRpdFN0eWxlUHJvcGVydGllcyA9IHt9IGFzIEZpZWxkUHJvcGVydGllcztcblx0XHRsZXQgaW5wdXRUeXBlITogc3RyaW5nO1xuXHRcdGlmIChwcm9wZXJ0eUluZm8pIHtcblx0XHRcdHNldEVkaXRTdHlsZVByb3BlcnRpZXMoZWRpdFN0eWxlUHJvcGVydGllcywgZGF0YUZpZWxkQ29udmVydGVkLCBvRGF0YU1vZGVsUGF0aCwgdHJ1ZSk7XG5cdFx0XHRpbnB1dFR5cGUgPSBlZGl0U3R5bGVQcm9wZXJ0aWVzPy5lZGl0U3R5bGUgfHwgXCJcIjtcblx0XHR9XG5cdFx0Y29uc3QgaXNWYWxpZEZvck1hc3NFZGl0ID1cblx0XHRcdGlucHV0VHlwZSAmJlxuXHRcdFx0W1wiRGF0ZVBpY2tlclwiLCBcIlRpbWVQaWNrZXJcIiwgXCJEYXRlVGltZVBpY2tlclwiLCBcIlJhdGluZ0luZGljYXRvclwiXS5pbmRleE9mKGlucHV0VHlwZSkgPT09IC0xICYmXG5cdFx0XHQhaXNDb2xsZWN0aW9uRmllbGQob0RhdGFNb2RlbFBhdGgpICYmXG5cdFx0XHQhaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzKHByb3BlcnR5SW5mbyk7XG5cblx0XHRyZXR1cm4gKGlzVmFsaWRGb3JNYXNzRWRpdCB8fCBcIlwiKSAmJiBpbnB1dFR5cGU7XG5cdH0sXG5cblx0Z2V0SXNGaWVsZEdycDogZnVuY3Rpb24gKGRhdGFGaWVsZENvbnZlcnRlZDogYW55KTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdGRhdGFGaWVsZENvbnZlcnRlZCAmJlxuXHRcdFx0ZGF0YUZpZWxkQ29udmVydGVkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFubm90YXRpb25cIiAmJlxuXHRcdFx0ZGF0YUZpZWxkQ29udmVydGVkLlRhcmdldCAmJlxuXHRcdFx0ZGF0YUZpZWxkQ29udmVydGVkLlRhcmdldC52YWx1ZSAmJlxuXHRcdFx0ZGF0YUZpZWxkQ29udmVydGVkLlRhcmdldC52YWx1ZS5pbmRleE9mKFwiRmllbGRHcm91cFwiKSA+IC0xXG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0IHRleHQgcGF0aCBmb3IgdGhlIG1hc3MgZWRpdCBmaWVsZC5cblx0ICpcblx0ICogQHBhcmFtIHByb3BlcnR5IFByb3BlcnR5IHBhdGhcblx0ICogQHBhcmFtIHRleHRCaW5kaW5nIFRleHQgQmluZGluZyBJbmZvXG5cdCAqIEBwYXJhbSBkaXNwbGF5TW9kZSBEaXNwbGF5IG1vZGVcblx0ICogQHJldHVybnMgVGV4dCBQcm9wZXJ0eSBQYXRoIGlmIGl0IGV4aXN0c1xuXHQgKi9cblx0Z2V0VGV4dFBhdGg6IGZ1bmN0aW9uIChwcm9wZXJ0eTogc3RyaW5nLCB0ZXh0QmluZGluZzogYW55LCBkaXNwbGF5TW9kZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgZGVzY3JpcHRpb25QYXRoO1xuXHRcdGlmICh0ZXh0QmluZGluZyAmJiAodGV4dEJpbmRpbmcucGF0aCB8fCAodGV4dEJpbmRpbmcucGFyYW1ldGVycyAmJiB0ZXh0QmluZGluZy5wYXJhbWV0ZXJzLmxlbmd0aCkpICYmIHByb3BlcnR5KSB7XG5cdFx0XHRpZiAodGV4dEJpbmRpbmcucGF0aCAmJiBkaXNwbGF5TW9kZSA9PT0gXCJEZXNjcmlwdGlvblwiKSB7XG5cdFx0XHRcdGRlc2NyaXB0aW9uUGF0aCA9IHRleHRCaW5kaW5nLnBhdGg7XG5cdFx0XHR9IGVsc2UgaWYgKHRleHRCaW5kaW5nLnBhcmFtZXRlcnMpIHtcblx0XHRcdFx0dGV4dEJpbmRpbmcucGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wczogQmluZGluZ0luZm8pIHtcblx0XHRcdFx0XHRpZiAocHJvcHMucGF0aCAmJiBwcm9wcy5wYXRoICE9PSBwcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0ZGVzY3JpcHRpb25QYXRoID0gcHJvcHMucGF0aDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZGVzY3JpcHRpb25QYXRoO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyBhIEpTT04gTW9kZWwgZm9yIHByb3BlcnRpZXMgb2YgZGlhbG9nIGZpZWxkcyBbbGFiZWwsIHZpc2libGl0eSwgZGF0YXByb3BlcnR5LCBldGMuXS5cblx0ICpcblx0ICogQHBhcmFtIG9UYWJsZSBJbnN0YW5jZSBvZiBUYWJsZVxuXHQgKiBAcGFyYW0gYUNvbnRleHRzIENvbnRleHRzIGZvciBtYXNzIGVkaXRcblx0ICogQHBhcmFtIGFEYXRhQXJyYXkgQXJyYXkgY29udGFpbmluZyBkYXRhIHJlbGF0ZWQgdG8gdGhlIGRpYWxvZyB1c2VkIGJ5IGJvdGggdGhlIHN0YXRpYyBhbmQgdGhlIHJ1bnRpbWUgbW9kZWxcblx0ICogQHJldHVybnMgVGhlIG1vZGVsXG5cdCAqL1xuXHRwcmVwYXJlRGF0YUZvckRpYWxvZzogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIGFDb250ZXh0czogYW55W10sIGFEYXRhQXJyYXk6IGFueVtdKSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9UYWJsZSAmJiAob1RhYmxlLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgYW55KSxcblx0XHRcdHNDdXJyZW50RW50aXR5U2V0TmFtZSA9IG9UYWJsZS5kYXRhKFwibWV0YVBhdGhcIiksXG5cdFx0XHRhVGFibGVGaWVsZHMgPSBNYXNzRWRpdEhlbHBlci5nZXRUYWJsZUZpZWxkcyhvVGFibGUpLFxuXHRcdFx0b0VudGl0eVR5cGVDb250ZXh0ID0gb01ldGFNb2RlbC5nZXRDb250ZXh0KGAke3NDdXJyZW50RW50aXR5U2V0TmFtZX0vQGApLFxuXHRcdFx0b0VudGl0eVNldENvbnRleHQgPSBvTWV0YU1vZGVsLmdldENvbnRleHQoc0N1cnJlbnRFbnRpdHlTZXROYW1lKSxcblx0XHRcdG9EYXRhTW9kZWxPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9FbnRpdHlUeXBlQ29udGV4dCk7XG5cblx0XHRjb25zdCBvRGF0YUZpZWxkTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0bGV0IG9SZXN1bHQ7XG5cdFx0bGV0IHNMYWJlbFRleHQ7XG5cdFx0bGV0IGJWYWx1ZUhlbHBFbmFibGVkO1xuXHRcdGxldCBzVW5pdFByb3BlcnR5UGF0aDtcblx0XHRsZXQgYlZhbHVlSGVscEVuYWJsZWRGb3JVbml0O1xuXHRcdGxldCBvVGV4dEJpbmRpbmc7XG5cblx0XHRhVGFibGVGaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAob0NvbHVtbkluZm86IGFueSkge1xuXHRcdFx0Y29uc3Qgc0RhdGFQcm9wZXJ0eVBhdGggPSBvQ29sdW1uSW5mby5kYXRhUHJvcGVydHk7XG5cdFx0XHRpZiAoc0RhdGFQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0bGV0IG9Qcm9wZXJ0eUluZm8gPSBzRGF0YVByb3BlcnR5UGF0aCAmJiBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzQ3VycmVudEVudGl0eVNldE5hbWV9LyR7c0RhdGFQcm9wZXJ0eVBhdGh9QGApO1xuXHRcdFx0XHRzTGFiZWxUZXh0ID1cblx0XHRcdFx0XHRvQ29sdW1uSW5mby5sYWJlbCB8fCAob1Byb3BlcnR5SW5mbyAmJiBvUHJvcGVydHlJbmZvW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbFwiXSkgfHwgc0RhdGFQcm9wZXJ0eVBhdGg7XG5cblx0XHRcdFx0aWYgKG9EYXRhTW9kZWxPYmplY3RQYXRoKSB7XG5cdFx0XHRcdFx0b0RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0ID0gb0RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbHRlcihmdW5jdGlvbiAoXG5cdFx0XHRcdFx0XHRvUHJvcGVydHk6IGFueVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eS5uYW1lID09PSBzRGF0YVByb3BlcnR5UGF0aDtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgPSBvRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3RbMF0gfHwge307XG5cdFx0XHRcdG9UZXh0QmluZGluZyA9IGdldFRleHRCaW5kaW5nKG9EYXRhTW9kZWxPYmplY3RQYXRoLCB7fSwgdHJ1ZSkgfHwge307XG5cdFx0XHRcdGNvbnN0IG9GaWVsZENvbnRleHQgPSBvTWV0YU1vZGVsLmdldENvbnRleHQob0NvbHVtbkluZm8uYW5ub3RhdGlvblBhdGgpLFxuXHRcdFx0XHRcdG9EYXRhRmllbGRDb252ZXJ0ZWQgPSBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChvRmllbGRDb250ZXh0KSxcblx0XHRcdFx0XHRvUHJvcGVydHlDb250ZXh0ID0gb01ldGFNb2RlbC5nZXRDb250ZXh0KGAke3NDdXJyZW50RW50aXR5U2V0TmFtZX0vJHtzRGF0YVByb3BlcnR5UGF0aH1AYCksXG5cdFx0XHRcdFx0b0ludGVyZmFjZSA9IG9Qcm9wZXJ0eUNvbnRleHQgJiYgb1Byb3BlcnR5Q29udGV4dC5nZXRJbnRlcmZhY2UoKTtcblxuXHRcdFx0XHRsZXQgb0RhdGFNb2RlbFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob0ZpZWxkQ29udGV4dCwgb0VudGl0eVNldENvbnRleHQpO1xuXHRcdFx0XHRpZiAob0RhdGFGaWVsZENvbnZlcnRlZD8uVmFsdWU/LnBhdGg/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRvRGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKG9EYXRhTW9kZWxQYXRoLCBzRGF0YVByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgYkhpZGRlbkZpZWxkID1cblx0XHRcdFx0XHRNYXNzRWRpdEhlbHBlci5nZXRIaWRkZW5WYWx1ZUZvckNvbnRleHRzKFxuXHRcdFx0XHRcdFx0b0ZpZWxkQ29udGV4dCAmJiBvRmllbGRDb250ZXh0LmdldE9iamVjdCgpW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXSxcblx0XHRcdFx0XHRcdGFDb250ZXh0c1xuXHRcdFx0XHRcdCkgfHwgZmFsc2U7XG5cdFx0XHRcdGNvbnN0IGlzSW1hZ2UgPSBvUHJvcGVydHlJbmZvICYmIG9Qcm9wZXJ0eUluZm9bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSXNJbWFnZVVSTFwiXTtcblxuXHRcdFx0XHRvSW50ZXJmYWNlLmNvbnRleHQgPSB7XG5cdFx0XHRcdFx0Z2V0TW9kZWw6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvSW50ZXJmYWNlLmdldE1vZGVsKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXRQYXRoOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYCR7c0N1cnJlbnRFbnRpdHlTZXROYW1lfS8ke3NEYXRhUHJvcGVydHlQYXRofWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRvUHJvcGVydHlJbmZvID1cblx0XHRcdFx0XHRvRGF0YUZpZWxkQ29udmVydGVkLl90eXBlID09PSBcIlByb3BlcnR5XCJcblx0XHRcdFx0XHRcdD8gb0RhdGFGaWVsZENvbnZlcnRlZFxuXHRcdFx0XHRcdFx0OiAob0RhdGFGaWVsZENvbnZlcnRlZCAmJiBvRGF0YUZpZWxkQ29udmVydGVkLlZhbHVlICYmIG9EYXRhRmllbGRDb252ZXJ0ZWQuVmFsdWUuJHRhcmdldCkgfHxcblx0XHRcdFx0XHRcdCAgKG9EYXRhRmllbGRDb252ZXJ0ZWQgJiYgb0RhdGFGaWVsZENvbnZlcnRlZC5UYXJnZXQgJiYgb0RhdGFGaWVsZENvbnZlcnRlZC5UYXJnZXQuJHRhcmdldCk7XG5cdFx0XHRcdC8vIERhdGFmaWVsZCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIEZpZWxkQ29udHJvbCBjYWxjdWxhdGlvbiwgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWRcblxuXHRcdFx0XHRjb25zdCBjaGFydFByb3BlcnR5ID0gb1Byb3BlcnR5SW5mbyAmJiBvUHJvcGVydHlJbmZvLnRlcm0gJiYgb1Byb3BlcnR5SW5mby50ZXJtID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCI7XG5cdFx0XHRcdGNvbnN0IGlzQWN0aW9uID0gISFvRGF0YUZpZWxkQ29udmVydGVkLkFjdGlvbjtcblx0XHRcdFx0Y29uc3QgaXNGaWVsZEdycCA9IE1hc3NFZGl0SGVscGVyLmdldElzRmllbGRHcnAob0RhdGFGaWVsZENvbnZlcnRlZCk7XG5cdFx0XHRcdGlmIChpc0ltYWdlIHx8IGJIaWRkZW5GaWVsZCB8fCBjaGFydFByb3BlcnR5IHx8IGlzQWN0aW9uIHx8IGlzRmllbGRHcnApIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBWYWx1ZUhlbHAgcHJvcGVydGllc1xuXHRcdFx0XHRzVW5pdFByb3BlcnR5UGF0aCA9XG5cdFx0XHRcdFx0KChoYXNDdXJyZW5jeShvUHJvcGVydHlJbmZvKSB8fCBoYXNVbml0KG9Qcm9wZXJ0eUluZm8pKSAmJiBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aChvUHJvcGVydHlJbmZvKSkgfHwgXCJcIjtcblx0XHRcdFx0Y29uc3QgdW5pdFByb3BlcnR5SW5mbyA9IHNVbml0UHJvcGVydHlQYXRoICYmIGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5SW5mbyk7XG5cdFx0XHRcdGJWYWx1ZUhlbHBFbmFibGVkID0gaGFzVmFsdWVIZWxwKG9Qcm9wZXJ0eUluZm8pO1xuXHRcdFx0XHRiVmFsdWVIZWxwRW5hYmxlZEZvclVuaXQgPSB1bml0UHJvcGVydHlJbmZvICYmIGhhc1ZhbHVlSGVscCh1bml0UHJvcGVydHlJbmZvKTtcblxuXHRcdFx0XHRjb25zdCBoYXNDb250ZXh0RGVwZW5kZW50VkggPVxuXHRcdFx0XHRcdChiVmFsdWVIZWxwRW5hYmxlZCB8fCBiVmFsdWVIZWxwRW5hYmxlZEZvclVuaXQpICYmXG5cdFx0XHRcdFx0KG9Qcm9wZXJ0eUluZm8/LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVycyB8fFxuXHRcdFx0XHRcdFx0KHVuaXRQcm9wZXJ0eUluZm8gJiYgdW5pdFByb3BlcnR5SW5mbz8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzKSk7XG5cdFx0XHRcdGlmIChoYXNDb250ZXh0RGVwZW5kZW50VkgpIHtcblx0XHRcdFx0XHQvLyBjb250ZXh0IGRlcGVuZGVudCBWSCBpcyBub3Qgc3VwcG9ydGVkIGZvciBNYXNzIEVkaXQuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRWRpdE1vZGUgYW5kIElucHV0VHlwZVxuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eUZvckZpZWxkQ29udHJvbCA9IG9Qcm9wZXJ0eUluZm8gJiYgb1Byb3BlcnR5SW5mby5WYWx1ZSA/IG9Qcm9wZXJ0eUluZm8uVmFsdWUgOiBvUHJvcGVydHlJbmZvO1xuXHRcdFx0XHRjb25zdCBleHBCaW5kaW5nID0gZ2V0RWRpdE1vZGUocHJvcGVydHlGb3JGaWVsZENvbnRyb2wsIG9EYXRhTW9kZWxQYXRoLCBmYWxzZSwgZmFsc2UsIG9EYXRhRmllbGRDb252ZXJ0ZWQsIGNvbnN0YW50KHRydWUpKTtcblx0XHRcdFx0Y29uc3QgZWRpdE1vZGVWYWx1ZXMgPSBPYmplY3Qua2V5cyhFZGl0TW9kZSk7XG5cdFx0XHRcdGNvbnN0IGVkaXRNb2RlSXNTdGF0aWMgPSAhIWV4cEJpbmRpbmcgJiYgZWRpdE1vZGVWYWx1ZXMuaW5jbHVkZXMoZXhwQmluZGluZyBhcyBFZGl0TW9kZSk7XG5cdFx0XHRcdGNvbnN0IGVkaXRhYmxlID0gISFleHBCaW5kaW5nICYmICgoZWRpdE1vZGVJc1N0YXRpYyAmJiBleHBCaW5kaW5nID09PSBFZGl0TW9kZS5FZGl0YWJsZSkgfHwgIWVkaXRNb2RlSXNTdGF0aWMpO1xuXHRcdFx0XHRjb25zdCBuYXZQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAgPSBzRGF0YVByb3BlcnR5UGF0aC5pbmNsdWRlcyhcIi9cIikgJiYgYlZhbHVlSGVscEVuYWJsZWQ7XG5cdFx0XHRcdGlmICghZWRpdGFibGUgfHwgbmF2UHJvcGVydHlXaXRoVmFsdWVIZWxwKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgaW5wdXRUeXBlID0gTWFzc0VkaXRIZWxwZXIuZ2V0SW5wdXRUeXBlKG9Qcm9wZXJ0eUluZm8sIG9EYXRhRmllbGRDb252ZXJ0ZWQsIG9EYXRhTW9kZWxQYXRoKTtcblxuXHRcdFx0XHRpZiAoaW5wdXRUeXBlKSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhvRGF0YU1vZGVsUGF0aCk7XG5cdFx0XHRcdFx0Y29uc3QgaXNSZWFkT25seSA9IGlzUmVhZE9ubHlFeHByZXNzaW9uKG9Qcm9wZXJ0eUluZm8sIHJlbGF0aXZlUGF0aCk7XG5cdFx0XHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBDb21tb25VdGlscy5jb21wdXRlRGlzcGxheU1vZGUob1Byb3BlcnR5Q29udGV4dC5nZXRPYmplY3QoKSk7XG5cdFx0XHRcdFx0Y29uc3QgaXNWYWx1ZUhlbHBFbmFibGVkID0gYlZhbHVlSGVscEVuYWJsZWQgPyBiVmFsdWVIZWxwRW5hYmxlZCA6IGZhbHNlO1xuXHRcdFx0XHRcdGNvbnN0IGlzVmFsdWVIZWxwRW5hYmxlZEZvclVuaXQgPVxuXHRcdFx0XHRcdFx0YlZhbHVlSGVscEVuYWJsZWRGb3JVbml0ICYmICFzVW5pdFByb3BlcnR5UGF0aC5pbmNsdWRlcyhcIi9cIikgPyBiVmFsdWVIZWxwRW5hYmxlZEZvclVuaXQgOiBmYWxzZTtcblx0XHRcdFx0XHRjb25zdCB1bml0UHJvcGVydHkgPSBzVW5pdFByb3BlcnR5UGF0aCAmJiAhc0RhdGFQcm9wZXJ0eVBhdGguaW5jbHVkZXMoXCIvXCIpID8gc1VuaXRQcm9wZXJ0eVBhdGggOiBmYWxzZTtcblxuXHRcdFx0XHRcdG9SZXN1bHQgPSB7XG5cdFx0XHRcdFx0XHRsYWJlbDogc0xhYmVsVGV4dCxcblx0XHRcdFx0XHRcdGRhdGFQcm9wZXJ0eTogc0RhdGFQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0XHRpc1ZhbHVlSGVscEVuYWJsZWQ6IGJWYWx1ZUhlbHBFbmFibGVkID8gYlZhbHVlSGVscEVuYWJsZWQgOiBmYWxzZSxcblx0XHRcdFx0XHRcdHVuaXRQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdGlzRmllbGRSZXF1aXJlZDogZ2V0UmVxdWlyZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eUluZm8sIG9EYXRhRmllbGRDb252ZXJ0ZWQsIHRydWUsIGZhbHNlLCB7fSwgb0RhdGFNb2RlbFBhdGgpLFxuXHRcdFx0XHRcdFx0ZGVmYXVsdFNlbGVjdGlvblBhdGg6IHNEYXRhUHJvcGVydHlQYXRoXG5cdFx0XHRcdFx0XHRcdD8gTWFzc0VkaXRIZWxwZXIuZ2V0RGVmYXVsdFNlbGVjdGlvblBhdGhDb21ib0JveChhQ29udGV4dHMsIHNEYXRhUHJvcGVydHlQYXRoKVxuXHRcdFx0XHRcdFx0XHQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0ZGVmYXVsdFNlbGVjdGlvblVuaXRQYXRoOiBzVW5pdFByb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0XHQ/IE1hc3NFZGl0SGVscGVyLmdldERlZmF1bHRTZWxlY3Rpb25QYXRoQ29tYm9Cb3goYUNvbnRleHRzLCBzVW5pdFByb3BlcnR5UGF0aClcblx0XHRcdFx0XHRcdFx0OiBmYWxzZSxcblx0XHRcdFx0XHRcdGVudGl0eVNldDogc0N1cnJlbnRFbnRpdHlTZXROYW1lLFxuXHRcdFx0XHRcdFx0ZGlzcGxheTogZGlzcGxheU1vZGUsXG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvblBhdGg6IE1hc3NFZGl0SGVscGVyLmdldFRleHRQYXRoKHNEYXRhUHJvcGVydHlQYXRoLCBvVGV4dEJpbmRpbmcsIGRpc3BsYXlNb2RlKSxcblx0XHRcdFx0XHRcdG51bGxhYmxlOiBvUHJvcGVydHlJbmZvLm51bGxhYmxlICE9PSB1bmRlZmluZWQgPyBvUHJvcGVydHlJbmZvLm51bGxhYmxlIDogdHJ1ZSxcblx0XHRcdFx0XHRcdGlzUHJvcGVydHlSZWFkT25seTogaXNSZWFkT25seSAhPT0gdW5kZWZpbmVkID8gaXNSZWFkT25seSA6IGZhbHNlLFxuXHRcdFx0XHRcdFx0aW5wdXRUeXBlOiBpbnB1dFR5cGUsXG5cdFx0XHRcdFx0XHRlZGl0TW9kZTogZWRpdGFibGUgPyBleHBCaW5kaW5nIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvOiB7XG5cdFx0XHRcdFx0XHRcdGhhc1ZIOiBpc1ZhbHVlSGVscEVuYWJsZWQsXG5cdFx0XHRcdFx0XHRcdHJ1bnRpbWVQYXRoOiBcImZpZWxkc0luZm8+L3ZhbHVlcy9cIixcblx0XHRcdFx0XHRcdFx0cmVsYXRpdmVQYXRoOiBzRGF0YVByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoRm9yVmFsdWVIZWxwOiBgJHtzQ3VycmVudEVudGl0eVNldE5hbWV9LyR7c0RhdGFQcm9wZXJ0eVBhdGh9YFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHVuaXRJbmZvOiB1bml0UHJvcGVydHkgJiYge1xuXHRcdFx0XHRcdFx0XHRoYXNWSDogaXNWYWx1ZUhlbHBFbmFibGVkRm9yVW5pdCxcblx0XHRcdFx0XHRcdFx0cnVudGltZVBhdGg6IFwiZmllbGRzSW5mbz4vdW5pdERhdGEvXCIsXG5cdFx0XHRcdFx0XHRcdHJlbGF0aXZlUGF0aDogdW5pdFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGhGb3JWYWx1ZUhlbHA6IGAke3NDdXJyZW50RW50aXR5U2V0TmFtZX0vJHt1bml0UHJvcGVydHl9YFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0YURhdGFBcnJheS5wdXNoKG9SZXN1bHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0b0RhdGFGaWVsZE1vZGVsLnNldERhdGEoYURhdGFBcnJheSk7XG5cdFx0cmV0dXJuIG9EYXRhRmllbGRNb2RlbDtcblx0fSxcblxuXHRnZXRUYWJsZUZpZWxkczogZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0Y29uc3QgYUNvbHVtbnMgPSAob1RhYmxlICYmIG9UYWJsZS5nZXRDb2x1bW5zKCkpIHx8IFtdO1xuXHRcdGNvbnN0IGNvbHVtbnNEYXRhID0gb1RhYmxlICYmIG9UYWJsZS5nZXRQYXJlbnQoKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zO1xuXHRcdHJldHVybiBhQ29sdW1ucy5tYXAoZnVuY3Rpb24gKG9Db2x1bW46IGFueSkge1xuXHRcdFx0Y29uc3Qgc0RhdGFQcm9wZXJ0eSA9IG9Db2x1bW4gJiYgb0NvbHVtbi5nZXREYXRhUHJvcGVydHkoKSxcblx0XHRcdFx0YVJlYWx0ZWRDb2x1bW5JbmZvID1cblx0XHRcdFx0XHRjb2x1bW5zRGF0YSAmJlxuXHRcdFx0XHRcdGNvbHVtbnNEYXRhLmZpbHRlcihmdW5jdGlvbiAob0NvbHVtbkluZm86IGFueSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9Db2x1bW5JbmZvLm5hbWUgPT09IHNEYXRhUHJvcGVydHkgJiYgb0NvbHVtbkluZm8udHlwZSA9PT0gXCJBbm5vdGF0aW9uXCI7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRhUHJvcGVydHk6IHNEYXRhUHJvcGVydHksXG5cdFx0XHRcdGxhYmVsOiBvQ29sdW1uLmdldEhlYWRlcigpLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogYVJlYWx0ZWRDb2x1bW5JbmZvICYmIGFSZWFsdGVkQ29sdW1uSW5mb1swXSAmJiBhUmVhbHRlZENvbHVtbkluZm9bMF0uYW5ub3RhdGlvblBhdGhcblx0XHRcdH07XG5cdFx0fSk7XG5cdH0sXG5cblx0Z2V0RGVmYXVsdFRleHRzRm9yRGlhbG9nOiBmdW5jdGlvbiAob1Jlc291cmNlQnVuZGxlOiBhbnksIGlTZWxlY3RlZENvbnRleHRzOiBhbnksIG9UYWJsZTogYW55KSB7XG5cdFx0Ly8gVGhlIGNvbmZpcm0gYnV0dG9uIHRleHQgaXMgXCJTYXZlXCIgZm9yIHRhYmxlIGluIERpc3BsYXkgbW9kZSBhbmQgXCJBcHBseVwiIGZvciB0YWJsZSBpbiBlZGl0IG1vZGUuIFRoaXMgY2FuIGJlIGxhdGVyIGV4cG9zZWQgaWYgbmVlZGVkLlxuXHRcdGNvbnN0IGJEaXNwbGF5TW9kZSA9IG9UYWJsZS5kYXRhKFwiZGlzcGxheU1vZGVQcm9wZXJ0eUJpbmRpbmdcIikgPT09IFwidHJ1ZVwiO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGtlZXBFeGlzdGluZ1ByZWZpeDogXCI8IEtlZXBcIixcblx0XHRcdGxlYXZlQmxhbmtWYWx1ZTogXCI8IExlYXZlIEJsYW5rID5cIixcblx0XHRcdGNsZWFyRmllbGRWYWx1ZTogXCI8IENsZWFyIFZhbHVlcyA+XCIsXG5cdFx0XHRtYXNzRWRpdFRpdGxlOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0RJQUxPR19USVRMRVwiLCBpU2VsZWN0ZWRDb250ZXh0cy50b1N0cmluZygpKSxcblx0XHRcdGFwcGx5QnV0dG9uVGV4dDogYkRpc3BsYXlNb2RlXG5cdFx0XHRcdD8gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9TQVZFX0JVVFRPTl9URVhUXCIpXG5cdFx0XHRcdDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9BUFBMWV9CVVRUT05fVEVYVFwiKSxcblx0XHRcdHVzZVZhbHVlSGVscFZhbHVlOiBcIjwgVXNlIFZhbHVlIEhlbHAgPlwiLFxuXHRcdFx0Y2FuY2VsQnV0dG9uVGV4dDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9PQkpFQ1RfUEFHRV9DQU5DRUxcIiksXG5cdFx0XHRub0ZpZWxkczogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9OT19FRElUQUJMRV9GSUVMRFNcIiksXG5cdFx0XHRva0J1dHRvblRleHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX09LXCIpXG5cdFx0fTtcblx0fSxcblxuXHQvKipcblx0ICogQWRkcyBhIHN1ZmZpeCB0byB0aGUgJ2tlZXAgZXhpc3RpbmcnIHByb3BlcnR5IG9mIHRoZSBjb21ib0JveC5cblx0ICpcblx0ICogQHBhcmFtIHNJbnB1dFR5cGUgSW5wdXRUeXBlIG9mIHRoZSBmaWVsZFxuXHQgKiBAcmV0dXJucyBUaGUgbW9kaWZpZWQgc3RyaW5nXG5cdCAqL1xuXHQvLyBnZXRTdWZmaXhGb3JLZWVwRXhpc2l0aW5nOiBmdW5jdGlvbiAoc0lucHV0VHlwZTogc3RyaW5nKSB7XG5cdC8vIFx0bGV0IHNSZXN1bHQgPSBcIlZhbHVlc1wiO1xuXG5cdC8vIFx0c3dpdGNoIChzSW5wdXRUeXBlKSB7XG5cdC8vIFx0XHQvL1RPRE8gLSBBZGQgZm9yIG90aGVyIGNvbnRyb2wgdHlwZXMgYXMgd2VsbCAoUmFkaW8gQnV0dG9uLCBFbWFpbCwgSW5wdXQsIE1EQyBGaWVsZHMsIEltYWdlIGV0Yy4pXG5cdC8vIFx0XHRjYXNlIFwiRGF0ZVBpY2tlclwiOlxuXHQvLyBcdFx0XHRzUmVzdWx0ID0gXCJEYXRlc1wiO1xuXHQvLyBcdFx0XHRicmVhaztcblx0Ly8gXHRcdGNhc2UgXCJDaGVja0JveFwiOlxuXHQvLyBcdFx0XHRzUmVzdWx0ID0gXCJTZXR0aW5nc1wiO1xuXHQvLyBcdFx0XHRicmVhaztcblx0Ly8gXHRcdGRlZmF1bHQ6XG5cdC8vIFx0XHRcdHNSZXN1bHQgPSBcIlZhbHVlc1wiO1xuXHQvLyBcdH1cblx0Ly8gXHRyZXR1cm4gc1Jlc3VsdDtcblx0Ly8gfSxcblxuXHQvKipcblx0ICogQWRkcyBkZWZhdWx0IHZhbHVlcyB0byB0aGUgbW9kZWwgW0tlZXAgRXhpc3RpbmcgVmFsdWVzLCBMZWF2ZSBCbGFua10uXG5cdCAqXG5cdCAqIEBwYXJhbSBhVmFsdWVzIEFycmF5IGluc3RhbmNlIHdoZXJlIHRoZSBkZWZhdWx0IGRhdGEgbmVlZHMgdG8gYmUgYWRkZWRcblx0ICogQHBhcmFtIG9EZWZhdWx0VmFsdWVzIERlZmF1bHQgdmFsdWVzIGZyb20gQXBwbGljYXRpb24gTWFuaWZlc3Rcblx0ICogQHBhcmFtIG9Qcm9wZXJ0eUluZm8gUHJvcGVydHkgaW5mb3JtYXRpb25cblx0ICogQHBhcmFtIGJVT01GaWVsZFxuXHQgKi9cblx0c2V0RGVmYXVsdFZhbHVlc1RvRGlhbG9nOiBmdW5jdGlvbiAoYVZhbHVlczogYW55LCBvRGVmYXVsdFZhbHVlczogYW55LCBvUHJvcGVydHlJbmZvOiBhbnksIGJVT01GaWVsZD86IGJvb2xlYW4pIHtcblx0XHRjb25zdCBzUHJvcGVydHlQYXRoID0gYlVPTUZpZWxkID8gb1Byb3BlcnR5SW5mby51bml0UHJvcGVydHkgOiBvUHJvcGVydHlJbmZvLmRhdGFQcm9wZXJ0eSxcblx0XHRcdHNJbnB1dFR5cGUgPSBvUHJvcGVydHlJbmZvLmlucHV0VHlwZSxcblx0XHRcdGJQcm9wZXJ0eVJlcXVpcmVkID0gb1Byb3BlcnR5SW5mby5pc0ZpZWxkUmVxdWlyZWQ7XG5cdFx0Ly8gY29uc3Qgc1N1ZmZpeEZvcktlZXBFeGlzdGluZyA9IE1hc3NFZGl0SGVscGVyLmdldFN1ZmZpeEZvcktlZXBFeGlzaXRpbmcoc0lucHV0VHlwZSk7XG5cdFx0Y29uc3Qgc1N1ZmZpeEZvcktlZXBFeGlzdGluZyA9IFwiVmFsdWVzXCI7XG5cdFx0YVZhbHVlcy5kZWZhdWx0T3B0aW9ucyA9IGFWYWx1ZXMuZGVmYXVsdE9wdGlvbnMgfHwgW107XG5cdFx0Y29uc3Qgc2VsZWN0T3B0aW9uc0V4aXN0ID0gYVZhbHVlcy5zZWxlY3RPcHRpb25zICYmIGFWYWx1ZXMuc2VsZWN0T3B0aW9ucy5sZW5ndGggPiAwO1xuXHRcdGNvbnN0IGtlZXBFbnRyeSA9IHtcblx0XHRcdHRleHQ6IGAke29EZWZhdWx0VmFsdWVzLmtlZXBFeGlzdGluZ1ByZWZpeH0gJHtzU3VmZml4Rm9yS2VlcEV4aXN0aW5nfSA+YCxcblx0XHRcdGtleTogYERlZmF1bHQvJHtzUHJvcGVydHlQYXRofWBcblx0XHR9O1xuXG5cdFx0aWYgKHNJbnB1dFR5cGUgPT09IFwiQ2hlY2tCb3hcIikge1xuXHRcdFx0Y29uc3QgZmFsc2VFbnRyeSA9IHsgdGV4dDogXCJOb1wiLCBrZXk6IGAke3NQcm9wZXJ0eVBhdGh9L2ZhbHNlYCwgdGV4dEluZm86IHsgdmFsdWU6IGZhbHNlIH0gfTtcblx0XHRcdGNvbnN0IHRydXRoeUVudHJ5ID0geyB0ZXh0OiBcIlllc1wiLCBrZXk6IGAke3NQcm9wZXJ0eVBhdGh9L3RydWVgLCB0ZXh0SW5mbzogeyB2YWx1ZTogdHJ1ZSB9IH07XG5cdFx0XHRhVmFsdWVzLnVuc2hpZnQoZmFsc2VFbnRyeSk7XG5cdFx0XHRhVmFsdWVzLmRlZmF1bHRPcHRpb25zLnVuc2hpZnQoZmFsc2VFbnRyeSk7XG5cdFx0XHRhVmFsdWVzLnVuc2hpZnQodHJ1dGh5RW50cnkpO1xuXHRcdFx0YVZhbHVlcy5kZWZhdWx0T3B0aW9ucy51bnNoaWZ0KHRydXRoeUVudHJ5KTtcblx0XHRcdGFWYWx1ZXMudW5zaGlmdChrZWVwRW50cnkpO1xuXHRcdFx0YVZhbHVlcy5kZWZhdWx0T3B0aW9ucy51bnNoaWZ0KGtlZXBFbnRyeSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChvUHJvcGVydHlJbmZvPy5wcm9wZXJ0eUluZm8/Lmhhc1ZIIHx8IChvUHJvcGVydHlJbmZvPy51bml0SW5mbz8uaGFzVkggJiYgYlVPTUZpZWxkKSkge1xuXHRcdFx0XHRjb25zdCB2aGRFbnRyeSA9IHsgdGV4dDogb0RlZmF1bHRWYWx1ZXMudXNlVmFsdWVIZWxwVmFsdWUsIGtleTogYFVzZVZhbHVlSGVscFZhbHVlLyR7c1Byb3BlcnR5UGF0aH1gIH07XG5cdFx0XHRcdGFWYWx1ZXMudW5zaGlmdCh2aGRFbnRyeSk7XG5cdFx0XHRcdGFWYWx1ZXMuZGVmYXVsdE9wdGlvbnMudW5zaGlmdCh2aGRFbnRyeSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc2VsZWN0T3B0aW9uc0V4aXN0KSB7XG5cdFx0XHRcdGlmIChiUHJvcGVydHlSZXF1aXJlZCAhPT0gXCJ0cnVlXCIgJiYgIWJVT01GaWVsZCkge1xuXHRcdFx0XHRcdGNvbnN0IGNsZWFyRW50cnkgPSB7IHRleHQ6IG9EZWZhdWx0VmFsdWVzLmNsZWFyRmllbGRWYWx1ZSwga2V5OiBgQ2xlYXJGaWVsZFZhbHVlLyR7c1Byb3BlcnR5UGF0aH1gIH07XG5cdFx0XHRcdFx0YVZhbHVlcy51bnNoaWZ0KGNsZWFyRW50cnkpO1xuXHRcdFx0XHRcdGFWYWx1ZXMuZGVmYXVsdE9wdGlvbnMudW5zaGlmdChjbGVhckVudHJ5KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhVmFsdWVzLnVuc2hpZnQoa2VlcEVudHJ5KTtcblx0XHRcdFx0YVZhbHVlcy5kZWZhdWx0T3B0aW9ucy51bnNoaWZ0KGtlZXBFbnRyeSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBlbXB0eUVudHJ5ID0geyB0ZXh0OiBvRGVmYXVsdFZhbHVlcy5sZWF2ZUJsYW5rVmFsdWUsIGtleTogYERlZmF1bHQvJHtzUHJvcGVydHlQYXRofWAgfTtcblx0XHRcdFx0YVZhbHVlcy51bnNoaWZ0KGVtcHR5RW50cnkpO1xuXHRcdFx0XHRhVmFsdWVzLmRlZmF1bHRPcHRpb25zLnVuc2hpZnQoZW1wdHlFbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgdGV4dCBhcnJhbmdlbWVudCBpbmZvIGZvciBhIGNvbnRleHQgcHJvcGVydHkuXG5cdCAqXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eSBQcm9wZXJ0eSBQYXRoXG5cdCAqIEBwYXJhbSBkZXNjcmlwdGlvblBhdGggUGF0aCB0byB0ZXh0IGFzc29jaWF0aW9uIG9mIHRoZSBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gZGlzcGxheU1vZGUgRGlzcGxheSBtb2RlIG9mIHRoZSBwcm9wZXJ0eSBhbmQgdGV4dCBhc3NvY2lhdGlvblxuXHQgKiBAcGFyYW0gc2VsZWN0ZWRDb250ZXh0IENvbnRleHQgdG8gZmluZCB0aGUgZnVsbCB0ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSB0ZXh0IGFycmFuZ2VtZW50XG5cdCAqL1xuXHRnZXRUZXh0QXJyYW5nZW1lbnRJbmZvOiBmdW5jdGlvbiAoXG5cdFx0cHJvcGVydHk6IHN0cmluZyxcblx0XHRkZXNjcmlwdGlvblBhdGg6IHN0cmluZyxcblx0XHRkaXNwbGF5TW9kZTogc3RyaW5nLFxuXHRcdHNlbGVjdGVkQ29udGV4dDogQ29udGV4dFxuXHQpOiBUZXh0QXJyYW5nZW1lbnRJbmZvIHtcblx0XHRsZXQgdmFsdWUgPSBzZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KHByb3BlcnR5KSxcblx0XHRcdGRlc2NyaXB0aW9uVmFsdWUsXG5cdFx0XHRmdWxsVGV4dDtcblx0XHRpZiAoZGVzY3JpcHRpb25QYXRoICYmIHByb3BlcnR5KSB7XG5cdFx0XHRzd2l0Y2ggKGRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uVmFsdWUgPSBzZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KGRlc2NyaXB0aW9uUGF0aCkgfHwgXCJcIjtcblx0XHRcdFx0XHRmdWxsVGV4dCA9IGRlc2NyaXB0aW9uVmFsdWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJWYWx1ZVwiOlxuXHRcdFx0XHRcdHZhbHVlID0gc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChwcm9wZXJ0eSkgfHwgXCJcIjtcblx0XHRcdFx0XHRmdWxsVGV4dCA9IHZhbHVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHZhbHVlID0gc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChwcm9wZXJ0eSkgfHwgXCJcIjtcblx0XHRcdFx0XHRkZXNjcmlwdGlvblZhbHVlID0gc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChkZXNjcmlwdGlvblBhdGgpIHx8IFwiXCI7XG5cdFx0XHRcdFx0ZnVsbFRleHQgPSBkZXNjcmlwdGlvblZhbHVlID8gYCR7dmFsdWV9ICgke2Rlc2NyaXB0aW9uVmFsdWV9KWAgOiB2YWx1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdFx0XHR2YWx1ZSA9IHNlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QocHJvcGVydHkpIHx8IFwiXCI7XG5cdFx0XHRcdFx0ZGVzY3JpcHRpb25WYWx1ZSA9IHNlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoZGVzY3JpcHRpb25QYXRoKSB8fCBcIlwiO1xuXHRcdFx0XHRcdGZ1bGxUZXh0ID0gZGVzY3JpcHRpb25WYWx1ZSA/IGAke2Rlc2NyaXB0aW9uVmFsdWV9ICgke3ZhbHVlfSlgIDogdmFsdWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0TG9nLmluZm8oYERpc3BsYXkgUHJvcGVydHkgbm90IGFwcGxpY2FibGU6ICR7cHJvcGVydHl9YCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRleHRBcnJhbmdlbWVudDogZGlzcGxheU1vZGUsXG5cdFx0XHR2YWx1ZVBhdGg6IHByb3BlcnR5LFxuXHRcdFx0ZGVzY3JpcHRpb25QYXRoOiBkZXNjcmlwdGlvblBhdGgsXG5cdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHRkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25WYWx1ZSxcblx0XHRcdGZ1bGxUZXh0OiBmdWxsVGV4dFxuXHRcdH07XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybiB0aGUgdmlzaWJpbGl0eSB2YWx1dWUgZm9yIHRoZSBNYW5hZ2VkT2JqZWN0IEFueS5cblx0ICpcblx0ICogQHBhcmFtIGFueSBUaGUgTWFuYWdlZE9iamVjdCBBbnkgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHZpc2libGUgdmFsdWUgb2YgdGhlIGJpbmRpbmcuXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFzcyBlZGl0IGZpZWxkIGlzIGVkaXRhYmxlLlxuXHQgKi9cblx0aXNFZGl0YWJsZTogZnVuY3Rpb24gKGFueTogQW55VHlwZSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGJpbmRpbmcgPSBhbnkuZ2V0QmluZGluZyhcImFueVwiKTtcblx0XHRjb25zdCB2YWx1ZSA9IChiaW5kaW5nIGFzIGFueSkuZ2V0RXh0ZXJuYWxWYWx1ZSgpO1xuXHRcdHJldHVybiB2YWx1ZSA9PT0gRWRpdE1vZGUuRWRpdGFibGU7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZSBhbmQgdXBkYXRlIHRoZSB2aXNpYmlsaXR5IG9mIG1hc3MgZWRpdCBmaWVsZCBvbiBjaGFuZ2Ugb2YgdGhlIE1hbmFnZWRPYmplY3QgQW55IGJpbmRpbmcuXG5cdCAqXG5cdCAqIEBwYXJhbSBvRGlhbG9nRGF0YU1vZGVsIE1vZGVsIHRvIGJlIHVzZWQgcnVudGltZS5cblx0ICogQHBhcmFtIGRhdGFQcm9wZXJ0eSBGaWVsZCBuYW1lLlxuXHQgKi9cblx0b25Db250ZXh0RWRpdGFibGVDaGFuZ2U6IGZ1bmN0aW9uIChvRGlhbG9nRGF0YU1vZGVsOiBKU09OTW9kZWwsIGRhdGFQcm9wZXJ0eTogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3Qgb2JqZWN0c0ZvclZpc2liaWxpdHkgPSBvRGlhbG9nRGF0YU1vZGVsLmdldFByb3BlcnR5KGAvdmFsdWVzLyR7ZGF0YVByb3BlcnR5fS9vYmplY3RzRm9yVmlzaWJpbGl0eWApIHx8IFtdO1xuXHRcdGNvbnN0IGVkaXRhYmxlID0gb2JqZWN0c0ZvclZpc2liaWxpdHkuc29tZShNYXNzRWRpdEhlbHBlci5pc0VkaXRhYmxlKTtcblxuXHRcdGlmIChlZGl0YWJsZSkge1xuXHRcdFx0b0RpYWxvZ0RhdGFNb2RlbC5zZXRQcm9wZXJ0eShgL3ZhbHVlcy8ke2RhdGFQcm9wZXJ0eX0vdmlzaWJsZWAsIGVkaXRhYmxlKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFVwZGF0ZSBNYW5hZ2VkIE9iamVjdCBBbnkgZm9yIHZpc2liaWxpdHkgb2YgdGhlIG1hc3MgZWRpdCBmaWVsZHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBtT1RvVXNlIFRoZSBNYW5hZ2VkT2JqZWN0IEFueSB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgdmlzaWJsZSB2YWx1ZSBvZiB0aGUgYmluZGluZy5cblx0ICogQHBhcmFtIG9EaWFsb2dEYXRhTW9kZWwgTW9kZWwgdG8gYmUgdXNlZCBydW50aW1lLlxuXHQgKiBAcGFyYW0gZGF0YVByb3BlcnR5IEZpZWxkIG5hbWUuXG5cdCAqIEBwYXJhbSB2YWx1ZXMgVmFsdWVzIG9mIHRoZSBmaWVsZC5cblx0ICovXG5cdHVwZGF0ZU9uQ29udGV4dENoYW5nZTogZnVuY3Rpb24gKG1PVG9Vc2U6IEFueVR5cGUsIG9EaWFsb2dEYXRhTW9kZWw6IEpTT05Nb2RlbCwgZGF0YVByb3BlcnR5OiBzdHJpbmcsIHZhbHVlczogYW55KSB7XG5cdFx0Y29uc3QgYmluZGluZyA9IG1PVG9Vc2UuZ2V0QmluZGluZyhcImFueVwiKTtcblxuXHRcdHZhbHVlcy5vYmplY3RzRm9yVmlzaWJpbGl0eSA9IHZhbHVlcy5vYmplY3RzRm9yVmlzaWJpbGl0eSB8fCBbXTtcblx0XHR2YWx1ZXMub2JqZWN0c0ZvclZpc2liaWxpdHkucHVzaChtT1RvVXNlKTtcblxuXHRcdGJpbmRpbmc/LmF0dGFjaENoYW5nZShNYXNzRWRpdEhlbHBlci5vbkNvbnRleHRFZGl0YWJsZUNoYW5nZS5iaW5kKG51bGwsIG9EaWFsb2dEYXRhTW9kZWwsIGRhdGFQcm9wZXJ0eSkpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgYm91bmQgb2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgdmlzaWJpbGl0eSBvZiBjb250ZXh0cy5cblx0ICpcblx0ICogQHBhcmFtIGV4cEJpbmRpbmcgQmluZGluZyBTdHJpbmcgb2JqZWN0LlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHRoZSBiaW5kaW5nIHZhbHVlLlxuXHQgKiBAcmV0dXJucyBUaGUgTWFuYWdlZE9iamVjdCBBbnkgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHZpc2libGUgdmFsdWUgb2YgdGhlIGJpbmRpbmcuXG5cdCAqL1xuXHRnZXRCb3VuZE9iamVjdDogZnVuY3Rpb24gKGV4cEJpbmRpbmc6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBjb250ZXh0OiBDb250ZXh0KTogQW55VHlwZSB7XG5cdFx0Y29uc3QgbU9Ub1VzZSA9IG5ldyBBbnkoeyBhbnk6IGV4cEJpbmRpbmcgfSk7XG5cdFx0Y29uc3QgbW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCk7XG5cdFx0bU9Ub1VzZS5zZXRNb2RlbChtb2RlbCk7XG5cdFx0bU9Ub1VzZS5zZXRCaW5kaW5nQ29udGV4dChjb250ZXh0KTtcblxuXHRcdHJldHVybiBtT1RvVXNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZpZWxkLlxuXHQgKlxuXHQgKiBAcGFyYW0gZXhwQmluZGluZyBCaW5kaW5nIFN0cmluZyBvYmplY3QuXG5cdCAqIEBwYXJhbSBvRGlhbG9nRGF0YU1vZGVsIE1vZGVsIHRvIGJlIHVzZWQgcnVudGltZS5cblx0ICogQHBhcmFtIGRhdGFQcm9wZXJ0eSBGaWVsZCBuYW1lLlxuXHQgKiBAcGFyYW0gdmFsdWVzIFZhbHVlcyBvZiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgdGhlIGJpbmRpbmcgdmFsdWUuXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFzcyBlZGl0IGZpZWxkIGlzIGVkaXRhYmxlLlxuXHQgKi9cblx0Z2V0RmllbGRWaXNpYmxpdHk6IGZ1bmN0aW9uIChcblx0XHRleHBCaW5kaW5nOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0XHRvRGlhbG9nRGF0YU1vZGVsOiBKU09OTW9kZWwsXG5cdFx0ZGF0YVByb3BlcnR5OiBzdHJpbmcsXG5cdFx0dmFsdWVzOiBhbnksXG5cdFx0Y29udGV4dDogQ29udGV4dFxuXHQpOiBib29sZWFuIHtcblx0XHRjb25zdCBtT1RvVXNlID0gTWFzc0VkaXRIZWxwZXIuZ2V0Qm91bmRPYmplY3QoZXhwQmluZGluZywgY29udGV4dCk7XG5cdFx0Y29uc3QgaXNDb250ZXh0RWRpdGFibGUgPSBNYXNzRWRpdEhlbHBlci5pc0VkaXRhYmxlKG1PVG9Vc2UpO1xuXG5cdFx0aWYgKCFpc0NvbnRleHRFZGl0YWJsZSkge1xuXHRcdFx0TWFzc0VkaXRIZWxwZXIudXBkYXRlT25Db250ZXh0Q2hhbmdlKG1PVG9Vc2UsIG9EaWFsb2dEYXRhTW9kZWwsIGRhdGFQcm9wZXJ0eSwgdmFsdWVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIGlzQ29udGV4dEVkaXRhYmxlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyBhIHJ1bnRpbWUgbW9kZWw6XG5cdCAqID0+IFRoZSBtb2RlbCBjb25zaXN0cyBvZiB2YWx1ZXMgc2hvd24gaW4gdGhlIGNvbWJvQm94IG9mIHRoZSBkaWFsb2cgKExlYXZlIEJsYW5rLCBLZWVwIEV4aXN0aW5nIFZhbHVlcywgb3IgYW55IHByb3BlcnR5IHZhbHVlIGZvciB0aGUgc2VsZWN0ZWQgY29udGV4dCwgZXRjLilcblx0ICogPT4gVGhlIG1vZGVsIHdpbGwgY2FwdHVyZSBydW50aW1lIGNoYW5nZXMgaW4gdGhlIHJlc3VsdHMgcHJvcGVydHkgKHRoZSB2YWx1ZSBlbnRlcmVkIGluIHRoZSBjb21ib0JveCkuXG5cdCAqXG5cdCAqIEBwYXJhbSBhQ29udGV4dHMgQ29udGV4dHMgZm9yIG1hc3MgZWRpdFxuXHQgKiBAcGFyYW0gYURhdGFBcnJheSBBcnJheSBjb250YWluaW5nIGRhdGEgcmVsYXRlZCB0byB0aGUgZGlhbG9nIHVzZWQgYnkgYm90aCB0aGUgc3RhdGljIGFuZCB0aGUgcnVudGltZSBtb2RlbFxuXHQgKiBAcGFyYW0gb0RlZmF1bHRWYWx1ZXMgRGVmYXVsdCB2YWx1ZXMgZnJvbSBpMThuXG5cdCAqIEBwYXJhbSBkaWFsb2dDb250ZXh0IFRyYW5zaWVudCBjb250ZXh0IGZvciBtYXNzIGVkaXQgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBUaGUgcnVudGltZSBtb2RlbFxuXHQgKi9cblx0c2V0UnVudGltZU1vZGVsT25EaWFsb2c6IGZ1bmN0aW9uIChhQ29udGV4dHM6IGFueVtdLCBhRGF0YUFycmF5OiBhbnlbXSwgb0RlZmF1bHRWYWx1ZXM6IGFueSwgZGlhbG9nQ29udGV4dDogQ29udGV4dCkge1xuXHRcdGNvbnN0IGFWYWx1ZXM6IGFueVtdID0gW107XG5cdFx0Y29uc3QgYVVuaXREYXRhOiBhbnlbXSA9IFtdO1xuXHRcdGNvbnN0IGFSZXN1bHRzOiBhbnlbXSA9IFtdO1xuXHRcdGNvbnN0IHRleHRQYXRoczogYW55W10gPSBbXTtcblx0XHRjb25zdCBhUmVhZE9ubHlGaWVsZEluZm86IGFueVtdID0gW107XG5cblx0XHRjb25zdCBvRGF0YSA9IHtcblx0XHRcdHZhbHVlczogYVZhbHVlcyxcblx0XHRcdHVuaXREYXRhOiBhVW5pdERhdGEsXG5cdFx0XHRyZXN1bHRzOiBhUmVzdWx0cyxcblx0XHRcdHJlYWRhYmxlUHJvcGVydHlEYXRhOiBhUmVhZE9ubHlGaWVsZEluZm8sXG5cdFx0XHRzZWxlY3RlZEtleTogdW5kZWZpbmVkLFxuXHRcdFx0dGV4dFBhdGhzOiB0ZXh0UGF0aHMsXG5cdFx0XHRub0ZpZWxkczogb0RlZmF1bHRWYWx1ZXMubm9GaWVsZHNcblx0XHR9O1xuXHRcdGNvbnN0IG9EaWFsb2dEYXRhTW9kZWwgPSBuZXcgSlNPTk1vZGVsKG9EYXRhKTtcblx0XHRhRGF0YUFycmF5LmZvckVhY2goZnVuY3Rpb24gKG9JbkRhdGE6IGFueSkge1xuXHRcdFx0bGV0IG9UZXh0SW5mbztcblx0XHRcdGxldCBzUHJvcGVydHlLZXk7XG5cdFx0XHRsZXQgc1VuaXRQcm9wZXJ0eU5hbWU7XG5cdFx0XHRjb25zdCBvRGlzdGluY3RWYWx1ZU1hcDogYW55ID0ge307XG5cdFx0XHRjb25zdCBvRGlzdGluY3RVbml0TWFwOiBhbnkgPSB7fTtcblx0XHRcdGlmIChvSW5EYXRhLmRhdGFQcm9wZXJ0eSAmJiBvSW5EYXRhLmRhdGFQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRcdGNvbnN0IGFGaW5hbFBhdGggPSBNYXNzRWRpdEhlbHBlci5pbml0TGFzdExldmVsT2ZQcm9wZXJ0eVBhdGgob0luRGF0YS5kYXRhUHJvcGVydHksIGFWYWx1ZXMgLyosIGRpYWxvZ0NvbnRleHQgKi8pO1xuXHRcdFx0XHRjb25zdCBhUHJvcGVydHlQYXRocyA9IG9JbkRhdGEuZGF0YVByb3BlcnR5LnNwbGl0KFwiL1wiKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbnRleHQgb2YgYUNvbnRleHRzKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc011bHRpTGV2ZWxQYXRoVmFsdWUgPSBjb250ZXh0LmdldE9iamVjdChvSW5EYXRhLmRhdGFQcm9wZXJ0eSk7XG5cdFx0XHRcdFx0c1Byb3BlcnR5S2V5ID0gYCR7b0luRGF0YS5kYXRhUHJvcGVydHl9LyR7c011bHRpTGV2ZWxQYXRoVmFsdWV9YDtcblx0XHRcdFx0XHRpZiAoIW9EaXN0aW5jdFZhbHVlTWFwW3NQcm9wZXJ0eUtleV0gJiYgYUZpbmFsUGF0aFthUHJvcGVydHlQYXRoc1thUHJvcGVydHlQYXRocy5sZW5ndGggLSAxXV0pIHtcblx0XHRcdFx0XHRcdG9UZXh0SW5mbyA9IE1hc3NFZGl0SGVscGVyLmdldFRleHRBcnJhbmdlbWVudEluZm8oXG5cdFx0XHRcdFx0XHRcdG9JbkRhdGEuZGF0YVByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRvSW5EYXRhLmRlc2NyaXB0aW9uUGF0aCxcblx0XHRcdFx0XHRcdFx0b0luRGF0YS5kaXNwbGF5LFxuXHRcdFx0XHRcdFx0XHRjb250ZXh0XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0YUZpbmFsUGF0aFthUHJvcGVydHlQYXRoc1thUHJvcGVydHlQYXRocy5sZW5ndGggLSAxXV0ucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHRleHQ6IChvVGV4dEluZm8gJiYgb1RleHRJbmZvLmZ1bGxUZXh0KSB8fCBzTXVsdGlMZXZlbFBhdGhWYWx1ZSxcblx0XHRcdFx0XHRcdFx0a2V5OiBzUHJvcGVydHlLZXksXG5cdFx0XHRcdFx0XHRcdHRleHRJbmZvOiBvVGV4dEluZm9cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0b0Rpc3RpbmN0VmFsdWVNYXBbc1Byb3BlcnR5S2V5XSA9IHNNdWx0aUxldmVsUGF0aFZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBpZiAoT2JqZWN0LmtleXMob0Rpc3RpbmN0VmFsdWVNYXApLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHQvLyBcdGRpYWxvZ0NvbnRleHQuc2V0UHJvcGVydHkob0RhdGEuZGF0YVByb3BlcnR5LCBzUHJvcGVydHlLZXkgJiYgb0Rpc3RpbmN0VmFsdWVNYXBbc1Byb3BlcnR5S2V5XSk7XG5cdFx0XHRcdC8vIH1cblxuXHRcdFx0XHRhRmluYWxQYXRoW2FQcm9wZXJ0eVBhdGhzW2FQcm9wZXJ0eVBhdGhzLmxlbmd0aCAtIDFdXS50ZXh0SW5mbyA9IHtcblx0XHRcdFx0XHRkZXNjcmlwdGlvblBhdGg6IG9JbkRhdGEuZGVzY3JpcHRpb25QYXRoLFxuXHRcdFx0XHRcdHZhbHVlUGF0aDogb0luRGF0YS5kYXRhUHJvcGVydHksXG5cdFx0XHRcdFx0ZGlzcGxheU1vZGU6IG9JbkRhdGEuZGlzcGxheVxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0gPSBhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XSB8fCBbXTtcblx0XHRcdFx0YVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV1bXCJzZWxlY3RPcHRpb25zXCJdID0gYVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV1bXCJzZWxlY3RPcHRpb25zXCJdIHx8IFtdO1xuXHRcdFx0XHRpZiAob0luRGF0YS51bml0UHJvcGVydHkpIHtcblx0XHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldID0gYVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XSB8fCBbXTtcblx0XHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldW1wic2VsZWN0T3B0aW9uc1wiXSA9IGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV1bXCJzZWxlY3RPcHRpb25zXCJdIHx8IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoY29uc3QgY29udGV4dCBvZiBhQ29udGV4dHMpIHtcblx0XHRcdFx0XHRjb25zdCBvRGF0YU9iamVjdCA9IGNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0c1Byb3BlcnR5S2V5ID0gYCR7b0luRGF0YS5kYXRhUHJvcGVydHl9LyR7b0RhdGFPYmplY3Rbb0luRGF0YS5kYXRhUHJvcGVydHldfWA7XG5cdFx0XHRcdFx0aWYgKG9JbkRhdGEuZGF0YVByb3BlcnR5ICYmIG9EYXRhT2JqZWN0W29JbkRhdGEuZGF0YVByb3BlcnR5XSAmJiAhb0Rpc3RpbmN0VmFsdWVNYXBbc1Byb3BlcnR5S2V5XSkge1xuXHRcdFx0XHRcdFx0aWYgKG9JbkRhdGEuaW5wdXRUeXBlICE9IFwiQ2hlY2tCb3hcIikge1xuXHRcdFx0XHRcdFx0XHRvVGV4dEluZm8gPSBNYXNzRWRpdEhlbHBlci5nZXRUZXh0QXJyYW5nZW1lbnRJbmZvKFxuXHRcdFx0XHRcdFx0XHRcdG9JbkRhdGEuZGF0YVByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRcdG9JbkRhdGEuZGVzY3JpcHRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRcdG9JbkRhdGEuZGlzcGxheSxcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGVudHJ5ID0ge1xuXHRcdFx0XHRcdFx0XHRcdHRleHQ6IChvVGV4dEluZm8gJiYgb1RleHRJbmZvLmZ1bGxUZXh0KSB8fCBvRGF0YU9iamVjdFtvSW5EYXRhLmRhdGFQcm9wZXJ0eV0sXG5cdFx0XHRcdFx0XHRcdFx0a2V5OiBzUHJvcGVydHlLZXksXG5cdFx0XHRcdFx0XHRcdFx0dGV4dEluZm86IG9UZXh0SW5mb1xuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XS5wdXNoKGVudHJ5KTtcblx0XHRcdFx0XHRcdFx0YVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV1bXCJzZWxlY3RPcHRpb25zXCJdLnB1c2goZW50cnkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0b0Rpc3RpbmN0VmFsdWVNYXBbc1Byb3BlcnR5S2V5XSA9IG9EYXRhT2JqZWN0W29JbkRhdGEuZGF0YVByb3BlcnR5XTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKG9JbkRhdGEudW5pdFByb3BlcnR5ICYmIG9EYXRhT2JqZWN0W29JbkRhdGEudW5pdFByb3BlcnR5XSkge1xuXHRcdFx0XHRcdFx0c1VuaXRQcm9wZXJ0eU5hbWUgPSBgJHtvSW5EYXRhLnVuaXRQcm9wZXJ0eX0vJHtvRGF0YU9iamVjdFtvSW5EYXRhLnVuaXRQcm9wZXJ0eV19YDtcblx0XHRcdFx0XHRcdGlmICghb0Rpc3RpbmN0VW5pdE1hcFtzVW5pdFByb3BlcnR5TmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9JbkRhdGEuaW5wdXRUeXBlICE9IFwiQ2hlY2tCb3hcIikge1xuXHRcdFx0XHRcdFx0XHRcdG9UZXh0SW5mbyA9IE1hc3NFZGl0SGVscGVyLmdldFRleHRBcnJhbmdlbWVudEluZm8oXG5cdFx0XHRcdFx0XHRcdFx0XHRvSW5EYXRhLnVuaXRQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFx0XHRcdG9JbkRhdGEuZGVzY3JpcHRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRcdFx0b0luRGF0YS5kaXNwbGF5LFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgdW5pdEVudHJ5ID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGV4dDogKG9UZXh0SW5mbyAmJiBvVGV4dEluZm8uZnVsbFRleHQpIHx8IG9EYXRhT2JqZWN0W29JbkRhdGEudW5pdFByb3BlcnR5XSxcblx0XHRcdFx0XHRcdFx0XHRcdGtleTogc1VuaXRQcm9wZXJ0eU5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHR0ZXh0SW5mbzogb1RleHRJbmZvXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldLnB1c2godW5pdEVudHJ5KTtcblx0XHRcdFx0XHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldW1wic2VsZWN0T3B0aW9uc1wiXS5wdXNoKHVuaXRFbnRyeSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0b0Rpc3RpbmN0VW5pdE1hcFtzVW5pdFByb3BlcnR5TmFtZV0gPSBvRGF0YU9iamVjdFtvSW5EYXRhLnVuaXRQcm9wZXJ0eV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldLnRleHRJbmZvID0ge1xuXHRcdFx0XHRcdGRlc2NyaXB0aW9uUGF0aDogb0luRGF0YS5kZXNjcmlwdGlvblBhdGgsXG5cdFx0XHRcdFx0dmFsdWVQYXRoOiBvSW5EYXRhLmRhdGFQcm9wZXJ0eSxcblx0XHRcdFx0XHRkaXNwbGF5TW9kZTogb0luRGF0YS5kaXNwbGF5XG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvRGlzdGluY3RWYWx1ZU1hcCkubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0ZGlhbG9nQ29udGV4dC5zZXRQcm9wZXJ0eShvSW5EYXRhLmRhdGFQcm9wZXJ0eSwgc1Byb3BlcnR5S2V5ICYmIG9EaXN0aW5jdFZhbHVlTWFwW3NQcm9wZXJ0eUtleV0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvRGlzdGluY3RVbml0TWFwKS5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRkaWFsb2dDb250ZXh0LnNldFByb3BlcnR5KG9JbkRhdGEudW5pdFByb3BlcnR5LCBzVW5pdFByb3BlcnR5TmFtZSAmJiBvRGlzdGluY3RVbml0TWFwW3NVbml0UHJvcGVydHlOYW1lXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRleHRQYXRoc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0gPSBvSW5EYXRhLmRlc2NyaXB0aW9uUGF0aCA/IFtvSW5EYXRhLmRlc2NyaXB0aW9uUGF0aF0gOiBbXTtcblx0XHR9KTtcblx0XHRhRGF0YUFycmF5LmZvckVhY2goZnVuY3Rpb24gKG9JbkRhdGE6IGFueSkge1xuXHRcdFx0bGV0IHZhbHVlczogYW55ID0ge307XG5cdFx0XHRpZiAob0luRGF0YS5kYXRhUHJvcGVydHkuaW5kZXhPZihcIi9cIikgPiAtMSkge1xuXHRcdFx0XHRjb25zdCBzTXVsdGlMZXZlbFByb3BQYXRoVmFsdWUgPSBNYXNzRWRpdEhlbHBlci5nZXRWYWx1ZUZvck11bHRpTGV2ZWxQYXRoKG9JbkRhdGEuZGF0YVByb3BlcnR5LCBhVmFsdWVzKTtcblx0XHRcdFx0aWYgKCFzTXVsdGlMZXZlbFByb3BQYXRoVmFsdWUpIHtcblx0XHRcdFx0XHRzTXVsdGlMZXZlbFByb3BQYXRoVmFsdWUucHVzaCh7IHRleHQ6IG9EZWZhdWx0VmFsdWVzLmxlYXZlQmxhbmtWYWx1ZSwga2V5OiBgRW1wdHkvJHtvSW5EYXRhLmRhdGFQcm9wZXJ0eX1gIH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE1hc3NFZGl0SGVscGVyLnNldERlZmF1bHRWYWx1ZXNUb0RpYWxvZyhzTXVsdGlMZXZlbFByb3BQYXRoVmFsdWUsIG9EZWZhdWx0VmFsdWVzLCBvSW5EYXRhKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YWx1ZXMgPSBzTXVsdGlMZXZlbFByb3BQYXRoVmFsdWU7XG5cdFx0XHR9IGVsc2UgaWYgKGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldKSB7XG5cdFx0XHRcdGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldID0gYVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0gfHwgW107XG5cdFx0XHRcdE1hc3NFZGl0SGVscGVyLnNldERlZmF1bHRWYWx1ZXNUb0RpYWxvZyhhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XSwgb0RlZmF1bHRWYWx1ZXMsIG9JbkRhdGEpO1xuXHRcdFx0XHR2YWx1ZXMgPSBhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0gJiYgYVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XS5sZW5ndGgpIHtcblx0XHRcdFx0TWFzc0VkaXRIZWxwZXIuc2V0RGVmYXVsdFZhbHVlc1RvRGlhbG9nKGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0sIG9EZWZhdWx0VmFsdWVzLCBvSW5EYXRhLCB0cnVlKTtcblx0XHRcdFx0YVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XS50ZXh0SW5mbyA9IHt9O1xuXHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldLnNlbGVjdGVkS2V5ID0gTWFzc0VkaXRIZWxwZXIuZ2V0RGVmYXVsdFNlbGVjdGlvblBhdGhDb21ib0JveChcblx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0b0luRGF0YS51bml0UHJvcGVydHlcblx0XHRcdFx0KTtcblx0XHRcdFx0YVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XS5pbnB1dFR5cGUgPSBvSW5EYXRhLmlucHV0VHlwZTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdChvSW5EYXRhLmRhdGFQcm9wZXJ0eSAmJiBhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XSAmJiAhYVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0ubGVuZ3RoKSB8fFxuXHRcdFx0XHQob0luRGF0YS51bml0UHJvcGVydHkgJiYgYVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XSAmJiAhYVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XS5sZW5ndGgpXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgYkNsZWFyRmllbGRPckJsYW5rVmFsdWVFeGlzdHMgPVxuXHRcdFx0XHRcdGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldICYmXG5cdFx0XHRcdFx0YVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0uc29tZShmdW5jdGlvbiAob2JqOiBhbnkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvYmoudGV4dCA9PT0gXCI8IENsZWFyIFZhbHVlcyA+XCIgfHwgb2JqLnRleHQgPT09IFwiPCBMZWF2ZSBCbGFuayA+XCI7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChvSW5EYXRhLmRhdGFQcm9wZXJ0eSAmJiAhYkNsZWFyRmllbGRPckJsYW5rVmFsdWVFeGlzdHMpIHtcblx0XHRcdFx0XHRhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XS5wdXNoKHsgdGV4dDogb0RlZmF1bHRWYWx1ZXMubGVhdmVCbGFua1ZhbHVlLCBrZXk6IGBFbXB0eS8ke29JbkRhdGEuZGF0YVByb3BlcnR5fWAgfSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgYkNsZWFyRmllbGRPckJsYW5rVW5pdFZhbHVlRXhpc3RzID1cblx0XHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldICYmXG5cdFx0XHRcdFx0YVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XS5zb21lKGZ1bmN0aW9uIChvYmo6IGFueSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9iai50ZXh0ID09PSBcIjwgQ2xlYXIgVmFsdWVzID5cIiB8fCBvYmoudGV4dCA9PT0gXCI8IExlYXZlIEJsYW5rID5cIjtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKG9JbkRhdGEudW5pdFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0aWYgKCFiQ2xlYXJGaWVsZE9yQmxhbmtVbml0VmFsdWVFeGlzdHMpIHtcblx0XHRcdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0ucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHRleHQ6IG9EZWZhdWx0VmFsdWVzLmxlYXZlQmxhbmtWYWx1ZSxcblx0XHRcdFx0XHRcdFx0a2V5OiBgRW1wdHkvJHtvSW5EYXRhLnVuaXRQcm9wZXJ0eX1gXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XS50ZXh0SW5mbyA9IHt9O1xuXHRcdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0uc2VsZWN0ZWRLZXkgPSBNYXNzRWRpdEhlbHBlci5nZXREZWZhdWx0U2VsZWN0aW9uUGF0aENvbWJvQm94KFxuXHRcdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0b0luRGF0YS51bml0UHJvcGVydHlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0uaW5wdXRUeXBlID0gb0luRGF0YS5pbnB1dFR5cGU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvSW5EYXRhLmlzUHJvcGVydHlSZWFkT25seSAmJiB0eXBlb2Ygb0luRGF0YS5pc1Byb3BlcnR5UmVhZE9ubHkgPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0XHRcdGFSZWFkT25seUZpZWxkSW5mby5wdXNoKHsgcHJvcGVydHk6IG9JbkRhdGEuZGF0YVByb3BlcnR5LCB2YWx1ZTogb0luRGF0YS5pc1Byb3BlcnR5UmVhZE9ubHksIHR5cGU6IFwiRGVmYXVsdFwiIH0pO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0b0luRGF0YS5pc1Byb3BlcnR5UmVhZE9ubHkgJiZcblx0XHRcdFx0b0luRGF0YS5pc1Byb3BlcnR5UmVhZE9ubHkub3BlcmFuZHMgJiZcblx0XHRcdFx0b0luRGF0YS5pc1Byb3BlcnR5UmVhZE9ubHkub3BlcmFuZHNbMF0gJiZcblx0XHRcdFx0b0luRGF0YS5pc1Byb3BlcnR5UmVhZE9ubHkub3BlcmFuZHNbMF0ub3BlcmFuZDEgJiZcblx0XHRcdFx0b0luRGF0YS5pc1Byb3BlcnR5UmVhZE9ubHkub3BlcmFuZHNbMF0ub3BlcmFuZDJcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBUaGlzIG5lZWRzIHRvIGJlIHJlZmFjdG9yZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBSZWFkT25seUV4cHJlc3Npb24gY2hhbmdlXG5cdFx0XHRcdGFSZWFkT25seUZpZWxkSW5mby5wdXNoKHtcblx0XHRcdFx0XHRwcm9wZXJ0eTogb0luRGF0YS5kYXRhUHJvcGVydHksXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoOiBvSW5EYXRhLmlzUHJvcGVydHlSZWFkT25seS5vcGVyYW5kc1swXS5vcGVyYW5kMS5wYXRoLFxuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWU6IG9JbkRhdGEuaXNQcm9wZXJ0eVJlYWRPbmx5Lm9wZXJhbmRzWzBdLm9wZXJhbmQyLnZhbHVlLFxuXHRcdFx0XHRcdHR5cGU6IFwiUGF0aFwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXR0aW5nIHZpc2JpbGl0eSBvZiB0aGUgbWFzcyBlZGl0IGZpZWxkLlxuXHRcdFx0aWYgKG9JbkRhdGEuZWRpdE1vZGUpIHtcblx0XHRcdFx0dmFsdWVzLnZpc2libGUgPVxuXHRcdFx0XHRcdG9JbkRhdGEuZWRpdE1vZGUgPT09IEVkaXRNb2RlLkVkaXRhYmxlIHx8XG5cdFx0XHRcdFx0YUNvbnRleHRzLnNvbWUoXG5cdFx0XHRcdFx0XHRNYXNzRWRpdEhlbHBlci5nZXRGaWVsZFZpc2libGl0eS5iaW5kKFxuXHRcdFx0XHRcdFx0XHRNYXNzRWRpdEhlbHBlcixcblx0XHRcdFx0XHRcdFx0b0luRGF0YS5lZGl0TW9kZSxcblx0XHRcdFx0XHRcdFx0b0RpYWxvZ0RhdGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0b0luRGF0YS5kYXRhUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdHZhbHVlc1xuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YWx1ZXMudmlzaWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHR2YWx1ZXMuc2VsZWN0ZWRLZXkgPSBNYXNzRWRpdEhlbHBlci5nZXREZWZhdWx0U2VsZWN0aW9uUGF0aENvbWJvQm94KGFDb250ZXh0cywgb0luRGF0YS5kYXRhUHJvcGVydHkpO1xuXHRcdFx0dmFsdWVzLmlucHV0VHlwZSA9IG9JbkRhdGEuaW5wdXRUeXBlO1xuXHRcdFx0dmFsdWVzLnVuaXRQcm9wZXJ0eSA9IG9JbkRhdGEudW5pdFByb3BlcnR5O1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIG9EaWFsb2dEYXRhTW9kZWw7XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXRzIHRyYW5zaWVudCBjb250ZXh0IGZvciBkaWFsb2cuXG5cdCAqXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiBUYWJsZS5cblx0ICogQHBhcmFtIGRpYWxvZyBNYXNzIEVkaXQgRGlhbG9nLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJldHVybmluZyBpbnN0YW5jZSBvZiBkaWFsb2cuXG5cdCAqL1xuXHRnZXREaWFsb2dDb250ZXh0OiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBkaWFsb2c/OiBEaWFsb2cpOiBDb250ZXh0IHtcblx0XHRsZXQgdHJhbnNDdHg6IENvbnRleHQgPSAoZGlhbG9nICYmIGRpYWxvZy5nZXRCaW5kaW5nQ29udGV4dCgpKSBhcyBDb250ZXh0O1xuXG5cdFx0aWYgKCF0cmFuc0N0eCkge1xuXHRcdFx0Y29uc3QgbW9kZWwgPSB0YWJsZS5nZXRNb2RlbCgpO1xuXHRcdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSB0YWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRjb25zdCB0cmFuc2llbnRMaXN0QmluZGluZyA9IG1vZGVsLmJpbmRMaXN0KGxpc3RCaW5kaW5nLmdldFBhdGgoKSwgbGlzdEJpbmRpbmcuZ2V0Q29udGV4dCgpLCBbXSwgW10sIHtcblx0XHRcdFx0JCR1cGRhdGVHcm91cElkOiBcInN1Ym1pdExhdGVyXCJcblx0XHRcdH0pIGFzIE9EYXRhTGlzdEJpbmRpbmc7XG5cdFx0XHQodHJhbnNpZW50TGlzdEJpbmRpbmcgYXMgYW55KS5yZWZyZXNoSW50ZXJuYWwgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdC8qICovXG5cdFx0XHR9O1xuXHRcdFx0dHJhbnNDdHggPSB0cmFuc2llbnRMaXN0QmluZGluZy5jcmVhdGUoe30sIHRydWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cmFuc0N0eDtcblx0fSxcblxuXHRvbkRpYWxvZ09wZW46IGZ1bmN0aW9uIChldmVudDogYW55KTogdm9pZCB7XG5cdFx0Y29uc3Qgc291cmNlID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgZmllbGRzSW5mb01vZGVsID0gc291cmNlLmdldE1vZGVsKFwiZmllbGRzSW5mb1wiKTtcblx0XHRmaWVsZHNJbmZvTW9kZWwuc2V0UHJvcGVydHkoXCIvaXNPcGVuXCIsIHRydWUpO1xuXHR9LFxuXG5cdGNsb3NlRGlhbG9nOiBmdW5jdGlvbiAob0RpYWxvZzogYW55KSB7XG5cdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdG9EaWFsb2cuZGVzdHJveSgpO1xuXHR9LFxuXG5cdG1lc3NhZ2VIYW5kbGluZ0Zvck1hc3NFZGl0OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b1RhYmxlOiBUYWJsZSxcblx0XHRhQ29udGV4dHM6IGFueSxcblx0XHRvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsXG5cdFx0b0luRGlhbG9nOiBhbnksXG5cdFx0YVJlc3VsdHM6IGFueSxcblx0XHRlcnJvckNvbnRleHRzOiBhbnlcblx0KSB7XG5cdFx0Y29uc3QgRHJhZnRTdGF0dXMgPSBGRUxpYnJhcnkuRHJhZnRTdGF0dXM7XG5cdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblx0XHQob0NvbnRyb2xsZXIuZ2V0VmlldygpPy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KT8uc2V0UHJvcGVydHkoXCJnZXRCb3VuZE1lc3NhZ2VzRm9yTWFzc0VkaXRcIiwgdHJ1ZSk7XG5cdFx0b0NvbnRyb2xsZXIuX2VkaXRGbG93LmdldE1lc3NhZ2VIYW5kbGVyKCkuc2hvd01lc3NhZ2VzKHtcblx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2U6IGZ1bmN0aW9uIChtZXNzYWdlczogYW55LCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdFx0XHQvL21lc3NhZ2VzLmNvbmNhdGVuYXRlKG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcyh0cnVlLCB0cnVlKSk7XG5cdFx0XHRcdHNob3dNZXNzYWdlUGFyYW1ldGVycy5mbkdldE1lc3NhZ2VTdWJ0aXRsZSA9IG1lc3NhZ2VIYW5kbGluZy5zZXRNZXNzYWdlU3VidGl0bGUuYmluZCh7fSwgb1RhYmxlLCBhQ29udGV4dHMpO1xuXHRcdFx0XHRjb25zdCB1bmJvdW5kRXJyb3JzOiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRtZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChtZXNzYWdlOiBhbnkpIHtcblx0XHRcdFx0XHRpZiAoIW1lc3NhZ2UuZ2V0VGFyZ2V0KCkpIHtcblx0XHRcdFx0XHRcdHVuYm91bmRFcnJvcnMucHVzaChtZXNzYWdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChhUmVzdWx0cy5sZW5ndGggPiAwICYmIGVycm9yQ29udGV4dHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuX2VkaXRGbG93LnNldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLlNhdmVkKTtcblx0XHRcdFx0XHRjb25zdCBzdWNjZXNzVG9hc3QgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX1NVQ0NFU1NfVE9BU1RcIik7XG5cdFx0XHRcdFx0TWVzc2FnZVRvYXN0LnNob3coc3VjY2Vzc1RvYXN0KTtcblx0XHRcdFx0fSBlbHNlIGlmIChlcnJvckNvbnRleHRzLmxlbmd0aCA8IChvVGFibGUgYXMgYW55KS5nZXRTZWxlY3RlZENvbnRleHRzKCkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuX2VkaXRGbG93LnNldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLlNhdmVkKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlcnJvckNvbnRleHRzLmxlbmd0aCA9PT0gKG9UYWJsZSBhcyBhbnkpLmdldFNlbGVjdGVkQ29udGV4dHMoKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5fZWRpdEZsb3cuc2V0RHJhZnRTdGF0dXMoRHJhZnRTdGF0dXMuQ2xlYXIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9Db250cm9sbGVyLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSAmJiB1bmJvdW5kRXJyb3JzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlUGFyYW1ldGVycy5zaG93TWVzc2FnZUJveCA9IGZhbHNlO1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlUGFyYW1ldGVycy5zaG93TWVzc2FnZURpYWxvZyA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzaG93TWVzc2FnZVBhcmFtZXRlcnM7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKG9JbkRpYWxvZy5pc09wZW4oKSkge1xuXHRcdFx0TWFzc0VkaXRIZWxwZXIuY2xvc2VEaWFsb2cob0luRGlhbG9nKTtcblx0XHRcdChvQ29udHJvbGxlci5nZXRWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpPy5zZXRQcm9wZXJ0eShcInNraXBQYXRjaEhhbmRsZXJzXCIsIGZhbHNlKTtcblx0XHR9XG5cdFx0KG9Db250cm9sbGVyLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCk/LnNldFByb3BlcnR5KFwiZ2V0Qm91bmRNZXNzYWdlc0Zvck1hc3NFZGl0XCIsIGZhbHNlKTtcblx0fSxcblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgc2lkZSBlZmZlY3RzIG1hcCBmcm9tIHNpZGUgZWZmZWN0cyBpZHMod2hpY2ggaXMgYSBjb21iaW5hdGlvbiBvZiBlbnRpdHkgdHlwZSBhbmQgcXVhbGlmaWVyKS5cblx0ICpcblx0ICogQHBhcmFtIG9FbnRpdHlTZXRDb250ZXh0XG5cdCAqIEBwYXJhbSBhU2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIG9Db250cm9sbGVyXG5cdCAqIEBwYXJhbSBhUmVzdWx0c1xuXHQgKiBAcmV0dXJucyBTaWRlIGVmZmVjdCBtYXAgd2l0aCBkYXRhLlxuXHQgKi9cblx0Z2V0U2lkZUVmZmVjdERhdGFGb3JLZXk6IGZ1bmN0aW9uIChvRW50aXR5U2V0Q29udGV4dDogYW55LCBhU2lkZUVmZmVjdHM6IGFueSwgb0NvbnRyb2xsZXI6IGFueSwgYVJlc3VsdHM6IGFueSkge1xuXHRcdGNvbnN0IHNPd25lckVudGl0eVR5cGUgPSBvRW50aXR5U2V0Q29udGV4dC5nZXRQcm9wZXJ0eShcIiRUeXBlXCIpO1xuXHRcdGNvbnN0IGJhc2VTaWRlRWZmZWN0c01hcEFycmF5OiBhbnkgPSB7fTtcblxuXHRcdGFSZXN1bHRzLmZvckVhY2goKHJlc3VsdDogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBzUGF0aCA9IHJlc3VsdC5rZXlWYWx1ZTtcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzQXJyYXkgPSBGaWVsZEhlbHBlci5nZXRTaWRlRWZmZWN0c09uRW50aXR5QW5kUHJvcGVydHkoc1BhdGgsIHNPd25lckVudGl0eVR5cGUsIGFTaWRlRWZmZWN0cyk7XG5cdFx0XHRiYXNlU2lkZUVmZmVjdHNNYXBBcnJheVtzUGF0aF0gPSBvQ29udHJvbGxlci5fc2lkZUVmZmVjdHMuZ2VuZXJhdGVTaWRlRWZmZWN0c01hcEZyb21TaWRlRWZmZWN0SWQoc2lkZUVmZmVjdHNBcnJheSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGJhc2VTaWRlRWZmZWN0c01hcEFycmF5O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHaXZlIHRoZSBlbnRpdHkgdHlwZSBmb3IgYSBnaXZlbiBzcGF0aCBmb3IgZS5nLlJlcXVlc3RlZFF1YW50aXR5LlxuXHQgKlxuXHQgKiBAcGFyYW0gc1BhdGhcblx0ICogQHBhcmFtIHNFbnRpdHlUeXBlXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsXG5cdCAqIEByZXR1cm5zIE9iamVjdCBoYXZpbmcgZW50aXR5LCBzcGF0aCBhbmQgbmF2aWdhdGlvbiBwYXRoLlxuXHQgKi9cblx0Zm5HZXRQYXRoRm9yU291cmNlUHJvcGVydHk6IGZ1bmN0aW9uIChzUGF0aDogYW55LCBzRW50aXR5VHlwZTogYW55LCBvTWV0YU1vZGVsOiBhbnkpIHtcblx0XHQvLyBpZiB0aGUgcHJvcGVydHkgcGF0aCBoYXMgYSBuYXZpZ2F0aW9uLCBnZXQgdGhlIHRhcmdldCBlbnRpdHkgdHlwZSBvZiB0aGUgbmF2aWdhdGlvblxuXHRcdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9XG5cdFx0XHRcdHNQYXRoLmluZGV4T2YoXCIvXCIpID4gMCA/IFwiL1wiICsgc0VudGl0eVR5cGUgKyBcIi9cIiArIHNQYXRoLnN1YnN0cigwLCBzUGF0aC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSArIFwiQHNhcHVpLm5hbWVcIiA6IGZhbHNlLFxuXHRcdFx0cE93bmVyRW50aXR5ID0gIXNOYXZpZ2F0aW9uUGF0aCA/IFByb21pc2UucmVzb2x2ZShzRW50aXR5VHlwZSkgOiBvTWV0YU1vZGVsLnJlcXVlc3RPYmplY3Qoc05hdmlnYXRpb25QYXRoKTtcblx0XHRzUGF0aCA9IHNOYXZpZ2F0aW9uUGF0aCA/IHNQYXRoLnN1YnN0cihzUGF0aC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSA6IHNQYXRoO1xuXHRcdHJldHVybiB7IHNQYXRoLCBwT3duZXJFbnRpdHksIHNOYXZpZ2F0aW9uUGF0aCB9O1xuXHR9LFxuXG5cdGZuR2V0RW50aXR5VHlwZU9mT3duZXI6IGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBhbnksIGJhc2VOYXZQYXRoOiBzdHJpbmcsIG9FbnRpdHlTZXRDb250ZXh0OiBhbnksIHRhcmdldEVudGl0eTogc3RyaW5nLCBhVGFyZ2V0czogYW55KSB7XG5cdFx0Y29uc3Qgb3duZXJFbnRpdHlUeXBlID0gb0VudGl0eVNldENvbnRleHQuZ2V0UHJvcGVydHkoXCIkVHlwZVwiKTtcblx0XHRjb25zdCB7ICRUeXBlOiBwT3duZXIsICRQYXJ0bmVyOiBvd25lck5hdlBhdGggfSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke29FbnRpdHlTZXRDb250ZXh0fS8ke2Jhc2VOYXZQYXRofWApOyAvLyBuYXYgcGF0aFxuXHRcdGlmIChvd25lck5hdlBhdGgpIHtcblx0XHRcdGNvbnN0IGVudGl0eU9iak9mT3duZXJQYXJ0bmVyID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYC8ke3BPd25lcn0vJHtvd25lck5hdlBhdGh9YCk7XG5cdFx0XHRpZiAoZW50aXR5T2JqT2ZPd25lclBhcnRuZXIpIHtcblx0XHRcdFx0Y29uc3QgZW50aXR5VHlwZU9mT3duZXJQYXJ0bmVyID0gZW50aXR5T2JqT2ZPd25lclBhcnRuZXJbXCIkVHlwZVwiXTtcblx0XHRcdFx0Ly8gaWYgdGhlIGVudGl0eSB0eXBlcyBkZWZlciwgdGhlbiBiYXNlIG5hdiBwYXRoIGlzIG5vdCBmcm9tIG93bmVyXG5cdFx0XHRcdGlmIChlbnRpdHlUeXBlT2ZPd25lclBhcnRuZXIgIT09IG93bmVyRW50aXR5VHlwZSkge1xuXHRcdFx0XHRcdC8vIGlmIHRhcmdldCBQcm9wIGlzIG5vdCBmcm9tIG93bmVyLCB3ZSBhZGQgaXQgYXMgaW1tZWRpYXRlXG5cdFx0XHRcdFx0YVRhcmdldHMucHVzaCh0YXJnZXRFbnRpdHkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vICRQYXJ0bmVyIGF0dHJpYnV0ZSwgaXQgbWF5IG5vdCBiZSBmcm9tIG93bmVyXG5cdFx0XHRhVGFyZ2V0cy5wdXNoKHRhcmdldEVudGl0eSk7XG5cdFx0fVxuXHRcdHJldHVybiBhVGFyZ2V0cztcblx0fSxcblxuXHQvKipcblx0ICogR2l2ZSB0YXJnZXRzIHRoYXQgYXJlIGltbWVkaWF0ZSBvciBkZWZlcnJlZCBiYXNlZCBvbiB0aGUgZW50aXR5IHR5cGUgb2YgdGhhdCB0YXJnZXQuXG5cdCAqXG5cdCAqXG5cdCAqIEBwYXJhbSBzaWRlRWZmZWN0c0RhdGFcblx0ICogQHBhcmFtIG9FbnRpdHlTZXRDb250ZXh0XG5cdCAqIEBwYXJhbSBzRW50aXR5VHlwZVxuXHQgKiBAcGFyYW0gb01ldGFNb2RlbFxuXHQgKiBAcmV0dXJucyBUYXJnZXRzIHRvIHJlcXVlc3Qgc2lkZSBlZmZlY3RzLlxuXHQgKi9cblx0Zm5HZXRUYXJnZXRzRm9yTWFzc0VkaXQ6IGZ1bmN0aW9uIChzaWRlRWZmZWN0c0RhdGE6IGFueSwgb0VudGl0eVNldENvbnRleHQ6IGFueSwgc0VudGl0eVR5cGU6IGFueSwgb01ldGFNb2RlbDogYW55KSB7XG5cdFx0Y29uc3QgeyBUYXJnZXRQcm9wZXJ0aWVzOiBhVGFyZ2V0UHJvcGVydGllcywgVGFyZ2V0RW50aXRpZXM6IGFUYXJnZXRFbnRpdGllcyB9ID0gc2lkZUVmZmVjdHNEYXRhO1xuXHRcdGNvbnN0IGFQcm9taXNlczogYW55ID0gW107XG5cdFx0bGV0IGFUYXJnZXRzOiBhbnkgPSBbXTtcblx0XHRjb25zdCBvd25lckVudGl0eVR5cGUgPSBvRW50aXR5U2V0Q29udGV4dC5nZXRQcm9wZXJ0eShcIiRUeXBlXCIpO1xuXG5cdFx0aWYgKHNFbnRpdHlUeXBlID09PSBvd25lckVudGl0eVR5cGUpIHtcblx0XHRcdC8vIGlmIFNhbGVzT3JkciBJdGVtXG5cdFx0XHRhVGFyZ2V0RW50aXRpZXM/LmZvckVhY2goKHRhcmdldEVudGl0eTogYW55KSA9PiB7XG5cdFx0XHRcdHRhcmdldEVudGl0eSA9IHRhcmdldEVudGl0eVtcIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCJdO1xuXHRcdFx0XHRsZXQgYmFzZU5hdlBhdGg6IHN0cmluZztcblx0XHRcdFx0aWYgKHRhcmdldEVudGl0eS5pbmNsdWRlcyhcIi9cIikpIHtcblx0XHRcdFx0XHRiYXNlTmF2UGF0aCA9IHRhcmdldEVudGl0eS5zcGxpdChcIi9cIilbMF07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YmFzZU5hdlBhdGggPSB0YXJnZXRFbnRpdHk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YVRhcmdldHMgPSBNYXNzRWRpdEhlbHBlci5mbkdldEVudGl0eVR5cGVPZk93bmVyKG9NZXRhTW9kZWwsIGJhc2VOYXZQYXRoLCBvRW50aXR5U2V0Q29udGV4dCwgdGFyZ2V0RW50aXR5LCBhVGFyZ2V0cyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoYVRhcmdldFByb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0XHRhVGFyZ2V0UHJvcGVydGllcy5mb3JFYWNoKCh0YXJnZXRQcm9wOiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3QgeyBwT3duZXJFbnRpdHkgfSA9IE1hc3NFZGl0SGVscGVyLmZuR2V0UGF0aEZvclNvdXJjZVByb3BlcnR5KHRhcmdldFByb3AsIHNFbnRpdHlUeXBlLCBvTWV0YU1vZGVsKTtcblx0XHRcdFx0YVByb21pc2VzLnB1c2goXG5cdFx0XHRcdFx0cE93bmVyRW50aXR5LnRoZW4oKHJlc3VsdEVudGl0eTogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBpZiBlbnRpdHkgaXMgU2FsZXNPcmRlckl0ZW0sIFRhcmdldCBQcm9wZXJ0eSBpcyBmcm9tIEl0ZW1zIHRhYmxlXG5cdFx0XHRcdFx0XHRpZiAocmVzdWx0RW50aXR5ID09PSBvd25lckVudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdFx0YVRhcmdldHMucHVzaCh0YXJnZXRQcm9wKTsgLy8gZ2V0IGltbWVkaWF0ZSB0YXJnZXRzXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHRhcmdldFByb3AuaW5jbHVkZXMoXCIvXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGJhc2VOYXZQYXRoID0gdGFyZ2V0UHJvcC5zcGxpdChcIi9cIilbMF07XG5cdFx0XHRcdFx0XHRcdGFUYXJnZXRzID0gTWFzc0VkaXRIZWxwZXIuZm5HZXRFbnRpdHlUeXBlT2ZPd25lcihcblx0XHRcdFx0XHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcdGJhc2VOYXZQYXRoLFxuXHRcdFx0XHRcdFx0XHRcdG9FbnRpdHlTZXRDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRcdHRhcmdldFByb3AsXG5cdFx0XHRcdFx0XHRcdFx0YVRhcmdldHNcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoYVRhcmdldHMpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YVByb21pc2VzLnB1c2goUHJvbWlzZS5yZXNvbHZlKGFUYXJnZXRzKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKGFQcm9taXNlcyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGluIHRoZSBnaXZlbiBzaWRlIEVmZmVjdHMgT2JqLCBpZiBfSXRlbSBpcyBzZXQgYXMgVGFyZ2V0IEVudGl0eSBmb3IgYW55IHNpZGUgRWZmZWN0cyBvblxuXHQgKiBvdGhlciBlbnRpdHkgc2V0LlxuXHQgKlxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdHNNYXBcblx0ICogQHBhcmFtIG9FbnRpdHlTZXRDb250ZXh0XG5cdCAqIEByZXR1cm5zIExlbmd0aCBvZiBzaWRlRWZmZWN0c0FycmF5IHdoZXJlIGN1cnJlbnQgRW50aXR5IGlzIHNldCBhcyBUYXJnZXQgRW50aXR5XG5cdCAqL1xuXHRjaGVja0lmRW50aXR5RXhpc3RzQXNUYXJnZXRFbnRpdHk6IChcblx0XHRzaWRlRWZmZWN0c01hcDogTWFzc0VkaXRGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5IHwgRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSxcblx0XHRvRW50aXR5U2V0Q29udGV4dDogQ29udGV4dFxuXHQpID0+IHtcblx0XHRjb25zdCBvd25lckVudGl0eVR5cGUgPSBvRW50aXR5U2V0Q29udGV4dC5nZXRQcm9wZXJ0eShcIiRUeXBlXCIpO1xuXHRcdGNvbnN0IHNpZGVFZmZlY3RzT25PdGhlckVudGl0eTogTWFzc0VkaXRGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGVbXSA9IE9iamVjdC52YWx1ZXMoc2lkZUVmZmVjdHNNYXApLmZpbHRlcihcblx0XHRcdChvYmo6IE1hc3NFZGl0RmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlKSA9PiB7XG5cdFx0XHRcdHJldHVybiBvYmoubmFtZS5pbmRleE9mKG93bmVyRW50aXR5VHlwZSkgPT0gLTE7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGNvbnN0IGVudGl0eVNldE5hbWUgPSBvRW50aXR5U2V0Q29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIvXCIpLnBvcCgpO1xuXHRcdGNvbnN0IHNpZGVFZmZlY3RzV2l0aEN1cnJlbnRFbnRpdHlBc1RhcmdldCA9IHNpZGVFZmZlY3RzT25PdGhlckVudGl0eS5maWx0ZXIoKG9iajogTWFzc0VkaXRGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGUpID0+IHtcblx0XHRcdGNvbnN0IHRhcmdldEVudGl0aWVzQXJyYXk6IFNpZGVFZmZlY3RzVGFyZ2V0RW50aXR5VHlwZVtdIHwgdW5kZWZpbmVkID0gb2JqLnNpZGVFZmZlY3RzLlRhcmdldEVudGl0aWVzO1xuXHRcdFx0cmV0dXJuIHRhcmdldEVudGl0aWVzQXJyYXk/LmZpbHRlcihcblx0XHRcdFx0KGlubmVyT2JqOiBTaWRlRWZmZWN0c1RhcmdldEVudGl0eVR5cGUpID0+IGlubmVyT2JqW1wiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIl0gPT09IGVudGl0eVNldE5hbWVcblx0XHRcdCkubGVuZ3RoXG5cdFx0XHRcdD8gb2JqXG5cdFx0XHRcdDogZmFsc2U7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHNpZGVFZmZlY3RzV2l0aEN1cnJlbnRFbnRpdHlBc1RhcmdldC5sZW5ndGg7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFVwb24gdXBkYXRpbmcgdGhlIGZpZWxkLCBhcnJheSBvZiBpbW1lZGlhdGUgYW5kIGRlZmVycmVkIHNpZGUgZWZmZWN0cyBmb3IgdGhhdCBmaWVsZCBhcmUgY3JlYXRlZC5cblx0ICogSWYgdGhlcmUgYXJlIGFueSBmYWlsZWQgc2lkZSBlZmZlY3RzIGZvciB0aGF0IGNvbnRleHQsIHRoZXkgd2lsbCBhbHNvIGJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIG1hcC5cblx0ICogSWYgdGhlIGZpZWxkIGhhcyB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBpdCwgdGhlbiBhZGQgaXQgdG8gcmVxdWVzdCBzaWRlIGVmZmVjdHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBtUGFyYW1zXG5cdCAqIEBwYXJhbSBtUGFyYW1zLm9Db250cm9sbGVyIENvbnRyb2xsZXJcblx0ICogQHBhcmFtIG1QYXJhbXMub0ZpZWxkUHJvbWlzZSBQcm9taXNlIHRvIHVwZGF0ZSBmaWVsZFxuXHQgKiBAcGFyYW0gbVBhcmFtcy5zaWRlRWZmZWN0TWFwIFNpZGVFZmZlY3RzTWFwIGZvciB0aGUgZmllbGRcblx0ICogQHBhcmFtIG1QYXJhbXMudGV4dFBhdGhzIFRleHRQYXRocyBvZiB0aGUgZmllbGQgaWYgYW55XG5cdCAqIEBwYXJhbSBtUGFyYW1zLmdyb3VwSWQgR3JvdXAgSWQgdG8gdXNlZCB0byBncm91cCByZXF1ZXN0c1xuXHQgKiBAcGFyYW0gbVBhcmFtcy5rZXkgS2V5VmFsdWUgb2YgdGhlIGZpZWxkXG5cdCAqIEBwYXJhbSBtUGFyYW1zLm9FbnRpdHlTZXRDb250ZXh0IEVudGl0eVNldGNvbnRleHRcblx0ICogQHBhcmFtIG1QYXJhbXMub01ldGFNb2RlbCBNZXRhbW9kZWwgZGF0YVxuXHQgKiBAcGFyYW0gbVBhcmFtcy5zZWxlY3RlZENvbnRleHQgU2VsZWN0ZWQgcm93IGNvbnRleHRcblx0ICogQHBhcmFtIG1QYXJhbXMuZGVmZXJyZWRUYXJnZXRzRm9yQVF1YWxpZmllZE5hbWUgRGVmZXJyZWQgdGFyZ2V0cyBkYXRhXG5cdCAqIEByZXR1cm5zIFByb21pc2UgZm9yIGFsbCBpbW1lZGlhdGVseSByZXF1ZXN0ZWQgc2lkZSBlZmZlY3RzLlxuXHQgKi9cblx0aGFuZGxlTWFzc0VkaXRGaWVsZFVwZGF0ZUFuZFJlcXVlc3RTaWRlRWZmZWN0czogYXN5bmMgZnVuY3Rpb24gKG1QYXJhbXM6IERhdGFUb1VwZGF0ZUZpZWxkQW5kU2lkZUVmZmVjdHNUeXBlKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0b0NvbnRyb2xsZXIsXG5cdFx0XHRvRmllbGRQcm9taXNlLFxuXHRcdFx0c2lkZUVmZmVjdHNNYXAsXG5cdFx0XHR0ZXh0UGF0aHMsXG5cdFx0XHRncm91cElkLFxuXHRcdFx0a2V5LFxuXHRcdFx0b0VudGl0eVNldENvbnRleHQsXG5cdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0b1NlbGVjdGVkQ29udGV4dCxcblx0XHRcdGRlZmVycmVkVGFyZ2V0c0ZvckFRdWFsaWZpZWROYW1lXG5cdFx0fSA9IG1QYXJhbXM7XG5cdFx0Y29uc3QgaW1tZWRpYXRlU2lkZUVmZmVjdHNQcm9taXNlcyA9IFtvRmllbGRQcm9taXNlXTtcblx0XHRjb25zdCBvd25lckVudGl0eVR5cGUgPSBvRW50aXR5U2V0Q29udGV4dC5nZXRQcm9wZXJ0eShcIiRUeXBlXCIpO1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob0NvbnRyb2xsZXIuZ2V0VmlldygpKTtcblx0XHRjb25zdCBvU2lkZUVmZmVjdHNTZXJ2aWNlID0gb0FwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblxuXHRcdGNvbnN0IGlzU2lkZUVmZmVjdHNXaXRoQ3VycmVudEVudGl0eUFzVGFyZ2V0ID0gTWFzc0VkaXRIZWxwZXIuY2hlY2tJZkVudGl0eUV4aXN0c0FzVGFyZ2V0RW50aXR5KHNpZGVFZmZlY3RzTWFwLCBvRW50aXR5U2V0Q29udGV4dCk7XG5cblx0XHRpZiAoc2lkZUVmZmVjdHNNYXApIHtcblx0XHRcdGNvbnN0IGFsbEVudGl0eVR5cGVzV2l0aFF1YWxpZmllciA9IE9iamVjdC5rZXlzKHNpZGVFZmZlY3RzTWFwKTtcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzRGF0YUZvckZpZWxkOiBhbnkgPSBPYmplY3QudmFsdWVzKHNpZGVFZmZlY3RzTWFwKTtcblxuXHRcdFx0Y29uc3QgbVZpc2l0ZWRTaWRlRWZmZWN0czogYW55ID0ge307XG5cdFx0XHRkZWZlcnJlZFRhcmdldHNGb3JBUXVhbGlmaWVkTmFtZVtrZXldID0ge307XG5cdFx0XHRmb3IgKGNvbnN0IFtpbmRleCwgZGF0YV0gb2Ygc2lkZUVmZmVjdHNEYXRhRm9yRmllbGQuZW50cmllcygpKSB7XG5cdFx0XHRcdGNvbnN0IGVudGl0eVR5cGVXaXRoUXVhbGlmaWVyID0gYWxsRW50aXR5VHlwZXNXaXRoUXVhbGlmaWVyW2luZGV4XTtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVR5cGUgPSBlbnRpdHlUeXBlV2l0aFF1YWxpZmllci5zcGxpdChcIiNcIilbMF07XG5cdFx0XHRcdGNvbnN0IG9Db250ZXh0OiBhbnkgPSBvQ29udHJvbGxlci5fc2lkZUVmZmVjdHMuZ2V0Q29udGV4dEZvclNpZGVFZmZlY3RzKG9TZWxlY3RlZENvbnRleHQsIHNFbnRpdHlUeXBlKTtcblx0XHRcdFx0ZGF0YS5jb250ZXh0ID0gb0NvbnRleHQ7XG5cblx0XHRcdFx0Y29uc3QgYWxsRmFpbGVkU2lkZUVmZmVjdHMgPSBvQ29udHJvbGxlci5fc2lkZUVmZmVjdHMuZ2V0UmVnaXN0ZXJlZEZhaWxlZFJlcXVlc3RzKCk7XG5cdFx0XHRcdGNvbnN0IGFGYWlsZWRTaWRlRWZmZWN0cyA9IGFsbEZhaWxlZFNpZGVFZmZlY3RzW29Db250ZXh0LmdldFBhdGgoKV07XG5cdFx0XHRcdG9Db250cm9sbGVyLl9zaWRlRWZmZWN0cy5kZWxldGVGYWlsZWRSZXF1ZXN0c0ZvckFDb250ZXh0KG9Db250ZXh0KTtcblx0XHRcdFx0bGV0IHNpZGVFZmZlY3RzRm9yQ3VycmVudENvbnRleHQgPSBbZGF0YS5zaWRlRWZmZWN0c107XG5cdFx0XHRcdHNpZGVFZmZlY3RzRm9yQ3VycmVudENvbnRleHQgPVxuXHRcdFx0XHRcdGFGYWlsZWRTaWRlRWZmZWN0cyAmJiBhRmFpbGVkU2lkZUVmZmVjdHMubGVuZ3RoXG5cdFx0XHRcdFx0XHQ/IHNpZGVFZmZlY3RzRm9yQ3VycmVudENvbnRleHQuY29uY2F0KGFGYWlsZWRTaWRlRWZmZWN0cylcblx0XHRcdFx0XHRcdDogc2lkZUVmZmVjdHNGb3JDdXJyZW50Q29udGV4dDtcblx0XHRcdFx0bVZpc2l0ZWRTaWRlRWZmZWN0c1tvQ29udGV4dF0gPSB7fTtcblx0XHRcdFx0Zm9yIChjb25zdCBhU2lkZUVmZmVjdCBvZiBzaWRlRWZmZWN0c0ZvckN1cnJlbnRDb250ZXh0KSB7XG5cdFx0XHRcdFx0aWYgKCFtVmlzaXRlZFNpZGVFZmZlY3RzW29Db250ZXh0XS5oYXNPd25Qcm9wZXJ0eShhU2lkZUVmZmVjdC5mdWxseVF1YWxpZmllZE5hbWUpKSB7XG5cdFx0XHRcdFx0XHRtVmlzaXRlZFNpZGVFZmZlY3RzW29Db250ZXh0XVthU2lkZUVmZmVjdC5mdWxseVF1YWxpZmllZE5hbWVdID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGxldCBhSW1tZWRpYXRlVGFyZ2V0czogYW55W10gPSBbXSxcblx0XHRcdFx0XHRcdFx0YWxsVGFyZ2V0czogYW55W10gPSBbXSxcblx0XHRcdFx0XHRcdFx0dHJpZ2dlckFjdGlvbk5hbWU6IFN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRcdFx0Y29uc3QgZm5HZXRJbW1lZGlhdGVUYXJnZXRzQW5kQWN0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIChtU2lkZUVmZmVjdDogU2lkZUVmZmVjdHNUeXBlKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHsgVGFyZ2V0UHJvcGVydGllczogYVRhcmdldFByb3BlcnRpZXMsIFRhcmdldEVudGl0aWVzOiBhVGFyZ2V0RW50aXRpZXMgfSA9IG1TaWRlRWZmZWN0O1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzaWRlRWZmZWN0RW50aXR5VHlwZSA9IG1TaWRlRWZmZWN0LmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIkBcIilbMF07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHRhcmdldHNBcnJheUZvckFsbFByb3BlcnRpZXMgPSBhd2FpdCBNYXNzRWRpdEhlbHBlci5mbkdldFRhcmdldHNGb3JNYXNzRWRpdChcblx0XHRcdFx0XHRcdFx0XHRtU2lkZUVmZmVjdCxcblx0XHRcdFx0XHRcdFx0XHRvRW50aXR5U2V0Q29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRzaWRlRWZmZWN0RW50aXR5VHlwZSxcblx0XHRcdFx0XHRcdFx0XHRvTWV0YU1vZGVsXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGFJbW1lZGlhdGVUYXJnZXRzID0gdGFyZ2V0c0FycmF5Rm9yQWxsUHJvcGVydGllc1swXTtcblx0XHRcdFx0XHRcdFx0YWxsVGFyZ2V0cyA9IChhVGFyZ2V0UHJvcGVydGllcyB8fCBbXSkuY29uY2F0KChhVGFyZ2V0RW50aXRpZXMgYXMgYW55W10pIHx8IFtdKTtcblxuXHRcdFx0XHRcdFx0XHRjb25zdCBhY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAobVNpZGVFZmZlY3QgYXMgT0RhdGFTaWRlRWZmZWN0c1R5cGUpLlRyaWdnZXJBY3Rpb247XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFEZWZlcnJlZFRhcmdldHMgPSBhbGxUYXJnZXRzLmZpbHRlcigodGFyZ2V0OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gIWFJbW1lZGlhdGVUYXJnZXRzLmluY2x1ZGVzKHRhcmdldCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdGRlZmVycmVkVGFyZ2V0c0ZvckFRdWFsaWZpZWROYW1lW2tleV1bbVNpZGVFZmZlY3QuZnVsbHlRdWFsaWZpZWROYW1lXSA9IHtcblx0XHRcdFx0XHRcdFx0XHRhVGFyZ2V0czogYURlZmVycmVkVGFyZ2V0cyxcblx0XHRcdFx0XHRcdFx0XHRvQ29udGV4dDogb0NvbnRleHQsXG5cdFx0XHRcdFx0XHRcdFx0bVNpZGVFZmZlY3Rcblx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHQvLyBpZiBlbnRpdHkgaXMgb3RoZXIgdGhhbiBpdGVtcyB0YWJsZSB0aGVuIGFjdGlvbiBpcyBkZWZlcmVkXG5cdFx0XHRcdFx0XHRcdGlmIChhY3Rpb25OYW1lICYmIHNpZGVFZmZlY3RFbnRpdHlUeXBlID09PSBvd25lckVudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBzdGF0aWMgYWN0aW9uIGlzIG9uIGNvbGxlY3Rpb24sIHNvIHdlIGRlZmVyIGl0LCBlbHNlIGFkZCB0byBpbW1lZGlhdGUgcmVxdWVzdHMgYXJyYXlcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpc1N0YXRpY0FjdGlvbiA9IFRhYmxlSGVscGVyLl9pc1N0YXRpY0FjdGlvbihvTWV0YU1vZGVsLmdldE9iamVjdChgLyR7YWN0aW9uTmFtZX1gKSwgYWN0aW9uTmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFpc1N0YXRpY0FjdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dHJpZ2dlckFjdGlvbk5hbWUgPSBhY3Rpb25OYW1lO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZFRhcmdldHNGb3JBUXVhbGlmaWVkTmFtZVtrZXldW21TaWRlRWZmZWN0LmZ1bGx5UXVhbGlmaWVkTmFtZV1bXCJUcmlnZ2VyQWN0aW9uXCJdID0gYWN0aW9uTmFtZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRUYXJnZXRzRm9yQVF1YWxpZmllZE5hbWVba2V5XVttU2lkZUVmZmVjdC5mdWxseVF1YWxpZmllZE5hbWVdW1wiVHJpZ2dlckFjdGlvblwiXSA9IGFjdGlvbk5hbWU7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAoaXNTaWRlRWZmZWN0c1dpdGhDdXJyZW50RW50aXR5QXNUYXJnZXQpIHtcblx0XHRcdFx0XHRcdFx0XHRhSW1tZWRpYXRlVGFyZ2V0cyA9IFtdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0YVRhcmdldHM6IGFJbW1lZGlhdGVUYXJnZXRzLFxuXHRcdFx0XHRcdFx0XHRcdFRyaWdnZXJBY3Rpb246IHRyaWdnZXJBY3Rpb25OYW1lXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0aW1tZWRpYXRlU2lkZUVmZmVjdHNQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0XHRvQ29udHJvbGxlci5fc2lkZUVmZmVjdHMucmVxdWVzdFNpZGVFZmZlY3RzKGFTaWRlRWZmZWN0LCBvQ29udGV4dCwgZ3JvdXBJZCwgZm5HZXRJbW1lZGlhdGVUYXJnZXRzQW5kQWN0aW9ucylcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICh0ZXh0UGF0aHM/LltrZXldICYmIHRleHRQYXRoc1trZXldLmxlbmd0aCkge1xuXHRcdFx0aW1tZWRpYXRlU2lkZUVmZmVjdHNQcm9taXNlcy5wdXNoKG9TaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKHRleHRQYXRoc1trZXldLCBvU2VsZWN0ZWRDb250ZXh0LCBncm91cElkKSk7XG5cdFx0fVxuXHRcdHJldHVybiAoUHJvbWlzZSBhcyBhbnkpLmFsbFNldHRsZWQoaW1tZWRpYXRlU2lkZUVmZmVjdHNQcm9taXNlcyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENyZWF0ZSB0aGUgbWFzcyBlZGl0IGRpYWxvZy5cblx0ICpcblx0ICogQHBhcmFtIG9UYWJsZSBJbnN0YW5jZSBvZiBUYWJsZVxuXHQgKiBAcGFyYW0gYUNvbnRleHRzIENvbnRleHRzIGZvciBtYXNzIGVkaXRcblx0ICogQHBhcmFtIG9Db250cm9sbGVyIENvbnRyb2xsZXIgZm9yIHRoZSB2aWV3XG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmV0dXJuaW5nIGluc3RhbmNlIG9mIGRpYWxvZy5cblx0ICovXG5cdGNyZWF0ZURpYWxvZzogYXN5bmMgZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIGFDb250ZXh0czogYW55W10sIG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlcik6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3Qgc0ZyYWdtZW50TmFtZSA9IFwic2FwL2ZlL2NvcmUvY29udHJvbHMvbWFzc0VkaXQvTWFzc0VkaXREaWFsb2dcIixcblx0XHRcdGFEYXRhQXJyYXk6IGFueVtdID0gW10sXG5cdFx0XHRvUmVzb3VyY2VCdW5kbGUgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpLFxuXHRcdFx0b0RlZmF1bHRWYWx1ZXMgPSBNYXNzRWRpdEhlbHBlci5nZXREZWZhdWx0VGV4dHNGb3JEaWFsb2cob1Jlc291cmNlQnVuZGxlLCBhQ29udGV4dHMubGVuZ3RoLCBvVGFibGUpLFxuXHRcdFx0b0RhdGFGaWVsZE1vZGVsID0gTWFzc0VkaXRIZWxwZXIucHJlcGFyZURhdGFGb3JEaWFsb2cob1RhYmxlLCBhQ29udGV4dHMsIGFEYXRhQXJyYXkpLFxuXHRcdFx0ZGlhbG9nQ29udGV4dCA9IE1hc3NFZGl0SGVscGVyLmdldERpYWxvZ0NvbnRleHQob1RhYmxlKSxcblx0XHRcdG9EaWFsb2dEYXRhTW9kZWwgPSBNYXNzRWRpdEhlbHBlci5zZXRSdW50aW1lTW9kZWxPbkRpYWxvZyhhQ29udGV4dHMsIGFEYXRhQXJyYXksIG9EZWZhdWx0VmFsdWVzLCBkaWFsb2dDb250ZXh0KSxcblx0XHRcdG1vZGVsID0gb1RhYmxlLmdldE1vZGVsKCksXG5cdFx0XHRtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdGl0ZW1zTW9kZWwgPSBuZXcgVGVtcGxhdGVNb2RlbChvRGF0YUZpZWxkTW9kZWwuZ2V0RGF0YSgpLCBtZXRhTW9kZWwpO1xuXG5cdFx0Y29uc3Qgb0ZyYWdtZW50ID0gWE1MVGVtcGxhdGVQcm9jZXNzb3IubG9hZFRlbXBsYXRlKHNGcmFnbWVudE5hbWUsIFwiZnJhZ21lbnRcIik7XG5cblx0XHRjb25zdCBvQ3JlYXRlZEZyYWdtZW50ID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKFxuXHRcdFx0WE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRcdG9GcmFnbWVudCxcblx0XHRcdFx0eyBuYW1lOiBzRnJhZ21lbnROYW1lIH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcdGRhdGFGaWVsZE1vZGVsOiBpdGVtc01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSxcblx0XHRcdFx0XHRcdG1ldGFNb2RlbDogbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSxcblx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobWV0YU1vZGVsLmdldE1ldGFQYXRoKGRpYWxvZ0NvbnRleHQuZ2V0UGF0aCgpKSlcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkTW9kZWw6IGl0ZW1zTW9kZWwsXG5cdFx0XHRcdFx0XHRtZXRhTW9kZWw6IG1ldGFNb2RlbCxcblx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBtZXRhTW9kZWxcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdClcblx0XHQpO1xuXHRcdGNvbnN0IG9EaWFsb2dDb250ZW50ID0gYXdhaXQgRnJhZ21lbnQubG9hZCh7IGRlZmluaXRpb246IG9DcmVhdGVkRnJhZ21lbnQgfSk7XG5cdFx0Y29uc3Qgb0RpYWxvZyA9IG5ldyBEaWFsb2coe1xuXHRcdFx0cmVzaXphYmxlOiB0cnVlLFxuXHRcdFx0dGl0bGU6IG9EZWZhdWx0VmFsdWVzLm1hc3NFZGl0VGl0bGUsXG5cdFx0XHRjb250ZW50OiBbb0RpYWxvZ0NvbnRlbnQgYXMgYW55XSxcblx0XHRcdGFmdGVyT3BlbjogTWFzc0VkaXRIZWxwZXIub25EaWFsb2dPcGVuLFxuXHRcdFx0YmVnaW5CdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHR0ZXh0OiBNYXNzRWRpdEhlbHBlci5oZWxwZXJzLmdldEV4cEJpbmRpbmdGb3JBcHBseUJ1dHRvblR4dChvRGVmYXVsdFZhbHVlcywgb0RhdGFGaWVsZE1vZGVsLmdldE9iamVjdChcIi9cIikpLFxuXHRcdFx0XHR0eXBlOiBcIkVtcGhhc2l6ZWRcIixcblx0XHRcdFx0cHJlc3M6IGFzeW5jIGZ1bmN0aW9uIChvRXZlbnQ6IGFueSkge1xuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0KG9Db250cm9sbGVyLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCk/LnNldFByb3BlcnR5KFwic2tpcFBhdGNoSGFuZGxlcnNcIiwgdHJ1ZSk7XG5cdFx0XHRcdFx0Y29uc3Qgb0luRGlhbG9nID0gb0V2ZW50LmdldFNvdXJjZSgpLmdldFBhcmVudCgpO1xuXHRcdFx0XHRcdGNvbnN0IG9Nb2RlbCA9IG9JbkRpYWxvZy5nZXRNb2RlbChcImZpZWxkc0luZm9cIik7XG5cdFx0XHRcdFx0Y29uc3QgYVJlc3VsdHMgPSBvTW9kZWwuZ2V0UHJvcGVydHkoXCIvcmVzdWx0c1wiKTtcblxuXHRcdFx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvVGFibGUgJiYgKG9UYWJsZS5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIGFueSksXG5cdFx0XHRcdFx0XHRzQ3VycmVudEVudGl0eVNldE5hbWUgPSBvVGFibGUuZGF0YShcIm1ldGFQYXRoXCIpLFxuXHRcdFx0XHRcdFx0b0VudGl0eVNldENvbnRleHQgPSBvTWV0YU1vZGVsLmdldENvbnRleHQoc0N1cnJlbnRFbnRpdHlTZXROYW1lKTtcblx0XHRcdFx0XHRjb25zdCBhU2lkZUVmZmVjdHMgPSBhd2FpdCBTaWRlRWZmZWN0c0hlbHBlci5nZW5lcmF0ZVNpZGVFZmZlY3RzTWFwRnJvbU1ldGFNb2RlbChvTWV0YU1vZGVsKTtcblx0XHRcdFx0XHRjb25zdCBlcnJvckNvbnRleHRzOiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRcdGNvbnN0IHRleHRQYXRocyA9IG9Nb2RlbC5nZXRQcm9wZXJ0eShcIi90ZXh0UGF0aHNcIik7XG5cdFx0XHRcdFx0Y29uc3QgYVByb3BlcnR5UmVhZGFibGVJbmZvID0gb01vZGVsLmdldFByb3BlcnR5KFwiL3JlYWRhYmxlUHJvcGVydHlEYXRhXCIpO1xuXHRcdFx0XHRcdGxldCBncm91cElkOiBzdHJpbmc7XG5cdFx0XHRcdFx0bGV0IGFsbFNpZGVFZmZlY3RzOiBhbnlbXTtcblx0XHRcdFx0XHRjb25zdCBtYXNzRWRpdFByb21pc2VzOiBhbnkgPSBbXTtcblx0XHRcdFx0XHRjb25zdCBmYWlsZWRGaWVsZHNEYXRhOiBhbnkgPSB7fTtcblx0XHRcdFx0XHRjb25zdCBzZWxlY3RlZFJvd3NMZW5ndGggPSBhQ29udGV4dHMubGVuZ3RoO1xuXHRcdFx0XHRcdGNvbnN0IGRlZmVycmVkVGFyZ2V0c0ZvckFRdWFsaWZpZWROYW1lOiBhbnkgPSB7fTtcblx0XHRcdFx0XHRjb25zdCBiYXNlU2lkZUVmZmVjdHNNYXBBcnJheSA9IE1hc3NFZGl0SGVscGVyLmdldFNpZGVFZmZlY3REYXRhRm9yS2V5KFxuXHRcdFx0XHRcdFx0b0VudGl0eVNldENvbnRleHQsXG5cdFx0XHRcdFx0XHRhU2lkZUVmZmVjdHMsXG5cdFx0XHRcdFx0XHRvQ29udHJvbGxlcixcblx0XHRcdFx0XHRcdGFSZXN1bHRzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHQvL2NvbnN0IGNoYW5nZVByb21pc2U6IGFueVtdID0gW107XG5cdFx0XHRcdFx0Ly9sZXQgYlJlYWRPbmx5RmllbGQgPSBmYWxzZTtcblx0XHRcdFx0XHQvL2NvbnN0IGVycm9yQ29udGV4dHM6IG9iamVjdFtdID0gW107XG5cblx0XHRcdFx0XHRhQ29udGV4dHMuZm9yRWFjaChmdW5jdGlvbiAob1NlbGVjdGVkQ29udGV4dDogYW55LCBpZHg6IG51bWJlcikge1xuXHRcdFx0XHRcdFx0YWxsU2lkZUVmZmVjdHMgPSBbXTtcblx0XHRcdFx0XHRcdGFSZXN1bHRzLmZvckVhY2goYXN5bmMgZnVuY3Rpb24gKG9SZXN1bHQ6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIWZhaWxlZEZpZWxkc0RhdGEuaGFzT3duUHJvcGVydHkob1Jlc3VsdC5rZXlWYWx1ZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRmYWlsZWRGaWVsZHNEYXRhW29SZXN1bHQua2V5VmFsdWVdID0gMDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQvL1RPRE8gLSBBZGQgc2F2ZSBpbXBsZW1lbnRhdGlvbiBmb3IgVmFsdWUgSGVscC5cblx0XHRcdFx0XHRcdFx0aWYgKGJhc2VTaWRlRWZmZWN0c01hcEFycmF5W29SZXN1bHQua2V5VmFsdWVdKSB7XG5cdFx0XHRcdFx0XHRcdFx0YWxsU2lkZUVmZmVjdHNbb1Jlc3VsdC5rZXlWYWx1ZV0gPSBiYXNlU2lkZUVmZmVjdHNNYXBBcnJheVtvUmVzdWx0LmtleVZhbHVlXTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChhUHJvcGVydHlSZWFkYWJsZUluZm8pIHtcblx0XHRcdFx0XHRcdFx0XHRhUHJvcGVydHlSZWFkYWJsZUluZm8uc29tZShmdW5jdGlvbiAob1Byb3BlcnR5SW5mbzogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAob1Jlc3VsdC5rZXlWYWx1ZSA9PT0gb1Byb3BlcnR5SW5mby5wcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAob1Byb3BlcnR5SW5mby50eXBlID09PSBcIkRlZmF1bHRcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBvUHJvcGVydHlJbmZvLnZhbHVlID09PSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9Qcm9wZXJ0eUluZm8udHlwZSA9PT0gXCJQYXRoXCIgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUHJvcGVydHlJbmZvLnByb3BlcnR5VmFsdWUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUHJvcGVydHlJbmZvLnByb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3Qob1Byb3BlcnR5SW5mby5wcm9wZXJ0eVBhdGgpID09PSBvUHJvcGVydHlJbmZvLnByb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRncm91cElkID0gYCRhdXRvLiR7aWR4fWA7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9GaWVsZFByb21pc2UgPSBvU2VsZWN0ZWRDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LnNldFByb3BlcnR5KG9SZXN1bHQua2V5VmFsdWUsIG9SZXN1bHQudmFsdWUsIGdyb3VwSWQpXG5cdFx0XHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDb250ZXh0cy5wdXNoKG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiTWFzcyBFZGl0OiBTb21ldGhpbmcgd2VudCB3cm9uZyBpbiB1cGRhdGluZyBlbnRyaWVzLlwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZmFpbGVkRmllbGRzRGF0YVtvUmVzdWx0LmtleVZhbHVlXSA9IGZhaWxlZEZpZWxkc0RhdGFbb1Jlc3VsdC5rZXlWYWx1ZV0gKyAxO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHsgaXNGaWVsZFVwZGF0ZUZhaWxlZDogdHJ1ZSB9KTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRjb25zdCBkYXRhVG9VcGRhdGVGaWVsZEFuZFNpZGVFZmZlY3RzOiBEYXRhVG9VcGRhdGVGaWVsZEFuZFNpZGVFZmZlY3RzVHlwZSA9IHtcblx0XHRcdFx0XHRcdFx0XHRvQ29udHJvbGxlcixcblx0XHRcdFx0XHRcdFx0XHRvRmllbGRQcm9taXNlLFxuXHRcdFx0XHRcdFx0XHRcdHNpZGVFZmZlY3RzTWFwOiBiYXNlU2lkZUVmZmVjdHNNYXBBcnJheVtvUmVzdWx0LmtleVZhbHVlXSxcblx0XHRcdFx0XHRcdFx0XHR0ZXh0UGF0aHMsXG5cdFx0XHRcdFx0XHRcdFx0Z3JvdXBJZCxcblx0XHRcdFx0XHRcdFx0XHRrZXk6IG9SZXN1bHQua2V5VmFsdWUsXG5cdFx0XHRcdFx0XHRcdFx0b0VudGl0eVNldENvbnRleHQsXG5cdFx0XHRcdFx0XHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0XHRvU2VsZWN0ZWRDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkVGFyZ2V0c0ZvckFRdWFsaWZpZWROYW1lXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdG1hc3NFZGl0UHJvbWlzZXMucHVzaChcblx0XHRcdFx0XHRcdFx0XHRNYXNzRWRpdEhlbHBlci5oYW5kbGVNYXNzRWRpdEZpZWxkVXBkYXRlQW5kUmVxdWVzdFNpZGVFZmZlY3RzKGRhdGFUb1VwZGF0ZUZpZWxkQW5kU2lkZUVmZmVjdHMpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGF3YWl0IChQcm9taXNlIGFzIGFueSlcblx0XHRcdFx0XHRcdC5hbGxTZXR0bGVkKG1hc3NFZGl0UHJvbWlzZXMpXG5cdFx0XHRcdFx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdGdyb3VwSWQgPSBgJGF1dG8ubWFzc0VkaXREZWZlcnJlZGA7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGRlZmVycmVkUmVxdWVzdHMgPSBbXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNEYXRhRm9yQWxsS2V5czogYW55ID0gT2JqZWN0LnZhbHVlcyhkZWZlcnJlZFRhcmdldHNGb3JBUXVhbGlmaWVkTmFtZSk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGtleXNXaXRoU2lkZUVmZmVjdHM6IGFueVtdID0gT2JqZWN0LmtleXMoZGVmZXJyZWRUYXJnZXRzRm9yQVF1YWxpZmllZE5hbWUpO1xuXG5cdFx0XHRcdFx0XHRcdHNpZGVFZmZlY3RzRGF0YUZvckFsbEtleXMuZm9yRWFjaCgoYVNpZGVFZmZlY3Q6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRLZXkgPSBrZXlzV2l0aFNpZGVFZmZlY3RzW2luZGV4XTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZmFpbGVkRmllbGRzRGF0YVtjdXJyZW50S2V5XSAhPT0gc2VsZWN0ZWRSb3dzTGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBkZWZlcnJlZFNpZGVFZmZlY3RzRGF0YSA9IE9iamVjdC52YWx1ZXMoYVNpZGVFZmZlY3QpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRTaWRlRWZmZWN0c0RhdGEuZm9yRWFjaCgocmVxOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgeyBhVGFyZ2V0cywgb0NvbnRleHQsIFRyaWdnZXJBY3Rpb24sIG1TaWRlRWZmZWN0IH0gPSByZXE7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGZuR2V0RGVmZXJyZWRUYXJnZXRzID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBhVGFyZ2V0cztcblx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgZm5HZXREZWZlcnJlZFRhcmdldHNBbmRBY3Rpb25zID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhVGFyZ2V0czogZm5HZXREZWZlcnJlZFRhcmdldHMoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFRyaWdnZXJBY3Rpb246IFRyaWdnZXJBY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkUmVxdWVzdHMucHVzaChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBpZiBzb21lIGRlZmVycmVkIGlzIHJlamVjdGVkLCBpdCB3aWxsIGJlIGFkZCB0byBmYWlsZWQgcXVldWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvQ29udHJvbGxlci5fc2lkZUVmZmVjdHMucmVxdWVzdFNpZGVFZmZlY3RzKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVNpZGVFZmZlY3QsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGdyb3VwSWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmbkdldERlZmVycmVkVGFyZ2V0c0FuZEFjdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0TWFzc0VkaXRIZWxwZXIubWVzc2FnZUhhbmRsaW5nRm9yTWFzc0VkaXQob1RhYmxlLCBhQ29udGV4dHMsIG9Db250cm9sbGVyLCBvSW5EaWFsb2csIGFSZXN1bHRzLCBlcnJvckNvbnRleHRzKTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQuY2F0Y2goKGU6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRNYXNzRWRpdEhlbHBlci5jbG9zZURpYWxvZyhvRGlhbG9nKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdFx0ZW5kQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0dGV4dDogb0RlZmF1bHRWYWx1ZXMuY2FuY2VsQnV0dG9uVGV4dCxcblx0XHRcdFx0dmlzaWJsZTogTWFzc0VkaXRIZWxwZXIuaGVscGVycy5oYXNFZGl0YWJsZUZpZWxkc0JpbmRpbmcob0RhdGFGaWVsZE1vZGVsLmdldE9iamVjdChcIi9cIiksIHRydWUpIGFzIGFueSxcblx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uIChvRXZlbnQ6IGFueSkge1xuXHRcdFx0XHRcdGNvbnN0IG9JbkRpYWxvZyA9IG9FdmVudC5nZXRTb3VyY2UoKS5nZXRQYXJlbnQoKTtcblx0XHRcdFx0XHRNYXNzRWRpdEhlbHBlci5jbG9zZURpYWxvZyhvSW5EaWFsb2cpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdH0pO1xuXHRcdG9EaWFsb2cuc2V0TW9kZWwob0RpYWxvZ0RhdGFNb2RlbCwgXCJmaWVsZHNJbmZvXCIpO1xuXHRcdG9EaWFsb2cuc2V0TW9kZWwobW9kZWwpO1xuXHRcdG9EaWFsb2cuc2V0QmluZGluZ0NvbnRleHQoZGlhbG9nQ29udGV4dCk7XG5cdFx0cmV0dXJuIG9EaWFsb2c7XG5cdH0sXG5cblx0aGVscGVyczoge1xuXHRcdGdldEJpbmRpbmdFeHBGb3JIYXNFZGl0YWJsZUZpZWxkczogKGZpZWxkczogYW55LCBlZGl0YWJsZTogYm9vbGVhbikgPT4ge1xuXHRcdFx0Y29uc3QgdG90YWxFeHAgPSBmaWVsZHMucmVkdWNlKFxuXHRcdFx0XHQoZXhwcmVzc2lvbjogYW55LCBmaWVsZDogYW55KSA9PlxuXHRcdFx0XHRcdG9yKFxuXHRcdFx0XHRcdFx0ZXhwcmVzc2lvbixcblx0XHRcdFx0XHRcdHBhdGhJbk1vZGVsKFwiL3ZhbHVlcy9cIiArIGZpZWxkLmRhdGFQcm9wZXJ0eSArIFwiL3Zpc2libGVcIiwgXCJmaWVsZHNJbmZvXCIpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPlxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdGNvbnN0YW50KGZhbHNlKVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBlZGl0YWJsZSA/IHRvdGFsRXhwIDogbm90KHRvdGFsRXhwKTtcblx0XHR9LFxuXG5cdFx0Z2V0RXhwQmluZGluZ0ZvckFwcGx5QnV0dG9uVHh0OiAoZGVmYXVsdFZhbHVlczogYW55LCBmaWVsZHM6IGJvb2xlYW4pID0+IHtcblx0XHRcdGNvbnN0IGVkaXRhYmxlRXhwID0gTWFzc0VkaXRIZWxwZXIuaGVscGVycy5nZXRCaW5kaW5nRXhwRm9ySGFzRWRpdGFibGVGaWVsZHMoZmllbGRzLCB0cnVlKTtcblx0XHRcdGNvbnN0IHRvdGFsRXhwID0gaWZFbHNlKGVkaXRhYmxlRXhwLCBjb25zdGFudChkZWZhdWx0VmFsdWVzLmFwcGx5QnV0dG9uVGV4dCksIGNvbnN0YW50KGRlZmF1bHRWYWx1ZXMub2tCdXR0b25UZXh0KSk7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24odG90YWxFeHApO1xuXHRcdH0sXG5cblx0XHRoYXNFZGl0YWJsZUZpZWxkc0JpbmRpbmc6IChmaWVsZHM6IGFueSwgZWRpdGFibGU6IGJvb2xlYW4pID0+IHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihNYXNzRWRpdEhlbHBlci5oZWxwZXJzLmdldEJpbmRpbmdFeHBGb3JIYXNFZGl0YWJsZUZpZWxkcyhmaWVsZHMsIGVkaXRhYmxlKSk7XG5cdFx0fVxuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNYXNzRWRpdEhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBOEVBLElBQU1BLGNBQWMsR0FBRztJQUN0QjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLDJCQUEyQixFQUFFLFVBQVVDLEtBQWEsRUFBRUMsT0FBWSxFQUEyQjtNQUM1RixJQUFJQyxVQUFlO01BQ25CLElBQUlDLEtBQUssR0FBRyxDQUFDO01BQ2IsSUFBTUMsTUFBTSxHQUFHSixLQUFLLENBQUNLLEtBQUssQ0FBQyxHQUFHLENBQUM7TUFDL0IsSUFBSUMsU0FBUyxHQUFHLEVBQUU7TUFDbEJGLE1BQU0sQ0FBQ0csT0FBTyxDQUFDLFVBQVVDLGFBQXFCLEVBQUU7UUFDL0MsSUFBSSxDQUFDUCxPQUFPLENBQUNPLGFBQWEsQ0FBQyxJQUFJTCxLQUFLLEtBQUssQ0FBQyxFQUFFO1VBQzNDRixPQUFPLENBQUNPLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztVQUMzQk4sVUFBVSxHQUFHRCxPQUFPLENBQUNPLGFBQWEsQ0FBQztVQUNuQ0YsU0FBUyxHQUFHQSxTQUFTLEdBQUdFLGFBQWE7VUFDckNMLEtBQUssRUFBRTtRQUNSLENBQUMsTUFBTSxJQUFJLENBQUNELFVBQVUsQ0FBQ00sYUFBYSxDQUFDLEVBQUU7VUFDdENGLFNBQVMsYUFBTUEsU0FBUyxjQUFJRSxhQUFhLENBQUU7VUFDM0MsSUFBSUYsU0FBUyxLQUFLTixLQUFLLEVBQUU7WUFDeEJFLFVBQVUsQ0FBQ00sYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlCTixVQUFVLEdBQUdBLFVBQVUsQ0FBQ00sYUFBYSxDQUFDO1VBQ3ZDLENBQUMsTUFBTTtZQUNOTixVQUFVLENBQUNNLGFBQWEsQ0FBQyxHQUFHLEVBQUU7VUFDL0I7UUFDRDtNQUNELENBQUMsQ0FBQztNQUNGLE9BQU9OLFVBQVU7SUFDbEIsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ08sZUFBZSxFQUFFLFVBQVVDLE1BQWMsRUFBRVAsS0FBYSxFQUFFUSxJQUFXLEVBQUU7TUFDdEUsT0FBT0QsTUFBTSxJQUFJRSxTQUFTLElBQUlGLE1BQU0sSUFBSSxJQUFJLEdBQUdDLElBQUksQ0FBQ0UsT0FBTyxDQUFDSCxNQUFNLENBQUMsS0FBS1AsS0FBSyxHQUFHUyxTQUFTO0lBQzFGLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NFLHlCQUF5QixFQUFFLFVBQVVDLGlCQUF5QixFQUFFQyxPQUFZLEVBQUU7TUFDN0UsSUFBSUMsTUFBVztNQUNmLElBQUlGLGlCQUFpQixJQUFJQSxpQkFBaUIsQ0FBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUM1RCxJQUFNSyxjQUFjLEdBQUdILGlCQUFpQixDQUFDVixLQUFLLENBQUMsR0FBRyxDQUFDO1FBQ25EYSxjQUFjLENBQUNYLE9BQU8sQ0FBQyxVQUFVUCxLQUFhLEVBQUU7VUFDL0NpQixNQUFNLEdBQUdELE9BQU8sSUFBSUEsT0FBTyxDQUFDaEIsS0FBSyxDQUFDLEdBQUdnQixPQUFPLENBQUNoQixLQUFLLENBQUMsR0FBR2lCLE1BQU0sSUFBSUEsTUFBTSxDQUFDakIsS0FBSyxDQUFDO1FBQzlFLENBQUMsQ0FBQztNQUNIO01BQ0EsT0FBT2lCLE1BQU07SUFDZCxDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDRSwrQkFBK0IsRUFBRSxVQUFVQyxTQUFnQixFQUFFTCxpQkFBeUIsRUFBRTtNQUN2RixJQUFJRSxNQUEwQjtNQUM5QixJQUFJRixpQkFBaUIsSUFBSUssU0FBUyxDQUFDQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzlDLElBQU1DLGdCQUFnQixHQUFHRixTQUFTO1VBQ2pDRyxlQUFzQixHQUFHLEVBQUU7UUFDNUJELGdCQUFnQixDQUFDZixPQUFPLENBQUMsVUFBVWlCLFFBQWEsRUFBRTtVQUNqRCxJQUFNQyxXQUFXLEdBQUdELFFBQVEsQ0FBQ0UsU0FBUyxFQUFFO1VBQ3hDLElBQU1DLHdCQUF3QixHQUM3QlosaUJBQWlCLENBQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSVksV0FBVyxDQUFDRyxjQUFjLENBQUNiLGlCQUFpQixDQUFDVixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDbkcsSUFBSW1CLFFBQVEsS0FBS0MsV0FBVyxDQUFDRyxjQUFjLENBQUNiLGlCQUFpQixDQUFDLElBQUlZLHdCQUF3QixDQUFDLEVBQUU7WUFDNUZKLGVBQWUsQ0FBQ00sSUFBSSxDQUFDTCxRQUFRLENBQUNFLFNBQVMsQ0FBQ1gsaUJBQWlCLENBQUMsQ0FBQztVQUM1RDtRQUNELENBQUMsQ0FBQztRQUNGLElBQU1lLHFCQUFxQixHQUFHUCxlQUFlLENBQUNRLE1BQU0sQ0FBQ2pDLGNBQWMsQ0FBQ1csZUFBZSxDQUFDO1FBQ3BGLElBQUlxQixxQkFBcUIsQ0FBQ1QsTUFBTSxHQUFHLENBQUMsRUFBRTtVQUNyQ0osTUFBTSxxQkFBY0YsaUJBQWlCLENBQUU7UUFDeEMsQ0FBQyxNQUFNLElBQUllLHFCQUFxQixDQUFDVCxNQUFNLEtBQUssQ0FBQyxFQUFFO1VBQzlDSixNQUFNLG1CQUFZRixpQkFBaUIsQ0FBRTtRQUN0QyxDQUFDLE1BQU0sSUFBSWUscUJBQXFCLENBQUNULE1BQU0sS0FBSyxDQUFDLEVBQUU7VUFDOUNKLE1BQU0sYUFBTUYsaUJBQWlCLGNBQUllLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFFO1FBQzVEO01BQ0Q7TUFDQSxPQUFPYixNQUFNO0lBQ2QsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NlLHlCQUF5QixFQUFFLFVBQVVDLFdBQWdCLEVBQUViLFNBQWdCLEVBQUU7TUFDeEUsSUFBSWEsV0FBVyxJQUFJQSxXQUFXLENBQUNDLEtBQUssRUFBRTtRQUNyQyxPQUFPLENBQUNkLFNBQVMsQ0FBQ2UsSUFBSSxDQUFDLFVBQVViLGdCQUFxQixFQUFFO1VBQ3ZELE9BQU9BLGdCQUFnQixDQUFDSSxTQUFTLENBQUNPLFdBQVcsQ0FBQ0MsS0FBSyxDQUFDLEtBQUssS0FBSztRQUMvRCxDQUFDLENBQUM7TUFDSDtNQUNBLE9BQU9ELFdBQVc7SUFDbkIsQ0FBQztJQUVERyxZQUFZLEVBQUUsVUFBVUMsWUFBaUIsRUFBRUMsa0JBQXVCLEVBQUVDLGNBQW1DLEVBQVU7TUFDaEgsSUFBTUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFvQjtNQUNqRCxJQUFJQyxTQUFrQjtNQUN0QixJQUFJSixZQUFZLEVBQUU7UUFDakJLLHNCQUFzQixDQUFDRixtQkFBbUIsRUFBRUYsa0JBQWtCLEVBQUVDLGNBQWMsRUFBRSxJQUFJLENBQUM7UUFDckZFLFNBQVMsR0FBRyxDQUFBRCxtQkFBbUIsYUFBbkJBLG1CQUFtQix1QkFBbkJBLG1CQUFtQixDQUFFRyxTQUFTLEtBQUksRUFBRTtNQUNqRDtNQUNBLElBQU1DLGtCQUFrQixHQUN2QkgsU0FBUyxJQUNULENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDNUIsT0FBTyxDQUFDNEIsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQzNGLENBQUNJLGlCQUFpQixDQUFDTixjQUFjLENBQUMsSUFDbEMsQ0FBQ08sMkJBQTJCLENBQUNULFlBQVksQ0FBQztNQUUzQyxPQUFPLENBQUNPLGtCQUFrQixJQUFJLEVBQUUsS0FBS0gsU0FBUztJQUMvQyxDQUFDO0lBRURNLGFBQWEsRUFBRSxVQUFVVCxrQkFBdUIsRUFBVztNQUMxRCxPQUNDQSxrQkFBa0IsSUFDbEJBLGtCQUFrQixDQUFDVSxLQUFLLEtBQUssbURBQW1ELElBQ2hGVixrQkFBa0IsQ0FBQ1csTUFBTSxJQUN6Qlgsa0JBQWtCLENBQUNXLE1BQU0sQ0FBQ0MsS0FBSyxJQUMvQlosa0JBQWtCLENBQUNXLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDckMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU1RCxDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDc0MsV0FBVyxFQUFFLFVBQVVDLFFBQWdCLEVBQUVDLFdBQWdCLEVBQUVDLFdBQW1CLEVBQXNCO01BQ25HLElBQUlDLGVBQWU7TUFDbkIsSUFBSUYsV0FBVyxLQUFLQSxXQUFXLENBQUNHLElBQUksSUFBS0gsV0FBVyxDQUFDSSxVQUFVLElBQUlKLFdBQVcsQ0FBQ0ksVUFBVSxDQUFDcEMsTUFBTyxDQUFDLElBQUkrQixRQUFRLEVBQUU7UUFDL0csSUFBSUMsV0FBVyxDQUFDRyxJQUFJLElBQUlGLFdBQVcsS0FBSyxhQUFhLEVBQUU7VUFDdERDLGVBQWUsR0FBR0YsV0FBVyxDQUFDRyxJQUFJO1FBQ25DLENBQUMsTUFBTSxJQUFJSCxXQUFXLENBQUNJLFVBQVUsRUFBRTtVQUNsQ0osV0FBVyxDQUFDSSxVQUFVLENBQUNsRCxPQUFPLENBQUMsVUFBVW1ELEtBQWtCLEVBQUU7WUFDNUQsSUFBSUEsS0FBSyxDQUFDRixJQUFJLElBQUlFLEtBQUssQ0FBQ0YsSUFBSSxLQUFLSixRQUFRLEVBQUU7Y0FDMUNHLGVBQWUsR0FBR0csS0FBSyxDQUFDRixJQUFJO1lBQzdCO1VBQ0QsQ0FBQyxDQUFDO1FBQ0g7TUFDRDtNQUNBLE9BQU9ELGVBQWU7SUFDdkIsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0ksb0JBQW9CLEVBQUUsVUFBVUMsTUFBYSxFQUFFeEMsU0FBZ0IsRUFBRXlDLFVBQWlCLEVBQUU7TUFDbkYsSUFBTUMsVUFBVSxHQUFHRixNQUFNLElBQUtBLE1BQU0sQ0FBQ0csUUFBUSxFQUFFLENBQUNDLFlBQVksRUFBVTtRQUNyRUMscUJBQXFCLEdBQUdMLE1BQU0sQ0FBQ00sSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUMvQ0MsWUFBWSxHQUFHckUsY0FBYyxDQUFDc0UsY0FBYyxDQUFDUixNQUFNLENBQUM7UUFDcERTLGtCQUFrQixHQUFHUCxVQUFVLENBQUNRLFVBQVUsV0FBSUwscUJBQXFCLFFBQUs7UUFDeEVNLGlCQUFpQixHQUFHVCxVQUFVLENBQUNRLFVBQVUsQ0FBQ0wscUJBQXFCLENBQUM7UUFDaEVPLG9CQUFvQixHQUFHQywyQkFBMkIsQ0FBQ0osa0JBQWtCLENBQUM7TUFFdkUsSUFBTUssZUFBZSxHQUFHLElBQUlDLFNBQVMsRUFBRTtNQUN2QyxJQUFJQyxPQUFPO01BQ1gsSUFBSUMsVUFBVTtNQUNkLElBQUlDLGlCQUFpQjtNQUNyQixJQUFJQyxpQkFBaUI7TUFDckIsSUFBSUMsd0JBQXdCO01BQzVCLElBQUlDLFlBQVk7TUFFaEJkLFlBQVksQ0FBQzVELE9BQU8sQ0FBQyxVQUFVMkUsV0FBZ0IsRUFBRTtRQUNoRCxJQUFNbkUsaUJBQWlCLEdBQUdtRSxXQUFXLENBQUNDLFlBQVk7UUFDbEQsSUFBSXBFLGlCQUFpQixFQUFFO1VBQUE7VUFDdEIsSUFBSXFFLGFBQWEsR0FBR3JFLGlCQUFpQixJQUFJK0MsVUFBVSxDQUFDcEMsU0FBUyxXQUFJdUMscUJBQXFCLGNBQUlsRCxpQkFBaUIsT0FBSTtVQUMvRzhELFVBQVUsR0FDVEssV0FBVyxDQUFDRyxLQUFLLElBQUtELGFBQWEsSUFBSUEsYUFBYSxDQUFDLHVDQUF1QyxDQUFFLElBQUlyRSxpQkFBaUI7VUFFcEgsSUFBSXlELG9CQUFvQixFQUFFO1lBQ3pCQSxvQkFBb0IsQ0FBQ2MsWUFBWSxHQUFHZCxvQkFBb0IsQ0FBQ2UsZ0JBQWdCLENBQUNDLGdCQUFnQixDQUFDekQsTUFBTSxDQUFDLFVBQ2pHMEQsU0FBYyxFQUNiO2NBQ0QsT0FBT0EsU0FBUyxDQUFDQyxJQUFJLEtBQUszRSxpQkFBaUI7WUFDNUMsQ0FBQyxDQUFDO1VBQ0g7VUFDQXlELG9CQUFvQixDQUFDYyxZQUFZLEdBQUdkLG9CQUFvQixDQUFDYyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQzlFTCxZQUFZLEdBQUdVLGNBQWMsQ0FBQ25CLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUNuRSxJQUFNb0IsYUFBYSxHQUFHOUIsVUFBVSxDQUFDUSxVQUFVLENBQUNZLFdBQVcsQ0FBQ1csY0FBYyxDQUFDO1lBQ3RFQyxtQkFBbUIsR0FBR0MsdUJBQXVCLENBQUNILGFBQWEsQ0FBQztZQUM1REksZ0JBQWdCLEdBQUdsQyxVQUFVLENBQUNRLFVBQVUsV0FBSUwscUJBQXFCLGNBQUlsRCxpQkFBaUIsT0FBSTtZQUMxRmtGLFVBQVUsR0FBR0QsZ0JBQWdCLElBQUlBLGdCQUFnQixDQUFDRSxZQUFZLEVBQUU7VUFFakUsSUFBSTNELGNBQWMsR0FBR2tDLDJCQUEyQixDQUFDbUIsYUFBYSxFQUFFckIsaUJBQWlCLENBQUM7VUFDbEYsSUFBSSxDQUFBdUIsbUJBQW1CLGFBQW5CQSxtQkFBbUIsZ0RBQW5CQSxtQkFBbUIsQ0FBRUssS0FBSyxvRkFBMUIsc0JBQTRCM0MsSUFBSSwyREFBaEMsdUJBQWtDbkMsTUFBTSxJQUFHLENBQUMsRUFBRTtZQUNqRGtCLGNBQWMsR0FBRzZELG9CQUFvQixDQUFDN0QsY0FBYyxFQUFFeEIsaUJBQWlCLENBQUM7VUFDekU7VUFDQSxJQUFNc0YsWUFBWSxHQUNqQnZHLGNBQWMsQ0FBQ2tDLHlCQUF5QixDQUN2QzRELGFBQWEsSUFBSUEsYUFBYSxDQUFDbEUsU0FBUyxFQUFFLENBQUMsb0NBQW9DLENBQUMsRUFDaEZOLFNBQVMsQ0FDVCxJQUFJLEtBQUs7VUFDWCxJQUFNa0YsT0FBTyxHQUFHbEIsYUFBYSxJQUFJQSxhQUFhLENBQUMsd0NBQXdDLENBQUM7VUFFeEZhLFVBQVUsQ0FBQ00sT0FBTyxHQUFHO1lBQ3BCeEMsUUFBUSxFQUFFLFlBQVk7Y0FDckIsT0FBT2tDLFVBQVUsQ0FBQ2xDLFFBQVEsRUFBRTtZQUM3QixDQUFDO1lBQ0R5QyxPQUFPLEVBQUUsWUFBWTtjQUNwQixpQkFBVXZDLHFCQUFxQixjQUFJbEQsaUJBQWlCO1lBQ3JEO1VBQ0QsQ0FBQztVQUNEcUUsYUFBYSxHQUNaVSxtQkFBbUIsQ0FBQ1csS0FBSyxLQUFLLFVBQVUsR0FDckNYLG1CQUFtQixHQUNsQkEsbUJBQW1CLElBQUlBLG1CQUFtQixDQUFDSyxLQUFLLElBQUlMLG1CQUFtQixDQUFDSyxLQUFLLENBQUNPLE9BQU8sSUFDckZaLG1CQUFtQixJQUFJQSxtQkFBbUIsQ0FBQzdDLE1BQU0sSUFBSTZDLG1CQUFtQixDQUFDN0MsTUFBTSxDQUFDeUQsT0FBUTtVQUM3Rjs7VUFFQSxJQUFNQyxhQUFhLEdBQUd2QixhQUFhLElBQUlBLGFBQWEsQ0FBQ3dCLElBQUksSUFBSXhCLGFBQWEsQ0FBQ3dCLElBQUksS0FBSyxrQ0FBa0M7VUFDdEgsSUFBTUMsUUFBUSxHQUFHLENBQUMsQ0FBQ2YsbUJBQW1CLENBQUNnQixNQUFNO1VBQzdDLElBQU1DLFVBQVUsR0FBR2pILGNBQWMsQ0FBQ2lELGFBQWEsQ0FBQytDLG1CQUFtQixDQUFDO1VBQ3BFLElBQUlRLE9BQU8sSUFBSUQsWUFBWSxJQUFJTSxhQUFhLElBQUlFLFFBQVEsSUFBSUUsVUFBVSxFQUFFO1lBQ3ZFO1VBQ0Q7O1VBRUE7VUFDQWhDLGlCQUFpQixHQUNmLENBQUNpQyxXQUFXLENBQUM1QixhQUFhLENBQUMsSUFBSTZCLE9BQU8sQ0FBQzdCLGFBQWEsQ0FBQyxLQUFLOEIsNkJBQTZCLENBQUM5QixhQUFhLENBQUMsSUFBSyxFQUFFO1VBQy9HLElBQU0rQixnQkFBZ0IsR0FBR3BDLGlCQUFpQixJQUFJcUMseUJBQXlCLENBQUNoQyxhQUFhLENBQUM7VUFDdEZOLGlCQUFpQixHQUFHdUMsWUFBWSxDQUFDakMsYUFBYSxDQUFDO1VBQy9DSix3QkFBd0IsR0FBR21DLGdCQUFnQixJQUFJRSxZQUFZLENBQUNGLGdCQUFnQixDQUFDO1VBRTdFLElBQU1HLHFCQUFxQixHQUMxQixDQUFDeEMsaUJBQWlCLElBQUlFLHdCQUF3QixNQUM3QyxtQkFBQUksYUFBYSw0RUFBYixlQUFlbUMsV0FBVyxvRkFBMUIsc0JBQTRCQyxNQUFNLDJEQUFsQyx1QkFBb0NDLDJCQUEyQixLQUM5RE4sZ0JBQWdCLEtBQUlBLGdCQUFnQixhQUFoQkEsZ0JBQWdCLGdEQUFoQkEsZ0JBQWdCLENBQUVJLFdBQVcsb0ZBQTdCLHNCQUErQkMsTUFBTSwyREFBckMsdUJBQXVDQywyQkFBMkIsQ0FBQyxDQUFDO1VBQzNGLElBQUlILHFCQUFxQixFQUFFO1lBQzFCO1lBQ0E7VUFDRDs7VUFFQTtVQUNBLElBQU1JLHVCQUF1QixHQUFHdEMsYUFBYSxJQUFJQSxhQUFhLENBQUNlLEtBQUssR0FBR2YsYUFBYSxDQUFDZSxLQUFLLEdBQUdmLGFBQWE7VUFDMUcsSUFBTXVDLFVBQVUsR0FBR0MsV0FBVyxDQUFDRix1QkFBdUIsRUFBRW5GLGNBQWMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFdUQsbUJBQW1CLEVBQUUrQixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDMUgsSUFBTUMsY0FBYyxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQ0MsUUFBUSxDQUFDO1VBQzVDLElBQU1DLGdCQUFnQixHQUFHLENBQUMsQ0FBQ1AsVUFBVSxJQUFJRyxjQUFjLENBQUNLLFFBQVEsQ0FBQ1IsVUFBVSxDQUFhO1VBQ3hGLElBQU1TLFFBQVEsR0FBRyxDQUFDLENBQUNULFVBQVUsS0FBTU8sZ0JBQWdCLElBQUlQLFVBQVUsS0FBS00sUUFBUSxDQUFDSSxRQUFRLElBQUssQ0FBQ0gsZ0JBQWdCLENBQUM7VUFDOUcsSUFBTUksd0JBQXdCLEdBQUd2SCxpQkFBaUIsQ0FBQ29ILFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSXJELGlCQUFpQjtVQUNyRixJQUFJLENBQUNzRCxRQUFRLElBQUlFLHdCQUF3QixFQUFFO1lBQzFDO1VBQ0Q7VUFFQSxJQUFNN0YsU0FBUyxHQUFHM0MsY0FBYyxDQUFDc0MsWUFBWSxDQUFDZ0QsYUFBYSxFQUFFVSxtQkFBbUIsRUFBRXZELGNBQWMsQ0FBQztVQUVqRyxJQUFJRSxTQUFTLEVBQUU7WUFDZCxJQUFNOEYsWUFBWSxHQUFHQyxnQkFBZ0IsQ0FBQ2pHLGNBQWMsQ0FBQztZQUNyRCxJQUFNa0csVUFBVSxHQUFHQyxvQkFBb0IsQ0FBQ3RELGFBQWEsRUFBRW1ELFlBQVksQ0FBQztZQUNwRSxJQUFNakYsV0FBVyxHQUFHcUYsV0FBVyxDQUFDQyxrQkFBa0IsQ0FBQzVDLGdCQUFnQixDQUFDdEUsU0FBUyxFQUFFLENBQUM7WUFDaEYsSUFBTW1ILGtCQUFrQixHQUFHL0QsaUJBQWlCLEdBQUdBLGlCQUFpQixHQUFHLEtBQUs7WUFDeEUsSUFBTWdFLHlCQUF5QixHQUM5QjlELHdCQUF3QixJQUFJLENBQUNELGlCQUFpQixDQUFDb0QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHbkQsd0JBQXdCLEdBQUcsS0FBSztZQUNoRyxJQUFNK0QsWUFBWSxHQUFHaEUsaUJBQWlCLElBQUksQ0FBQ2hFLGlCQUFpQixDQUFDb0gsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHcEQsaUJBQWlCLEdBQUcsS0FBSztZQUV0R0gsT0FBTyxHQUFHO2NBQ1RTLEtBQUssRUFBRVIsVUFBVTtjQUNqQk0sWUFBWSxFQUFFcEUsaUJBQWlCO2NBQy9COEgsa0JBQWtCLEVBQUUvRCxpQkFBaUIsR0FBR0EsaUJBQWlCLEdBQUcsS0FBSztjQUNqRWlFLFlBQVksRUFBWkEsWUFBWTtjQUNaQyxlQUFlLEVBQUVDLHFCQUFxQixDQUFDN0QsYUFBYSxFQUFFVSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFdkQsY0FBYyxDQUFDO2NBQzNHMkcsb0JBQW9CLEVBQUVuSSxpQkFBaUIsR0FDcENqQixjQUFjLENBQUNxQiwrQkFBK0IsQ0FBQ0MsU0FBUyxFQUFFTCxpQkFBaUIsQ0FBQyxHQUM1RSxLQUFLO2NBQ1JvSSx3QkFBd0IsRUFBRXBFLGlCQUFpQixHQUN4Q2pGLGNBQWMsQ0FBQ3FCLCtCQUErQixDQUFDQyxTQUFTLEVBQUUyRCxpQkFBaUIsQ0FBQyxHQUM1RSxLQUFLO2NBQ1JxRSxTQUFTLEVBQUVuRixxQkFBcUI7Y0FDaENvRixPQUFPLEVBQUUvRixXQUFXO2NBQ3BCQyxlQUFlLEVBQUV6RCxjQUFjLENBQUNxRCxXQUFXLENBQUNwQyxpQkFBaUIsRUFBRWtFLFlBQVksRUFBRTNCLFdBQVcsQ0FBQztjQUN6RmdHLFFBQVEsRUFBRWxFLGFBQWEsQ0FBQ2tFLFFBQVEsS0FBSzFJLFNBQVMsR0FBR3dFLGFBQWEsQ0FBQ2tFLFFBQVEsR0FBRyxJQUFJO2NBQzlFQyxrQkFBa0IsRUFBRWQsVUFBVSxLQUFLN0gsU0FBUyxHQUFHNkgsVUFBVSxHQUFHLEtBQUs7Y0FDakVoRyxTQUFTLEVBQUVBLFNBQVM7Y0FDcEIrRyxRQUFRLEVBQUVwQixRQUFRLEdBQUdULFVBQVUsR0FBRy9HLFNBQVM7Y0FDM0N5QixZQUFZLEVBQUU7Z0JBQ2JvSCxLQUFLLEVBQUVaLGtCQUFrQjtnQkFDekJhLFdBQVcsRUFBRSxxQkFBcUI7Z0JBQ2xDbkIsWUFBWSxFQUFFeEgsaUJBQWlCO2dCQUMvQjRJLHdCQUF3QixZQUFLMUYscUJBQXFCLGNBQUlsRCxpQkFBaUI7Y0FDeEUsQ0FBQztjQUNENkksUUFBUSxFQUFFYixZQUFZLElBQUk7Z0JBQ3pCVSxLQUFLLEVBQUVYLHlCQUF5QjtnQkFDaENZLFdBQVcsRUFBRSx1QkFBdUI7Z0JBQ3BDbkIsWUFBWSxFQUFFUSxZQUFZO2dCQUMxQlksd0JBQXdCLFlBQUsxRixxQkFBcUIsY0FBSThFLFlBQVk7Y0FDbkU7WUFDRCxDQUFDO1lBQ0RsRixVQUFVLENBQUNoQyxJQUFJLENBQUMrQyxPQUFPLENBQUM7VUFDekI7UUFDRDtNQUNELENBQUMsQ0FBQztNQUNGRixlQUFlLENBQUNtRixPQUFPLENBQUNoRyxVQUFVLENBQUM7TUFDbkMsT0FBT2EsZUFBZTtJQUN2QixDQUFDO0lBRUROLGNBQWMsRUFBRSxVQUFVUixNQUFXLEVBQUU7TUFDdEMsSUFBTWtHLFFBQVEsR0FBSWxHLE1BQU0sSUFBSUEsTUFBTSxDQUFDbUcsVUFBVSxFQUFFLElBQUssRUFBRTtNQUN0RCxJQUFNQyxXQUFXLEdBQUdwRyxNQUFNLElBQUlBLE1BQU0sQ0FBQ3FHLFNBQVMsRUFBRSxDQUFDQyxrQkFBa0IsRUFBRSxDQUFDQyxPQUFPO01BQzdFLE9BQU9MLFFBQVEsQ0FBQ00sR0FBRyxDQUFDLFVBQVVDLE9BQVksRUFBRTtRQUMzQyxJQUFNQyxhQUFhLEdBQUdELE9BQU8sSUFBSUEsT0FBTyxDQUFDRSxlQUFlLEVBQUU7VUFDekRDLGtCQUFrQixHQUNqQlIsV0FBVyxJQUNYQSxXQUFXLENBQUNqSSxNQUFNLENBQUMsVUFBVW1ELFdBQWdCLEVBQUU7WUFDOUMsT0FBT0EsV0FBVyxDQUFDUSxJQUFJLEtBQUs0RSxhQUFhLElBQUlwRixXQUFXLENBQUN1RixJQUFJLEtBQUssWUFBWTtVQUMvRSxDQUFDLENBQUM7UUFDSixPQUFPO1VBQ050RixZQUFZLEVBQUVtRixhQUFhO1VBQzNCakYsS0FBSyxFQUFFZ0YsT0FBTyxDQUFDSyxTQUFTLEVBQUU7VUFDMUI3RSxjQUFjLEVBQUUyRSxrQkFBa0IsSUFBSUEsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUlBLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDM0U7UUFDdEYsQ0FBQztNQUNGLENBQUMsQ0FBQztJQUNILENBQUM7SUFFRDhFLHdCQUF3QixFQUFFLFVBQVVDLGVBQW9CLEVBQUVDLGlCQUFzQixFQUFFakgsTUFBVyxFQUFFO01BQzlGO01BQ0EsSUFBTWtILFlBQVksR0FBR2xILE1BQU0sQ0FBQ00sSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssTUFBTTtNQUV6RSxPQUFPO1FBQ042RyxrQkFBa0IsRUFBRSxRQUFRO1FBQzVCQyxlQUFlLEVBQUUsaUJBQWlCO1FBQ2xDQyxlQUFlLEVBQUUsa0JBQWtCO1FBQ25DQyxhQUFhLEVBQUVOLGVBQWUsQ0FBQ08sT0FBTyxDQUFDLDBCQUEwQixFQUFFTixpQkFBaUIsQ0FBQ08sUUFBUSxFQUFFLENBQUM7UUFDaEdDLGVBQWUsRUFBRVAsWUFBWSxHQUMxQkYsZUFBZSxDQUFDTyxPQUFPLENBQUMsOEJBQThCLENBQUMsR0FDdkRQLGVBQWUsQ0FBQ08sT0FBTyxDQUFDLCtCQUErQixDQUFDO1FBQzNERyxpQkFBaUIsRUFBRSxvQkFBb0I7UUFDdkNDLGdCQUFnQixFQUFFWCxlQUFlLENBQUNPLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQztRQUN4RUssUUFBUSxFQUFFWixlQUFlLENBQUNPLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQztRQUNuRU0sWUFBWSxFQUFFYixlQUFlLENBQUNPLE9BQU8sQ0FBQyxvQkFBb0I7TUFDM0QsQ0FBQztJQUNGLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQztJQUNBOztJQUVBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ08sd0JBQXdCLEVBQUUsVUFBVXpMLE9BQVksRUFBRTBMLGNBQW1CLEVBQUV2RyxhQUFrQixFQUFFd0csU0FBbUIsRUFBRTtNQUMvRyxJQUFNcEwsYUFBYSxHQUFHb0wsU0FBUyxHQUFHeEcsYUFBYSxDQUFDMkQsWUFBWSxHQUFHM0QsYUFBYSxDQUFDRCxZQUFZO1FBQ3hGMEcsVUFBVSxHQUFHekcsYUFBYSxDQUFDM0MsU0FBUztRQUNwQ3FKLGlCQUFpQixHQUFHMUcsYUFBYSxDQUFDNEQsZUFBZTtNQUNsRDtNQUNBLElBQU0rQyxzQkFBc0IsR0FBRyxRQUFRO01BQ3ZDOUwsT0FBTyxDQUFDK0wsY0FBYyxHQUFHL0wsT0FBTyxDQUFDK0wsY0FBYyxJQUFJLEVBQUU7TUFDckQsSUFBTUMsa0JBQWtCLEdBQUdoTSxPQUFPLENBQUNpTSxhQUFhLElBQUlqTSxPQUFPLENBQUNpTSxhQUFhLENBQUM3SyxNQUFNLEdBQUcsQ0FBQztNQUNwRixJQUFNOEssU0FBUyxHQUFHO1FBQ2pCQyxJQUFJLFlBQUtULGNBQWMsQ0FBQ1osa0JBQWtCLGNBQUlnQixzQkFBc0IsT0FBSTtRQUN4RU0sR0FBRyxvQkFBYTdMLGFBQWE7TUFDOUIsQ0FBQztNQUVELElBQUlxTCxVQUFVLEtBQUssVUFBVSxFQUFFO1FBQzlCLElBQU1TLFVBQVUsR0FBRztVQUFFRixJQUFJLEVBQUUsSUFBSTtVQUFFQyxHQUFHLFlBQUs3TCxhQUFhLFdBQVE7VUFBRStMLFFBQVEsRUFBRTtZQUFFckosS0FBSyxFQUFFO1VBQU07UUFBRSxDQUFDO1FBQzVGLElBQU1zSixXQUFXLEdBQUc7VUFBRUosSUFBSSxFQUFFLEtBQUs7VUFBRUMsR0FBRyxZQUFLN0wsYUFBYSxVQUFPO1VBQUUrTCxRQUFRLEVBQUU7WUFBRXJKLEtBQUssRUFBRTtVQUFLO1FBQUUsQ0FBQztRQUM1RmpELE9BQU8sQ0FBQ3dNLE9BQU8sQ0FBQ0gsVUFBVSxDQUFDO1FBQzNCck0sT0FBTyxDQUFDK0wsY0FBYyxDQUFDUyxPQUFPLENBQUNILFVBQVUsQ0FBQztRQUMxQ3JNLE9BQU8sQ0FBQ3dNLE9BQU8sQ0FBQ0QsV0FBVyxDQUFDO1FBQzVCdk0sT0FBTyxDQUFDK0wsY0FBYyxDQUFDUyxPQUFPLENBQUNELFdBQVcsQ0FBQztRQUMzQ3ZNLE9BQU8sQ0FBQ3dNLE9BQU8sQ0FBQ04sU0FBUyxDQUFDO1FBQzFCbE0sT0FBTyxDQUFDK0wsY0FBYyxDQUFDUyxPQUFPLENBQUNOLFNBQVMsQ0FBQztNQUMxQyxDQUFDLE1BQU07UUFBQTtRQUNOLElBQUkvRyxhQUFhLGFBQWJBLGFBQWEsd0NBQWJBLGFBQWEsQ0FBRS9DLFlBQVksa0RBQTNCLHNCQUE2Qm9ILEtBQUssSUFBS3JFLGFBQWEsYUFBYkEsYUFBYSx3Q0FBYkEsYUFBYSxDQUFFd0UsUUFBUSxrREFBdkIsc0JBQXlCSCxLQUFLLElBQUltQyxTQUFVLEVBQUU7VUFDeEYsSUFBTWMsUUFBUSxHQUFHO1lBQUVOLElBQUksRUFBRVQsY0FBYyxDQUFDTCxpQkFBaUI7WUFBRWUsR0FBRyw4QkFBdUI3TCxhQUFhO1VBQUcsQ0FBQztVQUN0R1AsT0FBTyxDQUFDd00sT0FBTyxDQUFDQyxRQUFRLENBQUM7VUFDekJ6TSxPQUFPLENBQUMrTCxjQUFjLENBQUNTLE9BQU8sQ0FBQ0MsUUFBUSxDQUFDO1FBQ3pDO1FBQ0EsSUFBSVQsa0JBQWtCLEVBQUU7VUFDdkIsSUFBSUgsaUJBQWlCLEtBQUssTUFBTSxJQUFJLENBQUNGLFNBQVMsRUFBRTtZQUMvQyxJQUFNZSxVQUFVLEdBQUc7Y0FBRVAsSUFBSSxFQUFFVCxjQUFjLENBQUNWLGVBQWU7Y0FBRW9CLEdBQUcsNEJBQXFCN0wsYUFBYTtZQUFHLENBQUM7WUFDcEdQLE9BQU8sQ0FBQ3dNLE9BQU8sQ0FBQ0UsVUFBVSxDQUFDO1lBQzNCMU0sT0FBTyxDQUFDK0wsY0FBYyxDQUFDUyxPQUFPLENBQUNFLFVBQVUsQ0FBQztVQUMzQztVQUNBMU0sT0FBTyxDQUFDd00sT0FBTyxDQUFDTixTQUFTLENBQUM7VUFDMUJsTSxPQUFPLENBQUMrTCxjQUFjLENBQUNTLE9BQU8sQ0FBQ04sU0FBUyxDQUFDO1FBQzFDLENBQUMsTUFBTTtVQUNOLElBQU1TLFVBQVUsR0FBRztZQUFFUixJQUFJLEVBQUVULGNBQWMsQ0FBQ1gsZUFBZTtZQUFFcUIsR0FBRyxvQkFBYTdMLGFBQWE7VUFBRyxDQUFDO1VBQzVGUCxPQUFPLENBQUN3TSxPQUFPLENBQUNHLFVBQVUsQ0FBQztVQUMzQjNNLE9BQU8sQ0FBQytMLGNBQWMsQ0FBQ1MsT0FBTyxDQUFDRyxVQUFVLENBQUM7UUFDM0M7TUFDRDtJQUNELENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0Msc0JBQXNCLEVBQUUsVUFDdkJ6SixRQUFnQixFQUNoQkcsZUFBdUIsRUFDdkJELFdBQW1CLEVBQ25Cd0osZUFBd0IsRUFDRjtNQUN0QixJQUFJNUosS0FBSyxHQUFHNEosZUFBZSxDQUFDcEwsU0FBUyxDQUFDMEIsUUFBUSxDQUFDO1FBQzlDMkosZ0JBQWdCO1FBQ2hCQyxRQUFRO01BQ1QsSUFBSXpKLGVBQWUsSUFBSUgsUUFBUSxFQUFFO1FBQ2hDLFFBQVFFLFdBQVc7VUFDbEIsS0FBSyxhQUFhO1lBQ2pCeUosZ0JBQWdCLEdBQUdELGVBQWUsQ0FBQ3BMLFNBQVMsQ0FBQzZCLGVBQWUsQ0FBQyxJQUFJLEVBQUU7WUFDbkV5SixRQUFRLEdBQUdELGdCQUFnQjtZQUMzQjtVQUNELEtBQUssT0FBTztZQUNYN0osS0FBSyxHQUFHNEosZUFBZSxDQUFDcEwsU0FBUyxDQUFDMEIsUUFBUSxDQUFDLElBQUksRUFBRTtZQUNqRDRKLFFBQVEsR0FBRzlKLEtBQUs7WUFDaEI7VUFDRCxLQUFLLGtCQUFrQjtZQUN0QkEsS0FBSyxHQUFHNEosZUFBZSxDQUFDcEwsU0FBUyxDQUFDMEIsUUFBUSxDQUFDLElBQUksRUFBRTtZQUNqRDJKLGdCQUFnQixHQUFHRCxlQUFlLENBQUNwTCxTQUFTLENBQUM2QixlQUFlLENBQUMsSUFBSSxFQUFFO1lBQ25FeUosUUFBUSxHQUFHRCxnQkFBZ0IsYUFBTTdKLEtBQUssZUFBSzZKLGdCQUFnQixTQUFNN0osS0FBSztZQUN0RTtVQUNELEtBQUssa0JBQWtCO1lBQ3RCQSxLQUFLLEdBQUc0SixlQUFlLENBQUNwTCxTQUFTLENBQUMwQixRQUFRLENBQUMsSUFBSSxFQUFFO1lBQ2pEMkosZ0JBQWdCLEdBQUdELGVBQWUsQ0FBQ3BMLFNBQVMsQ0FBQzZCLGVBQWUsQ0FBQyxJQUFJLEVBQUU7WUFDbkV5SixRQUFRLEdBQUdELGdCQUFnQixhQUFNQSxnQkFBZ0IsZUFBSzdKLEtBQUssU0FBTUEsS0FBSztZQUN0RTtVQUNEO1lBQ0MrSixHQUFHLENBQUNDLElBQUksNENBQXFDOUosUUFBUSxFQUFHO1lBQ3hEO1FBQU07TUFFVDtNQUVBLE9BQU87UUFDTitKLGVBQWUsRUFBRTdKLFdBQVc7UUFDNUI4SixTQUFTLEVBQUVoSyxRQUFRO1FBQ25CRyxlQUFlLEVBQUVBLGVBQWU7UUFDaENMLEtBQUssRUFBRUEsS0FBSztRQUNabUssV0FBVyxFQUFFTixnQkFBZ0I7UUFDN0JDLFFBQVEsRUFBRUE7TUFDWCxDQUFDO0lBQ0YsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDTSxVQUFVLEVBQUUsVUFBVUMsR0FBWSxFQUFXO01BQzVDLElBQU1DLE9BQU8sR0FBR0QsR0FBRyxDQUFDRSxVQUFVLENBQUMsS0FBSyxDQUFDO01BQ3JDLElBQU12SyxLQUFLLEdBQUlzSyxPQUFPLENBQVNFLGdCQUFnQixFQUFFO01BQ2pELE9BQU94SyxLQUFLLEtBQUsrRSxRQUFRLENBQUNJLFFBQVE7SUFDbkMsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDc0YsdUJBQXVCLEVBQUUsVUFBVUMsZ0JBQTJCLEVBQUV6SSxZQUFvQixFQUFRO01BQzNGLElBQU0wSSxvQkFBb0IsR0FBR0QsZ0JBQWdCLENBQUNFLFdBQVcsbUJBQVkzSSxZQUFZLDJCQUF3QixJQUFJLEVBQUU7TUFDL0csSUFBTWlELFFBQVEsR0FBR3lGLG9CQUFvQixDQUFDMUwsSUFBSSxDQUFDckMsY0FBYyxDQUFDd04sVUFBVSxDQUFDO01BRXJFLElBQUlsRixRQUFRLEVBQUU7UUFDYndGLGdCQUFnQixDQUFDRyxXQUFXLG1CQUFZNUksWUFBWSxlQUFZaUQsUUFBUSxDQUFDO01BQzFFO0lBQ0QsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQzRGLHFCQUFxQixFQUFFLFVBQVVDLE9BQWdCLEVBQUVMLGdCQUEyQixFQUFFekksWUFBb0IsRUFBRStJLE1BQVcsRUFBRTtNQUNsSCxJQUFNVixPQUFPLEdBQUdTLE9BQU8sQ0FBQ1IsVUFBVSxDQUFDLEtBQUssQ0FBQztNQUV6Q1MsTUFBTSxDQUFDTCxvQkFBb0IsR0FBR0ssTUFBTSxDQUFDTCxvQkFBb0IsSUFBSSxFQUFFO01BQy9ESyxNQUFNLENBQUNMLG9CQUFvQixDQUFDaE0sSUFBSSxDQUFDb00sT0FBTyxDQUFDO01BRXpDVCxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRVcsWUFBWSxDQUFDck8sY0FBYyxDQUFDNk4sdUJBQXVCLENBQUNTLElBQUksQ0FBQyxJQUFJLEVBQUVSLGdCQUFnQixFQUFFekksWUFBWSxDQUFDLENBQUM7SUFDekcsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NrSixjQUFjLEVBQUUsVUFBVTFHLFVBQTRDLEVBQUVwQixPQUFnQixFQUFXO01BQ2xHLElBQU0wSCxPQUFPLEdBQUcsSUFBSUssR0FBRyxDQUFDO1FBQUVmLEdBQUcsRUFBRTVGO01BQVcsQ0FBQyxDQUFDO01BQzVDLElBQU00RyxLQUFLLEdBQUdoSSxPQUFPLENBQUN4QyxRQUFRLEVBQUU7TUFDaENrSyxPQUFPLENBQUNPLFFBQVEsQ0FBQ0QsS0FBSyxDQUFDO01BQ3ZCTixPQUFPLENBQUNRLGlCQUFpQixDQUFDbEksT0FBTyxDQUFDO01BRWxDLE9BQU8wSCxPQUFPO0lBQ2YsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NTLGlCQUFpQixFQUFFLFVBQ2xCL0csVUFBNEMsRUFDNUNpRyxnQkFBMkIsRUFDM0J6SSxZQUFvQixFQUNwQitJLE1BQVcsRUFDWDNILE9BQWdCLEVBQ047TUFDVixJQUFNMEgsT0FBTyxHQUFHbk8sY0FBYyxDQUFDdU8sY0FBYyxDQUFDMUcsVUFBVSxFQUFFcEIsT0FBTyxDQUFDO01BQ2xFLElBQU1vSSxpQkFBaUIsR0FBRzdPLGNBQWMsQ0FBQ3dOLFVBQVUsQ0FBQ1csT0FBTyxDQUFDO01BRTVELElBQUksQ0FBQ1UsaUJBQWlCLEVBQUU7UUFDdkI3TyxjQUFjLENBQUNrTyxxQkFBcUIsQ0FBQ0MsT0FBTyxFQUFFTCxnQkFBZ0IsRUFBRXpJLFlBQVksRUFBRStJLE1BQU0sQ0FBQztNQUN0RjtNQUNBLE9BQU9TLGlCQUFpQjtJQUN6QixDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyx1QkFBdUIsRUFBRSxVQUFVeE4sU0FBZ0IsRUFBRXlDLFVBQWlCLEVBQUU4SCxjQUFtQixFQUFFa0QsYUFBc0IsRUFBRTtNQUNwSCxJQUFNNU8sT0FBYyxHQUFHLEVBQUU7TUFDekIsSUFBTTZPLFNBQWdCLEdBQUcsRUFBRTtNQUMzQixJQUFNQyxRQUFlLEdBQUcsRUFBRTtNQUMxQixJQUFNQyxTQUFnQixHQUFHLEVBQUU7TUFDM0IsSUFBTUMsa0JBQXlCLEdBQUcsRUFBRTtNQUVwQyxJQUFNQyxLQUFLLEdBQUc7UUFDYmhCLE1BQU0sRUFBRWpPLE9BQU87UUFDZmtQLFFBQVEsRUFBRUwsU0FBUztRQUNuQk0sT0FBTyxFQUFFTCxRQUFRO1FBQ2pCTSxvQkFBb0IsRUFBRUosa0JBQWtCO1FBQ3hDSyxXQUFXLEVBQUUxTyxTQUFTO1FBQ3RCb08sU0FBUyxFQUFFQSxTQUFTO1FBQ3BCeEQsUUFBUSxFQUFFRyxjQUFjLENBQUNIO01BQzFCLENBQUM7TUFDRCxJQUFNb0MsZ0JBQWdCLEdBQUcsSUFBSWpKLFNBQVMsQ0FBQ3VLLEtBQUssQ0FBQztNQUM3Q3JMLFVBQVUsQ0FBQ3RELE9BQU8sQ0FBQyxVQUFVZ1AsT0FBWSxFQUFFO1FBQzFDLElBQUlDLFNBQVM7UUFDYixJQUFJQyxZQUFZO1FBQ2hCLElBQUlDLGlCQUFpQjtRQUNyQixJQUFNQyxpQkFBc0IsR0FBRyxDQUFDLENBQUM7UUFDakMsSUFBTUMsZ0JBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLElBQUlMLE9BQU8sQ0FBQ3BLLFlBQVksSUFBSW9LLE9BQU8sQ0FBQ3BLLFlBQVksQ0FBQ3RFLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtVQUNuRSxJQUFNWCxVQUFVLEdBQUdKLGNBQWMsQ0FBQ0MsMkJBQTJCLENBQUN3UCxPQUFPLENBQUNwSyxZQUFZLEVBQUVsRixPQUFPLENBQUMscUJBQXFCO1VBQ2pILElBQU1pQixjQUFjLEdBQUdxTyxPQUFPLENBQUNwSyxZQUFZLENBQUM5RSxLQUFLLENBQUMsR0FBRyxDQUFDO1VBQUMsMkNBRWpDZSxTQUFTO1lBQUE7VUFBQTtZQUEvQixvREFBaUM7Y0FBQSxJQUF0Qm1GLE9BQU87Y0FDakIsSUFBTXNKLG9CQUFvQixHQUFHdEosT0FBTyxDQUFDN0UsU0FBUyxDQUFDNk4sT0FBTyxDQUFDcEssWUFBWSxDQUFDO2NBQ3BFc0ssWUFBWSxhQUFNRixPQUFPLENBQUNwSyxZQUFZLGNBQUkwSyxvQkFBb0IsQ0FBRTtjQUNoRSxJQUFJLENBQUNGLGlCQUFpQixDQUFDRixZQUFZLENBQUMsSUFBSXZQLFVBQVUsQ0FBQ2dCLGNBQWMsQ0FBQ0EsY0FBYyxDQUFDRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDOUZtTyxTQUFTLEdBQUcxUCxjQUFjLENBQUMrTSxzQkFBc0IsQ0FDaEQwQyxPQUFPLENBQUNwSyxZQUFZLEVBQ3BCb0ssT0FBTyxDQUFDaE0sZUFBZSxFQUN2QmdNLE9BQU8sQ0FBQ2xHLE9BQU8sRUFDZjlDLE9BQU8sQ0FDUDtnQkFDRHJHLFVBQVUsQ0FBQ2dCLGNBQWMsQ0FBQ0EsY0FBYyxDQUFDRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQ1EsSUFBSSxDQUFDO2tCQUMxRHVLLElBQUksRUFBR29ELFNBQVMsSUFBSUEsU0FBUyxDQUFDeEMsUUFBUSxJQUFLNkMsb0JBQW9CO2tCQUMvRHhELEdBQUcsRUFBRW9ELFlBQVk7a0JBQ2pCbEQsUUFBUSxFQUFFaUQ7Z0JBQ1gsQ0FBQyxDQUFDO2dCQUNGRyxpQkFBaUIsQ0FBQ0YsWUFBWSxDQUFDLEdBQUdJLG9CQUFvQjtjQUN2RDtZQUNEO1lBQ0E7WUFDQTtZQUNBO1VBQUE7WUFBQTtVQUFBO1lBQUE7VUFBQTtVQUVBM1AsVUFBVSxDQUFDZ0IsY0FBYyxDQUFDQSxjQUFjLENBQUNHLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDa0wsUUFBUSxHQUFHO1lBQ2hFaEosZUFBZSxFQUFFZ00sT0FBTyxDQUFDaE0sZUFBZTtZQUN4QzZKLFNBQVMsRUFBRW1DLE9BQU8sQ0FBQ3BLLFlBQVk7WUFDL0I3QixXQUFXLEVBQUVpTSxPQUFPLENBQUNsRztVQUN0QixDQUFDO1FBQ0YsQ0FBQyxNQUFNO1VBQ05wSixPQUFPLENBQUNzUCxPQUFPLENBQUNwSyxZQUFZLENBQUMsR0FBR2xGLE9BQU8sQ0FBQ3NQLE9BQU8sQ0FBQ3BLLFlBQVksQ0FBQyxJQUFJLEVBQUU7VUFDbkVsRixPQUFPLENBQUNzUCxPQUFPLENBQUNwSyxZQUFZLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBR2xGLE9BQU8sQ0FBQ3NQLE9BQU8sQ0FBQ3BLLFlBQVksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUU7VUFDckcsSUFBSW9LLE9BQU8sQ0FBQ3hHLFlBQVksRUFBRTtZQUN6QitGLFNBQVMsQ0FBQ1MsT0FBTyxDQUFDeEcsWUFBWSxDQUFDLEdBQUcrRixTQUFTLENBQUNTLE9BQU8sQ0FBQ3hHLFlBQVksQ0FBQyxJQUFJLEVBQUU7WUFDdkUrRixTQUFTLENBQUNTLE9BQU8sQ0FBQ3hHLFlBQVksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHK0YsU0FBUyxDQUFDUyxPQUFPLENBQUN4RyxZQUFZLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFO1VBQzFHO1VBQUMsNENBQ3FCM0gsU0FBUztZQUFBO1VBQUE7WUFBL0IsdURBQWlDO2NBQUEsSUFBdEJtRixRQUFPO2NBQ2pCLElBQU05RSxXQUFXLEdBQUc4RSxRQUFPLENBQUM3RSxTQUFTLEVBQUU7Y0FDdkMrTixZQUFZLGFBQU1GLE9BQU8sQ0FBQ3BLLFlBQVksY0FBSTFELFdBQVcsQ0FBQzhOLE9BQU8sQ0FBQ3BLLFlBQVksQ0FBQyxDQUFFO2NBQzdFLElBQUlvSyxPQUFPLENBQUNwSyxZQUFZLElBQUkxRCxXQUFXLENBQUM4TixPQUFPLENBQUNwSyxZQUFZLENBQUMsSUFBSSxDQUFDd0ssaUJBQWlCLENBQUNGLFlBQVksQ0FBQyxFQUFFO2dCQUNsRyxJQUFJRixPQUFPLENBQUM5TSxTQUFTLElBQUksVUFBVSxFQUFFO2tCQUNwQytNLFNBQVMsR0FBRzFQLGNBQWMsQ0FBQytNLHNCQUFzQixDQUNoRDBDLE9BQU8sQ0FBQ3BLLFlBQVksRUFDcEJvSyxPQUFPLENBQUNoTSxlQUFlLEVBQ3ZCZ00sT0FBTyxDQUFDbEcsT0FBTyxFQUNmOUMsUUFBTyxDQUNQO2tCQUNELElBQU11SixLQUFLLEdBQUc7b0JBQ2IxRCxJQUFJLEVBQUdvRCxTQUFTLElBQUlBLFNBQVMsQ0FBQ3hDLFFBQVEsSUFBS3ZMLFdBQVcsQ0FBQzhOLE9BQU8sQ0FBQ3BLLFlBQVksQ0FBQztvQkFDNUVrSCxHQUFHLEVBQUVvRCxZQUFZO29CQUNqQmxELFFBQVEsRUFBRWlEO2tCQUNYLENBQUM7a0JBQ0R2UCxPQUFPLENBQUNzUCxPQUFPLENBQUNwSyxZQUFZLENBQUMsQ0FBQ3RELElBQUksQ0FBQ2lPLEtBQUssQ0FBQztrQkFDekM3UCxPQUFPLENBQUNzUCxPQUFPLENBQUNwSyxZQUFZLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQ3RELElBQUksQ0FBQ2lPLEtBQUssQ0FBQztnQkFDM0Q7Z0JBQ0FILGlCQUFpQixDQUFDRixZQUFZLENBQUMsR0FBR2hPLFdBQVcsQ0FBQzhOLE9BQU8sQ0FBQ3BLLFlBQVksQ0FBQztjQUNwRTtjQUNBLElBQUlvSyxPQUFPLENBQUN4RyxZQUFZLElBQUl0SCxXQUFXLENBQUM4TixPQUFPLENBQUN4RyxZQUFZLENBQUMsRUFBRTtnQkFDOUQyRyxpQkFBaUIsYUFBTUgsT0FBTyxDQUFDeEcsWUFBWSxjQUFJdEgsV0FBVyxDQUFDOE4sT0FBTyxDQUFDeEcsWUFBWSxDQUFDLENBQUU7Z0JBQ2xGLElBQUksQ0FBQzZHLGdCQUFnQixDQUFDRixpQkFBaUIsQ0FBQyxFQUFFO2tCQUN6QyxJQUFJSCxPQUFPLENBQUM5TSxTQUFTLElBQUksVUFBVSxFQUFFO29CQUNwQytNLFNBQVMsR0FBRzFQLGNBQWMsQ0FBQytNLHNCQUFzQixDQUNoRDBDLE9BQU8sQ0FBQ3hHLFlBQVksRUFDcEJ3RyxPQUFPLENBQUNoTSxlQUFlLEVBQ3ZCZ00sT0FBTyxDQUFDbEcsT0FBTyxFQUNmOUMsUUFBTyxDQUNQO29CQUNELElBQU13SixTQUFTLEdBQUc7c0JBQ2pCM0QsSUFBSSxFQUFHb0QsU0FBUyxJQUFJQSxTQUFTLENBQUN4QyxRQUFRLElBQUt2TCxXQUFXLENBQUM4TixPQUFPLENBQUN4RyxZQUFZLENBQUM7c0JBQzVFc0QsR0FBRyxFQUFFcUQsaUJBQWlCO3NCQUN0Qm5ELFFBQVEsRUFBRWlEO29CQUNYLENBQUM7b0JBQ0RWLFNBQVMsQ0FBQ1MsT0FBTyxDQUFDeEcsWUFBWSxDQUFDLENBQUNsSCxJQUFJLENBQUNrTyxTQUFTLENBQUM7b0JBQy9DakIsU0FBUyxDQUFDUyxPQUFPLENBQUN4RyxZQUFZLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQ2xILElBQUksQ0FBQ2tPLFNBQVMsQ0FBQztrQkFDakU7a0JBQ0FILGdCQUFnQixDQUFDRixpQkFBaUIsQ0FBQyxHQUFHak8sV0FBVyxDQUFDOE4sT0FBTyxDQUFDeEcsWUFBWSxDQUFDO2dCQUN4RTtjQUNEO1lBQ0Q7VUFBQztZQUFBO1VBQUE7WUFBQTtVQUFBO1VBQ0Q5SSxPQUFPLENBQUNzUCxPQUFPLENBQUNwSyxZQUFZLENBQUMsQ0FBQ29ILFFBQVEsR0FBRztZQUN4Q2hKLGVBQWUsRUFBRWdNLE9BQU8sQ0FBQ2hNLGVBQWU7WUFDeEM2SixTQUFTLEVBQUVtQyxPQUFPLENBQUNwSyxZQUFZO1lBQy9CN0IsV0FBVyxFQUFFaU0sT0FBTyxDQUFDbEc7VUFDdEIsQ0FBQztVQUNELElBQUl0QixNQUFNLENBQUNDLElBQUksQ0FBQzJILGlCQUFpQixDQUFDLENBQUN0TyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ2hEd04sYUFBYSxDQUFDZCxXQUFXLENBQUN3QixPQUFPLENBQUNwSyxZQUFZLEVBQUVzSyxZQUFZLElBQUlFLGlCQUFpQixDQUFDRixZQUFZLENBQUMsQ0FBQztVQUNqRztVQUNBLElBQUkxSCxNQUFNLENBQUNDLElBQUksQ0FBQzRILGdCQUFnQixDQUFDLENBQUN2TyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQy9Dd04sYUFBYSxDQUFDZCxXQUFXLENBQUN3QixPQUFPLENBQUN4RyxZQUFZLEVBQUUyRyxpQkFBaUIsSUFBSUUsZ0JBQWdCLENBQUNGLGlCQUFpQixDQUFDLENBQUM7VUFDMUc7UUFDRDtRQUNBVixTQUFTLENBQUNPLE9BQU8sQ0FBQ3BLLFlBQVksQ0FBQyxHQUFHb0ssT0FBTyxDQUFDaE0sZUFBZSxHQUFHLENBQUNnTSxPQUFPLENBQUNoTSxlQUFlLENBQUMsR0FBRyxFQUFFO01BQzNGLENBQUMsQ0FBQztNQUNGTSxVQUFVLENBQUN0RCxPQUFPLENBQUMsVUFBVWdQLE9BQVksRUFBRTtRQUMxQyxJQUFJckIsTUFBVyxHQUFHLENBQUMsQ0FBQztRQUNwQixJQUFJcUIsT0FBTyxDQUFDcEssWUFBWSxDQUFDdEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1VBQzNDLElBQU1tUCx3QkFBd0IsR0FBR2xRLGNBQWMsQ0FBQ2dCLHlCQUF5QixDQUFDeU8sT0FBTyxDQUFDcEssWUFBWSxFQUFFbEYsT0FBTyxDQUFDO1VBQ3hHLElBQUksQ0FBQytQLHdCQUF3QixFQUFFO1lBQzlCQSx3QkFBd0IsQ0FBQ25PLElBQUksQ0FBQztjQUFFdUssSUFBSSxFQUFFVCxjQUFjLENBQUNYLGVBQWU7Y0FBRXFCLEdBQUcsa0JBQVdrRCxPQUFPLENBQUNwSyxZQUFZO1lBQUcsQ0FBQyxDQUFDO1VBQzlHLENBQUMsTUFBTTtZQUNOckYsY0FBYyxDQUFDNEwsd0JBQXdCLENBQUNzRSx3QkFBd0IsRUFBRXJFLGNBQWMsRUFBRTRELE9BQU8sQ0FBQztVQUMzRjtVQUNBckIsTUFBTSxHQUFHOEIsd0JBQXdCO1FBQ2xDLENBQUMsTUFBTSxJQUFJL1AsT0FBTyxDQUFDc1AsT0FBTyxDQUFDcEssWUFBWSxDQUFDLEVBQUU7VUFDekNsRixPQUFPLENBQUNzUCxPQUFPLENBQUNwSyxZQUFZLENBQUMsR0FBR2xGLE9BQU8sQ0FBQ3NQLE9BQU8sQ0FBQ3BLLFlBQVksQ0FBQyxJQUFJLEVBQUU7VUFDbkVyRixjQUFjLENBQUM0TCx3QkFBd0IsQ0FBQ3pMLE9BQU8sQ0FBQ3NQLE9BQU8sQ0FBQ3BLLFlBQVksQ0FBQyxFQUFFd0csY0FBYyxFQUFFNEQsT0FBTyxDQUFDO1VBQy9GckIsTUFBTSxHQUFHak8sT0FBTyxDQUFDc1AsT0FBTyxDQUFDcEssWUFBWSxDQUFDO1FBQ3ZDO1FBRUEsSUFBSTJKLFNBQVMsQ0FBQ1MsT0FBTyxDQUFDeEcsWUFBWSxDQUFDLElBQUkrRixTQUFTLENBQUNTLE9BQU8sQ0FBQ3hHLFlBQVksQ0FBQyxDQUFDMUgsTUFBTSxFQUFFO1VBQzlFdkIsY0FBYyxDQUFDNEwsd0JBQXdCLENBQUNvRCxTQUFTLENBQUNTLE9BQU8sQ0FBQ3hHLFlBQVksQ0FBQyxFQUFFNEMsY0FBYyxFQUFFNEQsT0FBTyxFQUFFLElBQUksQ0FBQztVQUN2R1QsU0FBUyxDQUFDUyxPQUFPLENBQUN4RyxZQUFZLENBQUMsQ0FBQ3dELFFBQVEsR0FBRyxDQUFDLENBQUM7VUFDN0N1QyxTQUFTLENBQUNTLE9BQU8sQ0FBQ3hHLFlBQVksQ0FBQyxDQUFDdUcsV0FBVyxHQUFHeFAsY0FBYyxDQUFDcUIsK0JBQStCLENBQzNGQyxTQUFTLEVBQ1RtTyxPQUFPLENBQUN4RyxZQUFZLENBQ3BCO1VBQ0QrRixTQUFTLENBQUNTLE9BQU8sQ0FBQ3hHLFlBQVksQ0FBQyxDQUFDdEcsU0FBUyxHQUFHOE0sT0FBTyxDQUFDOU0sU0FBUztRQUM5RCxDQUFDLE1BQU0sSUFDTDhNLE9BQU8sQ0FBQ3BLLFlBQVksSUFBSWxGLE9BQU8sQ0FBQ3NQLE9BQU8sQ0FBQ3BLLFlBQVksQ0FBQyxJQUFJLENBQUNsRixPQUFPLENBQUNzUCxPQUFPLENBQUNwSyxZQUFZLENBQUMsQ0FBQzlELE1BQU0sSUFDOUZrTyxPQUFPLENBQUN4RyxZQUFZLElBQUkrRixTQUFTLENBQUNTLE9BQU8sQ0FBQ3hHLFlBQVksQ0FBQyxJQUFJLENBQUMrRixTQUFTLENBQUNTLE9BQU8sQ0FBQ3hHLFlBQVksQ0FBQyxDQUFDMUgsTUFBTyxFQUNuRztVQUNELElBQU00Tyw2QkFBNkIsR0FDbENoUSxPQUFPLENBQUNzUCxPQUFPLENBQUNwSyxZQUFZLENBQUMsSUFDN0JsRixPQUFPLENBQUNzUCxPQUFPLENBQUNwSyxZQUFZLENBQUMsQ0FBQ2hELElBQUksQ0FBQyxVQUFVK04sR0FBUSxFQUFFO1lBQ3RELE9BQU9BLEdBQUcsQ0FBQzlELElBQUksS0FBSyxrQkFBa0IsSUFBSThELEdBQUcsQ0FBQzlELElBQUksS0FBSyxpQkFBaUI7VUFDekUsQ0FBQyxDQUFDO1VBQ0gsSUFBSW1ELE9BQU8sQ0FBQ3BLLFlBQVksSUFBSSxDQUFDOEssNkJBQTZCLEVBQUU7WUFDM0RoUSxPQUFPLENBQUNzUCxPQUFPLENBQUNwSyxZQUFZLENBQUMsQ0FBQ3RELElBQUksQ0FBQztjQUFFdUssSUFBSSxFQUFFVCxjQUFjLENBQUNYLGVBQWU7Y0FBRXFCLEdBQUcsa0JBQVdrRCxPQUFPLENBQUNwSyxZQUFZO1lBQUcsQ0FBQyxDQUFDO1VBQ25IO1VBQ0EsSUFBTWdMLGlDQUFpQyxHQUN0Q3JCLFNBQVMsQ0FBQ1MsT0FBTyxDQUFDeEcsWUFBWSxDQUFDLElBQy9CK0YsU0FBUyxDQUFDUyxPQUFPLENBQUN4RyxZQUFZLENBQUMsQ0FBQzVHLElBQUksQ0FBQyxVQUFVK04sR0FBUSxFQUFFO1lBQ3hELE9BQU9BLEdBQUcsQ0FBQzlELElBQUksS0FBSyxrQkFBa0IsSUFBSThELEdBQUcsQ0FBQzlELElBQUksS0FBSyxpQkFBaUI7VUFDekUsQ0FBQyxDQUFDO1VBQ0gsSUFBSW1ELE9BQU8sQ0FBQ3hHLFlBQVksRUFBRTtZQUN6QixJQUFJLENBQUNvSCxpQ0FBaUMsRUFBRTtjQUN2Q3JCLFNBQVMsQ0FBQ1MsT0FBTyxDQUFDeEcsWUFBWSxDQUFDLENBQUNsSCxJQUFJLENBQUM7Z0JBQ3BDdUssSUFBSSxFQUFFVCxjQUFjLENBQUNYLGVBQWU7Z0JBQ3BDcUIsR0FBRyxrQkFBV2tELE9BQU8sQ0FBQ3hHLFlBQVk7Y0FDbkMsQ0FBQyxDQUFDO1lBQ0g7WUFDQStGLFNBQVMsQ0FBQ1MsT0FBTyxDQUFDeEcsWUFBWSxDQUFDLENBQUN3RCxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBQzdDdUMsU0FBUyxDQUFDUyxPQUFPLENBQUN4RyxZQUFZLENBQUMsQ0FBQ3VHLFdBQVcsR0FBR3hQLGNBQWMsQ0FBQ3FCLCtCQUErQixDQUMzRkMsU0FBUyxFQUNUbU8sT0FBTyxDQUFDeEcsWUFBWSxDQUNwQjtZQUNEK0YsU0FBUyxDQUFDUyxPQUFPLENBQUN4RyxZQUFZLENBQUMsQ0FBQ3RHLFNBQVMsR0FBRzhNLE9BQU8sQ0FBQzlNLFNBQVM7VUFDOUQ7UUFDRDtRQUNBLElBQUk4TSxPQUFPLENBQUNoRyxrQkFBa0IsSUFBSSxPQUFPZ0csT0FBTyxDQUFDaEcsa0JBQWtCLEtBQUssU0FBUyxFQUFFO1VBQ2xGMEYsa0JBQWtCLENBQUNwTixJQUFJLENBQUM7WUFBRXVCLFFBQVEsRUFBRW1NLE9BQU8sQ0FBQ3BLLFlBQVk7WUFBRWpDLEtBQUssRUFBRXFNLE9BQU8sQ0FBQ2hHLGtCQUFrQjtZQUFFa0IsSUFBSSxFQUFFO1VBQVUsQ0FBQyxDQUFDO1FBQ2hILENBQUMsTUFBTSxJQUNOOEUsT0FBTyxDQUFDaEcsa0JBQWtCLElBQzFCZ0csT0FBTyxDQUFDaEcsa0JBQWtCLENBQUM2RyxRQUFRLElBQ25DYixPQUFPLENBQUNoRyxrQkFBa0IsQ0FBQzZHLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFDdENiLE9BQU8sQ0FBQ2hHLGtCQUFrQixDQUFDNkcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxRQUFRLElBQy9DZCxPQUFPLENBQUNoRyxrQkFBa0IsQ0FBQzZHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ0UsUUFBUSxFQUM5QztVQUNEO1VBQ0FyQixrQkFBa0IsQ0FBQ3BOLElBQUksQ0FBQztZQUN2QnVCLFFBQVEsRUFBRW1NLE9BQU8sQ0FBQ3BLLFlBQVk7WUFDOUJvTCxZQUFZLEVBQUVoQixPQUFPLENBQUNoRyxrQkFBa0IsQ0FBQzZHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDN00sSUFBSTtZQUNsRWdOLGFBQWEsRUFBRWpCLE9BQU8sQ0FBQ2hHLGtCQUFrQixDQUFDNkcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDRSxRQUFRLENBQUNwTixLQUFLO1lBQ3BFdUgsSUFBSSxFQUFFO1VBQ1AsQ0FBQyxDQUFDO1FBQ0g7O1FBRUE7UUFDQSxJQUFJOEUsT0FBTyxDQUFDL0YsUUFBUSxFQUFFO1VBQ3JCMEUsTUFBTSxDQUFDdUMsT0FBTyxHQUNibEIsT0FBTyxDQUFDL0YsUUFBUSxLQUFLdkIsUUFBUSxDQUFDSSxRQUFRLElBQ3RDakgsU0FBUyxDQUFDZSxJQUFJLENBQ2JyQyxjQUFjLENBQUM0TyxpQkFBaUIsQ0FBQ04sSUFBSSxDQUNwQ3RPLGNBQWMsRUFDZHlQLE9BQU8sQ0FBQy9GLFFBQVEsRUFDaEJvRSxnQkFBZ0IsRUFDaEIyQixPQUFPLENBQUNwSyxZQUFZLEVBQ3BCK0ksTUFBTSxDQUNOLENBQ0Q7UUFDSCxDQUFDLE1BQU07VUFDTkEsTUFBTSxDQUFDdUMsT0FBTyxHQUFHLElBQUk7UUFDdEI7UUFDQXZDLE1BQU0sQ0FBQ29CLFdBQVcsR0FBR3hQLGNBQWMsQ0FBQ3FCLCtCQUErQixDQUFDQyxTQUFTLEVBQUVtTyxPQUFPLENBQUNwSyxZQUFZLENBQUM7UUFDcEcrSSxNQUFNLENBQUN6TCxTQUFTLEdBQUc4TSxPQUFPLENBQUM5TSxTQUFTO1FBQ3BDeUwsTUFBTSxDQUFDbkYsWUFBWSxHQUFHd0csT0FBTyxDQUFDeEcsWUFBWTtNQUMzQyxDQUFDLENBQUM7TUFFRixPQUFPNkUsZ0JBQWdCO0lBQ3hCLENBQUM7SUFDRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDOEMsZ0JBQWdCLEVBQUUsVUFBVUMsS0FBWSxFQUFFQyxNQUFlLEVBQVc7TUFDbkUsSUFBSUMsUUFBaUIsR0FBSUQsTUFBTSxJQUFJQSxNQUFNLENBQUNFLGlCQUFpQixFQUFjO01BRXpFLElBQUksQ0FBQ0QsUUFBUSxFQUFFO1FBQ2QsSUFBTXRDLEtBQUssR0FBR29DLEtBQUssQ0FBQzVNLFFBQVEsRUFBRTtRQUM5QixJQUFNZ04sV0FBVyxHQUFHSixLQUFLLENBQUNLLGFBQWEsRUFBRTtRQUN6QyxJQUFNQyxvQkFBb0IsR0FBRzFDLEtBQUssQ0FBQzJDLFFBQVEsQ0FBQ0gsV0FBVyxDQUFDdkssT0FBTyxFQUFFLEVBQUV1SyxXQUFXLENBQUN6TSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO1VBQ3BHNk0sZUFBZSxFQUFFO1FBQ2xCLENBQUMsQ0FBcUI7UUFDckJGLG9CQUFvQixDQUFTRyxlQUFlLEdBQUcsWUFBWTtVQUMzRDtRQUFBLENBQ0E7UUFDRFAsUUFBUSxHQUFHSSxvQkFBb0IsQ0FBQ0ksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztNQUNqRDtNQUVBLE9BQU9SLFFBQVE7SUFDaEIsQ0FBQztJQUVEUyxZQUFZLEVBQUUsVUFBVUMsS0FBVSxFQUFRO01BQ3pDLElBQU1DLE1BQU0sR0FBR0QsS0FBSyxDQUFDRSxTQUFTLEVBQUU7TUFDaEMsSUFBTUMsZUFBZSxHQUFHRixNQUFNLENBQUN6TixRQUFRLENBQUMsWUFBWSxDQUFDO01BQ3JEMk4sZUFBZSxDQUFDM0QsV0FBVyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVENEQsV0FBVyxFQUFFLFVBQVVDLE9BQVksRUFBRTtNQUNwQ0EsT0FBTyxDQUFDQyxLQUFLLEVBQUU7TUFDZkQsT0FBTyxDQUFDRSxPQUFPLEVBQUU7SUFDbEIsQ0FBQztJQUVEQywwQkFBMEIsWUFDekJuTyxNQUFhLEVBQ2J4QyxTQUFjLEVBQ2Q0USxXQUEyQixFQUMzQkMsU0FBYyxFQUNkbEQsUUFBYSxFQUNibUQsYUFBa0I7TUFBQSxJQUNqQjtRQUFBO1FBQ0QsSUFBTUMsV0FBVyxHQUFHQyxTQUFTLENBQUNELFdBQVc7UUFDekMsSUFBTXZILGVBQWUsR0FBR3lILElBQUksQ0FBQ0Msd0JBQXdCLENBQUMsYUFBYSxDQUFDO1FBQ3BFLHdCQUFDTixXQUFXLENBQUNPLE9BQU8sRUFBRSxrRkFBckIscUJBQXVCekIsaUJBQWlCLENBQUMsVUFBVSxDQUFDLDBEQUFyRCxzQkFBZ0YvQyxXQUFXLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDO1FBQ2hJaUUsV0FBVyxDQUFDUSxTQUFTLENBQUNDLGlCQUFpQixFQUFFLENBQUNDLFlBQVksQ0FBQztVQUN0REMsbUJBQW1CLEVBQUUsVUFBVUMsUUFBYSxFQUFFQyxxQkFBMEIsRUFBRTtZQUN6RTtZQUNBQSxxQkFBcUIsQ0FBQ0Msb0JBQW9CLEdBQUdDLGVBQWUsQ0FBQ0Msa0JBQWtCLENBQUM1RSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUV4SyxNQUFNLEVBQUV4QyxTQUFTLENBQUM7WUFDM0csSUFBTTZSLGFBQW9CLEdBQUcsRUFBRTtZQUMvQkwsUUFBUSxDQUFDclMsT0FBTyxDQUFDLFVBQVUyUyxPQUFZLEVBQUU7Y0FDeEMsSUFBSSxDQUFDQSxPQUFPLENBQUNDLFNBQVMsRUFBRSxFQUFFO2dCQUN6QkYsYUFBYSxDQUFDcFIsSUFBSSxDQUFDcVIsT0FBTyxDQUFDO2NBQzVCO1lBQ0QsQ0FBQyxDQUFDO1lBRUYsSUFBSW5FLFFBQVEsQ0FBQzFOLE1BQU0sR0FBRyxDQUFDLElBQUk2USxhQUFhLENBQUM3USxNQUFNLEtBQUssQ0FBQyxFQUFFO2NBQ3REMlEsV0FBVyxDQUFDUSxTQUFTLENBQUNZLGNBQWMsQ0FBQ2pCLFdBQVcsQ0FBQ2tCLEtBQUssQ0FBQztjQUN2RCxJQUFNQyxZQUFZLEdBQUcxSSxlQUFlLENBQUNPLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQztjQUN6RW9JLFlBQVksQ0FBQ0MsSUFBSSxDQUFDRixZQUFZLENBQUM7WUFDaEMsQ0FBQyxNQUFNLElBQUlwQixhQUFhLENBQUM3USxNQUFNLEdBQUl1QyxNQUFNLENBQVM2UCxtQkFBbUIsRUFBRSxDQUFDcFMsTUFBTSxFQUFFO2NBQy9FMlEsV0FBVyxDQUFDUSxTQUFTLENBQUNZLGNBQWMsQ0FBQ2pCLFdBQVcsQ0FBQ2tCLEtBQUssQ0FBQztZQUN4RCxDQUFDLE1BQU0sSUFBSW5CLGFBQWEsQ0FBQzdRLE1BQU0sS0FBTXVDLE1BQU0sQ0FBUzZQLG1CQUFtQixFQUFFLENBQUNwUyxNQUFNLEVBQUU7Y0FDakYyUSxXQUFXLENBQUNRLFNBQVMsQ0FBQ1ksY0FBYyxDQUFDakIsV0FBVyxDQUFDdUIsS0FBSyxDQUFDO1lBQ3hEO1lBRUEsSUFBSTFCLFdBQVcsQ0FBQ2pPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQytKLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSW1GLGFBQWEsQ0FBQzVSLE1BQU0sS0FBSyxDQUFDLEVBQUU7Y0FDeEZ3UixxQkFBcUIsQ0FBQ2MsY0FBYyxHQUFHLEtBQUs7Y0FDNUNkLHFCQUFxQixDQUFDZSxpQkFBaUIsR0FBRyxLQUFLO1lBQ2hEO1lBQ0EsT0FBT2YscUJBQXFCO1VBQzdCO1FBQ0QsQ0FBQyxDQUFDO1FBQ0YsSUFBSVosU0FBUyxDQUFDNEIsTUFBTSxFQUFFLEVBQUU7VUFBQTtVQUN2Qi9ULGNBQWMsQ0FBQzZSLFdBQVcsQ0FBQ00sU0FBUyxDQUFDO1VBQ3JDLHlCQUFDRCxXQUFXLENBQUNPLE9BQU8sRUFBRSxtRkFBckIsc0JBQXVCekIsaUJBQWlCLENBQUMsVUFBVSxDQUFDLDBEQUFyRCxzQkFBZ0YvQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDO1FBQ3hIO1FBQ0EseUJBQUNpRSxXQUFXLENBQUNPLE9BQU8sRUFBRSxtRkFBckIsc0JBQXVCekIsaUJBQWlCLENBQUMsVUFBVSxDQUFDLDBEQUFyRCxzQkFBZ0YvQyxXQUFXLENBQUMsNkJBQTZCLEVBQUUsS0FBSyxDQUFDO1FBQUM7TUFDbkksQ0FBQztRQUFBO01BQUE7SUFBQTtJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDK0YsdUJBQXVCLEVBQUUsVUFBVXZQLGlCQUFzQixFQUFFd1AsWUFBaUIsRUFBRS9CLFdBQWdCLEVBQUVqRCxRQUFhLEVBQUU7TUFDOUcsSUFBTWlGLGdCQUFnQixHQUFHelAsaUJBQWlCLENBQUN1SixXQUFXLENBQUMsT0FBTyxDQUFDO01BQy9ELElBQU1tRyx1QkFBNEIsR0FBRyxDQUFDLENBQUM7TUFFdkNsRixRQUFRLENBQUN4TyxPQUFPLENBQUMsVUFBQ1UsTUFBVyxFQUFLO1FBQ2pDLElBQU1qQixLQUFLLEdBQUdpQixNQUFNLENBQUNpVCxRQUFRO1FBQzdCLElBQU1DLGdCQUFnQixHQUFHQyxXQUFXLENBQUNDLGlDQUFpQyxDQUFDclUsS0FBSyxFQUFFZ1UsZ0JBQWdCLEVBQUVELFlBQVksQ0FBQztRQUM3R0UsdUJBQXVCLENBQUNqVSxLQUFLLENBQUMsR0FBR2dTLFdBQVcsQ0FBQ3NDLFlBQVksQ0FBQ0Msc0NBQXNDLENBQUNKLGdCQUFnQixDQUFDO01BQ25ILENBQUMsQ0FBQztNQUNGLE9BQU9GLHVCQUF1QjtJQUMvQixDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDTywwQkFBMEIsRUFBRSxVQUFVeFUsS0FBVSxFQUFFeVUsV0FBZ0IsRUFBRTNRLFVBQWUsRUFBRTtNQUNwRjtNQUNBLElBQU00USxlQUFlLEdBQ25CMVUsS0FBSyxDQUFDYSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRzRULFdBQVcsR0FBRyxHQUFHLEdBQUd6VSxLQUFLLENBQUMyVSxNQUFNLENBQUMsQ0FBQyxFQUFFM1UsS0FBSyxDQUFDNFUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLGFBQWEsR0FBRyxLQUFLO1FBQ3ZIQyxZQUFZLEdBQUcsQ0FBQ0gsZUFBZSxHQUFHSSxPQUFPLENBQUNDLE9BQU8sQ0FBQ04sV0FBVyxDQUFDLEdBQUczUSxVQUFVLENBQUNrUixhQUFhLENBQUNOLGVBQWUsQ0FBQztNQUMzRzFVLEtBQUssR0FBRzBVLGVBQWUsR0FBRzFVLEtBQUssQ0FBQzJVLE1BQU0sQ0FBQzNVLEtBQUssQ0FBQzRVLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRzVVLEtBQUs7TUFDMUUsT0FBTztRQUFFQSxLQUFLLEVBQUxBLEtBQUs7UUFBRTZVLFlBQVksRUFBWkEsWUFBWTtRQUFFSCxlQUFlLEVBQWZBO01BQWdCLENBQUM7SUFDaEQsQ0FBQztJQUVETyxzQkFBc0IsRUFBRSxVQUFVblIsVUFBZSxFQUFFb1IsV0FBbUIsRUFBRTNRLGlCQUFzQixFQUFFNFEsWUFBb0IsRUFBRUMsUUFBYSxFQUFFO01BQ3BJLElBQU1DLGVBQWUsR0FBRzlRLGlCQUFpQixDQUFDdUosV0FBVyxDQUFDLE9BQU8sQ0FBQztNQUM5RCw0QkFBa0RoSyxVQUFVLENBQUNwQyxTQUFTLFdBQUk2QyxpQkFBaUIsY0FBSTJRLFdBQVcsRUFBRztRQUE5RkksTUFBTSx5QkFBYnRTLEtBQUs7UUFBb0J1UyxZQUFZLHlCQUF0QkMsUUFBUSxDQUErRSxDQUFDO01BQy9HLElBQUlELFlBQVksRUFBRTtRQUNqQixJQUFNRSx1QkFBdUIsR0FBRzNSLFVBQVUsQ0FBQ3BDLFNBQVMsWUFBSzRULE1BQU0sY0FBSUMsWUFBWSxFQUFHO1FBQ2xGLElBQUlFLHVCQUF1QixFQUFFO1VBQzVCLElBQU1DLHdCQUF3QixHQUFHRCx1QkFBdUIsQ0FBQyxPQUFPLENBQUM7VUFDakU7VUFDQSxJQUFJQyx3QkFBd0IsS0FBS0wsZUFBZSxFQUFFO1lBQ2pEO1lBQ0FELFFBQVEsQ0FBQ3ZULElBQUksQ0FBQ3NULFlBQVksQ0FBQztVQUM1QjtRQUNEO01BQ0QsQ0FBQyxNQUFNO1FBQ047UUFDQUMsUUFBUSxDQUFDdlQsSUFBSSxDQUFDc1QsWUFBWSxDQUFDO01BQzVCO01BQ0EsT0FBT0MsUUFBUTtJQUNoQixDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ08sdUJBQXVCLEVBQUUsVUFBVUMsZUFBb0IsRUFBRXJSLGlCQUFzQixFQUFFa1EsV0FBZ0IsRUFBRTNRLFVBQWUsRUFBRTtNQUNuSCxJQUEwQitSLGlCQUFpQixHQUFzQ0QsZUFBZSxDQUF4RkUsZ0JBQWdCO1FBQXFDQyxlQUFlLEdBQUtILGVBQWUsQ0FBbkRJLGNBQWM7TUFDM0QsSUFBTUMsU0FBYyxHQUFHLEVBQUU7TUFDekIsSUFBSWIsUUFBYSxHQUFHLEVBQUU7TUFDdEIsSUFBTUMsZUFBZSxHQUFHOVEsaUJBQWlCLENBQUN1SixXQUFXLENBQUMsT0FBTyxDQUFDO01BRTlELElBQUkyRyxXQUFXLEtBQUtZLGVBQWUsRUFBRTtRQUNwQztRQUNBVSxlQUFlLGFBQWZBLGVBQWUsdUJBQWZBLGVBQWUsQ0FBRXhWLE9BQU8sQ0FBQyxVQUFDNFUsWUFBaUIsRUFBSztVQUMvQ0EsWUFBWSxHQUFHQSxZQUFZLENBQUMseUJBQXlCLENBQUM7VUFDdEQsSUFBSUQsV0FBbUI7VUFDdkIsSUFBSUMsWUFBWSxDQUFDaE4sUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQy9CK00sV0FBVyxHQUFHQyxZQUFZLENBQUM5VSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3pDLENBQUMsTUFBTTtZQUNONlUsV0FBVyxHQUFHQyxZQUFZO1VBQzNCO1VBQ0FDLFFBQVEsR0FBR3RWLGNBQWMsQ0FBQ21WLHNCQUFzQixDQUFDblIsVUFBVSxFQUFFb1IsV0FBVyxFQUFFM1EsaUJBQWlCLEVBQUU0USxZQUFZLEVBQUVDLFFBQVEsQ0FBQztRQUNySCxDQUFDLENBQUM7TUFDSDtNQUVBLElBQUlTLGlCQUFpQixDQUFDeFUsTUFBTSxFQUFFO1FBQzdCd1UsaUJBQWlCLENBQUN0VixPQUFPLENBQUMsVUFBQzJWLFVBQWUsRUFBSztVQUM5Qyw0QkFBeUJwVyxjQUFjLENBQUMwVSwwQkFBMEIsQ0FBQzBCLFVBQVUsRUFBRXpCLFdBQVcsRUFBRTNRLFVBQVUsQ0FBQztZQUEvRitRLFlBQVkseUJBQVpBLFlBQVk7VUFDcEJvQixTQUFTLENBQUNwVSxJQUFJLENBQ2JnVCxZQUFZLENBQUNzQixJQUFJLENBQUMsVUFBQ0MsWUFBaUIsRUFBSztZQUN4QztZQUNBLElBQUlBLFlBQVksS0FBS2YsZUFBZSxFQUFFO2NBQ3JDRCxRQUFRLENBQUN2VCxJQUFJLENBQUNxVSxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQzVCLENBQUMsTUFBTSxJQUFJQSxVQUFVLENBQUMvTixRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7Y0FDcEMsSUFBTStNLFdBQVcsR0FBR2dCLFVBQVUsQ0FBQzdWLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDNUMrVSxRQUFRLEdBQUd0VixjQUFjLENBQUNtVixzQkFBc0IsQ0FDL0NuUixVQUFVLEVBQ1ZvUixXQUFXLEVBQ1gzUSxpQkFBaUIsRUFDakIyUixVQUFVLEVBQ1ZkLFFBQVEsQ0FDUjtZQUNGO1lBQ0EsT0FBT04sT0FBTyxDQUFDQyxPQUFPLENBQUNLLFFBQVEsQ0FBQztVQUNqQyxDQUFDLENBQUMsQ0FDRjtRQUNGLENBQUMsQ0FBQztNQUNILENBQUMsTUFBTTtRQUNOYSxTQUFTLENBQUNwVSxJQUFJLENBQUNpVCxPQUFPLENBQUNDLE9BQU8sQ0FBQ0ssUUFBUSxDQUFDLENBQUM7TUFDMUM7TUFFQSxPQUFPTixPQUFPLENBQUN1QixHQUFHLENBQUNKLFNBQVMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDSyxpQ0FBaUMsRUFBRSxVQUNsQ0MsY0FBNkUsRUFDN0VoUyxpQkFBMEIsRUFDdEI7TUFDSixJQUFNOFEsZUFBZSxHQUFHOVEsaUJBQWlCLENBQUN1SixXQUFXLENBQUMsT0FBTyxDQUFDO01BQzlELElBQU0wSSx3QkFBK0QsR0FBR3pPLE1BQU0sQ0FBQ21HLE1BQU0sQ0FBQ3FJLGNBQWMsQ0FBQyxDQUFDeFUsTUFBTSxDQUMzRyxVQUFDbU8sR0FBd0MsRUFBSztRQUM3QyxPQUFPQSxHQUFHLENBQUN4SyxJQUFJLENBQUM3RSxPQUFPLENBQUN3VSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDL0MsQ0FBQyxDQUNEO01BRUQsSUFBTW9CLGFBQWEsR0FBR2xTLGlCQUFpQixDQUFDaUMsT0FBTyxFQUFFLENBQUNuRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUNxVyxHQUFHLEVBQUU7TUFDbEUsSUFBTUMsb0NBQW9DLEdBQUdILHdCQUF3QixDQUFDelUsTUFBTSxDQUFDLFVBQUNtTyxHQUF3QyxFQUFLO1FBQzFILElBQU0wRyxtQkFBOEQsR0FBRzFHLEdBQUcsQ0FBQzJHLFdBQVcsQ0FBQ2IsY0FBYztRQUNyRyxPQUFPWSxtQkFBbUIsYUFBbkJBLG1CQUFtQixlQUFuQkEsbUJBQW1CLENBQUU3VSxNQUFNLENBQ2pDLFVBQUMrVSxRQUFxQztVQUFBLE9BQUtBLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLTCxhQUFhO1FBQUEsRUFDaEcsQ0FBQ3BWLE1BQU0sR0FDTDZPLEdBQUcsR0FDSCxLQUFLO01BQ1QsQ0FBQyxDQUFDO01BQ0YsT0FBT3lHLG9DQUFvQyxDQUFDdFYsTUFBTTtJQUNuRCxDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0MwViw4Q0FBOEMsWUFBa0JDLE9BQTRDO01BQUEsSUFBRTtRQUFBO1VBQzdHLElBQ0NoRixXQUFXLEdBVVJnRixPQUFPLENBVlZoRixXQUFXO1lBQ1hpRixhQUFhLEdBU1ZELE9BQU8sQ0FUVkMsYUFBYTtZQUNiVixjQUFjLEdBUVhTLE9BQU8sQ0FSVlQsY0FBYztZQUNkdkgsU0FBUyxHQU9OZ0ksT0FBTyxDQVBWaEksU0FBUztZQUNUa0ksT0FBTyxHQU1KRixPQUFPLENBTlZFLE9BQU87WUFDUDdLLEdBQUcsR0FLQTJLLE9BQU8sQ0FMVjNLLEdBQUc7WUFDSDlILGlCQUFpQixHQUlkeVMsT0FBTyxDQUpWelMsaUJBQWlCO1lBQ2pCVCxVQUFVLEdBR1BrVCxPQUFPLENBSFZsVCxVQUFVO1lBQ1Z4QyxnQkFBZ0IsR0FFYjBWLE9BQU8sQ0FGVjFWLGdCQUFnQjtZQUNoQjZWLGdDQUFnQyxHQUM3QkgsT0FBTyxDQURWRyxnQ0FBZ0M7VUFFakMsSUFBTUMsNEJBQTRCLEdBQUcsQ0FBQ0gsYUFBYSxDQUFDO1VBQ3BELElBQU01QixlQUFlLEdBQUc5USxpQkFBaUIsQ0FBQ3VKLFdBQVcsQ0FBQyxPQUFPLENBQUM7VUFDOUQsSUFBTXVKLGFBQWEsR0FBRzFPLFdBQVcsQ0FBQzJPLGVBQWUsQ0FBQ3RGLFdBQVcsQ0FBQ08sT0FBTyxFQUFFLENBQUM7VUFDeEUsSUFBTWdGLG1CQUFtQixHQUFHRixhQUFhLENBQUNHLHFCQUFxQixFQUFFO1VBRWpFLElBQU1DLHNDQUFzQyxHQUFHM1gsY0FBYyxDQUFDd1csaUNBQWlDLENBQUNDLGNBQWMsRUFBRWhTLGlCQUFpQixDQUFDO1VBRWxJLElBQUlnUyxjQUFjLEVBQUU7WUFDbkIsSUFBTW1CLDJCQUEyQixHQUFHM1AsTUFBTSxDQUFDQyxJQUFJLENBQUN1TyxjQUFjLENBQUM7WUFDL0QsSUFBTW9CLHVCQUE0QixHQUFHNVAsTUFBTSxDQUFDbUcsTUFBTSxDQUFDcUksY0FBYyxDQUFDO1lBRWxFLElBQU1xQixtQkFBd0IsR0FBRyxDQUFDLENBQUM7WUFDbkNULGdDQUFnQyxDQUFDOUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQUMsNENBQ2ZzTCx1QkFBdUIsQ0FBQ0UsT0FBTyxFQUFFO2NBQUE7WUFBQTtjQUFBO2dCQUFBO2tCQUFqRDFYLEtBQUs7a0JBQUUrRCxJQUFJO2dCQUN0QixJQUFNNFQsdUJBQXVCLEdBQUdKLDJCQUEyQixDQUFDdlgsS0FBSyxDQUFDO2dCQUNsRSxJQUFNc1UsV0FBVyxHQUFHcUQsdUJBQXVCLENBQUN6WCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6RCxJQUFNbUIsUUFBYSxHQUFHd1EsV0FBVyxDQUFDc0MsWUFBWSxDQUFDeUQsd0JBQXdCLENBQUN6VyxnQkFBZ0IsRUFBRW1ULFdBQVcsQ0FBQztnQkFDdEd2USxJQUFJLENBQUNxQyxPQUFPLEdBQUcvRSxRQUFRO2dCQUV2QixJQUFNd1csb0JBQW9CLEdBQUdoRyxXQUFXLENBQUNzQyxZQUFZLENBQUMyRCwyQkFBMkIsRUFBRTtnQkFDbkYsSUFBTUMsa0JBQWtCLEdBQUdGLG9CQUFvQixDQUFDeFcsUUFBUSxDQUFDZ0YsT0FBTyxFQUFFLENBQUM7Z0JBQ25Fd0wsV0FBVyxDQUFDc0MsWUFBWSxDQUFDNkQsK0JBQStCLENBQUMzVyxRQUFRLENBQUM7Z0JBQ2xFLElBQUk0Vyw0QkFBNEIsR0FBRyxDQUFDbFUsSUFBSSxDQUFDMlMsV0FBVyxDQUFDO2dCQUNyRHVCLDRCQUE0QixHQUMzQkYsa0JBQWtCLElBQUlBLGtCQUFrQixDQUFDN1csTUFBTSxHQUM1QytXLDRCQUE0QixDQUFDQyxNQUFNLENBQUNILGtCQUFrQixDQUFDLEdBQ3ZERSw0QkFBNEI7Z0JBQ2hDUixtQkFBbUIsQ0FBQ3BXLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFBQyw0Q0FDVDRXLDRCQUE0QjtrQkFBQTtnQkFBQTtrQkFBdEQsdURBQXdEO29CQUFBLElBQTdDRSxXQUFXO29CQUNyQixJQUFJLENBQUNWLG1CQUFtQixDQUFDcFcsUUFBUSxDQUFDLENBQUNJLGNBQWMsQ0FBQzBXLFdBQVcsQ0FBQ0Msa0JBQWtCLENBQUMsRUFBRTtzQkFBQTt3QkFDbEZYLG1CQUFtQixDQUFDcFcsUUFBUSxDQUFDLENBQUM4VyxXQUFXLENBQUNDLGtCQUFrQixDQUFDLEdBQUcsSUFBSTt3QkFDcEUsSUFBSUMsaUJBQXdCLEdBQUcsRUFBRTswQkFDaENDLFVBQWlCLEdBQUcsRUFBRTswQkFDdEJDLGlCQUFxQzt3QkFFdEMsSUFBTUMsK0JBQStCLGFBQW1CQyxXQUE0QjswQkFBQSxJQUFFOzRCQUNyRixJQUEwQi9DLGlCQUFpQixHQUFzQytDLFdBQVcsQ0FBcEY5QyxnQkFBZ0I7OEJBQXFDQyxlQUFlLEdBQUs2QyxXQUFXLENBQS9DNUMsY0FBYzs0QkFDM0QsSUFBTTZDLG9CQUFvQixHQUFHRCxXQUFXLENBQUNMLGtCQUFrQixDQUFDbFksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFBQyx1QkFDL0JQLGNBQWMsQ0FBQzZWLHVCQUF1QixDQUNoRmlELFdBQVcsRUFDWHJVLGlCQUFpQixFQUNqQnNVLG9CQUFvQixFQUNwQi9VLFVBQVUsQ0FDVixpQkFMS2dWLDRCQUE0Qjs4QkFNbENOLGlCQUFpQixHQUFHTSw0QkFBNEIsQ0FBQyxDQUFDLENBQUM7OEJBQ25ETCxVQUFVLEdBQUcsQ0FBQzVDLGlCQUFpQixJQUFJLEVBQUUsRUFBRXdDLE1BQU0sQ0FBRXRDLGVBQWUsSUFBYyxFQUFFLENBQUM7OEJBRS9FLElBQU1nRCxVQUE4QixHQUFJSCxXQUFXLENBQTBCSSxhQUFhOzhCQUMxRixJQUFNQyxnQkFBZ0IsR0FBR1IsVUFBVSxDQUFDMVcsTUFBTSxDQUFDLFVBQUNtWCxNQUFXLEVBQUs7Z0NBQzNELE9BQU8sQ0FBQ1YsaUJBQWlCLENBQUNyUSxRQUFRLENBQUMrUSxNQUFNLENBQUM7OEJBQzNDLENBQUMsQ0FBQzs4QkFFRi9CLGdDQUFnQyxDQUFDOUssR0FBRyxDQUFDLENBQUN1TSxXQUFXLENBQUNMLGtCQUFrQixDQUFDLEdBQUc7Z0NBQ3ZFbkQsUUFBUSxFQUFFNkQsZ0JBQWdCO2dDQUMxQnpYLFFBQVEsRUFBRUEsUUFBUTtnQ0FDbEJvWCxXQUFXLEVBQVhBOzhCQUNELENBQUM7OzhCQUVEOzhCQUNBLElBQUlHLFVBQVUsSUFBSUYsb0JBQW9CLEtBQUt4RCxlQUFlLEVBQUU7Z0NBQzNEO2dDQUNBLElBQU04RCxjQUFjLEdBQUdDLFdBQVcsQ0FBQ0MsZUFBZSxDQUFDdlYsVUFBVSxDQUFDcEMsU0FBUyxZQUFLcVgsVUFBVSxFQUFHLEVBQUVBLFVBQVUsQ0FBQztnQ0FDdEcsSUFBSSxDQUFDSSxjQUFjLEVBQUU7a0NBQ3BCVCxpQkFBaUIsR0FBR0ssVUFBVTtnQ0FDL0IsQ0FBQyxNQUFNO2tDQUNONUIsZ0NBQWdDLENBQUM5SyxHQUFHLENBQUMsQ0FBQ3VNLFdBQVcsQ0FBQ0wsa0JBQWtCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBR1EsVUFBVTtnQ0FDcEc7OEJBQ0QsQ0FBQyxNQUFNO2dDQUNONUIsZ0NBQWdDLENBQUM5SyxHQUFHLENBQUMsQ0FBQ3VNLFdBQVcsQ0FBQ0wsa0JBQWtCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBR1EsVUFBVTs4QkFDcEc7OEJBRUEsSUFBSXRCLHNDQUFzQyxFQUFFO2dDQUMzQ2UsaUJBQWlCLEdBQUcsRUFBRTs4QkFDdkI7OEJBQ0EsT0FBTztnQ0FDTnBELFFBQVEsRUFBRW9ELGlCQUFpQjtnQ0FDM0JRLGFBQWEsRUFBRU47OEJBQ2hCLENBQUM7NEJBQUM7MEJBQ0gsQ0FBQzs0QkFBQTswQkFBQTt3QkFBQTt3QkFDRHRCLDRCQUE0QixDQUFDdlYsSUFBSSxDQUNoQ21RLFdBQVcsQ0FBQ3NDLFlBQVksQ0FBQ2dGLGtCQUFrQixDQUFDaEIsV0FBVyxFQUFFOVcsUUFBUSxFQUFFMFYsT0FBTyxFQUFFeUIsK0JBQStCLENBQUMsQ0FDNUc7c0JBQUM7b0JBQ0g7a0JBQ0Q7Z0JBQUM7a0JBQUE7Z0JBQUE7a0JBQUE7Z0JBQUE7Y0FBQTtjQXRFRix1REFBK0Q7Z0JBQUE7Y0F1RS9EO1lBQUM7Y0FBQTtZQUFBO2NBQUE7WUFBQTtVQUNGO1VBQ0EsSUFBSTNKLFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUczQyxHQUFHLENBQUMsSUFBSTJDLFNBQVMsQ0FBQzNDLEdBQUcsQ0FBQyxDQUFDaEwsTUFBTSxFQUFFO1lBQzlDK1YsNEJBQTRCLENBQUN2VixJQUFJLENBQUMwVixtQkFBbUIsQ0FBQytCLGtCQUFrQixDQUFDdEssU0FBUyxDQUFDM0MsR0FBRyxDQUFDLEVBQUUvSyxnQkFBZ0IsRUFBRTRWLE9BQU8sQ0FBQyxDQUFDO1VBQ3JIO1VBQ0E7WUFBQSxtQkFBUXBDLE9BQU8sQ0FBU3lFLFVBQVUsQ0FBQ25DLDRCQUE0QixDQUFDO1VBQUE7UUFBQztRQUFBO01BQ2xFLENBQUM7UUFBQTtNQUFBO0lBQUE7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NvQyxZQUFZLFlBQWtCNVYsTUFBYSxFQUFFeEMsU0FBZ0IsRUFBRTRRLFdBQTJCO01BQUEsSUFBZ0I7UUFDekcsSUFBTXlILGFBQWEsR0FBRyw4Q0FBOEM7VUFDbkU1VixVQUFpQixHQUFHLEVBQUU7VUFDdEIrRyxlQUFlLEdBQUd5SCxJQUFJLENBQUNDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQztVQUM5RDNHLGNBQWMsR0FBRzdMLGNBQWMsQ0FBQzZLLHdCQUF3QixDQUFDQyxlQUFlLEVBQUV4SixTQUFTLENBQUNDLE1BQU0sRUFBRXVDLE1BQU0sQ0FBQztVQUNuR2MsZUFBZSxHQUFHNUUsY0FBYyxDQUFDNkQsb0JBQW9CLENBQUNDLE1BQU0sRUFBRXhDLFNBQVMsRUFBRXlDLFVBQVUsQ0FBQztVQUNwRmdMLGFBQWEsR0FBRy9PLGNBQWMsQ0FBQzRRLGdCQUFnQixDQUFDOU0sTUFBTSxDQUFDO1VBQ3ZEZ0ssZ0JBQWdCLEdBQUc5TixjQUFjLENBQUM4Tyx1QkFBdUIsQ0FBQ3hOLFNBQVMsRUFBRXlDLFVBQVUsRUFBRThILGNBQWMsRUFBRWtELGFBQWEsQ0FBQztVQUMvR04sS0FBSyxHQUFHM0ssTUFBTSxDQUFDRyxRQUFRLEVBQUU7VUFDekIyVixTQUFTLEdBQUduTCxLQUFLLENBQUN2SyxZQUFZLEVBQW9CO1VBQ2xEMlYsVUFBVSxHQUFHLElBQUlDLGFBQWEsQ0FBQ2xWLGVBQWUsQ0FBQ21WLE9BQU8sRUFBRSxFQUFFSCxTQUFTLENBQUM7UUFFckUsSUFBTUksU0FBUyxHQUFHQyxvQkFBb0IsQ0FBQ0MsWUFBWSxDQUFDUCxhQUFhLEVBQUUsVUFBVSxDQUFDO1FBQUMsdUJBRWhEM0UsT0FBTyxDQUFDQyxPQUFPLENBQzdDa0YsZUFBZSxDQUFDQyxPQUFPLENBQ3RCSixTQUFTLEVBQ1Q7VUFBRXBVLElBQUksRUFBRStUO1FBQWMsQ0FBQyxFQUN2QjtVQUNDVSxlQUFlLEVBQUU7WUFDaEJDLGNBQWMsRUFBRVQsVUFBVSxDQUFDVSxvQkFBb0IsQ0FBQyxHQUFHLENBQUM7WUFDcERYLFNBQVMsRUFBRUEsU0FBUyxDQUFDVyxvQkFBb0IsQ0FBQyxHQUFHLENBQUM7WUFDOUNDLFdBQVcsRUFBRVosU0FBUyxDQUFDVyxvQkFBb0IsQ0FBQ1gsU0FBUyxDQUFDYSxXQUFXLENBQUMxTCxhQUFhLENBQUNySSxPQUFPLEVBQUUsQ0FBQztVQUMzRixDQUFDO1VBQ0RnVSxNQUFNLEVBQUU7WUFDUEosY0FBYyxFQUFFVCxVQUFVO1lBQzFCRCxTQUFTLEVBQUVBLFNBQVM7WUFDcEJZLFdBQVcsRUFBRVo7VUFDZDtRQUNELENBQUMsQ0FDRCxDQUNELGlCQWpCS2UsZ0JBQWdCO1VBQUEsdUJBa0JPQyxRQUFRLENBQUNDLElBQUksQ0FBQztZQUFFQyxVQUFVLEVBQUVIO1VBQWlCLENBQUMsQ0FBQyxpQkFBdEVJLGNBQWM7WUFDcEIsSUFBTWpKLE9BQU8sR0FBRyxJQUFJa0osTUFBTSxDQUFDO2NBQzFCQyxTQUFTLEVBQUUsSUFBSTtjQUNmQyxLQUFLLEVBQUVyUCxjQUFjLENBQUNULGFBQWE7Y0FDbkMrUCxPQUFPLEVBQUUsQ0FBQ0osY0FBYyxDQUFRO2NBQ2hDSyxTQUFTLEVBQUVwYixjQUFjLENBQUN3UixZQUFZO2NBQ3RDNkosV0FBVyxFQUFFLElBQUlDLE1BQU0sQ0FBQztnQkFDdkJoUCxJQUFJLEVBQUV0TSxjQUFjLENBQUN1YixPQUFPLENBQUNDLDhCQUE4QixDQUFDM1AsY0FBYyxFQUFFakgsZUFBZSxDQUFDaEQsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzRytJLElBQUksRUFBRSxZQUFZO2dCQUNsQjhRLEtBQUssWUFBa0JDLE1BQVc7a0JBQUEsSUFBRTtvQkFBQTtvQkFDbkN6SSxlQUFlLENBQUMwSSw2QkFBNkIsRUFBRTtvQkFDL0MxSSxlQUFlLENBQUMySSwrQkFBK0IsRUFBRTtvQkFDakQseUJBQUMxSixXQUFXLENBQUNPLE9BQU8sRUFBRSxtRkFBckIsc0JBQXVCekIsaUJBQWlCLENBQUMsVUFBVSxDQUFDLDBEQUFyRCxzQkFBZ0YvQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDO29CQUN0SCxJQUFNa0UsU0FBUyxHQUFHdUosTUFBTSxDQUFDL0osU0FBUyxFQUFFLENBQUN4SCxTQUFTLEVBQUU7b0JBQ2hELElBQU0wUixNQUFNLEdBQUcxSixTQUFTLENBQUNsTyxRQUFRLENBQUMsWUFBWSxDQUFDO29CQUMvQyxJQUFNZ0wsUUFBUSxHQUFHNE0sTUFBTSxDQUFDN04sV0FBVyxDQUFDLFVBQVUsQ0FBQztvQkFFL0MsSUFBTWhLLFVBQVUsR0FBR0YsTUFBTSxJQUFLQSxNQUFNLENBQUNHLFFBQVEsRUFBRSxDQUFDQyxZQUFZLEVBQVU7c0JBQ3JFQyxxQkFBcUIsR0FBR0wsTUFBTSxDQUFDTSxJQUFJLENBQUMsVUFBVSxDQUFDO3NCQUMvQ0ssaUJBQWlCLEdBQUdULFVBQVUsQ0FBQ1EsVUFBVSxDQUFDTCxxQkFBcUIsQ0FBQztvQkFBQyx1QkFDdkMyWCxpQkFBaUIsQ0FBQ0MsbUNBQW1DLENBQUMvWCxVQUFVLENBQUMsaUJBQXRGaVEsWUFBWTtzQkFDbEIsSUFBTTdCLGFBQW9CLEdBQUcsRUFBRTtzQkFDL0IsSUFBTWxELFNBQVMsR0FBRzJNLE1BQU0sQ0FBQzdOLFdBQVcsQ0FBQyxZQUFZLENBQUM7c0JBQ2xELElBQU1nTyxxQkFBcUIsR0FBR0gsTUFBTSxDQUFDN04sV0FBVyxDQUFDLHVCQUF1QixDQUFDO3NCQUN6RSxJQUFJb0osT0FBZTtzQkFDbkIsSUFBSTZFLGNBQXFCO3NCQUN6QixJQUFNQyxnQkFBcUIsR0FBRyxFQUFFO3NCQUNoQyxJQUFNQyxnQkFBcUIsR0FBRyxDQUFDLENBQUM7c0JBQ2hDLElBQU1DLGtCQUFrQixHQUFHOWEsU0FBUyxDQUFDQyxNQUFNO3NCQUMzQyxJQUFNOFYsZ0NBQXFDLEdBQUcsQ0FBQyxDQUFDO3NCQUNoRCxJQUFNbEQsdUJBQXVCLEdBQUduVSxjQUFjLENBQUNnVSx1QkFBdUIsQ0FDckV2UCxpQkFBaUIsRUFDakJ3UCxZQUFZLEVBQ1ovQixXQUFXLEVBQ1hqRCxRQUFRLENBQ1I7c0JBQ0Q7c0JBQ0E7c0JBQ0E7O3NCQUVBM04sU0FBUyxDQUFDYixPQUFPLENBQUMsVUFBVWUsZ0JBQXFCLEVBQUU2YSxHQUFXLEVBQUU7d0JBQy9ESixjQUFjLEdBQUcsRUFBRTt3QkFDbkJoTixRQUFRLENBQUN4TyxPQUFPLFdBQWlCcUUsT0FBWTswQkFBQSxJQUFFOzRCQUM5QyxJQUFJLENBQUNxWCxnQkFBZ0IsQ0FBQ3JhLGNBQWMsQ0FBQ2dELE9BQU8sQ0FBQ3NQLFFBQVEsQ0FBQyxFQUFFOzhCQUN2RCtILGdCQUFnQixDQUFDclgsT0FBTyxDQUFDc1AsUUFBUSxDQUFDLEdBQUcsQ0FBQzs0QkFDdkM7NEJBQ0E7NEJBQ0EsSUFBSUQsdUJBQXVCLENBQUNyUCxPQUFPLENBQUNzUCxRQUFRLENBQUMsRUFBRTs4QkFDOUM2SCxjQUFjLENBQUNuWCxPQUFPLENBQUNzUCxRQUFRLENBQUMsR0FBR0QsdUJBQXVCLENBQUNyUCxPQUFPLENBQUNzUCxRQUFRLENBQUM7NEJBQzdFOzRCQUVBLElBQUk0SCxxQkFBcUIsRUFBRTs4QkFDMUJBLHFCQUFxQixDQUFDM1osSUFBSSxDQUFDLFVBQVVpRCxhQUFrQixFQUFFO2dDQUN4RCxJQUFJUixPQUFPLENBQUNzUCxRQUFRLEtBQUs5TyxhQUFhLENBQUNoQyxRQUFRLEVBQUU7a0NBQ2hELElBQUlnQyxhQUFhLENBQUNxRixJQUFJLEtBQUssU0FBUyxFQUFFO29DQUNyQyxPQUFPckYsYUFBYSxDQUFDbEMsS0FBSyxLQUFLLElBQUk7a0NBQ3BDLENBQUMsTUFBTSxJQUNOa0MsYUFBYSxDQUFDcUYsSUFBSSxLQUFLLE1BQU0sSUFDN0JyRixhQUFhLENBQUNvTCxhQUFhLElBQzNCcEwsYUFBYSxDQUFDbUwsWUFBWSxFQUN6QjtvQ0FDRCxPQUFPalAsZ0JBQWdCLENBQUNJLFNBQVMsQ0FBQzBELGFBQWEsQ0FBQ21MLFlBQVksQ0FBQyxLQUFLbkwsYUFBYSxDQUFDb0wsYUFBYTtrQ0FDOUY7Z0NBQ0Q7OEJBQ0QsQ0FBQyxDQUFDOzRCQUNIOzRCQUNBMEcsT0FBTyxtQkFBWWlGLEdBQUcsQ0FBRTs0QkFDeEIsSUFBTWxGLGFBQWEsR0FBRzNWLGdCQUFnQixDQUNwQ3lNLFdBQVcsQ0FBQ25KLE9BQU8sQ0FBQ3NQLFFBQVEsRUFBRXRQLE9BQU8sQ0FBQzFCLEtBQUssRUFBRWdVLE9BQU8sQ0FBQyxDQUNyRGtGLEtBQUssQ0FBQyxVQUFVQyxNQUFXLEVBQUU7OEJBQzdCbkssYUFBYSxDQUFDclEsSUFBSSxDQUFDUCxnQkFBZ0IsQ0FBQ0ksU0FBUyxFQUFFLENBQUM7OEJBQ2hEdUwsR0FBRyxDQUFDcVAsS0FBSyxDQUFDLHNEQUFzRCxFQUFFRCxNQUFNLENBQUM7OEJBQ3pFSixnQkFBZ0IsQ0FBQ3JYLE9BQU8sQ0FBQ3NQLFFBQVEsQ0FBQyxHQUFHK0gsZ0JBQWdCLENBQUNyWCxPQUFPLENBQUNzUCxRQUFRLENBQUMsR0FBRyxDQUFDOzhCQUMzRSxPQUFPWSxPQUFPLENBQUN5SCxNQUFNLENBQUM7Z0NBQUVDLG1CQUFtQixFQUFFOzhCQUFLLENBQUMsQ0FBQzs0QkFDckQsQ0FBQyxDQUFDOzRCQUVILElBQU1DLCtCQUFvRSxHQUFHOzhCQUM1RXpLLFdBQVcsRUFBWEEsV0FBVzs4QkFDWGlGLGFBQWEsRUFBYkEsYUFBYTs4QkFDYlYsY0FBYyxFQUFFdEMsdUJBQXVCLENBQUNyUCxPQUFPLENBQUNzUCxRQUFRLENBQUM7OEJBQ3pEbEYsU0FBUyxFQUFUQSxTQUFTOzhCQUNUa0ksT0FBTyxFQUFQQSxPQUFPOzhCQUNQN0ssR0FBRyxFQUFFekgsT0FBTyxDQUFDc1AsUUFBUTs4QkFDckIzUCxpQkFBaUIsRUFBakJBLGlCQUFpQjs4QkFDakJULFVBQVUsRUFBVkEsVUFBVTs4QkFDVnhDLGdCQUFnQixFQUFoQkEsZ0JBQWdCOzhCQUNoQjZWLGdDQUFnQyxFQUFoQ0E7NEJBQ0QsQ0FBQzs0QkFDRDZFLGdCQUFnQixDQUFDbmEsSUFBSSxDQUNwQi9CLGNBQWMsQ0FBQ2lYLDhDQUE4QyxDQUFDMEYsK0JBQStCLENBQUMsQ0FDOUY7NEJBQUM7MEJBQ0gsQ0FBQzs0QkFBQTswQkFBQTt3QkFBQSxFQUFDO3NCQUNILENBQUMsQ0FBQztzQkFBQyx1QkFFSTNILE9BQU8sQ0FDWnlFLFVBQVUsQ0FBQ3lDLGdCQUFnQixDQUFDLENBQzVCN0YsSUFBSTt3QkFBQSxJQUFtQjswQkFDdkJlLE9BQU8sMkJBQTJCOzBCQUNsQyxJQUFNd0YsZ0JBQWdCLEdBQUcsRUFBRTswQkFDM0IsSUFBTUMseUJBQThCLEdBQUc1VSxNQUFNLENBQUNtRyxNQUFNLENBQUNpSixnQ0FBZ0MsQ0FBQzswQkFDdEYsSUFBTXlGLG1CQUEwQixHQUFHN1UsTUFBTSxDQUFDQyxJQUFJLENBQUNtUCxnQ0FBZ0MsQ0FBQzswQkFFaEZ3Rix5QkFBeUIsQ0FBQ3BjLE9BQU8sQ0FBQyxVQUFDK1gsV0FBZ0IsRUFBRW5ZLEtBQVUsRUFBSzs0QkFDbkUsSUFBTTBjLFVBQVUsR0FBR0QsbUJBQW1CLENBQUN6YyxLQUFLLENBQUM7NEJBQzdDLElBQUk4YixnQkFBZ0IsQ0FBQ1ksVUFBVSxDQUFDLEtBQUtYLGtCQUFrQixFQUFFOzhCQUN4RCxJQUFNWSx1QkFBdUIsR0FBRy9VLE1BQU0sQ0FBQ21HLE1BQU0sQ0FBQ29LLFdBQVcsQ0FBQzs4QkFDMUR3RSx1QkFBdUIsQ0FBQ3ZjLE9BQU8sQ0FBQyxVQUFDd2MsR0FBUSxFQUFLO2dDQUM3QyxJQUFRM0gsUUFBUSxHQUEyQzJILEdBQUcsQ0FBdEQzSCxRQUFRO2tDQUFFNVQsUUFBUSxHQUFpQ3ViLEdBQUcsQ0FBNUN2YixRQUFRO2tDQUFFd1gsYUFBYSxHQUFrQitELEdBQUcsQ0FBbEMvRCxhQUFhO2tDQUFFSixXQUFXLEdBQUttRSxHQUFHLENBQW5CbkUsV0FBVztnQ0FDdEQsSUFBTW9FLG9CQUFvQixHQUFHLFlBQVk7a0NBQ3hDLE9BQU81SCxRQUFRO2dDQUNoQixDQUFDO2dDQUNELElBQU02SCw4QkFBOEIsR0FBRyxZQUFZO2tDQUNsRCxPQUFPO29DQUNON0gsUUFBUSxFQUFFNEgsb0JBQW9CLEVBQUU7b0NBQ2hDaEUsYUFBYSxFQUFFQTtrQ0FDaEIsQ0FBQztnQ0FDRixDQUFDO2dDQUVEMEQsZ0JBQWdCLENBQUM3YSxJQUFJO2dDQUNwQjtnQ0FDQW1RLFdBQVcsQ0FBQ3NDLFlBQVksQ0FBQ2dGLGtCQUFrQixDQUMxQ1YsV0FBVyxFQUNYcFgsUUFBUSxFQUNSMFYsT0FBTyxFQUNQK0YsOEJBQThCLENBQzlCLENBQ0Q7OEJBQ0YsQ0FBQyxDQUFDOzRCQUNIOzBCQUNELENBQUMsQ0FBQzswQkFBQzt3QkFDSixDQUFDOzBCQUFBO3dCQUFBO3NCQUFBLEVBQUMsQ0FDRDlHLElBQUksQ0FBQyxZQUFZO3dCQUNqQnJXLGNBQWMsQ0FBQ2lTLDBCQUEwQixDQUFDbk8sTUFBTSxFQUFFeEMsU0FBUyxFQUFFNFEsV0FBVyxFQUFFQyxTQUFTLEVBQUVsRCxRQUFRLEVBQUVtRCxhQUFhLENBQUM7c0JBQzlHLENBQUMsQ0FBQyxDQUNEa0ssS0FBSyxDQUFDLFVBQUNjLENBQU0sRUFBSzt3QkFDbEJwZCxjQUFjLENBQUM2UixXQUFXLENBQUNDLE9BQU8sQ0FBQzt3QkFDbkMsT0FBT2tELE9BQU8sQ0FBQ3lILE1BQU0sQ0FBQ1csQ0FBQyxDQUFDO3NCQUN6QixDQUFDLENBQUM7b0JBQUE7a0JBQ0osQ0FBQztvQkFBQTtrQkFBQTtnQkFBQTtjQUNGLENBQUMsQ0FBQztjQUNGQyxTQUFTLEVBQUUsSUFBSS9CLE1BQU0sQ0FBQztnQkFDckJoUCxJQUFJLEVBQUVULGNBQWMsQ0FBQ0osZ0JBQWdCO2dCQUNyQ2tGLE9BQU8sRUFBRTNRLGNBQWMsQ0FBQ3ViLE9BQU8sQ0FBQytCLHdCQUF3QixDQUFDMVksZUFBZSxDQUFDaEQsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBUTtnQkFDckc2WixLQUFLLEVBQUUsVUFBVUMsTUFBVyxFQUFFO2tCQUM3QixJQUFNdkosU0FBUyxHQUFHdUosTUFBTSxDQUFDL0osU0FBUyxFQUFFLENBQUN4SCxTQUFTLEVBQUU7a0JBQ2hEbkssY0FBYyxDQUFDNlIsV0FBVyxDQUFDTSxTQUFTLENBQUM7Z0JBQ3RDO2NBQ0QsQ0FBQztZQUNGLENBQUMsQ0FBQztZQUNGTCxPQUFPLENBQUNwRCxRQUFRLENBQUNaLGdCQUFnQixFQUFFLFlBQVksQ0FBQztZQUNoRGdFLE9BQU8sQ0FBQ3BELFFBQVEsQ0FBQ0QsS0FBSyxDQUFDO1lBQ3ZCcUQsT0FBTyxDQUFDbkQsaUJBQWlCLENBQUNJLGFBQWEsQ0FBQztZQUN4QyxPQUFPK0MsT0FBTztVQUFDO1FBQUE7TUFDaEIsQ0FBQztRQUFBO01BQUE7SUFBQTtJQUVEeUosT0FBTyxFQUFFO01BQ1JnQyxpQ0FBaUMsRUFBRSxVQUFDQyxNQUFXLEVBQUVsVixRQUFpQixFQUFLO1FBQ3RFLElBQU1tVixRQUFRLEdBQUdELE1BQU0sQ0FBQ0UsTUFBTSxDQUM3QixVQUFDQyxVQUFlLEVBQUVDLEtBQVU7VUFBQSxPQUMzQkMsRUFBRSxDQUNERixVQUFVLEVBQ1ZHLFdBQVcsQ0FBQyxVQUFVLEdBQUdGLEtBQUssQ0FBQ3ZZLFlBQVksR0FBRyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQ3ZFO1FBQUEsR0FDRjBDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FDZjtRQUNELE9BQU9PLFFBQVEsR0FBR21WLFFBQVEsR0FBR00sR0FBRyxDQUFDTixRQUFRLENBQUM7TUFDM0MsQ0FBQztNQUVEakMsOEJBQThCLEVBQUUsVUFBQ3dDLGFBQWtCLEVBQUVSLE1BQWUsRUFBSztRQUN4RSxJQUFNUyxXQUFXLEdBQUdqZSxjQUFjLENBQUN1YixPQUFPLENBQUNnQyxpQ0FBaUMsQ0FBQ0MsTUFBTSxFQUFFLElBQUksQ0FBQztRQUMxRixJQUFNQyxRQUFRLEdBQUdTLE1BQU0sQ0FBQ0QsV0FBVyxFQUFFbFcsUUFBUSxDQUFDaVcsYUFBYSxDQUFDelMsZUFBZSxDQUFDLEVBQUV4RCxRQUFRLENBQUNpVyxhQUFhLENBQUNyUyxZQUFZLENBQUMsQ0FBQztRQUNuSCxPQUFPd1MsaUJBQWlCLENBQUNWLFFBQVEsQ0FBQztNQUNuQyxDQUFDO01BRURILHdCQUF3QixFQUFFLFVBQUNFLE1BQVcsRUFBRWxWLFFBQWlCLEVBQUs7UUFDN0QsT0FBTzZWLGlCQUFpQixDQUFDbmUsY0FBYyxDQUFDdWIsT0FBTyxDQUFDZ0MsaUNBQWlDLENBQUNDLE1BQU0sRUFBRWxWLFFBQVEsQ0FBQyxDQUFDO01BQ3JHO0lBQ0Q7RUFDRCxDQUFDO0VBQUMsT0FFYXRJLGNBQWM7QUFBQSJ9
|
|
5
|
+
sap.ui.define(["sap/base/Log","sap/fe/core/CommonUtils","sap/fe/core/helpers/BindingToolkit","sap/fe/core/library","sap/fe/core/TemplateModel","sap/fe/core/templating/DataModelPathHelper","sap/fe/core/templating/PropertyHelper","sap/fe/macros/field/FieldHelper","sap/fe/macros/field/FieldTemplating","sap/fe/macros/table/TableHelper","sap/m/Button","sap/m/Dialog","sap/m/MessageToast","sap/ui/core/Core","sap/ui/core/Fragment","sap/ui/core/util/XMLPreprocessor","sap/ui/core/XMLTemplateProcessor","sap/ui/mdc/enum/EditMode","sap/ui/model/json/JSONModel","../controllerextensions/messageHandler/messageHandling","../controls/Any","../converters/MetaModelConverter","../templating/FieldControlHelper","../templating/UIFormatters","./SideEffectsHelper"],function(e,t,n,o,a,i,r,s,l,u,c,d,p,f,g,y,P,h,v,x,E,m,T,b,O){"use strict";var M=b.isMultiValueField;var C=b.getRequiredExpression;var F=b.getEditMode;var V=T.isReadOnlyExpression;var D=m.getInvolvedDataModelObjects;var S=m.convertMetaModelContext;var $=l.setEditStyleProperties;var B=l.getTextBinding;var k=r.hasValueHelpWithFixedValues;var I=r.hasValueHelp;var j=r.hasUnit;var A=r.hasCurrency;var _=r.getAssociatedUnitPropertyPath;var w=r.getAssociatedUnitProperty;var H=i.getRelativePaths;var R=i.enhanceDataModelPath;var L=n.pathInModel;var U=n.or;var N=n.not;var G=n.ifElse;var q=n.constant;var Q=n.compileExpression;const K={initLastLevelOfPropertyPath:function(e,t){let n;let o=0;const a=e.split("/");let i="";a.forEach(function(a){if(!t[a]&&o===0){t[a]={};n=t[a];i=i+a;o++}else if(!n[a]){i=`${i}/${a}`;if(i!==e){n[a]={};n=n[a]}else{n[a]=[]}}});return n},getUniqueValues:function(e,t,n){return e!=undefined&&e!=null?n.indexOf(e)===t:undefined},getValueForMultiLevelPath:function(e,t){let n;if(e&&e.indexOf("/")>0){const o=e.split("/");o.forEach(function(e){n=t&&t[e]?t[e]:n&&n[e]})}return n},getDefaultSelectionPathComboBox:function(e,t){let n;if(t&&e.length>0){const o=e,a=[];o.forEach(function(e){const n=e.getObject();const o=t.indexOf("/")>-1&&n.hasOwnProperty(t.split("/")[0]);if(e&&(n.hasOwnProperty(t)||o)){a.push(e.getObject(t))}});const i=a.filter(K.getUniqueValues);if(i.length>1){n=`Default/${t}`}else if(i.length===0){n=`Empty/${t}`}else if(i.length===1){n=`${t}/${i[0]}`}}return n},getHiddenValueForContexts:function(e,t){if(e&&e.$Path){return!t.some(function(t){return t.getObject(e.$Path)===false})}return e},getInputType:function(e,t,n){const o={};let a;if(e){$(o,t,n,true);a=(o===null||o===void 0?void 0:o.editStyle)||""}const i=a&&["DatePicker","TimePicker","DateTimePicker","RatingIndicator"].indexOf(a)===-1&&!M(n)&&!k(e);return(i||"")&&a},getIsFieldGrp:function(e){return e&&e.$Type==="com.sap.vocabularies.UI.v1.DataFieldForAnnotation"&&e.Target&&e.Target.value&&e.Target.value.indexOf("FieldGroup")>-1},getTextPath:function(e,t,n){let o;if(t&&(t.path||t.parameters&&t.parameters.length)&&e){if(t.path&&n==="Description"){o=t.path}else if(t.parameters){t.parameters.forEach(function(t){if(t.path&&t.path!==e){o=t.path}})}}return o},prepareDataForDialog:function(e,n,o){const a=e&&e.getModel().getMetaModel(),i=e.data("metaPath"),r=K.getTableFields(e),s=a.getContext(`${i}/@`),l=a.getContext(i),u=D(s);const c=new v;let d;let p;let f;let g;let y;let P;r.forEach(function(e){const r=e.dataProperty;if(r){var s,c,v,x,E,m,T;let b=r&&a.getObject(`${i}/${r}@`);p=e.label||b&&b["@com.sap.vocabularies.Common.v1.Label"]||r;if(u){u.targetObject=u.targetEntityType.entityProperties.filter(function(e){return e.name===r})}u.targetObject=u.targetObject[0]||{};P=B(u,{},true)||{};const O=a.getContext(e.annotationPath),M=S(O),$=a.getContext(`${i}/${r}@`),k=$&&$.getInterface();let L=D(O,l);if((M===null||M===void 0?void 0:(s=M.Value)===null||s===void 0?void 0:(c=s.path)===null||c===void 0?void 0:c.length)>0){L=R(L,r)}const U=K.getHiddenValueForContexts(O&&O.getObject()["@com.sap.vocabularies.UI.v1.Hidden"],n)||false;const N=b&&b["@com.sap.vocabularies.UI.v1.IsImageURL"];k.context={getModel:function(){return k.getModel()},getPath:function(){return`${i}/${r}`}};b=M._type==="Property"?M:M&&M.Value&&M.Value.$target||M&&M.Target&&M.Target.$target;const G=b&&b.term&&b.term==="com.sap.vocabularies.UI.v1.Chart";const Q=!!M.Action;const X=K.getIsFieldGrp(M);if(N||U||G||Q||X){return}g=(A(b)||j(b))&&_(b)||"";const z=g&&w(b);f=I(b);y=z&&I(z);const J=(f||y)&&(((v=b)===null||v===void 0?void 0:(x=v.annotations)===null||x===void 0?void 0:(E=x.Common)===null||E===void 0?void 0:E.ValueListRelevantQualifiers)||z&&(z===null||z===void 0?void 0:(m=z.annotations)===null||m===void 0?void 0:(T=m.Common)===null||T===void 0?void 0:T.ValueListRelevantQualifiers));if(J){return}const Y=b&&b.Value?b.Value:b;const W=F(Y,L,false,false,M,q(true));const Z=Object.keys(h);const ee=!!W&&Z.includes(W);const te=!!W&&(ee&&W===h.Editable||!ee);const ne=r.includes("/")&&f;if(!te||ne){return}const oe=K.getInputType(b,M,L);if(oe){const e=H(L);const a=V(b,e);const s=t.computeDisplayMode($.getObject());const l=f?f:false;const u=y&&!g.includes("/")?y:false;const c=g&&!r.includes("/")?g:false;d={label:p,dataProperty:r,isValueHelpEnabled:f?f:false,unitProperty:c,isFieldRequired:C(b,M,true,false,{},L),defaultSelectionPath:r?K.getDefaultSelectionPathComboBox(n,r):false,defaultSelectionUnitPath:g?K.getDefaultSelectionPathComboBox(n,g):false,entitySet:i,display:s,descriptionPath:K.getTextPath(r,P,s),nullable:b.nullable!==undefined?b.nullable:true,isPropertyReadOnly:a!==undefined?a:false,inputType:oe,editMode:te?W:undefined,propertyInfo:{hasVH:l,runtimePath:"fieldsInfo>/values/",relativePath:r,propertyPathForValueHelp:`${i}/${r}`},unitInfo:c&&{hasVH:u,runtimePath:"fieldsInfo>/unitData/",relativePath:c,propertyPathForValueHelp:`${i}/${c}`}};o.push(d)}}});c.setData(o);return c},getTableFields:function(e){const t=e&&e.getColumns()||[];const n=e&&e.getParent().getTableDefinition().columns;return t.map(function(e){const t=e&&e.getDataProperty(),o=n&&n.filter(function(e){return e.name===t&&e.type==="Annotation"});return{dataProperty:t,label:e.getHeader(),annotationPath:o&&o[0]&&o[0].annotationPath}})},getDefaultTextsForDialog:function(e,t,n){const o=n.data("displayModePropertyBinding")==="true";return{keepExistingPrefix:"< Keep",leaveBlankValue:"< Leave Blank >",clearFieldValue:"< Clear Values >",massEditTitle:e.getText("C_MASS_EDIT_DIALOG_TITLE",t.toString()),applyButtonText:o?e.getText("C_MASS_EDIT_SAVE_BUTTON_TEXT"):e.getText("C_MASS_EDIT_APPLY_BUTTON_TEXT"),useValueHelpValue:"< Use Value Help >",cancelButtonText:e.getText("C_COMMON_OBJECT_PAGE_CANCEL"),noFields:e.getText("C_MASS_EDIT_NO_EDITABLE_FIELDS"),okButtonText:e.getText("C_COMMON_DIALOG_OK")}},setDefaultValuesToDialog:function(e,t,n,o){const a=o?n.unitProperty:n.dataProperty,i=n.inputType,r=n.isFieldRequired;const s="Values";e.defaultOptions=e.defaultOptions||[];const l=e.selectOptions&&e.selectOptions.length>0;const u={text:`${t.keepExistingPrefix} ${s} >`,key:`Default/${a}`};if(i==="CheckBox"){const t={text:"No",key:`${a}/false`,textInfo:{value:false}};const n={text:"Yes",key:`${a}/true`,textInfo:{value:true}};e.unshift(t);e.defaultOptions.unshift(t);e.unshift(n);e.defaultOptions.unshift(n);e.unshift(u);e.defaultOptions.unshift(u)}else{var c,d;if(n!==null&&n!==void 0&&(c=n.propertyInfo)!==null&&c!==void 0&&c.hasVH||n!==null&&n!==void 0&&(d=n.unitInfo)!==null&&d!==void 0&&d.hasVH&&o){const n={text:t.useValueHelpValue,key:`UseValueHelpValue/${a}`};e.unshift(n);e.defaultOptions.unshift(n)}if(l){if(r!=="true"&&!o){const n={text:t.clearFieldValue,key:`ClearFieldValue/${a}`};e.unshift(n);e.defaultOptions.unshift(n)}e.unshift(u);e.defaultOptions.unshift(u)}else{const n={text:t.leaveBlankValue,key:`Default/${a}`};e.unshift(n);e.defaultOptions.unshift(n)}}},getTextArrangementInfo:function(t,n,o,a){let i=a.getObject(t),r,s;if(n&&t){switch(o){case"Description":r=a.getObject(n)||"";s=r;break;case"Value":i=a.getObject(t)||"";s=i;break;case"ValueDescription":i=a.getObject(t)||"";r=a.getObject(n)||"";s=r?`${i} (${r})`:i;break;case"DescriptionValue":i=a.getObject(t)||"";r=a.getObject(n)||"";s=r?`${r} (${i})`:i;break;default:e.info(`Display Property not applicable: ${t}`);break}}return{textArrangement:o,valuePath:t,descriptionPath:n,value:i,description:r,fullText:s}},isEditable:function(e){const t=e.getBinding("any");const n=t.getExternalValue();return n===h.Editable},onContextEditableChange:function(e,t){const n=e.getProperty(`/values/${t}/objectsForVisibility`)||[];const o=n.some(K.isEditable);if(o){e.setProperty(`/values/${t}/visible`,o)}},updateOnContextChange:function(e,t,n,o){const a=e.getBinding("any");o.objectsForVisibility=o.objectsForVisibility||[];o.objectsForVisibility.push(e);a===null||a===void 0?void 0:a.attachChange(K.onContextEditableChange.bind(null,t,n))},getBoundObject:function(e,t){const n=new E({any:e});const o=t.getModel();n.setModel(o);n.setBindingContext(t);return n},getFieldVisiblity:function(e,t,n,o,a){const i=K.getBoundObject(e,a);const r=K.isEditable(i);if(!r){K.updateOnContextChange(i,t,n,o)}return r},setRuntimeModelOnDialog:function(e,t,n,o){const a=[];const i=[];const r=[];const s=[];const l=[];const u={values:a,unitData:i,results:r,readablePropertyData:l,selectedKey:undefined,textPaths:s,noFields:n.noFields};const c=new v(u);t.forEach(function(t){let n;let r;let l;const u={};const c={};if(t.dataProperty&&t.dataProperty.indexOf("/")>-1){const o=K.initLastLevelOfPropertyPath(t.dataProperty,a);const i=t.dataProperty.split("/");for(const a of e){const e=a.getObject(t.dataProperty);r=`${t.dataProperty}/${e}`;if(!u[r]&&o[i[i.length-1]]){n=K.getTextArrangementInfo(t.dataProperty,t.descriptionPath,t.display,a);o[i[i.length-1]].push({text:n&&n.fullText||e,key:r,textInfo:n});u[r]=e}}o[i[i.length-1]].textInfo={descriptionPath:t.descriptionPath,valuePath:t.dataProperty,displayMode:t.display}}else{a[t.dataProperty]=a[t.dataProperty]||[];a[t.dataProperty]["selectOptions"]=a[t.dataProperty]["selectOptions"]||[];if(t.unitProperty){i[t.unitProperty]=i[t.unitProperty]||[];i[t.unitProperty]["selectOptions"]=i[t.unitProperty]["selectOptions"]||[]}for(const o of e){const e=o.getObject();r=`${t.dataProperty}/${e[t.dataProperty]}`;if(t.dataProperty&&e[t.dataProperty]&&!u[r]){if(t.inputType!="CheckBox"){n=K.getTextArrangementInfo(t.dataProperty,t.descriptionPath,t.display,o);const i={text:n&&n.fullText||e[t.dataProperty],key:r,textInfo:n};a[t.dataProperty].push(i);a[t.dataProperty]["selectOptions"].push(i)}u[r]=e[t.dataProperty]}if(t.unitProperty&&e[t.unitProperty]){l=`${t.unitProperty}/${e[t.unitProperty]}`;if(!c[l]){if(t.inputType!="CheckBox"){n=K.getTextArrangementInfo(t.unitProperty,t.descriptionPath,t.display,o);const a={text:n&&n.fullText||e[t.unitProperty],key:l,textInfo:n};i[t.unitProperty].push(a);i[t.unitProperty]["selectOptions"].push(a)}c[l]=e[t.unitProperty]}}}a[t.dataProperty].textInfo={descriptionPath:t.descriptionPath,valuePath:t.dataProperty,displayMode:t.display};if(Object.keys(u).length===1){o.setProperty(t.dataProperty,r&&u[r])}if(Object.keys(c).length===1){o.setProperty(t.unitProperty,l&&c[l])}}s[t.dataProperty]=t.descriptionPath?[t.descriptionPath]:[]});t.forEach(function(t){let o={};if(t.dataProperty.indexOf("/")>-1){const e=K.getValueForMultiLevelPath(t.dataProperty,a);if(!e){e.push({text:n.leaveBlankValue,key:`Empty/${t.dataProperty}`})}else{K.setDefaultValuesToDialog(e,n,t)}o=e}else if(a[t.dataProperty]){a[t.dataProperty]=a[t.dataProperty]||[];K.setDefaultValuesToDialog(a[t.dataProperty],n,t);o=a[t.dataProperty]}if(i[t.unitProperty]&&i[t.unitProperty].length){K.setDefaultValuesToDialog(i[t.unitProperty],n,t,true);i[t.unitProperty].textInfo={};i[t.unitProperty].selectedKey=K.getDefaultSelectionPathComboBox(e,t.unitProperty);i[t.unitProperty].inputType=t.inputType}else if(t.dataProperty&&a[t.dataProperty]&&!a[t.dataProperty].length||t.unitProperty&&i[t.unitProperty]&&!i[t.unitProperty].length){const o=a[t.dataProperty]&&a[t.dataProperty].some(function(e){return e.text==="< Clear Values >"||e.text==="< Leave Blank >"});if(t.dataProperty&&!o){a[t.dataProperty].push({text:n.leaveBlankValue,key:`Empty/${t.dataProperty}`})}const r=i[t.unitProperty]&&i[t.unitProperty].some(function(e){return e.text==="< Clear Values >"||e.text==="< Leave Blank >"});if(t.unitProperty){if(!r){i[t.unitProperty].push({text:n.leaveBlankValue,key:`Empty/${t.unitProperty}`})}i[t.unitProperty].textInfo={};i[t.unitProperty].selectedKey=K.getDefaultSelectionPathComboBox(e,t.unitProperty);i[t.unitProperty].inputType=t.inputType}}if(t.isPropertyReadOnly&&typeof t.isPropertyReadOnly==="boolean"){l.push({property:t.dataProperty,value:t.isPropertyReadOnly,type:"Default"})}else if(t.isPropertyReadOnly&&t.isPropertyReadOnly.operands&&t.isPropertyReadOnly.operands[0]&&t.isPropertyReadOnly.operands[0].operand1&&t.isPropertyReadOnly.operands[0].operand2){l.push({property:t.dataProperty,propertyPath:t.isPropertyReadOnly.operands[0].operand1.path,propertyValue:t.isPropertyReadOnly.operands[0].operand2.value,type:"Path"})}if(t.editMode){o.visible=t.editMode===h.Editable||e.some(K.getFieldVisiblity.bind(K,t.editMode,c,t.dataProperty,o))}else{o.visible=true}o.selectedKey=K.getDefaultSelectionPathComboBox(e,t.dataProperty);o.inputType=t.inputType;o.unitProperty=t.unitProperty});return c},getDialogContext:function(e,t){let n=t&&t.getBindingContext();if(!n){const t=e.getModel();const o=e.getRowBinding();const a=t.bindList(o.getPath(),o.getContext(),[],[],{$$updateGroupId:"submitLater"});a.refreshInternal=function(){};n=a.create({},true)}return n},onDialogOpen:function(e){const t=e.getSource();const n=t.getModel("fieldsInfo");n.setProperty("/isOpen",true)},closeDialog:function(e){e.close();e.destroy()},messageHandlingForMassEdit:async function(e,t,n,a,i,r){var s,l,u,c;const d=o.DraftStatus;const g=f.getLibraryResourceBundle("sap.fe.core");(s=n.getView())===null||s===void 0?void 0:(l=s.getBindingContext("internal"))===null||l===void 0?void 0:l.setProperty("getBoundMessagesForMassEdit",true);n._editFlow.getMessageHandler().showMessages({onBeforeShowMessage:function(o,a){a.fnGetMessageSubtitle=x.setMessageSubtitle.bind({},e,t);const s=[];o.forEach(function(e){if(!e.getTarget()){s.push(e)}});if(i.length>0&&r.length===0){n._editFlow.setDraftStatus(d.Saved);const e=g.getText("C_MASS_EDIT_SUCCESS_TOAST");p.show(e)}else if(r.length<e.getSelectedContexts().length){n._editFlow.setDraftStatus(d.Saved)}else if(r.length===e.getSelectedContexts().length){n._editFlow.setDraftStatus(d.Clear)}if(n.getModel("ui").getProperty("/isEditable")&&s.length===0){a.showMessageBox=false;a.showMessageDialog=false}return a}});if(a.isOpen()){var y,P;K.closeDialog(a);(y=n.getView())===null||y===void 0?void 0:(P=y.getBindingContext("internal"))===null||P===void 0?void 0:P.setProperty("skipPatchHandlers",false)}(u=n.getView())===null||u===void 0?void 0:(c=u.getBindingContext("internal"))===null||c===void 0?void 0:c.setProperty("getBoundMessagesForMassEdit",false)},getSideEffectDataForKey:function(e,t,n,o){const a=e.getProperty("$Type");const i={};o.forEach(e=>{const o=e.keyValue;const r=s.getSideEffectsOnEntityAndProperty(o,a,t);i[o]=n._sideEffects.getSideEffectsMapForFieldGroups(r)});return i},fnGetPathForSourceProperty:function(e,t,n){const o=e.indexOf("/")>0?"/"+t+"/"+e.substr(0,e.lastIndexOf("/")+1)+"@sapui.name":false,a=!o?Promise.resolve(t):n.requestObject(o);e=o?e.substr(e.lastIndexOf("/")+1):e;return{sPath:e,pOwnerEntity:a,sNavigationPath:o}},fnGetEntityTypeOfOwner:function(e,t,n,o,a){const i=n.getProperty("$Type");const{$Type:r,$Partner:s}=e.getObject(`${n}/${t}`);if(s){const t=e.getObject(`/${r}/${s}`);if(t){const e=t["$Type"];if(e!==i){a.push(o)}}}else{a.push(o)}return a},fnGetTargetsForMassEdit:function(e,t,n,o){const{TargetProperties:a,TargetEntities:i}=e;const r=[];let s=[];const l=t.getProperty("$Type");if(n===l){i===null||i===void 0?void 0:i.forEach(e=>{e=e["$NavigationPropertyPath"];let n;if(e.includes("/")){n=e.split("/")[0]}else{n=e}s=K.fnGetEntityTypeOfOwner(o,n,t,e,s)})}if(a.length){a.forEach(e=>{const{pOwnerEntity:a}=K.fnGetPathForSourceProperty(e,n,o);r.push(a.then(n=>{if(n===l){s.push(e)}else if(e.includes("/")){const n=e.split("/")[0];s=K.fnGetEntityTypeOfOwner(o,n,t,e,s)}return Promise.resolve(s)}))})}else{r.push(Promise.resolve(s))}return Promise.all(r)},checkIfEntityExistsAsTargetEntity:(e,t)=>{const n=t.getProperty("$Type");const o=Object.values(e).filter(e=>e.name.indexOf(n)==-1);const a=t.getPath().split("/").pop();const i=o.filter(e=>{const t=e.sideEffects.TargetEntities;return t!==null&&t!==void 0&&t.filter(e=>e["$NavigationPropertyPath"]===a).length?e:false});return i.length},handleMassEditFieldUpdateAndRequestSideEffects:async function(e){const{oController:n,oFieldPromise:o,sideEffectsMap:a,textPaths:i,groupId:r,key:s,oEntitySetContext:l,oMetaModel:c,oSelectedContext:d,deferredTargetsForAQualifiedName:p}=e;const f=[o];const g=l.getProperty("$Type");const y=t.getAppComponent(n.getView());const P=y.getSideEffectsService();const h=K.checkIfEntityExistsAsTargetEntity(a,l);if(a){const e=Object.keys(a);const t=Object.values(a);const o={};p[s]={};for(const[a,i]of t.entries()){const t=e[a];const y=t.split("#")[0];const P=n._sideEffects.getContextForSideEffects(d,y);i.context=P;const v=n._sideEffects.getRegisteredFailedRequests();const x=v[P.getPath()];n._sideEffects.unregisterFailedSideEffectsForAContext(P);let E=[i.sideEffects];E=x&&x.length?E.concat(x):E;o[P]={};for(const e of E){if(!o[P].hasOwnProperty(e.fullyQualifiedName)){o[P][e.fullyQualifiedName]=true;let t=[],a=[],i;const d=async function(e){const{TargetProperties:n,TargetEntities:o}=e;const r=e.fullyQualifiedName.split("@")[0];const d=await K.fnGetTargetsForMassEdit(e,l,r,c);t=d[0];a=(n||[]).concat(o||[]);const f=e.TriggerAction;const y=a.filter(e=>!t.includes(e));p[s][e.fullyQualifiedName]={aTargets:y,oContext:P,mSideEffect:e};if(f&&r===g){const t=u._isStaticAction(c.getObject(`/${f}`),f);if(!t){i=f}else{p[s][e.fullyQualifiedName]["TriggerAction"]=f}}else{p[s][e.fullyQualifiedName]["TriggerAction"]=f}if(h){t=[]}return{aTargets:t,TriggerAction:i}};f.push(n._sideEffects.requestSideEffects(e,P,r,d))}}}}if(i!==null&&i!==void 0&&i[s]&&i[s].length){f.push(P.requestSideEffects(i[s],d,r))}return Promise.allSettled(f)},createDialog:async function(t,n,o){const i="sap/fe/core/controls/massEdit/MassEditDialog",r=[],s=f.getLibraryResourceBundle("sap.fe.core"),l=K.getDefaultTextsForDialog(s,n.length,t),u=K.prepareDataForDialog(t,n,r),p=K.getDialogContext(t),h=K.setRuntimeModelOnDialog(n,r,l,p),v=t.getModel(),E=v.getMetaModel(),m=new a(u.getData(),E);const T=P.loadTemplate(i,"fragment");const b=await Promise.resolve(y.process(T,{name:i},{bindingContexts:{dataFieldModel:m.createBindingContext("/"),metaModel:E.createBindingContext("/"),contextPath:E.createBindingContext(E.getMetaPath(p.getPath()))},models:{dataFieldModel:m,metaModel:E,contextPath:E}}));const M=await g.load({definition:b});const C=new d({resizable:true,title:l.massEditTitle,content:[M],afterOpen:K.onDialogOpen,beginButton:new c({text:K.helpers.getExpBindingForApplyButtonTxt(l,u.getObject("/")),type:"Emphasized",press:async function(a){var i,r;x.removeBoundTransitionMessages();x.removeUnboundTransitionMessages();(i=o.getView())===null||i===void 0?void 0:(r=i.getBindingContext("internal"))===null||r===void 0?void 0:r.setProperty("skipPatchHandlers",true);const s=a.getSource().getParent();const l=s.getModel("fieldsInfo");const u=l.getProperty("/results");const c=t&&t.getModel().getMetaModel(),d=t.data("metaPath"),p=c.getContext(d);const f=await O.generateSideEffectsMapFromMetaModel(c);const g=[];const y=l.getProperty("/textPaths");const P=l.getProperty("/readablePropertyData");let h;let v;const E=[];const m={};const T=n.length;const b={};const M=K.getSideEffectDataForKey(p,f,o,u);n.forEach(function(t,n){v=[];u.forEach(async function(a){if(!m.hasOwnProperty(a.keyValue)){m[a.keyValue]=0}if(M[a.keyValue]){v[a.keyValue]=M[a.keyValue]}if(P){P.some(function(e){if(a.keyValue===e.property){if(e.type==="Default"){return e.value===true}else if(e.type==="Path"&&e.propertyValue&&e.propertyPath){return t.getObject(e.propertyPath)===e.propertyValue}}})}h=`$auto.${n}`;const i=t.setProperty(a.keyValue,a.value,h).catch(function(n){g.push(t.getObject());e.error("Mass Edit: Something went wrong in updating entries.",n);m[a.keyValue]=m[a.keyValue]+1;return Promise.reject({isFieldUpdateFailed:true})});const r={oController:o,oFieldPromise:i,sideEffectsMap:M[a.keyValue],textPaths:y,groupId:h,key:a.keyValue,oEntitySetContext:p,oMetaModel:c,oSelectedContext:t,deferredTargetsForAQualifiedName:b};E.push(K.handleMassEditFieldUpdateAndRequestSideEffects(r))})});await Promise.allSettled(E).then(async function(){h=`$auto.massEditDeferred`;const e=[];const t=Object.values(b);const n=Object.keys(b);t.forEach((t,a)=>{const i=n[a];if(m[i]!==T){const n=Object.values(t);n.forEach(t=>{const{aTargets:n,oContext:a,TriggerAction:i,mSideEffect:r}=t;const s=function(){return n};const l=function(){return{aTargets:s(),TriggerAction:i}};e.push(o._sideEffects.requestSideEffects(r,a,h,l))})}})}).then(function(){K.messageHandlingForMassEdit(t,n,o,s,u,g)}).catch(e=>{K.closeDialog(C);return Promise.reject(e)})}}),endButton:new c({text:l.cancelButtonText,visible:K.helpers.hasEditableFieldsBinding(u.getObject("/"),true),press:function(e){const t=e.getSource().getParent();K.closeDialog(t)}})});C.setModel(h,"fieldsInfo");C.setModel(v);C.setBindingContext(p);return C},helpers:{getBindingExpForHasEditableFields:(e,t)=>{const n=e.reduce((e,t)=>U(e,L("/values/"+t.dataProperty+"/visible","fieldsInfo")),q(false));return t?n:N(n)},getExpBindingForApplyButtonTxt:(e,t)=>{const n=K.helpers.getBindingExpForHasEditableFields(t,true);const o=G(n,q(e.applyButtonText),q(e.okButtonText));return Q(o)},hasEditableFieldsBinding:(e,t)=>Q(K.helpers.getBindingExpForHasEditableFields(e,t))}};return K},false);
|
|
6
|
+
//# sourceMappingURL=MassEditHelper.js.map
|