@sapui5/sap.fe.core 1.102.2 → 1.104.1
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 +6 -6
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +73 -30
- package/src/sap/fe/core/AppComponent.ts +65 -43
- package/src/sap/fe/core/AppStateHandler.js +82 -70
- package/src/sap/fe/core/AppStateHandler.ts +32 -37
- package/src/sap/fe/core/BaseController.js +11 -9
- package/src/sap/fe/core/BaseController.ts +15 -13
- package/src/sap/fe/core/CommonUtils.js +227 -126
- package/src/sap/fe/core/CommonUtils.ts +240 -163
- package/src/sap/fe/core/ExtensionAPI.js +24 -27
- package/src/sap/fe/core/ExtensionAPI.ts +36 -38
- package/src/sap/fe/core/PageController.js +4 -4
- package/src/sap/fe/core/PageController.ts +4 -5
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +6 -6
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +181 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +585 -210
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +246 -96
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
- package/src/sap/fe/core/controllerextensions/EditFlow.js +379 -330
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -245
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +101 -74
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +69 -79
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +67 -67
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +85 -77
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +103 -99
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
- package/src/sap/fe/core/controllerextensions/MassEdit.js +9 -9
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
- package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
- package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
- package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
- package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
- package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +170 -139
- package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
- package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
- package/src/sap/fe/core/controllerextensions/ViewState.js +200 -131
- package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +11 -10
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +190 -141
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +258 -210
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +183 -125
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +213 -156
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +164 -140
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +180 -150
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +71 -41
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +102 -82
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +61 -71
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +56 -64
- package/src/sap/fe/core/controls/Any.js +9 -5
- package/src/sap/fe/core/controls/Any.ts +10 -4
- package/src/sap/fe/core/controls/CommandExecution.js +11 -25
- package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
- package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
- package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
- package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
- package/src/sap/fe/core/controls/FileWrapper.js +7 -2
- package/src/sap/fe/core/controls/FileWrapper.ts +15 -11
- package/src/sap/fe/core/controls/FilterBar.js +6 -2
- package/src/sap/fe/core/controls/FilterBar.ts +13 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
- package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
- package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
- package/src/sap/fe/core/converters/ConverterContext.js +26 -33
- package/src/sap/fe/core/converters/ConverterContext.ts +52 -61
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +17 -15
- package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
- package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
- package/src/sap/fe/core/converters/MetaModelConverter.js +64 -35
- package/src/sap/fe/core/converters/MetaModelConverter.ts +154 -129
- package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
- package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
- package/src/sap/fe/core/converters/annotations/DataField.js +58 -35
- package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
- package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
- package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
- package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +26 -33
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +30 -28
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +60 -61
- package/src/sap/fe/core/converters/controls/Common/Form.js +27 -28
- package/src/sap/fe/core/converters/controls/Common/Form.ts +44 -57
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
- package/src/sap/fe/core/converters/controls/Common/Table.js +181 -197
- package/src/sap/fe/core/converters/controls/Common/Table.ts +251 -280
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +65 -59
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +77 -73
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +101 -97
- package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
- package/src/sap/fe/core/converters/helpers/ID.js +48 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
- package/src/sap/fe/core/converters/helpers/Key.js +7 -7
- package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -5
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +55 -42
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +81 -66
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
- package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/StandardFormatter.js +96 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
- package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
- package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
- package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
- package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
- package/src/sap/fe/core/helpers/BindingToolkit.js +1832 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +396 -269
- package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
- package/src/sap/fe/core/helpers/ClassSupport.ts +37 -10
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -6
- package/src/sap/fe/core/helpers/EditState.ts +5 -10
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
- package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
- package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
- package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
- package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
- package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
- package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
- package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
- package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
- package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
- package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
- package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
- package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
- package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
- package/src/sap/fe/core/library.js +42 -3
- package/src/sap/fe/core/library.ts +38 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
- package/src/sap/fe/core/messagebundle.properties +39 -63
- package/src/sap/fe/core/messagebundle_ar.properties +25 -39
- package/src/sap/fe/core/messagebundle_bg.properties +25 -39
- package/src/sap/fe/core/messagebundle_ca.properties +25 -39
- package/src/sap/fe/core/messagebundle_cs.properties +25 -39
- package/src/sap/fe/core/messagebundle_cy.properties +25 -39
- package/src/sap/fe/core/messagebundle_da.properties +25 -39
- package/src/sap/fe/core/messagebundle_de.properties +25 -39
- package/src/sap/fe/core/messagebundle_el.properties +26 -40
- package/src/sap/fe/core/messagebundle_en.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_GB.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +26 -18
- package/src/sap/fe/core/messagebundle_es.properties +27 -41
- package/src/sap/fe/core/messagebundle_es_MX.properties +25 -39
- package/src/sap/fe/core/messagebundle_et.properties +25 -39
- package/src/sap/fe/core/messagebundle_fi.properties +25 -39
- package/src/sap/fe/core/messagebundle_fr.properties +26 -40
- package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -39
- package/src/sap/fe/core/messagebundle_hi.properties +25 -39
- package/src/sap/fe/core/messagebundle_hr.properties +25 -39
- package/src/sap/fe/core/messagebundle_hu.properties +25 -39
- package/src/sap/fe/core/messagebundle_id.properties +25 -39
- package/src/sap/fe/core/messagebundle_it.properties +41 -55
- package/src/sap/fe/core/messagebundle_iw.properties +25 -39
- package/src/sap/fe/core/messagebundle_ja.properties +25 -39
- package/src/sap/fe/core/messagebundle_kk.properties +25 -39
- package/src/sap/fe/core/messagebundle_ko.properties +30 -44
- package/src/sap/fe/core/messagebundle_lt.properties +25 -39
- package/src/sap/fe/core/messagebundle_lv.properties +25 -39
- package/src/sap/fe/core/messagebundle_ms.properties +25 -39
- package/src/sap/fe/core/messagebundle_nl.properties +27 -41
- package/src/sap/fe/core/messagebundle_no.properties +25 -39
- package/src/sap/fe/core/messagebundle_pl.properties +26 -40
- package/src/sap/fe/core/messagebundle_pt.properties +26 -40
- package/src/sap/fe/core/messagebundle_pt_PT.properties +25 -39
- package/src/sap/fe/core/messagebundle_ro.properties +25 -39
- package/src/sap/fe/core/messagebundle_ru.properties +25 -39
- package/src/sap/fe/core/messagebundle_sh.properties +25 -39
- package/src/sap/fe/core/messagebundle_sk.properties +25 -39
- package/src/sap/fe/core/messagebundle_sl.properties +25 -39
- package/src/sap/fe/core/messagebundle_sv.properties +25 -39
- package/src/sap/fe/core/messagebundle_th.properties +25 -39
- package/src/sap/fe/core/messagebundle_tr.properties +25 -39
- package/src/sap/fe/core/messagebundle_uk.properties +25 -39
- package/src/sap/fe/core/messagebundle_vi.properties +25 -39
- package/src/sap/fe/core/messagebundle_zh_CN.properties +25 -39
- package/src/sap/fe/core/messagebundle_zh_TW.properties +25 -39
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +97 -69
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +68 -69
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +61 -49
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
- package/src/sap/fe/core/services/ShellServicesFactory.js +92 -76
- package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +224 -198
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +138 -139
- package/src/sap/fe/core/support/CommonHelper.js +3 -2
- package/src/sap/fe/core/support/CommonHelper.ts +9 -13
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.ts +5 -5
- package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
- package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
- package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
- package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
- package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
- package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
- package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
- package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
- package/src/sap/fe/core/templating/FilterHelper.js +16 -15
- package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
- package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
- package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
- package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
- package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
- package/src/sap/fe/core/templating/UIFormatters.js +152 -95
- package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +2 -2
- package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
|
@@ -7,6 +7,20 @@ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/Templ
|
|
|
7
7
|
|
|
8
8
|
var resolveDynamicExpression = DynamicAnnotationPathHelper.resolveDynamicExpression;
|
|
9
9
|
|
|
10
|
+
function _catch(body, recover) {
|
|
11
|
+
try {
|
|
12
|
+
var result = body();
|
|
13
|
+
} catch (e) {
|
|
14
|
+
return recover(e);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
if (result && result.then) {
|
|
18
|
+
return result.then(void 0, recover);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
|
|
10
24
|
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
|
|
11
25
|
|
|
12
26
|
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
@@ -28,7 +42,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/Templ
|
|
|
28
42
|
var oComponent = oContext.scopeObject;
|
|
29
43
|
var oAppComponent = Component.getOwnerComponentFor(oComponent);
|
|
30
44
|
var oMetaModel = oAppComponent.getMetaModel();
|
|
31
|
-
var sStableId = oAppComponent.getMetadata().getComponentName()
|
|
45
|
+
var sStableId = "".concat(oAppComponent.getMetadata().getComponentName(), "::").concat(oAppComponent.getLocalId(oComponent.getId()));
|
|
32
46
|
var aEnhanceI18n = oComponent.getEnhanceI18n() || [];
|
|
33
47
|
var sAppNamespace;
|
|
34
48
|
this.oFactory = oContext.factory;
|
|
@@ -46,12 +60,12 @@ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/Templ
|
|
|
46
60
|
if (oResourceModel && oResourceModel.isA("sap.ui.model.resource.ResourceModel")) {
|
|
47
61
|
aEnhanceI18n[i] = oResourceModel;
|
|
48
62
|
} else {
|
|
49
|
-
aEnhanceI18n[i] = sAppNamespace
|
|
63
|
+
aEnhanceI18n[i] = "".concat(sAppNamespace, ".").concat(aEnhanceI18n[i].replace(".properties", ""));
|
|
50
64
|
}
|
|
51
65
|
}
|
|
52
66
|
}
|
|
53
67
|
|
|
54
|
-
var sCacheIdentifier = oAppComponent.getMetadata().getName()
|
|
68
|
+
var sCacheIdentifier = "".concat(oAppComponent.getMetadata().getName(), "_").concat(sStableId, "_").concat(sap.ui.getCore().getConfiguration().getLanguageTag());
|
|
55
69
|
aServiceDependencies.push(ServiceFactoryRegistry.get("sap.fe.core.services.ResourceModelService").createInstance({
|
|
56
70
|
scopeType: "component",
|
|
57
71
|
scopeObject: oComponent,
|
|
@@ -97,7 +111,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/Templ
|
|
|
97
111
|
var oSideEffectsServices = oAppComponent.getSideEffectsService();
|
|
98
112
|
oSideEffectsServices.initializeSideEffects(oAppComponent.getEnvironmentCapabilities().getCapabilities()); // In case there is no cache key we ignore the view cache
|
|
99
113
|
|
|
100
|
-
sPageModelCacheKey = sCacheKey ? sCacheKey
|
|
114
|
+
sPageModelCacheKey = sCacheKey ? "".concat(sCacheKey, "-").concat(sVersionInfo, "-").concat(sStableId, "-").concat(oShellServices.instanceType, "-pageModel") : undefined;
|
|
101
115
|
return Promise.all(aDependenciesResult.concat([_this._getCachedModel(sPageModelCacheKey)]));
|
|
102
116
|
}).then(function (aDependenciesResult) {
|
|
103
117
|
var oResourceModel = aDependenciesResult[0];
|
|
@@ -134,7 +148,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/Templ
|
|
|
134
148
|
* This is useful for our demokit !
|
|
135
149
|
*
|
|
136
150
|
* @param oComponent
|
|
137
|
-
* @returns
|
|
151
|
+
* @returns A promise indicating when the view is refreshed
|
|
138
152
|
* @private
|
|
139
153
|
*/
|
|
140
154
|
;
|
|
@@ -157,217 +171,223 @@ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/Templ
|
|
|
157
171
|
};
|
|
158
172
|
|
|
159
173
|
_proto.createView = function createView(oResourceModel, sStableId, sCacheKey, sPageModelCacheKey, oPageModelCache, TemplateConverter, MetaModelConverter) {
|
|
160
|
-
|
|
174
|
+
try {
|
|
175
|
+
var _this3 = this;
|
|
176
|
+
|
|
177
|
+
_this3.resourceModel = oResourceModel;
|
|
178
|
+
_this3.stableId = sStableId;
|
|
179
|
+
_this3.TemplateConverter = TemplateConverter;
|
|
180
|
+
_this3.MetaModelConverter = MetaModelConverter;
|
|
181
|
+
|
|
182
|
+
var oContext = _this3.getContext();
|
|
183
|
+
|
|
184
|
+
var mServiceSettings = oContext.settings;
|
|
185
|
+
var sConverterType = mServiceSettings.converterType;
|
|
186
|
+
var oComponent = oContext.scopeObject;
|
|
187
|
+
var oAppComponent = Component.getOwnerComponentFor(oComponent);
|
|
188
|
+
var sFullContextPath = oAppComponent.getRoutingService().getTargetInformationFor(oComponent).options.settings.fullContextPath;
|
|
189
|
+
var oMetaModel = oAppComponent.getMetaModel();
|
|
190
|
+
var oManifestContent = oAppComponent.getManifest();
|
|
191
|
+
var oDeviceModel = new JSONModel(Device).setDefaultBindingMode("OneWay");
|
|
192
|
+
var oManifestModel = new JSONModel(oManifestContent);
|
|
193
|
+
var bError = false;
|
|
194
|
+
|
|
195
|
+
function getViewSettings() {
|
|
196
|
+
var aSplitPath = sFullContextPath.split("/");
|
|
197
|
+
var sEntitySetPath = aSplitPath.reduce(function (sPathSoFar, sNextPathPart) {
|
|
198
|
+
if (sNextPathPart === "") {
|
|
199
|
+
return sPathSoFar;
|
|
200
|
+
}
|
|
161
201
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
var oContext = this.getContext();
|
|
167
|
-
var mServiceSettings = oContext.settings;
|
|
168
|
-
var sConverterType = mServiceSettings.converterType;
|
|
169
|
-
var oComponent = oContext.scopeObject;
|
|
170
|
-
var oAppComponent = Component.getOwnerComponentFor(oComponent);
|
|
171
|
-
var sFullContextPath = oAppComponent.getRoutingService().getTargetInformationFor(oComponent).options.settings.fullContextPath;
|
|
172
|
-
var oMetaModel = oAppComponent.getMetaModel();
|
|
173
|
-
var oManifestContent = oAppComponent.getManifest();
|
|
174
|
-
var oDeviceModel = new JSONModel(Device).setDefaultBindingMode("OneWay");
|
|
175
|
-
var oManifestModel = new JSONModel(oManifestContent);
|
|
176
|
-
var bError = false;
|
|
177
|
-
var oPageModel, oViewDataModel, oViewSettings, mViewData;
|
|
178
|
-
|
|
179
|
-
function getViewSettings() {
|
|
180
|
-
var aSplitPath = sFullContextPath.split("/");
|
|
181
|
-
var sEntitySetPath = aSplitPath.reduce(function (sPathSoFar, sNextPathPart) {
|
|
182
|
-
if (sNextPathPart === "") {
|
|
183
|
-
return sPathSoFar;
|
|
184
|
-
}
|
|
202
|
+
if (sPathSoFar === "") {
|
|
203
|
+
sPathSoFar = "/".concat(sNextPathPart);
|
|
204
|
+
} else {
|
|
205
|
+
var oTarget = oMetaModel.getObject("".concat(sPathSoFar, "/$NavigationPropertyBinding/").concat(sNextPathPart));
|
|
185
206
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
var oTarget = oMetaModel.getObject(sPathSoFar + "/$NavigationPropertyBinding/" + sNextPathPart);
|
|
207
|
+
if (oTarget && Object.keys(oTarget).length > 0) {
|
|
208
|
+
sPathSoFar += "/$NavigationPropertyBinding";
|
|
209
|
+
}
|
|
190
210
|
|
|
191
|
-
|
|
192
|
-
sPathSoFar += "/$NavigationPropertyBinding";
|
|
211
|
+
sPathSoFar += "/".concat(sNextPathPart);
|
|
193
212
|
}
|
|
194
213
|
|
|
195
|
-
sPathSoFar
|
|
196
|
-
}
|
|
214
|
+
return sPathSoFar;
|
|
215
|
+
}, "");
|
|
216
|
+
return {
|
|
217
|
+
type: "XML",
|
|
218
|
+
preprocessors: {
|
|
219
|
+
xml: {
|
|
220
|
+
bindingContexts: {
|
|
221
|
+
entitySet: sEntitySetPath ? oMetaModel.createBindingContext(sEntitySetPath) : null,
|
|
222
|
+
fullContextPath: sFullContextPath ? oMetaModel.createBindingContext(sFullContextPath) : null,
|
|
223
|
+
contextPath: sFullContextPath ? oMetaModel.createBindingContext(sFullContextPath) : null,
|
|
224
|
+
converterContext: oPageModel.createBindingContext("/", undefined, {
|
|
225
|
+
noResolve: true
|
|
226
|
+
}),
|
|
227
|
+
viewData: mViewData ? oViewDataModel.createBindingContext("/") : null
|
|
228
|
+
},
|
|
229
|
+
models: {
|
|
230
|
+
entitySet: oMetaModel,
|
|
231
|
+
fullContextPath: oMetaModel,
|
|
232
|
+
contextPath: oMetaModel,
|
|
233
|
+
"sap.fe.i18n": oResourceModel,
|
|
234
|
+
metaModel: oMetaModel,
|
|
235
|
+
"device": oDeviceModel,
|
|
236
|
+
manifest: oManifestModel,
|
|
237
|
+
converterContext: oPageModel,
|
|
238
|
+
viewData: oViewDataModel
|
|
239
|
+
},
|
|
240
|
+
appComponent: oAppComponent
|
|
241
|
+
}
|
|
242
|
+
},
|
|
243
|
+
id: sStableId,
|
|
244
|
+
viewName: mServiceSettings.viewName || oComponent.getViewName(),
|
|
245
|
+
viewData: mViewData,
|
|
246
|
+
cache: {
|
|
247
|
+
keys: [sCacheKey]
|
|
248
|
+
},
|
|
249
|
+
models: {
|
|
250
|
+
"sap.fe.i18n": oResourceModel
|
|
251
|
+
},
|
|
252
|
+
height: "100%"
|
|
253
|
+
};
|
|
254
|
+
}
|
|
197
255
|
|
|
198
|
-
|
|
199
|
-
}, "");
|
|
200
|
-
var oViewSettings = {
|
|
201
|
-
type: "XML",
|
|
202
|
-
preprocessors: {
|
|
203
|
-
xml: {
|
|
204
|
-
bindingContexts: {
|
|
205
|
-
entitySet: sEntitySetPath ? oMetaModel.createBindingContext(sEntitySetPath) : null,
|
|
206
|
-
fullContextPath: sFullContextPath ? oMetaModel.createBindingContext(sFullContextPath) : null,
|
|
207
|
-
contextPath: sFullContextPath ? oMetaModel.createBindingContext(sFullContextPath) : null,
|
|
208
|
-
converterContext: oPageModel.createBindingContext("/", undefined, {
|
|
209
|
-
noResolve: true
|
|
210
|
-
}),
|
|
211
|
-
viewData: mViewData ? oViewDataModel.createBindingContext("/") : null
|
|
212
|
-
},
|
|
213
|
-
models: {
|
|
214
|
-
entitySet: oMetaModel,
|
|
215
|
-
fullContextPath: oMetaModel,
|
|
216
|
-
contextPath: oMetaModel,
|
|
217
|
-
"sap.fe.i18n": oResourceModel,
|
|
218
|
-
metaModel: oMetaModel,
|
|
219
|
-
"device": oDeviceModel,
|
|
220
|
-
manifest: oManifestModel,
|
|
221
|
-
converterContext: oPageModel,
|
|
222
|
-
viewData: oViewDataModel
|
|
223
|
-
},
|
|
224
|
-
appComponent: oAppComponent
|
|
225
|
-
}
|
|
226
|
-
},
|
|
227
|
-
id: sStableId,
|
|
228
|
-
viewName: mServiceSettings.viewName || oComponent.getViewName(),
|
|
229
|
-
viewData: mViewData,
|
|
230
|
-
cache: {
|
|
231
|
-
keys: [sCacheKey]
|
|
232
|
-
},
|
|
233
|
-
models: {
|
|
234
|
-
"sap.fe.i18n": oResourceModel
|
|
235
|
-
},
|
|
236
|
-
height: "100%"
|
|
237
|
-
};
|
|
238
|
-
return oViewSettings;
|
|
239
|
-
}
|
|
256
|
+
var oPageModel, oViewDataModel, oViewSettings, mViewData;
|
|
240
257
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
258
|
+
var createErrorPage = function (reason) {
|
|
259
|
+
// just replace the view name and add an additional model containing the reason, but
|
|
260
|
+
// keep the other settings
|
|
261
|
+
Log.error(reason.message, reason);
|
|
262
|
+
oViewSettings.viewName = mServiceSettings.errorViewName || "sap.fe.core.services.view.TemplatingErrorPage";
|
|
263
|
+
oViewSettings.preprocessors.xml.models["error"] = new JSONModel(reason);
|
|
264
|
+
return oComponent.runAsOwner(function () {
|
|
265
|
+
return View.create(oViewSettings).then(function (oView) {
|
|
266
|
+
_this3.oView = oView;
|
|
250
267
|
|
|
251
|
-
|
|
268
|
+
_this3.oView.setModel(new ManagedObjectModel(_this3.oView), "$view");
|
|
252
269
|
|
|
253
|
-
|
|
254
|
-
|
|
270
|
+
oComponent.setAggregation("rootControl", _this3.oView);
|
|
271
|
+
return sCacheKey;
|
|
272
|
+
});
|
|
255
273
|
});
|
|
256
|
-
}
|
|
257
|
-
};
|
|
258
|
-
|
|
259
|
-
return oAppComponent.getService("routingService").then(function (oRoutingService) {
|
|
260
|
-
// Retrieve the viewLevel for the component
|
|
261
|
-
var oTargetInfo = oRoutingService.getTargetInformationFor(oComponent);
|
|
262
|
-
var mOutbounds = oManifestContent["sap.app"] && oManifestContent["sap.app"].crossNavigation && oManifestContent["sap.app"].crossNavigation.outbounds;
|
|
263
|
-
var mNavigation = oComponent.getNavigation() || {};
|
|
264
|
-
Object.keys(mNavigation).forEach(function (navigationObjectKey) {
|
|
265
|
-
var navigationObject = mNavigation[navigationObjectKey];
|
|
266
|
-
var outboundConfig;
|
|
267
|
-
|
|
268
|
-
if (navigationObject.detail && navigationObject.detail.outbound && mOutbounds[navigationObject.detail.outbound]) {
|
|
269
|
-
outboundConfig = mOutbounds[navigationObject.detail.outbound];
|
|
270
|
-
navigationObject.detail.outboundDetail = {
|
|
271
|
-
semanticObject: outboundConfig.semanticObject,
|
|
272
|
-
action: outboundConfig.action,
|
|
273
|
-
parameters: outboundConfig.parameters
|
|
274
|
-
};
|
|
275
|
-
}
|
|
274
|
+
};
|
|
276
275
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
276
|
+
return Promise.resolve(_catch(function () {
|
|
277
|
+
return Promise.resolve(oAppComponent.getService("routingService")).then(function (oRoutingService) {
|
|
278
|
+
// Retrieve the viewLevel for the component
|
|
279
|
+
var oTargetInfo = oRoutingService.getTargetInformationFor(oComponent);
|
|
280
|
+
var mOutbounds = oManifestContent["sap.app"] && oManifestContent["sap.app"].crossNavigation && oManifestContent["sap.app"].crossNavigation.outbounds;
|
|
281
|
+
var mNavigation = oComponent.getNavigation() || {};
|
|
282
|
+
Object.keys(mNavigation).forEach(function (navigationObjectKey) {
|
|
283
|
+
var navigationObject = mNavigation[navigationObjectKey];
|
|
284
|
+
var outboundConfig;
|
|
285
|
+
|
|
286
|
+
if (navigationObject.detail && navigationObject.detail.outbound && mOutbounds[navigationObject.detail.outbound]) {
|
|
287
|
+
outboundConfig = mOutbounds[navigationObject.detail.outbound];
|
|
288
|
+
navigationObject.detail.outboundDetail = {
|
|
289
|
+
semanticObject: outboundConfig.semanticObject,
|
|
290
|
+
action: outboundConfig.action,
|
|
291
|
+
parameters: outboundConfig.parameters
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
if (navigationObject.create && navigationObject.create.outbound && mOutbounds[navigationObject.create.outbound]) {
|
|
296
|
+
outboundConfig = mOutbounds[navigationObject.create.outbound];
|
|
297
|
+
navigationObject.create.outboundDetail = {
|
|
298
|
+
semanticObject: outboundConfig.semanticObject,
|
|
299
|
+
action: outboundConfig.action,
|
|
300
|
+
parameters: outboundConfig.parameters
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
mViewData = {
|
|
305
|
+
navigation: mNavigation,
|
|
306
|
+
viewLevel: oTargetInfo.viewLevel,
|
|
307
|
+
stableId: sStableId,
|
|
308
|
+
contentDensities: oManifestContent["sap.ui5"].contentDensities,
|
|
309
|
+
resourceBundle: oResourceModel.__bundle,
|
|
310
|
+
fullContextPath: sFullContextPath,
|
|
311
|
+
isDesktop: Device.system.desktop,
|
|
312
|
+
isPhone: Device.system.phone
|
|
283
313
|
};
|
|
284
|
-
}
|
|
285
|
-
});
|
|
286
|
-
mViewData = {
|
|
287
|
-
navigation: mNavigation,
|
|
288
|
-
viewLevel: oTargetInfo.viewLevel,
|
|
289
|
-
stableId: sStableId,
|
|
290
|
-
contentDensities: oManifestContent["sap.ui5"].contentDensities,
|
|
291
|
-
resourceBundle: oResourceModel.__bundle,
|
|
292
|
-
fullContextPath: sFullContextPath,
|
|
293
|
-
isDesktop: Device.system.desktop,
|
|
294
|
-
isPhone: Device.system.phone
|
|
295
|
-
};
|
|
296
314
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
315
|
+
if (oComponent.getViewData) {
|
|
316
|
+
Object.assign(mViewData, oComponent.getViewData());
|
|
317
|
+
}
|
|
300
318
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
319
|
+
var oShellServices = oAppComponent.getShellServices();
|
|
320
|
+
mViewData.converterType = sConverterType;
|
|
321
|
+
mViewData.shellContentDensity = oShellServices.getContentDensity();
|
|
322
|
+
mViewData.useNewLazyLoading = UriParameters.fromQuery(window.location.search).get("sap-fe-xx-lazyloadingtest") === "true";
|
|
323
|
+
mViewData.retrieveTextFromValueList = oManifestContent["sap.fe"] && oManifestContent["sap.fe"].form ? oManifestContent["sap.fe"].form.retrieveTextFromValueList : undefined;
|
|
324
|
+
oViewDataModel = new JSONModel(mViewData);
|
|
325
|
+
|
|
326
|
+
if (mViewData && mViewData.controlConfiguration) {
|
|
327
|
+
Object.keys(mViewData.controlConfiguration).forEach(function (sAnnotationPath) {
|
|
328
|
+
if (sAnnotationPath.indexOf("[") !== -1) {
|
|
329
|
+
var sTargetAnnotationPath = resolveDynamicExpression(sAnnotationPath, oMetaModel);
|
|
330
|
+
mViewData.controlConfiguration[sTargetAnnotationPath] = mViewData.controlConfiguration[sAnnotationPath];
|
|
331
|
+
}
|
|
332
|
+
});
|
|
315
333
|
}
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
334
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
335
|
+
MetaModelConverter.convertTypes(oMetaModel, oAppComponent.getEnvironmentCapabilities().getCapabilities());
|
|
336
|
+
oPageModel = new TemplateModel(function () {
|
|
337
|
+
try {
|
|
338
|
+
if (oPageModelCache) {
|
|
339
|
+
return oPageModelCache;
|
|
340
|
+
} else {
|
|
341
|
+
var oDiagnostics = oAppComponent.getDiagnostics();
|
|
342
|
+
var iIssueCount = oDiagnostics.getIssues().length;
|
|
343
|
+
var oConverterPageModel = TemplateConverter.convertPage(sConverterType, oMetaModel, mViewData, oDiagnostics, sFullContextPath, oAppComponent.getEnvironmentCapabilities().getCapabilities());
|
|
344
|
+
var aIssues = oDiagnostics.getIssues();
|
|
345
|
+
var aAddedIssues = aIssues.slice(iIssueCount);
|
|
346
|
+
|
|
347
|
+
if (aAddedIssues.length > 0) {
|
|
348
|
+
Log.warning("Some issues have been detected in your project, please check the UI5 support assistant rule for sap.fe.core");
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
return oConverterPageModel;
|
|
352
|
+
}
|
|
353
|
+
} catch (error) {
|
|
354
|
+
Log.error(error, error);
|
|
355
|
+
return {};
|
|
333
356
|
}
|
|
357
|
+
}, oMetaModel);
|
|
334
358
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
} catch (error) {
|
|
338
|
-
Log.error(error, error);
|
|
339
|
-
return {};
|
|
340
|
-
}
|
|
341
|
-
}, oMetaModel);
|
|
342
|
-
|
|
343
|
-
if (!bError) {
|
|
344
|
-
oViewSettings = getViewSettings(); // Setting the pageModel on the component for potential reuse
|
|
359
|
+
if (!bError) {
|
|
360
|
+
oViewSettings = getViewSettings(); // Setting the pageModel on the component for potential reuse
|
|
345
361
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
362
|
+
oComponent.setModel(oPageModel, "_pageModel");
|
|
363
|
+
return oComponent.runAsOwner(function () {
|
|
364
|
+
return View.create(oViewSettings).catch(createErrorPage).then(function (oView) {
|
|
365
|
+
_this3.oView = oView;
|
|
350
366
|
|
|
351
|
-
|
|
367
|
+
_this3.oView.setModel(new ManagedObjectModel(_this3.oView), "$view");
|
|
352
368
|
|
|
353
|
-
|
|
369
|
+
_this3.oView.setModel(oViewDataModel, "viewData");
|
|
354
370
|
|
|
355
|
-
|
|
371
|
+
oComponent.setAggregation("rootControl", _this3.oView); // Fire and forget in the cache
|
|
356
372
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
373
|
+
if (!oPageModelCache) {
|
|
374
|
+
_this3._setCachedModel(sPageModelCacheKey, oPageModel.getData());
|
|
375
|
+
}
|
|
360
376
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
377
|
+
return sCacheKey;
|
|
378
|
+
}).catch(function (e) {
|
|
379
|
+
return Log.error(e.message, e);
|
|
380
|
+
});
|
|
381
|
+
});
|
|
382
|
+
}
|
|
365
383
|
});
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
})
|
|
384
|
+
}, function (error) {
|
|
385
|
+
Log.error(error.message, error);
|
|
386
|
+
throw new Error("Error while creating view : ".concat(error));
|
|
387
|
+
}));
|
|
388
|
+
} catch (e) {
|
|
389
|
+
return Promise.reject(e);
|
|
390
|
+
}
|
|
371
391
|
};
|
|
372
392
|
|
|
373
393
|
_proto.getView = function getView() {
|
|
@@ -380,8 +400,14 @@ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/Templ
|
|
|
380
400
|
|
|
381
401
|
_proto.exit = function exit() {
|
|
382
402
|
// Deregister global instance
|
|
383
|
-
|
|
384
|
-
|
|
403
|
+
if (this.oResourceModelService) {
|
|
404
|
+
this.oResourceModelService.destroy();
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
if (this.oCacheHandlerService) {
|
|
408
|
+
this.oCacheHandlerService.destroy();
|
|
409
|
+
}
|
|
410
|
+
|
|
385
411
|
this.oFactory.removeGlobalInstance();
|
|
386
412
|
};
|
|
387
413
|
|
|
@@ -392,15 +418,15 @@ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/Templ
|
|
|
392
418
|
_inheritsLoose(TemplatedViewServiceFactory, _ServiceFactory);
|
|
393
419
|
|
|
394
420
|
function TemplatedViewServiceFactory() {
|
|
395
|
-
var
|
|
421
|
+
var _this4;
|
|
396
422
|
|
|
397
423
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
398
424
|
args[_key] = arguments[_key];
|
|
399
425
|
}
|
|
400
426
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
return
|
|
427
|
+
_this4 = _ServiceFactory.call.apply(_ServiceFactory, [this].concat(args)) || this;
|
|
428
|
+
_this4._oInstanceRegistry = {};
|
|
429
|
+
return _this4;
|
|
404
430
|
}
|
|
405
431
|
|
|
406
432
|
var _proto2 = TemplatedViewServiceFactory.prototype;
|
|
@@ -429,4 +455,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/Templ
|
|
|
429
455
|
|
|
430
456
|
return TemplatedViewServiceFactory;
|
|
431
457
|
}, false);
|
|
432
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeS50cyJdLCJuYW1lcyI6WyJUZW1wbGF0ZWRWaWV3U2VydmljZSIsImluaXQiLCJhU2VydmljZURlcGVuZGVuY2llcyIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsIm9Db21wb25lbnQiLCJzY29wZU9iamVjdCIsIm9BcHBDb21wb25lbnQiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJzU3RhYmxlSWQiLCJnZXRNZXRhZGF0YSIsImdldENvbXBvbmVudE5hbWUiLCJnZXRMb2NhbElkIiwiZ2V0SWQiLCJhRW5oYW5jZUkxOG4iLCJnZXRFbmhhbmNlSTE4biIsInNBcHBOYW1lc3BhY2UiLCJvRmFjdG9yeSIsImZhY3RvcnkiLCJpIiwibGVuZ3RoIiwib1Jlc291cmNlTW9kZWwiLCJnZXRNb2RlbCIsImlzQSIsInJlcGxhY2UiLCJzQ2FjaGVJZGVudGlmaWVyIiwiZ2V0TmFtZSIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldENvbmZpZ3VyYXRpb24iLCJnZXRMYW5ndWFnZVRhZyIsInB1c2giLCJTZXJ2aWNlRmFjdG9yeVJlZ2lzdHJ5IiwiZ2V0IiwiY3JlYXRlSW5zdGFuY2UiLCJzY29wZVR5cGUiLCJzZXR0aW5ncyIsImJ1bmRsZXMiLCJlbmhhbmNlSTE4biIsIm1vZGVsTmFtZSIsInRoZW4iLCJvUmVzb3VyY2VNb2RlbFNlcnZpY2UiLCJnZXRSZXNvdXJjZU1vZGVsIiwibWV0YU1vZGVsIiwiYXBwQ29tcG9uZW50IiwiY29tcG9uZW50Iiwib0NhY2hlSGFuZGxlclNlcnZpY2UiLCJ2YWxpZGF0ZUNhY2hlS2V5IiwiVmVyc2lvbkluZm8iLCJsb2FkIiwib0luZm8iLCJzVGltZXN0YW1wIiwibGlicmFyaWVzIiwiYnVpbGRpbmZvIiwiYnVpbGR0aW1lIiwiZm9yRWFjaCIsIm9MaWJyYXJ5IiwiYnVpbGRUaW1lc3RhbXAiLCJjYXRjaCIsInNQYWdlTW9kZWxDYWNoZUtleSIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsImFsbCIsImFEZXBlbmRlbmNpZXNSZXN1bHQiLCJzQ2FjaGVLZXkiLCJzVmVyc2lvbkluZm8iLCJvU2hlbGxTZXJ2aWNlcyIsImdldFNoZWxsU2VydmljZXMiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlcyIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImluaXRpYWxpemVTaWRlRWZmZWN0cyIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiaW5zdGFuY2VUeXBlIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiX2dldENhY2hlZE1vZGVsIiwib1BhZ2VNb2RlbENhY2hlIiwicmVzb2x2ZSIsInJlcXVpcmUiLCJUZW1wbGF0ZUNvbnZlcnRlciIsIk1ldGFNb2RlbENvbnZlcnRlciIsImNyZWF0ZVZpZXciLCJnZXRJbnN0YW5jZSIsImludmFsaWRhdGVJZk5lZWRlZCIsIkNvcmUiLCJnZXRWaWV3Q2FjaGUiLCJDYWNoZU1hbmFnZXIiLCJfc2V0Q2FjaGVkTW9kZWwiLCJvQ2FjaGVNb2RlbCIsInNldCIsInJlZnJlc2hWaWV3Iiwib1Jvb3RWaWV3IiwiZ2V0Um9vdENvbnRyb2wiLCJkZXN0cm95Iiwib1ZpZXciLCJyZXNvdXJjZU1vZGVsIiwic3RhYmxlSWQiLCJvQ29udGFpbmVyIiwiaW52YWxpZGF0ZSIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwibVNlcnZpY2VTZXR0aW5ncyIsInNDb252ZXJ0ZXJUeXBlIiwiY29udmVydGVyVHlwZSIsInNGdWxsQ29udGV4dFBhdGgiLCJnZXRSb3V0aW5nU2VydmljZSIsImdldFRhcmdldEluZm9ybWF0aW9uRm9yIiwib3B0aW9ucyIsImZ1bGxDb250ZXh0UGF0aCIsIm9NYW5pZmVzdENvbnRlbnQiLCJnZXRNYW5pZmVzdCIsIm9EZXZpY2VNb2RlbCIsIkpTT05Nb2RlbCIsIkRldmljZSIsInNldERlZmF1bHRCaW5kaW5nTW9kZSIsIm9NYW5pZmVzdE1vZGVsIiwiYkVycm9yIiwib1BhZ2VNb2RlbCIsIm9WaWV3RGF0YU1vZGVsIiwib1ZpZXdTZXR0aW5ncyIsIm1WaWV3RGF0YSIsImdldFZpZXdTZXR0aW5ncyIsImFTcGxpdFBhdGgiLCJzcGxpdCIsInNFbnRpdHlTZXRQYXRoIiwicmVkdWNlIiwic1BhdGhTb0ZhciIsInNOZXh0UGF0aFBhcnQiLCJvVGFyZ2V0IiwiZ2V0T2JqZWN0IiwiT2JqZWN0Iiwia2V5cyIsInR5cGUiLCJwcmVwcm9jZXNzb3JzIiwieG1sIiwiYmluZGluZ0NvbnRleHRzIiwiZW50aXR5U2V0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJjb250ZXh0UGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJub1Jlc29sdmUiLCJ2aWV3RGF0YSIsIm1vZGVscyIsIm1hbmlmZXN0IiwiaWQiLCJ2aWV3TmFtZSIsImdldFZpZXdOYW1lIiwiY2FjaGUiLCJoZWlnaHQiLCJjcmVhdGVFcnJvclBhZ2UiLCJyZWFzb24iLCJtZXNzYWdlIiwiZXJyb3JWaWV3TmFtZSIsInJ1bkFzT3duZXIiLCJWaWV3IiwiY3JlYXRlIiwic2V0TW9kZWwiLCJNYW5hZ2VkT2JqZWN0TW9kZWwiLCJzZXRBZ2dyZWdhdGlvbiIsImdldFNlcnZpY2UiLCJvUm91dGluZ1NlcnZpY2UiLCJvVGFyZ2V0SW5mbyIsIm1PdXRib3VuZHMiLCJjcm9zc05hdmlnYXRpb24iLCJvdXRib3VuZHMiLCJtTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb24iLCJuYXZpZ2F0aW9uT2JqZWN0S2V5IiwibmF2aWdhdGlvbk9iamVjdCIsIm91dGJvdW5kQ29uZmlnIiwiZGV0YWlsIiwib3V0Ym91bmQiLCJvdXRib3VuZERldGFpbCIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwicGFyYW1ldGVycyIsIm5hdmlnYXRpb24iLCJ2aWV3TGV2ZWwiLCJjb250ZW50RGVuc2l0aWVzIiwicmVzb3VyY2VCdW5kbGUiLCJfX2J1bmRsZSIsImlzRGVza3RvcCIsInN5c3RlbSIsImRlc2t0b3AiLCJpc1Bob25lIiwicGhvbmUiLCJnZXRWaWV3RGF0YSIsImFzc2lnbiIsInNoZWxsQ29udGVudERlbnNpdHkiLCJnZXRDb250ZW50RGVuc2l0eSIsInVzZU5ld0xhenlMb2FkaW5nIiwiVXJpUGFyYW1ldGVycyIsImZyb21RdWVyeSIsIndpbmRvdyIsImxvY2F0aW9uIiwic2VhcmNoIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsImZvcm0iLCJfdXNlTmV3VmFsdWVIZWxwIiwiYXBwIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJzQW5ub3RhdGlvblBhdGgiLCJpbmRleE9mIiwic1RhcmdldEFubm90YXRpb25QYXRoIiwicmVzb2x2ZUR5bmFtaWNFeHByZXNzaW9uIiwiY29udmVydFR5cGVzIiwiVGVtcGxhdGVNb2RlbCIsIm9EaWFnbm9zdGljcyIsImdldERpYWdub3N0aWNzIiwiaUlzc3VlQ291bnQiLCJnZXRJc3N1ZXMiLCJvQ29udmVydGVyUGFnZU1vZGVsIiwiY29udmVydFBhZ2UiLCJhSXNzdWVzIiwiYUFkZGVkSXNzdWVzIiwic2xpY2UiLCJ3YXJuaW5nIiwiZ2V0RGF0YSIsImUiLCJFcnJvciIsImdldFZpZXciLCJnZXRJbnRlcmZhY2UiLCJleGl0IiwicmVtb3ZlR2xvYmFsSW5zdGFuY2UiLCJTZXJ2aWNlIiwiVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5IiwiX29JbnN0YW5jZVJlZ2lzdHJ5Iiwib1NlcnZpY2VDb250ZXh0IiwiaUNyZWF0aW5nVmlld3MiLCJvVGVtcGxhdGVkVmlld1NlcnZpY2UiLCJnZXROdW1iZXJPZlZpZXdzSW5DcmVhdGlvblN0YXRlIiwiU2VydmljZUZhY3RvcnkiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7TUFzQk1BLG9COzs7Ozs7Ozs7V0FVTEMsSSxHQUFBLGdCQUFPO0FBQUE7O0FBQ04sVUFBTUMsb0JBQW9CLEdBQUcsRUFBN0I7QUFDQSxVQUFNQyxRQUFRLEdBQUcsS0FBS0MsVUFBTCxFQUFqQjtBQUNBLFVBQU1DLFVBQVUsR0FBR0YsUUFB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Iiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBVcmlQYXJhbWV0ZXJzIGZyb20gXCJzYXAvYmFzZS91dGlsL1VyaVBhcmFtZXRlcnNcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ2FjaGVIYW5kbGVyU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9DYWNoZUhhbmRsZXJTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFRlbXBsYXRlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlTW9kZWxcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvbWFjcm9zL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBDYWNoZU1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL2NhY2hlL0NhY2hlTWFuYWdlclwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgU2VydmljZSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlXCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeVJlZ2lzdHJ5IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VGYWN0b3J5UmVnaXN0cnlcIjtcbmltcG9ydCBEZXZpY2UgZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0TW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9iYXNlL01hbmFnZWRPYmplY3RNb2RlbFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IFZlcnNpb25JbmZvIGZyb20gXCJzYXAvdWkvVmVyc2lvbkluZm9cIjtcbmltcG9ydCB7IENvcmVFeCwgU2VydmljZUNvbnRleHQgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgeyByZXNvbHZlRHluYW1pY0V4cHJlc3Npb24gfSBmcm9tIFwiLi4vaGVscGVycy9EeW5hbWljQW5ub3RhdGlvblBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IFJlc291cmNlTW9kZWxTZXJ2aWNlIH0gZnJvbSBcIi4vUmVzb3VyY2VNb2RlbFNlcnZpY2VGYWN0b3J5XCI7XG5cbnR5cGUgVGVtcGxhdGVkVmlld1NlcnZpY2VTZXR0aW5ncyA9IHt9O1xuXG5jbGFzcyBUZW1wbGF0ZWRWaWV3U2VydmljZSBleHRlbmRzIFNlcnZpY2U8VGVtcGxhdGVkVmlld1NlcnZpY2VTZXR0aW5ncz4ge1xuXHRpbml0UHJvbWlzZSE6IFByb21pc2U8YW55Pjtcblx0b1ZpZXchOiBWaWV3O1xuXHRvUmVzb3VyY2VNb2RlbFNlcnZpY2UhOiBSZXNvdXJjZU1vZGVsU2VydmljZTtcblx0b0NhY2hlSGFuZGxlclNlcnZpY2UhOiBDYWNoZUhhbmRsZXJTZXJ2aWNlO1xuXHRvRmFjdG9yeSE6IFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeTtcblx0cmVzb3VyY2VNb2RlbCE6IHR5cGVvZiBSZXNvdXJjZU1vZGVsO1xuXHRzdGFibGVJZCE6IHN0cmluZztcblx0VGVtcGxhdGVDb252ZXJ0ZXI6IGFueTtcblx0TWV0YU1vZGVsQ29udmVydGVyOiBhbnk7XG5cdGluaXQoKSB7XG5cdFx0Y29uc3QgYVNlcnZpY2VEZXBlbmRlbmNpZXMgPSBbXTtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29udGV4dC5zY29wZU9iamVjdDtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9Db21wb25lbnQpIGFzIEFwcENvbXBvbmVudDtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBzU3RhYmxlSWQgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFkYXRhKCkuZ2V0Q29tcG9uZW50TmFtZSgpICsgXCI6OlwiICsgb0FwcENvbXBvbmVudC5nZXRMb2NhbElkKG9Db21wb25lbnQuZ2V0SWQoKSk7XG5cdFx0Y29uc3QgYUVuaGFuY2VJMThuID0gb0NvbXBvbmVudC5nZXRFbmhhbmNlSTE4bigpIHx8IFtdO1xuXHRcdGxldCBzQXBwTmFtZXNwYWNlO1xuXHRcdHRoaXMub0ZhY3RvcnkgPSBvQ29udGV4dC5mYWN0b3J5O1xuXHRcdGlmIChhRW5oYW5jZUkxOG4pIHtcblx0XHRcdHNBcHBOYW1lc3BhY2UgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFkYXRhKCkuZ2V0Q29tcG9uZW50TmFtZSgpO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhRW5oYW5jZUkxOG4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Ly8gSW4gb3JkZXIgdG8gc3VwcG9ydCB0ZXh0LXZlcnRpY2FsaXphdGlvbiBhcHBsaWNhdGlvbnMgY2FuIGFsc28gcGFzc3MgYSByZXNvdXJjZSBtb2RlbCBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHQvLyBVSTUgdGFrZXMgY2FyZSBvZiB0ZXh0LXZlcnRpY2FsaXphdGlvbiBmb3IgcmVzb3VyY2UgbW9kZWxzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG5cdFx0XHRcdC8vIEhlbmNlIGNoZWNrIGlmIHRoZSBnaXZlbiBrZXkgaXMgYSByZXNvdXJjZSBtb2RlbCBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHQvLyBpZiBzbyB0aGlzIG1vZGVsIHNob3VsZCBiZSB1c2VkIHRvIGVuaGFuY2UgdGhlIHNhcC5mZSByZXNvdXJjZSBtb2RlbCBzbyBwYXNzIGl0IGFzIGl0IGlzXG5cdFx0XHRcdGNvbnN0IG9SZXNvdXJjZU1vZGVsID0gb0FwcENvbXBvbmVudC5nZXRNb2RlbChhRW5oYW5jZUkxOG5baV0pO1xuXHRcdFx0XHRpZiAob1Jlc291cmNlTW9kZWwgJiYgb1Jlc291cmNlTW9kZWwuaXNBKFwic2FwLnVpLm1vZGVsLnJlc291cmNlLlJlc291cmNlTW9kZWxcIikpIHtcblx0XHRcdFx0XHRhRW5oYW5jZUkxOG5baV0gPSBvUmVzb3VyY2VNb2RlbDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhRW5oYW5jZUkxOG5baV0gPSBzQXBwTmFtZXNwYWNlICsgXCIuXCIgKyBhRW5oYW5jZUkxOG5baV0ucmVwbGFjZShcIi5wcm9wZXJ0aWVzXCIsIFwiXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc0NhY2hlSWRlbnRpZmllciA9XG5cdFx0XHRvQXBwQ29tcG9uZW50LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpICsgXCJfXCIgKyBzU3RhYmxlSWQgKyBcIl9cIiArIHNhcC51aS5nZXRDb3JlKCkuZ2V0Q29uZmlndXJhdGlvbigpLmdldExhbmd1YWdlVGFnKCk7XG5cdFx0YVNlcnZpY2VEZXBlbmRlbmNpZXMucHVzaChcblx0XHRcdFNlcnZpY2VGYWN0b3J5UmVnaXN0cnkuZ2V0KFwic2FwLmZlLmNvcmUuc2VydmljZXMuUmVzb3VyY2VNb2RlbFNlcnZpY2VcIilcblx0XHRcdFx0LmNyZWF0ZUluc3RhbmNlKHtcblx0XHRcdFx0XHRzY29wZVR5cGU6IFwiY29tcG9uZW50XCIsXG5cdFx0XHRcdFx0c2NvcGVPYmplY3Q6IG9Db21wb25lbnQsXG5cdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdGJ1bmRsZXM6IFtcInNhcC5mZS5jb3JlLm1lc3NhZ2VidW5kbGVcIiwgXCJzYXAuZmUubWFjcm9zLm1lc3NhZ2VidW5kbGVcIiwgXCJzYXAuZmUudGVtcGxhdGVzLm1lc3NhZ2VidW5kbGVcIl0sXG5cdFx0XHRcdFx0XHRlbmhhbmNlSTE4bjogYUVuaGFuY2VJMThuLFxuXHRcdFx0XHRcdFx0bW9kZWxOYW1lOiBcInNhcC5mZS5pMThuXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKChvUmVzb3VyY2VNb2RlbFNlcnZpY2U6IFJlc291cmNlTW9kZWxTZXJ2aWNlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vUmVzb3VyY2VNb2RlbFNlcnZpY2UgPSBvUmVzb3VyY2VNb2RlbFNlcnZpY2U7XG5cdFx0XHRcdFx0cmV0dXJuIG9SZXNvdXJjZU1vZGVsU2VydmljZS5nZXRSZXNvdXJjZU1vZGVsKCk7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdGFTZXJ2aWNlRGVwZW5kZW5jaWVzLnB1c2goXG5cdFx0XHRTZXJ2aWNlRmFjdG9yeVJlZ2lzdHJ5LmdldChcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkNhY2hlSGFuZGxlclNlcnZpY2VcIilcblx0XHRcdFx0LmNyZWF0ZUluc3RhbmNlKHtcblx0XHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiBvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0Y29tcG9uZW50OiBvQ29tcG9uZW50XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbigob0NhY2hlSGFuZGxlclNlcnZpY2U6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMub0NhY2hlSGFuZGxlclNlcnZpY2UgPSBvQ2FjaGVIYW5kbGVyU2VydmljZTtcblx0XHRcdFx0XHRyZXR1cm4gb0NhY2hlSGFuZGxlclNlcnZpY2UudmFsaWRhdGVDYWNoZUtleShzQ2FjaGVJZGVudGlmaWVyKTtcblx0XHRcdFx0fSlcblx0XHQpO1xuXHRcdGFTZXJ2aWNlRGVwZW5kZW5jaWVzLnB1c2goXG5cdFx0XHQoVmVyc2lvbkluZm8gYXMgYW55KVxuXHRcdFx0XHQubG9hZCgpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvSW5mbzogYW55KSB7XG5cdFx0XHRcdFx0bGV0IHNUaW1lc3RhbXAgPSBcIlwiO1xuXHRcdFx0XHRcdGlmICghb0luZm8ubGlicmFyaWVzKSB7XG5cdFx0XHRcdFx0XHRzVGltZXN0YW1wID0gKHNhcC51aSBhcyBhbnkpLmJ1aWxkaW5mby5idWlsZHRpbWU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9JbmZvLmxpYnJhcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChvTGlicmFyeTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdHNUaW1lc3RhbXAgKz0gb0xpYnJhcnkuYnVpbGRUaW1lc3RhbXA7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHNUaW1lc3RhbXA7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFwiPE5PVkFMVUU+XCI7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdGxldCBzUGFnZU1vZGVsQ2FjaGVLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gUHJvbWlzZS5hbGwoYVNlcnZpY2VEZXBlbmRlbmNpZXMpXG5cdFx0XHQudGhlbigoYURlcGVuZGVuY2llc1Jlc3VsdDogYW55W10pID0+IHtcblx0XHRcdFx0Y29uc3Qgc0NhY2hlS2V5ID0gYURlcGVuZGVuY2llc1Jlc3VsdFsxXTtcblx0XHRcdFx0Y29uc3Qgc1ZlcnNpb25JbmZvID0gYURlcGVuZGVuY2llc1Jlc3VsdFsyXTtcblx0XHRcdFx0Y29uc3Qgb1NoZWxsU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRcdFx0Y29uc3Qgb1NpZGVFZmZlY3RzU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXG5cdFx0XHRcdG9TaWRlRWZmZWN0c1NlcnZpY2VzLmluaXRpYWxpemVTaWRlRWZmZWN0cyhvQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkpO1xuXG5cdFx0XHRcdC8vIEluIGNhc2UgdGhlcmUgaXMgbm8gY2FjaGUga2V5IHdlIGlnbm9yZSB0aGUgdmlldyBjYWNoZVxuXHRcdFx0XHRzUGFnZU1vZGVsQ2FjaGVLZXkgPSBzQ2FjaGVLZXlcblx0XHRcdFx0XHQ/IHNDYWNoZUtleSArIFwiLVwiICsgc1ZlcnNpb25JbmZvICsgXCItXCIgKyBzU3RhYmxlSWQgKyBcIi1cIiArIG9TaGVsbFNlcnZpY2VzLmluc3RhbmNlVHlwZSArIFwiLXBhZ2VNb2RlbFwiXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChhRGVwZW5kZW5jaWVzUmVzdWx0LmNvbmNhdChbdGhpcy5fZ2V0Q2FjaGVkTW9kZWwoc1BhZ2VNb2RlbENhY2hlS2V5KV0pKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoYURlcGVuZGVuY2llc1Jlc3VsdDogYW55W10pID0+IHtcblx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlTW9kZWwgPSBhRGVwZW5kZW5jaWVzUmVzdWx0WzBdO1xuXHRcdFx0XHRjb25zdCBzQ2FjaGVLZXkgPSBhRGVwZW5kZW5jaWVzUmVzdWx0WzFdO1xuXHRcdFx0XHRjb25zdCBvUGFnZU1vZGVsQ2FjaGUgPSBhRGVwZW5kZW5jaWVzUmVzdWx0WzNdO1xuXHRcdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdFx0XHRzYXAudWkucmVxdWlyZShcblx0XHRcdFx0XHRcdFtcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIiwgXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiXSxcblx0XHRcdFx0XHRcdChUZW1wbGF0ZUNvbnZlcnRlcjogYW55LCBNZXRhTW9kZWxDb252ZXJ0ZXI6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY3JlYXRlVmlldyhcblx0XHRcdFx0XHRcdFx0XHRcdG9SZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcdFx0c1N0YWJsZUlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0c0NhY2hlS2V5LFxuXHRcdFx0XHRcdFx0XHRcdFx0c1BhZ2VNb2RlbENhY2hlS2V5LFxuXHRcdFx0XHRcdFx0XHRcdFx0b1BhZ2VNb2RlbENhY2hlLFxuXHRcdFx0XHRcdFx0XHRcdFx0VGVtcGxhdGVDb252ZXJ0ZXIsXG5cdFx0XHRcdFx0XHRcdFx0XHRNZXRhTW9kZWxDb252ZXJ0ZXJcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKHNDYWNoZUtleTogYW55KSB7XG5cdFx0XHRcdGNvbnN0IG9DYWNoZUhhbmRsZXJTZXJ2aWNlID0gU2VydmljZUZhY3RvcnlSZWdpc3RyeS5nZXQoXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5DYWNoZUhhbmRsZXJTZXJ2aWNlXCIpLmdldEluc3RhbmNlKG9NZXRhTW9kZWwpO1xuXHRcdFx0XHRvQ2FjaGVIYW5kbGVyU2VydmljZS5pbnZhbGlkYXRlSWZOZWVkZWQoc0NhY2hlS2V5LCBzQ2FjaGVJZGVudGlmaWVyKTtcblx0XHRcdH0pO1xuXHR9XG5cdF9nZXRDYWNoZWRNb2RlbChzQ2FjaGVLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdGlmIChzQ2FjaGVLZXkgJiYgKENvcmUgYXMgQ29yZUV4KS5nZXRDb25maWd1cmF0aW9uKCkuZ2V0Vmlld0NhY2hlKCkpIHtcblx0XHRcdHJldHVybiBDYWNoZU1hbmFnZXIuZ2V0KHNDYWNoZUtleSk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0X3NldENhY2hlZE1vZGVsKHNDYWNoZUtleTogc3RyaW5nIHwgdW5kZWZpbmVkLCBvQ2FjaGVNb2RlbDogYW55KSB7XG5cdFx0aWYgKHNDYWNoZUtleSAmJiAoQ29yZSBhcyBDb3JlRXgpLmdldENvbmZpZ3VyYXRpb24oKS5nZXRWaWV3Q2FjaGUoKSkge1xuXHRcdFx0Q2FjaGVNYW5hZ2VyLnNldChzQ2FjaGVLZXksIG9DYWNoZU1vZGVsKTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHQvKipcblx0ICogUmVmcmVzaCB0aGUgY3VycmVudCB2aWV3IHVzaW5nIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gYXMgYmVmb3JlLlxuXHQgKiBUaGlzIGlzIHVzZWZ1bCBmb3Igb3VyIGRlbW9raXQgIVxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cblx0ICogQHByaXZhdGVcblx0ICovXG5cdHJlZnJlc2hWaWV3KG9Db21wb25lbnQ6IGFueSkge1xuXHRcdGNvbnN0IG9Sb290VmlldyA9IG9Db21wb25lbnQuZ2V0Um9vdENvbnRyb2woKTtcblx0XHRpZiAob1Jvb3RWaWV3KSB7XG5cdFx0XHRvUm9vdFZpZXcuZGVzdHJveSgpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5vVmlldykge1xuXHRcdFx0dGhpcy5vVmlldy5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmNyZWF0ZVZpZXcodGhpcy5yZXNvdXJjZU1vZGVsLCB0aGlzLnN0YWJsZUlkLCBcIlwiLCBcIlwiLCB1bmRlZmluZWQsIHRoaXMuVGVtcGxhdGVDb252ZXJ0ZXIsIHRoaXMuTWV0YU1vZGVsQ29udmVydGVyKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRvQ29tcG9uZW50Lm9Db250YWluZXIuaW52YWxpZGF0ZSgpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0b0NvbXBvbmVudC5vQ29udGFpbmVyLmludmFsaWRhdGUoKTtcblx0XHRcdFx0TG9nLmVycm9yKG9FcnJvcik7XG5cdFx0XHR9KTtcblx0fVxuXHRjcmVhdGVWaWV3KFxuXHRcdG9SZXNvdXJjZU1vZGVsOiBhbnksXG5cdFx0c1N0YWJsZUlkOiBhbnksXG5cdFx0c0NhY2hlS2V5OiBhbnksXG5cdFx0c1BhZ2VNb2RlbENhY2hlS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0b1BhZ2VNb2RlbENhY2hlOiBhbnksXG5cdFx0VGVtcGxhdGVDb252ZXJ0ZXI6IGFueSxcblx0XHRNZXRhTW9kZWxDb252ZXJ0ZXI6IGFueVxuXHQpIHtcblx0XHR0aGlzLnJlc291cmNlTW9kZWwgPSBvUmVzb3VyY2VNb2RlbDtcblx0XHR0aGlzLnN0YWJsZUlkID0gc1N0YWJsZUlkO1xuXHRcdHRoaXMuVGVtcGxhdGVDb252ZXJ0ZXIgPSBUZW1wbGF0ZUNvbnZlcnRlcjtcblx0XHR0aGlzLk1ldGFNb2RlbENvbnZlcnRlciA9IE1ldGFNb2RlbENvbnZlcnRlcjtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdGNvbnN0IG1TZXJ2aWNlU2V0dGluZ3MgPSBvQ29udGV4dC5zZXR0aW5ncztcblx0XHRjb25zdCBzQ29udmVydGVyVHlwZSA9IG1TZXJ2aWNlU2V0dGluZ3MuY29udmVydGVyVHlwZTtcblx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbnRleHQuc2NvcGVPYmplY3Q7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9Db21wb25lbnQpIGFzIEFwcENvbXBvbmVudDtcblx0XHRjb25zdCBzRnVsbENvbnRleHRQYXRoID0gb0FwcENvbXBvbmVudC5nZXRSb3V0aW5nU2VydmljZSgpLmdldFRhcmdldEluZm9ybWF0aW9uRm9yKG9Db21wb25lbnQpLm9wdGlvbnMuc2V0dGluZ3MuZnVsbENvbnRleHRQYXRoO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IG9NYW5pZmVzdENvbnRlbnQ6IGFueSA9IG9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3QoKTtcblx0XHRjb25zdCBvRGV2aWNlTW9kZWwgPSBuZXcgSlNPTk1vZGVsKERldmljZSkuc2V0RGVmYXVsdEJpbmRpbmdNb2RlKFwiT25lV2F5XCIpO1xuXHRcdGNvbnN0IG9NYW5pZmVzdE1vZGVsID0gbmV3IEpTT05Nb2RlbChvTWFuaWZlc3RDb250ZW50KTtcblx0XHRjb25zdCBiRXJyb3IgPSBmYWxzZTtcblx0XHRsZXQgb1BhZ2VNb2RlbDogVGVtcGxhdGVNb2RlbCwgb1ZpZXdEYXRhTW9kZWw6IE1vZGVsLCBvVmlld1NldHRpbmdzOiBhbnksIG1WaWV3RGF0YTogYW55O1xuXG5cdFx0ZnVuY3Rpb24gZ2V0Vmlld1NldHRpbmdzKCkge1xuXHRcdFx0Y29uc3QgYVNwbGl0UGF0aCA9IHNGdWxsQ29udGV4dFBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBhU3BsaXRQYXRoLnJlZHVjZShmdW5jdGlvbiAoc1BhdGhTb0ZhcjogYW55LCBzTmV4dFBhdGhQYXJ0OiBhbnkpIHtcblx0XHRcdFx0aWYgKHNOZXh0UGF0aFBhcnQgPT09IFwiXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gc1BhdGhTb0Zhcjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc1BhdGhTb0ZhciA9PT0gXCJcIikge1xuXHRcdFx0XHRcdHNQYXRoU29GYXIgPSBcIi9cIiArIHNOZXh0UGF0aFBhcnQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RhcmdldCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNQYXRoU29GYXIgKyBcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9cIiArIHNOZXh0UGF0aFBhcnQpO1xuXHRcdFx0XHRcdGlmIChvVGFyZ2V0ICYmIE9iamVjdC5rZXlzKG9UYXJnZXQpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdHNQYXRoU29GYXIgKz0gXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c1BhdGhTb0ZhciArPSBcIi9cIiArIHNOZXh0UGF0aFBhcnQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNQYXRoU29GYXI7XG5cdFx0XHR9LCBcIlwiKTtcblx0XHRcdGNvbnN0IG9WaWV3U2V0dGluZ3MgPSB7XG5cdFx0XHRcdHR5cGU6IFwiWE1MXCIsXG5cdFx0XHRcdHByZXByb2Nlc3NvcnM6IHtcblx0XHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IHNFbnRpdHlTZXRQYXRoID8gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRW50aXR5U2V0UGF0aCkgOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRmdWxsQ29udGV4dFBhdGg6IHNGdWxsQ29udGV4dFBhdGggPyBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdWxsQ29udGV4dFBhdGgpIDogbnVsbCxcblx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg6IHNGdWxsQ29udGV4dFBhdGggPyBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdWxsQ29udGV4dFBhdGgpIDogbnVsbCxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogb1BhZ2VNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiwgdW5kZWZpbmVkLCB7IG5vUmVzb2x2ZTogdHJ1ZSB9KSxcblx0XHRcdFx0XHRcdFx0dmlld0RhdGE6IG1WaWV3RGF0YSA/IG9WaWV3RGF0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSA6IG51bGxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRmdWxsQ29udGV4dFBhdGg6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcInNhcC5mZS5pMThuXCI6IG9SZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdFwiZGV2aWNlXCI6IG9EZXZpY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0bWFuaWZlc3Q6IG9NYW5pZmVzdE1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBvUGFnZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHR2aWV3RGF0YTogb1ZpZXdEYXRhTW9kZWxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRhcHBDb21wb25lbnQ6IG9BcHBDb21wb25lbnRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGlkOiBzU3RhYmxlSWQsXG5cdFx0XHRcdHZpZXdOYW1lOiBtU2VydmljZVNldHRpbmdzLnZpZXdOYW1lIHx8IG9Db21wb25lbnQuZ2V0Vmlld05hbWUoKSxcblx0XHRcdFx0dmlld0RhdGE6IG1WaWV3RGF0YSxcblx0XHRcdFx0Y2FjaGU6IHsga2V5czogW3NDYWNoZUtleV0gfSxcblx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XCJzYXAuZmUuaTE4blwiOiBvUmVzb3VyY2VNb2RlbFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRoZWlnaHQ6IFwiMTAwJVwiXG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIG9WaWV3U2V0dGluZ3M7XG5cdFx0fVxuXHRcdGNvbnN0IGNyZWF0ZUVycm9yUGFnZSA9IChyZWFzb246IGFueSkgPT4ge1xuXHRcdFx0Ly8ganVzdCByZXBsYWNlIHRoZSB2aWV3IG5hbWUgYW5kIGFkZCBhbiBhZGRpdGlvbmFsIG1vZGVsIGNvbnRhaW5pbmcgdGhlIHJlYXNvbiwgYnV0XG5cdFx0XHQvLyBrZWVwIHRoZSBvdGhlciBzZXR0aW5nc1xuXHRcdFx0TG9nLmVycm9yKHJlYXNvbi5tZXNzYWdlLCByZWFzb24pO1xuXHRcdFx0b1ZpZXdTZXR0aW5ncy52aWV3TmFtZSA9IG1TZXJ2aWNlU2V0dGluZ3MuZXJyb3JWaWV3TmFtZSB8fCBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLnZpZXcuVGVtcGxhdGluZ0Vycm9yUGFnZVwiO1xuXHRcdFx0b1ZpZXdTZXR0aW5ncy5wcmVwcm9jZXNzb3JzLnhtbC5tb2RlbHNbXCJlcnJvclwiXSA9IG5ldyBKU09OTW9kZWwocmVhc29uKTtcblxuXHRcdFx0cmV0dXJuIG9Db21wb25lbnQucnVuQXNPd25lcigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBWaWV3LmNyZWF0ZShvVmlld1NldHRpbmdzKS50aGVuKChvVmlldzogYW55KSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vVmlldyA9IG9WaWV3O1xuXHRcdFx0XHRcdHRoaXMub1ZpZXcuc2V0TW9kZWwobmV3IE1hbmFnZWRPYmplY3RNb2RlbCh0aGlzLm9WaWV3KSwgXCIkdmlld1wiKTtcblx0XHRcdFx0XHRvQ29tcG9uZW50LnNldEFnZ3JlZ2F0aW9uKFwicm9vdENvbnRyb2xcIiwgdGhpcy5vVmlldyk7XG5cdFx0XHRcdFx0cmV0dXJuIHNDYWNoZUtleTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXHRcdHJldHVybiBvQXBwQ29tcG9uZW50XG5cdFx0XHQuZ2V0U2VydmljZShcInJvdXRpbmdTZXJ2aWNlXCIpXG5cdFx0XHQudGhlbigob1JvdXRpbmdTZXJ2aWNlOiBhbnkpID0+IHtcblx0XHRcdFx0Ly8gUmV0cmlldmUgdGhlIHZpZXdMZXZlbCBmb3IgdGhlIGNvbXBvbmVudFxuXHRcdFx0XHRjb25zdCBvVGFyZ2V0SW5mbyA9IG9Sb3V0aW5nU2VydmljZS5nZXRUYXJnZXRJbmZvcm1hdGlvbkZvcihvQ29tcG9uZW50KTtcblx0XHRcdFx0Y29uc3QgbU91dGJvdW5kcyA9XG5cdFx0XHRcdFx0b01hbmlmZXN0Q29udGVudFtcInNhcC5hcHBcIl0gJiZcblx0XHRcdFx0XHRvTWFuaWZlc3RDb250ZW50W1wic2FwLmFwcFwiXS5jcm9zc05hdmlnYXRpb24gJiZcblx0XHRcdFx0XHRvTWFuaWZlc3RDb250ZW50W1wic2FwLmFwcFwiXS5jcm9zc05hdmlnYXRpb24ub3V0Ym91bmRzO1xuXHRcdFx0XHRjb25zdCBtTmF2aWdhdGlvbiA9IG9Db21wb25lbnQuZ2V0TmF2aWdhdGlvbigpIHx8IHt9O1xuXHRcdFx0XHRPYmplY3Qua2V5cyhtTmF2aWdhdGlvbikuZm9yRWFjaChmdW5jdGlvbiAobmF2aWdhdGlvbk9iamVjdEtleTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvbk9iamVjdCA9IG1OYXZpZ2F0aW9uW25hdmlnYXRpb25PYmplY3RLZXldO1xuXHRcdFx0XHRcdGxldCBvdXRib3VuZENvbmZpZztcblx0XHRcdFx0XHRpZiAobmF2aWdhdGlvbk9iamVjdC5kZXRhaWwgJiYgbmF2aWdhdGlvbk9iamVjdC5kZXRhaWwub3V0Ym91bmQgJiYgbU91dGJvdW5kc1tuYXZpZ2F0aW9uT2JqZWN0LmRldGFpbC5vdXRib3VuZF0pIHtcblx0XHRcdFx0XHRcdG91dGJvdW5kQ29uZmlnID0gbU91dGJvdW5kc1tuYXZpZ2F0aW9uT2JqZWN0LmRldGFpbC5vdXRib3VuZF07XG5cdFx0XHRcdFx0XHRuYXZpZ2F0aW9uT2JqZWN0LmRldGFpbC5vdXRib3VuZERldGFpbCA9IHtcblx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG91dGJvdW5kQ29uZmlnLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRhY3Rpb246IG91dGJvdW5kQ29uZmlnLmFjdGlvbixcblx0XHRcdFx0XHRcdFx0cGFyYW1ldGVyczogb3V0Ym91bmRDb25maWcucGFyYW1ldGVyc1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKG5hdmlnYXRpb25PYmplY3QuY3JlYXRlICYmIG5hdmlnYXRpb25PYmplY3QuY3JlYXRlLm91dGJvdW5kICYmIG1PdXRib3VuZHNbbmF2aWdhdGlvbk9iamVjdC5jcmVhdGUub3V0Ym91bmRdKSB7XG5cdFx0XHRcdFx0XHRvdXRib3VuZENvbmZpZyA9IG1PdXRib3VuZHNbbmF2aWdhdGlvbk9iamVjdC5jcmVhdGUub3V0Ym91bmRdO1xuXHRcdFx0XHRcdFx0bmF2aWdhdGlvbk9iamVjdC5jcmVhdGUub3V0Ym91bmREZXRhaWwgPSB7XG5cdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvdXRib3VuZENvbmZpZy5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0YWN0aW9uOiBvdXRib3VuZENvbmZpZy5hY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHBhcmFtZXRlcnM6IG91dGJvdW5kQ29uZmlnLnBhcmFtZXRlcnNcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0bVZpZXdEYXRhID0ge1xuXHRcdFx0XHRcdG5hdmlnYXRpb246IG1OYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdHZpZXdMZXZlbDogb1RhcmdldEluZm8udmlld0xldmVsLFxuXHRcdFx0XHRcdHN0YWJsZUlkOiBzU3RhYmxlSWQsXG5cdFx0XHRcdFx0Y29udGVudERlbnNpdGllczogb01hbmlmZXN0Q29udGVudFtcInNhcC51aTVcIl0uY29udGVudERlbnNpdGllcyxcblx0XHRcdFx0XHRyZXNvdXJjZUJ1bmRsZTogb1Jlc291cmNlTW9kZWwuX19idW5kbGUsXG5cdFx0XHRcdFx0ZnVsbENvbnRleHRQYXRoOiBzRnVsbENvbnRleHRQYXRoLFxuXHRcdFx0XHRcdGlzRGVza3RvcDogKERldmljZSBhcyBhbnkpLnN5c3RlbS5kZXNrdG9wLFxuXHRcdFx0XHRcdGlzUGhvbmU6IChEZXZpY2UgYXMgYW55KS5zeXN0ZW0ucGhvbmVcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRpZiAob0NvbXBvbmVudC5nZXRWaWV3RGF0YSkge1xuXHRcdFx0XHRcdE9iamVjdC5hc3NpZ24obVZpZXdEYXRhLCBvQ29tcG9uZW50LmdldFZpZXdEYXRhKCkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3Qgb1NoZWxsU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRcdFx0bVZpZXdEYXRhLmNvbnZlcnRlclR5cGUgPSBzQ29udmVydGVyVHlwZTtcblx0XHRcdFx0bVZpZXdEYXRhLnNoZWxsQ29udGVudERlbnNpdHkgPSBvU2hlbGxTZXJ2aWNlcy5nZXRDb250ZW50RGVuc2l0eSgpO1xuXHRcdFx0XHRtVmlld0RhdGEudXNlTmV3TGF6eUxvYWRpbmcgPSBVcmlQYXJhbWV0ZXJzLmZyb21RdWVyeSh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoXCJzYXAtZmUteHgtbGF6eWxvYWRpbmd0ZXN0XCIpID09PSBcInRydWVcIjtcblx0XHRcdFx0bVZpZXdEYXRhLnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgPVxuXHRcdFx0XHRcdG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuZmVcIl0gJiYgb01hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXS5mb3JtXG5cdFx0XHRcdFx0XHQ/IG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuZmVcIl0uZm9ybS5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0XG5cdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0Ly8gXHRUaGUgbWFuaWZlc3Qgc3dpdGNoIGZvciB0aGUgdXNhZ2Ugb2YgdGhlIG5ldyBWYWx1ZUhlbHAgc2hvdWxkIG9ubHkgdXNlZCBpbnRlcm5hbGx5XG5cdFx0XHRcdG1WaWV3RGF0YS5fdXNlTmV3VmFsdWVIZWxwID1cblx0XHRcdFx0XHRvTWFuaWZlc3RDb250ZW50W1wic2FwLmZlXCJdICYmIG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuZmVcIl0uYXBwXG5cdFx0XHRcdFx0XHQ/IG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuZmVcIl0uYXBwLl91c2VOZXdWYWx1ZUhlbHBcblx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRvVmlld0RhdGFNb2RlbCA9IG5ldyBKU09OTW9kZWwobVZpZXdEYXRhKTtcblx0XHRcdFx0aWYgKG1WaWV3RGF0YSAmJiBtVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24pIHtcblx0XHRcdFx0XHRPYmplY3Qua2V5cyhtVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24pLmZvckVhY2goZnVuY3Rpb24gKHNBbm5vdGF0aW9uUGF0aDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRpZiAoc0Fubm90YXRpb25QYXRoLmluZGV4T2YoXCJbXCIpICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzVGFyZ2V0QW5ub3RhdGlvblBhdGggPSByZXNvbHZlRHluYW1pY0V4cHJlc3Npb24oc0Fubm90YXRpb25QYXRoLCBvTWV0YU1vZGVsKTtcblx0XHRcdFx0XHRcdFx0bVZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uW3NUYXJnZXRBbm5vdGF0aW9uUGF0aF0gPSBtVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb25bc0Fubm90YXRpb25QYXRoXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRNZXRhTW9kZWxDb252ZXJ0ZXIuY29udmVydFR5cGVzKG9NZXRhTW9kZWwsIG9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKSk7XG5cdFx0XHRcdG9QYWdlTW9kZWwgPSBuZXcgVGVtcGxhdGVNb2RlbCgoKSA9PiB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGlmICghIW9QYWdlTW9kZWxDYWNoZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb1BhZ2VNb2RlbENhY2hlO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0RpYWdub3N0aWNzID0gb0FwcENvbXBvbmVudC5nZXREaWFnbm9zdGljcygpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBpSXNzdWVDb3VudCA9IG9EaWFnbm9zdGljcy5nZXRJc3N1ZXMoKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9Db252ZXJ0ZXJQYWdlTW9kZWwgPSBUZW1wbGF0ZUNvbnZlcnRlci5jb252ZXJ0UGFnZShcblx0XHRcdFx0XHRcdFx0XHRzQ29udmVydGVyVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcdG1WaWV3RGF0YSxcblx0XHRcdFx0XHRcdFx0XHRvRGlhZ25vc3RpY3MsXG5cdFx0XHRcdFx0XHRcdFx0c0Z1bGxDb250ZXh0UGF0aCxcblx0XHRcdFx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKClcblx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRjb25zdCBhSXNzdWVzID0gb0RpYWdub3N0aWNzLmdldElzc3VlcygpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhQWRkZWRJc3N1ZXMgPSBhSXNzdWVzLnNsaWNlKGlJc3N1ZUNvdW50KTtcblx0XHRcdFx0XHRcdFx0aWYgKGFBZGRlZElzc3Vlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFx0XHRcdFx0XHRcIlNvbWUgaXNzdWVzIGhhdmUgYmVlbiBkZXRlY3RlZCBpbiB5b3VyIHByb2plY3QsIHBsZWFzZSBjaGVjayB0aGUgVUk1IHN1cHBvcnQgYXNzaXN0YW50IHJ1bGUgZm9yIHNhcC5mZS5jb3JlXCJcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBvQ29udmVydGVyUGFnZU1vZGVsO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IgYXMgYW55LCBlcnJvciBhcyBhbnkpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSwgb01ldGFNb2RlbCk7XG5cblx0XHRcdFx0aWYgKCFiRXJyb3IpIHtcblx0XHRcdFx0XHRvVmlld1NldHRpbmdzID0gZ2V0Vmlld1NldHRpbmdzKCk7XG5cdFx0XHRcdFx0Ly8gU2V0dGluZyB0aGUgcGFnZU1vZGVsIG9uIHRoZSBjb21wb25lbnQgZm9yIHBvdGVudGlhbCByZXVzZVxuXHRcdFx0XHRcdG9Db21wb25lbnQuc2V0TW9kZWwob1BhZ2VNb2RlbCwgXCJfcGFnZU1vZGVsXCIpO1xuXHRcdFx0XHRcdHJldHVybiBvQ29tcG9uZW50LnJ1bkFzT3duZXIoKCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFZpZXcuY3JlYXRlKG9WaWV3U2V0dGluZ3MpXG5cdFx0XHRcdFx0XHRcdC5jYXRjaChjcmVhdGVFcnJvclBhZ2UpXG5cdFx0XHRcdFx0XHRcdC50aGVuKChvVmlldzogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vVmlldyA9IG9WaWV3O1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMub1ZpZXcuc2V0TW9kZWwobmV3IE1hbmFnZWRPYmplY3RNb2RlbCh0aGlzLm9WaWV3KSwgXCIkdmlld1wiKTtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9WaWV3LnNldE1vZGVsKG9WaWV3RGF0YU1vZGVsLCBcInZpZXdEYXRhXCIpO1xuXHRcdFx0XHRcdFx0XHRcdG9Db21wb25lbnQuc2V0QWdncmVnYXRpb24oXCJyb290Q29udHJvbFwiLCB0aGlzLm9WaWV3KTtcblx0XHRcdFx0XHRcdFx0XHQvLyBGaXJlIGFuZCBmb3JnZXQgaW4gdGhlIGNhY2hlXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFvUGFnZU1vZGVsQ2FjaGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX3NldENhY2hlZE1vZGVsKHNQYWdlTW9kZWxDYWNoZUtleSwgKG9QYWdlTW9kZWwgYXMgYW55KS5nZXREYXRhKCkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc0NhY2hlS2V5O1xuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IExvZy5lcnJvcihlLm1lc3NhZ2UsIGUpKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IubWVzc2FnZSwgZXJyb3IpO1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBjcmVhdGluZyB2aWV3IDogXCIgKyBlcnJvcik7XG5cdFx0XHR9KTtcblx0fVxuXHRnZXRWaWV3KCkge1xuXHRcdHJldHVybiB0aGlzLm9WaWV3O1xuXHR9XG5cdGdldEludGVyZmFjZSgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGV4aXQoKSB7XG5cdFx0Ly8gRGVyZWdpc3RlciBnbG9iYWwgaW5zdGFuY2Vcblx0XHR0aGlzLm9SZXNvdXJjZU1vZGVsU2VydmljZSAmJiB0aGlzLm9SZXNvdXJjZU1vZGVsU2VydmljZS5kZXN0cm95KCk7XG5cdFx0dGhpcy5vQ2FjaGVIYW5kbGVyU2VydmljZSAmJiB0aGlzLm9DYWNoZUhhbmRsZXJTZXJ2aWNlLmRlc3Ryb3koKTtcblx0XHR0aGlzLm9GYWN0b3J5LnJlbW92ZUdsb2JhbEluc3RhbmNlKCk7XG5cdH1cbn1cbmNsYXNzIFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeSBleHRlbmRzIFNlcnZpY2VGYWN0b3J5PFRlbXBsYXRlZFZpZXdTZXJ2aWNlU2V0dGluZ3M+IHtcblx0X29JbnN0YW5jZVJlZ2lzdHJ5OiBSZWNvcmQ8c3RyaW5nLCBUZW1wbGF0ZWRWaWV3U2VydmljZT4gPSB7fTtcblx0c3RhdGljIGlDcmVhdGluZ1ZpZXdzOiAwO1xuXHRjcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PFRlbXBsYXRlZFZpZXdTZXJ2aWNlU2V0dGluZ3M+KSB7XG5cdFx0VGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5LmlDcmVhdGluZ1ZpZXdzKys7XG5cblx0XHRjb25zdCBvVGVtcGxhdGVkVmlld1NlcnZpY2UgPSBuZXcgVGVtcGxhdGVkVmlld1NlcnZpY2UoT2JqZWN0LmFzc2lnbih7IGZhY3Rvcnk6IHRoaXMgfSwgb1NlcnZpY2VDb250ZXh0KSk7XG5cdFx0cmV0dXJuIG9UZW1wbGF0ZWRWaWV3U2VydmljZS5pbml0UHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeS5pQ3JlYXRpbmdWaWV3cy0tO1xuXHRcdFx0cmV0dXJuIG9UZW1wbGF0ZWRWaWV3U2VydmljZTtcblx0XHR9KTtcblx0fVxuXHRyZW1vdmVHbG9iYWxJbnN0YW5jZSgpIHtcblx0XHR0aGlzLl9vSW5zdGFuY2VSZWdpc3RyeSA9IHt9O1xuXHR9XG5cdHN0YXRpYyBnZXROdW1iZXJPZlZpZXdzSW5DcmVhdGlvblN0YXRlKCkge1xuXHRcdHJldHVybiBUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkuaUNyZWF0aW5nVmlld3M7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5O1xuIl19
|
|
458
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeS50cyJdLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiVGVtcGxhdGVkVmlld1NlcnZpY2UiLCJpbml0IiwiYVNlcnZpY2VEZXBlbmRlbmNpZXMiLCJvQ29udGV4dCIsImdldENvbnRleHQiLCJvQ29tcG9uZW50Iiwic2NvcGVPYmplY3QiLCJvQXBwQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic1N0YWJsZUlkIiwiZ2V0TWV0YWRhdGEiLCJnZXRDb21wb25lbnROYW1lIiwiZ2V0TG9jYWxJZCIsImdldElkIiwiYUVuaGFuY2VJMThuIiwiZ2V0RW5oYW5jZUkxOG4iLCJzQXBwTmFtZXNwYWNlIiwib0ZhY3RvcnkiLCJmYWN0b3J5IiwiaSIsImxlbmd0aCIsIm9SZXNvdXJjZU1vZGVsIiwiZ2V0TW9kZWwiLCJpc0EiLCJyZXBsYWNlIiwic0NhY2hlSWRlbnRpZmllciIsImdldE5hbWUiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJnZXRDb25maWd1cmF0aW9uIiwiZ2V0TGFuZ3VhZ2VUYWciLCJwdXNoIiwiU2VydmljZUZhY3RvcnlSZWdpc3RyeSIsImdldCIsImNyZWF0ZUluc3RhbmNlIiwic2NvcGVUeXBlIiwic2V0dGluZ3MiLCJidW5kbGVzIiwiZW5oYW5jZUkxOG4iLCJtb2RlbE5hbWUiLCJvUmVzb3VyY2VNb2RlbFNlcnZpY2UiLCJnZXRSZXNvdXJjZU1vZGVsIiwibWV0YU1vZGVsIiwiYXBwQ29tcG9uZW50IiwiY29tcG9uZW50Iiwib0NhY2hlSGFuZGxlclNlcnZpY2UiLCJ2YWxpZGF0ZUNhY2hlS2V5IiwiVmVyc2lvbkluZm8iLCJsb2FkIiwib0luZm8iLCJzVGltZXN0YW1wIiwibGlicmFyaWVzIiwiYnVpbGRpbmZvIiwiYnVpbGR0aW1lIiwiZm9yRWFjaCIsIm9MaWJyYXJ5IiwiYnVpbGRUaW1lc3RhbXAiLCJjYXRjaCIsInNQYWdlTW9kZWxDYWNoZUtleSIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsImFsbCIsImFEZXBlbmRlbmNpZXNSZXN1bHQiLCJzQ2FjaGVLZXkiLCJzVmVyc2lvbkluZm8iLCJvU2hlbGxTZXJ2aWNlcyIsImdldFNoZWxsU2VydmljZXMiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlcyIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImluaXRpYWxpemVTaWRlRWZmZWN0cyIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiaW5zdGFuY2VUeXBlIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiX2dldENhY2hlZE1vZGVsIiwib1BhZ2VNb2RlbENhY2hlIiwicmVzb2x2ZSIsInJlcXVpcmUiLCJUZW1wbGF0ZUNvbnZlcnRlciIsIk1ldGFNb2RlbENvbnZlcnRlciIsImNyZWF0ZVZpZXciLCJnZXRJbnN0YW5jZSIsImludmFsaWRhdGVJZk5lZWRlZCIsIkNvcmUiLCJnZXRWaWV3Q2FjaGUiLCJDYWNoZU1hbmFnZXIiLCJfc2V0Q2FjaGVkTW9kZWwiLCJvQ2FjaGVNb2RlbCIsInNldCIsInJlZnJlc2hWaWV3Iiwib1Jvb3RWaWV3IiwiZ2V0Um9vdENvbnRyb2wiLCJkZXN0cm95Iiwib1ZpZXciLCJyZXNvdXJjZU1vZGVsIiwic3RhYmxlSWQiLCJvQ29udGFpbmVyIiwiaW52YWxpZGF0ZSIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwibVNlcnZpY2VTZXR0aW5ncyIsInNDb252ZXJ0ZXJUeXBlIiwiY29udmVydGVyVHlwZSIsInNGdWxsQ29udGV4dFBhdGgiLCJnZXRSb3V0aW5nU2VydmljZSIsImdldFRhcmdldEluZm9ybWF0aW9uRm9yIiwib3B0aW9ucyIsImZ1bGxDb250ZXh0UGF0aCIsIm9NYW5pZmVzdENvbnRlbnQiLCJnZXRNYW5pZmVzdCIsIm9EZXZpY2VNb2RlbCIsIkpTT05Nb2RlbCIsIkRldmljZSIsInNldERlZmF1bHRCaW5kaW5nTW9kZSIsIm9NYW5pZmVzdE1vZGVsIiwiYkVycm9yIiwiZ2V0Vmlld1NldHRpbmdzIiwiYVNwbGl0UGF0aCIsInNwbGl0Iiwic0VudGl0eVNldFBhdGgiLCJyZWR1Y2UiLCJzUGF0aFNvRmFyIiwic05leHRQYXRoUGFydCIsIm9UYXJnZXQiLCJnZXRPYmplY3QiLCJPYmplY3QiLCJrZXlzIiwidHlwZSIsInByZXByb2Nlc3NvcnMiLCJ4bWwiLCJiaW5kaW5nQ29udGV4dHMiLCJlbnRpdHlTZXQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImNvbnRleHRQYXRoIiwiY29udmVydGVyQ29udGV4dCIsIm9QYWdlTW9kZWwiLCJub1Jlc29sdmUiLCJ2aWV3RGF0YSIsIm1WaWV3RGF0YSIsIm9WaWV3RGF0YU1vZGVsIiwibW9kZWxzIiwibWFuaWZlc3QiLCJpZCIsInZpZXdOYW1lIiwiZ2V0Vmlld05hbWUiLCJjYWNoZSIsImhlaWdodCIsIm9WaWV3U2V0dGluZ3MiLCJjcmVhdGVFcnJvclBhZ2UiLCJyZWFzb24iLCJtZXNzYWdlIiwiZXJyb3JWaWV3TmFtZSIsInJ1bkFzT3duZXIiLCJWaWV3IiwiY3JlYXRlIiwic2V0TW9kZWwiLCJNYW5hZ2VkT2JqZWN0TW9kZWwiLCJzZXRBZ2dyZWdhdGlvbiIsImdldFNlcnZpY2UiLCJvUm91dGluZ1NlcnZpY2UiLCJvVGFyZ2V0SW5mbyIsIm1PdXRib3VuZHMiLCJjcm9zc05hdmlnYXRpb24iLCJvdXRib3VuZHMiLCJtTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb24iLCJuYXZpZ2F0aW9uT2JqZWN0S2V5IiwibmF2aWdhdGlvbk9iamVjdCIsIm91dGJvdW5kQ29uZmlnIiwiZGV0YWlsIiwib3V0Ym91bmQiLCJvdXRib3VuZERldGFpbCIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwicGFyYW1ldGVycyIsIm5hdmlnYXRpb24iLCJ2aWV3TGV2ZWwiLCJjb250ZW50RGVuc2l0aWVzIiwicmVzb3VyY2VCdW5kbGUiLCJfX2J1bmRsZSIsImlzRGVza3RvcCIsInN5c3RlbSIsImRlc2t0b3AiLCJpc1Bob25lIiwicGhvbmUiLCJnZXRWaWV3RGF0YSIsImFzc2lnbiIsInNoZWxsQ29udGVudERlbnNpdHkiLCJnZXRDb250ZW50RGVuc2l0eSIsInVzZU5ld0xhenlMb2FkaW5nIiwiVXJpUGFyYW1ldGVycyIsImZyb21RdWVyeSIsIndpbmRvdyIsImxvY2F0aW9uIiwic2VhcmNoIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsImZvcm0iLCJjb250cm9sQ29uZmlndXJhdGlvbiIsInNBbm5vdGF0aW9uUGF0aCIsImluZGV4T2YiLCJzVGFyZ2V0QW5ub3RhdGlvblBhdGgiLCJyZXNvbHZlRHluYW1pY0V4cHJlc3Npb24iLCJjb252ZXJ0VHlwZXMiLCJUZW1wbGF0ZU1vZGVsIiwib0RpYWdub3N0aWNzIiwiZ2V0RGlhZ25vc3RpY3MiLCJpSXNzdWVDb3VudCIsImdldElzc3VlcyIsIm9Db252ZXJ0ZXJQYWdlTW9kZWwiLCJjb252ZXJ0UGFnZSIsImFJc3N1ZXMiLCJhQWRkZWRJc3N1ZXMiLCJzbGljZSIsIndhcm5pbmciLCJnZXREYXRhIiwiRXJyb3IiLCJnZXRWaWV3IiwiZ2V0SW50ZXJmYWNlIiwiZXhpdCIsInJlbW92ZUdsb2JhbEluc3RhbmNlIiwiU2VydmljZSIsIlRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeSIsIl9vSW5zdGFuY2VSZWdpc3RyeSIsIm9TZXJ2aWNlQ29udGV4dCIsImlDcmVhdGluZ1ZpZXdzIiwib1RlbXBsYXRlZFZpZXdTZXJ2aWNlIiwiZ2V0TnVtYmVyT2ZWaWV3c0luQ3JlYXRpb25TdGF0ZSIsIlNlcnZpY2VGYWN0b3J5Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7QUFnakJPLGtCQUFnQkEsSUFBaEIsRUFBc0JDLE9BQXRCLEVBQStCO0FBQ3JDLFFBQUk7QUFDSCxVQUFJQyxNQUFNLEdBQUdGLElBQUksRUFBakI7QUFDQSxLQUZELENBRUUsT0FBTUcsQ0FBTixFQUFTO0FBQ1YsYUFBT0YsT0FBTyxDQUFDRSxD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cUI7QUE2TXRCLE87Ozs7O1dBQ0RxSCxPLEdBQUEsbUJBQVU7QUFDVCxhQUFPLEtBQUs1SCxLQUFaO0FBQ0EsSzs7V0FDRDZILFksR0FBQSx3QkFBb0I7QUFDbkIsYUFBTyxJQUFQO0FBQ0EsSzs7V0FDREMsSSxHQUFBLGdCQUFPO0FBQ047QUFDQSxVQUFJLEtBQUtwTCxxQkFBVCxFQUFnQztBQUMvQixhQUFLQSxxQkFBTCxDQUEyQnFELE9BQTNCO0FBQ0E7O0FBQ0QsVUFBSSxLQUFLaEQsb0JBQVQsRUFBK0I7QUFDOUIsYUFBS0Esb0JBQUwsQ0FBMEJnRCxPQUExQjtBQUNBOztBQUNELFdBQUs3RSxRQUFMLENBQWM2TSxvQkFBZDtBQUNBLEs7OztJQS9ZaUNDLE87O01BaVo3QkMsMkI7Ozs7Ozs7Ozs7O2FBQ0xDLGtCLEdBQTJELEU7Ozs7OztZQUUzRDlMLGMsR0FBQSx3QkFBZStMLGVBQWYsRUFBOEU7QUFDN0VGLE1BQUFBLDJCQUEyQixDQUFDRyxjQUE1QjtBQUVBLFVBQU1DLHFCQUFxQixHQUFHLElBQUl2TyxvQkFBSixDQUF5Qm1JLE1BQU0sQ0FBQzZELE1BQVAsQ0FBYztBQUFFM0ssUUFBQUEsT0FBTyxFQUFFO0FBQVgsT0FBZCxFQUFpQ2dOLGVBQWpDLENBQXpCLENBQTlCO0FBQ0EsYUFBT0UscUJBQXFCLENBQUN4SyxXQUF0QixDQUFrQ2hFLElBQWxDLENBQXVDLFlBQVk7QUFDekRvTyxRQUFBQSwyQkFBMkIsQ0FBQ0csY0FBNUI7QUFDQSxlQUFPQyxxQkFBUDtBQUNBLE9BSE0sQ0FBUDtBQUlBLEs7O1lBQ0ROLG9CLEdBQUEsZ0NBQXVCO0FBQ3RCLFdBQUtHLGtCQUFMLEdBQTBCLEVBQTFCO0FBQ0EsSzs7Z0NBQ01JLCtCLEdBQVAsMkNBQXlDO0FBQ3hDLGFBQU9MLDJCQUEyQixDQUFDRyxjQUFuQztBQUNBLEs7OztJQWpCd0NHLGM7O1NBb0IzQk4sMkIiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IFVyaVBhcmFtZXRlcnMgZnJvbSBcInNhcC9iYXNlL3V0aWwvVXJpUGFyYW1ldGVyc1wiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgQ2FjaGVIYW5kbGVyU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9DYWNoZUhhbmRsZXJTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFRlbXBsYXRlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlTW9kZWxcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IENhY2hlTWFuYWdlciBmcm9tIFwic2FwL3VpL2NvcmUvY2FjaGUvQ2FjaGVNYW5hZ2VyXCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5UmVnaXN0cnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlSZWdpc3RyeVwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3RNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2Jhc2UvTWFuYWdlZE9iamVjdE1vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBWZXJzaW9uSW5mbyBmcm9tIFwic2FwL3VpL1ZlcnNpb25JbmZvXCI7XG5pbXBvcnQgdHlwZSB7IENvcmVFeCwgU2VydmljZUNvbnRleHQgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgeyByZXNvbHZlRHluYW1pY0V4cHJlc3Npb24gfSBmcm9tIFwiLi4vaGVscGVycy9EeW5hbWljQW5ub3RhdGlvblBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VNb2RlbFNlcnZpY2UgfSBmcm9tIFwiLi9SZXNvdXJjZU1vZGVsU2VydmljZUZhY3RvcnlcIjtcblxudHlwZSBUZW1wbGF0ZWRWaWV3U2VydmljZVNldHRpbmdzID0ge307XG5cbmNsYXNzIFRlbXBsYXRlZFZpZXdTZXJ2aWNlIGV4dGVuZHMgU2VydmljZTxUZW1wbGF0ZWRWaWV3U2VydmljZVNldHRpbmdzPiB7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxhbnk+O1xuXHRvVmlldyE6IFZpZXc7XG5cdG9SZXNvdXJjZU1vZGVsU2VydmljZSE6IFJlc291cmNlTW9kZWxTZXJ2aWNlO1xuXHRvQ2FjaGVIYW5kbGVyU2VydmljZSE6IENhY2hlSGFuZGxlclNlcnZpY2U7XG5cdG9GYWN0b3J5ITogVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5O1xuXHRyZXNvdXJjZU1vZGVsITogdHlwZW9mIFJlc291cmNlTW9kZWw7XG5cdHN0YWJsZUlkITogc3RyaW5nO1xuXHRUZW1wbGF0ZUNvbnZlcnRlcjogYW55O1xuXHRNZXRhTW9kZWxDb252ZXJ0ZXI6IGFueTtcblx0aW5pdCgpIHtcblx0XHRjb25zdCBhU2VydmljZURlcGVuZGVuY2llcyA9IFtdO1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db250ZXh0LnNjb3BlT2JqZWN0O1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbXBvbmVudCkgYXMgQXBwQ29tcG9uZW50O1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHNTdGFibGVJZCA9IGAke29BcHBDb21wb25lbnQuZ2V0TWV0YWRhdGEoKS5nZXRDb21wb25lbnROYW1lKCl9Ojoke29BcHBDb21wb25lbnQuZ2V0TG9jYWxJZChvQ29tcG9uZW50LmdldElkKCkpfWA7XG5cdFx0Y29uc3QgYUVuaGFuY2VJMThuID0gb0NvbXBvbmVudC5nZXRFbmhhbmNlSTE4bigpIHx8IFtdO1xuXHRcdGxldCBzQXBwTmFtZXNwYWNlO1xuXHRcdHRoaXMub0ZhY3RvcnkgPSBvQ29udGV4dC5mYWN0b3J5O1xuXHRcdGlmIChhRW5oYW5jZUkxOG4pIHtcblx0XHRcdHNBcHBOYW1lc3BhY2UgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFkYXRhKCkuZ2V0Q29tcG9uZW50TmFtZSgpO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhRW5oYW5jZUkxOG4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Ly8gSW4gb3JkZXIgdG8gc3VwcG9ydCB0ZXh0LXZlcnRpY2FsaXphdGlvbiBhcHBsaWNhdGlvbnMgY2FuIGFsc28gcGFzc3MgYSByZXNvdXJjZSBtb2RlbCBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHQvLyBVSTUgdGFrZXMgY2FyZSBvZiB0ZXh0LXZlcnRpY2FsaXphdGlvbiBmb3IgcmVzb3VyY2UgbW9kZWxzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG5cdFx0XHRcdC8vIEhlbmNlIGNoZWNrIGlmIHRoZSBnaXZlbiBrZXkgaXMgYSByZXNvdXJjZSBtb2RlbCBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHQvLyBpZiBzbyB0aGlzIG1vZGVsIHNob3VsZCBiZSB1c2VkIHRvIGVuaGFuY2UgdGhlIHNhcC5mZSByZXNvdXJjZSBtb2RlbCBzbyBwYXNzIGl0IGFzIGl0IGlzXG5cdFx0XHRcdGNvbnN0IG9SZXNvdXJjZU1vZGVsID0gb0FwcENvbXBvbmVudC5nZXRNb2RlbChhRW5oYW5jZUkxOG5baV0pO1xuXHRcdFx0XHRpZiAob1Jlc291cmNlTW9kZWwgJiYgb1Jlc291cmNlTW9kZWwuaXNBKFwic2FwLnVpLm1vZGVsLnJlc291cmNlLlJlc291cmNlTW9kZWxcIikpIHtcblx0XHRcdFx0XHRhRW5oYW5jZUkxOG5baV0gPSBvUmVzb3VyY2VNb2RlbDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhRW5oYW5jZUkxOG5baV0gPSBgJHtzQXBwTmFtZXNwYWNlfS4ke2FFbmhhbmNlSTE4bltpXS5yZXBsYWNlKFwiLnByb3BlcnRpZXNcIiwgXCJcIil9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IHNDYWNoZUlkZW50aWZpZXIgPSBgJHtvQXBwQ29tcG9uZW50LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfV8ke3NTdGFibGVJZH1fJHtzYXAudWlcblx0XHRcdC5nZXRDb3JlKClcblx0XHRcdC5nZXRDb25maWd1cmF0aW9uKClcblx0XHRcdC5nZXRMYW5ndWFnZVRhZygpfWA7XG5cdFx0YVNlcnZpY2VEZXBlbmRlbmNpZXMucHVzaChcblx0XHRcdFNlcnZpY2VGYWN0b3J5UmVnaXN0cnkuZ2V0KFwic2FwLmZlLmNvcmUuc2VydmljZXMuUmVzb3VyY2VNb2RlbFNlcnZpY2VcIilcblx0XHRcdFx0LmNyZWF0ZUluc3RhbmNlKHtcblx0XHRcdFx0XHRzY29wZVR5cGU6IFwiY29tcG9uZW50XCIsXG5cdFx0XHRcdFx0c2NvcGVPYmplY3Q6IG9Db21wb25lbnQsXG5cdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdGJ1bmRsZXM6IFtcInNhcC5mZS5jb3JlLm1lc3NhZ2VidW5kbGVcIiwgXCJzYXAuZmUubWFjcm9zLm1lc3NhZ2VidW5kbGVcIiwgXCJzYXAuZmUudGVtcGxhdGVzLm1lc3NhZ2VidW5kbGVcIl0sXG5cdFx0XHRcdFx0XHRlbmhhbmNlSTE4bjogYUVuaGFuY2VJMThuLFxuXHRcdFx0XHRcdFx0bW9kZWxOYW1lOiBcInNhcC5mZS5pMThuXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKChvUmVzb3VyY2VNb2RlbFNlcnZpY2U6IFJlc291cmNlTW9kZWxTZXJ2aWNlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vUmVzb3VyY2VNb2RlbFNlcnZpY2UgPSBvUmVzb3VyY2VNb2RlbFNlcnZpY2U7XG5cdFx0XHRcdFx0cmV0dXJuIG9SZXNvdXJjZU1vZGVsU2VydmljZS5nZXRSZXNvdXJjZU1vZGVsKCk7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdGFTZXJ2aWNlRGVwZW5kZW5jaWVzLnB1c2goXG5cdFx0XHRTZXJ2aWNlRmFjdG9yeVJlZ2lzdHJ5LmdldChcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkNhY2hlSGFuZGxlclNlcnZpY2VcIilcblx0XHRcdFx0LmNyZWF0ZUluc3RhbmNlKHtcblx0XHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiBvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0Y29tcG9uZW50OiBvQ29tcG9uZW50XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbigob0NhY2hlSGFuZGxlclNlcnZpY2U6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMub0NhY2hlSGFuZGxlclNlcnZpY2UgPSBvQ2FjaGVIYW5kbGVyU2VydmljZTtcblx0XHRcdFx0XHRyZXR1cm4gb0NhY2hlSGFuZGxlclNlcnZpY2UudmFsaWRhdGVDYWNoZUtleShzQ2FjaGVJZGVudGlmaWVyKTtcblx0XHRcdFx0fSlcblx0XHQpO1xuXHRcdGFTZXJ2aWNlRGVwZW5kZW5jaWVzLnB1c2goXG5cdFx0XHQoVmVyc2lvbkluZm8gYXMgYW55KVxuXHRcdFx0XHQubG9hZCgpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvSW5mbzogYW55KSB7XG5cdFx0XHRcdFx0bGV0IHNUaW1lc3RhbXAgPSBcIlwiO1xuXHRcdFx0XHRcdGlmICghb0luZm8ubGlicmFyaWVzKSB7XG5cdFx0XHRcdFx0XHRzVGltZXN0YW1wID0gKHNhcC51aSBhcyBhbnkpLmJ1aWxkaW5mby5idWlsZHRpbWU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9JbmZvLmxpYnJhcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChvTGlicmFyeTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdHNUaW1lc3RhbXAgKz0gb0xpYnJhcnkuYnVpbGRUaW1lc3RhbXA7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHNUaW1lc3RhbXA7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFwiPE5PVkFMVUU+XCI7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdGxldCBzUGFnZU1vZGVsQ2FjaGVLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gUHJvbWlzZS5hbGwoYVNlcnZpY2VEZXBlbmRlbmNpZXMpXG5cdFx0XHQudGhlbigoYURlcGVuZGVuY2llc1Jlc3VsdDogYW55W10pID0+IHtcblx0XHRcdFx0Y29uc3Qgc0NhY2hlS2V5ID0gYURlcGVuZGVuY2llc1Jlc3VsdFsxXTtcblx0XHRcdFx0Y29uc3Qgc1ZlcnNpb25JbmZvID0gYURlcGVuZGVuY2llc1Jlc3VsdFsyXTtcblx0XHRcdFx0Y29uc3Qgb1NoZWxsU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRcdFx0Y29uc3Qgb1NpZGVFZmZlY3RzU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXG5cdFx0XHRcdG9TaWRlRWZmZWN0c1NlcnZpY2VzLmluaXRpYWxpemVTaWRlRWZmZWN0cyhvQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkpO1xuXG5cdFx0XHRcdC8vIEluIGNhc2UgdGhlcmUgaXMgbm8gY2FjaGUga2V5IHdlIGlnbm9yZSB0aGUgdmlldyBjYWNoZVxuXHRcdFx0XHRzUGFnZU1vZGVsQ2FjaGVLZXkgPSBzQ2FjaGVLZXlcblx0XHRcdFx0XHQ/IGAke3NDYWNoZUtleX0tJHtzVmVyc2lvbkluZm99LSR7c1N0YWJsZUlkfS0ke29TaGVsbFNlcnZpY2VzLmluc3RhbmNlVHlwZX0tcGFnZU1vZGVsYFxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYURlcGVuZGVuY2llc1Jlc3VsdC5jb25jYXQoW3RoaXMuX2dldENhY2hlZE1vZGVsKHNQYWdlTW9kZWxDYWNoZUtleSldKSk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKGFEZXBlbmRlbmNpZXNSZXN1bHQ6IGFueVtdKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9SZXNvdXJjZU1vZGVsID0gYURlcGVuZGVuY2llc1Jlc3VsdFswXTtcblx0XHRcdFx0Y29uc3Qgc0NhY2hlS2V5ID0gYURlcGVuZGVuY2llc1Jlc3VsdFsxXTtcblx0XHRcdFx0Y29uc3Qgb1BhZ2VNb2RlbENhY2hlID0gYURlcGVuZGVuY2llc1Jlc3VsdFszXTtcblx0XHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoXG5cdFx0XHRcdFx0XHRbXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCIsIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIl0sXG5cdFx0XHRcdFx0XHQoVGVtcGxhdGVDb252ZXJ0ZXI6IGFueSwgTWV0YU1vZGVsQ29udmVydGVyOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNyZWF0ZVZpZXcoXG5cdFx0XHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0XHRcdHNTdGFibGVJZCxcblx0XHRcdFx0XHRcdFx0XHRcdHNDYWNoZUtleSxcblx0XHRcdFx0XHRcdFx0XHRcdHNQYWdlTW9kZWxDYWNoZUtleSxcblx0XHRcdFx0XHRcdFx0XHRcdG9QYWdlTW9kZWxDYWNoZSxcblx0XHRcdFx0XHRcdFx0XHRcdFRlbXBsYXRlQ29udmVydGVyLFxuXHRcdFx0XHRcdFx0XHRcdFx0TWV0YU1vZGVsQ29udmVydGVyXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChzQ2FjaGVLZXk6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvQ2FjaGVIYW5kbGVyU2VydmljZSA9IFNlcnZpY2VGYWN0b3J5UmVnaXN0cnkuZ2V0KFwic2FwLmZlLmNvcmUuc2VydmljZXMuQ2FjaGVIYW5kbGVyU2VydmljZVwiKS5nZXRJbnN0YW5jZShvTWV0YU1vZGVsKTtcblx0XHRcdFx0b0NhY2hlSGFuZGxlclNlcnZpY2UuaW52YWxpZGF0ZUlmTmVlZGVkKHNDYWNoZUtleSwgc0NhY2hlSWRlbnRpZmllcik7XG5cdFx0XHR9KTtcblx0fVxuXHRfZ2V0Q2FjaGVkTW9kZWwoc0NhY2hlS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0XHRpZiAoc0NhY2hlS2V5ICYmIChDb3JlIGFzIENvcmVFeCkuZ2V0Q29uZmlndXJhdGlvbigpLmdldFZpZXdDYWNoZSgpKSB7XG5cdFx0XHRyZXR1cm4gQ2FjaGVNYW5hZ2VyLmdldChzQ2FjaGVLZXkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdF9zZXRDYWNoZWRNb2RlbChzQ2FjaGVLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCwgb0NhY2hlTW9kZWw6IGFueSkge1xuXHRcdGlmIChzQ2FjaGVLZXkgJiYgKENvcmUgYXMgQ29yZUV4KS5nZXRDb25maWd1cmF0aW9uKCkuZ2V0Vmlld0NhY2hlKCkpIHtcblx0XHRcdENhY2hlTWFuYWdlci5zZXQoc0NhY2hlS2V5LCBvQ2FjaGVNb2RlbCk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0LyoqXG5cdCAqIFJlZnJlc2ggdGhlIGN1cnJlbnQgdmlldyB1c2luZyB0aGUgc2FtZSBjb25maWd1cmF0aW9uIGFzIGJlZm9yZS5cblx0ICogVGhpcyBpcyB1c2VmdWwgZm9yIG91ciBkZW1va2l0ICFcblx0ICpcblx0ICogQHBhcmFtIG9Db21wb25lbnRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGluZGljYXRpbmcgd2hlbiB0aGUgdmlldyBpcyByZWZyZXNoZWRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHJlZnJlc2hWaWV3KG9Db21wb25lbnQ6IGFueSkge1xuXHRcdGNvbnN0IG9Sb290VmlldyA9IG9Db21wb25lbnQuZ2V0Um9vdENvbnRyb2woKTtcblx0XHRpZiAob1Jvb3RWaWV3KSB7XG5cdFx0XHRvUm9vdFZpZXcuZGVzdHJveSgpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5vVmlldykge1xuXHRcdFx0dGhpcy5vVmlldy5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmNyZWF0ZVZpZXcodGhpcy5yZXNvdXJjZU1vZGVsLCB0aGlzLnN0YWJsZUlkLCBcIlwiLCBcIlwiLCB1bmRlZmluZWQsIHRoaXMuVGVtcGxhdGVDb252ZXJ0ZXIsIHRoaXMuTWV0YU1vZGVsQ29udmVydGVyKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRvQ29tcG9uZW50Lm9Db250YWluZXIuaW52YWxpZGF0ZSgpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0b0NvbXBvbmVudC5vQ29udGFpbmVyLmludmFsaWRhdGUoKTtcblx0XHRcdFx0TG9nLmVycm9yKG9FcnJvcik7XG5cdFx0XHR9KTtcblx0fVxuXHRhc3luYyBjcmVhdGVWaWV3KFxuXHRcdG9SZXNvdXJjZU1vZGVsOiBhbnksXG5cdFx0c1N0YWJsZUlkOiBhbnksXG5cdFx0c0NhY2hlS2V5OiBhbnksXG5cdFx0c1BhZ2VNb2RlbENhY2hlS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0b1BhZ2VNb2RlbENhY2hlOiBhbnksXG5cdFx0VGVtcGxhdGVDb252ZXJ0ZXI6IGFueSxcblx0XHRNZXRhTW9kZWxDb252ZXJ0ZXI6IGFueVxuXHQpOiBQcm9taXNlPGFueSB8IHZvaWQ+IHtcblx0XHR0aGlzLnJlc291cmNlTW9kZWwgPSBvUmVzb3VyY2VNb2RlbDtcblx0XHR0aGlzLnN0YWJsZUlkID0gc1N0YWJsZUlkO1xuXHRcdHRoaXMuVGVtcGxhdGVDb252ZXJ0ZXIgPSBUZW1wbGF0ZUNvbnZlcnRlcjtcblx0XHR0aGlzLk1ldGFNb2RlbENvbnZlcnRlciA9IE1ldGFNb2RlbENvbnZlcnRlcjtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdGNvbnN0IG1TZXJ2aWNlU2V0dGluZ3MgPSBvQ29udGV4dC5zZXR0aW5ncztcblx0XHRjb25zdCBzQ29udmVydGVyVHlwZSA9IG1TZXJ2aWNlU2V0dGluZ3MuY29udmVydGVyVHlwZTtcblx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbnRleHQuc2NvcGVPYmplY3Q7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9Db21wb25lbnQpIGFzIEFwcENvbXBvbmVudDtcblx0XHRjb25zdCBzRnVsbENvbnRleHRQYXRoID0gb0FwcENvbXBvbmVudC5nZXRSb3V0aW5nU2VydmljZSgpLmdldFRhcmdldEluZm9ybWF0aW9uRm9yKG9Db21wb25lbnQpLm9wdGlvbnMuc2V0dGluZ3MuZnVsbENvbnRleHRQYXRoO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IG9NYW5pZmVzdENvbnRlbnQ6IGFueSA9IG9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3QoKTtcblx0XHRjb25zdCBvRGV2aWNlTW9kZWwgPSBuZXcgSlNPTk1vZGVsKERldmljZSkuc2V0RGVmYXVsdEJpbmRpbmdNb2RlKFwiT25lV2F5XCIpO1xuXHRcdGNvbnN0IG9NYW5pZmVzdE1vZGVsID0gbmV3IEpTT05Nb2RlbChvTWFuaWZlc3RDb250ZW50KTtcblx0XHRjb25zdCBiRXJyb3IgPSBmYWxzZTtcblx0XHRsZXQgb1BhZ2VNb2RlbDogVGVtcGxhdGVNb2RlbCwgb1ZpZXdEYXRhTW9kZWw6IE1vZGVsLCBvVmlld1NldHRpbmdzOiBhbnksIG1WaWV3RGF0YTogYW55O1xuXG5cdFx0ZnVuY3Rpb24gZ2V0Vmlld1NldHRpbmdzKCkge1xuXHRcdFx0Y29uc3QgYVNwbGl0UGF0aCA9IHNGdWxsQ29udGV4dFBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBhU3BsaXRQYXRoLnJlZHVjZShmdW5jdGlvbiAoc1BhdGhTb0ZhcjogYW55LCBzTmV4dFBhdGhQYXJ0OiBhbnkpIHtcblx0XHRcdFx0aWYgKHNOZXh0UGF0aFBhcnQgPT09IFwiXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gc1BhdGhTb0Zhcjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc1BhdGhTb0ZhciA9PT0gXCJcIikge1xuXHRcdFx0XHRcdHNQYXRoU29GYXIgPSBgLyR7c05leHRQYXRoUGFydH1gO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IG9UYXJnZXQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGF0aFNvRmFyfS8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy8ke3NOZXh0UGF0aFBhcnR9YCk7XG5cdFx0XHRcdFx0aWYgKG9UYXJnZXQgJiYgT2JqZWN0LmtleXMob1RhcmdldCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0c1BhdGhTb0ZhciArPSBcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzUGF0aFNvRmFyICs9IGAvJHtzTmV4dFBhdGhQYXJ0fWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNQYXRoU29GYXI7XG5cdFx0XHR9LCBcIlwiKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6IFwiWE1MXCIsXG5cdFx0XHRcdHByZXByb2Nlc3NvcnM6IHtcblx0XHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IHNFbnRpdHlTZXRQYXRoID8gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRW50aXR5U2V0UGF0aCkgOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRmdWxsQ29udGV4dFBhdGg6IHNGdWxsQ29udGV4dFBhdGggPyBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdWxsQ29udGV4dFBhdGgpIDogbnVsbCxcblx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg6IHNGdWxsQ29udGV4dFBhdGggPyBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdWxsQ29udGV4dFBhdGgpIDogbnVsbCxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogb1BhZ2VNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiwgdW5kZWZpbmVkLCB7IG5vUmVzb2x2ZTogdHJ1ZSB9KSxcblx0XHRcdFx0XHRcdFx0dmlld0RhdGE6IG1WaWV3RGF0YSA/IG9WaWV3RGF0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSA6IG51bGxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRmdWxsQ29udGV4dFBhdGg6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcInNhcC5mZS5pMThuXCI6IG9SZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdFwiZGV2aWNlXCI6IG9EZXZpY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0bWFuaWZlc3Q6IG9NYW5pZmVzdE1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBvUGFnZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHR2aWV3RGF0YTogb1ZpZXdEYXRhTW9kZWxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRhcHBDb21wb25lbnQ6IG9BcHBDb21wb25lbnRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGlkOiBzU3RhYmxlSWQsXG5cdFx0XHRcdHZpZXdOYW1lOiBtU2VydmljZVNldHRpbmdzLnZpZXdOYW1lIHx8IG9Db21wb25lbnQuZ2V0Vmlld05hbWUoKSxcblx0XHRcdFx0dmlld0RhdGE6IG1WaWV3RGF0YSxcblx0XHRcdFx0Y2FjaGU6IHsga2V5czogW3NDYWNoZUtleV0gfSxcblx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XCJzYXAuZmUuaTE4blwiOiBvUmVzb3VyY2VNb2RlbFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRoZWlnaHQ6IFwiMTAwJVwiXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRjb25zdCBjcmVhdGVFcnJvclBhZ2UgPSAocmVhc29uOiBhbnkpID0+IHtcblx0XHRcdC8vIGp1c3QgcmVwbGFjZSB0aGUgdmlldyBuYW1lIGFuZCBhZGQgYW4gYWRkaXRpb25hbCBtb2RlbCBjb250YWluaW5nIHRoZSByZWFzb24sIGJ1dFxuXHRcdFx0Ly8ga2VlcCB0aGUgb3RoZXIgc2V0dGluZ3Ncblx0XHRcdExvZy5lcnJvcihyZWFzb24ubWVzc2FnZSwgcmVhc29uKTtcblx0XHRcdG9WaWV3U2V0dGluZ3Mudmlld05hbWUgPSBtU2VydmljZVNldHRpbmdzLmVycm9yVmlld05hbWUgfHwgXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy52aWV3LlRlbXBsYXRpbmdFcnJvclBhZ2VcIjtcblx0XHRcdG9WaWV3U2V0dGluZ3MucHJlcHJvY2Vzc29ycy54bWwubW9kZWxzW1wiZXJyb3JcIl0gPSBuZXcgSlNPTk1vZGVsKHJlYXNvbik7XG5cblx0XHRcdHJldHVybiBvQ29tcG9uZW50LnJ1bkFzT3duZXIoKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gVmlldy5jcmVhdGUob1ZpZXdTZXR0aW5ncykudGhlbigob1ZpZXc6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMub1ZpZXcgPSBvVmlldztcblx0XHRcdFx0XHR0aGlzLm9WaWV3LnNldE1vZGVsKG5ldyBNYW5hZ2VkT2JqZWN0TW9kZWwodGhpcy5vVmlldyksIFwiJHZpZXdcIik7XG5cdFx0XHRcdFx0b0NvbXBvbmVudC5zZXRBZ2dyZWdhdGlvbihcInJvb3RDb250cm9sXCIsIHRoaXMub1ZpZXcpO1xuXHRcdFx0XHRcdHJldHVybiBzQ2FjaGVLZXk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBvUm91dGluZ1NlcnZpY2UgPSBhd2FpdCBvQXBwQ29tcG9uZW50LmdldFNlcnZpY2UoXCJyb3V0aW5nU2VydmljZVwiKTtcblx0XHRcdC8vIFJldHJpZXZlIHRoZSB2aWV3TGV2ZWwgZm9yIHRoZSBjb21wb25lbnRcblx0XHRcdGNvbnN0IG9UYXJnZXRJbmZvID0gb1JvdXRpbmdTZXJ2aWNlLmdldFRhcmdldEluZm9ybWF0aW9uRm9yKG9Db21wb25lbnQpO1xuXHRcdFx0Y29uc3QgbU91dGJvdW5kcyA9XG5cdFx0XHRcdG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuYXBwXCJdICYmXG5cdFx0XHRcdG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuYXBwXCJdLmNyb3NzTmF2aWdhdGlvbiAmJlxuXHRcdFx0XHRvTWFuaWZlc3RDb250ZW50W1wic2FwLmFwcFwiXS5jcm9zc05hdmlnYXRpb24ub3V0Ym91bmRzO1xuXHRcdFx0Y29uc3QgbU5hdmlnYXRpb24gPSBvQ29tcG9uZW50LmdldE5hdmlnYXRpb24oKSB8fCB7fTtcblx0XHRcdE9iamVjdC5rZXlzKG1OYXZpZ2F0aW9uKS5mb3JFYWNoKGZ1bmN0aW9uIChuYXZpZ2F0aW9uT2JqZWN0S2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvbk9iamVjdCA9IG1OYXZpZ2F0aW9uW25hdmlnYXRpb25PYmplY3RLZXldO1xuXHRcdFx0XHRsZXQgb3V0Ym91bmRDb25maWc7XG5cdFx0XHRcdGlmIChuYXZpZ2F0aW9uT2JqZWN0LmRldGFpbCAmJiBuYXZpZ2F0aW9uT2JqZWN0LmRldGFpbC5vdXRib3VuZCAmJiBtT3V0Ym91bmRzW25hdmlnYXRpb25PYmplY3QuZGV0YWlsLm91dGJvdW5kXSkge1xuXHRcdFx0XHRcdG91dGJvdW5kQ29uZmlnID0gbU91dGJvdW5kc1tuYXZpZ2F0aW9uT2JqZWN0LmRldGFpbC5vdXRib3VuZF07XG5cdFx0XHRcdFx0bmF2aWdhdGlvbk9iamVjdC5kZXRhaWwub3V0Ym91bmREZXRhaWwgPSB7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb3V0Ym91bmRDb25maWcuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IG91dGJvdW5kQ29uZmlnLmFjdGlvbixcblx0XHRcdFx0XHRcdHBhcmFtZXRlcnM6IG91dGJvdW5kQ29uZmlnLnBhcmFtZXRlcnNcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChuYXZpZ2F0aW9uT2JqZWN0LmNyZWF0ZSAmJiBuYXZpZ2F0aW9uT2JqZWN0LmNyZWF0ZS5vdXRib3VuZCAmJiBtT3V0Ym91bmRzW25hdmlnYXRpb25PYmplY3QuY3JlYXRlLm91dGJvdW5kXSkge1xuXHRcdFx0XHRcdG91dGJvdW5kQ29uZmlnID0gbU91dGJvdW5kc1tuYXZpZ2F0aW9uT2JqZWN0LmNyZWF0ZS5vdXRib3VuZF07XG5cdFx0XHRcdFx0bmF2aWdhdGlvbk9iamVjdC5jcmVhdGUub3V0Ym91bmREZXRhaWwgPSB7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb3V0Ym91bmRDb25maWcuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IG91dGJvdW5kQ29uZmlnLmFjdGlvbixcblx0XHRcdFx0XHRcdHBhcmFtZXRlcnM6IG91dGJvdW5kQ29uZmlnLnBhcmFtZXRlcnNcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdG1WaWV3RGF0YSA9IHtcblx0XHRcdFx0bmF2aWdhdGlvbjogbU5hdmlnYXRpb24sXG5cdFx0XHRcdHZpZXdMZXZlbDogb1RhcmdldEluZm8udmlld0xldmVsLFxuXHRcdFx0XHRzdGFibGVJZDogc1N0YWJsZUlkLFxuXHRcdFx0XHRjb250ZW50RGVuc2l0aWVzOiBvTWFuaWZlc3RDb250ZW50W1wic2FwLnVpNVwiXS5jb250ZW50RGVuc2l0aWVzLFxuXHRcdFx0XHRyZXNvdXJjZUJ1bmRsZTogb1Jlc291cmNlTW9kZWwuX19idW5kbGUsXG5cdFx0XHRcdGZ1bGxDb250ZXh0UGF0aDogc0Z1bGxDb250ZXh0UGF0aCxcblx0XHRcdFx0aXNEZXNrdG9wOiAoRGV2aWNlIGFzIGFueSkuc3lzdGVtLmRlc2t0b3AsXG5cdFx0XHRcdGlzUGhvbmU6IChEZXZpY2UgYXMgYW55KS5zeXN0ZW0ucGhvbmVcblx0XHRcdH07XG5cblx0XHRcdGlmIChvQ29tcG9uZW50LmdldFZpZXdEYXRhKSB7XG5cdFx0XHRcdE9iamVjdC5hc3NpZ24obVZpZXdEYXRhLCBvQ29tcG9uZW50LmdldFZpZXdEYXRhKCkpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlcyA9IG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdFx0bVZpZXdEYXRhLmNvbnZlcnRlclR5cGUgPSBzQ29udmVydGVyVHlwZTtcblx0XHRcdG1WaWV3RGF0YS5zaGVsbENvbnRlbnREZW5zaXR5ID0gb1NoZWxsU2VydmljZXMuZ2V0Q29udGVudERlbnNpdHkoKTtcblx0XHRcdG1WaWV3RGF0YS51c2VOZXdMYXp5TG9hZGluZyA9IFVyaVBhcmFtZXRlcnMuZnJvbVF1ZXJ5KHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldChcInNhcC1mZS14eC1sYXp5bG9hZGluZ3Rlc3RcIikgPT09IFwidHJ1ZVwiO1xuXHRcdFx0bVZpZXdEYXRhLnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgPVxuXHRcdFx0XHRvTWFuaWZlc3RDb250ZW50W1wic2FwLmZlXCJdICYmIG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuZmVcIl0uZm9ybVxuXHRcdFx0XHRcdD8gb01hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXS5mb3JtLnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Rcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdG9WaWV3RGF0YU1vZGVsID0gbmV3IEpTT05Nb2RlbChtVmlld0RhdGEpO1xuXHRcdFx0aWYgKG1WaWV3RGF0YSAmJiBtVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24pIHtcblx0XHRcdFx0T2JqZWN0LmtleXMobVZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uKS5mb3JFYWNoKGZ1bmN0aW9uIChzQW5ub3RhdGlvblBhdGg6IHN0cmluZykge1xuXHRcdFx0XHRcdGlmIChzQW5ub3RhdGlvblBhdGguaW5kZXhPZihcIltcIikgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzVGFyZ2V0QW5ub3RhdGlvblBhdGggPSByZXNvbHZlRHluYW1pY0V4cHJlc3Npb24oc0Fubm90YXRpb25QYXRoLCBvTWV0YU1vZGVsKTtcblx0XHRcdFx0XHRcdG1WaWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbltzVGFyZ2V0QW5ub3RhdGlvblBhdGhdID0gbVZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uW3NBbm5vdGF0aW9uUGF0aF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdE1ldGFNb2RlbENvbnZlcnRlci5jb252ZXJ0VHlwZXMob01ldGFNb2RlbCwgb0FwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpKTtcblx0XHRcdG9QYWdlTW9kZWwgPSBuZXcgVGVtcGxhdGVNb2RlbCgoKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0aWYgKG9QYWdlTW9kZWxDYWNoZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9QYWdlTW9kZWxDYWNoZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0RpYWdub3N0aWNzID0gb0FwcENvbXBvbmVudC5nZXREaWFnbm9zdGljcygpO1xuXHRcdFx0XHRcdFx0Y29uc3QgaUlzc3VlQ291bnQgPSBvRGlhZ25vc3RpY3MuZ2V0SXNzdWVzKCkubGVuZ3RoO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0NvbnZlcnRlclBhZ2VNb2RlbCA9IFRlbXBsYXRlQ29udmVydGVyLmNvbnZlcnRQYWdlKFxuXHRcdFx0XHRcdFx0XHRzQ29udmVydGVyVHlwZSxcblx0XHRcdFx0XHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0bVZpZXdEYXRhLFxuXHRcdFx0XHRcdFx0XHRvRGlhZ25vc3RpY3MsXG5cdFx0XHRcdFx0XHRcdHNGdWxsQ29udGV4dFBhdGgsXG5cdFx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgYUlzc3VlcyA9IG9EaWFnbm9zdGljcy5nZXRJc3N1ZXMoKTtcblx0XHRcdFx0XHRcdGNvbnN0IGFBZGRlZElzc3VlcyA9IGFJc3N1ZXMuc2xpY2UoaUlzc3VlQ291bnQpO1xuXHRcdFx0XHRcdFx0aWYgKGFBZGRlZElzc3Vlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdExvZy53YXJuaW5nKFxuXHRcdFx0XHRcdFx0XHRcdFwiU29tZSBpc3N1ZXMgaGF2ZSBiZWVuIGRldGVjdGVkIGluIHlvdXIgcHJvamVjdCwgcGxlYXNlIGNoZWNrIHRoZSBVSTUgc3VwcG9ydCBhc3Npc3RhbnQgcnVsZSBmb3Igc2FwLmZlLmNvcmVcIlxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIG9Db252ZXJ0ZXJQYWdlTW9kZWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBhbnksIGVycm9yIGFzIGFueSk7XG5cdFx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0XHR9XG5cdFx0XHR9LCBvTWV0YU1vZGVsKTtcblxuXHRcdFx0aWYgKCFiRXJyb3IpIHtcblx0XHRcdFx0b1ZpZXdTZXR0aW5ncyA9IGdldFZpZXdTZXR0aW5ncygpO1xuXHRcdFx0XHQvLyBTZXR0aW5nIHRoZSBwYWdlTW9kZWwgb24gdGhlIGNvbXBvbmVudCBmb3IgcG90ZW50aWFsIHJldXNlXG5cdFx0XHRcdG9Db21wb25lbnQuc2V0TW9kZWwob1BhZ2VNb2RlbCwgXCJfcGFnZU1vZGVsXCIpO1xuXHRcdFx0XHRyZXR1cm4gb0NvbXBvbmVudC5ydW5Bc093bmVyKCgpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gVmlldy5jcmVhdGUob1ZpZXdTZXR0aW5ncylcblx0XHRcdFx0XHRcdC5jYXRjaChjcmVhdGVFcnJvclBhZ2UpXG5cdFx0XHRcdFx0XHQudGhlbigob1ZpZXc6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLm9WaWV3ID0gb1ZpZXc7XG5cdFx0XHRcdFx0XHRcdHRoaXMub1ZpZXcuc2V0TW9kZWwobmV3IE1hbmFnZWRPYmplY3RNb2RlbCh0aGlzLm9WaWV3KSwgXCIkdmlld1wiKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5vVmlldy5zZXRNb2RlbChvVmlld0RhdGFNb2RlbCwgXCJ2aWV3RGF0YVwiKTtcblx0XHRcdFx0XHRcdFx0b0NvbXBvbmVudC5zZXRBZ2dyZWdhdGlvbihcInJvb3RDb250cm9sXCIsIHRoaXMub1ZpZXcpO1xuXHRcdFx0XHRcdFx0XHQvLyBGaXJlIGFuZCBmb3JnZXQgaW4gdGhlIGNhY2hlXG5cdFx0XHRcdFx0XHRcdGlmICghb1BhZ2VNb2RlbENhY2hlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fc2V0Q2FjaGVkTW9kZWwoc1BhZ2VNb2RlbENhY2hlS2V5LCAob1BhZ2VNb2RlbCBhcyBhbnkpLmdldERhdGEoKSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNDYWNoZUtleTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IExvZy5lcnJvcihlLm1lc3NhZ2UsIGUpKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3I6IGFueSkge1xuXHRcdFx0TG9nLmVycm9yKGVycm9yLm1lc3NhZ2UsIGVycm9yKTtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgdmlldyA6ICR7ZXJyb3J9YCk7XG5cdFx0fVxuXHR9XG5cdGdldFZpZXcoKSB7XG5cdFx0cmV0dXJuIHRoaXMub1ZpZXc7XG5cdH1cblx0Z2V0SW50ZXJmYWNlKCk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0ZXhpdCgpIHtcblx0XHQvLyBEZXJlZ2lzdGVyIGdsb2JhbCBpbnN0YW5jZVxuXHRcdGlmICh0aGlzLm9SZXNvdXJjZU1vZGVsU2VydmljZSkge1xuXHRcdFx0dGhpcy5vUmVzb3VyY2VNb2RlbFNlcnZpY2UuZGVzdHJveSgpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5vQ2FjaGVIYW5kbGVyU2VydmljZSkge1xuXHRcdFx0dGhpcy5vQ2FjaGVIYW5kbGVyU2VydmljZS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdHRoaXMub0ZhY3RvcnkucmVtb3ZlR2xvYmFsSW5zdGFuY2UoKTtcblx0fVxufVxuY2xhc3MgVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5IGV4dGVuZHMgU2VydmljZUZhY3Rvcnk8VGVtcGxhdGVkVmlld1NlcnZpY2VTZXR0aW5ncz4ge1xuXHRfb0luc3RhbmNlUmVnaXN0cnk6IFJlY29yZDxzdHJpbmcsIFRlbXBsYXRlZFZpZXdTZXJ2aWNlPiA9IHt9O1xuXHRzdGF0aWMgaUNyZWF0aW5nVmlld3M6IDA7XG5cdGNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8VGVtcGxhdGVkVmlld1NlcnZpY2VTZXR0aW5ncz4pIHtcblx0XHRUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkuaUNyZWF0aW5nVmlld3MrKztcblxuXHRcdGNvbnN0IG9UZW1wbGF0ZWRWaWV3U2VydmljZSA9IG5ldyBUZW1wbGF0ZWRWaWV3U2VydmljZShPYmplY3QuYXNzaWduKHsgZmFjdG9yeTogdGhpcyB9LCBvU2VydmljZUNvbnRleHQpKTtcblx0XHRyZXR1cm4gb1RlbXBsYXRlZFZpZXdTZXJ2aWNlLmluaXRQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0VGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5LmlDcmVhdGluZ1ZpZXdzLS07XG5cdFx0XHRyZXR1cm4gb1RlbXBsYXRlZFZpZXdTZXJ2aWNlO1xuXHRcdH0pO1xuXHR9XG5cdHJlbW92ZUdsb2JhbEluc3RhbmNlKCkge1xuXHRcdHRoaXMuX29JbnN0YW5jZVJlZ2lzdHJ5ID0ge307XG5cdH1cblx0c3RhdGljIGdldE51bWJlck9mVmlld3NJbkNyZWF0aW9uU3RhdGUoKSB7XG5cdFx0cmV0dXJuIFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeS5pQ3JlYXRpbmdWaWV3cztcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3Rvcnk7XG4iXX0=
|