@sapui5/sap.fe.core 1.99.0 → 1.101.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +6 -4
- package/src/sap/fe/core/.library +2 -3
- package/src/sap/fe/core/AnnotationHelper.js +43 -92
- package/src/sap/fe/core/AnnotationHelper.ts +43 -107
- package/src/sap/fe/core/AppComponent.js +381 -399
- package/src/sap/fe/core/AppComponent.ts +397 -0
- package/src/sap/fe/core/AppStateHandler.js +131 -162
- package/src/sap/fe/core/AppStateHandler.ts +2 -2
- package/src/sap/fe/core/BaseController.js +82 -58
- package/src/sap/fe/core/BaseController.ts +67 -0
- package/src/sap/fe/core/CommonUtils.js +179 -31
- package/src/sap/fe/core/CommonUtils.ts +295 -125
- package/src/sap/fe/core/ExtensionAPI.js +279 -274
- package/src/sap/fe/core/ExtensionAPI.ts +242 -0
- package/src/sap/fe/core/PageController.js +158 -29
- package/src/sap/fe/core/PageController.ts +65 -37
- package/src/sap/fe/core/RouterProxy.js +700 -750
- package/src/sap/fe/core/RouterProxy.ts +47 -31
- package/src/sap/fe/core/Synchronization.js +21 -31
- package/src/sap/fe/core/TemplateComponent.js +193 -118
- package/src/sap/fe/core/TemplateComponent.ts +104 -109
- package/src/sap/fe/core/TemplateModel.js +24 -44
- package/src/sap/fe/core/TemplateModel.ts +3 -3
- package/src/sap/fe/core/TransactionHelper.js +1368 -1369
- package/src/sap/fe/core/TransactionHelper.ts +201 -171
- package/src/sap/fe/core/actions/collaboration/ActivitySync.js +406 -0
- package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +362 -0
- package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +146 -0
- package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +129 -0
- package/src/sap/fe/core/actions/collaboration/Manage.js +264 -0
- package/src/sap/fe/core/actions/collaboration/Manage.ts +246 -0
- package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +100 -0
- package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
- package/src/sap/fe/core/actions/draft.js +324 -220
- package/src/sap/fe/core/actions/draft.ts +209 -133
- package/src/sap/fe/core/actions/messageHandling.js +79 -48
- package/src/sap/fe/core/actions/messageHandling.ts +113 -83
- package/src/sap/fe/core/actions/operations.js +37 -18
- package/src/sap/fe/core/actions/operations.ts +51 -20
- package/src/sap/fe/core/actions/sticky.js +17 -4
- package/src/sap/fe/core/actions/sticky.ts +21 -4
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +60 -0
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +37 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +165 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +178 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +707 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +628 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +436 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +431 -0
- package/src/sap/fe/core/controllerextensions/EditFlow.js +1854 -1669
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +1792 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +79 -54
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +60 -0
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +716 -779
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +785 -0
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +796 -816
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +810 -0
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +1056 -1005
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +1001 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +498 -532
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +13 -12
- package/src/sap/fe/core/controllerextensions/MassEdit.js +141 -169
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +155 -0
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +221 -244
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +215 -0
- package/src/sap/fe/core/controllerextensions/PageReady.js +312 -345
- package/src/sap/fe/core/controllerextensions/PageReady.ts +57 -53
- package/src/sap/fe/core/controllerextensions/Paginator.js +188 -175
- package/src/sap/fe/core/controllerextensions/Paginator.ts +169 -0
- package/src/sap/fe/core/controllerextensions/Placeholder.js +157 -149
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +149 -0
- package/src/sap/fe/core/controllerextensions/Routing.js +144 -125
- package/src/sap/fe/core/controllerextensions/Routing.ts +131 -0
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +7 -6
- package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
- package/src/sap/fe/core/controllerextensions/Share.js +230 -268
- package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
- package/src/sap/fe/core/controllerextensions/SideEffects.js +603 -644
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +68 -68
- package/src/sap/fe/core/controllerextensions/ViewState.js +774 -806
- package/src/sap/fe/core/controllerextensions/ViewState.ts +796 -0
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -2
- package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
- package/src/sap/fe/core/controls/Any.js +28 -0
- package/src/sap/fe/core/controls/Any.ts +30 -0
- package/src/sap/fe/core/controls/CommandExecution.js +92 -68
- package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
- package/src/sap/fe/core/controls/ConditionalWrapper.js +165 -79
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +74 -0
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +366 -0
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +278 -0
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +167 -125
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +116 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +44 -5
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +163 -122
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +155 -0
- package/src/sap/fe/core/controls/FieldWrapper.js +212 -141
- package/src/sap/fe/core/controls/FieldWrapper.ts +104 -0
- package/src/sap/fe/core/controls/FileWrapper.js +313 -0
- package/src/sap/fe/core/controls/FileWrapper.ts +169 -0
- package/src/sap/fe/core/controls/FilterBar.js +197 -159
- package/src/sap/fe/core/controls/FilterBar.ts +148 -0
- package/src/sap/fe/core/controls/FormElementWrapper.js +100 -39
- package/src/sap/fe/core/controls/FormElementWrapper.ts +37 -0
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +37 -42
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +147 -115
- package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +102 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +300 -265
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +252 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +185 -140
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +335 -322
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +37 -42
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +75 -74
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +71 -0
- package/src/sap/fe/core/converters/ConverterContext.js +348 -379
- package/src/sap/fe/core/converters/ConverterContext.ts +19 -16
- package/src/sap/fe/core/converters/ManifestSettings.js +13 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +17 -2
- package/src/sap/fe/core/converters/ManifestWrapper.js +354 -378
- package/src/sap/fe/core/converters/ManifestWrapper.ts +10 -0
- package/src/sap/fe/core/converters/MetaModelConverter.js +6 -4
- package/src/sap/fe/core/converters/MetaModelConverter.ts +5 -2
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +26 -13
- package/src/sap/fe/core/converters/annotations/DataField.ts +40 -17
- package/src/sap/fe/core/converters/controls/Common/Action.js +10 -10
- package/src/sap/fe/core/converters/controls/Common/Action.ts +20 -19
- package/src/sap/fe/core/converters/controls/Common/Chart.js +8 -8
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +12 -11
- package/src/sap/fe/core/converters/controls/Common/Form.js +6 -6
- package/src/sap/fe/core/converters/controls/Common/Form.ts +7 -3
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +2 -2
- package/src/sap/fe/core/converters/controls/Common/Table.js +326 -86
- package/src/sap/fe/core/converters/controls/Common/Table.ts +384 -167
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +120 -55
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +158 -98
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +206 -223
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +263 -287
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +6 -6
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +20 -18
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +5 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +4 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.js +115 -133
- 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/Key.js +42 -57
- package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -4
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +51 -27
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +69 -43
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +42 -25
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +91 -65
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +11 -9
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +8 -8
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +92 -98
- 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/KPIFormatter.js +3 -12
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -2
- package/src/sap/fe/core/formatters/TableFormatter.js +53 -2
- package/src/sap/fe/core/formatters/TableFormatter.ts +51 -0
- package/src/sap/fe/core/formatters/ValueFormatter.js +4 -4
- package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -7
- package/src/sap/fe/core/fpm/Component.js +80 -55
- package/src/sap/fe/core/fpm/Component.ts +43 -0
- package/src/sap/fe/core/helpers/AppStartupHelper.js +323 -309
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +363 -337
- package/src/sap/fe/core/helpers/BindingExpression.js +7 -7
- package/src/sap/fe/core/helpers/BindingExpression.ts +7 -7
- package/src/sap/fe/core/helpers/ClassSupport.js +307 -166
- package/src/sap/fe/core/helpers/ClassSupport.ts +348 -155
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +5 -4
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -5
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
- package/src/sap/fe/core/helpers/MassEditHelper.js +735 -684
- package/src/sap/fe/core/helpers/MassEditHelper.ts +803 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +53 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +46 -0
- package/src/sap/fe/core/helpers/PasteHelper.js +4 -4
- package/src/sap/fe/core/helpers/PasteHelper.ts +4 -3
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +7 -3
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +7 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -7
- package/src/sap/fe/core/helpers/StableIdHelper.ts +0 -4
- package/src/sap/fe/core/jsx-runtime/jsx.js +35 -5
- package/src/sap/fe/core/jsx-runtime/jsx.ts +22 -8
- package/src/sap/fe/core/library.js +425 -451
- package/src/sap/fe/core/library.support.js +22 -33
- 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 +5 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +4 -4
- package/src/sap/fe/core/messagebundle.properties +45 -13
- package/src/sap/fe/core/messagebundle_ar.properties +29 -7
- package/src/sap/fe/core/messagebundle_bg.properties +29 -7
- package/src/sap/fe/core/messagebundle_ca.properties +29 -7
- package/src/sap/fe/core/messagebundle_cs.properties +29 -7
- package/src/sap/fe/core/messagebundle_cy.properties +29 -7
- package/src/sap/fe/core/messagebundle_da.properties +29 -7
- package/src/sap/fe/core/messagebundle_de.properties +29 -7
- package/src/sap/fe/core/messagebundle_el.properties +29 -7
- package/src/sap/fe/core/messagebundle_en.properties +29 -7
- package/src/sap/fe/core/messagebundle_en_GB.properties +29 -7
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +29 -7
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +29 -7
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +29 -7
- package/src/sap/fe/core/messagebundle_es.properties +29 -7
- package/src/sap/fe/core/messagebundle_es_MX.properties +29 -7
- package/src/sap/fe/core/messagebundle_et.properties +29 -7
- package/src/sap/fe/core/messagebundle_fi.properties +30 -8
- package/src/sap/fe/core/messagebundle_fr.properties +31 -9
- package/src/sap/fe/core/messagebundle_fr_CA.properties +31 -9
- package/src/sap/fe/core/messagebundle_hi.properties +29 -7
- package/src/sap/fe/core/messagebundle_hr.properties +29 -7
- package/src/sap/fe/core/messagebundle_hu.properties +29 -7
- package/src/sap/fe/core/messagebundle_id.properties +29 -7
- package/src/sap/fe/core/messagebundle_it.properties +29 -7
- package/src/sap/fe/core/messagebundle_iw.properties +29 -7
- package/src/sap/fe/core/messagebundle_ja.properties +28 -6
- package/src/sap/fe/core/messagebundle_kk.properties +29 -7
- package/src/sap/fe/core/messagebundle_ko.properties +29 -7
- package/src/sap/fe/core/messagebundle_lt.properties +29 -7
- package/src/sap/fe/core/messagebundle_lv.properties +30 -8
- package/src/sap/fe/core/messagebundle_ms.properties +29 -7
- package/src/sap/fe/core/messagebundle_nl.properties +29 -7
- package/src/sap/fe/core/messagebundle_no.properties +29 -7
- package/src/sap/fe/core/messagebundle_pl.properties +29 -7
- package/src/sap/fe/core/messagebundle_pt.properties +30 -8
- package/src/sap/fe/core/messagebundle_pt_PT.properties +29 -7
- package/src/sap/fe/core/messagebundle_ro.properties +29 -7
- package/src/sap/fe/core/messagebundle_ru.properties +29 -7
- package/src/sap/fe/core/messagebundle_sh.properties +29 -7
- package/src/sap/fe/core/messagebundle_sk.properties +29 -7
- package/src/sap/fe/core/messagebundle_sl.properties +29 -7
- package/src/sap/fe/core/messagebundle_sv.properties +30 -8
- package/src/sap/fe/core/messagebundle_th.properties +28 -6
- package/src/sap/fe/core/messagebundle_tr.properties +32 -10
- package/src/sap/fe/core/messagebundle_uk.properties +29 -7
- package/src/sap/fe/core/messagebundle_vi.properties +29 -7
- package/src/sap/fe/core/messagebundle_zh_CN.properties +29 -7
- package/src/sap/fe/core/messagebundle_zh_TW.properties +29 -7
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +47 -73
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +158 -196
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +5 -6
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +70 -96
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +7 -6
- package/src/sap/fe/core/services/NavigationServiceFactory.js +287 -342
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +11 -14
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +70 -105
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +6 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.js +796 -820
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +62 -53
- package/src/sap/fe/core/services/ShellServicesFactory.js +694 -741
- package/src/sap/fe/core/services/ShellServicesFactory.ts +33 -33
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +570 -595
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +23 -4
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +357 -389
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +25 -29
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +43 -5
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +7 -4
- package/src/sap/fe/core/support/CommonHelper.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.ts +1 -4
- package/src/sap/fe/core/support/Diagnostics.js +36 -48
- package/src/sap/fe/core/templating/DataModelPathHelper.js +91 -90
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +126 -123
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +23 -3
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +26 -5
- package/src/sap/fe/core/templating/FilterHelper.js +25 -32
- package/src/sap/fe/core/templating/FilterHelper.ts +36 -35
- package/src/sap/fe/core/templating/PropertyHelper.js +16 -2
- package/src/sap/fe/core/templating/PropertyHelper.ts +31 -24
- package/src/sap/fe/core/templating/UIFormatters.js +150 -44
- package/src/sap/fe/core/templating/UIFormatters.ts +165 -67
- package/src/sap/fe/core/type/Email.js +26 -8
- package/src/sap/fe/core/type/Email.ts +8 -7
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +0 -75
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/m/
|
|
5
|
+
sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText", "sap/m/MessageBox", "sap/m/MessageItem", "sap/m/MessageToast", "sap/m/MessageView", "sap/m/Text", "sap/ui/core/Core", "sap/ui/core/format/DateFormat", "sap/ui/core/IconPool", "sap/ui/core/library", "sap/ui/core/message/Message", "sap/ui/model/Filter", "sap/ui/model/FilterOperator", "sap/ui/model/json/JSONModel"], function (Bar, Button, Dialog, FormattedText, MessageBox, MessageItem, MessageToast, MessageView, Text, Core, DateFormat, IconPool, CoreLib, Message, Filter, FilterOperator, JSONModel) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var MessageType = CoreLib.MessageType;
|
|
@@ -159,13 +159,19 @@ sap.ui.define(["sap/m/MessageToast", "sap/m/MessageItem", "sap/m/MessageView", "
|
|
|
159
159
|
oDialog.close();
|
|
160
160
|
oBackButton.setVisible(false);
|
|
161
161
|
aMessageList = [];
|
|
162
|
+
var oMessageDialogModel = oMessageView.getModel();
|
|
163
|
+
|
|
164
|
+
if (oMessageDialogModel) {
|
|
165
|
+
oMessageDialogModel.setData({});
|
|
166
|
+
}
|
|
167
|
+
|
|
162
168
|
removeUnboundTransitionMessages();
|
|
163
169
|
}
|
|
164
170
|
|
|
165
171
|
function getRetryAfterMessage(oMessage, bMessageDialog) {
|
|
166
172
|
var dNow = new Date();
|
|
167
173
|
var oTechnicalDetails = oMessage.getTechnicalDetails();
|
|
168
|
-
var oResourceBundle =
|
|
174
|
+
var oResourceBundle = Core.getLibraryResourceBundle("sap.fe.core");
|
|
169
175
|
var sRetryAfterMessage;
|
|
170
176
|
|
|
171
177
|
if (oTechnicalDetails && oTechnicalDetails.httpStatus === 503 && oTechnicalDetails.retryAfter) {
|
|
@@ -206,9 +212,58 @@ sap.ui.define(["sap/m/MessageToast", "sap/m/MessageItem", "sap/m/MessageView", "
|
|
|
206
212
|
return sRetryAfterMessage;
|
|
207
213
|
}
|
|
208
214
|
|
|
215
|
+
function prepareMessageViewForDialog(oMessageDialogModel, bStrictHandlingFlow) {
|
|
216
|
+
if (!bStrictHandlingFlow) {
|
|
217
|
+
oMessageTemplate = oMessageTemplate || new MessageItem(undefined, {
|
|
218
|
+
counter: {
|
|
219
|
+
path: "counter"
|
|
220
|
+
},
|
|
221
|
+
title: "{message}",
|
|
222
|
+
subtitle: "{additionalText}",
|
|
223
|
+
longtextUrl: "{descriptionUrl}",
|
|
224
|
+
type: {
|
|
225
|
+
path: "type"
|
|
226
|
+
},
|
|
227
|
+
description: "{= ${" + "description} || ${technicalDetails} ? " + '"<html><body>" + ' + fnFormatDescription() + " + " + fnFormatTechnicalDetails() + '"</body></html>"' + ' : "" }',
|
|
228
|
+
markupDescription: true
|
|
229
|
+
});
|
|
230
|
+
} else {
|
|
231
|
+
oMessageTemplate = new MessageItem({
|
|
232
|
+
title: "{message}",
|
|
233
|
+
type: "Warning",
|
|
234
|
+
longtextUrl: "{descriptionUrl}"
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
oMessageView = oMessageView || new MessageView({
|
|
239
|
+
showDetailsPageHeader: false,
|
|
240
|
+
itemSelect: function () {
|
|
241
|
+
oBackButton.setVisible(true);
|
|
242
|
+
},
|
|
243
|
+
items: {
|
|
244
|
+
path: "/",
|
|
245
|
+
template: oMessageTemplate
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
oBackButton = oBackButton || new Button({
|
|
249
|
+
icon: IconPool.getIconURI("nav-back"),
|
|
250
|
+
visible: false,
|
|
251
|
+
press: function () {
|
|
252
|
+
oMessageView.navigateBack();
|
|
253
|
+
this.setVisible(false);
|
|
254
|
+
}
|
|
255
|
+
}); // Update proper ETag Mismatch error
|
|
256
|
+
|
|
257
|
+
oMessageView.setModel(oMessageDialogModel);
|
|
258
|
+
return {
|
|
259
|
+
oMessageView: oMessageView,
|
|
260
|
+
oBackButton: oBackButton
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
|
|
209
264
|
function showUnboundMessages(aCustomMessages, oContext, bHasEtagMessage, bShowBoundTransition) {
|
|
210
265
|
var aUnboundMessages = this.getMessages();
|
|
211
|
-
var oMessageManager =
|
|
266
|
+
var oMessageManager = Core.getMessageManager();
|
|
212
267
|
var sHighestPriority;
|
|
213
268
|
var sHighestPriorityText;
|
|
214
269
|
var aFilters = [new Filter({
|
|
@@ -234,8 +289,8 @@ sap.ui.define(["sap/m/MessageToast", "sap/m/MessageItem", "sap/m/MessageView", "
|
|
|
234
289
|
|
|
235
290
|
var fnCheckControlIdInDialog = function (aControlIds) {
|
|
236
291
|
var index = Infinity,
|
|
237
|
-
oControl =
|
|
238
|
-
var errorFieldControl =
|
|
292
|
+
oControl = Core.byId(aControlIds[0]);
|
|
293
|
+
var errorFieldControl = Core.byId(aControlIds[0]);
|
|
239
294
|
|
|
240
295
|
while (oControl) {
|
|
241
296
|
var fieldRankinDialog = oControl instanceof Dialog ? errorFieldControl.getParent().findElements(true).indexOf(errorFieldControl) : Infinity;
|
|
@@ -284,7 +339,7 @@ sap.ui.define(["sap/m/MessageToast", "sap/m/MessageItem", "sap/m/MessageView", "
|
|
|
284
339
|
});
|
|
285
340
|
}
|
|
286
341
|
|
|
287
|
-
var oMessageDialogModel = new JSONModel();
|
|
342
|
+
var oMessageDialogModel = oMessageView && oMessageView.getModel() || new JSONModel();
|
|
288
343
|
|
|
289
344
|
if (aUnboundMessages.length === 1 && aUnboundMessages[0].getCode() === "503") {
|
|
290
345
|
showMessageBox = true;
|
|
@@ -316,7 +371,13 @@ sap.ui.define(["sap/m/MessageToast", "sap/m/MessageItem", "sap/m/MessageView", "
|
|
|
316
371
|
// oMessageDialogModel.setData(aMessages);
|
|
317
372
|
// }
|
|
318
373
|
|
|
319
|
-
|
|
374
|
+
var existingMessages = [];
|
|
375
|
+
|
|
376
|
+
if (Array.isArray(oMessageDialogModel.getData())) {
|
|
377
|
+
existingMessages = oMessageDialogModel.getData();
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
oMessageDialogModel.setData(aMessageDataList.concat(existingMessages));
|
|
320
381
|
}
|
|
321
382
|
}
|
|
322
383
|
|
|
@@ -333,44 +394,13 @@ sap.ui.define(["sap/m/MessageToast", "sap/m/MessageItem", "sap/m/MessageView", "
|
|
|
333
394
|
aResolveFunctions = aResolveFunctions || [];
|
|
334
395
|
return new Promise(function (resolve, reject) {
|
|
335
396
|
aResolveFunctions.push(resolve);
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
counter: {
|
|
339
|
-
path: "counter"
|
|
340
|
-
},
|
|
341
|
-
title: "{message}",
|
|
342
|
-
subtitle: "{additionalText}",
|
|
343
|
-
longtextUrl: "{descriptionUrl}",
|
|
344
|
-
type: {
|
|
345
|
-
path: "type"
|
|
346
|
-
},
|
|
347
|
-
description: "{= ${" + "description} || ${technicalDetails} ? " + '"<html><body>" + ' + fnFormatDescription() + " + " + fnFormatTechnicalDetails() + '"</body></html>"' + ' : "" }',
|
|
348
|
-
markupDescription: true
|
|
349
|
-
});
|
|
350
|
-
oMessageView = oMessageView || new MessageView({
|
|
351
|
-
showDetailsPageHeader: false,
|
|
352
|
-
itemSelect: function () {
|
|
353
|
-
oBackButton.setVisible(true);
|
|
354
|
-
},
|
|
355
|
-
items: {
|
|
356
|
-
path: "/",
|
|
357
|
-
template: oMessageTemplate
|
|
358
|
-
}
|
|
359
|
-
});
|
|
360
|
-
oBackButton = oBackButton || new Button({
|
|
361
|
-
icon: IconPool.getIconURI("nav-back"),
|
|
362
|
-
visible: false,
|
|
363
|
-
press: function () {
|
|
364
|
-
oMessageView.navigateBack();
|
|
365
|
-
this.setVisible(false);
|
|
366
|
-
}
|
|
367
|
-
}); // Update proper ETag Mismatch error
|
|
368
|
-
|
|
397
|
+
Core.getLibraryResourceBundle("sap.fe.core", true).then(function (oResourceBundle) {
|
|
398
|
+
var bStrictHandlingFlow = false;
|
|
369
399
|
var bHasEtagMessage = fnModifyETagMessagesOnly(oMessageManager, oResourceBundle);
|
|
370
|
-
|
|
400
|
+
var oMessageObject = prepareMessageViewForDialog(oMessageDialogModel, bStrictHandlingFlow);
|
|
371
401
|
oDialog = oDialog || new Dialog({
|
|
372
402
|
resizable: true,
|
|
373
|
-
content: oMessageView,
|
|
403
|
+
content: oMessageObject.oMessageView,
|
|
374
404
|
endButton: new Button({
|
|
375
405
|
press: function () {
|
|
376
406
|
dialogCloseHandler(); // also remove bound transition messages if we were showing them
|
|
@@ -464,7 +494,7 @@ sap.ui.define(["sap/m/MessageToast", "sap/m/MessageItem", "sap/m/MessageView", "
|
|
|
464
494
|
}
|
|
465
495
|
|
|
466
496
|
function getTranslatedTextForMessageDialog(sHighestPriority) {
|
|
467
|
-
var oResourceBundle =
|
|
497
|
+
var oResourceBundle = Core.getLibraryResourceBundle("sap.fe.core");
|
|
468
498
|
|
|
469
499
|
switch (sHighestPriority) {
|
|
470
500
|
case "Error":
|
|
@@ -496,10 +526,10 @@ sap.ui.define(["sap/m/MessageToast", "sap/m/MessageItem", "sap/m/MessageView", "
|
|
|
496
526
|
var bBoundMessages = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
497
527
|
var bTransitionOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
498
528
|
var i;
|
|
499
|
-
var oMessageManager =
|
|
529
|
+
var oMessageManager = Core.getMessageManager(),
|
|
500
530
|
oMessageModel = oMessageManager.getMessageModel(),
|
|
501
531
|
aMessages = oMessageModel.getObject("/"),
|
|
502
|
-
oResourceBundle =
|
|
532
|
+
oResourceBundle = Core.getLibraryResourceBundle("sap.fe.core"),
|
|
503
533
|
aTransitionMessages = [];
|
|
504
534
|
|
|
505
535
|
for (i = 0; i < aMessages.length; i++) {
|
|
@@ -521,7 +551,7 @@ sap.ui.define(["sap/m/MessageToast", "sap/m/MessageItem", "sap/m/MessageView", "
|
|
|
521
551
|
var aMessagesToBeDeleted = getMessages(bBoundMessages, true);
|
|
522
552
|
|
|
523
553
|
if (aMessagesToBeDeleted.length > 0) {
|
|
524
|
-
|
|
554
|
+
Core.getMessageManager().removeMessages(aMessagesToBeDeleted);
|
|
525
555
|
}
|
|
526
556
|
}
|
|
527
557
|
/**
|
|
@@ -541,8 +571,9 @@ sap.ui.define(["sap/m/MessageToast", "sap/m/MessageItem", "sap/m/MessageView", "
|
|
|
541
571
|
removeUnboundTransitionMessages: removeUnboundTransitionMessages,
|
|
542
572
|
removeBoundTransitionMessages: removeBoundTransitionMessages,
|
|
543
573
|
modifyETagMessagesOnly: fnModifyETagMessagesOnly,
|
|
544
|
-
getRetryAfterMessage: getRetryAfterMessage
|
|
574
|
+
getRetryAfterMessage: getRetryAfterMessage,
|
|
575
|
+
prepareMessageViewForDialog: prepareMessageViewForDialog
|
|
545
576
|
};
|
|
546
577
|
return messageHandling;
|
|
547
578
|
}, false);
|
|
548
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1lc3NhZ2VIYW5kbGluZy50cyJdLCJuYW1lcyI6WyJNZXNzYWdlVHlwZSIsIkNvcmVMaWIiLCJhTWVzc2FnZUxpc3QiLCJhTWVzc2FnZURhdGFMaXN0IiwiYVJlc29sdmVGdW5jdGlvbnMiLCJvRGlhbG9nIiwib0JhY2tCdXR0b24iLCJvTWVzc2FnZVRlbXBsYXRlIiwib01lc3NhZ2VWaWV3IiwiZm5Gb3JtYXRUZWNobmljYWxEZXRhaWxzIiwic1ByZXZpb3VzR3JvdXBOYW1lIiwiaW5zZXJ0RGV0YWlsIiwib1Byb3BlcnR5IiwicHJvcGVydHkiLCJzdWJzdHIiLCJNYXRoIiwibWF4IiwibGFzdEluZGV4T2YiLCJpbnNlcnRHcm91cE5hbWUiLCJzSFRNTCIsImdyb3VwTmFtZSIsImdldFBhdGhzIiwic1REIiwiZm9yRWFjaCIsImZuRm9ybWF0RGVzY3JpcHRpb24iLCJmbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHkiLCJhTWVzc2FnZXMiLCJzTWVzc2FnZVByaW9yaXR5IiwiTm9uZSIsImlMZW5ndGgiLCJsZW5ndGgiLCJvTWVzc2FnZUNvdW50IiwiRXJyb3IiLCJXYXJuaW5nIiwiU3VjY2VzcyIsIkluZm9ybWF0aW9uIiwiaSIsImdldFR5cGUiLCJmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHkiLCJvTWVzc2FnZU1hbmFnZXIiLCJvUmVzb3VyY2VCdW5kbGUiLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXRPYmplY3QiLCJiTWVzc2FnZXNNb2RpZmllZCIsInNFdGFnTWVzc2FnZSIsIm9NZXNzYWdlIiwib1RlY2huaWNhbERldGFpbHMiLCJnZXRUZWNobmljYWxEZXRhaWxzIiwiaHR0cFN0YXR1cyIsImdldFRleHQiLCJyZW1vdmVNZXNzYWdlcyIsInNldE1lc3NhZ2UiLCJ0YXJnZXQiLCJhZGRNZXNzYWdlcyIsImRpYWxvZ0Nsb3NlSGFuZGxlciIsImNsb3NlIiwic2V0VmlzaWJsZSIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJnZXRSZXRyeUFmdGVyTWVzc2FnZSIsImJNZXNzYWdlRGlhbG9nIiwiZE5vdyIsIkRhdGUiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJzUmV0cnlBZnRlck1lc3NhZ2UiLCJyZXRyeUFmdGVyIiwiZFJldHJ5QWZ0ZXIiLCJvRGF0ZUZvcm1hdCIsImdldEZ1bGxZZWFyIiwiRGF0ZUZvcm1hdCIsImdldERhdGVUaW1lSW5zdGFuY2UiLCJwYXR0ZXJuIiwiZm9ybWF0IiwiZ2V0TW9udGgiLCJnZXREYXRlIiwic2hvd1VuYm91bmRNZXNzYWdlcyIsImFDdXN0b21NZXNzYWdlcyIsIm9Db250ZXh0IiwiYkhhc0V0YWdNZXNzYWdlIiwiYlNob3dCb3VuZFRyYW5zaXRpb24iLCJhVW5ib3VuZE1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXMiLCJnZXRNZXNzYWdlTWFuYWdlciIsInNIaWdoZXN0UHJpb3JpdHkiLCJzSGlnaGVzdFByaW9yaXR5VGV4dCIsImFGaWx0ZXJzIiwiRmlsdGVyIiwicGF0aCIsIm9wZXJhdG9yIiwiRmlsdGVyT3BlcmF0b3IiLCJORSIsInZhbHVlMSIsInNob3dNZXNzYWdlRGlhbG9nIiwic2hvd01lc3NhZ2VCb3giLCJjb25jYXQiLCJwdXNoIiwiRVEiLCJmbkNoZWNrQ29udHJvbElkSW5EaWFsb2ciLCJhQ29udHJvbElkcyIsImluZGV4IiwiSW5maW5pdHkiLCJvQ29udHJvbCIsImJ5SWQiLCJlcnJvckZpZWxkQ29udHJvbCIsImZpZWxkUmFua2luRGlhbG9nIiwiRGlhbG9nIiwiZ2V0UGFyZW50IiwiZmluZEVsZW1lbnRzIiwiaW5kZXhPZiIsImZvY3VzIiwidGVzdCIsImNhc2VTZW5zaXRpdmUiLCJtZXNzYWdlQ29kZSIsImNvZGUiLCJNZXNzYWdlIiwibWVzc2FnZSIsInRleHQiLCJ0eXBlIiwicGVyc2lzdGVudCIsIm9NZXNzYWdlRGlhbG9nTW9kZWwiLCJKU09OTW9kZWwiLCJnZXRDb2RlIiwib0xpc3RCaW5kaW5nIiwiYmluZExpc3QiLCJ1bmRlZmluZWQiLCJhQ3VycmVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwidGVjaG5pY2FsRGV0YWlscyIsIm9yaWdpbmFsTWVzc2FnZSIsInNldERhdGEiLCJQcm9taXNlIiwicmVzb2x2ZSIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJyZWplY3QiLCJ0aGVuIiwiTWVzc2FnZUl0ZW0iLCJjb3VudGVyIiwidGl0bGUiLCJzdWJ0aXRsZSIsImxvbmd0ZXh0VXJsIiwiZGVzY3JpcHRpb24iLCJtYXJrdXBEZXNjcmlwdGlvbiIsIk1lc3NhZ2VWaWV3Iiwic2hvd0RldGFpbHNQYWdlSGVhZGVyIiwiaXRlbVNlbGVjdCIsIml0ZW1zIiwidGVtcGxhdGUiLCJCdXR0b24iLCJpY29uIiwiSWNvblBvb2wiLCJnZXRJY29uVVJJIiwidmlzaWJsZSIsInByZXNzIiwibmF2aWdhdGVCYWNrIiwic2V0TW9kZWwiLCJyZXNpemFibGUiLCJjb250ZW50IiwiZW5kQnV0dG9uIiwicmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJjdXN0b21IZWFkZXIiLCJCYXIiLCJjb250ZW50TWlkZGxlIiwiVGV4dCIsImNvbnRlbnRMZWZ0IiwiY29udGVudFdpZHRoIiwiY29udGVudEhlaWdodCIsInZlcnRpY2FsU2Nyb2xsaW5nIiwiYWZ0ZXJDbG9zZSIsImNhbGwiLCJyZXF1aXJlIiwiQnV0dG9uVHlwZSIsInNldEJlZ2luQnV0dG9uIiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaCIsIkVtcGhhc2l6ZWQiLCJkZXN0cm95QmVnaW5CdXR0b24iLCJnZXRJdGVtcyIsImdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyIsInNldFN0YXRlIiwiZ2V0Q3VzdG9tSGVhZGVyIiwiZ2V0Q29udGVudE1pZGRsZSIsInNldFRleHQiLCJvcGVuIiwiY2F0Y2giLCJmb3JtYXR0ZWRUZXh0U3RyaW5nIiwicmV0cnlBZnRlck1lc3NhZ2UiLCJnZXRNZXNzYWdlIiwiZm9ybWF0dGVkVGV4dCIsIkZvcm1hdHRlZFRleHQiLCJodG1sVGV4dCIsIk1lc3NhZ2VCb3giLCJlcnJvciIsIm9uQ2xvc2UiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJiQm91bmRNZXNzYWdlcyIsImJUcmFuc2l0aW9uT25seSIsIm9NZXNzYWdlTW9kZWwiLCJhVHJhbnNpdGlvbk1lc3NhZ2VzIiwiYU1lc3NhZ2VzVG9CZURlbGV0ZWQiLCJtZXNzYWdlSGFuZGxpbmciLCJtb2RpZnlFVGFnTWVzc2FnZXNPbmx5Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7O0FBa0JBLE1BQU1BLFdBQVcsR0FBR0MsT0FBTyxDQUFDRCxXQUE1QjtBQUNBLE1BQUlFLFlBQW1CLEdBQUcsRUFBMUI7QUFDQSxNQUFJQyxnQkFBdUIsR0FBRyxFQUE5QjtBQUNBLE1BQUlDLGlCQUF3QixHQUFHLEVBQS9CO0FBQ0EsTUFBSUMsT0FBSjtBQUNBLE1BQUlDLFdBQUo7QUFDQSxNQUFJQyxnQkFBSjtBQUNBLE1BQUlDLFlBQUo7O0FBZ0JBLFdBQVNDLHdCQUFULEdBQW9DO0FBQ25DLFFBQUlDLGtCQUFKLENBRG1DLENBR25DOztBQUNBLGFBQVNDLFlBQVQsQ0FBc0JDLFNBQXRCLEVBQXNDO0FBQ3JDLGFBQU9BLFNBQVMsQ0FBQ0MsUUFBVixHQUNKLFNBQ0FELFNBQVMsQ0FBQ0MsUUFEVixHQUVBLFdBRkEsR0FHQUQsU0FBUyxDQUFDQyxRQUFWLENBQW1CQyxNQUFuQixDQUEwQkMsSUFBSSxDQUFDQyxHQUFMLENBQVNKLFNBQVMsQ0FBQ0MsUUFBVixDQUFtQkksV0FBbkIsQ0FBK0IsR0FBL0IsQ0FBVCxFQUE4Q0wsU0FBUyxDQUFDQyxRQUFWLENBQW1CSSxXQUFuQixDQUErQixHQUEvQixDQUE5QyxJQUFxRixDQUEvRyxDQUhBLEdBSUEsU0FKQSxHQUtBLElBTEEsR0FNQUwsU0FBUyxDQUFDQyxRQU5WLEdBT0Esb0JBUkksR0FTSixFQVRIO0FBVUEsS0Fma0MsQ0FnQm5DOzs7QUFDQSxhQUFTSyxlQUFULENBQXlC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Q0E7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsTUFBTUMsZUFBb0MsR0FBRztBQUM1Q3pILElBQUFBLFdBQVcsRUFBRUEsV0FEK0I7QUFFNUNOLElBQUFBLG1CQUFtQixFQUFFQSxtQkFGdUI7QUFHNUNwQixJQUFBQSwrQkFBK0IsRUFBRUEsK0JBSFc7QUFJNUN3RyxJQUFBQSw2QkFBNkIsRUFBRUEsNkJBSmE7QUFLNUM0QyxJQUFBQSxzQkFBc0IsRUFBRXZLLHdCQUxvQjtBQU01Q29CLElBQUFBLG9CQUFvQixFQUFFQTtBQU5zQixHQUE3QztTQVNla0osZSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgTWVzc2FnZUl0ZW0gZnJvbSBcInNhcC9tL01lc3NhZ2VJdGVtXCI7XG5pbXBvcnQgTWVzc2FnZVZpZXcgZnJvbSBcInNhcC9tL01lc3NhZ2VWaWV3XCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBDb3JlTGliIGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IEljb25Qb29sIGZyb20gXCJzYXAvdWkvY29yZS9JY29uUG9vbFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgRGF0ZUZvcm1hdCBmcm9tIFwic2FwL3VpL2NvcmUvZm9ybWF0L0RhdGVGb3JtYXRcIjtcbmltcG9ydCBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9tZGMvQ29udHJvbFwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBCYXIgZnJvbSBcInNhcC9tL0JhclwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBGb3JtYXR0ZWRUZXh0IGZyb20gXCJzYXAvbS9Gb3JtYXR0ZWRUZXh0XCI7XG5cbmNvbnN0IE1lc3NhZ2VUeXBlID0gQ29yZUxpYi5NZXNzYWdlVHlwZTtcbmxldCBhTWVzc2FnZUxpc3Q6IGFueVtdID0gW107XG5sZXQgYU1lc3NhZ2VEYXRhTGlzdDogYW55W10gPSBbXTtcbmxldCBhUmVzb2x2ZUZ1bmN0aW9uczogYW55W10gPSBbXTtcbmxldCBvRGlhbG9nOiBEaWFsb2c7XG5sZXQgb0JhY2tCdXR0b246IEJ1dHRvbjtcbmxldCBvTWVzc2FnZVRlbXBsYXRlOiBNZXNzYWdlSXRlbTtcbmxldCBvTWVzc2FnZVZpZXc6IE1lc3NhZ2VWaWV3O1xuXG5leHBvcnQgdHlwZSBtZXNzYWdlSGFuZGxpbmdUeXBlID0ge1xuXHRnZXRNZXNzYWdlczogKGJCb3VuZE1lc3NhZ2VzPzogYW55LCBiVHJhbnNpdGlvbk9ubHk/OiBhbnkpID0+IGFueVtdO1xuXHRzaG93VW5ib3VuZE1lc3NhZ2VzOiAoXG5cdFx0YUN1c3RvbU1lc3NhZ2VzPzogYW55W10sXG5cdFx0b0NvbnRleHQ/OiBhbnksXG5cdFx0Ykhhc0V0YWdNZXNzYWdlPzogYm9vbGVhbixcblx0XHRiU2hvd0JvdW5kVHJhbnNpdGlvbj86IGJvb2xlYW5cblx0KSA9PiBQcm9taXNlPGFueT47XG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6ICgpID0+IHZvaWQ7XG5cdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiAoKSA9PiB2b2lkO1xuXHRtb2RpZnlFVGFnTWVzc2FnZXNPbmx5OiAob01lc3NhZ2VNYW5hZ2VyOiBhbnksIG9SZXNvdXJjZUJ1bmRsZTogYW55KSA9PiBib29sZWFuO1xuXHRnZXRSZXRyeUFmdGVyTWVzc2FnZTogKG9NZXNzYWdlOiBhbnksIGJNZXNzYWdlRGlhbG9nPzogYW55KSA9PiBhbnk7XG59O1xuXG5mdW5jdGlvbiBmbkZvcm1hdFRlY2huaWNhbERldGFpbHMoKSB7XG5cdGxldCBzUHJldmlvdXNHcm91cE5hbWU6IHN0cmluZztcblxuXHQvLyBJbnNlcnQgdGVjaG5pY2FsIGRldGFpbCBpZiBpdCBleGlzdHNcblx0ZnVuY3Rpb24gaW5zZXJ0RGV0YWlsKG9Qcm9wZXJ0eTogYW55KSB7XG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eS5wcm9wZXJ0eVxuXHRcdFx0PyBcIiggJHtcIiArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5ICtcblx0XHRcdFx0XHQnfSA/IChcIjxwPicgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eS5zdWJzdHIoTWF0aC5tYXgob1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiL1wiKSwgb1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiLlwiKSkgKyAxKSArXG5cdFx0XHRcdFx0JyA6IFwiICsgJyArXG5cdFx0XHRcdFx0XCIke1wiICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkgK1xuXHRcdFx0XHRcdCd9ICsgXCI8L3A+XCIpIDogXCJcIiApJ1xuXHRcdFx0OiBcIlwiO1xuXHR9XG5cdC8vIEluc2VydCBncm91cG5hbWUgaWYgaXQgZXhpc3RzXG5cdGZ1bmN0aW9uIGluc2VydEdyb3VwTmFtZShvUHJvcGVydHk6IGFueSkge1xuXHRcdGxldCBzSFRNTCA9IFwiXCI7XG5cdFx0aWYgKG9Qcm9wZXJ0eS5ncm91cE5hbWUgJiYgb1Byb3BlcnR5LnByb3BlcnR5ICYmIG9Qcm9wZXJ0eS5ncm91cE5hbWUgIT09IHNQcmV2aW91c0dyb3VwTmFtZSkge1xuXHRcdFx0c0hUTUwgKz0gXCIoICR7XCIgKyBvUHJvcGVydHkucHJvcGVydHkgKyAnfSA/IFwiPGJyPjxoMz4nICsgb1Byb3BlcnR5Lmdyb3VwTmFtZSArICc8L2gzPlwiIDogXCJcIiApICsgJztcblx0XHRcdHNQcmV2aW91c0dyb3VwTmFtZSA9IG9Qcm9wZXJ0eS5ncm91cE5hbWU7XG5cdFx0fVxuXHRcdHJldHVybiBzSFRNTDtcblx0fVxuXG5cdC8vIExpc3Qgb2YgdGVjaG5pY2FsIGRldGFpbHMgdG8gYmUgc2hvd25cblx0ZnVuY3Rpb24gZ2V0UGF0aHMoKSB7XG5cdFx0Y29uc3Qgc1REID0gXCJ0ZWNobmljYWxEZXRhaWxzXCI7IC8vIG5hbWUgb2YgcHJvcGVydHkgaW4gbWVzc2FnZSBtb2RlbCBkYXRhIGZvciB0ZWNobmljYWwgZGV0YWlsc1xuXHRcdHJldHVybiBbXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvc3RhdHVzXCIgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJcIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9zdGF0dXNUZXh0XCIgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJBcHBsaWNhdGlvblwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9Db21wb25lbnRJZFwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiQXBwbGljYXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZUlkXCIgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJBcHBsaWNhdGlvblwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9TZXJ2aWNlUmVwb3NpdG9yeVwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiQXBwbGljYXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZVZlcnNpb25cIiB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkVycm9yUmVzb2x1dGlvblwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vQW5hbHlzaXNcIiB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkVycm9yUmVzb2x1dGlvblwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vTm90ZVwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9EZXRhaWxlZE5vdGVcIiB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkVycm9yUmVzb2x1dGlvblwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL0BTQVBfX2NvbW1vbi5FeGNlcHRpb25DYXRlZ29yeVwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvZXJyb3IvQFNBUF9fY29tbW9uLlRpbWVTdGFtcFwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvZXJyb3IvQFNBUF9fY29tbW9uLlRyYW5zYWN0aW9uSWRcIiB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIk1lc3NhZ2VzXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvZXJyb3IvY29kZVwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiTWVzc2FnZXNcIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9lcnJvci9tZXNzYWdlXCIgfVxuXHRcdF07XG5cdH1cblxuXHRsZXQgc0hUTUwgPSBcIk9iamVjdC5rZXlzKFwiICsgXCIke3RlY2huaWNhbERldGFpbHN9XCIgKyAnKS5sZW5ndGggPiAwID8gXCI8aDI+VGVjaG5pY2FsIERldGFpbHM8L2gyPlwiIDogXCJcIiAnO1xuXHRnZXRQYXRocygpLmZvckVhY2goZnVuY3Rpb24ob1Byb3BlcnR5OiB7IGdyb3VwTmFtZTogc3RyaW5nOyBwcm9wZXJ0eTogc3RyaW5nIH0pIHtcblx0XHRzSFRNTCA9IHNIVE1MICsgaW5zZXJ0R3JvdXBOYW1lKG9Qcm9wZXJ0eSkgKyBcIlwiICsgaW5zZXJ0RGV0YWlsKG9Qcm9wZXJ0eSkgKyBcIiArIFwiO1xuXHR9KTtcblx0cmV0dXJuIHNIVE1MO1xufVxuZnVuY3Rpb24gZm5Gb3JtYXREZXNjcmlwdGlvbigpIHtcblx0Y29uc3Qgc0hUTUwgPSBcIigke1wiICsgJ2Rlc2NyaXB0aW9ufSA/IChcIjxoMj5EZXNjcmlwdGlvbjwvaDI+XCIgKyAkeycgKyAnZGVzY3JpcHRpb259KSA6IFwiXCIpJztcblx0cmV0dXJuIHNIVE1MO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBoaWdoZXN0IHByaW9yaXR5IG1lc3NhZ2UgdHlwZShFcnJvci9XYXJuaW5nL1N1Y2Nlc3MvSW5mb3JtYXRpb24pIGZyb20gdGhlIGF2YWlsYWJsZSBtZXNzYWdlcy5cblxuICogQGZ1bmN0aW9uXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLm1lc3NhZ2VIYW5kbGluZy5mbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHlcbiAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5hY3Rpb25zLm1lc3NhZ2VIYW5kbGluZ1xuICogQHBhcmFtIHtBcnJheX0gW2FNZXNzYWdlc10gTWVzc2FnZXMgbGlzdFxuICogQHJldHVybnMge3N0cmluZ30gSGlnaGVzdCBwcmlvcml0eSBtZXNzYWdlIGZyb20gdGhlIGF2YWlsYWJsZSBtZXNzYWdlc1xuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBmbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHkoYU1lc3NhZ2VzOiBhbnlbXSkge1xuXHRsZXQgc01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdGNvbnN0IGlMZW5ndGggPSBhTWVzc2FnZXMubGVuZ3RoO1xuXHRjb25zdCBvTWVzc2FnZUNvdW50OiBhbnkgPSB7IEVycm9yOiAwLCBXYXJuaW5nOiAwLCBTdWNjZXNzOiAwLCBJbmZvcm1hdGlvbjogMCB9O1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgaUxlbmd0aDsgaSsrKSB7XG5cdFx0KytvTWVzc2FnZUNvdW50W2FNZXNzYWdlc1tpXS5nZXRUeXBlKCldO1xuXHR9XG5cdGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkVycm9yXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5XYXJuaW5nXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLlN1Y2Nlc3NdID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5TdWNjZXNzO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuSW5mb3JtYXRpb25dID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbjtcblx0fVxuXHRyZXR1cm4gc01lc3NhZ2VQcmlvcml0eTtcbn1cbi8vIGZ1bmN0aW9uIHdoaWNoIG1vZGlmeSBlLVRhZyBtZXNzYWdlcyBvbmx5LlxuLy8gcmV0dXJucyA6IHRydWUsIGlmIGFueSBlLVRhZyBtZXNzYWdlIGlzIG1vZGlmaWVkLCBvdGhlcndpc2UgZmFsc2UuXG5mdW5jdGlvbiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHkob01lc3NhZ2VNYW5hZ2VyOiBhbnksIG9SZXNvdXJjZUJ1bmRsZTogYW55KSB7XG5cdGNvbnN0IGFNZXNzYWdlcyA9IG9NZXNzYWdlTWFuYWdlci5nZXRNZXNzYWdlTW9kZWwoKS5nZXRPYmplY3QoXCIvXCIpO1xuXHRsZXQgYk1lc3NhZ2VzTW9kaWZpZWQgPSBmYWxzZTtcblx0bGV0IHNFdGFnTWVzc2FnZSA9IFwiXCI7XG5cdGFNZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uKG9NZXNzYWdlOiBhbnksIGk6IGFueSkge1xuXHRcdGNvbnN0IG9UZWNobmljYWxEZXRhaWxzID0gb01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpO1xuXHRcdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA0MTIpIHtcblx0XHRcdHNFdGFnTWVzc2FnZSA9IHNFdGFnTWVzc2FnZSB8fCBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX1RFQ0hOSUNBTF9JU1NVRVNcIik7XG5cdFx0XHRvTWVzc2FnZU1hbmFnZXIucmVtb3ZlTWVzc2FnZXMoYU1lc3NhZ2VzW2ldKTtcblx0XHRcdG9NZXNzYWdlLnNldE1lc3NhZ2Uoc0V0YWdNZXNzYWdlKTtcblx0XHRcdG9NZXNzYWdlLnRhcmdldCA9IFwiXCI7XG5cdFx0XHRvTWVzc2FnZU1hbmFnZXIuYWRkTWVzc2FnZXMob01lc3NhZ2UpO1xuXHRcdFx0Yk1lc3NhZ2VzTW9kaWZpZWQgPSB0cnVlO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBiTWVzc2FnZXNNb2RpZmllZDtcbn1cbi8vIERpYWxvZyBjbG9zZSBIYW5kbGluZ1xuZnVuY3Rpb24gZGlhbG9nQ2xvc2VIYW5kbGVyKCkge1xuXHRvRGlhbG9nLmNsb3NlKCk7XG5cdG9CYWNrQnV0dG9uLnNldFZpc2libGUoZmFsc2UpO1xuXHRhTWVzc2FnZUxpc3QgPSBbXTtcblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xufVxuZnVuY3Rpb24gZ2V0UmV0cnlBZnRlck1lc3NhZ2Uob01lc3NhZ2U6IGFueSwgYk1lc3NhZ2VEaWFsb2c6IGFueSkge1xuXHRjb25zdCBkTm93ID0gbmV3IERhdGUoKTtcblx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCk7XG5cdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IHNhcC51aS5nZXRDb3JlKCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdGxldCBzUmV0cnlBZnRlck1lc3NhZ2U7XG5cdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA1MDMgJiYgb1RlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcikge1xuXHRcdGNvbnN0IGRSZXRyeUFmdGVyID0gb1RlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcjtcblx0XHRsZXQgb0RhdGVGb3JtYXQ7XG5cdFx0aWYgKGROb3cuZ2V0RnVsbFllYXIoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0RnVsbFllYXIoKSkge1xuXHRcdFx0Ly9kaWZmZXJlbnQgeWVhcnNcblx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0cGF0dGVybjogXCJNTU1NIGRkLCB5eXl5ICdhdCcgaGg6bW0gYVwiXG5cdFx0XHR9KTtcblx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUlwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdH0gZWxzZSBpZiAoZE5vdy5nZXRGdWxsWWVhcigpID09IGRSZXRyeUFmdGVyLmdldEZ1bGxZZWFyKCkpIHtcblx0XHRcdC8vc2FtZSB5ZWFyXG5cdFx0XHRpZiAoYk1lc3NhZ2VEaWFsb2cpIHtcblx0XHRcdFx0Ly9sZXNzIHRoYW4gMiBtaW5cblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID1cblx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfVElUTEVcIikgK1xuXHRcdFx0XHRcdFwiIFwiICtcblx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfREVTQ1wiKTtcblx0XHRcdH0gZWxzZSBpZiAoZE5vdy5nZXRNb250aCgpICE9PSBkUmV0cnlBZnRlci5nZXRNb250aCgpIHx8IGROb3cuZ2V0RGF0ZSgpICE9PSBkUmV0cnlBZnRlci5nZXREYXRlKCkpIHtcblx0XHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRcdHBhdHRlcm46IFwiTU1NTSBkZCAnYXQnIGhoOm1tIGFcIlxuXHRcdFx0XHR9KTsgLy9kaWZmZXJlbnQgbW9udGhzIG9yIGRpZmZlcmVudCBkYXlzIG9mIHNhbWUgbW9udGhcblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvL3NhbWUgZGF5XG5cdFx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBcImhoOm1tIGFcIlxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SX0RBWVwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA1MDMgJiYgIW9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIpIHtcblx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JfTk9fUkVUUllfQUZURVJcIik7XG5cdH1cblx0cmV0dXJuIHNSZXRyeUFmdGVyTWVzc2FnZTtcbn1cbmZ1bmN0aW9uIHNob3dVbmJvdW5kTWVzc2FnZXMoXG5cdHRoaXM6IG1lc3NhZ2VIYW5kbGluZ1R5cGUsXG5cdGFDdXN0b21NZXNzYWdlcz86IGFueVtdLFxuXHRvQ29udGV4dD86IGFueSxcblx0Ykhhc0V0YWdNZXNzYWdlPzogYm9vbGVhbixcblx0YlNob3dCb3VuZFRyYW5zaXRpb24/OiBib29sZWFuXG4pIHtcblx0bGV0IGFVbmJvdW5kTWVzc2FnZXMgPSB0aGlzLmdldE1lc3NhZ2VzKCk7XG5cdGNvbnN0IG9NZXNzYWdlTWFuYWdlciA9IChzYXAudWkuZ2V0Q29yZSgpIGFzIGFueSkuZ2V0TWVzc2FnZU1hbmFnZXIoKTtcblx0bGV0IHNIaWdoZXN0UHJpb3JpdHk7XG5cdGxldCBzSGlnaGVzdFByaW9yaXR5VGV4dDtcblx0Y29uc3QgYUZpbHRlcnMgPSBbXG5cdFx0bmV3IEZpbHRlcih7IHBhdGg6IFwiY29kZVwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuTkUsIHZhbHVlMTogbnVsbCB9KSxcblx0XHRuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5ORSwgdmFsdWUxOiBmYWxzZSB9KVxuXHRdO1xuXHRsZXQgc2hvd01lc3NhZ2VEaWFsb2cgPSBmYWxzZSxcblx0XHRzaG93TWVzc2FnZUJveCA9IGZhbHNlO1xuXG5cdGlmIChiU2hvd0JvdW5kVHJhbnNpdGlvbikge1xuXHRcdGFVbmJvdW5kTWVzc2FnZXMgPSBhVW5ib3VuZE1lc3NhZ2VzLmNvbmNhdChnZXRNZXNzYWdlcyh0cnVlLCB0cnVlKSk7XG5cdFx0Ly8gd2Ugb25seSB3YW50IHRvIHNob3cgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBub3QgYm91bmQgc3RhdGUgbWVzc2FnZXMgaGVuY2UgYWRkIGEgZmlsdGVyIGZvciB0aGUgc2FtZVxuXHRcdGFGaWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7IHBhdGg6IFwicGVyc2lzdGVudFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsIHZhbHVlMTogdHJ1ZSB9KSk7XG5cdFx0Y29uc3QgZm5DaGVja0NvbnRyb2xJZEluRGlhbG9nID0gZnVuY3Rpb24oYUNvbnRyb2xJZHM6IGFueSkge1xuXHRcdFx0bGV0IGluZGV4ID0gSW5maW5pdHksXG5cdFx0XHRcdG9Db250cm9sID0gc2FwLnVpLmdldENvcmUoKS5ieUlkKGFDb250cm9sSWRzWzBdKSBhcyBNYW5hZ2VkT2JqZWN0O1xuXHRcdFx0Y29uc3QgZXJyb3JGaWVsZENvbnRyb2wgPSBzYXAudWkuZ2V0Q29yZSgpLmJ5SWQoYUNvbnRyb2xJZHNbMF0pIGFzIENvbnRyb2w7XG5cdFx0XHR3aGlsZSAob0NvbnRyb2wpIHtcblx0XHRcdFx0Y29uc3QgZmllbGRSYW5raW5EaWFsb2cgPVxuXHRcdFx0XHRcdG9Db250cm9sIGluc3RhbmNlb2YgRGlhbG9nXG5cdFx0XHRcdFx0XHQ/IChlcnJvckZpZWxkQ29udHJvbC5nZXRQYXJlbnQoKSBhcyBhbnkpLmZpbmRFbGVtZW50cyh0cnVlKS5pbmRleE9mKGVycm9yRmllbGRDb250cm9sKVxuXHRcdFx0XHRcdFx0OiBJbmZpbml0eTtcblx0XHRcdFx0aWYgKG9Db250cm9sIGluc3RhbmNlb2YgRGlhbG9nKSB7XG5cdFx0XHRcdFx0aWYgKGluZGV4ID4gZmllbGRSYW5raW5EaWFsb2cpIHtcblx0XHRcdFx0XHRcdGluZGV4ID0gZmllbGRSYW5raW5EaWFsb2c7XG5cdFx0XHRcdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBkaWFsb2cncyBjb250cm9sXG5cdFx0XHRcdFx0XHRlcnJvckZpZWxkQ29udHJvbC5mb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBtZXNzYWdlcyB3aXRoIHRhcmdldCBpbnNpZGUgc2FwLm0uRGlhbG9nIHNob3VsZCBub3QgYnJpbmcgdXAgdGhlIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9Db250cm9sID0gb0NvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXHRcdGFGaWx0ZXJzLnB1c2goXG5cdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0cGF0aDogXCJjb250cm9sSWRzXCIsXG5cdFx0XHRcdHRlc3Q6IGZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdFx0fSlcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIG9ubHkgdW5ib3VuZCBtZXNzYWdlcyBoYXZlIHRvIGJlIHNob3duIHNvIGFkZCBmaWx0ZXIgYWNjb3JkaW5nbHlcblx0XHRhRmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBwYXRoOiBcInRhcmdldFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsIHZhbHVlMTogXCJcIiB9KSk7XG5cdH1cblx0aWYgKGFDdXN0b21NZXNzYWdlcyAmJiBhQ3VzdG9tTWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0YUN1c3RvbU1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24ob01lc3NhZ2U6IGFueSkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZUNvZGUgPSBvTWVzc2FnZS5jb2RlID8gb01lc3NhZ2UuY29kZSA6IFwiXCI7XG5cdFx0XHRvTWVzc2FnZU1hbmFnZXIuYWRkTWVzc2FnZXMoXG5cdFx0XHRcdG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0XHRtZXNzYWdlOiBvTWVzc2FnZS50ZXh0LFxuXHRcdFx0XHRcdHR5cGU6IG9NZXNzYWdlLnR5cGUsXG5cdFx0XHRcdFx0dGFyZ2V0OiBcIlwiLFxuXHRcdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWUsXG5cdFx0XHRcdFx0Y29kZTogbWVzc2FnZUNvZGVcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0XHQvL1RoZSB0YXJnZXQgYW5kIHBlcnNpc3RlbnQgcHJvcGVydGllcyBvZiB0aGUgbWVzc2FnZSBhcmUgaGFyZGNvZGVkIGFzIFwiXCIgYW5kIHRydWUgYmVjYXVzZSB0aGUgZnVuY3Rpb24gZGVhbHMgd2l0aCBvbmx5IHVuYm91bmQgbWVzc2FnZXMuXG5cdFx0fSk7XG5cdH1cblx0Y29uc3Qgb01lc3NhZ2VEaWFsb2dNb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0aWYgKGFVbmJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAxICYmIGFVbmJvdW5kTWVzc2FnZXNbMF0uZ2V0Q29kZSgpID09PSBcIjUwM1wiKSB7XG5cdFx0c2hvd01lc3NhZ2VCb3ggPSB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IG9MaXN0QmluZGluZyA9IG9NZXNzYWdlTWFuYWdlci5nZXRNZXNzYWdlTW9kZWwoKS5iaW5kTGlzdChcIi9cIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFGaWx0ZXJzKSxcblx0XHRcdGFDdXJyZW50Q29udGV4dHMgPSBvTGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdFx0aWYgKGFDdXJyZW50Q29udGV4dHMgJiYgYUN1cnJlbnRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBEb24ndCBzaG93IGRpYWxvZyBpbmNhc2UgdGhlcmUgYXJlIG5vIGVycm9ycyB0byBzaG93XG5cdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdFx0XHQvLyBBcyBmaXRlcmluZyBoYXMgYWxyZWFkeSBoYXBwZW5lZCBoZXJlIGhlbmNlXG5cdFx0XHQvLyB1c2luZyB0aGUgbWVzc2FnZSBtb2RlbCBhZ2FpbiBmb3IgdGhlIG1lc3NhZ2UgZGlhbG9nIHZpZXcgYW5kIHRoZW4gZmlsdGVyaW5nIG9uIHRoYXQgYmluZGluZyBhZ2FpbiBpcyB1bm5lY2Vzc2FyeS5cblx0XHRcdC8vIFNvIHdlIGNyZWF0ZSBuZXcganNvbiBtb2RlbCB0byB1c2UgZm9yIHRoZSBtZXNzYWdlIGRpYWxvZyB2aWV3LlxuXHRcdFx0Y29uc3QgYU1lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXHRcdFx0YUN1cnJlbnRDb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uKG9Db250ZXh0OiBhbnkpIHtcblx0XHRcdFx0bGV0IG9NZXNzYWdlO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b0NvbnRleHQuZ2V0T2JqZWN0KCkudGVjaG5pY2FsRGV0YWlscyAmJlxuXHRcdFx0XHRcdGFNZXNzYWdlTGlzdC5pbmRleE9mKG9Db250ZXh0LmdldE9iamVjdCgpLnRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlLm1lc3NhZ2UpID09PSAtMVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRhTWVzc2FnZUxpc3QucHVzaChvQ29udGV4dC5nZXRPYmplY3QoKS50ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZS5tZXNzYWdlKTtcblx0XHRcdFx0XHRvTWVzc2FnZSA9IG9Db250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdGFNZXNzYWdlcy5wdXNoKG9NZXNzYWdlKTtcblx0XHRcdFx0XHRhTWVzc2FnZURhdGFMaXN0ID0gYU1lc3NhZ2VzO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFvQ29udGV4dC5nZXRPYmplY3QoKS50ZWNobmljYWxEZXRhaWxzKSB7XG5cdFx0XHRcdFx0b01lc3NhZ2UgPSBvQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRhTWVzc2FnZXMucHVzaChvTWVzc2FnZSk7XG5cdFx0XHRcdFx0YU1lc3NhZ2VEYXRhTGlzdCA9IGFNZXNzYWdlcztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQvLyBpZihhTWVzc2FnZXMubGVuZ3RoID09PSAwICYmIGFNZXNzYWdlTGlzdC5sZW5ndGgpIHtcblx0XHRcdC8vIFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKGFNZXNzYWdlcyk7XG5cdFx0XHQvLyB9XG5cdFx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoYU1lc3NhZ2VEYXRhTGlzdCk7XG5cdFx0fVxuXHR9XG5cdGlmIChhVW5ib3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMCAmJiAhYUN1c3RvbU1lc3NhZ2VzICYmICFiSGFzRXRhZ01lc3NhZ2UpIHtcblx0XHQvLyBEb24ndCBzaG93IHRoZSBwb3B1cCBpZiB0aGVyZSBhcmUgbm8gdHJhbnNpZW50IG1lc3NhZ2VzXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0fSBlbHNlIGlmIChhVW5ib3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiBhVW5ib3VuZE1lc3NhZ2VzWzBdLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuU3VjY2VzcyAmJiAhYUN1c3RvbU1lc3NhZ2VzKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3coYVVuYm91bmRNZXNzYWdlc1swXS5tZXNzYWdlKTtcblx0XHRcdG9NZXNzYWdlTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhhVW5ib3VuZE1lc3NhZ2VzKTtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChzaG93TWVzc2FnZURpYWxvZykge1xuXHRcdGFSZXNvbHZlRnVuY3Rpb25zID0gYVJlc29sdmVGdW5jdGlvbnMgfHwgW107XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkLCByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQpIHtcblx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zLnB1c2gocmVzb2x2ZSk7XG5cdFx0XHQoc2FwLnVpLmdldENvcmUoKS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiLCB0cnVlKSBhcyBQcm9taXNlPFJlc291cmNlQnVuZGxlPilcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24ob1Jlc291cmNlQnVuZGxlOiBhbnkpIHtcblx0XHRcdFx0XHRvTWVzc2FnZVRlbXBsYXRlID1cblx0XHRcdFx0XHRcdG9NZXNzYWdlVGVtcGxhdGUgfHxcblx0XHRcdFx0XHRcdG5ldyBNZXNzYWdlSXRlbSh1bmRlZmluZWQsIHtcblx0XHRcdFx0XHRcdFx0Y291bnRlcjogeyBwYXRoOiBcImNvdW50ZXJcIiB9LFxuXHRcdFx0XHRcdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdFx0XHRcdFx0c3VidGl0bGU6IFwie2FkZGl0aW9uYWxUZXh0fVwiLFxuXHRcdFx0XHRcdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCIsXG5cdFx0XHRcdFx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246XG5cdFx0XHRcdFx0XHRcdFx0XCJ7PSAke1wiICtcblx0XHRcdFx0XHRcdFx0XHRcImRlc2NyaXB0aW9ufSB8fCAke3RlY2huaWNhbERldGFpbHN9ID8gXCIgK1xuXHRcdFx0XHRcdFx0XHRcdCdcIjxodG1sPjxib2R5PlwiICsgJyArXG5cdFx0XHRcdFx0XHRcdFx0Zm5Gb3JtYXREZXNjcmlwdGlvbigpICtcblx0XHRcdFx0XHRcdFx0XHRcIiArIFwiICtcblx0XHRcdFx0XHRcdFx0XHRmbkZvcm1hdFRlY2huaWNhbERldGFpbHMoKSArXG5cdFx0XHRcdFx0XHRcdFx0J1wiPC9ib2R5PjwvaHRtbD5cIicgK1xuXHRcdFx0XHRcdFx0XHRcdCcgOiBcIlwiIH0nLFxuXHRcdFx0XHRcdFx0XHRtYXJrdXBEZXNjcmlwdGlvbjogdHJ1ZVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0b01lc3NhZ2VWaWV3ID1cblx0XHRcdFx0XHRcdG9NZXNzYWdlVmlldyB8fFxuXHRcdFx0XHRcdFx0bmV3IE1lc3NhZ2VWaWV3KHtcblx0XHRcdFx0XHRcdFx0c2hvd0RldGFpbHNQYWdlSGVhZGVyOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0aXRlbVNlbGVjdDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0b0JhY2tCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0aXRlbXM6IHtcblx0XHRcdFx0XHRcdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZTogb01lc3NhZ2VUZW1wbGF0ZVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRvQmFja0J1dHRvbiA9XG5cdFx0XHRcdFx0XHRvQmFja0J1dHRvbiB8fFxuXHRcdFx0XHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHRcdGljb246IEljb25Qb29sLmdldEljb25VUkkoXCJuYXYtYmFja1wiKSxcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbih0aGlzOiBCdXR0b24pIHtcblx0XHRcdFx0XHRcdFx0XHRvTWVzc2FnZVZpZXcubmF2aWdhdGVCYWNrKCk7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Ly8gVXBkYXRlIHByb3BlciBFVGFnIE1pc21hdGNoIGVycm9yXG5cdFx0XHRcdFx0Y29uc3QgYkhhc0V0YWdNZXNzYWdlID0gZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5KG9NZXNzYWdlTWFuYWdlciwgb1Jlc291cmNlQnVuZGxlKTtcblx0XHRcdFx0XHRvTWVzc2FnZVZpZXcuc2V0TW9kZWwob01lc3NhZ2VEaWFsb2dNb2RlbCk7XG5cdFx0XHRcdFx0b0RpYWxvZyA9XG5cdFx0XHRcdFx0XHRvRGlhbG9nIHx8XG5cdFx0XHRcdFx0XHRuZXcgRGlhbG9nKHtcblx0XHRcdFx0XHRcdFx0cmVzaXphYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRjb250ZW50OiBvTWVzc2FnZVZpZXcsXG5cdFx0XHRcdFx0XHRcdGVuZEJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBhbHNvIHJlbW92ZSBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGlmIHdlIHdlcmUgc2hvd2luZyB0aGVtXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYlNob3dCb3VuZFRyYW5zaXRpb24pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdHRleHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfQ0xPU0VcIilcblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdGN1c3RvbUhlYWRlcjogbmV3IEJhcih7XG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudE1pZGRsZTogW1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3IFRleHQoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudExlZnQ6IFtvQmFja0J1dHRvbl1cblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnRXaWR0aDogXCIzNy41ZW1cIixcblx0XHRcdFx0XHRcdFx0Y29udGVudEhlaWdodDogXCIyMS41ZW1cIixcblx0XHRcdFx0XHRcdFx0dmVydGljYWxTY3JvbGxpbmc6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRhZnRlckNsb3NlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFSZXNvbHZlRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRhUmVzb2x2ZUZ1bmN0aW9uc1tpXS5jYWxsKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zID0gW107XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKGJIYXNFdGFnTWVzc2FnZSkge1xuXHRcdFx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL20vQnV0dG9uVHlwZVwiXSwgZnVuY3Rpb24oQnV0dG9uVHlwZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdG9EaWFsb2cuc2V0QmVnaW5CdXR0b24oXG5cdFx0XHRcdFx0XHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRpYWxvZ0Nsb3NlSGFuZGxlcigpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAob0NvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9Db250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvQ29udGV4dC5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0dGV4dDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9SRUZSRVNIXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogQnV0dG9uVHlwZS5FbXBoYXNpemVkXG5cdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvRGlhbG9nLmRlc3Ryb3lCZWdpbkJ1dHRvbigpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzSGlnaGVzdFByaW9yaXR5ID0gZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5KG9NZXNzYWdlVmlldy5nZXRJdGVtcygpKTtcblx0XHRcdFx0XHRzSGlnaGVzdFByaW9yaXR5VGV4dCA9IGdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyhzSGlnaGVzdFByaW9yaXR5KTtcblx0XHRcdFx0XHRvRGlhbG9nLnNldFN0YXRlKHNIaWdoZXN0UHJpb3JpdHkpO1xuXHRcdFx0XHRcdChvRGlhbG9nLmdldEN1c3RvbUhlYWRlcigpIGFzIGFueSkuZ2V0Q29udGVudE1pZGRsZSgpWzBdLnNldFRleHQoc0hpZ2hlc3RQcmlvcml0eVRleHQpO1xuXHRcdFx0XHRcdG9NZXNzYWdlVmlldy5uYXZpZ2F0ZUJhY2soKTtcblx0XHRcdFx0XHRvRGlhbG9nLm9wZW4oKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoc2hvd01lc3NhZ2VCb3gpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdFx0Y29uc3Qgb01lc3NhZ2UgPSBhVW5ib3VuZE1lc3NhZ2VzWzBdO1xuXHRcdFx0aWYgKG9NZXNzYWdlLnRlY2huaWNhbERldGFpbHMgJiYgYU1lc3NhZ2VMaXN0LmluZGV4T2Yob01lc3NhZ2UudGVjaG5pY2FsRGV0YWlscy5vcmlnaW5hbE1lc3NhZ2UubWVzc2FnZSkgPT09IC0xKSB7XG5cdFx0XHRcdGFNZXNzYWdlTGlzdC5wdXNoKG9NZXNzYWdlLnRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlLm1lc3NhZ2UpO1xuXHRcdFx0XHRsZXQgZm9ybWF0dGVkVGV4dFN0cmluZyA9IFwiPGh0bWw+PGJvZHk+XCI7XG5cdFx0XHRcdGNvbnN0IHJldHJ5QWZ0ZXJNZXNzYWdlID0gZ2V0UmV0cnlBZnRlck1lc3NhZ2Uob01lc3NhZ2UsIHRydWUpO1xuXHRcdFx0XHRpZiAocmV0cnlBZnRlck1lc3NhZ2UpIHtcblx0XHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gXCI8aDY+XCIgKyByZXRyeUFmdGVyTWVzc2FnZSArIFwiPC9oNj48YnI+XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGZvcm1hdHRlZFRleHRTdHJpbmcgKyBvTWVzc2FnZS5nZXRNZXNzYWdlKCkgKyBcIjwvaHRtbD48L2JvZHk+XCI7XG5cdFx0XHRcdGNvbnN0IGZvcm1hdHRlZFRleHQ6IGFueSA9IG5ldyBGb3JtYXR0ZWRUZXh0KHtcblx0XHRcdFx0XHRodG1sVGV4dDogZm9ybWF0dGVkVGV4dFN0cmluZ1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0TWVzc2FnZUJveC5lcnJvcihmb3JtYXR0ZWRUZXh0LCB7XG5cdFx0XHRcdFx0b25DbG9zZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRhTWVzc2FnZUxpc3QgPSBbXTtcblx0XHRcdFx0XHRcdGlmIChiU2hvd0JvdW5kVHJhbnNpdGlvbikge1xuXHRcdFx0XHRcdFx0XHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyhzSGlnaGVzdFByaW9yaXR5OiBhbnkpIHtcblx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gc2FwLnVpLmdldENvcmUoKS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKSBhcyBSZXNvdXJjZUJ1bmRsZTtcblx0c3dpdGNoIChzSGlnaGVzdFByaW9yaXR5KSB7XG5cdFx0Y2FzZSBcIkVycm9yXCI6XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0VSUk9SXCIpO1xuXHRcdGNhc2UgXCJJbmZvcm1hdGlvblwiOlxuXHRcdFx0cmV0dXJuIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfSU5GT1wiKTtcblx0XHRjYXNlIFwiU3VjY2Vzc1wiOlxuXHRcdFx0cmV0dXJuIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfU1VDQ0VTU1wiKTtcblx0XHRjYXNlIFwiV2FybmluZ1wiOlxuXHRcdFx0cmV0dXJuIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfV0FSTklOR1wiKTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVcIik7XG5cdH1cbn1cbmZ1bmN0aW9uIHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKSB7XG5cdHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhmYWxzZSk7XG59XG5mdW5jdGlvbiByZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcygpIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKHRydWUpO1xufVxuZnVuY3Rpb24gZ2V0TWVzc2FnZXMoYkJvdW5kTWVzc2FnZXM6IGJvb2xlYW4gPSBmYWxzZSwgYlRyYW5zaXRpb25Pbmx5OiBib29sZWFuID0gZmFsc2UpIHtcblx0bGV0IGk7XG5cdGNvbnN0IG9NZXNzYWdlTWFuYWdlciA9IChzYXAudWkuZ2V0Q29yZSgpIGFzIGFueSkuZ2V0TWVzc2FnZU1hbmFnZXIoKSxcblx0XHRvTWVzc2FnZU1vZGVsID0gb01lc3NhZ2VNYW5hZ2VyLmdldE1lc3NhZ2VNb2RlbCgpLFxuXHRcdGFNZXNzYWdlcyA9IG9NZXNzYWdlTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKSxcblx0XHRvUmVzb3VyY2VCdW5kbGUgPSBzYXAudWkuZ2V0Q29yZSgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpIGFzIFJlc291cmNlQnVuZGxlLFxuXHRcdGFUcmFuc2l0aW9uTWVzc2FnZXMgPSBbXTtcblxuXHRmb3IgKGkgPSAwOyBpIDwgYU1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0KCFiVHJhbnNpdGlvbk9ubHkgfHwgYU1lc3NhZ2VzW2ldLnBlcnNpc3RlbnQpICYmXG5cdFx0XHQoKGJCb3VuZE1lc3NhZ2VzICYmIGFNZXNzYWdlc1tpXS50YXJnZXQgIT09IFwiXCIpIHx8ICghYkJvdW5kTWVzc2FnZXMgJiYgKCFhTWVzc2FnZXNbaV0udGFyZ2V0IHx8IGFNZXNzYWdlc1tpXS50YXJnZXQgPT09IFwiXCIpKSkgJiZcblx0XHRcdGFNZXNzYWdlc1tpXS5jb2RlXG5cdFx0KSB7XG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzLnB1c2goYU1lc3NhZ2VzW2ldKTtcblx0XHR9XG5cdH1cblxuXHRmb3IgKGkgPSAwOyBpIDwgYVRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0uY29kZSA9PT0gXCI1MDNcIiAmJlxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5tZXNzYWdlICE9PSBcIlwiICYmXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLm1lc3NhZ2UuaW5kZXhPZihvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfQkFDS0VORF9QUkVGSVhcIikpID09PSAtMVxuXHRcdCkge1xuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5tZXNzYWdlID1cblx0XHRcdFx0XCJcXG5cIiArIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19CQUNLRU5EX1BSRUZJWFwiKSArIGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0ubWVzc2FnZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFUcmFuc2l0aW9uTWVzc2FnZXM7XG59XG5mdW5jdGlvbiByZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoYkJvdW5kTWVzc2FnZXM6IGFueSkge1xuXHRjb25zdCBhTWVzc2FnZXNUb0JlRGVsZXRlZCA9IGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzLCB0cnVlKTtcblxuXHRpZiAoYU1lc3NhZ2VzVG9CZURlbGV0ZWQubGVuZ3RoID4gMCkge1xuXHRcdChzYXAudWkuZ2V0Q29yZSgpIGFzIGFueSkuZ2V0TWVzc2FnZU1hbmFnZXIoKS5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNUb0JlRGVsZXRlZCk7XG5cdH1cbn1cblxuLyoqXG4gKiBTdGF0aWMgZnVuY3Rpb25zIGZvciBGaW9yaSBNZXNzYWdlIEhhbmRsaW5nXG4gKlxuICogQG5hbWVzcGFjZVxuICogQGFsaWFzIHNhcC5mZS5jb3JlLmFjdGlvbnMubWVzc2FnZUhhbmRsaW5nXG4gKiBAcHJpdmF0ZVxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1vZHVsZSBpcyBvbmx5IGZvciBleHBlcmltZW50YWwgdXNlISA8YnIvPjxiPlRoaXMgaXMgb25seSBhIFBPQyBhbmQgbWF5YmUgZGVsZXRlZDwvYj5cbiAqIEBzaW5jZSAxLjU2LjBcbiAqL1xuY29uc3QgbWVzc2FnZUhhbmRsaW5nOiBtZXNzYWdlSGFuZGxpbmdUeXBlID0ge1xuXHRnZXRNZXNzYWdlczogZ2V0TWVzc2FnZXMsXG5cdHNob3dVbmJvdW5kTWVzc2FnZXM6IHNob3dVbmJvdW5kTWVzc2FnZXMsXG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMsXG5cdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiByZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0bW9kaWZ5RVRhZ01lc3NhZ2VzT25seTogZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5LFxuXHRnZXRSZXRyeUFmdGVyTWVzc2FnZTogZ2V0UmV0cnlBZnRlck1lc3NhZ2Vcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1lc3NhZ2VIYW5kbGluZztcbiJdfQ==
|
|
579
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1lc3NhZ2VIYW5kbGluZy50cyJdLCJuYW1lcyI6WyJNZXNzYWdlVHlwZSIsIkNvcmVMaWIiLCJhTWVzc2FnZUxpc3QiLCJhTWVzc2FnZURhdGFMaXN0IiwiYVJlc29sdmVGdW5jdGlvbnMiLCJvRGlhbG9nIiwib0JhY2tCdXR0b24iLCJvTWVzc2FnZVRlbXBsYXRlIiwib01lc3NhZ2VWaWV3IiwiZm5Gb3JtYXRUZWNobmljYWxEZXRhaWxzIiwic1ByZXZpb3VzR3JvdXBOYW1lIiwiaW5zZXJ0RGV0YWlsIiwib1Byb3BlcnR5IiwicHJvcGVydHkiLCJzdWJzdHIiLCJNYXRoIiwibWF4IiwibGFzdEluZGV4T2YiLCJpbnNlcnRHcm91cE5hbWUiLCJzSFRNTCIsImdyb3VwTmFtZSIsImdldFBhdGhzIiwic1REIiwiZm9yRWFjaCIsImZuRm9ybWF0RGVzY3JpcHRpb24iLCJmbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHkiLCJhTWVzc2FnZXMiLCJzTWVzc2FnZVByaW9yaXR5IiwiTm9uZSIsImlMZW5ndGgiLCJsZW5ndGgiLCJvTWVzc2FnZUNvdW50IiwiRXJyb3IiLCJXYXJuaW5nIiwiU3VjY2VzcyIsIkluZm9ybWF0aW9uIiwiaSIsImdldFR5cGUiLCJmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHkiLCJvTWVzc2FnZU1hbmFnZXIiLCJvUmVzb3VyY2VCdW5kbGUiLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXRPYmplY3QiLCJiTWVzc2FnZXNNb2RpZmllZCIsInNFdGFnTWVzc2FnZSIsIm9NZXNzYWdlIiwib1RlY2huaWNhbERldGFpbHMiLCJnZXRUZWNobmljYWxEZXRhaWxzIiwiaHR0cFN0YXR1cyIsImdldFRleHQiLCJyZW1vdmVNZXNzYWdlcyIsInNldE1lc3NhZ2UiLCJ0YXJnZXQiLCJhZGRNZXNzYWdlcyIsImRpYWxvZ0Nsb3NlSGFuZGxlciIsImNsb3NlIiwic2V0VmlzaWJsZSIsIm9NZXNzYWdlRGlhbG9nTW9kZWwiLCJnZXRNb2RlbCIsInNldERhdGEiLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZ2V0UmV0cnlBZnRlck1lc3NhZ2UiLCJiTWVzc2FnZURpYWxvZyIsImROb3ciLCJEYXRlIiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsInNSZXRyeUFmdGVyTWVzc2FnZSIsInJldHJ5QWZ0ZXIiLCJkUmV0cnlBZnRlciIsIm9EYXRlRm9ybWF0IiwiZ2V0RnVsbFllYXIiLCJEYXRlRm9ybWF0IiwiZ2V0RGF0ZVRpbWVJbnN0YW5jZSIsInBhdHRlcm4iLCJmb3JtYXQiLCJnZXRNb250aCIsImdldERhdGUiLCJwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2ciLCJiU3RyaWN0SGFuZGxpbmdGbG93IiwiTWVzc2FnZUl0ZW0iLCJ1bmRlZmluZWQiLCJjb3VudGVyIiwicGF0aCIsInRpdGxlIiwic3VidGl0bGUiLCJsb25ndGV4dFVybCIsInR5cGUiLCJkZXNjcmlwdGlvbiIsIm1hcmt1cERlc2NyaXB0aW9uIiwiTWVzc2FnZVZpZXciLCJzaG93RGV0YWlsc1BhZ2VIZWFkZXIiLCJpdGVtU2VsZWN0IiwiaXRlbXMiLCJ0ZW1wbGF0ZSIsIkJ1dHRvbiIsImljb24iLCJJY29uUG9vbCIsImdldEljb25VUkkiLCJ2aXNpYmxlIiwicHJlc3MiLCJuYXZpZ2F0ZUJhY2siLCJzZXRNb2RlbCIsInNob3dVbmJvdW5kTWVzc2FnZXMiLCJhQ3VzdG9tTWVzc2FnZXMiLCJvQ29udGV4dCIsImJIYXNFdGFnTWVzc2FnZSIsImJTaG93Qm91bmRUcmFuc2l0aW9uIiwiYVVuYm91bmRNZXNzYWdlcyIsImdldE1lc3NhZ2VzIiwiZ2V0TWVzc2FnZU1hbmFnZXIiLCJzSGlnaGVzdFByaW9yaXR5Iiwic0hpZ2hlc3RQcmlvcml0eVRleHQiLCJhRmlsdGVycyIsIkZpbHRlciIsIm9wZXJhdG9yIiwiRmlsdGVyT3BlcmF0b3IiLCJORSIsInZhbHVlMSIsInNob3dNZXNzYWdlRGlhbG9nIiwic2hvd01lc3NhZ2VCb3giLCJjb25jYXQiLCJwdXNoIiwiRVEiLCJmbkNoZWNrQ29udHJvbElkSW5EaWFsb2ciLCJhQ29udHJvbElkcyIsImluZGV4IiwiSW5maW5pdHkiLCJvQ29udHJvbCIsImJ5SWQiLCJlcnJvckZpZWxkQ29udHJvbCIsImZpZWxkUmFua2luRGlhbG9nIiwiRGlhbG9nIiwiZ2V0UGFyZW50IiwiZmluZEVsZW1lbnRzIiwiaW5kZXhPZiIsImZvY3VzIiwidGVzdCIsImNhc2VTZW5zaXRpdmUiLCJtZXNzYWdlQ29kZSIsImNvZGUiLCJNZXNzYWdlIiwibWVzc2FnZSIsInRleHQiLCJwZXJzaXN0ZW50IiwiSlNPTk1vZGVsIiwiZ2V0Q29kZSIsIm9MaXN0QmluZGluZyIsImJpbmRMaXN0IiwiYUN1cnJlbnRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsInRlY2huaWNhbERldGFpbHMiLCJvcmlnaW5hbE1lc3NhZ2UiLCJleGlzdGluZ01lc3NhZ2VzIiwiQXJyYXkiLCJpc0FycmF5IiwiZ2V0RGF0YSIsIlByb21pc2UiLCJyZXNvbHZlIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsInJlamVjdCIsInRoZW4iLCJvTWVzc2FnZU9iamVjdCIsInJlc2l6YWJsZSIsImNvbnRlbnQiLCJlbmRCdXR0b24iLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImN1c3RvbUhlYWRlciIsIkJhciIsImNvbnRlbnRNaWRkbGUiLCJUZXh0IiwiY29udGVudExlZnQiLCJjb250ZW50V2lkdGgiLCJjb250ZW50SGVpZ2h0IiwidmVydGljYWxTY3JvbGxpbmciLCJhZnRlckNsb3NlIiwiY2FsbCIsInNhcCIsInVpIiwicmVxdWlyZSIsIkJ1dHRvblR5cGUiLCJzZXRCZWdpbkJ1dHRvbiIsImhhc1BlbmRpbmdDaGFuZ2VzIiwiZ2V0QmluZGluZyIsInJlc2V0Q2hhbmdlcyIsInJlZnJlc2giLCJFbXBoYXNpemVkIiwiZGVzdHJveUJlZ2luQnV0dG9uIiwiZ2V0SXRlbXMiLCJnZXRUcmFuc2xhdGVkVGV4dEZvck1lc3NhZ2VEaWFsb2ciLCJzZXRTdGF0ZSIsImdldEN1c3RvbUhlYWRlciIsImdldENvbnRlbnRNaWRkbGUiLCJzZXRUZXh0Iiwib3BlbiIsImNhdGNoIiwiZm9ybWF0dGVkVGV4dFN0cmluZyIsInJldHJ5QWZ0ZXJNZXNzYWdlIiwiZ2V0TWVzc2FnZSIsImZvcm1hdHRlZFRleHQiLCJGb3JtYXR0ZWRUZXh0IiwiaHRtbFRleHQiLCJNZXNzYWdlQm94IiwiZXJyb3IiLCJvbkNsb3NlIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwiYkJvdW5kTWVzc2FnZXMiLCJiVHJhbnNpdGlvbk9ubHkiLCJvTWVzc2FnZU1vZGVsIiwiYVRyYW5zaXRpb25NZXNzYWdlcyIsImFNZXNzYWdlc1RvQmVEZWxldGVkIiwibWVzc2FnZUhhbmRsaW5nIiwibW9kaWZ5RVRhZ01lc3NhZ2VzT25seSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7OztBQW1CQSxNQUFNQSxXQUFXLEdBQUdDLE9BQU8sQ0FBQ0QsV0FBNUI7QUFDQSxNQUFJRSxZQUFtQixHQUFHLEVBQTFCO0FBQ0EsTUFBSUMsZ0JBQXVCLEdBQUcsRUFBOUI7QUFDQSxNQUFJQyxpQkFBd0IsR0FBRyxFQUEvQjtBQUNBLE1BQUlDLE9BQUo7QUFDQSxNQUFJQyxXQUFKO0FBQ0EsTUFBSUMsZ0JBQUo7QUFDQSxNQUFJQyxZQUFKOztBQWlCQSxXQUFTQyx3QkFBVCxHQUFvQztBQUNuQyxRQUFJQyxrQkFBSixDQURtQyxDQUduQzs7QUFDQSxhQUFTQyxZQUFULENBQXNCQyxTQUF0QixFQUFzQztBQUNyQyxhQUFPQSxTQUFTLENBQUNDLFFBQVYsR0FDSixTQUNBRCxTQUFTLENBQUNDLFFBRFYsR0FFQSxXQUZBLEdBR0FELFNBQVMsQ0FBQ0MsUUFBVixDQUFtQkMsTUFBbkIsQ0FBMEJDLElBQUksQ0FBQ0MsR0FBTCxDQUFTSixTQUFTLENBQUNDLFFBQVYsQ0FBbUJJLFdBQW5CLENBQStCLEdBQS9CLENBQVQsRUFBOENMLFNBQVMsQ0FBQ0MsUUFBVixDQUFtQkksV0FBbkIsQ0FBK0IsR0FBL0IsQ0FB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QUFLNUM4QyxJQUFBQSxzQkFBc0IsRUFBRS9LLHdCQUxvQjtBQU01Q3VCLElBQUFBLG9CQUFvQixFQUFFQSxvQkFOc0I7QUFPNUNpQixJQUFBQSwyQkFBMkIsRUFBRUE7QUFQZSxHQUE3QztTQVVlc0ksZSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhciBmcm9tIFwic2FwL20vQmFyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IEZvcm1hdHRlZFRleHQgZnJvbSBcInNhcC9tL0Zvcm1hdHRlZFRleHRcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgTWVzc2FnZUl0ZW0gZnJvbSBcInNhcC9tL01lc3NhZ2VJdGVtXCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBNZXNzYWdlVmlldyBmcm9tIFwic2FwL20vTWVzc2FnZVZpZXdcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBEYXRlRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvRGF0ZUZvcm1hdFwiO1xuaW1wb3J0IEljb25Qb29sIGZyb20gXCJzYXAvdWkvY29yZS9JY29uUG9vbFwiO1xuaW1wb3J0IENvcmVMaWIgZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB7IENvcmVFeCB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcblxuY29uc3QgTWVzc2FnZVR5cGUgPSBDb3JlTGliLk1lc3NhZ2VUeXBlO1xubGV0IGFNZXNzYWdlTGlzdDogYW55W10gPSBbXTtcbmxldCBhTWVzc2FnZURhdGFMaXN0OiBhbnlbXSA9IFtdO1xubGV0IGFSZXNvbHZlRnVuY3Rpb25zOiBhbnlbXSA9IFtdO1xubGV0IG9EaWFsb2c6IERpYWxvZztcbmxldCBvQmFja0J1dHRvbjogQnV0dG9uO1xubGV0IG9NZXNzYWdlVGVtcGxhdGU6IE1lc3NhZ2VJdGVtO1xubGV0IG9NZXNzYWdlVmlldzogTWVzc2FnZVZpZXc7XG5cbmV4cG9ydCB0eXBlIG1lc3NhZ2VIYW5kbGluZ1R5cGUgPSB7XG5cdGdldE1lc3NhZ2VzOiAoYkJvdW5kTWVzc2FnZXM/OiBhbnksIGJUcmFuc2l0aW9uT25seT86IGFueSkgPT4gYW55W107XG5cdHNob3dVbmJvdW5kTWVzc2FnZXM6IChcblx0XHRhQ3VzdG9tTWVzc2FnZXM/OiBhbnlbXSxcblx0XHRvQ29udGV4dD86IGFueSxcblx0XHRiSGFzRXRhZ01lc3NhZ2U/OiBib29sZWFuLFxuXHRcdGJTaG93Qm91bmRUcmFuc2l0aW9uPzogYm9vbGVhblxuXHQpID0+IFByb21pc2U8YW55Pjtcblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlczogKCkgPT4gdm9pZDtcblx0cmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6ICgpID0+IHZvaWQ7XG5cdG1vZGlmeUVUYWdNZXNzYWdlc09ubHk6IChvTWVzc2FnZU1hbmFnZXI6IGFueSwgb1Jlc291cmNlQnVuZGxlOiBhbnkpID0+IGJvb2xlYW47XG5cdGdldFJldHJ5QWZ0ZXJNZXNzYWdlOiAob01lc3NhZ2U6IGFueSwgYk1lc3NhZ2VEaWFsb2c/OiBhbnkpID0+IGFueTtcblx0cHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nOiAob01lc3NhZ2VEaWFsb2dNb2RlbDogSlNPTk1vZGVsLCBiU3RyaWN0SGFuZGxpbmdGbG93OiBib29sZWFuKSA9PiBhbnk7XG59O1xuXG5mdW5jdGlvbiBmbkZvcm1hdFRlY2huaWNhbERldGFpbHMoKSB7XG5cdGxldCBzUHJldmlvdXNHcm91cE5hbWU6IHN0cmluZztcblxuXHQvLyBJbnNlcnQgdGVjaG5pY2FsIGRldGFpbCBpZiBpdCBleGlzdHNcblx0ZnVuY3Rpb24gaW5zZXJ0RGV0YWlsKG9Qcm9wZXJ0eTogYW55KSB7XG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eS5wcm9wZXJ0eVxuXHRcdFx0PyBcIiggJHtcIiArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5ICtcblx0XHRcdFx0XHQnfSA/IChcIjxwPicgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eS5zdWJzdHIoTWF0aC5tYXgob1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiL1wiKSwgb1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiLlwiKSkgKyAxKSArXG5cdFx0XHRcdFx0JyA6IFwiICsgJyArXG5cdFx0XHRcdFx0XCIke1wiICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkgK1xuXHRcdFx0XHRcdCd9ICsgXCI8L3A+XCIpIDogXCJcIiApJ1xuXHRcdFx0OiBcIlwiO1xuXHR9XG5cdC8vIEluc2VydCBncm91cG5hbWUgaWYgaXQgZXhpc3RzXG5cdGZ1bmN0aW9uIGluc2VydEdyb3VwTmFtZShvUHJvcGVydHk6IGFueSkge1xuXHRcdGxldCBzSFRNTCA9IFwiXCI7XG5cdFx0aWYgKG9Qcm9wZXJ0eS5ncm91cE5hbWUgJiYgb1Byb3BlcnR5LnByb3BlcnR5ICYmIG9Qcm9wZXJ0eS5ncm91cE5hbWUgIT09IHNQcmV2aW91c0dyb3VwTmFtZSkge1xuXHRcdFx0c0hUTUwgKz0gXCIoICR7XCIgKyBvUHJvcGVydHkucHJvcGVydHkgKyAnfSA/IFwiPGJyPjxoMz4nICsgb1Byb3BlcnR5Lmdyb3VwTmFtZSArICc8L2gzPlwiIDogXCJcIiApICsgJztcblx0XHRcdHNQcmV2aW91c0dyb3VwTmFtZSA9IG9Qcm9wZXJ0eS5ncm91cE5hbWU7XG5cdFx0fVxuXHRcdHJldHVybiBzSFRNTDtcblx0fVxuXG5cdC8vIExpc3Qgb2YgdGVjaG5pY2FsIGRldGFpbHMgdG8gYmUgc2hvd25cblx0ZnVuY3Rpb24gZ2V0UGF0aHMoKSB7XG5cdFx0Y29uc3Qgc1REID0gXCJ0ZWNobmljYWxEZXRhaWxzXCI7IC8vIG5hbWUgb2YgcHJvcGVydHkgaW4gbWVzc2FnZSBtb2RlbCBkYXRhIGZvciB0ZWNobmljYWwgZGV0YWlsc1xuXHRcdHJldHVybiBbXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvc3RhdHVzXCIgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJcIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9zdGF0dXNUZXh0XCIgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJBcHBsaWNhdGlvblwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9Db21wb25lbnRJZFwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiQXBwbGljYXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZUlkXCIgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJBcHBsaWNhdGlvblwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9TZXJ2aWNlUmVwb3NpdG9yeVwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiQXBwbGljYXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZVZlcnNpb25cIiB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkVycm9yUmVzb2x1dGlvblwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vQW5hbHlzaXNcIiB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkVycm9yUmVzb2x1dGlvblwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vTm90ZVwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9EZXRhaWxlZE5vdGVcIiB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkVycm9yUmVzb2x1dGlvblwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL0BTQVBfX2NvbW1vbi5FeGNlcHRpb25DYXRlZ29yeVwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvZXJyb3IvQFNBUF9fY29tbW9uLlRpbWVTdGFtcFwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvZXJyb3IvQFNBUF9fY29tbW9uLlRyYW5zYWN0aW9uSWRcIiB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIk1lc3NhZ2VzXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvZXJyb3IvY29kZVwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiTWVzc2FnZXNcIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9lcnJvci9tZXNzYWdlXCIgfVxuXHRcdF07XG5cdH1cblxuXHRsZXQgc0hUTUwgPSBcIk9iamVjdC5rZXlzKFwiICsgXCIke3RlY2huaWNhbERldGFpbHN9XCIgKyAnKS5sZW5ndGggPiAwID8gXCI8aDI+VGVjaG5pY2FsIERldGFpbHM8L2gyPlwiIDogXCJcIiAnO1xuXHRnZXRQYXRocygpLmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wZXJ0eTogeyBncm91cE5hbWU6IHN0cmluZzsgcHJvcGVydHk6IHN0cmluZyB9KSB7XG5cdFx0c0hUTUwgPSBzSFRNTCArIGluc2VydEdyb3VwTmFtZShvUHJvcGVydHkpICsgXCJcIiArIGluc2VydERldGFpbChvUHJvcGVydHkpICsgXCIgKyBcIjtcblx0fSk7XG5cdHJldHVybiBzSFRNTDtcbn1cbmZ1bmN0aW9uIGZuRm9ybWF0RGVzY3JpcHRpb24oKSB7XG5cdGNvbnN0IHNIVE1MID0gXCIoJHtcIiArICdkZXNjcmlwdGlvbn0gPyAoXCI8aDI+RGVzY3JpcHRpb248L2gyPlwiICsgJHsnICsgJ2Rlc2NyaXB0aW9ufSkgOiBcIlwiKSc7XG5cdHJldHVybiBzSFRNTDtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgaGlnaGVzdCBwcmlvcml0eSBtZXNzYWdlIHR5cGUoRXJyb3IvV2FybmluZy9TdWNjZXNzL0luZm9ybWF0aW9uKSBmcm9tIHRoZSBhdmFpbGFibGUgbWVzc2FnZXMuXG5cbiAqIEBmdW5jdGlvblxuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5tZXNzYWdlSGFuZGxpbmcuZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5XG4gKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuYWN0aW9ucy5tZXNzYWdlSGFuZGxpbmdcbiAqIEBwYXJhbSB7QXJyYXl9IFthTWVzc2FnZXNdIE1lc3NhZ2VzIGxpc3RcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEhpZ2hlc3QgcHJpb3JpdHkgbWVzc2FnZSBmcm9tIHRoZSBhdmFpbGFibGUgbWVzc2FnZXNcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZnVuY3Rpb24gZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5KGFNZXNzYWdlczogYW55W10pIHtcblx0bGV0IHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHRjb25zdCBpTGVuZ3RoID0gYU1lc3NhZ2VzLmxlbmd0aDtcblx0Y29uc3Qgb01lc3NhZ2VDb3VudDogYW55ID0geyBFcnJvcjogMCwgV2FybmluZzogMCwgU3VjY2VzczogMCwgSW5mb3JtYXRpb246IDAgfTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGlMZW5ndGg7IGkrKykge1xuXHRcdCsrb01lc3NhZ2VDb3VudFthTWVzc2FnZXNbaV0uZ2V0VHlwZSgpXTtcblx0fVxuXHRpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5FcnJvcl0gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuV2FybmluZ10gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5TdWNjZXNzXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkluZm9ybWF0aW9uXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuSW5mb3JtYXRpb247XG5cdH1cblx0cmV0dXJuIHNNZXNzYWdlUHJpb3JpdHk7XG59XG4vLyBmdW5jdGlvbiB3aGljaCBtb2RpZnkgZS1UYWcgbWVzc2FnZXMgb25seS5cbi8vIHJldHVybnMgOiB0cnVlLCBpZiBhbnkgZS1UYWcgbWVzc2FnZSBpcyBtb2RpZmllZCwgb3RoZXJ3aXNlIGZhbHNlLlxuZnVuY3Rpb24gZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5KG9NZXNzYWdlTWFuYWdlcjogYW55LCBvUmVzb3VyY2VCdW5kbGU6IGFueSkge1xuXHRjb25zdCBhTWVzc2FnZXMgPSBvTWVzc2FnZU1hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0T2JqZWN0KFwiL1wiKTtcblx0bGV0IGJNZXNzYWdlc01vZGlmaWVkID0gZmFsc2U7XG5cdGxldCBzRXRhZ01lc3NhZ2UgPSBcIlwiO1xuXHRhTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IGFueSwgaTogYW55KSB7XG5cdFx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCk7XG5cdFx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDQxMikge1xuXHRcdFx0c0V0YWdNZXNzYWdlID0gc0V0YWdNZXNzYWdlIHx8IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfVEVDSE5JQ0FMX0lTU1VFU1wiKTtcblx0XHRcdG9NZXNzYWdlTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNbaV0pO1xuXHRcdFx0b01lc3NhZ2Uuc2V0TWVzc2FnZShzRXRhZ01lc3NhZ2UpO1xuXHRcdFx0b01lc3NhZ2UudGFyZ2V0ID0gXCJcIjtcblx0XHRcdG9NZXNzYWdlTWFuYWdlci5hZGRNZXNzYWdlcyhvTWVzc2FnZSk7XG5cdFx0XHRiTWVzc2FnZXNNb2RpZmllZCA9IHRydWU7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGJNZXNzYWdlc01vZGlmaWVkO1xufVxuLy8gRGlhbG9nIGNsb3NlIEhhbmRsaW5nXG5mdW5jdGlvbiBkaWFsb2dDbG9zZUhhbmRsZXIoKSB7XG5cdG9EaWFsb2cuY2xvc2UoKTtcblx0b0JhY2tCdXR0b24uc2V0VmlzaWJsZShmYWxzZSk7XG5cdGFNZXNzYWdlTGlzdCA9IFtdO1xuXHRjb25zdCBvTWVzc2FnZURpYWxvZ01vZGVsOiBhbnkgPSBvTWVzc2FnZVZpZXcuZ2V0TW9kZWwoKTtcblx0aWYgKG9NZXNzYWdlRGlhbG9nTW9kZWwpIHtcblx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoe30pO1xuXHR9XG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcbn1cbmZ1bmN0aW9uIGdldFJldHJ5QWZ0ZXJNZXNzYWdlKG9NZXNzYWdlOiBhbnksIGJNZXNzYWdlRGlhbG9nPzogYW55KSB7XG5cdGNvbnN0IGROb3cgPSBuZXcgRGF0ZSgpO1xuXHRjb25zdCBvVGVjaG5pY2FsRGV0YWlscyA9IG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKTtcblx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gKENvcmUgYXMgQ29yZUV4KS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblx0bGV0IHNSZXRyeUFmdGVyTWVzc2FnZTtcblx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDUwMyAmJiBvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSB7XG5cdFx0Y29uc3QgZFJldHJ5QWZ0ZXIgPSBvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyO1xuXHRcdGxldCBvRGF0ZUZvcm1hdDtcblx0XHRpZiAoZE5vdy5nZXRGdWxsWWVhcigpICE9PSBkUmV0cnlBZnRlci5nZXRGdWxsWWVhcigpKSB7XG5cdFx0XHQvL2RpZmZlcmVudCB5ZWFyc1xuXHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRwYXR0ZXJuOiBcIk1NTU0gZGQsIHl5eXkgJ2F0JyBoaDptbSBhXCJcblx0XHRcdH0pO1xuXHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0fSBlbHNlIGlmIChkTm93LmdldEZ1bGxZZWFyKCkgPT0gZFJldHJ5QWZ0ZXIuZ2V0RnVsbFllYXIoKSkge1xuXHRcdFx0Ly9zYW1lIHllYXJcblx0XHRcdGlmIChiTWVzc2FnZURpYWxvZykge1xuXHRcdFx0XHQvL2xlc3MgdGhhbiAyIG1pblxuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPVxuXHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19USVRMRVwiKSArXG5cdFx0XHRcdFx0XCIgXCIgK1xuXHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19ERVNDXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChkTm93LmdldE1vbnRoKCkgIT09IGRSZXRyeUFmdGVyLmdldE1vbnRoKCkgfHwgZE5vdy5nZXREYXRlKCkgIT09IGRSZXRyeUFmdGVyLmdldERhdGUoKSkge1xuXHRcdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdFx0cGF0dGVybjogXCJNTU1NIGRkICdhdCcgaGg6bW0gYVwiXG5cdFx0XHRcdH0pOyAvL2RpZmZlcmVudCBtb250aHMgb3IgZGlmZmVyZW50IGRheXMgb2Ygc2FtZSBtb250aFxuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vc2FtZSBkYXlcblx0XHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRcdHBhdHRlcm46IFwiaGg6bW0gYVwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JfREFZXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDUwMyAmJiAhb1RlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcikge1xuXHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUl9OT19SRVRSWV9BRlRFUlwiKTtcblx0fVxuXHRyZXR1cm4gc1JldHJ5QWZ0ZXJNZXNzYWdlO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2cob01lc3NhZ2VEaWFsb2dNb2RlbDogSlNPTk1vZGVsLCBiU3RyaWN0SGFuZGxpbmdGbG93OiBib29sZWFuKSB7XG5cdGlmICghYlN0cmljdEhhbmRsaW5nRmxvdykge1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPVxuXHRcdFx0b01lc3NhZ2VUZW1wbGF0ZSB8fFxuXHRcdFx0bmV3IE1lc3NhZ2VJdGVtKHVuZGVmaW5lZCwge1xuXHRcdFx0XHRjb3VudGVyOiB7IHBhdGg6IFwiY291bnRlclwiIH0sXG5cdFx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0XHRzdWJ0aXRsZTogXCJ7YWRkaXRpb25hbFRleHR9XCIsXG5cdFx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIixcblx0XHRcdFx0dHlwZTogeyBwYXRoOiBcInR5cGVcIiB9LFxuXHRcdFx0XHRkZXNjcmlwdGlvbjpcblx0XHRcdFx0XHRcIns9ICR7XCIgK1xuXHRcdFx0XHRcdFwiZGVzY3JpcHRpb259IHx8ICR7dGVjaG5pY2FsRGV0YWlsc30gPyBcIiArXG5cdFx0XHRcdFx0J1wiPGh0bWw+PGJvZHk+XCIgKyAnICtcblx0XHRcdFx0XHRmbkZvcm1hdERlc2NyaXB0aW9uKCkgK1xuXHRcdFx0XHRcdFwiICsgXCIgK1xuXHRcdFx0XHRcdGZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscygpICtcblx0XHRcdFx0XHQnXCI8L2JvZHk+PC9odG1sPlwiJyArXG5cdFx0XHRcdFx0JyA6IFwiXCIgfScsXG5cdFx0XHRcdG1hcmt1cERlc2NyaXB0aW9uOiB0cnVlXG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHtcblx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0dHlwZTogXCJXYXJuaW5nXCIsXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCJcblx0XHR9KTtcblx0fVxuXHRvTWVzc2FnZVZpZXcgPVxuXHRcdG9NZXNzYWdlVmlldyB8fFxuXHRcdG5ldyBNZXNzYWdlVmlldyh7XG5cdFx0XHRzaG93RGV0YWlsc1BhZ2VIZWFkZXI6IGZhbHNlLFxuXHRcdFx0aXRlbVNlbGVjdDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRvQmFja0J1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0fSxcblx0XHRcdGl0ZW1zOiB7XG5cdFx0XHRcdHBhdGg6IFwiL1wiLFxuXHRcdFx0XHR0ZW1wbGF0ZTogb01lc3NhZ2VUZW1wbGF0ZVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRvQmFja0J1dHRvbiA9XG5cdFx0b0JhY2tCdXR0b24gfHxcblx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdGljb246IEljb25Qb29sLmdldEljb25VUkkoXCJuYXYtYmFja1wiKSxcblx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0cHJlc3M6IGZ1bmN0aW9uICh0aGlzOiBCdXR0b24pIHtcblx0XHRcdFx0b01lc3NhZ2VWaWV3Lm5hdmlnYXRlQmFjaygpO1xuXHRcdFx0XHR0aGlzLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHQvLyBVcGRhdGUgcHJvcGVyIEVUYWcgTWlzbWF0Y2ggZXJyb3Jcblx0b01lc3NhZ2VWaWV3LnNldE1vZGVsKG9NZXNzYWdlRGlhbG9nTW9kZWwpO1xuXHRyZXR1cm4ge1xuXHRcdG9NZXNzYWdlVmlldyxcblx0XHRvQmFja0J1dHRvblxuXHR9O1xufVxuXG5mdW5jdGlvbiBzaG93VW5ib3VuZE1lc3NhZ2VzKFxuXHR0aGlzOiBtZXNzYWdlSGFuZGxpbmdUeXBlLFxuXHRhQ3VzdG9tTWVzc2FnZXM/OiBhbnlbXSxcblx0b0NvbnRleHQ/OiBhbnksXG5cdGJIYXNFdGFnTWVzc2FnZT86IGJvb2xlYW4sXG5cdGJTaG93Qm91bmRUcmFuc2l0aW9uPzogYm9vbGVhblxuKSB7XG5cdGxldCBhVW5ib3VuZE1lc3NhZ2VzID0gdGhpcy5nZXRNZXNzYWdlcygpO1xuXHRjb25zdCBvTWVzc2FnZU1hbmFnZXIgPSBDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCk7XG5cdGxldCBzSGlnaGVzdFByaW9yaXR5O1xuXHRsZXQgc0hpZ2hlc3RQcmlvcml0eVRleHQ7XG5cdGNvbnN0IGFGaWx0ZXJzID0gW1xuXHRcdG5ldyBGaWx0ZXIoeyBwYXRoOiBcImNvZGVcIiwgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLk5FLCB2YWx1ZTE6IG51bGwgfSksXG5cdFx0bmV3IEZpbHRlcih7IHBhdGg6IFwicGVyc2lzdGVudFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuTkUsIHZhbHVlMTogZmFsc2UgfSlcblx0XTtcblx0bGV0IHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2UsXG5cdFx0c2hvd01lc3NhZ2VCb3ggPSBmYWxzZTtcblxuXHRpZiAoYlNob3dCb3VuZFRyYW5zaXRpb24pIHtcblx0XHRhVW5ib3VuZE1lc3NhZ2VzID0gYVVuYm91bmRNZXNzYWdlcy5jb25jYXQoZ2V0TWVzc2FnZXModHJ1ZSwgdHJ1ZSkpO1xuXHRcdC8vIHdlIG9ubHkgd2FudCB0byBzaG93IGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgbm90IGJvdW5kIHN0YXRlIG1lc3NhZ2VzIGhlbmNlIGFkZCBhIGZpbHRlciBmb3IgdGhlIHNhbWVcblx0XHRhRmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBwYXRoOiBcInBlcnNpc3RlbnRcIiwgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLCB2YWx1ZTE6IHRydWUgfSkpO1xuXHRcdGNvbnN0IGZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyA9IGZ1bmN0aW9uIChhQ29udHJvbElkczogYW55KSB7XG5cdFx0XHRsZXQgaW5kZXggPSBJbmZpbml0eSxcblx0XHRcdFx0b0NvbnRyb2wgPSBDb3JlLmJ5SWQoYUNvbnRyb2xJZHNbMF0pIGFzIE1hbmFnZWRPYmplY3Q7XG5cdFx0XHRjb25zdCBlcnJvckZpZWxkQ29udHJvbCA9IENvcmUuYnlJZChhQ29udHJvbElkc1swXSkgYXMgQ29udHJvbDtcblx0XHRcdHdoaWxlIChvQ29udHJvbCkge1xuXHRcdFx0XHRjb25zdCBmaWVsZFJhbmtpbkRpYWxvZyA9XG5cdFx0XHRcdFx0b0NvbnRyb2wgaW5zdGFuY2VvZiBEaWFsb2dcblx0XHRcdFx0XHRcdD8gKGVycm9yRmllbGRDb250cm9sLmdldFBhcmVudCgpIGFzIGFueSkuZmluZEVsZW1lbnRzKHRydWUpLmluZGV4T2YoZXJyb3JGaWVsZENvbnRyb2wpXG5cdFx0XHRcdFx0XHQ6IEluZmluaXR5O1xuXHRcdFx0XHRpZiAob0NvbnRyb2wgaW5zdGFuY2VvZiBEaWFsb2cpIHtcblx0XHRcdFx0XHRpZiAoaW5kZXggPiBmaWVsZFJhbmtpbkRpYWxvZykge1xuXHRcdFx0XHRcdFx0aW5kZXggPSBmaWVsZFJhbmtpbkRpYWxvZztcblx0XHRcdFx0XHRcdC8vIFNldCB0aGUgZm9jdXMgdG8gdGhlIGRpYWxvZydzIGNvbnRyb2xcblx0XHRcdFx0XHRcdGVycm9yRmllbGRDb250cm9sLmZvY3VzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIG1lc3NhZ2VzIHdpdGggdGFyZ2V0IGluc2lkZSBzYXAubS5EaWFsb2cgc2hvdWxkIG5vdCBicmluZyB1cCB0aGUgbWVzc2FnZSBkaWFsb2dcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0b0NvbnRyb2wgPSBvQ29udHJvbC5nZXRQYXJlbnQoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH07XG5cdFx0YUZpbHRlcnMucHVzaChcblx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRwYXRoOiBcImNvbnRyb2xJZHNcIixcblx0XHRcdFx0dGVzdDogZm5DaGVja0NvbnRyb2xJZEluRGlhbG9nLFxuXHRcdFx0XHRjYXNlU2Vuc2l0aXZlOiB0cnVlXG5cdFx0XHR9KVxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gb25seSB1bmJvdW5kIG1lc3NhZ2VzIGhhdmUgdG8gYmUgc2hvd24gc28gYWRkIGZpbHRlciBhY2NvcmRpbmdseVxuXHRcdGFGaWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7IHBhdGg6IFwidGFyZ2V0XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSwgdmFsdWUxOiBcIlwiIH0pKTtcblx0fVxuXHRpZiAoYUN1c3RvbU1lc3NhZ2VzICYmIGFDdXN0b21NZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRhQ3VzdG9tTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IGFueSkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZUNvZGUgPSBvTWVzc2FnZS5jb2RlID8gb01lc3NhZ2UuY29kZSA6IFwiXCI7XG5cdFx0XHRvTWVzc2FnZU1hbmFnZXIuYWRkTWVzc2FnZXMoXG5cdFx0XHRcdG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0XHRtZXNzYWdlOiBvTWVzc2FnZS50ZXh0LFxuXHRcdFx0XHRcdHR5cGU6IG9NZXNzYWdlLnR5cGUsXG5cdFx0XHRcdFx0dGFyZ2V0OiBcIlwiLFxuXHRcdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWUsXG5cdFx0XHRcdFx0Y29kZTogbWVzc2FnZUNvZGVcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0XHQvL1RoZSB0YXJnZXQgYW5kIHBlcnNpc3RlbnQgcHJvcGVydGllcyBvZiB0aGUgbWVzc2FnZSBhcmUgaGFyZGNvZGVkIGFzIFwiXCIgYW5kIHRydWUgYmVjYXVzZSB0aGUgZnVuY3Rpb24gZGVhbHMgd2l0aCBvbmx5IHVuYm91bmQgbWVzc2FnZXMuXG5cdFx0fSk7XG5cdH1cblx0Y29uc3Qgb01lc3NhZ2VEaWFsb2dNb2RlbCA9IChvTWVzc2FnZVZpZXcgJiYgKG9NZXNzYWdlVmlldy5nZXRNb2RlbCgpIGFzIEpTT05Nb2RlbCkpIHx8IG5ldyBKU09OTW9kZWwoKTtcblx0aWYgKGFVbmJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAxICYmIGFVbmJvdW5kTWVzc2FnZXNbMF0uZ2V0Q29kZSgpID09PSBcIjUwM1wiKSB7XG5cdFx0c2hvd01lc3NhZ2VCb3ggPSB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IG9MaXN0QmluZGluZyA9IG9NZXNzYWdlTWFuYWdlci5nZXRNZXNzYWdlTW9kZWwoKS5iaW5kTGlzdChcIi9cIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFGaWx0ZXJzKSxcblx0XHRcdGFDdXJyZW50Q29udGV4dHMgPSBvTGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdFx0aWYgKGFDdXJyZW50Q29udGV4dHMgJiYgYUN1cnJlbnRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBEb24ndCBzaG93IGRpYWxvZyBpbmNhc2UgdGhlcmUgYXJlIG5vIGVycm9ycyB0byBzaG93XG5cdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdFx0XHQvLyBBcyBmaXRlcmluZyBoYXMgYWxyZWFkeSBoYXBwZW5lZCBoZXJlIGhlbmNlXG5cdFx0XHQvLyB1c2luZyB0aGUgbWVzc2FnZSBtb2RlbCBhZ2FpbiBmb3IgdGhlIG1lc3NhZ2UgZGlhbG9nIHZpZXcgYW5kIHRoZW4gZmlsdGVyaW5nIG9uIHRoYXQgYmluZGluZyBhZ2FpbiBpcyB1bm5lY2Vzc2FyeS5cblx0XHRcdC8vIFNvIHdlIGNyZWF0ZSBuZXcganNvbiBtb2RlbCB0byB1c2UgZm9yIHRoZSBtZXNzYWdlIGRpYWxvZyB2aWV3LlxuXHRcdFx0Y29uc3QgYU1lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXHRcdFx0YUN1cnJlbnRDb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uIChvQ29udGV4dDogYW55KSB7XG5cdFx0XHRcdGxldCBvTWVzc2FnZTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9Db250ZXh0LmdldE9iamVjdCgpLnRlY2huaWNhbERldGFpbHMgJiZcblx0XHRcdFx0XHRhTWVzc2FnZUxpc3QuaW5kZXhPZihvQ29udGV4dC5nZXRPYmplY3QoKS50ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZS5tZXNzYWdlKSA9PT0gLTFcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0YU1lc3NhZ2VMaXN0LnB1c2gob0NvbnRleHQuZ2V0T2JqZWN0KCkudGVjaG5pY2FsRGV0YWlscy5vcmlnaW5hbE1lc3NhZ2UubWVzc2FnZSk7XG5cdFx0XHRcdFx0b01lc3NhZ2UgPSBvQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRhTWVzc2FnZXMucHVzaChvTWVzc2FnZSk7XG5cdFx0XHRcdFx0YU1lc3NhZ2VEYXRhTGlzdCA9IGFNZXNzYWdlcztcblx0XHRcdFx0fSBlbHNlIGlmICghb0NvbnRleHQuZ2V0T2JqZWN0KCkudGVjaG5pY2FsRGV0YWlscykge1xuXHRcdFx0XHRcdG9NZXNzYWdlID0gb0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0YU1lc3NhZ2VzLnB1c2gob01lc3NhZ2UpO1xuXHRcdFx0XHRcdGFNZXNzYWdlRGF0YUxpc3QgPSBhTWVzc2FnZXM7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Ly8gaWYoYU1lc3NhZ2VzLmxlbmd0aCA9PT0gMCAmJiBhTWVzc2FnZUxpc3QubGVuZ3RoKSB7XG5cdFx0XHQvLyBcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YShhTWVzc2FnZXMpO1xuXHRcdFx0Ly8gfVxuXHRcdFx0bGV0IGV4aXN0aW5nTWVzc2FnZXM6IGFueVtdID0gW107XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShvTWVzc2FnZURpYWxvZ01vZGVsLmdldERhdGEoKSkpIHtcblx0XHRcdFx0ZXhpc3RpbmdNZXNzYWdlcyA9IG9NZXNzYWdlRGlhbG9nTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdFx0fVxuXHRcdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKGFNZXNzYWdlRGF0YUxpc3QuY29uY2F0KGV4aXN0aW5nTWVzc2FnZXMpKTtcblx0XHR9XG5cdH1cblx0aWYgKGFVbmJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAwICYmICFhQ3VzdG9tTWVzc2FnZXMgJiYgIWJIYXNFdGFnTWVzc2FnZSkge1xuXHRcdC8vIERvbid0IHNob3cgdGhlIHBvcHVwIGlmIHRoZXJlIGFyZSBubyB0cmFuc2llbnQgbWVzc2FnZXNcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHR9IGVsc2UgaWYgKGFVbmJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAxICYmIGFVbmJvdW5kTWVzc2FnZXNbMF0uZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5TdWNjZXNzICYmICFhQ3VzdG9tTWVzc2FnZXMpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KGFVbmJvdW5kTWVzc2FnZXNbMF0ubWVzc2FnZSk7XG5cdFx0XHRvTWVzc2FnZU1hbmFnZXIucmVtb3ZlTWVzc2FnZXMoYVVuYm91bmRNZXNzYWdlcyk7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoc2hvd01lc3NhZ2VEaWFsb2cpIHtcblx0XHRhUmVzb2x2ZUZ1bmN0aW9ucyA9IGFSZXNvbHZlRnVuY3Rpb25zIHx8IFtdO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQsIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZCkge1xuXHRcdFx0YVJlc29sdmVGdW5jdGlvbnMucHVzaChyZXNvbHZlKTtcblx0XHRcdChDb3JlIGFzIENvcmVFeClcblx0XHRcdFx0LmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIsIHRydWUpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvUmVzb3VyY2VCdW5kbGU6IGFueSkge1xuXHRcdFx0XHRcdGNvbnN0IGJTdHJpY3RIYW5kbGluZ0Zsb3cgPSBmYWxzZTtcblx0XHRcdFx0XHRjb25zdCBiSGFzRXRhZ01lc3NhZ2UgPSBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHkob01lc3NhZ2VNYW5hZ2VyLCBvUmVzb3VyY2VCdW5kbGUpO1xuXHRcdFx0XHRcdGNvbnN0IG9NZXNzYWdlT2JqZWN0ID0gcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKG9NZXNzYWdlRGlhbG9nTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3cpO1xuXHRcdFx0XHRcdG9EaWFsb2cgPVxuXHRcdFx0XHRcdFx0b0RpYWxvZyB8fFxuXHRcdFx0XHRcdFx0bmV3IERpYWxvZyh7XG5cdFx0XHRcdFx0XHRcdHJlc2l6YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0Y29udGVudDogb01lc3NhZ2VPYmplY3Qub01lc3NhZ2VWaWV3LFxuXHRcdFx0XHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkaWFsb2dDbG9zZUhhbmRsZXIoKTtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGFsc28gcmVtb3ZlIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgaWYgd2Ugd2VyZSBzaG93aW5nIHRoZW1cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChiU2hvd0JvdW5kVHJhbnNpdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9DTE9TRVwiKVxuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0Y3VzdG9tSGVhZGVyOiBuZXcgQmFyKHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50TWlkZGxlOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHRuZXcgVGV4dCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVcIilcblx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50TGVmdDogW29CYWNrQnV0dG9uXVxuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0Y29udGVudFdpZHRoOiBcIjM3LjVlbVwiLFxuXHRcdFx0XHRcdFx0XHRjb250ZW50SGVpZ2h0OiBcIjIxLjVlbVwiLFxuXHRcdFx0XHRcdFx0XHR2ZXJ0aWNhbFNjcm9sbGluZzogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFSZXNvbHZlRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRhUmVzb2x2ZUZ1bmN0aW9uc1tpXS5jYWxsKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zID0gW107XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKGJIYXNFdGFnTWVzc2FnZSkge1xuXHRcdFx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL20vQnV0dG9uVHlwZVwiXSwgZnVuY3Rpb24gKEJ1dHRvblR5cGU6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRvRGlhbG9nLnNldEJlZ2luQnV0dG9uKFxuXHRcdFx0XHRcdFx0XHRcdG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9Db250ZXh0LnJlZnJlc2goKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX1JFRlJFU0hcIiksXG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBCdXR0b25UeXBlLkVtcGhhc2l6ZWRcblx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9EaWFsb2cuZGVzdHJveUJlZ2luQnV0dG9uKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNIaWdoZXN0UHJpb3JpdHkgPSBmbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHkob01lc3NhZ2VWaWV3LmdldEl0ZW1zKCkpO1xuXHRcdFx0XHRcdHNIaWdoZXN0UHJpb3JpdHlUZXh0ID0gZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nKHNIaWdoZXN0UHJpb3JpdHkpO1xuXHRcdFx0XHRcdG9EaWFsb2cuc2V0U3RhdGUoc0hpZ2hlc3RQcmlvcml0eSk7XG5cdFx0XHRcdFx0KG9EaWFsb2cuZ2V0Q3VzdG9tSGVhZGVyKCkgYXMgYW55KS5nZXRDb250ZW50TWlkZGxlKClbMF0uc2V0VGV4dChzSGlnaGVzdFByaW9yaXR5VGV4dCk7XG5cdFx0XHRcdFx0b01lc3NhZ2VWaWV3Lm5hdmlnYXRlQmFjaygpO1xuXHRcdFx0XHRcdG9EaWFsb2cub3BlbigpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2gocmVqZWN0KTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChzaG93TWVzc2FnZUJveCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0Y29uc3Qgb01lc3NhZ2UgPSBhVW5ib3VuZE1lc3NhZ2VzWzBdO1xuXHRcdFx0aWYgKG9NZXNzYWdlLnRlY2huaWNhbERldGFpbHMgJiYgYU1lc3NhZ2VMaXN0LmluZGV4T2Yob01lc3NhZ2UudGVjaG5pY2FsRGV0YWlscy5vcmlnaW5hbE1lc3NhZ2UubWVzc2FnZSkgPT09IC0xKSB7XG5cdFx0XHRcdGFNZXNzYWdlTGlzdC5wdXNoKG9NZXNzYWdlLnRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlLm1lc3NhZ2UpO1xuXHRcdFx0XHRsZXQgZm9ybWF0dGVkVGV4dFN0cmluZyA9IFwiPGh0bWw+PGJvZHk+XCI7XG5cdFx0XHRcdGNvbnN0IHJldHJ5QWZ0ZXJNZXNzYWdlID0gZ2V0UmV0cnlBZnRlck1lc3NhZ2Uob01lc3NhZ2UsIHRydWUpO1xuXHRcdFx0XHRpZiAocmV0cnlBZnRlck1lc3NhZ2UpIHtcblx0XHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gXCI8aDY+XCIgKyByZXRyeUFmdGVyTWVzc2FnZSArIFwiPC9oNj48YnI+XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGZvcm1hdHRlZFRleHRTdHJpbmcgKyBvTWVzc2FnZS5nZXRNZXNzYWdlKCkgKyBcIjwvaHRtbD48L2JvZHk+XCI7XG5cdFx0XHRcdGNvbnN0IGZvcm1hdHRlZFRleHQ6IGFueSA9IG5ldyBGb3JtYXR0ZWRUZXh0KHtcblx0XHRcdFx0XHRodG1sVGV4dDogZm9ybWF0dGVkVGV4dFN0cmluZ1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0TWVzc2FnZUJveC5lcnJvcihmb3JtYXR0ZWRUZXh0LCB7XG5cdFx0XHRcdFx0b25DbG9zZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0YU1lc3NhZ2VMaXN0ID0gW107XG5cdFx0XHRcdFx0XHRpZiAoYlNob3dCb3VuZFRyYW5zaXRpb24pIHtcblx0XHRcdFx0XHRcdFx0cmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHR9XG59XG5mdW5jdGlvbiBnZXRUcmFuc2xhdGVkVGV4dEZvck1lc3NhZ2VEaWFsb2coc0hpZ2hlc3RQcmlvcml0eTogYW55KSB7XG5cdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IChDb3JlIGFzIENvcmVFeCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdHN3aXRjaCAoc0hpZ2hlc3RQcmlvcml0eSkge1xuXHRcdGNhc2UgXCJFcnJvclwiOlxuXHRcdFx0cmV0dXJuIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9FUlJPUlwiKTtcblx0XHRjYXNlIFwiSW5mb3JtYXRpb25cIjpcblx0XHRcdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0lORk9cIik7XG5cdFx0Y2FzZSBcIlN1Y2Nlc3NcIjpcblx0XHRcdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1NVQ0NFU1NcIik7XG5cdFx0Y2FzZSBcIldhcm5pbmdcIjpcblx0XHRcdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1dBUk5JTkdcIik7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFXCIpO1xuXHR9XG59XG5mdW5jdGlvbiByZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCkge1xuXHRyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoZmFsc2UpO1xufVxuZnVuY3Rpb24gcmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKSB7XG5cdHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyh0cnVlKTtcbn1cbmZ1bmN0aW9uIGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzOiBib29sZWFuID0gZmFsc2UsIGJUcmFuc2l0aW9uT25seTogYm9vbGVhbiA9IGZhbHNlKSB7XG5cdGxldCBpO1xuXHRjb25zdCBvTWVzc2FnZU1hbmFnZXIgPSAoQ29yZSBhcyBDb3JlRXggYXMgYW55KS5nZXRNZXNzYWdlTWFuYWdlcigpLFxuXHRcdG9NZXNzYWdlTW9kZWwgPSBvTWVzc2FnZU1hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCksXG5cdFx0YU1lc3NhZ2VzID0gb01lc3NhZ2VNb2RlbC5nZXRPYmplY3QoXCIvXCIpLFxuXHRcdG9SZXNvdXJjZUJ1bmRsZSA9IChDb3JlIGFzIENvcmVFeCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIiksXG5cdFx0YVRyYW5zaXRpb25NZXNzYWdlcyA9IFtdO1xuXG5cdGZvciAoaSA9IDA7IGkgPCBhTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHQoIWJUcmFuc2l0aW9uT25seSB8fCBhTWVzc2FnZXNbaV0ucGVyc2lzdGVudCkgJiZcblx0XHRcdCgoYkJvdW5kTWVzc2FnZXMgJiYgYU1lc3NhZ2VzW2ldLnRhcmdldCAhPT0gXCJcIikgfHwgKCFiQm91bmRNZXNzYWdlcyAmJiAoIWFNZXNzYWdlc1tpXS50YXJnZXQgfHwgYU1lc3NhZ2VzW2ldLnRhcmdldCA9PT0gXCJcIikpKSAmJlxuXHRcdFx0YU1lc3NhZ2VzW2ldLmNvZGVcblx0XHQpIHtcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXMucHVzaChhTWVzc2FnZXNbaV0pO1xuXHRcdH1cblx0fVxuXG5cdGZvciAoaSA9IDA7IGkgPCBhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5jb2RlID09PSBcIjUwM1wiICYmXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLm1lc3NhZ2UgIT09IFwiXCIgJiZcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0ubWVzc2FnZS5pbmRleE9mKG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19CQUNLRU5EX1BSRUZJWFwiKSkgPT09IC0xXG5cdFx0KSB7XG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLm1lc3NhZ2UgPVxuXHRcdFx0XHRcIlxcblwiICsgb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0JBQ0tFTkRfUFJFRklYXCIpICsgYVRyYW5zaXRpb25NZXNzYWdlc1tpXS5tZXNzYWdlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYVRyYW5zaXRpb25NZXNzYWdlcztcbn1cbmZ1bmN0aW9uIHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhiQm91bmRNZXNzYWdlczogYW55KSB7XG5cdGNvbnN0IGFNZXNzYWdlc1RvQmVEZWxldGVkID0gZ2V0TWVzc2FnZXMoYkJvdW5kTWVzc2FnZXMsIHRydWUpO1xuXG5cdGlmIChhTWVzc2FnZXNUb0JlRGVsZXRlZC5sZW5ndGggPiAwKSB7XG5cdFx0Q29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLnJlbW92ZU1lc3NhZ2VzKGFNZXNzYWdlc1RvQmVEZWxldGVkKTtcblx0fVxufVxuXG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgZm9yIEZpb3JpIE1lc3NhZ2UgSGFuZGxpbmdcbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAYWxpYXMgc2FwLmZlLmNvcmUuYWN0aW9ucy5tZXNzYWdlSGFuZGxpbmdcbiAqIEBwcml2YXRlXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbW9kdWxlIGlzIG9ubHkgZm9yIGV4cGVyaW1lbnRhbCB1c2UhIDxici8+PGI+VGhpcyBpcyBvbmx5IGEgUE9DIGFuZCBtYXliZSBkZWxldGVkPC9iPlxuICogQHNpbmNlIDEuNTYuMFxuICovXG5jb25zdCBtZXNzYWdlSGFuZGxpbmc6IG1lc3NhZ2VIYW5kbGluZ1R5cGUgPSB7XG5cdGdldE1lc3NhZ2VzOiBnZXRNZXNzYWdlcyxcblx0c2hvd1VuYm91bmRNZXNzYWdlczogc2hvd1VuYm91bmRNZXNzYWdlcyxcblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlczogcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0cmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzLFxuXHRtb2RpZnlFVGFnTWVzc2FnZXNPbmx5OiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHksXG5cdGdldFJldHJ5QWZ0ZXJNZXNzYWdlOiBnZXRSZXRyeUFmdGVyTWVzc2FnZSxcblx0cHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nOiBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2dcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1lc3NhZ2VIYW5kbGluZztcbiJdfQ==
|