@sapui5/sap.fe.core 1.113.0 → 1.115.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime-dbg.js +68 -5
- package/src/sap/fe/core/ActionRuntime.js +1 -1
- package/src/sap/fe/core/ActionRuntime.js.map +1 -1
- package/src/sap/fe/core/ActionRuntime.ts +120 -4
- package/src/sap/fe/core/AppComponent-dbg.js +8 -2
- package/src/sap/fe/core/AppComponent.js +1 -1
- package/src/sap/fe/core/AppComponent.js.map +1 -1
- package/src/sap/fe/core/AppComponent.ts +19 -3
- package/src/sap/fe/core/AppStateHandler-dbg.js +14 -10
- package/src/sap/fe/core/AppStateHandler.js +1 -1
- package/src/sap/fe/core/AppStateHandler.js.map +1 -1
- package/src/sap/fe/core/AppStateHandler.ts +17 -11
- package/src/sap/fe/core/BaseController-dbg.js +1 -1
- package/src/sap/fe/core/BaseController.ts +13 -2
- package/src/sap/fe/core/CommonUtils-dbg.js +74 -317
- package/src/sap/fe/core/CommonUtils.js +1 -1
- package/src/sap/fe/core/CommonUtils.js.map +1 -1
- package/src/sap/fe/core/CommonUtils.ts +96 -473
- package/src/sap/fe/core/ExtensionAPI-dbg.js +1 -1
- package/src/sap/fe/core/ExtensionAPI.ts +2 -2
- package/src/sap/fe/core/StateFilterToSelectionVariant-dbg.js +263 -0
- package/src/sap/fe/core/StateFilterToSelectionVariant.js +6 -0
- package/src/sap/fe/core/StateFilterToSelectionVariant.js.map +1 -0
- package/src/sap/fe/core/StateFilterToSelectionVariant.ts +316 -0
- package/src/sap/fe/core/TemplateComponent-dbg.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +6 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase-dbg.js +10 -3
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +8 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport-dbg.js +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.ts +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor-dbg.js +8 -8
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.ts +7 -7
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment-dbg.js +1 -1
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.ts +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +68 -36
- package/src/sap/fe/core/controllerextensions/EditFlow.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +83 -43
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +12 -11
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +17 -21
- package/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +233 -133
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +260 -145
- package/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +1 -1
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +3 -3
- package/src/sap/fe/core/controllerextensions/Routing-dbg.js +5 -3
- package/src/sap/fe/core/controllerextensions/Routing.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/Routing.ts +5 -4
- package/src/sap/fe/core/controllerextensions/Share-dbg.js +3 -2
- package/src/sap/fe/core/controllerextensions/Share.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
- package/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +19 -14
- package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +25 -18
- package/src/sap/fe/core/controllerextensions/ViewState-dbg.js +40 -26
- package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.ts +59 -33
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync-dbg.js +8 -8
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +23 -25
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon-dbg.js +7 -45
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +5 -48
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog-dbg.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +7 -3
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +73 -90
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +88 -101
- package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +26 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +29 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup-dbg.js +13 -10
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +7 -20
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade-dbg.js +64 -4
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +91 -8
- package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +2 -4
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +3 -5
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +9 -9
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +1 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +8 -8
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -0
- package/src/sap/fe/core/controls/CommandExecution-dbg.js +4 -9
- package/src/sap/fe/core/controls/CommandExecution.js +1 -1
- package/src/sap/fe/core/controls/CommandExecution.js.map +1 -1
- package/src/sap/fe/core/controls/CommandExecution.ts +0 -8
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block-dbg.js +335 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +6 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js.map +1 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +336 -0
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +3 -28
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +1 -1
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js.map +1 -1
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +8 -29
- package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters-dbg.js +435 -0
- package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters.js +6 -0
- package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters.js.map +1 -0
- package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters.ts +532 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +30 -1
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js.map +1 -1
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +38 -0
- package/src/sap/fe/core/converters/ManifestSettings-dbg.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +7 -5
- package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +36 -4
- package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
- package/src/sap/fe/core/converters/MetaModelConverter.js.map +1 -1
- package/src/sap/fe/core/converters/MetaModelConverter.ts +45 -4
- package/src/sap/fe/core/converters/TemplateConverter-dbg.js +2 -3
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.js.map +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.ts +1 -6
- package/src/sap/fe/core/converters/annotations/DataField-dbg.js +18 -3
- package/src/sap/fe/core/converters/annotations/DataField.js +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.js.map +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.ts +18 -2
- package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +679 -676
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1 -1
- package/src/sap/fe/core/converters/common/AnnotationConverter.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart-dbg.js +32 -20
- package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +30 -18
- package/src/sap/fe/core/converters/controls/Common/DataVisualization-dbg.js +4 -5
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +6 -37
- package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +100 -72
- package/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.ts +146 -99
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +37 -10
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +49 -16
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +47 -18
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +74 -20
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +26 -9
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +24 -8
- package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +28 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -9
- package/src/sap/fe/core/converters/helpers/InsightsHelpers-dbg.js +39 -0
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +6 -0
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +45 -0
- package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +13 -15
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.js.map +1 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +18 -54
- package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +12 -12
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js.map +1 -1
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +16 -11
- package/src/sap/fe/core/formatters/CollaborationFormatter-dbg.js +17 -33
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
- package/src/sap/fe/core/formatters/CollaborationFormatter.js.map +1 -1
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +27 -22
- package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +5 -11
- package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js.map +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -25
- package/src/sap/fe/core/fpm/Component-dbg.js +3 -1
- package/src/sap/fe/core/fpm/Component.js +1 -1
- package/src/sap/fe/core/fpm/Component.js.map +1 -1
- package/src/sap/fe/core/fpm/Component.ts +3 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +74 -26
- package/src/sap/fe/core/helpers/BindingToolkit.js +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit.ts +116 -33
- package/src/sap/fe/core/helpers/DeleteHelper-dbg.js +82 -37
- package/src/sap/fe/core/helpers/DeleteHelper.js +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.ts +109 -56
- package/src/sap/fe/core/helpers/KeepAliveHelper-dbg.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +7 -5
- package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +13 -3
- package/src/sap/fe/core/helpers/MassEditHelper.js +1 -1
- package/src/sap/fe/core/helpers/MassEditHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/MassEditHelper.ts +28 -18
- package/src/sap/fe/core/helpers/MessageStrip-dbg.js +1 -1
- package/src/sap/fe/core/helpers/MessageStrip.ts +2 -1
- package/src/sap/fe/core/helpers/ModelHelper-dbg.js +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +3 -3
- package/src/sap/fe/core/helpers/RecommendationHelper-dbg.js +71 -0
- package/src/sap/fe/core/helpers/RecommendationHelper.js +6 -0
- package/src/sap/fe/core/helpers/RecommendationHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/RecommendationHelper.ts +94 -0
- package/src/sap/fe/core/helpers/ResourceModelHelper-dbg.js +5 -2
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +5 -0
- package/src/sap/fe/core/helpers/StableIdHelper-dbg.js +24 -2
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.ts +23 -1
- package/src/sap/fe/core/helpers/TitleHelper-dbg.js +239 -0
- package/src/sap/fe/core/helpers/TitleHelper.js +6 -0
- package/src/sap/fe/core/helpers/TitleHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/TitleHelper.ts +295 -0
- package/src/sap/fe/core/jsx-runtime/ViewLoader-dbg.js +4 -1
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js +1 -1
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js.map +1 -1
- package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +3 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control-dbg.js +41 -17
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx-control.js.map +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +45 -21
- package/src/sap/fe/core/jsx-runtime/jsx-dbg.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -0
- package/src/sap/fe/core/jsx-runtime/useMDXComponents-dbg.js +8 -4
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +1 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js.map +1 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +7 -2
- package/src/sap/fe/core/library-dbg.js +4 -3
- package/src/sap/fe/core/library-preload.js +91 -74
- package/src/sap/fe/core/library-preload.js.map +1 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/library.js.map +1 -1
- package/src/sap/fe/core/library.ts +1 -1
- package/src/sap/fe/core/manifest.json +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +4 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js.map +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +3 -2
- package/src/sap/fe/core/messagebundle.properties +12 -8
- package/src/sap/fe/core/messagebundle_ar.properties +7 -5
- package/src/sap/fe/core/messagebundle_bg.properties +7 -5
- package/src/sap/fe/core/messagebundle_ca.properties +7 -5
- package/src/sap/fe/core/messagebundle_cs.properties +7 -5
- package/src/sap/fe/core/messagebundle_cy.properties +7 -5
- package/src/sap/fe/core/messagebundle_da.properties +7 -5
- package/src/sap/fe/core/messagebundle_de.properties +7 -5
- package/src/sap/fe/core/messagebundle_el.properties +7 -5
- package/src/sap/fe/core/messagebundle_en.properties +7 -5
- package/src/sap/fe/core/messagebundle_en_GB.properties +6 -4
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +7 -4
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +6 -4
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +7 -4
- package/src/sap/fe/core/messagebundle_es.properties +7 -5
- package/src/sap/fe/core/messagebundle_es_MX.properties +7 -5
- package/src/sap/fe/core/messagebundle_et.properties +7 -5
- package/src/sap/fe/core/messagebundle_fi.properties +7 -5
- package/src/sap/fe/core/messagebundle_fr.properties +7 -5
- package/src/sap/fe/core/messagebundle_fr_CA.properties +8 -6
- package/src/sap/fe/core/messagebundle_hi.properties +7 -5
- package/src/sap/fe/core/messagebundle_hr.properties +7 -5
- package/src/sap/fe/core/messagebundle_hu.properties +7 -5
- package/src/sap/fe/core/messagebundle_id.properties +7 -5
- package/src/sap/fe/core/messagebundle_it.properties +8 -6
- package/src/sap/fe/core/messagebundle_iw.properties +7 -5
- package/src/sap/fe/core/messagebundle_ja.properties +7 -5
- package/src/sap/fe/core/messagebundle_kk.properties +7 -5
- package/src/sap/fe/core/messagebundle_ko.properties +7 -5
- package/src/sap/fe/core/messagebundle_lt.properties +7 -5
- package/src/sap/fe/core/messagebundle_lv.properties +7 -5
- package/src/sap/fe/core/messagebundle_ms.properties +7 -5
- package/src/sap/fe/core/messagebundle_nl.properties +7 -5
- package/src/sap/fe/core/messagebundle_no.properties +7 -5
- package/src/sap/fe/core/messagebundle_pl.properties +7 -5
- package/src/sap/fe/core/messagebundle_pt.properties +7 -5
- package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -5
- package/src/sap/fe/core/messagebundle_ro.properties +7 -5
- package/src/sap/fe/core/messagebundle_ru.properties +7 -5
- package/src/sap/fe/core/messagebundle_sh.properties +7 -5
- package/src/sap/fe/core/messagebundle_sk.properties +7 -5
- package/src/sap/fe/core/messagebundle_sl.properties +7 -5
- package/src/sap/fe/core/messagebundle_sv.properties +7 -5
- package/src/sap/fe/core/messagebundle_th.properties +7 -5
- package/src/sap/fe/core/messagebundle_tr.properties +7 -5
- package/src/sap/fe/core/messagebundle_uk.properties +7 -5
- package/src/sap/fe/core/messagebundle_vi.properties +7 -5
- package/src/sap/fe/core/messagebundle_zh_CN.properties +7 -5
- package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -5
- package/src/sap/fe/core/operationsHelper-dbg.js +1 -1
- package/src/sap/fe/core/operationsHelper.ts +1 -1
- package/src/sap/fe/core/rootView/Fcl-dbg.controller.js +8 -2
- package/src/sap/fe/core/rootView/Fcl.controller.js +1 -1
- package/src/sap/fe/core/rootView/Fcl.controller.js.map +1 -1
- package/src/sap/fe/core/rootView/Fcl.controller.ts +8 -1
- package/src/sap/fe/core/rootView/NavContainer-dbg.controller.js +8 -2
- package/src/sap/fe/core/rootView/NavContainer.controller.js +1 -1
- package/src/sap/fe/core/rootView/NavContainer.controller.js.map +1 -1
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +10 -3
- package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +16 -6
- package/src/sap/fe/core/rootView/RootViewBaseController.js +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js.map +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +10 -4
- package/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +54 -5
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +52 -6
- package/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +31 -14
- package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +15 -1
- package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +10 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +29 -7
- package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +5 -2
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +9 -5
- package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +1 -2
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +2 -18
- package/src/sap/fe/core/templating/CommonFormatters-dbg.js +8 -8
- package/src/sap/fe/core/templating/CommonFormatters.js.map +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.ts +9 -9
- package/src/sap/fe/core/templating/CriticalityFormatters-dbg.js +1 -1
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +2 -2
- package/src/sap/fe/core/templating/DataFieldFormatters-dbg.js +38 -2
- package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataFieldFormatters.js.map +1 -1
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +40 -0
- package/src/sap/fe/core/templating/FieldControlHelper-dbg.js +5 -6
- package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
- package/src/sap/fe/core/templating/FieldControlHelper.js.map +1 -1
- package/src/sap/fe/core/templating/FieldControlHelper.ts +13 -11
- package/src/sap/fe/core/templating/FilterHelper-dbg.js +13 -1
- package/src/sap/fe/core/templating/FilterHelper.js +1 -1
- package/src/sap/fe/core/templating/FilterHelper.js.map +1 -1
- package/src/sap/fe/core/templating/FilterHelper.ts +13 -1
- package/src/sap/fe/core/templating/PropertyHelper-dbg.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.ts +7 -7
- package/src/sap/fe/core/templating/UIFormatters-dbg.js +5 -6
- package/src/sap/fe/core/templating/UIFormatters.js +1 -1
- package/src/sap/fe/core/templating/UIFormatters.js.map +1 -1
- package/src/sap/fe/core/templating/UIFormatters.ts +6 -7
- package/src/sap/fe/core/type/TypeUtil-dbg.js +2 -2
- package/src/sap/fe/core/type/TypeUtil.js +1 -1
- package/src/sap/fe/core/type/TypeUtil.js.map +1 -1
- package/src/sap/fe/core/type/TypeUtil.ts +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +0 -243
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +0 -6
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js.map +0 -1
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +0 -283
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +0 -121
- package/src/sap/fe/core/controllerextensions/collaboration/UserDetails.fragment.xml +0 -11
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +0 -59
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +0 -171
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +0 -6
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js.map +0 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +0 -184
|
@@ -8,13 +8,14 @@
|
|
|
8
8
|
/******/ "use strict";
|
|
9
9
|
/******/ var __webpack_modules__ = ({
|
|
10
10
|
|
|
11
|
-
/***/
|
|
11
|
+
/***/ 175:
|
|
12
12
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
16
16
|
exports.convert = void 0;
|
|
17
|
-
const
|
|
17
|
+
const VocabularyReferences_1 = __webpack_require__(899);
|
|
18
|
+
const utils_1 = __webpack_require__(168);
|
|
18
19
|
/**
|
|
19
20
|
* Symbol to extend an annotation with the reference to its target.
|
|
20
21
|
*/
|
|
@@ -63,7 +64,7 @@ function resolveTarget(converter, startElement, path, annotationsTerm) {
|
|
|
63
64
|
// determine the starting point for the resolution
|
|
64
65
|
if (startElement === undefined) {
|
|
65
66
|
// no starting point given: start at the entity container
|
|
66
|
-
if (pathSegments[0].startsWith(converter.rawSchema.namespace) &&
|
|
67
|
+
if (pathSegments[0].startsWith(`${converter.rawSchema.namespace}.`) &&
|
|
67
68
|
pathSegments[0] !== ((_a = converter.getConvertedEntityContainer()) === null || _a === void 0 ? void 0 : _a.fullyQualifiedName)) {
|
|
68
69
|
// We have a fully qualified name in the path that is not the entity container.
|
|
69
70
|
startElement =
|
|
@@ -134,7 +135,7 @@ function resolveTarget(converter, startElement, path, annotationsTerm) {
|
|
|
134
135
|
case 'EntityContainer':
|
|
135
136
|
{
|
|
136
137
|
const thisElement = current.target;
|
|
137
|
-
if (segment === '' || segment === thisElement.fullyQualifiedName) {
|
|
138
|
+
if (segment === '' || converter.unalias(segment) === thisElement.fullyQualifiedName) {
|
|
138
139
|
return current;
|
|
139
140
|
}
|
|
140
141
|
// next element: EntitySet, Singleton or ActionImport?
|
|
@@ -183,7 +184,8 @@ function resolveTarget(converter, startElement, path, annotationsTerm) {
|
|
|
183
184
|
current.target = navigationProperty;
|
|
184
185
|
return current;
|
|
185
186
|
}
|
|
186
|
-
const
|
|
187
|
+
const actionName = (0, utils_1.substringBeforeFirst)(converter.unalias(segment), '(');
|
|
188
|
+
const action = thisElement.actions[actionName];
|
|
187
189
|
if (action) {
|
|
188
190
|
current.target = action;
|
|
189
191
|
return current;
|
|
@@ -327,12 +329,15 @@ function parseValue(converter, currentTarget, currentTerm, currentProperty, curr
|
|
|
327
329
|
case 'Date':
|
|
328
330
|
return propertyValue.Date;
|
|
329
331
|
case 'EnumMember':
|
|
330
|
-
const
|
|
331
|
-
|
|
332
|
-
|
|
332
|
+
const splitEnum = propertyValue.EnumMember.split(' ').map((enumValue) => {
|
|
333
|
+
var _a;
|
|
334
|
+
const unaliased = (_a = converter.unalias(enumValue)) !== null && _a !== void 0 ? _a : '';
|
|
335
|
+
return (0, utils_1.alias)(VocabularyReferences_1.VocabularyReferences, unaliased);
|
|
336
|
+
});
|
|
337
|
+
if (splitEnum[0] !== undefined && utils_1.EnumIsFlag[(0, utils_1.substringBeforeFirst)(splitEnum[0], '/')]) {
|
|
333
338
|
return splitEnum;
|
|
334
339
|
}
|
|
335
|
-
return
|
|
340
|
+
return splitEnum[0];
|
|
336
341
|
case 'PropertyPath':
|
|
337
342
|
return {
|
|
338
343
|
type: 'PropertyPath',
|
|
@@ -436,59 +441,41 @@ function parseRecordType(converter, currentTerm, currentTarget, currentProperty,
|
|
|
436
441
|
return targetType;
|
|
437
442
|
}
|
|
438
443
|
function parseRecord(converter, currentTerm, currentTarget, currentProperty, currentSource, annotationRecord, currentFQN) {
|
|
439
|
-
|
|
440
|
-
const annotationTerm = {
|
|
444
|
+
const record = {
|
|
441
445
|
$Type: parseRecordType(converter, currentTerm, currentTarget, currentProperty, annotationRecord),
|
|
442
446
|
fullyQualifiedName: currentFQN,
|
|
443
|
-
[ANNOTATION_TARGET]: currentTarget
|
|
447
|
+
[ANNOTATION_TARGET]: currentTarget,
|
|
448
|
+
__source: currentSource
|
|
444
449
|
};
|
|
450
|
+
for (const propertyValue of annotationRecord.propertyValues) {
|
|
451
|
+
(0, utils_1.lazy)(record, propertyValue.name, () => parseValue(converter, currentTarget, currentTerm, propertyValue.name, currentSource, propertyValue.value, `${currentFQN}/${propertyValue.name}`));
|
|
452
|
+
}
|
|
445
453
|
// annotations on the record
|
|
446
|
-
(0, utils_1.lazy)(
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
}
|
|
454
|
-
else {
|
|
455
|
-
annotations = (_a = converter.rawAnnotationsPerTarget[currentFQN]) === null || _a === void 0 ? void 0 : _a.annotations;
|
|
456
|
-
}
|
|
457
|
-
annotations === null || annotations === void 0 ? void 0 : annotations.forEach((annotation) => {
|
|
458
|
-
annotation.target = currentFQN;
|
|
459
|
-
annotation.__source = currentSource;
|
|
460
|
-
annotation[ANNOTATION_TARGET] = currentTarget;
|
|
461
|
-
annotation.fullyQualifiedName = `${currentFQN}@${annotation.term}`;
|
|
462
|
-
});
|
|
463
|
-
return createAnnotationsObject(converter, annotationTerm, annotations !== null && annotations !== void 0 ? annotations : []);
|
|
464
|
-
});
|
|
465
|
-
const annotationContent = (_a = annotationRecord.propertyValues) === null || _a === void 0 ? void 0 : _a.reduce((annotationContent, propertyValue) => {
|
|
466
|
-
(0, utils_1.lazy)(annotationContent, propertyValue.name, () => parseValue(converter, currentTarget, currentTerm, propertyValue.name, currentSource, propertyValue.value, `${currentFQN}/${propertyValue.name}`));
|
|
467
|
-
return annotationContent;
|
|
468
|
-
}, annotationTerm);
|
|
469
|
-
if (isDataFieldWithForAction(annotationContent)) {
|
|
470
|
-
(0, utils_1.lazy)(annotationContent, 'ActionTarget', () => {
|
|
471
|
-
var _a, _b;
|
|
472
|
-
// try to resolve to a bound action of the annotation target
|
|
473
|
-
let actionTarget = (_a = currentTarget.actions) === null || _a === void 0 ? void 0 : _a[annotationContent.Action];
|
|
454
|
+
(0, utils_1.lazy)(record, 'annotations', resolveAnnotationsOnAnnotation(converter, annotationRecord, record));
|
|
455
|
+
if (isDataFieldWithForAction(record)) {
|
|
456
|
+
(0, utils_1.lazy)(record, 'ActionTarget', () => {
|
|
457
|
+
var _a, _b, _c;
|
|
458
|
+
const actionTargetFQN = converter.unalias((_a = record.Action) === null || _a === void 0 ? void 0 : _a.toString());
|
|
459
|
+
// (1) Bound action of the annotation target?
|
|
460
|
+
let actionTarget = (_b = currentTarget.actions) === null || _b === void 0 ? void 0 : _b[actionTargetFQN];
|
|
474
461
|
if (!actionTarget) {
|
|
475
|
-
//
|
|
476
|
-
actionTarget = (
|
|
462
|
+
// (2) ActionImport (= unbound action)?
|
|
463
|
+
actionTarget = (_c = converter.getConvertedActionImport(actionTargetFQN)) === null || _c === void 0 ? void 0 : _c.action;
|
|
477
464
|
}
|
|
478
465
|
if (!actionTarget) {
|
|
479
|
-
//
|
|
480
|
-
actionTarget = converter.getConvertedAction(
|
|
466
|
+
// (3) Bound action of a different EntityType
|
|
467
|
+
actionTarget = converter.getConvertedAction(actionTargetFQN);
|
|
481
468
|
if (!(actionTarget === null || actionTarget === void 0 ? void 0 : actionTarget.isBound)) {
|
|
482
469
|
actionTarget = undefined;
|
|
483
470
|
}
|
|
484
471
|
}
|
|
485
472
|
if (!actionTarget) {
|
|
486
|
-
converter.logError(
|
|
473
|
+
converter.logError(`${record.fullyQualifiedName}: Unable to resolve '${record.Action}' ('${actionTargetFQN}')`);
|
|
487
474
|
}
|
|
488
475
|
return actionTarget;
|
|
489
476
|
});
|
|
490
477
|
}
|
|
491
|
-
return
|
|
478
|
+
return record;
|
|
492
479
|
}
|
|
493
480
|
/**
|
|
494
481
|
* Retrieve or infer the collection type based on its content.
|
|
@@ -614,16 +601,6 @@ function parseCollection(converter, currentTarget, currentTerm, currentProperty,
|
|
|
614
601
|
function isV4NavigationProperty(navProp) {
|
|
615
602
|
return !!navProp.targetTypeName;
|
|
616
603
|
}
|
|
617
|
-
/**
|
|
618
|
-
* Split the alias from the term value.
|
|
619
|
-
*
|
|
620
|
-
* @param references the current set of references
|
|
621
|
-
* @param termValue the value of the term
|
|
622
|
-
* @returns the term alias and the actual term value
|
|
623
|
-
*/
|
|
624
|
-
function splitTerm(references, termValue) {
|
|
625
|
-
return (0, utils_1.splitAtLast)((0, utils_1.alias)(references, termValue), '.');
|
|
626
|
-
}
|
|
627
604
|
function convertAnnotation(converter, target, rawAnnotation) {
|
|
628
605
|
var _a;
|
|
629
606
|
let annotation;
|
|
@@ -658,94 +635,59 @@ function convertAnnotation(converter, target, rawAnnotation) {
|
|
|
658
635
|
annotation.fullyQualifiedName = rawAnnotation.fullyQualifiedName;
|
|
659
636
|
annotation[ANNOTATION_TARGET] = target;
|
|
660
637
|
const [vocAlias, vocTerm] = converter.splitTerm(rawAnnotation.term);
|
|
661
|
-
annotation.term = converter.unalias(`${vocAlias}.${vocTerm}
|
|
638
|
+
annotation.term = converter.unalias(`${vocAlias}.${vocTerm}`, VocabularyReferences_1.VocabularyReferences);
|
|
662
639
|
annotation.qualifier = rawAnnotation.qualifier;
|
|
663
640
|
annotation.__source = rawAnnotation.__source;
|
|
664
641
|
try {
|
|
665
|
-
(0, utils_1.lazy)(annotation, 'annotations', (
|
|
666
|
-
var _a;
|
|
667
|
-
const annotationFQN = annotation.fullyQualifiedName;
|
|
668
|
-
// be graceful when resolving annotations on annotations: Sometimes they are referenced directly, sometimes they
|
|
669
|
-
// are part of the global annotations list
|
|
670
|
-
let annotations;
|
|
671
|
-
if (rawAnnotation.annotations && rawAnnotation.annotations.length > 0) {
|
|
672
|
-
annotations = rawAnnotation.annotations;
|
|
673
|
-
}
|
|
674
|
-
else {
|
|
675
|
-
annotations = (_a = converter.rawAnnotationsPerTarget[annotationFQN]) === null || _a === void 0 ? void 0 : _a.annotations;
|
|
676
|
-
}
|
|
677
|
-
annotations === null || annotations === void 0 ? void 0 : annotations.forEach((rawSubAnnotation) => {
|
|
678
|
-
rawSubAnnotation.target = annotationFQN;
|
|
679
|
-
rawSubAnnotation.__source = annotation.__source;
|
|
680
|
-
rawSubAnnotation[ANNOTATION_TARGET] = target;
|
|
681
|
-
rawSubAnnotation.fullyQualifiedName = `${annotationFQN}@${rawSubAnnotation.term}`;
|
|
682
|
-
});
|
|
683
|
-
return createAnnotationsObject(converter, annotation, annotations !== null && annotations !== void 0 ? annotations : []);
|
|
684
|
-
});
|
|
642
|
+
(0, utils_1.lazy)(annotation, 'annotations', resolveAnnotationsOnAnnotation(converter, rawAnnotation, annotation));
|
|
685
643
|
}
|
|
686
644
|
catch (e) {
|
|
687
645
|
// not an error: parseRecord() already adds annotations, but the other parseXXX functions don't, so this can happen
|
|
688
646
|
}
|
|
689
647
|
return annotation;
|
|
690
648
|
}
|
|
691
|
-
function getAnnotationFQN(currentTargetName, references, annotation) {
|
|
692
|
-
const annotationFQN = `${currentTargetName}@${(0, utils_1.unalias)(references, annotation.term)}`;
|
|
693
|
-
if (annotation.qualifier) {
|
|
694
|
-
return `${annotationFQN}#${annotation.qualifier}`;
|
|
695
|
-
}
|
|
696
|
-
else {
|
|
697
|
-
return annotationFQN;
|
|
698
|
-
}
|
|
699
|
-
}
|
|
700
649
|
/**
|
|
701
650
|
* Merge annotation from different source together by overwriting at the term level.
|
|
702
651
|
*
|
|
703
|
-
* @param
|
|
652
|
+
* @param converter
|
|
704
653
|
* @returns the resulting merged annotations
|
|
705
654
|
*/
|
|
706
|
-
function mergeAnnotations(
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
annotationList.__source = annotationSource;
|
|
712
|
-
if (!annotationListPerTarget[currentTargetName]) {
|
|
713
|
-
annotationListPerTarget[currentTargetName] = {
|
|
714
|
-
annotations: annotationList.annotations.map((annotation) => {
|
|
715
|
-
annotation.fullyQualifiedName = getAnnotationFQN(currentTargetName, rawMetadata.references, annotation);
|
|
716
|
-
annotation.__source = annotationSource;
|
|
717
|
-
return annotation;
|
|
718
|
-
}),
|
|
719
|
-
target: currentTargetName
|
|
720
|
-
};
|
|
721
|
-
annotationListPerTarget[currentTargetName].__source = annotationSource;
|
|
722
|
-
}
|
|
723
|
-
else {
|
|
724
|
-
annotationList.annotations.forEach((annotation) => {
|
|
725
|
-
const findIndex = annotationListPerTarget[currentTargetName].annotations.findIndex((referenceAnnotation) => {
|
|
726
|
-
return (referenceAnnotation.term === annotation.term &&
|
|
727
|
-
referenceAnnotation.qualifier === annotation.qualifier);
|
|
728
|
-
});
|
|
729
|
-
annotation.__source = annotationSource;
|
|
730
|
-
annotation.fullyQualifiedName = getAnnotationFQN(currentTargetName, rawMetadata.references, annotation);
|
|
731
|
-
if (findIndex !== -1) {
|
|
732
|
-
annotationListPerTarget[currentTargetName].annotations.splice(findIndex, 1, annotation);
|
|
733
|
-
}
|
|
734
|
-
else {
|
|
735
|
-
annotationListPerTarget[currentTargetName].annotations.push(annotation);
|
|
736
|
-
}
|
|
737
|
-
});
|
|
655
|
+
function mergeAnnotations(converter) {
|
|
656
|
+
return Object.keys(converter.rawSchema.annotations).reduceRight((annotationsPerTarget, annotationSource) => {
|
|
657
|
+
for (const { target, annotations: rawAnnotations } of converter.rawSchema.annotations[annotationSource]) {
|
|
658
|
+
if (!annotationsPerTarget[target]) {
|
|
659
|
+
annotationsPerTarget[target] = [];
|
|
738
660
|
}
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
661
|
+
annotationsPerTarget[target].push(...rawAnnotations
|
|
662
|
+
.filter((rawAnnotation) => !annotationsPerTarget[target].some((existingAnnotation) => existingAnnotation.term === rawAnnotation.term &&
|
|
663
|
+
existingAnnotation.qualifier === rawAnnotation.qualifier))
|
|
664
|
+
.map((rawAnnotation) => {
|
|
665
|
+
let annotationFQN = `${target}@${converter.unalias(rawAnnotation.term)}`;
|
|
666
|
+
if (rawAnnotation.qualifier) {
|
|
667
|
+
annotationFQN = `${annotationFQN}#${rawAnnotation.qualifier}`;
|
|
668
|
+
}
|
|
669
|
+
const annotation = rawAnnotation;
|
|
670
|
+
annotation.fullyQualifiedName = annotationFQN;
|
|
671
|
+
annotation.__source = annotationSource;
|
|
672
|
+
return annotation;
|
|
673
|
+
}));
|
|
674
|
+
}
|
|
675
|
+
return annotationsPerTarget;
|
|
676
|
+
}, {});
|
|
742
677
|
}
|
|
743
678
|
class Converter {
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
679
|
+
/**
|
|
680
|
+
* Get preprocessed annotations on the specified target.
|
|
681
|
+
*
|
|
682
|
+
* @param target The annotation target
|
|
683
|
+
* @returns An array of annotations
|
|
684
|
+
*/
|
|
685
|
+
getAnnotations(target) {
|
|
686
|
+
var _a;
|
|
687
|
+
if (this.annotationsByTarget === undefined) {
|
|
688
|
+
this.annotationsByTarget = mergeAnnotations(this);
|
|
747
689
|
}
|
|
748
|
-
return this.
|
|
690
|
+
return (_a = this.annotationsByTarget[target]) !== null && _a !== void 0 ? _a : [];
|
|
749
691
|
}
|
|
750
692
|
getConvertedEntityContainer() {
|
|
751
693
|
return this.getConvertedElement(this.rawMetadata.schema.entityContainer.fullyQualifiedName, this.rawMetadata.schema.entityContainer, convertEntityContainer);
|
|
@@ -814,15 +756,19 @@ class Converter {
|
|
|
814
756
|
logError(message) {
|
|
815
757
|
this.convertedOutput.diagnostics.push({ message });
|
|
816
758
|
}
|
|
759
|
+
/**
|
|
760
|
+
* Split the alias from the term value.
|
|
761
|
+
*
|
|
762
|
+
* @param term the value of the term
|
|
763
|
+
* @returns the term alias and the actual term value
|
|
764
|
+
*/
|
|
817
765
|
splitTerm(term) {
|
|
818
|
-
|
|
766
|
+
const aliased = (0, utils_1.alias)(VocabularyReferences_1.VocabularyReferences, term);
|
|
767
|
+
return (0, utils_1.splitAtLast)(aliased, '.');
|
|
819
768
|
}
|
|
820
|
-
|
|
821
|
-
return (0, utils_1.alias)(this.rawMetadata.references, value);
|
|
822
|
-
}
|
|
823
|
-
unalias(value) {
|
|
769
|
+
unalias(value, references = this.rawMetadata.references) {
|
|
824
770
|
var _a;
|
|
825
|
-
return (_a = (0, utils_1.unalias)(
|
|
771
|
+
return (_a = (0, utils_1.unalias)(references, value, this.rawSchema.namespace)) !== null && _a !== void 0 ? _a : '';
|
|
826
772
|
}
|
|
827
773
|
}
|
|
828
774
|
function resolveEntityType(converter, fullyQualifiedName) {
|
|
@@ -857,9 +803,27 @@ function resolveNavigationPropertyBindings(converter, rawNavigationPropertyBindi
|
|
|
857
803
|
}
|
|
858
804
|
function resolveAnnotations(converter, rawAnnotationTarget) {
|
|
859
805
|
const nestedAnnotations = rawAnnotationTarget.annotations;
|
|
806
|
+
return () => createAnnotationsObject(converter, rawAnnotationTarget, nestedAnnotations !== null && nestedAnnotations !== void 0 ? nestedAnnotations : converter.getAnnotations(rawAnnotationTarget.fullyQualifiedName));
|
|
807
|
+
}
|
|
808
|
+
function resolveAnnotationsOnAnnotation(converter, annotationRecord, annotationTerm) {
|
|
860
809
|
return () => {
|
|
861
|
-
|
|
862
|
-
|
|
810
|
+
const currentFQN = annotationTerm.fullyQualifiedName;
|
|
811
|
+
// be graceful when resolving annotations on annotations: Sometimes they are referenced directly, sometimes they
|
|
812
|
+
// are part of the global annotations list
|
|
813
|
+
let annotations;
|
|
814
|
+
if (annotationRecord.annotations && annotationRecord.annotations.length > 0) {
|
|
815
|
+
annotations = annotationRecord.annotations;
|
|
816
|
+
}
|
|
817
|
+
else {
|
|
818
|
+
annotations = converter.getAnnotations(currentFQN);
|
|
819
|
+
}
|
|
820
|
+
annotations === null || annotations === void 0 ? void 0 : annotations.forEach((annotation) => {
|
|
821
|
+
annotation.target = currentFQN;
|
|
822
|
+
annotation.__source = annotationTerm.__source;
|
|
823
|
+
annotation[ANNOTATION_TARGET] = annotationTerm[ANNOTATION_TARGET];
|
|
824
|
+
annotation.fullyQualifiedName = `${currentFQN}@${annotation.term}`;
|
|
825
|
+
});
|
|
826
|
+
return createAnnotationsObject(converter, annotationTerm, annotations !== null && annotations !== void 0 ? annotations : []);
|
|
863
827
|
};
|
|
864
828
|
}
|
|
865
829
|
function createAnnotationsObject(converter, target, rawAnnotations) {
|
|
@@ -899,7 +863,6 @@ function convertEntityContainer(converter, rawEntityContainer) {
|
|
|
899
863
|
*/
|
|
900
864
|
function convertSingleton(converter, rawSingleton) {
|
|
901
865
|
const convertedSingleton = rawSingleton;
|
|
902
|
-
convertedSingleton.entityTypeName = converter.unalias(rawSingleton.entityTypeName);
|
|
903
866
|
(0, utils_1.lazy)(convertedSingleton, 'entityType', resolveEntityType(converter, rawSingleton.entityTypeName));
|
|
904
867
|
(0, utils_1.lazy)(convertedSingleton, 'annotations', resolveAnnotations(converter, rawSingleton));
|
|
905
868
|
const _rawNavigationPropertyBindings = rawSingleton.navigationPropertyBinding;
|
|
@@ -915,7 +878,6 @@ function convertSingleton(converter, rawSingleton) {
|
|
|
915
878
|
*/
|
|
916
879
|
function convertEntitySet(converter, rawEntitySet) {
|
|
917
880
|
const convertedEntitySet = rawEntitySet;
|
|
918
|
-
convertedEntitySet.entityTypeName = converter.unalias(rawEntitySet.entityTypeName);
|
|
919
881
|
(0, utils_1.lazy)(convertedEntitySet, 'entityType', resolveEntityType(converter, rawEntitySet.entityTypeName));
|
|
920
882
|
(0, utils_1.lazy)(convertedEntitySet, 'annotations', resolveAnnotations(converter, rawEntitySet));
|
|
921
883
|
const _rawNavigationPropertyBindings = rawEntitySet.navigationPropertyBinding;
|
|
@@ -967,7 +929,6 @@ function convertEntityType(converter, rawEntityType) {
|
|
|
967
929
|
*/
|
|
968
930
|
function convertProperty(converter, rawProperty) {
|
|
969
931
|
const convertedProperty = rawProperty;
|
|
970
|
-
convertedProperty.type = converter.unalias(rawProperty.type);
|
|
971
932
|
(0, utils_1.lazy)(convertedProperty, 'annotations', resolveAnnotations(converter, rawProperty));
|
|
972
933
|
(0, utils_1.lazy)(convertedProperty, 'targetType', () => {
|
|
973
934
|
var _a;
|
|
@@ -988,10 +949,7 @@ function convertNavigationProperty(converter, rawNavigationProperty) {
|
|
|
988
949
|
var _a, _b, _c;
|
|
989
950
|
const convertedNavigationProperty = rawNavigationProperty;
|
|
990
951
|
convertedNavigationProperty.referentialConstraint = (_a = convertedNavigationProperty.referentialConstraint) !== null && _a !== void 0 ? _a : [];
|
|
991
|
-
if (isV4NavigationProperty(rawNavigationProperty)) {
|
|
992
|
-
convertedNavigationProperty.targetTypeName = converter.unalias(rawNavigationProperty.targetTypeName);
|
|
993
|
-
}
|
|
994
|
-
else {
|
|
952
|
+
if (!isV4NavigationProperty(rawNavigationProperty)) {
|
|
995
953
|
const associationEnd = (_b = converter.rawSchema.associations
|
|
996
954
|
.find((association) => association.fullyQualifiedName === rawNavigationProperty.relationship)) === null || _b === void 0 ? void 0 : _b.associationEnd.find((end) => end.role === rawNavigationProperty.toRole);
|
|
997
955
|
convertedNavigationProperty.isCollection = (associationEnd === null || associationEnd === void 0 ? void 0 : associationEnd.multiplicity) === '*';
|
|
@@ -1010,7 +968,6 @@ function convertNavigationProperty(converter, rawNavigationProperty) {
|
|
|
1010
968
|
*/
|
|
1011
969
|
function convertActionImport(converter, rawActionImport) {
|
|
1012
970
|
const convertedActionImport = rawActionImport;
|
|
1013
|
-
convertedActionImport.actionName = converter.unalias(rawActionImport.actionName);
|
|
1014
971
|
(0, utils_1.lazy)(convertedActionImport, 'annotations', resolveAnnotations(converter, rawActionImport));
|
|
1015
972
|
(0, utils_1.lazy)(convertedActionImport, 'action', () => converter.getConvertedAction(rawActionImport.actionName));
|
|
1016
973
|
return convertedActionImport;
|
|
@@ -1024,33 +981,24 @@ function convertActionImport(converter, rawActionImport) {
|
|
|
1024
981
|
*/
|
|
1025
982
|
function convertAction(converter, rawAction) {
|
|
1026
983
|
const convertedAction = rawAction;
|
|
1027
|
-
convertedAction.sourceType = converter.unalias(rawAction.sourceType);
|
|
1028
984
|
if (convertedAction.sourceType) {
|
|
1029
985
|
(0, utils_1.lazy)(convertedAction, 'sourceEntityType', resolveEntityType(converter, rawAction.sourceType));
|
|
1030
986
|
}
|
|
1031
|
-
convertedAction.returnType = converter.unalias(rawAction.returnType);
|
|
1032
987
|
if (convertedAction.returnType) {
|
|
1033
988
|
(0, utils_1.lazy)(convertedAction, 'returnEntityType', resolveEntityType(converter, rawAction.returnType));
|
|
1034
989
|
}
|
|
1035
990
|
(0, utils_1.lazy)(convertedAction, 'parameters', converter.convert(rawAction.parameters, convertActionParameter));
|
|
1036
991
|
(0, utils_1.lazy)(convertedAction, 'annotations', () => {
|
|
1037
|
-
|
|
1038
|
-
//
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
else {
|
|
1048
|
-
rawAnnotations =
|
|
1049
|
-
(_f = (_e = converter.rawAnnotationsPerTarget[`${(_d = actionAndOverload.groups) === null || _d === void 0 ? void 0 : _d.action}()`]) === null || _e === void 0 ? void 0 : _e.annotations) !== null && _f !== void 0 ? _f : [];
|
|
1050
|
-
}
|
|
1051
|
-
if (((_g = actionAndOverload.groups) === null || _g === void 0 ? void 0 : _g.action) && ((_h = actionAndOverload.groups) === null || _h === void 0 ? void 0 : _h.action) !== rawAction.fullyQualifiedName) {
|
|
1052
|
-
const baseAnnotations = (_l = (_k = converter.rawAnnotationsPerTarget[(_j = actionAndOverload.groups) === null || _j === void 0 ? void 0 : _j.action]) === null || _k === void 0 ? void 0 : _k.annotations) !== null && _l !== void 0 ? _l : [];
|
|
1053
|
-
rawAnnotations = rawAnnotations.concat(baseAnnotations);
|
|
992
|
+
const action = (0, utils_1.substringBeforeFirst)(rawAction.fullyQualifiedName, '(');
|
|
993
|
+
// if the action is unbound (e.g. "myAction"), the annotation target is "myAction()"
|
|
994
|
+
const annotationTargetFQN = rawAction.isBound
|
|
995
|
+
? rawAction.fullyQualifiedName
|
|
996
|
+
: `${rawAction.fullyQualifiedName}()`;
|
|
997
|
+
const rawAnnotations = converter.getAnnotations(annotationTargetFQN);
|
|
998
|
+
const baseAnnotations = converter.getAnnotations(action);
|
|
999
|
+
for (const baseAnnotation of baseAnnotations) {
|
|
1000
|
+
if (!rawAnnotations.some((annotation) => annotation.term === baseAnnotation.term && annotation.qualifier === baseAnnotation.qualifier)) {
|
|
1001
|
+
rawAnnotations.push(baseAnnotation);
|
|
1054
1002
|
}
|
|
1055
1003
|
}
|
|
1056
1004
|
return createAnnotationsObject(converter, rawAction, rawAnnotations);
|
|
@@ -1106,18 +1054,18 @@ function convertTypeDefinition(converter, rawTypeDefinition) {
|
|
|
1106
1054
|
* @returns the converted representation of the metadata.
|
|
1107
1055
|
*/
|
|
1108
1056
|
function convert(rawMetadata) {
|
|
1109
|
-
// fall back on the default references if the caller does not specify any
|
|
1110
|
-
if (rawMetadata.references.length === 0) {
|
|
1111
|
-
rawMetadata.references = utils_1.defaultReferences;
|
|
1112
|
-
}
|
|
1113
1057
|
// Converter Output
|
|
1114
1058
|
const convertedOutput = {
|
|
1115
1059
|
version: rawMetadata.version,
|
|
1116
1060
|
namespace: rawMetadata.schema.namespace,
|
|
1117
1061
|
annotations: rawMetadata.schema.annotations,
|
|
1118
|
-
references:
|
|
1062
|
+
references: VocabularyReferences_1.VocabularyReferences.concat(rawMetadata.references),
|
|
1119
1063
|
diagnostics: []
|
|
1120
1064
|
};
|
|
1065
|
+
// fall back on the default references if the caller does not specify any
|
|
1066
|
+
if (rawMetadata.references.length === 0) {
|
|
1067
|
+
rawMetadata.references = VocabularyReferences_1.VocabularyReferences;
|
|
1068
|
+
}
|
|
1121
1069
|
// Converter
|
|
1122
1070
|
const converter = new Converter(rawMetadata, convertedOutput);
|
|
1123
1071
|
(0, utils_1.lazy)(convertedOutput, 'entityContainer', converter.convert(converter.rawSchema.entityContainer, convertEntityContainer));
|
|
@@ -1142,7 +1090,7 @@ exports.convert = convert;
|
|
|
1142
1090
|
|
|
1143
1091
|
/***/ }),
|
|
1144
1092
|
|
|
1145
|
-
/***/
|
|
1093
|
+
/***/ 878:
|
|
1146
1094
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
1147
1095
|
|
|
1148
1096
|
|
|
@@ -1161,34 +1109,25 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
1161
1109
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
1162
1110
|
};
|
|
1163
1111
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
1164
|
-
__exportStar(__webpack_require__(
|
|
1165
|
-
__exportStar(__webpack_require__(
|
|
1166
|
-
__exportStar(__webpack_require__(
|
|
1112
|
+
__exportStar(__webpack_require__(175), exports);
|
|
1113
|
+
__exportStar(__webpack_require__(168), exports);
|
|
1114
|
+
__exportStar(__webpack_require__(311), exports);
|
|
1167
1115
|
|
|
1168
1116
|
|
|
1169
1117
|
/***/ }),
|
|
1170
1118
|
|
|
1171
|
-
/***/
|
|
1172
|
-
/***/ (function(__unused_webpack_module, exports) {
|
|
1119
|
+
/***/ 168:
|
|
1120
|
+
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
1173
1121
|
|
|
1174
1122
|
|
|
1175
1123
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
1176
|
-
exports.addGetByValue = exports.createIndexedFind = exports.lazy = exports.Decimal = exports.isComplexTypeDefinition = exports.
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
{ namespace: 'com.sap.vocabularies.Common.v1', alias: 'Common', uri: '' },
|
|
1184
|
-
{ namespace: 'com.sap.vocabularies.UI.v1', alias: 'UI', uri: '' },
|
|
1185
|
-
{ namespace: 'com.sap.vocabularies.Session.v1', alias: 'Session', uri: '' },
|
|
1186
|
-
{ namespace: 'com.sap.vocabularies.Analytics.v1', alias: 'Analytics', uri: '' },
|
|
1187
|
-
{ namespace: 'com.sap.vocabularies.CodeList.v1', alias: 'CodeList', uri: '' },
|
|
1188
|
-
{ namespace: 'com.sap.vocabularies.PersonalData.v1', alias: 'PersonalData', uri: '' },
|
|
1189
|
-
{ namespace: 'com.sap.vocabularies.Communication.v1', alias: 'Communication', uri: '' },
|
|
1190
|
-
{ namespace: 'com.sap.vocabularies.HTML5.v1', alias: 'HTML5', uri: '' }
|
|
1191
|
-
];
|
|
1124
|
+
exports.addGetByValue = exports.createIndexedFind = exports.lazy = exports.Decimal = exports.isComplexTypeDefinition = exports.unalias = exports.alias = exports.substringBeforeLast = exports.substringBeforeFirst = exports.splitAtLast = exports.splitAtFirst = exports.defaultReferences = exports.TermToTypes = exports.EnumIsFlag = void 0;
|
|
1125
|
+
var EnumIsFlag_1 = __webpack_require__(830);
|
|
1126
|
+
Object.defineProperty(exports, "EnumIsFlag", ({ enumerable: true, get: function () { return EnumIsFlag_1.EnumIsFlag; } }));
|
|
1127
|
+
var TermToTypes_1 = __webpack_require__(377);
|
|
1128
|
+
Object.defineProperty(exports, "TermToTypes", ({ enumerable: true, get: function () { return TermToTypes_1.TermToTypes; } }));
|
|
1129
|
+
var VocabularyReferences_1 = __webpack_require__(899);
|
|
1130
|
+
Object.defineProperty(exports, "defaultReferences", ({ enumerable: true, get: function () { return VocabularyReferences_1.VocabularyReferences; } }));
|
|
1192
1131
|
function splitAt(string, index) {
|
|
1193
1132
|
return index < 0 ? [string, ''] : [string.substring(0, index), string.substring(index + 1)];
|
|
1194
1133
|
}
|
|
@@ -1272,467 +1211,190 @@ function alias(references, unaliasedValue) {
|
|
|
1272
1211
|
}
|
|
1273
1212
|
exports.alias = alias;
|
|
1274
1213
|
/**
|
|
1275
|
-
* Transform an aliased string
|
|
1214
|
+
* Transform an aliased string to its unaliased version given a set of references.
|
|
1276
1215
|
*
|
|
1277
|
-
* @param references
|
|
1278
|
-
* @param aliasedValue
|
|
1279
|
-
* @
|
|
1216
|
+
* @param references The references to use for unaliasing.
|
|
1217
|
+
* @param aliasedValue The aliased value
|
|
1218
|
+
* @param namespace The fallback namespace
|
|
1219
|
+
* @returns The equal unaliased string.
|
|
1280
1220
|
*/
|
|
1281
|
-
function unalias(references, aliasedValue) {
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
}
|
|
1221
|
+
function unalias(references, aliasedValue, namespace) {
|
|
1222
|
+
var _a;
|
|
1223
|
+
const _unalias = (value) => {
|
|
1224
|
+
if (!references.referenceMap) {
|
|
1225
|
+
references.referenceMap = Object.fromEntries(references.map((ref) => [ref.alias, ref]));
|
|
1226
|
+
}
|
|
1227
|
+
// Aliases are of type 'SimpleIdentifier' and must not contain dots
|
|
1228
|
+
const [maybeAlias, rest] = splitAtFirst(value, '.');
|
|
1229
|
+
if (!rest || rest.includes('.')) {
|
|
1230
|
+
// either there is no dot in the value or there is more than one --> nothing to do
|
|
1231
|
+
return value;
|
|
1232
|
+
}
|
|
1233
|
+
const isAnnotation = maybeAlias.startsWith('@');
|
|
1234
|
+
const valueToUnalias = isAnnotation ? maybeAlias.substring(1) : maybeAlias;
|
|
1235
|
+
const knownReference = references.referenceMap[valueToUnalias];
|
|
1236
|
+
if (knownReference) {
|
|
1237
|
+
return isAnnotation ? `@${knownReference.namespace}.${rest}` : `${knownReference.namespace}.${rest}`;
|
|
1238
|
+
}
|
|
1239
|
+
// The alias could not be resolved using the references. Assume it is the "global" alias (= namespace)
|
|
1240
|
+
return namespace && !isAnnotation ? `${namespace}.${rest}` : value;
|
|
1241
|
+
};
|
|
1242
|
+
return (_a = aliasedValue === null || aliasedValue === void 0 ? void 0 : aliasedValue.split('/').reduce((segments, segment) => {
|
|
1243
|
+
// the segment could be an action, like "doSomething(foo.bar)"
|
|
1244
|
+
const [first, rest] = splitAtFirst(segment, '(');
|
|
1245
|
+
const subSegment = [_unalias(first)];
|
|
1246
|
+
if (rest) {
|
|
1247
|
+
const parameter = rest.slice(0, -1); // remove trailing ")"
|
|
1248
|
+
subSegment.push(`(${_unalias(parameter)})`);
|
|
1249
|
+
}
|
|
1250
|
+
segments.push(subSegment.join(''));
|
|
1251
|
+
return segments;
|
|
1252
|
+
}, [])) === null || _a === void 0 ? void 0 : _a.join('/');
|
|
1253
|
+
}
|
|
1254
|
+
exports.unalias = unalias;
|
|
1255
|
+
/**
|
|
1256
|
+
* Differentiate between a ComplexType and a TypeDefinition.
|
|
1257
|
+
*
|
|
1258
|
+
* @param complexTypeDefinition
|
|
1259
|
+
* @returns true if the value is a complex type
|
|
1260
|
+
*/
|
|
1261
|
+
function isComplexTypeDefinition(complexTypeDefinition) {
|
|
1262
|
+
return (!!complexTypeDefinition && complexTypeDefinition._type === 'ComplexType' && !!complexTypeDefinition.properties);
|
|
1263
|
+
}
|
|
1264
|
+
exports.isComplexTypeDefinition = isComplexTypeDefinition;
|
|
1265
|
+
function Decimal(value) {
|
|
1266
|
+
return {
|
|
1267
|
+
isDecimal() {
|
|
1268
|
+
return true;
|
|
1269
|
+
},
|
|
1270
|
+
valueOf() {
|
|
1271
|
+
return value;
|
|
1272
|
+
},
|
|
1273
|
+
toString() {
|
|
1274
|
+
return value.toString();
|
|
1275
|
+
}
|
|
1276
|
+
};
|
|
1277
|
+
}
|
|
1278
|
+
exports.Decimal = Decimal;
|
|
1279
|
+
/**
|
|
1280
|
+
* Defines a lazy property.
|
|
1281
|
+
*
|
|
1282
|
+
* The property is initialized by calling the init function on the first read access, or by directly assigning a value.
|
|
1283
|
+
*
|
|
1284
|
+
* @param object The host object
|
|
1285
|
+
* @param property The lazy property to add
|
|
1286
|
+
* @param init The function that initializes the property's value
|
|
1287
|
+
*/
|
|
1288
|
+
function lazy(object, property, init) {
|
|
1289
|
+
const initial = Symbol('initial');
|
|
1290
|
+
let _value = initial;
|
|
1291
|
+
Object.defineProperty(object, property, {
|
|
1292
|
+
enumerable: true,
|
|
1293
|
+
get() {
|
|
1294
|
+
if (_value === initial) {
|
|
1295
|
+
_value = init();
|
|
1296
|
+
}
|
|
1297
|
+
return _value;
|
|
1298
|
+
},
|
|
1299
|
+
set(value) {
|
|
1300
|
+
_value = value;
|
|
1301
|
+
}
|
|
1302
|
+
});
|
|
1303
|
+
}
|
|
1304
|
+
exports.lazy = lazy;
|
|
1305
|
+
/**
|
|
1306
|
+
* Creates a function that allows to find an array element by property value.
|
|
1307
|
+
*
|
|
1308
|
+
* @param array The array
|
|
1309
|
+
* @param property Elements in the array are searched by this property
|
|
1310
|
+
* @returns A function that can be used to find an element of the array by property value.
|
|
1311
|
+
*/
|
|
1312
|
+
function createIndexedFind(array, property) {
|
|
1313
|
+
const index = new Map();
|
|
1314
|
+
return function find(value) {
|
|
1315
|
+
const element = index.get(value);
|
|
1316
|
+
if ((element === null || element === void 0 ? void 0 : element[property]) === value) {
|
|
1317
|
+
return element;
|
|
1318
|
+
}
|
|
1319
|
+
return array.find((element) => {
|
|
1320
|
+
if (!(element === null || element === void 0 ? void 0 : element.hasOwnProperty(property))) {
|
|
1321
|
+
return false;
|
|
1322
|
+
}
|
|
1323
|
+
const propertyValue = element[property];
|
|
1324
|
+
index.set(propertyValue, element);
|
|
1325
|
+
return propertyValue === value;
|
|
1326
|
+
});
|
|
1327
|
+
};
|
|
1328
|
+
}
|
|
1329
|
+
exports.createIndexedFind = createIndexedFind;
|
|
1330
|
+
/**
|
|
1331
|
+
* Adds a 'get by value' function to an array.
|
|
1332
|
+
*
|
|
1333
|
+
* If this function is called with addIndex(myArray, 'name'), a new function 'by_name(value)' will be added that allows to
|
|
1334
|
+
* find a member of the array by the value of its 'name' property.
|
|
1335
|
+
*
|
|
1336
|
+
* @param array The array
|
|
1337
|
+
* @param property The property that will be used by the 'by_{property}()' function
|
|
1338
|
+
* @returns The array with the added function
|
|
1339
|
+
*/
|
|
1340
|
+
function addGetByValue(array, property) {
|
|
1341
|
+
const indexName = `by_${property}`;
|
|
1342
|
+
if (!array.hasOwnProperty(indexName)) {
|
|
1343
|
+
Object.defineProperty(array, indexName, { writable: false, value: createIndexedFind(array, property) });
|
|
1287
1344
|
}
|
|
1288
|
-
|
|
1289
|
-
|
|
1345
|
+
else {
|
|
1346
|
+
throw new Error(`Property '${indexName}' already exists`);
|
|
1290
1347
|
}
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1348
|
+
return array;
|
|
1349
|
+
}
|
|
1350
|
+
exports.addGetByValue = addGetByValue;
|
|
1351
|
+
|
|
1352
|
+
|
|
1353
|
+
/***/ }),
|
|
1354
|
+
|
|
1355
|
+
/***/ 311:
|
|
1356
|
+
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
1357
|
+
|
|
1358
|
+
|
|
1359
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
1360
|
+
exports.revertTermToGenericType = void 0;
|
|
1361
|
+
const utils_1 = __webpack_require__(168);
|
|
1362
|
+
/**
|
|
1363
|
+
* Revert an object to its raw type equivalent.
|
|
1364
|
+
*
|
|
1365
|
+
* @param references the current reference
|
|
1366
|
+
* @param value the value to revert
|
|
1367
|
+
* @returns the raw value
|
|
1368
|
+
*/
|
|
1369
|
+
function revertObjectToRawType(references, value) {
|
|
1370
|
+
var _a, _b, _c, _d, _e, _f;
|
|
1371
|
+
let result;
|
|
1372
|
+
if (Array.isArray(value)) {
|
|
1373
|
+
result = {
|
|
1374
|
+
type: 'Collection',
|
|
1375
|
+
Collection: value.map((anno) => revertCollectionItemToRawType(references, anno))
|
|
1376
|
+
};
|
|
1295
1377
|
}
|
|
1296
|
-
else if (
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1378
|
+
else if ((_a = value.isDecimal) === null || _a === void 0 ? void 0 : _a.call(value)) {
|
|
1379
|
+
result = {
|
|
1380
|
+
type: 'Decimal',
|
|
1381
|
+
Decimal: value.valueOf()
|
|
1382
|
+
};
|
|
1300
1383
|
}
|
|
1301
|
-
else {
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
'Capabilities.HttpMethod': true,
|
|
1316
|
-
'Aggregation.RollupType': false,
|
|
1317
|
-
'Common.TextFormatType': false,
|
|
1318
|
-
'Common.FilterExpressionType': false,
|
|
1319
|
-
'Common.FieldControlType': false,
|
|
1320
|
-
'Common.EffectType': true,
|
|
1321
|
-
'Communication.KindType': false,
|
|
1322
|
-
'Communication.ContactInformationType': true,
|
|
1323
|
-
'Communication.PhoneType': true,
|
|
1324
|
-
'Communication.GenderType': false,
|
|
1325
|
-
'UI.VisualizationType': false,
|
|
1326
|
-
'UI.CriticalityType': false,
|
|
1327
|
-
'UI.ImprovementDirectionType': false,
|
|
1328
|
-
'UI.TrendType': false,
|
|
1329
|
-
'UI.ChartType': false,
|
|
1330
|
-
'UI.ChartAxisScaleBehaviorType': false,
|
|
1331
|
-
'UI.ChartAxisAutoScaleDataScopeType': false,
|
|
1332
|
-
'UI.ChartDimensionRoleType': false,
|
|
1333
|
-
'UI.ChartMeasureRoleType': false,
|
|
1334
|
-
'UI.SelectionRangeSignType': false,
|
|
1335
|
-
'UI.SelectionRangeOptionType': false,
|
|
1336
|
-
'UI.TextArrangementType': false,
|
|
1337
|
-
'UI.ImportanceType': false,
|
|
1338
|
-
'UI.CriticalityRepresentationType': false,
|
|
1339
|
-
'UI.OperationGroupingType': false
|
|
1340
|
-
};
|
|
1341
|
-
var TermToTypes;
|
|
1342
|
-
(function (TermToTypes) {
|
|
1343
|
-
TermToTypes["Org.OData.Authorization.V1.SecuritySchemes"] = "Org.OData.Authorization.V1.SecurityScheme";
|
|
1344
|
-
TermToTypes["Org.OData.Authorization.V1.Authorizations"] = "Org.OData.Authorization.V1.Authorization";
|
|
1345
|
-
TermToTypes["Org.OData.Core.V1.Revisions"] = "Org.OData.Core.V1.RevisionType";
|
|
1346
|
-
TermToTypes["Org.OData.Core.V1.Links"] = "Org.OData.Core.V1.Link";
|
|
1347
|
-
TermToTypes["Org.OData.Core.V1.Example"] = "Org.OData.Core.V1.ExampleValue";
|
|
1348
|
-
TermToTypes["Org.OData.Core.V1.Messages"] = "Org.OData.Core.V1.MessageType";
|
|
1349
|
-
TermToTypes["Org.OData.Core.V1.ValueException"] = "Org.OData.Core.V1.ValueExceptionType";
|
|
1350
|
-
TermToTypes["Org.OData.Core.V1.ResourceException"] = "Org.OData.Core.V1.ResourceExceptionType";
|
|
1351
|
-
TermToTypes["Org.OData.Core.V1.DataModificationException"] = "Org.OData.Core.V1.DataModificationExceptionType";
|
|
1352
|
-
TermToTypes["Org.OData.Core.V1.IsLanguageDependent"] = "Org.OData.Core.V1.Tag";
|
|
1353
|
-
TermToTypes["Org.OData.Core.V1.AppliesViaContainer"] = "Org.OData.Core.V1.Tag";
|
|
1354
|
-
TermToTypes["Org.OData.Core.V1.DereferenceableIDs"] = "Org.OData.Core.V1.Tag";
|
|
1355
|
-
TermToTypes["Org.OData.Core.V1.ConventionalIDs"] = "Org.OData.Core.V1.Tag";
|
|
1356
|
-
TermToTypes["Org.OData.Core.V1.Permissions"] = "Org.OData.Core.V1.Permission";
|
|
1357
|
-
TermToTypes["Org.OData.Core.V1.DefaultNamespace"] = "Org.OData.Core.V1.Tag";
|
|
1358
|
-
TermToTypes["Org.OData.Core.V1.Immutable"] = "Org.OData.Core.V1.Tag";
|
|
1359
|
-
TermToTypes["Org.OData.Core.V1.Computed"] = "Org.OData.Core.V1.Tag";
|
|
1360
|
-
TermToTypes["Org.OData.Core.V1.ComputedDefaultValue"] = "Org.OData.Core.V1.Tag";
|
|
1361
|
-
TermToTypes["Org.OData.Core.V1.IsURL"] = "Org.OData.Core.V1.Tag";
|
|
1362
|
-
TermToTypes["Org.OData.Core.V1.IsMediaType"] = "Org.OData.Core.V1.Tag";
|
|
1363
|
-
TermToTypes["Org.OData.Core.V1.ContentDisposition"] = "Org.OData.Core.V1.ContentDispositionType";
|
|
1364
|
-
TermToTypes["Org.OData.Core.V1.OptimisticConcurrency"] = "Edm.PropertyPath";
|
|
1365
|
-
TermToTypes["Org.OData.Core.V1.AdditionalProperties"] = "Org.OData.Core.V1.Tag";
|
|
1366
|
-
TermToTypes["Org.OData.Core.V1.AutoExpand"] = "Org.OData.Core.V1.Tag";
|
|
1367
|
-
TermToTypes["Org.OData.Core.V1.AutoExpandReferences"] = "Org.OData.Core.V1.Tag";
|
|
1368
|
-
TermToTypes["Org.OData.Core.V1.MayImplement"] = "Org.OData.Core.V1.QualifiedTypeName";
|
|
1369
|
-
TermToTypes["Org.OData.Core.V1.Ordered"] = "Org.OData.Core.V1.Tag";
|
|
1370
|
-
TermToTypes["Org.OData.Core.V1.PositionalInsert"] = "Org.OData.Core.V1.Tag";
|
|
1371
|
-
TermToTypes["Org.OData.Core.V1.AlternateKeys"] = "Org.OData.Core.V1.AlternateKey";
|
|
1372
|
-
TermToTypes["Org.OData.Core.V1.OptionalParameter"] = "Org.OData.Core.V1.OptionalParameterType";
|
|
1373
|
-
TermToTypes["Org.OData.Core.V1.OperationAvailable"] = "Edm.Boolean";
|
|
1374
|
-
TermToTypes["Org.OData.Core.V1.SymbolicName"] = "Org.OData.Core.V1.SimpleIdentifier";
|
|
1375
|
-
TermToTypes["Org.OData.Core.V1.GeometryFeature"] = "Org.OData.Core.V1.GeometryFeatureType";
|
|
1376
|
-
TermToTypes["Org.OData.Capabilities.V1.ConformanceLevel"] = "Org.OData.Capabilities.V1.ConformanceLevelType";
|
|
1377
|
-
TermToTypes["Org.OData.Capabilities.V1.AsynchronousRequestsSupported"] = "Org.OData.Core.V1.Tag";
|
|
1378
|
-
TermToTypes["Org.OData.Capabilities.V1.BatchContinueOnErrorSupported"] = "Org.OData.Core.V1.Tag";
|
|
1379
|
-
TermToTypes["Org.OData.Capabilities.V1.IsolationSupported"] = "Org.OData.Capabilities.V1.IsolationLevel";
|
|
1380
|
-
TermToTypes["Org.OData.Capabilities.V1.CrossJoinSupported"] = "Org.OData.Core.V1.Tag";
|
|
1381
|
-
TermToTypes["Org.OData.Capabilities.V1.CallbackSupported"] = "Org.OData.Capabilities.V1.CallbackType";
|
|
1382
|
-
TermToTypes["Org.OData.Capabilities.V1.ChangeTracking"] = "Org.OData.Capabilities.V1.ChangeTrackingType";
|
|
1383
|
-
TermToTypes["Org.OData.Capabilities.V1.CountRestrictions"] = "Org.OData.Capabilities.V1.CountRestrictionsType";
|
|
1384
|
-
TermToTypes["Org.OData.Capabilities.V1.NavigationRestrictions"] = "Org.OData.Capabilities.V1.NavigationRestrictionsType";
|
|
1385
|
-
TermToTypes["Org.OData.Capabilities.V1.IndexableByKey"] = "Org.OData.Core.V1.Tag";
|
|
1386
|
-
TermToTypes["Org.OData.Capabilities.V1.TopSupported"] = "Org.OData.Core.V1.Tag";
|
|
1387
|
-
TermToTypes["Org.OData.Capabilities.V1.SkipSupported"] = "Org.OData.Core.V1.Tag";
|
|
1388
|
-
TermToTypes["Org.OData.Capabilities.V1.ComputeSupported"] = "Org.OData.Core.V1.Tag";
|
|
1389
|
-
TermToTypes["Org.OData.Capabilities.V1.SelectSupport"] = "Org.OData.Capabilities.V1.SelectSupportType";
|
|
1390
|
-
TermToTypes["Org.OData.Capabilities.V1.BatchSupported"] = "Org.OData.Core.V1.Tag";
|
|
1391
|
-
TermToTypes["Org.OData.Capabilities.V1.BatchSupport"] = "Org.OData.Capabilities.V1.BatchSupportType";
|
|
1392
|
-
TermToTypes["Org.OData.Capabilities.V1.FilterRestrictions"] = "Org.OData.Capabilities.V1.FilterRestrictionsType";
|
|
1393
|
-
TermToTypes["Org.OData.Capabilities.V1.SortRestrictions"] = "Org.OData.Capabilities.V1.SortRestrictionsType";
|
|
1394
|
-
TermToTypes["Org.OData.Capabilities.V1.ExpandRestrictions"] = "Org.OData.Capabilities.V1.ExpandRestrictionsType";
|
|
1395
|
-
TermToTypes["Org.OData.Capabilities.V1.SearchRestrictions"] = "Org.OData.Capabilities.V1.SearchRestrictionsType";
|
|
1396
|
-
TermToTypes["Org.OData.Capabilities.V1.KeyAsSegmentSupported"] = "Org.OData.Core.V1.Tag";
|
|
1397
|
-
TermToTypes["Org.OData.Capabilities.V1.QuerySegmentSupported"] = "Org.OData.Core.V1.Tag";
|
|
1398
|
-
TermToTypes["Org.OData.Capabilities.V1.InsertRestrictions"] = "Org.OData.Capabilities.V1.InsertRestrictionsType";
|
|
1399
|
-
TermToTypes["Org.OData.Capabilities.V1.DeepInsertSupport"] = "Org.OData.Capabilities.V1.DeepInsertSupportType";
|
|
1400
|
-
TermToTypes["Org.OData.Capabilities.V1.UpdateRestrictions"] = "Org.OData.Capabilities.V1.UpdateRestrictionsType";
|
|
1401
|
-
TermToTypes["Org.OData.Capabilities.V1.DeepUpdateSupport"] = "Org.OData.Capabilities.V1.DeepUpdateSupportType";
|
|
1402
|
-
TermToTypes["Org.OData.Capabilities.V1.DeleteRestrictions"] = "Org.OData.Capabilities.V1.DeleteRestrictionsType";
|
|
1403
|
-
TermToTypes["Org.OData.Capabilities.V1.CollectionPropertyRestrictions"] = "Org.OData.Capabilities.V1.CollectionPropertyRestrictionsType";
|
|
1404
|
-
TermToTypes["Org.OData.Capabilities.V1.OperationRestrictions"] = "Org.OData.Capabilities.V1.OperationRestrictionsType";
|
|
1405
|
-
TermToTypes["Org.OData.Capabilities.V1.AnnotationValuesInQuerySupported"] = "Org.OData.Core.V1.Tag";
|
|
1406
|
-
TermToTypes["Org.OData.Capabilities.V1.ModificationQueryOptions"] = "Org.OData.Capabilities.V1.ModificationQueryOptionsType";
|
|
1407
|
-
TermToTypes["Org.OData.Capabilities.V1.ReadRestrictions"] = "Org.OData.Capabilities.V1.ReadRestrictionsType";
|
|
1408
|
-
TermToTypes["Org.OData.Capabilities.V1.CustomHeaders"] = "Org.OData.Capabilities.V1.CustomParameter";
|
|
1409
|
-
TermToTypes["Org.OData.Capabilities.V1.CustomQueryOptions"] = "Org.OData.Capabilities.V1.CustomParameter";
|
|
1410
|
-
TermToTypes["Org.OData.Capabilities.V1.MediaLocationUpdateSupported"] = "Org.OData.Core.V1.Tag";
|
|
1411
|
-
TermToTypes["Org.OData.Aggregation.V1.ApplySupported"] = "Org.OData.Aggregation.V1.ApplySupportedType";
|
|
1412
|
-
TermToTypes["Org.OData.Aggregation.V1.ApplySupportedDefaults"] = "Org.OData.Aggregation.V1.ApplySupportedBase";
|
|
1413
|
-
TermToTypes["Org.OData.Aggregation.V1.Groupable"] = "Org.OData.Core.V1.Tag";
|
|
1414
|
-
TermToTypes["Org.OData.Aggregation.V1.Aggregatable"] = "Org.OData.Core.V1.Tag";
|
|
1415
|
-
TermToTypes["Org.OData.Aggregation.V1.ContextDefiningProperties"] = "Edm.PropertyPath";
|
|
1416
|
-
TermToTypes["Org.OData.Aggregation.V1.LeveledHierarchy"] = "Edm.PropertyPath";
|
|
1417
|
-
TermToTypes["Org.OData.Aggregation.V1.RecursiveHierarchy"] = "Org.OData.Aggregation.V1.RecursiveHierarchyType";
|
|
1418
|
-
TermToTypes["Org.OData.Aggregation.V1.AvailableOnAggregates"] = "Org.OData.Aggregation.V1.AvailableOnAggregatesType";
|
|
1419
|
-
TermToTypes["Org.OData.Validation.V1.Minimum"] = "Edm.PrimitiveType";
|
|
1420
|
-
TermToTypes["Org.OData.Validation.V1.Maximum"] = "Edm.PrimitiveType";
|
|
1421
|
-
TermToTypes["Org.OData.Validation.V1.Exclusive"] = "Org.OData.Core.V1.Tag";
|
|
1422
|
-
TermToTypes["Org.OData.Validation.V1.AllowedValues"] = "Org.OData.Validation.V1.AllowedValue";
|
|
1423
|
-
TermToTypes["Org.OData.Validation.V1.MultipleOf"] = "Edm.Decimal";
|
|
1424
|
-
TermToTypes["Org.OData.Validation.V1.Constraint"] = "Org.OData.Validation.V1.ConstraintType";
|
|
1425
|
-
TermToTypes["Org.OData.Validation.V1.ItemsOf"] = "Org.OData.Validation.V1.ItemsOfType";
|
|
1426
|
-
TermToTypes["Org.OData.Validation.V1.OpenPropertyTypeConstraint"] = "Org.OData.Validation.V1.SingleOrCollectionType";
|
|
1427
|
-
TermToTypes["Org.OData.Validation.V1.DerivedTypeConstraint"] = "Org.OData.Validation.V1.SingleOrCollectionType";
|
|
1428
|
-
TermToTypes["Org.OData.Validation.V1.AllowedTerms"] = "Org.OData.Core.V1.QualifiedTermName";
|
|
1429
|
-
TermToTypes["Org.OData.Validation.V1.ApplicableTerms"] = "Org.OData.Core.V1.QualifiedTermName";
|
|
1430
|
-
TermToTypes["Org.OData.Validation.V1.MaxItems"] = "Edm.Int64";
|
|
1431
|
-
TermToTypes["Org.OData.Validation.V1.MinItems"] = "Edm.Int64";
|
|
1432
|
-
TermToTypes["Org.OData.Measures.V1.Scale"] = "Edm.Byte";
|
|
1433
|
-
TermToTypes["Org.OData.Measures.V1.DurationGranularity"] = "Org.OData.Measures.V1.DurationGranularityType";
|
|
1434
|
-
TermToTypes["com.sap.vocabularies.Analytics.v1.Dimension"] = "Org.OData.Core.V1.Tag";
|
|
1435
|
-
TermToTypes["com.sap.vocabularies.Analytics.v1.Measure"] = "Org.OData.Core.V1.Tag";
|
|
1436
|
-
TermToTypes["com.sap.vocabularies.Analytics.v1.AccumulativeMeasure"] = "Org.OData.Core.V1.Tag";
|
|
1437
|
-
TermToTypes["com.sap.vocabularies.Analytics.v1.RolledUpPropertyCount"] = "Edm.Int16";
|
|
1438
|
-
TermToTypes["com.sap.vocabularies.Analytics.v1.PlanningAction"] = "Org.OData.Core.V1.Tag";
|
|
1439
|
-
TermToTypes["com.sap.vocabularies.Analytics.v1.AggregatedProperties"] = "com.sap.vocabularies.Analytics.v1.AggregatedPropertyType";
|
|
1440
|
-
TermToTypes["com.sap.vocabularies.Analytics.v1.AggregatedProperty"] = "com.sap.vocabularies.Analytics.v1.AggregatedPropertyType";
|
|
1441
|
-
TermToTypes["com.sap.vocabularies.Analytics.v1.AnalyticalContext"] = "com.sap.vocabularies.Analytics.v1.AnalyticalContextType";
|
|
1442
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ServiceVersion"] = "Edm.Int32";
|
|
1443
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ServiceSchemaVersion"] = "Edm.Int32";
|
|
1444
|
-
TermToTypes["com.sap.vocabularies.Common.v1.TextFor"] = "Edm.PropertyPath";
|
|
1445
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsLanguageIdentifier"] = "Org.OData.Core.V1.Tag";
|
|
1446
|
-
TermToTypes["com.sap.vocabularies.Common.v1.TextFormat"] = "com.sap.vocabularies.Common.v1.TextFormatType";
|
|
1447
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsDigitSequence"] = "Org.OData.Core.V1.Tag";
|
|
1448
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsUpperCase"] = "Org.OData.Core.V1.Tag";
|
|
1449
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCurrency"] = "Org.OData.Core.V1.Tag";
|
|
1450
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsUnit"] = "Org.OData.Core.V1.Tag";
|
|
1451
|
-
TermToTypes["com.sap.vocabularies.Common.v1.UnitSpecificScale"] = "Edm.PrimitiveType";
|
|
1452
|
-
TermToTypes["com.sap.vocabularies.Common.v1.UnitSpecificPrecision"] = "Edm.PrimitiveType";
|
|
1453
|
-
TermToTypes["com.sap.vocabularies.Common.v1.SecondaryKey"] = "Edm.PropertyPath";
|
|
1454
|
-
TermToTypes["com.sap.vocabularies.Common.v1.MinOccurs"] = "Edm.Int64";
|
|
1455
|
-
TermToTypes["com.sap.vocabularies.Common.v1.MaxOccurs"] = "Edm.Int64";
|
|
1456
|
-
TermToTypes["com.sap.vocabularies.Common.v1.AssociationEntity"] = "Edm.NavigationPropertyPath";
|
|
1457
|
-
TermToTypes["com.sap.vocabularies.Common.v1.DerivedNavigation"] = "Edm.NavigationPropertyPath";
|
|
1458
|
-
TermToTypes["com.sap.vocabularies.Common.v1.Masked"] = "Org.OData.Core.V1.Tag";
|
|
1459
|
-
TermToTypes["com.sap.vocabularies.Common.v1.RevealOnDemand"] = "Edm.Boolean";
|
|
1460
|
-
TermToTypes["com.sap.vocabularies.Common.v1.SemanticObjectMapping"] = "com.sap.vocabularies.Common.v1.SemanticObjectMappingType";
|
|
1461
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsInstanceAnnotation"] = "Org.OData.Core.V1.Tag";
|
|
1462
|
-
TermToTypes["com.sap.vocabularies.Common.v1.FilterExpressionRestrictions"] = "com.sap.vocabularies.Common.v1.FilterExpressionRestrictionType";
|
|
1463
|
-
TermToTypes["com.sap.vocabularies.Common.v1.FieldControl"] = "com.sap.vocabularies.Common.v1.FieldControlType";
|
|
1464
|
-
TermToTypes["com.sap.vocabularies.Common.v1.Application"] = "com.sap.vocabularies.Common.v1.ApplicationType";
|
|
1465
|
-
TermToTypes["com.sap.vocabularies.Common.v1.Timestamp"] = "Edm.DateTimeOffset";
|
|
1466
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ErrorResolution"] = "com.sap.vocabularies.Common.v1.ErrorResolutionType";
|
|
1467
|
-
TermToTypes["com.sap.vocabularies.Common.v1.Messages"] = "Edm.ComplexType";
|
|
1468
|
-
TermToTypes["com.sap.vocabularies.Common.v1.numericSeverity"] = "com.sap.vocabularies.Common.v1.NumericMessageSeverityType";
|
|
1469
|
-
TermToTypes["com.sap.vocabularies.Common.v1.MaximumNumericMessageSeverity"] = "com.sap.vocabularies.Common.v1.NumericMessageSeverityType";
|
|
1470
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsActionCritical"] = "Edm.Boolean";
|
|
1471
|
-
TermToTypes["com.sap.vocabularies.Common.v1.Attributes"] = "Edm.PropertyPath";
|
|
1472
|
-
TermToTypes["com.sap.vocabularies.Common.v1.RelatedRecursiveHierarchy"] = "Edm.AnnotationPath";
|
|
1473
|
-
TermToTypes["com.sap.vocabularies.Common.v1.Interval"] = "com.sap.vocabularies.Common.v1.IntervalType";
|
|
1474
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ResultContext"] = "Org.OData.Core.V1.Tag";
|
|
1475
|
-
TermToTypes["com.sap.vocabularies.Common.v1.SAPObjectNodeType"] = "com.sap.vocabularies.Common.v1.SAPObjectNodeTypeType";
|
|
1476
|
-
TermToTypes["com.sap.vocabularies.Common.v1.Composition"] = "Org.OData.Core.V1.Tag";
|
|
1477
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsNaturalPerson"] = "Org.OData.Core.V1.Tag";
|
|
1478
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ValueList"] = "com.sap.vocabularies.Common.v1.ValueListType";
|
|
1479
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ValueListRelevantQualifiers"] = "Org.OData.Core.V1.SimpleIdentifier";
|
|
1480
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ValueListWithFixedValues"] = "Org.OData.Core.V1.Tag";
|
|
1481
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ValueListMapping"] = "com.sap.vocabularies.Common.v1.ValueListMappingType";
|
|
1482
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYear"] = "Org.OData.Core.V1.Tag";
|
|
1483
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarHalfyear"] = "Org.OData.Core.V1.Tag";
|
|
1484
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarQuarter"] = "Org.OData.Core.V1.Tag";
|
|
1485
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarMonth"] = "Org.OData.Core.V1.Tag";
|
|
1486
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarWeek"] = "Org.OData.Core.V1.Tag";
|
|
1487
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsDayOfCalendarMonth"] = "Org.OData.Core.V1.Tag";
|
|
1488
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsDayOfCalendarYear"] = "Org.OData.Core.V1.Tag";
|
|
1489
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearHalfyear"] = "Org.OData.Core.V1.Tag";
|
|
1490
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearQuarter"] = "Org.OData.Core.V1.Tag";
|
|
1491
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearMonth"] = "Org.OData.Core.V1.Tag";
|
|
1492
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearWeek"] = "Org.OData.Core.V1.Tag";
|
|
1493
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarDate"] = "Org.OData.Core.V1.Tag";
|
|
1494
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYear"] = "Org.OData.Core.V1.Tag";
|
|
1495
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalPeriod"] = "Org.OData.Core.V1.Tag";
|
|
1496
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearPeriod"] = "Org.OData.Core.V1.Tag";
|
|
1497
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalQuarter"] = "Org.OData.Core.V1.Tag";
|
|
1498
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearQuarter"] = "Org.OData.Core.V1.Tag";
|
|
1499
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalWeek"] = "Org.OData.Core.V1.Tag";
|
|
1500
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearWeek"] = "Org.OData.Core.V1.Tag";
|
|
1501
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsDayOfFiscalYear"] = "Org.OData.Core.V1.Tag";
|
|
1502
|
-
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearVariant"] = "Org.OData.Core.V1.Tag";
|
|
1503
|
-
TermToTypes["com.sap.vocabularies.Common.v1.MutuallyExclusiveTerm"] = "Org.OData.Core.V1.Tag";
|
|
1504
|
-
TermToTypes["com.sap.vocabularies.Common.v1.DraftRoot"] = "com.sap.vocabularies.Common.v1.DraftRootType";
|
|
1505
|
-
TermToTypes["com.sap.vocabularies.Common.v1.DraftNode"] = "com.sap.vocabularies.Common.v1.DraftNodeType";
|
|
1506
|
-
TermToTypes["com.sap.vocabularies.Common.v1.DraftActivationVia"] = "Org.OData.Core.V1.SimpleIdentifier";
|
|
1507
|
-
TermToTypes["com.sap.vocabularies.Common.v1.EditableFieldFor"] = "Edm.PropertyPath";
|
|
1508
|
-
TermToTypes["com.sap.vocabularies.Common.v1.SemanticKey"] = "Edm.PropertyPath";
|
|
1509
|
-
TermToTypes["com.sap.vocabularies.Common.v1.SideEffects"] = "com.sap.vocabularies.Common.v1.SideEffectsType";
|
|
1510
|
-
TermToTypes["com.sap.vocabularies.Common.v1.DefaultValuesFunction"] = "com.sap.vocabularies.Common.v1.QualifiedName";
|
|
1511
|
-
TermToTypes["com.sap.vocabularies.Common.v1.FilterDefaultValue"] = "Edm.PrimitiveType";
|
|
1512
|
-
TermToTypes["com.sap.vocabularies.Common.v1.FilterDefaultValueHigh"] = "Edm.PrimitiveType";
|
|
1513
|
-
TermToTypes["com.sap.vocabularies.Common.v1.SortOrder"] = "com.sap.vocabularies.Common.v1.SortOrderType";
|
|
1514
|
-
TermToTypes["com.sap.vocabularies.Common.v1.RecursiveHierarchy"] = "com.sap.vocabularies.Common.v1.RecursiveHierarchyType";
|
|
1515
|
-
TermToTypes["com.sap.vocabularies.Common.v1.CreatedAt"] = "Edm.DateTimeOffset";
|
|
1516
|
-
TermToTypes["com.sap.vocabularies.Common.v1.CreatedBy"] = "com.sap.vocabularies.Common.v1.UserID";
|
|
1517
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ChangedAt"] = "Edm.DateTimeOffset";
|
|
1518
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ChangedBy"] = "com.sap.vocabularies.Common.v1.UserID";
|
|
1519
|
-
TermToTypes["com.sap.vocabularies.Common.v1.ApplyMultiUnitBehaviorForSortingAndFiltering"] = "Org.OData.Core.V1.Tag";
|
|
1520
|
-
TermToTypes["com.sap.vocabularies.Common.v1.PrimitivePropertyPath"] = "Org.OData.Core.V1.Tag";
|
|
1521
|
-
TermToTypes["com.sap.vocabularies.CodeList.v1.CurrencyCodes"] = "com.sap.vocabularies.CodeList.v1.CodeListSource";
|
|
1522
|
-
TermToTypes["com.sap.vocabularies.CodeList.v1.UnitsOfMeasure"] = "com.sap.vocabularies.CodeList.v1.CodeListSource";
|
|
1523
|
-
TermToTypes["com.sap.vocabularies.CodeList.v1.StandardCode"] = "Edm.PropertyPath";
|
|
1524
|
-
TermToTypes["com.sap.vocabularies.CodeList.v1.ExternalCode"] = "Edm.PropertyPath";
|
|
1525
|
-
TermToTypes["com.sap.vocabularies.CodeList.v1.IsConfigurationDeprecationCode"] = "Edm.Boolean";
|
|
1526
|
-
TermToTypes["com.sap.vocabularies.Communication.v1.Contact"] = "com.sap.vocabularies.Communication.v1.ContactType";
|
|
1527
|
-
TermToTypes["com.sap.vocabularies.Communication.v1.Address"] = "com.sap.vocabularies.Communication.v1.AddressType";
|
|
1528
|
-
TermToTypes["com.sap.vocabularies.Communication.v1.IsEmailAddress"] = "Org.OData.Core.V1.Tag";
|
|
1529
|
-
TermToTypes["com.sap.vocabularies.Communication.v1.IsPhoneNumber"] = "Org.OData.Core.V1.Tag";
|
|
1530
|
-
TermToTypes["com.sap.vocabularies.Communication.v1.Event"] = "com.sap.vocabularies.Communication.v1.EventData";
|
|
1531
|
-
TermToTypes["com.sap.vocabularies.Communication.v1.Task"] = "com.sap.vocabularies.Communication.v1.TaskData";
|
|
1532
|
-
TermToTypes["com.sap.vocabularies.Communication.v1.Message"] = "com.sap.vocabularies.Communication.v1.MessageData";
|
|
1533
|
-
TermToTypes["com.sap.vocabularies.Hierarchy.v1.RecursiveHierarchy"] = "com.sap.vocabularies.Hierarchy.v1.RecursiveHierarchyType";
|
|
1534
|
-
TermToTypes["com.sap.vocabularies.PersonalData.v1.EntitySemantics"] = "com.sap.vocabularies.PersonalData.v1.EntitySemanticsType";
|
|
1535
|
-
TermToTypes["com.sap.vocabularies.PersonalData.v1.FieldSemantics"] = "com.sap.vocabularies.PersonalData.v1.FieldSemanticsType";
|
|
1536
|
-
TermToTypes["com.sap.vocabularies.PersonalData.v1.IsPotentiallyPersonal"] = "Org.OData.Core.V1.Tag";
|
|
1537
|
-
TermToTypes["com.sap.vocabularies.PersonalData.v1.IsPotentiallySensitive"] = "Org.OData.Core.V1.Tag";
|
|
1538
|
-
TermToTypes["com.sap.vocabularies.Session.v1.StickySessionSupported"] = "com.sap.vocabularies.Session.v1.StickySessionSupportedType";
|
|
1539
|
-
TermToTypes["com.sap.vocabularies.UI.v1.HeaderInfo"] = "com.sap.vocabularies.UI.v1.HeaderInfoType";
|
|
1540
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Identification"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
1541
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Badge"] = "com.sap.vocabularies.UI.v1.BadgeType";
|
|
1542
|
-
TermToTypes["com.sap.vocabularies.UI.v1.LineItem"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
1543
|
-
TermToTypes["com.sap.vocabularies.UI.v1.StatusInfo"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
1544
|
-
TermToTypes["com.sap.vocabularies.UI.v1.FieldGroup"] = "com.sap.vocabularies.UI.v1.FieldGroupType";
|
|
1545
|
-
TermToTypes["com.sap.vocabularies.UI.v1.ConnectedFields"] = "com.sap.vocabularies.UI.v1.ConnectedFieldsType";
|
|
1546
|
-
TermToTypes["com.sap.vocabularies.UI.v1.GeoLocations"] = "com.sap.vocabularies.UI.v1.GeoLocationType";
|
|
1547
|
-
TermToTypes["com.sap.vocabularies.UI.v1.GeoLocation"] = "com.sap.vocabularies.UI.v1.GeoLocationType";
|
|
1548
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Contacts"] = "Edm.AnnotationPath";
|
|
1549
|
-
TermToTypes["com.sap.vocabularies.UI.v1.MediaResource"] = "com.sap.vocabularies.UI.v1.MediaResourceType";
|
|
1550
|
-
TermToTypes["com.sap.vocabularies.UI.v1.DataPoint"] = "com.sap.vocabularies.UI.v1.DataPointType";
|
|
1551
|
-
TermToTypes["com.sap.vocabularies.UI.v1.KPI"] = "com.sap.vocabularies.UI.v1.KPIType";
|
|
1552
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Chart"] = "com.sap.vocabularies.UI.v1.ChartDefinitionType";
|
|
1553
|
-
TermToTypes["com.sap.vocabularies.UI.v1.ValueCriticality"] = "com.sap.vocabularies.UI.v1.ValueCriticalityType";
|
|
1554
|
-
TermToTypes["com.sap.vocabularies.UI.v1.CriticalityLabels"] = "com.sap.vocabularies.UI.v1.CriticalityLabelType";
|
|
1555
|
-
TermToTypes["com.sap.vocabularies.UI.v1.SelectionFields"] = "Edm.PropertyPath";
|
|
1556
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Facets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
1557
|
-
TermToTypes["com.sap.vocabularies.UI.v1.HeaderFacets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
1558
|
-
TermToTypes["com.sap.vocabularies.UI.v1.QuickViewFacets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
1559
|
-
TermToTypes["com.sap.vocabularies.UI.v1.QuickCreateFacets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
1560
|
-
TermToTypes["com.sap.vocabularies.UI.v1.FilterFacets"] = "com.sap.vocabularies.UI.v1.ReferenceFacet";
|
|
1561
|
-
TermToTypes["com.sap.vocabularies.UI.v1.SelectionPresentationVariant"] = "com.sap.vocabularies.UI.v1.SelectionPresentationVariantType";
|
|
1562
|
-
TermToTypes["com.sap.vocabularies.UI.v1.PresentationVariant"] = "com.sap.vocabularies.UI.v1.PresentationVariantType";
|
|
1563
|
-
TermToTypes["com.sap.vocabularies.UI.v1.SelectionVariant"] = "com.sap.vocabularies.UI.v1.SelectionVariantType";
|
|
1564
|
-
TermToTypes["com.sap.vocabularies.UI.v1.ThingPerspective"] = "Org.OData.Core.V1.Tag";
|
|
1565
|
-
TermToTypes["com.sap.vocabularies.UI.v1.IsSummary"] = "Org.OData.Core.V1.Tag";
|
|
1566
|
-
TermToTypes["com.sap.vocabularies.UI.v1.PartOfPreview"] = "Org.OData.Core.V1.Tag";
|
|
1567
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Map"] = "Org.OData.Core.V1.Tag";
|
|
1568
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Gallery"] = "Org.OData.Core.V1.Tag";
|
|
1569
|
-
TermToTypes["com.sap.vocabularies.UI.v1.IsImageURL"] = "Org.OData.Core.V1.Tag";
|
|
1570
|
-
TermToTypes["com.sap.vocabularies.UI.v1.IsImage"] = "Org.OData.Core.V1.Tag";
|
|
1571
|
-
TermToTypes["com.sap.vocabularies.UI.v1.MultiLineText"] = "Org.OData.Core.V1.Tag";
|
|
1572
|
-
TermToTypes["com.sap.vocabularies.UI.v1.TextArrangement"] = "com.sap.vocabularies.UI.v1.TextArrangementType";
|
|
1573
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Importance"] = "com.sap.vocabularies.UI.v1.ImportanceType";
|
|
1574
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Hidden"] = "Org.OData.Core.V1.Tag";
|
|
1575
|
-
TermToTypes["com.sap.vocabularies.UI.v1.IsCopyAction"] = "Org.OData.Core.V1.Tag";
|
|
1576
|
-
TermToTypes["com.sap.vocabularies.UI.v1.CreateHidden"] = "Org.OData.Core.V1.Tag";
|
|
1577
|
-
TermToTypes["com.sap.vocabularies.UI.v1.UpdateHidden"] = "Org.OData.Core.V1.Tag";
|
|
1578
|
-
TermToTypes["com.sap.vocabularies.UI.v1.DeleteHidden"] = "Org.OData.Core.V1.Tag";
|
|
1579
|
-
TermToTypes["com.sap.vocabularies.UI.v1.HiddenFilter"] = "Org.OData.Core.V1.Tag";
|
|
1580
|
-
TermToTypes["com.sap.vocabularies.UI.v1.AdaptationHidden"] = "Org.OData.Core.V1.Tag";
|
|
1581
|
-
TermToTypes["com.sap.vocabularies.UI.v1.DataFieldDefault"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
1582
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Criticality"] = "com.sap.vocabularies.UI.v1.CriticalityType";
|
|
1583
|
-
TermToTypes["com.sap.vocabularies.UI.v1.CriticalityCalculation"] = "com.sap.vocabularies.UI.v1.CriticalityCalculationType";
|
|
1584
|
-
TermToTypes["com.sap.vocabularies.UI.v1.Emphasized"] = "Org.OData.Core.V1.Tag";
|
|
1585
|
-
TermToTypes["com.sap.vocabularies.UI.v1.OrderBy"] = "Edm.PropertyPath";
|
|
1586
|
-
TermToTypes["com.sap.vocabularies.UI.v1.ParameterDefaultValue"] = "Edm.PrimitiveType";
|
|
1587
|
-
TermToTypes["com.sap.vocabularies.UI.v1.RecommendationState"] = "com.sap.vocabularies.UI.v1.RecommendationStateType";
|
|
1588
|
-
TermToTypes["com.sap.vocabularies.UI.v1.RecommendationList"] = "com.sap.vocabularies.UI.v1.RecommendationListType";
|
|
1589
|
-
TermToTypes["com.sap.vocabularies.UI.v1.ExcludeFromNavigationContext"] = "Org.OData.Core.V1.Tag";
|
|
1590
|
-
TermToTypes["com.sap.vocabularies.UI.v1.DoNotCheckScaleOfMeasuredQuantity"] = "Edm.Boolean";
|
|
1591
|
-
TermToTypes["com.sap.vocabularies.HTML5.v1.CssDefaults"] = "com.sap.vocabularies.HTML5.v1.CssDefaultsType";
|
|
1592
|
-
})(TermToTypes = exports.TermToTypes || (exports.TermToTypes = {}));
|
|
1593
|
-
/**
|
|
1594
|
-
* Differentiate between a ComplexType and a TypeDefinition.
|
|
1595
|
-
*
|
|
1596
|
-
* @param complexTypeDefinition
|
|
1597
|
-
* @returns true if the value is a complex type
|
|
1598
|
-
*/
|
|
1599
|
-
function isComplexTypeDefinition(complexTypeDefinition) {
|
|
1600
|
-
return (!!complexTypeDefinition && complexTypeDefinition._type === 'ComplexType' && !!complexTypeDefinition.properties);
|
|
1601
|
-
}
|
|
1602
|
-
exports.isComplexTypeDefinition = isComplexTypeDefinition;
|
|
1603
|
-
function Decimal(value) {
|
|
1604
|
-
return {
|
|
1605
|
-
isDecimal() {
|
|
1606
|
-
return true;
|
|
1607
|
-
},
|
|
1608
|
-
valueOf() {
|
|
1609
|
-
return value;
|
|
1610
|
-
},
|
|
1611
|
-
toString() {
|
|
1612
|
-
return value.toString();
|
|
1613
|
-
}
|
|
1614
|
-
};
|
|
1615
|
-
}
|
|
1616
|
-
exports.Decimal = Decimal;
|
|
1617
|
-
/**
|
|
1618
|
-
* Defines a lazy property.
|
|
1619
|
-
*
|
|
1620
|
-
* The property is initialized by calling the init function on the first read access, or by directly assigning a value.
|
|
1621
|
-
*
|
|
1622
|
-
* @param object The host object
|
|
1623
|
-
* @param property The lazy property to add
|
|
1624
|
-
* @param init The function that initializes the property's value
|
|
1625
|
-
*/
|
|
1626
|
-
function lazy(object, property, init) {
|
|
1627
|
-
const initial = Symbol('initial');
|
|
1628
|
-
let _value = initial;
|
|
1629
|
-
Object.defineProperty(object, property, {
|
|
1630
|
-
enumerable: true,
|
|
1631
|
-
get() {
|
|
1632
|
-
if (_value === initial) {
|
|
1633
|
-
_value = init();
|
|
1634
|
-
}
|
|
1635
|
-
return _value;
|
|
1636
|
-
},
|
|
1637
|
-
set(value) {
|
|
1638
|
-
_value = value;
|
|
1639
|
-
}
|
|
1640
|
-
});
|
|
1641
|
-
}
|
|
1642
|
-
exports.lazy = lazy;
|
|
1643
|
-
/**
|
|
1644
|
-
* Creates a function that allows to find an array element by property value.
|
|
1645
|
-
*
|
|
1646
|
-
* @param array The array
|
|
1647
|
-
* @param property Elements in the array are searched by this property
|
|
1648
|
-
* @returns A function that can be used to find an element of the array by property value.
|
|
1649
|
-
*/
|
|
1650
|
-
function createIndexedFind(array, property) {
|
|
1651
|
-
const index = new Map();
|
|
1652
|
-
return function find(value) {
|
|
1653
|
-
const element = index.get(value);
|
|
1654
|
-
if ((element === null || element === void 0 ? void 0 : element[property]) === value) {
|
|
1655
|
-
return element;
|
|
1656
|
-
}
|
|
1657
|
-
return array.find((element) => {
|
|
1658
|
-
if (!(element === null || element === void 0 ? void 0 : element.hasOwnProperty(property))) {
|
|
1659
|
-
return false;
|
|
1660
|
-
}
|
|
1661
|
-
const propertyValue = element[property];
|
|
1662
|
-
index.set(propertyValue, element);
|
|
1663
|
-
return propertyValue === value;
|
|
1664
|
-
});
|
|
1665
|
-
};
|
|
1666
|
-
}
|
|
1667
|
-
exports.createIndexedFind = createIndexedFind;
|
|
1668
|
-
/**
|
|
1669
|
-
* Adds a 'get by value' function to an array.
|
|
1670
|
-
*
|
|
1671
|
-
* If this function is called with addIndex(myArray, 'name'), a new function 'by_name(value)' will be added that allows to
|
|
1672
|
-
* find a member of the array by the value of its 'name' property.
|
|
1673
|
-
*
|
|
1674
|
-
* @param array The array
|
|
1675
|
-
* @param property The property that will be used by the 'by_{property}()' function
|
|
1676
|
-
* @returns The array with the added function
|
|
1677
|
-
*/
|
|
1678
|
-
function addGetByValue(array, property) {
|
|
1679
|
-
const indexName = `by_${property}`;
|
|
1680
|
-
if (!array.hasOwnProperty(indexName)) {
|
|
1681
|
-
Object.defineProperty(array, indexName, { writable: false, value: createIndexedFind(array, property) });
|
|
1682
|
-
}
|
|
1683
|
-
else {
|
|
1684
|
-
throw new Error(`Property '${indexName}' already exists`);
|
|
1685
|
-
}
|
|
1686
|
-
return array;
|
|
1687
|
-
}
|
|
1688
|
-
exports.addGetByValue = addGetByValue;
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
/***/ }),
|
|
1692
|
-
|
|
1693
|
-
/***/ 488:
|
|
1694
|
-
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
1698
|
-
exports.revertTermToGenericType = void 0;
|
|
1699
|
-
const utils_1 = __webpack_require__(534);
|
|
1700
|
-
/**
|
|
1701
|
-
* Revert an object to its raw type equivalent.
|
|
1702
|
-
*
|
|
1703
|
-
* @param references the current reference
|
|
1704
|
-
* @param value the value to revert
|
|
1705
|
-
* @returns the raw value
|
|
1706
|
-
*/
|
|
1707
|
-
function revertObjectToRawType(references, value) {
|
|
1708
|
-
var _a, _b, _c, _d, _e, _f;
|
|
1709
|
-
let result;
|
|
1710
|
-
if (Array.isArray(value)) {
|
|
1711
|
-
result = {
|
|
1712
|
-
type: 'Collection',
|
|
1713
|
-
Collection: value.map((anno) => revertCollectionItemToRawType(references, anno))
|
|
1714
|
-
};
|
|
1715
|
-
}
|
|
1716
|
-
else if ((_a = value.isDecimal) === null || _a === void 0 ? void 0 : _a.call(value)) {
|
|
1717
|
-
result = {
|
|
1718
|
-
type: 'Decimal',
|
|
1719
|
-
Decimal: value.valueOf()
|
|
1720
|
-
};
|
|
1721
|
-
}
|
|
1722
|
-
else if ((_b = value.isString) === null || _b === void 0 ? void 0 : _b.call(value)) {
|
|
1723
|
-
const valueMatches = value.valueOf().split('.');
|
|
1724
|
-
if (valueMatches.length > 1 && references.find((ref) => ref.alias === valueMatches[0])) {
|
|
1725
|
-
result = {
|
|
1726
|
-
type: 'EnumMember',
|
|
1727
|
-
EnumMember: value.valueOf()
|
|
1728
|
-
};
|
|
1729
|
-
}
|
|
1730
|
-
else {
|
|
1731
|
-
result = {
|
|
1732
|
-
type: 'String',
|
|
1733
|
-
String: value.valueOf()
|
|
1734
|
-
};
|
|
1735
|
-
}
|
|
1384
|
+
else if ((_b = value.isString) === null || _b === void 0 ? void 0 : _b.call(value)) {
|
|
1385
|
+
const valueMatches = value.valueOf().split('.');
|
|
1386
|
+
if (valueMatches.length > 1 && references.find((ref) => ref.alias === valueMatches[0])) {
|
|
1387
|
+
result = {
|
|
1388
|
+
type: 'EnumMember',
|
|
1389
|
+
EnumMember: value.valueOf()
|
|
1390
|
+
};
|
|
1391
|
+
}
|
|
1392
|
+
else {
|
|
1393
|
+
result = {
|
|
1394
|
+
type: 'String',
|
|
1395
|
+
String: value.valueOf()
|
|
1396
|
+
};
|
|
1397
|
+
}
|
|
1736
1398
|
}
|
|
1737
1399
|
else if ((_c = value.isInt) === null || _c === void 0 ? void 0 : _c.call(value)) {
|
|
1738
1400
|
result = {
|
|
@@ -1755,7 +1417,7 @@ function revertObjectToRawType(references, value) {
|
|
|
1755
1417
|
else if ((_f = value.isBoolean) === null || _f === void 0 ? void 0 : _f.call(value)) {
|
|
1756
1418
|
result = {
|
|
1757
1419
|
type: 'Bool',
|
|
1758
|
-
Bool: value.valueOf()
|
|
1420
|
+
Bool: value.valueOf()
|
|
1759
1421
|
};
|
|
1760
1422
|
}
|
|
1761
1423
|
else if (value.type === 'Path') {
|
|
@@ -1942,37 +1604,378 @@ function revertCollectionItemToRawType(references, collectionItem) {
|
|
|
1942
1604
|
return undefined;
|
|
1943
1605
|
}
|
|
1944
1606
|
/**
|
|
1945
|
-
* Revert an annotation term to it's generic or raw equivalent.
|
|
1946
|
-
*
|
|
1947
|
-
* @param references the reference of the current context
|
|
1948
|
-
* @param annotation the annotation term to revert
|
|
1949
|
-
* @returns the raw annotation
|
|
1607
|
+
* Revert an annotation term to it's generic or raw equivalent.
|
|
1608
|
+
*
|
|
1609
|
+
* @param references the reference of the current context
|
|
1610
|
+
* @param annotation the annotation term to revert
|
|
1611
|
+
* @returns the raw annotation
|
|
1612
|
+
*/
|
|
1613
|
+
function revertTermToGenericType(references, annotation) {
|
|
1614
|
+
const baseAnnotation = {
|
|
1615
|
+
term: annotation.term,
|
|
1616
|
+
qualifier: annotation.qualifier
|
|
1617
|
+
};
|
|
1618
|
+
if (Array.isArray(annotation)) {
|
|
1619
|
+
// Collection
|
|
1620
|
+
if (annotation.hasOwnProperty('annotations') && Object.keys(annotation.annotations).length > 0) {
|
|
1621
|
+
// Annotation on a collection itself, not sure when that happens if at all
|
|
1622
|
+
baseAnnotation.annotations = [];
|
|
1623
|
+
revertAnnotationsToRawType(references, annotation.annotations, baseAnnotation.annotations);
|
|
1624
|
+
}
|
|
1625
|
+
return {
|
|
1626
|
+
...baseAnnotation,
|
|
1627
|
+
collection: annotation.map((anno) => revertCollectionItemToRawType(references, anno))
|
|
1628
|
+
};
|
|
1629
|
+
}
|
|
1630
|
+
else if (annotation.hasOwnProperty('$Type')) {
|
|
1631
|
+
return { ...baseAnnotation, record: revertCollectionItemToRawType(references, annotation) };
|
|
1632
|
+
}
|
|
1633
|
+
else {
|
|
1634
|
+
return { ...baseAnnotation, value: revertValueToRawType(references, annotation) };
|
|
1635
|
+
}
|
|
1636
|
+
}
|
|
1637
|
+
exports.revertTermToGenericType = revertTermToGenericType;
|
|
1638
|
+
|
|
1639
|
+
|
|
1640
|
+
/***/ }),
|
|
1641
|
+
|
|
1642
|
+
/***/ 830:
|
|
1643
|
+
/***/ (function(__unused_webpack_module, exports) {
|
|
1644
|
+
|
|
1645
|
+
|
|
1646
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
1647
|
+
exports.EnumIsFlag = void 0;
|
|
1648
|
+
exports.EnumIsFlag = {
|
|
1649
|
+
"Auth.KeyLocation": false,
|
|
1650
|
+
"Core.RevisionKind": false,
|
|
1651
|
+
"Core.DataModificationOperationKind": false,
|
|
1652
|
+
"Core.Permission": true,
|
|
1653
|
+
"Capabilities.ConformanceLevelType": false,
|
|
1654
|
+
"Capabilities.IsolationLevel": true,
|
|
1655
|
+
"Capabilities.NavigationType": false,
|
|
1656
|
+
"Capabilities.SearchExpressions": true,
|
|
1657
|
+
"Capabilities.HttpMethod": true,
|
|
1658
|
+
"Aggregation.RollupType": false,
|
|
1659
|
+
"Common.TextFormatType": false,
|
|
1660
|
+
"Common.FilterExpressionType": false,
|
|
1661
|
+
"Common.FieldControlType": false,
|
|
1662
|
+
"Common.EffectType": true,
|
|
1663
|
+
"Communication.KindType": false,
|
|
1664
|
+
"Communication.ContactInformationType": true,
|
|
1665
|
+
"Communication.PhoneType": true,
|
|
1666
|
+
"Communication.GenderType": false,
|
|
1667
|
+
"UI.VisualizationType": false,
|
|
1668
|
+
"UI.CriticalityType": false,
|
|
1669
|
+
"UI.ImprovementDirectionType": false,
|
|
1670
|
+
"UI.TrendType": false,
|
|
1671
|
+
"UI.ChartType": false,
|
|
1672
|
+
"UI.ChartAxisScaleBehaviorType": false,
|
|
1673
|
+
"UI.ChartAxisAutoScaleDataScopeType": false,
|
|
1674
|
+
"UI.ChartDimensionRoleType": false,
|
|
1675
|
+
"UI.ChartMeasureRoleType": false,
|
|
1676
|
+
"UI.SelectionRangeSignType": false,
|
|
1677
|
+
"UI.SelectionRangeOptionType": false,
|
|
1678
|
+
"UI.TextArrangementType": false,
|
|
1679
|
+
"UI.ImportanceType": false,
|
|
1680
|
+
"UI.CriticalityRepresentationType": false,
|
|
1681
|
+
"UI.OperationGroupingType": false,
|
|
1682
|
+
};
|
|
1683
|
+
|
|
1684
|
+
|
|
1685
|
+
/***/ }),
|
|
1686
|
+
|
|
1687
|
+
/***/ 377:
|
|
1688
|
+
/***/ (function(__unused_webpack_module, exports) {
|
|
1689
|
+
|
|
1690
|
+
|
|
1691
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
1692
|
+
exports.TermToTypes = void 0;
|
|
1693
|
+
var TermToTypes;
|
|
1694
|
+
(function (TermToTypes) {
|
|
1695
|
+
TermToTypes["Org.OData.Authorization.V1.SecuritySchemes"] = "Org.OData.Authorization.V1.SecurityScheme";
|
|
1696
|
+
TermToTypes["Org.OData.Authorization.V1.Authorizations"] = "Org.OData.Authorization.V1.Authorization";
|
|
1697
|
+
TermToTypes["Org.OData.Core.V1.Revisions"] = "Org.OData.Core.V1.RevisionType";
|
|
1698
|
+
TermToTypes["Org.OData.Core.V1.Links"] = "Org.OData.Core.V1.Link";
|
|
1699
|
+
TermToTypes["Org.OData.Core.V1.Example"] = "Org.OData.Core.V1.ExampleValue";
|
|
1700
|
+
TermToTypes["Org.OData.Core.V1.Messages"] = "Org.OData.Core.V1.MessageType";
|
|
1701
|
+
TermToTypes["Org.OData.Core.V1.ValueException"] = "Org.OData.Core.V1.ValueExceptionType";
|
|
1702
|
+
TermToTypes["Org.OData.Core.V1.ResourceException"] = "Org.OData.Core.V1.ResourceExceptionType";
|
|
1703
|
+
TermToTypes["Org.OData.Core.V1.DataModificationException"] = "Org.OData.Core.V1.DataModificationExceptionType";
|
|
1704
|
+
TermToTypes["Org.OData.Core.V1.IsLanguageDependent"] = "Org.OData.Core.V1.Tag";
|
|
1705
|
+
TermToTypes["Org.OData.Core.V1.AppliesViaContainer"] = "Org.OData.Core.V1.Tag";
|
|
1706
|
+
TermToTypes["Org.OData.Core.V1.DereferenceableIDs"] = "Org.OData.Core.V1.Tag";
|
|
1707
|
+
TermToTypes["Org.OData.Core.V1.ConventionalIDs"] = "Org.OData.Core.V1.Tag";
|
|
1708
|
+
TermToTypes["Org.OData.Core.V1.Permissions"] = "Org.OData.Core.V1.Permission";
|
|
1709
|
+
TermToTypes["Org.OData.Core.V1.DefaultNamespace"] = "Org.OData.Core.V1.Tag";
|
|
1710
|
+
TermToTypes["Org.OData.Core.V1.Immutable"] = "Org.OData.Core.V1.Tag";
|
|
1711
|
+
TermToTypes["Org.OData.Core.V1.Computed"] = "Org.OData.Core.V1.Tag";
|
|
1712
|
+
TermToTypes["Org.OData.Core.V1.ComputedDefaultValue"] = "Org.OData.Core.V1.Tag";
|
|
1713
|
+
TermToTypes["Org.OData.Core.V1.IsURL"] = "Org.OData.Core.V1.Tag";
|
|
1714
|
+
TermToTypes["Org.OData.Core.V1.IsMediaType"] = "Org.OData.Core.V1.Tag";
|
|
1715
|
+
TermToTypes["Org.OData.Core.V1.ContentDisposition"] = "Org.OData.Core.V1.ContentDispositionType";
|
|
1716
|
+
TermToTypes["Org.OData.Core.V1.OptimisticConcurrency"] = "Edm.PropertyPath";
|
|
1717
|
+
TermToTypes["Org.OData.Core.V1.AdditionalProperties"] = "Org.OData.Core.V1.Tag";
|
|
1718
|
+
TermToTypes["Org.OData.Core.V1.AutoExpand"] = "Org.OData.Core.V1.Tag";
|
|
1719
|
+
TermToTypes["Org.OData.Core.V1.AutoExpandReferences"] = "Org.OData.Core.V1.Tag";
|
|
1720
|
+
TermToTypes["Org.OData.Core.V1.MayImplement"] = "Org.OData.Core.V1.QualifiedTypeName";
|
|
1721
|
+
TermToTypes["Org.OData.Core.V1.Ordered"] = "Org.OData.Core.V1.Tag";
|
|
1722
|
+
TermToTypes["Org.OData.Core.V1.PositionalInsert"] = "Org.OData.Core.V1.Tag";
|
|
1723
|
+
TermToTypes["Org.OData.Core.V1.AlternateKeys"] = "Org.OData.Core.V1.AlternateKey";
|
|
1724
|
+
TermToTypes["Org.OData.Core.V1.OptionalParameter"] = "Org.OData.Core.V1.OptionalParameterType";
|
|
1725
|
+
TermToTypes["Org.OData.Core.V1.OperationAvailable"] = "Edm.Boolean";
|
|
1726
|
+
TermToTypes["Org.OData.Core.V1.RequiresExplicitBinding"] = "Org.OData.Core.V1.Tag";
|
|
1727
|
+
TermToTypes["Org.OData.Core.V1.ExplicitOperationBindings"] = "Org.OData.Core.V1.QualifiedBoundOperationName";
|
|
1728
|
+
TermToTypes["Org.OData.Core.V1.SymbolicName"] = "Org.OData.Core.V1.SimpleIdentifier";
|
|
1729
|
+
TermToTypes["Org.OData.Core.V1.GeometryFeature"] = "Org.OData.Core.V1.GeometryFeatureType";
|
|
1730
|
+
TermToTypes["Org.OData.Capabilities.V1.ConformanceLevel"] = "Org.OData.Capabilities.V1.ConformanceLevelType";
|
|
1731
|
+
TermToTypes["Org.OData.Capabilities.V1.AsynchronousRequestsSupported"] = "Org.OData.Core.V1.Tag";
|
|
1732
|
+
TermToTypes["Org.OData.Capabilities.V1.BatchContinueOnErrorSupported"] = "Org.OData.Core.V1.Tag";
|
|
1733
|
+
TermToTypes["Org.OData.Capabilities.V1.IsolationSupported"] = "Org.OData.Capabilities.V1.IsolationLevel";
|
|
1734
|
+
TermToTypes["Org.OData.Capabilities.V1.CrossJoinSupported"] = "Org.OData.Core.V1.Tag";
|
|
1735
|
+
TermToTypes["Org.OData.Capabilities.V1.CallbackSupported"] = "Org.OData.Capabilities.V1.CallbackType";
|
|
1736
|
+
TermToTypes["Org.OData.Capabilities.V1.ChangeTracking"] = "Org.OData.Capabilities.V1.ChangeTrackingType";
|
|
1737
|
+
TermToTypes["Org.OData.Capabilities.V1.CountRestrictions"] = "Org.OData.Capabilities.V1.CountRestrictionsType";
|
|
1738
|
+
TermToTypes["Org.OData.Capabilities.V1.NavigationRestrictions"] = "Org.OData.Capabilities.V1.NavigationRestrictionsType";
|
|
1739
|
+
TermToTypes["Org.OData.Capabilities.V1.IndexableByKey"] = "Org.OData.Core.V1.Tag";
|
|
1740
|
+
TermToTypes["Org.OData.Capabilities.V1.TopSupported"] = "Org.OData.Core.V1.Tag";
|
|
1741
|
+
TermToTypes["Org.OData.Capabilities.V1.SkipSupported"] = "Org.OData.Core.V1.Tag";
|
|
1742
|
+
TermToTypes["Org.OData.Capabilities.V1.ComputeSupported"] = "Org.OData.Core.V1.Tag";
|
|
1743
|
+
TermToTypes["Org.OData.Capabilities.V1.SelectSupport"] = "Org.OData.Capabilities.V1.SelectSupportType";
|
|
1744
|
+
TermToTypes["Org.OData.Capabilities.V1.BatchSupported"] = "Org.OData.Core.V1.Tag";
|
|
1745
|
+
TermToTypes["Org.OData.Capabilities.V1.BatchSupport"] = "Org.OData.Capabilities.V1.BatchSupportType";
|
|
1746
|
+
TermToTypes["Org.OData.Capabilities.V1.FilterRestrictions"] = "Org.OData.Capabilities.V1.FilterRestrictionsType";
|
|
1747
|
+
TermToTypes["Org.OData.Capabilities.V1.SortRestrictions"] = "Org.OData.Capabilities.V1.SortRestrictionsType";
|
|
1748
|
+
TermToTypes["Org.OData.Capabilities.V1.ExpandRestrictions"] = "Org.OData.Capabilities.V1.ExpandRestrictionsType";
|
|
1749
|
+
TermToTypes["Org.OData.Capabilities.V1.SearchRestrictions"] = "Org.OData.Capabilities.V1.SearchRestrictionsType";
|
|
1750
|
+
TermToTypes["Org.OData.Capabilities.V1.KeyAsSegmentSupported"] = "Org.OData.Core.V1.Tag";
|
|
1751
|
+
TermToTypes["Org.OData.Capabilities.V1.QuerySegmentSupported"] = "Org.OData.Core.V1.Tag";
|
|
1752
|
+
TermToTypes["Org.OData.Capabilities.V1.InsertRestrictions"] = "Org.OData.Capabilities.V1.InsertRestrictionsType";
|
|
1753
|
+
TermToTypes["Org.OData.Capabilities.V1.DeepInsertSupport"] = "Org.OData.Capabilities.V1.DeepInsertSupportType";
|
|
1754
|
+
TermToTypes["Org.OData.Capabilities.V1.UpdateRestrictions"] = "Org.OData.Capabilities.V1.UpdateRestrictionsType";
|
|
1755
|
+
TermToTypes["Org.OData.Capabilities.V1.DeepUpdateSupport"] = "Org.OData.Capabilities.V1.DeepUpdateSupportType";
|
|
1756
|
+
TermToTypes["Org.OData.Capabilities.V1.DeleteRestrictions"] = "Org.OData.Capabilities.V1.DeleteRestrictionsType";
|
|
1757
|
+
TermToTypes["Org.OData.Capabilities.V1.CollectionPropertyRestrictions"] = "Org.OData.Capabilities.V1.CollectionPropertyRestrictionsType";
|
|
1758
|
+
TermToTypes["Org.OData.Capabilities.V1.OperationRestrictions"] = "Org.OData.Capabilities.V1.OperationRestrictionsType";
|
|
1759
|
+
TermToTypes["Org.OData.Capabilities.V1.AnnotationValuesInQuerySupported"] = "Org.OData.Core.V1.Tag";
|
|
1760
|
+
TermToTypes["Org.OData.Capabilities.V1.ModificationQueryOptions"] = "Org.OData.Capabilities.V1.ModificationQueryOptionsType";
|
|
1761
|
+
TermToTypes["Org.OData.Capabilities.V1.ReadRestrictions"] = "Org.OData.Capabilities.V1.ReadRestrictionsType";
|
|
1762
|
+
TermToTypes["Org.OData.Capabilities.V1.CustomHeaders"] = "Org.OData.Capabilities.V1.CustomParameter";
|
|
1763
|
+
TermToTypes["Org.OData.Capabilities.V1.CustomQueryOptions"] = "Org.OData.Capabilities.V1.CustomParameter";
|
|
1764
|
+
TermToTypes["Org.OData.Capabilities.V1.MediaLocationUpdateSupported"] = "Org.OData.Core.V1.Tag";
|
|
1765
|
+
TermToTypes["Org.OData.Aggregation.V1.ApplySupported"] = "Org.OData.Aggregation.V1.ApplySupportedType";
|
|
1766
|
+
TermToTypes["Org.OData.Aggregation.V1.ApplySupportedDefaults"] = "Org.OData.Aggregation.V1.ApplySupportedBase";
|
|
1767
|
+
TermToTypes["Org.OData.Aggregation.V1.Groupable"] = "Org.OData.Core.V1.Tag";
|
|
1768
|
+
TermToTypes["Org.OData.Aggregation.V1.Aggregatable"] = "Org.OData.Core.V1.Tag";
|
|
1769
|
+
TermToTypes["Org.OData.Aggregation.V1.ContextDefiningProperties"] = "Edm.PropertyPath";
|
|
1770
|
+
TermToTypes["Org.OData.Aggregation.V1.LeveledHierarchy"] = "Edm.PropertyPath";
|
|
1771
|
+
TermToTypes["Org.OData.Aggregation.V1.RecursiveHierarchy"] = "Org.OData.Aggregation.V1.RecursiveHierarchyType";
|
|
1772
|
+
TermToTypes["Org.OData.Aggregation.V1.AvailableOnAggregates"] = "Org.OData.Aggregation.V1.AvailableOnAggregatesType";
|
|
1773
|
+
TermToTypes["Org.OData.Validation.V1.Minimum"] = "Edm.PrimitiveType";
|
|
1774
|
+
TermToTypes["Org.OData.Validation.V1.Maximum"] = "Edm.PrimitiveType";
|
|
1775
|
+
TermToTypes["Org.OData.Validation.V1.Exclusive"] = "Org.OData.Core.V1.Tag";
|
|
1776
|
+
TermToTypes["Org.OData.Validation.V1.AllowedValues"] = "Org.OData.Validation.V1.AllowedValue";
|
|
1777
|
+
TermToTypes["Org.OData.Validation.V1.MultipleOf"] = "Edm.Decimal";
|
|
1778
|
+
TermToTypes["Org.OData.Validation.V1.Constraint"] = "Org.OData.Validation.V1.ConstraintType";
|
|
1779
|
+
TermToTypes["Org.OData.Validation.V1.ItemsOf"] = "Org.OData.Validation.V1.ItemsOfType";
|
|
1780
|
+
TermToTypes["Org.OData.Validation.V1.OpenPropertyTypeConstraint"] = "Org.OData.Validation.V1.SingleOrCollectionType";
|
|
1781
|
+
TermToTypes["Org.OData.Validation.V1.DerivedTypeConstraint"] = "Org.OData.Validation.V1.SingleOrCollectionType";
|
|
1782
|
+
TermToTypes["Org.OData.Validation.V1.AllowedTerms"] = "Org.OData.Core.V1.QualifiedTermName";
|
|
1783
|
+
TermToTypes["Org.OData.Validation.V1.ApplicableTerms"] = "Org.OData.Core.V1.QualifiedTermName";
|
|
1784
|
+
TermToTypes["Org.OData.Validation.V1.MaxItems"] = "Edm.Int64";
|
|
1785
|
+
TermToTypes["Org.OData.Validation.V1.MinItems"] = "Edm.Int64";
|
|
1786
|
+
TermToTypes["Org.OData.Measures.V1.Scale"] = "Edm.Byte";
|
|
1787
|
+
TermToTypes["Org.OData.Measures.V1.DurationGranularity"] = "Org.OData.Measures.V1.DurationGranularityType";
|
|
1788
|
+
TermToTypes["com.sap.vocabularies.Analytics.v1.Dimension"] = "Org.OData.Core.V1.Tag";
|
|
1789
|
+
TermToTypes["com.sap.vocabularies.Analytics.v1.Measure"] = "Org.OData.Core.V1.Tag";
|
|
1790
|
+
TermToTypes["com.sap.vocabularies.Analytics.v1.AccumulativeMeasure"] = "Org.OData.Core.V1.Tag";
|
|
1791
|
+
TermToTypes["com.sap.vocabularies.Analytics.v1.RolledUpPropertyCount"] = "Edm.Int16";
|
|
1792
|
+
TermToTypes["com.sap.vocabularies.Analytics.v1.PlanningAction"] = "Org.OData.Core.V1.Tag";
|
|
1793
|
+
TermToTypes["com.sap.vocabularies.Analytics.v1.AggregatedProperties"] = "com.sap.vocabularies.Analytics.v1.AggregatedPropertyType";
|
|
1794
|
+
TermToTypes["com.sap.vocabularies.Analytics.v1.AggregatedProperty"] = "com.sap.vocabularies.Analytics.v1.AggregatedPropertyType";
|
|
1795
|
+
TermToTypes["com.sap.vocabularies.Analytics.v1.AnalyticalContext"] = "com.sap.vocabularies.Analytics.v1.AnalyticalContextType";
|
|
1796
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ServiceVersion"] = "Edm.Int32";
|
|
1797
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ServiceSchemaVersion"] = "Edm.Int32";
|
|
1798
|
+
TermToTypes["com.sap.vocabularies.Common.v1.TextFor"] = "Edm.PropertyPath";
|
|
1799
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsLanguageIdentifier"] = "Org.OData.Core.V1.Tag";
|
|
1800
|
+
TermToTypes["com.sap.vocabularies.Common.v1.TextFormat"] = "com.sap.vocabularies.Common.v1.TextFormatType";
|
|
1801
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsTimezone"] = "Org.OData.Core.V1.Tag";
|
|
1802
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsDigitSequence"] = "Org.OData.Core.V1.Tag";
|
|
1803
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsUpperCase"] = "Org.OData.Core.V1.Tag";
|
|
1804
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCurrency"] = "Org.OData.Core.V1.Tag";
|
|
1805
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsUnit"] = "Org.OData.Core.V1.Tag";
|
|
1806
|
+
TermToTypes["com.sap.vocabularies.Common.v1.UnitSpecificScale"] = "Edm.PrimitiveType";
|
|
1807
|
+
TermToTypes["com.sap.vocabularies.Common.v1.UnitSpecificPrecision"] = "Edm.PrimitiveType";
|
|
1808
|
+
TermToTypes["com.sap.vocabularies.Common.v1.SecondaryKey"] = "Edm.PropertyPath";
|
|
1809
|
+
TermToTypes["com.sap.vocabularies.Common.v1.MinOccurs"] = "Edm.Int64";
|
|
1810
|
+
TermToTypes["com.sap.vocabularies.Common.v1.MaxOccurs"] = "Edm.Int64";
|
|
1811
|
+
TermToTypes["com.sap.vocabularies.Common.v1.AssociationEntity"] = "Edm.NavigationPropertyPath";
|
|
1812
|
+
TermToTypes["com.sap.vocabularies.Common.v1.DerivedNavigation"] = "Edm.NavigationPropertyPath";
|
|
1813
|
+
TermToTypes["com.sap.vocabularies.Common.v1.Masked"] = "Org.OData.Core.V1.Tag";
|
|
1814
|
+
TermToTypes["com.sap.vocabularies.Common.v1.RevealOnDemand"] = "Edm.Boolean";
|
|
1815
|
+
TermToTypes["com.sap.vocabularies.Common.v1.SemanticObjectMapping"] = "com.sap.vocabularies.Common.v1.SemanticObjectMappingType";
|
|
1816
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsInstanceAnnotation"] = "Org.OData.Core.V1.Tag";
|
|
1817
|
+
TermToTypes["com.sap.vocabularies.Common.v1.FilterExpressionRestrictions"] = "com.sap.vocabularies.Common.v1.FilterExpressionRestrictionType";
|
|
1818
|
+
TermToTypes["com.sap.vocabularies.Common.v1.FieldControl"] = "com.sap.vocabularies.Common.v1.FieldControlType";
|
|
1819
|
+
TermToTypes["com.sap.vocabularies.Common.v1.Application"] = "com.sap.vocabularies.Common.v1.ApplicationType";
|
|
1820
|
+
TermToTypes["com.sap.vocabularies.Common.v1.Timestamp"] = "Edm.DateTimeOffset";
|
|
1821
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ErrorResolution"] = "com.sap.vocabularies.Common.v1.ErrorResolutionType";
|
|
1822
|
+
TermToTypes["com.sap.vocabularies.Common.v1.Messages"] = "Edm.ComplexType";
|
|
1823
|
+
TermToTypes["com.sap.vocabularies.Common.v1.numericSeverity"] = "com.sap.vocabularies.Common.v1.NumericMessageSeverityType";
|
|
1824
|
+
TermToTypes["com.sap.vocabularies.Common.v1.MaximumNumericMessageSeverity"] = "com.sap.vocabularies.Common.v1.NumericMessageSeverityType";
|
|
1825
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsActionCritical"] = "Edm.Boolean";
|
|
1826
|
+
TermToTypes["com.sap.vocabularies.Common.v1.Attributes"] = "Edm.PropertyPath";
|
|
1827
|
+
TermToTypes["com.sap.vocabularies.Common.v1.RelatedRecursiveHierarchy"] = "Edm.AnnotationPath";
|
|
1828
|
+
TermToTypes["com.sap.vocabularies.Common.v1.Interval"] = "com.sap.vocabularies.Common.v1.IntervalType";
|
|
1829
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ResultContext"] = "Org.OData.Core.V1.Tag";
|
|
1830
|
+
TermToTypes["com.sap.vocabularies.Common.v1.SAPObjectNodeType"] = "com.sap.vocabularies.Common.v1.SAPObjectNodeTypeType";
|
|
1831
|
+
TermToTypes["com.sap.vocabularies.Common.v1.Composition"] = "Org.OData.Core.V1.Tag";
|
|
1832
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsNaturalPerson"] = "Org.OData.Core.V1.Tag";
|
|
1833
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ValueList"] = "com.sap.vocabularies.Common.v1.ValueListType";
|
|
1834
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ValueListRelevantQualifiers"] = "Org.OData.Core.V1.SimpleIdentifier";
|
|
1835
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ValueListWithFixedValues"] = "Org.OData.Core.V1.Tag";
|
|
1836
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ValueListMapping"] = "com.sap.vocabularies.Common.v1.ValueListMappingType";
|
|
1837
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYear"] = "Org.OData.Core.V1.Tag";
|
|
1838
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarHalfyear"] = "Org.OData.Core.V1.Tag";
|
|
1839
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarQuarter"] = "Org.OData.Core.V1.Tag";
|
|
1840
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarMonth"] = "Org.OData.Core.V1.Tag";
|
|
1841
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarWeek"] = "Org.OData.Core.V1.Tag";
|
|
1842
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsDayOfCalendarMonth"] = "Org.OData.Core.V1.Tag";
|
|
1843
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsDayOfCalendarYear"] = "Org.OData.Core.V1.Tag";
|
|
1844
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearHalfyear"] = "Org.OData.Core.V1.Tag";
|
|
1845
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearQuarter"] = "Org.OData.Core.V1.Tag";
|
|
1846
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearMonth"] = "Org.OData.Core.V1.Tag";
|
|
1847
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarYearWeek"] = "Org.OData.Core.V1.Tag";
|
|
1848
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsCalendarDate"] = "Org.OData.Core.V1.Tag";
|
|
1849
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYear"] = "Org.OData.Core.V1.Tag";
|
|
1850
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalPeriod"] = "Org.OData.Core.V1.Tag";
|
|
1851
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearPeriod"] = "Org.OData.Core.V1.Tag";
|
|
1852
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalQuarter"] = "Org.OData.Core.V1.Tag";
|
|
1853
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearQuarter"] = "Org.OData.Core.V1.Tag";
|
|
1854
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalWeek"] = "Org.OData.Core.V1.Tag";
|
|
1855
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearWeek"] = "Org.OData.Core.V1.Tag";
|
|
1856
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsDayOfFiscalYear"] = "Org.OData.Core.V1.Tag";
|
|
1857
|
+
TermToTypes["com.sap.vocabularies.Common.v1.IsFiscalYearVariant"] = "Org.OData.Core.V1.Tag";
|
|
1858
|
+
TermToTypes["com.sap.vocabularies.Common.v1.MutuallyExclusiveTerm"] = "Org.OData.Core.V1.Tag";
|
|
1859
|
+
TermToTypes["com.sap.vocabularies.Common.v1.DraftRoot"] = "com.sap.vocabularies.Common.v1.DraftRootType";
|
|
1860
|
+
TermToTypes["com.sap.vocabularies.Common.v1.DraftNode"] = "com.sap.vocabularies.Common.v1.DraftNodeType";
|
|
1861
|
+
TermToTypes["com.sap.vocabularies.Common.v1.DraftActivationVia"] = "Org.OData.Core.V1.SimpleIdentifier";
|
|
1862
|
+
TermToTypes["com.sap.vocabularies.Common.v1.EditableFieldFor"] = "Edm.PropertyPath";
|
|
1863
|
+
TermToTypes["com.sap.vocabularies.Common.v1.SemanticKey"] = "Edm.PropertyPath";
|
|
1864
|
+
TermToTypes["com.sap.vocabularies.Common.v1.SideEffects"] = "com.sap.vocabularies.Common.v1.SideEffectsType";
|
|
1865
|
+
TermToTypes["com.sap.vocabularies.Common.v1.DefaultValuesFunction"] = "com.sap.vocabularies.Common.v1.QualifiedName";
|
|
1866
|
+
TermToTypes["com.sap.vocabularies.Common.v1.FilterDefaultValue"] = "Edm.PrimitiveType";
|
|
1867
|
+
TermToTypes["com.sap.vocabularies.Common.v1.FilterDefaultValueHigh"] = "Edm.PrimitiveType";
|
|
1868
|
+
TermToTypes["com.sap.vocabularies.Common.v1.SortOrder"] = "com.sap.vocabularies.Common.v1.SortOrderType";
|
|
1869
|
+
TermToTypes["com.sap.vocabularies.Common.v1.RecursiveHierarchy"] = "com.sap.vocabularies.Common.v1.RecursiveHierarchyType";
|
|
1870
|
+
TermToTypes["com.sap.vocabularies.Common.v1.CreatedAt"] = "Edm.DateTimeOffset";
|
|
1871
|
+
TermToTypes["com.sap.vocabularies.Common.v1.CreatedBy"] = "com.sap.vocabularies.Common.v1.UserID";
|
|
1872
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ChangedAt"] = "Edm.DateTimeOffset";
|
|
1873
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ChangedBy"] = "com.sap.vocabularies.Common.v1.UserID";
|
|
1874
|
+
TermToTypes["com.sap.vocabularies.Common.v1.ApplyMultiUnitBehaviorForSortingAndFiltering"] = "Org.OData.Core.V1.Tag";
|
|
1875
|
+
TermToTypes["com.sap.vocabularies.Common.v1.PrimitivePropertyPath"] = "Org.OData.Core.V1.Tag";
|
|
1876
|
+
TermToTypes["com.sap.vocabularies.CodeList.v1.CurrencyCodes"] = "com.sap.vocabularies.CodeList.v1.CodeListSource";
|
|
1877
|
+
TermToTypes["com.sap.vocabularies.CodeList.v1.UnitsOfMeasure"] = "com.sap.vocabularies.CodeList.v1.CodeListSource";
|
|
1878
|
+
TermToTypes["com.sap.vocabularies.CodeList.v1.StandardCode"] = "Edm.PropertyPath";
|
|
1879
|
+
TermToTypes["com.sap.vocabularies.CodeList.v1.ExternalCode"] = "Edm.PropertyPath";
|
|
1880
|
+
TermToTypes["com.sap.vocabularies.CodeList.v1.IsConfigurationDeprecationCode"] = "Edm.Boolean";
|
|
1881
|
+
TermToTypes["com.sap.vocabularies.Communication.v1.Contact"] = "com.sap.vocabularies.Communication.v1.ContactType";
|
|
1882
|
+
TermToTypes["com.sap.vocabularies.Communication.v1.Address"] = "com.sap.vocabularies.Communication.v1.AddressType";
|
|
1883
|
+
TermToTypes["com.sap.vocabularies.Communication.v1.IsEmailAddress"] = "Org.OData.Core.V1.Tag";
|
|
1884
|
+
TermToTypes["com.sap.vocabularies.Communication.v1.IsPhoneNumber"] = "Org.OData.Core.V1.Tag";
|
|
1885
|
+
TermToTypes["com.sap.vocabularies.Communication.v1.Event"] = "com.sap.vocabularies.Communication.v1.EventData";
|
|
1886
|
+
TermToTypes["com.sap.vocabularies.Communication.v1.Task"] = "com.sap.vocabularies.Communication.v1.TaskData";
|
|
1887
|
+
TermToTypes["com.sap.vocabularies.Communication.v1.Message"] = "com.sap.vocabularies.Communication.v1.MessageData";
|
|
1888
|
+
TermToTypes["com.sap.vocabularies.Hierarchy.v1.RecursiveHierarchy"] = "com.sap.vocabularies.Hierarchy.v1.RecursiveHierarchyType";
|
|
1889
|
+
TermToTypes["com.sap.vocabularies.PersonalData.v1.EntitySemantics"] = "com.sap.vocabularies.PersonalData.v1.EntitySemanticsType";
|
|
1890
|
+
TermToTypes["com.sap.vocabularies.PersonalData.v1.FieldSemantics"] = "com.sap.vocabularies.PersonalData.v1.FieldSemanticsType";
|
|
1891
|
+
TermToTypes["com.sap.vocabularies.PersonalData.v1.IsPotentiallyPersonal"] = "Org.OData.Core.V1.Tag";
|
|
1892
|
+
TermToTypes["com.sap.vocabularies.PersonalData.v1.IsPotentiallySensitive"] = "Org.OData.Core.V1.Tag";
|
|
1893
|
+
TermToTypes["com.sap.vocabularies.Session.v1.StickySessionSupported"] = "com.sap.vocabularies.Session.v1.StickySessionSupportedType";
|
|
1894
|
+
TermToTypes["com.sap.vocabularies.UI.v1.HeaderInfo"] = "com.sap.vocabularies.UI.v1.HeaderInfoType";
|
|
1895
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Identification"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
1896
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Badge"] = "com.sap.vocabularies.UI.v1.BadgeType";
|
|
1897
|
+
TermToTypes["com.sap.vocabularies.UI.v1.LineItem"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
1898
|
+
TermToTypes["com.sap.vocabularies.UI.v1.StatusInfo"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
1899
|
+
TermToTypes["com.sap.vocabularies.UI.v1.FieldGroup"] = "com.sap.vocabularies.UI.v1.FieldGroupType";
|
|
1900
|
+
TermToTypes["com.sap.vocabularies.UI.v1.ConnectedFields"] = "com.sap.vocabularies.UI.v1.ConnectedFieldsType";
|
|
1901
|
+
TermToTypes["com.sap.vocabularies.UI.v1.GeoLocations"] = "com.sap.vocabularies.UI.v1.GeoLocationType";
|
|
1902
|
+
TermToTypes["com.sap.vocabularies.UI.v1.GeoLocation"] = "com.sap.vocabularies.UI.v1.GeoLocationType";
|
|
1903
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Contacts"] = "Edm.AnnotationPath";
|
|
1904
|
+
TermToTypes["com.sap.vocabularies.UI.v1.MediaResource"] = "com.sap.vocabularies.UI.v1.MediaResourceType";
|
|
1905
|
+
TermToTypes["com.sap.vocabularies.UI.v1.DataPoint"] = "com.sap.vocabularies.UI.v1.DataPointType";
|
|
1906
|
+
TermToTypes["com.sap.vocabularies.UI.v1.KPI"] = "com.sap.vocabularies.UI.v1.KPIType";
|
|
1907
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Chart"] = "com.sap.vocabularies.UI.v1.ChartDefinitionType";
|
|
1908
|
+
TermToTypes["com.sap.vocabularies.UI.v1.ValueCriticality"] = "com.sap.vocabularies.UI.v1.ValueCriticalityType";
|
|
1909
|
+
TermToTypes["com.sap.vocabularies.UI.v1.CriticalityLabels"] = "com.sap.vocabularies.UI.v1.CriticalityLabelType";
|
|
1910
|
+
TermToTypes["com.sap.vocabularies.UI.v1.SelectionFields"] = "Edm.PropertyPath";
|
|
1911
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Facets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
1912
|
+
TermToTypes["com.sap.vocabularies.UI.v1.HeaderFacets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
1913
|
+
TermToTypes["com.sap.vocabularies.UI.v1.QuickViewFacets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
1914
|
+
TermToTypes["com.sap.vocabularies.UI.v1.QuickCreateFacets"] = "com.sap.vocabularies.UI.v1.Facet";
|
|
1915
|
+
TermToTypes["com.sap.vocabularies.UI.v1.FilterFacets"] = "com.sap.vocabularies.UI.v1.ReferenceFacet";
|
|
1916
|
+
TermToTypes["com.sap.vocabularies.UI.v1.SelectionPresentationVariant"] = "com.sap.vocabularies.UI.v1.SelectionPresentationVariantType";
|
|
1917
|
+
TermToTypes["com.sap.vocabularies.UI.v1.PresentationVariant"] = "com.sap.vocabularies.UI.v1.PresentationVariantType";
|
|
1918
|
+
TermToTypes["com.sap.vocabularies.UI.v1.SelectionVariant"] = "com.sap.vocabularies.UI.v1.SelectionVariantType";
|
|
1919
|
+
TermToTypes["com.sap.vocabularies.UI.v1.ThingPerspective"] = "Org.OData.Core.V1.Tag";
|
|
1920
|
+
TermToTypes["com.sap.vocabularies.UI.v1.IsSummary"] = "Org.OData.Core.V1.Tag";
|
|
1921
|
+
TermToTypes["com.sap.vocabularies.UI.v1.PartOfPreview"] = "Org.OData.Core.V1.Tag";
|
|
1922
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Map"] = "Org.OData.Core.V1.Tag";
|
|
1923
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Gallery"] = "Org.OData.Core.V1.Tag";
|
|
1924
|
+
TermToTypes["com.sap.vocabularies.UI.v1.IsImageURL"] = "Org.OData.Core.V1.Tag";
|
|
1925
|
+
TermToTypes["com.sap.vocabularies.UI.v1.IsImage"] = "Org.OData.Core.V1.Tag";
|
|
1926
|
+
TermToTypes["com.sap.vocabularies.UI.v1.MultiLineText"] = "Org.OData.Core.V1.Tag";
|
|
1927
|
+
TermToTypes["com.sap.vocabularies.UI.v1.TextArrangement"] = "com.sap.vocabularies.UI.v1.TextArrangementType";
|
|
1928
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Note"] = "com.sap.vocabularies.UI.v1.NoteType";
|
|
1929
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Importance"] = "com.sap.vocabularies.UI.v1.ImportanceType";
|
|
1930
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Hidden"] = "Org.OData.Core.V1.Tag";
|
|
1931
|
+
TermToTypes["com.sap.vocabularies.UI.v1.IsCopyAction"] = "Org.OData.Core.V1.Tag";
|
|
1932
|
+
TermToTypes["com.sap.vocabularies.UI.v1.CreateHidden"] = "Org.OData.Core.V1.Tag";
|
|
1933
|
+
TermToTypes["com.sap.vocabularies.UI.v1.UpdateHidden"] = "Org.OData.Core.V1.Tag";
|
|
1934
|
+
TermToTypes["com.sap.vocabularies.UI.v1.DeleteHidden"] = "Org.OData.Core.V1.Tag";
|
|
1935
|
+
TermToTypes["com.sap.vocabularies.UI.v1.HiddenFilter"] = "Org.OData.Core.V1.Tag";
|
|
1936
|
+
TermToTypes["com.sap.vocabularies.UI.v1.AdaptationHidden"] = "Org.OData.Core.V1.Tag";
|
|
1937
|
+
TermToTypes["com.sap.vocabularies.UI.v1.DataFieldDefault"] = "com.sap.vocabularies.UI.v1.DataFieldAbstract";
|
|
1938
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Criticality"] = "com.sap.vocabularies.UI.v1.CriticalityType";
|
|
1939
|
+
TermToTypes["com.sap.vocabularies.UI.v1.CriticalityCalculation"] = "com.sap.vocabularies.UI.v1.CriticalityCalculationType";
|
|
1940
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Emphasized"] = "Org.OData.Core.V1.Tag";
|
|
1941
|
+
TermToTypes["com.sap.vocabularies.UI.v1.OrderBy"] = "Edm.PropertyPath";
|
|
1942
|
+
TermToTypes["com.sap.vocabularies.UI.v1.ParameterDefaultValue"] = "Edm.PrimitiveType";
|
|
1943
|
+
TermToTypes["com.sap.vocabularies.UI.v1.RecommendationState"] = "com.sap.vocabularies.UI.v1.RecommendationStateType";
|
|
1944
|
+
TermToTypes["com.sap.vocabularies.UI.v1.RecommendationList"] = "com.sap.vocabularies.UI.v1.RecommendationListType";
|
|
1945
|
+
TermToTypes["com.sap.vocabularies.UI.v1.ExcludeFromNavigationContext"] = "Org.OData.Core.V1.Tag";
|
|
1946
|
+
TermToTypes["com.sap.vocabularies.UI.v1.DoNotCheckScaleOfMeasuredQuantity"] = "Edm.Boolean";
|
|
1947
|
+
TermToTypes["com.sap.vocabularies.HTML5.v1.CssDefaults"] = "com.sap.vocabularies.HTML5.v1.CssDefaultsType";
|
|
1948
|
+
})(TermToTypes = exports.TermToTypes || (exports.TermToTypes = {}));
|
|
1949
|
+
|
|
1950
|
+
|
|
1951
|
+
/***/ }),
|
|
1952
|
+
|
|
1953
|
+
/***/ 899:
|
|
1954
|
+
/***/ (function(__unused_webpack_module, exports) {
|
|
1955
|
+
|
|
1956
|
+
|
|
1957
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
1958
|
+
exports.VocabularyReferences = void 0;
|
|
1959
|
+
/**
|
|
1960
|
+
* The list of vocabularies with default aliases.
|
|
1950
1961
|
*/
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
}
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
else if (annotation.hasOwnProperty('$Type')) {
|
|
1969
|
-
return { ...baseAnnotation, record: revertCollectionItemToRawType(references, annotation) };
|
|
1970
|
-
}
|
|
1971
|
-
else {
|
|
1972
|
-
return { ...baseAnnotation, value: revertValueToRawType(references, annotation) };
|
|
1973
|
-
}
|
|
1974
|
-
}
|
|
1975
|
-
exports.revertTermToGenericType = revertTermToGenericType;
|
|
1962
|
+
exports.VocabularyReferences = [
|
|
1963
|
+
{ alias: "Auth", namespace: "Org.OData.Authorization.V1", uri: "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Authorization.V1.xml" },
|
|
1964
|
+
{ alias: "Core", namespace: "Org.OData.Core.V1", uri: "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.xml" },
|
|
1965
|
+
{ alias: "Capabilities", namespace: "Org.OData.Capabilities.V1", uri: "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Capabilities.V1.xml" },
|
|
1966
|
+
{ alias: "Aggregation", namespace: "Org.OData.Aggregation.V1", uri: "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Aggregation.V1.xml" },
|
|
1967
|
+
{ alias: "Validation", namespace: "Org.OData.Validation.V1", uri: "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Validation.V1.xml" },
|
|
1968
|
+
{ alias: "Measures", namespace: "Org.OData.Measures.V1", uri: "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Measures.V1.xml" },
|
|
1969
|
+
{ alias: "Analytics", namespace: "com.sap.vocabularies.Analytics.v1", uri: "https://sap.github.io/odata-vocabularies/vocabularies/Analytics.xml" },
|
|
1970
|
+
{ alias: "Common", namespace: "com.sap.vocabularies.Common.v1", uri: "https://sap.github.io/odata-vocabularies/vocabularies/Common.xml" },
|
|
1971
|
+
{ alias: "CodeList", namespace: "com.sap.vocabularies.CodeList.v1", uri: "https://sap.github.io/odata-vocabularies/vocabularies/CodeList.xml" },
|
|
1972
|
+
{ alias: "Communication", namespace: "com.sap.vocabularies.Communication.v1", uri: "https://sap.github.io/odata-vocabularies/vocabularies/Communication.xml" },
|
|
1973
|
+
{ alias: "Hierarchy", namespace: "com.sap.vocabularies.Hierarchy.v1", uri: "https://sap.github.io/odata-vocabularies/vocabularies/Hierarchy.xml" },
|
|
1974
|
+
{ alias: "PersonalData", namespace: "com.sap.vocabularies.PersonalData.v1", uri: "https://sap.github.io/odata-vocabularies/vocabularies/PersonalData.xml" },
|
|
1975
|
+
{ alias: "Session", namespace: "com.sap.vocabularies.Session.v1", uri: "https://sap.github.io/odata-vocabularies/vocabularies/Session.xml" },
|
|
1976
|
+
{ alias: "UI", namespace: "com.sap.vocabularies.UI.v1", uri: "https://sap.github.io/odata-vocabularies/vocabularies/UI.xml" },
|
|
1977
|
+
{ alias: "HTML5", namespace: "com.sap.vocabularies.HTML5.v1", uri: "https://sap.github.io/odata-vocabularies/vocabularies/HTML5.xml" }
|
|
1978
|
+
];
|
|
1976
1979
|
|
|
1977
1980
|
|
|
1978
1981
|
/***/ })
|
|
@@ -2008,7 +2011,7 @@ exports.revertTermToGenericType = revertTermToGenericType;
|
|
|
2008
2011
|
/******/ // startup
|
|
2009
2012
|
/******/ // Load entry module and return exports
|
|
2010
2013
|
/******/ // This entry module is referenced by other modules so it can't be inlined
|
|
2011
|
-
/******/ var __webpack_exports__ = __webpack_require__(
|
|
2014
|
+
/******/ var __webpack_exports__ = __webpack_require__(878);
|
|
2012
2015
|
/******/ AnnotationConverter = __webpack_exports__;
|
|
2013
2016
|
/******/
|
|
2014
2017
|
/******/ })()
|
|
@@ -2016,4 +2019,4 @@ exports.revertTermToGenericType = revertTermToGenericType;
|
|
|
2016
2019
|
|
|
2017
2020
|
return AnnotationConverter;
|
|
2018
2021
|
},true);
|
|
2019
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Bbm5vdGF0aW9uQ29udmVydGVyL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2FwLXV4K2Fubm90YXRpb24tY29udmVydGVyQDAuNi40L25vZGVfbW9kdWxlcy9Ac2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyL3NyYy9jb252ZXJ0ZXIudHMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCthbm5vdGF0aW9uLWNvbnZlcnRlckAwLjYuNC9ub2RlX21vZHVsZXMvQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlci9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCthbm5vdGF0aW9uLWNvbnZlcnRlckAwLjYuNC9ub2RlX21vZHVsZXMvQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlci9zcmMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCthbm5vdGF0aW9uLWNvbnZlcnRlckAwLjYuNC9ub2RlX21vZHVsZXMvQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlci9zcmMvd3JpdGViYWNrLnRzIiwid2VicGFjazovL0Fubm90YXRpb25Db252ZXJ0ZXIvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci93ZWJwYWNrL3N0YXJ0dXAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQXdDQSx5Q0FhaUI7QUFFakI7O0dBRUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRXREOzs7Ozs7R0FNRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsVUFBaUIsRUFBRSxhQUFrQjtJQUMzRCxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLGFBQWEsRUFBRTtRQUNyRCxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQ2xDO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDdEIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxhQUFhLENBQ2xCLFNBQW9CLEVBQ3BCLFlBQWlCLEVBQ2pCLElBQVksRUFDWixlQUF3Qjs7SUFFeEIsc0RBQXNEO0lBQ3RELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0QixJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QixZQUFZLEdBQUcsU0FBUyxDQUFDLENBQUMsbURBQW1EO0tBQ2hGO0lBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDaEUsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZCLDhCQUE4QjtZQUM5QixNQUFNLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxHQUFHLHdCQUFZLEVBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzlELFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUIsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLGNBQWMsRUFBRSxDQUFDLENBQUM7U0FDekM7YUFBTTtZQUNILFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDNUI7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDLEVBQUUsRUFBYyxDQUFDLENBQUM7SUFFbkIsa0RBQWtEO0lBQ2xELElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRTtRQUM1Qix5REFBeUQ7UUFDekQsSUFDSSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO1lBQ3pELFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBSyxlQUFTLENBQUMsMkJBQTJCLEVBQUUsMENBQUUsa0JBQWtCLEdBQ2pGO1lBQ0UsK0VBQStFO1lBQy9FLFlBQVk7Z0JBQ1IscUJBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsbUNBQ2pELFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsbUNBQ2xELFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRCxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxzQ0FBc0M7U0FDL0Q7YUFBTTtZQUNILFlBQVksR0FBRyxTQUFTLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztTQUMxRDtLQUNKO1NBQU0sSUFBSSxZQUFZLENBQUMsaUJBQWlCLENBQUMsS0FBSyxTQUFTLEVBQUU7UUFDdEQsNkNBQTZDO1FBQzdDLFlBQVksR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQztLQUNsRDtTQUFNLElBQUksWUFBWSxDQUFDLEtBQUssS0FBSyxVQUFVLEVBQUU7UUFDMUMsNkVBQTZFO1FBQzdFLE1BQU0sZ0JBQWdCLEdBQUcsZ0NBQW9CLEVBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BGLFlBQVk7WUFDUixlQUFTLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsbUNBQUksU0FBUyxDQUFDLHVCQUF1QixDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDakg7SUFFRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUM5QixDQUFDLE9BQThCLEVBQUUsT0FBZSxFQUFFLEVBQUU7O1FBQ2hELE1BQU0sS0FBSyxHQUFHLENBQUMsT0FBZSxFQUFFLEVBQUU7WUFDOUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1lBQzNCLE9BQU8sT0FBTyxDQUFDO1FBQ25CLENBQUMsQ0FBQztRQUVGLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDOUIsT0FBTyxPQUFPLENBQUM7U0FDbEI7UUFFRCxPQUFPLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFFLGFBQWE7UUFDYixJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxLQUFLLGdCQUFnQixFQUFFO1lBQ3pELE1BQU0sQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3RCxNQUFNLFVBQVUsR0FBRyxhQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBDQUFHLElBQUksQ0FBQyxDQUFDO1lBRXBGLElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRTtnQkFDMUIsT0FBTyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7Z0JBQzVCLE9BQU8sT0FBTyxDQUFDO2FBQ2xCO1lBQ0QsT0FBTyxLQUFLLENBQ1IsZUFBZSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQ3JFLE9BQU8sQ0FBQyxNQUFNLENBQUMsa0JBQ25CLEdBQUcsQ0FDTixDQUFDO1NBQ0w7UUFFRCxpQ0FBaUM7UUFDakMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUN4QixJQUFJLE9BQTJCLENBQUM7WUFDaEMsSUFBSSxPQUFPLEtBQUssaUJBQWlCLEVBQUU7Z0JBQy9CLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUNsQztpQkFBTSxJQUFJLE9BQU8sS0FBSyxPQUFPLEVBQUU7Z0JBQzVCLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQzthQUNqQztZQUVELElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRTtnQkFDdkIsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3ZGLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsZ0JBQXFCLEVBQUUsRUFBRTtvQkFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7d0JBQ2hELE9BQU8sQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO3FCQUMvRTtnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFFSCxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7Z0JBQ2xDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzFFLE9BQU8sT0FBTyxDQUFDO2FBQ2xCO1NBQ0o7UUFFRCxxQ0FBcUM7UUFDckMsUUFBUSxhQUFPLENBQUMsTUFBTSwwQ0FBRSxLQUFLLEVBQUU7WUFDM0IsS0FBSyxRQUFRO2dCQUNULG1FQUFtRTtnQkFFbkUsTUFBTTtZQUNWLEtBQUssaUJBQWlCO2dCQUNsQjtvQkFDSSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBeUIsQ0FBQztvQkFFdEQsSUFBSSxPQUFPLEtBQUssRUFBRSxJQUFJLE9BQU8sS0FBSyxXQUFXLENBQUMsa0JBQWtCLEVBQUU7d0JBQzlELE9BQU8sT0FBTyxDQUFDO3FCQUNsQjtvQkFFRCxzREFBc0Q7b0JBQ3RELE1BQU0sV0FBVyxHQUNiLHVCQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsbUNBQ3ZDLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxtQ0FDdkMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBRS9DLElBQUksV0FBVyxFQUFFO3dCQUNiLE9BQU8sQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO3dCQUM3QixPQUFPLE9BQU8sQ0FBQztxQkFDbEI7aUJBQ0o7Z0JBQ0QsTUFBTTtZQUVWLEtBQUssV0FBVyxDQUFDO1lBQ2pCLEtBQUssV0FBVyxDQUFDLENBQUM7Z0JBQ2QsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQStCLENBQUM7Z0JBRTVELElBQUksT0FBTyxLQUFLLEVBQUUsSUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFO29CQUN2Qyw4REFBOEQ7b0JBQzlELE9BQU8sQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztvQkFDeEMsT0FBTyxPQUFPLENBQUM7aUJBQ2xCO2dCQUVELElBQUksT0FBTyxLQUFLLEdBQUcsRUFBRTtvQkFDakIsT0FBTyxPQUFPLENBQUM7aUJBQ2xCO2dCQUVELElBQUksT0FBTyxLQUFLLDRCQUE0QixFQUFFO29CQUMxQyxNQUFNLDBCQUEwQixHQUFHLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQztvQkFDekUsT0FBTyxDQUFDLE1BQU0sR0FBRywwQkFBMEIsQ0FBQztvQkFDNUMsT0FBTyxPQUFPLENBQUM7aUJBQ2xCO2dCQUVELDREQUE0RDtnQkFDNUQsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN6RSxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQy9CLE9BQU8sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNwRixPQUFPLE9BQU8sQ0FBQzthQUNsQjtZQUVELEtBQUssWUFBWTtnQkFDYjtvQkFDSSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBb0IsQ0FBQztvQkFFakQsSUFBSSxPQUFPLEtBQUssRUFBRSxJQUFJLE9BQU8sS0FBSyxPQUFPLEVBQUU7d0JBQ3ZDLE9BQU8sT0FBTyxDQUFDO3FCQUNsQjtvQkFFRCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUMvRCxJQUFJLFFBQVEsRUFBRTt3QkFDVixPQUFPLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQzt3QkFDMUIsT0FBTyxPQUFPLENBQUM7cUJBQ2xCO29CQUVELE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDN0UsSUFBSSxrQkFBa0IsRUFBRTt3QkFDcEIsT0FBTyxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQzt3QkFDcEMsT0FBTyxPQUFPLENBQUM7cUJBQ2xCO29CQUVELE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzVDLElBQUksTUFBTSxFQUFFO3dCQUNSLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO3dCQUN4QixPQUFPLE9BQU8sQ0FBQztxQkFDbEI7aUJBQ0o7Z0JBQ0QsTUFBTTtZQUVWLEtBQUssY0FBYyxDQUFDLENBQUM7Z0JBQ2pCLG1DQUFtQztnQkFDbkMsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDeEUsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUMvQixPQUFPLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDcEYsT0FBTyxPQUFPLENBQUM7YUFDbEI7WUFFRCxLQUFLLFFBQVEsQ0FBQyxDQUFDO2dCQUNYLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFnQixDQUFDO2dCQUU3QyxJQUFJLE9BQU8sS0FBSyxFQUFFLEVBQUU7b0JBQ2hCLE9BQU8sT0FBTyxDQUFDO2lCQUNsQjtnQkFFRCxJQUFJLE9BQU8sS0FBSyxnQkFBZ0IsSUFBSSxPQUFPLEtBQUssR0FBRyxFQUFFO29CQUNqRCxPQUFPLE9BQU8sQ0FBQztpQkFDbEI7Z0JBRUQsSUFBSSxPQUFPLEtBQUssWUFBWSxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUU7b0JBQ2pELE9BQU8sQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztvQkFDeEMsT0FBTyxPQUFPLENBQUM7aUJBQ2xCO2dCQUVELE1BQU0sV0FBVyxHQUNiLGlCQUFXLENBQUMsVUFBVSxDQUFDLE9BQWMsQ0FBQyxtQ0FDdEMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFzQixFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDO2dCQUVwRixJQUFJLFdBQVcsRUFBRTtvQkFDYixPQUFPLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQztvQkFDN0IsT0FBTyxPQUFPLENBQUM7aUJBQ2xCO2dCQUNELE1BQU07YUFDVDtZQUVELEtBQUssVUFBVTtnQkFDWDtvQkFDSSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBa0IsQ0FBQztvQkFFL0Msb0RBQW9EO29CQUNwRCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsVUFBcUMsQ0FBQztvQkFDL0QsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO3dCQUNwQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDbEQsSUFBSSxRQUFRLEVBQUU7NEJBQ1YsT0FBTyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7NEJBQzFCLE9BQU8sT0FBTyxDQUFDO3lCQUNsQjt3QkFFRCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ3RFLElBQUksa0JBQWtCLEVBQUU7NEJBQ3BCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLENBQUM7NEJBQ3BDLE9BQU8sT0FBTyxDQUFDO3lCQUNsQjtxQkFDSjtpQkFDSjtnQkFDRCxNQUFNO1lBRVYsS0FBSyxpQkFBaUI7Z0JBQ2xCLE1BQU0sY0FBYyxHQUFJLE9BQU8sQ0FBQyxNQUEwQixDQUFDLGFBQWEsQ0FBQztnQkFDekUsSUFBSSxjQUFjLEtBQUssU0FBUyxFQUFFO29CQUM5QixNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDakUsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO29CQUMvQixPQUFPLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDcEYsT0FBTyxPQUFPLENBQUM7aUJBQ2xCO2dCQUNELE1BQU07WUFFVixLQUFLLG9CQUFvQjtnQkFDckIsbURBQW1EO2dCQUNuRCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsU0FBUyxFQUFHLE9BQU8sQ0FBQyxNQUE2QixDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDcEcsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUMvQixPQUFPLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDcEYsT0FBTyxPQUFPLENBQUM7WUFFbkI7Z0JBQ0ksSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFO29CQUNoQixPQUFPLE9BQU8sQ0FBQztpQkFDbEI7Z0JBRUQsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUN6QixPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3pDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzFFLE9BQU8sT0FBTyxDQUFDO2lCQUNsQjtTQUNSO1FBRUQsT0FBTyxLQUFLLENBQ1IsWUFBWSxPQUFPLGtCQUFrQixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLGtCQUFrQixHQUFHLENBQ3JHLENBQUM7SUFDTixDQUFDLEVBQ0QsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUN6RCxDQUFDO0lBRUYsY0FBYztJQUNkLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1FBQ2hCLElBQUksZUFBZSxFQUFFO1lBQ2pCLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDdEcsU0FBUyxDQUFDLFFBQVEsQ0FDZCx5Q0FBeUM7Z0JBQ3JDLElBQUk7Z0JBQ0osSUFBSTtnQkFDSixJQUFJO2dCQUNKLElBQUk7Z0JBQ0osMEpBQTBKO2dCQUMxSixxQkFBcUI7Z0JBQ3JCLGVBQWU7Z0JBQ2YsR0FBRztnQkFDSCxJQUFJO2dCQUNKLGlCQUFpQjtnQkFDakIsY0FBYztnQkFDZCxHQUFHO2dCQUNILElBQUk7Z0JBQ0osb0JBQW9CO2dCQUNwQixJQUFJO2dCQUNKLEdBQUcsQ0FDVixDQUFDO1NBQ0w7YUFBTTtZQUNILFNBQVMsQ0FBQyxRQUFRLENBQ2QseUNBQXlDO2dCQUNyQyxJQUFJO2dCQUNKLElBQUk7Z0JBQ0osSUFBSTtnQkFDSiwwSkFBMEo7Z0JBQzFKLHFCQUFxQjtnQkFDckIsWUFBWSxDQUFDLENBQUMsQ0FBQztnQkFDZixHQUFHO2dCQUNILElBQUk7Z0JBQ0osd0JBQXdCO2dCQUN4QixZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUNmLEdBQUcsQ0FDVixDQUFDO1NBQ0w7S0FDSjtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsT0FBZTtJQUNyQyxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUNmLFNBQW9CLEVBQ3BCLGFBQWtCLEVBQ2xCLFdBQW1CLEVBQ25CLGVBQXVCLEVBQ3ZCLGFBQXFCLEVBQ3JCLGFBQXlCLEVBQ3pCLFFBQWdCO0lBRWhCLElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRTtRQUM3QixPQUFPLFNBQVMsQ0FBQztLQUNwQjtJQUNELFFBQVEsYUFBYSxDQUFDLElBQUksRUFBRTtRQUN4QixLQUFLLFFBQVE7WUFDVCxPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDaEMsS0FBSyxLQUFLO1lBQ04sT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDO1FBQzdCLEtBQUssTUFBTTtZQUNQLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQztRQUM5QixLQUFLLFNBQVM7WUFDVixPQUFPLG1CQUFPLEVBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLEtBQUssTUFBTTtZQUNQLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQztRQUM5QixLQUFLLFlBQVk7WUFDYixNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5RCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLGtCQUFVLENBQUMsZ0NBQW9CLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JFLE9BQU8sU0FBUyxDQUFDO2FBQ3BCO1lBQ0QsT0FBTyxXQUFXLENBQUM7UUFFdkIsS0FBSyxjQUFjO1lBQ2YsT0FBTztnQkFDSCxJQUFJLEVBQUUsY0FBYztnQkFDcEIsS0FBSyxFQUFFLGFBQWEsQ0FBQyxZQUFZO2dCQUNqQyxrQkFBa0IsRUFBRSxRQUFRO2dCQUM1QixPQUFPLEVBQUUsYUFBYSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQyxNQUFNO2dCQUNoRyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsYUFBYTthQUNyQyxDQUFDO1FBQ04sS0FBSyx3QkFBd0I7WUFDekIsT0FBTztnQkFDSCxJQUFJLEVBQUUsd0JBQXdCO2dCQUM5QixLQUFLLEVBQUUsYUFBYSxDQUFDLHNCQUFzQjtnQkFDM0Msa0JBQWtCLEVBQUUsUUFBUTtnQkFDNUIsT0FBTyxFQUFFLGFBQWEsQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxzQkFBc0IsRUFBRSxXQUFXLENBQUM7cUJBQzlGLE1BQU07Z0JBQ1gsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLGFBQWE7YUFDckMsQ0FBQztRQUNOLEtBQUssZ0JBQWdCO1lBQ2pCLE9BQU87Z0JBQ0gsSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsS0FBSyxFQUFFLGFBQWEsQ0FBQyxjQUFjO2dCQUNuQyxrQkFBa0IsRUFBRSxRQUFRO2dCQUM1QixPQUFPLEVBQUUsYUFBYSxDQUNsQixTQUFTLEVBQ1QsYUFBYSxFQUNiLFNBQVMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxFQUMvQyxXQUFXLENBQ2QsQ0FBQyxNQUFNO2dCQUNSLGVBQWUsRUFBRSxXQUFXO2dCQUM1QixJQUFJLEVBQUUsRUFBRTtnQkFDUixJQUFJLEVBQUUsRUFBRTtnQkFDUixDQUFDLGlCQUFpQixDQUFDLEVBQUUsYUFBYTthQUNyQyxDQUFDO1FBQ04sS0FBSyxNQUFNO1lBQ1AsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDaEcsSUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3RDLG9CQUFvQjtnQkFDcEIsT0FBTyxPQUFPLENBQUM7YUFDbEI7aUJBQU07Z0JBQ0gsT0FBTztvQkFDSCxJQUFJLEVBQUUsTUFBTTtvQkFDWixJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUk7b0JBQ3hCLGtCQUFrQixFQUFFLFFBQVE7b0JBQzVCLE9BQU8sRUFBRSxPQUFPO29CQUNoQixDQUFDLGlCQUFpQixDQUFDLEVBQUUsYUFBYTtpQkFDckMsQ0FBQzthQUNMO1FBRUwsS0FBSyxRQUFRO1lBQ1QsT0FBTyxXQUFXLENBQ2QsU0FBUyxFQUNULFdBQVcsRUFDWCxhQUFhLEVBQ2IsZUFBZSxFQUNmLGFBQWEsRUFDYixhQUFhLENBQUMsTUFBTSxFQUNwQixRQUFRLENBQ1gsQ0FBQztRQUNOLEtBQUssWUFBWTtZQUNiLE9BQU8sZUFBZSxDQUNsQixTQUFTLEVBQ1QsYUFBYSxFQUNiLFdBQVcsRUFDWCxlQUFlLEVBQ2YsYUFBYSxFQUNiLGFBQWEsQ0FBQyxVQUFVLEVBQ3hCLFFBQVEsQ0FDWCxDQUFDO1FBQ04sS0FBSyxPQUFPLENBQUM7UUFDYixLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxJQUFJLENBQUM7UUFDVixLQUFLLElBQUksQ0FBQztRQUNWLEtBQUssSUFBSSxDQUFDO1FBQ1YsS0FBSyxJQUFJLENBQUM7UUFDVixLQUFLLElBQUksQ0FBQztRQUNWLEtBQUssSUFBSSxDQUFDO1FBQ1YsS0FBSyxJQUFJLENBQUM7UUFDVixLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssSUFBSSxDQUFDO1FBQ1Y7WUFDSSxPQUFPLGFBQWEsQ0FBQztLQUM1QjtBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsaUJBQWlCLENBQ3RCLFNBQW9CLEVBQ3BCLGVBQXVCLEVBQ3ZCLGdCQUF3QixFQUN4QixlQUF3QjtJQUV4QixJQUFJLFVBQVUsR0FBSSxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN2RCxJQUFJLGVBQWUsRUFBRTtRQUNqQixlQUFlLEdBQUcsR0FBRywrQkFBbUIsRUFBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLElBQUksZUFBZSxFQUFFLENBQUM7UUFDcEYsVUFBVSxHQUFJLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQ3REO0lBRUQsU0FBUyxDQUFDLFFBQVEsQ0FDZCwrQ0FBK0MsZUFBZSx3Q0FBd0MsVUFBVTs7dUJBRWpHLGdCQUFnQjtxQkFDbEIsZUFBZTs7O2VBR3JCLENBQ1YsQ0FBQztJQUVGLE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUM7QUFFRCxTQUFTLHdCQUF3QixDQUFDLGlCQUFzQjtJQUNwRCxPQUFPLENBQ0gsaUJBQWlCLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztRQUMxQyxDQUFDLGlCQUFpQixDQUFDLEtBQUssS0FBSywrQ0FBK0M7WUFDeEUsaUJBQWlCLENBQUMsS0FBSyxLQUFLLGdEQUFnRCxDQUFDLENBQ3BGLENBQUM7QUFDTixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQ3BCLFNBQW9CLEVBQ3BCLFdBQW1CLEVBQ25CLGFBQWtCLEVBQ2xCLGVBQW1DLEVBQ25DLGdCQUFrQztJQUVsQyxJQUFJLFVBQVUsQ0FBQztJQUNmLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksV0FBVyxFQUFFO1FBQ3ZDLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxlQUFlLENBQUMsQ0FBQztLQUM3RztTQUFNO1FBQ0gsVUFBVSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekQ7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUN0QixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQ2hCLFNBQW9CLEVBQ3BCLFdBQW1CLEVBQ25CLGFBQWtCLEVBQ2xCLGVBQW1DLEVBQ25DLGFBQXFCLEVBQ3JCLGdCQUFrQyxFQUNsQyxVQUFrQjs7SUFFbEIsTUFBTSxjQUFjLEdBQVE7UUFDeEIsS0FBSyxFQUFFLGVBQWUsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLENBQUM7UUFDaEcsa0JBQWtCLEVBQUUsVUFBVTtRQUM5QixDQUFDLGlCQUFpQixDQUFDLEVBQUUsYUFBYTtLQUNyQyxDQUFDO0lBRUYsNEJBQTRCO0lBQzVCLGdCQUFJLEVBQUMsY0FBYyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUU7O1FBQ3JDLGdIQUFnSDtRQUNoSCwwQ0FBMEM7UUFDMUMsSUFBSSxXQUFXLENBQUM7UUFDaEIsSUFBSSxnQkFBZ0IsQ0FBQyxXQUFXLElBQUksZ0JBQWdCLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDekUsV0FBVyxHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQztTQUM5QzthQUFNO1lBQ0gsV0FBVyxHQUFHLGVBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsMENBQUUsV0FBVyxDQUFDO1NBQzVFO1FBRUQsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLE9BQU8sQ0FBQyxDQUFDLFVBQWUsRUFBRSxFQUFFO1lBQ3JDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO1lBQy9CLFVBQVUsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDO1lBQ3BDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLGFBQWEsQ0FBQztZQUM5QyxVQUFVLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxVQUFVLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLFdBQVcsYUFBWCxXQUFXLGNBQVgsV0FBVyxHQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxpQkFBaUIsR0FBRyxzQkFBZ0IsQ0FBQyxjQUFjLDBDQUFFLE1BQU0sQ0FBQyxDQUFDLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxFQUFFO1FBQ25HLGdCQUFJLEVBQUMsaUJBQWlCLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FDN0MsVUFBVSxDQUNOLFNBQVMsRUFDVCxhQUFhLEVBQ2IsV0FBVyxFQUNYLGFBQWEsQ0FBQyxJQUFJLEVBQ2xCLGFBQWEsRUFDYixhQUFhLENBQUMsS0FBSyxFQUNuQixHQUFHLFVBQVUsSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLENBQ3hDLENBQ0osQ0FBQztRQUVGLE9BQU8saUJBQWlCLENBQUM7SUFDN0IsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBRW5CLElBQUksd0JBQXdCLENBQUMsaUJBQWlCLENBQUMsRUFBRTtRQUM3QyxnQkFBSSxFQUFDLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUU7O1lBQ3pDLDREQUE0RDtZQUM1RCxJQUFJLFlBQVksR0FBRyxtQkFBYSxDQUFDLE9BQU8sMENBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFckUsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDZiw2Q0FBNkM7Z0JBQzdDLFlBQVksR0FBRyxlQUFTLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLDBDQUFFLE1BQU0sQ0FBQzthQUN2RjtZQUVELElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ2YsK0NBQStDO2dCQUMvQyxZQUFZLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RSxJQUFJLENBQUMsYUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFFLE9BQU8sR0FBRTtvQkFDeEIsWUFBWSxHQUFHLFNBQVMsQ0FBQztpQkFDNUI7YUFDSjtZQUVELElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ2YsU0FBUyxDQUFDLFFBQVEsQ0FDZCxpQ0FBaUMsaUJBQWlCLENBQUMsTUFBTSxrQkFBa0IsY0FBYyxDQUFDLGtCQUFrQixHQUFHLENBQ2xILENBQUM7YUFDTDtZQUNELE9BQU8sWUFBWSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0tBQ047SUFDRCxPQUFPLGlCQUFpQixDQUFDO0FBQzdCLENBQUM7QUF1QkQ7Ozs7O0dBS0c7QUFDSCxTQUFTLHdCQUF3QixDQUFDLG9CQUEyQjtJQUN6RCxJQUFJLElBQUksR0FBb0Isb0JBQTRCLENBQUMsSUFBSSxDQUFDO0lBQzlELElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3ZELE1BQU0sWUFBWSxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLElBQUksWUFBWSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUM3QyxJQUFJLEdBQUcsY0FBYyxDQUFDO1NBQ3pCO2FBQU0sSUFBSSxZQUFZLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzVDLElBQUksR0FBRyxNQUFNLENBQUM7U0FDakI7YUFBTSxJQUFJLFlBQVksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtZQUN0RCxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7U0FDM0I7YUFBTSxJQUFJLFlBQVksQ0FBQyxjQUFjLENBQUMsd0JBQXdCLENBQUMsRUFBRTtZQUM5RCxJQUFJLEdBQUcsd0JBQXdCLENBQUM7U0FDbkM7YUFBTSxJQUNILE9BQU8sWUFBWSxLQUFLLFFBQVE7WUFDaEMsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFlBQVksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUN4RjtZQUNFLElBQUksR0FBRyxRQUFRLENBQUM7U0FDbkI7YUFBTSxJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVEsRUFBRTtZQUN6QyxJQUFJLEdBQUcsUUFBUSxDQUFDO1NBQ25CO0tBQ0o7U0FBTSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDM0IsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0tBQzVCO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUNwQixTQUFvQixFQUNwQixhQUFrQixFQUNsQixXQUFtQixFQUNuQixlQUF1QixFQUN2QixhQUFxQixFQUNyQixvQkFBMkIsRUFDM0IsU0FBaUI7SUFFakIsTUFBTSx3QkFBd0IsR0FBRyx3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBRWhGLFFBQVEsd0JBQXdCLEVBQUU7UUFDOUIsS0FBSyxjQUFjO1lBQ2YsT0FBTyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFnQixFQUFFO2dCQUN4RSxNQUFNLE1BQU0sR0FBaUI7b0JBQ3pCLElBQUksRUFBRSxjQUFjO29CQUNwQixLQUFLLEVBQUUsWUFBWSxDQUFDLFlBQVk7b0JBQ2hDLGtCQUFrQixFQUFFLEdBQUcsU0FBUyxJQUFJLFdBQVcsRUFBRTtpQkFDN0MsQ0FBQztnQkFFVCxnQkFBSSxFQUNBLE1BQU0sRUFDTixTQUFTLEVBQ1QsR0FBRyxFQUFFOztvQkFDRCwwQkFBYSxDQUFXLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUM7eUJBQ3BGLE1BQU0sbUNBQUssRUFBZTtpQkFBQSxDQUFDLCtDQUErQztpQkFDdEYsQ0FBQztnQkFFRixPQUFPLE1BQU0sQ0FBQztZQUNsQixDQUFDLENBQUMsQ0FBQztRQUVQLEtBQUssTUFBTTtZQUNQLG1CQUFtQjtZQUNuQixPQUFPLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUMxQyxPQUFPLGFBQWEsQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3ZGLENBQUMsQ0FBQyxDQUFDO1FBRVAsS0FBSyxnQkFBZ0I7WUFDakIsT0FBTyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsYUFBYSxFQUFFLEVBQUU7Z0JBQzlELE1BQU0sTUFBTSxHQUFHO29CQUNYLElBQUksRUFBRSxnQkFBZ0I7b0JBQ3RCLEtBQUssRUFBRSxjQUFjLENBQUMsY0FBYztvQkFDcEMsa0JBQWtCLEVBQUUsR0FBRyxTQUFTLElBQUksYUFBYSxFQUFFO29CQUNuRCxlQUFlLEVBQUUsV0FBVztvQkFDNUIsSUFBSSxFQUFFLEVBQUU7b0JBQ1IsSUFBSSxFQUFFLEVBQUU7aUJBQ0osQ0FBQztnQkFFVCxnQkFBSSxFQUNBLE1BQU0sRUFDTixTQUFTLEVBQ1QsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsY0FBYyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQ25HLENBQUM7Z0JBRUYsT0FBTyxNQUFNLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFFUCxLQUFLLHdCQUF3QjtZQUN6QixPQUFPLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLGVBQWUsRUFBRSxVQUFVLEVBQUUsRUFBRTs7Z0JBQzVELE1BQU0sc0JBQXNCLEdBQUcscUJBQWUsQ0FBQyxzQkFBc0IsbUNBQUksRUFBRSxDQUFDO2dCQUM1RSxNQUFNLE1BQU0sR0FBRztvQkFDWCxJQUFJLEVBQUUsd0JBQXdCO29CQUM5QixLQUFLLEVBQUUsc0JBQXNCO29CQUM3QixrQkFBa0IsRUFBRSxHQUFHLFNBQVMsSUFBSSxVQUFVLEVBQUU7aUJBQzVDLENBQUM7Z0JBRVQsSUFBSSxzQkFBc0IsS0FBSyxFQUFFLEVBQUU7b0JBQy9CLE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO2lCQUM5QjtxQkFBTTtvQkFDSCxnQkFBSSxFQUNBLE1BQU0sRUFDTixTQUFTLEVBQ1QsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUM1RixDQUFDO2lCQUNMO2dCQUVELE9BQU8sTUFBTSxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBRVAsS0FBSyxRQUFRO1lBQ1QsT0FBTyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsRUFBRTtnQkFDNUQsT0FBTyxXQUFXLENBQ2QsU0FBUyxFQUNULFdBQVcsRUFDWCxhQUFhLEVBQ2IsZUFBZSxFQUNmLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsR0FBRyxTQUFTLElBQUksU0FBUyxFQUFFLENBQzlCLENBQUM7WUFDTixDQUFDLENBQUMsQ0FBQztRQUVQLEtBQUssT0FBTyxDQUFDO1FBQ2IsS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLElBQUksQ0FBQztRQUNWLEtBQUssSUFBSSxDQUFDO1FBQ1YsS0FBSyxJQUFJLENBQUM7UUFDVixLQUFLLElBQUksQ0FBQztRQUNWLEtBQUssSUFBSSxDQUFDO1FBQ1YsS0FBSyxJQUFJLENBQUM7UUFDVixLQUFLLElBQUksQ0FBQztRQUNWLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxLQUFLLENBQUM7UUFDWCxLQUFLLElBQUk7WUFDTCxPQUFPLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFMUQsS0FBSyxRQUFRO1lBQ1QsT0FBTyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDNUMsSUFBSSxPQUFPLFdBQVcsS0FBSyxRQUFRLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTtvQkFDOUQsT0FBTyxXQUFXLENBQUM7aUJBQ3RCO3FCQUFNO29CQUNILE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQztpQkFDN0I7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUVQO1lBQ0ksSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNuQyxPQUFPLEVBQUUsQ0FBQzthQUNiO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0tBQzNDO0FBQ0wsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQzNCLE9BQTBEO0lBRTFELE9BQU8sQ0FBQyxDQUFFLE9BQWtDLENBQUMsY0FBYyxDQUFDO0FBQ2hFLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxVQUE2QixFQUFFLFNBQWlCO0lBQy9ELE9BQU8sdUJBQVcsRUFBQyxpQkFBSyxFQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxTQUFvQixFQUFFLE1BQVcsRUFBRSxhQUE0Qjs7SUFDdEYsSUFBSSxVQUFlLENBQUM7SUFDcEIsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFO1FBQ3RCLFVBQVUsR0FBRyxXQUFXLENBQ3BCLFNBQVMsRUFDVCxhQUFhLENBQUMsSUFBSSxFQUNsQixNQUFNLEVBQ04sRUFBRSxFQUNELGFBQXFCLENBQUMsUUFBUSxFQUMvQixhQUFhLENBQUMsTUFBTSxFQUNuQixhQUFxQixDQUFDLGtCQUFrQixDQUM1QyxDQUFDO0tBQ0w7U0FBTSxJQUFJLGFBQWEsQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO1FBQy9DLFVBQVUsR0FBRyxVQUFVLENBQ25CLFNBQVMsRUFDVCxNQUFNLEVBQ04sYUFBYSxDQUFDLElBQUksRUFDbEIsRUFBRSxFQUNELGFBQXFCLENBQUMsUUFBUSxFQUMvQixtQkFBYSxDQUFDLEtBQUssbUNBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFDbEQsYUFBcUIsQ0FBQyxrQkFBa0IsQ0FDNUMsQ0FBQztLQUNMO1NBQU0sSUFBSSxhQUFhLENBQUMsVUFBVSxFQUFFO1FBQ2pDLFVBQVUsR0FBRyxlQUFlLENBQ3hCLFNBQVMsRUFDVCxNQUFNLEVBQ04sYUFBYSxDQUFDLElBQUksRUFDbEIsRUFBRSxFQUNELGFBQXFCLENBQUMsUUFBUSxFQUMvQixhQUFhLENBQUMsVUFBVSxFQUN2QixhQUFxQixDQUFDLGtCQUFrQixDQUM1QyxDQUFDO0tBQ0w7U0FBTTtRQUNILE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztLQUN2QztJQUVELFFBQVEsT0FBTyxVQUFVLEVBQUU7UUFDdkIsS0FBSyxRQUFRO1lBQ1QsMkNBQTJDO1lBQzNDLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwQyxNQUFNO1FBQ1YsS0FBSyxTQUFTO1lBQ1YsMkNBQTJDO1lBQzNDLFVBQVUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNyQyxNQUFNO1FBQ1YsS0FBSyxRQUFRO1lBQ1QsVUFBVSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BDLE1BQU07UUFDVjtZQUNJLGFBQWE7WUFDYixNQUFNO0tBQ2I7SUFFRCxVQUFVLENBQUMsa0JBQWtCLEdBQUksYUFBcUIsQ0FBQyxrQkFBa0IsQ0FBQztJQUMxRSxVQUFVLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7SUFFdkMsTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVwRSxVQUFVLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM5RCxVQUFVLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUM7SUFDL0MsVUFBVSxDQUFDLFFBQVEsR0FBSSxhQUFxQixDQUFDLFFBQVEsQ0FBQztJQUV0RCxJQUFJO1FBQ0EsZ0JBQUksRUFBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRTs7WUFDakMsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLGtCQUFrQixDQUFDO1lBRXBELGdIQUFnSDtZQUNoSCwwQ0FBMEM7WUFDMUMsSUFBSSxXQUFXLENBQUM7WUFDaEIsSUFBSSxhQUFhLENBQUMsV0FBVyxJQUFJLGFBQWEsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDbkUsV0FBVyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7YUFDM0M7aUJBQU07Z0JBQ0gsV0FBVyxHQUFHLGVBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsMENBQUUsV0FBVyxDQUFDO2FBQy9FO1lBRUQsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLE9BQU8sQ0FBQyxDQUFDLGdCQUFxQixFQUFFLEVBQUU7Z0JBQzNDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUM7Z0JBQ3hDLGdCQUFnQixDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUNoRCxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztnQkFDN0MsZ0JBQWdCLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxhQUFhLElBQUksZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEYsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxhQUFYLFdBQVcsY0FBWCxXQUFXLEdBQUksRUFBRSxDQUFDLENBQUM7UUFDN0UsQ0FBQyxDQUFDLENBQUM7S0FDTjtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1IsbUhBQW1IO0tBQ3RIO0lBRUQsT0FBTyxVQUF3QixDQUFDO0FBQ3BDLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLGlCQUF5QixFQUFFLFVBQXVCLEVBQUUsVUFBeUI7SUFDbkcsTUFBTSxhQUFhLEdBQUcsR0FBRyxpQkFBaUIsSUFBSSxtQkFBTyxFQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUVyRixJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUU7UUFDdEIsT0FBTyxHQUFHLGFBQWEsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7S0FDckQ7U0FBTTtRQUNILE9BQU8sYUFBYSxDQUFDO0tBQ3hCO0FBQ0wsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxXQUF3QjtJQUM5QyxNQUFNLHVCQUF1QixHQUFtQyxFQUFFLENBQUM7SUFDbkUsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUU7UUFDckUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUE4QixFQUFFLEVBQUU7WUFDeEYsTUFBTSxpQkFBaUIsR0FBRyxtQkFBTyxFQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBVyxDQUFDO1lBQzFGLGNBQXNCLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFDO1lBQ3BELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO2dCQUM3Qyx1QkFBdUIsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHO29CQUN6QyxXQUFXLEVBQUUsY0FBYyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUF5QixFQUFFLEVBQUU7d0JBQ3JFLFVBQXlCLENBQUMsa0JBQWtCLEdBQUcsZ0JBQWdCLENBQzVELGlCQUFpQixFQUNqQixXQUFXLENBQUMsVUFBVSxFQUN0QixVQUFVLENBQ2IsQ0FBQzt3QkFDRCxVQUFrQixDQUFDLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQzt3QkFDaEQsT0FBTyxVQUFVLENBQUM7b0JBQ3RCLENBQUMsQ0FBQztvQkFDRixNQUFNLEVBQUUsaUJBQWlCO2lCQUM1QixDQUFDO2dCQUNELHVCQUF1QixDQUFDLGlCQUFpQixDQUFTLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFDO2FBQ25GO2lCQUFNO2dCQUNILGNBQWMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBeUIsRUFBRSxFQUFFO29CQUM3RCxNQUFNLFNBQVMsR0FBRyx1QkFBdUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQzlFLENBQUMsbUJBQWtDLEVBQUUsRUFBRTt3QkFDbkMsT0FBTyxDQUNILG1CQUFtQixDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsSUFBSTs0QkFDNUMsbUJBQW1CLENBQUMsU0FBUyxLQUFLLFVBQVUsQ0FBQyxTQUFTLENBQ3pELENBQUM7b0JBQ04sQ0FBQyxDQUNKLENBQUM7b0JBQ0QsVUFBa0IsQ0FBQyxRQUFRLEdBQUcsZ0JBQWdCLENBQUM7b0JBQy9DLFVBQXlCLENBQUMsa0JBQWtCLEdBQUcsZ0JBQWdCLENBQzVELGlCQUFpQixFQUNqQixXQUFXLENBQUMsVUFBVSxFQUN0QixVQUFVLENBQ2IsQ0FBQztvQkFDRixJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTt3QkFDbEIsdUJBQXVCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7cUJBQzNGO3lCQUFNO3dCQUNILHVCQUF1QixDQUFDLGlCQUFpQixDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDM0U7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7YUFDTjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLHVCQUF1QixDQUFDO0FBQ25DLENBQUM7QUFFRCxNQUFNLFNBQVM7SUFFWCxJQUFJLHVCQUF1QjtRQUN2QixJQUFJLElBQUksQ0FBQyx3QkFBd0IsS0FBSyxTQUFTLEVBQUU7WUFDN0MsSUFBSSxDQUFDLHdCQUF3QixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN0RTtRQUNELE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDO0lBQ3pDLENBQUM7SUFFRCwyQkFBMkI7UUFDdkIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsRUFDMUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUN2QyxzQkFBc0IsQ0FDekIsQ0FBQztJQUNOLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxrQkFBc0M7UUFDeEQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxrQkFBc0M7UUFDeEQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxrQkFBc0M7UUFDekQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxrQkFBc0M7UUFDMUQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxrQkFBc0M7UUFDN0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxrQkFBc0M7UUFDM0QsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNoRyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2YsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQ2pGO1FBQ0QsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVELGtCQUFrQixDQUFDLGtCQUFzQztRQUNyRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDbEYsQ0FBQztJQVVELE9BQU8sQ0FDSCxRQUFxQixFQUNyQixHQUFrRDtRQUVsRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDekIsT0FBTyxHQUFHLEVBQUU7Z0JBQ1IsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxFQUFFO29CQUNoRSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FDNUMsVUFBa0IsQ0FBQyxrQkFBa0IsRUFDdEMsVUFBVSxFQUNWLEdBQUcsQ0FDTixDQUFDO29CQUNGLElBQUksZ0JBQWdCLEVBQUU7d0JBQ2xCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO3FCQUM1QztvQkFDRCxPQUFPLGlCQUFpQixDQUFDO2dCQUM3QixDQUFDLEVBQUUsRUFBaUIsQ0FBQyxDQUFDO2dCQUN0Qix5QkFBYSxFQUFDLFNBQVMsRUFBRSxNQUFhLENBQUMsQ0FBQztnQkFDeEMseUJBQWEsRUFBQyxTQUFTLEVBQUUsb0JBQTJCLENBQUMsQ0FBQztnQkFDdEQsT0FBTyxTQUFxRCxDQUFDO1lBQ2pFLENBQUMsQ0FBQztTQUNMO2FBQU07WUFDSCxPQUFPLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBRSxDQUFDO1NBQ3RGO0lBQ0wsQ0FBQztJQVFELFlBQVksV0FBd0IsRUFBRSxlQUFrQztRQUxoRSxzQkFBaUIsR0FBaUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQU1oRSxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDcEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7SUFDM0MsQ0FBQztJQUVELG1CQUFtQixDQUNmLGtCQUFzQyxFQUN0QyxVQUFtRyxFQUNuRyxHQUEwRDtRQUUxRCxJQUFJLFNBQVMsR0FBOEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFGLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRTtZQUN6QixNQUFNLFdBQVcsR0FDYixPQUFPLFVBQVUsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7WUFDdEcsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFO2dCQUMzQixTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLENBQUMsQ0FBQzthQUM3RDtTQUNKO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFlO1FBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFZO1FBQ2xCLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxLQUFLLENBQUMsS0FBYTtRQUNmLE9BQU8saUJBQUssRUFBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQXlCOztRQUM3QixPQUFPLHlCQUFPLEVBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLG1DQUFJLEVBQUUsQ0FBQztJQUM3RCxDQUFDO0NBQ0o7QUFJRCxTQUFTLGlCQUFpQixDQUFDLFNBQW9CLEVBQUUsa0JBQXNDO0lBQ25GLE9BQU8sR0FBRyxFQUFFO1FBQ1IsSUFBSSxVQUFVLEdBQUcsU0FBUyxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFdEUsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNiLFNBQVMsQ0FBQyxRQUFRLENBQUMsZUFBZSxrQkFBa0IsYUFBYSxDQUFDLENBQUM7WUFDbkUsVUFBVSxHQUFHLEVBQWdCLENBQUM7U0FDakM7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQsU0FBUyxpQ0FBaUMsQ0FDdEMsU0FBb0IsRUFDcEIsNkJBQThHLEVBQzlHLFVBQXVDO0lBRXZDLE9BQU8sR0FBRyxFQUFFLENBQ1IsTUFBTSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLDBCQUEwQixFQUFFLFdBQVcsRUFBRSxFQUFFO1FBQzFGLE1BQU0sZ0JBQWdCLEdBQUcsNkJBQTZCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFcEUsZ0JBQUksRUFBQywwQkFBMEIsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFO1lBQy9DLElBQUkscUJBQXFCLENBQUM7WUFDMUIsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUFFO2dCQUN4QyxxQkFBcUIsR0FBRyxTQUFTLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQzthQUNoRztpQkFBTTtnQkFDSCxxQkFBcUIsR0FBRyxTQUFTLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQzthQUNoRztZQUNELElBQUksQ0FBQyxxQkFBcUIsRUFBRTtnQkFDeEIsU0FBUyxDQUFDLFFBQVEsQ0FDZCxHQUFHLFVBQVUsQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDLGtCQUFrQixrREFBa0QsV0FBVyxFQUFFLENBQ3ZILENBQUM7Z0JBQ0YscUJBQXFCLEdBQUcsRUFBUyxDQUFDO2FBQ3JDO1lBQ0QsT0FBTyxxQkFBcUIsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sMEJBQTBCLENBQUM7SUFDdEMsQ0FBQyxFQUFFLEVBQXFGLENBQUMsQ0FBQztBQUNsRyxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxTQUFvQixFQUFFLG1CQUF3QjtJQUN0RSxNQUFNLGlCQUFpQixHQUFHLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztJQUUxRCxPQUFPLEdBQUcsRUFBRTs7UUFDUiw4QkFBdUIsQ0FDbkIsU0FBUyxFQUNULG1CQUFtQixFQUNuQix1QkFBaUIsYUFBakIsaUJBQWlCLGNBQWpCLGlCQUFpQixHQUNiLGVBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQywwQ0FBRSxXQUFXLG1DQUN0RixFQUFFLENBQ1Q7S0FBQSxDQUFDO0FBQ1YsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQUMsU0FBb0IsRUFBRSxNQUFXLEVBQUUsY0FBK0I7SUFDL0YsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLEVBQUU7UUFDM0QsTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRSxNQUFNLG9CQUFvQixHQUFHLEdBQUcsT0FBTyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUVuRyxJQUFJLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsRUFBRTtZQUMzQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDcEM7UUFFRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLEVBQUU7WUFDbkUsZ0JBQUksRUFBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsQ0FDekQsU0FBUyxDQUFDLG1CQUFtQixDQUN4QixVQUF5QixDQUFDLGtCQUFrQixFQUM3QyxVQUFVLEVBQ1YsQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUNwRixDQUNKLENBQUM7U0FDTDtRQUNELE9BQU8saUJBQWlCLENBQUM7SUFDN0IsQ0FBQyxFQUFFLEVBQVMsQ0FBQyxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLHNCQUFzQixDQUFDLFNBQW9CLEVBQUUsa0JBQXNDO0lBQ3hGLE1BQU0sd0JBQXdCLEdBQUcsa0JBQXFDLENBQUM7SUFFdkUsZ0JBQUksRUFBQyx3QkFBd0IsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztJQUVqRyxnQkFBSSxFQUFDLHdCQUF3QixFQUFFLFlBQVksRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUVsSCxnQkFBSSxFQUFDLHdCQUF3QixFQUFFLFlBQVksRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUVsSCxnQkFBSSxFQUNBLHdCQUF3QixFQUN4QixlQUFlLEVBQ2YsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxDQUM1RSxDQUFDO0lBRUYsT0FBTyx3QkFBd0IsQ0FBQztBQUNwQyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxTQUFvQixFQUFFLFlBQTBCO0lBQ3RFLE1BQU0sa0JBQWtCLEdBQUcsWUFBeUIsQ0FBQztJQUVyRCxrQkFBa0IsQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFbkYsZ0JBQUksRUFBQyxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ2xHLGdCQUFJLEVBQUMsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxZQUF5QixDQUFDLENBQUMsQ0FBQztJQUVsRyxNQUFNLDhCQUE4QixHQUFHLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQztJQUM5RSxnQkFBSSxFQUNBLGtCQUFrQixFQUNsQiwyQkFBMkIsRUFDM0IsaUNBQWlDLENBQzdCLFNBQVMsRUFDVCw4QkFBd0UsRUFDeEUsWUFBWSxDQUNmLENBQ0osQ0FBQztJQUVGLE9BQU8sa0JBQWtCLENBQUM7QUFDOUIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsU0FBb0IsRUFBRSxZQUEwQjtJQUN0RSxNQUFNLGtCQUFrQixHQUFHLFlBQXlCLENBQUM7SUFFckQsa0JBQWtCLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRW5GLGdCQUFJLEVBQUMsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUNsRyxnQkFBSSxFQUFDLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsWUFBeUIsQ0FBQyxDQUFDLENBQUM7SUFFbEcsTUFBTSw4QkFBOEIsR0FBRyxZQUFZLENBQUMseUJBQXlCLENBQUM7SUFDOUUsZ0JBQUksRUFDQSxrQkFBa0IsRUFDbEIsMkJBQTJCLEVBQzNCLGlDQUFpQyxDQUM3QixTQUFTLEVBQ1QsOEJBQXdFLEVBQ3hFLFlBQVksQ0FDZixDQUNKLENBQUM7SUFFRixPQUFPLGtCQUFrQixDQUFDO0FBQzlCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLFNBQW9CLEVBQUUsYUFBNEI7SUFDekUsTUFBTSxtQkFBbUIsR0FBRyxhQUEyQixDQUFDO0lBRXhELGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7UUFDeEMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQyxDQUFDLENBQUM7SUFFSCxnQkFBSSxFQUFDLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUV2RixnQkFBSSxFQUFDLG1CQUFtQixFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUMxRixnQkFBSSxFQUFDLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDbEgsZ0JBQUksRUFDQSxtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLFNBQVMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLG9CQUE2QixFQUFFLHlCQUF5QixDQUFDLENBQzVGLENBQUM7SUFFRixnQkFBSSxFQUFDLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FDdEMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPO1NBQ3RCLE1BQU0sQ0FDSCxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQ1YsU0FBUyxDQUFDLE9BQU87UUFDakIsQ0FBQyxTQUFTLENBQUMsVUFBVSxLQUFLLGFBQWEsQ0FBQyxrQkFBa0I7WUFDdEQsU0FBUyxDQUFDLFVBQVUsS0FBSyxjQUFjLGFBQWEsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQ3RGO1NBQ0EsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFO1FBQzNCLE1BQU0sSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xFLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFFLENBQUM7UUFDNUUsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQyxFQUFFLEVBQTJCLENBQUMsQ0FDdEMsQ0FBQztJQUVGLG1CQUFtQixDQUFDLFdBQVcsR0FBRyxDQUFDLFlBQW9CLEVBQUUscUJBQStCLEVBQUUsRUFBRTtRQUN4RixNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN2RSxJQUFJLHFCQUFxQixFQUFFO1lBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ3hHO2FBQU07WUFDSCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUM7U0FDMUI7SUFDTCxDQUFDLENBQUM7SUFFRixPQUFPLG1CQUFtQixDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxTQUFvQixFQUFFLFdBQXdCO0lBQ25FLE1BQU0saUJBQWlCLEdBQUcsV0FBdUIsQ0FBQztJQUVsRCxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0QsZ0JBQUksRUFBQyxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFFbkYsZ0JBQUksRUFBQyxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFOztRQUN2QyxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQzlCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUU1RixPQUFPLGVBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsbUNBQUksU0FBUyxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pHLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxpQkFBaUIsQ0FBQztBQUM3QixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyx5QkFBeUIsQ0FDOUIsU0FBb0IsRUFDcEIscUJBQXdFOztJQUV4RSxNQUFNLDJCQUEyQixHQUFHLHFCQUEyQyxDQUFDO0lBRWhGLDJCQUEyQixDQUFDLHFCQUFxQixHQUFHLGlDQUEyQixDQUFDLHFCQUFxQixtQ0FBSSxFQUFFLENBQUM7SUFFNUcsSUFBSSxzQkFBc0IsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1FBQy9DLDJCQUEyQixDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0tBQ3hHO1NBQU07UUFDSCxNQUFNLGNBQWMsR0FBRyxlQUFTLENBQUMsU0FBUyxDQUFDLFlBQVk7YUFDbEQsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLEtBQUsscUJBQXFCLENBQUMsWUFBWSxDQUFDLDBDQUMzRixjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTlFLDJCQUEyQixDQUFDLFlBQVksR0FBRyxlQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsWUFBWSxNQUFLLEdBQUcsQ0FBQztRQUNoRiwyQkFBMkIsQ0FBQyxjQUFjLEdBQUcsb0JBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxJQUFJLG1DQUFJLEVBQUUsQ0FBQztLQUMzRTtJQUVELGdCQUFJLEVBQ0EsMkJBQTJCLEVBQzNCLFlBQVksRUFDWixpQkFBaUIsQ0FBQyxTQUFTLEVBQUcscUJBQTRDLENBQUMsY0FBYyxDQUFDLENBQzdGLENBQUM7SUFFRixnQkFBSSxFQUFDLDJCQUEyQixFQUFFLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDO0lBRXZHLE9BQU8sMkJBQTJCLENBQUM7QUFDdkMsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsbUJBQW1CLENBQUMsU0FBb0IsRUFBRSxlQUFnQztJQUMvRSxNQUFNLHFCQUFxQixHQUFHLGVBQStCLENBQUM7SUFFOUQscUJBQXFCLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWpGLGdCQUFJLEVBQUMscUJBQXFCLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBRTNGLGdCQUFJLEVBQUMscUJBQXFCLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUV0RyxPQUFPLHFCQUFxQixDQUFDO0FBQ2pDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxTQUFvQixFQUFFLFNBQW9CO0lBQzdELE1BQU0sZUFBZSxHQUFHLFNBQW1CLENBQUM7SUFFNUMsZUFBZSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyRSxJQUFJLGVBQWUsQ0FBQyxVQUFVLEVBQUU7UUFDNUIsZ0JBQUksRUFBQyxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0tBQ2pHO0lBRUQsZUFBZSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyRSxJQUFJLGVBQWUsQ0FBQyxVQUFVLEVBQUU7UUFDNUIsZ0JBQUksRUFBQyxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0tBQ2pHO0lBRUQsZ0JBQUksRUFBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7SUFFckcsZ0JBQUksRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRTs7UUFDdEMsOEZBQThGO1FBQzlGLHlGQUF5RjtRQUN6Rix5RkFBeUY7UUFDekYsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7UUFFMUcsSUFBSSxjQUFjLEdBQW9CLEVBQUUsQ0FBQztRQUN6QyxJQUFJLGlCQUFpQixFQUFFO1lBQ25CLElBQUksdUJBQWlCLENBQUMsTUFBTSwwQ0FBRSxRQUFRLEVBQUU7Z0JBQ3BDLGNBQWMsR0FBRyxxQkFBUyxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQywwQ0FBRSxXQUFXLG1DQUFJLEVBQUUsQ0FBQzthQUN2RztpQkFBTTtnQkFDSCxjQUFjO29CQUNWLHFCQUFTLENBQUMsdUJBQXVCLENBQUMsR0FBRyx1QkFBaUIsQ0FBQyxNQUFNLDBDQUFFLE1BQU0sSUFBSSxDQUFDLDBDQUFFLFdBQVcsbUNBQUksRUFBRSxDQUFDO2FBQ3JHO1lBRUQsSUFBSSx3QkFBaUIsQ0FBQyxNQUFNLDBDQUFFLE1BQU0sS0FBSSx3QkFBaUIsQ0FBQyxNQUFNLDBDQUFFLE1BQU0sTUFBSyxTQUFTLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ3ZHLE1BQU0sZUFBZSxHQUNqQixxQkFBUyxDQUFDLHVCQUF1QixDQUFDLHVCQUFpQixDQUFDLE1BQU0sMENBQUUsTUFBTSxDQUFDLDBDQUFFLFdBQVcsbUNBQUksRUFBRSxDQUFDO2dCQUMzRixjQUFjLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUMzRDtTQUNKO1FBRUQsT0FBTyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3pFLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxlQUFlLENBQUM7QUFDM0IsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsc0JBQXNCLENBQzNCLFNBQW9CLEVBQ3BCLGtCQUFtRDtJQUVuRCxNQUFNLHdCQUF3QixHQUFHLGtCQUFxQyxDQUFDO0lBRXZFLGdCQUFJLEVBQ0Esd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZixHQUFHLEVBQUU7O1FBQ0QsNEJBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsbUNBQ3pELFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsbUNBQzFELFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7S0FBQSxDQUNwRSxDQUFDO0lBRUYsZ0JBQUksRUFBQyx3QkFBd0IsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztJQUVqRyxPQUFPLHdCQUF3QixDQUFDO0FBQ3BDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLFNBQW9CLEVBQUUsY0FBOEI7SUFDNUUsTUFBTSxvQkFBb0IsR0FBRyxjQUE2QixDQUFDO0lBRTNELGdCQUFJLEVBQUMsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQ3hHLGdCQUFJLEVBQ0Esb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QixTQUFTLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxvQkFBNkIsRUFBRSx5QkFBeUIsQ0FBQyxDQUM3RixDQUFDO0lBQ0YsZ0JBQUksRUFBQyxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFFekYsT0FBTyxvQkFBb0IsQ0FBQztBQUNoQyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxxQkFBcUIsQ0FBQyxTQUFvQixFQUFFLGlCQUFvQztJQUNyRixNQUFNLHVCQUF1QixHQUFHLGlCQUFtQyxDQUFDO0lBRXBFLGdCQUFJLEVBQUMsdUJBQXVCLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7SUFFL0YsT0FBTyx1QkFBdUIsQ0FBQztBQUNuQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixPQUFPLENBQUMsV0FBd0I7SUFDNUMseUVBQXlFO0lBQ3pFLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3JDLFdBQVcsQ0FBQyxVQUFVLEdBQUcseUJBQWlCLENBQUM7S0FDOUM7SUFFRCxtQkFBbUI7SUFDbkIsTUFBTSxlQUFlLEdBQXNCO1FBQ3ZDLE9BQU8sRUFBRSxXQUFXLENBQUMsT0FBTztRQUM1QixTQUFTLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTO1FBQ3ZDLFdBQVcsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLFdBQVc7UUFDM0MsVUFBVSxFQUFFLHlCQUFpQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1FBQzVELFdBQVcsRUFBRSxFQUFFO0tBQ1gsQ0FBQztJQUVULFlBQVk7SUFDWixNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFFOUQsZ0JBQUksRUFDQSxlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsc0JBQXNCLENBQUMsQ0FDakYsQ0FBQztJQUNGLGdCQUFJLEVBQUMsZUFBZSxFQUFFLFlBQVksRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUN6RyxnQkFBSSxFQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDekcsZ0JBQUksRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0lBQzVHLGdCQUFJLEVBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDaEcsZ0JBQUksRUFBQyxlQUFlLEVBQUUsY0FBYyxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO0lBQy9HLGdCQUFJLEVBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztJQUNsSCxnQkFBSSxFQUNBLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsQ0FBQyxDQUNoRixDQUFDO0lBRUYsZUFBZSxDQUFDLFdBQVcsR0FBRyxTQUFTLFdBQVcsQ0FBSSxJQUFZO1FBQzlELE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFJLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEUsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7WUFDekIsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzFFO1FBQ0QsT0FBTyxnQkFBZ0IsQ0FBQztJQUM1QixDQUFDLENBQUM7SUFFRixPQUFPLGVBQWUsQ0FBQztBQUMzQixDQUFDO0FBNUNELDBCQTRDQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDamtERCxnREFBNEI7QUFDNUIsZ0RBQTRCO0FBQzVCLGdEQUF3Qjs7Ozs7Ozs7Ozs7QUNBWCx5QkFBaUIsR0FBc0I7SUFDaEQsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSwyQkFBMkIsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO0lBQzFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsMEJBQTBCLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtJQUN4RSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLHlCQUF5QixFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7SUFDdEUsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO0lBQzFELEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtJQUNsRSxFQUFFLFNBQVMsRUFBRSxnQ0FBZ0MsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7SUFDekUsRUFBRSxTQUFTLEVBQUUsNEJBQTRCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO0lBQ2pFLEVBQUUsU0FBUyxFQUFFLGlDQUFpQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtJQUMzRSxFQUFFLFNBQVMsRUFBRSxtQ0FBbUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7SUFDL0UsRUFBRSxTQUFTLEVBQUUsa0NBQWtDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO0lBQzdFLEVBQUUsU0FBUyxFQUFFLHNDQUFzQyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtJQUNyRixFQUFFLFNBQVMsRUFBRSx1Q0FBdUMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7SUFDdkYsRUFBRSxTQUFTLEVBQUUsK0JBQStCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO0NBQzFFLENBQUM7QUFPRixTQUFTLE9BQU8sQ0FBQyxNQUFjLEVBQUUsS0FBYTtJQUMxQyxPQUFPLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEcsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLE1BQWMsRUFBRSxLQUFhO0lBQzlDLE9BQU8sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLE1BQWMsRUFBRSxTQUFpQjtJQUMxRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFGRCxvQ0FFQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxNQUFjLEVBQUUsU0FBaUI7SUFDekQsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRkQsa0NBRUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxNQUFjLEVBQUUsU0FBaUI7SUFDbEUsT0FBTyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRkQsb0RBRUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxNQUFjLEVBQUUsU0FBaUI7SUFDakUsT0FBTyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRkQsa0RBRUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixLQUFLLENBQUMsVUFBNkIsRUFBRSxjQUFzQjtJQUN2RSxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFFO1FBQ2pDLFVBQVUsQ0FBQyxtQkFBbUIsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBOEIsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUN2RixHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUN6QixPQUFPLEdBQUcsQ0FBQztRQUNmLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUNWO0lBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRTtRQUNqQixPQUFPLGNBQWMsQ0FBQztLQUN6QjtJQUNELE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEdBQUcsV0FBVyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM1RCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUQsSUFBSSxTQUFTLEVBQUU7UUFDWCxPQUFPLEdBQUcsU0FBUyxDQUFDLEtBQUssSUFBSSxLQUFLLEVBQUUsQ0FBQztLQUN4QztTQUFNLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNyQyx3RUFBd0U7UUFDeEUsTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsR0FBRyxZQUFZLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sR0FBRyxRQUFRLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO0tBQ3hEO1NBQU07UUFDSCxPQUFPLGNBQWMsQ0FBQztLQUN6QjtBQUNMLENBQUM7QUFyQkQsc0JBcUJDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsT0FBTyxDQUFDLFVBQTZCLEVBQUUsWUFBZ0M7SUFDbkYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUU7UUFDMUIsVUFBVSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBOEIsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNoRixHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUNyQixPQUFPLEdBQUcsQ0FBQztRQUNmLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUNWO0lBQ0QsSUFBSSxDQUFDLFlBQVksRUFBRTtRQUNmLE9BQU8sWUFBWSxDQUFDO0tBQ3ZCO0lBQ0QsTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxZQUFZLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEQsSUFBSSxTQUFTLEVBQUU7UUFDWCxPQUFPLEdBQUcsU0FBUyxDQUFDLFNBQVMsSUFBSSxLQUFLLEVBQUUsQ0FBQztLQUM1QztTQUFNLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNuQyx3RUFBd0U7UUFDeEUsTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsR0FBRyxZQUFZLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzlELE9BQU8sR0FBRyxRQUFRLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO0tBQzFEO1NBQU07UUFDSCxPQUFPLFlBQVksQ0FBQztLQUN2QjtBQUNMLENBQUM7QUFyQkQsMEJBcUJDO0FBQ1ksa0JBQVUsR0FBNEI7SUFDL0Msa0JBQWtCLEVBQUUsS0FBSztJQUN6QixtQkFBbUIsRUFBRSxLQUFLO0lBQzFCLG9DQUFvQyxFQUFFLEtBQUs7SUFDM0MsaUJBQWlCLEVBQUUsSUFBSTtJQUN2QixtQ0FBbUMsRUFBRSxLQUFLO0lBQzFDLDZCQUE2QixFQUFFLElBQUk7SUFDbkMsNkJBQTZCLEVBQUUsS0FBSztJQUNwQyxnQ0FBZ0MsRUFBRSxJQUFJO0lBQ3RDLHlCQUF5QixFQUFFLElBQUk7SUFDL0Isd0JBQXdCLEVBQUUsS0FBSztJQUMvQix1QkFBdUIsRUFBRSxLQUFLO0lBQzlCLDZCQUE2QixFQUFFLEtBQUs7SUFDcEMseUJBQXlCLEVBQUUsS0FBSztJQUNoQyxtQkFBbUIsRUFBRSxJQUFJO0lBQ3pCLHdCQUF3QixFQUFFLEtBQUs7SUFDL0Isc0NBQXNDLEVBQUUsSUFBSTtJQUM1Qyx5QkFBeUIsRUFBRSxJQUFJO0lBQy9CLDBCQUEwQixFQUFFLEtBQUs7SUFDakMsc0JBQXNCLEVBQUUsS0FBSztJQUM3QixvQkFBb0IsRUFBRSxLQUFLO0lBQzNCLDZCQUE2QixFQUFFLEtBQUs7SUFDcEMsY0FBYyxFQUFFLEtBQUs7SUFDckIsY0FBYyxFQUFFLEtBQUs7SUFDckIsK0JBQStCLEVBQUUsS0FBSztJQUN0QyxvQ0FBb0MsRUFBRSxLQUFLO0lBQzNDLDJCQUEyQixFQUFFLEtBQUs7SUFDbEMseUJBQXlCLEVBQUUsS0FBSztJQUNoQywyQkFBMkIsRUFBRSxLQUFLO0lBQ2xDLDZCQUE2QixFQUFFLEtBQUs7SUFDcEMsd0JBQXdCLEVBQUUsS0FBSztJQUMvQixtQkFBbUIsRUFBRSxLQUFLO0lBQzFCLGtDQUFrQyxFQUFFLEtBQUs7SUFDekMsMEJBQTBCLEVBQUUsS0FBSztDQUNwQyxDQUFDO0FBQ0YsSUFBWSxXQTBQWDtBQTFQRCxXQUFZLFdBQVc7SUFDbkIsdUdBQTBGO0lBQzFGLHFHQUF3RjtJQUN4Riw2RUFBZ0U7SUFDaEUsaUVBQW9EO0lBQ3BELDJFQUE4RDtJQUM5RCwyRUFBOEQ7SUFDOUQsd0ZBQTJFO0lBQzNFLDhGQUFpRjtJQUNqRiw4R0FBaUc7SUFDakcsOEVBQWlFO0lBQ2pFLDhFQUFpRTtJQUNqRSw2RUFBZ0U7SUFDaEUsMEVBQTZEO0lBQzdELDZFQUFnRTtJQUNoRSwyRUFBOEQ7SUFDOUQsb0VBQXVEO0lBQ3ZELG1FQUFzRDtJQUN0RCwrRUFBa0U7SUFDbEUsZ0VBQW1EO0lBQ25ELHNFQUF5RDtJQUN6RCxnR0FBbUY7SUFDbkYsMkVBQThEO0lBQzlELCtFQUFrRTtJQUNsRSxxRUFBd0Q7SUFDeEQsK0VBQWtFO0lBQ2xFLHFGQUF3RTtJQUN4RSxrRUFBcUQ7SUFDckQsMkVBQThEO0lBQzlELGlGQUFvRTtJQUNwRSw4RkFBaUY7SUFDakYsbUVBQXNEO0lBQ3RELG9GQUF1RTtJQUN2RSwwRkFBNkU7SUFDN0UsNEdBQStGO0lBQy9GLGdHQUFtRjtJQUNuRixnR0FBbUY7SUFDbkYsd0dBQTJGO0lBQzNGLHFGQUF3RTtJQUN4RSxxR0FBd0Y7SUFDeEYsd0dBQTJGO0lBQzNGLDhHQUFpRztJQUNqRyx3SEFBMkc7SUFDM0csaUZBQW9FO0lBQ3BFLCtFQUFrRTtJQUNsRSxnRkFBbUU7SUFDbkUsbUZBQXNFO0lBQ3RFLHNHQUF5RjtJQUN6RixpRkFBb0U7SUFDcEUsb0dBQXVGO0lBQ3ZGLGdIQUFtRztJQUNuRyw0R0FBK0Y7SUFDL0YsZ0hBQW1HO0lBQ25HLGdIQUFtRztJQUNuRyx3RkFBMkU7SUFDM0Usd0ZBQTJFO0lBQzNFLGdIQUFtRztJQUNuRyw4R0FBaUc7SUFDakcsZ0hBQW1HO0lBQ25HLDhHQUFpRztJQUNqRyxnSEFBbUc7SUFDbkcsd0lBQTJIO0lBQzNILHNIQUF5RztJQUN6RyxtR0FBc0Y7SUFDdEYsNEhBQStHO0lBQy9HLDRHQUErRjtJQUMvRixvR0FBdUY7SUFDdkYseUdBQTRGO0lBQzVGLCtGQUFrRjtJQUNsRixzR0FBeUY7SUFDekYsOEdBQWlHO0lBQ2pHLDJFQUE4RDtJQUM5RCw4RUFBaUU7SUFDakUsc0ZBQXlFO0lBQ3pFLDZFQUFnRTtJQUNoRSw4R0FBaUc7SUFDakcsb0hBQXVHO0lBQ3ZHLG9FQUF1RDtJQUN2RCxvRUFBdUQ7SUFDdkQsMEVBQTZEO0lBQzdELDZGQUFnRjtJQUNoRixpRUFBb0Q7SUFDcEQsNEZBQStFO0lBQy9FLHNGQUF5RTtJQUN6RSxvSEFBdUc7SUFDdkcsK0dBQWtHO0lBQ2xHLDJGQUE4RTtJQUM5RSw4RkFBaUY7SUFDakYsNkRBQWdEO0lBQ2hELDZEQUFnRDtJQUNoRCx1REFBMEM7SUFDMUMsMEdBQTZGO0lBQzdGLG9GQUF1RTtJQUN2RSxrRkFBcUU7SUFDckUsOEZBQWlGO0lBQ2pGLG9GQUF1RTtJQUN2RSx5RkFBNEU7SUFDNUUsa0lBQXFIO0lBQ3JILGdJQUFtSDtJQUNuSCw4SEFBaUg7SUFDakgsMEVBQTZEO0lBQzdELGdGQUFtRTtJQUNuRSwwRUFBNkQ7SUFDN0QsNEZBQStFO0lBQy9FLDBHQUE2RjtJQUM3Rix1RkFBMEU7SUFDMUUsbUZBQXNFO0lBQ3RFLGtGQUFxRTtJQUNyRSw4RUFBaUU7SUFDakUscUZBQXdFO0lBQ3hFLHlGQUE0RTtJQUM1RSwrRUFBa0U7SUFDbEUscUVBQXdEO0lBQ3hELHFFQUF3RDtJQUN4RCw4RkFBaUY7SUFDakYsOEZBQWlGO0lBQ2pGLDhFQUFpRTtJQUNqRSw0RUFBK0Q7SUFDL0QsZ0lBQW1IO0lBQ25ILDRGQUErRTtJQUMvRSw2SUFBZ0k7SUFDaEksOEdBQWlHO0lBQ2pHLDRHQUErRjtJQUMvRiw4RUFBaUU7SUFDakUsb0hBQXVHO0lBQ3ZHLDBFQUE2RDtJQUM3RCwySEFBOEc7SUFDOUcseUlBQTRIO0lBQzVILDhFQUFpRTtJQUNqRSw2RUFBZ0U7SUFDaEUsOEZBQWlGO0lBQ2pGLHNHQUF5RjtJQUN6RixxRkFBd0U7SUFDeEUsd0hBQTJHO0lBQzNHLG1GQUFzRTtJQUN0RSx1RkFBMEU7SUFDMUUsd0dBQTJGO0lBQzNGLGdIQUFtRztJQUNuRyxnR0FBbUY7SUFDbkYsc0hBQXlHO0lBQ3pHLHNGQUF5RTtJQUN6RSwwRkFBNkU7SUFDN0UseUZBQTRFO0lBQzVFLHVGQUEwRTtJQUMxRSxzRkFBeUU7SUFDekUsNEZBQStFO0lBQy9FLDJGQUE4RTtJQUM5RSw4RkFBaUY7SUFDakYsNkZBQWdGO0lBQ2hGLDJGQUE4RTtJQUM5RSwwRkFBNkU7SUFDN0Usc0ZBQXlFO0lBQ3pFLG9GQUF1RTtJQUN2RSxzRkFBeUU7SUFDekUsMEZBQTZFO0lBQzdFLHVGQUEwRTtJQUMxRSwyRkFBOEU7SUFDOUUsb0ZBQXVFO0lBQ3ZFLHdGQUEyRTtJQUMzRSx5RkFBNEU7SUFDNUUsMkZBQThFO0lBQzlFLDZGQUFnRjtJQUNoRix3R0FBMkY7SUFDM0Ysd0dBQTJGO0lBQzNGLHVHQUEwRjtJQUMxRixtRkFBc0U7SUFDdEUsOEVBQWlFO0lBQ2pFLDRHQUErRjtJQUMvRixvSEFBdUc7SUFDdkcsc0ZBQXlFO0lBQ3pFLDBGQUE2RTtJQUM3RSx3R0FBMkY7SUFDM0YsMEhBQTZHO0lBQzdHLDhFQUFpRTtJQUNqRSxpR0FBb0Y7SUFDcEYsOEVBQWlFO0lBQ2pFLGlHQUFvRjtJQUNwRixvSEFBdUc7SUFDdkcsNkZBQWdGO0lBQ2hGLGlIQUFvRztJQUNwRyxrSEFBcUc7SUFDckcsaUZBQW9FO0lBQ3BFLGlGQUFvRTtJQUNwRSw4RkFBaUY7SUFDakYsa0hBQXFHO0lBQ3JHLGtIQUFxRztJQUNyRyw2RkFBZ0Y7SUFDaEYsNEZBQStFO0lBQy9FLDhHQUFpRztJQUNqRyw0R0FBK0Y7SUFDL0Ysa0hBQXFHO0lBQ3JHLGdJQUFtSDtJQUNuSCxnSUFBbUg7SUFDbkgsOEhBQWlIO0lBQ2pILG1HQUFzRjtJQUN0RixvR0FBdUY7SUFDdkYsb0lBQXVIO0lBQ3ZILGtHQUFxRjtJQUNyRix5R0FBNEY7SUFDNUYsd0ZBQTJFO0lBQzNFLG1HQUFzRjtJQUN0RixxR0FBd0Y7SUFDeEYsa0dBQXFGO0lBQ3JGLDRHQUErRjtJQUMvRixxR0FBd0Y7SUFDeEYsb0dBQXVGO0lBQ3ZGLHlFQUE0RDtJQUM1RCx3R0FBMkY7SUFDM0YsZ0dBQW1GO0lBQ25GLG9GQUF1RTtJQUN2RSxrR0FBcUY7SUFDckYsOEdBQWlHO0lBQ2pHLCtHQUFrRztJQUNsRyw4RUFBaUU7SUFDakUscUZBQXdFO0lBQ3hFLDJGQUE4RTtJQUM5RSw4RkFBaUY7SUFDakYsZ0dBQW1GO0lBQ25GLG9HQUF1RjtJQUN2RixzSUFBeUg7SUFDekgsb0hBQXVHO0lBQ3ZHLDhHQUFpRztJQUNqRyxvRkFBdUU7SUFDdkUsNkVBQWdFO0lBQ2hFLGlGQUFvRTtJQUNwRSx1RUFBMEQ7SUFDMUQsMkVBQThEO0lBQzlELDhFQUFpRTtJQUNqRSwyRUFBOEQ7SUFDOUQsaUZBQW9FO0lBQ3BFLDRHQUErRjtJQUMvRixrR0FBcUY7SUFDckYsMEVBQTZEO0lBQzdELGdGQUFtRTtJQUNuRSxnRkFBbUU7SUFDbkUsZ0ZBQW1FO0lBQ25FLGdGQUFtRTtJQUNuRSxnRkFBbUU7SUFDbkUsb0ZBQXVFO0lBQ3ZFLDJHQUE4RjtJQUM5RixvR0FBdUY7SUFDdkYsMEhBQTZHO0lBQzdHLDhFQUFpRTtJQUNqRSxzRUFBeUQ7SUFDekQscUZBQXdFO0lBQ3hFLG9IQUF1RztJQUN2RyxrSEFBcUc7SUFDckcsZ0dBQW1GO0lBQ25GLDJGQUE4RTtJQUM5RSwwR0FBNkY7QUFDakcsQ0FBQyxFQTFQVyxXQUFXLEdBQVgsbUJBQVcsS0FBWCxtQkFBVyxRQTBQdEI7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLHVCQUF1QixDQUNuQyxxQkFBb0Q7SUFFcEQsT0FBTyxDQUNILENBQUMsQ0FBQyxxQkFBcUIsSUFBSSxxQkFBcUIsQ0FBQyxLQUFLLEtBQUssYUFBYSxJQUFJLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQ2pILENBQUM7QUFDTixDQUFDO0FBTkQsMERBTUM7QUFFRCxTQUFnQixPQUFPLENBQUMsS0FBYTtJQUNqQyxPQUFPO1FBQ0gsU0FBUztZQUNMLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxPQUFPO1lBQ0gsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUNELFFBQVE7WUFDSixPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QixDQUFDO0tBQ0osQ0FBQztBQUNOLENBQUM7QUFaRCwwQkFZQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsSUFBSSxDQUErQixNQUFZLEVBQUUsUUFBYSxFQUFFLElBQXFCO0lBQ2pHLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsQyxJQUFJLE1BQU0sR0FBK0IsT0FBTyxDQUFDO0lBRWpELE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRTtRQUNwQyxVQUFVLEVBQUUsSUFBSTtRQUVoQixHQUFHO1lBQ0MsSUFBSSxNQUFNLEtBQUssT0FBTyxFQUFFO2dCQUNwQixNQUFNLEdBQUcsSUFBSSxFQUFFLENBQUM7YUFDbkI7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDO1FBRUQsR0FBRyxDQUFDLEtBQWdCO1lBQ2hCLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsQ0FBQztLQUNKLENBQUMsQ0FBQztBQUNQLENBQUM7QUFsQkQsb0JBa0JDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUksS0FBZSxFQUFFLFFBQWlCO0lBQ25FLE1BQU0sS0FBSyxHQUFtQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRXhELE9BQU8sU0FBUyxJQUFJLENBQUMsS0FBaUI7UUFDbEMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqQyxJQUFJLFFBQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRyxRQUFRLENBQUMsTUFBSyxLQUFLLEVBQUU7WUFDL0IsT0FBTyxPQUFPLENBQUM7U0FDbEI7UUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsUUFBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRTtnQkFDcEMsT0FBTyxLQUFLLENBQUM7YUFDaEI7WUFFRCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbEMsT0FBTyxhQUFhLEtBQUssS0FBSyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQXBCRCw4Q0FvQkM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixhQUFhLENBQXdDLEtBQWUsRUFBRSxRQUFXO0lBQzdGLE1BQU0sU0FBUyxHQUFzQixNQUFNLFFBQVEsRUFBRSxDQUFDO0lBRXRELElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDM0c7U0FBTTtRQUNILE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxTQUFTLGtCQUFrQixDQUFDLENBQUM7S0FDN0Q7SUFDRCxPQUFPLEtBQTZCLENBQUM7QUFDekMsQ0FBQztBQVRELHNDQVNDOzs7Ozs7Ozs7OztBQ25nQkQseUNBQWtDO0FBRWxDOzs7Ozs7R0FNRztBQUNILFNBQVMscUJBQXFCLENBQUMsVUFBdUIsRUFBRSxLQUFVOztJQUM5RCxJQUFJLE1BQThCLENBQUM7SUFDbkMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3RCLE1BQU0sR0FBRztZQUNMLElBQUksRUFBRSxZQUFZO1lBQ2xCLFVBQVUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQVU7U0FDNUYsQ0FBQztLQUNMO1NBQU0sSUFBSSxXQUFLLENBQUMsU0FBUyxxREFBSSxFQUFFO1FBQzVCLE1BQU0sR0FBRztZQUNMLElBQUksRUFBRSxTQUFTO1lBQ2YsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUU7U0FDM0IsQ0FBQztLQUNMO1NBQU0sSUFBSSxXQUFLLENBQUMsUUFBUSxxREFBSSxFQUFFO1FBQzNCLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEQsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3BGLE1BQU0sR0FBRztnQkFDTCxJQUFJLEVBQUUsWUFBWTtnQkFDbEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUU7YUFDOUIsQ0FBQztTQUNMO2FBQU07WUFDSCxNQUFNLEdBQUc7Z0JBQ0wsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUU7YUFDMUIsQ0FBQztTQUNMO0tBQ0o7U0FBTSxJQUFJLFdBQUssQ0FBQyxLQUFLLHFEQUFJLEVBQUU7UUFDeEIsTUFBTSxHQUFHO1lBQ0wsSUFBSSxFQUFFLEtBQUs7WUFDWCxHQUFHLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRTtTQUN2QixDQUFDO0tBQ0w7U0FBTSxJQUFJLFdBQUssQ0FBQyxPQUFPLHFEQUFJLEVBQUU7UUFDMUIsTUFBTSxHQUFHO1lBQ0wsSUFBSSxFQUFFLE9BQU87WUFDYixLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRTtTQUN6QixDQUFDO0tBQ0w7U0FBTSxJQUFJLFdBQUssQ0FBQyxNQUFNLHFEQUFJLEVBQUU7UUFDekIsTUFBTSxHQUFHO1lBQ0wsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRTtTQUN4QixDQUFDO0tBQ0w7U0FBTSxJQUFJLFdBQUssQ0FBQyxTQUFTLHFEQUFJLEVBQUU7UUFDNUIsTUFBTSxHQUFHO1lBQ0wsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLE1BQU07U0FDbkMsQ0FBQztLQUNMO1NBQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtRQUM5QixNQUFNLEdBQUc7WUFDTCxJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtTQUNuQixDQUFDO0tBQ0w7U0FBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLEVBQUU7UUFDeEMsTUFBTSxHQUFHO1lBQ0wsSUFBSSxFQUFFLGdCQUFnQjtZQUN0QixjQUFjLEVBQUUsS0FBSyxDQUFDLEtBQUs7U0FDOUIsQ0FBQztLQUNMO1NBQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtRQUMvQixNQUFNLEdBQUc7WUFDTCxJQUFJLEVBQUUsT0FBTztZQUNiLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztTQUNyQixDQUFDO0tBQ0w7U0FBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO1FBQzlCLE1BQU0sR0FBRztZQUNMLElBQUksRUFBRSxNQUFNO1NBQ2YsQ0FBQztLQUNMO1NBQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRTtRQUN0QyxNQUFNLEdBQUc7WUFDTCxJQUFJLEVBQUUsY0FBYztZQUNwQixZQUFZLEVBQUUsS0FBSyxDQUFDLEtBQUs7U0FDNUIsQ0FBQztLQUNMO1NBQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLHdCQUF3QixFQUFFO1FBQ2hELE1BQU0sR0FBRztZQUNMLElBQUksRUFBRSx3QkFBd0I7WUFDOUIsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLEtBQUs7U0FDdEMsQ0FBQztLQUNMO1NBQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQzdELE1BQU0sR0FBRztZQUNMLElBQUksRUFBRSxRQUFRO1lBQ2QsTUFBTSxFQUFFLDZCQUE2QixDQUFDLFVBQVUsRUFBRSxLQUFLLENBQXFCO1NBQy9FLENBQUM7S0FDTDtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLG9CQUFvQixDQUFDLFVBQXVCLEVBQUUsS0FBVTtJQUM3RCxJQUFJLE1BQThCLENBQUM7SUFDbkMsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsV0FBVyxDQUFDLElBQUksQ0FBQztJQUNqRCxRQUFRLGdCQUFnQixFQUFFO1FBQ3RCLEtBQUssUUFBUSxDQUFDO1FBQ2QsS0FBSyxRQUFRO1lBQ1QsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3BGLE1BQU0sR0FBRztvQkFDTCxJQUFJLEVBQUUsWUFBWTtvQkFDbEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUU7aUJBQy9CLENBQUM7YUFDTDtpQkFBTTtnQkFDSCxNQUFNLEdBQUc7b0JBQ0wsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsTUFBTSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUU7aUJBQzNCLENBQUM7YUFDTDtZQUNELE1BQU07UUFDVixLQUFLLFNBQVMsQ0FBQztRQUNmLEtBQUssU0FBUztZQUNWLE1BQU0sR0FBRztnQkFDTCxJQUFJLEVBQUUsTUFBTTtnQkFDWixJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRTthQUN4QixDQUFDO1lBQ0YsTUFBTTtRQUVWLEtBQUssUUFBUSxDQUFDO1FBQ2QsS0FBSyxRQUFRO1lBQ1QsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUN0QyxNQUFNLEdBQUc7b0JBQ0wsSUFBSSxFQUFFLEtBQUs7b0JBQ1gsR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUU7aUJBQ3ZCLENBQUM7YUFDTDtpQkFBTTtnQkFDSCxNQUFNLEdBQUc7b0JBQ0wsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUU7aUJBQzNCLENBQUM7YUFDTDtZQUNELE1BQU07UUFDVixLQUFLLFFBQVEsQ0FBQztRQUNkO1lBQ0ksTUFBTSxHQUFHLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsRCxNQUFNO0tBQ2I7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBRXZIOzs7Ozs7R0FNRztBQUNILFNBQVMsMEJBQTBCLENBQy9CLFVBQXVCLEVBQ3ZCLGtCQUF1QixFQUN2QixpQkFBa0M7SUFFbEMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztTQUMxQixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxjQUFjLENBQUM7U0FDdkMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDYixNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbEQsTUFBTSxnQkFBZ0IsR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM1RixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFO2dCQUN4QixNQUFNLGFBQWEsR0FBRyxtQkFBTyxFQUFDLFVBQVUsRUFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLGFBQWEsRUFBRTtvQkFDZixNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNoRCxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMxQyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUMzQixtRkFBbUY7d0JBQ25GLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2xEO2lCQUNKO2FBQ0o7WUFDRCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsNkJBQTZCLENBQ2xDLFVBQXVCLEVBQ3ZCLGNBQW1CO0lBU25CLElBQUksT0FBTyxjQUFjLEtBQUssUUFBUSxFQUFFO1FBQ3BDLE9BQU8sY0FBYyxDQUFDO0tBQ3pCO1NBQU0sSUFBSSxPQUFPLGNBQWMsS0FBSyxRQUFRLEVBQUU7UUFDM0MsSUFBSSxjQUFjLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3hDLG9CQUFvQjtZQUNwQixNQUFNLE9BQU8sR0FBcUI7Z0JBQzlCLElBQUksRUFBRSxjQUFjLENBQUMsS0FBSztnQkFDMUIsY0FBYyxFQUFFLEVBQVc7YUFDOUIsQ0FBQztZQUNGLDhDQUE4QztZQUM5QyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFO2dCQUNsRCxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0JBQzlDLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDNUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7d0JBQ3hCLElBQUksRUFBRSxhQUFhO3dCQUNuQixLQUFLLEVBQUUsb0JBQW9CLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBZTtxQkFDL0QsQ0FBQyxDQUFDO2lCQUNOO3FCQUFNLElBQUksYUFBYSxLQUFLLGFBQWEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ2pHLE9BQU8sQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO29CQUN6QiwwQkFBMEIsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLGFBQWEsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDOUY7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sT0FBTyxDQUFDO1NBQ2xCO2FBQU0sSUFBSSxjQUFjLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRTtZQUMvQyxPQUFPO2dCQUNILElBQUksRUFBRSxjQUFjO2dCQUNwQixZQUFZLEVBQUUsY0FBYyxDQUFDLEtBQUs7YUFDckMsQ0FBQztTQUNMO2FBQU0sSUFBSSxjQUFjLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFO1lBQ2pELE9BQU87Z0JBQ0gsSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsY0FBYyxFQUFFLGNBQWMsQ0FBQyxLQUFLO2FBQ3ZDLENBQUM7U0FDTDthQUFNLElBQUksY0FBYyxDQUFDLElBQUksS0FBSyx3QkFBd0IsRUFBRTtZQUN6RCxPQUFPO2dCQUNILElBQUksRUFBRSx3QkFBd0I7Z0JBQzlCLHNCQUFzQixFQUFFLGNBQWMsQ0FBQyxLQUFLO2FBQy9DLENBQUM7U0FDTDtLQUNKO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLHVCQUF1QixDQUFDLFVBQXVCLEVBQUUsVUFBK0I7SUFDNUYsTUFBTSxjQUFjLEdBQWtCO1FBQ2xDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtRQUNyQixTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7S0FDbEMsQ0FBQztJQUNGLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUMzQixhQUFhO1FBQ2IsSUFBSSxVQUFVLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUUsVUFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JHLDBFQUEwRTtZQUMxRSxjQUFjLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUNoQywwQkFBMEIsQ0FBQyxVQUFVLEVBQUcsVUFBa0IsQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3ZHO1FBQ0QsT0FBTztZQUNILEdBQUcsY0FBYztZQUNqQixVQUFVLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsNkJBQTZCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFVO1NBQ2pHLENBQUM7S0FDTDtTQUFNLElBQUksVUFBVSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUMzQyxPQUFPLEVBQUUsR0FBRyxjQUFjLEVBQUUsTUFBTSxFQUFFLDZCQUE2QixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQVEsRUFBRSxDQUFDO0tBQ3RHO1NBQU07UUFDSCxPQUFPLEVBQUUsR0FBRyxjQUFjLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO0tBQ3JGO0FBQ0wsQ0FBQztBQXJCRCwwREFxQkM7Ozs7Ozs7VUMzUkQ7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7OztVQ3RCQTtVQUNBO1VBQ0E7VUFDQSIsImZpbGUiOiJBbm5vdGF0aW9uQ29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgICBBY3Rpb24sXG4gICAgQWN0aW9uSW1wb3J0LFxuICAgIEFjdGlvblBhcmFtZXRlcixcbiAgICBBbm5vdGF0aW9uLFxuICAgIEFubm90YXRpb25MaXN0LFxuICAgIEFubm90YXRpb25SZWNvcmQsXG4gICAgQXJyYXlXaXRoSW5kZXgsXG4gICAgQmFzZU5hdmlnYXRpb25Qcm9wZXJ0eSxcbiAgICBDb21wbGV4VHlwZSxcbiAgICBDb252ZXJ0ZWRNZXRhZGF0YSxcbiAgICBFbnRpdHlDb250YWluZXIsXG4gICAgRW50aXR5U2V0LFxuICAgIEVudGl0eVR5cGUsXG4gICAgRXhwcmVzc2lvbixcbiAgICBGdWxseVF1YWxpZmllZE5hbWUsXG4gICAgTmF2aWdhdGlvblByb3BlcnR5LFxuICAgIFByb3BlcnR5LFxuICAgIFByb3BlcnR5UGF0aCxcbiAgICBSYXdBY3Rpb24sXG4gICAgUmF3QWN0aW9uSW1wb3J0LFxuICAgIFJhd0Fubm90YXRpb24sXG4gICAgUmF3Q29tcGxleFR5cGUsXG4gICAgUmF3RW50aXR5Q29udGFpbmVyLFxuICAgIFJhd0VudGl0eVNldCxcbiAgICBSYXdFbnRpdHlUeXBlLFxuICAgIFJhd01ldGFkYXRhLFxuICAgIFJhd1Byb3BlcnR5LFxuICAgIFJhd1NjaGVtYSxcbiAgICBSYXdTaW5nbGV0b24sXG4gICAgUmF3VHlwZURlZmluaXRpb24sXG4gICAgUmF3VjJOYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgUmF3VjROYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgUmVmZXJlbmNlLFxuICAgIFJlbW92ZUFubm90YXRpb25BbmRUeXBlLFxuICAgIFJlc29sdXRpb25UYXJnZXQsXG4gICAgU2luZ2xldG9uLFxuICAgIFR5cGVEZWZpbml0aW9uXG59IGZyb20gJ0BzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzJztcbmltcG9ydCB0eXBlIHsgUmVmZXJlbmNlc1dpdGhNYXAgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7XG4gICAgYWRkR2V0QnlWYWx1ZSxcbiAgICBhbGlhcyxcbiAgICBEZWNpbWFsLFxuICAgIGRlZmF1bHRSZWZlcmVuY2VzLFxuICAgIEVudW1Jc0ZsYWcsXG4gICAgbGF6eSxcbiAgICBzcGxpdEF0Rmlyc3QsXG4gICAgc3BsaXRBdExhc3QsXG4gICAgc3Vic3RyaW5nQmVmb3JlRmlyc3QsXG4gICAgc3Vic3RyaW5nQmVmb3JlTGFzdCxcbiAgICBUZXJtVG9UeXBlcyxcbiAgICB1bmFsaWFzXG59IGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIFN5bWJvbCB0byBleHRlbmQgYW4gYW5ub3RhdGlvbiB3aXRoIHRoZSByZWZlcmVuY2UgdG8gaXRzIHRhcmdldC5cbiAqL1xuY29uc3QgQU5OT1RBVElPTl9UQVJHRVQgPSBTeW1ib2woJ0Fubm90YXRpb24gVGFyZ2V0Jyk7XG5cbi8qKlxuICogQXBwZW5kIGFuIG9iamVjdCB0byB0aGUgbGlzdCBvZiB2aXNpdGVkIG9iamVjdHMgaWYgaXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBsaXN0LlxuICpcbiAqIEBwYXJhbSBvYmplY3RQYXRoICAgIFRoZSBsaXN0IG9mIHZpc2l0ZWQgb2JqZWN0c1xuICogQHBhcmFtIHZpc2l0ZWRPYmplY3QgVGhlIG9iamVjdFxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgdmlzaXRlZCBvYmplY3RzXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZE9iamVjdFBhdGgob2JqZWN0UGF0aDogYW55W10sIHZpc2l0ZWRPYmplY3Q6IGFueSk6IGFueVtdIHtcbiAgICBpZiAob2JqZWN0UGF0aFtvYmplY3RQYXRoLmxlbmd0aCAtIDFdICE9PSB2aXNpdGVkT2JqZWN0KSB7XG4gICAgICAgIG9iamVjdFBhdGgucHVzaCh2aXNpdGVkT2JqZWN0KTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFBhdGg7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYSAocG9zc2libHkgcmVsYXRpdmUpIHBhdGguXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgICAgICAgIENvbnZlcnRlclxuICogQHBhcmFtIHN0YXJ0RWxlbWVudCAgICAgIFRoZSBzdGFydGluZyBwb2ludCBpbiBjYXNlIG9mIHJlbGF0aXZlIHBhdGggcmVzb2x1dGlvblxuICogQHBhcmFtIHBhdGggICAgICAgICAgICAgIFRoZSBwYXRoIHRvIHJlc29sdmVcbiAqIEBwYXJhbSBhbm5vdGF0aW9uc1Rlcm0gICBPbmx5IGZvciBlcnJvciByZXBvcnRpbmc6IFRoZSBhbm5vdGF0aW9uIHRlcm1cbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSByZXNvbHZlZCB0YXJnZXQgYW5kIHRoZSBlbGVtZW50cyB0aGF0IHdlcmUgdmlzaXRlZCB3aGlsZSBnZXR0aW5nIHRvIHRoZSB0YXJnZXQuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVUYXJnZXQ8VD4oXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgc3RhcnRFbGVtZW50OiBhbnksXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGFubm90YXRpb25zVGVybT86IHN0cmluZ1xuKTogUmVzb2x1dGlvblRhcmdldDxUPiB7XG4gICAgLy8gYWJzb2x1dGUgcGF0aHMgYWx3YXlzIHN0YXJ0IGF0IHRoZSBlbnRpdHkgY29udGFpbmVyXG4gICAgaWYgKHBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygxKTtcbiAgICAgICAgc3RhcnRFbGVtZW50ID0gdW5kZWZpbmVkOyAvLyB3aWxsIHJlc29sdmUgdG8gdGhlIGVudGl0eSBjb250YWluZXIgKHNlZSBiZWxvdylcbiAgICB9XG5cbiAgICBjb25zdCBwYXRoU2VnbWVudHMgPSBwYXRoLnNwbGl0KCcvJykucmVkdWNlKCh0YXJnZXRQYXRoLCBzZWdtZW50KSA9PiB7XG4gICAgICAgIGlmIChzZWdtZW50LmluY2x1ZGVzKCdAJykpIHtcbiAgICAgICAgICAgIC8vIFNlcGFyYXRlIG91dCB0aGUgYW5ub3RhdGlvblxuICAgICAgICAgICAgY29uc3QgW3BhdGhQYXJ0LCBhbm5vdGF0aW9uUGFydF0gPSBzcGxpdEF0Rmlyc3Qoc2VnbWVudCwgJ0AnKTtcbiAgICAgICAgICAgIHRhcmdldFBhdGgucHVzaChwYXRoUGFydCk7XG4gICAgICAgICAgICB0YXJnZXRQYXRoLnB1c2goYEAke2Fubm90YXRpb25QYXJ0fWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0UGF0aC5wdXNoKHNlZ21lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXRQYXRoO1xuICAgIH0sIFtdIGFzIHN0cmluZ1tdKTtcblxuICAgIC8vIGRldGVybWluZSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSByZXNvbHV0aW9uXG4gICAgaWYgKHN0YXJ0RWxlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIG5vIHN0YXJ0aW5nIHBvaW50IGdpdmVuOiBzdGFydCBhdCB0aGUgZW50aXR5IGNvbnRhaW5lclxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXRoU2VnbWVudHNbMF0uc3RhcnRzV2l0aChjb252ZXJ0ZXIucmF3U2NoZW1hLm5hbWVzcGFjZSkgJiZcbiAgICAgICAgICAgIHBhdGhTZWdtZW50c1swXSAhPT0gY29udmVydGVyLmdldENvbnZlcnRlZEVudGl0eUNvbnRhaW5lcigpPy5mdWxseVF1YWxpZmllZE5hbWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBXZSBoYXZlIGEgZnVsbHkgcXVhbGlmaWVkIG5hbWUgaW4gdGhlIHBhdGggdGhhdCBpcyBub3QgdGhlIGVudGl0eSBjb250YWluZXIuXG4gICAgICAgICAgICBzdGFydEVsZW1lbnQgPVxuICAgICAgICAgICAgICAgIGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRFbnRpdHlUeXBlKHBhdGhTZWdtZW50c1swXSkgPz9cbiAgICAgICAgICAgICAgICBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkQ29tcGxleFR5cGUocGF0aFNlZ21lbnRzWzBdKSA/P1xuICAgICAgICAgICAgICAgIGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRBY3Rpb24ocGF0aFNlZ21lbnRzWzBdKTtcbiAgICAgICAgICAgIHBhdGhTZWdtZW50cy5zaGlmdCgpOyAvLyBMZXQncyByZW1vdmUgdGhlIGZpcnN0IHBhdGggZWxlbWVudFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhcnRFbGVtZW50ID0gY29udmVydGVyLmdldENvbnZlcnRlZEVudGl0eUNvbnRhaW5lcigpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChzdGFydEVsZW1lbnRbQU5OT1RBVElPTl9UQVJHRVRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gYW5ub3RhdGlvbjogc3RhcnQgYXQgdGhlIGFubm90YXRpb24gdGFyZ2V0XG4gICAgICAgIHN0YXJ0RWxlbWVudCA9IHN0YXJ0RWxlbWVudFtBTk5PVEFUSU9OX1RBUkdFVF07XG4gICAgfSBlbHNlIGlmIChzdGFydEVsZW1lbnQuX3R5cGUgPT09ICdQcm9wZXJ0eScpIHtcbiAgICAgICAgLy8gcHJvcGVydHk6IHN0YXJ0IGF0IHRoZSBlbnRpdHkgdHlwZSBvciBjb21wbGV4IHR5cGUgdGhlIHByb3BlcnR5IGJlbG9uZ3MgdG9cbiAgICAgICAgY29uc3QgcGFyZW50RWxlbWVudEZRTiA9IHN1YnN0cmluZ0JlZm9yZUZpcnN0KHN0YXJ0RWxlbWVudC5mdWxseVF1YWxpZmllZE5hbWUsICcvJyk7XG4gICAgICAgIHN0YXJ0RWxlbWVudCA9XG4gICAgICAgICAgICBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkRW50aXR5VHlwZShwYXJlbnRFbGVtZW50RlFOKSA/PyBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkQ29tcGxleFR5cGUocGFyZW50RWxlbWVudEZRTik7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gcGF0aFNlZ21lbnRzLnJlZHVjZShcbiAgICAgICAgKGN1cnJlbnQ6IFJlc29sdXRpb25UYXJnZXQ8YW55Piwgc2VnbWVudDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IChtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Lm1lc3NhZ2VzLnB1c2goeyBtZXNzYWdlIH0pO1xuICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnQudGFyZ2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudC5vYmplY3RQYXRoID0gYXBwZW5kT2JqZWN0UGF0aChjdXJyZW50Lm9iamVjdFBhdGgsIGN1cnJlbnQudGFyZ2V0KTtcblxuICAgICAgICAgICAgLy8gQW5ub3RhdGlvblxuICAgICAgICAgICAgaWYgKHNlZ21lbnQuc3RhcnRzV2l0aCgnQCcpICYmIHNlZ21lbnQgIT09ICdAJHVpNS5vdmVybG9hZCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbdm9jYWJ1bGFyeUFsaWFzLCB0ZXJtXSA9IGNvbnZlcnRlci5zcGxpdFRlcm0oc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYW5ub3RhdGlvbiA9IGN1cnJlbnQudGFyZ2V0LmFubm90YXRpb25zW3ZvY2FidWxhcnlBbGlhcy5zdWJzdHJpbmcoMSldPy5bdGVybV07XG5cbiAgICAgICAgICAgICAgICBpZiAoYW5ub3RhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gYW5ub3RhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYEFubm90YXRpb24gJyR7c2VnbWVudC5zdWJzdHJpbmcoMSl9JyBub3QgZm91bmQgb24gJHtjdXJyZW50LnRhcmdldC5fdHlwZX0gJyR7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldC5mdWxseVF1YWxpZmllZE5hbWVcbiAgICAgICAgICAgICAgICAgICAgfSdgXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gJFBhdGggLyAkQW5ub3RhdGlvblBhdGggc3ludGF4XG4gICAgICAgICAgICBpZiAoY3VycmVudC50YXJnZXQuJHRhcmdldCkge1xuICAgICAgICAgICAgICAgIGxldCBzdWJQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09ICckQW5ub3RhdGlvblBhdGgnKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YlBhdGggPSBjdXJyZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlZ21lbnQgPT09ICckUGF0aCcpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ViUGF0aCA9IGN1cnJlbnQudGFyZ2V0LnBhdGg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN1YlBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJUYXJnZXQgPSByZXNvbHZlVGFyZ2V0KGNvbnZlcnRlciwgY3VycmVudC50YXJnZXRbQU5OT1RBVElPTl9UQVJHRVRdLCBzdWJQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgc3ViVGFyZ2V0Lm9iamVjdFBhdGguZm9yRWFjaCgodmlzaXRlZFN1Yk9iamVjdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnQub2JqZWN0UGF0aC5pbmNsdWRlcyh2aXNpdGVkU3ViT2JqZWN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQub2JqZWN0UGF0aCA9IGFwcGVuZE9iamVjdFBhdGgoY3VycmVudC5vYmplY3RQYXRoLCB2aXNpdGVkU3ViT2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBzdWJUYXJnZXQudGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Lm9iamVjdFBhdGggPSBhcHBlbmRPYmplY3RQYXRoKGN1cnJlbnQub2JqZWN0UGF0aCwgY3VycmVudC50YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHRyYXZlcnNlIGJhc2VkIG9uIHRoZSBlbGVtZW50IHR5cGVcbiAgICAgICAgICAgIHN3aXRjaCAoY3VycmVudC50YXJnZXQ/Ll90eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnU2NoZW1hJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBlbGVtZW50OiBFbnRpdHlUeXBlLCBDb21wbGV4VHlwZSwgQWN0aW9uLCBFbnRpdHlDb250YWluZXIgP1xuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ0VudGl0eUNvbnRhaW5lcic6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRoaXNFbGVtZW50ID0gY3VycmVudC50YXJnZXQgYXMgRW50aXR5Q29udGFpbmVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJycgfHwgc2VnbWVudCA9PT0gdGhpc0VsZW1lbnQuZnVsbHlRdWFsaWZpZWROYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgZWxlbWVudDogRW50aXR5U2V0LCBTaW5nbGV0b24gb3IgQWN0aW9uSW1wb3J0P1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dEVsZW1lbnQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IEFjdGlvbkltcG9ydCB8IHVuZGVmaW5lZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0VsZW1lbnQuZW50aXR5U2V0cy5ieV9uYW1lKHNlZ21lbnQpID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0VsZW1lbnQuc2luZ2xldG9ucy5ieV9uYW1lKHNlZ21lbnQpID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0VsZW1lbnQuYWN0aW9uSW1wb3J0cy5ieV9uYW1lKHNlZ21lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IG5leHRFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnRW50aXR5U2V0JzpcbiAgICAgICAgICAgICAgICBjYXNlICdTaW5nbGV0b24nOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRoaXNFbGVtZW50ID0gY3VycmVudC50YXJnZXQgYXMgRW50aXR5U2V0IHwgU2luZ2xldG9uO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50ID09PSAnJyB8fCBzZWdtZW50ID09PSAnJFR5cGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBFbXB0eSBQYXRoIGFmdGVyIGFuIEVudGl0eVNldCBvciBTaW5nbGV0b24gbWVhbnMgRW50aXR5VHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSB0aGlzRWxlbWVudC5lbnRpdHlUeXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJyQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50ID09PSAnJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncyA9IHRoaXNFbGVtZW50Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBjb250aW51ZSByZXNvbHZpbmcgYXQgdGhlIEVudGl0eVNldCdzIG9yIFNpbmdsZXRvbidzIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZVRhcmdldChjb252ZXJ0ZXIsIHRoaXNFbGVtZW50LmVudGl0eVR5cGUsIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IHJlc3VsdC50YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQub2JqZWN0UGF0aCA9IHJlc3VsdC5vYmplY3RQYXRoLnJlZHVjZShhcHBlbmRPYmplY3RQYXRoLCBjdXJyZW50Lm9iamVjdFBhdGgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYXNlICdFbnRpdHlUeXBlJzpcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGhpc0VsZW1lbnQgPSBjdXJyZW50LnRhcmdldCBhcyBFbnRpdHlUeXBlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJycgfHwgc2VnbWVudCA9PT0gJyRUeXBlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXNFbGVtZW50LmVudGl0eVByb3BlcnRpZXMuYnlfbmFtZShzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gcHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eSA9IHRoaXNFbGVtZW50Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmJ5X25hbWUoc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdGlvblByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBuYXZpZ2F0aW9uUHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXNFbGVtZW50LmFjdGlvbnNbc2VnbWVudF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBhY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdBY3Rpb25JbXBvcnQnOiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHJlc29sdmluZyBhdCB0aGUgQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVUYXJnZXQoY29udmVydGVyLCBjdXJyZW50LnRhcmdldC5hY3Rpb24sIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IHJlc3VsdC50YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQub2JqZWN0UGF0aCA9IHJlc3VsdC5vYmplY3RQYXRoLnJlZHVjZShhcHBlbmRPYmplY3RQYXRoLCBjdXJyZW50Lm9iamVjdFBhdGgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYXNlICdBY3Rpb24nOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRoaXNFbGVtZW50ID0gY3VycmVudC50YXJnZXQgYXMgQWN0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50ID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJ0AkdWk1Lm92ZXJsb2FkJyB8fCBzZWdtZW50ID09PSAnMCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09ICckUGFyYW1ldGVyJyAmJiB0aGlzRWxlbWVudC5pc0JvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IHRoaXNFbGVtZW50LnBhcmFtZXRlcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRFbGVtZW50ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNFbGVtZW50LnBhcmFtZXRlcnNbc2VnbWVudCBhcyBhbnldID8/XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzRWxlbWVudC5wYXJhbWV0ZXJzLmZpbmQoKHBhcmFtOiBBY3Rpb25QYXJhbWV0ZXIpID0+IHBhcmFtLm5hbWUgPT09IHNlZ21lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBuZXh0RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhc2UgJ1Byb3BlcnR5JzpcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGhpc0VsZW1lbnQgPSBjdXJyZW50LnRhcmdldCBhcyBQcm9wZXJ0eTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvcGVydHkgb3IgTmF2aWdhdGlvblByb3BlcnR5IG9mIHRoZSBDb21wbGV4VHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IHRoaXNFbGVtZW50LnRhcmdldFR5cGUgYXMgQ29tcGxleFR5cGUgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSB0eXBlLnByb3BlcnRpZXMuYnlfbmFtZShzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBwcm9wZXJ0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmF2aWdhdGlvblByb3BlcnR5ID0gdHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5ieV9uYW1lKHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXZpZ2F0aW9uUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBuYXZpZ2F0aW9uUHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ0FjdGlvblBhcmFtZXRlcic6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZWRUeXBlID0gKGN1cnJlbnQudGFyZ2V0IGFzIEFjdGlvblBhcmFtZXRlcikudHlwZVJlZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZWRUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVUYXJnZXQoY29udmVydGVyLCByZWZlcmVuY2VkVHlwZSwgc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IHJlc3VsdC50YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Lm9iamVjdFBhdGggPSByZXN1bHQub2JqZWN0UGF0aC5yZWR1Y2UoYXBwZW5kT2JqZWN0UGF0aCwgY3VycmVudC5vYmplY3RQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnTmF2aWdhdGlvblByb3BlcnR5JzpcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udGludWUgYXQgdGhlIE5hdmlnYXRpb25Qcm9wZXJ0eSdzIHRhcmdldCB0eXBlXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVUYXJnZXQoY29udmVydGVyLCAoY3VycmVudC50YXJnZXQgYXMgTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSByZXN1bHQudGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Lm9iamVjdFBhdGggPSByZXN1bHQub2JqZWN0UGF0aC5yZWR1Y2UoYXBwZW5kT2JqZWN0UGF0aCwgY3VycmVudC5vYmplY3RQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQudGFyZ2V0W3NlZ21lbnRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IGN1cnJlbnQudGFyZ2V0W3NlZ21lbnRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5vYmplY3RQYXRoID0gYXBwZW5kT2JqZWN0UGF0aChjdXJyZW50Lm9iamVjdFBhdGgsIGN1cnJlbnQudGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBlcnJvcihcbiAgICAgICAgICAgICAgICBgRWxlbWVudCAnJHtzZWdtZW50fScgbm90IGZvdW5kIGF0ICR7Y3VycmVudC50YXJnZXQuX3R5cGV9ICcke2N1cnJlbnQudGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZX0nYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgeyB0YXJnZXQ6IHN0YXJ0RWxlbWVudCwgb2JqZWN0UGF0aDogW10sIG1lc3NhZ2VzOiBbXSB9XG4gICAgKTtcblxuICAgIC8vIERpYWdub3N0aWNzXG4gICAgcmVzdWx0Lm1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UpID0+IGNvbnZlcnRlci5sb2dFcnJvcihtZXNzYWdlLm1lc3NhZ2UpKTtcbiAgICBpZiAoIXJlc3VsdC50YXJnZXQpIHtcbiAgICAgICAgaWYgKGFubm90YXRpb25zVGVybSkge1xuICAgICAgICAgICAgY29uc3QgYW5ub3RhdGlvblR5cGUgPSBpbmZlclR5cGVGcm9tVGVybShjb252ZXJ0ZXIsIGFubm90YXRpb25zVGVybSwgc3RhcnRFbGVtZW50LmZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgICAgICAgICBjb252ZXJ0ZXIubG9nRXJyb3IoXG4gICAgICAgICAgICAgICAgJ1VuYWJsZSB0byByZXNvbHZlIHRoZSBwYXRoIGV4cHJlc3Npb246ICcgK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgIHBhdGggK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJ0hpbnQ6IENoZWNrIGFuZCBjb3JyZWN0IHRoZSBwYXRoIHZhbHVlcyB1bmRlciB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpbiB0aGUgbWV0YWRhdGEgKGFubm90YXRpb24ueG1sIGZpbGUgb3IgQ0RTIGFubm90YXRpb25zIGZvciB0aGUgYXBwbGljYXRpb24pOiBcXG5cXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxBbm5vdGF0aW9uIFRlcm0gPSAnICtcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnNUZXJtICtcbiAgICAgICAgICAgICAgICAgICAgJz4nICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnPFJlY29yZCBUeXBlID0gJyArXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25UeXBlICtcbiAgICAgICAgICAgICAgICAgICAgJz4nICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnPEFubm90YXRpb25QYXRoID0gJyArXG4gICAgICAgICAgICAgICAgICAgIHBhdGggK1xuICAgICAgICAgICAgICAgICAgICAnPidcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb252ZXJ0ZXIubG9nRXJyb3IoXG4gICAgICAgICAgICAgICAgJ1VuYWJsZSB0byByZXNvbHZlIHRoZSBwYXRoIGV4cHJlc3Npb246ICcgK1xuICAgICAgICAgICAgICAgICAgICBwYXRoICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICdIaW50OiBDaGVjayBhbmQgY29ycmVjdCB0aGUgcGF0aCB2YWx1ZXMgdW5kZXIgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaW4gdGhlIG1ldGFkYXRhIChhbm5vdGF0aW9uLnhtbCBmaWxlIG9yIENEUyBhbm5vdGF0aW9ucyBmb3IgdGhlIGFwcGxpY2F0aW9uKTogXFxuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICc8QW5ub3RhdGlvbiBUZXJtID0gJyArXG4gICAgICAgICAgICAgICAgICAgIHBhdGhTZWdtZW50c1swXSArXG4gICAgICAgICAgICAgICAgICAgICc+JyArXG4gICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxQcm9wZXJ0eVZhbHVlICBQYXRoPSAnICtcbiAgICAgICAgICAgICAgICAgICAgcGF0aFNlZ21lbnRzWzFdICtcbiAgICAgICAgICAgICAgICAgICAgJz4nXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBUeXBlZ3VhcmQgdG8gY2hlY2sgaWYgdGhlIHBhdGggY29udGFpbnMgYW4gYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gcGF0aFN0ciB0aGUgcGF0aCB0byBldmFsdWF0ZVxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBhbm5vdGF0aW9uIGluIHRoZSBwYXRoLlxuICovXG5mdW5jdGlvbiBpc0Fubm90YXRpb25QYXRoKHBhdGhTdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwYXRoU3RyLmluY2x1ZGVzKCdAJyk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVmFsdWUoXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgY3VycmVudFRhcmdldDogYW55LFxuICAgIGN1cnJlbnRUZXJtOiBzdHJpbmcsXG4gICAgY3VycmVudFByb3BlcnR5OiBzdHJpbmcsXG4gICAgY3VycmVudFNvdXJjZTogc3RyaW5nLFxuICAgIHByb3BlcnR5VmFsdWU6IEV4cHJlc3Npb24sXG4gICAgdmFsdWVGUU46IHN0cmluZ1xuKSB7XG4gICAgaWYgKHByb3BlcnR5VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzd2l0Y2ggKHByb3BlcnR5VmFsdWUudHlwZSkge1xuICAgICAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWUuU3RyaW5nO1xuICAgICAgICBjYXNlICdJbnQnOlxuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWUuSW50O1xuICAgICAgICBjYXNlICdCb29sJzpcbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlLkJvb2w7XG4gICAgICAgIGNhc2UgJ0RlY2ltYWwnOlxuICAgICAgICAgICAgcmV0dXJuIERlY2ltYWwocHJvcGVydHlWYWx1ZS5EZWNpbWFsKTtcbiAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZS5EYXRlO1xuICAgICAgICBjYXNlICdFbnVtTWVtYmVyJzpcbiAgICAgICAgICAgIGNvbnN0IGFsaWFzZWRFbnVtID0gY29udmVydGVyLmFsaWFzKHByb3BlcnR5VmFsdWUuRW51bU1lbWJlcik7XG4gICAgICAgICAgICBjb25zdCBzcGxpdEVudW0gPSBhbGlhc2VkRW51bS5zcGxpdCgnICcpO1xuICAgICAgICAgICAgaWYgKHNwbGl0RW51bVswXSAmJiBFbnVtSXNGbGFnW3N1YnN0cmluZ0JlZm9yZUZpcnN0KHNwbGl0RW51bVswXSwgJy8nKV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3BsaXRFbnVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFsaWFzZWRFbnVtO1xuXG4gICAgICAgIGNhc2UgJ1Byb3BlcnR5UGF0aCc6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdQcm9wZXJ0eVBhdGgnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBwcm9wZXJ0eVZhbHVlLlByb3BlcnR5UGF0aCxcbiAgICAgICAgICAgICAgICBmdWxseVF1YWxpZmllZE5hbWU6IHZhbHVlRlFOLFxuICAgICAgICAgICAgICAgICR0YXJnZXQ6IHJlc29sdmVUYXJnZXQoY29udmVydGVyLCBjdXJyZW50VGFyZ2V0LCBwcm9wZXJ0eVZhbHVlLlByb3BlcnR5UGF0aCwgY3VycmVudFRlcm0pLnRhcmdldCxcbiAgICAgICAgICAgICAgICBbQU5OT1RBVElPTl9UQVJHRVRdOiBjdXJyZW50VGFyZ2V0XG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJzpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBwcm9wZXJ0eVZhbHVlLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsXG4gICAgICAgICAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiB2YWx1ZUZRTixcbiAgICAgICAgICAgICAgICAkdGFyZ2V0OiByZXNvbHZlVGFyZ2V0KGNvbnZlcnRlciwgY3VycmVudFRhcmdldCwgcHJvcGVydHlWYWx1ZS5OYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBjdXJyZW50VGVybSlcbiAgICAgICAgICAgICAgICAgICAgLnRhcmdldCxcbiAgICAgICAgICAgICAgICBbQU5OT1RBVElPTl9UQVJHRVRdOiBjdXJyZW50VGFyZ2V0XG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlICdBbm5vdGF0aW9uUGF0aCc6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdBbm5vdGF0aW9uUGF0aCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHByb3BlcnR5VmFsdWUuQW5ub3RhdGlvblBhdGgsXG4gICAgICAgICAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiB2YWx1ZUZRTixcbiAgICAgICAgICAgICAgICAkdGFyZ2V0OiByZXNvbHZlVGFyZ2V0KFxuICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZXIsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlci51bmFsaWFzKHByb3BlcnR5VmFsdWUuQW5ub3RhdGlvblBhdGgpLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGVybVxuICAgICAgICAgICAgICAgICkudGFyZ2V0LFxuICAgICAgICAgICAgICAgIGFubm90YXRpb25zVGVybTogY3VycmVudFRlcm0sXG4gICAgICAgICAgICAgICAgdGVybTogJycsXG4gICAgICAgICAgICAgICAgcGF0aDogJycsXG4gICAgICAgICAgICAgICAgW0FOTk9UQVRJT05fVEFSR0VUXTogY3VycmVudFRhcmdldFxuICAgICAgICAgICAgfTtcbiAgICAgICAgY2FzZSAnUGF0aCc6XG4gICAgICAgICAgICBjb25zdCAkdGFyZ2V0ID0gcmVzb2x2ZVRhcmdldChjb252ZXJ0ZXIsIGN1cnJlbnRUYXJnZXQsIHByb3BlcnR5VmFsdWUuUGF0aCwgY3VycmVudFRlcm0pLnRhcmdldDtcbiAgICAgICAgICAgIGlmIChpc0Fubm90YXRpb25QYXRoKHByb3BlcnR5VmFsdWUuUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAvLyBpbmxpbmUgdGhlIHRhcmdldFxuICAgICAgICAgICAgICAgIHJldHVybiAkdGFyZ2V0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUGF0aCcsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IHByb3BlcnR5VmFsdWUuUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiB2YWx1ZUZRTixcbiAgICAgICAgICAgICAgICAgICAgJHRhcmdldDogJHRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgW0FOTk9UQVRJT05fVEFSR0VUXTogY3VycmVudFRhcmdldFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnUmVjb3JkJzpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZVJlY29yZChcbiAgICAgICAgICAgICAgICBjb252ZXJ0ZXIsXG4gICAgICAgICAgICAgICAgY3VycmVudFRlcm0sXG4gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCxcbiAgICAgICAgICAgICAgICBjdXJyZW50UHJvcGVydHksXG4gICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlLlJlY29yZCxcbiAgICAgICAgICAgICAgICB2YWx1ZUZRTlxuICAgICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAnQ29sbGVjdGlvbic6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VDb2xsZWN0aW9uKFxuICAgICAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXJtLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsdWUuQ29sbGVjdGlvbixcbiAgICAgICAgICAgICAgICB2YWx1ZUZRTlxuICAgICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAnQXBwbHknOlxuICAgICAgICBjYXNlICdOdWxsJzpcbiAgICAgICAgY2FzZSAnTm90JzpcbiAgICAgICAgY2FzZSAnRXEnOlxuICAgICAgICBjYXNlICdOZSc6XG4gICAgICAgIGNhc2UgJ0d0JzpcbiAgICAgICAgY2FzZSAnR2UnOlxuICAgICAgICBjYXNlICdMdCc6XG4gICAgICAgIGNhc2UgJ0xlJzpcbiAgICAgICAgY2FzZSAnSWYnOlxuICAgICAgICBjYXNlICdBbmQnOlxuICAgICAgICBjYXNlICdPcic6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZTtcbiAgICB9XG59XG5cbi8qKlxuICogSW5mZXIgdGhlIHR5cGUgb2YgYSB0ZXJtIGJhc2VkIG9uIGl0cyB0eXBlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICAgICAgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSBhbm5vdGF0aW9uc1Rlcm0gICBUaGUgYW5ub3RhdGlvbiB0ZXJtXG4gKiBAcGFyYW0gYW5ub3RhdGlvblRhcmdldCAgVGhlIGFubm90YXRpb24gdGFyZ2V0XG4gKiBAcGFyYW0gY3VycmVudFByb3BlcnR5ICAgVGhlIGN1cnJlbnQgcHJvcGVydHkgb2YgdGhlIHJlY29yZFxuICogQHJldHVybnMgVGhlIGluZmVycmVkIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGluZmVyVHlwZUZyb21UZXJtKFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIGFubm90YXRpb25zVGVybTogc3RyaW5nLFxuICAgIGFubm90YXRpb25UYXJnZXQ6IHN0cmluZyxcbiAgICBjdXJyZW50UHJvcGVydHk/OiBzdHJpbmdcbikge1xuICAgIGxldCB0YXJnZXRUeXBlID0gKFRlcm1Ub1R5cGVzIGFzIGFueSlbYW5ub3RhdGlvbnNUZXJtXTtcbiAgICBpZiAoY3VycmVudFByb3BlcnR5KSB7XG4gICAgICAgIGFubm90YXRpb25zVGVybSA9IGAke3N1YnN0cmluZ0JlZm9yZUxhc3QoYW5ub3RhdGlvbnNUZXJtLCAnLicpfS4ke2N1cnJlbnRQcm9wZXJ0eX1gO1xuICAgICAgICB0YXJnZXRUeXBlID0gKFRlcm1Ub1R5cGVzIGFzIGFueSlbYW5ub3RhdGlvbnNUZXJtXTtcbiAgICB9XG5cbiAgICBjb252ZXJ0ZXIubG9nRXJyb3IoXG4gICAgICAgIGBUaGUgdHlwZSBvZiB0aGUgcmVjb3JkIHVzZWQgd2l0aGluIHRoZSB0ZXJtICR7YW5ub3RhdGlvbnNUZXJtfSB3YXMgbm90IGRlZmluZWQgYW5kIHdhcyBpbmZlcnJlZCBhcyAke3RhcmdldFR5cGV9LlxuSGludDogSWYgcG9zc2libGUsIHRyeSB0byBtYWludGFpbiB0aGUgVHlwZSBwcm9wZXJ0eSBmb3IgZWFjaCBSZWNvcmQuXG48QW5ub3RhdGlvbnMgVGFyZ2V0PVwiJHthbm5vdGF0aW9uVGFyZ2V0fVwiPlxuXHQ8QW5ub3RhdGlvbiBUZXJtPVwiJHthbm5vdGF0aW9uc1Rlcm19XCI+XG5cdFx0PFJlY29yZD4uLi48L1JlY29yZD5cblx0PC9Bbm5vdGF0aW9uPlxuPC9Bbm5vdGF0aW9ucz5gXG4gICAgKTtcblxuICAgIHJldHVybiB0YXJnZXRUeXBlO1xufVxuXG5mdW5jdGlvbiBpc0RhdGFGaWVsZFdpdGhGb3JBY3Rpb24oYW5ub3RhdGlvbkNvbnRlbnQ6IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIGFubm90YXRpb25Db250ZW50Lmhhc093blByb3BlcnR5KCdBY3Rpb24nKSAmJlxuICAgICAgICAoYW5ub3RhdGlvbkNvbnRlbnQuJFR5cGUgPT09ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb24nIHx8XG4gICAgICAgICAgICBhbm5vdGF0aW9uQ29udGVudC4kVHlwZSA9PT0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhBY3Rpb24nKVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVjb3JkVHlwZShcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBjdXJyZW50VGVybTogc3RyaW5nLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGFueSxcbiAgICBjdXJyZW50UHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICByZWNvcmREZWZpbml0aW9uOiBBbm5vdGF0aW9uUmVjb3JkXG4pIHtcbiAgICBsZXQgdGFyZ2V0VHlwZTtcbiAgICBpZiAoIXJlY29yZERlZmluaXRpb24udHlwZSAmJiBjdXJyZW50VGVybSkge1xuICAgICAgICB0YXJnZXRUeXBlID0gaW5mZXJUeXBlRnJvbVRlcm0oY29udmVydGVyLCBjdXJyZW50VGVybSwgY3VycmVudFRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUsIGN1cnJlbnRQcm9wZXJ0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0VHlwZSA9IGNvbnZlcnRlci51bmFsaWFzKHJlY29yZERlZmluaXRpb24udHlwZSk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXRUeXBlO1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlY29yZChcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBjdXJyZW50VGVybTogc3RyaW5nLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGFueSxcbiAgICBjdXJyZW50UHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBjdXJyZW50U291cmNlOiBzdHJpbmcsXG4gICAgYW5ub3RhdGlvblJlY29yZDogQW5ub3RhdGlvblJlY29yZCxcbiAgICBjdXJyZW50RlFOOiBzdHJpbmdcbikge1xuICAgIGNvbnN0IGFubm90YXRpb25UZXJtOiBhbnkgPSB7XG4gICAgICAgICRUeXBlOiBwYXJzZVJlY29yZFR5cGUoY29udmVydGVyLCBjdXJyZW50VGVybSwgY3VycmVudFRhcmdldCwgY3VycmVudFByb3BlcnR5LCBhbm5vdGF0aW9uUmVjb3JkKSxcbiAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiBjdXJyZW50RlFOLFxuICAgICAgICBbQU5OT1RBVElPTl9UQVJHRVRdOiBjdXJyZW50VGFyZ2V0XG4gICAgfTtcblxuICAgIC8vIGFubm90YXRpb25zIG9uIHRoZSByZWNvcmRcbiAgICBsYXp5KGFubm90YXRpb25UZXJtLCAnYW5ub3RhdGlvbnMnLCAoKSA9PiB7XG4gICAgICAgIC8vIGJlIGdyYWNlZnVsIHdoZW4gcmVzb2x2aW5nIGFubm90YXRpb25zIG9uIGFubm90YXRpb25zOiBTb21ldGltZXMgdGhleSBhcmUgcmVmZXJlbmNlZCBkaXJlY3RseSwgc29tZXRpbWVzIHRoZXlcbiAgICAgICAgLy8gYXJlIHBhcnQgb2YgdGhlIGdsb2JhbCBhbm5vdGF0aW9ucyBsaXN0XG4gICAgICAgIGxldCBhbm5vdGF0aW9ucztcbiAgICAgICAgaWYgKGFubm90YXRpb25SZWNvcmQuYW5ub3RhdGlvbnMgJiYgYW5ub3RhdGlvblJlY29yZC5hbm5vdGF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhbm5vdGF0aW9ucyA9IGFubm90YXRpb25SZWNvcmQuYW5ub3RhdGlvbnM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbm5vdGF0aW9ucyA9IGNvbnZlcnRlci5yYXdBbm5vdGF0aW9uc1BlclRhcmdldFtjdXJyZW50RlFOXT8uYW5ub3RhdGlvbnM7XG4gICAgICAgIH1cblxuICAgICAgICBhbm5vdGF0aW9ucz8uZm9yRWFjaCgoYW5ub3RhdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICBhbm5vdGF0aW9uLnRhcmdldCA9IGN1cnJlbnRGUU47XG4gICAgICAgICAgICBhbm5vdGF0aW9uLl9fc291cmNlID0gY3VycmVudFNvdXJjZTtcbiAgICAgICAgICAgIGFubm90YXRpb25bQU5OT1RBVElPTl9UQVJHRVRdID0gY3VycmVudFRhcmdldDtcbiAgICAgICAgICAgIGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lID0gYCR7Y3VycmVudEZRTn1AJHthbm5vdGF0aW9uLnRlcm19YDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFubm90YXRpb25zT2JqZWN0KGNvbnZlcnRlciwgYW5ub3RhdGlvblRlcm0sIGFubm90YXRpb25zID8/IFtdKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGFubm90YXRpb25Db250ZW50ID0gYW5ub3RhdGlvblJlY29yZC5wcm9wZXJ0eVZhbHVlcz8ucmVkdWNlKChhbm5vdGF0aW9uQ29udGVudCwgcHJvcGVydHlWYWx1ZSkgPT4ge1xuICAgICAgICBsYXp5KGFubm90YXRpb25Db250ZW50LCBwcm9wZXJ0eVZhbHVlLm5hbWUsICgpID0+XG4gICAgICAgICAgICBwYXJzZVZhbHVlKFxuICAgICAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXJtLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgYCR7Y3VycmVudEZRTn0vJHtwcm9wZXJ0eVZhbHVlLm5hbWV9YFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBhbm5vdGF0aW9uQ29udGVudDtcbiAgICB9LCBhbm5vdGF0aW9uVGVybSk7XG5cbiAgICBpZiAoaXNEYXRhRmllbGRXaXRoRm9yQWN0aW9uKGFubm90YXRpb25Db250ZW50KSkge1xuICAgICAgICBsYXp5KGFubm90YXRpb25Db250ZW50LCAnQWN0aW9uVGFyZ2V0JywgKCkgPT4ge1xuICAgICAgICAgICAgLy8gdHJ5IHRvIHJlc29sdmUgdG8gYSBib3VuZCBhY3Rpb24gb2YgdGhlIGFubm90YXRpb24gdGFyZ2V0XG4gICAgICAgICAgICBsZXQgYWN0aW9uVGFyZ2V0ID0gY3VycmVudFRhcmdldC5hY3Rpb25zPy5bYW5ub3RhdGlvbkNvbnRlbnQuQWN0aW9uXTtcblxuICAgICAgICAgICAgaWYgKCFhY3Rpb25UYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAvLyB0cnkgdG8gZmluZCBhIGNvcnJlc3BvbmRpbmcgdW5ib3VuZCBhY3Rpb25cbiAgICAgICAgICAgICAgICBhY3Rpb25UYXJnZXQgPSBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkQWN0aW9uSW1wb3J0KGFubm90YXRpb25Db250ZW50LkFjdGlvbik/LmFjdGlvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFhY3Rpb25UYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAvLyB0cnkgdG8gZmluZCBhIGNvcnJlc3BvbmRpbmcgYm91bmQgKCEpIGFjdGlvblxuICAgICAgICAgICAgICAgIGFjdGlvblRhcmdldCA9IGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRBY3Rpb24oYW5ub3RhdGlvbkNvbnRlbnQuQWN0aW9uKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFjdGlvblRhcmdldD8uaXNCb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UYXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWFjdGlvblRhcmdldCkge1xuICAgICAgICAgICAgICAgIGNvbnZlcnRlci5sb2dFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYFVuYWJsZSB0byByZXNvbHZlIHRoZSBhY3Rpb24gJyR7YW5ub3RhdGlvbkNvbnRlbnQuQWN0aW9ufScgZGVmaW5lZCBmb3IgJyR7YW5ub3RhdGlvblRlcm0uZnVsbHlRdWFsaWZpZWROYW1lfSdgXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY3Rpb25UYXJnZXQ7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYW5ub3RhdGlvbkNvbnRlbnQ7XG59XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25UeXBlID1cbiAgICB8ICdQcm9wZXJ0eVBhdGgnXG4gICAgfCAnUGF0aCdcbiAgICB8ICdJZidcbiAgICB8ICdBcHBseSdcbiAgICB8ICdOdWxsJ1xuICAgIHwgJ0FuZCdcbiAgICB8ICdFcSdcbiAgICB8ICdOZSdcbiAgICB8ICdOb3QnXG4gICAgfCAnR3QnXG4gICAgfCAnR2UnXG4gICAgfCAnTHQnXG4gICAgfCAnTGUnXG4gICAgfCAnT3InXG4gICAgfCAnQW5ub3RhdGlvblBhdGgnXG4gICAgfCAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCdcbiAgICB8ICdSZWNvcmQnXG4gICAgfCAnU3RyaW5nJ1xuICAgIHwgJ0VtcHR5Q29sbGVjdGlvbic7XG5cbi8qKlxuICogUmV0cmlldmUgb3IgaW5mZXIgdGhlIGNvbGxlY3Rpb24gdHlwZSBiYXNlZCBvbiBpdHMgY29udGVudC5cbiAqXG4gKiBAcGFyYW0gY29sbGVjdGlvbkRlZmluaXRpb25cbiAqIEByZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBjb2xsZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldE9ySW5mZXJDb2xsZWN0aW9uVHlwZShjb2xsZWN0aW9uRGVmaW5pdGlvbjogYW55W10pOiBDb2xsZWN0aW9uVHlwZSB7XG4gICAgbGV0IHR5cGU6IENvbGxlY3Rpb25UeXBlID0gKGNvbGxlY3Rpb25EZWZpbml0aW9uIGFzIGFueSkudHlwZTtcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkICYmIGNvbGxlY3Rpb25EZWZpbml0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZmlyc3RDb2xJdGVtID0gY29sbGVjdGlvbkRlZmluaXRpb25bMF07XG4gICAgICAgIGlmIChmaXJzdENvbEl0ZW0uaGFzT3duUHJvcGVydHkoJ1Byb3BlcnR5UGF0aCcpKSB7XG4gICAgICAgICAgICB0eXBlID0gJ1Byb3BlcnR5UGF0aCc7XG4gICAgICAgIH0gZWxzZSBpZiAoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KCdQYXRoJykpIHtcbiAgICAgICAgICAgIHR5cGUgPSAnUGF0aCc7XG4gICAgICAgIH0gZWxzZSBpZiAoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KCdBbm5vdGF0aW9uUGF0aCcpKSB7XG4gICAgICAgICAgICB0eXBlID0gJ0Fubm90YXRpb25QYXRoJztcbiAgICAgICAgfSBlbHNlIGlmIChmaXJzdENvbEl0ZW0uaGFzT3duUHJvcGVydHkoJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnKSkge1xuICAgICAgICAgICAgdHlwZSA9ICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJztcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBmaXJzdENvbEl0ZW0gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KCd0eXBlJykgfHwgZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KCdwcm9wZXJ0eVZhbHVlcycpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHR5cGUgPSAnUmVjb3JkJztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmlyc3RDb2xJdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdHlwZSA9ICdTdHJpbmcnO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdHlwZSA9ICdFbXB0eUNvbGxlY3Rpb24nO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDb2xsZWN0aW9uKFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGFueSxcbiAgICBjdXJyZW50VGVybTogc3RyaW5nLFxuICAgIGN1cnJlbnRQcm9wZXJ0eTogc3RyaW5nLFxuICAgIGN1cnJlbnRTb3VyY2U6IHN0cmluZyxcbiAgICBjb2xsZWN0aW9uRGVmaW5pdGlvbjogYW55W10sXG4gICAgcGFyZW50RlFOOiBzdHJpbmdcbikge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25EZWZpbml0aW9uVHlwZSA9IGdldE9ySW5mZXJDb2xsZWN0aW9uVHlwZShjb2xsZWN0aW9uRGVmaW5pdGlvbik7XG5cbiAgICBzd2l0Y2ggKGNvbGxlY3Rpb25EZWZpbml0aW9uVHlwZSkge1xuICAgICAgICBjYXNlICdQcm9wZXJ0eVBhdGgnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgocHJvcGVydHlQYXRoLCBwcm9wZXJ0eUlkeCk6IFByb3BlcnR5UGF0aCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBQcm9wZXJ0eVBhdGggPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQcm9wZXJ0eVBhdGgnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcHJvcGVydHlQYXRoLlByb3BlcnR5UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtwYXJlbnRGUU59LyR7cHJvcGVydHlJZHh9YFxuICAgICAgICAgICAgICAgIH0gYXMgYW55O1xuXG4gICAgICAgICAgICAgICAgbGF6eShcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAnJHRhcmdldCcsXG4gICAgICAgICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlVGFyZ2V0PFByb3BlcnR5Pihjb252ZXJ0ZXIsIGN1cnJlbnRUYXJnZXQsIHByb3BlcnR5UGF0aC5Qcm9wZXJ0eVBhdGgsIGN1cnJlbnRUZXJtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50YXJnZXQgPz8gKHt9IGFzIFByb3BlcnR5KSAvLyBUT0RPOiAkdGFyZ2V0IGlzIG1hbmRhdG9yeSAtIHRocm93IGFuIGVycm9yP1xuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSAnUGF0aCc6XG4gICAgICAgICAgICAvLyBUT0RPOiBtYWtlIGxhenk/XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChwYXRoVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVRhcmdldChjb252ZXJ0ZXIsIGN1cnJlbnRUYXJnZXQsIHBhdGhWYWx1ZS5QYXRoLCBjdXJyZW50VGVybSkudGFyZ2V0O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSAnQW5ub3RhdGlvblBhdGgnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgoYW5ub3RhdGlvblBhdGgsIGFubm90YXRpb25JZHgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdBbm5vdGF0aW9uUGF0aCcsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhbm5vdGF0aW9uUGF0aC5Bbm5vdGF0aW9uUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtwYXJlbnRGUU59LyR7YW5ub3RhdGlvbklkeH1gLFxuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uc1Rlcm06IGN1cnJlbnRUZXJtLFxuICAgICAgICAgICAgICAgICAgICB0ZXJtOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogJydcbiAgICAgICAgICAgICAgICB9IGFzIGFueTtcblxuICAgICAgICAgICAgICAgIGxhenkoXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgJyR0YXJnZXQnLFxuICAgICAgICAgICAgICAgICAgICAoKSA9PiByZXNvbHZlVGFyZ2V0KGNvbnZlcnRlciwgY3VycmVudFRhcmdldCwgYW5ub3RhdGlvblBhdGguQW5ub3RhdGlvblBhdGgsIGN1cnJlbnRUZXJtKS50YXJnZXRcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgobmF2UHJvcGVydHlQYXRoLCBuYXZQcm9wSWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IG5hdlByb3BlcnR5UGF0aC5OYXZpZ2F0aW9uUHJvcGVydHlQYXRoID8/ICcnO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbmF2aWdhdGlvblByb3BlcnR5UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtwYXJlbnRGUU59LyR7bmF2UHJvcElkeH1gXG4gICAgICAgICAgICAgICAgfSBhcyBhbnk7XG5cbiAgICAgICAgICAgICAgICBpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LiR0YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGF6eShcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICckdGFyZ2V0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHJlc29sdmVUYXJnZXQoY29udmVydGVyLCBjdXJyZW50VGFyZ2V0LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBjdXJyZW50VGVybSkudGFyZ2V0XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgJ1JlY29yZCc6XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChyZWNvcmREZWZpbml0aW9uLCByZWNvcmRJZHgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VSZWNvcmQoXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRlcm0sXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkRGVmaW5pdGlvbixcbiAgICAgICAgICAgICAgICAgICAgYCR7cGFyZW50RlFOfS8ke3JlY29yZElkeH1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgJ0FwcGx5JzpcbiAgICAgICAgY2FzZSAnTnVsbCc6XG4gICAgICAgIGNhc2UgJ0lmJzpcbiAgICAgICAgY2FzZSAnRXEnOlxuICAgICAgICBjYXNlICdOZSc6XG4gICAgICAgIGNhc2UgJ0x0JzpcbiAgICAgICAgY2FzZSAnR3QnOlxuICAgICAgICBjYXNlICdMZSc6XG4gICAgICAgIGNhc2UgJ0dlJzpcbiAgICAgICAgY2FzZSAnTm90JzpcbiAgICAgICAgY2FzZSAnQW5kJzpcbiAgICAgICAgY2FzZSAnT3InOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgoaWZWYWx1ZSkgPT4gaWZWYWx1ZSk7XG5cbiAgICAgICAgY2FzZSAnU3RyaW5nJzpcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uRGVmaW5pdGlvbi5tYXAoKHN0cmluZ1ZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHJpbmdWYWx1ZSA9PT0gJ3N0cmluZycgfHwgc3RyaW5nVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlLlN0cmluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb25EZWZpbml0aW9uLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY2FzZScpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNWNE5hdmlnYXRpb25Qcm9wZXJ0eShcbiAgICBuYXZQcm9wOiBSYXdWMk5hdmlnYXRpb25Qcm9wZXJ0eSB8IFJhd1Y0TmF2aWdhdGlvblByb3BlcnR5XG4pOiBuYXZQcm9wIGlzIFJhd1Y0TmF2aWdhdGlvblByb3BlcnR5IHtcbiAgICByZXR1cm4gISEobmF2UHJvcCBhcyBCYXNlTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlTmFtZTtcbn1cblxuLyoqXG4gKiBTcGxpdCB0aGUgYWxpYXMgZnJvbSB0aGUgdGVybSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyB0aGUgY3VycmVudCBzZXQgb2YgcmVmZXJlbmNlc1xuICogQHBhcmFtIHRlcm1WYWx1ZSB0aGUgdmFsdWUgb2YgdGhlIHRlcm1cbiAqIEByZXR1cm5zIHRoZSB0ZXJtIGFsaWFzIGFuZCB0aGUgYWN0dWFsIHRlcm0gdmFsdWVcbiAqL1xuZnVuY3Rpb24gc3BsaXRUZXJtKHJlZmVyZW5jZXM6IFJlZmVyZW5jZXNXaXRoTWFwLCB0ZXJtVmFsdWU6IHN0cmluZykge1xuICAgIHJldHVybiBzcGxpdEF0TGFzdChhbGlhcyhyZWZlcmVuY2VzLCB0ZXJtVmFsdWUpLCAnLicpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0QW5ub3RhdGlvbihjb252ZXJ0ZXI6IENvbnZlcnRlciwgdGFyZ2V0OiBhbnksIHJhd0Fubm90YXRpb246IFJhd0Fubm90YXRpb24pOiBBbm5vdGF0aW9uIHtcbiAgICBsZXQgYW5ub3RhdGlvbjogYW55O1xuICAgIGlmIChyYXdBbm5vdGF0aW9uLnJlY29yZCkge1xuICAgICAgICBhbm5vdGF0aW9uID0gcGFyc2VSZWNvcmQoXG4gICAgICAgICAgICBjb252ZXJ0ZXIsXG4gICAgICAgICAgICByYXdBbm5vdGF0aW9uLnRlcm0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIChyYXdBbm5vdGF0aW9uIGFzIGFueSkuX19zb3VyY2UsXG4gICAgICAgICAgICByYXdBbm5vdGF0aW9uLnJlY29yZCxcbiAgICAgICAgICAgIChyYXdBbm5vdGF0aW9uIGFzIGFueSkuZnVsbHlRdWFsaWZpZWROYW1lXG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChyYXdBbm5vdGF0aW9uLmNvbGxlY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhbm5vdGF0aW9uID0gcGFyc2VWYWx1ZShcbiAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb24udGVybSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgKHJhd0Fubm90YXRpb24gYXMgYW55KS5fX3NvdXJjZSxcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb24udmFsdWUgPz8geyB0eXBlOiAnQm9vbCcsIEJvb2w6IHRydWUgfSxcbiAgICAgICAgICAgIChyYXdBbm5vdGF0aW9uIGFzIGFueSkuZnVsbHlRdWFsaWZpZWROYW1lXG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChyYXdBbm5vdGF0aW9uLmNvbGxlY3Rpb24pIHtcbiAgICAgICAgYW5ub3RhdGlvbiA9IHBhcnNlQ29sbGVjdGlvbihcbiAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb24udGVybSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgKHJhd0Fubm90YXRpb24gYXMgYW55KS5fX3NvdXJjZSxcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb24uY29sbGVjdGlvbixcbiAgICAgICAgICAgIChyYXdBbm5vdGF0aW9uIGFzIGFueSkuZnVsbHlRdWFsaWZpZWROYW1lXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBjYXNlJyk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlb2YgYW5ub3RhdGlvbikge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy13cmFwcGVyc1xuICAgICAgICAgICAgYW5ub3RhdGlvbiA9IG5ldyBTdHJpbmcoYW5ub3RhdGlvbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LXdyYXBwZXJzXG4gICAgICAgICAgICBhbm5vdGF0aW9uID0gbmV3IEJvb2xlYW4oYW5ub3RhdGlvbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgIGFubm90YXRpb24gPSBuZXcgTnVtYmVyKGFubm90YXRpb24pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBhbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA9IChyYXdBbm5vdGF0aW9uIGFzIGFueSkuZnVsbHlRdWFsaWZpZWROYW1lO1xuICAgIGFubm90YXRpb25bQU5OT1RBVElPTl9UQVJHRVRdID0gdGFyZ2V0O1xuXG4gICAgY29uc3QgW3ZvY0FsaWFzLCB2b2NUZXJtXSA9IGNvbnZlcnRlci5zcGxpdFRlcm0ocmF3QW5ub3RhdGlvbi50ZXJtKTtcblxuICAgIGFubm90YXRpb24udGVybSA9IGNvbnZlcnRlci51bmFsaWFzKGAke3ZvY0FsaWFzfS4ke3ZvY1Rlcm19YCk7XG4gICAgYW5ub3RhdGlvbi5xdWFsaWZpZXIgPSByYXdBbm5vdGF0aW9uLnF1YWxpZmllcjtcbiAgICBhbm5vdGF0aW9uLl9fc291cmNlID0gKHJhd0Fubm90YXRpb24gYXMgYW55KS5fX3NvdXJjZTtcblxuICAgIHRyeSB7XG4gICAgICAgIGxhenkoYW5ub3RhdGlvbiwgJ2Fubm90YXRpb25zJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYW5ub3RhdGlvbkZRTiA9IGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lO1xuXG4gICAgICAgICAgICAvLyBiZSBncmFjZWZ1bCB3aGVuIHJlc29sdmluZyBhbm5vdGF0aW9ucyBvbiBhbm5vdGF0aW9uczogU29tZXRpbWVzIHRoZXkgYXJlIHJlZmVyZW5jZWQgZGlyZWN0bHksIHNvbWV0aW1lcyB0aGV5XG4gICAgICAgICAgICAvLyBhcmUgcGFydCBvZiB0aGUgZ2xvYmFsIGFubm90YXRpb25zIGxpc3RcbiAgICAgICAgICAgIGxldCBhbm5vdGF0aW9ucztcbiAgICAgICAgICAgIGlmIChyYXdBbm5vdGF0aW9uLmFubm90YXRpb25zICYmIHJhd0Fubm90YXRpb24uYW5ub3RhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGFubm90YXRpb25zID0gcmF3QW5ub3RhdGlvbi5hbm5vdGF0aW9ucztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXIucmF3QW5ub3RhdGlvbnNQZXJUYXJnZXRbYW5ub3RhdGlvbkZRTl0/LmFubm90YXRpb25zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhbm5vdGF0aW9ucz8uZm9yRWFjaCgocmF3U3ViQW5ub3RhdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcmF3U3ViQW5ub3RhdGlvbi50YXJnZXQgPSBhbm5vdGF0aW9uRlFOO1xuICAgICAgICAgICAgICAgIHJhd1N1YkFubm90YXRpb24uX19zb3VyY2UgPSBhbm5vdGF0aW9uLl9fc291cmNlO1xuICAgICAgICAgICAgICAgIHJhd1N1YkFubm90YXRpb25bQU5OT1RBVElPTl9UQVJHRVRdID0gdGFyZ2V0O1xuICAgICAgICAgICAgICAgIHJhd1N1YkFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lID0gYCR7YW5ub3RhdGlvbkZRTn1AJHtyYXdTdWJBbm5vdGF0aW9uLnRlcm19YDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQW5ub3RhdGlvbnNPYmplY3QoY29udmVydGVyLCBhbm5vdGF0aW9uLCBhbm5vdGF0aW9ucyA/PyBbXSk7XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gbm90IGFuIGVycm9yOiBwYXJzZVJlY29yZCgpIGFscmVhZHkgYWRkcyBhbm5vdGF0aW9ucywgYnV0IHRoZSBvdGhlciBwYXJzZVhYWCBmdW5jdGlvbnMgZG9uJ3QsIHNvIHRoaXMgY2FuIGhhcHBlblxuICAgIH1cblxuICAgIHJldHVybiBhbm5vdGF0aW9uIGFzIEFubm90YXRpb247XG59XG5cbmZ1bmN0aW9uIGdldEFubm90YXRpb25GUU4oY3VycmVudFRhcmdldE5hbWU6IHN0cmluZywgcmVmZXJlbmNlczogUmVmZXJlbmNlW10sIGFubm90YXRpb246IFJhd0Fubm90YXRpb24pIHtcbiAgICBjb25zdCBhbm5vdGF0aW9uRlFOID0gYCR7Y3VycmVudFRhcmdldE5hbWV9QCR7dW5hbGlhcyhyZWZlcmVuY2VzLCBhbm5vdGF0aW9uLnRlcm0pfWA7XG5cbiAgICBpZiAoYW5ub3RhdGlvbi5xdWFsaWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIGAke2Fubm90YXRpb25GUU59IyR7YW5ub3RhdGlvbi5xdWFsaWZpZXJ9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYW5ub3RhdGlvbkZRTjtcbiAgICB9XG59XG5cbi8qKlxuICogTWVyZ2UgYW5ub3RhdGlvbiBmcm9tIGRpZmZlcmVudCBzb3VyY2UgdG9nZXRoZXIgYnkgb3ZlcndyaXRpbmcgYXQgdGhlIHRlcm0gbGV2ZWwuXG4gKlxuICogQHBhcmFtIHJhd01ldGFkYXRhXG4gKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIG1lcmdlZCBhbm5vdGF0aW9uc1xuICovXG5mdW5jdGlvbiBtZXJnZUFubm90YXRpb25zKHJhd01ldGFkYXRhOiBSYXdNZXRhZGF0YSk6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0PiB7XG4gICAgY29uc3QgYW5ub3RhdGlvbkxpc3RQZXJUYXJnZXQ6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0PiA9IHt9O1xuICAgIE9iamVjdC5rZXlzKHJhd01ldGFkYXRhLnNjaGVtYS5hbm5vdGF0aW9ucykuZm9yRWFjaCgoYW5ub3RhdGlvblNvdXJjZSkgPT4ge1xuICAgICAgICByYXdNZXRhZGF0YS5zY2hlbWEuYW5ub3RhdGlvbnNbYW5ub3RhdGlvblNvdXJjZV0uZm9yRWFjaCgoYW5ub3RhdGlvbkxpc3Q6IEFubm90YXRpb25MaXN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VGFyZ2V0TmFtZSA9IHVuYWxpYXMocmF3TWV0YWRhdGEucmVmZXJlbmNlcywgYW5ub3RhdGlvbkxpc3QudGFyZ2V0KSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAoYW5ub3RhdGlvbkxpc3QgYXMgYW55KS5fX3NvdXJjZSA9IGFubm90YXRpb25Tb3VyY2U7XG4gICAgICAgICAgICBpZiAoIWFubm90YXRpb25MaXN0UGVyVGFyZ2V0W2N1cnJlbnRUYXJnZXROYW1lXSkge1xuICAgICAgICAgICAgICAgIGFubm90YXRpb25MaXN0UGVyVGFyZ2V0W2N1cnJlbnRUYXJnZXROYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnM6IGFubm90YXRpb25MaXN0LmFubm90YXRpb25zLm1hcCgoYW5ub3RhdGlvbjogUmF3QW5ub3RhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgKGFubm90YXRpb24gYXMgQW5ub3RhdGlvbikuZnVsbHlRdWFsaWZpZWROYW1lID0gZ2V0QW5ub3RhdGlvbkZRTihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdNZXRhZGF0YS5yZWZlcmVuY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAoYW5ub3RhdGlvbiBhcyBhbnkpLl9fc291cmNlID0gYW5ub3RhdGlvblNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbm5vdGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBjdXJyZW50VGFyZ2V0TmFtZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgKGFubm90YXRpb25MaXN0UGVyVGFyZ2V0W2N1cnJlbnRUYXJnZXROYW1lXSBhcyBhbnkpLl9fc291cmNlID0gYW5ub3RhdGlvblNvdXJjZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbkxpc3QuYW5ub3RhdGlvbnMuZm9yRWFjaCgoYW5ub3RhdGlvbjogUmF3QW5ub3RhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kSW5kZXggPSBhbm5vdGF0aW9uTGlzdFBlclRhcmdldFtjdXJyZW50VGFyZ2V0TmFtZV0uYW5ub3RhdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgICAgKHJlZmVyZW5jZUFubm90YXRpb246IFJhd0Fubm90YXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VBbm5vdGF0aW9uLnRlcm0gPT09IGFubm90YXRpb24udGVybSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VBbm5vdGF0aW9uLnF1YWxpZmllciA9PT0gYW5ub3RhdGlvbi5xdWFsaWZpZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAoYW5ub3RhdGlvbiBhcyBhbnkpLl9fc291cmNlID0gYW5ub3RhdGlvblNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgKGFubm90YXRpb24gYXMgQW5ub3RhdGlvbikuZnVsbHlRdWFsaWZpZWROYW1lID0gZ2V0QW5ub3RhdGlvbkZRTihcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3TWV0YWRhdGEucmVmZXJlbmNlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25MaXN0UGVyVGFyZ2V0W2N1cnJlbnRUYXJnZXROYW1lXS5hbm5vdGF0aW9ucy5zcGxpY2UoZmluZEluZGV4LCAxLCBhbm5vdGF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25MaXN0UGVyVGFyZ2V0W2N1cnJlbnRUYXJnZXROYW1lXS5hbm5vdGF0aW9ucy5wdXNoKGFubm90YXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBhbm5vdGF0aW9uTGlzdFBlclRhcmdldDtcbn1cblxuY2xhc3MgQ29udmVydGVyIHtcbiAgICBwcml2YXRlIF9yYXdBbm5vdGF0aW9uc1BlclRhcmdldDogUmVjb3JkPEZ1bGx5UXVhbGlmaWVkTmFtZSwgQW5ub3RhdGlvbkxpc3Q+O1xuICAgIGdldCByYXdBbm5vdGF0aW9uc1BlclRhcmdldCgpOiBSZWNvcmQ8RnVsbHlRdWFsaWZpZWROYW1lLCBBbm5vdGF0aW9uTGlzdD4ge1xuICAgICAgICBpZiAodGhpcy5fcmF3QW5ub3RhdGlvbnNQZXJUYXJnZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fcmF3QW5ub3RhdGlvbnNQZXJUYXJnZXQgPSBtZXJnZUFubm90YXRpb25zKHRoaXMucmF3TWV0YWRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yYXdBbm5vdGF0aW9uc1BlclRhcmdldDtcbiAgICB9XG5cbiAgICBnZXRDb252ZXJ0ZWRFbnRpdHlDb250YWluZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbnZlcnRlZEVsZW1lbnQoXG4gICAgICAgICAgICB0aGlzLnJhd01ldGFkYXRhLnNjaGVtYS5lbnRpdHlDb250YWluZXIuZnVsbHlRdWFsaWZpZWROYW1lLFxuICAgICAgICAgICAgdGhpcy5yYXdNZXRhZGF0YS5zY2hlbWEuZW50aXR5Q29udGFpbmVyLFxuICAgICAgICAgICAgY29udmVydEVudGl0eUNvbnRhaW5lclxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldENvbnZlcnRlZEVudGl0eVNldChmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0ZWRPdXRwdXQuZW50aXR5U2V0cy5ieV9mdWxseVF1YWxpZmllZE5hbWUoZnVsbHlRdWFsaWZpZWROYW1lKTtcbiAgICB9XG5cbiAgICBnZXRDb252ZXJ0ZWRTaW5nbGV0b24oZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVkT3V0cHV0LnNpbmdsZXRvbnMuYnlfZnVsbHlRdWFsaWZpZWROYW1lKGZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgfVxuXG4gICAgZ2V0Q29udmVydGVkRW50aXR5VHlwZShmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0ZWRPdXRwdXQuZW50aXR5VHlwZXMuYnlfZnVsbHlRdWFsaWZpZWROYW1lKGZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgfVxuXG4gICAgZ2V0Q29udmVydGVkQ29tcGxleFR5cGUoZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVkT3V0cHV0LmNvbXBsZXhUeXBlcy5ieV9mdWxseVF1YWxpZmllZE5hbWUoZnVsbHlRdWFsaWZpZWROYW1lKTtcbiAgICB9XG5cbiAgICBnZXRDb252ZXJ0ZWRUeXBlRGVmaW5pdGlvbihmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0ZWRPdXRwdXQudHlwZURlZmluaXRpb25zLmJ5X2Z1bGx5UXVhbGlmaWVkTmFtZShmdWxseVF1YWxpZmllZE5hbWUpO1xuICAgIH1cblxuICAgIGdldENvbnZlcnRlZEFjdGlvbkltcG9ydChmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSkge1xuICAgICAgICBsZXQgYWN0aW9uSW1wb3J0ID0gdGhpcy5jb252ZXJ0ZWRPdXRwdXQuYWN0aW9uSW1wb3J0cy5ieV9mdWxseVF1YWxpZmllZE5hbWUoZnVsbHlRdWFsaWZpZWROYW1lKTtcbiAgICAgICAgaWYgKCFhY3Rpb25JbXBvcnQpIHtcbiAgICAgICAgICAgIGFjdGlvbkltcG9ydCA9IHRoaXMuY29udmVydGVkT3V0cHV0LmFjdGlvbkltcG9ydHMuYnlfbmFtZShmdWxseVF1YWxpZmllZE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY3Rpb25JbXBvcnQ7XG4gICAgfVxuXG4gICAgZ2V0Q29udmVydGVkQWN0aW9uKGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZE91dHB1dC5hY3Rpb25zLmJ5X2Z1bGx5UXVhbGlmaWVkTmFtZShmdWxseVF1YWxpZmllZE5hbWUpO1xuICAgIH1cblxuICAgIGNvbnZlcnQ8Q29udmVydGVkLCBSYXcgZXh0ZW5kcyBSYXdUeXBlPENvbnZlcnRlZD4+KFxuICAgICAgICByYXdWYWx1ZTogUmF3LFxuICAgICAgICBtYXA6IChjb252ZXJ0ZXI6IENvbnZlcnRlciwgcmF3OiBSYXcpID0+IENvbnZlcnRlZFxuICAgICk6ICgpID0+IENvbnZlcnRlZDtcbiAgICBjb252ZXJ0PENvbnZlcnRlZCwgUmF3IGV4dGVuZHMgUmF3VHlwZTxDb252ZXJ0ZWQ+LCBJbmRleFByb3BlcnR5IGV4dGVuZHMgRXh0cmFjdDxrZXlvZiBDb252ZXJ0ZWQsIHN0cmluZz4+KFxuICAgICAgICByYXdWYWx1ZTogUmF3W10sXG4gICAgICAgIG1hcDogKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXc6IFJhdykgPT4gQ29udmVydGVkXG4gICAgKTogKCkgPT4gQXJyYXlXaXRoSW5kZXg8Q29udmVydGVkLCBJbmRleFByb3BlcnR5PjtcbiAgICBjb252ZXJ0PENvbnZlcnRlZCwgUmF3IGV4dGVuZHMgUmF3VHlwZTxDb252ZXJ0ZWQ+LCBJbmRleFByb3BlcnR5IGV4dGVuZHMgRXh0cmFjdDxrZXlvZiBDb252ZXJ0ZWQsIHN0cmluZz4+KFxuICAgICAgICByYXdWYWx1ZTogUmF3IHwgUmF3W10sXG4gICAgICAgIG1hcDogKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXc6IFJhdykgPT4gQ29udmVydGVkXG4gICAgKTogKCgpID0+IENvbnZlcnRlZCkgfCAoKCkgPT4gQXJyYXlXaXRoSW5kZXg8Q29udmVydGVkLCBJbmRleFByb3BlcnR5Pikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyYXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udmVydGVkID0gcmF3VmFsdWUucmVkdWNlKChjb252ZXJ0ZWRFbGVtZW50cywgcmF3RWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZWRFbGVtZW50ID0gdGhpcy5nZXRDb252ZXJ0ZWRFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgKHJhd0VsZW1lbnQgYXMgYW55KS5mdWxseVF1YWxpZmllZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXdFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb252ZXJ0ZWRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWRFbGVtZW50cy5wdXNoKGNvbnZlcnRlZEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZWRFbGVtZW50cztcbiAgICAgICAgICAgICAgICB9LCBbXSBhcyBDb252ZXJ0ZWRbXSk7XG4gICAgICAgICAgICAgICAgYWRkR2V0QnlWYWx1ZShjb252ZXJ0ZWQsICduYW1lJyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIGFkZEdldEJ5VmFsdWUoY29udmVydGVkLCAnZnVsbHlRdWFsaWZpZWROYW1lJyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZWQgYXMgQXJyYXlXaXRoSW5kZXg8Q29udmVydGVkLCBJbmRleFByb3BlcnR5PjtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4gdGhpcy5nZXRDb252ZXJ0ZWRFbGVtZW50KHJhd1ZhbHVlLmZ1bGx5UXVhbGlmaWVkTmFtZSwgcmF3VmFsdWUsIG1hcCkhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByYXdNZXRhZGF0YTogUmF3TWV0YWRhdGE7XG4gICAgcHJpdmF0ZSBjb252ZXJ0ZWRFbGVtZW50czogTWFwPEZ1bGx5UXVhbGlmaWVkTmFtZSwgYW55PiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIGNvbnZlcnRlZE91dHB1dDogQ29udmVydGVkTWV0YWRhdGE7XG5cbiAgICByYXdTY2hlbWE6IFJhd1NjaGVtYTtcblxuICAgIGNvbnN0cnVjdG9yKHJhd01ldGFkYXRhOiBSYXdNZXRhZGF0YSwgY29udmVydGVkT3V0cHV0OiBDb252ZXJ0ZWRNZXRhZGF0YSkge1xuICAgICAgICB0aGlzLnJhd01ldGFkYXRhID0gcmF3TWV0YWRhdGE7XG4gICAgICAgIHRoaXMucmF3U2NoZW1hID0gcmF3TWV0YWRhdGEuc2NoZW1hO1xuICAgICAgICB0aGlzLmNvbnZlcnRlZE91dHB1dCA9IGNvbnZlcnRlZE91dHB1dDtcbiAgICB9XG5cbiAgICBnZXRDb252ZXJ0ZWRFbGVtZW50PENvbnZlcnRlZFR5cGUsIFJhd1R5cGUgZXh0ZW5kcyBSZW1vdmVBbm5vdGF0aW9uQW5kVHlwZTxDb252ZXJ0ZWRUeXBlPj4oXG4gICAgICAgIGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lLFxuICAgICAgICByYXdFbGVtZW50OiBSYXdUeXBlIHwgdW5kZWZpbmVkIHwgKChmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSkgPT4gUmF3VHlwZSB8IHVuZGVmaW5lZCksXG4gICAgICAgIG1hcDogKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXc6IFJhd1R5cGUpID0+IENvbnZlcnRlZFR5cGVcbiAgICApOiBDb252ZXJ0ZWRUeXBlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgbGV0IGNvbnZlcnRlZDogQ29udmVydGVkVHlwZSB8IHVuZGVmaW5lZCA9IHRoaXMuY29udmVydGVkRWxlbWVudHMuZ2V0KGZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgICAgIGlmIChjb252ZXJ0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgcmF3TWV0YWRhdGEgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiByYXdFbGVtZW50ID09PSAnZnVuY3Rpb24nID8gcmF3RWxlbWVudC5hcHBseSh1bmRlZmluZWQsIFtmdWxseVF1YWxpZmllZE5hbWVdKSA6IHJhd0VsZW1lbnQ7XG4gICAgICAgICAgICBpZiAocmF3TWV0YWRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnZlcnRlZCA9IG1hcC5hcHBseSh1bmRlZmluZWQsIFt0aGlzLCByYXdNZXRhZGF0YV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udmVydGVkRWxlbWVudHMuc2V0KGZ1bGx5UXVhbGlmaWVkTmFtZSwgY29udmVydGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udmVydGVkO1xuICAgIH1cblxuICAgIGxvZ0Vycm9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0aGlzLmNvbnZlcnRlZE91dHB1dC5kaWFnbm9zdGljcy5wdXNoKHsgbWVzc2FnZSB9KTtcbiAgICB9XG5cbiAgICBzcGxpdFRlcm0odGVybTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzcGxpdFRlcm0odGhpcy5yYXdNZXRhZGF0YS5yZWZlcmVuY2VzLCB0ZXJtKTtcbiAgICB9XG5cbiAgICBhbGlhcyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBhbGlhcyh0aGlzLnJhd01ldGFkYXRhLnJlZmVyZW5jZXMsIHZhbHVlKTtcbiAgICB9XG5cbiAgICB1bmFsaWFzKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuYWxpYXModGhpcy5yYXdNZXRhZGF0YS5yZWZlcmVuY2VzLCB2YWx1ZSkgPz8gJyc7XG4gICAgfVxufVxuXG50eXBlIFJhd1R5cGU8VD4gPSBSZW1vdmVBbm5vdGF0aW9uQW5kVHlwZTxUPiAmIHsgZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUgfTtcblxuZnVuY3Rpb24gcmVzb2x2ZUVudGl0eVR5cGUoY29udmVydGVyOiBDb252ZXJ0ZXIsIGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgbGV0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkRW50aXR5VHlwZShmdWxseVF1YWxpZmllZE5hbWUpO1xuXG4gICAgICAgIGlmICghZW50aXR5VHlwZSkge1xuICAgICAgICAgICAgY29udmVydGVyLmxvZ0Vycm9yKGBFbnRpdHlUeXBlICcke2Z1bGx5UXVhbGlmaWVkTmFtZX0nIG5vdCBmb3VuZGApO1xuICAgICAgICAgICAgZW50aXR5VHlwZSA9IHt9IGFzIEVudGl0eVR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudGl0eVR5cGU7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzKFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIHJhd05hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzOiBTaW5nbGV0b25bJ25hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcnXSB8IEVudGl0eVNldFsnbmF2aWdhdGlvblByb3BlcnR5QmluZGluZyddLFxuICAgIHJhd0VsZW1lbnQ6IFJhd1NpbmdsZXRvbiB8IFJhd0VudGl0eVNldFxuKSB7XG4gICAgcmV0dXJuICgpID0+XG4gICAgICAgIE9iamVjdC5rZXlzKHJhd05hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzKS5yZWR1Y2UoKG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzLCBiaW5kaW5nTmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmF3QmluZGluZ1RhcmdldCA9IHJhd05hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzW2JpbmRpbmdOYW1lXTtcblxuICAgICAgICAgICAgbGF6eShuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncywgYmluZGluZ05hbWUsICgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzb2x2ZWRCaW5kaW5nVGFyZ2V0O1xuICAgICAgICAgICAgICAgIGlmIChyYXdCaW5kaW5nVGFyZ2V0Ll90eXBlID09PSAnU2luZ2xldG9uJykge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZEJpbmRpbmdUYXJnZXQgPSBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkU2luZ2xldG9uKHJhd0JpbmRpbmdUYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZEJpbmRpbmdUYXJnZXQgPSBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkRW50aXR5U2V0KHJhd0JpbmRpbmdUYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFyZXNvbHZlZEJpbmRpbmdUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udmVydGVyLmxvZ0Vycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7cmF3RWxlbWVudC5fdHlwZX0gJyR7cmF3RWxlbWVudC5mdWxseVF1YWxpZmllZE5hbWV9JzogRmFpbGVkIHRvIHJlc29sdmUgTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyAke2JpbmRpbmdOYW1lfWBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRCaW5kaW5nVGFyZ2V0ID0ge30gYXMgYW55O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRCaW5kaW5nVGFyZ2V0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3M7XG4gICAgICAgIH0sIHt9IGFzIEVudGl0eVNldFsnbmF2aWdhdGlvblByb3BlcnR5QmluZGluZyddIHwgU2luZ2xldG9uWyduYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nJ10pO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQW5ub3RhdGlvbnMoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd0Fubm90YXRpb25UYXJnZXQ6IGFueSkge1xuICAgIGNvbnN0IG5lc3RlZEFubm90YXRpb25zID0gcmF3QW5ub3RhdGlvblRhcmdldC5hbm5vdGF0aW9ucztcblxuICAgIHJldHVybiAoKSA9PlxuICAgICAgICBjcmVhdGVBbm5vdGF0aW9uc09iamVjdChcbiAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb25UYXJnZXQsXG4gICAgICAgICAgICBuZXN0ZWRBbm5vdGF0aW9ucyA/P1xuICAgICAgICAgICAgICAgIGNvbnZlcnRlci5yYXdBbm5vdGF0aW9uc1BlclRhcmdldFtyYXdBbm5vdGF0aW9uVGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZV0/LmFubm90YXRpb25zID8/XG4gICAgICAgICAgICAgICAgW11cbiAgICAgICAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQW5ub3RhdGlvbnNPYmplY3QoY29udmVydGVyOiBDb252ZXJ0ZXIsIHRhcmdldDogYW55LCByYXdBbm5vdGF0aW9uczogUmF3QW5ub3RhdGlvbltdKSB7XG4gICAgcmV0dXJuIHJhd0Fubm90YXRpb25zLnJlZHVjZSgodm9jYWJ1bGFyeUFsaWFzZXMsIGFubm90YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgW3ZvY0FsaWFzLCB2b2NUZXJtXSA9IGNvbnZlcnRlci5zcGxpdFRlcm0oYW5ub3RhdGlvbi50ZXJtKTtcbiAgICAgICAgY29uc3Qgdm9jVGVybVdpdGhRdWFsaWZpZXIgPSBgJHt2b2NUZXJtfSR7YW5ub3RhdGlvbi5xdWFsaWZpZXIgPyAnIycgKyBhbm5vdGF0aW9uLnF1YWxpZmllciA6ICcnfWA7XG5cbiAgICAgICAgaWYgKHZvY2FidWxhcnlBbGlhc2VzW3ZvY0FsaWFzXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2b2NhYnVsYXJ5QWxpYXNlc1t2b2NBbGlhc10gPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdm9jYWJ1bGFyeUFsaWFzZXNbdm9jQWxpYXNdLmhhc093blByb3BlcnR5KHZvY1Rlcm1XaXRoUXVhbGlmaWVyKSkge1xuICAgICAgICAgICAgbGF6eSh2b2NhYnVsYXJ5QWxpYXNlc1t2b2NBbGlhc10sIHZvY1Rlcm1XaXRoUXVhbGlmaWVyLCAoKSA9PlxuICAgICAgICAgICAgICAgIGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAoYW5ub3RhdGlvbiBhcyBBbm5vdGF0aW9uKS5mdWxseVF1YWxpZmllZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb24sXG4gICAgICAgICAgICAgICAgICAgIChjb252ZXJ0ZXIsIHJhd0Fubm90YXRpb24pID0+IGNvbnZlcnRBbm5vdGF0aW9uKGNvbnZlcnRlciwgdGFyZ2V0LCByYXdBbm5vdGF0aW9uKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZvY2FidWxhcnlBbGlhc2VzO1xuICAgIH0sIHt9IGFzIGFueSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gRW50aXR5Q29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd0VudGl0eUNvbnRhaW5lciAgICBVbmNvbnZlcnRlZCBFbnRpdHlDb250YWluZXJcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgRW50aXR5Q29udGFpbmVyXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRFbnRpdHlDb250YWluZXIoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd0VudGl0eUNvbnRhaW5lcjogUmF3RW50aXR5Q29udGFpbmVyKTogRW50aXR5Q29udGFpbmVyIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRFbnRpdHlDb250YWluZXIgPSByYXdFbnRpdHlDb250YWluZXIgYXMgRW50aXR5Q29udGFpbmVyO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlDb250YWluZXIsICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9ucyhjb252ZXJ0ZXIsIHJhd0VudGl0eUNvbnRhaW5lcikpO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlDb250YWluZXIsICdlbnRpdHlTZXRzJywgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5lbnRpdHlTZXRzLCBjb252ZXJ0RW50aXR5U2V0KSk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEVudGl0eUNvbnRhaW5lciwgJ3NpbmdsZXRvbnMnLCBjb252ZXJ0ZXIuY29udmVydChjb252ZXJ0ZXIucmF3U2NoZW1hLnNpbmdsZXRvbnMsIGNvbnZlcnRTaW5nbGV0b24pKTtcblxuICAgIGxhenkoXG4gICAgICAgIGNvbnZlcnRlZEVudGl0eUNvbnRhaW5lcixcbiAgICAgICAgJ2FjdGlvbkltcG9ydHMnLFxuICAgICAgICBjb252ZXJ0ZXIuY29udmVydChjb252ZXJ0ZXIucmF3U2NoZW1hLmFjdGlvbkltcG9ydHMsIGNvbnZlcnRBY3Rpb25JbXBvcnQpXG4gICAgKTtcblxuICAgIHJldHVybiBjb252ZXJ0ZWRFbnRpdHlDb250YWluZXI7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBTaW5nbGV0b24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd1NpbmdsZXRvbiAgVW5jb252ZXJ0ZWQgU2luZ2xldG9uXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIFNpbmdsZXRvblxuICovXG5mdW5jdGlvbiBjb252ZXJ0U2luZ2xldG9uKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdTaW5nbGV0b246IFJhd1NpbmdsZXRvbik6IFNpbmdsZXRvbiB7XG4gICAgY29uc3QgY29udmVydGVkU2luZ2xldG9uID0gcmF3U2luZ2xldG9uIGFzIFNpbmdsZXRvbjtcblxuICAgIGNvbnZlcnRlZFNpbmdsZXRvbi5lbnRpdHlUeXBlTmFtZSA9IGNvbnZlcnRlci51bmFsaWFzKHJhd1NpbmdsZXRvbi5lbnRpdHlUeXBlTmFtZSk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZFNpbmdsZXRvbiwgJ2VudGl0eVR5cGUnLCByZXNvbHZlRW50aXR5VHlwZShjb252ZXJ0ZXIsIHJhd1NpbmdsZXRvbi5lbnRpdHlUeXBlTmFtZSkpO1xuICAgIGxhenkoY29udmVydGVkU2luZ2xldG9uLCAnYW5ub3RhdGlvbnMnLCByZXNvbHZlQW5ub3RhdGlvbnMoY29udmVydGVyLCByYXdTaW5nbGV0b24gYXMgU2luZ2xldG9uKSk7XG5cbiAgICBjb25zdCBfcmF3TmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3MgPSByYXdTaW5nbGV0b24ubmF2aWdhdGlvblByb3BlcnR5QmluZGluZztcbiAgICBsYXp5KFxuICAgICAgICBjb252ZXJ0ZWRTaW5nbGV0b24sXG4gICAgICAgICduYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nJyxcbiAgICAgICAgcmVzb2x2ZU5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzKFxuICAgICAgICAgICAgY29udmVydGVyLFxuICAgICAgICAgICAgX3Jhd05hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzIGFzIFNpbmdsZXRvblsnbmF2aWdhdGlvblByb3BlcnR5QmluZGluZyddLFxuICAgICAgICAgICAgcmF3U2luZ2xldG9uXG4gICAgICAgIClcbiAgICApO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZFNpbmdsZXRvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBFbnRpdHlTZXQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd0VudGl0eVNldCAgVW5jb252ZXJ0ZWQgRW50aXR5U2V0XG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIEVudGl0eVNldFxuICovXG5mdW5jdGlvbiBjb252ZXJ0RW50aXR5U2V0KGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdFbnRpdHlTZXQ6IFJhd0VudGl0eVNldCk6IEVudGl0eVNldCB7XG4gICAgY29uc3QgY29udmVydGVkRW50aXR5U2V0ID0gcmF3RW50aXR5U2V0IGFzIEVudGl0eVNldDtcblxuICAgIGNvbnZlcnRlZEVudGl0eVNldC5lbnRpdHlUeXBlTmFtZSA9IGNvbnZlcnRlci51bmFsaWFzKHJhd0VudGl0eVNldC5lbnRpdHlUeXBlTmFtZSk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEVudGl0eVNldCwgJ2VudGl0eVR5cGUnLCByZXNvbHZlRW50aXR5VHlwZShjb252ZXJ0ZXIsIHJhd0VudGl0eVNldC5lbnRpdHlUeXBlTmFtZSkpO1xuICAgIGxhenkoY29udmVydGVkRW50aXR5U2V0LCAnYW5ub3RhdGlvbnMnLCByZXNvbHZlQW5ub3RhdGlvbnMoY29udmVydGVyLCByYXdFbnRpdHlTZXQgYXMgRW50aXR5U2V0KSk7XG5cbiAgICBjb25zdCBfcmF3TmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3MgPSByYXdFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZztcbiAgICBsYXp5KFxuICAgICAgICBjb252ZXJ0ZWRFbnRpdHlTZXQsXG4gICAgICAgICduYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nJyxcbiAgICAgICAgcmVzb2x2ZU5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzKFxuICAgICAgICAgICAgY29udmVydGVyLFxuICAgICAgICAgICAgX3Jhd05hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzIGFzIEVudGl0eVNldFsnbmF2aWdhdGlvblByb3BlcnR5QmluZGluZyddLFxuICAgICAgICAgICAgcmF3RW50aXR5U2V0XG4gICAgICAgIClcbiAgICApO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZEVudGl0eVNldDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBFbnRpdHlUeXBlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdFbnRpdHlUeXBlICBVbmNvbnZlcnRlZCBFbnRpdHlUeXBlXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIEVudGl0eVR5cGVcbiAqL1xuZnVuY3Rpb24gY29udmVydEVudGl0eVR5cGUoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd0VudGl0eVR5cGU6IFJhd0VudGl0eVR5cGUpOiBFbnRpdHlUeXBlIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRFbnRpdHlUeXBlID0gcmF3RW50aXR5VHlwZSBhcyBFbnRpdHlUeXBlO1xuXG4gICAgcmF3RW50aXR5VHlwZS5rZXlzLmZvckVhY2goKGtleVByb3A6IGFueSkgPT4ge1xuICAgICAgICBrZXlQcm9wLmlzS2V5ID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIGxhenkoY29udmVydGVkRW50aXR5VHlwZSwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlciwgcmF3RW50aXR5VHlwZSkpO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlUeXBlLCAna2V5cycsIGNvbnZlcnRlci5jb252ZXJ0KHJhd0VudGl0eVR5cGUua2V5cywgY29udmVydFByb3BlcnR5KSk7XG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlUeXBlLCAnZW50aXR5UHJvcGVydGllcycsIGNvbnZlcnRlci5jb252ZXJ0KHJhd0VudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcywgY29udmVydFByb3BlcnR5KSk7XG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkRW50aXR5VHlwZSxcbiAgICAgICAgJ25hdmlnYXRpb25Qcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udmVydGVyLmNvbnZlcnQocmF3RW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcyBhcyBhbnlbXSwgY29udmVydE5hdmlnYXRpb25Qcm9wZXJ0eSlcbiAgICApO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlUeXBlLCAnYWN0aW9ucycsICgpID0+XG4gICAgICAgIGNvbnZlcnRlci5yYXdTY2hlbWEuYWN0aW9uc1xuICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAocmF3QWN0aW9uKSA9PlxuICAgICAgICAgICAgICAgICAgICByYXdBY3Rpb24uaXNCb3VuZCAmJlxuICAgICAgICAgICAgICAgICAgICAocmF3QWN0aW9uLnNvdXJjZVR5cGUgPT09IHJhd0VudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICByYXdBY3Rpb24uc291cmNlVHlwZSA9PT0gYENvbGxlY3Rpb24oJHtyYXdFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZX0pYClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjdGlvbnMsIHJhd0FjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBgJHtjb252ZXJ0ZXIucmF3U2NoZW1hLm5hbWVzcGFjZX0uJHtyYXdBY3Rpb24ubmFtZX1gO1xuICAgICAgICAgICAgICAgIGFjdGlvbnNbbmFtZV0gPSBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkQWN0aW9uKHJhd0FjdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpITtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9ucztcbiAgICAgICAgICAgIH0sIHt9IGFzIEVudGl0eVR5cGVbJ2FjdGlvbnMnXSlcbiAgICApO1xuXG4gICAgY29udmVydGVkRW50aXR5VHlwZS5yZXNvbHZlUGF0aCA9IChyZWxhdGl2ZVBhdGg6IHN0cmluZywgaW5jbHVkZVZpc2l0ZWRPYmplY3RzPzogYm9vbGVhbikgPT4ge1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVUYXJnZXQoY29udmVydGVyLCByYXdFbnRpdHlUeXBlLCByZWxhdGl2ZVBhdGgpO1xuICAgICAgICBpZiAoaW5jbHVkZVZpc2l0ZWRPYmplY3RzKSB7XG4gICAgICAgICAgICByZXR1cm4geyB0YXJnZXQ6IHJlc29sdmVkLnRhcmdldCwgdmlzaXRlZE9iamVjdHM6IHJlc29sdmVkLm9iamVjdFBhdGgsIG1lc3NhZ2VzOiByZXNvbHZlZC5tZXNzYWdlcyB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkLnRhcmdldDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gY29udmVydGVkRW50aXR5VHlwZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIFByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdQcm9wZXJ0eSAgVW5jb252ZXJ0ZWQgUHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgUHJvcGVydHlcbiAqL1xuZnVuY3Rpb24gY29udmVydFByb3BlcnR5KGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdQcm9wZXJ0eTogUmF3UHJvcGVydHkpOiBQcm9wZXJ0eSB7XG4gICAgY29uc3QgY29udmVydGVkUHJvcGVydHkgPSByYXdQcm9wZXJ0eSBhcyBQcm9wZXJ0eTtcblxuICAgIGNvbnZlcnRlZFByb3BlcnR5LnR5cGUgPSBjb252ZXJ0ZXIudW5hbGlhcyhyYXdQcm9wZXJ0eS50eXBlKTtcbiAgICBsYXp5KGNvbnZlcnRlZFByb3BlcnR5LCAnYW5ub3RhdGlvbnMnLCByZXNvbHZlQW5ub3RhdGlvbnMoY29udmVydGVyLCByYXdQcm9wZXJ0eSkpO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRQcm9wZXJ0eSwgJ3RhcmdldFR5cGUnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSByYXdQcm9wZXJ0eS50eXBlO1xuICAgICAgICBjb25zdCB0eXBlTmFtZSA9IHR5cGUuc3RhcnRzV2l0aCgnQ29sbGVjdGlvbicpID8gdHlwZS5zdWJzdHJpbmcoMTEsIHR5cGUubGVuZ3RoIC0gMSkgOiB0eXBlO1xuXG4gICAgICAgIHJldHVybiBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkQ29tcGxleFR5cGUodHlwZU5hbWUpID8/IGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRUeXBlRGVmaW5pdGlvbih0eXBlTmFtZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29udmVydGVkUHJvcGVydHk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBOYXZpZ2F0aW9uUHJvcGVydHkuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd05hdmlnYXRpb25Qcm9wZXJ0eSAgVW5jb252ZXJ0ZWQgTmF2aWdhdGlvblByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIE5hdmlnYXRpb25Qcm9wZXJ0eVxuICovXG5mdW5jdGlvbiBjb252ZXJ0TmF2aWdhdGlvblByb3BlcnR5KFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIHJhd05hdmlnYXRpb25Qcm9wZXJ0eTogUmF3VjJOYXZpZ2F0aW9uUHJvcGVydHkgfCBSYXdWNE5hdmlnYXRpb25Qcm9wZXJ0eVxuKTogTmF2aWdhdGlvblByb3BlcnR5IHtcbiAgICBjb25zdCBjb252ZXJ0ZWROYXZpZ2F0aW9uUHJvcGVydHkgPSByYXdOYXZpZ2F0aW9uUHJvcGVydHkgYXMgTmF2aWdhdGlvblByb3BlcnR5O1xuXG4gICAgY29udmVydGVkTmF2aWdhdGlvblByb3BlcnR5LnJlZmVyZW50aWFsQ29uc3RyYWludCA9IGNvbnZlcnRlZE5hdmlnYXRpb25Qcm9wZXJ0eS5yZWZlcmVudGlhbENvbnN0cmFpbnQgPz8gW107XG5cbiAgICBpZiAoaXNWNE5hdmlnYXRpb25Qcm9wZXJ0eShyYXdOYXZpZ2F0aW9uUHJvcGVydHkpKSB7XG4gICAgICAgIGNvbnZlcnRlZE5hdmlnYXRpb25Qcm9wZXJ0eS50YXJnZXRUeXBlTmFtZSA9IGNvbnZlcnRlci51bmFsaWFzKHJhd05hdmlnYXRpb25Qcm9wZXJ0eS50YXJnZXRUeXBlTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXNzb2NpYXRpb25FbmQgPSBjb252ZXJ0ZXIucmF3U2NoZW1hLmFzc29jaWF0aW9uc1xuICAgICAgICAgICAgLmZpbmQoKGFzc29jaWF0aW9uKSA9PiBhc3NvY2lhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgPT09IHJhd05hdmlnYXRpb25Qcm9wZXJ0eS5yZWxhdGlvbnNoaXApXG4gICAgICAgICAgICA/LmFzc29jaWF0aW9uRW5kLmZpbmQoKGVuZCkgPT4gZW5kLnJvbGUgPT09IHJhd05hdmlnYXRpb25Qcm9wZXJ0eS50b1JvbGUpO1xuXG4gICAgICAgIGNvbnZlcnRlZE5hdmlnYXRpb25Qcm9wZXJ0eS5pc0NvbGxlY3Rpb24gPSBhc3NvY2lhdGlvbkVuZD8ubXVsdGlwbGljaXR5ID09PSAnKic7XG4gICAgICAgIGNvbnZlcnRlZE5hdmlnYXRpb25Qcm9wZXJ0eS50YXJnZXRUeXBlTmFtZSA9IGFzc29jaWF0aW9uRW5kPy50eXBlID8/ICcnO1xuICAgIH1cblxuICAgIGxhenkoXG4gICAgICAgIGNvbnZlcnRlZE5hdmlnYXRpb25Qcm9wZXJ0eSxcbiAgICAgICAgJ3RhcmdldFR5cGUnLFxuICAgICAgICByZXNvbHZlRW50aXR5VHlwZShjb252ZXJ0ZXIsIChyYXdOYXZpZ2F0aW9uUHJvcGVydHkgYXMgTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlTmFtZSlcbiAgICApO1xuXG4gICAgbGF6eShjb252ZXJ0ZWROYXZpZ2F0aW9uUHJvcGVydHksICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9ucyhjb252ZXJ0ZXIsIHJhd05hdmlnYXRpb25Qcm9wZXJ0eSkpO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZE5hdmlnYXRpb25Qcm9wZXJ0eTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBBY3Rpb25JbXBvcnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd0FjdGlvbkltcG9ydCAgVW5jb252ZXJ0ZWQgQWN0aW9uSW1wb3J0XG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIEFjdGlvbkltcG9ydFxuICovXG5mdW5jdGlvbiBjb252ZXJ0QWN0aW9uSW1wb3J0KGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdBY3Rpb25JbXBvcnQ6IFJhd0FjdGlvbkltcG9ydCk6IEFjdGlvbkltcG9ydCB7XG4gICAgY29uc3QgY29udmVydGVkQWN0aW9uSW1wb3J0ID0gcmF3QWN0aW9uSW1wb3J0IGFzIEFjdGlvbkltcG9ydDtcblxuICAgIGNvbnZlcnRlZEFjdGlvbkltcG9ydC5hY3Rpb25OYW1lID0gY29udmVydGVyLnVuYWxpYXMocmF3QWN0aW9uSW1wb3J0LmFjdGlvbk5hbWUpO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRBY3Rpb25JbXBvcnQsICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9ucyhjb252ZXJ0ZXIsIHJhd0FjdGlvbkltcG9ydCkpO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRBY3Rpb25JbXBvcnQsICdhY3Rpb24nLCAoKSA9PiBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkQWN0aW9uKHJhd0FjdGlvbkltcG9ydC5hY3Rpb25OYW1lKSk7XG5cbiAgICByZXR1cm4gY29udmVydGVkQWN0aW9uSW1wb3J0O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyICAgQ29udmVydGVyXG4gKiBAcGFyYW0gcmF3QWN0aW9uICBVbmNvbnZlcnRlZCBBY3Rpb25cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgQWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRBY3Rpb24oY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd0FjdGlvbjogUmF3QWN0aW9uKTogQWN0aW9uIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRBY3Rpb24gPSByYXdBY3Rpb24gYXMgQWN0aW9uO1xuXG4gICAgY29udmVydGVkQWN0aW9uLnNvdXJjZVR5cGUgPSBjb252ZXJ0ZXIudW5hbGlhcyhyYXdBY3Rpb24uc291cmNlVHlwZSk7XG4gICAgaWYgKGNvbnZlcnRlZEFjdGlvbi5zb3VyY2VUeXBlKSB7XG4gICAgICAgIGxhenkoY29udmVydGVkQWN0aW9uLCAnc291cmNlRW50aXR5VHlwZScsIHJlc29sdmVFbnRpdHlUeXBlKGNvbnZlcnRlciwgcmF3QWN0aW9uLnNvdXJjZVR5cGUpKTtcbiAgICB9XG5cbiAgICBjb252ZXJ0ZWRBY3Rpb24ucmV0dXJuVHlwZSA9IGNvbnZlcnRlci51bmFsaWFzKHJhd0FjdGlvbi5yZXR1cm5UeXBlKTtcbiAgICBpZiAoY29udmVydGVkQWN0aW9uLnJldHVyblR5cGUpIHtcbiAgICAgICAgbGF6eShjb252ZXJ0ZWRBY3Rpb24sICdyZXR1cm5FbnRpdHlUeXBlJywgcmVzb2x2ZUVudGl0eVR5cGUoY29udmVydGVyLCByYXdBY3Rpb24ucmV0dXJuVHlwZSkpO1xuICAgIH1cblxuICAgIGxhenkoY29udmVydGVkQWN0aW9uLCAncGFyYW1ldGVycycsIGNvbnZlcnRlci5jb252ZXJ0KHJhd0FjdGlvbi5wYXJhbWV0ZXJzLCBjb252ZXJ0QWN0aW9uUGFyYW1ldGVyKSk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEFjdGlvbiwgJ2Fubm90YXRpb25zJywgKCkgPT4ge1xuICAgICAgICAvLyB0aGlzLmlzLnRoZS5hY3Rpb24ob24udGhpcy50eXBlKSAtLT4gYWN0aW9uOiAndGhpcy5pcy50aGUuYWN0aW9uJywgb3ZlcmxvYWQ6ICdvbi50aGlzLnR5cGUnXG4gICAgICAgIC8vIHRoaXMuaXMudGhlLmFjdGlvbigpICAgICAgICAgICAgIC0tPiBhY3Rpb246ICd0aGlzLmlzLnRoZS5hY3Rpb24nLCBvdmVybG9hZDogdW5kZWZpbmVkXG4gICAgICAgIC8vIHRoaXMuaXMudGhlLmFjdGlvbiAgICAgICAgICAgICAgIC0tPiBhY3Rpb246ICd0aGlzLmlzLnRoZS5hY3Rpb24nLCBvdmVybG9hZDogdW5kZWZpbmVkXG4gICAgICAgIGNvbnN0IGFjdGlvbkFuZE92ZXJsb2FkID0gcmF3QWN0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZS5tYXRjaCgvKD88YWN0aW9uPlteKCldKykoPzpcXCgoPzxvdmVybG9hZD4uKilcXCkpPy8pO1xuXG4gICAgICAgIGxldCByYXdBbm5vdGF0aW9uczogUmF3QW5ub3RhdGlvbltdID0gW107XG4gICAgICAgIGlmIChhY3Rpb25BbmRPdmVybG9hZCkge1xuICAgICAgICAgICAgaWYgKGFjdGlvbkFuZE92ZXJsb2FkLmdyb3Vwcz8ub3ZlcmxvYWQpIHtcbiAgICAgICAgICAgICAgICByYXdBbm5vdGF0aW9ucyA9IGNvbnZlcnRlci5yYXdBbm5vdGF0aW9uc1BlclRhcmdldFtyYXdBY3Rpb24uZnVsbHlRdWFsaWZpZWROYW1lXT8uYW5ub3RhdGlvbnMgPz8gW107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJhd0Fubm90YXRpb25zID1cbiAgICAgICAgICAgICAgICAgICAgY29udmVydGVyLnJhd0Fubm90YXRpb25zUGVyVGFyZ2V0W2Ake2FjdGlvbkFuZE92ZXJsb2FkLmdyb3Vwcz8uYWN0aW9ufSgpYF0/LmFubm90YXRpb25zID8/IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYWN0aW9uQW5kT3ZlcmxvYWQuZ3JvdXBzPy5hY3Rpb24gJiYgYWN0aW9uQW5kT3ZlcmxvYWQuZ3JvdXBzPy5hY3Rpb24gIT09IHJhd0FjdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlQW5ub3RhdGlvbnMgPVxuICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZXIucmF3QW5ub3RhdGlvbnNQZXJUYXJnZXRbYWN0aW9uQW5kT3ZlcmxvYWQuZ3JvdXBzPy5hY3Rpb25dPy5hbm5vdGF0aW9ucyA/PyBbXTtcbiAgICAgICAgICAgICAgICByYXdBbm5vdGF0aW9ucyA9IHJhd0Fubm90YXRpb25zLmNvbmNhdChiYXNlQW5ub3RhdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFubm90YXRpb25zT2JqZWN0KGNvbnZlcnRlciwgcmF3QWN0aW9uLCByYXdBbm5vdGF0aW9ucyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29udmVydGVkQWN0aW9uO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEFjdGlvblBhcmFtZXRlci5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyICAgQ29udmVydGVyXG4gKiBAcGFyYW0gcmF3QWN0aW9uUGFyYW1ldGVyICBVbmNvbnZlcnRlZCBBY3Rpb25QYXJhbWV0ZXJcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgQWN0aW9uUGFyYW1ldGVyXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRBY3Rpb25QYXJhbWV0ZXIoXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgcmF3QWN0aW9uUGFyYW1ldGVyOiBSYXdBY3Rpb25bJ3BhcmFtZXRlcnMnXVtudW1iZXJdXG4pOiBBY3Rpb25QYXJhbWV0ZXIge1xuICAgIGNvbnN0IGNvbnZlcnRlZEFjdGlvblBhcmFtZXRlciA9IHJhd0FjdGlvblBhcmFtZXRlciBhcyBBY3Rpb25QYXJhbWV0ZXI7XG5cbiAgICBsYXp5KFxuICAgICAgICBjb252ZXJ0ZWRBY3Rpb25QYXJhbWV0ZXIsXG4gICAgICAgICd0eXBlUmVmZXJlbmNlJyxcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICAgIGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRFbnRpdHlUeXBlKHJhd0FjdGlvblBhcmFtZXRlci50eXBlKSA/P1xuICAgICAgICAgICAgY29udmVydGVyLmdldENvbnZlcnRlZENvbXBsZXhUeXBlKHJhd0FjdGlvblBhcmFtZXRlci50eXBlKSA/P1xuICAgICAgICAgICAgY29udmVydGVyLmdldENvbnZlcnRlZFR5cGVEZWZpbml0aW9uKHJhd0FjdGlvblBhcmFtZXRlci50eXBlKVxuICAgICk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEFjdGlvblBhcmFtZXRlciwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlciwgcmF3QWN0aW9uUGFyYW1ldGVyKSk7XG5cbiAgICByZXR1cm4gY29udmVydGVkQWN0aW9uUGFyYW1ldGVyO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgQ29tcGxleFR5cGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd0NvbXBsZXhUeXBlICBVbmNvbnZlcnRlZCBDb21wbGV4VHlwZVxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBDb21wbGV4VHlwZVxuICovXG5mdW5jdGlvbiBjb252ZXJ0Q29tcGxleFR5cGUoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd0NvbXBsZXhUeXBlOiBSYXdDb21wbGV4VHlwZSk6IENvbXBsZXhUeXBlIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRDb21wbGV4VHlwZSA9IHJhd0NvbXBsZXhUeXBlIGFzIENvbXBsZXhUeXBlO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRDb21wbGV4VHlwZSwgJ3Byb3BlcnRpZXMnLCBjb252ZXJ0ZXIuY29udmVydChyYXdDb21wbGV4VHlwZS5wcm9wZXJ0aWVzLCBjb252ZXJ0UHJvcGVydHkpKTtcbiAgICBsYXp5KFxuICAgICAgICBjb252ZXJ0ZWRDb21wbGV4VHlwZSxcbiAgICAgICAgJ25hdmlnYXRpb25Qcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udmVydGVyLmNvbnZlcnQocmF3Q29tcGxleFR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMgYXMgYW55W10sIGNvbnZlcnROYXZpZ2F0aW9uUHJvcGVydHkpXG4gICAgKTtcbiAgICBsYXp5KGNvbnZlcnRlZENvbXBsZXhUeXBlLCAnYW5ub3RhdGlvbnMnLCByZXNvbHZlQW5ub3RhdGlvbnMoY29udmVydGVyLCByYXdDb21wbGV4VHlwZSkpO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZENvbXBsZXhUeXBlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgVHlwZURlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd1R5cGVEZWZpbml0aW9uICBVbmNvbnZlcnRlZCBUeXBlRGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBUeXBlRGVmaW5pdGlvblxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZURlZmluaXRpb24oY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd1R5cGVEZWZpbml0aW9uOiBSYXdUeXBlRGVmaW5pdGlvbik6IFR5cGVEZWZpbml0aW9uIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRUeXBlRGVmaW5pdGlvbiA9IHJhd1R5cGVEZWZpbml0aW9uIGFzIFR5cGVEZWZpbml0aW9uO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRUeXBlRGVmaW5pdGlvbiwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlciwgcmF3VHlwZURlZmluaXRpb24pKTtcblxuICAgIHJldHVybiBjb252ZXJ0ZWRUeXBlRGVmaW5pdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgUmF3TWV0YWRhdGEgaW50byBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gdG8gYmUgdXNlZCB0byBlYXNpbHkgbmF2aWdhdGUgYSBtZXRhZGF0YSBvYmplY3QgYW5kIGl0cyBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSByYXdNZXRhZGF0YVxuICogQHJldHVybnMgdGhlIGNvbnZlcnRlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0KHJhd01ldGFkYXRhOiBSYXdNZXRhZGF0YSk6IENvbnZlcnRlZE1ldGFkYXRhIHtcbiAgICAvLyBmYWxsIGJhY2sgb24gdGhlIGRlZmF1bHQgcmVmZXJlbmNlcyBpZiB0aGUgY2FsbGVyIGRvZXMgbm90IHNwZWNpZnkgYW55XG4gICAgaWYgKHJhd01ldGFkYXRhLnJlZmVyZW5jZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJhd01ldGFkYXRhLnJlZmVyZW5jZXMgPSBkZWZhdWx0UmVmZXJlbmNlcztcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0ZXIgT3V0cHV0XG4gICAgY29uc3QgY29udmVydGVkT3V0cHV0OiBDb252ZXJ0ZWRNZXRhZGF0YSA9IHtcbiAgICAgICAgdmVyc2lvbjogcmF3TWV0YWRhdGEudmVyc2lvbixcbiAgICAgICAgbmFtZXNwYWNlOiByYXdNZXRhZGF0YS5zY2hlbWEubmFtZXNwYWNlLFxuICAgICAgICBhbm5vdGF0aW9uczogcmF3TWV0YWRhdGEuc2NoZW1hLmFubm90YXRpb25zLFxuICAgICAgICByZWZlcmVuY2VzOiBkZWZhdWx0UmVmZXJlbmNlcy5jb25jYXQocmF3TWV0YWRhdGEucmVmZXJlbmNlcyksXG4gICAgICAgIGRpYWdub3N0aWNzOiBbXVxuICAgIH0gYXMgYW55O1xuXG4gICAgLy8gQ29udmVydGVyXG4gICAgY29uc3QgY29udmVydGVyID0gbmV3IENvbnZlcnRlcihyYXdNZXRhZGF0YSwgY29udmVydGVkT3V0cHV0KTtcblxuICAgIGxhenkoXG4gICAgICAgIGNvbnZlcnRlZE91dHB1dCxcbiAgICAgICAgJ2VudGl0eUNvbnRhaW5lcicsXG4gICAgICAgIGNvbnZlcnRlci5jb252ZXJ0KGNvbnZlcnRlci5yYXdTY2hlbWEuZW50aXR5Q29udGFpbmVyLCBjb252ZXJ0RW50aXR5Q29udGFpbmVyKVxuICAgICk7XG4gICAgbGF6eShjb252ZXJ0ZWRPdXRwdXQsICdlbnRpdHlTZXRzJywgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5lbnRpdHlTZXRzLCBjb252ZXJ0RW50aXR5U2V0KSk7XG4gICAgbGF6eShjb252ZXJ0ZWRPdXRwdXQsICdzaW5nbGV0b25zJywgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5zaW5nbGV0b25zLCBjb252ZXJ0U2luZ2xldG9uKSk7XG4gICAgbGF6eShjb252ZXJ0ZWRPdXRwdXQsICdlbnRpdHlUeXBlcycsIGNvbnZlcnRlci5jb252ZXJ0KGNvbnZlcnRlci5yYXdTY2hlbWEuZW50aXR5VHlwZXMsIGNvbnZlcnRFbnRpdHlUeXBlKSk7XG4gICAgbGF6eShjb252ZXJ0ZWRPdXRwdXQsICdhY3Rpb25zJywgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5hY3Rpb25zLCBjb252ZXJ0QWN0aW9uKSk7XG4gICAgbGF6eShjb252ZXJ0ZWRPdXRwdXQsICdjb21wbGV4VHlwZXMnLCBjb252ZXJ0ZXIuY29udmVydChjb252ZXJ0ZXIucmF3U2NoZW1hLmNvbXBsZXhUeXBlcywgY29udmVydENvbXBsZXhUeXBlKSk7XG4gICAgbGF6eShjb252ZXJ0ZWRPdXRwdXQsICdhY3Rpb25JbXBvcnRzJywgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5hY3Rpb25JbXBvcnRzLCBjb252ZXJ0QWN0aW9uSW1wb3J0KSk7XG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkT3V0cHV0LFxuICAgICAgICAndHlwZURlZmluaXRpb25zJyxcbiAgICAgICAgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS50eXBlRGVmaW5pdGlvbnMsIGNvbnZlcnRUeXBlRGVmaW5pdGlvbilcbiAgICApO1xuXG4gICAgY29udmVydGVkT3V0cHV0LnJlc29sdmVQYXRoID0gZnVuY3Rpb24gcmVzb2x2ZVBhdGg8VD4ocGF0aDogc3RyaW5nKTogUmVzb2x1dGlvblRhcmdldDxUPiB7XG4gICAgICAgIGNvbnN0IHRhcmdldFJlc29sdXRpb24gPSByZXNvbHZlVGFyZ2V0PFQ+KGNvbnZlcnRlciwgdW5kZWZpbmVkLCBwYXRoKTtcbiAgICAgICAgaWYgKHRhcmdldFJlc29sdXRpb24udGFyZ2V0KSB7XG4gICAgICAgICAgICBhcHBlbmRPYmplY3RQYXRoKHRhcmdldFJlc29sdXRpb24ub2JqZWN0UGF0aCwgdGFyZ2V0UmVzb2x1dGlvbi50YXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXRSZXNvbHV0aW9uO1xuICAgIH07XG5cbiAgICByZXR1cm4gY29udmVydGVkT3V0cHV0O1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9jb252ZXJ0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi93cml0ZWJhY2snO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscyc7XG4iLCJpbXBvcnQgdHlwZSB7IEluZGV4LCBDb21wbGV4VHlwZSwgUmVmZXJlbmNlLCBUeXBlRGVmaW5pdGlvbiwgQXJyYXlXaXRoSW5kZXggfSBmcm9tICdAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0UmVmZXJlbmNlczogUmVmZXJlbmNlc1dpdGhNYXAgPSBbXG4gICAgeyBhbGlhczogJ0NhcGFiaWxpdGllcycsIG5hbWVzcGFjZTogJ09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEnLCB1cmk6ICcnIH0sXG4gICAgeyBhbGlhczogJ0FnZ3JlZ2F0aW9uJywgbmFtZXNwYWNlOiAnT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxJywgdXJpOiAnJyB9LFxuICAgIHsgYWxpYXM6ICdWYWxpZGF0aW9uJywgbmFtZXNwYWNlOiAnT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEnLCB1cmk6ICcnIH0sXG4gICAgeyBuYW1lc3BhY2U6ICdPcmcuT0RhdGEuQ29yZS5WMScsIGFsaWFzOiAnQ29yZScsIHVyaTogJycgfSxcbiAgICB7IG5hbWVzcGFjZTogJ09yZy5PRGF0YS5NZWFzdXJlcy5WMScsIGFsaWFzOiAnTWVhc3VyZXMnLCB1cmk6ICcnIH0sXG4gICAgeyBuYW1lc3BhY2U6ICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEnLCBhbGlhczogJ0NvbW1vbicsIHVyaTogJycgfSxcbiAgICB7IG5hbWVzcGFjZTogJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxJywgYWxpYXM6ICdVSScsIHVyaTogJycgfSxcbiAgICB7IG5hbWVzcGFjZTogJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEnLCBhbGlhczogJ1Nlc3Npb24nLCB1cmk6ICcnIH0sXG4gICAgeyBuYW1lc3BhY2U6ICdjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEnLCBhbGlhczogJ0FuYWx5dGljcycsIHVyaTogJycgfSxcbiAgICB7IG5hbWVzcGFjZTogJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxJywgYWxpYXM6ICdDb2RlTGlzdCcsIHVyaTogJycgfSxcbiAgICB7IG5hbWVzcGFjZTogJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MScsIGFsaWFzOiAnUGVyc29uYWxEYXRhJywgdXJpOiAnJyB9LFxuICAgIHsgbmFtZXNwYWNlOiAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MScsIGFsaWFzOiAnQ29tbXVuaWNhdGlvbicsIHVyaTogJycgfSxcbiAgICB7IG5hbWVzcGFjZTogJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkhUTUw1LnYxJywgYWxpYXM6ICdIVE1MNScsIHVyaTogJycgfVxuXTtcblxuZXhwb3J0IHR5cGUgUmVmZXJlbmNlc1dpdGhNYXAgPSBSZWZlcmVuY2VbXSAmIHtcbiAgICByZWZlcmVuY2VNYXA/OiBSZWNvcmQ8c3RyaW5nLCBSZWZlcmVuY2U+O1xuICAgIHJldmVyc2VSZWZlcmVuY2VNYXA/OiBSZWNvcmQ8c3RyaW5nLCBSZWZlcmVuY2U+O1xufTtcblxuZnVuY3Rpb24gc3BsaXRBdChzdHJpbmc6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IFtzdHJpbmcsIHN0cmluZ10ge1xuICAgIHJldHVybiBpbmRleCA8IDAgPyBbc3RyaW5nLCAnJ10gOiBbc3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCksIHN0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxKV07XG59XG5cbmZ1bmN0aW9uIHN1YnN0cmluZ0F0KHN0cmluZzogc3RyaW5nLCBpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGluZGV4IDwgMCA/IHN0cmluZyA6IHN0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpO1xufVxuXG4vKipcbiAqIFNwbGl0cyBhIHN0cmluZyBhdCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHNlcGFyYXRvci5cbiAqXG4gKiBAcGFyYW0gc3RyaW5nICAgIFRoZSBzdHJpbmcgdG8gc3BsaXRcbiAqIEBwYXJhbSBzZXBhcmF0b3IgU2VwYXJhdG9yLCBlLmcuIGEgc2luZ2xlIGNoYXJhY3Rlci5cbiAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnNpc3Rpbmcgb2YgdHdvIGVsZW1lbnRzOiB0aGUgcGFydCBiZWZvcmUgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIHNlcGFyYXRvciBhbmQgdGhlIHBhcnQgYWZ0ZXIgaXQuIElmIHRoZSBzdHJpbmcgZG9lcyBub3QgY29udGFpbiB0aGUgc2VwYXJhdG9yLCB0aGUgc2Vjb25kIGVsZW1lbnQgaXMgdGhlIGVtcHR5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0QXRGaXJzdChzdHJpbmc6IHN0cmluZywgc2VwYXJhdG9yOiBzdHJpbmcpOiBbc3RyaW5nLCBzdHJpbmddIHtcbiAgICByZXR1cm4gc3BsaXRBdChzdHJpbmcsIHN0cmluZy5pbmRleE9mKHNlcGFyYXRvcikpO1xufVxuXG4vKipcbiAqIFNwbGl0cyBhIHN0cmluZyBhdCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIGEgc2VwYXJhdG9yLlxuICpcbiAqIEBwYXJhbSBzdHJpbmcgICAgVGhlIHN0cmluZyB0byBzcGxpdFxuICogQHBhcmFtIHNlcGFyYXRvciBTZXBhcmF0b3IsIGUuZy4gYSBzaW5nbGUgY2hhcmFjdGVyLlxuICogQHJldHVybnMgQW4gYXJyYXkgY29uc2lzdGluZyBvZiB0d28gZWxlbWVudHM6IHRoZSBwYXJ0IGJlZm9yZSB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIHRoZSBzZXBhcmF0b3IgYW5kIHRoZSBwYXJ0IGFmdGVyIGl0LiBJZiB0aGUgc3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gdGhlIHNlcGFyYXRvciwgdGhlIHNlY29uZCBlbGVtZW50IGlzIHRoZSBlbXB0eSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdEF0TGFzdChzdHJpbmc6IHN0cmluZywgc2VwYXJhdG9yOiBzdHJpbmcpOiBbc3RyaW5nLCBzdHJpbmddIHtcbiAgICByZXR1cm4gc3BsaXRBdChzdHJpbmcsIHN0cmluZy5sYXN0SW5kZXhPZihzZXBhcmF0b3IpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzdWJzdHJpbmcgYmVmb3JlIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc2VwYXJhdG9yLlxuICpcbiAqIEBwYXJhbSBzdHJpbmcgICAgVGhlIHN0cmluZ1xuICogQHBhcmFtIHNlcGFyYXRvciBTZXBhcmF0b3IsIGUuZy4gYSBzaW5nbGUgY2hhcmFjdGVyLlxuICogQHJldHVybnMgVGhlIHN1YnN0cmluZyBiZWZvcmUgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIHNlcGFyYXRvciwgb3IgdGhlIGlucHV0IHN0cmluZyBpZiBpdCBkb2VzIG5vdCBjb250YWluIHRoZSBzZXBhcmF0b3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJpbmdCZWZvcmVGaXJzdChzdHJpbmc6IHN0cmluZywgc2VwYXJhdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdWJzdHJpbmdBdChzdHJpbmcsIHN0cmluZy5pbmRleE9mKHNlcGFyYXRvcikpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHN1YnN0cmluZyBiZWZvcmUgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhIHNlcGFyYXRvci5cbiAqXG4gKiBAcGFyYW0gc3RyaW5nICAgIFRoZSBzdHJpbmdcbiAqIEBwYXJhbSBzZXBhcmF0b3IgU2VwYXJhdG9yLCBlLmcuIGEgc2luZ2xlIGNoYXJhY3Rlci5cbiAqIEByZXR1cm5zIFRoZSBzdWJzdHJpbmcgYmVmb3JlIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIHNlcGFyYXRvciwgb3IgdGhlIGlucHV0IHN0cmluZyBpZiBpdCBkb2VzIG5vdCBjb250YWluIHRoZSBzZXBhcmF0b3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJpbmdCZWZvcmVMYXN0KHN0cmluZzogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1YnN0cmluZ0F0KHN0cmluZywgc3RyaW5nLmxhc3RJbmRleE9mKHNlcGFyYXRvcikpO1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBhbiB1bmFsaWFzZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFubm90YXRpb24gdG8gdGhlIGFsaWFzZWQgdmVyc2lvbi5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyBjdXJyZW50UmVmZXJlbmNlcyBmb3IgdGhlIHByb2plY3RcbiAqIEBwYXJhbSB1bmFsaWFzZWRWYWx1ZSB0aGUgdW5hbGlhc2VkIHZhbHVlXG4gKiBAcmV0dXJucyB0aGUgYWxpYXNlZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzYW1lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGlhcyhyZWZlcmVuY2VzOiBSZWZlcmVuY2VzV2l0aE1hcCwgdW5hbGlhc2VkVmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFyZWZlcmVuY2VzLnJldmVyc2VSZWZlcmVuY2VNYXApIHtcbiAgICAgICAgcmVmZXJlbmNlcy5yZXZlcnNlUmVmZXJlbmNlTWFwID0gcmVmZXJlbmNlcy5yZWR1Y2UoKG1hcDogUmVjb3JkPHN0cmluZywgUmVmZXJlbmNlPiwgcmVmKSA9PiB7XG4gICAgICAgICAgICBtYXBbcmVmLm5hbWVzcGFjZV0gPSByZWY7XG4gICAgICAgICAgICByZXR1cm4gbWFwO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuICAgIGlmICghdW5hbGlhc2VkVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHVuYWxpYXNlZFZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBbbmFtZXNwYWNlLCB2YWx1ZV0gPSBzcGxpdEF0TGFzdCh1bmFsaWFzZWRWYWx1ZSwgJy4nKTtcbiAgICBjb25zdCByZWZlcmVuY2UgPSByZWZlcmVuY2VzLnJldmVyc2VSZWZlcmVuY2VNYXBbbmFtZXNwYWNlXTtcbiAgICBpZiAocmVmZXJlbmNlKSB7XG4gICAgICAgIHJldHVybiBgJHtyZWZlcmVuY2UuYWxpYXN9LiR7dmFsdWV9YDtcbiAgICB9IGVsc2UgaWYgKHVuYWxpYXNlZFZhbHVlLmluY2x1ZGVzKCdAJykpIHtcbiAgICAgICAgLy8gVHJ5IHRvIHNlZSBpZiBpdCdzIGFuIGFubm90YXRpb24gUGF0aCBsaWtlIHRvX1NhbGVzT3JkZXIvQFVJLkxpbmVJdGVtXG4gICAgICAgIGNvbnN0IFtwcmVBbGlhcywgcG9zdEFsaWFzXSA9IHNwbGl0QXRGaXJzdCh1bmFsaWFzZWRWYWx1ZSwgJ0AnKTtcbiAgICAgICAgcmV0dXJuIGAke3ByZUFsaWFzfUAke2FsaWFzKHJlZmVyZW5jZXMsIHBvc3RBbGlhcyl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5hbGlhc2VkVmFsdWU7XG4gICAgfVxufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBhbiBhbGlhc2VkIHN0cmluZyByZXByZXNlbnRhdGlvbiBhbm5vdGF0aW9uIHRvIHRoZSB1bmFsaWFzZWQgdmVyc2lvbi5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyBjdXJyZW50UmVmZXJlbmNlcyBmb3IgdGhlIHByb2plY3RcbiAqIEBwYXJhbSBhbGlhc2VkVmFsdWUgdGhlIGFsaWFzZWQgdmFsdWVcbiAqIEByZXR1cm5zIHRoZSB1bmFsaWFzZWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgc2FtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5hbGlhcyhyZWZlcmVuY2VzOiBSZWZlcmVuY2VzV2l0aE1hcCwgYWxpYXNlZFZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghcmVmZXJlbmNlcy5yZWZlcmVuY2VNYXApIHtcbiAgICAgICAgcmVmZXJlbmNlcy5yZWZlcmVuY2VNYXAgPSByZWZlcmVuY2VzLnJlZHVjZSgobWFwOiBSZWNvcmQ8c3RyaW5nLCBSZWZlcmVuY2U+LCByZWYpID0+IHtcbiAgICAgICAgICAgIG1hcFtyZWYuYWxpYXNdID0gcmVmO1xuICAgICAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgICAgfSwge30pO1xuICAgIH1cbiAgICBpZiAoIWFsaWFzZWRWYWx1ZSkge1xuICAgICAgICByZXR1cm4gYWxpYXNlZFZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBbdm9jQWxpYXMsIHZhbHVlXSA9IHNwbGl0QXRGaXJzdChhbGlhc2VkVmFsdWUsICcuJyk7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5yZWZlcmVuY2VNYXBbdm9jQWxpYXNdO1xuICAgIGlmIChyZWZlcmVuY2UpIHtcbiAgICAgICAgcmV0dXJuIGAke3JlZmVyZW5jZS5uYW1lc3BhY2V9LiR7dmFsdWV9YDtcbiAgICB9IGVsc2UgaWYgKGFsaWFzZWRWYWx1ZS5pbmNsdWRlcygnQCcpKSB7XG4gICAgICAgIC8vIFRyeSB0byBzZWUgaWYgaXQncyBhbiBhbm5vdGF0aW9uIFBhdGggbGlrZSB0b19TYWxlc09yZGVyL0BVSS5MaW5lSXRlbVxuICAgICAgICBjb25zdCBbcHJlQWxpYXMsIHBvc3RBbGlhc10gPSBzcGxpdEF0Rmlyc3QoYWxpYXNlZFZhbHVlLCAnQCcpO1xuICAgICAgICByZXR1cm4gYCR7cHJlQWxpYXN9QCR7dW5hbGlhcyhyZWZlcmVuY2VzLCBwb3N0QWxpYXMpfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFsaWFzZWRWYWx1ZTtcbiAgICB9XG59XG5leHBvcnQgY29uc3QgRW51bUlzRmxhZzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7XG4gICAgJ0F1dGguS2V5TG9jYXRpb24nOiBmYWxzZSxcbiAgICAnQ29yZS5SZXZpc2lvbktpbmQnOiBmYWxzZSxcbiAgICAnQ29yZS5EYXRhTW9kaWZpY2F0aW9uT3BlcmF0aW9uS2luZCc6IGZhbHNlLFxuICAgICdDb3JlLlBlcm1pc3Npb24nOiB0cnVlLFxuICAgICdDYXBhYmlsaXRpZXMuQ29uZm9ybWFuY2VMZXZlbFR5cGUnOiBmYWxzZSxcbiAgICAnQ2FwYWJpbGl0aWVzLklzb2xhdGlvbkxldmVsJzogdHJ1ZSxcbiAgICAnQ2FwYWJpbGl0aWVzLk5hdmlnYXRpb25UeXBlJzogZmFsc2UsXG4gICAgJ0NhcGFiaWxpdGllcy5TZWFyY2hFeHByZXNzaW9ucyc6IHRydWUsXG4gICAgJ0NhcGFiaWxpdGllcy5IdHRwTWV0aG9kJzogdHJ1ZSxcbiAgICAnQWdncmVnYXRpb24uUm9sbHVwVHlwZSc6IGZhbHNlLFxuICAgICdDb21tb24uVGV4dEZvcm1hdFR5cGUnOiBmYWxzZSxcbiAgICAnQ29tbW9uLkZpbHRlckV4cHJlc3Npb25UeXBlJzogZmFsc2UsXG4gICAgJ0NvbW1vbi5GaWVsZENvbnRyb2xUeXBlJzogZmFsc2UsXG4gICAgJ0NvbW1vbi5FZmZlY3RUeXBlJzogdHJ1ZSxcbiAgICAnQ29tbXVuaWNhdGlvbi5LaW5kVHlwZSc6IGZhbHNlLFxuICAgICdDb21tdW5pY2F0aW9uLkNvbnRhY3RJbmZvcm1hdGlvblR5cGUnOiB0cnVlLFxuICAgICdDb21tdW5pY2F0aW9uLlBob25lVHlwZSc6IHRydWUsXG4gICAgJ0NvbW11bmljYXRpb24uR2VuZGVyVHlwZSc6IGZhbHNlLFxuICAgICdVSS5WaXN1YWxpemF0aW9uVHlwZSc6IGZhbHNlLFxuICAgICdVSS5Dcml0aWNhbGl0eVR5cGUnOiBmYWxzZSxcbiAgICAnVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlJzogZmFsc2UsXG4gICAgJ1VJLlRyZW5kVHlwZSc6IGZhbHNlLFxuICAgICdVSS5DaGFydFR5cGUnOiBmYWxzZSxcbiAgICAnVUkuQ2hhcnRBeGlzU2NhbGVCZWhhdmlvclR5cGUnOiBmYWxzZSxcbiAgICAnVUkuQ2hhcnRBeGlzQXV0b1NjYWxlRGF0YVNjb3BlVHlwZSc6IGZhbHNlLFxuICAgICdVSS5DaGFydERpbWVuc2lvblJvbGVUeXBlJzogZmFsc2UsXG4gICAgJ1VJLkNoYXJ0TWVhc3VyZVJvbGVUeXBlJzogZmFsc2UsXG4gICAgJ1VJLlNlbGVjdGlvblJhbmdlU2lnblR5cGUnOiBmYWxzZSxcbiAgICAnVUkuU2VsZWN0aW9uUmFuZ2VPcHRpb25UeXBlJzogZmFsc2UsXG4gICAgJ1VJLlRleHRBcnJhbmdlbWVudFR5cGUnOiBmYWxzZSxcbiAgICAnVUkuSW1wb3J0YW5jZVR5cGUnOiBmYWxzZSxcbiAgICAnVUkuQ3JpdGljYWxpdHlSZXByZXNlbnRhdGlvblR5cGUnOiBmYWxzZSxcbiAgICAnVUkuT3BlcmF0aW9uR3JvdXBpbmdUeXBlJzogZmFsc2Vcbn07XG5leHBvcnQgZW51bSBUZXJtVG9UeXBlcyB7XG4gICAgJ09yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxLlNlY3VyaXR5U2NoZW1lcycgPSAnT3JnLk9EYXRhLkF1dGhvcml6YXRpb24uVjEuU2VjdXJpdHlTY2hlbWUnLFxuICAgICdPcmcuT0RhdGEuQXV0aG9yaXphdGlvbi5WMS5BdXRob3JpemF0aW9ucycgPSAnT3JnLk9EYXRhLkF1dGhvcml6YXRpb24uVjEuQXV0aG9yaXphdGlvbicsXG4gICAgJ09yZy5PRGF0YS5Db3JlLlYxLlJldmlzaW9ucycgPSAnT3JnLk9EYXRhLkNvcmUuVjEuUmV2aXNpb25UeXBlJyxcbiAgICAnT3JnLk9EYXRhLkNvcmUuVjEuTGlua3MnID0gJ09yZy5PRGF0YS5Db3JlLlYxLkxpbmsnLFxuICAgICdPcmcuT0RhdGEuQ29yZS5WMS5FeGFtcGxlJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5FeGFtcGxlVmFsdWUnLFxuICAgICdPcmcuT0RhdGEuQ29yZS5WMS5NZXNzYWdlcycgPSAnT3JnLk9EYXRhLkNvcmUuVjEuTWVzc2FnZVR5cGUnLFxuICAgICdPcmcuT0RhdGEuQ29yZS5WMS5WYWx1ZUV4Y2VwdGlvbicgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVmFsdWVFeGNlcHRpb25UeXBlJyxcbiAgICAnT3JnLk9EYXRhLkNvcmUuVjEuUmVzb3VyY2VFeGNlcHRpb24nID0gJ09yZy5PRGF0YS5Db3JlLlYxLlJlc291cmNlRXhjZXB0aW9uVHlwZScsXG4gICAgJ09yZy5PRGF0YS5Db3JlLlYxLkRhdGFNb2RpZmljYXRpb25FeGNlcHRpb24nID0gJ09yZy5PRGF0YS5Db3JlLlYxLkRhdGFNb2RpZmljYXRpb25FeGNlcHRpb25UeXBlJyxcbiAgICAnT3JnLk9EYXRhLkNvcmUuVjEuSXNMYW5ndWFnZURlcGVuZGVudCcgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnT3JnLk9EYXRhLkNvcmUuVjEuQXBwbGllc1ZpYUNvbnRhaW5lcicgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnT3JnLk9EYXRhLkNvcmUuVjEuRGVyZWZlcmVuY2VhYmxlSURzJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdPcmcuT0RhdGEuQ29yZS5WMS5Db252ZW50aW9uYWxJRHMnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ09yZy5PRGF0YS5Db3JlLlYxLlBlcm1pc3Npb25zJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5QZXJtaXNzaW9uJyxcbiAgICAnT3JnLk9EYXRhLkNvcmUuVjEuRGVmYXVsdE5hbWVzcGFjZScgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnT3JnLk9EYXRhLkNvcmUuVjEuSW1tdXRhYmxlJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZCcgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWREZWZhdWx0VmFsdWUnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ09yZy5PRGF0YS5Db3JlLlYxLklzVVJMJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdPcmcuT0RhdGEuQ29yZS5WMS5Jc01lZGlhVHlwZScgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnT3JnLk9EYXRhLkNvcmUuVjEuQ29udGVudERpc3Bvc2l0aW9uJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5Db250ZW50RGlzcG9zaXRpb25UeXBlJyxcbiAgICAnT3JnLk9EYXRhLkNvcmUuVjEuT3B0aW1pc3RpY0NvbmN1cnJlbmN5JyA9ICdFZG0uUHJvcGVydHlQYXRoJyxcbiAgICAnT3JnLk9EYXRhLkNvcmUuVjEuQWRkaXRpb25hbFByb3BlcnRpZXMnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ09yZy5PRGF0YS5Db3JlLlYxLkF1dG9FeHBhbmQnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ09yZy5PRGF0YS5Db3JlLlYxLkF1dG9FeHBhbmRSZWZlcmVuY2VzJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdPcmcuT0RhdGEuQ29yZS5WMS5NYXlJbXBsZW1lbnQnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlF1YWxpZmllZFR5cGVOYW1lJyxcbiAgICAnT3JnLk9EYXRhLkNvcmUuVjEuT3JkZXJlZCcgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnT3JnLk9EYXRhLkNvcmUuVjEuUG9zaXRpb25hbEluc2VydCcgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnT3JnLk9EYXRhLkNvcmUuVjEuQWx0ZXJuYXRlS2V5cycgPSAnT3JnLk9EYXRhLkNvcmUuVjEuQWx0ZXJuYXRlS2V5JyxcbiAgICAnT3JnLk9EYXRhLkNvcmUuVjEuT3B0aW9uYWxQYXJhbWV0ZXInID0gJ09yZy5PRGF0YS5Db3JlLlYxLk9wdGlvbmFsUGFyYW1ldGVyVHlwZScsXG4gICAgJ09yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZScgPSAnRWRtLkJvb2xlYW4nLFxuICAgICdPcmcuT0RhdGEuQ29yZS5WMS5TeW1ib2xpY05hbWUnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlNpbXBsZUlkZW50aWZpZXInLFxuICAgICdPcmcuT0RhdGEuQ29yZS5WMS5HZW9tZXRyeUZlYXR1cmUnID0gJ09yZy5PRGF0YS5Db3JlLlYxLkdlb21ldHJ5RmVhdHVyZVR5cGUnLFxuICAgICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbmZvcm1hbmNlTGV2ZWwnID0gJ09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ29uZm9ybWFuY2VMZXZlbFR5cGUnLFxuICAgICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkFzeW5jaHJvbm91c1JlcXVlc3RzU3VwcG9ydGVkJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkJhdGNoQ29udGludWVPbkVycm9yU3VwcG9ydGVkJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLklzb2xhdGlvblN1cHBvcnRlZCcgPSAnT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Jc29sYXRpb25MZXZlbCcsXG4gICAgJ09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ3Jvc3NKb2luU3VwcG9ydGVkJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNhbGxiYWNrU3VwcG9ydGVkJyA9ICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNhbGxiYWNrVHlwZScsXG4gICAgJ09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ2hhbmdlVHJhY2tpbmcnID0gJ09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ2hhbmdlVHJhY2tpbmdUeXBlJyxcbiAgICAnT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Db3VudFJlc3RyaWN0aW9ucycgPSAnT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Db3VudFJlc3RyaWN0aW9uc1R5cGUnLFxuICAgICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk5hdmlnYXRpb25SZXN0cmljdGlvbnMnID0gJ09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuTmF2aWdhdGlvblJlc3RyaWN0aW9uc1R5cGUnLFxuICAgICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkluZGV4YWJsZUJ5S2V5JyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlRvcFN1cHBvcnRlZCcgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Ta2lwU3VwcG9ydGVkJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbXB1dGVTdXBwb3J0ZWQnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU2VsZWN0U3VwcG9ydCcgPSAnT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWxlY3RTdXBwb3J0VHlwZScsXG4gICAgJ09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQmF0Y2hTdXBwb3J0ZWQnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQmF0Y2hTdXBwb3J0JyA9ICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkJhdGNoU3VwcG9ydFR5cGUnLFxuICAgICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9ucycgPSAnT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNUeXBlJyxcbiAgICAnT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Tb3J0UmVzdHJpY3Rpb25zJyA9ICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNvcnRSZXN0cmljdGlvbnNUeXBlJyxcbiAgICAnT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5FeHBhbmRSZXN0cmljdGlvbnMnID0gJ09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRXhwYW5kUmVzdHJpY3Rpb25zVHlwZScsXG4gICAgJ09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU2VhcmNoUmVzdHJpY3Rpb25zJyA9ICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNlYXJjaFJlc3RyaWN0aW9uc1R5cGUnLFxuICAgICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLktleUFzU2VnbWVudFN1cHBvcnRlZCcgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5RdWVyeVNlZ21lbnRTdXBwb3J0ZWQnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSW5zZXJ0UmVzdHJpY3Rpb25zJyA9ICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkluc2VydFJlc3RyaWN0aW9uc1R5cGUnLFxuICAgICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlZXBJbnNlcnRTdXBwb3J0JyA9ICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlZXBJbnNlcnRTdXBwb3J0VHlwZScsXG4gICAgJ09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuVXBkYXRlUmVzdHJpY3Rpb25zJyA9ICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlVwZGF0ZVJlc3RyaWN0aW9uc1R5cGUnLFxuICAgICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlZXBVcGRhdGVTdXBwb3J0JyA9ICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlZXBVcGRhdGVTdXBwb3J0VHlwZScsXG4gICAgJ09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVsZXRlUmVzdHJpY3Rpb25zJyA9ICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlbGV0ZVJlc3RyaWN0aW9uc1R5cGUnLFxuICAgICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbGxlY3Rpb25Qcm9wZXJ0eVJlc3RyaWN0aW9ucycgPSAnT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Db2xsZWN0aW9uUHJvcGVydHlSZXN0cmljdGlvbnNUeXBlJyxcbiAgICAnT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5PcGVyYXRpb25SZXN0cmljdGlvbnMnID0gJ09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuT3BlcmF0aW9uUmVzdHJpY3Rpb25zVHlwZScsXG4gICAgJ09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQW5ub3RhdGlvblZhbHVlc0luUXVlcnlTdXBwb3J0ZWQnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuTW9kaWZpY2F0aW9uUXVlcnlPcHRpb25zJyA9ICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk1vZGlmaWNhdGlvblF1ZXJ5T3B0aW9uc1R5cGUnLFxuICAgICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlJlYWRSZXN0cmljdGlvbnMnID0gJ09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuUmVhZFJlc3RyaWN0aW9uc1R5cGUnLFxuICAgICdPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkN1c3RvbUhlYWRlcnMnID0gJ09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ3VzdG9tUGFyYW1ldGVyJyxcbiAgICAnT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DdXN0b21RdWVyeU9wdGlvbnMnID0gJ09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ3VzdG9tUGFyYW1ldGVyJyxcbiAgICAnT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5NZWRpYUxvY2F0aW9uVXBkYXRlU3VwcG9ydGVkJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWQnID0gJ09yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BcHBseVN1cHBvcnRlZFR5cGUnLFxuICAgICdPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWREZWZhdWx0cycgPSAnT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFwcGx5U3VwcG9ydGVkQmFzZScsXG4gICAgJ09yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5Hcm91cGFibGUnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ09yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BZ2dyZWdhdGFibGUnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ09yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5Db250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzJyA9ICdFZG0uUHJvcGVydHlQYXRoJyxcbiAgICAnT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkxldmVsZWRIaWVyYXJjaHknID0gJ0VkbS5Qcm9wZXJ0eVBhdGgnLFxuICAgICdPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuUmVjdXJzaXZlSGllcmFyY2h5JyA9ICdPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuUmVjdXJzaXZlSGllcmFyY2h5VHlwZScsXG4gICAgJ09yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BdmFpbGFibGVPbkFnZ3JlZ2F0ZXMnID0gJ09yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BdmFpbGFibGVPbkFnZ3JlZ2F0ZXNUeXBlJyxcbiAgICAnT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bScgPSAnRWRtLlByaW1pdGl2ZVR5cGUnLFxuICAgICdPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtJyA9ICdFZG0uUHJpbWl0aXZlVHlwZScsXG4gICAgJ09yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkV4Y2x1c2l2ZScgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuQWxsb3dlZFZhbHVlcycgPSAnT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuQWxsb3dlZFZhbHVlJyxcbiAgICAnT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTXVsdGlwbGVPZicgPSAnRWRtLkRlY2ltYWwnLFxuICAgICdPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5Db25zdHJhaW50JyA9ICdPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5Db25zdHJhaW50VHlwZScsXG4gICAgJ09yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkl0ZW1zT2YnID0gJ09yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkl0ZW1zT2ZUeXBlJyxcbiAgICAnT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuT3BlblByb3BlcnR5VHlwZUNvbnN0cmFpbnQnID0gJ09yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLlNpbmdsZU9yQ29sbGVjdGlvblR5cGUnLFxuICAgICdPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5EZXJpdmVkVHlwZUNvbnN0cmFpbnQnID0gJ09yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLlNpbmdsZU9yQ29sbGVjdGlvblR5cGUnLFxuICAgICdPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5BbGxvd2VkVGVybXMnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlF1YWxpZmllZFRlcm1OYW1lJyxcbiAgICAnT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuQXBwbGljYWJsZVRlcm1zJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5RdWFsaWZpZWRUZXJtTmFtZScsXG4gICAgJ09yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heEl0ZW1zJyA9ICdFZG0uSW50NjQnLFxuICAgICdPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5JdGVtcycgPSAnRWRtLkludDY0JyxcbiAgICAnT3JnLk9EYXRhLk1lYXN1cmVzLlYxLlNjYWxlJyA9ICdFZG0uQnl0ZScsXG4gICAgJ09yZy5PRGF0YS5NZWFzdXJlcy5WMS5EdXJhdGlvbkdyYW51bGFyaXR5JyA9ICdPcmcuT0RhdGEuTWVhc3VyZXMuVjEuRHVyYXRpb25HcmFudWxhcml0eVR5cGUnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuRGltZW5zaW9uJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuTWVhc3VyZScgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFjY3VtdWxhdGl2ZU1lYXN1cmUnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5Sb2xsZWRVcFByb3BlcnR5Q291bnQnID0gJ0VkbS5JbnQxNicsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5QbGFubmluZ0FjdGlvbicgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzJyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQWdncmVnYXRlZFByb3BlcnR5VHlwZScsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5BZ2dyZWdhdGVkUHJvcGVydHknID0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5BZ2dyZWdhdGVkUHJvcGVydHlUeXBlJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFuYWx5dGljYWxDb250ZXh0JyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQW5hbHl0aWNhbENvbnRleHRUeXBlJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlcnZpY2VWZXJzaW9uJyA9ICdFZG0uSW50MzInLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VydmljZVNjaGVtYVZlcnNpb24nID0gJ0VkbS5JbnQzMicsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0Rm9yJyA9ICdFZG0uUHJvcGVydHlQYXRoJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzTGFuZ3VhZ2VJZGVudGlmaWVyJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEZvcm1hdCcgPSAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRGb3JtYXRUeXBlJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZScgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzVXBwZXJDYXNlJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDdXJyZW5jeScgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzVW5pdCcgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlVuaXRTcGVjaWZpY1NjYWxlJyA9ICdFZG0uUHJpbWl0aXZlVHlwZScsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Vbml0U3BlY2lmaWNQcmVjaXNpb24nID0gJ0VkbS5QcmltaXRpdmVUeXBlJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlY29uZGFyeUtleScgPSAnRWRtLlByb3BlcnR5UGF0aCcsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NaW5PY2N1cnMnID0gJ0VkbS5JbnQ2NCcsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NYXhPY2N1cnMnID0gJ0VkbS5JbnQ2NCcsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Bc3NvY2lhdGlvbkVudGl0eScgPSAnRWRtLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRGVyaXZlZE5hdmlnYXRpb24nID0gJ0VkbS5OYXZpZ2F0aW9uUHJvcGVydHlQYXRoJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1hc2tlZCcgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJldmVhbE9uRGVtYW5kJyA9ICdFZG0uQm9vbGVhbicsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdE1hcHBpbmcnID0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzSW5zdGFuY2VBbm5vdGF0aW9uJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucycgPSAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvblR5cGUnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sJyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZScsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5BcHBsaWNhdGlvbicgPSAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkFwcGxpY2F0aW9uVHlwZScsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UaW1lc3RhbXAnID0gJ0VkbS5EYXRlVGltZU9mZnNldCcsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5FcnJvclJlc29sdXRpb24nID0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5FcnJvclJlc29sdXRpb25UeXBlJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1lc3NhZ2VzJyA9ICdFZG0uQ29tcGxleFR5cGUnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEubnVtZXJpY1NldmVyaXR5JyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTnVtZXJpY01lc3NhZ2VTZXZlcml0eVR5cGUnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWF4aW11bU51bWVyaWNNZXNzYWdlU2V2ZXJpdHknID0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5OdW1lcmljTWVzc2FnZVNldmVyaXR5VHlwZScsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0FjdGlvbkNyaXRpY2FsJyA9ICdFZG0uQm9vbGVhbicsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5BdHRyaWJ1dGVzJyA9ICdFZG0uUHJvcGVydHlQYXRoJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlbGF0ZWRSZWN1cnNpdmVIaWVyYXJjaHknID0gJ0VkbS5Bbm5vdGF0aW9uUGF0aCcsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5JbnRlcnZhbCcgPSAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkludGVydmFsVHlwZScsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0JyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU0FQT2JqZWN0Tm9kZVR5cGUnID0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TQVBPYmplY3ROb2RlVHlwZVR5cGUnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQ29tcG9zaXRpb24nID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc05hdHVyYWxQZXJzb24nID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3QnID0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RUeXBlJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVycycgPSAnT3JnLk9EYXRhLkNvcmUuVjEuU2ltcGxlSWRlbnRpZmllcicsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RNYXBwaW5nJyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0TWFwcGluZ1R5cGUnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclllYXInID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFySGFsZnllYXInID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyUXVhcnRlcicgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJNb250aCcgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJXZWVrJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEYXlPZkNhbGVuZGFyTW9udGgnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RheU9mQ2FsZW5kYXJZZWFyJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclllYXJIYWxmeWVhcicgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJZZWFyUXVhcnRlcicgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJZZWFyTW9udGgnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyWWVhcldlZWsnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyRGF0ZScgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsWWVhcicgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsUGVyaW9kJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxZZWFyUGVyaW9kJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxRdWFydGVyJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxZZWFyUXVhcnRlcicgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsV2VlaycgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsWWVhcldlZWsnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RheU9mRmlzY2FsWWVhcicgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsWWVhclZhcmlhbnQnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NdXR1YWxseUV4Y2x1c2l2ZVRlcm0nID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3QnID0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RUeXBlJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Tm9kZScgPSAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Tm9kZVR5cGUnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRBY3RpdmF0aW9uVmlhJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5TaW1wbGVJZGVudGlmaWVyJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkVkaXRhYmxlRmllbGRGb3InID0gJ0VkbS5Qcm9wZXJ0eVBhdGgnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNLZXknID0gJ0VkbS5Qcm9wZXJ0eVBhdGgnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2lkZUVmZmVjdHMnID0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TaWRlRWZmZWN0c1R5cGUnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRGVmYXVsdFZhbHVlc0Z1bmN0aW9uJyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUXVhbGlmaWVkTmFtZScsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWx0ZXJEZWZhdWx0VmFsdWUnID0gJ0VkbS5QcmltaXRpdmVUeXBlJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckRlZmF1bHRWYWx1ZUhpZ2gnID0gJ0VkbS5QcmltaXRpdmVUeXBlJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNvcnRPcmRlcicgPSAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNvcnRPcmRlclR5cGUnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVjdXJzaXZlSGllcmFyY2h5JyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVjdXJzaXZlSGllcmFyY2h5VHlwZScsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5DcmVhdGVkQXQnID0gJ0VkbS5EYXRlVGltZU9mZnNldCcsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5DcmVhdGVkQnknID0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Vc2VySUQnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQ2hhbmdlZEF0JyA9ICdFZG0uRGF0ZVRpbWVPZmZzZXQnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQ2hhbmdlZEJ5JyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVXNlcklEJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkFwcGx5TXVsdGlVbml0QmVoYXZpb3JGb3JTb3J0aW5nQW5kRmlsdGVyaW5nJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUHJpbWl0aXZlUHJvcGVydHlQYXRoJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5DdXJyZW5jeUNvZGVzJyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5Db2RlTGlzdFNvdXJjZScsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLlVuaXRzT2ZNZWFzdXJlJyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5Db2RlTGlzdFNvdXJjZScsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLlN0YW5kYXJkQ29kZScgPSAnRWRtLlByb3BlcnR5UGF0aCcsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLkV4dGVybmFsQ29kZScgPSAnRWRtLlByb3BlcnR5UGF0aCcsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLklzQ29uZmlndXJhdGlvbkRlcHJlY2F0aW9uQ29kZScgPSAnRWRtLkJvb2xlYW4nLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3QnID0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdFR5cGUnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkFkZHJlc3MnID0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQWRkcmVzc1R5cGUnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLklzRW1haWxBZGRyZXNzJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLklzUGhvbmVOdW1iZXInID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuRXZlbnQnID0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuRXZlbnREYXRhJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5UYXNrJyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLlRhc2tEYXRhJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5NZXNzYWdlJyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLk1lc3NhZ2VEYXRhJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuSGllcmFyY2h5LnYxLlJlY3Vyc2l2ZUhpZXJhcmNoeScgPSAnY29tLnNhcC52b2NhYnVsYXJpZXMuSGllcmFyY2h5LnYxLlJlY3Vyc2l2ZUhpZXJhcmNoeVR5cGUnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuRW50aXR5U2VtYW50aWNzJyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuRW50aXR5U2VtYW50aWNzVHlwZScsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5GaWVsZFNlbWFudGljcycgPSAnY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLkZpZWxkU2VtYW50aWNzVHlwZScsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5Jc1BvdGVudGlhbGx5UGVyc29uYWwnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5Jc1BvdGVudGlhbGx5U2Vuc2l0aXZlJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWQnID0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFR5cGUnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvJyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvVHlwZScsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLklkZW50aWZpY2F0aW9uJyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRBYnN0cmFjdCcsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkJhZGdlJyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5CYWRnZVR5cGUnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5MaW5lSXRlbScgPSAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkQWJzdHJhY3QnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TdGF0dXNJbmZvJyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRBYnN0cmFjdCcsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpZWxkR3JvdXAnID0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpZWxkR3JvdXBUeXBlJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ29ubmVjdGVkRmllbGRzJyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Db25uZWN0ZWRGaWVsZHNUeXBlJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2VvTG9jYXRpb25zJyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5HZW9Mb2NhdGlvblR5cGUnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5HZW9Mb2NhdGlvbicgPSAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2VvTG9jYXRpb25UeXBlJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ29udGFjdHMnID0gJ0VkbS5Bbm5vdGF0aW9uUGF0aCcsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk1lZGlhUmVzb3VyY2UnID0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk1lZGlhUmVzb3VyY2VUeXBlJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50JyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRUeXBlJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuS1BJJyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5LUElUeXBlJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnQnID0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0RGVmaW5pdGlvblR5cGUnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5WYWx1ZUNyaXRpY2FsaXR5JyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5WYWx1ZUNyaXRpY2FsaXR5VHlwZScsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5TGFiZWxzJyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eUxhYmVsVHlwZScsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkcycgPSAnRWRtLlByb3BlcnR5UGF0aCcsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0cycgPSAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXQnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJGYWNldHMnID0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0JyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUXVpY2tWaWV3RmFjZXRzJyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GYWNldCcsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlF1aWNrQ3JlYXRlRmFjZXRzJyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GYWNldCcsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpbHRlckZhY2V0cycgPSAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUmVmZXJlbmNlRmFjZXQnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50JyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZScsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlByZXNlbnRhdGlvblZhcmlhbnQnID0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlByZXNlbnRhdGlvblZhcmlhbnRUeXBlJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uVmFyaWFudCcgPSAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uVmFyaWFudFR5cGUnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UaGluZ1BlcnNwZWN0aXZlJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Jc1N1bW1hcnknID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlBhcnRPZlByZXZpZXcnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk1hcCcgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2FsbGVyeScgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSXNJbWFnZVVSTCcgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSXNJbWFnZScgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTXVsdGlMaW5lVGV4dCcgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50JyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZScgPSAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVR5cGUnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW4nID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLklzQ29weUFjdGlvbicgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JlYXRlSGlkZGVuJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5VcGRhdGVIaWRkZW4nID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRlbGV0ZUhpZGRlbicgPSAnT3JnLk9EYXRhLkNvcmUuVjEuVGFnJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuRmlsdGVyJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5BZGFwdGF0aW9uSGlkZGVuJyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGREZWZhdWx0JyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRBYnN0cmFjdCcsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5JyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eVR5cGUnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uJyA9ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZScsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkVtcGhhc2l6ZWQnID0gJ09yZy5PRGF0YS5Db3JlLlYxLlRhZycsXG4gICAgJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk9yZGVyQnknID0gJ0VkbS5Qcm9wZXJ0eVBhdGgnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QYXJhbWV0ZXJEZWZhdWx0VmFsdWUnID0gJ0VkbS5QcmltaXRpdmVUeXBlJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUmVjb21tZW5kYXRpb25TdGF0ZScgPSAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUmVjb21tZW5kYXRpb25TdGF0ZVR5cGUnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWNvbW1lbmRhdGlvbkxpc3QnID0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlJlY29tbWVuZGF0aW9uTGlzdFR5cGUnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5FeGNsdWRlRnJvbU5hdmlnYXRpb25Db250ZXh0JyA9ICdPcmcuT0RhdGEuQ29yZS5WMS5UYWcnLFxuICAgICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Eb05vdENoZWNrU2NhbGVPZk1lYXN1cmVkUXVhbnRpdHknID0gJ0VkbS5Cb29sZWFuJyxcbiAgICAnY29tLnNhcC52b2NhYnVsYXJpZXMuSFRNTDUudjEuQ3NzRGVmYXVsdHMnID0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkhUTUw1LnYxLkNzc0RlZmF1bHRzVHlwZSdcbn1cblxuLyoqXG4gKiBEaWZmZXJlbnRpYXRlIGJldHdlZW4gYSBDb21wbGV4VHlwZSBhbmQgYSBUeXBlRGVmaW5pdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29tcGxleFR5cGVEZWZpbml0aW9uXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBhIGNvbXBsZXggdHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wbGV4VHlwZURlZmluaXRpb24oXG4gICAgY29tcGxleFR5cGVEZWZpbml0aW9uPzogQ29tcGxleFR5cGUgfCBUeXBlRGVmaW5pdGlvblxuKTogY29tcGxleFR5cGVEZWZpbml0aW9uIGlzIENvbXBsZXhUeXBlIHtcbiAgICByZXR1cm4gKFxuICAgICAgICAhIWNvbXBsZXhUeXBlRGVmaW5pdGlvbiAmJiBjb21wbGV4VHlwZURlZmluaXRpb24uX3R5cGUgPT09ICdDb21wbGV4VHlwZScgJiYgISFjb21wbGV4VHlwZURlZmluaXRpb24ucHJvcGVydGllc1xuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEZWNpbWFsKHZhbHVlOiBudW1iZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpc0RlY2ltYWwoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWVPZigpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH07XG59XG5cbi8qKlxuICogRGVmaW5lcyBhIGxhenkgcHJvcGVydHkuXG4gKlxuICogVGhlIHByb3BlcnR5IGlzIGluaXRpYWxpemVkIGJ5IGNhbGxpbmcgdGhlIGluaXQgZnVuY3Rpb24gb24gdGhlIGZpcnN0IHJlYWQgYWNjZXNzLCBvciBieSBkaXJlY3RseSBhc3NpZ25pbmcgYSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gb2JqZWN0ICAgIFRoZSBob3N0IG9iamVjdFxuICogQHBhcmFtIHByb3BlcnR5ICBUaGUgbGF6eSBwcm9wZXJ0eSB0byBhZGRcbiAqIEBwYXJhbSBpbml0ICAgICAgVGhlIGZ1bmN0aW9uIHRoYXQgaW5pdGlhbGl6ZXMgdGhlIHByb3BlcnR5J3MgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhenk8VHlwZSwgS2V5IGV4dGVuZHMga2V5b2YgVHlwZT4ob2JqZWN0OiBUeXBlLCBwcm9wZXJ0eTogS2V5LCBpbml0OiAoKSA9PiBUeXBlW0tleV0pIHtcbiAgICBjb25zdCBpbml0aWFsID0gU3ltYm9sKCdpbml0aWFsJyk7XG4gICAgbGV0IF92YWx1ZTogVHlwZVtLZXldIHwgdHlwZW9mIGluaXRpYWwgPSBpbml0aWFsO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcblxuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICBpZiAoX3ZhbHVlID09PSBpbml0aWFsKSB7XG4gICAgICAgICAgICAgICAgX3ZhbHVlID0gaW5pdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF92YWx1ZTtcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQodmFsdWU6IFR5cGVbS2V5XSkge1xuICAgICAgICAgICAgX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBhbGxvd3MgdG8gZmluZCBhbiBhcnJheSBlbGVtZW50IGJ5IHByb3BlcnR5IHZhbHVlLlxuICpcbiAqIEBwYXJhbSBhcnJheSAgICAgVGhlIGFycmF5XG4gKiBAcGFyYW0gcHJvcGVydHkgIEVsZW1lbnRzIGluIHRoZSBhcnJheSBhcmUgc2VhcmNoZWQgYnkgdGhpcyBwcm9wZXJ0eVxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGZpbmQgYW4gZWxlbWVudCBvZiB0aGUgYXJyYXkgYnkgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbmRleGVkRmluZDxUPihhcnJheTogQXJyYXk8VD4sIHByb3BlcnR5OiBrZXlvZiBUKSB7XG4gICAgY29uc3QgaW5kZXg6IE1hcDxUW2tleW9mIFRdLCBUIHwgdW5kZWZpbmVkPiA9IG5ldyBNYXAoKTtcblxuICAgIHJldHVybiBmdW5jdGlvbiBmaW5kKHZhbHVlOiBUW2tleW9mIFRdKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBpbmRleC5nZXQodmFsdWUpO1xuXG4gICAgICAgIGlmIChlbGVtZW50Py5bcHJvcGVydHldID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJyYXkuZmluZCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFlbGVtZW50Py5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5VmFsdWUgPSBlbGVtZW50W3Byb3BlcnR5XTtcbiAgICAgICAgICAgIGluZGV4LnNldChwcm9wZXJ0eVZhbHVlLCBlbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlID09PSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBBZGRzIGEgJ2dldCBieSB2YWx1ZScgZnVuY3Rpb24gdG8gYW4gYXJyYXkuXG4gKlxuICogSWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhZGRJbmRleChteUFycmF5LCAnbmFtZScpLCBhIG5ldyBmdW5jdGlvbiAnYnlfbmFtZSh2YWx1ZSknIHdpbGwgYmUgYWRkZWQgdGhhdCBhbGxvd3MgdG9cbiAqIGZpbmQgYSBtZW1iZXIgb2YgdGhlIGFycmF5IGJ5IHRoZSB2YWx1ZSBvZiBpdHMgJ25hbWUnIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBhcnJheSAgICAgIFRoZSBhcnJheVxuICogQHBhcmFtIHByb3BlcnR5ICAgVGhlIHByb3BlcnR5IHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHRoZSAnYnlfe3Byb3BlcnR5fSgpJyBmdW5jdGlvblxuICogQHJldHVybnMgVGhlIGFycmF5IHdpdGggdGhlIGFkZGVkIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRHZXRCeVZhbHVlPFQsIFAgZXh0ZW5kcyBFeHRyYWN0PGtleW9mIFQsIHN0cmluZz4+KGFycmF5OiBBcnJheTxUPiwgcHJvcGVydHk6IFApIHtcbiAgICBjb25zdCBpbmRleE5hbWU6IGtleW9mIEluZGV4PFQsIFA+ID0gYGJ5XyR7cHJvcGVydHl9YDtcblxuICAgIGlmICghYXJyYXkuaGFzT3duUHJvcGVydHkoaW5kZXhOYW1lKSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXJyYXksIGluZGV4TmFtZSwgeyB3cml0YWJsZTogZmFsc2UsIHZhbHVlOiBjcmVhdGVJbmRleGVkRmluZChhcnJheSwgcHJvcGVydHkpIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvcGVydHkgJyR7aW5kZXhOYW1lfScgYWxyZWFkeSBleGlzdHNgKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5IGFzIEFycmF5V2l0aEluZGV4PFQsIFA+O1xufVxuIiwiaW1wb3J0IHR5cGUge1xuICAgIEFubm90YXRpb25QYXRoRXhwcmVzc2lvbixcbiAgICBBbm5vdGF0aW9uUmVjb3JkLFxuICAgIEFubm90YXRpb25UZXJtLFxuICAgIEV4cHJlc3Npb24sXG4gICAgTmF2aWdhdGlvblByb3BlcnR5UGF0aEV4cHJlc3Npb24sXG4gICAgUGF0aEV4cHJlc3Npb24sXG4gICAgUHJvcGVydHlQYXRoRXhwcmVzc2lvbixcbiAgICBSYXdBbm5vdGF0aW9uLFxuICAgIFJlZmVyZW5jZVxufSBmcm9tICdAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcyc7XG5pbXBvcnQgeyB1bmFsaWFzIH0gZnJvbSAnLi91dGlscyc7XG5cbi8qKlxuICogUmV2ZXJ0IGFuIG9iamVjdCB0byBpdHMgcmF3IHR5cGUgZXF1aXZhbGVudC5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyB0aGUgY3VycmVudCByZWZlcmVuY2VcbiAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gcmV2ZXJ0XG4gKiBAcmV0dXJucyB0aGUgcmF3IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHJldmVydE9iamVjdFRvUmF3VHlwZShyZWZlcmVuY2VzOiBSZWZlcmVuY2VbXSwgdmFsdWU6IGFueSkge1xuICAgIGxldCByZXN1bHQ6IEV4cHJlc3Npb24gfCB1bmRlZmluZWQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdDb2xsZWN0aW9uJyxcbiAgICAgICAgICAgIENvbGxlY3Rpb246IHZhbHVlLm1hcCgoYW5ubykgPT4gcmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub1Jhd1R5cGUocmVmZXJlbmNlcywgYW5ubykpIGFzIGFueVtdXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pc0RlY2ltYWw/LigpKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdEZWNpbWFsJyxcbiAgICAgICAgICAgIERlY2ltYWw6IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUuaXNTdHJpbmc/LigpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlTWF0Y2hlcyA9IHZhbHVlLnZhbHVlT2YoKS5zcGxpdCgnLicpO1xuICAgICAgICBpZiAodmFsdWVNYXRjaGVzLmxlbmd0aCA+IDEgJiYgcmVmZXJlbmNlcy5maW5kKChyZWYpID0+IHJlZi5hbGlhcyA9PT0gdmFsdWVNYXRjaGVzWzBdKSkge1xuICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdFbnVtTWVtYmVyJyxcbiAgICAgICAgICAgICAgICBFbnVtTWVtYmVyOiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICAgICAgU3RyaW5nOiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlLmlzSW50Py4oKSkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnSW50JyxcbiAgICAgICAgICAgIEludDogdmFsdWUudmFsdWVPZigpXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pc0Zsb2F0Py4oKSkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnRmxvYXQnLFxuICAgICAgICAgICAgRmxvYXQ6IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUuaXNEYXRlPy4oKSkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnRGF0ZScsXG4gICAgICAgICAgICBEYXRlOiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLmlzQm9vbGVhbj8uKCkpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ0Jvb2wnLFxuICAgICAgICAgICAgQm9vbDogdmFsdWUudmFsdWVPZigpID09PSAndHJ1ZSdcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09ICdQYXRoJykge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnUGF0aCcsXG4gICAgICAgICAgICBQYXRoOiB2YWx1ZS5wYXRoXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS50eXBlID09PSAnQW5ub3RhdGlvblBhdGgnKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdBbm5vdGF0aW9uUGF0aCcsXG4gICAgICAgICAgICBBbm5vdGF0aW9uUGF0aDogdmFsdWUudmFsdWVcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09ICdBcHBseScpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ0FwcGx5JyxcbiAgICAgICAgICAgIEFwcGx5OiB2YWx1ZS5BcHBseVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gJ051bGwnKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdOdWxsJ1xuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gJ1Byb3BlcnR5UGF0aCcpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ1Byb3BlcnR5UGF0aCcsXG4gICAgICAgICAgICBQcm9wZXJ0eVBhdGg6IHZhbHVlLnZhbHVlXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS50eXBlID09PSAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCcpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnLFxuICAgICAgICAgICAgTmF2aWdhdGlvblByb3BlcnR5UGF0aDogdmFsdWUudmFsdWVcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJyRUeXBlJykpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ1JlY29yZCcsXG4gICAgICAgICAgICBSZWNvcmQ6IHJldmVydENvbGxlY3Rpb25JdGVtVG9SYXdUeXBlKHJlZmVyZW5jZXMsIHZhbHVlKSBhcyBBbm5vdGF0aW9uUmVjb3JkXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUmV2ZXJ0IGEgdmFsdWUgdG8gaXRzIHJhdyB2YWx1ZSBkZXBlbmRpbmcgb24gaXRzIHR5cGUuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZXMgdGhlIGN1cnJlbnQgc2V0IG9mIHJlZmVyZW5jZVxuICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byByZXZlcnRcbiAqIEByZXR1cm5zIHRoZSByYXcgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiByZXZlcnRWYWx1ZVRvUmF3VHlwZShyZWZlcmVuY2VzOiBSZWZlcmVuY2VbXSwgdmFsdWU6IGFueSk6IEV4cHJlc3Npb24gfCB1bmRlZmluZWQge1xuICAgIGxldCByZXN1bHQ6IEV4cHJlc3Npb24gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgdmFsdWVDb25zdHJ1Y3RvciA9IHZhbHVlPy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIHN3aXRjaCAodmFsdWVDb25zdHJ1Y3Rvcikge1xuICAgICAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgY29uc3QgdmFsdWVNYXRjaGVzID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgaWYgKHZhbHVlTWF0Y2hlcy5sZW5ndGggPiAxICYmIHJlZmVyZW5jZXMuZmluZCgocmVmKSA9PiByZWYuYWxpYXMgPT09IHZhbHVlTWF0Y2hlc1swXSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdFbnVtTWVtYmVyJyxcbiAgICAgICAgICAgICAgICAgICAgRW51bU1lbWJlcjogdmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgIFN0cmluZzogdmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQm9vbGVhbic6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdCb29sJyxcbiAgICAgICAgICAgICAgICBCb29sOiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdOdW1iZXInOlxuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgaWYgKHZhbHVlLnRvU3RyaW5nKCkgPT09IHZhbHVlLnRvRml4ZWQoKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0ludCcsXG4gICAgICAgICAgICAgICAgICAgIEludDogdmFsdWUudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnRGVjaW1hbCcsXG4gICAgICAgICAgICAgICAgICAgIERlY2ltYWw6IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJlc3VsdCA9IHJldmVydE9iamVjdFRvUmF3VHlwZShyZWZlcmVuY2VzLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuY29uc3QgcmVzdHJpY3RlZEtleXMgPSBbJyRUeXBlJywgJ3Rlcm0nLCAnX19zb3VyY2UnLCAncXVhbGlmaWVyJywgJ0FjdGlvblRhcmdldCcsICdmdWxseVF1YWxpZmllZE5hbWUnLCAnYW5ub3RhdGlvbnMnXTtcblxuLyoqXG4gKiBSZXZlcnQgdGhlIGN1cnJlbnQgZW1iZWRkZWQgYW5ub3RhdGlvbnMgdG8gdGhlaXIgcmF3IHR5cGUuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZXMgdGhlIGN1cnJlbnQgc2V0IG9mIHJlZmVyZW5jZVxuICogQHBhcmFtIGN1cnJlbnRBbm5vdGF0aW9ucyB0aGUgY29sbGVjdGlvbiBpdGVtIHRvIGV2YWx1YXRlXG4gKiBAcGFyYW0gdGFyZ2V0QW5ub3RhdGlvbnMgdGhlIHBsYWNlIHdoZXJlIHdlIG5lZWQgdG8gYWRkIHRoZSBhbm5vdGF0aW9uXG4gKi9cbmZ1bmN0aW9uIHJldmVydEFubm90YXRpb25zVG9SYXdUeXBlKFxuICAgIHJlZmVyZW5jZXM6IFJlZmVyZW5jZVtdLFxuICAgIGN1cnJlbnRBbm5vdGF0aW9uczogYW55LFxuICAgIHRhcmdldEFubm90YXRpb25zOiBSYXdBbm5vdGF0aW9uW11cbikge1xuICAgIE9iamVjdC5rZXlzKGN1cnJlbnRBbm5vdGF0aW9ucylcbiAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkgIT09ICdfYW5ub3RhdGlvbnMnKVxuICAgICAgICAuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjdXJyZW50QW5ub3RhdGlvbnNba2V5XSkuZm9yRWFjaCgodGVybSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZEFubm90YXRpb24gPSByZXZlcnRUZXJtVG9HZW5lcmljVHlwZShyZWZlcmVuY2VzLCBjdXJyZW50QW5ub3RhdGlvbnNba2V5XVt0ZXJtXSk7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRBbm5vdGF0aW9uLnRlcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5hbGlhc2VkVGVybSA9IHVuYWxpYXMocmVmZXJlbmNlcywgYCR7a2V5fS4ke3Rlcm19YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1bmFsaWFzZWRUZXJtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWFsaWZpZWRTcGxpdCA9IHVuYWxpYXNlZFRlcm0uc3BsaXQoJyMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZEFubm90YXRpb24udGVybSA9IHF1YWxpZmllZFNwbGl0WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWxpZmllZFNwbGl0Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdWIgQW5ub3RhdGlvbiB3aXRoIGEgcXVhbGlmaWVyLCBub3Qgc3VyZSB3aGVuIHRoYXQgY2FuIGhhcHBlbiBpbiByZWFsIHNjZW5hcmlvc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZEFubm90YXRpb24ucXVhbGlmaWVyID0gcXVhbGlmaWVkU3BsaXRbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGFyZ2V0QW5ub3RhdGlvbnMucHVzaChwYXJzZWRBbm5vdGF0aW9uKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbn1cblxuLyoqXG4gKiBSZXZlcnQgdGhlIGN1cnJlbnQgY29sbGVjdGlvbiBpdGVtIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJhdyBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzIHRoZSBjdXJyZW50IHNldCBvZiByZWZlcmVuY2VcbiAqIEBwYXJhbSBjb2xsZWN0aW9uSXRlbSB0aGUgY29sbGVjdGlvbiBpdGVtIHRvIGV2YWx1YXRlXG4gKiBAcmV0dXJucyB0aGUgcmF3IHR5cGUgZXF1aXZhbGVudFxuICovXG5mdW5jdGlvbiByZXZlcnRDb2xsZWN0aW9uSXRlbVRvUmF3VHlwZShcbiAgICByZWZlcmVuY2VzOiBSZWZlcmVuY2VbXSxcbiAgICBjb2xsZWN0aW9uSXRlbTogYW55XG4pOlxuICAgIHwgQW5ub3RhdGlvblJlY29yZFxuICAgIHwgc3RyaW5nXG4gICAgfCBQcm9wZXJ0eVBhdGhFeHByZXNzaW9uXG4gICAgfCBQYXRoRXhwcmVzc2lvblxuICAgIHwgTmF2aWdhdGlvblByb3BlcnR5UGF0aEV4cHJlc3Npb25cbiAgICB8IEFubm90YXRpb25QYXRoRXhwcmVzc2lvblxuICAgIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodHlwZW9mIGNvbGxlY3Rpb25JdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gY29sbGVjdGlvbkl0ZW07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29sbGVjdGlvbkl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChjb2xsZWN0aW9uSXRlbS5oYXNPd25Qcm9wZXJ0eSgnJFR5cGUnKSkge1xuICAgICAgICAgICAgLy8gQW5ub3RhdGlvbiBSZWNvcmRcbiAgICAgICAgICAgIGNvbnN0IG91dEl0ZW06IEFubm90YXRpb25SZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogY29sbGVjdGlvbkl0ZW0uJFR5cGUsXG4gICAgICAgICAgICAgICAgcHJvcGVydHlWYWx1ZXM6IFtdIGFzIGFueVtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gQ291bGQgdmFsaWRhdGUga2V5cyBhbmQgdHlwZSBiYXNlZCBvbiAkVHlwZVxuICAgICAgICAgICAgT2JqZWN0LmtleXMoY29sbGVjdGlvbkl0ZW0pLmZvckVhY2goKGNvbGxlY3Rpb25LZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdHJpY3RlZEtleXMuaW5kZXhPZihjb2xsZWN0aW9uS2V5KSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb2xsZWN0aW9uSXRlbVtjb2xsZWN0aW9uS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgb3V0SXRlbS5wcm9wZXJ0eVZhbHVlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGNvbGxlY3Rpb25LZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmV2ZXJ0VmFsdWVUb1Jhd1R5cGUocmVmZXJlbmNlcywgdmFsdWUpIGFzIEV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2xsZWN0aW9uS2V5ID09PSAnYW5ub3RhdGlvbnMnICYmIE9iamVjdC5rZXlzKGNvbGxlY3Rpb25JdGVtW2NvbGxlY3Rpb25LZXldKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dEl0ZW0uYW5ub3RhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgcmV2ZXJ0QW5ub3RhdGlvbnNUb1Jhd1R5cGUocmVmZXJlbmNlcywgY29sbGVjdGlvbkl0ZW1bY29sbGVjdGlvbktleV0sIG91dEl0ZW0uYW5ub3RhdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG91dEl0ZW07XG4gICAgICAgIH0gZWxzZSBpZiAoY29sbGVjdGlvbkl0ZW0udHlwZSA9PT0gJ1Byb3BlcnR5UGF0aCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ1Byb3BlcnR5UGF0aCcsXG4gICAgICAgICAgICAgICAgUHJvcGVydHlQYXRoOiBjb2xsZWN0aW9uSXRlbS52YWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2xsZWN0aW9uSXRlbS50eXBlID09PSAnQW5ub3RhdGlvblBhdGgnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdBbm5vdGF0aW9uUGF0aCcsXG4gICAgICAgICAgICAgICAgQW5ub3RhdGlvblBhdGg6IGNvbGxlY3Rpb25JdGVtLnZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGNvbGxlY3Rpb25JdGVtLnR5cGUgPT09ICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCcsXG4gICAgICAgICAgICAgICAgTmF2aWdhdGlvblByb3BlcnR5UGF0aDogY29sbGVjdGlvbkl0ZW0udmFsdWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXZlcnQgYW4gYW5ub3RhdGlvbiB0ZXJtIHRvIGl0J3MgZ2VuZXJpYyBvciByYXcgZXF1aXZhbGVudC5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyB0aGUgcmVmZXJlbmNlIG9mIHRoZSBjdXJyZW50IGNvbnRleHRcbiAqIEBwYXJhbSBhbm5vdGF0aW9uIHRoZSBhbm5vdGF0aW9uIHRlcm0gdG8gcmV2ZXJ0XG4gKiBAcmV0dXJucyB0aGUgcmF3IGFubm90YXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJldmVydFRlcm1Ub0dlbmVyaWNUeXBlKHJlZmVyZW5jZXM6IFJlZmVyZW5jZVtdLCBhbm5vdGF0aW9uOiBBbm5vdGF0aW9uVGVybTxhbnk+KTogUmF3QW5ub3RhdGlvbiB7XG4gICAgY29uc3QgYmFzZUFubm90YXRpb246IFJhd0Fubm90YXRpb24gPSB7XG4gICAgICAgIHRlcm06IGFubm90YXRpb24udGVybSxcbiAgICAgICAgcXVhbGlmaWVyOiBhbm5vdGF0aW9uLnF1YWxpZmllclxuICAgIH07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYW5ub3RhdGlvbikpIHtcbiAgICAgICAgLy8gQ29sbGVjdGlvblxuICAgICAgICBpZiAoYW5ub3RhdGlvbi5oYXNPd25Qcm9wZXJ0eSgnYW5ub3RhdGlvbnMnKSAmJiBPYmplY3Qua2V5cygoYW5ub3RhdGlvbiBhcyBhbnkpLmFubm90YXRpb25zKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBBbm5vdGF0aW9uIG9uIGEgY29sbGVjdGlvbiBpdHNlbGYsIG5vdCBzdXJlIHdoZW4gdGhhdCBoYXBwZW5zIGlmIGF0IGFsbFxuICAgICAgICAgICAgYmFzZUFubm90YXRpb24uYW5ub3RhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIHJldmVydEFubm90YXRpb25zVG9SYXdUeXBlKHJlZmVyZW5jZXMsIChhbm5vdGF0aW9uIGFzIGFueSkuYW5ub3RhdGlvbnMsIGJhc2VBbm5vdGF0aW9uLmFubm90YXRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uYmFzZUFubm90YXRpb24sXG4gICAgICAgICAgICBjb2xsZWN0aW9uOiBhbm5vdGF0aW9uLm1hcCgoYW5ubykgPT4gcmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub1Jhd1R5cGUocmVmZXJlbmNlcywgYW5ubykpIGFzIGFueVtdXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmIChhbm5vdGF0aW9uLmhhc093blByb3BlcnR5KCckVHlwZScpKSB7XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2VBbm5vdGF0aW9uLCByZWNvcmQ6IHJldmVydENvbGxlY3Rpb25JdGVtVG9SYXdUeXBlKHJlZmVyZW5jZXMsIGFubm90YXRpb24pIGFzIGFueSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2VBbm5vdGF0aW9uLCB2YWx1ZTogcmV2ZXJ0VmFsdWVUb1Jhd1R5cGUocmVmZXJlbmNlcywgYW5ub3RhdGlvbikgfTtcbiAgICB9XG59XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4Mik7XG4iLCIiXX0=
|
|
2022
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Bbm5vdGF0aW9uQ29udmVydGVyL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2FwLXV4K2Fubm90YXRpb24tY29udmVydGVyQDAuNi4xMi9ub2RlX21vZHVsZXMvQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlci9zcmMvY29udmVydGVyLnRzIiwid2VicGFjazovL0Fubm90YXRpb25Db252ZXJ0ZXIvbm9kZV9tb2R1bGVzLy5wbnBtL0BzYXAtdXgrYW5ub3RhdGlvbi1jb252ZXJ0ZXJAMC42LjEyL25vZGVfbW9kdWxlcy9Ac2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly9Bbm5vdGF0aW9uQ29udmVydGVyL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2FwLXV4K2Fubm90YXRpb24tY29udmVydGVyQDAuNi4xMi9ub2RlX21vZHVsZXMvQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlci9zcmMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCthbm5vdGF0aW9uLWNvbnZlcnRlckAwLjYuMTIvbm9kZV9tb2R1bGVzL0BzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXIvc3JjL3dyaXRlYmFjay50cyIsIndlYnBhY2s6Ly9Bbm5vdGF0aW9uQ29udmVydGVyL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2FwLXV4K3ZvY2FidWxhcmllcy10eXBlc0AwLjcuNS9ub2RlX21vZHVsZXMvQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VudW1Jc0ZsYWcuanMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCt2b2NhYnVsYXJpZXMtdHlwZXNAMC43LjUvbm9kZV9tb2R1bGVzL0BzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9UZXJtVG9UeXBlcy5qcyIsIndlYnBhY2s6Ly9Bbm5vdGF0aW9uQ29udmVydGVyL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2FwLXV4K3ZvY2FidWxhcmllcy10eXBlc0AwLjcuNS9ub2RlX21vZHVsZXMvQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1ZvY2FidWxhcnlSZWZlcmVuY2VzLmpzIiwid2VicGFjazovL0Fubm90YXRpb25Db252ZXJ0ZXIvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci93ZWJwYWNrL3N0YXJ0dXAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQXFDQSx3REFBb0c7QUFDcEcseUNBWWlCO0FBRWpCOztHQUVHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUV0RDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLFVBQWlCLEVBQUUsYUFBa0I7SUFDM0QsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxhQUFhLEVBQUU7UUFDckQsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUNsQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsYUFBYSxDQUNsQixTQUFvQixFQUNwQixZQUFpQixFQUNqQixJQUFZLEVBQ1osZUFBd0I7O0lBRXhCLHNEQUFzRDtJQUN0RCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDdEIsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsWUFBWSxHQUFHLFNBQVMsQ0FBQyxDQUFDLG1EQUFtRDtLQUNoRjtJQUVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxFQUFF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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyx3Q0FBd0MsbUJBQW1CLEtBQUs7Ozs7Ozs7O0FDbFFwRDtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCLE1BQU0sMkpBQTJKO0FBQ2pLLE1BQU0seUlBQXlJO0FBQy9JLE1BQU0saUtBQWlLO0FBQ3ZLLE1BQU0sOEpBQThKO0FBQ3BLLE1BQU0sMkpBQTJKO0FBQ2pLLE1BQU0scUpBQXFKO0FBQzNKLE1BQU0sZ0pBQWdKO0FBQ3RKLE1BQU0sdUlBQXVJO0FBQzdJLE1BQU0sNklBQTZJO0FBQ25KLE1BQU0sNEpBQTRKO0FBQ2xLLE1BQU0sZ0pBQWdKO0FBQ3RKLE1BQU0seUpBQXlKO0FBQy9KLE1BQU0sMElBQTBJO0FBQ2hKLE1BQU0sMkhBQTJIO0FBQ2pJLE1BQU07QUFDTjs7Ozs7OztVQ3RCQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7O1VDdEJBO1VBQ0E7VUFDQTtVQUNBIiwiZmlsZSI6IkFubm90YXRpb25Db252ZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICAgIEFjdGlvbixcbiAgICBBY3Rpb25JbXBvcnQsXG4gICAgQWN0aW9uUGFyYW1ldGVyLFxuICAgIEFubm90YXRpb24sXG4gICAgQW5ub3RhdGlvblJlY29yZCxcbiAgICBBcnJheVdpdGhJbmRleCxcbiAgICBCYXNlTmF2aWdhdGlvblByb3BlcnR5LFxuICAgIENvbXBsZXhUeXBlLFxuICAgIENvbnZlcnRlZE1ldGFkYXRhLFxuICAgIEVudGl0eUNvbnRhaW5lcixcbiAgICBFbnRpdHlTZXQsXG4gICAgRW50aXR5VHlwZSxcbiAgICBFeHByZXNzaW9uLFxuICAgIEZ1bGx5UXVhbGlmaWVkTmFtZSxcbiAgICBOYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgUHJvcGVydHksXG4gICAgUHJvcGVydHlQYXRoLFxuICAgIFJhd0FjdGlvbixcbiAgICBSYXdBY3Rpb25JbXBvcnQsXG4gICAgUmF3QW5ub3RhdGlvbixcbiAgICBSYXdDb21wbGV4VHlwZSxcbiAgICBSYXdFbnRpdHlDb250YWluZXIsXG4gICAgUmF3RW50aXR5U2V0LFxuICAgIFJhd0VudGl0eVR5cGUsXG4gICAgUmF3TWV0YWRhdGEsXG4gICAgUmF3UHJvcGVydHksXG4gICAgUmF3U2NoZW1hLFxuICAgIFJhd1NpbmdsZXRvbixcbiAgICBSYXdUeXBlRGVmaW5pdGlvbixcbiAgICBSYXdWMk5hdmlnYXRpb25Qcm9wZXJ0eSxcbiAgICBSYXdWNE5hdmlnYXRpb25Qcm9wZXJ0eSxcbiAgICBSZW1vdmVBbm5vdGF0aW9uQW5kVHlwZSxcbiAgICBSZXNvbHV0aW9uVGFyZ2V0LFxuICAgIFNpbmdsZXRvbixcbiAgICBUeXBlRGVmaW5pdGlvblxufSBmcm9tICdAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcyc7XG5pbXBvcnQgeyBWb2NhYnVsYXJ5UmVmZXJlbmNlcyB9IGZyb20gJ0BzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Wb2NhYnVsYXJ5UmVmZXJlbmNlcyc7XG5pbXBvcnQge1xuICAgIGFkZEdldEJ5VmFsdWUsXG4gICAgYWxpYXMsXG4gICAgRGVjaW1hbCxcbiAgICBFbnVtSXNGbGFnLFxuICAgIGxhenksXG4gICAgc3BsaXRBdEZpcnN0LFxuICAgIHNwbGl0QXRMYXN0LFxuICAgIHN1YnN0cmluZ0JlZm9yZUZpcnN0LFxuICAgIHN1YnN0cmluZ0JlZm9yZUxhc3QsXG4gICAgVGVybVRvVHlwZXMsXG4gICAgdW5hbGlhc1xufSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBTeW1ib2wgdG8gZXh0ZW5kIGFuIGFubm90YXRpb24gd2l0aCB0aGUgcmVmZXJlbmNlIHRvIGl0cyB0YXJnZXQuXG4gKi9cbmNvbnN0IEFOTk9UQVRJT05fVEFSR0VUID0gU3ltYm9sKCdBbm5vdGF0aW9uIFRhcmdldCcpO1xuXG4vKipcbiAqIEFwcGVuZCBhbiBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgdmlzaXRlZCBvYmplY3RzIGlmIGl0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgbGlzdC5cbiAqXG4gKiBAcGFyYW0gb2JqZWN0UGF0aCAgICBUaGUgbGlzdCBvZiB2aXNpdGVkIG9iamVjdHNcbiAqIEBwYXJhbSB2aXNpdGVkT2JqZWN0IFRoZSBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHZpc2l0ZWQgb2JqZWN0c1xuICovXG5mdW5jdGlvbiBhcHBlbmRPYmplY3RQYXRoKG9iamVjdFBhdGg6IGFueVtdLCB2aXNpdGVkT2JqZWN0OiBhbnkpOiBhbnlbXSB7XG4gICAgaWYgKG9iamVjdFBhdGhbb2JqZWN0UGF0aC5sZW5ndGggLSAxXSAhPT0gdmlzaXRlZE9iamVjdCkge1xuICAgICAgICBvYmplY3RQYXRoLnB1c2godmlzaXRlZE9iamVjdCk7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3RQYXRoO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgKHBvc3NpYmx5IHJlbGF0aXZlKSBwYXRoLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICAgICAgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSBzdGFydEVsZW1lbnQgICAgICBUaGUgc3RhcnRpbmcgcG9pbnQgaW4gY2FzZSBvZiByZWxhdGl2ZSBwYXRoIHJlc29sdXRpb25cbiAqIEBwYXJhbSBwYXRoICAgICAgICAgICAgICBUaGUgcGF0aCB0byByZXNvbHZlXG4gKiBAcGFyYW0gYW5ub3RhdGlvbnNUZXJtICAgT25seSBmb3IgZXJyb3IgcmVwb3J0aW5nOiBUaGUgYW5ub3RhdGlvbiB0ZXJtXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmVzb2x2ZWQgdGFyZ2V0IGFuZCB0aGUgZWxlbWVudHMgdGhhdCB3ZXJlIHZpc2l0ZWQgd2hpbGUgZ2V0dGluZyB0byB0aGUgdGFyZ2V0LlxuICovXG5mdW5jdGlvbiByZXNvbHZlVGFyZ2V0PFQ+KFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIHN0YXJ0RWxlbWVudDogYW55LFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBhbm5vdGF0aW9uc1Rlcm0/OiBzdHJpbmdcbik6IFJlc29sdXRpb25UYXJnZXQ8VD4ge1xuICAgIC8vIGFic29sdXRlIHBhdGhzIGFsd2F5cyBzdGFydCBhdCB0aGUgZW50aXR5IGNvbnRhaW5lclxuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSk7XG4gICAgICAgIHN0YXJ0RWxlbWVudCA9IHVuZGVmaW5lZDsgLy8gd2lsbCByZXNvbHZlIHRvIHRoZSBlbnRpdHkgY29udGFpbmVyIChzZWUgYmVsb3cpXG4gICAgfVxuXG4gICAgY29uc3QgcGF0aFNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLycpLnJlZHVjZSgodGFyZ2V0UGF0aCwgc2VnbWVudCkgPT4ge1xuICAgICAgICBpZiAoc2VnbWVudC5pbmNsdWRlcygnQCcpKSB7XG4gICAgICAgICAgICAvLyBTZXBhcmF0ZSBvdXQgdGhlIGFubm90YXRpb25cbiAgICAgICAgICAgIGNvbnN0IFtwYXRoUGFydCwgYW5ub3RhdGlvblBhcnRdID0gc3BsaXRBdEZpcnN0KHNlZ21lbnQsICdAJyk7XG4gICAgICAgICAgICB0YXJnZXRQYXRoLnB1c2gocGF0aFBhcnQpO1xuICAgICAgICAgICAgdGFyZ2V0UGF0aC5wdXNoKGBAJHthbm5vdGF0aW9uUGFydH1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldFBhdGgucHVzaChzZWdtZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0UGF0aDtcbiAgICB9LCBbXSBhcyBzdHJpbmdbXSk7XG5cbiAgICAvLyBkZXRlcm1pbmUgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgcmVzb2x1dGlvblxuICAgIGlmIChzdGFydEVsZW1lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBubyBzdGFydGluZyBwb2ludCBnaXZlbjogc3RhcnQgYXQgdGhlIGVudGl0eSBjb250YWluZXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGF0aFNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoYCR7Y29udmVydGVyLnJhd1NjaGVtYS5uYW1lc3BhY2V9LmApICYmXG4gICAgICAgICAgICBwYXRoU2VnbWVudHNbMF0gIT09IGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRFbnRpdHlDb250YWluZXIoKT8uZnVsbHlRdWFsaWZpZWROYW1lXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIGZ1bGx5IHF1YWxpZmllZCBuYW1lIGluIHRoZSBwYXRoIHRoYXQgaXMgbm90IHRoZSBlbnRpdHkgY29udGFpbmVyLlxuICAgICAgICAgICAgc3RhcnRFbGVtZW50ID1cbiAgICAgICAgICAgICAgICBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkRW50aXR5VHlwZShwYXRoU2VnbWVudHNbMF0pID8/XG4gICAgICAgICAgICAgICAgY29udmVydGVyLmdldENvbnZlcnRlZENvbXBsZXhUeXBlKHBhdGhTZWdtZW50c1swXSkgPz9cbiAgICAgICAgICAgICAgICBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkQWN0aW9uKHBhdGhTZWdtZW50c1swXSk7XG4gICAgICAgICAgICBwYXRoU2VnbWVudHMuc2hpZnQoKTsgLy8gTGV0J3MgcmVtb3ZlIHRoZSBmaXJzdCBwYXRoIGVsZW1lbnRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudCA9IGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRFbnRpdHlDb250YWluZXIoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RhcnRFbGVtZW50W0FOTk9UQVRJT05fVEFSR0VUXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIGFubm90YXRpb246IHN0YXJ0IGF0IHRoZSBhbm5vdGF0aW9uIHRhcmdldFxuICAgICAgICBzdGFydEVsZW1lbnQgPSBzdGFydEVsZW1lbnRbQU5OT1RBVElPTl9UQVJHRVRdO1xuICAgIH0gZWxzZSBpZiAoc3RhcnRFbGVtZW50Ll90eXBlID09PSAnUHJvcGVydHknKSB7XG4gICAgICAgIC8vIHByb3BlcnR5OiBzdGFydCBhdCB0aGUgZW50aXR5IHR5cGUgb3IgY29tcGxleCB0eXBlIHRoZSBwcm9wZXJ0eSBiZWxvbmdzIHRvXG4gICAgICAgIGNvbnN0IHBhcmVudEVsZW1lbnRGUU4gPSBzdWJzdHJpbmdCZWZvcmVGaXJzdChzdGFydEVsZW1lbnQuZnVsbHlRdWFsaWZpZWROYW1lLCAnLycpO1xuICAgICAgICBzdGFydEVsZW1lbnQgPVxuICAgICAgICAgICAgY29udmVydGVyLmdldENvbnZlcnRlZEVudGl0eVR5cGUocGFyZW50RWxlbWVudEZRTikgPz8gY29udmVydGVyLmdldENvbnZlcnRlZENvbXBsZXhUeXBlKHBhcmVudEVsZW1lbnRGUU4pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHBhdGhTZWdtZW50cy5yZWR1Y2UoXG4gICAgICAgIChjdXJyZW50OiBSZXNvbHV0aW9uVGFyZ2V0PGFueT4sIHNlZ21lbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSAobWVzc2FnZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY3VycmVudC5tZXNzYWdlcy5wdXNoKHsgbWVzc2FnZSB9KTtcbiAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50LnRhcmdldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnQub2JqZWN0UGF0aCA9IGFwcGVuZE9iamVjdFBhdGgoY3VycmVudC5vYmplY3RQYXRoLCBjdXJyZW50LnRhcmdldCk7XG5cbiAgICAgICAgICAgIC8vIEFubm90YXRpb25cbiAgICAgICAgICAgIGlmIChzZWdtZW50LnN0YXJ0c1dpdGgoJ0AnKSAmJiBzZWdtZW50ICE9PSAnQCR1aTUub3ZlcmxvYWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW3ZvY2FidWxhcnlBbGlhcywgdGVybV0gPSBjb252ZXJ0ZXIuc3BsaXRUZXJtKHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFubm90YXRpb24gPSBjdXJyZW50LnRhcmdldC5hbm5vdGF0aW9uc1t2b2NhYnVsYXJ5QWxpYXMuc3Vic3RyaW5nKDEpXT8uW3Rlcm1dO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFubm90YXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IGFubm90YXRpb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBBbm5vdGF0aW9uICcke3NlZ21lbnQuc3Vic3RyaW5nKDEpfScgbm90IGZvdW5kIG9uICR7Y3VycmVudC50YXJnZXQuX3R5cGV9ICcke1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lXG4gICAgICAgICAgICAgICAgICAgIH0nYFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vICRQYXRoIC8gJEFubm90YXRpb25QYXRoIHN5bnRheFxuICAgICAgICAgICAgaWYgKGN1cnJlbnQudGFyZ2V0LiR0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBsZXQgc3ViUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmIChzZWdtZW50ID09PSAnJEFubm90YXRpb25QYXRoJykge1xuICAgICAgICAgICAgICAgICAgICBzdWJQYXRoID0gY3VycmVudC50YXJnZXQudmFsdWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWdtZW50ID09PSAnJFBhdGgnKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YlBhdGggPSBjdXJyZW50LnRhcmdldC5wYXRoO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdWJQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ViVGFyZ2V0ID0gcmVzb2x2ZVRhcmdldChjb252ZXJ0ZXIsIGN1cnJlbnQudGFyZ2V0W0FOTk9UQVRJT05fVEFSR0VUXSwgc3ViUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIHN1YlRhcmdldC5vYmplY3RQYXRoLmZvckVhY2goKHZpc2l0ZWRTdWJPYmplY3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50Lm9iamVjdFBhdGguaW5jbHVkZXModmlzaXRlZFN1Yk9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Lm9iamVjdFBhdGggPSBhcHBlbmRPYmplY3RQYXRoKGN1cnJlbnQub2JqZWN0UGF0aCwgdmlzaXRlZFN1Yk9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gc3ViVGFyZ2V0LnRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC5vYmplY3RQYXRoID0gYXBwZW5kT2JqZWN0UGF0aChjdXJyZW50Lm9iamVjdFBhdGgsIGN1cnJlbnQudGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0cmF2ZXJzZSBiYXNlZCBvbiB0aGUgZWxlbWVudCB0eXBlXG4gICAgICAgICAgICBzd2l0Y2ggKGN1cnJlbnQudGFyZ2V0Py5fdHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ1NjaGVtYSc6XG4gICAgICAgICAgICAgICAgICAgIC8vIG5leHQgZWxlbWVudDogRW50aXR5VHlwZSwgQ29tcGxleFR5cGUsIEFjdGlvbiwgRW50aXR5Q29udGFpbmVyID9cblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdFbnRpdHlDb250YWluZXInOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0aGlzRWxlbWVudCA9IGN1cnJlbnQudGFyZ2V0IGFzIEVudGl0eUNvbnRhaW5lcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09ICcnIHx8IGNvbnZlcnRlci51bmFsaWFzKHNlZ21lbnQpID09PSB0aGlzRWxlbWVudC5mdWxseVF1YWxpZmllZE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBlbGVtZW50OiBFbnRpdHlTZXQsIFNpbmdsZXRvbiBvciBBY3Rpb25JbXBvcnQ/XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0RWxlbWVudDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgQWN0aW9uSW1wb3J0IHwgdW5kZWZpbmVkID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzRWxlbWVudC5lbnRpdHlTZXRzLmJ5X25hbWUoc2VnbWVudCkgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzRWxlbWVudC5zaW5nbGV0b25zLmJ5X25hbWUoc2VnbWVudCkgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzRWxlbWVudC5hY3Rpb25JbXBvcnRzLmJ5X25hbWUoc2VnbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gbmV4dEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdFbnRpdHlTZXQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1NpbmdsZXRvbic6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGhpc0VsZW1lbnQgPSBjdXJyZW50LnRhcmdldCBhcyBFbnRpdHlTZXQgfCBTaW5nbGV0b247XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09ICcnIHx8IHNlZ21lbnQgPT09ICckVHlwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVtcHR5IFBhdGggYWZ0ZXIgYW4gRW50aXR5U2V0IG9yIFNpbmdsZXRvbiBtZWFucyBFbnRpdHlUeXBlXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IHRoaXNFbGVtZW50LmVudGl0eVR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50ID09PSAnJCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09ICckTmF2aWdhdGlvblByb3BlcnR5QmluZGluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzID0gdGhpc0VsZW1lbnQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gbmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHJlc29sdmluZyBhdCB0aGUgRW50aXR5U2V0J3Mgb3IgU2luZ2xldG9uJ3MgdHlwZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlVGFyZ2V0KGNvbnZlcnRlciwgdGhpc0VsZW1lbnQuZW50aXR5VHlwZSwgc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gcmVzdWx0LnRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC5vYmplY3RQYXRoID0gcmVzdWx0Lm9iamVjdFBhdGgucmVkdWNlKGFwcGVuZE9iamVjdFBhdGgsIGN1cnJlbnQub2JqZWN0UGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhc2UgJ0VudGl0eVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0aGlzRWxlbWVudCA9IGN1cnJlbnQudGFyZ2V0IGFzIEVudGl0eVR5cGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50ID09PSAnJyB8fCBzZWdtZW50ID09PSAnJFR5cGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpc0VsZW1lbnQuZW50aXR5UHJvcGVydGllcy5ieV9uYW1lKHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBwcm9wZXJ0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmF2aWdhdGlvblByb3BlcnR5ID0gdGhpc0VsZW1lbnQubmF2aWdhdGlvblByb3BlcnRpZXMuYnlfbmFtZShzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXZpZ2F0aW9uUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IG5hdmlnYXRpb25Qcm9wZXJ0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uTmFtZSA9IHN1YnN0cmluZ0JlZm9yZUZpcnN0KGNvbnZlcnRlci51bmFsaWFzKHNlZ21lbnQpLCAnKCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpc0VsZW1lbnQuYWN0aW9uc1thY3Rpb25OYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IGFjdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ0FjdGlvbkltcG9ydCc6IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udGludWUgcmVzb2x2aW5nIGF0IHRoZSBBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZVRhcmdldChjb252ZXJ0ZXIsIGN1cnJlbnQudGFyZ2V0LmFjdGlvbiwgc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gcmVzdWx0LnRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC5vYmplY3RQYXRoID0gcmVzdWx0Lm9iamVjdFBhdGgucmVkdWNlKGFwcGVuZE9iamVjdFBhdGgsIGN1cnJlbnQub2JqZWN0UGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhc2UgJ0FjdGlvbic6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGhpc0VsZW1lbnQgPSBjdXJyZW50LnRhcmdldCBhcyBBY3Rpb247XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50ID09PSAnQCR1aTUub3ZlcmxvYWQnIHx8IHNlZ21lbnQgPT09ICcwJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJyRQYXJhbWV0ZXInICYmIHRoaXNFbGVtZW50LmlzQm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gdGhpc0VsZW1lbnQucGFyYW1ldGVycztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dEVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0VsZW1lbnQucGFyYW1ldGVyc1tzZWdtZW50IGFzIGFueV0gPz9cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNFbGVtZW50LnBhcmFtZXRlcnMuZmluZCgocGFyYW06IEFjdGlvblBhcmFtZXRlcikgPT4gcGFyYW0ubmFtZSA9PT0gc2VnbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IG5leHRFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FzZSAnUHJvcGVydHknOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0aGlzRWxlbWVudCA9IGN1cnJlbnQudGFyZ2V0IGFzIFByb3BlcnR5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9wZXJ0eSBvciBOYXZpZ2F0aW9uUHJvcGVydHkgb2YgdGhlIENvbXBsZXhUeXBlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gdGhpc0VsZW1lbnQudGFyZ2V0VHlwZSBhcyBDb21wbGV4VHlwZSB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHR5cGUucHJvcGVydGllcy5ieV9uYW1lKHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IHByb3BlcnR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHkgPSB0eXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmJ5X25hbWUoc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hdmlnYXRpb25Qcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IG5hdmlnYXRpb25Qcm9wZXJ0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnQWN0aW9uUGFyYW1ldGVyJzpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlZFR5cGUgPSAoY3VycmVudC50YXJnZXQgYXMgQWN0aW9uUGFyYW1ldGVyKS50eXBlUmVmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlZFR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZVRhcmdldChjb252ZXJ0ZXIsIHJlZmVyZW5jZWRUeXBlLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gcmVzdWx0LnRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQub2JqZWN0UGF0aCA9IHJlc3VsdC5vYmplY3RQYXRoLnJlZHVjZShhcHBlbmRPYmplY3RQYXRoLCBjdXJyZW50Lm9iamVjdFBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdOYXZpZ2F0aW9uUHJvcGVydHknOlxuICAgICAgICAgICAgICAgICAgICAvLyBjb250aW51ZSBhdCB0aGUgTmF2aWdhdGlvblByb3BlcnR5J3MgdGFyZ2V0IHR5cGVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZVRhcmdldChjb252ZXJ0ZXIsIChjdXJyZW50LnRhcmdldCBhcyBOYXZpZ2F0aW9uUHJvcGVydHkpLnRhcmdldFR5cGUsIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IHJlc3VsdC50YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQub2JqZWN0UGF0aCA9IHJlc3VsdC5vYmplY3RQYXRoLnJlZHVjZShhcHBlbmRPYmplY3RQYXRoLCBjdXJyZW50Lm9iamVjdFBhdGgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50ID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC50YXJnZXRbc2VnbWVudF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gY3VycmVudC50YXJnZXRbc2VnbWVudF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Lm9iamVjdFBhdGggPSBhcHBlbmRPYmplY3RQYXRoKGN1cnJlbnQub2JqZWN0UGF0aCwgY3VycmVudC50YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGVycm9yKFxuICAgICAgICAgICAgICAgIGBFbGVtZW50ICcke3NlZ21lbnR9JyBub3QgZm91bmQgYXQgJHtjdXJyZW50LnRhcmdldC5fdHlwZX0gJyR7Y3VycmVudC50YXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lfSdgXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICB7IHRhcmdldDogc3RhcnRFbGVtZW50LCBvYmplY3RQYXRoOiBbXSwgbWVzc2FnZXM6IFtdIH1cbiAgICApO1xuXG4gICAgLy8gRGlhZ25vc3RpY3NcbiAgICByZXN1bHQubWVzc2FnZXMuZm9yRWFjaCgobWVzc2FnZSkgPT4gY29udmVydGVyLmxvZ0Vycm9yKG1lc3NhZ2UubWVzc2FnZSkpO1xuICAgIGlmICghcmVzdWx0LnRhcmdldCkge1xuICAgICAgICBpZiAoYW5ub3RhdGlvbnNUZXJtKSB7XG4gICAgICAgICAgICBjb25zdCBhbm5vdGF0aW9uVHlwZSA9IGluZmVyVHlwZUZyb21UZXJtKGNvbnZlcnRlciwgYW5ub3RhdGlvbnNUZXJtLCBzdGFydEVsZW1lbnQuZnVsbHlRdWFsaWZpZWROYW1lKTtcbiAgICAgICAgICAgIGNvbnZlcnRlci5sb2dFcnJvcihcbiAgICAgICAgICAgICAgICAnVW5hYmxlIHRvIHJlc29sdmUgdGhlIHBhdGggZXhwcmVzc2lvbjogJyArXG4gICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgcGF0aCArXG4gICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnSGludDogQ2hlY2sgYW5kIGNvcnJlY3QgdGhlIHBhdGggdmFsdWVzIHVuZGVyIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGluIHRoZSBtZXRhZGF0YSAoYW5ub3RhdGlvbi54bWwgZmlsZSBvciBDRFMgYW5ub3RhdGlvbnMgZm9yIHRoZSBhcHBsaWNhdGlvbik6IFxcblxcbicgK1xuICAgICAgICAgICAgICAgICAgICAnPEFubm90YXRpb24gVGVybSA9ICcgK1xuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uc1Rlcm0gK1xuICAgICAgICAgICAgICAgICAgICAnPicgK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICc8UmVjb3JkIFR5cGUgPSAnICtcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvblR5cGUgK1xuICAgICAgICAgICAgICAgICAgICAnPicgK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICc8QW5ub3RhdGlvblBhdGggPSAnICtcbiAgICAgICAgICAgICAgICAgICAgcGF0aCArXG4gICAgICAgICAgICAgICAgICAgICc+J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnZlcnRlci5sb2dFcnJvcihcbiAgICAgICAgICAgICAgICAnVW5hYmxlIHRvIHJlc29sdmUgdGhlIHBhdGggZXhwcmVzc2lvbjogJyArXG4gICAgICAgICAgICAgICAgICAgIHBhdGggK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJ0hpbnQ6IENoZWNrIGFuZCBjb3JyZWN0IHRoZSBwYXRoIHZhbHVlcyB1bmRlciB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpbiB0aGUgbWV0YWRhdGEgKGFubm90YXRpb24ueG1sIGZpbGUgb3IgQ0RTIGFubm90YXRpb25zIGZvciB0aGUgYXBwbGljYXRpb24pOiBcXG5cXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxBbm5vdGF0aW9uIFRlcm0gPSAnICtcbiAgICAgICAgICAgICAgICAgICAgcGF0aFNlZ21lbnRzWzBdICtcbiAgICAgICAgICAgICAgICAgICAgJz4nICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnPFByb3BlcnR5VmFsdWUgIFBhdGg9ICcgK1xuICAgICAgICAgICAgICAgICAgICBwYXRoU2VnbWVudHNbMV0gK1xuICAgICAgICAgICAgICAgICAgICAnPidcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFR5cGVndWFyZCB0byBjaGVjayBpZiB0aGUgcGF0aCBjb250YWlucyBhbiBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSBwYXRoU3RyIHRoZSBwYXRoIHRvIGV2YWx1YXRlXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGFubm90YXRpb24gaW4gdGhlIHBhdGguXG4gKi9cbmZ1bmN0aW9uIGlzQW5ub3RhdGlvblBhdGgocGF0aFN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHBhdGhTdHIuaW5jbHVkZXMoJ0AnKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VWYWx1ZShcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBjdXJyZW50VGFyZ2V0OiBhbnksXG4gICAgY3VycmVudFRlcm06IHN0cmluZyxcbiAgICBjdXJyZW50UHJvcGVydHk6IHN0cmluZyxcbiAgICBjdXJyZW50U291cmNlOiBzdHJpbmcsXG4gICAgcHJvcGVydHlWYWx1ZTogRXhwcmVzc2lvbixcbiAgICB2YWx1ZUZRTjogc3RyaW5nXG4pIHtcbiAgICBpZiAocHJvcGVydHlWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN3aXRjaCAocHJvcGVydHlWYWx1ZS50eXBlKSB7XG4gICAgICAgIGNhc2UgJ1N0cmluZyc6XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZS5TdHJpbmc7XG4gICAgICAgIGNhc2UgJ0ludCc6XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZS5JbnQ7XG4gICAgICAgIGNhc2UgJ0Jvb2wnOlxuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWUuQm9vbDtcbiAgICAgICAgY2FzZSAnRGVjaW1hbCc6XG4gICAgICAgICAgICByZXR1cm4gRGVjaW1hbChwcm9wZXJ0eVZhbHVlLkRlY2ltYWwpO1xuICAgICAgICBjYXNlICdEYXRlJzpcbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlLkRhdGU7XG4gICAgICAgIGNhc2UgJ0VudW1NZW1iZXInOlxuICAgICAgICAgICAgY29uc3Qgc3BsaXRFbnVtID0gcHJvcGVydHlWYWx1ZS5FbnVtTWVtYmVyLnNwbGl0KCcgJykubWFwKChlbnVtVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1bmFsaWFzZWQgPSBjb252ZXJ0ZXIudW5hbGlhcyhlbnVtVmFsdWUpID8/ICcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBhbGlhcyhWb2NhYnVsYXJ5UmVmZXJlbmNlcywgdW5hbGlhc2VkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHNwbGl0RW51bVswXSAhPT0gdW5kZWZpbmVkICYmIEVudW1Jc0ZsYWdbc3Vic3RyaW5nQmVmb3JlRmlyc3Qoc3BsaXRFbnVtWzBdLCAnLycpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzcGxpdEVudW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3BsaXRFbnVtWzBdO1xuXG4gICAgICAgIGNhc2UgJ1Byb3BlcnR5UGF0aCc6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdQcm9wZXJ0eVBhdGgnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBwcm9wZXJ0eVZhbHVlLlByb3BlcnR5UGF0aCxcbiAgICAgICAgICAgICAgICBmdWxseVF1YWxpZmllZE5hbWU6IHZhbHVlRlFOLFxuICAgICAgICAgICAgICAgICR0YXJnZXQ6IHJlc29sdmVUYXJnZXQoY29udmVydGVyLCBjdXJyZW50VGFyZ2V0LCBwcm9wZXJ0eVZhbHVlLlByb3BlcnR5UGF0aCwgY3VycmVudFRlcm0pLnRhcmdldCxcbiAgICAgICAgICAgICAgICBbQU5OT1RBVElPTl9UQVJHRVRdOiBjdXJyZW50VGFyZ2V0XG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJzpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBwcm9wZXJ0eVZhbHVlLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsXG4gICAgICAgICAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiB2YWx1ZUZRTixcbiAgICAgICAgICAgICAgICAkdGFyZ2V0OiByZXNvbHZlVGFyZ2V0KGNvbnZlcnRlciwgY3VycmVudFRhcmdldCwgcHJvcGVydHlWYWx1ZS5OYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBjdXJyZW50VGVybSlcbiAgICAgICAgICAgICAgICAgICAgLnRhcmdldCxcbiAgICAgICAgICAgICAgICBbQU5OT1RBVElPTl9UQVJHRVRdOiBjdXJyZW50VGFyZ2V0XG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlICdBbm5vdGF0aW9uUGF0aCc6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdBbm5vdGF0aW9uUGF0aCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHByb3BlcnR5VmFsdWUuQW5ub3RhdGlvblBhdGgsXG4gICAgICAgICAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiB2YWx1ZUZRTixcbiAgICAgICAgICAgICAgICAkdGFyZ2V0OiByZXNvbHZlVGFyZ2V0KFxuICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZXIsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlci51bmFsaWFzKHByb3BlcnR5VmFsdWUuQW5ub3RhdGlvblBhdGgpLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGVybVxuICAgICAgICAgICAgICAgICkudGFyZ2V0LFxuICAgICAgICAgICAgICAgIGFubm90YXRpb25zVGVybTogY3VycmVudFRlcm0sXG4gICAgICAgICAgICAgICAgdGVybTogJycsXG4gICAgICAgICAgICAgICAgcGF0aDogJycsXG4gICAgICAgICAgICAgICAgW0FOTk9UQVRJT05fVEFSR0VUXTogY3VycmVudFRhcmdldFxuICAgICAgICAgICAgfTtcbiAgICAgICAgY2FzZSAnUGF0aCc6XG4gICAgICAgICAgICBjb25zdCAkdGFyZ2V0ID0gcmVzb2x2ZVRhcmdldChjb252ZXJ0ZXIsIGN1cnJlbnRUYXJnZXQsIHByb3BlcnR5VmFsdWUuUGF0aCwgY3VycmVudFRlcm0pLnRhcmdldDtcbiAgICAgICAgICAgIGlmIChpc0Fubm90YXRpb25QYXRoKHByb3BlcnR5VmFsdWUuUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAvLyBpbmxpbmUgdGhlIHRhcmdldFxuICAgICAgICAgICAgICAgIHJldHVybiAkdGFyZ2V0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUGF0aCcsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IHByb3BlcnR5VmFsdWUuUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiB2YWx1ZUZRTixcbiAgICAgICAgICAgICAgICAgICAgJHRhcmdldDogJHRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgW0FOTk9UQVRJT05fVEFSR0VUXTogY3VycmVudFRhcmdldFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnUmVjb3JkJzpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZVJlY29yZChcbiAgICAgICAgICAgICAgICBjb252ZXJ0ZXIsXG4gICAgICAgICAgICAgICAgY3VycmVudFRlcm0sXG4gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCxcbiAgICAgICAgICAgICAgICBjdXJyZW50UHJvcGVydHksXG4gICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlLlJlY29yZCxcbiAgICAgICAgICAgICAgICB2YWx1ZUZRTlxuICAgICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAnQ29sbGVjdGlvbic6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VDb2xsZWN0aW9uKFxuICAgICAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXJtLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsdWUuQ29sbGVjdGlvbixcbiAgICAgICAgICAgICAgICB2YWx1ZUZRTlxuICAgICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAnQXBwbHknOlxuICAgICAgICBjYXNlICdOdWxsJzpcbiAgICAgICAgY2FzZSAnTm90JzpcbiAgICAgICAgY2FzZSAnRXEnOlxuICAgICAgICBjYXNlICdOZSc6XG4gICAgICAgIGNhc2UgJ0d0JzpcbiAgICAgICAgY2FzZSAnR2UnOlxuICAgICAgICBjYXNlICdMdCc6XG4gICAgICAgIGNhc2UgJ0xlJzpcbiAgICAgICAgY2FzZSAnSWYnOlxuICAgICAgICBjYXNlICdBbmQnOlxuICAgICAgICBjYXNlICdPcic6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZTtcbiAgICB9XG59XG5cbi8qKlxuICogSW5mZXIgdGhlIHR5cGUgb2YgYSB0ZXJtIGJhc2VkIG9uIGl0cyB0eXBlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICAgICAgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSBhbm5vdGF0aW9uc1Rlcm0gICBUaGUgYW5ub3RhdGlvbiB0ZXJtXG4gKiBAcGFyYW0gYW5ub3RhdGlvblRhcmdldCAgVGhlIGFubm90YXRpb24gdGFyZ2V0XG4gKiBAcGFyYW0gY3VycmVudFByb3BlcnR5ICAgVGhlIGN1cnJlbnQgcHJvcGVydHkgb2YgdGhlIHJlY29yZFxuICogQHJldHVybnMgVGhlIGluZmVycmVkIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGluZmVyVHlwZUZyb21UZXJtKFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIGFubm90YXRpb25zVGVybTogc3RyaW5nLFxuICAgIGFubm90YXRpb25UYXJnZXQ6IHN0cmluZyxcbiAgICBjdXJyZW50UHJvcGVydHk/OiBzdHJpbmdcbikge1xuICAgIGxldCB0YXJnZXRUeXBlID0gKFRlcm1Ub1R5cGVzIGFzIGFueSlbYW5ub3RhdGlvbnNUZXJtXTtcbiAgICBpZiAoY3VycmVudFByb3BlcnR5KSB7XG4gICAgICAgIGFubm90YXRpb25zVGVybSA9IGAke3N1YnN0cmluZ0JlZm9yZUxhc3QoYW5ub3RhdGlvbnNUZXJtLCAnLicpfS4ke2N1cnJlbnRQcm9wZXJ0eX1gO1xuICAgICAgICB0YXJnZXRUeXBlID0gKFRlcm1Ub1R5cGVzIGFzIGFueSlbYW5ub3RhdGlvbnNUZXJtXTtcbiAgICB9XG5cbiAgICBjb252ZXJ0ZXIubG9nRXJyb3IoXG4gICAgICAgIGBUaGUgdHlwZSBvZiB0aGUgcmVjb3JkIHVzZWQgd2l0aGluIHRoZSB0ZXJtICR7YW5ub3RhdGlvbnNUZXJtfSB3YXMgbm90IGRlZmluZWQgYW5kIHdhcyBpbmZlcnJlZCBhcyAke3RhcmdldFR5cGV9LlxuSGludDogSWYgcG9zc2libGUsIHRyeSB0byBtYWludGFpbiB0aGUgVHlwZSBwcm9wZXJ0eSBmb3IgZWFjaCBSZWNvcmQuXG48QW5ub3RhdGlvbnMgVGFyZ2V0PVwiJHthbm5vdGF0aW9uVGFyZ2V0fVwiPlxuXHQ8QW5ub3RhdGlvbiBUZXJtPVwiJHthbm5vdGF0aW9uc1Rlcm19XCI+XG5cdFx0PFJlY29yZD4uLi48L1JlY29yZD5cblx0PC9Bbm5vdGF0aW9uPlxuPC9Bbm5vdGF0aW9ucz5gXG4gICAgKTtcblxuICAgIHJldHVybiB0YXJnZXRUeXBlO1xufVxuXG5mdW5jdGlvbiBpc0RhdGFGaWVsZFdpdGhGb3JBY3Rpb24oYW5ub3RhdGlvbkNvbnRlbnQ6IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIGFubm90YXRpb25Db250ZW50Lmhhc093blByb3BlcnR5KCdBY3Rpb24nKSAmJlxuICAgICAgICAoYW5ub3RhdGlvbkNvbnRlbnQuJFR5cGUgPT09ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb24nIHx8XG4gICAgICAgICAgICBhbm5vdGF0aW9uQ29udGVudC4kVHlwZSA9PT0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhBY3Rpb24nKVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVjb3JkVHlwZShcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBjdXJyZW50VGVybTogc3RyaW5nLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGFueSxcbiAgICBjdXJyZW50UHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICByZWNvcmREZWZpbml0aW9uOiBBbm5vdGF0aW9uUmVjb3JkXG4pIHtcbiAgICBsZXQgdGFyZ2V0VHlwZTtcbiAgICBpZiAoIXJlY29yZERlZmluaXRpb24udHlwZSAmJiBjdXJyZW50VGVybSkge1xuICAgICAgICB0YXJnZXRUeXBlID0gaW5mZXJUeXBlRnJvbVRlcm0oY29udmVydGVyLCBjdXJyZW50VGVybSwgY3VycmVudFRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUsIGN1cnJlbnRQcm9wZXJ0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0VHlwZSA9IGNvbnZlcnRlci51bmFsaWFzKHJlY29yZERlZmluaXRpb24udHlwZSk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXRUeXBlO1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlY29yZChcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBjdXJyZW50VGVybTogc3RyaW5nLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGFueSxcbiAgICBjdXJyZW50UHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBjdXJyZW50U291cmNlOiBzdHJpbmcsXG4gICAgYW5ub3RhdGlvblJlY29yZDogQW5ub3RhdGlvblJlY29yZCxcbiAgICBjdXJyZW50RlFOOiBzdHJpbmdcbikge1xuICAgIGNvbnN0IHJlY29yZDogYW55ID0ge1xuICAgICAgICAkVHlwZTogcGFyc2VSZWNvcmRUeXBlKGNvbnZlcnRlciwgY3VycmVudFRlcm0sIGN1cnJlbnRUYXJnZXQsIGN1cnJlbnRQcm9wZXJ0eSwgYW5ub3RhdGlvblJlY29yZCksXG4gICAgICAgIGZ1bGx5UXVhbGlmaWVkTmFtZTogY3VycmVudEZRTixcbiAgICAgICAgW0FOTk9UQVRJT05fVEFSR0VUXTogY3VycmVudFRhcmdldCxcbiAgICAgICAgX19zb3VyY2U6IGN1cnJlbnRTb3VyY2VcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eVZhbHVlIG9mIGFubm90YXRpb25SZWNvcmQucHJvcGVydHlWYWx1ZXMpIHtcbiAgICAgICAgbGF6eShyZWNvcmQsIHByb3BlcnR5VmFsdWUubmFtZSwgKCkgPT5cbiAgICAgICAgICAgIHBhcnNlVmFsdWUoXG4gICAgICAgICAgICAgICAgY29udmVydGVyLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICAgICAgY3VycmVudFRlcm0sXG4gICAgICAgICAgICAgICAgcHJvcGVydHlWYWx1ZS5uYW1lLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UsXG4gICAgICAgICAgICAgICAgcHJvcGVydHlWYWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICBgJHtjdXJyZW50RlFOfS8ke3Byb3BlcnR5VmFsdWUubmFtZX1gXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gYW5ub3RhdGlvbnMgb24gdGhlIHJlY29yZFxuICAgIGxhenkocmVjb3JkLCAnYW5ub3RhdGlvbnMnLCByZXNvbHZlQW5ub3RhdGlvbnNPbkFubm90YXRpb24oY29udmVydGVyLCBhbm5vdGF0aW9uUmVjb3JkLCByZWNvcmQpKTtcblxuICAgIGlmIChpc0RhdGFGaWVsZFdpdGhGb3JBY3Rpb24ocmVjb3JkKSkge1xuICAgICAgICBsYXp5KHJlY29yZCwgJ0FjdGlvblRhcmdldCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvblRhcmdldEZRTiA9IGNvbnZlcnRlci51bmFsaWFzKHJlY29yZC5BY3Rpb24/LnRvU3RyaW5nKCkpO1xuXG4gICAgICAgICAgICAvLyAoMSkgQm91bmQgYWN0aW9uIG9mIHRoZSBhbm5vdGF0aW9uIHRhcmdldD9cbiAgICAgICAgICAgIGxldCBhY3Rpb25UYXJnZXQgPSBjdXJyZW50VGFyZ2V0LmFjdGlvbnM/LlthY3Rpb25UYXJnZXRGUU5dO1xuXG4gICAgICAgICAgICBpZiAoIWFjdGlvblRhcmdldCkge1xuICAgICAgICAgICAgICAgIC8vICgyKSBBY3Rpb25JbXBvcnQgKD0gdW5ib3VuZCBhY3Rpb24pP1xuICAgICAgICAgICAgICAgIGFjdGlvblRhcmdldCA9IGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRBY3Rpb25JbXBvcnQoYWN0aW9uVGFyZ2V0RlFOKT8uYWN0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWFjdGlvblRhcmdldCkge1xuICAgICAgICAgICAgICAgIC8vICgzKSBCb3VuZCBhY3Rpb24gb2YgYSBkaWZmZXJlbnQgRW50aXR5VHlwZVxuICAgICAgICAgICAgICAgIGFjdGlvblRhcmdldCA9IGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRBY3Rpb24oYWN0aW9uVGFyZ2V0RlFOKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFjdGlvblRhcmdldD8uaXNCb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UYXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWFjdGlvblRhcmdldCkge1xuICAgICAgICAgICAgICAgIGNvbnZlcnRlci5sb2dFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYCR7cmVjb3JkLmZ1bGx5UXVhbGlmaWVkTmFtZX06IFVuYWJsZSB0byByZXNvbHZlICcke3JlY29yZC5BY3Rpb259JyAoJyR7YWN0aW9uVGFyZ2V0RlFOfScpYFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uVGFyZ2V0O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlY29yZDtcbn1cblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvblR5cGUgPVxuICAgIHwgJ1Byb3BlcnR5UGF0aCdcbiAgICB8ICdQYXRoJ1xuICAgIHwgJ0lmJ1xuICAgIHwgJ0FwcGx5J1xuICAgIHwgJ051bGwnXG4gICAgfCAnQW5kJ1xuICAgIHwgJ0VxJ1xuICAgIHwgJ05lJ1xuICAgIHwgJ05vdCdcbiAgICB8ICdHdCdcbiAgICB8ICdHZSdcbiAgICB8ICdMdCdcbiAgICB8ICdMZSdcbiAgICB8ICdPcidcbiAgICB8ICdBbm5vdGF0aW9uUGF0aCdcbiAgICB8ICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJ1xuICAgIHwgJ1JlY29yZCdcbiAgICB8ICdTdHJpbmcnXG4gICAgfCAnRW1wdHlDb2xsZWN0aW9uJztcblxuLyoqXG4gKiBSZXRyaWV2ZSBvciBpbmZlciB0aGUgY29sbGVjdGlvbiB0eXBlIGJhc2VkIG9uIGl0cyBjb250ZW50LlxuICpcbiAqIEBwYXJhbSBjb2xsZWN0aW9uRGVmaW5pdGlvblxuICogQHJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGNvbGxlY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2V0T3JJbmZlckNvbGxlY3Rpb25UeXBlKGNvbGxlY3Rpb25EZWZpbml0aW9uOiBhbnlbXSk6IENvbGxlY3Rpb25UeXBlIHtcbiAgICBsZXQgdHlwZTogQ29sbGVjdGlvblR5cGUgPSAoY29sbGVjdGlvbkRlZmluaXRpb24gYXMgYW55KS50eXBlO1xuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgJiYgY29sbGVjdGlvbkRlZmluaXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBmaXJzdENvbEl0ZW0gPSBjb2xsZWN0aW9uRGVmaW5pdGlvblswXTtcbiAgICAgICAgaWYgKGZpcnN0Q29sSXRlbS5oYXNPd25Qcm9wZXJ0eSgnUHJvcGVydHlQYXRoJykpIHtcbiAgICAgICAgICAgIHR5cGUgPSAnUHJvcGVydHlQYXRoJztcbiAgICAgICAgfSBlbHNlIGlmIChmaXJzdENvbEl0ZW0uaGFzT3duUHJvcGVydHkoJ1BhdGgnKSkge1xuICAgICAgICAgICAgdHlwZSA9ICdQYXRoJztcbiAgICAgICAgfSBlbHNlIGlmIChmaXJzdENvbEl0ZW0uaGFzT3duUHJvcGVydHkoJ0Fubm90YXRpb25QYXRoJykpIHtcbiAgICAgICAgICAgIHR5cGUgPSAnQW5ub3RhdGlvblBhdGgnO1xuICAgICAgICB9IGVsc2UgaWYgKGZpcnN0Q29sSXRlbS5oYXNPd25Qcm9wZXJ0eSgnTmF2aWdhdGlvblByb3BlcnR5UGF0aCcpKSB7XG4gICAgICAgICAgICB0eXBlID0gJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGZpcnN0Q29sSXRlbSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIChmaXJzdENvbEl0ZW0uaGFzT3duUHJvcGVydHkoJ3R5cGUnKSB8fCBmaXJzdENvbEl0ZW0uaGFzT3duUHJvcGVydHkoJ3Byb3BlcnR5VmFsdWVzJykpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdHlwZSA9ICdSZWNvcmQnO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaXJzdENvbEl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0eXBlID0gJ1N0cmluZyc7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0eXBlID0gJ0VtcHR5Q29sbGVjdGlvbic7XG4gICAgfVxuICAgIHJldHVybiB0eXBlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNvbGxlY3Rpb24oXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgY3VycmVudFRhcmdldDogYW55LFxuICAgIGN1cnJlbnRUZXJtOiBzdHJpbmcsXG4gICAgY3VycmVudFByb3BlcnR5OiBzdHJpbmcsXG4gICAgY3VycmVudFNvdXJjZTogc3RyaW5nLFxuICAgIGNvbGxlY3Rpb25EZWZpbml0aW9uOiBhbnlbXSxcbiAgICBwYXJlbnRGUU46IHN0cmluZ1xuKSB7XG4gICAgY29uc3QgY29sbGVjdGlvbkRlZmluaXRpb25UeXBlID0gZ2V0T3JJbmZlckNvbGxlY3Rpb25UeXBlKGNvbGxlY3Rpb25EZWZpbml0aW9uKTtcblxuICAgIHN3aXRjaCAoY29sbGVjdGlvbkRlZmluaXRpb25UeXBlKSB7XG4gICAgICAgIGNhc2UgJ1Byb3BlcnR5UGF0aCc6XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChwcm9wZXJ0eVBhdGgsIHByb3BlcnR5SWR4KTogUHJvcGVydHlQYXRoID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IFByb3BlcnR5UGF0aCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1Byb3BlcnR5UGF0aCcsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwcm9wZXJ0eVBhdGguUHJvcGVydHlQYXRoLFxuICAgICAgICAgICAgICAgICAgICBmdWxseVF1YWxpZmllZE5hbWU6IGAke3BhcmVudEZRTn0vJHtwcm9wZXJ0eUlkeH1gXG4gICAgICAgICAgICAgICAgfSBhcyBhbnk7XG5cbiAgICAgICAgICAgICAgICBsYXp5KFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgICckdGFyZ2V0JyxcbiAgICAgICAgICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVUYXJnZXQ8UHJvcGVydHk+KGNvbnZlcnRlciwgY3VycmVudFRhcmdldCwgcHJvcGVydHlQYXRoLlByb3BlcnR5UGF0aCwgY3VycmVudFRlcm0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRhcmdldCA/PyAoe30gYXMgUHJvcGVydHkpIC8vIFRPRE86ICR0YXJnZXQgaXMgbWFuZGF0b3J5IC0gdGhyb3cgYW4gZXJyb3I/XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdQYXRoJzpcbiAgICAgICAgICAgIC8vIFRPRE86IG1ha2UgbGF6eT9cbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uRGVmaW5pdGlvbi5tYXAoKHBhdGhWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlVGFyZ2V0KGNvbnZlcnRlciwgY3VycmVudFRhcmdldCwgcGF0aFZhbHVlLlBhdGgsIGN1cnJlbnRUZXJtKS50YXJnZXQ7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdBbm5vdGF0aW9uUGF0aCc6XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChhbm5vdGF0aW9uUGF0aCwgYW5ub3RhdGlvbklkeCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0Fubm90YXRpb25QYXRoJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFubm90YXRpb25QYXRoLkFubm90YXRpb25QYXRoLFxuICAgICAgICAgICAgICAgICAgICBmdWxseVF1YWxpZmllZE5hbWU6IGAke3BhcmVudEZRTn0vJHthbm5vdGF0aW9uSWR4fWAsXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zVGVybTogY3VycmVudFRlcm0sXG4gICAgICAgICAgICAgICAgICAgIHRlcm06ICcnLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiAnJ1xuICAgICAgICAgICAgICAgIH0gYXMgYW55O1xuXG4gICAgICAgICAgICAgICAgbGF6eShcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAnJHRhcmdldCcsXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHJlc29sdmVUYXJnZXQoY29udmVydGVyLCBjdXJyZW50VGFyZ2V0LCBhbm5vdGF0aW9uUGF0aC5Bbm5vdGF0aW9uUGF0aCwgY3VycmVudFRlcm0pLnRhcmdldFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCc6XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChuYXZQcm9wZXJ0eVBhdGgsIG5hdlByb3BJZHgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2UHJvcGVydHlQYXRoLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPz8gJyc7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCcsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuICAgICAgICAgICAgICAgICAgICBmdWxseVF1YWxpZmllZE5hbWU6IGAke3BhcmVudEZRTn0vJHtuYXZQcm9wSWR4fWBcbiAgICAgICAgICAgICAgICB9IGFzIGFueTtcblxuICAgICAgICAgICAgICAgIGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuJHRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsYXp5KFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgJyR0YXJnZXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4gcmVzb2x2ZVRhcmdldChjb252ZXJ0ZXIsIGN1cnJlbnRUYXJnZXQsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIGN1cnJlbnRUZXJtKS50YXJnZXRcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSAnUmVjb3JkJzpcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uRGVmaW5pdGlvbi5tYXAoKHJlY29yZERlZmluaXRpb24sIHJlY29yZElkeCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVJlY29yZChcbiAgICAgICAgICAgICAgICAgICAgY29udmVydGVyLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGVybSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFByb3BlcnR5LFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlLFxuICAgICAgICAgICAgICAgICAgICByZWNvcmREZWZpbml0aW9uLFxuICAgICAgICAgICAgICAgICAgICBgJHtwYXJlbnRGUU59LyR7cmVjb3JkSWR4fWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSAnQXBwbHknOlxuICAgICAgICBjYXNlICdOdWxsJzpcbiAgICAgICAgY2FzZSAnSWYnOlxuICAgICAgICBjYXNlICdFcSc6XG4gICAgICAgIGNhc2UgJ05lJzpcbiAgICAgICAgY2FzZSAnTHQnOlxuICAgICAgICBjYXNlICdHdCc6XG4gICAgICAgIGNhc2UgJ0xlJzpcbiAgICAgICAgY2FzZSAnR2UnOlxuICAgICAgICBjYXNlICdOb3QnOlxuICAgICAgICBjYXNlICdBbmQnOlxuICAgICAgICBjYXNlICdPcic6XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChpZlZhbHVlKSA9PiBpZlZhbHVlKTtcblxuICAgICAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgoc3RyaW5nVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHN0cmluZ1ZhbHVlID09PSAnc3RyaW5nJyB8fCBzdHJpbmdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUuU3RyaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoY29sbGVjdGlvbkRlZmluaXRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBjYXNlJyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc1Y0TmF2aWdhdGlvblByb3BlcnR5KFxuICAgIG5hdlByb3A6IFJhd1YyTmF2aWdhdGlvblByb3BlcnR5IHwgUmF3VjROYXZpZ2F0aW9uUHJvcGVydHlcbik6IG5hdlByb3AgaXMgUmF3VjROYXZpZ2F0aW9uUHJvcGVydHkge1xuICAgIHJldHVybiAhIShuYXZQcm9wIGFzIEJhc2VOYXZpZ2F0aW9uUHJvcGVydHkpLnRhcmdldFR5cGVOYW1lO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0QW5ub3RhdGlvbihjb252ZXJ0ZXI6IENvbnZlcnRlciwgdGFyZ2V0OiBhbnksIHJhd0Fubm90YXRpb246IFJhd0Fubm90YXRpb24pOiBBbm5vdGF0aW9uIHtcbiAgICBsZXQgYW5ub3RhdGlvbjogYW55O1xuICAgIGlmIChyYXdBbm5vdGF0aW9uLnJlY29yZCkge1xuICAgICAgICBhbm5vdGF0aW9uID0gcGFyc2VSZWNvcmQoXG4gICAgICAgICAgICBjb252ZXJ0ZXIsXG4gICAgICAgICAgICByYXdBbm5vdGF0aW9uLnRlcm0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIChyYXdBbm5vdGF0aW9uIGFzIGFueSkuX19zb3VyY2UsXG4gICAgICAgICAgICByYXdBbm5vdGF0aW9uLnJlY29yZCxcbiAgICAgICAgICAgIChyYXdBbm5vdGF0aW9uIGFzIGFueSkuZnVsbHlRdWFsaWZpZWROYW1lXG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChyYXdBbm5vdGF0aW9uLmNvbGxlY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhbm5vdGF0aW9uID0gcGFyc2VWYWx1ZShcbiAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb24udGVybSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgKHJhd0Fubm90YXRpb24gYXMgYW55KS5fX3NvdXJjZSxcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb24udmFsdWUgPz8geyB0eXBlOiAnQm9vbCcsIEJvb2w6IHRydWUgfSxcbiAgICAgICAgICAgIChyYXdBbm5vdGF0aW9uIGFzIGFueSkuZnVsbHlRdWFsaWZpZWROYW1lXG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChyYXdBbm5vdGF0aW9uLmNvbGxlY3Rpb24pIHtcbiAgICAgICAgYW5ub3RhdGlvbiA9IHBhcnNlQ29sbGVjdGlvbihcbiAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb24udGVybSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgKHJhd0Fubm90YXRpb24gYXMgYW55KS5fX3NvdXJjZSxcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb24uY29sbGVjdGlvbixcbiAgICAgICAgICAgIChyYXdBbm5vdGF0aW9uIGFzIGFueSkuZnVsbHlRdWFsaWZpZWROYW1lXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBjYXNlJyk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlb2YgYW5ub3RhdGlvbikge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy13cmFwcGVyc1xuICAgICAgICAgICAgYW5ub3RhdGlvbiA9IG5ldyBTdHJpbmcoYW5ub3RhdGlvbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LXdyYXBwZXJzXG4gICAgICAgICAgICBhbm5vdGF0aW9uID0gbmV3IEJvb2xlYW4oYW5ub3RhdGlvbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgIGFubm90YXRpb24gPSBuZXcgTnVtYmVyKGFubm90YXRpb24pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBhbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA9IChyYXdBbm5vdGF0aW9uIGFzIGFueSkuZnVsbHlRdWFsaWZpZWROYW1lO1xuICAgIGFubm90YXRpb25bQU5OT1RBVElPTl9UQVJHRVRdID0gdGFyZ2V0O1xuXG4gICAgY29uc3QgW3ZvY0FsaWFzLCB2b2NUZXJtXSA9IGNvbnZlcnRlci5zcGxpdFRlcm0ocmF3QW5ub3RhdGlvbi50ZXJtKTtcblxuICAgIGFubm90YXRpb24udGVybSA9IGNvbnZlcnRlci51bmFsaWFzKGAke3ZvY0FsaWFzfS4ke3ZvY1Rlcm19YCwgVm9jYWJ1bGFyeVJlZmVyZW5jZXMpO1xuICAgIGFubm90YXRpb24ucXVhbGlmaWVyID0gcmF3QW5ub3RhdGlvbi5xdWFsaWZpZXI7XG4gICAgYW5ub3RhdGlvbi5fX3NvdXJjZSA9IChyYXdBbm5vdGF0aW9uIGFzIGFueSkuX19zb3VyY2U7XG5cbiAgICB0cnkge1xuICAgICAgICBsYXp5KGFubm90YXRpb24sICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9uc09uQW5ub3RhdGlvbihjb252ZXJ0ZXIsIHJhd0Fubm90YXRpb24sIGFubm90YXRpb24pKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIG5vdCBhbiBlcnJvcjogcGFyc2VSZWNvcmQoKSBhbHJlYWR5IGFkZHMgYW5ub3RhdGlvbnMsIGJ1dCB0aGUgb3RoZXIgcGFyc2VYWFggZnVuY3Rpb25zIGRvbid0LCBzbyB0aGlzIGNhbiBoYXBwZW5cbiAgICB9XG5cbiAgICByZXR1cm4gYW5ub3RhdGlvbiBhcyBBbm5vdGF0aW9uO1xufVxuXG4vKipcbiAqIE1lcmdlIGFubm90YXRpb24gZnJvbSBkaWZmZXJlbnQgc291cmNlIHRvZ2V0aGVyIGJ5IG92ZXJ3cml0aW5nIGF0IHRoZSB0ZXJtIGxldmVsLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJcbiAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgbWVyZ2VkIGFubm90YXRpb25zXG4gKi9cbmZ1bmN0aW9uIG1lcmdlQW5ub3RhdGlvbnMoY29udmVydGVyOiBDb252ZXJ0ZXIpOiBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uW10+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY29udmVydGVyLnJhd1NjaGVtYS5hbm5vdGF0aW9ucykucmVkdWNlUmlnaHQoKGFubm90YXRpb25zUGVyVGFyZ2V0LCBhbm5vdGF0aW9uU291cmNlKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgeyB0YXJnZXQsIGFubm90YXRpb25zOiByYXdBbm5vdGF0aW9ucyB9IG9mIGNvbnZlcnRlci5yYXdTY2hlbWEuYW5ub3RhdGlvbnNbYW5ub3RhdGlvblNvdXJjZV0pIHtcbiAgICAgICAgICAgIGlmICghYW5ub3RhdGlvbnNQZXJUYXJnZXRbdGFyZ2V0XSkge1xuICAgICAgICAgICAgICAgIGFubm90YXRpb25zUGVyVGFyZ2V0W3RhcmdldF0gPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYW5ub3RhdGlvbnNQZXJUYXJnZXRbdGFyZ2V0XS5wdXNoKFxuICAgICAgICAgICAgICAgIC4uLnJhd0Fubm90YXRpb25zXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAocmF3QW5ub3RhdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYW5ub3RhdGlvbnNQZXJUYXJnZXRbdGFyZ2V0XS5zb21lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhpc3RpbmdBbm5vdGF0aW9uKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBbm5vdGF0aW9uLnRlcm0gPT09IHJhd0Fubm90YXRpb24udGVybSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBbm5vdGF0aW9uLnF1YWxpZmllciA9PT0gcmF3QW5ub3RhdGlvbi5xdWFsaWZpZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgocmF3QW5ub3RhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFubm90YXRpb25GUU4gPSBgJHt0YXJnZXR9QCR7Y29udmVydGVyLnVuYWxpYXMocmF3QW5ub3RhdGlvbi50ZXJtKX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhd0Fubm90YXRpb24ucXVhbGlmaWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbkZRTiA9IGAke2Fubm90YXRpb25GUU59IyR7cmF3QW5ub3RhdGlvbi5xdWFsaWZpZXJ9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5ub3RhdGlvbiA9IHJhd0Fubm90YXRpb24gYXMgQW5ub3RhdGlvbiAmIHsgX19zb3VyY2U6IHN0cmluZyB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgPSBhbm5vdGF0aW9uRlFOO1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbi5fX3NvdXJjZSA9IGFubm90YXRpb25Tb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYW5ub3RhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYW5ub3RhdGlvbnNQZXJUYXJnZXQ7XG4gICAgfSwge30gYXMgUmVjb3JkPHN0cmluZywgQW5ub3RhdGlvbltdPik7XG59XG5cbmNsYXNzIENvbnZlcnRlciB7XG4gICAgcHJpdmF0ZSBhbm5vdGF0aW9uc0J5VGFyZ2V0OiBSZWNvcmQ8RnVsbHlRdWFsaWZpZWROYW1lLCBBbm5vdGF0aW9uW10+O1xuXG4gICAgLyoqXG4gICAgICogR2V0IHByZXByb2Nlc3NlZCBhbm5vdGF0aW9ucyBvbiB0aGUgc3BlY2lmaWVkIHRhcmdldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YXJnZXQgICAgVGhlIGFubm90YXRpb24gdGFyZ2V0XG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgYW5ub3RhdGlvbnNcbiAgICAgKi9cbiAgICBnZXRBbm5vdGF0aW9ucyh0YXJnZXQ6IEZ1bGx5UXVhbGlmaWVkTmFtZSk6IEFubm90YXRpb25bXSB7XG4gICAgICAgIGlmICh0aGlzLmFubm90YXRpb25zQnlUYXJnZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5hbm5vdGF0aW9uc0J5VGFyZ2V0ID0gbWVyZ2VBbm5vdGF0aW9ucyh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFubm90YXRpb25zQnlUYXJnZXRbdGFyZ2V0XSA/PyBbXTtcbiAgICB9XG5cbiAgICBnZXRDb252ZXJ0ZWRFbnRpdHlDb250YWluZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbnZlcnRlZEVsZW1lbnQoXG4gICAgICAgICAgICB0aGlzLnJhd01ldGFkYXRhLnNjaGVtYS5lbnRpdHlDb250YWluZXIuZnVsbHlRdWFsaWZpZWROYW1lLFxuICAgICAgICAgICAgdGhpcy5yYXdNZXRhZGF0YS5zY2hlbWEuZW50aXR5Q29udGFpbmVyLFxuICAgICAgICAgICAgY29udmVydEVudGl0eUNvbnRhaW5lclxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldENvbnZlcnRlZEVudGl0eVNldChmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0ZWRPdXRwdXQuZW50aXR5U2V0cy5ieV9mdWxseVF1YWxpZmllZE5hbWUoZnVsbHlRdWFsaWZpZWROYW1lKTtcbiAgICB9XG5cbiAgICBnZXRDb252ZXJ0ZWRTaW5nbGV0b24oZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVkT3V0cHV0LnNpbmdsZXRvbnMuYnlfZnVsbHlRdWFsaWZpZWROYW1lKGZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgfVxuXG4gICAgZ2V0Q29udmVydGVkRW50aXR5VHlwZShmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0ZWRPdXRwdXQuZW50aXR5VHlwZXMuYnlfZnVsbHlRdWFsaWZpZWROYW1lKGZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgfVxuXG4gICAgZ2V0Q29udmVydGVkQ29tcGxleFR5cGUoZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVkT3V0cHV0LmNvbXBsZXhUeXBlcy5ieV9mdWxseVF1YWxpZmllZE5hbWUoZnVsbHlRdWFsaWZpZWROYW1lKTtcbiAgICB9XG5cbiAgICBnZXRDb252ZXJ0ZWRUeXBlRGVmaW5pdGlvbihmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0ZWRPdXRwdXQudHlwZURlZmluaXRpb25zLmJ5X2Z1bGx5UXVhbGlmaWVkTmFtZShmdWxseVF1YWxpZmllZE5hbWUpO1xuICAgIH1cblxuICAgIGdldENvbnZlcnRlZEFjdGlvbkltcG9ydChmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSkge1xuICAgICAgICBsZXQgYWN0aW9uSW1wb3J0ID0gdGhpcy5jb252ZXJ0ZWRPdXRwdXQuYWN0aW9uSW1wb3J0cy5ieV9mdWxseVF1YWxpZmllZE5hbWUoZnVsbHlRdWFsaWZpZWROYW1lKTtcbiAgICAgICAgaWYgKCFhY3Rpb25JbXBvcnQpIHtcbiAgICAgICAgICAgIGFjdGlvbkltcG9ydCA9IHRoaXMuY29udmVydGVkT3V0cHV0LmFjdGlvbkltcG9ydHMuYnlfbmFtZShmdWxseVF1YWxpZmllZE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY3Rpb25JbXBvcnQ7XG4gICAgfVxuXG4gICAgZ2V0Q29udmVydGVkQWN0aW9uKGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZE91dHB1dC5hY3Rpb25zLmJ5X2Z1bGx5UXVhbGlmaWVkTmFtZShmdWxseVF1YWxpZmllZE5hbWUpO1xuICAgIH1cblxuICAgIGNvbnZlcnQ8Q29udmVydGVkLCBSYXcgZXh0ZW5kcyBSYXdUeXBlPENvbnZlcnRlZD4+KFxuICAgICAgICByYXdWYWx1ZTogUmF3LFxuICAgICAgICBtYXA6IChjb252ZXJ0ZXI6IENvbnZlcnRlciwgcmF3OiBSYXcpID0+IENvbnZlcnRlZFxuICAgICk6ICgpID0+IENvbnZlcnRlZDtcbiAgICBjb252ZXJ0PENvbnZlcnRlZCwgUmF3IGV4dGVuZHMgUmF3VHlwZTxDb252ZXJ0ZWQ+LCBJbmRleFByb3BlcnR5IGV4dGVuZHMgRXh0cmFjdDxrZXlvZiBDb252ZXJ0ZWQsIHN0cmluZz4+KFxuICAgICAgICByYXdWYWx1ZTogUmF3W10sXG4gICAgICAgIG1hcDogKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXc6IFJhdykgPT4gQ29udmVydGVkXG4gICAgKTogKCkgPT4gQXJyYXlXaXRoSW5kZXg8Q29udmVydGVkLCBJbmRleFByb3BlcnR5PjtcbiAgICBjb252ZXJ0PENvbnZlcnRlZCwgUmF3IGV4dGVuZHMgUmF3VHlwZTxDb252ZXJ0ZWQ+LCBJbmRleFByb3BlcnR5IGV4dGVuZHMgRXh0cmFjdDxrZXlvZiBDb252ZXJ0ZWQsIHN0cmluZz4+KFxuICAgICAgICByYXdWYWx1ZTogUmF3IHwgUmF3W10sXG4gICAgICAgIG1hcDogKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXc6IFJhdykgPT4gQ29udmVydGVkXG4gICAgKTogKCgpID0+IENvbnZlcnRlZCkgfCAoKCkgPT4gQXJyYXlXaXRoSW5kZXg8Q29udmVydGVkLCBJbmRleFByb3BlcnR5Pikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyYXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udmVydGVkID0gcmF3VmFsdWUucmVkdWNlKChjb252ZXJ0ZWRFbGVtZW50cywgcmF3RWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZWRFbGVtZW50ID0gdGhpcy5nZXRDb252ZXJ0ZWRFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgKHJhd0VsZW1lbnQgYXMgYW55KS5mdWxseVF1YWxpZmllZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXdFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb252ZXJ0ZWRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWRFbGVtZW50cy5wdXNoKGNvbnZlcnRlZEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZWRFbGVtZW50cztcbiAgICAgICAgICAgICAgICB9LCBbXSBhcyBDb252ZXJ0ZWRbXSk7XG4gICAgICAgICAgICAgICAgYWRkR2V0QnlWYWx1ZShjb252ZXJ0ZWQsICduYW1lJyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIGFkZEdldEJ5VmFsdWUoY29udmVydGVkLCAnZnVsbHlRdWFsaWZpZWROYW1lJyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZWQgYXMgQXJyYXlXaXRoSW5kZXg8Q29udmVydGVkLCBJbmRleFByb3BlcnR5PjtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4gdGhpcy5nZXRDb252ZXJ0ZWRFbGVtZW50KHJhd1ZhbHVlLmZ1bGx5UXVhbGlmaWVkTmFtZSwgcmF3VmFsdWUsIG1hcCkhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByYXdNZXRhZGF0YTogUmF3TWV0YWRhdGE7XG4gICAgcHJpdmF0ZSBjb252ZXJ0ZWRFbGVtZW50czogTWFwPEZ1bGx5UXVhbGlmaWVkTmFtZSwgYW55PiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIGNvbnZlcnRlZE91dHB1dDogQ29udmVydGVkTWV0YWRhdGE7XG5cbiAgICByYXdTY2hlbWE6IFJhd1NjaGVtYTtcblxuICAgIGNvbnN0cnVjdG9yKHJhd01ldGFkYXRhOiBSYXdNZXRhZGF0YSwgY29udmVydGVkT3V0cHV0OiBDb252ZXJ0ZWRNZXRhZGF0YSkge1xuICAgICAgICB0aGlzLnJhd01ldGFkYXRhID0gcmF3TWV0YWRhdGE7XG4gICAgICAgIHRoaXMucmF3U2NoZW1hID0gcmF3TWV0YWRhdGEuc2NoZW1hO1xuICAgICAgICB0aGlzLmNvbnZlcnRlZE91dHB1dCA9IGNvbnZlcnRlZE91dHB1dDtcbiAgICB9XG5cbiAgICBnZXRDb252ZXJ0ZWRFbGVtZW50PENvbnZlcnRlZFR5cGUsIFJhd1R5cGUgZXh0ZW5kcyBSZW1vdmVBbm5vdGF0aW9uQW5kVHlwZTxDb252ZXJ0ZWRUeXBlPj4oXG4gICAgICAgIGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lLFxuICAgICAgICByYXdFbGVtZW50OiBSYXdUeXBlIHwgdW5kZWZpbmVkIHwgKChmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSkgPT4gUmF3VHlwZSB8IHVuZGVmaW5lZCksXG4gICAgICAgIG1hcDogKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXc6IFJhd1R5cGUpID0+IENvbnZlcnRlZFR5cGVcbiAgICApOiBDb252ZXJ0ZWRUeXBlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgbGV0IGNvbnZlcnRlZDogQ29udmVydGVkVHlwZSB8IHVuZGVmaW5lZCA9IHRoaXMuY29udmVydGVkRWxlbWVudHMuZ2V0KGZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgICAgIGlmIChjb252ZXJ0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgcmF3TWV0YWRhdGEgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiByYXdFbGVtZW50ID09PSAnZnVuY3Rpb24nID8gcmF3RWxlbWVudC5hcHBseSh1bmRlZmluZWQsIFtmdWxseVF1YWxpZmllZE5hbWVdKSA6IHJhd0VsZW1lbnQ7XG4gICAgICAgICAgICBpZiAocmF3TWV0YWRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnZlcnRlZCA9IG1hcC5hcHBseSh1bmRlZmluZWQsIFt0aGlzLCByYXdNZXRhZGF0YV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udmVydGVkRWxlbWVudHMuc2V0KGZ1bGx5UXVhbGlmaWVkTmFtZSwgY29udmVydGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udmVydGVkO1xuICAgIH1cblxuICAgIGxvZ0Vycm9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0aGlzLmNvbnZlcnRlZE91dHB1dC5kaWFnbm9zdGljcy5wdXNoKHsgbWVzc2FnZSB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTcGxpdCB0aGUgYWxpYXMgZnJvbSB0aGUgdGVybSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0ZXJtIHRoZSB2YWx1ZSBvZiB0aGUgdGVybVxuICAgICAqIEByZXR1cm5zIHRoZSB0ZXJtIGFsaWFzIGFuZCB0aGUgYWN0dWFsIHRlcm0gdmFsdWVcbiAgICAgKi9cbiAgICBzcGxpdFRlcm0odGVybTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGFsaWFzZWQgPSBhbGlhcyhWb2NhYnVsYXJ5UmVmZXJlbmNlcywgdGVybSk7XG4gICAgICAgIHJldHVybiBzcGxpdEF0TGFzdChhbGlhc2VkLCAnLicpO1xuICAgIH1cblxuICAgIHVuYWxpYXModmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgcmVmZXJlbmNlcyA9IHRoaXMucmF3TWV0YWRhdGEucmVmZXJlbmNlcykge1xuICAgICAgICByZXR1cm4gdW5hbGlhcyhyZWZlcmVuY2VzLCB2YWx1ZSwgdGhpcy5yYXdTY2hlbWEubmFtZXNwYWNlKSA/PyAnJztcbiAgICB9XG59XG5cbnR5cGUgUmF3VHlwZTxUPiA9IFJlbW92ZUFubm90YXRpb25BbmRUeXBlPFQ+ICYgeyBmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSB9O1xuXG5mdW5jdGlvbiByZXNvbHZlRW50aXR5VHlwZShjb252ZXJ0ZXI6IENvbnZlcnRlciwgZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUpIHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBsZXQgZW50aXR5VHlwZSA9IGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRFbnRpdHlUeXBlKGZ1bGx5UXVhbGlmaWVkTmFtZSk7XG5cbiAgICAgICAgaWYgKCFlbnRpdHlUeXBlKSB7XG4gICAgICAgICAgICBjb252ZXJ0ZXIubG9nRXJyb3IoYEVudGl0eVR5cGUgJyR7ZnVsbHlRdWFsaWZpZWROYW1lfScgbm90IGZvdW5kYCk7XG4gICAgICAgICAgICBlbnRpdHlUeXBlID0ge30gYXMgRW50aXR5VHlwZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50aXR5VHlwZTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3MoXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgcmF3TmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3M6IFNpbmdsZXRvblsnbmF2aWdhdGlvblByb3BlcnR5QmluZGluZyddIHwgRW50aXR5U2V0WyduYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nJ10sXG4gICAgcmF3RWxlbWVudDogUmF3U2luZ2xldG9uIHwgUmF3RW50aXR5U2V0XG4pIHtcbiAgICByZXR1cm4gKCkgPT5cbiAgICAgICAgT2JqZWN0LmtleXMocmF3TmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3MpLnJlZHVjZSgobmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3MsIGJpbmRpbmdOYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByYXdCaW5kaW5nVGFyZ2V0ID0gcmF3TmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3NbYmluZGluZ05hbWVdO1xuXG4gICAgICAgICAgICBsYXp5KG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzLCBiaW5kaW5nTmFtZSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXNvbHZlZEJpbmRpbmdUYXJnZXQ7XG4gICAgICAgICAgICAgICAgaWYgKHJhd0JpbmRpbmdUYXJnZXQuX3R5cGUgPT09ICdTaW5nbGV0b24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkQmluZGluZ1RhcmdldCA9IGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRTaW5nbGV0b24ocmF3QmluZGluZ1RhcmdldC5mdWxseVF1YWxpZmllZE5hbWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkQmluZGluZ1RhcmdldCA9IGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRFbnRpdHlTZXQocmF3QmluZGluZ1RhcmdldC5mdWxseVF1YWxpZmllZE5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXJlc29sdmVkQmluZGluZ1RhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZXIubG9nRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtyYXdFbGVtZW50Ll90eXBlfSAnJHtyYXdFbGVtZW50LmZ1bGx5UXVhbGlmaWVkTmFtZX0nOiBGYWlsZWQgdG8gcmVzb2x2ZSBOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nICR7YmluZGluZ05hbWV9YFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZEJpbmRpbmdUYXJnZXQgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlZEJpbmRpbmdUYXJnZXQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncztcbiAgICAgICAgfSwge30gYXMgRW50aXR5U2V0WyduYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nJ10gfCBTaW5nbGV0b25bJ25hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcnXSk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVBbm5vdGF0aW9ucyhjb252ZXJ0ZXI6IENvbnZlcnRlciwgcmF3QW5ub3RhdGlvblRhcmdldDogYW55KSB7XG4gICAgY29uc3QgbmVzdGVkQW5ub3RhdGlvbnMgPSByYXdBbm5vdGF0aW9uVGFyZ2V0LmFubm90YXRpb25zO1xuXG4gICAgcmV0dXJuICgpID0+XG4gICAgICAgIGNyZWF0ZUFubm90YXRpb25zT2JqZWN0KFxuICAgICAgICAgICAgY29udmVydGVyLFxuICAgICAgICAgICAgcmF3QW5ub3RhdGlvblRhcmdldCxcbiAgICAgICAgICAgIG5lc3RlZEFubm90YXRpb25zID8/IGNvbnZlcnRlci5nZXRBbm5vdGF0aW9ucyhyYXdBbm5vdGF0aW9uVGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZSlcbiAgICAgICAgKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUFubm90YXRpb25zT25Bbm5vdGF0aW9uKFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIGFubm90YXRpb25SZWNvcmQ6IEFubm90YXRpb25SZWNvcmQgfCBSYXdBbm5vdGF0aW9uLFxuICAgIGFubm90YXRpb25UZXJtOiBhbnlcbikge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGUU4gPSBhbm5vdGF0aW9uVGVybS5mdWxseVF1YWxpZmllZE5hbWU7XG5cbiAgICAgICAgLy8gYmUgZ3JhY2VmdWwgd2hlbiByZXNvbHZpbmcgYW5ub3RhdGlvbnMgb24gYW5ub3RhdGlvbnM6IFNvbWV0aW1lcyB0aGV5IGFyZSByZWZlcmVuY2VkIGRpcmVjdGx5LCBzb21ldGltZXMgdGhleVxuICAgICAgICAvLyBhcmUgcGFydCBvZiB0aGUgZ2xvYmFsIGFubm90YXRpb25zIGxpc3RcbiAgICAgICAgbGV0IGFubm90YXRpb25zO1xuICAgICAgICBpZiAoYW5ub3RhdGlvblJlY29yZC5hbm5vdGF0aW9ucyAmJiBhbm5vdGF0aW9uUmVjb3JkLmFubm90YXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGFubm90YXRpb25zID0gYW5ub3RhdGlvblJlY29yZC5hbm5vdGF0aW9ucztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFubm90YXRpb25zID0gY29udmVydGVyLmdldEFubm90YXRpb25zKGN1cnJlbnRGUU4pO1xuICAgICAgICB9XG5cbiAgICAgICAgYW5ub3RhdGlvbnM/LmZvckVhY2goKGFubm90YXRpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgYW5ub3RhdGlvbi50YXJnZXQgPSBjdXJyZW50RlFOO1xuICAgICAgICAgICAgYW5ub3RhdGlvbi5fX3NvdXJjZSA9IGFubm90YXRpb25UZXJtLl9fc291cmNlO1xuICAgICAgICAgICAgYW5ub3RhdGlvbltBTk5PVEFUSU9OX1RBUkdFVF0gPSBhbm5vdGF0aW9uVGVybVtBTk5PVEFUSU9OX1RBUkdFVF07XG4gICAgICAgICAgICBhbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA9IGAke2N1cnJlbnRGUU59QCR7YW5ub3RhdGlvbi50ZXJtfWA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVBbm5vdGF0aW9uc09iamVjdChjb252ZXJ0ZXIsIGFubm90YXRpb25UZXJtLCBhbm5vdGF0aW9ucyA/PyBbXSk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQW5ub3RhdGlvbnNPYmplY3QoY29udmVydGVyOiBDb252ZXJ0ZXIsIHRhcmdldDogYW55LCByYXdBbm5vdGF0aW9uczogUmF3QW5ub3RhdGlvbltdKSB7XG4gICAgcmV0dXJuIHJhd0Fubm90YXRpb25zLnJlZHVjZSgodm9jYWJ1bGFyeUFsaWFzZXMsIGFubm90YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgW3ZvY0FsaWFzLCB2b2NUZXJtXSA9IGNvbnZlcnRlci5zcGxpdFRlcm0oYW5ub3RhdGlvbi50ZXJtKTtcbiAgICAgICAgY29uc3Qgdm9jVGVybVdpdGhRdWFsaWZpZXIgPSBgJHt2b2NUZXJtfSR7YW5ub3RhdGlvbi5xdWFsaWZpZXIgPyAnIycgKyBhbm5vdGF0aW9uLnF1YWxpZmllciA6ICcnfWA7XG5cbiAgICAgICAgaWYgKHZvY2FidWxhcnlBbGlhc2VzW3ZvY0FsaWFzXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2b2NhYnVsYXJ5QWxpYXNlc1t2b2NBbGlhc10gPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdm9jYWJ1bGFyeUFsaWFzZXNbdm9jQWxpYXNdLmhhc093blByb3BlcnR5KHZvY1Rlcm1XaXRoUXVhbGlmaWVyKSkge1xuICAgICAgICAgICAgbGF6eSh2b2NhYnVsYXJ5QWxpYXNlc1t2b2NBbGlhc10sIHZvY1Rlcm1XaXRoUXVhbGlmaWVyLCAoKSA9PlxuICAgICAgICAgICAgICAgIGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAoYW5ub3RhdGlvbiBhcyBBbm5vdGF0aW9uKS5mdWxseVF1YWxpZmllZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb24sXG4gICAgICAgICAgICAgICAgICAgIChjb252ZXJ0ZXIsIHJhd0Fubm90YXRpb24pID0+IGNvbnZlcnRBbm5vdGF0aW9uKGNvbnZlcnRlciwgdGFyZ2V0LCByYXdBbm5vdGF0aW9uKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZvY2FidWxhcnlBbGlhc2VzO1xuICAgIH0sIHt9IGFzIGFueSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gRW50aXR5Q29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd0VudGl0eUNvbnRhaW5lciAgICBVbmNvbnZlcnRlZCBFbnRpdHlDb250YWluZXJcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgRW50aXR5Q29udGFpbmVyXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRFbnRpdHlDb250YWluZXIoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd0VudGl0eUNvbnRhaW5lcjogUmF3RW50aXR5Q29udGFpbmVyKTogRW50aXR5Q29udGFpbmVyIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRFbnRpdHlDb250YWluZXIgPSByYXdFbnRpdHlDb250YWluZXIgYXMgRW50aXR5Q29udGFpbmVyO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlDb250YWluZXIsICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9ucyhjb252ZXJ0ZXIsIHJhd0VudGl0eUNvbnRhaW5lcikpO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlDb250YWluZXIsICdlbnRpdHlTZXRzJywgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5lbnRpdHlTZXRzLCBjb252ZXJ0RW50aXR5U2V0KSk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEVudGl0eUNvbnRhaW5lciwgJ3NpbmdsZXRvbnMnLCBjb252ZXJ0ZXIuY29udmVydChjb252ZXJ0ZXIucmF3U2NoZW1hLnNpbmdsZXRvbnMsIGNvbnZlcnRTaW5nbGV0b24pKTtcblxuICAgIGxhenkoXG4gICAgICAgIGNvbnZlcnRlZEVudGl0eUNvbnRhaW5lcixcbiAgICAgICAgJ2FjdGlvbkltcG9ydHMnLFxuICAgICAgICBjb252ZXJ0ZXIuY29udmVydChjb252ZXJ0ZXIucmF3U2NoZW1hLmFjdGlvbkltcG9ydHMsIGNvbnZlcnRBY3Rpb25JbXBvcnQpXG4gICAgKTtcblxuICAgIHJldHVybiBjb252ZXJ0ZWRFbnRpdHlDb250YWluZXI7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBTaW5nbGV0b24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd1NpbmdsZXRvbiAgVW5jb252ZXJ0ZWQgU2luZ2xldG9uXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIFNpbmdsZXRvblxuICovXG5mdW5jdGlvbiBjb252ZXJ0U2luZ2xldG9uKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdTaW5nbGV0b246IFJhd1NpbmdsZXRvbik6IFNpbmdsZXRvbiB7XG4gICAgY29uc3QgY29udmVydGVkU2luZ2xldG9uID0gcmF3U2luZ2xldG9uIGFzIFNpbmdsZXRvbjtcblxuICAgIGxhenkoY29udmVydGVkU2luZ2xldG9uLCAnZW50aXR5VHlwZScsIHJlc29sdmVFbnRpdHlUeXBlKGNvbnZlcnRlciwgcmF3U2luZ2xldG9uLmVudGl0eVR5cGVOYW1lKSk7XG4gICAgbGF6eShjb252ZXJ0ZWRTaW5nbGV0b24sICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9ucyhjb252ZXJ0ZXIsIHJhd1NpbmdsZXRvbiBhcyBTaW5nbGV0b24pKTtcblxuICAgIGNvbnN0IF9yYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncyA9IHJhd1NpbmdsZXRvbi5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nO1xuICAgIGxhenkoXG4gICAgICAgIGNvbnZlcnRlZFNpbmdsZXRvbixcbiAgICAgICAgJ25hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcnLFxuICAgICAgICByZXNvbHZlTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3MoXG4gICAgICAgICAgICBjb252ZXJ0ZXIsXG4gICAgICAgICAgICBfcmF3TmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3MgYXMgU2luZ2xldG9uWyduYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nJ10sXG4gICAgICAgICAgICByYXdTaW5nbGV0b25cbiAgICAgICAgKVxuICAgICk7XG5cbiAgICByZXR1cm4gY29udmVydGVkU2luZ2xldG9uO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEVudGl0eVNldC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyICAgQ29udmVydGVyXG4gKiBAcGFyYW0gcmF3RW50aXR5U2V0ICBVbmNvbnZlcnRlZCBFbnRpdHlTZXRcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgRW50aXR5U2V0XG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRFbnRpdHlTZXQoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd0VudGl0eVNldDogUmF3RW50aXR5U2V0KTogRW50aXR5U2V0IHtcbiAgICBjb25zdCBjb252ZXJ0ZWRFbnRpdHlTZXQgPSByYXdFbnRpdHlTZXQgYXMgRW50aXR5U2V0O1xuXG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlTZXQsICdlbnRpdHlUeXBlJywgcmVzb2x2ZUVudGl0eVR5cGUoY29udmVydGVyLCByYXdFbnRpdHlTZXQuZW50aXR5VHlwZU5hbWUpKTtcbiAgICBsYXp5KGNvbnZlcnRlZEVudGl0eVNldCwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlciwgcmF3RW50aXR5U2V0IGFzIEVudGl0eVNldCkpO1xuXG4gICAgY29uc3QgX3Jhd05hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzID0gcmF3RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmc7XG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkRW50aXR5U2V0LFxuICAgICAgICAnbmF2aWdhdGlvblByb3BlcnR5QmluZGluZycsXG4gICAgICAgIHJlc29sdmVOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncyhcbiAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgIF9yYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncyBhcyBFbnRpdHlTZXRbJ25hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcnXSxcbiAgICAgICAgICAgIHJhd0VudGl0eVNldFxuICAgICAgICApXG4gICAgKTtcblxuICAgIHJldHVybiBjb252ZXJ0ZWRFbnRpdHlTZXQ7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gRW50aXR5VHlwZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyICAgQ29udmVydGVyXG4gKiBAcGFyYW0gcmF3RW50aXR5VHlwZSAgVW5jb252ZXJ0ZWQgRW50aXR5VHlwZVxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBFbnRpdHlUeXBlXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRFbnRpdHlUeXBlKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdFbnRpdHlUeXBlOiBSYXdFbnRpdHlUeXBlKTogRW50aXR5VHlwZSB7XG4gICAgY29uc3QgY29udmVydGVkRW50aXR5VHlwZSA9IHJhd0VudGl0eVR5cGUgYXMgRW50aXR5VHlwZTtcblxuICAgIHJhd0VudGl0eVR5cGUua2V5cy5mb3JFYWNoKChrZXlQcm9wOiBhbnkpID0+IHtcbiAgICAgICAga2V5UHJvcC5pc0tleSA9IHRydWU7XG4gICAgfSk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEVudGl0eVR5cGUsICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9ucyhjb252ZXJ0ZXIsIHJhd0VudGl0eVR5cGUpKTtcblxuICAgIGxhenkoY29udmVydGVkRW50aXR5VHlwZSwgJ2tleXMnLCBjb252ZXJ0ZXIuY29udmVydChyYXdFbnRpdHlUeXBlLmtleXMsIGNvbnZlcnRQcm9wZXJ0eSkpO1xuICAgIGxhenkoY29udmVydGVkRW50aXR5VHlwZSwgJ2VudGl0eVByb3BlcnRpZXMnLCBjb252ZXJ0ZXIuY29udmVydChyYXdFbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMsIGNvbnZlcnRQcm9wZXJ0eSkpO1xuICAgIGxhenkoXG4gICAgICAgIGNvbnZlcnRlZEVudGl0eVR5cGUsXG4gICAgICAgICduYXZpZ2F0aW9uUHJvcGVydGllcycsXG4gICAgICAgIGNvbnZlcnRlci5jb252ZXJ0KHJhd0VudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMgYXMgYW55W10sIGNvbnZlcnROYXZpZ2F0aW9uUHJvcGVydHkpXG4gICAgKTtcblxuICAgIGxhenkoY29udmVydGVkRW50aXR5VHlwZSwgJ2FjdGlvbnMnLCAoKSA9PlxuICAgICAgICBjb252ZXJ0ZXIucmF3U2NoZW1hLmFjdGlvbnNcbiAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHJhd0FjdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgICAgcmF3QWN0aW9uLmlzQm91bmQgJiZcbiAgICAgICAgICAgICAgICAgICAgKHJhd0FjdGlvbi5zb3VyY2VUeXBlID09PSByYXdFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3QWN0aW9uLnNvdXJjZVR5cGUgPT09IGBDb2xsZWN0aW9uKCR7cmF3RW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWV9KWApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucmVkdWNlKChhY3Rpb25zLCByYXdBY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gYCR7Y29udmVydGVyLnJhd1NjaGVtYS5uYW1lc3BhY2V9LiR7cmF3QWN0aW9uLm5hbWV9YDtcbiAgICAgICAgICAgICAgICBhY3Rpb25zW25hbWVdID0gY29udmVydGVyLmdldENvbnZlcnRlZEFjdGlvbihyYXdBY3Rpb24uZnVsbHlRdWFsaWZpZWROYW1lKSE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbnM7XG4gICAgICAgICAgICB9LCB7fSBhcyBFbnRpdHlUeXBlWydhY3Rpb25zJ10pXG4gICAgKTtcblxuICAgIGNvbnZlcnRlZEVudGl0eVR5cGUucmVzb2x2ZVBhdGggPSAocmVsYXRpdmVQYXRoOiBzdHJpbmcsIGluY2x1ZGVWaXNpdGVkT2JqZWN0cz86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlVGFyZ2V0KGNvbnZlcnRlciwgcmF3RW50aXR5VHlwZSwgcmVsYXRpdmVQYXRoKTtcbiAgICAgICAgaWYgKGluY2x1ZGVWaXNpdGVkT2JqZWN0cykge1xuICAgICAgICAgICAgcmV0dXJuIHsgdGFyZ2V0OiByZXNvbHZlZC50YXJnZXQsIHZpc2l0ZWRPYmplY3RzOiByZXNvbHZlZC5vYmplY3RQYXRoLCBtZXNzYWdlczogcmVzb2x2ZWQubWVzc2FnZXMgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlZC50YXJnZXQ7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZEVudGl0eVR5cGU7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBQcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyICAgQ29udmVydGVyXG4gKiBAcGFyYW0gcmF3UHJvcGVydHkgIFVuY29udmVydGVkIFByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIFByb3BlcnR5XG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRQcm9wZXJ0eShjb252ZXJ0ZXI6IENvbnZlcnRlciwgcmF3UHJvcGVydHk6IFJhd1Byb3BlcnR5KTogUHJvcGVydHkge1xuICAgIGNvbnN0IGNvbnZlcnRlZFByb3BlcnR5ID0gcmF3UHJvcGVydHkgYXMgUHJvcGVydHk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZFByb3BlcnR5LCAnYW5ub3RhdGlvbnMnLCByZXNvbHZlQW5ub3RhdGlvbnMoY29udmVydGVyLCByYXdQcm9wZXJ0eSkpO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRQcm9wZXJ0eSwgJ3RhcmdldFR5cGUnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSByYXdQcm9wZXJ0eS50eXBlO1xuICAgICAgICBjb25zdCB0eXBlTmFtZSA9IHR5cGUuc3RhcnRzV2l0aCgnQ29sbGVjdGlvbicpID8gdHlwZS5zdWJzdHJpbmcoMTEsIHR5cGUubGVuZ3RoIC0gMSkgOiB0eXBlO1xuXG4gICAgICAgIHJldHVybiBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkQ29tcGxleFR5cGUodHlwZU5hbWUpID8/IGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRUeXBlRGVmaW5pdGlvbih0eXBlTmFtZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29udmVydGVkUHJvcGVydHk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBOYXZpZ2F0aW9uUHJvcGVydHkuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd05hdmlnYXRpb25Qcm9wZXJ0eSAgVW5jb252ZXJ0ZWQgTmF2aWdhdGlvblByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIE5hdmlnYXRpb25Qcm9wZXJ0eVxuICovXG5mdW5jdGlvbiBjb252ZXJ0TmF2aWdhdGlvblByb3BlcnR5KFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIHJhd05hdmlnYXRpb25Qcm9wZXJ0eTogUmF3VjJOYXZpZ2F0aW9uUHJvcGVydHkgfCBSYXdWNE5hdmlnYXRpb25Qcm9wZXJ0eVxuKTogTmF2aWdhdGlvblByb3BlcnR5IHtcbiAgICBjb25zdCBjb252ZXJ0ZWROYXZpZ2F0aW9uUHJvcGVydHkgPSByYXdOYXZpZ2F0aW9uUHJvcGVydHkgYXMgTmF2aWdhdGlvblByb3BlcnR5O1xuXG4gICAgY29udmVydGVkTmF2aWdhdGlvblByb3BlcnR5LnJlZmVyZW50aWFsQ29uc3RyYWludCA9IGNvbnZlcnRlZE5hdmlnYXRpb25Qcm9wZXJ0eS5yZWZlcmVudGlhbENvbnN0cmFpbnQgPz8gW107XG5cbiAgICBpZiAoIWlzVjROYXZpZ2F0aW9uUHJvcGVydHkocmF3TmF2aWdhdGlvblByb3BlcnR5KSkge1xuICAgICAgICBjb25zdCBhc3NvY2lhdGlvbkVuZCA9IGNvbnZlcnRlci5yYXdTY2hlbWEuYXNzb2NpYXRpb25zXG4gICAgICAgICAgICAuZmluZCgoYXNzb2NpYXRpb24pID0+IGFzc29jaWF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gcmF3TmF2aWdhdGlvblByb3BlcnR5LnJlbGF0aW9uc2hpcClcbiAgICAgICAgICAgID8uYXNzb2NpYXRpb25FbmQuZmluZCgoZW5kKSA9PiBlbmQucm9sZSA9PT0gcmF3TmF2aWdhdGlvblByb3BlcnR5LnRvUm9sZSk7XG5cbiAgICAgICAgY29udmVydGVkTmF2aWdhdGlvblByb3BlcnR5LmlzQ29sbGVjdGlvbiA9IGFzc29jaWF0aW9uRW5kPy5tdWx0aXBsaWNpdHkgPT09ICcqJztcbiAgICAgICAgY29udmVydGVkTmF2aWdhdGlvblByb3BlcnR5LnRhcmdldFR5cGVOYW1lID0gYXNzb2NpYXRpb25FbmQ/LnR5cGUgPz8gJyc7XG4gICAgfVxuXG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkTmF2aWdhdGlvblByb3BlcnR5LFxuICAgICAgICAndGFyZ2V0VHlwZScsXG4gICAgICAgIHJlc29sdmVFbnRpdHlUeXBlKGNvbnZlcnRlciwgKHJhd05hdmlnYXRpb25Qcm9wZXJ0eSBhcyBOYXZpZ2F0aW9uUHJvcGVydHkpLnRhcmdldFR5cGVOYW1lKVxuICAgICk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZE5hdmlnYXRpb25Qcm9wZXJ0eSwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlciwgcmF3TmF2aWdhdGlvblByb3BlcnR5KSk7XG5cbiAgICByZXR1cm4gY29udmVydGVkTmF2aWdhdGlvblByb3BlcnR5O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEFjdGlvbkltcG9ydC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyICAgQ29udmVydGVyXG4gKiBAcGFyYW0gcmF3QWN0aW9uSW1wb3J0ICBVbmNvbnZlcnRlZCBBY3Rpb25JbXBvcnRcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgQWN0aW9uSW1wb3J0XG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRBY3Rpb25JbXBvcnQoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd0FjdGlvbkltcG9ydDogUmF3QWN0aW9uSW1wb3J0KTogQWN0aW9uSW1wb3J0IHtcbiAgICBjb25zdCBjb252ZXJ0ZWRBY3Rpb25JbXBvcnQgPSByYXdBY3Rpb25JbXBvcnQgYXMgQWN0aW9uSW1wb3J0O1xuXG4gICAgbGF6eShjb252ZXJ0ZWRBY3Rpb25JbXBvcnQsICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9ucyhjb252ZXJ0ZXIsIHJhd0FjdGlvbkltcG9ydCkpO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRBY3Rpb25JbXBvcnQsICdhY3Rpb24nLCAoKSA9PiBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkQWN0aW9uKHJhd0FjdGlvbkltcG9ydC5hY3Rpb25OYW1lKSk7XG5cbiAgICByZXR1cm4gY29udmVydGVkQWN0aW9uSW1wb3J0O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyICAgQ29udmVydGVyXG4gKiBAcGFyYW0gcmF3QWN0aW9uICBVbmNvbnZlcnRlZCBBY3Rpb25cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgQWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRBY3Rpb24oY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd0FjdGlvbjogUmF3QWN0aW9uKTogQWN0aW9uIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRBY3Rpb24gPSByYXdBY3Rpb24gYXMgQWN0aW9uO1xuXG4gICAgaWYgKGNvbnZlcnRlZEFjdGlvbi5zb3VyY2VUeXBlKSB7XG4gICAgICAgIGxhenkoY29udmVydGVkQWN0aW9uLCAnc291cmNlRW50aXR5VHlwZScsIHJlc29sdmVFbnRpdHlUeXBlKGNvbnZlcnRlciwgcmF3QWN0aW9uLnNvdXJjZVR5cGUpKTtcbiAgICB9XG5cbiAgICBpZiAoY29udmVydGVkQWN0aW9uLnJldHVyblR5cGUpIHtcbiAgICAgICAgbGF6eShjb252ZXJ0ZWRBY3Rpb24sICdyZXR1cm5FbnRpdHlUeXBlJywgcmVzb2x2ZUVudGl0eVR5cGUoY29udmVydGVyLCByYXdBY3Rpb24ucmV0dXJuVHlwZSkpO1xuICAgIH1cblxuICAgIGxhenkoY29udmVydGVkQWN0aW9uLCAncGFyYW1ldGVycycsIGNvbnZlcnRlci5jb252ZXJ0KHJhd0FjdGlvbi5wYXJhbWV0ZXJzLCBjb252ZXJ0QWN0aW9uUGFyYW1ldGVyKSk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEFjdGlvbiwgJ2Fubm90YXRpb25zJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBzdWJzdHJpbmdCZWZvcmVGaXJzdChyYXdBY3Rpb24uZnVsbHlRdWFsaWZpZWROYW1lLCAnKCcpO1xuXG4gICAgICAgIC8vIGlmIHRoZSBhY3Rpb24gaXMgdW5ib3VuZCAoZS5nLiBcIm15QWN0aW9uXCIpLCB0aGUgYW5ub3RhdGlvbiB0YXJnZXQgaXMgXCJteUFjdGlvbigpXCJcbiAgICAgICAgY29uc3QgYW5ub3RhdGlvblRhcmdldEZRTiA9IHJhd0FjdGlvbi5pc0JvdW5kXG4gICAgICAgICAgICA/IHJhd0FjdGlvbi5mdWxseVF1YWxpZmllZE5hbWVcbiAgICAgICAgICAgIDogYCR7cmF3QWN0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZX0oKWA7XG5cbiAgICAgICAgY29uc3QgcmF3QW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXIuZ2V0QW5ub3RhdGlvbnMoYW5ub3RhdGlvblRhcmdldEZRTik7XG4gICAgICAgIGNvbnN0IGJhc2VBbm5vdGF0aW9ucyA9IGNvbnZlcnRlci5nZXRBbm5vdGF0aW9ucyhhY3Rpb24pO1xuXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUFubm90YXRpb24gb2YgYmFzZUFubm90YXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXJhd0Fubm90YXRpb25zLnNvbWUoXG4gICAgICAgICAgICAgICAgICAgIChhbm5vdGF0aW9uKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbi50ZXJtID09PSBiYXNlQW5ub3RhdGlvbi50ZXJtICYmIGFubm90YXRpb24ucXVhbGlmaWVyID09PSBiYXNlQW5ub3RhdGlvbi5xdWFsaWZpZXJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByYXdBbm5vdGF0aW9ucy5wdXNoKGJhc2VBbm5vdGF0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjcmVhdGVBbm5vdGF0aW9uc09iamVjdChjb252ZXJ0ZXIsIHJhd0FjdGlvbiwgcmF3QW5ub3RhdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZEFjdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBBY3Rpb25QYXJhbWV0ZXIuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd0FjdGlvblBhcmFtZXRlciAgVW5jb252ZXJ0ZWQgQWN0aW9uUGFyYW1ldGVyXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIEFjdGlvblBhcmFtZXRlclxuICovXG5mdW5jdGlvbiBjb252ZXJ0QWN0aW9uUGFyYW1ldGVyKFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIHJhd0FjdGlvblBhcmFtZXRlcjogUmF3QWN0aW9uWydwYXJhbWV0ZXJzJ11bbnVtYmVyXVxuKTogQWN0aW9uUGFyYW1ldGVyIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRBY3Rpb25QYXJhbWV0ZXIgPSByYXdBY3Rpb25QYXJhbWV0ZXIgYXMgQWN0aW9uUGFyYW1ldGVyO1xuXG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkQWN0aW9uUGFyYW1ldGVyLFxuICAgICAgICAndHlwZVJlZmVyZW5jZScsXG4gICAgICAgICgpID0+XG4gICAgICAgICAgICBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkRW50aXR5VHlwZShyYXdBY3Rpb25QYXJhbWV0ZXIudHlwZSkgPz9cbiAgICAgICAgICAgIGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRDb21wbGV4VHlwZShyYXdBY3Rpb25QYXJhbWV0ZXIudHlwZSkgPz9cbiAgICAgICAgICAgIGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRUeXBlRGVmaW5pdGlvbihyYXdBY3Rpb25QYXJhbWV0ZXIudHlwZSlcbiAgICApO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRBY3Rpb25QYXJhbWV0ZXIsICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9ucyhjb252ZXJ0ZXIsIHJhd0FjdGlvblBhcmFtZXRlcikpO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZEFjdGlvblBhcmFtZXRlcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIENvbXBsZXhUeXBlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdDb21wbGV4VHlwZSAgVW5jb252ZXJ0ZWQgQ29tcGxleFR5cGVcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgQ29tcGxleFR5cGVcbiAqL1xuZnVuY3Rpb24gY29udmVydENvbXBsZXhUeXBlKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdDb21wbGV4VHlwZTogUmF3Q29tcGxleFR5cGUpOiBDb21wbGV4VHlwZSB7XG4gICAgY29uc3QgY29udmVydGVkQ29tcGxleFR5cGUgPSByYXdDb21wbGV4VHlwZSBhcyBDb21wbGV4VHlwZTtcblxuICAgIGxhenkoY29udmVydGVkQ29tcGxleFR5cGUsICdwcm9wZXJ0aWVzJywgY29udmVydGVyLmNvbnZlcnQocmF3Q29tcGxleFR5cGUucHJvcGVydGllcywgY29udmVydFByb3BlcnR5KSk7XG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkQ29tcGxleFR5cGUsXG4gICAgICAgICduYXZpZ2F0aW9uUHJvcGVydGllcycsXG4gICAgICAgIGNvbnZlcnRlci5jb252ZXJ0KHJhd0NvbXBsZXhUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzIGFzIGFueVtdLCBjb252ZXJ0TmF2aWdhdGlvblByb3BlcnR5KVxuICAgICk7XG4gICAgbGF6eShjb252ZXJ0ZWRDb21wbGV4VHlwZSwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlciwgcmF3Q29tcGxleFR5cGUpKTtcblxuICAgIHJldHVybiBjb252ZXJ0ZWRDb21wbGV4VHlwZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIFR5cGVEZWZpbml0aW9uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdUeXBlRGVmaW5pdGlvbiAgVW5jb252ZXJ0ZWQgVHlwZURlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgVHlwZURlZmluaXRpb25cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGVEZWZpbml0aW9uKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdUeXBlRGVmaW5pdGlvbjogUmF3VHlwZURlZmluaXRpb24pOiBUeXBlRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgY29udmVydGVkVHlwZURlZmluaXRpb24gPSByYXdUeXBlRGVmaW5pdGlvbiBhcyBUeXBlRGVmaW5pdGlvbjtcblxuICAgIGxhenkoY29udmVydGVkVHlwZURlZmluaXRpb24sICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9ucyhjb252ZXJ0ZXIsIHJhd1R5cGVEZWZpbml0aW9uKSk7XG5cbiAgICByZXR1cm4gY29udmVydGVkVHlwZURlZmluaXRpb247XG59XG5cbi8qKlxuICogQ29udmVydCBhIFJhd01ldGFkYXRhIGludG8gYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIHRvIGJlIHVzZWQgdG8gZWFzaWx5IG5hdmlnYXRlIGEgbWV0YWRhdGEgb2JqZWN0IGFuZCBpdHMgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gcmF3TWV0YWRhdGFcbiAqIEByZXR1cm5zIHRoZSBjb252ZXJ0ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1ldGFkYXRhLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydChyYXdNZXRhZGF0YTogUmF3TWV0YWRhdGEpOiBDb252ZXJ0ZWRNZXRhZGF0YSB7XG4gICAgLy8gQ29udmVydGVyIE91dHB1dFxuICAgIGNvbnN0IGNvbnZlcnRlZE91dHB1dDogQ29udmVydGVkTWV0YWRhdGEgPSB7XG4gICAgICAgIHZlcnNpb246IHJhd01ldGFkYXRhLnZlcnNpb24sXG4gICAgICAgIG5hbWVzcGFjZTogcmF3TWV0YWRhdGEuc2NoZW1hLm5hbWVzcGFjZSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHJhd01ldGFkYXRhLnNjaGVtYS5hbm5vdGF0aW9ucyxcbiAgICAgICAgcmVmZXJlbmNlczogVm9jYWJ1bGFyeVJlZmVyZW5jZXMuY29uY2F0KHJhd01ldGFkYXRhLnJlZmVyZW5jZXMpLFxuICAgICAgICBkaWFnbm9zdGljczogW11cbiAgICB9IGFzIGFueTtcblxuICAgIC8vIGZhbGwgYmFjayBvbiB0aGUgZGVmYXVsdCByZWZlcmVuY2VzIGlmIHRoZSBjYWxsZXIgZG9lcyBub3Qgc3BlY2lmeSBhbnlcbiAgICBpZiAocmF3TWV0YWRhdGEucmVmZXJlbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmF3TWV0YWRhdGEucmVmZXJlbmNlcyA9IFZvY2FidWxhcnlSZWZlcmVuY2VzO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnRlclxuICAgIGNvbnN0IGNvbnZlcnRlciA9IG5ldyBDb252ZXJ0ZXIocmF3TWV0YWRhdGEsIGNvbnZlcnRlZE91dHB1dCk7XG5cbiAgICBsYXp5KFxuICAgICAgICBjb252ZXJ0ZWRPdXRwdXQsXG4gICAgICAgICdlbnRpdHlDb250YWluZXInLFxuICAgICAgICBjb252ZXJ0ZXIuY29udmVydChjb252ZXJ0ZXIucmF3U2NoZW1hLmVudGl0eUNvbnRhaW5lciwgY29udmVydEVudGl0eUNvbnRhaW5lcilcbiAgICApO1xuICAgIGxhenkoY29udmVydGVkT3V0cHV0LCAnZW50aXR5U2V0cycsIGNvbnZlcnRlci5jb252ZXJ0KGNvbnZlcnRlci5yYXdTY2hlbWEuZW50aXR5U2V0cywgY29udmVydEVudGl0eVNldCkpO1xuICAgIGxhenkoY29udmVydGVkT3V0cHV0LCAnc2luZ2xldG9ucycsIGNvbnZlcnRlci5jb252ZXJ0KGNvbnZlcnRlci5yYXdTY2hlbWEuc2luZ2xldG9ucywgY29udmVydFNpbmdsZXRvbikpO1xuICAgIGxhenkoY29udmVydGVkT3V0cHV0LCAnZW50aXR5VHlwZXMnLCBjb252ZXJ0ZXIuY29udmVydChjb252ZXJ0ZXIucmF3U2NoZW1hLmVudGl0eVR5cGVzLCBjb252ZXJ0RW50aXR5VHlwZSkpO1xuICAgIGxhenkoY29udmVydGVkT3V0cHV0LCAnYWN0aW9ucycsIGNvbnZlcnRlci5jb252ZXJ0KGNvbnZlcnRlci5yYXdTY2hlbWEuYWN0aW9ucywgY29udmVydEFjdGlvbikpO1xuICAgIGxhenkoY29udmVydGVkT3V0cHV0LCAnY29tcGxleFR5cGVzJywgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5jb21wbGV4VHlwZXMsIGNvbnZlcnRDb21wbGV4VHlwZSkpO1xuICAgIGxhenkoY29udmVydGVkT3V0cHV0LCAnYWN0aW9uSW1wb3J0cycsIGNvbnZlcnRlci5jb252ZXJ0KGNvbnZlcnRlci5yYXdTY2hlbWEuYWN0aW9uSW1wb3J0cywgY29udmVydEFjdGlvbkltcG9ydCkpO1xuICAgIGxhenkoXG4gICAgICAgIGNvbnZlcnRlZE91dHB1dCxcbiAgICAgICAgJ3R5cGVEZWZpbml0aW9ucycsXG4gICAgICAgIGNvbnZlcnRlci5jb252ZXJ0KGNvbnZlcnRlci5yYXdTY2hlbWEudHlwZURlZmluaXRpb25zLCBjb252ZXJ0VHlwZURlZmluaXRpb24pXG4gICAgKTtcblxuICAgIGNvbnZlcnRlZE91dHB1dC5yZXNvbHZlUGF0aCA9IGZ1bmN0aW9uIHJlc29sdmVQYXRoPFQ+KHBhdGg6IHN0cmluZyk6IFJlc29sdXRpb25UYXJnZXQ8VD4ge1xuICAgICAgICBjb25zdCB0YXJnZXRSZXNvbHV0aW9uID0gcmVzb2x2ZVRhcmdldDxUPihjb252ZXJ0ZXIsIHVuZGVmaW5lZCwgcGF0aCk7XG4gICAgICAgIGlmICh0YXJnZXRSZXNvbHV0aW9uLnRhcmdldCkge1xuICAgICAgICAgICAgYXBwZW5kT2JqZWN0UGF0aCh0YXJnZXRSZXNvbHV0aW9uLm9iamVjdFBhdGgsIHRhcmdldFJlc29sdXRpb24udGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0UmVzb2x1dGlvbjtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZE91dHB1dDtcbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vY29udmVydGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi93cml0ZWJhY2snO1xuIiwiaW1wb3J0IHR5cGUgeyBBcnJheVdpdGhJbmRleCwgQ29tcGxleFR5cGUsIEluZGV4LCBSZWZlcmVuY2UsIFR5cGVEZWZpbml0aW9uIH0gZnJvbSAnQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMnO1xuXG5leHBvcnQgeyBFbnVtSXNGbGFnIH0gZnJvbSAnQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VudW1Jc0ZsYWcnO1xuZXhwb3J0IHsgVGVybVRvVHlwZXMgfSBmcm9tICdAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVGVybVRvVHlwZXMnO1xuZXhwb3J0IHsgVm9jYWJ1bGFyeVJlZmVyZW5jZXMgYXMgZGVmYXVsdFJlZmVyZW5jZXMgfSBmcm9tICdAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVm9jYWJ1bGFyeVJlZmVyZW5jZXMnO1xuXG5leHBvcnQgdHlwZSBSZWZlcmVuY2VzV2l0aE1hcCA9IFJlZmVyZW5jZVtdICYge1xuICAgIHJlZmVyZW5jZU1hcD86IFJlY29yZDxzdHJpbmcsIFJlZmVyZW5jZT47XG4gICAgcmV2ZXJzZVJlZmVyZW5jZU1hcD86IFJlY29yZDxzdHJpbmcsIFJlZmVyZW5jZT47XG59O1xuXG5mdW5jdGlvbiBzcGxpdEF0KHN0cmluZzogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogW3N0cmluZywgc3RyaW5nXSB7XG4gICAgcmV0dXJuIGluZGV4IDwgMCA/IFtzdHJpbmcsICcnXSA6IFtzdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSwgc3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEpXTtcbn1cblxuZnVuY3Rpb24gc3Vic3RyaW5nQXQoc3RyaW5nOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gaW5kZXggPCAwID8gc3RyaW5nIDogc3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCk7XG59XG5cbi8qKlxuICogU3BsaXRzIGEgc3RyaW5nIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc2VwYXJhdG9yLlxuICpcbiAqIEBwYXJhbSBzdHJpbmcgICAgVGhlIHN0cmluZyB0byBzcGxpdFxuICogQHBhcmFtIHNlcGFyYXRvciBTZXBhcmF0b3IsIGUuZy4gYSBzaW5nbGUgY2hhcmFjdGVyLlxuICogQHJldHVybnMgQW4gYXJyYXkgY29uc2lzdGluZyBvZiB0d28gZWxlbWVudHM6IHRoZSBwYXJ0IGJlZm9yZSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc2VwYXJhdG9yIGFuZCB0aGUgcGFydCBhZnRlciBpdC4gSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBjb250YWluIHRoZSBzZXBhcmF0b3IsIHRoZSBzZWNvbmQgZWxlbWVudCBpcyB0aGUgZW1wdHkgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRBdEZpcnN0KHN0cmluZzogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyk6IFtzdHJpbmcsIHN0cmluZ10ge1xuICAgIHJldHVybiBzcGxpdEF0KHN0cmluZywgc3RyaW5nLmluZGV4T2Yoc2VwYXJhdG9yKSk7XG59XG5cbi8qKlxuICogU3BsaXRzIGEgc3RyaW5nIGF0IHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgYSBzZXBhcmF0b3IuXG4gKlxuICogQHBhcmFtIHN0cmluZyAgICBUaGUgc3RyaW5nIHRvIHNwbGl0XG4gKiBAcGFyYW0gc2VwYXJhdG9yIFNlcGFyYXRvciwgZS5nLiBhIHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb25zaXN0aW5nIG9mIHR3byBlbGVtZW50czogdGhlIHBhcnQgYmVmb3JlIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIHNlcGFyYXRvciBhbmQgdGhlIHBhcnQgYWZ0ZXIgaXQuIElmIHRoZSBzdHJpbmcgZG9lcyBub3QgY29udGFpbiB0aGUgc2VwYXJhdG9yLCB0aGUgc2Vjb25kIGVsZW1lbnQgaXMgdGhlIGVtcHR5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0QXRMYXN0KHN0cmluZzogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyk6IFtzdHJpbmcsIHN0cmluZ10ge1xuICAgIHJldHVybiBzcGxpdEF0KHN0cmluZywgc3RyaW5nLmxhc3RJbmRleE9mKHNlcGFyYXRvcikpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHN1YnN0cmluZyBiZWZvcmUgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzZXBhcmF0b3IuXG4gKlxuICogQHBhcmFtIHN0cmluZyAgICBUaGUgc3RyaW5nXG4gKiBAcGFyYW0gc2VwYXJhdG9yIFNlcGFyYXRvciwgZS5nLiBhIHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiBAcmV0dXJucyBUaGUgc3Vic3RyaW5nIGJlZm9yZSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc2VwYXJhdG9yLCBvciB0aGUgaW5wdXQgc3RyaW5nIGlmIGl0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNlcGFyYXRvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0cmluZ0JlZm9yZUZpcnN0KHN0cmluZzogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1YnN0cmluZ0F0KHN0cmluZywgc3RyaW5nLmluZGV4T2Yoc2VwYXJhdG9yKSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc3Vic3RyaW5nIGJlZm9yZSB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIGEgc2VwYXJhdG9yLlxuICpcbiAqIEBwYXJhbSBzdHJpbmcgICAgVGhlIHN0cmluZ1xuICogQHBhcmFtIHNlcGFyYXRvciBTZXBhcmF0b3IsIGUuZy4gYSBzaW5nbGUgY2hhcmFjdGVyLlxuICogQHJldHVybnMgVGhlIHN1YnN0cmluZyBiZWZvcmUgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc2VwYXJhdG9yLCBvciB0aGUgaW5wdXQgc3RyaW5nIGlmIGl0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNlcGFyYXRvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0cmluZ0JlZm9yZUxhc3Qoc3RyaW5nOiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3Vic3RyaW5nQXQoc3RyaW5nLCBzdHJpbmcubGFzdEluZGV4T2Yoc2VwYXJhdG9yKSk7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGFuIHVuYWxpYXNlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gYW5ub3RhdGlvbiB0byB0aGUgYWxpYXNlZCB2ZXJzaW9uLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzIGN1cnJlbnRSZWZlcmVuY2VzIGZvciB0aGUgcHJvamVjdFxuICogQHBhcmFtIHVuYWxpYXNlZFZhbHVlIHRoZSB1bmFsaWFzZWQgdmFsdWVcbiAqIEByZXR1cm5zIHRoZSBhbGlhc2VkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHNhbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsaWFzKHJlZmVyZW5jZXM6IFJlZmVyZW5jZXNXaXRoTWFwLCB1bmFsaWFzZWRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXJlZmVyZW5jZXMucmV2ZXJzZVJlZmVyZW5jZU1hcCkge1xuICAgICAgICByZWZlcmVuY2VzLnJldmVyc2VSZWZlcmVuY2VNYXAgPSByZWZlcmVuY2VzLnJlZHVjZSgobWFwOiBSZWNvcmQ8c3RyaW5nLCBSZWZlcmVuY2U+LCByZWYpID0+IHtcbiAgICAgICAgICAgIG1hcFtyZWYubmFtZXNwYWNlXSA9IHJlZjtcbiAgICAgICAgICAgIHJldHVybiBtYXA7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9XG4gICAgaWYgKCF1bmFsaWFzZWRWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdW5hbGlhc2VkVmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IFtuYW1lc3BhY2UsIHZhbHVlXSA9IHNwbGl0QXRMYXN0KHVuYWxpYXNlZFZhbHVlLCAnLicpO1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHJlZmVyZW5jZXMucmV2ZXJzZVJlZmVyZW5jZU1hcFtuYW1lc3BhY2VdO1xuICAgIGlmIChyZWZlcmVuY2UpIHtcbiAgICAgICAgcmV0dXJuIGAke3JlZmVyZW5jZS5hbGlhc30uJHt2YWx1ZX1gO1xuICAgIH0gZWxzZSBpZiAodW5hbGlhc2VkVmFsdWUuaW5jbHVkZXMoJ0AnKSkge1xuICAgICAgICAvLyBUcnkgdG8gc2VlIGlmIGl0J3MgYW4gYW5ub3RhdGlvbiBQYXRoIGxpa2UgdG9fU2FsZXNPcmRlci9AVUkuTGluZUl0ZW1cbiAgICAgICAgY29uc3QgW3ByZUFsaWFzLCBwb3N0QWxpYXNdID0gc3BsaXRBdEZpcnN0KHVuYWxpYXNlZFZhbHVlLCAnQCcpO1xuICAgICAgICByZXR1cm4gYCR7cHJlQWxpYXN9QCR7YWxpYXMocmVmZXJlbmNlcywgcG9zdEFsaWFzKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmFsaWFzZWRWYWx1ZTtcbiAgICB9XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGFuIGFsaWFzZWQgc3RyaW5nIHRvIGl0cyB1bmFsaWFzZWQgdmVyc2lvbiBnaXZlbiBhIHNldCBvZiByZWZlcmVuY2VzLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzIFRoZSByZWZlcmVuY2VzIHRvIHVzZSBmb3IgdW5hbGlhc2luZy5cbiAqIEBwYXJhbSBhbGlhc2VkVmFsdWUgVGhlIGFsaWFzZWQgdmFsdWVcbiAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIGZhbGxiYWNrIG5hbWVzcGFjZVxuICogQHJldHVybnMgVGhlIGVxdWFsIHVuYWxpYXNlZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmFsaWFzKFxuICAgIHJlZmVyZW5jZXM6IFJlZmVyZW5jZXNXaXRoTWFwLFxuICAgIGFsaWFzZWRWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIG5hbWVzcGFjZT86IHN0cmluZ1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBfdW5hbGlhcyA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghcmVmZXJlbmNlcy5yZWZlcmVuY2VNYXApIHtcbiAgICAgICAgICAgIHJlZmVyZW5jZXMucmVmZXJlbmNlTWFwID0gT2JqZWN0LmZyb21FbnRyaWVzKHJlZmVyZW5jZXMubWFwKChyZWYpID0+IFtyZWYuYWxpYXMsIHJlZl0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFsaWFzZXMgYXJlIG9mIHR5cGUgJ1NpbXBsZUlkZW50aWZpZXInIGFuZCBtdXN0IG5vdCBjb250YWluIGRvdHNcbiAgICAgICAgY29uc3QgW21heWJlQWxpYXMsIHJlc3RdID0gc3BsaXRBdEZpcnN0KHZhbHVlLCAnLicpO1xuXG4gICAgICAgIGlmICghcmVzdCB8fCByZXN0LmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgICAgIC8vIGVpdGhlciB0aGVyZSBpcyBubyBkb3QgaW4gdGhlIHZhbHVlIG9yIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgLS0+IG5vdGhpbmcgdG8gZG9cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzQW5ub3RhdGlvbiA9IG1heWJlQWxpYXMuc3RhcnRzV2l0aCgnQCcpO1xuICAgICAgICBjb25zdCB2YWx1ZVRvVW5hbGlhcyA9IGlzQW5ub3RhdGlvbiA/IG1heWJlQWxpYXMuc3Vic3RyaW5nKDEpIDogbWF5YmVBbGlhcztcbiAgICAgICAgY29uc3Qga25vd25SZWZlcmVuY2UgPSByZWZlcmVuY2VzLnJlZmVyZW5jZU1hcFt2YWx1ZVRvVW5hbGlhc107XG4gICAgICAgIGlmIChrbm93blJlZmVyZW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQW5ub3RhdGlvbiA/IGBAJHtrbm93blJlZmVyZW5jZS5uYW1lc3BhY2V9LiR7cmVzdH1gIDogYCR7a25vd25SZWZlcmVuY2UubmFtZXNwYWNlfS4ke3Jlc3R9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBhbGlhcyBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgdXNpbmcgdGhlIHJlZmVyZW5jZXMuIEFzc3VtZSBpdCBpcyB0aGUgXCJnbG9iYWxcIiBhbGlhcyAoPSBuYW1lc3BhY2UpXG4gICAgICAgIHJldHVybiBuYW1lc3BhY2UgJiYgIWlzQW5ub3RhdGlvbiA/IGAke25hbWVzcGFjZX0uJHtyZXN0fWAgOiB2YWx1ZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFsaWFzZWRWYWx1ZVxuICAgICAgICA/LnNwbGl0KCcvJylcbiAgICAgICAgLnJlZHVjZSgoc2VnbWVudHMsIHNlZ21lbnQpID0+IHtcbiAgICAgICAgICAgIC8vIHRoZSBzZWdtZW50IGNvdWxkIGJlIGFuIGFjdGlvbiwgbGlrZSBcImRvU29tZXRoaW5nKGZvby5iYXIpXCJcbiAgICAgICAgICAgIGNvbnN0IFtmaXJzdCwgcmVzdF0gPSBzcGxpdEF0Rmlyc3Qoc2VnbWVudCwgJygnKTtcbiAgICAgICAgICAgIGNvbnN0IHN1YlNlZ21lbnQgPSBbX3VuYWxpYXMoZmlyc3QpXTtcblxuICAgICAgICAgICAgaWYgKHJlc3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbWV0ZXIgPSByZXN0LnNsaWNlKDAsIC0xKTsgLy8gcmVtb3ZlIHRyYWlsaW5nIFwiKVwiXG4gICAgICAgICAgICAgICAgc3ViU2VnbWVudC5wdXNoKGAoJHtfdW5hbGlhcyhwYXJhbWV0ZXIpfSlgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlZ21lbnRzLnB1c2goc3ViU2VnbWVudC5qb2luKCcnKSk7XG5cbiAgICAgICAgICAgIHJldHVybiBzZWdtZW50cztcbiAgICAgICAgfSwgW10gYXMgc3RyaW5nW10pXG4gICAgICAgID8uam9pbignLycpO1xufVxuXG4vKipcbiAqIERpZmZlcmVudGlhdGUgYmV0d2VlbiBhIENvbXBsZXhUeXBlIGFuZCBhIFR5cGVEZWZpbml0aW9uLlxuICpcbiAqIEBwYXJhbSBjb21wbGV4VHlwZURlZmluaXRpb25cbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIGlzIGEgY29tcGxleCB0eXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBsZXhUeXBlRGVmaW5pdGlvbihcbiAgICBjb21wbGV4VHlwZURlZmluaXRpb24/OiBDb21wbGV4VHlwZSB8IFR5cGVEZWZpbml0aW9uXG4pOiBjb21wbGV4VHlwZURlZmluaXRpb24gaXMgQ29tcGxleFR5cGUge1xuICAgIHJldHVybiAoXG4gICAgICAgICEhY29tcGxleFR5cGVEZWZpbml0aW9uICYmIGNvbXBsZXhUeXBlRGVmaW5pdGlvbi5fdHlwZSA9PT0gJ0NvbXBsZXhUeXBlJyAmJiAhIWNvbXBsZXhUeXBlRGVmaW5pdGlvbi5wcm9wZXJ0aWVzXG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERlY2ltYWwodmFsdWU6IG51bWJlcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIGlzRGVjaW1hbCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICB2YWx1ZU9mKCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIGEgbGF6eSBwcm9wZXJ0eS5cbiAqXG4gKiBUaGUgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgYnkgY2FsbGluZyB0aGUgaW5pdCBmdW5jdGlvbiBvbiB0aGUgZmlyc3QgcmVhZCBhY2Nlc3MsIG9yIGJ5IGRpcmVjdGx5IGFzc2lnbmluZyBhIHZhbHVlLlxuICpcbiAqIEBwYXJhbSBvYmplY3QgICAgVGhlIGhvc3Qgb2JqZWN0XG4gKiBAcGFyYW0gcHJvcGVydHkgIFRoZSBsYXp5IHByb3BlcnR5IHRvIGFkZFxuICogQHBhcmFtIGluaXQgICAgICBUaGUgZnVuY3Rpb24gdGhhdCBpbml0aWFsaXplcyB0aGUgcHJvcGVydHkncyB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF6eTxUeXBlLCBLZXkgZXh0ZW5kcyBrZXlvZiBUeXBlPihvYmplY3Q6IFR5cGUsIHByb3BlcnR5OiBLZXksIGluaXQ6ICgpID0+IFR5cGVbS2V5XSkge1xuICAgIGNvbnN0IGluaXRpYWwgPSBTeW1ib2woJ2luaXRpYWwnKTtcbiAgICBsZXQgX3ZhbHVlOiBUeXBlW0tleV0gfCB0eXBlb2YgaW5pdGlhbCA9IGluaXRpYWw7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuXG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIGlmIChfdmFsdWUgPT09IGluaXRpYWwpIHtcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSBpbml0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX3ZhbHVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNldCh2YWx1ZTogVHlwZVtLZXldKSB7XG4gICAgICAgICAgICBfdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGFsbG93cyB0byBmaW5kIGFuIGFycmF5IGVsZW1lbnQgYnkgcHJvcGVydHkgdmFsdWUuXG4gKlxuICogQHBhcmFtIGFycmF5ICAgICBUaGUgYXJyYXlcbiAqIEBwYXJhbSBwcm9wZXJ0eSAgRWxlbWVudHMgaW4gdGhlIGFycmF5IGFyZSBzZWFyY2hlZCBieSB0aGlzIHByb3BlcnR5XG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gZmluZCBhbiBlbGVtZW50IG9mIHRoZSBhcnJheSBieSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluZGV4ZWRGaW5kPFQ+KGFycmF5OiBBcnJheTxUPiwgcHJvcGVydHk6IGtleW9mIFQpIHtcbiAgICBjb25zdCBpbmRleDogTWFwPFRba2V5b2YgVF0sIFQgfCB1bmRlZmluZWQ+ID0gbmV3IE1hcCgpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGZpbmQodmFsdWU6IFRba2V5b2YgVF0pIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGluZGV4LmdldCh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKGVsZW1lbnQ/Lltwcm9wZXJ0eV0gPT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcnJheS5maW5kKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWVsZW1lbnQ/Lmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlWYWx1ZSA9IGVsZW1lbnRbcHJvcGVydHldO1xuICAgICAgICAgICAgaW5kZXguc2V0KHByb3BlcnR5VmFsdWUsIGVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWUgPT09IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9O1xufVxuXG4vKipcbiAqIEFkZHMgYSAnZ2V0IGJ5IHZhbHVlJyBmdW5jdGlvbiB0byBhbiBhcnJheS5cbiAqXG4gKiBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGFkZEluZGV4KG15QXJyYXksICduYW1lJyksIGEgbmV3IGZ1bmN0aW9uICdieV9uYW1lKHZhbHVlKScgd2lsbCBiZSBhZGRlZCB0aGF0IGFsbG93cyB0b1xuICogZmluZCBhIG1lbWJlciBvZiB0aGUgYXJyYXkgYnkgdGhlIHZhbHVlIG9mIGl0cyAnbmFtZScgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIGFycmF5ICAgICAgVGhlIGFycmF5XG4gKiBAcGFyYW0gcHJvcGVydHkgICBUaGUgcHJvcGVydHkgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdGhlICdieV97cHJvcGVydHl9KCknIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBUaGUgYXJyYXkgd2l0aCB0aGUgYWRkZWQgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEdldEJ5VmFsdWU8VCwgUCBleHRlbmRzIEV4dHJhY3Q8a2V5b2YgVCwgc3RyaW5nPj4oYXJyYXk6IEFycmF5PFQ+LCBwcm9wZXJ0eTogUCkge1xuICAgIGNvbnN0IGluZGV4TmFtZToga2V5b2YgSW5kZXg8VCwgUD4gPSBgYnlfJHtwcm9wZXJ0eX1gO1xuXG4gICAgaWYgKCFhcnJheS5oYXNPd25Qcm9wZXJ0eShpbmRleE5hbWUpKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhcnJheSwgaW5kZXhOYW1lLCB7IHdyaXRhYmxlOiBmYWxzZSwgdmFsdWU6IGNyZWF0ZUluZGV4ZWRGaW5kKGFycmF5LCBwcm9wZXJ0eSkgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9wZXJ0eSAnJHtpbmRleE5hbWV9JyBhbHJlYWR5IGV4aXN0c2ApO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXkgYXMgQXJyYXlXaXRoSW5kZXg8VCwgUD47XG59XG4iLCJpbXBvcnQgdHlwZSB7XG4gICAgQW5ub3RhdGlvblBhdGhFeHByZXNzaW9uLFxuICAgIEFubm90YXRpb25SZWNvcmQsXG4gICAgQW5ub3RhdGlvblRlcm0sXG4gICAgRXhwcmVzc2lvbixcbiAgICBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoRXhwcmVzc2lvbixcbiAgICBQYXRoRXhwcmVzc2lvbixcbiAgICBQcm9wZXJ0eVBhdGhFeHByZXNzaW9uLFxuICAgIFJhd0Fubm90YXRpb24sXG4gICAgUmVmZXJlbmNlXG59IGZyb20gJ0BzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzJztcbmltcG9ydCB7IHVuYWxpYXMgfSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBSZXZlcnQgYW4gb2JqZWN0IHRvIGl0cyByYXcgdHlwZSBlcXVpdmFsZW50LlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzIHRoZSBjdXJyZW50IHJlZmVyZW5jZVxuICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byByZXZlcnRcbiAqIEByZXR1cm5zIHRoZSByYXcgdmFsdWVcbiAqL1xuZnVuY3Rpb24gcmV2ZXJ0T2JqZWN0VG9SYXdUeXBlKHJlZmVyZW5jZXM6IFJlZmVyZW5jZVtdLCB2YWx1ZTogYW55KSB7XG4gICAgbGV0IHJlc3VsdDogRXhwcmVzc2lvbiB8IHVuZGVmaW5lZDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ0NvbGxlY3Rpb24nLFxuICAgICAgICAgICAgQ29sbGVjdGlvbjogdmFsdWUubWFwKChhbm5vKSA9PiByZXZlcnRDb2xsZWN0aW9uSXRlbVRvUmF3VHlwZShyZWZlcmVuY2VzLCBhbm5vKSkgYXMgYW55W11cbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLmlzRGVjaW1hbD8uKCkpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ0RlY2ltYWwnLFxuICAgICAgICAgICAgRGVjaW1hbDogdmFsdWUudmFsdWVPZigpXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pc1N0cmluZz8uKCkpIHtcbiAgICAgICAgY29uc3QgdmFsdWVNYXRjaGVzID0gdmFsdWUudmFsdWVPZigpLnNwbGl0KCcuJyk7XG4gICAgICAgIGlmICh2YWx1ZU1hdGNoZXMubGVuZ3RoID4gMSAmJiByZWZlcmVuY2VzLmZpbmQoKHJlZikgPT4gcmVmLmFsaWFzID09PSB2YWx1ZU1hdGNoZXNbMF0pKSB7XG4gICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0VudW1NZW1iZXInLFxuICAgICAgICAgICAgICAgIEVudW1NZW1iZXI6IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICAgICAgICBTdHJpbmc6IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodmFsdWUuaXNJbnQ/LigpKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICAgICAgSW50OiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLmlzRmxvYXQ/LigpKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdGbG9hdCcsXG4gICAgICAgICAgICBGbG9hdDogdmFsdWUudmFsdWVPZigpXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pc0RhdGU/LigpKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdEYXRlJyxcbiAgICAgICAgICAgIERhdGU6IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUuaXNCb29sZWFuPy4oKSkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnQm9vbCcsXG4gICAgICAgICAgICBCb29sOiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09ICdQYXRoJykge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnUGF0aCcsXG4gICAgICAgICAgICBQYXRoOiB2YWx1ZS5wYXRoXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS50eXBlID09PSAnQW5ub3RhdGlvblBhdGgnKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdBbm5vdGF0aW9uUGF0aCcsXG4gICAgICAgICAgICBBbm5vdGF0aW9uUGF0aDogdmFsdWUudmFsdWVcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09ICdBcHBseScpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ0FwcGx5JyxcbiAgICAgICAgICAgIEFwcGx5OiB2YWx1ZS5BcHBseVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gJ051bGwnKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdOdWxsJ1xuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gJ1Byb3BlcnR5UGF0aCcpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ1Byb3BlcnR5UGF0aCcsXG4gICAgICAgICAgICBQcm9wZXJ0eVBhdGg6IHZhbHVlLnZhbHVlXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS50eXBlID09PSAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCcpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnLFxuICAgICAgICAgICAgTmF2aWdhdGlvblByb3BlcnR5UGF0aDogdmFsdWUudmFsdWVcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJyRUeXBlJykpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ1JlY29yZCcsXG4gICAgICAgICAgICBSZWNvcmQ6IHJldmVydENvbGxlY3Rpb25JdGVtVG9SYXdUeXBlKHJlZmVyZW5jZXMsIHZhbHVlKSBhcyBBbm5vdGF0aW9uUmVjb3JkXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUmV2ZXJ0IGEgdmFsdWUgdG8gaXRzIHJhdyB2YWx1ZSBkZXBlbmRpbmcgb24gaXRzIHR5cGUuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZXMgdGhlIGN1cnJlbnQgc2V0IG9mIHJlZmVyZW5jZVxuICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byByZXZlcnRcbiAqIEByZXR1cm5zIHRoZSByYXcgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiByZXZlcnRWYWx1ZVRvUmF3VHlwZShyZWZlcmVuY2VzOiBSZWZlcmVuY2VbXSwgdmFsdWU6IGFueSk6IEV4cHJlc3Npb24gfCB1bmRlZmluZWQge1xuICAgIGxldCByZXN1bHQ6IEV4cHJlc3Npb24gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgdmFsdWVDb25zdHJ1Y3RvciA9IHZhbHVlPy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIHN3aXRjaCAodmFsdWVDb25zdHJ1Y3Rvcikge1xuICAgICAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgY29uc3QgdmFsdWVNYXRjaGVzID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgaWYgKHZhbHVlTWF0Y2hlcy5sZW5ndGggPiAxICYmIHJlZmVyZW5jZXMuZmluZCgocmVmKSA9PiByZWYuYWxpYXMgPT09IHZhbHVlTWF0Y2hlc1swXSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdFbnVtTWVtYmVyJyxcbiAgICAgICAgICAgICAgICAgICAgRW51bU1lbWJlcjogdmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgIFN0cmluZzogdmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQm9vbGVhbic6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdCb29sJyxcbiAgICAgICAgICAgICAgICBCb29sOiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdOdW1iZXInOlxuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgaWYgKHZhbHVlLnRvU3RyaW5nKCkgPT09IHZhbHVlLnRvRml4ZWQoKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0ludCcsXG4gICAgICAgICAgICAgICAgICAgIEludDogdmFsdWUudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnRGVjaW1hbCcsXG4gICAgICAgICAgICAgICAgICAgIERlY2ltYWw6IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJlc3VsdCA9IHJldmVydE9iamVjdFRvUmF3VHlwZShyZWZlcmVuY2VzLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuY29uc3QgcmVzdHJpY3RlZEtleXMgPSBbJyRUeXBlJywgJ3Rlcm0nLCAnX19zb3VyY2UnLCAncXVhbGlmaWVyJywgJ0FjdGlvblRhcmdldCcsICdmdWxseVF1YWxpZmllZE5hbWUnLCAnYW5ub3RhdGlvbnMnXTtcblxuLyoqXG4gKiBSZXZlcnQgdGhlIGN1cnJlbnQgZW1iZWRkZWQgYW5ub3RhdGlvbnMgdG8gdGhlaXIgcmF3IHR5cGUuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZXMgdGhlIGN1cnJlbnQgc2V0IG9mIHJlZmVyZW5jZVxuICogQHBhcmFtIGN1cnJlbnRBbm5vdGF0aW9ucyB0aGUgY29sbGVjdGlvbiBpdGVtIHRvIGV2YWx1YXRlXG4gKiBAcGFyYW0gdGFyZ2V0QW5ub3RhdGlvbnMgdGhlIHBsYWNlIHdoZXJlIHdlIG5lZWQgdG8gYWRkIHRoZSBhbm5vdGF0aW9uXG4gKi9cbmZ1bmN0aW9uIHJldmVydEFubm90YXRpb25zVG9SYXdUeXBlKFxuICAgIHJlZmVyZW5jZXM6IFJlZmVyZW5jZVtdLFxuICAgIGN1cnJlbnRBbm5vdGF0aW9uczogYW55LFxuICAgIHRhcmdldEFubm90YXRpb25zOiBSYXdBbm5vdGF0aW9uW11cbikge1xuICAgIE9iamVjdC5rZXlzKGN1cnJlbnRBbm5vdGF0aW9ucylcbiAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkgIT09ICdfYW5ub3RhdGlvbnMnKVxuICAgICAgICAuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjdXJyZW50QW5ub3RhdGlvbnNba2V5XSkuZm9yRWFjaCgodGVybSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZEFubm90YXRpb24gPSByZXZlcnRUZXJtVG9HZW5lcmljVHlwZShyZWZlcmVuY2VzLCBjdXJyZW50QW5ub3RhdGlvbnNba2V5XVt0ZXJtXSk7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRBbm5vdGF0aW9uLnRlcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5hbGlhc2VkVGVybSA9IHVuYWxpYXMocmVmZXJlbmNlcywgYCR7a2V5fS4ke3Rlcm19YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1bmFsaWFzZWRUZXJtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWFsaWZpZWRTcGxpdCA9IHVuYWxpYXNlZFRlcm0uc3BsaXQoJyMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZEFubm90YXRpb24udGVybSA9IHF1YWxpZmllZFNwbGl0WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWxpZmllZFNwbGl0Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdWIgQW5ub3RhdGlvbiB3aXRoIGEgcXVhbGlmaWVyLCBub3Qgc3VyZSB3aGVuIHRoYXQgY2FuIGhhcHBlbiBpbiByZWFsIHNjZW5hcmlvc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZEFubm90YXRpb24ucXVhbGlmaWVyID0gcXVhbGlmaWVkU3BsaXRbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGFyZ2V0QW5ub3RhdGlvbnMucHVzaChwYXJzZWRBbm5vdGF0aW9uKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbn1cblxuLyoqXG4gKiBSZXZlcnQgdGhlIGN1cnJlbnQgY29sbGVjdGlvbiBpdGVtIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJhdyBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzIHRoZSBjdXJyZW50IHNldCBvZiByZWZlcmVuY2VcbiAqIEBwYXJhbSBjb2xsZWN0aW9uSXRlbSB0aGUgY29sbGVjdGlvbiBpdGVtIHRvIGV2YWx1YXRlXG4gKiBAcmV0dXJucyB0aGUgcmF3IHR5cGUgZXF1aXZhbGVudFxuICovXG5mdW5jdGlvbiByZXZlcnRDb2xsZWN0aW9uSXRlbVRvUmF3VHlwZShcbiAgICByZWZlcmVuY2VzOiBSZWZlcmVuY2VbXSxcbiAgICBjb2xsZWN0aW9uSXRlbTogYW55XG4pOlxuICAgIHwgQW5ub3RhdGlvblJlY29yZFxuICAgIHwgc3RyaW5nXG4gICAgfCBQcm9wZXJ0eVBhdGhFeHByZXNzaW9uXG4gICAgfCBQYXRoRXhwcmVzc2lvblxuICAgIHwgTmF2aWdhdGlvblByb3BlcnR5UGF0aEV4cHJlc3Npb25cbiAgICB8IEFubm90YXRpb25QYXRoRXhwcmVzc2lvblxuICAgIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodHlwZW9mIGNvbGxlY3Rpb25JdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gY29sbGVjdGlvbkl0ZW07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29sbGVjdGlvbkl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChjb2xsZWN0aW9uSXRlbS5oYXNPd25Qcm9wZXJ0eSgnJFR5cGUnKSkge1xuICAgICAgICAgICAgLy8gQW5ub3RhdGlvbiBSZWNvcmRcbiAgICAgICAgICAgIGNvbnN0IG91dEl0ZW06IEFubm90YXRpb25SZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogY29sbGVjdGlvbkl0ZW0uJFR5cGUsXG4gICAgICAgICAgICAgICAgcHJvcGVydHlWYWx1ZXM6IFtdIGFzIGFueVtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gQ291bGQgdmFsaWRhdGUga2V5cyBhbmQgdHlwZSBiYXNlZCBvbiAkVHlwZVxuICAgICAgICAgICAgT2JqZWN0LmtleXMoY29sbGVjdGlvbkl0ZW0pLmZvckVhY2goKGNvbGxlY3Rpb25LZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdHJpY3RlZEtleXMuaW5kZXhPZihjb2xsZWN0aW9uS2V5KSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb2xsZWN0aW9uSXRlbVtjb2xsZWN0aW9uS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgb3V0SXRlbS5wcm9wZXJ0eVZhbHVlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGNvbGxlY3Rpb25LZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmV2ZXJ0VmFsdWVUb1Jhd1R5cGUocmVmZXJlbmNlcywgdmFsdWUpIGFzIEV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2xsZWN0aW9uS2V5ID09PSAnYW5ub3RhdGlvbnMnICYmIE9iamVjdC5rZXlzKGNvbGxlY3Rpb25JdGVtW2NvbGxlY3Rpb25LZXldKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dEl0ZW0uYW5ub3RhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgcmV2ZXJ0QW5ub3RhdGlvbnNUb1Jhd1R5cGUocmVmZXJlbmNlcywgY29sbGVjdGlvbkl0ZW1bY29sbGVjdGlvbktleV0sIG91dEl0ZW0uYW5ub3RhdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG91dEl0ZW07XG4gICAgICAgIH0gZWxzZSBpZiAoY29sbGVjdGlvbkl0ZW0udHlwZSA9PT0gJ1Byb3BlcnR5UGF0aCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ1Byb3BlcnR5UGF0aCcsXG4gICAgICAgICAgICAgICAgUHJvcGVydHlQYXRoOiBjb2xsZWN0aW9uSXRlbS52YWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2xsZWN0aW9uSXRlbS50eXBlID09PSAnQW5ub3RhdGlvblBhdGgnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdBbm5vdGF0aW9uUGF0aCcsXG4gICAgICAgICAgICAgICAgQW5ub3RhdGlvblBhdGg6IGNvbGxlY3Rpb25JdGVtLnZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGNvbGxlY3Rpb25JdGVtLnR5cGUgPT09ICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCcsXG4gICAgICAgICAgICAgICAgTmF2aWdhdGlvblByb3BlcnR5UGF0aDogY29sbGVjdGlvbkl0ZW0udmFsdWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXZlcnQgYW4gYW5ub3RhdGlvbiB0ZXJtIHRvIGl0J3MgZ2VuZXJpYyBvciByYXcgZXF1aXZhbGVudC5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyB0aGUgcmVmZXJlbmNlIG9mIHRoZSBjdXJyZW50IGNvbnRleHRcbiAqIEBwYXJhbSBhbm5vdGF0aW9uIHRoZSBhbm5vdGF0aW9uIHRlcm0gdG8gcmV2ZXJ0XG4gKiBAcmV0dXJucyB0aGUgcmF3IGFubm90YXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJldmVydFRlcm1Ub0dlbmVyaWNUeXBlKHJlZmVyZW5jZXM6IFJlZmVyZW5jZVtdLCBhbm5vdGF0aW9uOiBBbm5vdGF0aW9uVGVybTxhbnk+KTogUmF3QW5ub3RhdGlvbiB7XG4gICAgY29uc3QgYmFzZUFubm90YXRpb246IFJhd0Fubm90YXRpb24gPSB7XG4gICAgICAgIHRlcm06IGFubm90YXRpb24udGVybSxcbiAgICAgICAgcXVhbGlmaWVyOiBhbm5vdGF0aW9uLnF1YWxpZmllclxuICAgIH07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYW5ub3RhdGlvbikpIHtcbiAgICAgICAgLy8gQ29sbGVjdGlvblxuICAgICAgICBpZiAoYW5ub3RhdGlvbi5oYXNPd25Qcm9wZXJ0eSgnYW5ub3RhdGlvbnMnKSAmJiBPYmplY3Qua2V5cygoYW5ub3RhdGlvbiBhcyBhbnkpLmFubm90YXRpb25zKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBBbm5vdGF0aW9uIG9uIGEgY29sbGVjdGlvbiBpdHNlbGYsIG5vdCBzdXJlIHdoZW4gdGhhdCBoYXBwZW5zIGlmIGF0IGFsbFxuICAgICAgICAgICAgYmFzZUFubm90YXRpb24uYW5ub3RhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIHJldmVydEFubm90YXRpb25zVG9SYXdUeXBlKHJlZmVyZW5jZXMsIChhbm5vdGF0aW9uIGFzIGFueSkuYW5ub3RhdGlvbnMsIGJhc2VBbm5vdGF0aW9uLmFubm90YXRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uYmFzZUFubm90YXRpb24sXG4gICAgICAgICAgICBjb2xsZWN0aW9uOiBhbm5vdGF0aW9uLm1hcCgoYW5ubykgPT4gcmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub1Jhd1R5cGUocmVmZXJlbmNlcywgYW5ubykpIGFzIGFueVtdXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmIChhbm5vdGF0aW9uLmhhc093blByb3BlcnR5KCckVHlwZScpKSB7XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2VBbm5vdGF0aW9uLCByZWNvcmQ6IHJldmVydENvbGxlY3Rpb25JdGVtVG9SYXdUeXBlKHJlZmVyZW5jZXMsIGFubm90YXRpb24pIGFzIGFueSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2VBbm5vdGF0aW9uLCB2YWx1ZTogcmV2ZXJ0VmFsdWVUb1Jhd1R5cGUocmVmZXJlbmNlcywgYW5ub3RhdGlvbikgfTtcbiAgICB9XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRW51bUlzRmxhZyA9IHZvaWQgMDtcbmV4cG9ydHMuRW51bUlzRmxhZyA9IHtcbiAgICBcIkF1dGguS2V5TG9jYXRpb25cIjogZmFsc2UsXG4gICAgXCJDb3JlLlJldmlzaW9uS2luZFwiOiBmYWxzZSxcbiAgICBcIkNvcmUuRGF0YU1vZGlmaWNhdGlvbk9wZXJhdGlvbktpbmRcIjogZmFsc2UsXG4gICAgXCJDb3JlLlBlcm1pc3Npb25cIjogdHJ1ZSxcbiAgICBcIkNhcGFiaWxpdGllcy5Db25mb3JtYW5jZUxldmVsVHlwZVwiOiBmYWxzZSxcbiAgICBcIkNhcGFiaWxpdGllcy5Jc29sYXRpb25MZXZlbFwiOiB0cnVlLFxuICAgIFwiQ2FwYWJpbGl0aWVzLk5hdmlnYXRpb25UeXBlXCI6IGZhbHNlLFxuICAgIFwiQ2FwYWJpbGl0aWVzLlNlYXJjaEV4cHJlc3Npb25zXCI6IHRydWUsXG4gICAgXCJDYXBhYmlsaXRpZXMuSHR0cE1ldGhvZFwiOiB0cnVlLFxuICAgIFwiQWdncmVnYXRpb24uUm9sbHVwVHlwZVwiOiBmYWxzZSxcbiAgICBcIkNvbW1vbi5UZXh0Rm9ybWF0VHlwZVwiOiBmYWxzZSxcbiAgICBcIkNvbW1vbi5GaWx0ZXJFeHByZXNzaW9uVHlwZVwiOiBmYWxzZSxcbiAgICBcIkNvbW1vbi5GaWVsZENvbnRyb2xUeXBlXCI6IGZhbHNlLFxuICAgIFwiQ29tbW9uLkVmZmVjdFR5cGVcIjogdHJ1ZSxcbiAgICBcIkNvbW11bmljYXRpb24uS2luZFR5cGVcIjogZmFsc2UsXG4gICAgXCJDb21tdW5pY2F0aW9uLkNvbnRhY3RJbmZvcm1hdGlvblR5cGVcIjogdHJ1ZSxcbiAgICBcIkNvbW11bmljYXRpb24uUGhvbmVUeXBlXCI6IHRydWUsXG4gICAgXCJDb21tdW5pY2F0aW9uLkdlbmRlclR5cGVcIjogZmFsc2UsXG4gICAgXCJVSS5WaXN1YWxpemF0aW9uVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLkNyaXRpY2FsaXR5VHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLlRyZW5kVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLkNoYXJ0VHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLkNoYXJ0QXhpc1NjYWxlQmVoYXZpb3JUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuQ2hhcnRBeGlzQXV0b1NjYWxlRGF0YVNjb3BlVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLkNoYXJ0RGltZW5zaW9uUm9sZVR5cGVcIjogZmFsc2UsXG4gICAgXCJVSS5DaGFydE1lYXN1cmVSb2xlVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLlNlbGVjdGlvblJhbmdlU2lnblR5cGVcIjogZmFsc2UsXG4gICAgXCJVSS5TZWxlY3Rpb25SYW5nZU9wdGlvblR5cGVcIjogZmFsc2UsXG4gICAgXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuSW1wb3J0YW5jZVR5cGVcIjogZmFsc2UsXG4gICAgXCJVSS5Dcml0aWNhbGl0eVJlcHJlc2VudGF0aW9uVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLk9wZXJhdGlvbkdyb3VwaW5nVHlwZVwiOiBmYWxzZSxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVGVybVRvVHlwZXMgPSB2b2lkIDA7XG52YXIgVGVybVRvVHlwZXM7XG4oZnVuY3Rpb24gKFRlcm1Ub1R5cGVzKSB7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQXV0aG9yaXphdGlvbi5WMS5TZWN1cml0eVNjaGVtZXNcIl0gPSBcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxLlNlY3VyaXR5U2NoZW1lXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQXV0aG9yaXphdGlvbi5WMS5BdXRob3JpemF0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkF1dGhvcml6YXRpb24uVjEuQXV0aG9yaXphdGlvblwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuUmV2aXNpb25zXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5SZXZpc2lvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkxpbmtzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5MaW5rXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5FeGFtcGxlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5FeGFtcGxlVmFsdWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLk1lc3NhZ2VzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5NZXNzYWdlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuVmFsdWVFeGNlcHRpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlZhbHVlRXhjZXB0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuUmVzb3VyY2VFeGNlcHRpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlJlc291cmNlRXhjZXB0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuRGF0YU1vZGlmaWNhdGlvbkV4Y2VwdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuRGF0YU1vZGlmaWNhdGlvbkV4Y2VwdGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLklzTGFuZ3VhZ2VEZXBlbmRlbnRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuQXBwbGllc1ZpYUNvbnRhaW5lclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5EZXJlZmVyZW5jZWFibGVJRHNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuQ29udmVudGlvbmFsSURzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLlBlcm1pc3Npb25zXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5QZXJtaXNzaW9uXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5EZWZhdWx0TmFtZXNwYWNlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkltbXV0YWJsZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZERlZmF1bHRWYWx1ZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5Jc1VSTFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5Jc01lZGlhVHlwZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5Db250ZW50RGlzcG9zaXRpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLkNvbnRlbnREaXNwb3NpdGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLk9wdGltaXN0aWNDb25jdXJyZW5jeVwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuQWRkaXRpb25hbFByb3BlcnRpZXNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuQXV0b0V4cGFuZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5BdXRvRXhwYW5kUmVmZXJlbmNlc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5NYXlJbXBsZW1lbnRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlF1YWxpZmllZFR5cGVOYW1lXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5PcmRlcmVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLlBvc2l0aW9uYWxJbnNlcnRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuQWx0ZXJuYXRlS2V5c1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuQWx0ZXJuYXRlS2V5XCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5PcHRpb25hbFBhcmFtZXRlclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuT3B0aW9uYWxQYXJhbWV0ZXJUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGVcIl0gPSBcIkVkbS5Cb29sZWFuXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5SZXF1aXJlc0V4cGxpY2l0QmluZGluZ1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5FeHBsaWNpdE9wZXJhdGlvbkJpbmRpbmdzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5RdWFsaWZpZWRCb3VuZE9wZXJhdGlvbk5hbWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLlN5bWJvbGljTmFtZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuU2ltcGxlSWRlbnRpZmllclwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuR2VvbWV0cnlGZWF0dXJlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5HZW9tZXRyeUZlYXR1cmVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbmZvcm1hbmNlTGV2ZWxcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ29uZm9ybWFuY2VMZXZlbFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQXN5bmNocm9ub3VzUmVxdWVzdHNTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5CYXRjaENvbnRpbnVlT25FcnJvclN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLklzb2xhdGlvblN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Jc29sYXRpb25MZXZlbFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Dcm9zc0pvaW5TdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DYWxsYmFja1N1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DYWxsYmFja1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ2hhbmdlVHJhY2tpbmdcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ2hhbmdlVHJhY2tpbmdUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvdW50UmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvdW50UmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk5hdmlnYXRpb25SZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkluZGV4YWJsZUJ5S2V5XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuVG9wU3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU2tpcFN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbXB1dGVTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWxlY3RTdXBwb3J0XCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNlbGVjdFN1cHBvcnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkJhdGNoU3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQmF0Y2hTdXBwb3J0XCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkJhdGNoU3VwcG9ydFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU29ydFJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Tb3J0UmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5FeHBhbmRSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRXhwYW5kUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWFyY2hSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU2VhcmNoUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5LZXlBc1NlZ21lbnRTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5RdWVyeVNlZ21lbnRTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5JbnNlcnRSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSW5zZXJ0UmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWVwSW5zZXJ0U3VwcG9ydFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWVwSW5zZXJ0U3VwcG9ydFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuVXBkYXRlUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlVwZGF0ZVJlc3RyaWN0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVlcFVwZGF0ZVN1cHBvcnRcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVlcFVwZGF0ZVN1cHBvcnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlbGV0ZVJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWxldGVSZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbGxlY3Rpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Db2xsZWN0aW9uUHJvcGVydHlSZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk9wZXJhdGlvblJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5PcGVyYXRpb25SZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkFubm90YXRpb25WYWx1ZXNJblF1ZXJ5U3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuTW9kaWZpY2F0aW9uUXVlcnlPcHRpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk1vZGlmaWNhdGlvblF1ZXJ5T3B0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuUmVhZFJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5SZWFkUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DdXN0b21IZWFkZXJzXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkN1c3RvbVBhcmFtZXRlclwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DdXN0b21RdWVyeU9wdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ3VzdG9tUGFyYW1ldGVyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk1lZGlhTG9jYXRpb25VcGRhdGVTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFwcGx5U3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWREZWZhdWx0c1wiXSA9IFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFwcGx5U3VwcG9ydGVkQmFzZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkdyb3VwYWJsZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQWdncmVnYXRhYmxlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5Db250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzXCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuTGV2ZWxlZEhpZXJhcmNoeVwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLlJlY3Vyc2l2ZUhpZXJhcmNoeVwiXSA9IFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLlJlY3Vyc2l2ZUhpZXJhcmNoeVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BdmFpbGFibGVPbkFnZ3JlZ2F0ZXNcIl0gPSBcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BdmFpbGFibGVPbkFnZ3JlZ2F0ZXNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bVwiXSA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkV4Y2x1c2l2ZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5BbGxvd2VkVmFsdWVzXCJdID0gXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5BbGxvd2VkVmFsdWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk11bHRpcGxlT2ZcIl0gPSBcIkVkbS5EZWNpbWFsXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5Db25zdHJhaW50XCJdID0gXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5Db25zdHJhaW50VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuSXRlbXNPZlwiXSA9IFwiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuSXRlbXNPZlR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk9wZW5Qcm9wZXJ0eVR5cGVDb25zdHJhaW50XCJdID0gXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5TaW5nbGVPckNvbGxlY3Rpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5EZXJpdmVkVHlwZUNvbnN0cmFpbnRcIl0gPSBcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLlNpbmdsZU9yQ29sbGVjdGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkFsbG93ZWRUZXJtc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUXVhbGlmaWVkVGVybU5hbWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkFwcGxpY2FibGVUZXJtc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUXVhbGlmaWVkVGVybU5hbWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heEl0ZW1zXCJdID0gXCJFZG0uSW50NjRcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbkl0ZW1zXCJdID0gXCJFZG0uSW50NjRcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5NZWFzdXJlcy5WMS5TY2FsZVwiXSA9IFwiRWRtLkJ5dGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5NZWFzdXJlcy5WMS5EdXJhdGlvbkdyYW51bGFyaXR5XCJdID0gXCJPcmcuT0RhdGEuTWVhc3VyZXMuVjEuRHVyYXRpb25HcmFudWxhcml0eVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5EaW1lbnNpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLk1lYXN1cmVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFjY3VtdWxhdGl2ZU1lYXN1cmVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLlJvbGxlZFVwUHJvcGVydHlDb3VudFwiXSA9IFwiRWRtLkludDE2XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuUGxhbm5pbmdBY3Rpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQWdncmVnYXRlZFByb3BlcnR5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFnZ3JlZ2F0ZWRQcm9wZXJ0eVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFnZ3JlZ2F0ZWRQcm9wZXJ0eVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5BbmFseXRpY2FsQ29udGV4dFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFuYWx5dGljYWxDb250ZXh0VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlcnZpY2VWZXJzaW9uXCJdID0gXCJFZG0uSW50MzJcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZXJ2aWNlU2NoZW1hVmVyc2lvblwiXSA9IFwiRWRtLkludDMyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEZvclwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzTGFuZ3VhZ2VJZGVudGlmaWVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0Rm9ybWF0XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEZvcm1hdFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc1RpbWV6b25lXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzVXBwZXJDYXNlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0N1cnJlbmN5XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc1VuaXRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlVuaXRTcGVjaWZpY1NjYWxlXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlVuaXRTcGVjaWZpY1ByZWNpc2lvblwiXSA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZWNvbmRhcnlLZXlcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NaW5PY2N1cnNcIl0gPSBcIkVkbS5JbnQ2NFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1heE9jY3Vyc1wiXSA9IFwiRWRtLkludDY0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXNzb2NpYXRpb25FbnRpdHlcIl0gPSBcIkVkbS5OYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRGVyaXZlZE5hdmlnYXRpb25cIl0gPSBcIkVkbS5OYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWFza2VkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXZlYWxPbkRlbWFuZFwiXSA9IFwiRWRtLkJvb2xlYW5cIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdE1hcHBpbmdcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNJbnN0YW5jZUFubm90YXRpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkFwcGxpY2F0aW9uXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXBwbGljYXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGltZXN0YW1wXCJdID0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5FcnJvclJlc29sdXRpb25cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5FcnJvclJlc29sdXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWVzc2FnZXNcIl0gPSBcIkVkbS5Db21wbGV4VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLm51bWVyaWNTZXZlcml0eVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk51bWVyaWNNZXNzYWdlU2V2ZXJpdHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWF4aW11bU51bWVyaWNNZXNzYWdlU2V2ZXJpdHlcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5OdW1lcmljTWVzc2FnZVNldmVyaXR5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQWN0aW9uQ3JpdGljYWxcIl0gPSBcIkVkbS5Cb29sZWFuXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXR0cmlidXRlc1wiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlbGF0ZWRSZWN1cnNpdmVIaWVyYXJjaHlcIl0gPSBcIkVkbS5Bbm5vdGF0aW9uUGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkludGVydmFsXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSW50ZXJ2YWxUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU0FQT2JqZWN0Tm9kZVR5cGVcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TQVBPYmplY3ROb2RlVHlwZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Db21wb3NpdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNOYXR1cmFsUGVyc29uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5TaW1wbGVJZGVudGlmaWVyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RNYXBwaW5nXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0TWFwcGluZ1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyWWVhclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhckhhbGZ5ZWFyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyUXVhcnRlclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhck1vbnRoXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyV2Vla1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEYXlPZkNhbGVuZGFyTW9udGhcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGF5T2ZDYWxlbmRhclllYXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJZZWFySGFsZnllYXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJZZWFyUXVhcnRlclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclllYXJNb250aFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclllYXJXZWVrXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyRGF0ZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxZZWFyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFBlcmlvZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxZZWFyUGVyaW9kXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFF1YXJ0ZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsWWVhclF1YXJ0ZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsV2Vla1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxZZWFyV2Vla1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEYXlPZkZpc2NhbFllYXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsWWVhclZhcmlhbnRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk11dHVhbGx5RXhjbHVzaXZlVGVybVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Tm9kZVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Tm9kZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdEFjdGl2YXRpb25WaWFcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlNpbXBsZUlkZW50aWZpZXJcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5FZGl0YWJsZUZpZWxkRm9yXCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNLZXlcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TaWRlRWZmZWN0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNpZGVFZmZlY3RzVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRlZmF1bHRWYWx1ZXNGdW5jdGlvblwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlF1YWxpZmllZE5hbWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWx0ZXJEZWZhdWx0VmFsdWVcIl0gPSBcIkVkbS5QcmltaXRpdmVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmlsdGVyRGVmYXVsdFZhbHVlSGlnaFwiXSA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Tb3J0T3JkZXJcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Tb3J0T3JkZXJUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVjdXJzaXZlSGllcmFyY2h5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVjdXJzaXZlSGllcmFyY2h5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkNyZWF0ZWRBdFwiXSA9IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQ3JlYXRlZEJ5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVXNlcklEXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQ2hhbmdlZEF0XCJdID0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5DaGFuZ2VkQnlcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Vc2VySURcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5BcHBseU11bHRpVW5pdEJlaGF2aW9yRm9yU29ydGluZ0FuZEZpbHRlcmluZ1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUHJpbWl0aXZlUHJvcGVydHlQYXRoXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLkN1cnJlbmN5Q29kZXNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLkNvZGVMaXN0U291cmNlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5Vbml0c09mTWVhc3VyZVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuQ29kZUxpc3RTb3VyY2VcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLlN0YW5kYXJkQ29kZVwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuRXh0ZXJuYWxDb2RlXCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5Jc0NvbmZpZ3VyYXRpb25EZXByZWNhdGlvbkNvZGVcIl0gPSBcIkVkbS5Cb29sZWFuXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQWRkcmVzc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5BZGRyZXNzVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Jc0VtYWlsQWRkcmVzc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLklzUGhvbmVOdW1iZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5FdmVudFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5FdmVudERhdGFcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuVGFza1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5UYXNrRGF0YVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5NZXNzYWdlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLk1lc3NhZ2VEYXRhXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5IaWVyYXJjaHkudjEuUmVjdXJzaXZlSGllcmFyY2h5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5IaWVyYXJjaHkudjEuUmVjdXJzaXZlSGllcmFyY2h5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLkVudGl0eVNlbWFudGljc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLkVudGl0eVNlbWFudGljc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5GaWVsZFNlbWFudGljc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLkZpZWxkU2VtYW50aWNzVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLklzUG90ZW50aWFsbHlQZXJzb25hbFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuSXNQb3RlbnRpYWxseVNlbnNpdGl2ZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckluZm9cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckluZm9UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JZGVudGlmaWNhdGlvblwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkQWJzdHJhY3RcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkJhZGdlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5CYWRnZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkxpbmVJdGVtXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRBYnN0cmFjdFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU3RhdHVzSW5mb1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkQWJzdHJhY3RcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpZWxkR3JvdXBcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpZWxkR3JvdXBUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Db25uZWN0ZWRGaWVsZHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNvbm5lY3RlZEZpZWxkc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkdlb0xvY2F0aW9uc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2VvTG9jYXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5HZW9Mb2NhdGlvblwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2VvTG9jYXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Db250YWN0c1wiXSA9IFwiRWRtLkFubm90YXRpb25QYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5NZWRpYVJlc291cmNlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5NZWRpYVJlc291cmNlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5LUElcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLktQSVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydERlZmluaXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5WYWx1ZUNyaXRpY2FsaXR5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5WYWx1ZUNyaXRpY2FsaXR5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlMYWJlbHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5TGFiZWxUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckZhY2V0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlF1aWNrVmlld0ZhY2V0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlF1aWNrQ3JlYXRlRmFjZXRzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GYWNldFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmlsdGVyRmFjZXRzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWZlcmVuY2VGYWNldFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlByZXNlbnRhdGlvblZhcmlhbnRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlByZXNlbnRhdGlvblZhcmlhbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25WYXJpYW50XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25WYXJpYW50VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGhpbmdQZXJzcGVjdGl2ZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Jc1N1bW1hcnlcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUGFydE9mUHJldmlld1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5NYXBcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2FsbGVyeVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Jc0ltYWdlVVJMXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLklzSW1hZ2VcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTXVsdGlMaW5lVGV4dFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk5vdGVcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk5vdGVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXBvcnRhbmNlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXBvcnRhbmNlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLklzQ29weUFjdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DcmVhdGVIaWRkZW5cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVXBkYXRlSGlkZGVuXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRlbGV0ZUhpZGRlblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5GaWx0ZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQWRhcHRhdGlvbkhpZGRlblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGREZWZhdWx0XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRBYnN0cmFjdFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlDYWxjdWxhdGlvblwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkVtcGhhc2l6ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuT3JkZXJCeVwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUGFyYW1ldGVyRGVmYXVsdFZhbHVlXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUmVjb21tZW5kYXRpb25TdGF0ZVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUmVjb21tZW5kYXRpb25TdGF0ZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlJlY29tbWVuZGF0aW9uTGlzdFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUmVjb21tZW5kYXRpb25MaXN0VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRXhjbHVkZUZyb21OYXZpZ2F0aW9uQ29udGV4dFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Eb05vdENoZWNrU2NhbGVPZk1lYXN1cmVkUXVhbnRpdHlcIl0gPSBcIkVkbS5Cb29sZWFuXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5IVE1MNS52MS5Dc3NEZWZhdWx0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuSFRNTDUudjEuQ3NzRGVmYXVsdHNUeXBlXCI7XG59KShUZXJtVG9UeXBlcyA9IGV4cG9ydHMuVGVybVRvVHlwZXMgfHwgKGV4cG9ydHMuVGVybVRvVHlwZXMgPSB7fSkpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZvY2FidWxhcnlSZWZlcmVuY2VzID0gdm9pZCAwO1xuLyoqXG4gKiBUaGUgbGlzdCBvZiB2b2NhYnVsYXJpZXMgd2l0aCBkZWZhdWx0IGFsaWFzZXMuXG4gKi9cbmV4cG9ydHMuVm9jYWJ1bGFyeVJlZmVyZW5jZXMgPSBbXG4gICAgeyBhbGlhczogXCJBdXRoXCIsIG5hbWVzcGFjZTogXCJPcmcuT0RhdGEuQXV0aG9yaXphdGlvbi5WMVwiLCB1cmk6IFwiaHR0cHM6Ly9vYXNpcy10Y3MuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvT3JnLk9EYXRhLkF1dGhvcml6YXRpb24uVjEueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkNvcmVcIiwgbmFtZXNwYWNlOiBcIk9yZy5PRGF0YS5Db3JlLlYxXCIsIHVyaTogXCJodHRwczovL29hc2lzLXRjcy5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9PcmcuT0RhdGEuQ29yZS5WMS54bWxcIiB9LFxuICAgIHsgYWxpYXM6IFwiQ2FwYWJpbGl0aWVzXCIsIG5hbWVzcGFjZTogXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxXCIsIHVyaTogXCJodHRwczovL29hc2lzLXRjcy5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9PcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLnhtbFwiIH0sXG4gICAgeyBhbGlhczogXCJBZ2dyZWdhdGlvblwiLCBuYW1lc3BhY2U6IFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxXCIsIHVyaTogXCJodHRwczovL29hc2lzLXRjcy5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9PcmcuT0RhdGEuQWdncmVnYXRpb24uVjEueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIlZhbGlkYXRpb25cIiwgbmFtZXNwYWNlOiBcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxXCIsIHVyaTogXCJodHRwczovL29hc2lzLXRjcy5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9PcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS54bWxcIiB9LFxuICAgIHsgYWxpYXM6IFwiTWVhc3VyZXNcIiwgbmFtZXNwYWNlOiBcIk9yZy5PRGF0YS5NZWFzdXJlcy5WMVwiLCB1cmk6IFwiaHR0cHM6Ly9vYXNpcy10Y3MuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvT3JnLk9EYXRhLk1lYXN1cmVzLlYxLnhtbFwiIH0sXG4gICAgeyBhbGlhczogXCJBbmFseXRpY3NcIiwgbmFtZXNwYWNlOiBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MVwiLCB1cmk6IFwiaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvQW5hbHl0aWNzLnhtbFwiIH0sXG4gICAgeyBhbGlhczogXCJDb21tb25cIiwgbmFtZXNwYWNlOiBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MVwiLCB1cmk6IFwiaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvQ29tbW9uLnhtbFwiIH0sXG4gICAgeyBhbGlhczogXCJDb2RlTGlzdFwiLCBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjFcIiwgdXJpOiBcImh0dHBzOi8vc2FwLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL0NvZGVMaXN0LnhtbFwiIH0sXG4gICAgeyBhbGlhczogXCJDb21tdW5pY2F0aW9uXCIsIG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxXCIsIHVyaTogXCJodHRwczovL3NhcC5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uLnhtbFwiIH0sXG4gICAgeyBhbGlhczogXCJIaWVyYXJjaHlcIiwgbmFtZXNwYWNlOiBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhpZXJhcmNoeS52MVwiLCB1cmk6IFwiaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvSGllcmFyY2h5LnhtbFwiIH0sXG4gICAgeyBhbGlhczogXCJQZXJzb25hbERhdGFcIiwgbmFtZXNwYWNlOiBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MVwiLCB1cmk6IFwiaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvUGVyc29uYWxEYXRhLnhtbFwiIH0sXG4gICAgeyBhbGlhczogXCJTZXNzaW9uXCIsIG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxXCIsIHVyaTogXCJodHRwczovL3NhcC5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9TZXNzaW9uLnhtbFwiIH0sXG4gICAgeyBhbGlhczogXCJVSVwiLCBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjFcIiwgdXJpOiBcImh0dHBzOi8vc2FwLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL1VJLnhtbFwiIH0sXG4gICAgeyBhbGlhczogXCJIVE1MNVwiLCBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuSFRNTDUudjFcIiwgdXJpOiBcImh0dHBzOi8vc2FwLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL0hUTUw1LnhtbFwiIH1cbl07XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg3OCk7XG4iLCIiXX0=
|