@sapui5/sap.fe.core 1.100.0 → 1.102.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -4
- package/src/sap/fe/core/.library +2 -3
- package/src/sap/fe/core/AppComponent.js +23 -30
- package/src/sap/fe/core/AppComponent.ts +35 -40
- package/src/sap/fe/core/AppStateHandler.js +8 -8
- package/src/sap/fe/core/AppStateHandler.ts +11 -11
- package/src/sap/fe/core/BaseController.js +9 -9
- package/src/sap/fe/core/BaseController.ts +3 -4
- package/src/sap/fe/core/CommonUtils.js +122 -101
- package/src/sap/fe/core/CommonUtils.ts +239 -193
- package/src/sap/fe/core/ExtensionAPI.js +12 -13
- package/src/sap/fe/core/ExtensionAPI.ts +21 -31
- package/src/sap/fe/core/PageController.js +19 -13
- package/src/sap/fe/core/PageController.ts +40 -34
- package/src/sap/fe/core/TemplateComponent.js +198 -123
- package/src/sap/fe/core/TemplateComponent.ts +109 -121
- package/src/sap/fe/core/TemplateModel.js +7 -9
- package/src/sap/fe/core/TemplateModel.ts +3 -3
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +60 -0
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +37 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +165 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +178 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +935 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +837 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +436 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +431 -0
- package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
- package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
- package/src/sap/fe/core/controllerextensions/EditFlow.js +660 -288
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +513 -331
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +11 -11
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +6 -7
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +43 -25
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +132 -103
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +16 -16
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +64 -55
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +166 -99
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +187 -149
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +14 -14
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +12 -11
- package/src/sap/fe/core/controllerextensions/MassEdit.js +13 -12
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +22 -22
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +14 -26
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +20 -30
- package/src/sap/fe/core/controllerextensions/PageReady.js +25 -23
- package/src/sap/fe/core/controllerextensions/PageReady.ts +49 -47
- package/src/sap/fe/core/controllerextensions/Paginator.js +24 -15
- package/src/sap/fe/core/controllerextensions/Paginator.ts +35 -20
- package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -10
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +11 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +34 -16
- package/src/sap/fe/core/controllerextensions/Share.ts +50 -32
- package/src/sap/fe/core/controllerextensions/SideEffects.js +15 -15
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +64 -65
- package/src/sap/fe/core/controllerextensions/ViewState.js +27 -31
- package/src/sap/fe/core/controllerextensions/ViewState.ts +103 -102
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +98 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +90 -132
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +146 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +18 -8
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +264 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +35 -33
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +100 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1584 -0
- package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +190 -159
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +780 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +329 -76
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1149 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +169 -97
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +190 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/sticky.ts +76 -12
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +592 -0
- package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +83 -60
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +940 -0
- package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +52 -36
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
- package/src/sap/fe/core/controls/Any.js +28 -0
- package/src/sap/fe/core/controls/Any.ts +30 -0
- package/src/sap/fe/core/controls/CommandExecution.js +50 -16
- package/src/sap/fe/core/controls/CommandExecution.ts +31 -22
- package/src/sap/fe/core/controls/ConditionalWrapper.js +136 -65
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +49 -58
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +371 -0
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +282 -0
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +74 -36
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +23 -32
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +52 -5
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +127 -67
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +127 -67
- package/src/sap/fe/core/controls/FieldWrapper.js +171 -87
- package/src/sap/fe/core/controls/FieldWrapper.ts +69 -80
- package/src/sap/fe/core/controls/FileWrapper.js +360 -0
- package/src/sap/fe/core/controls/FileWrapper.ts +202 -0
- package/src/sap/fe/core/controls/FilterBar.js +154 -119
- package/src/sap/fe/core/controls/FilterBar.ts +128 -123
- package/src/sap/fe/core/controls/FormElementWrapper.js +102 -37
- package/src/sap/fe/core/controls/FormElementWrapper.ts +43 -35
- package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
- package/src/sap/fe/core/controls/MassEditSelect.ts +45 -0
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +111 -89
- package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +86 -82
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -193
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +211 -204
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +152 -116
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +105 -105
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +2 -2
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +23 -28
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +41 -81
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +550 -35
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +604 -35
- package/src/sap/fe/core/converters/ManifestSettings.js +3 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +9 -2
- package/src/sap/fe/core/converters/MetaModelConverter.js +11 -40
- package/src/sap/fe/core/converters/MetaModelConverter.ts +56 -84
- package/src/sap/fe/core/converters/annotations/DataField.js +20 -5
- package/src/sap/fe/core/converters/annotations/DataField.ts +27 -6
- package/src/sap/fe/core/converters/controls/Common/Action.js +14 -21
- package/src/sap/fe/core/converters/controls/Common/Action.ts +23 -28
- package/src/sap/fe/core/converters/controls/Common/Chart.js +17 -10
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -14
- package/src/sap/fe/core/converters/controls/Common/Form.js +16 -18
- package/src/sap/fe/core/converters/controls/Common/Form.ts +20 -20
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +2 -3
- package/src/sap/fe/core/converters/controls/Common/Table.js +389 -173
- package/src/sap/fe/core/converters/controls/Common/Table.ts +440 -244
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +26 -16
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +27 -19
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +78 -47
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +146 -107
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +6 -6
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +20 -18
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +30 -25
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +39 -34
- package/src/sap/fe/core/converters/helpers/Aggregation.js +10 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +18 -13
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -2
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +6 -5
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -4
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +27 -24
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +49 -40
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +33 -22
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +77 -62
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +28 -28
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +38 -45
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -3
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +8 -6
- package/src/sap/fe/core/formatters/KPIFormatter.js +3 -12
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -2
- package/src/sap/fe/core/formatters/TableFormatter.js +74 -13
- package/src/sap/fe/core/formatters/TableFormatter.ts +71 -16
- package/src/sap/fe/core/formatters/ValueFormatter.js +4 -4
- package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -7
- package/src/sap/fe/core/fpm/Component.js +46 -17
- package/src/sap/fe/core/fpm/Component.ts +11 -16
- package/src/sap/fe/core/helpers/AppStartupHelper.js +4 -4
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +3 -3
- package/src/sap/fe/core/helpers/BindingExpression.js +10 -7
- package/src/sap/fe/core/helpers/BindingExpression.ts +37 -35
- package/src/sap/fe/core/helpers/ClassSupport.js +273 -256
- package/src/sap/fe/core/helpers/ClassSupport.ts +315 -237
- package/src/sap/fe/core/helpers/FPMHelper.js +3 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +9 -8
- package/src/sap/fe/core/helpers/MassEditHelper.js +522 -147
- package/src/sap/fe/core/helpers/MassEditHelper.ts +563 -236
- package/src/sap/fe/core/helpers/ModelHelper.js +29 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +39 -26
- package/src/sap/fe/core/helpers/PasteHelper.js +4 -4
- package/src/sap/fe/core/helpers/PasteHelper.ts +4 -3
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +3 -3
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +3 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js +5 -7
- package/src/sap/fe/core/helpers/StableIdHelper.ts +8 -8
- package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
- package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.js +35 -5
- package/src/sap/fe/core/jsx-runtime/jsx.ts +22 -8
- package/src/sap/fe/core/library.js +13 -5
- package/src/sap/fe/core/library.ts +26 -17
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +0 -3
- package/src/sap/fe/core/messagebundle.properties +135 -180
- package/src/sap/fe/core/messagebundle_ar.properties +31 -64
- package/src/sap/fe/core/messagebundle_bg.properties +31 -64
- package/src/sap/fe/core/messagebundle_ca.properties +31 -64
- package/src/sap/fe/core/messagebundle_cs.properties +31 -64
- package/src/sap/fe/core/messagebundle_cy.properties +32 -65
- package/src/sap/fe/core/messagebundle_da.properties +31 -64
- package/src/sap/fe/core/messagebundle_de.properties +29 -62
- package/src/sap/fe/core/messagebundle_el.properties +32 -65
- package/src/sap/fe/core/messagebundle_en.properties +32 -65
- package/src/sap/fe/core/messagebundle_en_GB.properties +29 -62
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +41 -74
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +32 -65
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +20 -6
- package/src/sap/fe/core/messagebundle_es.properties +31 -64
- package/src/sap/fe/core/messagebundle_es_MX.properties +31 -64
- package/src/sap/fe/core/messagebundle_et.properties +31 -64
- package/src/sap/fe/core/messagebundle_fi.properties +29 -62
- package/src/sap/fe/core/messagebundle_fr.properties +36 -69
- package/src/sap/fe/core/messagebundle_fr_CA.properties +33 -66
- package/src/sap/fe/core/messagebundle_hi.properties +29 -62
- package/src/sap/fe/core/messagebundle_hr.properties +32 -65
- package/src/sap/fe/core/messagebundle_hu.properties +30 -63
- package/src/sap/fe/core/messagebundle_id.properties +32 -65
- package/src/sap/fe/core/messagebundle_it.properties +31 -64
- package/src/sap/fe/core/messagebundle_iw.properties +31 -64
- package/src/sap/fe/core/messagebundle_ja.properties +29 -62
- package/src/sap/fe/core/messagebundle_kk.properties +31 -64
- package/src/sap/fe/core/messagebundle_ko.properties +31 -64
- package/src/sap/fe/core/messagebundle_lt.properties +31 -64
- package/src/sap/fe/core/messagebundle_lv.properties +32 -65
- package/src/sap/fe/core/messagebundle_ms.properties +31 -64
- package/src/sap/fe/core/messagebundle_nl.properties +31 -64
- package/src/sap/fe/core/messagebundle_no.properties +31 -64
- package/src/sap/fe/core/messagebundle_pl.properties +34 -67
- package/src/sap/fe/core/messagebundle_pt.properties +32 -65
- package/src/sap/fe/core/messagebundle_pt_PT.properties +31 -64
- package/src/sap/fe/core/messagebundle_ro.properties +33 -66
- package/src/sap/fe/core/messagebundle_ru.properties +33 -66
- package/src/sap/fe/core/messagebundle_sh.properties +31 -64
- package/src/sap/fe/core/messagebundle_sk.properties +31 -64
- package/src/sap/fe/core/messagebundle_sl.properties +29 -62
- package/src/sap/fe/core/messagebundle_sv.properties +30 -63
- package/src/sap/fe/core/messagebundle_th.properties +31 -64
- package/src/sap/fe/core/messagebundle_tr.properties +31 -64
- package/src/sap/fe/core/messagebundle_uk.properties +32 -65
- package/src/sap/fe/core/messagebundle_vi.properties +31 -64
- package/src/sap/fe/core/messagebundle_zh_CN.properties +32 -65
- package/src/sap/fe/core/messagebundle_zh_TW.properties +34 -67
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +4 -4
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -2
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +11 -8
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -13
- package/src/sap/fe/core/services/NavigationServiceFactory.js +5 -5
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +9 -5
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +4 -4
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js +105 -66
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +59 -49
- package/src/sap/fe/core/services/ShellServicesFactory.js +104 -29
- package/src/sap/fe/core/services/ShellServicesFactory.ts +64 -30
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -4
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +11 -10
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +38 -51
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +43 -5
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +6 -3
- package/src/sap/fe/core/support/CommonHelper.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.ts +0 -3
- package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -9
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +32 -38
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +23 -3
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +27 -6
- package/src/sap/fe/core/templating/EntitySetHelper.js +1 -9
- package/src/sap/fe/core/templating/EntitySetHelper.ts +11 -13
- package/src/sap/fe/core/templating/FilterHelper.js +4 -4
- package/src/sap/fe/core/templating/FilterHelper.ts +6 -5
- package/src/sap/fe/core/templating/PropertyHelper.js +70 -33
- package/src/sap/fe/core/templating/PropertyHelper.ts +49 -27
- package/src/sap/fe/core/templating/UIFormatters.js +133 -22
- package/src/sap/fe/core/templating/UIFormatters.ts +144 -50
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
- package/src/sap/fe/core/type/Email.js +26 -8
- package/src/sap/fe/core/type/Email.ts +8 -7
- package/src/sap/fe/core/AnnotationHelper.js +0 -312
- package/src/sap/fe/core/AnnotationHelper.ts +0 -315
- package/src/sap/fe/core/RouterProxy.js +0 -926
- package/src/sap/fe/core/TransactionHelper.js +0 -1562
- package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -392
- package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +0 -136
- package/src/sap/fe/core/actions/collaboration/Manage.js +0 -262
- package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +0 -103
- package/src/sap/fe/core/actions/draft.js +0 -523
- package/src/sap/fe/core/actions/messageHandling.js +0 -567
- package/src/sap/fe/core/actions/nonDraft.js +0 -20
- package/src/sap/fe/core/actions/nonDraft.ts +0 -12
- package/src/sap/fe/core/actions/operations.js +0 -1096
- package/src/sap/fe/core/actions/sticky.js +0 -130
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +0 -78
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +0 -65
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/util/
|
|
5
|
+
sap.ui.define(["sap/base/util/merge", "sap/base/util/ObjectPath", "sap/base/util/uid", "sap/ui/base/Metadata", "sap/ui/core/mvc/ControllerMetadata"], function (merge, ObjectPath, uid, Metadata, ControllerMetadata) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
@@ -15,12 +15,22 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/ui/core/ElementMetadata", "sap/u
|
|
|
15
15
|
aggregations: {},
|
|
16
16
|
associations: {},
|
|
17
17
|
methods: {},
|
|
18
|
-
events: {}
|
|
18
|
+
events: {},
|
|
19
|
+
interfaces: []
|
|
19
20
|
}, target.metadata || {});
|
|
20
21
|
return target.metadata;
|
|
21
22
|
};
|
|
23
|
+
/* #region CONTROLLER EXTENSIONS */
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Defines that the following method is an override for the method name with the same name in the specific controller extension or base implementation.
|
|
27
|
+
*
|
|
28
|
+
* @param extensionName The name of the extension that will be overriden
|
|
29
|
+
* @returns The decorated method
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
function methodOverride(extensionName) {
|
|
24
34
|
return function (target, propertyKey) {
|
|
25
35
|
if (!target.override) {
|
|
26
36
|
target.override = {};
|
|
@@ -28,255 +38,300 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/ui/core/ElementMetadata", "sap/u
|
|
|
28
38
|
|
|
29
39
|
var currentTarget = target.override;
|
|
30
40
|
|
|
31
|
-
if (
|
|
41
|
+
if (extensionName) {
|
|
32
42
|
if (!currentTarget.extension) {
|
|
33
43
|
currentTarget.extension = {};
|
|
34
44
|
}
|
|
35
45
|
|
|
36
|
-
if (!currentTarget.extension[
|
|
37
|
-
currentTarget.extension[
|
|
46
|
+
if (!currentTarget.extension[extensionName]) {
|
|
47
|
+
currentTarget.extension[extensionName] = {};
|
|
38
48
|
}
|
|
39
49
|
|
|
40
|
-
currentTarget = currentTarget.extension[
|
|
50
|
+
currentTarget = currentTarget.extension[extensionName];
|
|
41
51
|
}
|
|
42
52
|
|
|
43
|
-
currentTarget[propertyKey] = target[propertyKey];
|
|
53
|
+
currentTarget[propertyKey.toString()] = target[propertyKey.toString()];
|
|
44
54
|
};
|
|
45
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Defines that the method can be extended by other controller extension based on the defined overrideExecutionType.
|
|
58
|
+
*
|
|
59
|
+
* @param overrideExecutionType The OverrideExecution defining when the override should run (Before / After / Instead)
|
|
60
|
+
* @returns The decorated method
|
|
61
|
+
*/
|
|
62
|
+
|
|
46
63
|
|
|
47
|
-
_exports.
|
|
64
|
+
_exports.methodOverride = methodOverride;
|
|
48
65
|
|
|
49
|
-
function
|
|
66
|
+
function extensible(overrideExecutionType) {
|
|
50
67
|
return function (target, propertyKey) {
|
|
51
68
|
var metadata = ensureMetadata(target);
|
|
52
69
|
|
|
53
|
-
if (!metadata.methods[propertyKey]) {
|
|
54
|
-
metadata.methods[propertyKey] = {};
|
|
70
|
+
if (!metadata.methods[propertyKey.toString()]) {
|
|
71
|
+
metadata.methods[propertyKey.toString()] = {};
|
|
55
72
|
}
|
|
56
73
|
|
|
57
|
-
metadata.methods[propertyKey].overrideExecution =
|
|
74
|
+
metadata.methods[propertyKey.toString()].overrideExecution = overrideExecutionType;
|
|
58
75
|
};
|
|
59
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Defines that the method will be publicly available for controller extension usage.
|
|
79
|
+
*
|
|
80
|
+
* @returns The decorated method
|
|
81
|
+
*/
|
|
60
82
|
|
|
61
|
-
_exports.Extensible = Extensible;
|
|
62
|
-
|
|
63
|
-
function Public(target, propertyKey, descriptor) {
|
|
64
|
-
var metadata = ensureMetadata(target);
|
|
65
|
-
descriptor.enumerable = true;
|
|
66
|
-
|
|
67
|
-
if (!metadata.methods[propertyKey]) {
|
|
68
|
-
metadata.methods[propertyKey] = {};
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
metadata.methods[propertyKey].public = true;
|
|
72
|
-
}
|
|
73
83
|
|
|
74
|
-
_exports.
|
|
84
|
+
_exports.extensible = extensible;
|
|
75
85
|
|
|
76
|
-
function
|
|
77
|
-
|
|
78
|
-
|
|
86
|
+
function publicExtension() {
|
|
87
|
+
return function (target, propertyKey, descriptor) {
|
|
88
|
+
var metadata = ensureMetadata(target);
|
|
89
|
+
descriptor.enumerable = true;
|
|
79
90
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
91
|
+
if (!metadata.methods[propertyKey.toString()]) {
|
|
92
|
+
metadata.methods[propertyKey.toString()] = {};
|
|
93
|
+
}
|
|
83
94
|
|
|
84
|
-
|
|
95
|
+
metadata.methods[propertyKey.toString()].public = true;
|
|
96
|
+
};
|
|
85
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Defines that the method will be only available for internal usage of the controller extension.
|
|
100
|
+
*
|
|
101
|
+
* @returns The decorated method
|
|
102
|
+
*/
|
|
86
103
|
|
|
87
|
-
_exports.Private = Private;
|
|
88
104
|
|
|
89
|
-
|
|
90
|
-
var metadata = ensureMetadata(target);
|
|
91
|
-
descriptor.enumerable = true;
|
|
105
|
+
_exports.publicExtension = publicExtension;
|
|
92
106
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
107
|
+
function privateExtension() {
|
|
108
|
+
return function (target, propertyKey, descriptor) {
|
|
109
|
+
var metadata = ensureMetadata(target);
|
|
110
|
+
descriptor.enumerable = true;
|
|
111
|
+
|
|
112
|
+
if (!metadata.methods[propertyKey.toString()]) {
|
|
113
|
+
metadata.methods[propertyKey.toString()] = {};
|
|
114
|
+
}
|
|
96
115
|
|
|
97
|
-
|
|
116
|
+
metadata.methods[propertyKey.toString()].public = false;
|
|
117
|
+
};
|
|
98
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Defines that the method cannot be further extended by other controller extension.
|
|
121
|
+
*
|
|
122
|
+
* @returns The decorated method
|
|
123
|
+
*/
|
|
99
124
|
|
|
100
|
-
_exports.Final = Final;
|
|
101
125
|
|
|
102
|
-
|
|
103
|
-
var metadata = ensureMetadata(target);
|
|
126
|
+
_exports.privateExtension = privateExtension;
|
|
104
127
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
128
|
+
function finalExtension() {
|
|
129
|
+
return function (target, propertyKey, descriptor) {
|
|
130
|
+
var metadata = ensureMetadata(target);
|
|
131
|
+
descriptor.enumerable = true;
|
|
109
132
|
|
|
110
|
-
|
|
133
|
+
if (!metadata.methods[propertyKey.toString()]) {
|
|
134
|
+
metadata.methods[propertyKey.toString()] = {};
|
|
135
|
+
}
|
|
111
136
|
|
|
112
|
-
|
|
113
|
-
target.constructor[propertykey] = function () {
|
|
114
|
-
var currentTarget = target.constructor.getAPI(arguments.length <= 0 ? undefined : arguments[0]);
|
|
115
|
-
currentTarget[propertykey].apply(currentTarget, arguments);
|
|
137
|
+
metadata.methods[propertyKey.toString()].final = true;
|
|
116
138
|
};
|
|
117
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* Defines that we are going to use instantiate a controller extension under the following variable name.
|
|
142
|
+
*
|
|
143
|
+
* @param extensionClass The controller extension that will be instantiated
|
|
144
|
+
* @returns The decorated property
|
|
145
|
+
*/
|
|
118
146
|
|
|
119
|
-
_exports.EventHandler = EventHandler;
|
|
120
|
-
|
|
121
|
-
function MacroContext() {
|
|
122
|
-
var bMetaModelObject = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
123
|
-
return Property({
|
|
124
|
-
type: "sap.ui.model.Context",
|
|
125
|
-
macroContext: true,
|
|
126
|
-
metaModelObject: bMetaModelObject
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
147
|
|
|
130
|
-
_exports.
|
|
148
|
+
_exports.finalExtension = finalExtension;
|
|
131
149
|
|
|
132
|
-
function
|
|
150
|
+
function usingExtension(extensionClass) {
|
|
133
151
|
return function (target, propertyKey, propertyDescriptor) {
|
|
134
152
|
var metadata = ensureMetadata(target);
|
|
135
153
|
delete propertyDescriptor.initializer;
|
|
136
|
-
metadata.controllerExtensions[propertyKey] = extensionClass;
|
|
154
|
+
metadata.controllerExtensions[propertyKey.toString()] = extensionClass;
|
|
137
155
|
return propertyDescriptor;
|
|
138
|
-
};
|
|
156
|
+
}; // This is technically an accessor decorator, but somehow the compiler doesn't like it if i declare it as such.
|
|
139
157
|
}
|
|
158
|
+
/* #endregion */
|
|
140
159
|
|
|
141
|
-
|
|
160
|
+
/* #region CONTROL */
|
|
142
161
|
|
|
143
|
-
|
|
144
|
-
|
|
162
|
+
/**
|
|
163
|
+
* Indicates that the property shall be declared as an event on the control metadata.
|
|
164
|
+
*
|
|
165
|
+
* @returns The decorated property
|
|
166
|
+
*/
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
_exports.usingExtension = usingExtension;
|
|
170
|
+
|
|
171
|
+
function event() {
|
|
172
|
+
return function (target, eventKey) {
|
|
145
173
|
var metadata = ensureMetadata(target);
|
|
146
174
|
|
|
147
|
-
if (
|
|
148
|
-
|
|
149
|
-
metadata.macroContexts[propertyKey] = oPropertyParams;
|
|
150
|
-
}
|
|
175
|
+
if (!metadata.events[eventKey.toString()]) {
|
|
176
|
+
metadata.events[eventKey.toString()] = {};
|
|
151
177
|
}
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Defines the following property in the control metatada.
|
|
182
|
+
*
|
|
183
|
+
* @param ui5PropertyMetadata The property definition
|
|
184
|
+
* @returns The decorated property.
|
|
185
|
+
*/
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
_exports.event = event;
|
|
189
|
+
|
|
190
|
+
function property(ui5PropertyMetadata) {
|
|
191
|
+
return function (target, propertyKey, propertyDescriptor) {
|
|
192
|
+
var metadata = ensureMetadata(target);
|
|
152
193
|
|
|
153
194
|
if (!metadata.properties[propertyKey]) {
|
|
154
|
-
metadata.properties[propertyKey] =
|
|
195
|
+
metadata.properties[propertyKey] = ui5PropertyMetadata;
|
|
155
196
|
}
|
|
156
197
|
|
|
157
198
|
delete propertyDescriptor.writable;
|
|
158
|
-
delete propertyDescriptor.initializer;
|
|
159
|
-
// return this.setProperty(propertyKey, v);
|
|
160
|
-
// };
|
|
161
|
-
// (propertyDescriptor as any).get = function() {
|
|
162
|
-
// return this.getProperty(propertyKey);
|
|
163
|
-
// };
|
|
164
|
-
|
|
199
|
+
delete propertyDescriptor.initializer;
|
|
165
200
|
return propertyDescriptor;
|
|
166
|
-
};
|
|
201
|
+
}; // This is technically an accessor decorator, but somehow the compiler doesn't like it if i declare it as such.;
|
|
167
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Defines and configure the following aggregation in the control metatada.
|
|
205
|
+
*
|
|
206
|
+
* @param ui5AggregationMetadata The aggregation definition
|
|
207
|
+
* @returns The decorated property.
|
|
208
|
+
*/
|
|
209
|
+
|
|
168
210
|
|
|
169
|
-
_exports.
|
|
211
|
+
_exports.property = property;
|
|
170
212
|
|
|
171
|
-
function
|
|
213
|
+
function aggregation(ui5AggregationMetadata) {
|
|
172
214
|
return function (target, propertyKey, propertyDescriptor) {
|
|
173
215
|
var metadata = ensureMetadata(target);
|
|
174
216
|
|
|
217
|
+
if (ui5AggregationMetadata.multiple === undefined) {
|
|
218
|
+
// UI5 defaults this to true but this is just weird...
|
|
219
|
+
ui5AggregationMetadata.multiple = false;
|
|
220
|
+
}
|
|
221
|
+
|
|
175
222
|
if (!metadata.aggregations[propertyKey]) {
|
|
176
|
-
metadata.aggregations[propertyKey] =
|
|
223
|
+
metadata.aggregations[propertyKey] = ui5AggregationMetadata;
|
|
177
224
|
}
|
|
178
225
|
|
|
179
|
-
if (
|
|
226
|
+
if (ui5AggregationMetadata.isDefault) {
|
|
180
227
|
metadata.defaultAggregation = propertyKey;
|
|
181
228
|
}
|
|
182
229
|
|
|
183
230
|
delete propertyDescriptor.writable;
|
|
184
|
-
delete propertyDescriptor.initializer;
|
|
185
|
-
// return this.setAggregation(propertyKey, v);
|
|
186
|
-
// };
|
|
187
|
-
// (propertyDescriptor as any).get = function() {
|
|
188
|
-
// return this.getAggregation(propertyKey);
|
|
189
|
-
// };
|
|
190
|
-
|
|
231
|
+
delete propertyDescriptor.initializer;
|
|
191
232
|
return propertyDescriptor;
|
|
192
|
-
};
|
|
233
|
+
}; // This is technically an accessor decorator, but somehow the compiler doesn't like it if i declare it as such.;
|
|
193
234
|
}
|
|
235
|
+
/**
|
|
236
|
+
* Defines and configure the following association in the control metatada.
|
|
237
|
+
*
|
|
238
|
+
* @param ui5AssociationMetadata The definition of the association.
|
|
239
|
+
* @returns The decorated property
|
|
240
|
+
*/
|
|
241
|
+
|
|
194
242
|
|
|
195
|
-
_exports.
|
|
243
|
+
_exports.aggregation = aggregation;
|
|
196
244
|
|
|
197
|
-
function
|
|
245
|
+
function association(ui5AssociationMetadata) {
|
|
198
246
|
return function (target, propertyKey, propertyDescriptor) {
|
|
199
247
|
var metadata = ensureMetadata(target);
|
|
200
248
|
|
|
201
249
|
if (!metadata.associations[propertyKey]) {
|
|
202
|
-
metadata.associations[propertyKey] =
|
|
250
|
+
metadata.associations[propertyKey] = ui5AssociationMetadata;
|
|
203
251
|
}
|
|
204
252
|
|
|
205
253
|
delete propertyDescriptor.writable;
|
|
206
|
-
delete propertyDescriptor.initializer;
|
|
207
|
-
// return this.setAggregation(propertyKey, v);
|
|
208
|
-
// };
|
|
209
|
-
// (propertyDescriptor as any).get = function() {
|
|
210
|
-
// return this.getAggregation(propertyKey);
|
|
211
|
-
// };
|
|
212
|
-
|
|
254
|
+
delete propertyDescriptor.initializer;
|
|
213
255
|
return propertyDescriptor;
|
|
214
|
-
};
|
|
256
|
+
}; // This is technically an accessor decorator, but somehow the compiler doesn't like it if i declare it as such.;
|
|
215
257
|
}
|
|
258
|
+
/**
|
|
259
|
+
* Defines in the metadata that this control implements a specific interface.
|
|
260
|
+
*
|
|
261
|
+
* @param interfaceName The name of the implemented interface
|
|
262
|
+
* @returns The decorated method
|
|
263
|
+
*/
|
|
264
|
+
|
|
216
265
|
|
|
217
|
-
_exports.
|
|
266
|
+
_exports.association = association;
|
|
218
267
|
|
|
268
|
+
function implementInterface(interfaceName) {
|
|
269
|
+
return function (target) {
|
|
270
|
+
var metadata = ensureMetadata(target);
|
|
271
|
+
metadata.interfaces.push(interfaceName);
|
|
272
|
+
};
|
|
273
|
+
}
|
|
219
274
|
/**
|
|
220
|
-
*
|
|
275
|
+
* Indicates that the following method should also be exposed statically so we can call it from the XML.
|
|
221
276
|
*
|
|
222
|
-
* @
|
|
223
|
-
* @param isDependentBound Whether this API will be used as a dependent or not
|
|
224
|
-
* @class
|
|
277
|
+
* @returns The decorated method
|
|
225
278
|
*/
|
|
226
|
-
function APIClass(sTarget) {
|
|
227
|
-
var isDependentBound = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
228
|
-
return function (constructor) {
|
|
229
|
-
if (!constructor.prototype.metadata) {
|
|
230
|
-
constructor.prototype.metadata = {};
|
|
231
|
-
}
|
|
232
279
|
|
|
233
|
-
if (!constructor.prototype.metadata.interfaces) {
|
|
234
|
-
constructor.prototype.metadata.interfaces = [];
|
|
235
|
-
}
|
|
236
280
|
|
|
237
|
-
|
|
238
|
-
constructor.isDependentBound = isDependentBound;
|
|
281
|
+
_exports.implementInterface = implementInterface;
|
|
239
282
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
render: function (oRm, oControl) {
|
|
244
|
-
oRm.renderControl(oControl.getContent());
|
|
245
|
-
}
|
|
246
|
-
};
|
|
247
|
-
}
|
|
283
|
+
function xmlEventHandler() {
|
|
284
|
+
return function (target, propertykey) {
|
|
285
|
+
var currentConstructor = target.constructor;
|
|
248
286
|
|
|
249
|
-
|
|
287
|
+
currentConstructor[propertykey.toString()] = function () {
|
|
288
|
+
var currentTarget = currentConstructor.getAPI(arguments.length <= 0 ? undefined : arguments[0]);
|
|
289
|
+
currentTarget[propertykey.toString()].apply(currentTarget, arguments);
|
|
290
|
+
};
|
|
250
291
|
};
|
|
251
292
|
}
|
|
293
|
+
/**
|
|
294
|
+
* Indicates that the following class should define a ui5 control of the specified name.
|
|
295
|
+
*
|
|
296
|
+
* @param sTarget The fully qualified name of the macro API
|
|
297
|
+
* @param metadataDefinition Inline metadata definition
|
|
298
|
+
* @class
|
|
299
|
+
*/
|
|
252
300
|
|
|
253
|
-
_exports.APIClass = APIClass;
|
|
254
301
|
|
|
255
|
-
|
|
256
|
-
|
|
302
|
+
_exports.xmlEventHandler = xmlEventHandler;
|
|
303
|
+
|
|
304
|
+
function defineUI5Class(sTarget, metadataDefinition) {
|
|
257
305
|
return function (constructor) {
|
|
258
306
|
if (!constructor.prototype.metadata) {
|
|
259
307
|
constructor.prototype.metadata = {};
|
|
260
308
|
}
|
|
261
309
|
|
|
262
310
|
if (metadataDefinition) {
|
|
263
|
-
|
|
311
|
+
for (var key in metadataDefinition) {
|
|
264
312
|
constructor.prototype.metadata[key] = metadataDefinition[key];
|
|
265
|
-
}
|
|
313
|
+
}
|
|
266
314
|
}
|
|
267
315
|
|
|
268
|
-
return
|
|
316
|
+
return registerUI5Metadata(constructor, sTarget, constructor.prototype);
|
|
269
317
|
};
|
|
270
318
|
}
|
|
319
|
+
/**
|
|
320
|
+
* Internal heavy lifting that will take care of creating the class property for ui5 to use.
|
|
321
|
+
*
|
|
322
|
+
* @param clazz The class prototype
|
|
323
|
+
* @param name The name of the class to create
|
|
324
|
+
* @param inObj The metadata object
|
|
325
|
+
* @returns The metadata class
|
|
326
|
+
*/
|
|
271
327
|
|
|
272
|
-
_exports.UI5Class = UI5Class;
|
|
273
328
|
|
|
274
|
-
|
|
275
|
-
var _inObj$metadata, _clazz$metadata, _obj$metadata;
|
|
329
|
+
_exports.defineUI5Class = defineUI5Class;
|
|
276
330
|
|
|
277
|
-
|
|
331
|
+
function registerUI5Metadata(clazz, name, inObj) {
|
|
332
|
+
var _clazz$getMetadata, _inObj$metadata, _clazz$metadata, _obj$metadata;
|
|
278
333
|
|
|
279
|
-
if (
|
|
334
|
+
if (clazz.getMetadata && clazz.getMetadata().isA("sap.ui.core.mvc.ControllerExtension")) {
|
|
280
335
|
Object.getOwnPropertyNames(inObj).forEach(function (objName) {
|
|
281
336
|
var descriptor = Object.getOwnPropertyDescriptor(inObj, objName);
|
|
282
337
|
|
|
@@ -291,29 +346,29 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/ui/core/ElementMetadata", "sap/u
|
|
|
291
346
|
obj.override = inObj.override;
|
|
292
347
|
obj.constructor = clazz;
|
|
293
348
|
obj.metadata.baseType = Object.getPrototypeOf(clazz.prototype).getMetadata().getName();
|
|
294
|
-
var rendererDefinition = inObj.renderer || clazz.renderer;
|
|
295
|
-
obj.renderer = {
|
|
296
|
-
apiVersion: 2
|
|
297
|
-
};
|
|
298
349
|
|
|
299
|
-
if (
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
350
|
+
if ((clazz === null || clazz === void 0 ? void 0 : (_clazz$getMetadata = clazz.getMetadata()) === null || _clazz$getMetadata === void 0 ? void 0 : _clazz$getMetadata.getStereotype()) === "control") {
|
|
351
|
+
var rendererDefinition = inObj.renderer || clazz.renderer || clazz.render;
|
|
352
|
+
obj.renderer = {
|
|
353
|
+
apiVersion: 2
|
|
354
|
+
};
|
|
355
|
+
|
|
356
|
+
if (typeof rendererDefinition === "function") {
|
|
357
|
+
obj.renderer.render = rendererDefinition;
|
|
358
|
+
} else if (rendererDefinition != undefined) {
|
|
359
|
+
obj.renderer = rendererDefinition;
|
|
360
|
+
}
|
|
303
361
|
}
|
|
304
362
|
|
|
305
363
|
obj.metadata.interfaces = ((_inObj$metadata = inObj.metadata) === null || _inObj$metadata === void 0 ? void 0 : _inObj$metadata.interfaces) || ((_clazz$metadata = clazz.metadata) === null || _clazz$metadata === void 0 ? void 0 : _clazz$metadata.interfaces);
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
obj[key] = clazz.prototype[key];
|
|
312
|
-
} catch (e) {//console.log(e);
|
|
313
|
-
}
|
|
364
|
+
Object.keys(clazz.prototype).forEach(function (key) {
|
|
365
|
+
if (key !== "metadata") {
|
|
366
|
+
try {
|
|
367
|
+
obj[key] = clazz.prototype[key];
|
|
368
|
+
} catch (e) {//console.log(e);
|
|
314
369
|
}
|
|
315
|
-
}
|
|
316
|
-
}
|
|
370
|
+
}
|
|
371
|
+
});
|
|
317
372
|
|
|
318
373
|
if ((_obj$metadata = obj.metadata) !== null && _obj$metadata !== void 0 && _obj$metadata.controllerExtensions && Object.keys(obj.metadata.controllerExtensions).length > 0) {
|
|
319
374
|
for (var cExtName in obj.metadata.controllerExtensions) {
|
|
@@ -321,88 +376,77 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/ui/core/ElementMetadata", "sap/u
|
|
|
321
376
|
}
|
|
322
377
|
}
|
|
323
378
|
|
|
324
|
-
var output = clazz;
|
|
325
|
-
|
|
326
|
-
if (useExtend) {
|
|
327
|
-
output = clazz.extend(name, obj, metadataClass);
|
|
328
|
-
var _fnInit = output.prototype.init;
|
|
379
|
+
var output = clazz.extend(name, obj);
|
|
380
|
+
var fnInit = output.prototype.init;
|
|
329
381
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
args[_key] = arguments[_key];
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
_fnInit && _fnInit.apply(this, args);
|
|
336
|
-
this.metadata = obj.metadata;
|
|
337
|
-
|
|
338
|
-
if (obj.metadata.properties) {
|
|
339
|
-
var aPropertyKeys = Object.keys(obj.metadata.properties); // eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
340
|
-
|
|
341
|
-
var that = this;
|
|
342
|
-
aPropertyKeys.forEach(function (propertyKey) {
|
|
343
|
-
Object.defineProperty(that, propertyKey, {
|
|
344
|
-
configurable: true,
|
|
345
|
-
set: function (v) {
|
|
346
|
-
return that.setProperty(propertyKey, v);
|
|
347
|
-
},
|
|
348
|
-
get: function () {
|
|
349
|
-
return that.getProperty(propertyKey);
|
|
350
|
-
}
|
|
351
|
-
});
|
|
352
|
-
});
|
|
353
|
-
var aAggregationKeys = Object.keys(obj.metadata.aggregations);
|
|
354
|
-
aAggregationKeys.forEach(function (aggregationKey) {
|
|
355
|
-
Object.defineProperty(that, aggregationKey, {
|
|
356
|
-
configurable: true,
|
|
357
|
-
set: function (v) {
|
|
358
|
-
return that.setAggregation(aggregationKey, v);
|
|
359
|
-
},
|
|
360
|
-
get: function () {
|
|
361
|
-
return that.getAggregation(aggregationKey);
|
|
362
|
-
}
|
|
363
|
-
});
|
|
364
|
-
});
|
|
365
|
-
}
|
|
366
|
-
};
|
|
367
|
-
} else {
|
|
368
|
-
var metadata;
|
|
382
|
+
output.prototype.init = function () {
|
|
383
|
+
var _this = this;
|
|
369
384
|
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
} else {
|
|
373
|
-
metadata = new ElementMetadata(name, obj);
|
|
385
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
386
|
+
args[_key] = arguments[_key];
|
|
374
387
|
}
|
|
375
388
|
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
};
|
|
389
|
+
fnInit && fnInit.apply(this, args);
|
|
390
|
+
this.metadata = obj.metadata;
|
|
379
391
|
|
|
380
|
-
if (
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
392
|
+
if (obj.metadata.properties) {
|
|
393
|
+
var aPropertyKeys = Object.keys(obj.metadata.properties);
|
|
394
|
+
aPropertyKeys.forEach(function (propertyKey) {
|
|
395
|
+
Object.defineProperty(_this, propertyKey, {
|
|
396
|
+
configurable: true,
|
|
397
|
+
set: function (v) {
|
|
398
|
+
return _this.setProperty(propertyKey, v);
|
|
399
|
+
},
|
|
400
|
+
get: function () {
|
|
401
|
+
return _this.getProperty(propertyKey);
|
|
386
402
|
}
|
|
403
|
+
});
|
|
404
|
+
});
|
|
405
|
+
var aAggregationKeys = Object.keys(obj.metadata.aggregations);
|
|
406
|
+
aAggregationKeys.forEach(function (aggregationKey) {
|
|
407
|
+
Object.defineProperty(_this, aggregationKey, {
|
|
408
|
+
configurable: true,
|
|
409
|
+
set: function (v) {
|
|
410
|
+
return _this.setAggregation(aggregationKey, v);
|
|
411
|
+
},
|
|
412
|
+
get: function () {
|
|
413
|
+
var aggregationContent = _this.getAggregation(aggregationKey);
|
|
387
414
|
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
415
|
+
if (obj.metadata.aggregations[aggregationKey].multiple) {
|
|
416
|
+
return aggregationContent || [];
|
|
417
|
+
} else {
|
|
418
|
+
return aggregationContent;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
});
|
|
422
|
+
});
|
|
423
|
+
var aAssociationKeys = Object.keys(obj.metadata.associations);
|
|
424
|
+
aAssociationKeys.forEach(function (associationKey) {
|
|
425
|
+
Object.defineProperty(_this, associationKey, {
|
|
426
|
+
configurable: true,
|
|
427
|
+
set: function (v) {
|
|
428
|
+
return _this.setAssociation(associationKey, v);
|
|
429
|
+
},
|
|
430
|
+
get: function () {
|
|
431
|
+
var aggregationContent = _this.getAssociation(associationKey);
|
|
394
432
|
|
|
395
|
-
|
|
396
|
-
|
|
433
|
+
if (obj.metadata.associations[associationKey].multiple) {
|
|
434
|
+
return aggregationContent || [];
|
|
435
|
+
} else {
|
|
436
|
+
return aggregationContent;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
});
|
|
440
|
+
});
|
|
397
441
|
}
|
|
398
|
-
}
|
|
442
|
+
};
|
|
399
443
|
|
|
400
444
|
clazz.override = function (oExtension) {
|
|
401
445
|
var pol = {};
|
|
402
446
|
|
|
403
447
|
pol.constructor = function () {
|
|
404
|
-
for (var
|
|
405
|
-
args[
|
|
448
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
449
|
+
args[_key2] = arguments[_key2];
|
|
406
450
|
}
|
|
407
451
|
|
|
408
452
|
return clazz.apply(this, args);
|
|
@@ -414,37 +458,10 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/ui/core/ElementMetadata", "sap/u
|
|
|
414
458
|
return oClass;
|
|
415
459
|
};
|
|
416
460
|
|
|
417
|
-
var fnInit = clazz.prototype.init;
|
|
418
|
-
|
|
419
|
-
output.prototype.init = function () {
|
|
420
|
-
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
|
421
|
-
args[_key4] = arguments[_key4];
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
fnInit && fnInit.apply(this, args);
|
|
425
|
-
|
|
426
|
-
if (obj.metadata.properties) {
|
|
427
|
-
var aPropertyKeys = Object.keys(obj.metadata.properties); // eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
428
|
-
|
|
429
|
-
var that = this;
|
|
430
|
-
aPropertyKeys.forEach(function (propertyKey) {
|
|
431
|
-
Object.defineProperty(that, propertyKey, {
|
|
432
|
-
configurable: true,
|
|
433
|
-
set: function (v) {
|
|
434
|
-
return that.setProperty(propertyKey, v);
|
|
435
|
-
},
|
|
436
|
-
get: function () {
|
|
437
|
-
return that.getProperty(propertyKey);
|
|
438
|
-
}
|
|
439
|
-
});
|
|
440
|
-
});
|
|
441
|
-
}
|
|
442
|
-
};
|
|
443
|
-
|
|
444
461
|
ObjectPath.set(name, output);
|
|
445
462
|
return output;
|
|
446
463
|
}
|
|
447
464
|
|
|
448
465
|
return _exports;
|
|
449
466
|
}, false);
|
|
450
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNsYXNzU3VwcG9ydC50cyJdLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsIm1ldGFkYXRhIiwibWVyZ2UiLCJjb250cm9sbGVyRXh0ZW5zaW9ucyIsInByb3BlcnRpZXMiLCJtYWNyb0NvbnRleHRzIiwiYWdncmVnYXRpb25zIiwiYXNzb2NpYXRpb25zIiwibWV0aG9kcyIsImV2ZW50cyIsIk92ZXJyaWRlIiwic1RhcmdldCIsInByb3BlcnR5S2V5Iiwib3ZlcnJpZGUiLCJjdXJyZW50VGFyZ2V0IiwiZXh0ZW5zaW9uIiwiRXh0ZW5zaWJsZSIsIm9PdmVycmlkZUV4ZWN1dGlvbiIsIm92ZXJyaWRlRXhlY3V0aW9uIiwiUHVibGljIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdWJsaWMiLCJQcml2YXRlIiwiRmluYWwiLCJmaW5hbCIsIkV2ZW50IiwiZXZlbnRLZXkiLCJFdmVudEhhbmRsZXIiLCJwcm9wZXJ0eWtleSIsImNvbnN0cnVjdG9yIiwiZ2V0QVBJIiwiTWFjcm9Db250ZXh0IiwiYk1ldGFNb2RlbE9iamVjdCIsIlByb3BlcnR5IiwidHlwZSIsIm1hY3JvQ29udGV4dCIsIm1ldGFNb2RlbE9iamVjdCIsIlVzaW5nRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uQ2xhc3MiLCJwcm9wZXJ0eURlc2NyaXB0b3IiLCJpbml0aWFsaXplciIsIm9Qcm9wZXJ0eVBhcmFtcyIsIndyaXRhYmxlIiwiQWdncmVnYXRpb24iLCJvQWdncmVnYXRpb25EZXNjcmlwdG9yIiwiaXNEZWZhdWx0IiwiZGVmYXVsdEFnZ3JlZ2F0aW9uIiwiQXNzb2NpYXRpb24iLCJvQXNzb2NpYXRpb25EZXNjcmlwdGlvbiIsIkFQSUNsYXNzIiwiaXNEZXBlbmRlbnRCb3VuZCIsInByb3RvdHlwZSIsImludGVyZmFjZXMiLCJwdXNoIiwicmVuZGVyZXIiLCJhcGlWZXJzaW9uIiwicmVuZGVyIiwib1JtIiwib0NvbnRyb2wiLCJyZW5kZXJDb250cm9sIiwiZ2V0Q29udGVudCIsImRlc2NyaWJlIiwiRWxlbWVudE1ldGFkYXRhIiwiVUk1Q2xhc3MiLCJtZXRhZGF0YUNsYXNzIiwibWV0YWRhdGFEZWZpbml0aW9uIiwidXNlRXh0ZW5kIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJjbGF6eiIsIm5hbWUiLCJpbk9iaiIsIkNvbnRyb2xsZXJFeHRlbnNpb25NZXRhZGF0YSIsImdldE93blByb3BlcnR5TmFtZXMiLCJvYmpOYW1lIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwib2JqIiwiYmFzZVR5cGUiLCJnZXRQcm90b3R5cGVPZiIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsInJlbmRlcmVyRGVmaW5pdGlvbiIsInVuZGVmaW5lZCIsImUiLCJsZW5ndGgiLCJjRXh0TmFtZSIsIm91dHB1dCIsImV4dGVuZCIsImZuSW5pdCIsImluaXQiLCJhcmdzIiwiYXBwbHkiLCJhUHJvcGVydHlLZXlzIiwidGhhdCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwic2V0IiwidiIsInNldFByb3BlcnR5IiwiZ2V0IiwiZ2V0UHJvcGVydHkiLCJhQWdncmVnYXRpb25LZXlzIiwiYWdncmVnYXRpb25LZXkiLCJzZXRBZ2dyZWdhdGlvbiIsImdldEFnZ3JlZ2F0aW9uIiwiaXNGaW5hbCIsInNTQ05hbWUiLCJvU0NDbGFzc0luZm8iLCJmblNDTWV0YUltcGwiLCJmbkNsYXNzIiwiTWV0YWRhdGEiLCJjcmVhdGVDbGFzcyIsIm9FeHRlbnNpb24iLCJwb2wiLCJvQ2xhc3MiLCJ1aWQiLCJDb250cm9sbGVyTWV0YWRhdGEiLCJfc3RhdGljT3ZlcnJpZGUiLCJfb3ZlcnJpZGUiLCJPYmplY3RQYXRoIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7QUFTQSxNQUFNQSxjQUFjLEdBQUcsVUFBU0MsTUFBVCxFQUFzQjtBQUM1Q0EsSUFBQUEsTUFBTSxDQUFDQyxRQUFQLEdBQWtCQyxLQUFLLENBQ3RCO0FBQ0NDLE1BQUFBLG9CQUFvQixFQUFFLEVBRHZC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Q0FBYUcsVUFBekIsQ0FBdEIsQ0FENEIsQ0FFNUI7O0FBQ0EsWUFBTTRGLElBQUksR0FBRyxJQUFiO0FBQ0FELFFBQUFBLGFBQWEsQ0FBQ3pCLE9BQWQsQ0FBc0IsVUFBQTFELFdBQVcsRUFBSTtBQUNwQ3dELFVBQUFBLE1BQU0sQ0FBQzZCLGNBQVAsQ0FBc0JELElBQXRCLEVBQTRCcEYsV0FBNUIsRUFBeUM7QUFDeENzRixZQUFBQSxZQUFZLEVBQUUsSUFEMEI7QUFFeENDLFlBQUFBLEdBQUcsRUFBRSxVQUFDQyxDQUFELEVBQVk7QUFDaEIscUJBQU9KLElBQUksQ0FBQ0ssV0FBTCxDQUFpQnpGLFdBQWpCLEVBQThCd0YsQ0FBOUIsQ0FBUDtBQUNBLGFBSnVDO0FBS3hDRSxZQUFBQSxHQUFHLEVBQUUsWUFBTTtBQUNWLHFCQUFPTixJQUFJLENBQUNPLFdBQUwsQ0FBaUIzRixXQUFqQixDQUFQO0FBQ0E7QUFQdUMsV0FBekM7QUFTQSxTQVZEO0FBV0E7QUFDRCxLQWxCRDs7QUFtQkE4RyxJQUFBQSxVQUFVLENBQUN2QixHQUFYLENBQWUxQixJQUFmLEVBQXFCZ0IsTUFBckI7QUFDQSxXQUFPQSxNQUFQO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgRWxlbWVudE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50TWV0YWRhdGFcIjtcbmltcG9ydCBSZW5kZXJNYW5hZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9SZW5kZXJNYW5hZ2VyXCI7XG5pbXBvcnQgTWV0YWRhdGEgZnJvbSBcInNhcC91aS9iYXNlL01ldGFkYXRhXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbk1ldGFkYXRhIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9Db250cm9sbGVyRXh0ZW5zaW9uTWV0YWRhdGFcIjtcbmltcG9ydCBDb250cm9sbGVyTWV0YWRhdGEgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyTWV0YWRhdGFcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcblxuY29uc3QgZW5zdXJlTWV0YWRhdGEgPSBmdW5jdGlvbih0YXJnZXQ6IGFueSkge1xuXHR0YXJnZXQubWV0YWRhdGEgPSBtZXJnZShcblx0XHR7XG5cdFx0XHRjb250cm9sbGVyRXh0ZW5zaW9uczoge30sXG5cdFx0XHRwcm9wZXJ0aWVzOiB7fSxcblx0XHRcdG1hY3JvQ29udGV4dHM6IHt9LFxuXHRcdFx0YWdncmVnYXRpb25zOiB7fSxcblx0XHRcdGFzc29jaWF0aW9uczoge30sXG5cdFx0XHRtZXRob2RzOiB7fSxcblx0XHRcdGV2ZW50czoge31cblx0XHR9LFxuXHRcdHRhcmdldC5tZXRhZGF0YSB8fCB7fVxuXHQpO1xuXHRyZXR1cm4gdGFyZ2V0Lm1ldGFkYXRhO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBPdmVycmlkZShzVGFyZ2V0Pzogc3RyaW5nKSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xuXHRcdGlmICghdGFyZ2V0Lm92ZXJyaWRlKSB7XG5cdFx0XHR0YXJnZXQub3ZlcnJpZGUgPSB7fTtcblx0XHR9XG5cdFx0bGV0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQub3ZlcnJpZGU7XG5cdFx0aWYgKHNUYXJnZXQpIHtcblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb24pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb24gPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb25bc1RhcmdldF0pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb25bc1RhcmdldF0gPSB7fTtcblx0XHRcdH1cblx0XHRcdGN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0LmV4dGVuc2lvbltzVGFyZ2V0XTtcblx0XHR9XG5cdFx0Y3VycmVudFRhcmdldFtwcm9wZXJ0eUtleV0gPSB0YXJnZXRbcHJvcGVydHlLZXldO1xuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIEV4dGVuc2libGUob092ZXJyaWRlRXhlY3V0aW9uPzogT3ZlcnJpZGVFeGVjdXRpb24pIHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldLm92ZXJyaWRlRXhlY3V0aW9uID0gb092ZXJyaWRlRXhlY3V0aW9uO1xuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIFB1YmxpYyh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgZGVzY3JpcHRvcjogYW55KTogYW55IHtcblx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldKSB7XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0gPSB7fTtcblx0fVxuXHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XS5wdWJsaWMgPSB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIFByaXZhdGUodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IGFueSkge1xuXHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0pIHtcblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XSA9IHt9O1xuXHR9XG5cdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldLnB1YmxpYyA9IGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIEZpbmFsKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBhbnkpIHtcblx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldKSB7XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0gPSB7fTtcblx0fVxuXHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XS5maW5hbCA9IHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFdmVudCh0YXJnZXQ6IGFueSwgZXZlbnRLZXk6IHN0cmluZykge1xuXHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdGlmICghbWV0YWRhdGEuZXZlbnRzW2V2ZW50S2V5XSkge1xuXHRcdG1ldGFkYXRhLmV2ZW50c1tldmVudEtleV0gPSB7fTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRIYW5kbGVyKHRhcmdldDogYW55LCBwcm9wZXJ0eWtleTogYW55KSB7XG5cdHRhcmdldC5jb25zdHJ1Y3Rvcltwcm9wZXJ0eWtleV0gPSBmdW5jdGlvbiguLi5hcmdzOiBhbnlbXSkge1xuXHRcdGNvbnN0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQuY29uc3RydWN0b3IuZ2V0QVBJKGFyZ3NbMF0gYXMgVUk1RXZlbnQpO1xuXHRcdGN1cnJlbnRUYXJnZXRbcHJvcGVydHlrZXldKC4uLmFyZ3MpO1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTWFjcm9Db250ZXh0KGJNZXRhTW9kZWxPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XG5cdHJldHVybiBQcm9wZXJ0eSh7IHR5cGU6IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIiwgbWFjcm9Db250ZXh0OiB0cnVlLCBtZXRhTW9kZWxPYmplY3Q6IGJNZXRhTW9kZWxPYmplY3QgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBVc2luZ0V4dGVuc2lvbihleHRlbnNpb25DbGFzczogYW55KTogYW55IHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcik6IGFueSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0bWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbcHJvcGVydHlLZXldID0gZXh0ZW5zaW9uQ2xhc3M7XG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBQcm9wZXJ0eShvUHJvcGVydHlQYXJhbXM6IGFueSk6IGFueSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpOiBhbnkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAob1Byb3BlcnR5UGFyYW1zPy5tYWNyb0NvbnRleHQpIHtcblx0XHRcdGlmICghbWV0YWRhdGEubWFjcm9Db250ZXh0c1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdFx0bWV0YWRhdGEubWFjcm9Db250ZXh0c1twcm9wZXJ0eUtleV0gPSBvUHJvcGVydHlQYXJhbXM7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghbWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlLZXldID0gb1Byb3BlcnR5UGFyYW1zO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0Ly8gKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLnNldCA9IGZ1bmN0aW9uKHY6IGFueSkge1xuXHRcdC8vIFx0cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkocHJvcGVydHlLZXksIHYpO1xuXHRcdC8vIH07XG5cdFx0Ly8gKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmdldCA9IGZ1bmN0aW9uKCkge1xuXHRcdC8vIFx0cmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkocHJvcGVydHlLZXkpO1xuXHRcdC8vIH07XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQWdncmVnYXRpb24ob0FnZ3JlZ2F0aW9uRGVzY3JpcHRvcj86IGFueSk6IGFueSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpOiBhbnkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0gPSBvQWdncmVnYXRpb25EZXNjcmlwdG9yO1xuXHRcdH1cblx0XHRpZiAob0FnZ3JlZ2F0aW9uRGVzY3JpcHRvci5pc0RlZmF1bHQpIHtcblx0XHRcdG1ldGFkYXRhLmRlZmF1bHRBZ2dyZWdhdGlvbiA9IHByb3BlcnR5S2V5O1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0Ly8gKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLnNldCA9IGZ1bmN0aW9uKHY6IGFueSkge1xuXHRcdC8vIFx0cmV0dXJuIHRoaXMuc2V0QWdncmVnYXRpb24ocHJvcGVydHlLZXksIHYpO1xuXHRcdC8vIH07XG5cdFx0Ly8gKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmdldCA9IGZ1bmN0aW9uKCkge1xuXHRcdC8vIFx0cmV0dXJuIHRoaXMuZ2V0QWdncmVnYXRpb24ocHJvcGVydHlLZXkpO1xuXHRcdC8vIH07XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQXNzb2NpYXRpb24ob0Fzc29jaWF0aW9uRGVzY3JpcHRpb24/OiBhbnkpOiBhbnkge1xuXHRyZXR1cm4gZnVuY3Rpb24odGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKTogYW55IHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKCFtZXRhZGF0YS5hc3NvY2lhdGlvbnNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRtZXRhZGF0YS5hc3NvY2lhdGlvbnNbcHJvcGVydHlLZXldID0gb0Fzc29jaWF0aW9uRGVzY3JpcHRpb247XG5cdFx0fVxuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5pbml0aWFsaXplcjtcblx0XHQvLyAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuc2V0ID0gZnVuY3Rpb24odjogYW55KSB7XG5cdFx0Ly8gXHRyZXR1cm4gdGhpcy5zZXRBZ2dyZWdhdGlvbihwcm9wZXJ0eUtleSwgdik7XG5cdFx0Ly8gfTtcblx0XHQvLyAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuZ2V0ID0gZnVuY3Rpb24oKSB7XG5cdFx0Ly8gXHRyZXR1cm4gdGhpcy5nZXRBZ2dyZWdhdGlvbihwcm9wZXJ0eUtleSk7XG5cdFx0Ly8gfTtcblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH07XG59XG50eXBlIENvbnRyb2xQcm9wZXJ0eU5hbWVzPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEZ1bmN0aW9uID8gbmV2ZXIgOiBLO1xufVtrZXlvZiBUXTtcbmV4cG9ydCB0eXBlIFByb3BlcnRpZXNPZjxUPiA9IFBhcnRpYWw8UGljazxULCBDb250cm9sUHJvcGVydHlOYW1lczxUPj4+O1xuXG4vKipcbiAqIERlY29yYXRvciB0byBwcm92aWRlIGEgbmV3IEFQSSBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBtYWNyb3MuXG4gKlxuICogQHBhcmFtIHNUYXJnZXQgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBtYWNybyBBUElcbiAqIEBwYXJhbSBpc0RlcGVuZGVudEJvdW5kIFdoZXRoZXIgdGhpcyBBUEkgd2lsbCBiZSB1c2VkIGFzIGEgZGVwZW5kZW50IG9yIG5vdFxuICogQGNsYXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBBUElDbGFzcyhzVGFyZ2V0OiBzdHJpbmcsIGlzRGVwZW5kZW50Qm91bmQgPSBmYWxzZSkge1xuXHRyZXR1cm4gZnVuY3Rpb24oY29uc3RydWN0b3I6IEZ1bmN0aW9uKSB7XG5cdFx0aWYgKCFjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSA9IHt9O1xuXHRcdH1cblxuXHRcdGlmICghY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhLmludGVyZmFjZXMpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YS5pbnRlcmZhY2VzID0gW107XG5cdFx0fVxuXHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YS5pbnRlcmZhY2VzLnB1c2goXCJzYXAudWkuY29yZS5JRm9ybUNvbnRlbnRcIik7XG5cdFx0KGNvbnN0cnVjdG9yIGFzIGFueSkuaXNEZXBlbmRlbnRCb3VuZCA9IGlzRGVwZW5kZW50Qm91bmQ7XG5cdFx0aWYgKCFjb25zdHJ1Y3Rvci5wcm90b3R5cGUucmVuZGVyZXIpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW5kZXJlciA9IHtcblx0XHRcdFx0YXBpVmVyc2lvbjogMixcblx0XHRcdFx0cmVuZGVyOiBmdW5jdGlvbihvUm06IFJlbmRlck1hbmFnZXIsIG9Db250cm9sOiBhbnkpIHtcblx0XHRcdFx0XHRvUm0ucmVuZGVyQ29udHJvbChvQ29udHJvbC5nZXRDb250ZW50KCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGRlc2NyaWJlKGNvbnN0cnVjdG9yLCBzVGFyZ2V0LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIEVsZW1lbnRNZXRhZGF0YSk7XG5cdH07XG59XG5leHBvcnQgZnVuY3Rpb24gVUk1Q2xhc3Moc1RhcmdldDogc3RyaW5nLCBtZXRhZGF0YUNsYXNzPzogYW55LCBtZXRhZGF0YURlZmluaXRpb24/OiBhbnksIHVzZUV4dGVuZDogYm9vbGVhbiA9IHRydWUpIHtcblx0cmV0dXJuIGZ1bmN0aW9uKGNvbnN0cnVjdG9yOiBGdW5jdGlvbikge1xuXHRcdGlmICghY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEgPSB7fTtcblx0XHR9XG5cdFx0aWYgKG1ldGFkYXRhRGVmaW5pdGlvbikge1xuXHRcdFx0T2JqZWN0LmtleXMobWV0YWRhdGFEZWZpbml0aW9uKS5mb3JFYWNoKGtleSA9PiB7XG5cdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0gbWV0YWRhdGFEZWZpbml0aW9uW2tleV07XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGRlc2NyaWJlKGNvbnN0cnVjdG9yLCBzVGFyZ2V0LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIG1ldGFkYXRhQ2xhc3MsIHVzZUV4dGVuZCk7XG5cdH07XG59XG5mdW5jdGlvbiBkZXNjcmliZShjbGF6ejogYW55LCBuYW1lOiBzdHJpbmcsIGluT2JqOiBhbnksIG1ldGFkYXRhQ2xhc3M/OiBhbnksIHVzZUV4dGVuZDogYm9vbGVhbiA9IHRydWUpIHtcblx0aWYgKG1ldGFkYXRhQ2xhc3MgPT09IENvbnRyb2xsZXJFeHRlbnNpb25NZXRhZGF0YSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2JqKS5mb3JFYWNoKG9iak5hbWUgPT4ge1xuXHRcdFx0Y29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaW5PYmosIG9iak5hbWUpO1xuXHRcdFx0aWYgKGRlc2NyaXB0b3IgJiYgIWRlc2NyaXB0b3IuZW51bWVyYWJsZSkge1xuXHRcdFx0XHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRcdFx0XHQvL1x0XHRMb2cuZXJyb3IoYFByb3BlcnR5ICR7b2JqTmFtZX0gZnJvbSAke25hbWV9IHNob3VsZCBiZSBkZWNvcmF0ZWQgYXMgcHVibGljYCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Y29uc3Qgb2JqOiBhbnkgPSB7fTtcblx0b2JqLm1ldGFkYXRhID0gaW5PYmoubWV0YWRhdGEgfHwge307XG5cdG9iai5vdmVycmlkZSA9IGluT2JqLm92ZXJyaWRlO1xuXHRvYmouY29uc3RydWN0b3IgPSBjbGF6ejtcblx0b2JqLm1ldGFkYXRhLmJhc2VUeXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNsYXp6LnByb3RvdHlwZSlcblx0XHQuZ2V0TWV0YWRhdGEoKVxuXHRcdC5nZXROYW1lKCk7XG5cblx0Y29uc3QgcmVuZGVyZXJEZWZpbml0aW9uID0gaW5PYmoucmVuZGVyZXIgfHwgY2xhenoucmVuZGVyZXI7XG5cdG9iai5yZW5kZXJlciA9IHsgYXBpVmVyc2lvbjogMiB9O1xuXHRpZiAodHlwZW9mIHJlbmRlcmVyRGVmaW5pdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0b2JqLnJlbmRlcmVyLnJlbmRlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0fSBlbHNlIGlmIChyZW5kZXJlckRlZmluaXRpb24gIT0gdW5kZWZpbmVkKSB7XG5cdFx0b2JqLnJlbmRlcmVyID0gcmVuZGVyZXJEZWZpbml0aW9uO1xuXHR9XG5cdG9iai5tZXRhZGF0YS5pbnRlcmZhY2VzID0gaW5PYmoubWV0YWRhdGE/LmludGVyZmFjZXMgfHwgY2xhenoubWV0YWRhdGE/LmludGVyZmFjZXM7XG5cdGlmICh1c2VFeHRlbmQpIHtcblx0XHRPYmplY3Qua2V5cyhjbGF6ei5wcm90b3R5cGUpLmZvckVhY2goa2V5ID0+IHtcblx0XHRcdGlmIChrZXkgIT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdG9ialtrZXldID0gY2xhenoucHJvdG90eXBlW2tleV07XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0aWYgKG9iai5tZXRhZGF0YT8uY29udHJvbGxlckV4dGVuc2lvbnMgJiYgT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBjRXh0TmFtZSBpbiBvYmoubWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnMpIHtcblx0XHRcdG9ialtjRXh0TmFtZV0gPSBvYmoubWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbY0V4dE5hbWVdO1xuXHRcdH1cblx0fVxuXHRsZXQgb3V0cHV0ID0gY2xheno7XG5cdGlmICh1c2VFeHRlbmQpIHtcblx0XHRvdXRwdXQgPSBjbGF6ei5leHRlbmQobmFtZSwgb2JqLCBtZXRhZGF0YUNsYXNzKTtcblx0XHRjb25zdCBmbkluaXQgPSBvdXRwdXQucHJvdG90eXBlLmluaXQ7XG5cdFx0b3V0cHV0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRcdGZuSW5pdCAmJiBmbkluaXQuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0XHR0aGlzLm1ldGFkYXRhID0gb2JqLm1ldGFkYXRhO1xuXG5cdFx0XHRpZiAob2JqLm1ldGFkYXRhLnByb3BlcnRpZXMpIHtcblx0XHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG5cdFx0XHRcdGNvbnN0IHRoYXQgPSB0aGlzO1xuXHRcdFx0XHRhUHJvcGVydHlLZXlzLmZvckVhY2gocHJvcGVydHlLZXkgPT4ge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGF0LCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGF0LnNldFByb3BlcnR5KHByb3BlcnR5S2V5LCB2KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoYXQuZ2V0UHJvcGVydHkocHJvcGVydHlLZXkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3QgYUFnZ3JlZ2F0aW9uS2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnMpO1xuXHRcdFx0XHRhQWdncmVnYXRpb25LZXlzLmZvckVhY2goYWdncmVnYXRpb25LZXkgPT4ge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGF0LCBhZ2dyZWdhdGlvbktleSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGF0LnNldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uS2V5LCB2KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoYXQuZ2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25LZXkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGxldCBtZXRhZGF0YTogYW55O1xuXHRcdGlmIChtZXRhZGF0YUNsYXNzKSB7XG5cdFx0XHRtZXRhZGF0YSA9IG5ldyBtZXRhZGF0YUNsYXNzKG5hbWUsIG9iaik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1ldGFkYXRhID0gbmV3IEVsZW1lbnRNZXRhZGF0YShuYW1lLCBvYmopO1xuXHRcdH1cblx0XHRjbGF6ei5nZXRNZXRhZGF0YSA9IGNsYXp6LnByb3RvdHlwZS5nZXRNZXRhZGF0YSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIG1ldGFkYXRhO1xuXHRcdH07XG5cdFx0aWYgKCFjbGF6ei5nZXRNZXRhZGF0YSgpLmlzRmluYWwoKSkge1xuXHRcdFx0Y2xhenouZXh0ZW5kID0gZnVuY3Rpb24oc1NDTmFtZTogc3RyaW5nLCBvU0NDbGFzc0luZm86IGFueSwgZm5TQ01ldGFJbXBsOiBGdW5jdGlvbikge1xuXHRcdFx0XHQvLyB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGVkIGJ5IHVpNSBkb2VzIG5vdCByZXR1cm4gdGhlIHZhbHVlIHdoaWNoIGlzIHByb2JsZW1hdGljIHdpdGggVFNcblx0XHRcdFx0b1NDQ2xhc3NJbmZvLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRcdFx0XHRyZXR1cm4gY2xhenouYXBwbHkodGhpcywgYXJncyk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29uc3QgZm5DbGFzcyA9IChNZXRhZGF0YSBhcyBhbnkpLmNyZWF0ZUNsYXNzKFxuXHRcdFx0XHRcdGNsYXp6LFxuXHRcdFx0XHRcdHNTQ05hbWUsXG5cdFx0XHRcdFx0b1NDQ2xhc3NJbmZvLFxuXHRcdFx0XHRcdGZuU0NNZXRhSW1wbCB8fCBtZXRhZGF0YUNsYXNzIHx8IEVsZW1lbnRNZXRhZGF0YVxuXHRcdFx0XHQpO1xuXHRcdFx0XHQvLyBmbkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGZ1bmN0aW9uKC4uLmFyZ3M6IGFueVtdKSB7XG5cdFx0XHRcdC8vIFx0cmV0dXJuIGNsYXp6LmFwcGx5KHRoaXMsIC4uLmFyZ3MpO1xuXHRcdFx0XHQvLyB9O1xuXHRcdFx0XHRyZXR1cm4gZm5DbGFzcztcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdGNsYXp6Lm92ZXJyaWRlID0gZnVuY3Rpb24ob0V4dGVuc2lvbjogYW55KSB7XG5cdFx0Y29uc3QgcG9sID0ge307XG5cdFx0KHBvbCBhcyBhbnkpLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRcdHJldHVybiBjbGF6ei5hcHBseSh0aGlzLCBhcmdzIGFzIGFueSk7XG5cdFx0fTtcblx0XHRjb25zdCBvQ2xhc3MgPSAoTWV0YWRhdGEgYXMgYW55KS5jcmVhdGVDbGFzcyhjbGF6eiwgXCJhbm9ueW1vdXNFeHRlbnNpb25+XCIgKyB1aWQoKSwgcG9sLCBDb250cm9sbGVyTWV0YWRhdGEpO1xuXHRcdG9DbGFzcy5nZXRNZXRhZGF0YSgpLl9zdGF0aWNPdmVycmlkZSA9IG9FeHRlbnNpb247XG5cdFx0b0NsYXNzLmdldE1ldGFkYXRhKCkuX292ZXJyaWRlID0gKGNsYXp6LmdldE1ldGFkYXRhKCkgYXMgYW55KS5fb3ZlcnJpZGU7XG5cdFx0cmV0dXJuIG9DbGFzcztcblx0fTtcblxuXHRjb25zdCBmbkluaXQgPSBjbGF6ei5wcm90b3R5cGUuaW5pdDtcblx0b3V0cHV0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRmbkluaXQgJiYgZm5Jbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdGlmIChvYmoubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuXHRcdFx0Y29uc3QgdGhhdCA9IHRoaXM7XG5cdFx0XHRhUHJvcGVydHlLZXlzLmZvckVhY2gocHJvcGVydHlLZXkgPT4ge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhhdCwgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0c2V0OiAodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhhdC5zZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSwgdik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGF0LmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRPYmplY3RQYXRoLnNldChuYW1lLCBvdXRwdXQpO1xuXHRyZXR1cm4gb3V0cHV0O1xufVxuIl19
|
|
467
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNsYXNzU3VwcG9ydC50cyJdLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsIm1ldGFkYXRhIiwibWVyZ2UiLCJjb250cm9sbGVyRXh0ZW5zaW9ucyIsInByb3BlcnRpZXMiLCJtYWNyb0NvbnRleHRzIiwiYWdncmVnYXRpb25zIiwiYXNzb2NpYXRpb25zIiwibWV0aG9kcyIsImV2ZW50cyIsImludGVyZmFjZXMiLCJtZXRob2RPdmVycmlkZSIsImV4dGVuc2lvbk5hbWUiLCJwcm9wZXJ0eUtleSIsIm92ZXJyaWRlIiwiY3VycmVudFRhcmdldCIsImV4dGVuc2lvbiIsInRvU3RyaW5nIiwiZXh0ZW5zaWJsZSIsIm92ZXJyaWRlRXhlY3V0aW9uVHlwZSIsIm92ZXJyaWRlRXhlY3V0aW9uIiwicHVibGljRXh0ZW5zaW9uIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdWJsaWMiLCJwcml2YXRlRXh0ZW5zaW9uIiwiZmluYWxFeHRlbnNpb24iLCJmaW5hbCIsInVzaW5nRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uQ2xhc3MiLCJwcm9wZXJ0eURlc2NyaXB0b3IiLCJpbml0aWFsaXplciIsImV2ZW50IiwiZXZlbnRLZXkiLCJwcm9wZXJ0eSIsInVpNVByb3BlcnR5TWV0YWRhdGEiLCJ3cml0YWJsZSIsImFnZ3JlZ2F0aW9uIiwidWk1QWdncmVnYXRpb25NZXRhZGF0YSIsIm11bHRpcGxlIiwidW5kZWZpbmVkIiwiaXNEZWZhdWx0IiwiZGVmYXVsdEFnZ3JlZ2F0aW9uIiwiYXNzb2NpYXRpb24iLCJ1aTVBc3NvY2lhdGlvbk1ldGFkYXRhIiwiaW1wbGVtZW50SW50ZXJmYWNlIiwiaW50ZXJmYWNlTmFtZSIsInB1c2giLCJ4bWxFdmVudEhhbmRsZXIiLCJwcm9wZXJ0eWtleSIsImN1cnJlbnRDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwiZ2V0QVBJIiwiZGVmaW5lVUk1Q2xhc3MiLCJzVGFyZ2V0IiwibWV0YWRhdGFEZWZpbml0aW9uIiwicHJvdG90eXBlIiwia2V5IiwicmVnaXN0ZXJVSTVNZXRhZGF0YSIsImNsYXp6IiwibmFtZSIsImluT2JqIiwiZ2V0TWV0YWRhdGEiLCJpc0EiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiZm9yRWFjaCIsIm9iak5hbWUiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJvYmoiLCJiYXNlVHlwZSIsImdldFByb3RvdHlwZU9mIiwiZ2V0TmFtZSIsImdldFN0ZXJlb3R5cGUiLCJyZW5kZXJlckRlZmluaXRpb24iLCJyZW5kZXJlciIsInJlbmRlciIsImFwaVZlcnNpb24iLCJrZXlzIiwiZSIsImxlbmd0aCIsImNFeHROYW1lIiwib3V0cHV0IiwiZXh0ZW5kIiwiZm5Jbml0IiwiaW5pdCIsImFyZ3MiLCJhcHBseSIsImFQcm9wZXJ0eUtleXMiLCJkZWZpbmVQcm9wZXJ0eSIsImNvbmZpZ3VyYWJsZSIsInNldCIsInYiLCJzZXRQcm9wZXJ0eSIsImdldCIsImdldFByb3BlcnR5IiwiYUFnZ3JlZ2F0aW9uS2V5cyIsImFnZ3JlZ2F0aW9uS2V5Iiwic2V0QWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkNvbnRlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImFBc3NvY2lhdGlvbktleXMiLCJhc3NvY2lhdGlvbktleSIsInNldEFzc29jaWF0aW9uIiwiZ2V0QXNzb2NpYXRpb24iLCJvRXh0ZW5zaW9uIiwicG9sIiwib0NsYXNzIiwiTWV0YWRhdGEiLCJjcmVhdGVDbGFzcyIsInVpZCIsIkNvbnRyb2xsZXJNZXRhZGF0YSIsIl9zdGF0aWNPdmVycmlkZSIsIl9vdmVycmlkZSIsIk9iamVjdFBhdGgiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7OztBQW1FQSxNQUFNQSxjQUFjLEdBQUcsVUFBVUMsTUFBVixFQUFpQztBQUN2REEsSUFBQUEsTUFBTSxDQUFDQyxRQUFQLEdBQWtCQyxLQUFLLENBQ3RCO0FBQ0NDLE1BQUFBLG9CQUFvQixFQUFFLEVBRHZCO0FBRUNDLE1BQUFBLFVBQVUsRUFBRSxF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QkQsSUFBbEIsQ0FBUDtBQUNBLE9BRkQ7O0FBR0EsVUFBTXFCLE1BQU0sR0FBSUMsUUFBRCxDQUFrQkMsV0FBbEIsQ0FBOEJsRCxLQUE5QixFQUFxQyx3QkFBd0JtRCxHQUFHLEVBQWhFLEVBQW9FSixHQUFwRSxFQUF5RUssa0JBQXpFLENBQWY7QUFDQUosTUFBQUEsTUFBTSxDQUFDN0MsV0FBUCxHQUFxQmtELGVBQXJCLEdBQXVDUCxVQUF2QztBQUNBRSxNQUFBQSxNQUFNLENBQUM3QyxXQUFQLEdBQXFCbUQsU0FBckIsR0FBa0N0RCxLQUFLLENBQUNHLFdBQU4sRUFBRCxDQUE2Qm1ELFNBQTlEO0FBQ0EsYUFBT04sTUFBUDtBQUNBLEtBVEQ7O0FBV0FPLElBQUFBLFVBQVUsQ0FBQ3ZCLEdBQVgsQ0FBZS9CLElBQWYsRUFBcUJzQixNQUFyQjtBQUNBLFdBQU9BLE1BQVA7QUFDQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgdWlkIGZyb20gXCJzYXAvYmFzZS91dGlsL3VpZFwiO1xuaW1wb3J0IFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvYmFzZS9NZXRhZGF0YVwiO1xuaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgQ29udHJvbGxlck1ldGFkYXRhIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlck1ldGFkYXRhXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuXG50eXBlIE92ZXJyaWRlRGVmaW5pdGlvbiA9IFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPjtcbnR5cGUgVUk1Q29udHJvbGxlck1ldGhvZERlZmluaXRpb24gPSB7XG5cdG92ZXJyaWRlRXhlY3V0aW9uPzogT3ZlcnJpZGVFeGVjdXRpb247XG5cdHB1YmxpYz86IGJvb2xlYW47XG5cdGZpbmFsPzogYm9vbGVhbjtcbn07XG50eXBlIFVJNVByb3BlcnR5TWV0YWRhdGEgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRncm91cD86IHN0cmluZztcblx0ZGVmYXVsdFZhbHVlPzogYW55O1xufTtcbnR5cGUgVUk1QWdncmVnYXRpb25NZXRhZGF0YSA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRtdWx0aXBsZT86IGJvb2xlYW47XG5cdGlzRGVmYXVsdD86IGJvb2xlYW47XG5cdHNpbmd1bGFyTmFtZT86IHN0cmluZztcblx0dmlzaWJpbGl0eT86IHN0cmluZztcbn07XG50eXBlIFVJNUFzc29jaWF0aW9uTWV0YWRhdGEgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0bXVsdGlwbGU/OiBib29sZWFuO1xuXHRzaW5ndWxhck5hbWU/OiBzdHJpbmc7XG59O1xudHlwZSBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uID0ge1xuXHRkZWZhdWx0QWdncmVnYXRpb24/OiBzdHJpbmc7XG5cdGNvbnRyb2xsZXJFeHRlbnNpb25zOiBSZWNvcmQ8c3RyaW5nLCB0eXBlb2YgQ29udHJvbGxlckV4dGVuc2lvbiB8IEZ1bmN0aW9uPjtcblx0cHJvcGVydGllczogUmVjb3JkPHN0cmluZywgVUk1UHJvcGVydHlNZXRhZGF0YT47XG5cdG1hY3JvQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIFVJNVByb3BlcnR5TWV0YWRhdGE+O1xuXHRhZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFVJNUFnZ3JlZ2F0aW9uTWV0YWRhdGE+O1xuXHRhc3NvY2lhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFVJNUFzc29jaWF0aW9uTWV0YWRhdGE+O1xuXHRtZXRob2RzOiBSZWNvcmQ8c3RyaW5nLCBVSTVDb250cm9sbGVyTWV0aG9kRGVmaW5pdGlvbj47XG5cdGV2ZW50czogUmVjb3JkPHN0cmluZywge30+O1xuXHRpbnRlcmZhY2VzOiBzdHJpbmdbXTtcbn07XG50eXBlIFVJNUNvbnRyb2xsZXIgPSB7XG5cdG92ZXJyaWRlPzogeyBleHRlbnNpb24/OiBSZWNvcmQ8c3RyaW5nLCBPdmVycmlkZURlZmluaXRpb24+IH0gJiB7XG5cdFx0W2s6IHN0cmluZ106IEZ1bmN0aW9uO1xuXHR9O1xuXHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG59O1xuXG50eXBlIFVJNUNvbnRyb2wgPSB7XG5cdG1ldGFkYXRhPzogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbjtcbn07XG5cbnR5cGUgVUk1QVBJQ29udHJvbCA9IFVJNUNvbnRyb2wgJiB7XG5cdGdldEFQSShldmVudDogVUk1RXZlbnQpOiBVSTVBUElDb250cm9sO1xuXHRbazogc3RyaW5nXTogRnVuY3Rpb247XG59O1xuXG50eXBlIENvbnRyb2xQcm9wZXJ0eU5hbWVzPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEZ1bmN0aW9uID8gbmV2ZXIgOiBLO1xufVtrZXlvZiBUXTtcbmV4cG9ydCB0eXBlIFByb3BlcnRpZXNPZjxUPiA9IFBhcnRpYWw8UGljazxULCBDb250cm9sUHJvcGVydHlOYW1lczxUPj4+O1xuZXhwb3J0IHR5cGUgU3RyaWN0UHJvcGVydGllc09mPFQ+ID0gUGljazxULCBDb250cm9sUHJvcGVydHlOYW1lczxUPj47XG5leHBvcnQgdHlwZSBFbmhhbmNlV2l0aFVJNTxUPiA9IFQgJiB7XG5cdC8vIEFkZCBhbGwgdGhlIGdldFhYWCBtZXRob2QsIG1pZ2h0IGFkZCB0b28gbXVjaCBhcyBpJ20gbm90IGZpbHRlcmluZyBvbiBhY3R1YWwgcHJvcGVydGllcyBhY3R1YWxseS4uLlxuXHRbUCBpbiBrZXlvZiBUIGFzIGBnZXQke0NhcGl0YWxpemU8c3RyaW5nICYgUD59YF06ICgpID0+IFRbUF07XG59O1xuY29uc3QgZW5zdXJlTWV0YWRhdGEgPSBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyKSB7XG5cdHRhcmdldC5tZXRhZGF0YSA9IG1lcmdlKFxuXHRcdHtcblx0XHRcdGNvbnRyb2xsZXJFeHRlbnNpb25zOiB7fSxcblx0XHRcdHByb3BlcnRpZXM6IHt9LFxuXHRcdFx0bWFjcm9Db250ZXh0czoge30sXG5cdFx0XHRhZ2dyZWdhdGlvbnM6IHt9LFxuXHRcdFx0YXNzb2NpYXRpb25zOiB7fSxcblx0XHRcdG1ldGhvZHM6IHt9LFxuXHRcdFx0ZXZlbnRzOiB7fSxcblx0XHRcdGludGVyZmFjZXM6IFtdXG5cdFx0fSxcblx0XHR0YXJnZXQubWV0YWRhdGEgfHwge31cblx0KSBhcyBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uO1xuXHRyZXR1cm4gdGFyZ2V0Lm1ldGFkYXRhO1xufTtcblxuLyogI3JlZ2lvbiBDT05UUk9MTEVSIEVYVEVOU0lPTlMgKi9cblxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIGZvbGxvd2luZyBtZXRob2QgaXMgYW4gb3ZlcnJpZGUgZm9yIHRoZSBtZXRob2QgbmFtZSB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gdGhlIHNwZWNpZmljIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG9yIGJhc2UgaW1wbGVtZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGV4dGVuc2lvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiB0aGF0IHdpbGwgYmUgb3ZlcnJpZGVuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWV0aG9kT3ZlcnJpZGUoZXh0ZW5zaW9uTmFtZT86IHN0cmluZyk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyLCBwcm9wZXJ0eUtleSkge1xuXHRcdGlmICghdGFyZ2V0Lm92ZXJyaWRlKSB7XG5cdFx0XHR0YXJnZXQub3ZlcnJpZGUgPSB7fTtcblx0XHR9XG5cdFx0bGV0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQub3ZlcnJpZGU7XG5cdFx0aWYgKGV4dGVuc2lvbk5hbWUpIHtcblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb24pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb24gPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb25bZXh0ZW5zaW9uTmFtZV0pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb25bZXh0ZW5zaW9uTmFtZV0gPSB7fTtcblx0XHRcdH1cblx0XHRcdGN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0LmV4dGVuc2lvbltleHRlbnNpb25OYW1lXTtcblx0XHR9XG5cdFx0Y3VycmVudFRhcmdldFtwcm9wZXJ0eUtleS50b1N0cmluZygpXSA9ICh0YXJnZXQgYXMgYW55KVtwcm9wZXJ0eUtleS50b1N0cmluZygpXTtcblx0fTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCBjYW4gYmUgZXh0ZW5kZWQgYnkgb3RoZXIgY29udHJvbGxlciBleHRlbnNpb24gYmFzZWQgb24gdGhlIGRlZmluZWQgb3ZlcnJpZGVFeGVjdXRpb25UeXBlLlxuICpcbiAqIEBwYXJhbSBvdmVycmlkZUV4ZWN1dGlvblR5cGUgVGhlIE92ZXJyaWRlRXhlY3V0aW9uIGRlZmluaW5nIHdoZW4gdGhlIG92ZXJyaWRlIHNob3VsZCBydW4gKEJlZm9yZSAvIEFmdGVyIC8gSW5zdGVhZClcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgbWV0aG9kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRlbnNpYmxlKG92ZXJyaWRlRXhlY3V0aW9uVHlwZT86IE92ZXJyaWRlRXhlY3V0aW9uKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXIsIHByb3BlcnR5S2V5KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLm92ZXJyaWRlRXhlY3V0aW9uID0gb3ZlcnJpZGVFeGVjdXRpb25UeXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgbWV0aG9kIHdpbGwgYmUgcHVibGljbHkgYXZhaWxhYmxlIGZvciBjb250cm9sbGVyIGV4dGVuc2lvbiB1c2FnZS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGljRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyLCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcik6IHZvaWQge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLnB1YmxpYyA9IHRydWU7XG5cdH07XG59XG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgbWV0aG9kIHdpbGwgYmUgb25seSBhdmFpbGFibGUgZm9yIGludGVybmFsIHVzYWdlIG9mIHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbi5cbiAqXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpdmF0ZUV4dGVuc2lvbigpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlciwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5wdWJsaWMgPSBmYWxzZTtcblx0fTtcbn1cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBtZXRob2QgY2Fubm90IGJlIGZ1cnRoZXIgZXh0ZW5kZWQgYnkgb3RoZXIgY29udHJvbGxlciBleHRlbnNpb24uXG4gKlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyLCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLmZpbmFsID0gdHJ1ZTtcblx0fTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgd2UgYXJlIGdvaW5nIHRvIHVzZSBpbnN0YW50aWF0ZSBhIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHVuZGVyIHRoZSBmb2xsb3dpbmcgdmFyaWFibGUgbmFtZS5cbiAqXG4gKiBAcGFyYW0gZXh0ZW5zaW9uQ2xhc3MgVGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRoYXQgd2lsbCBiZSBpbnN0YW50aWF0ZWRcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzaW5nRXh0ZW5zaW9uKGV4dGVuc2lvbkNsYXNzOiB0eXBlb2YgQ29udHJvbGxlckV4dGVuc2lvbiB8IEZ1bmN0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlciwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxhbnk+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0bWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSBleHRlbnNpb25DbGFzcztcblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIGFueTsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgaSBkZWNsYXJlIGl0IGFzIHN1Y2guXG59XG5cbi8qICNlbmRyZWdpb24gKi9cblxuLyogI3JlZ2lvbiBDT05UUk9MICovXG4vKipcbiAqIEluZGljYXRlcyB0aGF0IHRoZSBwcm9wZXJ0eSBzaGFsbCBiZSBkZWNsYXJlZCBhcyBhbiBldmVudCBvbiB0aGUgY29udHJvbCBtZXRhZGF0YS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmVudCgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sLCBldmVudEtleSkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmV2ZW50c1tldmVudEtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEuZXZlbnRzW2V2ZW50S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIERlZmluZXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSBpbiB0aGUgY29udHJvbCBtZXRhdGFkYS5cbiAqXG4gKiBAcGFyYW0gdWk1UHJvcGVydHlNZXRhZGF0YSBUaGUgcHJvcGVydHkgZGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5KHVpNVByb3BlcnR5TWV0YWRhdGE6IFVJNVByb3BlcnR5TWV0YWRhdGEpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPGFueT4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKCFtZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSB1aTVQcm9wZXJ0eU1ldGFkYXRhO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIGFueTsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgaSBkZWNsYXJlIGl0IGFzIHN1Y2guO1xufVxuLyoqXG4gKiBEZWZpbmVzIGFuZCBjb25maWd1cmUgdGhlIGZvbGxvd2luZyBhZ2dyZWdhdGlvbiBpbiB0aGUgY29udHJvbCBtZXRhdGFkYS5cbiAqXG4gKiBAcGFyYW0gdWk1QWdncmVnYXRpb25NZXRhZGF0YSBUaGUgYWdncmVnYXRpb24gZGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFnZ3JlZ2F0aW9uKHVpNUFnZ3JlZ2F0aW9uTWV0YWRhdGE6IFVJNUFnZ3JlZ2F0aW9uTWV0YWRhdGEpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPGFueT4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKHVpNUFnZ3JlZ2F0aW9uTWV0YWRhdGEubXVsdGlwbGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gVUk1IGRlZmF1bHRzIHRoaXMgdG8gdHJ1ZSBidXQgdGhpcyBpcyBqdXN0IHdlaXJkLi4uXG5cdFx0XHR1aTVBZ2dyZWdhdGlvbk1ldGFkYXRhLm11bHRpcGxlID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmICghbWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSA9IHVpNUFnZ3JlZ2F0aW9uTWV0YWRhdGE7XG5cdFx0fVxuXHRcdGlmICh1aTVBZ2dyZWdhdGlvbk1ldGFkYXRhLmlzRGVmYXVsdCkge1xuXHRcdFx0bWV0YWRhdGEuZGVmYXVsdEFnZ3JlZ2F0aW9uID0gcHJvcGVydHlLZXk7XG5cdFx0fVxuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5pbml0aWFsaXplcjtcblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgYW55OyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC47XG59XG5cbi8qKlxuICogRGVmaW5lcyBhbmQgY29uZmlndXJlIHRoZSBmb2xsb3dpbmcgYXNzb2NpYXRpb24gaW4gdGhlIGNvbnRyb2wgbWV0YXRhZGEuXG4gKlxuICogQHBhcmFtIHVpNUFzc29jaWF0aW9uTWV0YWRhdGEgVGhlIGRlZmluaXRpb24gb2YgdGhlIGFzc29jaWF0aW9uLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzb2NpYXRpb24odWk1QXNzb2NpYXRpb25NZXRhZGF0YTogVUk1QXNzb2NpYXRpb25NZXRhZGF0YSk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2wsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8YW55Pikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0gPSB1aTVBc3NvY2lhdGlvbk1ldGFkYXRhO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIGFueTsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgaSBkZWNsYXJlIGl0IGFzIHN1Y2guO1xufVxuXG4vKipcbiAqIERlZmluZXMgaW4gdGhlIG1ldGFkYXRhIHRoYXQgdGhpcyBjb250cm9sIGltcGxlbWVudHMgYSBzcGVjaWZpYyBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtIGludGVyZmFjZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGltcGxlbWVudGVkIGludGVyZmFjZVxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGltcGxlbWVudEludGVyZmFjZShpbnRlcmZhY2VOYW1lOiBzdHJpbmcpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXG5cdFx0bWV0YWRhdGEuaW50ZXJmYWNlcy5wdXNoKGludGVyZmFjZU5hbWUpO1xuXHR9O1xufVxuXG4vKipcbiAqIEluZGljYXRlcyB0aGF0IHRoZSBmb2xsb3dpbmcgbWV0aG9kIHNob3VsZCBhbHNvIGJlIGV4cG9zZWQgc3RhdGljYWxseSBzbyB3ZSBjYW4gY2FsbCBpdCBmcm9tIHRoZSBYTUwuXG4gKlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHhtbEV2ZW50SGFuZGxlcigpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbCwgcHJvcGVydHlrZXkpIHtcblx0XHRjb25zdCBjdXJyZW50Q29uc3RydWN0b3I6IFVJNUFQSUNvbnRyb2wgPSB0YXJnZXQuY29uc3RydWN0b3IgYXMgdW5rbm93biBhcyBVSTVBUElDb250cm9sO1xuXHRcdGN1cnJlbnRDb25zdHJ1Y3Rvcltwcm9wZXJ0eWtleS50b1N0cmluZygpXSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuXHRcdFx0Y29uc3QgY3VycmVudFRhcmdldCA9IGN1cnJlbnRDb25zdHJ1Y3Rvci5nZXRBUEkoYXJnc1swXSBhcyBVSTVFdmVudCk7XG5cdFx0XHRjdXJyZW50VGFyZ2V0W3Byb3BlcnR5a2V5LnRvU3RyaW5nKCldKC4uLmFyZ3MpO1xuXHRcdH07XG5cdH07XG59XG5cbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIGZvbGxvd2luZyBjbGFzcyBzaG91bGQgZGVmaW5lIGEgdWk1IGNvbnRyb2wgb2YgdGhlIHNwZWNpZmllZCBuYW1lLlxuICpcbiAqIEBwYXJhbSBzVGFyZ2V0IFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgbWFjcm8gQVBJXG4gKiBAcGFyYW0gbWV0YWRhdGFEZWZpbml0aW9uIElubGluZSBtZXRhZGF0YSBkZWZpbml0aW9uXG4gKiBAY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVVJNUNsYXNzKHNUYXJnZXQ6IHN0cmluZywgbWV0YWRhdGFEZWZpbml0aW9uPzogYW55KTogQ2xhc3NEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKGNvbnN0cnVjdG9yOiBGdW5jdGlvbikge1xuXHRcdGlmICghY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEgPSB7fTtcblx0XHR9XG5cdFx0aWYgKG1ldGFkYXRhRGVmaW5pdGlvbikge1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gbWV0YWRhdGFEZWZpbml0aW9uKSB7XG5cdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0gbWV0YWRhdGFEZWZpbml0aW9uW2tleSBhcyBrZXlvZiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlZ2lzdGVyVUk1TWV0YWRhdGEoY29uc3RydWN0b3IsIHNUYXJnZXQsIGNvbnN0cnVjdG9yLnByb3RvdHlwZSk7XG5cdH07XG59XG5cbi8qKlxuICogSW50ZXJuYWwgaGVhdnkgbGlmdGluZyB0aGF0IHdpbGwgdGFrZSBjYXJlIG9mIGNyZWF0aW5nIHRoZSBjbGFzcyBwcm9wZXJ0eSBmb3IgdWk1IHRvIHVzZS5cbiAqXG4gKiBAcGFyYW0gY2xhenogVGhlIGNsYXNzIHByb3RvdHlwZVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIGNyZWF0ZVxuICogQHBhcmFtIGluT2JqIFRoZSBtZXRhZGF0YSBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBtZXRhZGF0YSBjbGFzc1xuICovXG5mdW5jdGlvbiByZWdpc3RlclVJNU1ldGFkYXRhKGNsYXp6OiBhbnksIG5hbWU6IHN0cmluZywgaW5PYmo6IGFueSk6IGFueSB7XG5cdGlmIChjbGF6ei5nZXRNZXRhZGF0YSAmJiBjbGF6ei5nZXRNZXRhZGF0YSgpLmlzQShcInNhcC51aS5jb3JlLm12Yy5Db250cm9sbGVyRXh0ZW5zaW9uXCIpKSB7XG5cdFx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5PYmopLmZvckVhY2goKG9iak5hbWUpID0+IHtcblx0XHRcdGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGluT2JqLCBvYmpOYW1lKTtcblx0XHRcdGlmIChkZXNjcmlwdG9yICYmICFkZXNjcmlwdG9yLmVudW1lcmFibGUpIHtcblx0XHRcdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRcdFx0Ly9cdFx0TG9nLmVycm9yKGBQcm9wZXJ0eSAke29iak5hbWV9IGZyb20gJHtuYW1lfSBzaG91bGQgYmUgZGVjb3JhdGVkIGFzIHB1YmxpY2ApO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IG9iajogYW55ID0ge307XG5cdG9iai5tZXRhZGF0YSA9IGluT2JqLm1ldGFkYXRhIHx8IHt9O1xuXHRvYmoub3ZlcnJpZGUgPSBpbk9iai5vdmVycmlkZTtcblx0b2JqLmNvbnN0cnVjdG9yID0gY2xheno7XG5cdG9iai5tZXRhZGF0YS5iYXNlVHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjbGF6ei5wcm90b3R5cGUpLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpO1xuXG5cdGlmIChjbGF6ej8uZ2V0TWV0YWRhdGEoKT8uZ2V0U3RlcmVvdHlwZSgpID09PSBcImNvbnRyb2xcIikge1xuXHRcdGNvbnN0IHJlbmRlcmVyRGVmaW5pdGlvbiA9IGluT2JqLnJlbmRlcmVyIHx8IGNsYXp6LnJlbmRlcmVyIHx8IGNsYXp6LnJlbmRlcjtcblx0XHRvYmoucmVuZGVyZXIgPSB7IGFwaVZlcnNpb246IDIgfTtcblx0XHRpZiAodHlwZW9mIHJlbmRlcmVyRGVmaW5pdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRvYmoucmVuZGVyZXIucmVuZGVyID0gcmVuZGVyZXJEZWZpbml0aW9uO1xuXHRcdH0gZWxzZSBpZiAocmVuZGVyZXJEZWZpbml0aW9uICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0b2JqLnJlbmRlcmVyID0gcmVuZGVyZXJEZWZpbml0aW9uO1xuXHRcdH1cblx0fVxuXHRvYmoubWV0YWRhdGEuaW50ZXJmYWNlcyA9IGluT2JqLm1ldGFkYXRhPy5pbnRlcmZhY2VzIHx8IGNsYXp6Lm1ldGFkYXRhPy5pbnRlcmZhY2VzO1xuXHRPYmplY3Qua2V5cyhjbGF6ei5wcm90b3R5cGUpLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdGlmIChrZXkgIT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0b2JqW2tleV0gPSBjbGF6ei5wcm90b3R5cGVba2V5XTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhlKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRpZiAob2JqLm1ldGFkYXRhPy5jb250cm9sbGVyRXh0ZW5zaW9ucyAmJiBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnMpLmxlbmd0aCA+IDApIHtcblx0XHRmb3IgKGNvbnN0IGNFeHROYW1lIGluIG9iai5tZXRhZGF0YS5jb250cm9sbGVyRXh0ZW5zaW9ucykge1xuXHRcdFx0b2JqW2NFeHROYW1lXSA9IG9iai5tZXRhZGF0YS5jb250cm9sbGVyRXh0ZW5zaW9uc1tjRXh0TmFtZV07XG5cdFx0fVxuXHR9XG5cdGNvbnN0IG91dHB1dCA9IGNsYXp6LmV4dGVuZChuYW1lLCBvYmopO1xuXHRjb25zdCBmbkluaXQgPSBvdXRwdXQucHJvdG90eXBlLmluaXQ7XG5cdG91dHB1dC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuXHRcdGZuSW5pdCAmJiBmbkluaXQuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0dGhpcy5tZXRhZGF0YSA9IG9iai5tZXRhZGF0YTtcblxuXHRcdGlmIChvYmoubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdGFQcm9wZXJ0eUtleXMuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5S2V5LCB7XG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHNldDogKHY6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkocHJvcGVydHlLZXksIHYpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYUFnZ3JlZ2F0aW9uS2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnMpO1xuXHRcdFx0YUFnZ3JlZ2F0aW9uS2V5cy5mb3JFYWNoKChhZ2dyZWdhdGlvbktleSkgPT4ge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgYWdncmVnYXRpb25LZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0c2V0OiAodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbktleSwgdik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uQ29udGVudCA9IHRoaXMuZ2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25LZXkpO1xuXHRcdFx0XHRcdFx0aWYgKG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnNbYWdncmVnYXRpb25LZXldLm11bHRpcGxlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQgfHwgW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGFBc3NvY2lhdGlvbktleXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEuYXNzb2NpYXRpb25zKTtcblx0XHRcdGFBc3NvY2lhdGlvbktleXMuZm9yRWFjaCgoYXNzb2NpYXRpb25LZXkpID0+IHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGFzc29jaWF0aW9uS2V5LCB7XG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHNldDogKHY6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0QXNzb2NpYXRpb24oYXNzb2NpYXRpb25LZXksIHYpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkNvbnRlbnQgPSB0aGlzLmdldEFzc29jaWF0aW9uKGFzc29jaWF0aW9uS2V5KTtcblx0XHRcdFx0XHRcdGlmIChvYmoubWV0YWRhdGEuYXNzb2NpYXRpb25zW2Fzc29jaWF0aW9uS2V5XS5tdWx0aXBsZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50IHx8IFtdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRjbGF6ei5vdmVycmlkZSA9IGZ1bmN0aW9uIChvRXh0ZW5zaW9uOiBhbnkpIHtcblx0XHRjb25zdCBwb2wgPSB7fTtcblx0XHQocG9sIGFzIGFueSkuY29uc3RydWN0b3IgPSBmdW5jdGlvbiAoLi4uYXJnczogYW55W10pIHtcblx0XHRcdHJldHVybiBjbGF6ei5hcHBseSh0aGlzLCBhcmdzIGFzIGFueSk7XG5cdFx0fTtcblx0XHRjb25zdCBvQ2xhc3MgPSAoTWV0YWRhdGEgYXMgYW55KS5jcmVhdGVDbGFzcyhjbGF6eiwgXCJhbm9ueW1vdXNFeHRlbnNpb25+XCIgKyB1aWQoKSwgcG9sLCBDb250cm9sbGVyTWV0YWRhdGEpO1xuXHRcdG9DbGFzcy5nZXRNZXRhZGF0YSgpLl9zdGF0aWNPdmVycmlkZSA9IG9FeHRlbnNpb247XG5cdFx0b0NsYXNzLmdldE1ldGFkYXRhKCkuX292ZXJyaWRlID0gKGNsYXp6LmdldE1ldGFkYXRhKCkgYXMgYW55KS5fb3ZlcnJpZGU7XG5cdFx0cmV0dXJuIG9DbGFzcztcblx0fTtcblxuXHRPYmplY3RQYXRoLnNldChuYW1lLCBvdXRwdXQpO1xuXHRyZXR1cm4gb3V0cHV0O1xufVxuIl19
|