@sapui5/sap.fe.core 1.97.0 → 1.100.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +7 -4
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AnnotationHelper.js +309 -405
- package/src/sap/fe/core/AnnotationHelper.ts +315 -0
- package/src/sap/fe/core/AppComponent.js +389 -397
- package/src/sap/fe/core/AppComponent.ts +403 -0
- package/src/sap/fe/core/AppStateHandler.js +198 -181
- package/src/sap/fe/core/AppStateHandler.ts +171 -0
- package/src/sap/fe/core/BaseController.js +83 -58
- package/src/sap/fe/core/BaseController.ts +68 -0
- package/src/sap/fe/core/BusyLocker.js +105 -121
- package/src/sap/fe/core/BusyLocker.ts +98 -0
- package/src/sap/fe/core/CommonUtils.js +2164 -2379
- package/src/sap/fe/core/CommonUtils.ts +2177 -0
- package/src/sap/fe/core/ExtensionAPI.js +279 -266
- package/src/sap/fe/core/ExtensionAPI.ts +250 -0
- package/src/sap/fe/core/PageController.js +218 -125
- package/src/sap/fe/core/PageController.ts +129 -0
- package/src/sap/fe/core/RouterProxy.js +924 -807
- package/src/sap/fe/core/RouterProxy.ts +840 -0
- package/src/sap/fe/core/Synchronization.js +41 -35
- package/src/sap/fe/core/Synchronization.ts +29 -0
- package/src/sap/fe/core/TemplateComponent.js +173 -155
- package/src/sap/fe/core/TemplateComponent.ts +173 -0
- package/src/sap/fe/core/TemplateModel.js +79 -54
- package/src/sap/fe/core/TemplateModel.ts +63 -0
- package/src/sap/fe/core/TransactionHelper.js +1560 -1579
- package/src/sap/fe/core/TransactionHelper.ts +1717 -0
- package/src/sap/fe/core/actions/collaboration/ActivitySync.js +392 -0
- package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
- package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +136 -0
- package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
- package/src/sap/fe/core/actions/collaboration/Manage.js +262 -0
- package/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
- package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
- package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
- package/src/sap/fe/core/actions/draft.js +521 -581
- package/src/sap/fe/core/actions/draft.ts +566 -0
- package/src/sap/fe/core/actions/messageHandling.js +564 -511
- package/src/sap/fe/core/actions/messageHandling.ts +552 -0
- package/src/sap/fe/core/actions/nonDraft.js +17 -19
- package/src/sap/fe/core/actions/nonDraft.ts +12 -0
- package/src/sap/fe/core/actions/operations.js +1093 -1211
- package/src/sap/fe/core/actions/operations.ts +1192 -0
- package/src/sap/fe/core/actions/sticky.js +114 -104
- package/src/sap/fe/core/actions/sticky.ts +119 -0
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +70 -66
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
- package/src/sap/fe/core/controllerextensions/EditFlow.js +1594 -1701
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +80 -54
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +719 -505
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +797 -813
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +1005 -973
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +530 -476
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +137 -46
- package/src/sap/fe/core/controllerextensions/MassEdit.js +144 -0
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +234 -232
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
- package/src/sap/fe/core/controllerextensions/PageReady.js +302 -337
- package/src/sap/fe/core/controllerextensions/PageReady.ts +23 -17
- package/src/sap/fe/core/controllerextensions/Paginator.js +189 -148
- package/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
- package/src/sap/fe/core/controllerextensions/Placeholder.js +158 -146
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
- package/src/sap/fe/core/controllerextensions/Routing.js +145 -106
- package/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +8 -6
- package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
- package/src/sap/fe/core/controllerextensions/Share.js +220 -244
- package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
- package/src/sap/fe/core/controllerextensions/SideEffects.js +593 -634
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +29 -27
- package/src/sap/fe/core/controllerextensions/ViewState.js +789 -806
- package/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +4 -3
- package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
- package/src/sap/fe/core/controls/CommandExecution.js +68 -66
- package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
- package/src/sap/fe/core/controls/ConditionalWrapper.js +91 -75
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +131 -125
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +105 -110
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
- package/src/sap/fe/core/controls/FieldWrapper.js +122 -140
- package/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
- package/src/sap/fe/core/controls/FilterBar.js +163 -159
- package/src/sap/fe/core/controls/FilterBar.ts +143 -0
- package/src/sap/fe/core/controls/FormElementWrapper.js +46 -44
- package/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +38 -42
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +2 -1
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +127 -116
- package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -255
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +151 -141
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +336 -322
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +79 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
- package/src/sap/fe/core/converters/ConverterContext.js +348 -367
- package/src/sap/fe/core/converters/ConverterContext.ts +33 -19
- package/src/sap/fe/core/converters/ManifestSettings.js +12 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +16 -1
- package/src/sap/fe/core/converters/ManifestWrapper.js +354 -354
- package/src/sap/fe/core/converters/ManifestWrapper.ts +34 -6
- package/src/sap/fe/core/converters/MetaModelConverter.js +72 -9
- package/src/sap/fe/core/converters/MetaModelConverter.ts +75 -16
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.ts +4 -3
- package/src/sap/fe/core/converters/annotations/DataField.js +28 -14
- package/src/sap/fe/core/converters/annotations/DataField.ts +38 -14
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +33 -21
- package/src/sap/fe/core/converters/controls/Common/Action.js +11 -2
- package/src/sap/fe/core/converters/controls/Common/Action.ts +8 -2
- package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
- package/src/sap/fe/core/converters/controls/Common/Form.js +21 -11
- package/src/sap/fe/core/converters/controls/Common/Form.ts +28 -6
- package/src/sap/fe/core/converters/controls/Common/KPI.js +69 -4
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +75 -2
- package/src/sap/fe/core/converters/controls/Common/Table.js +507 -408
- package/src/sap/fe/core/converters/controls/Common/Table.ts +618 -500
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +592 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +718 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +465 -59
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +462 -72
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +24 -9
- package/src/sap/fe/core/converters/helpers/Aggregation.js +118 -121
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -5
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
- package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -0
- package/src/sap/fe/core/converters/helpers/Key.js +42 -57
- package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +28 -7
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +23 -6
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +20 -7
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +36 -14
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -5
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +93 -90
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
- package/src/sap/fe/core/formatters/TableFormatter.js +91 -29
- package/src/sap/fe/core/formatters/TableFormatter.ts +94 -28
- package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
- package/src/sap/fe/core/formatters/ValueFormatter.ts +30 -7
- package/src/sap/fe/core/fpm/Component.js +51 -54
- package/src/sap/fe/core/fpm/Component.ts +48 -0
- package/src/sap/fe/core/helpers/AppStartupHelper.js +373 -0
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +417 -0
- package/src/sap/fe/core/helpers/BindingExpression.js +489 -442
- package/src/sap/fe/core/helpers/BindingExpression.ts +486 -469
- package/src/sap/fe/core/helpers/ClassSupport.js +212 -76
- package/src/sap/fe/core/helpers/ClassSupport.ts +198 -71
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +64 -59
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +52 -0
- package/src/sap/fe/core/helpers/EditState.js +81 -84
- package/src/sap/fe/core/helpers/EditState.ts +81 -0
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
- package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
- package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +4 -5
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +10 -10
- package/src/sap/fe/core/helpers/MassEditHelper.js +604 -0
- package/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +253 -225
- package/src/sap/fe/core/helpers/ModelHelper.ts +250 -0
- package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
- package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +336 -313
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +334 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
- package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
- package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
- package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
- package/src/sap/fe/core/library.js +427 -425
- package/src/sap/fe/core/library.support.js +23 -27
- package/src/sap/fe/core/library.support.ts +23 -0
- package/src/sap/fe/core/library.ts +420 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +64 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +69 -0
- package/src/sap/fe/core/messagebundle.properties +78 -13
- package/src/sap/fe/core/messagebundle_ar.properties +58 -7
- package/src/sap/fe/core/messagebundle_bg.properties +58 -7
- package/src/sap/fe/core/messagebundle_ca.properties +58 -7
- package/src/sap/fe/core/messagebundle_cs.properties +59 -8
- package/src/sap/fe/core/messagebundle_cy.properties +58 -7
- package/src/sap/fe/core/messagebundle_da.properties +58 -7
- package/src/sap/fe/core/messagebundle_de.properties +58 -7
- package/src/sap/fe/core/messagebundle_el.properties +58 -7
- package/src/sap/fe/core/messagebundle_en.properties +57 -6
- package/src/sap/fe/core/messagebundle_en_GB.properties +57 -6
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +61 -6
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +58 -7
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +58 -7
- package/src/sap/fe/core/messagebundle_es.properties +58 -7
- package/src/sap/fe/core/messagebundle_es_MX.properties +58 -7
- package/src/sap/fe/core/messagebundle_et.properties +58 -7
- package/src/sap/fe/core/messagebundle_fi.properties +60 -9
- package/src/sap/fe/core/messagebundle_fr.properties +64 -13
- package/src/sap/fe/core/messagebundle_fr_CA.properties +59 -8
- package/src/sap/fe/core/messagebundle_hi.properties +58 -7
- package/src/sap/fe/core/messagebundle_hr.properties +58 -7
- package/src/sap/fe/core/messagebundle_hu.properties +59 -8
- package/src/sap/fe/core/messagebundle_id.properties +61 -10
- package/src/sap/fe/core/messagebundle_it.properties +58 -7
- package/src/sap/fe/core/messagebundle_iw.properties +58 -7
- package/src/sap/fe/core/messagebundle_ja.properties +58 -7
- package/src/sap/fe/core/messagebundle_kk.properties +58 -7
- package/src/sap/fe/core/messagebundle_ko.properties +58 -7
- package/src/sap/fe/core/messagebundle_lt.properties +58 -7
- package/src/sap/fe/core/messagebundle_lv.properties +59 -8
- package/src/sap/fe/core/messagebundle_ms.properties +58 -7
- package/src/sap/fe/core/messagebundle_nl.properties +58 -7
- package/src/sap/fe/core/messagebundle_no.properties +58 -7
- package/src/sap/fe/core/messagebundle_pl.properties +58 -7
- package/src/sap/fe/core/messagebundle_pt.properties +59 -8
- package/src/sap/fe/core/messagebundle_pt_PT.properties +58 -7
- package/src/sap/fe/core/messagebundle_ro.properties +58 -7
- package/src/sap/fe/core/messagebundle_ru.properties +58 -7
- package/src/sap/fe/core/messagebundle_sh.properties +58 -7
- package/src/sap/fe/core/messagebundle_sk.properties +58 -7
- package/src/sap/fe/core/messagebundle_sl.properties +58 -7
- package/src/sap/fe/core/messagebundle_sv.properties +59 -8
- package/src/sap/fe/core/messagebundle_th.properties +58 -7
- package/src/sap/fe/core/messagebundle_tr.properties +60 -9
- package/src/sap/fe/core/messagebundle_uk.properties +58 -7
- package/src/sap/fe/core/messagebundle_vi.properties +58 -7
- package/src/sap/fe/core/messagebundle_zh_CN.properties +58 -7
- package/src/sap/fe/core/messagebundle_zh_TW.properties +58 -7
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +45 -71
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +231 -202
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +67 -92
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +10 -6
- package/src/sap/fe/core/services/NavigationServiceFactory.js +351 -300
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +313 -0
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +114 -81
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +83 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.js +927 -1152
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
- package/src/sap/fe/core/services/ShellServicesFactory.js +649 -707
- package/src/sap/fe/core/services/ShellServicesFactory.ts +52 -15
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +569 -637
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +78 -102
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +429 -478
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +460 -0
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
- package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
- package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
- package/src/sap/fe/core/support/CommonHelper.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.ts +1 -1
- package/src/sap/fe/core/support/Diagnostics.js +36 -48
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
- package/src/sap/fe/core/templating/DataModelPathHelper.js +97 -127
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +112 -135
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
- package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
- package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
- package/src/sap/fe/core/templating/FilterHelper.js +140 -78
- package/src/sap/fe/core/templating/FilterHelper.ts +149 -78
- package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
- package/src/sap/fe/core/templating/PropertyHelper.ts +2 -2
- package/src/sap/fe/core/templating/UIFormatters.js +76 -135
- package/src/sap/fe/core/templating/UIFormatters.ts +76 -99
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/Email.ts +4 -6
- package/ui5.yaml +0 -3
- package/src/sap/fe/core/controls/filterbar.d.js +0 -8
- package/src/sap/fe/core/controls/filterbar.d.ts +0 -0
|
@@ -507,10 +507,15 @@ sap.ui.define(["../ManifestSettings", "../controls/Common/DataVisualization", ".
|
|
|
507
507
|
if (oConfig) {
|
|
508
508
|
singleChartId = oConfig.chartId;
|
|
509
509
|
singleTableId = oConfig.tableId;
|
|
510
|
-
}
|
|
510
|
+
} // Chart has a dependency to filter bar (issue with loading data). Once resolved, the check for chart should be removed here.
|
|
511
|
+
// Until then, hiding filter bar is now allowed if a chart is being used on LR.
|
|
512
|
+
|
|
511
513
|
|
|
512
|
-
var
|
|
513
|
-
var
|
|
514
|
+
var hideFilterBar = manifestWrapper.isFilterBarHidden() && singleChartId === "";
|
|
515
|
+
var lrFilterProperties = getSelectionFields(converterContext, lrTableVisualizations);
|
|
516
|
+
var selectionFields = lrFilterProperties.selectionFields;
|
|
517
|
+
var propertyInfoFields = lrFilterProperties.sPropertyInfo;
|
|
518
|
+
var hideBasicSearch = getFilterBarhideBasicSearch(lrTableVisualizations, lrChartVisualizations, converterContext);
|
|
514
519
|
var selectionVariant = getSelectionVariant(entityType, converterContext);
|
|
515
520
|
var defaultSemanticDates = useSemanticDateRange ? getDefaultSemanticDates(getManifestFilterFields(entityType, converterContext)) : {}; // Sort header actions according to position attributes in manifest
|
|
516
521
|
|
|
@@ -526,21 +531,28 @@ sap.ui.define(["../ManifestSettings", "../controls/Common/DataVisualization", ".
|
|
|
526
531
|
}).concat(lrChartVisualizations.map(function (visualization) {
|
|
527
532
|
return visualization.id;
|
|
528
533
|
}));
|
|
529
|
-
var targetControlIds = [
|
|
534
|
+
var targetControlIds = [].concat(_toConsumableArray(hideFilterBar ? [] : [filterBarId]), _toConsumableArray(manifestWrapper.getVariantManagement() !== VariantManagementType.Control ? visualizationIds : []), _toConsumableArray(!hasMultiVisualizations && views.length > 1 ? [IconTabBarID()] : []));
|
|
535
|
+
var iconTabBarId = "fe::TabMultipleMode";
|
|
536
|
+
var displayMultiVisualizations = views.length > 1 && !hasMultiVisualizations;
|
|
537
|
+
var stickySubheaderProvider = displayMultiVisualizations && manifestWrapper.getStickyMultiTabHeaderConfiguration() ? iconTabBarId : undefined;
|
|
530
538
|
return {
|
|
531
539
|
mainEntitySet: sContextPath,
|
|
532
540
|
mainEntityType: sContextPath + "/",
|
|
541
|
+
displayMultiVisualizations: displayMultiVisualizations,
|
|
542
|
+
iconTabBarId: iconTabBarId,
|
|
543
|
+
stickySubheaderProvider: stickySubheaderProvider,
|
|
533
544
|
singleTableId: singleTableId,
|
|
534
545
|
singleChartId: singleChartId,
|
|
535
546
|
showTabCounts: showTabCounts,
|
|
536
547
|
headerActions: headerActions,
|
|
537
548
|
showPinnableToggle: showPinnableToggle,
|
|
538
549
|
filterBar: {
|
|
550
|
+
propertyInfo: propertyInfoFields,
|
|
539
551
|
selectionFields: selectionFields,
|
|
540
552
|
hideBasicSearch: hideBasicSearch
|
|
541
553
|
},
|
|
542
554
|
views: views,
|
|
543
|
-
filterBarId: filterBarId,
|
|
555
|
+
filterBarId: hideFilterBar ? "" : filterBarId,
|
|
544
556
|
filterConditions: {
|
|
545
557
|
selectionVariant: selectionVariant,
|
|
546
558
|
defaultSemanticDates: defaultSemanticDates
|
|
@@ -555,7 +567,8 @@ sap.ui.define(["../ManifestSettings", "../controls/Common/DataVisualization", ".
|
|
|
555
567
|
useSemanticDateRange: useSemanticDateRange,
|
|
556
568
|
filterInitialLayout: filterInitialLayout,
|
|
557
569
|
filterLayout: filterLayout,
|
|
558
|
-
kpiDefinitions: getKPIDefinitions(converterContext)
|
|
570
|
+
kpiDefinitions: getKPIDefinitions(converterContext),
|
|
571
|
+
hideFilterBar: hideFilterBar
|
|
559
572
|
};
|
|
560
573
|
};
|
|
561
574
|
|
|
@@ -625,4 +638,4 @@ sap.ui.define(["../ManifestSettings", "../controls/Common/DataVisualization", ".
|
|
|
625
638
|
|
|
626
639
|
return _exports;
|
|
627
640
|
}, false);
|
|
628
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb252ZXJ0ZXIudHMiXSwibmFtZXMiOlsiZ2V0VGFibGVWaXN1YWxpemF0aW9ucyIsInZpZXdzIiwidGFibGVzIiwiZm9yRWFjaCIsInZpZXciLCJ0eXBlIiwidmlzdWFsaXphdGlvbnMiLCJzZWNvbmRhcnlWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uIiwidmlzdWFsaXphdGlvbiIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJwdXNoIiwiZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyIsImNoYXJ0cyIsInByaW1hcnlWaXN1YWxpemF0aW9uIiwiQ2hhcnQiLCJnZXREZWZhdWx0U2VtYW50aWNEYXRlcyIsImZpbHRlckZpZWxkcyIsImRlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZmlsdGVyRmllbGQiLCJzZXR0aW5ncyIsImRlZmF1bHRWYWx1ZXMiLCJsZW5ndGgiLCJnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbiIsImVudGl0eVR5cGUiLCJjb252ZXJ0ZXJDb250ZXh0IiwiYklzQUxQIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCIsInNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQiLCJnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IiwicHJlc2VudGF0aW9uVmFyaWFudCIsIlByZXNlbnRhdGlvblZhcmlhbnQiLCJFcnJvciIsImJQVkNvbXBsYWludCIsImlzUHJlc2VudGF0aW9uQ29tcGxpYW50IiwidW5kZWZpbmVkIiwiaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQiLCJnZXREZWZhdWx0UHJlc2VudGF0aW9uVmFyaWFudCIsImRlZmF1bHRMaW5lSXRlbSIsImdldERlZmF1bHRMaW5lSXRlbSIsImdldFZpZXciLCJ2aWV3Q29udmVydGVyQ29uZmlndXJhdGlvbiIsImNvbmZpZyIsImdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiIsImFubm90YXRpb24iLCJnZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZ2V0RW50aXR5VHlwZSIsInRhYmxlQ29udHJvbElkIiwiY2hhcnRDb250cm9sSWQiLCJ0aXRsZSIsInNlbGVjdGlvblZhcmlhbnRQYXRoIiwiaXNNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIiwia2V5IiwiY3JlYXRlVmlzdWFsaXphdGlvbiIsImlzUHJpbWFyeSIsImRlZmF1bHRWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uQ3JlYXRlZCIsIk9iamVjdCIsImFzc2lnbiIsImdldFByZXNlbnRhdGlvbiIsIml0ZW0iLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwidGFyZ2V0QW5ub3RhdGlvbiIsImNyZWF0ZUFscFZpZXciLCJwcmVzZW50YXRpb25zIiwiZGVmYXVsdFBhdGgiLCJpZCIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkFuYWx5dGljYWxMaXN0UGFnZSIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJwcmltYXJ5Iiwic2Vjb25kYXJ5Iiwidmlld0Fubm90YXRpb24iLCJjb21waWxlQmluZGluZyIsImFubm90YXRpb25FeHByZXNzaW9uIiwiVGV4dCIsInZpc3VhbGl6YXRpb25EZWZpbml0aW9uIiwiaW5kZXgiLCJ0YWJsZVZpc3VhbGl6YXRpb24iLCJmaWx0ZXJzIiwiY29udHJvbCIsImhpZGRlbkZpbHRlcnMiLCJwYXRocyIsImtlZXBQcmV2aW91c1ByZXNvbmFsaXphdGlvbiIsIlRhYmxlSUQiLCJ0ZXJtIiwiU2VsZWN0aW9uVmFyaWFudCIsInNwbGl0IiwiY2hhcnRWaXN1YWxpemF0aW9uIiwiQ2hhcnRJRCIsImxhYmVsIiwiZnJhZ21lbnQiLCJ0ZW1wbGF0ZSIsImN1c3RvbVRhYklkIiwiQ3VzdG9tVGFiSUQiLCJnZXRWaWV3cyIsInNldHRpbmdzVmlld3MiLCJ2aWV3Q29udmVydGVyQ29uZmlncyIsInBhdGgiLCJtYW5pZmVzdFdyYXBwZXIiLCJ2aWV3Q29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsImdldENvbnRleHRQYXRoIiwicmVzb2x2ZWRUYXJnZXRjb252ZXJ0ZXJDb250ZXh0IiwiZ2V0QWxwVmlld0NvbmZpZyIsIm1hcCIsInZpZXdDb252ZXJ0ZXJDb25maWciLCJ2aWV3Q29uZmlncyIsImNoYXJ0IiwidGFibGUiLCJnZXREZWZhdWx0Q2hhcnQiLCJnZXRIZWFkZXJBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiY2hlY2tDaGFydEZpbHRlckJhcklkIiwiZmlsdGVyQmFySWQiLCJmaWx0ZXJJZCIsImNvbnZlcnRQYWdlIiwic0NvbnRleHRQYXRoIiwidmlld3NEZWZpbml0aW9uIiwiZ2V0Vmlld0NvbmZpZ3VyYXRpb24iLCJoYXNNdWx0aXBsZUVudGl0eVNldHMiLCJzaG93VGFiQ291bnRzIiwic2hvd0NvdW50cyIsImxyVGFibGVWaXN1YWxpemF0aW9ucyIsImxyQ2hhcnRWaXN1YWxpemF0aW9ucyIsInNob3dQaW5uYWJsZVRvZ2dsZSIsInNvbWUiLCJzaW5nbGVUYWJsZUlkIiwic2luZ2xlQ2hhcnRJZCIsIkZpbHRlckJhcklEIiwiZmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCIsIkZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQiLCJmYkNvbmZpZyIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJmaWx0ZXJJbml0aWFsTGF5b3V0IiwiaW5pdGlhbExheW91dCIsInRvTG93ZXJDYXNlIiwiZmlsdGVyTGF5b3V0IiwibGF5b3V0IiwidXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJvQ29uZmlnIiwiZ2V0Q29udGVudEFyZWFJZCIsImNoYXJ0SWQiLCJ0YWJsZUlkIiwic2VsZWN0aW9uRmllbGRzIiwiZ2V0U2VsZWN0aW9uRmllbGRzIiwiaGlkZUJhc2ljU2VhcmNoIiwiZ2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoIiwic2VsZWN0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyIsImhlYWRlckFjdGlvbnMiLCJoYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwidmlzdWFsaXphdGlvbklkcyIsImNvbmNhdCIsInRhcmdldENvbnRyb2xJZHMiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJJY29uVGFiQmFySUQiLCJtYWluRW50aXR5U2V0IiwibWFpbkVudGl0eVR5cGUiLCJmaWx0ZXJCYXIiLCJmaWx0ZXJDb25kaXRpb25zIiwidmFyaWFudE1hbmFnZW1lbnQiLCJqb2luIiwiaXNNdWx0aUVudGl0eVNldHMiLCJ0ZW1wbGF0ZVR5cGUiLCJrcGlEZWZpbml0aW9ucyIsImdldEtQSURlZmluaXRpb25zIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVNBLHNCQUFULENBQWdDQyxLQUFoQyxFQUF5RjtBQUN4RixRQUFNQyxNQUE0QixHQUFHLEVBQXJDO0FBQ0FELElBQUFBLEtBQUssQ0FBQ0UsT0FBTixDQUFjLFVBQVNDLElBQVQsRUFBZTtBQUM1QixVQUFJLENBQUVBLElBQUQsQ0FBK0JDLElBQXBDLEVBQTBDO0FBQ3pDLFlBQU1DLGNBQWMsR0FBSUYsSUFBRCxDQUFpQ0csc0JBQWpDLEdBQ25CSCxJQUFELENBQWlDRyxzQkFBakMsQ0FBd0RELGNBRHBDLEdBRW5CRixJQUFELENBQStCSSxZQUEvQixDQUE0Q0YsY0FGL0M7QUFJQUEsUUFBQUEsY0FBYyxDQUFDSCxPQUFmLENBQXVCLFVBQVNNLGFBQVQsRUFBd0I7QUFDOUMsY0FBSUEsYUFBYSxDQUFDSixJQUFkLEtBQXVCSyxp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QUFBLE9BQU8sRUFBRWhCO0FBRkgsT0FBUDtBQUlBOztBQUNELFdBQU9sRyxTQUFQO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uLFxuXHRWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0VmlzdWFsaXphdGlvblR5cGUsXG5cdFRlbXBsYXRlVHlwZSxcblx0Q29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24sXG5cdFZhcmlhbnRNYW5hZ2VtZW50VHlwZVxufSBmcm9tIFwiLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgRW50aXR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQge1xuXHREYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zLFxuXHREYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sXG5cdGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbixcblx0Z2V0RGVmYXVsdENoYXJ0LFxuXHRnZXREZWZhdWx0TGluZUl0ZW0sXG5cdGdldERlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LFxuXHRpc1ByZXNlbnRhdGlvbkNvbXBsaWFudCxcblx0Z2V0U2VsZWN0aW9uVmFyaWFudCxcblx0aXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnRcbn0gZnJvbSBcIi4uL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHtcblx0TGluZUl0ZW0sXG5cdFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMsXG5cdFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMsXG5cdFNlbGVjdGlvblZhcmlhbnRUeXBlVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvZ2VuZXJhdGVkL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQ3VzdG9tVGFiSUQsIEZpbHRlckJhcklELCBGaWx0ZXJWYXJpYW50TWFuYWdlbWVudElELCBUYWJsZUlELCBDaGFydElELCBJY29uVGFiQmFySUQgfSBmcm9tIFwiLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB7IEJhc2VBY3Rpb24sIGdldEFjdGlvbnNGcm9tTWFuaWZlc3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBDb25maWd1cmFibGVPYmplY3QsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGFubm90YXRpb25FeHByZXNzaW9uLCBjb21waWxlQmluZGluZyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBLUElEZWZpbml0aW9uLCBnZXRLUElEZWZpbml0aW9ucyB9IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vS1BJXCI7XG5pbXBvcnQge1xuXHRnZXRTZWxlY3Rpb25GaWVsZHMsXG5cdGdldE1hbmlmZXN0RmlsdGVyRmllbGRzLFxuXHRnZXRGaWx0ZXJCYXJoaWRlQmFzaWNTZWFyY2gsXG5cdEZpbHRlckZpZWxkLFxuXHRDdXN0b21FbGVtZW50RmlsdGVyRmllbGRcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJCYXJcIjtcblxudHlwZSBWaWV3QW5ub3RhdGlvbnNUeXBlVHlwZXMgPSBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgU2VsZWN0aW9uVmFyaWFudFR5cGVUeXBlcztcbnR5cGUgVmFyaWFudE1hbmFnZW1lbnREZWZpbml0aW9uID0ge1xuXHRpZDogc3RyaW5nO1xuXHR0YXJnZXRDb250cm9sSWRzOiBzdHJpbmc7XG59O1xuXG50eXBlIE11bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24gPSBWaWV3UGF0aENvbmZpZ3VyYXRpb24gJiB7XG5cdGFubm90YXRpb24/OiBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xufTtcblxudHlwZSBTaW5nbGVWaWV3Q29uZmlndXJhdGlvbiA9IHtcblx0YW5ub3RhdGlvbj86IERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG59O1xuXG50eXBlIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uID0gQ3VzdG9tVmlld1RlbXBsYXRlQ29uZmlndXJhdGlvbiAmIHtcblx0dHlwZTogc3RyaW5nO1xufTtcblxudHlwZSBWaWV3Q29uZmlndXJhdGlvbiA9IE11bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24gfCBTaW5nbGVWaWV3Q29uZmlndXJhdGlvbiB8IEN1c3RvbVZpZXdDb25maWd1cmF0aW9uO1xudHlwZSBWaWV3QW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24gPSBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIHwgU2luZ2xlVmlld0NvbmZpZ3VyYXRpb247XG5cbnR5cGUgVmlld0NvbnZlcnRlclNldHRpbmdzID0gVmlld0NvbmZpZ3VyYXRpb24gJiB7XG5cdGNvbnZlcnRlckNvbnRleHQ/OiBDb252ZXJ0ZXJDb250ZXh0O1xufTtcblxudHlwZSBEZWZhdWx0U2VtYW50aWNEYXRlID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHRvcGVyYXRvcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgTGlzdFJlcG9ydERlZmluaXRpb24gPSB7XG5cdG1haW5FbnRpdHlTZXQ6IHN0cmluZztcblx0bWFpbkVudGl0eVR5cGU6IHN0cmluZzsgLy8gZW50aXR5VHlwZT4gYXQgdGhlIHN0YXJ0IG9mIExSIHRlbXBsYXRpbmdcblx0c2luZ2xlVGFibGVJZD86IHN0cmluZzsgLy8gb25seSB3aXRoIHNpbmdsZSBUYWJsZSBtb2RlXG5cdHNpbmdsZUNoYXJ0SWQ/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBzaW5nbGUgVGFibGUgbW9kZVxuXHRzaG93VGFiQ291bnRzPzogYm9vbGVhbjsgLy8gb25seSB3aXRoIG11bHRpIFRhYmxlIG1vZGVcblx0aGVhZGVyQWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRzaG93UGlubmFibGVUb2dnbGU/OiBib29sZWFuO1xuXHRmaWx0ZXJCYXI6IHtcblx0XHRzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW107XG5cdFx0aGlkZUJhc2ljU2VhcmNoOiBib29sZWFuO1xuXHR9O1xuXHR2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW107XG5cdGZpbHRlckNvbmRpdGlvbnM6IG9iamVjdDtcblx0aXNNdWx0aUVudGl0eVNldHM6IGJvb2xlYW47XG5cdGZpbHRlckJhcklkOiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudERlZmluaXRpb247XG5cdGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGJvb2xlYW47XG5cdHRlbXBsYXRlVHlwZTogVGVtcGxhdGVUeXBlO1xuXHR1c2VTZW1hbnRpY0RhdGVSYW5nZT86IGJvb2xlYW47XG5cdGZpbHRlckluaXRpYWxMYXlvdXQ/OiBzdHJpbmc7XG5cdGZpbHRlckxheW91dD86IHN0cmluZztcblx0a3BpRGVmaW5pdGlvbnM6IEtQSURlZmluaXRpb25bXTtcbn07XG5cbmV4cG9ydCB0eXBlIExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbiA9IFNpbmdsZVZpZXdEZWZpbml0aW9uIHwgQ3VzdG9tVmlld0RlZmluaXRpb24gfCBDb21iaW5lZFZpZXdEZWZpbml0aW9uO1xuXG5leHBvcnQgdHlwZSBDb21iaW5lZFZpZXdEZWZpbml0aW9uID0ge1xuXHRzZWxlY3Rpb25WYXJpYW50UGF0aD86IHN0cmluZzsgLy8gb25seSB3aXRoIG9uIG11bHRpIFRhYmxlIG1vZGVcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdHByaW1hcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHNlY29uZGFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbjtcblx0dGFibGVDb250cm9sSWQ6IHN0cmluZztcblx0Y2hhcnRDb250cm9sSWQ6IHN0cmluZztcblx0ZGVmYXVsdFBhdGg/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21WaWV3RGVmaW5pdGlvbiA9IHtcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdGZyYWdtZW50OiBzdHJpbmc7XG5cdHR5cGU6IHN0cmluZztcblx0Y3VzdG9tVGFiSWQ6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBTaW5nbGVWaWV3RGVmaW5pdGlvbiA9IFNpbmdsZVRhYmxlVmlld0RlZmluaXRpb24gfCBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uO1xuXG5leHBvcnQgdHlwZSBCYXNlU2luZ2xlVmlld0RlZmluaXRpb24gPSB7XG5cdHNlbGVjdGlvblZhcmlhbnRQYXRoPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggb24gbXVsdGkgVGFibGUgbW9kZVxuXHR0aXRsZT86IHN0cmluZzsgLy8gb25seSB3aXRoIG11bHRpIFRhYmxlIG1vZGVcblx0cHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uID0gQmFzZVNpbmdsZVZpZXdEZWZpbml0aW9uICYge1xuXHR0YWJsZUNvbnRyb2xJZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNpbmdsZUNoYXJ0Vmlld0RlZmluaXRpb24gPSBCYXNlU2luZ2xlVmlld0RlZmluaXRpb24gJiB7XG5cdGNoYXJ0Q29udHJvbElkPzogc3RyaW5nO1xufTtcblxudHlwZSBDb250ZW50QXJlYUlEID0ge1xuXHRjaGFydElkOiBzdHJpbmc7XG5cdHRhYmxlSWQ6IHN0cmluZztcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCBsaXN0IHJlcG9ydCB0YWJsZXMuXG4gKiBAcGFyYW0ge0xpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdfSB2aWV3cyBUaGUgbGlzdCByZXBvcnQgdmlld3MgY29uZmlndXJlZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEByZXR1cm5zIHtUYWJsZVZpc3VhbGl6YXRpb25bXX0gVGhlIGxpc3QgcmVwb3J0IHRhYmxlXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlVmlzdWFsaXphdGlvbnModmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdKTogVGFibGVWaXN1YWxpemF0aW9uW10ge1xuXHRjb25zdCB0YWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW107XG5cdHZpZXdzLmZvckVhY2goZnVuY3Rpb24odmlldykge1xuXHRcdGlmICghKHZpZXcgYXMgQ3VzdG9tVmlld0RlZmluaXRpb24pLnR5cGUpIHtcblx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25zID0gKHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbikuc2Vjb25kYXJ5VmlzdWFsaXphdGlvblxuXHRcdFx0XHQ/ICh2aWV3IGFzIENvbWJpbmVkVmlld0RlZmluaXRpb24pLnNlY29uZGFyeVZpc3VhbGl6YXRpb24udmlzdWFsaXphdGlvbnNcblx0XHRcdFx0OiAodmlldyBhcyBTaW5nbGVWaWV3RGVmaW5pdGlvbikucHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zO1xuXG5cdFx0XHR2aXN1YWxpemF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHR0YWJsZXMucHVzaCh2aXN1YWxpemF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHRhYmxlcztcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyh2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10pOiBDaGFydFZpc3VhbGl6YXRpb25bXSB7XG5cdGNvbnN0IGNoYXJ0czogQ2hhcnRWaXN1YWxpemF0aW9uW10gPSBbXTtcblx0dmlld3MuZm9yRWFjaChmdW5jdGlvbih2aWV3KSB7XG5cdFx0aWYgKCEodmlldyBhcyBDdXN0b21WaWV3RGVmaW5pdGlvbikudHlwZSkge1xuXHRcdFx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSAodmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uKS5wcmltYXJ5VmlzdWFsaXphdGlvblxuXHRcdFx0XHQ/ICh2aWV3IGFzIENvbWJpbmVkVmlld0RlZmluaXRpb24pLnByaW1hcnlWaXN1YWxpemF0aW9uLnZpc3VhbGl6YXRpb25zXG5cdFx0XHRcdDogKHZpZXcgYXMgU2luZ2xlVmlld0RlZmluaXRpb24pLnByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucztcblxuXHRcdFx0dmlzdWFsaXphdGlvbnMuZm9yRWFjaChmdW5jdGlvbih2aXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdGlmICh2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSB7XG5cdFx0XHRcdFx0Y2hhcnRzLnB1c2godmlzdWFsaXphdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBjaGFydHM7XG59XG5cbmNvbnN0IGdldERlZmF1bHRTZW1hbnRpY0RhdGVzID0gZnVuY3Rpb24oZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+KTogUmVjb3JkPHN0cmluZywgRGVmYXVsdFNlbWFudGljRGF0ZT4ge1xuXHRjb25zdCBkZWZhdWx0U2VtYW50aWNEYXRlczogYW55ID0ge307XG5cdGZvciAoY29uc3QgZmlsdGVyRmllbGQgaW4gZmlsdGVyRmllbGRzKSB7XG5cdFx0aWYgKGZpbHRlckZpZWxkc1tmaWx0ZXJGaWVsZF0/LnNldHRpbmdzPy5kZWZhdWx0VmFsdWVzPy5sZW5ndGgpIHtcblx0XHRcdGRlZmF1bHRTZW1hbnRpY0RhdGVzW2ZpbHRlckZpZWxkXSA9IGZpbHRlckZpZWxkc1tmaWx0ZXJGaWVsZF0/LnNldHRpbmdzPy5kZWZhdWx0VmFsdWVzO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGVmYXVsdFNlbWFudGljRGF0ZXM7XG59O1xuXG4vKipcbiAqIEZpbmQgYSB2aXN1YWxpemF0aW9uIGFubm90YXRpb24gdGhhdCBjYW4gYmUgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBsaXN0IHJlcG9ydC5cbiAqXG4gKiBAcGFyYW0ge0VudGl0eVR5cGV9IGVudGl0eVR5cGUgVGhlIGN1cnJlbnQgRW50aXR5VHlwZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBiSXNBTFBcbiAqIEByZXR1cm5zIHtMaW5lSXRlbSB8IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfCB1bmRlZmluZWR9IEEgY29tcGxpYW50IGFubm90YXRpb24gZm9yIHJlbmRlcmluZyB0aGUgbGlzdCByZXBvcnRcbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGJJc0FMUDogQm9vbGVhblxuKTogTGluZUl0ZW0gfCBQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGFubm90YXRpb25QYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCgpO1xuXHRjb25zdCBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50ID0gZ2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudChlbnRpdHlUeXBlLCBhbm5vdGF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmIChhbm5vdGF0aW9uUGF0aCAmJiBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudCA9IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQuUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHRpZiAoIXByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlByZXNlbnRhdGlvbiBWYXJpYW50IGlzIG5vdCBjb25maWd1cmVkIGluIHRoZSBTUFYgbWVudGlvbmVkIGluIHRoZSBtYW5pZmVzdFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgYlBWQ29tcGxhaW50ID0gaXNQcmVzZW50YXRpb25Db21wbGlhbnQoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudC5QcmVzZW50YXRpb25WYXJpYW50KTtcblx0XHRpZiAoIWJQVkNvbXBsYWludCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKGlzU2VsZWN0aW9uUHJlc2VudGF0aW9uQ29tcGxpYW50KHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsIGJJc0FMUCkpIHtcblx0XHRcdHJldHVybiBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdH1cblx0fVxuXHRpZiAoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdGlmIChpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LCBiSXNBTFApKSB7XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHR9XG5cdH1cblx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudCA9IGdldERlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50KGVudGl0eVR5cGUpO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdGlmIChpc1ByZXNlbnRhdGlvbkNvbXBsaWFudChwcmVzZW50YXRpb25WYXJpYW50LCBiSXNBTFApKSB7XG5cdFx0XHRyZXR1cm4gcHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHR9XG5cdH1cblx0aWYgKCFiSXNBTFApIHtcblx0XHRjb25zdCBkZWZhdWx0TGluZUl0ZW0gPSBnZXREZWZhdWx0TGluZUl0ZW0oZW50aXR5VHlwZSk7XG5cdFx0aWYgKGRlZmF1bHRMaW5lSXRlbSkge1xuXHRcdFx0cmV0dXJuIGRlZmF1bHRMaW5lSXRlbTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuY29uc3QgZ2V0VmlldyA9IGZ1bmN0aW9uKHZpZXdDb252ZXJ0ZXJDb25maWd1cmF0aW9uOiBWaWV3Q29udmVydGVyU2V0dGluZ3MpOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb24ge1xuXHRsZXQgY29uZmlnID0gdmlld0NvbnZlcnRlckNvbmZpZ3VyYXRpb247XG5cdGlmIChjb25maWcuY29udmVydGVyQ29udGV4dCkge1xuXHRcdGxldCBjb252ZXJ0ZXJDb250ZXh0ID0gY29uZmlnLmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0Y29uZmlnID0gY29uZmlnIGFzIFZpZXdBbm5vdGF0aW9uQ29uZmlndXJhdGlvbjtcblx0XHRsZXQgcHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0XHRjb25maWcuYW5ub3RhdGlvblxuXHRcdFx0XHQ/IGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aChjb25maWcuYW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUsIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKVxuXHRcdFx0XHQ6IFwiXCIsXG5cdFx0XHR0cnVlLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdGNvbmZpZyBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb25cblx0XHQpO1xuXHRcdGxldCB0YWJsZUNvbnRyb2xJZCA9IFwiXCI7XG5cdFx0bGV0IGNoYXJ0Q29udHJvbElkID0gXCJcIjtcblx0XHRsZXQgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IFwiXCI7XG5cdFx0bGV0IHNlbGVjdGlvblZhcmlhbnRQYXRoID0gXCJcIjtcblx0XHRjb25zdCBpc011bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbihjb25maWc6IFZpZXdDb25maWd1cmF0aW9uKTogY29uZmlnIGlzIE11bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24ge1xuXHRcdFx0cmV0dXJuIChjb25maWcgYXMgTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbikua2V5ICE9PSB1bmRlZmluZWQ7XG5cdFx0fTtcblx0XHRjb25zdCBjcmVhdGVWaXN1YWxpemF0aW9uID0gZnVuY3Rpb24ocHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sIGlzUHJpbWFyeT86IGJvb2xlYW4pIHtcblx0XHRcdGxldCBkZWZhdWx0VmlzdWFsaXphdGlvbjtcblx0XHRcdGZvciAoY29uc3QgdmlzdWFsaXphdGlvbiBvZiBwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdFx0aWYgKGlzUHJpbWFyeSAmJiB2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSB7XG5cdFx0XHRcdFx0ZGVmYXVsdFZpc3VhbGl6YXRpb24gPSB2aXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghaXNQcmltYXJ5ICYmIHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHRkZWZhdWx0VmlzdWFsaXphdGlvbiA9IHZpc3VhbGl6YXRpb247XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IHByZXNlbnRhdGlvbkNyZWF0ZWQgPSBPYmplY3QuYXNzaWduKHt9LCBwcmVzZW50YXRpb24pO1xuXHRcdFx0aWYgKGRlZmF1bHRWaXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdHByZXNlbnRhdGlvbkNyZWF0ZWQudmlzdWFsaXphdGlvbnMgPSBbZGVmYXVsdFZpc3VhbGl6YXRpb25dO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByZXNlbnRhdGlvbkNyZWF0ZWQ7XG5cdFx0fTtcblx0XHRjb25zdCBnZXRQcmVzZW50YXRpb24gPSBmdW5jdGlvbihpdGVtOiBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pIHtcblx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihpdGVtLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHRhcmdldEFubm90YXRpb24gPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHRcdGNvbnN0IGFubm90YXRpb24gPSB0YXJnZXRBbm5vdGF0aW9uO1xuXHRcdFx0cHJlc2VudGF0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0XHRhbm5vdGF0aW9uXG5cdFx0XHRcdFx0PyBjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoYW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUsIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKVxuXHRcdFx0XHRcdDogXCJcIixcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0Y29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvblxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBwcmVzZW50YXRpb247XG5cdFx0fTtcblx0XHRjb25zdCBjcmVhdGVBbHBWaWV3ID0gZnVuY3Rpb24oXG5cdFx0XHRwcmVzZW50YXRpb25zOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb25bXSxcblx0XHRcdGRlZmF1bHRQYXRoOiBcImJvdGhcIiB8IFwicHJpbWFyeVwiIHwgXCJzZWNvbmRhcnlcIiB8IHVuZGVmaW5lZFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgcHJpbWFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZVZpc3VhbGl6YXRpb24ocHJlc2VudGF0aW9uc1swXSwgdHJ1ZSk7XG5cdFx0XHRjaGFydENvbnRyb2xJZCA9IChwcmltYXJ5VmlzdWFsaXphdGlvbj8udmlzdWFsaXphdGlvbnNbMF0gYXMgQ2hhcnRWaXN1YWxpemF0aW9uKS5pZDtcblx0XHRcdGNvbnN0IHNlY29uZGFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZVZpc3VhbGl6YXRpb24oXG5cdFx0XHRcdHByZXNlbnRhdGlvbnNbMV0gPyBwcmVzZW50YXRpb25zWzFdIDogcHJlc2VudGF0aW9uc1swXVxuXHRcdFx0KTtcblx0XHRcdHRhYmxlQ29udHJvbElkID0gKHNlY29uZGFyeVZpc3VhbGl6YXRpb24/LnZpc3VhbGl6YXRpb25zWzBdIGFzIFRhYmxlVmlzdWFsaXphdGlvbikuYW5ub3RhdGlvbi5pZDtcblx0XHRcdGlmIChwcmltYXJ5VmlzdWFsaXphdGlvbiAmJiBzZWNvbmRhcnlWaXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IHZpZXc6IENvbWJpbmVkVmlld0RlZmluaXRpb24gPSB7XG5cdFx0XHRcdFx0cHJpbWFyeVZpc3VhbGl6YXRpb24sXG5cdFx0XHRcdFx0c2Vjb25kYXJ5VmlzdWFsaXphdGlvbixcblx0XHRcdFx0XHR0YWJsZUNvbnRyb2xJZCxcblx0XHRcdFx0XHRjaGFydENvbnRyb2xJZCxcblx0XHRcdFx0XHRkZWZhdWx0UGF0aFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gdmlldztcblx0XHRcdH1cblx0XHR9O1xuXHRcdGlmIChwcmVzZW50YXRpb24/LnZpc3VhbGl6YXRpb25zPy5sZW5ndGggPT09IDIgJiYgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSkge1xuXHRcdFx0Y29uc3QgdmlldzogQ29tYmluZWRWaWV3RGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZUFscFZpZXcoW3ByZXNlbnRhdGlvbl0sIFwiYm90aFwiKTtcblx0XHRcdGlmICh2aWV3KSB7XG5cdFx0XHRcdHJldHVybiB2aWV3O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoY29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvbikgfHxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0XHQpIHtcblx0XHRcdGNvbnN0IHsgcHJpbWFyeSwgc2Vjb25kYXJ5IH0gPSBjb25maWcgYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb247XG5cdFx0XHRpZiAocHJpbWFyeSAmJiBwcmltYXJ5Lmxlbmd0aCAmJiBzZWNvbmRhcnkgJiYgc2Vjb25kYXJ5Lmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCB2aWV3OiBDb21iaW5lZFZpZXdEZWZpbml0aW9uIHwgdW5kZWZpbmVkID0gY3JlYXRlQWxwVmlldyhcblx0XHRcdFx0XHRbZ2V0UHJlc2VudGF0aW9uKHByaW1hcnlbMF0pLCBnZXRQcmVzZW50YXRpb24oc2Vjb25kYXJ5WzBdKV0sXG5cdFx0XHRcdFx0KGNvbmZpZyBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbikuZGVmYXVsdFBhdGhcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKHZpZXcpIHtcblx0XHRcdFx0XHRyZXR1cm4gdmlldztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiU2Vjb25kYXJ5SXRlbXMgaW4gdGhlIFZpZXdzIGlzIG5vdCBwcmVzZW50XCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uKGNvbmZpZykpIHtcblx0XHRcdC8vIGtleSBleGlzdHMgb25seSBvbiBtdWx0aSB0YWJsZXMgbW9kZVxuXHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKChjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCB2aWV3QW5ub3RhdGlvbjogVmlld0Fubm90YXRpb25zVHlwZVR5cGVzID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBWaWV3QW5ub3RhdGlvbnNUeXBlVHlwZXM7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHRcdHRpdGxlID0gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24odmlld0Fubm90YXRpb24uVGV4dCkpO1xuXHRcdFx0Ly8gTmVlZCB0byBsb29wIG9uIHRhYmxlIGludG8gdmlld3Mgc2luY2UgbXVsdGkgdGFibGUgbW9kZSBnZXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiAoaGlkZGVuIGZpbHRlcnMgb3IgVGFibGUgSWQpXG5cdFx0XHRwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZm9yRWFjaCgodmlzdWFsaXphdGlvbkRlZmluaXRpb24sIGluZGV4KSA9PiB7XG5cdFx0XHRcdHN3aXRjaCAodmlzdWFsaXphdGlvbkRlZmluaXRpb24udHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgVmlzdWFsaXphdGlvblR5cGUuVGFibGU6XG5cdFx0XHRcdFx0XHRjb25zdCB0YWJsZVZpc3VhbGl6YXRpb24gPSBwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnNbaW5kZXhdIGFzIFRhYmxlVmlzdWFsaXphdGlvbjtcblx0XHRcdFx0XHRcdGNvbnN0IGZpbHRlcnMgPSB0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC5maWx0ZXJzIHx8IHt9O1xuXHRcdFx0XHRcdFx0ZmlsdGVycy5oaWRkZW5GaWx0ZXJzID0gZmlsdGVycy5oaWRkZW5GaWx0ZXJzIHx8IHsgcGF0aHM6IFtdIH07XG5cdFx0XHRcdFx0XHRpZiAoIShjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5rZWVwUHJldmlvdXNQcmVzb25hbGl6YXRpb24pIHtcblx0XHRcdFx0XHRcdFx0Ly8gTmVlZCB0byBvdmVycmlkZSBUYWJsZSBJZCB0byBtYXRjaCB3aXRoIFRhYiBLZXkgKGN1cnJlbnRseSBvbmx5IHRhYmxlIGlzIG1hbmFnZWQgaW4gbXVsdGlwbGUgdmlldyBtb2RlKVxuXHRcdFx0XHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5pZCA9IFRhYmxlSUQoKGNvbmZpZyBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pLmtleSB8fCBcIlwiLCBcIkxpbmVJdGVtXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uZmlnID0gY29uZmlnIGFzIFZpZXdBbm5vdGF0aW9uQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0XHRcdGlmIChjb25maWcgJiYgY29uZmlnLmFubm90YXRpb24gJiYgY29uZmlnLmFubm90YXRpb24udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aCA9IChjb25maWcuYW5ub3RhdGlvbiBhcyBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzKS5TZWxlY3Rpb25WYXJpYW50LmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcblx0XHRcdFx0XHRcdFx0XHRcIkBcIlxuXHRcdFx0XHRcdFx0XHQpWzFdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudFBhdGggPSAoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikuYW5ub3RhdGlvblBhdGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvL1Byb3ZpZGUgU2VsZWN0aW9uIFZhcmlhbnQgdG8gaGlkZGVuRmlsdGVycyBpbiBvcmRlciB0byBzZXQgdGhlIFNWIGZpbHRlcnMgdG8gdGhlIHRhYmxlLlxuXHRcdFx0XHRcdFx0Ly9NREMgVGFibGUgb3ZlcnJpZGVzIGJpbmRpbmcgRmlsdGVyIGFuZCBmcm9tIFNBUCBGRSB0aGUgb25seSBtZXRob2Qgd2hlcmUgd2UgYXJlIGFibGUgdG8gYWRkXG5cdFx0XHRcdFx0XHQvL2FkZGl0aW9uYWwgZmlsdGVyIGlzICdyZWJpbmRUYWJsZScgaW50byBUYWJsZSBkZWxlZ2F0ZS5cblx0XHRcdFx0XHRcdC8vVG8gYXZvaWQgaW1wbGVtZW50aW5nIHNwZWNpZmljIExSIGZlYXR1cmUgdG8gU0FQIEZFIE1hY3JvIFRhYmxlLCB0aGUgZmlsdGVyKHMpIHJlbGF0ZWQgdG8gdGhlIFRhYiAobXVsdGkgdGFibGUgbW9kZSlcblx0XHRcdFx0XHRcdC8vY2FuIGJlIHBhc3NlZCB0byBtYWNybyB0YWJsZSB2aWEgcGFyYW1ldGVyL2NvbnRleHQgbmFtZWQgZmlsdGVycyBhbmQga2V5IGhpZGRlbkZpbHRlcnMuXG5cdFx0XHRcdFx0XHRmaWx0ZXJzLmhpZGRlbkZpbHRlcnMucGF0aHMucHVzaCh7IGFubm90YXRpb25QYXRoOiBzZWxlY3Rpb25WYXJpYW50UGF0aCB9KTtcblx0XHRcdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLmZpbHRlcnMgPSBmaWx0ZXJzO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydDpcblx0XHRcdFx0XHRcdGNvbnN0IGNoYXJ0VmlzdWFsaXphdGlvbiA9IHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1tpbmRleF0gYXMgQ2hhcnRWaXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdFx0Y2hhcnRWaXN1YWxpemF0aW9uLmlkID0gQ2hhcnRJRCgoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikua2V5IHx8IFwiXCIsIFwiQ2hhcnRcIik7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZm9yRWFjaCh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbiA9PiB7XG5cdFx0XHRpZiAodmlzdWFsaXphdGlvbkRlZmluaXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0dGFibGVDb250cm9sSWQgPSB2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmlkO1xuXHRcdFx0fSBlbHNlIGlmICh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCkge1xuXHRcdFx0XHRjaGFydENvbnRyb2xJZCA9IHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmlkO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRwcmVzZW50YXRpb24sXG5cdFx0XHR0YWJsZUNvbnRyb2xJZCxcblx0XHRcdGNoYXJ0Q29udHJvbElkLFxuXHRcdFx0dGl0bGUsXG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aFxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0Y29uZmlnID0gY29uZmlnIGFzIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uO1xuXHRcdGNvbnN0IHRpdGxlID0gY29uZmlnLmxhYmVsLFxuXHRcdFx0ZnJhZ21lbnQgPSBjb25maWcudGVtcGxhdGUsXG5cdFx0XHR0eXBlID0gY29uZmlnLnR5cGUsXG5cdFx0XHRjdXN0b21UYWJJZCA9IEN1c3RvbVRhYklEKGNvbmZpZy5rZXkgfHwgXCJcIik7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRpdGxlLFxuXHRcdFx0ZnJhZ21lbnQsXG5cdFx0XHR0eXBlLFxuXHRcdFx0Y3VzdG9tVGFiSWRcblx0XHR9O1xuXHR9XG59O1xuXG5jb25zdCBnZXRWaWV3cyA9IGZ1bmN0aW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzZXR0aW5nc1ZpZXdzOiBNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZFxuKTogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10ge1xuXHRsZXQgdmlld0NvbnZlcnRlckNvbmZpZ3M6IFZpZXdDb252ZXJ0ZXJTZXR0aW5nc1tdID0gW107XG5cdGlmIChzZXR0aW5nc1ZpZXdzKSB7XG5cdFx0c2V0dGluZ3NWaWV3cy5wYXRocy5mb3JFYWNoKChwYXRoOiBWaWV3UGF0aENvbmZpZ3VyYXRpb24gfCBDdXN0b21WaWV3VGVtcGxhdGVDb25maWd1cmF0aW9uKSA9PiB7XG5cdFx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKHBhdGggYXMgVmlld1BhdGhDb25maWd1cmF0aW9uKSkge1xuXHRcdFx0XHRpZiAoc2V0dGluZ3NWaWV3cy5wYXRocy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQUxQIGZsYXZvciBjYW5ub3QgaGF2ZSBtdWx0aXBsZSB2aWV3c1wiKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRwYXRoID0gcGF0aCBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRwcmltYXJ5OiBwYXRoLnByaW1hcnksXG5cdFx0XHRcdFx0XHRzZWNvbmRhcnk6IHBhdGguc2Vjb25kYXJ5LFxuXHRcdFx0XHRcdFx0ZGVmYXVsdFBhdGg6IHBhdGguZGVmYXVsdFBhdGhcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICgocGF0aCBhcyBDdXN0b21WaWV3Q29uZmlndXJhdGlvbikudGVtcGxhdGUpIHtcblx0XHRcdFx0cGF0aCA9IHBhdGggYXMgQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb247XG5cdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdGtleTogcGF0aC5rZXksXG5cdFx0XHRcdFx0bGFiZWw6IHBhdGgubGFiZWwsXG5cdFx0XHRcdFx0dGVtcGxhdGU6IHBhdGgudGVtcGxhdGUsXG5cdFx0XHRcdFx0dHlwZTogXCJDdXN0b21cIlxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBhdGggPSBwYXRoIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKSxcblx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihcblx0XHRcdFx0XHRcdHBhdGguY29udGV4dFBhdGggfHwgKHBhdGguZW50aXR5U2V0ICYmIFwiL1wiICsgcGF0aC5lbnRpdHlTZXQpIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSA9IHZpZXdDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblxuXHRcdFx0XHRpZiAoZW50aXR5VHlwZSAmJiB2aWV3Q29udmVydGVyQ29udGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gbWFuaWZlc3RXcmFwcGVyLmdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoKCk7XG5cdFx0XHRcdFx0bGV0IGFubm90YXRpb247XG5cdFx0XHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSB2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihwYXRoLmFubm90YXRpb25QYXRoKTtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRBbm5vdGF0aW9uID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xuXHRcdFx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0Y29udmVydGVyQ29udGV4dCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0XHRcdFx0aWYgKHRhcmdldEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRcdGlmICh0YXJnZXRBbm5vdGF0aW9uLnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbiA9IGdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQoXG5cdFx0XHRcdFx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmVkVGFyZ2V0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbiA9IGdldERlZmF1bHRMaW5lSXRlbSh2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpIGFzIExpbmVJdGVtO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiB2aWV3Q29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IHBhdGguYW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRcdGtlZXBQcmV2aW91c1ByZXNvbmFsaXphdGlvbjogcGF0aC5rZWVwUHJldmlvdXNQcmVzb25hbGl6YXRpb24sXG5cdFx0XHRcdFx0XHRcdGtleTogcGF0aC5rZXlcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBUT0RPIERpYWdub3N0aWNzIG1lc3NhZ2Vcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSkge1xuXHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MgPSBnZXRBbHBWaWV3Q29uZmlnKGNvbnZlcnRlckNvbnRleHQsIHZpZXdDb252ZXJ0ZXJDb25maWdzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdGFubm90YXRpb246IGdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIGZhbHNlKSxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2aWV3Q29udmVydGVyQ29uZmlncy5tYXAodmlld0NvbnZlcnRlckNvbmZpZyA9PiB7XG5cdFx0cmV0dXJuIGdldFZpZXcodmlld0NvbnZlcnRlckNvbmZpZyk7XG5cdH0pO1xufTtcblxuZnVuY3Rpb24gZ2V0QWxwVmlld0NvbmZpZyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCB2aWV3Q29uZmlnczogVmlld0NvbnZlcnRlclNldHRpbmdzW10pOiBWaWV3Q29udmVydGVyU2V0dGluZ3NbXSB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3QgYW5ub3RhdGlvbiA9IGdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIHRydWUpO1xuXHRsZXQgY2hhcnQsIHRhYmxlO1xuXHRpZiAoYW5ub3RhdGlvbikge1xuXHRcdHZpZXdDb25maWdzLnB1c2goe1xuXHRcdFx0YW5ub3RhdGlvbjogYW5ub3RhdGlvbixcblx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRjaGFydCA9IGdldERlZmF1bHRDaGFydChlbnRpdHlUeXBlKTtcblx0XHR0YWJsZSA9IGdldERlZmF1bHRMaW5lSXRlbShlbnRpdHlUeXBlKTtcblx0XHRpZiAoY2hhcnQgJiYgdGFibGUpIHtcblx0XHRcdGNvbnN0IHByaW1hcnk6IFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbltdID0gW3sgYW5ub3RhdGlvblBhdGg6IGNoYXJ0LnRlcm0gfV07XG5cdFx0XHRjb25zdCBzZWNvbmRhcnk6IFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbltdID0gW3sgYW5ub3RhdGlvblBhdGg6IHRhYmxlLnRlcm0gfV07XG5cdFx0XHR2aWV3Q29uZmlncy5wdXNoKHtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0cHJpbWFyeTogcHJpbWFyeSxcblx0XHRcdFx0c2Vjb25kYXJ5OiBzZWNvbmRhcnksXG5cdFx0XHRcdGRlZmF1bHRQYXRoOiBcImJvdGhcIlxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2aWV3Q29uZmlncztcbn1cblxuZXhwb3J0IGNvbnN0IGdldEhlYWRlckFjdGlvbnMgPSBmdW5jdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKFtdLCBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KG1hbmlmZXN0V3JhcHBlci5nZXRIZWFkZXJBY3Rpb25zKCksIGNvbnZlcnRlckNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGVja0NoYXJ0RmlsdGVyQmFySWQgPSBmdW5jdGlvbih2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10sIGZpbHRlckJhcklkOiBzdHJpbmcpIHtcblx0dmlld3MuZm9yRWFjaCh2aWV3ID0+IHtcblx0XHRpZiAoISh2aWV3IGFzIEN1c3RvbVZpZXdEZWZpbml0aW9uKS50eXBlKSB7XG5cdFx0XHRjb25zdCBwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiA9ICh2aWV3IGFzIFNpbmdsZVZpZXdEZWZpbml0aW9uKS5wcmVzZW50YXRpb247XG5cdFx0XHRwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZm9yRWFjaCh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbiA9PiB7XG5cdFx0XHRcdGlmICh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCAmJiB2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi5maWx0ZXJJZCAhPT0gZmlsdGVyQmFySWQpIHtcblx0XHRcdFx0XHR2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi5maWx0ZXJJZCA9IGZpbHRlckJhcklkO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBMaXN0UmVwb3J0RGVmaW5pdGlvbiBmb3IgbXVsdGlwbGUgZW50aXR5IHNldHMgKG11bHRpcGxlIHRhYmxlIG1vZGUpLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge0xpc3RSZXBvcnREZWZpbml0aW9ufSBUaGUgbGlzdCByZXBvcnQgZGVmaW5pdGlvbiBiYXNlZCBvbiBhbm5vdGF0aW9uICsgbWFuaWZlc3RcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnZlcnRQYWdlID0gZnVuY3Rpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IExpc3RSZXBvcnREZWZpbml0aW9uIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBzQ29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cblx0aWYgKCFzQ29udGV4dFBhdGgpIHtcblx0XHQvLyBJZiB3ZSBkb24ndCBoYXZlIGFuIGVudGl0eVNldCBhdCB0aGlzIHBvaW50IHdlIGhhdmUgYW4gaXNzdWUgSSdkIHNheVxuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFwiQW4gRW50aXR5U2V0IGlzIHJlcXVpcmVkIHRvIGJlIGFibGUgdG8gZGlzcGxheSBhIExpc3RSZXBvcnQsIHBsZWFzZSBhZGp1c3QgeW91ciBgZW50aXR5U2V0YCBwcm9wZXJ0eSB0byBwb2ludCB0byBvbmUuXCJcblx0XHQpO1xuXHR9XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IHZpZXdzRGVmaW5pdGlvbjogTXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKTtcblx0Y29uc3QgaGFzTXVsdGlwbGVFbnRpdHlTZXRzID0gbWFuaWZlc3RXcmFwcGVyLmhhc011bHRpcGxlRW50aXR5U2V0cygpO1xuXHRjb25zdCB2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10gPSBnZXRWaWV3cyhjb252ZXJ0ZXJDb250ZXh0LCB2aWV3c0RlZmluaXRpb24pO1xuXHRjb25zdCBzaG93VGFiQ291bnRzID0gdmlld3NEZWZpbml0aW9uID8gdmlld3NEZWZpbml0aW9uPy5zaG93Q291bnRzIHx8IGhhc011bHRpcGxlRW50aXR5U2V0cyA6IHVuZGVmaW5lZDsgLy8gd2l0aCBtdWx0aSBFbnRpdHlTZXRzLCB0YWIgY291bnRzIGFyZSBkaXNwbGF5ZWQgYnkgZGVmYXVsdFxuXHRjb25zdCBsclRhYmxlVmlzdWFsaXphdGlvbnMgPSBnZXRUYWJsZVZpc3VhbGl6YXRpb25zKHZpZXdzKTtcblx0Y29uc3QgbHJDaGFydFZpc3VhbGl6YXRpb25zID0gZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyh2aWV3cyk7XG5cdGNvbnN0IHNob3dQaW5uYWJsZVRvZ2dsZSA9IGxyVGFibGVWaXN1YWxpemF0aW9ucy5zb21lKHRhYmxlID0+IHRhYmxlLmNvbnRyb2wudHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIik7XG5cdGxldCBzaW5nbGVUYWJsZUlkID0gXCJcIjtcblx0bGV0IHNpbmdsZUNoYXJ0SWQgPSBcIlwiO1xuXHRjb25zdCBmaWx0ZXJCYXJJZCA9IEZpbHRlckJhcklEKHNDb250ZXh0UGF0aCk7XG5cdGNvbnN0IGZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQgPSBGaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEKGZpbHRlckJhcklkKTtcblx0Y29uc3QgZmJDb25maWcgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbigpO1xuXHRjb25zdCBmaWx0ZXJJbml0aWFsTGF5b3V0ID0gZmJDb25maWc/LmluaXRpYWxMYXlvdXQgIT09IHVuZGVmaW5lZCA/IGZiQ29uZmlnPy5pbml0aWFsTGF5b3V0LnRvTG93ZXJDYXNlKCkgOiBcImNvbXBhY3RcIjtcblx0Y29uc3QgZmlsdGVyTGF5b3V0ID0gZmJDb25maWc/LmxheW91dCAhPT0gdW5kZWZpbmVkID8gZmJDb25maWc/LmxheW91dC50b0xvd2VyQ2FzZSgpIDogXCJjb21wYWN0XCI7XG5cdGNvbnN0IHVzZVNlbWFudGljRGF0ZVJhbmdlID0gZmJDb25maWcudXNlU2VtYW50aWNEYXRlUmFuZ2UgIT09IHVuZGVmaW5lZCA/IGZiQ29uZmlnLnVzZVNlbWFudGljRGF0ZVJhbmdlIDogdHJ1ZTtcblxuXHRjb25zdCBvQ29uZmlnID0gZ2V0Q29udGVudEFyZWFJZChjb252ZXJ0ZXJDb250ZXh0LCB2aWV3cyk7XG5cdGlmIChvQ29uZmlnKSB7XG5cdFx0c2luZ2xlQ2hhcnRJZCA9IG9Db25maWcuY2hhcnRJZDtcblx0XHRzaW5nbGVUYWJsZUlkID0gb0NvbmZpZy50YWJsZUlkO1xuXHR9XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkcyA9IGdldFNlbGVjdGlvbkZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0LCBsclRhYmxlVmlzdWFsaXphdGlvbnMpO1xuXG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IGdldEZpbHRlckJhcmhpZGVCYXNpY1NlYXJjaChsclRhYmxlVmlzdWFsaXphdGlvbnMsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50ID0gZ2V0U2VsZWN0aW9uVmFyaWFudChlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZGVmYXVsdFNlbWFudGljRGF0ZXM6IGFueSA9IHVzZVNlbWFudGljRGF0ZVJhbmdlXG5cdFx0PyBnZXREZWZhdWx0U2VtYW50aWNEYXRlcyhnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyhlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KSlcblx0XHQ6IHt9O1xuXHQvLyBTb3J0IGhlYWRlciBhY3Rpb25zIGFjY29yZGluZyB0byBwb3NpdGlvbiBhdHRyaWJ1dGVzIGluIG1hbmlmZXN0XG5cdGNvbnN0IGhlYWRlckFjdGlvbnMgPSBnZXRIZWFkZXJBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBoYXNNdWx0aVZpc3VhbGl6YXRpb25zOiBib29sZWFuID1cblx0XHRtYW5pZmVzdFdyYXBwZXIuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2U7XG5cdGlmIChoYXNNdWx0aXBsZUVudGl0eVNldHMpIHtcblx0XHRjaGVja0NoYXJ0RmlsdGVyQmFySWQodmlld3MsIGZpbHRlckJhcklkKTtcblx0fVxuXG5cdGNvbnN0IHZpc3VhbGl6YXRpb25JZHMgPSAgbHJUYWJsZVZpc3VhbGl6YXRpb25zLm1hcCh2aXN1YWxpemF0aW9uID0+IHtcblx0XHRyZXR1cm4gdmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmlkO1xuXHR9KS5jb25jYXQoXG5cdGxyQ2hhcnRWaXN1YWxpemF0aW9ucy5tYXAodmlzdWFsaXphdGlvbiA9PiB7XG5cdFx0cmV0dXJuIHZpc3VhbGl6YXRpb24uaWQ7XG5cdH0pKTtcblx0Y29uc3QgdGFyZ2V0Q29udHJvbElkcyA9IFtcblx0XHRmaWx0ZXJCYXJJZCxcblx0XHQuLi4obWFuaWZlc3RXcmFwcGVyLmdldFZhcmlhbnRNYW5hZ2VtZW50KCkgIT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sID8gdmlzdWFsaXphdGlvbklkcyA6IFtdKSxcblx0XHQuLi4oIWhhc011bHRpVmlzdWFsaXphdGlvbnMgJiYgdmlld3MubGVuZ3RoID4gMSA/IFtJY29uVGFiQmFySUQoKV0gOiBbXSlcblx0XTtcblxuXHRyZXR1cm4ge1xuXHRcdG1haW5FbnRpdHlTZXQ6IHNDb250ZXh0UGF0aCxcblx0XHRtYWluRW50aXR5VHlwZTogc0NvbnRleHRQYXRoICsgXCIvXCIsXG5cdFx0c2luZ2xlVGFibGVJZCxcblx0XHRzaW5nbGVDaGFydElkLFxuXHRcdHNob3dUYWJDb3VudHMsXG5cdFx0aGVhZGVyQWN0aW9ucyxcblx0XHRzaG93UGlubmFibGVUb2dnbGU6IHNob3dQaW5uYWJsZVRvZ2dsZSxcblx0XHRmaWx0ZXJCYXI6IHtcblx0XHRcdHNlbGVjdGlvbkZpZWxkcyxcblx0XHRcdGhpZGVCYXNpY1NlYXJjaFxuXHRcdH0sXG5cdFx0dmlld3M6IHZpZXdzLFxuXHRcdGZpbHRlckJhcklkLFxuXHRcdGZpbHRlckNvbmRpdGlvbnM6IHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IHNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRkZWZhdWx0U2VtYW50aWNEYXRlczogZGVmYXVsdFNlbWFudGljRGF0ZXNcblx0XHR9LFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiB7XG5cdFx0XHRpZDogZmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCxcblx0XHRcdHRhcmdldENvbnRyb2xJZHM6IHRhcmdldENvbnRyb2xJZHMuam9pbihcIixcIilcblx0XHR9LFxuXHRcdGlzTXVsdGlFbnRpdHlTZXRzOiBoYXNNdWx0aXBsZUVudGl0eVNldHMsXG5cdFx0aGFzTXVsdGlWaXN1YWxpemF0aW9uczogaGFzTXVsdGlWaXN1YWxpemF0aW9ucyxcblx0XHR0ZW1wbGF0ZVR5cGU6IG1hbmlmZXN0V3JhcHBlci5nZXRUZW1wbGF0ZVR5cGUoKSxcblx0XHR1c2VTZW1hbnRpY0RhdGVSYW5nZSxcblx0XHRmaWx0ZXJJbml0aWFsTGF5b3V0LFxuXHRcdGZpbHRlckxheW91dCxcblx0XHRrcGlEZWZpbml0aW9uczogZ2V0S1BJRGVmaW5pdGlvbnMoY29udmVydGVyQ29udGV4dClcblx0fTtcbn07XG5cbmZ1bmN0aW9uIGdldENvbnRlbnRBcmVhSWQoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgdmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdKTogQ29udGVudEFyZWFJRCB8IHVuZGVmaW5lZCB7XG5cdGxldCBzaW5nbGVUYWJsZUlkID0gXCJcIixcblx0XHRzaW5nbGVDaGFydElkID0gXCJcIjtcblx0aWYgKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpIHtcblx0XHRmb3IgKGxldCB2aWV3IG9mIHZpZXdzKSB7XG5cdFx0XHR2aWV3ID0gdmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uO1xuXHRcdFx0aWYgKHZpZXcuY2hhcnRDb250cm9sSWQgJiYgdmlldy50YWJsZUNvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVDaGFydElkID0gdmlldy5jaGFydENvbnRyb2xJZDtcblx0XHRcdFx0c2luZ2xlVGFibGVJZCA9IHZpZXcudGFibGVDb250cm9sSWQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmb3IgKGxldCB2aWV3IG9mIHZpZXdzKSB7XG5cdFx0XHR2aWV3ID0gdmlldyBhcyBTaW5nbGVWaWV3RGVmaW5pdGlvbjtcblx0XHRcdGlmICghc2luZ2xlVGFibGVJZCAmJiAodmlldyBhcyBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uKS50YWJsZUNvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVUYWJsZUlkID0gKHZpZXcgYXMgU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbikudGFibGVDb250cm9sSWQgfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmICghc2luZ2xlQ2hhcnRJZCAmJiAodmlldyBhcyBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uKS5jaGFydENvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVDaGFydElkID0gKHZpZXcgYXMgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbikuY2hhcnRDb250cm9sSWQgfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmIChzaW5nbGVDaGFydElkICYmIHNpbmdsZVRhYmxlSWQpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGlmIChzaW5nbGVUYWJsZUlkIHx8IHNpbmdsZUNoYXJ0SWQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2hhcnRJZDogc2luZ2xlQ2hhcnRJZCxcblx0XHRcdHRhYmxlSWQ6IHNpbmdsZVRhYmxlSWRcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
|
|
641
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb252ZXJ0ZXIudHMiXSwibmFtZXMiOlsiZ2V0VGFibGVWaXN1YWxpemF0aW9ucyIsInZpZXdzIiwidGFibGVzIiwiZm9yRWFjaCIsInZpZXciLCJ0eXBlIiwidmlzdWFsaXphdGlvbnMiLCJzZWNvbmRhcnlWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uIiwidmlzdWFsaXphdGlvbiIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJwdXNoIiwiZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyIsImNoYXJ0cyIsInByaW1hcnlWaXN1YWxpemF0aW9uIiwiQ2hhcnQiLCJnZXREZWZhdWx0U2VtYW50aWNEYXRlcyIsImZpbHRlckZpZWxkcyIsImRlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZmlsdGVyRmllbGQiLCJzZXR0aW5ncyIsImRlZmF1bHRWYWx1ZXMiLCJsZW5ndGgiLCJnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbiIsImVudGl0eVR5cGUiLCJjb252ZXJ0ZXJDb250ZXh0IiwiYklzQUxQIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCIsInNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQiLCJnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IiwicHJlc2VudGF0aW9uVmFyaWFudCIsIlByZXNlbnRhdGlvblZhcmlhbnQiLCJFcnJvciIsImJQVkNvbXBsYWludCIsImlzUHJlc2VudGF0aW9uQ29tcGxpYW50IiwidW5kZWZpbmVkIiwiaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQiLCJnZXREZWZhdWx0UHJlc2VudGF0aW9uVmFyaWFudCIsImRlZmF1bHRMaW5lSXRlbSIsImdldERlZmF1bHRMaW5lSXRlbSIsImdldFZpZXciLCJ2aWV3Q29udmVydGVyQ29uZmlndXJhdGlvbiIsImNvbmZpZyIsImdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiIsImFubm90YXRpb24iLCJnZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZ2V0RW50aXR5VHlwZSIsInRhYmxlQ29udHJvbElkIiwiY2hhcnRDb250cm9sSWQiLCJ0aXRsZSIsInNlbGVjdGlvblZhcmlhbnRQYXRoIiwiaXNNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIiwia2V5IiwiY3JlYXRlVmlzdWFsaXphdGlvbiIsImlzUHJpbWFyeSIsImRlZmF1bHRWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uQ3JlYXRlZCIsIk9iamVjdCIsImFzc2lnbiIsImdldFByZXNlbnRhdGlvbiIsIml0ZW0iLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwidGFyZ2V0QW5ub3RhdGlvbiIsImNyZWF0ZUFscFZpZXciLCJwcmVzZW50YXRpb25zIiwiZGVmYXVsdFBhdGgiLCJpZCIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkFuYWx5dGljYWxMaXN0UGFnZSIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJwcmltYXJ5Iiwic2Vjb25kYXJ5Iiwidmlld0Fubm90YXRpb24iLCJjb21waWxlQmluZGluZyIsImFubm90YXRpb25FeHByZXNzaW9uIiwiVGV4dCIsInZpc3VhbGl6YXRpb25EZWZpbml0aW9uIiwiaW5kZXgiLCJ0YWJsZVZpc3VhbGl6YXRpb24iLCJmaWx0ZXJzIiwiY29udHJvbCIsImhpZGRlbkZpbHRlcnMiLCJwYXRocyIsImtlZXBQcmV2aW91c1ByZXNvbmFsaXphdGlvbiIsIlRhYmxlSUQiLCJ0ZXJtIiwiU2VsZWN0aW9uVmFyaWFudCIsInNwbGl0IiwiY2hhcnRWaXN1YWxpemF0aW9uIiwiQ2hhcnRJRCIsImxhYmVsIiwiZnJhZ21lbnQiLCJ0ZW1wbGF0ZSIsImN1c3RvbVRhYklkIiwiQ3VzdG9tVGFiSUQiLCJnZXRWaWV3cyIsInNldHRpbmdzVmlld3MiLCJ2aWV3Q29udmVydGVyQ29uZmlncyIsInBhdGgiLCJtYW5pZmVzdFdyYXBwZXIiLCJ2aWV3Q29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsImdldENvbnRleHRQYXRoIiwicmVzb2x2ZWRUYXJnZXRjb252ZXJ0ZXJDb250ZXh0IiwiZ2V0QWxwVmlld0NvbmZpZyIsIm1hcCIsInZpZXdDb252ZXJ0ZXJDb25maWciLCJ2aWV3Q29uZmlncyIsImNoYXJ0IiwidGFibGUiLCJnZXREZWZhdWx0Q2hhcnQiLCJnZXRIZWFkZXJBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiY2hlY2tDaGFydEZpbHRlckJhcklkIiwiZmlsdGVyQmFySWQiLCJmaWx0ZXJJZCIsImNvbnZlcnRQYWdlIiwic0NvbnRleHRQYXRoIiwidmlld3NEZWZpbml0aW9uIiwiZ2V0Vmlld0NvbmZpZ3VyYXRpb24iLCJoYXNNdWx0aXBsZUVudGl0eVNldHMiLCJzaG93VGFiQ291bnRzIiwic2hvd0NvdW50cyIsImxyVGFibGVWaXN1YWxpemF0aW9ucyIsImxyQ2hhcnRWaXN1YWxpemF0aW9ucyIsInNob3dQaW5uYWJsZVRvZ2dsZSIsInNvbWUiLCJzaW5nbGVUYWJsZUlkIiwic2luZ2xlQ2hhcnRJZCIsIkZpbHRlckJhcklEIiwiZmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCIsIkZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQiLCJmYkNvbmZpZyIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJmaWx0ZXJJbml0aWFsTGF5b3V0IiwiaW5pdGlhbExheW91dCIsInRvTG93ZXJDYXNlIiwiZmlsdGVyTGF5b3V0IiwibGF5b3V0IiwidXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJvQ29uZmlnIiwiZ2V0Q29udGVudEFyZWFJZCIsImNoYXJ0SWQiLCJ0YWJsZUlkIiwiaGlkZUZpbHRlckJhciIsImlzRmlsdGVyQmFySGlkZGVuIiwibHJGaWx0ZXJQcm9wZXJ0aWVzIiwiZ2V0U2VsZWN0aW9uRmllbGRzIiwic2VsZWN0aW9uRmllbGRzIiwicHJvcGVydHlJbmZvRmllbGRzIiwic1Byb3BlcnR5SW5mbyIsImhpZGVCYXNpY1NlYXJjaCIsImdldEZpbHRlckJhcmhpZGVCYXNpY1NlYXJjaCIsInNlbGVjdGlvblZhcmlhbnQiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJoZWFkZXJBY3Rpb25zIiwiaGFzTXVsdGlWaXN1YWxpemF0aW9ucyIsInZpc3VhbGl6YXRpb25JZHMiLCJjb25jYXQiLCJ0YXJnZXRDb250cm9sSWRzIiwiZ2V0VmFyaWFudE1hbmFnZW1lbnQiLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJDb250cm9sIiwiSWNvblRhYkJhcklEIiwiaWNvblRhYkJhcklkIiwiZGlzcGxheU11bHRpVmlzdWFsaXphdGlvbnMiLCJzdGlja3lTdWJoZWFkZXJQcm92aWRlciIsImdldFN0aWNreU11bHRpVGFiSGVhZGVyQ29uZmlndXJhdGlvbiIsIm1haW5FbnRpdHlTZXQiLCJtYWluRW50aXR5VHlwZSIsImZpbHRlckJhciIsInByb3BlcnR5SW5mbyIsImZpbHRlckNvbmRpdGlvbnMiLCJ2YXJpYW50TWFuYWdlbWVudCIsImpvaW4iLCJpc011bHRpRW50aXR5U2V0cyIsInRlbXBsYXRlVHlwZSIsImtwaURlZmluaXRpb25zIiwiZ2V0S1BJRGVmaW5pdGlvbnMiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBU0Esc0JBQVQsQ0FBZ0NDLEtBQWhDLEVBQXlGO0FBQ3hGLFFBQU1DLE1BQTRCLEdBQUcsRUFBckM7QUFDQUQsSUFBQUEsS0FBSyxDQUFDRSxPQUFOLENBQWMsVUFBU0MsSUFBVCxFQUFlO0FBQzVCLFVBQUksQ0FBRUEsSUFBRCxDQUErQkMs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bnQiOlsiaW1wb3J0IHtcblx0TXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24sXG5cdFZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0U2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRWaXN1YWxpemF0aW9uVHlwZSxcblx0VGVtcGxhdGVUeXBlLFxuXHRDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0Q3VzdG9tVmlld1RlbXBsYXRlQ29uZmlndXJhdGlvbixcblx0VmFyaWFudE1hbmFnZW1lbnRUeXBlXG59IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBFbnRpdHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7XG5cdERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnMsXG5cdERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbixcblx0Z2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uLFxuXHRnZXREZWZhdWx0Q2hhcnQsXG5cdGdldERlZmF1bHRMaW5lSXRlbSxcblx0Z2V0RGVmYXVsdFByZXNlbnRhdGlvblZhcmlhbnQsXG5cdGdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsXG5cdGlzUHJlc2VudGF0aW9uQ29tcGxpYW50LFxuXHRnZXRTZWxlY3Rpb25WYXJpYW50LFxuXHRpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudFxufSBmcm9tIFwiLi4vY29udHJvbHMvQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQge1xuXHRMaW5lSXRlbSxcblx0UHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGVUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBDdXN0b21UYWJJRCwgRmlsdGVyQmFySUQsIEZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQsIFRhYmxlSUQsIENoYXJ0SUQsIEljb25UYWJCYXJJRCB9IGZyb20gXCIuLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB7IENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHsgQmFzZUFjdGlvbiwgZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IENvbmZpZ3VyYWJsZU9iamVjdCwgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgYW5ub3RhdGlvbkV4cHJlc3Npb24sIGNvbXBpbGVCaW5kaW5nIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IEtQSURlZmluaXRpb24sIGdldEtQSURlZmluaXRpb25zIH0gZnJvbSBcIi4uL2NvbnRyb2xzL0NvbW1vbi9LUElcIjtcbmltcG9ydCB7XG5cdGdldFNlbGVjdGlvbkZpZWxkcyxcblx0Z2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMsXG5cdGdldEZpbHRlckJhcmhpZGVCYXNpY1NlYXJjaCxcblx0RmlsdGVyRmllbGQsXG5cdEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L0ZpbHRlckJhclwiO1xuXG50eXBlIFZpZXdBbm5vdGF0aW9uc1R5cGVUeXBlcyA9IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfCBTZWxlY3Rpb25WYXJpYW50VHlwZVR5cGVzO1xudHlwZSBWYXJpYW50TWFuYWdlbWVudERlZmluaXRpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdHRhcmdldENvbnRyb2xJZHM6IHN0cmluZztcbn07XG5cbnR5cGUgTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiA9IFZpZXdQYXRoQ29uZmlndXJhdGlvbiAmIHtcblx0YW5ub3RhdGlvbj86IERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG59O1xuXG50eXBlIFNpbmdsZVZpZXdDb25maWd1cmF0aW9uID0ge1xuXHRhbm5vdGF0aW9uPzogRGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcbn07XG5cbnR5cGUgQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb24gPSBDdXN0b21WaWV3VGVtcGxhdGVDb25maWd1cmF0aW9uICYge1xuXHR0eXBlOiBzdHJpbmc7XG59O1xuXG50eXBlIFZpZXdDb25maWd1cmF0aW9uID0gTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiB8IFNpbmdsZVZpZXdDb25maWd1cmF0aW9uIHwgQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb247XG50eXBlIFZpZXdBbm5vdGF0aW9uQ29uZmlndXJhdGlvbiA9IE11bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24gfCBTaW5nbGVWaWV3Q29uZmlndXJhdGlvbjtcblxudHlwZSBWaWV3Q29udmVydGVyU2V0dGluZ3MgPSBWaWV3Q29uZmlndXJhdGlvbiAmIHtcblx0Y29udmVydGVyQ29udGV4dD86IENvbnZlcnRlckNvbnRleHQ7XG59O1xuXG50eXBlIERlZmF1bHRTZW1hbnRpY0RhdGUgPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdG9wZXJhdG9yOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBMaXN0UmVwb3J0RGVmaW5pdGlvbiA9IHtcblx0bWFpbkVudGl0eVNldDogc3RyaW5nO1xuXHRtYWluRW50aXR5VHlwZTogc3RyaW5nOyAvLyBlbnRpdHlUeXBlPiBhdCB0aGUgc3RhcnQgb2YgTFIgdGVtcGxhdGluZ1xuXHRzaW5nbGVUYWJsZUlkPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggc2luZ2xlIFRhYmxlIG1vZGVcblx0c2luZ2xlQ2hhcnRJZD86IHN0cmluZzsgLy8gb25seSB3aXRoIHNpbmdsZSBUYWJsZSBtb2RlXG5cdGRpc3BsYXlNdWx0aVZpc3VhbGl6YXRpb25zOiBib29sZWFuO1xuXHRpY29uVGFiQmFySWQ6IHN0cmluZztcblx0c3RpY2t5U3ViaGVhZGVyUHJvdmlkZXI/OiBzdHJpbmc7XG5cdHNob3dUYWJDb3VudHM/OiBib29sZWFuOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRoZWFkZXJBY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdHNob3dQaW5uYWJsZVRvZ2dsZT86IGJvb2xlYW47XG5cdGZpbHRlckJhcjoge1xuXHRcdHByb3BlcnR5SW5mbzogYW55O1xuXHRcdHNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXTtcblx0XHRoaWRlQmFzaWNTZWFyY2g6IGJvb2xlYW47XG5cdH07XG5cdHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXTtcblx0ZmlsdGVyQ29uZGl0aW9uczogb2JqZWN0O1xuXHRpc011bHRpRW50aXR5U2V0czogYm9vbGVhbjtcblx0ZmlsdGVyQmFySWQ6IHN0cmluZztcblx0dmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50RGVmaW5pdGlvbjtcblx0aGFzTXVsdGlWaXN1YWxpemF0aW9uczogYm9vbGVhbjtcblx0dGVtcGxhdGVUeXBlOiBUZW1wbGF0ZVR5cGU7XG5cdHVzZVNlbWFudGljRGF0ZVJhbmdlPzogYm9vbGVhbjtcblx0ZmlsdGVySW5pdGlhbExheW91dD86IHN0cmluZztcblx0ZmlsdGVyTGF5b3V0Pzogc3RyaW5nO1xuXHRrcGlEZWZpbml0aW9uczogS1BJRGVmaW5pdGlvbltdO1xuXHRoaWRlRmlsdGVyQmFyOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uID0gU2luZ2xlVmlld0RlZmluaXRpb24gfCBDdXN0b21WaWV3RGVmaW5pdGlvbiB8IENvbWJpbmVkVmlld0RlZmluaXRpb247XG5cbmV4cG9ydCB0eXBlIENvbWJpbmVkVmlld0RlZmluaXRpb24gPSB7XG5cdHNlbGVjdGlvblZhcmlhbnRQYXRoPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggb24gbXVsdGkgVGFibGUgbW9kZVxuXHR0aXRsZT86IHN0cmluZzsgLy8gb25seSB3aXRoIG11bHRpIFRhYmxlIG1vZGVcblx0cHJpbWFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbjtcblx0c2Vjb25kYXJ5VmlzdWFsaXphdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xuXHR0YWJsZUNvbnRyb2xJZDogc3RyaW5nO1xuXHRjaGFydENvbnRyb2xJZDogc3RyaW5nO1xuXHRkZWZhdWx0UGF0aD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEN1c3RvbVZpZXdEZWZpbml0aW9uID0ge1xuXHR0aXRsZT86IHN0cmluZzsgLy8gb25seSB3aXRoIG11bHRpIFRhYmxlIG1vZGVcblx0ZnJhZ21lbnQ6IHN0cmluZztcblx0dHlwZTogc3RyaW5nO1xuXHRjdXN0b21UYWJJZDogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFNpbmdsZVZpZXdEZWZpbml0aW9uID0gU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbiB8IFNpbmdsZUNoYXJ0Vmlld0RlZmluaXRpb247XG5cbmV4cG9ydCB0eXBlIEJhc2VTaW5nbGVWaWV3RGVmaW5pdGlvbiA9IHtcblx0c2VsZWN0aW9uVmFyaWFudFBhdGg/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBvbiBtdWx0aSBUYWJsZSBtb2RlXG5cdHRpdGxlPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIFNpbmdsZVRhYmxlVmlld0RlZmluaXRpb24gPSBCYXNlU2luZ2xlVmlld0RlZmluaXRpb24gJiB7XG5cdHRhYmxlQ29udHJvbElkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbiA9IEJhc2VTaW5nbGVWaWV3RGVmaW5pdGlvbiAmIHtcblx0Y2hhcnRDb250cm9sSWQ/OiBzdHJpbmc7XG59O1xuXG50eXBlIENvbnRlbnRBcmVhSUQgPSB7XG5cdGNoYXJ0SWQ6IHN0cmluZztcblx0dGFibGVJZDogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgYWxsIGxpc3QgcmVwb3J0IHRhYmxlcy5cbiAqIEBwYXJhbSB7TGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW119IHZpZXdzIFRoZSBsaXN0IHJlcG9ydCB2aWV3cyBjb25maWd1cmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMge1RhYmxlVmlzdWFsaXphdGlvbltdfSBUaGUgbGlzdCByZXBvcnQgdGFibGVcbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVWaXN1YWxpemF0aW9ucyh2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10pOiBUYWJsZVZpc3VhbGl6YXRpb25bXSB7XG5cdGNvbnN0IHRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSBbXTtcblx0dmlld3MuZm9yRWFjaChmdW5jdGlvbih2aWV3KSB7XG5cdFx0aWYgKCEodmlldyBhcyBDdXN0b21WaWV3RGVmaW5pdGlvbikudHlwZSkge1xuXHRcdFx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSAodmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uKS5zZWNvbmRhcnlWaXN1YWxpemF0aW9uXG5cdFx0XHRcdD8gKHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbikuc2Vjb25kYXJ5VmlzdWFsaXphdGlvbi52aXN1YWxpemF0aW9uc1xuXHRcdFx0XHQ6ICh2aWV3IGFzIFNpbmdsZVZpZXdEZWZpbml0aW9uKS5wcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnM7XG5cblx0XHRcdHZpc3VhbGl6YXRpb25zLmZvckVhY2goZnVuY3Rpb24odmlzdWFsaXphdGlvbikge1xuXHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSkge1xuXHRcdFx0XHRcdHRhYmxlcy5wdXNoKHZpc3VhbGl6YXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gdGFibGVzO1xufVxuXG5mdW5jdGlvbiBnZXRDaGFydFZpc3VhbGl6YXRpb25zKHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSk6IENoYXJ0VmlzdWFsaXphdGlvbltdIHtcblx0Y29uc3QgY2hhcnRzOiBDaGFydFZpc3VhbGl6YXRpb25bXSA9IFtdO1xuXHR2aWV3cy5mb3JFYWNoKGZ1bmN0aW9uKHZpZXcpIHtcblx0XHRpZiAoISh2aWV3IGFzIEN1c3RvbVZpZXdEZWZpbml0aW9uKS50eXBlKSB7XG5cdFx0XHRjb25zdCB2aXN1YWxpemF0aW9ucyA9ICh2aWV3IGFzIENvbWJpbmVkVmlld0RlZmluaXRpb24pLnByaW1hcnlWaXN1YWxpemF0aW9uXG5cdFx0XHRcdD8gKHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbikucHJpbWFyeVZpc3VhbGl6YXRpb24udmlzdWFsaXphdGlvbnNcblx0XHRcdFx0OiAodmlldyBhcyBTaW5nbGVWaWV3RGVmaW5pdGlvbikucHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zO1xuXG5cdFx0XHR2aXN1YWxpemF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpIHtcblx0XHRcdFx0XHRjaGFydHMucHVzaCh2aXN1YWxpemF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGNoYXJ0cztcbn1cblxuY29uc3QgZ2V0RGVmYXVsdFNlbWFudGljRGF0ZXMgPSBmdW5jdGlvbihmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4pOiBSZWNvcmQ8c3RyaW5nLCBEZWZhdWx0U2VtYW50aWNEYXRlPiB7XG5cdGNvbnN0IGRlZmF1bHRTZW1hbnRpY0RhdGVzOiBhbnkgPSB7fTtcblx0Zm9yIChjb25zdCBmaWx0ZXJGaWVsZCBpbiBmaWx0ZXJGaWVsZHMpIHtcblx0XHRpZiAoZmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkXT8uc2V0dGluZ3M/LmRlZmF1bHRWYWx1ZXM/Lmxlbmd0aCkge1xuXHRcdFx0ZGVmYXVsdFNlbWFudGljRGF0ZXNbZmlsdGVyRmllbGRdID0gZmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkXT8uc2V0dGluZ3M/LmRlZmF1bHRWYWx1ZXM7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkZWZhdWx0U2VtYW50aWNEYXRlcztcbn07XG5cbi8qKlxuICogRmluZCBhIHZpc3VhbGl6YXRpb24gYW5ub3RhdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGZvciByZW5kZXJpbmcgdGhlIGxpc3QgcmVwb3J0LlxuICpcbiAqIEBwYXJhbSB7RW50aXR5VHlwZX0gZW50aXR5VHlwZSBUaGUgY3VycmVudCBFbnRpdHlUeXBlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGJJc0FMUFxuICogQHJldHVybnMge0xpbmVJdGVtIHwgUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZH0gQSBjb21wbGlhbnQgYW5ub3RhdGlvbiBmb3IgcmVuZGVyaW5nIHRoZSBsaXN0IHJlcG9ydFxuICovXG5mdW5jdGlvbiBnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbihcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0YklzQUxQOiBCb29sZWFuXG4pOiBMaW5lSXRlbSB8IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoKCk7XG5cdGNvbnN0IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgPSBnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KGVudGl0eVR5cGUsIGFubm90YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0aWYgKGFubm90YXRpb25QYXRoICYmIHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50ID0gc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudC5QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdGlmICghcHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUHJlc2VudGF0aW9uIFZhcmlhbnQgaXMgbm90IGNvbmZpZ3VyZWQgaW4gdGhlIFNQViBtZW50aW9uZWQgaW4gdGhlIG1hbmlmZXN0XCIpO1xuXHRcdH1cblx0XHRjb25zdCBiUFZDb21wbGFpbnQgPSBpc1ByZXNlbnRhdGlvbkNvbXBsaWFudChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LlByZXNlbnRhdGlvblZhcmlhbnQpO1xuXHRcdGlmICghYlBWQ29tcGxhaW50KSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCwgYklzQUxQKSkge1xuXHRcdFx0cmV0dXJuIHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0fVxuXHR9XG5cdGlmIChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0aWYgKGlzU2VsZWN0aW9uUHJlc2VudGF0aW9uQ29tcGxpYW50KHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsIGJJc0FMUCkpIHtcblx0XHRcdHJldHVybiBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdH1cblx0fVxuXHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50ID0gZ2V0RGVmYXVsdFByZXNlbnRhdGlvblZhcmlhbnQoZW50aXR5VHlwZSk7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0aWYgKGlzUHJlc2VudGF0aW9uQ29tcGxpYW50KHByZXNlbnRhdGlvblZhcmlhbnQsIGJJc0FMUCkpIHtcblx0XHRcdHJldHVybiBwcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdH1cblx0fVxuXHRpZiAoIWJJc0FMUCkge1xuXHRcdGNvbnN0IGRlZmF1bHRMaW5lSXRlbSA9IGdldERlZmF1bHRMaW5lSXRlbShlbnRpdHlUeXBlKTtcblx0XHRpZiAoZGVmYXVsdExpbmVJdGVtKSB7XG5cdFx0XHRyZXR1cm4gZGVmYXVsdExpbmVJdGVtO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5jb25zdCBnZXRWaWV3ID0gZnVuY3Rpb24odmlld0NvbnZlcnRlckNvbmZpZ3VyYXRpb246IFZpZXdDb252ZXJ0ZXJTZXR0aW5ncyk6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbiB7XG5cdGxldCBjb25maWcgPSB2aWV3Q29udmVydGVyQ29uZmlndXJhdGlvbjtcblx0aWYgKGNvbmZpZy5jb252ZXJ0ZXJDb250ZXh0KSB7XG5cdFx0bGV0IGNvbnZlcnRlckNvbnRleHQgPSBjb25maWcuY29udmVydGVyQ29udGV4dDtcblx0XHRjb25maWcgPSBjb25maWcgYXMgVmlld0Fubm90YXRpb25Db25maWd1cmF0aW9uO1xuXHRcdGxldCBwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiA9IGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdGNvbmZpZy5hbm5vdGF0aW9uXG5cdFx0XHRcdD8gY29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKGNvbmZpZy5hbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpXG5cdFx0XHRcdDogXCJcIixcblx0XHRcdHRydWUsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0Y29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvblxuXHRcdCk7XG5cdFx0bGV0IHRhYmxlQ29udHJvbElkID0gXCJcIjtcblx0XHRsZXQgY2hhcnRDb250cm9sSWQgPSBcIlwiO1xuXHRcdGxldCB0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gXCJcIjtcblx0XHRsZXQgc2VsZWN0aW9uVmFyaWFudFBhdGggPSBcIlwiO1xuXHRcdGNvbnN0IGlzTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZzogVmlld0NvbmZpZ3VyYXRpb24pOiBjb25maWcgaXMgTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiB7XG5cdFx0XHRyZXR1cm4gKGNvbmZpZyBhcyBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uKS5rZXkgIT09IHVuZGVmaW5lZDtcblx0XHR9O1xuXHRcdGNvbnN0IGNyZWF0ZVZpc3VhbGl6YXRpb24gPSBmdW5jdGlvbihwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiwgaXNQcmltYXJ5PzogYm9vbGVhbikge1xuXHRcdFx0bGV0IGRlZmF1bHRWaXN1YWxpemF0aW9uO1xuXHRcdFx0Zm9yIChjb25zdCB2aXN1YWxpemF0aW9uIG9mIHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucykge1xuXHRcdFx0XHRpZiAoaXNQcmltYXJ5ICYmIHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpIHtcblx0XHRcdFx0XHRkZWZhdWx0VmlzdWFsaXphdGlvbiA9IHZpc3VhbGl6YXRpb247XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFpc1ByaW1hcnkgJiYgdmlzdWFsaXphdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSkge1xuXHRcdFx0XHRcdGRlZmF1bHRWaXN1YWxpemF0aW9uID0gdmlzdWFsaXphdGlvbjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcHJlc2VudGF0aW9uQ3JlYXRlZCA9IE9iamVjdC5hc3NpZ24oe30sIHByZXNlbnRhdGlvbik7XG5cdFx0XHRpZiAoZGVmYXVsdFZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0cHJlc2VudGF0aW9uQ3JlYXRlZC52aXN1YWxpemF0aW9ucyA9IFtkZWZhdWx0VmlzdWFsaXphdGlvbl07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcHJlc2VudGF0aW9uQ3JlYXRlZDtcblx0XHR9O1xuXHRcdGNvbnN0IGdldFByZXNlbnRhdGlvbiA9IGZ1bmN0aW9uKGl0ZW06IFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikge1xuXHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKGl0ZW0uYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbiA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb24gYXMgRGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcblx0XHRcdGNvbnZlcnRlckNvbnRleHQgPSByZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0O1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvbiA9IHRhcmdldEFubm90YXRpb247XG5cdFx0XHRwcmVzZW50YXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0XHRcdGFubm90YXRpb25cblx0XHRcdFx0XHQ/IGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aChhbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpXG5cdFx0XHRcdFx0OiBcIlwiLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRjb25maWcgYXMgVmlld1BhdGhDb25maWd1cmF0aW9uXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHByZXNlbnRhdGlvbjtcblx0XHR9O1xuXHRcdGNvbnN0IGNyZWF0ZUFscFZpZXcgPSBmdW5jdGlvbihcblx0XHRcdHByZXNlbnRhdGlvbnM6IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbltdLFxuXHRcdFx0ZGVmYXVsdFBhdGg6IFwiYm90aFwiIHwgXCJwcmltYXJ5XCIgfCBcInNlY29uZGFyeVwiIHwgdW5kZWZpbmVkXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBwcmltYXJ5VmlzdWFsaXphdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uIHwgdW5kZWZpbmVkID0gY3JlYXRlVmlzdWFsaXphdGlvbihwcmVzZW50YXRpb25zWzBdLCB0cnVlKTtcblx0XHRcdGNoYXJ0Q29udHJvbElkID0gKHByaW1hcnlWaXN1YWxpemF0aW9uPy52aXN1YWxpemF0aW9uc1swXSBhcyBDaGFydFZpc3VhbGl6YXRpb24pLmlkO1xuXHRcdFx0Y29uc3Qgc2Vjb25kYXJ5VmlzdWFsaXphdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uIHwgdW5kZWZpbmVkID0gY3JlYXRlVmlzdWFsaXphdGlvbihcblx0XHRcdFx0cHJlc2VudGF0aW9uc1sxXSA/IHByZXNlbnRhdGlvbnNbMV0gOiBwcmVzZW50YXRpb25zWzBdXG5cdFx0XHQpO1xuXHRcdFx0dGFibGVDb250cm9sSWQgPSAoc2Vjb25kYXJ5VmlzdWFsaXphdGlvbj8udmlzdWFsaXphdGlvbnNbMF0gYXMgVGFibGVWaXN1YWxpemF0aW9uKS5hbm5vdGF0aW9uLmlkO1xuXHRcdFx0aWYgKHByaW1hcnlWaXN1YWxpemF0aW9uICYmIHNlY29uZGFyeVZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0Y29uc3QgdmlldzogQ29tYmluZWRWaWV3RGVmaW5pdGlvbiA9IHtcblx0XHRcdFx0XHRwcmltYXJ5VmlzdWFsaXphdGlvbixcblx0XHRcdFx0XHRzZWNvbmRhcnlWaXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdHRhYmxlQ29udHJvbElkLFxuXHRcdFx0XHRcdGNoYXJ0Q29udHJvbElkLFxuXHRcdFx0XHRcdGRlZmF1bHRQYXRoXG5cdFx0XHRcdH07XG5cdFx0XHRcdHJldHVybiB2aWV3O1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0aWYgKHByZXNlbnRhdGlvbj8udmlzdWFsaXphdGlvbnM/Lmxlbmd0aCA9PT0gMiAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlKSB7XG5cdFx0XHRjb25zdCB2aWV3OiBDb21iaW5lZFZpZXdEZWZpbml0aW9uIHwgdW5kZWZpbmVkID0gY3JlYXRlQWxwVmlldyhbcHJlc2VudGF0aW9uXSwgXCJib3RoXCIpO1xuXHRcdFx0aWYgKHZpZXcpIHtcblx0XHRcdFx0cmV0dXJuIHZpZXc7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyhjb25maWcgYXMgVmlld1BhdGhDb25maWd1cmF0aW9uKSB8fFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgeyBwcmltYXJ5LCBzZWNvbmRhcnkgfSA9IGNvbmZpZyBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdGlmIChwcmltYXJ5ICYmIHByaW1hcnkubGVuZ3RoICYmIHNlY29uZGFyeSAmJiBzZWNvbmRhcnkubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IHZpZXc6IENvbWJpbmVkVmlld0RlZmluaXRpb24gfCB1bmRlZmluZWQgPSBjcmVhdGVBbHBWaWV3KFxuXHRcdFx0XHRcdFtnZXRQcmVzZW50YXRpb24ocHJpbWFyeVswXSksIGdldFByZXNlbnRhdGlvbihzZWNvbmRhcnlbMF0pXSxcblx0XHRcdFx0XHQoY29uZmlnIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uKS5kZWZhdWx0UGF0aFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAodmlldykge1xuXHRcdFx0XHRcdHJldHVybiB2aWV3O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJTZWNvbmRhcnlJdGVtcyBpbiB0aGUgVmlld3MgaXMgbm90IHByZXNlbnRcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc011bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24oY29uZmlnKSkge1xuXHRcdFx0Ly8ga2V5IGV4aXN0cyBvbmx5IG9uIG11bHRpIHRhYmxlcyBtb2RlXG5cdFx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oKGNvbmZpZyBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHZpZXdBbm5vdGF0aW9uOiBWaWV3QW5ub3RhdGlvbnNUeXBlVHlwZXMgPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIFZpZXdBbm5vdGF0aW9uc1R5cGVUeXBlcztcblx0XHRcdGNvbnZlcnRlckNvbnRleHQgPSByZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0O1xuXHRcdFx0dGl0bGUgPSBjb21waWxlQmluZGluZyhhbm5vdGF0aW9uRXhwcmVzc2lvbih2aWV3QW5ub3RhdGlvbi5UZXh0KSk7XG5cdFx0XHQvLyBOZWVkIHRvIGxvb3Agb24gdGFibGUgaW50byB2aWV3cyBzaW5jZSBtdWx0aSB0YWJsZSBtb2RlIGdldCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIChoaWRkZW4gZmlsdGVycyBvciBUYWJsZSBJZClcblx0XHRcdHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5mb3JFYWNoKCh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbiwgaW5kZXgpID0+IHtcblx0XHRcdFx0c3dpdGNoICh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi50eXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZTpcblx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlVmlzdWFsaXphdGlvbiA9IHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1tpbmRleF0gYXMgVGFibGVWaXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdFx0Y29uc3QgZmlsdGVycyA9IHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLmZpbHRlcnMgfHwge307XG5cdFx0XHRcdFx0XHRmaWx0ZXJzLmhpZGRlbkZpbHRlcnMgPSBmaWx0ZXJzLmhpZGRlbkZpbHRlcnMgfHwgeyBwYXRoczogW10gfTtcblx0XHRcdFx0XHRcdGlmICghKGNvbmZpZyBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pLmtlZXBQcmV2aW91c1ByZXNvbmFsaXphdGlvbikge1xuXHRcdFx0XHRcdFx0XHQvLyBOZWVkIHRvIG92ZXJyaWRlIFRhYmxlIElkIHRvIG1hdGNoIHdpdGggVGFiIEtleSAoY3VycmVudGx5IG9ubHkgdGFibGUgaXMgbWFuYWdlZCBpbiBtdWx0aXBsZSB2aWV3IG1vZGUpXG5cdFx0XHRcdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmlkID0gVGFibGVJRCgoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikua2V5IHx8IFwiXCIsIFwiTGluZUl0ZW1cIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25maWcgPSBjb25maWcgYXMgVmlld0Fubm90YXRpb25Db25maWd1cmF0aW9uO1xuXHRcdFx0XHRcdFx0aWYgKGNvbmZpZyAmJiBjb25maWcuYW5ub3RhdGlvbiAmJiBjb25maWcuYW5ub3RhdGlvbi50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRQYXRoID0gKGNvbmZpZy5hbm5vdGF0aW9uIGFzIFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMpLlNlbGVjdGlvblZhcmlhbnQuZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KFxuXHRcdFx0XHRcdFx0XHRcdFwiQFwiXG5cdFx0XHRcdFx0XHRcdClbMV07XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aCA9IChjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vUHJvdmlkZSBTZWxlY3Rpb24gVmFyaWFudCB0byBoaWRkZW5GaWx0ZXJzIGluIG9yZGVyIHRvIHNldCB0aGUgU1YgZmlsdGVycyB0byB0aGUgdGFibGUuXG5cdFx0XHRcdFx0XHQvL01EQyBUYWJsZSBvdmVycmlkZXMgYmluZGluZyBGaWx0ZXIgYW5kIGZyb20gU0FQIEZFIHRoZSBvbmx5IG1ldGhvZCB3aGVyZSB3ZSBhcmUgYWJsZSB0byBhZGRcblx0XHRcdFx0XHRcdC8vYWRkaXRpb25hbCBmaWx0ZXIgaXMgJ3JlYmluZFRhYmxlJyBpbnRvIFRhYmxlIGRlbGVnYXRlLlxuXHRcdFx0XHRcdFx0Ly9UbyBhdm9pZCBpbXBsZW1lbnRpbmcgc3BlY2lmaWMgTFIgZmVhdHVyZSB0byBTQVAgRkUgTWFjcm8gVGFibGUsIHRoZSBmaWx0ZXIocykgcmVsYXRlZCB0byB0aGUgVGFiIChtdWx0aSB0YWJsZSBtb2RlKVxuXHRcdFx0XHRcdFx0Ly9jYW4gYmUgcGFzc2VkIHRvIG1hY3JvIHRhYmxlIHZpYSBwYXJhbWV0ZXIvY29udGV4dCBuYW1lZCBmaWx0ZXJzIGFuZCBrZXkgaGlkZGVuRmlsdGVycy5cblx0XHRcdFx0XHRcdGZpbHRlcnMuaGlkZGVuRmlsdGVycy5wYXRocy5wdXNoKHsgYW5ub3RhdGlvblBhdGg6IHNlbGVjdGlvblZhcmlhbnRQYXRoIH0pO1xuXHRcdFx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wuZmlsdGVycyA9IGZpbHRlcnM7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0OlxuXHRcdFx0XHRcdFx0Y29uc3QgY2hhcnRWaXN1YWxpemF0aW9uID0gcHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zW2luZGV4XSBhcyBDaGFydFZpc3VhbGl6YXRpb247XG5cdFx0XHRcdFx0XHRjaGFydFZpc3VhbGl6YXRpb24uaWQgPSBDaGFydElEKChjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5rZXkgfHwgXCJcIiwgXCJDaGFydFwiKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5mb3JFYWNoKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uID0+IHtcblx0XHRcdGlmICh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSkge1xuXHRcdFx0XHR0YWJsZUNvbnRyb2xJZCA9IHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmFubm90YXRpb24uaWQ7XG5cdFx0XHR9IGVsc2UgaWYgKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSB7XG5cdFx0XHRcdGNoYXJ0Q29udHJvbElkID0gdmlzdWFsaXphdGlvbkRlZmluaXRpb24uaWQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHByZXNlbnRhdGlvbixcblx0XHRcdHRhYmxlQ29udHJvbElkLFxuXHRcdFx0Y2hhcnRDb250cm9sSWQsXG5cdFx0XHR0aXRsZSxcblx0XHRcdHNlbGVjdGlvblZhcmlhbnRQYXRoXG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRjb25maWcgPSBjb25maWcgYXMgQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb247XG5cdFx0Y29uc3QgdGl0bGUgPSBjb25maWcubGFiZWwsXG5cdFx0XHRmcmFnbWVudCA9IGNvbmZpZy50ZW1wbGF0ZSxcblx0XHRcdHR5cGUgPSBjb25maWcudHlwZSxcblx0XHRcdGN1c3RvbVRhYklkID0gQ3VzdG9tVGFiSUQoY29uZmlnLmtleSB8fCBcIlwiKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGUsXG5cdFx0XHRmcmFnbWVudCxcblx0XHRcdHR5cGUsXG5cdFx0XHRjdXN0b21UYWJJZFxuXHRcdH07XG5cdH1cbn07XG5cbmNvbnN0IGdldFZpZXdzID0gZnVuY3Rpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHNldHRpbmdzVmlld3M6IE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkXG4pOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSB7XG5cdGxldCB2aWV3Q29udmVydGVyQ29uZmlnczogVmlld0NvbnZlcnRlclNldHRpbmdzW10gPSBbXTtcblx0aWYgKHNldHRpbmdzVmlld3MpIHtcblx0XHRzZXR0aW5nc1ZpZXdzLnBhdGhzLmZvckVhY2goKHBhdGg6IFZpZXdQYXRoQ29uZmlndXJhdGlvbiB8IEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24pID0+IHtcblx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMocGF0aCBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb24pKSB7XG5cdFx0XHRcdGlmIChzZXR0aW5nc1ZpZXdzLnBhdGhzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJBTFAgZmxhdm9yIGNhbm5vdCBoYXZlIG11bHRpcGxlIHZpZXdzXCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhdGggPSBwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdHByaW1hcnk6IHBhdGgucHJpbWFyeSxcblx0XHRcdFx0XHRcdHNlY29uZGFyeTogcGF0aC5zZWNvbmRhcnksXG5cdFx0XHRcdFx0XHRkZWZhdWx0UGF0aDogcGF0aC5kZWZhdWx0UGF0aFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKChwYXRoIGFzIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uKS50ZW1wbGF0ZSkge1xuXHRcdFx0XHRwYXRoID0gcGF0aCBhcyBDdXN0b21WaWV3Q29uZmlndXJhdGlvbjtcblx0XHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdFx0a2V5OiBwYXRoLmtleSxcblx0XHRcdFx0XHRsYWJlbDogcGF0aC5sYWJlbCxcblx0XHRcdFx0XHR0ZW1wbGF0ZTogcGF0aC50ZW1wbGF0ZSxcblx0XHRcdFx0XHR0eXBlOiBcIkN1c3RvbVwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGF0aCA9IHBhdGggYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLFxuXHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKFxuXHRcdFx0XHRcdFx0cGF0aC5jb250ZXh0UGF0aCB8fCAocGF0aC5lbnRpdHlTZXQgJiYgXCIvXCIgKyBwYXRoLmVudGl0eVNldCkgfHwgY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRlbnRpdHlUeXBlID0gdmlld0NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXG5cdFx0XHRcdGlmIChlbnRpdHlUeXBlICYmIHZpZXdDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdFx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBtYW5pZmVzdFdyYXBwZXIuZ2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgoKTtcblx0XHRcdFx0XHRsZXQgYW5ub3RhdGlvbjtcblx0XHRcdFx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IHZpZXdDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKHBhdGguYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0XHRcdGNvbnN0IHRhcmdldEFubm90YXRpb24gPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG5cdFx0XHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHRcdFx0XHRpZiAodGFyZ2V0QW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdFx0aWYgKHRhcmdldEFubm90YXRpb24udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uVmFyaWFudCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uID0gZ2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudChcblx0XHRcdFx0XHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSxcblx0XHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZWRUYXJnZXRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uID0gZ2V0RGVmYXVsdExpbmVJdGVtKHZpZXdDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSkgYXMgTGluZUl0ZW07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb24gPSB0YXJnZXRBbm5vdGF0aW9uO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IHZpZXdDb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogcGF0aC5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRcdFx0a2VlcFByZXZpb3VzUHJlc29uYWxpemF0aW9uOiBwYXRoLmtlZXBQcmV2aW91c1ByZXNvbmFsaXphdGlvbixcblx0XHRcdFx0XHRcdFx0a2V5OiBwYXRoLmtleVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIFRPRE8gRGlhZ25vc3RpY3MgbWVzc2FnZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlKSB7XG5cdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncyA9IGdldEFscFZpZXdDb25maWcoY29udmVydGVyQ29udGV4dCwgdmlld0NvbnZlcnRlckNvbmZpZ3MpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0YW5ub3RhdGlvbjogZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgZmFsc2UpLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHZpZXdDb252ZXJ0ZXJDb25maWdzLm1hcCh2aWV3Q29udmVydGVyQ29uZmlnID0+IHtcblx0XHRyZXR1cm4gZ2V0Vmlldyh2aWV3Q29udmVydGVyQ29uZmlnKTtcblx0fSk7XG59O1xuXG5mdW5jdGlvbiBnZXRBbHBWaWV3Q29uZmlnKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIHZpZXdDb25maWdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3NbXSk6IFZpZXdDb252ZXJ0ZXJTZXR0aW5nc1tdIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBhbm5vdGF0aW9uID0gZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgdHJ1ZSk7XG5cdGxldCBjaGFydCwgdGFibGU7XG5cdGlmIChhbm5vdGF0aW9uKSB7XG5cdFx0dmlld0NvbmZpZ3MucHVzaCh7XG5cdFx0XHRhbm5vdGF0aW9uOiBhbm5vdGF0aW9uLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNoYXJ0ID0gZ2V0RGVmYXVsdENoYXJ0KGVudGl0eVR5cGUpO1xuXHRcdHRhYmxlID0gZ2V0RGVmYXVsdExpbmVJdGVtKGVudGl0eVR5cGUpO1xuXHRcdGlmIChjaGFydCAmJiB0YWJsZSkge1xuXHRcdFx0Y29uc3QgcHJpbWFyeTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uW10gPSBbeyBhbm5vdGF0aW9uUGF0aDogY2hhcnQudGVybSB9XTtcblx0XHRcdGNvbnN0IHNlY29uZGFyeTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uW10gPSBbeyBhbm5vdGF0aW9uUGF0aDogdGFibGUudGVybSB9XTtcblx0XHRcdHZpZXdDb25maWdzLnB1c2goe1xuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRwcmltYXJ5OiBwcmltYXJ5LFxuXHRcdFx0XHRzZWNvbmRhcnk6IHNlY29uZGFyeSxcblx0XHRcdFx0ZGVmYXVsdFBhdGg6IFwiYm90aFwiXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHZpZXdDb25maWdzO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyQWN0aW9ucyA9IGZ1bmN0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoW10sIGdldEFjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RXcmFwcGVyLmdldEhlYWRlckFjdGlvbnMoKSwgY29udmVydGVyQ29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoZWNrQ2hhcnRGaWx0ZXJCYXJJZCA9IGZ1bmN0aW9uKHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSwgZmlsdGVyQmFySWQ6IHN0cmluZykge1xuXHR2aWV3cy5mb3JFYWNoKHZpZXcgPT4ge1xuXHRcdGlmICghKHZpZXcgYXMgQ3VzdG9tVmlld0RlZmluaXRpb24pLnR5cGUpIHtcblx0XHRcdGNvbnN0IHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uID0gKHZpZXcgYXMgU2luZ2xlVmlld0RlZmluaXRpb24pLnByZXNlbnRhdGlvbjtcblx0XHRcdHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5mb3JFYWNoKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uID0+IHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0ICYmIHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmZpbHRlcklkICE9PSBmaWx0ZXJCYXJJZCkge1xuXHRcdFx0XHRcdHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmZpbHRlcklkID0gZmlsdGVyQmFySWQ7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIExpc3RSZXBvcnREZWZpbml0aW9uIGZvciBtdWx0aXBsZSBlbnRpdHkgc2V0cyAobXVsdGlwbGUgdGFibGUgbW9kZSkuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyB7TGlzdFJlcG9ydERlZmluaXRpb259IFRoZSBsaXN0IHJlcG9ydCBkZWZpbml0aW9uIGJhc2VkIG9uIGFubm90YXRpb24gKyBtYW5pZmVzdFxuICovXG5leHBvcnQgY29uc3QgY29udmVydFBhZ2UgPSBmdW5jdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogTGlzdFJlcG9ydERlZmluaXRpb24ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IHNDb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblxuXHRpZiAoIXNDb250ZXh0UGF0aCkge1xuXHRcdC8vIElmIHdlIGRvbid0IGhhdmUgYW4gZW50aXR5U2V0IGF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbiBpc3N1ZSBJJ2Qgc2F5XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XCJBbiBFbnRpdHlTZXQgaXMgcmVxdWlyZWQgdG8gYmUgYWJsZSB0byBkaXNwbGF5IGEgTGlzdFJlcG9ydCwgcGxlYXNlIGFkanVzdCB5b3VyIGBlbnRpdHlTZXRgIHByb3BlcnR5IHRvIHBvaW50IHRvIG9uZS5cIlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3Qgdmlld3NEZWZpbml0aW9uOiBNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCA9IG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3Q29uZmlndXJhdGlvbigpO1xuXHRjb25zdCBoYXNNdWx0aXBsZUVudGl0eVNldHMgPSBtYW5pZmVzdFdyYXBwZXIuaGFzTXVsdGlwbGVFbnRpdHlTZXRzKCk7XG5cdGNvbnN0IHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSA9IGdldFZpZXdzKGNvbnZlcnRlckNvbnRleHQsIHZpZXdzRGVmaW5pdGlvbik7XG5cdGNvbnN0IHNob3dUYWJDb3VudHMgPSB2aWV3c0RlZmluaXRpb24gPyB2aWV3c0RlZmluaXRpb24/LnNob3dDb3VudHMgfHwgaGFzTXVsdGlwbGVFbnRpdHlTZXRzIDogdW5kZWZpbmVkOyAvLyB3aXRoIG11bHRpIEVudGl0eVNldHMsIHRhYiBjb3VudHMgYXJlIGRpc3BsYXllZCBieSBkZWZhdWx0XG5cdGNvbnN0IGxyVGFibGVWaXN1YWxpemF0aW9ucyA9IGdldFRhYmxlVmlzdWFsaXphdGlvbnModmlld3MpO1xuXHRjb25zdCBsckNoYXJ0VmlzdWFsaXphdGlvbnMgPSBnZXRDaGFydFZpc3VhbGl6YXRpb25zKHZpZXdzKTtcblx0Y29uc3Qgc2hvd1Bpbm5hYmxlVG9nZ2xlID0gbHJUYWJsZVZpc3VhbGl6YXRpb25zLnNvbWUodGFibGUgPT4gdGFibGUuY29udHJvbC50eXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiKTtcblx0bGV0IHNpbmdsZVRhYmxlSWQgPSBcIlwiO1xuXHRsZXQgc2luZ2xlQ2hhcnRJZCA9IFwiXCI7XG5cdGNvbnN0IGZpbHRlckJhcklkID0gRmlsdGVyQmFySUQoc0NvbnRleHRQYXRoKTtcblx0Y29uc3QgZmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCA9IEZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQoZmlsdGVyQmFySWQpO1xuXHRjb25zdCBmYkNvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCk7XG5cdGNvbnN0IGZpbHRlckluaXRpYWxMYXlvdXQgPSBmYkNvbmZpZz8uaW5pdGlhbExheW91dCAhPT0gdW5kZWZpbmVkID8gZmJDb25maWc/LmluaXRpYWxMYXlvdXQudG9Mb3dlckNhc2UoKSA6IFwiY29tcGFjdFwiO1xuXHRjb25zdCBmaWx0ZXJMYXlvdXQgPSBmYkNvbmZpZz8ubGF5b3V0ICE9PSB1bmRlZmluZWQgPyBmYkNvbmZpZz8ubGF5b3V0LnRvTG93ZXJDYXNlKCkgOiBcImNvbXBhY3RcIjtcblx0Y29uc3QgdXNlU2VtYW50aWNEYXRlUmFuZ2UgPSBmYkNvbmZpZy51c2VTZW1hbnRpY0RhdGVSYW5nZSAhPT0gdW5kZWZpbmVkID8gZmJDb25maWcudXNlU2VtYW50aWNEYXRlUmFuZ2UgOiB0cnVlO1xuXG5cdGNvbnN0IG9Db25maWcgPSBnZXRDb250ZW50QXJlYUlkKGNvbnZlcnRlckNvbnRleHQsIHZpZXdzKTtcblx0aWYgKG9Db25maWcpIHtcblx0XHRzaW5nbGVDaGFydElkID0gb0NvbmZpZy5jaGFydElkO1xuXHRcdHNpbmdsZVRhYmxlSWQgPSBvQ29uZmlnLnRhYmxlSWQ7XG5cdH1cblxuXHQvLyBDaGFydCBoYXMgYSBkZXBlbmRlbmN5IHRvIGZpbHRlciBiYXIgKGlzc3VlIHdpdGggbG9hZGluZyBkYXRhKS4gT25jZSByZXNvbHZlZCwgdGhlIGNoZWNrIGZvciBjaGFydCBzaG91bGQgYmUgcmVtb3ZlZCBoZXJlLlxuXHQvLyBVbnRpbCB0aGVuLCBoaWRpbmcgZmlsdGVyIGJhciBpcyBub3cgYWxsb3dlZCBpZiBhIGNoYXJ0IGlzIGJlaW5nIHVzZWQgb24gTFIuXG5cdGNvbnN0IGhpZGVGaWx0ZXJCYXIgPSBtYW5pZmVzdFdyYXBwZXIuaXNGaWx0ZXJCYXJIaWRkZW4oKSAmJiBzaW5nbGVDaGFydElkID09PSBcIlwiO1xuXHRjb25zdCBsckZpbHRlclByb3BlcnRpZXMgPSBnZXRTZWxlY3Rpb25GaWVsZHMoY29udmVydGVyQ29udGV4dCwgbHJUYWJsZVZpc3VhbGl6YXRpb25zKTtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzID0gbHJGaWx0ZXJQcm9wZXJ0aWVzLnNlbGVjdGlvbkZpZWxkcztcblx0Y29uc3QgcHJvcGVydHlJbmZvRmllbGRzID0gbHJGaWx0ZXJQcm9wZXJ0aWVzLnNQcm9wZXJ0eUluZm87XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IGdldEZpbHRlckJhcmhpZGVCYXNpY1NlYXJjaChsclRhYmxlVmlzdWFsaXphdGlvbnMsIGxyQ2hhcnRWaXN1YWxpemF0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBnZXRTZWxlY3Rpb25WYXJpYW50KGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBkZWZhdWx0U2VtYW50aWNEYXRlcyA9IHVzZVNlbWFudGljRGF0ZVJhbmdlID8gZ2V0RGVmYXVsdFNlbWFudGljRGF0ZXMoZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCkpIDoge307XG5cblx0Ly8gU29ydCBoZWFkZXIgYWN0aW9ucyBhY2NvcmRpbmcgdG8gcG9zaXRpb24gYXR0cmlidXRlcyBpbiBtYW5pZmVzdFxuXHRjb25zdCBoZWFkZXJBY3Rpb25zID0gZ2V0SGVhZGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgaGFzTXVsdGlWaXN1YWxpemF0aW9uczogYm9vbGVhbiA9XG5cdFx0bWFuaWZlc3RXcmFwcGVyLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSB8fCBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlO1xuXHRpZiAoaGFzTXVsdGlwbGVFbnRpdHlTZXRzKSB7XG5cdFx0Y2hlY2tDaGFydEZpbHRlckJhcklkKHZpZXdzLCBmaWx0ZXJCYXJJZCk7XG5cdH1cblxuXHRjb25zdCB2aXN1YWxpemF0aW9uSWRzID0gbHJUYWJsZVZpc3VhbGl6YXRpb25zXG5cdFx0Lm1hcCh2aXN1YWxpemF0aW9uID0+IHtcblx0XHRcdHJldHVybiB2aXN1YWxpemF0aW9uLmFubm90YXRpb24uaWQ7XG5cdFx0fSlcblx0XHQuY29uY2F0KFxuXHRcdFx0bHJDaGFydFZpc3VhbGl6YXRpb25zLm1hcCh2aXN1YWxpemF0aW9uID0+IHtcblx0XHRcdFx0cmV0dXJuIHZpc3VhbGl6YXRpb24uaWQ7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdGNvbnN0IHRhcmdldENvbnRyb2xJZHMgPSBbXG5cdFx0Li4uKGhpZGVGaWx0ZXJCYXIgPyBbXSA6IFtmaWx0ZXJCYXJJZF0pLFxuXHRcdC4uLihtYW5pZmVzdFdyYXBwZXIuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKSAhPT0gVmFyaWFudE1hbmFnZW1lbnRUeXBlLkNvbnRyb2wgPyB2aXN1YWxpemF0aW9uSWRzIDogW10pLFxuXHRcdC4uLighaGFzTXVsdGlWaXN1YWxpemF0aW9ucyAmJiB2aWV3cy5sZW5ndGggPiAxID8gW0ljb25UYWJCYXJJRCgpXSA6IFtdKVxuXHRdO1xuXG5cdGNvbnN0IGljb25UYWJCYXJJZCA9IFwiZmU6OlRhYk11bHRpcGxlTW9kZVwiO1xuXHRjb25zdCBkaXNwbGF5TXVsdGlWaXN1YWxpemF0aW9ucyA9IHZpZXdzLmxlbmd0aCA+IDEgJiYgIWhhc011bHRpVmlzdWFsaXphdGlvbnM7XG5cdGNvbnN0IHN0aWNreVN1YmhlYWRlclByb3ZpZGVyID1cblx0XHRkaXNwbGF5TXVsdGlWaXN1YWxpemF0aW9ucyAmJiBtYW5pZmVzdFdyYXBwZXIuZ2V0U3RpY2t5TXVsdGlUYWJIZWFkZXJDb25maWd1cmF0aW9uKCkgPyBpY29uVGFiQmFySWQgOiB1bmRlZmluZWQ7XG5cblx0cmV0dXJuIHtcblx0XHRtYWluRW50aXR5U2V0OiBzQ29udGV4dFBhdGgsXG5cdFx0bWFpbkVudGl0eVR5cGU6IHNDb250ZXh0UGF0aCArIFwiL1wiLFxuXHRcdGRpc3BsYXlNdWx0aVZpc3VhbGl6YXRpb25zLFxuXHRcdGljb25UYWJCYXJJZCxcblx0XHRzdGlja3lTdWJoZWFkZXJQcm92aWRlcixcblx0XHRzaW5nbGVUYWJsZUlkLFxuXHRcdHNpbmdsZUNoYXJ0SWQsXG5cdFx0c2hvd1RhYkNvdW50cyxcblx0XHRoZWFkZXJBY3Rpb25zLFxuXHRcdHNob3dQaW5uYWJsZVRvZ2dsZTogc2hvd1Bpbm5hYmxlVG9nZ2xlLFxuXHRcdGZpbHRlckJhcjoge1xuXHRcdFx0cHJvcGVydHlJbmZvOiBwcm9wZXJ0eUluZm9GaWVsZHMsXG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMsXG5cdFx0XHRoaWRlQmFzaWNTZWFyY2hcblx0XHR9LFxuXHRcdHZpZXdzOiB2aWV3cyxcblx0XHRmaWx0ZXJCYXJJZDogaGlkZUZpbHRlckJhciA/IFwiXCIgOiBmaWx0ZXJCYXJJZCxcblx0XHRmaWx0ZXJDb25kaXRpb25zOiB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50OiBzZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0ZGVmYXVsdFNlbWFudGljRGF0ZXM6IGRlZmF1bHRTZW1hbnRpY0RhdGVzXG5cdFx0fSxcblx0XHR2YXJpYW50TWFuYWdlbWVudDoge1xuXHRcdFx0aWQ6IGZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQsXG5cdFx0XHR0YXJnZXRDb250cm9sSWRzOiB0YXJnZXRDb250cm9sSWRzLmpvaW4oXCIsXCIpXG5cdFx0fSxcblx0XHRpc011bHRpRW50aXR5U2V0czogaGFzTXVsdGlwbGVFbnRpdHlTZXRzLFxuXHRcdGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGhhc011bHRpVmlzdWFsaXphdGlvbnMsXG5cdFx0dGVtcGxhdGVUeXBlOiBtYW5pZmVzdFdyYXBwZXIuZ2V0VGVtcGxhdGVUeXBlKCksXG5cdFx0dXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0ZmlsdGVySW5pdGlhbExheW91dCxcblx0XHRmaWx0ZXJMYXlvdXQsXG5cdFx0a3BpRGVmaW5pdGlvbnM6IGdldEtQSURlZmluaXRpb25zKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGhpZGVGaWx0ZXJCYXJcblx0fTtcbn07XG5cbmZ1bmN0aW9uIGdldENvbnRlbnRBcmVhSWQoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgdmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdKTogQ29udGVudEFyZWFJRCB8IHVuZGVmaW5lZCB7XG5cdGxldCBzaW5nbGVUYWJsZUlkID0gXCJcIixcblx0XHRzaW5nbGVDaGFydElkID0gXCJcIjtcblx0aWYgKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpIHtcblx0XHRmb3IgKGxldCB2aWV3IG9mIHZpZXdzKSB7XG5cdFx0XHR2aWV3ID0gdmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uO1xuXHRcdFx0aWYgKHZpZXcuY2hhcnRDb250cm9sSWQgJiYgdmlldy50YWJsZUNvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVDaGFydElkID0gdmlldy5jaGFydENvbnRyb2xJZDtcblx0XHRcdFx0c2luZ2xlVGFibGVJZCA9IHZpZXcudGFibGVDb250cm9sSWQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmb3IgKGxldCB2aWV3IG9mIHZpZXdzKSB7XG5cdFx0XHR2aWV3ID0gdmlldyBhcyBTaW5nbGVWaWV3RGVmaW5pdGlvbjtcblx0XHRcdGlmICghc2luZ2xlVGFibGVJZCAmJiAodmlldyBhcyBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uKS50YWJsZUNvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVUYWJsZUlkID0gKHZpZXcgYXMgU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbikudGFibGVDb250cm9sSWQgfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmICghc2luZ2xlQ2hhcnRJZCAmJiAodmlldyBhcyBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uKS5jaGFydENvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVDaGFydElkID0gKHZpZXcgYXMgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbikuY2hhcnRDb250cm9sSWQgfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmIChzaW5nbGVDaGFydElkICYmIHNpbmdsZVRhYmxlSWQpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGlmIChzaW5nbGVUYWJsZUlkIHx8IHNpbmdsZUNoYXJ0SWQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2hhcnRJZDogc2luZ2xlQ2hhcnRJZCxcblx0XHRcdHRhYmxlSWQ6IHNpbmdsZVRhYmxlSWRcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
|
|
@@ -78,10 +78,14 @@ export type ListReportDefinition = {
|
|
|
78
78
|
mainEntityType: string; // entityType> at the start of LR templating
|
|
79
79
|
singleTableId?: string; // only with single Table mode
|
|
80
80
|
singleChartId?: string; // only with single Table mode
|
|
81
|
+
displayMultiVisualizations: boolean;
|
|
82
|
+
iconTabBarId: string;
|
|
83
|
+
stickySubheaderProvider?: string;
|
|
81
84
|
showTabCounts?: boolean; // only with multi Table mode
|
|
82
85
|
headerActions: BaseAction[];
|
|
83
86
|
showPinnableToggle?: boolean;
|
|
84
87
|
filterBar: {
|
|
88
|
+
propertyInfo: any;
|
|
85
89
|
selectionFields: FilterField[];
|
|
86
90
|
hideBasicSearch: boolean;
|
|
87
91
|
};
|
|
@@ -96,6 +100,7 @@ export type ListReportDefinition = {
|
|
|
96
100
|
filterInitialLayout?: string;
|
|
97
101
|
filterLayout?: string;
|
|
98
102
|
kpiDefinitions: KPIDefinition[];
|
|
103
|
+
hideFilterBar: boolean;
|
|
99
104
|
};
|
|
100
105
|
|
|
101
106
|
export type ListReportViewDefinition = SingleViewDefinition | CustomViewDefinition | CombinedViewDefinition;
|
|
@@ -568,13 +573,17 @@ export const convertPage = function(converterContext: ConverterContext): ListRep
|
|
|
568
573
|
singleChartId = oConfig.chartId;
|
|
569
574
|
singleTableId = oConfig.tableId;
|
|
570
575
|
}
|
|
571
|
-
const selectionFields = getSelectionFields(converterContext, lrTableVisualizations);
|
|
572
576
|
|
|
573
|
-
|
|
577
|
+
// Chart has a dependency to filter bar (issue with loading data). Once resolved, the check for chart should be removed here.
|
|
578
|
+
// Until then, hiding filter bar is now allowed if a chart is being used on LR.
|
|
579
|
+
const hideFilterBar = manifestWrapper.isFilterBarHidden() && singleChartId === "";
|
|
580
|
+
const lrFilterProperties = getSelectionFields(converterContext, lrTableVisualizations);
|
|
581
|
+
const selectionFields = lrFilterProperties.selectionFields;
|
|
582
|
+
const propertyInfoFields = lrFilterProperties.sPropertyInfo;
|
|
583
|
+
const hideBasicSearch = getFilterBarhideBasicSearch(lrTableVisualizations, lrChartVisualizations, converterContext);
|
|
574
584
|
const selectionVariant = getSelectionVariant(entityType, converterContext);
|
|
575
|
-
const defaultSemanticDates
|
|
576
|
-
|
|
577
|
-
: {};
|
|
585
|
+
const defaultSemanticDates = useSemanticDateRange ? getDefaultSemanticDates(getManifestFilterFields(entityType, converterContext)) : {};
|
|
586
|
+
|
|
578
587
|
// Sort header actions according to position attributes in manifest
|
|
579
588
|
const headerActions = getHeaderActions(converterContext);
|
|
580
589
|
const hasMultiVisualizations: boolean =
|
|
@@ -583,32 +592,44 @@ export const convertPage = function(converterContext: ConverterContext): ListRep
|
|
|
583
592
|
checkChartFilterBarId(views, filterBarId);
|
|
584
593
|
}
|
|
585
594
|
|
|
586
|
-
const visualizationIds =
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
595
|
+
const visualizationIds = lrTableVisualizations
|
|
596
|
+
.map(visualization => {
|
|
597
|
+
return visualization.annotation.id;
|
|
598
|
+
})
|
|
599
|
+
.concat(
|
|
600
|
+
lrChartVisualizations.map(visualization => {
|
|
601
|
+
return visualization.id;
|
|
602
|
+
})
|
|
603
|
+
);
|
|
592
604
|
const targetControlIds = [
|
|
593
|
-
filterBarId,
|
|
605
|
+
...(hideFilterBar ? [] : [filterBarId]),
|
|
594
606
|
...(manifestWrapper.getVariantManagement() !== VariantManagementType.Control ? visualizationIds : []),
|
|
595
607
|
...(!hasMultiVisualizations && views.length > 1 ? [IconTabBarID()] : [])
|
|
596
608
|
];
|
|
597
609
|
|
|
610
|
+
const iconTabBarId = "fe::TabMultipleMode";
|
|
611
|
+
const displayMultiVisualizations = views.length > 1 && !hasMultiVisualizations;
|
|
612
|
+
const stickySubheaderProvider =
|
|
613
|
+
displayMultiVisualizations && manifestWrapper.getStickyMultiTabHeaderConfiguration() ? iconTabBarId : undefined;
|
|
614
|
+
|
|
598
615
|
return {
|
|
599
616
|
mainEntitySet: sContextPath,
|
|
600
617
|
mainEntityType: sContextPath + "/",
|
|
618
|
+
displayMultiVisualizations,
|
|
619
|
+
iconTabBarId,
|
|
620
|
+
stickySubheaderProvider,
|
|
601
621
|
singleTableId,
|
|
602
622
|
singleChartId,
|
|
603
623
|
showTabCounts,
|
|
604
624
|
headerActions,
|
|
605
625
|
showPinnableToggle: showPinnableToggle,
|
|
606
626
|
filterBar: {
|
|
627
|
+
propertyInfo: propertyInfoFields,
|
|
607
628
|
selectionFields,
|
|
608
629
|
hideBasicSearch
|
|
609
630
|
},
|
|
610
631
|
views: views,
|
|
611
|
-
filterBarId,
|
|
632
|
+
filterBarId: hideFilterBar ? "" : filterBarId,
|
|
612
633
|
filterConditions: {
|
|
613
634
|
selectionVariant: selectionVariant,
|
|
614
635
|
defaultSemanticDates: defaultSemanticDates
|
|
@@ -623,7 +644,8 @@ export const convertPage = function(converterContext: ConverterContext): ListRep
|
|
|
623
644
|
useSemanticDateRange,
|
|
624
645
|
filterInitialLayout,
|
|
625
646
|
filterLayout,
|
|
626
|
-
kpiDefinitions: getKPIDefinitions(converterContext)
|
|
647
|
+
kpiDefinitions: getKPIDefinitions(converterContext),
|
|
648
|
+
hideFilterBar
|
|
627
649
|
};
|
|
628
650
|
};
|
|
629
651
|
|