@sapui5/sap.fe.core 1.102.0 → 1.103.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 +5 -5
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +62 -26
- package/src/sap/fe/core/AppComponent.ts +56 -40
- package/src/sap/fe/core/AppStateHandler.js +10 -10
- package/src/sap/fe/core/AppStateHandler.ts +9 -9
- package/src/sap/fe/core/BaseController.js +11 -9
- package/src/sap/fe/core/BaseController.ts +15 -13
- package/src/sap/fe/core/CommonUtils.js +236 -109
- package/src/sap/fe/core/CommonUtils.ts +252 -136
- package/src/sap/fe/core/ExtensionAPI.js +24 -27
- package/src/sap/fe/core/ExtensionAPI.ts +36 -38
- package/src/sap/fe/core/PageController.js +4 -4
- package/src/sap/fe/core/PageController.ts +4 -5
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +6 -6
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +8 -8
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +11 -10
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +27 -27
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +28 -26
- package/src/sap/fe/core/controllerextensions/EditFlow.js +129 -118
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +154 -141
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +31 -26
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +34 -35
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +70 -70
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +77 -77
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +84 -78
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +105 -101
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
- package/src/sap/fe/core/controllerextensions/MassEdit.js +8 -8
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +19 -26
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +29 -14
- package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
- package/src/sap/fe/core/controllerextensions/PageReady.ts +94 -34
- package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
- package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
- package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +22 -22
- package/src/sap/fe/core/controllerextensions/Share.ts +30 -29
- package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
- package/src/sap/fe/core/controllerextensions/ViewState.js +65 -62
- package/src/sap/fe/core/controllerextensions/ViewState.ts +68 -63
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +6 -6
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +12 -17
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +184 -137
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +253 -206
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +113 -121
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +148 -158
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +198 -148
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +223 -159
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +78 -44
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +90 -60
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +52 -55
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +55 -58
- package/src/sap/fe/core/controls/Any.js +9 -5
- package/src/sap/fe/core/controls/Any.ts +10 -4
- package/src/sap/fe/core/controls/CommandExecution.js +11 -25
- package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
- package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
- package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
- package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
- package/src/sap/fe/core/controls/FileWrapper.js +2 -2
- package/src/sap/fe/core/controls/FileWrapper.ts +11 -11
- package/src/sap/fe/core/controls/FilterBar.js +6 -2
- package/src/sap/fe/core/controls/FilterBar.ts +13 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
- package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
- package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +47 -47
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +52 -52
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
- package/src/sap/fe/core/converters/ConverterContext.js +26 -33
- package/src/sap/fe/core/converters/ConverterContext.ts +51 -60
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +14 -14
- package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
- package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
- package/src/sap/fe/core/converters/MetaModelConverter.js +50 -32
- package/src/sap/fe/core/converters/MetaModelConverter.ts +145 -127
- package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
- package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
- package/src/sap/fe/core/converters/annotations/DataField.js +54 -34
- package/src/sap/fe/core/converters/annotations/DataField.ts +97 -75
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
- package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
- package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
- package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +23 -26
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +28 -28
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +40 -36
- package/src/sap/fe/core/converters/controls/Common/Form.js +25 -27
- package/src/sap/fe/core/converters/controls/Common/Form.ts +37 -45
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +35 -39
- package/src/sap/fe/core/converters/controls/Common/Table.js +174 -183
- package/src/sap/fe/core/converters/controls/Common/Table.ts +237 -250
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +64 -57
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +73 -72
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +98 -96
- package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +10 -13
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
- package/src/sap/fe/core/converters/helpers/ID.js +46 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +25 -25
- package/src/sap/fe/core/converters/helpers/Key.js +7 -7
- package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -4
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +30 -29
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +40 -40
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
- package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/StandardFormatter.js +89 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +64 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
- package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
- package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
- package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
- package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
- package/src/sap/fe/core/helpers/BindingToolkit.js +1809 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +365 -264
- package/src/sap/fe/core/helpers/ClassSupport.js +20 -11
- package/src/sap/fe/core/helpers/ClassSupport.ts +14 -10
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -6
- package/src/sap/fe/core/helpers/EditState.ts +5 -10
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
- package/src/sap/fe/core/helpers/MassEditHelper.js +281 -254
- package/src/sap/fe/core/helpers/MassEditHelper.ts +337 -289
- package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
- package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
- package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
- package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
- package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
- package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
- package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +8 -8
- package/src/sap/fe/core/library.js +42 -3
- package/src/sap/fe/core/library.ts +38 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
- package/src/sap/fe/core/messagebundle.properties +49 -35
- package/src/sap/fe/core/messagebundle_ar.properties +13 -5
- package/src/sap/fe/core/messagebundle_bg.properties +13 -5
- package/src/sap/fe/core/messagebundle_ca.properties +13 -5
- package/src/sap/fe/core/messagebundle_cs.properties +13 -5
- package/src/sap/fe/core/messagebundle_cy.properties +14 -6
- package/src/sap/fe/core/messagebundle_da.properties +13 -5
- package/src/sap/fe/core/messagebundle_de.properties +15 -7
- package/src/sap/fe/core/messagebundle_el.properties +14 -6
- package/src/sap/fe/core/messagebundle_en.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +11 -3
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +7 -1
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +44 -85
- package/src/sap/fe/core/messagebundle_es.properties +13 -5
- package/src/sap/fe/core/messagebundle_es_MX.properties +13 -5
- package/src/sap/fe/core/messagebundle_et.properties +13 -5
- package/src/sap/fe/core/messagebundle_fi.properties +14 -6
- package/src/sap/fe/core/messagebundle_fr.properties +14 -6
- package/src/sap/fe/core/messagebundle_fr_CA.properties +14 -6
- package/src/sap/fe/core/messagebundle_hi.properties +14 -6
- package/src/sap/fe/core/messagebundle_hr.properties +14 -6
- package/src/sap/fe/core/messagebundle_hu.properties +13 -5
- package/src/sap/fe/core/messagebundle_id.properties +13 -5
- package/src/sap/fe/core/messagebundle_it.properties +33 -25
- package/src/sap/fe/core/messagebundle_iw.properties +13 -5
- package/src/sap/fe/core/messagebundle_ja.properties +14 -6
- package/src/sap/fe/core/messagebundle_kk.properties +13 -5
- package/src/sap/fe/core/messagebundle_ko.properties +13 -5
- package/src/sap/fe/core/messagebundle_lt.properties +13 -5
- package/src/sap/fe/core/messagebundle_lv.properties +14 -6
- package/src/sap/fe/core/messagebundle_ms.properties +13 -5
- package/src/sap/fe/core/messagebundle_nl.properties +13 -5
- package/src/sap/fe/core/messagebundle_no.properties +13 -5
- package/src/sap/fe/core/messagebundle_pl.properties +13 -5
- package/src/sap/fe/core/messagebundle_pt.properties +13 -5
- package/src/sap/fe/core/messagebundle_pt_PT.properties +14 -6
- package/src/sap/fe/core/messagebundle_ro.properties +13 -5
- package/src/sap/fe/core/messagebundle_ru.properties +13 -5
- package/src/sap/fe/core/messagebundle_sh.properties +13 -5
- package/src/sap/fe/core/messagebundle_sk.properties +13 -5
- package/src/sap/fe/core/messagebundle_sl.properties +17 -9
- package/src/sap/fe/core/messagebundle_sv.properties +14 -6
- package/src/sap/fe/core/messagebundle_th.properties +13 -5
- package/src/sap/fe/core/messagebundle_tr.properties +13 -5
- package/src/sap/fe/core/messagebundle_uk.properties +13 -5
- package/src/sap/fe/core/messagebundle_vi.properties +13 -5
- package/src/sap/fe/core/messagebundle_zh_CN.properties +14 -6
- package/src/sap/fe/core/messagebundle_zh_TW.properties +13 -5
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +2 -2
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +14 -14
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +53 -44
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +54 -46
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
- package/src/sap/fe/core/services/ShellServicesFactory.js +72 -76
- package/src/sap/fe/core/services/ShellServicesFactory.ts +76 -82
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +20 -15
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +26 -21
- package/src/sap/fe/core/support/CommonHelper.js +3 -2
- package/src/sap/fe/core/support/CommonHelper.ts +9 -13
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.ts +5 -5
- package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
- package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
- package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
- package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
- package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
- package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
- package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
- package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
- package/src/sap/fe/core/templating/FilterHelper.js +10 -9
- package/src/sap/fe/core/templating/FilterHelper.ts +13 -13
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
- package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
- package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
- package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
- package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
- package/src/sap/fe/core/templating/UIFormatters.js +148 -93
- package/src/sap/fe/core/templating/UIFormatters.ts +196 -124
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +2 -2
- package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
|
@@ -46,7 +46,7 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
46
46
|
|
|
47
47
|
function parsePropertyValue(annotationObject, propertyKey, currentTarget, annotationsLists, oCapabilities) {
|
|
48
48
|
var value;
|
|
49
|
-
var currentPropertyTarget = currentTarget
|
|
49
|
+
var currentPropertyTarget = "".concat(currentTarget, "/").concat(propertyKey);
|
|
50
50
|
var typeOfAnnotation = typeof annotationObject;
|
|
51
51
|
|
|
52
52
|
if (annotationObject === null) {
|
|
@@ -73,7 +73,7 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
73
73
|
value = {
|
|
74
74
|
type: "Collection",
|
|
75
75
|
Collection: annotationObject.map(function (subAnnotationObject, subAnnotationObjectIndex) {
|
|
76
|
-
return parseAnnotationObject(subAnnotationObject, currentPropertyTarget
|
|
76
|
+
return parseAnnotationObject(subAnnotationObject, "".concat(currentPropertyTarget, "/").concat(subAnnotationObjectIndex), annotationsLists, oCapabilities);
|
|
77
77
|
})
|
|
78
78
|
};
|
|
79
79
|
|
|
@@ -201,7 +201,7 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
201
201
|
} else if (annotationObject.$EnumMember !== undefined) {
|
|
202
202
|
value = {
|
|
203
203
|
type: "EnumMember",
|
|
204
|
-
EnumMember: mapNameToAlias(annotationObject.$EnumMember.split("/")[0])
|
|
204
|
+
EnumMember: "".concat(mapNameToAlias(annotationObject.$EnumMember.split("/")[0]), "/").concat(annotationObject.$EnumMember.split("/")[1])
|
|
205
205
|
};
|
|
206
206
|
} else if (annotationObject.$Type) {
|
|
207
207
|
value = {
|
|
@@ -235,7 +235,7 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
235
235
|
}
|
|
236
236
|
|
|
237
237
|
var lastDot = annoPart.lastIndexOf(".");
|
|
238
|
-
return pathPart + VOCABULARY_ALIAS[annoPart.substr(0, lastDot)]
|
|
238
|
+
return "".concat(pathPart + VOCABULARY_ALIAS[annoPart.substr(0, lastDot)], ".").concat(annoPart.substr(lastDot + 1));
|
|
239
239
|
}
|
|
240
240
|
|
|
241
241
|
function parseAnnotationObject(annotationObject, currentObjectTarget, annotationsLists, oCapabilities) {
|
|
@@ -346,12 +346,12 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
346
346
|
} else if (annotationObject.$EnumMember !== undefined) {
|
|
347
347
|
parsedAnnotationObject = {
|
|
348
348
|
type: "EnumMember",
|
|
349
|
-
EnumMember: mapNameToAlias(annotationObject.$EnumMember.split("/")[0])
|
|
349
|
+
EnumMember: "".concat(mapNameToAlias(annotationObject.$EnumMember.split("/")[0]), "/").concat(annotationObject.$EnumMember.split("/")[1])
|
|
350
350
|
};
|
|
351
351
|
} else if (Array.isArray(annotationObject)) {
|
|
352
352
|
var parsedAnnotationCollection = parsedAnnotationObject;
|
|
353
353
|
parsedAnnotationCollection.collection = annotationObject.map(function (subAnnotationObject, subAnnotationIndex) {
|
|
354
|
-
return parseAnnotationObject(subAnnotationObject, currentObjectTarget
|
|
354
|
+
return parseAnnotationObject(subAnnotationObject, "".concat(currentObjectTarget, "/").concat(subAnnotationIndex), annotationsLists, oCapabilities);
|
|
355
355
|
});
|
|
356
356
|
|
|
357
357
|
if (annotationObject.length > 0) {
|
|
@@ -521,7 +521,7 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
521
521
|
var annotationOfAnnotationSplit = _annotationKey.split("@");
|
|
522
522
|
|
|
523
523
|
if (annotationOfAnnotationSplit.length > 2) {
|
|
524
|
-
currentOutAnnotationObject = getOrCreateAnnotationList(annotationTarget
|
|
524
|
+
currentOutAnnotationObject = getOrCreateAnnotationList("".concat(annotationTarget, "@").concat(annotationOfAnnotationSplit[1]), annotationLists);
|
|
525
525
|
_annotationKey = annotationOfAnnotationSplit[2];
|
|
526
526
|
} else {
|
|
527
527
|
_annotationKey = annotationOfAnnotationSplit[1];
|
|
@@ -535,10 +535,10 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
535
535
|
term: "".concat(_annotationKey),
|
|
536
536
|
qualifier: qualifier
|
|
537
537
|
};
|
|
538
|
-
var currentAnnotationTarget = annotationTarget
|
|
538
|
+
var currentAnnotationTarget = "".concat(annotationTarget, "@").concat(parsedAnnotationObject.term);
|
|
539
539
|
|
|
540
540
|
if (qualifier) {
|
|
541
|
-
currentAnnotationTarget += "#"
|
|
541
|
+
currentAnnotationTarget += "#".concat(qualifier);
|
|
542
542
|
}
|
|
543
543
|
|
|
544
544
|
var isCollection = false;
|
|
@@ -638,12 +638,12 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
638
638
|
} else if (annotationObject.$EnumMember !== undefined) {
|
|
639
639
|
parsedAnnotationObject.value = {
|
|
640
640
|
type: "EnumMember",
|
|
641
|
-
EnumMember: mapNameToAlias(annotationObject.$EnumMember.split("/")[0])
|
|
641
|
+
EnumMember: "".concat(mapNameToAlias(annotationObject.$EnumMember.split("/")[0]), "/").concat(annotationObject.$EnumMember.split("/")[1])
|
|
642
642
|
};
|
|
643
643
|
} else if (Array.isArray(annotationObject)) {
|
|
644
644
|
isCollection = true;
|
|
645
645
|
parsedAnnotationObject.collection = annotationObject.map(function (subAnnotationObject, subAnnotationIndex) {
|
|
646
|
-
return parseAnnotationObject(subAnnotationObject, currentAnnotationTarget
|
|
646
|
+
return parseAnnotationObject(subAnnotationObject, "".concat(currentAnnotationTarget, "/").concat(subAnnotationIndex), annotationLists, oCapabilities);
|
|
647
647
|
});
|
|
648
648
|
|
|
649
649
|
if (annotationObject.length > 0) {
|
|
@@ -777,7 +777,7 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
777
777
|
_type: "Singleton",
|
|
778
778
|
name: singletonName,
|
|
779
779
|
navigationPropertyBinding: {},
|
|
780
|
-
|
|
780
|
+
entityTypeName: singletonDefinition.$Type,
|
|
781
781
|
fullyQualifiedName: "".concat(entityContainerName, "/").concat(singletonName),
|
|
782
782
|
nullable: true
|
|
783
783
|
};
|
|
@@ -786,7 +786,7 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
786
786
|
function prepareTypeDefinition(typeDefinition, typeName, namespace) {
|
|
787
787
|
var typeObject = {
|
|
788
788
|
_type: "TypeDefinition",
|
|
789
|
-
name: typeName.replace(namespace
|
|
789
|
+
name: typeName.replace("".concat(namespace, "."), ""),
|
|
790
790
|
fullyQualifiedName: typeName,
|
|
791
791
|
underlyingType: typeDefinition.$UnderlyingType
|
|
792
792
|
};
|
|
@@ -796,7 +796,7 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
796
796
|
function prepareComplexType(complexTypeDefinition, complexTypeName, namespace) {
|
|
797
797
|
var complexTypeObject = {
|
|
798
798
|
_type: "ComplexType",
|
|
799
|
-
name: complexTypeName.replace(namespace
|
|
799
|
+
name: complexTypeName.replace("".concat(namespace, "."), ""),
|
|
800
800
|
fullyQualifiedName: complexTypeName,
|
|
801
801
|
properties: [],
|
|
802
802
|
navigationProperties: []
|
|
@@ -836,11 +836,12 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
836
836
|
var entityKeys = prepareEntityKeys(entityTypeDefinition, metaModelData);
|
|
837
837
|
var entityTypeObject = {
|
|
838
838
|
_type: "EntityType",
|
|
839
|
-
name: entityTypeName.replace(namespace
|
|
839
|
+
name: entityTypeName.replace("".concat(namespace, "."), ""),
|
|
840
840
|
fullyQualifiedName: entityTypeName,
|
|
841
841
|
keys: [],
|
|
842
842
|
entityProperties: [],
|
|
843
|
-
navigationProperties: []
|
|
843
|
+
navigationProperties: [],
|
|
844
|
+
actions: {}
|
|
844
845
|
};
|
|
845
846
|
var entityProperties = Object.keys(entityTypeDefinition).filter(function (propertyNameOrNot) {
|
|
846
847
|
if (propertyNameOrNot != "$Key" && propertyNameOrNot != "$kind") {
|
|
@@ -900,6 +901,7 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
900
901
|
_type: "ActionParameter",
|
|
901
902
|
isEntitySet: param.$Type === actionRawData.$EntitySetPath,
|
|
902
903
|
fullyQualifiedName: "".concat(actionFQN, "/").concat(param.$Name),
|
|
904
|
+
name: param.$Name,
|
|
903
905
|
type: param.$Type
|
|
904
906
|
};
|
|
905
907
|
})
|
|
@@ -989,11 +991,16 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
989
991
|
}
|
|
990
992
|
}
|
|
991
993
|
});
|
|
992
|
-
var entityContainer = {
|
|
994
|
+
var entityContainer = {
|
|
995
|
+
_type: "EntityContainer",
|
|
996
|
+
name: "",
|
|
997
|
+
fullyQualifiedName: ""
|
|
998
|
+
};
|
|
993
999
|
|
|
994
1000
|
if (entityContainerName) {
|
|
995
1001
|
entityContainer = {
|
|
996
|
-
|
|
1002
|
+
_type: "EntityContainer",
|
|
1003
|
+
name: entityContainerName.replace("".concat(namespace, "."), ""),
|
|
997
1004
|
fullyQualifiedName: entityContainerName
|
|
998
1005
|
};
|
|
999
1006
|
}
|
|
@@ -1016,8 +1023,8 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
1016
1023
|
var actions = Object.keys(oMetaModelData).filter(function (key) {
|
|
1017
1024
|
return Array.isArray(oMetaModelData[key]) && oMetaModelData[key].length > 0 && oMetaModelData[key][0].$kind === "Action";
|
|
1018
1025
|
}).reduce(function (outActions, actionName) {
|
|
1019
|
-
var
|
|
1020
|
-
|
|
1026
|
+
var innerActions = oMetaModelData[actionName];
|
|
1027
|
+
innerActions.forEach(function (action) {
|
|
1021
1028
|
outActions.push(prepareAction(actionName, action, namespace, entityContainerName));
|
|
1022
1029
|
});
|
|
1023
1030
|
return outActions;
|
|
@@ -1061,9 +1068,9 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
1061
1068
|
/**
|
|
1062
1069
|
* Convert the ODataMetaModel into another format that allow for easy manipulation of the annotations.
|
|
1063
1070
|
*
|
|
1064
|
-
* @param
|
|
1071
|
+
* @param oMetaModel The ODataMetaModel
|
|
1065
1072
|
* @param oCapabilities The current capabilities
|
|
1066
|
-
* @returns
|
|
1073
|
+
* @returns An object containing object-like annotations
|
|
1067
1074
|
*/
|
|
1068
1075
|
|
|
1069
1076
|
function convertTypes(oMetaModel, oCapabilities) {
|
|
@@ -1073,7 +1080,7 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
1073
1080
|
var parsedOutput = prepareEntityTypes(oMetaModel, oCapabilities);
|
|
1074
1081
|
|
|
1075
1082
|
try {
|
|
1076
|
-
mMetaModelMap[sMetaModelId] = AnnotationConverter.
|
|
1083
|
+
mMetaModelMap[sMetaModelId] = AnnotationConverter.convert(parsedOutput);
|
|
1077
1084
|
} catch (oError) {
|
|
1078
1085
|
throw new Error(oError);
|
|
1079
1086
|
}
|
|
@@ -1084,6 +1091,18 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
1084
1091
|
|
|
1085
1092
|
_exports.convertTypes = convertTypes;
|
|
1086
1093
|
|
|
1094
|
+
function getConvertedTypes(oContext) {
|
|
1095
|
+
var oMetaModel = oContext.getModel();
|
|
1096
|
+
|
|
1097
|
+
if (!oMetaModel.isA("sap.ui.model.odata.v4.ODataMetaModel")) {
|
|
1098
|
+
throw new Error("This should only be called on a ODataMetaModel");
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
return convertTypes(oMetaModel);
|
|
1102
|
+
}
|
|
1103
|
+
|
|
1104
|
+
_exports.getConvertedTypes = getConvertedTypes;
|
|
1105
|
+
|
|
1087
1106
|
function deleteModelCacheData(oMetaModel) {
|
|
1088
1107
|
delete mMetaModelMap[oMetaModel.id];
|
|
1089
1108
|
}
|
|
@@ -1092,15 +1111,15 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
1092
1111
|
|
|
1093
1112
|
function convertMetaModelContext(oMetaModelContext) {
|
|
1094
1113
|
var bIncludeVisitedObjects = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
1095
|
-
var
|
|
1114
|
+
var oConvertedMetadata = convertTypes(oMetaModelContext.getModel());
|
|
1096
1115
|
var sPath = oMetaModelContext.getPath();
|
|
1097
1116
|
var aPathSplit = sPath.split("/");
|
|
1098
|
-
var targetEntitySet =
|
|
1117
|
+
var targetEntitySet = oConvertedMetadata.entitySets.find(function (entitySet) {
|
|
1099
1118
|
return entitySet.name === aPathSplit[1];
|
|
1100
1119
|
});
|
|
1101
1120
|
|
|
1102
1121
|
if (!targetEntitySet) {
|
|
1103
|
-
targetEntitySet =
|
|
1122
|
+
targetEntitySet = oConvertedMetadata.singletons.find(function (singleton) {
|
|
1104
1123
|
return singleton.name === aPathSplit[1];
|
|
1105
1124
|
});
|
|
1106
1125
|
}
|
|
@@ -1207,10 +1226,9 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
1207
1226
|
|
|
1208
1227
|
if (_relativeSplit[1] && action.parameters) {
|
|
1209
1228
|
var parameterName = _relativeSplit[1];
|
|
1210
|
-
|
|
1211
|
-
return parameter.fullyQualifiedName.endsWith("/"
|
|
1229
|
+
return action.parameters.find(function (parameter) {
|
|
1230
|
+
return parameter.fullyQualifiedName.endsWith("/".concat(parameterName));
|
|
1212
1231
|
});
|
|
1213
|
-
return targetParameter;
|
|
1214
1232
|
} else if (relativePath.length === 1) {
|
|
1215
1233
|
return action;
|
|
1216
1234
|
}
|
|
@@ -1233,7 +1251,7 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
1233
1251
|
_exports.convertMetaModelContext = convertMetaModelContext;
|
|
1234
1252
|
|
|
1235
1253
|
function getInvolvedDataModelObjects(oMetaModelContext, oEntitySetMetaModelContext) {
|
|
1236
|
-
var
|
|
1254
|
+
var oConvertedMetadata = convertTypes(oMetaModelContext.getModel());
|
|
1237
1255
|
var metaModelContext = convertMetaModelContext(oMetaModelContext, true);
|
|
1238
1256
|
var targetEntitySetLocation;
|
|
1239
1257
|
|
|
@@ -1241,7 +1259,7 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
1241
1259
|
targetEntitySetLocation = getInvolvedDataModelObjects(oEntitySetMetaModelContext);
|
|
1242
1260
|
}
|
|
1243
1261
|
|
|
1244
|
-
return getInvolvedDataModelObjectFromPath(metaModelContext,
|
|
1262
|
+
return getInvolvedDataModelObjectFromPath(metaModelContext, oConvertedMetadata, targetEntitySetLocation);
|
|
1245
1263
|
}
|
|
1246
1264
|
|
|
1247
1265
|
_exports.getInvolvedDataModelObjects = getInvolvedDataModelObjects;
|
|
@@ -1321,4 +1339,4 @@ sap.ui.define(["sap/fe/core/converters/common/AnnotationConverter", "../helpers/
|
|
|
1321
1339
|
_exports.getInvolvedDataModelObjectFromPath = getInvolvedDataModelObjectFromPath;
|
|
1322
1340
|
return _exports;
|
|
1323
1341
|
}, false);
|
|
1324
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1ldGFNb2RlbENvbnZlcnRlci50cyJdLCJuYW1lcyI6WyJWT0NBQlVMQVJZX0FMSUFTIiwiRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiQ2hhcnQiLCJNaWNyb0NoYXJ0IiwiVVNoZWxsIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiQXBwU3RhdGUiLCJwYXJzZVByb3BlcnR5VmFsdWUiLCJhbm5vdGF0aW9uT2JqZWN0IiwicHJvcGVydHlLZXkiLCJjdXJyZW50VGFyZ2V0IiwiYW5ub3RhdGlvbnNMaXN0cyIsIm9DYXBhYmlsaXRpZXMiLCJ2YWx1ZSIsImN1cnJlbnRQcm9wZXJ0eVRhcmdldCIsInR5cGVPZkFubm90YXRpb24iLCJ0eXBlIiwiTnVsbCIsIlN0cmluZyIsIkJvb2wiLCJJbnQiLCJBcnJheSIsImlzQXJyYXkiLCJDb2xsZWN0aW9uIiwibWFwIiwic3ViQW5ub3RhdGlvbk9iamVjdCIsInN1YkFubm90YXRpb25PYmplY3RJbmRleCIsInBhcnNlQW5ub3RhdGlvbk9iamVjdCIsImxlbmd0aCIsImhhc093blByb3BlcnR5IiwiJFBhdGgiLCJ1bmRlZmluZWQiLCJQYXRoIiwiJERlY2ltYWwiLCJEZWNpbWFsIiwicGFyc2VGbG9hdCIsIiRQcm9wZXJ0eVBhdGgiLCJQcm9wZXJ0eVBhdGgiLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCIkSWYiLCJJZiIsIiRBbmQiLCJBbmQiLCIkT3IiLCJPciIsIiROb3QiLCJOb3QiLCIkRXEiLCJFcSIsIiROZSIsIk5lIiwiJEd0IiwiR3QiLCIkR2UiLCJHZSIsIiRMdCIsIkx0IiwiJExlIiwiTGUiLCIkQXBwbHkiLCJBcHBseSIsIkZ1bmN0aW9uIiwiJEZ1bmN0aW9uIiwiJEFubm90YXRpb25QYXRoIiwiQW5ub3RhdGlvblBhdGgiLCIkRW51bU1lbWJlciIsIkVudW1NZW1iZXIiLCJtYXBOYW1lVG9BbGlhcyIsInNwbGl0IiwiJFR5cGUiLCJSZWNvcmQiLCJuYW1lIiwiYW5ub3RhdGlvbk5hbWUiLCJwYXRoUGFydCIsImFubm9QYXJ0IiwibGFzdERvdCIsImxhc3RJbmRleE9mIiwic3Vic3RyIiwiY3VycmVudE9iamVjdFRhcmdldCIsInBhcnNlZEFubm90YXRpb25PYmplY3QiLCJ0eXBlT2ZPYmplY3QiLCJwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJzdWJBbm5vdGF0aW9uSW5kZXgiLCJ0eXBlVmFsdWUiLCJwcm9wZXJ0eVZhbHVlcyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwic3RhcnRzV2l0aCIsInB1c2giLCJjcmVhdGVBbm5vdGF0aW9uTGlzdHMiLCJnZXRPckNyZWF0ZUFubm90YXRpb25MaXN0IiwidGFyZ2V0IiwiYW5ub3RhdGlvbnMiLCJyZW1vdmVDaGFydEFubm90YXRpb25zIiwiZmlsdGVyIiwib1JlY29yZCIsIlRhcmdldCIsImluZGV4T2YiLCJyZW1vdmVJQk5Bbm5vdGF0aW9ucyIsImhhbmRsZVByZXNlbnRhdGlvblZhcmlhbnQiLCJhbm5vdGF0aW9uT2JqZWN0cyIsImFubm90YXRpb25UYXJnZXQiLCJhbm5vdGF0aW9uTGlzdHMiLCJvdXRBbm5vdGF0aW9uT2JqZWN0IiwiYW5ub3RhdGlvbktleSIsIkRhdGEiLCJWaXN1YWxpemF0aW9ucyIsImN1cnJlbnRPdXRBbm5vdGF0aW9uT2JqZWN0IiwiYW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0IiwiYW5ub3RhdGlvblF1YWxpZmllclNwbGl0IiwicXVhbGlmaWVyIiwidGVybSIsImN1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0IiwiaXNDb2xsZWN0aW9uIiwidHlwZW9mQW5ub3RhdGlvbiIsInJlY29yZCIsInByZXBhcmVQcm9wZXJ0eSIsInByb3BlcnR5RGVmaW5pdGlvbiIsImVudGl0eVR5cGVPYmplY3QiLCJwcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0eU9iamVjdCIsIl90eXBlIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwibWF4TGVuZ3RoIiwiJE1heExlbmd0aCIsInByZWNpc2lvbiIsIiRQcmVjaXNpb24iLCJzY2FsZSIsIiRTY2FsZSIsIm51bGxhYmxlIiwiJE51bGxhYmxlIiwicHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0eSIsIm5hdlByb3BlcnR5RGVmaW5pdGlvbiIsIm5hdlByb3BlcnR5TmFtZSIsInJlZmVyZW50aWFsQ29uc3RyYWludCIsIiRSZWZlcmVudGlhbENvbnN0cmFpbnQiLCJzb3VyY2VQcm9wZXJ0eU5hbWUiLCJzb3VyY2VUeXBlTmFtZSIsInNvdXJjZVByb3BlcnR5IiwidGFyZ2V0VHlwZU5hbWUiLCJ0YXJnZXRQcm9wZXJ0eSIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsInBhcnRuZXIiLCIkUGFydG5lciIsIiRpc0NvbGxlY3Rpb24iLCJjb250YWluc1RhcmdldCIsIiRDb250YWluc1RhcmdldCIsInByZXBhcmVFbnRpdHlTZXQiLCJlbnRpdHlTZXREZWZpbml0aW9uIiwiZW50aXR5U2V0TmFtZSIsImVudGl0eUNvbnRhaW5lck5hbWUiLCJlbnRpdHlTZXRPYmplY3QiLCJuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIiwiZW50aXR5VHlwZU5hbWUiLCJwcmVwYXJlU2luZ2xldG9uIiwic2luZ2xldG9uRGVmaW5pdGlvbiIsInNpbmdsZXRvbk5hbWUiLCJ0eXBlTmFtZSIsInByZXBhcmVUeXBlRGVmaW5pdGlvbiIsInR5cGVEZWZpbml0aW9uIiwibmFtZXNwYWNlIiwidHlwZU9iamVjdCIsInJlcGxhY2UiLCJ1bmRlcmx5aW5nVHlwZSIsIiRVbmRlcmx5aW5nVHlwZSIsInByZXBhcmVDb21wbGV4VHlwZSIsImNvbXBsZXhUeXBlRGVmaW5pdGlvbiIsImNvbXBsZXhUeXBlTmFtZSIsImNvbXBsZXhUeXBlT2JqZWN0IiwicHJvcGVydGllcyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiY29tcGxleFR5cGVQcm9wZXJ0aWVzIiwicHJvcGVydHlOYW1lT3JOb3QiLCIka2luZCIsInNvcnQiLCJhIiwiYiIsImNvbXBsZXhUeXBlTmF2aWdhdGlvblByb3BlcnRpZXMiLCJwcmVwYXJlRW50aXR5S2V5cyIsImVudGl0eVR5cGVEZWZpbml0aW9uIiwib01ldGFNb2RlbERhdGEiLCIkS2V5IiwiJEJhc2VUeXBlIiwicHJlcGFyZUVudGl0eVR5cGUiLCJtZXRhTW9kZWxEYXRhIiwiZW50aXR5S2V5cyIsImVudGl0eVByb3BlcnRpZXMiLCJlbnRpdHlLZXkiLCJmaW5kIiwicHJvcGVydHkiLCJwcmVwYXJlQWN0aW9uIiwiYWN0aW9uTmFtZSIsImFjdGlvblJhd0RhdGEiLCJhY3Rpb25FbnRpdHlUeXBlIiwiYWN0aW9uRlFOIiwiYWN0aW9uU2hvcnROYW1lIiwiJElzQm91bmQiLCJiaW5kaW5nUGFyYW1ldGVyIiwiJFBhcmFtZXRlciIsInBhcmFtZXRlcnMiLCJpc0JvdW5kIiwiaXNGdW5jdGlvbiIsInNvdXJjZVR5cGUiLCJyZXR1cm5UeXBlIiwiJFJldHVyblR5cGUiLCJwYXJhbSIsImlzRW50aXR5U2V0IiwiJEVudGl0eVNldFBhdGgiLCIkTmFtZSIsInByZXBhcmVFbnRpdHlUeXBlcyIsIm9NZXRhTW9kZWwiLCJnZXRPYmplY3QiLCJlbnRpdHlUeXBlcyIsImVudGl0eVNldHMiLCJzaW5nbGV0b25zIiwiY29tcGxleFR5cGVzIiwidHlwZURlZmluaXRpb25zIiwiJEVudGl0eUNvbnRhaW5lciIsInNjaGVtYUtleXMiLCJtZXRhbW9kZWxLZXkiLCJzT2JqZWN0TmFtZSIsImVudGl0eVR5cGUiLCIkQW5ub3RhdGlvbnMiLCJmaWx0ZXJGYWNldEFubm90YXRpb24iLCJJRCIsImdlbmVyYXRlIiwiRmFjZXQiLCJlbnRpdHlQcm9wZXJ0eSIsIlZhbHVlIiwiY29tcGxleFR5cGUiLCJvRW50aXR5Q29udGFpbmVyIiwiZW50aXR5U2V0Iiwic2luZ2xldG9uIiwiZW50aXR5Q29udGFpbmVyIiwibmF2UHJvcGVydHlCaW5kaW5ncyIsIiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIiwibmF2UHJvcE5hbWUiLCJ0YXJnZXRFbnRpdHlTZXQiLCJhY3Rpb25zIiwia2V5IiwicmVkdWNlIiwib3V0QWN0aW9ucyIsImFjdGlvbiIsIm91dEFubm90YXRpb25MaXN0cyIsInNBbm5vdGF0aW9uTmFtZSIsInJlZmVyZW5jZXMiLCJpZGVudGlmaWNhdGlvbiIsInZlcnNpb24iLCJzY2hlbWEiLCJhc3NvY2lhdGlvbnMiLCJhc3NvY2lhdGlvblNldHMiLCJtTWV0YU1vZGVsTWFwIiwiY29udmVydFR5cGVzIiwic01ldGFNb2RlbElkIiwiaWQiLCJwYXJzZWRPdXRwdXQiLCJBbm5vdGF0aW9uQ29udmVydGVyIiwib0Vycm9yIiwiRXJyb3IiLCJkZWxldGVNb2RlbENhY2hlRGF0YSIsImNvbnZlcnRNZXRhTW9kZWxDb250ZXh0Iiwib01ldGFNb2RlbENvbnRleHQiLCJiSW5jbHVkZVZpc2l0ZWRPYmplY3RzIiwib0NvbnZlcnRlck91dHB1dCIsImdldE1vZGVsIiwic1BhdGgiLCJnZXRQYXRoIiwiYVBhdGhTcGxpdCIsInJlbGF0aXZlUGF0aCIsInNsaWNlIiwiam9pbiIsImxvY2FsT2JqZWN0cyIsInJlbGF0aXZlU3BsaXQiLCJpZHgiLCJjdXJyZW50RW50aXR5U2V0Iiwic05hdlByb3BUb0NoZWNrIiwiYU5hdlByb3BzIiwidGFyZ2V0RW50aXR5VHlwZSIsInNOYXZQcm9wIiwidGFyZ2V0TmF2UHJvcCIsIm5hdlByb3AiLCJ0YXJnZXRUeXBlIiwic2hpZnQiLCJvVGFyZ2V0IiwicmVzb2x2ZVBhdGgiLCJ2aXNpdGVkT2JqZWN0cyIsImNvbmNhdCIsInBhcmFtZXRlck5hbWUiLCJ0YXJnZXRQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJlbmRzV2l0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsIm9FbnRpdHlTZXRNZXRhTW9kZWxDb250ZXh0IiwibWV0YU1vZGVsQ29udGV4dCIsInRhcmdldEVudGl0eVNldExvY2F0aW9uIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RGcm9tUGF0aCIsImNvbnZlcnRlZFR5cGVzIiwiZGF0YU1vZGVsT2JqZWN0cyIsInZpc2l0ZWRPYmplY3QiLCJyb290RW50aXR5U2V0IiwiY3VycmVudEVudGl0eVR5cGUiLCJpIiwiY3VycmVudE9iamVjdCIsIm5hdmlnYXRlZFBhdGhzIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJzdGFydGluZ0luZGV4IiwicmVxdWlyZWREYXRhTW9kZWxPYmplY3RzIiwib2JqZWN0Iiwib3V0RGF0YU1vZGVsUGF0aCIsInRhcmdldE9iamVjdCIsImNvbnRleHRMb2NhdGlvbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwQkEsTUFBTUEsZ0JBQXFCLEdBQUc7QUFDN0IsaUNBQTZCLGNBREE7QUFFN0IseUJBQXFCLE1BRlE7QUFHN0IsNkJBQXlCLFVBSEk7QUFJN0Isc0NBQWtDLFFBSkw7QUFLN0Isa0NBQThCLElBTEQ7QUFNN0IsdUNBQW1DLFNBTk47QUFPN0IseUNBQXFDLFdBUFI7QUFRN0IsNENBQXdDLGNBUlg7QUFTN0IsNkNBQXlDO0FBVFosR0FBOUI7QUFvQk8sTUFBTUMsOEJBQThCLEdBQUc7QUFDN0NDLElBQUFBLEtBQUssRUFBRSxJQURzQztBQUU3Q0MsSUFBQUEsVUFBVSxFQUFFLElBRmlDO0FBRzdDQyxJQUFBQSxNQUFNLEVBQUUsSUFIcUM7QUFJN0NDLElBQUFBLHFCQUFxQixFQUFFLElBSnNCO0FBSzdDQyxJQUFBQSxRQUFRLEVBQUU7QUFMbUMsR0FBdkM7OztBQTBCUCxXQUFTQyxrQkFBVCxDQUNDQyxnQkFERCxFQUVDQyxXQUZELEVBR0NDLGFBSEQsRUFJQ0MsZ0JBSkQsRUFLQ0MsYUFMRCxFQU1PO0FBQ04sUUFBSUMsS0FBSjtBQUNBLFFBQU1DLHFCQUE2QixHQUFHSixhQUFhLEdBQUcsR0FBaEIsR0FBc0JELFdBQTVEO0FBQ0EsUUFBTU0sZ0JBQWdCLEdBQUcsT0FBT1AsZ0JBQWhDOztBQUNBLFFBQUlBLGdCQUFnQixLQUFLLElBQXpCLEVBQStCO0FBQzlCSyxNQUFBQSxLQUFLLEdBQUc7QUFBRUcsUUFBQUEsSUFBSSxFQUFFLE1B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b0IsRUFBcEJBLG9CQUx3QjtBQU14QjRJLE1BQUFBLGVBQWUsRUFBRWhCLHVCQU5PO0FBT3hCRSxNQUFBQSxjQUFjLEVBQUVBO0FBUFEsS0FBekI7O0FBU0EsUUFBSSxDQUFDWSxnQkFBZ0IsQ0FBQ0UsZUFBdEIsRUFBdUM7QUFDdENGLE1BQUFBLGdCQUFnQixDQUFDRSxlQUFqQixHQUFtQ0YsZ0JBQW5DO0FBQ0E7O0FBQ0QsV0FBT0EsZ0JBQVA7QUFDQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29udmVydGVyT3V0cHV0LFxuXHRFbnRpdHlTZXQgYXMgX0VudGl0eVNldCxcblx0RW50aXR5VHlwZSBhcyBfRW50aXR5VHlwZSxcblx0TmF2aWdhdGlvblByb3BlcnR5IGFzIF9OYXZpZ2F0aW9uUHJvcGVydHksXG5cdFNpbmdsZXRvbiBhcyBfU2luZ2xldG9uXG59IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQgeyBBbm5vdGF0aW9uLCBBbm5vdGF0aW9uTGlzdCwgQW5ub3RhdGlvblJlY29yZCwgRXhwcmVzc2lvbiwgUGFyc2VyT3V0cHV0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQge1xuXHRBY3Rpb24sXG5cdENvbXBsZXhUeXBlLFxuXHRFbnRpdHlDb250YWluZXIsXG5cdEVudGl0eVNldCxcblx0RW50aXR5VHlwZSxcblx0UHJvcGVydHksXG5cdFJlZmVyZW5jZSxcblx0UmVmZXJlbnRpYWxDb25zdHJhaW50LFxuXHRTaW5nbGV0b24sXG5cdFR5cGVEZWZpbml0aW9uLFxuXHRWNE5hdmlnYXRpb25Qcm9wZXJ0eVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9QYXJzZXJcIjtcbi8vIFRoaXMgZmlsZSBpcyByZXRyaWV2ZWQgZnJvbSBAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyLCBzaGFyZWQgY29kZSB3aXRoIHRvb2wgc3VpdGVcbmltcG9ydCB7IEFubm90YXRpb25Db252ZXJ0ZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb21tb25cIjtcbmltcG9ydCB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCIuLi9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5cbmNvbnN0IFZPQ0FCVUxBUllfQUxJQVM6IGFueSA9IHtcblx0XCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxXCI6IFwiQ2FwYWJpbGl0aWVzXCIsXG5cdFwiT3JnLk9EYXRhLkNvcmUuVjFcIjogXCJDb3JlXCIsXG5cdFwiT3JnLk9EYXRhLk1lYXN1cmVzLlYxXCI6IFwiTWVhc3VyZXNcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjFcIjogXCJDb21tb25cIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MVwiOiBcIlVJXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MVwiOiBcIlNlc3Npb25cIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjFcIjogXCJBbmFseXRpY3NcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjFcIjogXCJQZXJzb25hbERhdGFcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxXCI6IFwiQ29tbXVuaWNhdGlvblwiXG59O1xuXG5leHBvcnQgdHlwZSBFbnZpcm9ubWVudENhcGFiaWxpdGllcyA9IHtcblx0Q2hhcnQ6IGJvb2xlYW47XG5cdE1pY3JvQ2hhcnQ6IGJvb2xlYW47XG5cdFVTaGVsbDogYm9vbGVhbjtcblx0SW50ZW50QmFzZWROYXZpZ2F0aW9uOiBib29sZWFuO1xuXHRBcHBTdGF0ZTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgPSB7XG5cdENoYXJ0OiB0cnVlLFxuXHRNaWNyb0NoYXJ0OiB0cnVlLFxuXHRVU2hlbGw6IHRydWUsXG5cdEludGVudEJhc2VkTmF2aWdhdGlvbjogdHJ1ZSxcblx0QXBwU3RhdGU6IHRydWVcbn07XG5cbnR5cGUgTWV0YU1vZGVsQWN0aW9uID0ge1xuXHQka2luZDogXCJBY3Rpb25cIjtcblx0JElzQm91bmQ6IGJvb2xlYW47XG5cdCRFbnRpdHlTZXRQYXRoOiBzdHJpbmc7XG5cdCRQYXJhbWV0ZXI6IHtcblx0XHQkVHlwZTogc3RyaW5nO1xuXHRcdCROYW1lOiBzdHJpbmc7XG5cdFx0JE51bGxhYmxlPzogYm9vbGVhbjtcblx0XHQkTWF4TGVuZ3RoPzogbnVtYmVyO1xuXHRcdCRQcmVjaXNpb24/OiBudW1iZXI7XG5cdFx0JFNjYWxlPzogbnVtYmVyO1xuXHRcdCRpc0NvbGxlY3Rpb24/OiBib29sZWFuO1xuXHR9W107XG5cdCRSZXR1cm5UeXBlOiB7XG5cdFx0JFR5cGU6IHN0cmluZztcblx0fTtcbn07XG5cbmZ1bmN0aW9uIHBhcnNlUHJvcGVydHlWYWx1ZShcblx0YW5ub3RhdGlvbk9iamVjdDogYW55LFxuXHRwcm9wZXJ0eUtleTogc3RyaW5nLFxuXHRjdXJyZW50VGFyZ2V0OiBzdHJpbmcsXG5cdGFubm90YXRpb25zTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0Pixcblx0b0NhcGFiaWxpdGllczogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IGFueSB7XG5cdGxldCB2YWx1ZTtcblx0Y29uc3QgY3VycmVudFByb3BlcnR5VGFyZ2V0OiBzdHJpbmcgPSBjdXJyZW50VGFyZ2V0ICsgXCIvXCIgKyBwcm9wZXJ0eUtleTtcblx0Y29uc3QgdHlwZU9mQW5ub3RhdGlvbiA9IHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0O1xuXHRpZiAoYW5ub3RhdGlvbk9iamVjdCA9PT0gbnVsbCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIk51bGxcIiwgTnVsbDogbnVsbCB9O1xuXHR9IGVsc2UgaWYgKHR5cGVPZkFubm90YXRpb24gPT09IFwic3RyaW5nXCIpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJTdHJpbmdcIiwgU3RyaW5nOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAodHlwZU9mQW5ub3RhdGlvbiA9PT0gXCJib29sZWFuXCIpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJCb29sXCIsIEJvb2w6IGFubm90YXRpb25PYmplY3QgfTtcblx0fSBlbHNlIGlmICh0eXBlT2ZBbm5vdGF0aW9uID09PSBcIm51bWJlclwiKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiSW50XCIsIEludDogYW5ub3RhdGlvbk9iamVjdCB9O1xuXHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYW5ub3RhdGlvbk9iamVjdCkpIHtcblx0XHR2YWx1ZSA9IHtcblx0XHRcdHR5cGU6IFwiQ29sbGVjdGlvblwiLFxuXHRcdFx0Q29sbGVjdGlvbjogYW5ub3RhdGlvbk9iamVjdC5tYXAoKHN1YkFubm90YXRpb25PYmplY3QsIHN1YkFubm90YXRpb25PYmplY3RJbmRleCkgPT5cblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uT2JqZWN0KFxuXHRcdFx0XHRcdHN1YkFubm90YXRpb25PYmplY3QsXG5cdFx0XHRcdFx0Y3VycmVudFByb3BlcnR5VGFyZ2V0ICsgXCIvXCIgKyBzdWJBbm5vdGF0aW9uT2JqZWN0SW5kZXgsXG5cdFx0XHRcdFx0YW5ub3RhdGlvbnNMaXN0cyxcblx0XHRcdFx0XHRvQ2FwYWJpbGl0aWVzXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHR9O1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIlByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJQYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbm5vdGF0aW9uUGF0aFwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkFubm90YXRpb25QYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkVHlwZVwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiSWZcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRPclwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIk9yXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5kXCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiQW5kXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkRXFcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJFcVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5lXCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiTmVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROb3RcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJOb3RcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRHdFwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkd0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkR2VcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJHZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEx0XCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiTHRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRMZVwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkxlXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQXBwbHlcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJBcHBseVwiO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdFswXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHQvLyAkVHlwZSBpcyBvcHRpb25hbC4uLlxuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJTdHJpbmdcIjtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiUGF0aFwiLCBQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRQYXRoIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiRGVjaW1hbFwiLCBEZWNpbWFsOiBwYXJzZUZsb2F0KGFubm90YXRpb25PYmplY3QuJERlY2ltYWwpIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kUHJvcGVydHlQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJQcm9wZXJ0eVBhdGhcIiwgUHJvcGVydHlQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRQcm9wZXJ0eVBhdGggfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHtcblx0XHRcdHR5cGU6IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiLFxuXHRcdFx0TmF2aWdhdGlvblByb3BlcnR5UGF0aDogYW5ub3RhdGlvbk9iamVjdC4kTmF2aWdhdGlvblByb3BlcnR5UGF0aFxuXHRcdH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kSWYgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIklmXCIsIElmOiBhbm5vdGF0aW9uT2JqZWN0LiRJZiB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFuZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiQW5kXCIsIEFuZDogYW5ub3RhdGlvbk9iamVjdC4kQW5kIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kT3IgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIk9yXCIsIE9yOiBhbm5vdGF0aW9uT2JqZWN0LiRPciB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5vdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiTm90XCIsIE5vdDogYW5ub3RhdGlvbk9iamVjdC4kTm90IH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRXEgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkVxXCIsIEVxOiBhbm5vdGF0aW9uT2JqZWN0LiRFcSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5lICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJOZVwiLCBOZTogYW5ub3RhdGlvbk9iamVjdC4kTmUgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRHdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiR3RcIiwgR3Q6IGFubm90YXRpb25PYmplY3QuJEd0IH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkdlXCIsIEdlOiBhbm5vdGF0aW9uT2JqZWN0LiRHZSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJMdFwiLCBMdDogYW5ub3RhdGlvbk9iamVjdC4kTHQgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRMZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiTGVcIiwgTGU6IGFubm90YXRpb25PYmplY3QuJExlIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQXBwbHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkFwcGx5XCIsIEFwcGx5OiBhbm5vdGF0aW9uT2JqZWN0LiRBcHBseSwgRnVuY3Rpb246IGFubm90YXRpb25PYmplY3QuJEZ1bmN0aW9uIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkFubm90YXRpb25QYXRoXCIsIEFubm90YXRpb25QYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRBbm5vdGF0aW9uUGF0aCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEVudW1NZW1iZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0ge1xuXHRcdFx0dHlwZTogXCJFbnVtTWVtYmVyXCIsXG5cdFx0XHRFbnVtTWVtYmVyOiBtYXBOYW1lVG9BbGlhcyhhbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyLnNwbGl0KFwiL1wiKVswXSkgKyBcIi9cIiArIGFubm90YXRpb25PYmplY3QuJEVudW1NZW1iZXIuc3BsaXQoXCIvXCIpWzFdXG5cdFx0fTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRUeXBlKSB7XG5cdFx0dmFsdWUgPSB7XG5cdFx0XHR0eXBlOiBcIlJlY29yZFwiLFxuXHRcdFx0UmVjb3JkOiBwYXJzZUFubm90YXRpb25PYmplY3QoYW5ub3RhdGlvbk9iamVjdCwgY3VycmVudFRhcmdldCwgYW5ub3RhdGlvbnNMaXN0cywgb0NhcGFiaWxpdGllcylcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdHZhbHVlID0ge1xuXHRcdFx0dHlwZTogXCJSZWNvcmRcIixcblx0XHRcdFJlY29yZDogcGFyc2VBbm5vdGF0aW9uT2JqZWN0KGFubm90YXRpb25PYmplY3QsIGN1cnJlbnRUYXJnZXQsIGFubm90YXRpb25zTGlzdHMsIG9DYXBhYmlsaXRpZXMpXG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bmFtZTogcHJvcGVydHlLZXksXG5cdFx0dmFsdWVcblx0fTtcbn1cbmZ1bmN0aW9uIG1hcE5hbWVUb0FsaWFzKGFubm90YXRpb25OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRsZXQgW3BhdGhQYXJ0LCBhbm5vUGFydF0gPSBhbm5vdGF0aW9uTmFtZS5zcGxpdChcIkBcIik7XG5cdGlmICghYW5ub1BhcnQpIHtcblx0XHRhbm5vUGFydCA9IHBhdGhQYXJ0O1xuXHRcdHBhdGhQYXJ0ID0gXCJcIjtcblx0fSBlbHNlIHtcblx0XHRwYXRoUGFydCArPSBcIkBcIjtcblx0fVxuXHRjb25zdCBsYXN0RG90ID0gYW5ub1BhcnQubGFzdEluZGV4T2YoXCIuXCIpO1xuXHRyZXR1cm4gcGF0aFBhcnQgKyBWT0NBQlVMQVJZX0FMSUFTW2Fubm9QYXJ0LnN1YnN0cigwLCBsYXN0RG90KV0gKyBcIi5cIiArIGFubm9QYXJ0LnN1YnN0cihsYXN0RG90ICsgMSk7XG59XG5mdW5jdGlvbiBwYXJzZUFubm90YXRpb25PYmplY3QoXG5cdGFubm90YXRpb25PYmplY3Q6IGFueSxcblx0Y3VycmVudE9iamVjdFRhcmdldDogc3RyaW5nLFxuXHRhbm5vdGF0aW9uc0xpc3RzOiBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uTGlzdD4sXG5cdG9DYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pOiBFeHByZXNzaW9uIHwgQW5ub3RhdGlvblJlY29yZCB8IEFubm90YXRpb24ge1xuXHRsZXQgcGFyc2VkQW5ub3RhdGlvbk9iamVjdDogYW55ID0ge307XG5cdGNvbnN0IHR5cGVPZk9iamVjdCA9IHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0O1xuXHRpZiAoYW5ub3RhdGlvbk9iamVjdCA9PT0gbnVsbCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiTnVsbFwiLCBOdWxsOiBudWxsIH07XG5cdH0gZWxzZSBpZiAodHlwZU9mT2JqZWN0ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJTdHJpbmdcIiwgU3RyaW5nOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAodHlwZU9mT2JqZWN0ID09PSBcImJvb2xlYW5cIikge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiQm9vbFwiLCBCb29sOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAodHlwZU9mT2JqZWN0ID09PSBcIm51bWJlclwiKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJJbnRcIiwgSW50OiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiQW5ub3RhdGlvblBhdGhcIiwgQW5ub3RhdGlvblBhdGg6IGFubm90YXRpb25PYmplY3QuJEFubm90YXRpb25QYXRoIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJQYXRoXCIsIFBhdGg6IGFubm90YXRpb25PYmplY3QuJFBhdGggfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiREZWNpbWFsICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkRlY2ltYWxcIiwgRGVjaW1hbDogcGFyc2VGbG9hdChhbm5vdGF0aW9uT2JqZWN0LiREZWNpbWFsKSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFByb3BlcnR5UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJQcm9wZXJ0eVBhdGhcIiwgUHJvcGVydHlQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRQcm9wZXJ0eVBhdGggfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRJZiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJJZlwiLCBJZjogYW5ub3RhdGlvbk9iamVjdC4kSWYgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRBbmQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiQW5kXCIsIEFuZDogYW5ub3RhdGlvbk9iamVjdC4kQW5kIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kT3IgIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiT3JcIiwgT3I6IGFubm90YXRpb25PYmplY3QuJE9yIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTm90ICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIk5vdFwiLCBOb3Q6IGFubm90YXRpb25PYmplY3QuJE5vdCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEVxICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkVxXCIsIEVxOiBhbm5vdGF0aW9uT2JqZWN0LiRFcSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5lICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIk5lXCIsIE5lOiBhbm5vdGF0aW9uT2JqZWN0LiROZSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEd0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkd0XCIsIEd0OiBhbm5vdGF0aW9uT2JqZWN0LiRHdCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEdlICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkdlXCIsIEdlOiBhbm5vdGF0aW9uT2JqZWN0LiRHZSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkx0XCIsIEx0OiBhbm5vdGF0aW9uT2JqZWN0LiRMdCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJExlICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkxlXCIsIExlOiBhbm5vdGF0aW9uT2JqZWN0LiRMZSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFwcGx5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkFwcGx5XCIsIEFwcGx5OiBhbm5vdGF0aW9uT2JqZWN0LiRBcHBseSwgRnVuY3Rpb246IGFubm90YXRpb25PYmplY3QuJEZ1bmN0aW9uIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTmF2aWdhdGlvblByb3BlcnR5UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHtcblx0XHRcdHR5cGU6IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiLFxuXHRcdFx0TmF2aWdhdGlvblByb3BlcnR5UGF0aDogYW5ub3RhdGlvbk9iamVjdC4kTmF2aWdhdGlvblByb3BlcnR5UGF0aFxuXHRcdH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHtcblx0XHRcdHR5cGU6IFwiRW51bU1lbWJlclwiLFxuXHRcdFx0RW51bU1lbWJlcjogbWFwTmFtZVRvQWxpYXMoYW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlci5zcGxpdChcIi9cIilbMF0pICsgXCIvXCIgKyBhbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyLnNwbGl0KFwiL1wiKVsxXVxuXHRcdH07XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhbm5vdGF0aW9uT2JqZWN0KSkge1xuXHRcdGNvbnN0IHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uID0gcGFyc2VkQW5ub3RhdGlvbk9iamVjdCBhcyBhbnk7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbiA9IGFubm90YXRpb25PYmplY3QubWFwKChzdWJBbm5vdGF0aW9uT2JqZWN0LCBzdWJBbm5vdGF0aW9uSW5kZXgpID0+XG5cdFx0XHRwYXJzZUFubm90YXRpb25PYmplY3Qoc3ViQW5ub3RhdGlvbk9iamVjdCwgY3VycmVudE9iamVjdFRhcmdldCArIFwiL1wiICsgc3ViQW5ub3RhdGlvbkluZGV4LCBhbm5vdGF0aW9uc0xpc3RzLCBvQ2FwYWJpbGl0aWVzKVxuXHRcdCk7XG5cdFx0aWYgKGFubm90YXRpb25PYmplY3QubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkUHJvcGVydHlQYXRoXCIpKSB7XG5cdFx0XHRcdChwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiUHJvcGVydHlQYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkUGF0aFwiKSkge1xuXHRcdFx0XHQocGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIlBhdGhcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIpKSB7XG5cdFx0XHRcdChwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEFubm90YXRpb25QYXRoXCIpKSB7XG5cdFx0XHRcdChwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiQW5ub3RhdGlvblBhdGhcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRUeXBlXCIpKSB7XG5cdFx0XHRcdChwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiUmVjb3JkXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkSWZcIikpIHtcblx0XHRcdFx0KHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJJZlwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEFuZFwiKSkge1xuXHRcdFx0XHQocGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkFuZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE9yXCIpKSB7XG5cdFx0XHRcdChwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiT3JcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRFcVwiKSkge1xuXHRcdFx0XHQocGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkVxXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTmVcIikpIHtcblx0XHRcdFx0KHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJOZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5vdFwiKSkge1xuXHRcdFx0XHQocGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIk5vdFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEd0XCIpKSB7XG5cdFx0XHRcdChwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiR3RcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRHZVwiKSkge1xuXHRcdFx0XHQocGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkdlXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTHRcIikpIHtcblx0XHRcdFx0KHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJMdFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJExlXCIpKSB7XG5cdFx0XHRcdChwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiTGVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBcHBseVwiKSkge1xuXHRcdFx0XHQocGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkFwcGx5XCI7XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0WzBdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdChwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiUmVjb3JkXCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQocGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIlN0cmluZ1wiO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdC4kVHlwZSkge1xuXHRcdFx0Y29uc3QgdHlwZVZhbHVlID0gYW5ub3RhdGlvbk9iamVjdC4kVHlwZTtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudHlwZSA9IHR5cGVWYWx1ZTsgLy9gJHt0eXBlQWxpYXN9LiR7dHlwZVRlcm19YDtcblx0XHR9XG5cdFx0Y29uc3QgcHJvcGVydHlWYWx1ZXM6IGFueSA9IFtdO1xuXHRcdE9iamVjdC5rZXlzKGFubm90YXRpb25PYmplY3QpLmZvckVhY2goKHByb3BlcnR5S2V5KSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRUeXBlXCIgJiZcblx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJElmXCIgJiZcblx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEFwcGx5XCIgJiZcblx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEFuZFwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRPclwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiROZVwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRHdFwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRHZVwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRMdFwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRMZVwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiROb3RcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkRXFcIiAmJlxuXHRcdFx0XHQhcHJvcGVydHlLZXkuc3RhcnRzV2l0aChcIkBcIilcblx0XHRcdCkge1xuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlcy5wdXNoKFxuXHRcdFx0XHRcdHBhcnNlUHJvcGVydHlWYWx1ZShhbm5vdGF0aW9uT2JqZWN0W3Byb3BlcnR5S2V5XSwgcHJvcGVydHlLZXksIGN1cnJlbnRPYmplY3RUYXJnZXQsIGFubm90YXRpb25zTGlzdHMsIG9DYXBhYmlsaXRpZXMpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5S2V5LnN0YXJ0c1dpdGgoXCJAXCIpKSB7XG5cdFx0XHRcdC8vIEFubm90YXRpb24gb2YgYW5ub3RhdGlvblxuXHRcdFx0XHRjcmVhdGVBbm5vdGF0aW9uTGlzdHMoXG5cdFx0XHRcdFx0eyBbcHJvcGVydHlLZXldOiBhbm5vdGF0aW9uT2JqZWN0W3Byb3BlcnR5S2V5XSB9LFxuXHRcdFx0XHRcdGN1cnJlbnRPYmplY3RUYXJnZXQsXG5cdFx0XHRcdFx0YW5ub3RhdGlvbnNMaXN0cyxcblx0XHRcdFx0XHRvQ2FwYWJpbGl0aWVzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5wcm9wZXJ0eVZhbHVlcyA9IHByb3BlcnR5VmFsdWVzO1xuXHR9XG5cdHJldHVybiBwYXJzZWRBbm5vdGF0aW9uT2JqZWN0O1xufVxuZnVuY3Rpb24gZ2V0T3JDcmVhdGVBbm5vdGF0aW9uTGlzdCh0YXJnZXQ6IHN0cmluZywgYW5ub3RhdGlvbnNMaXN0czogUmVjb3JkPHN0cmluZywgQW5ub3RhdGlvbkxpc3Q+KTogQW5ub3RhdGlvbkxpc3Qge1xuXHRpZiAoIWFubm90YXRpb25zTGlzdHMuaGFzT3duUHJvcGVydHkodGFyZ2V0KSkge1xuXHRcdGFubm90YXRpb25zTGlzdHNbdGFyZ2V0XSA9IHtcblx0XHRcdHRhcmdldDogdGFyZ2V0LFxuXHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gYW5ub3RhdGlvbnNMaXN0c1t0YXJnZXRdO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDaGFydEFubm90YXRpb25zKGFubm90YXRpb25PYmplY3Q6IGFueSkge1xuXHRyZXR1cm4gYW5ub3RhdGlvbk9iamVjdC5maWx0ZXIoKG9SZWNvcmQ6IGFueSkgPT4ge1xuXHRcdGlmIChvUmVjb3JkLlRhcmdldCAmJiBvUmVjb3JkLlRhcmdldC4kQW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdHJldHVybiBvUmVjb3JkLlRhcmdldC4kQW5ub3RhdGlvblBhdGguaW5kZXhPZihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiKSA9PT0gLTE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUlCTkFubm90YXRpb25zKGFubm90YXRpb25PYmplY3Q6IGFueSkge1xuXHRyZXR1cm4gYW5ub3RhdGlvbk9iamVjdC5maWx0ZXIoKG9SZWNvcmQ6IGFueSkgPT4ge1xuXHRcdHJldHVybiBvUmVjb3JkLiRUeXBlICE9PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlUHJlc2VudGF0aW9uVmFyaWFudChhbm5vdGF0aW9uT2JqZWN0OiBhbnkpIHtcblx0cmV0dXJuIGFubm90YXRpb25PYmplY3QuZmlsdGVyKChvUmVjb3JkOiBhbnkpID0+IHtcblx0XHRyZXR1cm4gb1JlY29yZC4kQW5ub3RhdGlvblBhdGggIT09IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCI7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBbm5vdGF0aW9uTGlzdHMoXG5cdGFubm90YXRpb25PYmplY3RzOiBhbnksXG5cdGFubm90YXRpb25UYXJnZXQ6IHN0cmluZyxcblx0YW5ub3RhdGlvbkxpc3RzOiBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uTGlzdD4sXG5cdG9DYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pIHtcblx0aWYgKE9iamVjdC5rZXlzKGFubm90YXRpb25PYmplY3RzKS5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm47XG5cdH1cblx0Y29uc3Qgb3V0QW5ub3RhdGlvbk9iamVjdCA9IGdldE9yQ3JlYXRlQW5ub3RhdGlvbkxpc3QoYW5ub3RhdGlvblRhcmdldCwgYW5ub3RhdGlvbkxpc3RzKTtcblx0aWYgKCFvQ2FwYWJpbGl0aWVzLk1pY3JvQ2hhcnQpIHtcblx0XHRkZWxldGUgYW5ub3RhdGlvbk9iamVjdHNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRcIl07XG5cdH1cblxuXHRmb3IgKGxldCBhbm5vdGF0aW9uS2V5IGluIGFubm90YXRpb25PYmplY3RzKSB7XG5cdFx0bGV0IGFubm90YXRpb25PYmplY3QgPSBhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XTtcblx0XHRzd2l0Y2ggKGFubm90YXRpb25LZXkpIHtcblx0XHRcdGNhc2UgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVyRmFjZXRzXCI6XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5NaWNyb0NoYXJ0KSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdCA9IHJlbW92ZUNoYXJ0QW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdCk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JZGVudGlmaWNhdGlvblwiOlxuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdCA9IHJlbW92ZUlCTkFubm90YXRpb25zKGFubm90YXRpb25PYmplY3QpO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTGluZUl0ZW1cIjpcblx0XHRcdFx0aWYgKCFvQ2FwYWJpbGl0aWVzLkludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3QgPSByZW1vdmVJQk5Bbm5vdGF0aW9ucyhhbm5vdGF0aW9uT2JqZWN0KTtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XSA9IGFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFvQ2FwYWJpbGl0aWVzLk1pY3JvQ2hhcnQpIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0ID0gcmVtb3ZlQ2hhcnRBbm5vdGF0aW9ucyhhbm5vdGF0aW9uT2JqZWN0KTtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XSA9IGFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpZWxkR3JvdXBcIjpcblx0XHRcdFx0aWYgKCFvQ2FwYWJpbGl0aWVzLkludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3QuRGF0YSA9IHJlbW92ZUlCTkFubm90YXRpb25zKGFubm90YXRpb25PYmplY3QuRGF0YSk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5NaWNyb0NoYXJ0KSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdC5EYXRhID0gcmVtb3ZlQ2hhcnRBbm5vdGF0aW9ucyhhbm5vdGF0aW9uT2JqZWN0LkRhdGEpO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUHJlc2VudGF0aW9uVmFyaWFudFwiOlxuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuQ2hhcnQgJiYgYW5ub3RhdGlvbk9iamVjdC5WaXN1YWxpemF0aW9ucykge1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3QuVmlzdWFsaXphdGlvbnMgPSBoYW5kbGVQcmVzZW50YXRpb25WYXJpYW50KGFubm90YXRpb25PYmplY3QuVmlzdWFsaXphdGlvbnMpO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGxldCBjdXJyZW50T3V0QW5ub3RhdGlvbk9iamVjdCA9IG91dEFubm90YXRpb25PYmplY3Q7XG5cblx0XHQvLyBDaGVjayBmb3IgYW5ub3RhdGlvbiBvZiBhbm5vdGF0aW9uXG5cdFx0Y29uc3QgYW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0ID0gYW5ub3RhdGlvbktleS5zcGxpdChcIkBcIik7XG5cdFx0aWYgKGFubm90YXRpb25PZkFubm90YXRpb25TcGxpdC5sZW5ndGggPiAyKSB7XG5cdFx0XHRjdXJyZW50T3V0QW5ub3RhdGlvbk9iamVjdCA9IGdldE9yQ3JlYXRlQW5ub3RhdGlvbkxpc3QoXG5cdFx0XHRcdGFubm90YXRpb25UYXJnZXQgKyBcIkBcIiArIGFubm90YXRpb25PZkFubm90YXRpb25TcGxpdFsxXSxcblx0XHRcdFx0YW5ub3RhdGlvbkxpc3RzXG5cdFx0XHQpO1xuXHRcdFx0YW5ub3RhdGlvbktleSA9IGFubm90YXRpb25PZkFubm90YXRpb25TcGxpdFsyXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YW5ub3RhdGlvbktleSA9IGFubm90YXRpb25PZkFubm90YXRpb25TcGxpdFsxXTtcblx0XHR9XG5cblx0XHRjb25zdCBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXQgPSBhbm5vdGF0aW9uS2V5LnNwbGl0KFwiI1wiKTtcblx0XHRjb25zdCBxdWFsaWZpZXIgPSBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXRbMV07XG5cdFx0YW5ub3RhdGlvbktleSA9IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdFswXTtcblxuXHRcdGNvbnN0IHBhcnNlZEFubm90YXRpb25PYmplY3Q6IGFueSA9IHtcblx0XHRcdHRlcm06IGAke2Fubm90YXRpb25LZXl9YCxcblx0XHRcdHF1YWxpZmllcjogcXVhbGlmaWVyXG5cdFx0fTtcblx0XHRsZXQgY3VycmVudEFubm90YXRpb25UYXJnZXQgPSBhbm5vdGF0aW9uVGFyZ2V0ICsgXCJAXCIgKyBwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnRlcm07XG5cdFx0aWYgKHF1YWxpZmllcikge1xuXHRcdFx0Y3VycmVudEFubm90YXRpb25UYXJnZXQgKz0gXCIjXCIgKyBxdWFsaWZpZXI7XG5cdFx0fVxuXHRcdGxldCBpc0NvbGxlY3Rpb24gPSBmYWxzZTtcblx0XHRjb25zdCB0eXBlb2ZBbm5vdGF0aW9uID0gdHlwZW9mIGFubm90YXRpb25PYmplY3Q7XG5cdFx0aWYgKGFubm90YXRpb25PYmplY3QgPT09IG51bGwpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiQm9vbFwiLCBCb29sOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdFx0fSBlbHNlIGlmICh0eXBlb2ZBbm5vdGF0aW9uID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIlN0cmluZ1wiLCBTdHJpbmc6IGFubm90YXRpb25PYmplY3QgfTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZkFubm90YXRpb24gPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkJvb2xcIiwgQm9vbDogYW5ub3RhdGlvbk9iamVjdCB9O1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mQW5ub3RhdGlvbiA9PT0gXCJudW1iZXJcIikge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJJbnRcIiwgSW50OiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRJZiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIklmXCIsIElmOiBhbm5vdGF0aW9uT2JqZWN0LiRJZiB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5kICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiQW5kXCIsIEFuZDogYW5ub3RhdGlvbk9iamVjdC4kQW5kIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRPciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIk9yXCIsIE9yOiBhbm5vdGF0aW9uT2JqZWN0LiRPciB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTm90ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiTm90XCIsIE5vdDogYW5ub3RhdGlvbk9iamVjdC4kTm90IH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRFcSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkVxXCIsIEVxOiBhbm5vdGF0aW9uT2JqZWN0LiRFcSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTmUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJOZVwiLCBOZTogYW5ub3RhdGlvbk9iamVjdC4kTmUgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEd0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiR3RcIiwgR3Q6IGFubm90YXRpb25PYmplY3QuJEd0IH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRHZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkdlXCIsIEdlOiBhbm5vdGF0aW9uT2JqZWN0LiRHZSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJMdFwiLCBMdDogYW5ub3RhdGlvbk9iamVjdC4kTHQgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJExlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiTGVcIiwgTGU6IGFubm90YXRpb25PYmplY3QuJExlIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRBcHBseSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkFwcGx5XCIsIEFwcGx5OiBhbm5vdGF0aW9uT2JqZWN0LiRBcHBseSwgRnVuY3Rpb246IGFubm90YXRpb25PYmplY3QuJEZ1bmN0aW9uIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiUGF0aFwiLCBQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRQYXRoIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRBbm5vdGF0aW9uUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0ge1xuXHRcdFx0XHR0eXBlOiBcIkFubm90YXRpb25QYXRoXCIsXG5cdFx0XHRcdEFubm90YXRpb25QYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRBbm5vdGF0aW9uUGF0aFxuXHRcdFx0fTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJERlY2ltYWwgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJEZWNpbWFsXCIsIERlY2ltYWw6IHBhcnNlRmxvYXQoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCkgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEVudW1NZW1iZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHtcblx0XHRcdFx0dHlwZTogXCJFbnVtTWVtYmVyXCIsXG5cdFx0XHRcdEVudW1NZW1iZXI6IG1hcE5hbWVUb0FsaWFzKGFubm90YXRpb25PYmplY3QuJEVudW1NZW1iZXIuc3BsaXQoXCIvXCIpWzBdKSArIFwiL1wiICsgYW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlci5zcGxpdChcIi9cIilbMV1cblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFubm90YXRpb25PYmplY3QpKSB7XG5cdFx0XHRpc0NvbGxlY3Rpb24gPSB0cnVlO1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uID0gYW5ub3RhdGlvbk9iamVjdC5tYXAoKHN1YkFubm90YXRpb25PYmplY3QsIHN1YkFubm90YXRpb25JbmRleCkgPT5cblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uT2JqZWN0KFxuXHRcdFx0XHRcdHN1YkFubm90YXRpb25PYmplY3QsXG5cdFx0XHRcdFx0Y3VycmVudEFubm90YXRpb25UYXJnZXQgKyBcIi9cIiArIHN1YkFubm90YXRpb25JbmRleCxcblx0XHRcdFx0XHRhbm5vdGF0aW9uTGlzdHMsXG5cdFx0XHRcdFx0b0NhcGFiaWxpdGllc1xuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdFx0aWYgKGFubm90YXRpb25PYmplY3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRQcm9wZXJ0eVBhdGhcIikpIHtcblx0XHRcdFx0XHQocGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiUHJvcGVydHlQYXRoXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRQYXRoXCIpKSB7XG5cdFx0XHRcdFx0KHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIlBhdGhcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIikpIHtcblx0XHRcdFx0XHQocGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5ub3RhdGlvblBhdGhcIikpIHtcblx0XHRcdFx0XHQocGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiQW5ub3RhdGlvblBhdGhcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFR5cGVcIikpIHtcblx0XHRcdFx0XHQocGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiUmVjb3JkXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRJZlwiKSkge1xuXHRcdFx0XHRcdChwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJJZlwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkT3JcIikpIHtcblx0XHRcdFx0XHQocGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiT3JcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEVxXCIpKSB7XG5cdFx0XHRcdFx0KHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkVxXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROZVwiKSkge1xuXHRcdFx0XHRcdChwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJOZVwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTm90XCIpKSB7XG5cdFx0XHRcdFx0KHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIk5vdFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkR3RcIikpIHtcblx0XHRcdFx0XHQocGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiR3RcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEdlXCIpKSB7XG5cdFx0XHRcdFx0KHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkdlXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRMdFwiKSkge1xuXHRcdFx0XHRcdChwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJMdFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTGVcIikpIHtcblx0XHRcdFx0XHQocGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiTGVcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEFuZFwiKSkge1xuXHRcdFx0XHRcdChwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJBbmRcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEFwcGx5XCIpKSB7XG5cdFx0XHRcdFx0KHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkFwcGx5XCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3RbMF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHQocGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiUmVjb3JkXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0KHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIlN0cmluZ1wiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHJlY29yZDogQW5ub3RhdGlvblJlY29yZCA9IHtcblx0XHRcdFx0cHJvcGVydHlWYWx1ZXM6IFtdXG5cdFx0XHR9O1xuXHRcdFx0aWYgKGFubm90YXRpb25PYmplY3QuJFR5cGUpIHtcblx0XHRcdFx0Y29uc3QgdHlwZVZhbHVlID0gYW5ub3RhdGlvbk9iamVjdC4kVHlwZTtcblx0XHRcdFx0cmVjb3JkLnR5cGUgPSBgJHt0eXBlVmFsdWV9YDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWVzOiBhbnlbXSA9IFtdO1xuXHRcdFx0Zm9yIChjb25zdCBwcm9wZXJ0eUtleSBpbiBhbm5vdGF0aW9uT2JqZWN0KSB7XG5cdFx0XHRcdGlmIChwcm9wZXJ0eUtleSAhPT0gXCIkVHlwZVwiICYmICFwcm9wZXJ0eUtleS5zdGFydHNXaXRoKFwiQFwiKSkge1xuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzLnB1c2goXG5cdFx0XHRcdFx0XHRwYXJzZVByb3BlcnR5VmFsdWUoXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RbcHJvcGVydHlLZXldLFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUtleSxcblx0XHRcdFx0XHRcdFx0Y3VycmVudEFubm90YXRpb25UYXJnZXQsXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25MaXN0cyxcblx0XHRcdFx0XHRcdFx0b0NhcGFiaWxpdGllc1xuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHlLZXkuc3RhcnRzV2l0aChcIkBcIikpIHtcblx0XHRcdFx0XHQvLyBBbm5vdGF0aW9uIG9mIHJlY29yZFxuXHRcdFx0XHRcdGNyZWF0ZUFubm90YXRpb25MaXN0cyhcblx0XHRcdFx0XHRcdHsgW3Byb3BlcnR5S2V5XTogYW5ub3RhdGlvbk9iamVjdFtwcm9wZXJ0eUtleV0gfSxcblx0XHRcdFx0XHRcdGN1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0LFxuXHRcdFx0XHRcdFx0YW5ub3RhdGlvbkxpc3RzLFxuXHRcdFx0XHRcdFx0b0NhcGFiaWxpdGllc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJlY29yZC5wcm9wZXJ0eVZhbHVlcyA9IHByb3BlcnR5VmFsdWVzO1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5yZWNvcmQgPSByZWNvcmQ7XG5cdFx0fVxuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuaXNDb2xsZWN0aW9uID0gaXNDb2xsZWN0aW9uO1xuXHRcdGN1cnJlbnRPdXRBbm5vdGF0aW9uT2JqZWN0LmFubm90YXRpb25zLnB1c2gocGFyc2VkQW5ub3RhdGlvbk9iamVjdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJlcGFyZVByb3BlcnR5KHByb3BlcnR5RGVmaW5pdGlvbjogYW55LCBlbnRpdHlUeXBlT2JqZWN0OiBFbnRpdHlUeXBlIHwgQ29tcGxleFR5cGUsIHByb3BlcnR5TmFtZTogc3RyaW5nKTogUHJvcGVydHkge1xuXHRjb25zdCBwcm9wZXJ0eU9iamVjdDogUHJvcGVydHkgPSB7XG5cdFx0X3R5cGU6IFwiUHJvcGVydHlcIixcblx0XHRuYW1lOiBwcm9wZXJ0eU5hbWUsXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtlbnRpdHlUeXBlT2JqZWN0LmZ1bGx5UXVhbGlmaWVkTmFtZX0vJHtwcm9wZXJ0eU5hbWV9YCxcblx0XHR0eXBlOiBwcm9wZXJ0eURlZmluaXRpb24uJFR5cGUsXG5cdFx0bWF4TGVuZ3RoOiBwcm9wZXJ0eURlZmluaXRpb24uJE1heExlbmd0aCxcblx0XHRwcmVjaXNpb246IHByb3BlcnR5RGVmaW5pdGlvbi4kUHJlY2lzaW9uLFxuXHRcdHNjYWxlOiBwcm9wZXJ0eURlZmluaXRpb24uJFNjYWxlLFxuXHRcdG51bGxhYmxlOiBwcm9wZXJ0eURlZmluaXRpb24uJE51bGxhYmxlXG5cdH07XG5cdHJldHVybiBwcm9wZXJ0eU9iamVjdDtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0eShcblx0bmF2UHJvcGVydHlEZWZpbml0aW9uOiBhbnksXG5cdGVudGl0eVR5cGVPYmplY3Q6IEVudGl0eVR5cGUgfCBDb21wbGV4VHlwZSxcblx0bmF2UHJvcGVydHlOYW1lOiBzdHJpbmdcbik6IFY0TmF2aWdhdGlvblByb3BlcnR5IHtcblx0bGV0IHJlZmVyZW50aWFsQ29uc3RyYWludDogUmVmZXJlbnRpYWxDb25zdHJhaW50W10gPSBbXTtcblx0aWYgKG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kUmVmZXJlbnRpYWxDb25zdHJhaW50KSB7XG5cdFx0cmVmZXJlbnRpYWxDb25zdHJhaW50ID0gT2JqZWN0LmtleXMobmF2UHJvcGVydHlEZWZpbml0aW9uLiRSZWZlcmVudGlhbENvbnN0cmFpbnQpLm1hcCgoc291cmNlUHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzb3VyY2VUeXBlTmFtZTogZW50aXR5VHlwZU9iamVjdC5uYW1lLFxuXHRcdFx0XHRzb3VyY2VQcm9wZXJ0eTogc291cmNlUHJvcGVydHlOYW1lLFxuXHRcdFx0XHR0YXJnZXRUeXBlTmFtZTogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRUeXBlLFxuXHRcdFx0XHR0YXJnZXRQcm9wZXJ0eTogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRSZWZlcmVudGlhbENvbnN0cmFpbnRbc291cmNlUHJvcGVydHlOYW1lXVxuXHRcdFx0fTtcblx0XHR9KTtcblx0fVxuXHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHk6IFY0TmF2aWdhdGlvblByb3BlcnR5ID0ge1xuXHRcdF90eXBlOiBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiLFxuXHRcdG5hbWU6IG5hdlByb3BlcnR5TmFtZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2VudGl0eVR5cGVPYmplY3QuZnVsbHlRdWFsaWZpZWROYW1lfS8ke25hdlByb3BlcnR5TmFtZX1gLFxuXHRcdHBhcnRuZXI6IG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kUGFydG5lcixcblx0XHRpc0NvbGxlY3Rpb246IG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kaXNDb2xsZWN0aW9uID8gbmF2UHJvcGVydHlEZWZpbml0aW9uLiRpc0NvbGxlY3Rpb24gOiBmYWxzZSxcblx0XHRjb250YWluc1RhcmdldDogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRDb250YWluc1RhcmdldCxcblx0XHR0YXJnZXRUeXBlTmFtZTogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRUeXBlLFxuXHRcdHJlZmVyZW50aWFsQ29uc3RyYWludFxuXHR9O1xuXG5cdHJldHVybiBuYXZpZ2F0aW9uUHJvcGVydHk7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVFbnRpdHlTZXQoZW50aXR5U2V0RGVmaW5pdGlvbjogYW55LCBlbnRpdHlTZXROYW1lOiBzdHJpbmcsIGVudGl0eUNvbnRhaW5lck5hbWU6IHN0cmluZyk6IEVudGl0eVNldCB7XG5cdGNvbnN0IGVudGl0eVNldE9iamVjdDogRW50aXR5U2V0ID0ge1xuXHRcdF90eXBlOiBcIkVudGl0eVNldFwiLFxuXHRcdG5hbWU6IGVudGl0eVNldE5hbWUsXG5cdFx0bmF2aWdhdGlvblByb3BlcnR5QmluZGluZzoge30sXG5cdFx0ZW50aXR5VHlwZU5hbWU6IGVudGl0eVNldERlZmluaXRpb24uJFR5cGUsXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtlbnRpdHlDb250YWluZXJOYW1lfS8ke2VudGl0eVNldE5hbWV9YFxuXHR9O1xuXHRyZXR1cm4gZW50aXR5U2V0T2JqZWN0O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlU2luZ2xldG9uKHNpbmdsZXRvbkRlZmluaXRpb246IGFueSwgc2luZ2xldG9uTmFtZTogc3RyaW5nLCBlbnRpdHlDb250YWluZXJOYW1lOiBzdHJpbmcpOiBTaW5nbGV0b24ge1xuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIlNpbmdsZXRvblwiLFxuXHRcdG5hbWU6IHNpbmdsZXRvbk5hbWUsXG5cdFx0bmF2aWdhdGlvblByb3BlcnR5QmluZGluZzoge30sXG5cdFx0dHlwZU5hbWU6IHNpbmdsZXRvbkRlZmluaXRpb24uJFR5cGUsXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtlbnRpdHlDb250YWluZXJOYW1lfS8ke3NpbmdsZXRvbk5hbWV9YCxcblx0XHRudWxsYWJsZTogdHJ1ZVxuXHR9IGFzIFNpbmdsZXRvbjtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVR5cGVEZWZpbml0aW9uKHR5cGVEZWZpbml0aW9uOiBhbnksIHR5cGVOYW1lOiBzdHJpbmcsIG5hbWVzcGFjZTogc3RyaW5nKTogVHlwZURlZmluaXRpb24ge1xuXHRjb25zdCB0eXBlT2JqZWN0OiBUeXBlRGVmaW5pdGlvbiA9IHtcblx0XHRfdHlwZTogXCJUeXBlRGVmaW5pdGlvblwiLFxuXHRcdG5hbWU6IHR5cGVOYW1lLnJlcGxhY2UobmFtZXNwYWNlICsgXCIuXCIsIFwiXCIpLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogdHlwZU5hbWUsXG5cdFx0dW5kZXJseWluZ1R5cGU6IHR5cGVEZWZpbml0aW9uLiRVbmRlcmx5aW5nVHlwZVxuXHR9O1xuXHRyZXR1cm4gdHlwZU9iamVjdDtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUNvbXBsZXhUeXBlKGNvbXBsZXhUeXBlRGVmaW5pdGlvbjogYW55LCBjb21wbGV4VHlwZU5hbWU6IHN0cmluZywgbmFtZXNwYWNlOiBzdHJpbmcpOiBDb21wbGV4VHlwZSB7XG5cdGNvbnN0IGNvbXBsZXhUeXBlT2JqZWN0OiBDb21wbGV4VHlwZSA9IHtcblx0XHRfdHlwZTogXCJDb21wbGV4VHlwZVwiLFxuXHRcdG5hbWU6IGNvbXBsZXhUeXBlTmFtZS5yZXBsYWNlKG5hbWVzcGFjZSArIFwiLlwiLCBcIlwiKSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGNvbXBsZXhUeXBlTmFtZSxcblx0XHRwcm9wZXJ0aWVzOiBbXSxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW11cblx0fTtcblxuXHRjb25zdCBjb21wbGV4VHlwZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhjb21wbGV4VHlwZURlZmluaXRpb24pXG5cdFx0LmZpbHRlcigocHJvcGVydHlOYW1lT3JOb3QpID0+IHtcblx0XHRcdGlmIChwcm9wZXJ0eU5hbWVPck5vdCAhPSBcIiRLZXlcIiAmJiBwcm9wZXJ0eU5hbWVPck5vdCAhPSBcIiRraW5kXCIpIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBsZXhUeXBlRGVmaW5pdGlvbltwcm9wZXJ0eU5hbWVPck5vdF0uJGtpbmQgPT09IFwiUHJvcGVydHlcIjtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5zb3J0KChhLCBiKSA9PiAoYSA+IGIgPyAxIDogLTEpKVxuXHRcdC5tYXAoKHByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHByZXBhcmVQcm9wZXJ0eShjb21wbGV4VHlwZURlZmluaXRpb25bcHJvcGVydHlOYW1lXSwgY29tcGxleFR5cGVPYmplY3QsIHByb3BlcnR5TmFtZSk7XG5cdFx0fSk7XG5cblx0Y29tcGxleFR5cGVPYmplY3QucHJvcGVydGllcyA9IGNvbXBsZXhUeXBlUHJvcGVydGllcztcblx0Y29uc3QgY29tcGxleFR5cGVOYXZpZ2F0aW9uUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGNvbXBsZXhUeXBlRGVmaW5pdGlvbilcblx0XHQuZmlsdGVyKChwcm9wZXJ0eU5hbWVPck5vdCkgPT4ge1xuXHRcdFx0aWYgKHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJEtleVwiICYmIHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJGtpbmRcIikge1xuXHRcdFx0XHRyZXR1cm4gY29tcGxleFR5cGVEZWZpbml0aW9uW3Byb3BlcnR5TmFtZU9yTm90XS4ka2luZCA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIjtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5zb3J0KChhLCBiKSA9PiAoYSA+IGIgPyAxIDogLTEpKVxuXHRcdC5tYXAoKG5hdlByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHByZXBhcmVOYXZpZ2F0aW9uUHJvcGVydHkoY29tcGxleFR5cGVEZWZpbml0aW9uW25hdlByb3BlcnR5TmFtZV0sIGNvbXBsZXhUeXBlT2JqZWN0LCBuYXZQcm9wZXJ0eU5hbWUpO1xuXHRcdH0pO1xuXHRjb21wbGV4VHlwZU9iamVjdC5uYXZpZ2F0aW9uUHJvcGVydGllcyA9IGNvbXBsZXhUeXBlTmF2aWdhdGlvblByb3BlcnRpZXM7XG5cdHJldHVybiBjb21wbGV4VHlwZU9iamVjdDtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUVudGl0eUtleXMoZW50aXR5VHlwZURlZmluaXRpb246IGFueSwgb01ldGFNb2RlbERhdGE6IGFueSk6IGFueSB7XG5cdGlmICghZW50aXR5VHlwZURlZmluaXRpb24uJEtleSAmJiBlbnRpdHlUeXBlRGVmaW5pdGlvbi4kQmFzZVR5cGUpIHtcblx0XHRyZXR1cm4gcHJlcGFyZUVudGl0eUtleXMob01ldGFNb2RlbERhdGFbYCR7ZW50aXR5VHlwZURlZmluaXRpb24uJEJhc2VUeXBlfWBdLCBvTWV0YU1vZGVsRGF0YSk7XG5cdH1cblx0cmV0dXJuIGVudGl0eVR5cGVEZWZpbml0aW9uLiRLZXkgfHwgW107IC8vaGFuZGxpbmcgb2YgZW50aXR5IHR5cGVzIHdpdGhvdXQga2V5IGFzIHdlbGwgYXMgYmFzZXR5cGVcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUVudGl0eVR5cGUoZW50aXR5VHlwZURlZmluaXRpb246IGFueSwgZW50aXR5VHlwZU5hbWU6IHN0cmluZywgbmFtZXNwYWNlOiBzdHJpbmcsIG1ldGFNb2RlbERhdGE6IGFueSk6IEVudGl0eVR5cGUge1xuXHRjb25zdCBlbnRpdHlLZXlzOiBhbnkgPSBwcmVwYXJlRW50aXR5S2V5cyhlbnRpdHlUeXBlRGVmaW5pdGlvbiwgbWV0YU1vZGVsRGF0YSk7XG5cblx0Y29uc3QgZW50aXR5VHlwZU9iamVjdDogRW50aXR5VHlwZSA9IHtcblx0XHRfdHlwZTogXCJFbnRpdHlUeXBlXCIsXG5cdFx0bmFtZTogZW50aXR5VHlwZU5hbWUucmVwbGFjZShuYW1lc3BhY2UgKyBcIi5cIiwgXCJcIiksXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBlbnRpdHlUeXBlTmFtZSxcblx0XHRrZXlzOiBbXSxcblx0XHRlbnRpdHlQcm9wZXJ0aWVzOiBbXSxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW11cblx0fTtcblxuXHRjb25zdCBlbnRpdHlQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoZW50aXR5VHlwZURlZmluaXRpb24pXG5cdFx0LmZpbHRlcigocHJvcGVydHlOYW1lT3JOb3QpID0+IHtcblx0XHRcdGlmIChwcm9wZXJ0eU5hbWVPck5vdCAhPSBcIiRLZXlcIiAmJiBwcm9wZXJ0eU5hbWVPck5vdCAhPSBcIiRraW5kXCIpIHtcblx0XHRcdFx0cmV0dXJuIGVudGl0eVR5cGVEZWZpbml0aW9uW3Byb3BlcnR5TmFtZU9yTm90XS4ka2luZCA9PT0gXCJQcm9wZXJ0eVwiO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0Lm1hcCgocHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJlcGFyZVByb3BlcnR5KGVudGl0eVR5cGVEZWZpbml0aW9uW3Byb3BlcnR5TmFtZV0sIGVudGl0eVR5cGVPYmplY3QsIHByb3BlcnR5TmFtZSk7XG5cdFx0fSk7XG5cblx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhlbnRpdHlUeXBlRGVmaW5pdGlvbilcblx0XHQuZmlsdGVyKChwcm9wZXJ0eU5hbWVPck5vdCkgPT4ge1xuXHRcdFx0aWYgKHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJEtleVwiICYmIHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJGtpbmRcIikge1xuXHRcdFx0XHRyZXR1cm4gZW50aXR5VHlwZURlZmluaXRpb25bcHJvcGVydHlOYW1lT3JOb3RdLiRraW5kID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0Lm1hcCgobmF2UHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0eShlbnRpdHlUeXBlRGVmaW5pdGlvbltuYXZQcm9wZXJ0eU5hbWVdLCBlbnRpdHlUeXBlT2JqZWN0LCBuYXZQcm9wZXJ0eU5hbWUpO1xuXHRcdH0pO1xuXG5cdGVudGl0eVR5cGVPYmplY3Qua2V5cyA9IGVudGl0eUtleXNcblx0XHQubWFwKChlbnRpdHlLZXk6IHN0cmluZykgPT4gZW50aXR5UHJvcGVydGllcy5maW5kKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHByb3BlcnR5Lm5hbWUgPT09IGVudGl0eUtleSkpXG5cdFx0LmZpbHRlcigocHJvcGVydHk6IFByb3BlcnR5KSA9PiBwcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKTtcblx0ZW50aXR5VHlwZU9iamVjdC5lbnRpdHlQcm9wZXJ0aWVzID0gZW50aXR5UHJvcGVydGllcztcblx0ZW50aXR5VHlwZU9iamVjdC5uYXZpZ2F0aW9uUHJvcGVydGllcyA9IG5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXG5cdHJldHVybiBlbnRpdHlUeXBlT2JqZWN0O1xufVxuZnVuY3Rpb24gcHJlcGFyZUFjdGlvbihhY3Rpb25OYW1lOiBzdHJpbmcsIGFjdGlvblJhd0RhdGE6IE1ldGFNb2RlbEFjdGlvbiwgbmFtZXNwYWNlOiBzdHJpbmcsIGVudGl0eUNvbnRhaW5lck5hbWU6IHN0cmluZyk6IEFjdGlvbiB7XG5cdGxldCBhY3Rpb25FbnRpdHlUeXBlOiBzdHJpbmcgPSBcIlwiO1xuXHRsZXQgYWN0aW9uRlFOID0gYCR7YWN0aW9uTmFtZX1gO1xuXHRjb25zdCBhY3Rpb25TaG9ydE5hbWUgPSBhY3Rpb25OYW1lLnN1YnN0cihuYW1lc3BhY2UubGVuZ3RoICsgMSk7XG5cdGlmIChhY3Rpb25SYXdEYXRhLiRJc0JvdW5kKSB7XG5cdFx0Y29uc3QgYmluZGluZ1BhcmFtZXRlciA9IGFjdGlvblJhd0RhdGEuJFBhcmFtZXRlclswXTtcblx0XHRhY3Rpb25FbnRpdHlUeXBlID0gYmluZGluZ1BhcmFtZXRlci4kVHlwZTtcblx0XHRpZiAoYmluZGluZ1BhcmFtZXRlci4kaXNDb2xsZWN0aW9uID09PSB0cnVlKSB7XG5cdFx0XHRhY3Rpb25GUU4gPSBgJHthY3Rpb25OYW1lfShDb2xsZWN0aW9uKCR7YWN0aW9uRW50aXR5VHlwZX0pKWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFjdGlvbkZRTiA9IGAke2FjdGlvbk5hbWV9KCR7YWN0aW9uRW50aXR5VHlwZX0pYDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0YWN0aW9uRlFOID0gYCR7ZW50aXR5Q29udGFpbmVyTmFtZX0vJHthY3Rpb25TaG9ydE5hbWV9YDtcblx0fVxuXHRjb25zdCBwYXJhbWV0ZXJzID0gYWN0aW9uUmF3RGF0YS4kUGFyYW1ldGVyIHx8IFtdO1xuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIkFjdGlvblwiLFxuXHRcdG5hbWU6IGFjdGlvblNob3J0TmFtZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGFjdGlvbkZRTixcblx0XHRpc0JvdW5kOiBhY3Rpb25SYXdEYXRhLiRJc0JvdW5kLFxuXHRcdGlzRnVuY3Rpb246IGZhbHNlLFxuXHRcdHNvdXJjZVR5cGU6IGFjdGlvbkVudGl0eVR5cGUsXG5cdFx0cmV0dXJuVHlwZTogYWN0aW9uUmF3RGF0YS4kUmV0dXJuVHlwZSA/IGFjdGlvblJhd0RhdGEuJFJldHVyblR5cGUuJFR5cGUgOiBcIlwiLFxuXHRcdHBhcmFtZXRlcnM6IHBhcmFtZXRlcnMubWFwKChwYXJhbSkgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0X3R5cGU6IFwiQWN0aW9uUGFyYW1ldGVyXCIsXG5cdFx0XHRcdGlzRW50aXR5U2V0OiBwYXJhbS4kVHlwZSA9PT0gYWN0aW9uUmF3RGF0YS4kRW50aXR5U2V0UGF0aCxcblx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBgJHthY3Rpb25GUU59LyR7cGFyYW0uJE5hbWV9YCxcblx0XHRcdFx0dHlwZTogcGFyYW0uJFR5cGVcblx0XHRcdH07XG5cdFx0fSlcblx0fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlRW50aXR5VHlwZXMoXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRvQ2FwYWJpbGl0aWVzOiBFbnZpcm9ubWVudENhcGFiaWxpdGllcyA9IERlZmF1bHRFbnZpcm9ubWVudENhcGFiaWxpdGllc1xuKTogUGFyc2VyT3V0cHV0IHtcblx0Y29uc3Qgb01ldGFNb2RlbERhdGEgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIi8kXCIpO1xuXHRjb25zdCBhbm5vdGF0aW9uTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0PiA9IHt9O1xuXHRjb25zdCBlbnRpdHlUeXBlczogRW50aXR5VHlwZVtdID0gW107XG5cdGNvbnN0IGVudGl0eVNldHM6IEVudGl0eVNldFtdID0gW107XG5cdGNvbnN0IHNpbmdsZXRvbnM6IFNpbmdsZXRvbltdID0gW107XG5cdGNvbnN0IGNvbXBsZXhUeXBlczogQ29tcGxleFR5cGVbXSA9IFtdO1xuXHRjb25zdCB0eXBlRGVmaW5pdGlvbnM6IFR5cGVEZWZpbml0aW9uW10gPSBbXTtcblx0Y29uc3QgZW50aXR5Q29udGFpbmVyTmFtZSA9IG9NZXRhTW9kZWxEYXRhLiRFbnRpdHlDb250YWluZXI7XG5cdGxldCBuYW1lc3BhY2UgPSBcIlwiO1xuXHRjb25zdCBzY2hlbWFLZXlzID0gT2JqZWN0LmtleXMob01ldGFNb2RlbERhdGEpLmZpbHRlcigobWV0YW1vZGVsS2V5KSA9PiBvTWV0YU1vZGVsRGF0YVttZXRhbW9kZWxLZXldLiRraW5kID09PSBcIlNjaGVtYVwiKTtcblx0aWYgKHNjaGVtYUtleXMgJiYgc2NoZW1hS2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0bmFtZXNwYWNlID0gc2NoZW1hS2V5c1swXS5zdWJzdHIoMCwgc2NoZW1hS2V5c1swXS5sZW5ndGggLSAxKTtcblx0fSBlbHNlIGlmIChlbnRpdHlUeXBlcyAmJiBlbnRpdHlUeXBlcy5sZW5ndGgpIHtcblx0XHRuYW1lc3BhY2UgPSBlbnRpdHlUeXBlc1swXS5mdWxseVF1YWxpZmllZE5hbWUucmVwbGFjZShlbnRpdHlUeXBlc1swXS5uYW1lLCBcIlwiKTtcblx0XHRuYW1lc3BhY2UgPSBuYW1lc3BhY2Uuc3Vic3RyKDAsIG5hbWVzcGFjZS5sZW5ndGggLSAxKTtcblx0fVxuXHRPYmplY3Qua2V5cyhvTWV0YU1vZGVsRGF0YSkuZm9yRWFjaCgoc09iamVjdE5hbWUpID0+IHtcblx0XHRpZiAoc09iamVjdE5hbWUgIT09IFwiJGtpbmRcIikge1xuXHRcdFx0c3dpdGNoIChvTWV0YU1vZGVsRGF0YVtzT2JqZWN0TmFtZV0uJGtpbmQpIHtcblx0XHRcdFx0Y2FzZSBcIkVudGl0eVR5cGVcIjpcblx0XHRcdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gcHJlcGFyZUVudGl0eVR5cGUob01ldGFNb2RlbERhdGFbc09iamVjdE5hbWVdLCBzT2JqZWN0TmFtZSwgbmFtZXNwYWNlLCBvTWV0YU1vZGVsRGF0YSk7XG5cdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgdGhlcmUgYXJlIGZpbHRlciBmYWNldHMgZGVmaW5lZCBmb3IgdGhlIGVudGl0eVR5cGUgYW5kIGlmIHllcywgY2hlY2sgaWYgYWxsIG9mIHRoZW0gaGF2ZSBhbiBJRFxuXHRcdFx0XHRcdC8vIFRoZSBJRCBpcyBvcHRpb25hbCwgYnV0IGl0IGlzIGludGVybmFsbHkgdGFrZW4gZm9yIGdyb3VwaW5nIGZpbHRlciBmaWVsZHMgYW5kIGlmIGl0J3Mgbm90IHByZXNlbnRcblx0XHRcdFx0XHQvLyBhIGZhbGxiYWNrIElEIG5lZWRzIHRvIGJlIGdlbmVyYXRlZCBoZXJlLlxuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdG9NZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV0gJiZcblx0XHRcdFx0XHRcdG9NZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV1bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmlsdGVyRmFjZXRzXCJdXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRvTWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnNbZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWVdW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpbHRlckZhY2V0c1wiXS5mb3JFYWNoKFxuXHRcdFx0XHRcdFx0XHQoZmlsdGVyRmFjZXRBbm5vdGF0aW9uOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRmaWx0ZXJGYWNldEFubm90YXRpb24uSUQgPSBmaWx0ZXJGYWNldEFubm90YXRpb24uSUQgfHwgZ2VuZXJhdGUoW3sgRmFjZXQ6IGZpbHRlckZhY2V0QW5ub3RhdGlvbiB9XSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5mb3JFYWNoKChlbnRpdHlQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKCFvTWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnNbZW50aXR5UHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRvTWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnNbZW50aXR5UHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lXSA9IHt9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHQhb01ldGFNb2RlbERhdGEuJEFubm90YXRpb25zW2VudGl0eVByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZV1bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdFwiXVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdG9NZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZERlZmF1bHRcIl0gPVxuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdCRUeXBlOiBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0VmFsdWU6IHsgJFBhdGg6IGVudGl0eVByb3BlcnR5Lm5hbWUgfVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0ZW50aXR5VHlwZXMucHVzaChlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIkNvbXBsZXhUeXBlXCI6XG5cdFx0XHRcdFx0Y29uc3QgY29tcGxleFR5cGUgPSBwcmVwYXJlQ29tcGxleFR5cGUob01ldGFNb2RlbERhdGFbc09iamVjdE5hbWVdLCBzT2JqZWN0TmFtZSwgbmFtZXNwYWNlKTtcblx0XHRcdFx0XHRjb21wbGV4VHlwZXMucHVzaChjb21wbGV4VHlwZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJUeXBlRGVmaW5pdGlvblwiOlxuXHRcdFx0XHRcdGNvbnN0IHR5cGVEZWZpbml0aW9uID0gcHJlcGFyZVR5cGVEZWZpbml0aW9uKG9NZXRhTW9kZWxEYXRhW3NPYmplY3ROYW1lXSwgc09iamVjdE5hbWUsIG5hbWVzcGFjZSk7XG5cdFx0XHRcdFx0dHlwZURlZmluaXRpb25zLnB1c2godHlwZURlZmluaXRpb24pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0Y29uc3Qgb0VudGl0eUNvbnRhaW5lciA9IG9NZXRhTW9kZWxEYXRhW2VudGl0eUNvbnRhaW5lck5hbWVdO1xuXHRPYmplY3Qua2V5cyhvRW50aXR5Q29udGFpbmVyKS5mb3JFYWNoKChzT2JqZWN0TmFtZSkgPT4ge1xuXHRcdGlmIChzT2JqZWN0TmFtZSAhPT0gXCIka2luZFwiKSB7XG5cdFx0XHRzd2l0Y2ggKG9FbnRpdHlDb250YWluZXJbc09iamVjdE5hbWVdLiRraW5kKSB7XG5cdFx0XHRcdGNhc2UgXCJFbnRpdHlTZXRcIjpcblx0XHRcdFx0XHRjb25zdCBlbnRpdHlTZXQgPSBwcmVwYXJlRW50aXR5U2V0KG9FbnRpdHlDb250YWluZXJbc09iamVjdE5hbWVdLCBzT2JqZWN0TmFtZSwgZW50aXR5Q29udGFpbmVyTmFtZSk7XG5cdFx0XHRcdFx0ZW50aXR5U2V0cy5wdXNoKGVudGl0eVNldCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJTaW5nbGV0b25cIjpcblx0XHRcdFx0XHRjb25zdCBzaW5nbGV0b24gPSBwcmVwYXJlU2luZ2xldG9uKG9FbnRpdHlDb250YWluZXJbc09iamVjdE5hbWVdLCBzT2JqZWN0TmFtZSwgZW50aXR5Q29udGFpbmVyTmFtZSk7XG5cdFx0XHRcdFx0c2luZ2xldG9ucy5wdXNoKHNpbmdsZXRvbik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRsZXQgZW50aXR5Q29udGFpbmVyOiBFbnRpdHlDb250YWluZXIgPSB7fTtcblx0aWYgKGVudGl0eUNvbnRhaW5lck5hbWUpIHtcblx0XHRlbnRpdHlDb250YWluZXIgPSB7XG5cdFx0XHRuYW1lOiBlbnRpdHlDb250YWluZXJOYW1lLnJlcGxhY2UobmFtZXNwYWNlICsgXCIuXCIsIFwiXCIpLFxuXHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBlbnRpdHlDb250YWluZXJOYW1lXG5cdFx0fTtcblx0fVxuXHRlbnRpdHlTZXRzLmZvckVhY2goKGVudGl0eVNldCkgPT4ge1xuXHRcdGNvbnN0IG5hdlByb3BlcnR5QmluZGluZ3MgPSBvRW50aXR5Q29udGFpbmVyW2VudGl0eVNldC5uYW1lXS4kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZztcblx0XHRpZiAobmF2UHJvcGVydHlCaW5kaW5ncykge1xuXHRcdFx0T2JqZWN0LmtleXMobmF2UHJvcGVydHlCaW5kaW5ncykuZm9yRWFjaCgobmF2UHJvcE5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0RW50aXR5U2V0ID0gZW50aXR5U2V0cy5maW5kKChlbnRpdHlTZXROYW1lKSA9PiBlbnRpdHlTZXROYW1lLm5hbWUgPT09IG5hdlByb3BlcnR5QmluZGluZ3NbbmF2UHJvcE5hbWVdKTtcblx0XHRcdFx0aWYgKHRhcmdldEVudGl0eVNldCkge1xuXHRcdFx0XHRcdGVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW25hdlByb3BOYW1lXSA9IHRhcmdldEVudGl0eVNldDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBhY3Rpb25zOiBBY3Rpb25bXSA9IE9iamVjdC5rZXlzKG9NZXRhTW9kZWxEYXRhKVxuXHRcdC5maWx0ZXIoKGtleSkgPT4ge1xuXHRcdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkob01ldGFNb2RlbERhdGFba2V5XSkgJiYgb01ldGFNb2RlbERhdGFba2V5XS5sZW5ndGggPiAwICYmIG9NZXRhTW9kZWxEYXRhW2tleV1bMF0uJGtpbmQgPT09IFwiQWN0aW9uXCI7XG5cdFx0fSlcblx0XHQucmVkdWNlKChvdXRBY3Rpb25zOiBBY3Rpb25bXSwgYWN0aW9uTmFtZSkgPT4ge1xuXHRcdFx0Y29uc3QgYWN0aW9ucyA9IG9NZXRhTW9kZWxEYXRhW2FjdGlvbk5hbWVdO1xuXHRcdFx0YWN0aW9ucy5mb3JFYWNoKChhY3Rpb246IE1ldGFNb2RlbEFjdGlvbikgPT4ge1xuXHRcdFx0XHRvdXRBY3Rpb25zLnB1c2gocHJlcGFyZUFjdGlvbihhY3Rpb25OYW1lLCBhY3Rpb24sIG5hbWVzcGFjZSwgZW50aXR5Q29udGFpbmVyTmFtZSkpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gb3V0QWN0aW9ucztcblx0XHR9LCBbXSk7XG5cblx0Zm9yIChjb25zdCB0YXJnZXQgaW4gb01ldGFNb2RlbERhdGEuJEFubm90YXRpb25zKSB7XG5cdFx0Y3JlYXRlQW5ub3RhdGlvbkxpc3RzKG9NZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1t0YXJnZXRdLCB0YXJnZXQsIGFubm90YXRpb25MaXN0cywgb0NhcGFiaWxpdGllcyk7XG5cdH1cblxuXHQvLyBTb3J0IGJ5IHRhcmdldCBsZW5ndGhcblx0Y29uc3Qgb3V0QW5ub3RhdGlvbkxpc3RzID0gT2JqZWN0LmtleXMoYW5ub3RhdGlvbkxpc3RzKVxuXHRcdC5zb3J0KChhLCBiKSA9PiAoYS5sZW5ndGggPj0gYi5sZW5ndGggPyAxIDogLTEpKVxuXHRcdC5tYXAoKHNBbm5vdGF0aW9uTmFtZSkgPT4gYW5ub3RhdGlvbkxpc3RzW3NBbm5vdGF0aW9uTmFtZV0pO1xuXHRjb25zdCByZWZlcmVuY2VzOiBSZWZlcmVuY2VbXSA9IFtdO1xuXHRyZXR1cm4ge1xuXHRcdGlkZW50aWZpY2F0aW9uOiBcIm1ldGFtb2RlbFJlc3VsdFwiLFxuXHRcdHZlcnNpb246IFwiNC4wXCIsXG5cdFx0c2NoZW1hOiB7XG5cdFx0XHRlbnRpdHlDb250YWluZXIsXG5cdFx0XHRlbnRpdHlTZXRzLFxuXHRcdFx0ZW50aXR5VHlwZXMsXG5cdFx0XHRjb21wbGV4VHlwZXMsXG5cdFx0XHR0eXBlRGVmaW5pdGlvbnMsXG5cdFx0XHRzaW5nbGV0b25zLFxuXHRcdFx0YXNzb2NpYXRpb25zOiBbXSxcblx0XHRcdGFzc29jaWF0aW9uU2V0czogW10sXG5cdFx0XHRhY3Rpb25zLFxuXHRcdFx0bmFtZXNwYWNlLFxuXHRcdFx0YW5ub3RhdGlvbnM6IHtcblx0XHRcdFx0XCJtZXRhbW9kZWxSZXN1bHRcIjogb3V0QW5ub3RhdGlvbkxpc3RzXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRyZWZlcmVuY2VzOiByZWZlcmVuY2VzXG5cdH07XG59XG5cbmNvbnN0IG1NZXRhTW9kZWxNYXA6IFJlY29yZDxzdHJpbmcsIFBhcnNlck91dHB1dD4gPSB7fTtcblxuLyoqXG4gKiBDb252ZXJ0IHRoZSBPRGF0YU1ldGFNb2RlbCBpbnRvIGFub3RoZXIgZm9ybWF0IHRoYXQgYWxsb3cgZm9yIGVhc3kgbWFuaXB1bGF0aW9uIG9mIHRoZSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge09EYXRhTWV0YU1vZGVsfSBvTWV0YU1vZGVsIFRoZSBjdXJyZW50IG9EYXRhTWV0YU1vZGVsXG4gKiBAcGFyYW0gb0NhcGFiaWxpdGllcyBUaGUgY3VycmVudCBjYXBhYmlsaXRpZXNcbiAqIEByZXR1cm5zIHtDb252ZXJ0ZXJPdXRwdXR9IEFuIG9iamVjdCBjb250YWluaW5nIG9iamVjdCBsaWtlIGFubm90YXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUeXBlcyhvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgb0NhcGFiaWxpdGllcz86IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKTogQ29udmVydGVyT3V0cHV0IHtcblx0Y29uc3Qgc01ldGFNb2RlbElkID0gKG9NZXRhTW9kZWwgYXMgYW55KS5pZDtcblx0aWYgKCFtTWV0YU1vZGVsTWFwLmhhc093blByb3BlcnR5KHNNZXRhTW9kZWxJZCkpIHtcblx0XHRjb25zdCBwYXJzZWRPdXRwdXQgPSBwcmVwYXJlRW50aXR5VHlwZXMob01ldGFNb2RlbCwgb0NhcGFiaWxpdGllcyk7XG5cdFx0dHJ5IHtcblx0XHRcdG1NZXRhTW9kZWxNYXBbc01ldGFNb2RlbElkXSA9IEFubm90YXRpb25Db252ZXJ0ZXIuY29udmVydFR5cGVzKHBhcnNlZE91dHB1dCk7XG5cdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3Iob0Vycm9yIGFzIGFueSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtTWV0YU1vZGVsTWFwW3NNZXRhTW9kZWxJZF0gYXMgYW55IGFzIENvbnZlcnRlck91dHB1dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZU1vZGVsQ2FjaGVEYXRhKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKSB7XG5cdGRlbGV0ZSBtTWV0YU1vZGVsTWFwWyhvTWV0YU1vZGVsIGFzIGFueSkuaWRdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydE1ldGFNb2RlbENvbnRleHQob01ldGFNb2RlbENvbnRleHQ6IENvbnRleHQsIGJJbmNsdWRlVmlzaXRlZE9iamVjdHM6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XG5cdGNvbnN0IG9Db252ZXJ0ZXJPdXRwdXQgPSBjb252ZXJ0VHlwZXMob01ldGFNb2RlbENvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCk7XG5cdGNvbnN0IHNQYXRoID0gb01ldGFNb2RlbENvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdGNvbnN0IGFQYXRoU3BsaXQgPSBzUGF0aC5zcGxpdChcIi9cIik7XG5cdGxldCB0YXJnZXRFbnRpdHlTZXQ6IF9FbnRpdHlTZXQgfCBfU2luZ2xldG9uID0gb0NvbnZlcnRlck91dHB1dC5lbnRpdHlTZXRzLmZpbmQoXG5cdFx0KGVudGl0eVNldCkgPT4gZW50aXR5U2V0Lm5hbWUgPT09IGFQYXRoU3BsaXRbMV1cblx0KSBhcyBfRW50aXR5U2V0O1xuXHRpZiAoIXRhcmdldEVudGl0eVNldCkge1xuXHRcdHRhcmdldEVudGl0eVNldCA9IG9Db252ZXJ0ZXJPdXRwdXQuc2luZ2xldG9ucy5maW5kKChzaW5nbGV0b24pID0+IHNpbmdsZXRvbi5uYW1lID09PSBhUGF0aFNwbGl0WzFdKSBhcyBfU2luZ2xldG9uO1xuXHR9XG5cdGxldCByZWxhdGl2ZVBhdGggPSBhUGF0aFNwbGl0LnNsaWNlKDIpLmpvaW4oXCIvXCIpO1xuXG5cdGNvbnN0IGxvY2FsT2JqZWN0czogYW55W10gPSBbdGFyZ2V0RW50aXR5U2V0XTtcblx0d2hpbGUgKHJlbGF0aXZlUGF0aCAmJiByZWxhdGl2ZVBhdGgubGVuZ3RoID4gMCAmJiByZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCIpKSB7XG5cdFx0bGV0IHJlbGF0aXZlU3BsaXQgPSByZWxhdGl2ZVBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdGxldCBpZHggPSAwO1xuXHRcdGxldCBjdXJyZW50RW50aXR5U2V0LCBzTmF2UHJvcFRvQ2hlY2s7XG5cblx0XHRyZWxhdGl2ZVNwbGl0ID0gcmVsYXRpdmVTcGxpdC5zbGljZSgxKTsgLy8gUmVtb3ZpbmcgXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiXG5cdFx0d2hpbGUgKCFjdXJyZW50RW50aXR5U2V0ICYmIHJlbGF0aXZlU3BsaXQubGVuZ3RoID4gaWR4KSB7XG5cdFx0XHRpZiAocmVsYXRpdmVTcGxpdFtpZHhdICE9PSBcIiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCIpIHtcblx0XHRcdFx0Ly8gRmluZGluZyB0aGUgY29ycmVjdCBlbnRpdHlTZXQgZm9yIHRoZSBuYXZpZ2FpdG9uIHByb3BlcnR5IGJpbmRpbmcgZXhhbXBsZTogXCJTZXQvX1NhbGVzT3JkZXJcIlxuXHRcdFx0XHRzTmF2UHJvcFRvQ2hlY2sgPSByZWxhdGl2ZVNwbGl0XG5cdFx0XHRcdFx0LnNsaWNlKDAsIGlkeCArIDEpXG5cdFx0XHRcdFx0LmpvaW4oXCIvXCIpXG5cdFx0XHRcdFx0LnJlcGxhY2UoXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIiwgXCJcIik7XG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlTZXQgPSB0YXJnZXRFbnRpdHlTZXQgJiYgdGFyZ2V0RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbc05hdlByb3BUb0NoZWNrXTtcblx0XHRcdH1cblx0XHRcdGlkeCsrO1xuXHRcdH1cblx0XHRpZiAoIWN1cnJlbnRFbnRpdHlTZXQpIHtcblx0XHRcdC8vIEZhbGwgYmFjayB0byBTaW5nbGUgbmF2IHByb3AgaWYgZW50aXR5U2V0IGlzIG5vdCBmb3VuZC5cblx0XHRcdHNOYXZQcm9wVG9DaGVjayA9IHJlbGF0aXZlU3BsaXRbMF07XG5cdFx0fVxuXHRcdGNvbnN0IGFOYXZQcm9wcyA9IHNOYXZQcm9wVG9DaGVjaz8uc3BsaXQoXCIvXCIpIHx8IFtdO1xuXHRcdGxldCB0YXJnZXRFbnRpdHlUeXBlID0gdGFyZ2V0RW50aXR5U2V0ICYmIHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRcdGZvciAoY29uc3Qgc05hdlByb3Agb2YgYU5hdlByb3BzKSB7XG5cdFx0XHQvLyBQdXNoaW5nIGFsbCBuYXYgcHJvcHMgdG8gdGhlIHZpc2l0ZWQgb2JqZWN0cy4gZXhhbXBsZTogXCJTZXRcIiwgXCJfU2FsZXNPcmRlclwiIGZvciBcIlNldC9fU2FsZXNPcmRlclwiKGluIE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcpXG5cdFx0XHRjb25zdCB0YXJnZXROYXZQcm9wID0gdGFyZ2V0RW50aXR5VHlwZSAmJiB0YXJnZXRFbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmQoKG5hdlByb3ApID0+IG5hdlByb3AubmFtZSA9PT0gc05hdlByb3ApO1xuXHRcdFx0aWYgKHRhcmdldE5hdlByb3ApIHtcblx0XHRcdFx0bG9jYWxPYmplY3RzLnB1c2godGFyZ2V0TmF2UHJvcCk7XG5cdFx0XHRcdHRhcmdldEVudGl0eVR5cGUgPSB0YXJnZXROYXZQcm9wLnRhcmdldFR5cGU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0dGFyZ2V0RW50aXR5U2V0ID1cblx0XHRcdCh0YXJnZXRFbnRpdHlTZXQgJiYgY3VycmVudEVudGl0eVNldCkgfHwgKHRhcmdldEVudGl0eVNldCAmJiB0YXJnZXRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tyZWxhdGl2ZVNwbGl0WzBdXSk7XG5cdFx0aWYgKHRhcmdldEVudGl0eVNldCkge1xuXHRcdFx0Ly8gUHVzaGluZyB0aGUgdGFyZ2V0IGVudGl0eVNldCB0byB2aXNpdGVkIG9iamVjdHNcblx0XHRcdGxvY2FsT2JqZWN0cy5wdXNoKHRhcmdldEVudGl0eVNldCk7XG5cdFx0fVxuXHRcdC8vIFJlLWNhbGN1bGF0aW5nIHRoZSByZWxhdGl2ZSBwYXRoXG5cdFx0Ly8gQXMgZWFjaCBuYXZpZ2F0aW9uIG5hbWUgaXMgZW5jbG9zZWQgYmV0d2VlbiAnJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcnIGFuZCAnJCcgKHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBlbnRpdHlzZXQgZWFzaWx5IGluIHRoZSBtZXRhbW9kZWwpXG5cdFx0Ly8gd2UgbmVlZCB0byByZW1vdmUgdGhlIGNsb3NpbmcgJyQnIHRvIGJlIGFibGUgdG8gc3dpdGNoIHRvIHRoZSBuZXh0IG5hdmlnYXRpb25cblx0XHRyZWxhdGl2ZVNwbGl0ID0gcmVsYXRpdmVTcGxpdC5zbGljZShhTmF2UHJvcHMubGVuZ3RoIHx8IDEpO1xuXHRcdGlmIChyZWxhdGl2ZVNwbGl0Lmxlbmd0aCAmJiByZWxhdGl2ZVNwbGl0WzBdID09PSBcIiRcIikge1xuXHRcdFx0cmVsYXRpdmVTcGxpdC5zaGlmdCgpO1xuXHRcdH1cblx0XHRyZWxhdGl2ZVBhdGggPSByZWxhdGl2ZVNwbGl0LmpvaW4oXCIvXCIpO1xuXHR9XG5cdGlmIChyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIiRUeXBlXCIpKSB7XG5cdFx0Ly8gV2UncmUgYW55d2F5IGdvaW5nIHRvIGxvb2sgb24gdGhlIGVudGl0eVR5cGUuLi5cblx0XHRyZWxhdGl2ZVBhdGggPSBhUGF0aFNwbGl0LnNsaWNlKDMpLmpvaW4oXCIvXCIpO1xuXHR9XG5cdGlmICh0YXJnZXRFbnRpdHlTZXQgJiYgcmVsYXRpdmVQYXRoLmxlbmd0aCkge1xuXHRcdGNvbnN0IG9UYXJnZXQgPSB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZS5yZXNvbHZlUGF0aChyZWxhdGl2ZVBhdGgsIGJJbmNsdWRlVmlzaXRlZE9iamVjdHMpO1xuXHRcdGlmIChvVGFyZ2V0KSB7XG5cdFx0XHRpZiAoYkluY2x1ZGVWaXNpdGVkT2JqZWN0cykge1xuXHRcdFx0XHRvVGFyZ2V0LnZpc2l0ZWRPYmplY3RzID0gbG9jYWxPYmplY3RzLmNvbmNhdChvVGFyZ2V0LnZpc2l0ZWRPYmplY3RzKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlICYmIHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlLmFjdGlvbnMpIHtcblx0XHRcdC8vIGlmIHRhcmdldCBpcyBhbiBhY3Rpb24gb3IgYW4gYWN0aW9uIHBhcmFtZXRlclxuXHRcdFx0Y29uc3QgYWN0aW9ucyA9IHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlICYmIHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlLmFjdGlvbnM7XG5cdFx0XHRjb25zdCByZWxhdGl2ZVNwbGl0ID0gcmVsYXRpdmVQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGlmIChhY3Rpb25zW3JlbGF0aXZlU3BsaXRbMF1dKSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbiA9IGFjdGlvbnNbcmVsYXRpdmVTcGxpdFswXV07XG5cdFx0XHRcdGlmIChyZWxhdGl2ZVNwbGl0WzFdICYmIGFjdGlvbi5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0Y29uc3QgcGFyYW1ldGVyTmFtZSA9IHJlbGF0aXZlU3BsaXRbMV07XG5cdFx0XHRcdFx0Y29uc3QgdGFyZ2V0UGFyYW1ldGVyID0gYWN0aW9uLnBhcmFtZXRlcnMuZmluZCgocGFyYW1ldGVyKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcGFyYW1ldGVyLmZ1bGx5UXVhbGlmaWVkTmFtZS5lbmRzV2l0aChcIi9cIiArIHBhcmFtZXRlck5hbWUpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJldHVybiB0YXJnZXRQYXJhbWV0ZXI7XG5cdFx0XHRcdH0gZWxzZSBpZiAocmVsYXRpdmVQYXRoLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdHJldHVybiBhY3Rpb247XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9UYXJnZXQ7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGJJbmNsdWRlVmlzaXRlZE9iamVjdHMpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHRhcmdldDogdGFyZ2V0RW50aXR5U2V0LFxuXHRcdFx0XHR2aXNpdGVkT2JqZWN0czogbG9jYWxPYmplY3RzXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4gdGFyZ2V0RW50aXR5U2V0O1xuXHR9XG59XG5cbnR5cGUgQ29udmVydGVyT2JqZWN0ID0ge1xuXHRfdHlwZTogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgUmVzb2x2ZWRUYXJnZXQgPSB7XG5cdHRhcmdldD86IENvbnZlcnRlck9iamVjdDtcblx0dmlzaXRlZE9iamVjdHM6IENvbnZlcnRlck9iamVjdFtdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvTWV0YU1vZGVsQ29udGV4dDogQ29udGV4dCwgb0VudGl0eVNldE1ldGFNb2RlbENvbnRleHQ/OiBDb250ZXh0KTogRGF0YU1vZGVsT2JqZWN0UGF0aCB7XG5cdGNvbnN0IG9Db252ZXJ0ZXJPdXRwdXQgPSBjb252ZXJ0VHlwZXMob01ldGFNb2RlbENvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCk7XG5cdGNvbnN0IG1ldGFNb2RlbENvbnRleHQgPSBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChvTWV0YU1vZGVsQ29udGV4dCwgdHJ1ZSk7XG5cdGxldCB0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbjtcblx0aWYgKG9FbnRpdHlTZXRNZXRhTW9kZWxDb250ZXh0ICYmIG9FbnRpdHlTZXRNZXRhTW9kZWxDb250ZXh0LmdldFBhdGgoKSAhPT0gXCIvXCIpIHtcblx0XHR0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbiA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvRW50aXR5U2V0TWV0YU1vZGVsQ29udGV4dCk7XG5cdH1cblx0cmV0dXJuIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RnJvbVBhdGgobWV0YU1vZGVsQ29udGV4dCwgb0NvbnZlcnRlck91dHB1dCwgdGFyZ2V0RW50aXR5U2V0TG9jYXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RGcm9tUGF0aChcblx0bWV0YU1vZGVsQ29udGV4dDogUmVzb2x2ZWRUYXJnZXQsXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZXJPdXRwdXQsXG5cdHRhcmdldEVudGl0eVNldExvY2F0aW9uPzogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aCB7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdHMgPSBtZXRhTW9kZWxDb250ZXh0LnZpc2l0ZWRPYmplY3RzLmZpbHRlcihcblx0XHQodmlzaXRlZE9iamVjdDogYW55KSA9PiB2aXNpdGVkT2JqZWN0ICYmIHZpc2l0ZWRPYmplY3QuaGFzT3duUHJvcGVydHkoXCJfdHlwZVwiKSAmJiB2aXNpdGVkT2JqZWN0Ll90eXBlICE9PSBcIkVudGl0eVR5cGVcIlxuXHQpO1xuXHRpZiAobWV0YU1vZGVsQ29udGV4dC50YXJnZXQgJiYgbWV0YU1vZGVsQ29udGV4dC50YXJnZXQuaGFzT3duUHJvcGVydHkoXCJfdHlwZVwiKSAmJiBtZXRhTW9kZWxDb250ZXh0LnRhcmdldC5fdHlwZSAhPT0gXCJFbnRpdHlUeXBlXCIpIHtcblx0XHRkYXRhTW9kZWxPYmplY3RzLnB1c2gobWV0YU1vZGVsQ29udGV4dC50YXJnZXQpO1xuXHR9XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBfTmF2aWdhdGlvblByb3BlcnR5W10gPSBbXTtcblx0Y29uc3Qgcm9vdEVudGl0eVNldDogX0VudGl0eVNldCA9IGRhdGFNb2RlbE9iamVjdHNbMF0gYXMgX0VudGl0eVNldDtcblx0Ly8gY3VycmVudEVudGl0eVNldCBjYW4gYmUgdW5kZWZpbmVkLlxuXHRsZXQgY3VycmVudEVudGl0eVNldDogX0VudGl0eVNldCB8IHVuZGVmaW5lZCA9IHJvb3RFbnRpdHlTZXQgYXMgX0VudGl0eVNldDtcblx0bGV0IGN1cnJlbnRFbnRpdHlUeXBlOiBfRW50aXR5VHlwZSA9IHJvb3RFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0bGV0IGkgPSAxO1xuXHRsZXQgY3VycmVudE9iamVjdDtcblx0bGV0IG5hdmlnYXRlZFBhdGhzID0gW107XG5cdHdoaWxlIChpIDwgZGF0YU1vZGVsT2JqZWN0cy5sZW5ndGgpIHtcblx0XHRjdXJyZW50T2JqZWN0ID0gZGF0YU1vZGVsT2JqZWN0c1tpKytdO1xuXHRcdGlmIChjdXJyZW50T2JqZWN0Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKSB7XG5cdFx0XHRuYXZpZ2F0ZWRQYXRocy5wdXNoKGN1cnJlbnRPYmplY3QubmFtZSk7XG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcy5wdXNoKGN1cnJlbnRPYmplY3QgYXMgX05hdmlnYXRpb25Qcm9wZXJ0eSk7XG5cdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IChjdXJyZW50T2JqZWN0IGFzIF9OYXZpZ2F0aW9uUHJvcGVydHkpLnRhcmdldFR5cGU7XG5cdFx0XHRpZiAoY3VycmVudEVudGl0eVNldCAmJiBjdXJyZW50RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcuaGFzT3duUHJvcGVydHkobmF2aWdhdGVkUGF0aHMuam9pbihcIi9cIikpKSB7XG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlTZXQgPSBjdXJyZW50RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbY3VycmVudE9iamVjdC5uYW1lXTtcblx0XHRcdFx0bmF2aWdhdGVkUGF0aHMgPSBbXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlTZXQgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChjdXJyZW50T2JqZWN0Ll90eXBlID09PSBcIkVudGl0eVNldFwiKSB7XG5cdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gY3VycmVudE9iamVjdCBhcyBfRW50aXR5U2V0O1xuXHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPSBjdXJyZW50RW50aXR5U2V0LmVudGl0eVR5cGU7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHRhcmdldEVudGl0eVNldExvY2F0aW9uICYmIHRhcmdldEVudGl0eVNldExvY2F0aW9uLnN0YXJ0aW5nRW50aXR5U2V0ICE9PSByb290RW50aXR5U2V0KSB7XG5cdFx0Ly8gSW4gY2FzZSB0aGUgZW50aXR5c2V0IGlzIG5vdCBzdGFydGluZyBmcm9tIHRoZSBzYW1lIGxvY2F0aW9uIGl0IG1heSBtZWFuIHRoYXQgd2UgYXJlIGRvaW5nIHRvbyBtdWNoIHdvcmsgZWFybGllciBmb3Igc29tZSByZWFzb25cblx0XHQvLyBBcyBzdWNoIHdlIG5lZWQgdG8gcmVkZWZpbmUgdGhlIGNvbnRleHQgc291cmNlIGZvciB0aGUgdGFyZ2V0RW50aXR5U2V0TG9jYXRpb25cblx0XHRjb25zdCBzdGFydGluZ0luZGV4ID0gZGF0YU1vZGVsT2JqZWN0cy5pbmRleE9mKHRhcmdldEVudGl0eVNldExvY2F0aW9uLnN0YXJ0aW5nRW50aXR5U2V0KTtcblx0XHRpZiAoc3RhcnRpbmdJbmRleCAhPT0gLTEpIHtcblx0XHRcdC8vIElmIGl0J3Mgbm90IGZvdW5kIEkgZG9uJ3Qga25vdyB3aGF0IHdlIGNhbiBkbyAocHJvYmFibHkgbm90aGluZylcblx0XHRcdGNvbnN0IHJlcXVpcmVkRGF0YU1vZGVsT2JqZWN0cyA9IGRhdGFNb2RlbE9iamVjdHMuc2xpY2UoMCwgc3RhcnRpbmdJbmRleCk7XG5cdFx0XHR0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbi5zdGFydGluZ0VudGl0eVNldCA9IHJvb3RFbnRpdHlTZXQ7XG5cdFx0XHR0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbi5uYXZpZ2F0aW9uUHJvcGVydGllcyA9IHJlcXVpcmVkRGF0YU1vZGVsT2JqZWN0c1xuXHRcdFx0XHQuZmlsdGVyKChvYmplY3Q6IGFueSkgPT4gb2JqZWN0Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKVxuXHRcdFx0XHQuY29uY2F0KHRhcmdldEVudGl0eVNldExvY2F0aW9uLm5hdmlnYXRpb25Qcm9wZXJ0aWVzKSBhcyBfTmF2aWdhdGlvblByb3BlcnR5W107XG5cdFx0fVxuXHR9XG5cdGNvbnN0IG91dERhdGFNb2RlbFBhdGggPSB7XG5cdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IHJvb3RFbnRpdHlTZXQsXG5cdFx0dGFyZ2V0RW50aXR5U2V0OiBjdXJyZW50RW50aXR5U2V0LFxuXHRcdHRhcmdldEVudGl0eVR5cGU6IGN1cnJlbnRFbnRpdHlUeXBlLFxuXHRcdHRhcmdldE9iamVjdDogbWV0YU1vZGVsQ29udGV4dC50YXJnZXQsXG5cdFx0bmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdFx0Y29udGV4dExvY2F0aW9uOiB0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbixcblx0XHRjb252ZXJ0ZWRUeXBlczogY29udmVydGVkVHlwZXNcblx0fTtcblx0aWYgKCFvdXREYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbikge1xuXHRcdG91dERhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uID0gb3V0RGF0YU1vZGVsUGF0aDtcblx0fVxuXHRyZXR1cm4gb3V0RGF0YU1vZGVsUGF0aDtcbn1cbiJdfQ==
|
|
1342
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1ldGFNb2RlbENvbnZlcnRlci50cyJdLCJuYW1lcyI6WyJWT0NBQlVMQVJZX0FMSUFTIiwiRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiQ2hhcnQiLCJNaWNyb0NoYXJ0IiwiVVNoZWxsIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiQXBwU3RhdGUiLCJwYXJzZVByb3BlcnR5VmFsdWUiLCJhbm5vdGF0aW9uT2JqZWN0IiwicHJvcGVydHlLZXkiLCJjdXJyZW50VGFyZ2V0IiwiYW5ub3RhdGlvbnNMaXN0cyIsIm9DYXBhYmlsaXRpZXMiLCJ2YWx1ZSIsImN1cnJlbnRQcm9wZXJ0eVRhcmdldCIsInR5cGVPZkFubm90YXRpb24iLCJ0eXBlIiwiTnVsbCIsIlN0cmluZyIsIkJvb2wiLCJJbnQiLCJBcnJheSIsImlzQXJyYXkiLCJDb2xsZWN0aW9uIiwibWFwIiwic3ViQW5ub3RhdGlvbk9iamVjdCIsInN1YkFubm90YXRpb25PYmplY3RJbmRleCIsInBhcnNlQW5ub3RhdGlvbk9iamVjdCIsImxlbmd0aCIsImhhc093blByb3BlcnR5IiwiJFBhdGgiLCJ1bmRlZmluZWQiLCJQYXRoIiwiJERlY2ltYWwiLCJEZWNpbWFsIiwicGFyc2VGbG9hdCIsIiRQcm9wZXJ0eVBhdGgiLCJQcm9wZXJ0eVBhdGgiLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCIkSWYiLCJJZiIsIiRBbmQiLCJBbmQiLCIkT3IiLCJPciIsIiROb3QiLCJOb3QiLCIkRXEiLCJFcSIsIiROZSIsIk5lIiwiJEd0IiwiR3QiLCIkR2UiLCJHZSIsIiRMdCIsIkx0IiwiJExlIiwiTGUiLCIkQXBwbHkiLCJBcHBseSIsIkZ1bmN0aW9uIiwiJEZ1bmN0aW9uIiwiJEFubm90YXRpb25QYXRoIiwiQW5ub3RhdGlvblBhdGgiLCIkRW51bU1lbWJlciIsIkVudW1NZW1iZXIiLCJtYXBOYW1lVG9BbGlhcyIsInNwbGl0IiwiJFR5cGUiLCJSZWNvcmQiLCJuYW1lIiwiYW5ub3RhdGlvbk5hbWUiLCJwYXRoUGFydCIsImFubm9QYXJ0IiwibGFzdERvdCIsImxhc3RJbmRleE9mIiwic3Vic3RyIiwiY3VycmVudE9iamVjdFRhcmdldCIsInBhcnNlZEFubm90YXRpb25PYmplY3QiLCJ0eXBlT2ZPYmplY3QiLCJwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJzdWJBbm5vdGF0aW9uSW5kZXgiLCJ0eXBlVmFsdWUiLCJwcm9wZXJ0eVZhbHVlcyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwic3RhcnRzV2l0aCIsInB1c2giLCJjcmVhdGVBbm5vdGF0aW9uTGlzdHMiLCJnZXRPckNyZWF0ZUFubm90YXRpb25MaXN0IiwidGFyZ2V0IiwiYW5ub3RhdGlvbnMiLCJyZW1vdmVDaGFydEFubm90YXRpb25zIiwiZmlsdGVyIiwib1JlY29yZCIsIlRhcmdldCIsImluZGV4T2YiLCJyZW1vdmVJQk5Bbm5vdGF0aW9ucyIsImhhbmRsZVByZXNlbnRhdGlvblZhcmlhbnQiLCJhbm5vdGF0aW9uT2JqZWN0cyIsImFubm90YXRpb25UYXJnZXQiLCJhbm5vdGF0aW9uTGlzdHMiLCJvdXRBbm5vdGF0aW9uT2JqZWN0IiwiYW5ub3RhdGlvbktleSIsIkRhdGEiLCJWaXN1YWxpemF0aW9ucyIsImN1cnJlbnRPdXRBbm5vdGF0aW9uT2JqZWN0IiwiYW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0IiwiYW5ub3RhdGlvblF1YWxpZmllclNwbGl0IiwicXVhbGlmaWVyIiwidGVybSIsImN1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0IiwiaXNDb2xsZWN0aW9uIiwidHlwZW9mQW5ub3RhdGlvbiIsInJlY29yZCIsInByZXBhcmVQcm9wZXJ0eSIsInByb3BlcnR5RGVmaW5pdGlvbiIsImVudGl0eVR5cGVPYmplY3QiLCJwcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0eU9iamVjdCIsIl90eXBlIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwibWF4TGVuZ3RoIiwiJE1heExlbmd0aCIsInByZWNpc2lvbiIsIiRQcmVjaXNpb24iLCJzY2FsZSIsIiRTY2FsZSIsIm51bGxhYmxlIiwiJE51bGxhYmxlIiwicHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0eSIsIm5hdlByb3BlcnR5RGVmaW5pdGlvbiIsIm5hdlByb3BlcnR5TmFtZSIsInJlZmVyZW50aWFsQ29uc3RyYWludCIsIiRSZWZlcmVudGlhbENvbnN0cmFpbnQiLCJzb3VyY2VQcm9wZXJ0eU5hbWUiLCJzb3VyY2VUeXBlTmFtZSIsInNvdXJjZVByb3BlcnR5IiwidGFyZ2V0VHlwZU5hbWUiLCJ0YXJnZXRQcm9wZXJ0eSIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsInBhcnRuZXIiLCIkUGFydG5lciIsIiRpc0NvbGxlY3Rpb24iLCJjb250YWluc1RhcmdldCIsIiRDb250YWluc1RhcmdldCIsInByZXBhcmVFbnRpdHlTZXQiLCJlbnRpdHlTZXREZWZpbml0aW9uIiwiZW50aXR5U2V0TmFtZSIsImVudGl0eUNvbnRhaW5lck5hbWUiLCJlbnRpdHlTZXRPYmplY3QiLCJuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIiwiZW50aXR5VHlwZU5hbWUiLCJwcmVwYXJlU2luZ2xldG9uIiwic2luZ2xldG9uRGVmaW5pdGlvbiIsInNpbmdsZXRvbk5hbWUiLCJwcmVwYXJlVHlwZURlZmluaXRpb24iLCJ0eXBlRGVmaW5pdGlvbiIsInR5cGVOYW1lIiwibmFtZXNwYWNlIiwidHlwZU9iamVjdCIsInJlcGxhY2UiLCJ1bmRlcmx5aW5nVHlwZSIsIiRVbmRlcmx5aW5nVHlwZSIsInByZXBhcmVDb21wbGV4VHlwZSIsImNvbXBsZXhUeXBlRGVmaW5pdGlvbiIsImNvbXBsZXhUeXBlTmFtZSIsImNvbXBsZXhUeXBlT2JqZWN0IiwicHJvcGVydGllcyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiY29tcGxleFR5cGVQcm9wZXJ0aWVzIiwicHJvcGVydHlOYW1lT3JOb3QiLCIka2luZCIsInNvcnQiLCJhIiwiYiIsImNvbXBsZXhUeXBlTmF2aWdhdGlvblByb3BlcnRpZXMiLCJwcmVwYXJlRW50aXR5S2V5cyIsImVudGl0eVR5cGVEZWZpbml0aW9uIiwib01ldGFNb2RlbERhdGEiLCIkS2V5IiwiJEJhc2VUeXBlIiwicHJlcGFyZUVudGl0eVR5cGUiLCJtZXRhTW9kZWxEYXRhIiwiZW50aXR5S2V5cyIsImVudGl0eVByb3BlcnRpZXMiLCJhY3Rpb25zIiwiZW50aXR5S2V5IiwiZmluZCIsInByb3BlcnR5IiwicHJlcGFyZUFjdGlvbiIsImFjdGlvbk5hbWUiLCJhY3Rpb25SYXdEYXRhIiwiYWN0aW9uRW50aXR5VHlwZSIsImFjdGlvbkZRTiIsImFjdGlvblNob3J0TmFtZSIsIiRJc0JvdW5kIiwiYmluZGluZ1BhcmFtZXRlciIsIiRQYXJhbWV0ZXIiLCJwYXJhbWV0ZXJzIiwiaXNCb3VuZCIsImlzRnVuY3Rpb24iLCJzb3VyY2VUeXBlIiwicmV0dXJuVHlwZSIsIiRSZXR1cm5UeXBlIiwicGFyYW0iLCJpc0VudGl0eVNldCIsIiRFbnRpdHlTZXRQYXRoIiwiJE5hbWUiLCJwcmVwYXJlRW50aXR5VHlwZXMiLCJvTWV0YU1vZGVsIiwiZ2V0T2JqZWN0IiwiZW50aXR5VHlwZXMiLCJlbnRpdHlTZXRzIiwic2luZ2xldG9ucyIsImNvbXBsZXhUeXBlcyIsInR5cGVEZWZpbml0aW9ucyIsIiRFbnRpdHlDb250YWluZXIiLCJzY2hlbWFLZXlzIiwibWV0YW1vZGVsS2V5Iiwic09iamVjdE5hbWUiLCJlbnRpdHlUeXBlIiwiJEFubm90YXRpb25zIiwiZmlsdGVyRmFjZXRBbm5vdGF0aW9uIiwiSUQiLCJnZW5lcmF0ZSIsIkZhY2V0IiwiZW50aXR5UHJvcGVydHkiLCJWYWx1ZSIsImNvbXBsZXhUeXBlIiwib0VudGl0eUNvbnRhaW5lciIsImVudGl0eVNldCIsInNpbmdsZXRvbiIsImVudGl0eUNvbnRhaW5lciIsIm5hdlByb3BlcnR5QmluZGluZ3MiLCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyIsIm5hdlByb3BOYW1lIiwidGFyZ2V0RW50aXR5U2V0Iiwia2V5IiwicmVkdWNlIiwib3V0QWN0aW9ucyIsImlubmVyQWN0aW9ucyIsImFjdGlvbiIsIm91dEFubm90YXRpb25MaXN0cyIsInNBbm5vdGF0aW9uTmFtZSIsInJlZmVyZW5jZXMiLCJpZGVudGlmaWNhdGlvbiIsInZlcnNpb24iLCJzY2hlbWEiLCJhc3NvY2lhdGlvbnMiLCJhc3NvY2lhdGlvblNldHMiLCJtTWV0YU1vZGVsTWFwIiwiY29udmVydFR5cGVzIiwic01ldGFNb2RlbElkIiwiaWQiLCJwYXJzZWRPdXRwdXQiLCJBbm5vdGF0aW9uQ29udmVydGVyIiwiY29udmVydCIsIm9FcnJvciIsIkVycm9yIiwiZ2V0Q29udmVydGVkVHlwZXMiLCJvQ29udGV4dCIsImdldE1vZGVsIiwiaXNBIiwiZGVsZXRlTW9kZWxDYWNoZURhdGEiLCJjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCIsIm9NZXRhTW9kZWxDb250ZXh0IiwiYkluY2x1ZGVWaXNpdGVkT2JqZWN0cyIsIm9Db252ZXJ0ZWRNZXRhZGF0YSIsInNQYXRoIiwiZ2V0UGF0aCIsImFQYXRoU3BsaXQiLCJyZWxhdGl2ZVBhdGgiLCJzbGljZSIsImpvaW4iLCJsb2NhbE9iamVjdHMiLCJyZWxhdGl2ZVNwbGl0IiwiaWR4IiwiY3VycmVudEVudGl0eVNldCIsInNOYXZQcm9wVG9DaGVjayIsImFOYXZQcm9wcyIsInRhcmdldEVudGl0eVR5cGUiLCJzTmF2UHJvcCIsInRhcmdldE5hdlByb3AiLCJuYXZQcm9wIiwidGFyZ2V0VHlwZSIsInNoaWZ0Iiwib1RhcmdldCIsInJlc29sdmVQYXRoIiwidmlzaXRlZE9iamVjdHMiLCJjb25jYXQiLCJwYXJhbWV0ZXJOYW1lIiwicGFyYW1ldGVyIiwiZW5kc1dpdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJvRW50aXR5U2V0TWV0YU1vZGVsQ29udGV4dCIsIm1ldGFNb2RlbENvbnRleHQiLCJ0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbiIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RnJvbVBhdGgiLCJjb252ZXJ0ZWRUeXBlcyIsImRhdGFNb2RlbE9iamVjdHMiLCJ2aXNpdGVkT2JqZWN0Iiwicm9vdEVudGl0eVNldCIsImN1cnJlbnRFbnRpdHlUeXBlIiwiaSIsImN1cnJlbnRPYmplY3QiLCJuYXZpZ2F0ZWRQYXRocyIsInN0YXJ0aW5nRW50aXR5U2V0Iiwic3RhcnRpbmdJbmRleCIsInJlcXVpcmVkRGF0YU1vZGVsT2JqZWN0cyIsIm9iamVjdCIsIm91dERhdGFNb2RlbFBhdGgiLCJ0YXJnZXRPYmplY3QiLCJjb250ZXh0TG9jYXRpb24iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBOEJBLE1BQU1BLGdCQUFxQixHQUFHO0FBQzdCLGlDQUE2QixjQURBO0FBRTdCLHlCQUFxQixNQUZRO0FBRzdCLDZCQUF5QixVQUhJO0FBSTdCLHNDQUFrQyxRQUpMO0FBSzdCLGtDQUE4QixJQUxEO0FBTTdCLHVDQUFtQyxTQU5OO0FBTzdCLHlDQUFxQyxXQVBSO0FBUTdCLDRDQUF3QyxjQVJYO0FBUzdCLDZDQUF5QztBQVRaLEdBQTlCO0FBb0JPLE1BQU1DLDhCQUE4QixHQUFHO0FBQzdDQyxJQUFBQSxLQUFLLEVBQUUsSUFEc0M7QUFFN0NDLElBQUFBLFVBQVUsRUFBRSxJQUZpQztBQUc3Q0MsSUFBQUEsTUFBTSxFQUFFLElBSHFDO0FBSTdDQyxJQUFBQSxxQkFBcUIsRUFBRSxJQUpzQjtBQUs3Q0MsSUFBQUEsUUFBUSxFQUFFO0FBTG1DLEdBQXZDOzs7QUEwQlAsV0FBU0Msa0JBQVQsQ0FDQ0MsZ0JBREQsRUFFQ0MsV0FGRCxFQUdDQyxhQUhELEVBSUNDLGdCQUpELEVBS0NDLGFBTEQsRUFNTztBQUNOLFFBQUlDLEtBQUo7QUFDQSxRQUFNQyxxQkFBNkIsYUFBTUosYUFBTixjQUF1QkQsV0FBdkIsQ0FBbkM7QUFDQSxRQUFNTSxnQkFBZ0IsR0FBRyxPQUFPUCxnQkFBaEM7O0FBQ0EsUUFBSUEsZ0JBQWdCLEtBQUssSUFBekIsRUFBK0I7QUFDOUJL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QyxDQUN0QyxVQUFDeU4sTUFBRDtBQUFBLGlCQUFpQkEsTUFBTSxDQUFDOUwsS0FBUCxLQUFpQixvQkFBbEM7QUFBQSxTQURzQyxFQUU3QzBLLE1BRjZDLENBRXRDTyx1QkFBdUIsQ0FBQ2hJLG9CQUZjLENBQS9DO0FBR0E7QUFDRDs7QUFDRCxRQUFNOEksZ0JBQWdCLEdBQUc7QUFDeEJKLE1BQUFBLGlCQUFpQixFQUFFTCxhQURLO0FBRXhCakUsTUFBQUEsZUFBZSxFQUFFeUMsZ0JBRk87QUFHeEJHLE1BQUFBLGdCQUFnQixFQUFFc0IsaUJBSE07QUFJeEJTLE1BQUFBLFlBQVksRUFBRWhCLGdCQUFnQixDQUFDOU0sTUFKUDtBQUt4QitFLE1BQUFBLG9CQUFvQixFQUFwQkEsb0JBTHdCO0FBTXhCZ0osTUFBQUEsZUFBZSxFQUFFaEIsdUJBTk87QUFPeEJFLE1BQUFBLGNBQWMsRUFBRUE7QUFQUSxLQUF6Qjs7QUFTQSxRQUFJLENBQUNZLGdCQUFnQixDQUFDRSxlQUF0QixFQUF1QztBQUN0Q0YsTUFBQUEsZ0JBQWdCLENBQUNFLGVBQWpCLEdBQW1DRixnQkFBbkM7QUFDQTs7QUFDRCxXQUFPQSxnQkFBUDtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGZpbGUgaXMgcmV0cmlldmVkIGZyb20gQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlciwgc2hhcmVkIGNvZGUgd2l0aCB0b29sIHN1aXRlXG5cbmltcG9ydCB0eXBlIHtcblx0QW5ub3RhdGlvbixcblx0QW5ub3RhdGlvbkxpc3QsXG5cdEFubm90YXRpb25SZWNvcmQsXG5cdENvbnZlcnRlZE1ldGFkYXRhLFxuXHRFbnRpdHlTZXQsXG5cdEVudGl0eVR5cGUsXG5cdEV4cHJlc3Npb24sXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0UHJvcGVydHksXG5cdFJhd0FjdGlvbixcblx0UmF3Q29tcGxleFR5cGUsXG5cdFJhd0VudGl0eUNvbnRhaW5lcixcblx0UmF3RW50aXR5U2V0LFxuXHRSYXdFbnRpdHlUeXBlLFxuXHRSYXdNZXRhZGF0YSxcblx0UmF3UHJvcGVydHksXG5cdFJhd1NpbmdsZXRvbixcblx0UmF3VHlwZURlZmluaXRpb24sXG5cdFJhd1Y0TmF2aWdhdGlvblByb3BlcnR5LFxuXHRSZWZlcmVuY2UsXG5cdFJlZmVyZW50aWFsQ29uc3RyYWludCxcblx0U2luZ2xldG9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQW5ub3RhdGlvbkNvbnZlcnRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcIi4uL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcblxuY29uc3QgVk9DQUJVTEFSWV9BTElBUzogYW55ID0ge1xuXHRcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjFcIjogXCJDYXBhYmlsaXRpZXNcIixcblx0XCJPcmcuT0RhdGEuQ29yZS5WMVwiOiBcIkNvcmVcIixcblx0XCJPcmcuT0RhdGEuTWVhc3VyZXMuVjFcIjogXCJNZWFzdXJlc1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MVwiOiBcIkNvbW1vblwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxXCI6IFwiVUlcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxXCI6IFwiU2Vzc2lvblwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MVwiOiBcIkFuYWx5dGljc1wiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MVwiOiBcIlBlcnNvbmFsRGF0YVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjFcIjogXCJDb21tdW5pY2F0aW9uXCJcbn07XG5cbmV4cG9ydCB0eXBlIEVudmlyb25tZW50Q2FwYWJpbGl0aWVzID0ge1xuXHRDaGFydDogYm9vbGVhbjtcblx0TWljcm9DaGFydDogYm9vbGVhbjtcblx0VVNoZWxsOiBib29sZWFuO1xuXHRJbnRlbnRCYXNlZE5hdmlnYXRpb246IGJvb2xlYW47XG5cdEFwcFN0YXRlOiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNvbnN0IERlZmF1bHRFbnZpcm9ubWVudENhcGFiaWxpdGllcyA9IHtcblx0Q2hhcnQ6IHRydWUsXG5cdE1pY3JvQ2hhcnQ6IHRydWUsXG5cdFVTaGVsbDogdHJ1ZSxcblx0SW50ZW50QmFzZWROYXZpZ2F0aW9uOiB0cnVlLFxuXHRBcHBTdGF0ZTogdHJ1ZVxufTtcblxudHlwZSBNZXRhTW9kZWxBY3Rpb24gPSB7XG5cdCRraW5kOiBcIkFjdGlvblwiO1xuXHQkSXNCb3VuZDogYm9vbGVhbjtcblx0JEVudGl0eVNldFBhdGg6IHN0cmluZztcblx0JFBhcmFtZXRlcjoge1xuXHRcdCRUeXBlOiBzdHJpbmc7XG5cdFx0JE5hbWU6IHN0cmluZztcblx0XHQkTnVsbGFibGU/OiBib29sZWFuO1xuXHRcdCRNYXhMZW5ndGg/OiBudW1iZXI7XG5cdFx0JFByZWNpc2lvbj86IG51bWJlcjtcblx0XHQkU2NhbGU/OiBudW1iZXI7XG5cdFx0JGlzQ29sbGVjdGlvbj86IGJvb2xlYW47XG5cdH1bXTtcblx0JFJldHVyblR5cGU6IHtcblx0XHQkVHlwZTogc3RyaW5nO1xuXHR9O1xufTtcblxuZnVuY3Rpb24gcGFyc2VQcm9wZXJ0eVZhbHVlKFxuXHRhbm5vdGF0aW9uT2JqZWN0OiBhbnksXG5cdHByb3BlcnR5S2V5OiBzdHJpbmcsXG5cdGN1cnJlbnRUYXJnZXQ6IHN0cmluZyxcblx0YW5ub3RhdGlvbnNMaXN0czogUmVjb3JkPHN0cmluZywgQW5ub3RhdGlvbkxpc3Q+LFxuXHRvQ2FwYWJpbGl0aWVzOiBFbnZpcm9ubWVudENhcGFiaWxpdGllc1xuKTogYW55IHtcblx0bGV0IHZhbHVlO1xuXHRjb25zdCBjdXJyZW50UHJvcGVydHlUYXJnZXQ6IHN0cmluZyA9IGAke2N1cnJlbnRUYXJnZXR9LyR7cHJvcGVydHlLZXl9YDtcblx0Y29uc3QgdHlwZU9mQW5ub3RhdGlvbiA9IHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0O1xuXHRpZiAoYW5ub3RhdGlvbk9iamVjdCA9PT0gbnVsbCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIk51bGxcIiwgTnVsbDogbnVsbCB9O1xuXHR9IGVsc2UgaWYgKHR5cGVPZkFubm90YXRpb24gPT09IFwic3RyaW5nXCIpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJTdHJpbmdcIiwgU3RyaW5nOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAodHlwZU9mQW5ub3RhdGlvbiA9PT0gXCJib29sZWFuXCIpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJCb29sXCIsIEJvb2w6IGFubm90YXRpb25PYmplY3QgfTtcblx0fSBlbHNlIGlmICh0eXBlT2ZBbm5vdGF0aW9uID09PSBcIm51bWJlclwiKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiSW50XCIsIEludDogYW5ub3RhdGlvbk9iamVjdCB9O1xuXHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYW5ub3RhdGlvbk9iamVjdCkpIHtcblx0XHR2YWx1ZSA9IHtcblx0XHRcdHR5cGU6IFwiQ29sbGVjdGlvblwiLFxuXHRcdFx0Q29sbGVjdGlvbjogYW5ub3RhdGlvbk9iamVjdC5tYXAoKHN1YkFubm90YXRpb25PYmplY3QsIHN1YkFubm90YXRpb25PYmplY3RJbmRleCkgPT5cblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uT2JqZWN0KFxuXHRcdFx0XHRcdHN1YkFubm90YXRpb25PYmplY3QsXG5cdFx0XHRcdFx0YCR7Y3VycmVudFByb3BlcnR5VGFyZ2V0fS8ke3N1YkFubm90YXRpb25PYmplY3RJbmRleH1gLFxuXHRcdFx0XHRcdGFubm90YXRpb25zTGlzdHMsXG5cdFx0XHRcdFx0b0NhcGFiaWxpdGllc1xuXHRcdFx0XHQpXG5cdFx0XHQpXG5cdFx0fTtcblx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRQcm9wZXJ0eVBhdGhcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJQcm9wZXJ0eVBhdGhcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRQYXRoXCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiUGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5ub3RhdGlvblBhdGhcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJBbm5vdGF0aW9uUGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFR5cGVcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJSZWNvcmRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRJZlwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIklmXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkT3JcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJPclwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEFuZFwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkFuZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEVxXCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiRXFcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROZVwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIk5lXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTm90XCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiTm90XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkR3RcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJHdFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEdlXCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiR2VcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRMdFwiKSkge1xuXHRcdFx0XHQodmFsdWUuQ29sbGVjdGlvbiBhcyBhbnkpLnR5cGUgPSBcIkx0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTGVcIikpIHtcblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJMZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEFwcGx5XCIpKSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiQXBwbHlcIjtcblx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3RbMF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0Ly8gJFR5cGUgaXMgb3B0aW9uYWwuLi5cblx0XHRcdFx0KHZhbHVlLkNvbGxlY3Rpb24gYXMgYW55KS50eXBlID0gXCJSZWNvcmRcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCh2YWx1ZS5Db2xsZWN0aW9uIGFzIGFueSkudHlwZSA9IFwiU3RyaW5nXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIlBhdGhcIiwgUGF0aDogYW5ub3RhdGlvbk9iamVjdC4kUGF0aCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJERlY2ltYWwgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkRlY2ltYWxcIiwgRGVjaW1hbDogcGFyc2VGbG9hdChhbm5vdGF0aW9uT2JqZWN0LiREZWNpbWFsKSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFByb3BlcnR5UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiUHJvcGVydHlQYXRoXCIsIFByb3BlcnR5UGF0aDogYW5ub3RhdGlvbk9iamVjdC4kUHJvcGVydHlQYXRoIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTmF2aWdhdGlvblByb3BlcnR5UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7XG5cdFx0XHR0eXBlOiBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIixcblx0XHRcdE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IGFubm90YXRpb25PYmplY3QuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcblx0XHR9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJElmICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJJZlwiLCBJZjogYW5ub3RhdGlvbk9iamVjdC4kSWYgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRBbmQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkFuZFwiLCBBbmQ6IGFubm90YXRpb25PYmplY3QuJEFuZCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE9yICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJPclwiLCBPcjogYW5ub3RhdGlvbk9iamVjdC4kT3IgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiROb3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIk5vdFwiLCBOb3Q6IGFubm90YXRpb25PYmplY3QuJE5vdCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEVxICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJFcVwiLCBFcTogYW5ub3RhdGlvbk9iamVjdC4kRXEgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiROZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiTmVcIiwgTmU6IGFubm90YXRpb25PYmplY3QuJE5lIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkd0XCIsIEd0OiBhbm5vdGF0aW9uT2JqZWN0LiRHdCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEdlICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJHZVwiLCBHZTogYW5ub3RhdGlvbk9iamVjdC4kR2UgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRMdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiTHRcIiwgTHQ6IGFubm90YXRpb25PYmplY3QuJEx0IH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhbHVlID0geyB0eXBlOiBcIkxlXCIsIExlOiBhbm5vdGF0aW9uT2JqZWN0LiRMZSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFwcGx5ICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJBcHBseVwiLCBBcHBseTogYW5ub3RhdGlvbk9iamVjdC4kQXBwbHksIEZ1bmN0aW9uOiBhbm5vdGF0aW9uT2JqZWN0LiRGdW5jdGlvbiB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFubm90YXRpb25QYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJBbm5vdGF0aW9uUGF0aFwiLCBBbm5vdGF0aW9uUGF0aDogYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGggfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YWx1ZSA9IHtcblx0XHRcdHR5cGU6IFwiRW51bU1lbWJlclwiLFxuXHRcdFx0RW51bU1lbWJlcjogYCR7bWFwTmFtZVRvQWxpYXMoYW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlci5zcGxpdChcIi9cIilbMF0pfS8ke2Fubm90YXRpb25PYmplY3QuJEVudW1NZW1iZXIuc3BsaXQoXCIvXCIpWzFdfWBcblx0XHR9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFR5cGUpIHtcblx0XHR2YWx1ZSA9IHtcblx0XHRcdHR5cGU6IFwiUmVjb3JkXCIsXG5cdFx0XHRSZWNvcmQ6IHBhcnNlQW5ub3RhdGlvbk9iamVjdChhbm5vdGF0aW9uT2JqZWN0LCBjdXJyZW50VGFyZ2V0LCBhbm5vdGF0aW9uc0xpc3RzLCBvQ2FwYWJpbGl0aWVzKVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0dmFsdWUgPSB7XG5cdFx0XHR0eXBlOiBcIlJlY29yZFwiLFxuXHRcdFx0UmVjb3JkOiBwYXJzZUFubm90YXRpb25PYmplY3QoYW5ub3RhdGlvbk9iamVjdCwgY3VycmVudFRhcmdldCwgYW5ub3RhdGlvbnNMaXN0cywgb0NhcGFiaWxpdGllcylcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRuYW1lOiBwcm9wZXJ0eUtleSxcblx0XHR2YWx1ZVxuXHR9O1xufVxuZnVuY3Rpb24gbWFwTmFtZVRvQWxpYXMoYW5ub3RhdGlvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdGxldCBbcGF0aFBhcnQsIGFubm9QYXJ0XSA9IGFubm90YXRpb25OYW1lLnNwbGl0KFwiQFwiKTtcblx0aWYgKCFhbm5vUGFydCkge1xuXHRcdGFubm9QYXJ0ID0gcGF0aFBhcnQ7XG5cdFx0cGF0aFBhcnQgPSBcIlwiO1xuXHR9IGVsc2Uge1xuXHRcdHBhdGhQYXJ0ICs9IFwiQFwiO1xuXHR9XG5cdGNvbnN0IGxhc3REb3QgPSBhbm5vUGFydC5sYXN0SW5kZXhPZihcIi5cIik7XG5cdHJldHVybiBgJHtwYXRoUGFydCArIFZPQ0FCVUxBUllfQUxJQVNbYW5ub1BhcnQuc3Vic3RyKDAsIGxhc3REb3QpXX0uJHthbm5vUGFydC5zdWJzdHIobGFzdERvdCArIDEpfWA7XG59XG5mdW5jdGlvbiBwYXJzZUFubm90YXRpb25PYmplY3QoXG5cdGFubm90YXRpb25PYmplY3Q6IGFueSxcblx0Y3VycmVudE9iamVjdFRhcmdldDogc3RyaW5nLFxuXHRhbm5vdGF0aW9uc0xpc3RzOiBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uTGlzdD4sXG5cdG9DYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pOiBFeHByZXNzaW9uIHwgQW5ub3RhdGlvblJlY29yZCB8IEFubm90YXRpb24ge1xuXHRsZXQgcGFyc2VkQW5ub3RhdGlvbk9iamVjdDogYW55ID0ge307XG5cdGNvbnN0IHR5cGVPZk9iamVjdCA9IHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0O1xuXHRpZiAoYW5ub3RhdGlvbk9iamVjdCA9PT0gbnVsbCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiTnVsbFwiLCBOdWxsOiBudWxsIH07XG5cdH0gZWxzZSBpZiAodHlwZU9mT2JqZWN0ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJTdHJpbmdcIiwgU3RyaW5nOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAodHlwZU9mT2JqZWN0ID09PSBcImJvb2xlYW5cIikge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiQm9vbFwiLCBCb29sOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAodHlwZU9mT2JqZWN0ID09PSBcIm51bWJlclwiKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJJbnRcIiwgSW50OiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiQW5ub3RhdGlvblBhdGhcIiwgQW5ub3RhdGlvblBhdGg6IGFubm90YXRpb25PYmplY3QuJEFubm90YXRpb25QYXRoIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJQYXRoXCIsIFBhdGg6IGFubm90YXRpb25PYmplY3QuJFBhdGggfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiREZWNpbWFsICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkRlY2ltYWxcIiwgRGVjaW1hbDogcGFyc2VGbG9hdChhbm5vdGF0aW9uT2JqZWN0LiREZWNpbWFsKSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFByb3BlcnR5UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJQcm9wZXJ0eVBhdGhcIiwgUHJvcGVydHlQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRQcm9wZXJ0eVBhdGggfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRJZiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJJZlwiLCBJZjogYW5ub3RhdGlvbk9iamVjdC4kSWYgfTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRBbmQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiQW5kXCIsIEFuZDogYW5ub3RhdGlvbk9iamVjdC4kQW5kIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kT3IgIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiT3JcIiwgT3I6IGFubm90YXRpb25PYmplY3QuJE9yIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTm90ICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIk5vdFwiLCBOb3Q6IGFubm90YXRpb25PYmplY3QuJE5vdCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEVxICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkVxXCIsIEVxOiBhbm5vdGF0aW9uT2JqZWN0LiRFcSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5lICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIk5lXCIsIE5lOiBhbm5vdGF0aW9uT2JqZWN0LiROZSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEd0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkd0XCIsIEd0OiBhbm5vdGF0aW9uT2JqZWN0LiRHdCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEdlICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkdlXCIsIEdlOiBhbm5vdGF0aW9uT2JqZWN0LiRHZSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkx0XCIsIEx0OiBhbm5vdGF0aW9uT2JqZWN0LiRMdCB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJExlICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkxlXCIsIExlOiBhbm5vdGF0aW9uT2JqZWN0LiRMZSB9O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFwcGx5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkFwcGx5XCIsIEFwcGx5OiBhbm5vdGF0aW9uT2JqZWN0LiRBcHBseSwgRnVuY3Rpb246IGFubm90YXRpb25PYmplY3QuJEZ1bmN0aW9uIH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTmF2aWdhdGlvblByb3BlcnR5UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHtcblx0XHRcdHR5cGU6IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiLFxuXHRcdFx0TmF2aWdhdGlvblByb3BlcnR5UGF0aDogYW5ub3RhdGlvbk9iamVjdC4kTmF2aWdhdGlvblByb3BlcnR5UGF0aFxuXHRcdH07XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHtcblx0XHRcdHR5cGU6IFwiRW51bU1lbWJlclwiLFxuXHRcdFx0RW51bU1lbWJlcjogYCR7bWFwTmFtZVRvQWxpYXMoYW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlci5zcGxpdChcIi9cIilbMF0pfS8ke2Fubm90YXRpb25PYmplY3QuJEVudW1NZW1iZXIuc3BsaXQoXCIvXCIpWzFdfWBcblx0XHR9O1xuXHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYW5ub3RhdGlvbk9iamVjdCkpIHtcblx0XHRjb25zdCBwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbiA9IHBhcnNlZEFubm90YXRpb25PYmplY3Q7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbiA9IGFubm90YXRpb25PYmplY3QubWFwKChzdWJBbm5vdGF0aW9uT2JqZWN0LCBzdWJBbm5vdGF0aW9uSW5kZXgpID0+XG5cdFx0XHRwYXJzZUFubm90YXRpb25PYmplY3Qoc3ViQW5ub3RhdGlvbk9iamVjdCwgYCR7Y3VycmVudE9iamVjdFRhcmdldH0vJHtzdWJBbm5vdGF0aW9uSW5kZXh9YCwgYW5ub3RhdGlvbnNMaXN0cywgb0NhcGFiaWxpdGllcylcblx0XHQpO1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJQYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbm5vdGF0aW9uUGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkFubm90YXRpb25QYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkVHlwZVwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiSWZcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbmRcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJBbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRPclwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIk9yXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkRXFcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJFcVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5lXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiTmVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROb3RcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJOb3RcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRHdFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkd0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkR2VcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJHZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEx0XCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiTHRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRMZVwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkxlXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQXBwbHlcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJBcHBseVwiO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdFswXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJTdHJpbmdcIjtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGFubm90YXRpb25PYmplY3QuJFR5cGUpIHtcblx0XHRcdGNvbnN0IHR5cGVWYWx1ZSA9IGFubm90YXRpb25PYmplY3QuJFR5cGU7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnR5cGUgPSB0eXBlVmFsdWU7IC8vYCR7dHlwZUFsaWFzfS4ke3R5cGVUZXJtfWA7XG5cdFx0fVxuXHRcdGNvbnN0IHByb3BlcnR5VmFsdWVzOiBhbnkgPSBbXTtcblx0XHRPYmplY3Qua2V5cyhhbm5vdGF0aW9uT2JqZWN0KS5mb3JFYWNoKChwcm9wZXJ0eUtleSkgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkVHlwZVwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRJZlwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRBcHBseVwiICYmXG5cdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRBbmRcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkT3JcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkTmVcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkR3RcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkR2VcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkTHRcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkTGVcIiAmJlxuXHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkTm90XCIgJiZcblx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEVxXCIgJiZcblx0XHRcdFx0IXByb3BlcnR5S2V5LnN0YXJ0c1dpdGgoXCJAXCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0cHJvcGVydHlWYWx1ZXMucHVzaChcblx0XHRcdFx0XHRwYXJzZVByb3BlcnR5VmFsdWUoYW5ub3RhdGlvbk9iamVjdFtwcm9wZXJ0eUtleV0sIHByb3BlcnR5S2V5LCBjdXJyZW50T2JqZWN0VGFyZ2V0LCBhbm5vdGF0aW9uc0xpc3RzLCBvQ2FwYWJpbGl0aWVzKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eUtleS5zdGFydHNXaXRoKFwiQFwiKSkge1xuXHRcdFx0XHQvLyBBbm5vdGF0aW9uIG9mIGFubm90YXRpb25cblx0XHRcdFx0Y3JlYXRlQW5ub3RhdGlvbkxpc3RzKFxuXHRcdFx0XHRcdHsgW3Byb3BlcnR5S2V5XTogYW5ub3RhdGlvbk9iamVjdFtwcm9wZXJ0eUtleV0gfSxcblx0XHRcdFx0XHRjdXJyZW50T2JqZWN0VGFyZ2V0LFxuXHRcdFx0XHRcdGFubm90YXRpb25zTGlzdHMsXG5cdFx0XHRcdFx0b0NhcGFiaWxpdGllc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QucHJvcGVydHlWYWx1ZXMgPSBwcm9wZXJ0eVZhbHVlcztcblx0fVxuXHRyZXR1cm4gcGFyc2VkQW5ub3RhdGlvbk9iamVjdDtcbn1cbmZ1bmN0aW9uIGdldE9yQ3JlYXRlQW5ub3RhdGlvbkxpc3QodGFyZ2V0OiBzdHJpbmcsIGFubm90YXRpb25zTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0Pik6IEFubm90YXRpb25MaXN0IHtcblx0aWYgKCFhbm5vdGF0aW9uc0xpc3RzLmhhc093blByb3BlcnR5KHRhcmdldCkpIHtcblx0XHRhbm5vdGF0aW9uc0xpc3RzW3RhcmdldF0gPSB7XG5cdFx0XHR0YXJnZXQ6IHRhcmdldCxcblx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGFubm90YXRpb25zTGlzdHNbdGFyZ2V0XTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2hhcnRBbm5vdGF0aW9ucyhhbm5vdGF0aW9uT2JqZWN0OiBhbnkpIHtcblx0cmV0dXJuIGFubm90YXRpb25PYmplY3QuZmlsdGVyKChvUmVjb3JkOiBhbnkpID0+IHtcblx0XHRpZiAob1JlY29yZC5UYXJnZXQgJiYgb1JlY29yZC5UYXJnZXQuJEFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRyZXR1cm4gb1JlY29yZC5UYXJnZXQuJEFubm90YXRpb25QYXRoLmluZGV4T2YoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRcIikgPT09IC0xO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVJQk5Bbm5vdGF0aW9ucyhhbm5vdGF0aW9uT2JqZWN0OiBhbnkpIHtcblx0cmV0dXJuIGFubm90YXRpb25PYmplY3QuZmlsdGVyKChvUmVjb3JkOiBhbnkpID0+IHtcblx0XHRyZXR1cm4gb1JlY29yZC4kVHlwZSAhPT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVByZXNlbnRhdGlvblZhcmlhbnQoYW5ub3RhdGlvbk9iamVjdDogYW55KSB7XG5cdHJldHVybiBhbm5vdGF0aW9uT2JqZWN0LmZpbHRlcigob1JlY29yZDogYW55KSA9PiB7XG5cdFx0cmV0dXJuIG9SZWNvcmQuJEFubm90YXRpb25QYXRoICE9PSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQW5ub3RhdGlvbkxpc3RzKFxuXHRhbm5vdGF0aW9uT2JqZWN0czogYW55LFxuXHRhbm5vdGF0aW9uVGFyZ2V0OiBzdHJpbmcsXG5cdGFubm90YXRpb25MaXN0czogUmVjb3JkPHN0cmluZywgQW5ub3RhdGlvbkxpc3Q+LFxuXHRvQ2FwYWJpbGl0aWVzOiBFbnZpcm9ubWVudENhcGFiaWxpdGllc1xuKSB7XG5cdGlmIChPYmplY3Qua2V5cyhhbm5vdGF0aW9uT2JqZWN0cykubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGNvbnN0IG91dEFubm90YXRpb25PYmplY3QgPSBnZXRPckNyZWF0ZUFubm90YXRpb25MaXN0KGFubm90YXRpb25UYXJnZXQsIGFubm90YXRpb25MaXN0cyk7XG5cdGlmICghb0NhcGFiaWxpdGllcy5NaWNyb0NoYXJ0KSB7XG5cdFx0ZGVsZXRlIGFubm90YXRpb25PYmplY3RzW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCJdO1xuXHR9XG5cblx0Zm9yIChsZXQgYW5ub3RhdGlvbktleSBpbiBhbm5vdGF0aW9uT2JqZWN0cykge1xuXHRcdGxldCBhbm5vdGF0aW9uT2JqZWN0ID0gYW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV07XG5cdFx0c3dpdGNoIChhbm5vdGF0aW9uS2V5KSB7XG5cdFx0XHRjYXNlIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckZhY2V0c1wiOlxuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuTWljcm9DaGFydCkge1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3QgPSByZW1vdmVDaGFydEFubm90YXRpb25zKGFubm90YXRpb25PYmplY3QpO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSWRlbnRpZmljYXRpb25cIjpcblx0XHRcdFx0aWYgKCFvQ2FwYWJpbGl0aWVzLkludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3QgPSByZW1vdmVJQk5Bbm5vdGF0aW9ucyhhbm5vdGF0aW9uT2JqZWN0KTtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XSA9IGFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkxpbmVJdGVtXCI6XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5JbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0ID0gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdCk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5NaWNyb0NoYXJ0KSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdCA9IHJlbW92ZUNoYXJ0QW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdCk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwXCI6XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5JbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0LkRhdGEgPSByZW1vdmVJQk5Bbm5vdGF0aW9ucyhhbm5vdGF0aW9uT2JqZWN0LkRhdGEpO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuTWljcm9DaGFydCkge1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3QuRGF0YSA9IHJlbW92ZUNoYXJ0QW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdC5EYXRhKTtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XSA9IGFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlByZXNlbnRhdGlvblZhcmlhbnRcIjpcblx0XHRcdFx0aWYgKCFvQ2FwYWJpbGl0aWVzLkNoYXJ0ICYmIGFubm90YXRpb25PYmplY3QuVmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0LlZpc3VhbGl6YXRpb25zID0gaGFuZGxlUHJlc2VudGF0aW9uVmFyaWFudChhbm5vdGF0aW9uT2JqZWN0LlZpc3VhbGl6YXRpb25zKTtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XSA9IGFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRsZXQgY3VycmVudE91dEFubm90YXRpb25PYmplY3QgPSBvdXRBbm5vdGF0aW9uT2JqZWN0O1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGFubm90YXRpb24gb2YgYW5ub3RhdGlvblxuXHRcdGNvbnN0IGFubm90YXRpb25PZkFubm90YXRpb25TcGxpdCA9IGFubm90YXRpb25LZXkuc3BsaXQoXCJAXCIpO1xuXHRcdGlmIChhbm5vdGF0aW9uT2ZBbm5vdGF0aW9uU3BsaXQubGVuZ3RoID4gMikge1xuXHRcdFx0Y3VycmVudE91dEFubm90YXRpb25PYmplY3QgPSBnZXRPckNyZWF0ZUFubm90YXRpb25MaXN0KFxuXHRcdFx0XHRgJHthbm5vdGF0aW9uVGFyZ2V0fUAke2Fubm90YXRpb25PZkFubm90YXRpb25TcGxpdFsxXX1gLFxuXHRcdFx0XHRhbm5vdGF0aW9uTGlzdHNcblx0XHRcdCk7XG5cdFx0XHRhbm5vdGF0aW9uS2V5ID0gYW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0WzJdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhbm5vdGF0aW9uS2V5ID0gYW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0WzFdO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdCA9IGFubm90YXRpb25LZXkuc3BsaXQoXCIjXCIpO1xuXHRcdGNvbnN0IHF1YWxpZmllciA9IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdFsxXTtcblx0XHRhbm5vdGF0aW9uS2V5ID0gYW5ub3RhdGlvblF1YWxpZmllclNwbGl0WzBdO1xuXG5cdFx0Y29uc3QgcGFyc2VkQW5ub3RhdGlvbk9iamVjdDogYW55ID0ge1xuXHRcdFx0dGVybTogYCR7YW5ub3RhdGlvbktleX1gLFxuXHRcdFx0cXVhbGlmaWVyOiBxdWFsaWZpZXJcblx0XHR9O1xuXHRcdGxldCBjdXJyZW50QW5ub3RhdGlvblRhcmdldCA9IGAke2Fubm90YXRpb25UYXJnZXR9QCR7cGFyc2VkQW5ub3RhdGlvbk9iamVjdC50ZXJtfWA7XG5cdFx0aWYgKHF1YWxpZmllcikge1xuXHRcdFx0Y3VycmVudEFubm90YXRpb25UYXJnZXQgKz0gYCMke3F1YWxpZmllcn1gO1xuXHRcdH1cblx0XHRsZXQgaXNDb2xsZWN0aW9uID0gZmFsc2U7XG5cdFx0Y29uc3QgdHlwZW9mQW5ub3RhdGlvbiA9IHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0ID09PSBudWxsKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkJvb2xcIiwgQm9vbDogYW5ub3RhdGlvbk9iamVjdCB9O1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mQW5ub3RhdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJTdHJpbmdcIiwgU3RyaW5nOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdFx0fSBlbHNlIGlmICh0eXBlb2ZBbm5vdGF0aW9uID09PSBcImJvb2xlYW5cIikge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJCb29sXCIsIEJvb2w6IGFubm90YXRpb25PYmplY3QgfTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZkFubm90YXRpb24gPT09IFwibnVtYmVyXCIpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiSW50XCIsIEludDogYW5ub3RhdGlvbk9iamVjdCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kSWYgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJJZlwiLCBJZjogYW5ub3RhdGlvbk9iamVjdC4kSWYgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFuZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkFuZFwiLCBBbmQ6IGFubm90YXRpb25PYmplY3QuJEFuZCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kT3IgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJPclwiLCBPcjogYW5ub3RhdGlvbk9iamVjdC4kT3IgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5vdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIk5vdFwiLCBOb3Q6IGFubm90YXRpb25PYmplY3QuJE5vdCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRXEgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJFcVwiLCBFcTogYW5ub3RhdGlvbk9iamVjdC4kRXEgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5lICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiTmVcIiwgTmU6IGFubm90YXRpb25PYmplY3QuJE5lIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRHdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkd0XCIsIEd0OiBhbm5vdGF0aW9uT2JqZWN0LiRHdCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJHZVwiLCBHZTogYW5ub3RhdGlvbk9iamVjdC4kR2UgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiTHRcIiwgTHQ6IGFubm90YXRpb25PYmplY3QuJEx0IH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRMZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkxlXCIsIExlOiBhbm5vdGF0aW9uT2JqZWN0LiRMZSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQXBwbHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJBcHBseVwiLCBBcHBseTogYW5ub3RhdGlvbk9iamVjdC4kQXBwbHksIEZ1bmN0aW9uOiBhbm5vdGF0aW9uT2JqZWN0LiRGdW5jdGlvbiB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIlBhdGhcIiwgUGF0aDogYW5ub3RhdGlvbk9iamVjdC4kUGF0aCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHtcblx0XHRcdFx0dHlwZTogXCJBbm5vdGF0aW9uUGF0aFwiLFxuXHRcdFx0XHRBbm5vdGF0aW9uUGF0aDogYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGhcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiREZWNpbWFsICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiRGVjaW1hbFwiLCBEZWNpbWFsOiBwYXJzZUZsb2F0KGFubm90YXRpb25PYmplY3QuJERlY2ltYWwpIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7XG5cdFx0XHRcdHR5cGU6IFwiRW51bU1lbWJlclwiLFxuXHRcdFx0XHRFbnVtTWVtYmVyOiBgJHttYXBOYW1lVG9BbGlhcyhhbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyLnNwbGl0KFwiL1wiKVswXSl9LyR7YW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlci5zcGxpdChcIi9cIilbMV19YFxuXHRcdFx0fTtcblx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYW5ub3RhdGlvbk9iamVjdCkpIHtcblx0XHRcdGlzQ29sbGVjdGlvbiA9IHRydWU7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24gPSBhbm5vdGF0aW9uT2JqZWN0Lm1hcCgoc3ViQW5ub3RhdGlvbk9iamVjdCwgc3ViQW5ub3RhdGlvbkluZGV4KSA9PlxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25PYmplY3QoXG5cdFx0XHRcdFx0c3ViQW5ub3RhdGlvbk9iamVjdCxcblx0XHRcdFx0XHRgJHtjdXJyZW50QW5ub3RhdGlvblRhcmdldH0vJHtzdWJBbm5vdGF0aW9uSW5kZXh9YCxcblx0XHRcdFx0XHRhbm5vdGF0aW9uTGlzdHMsXG5cdFx0XHRcdFx0b0NhcGFiaWxpdGllc1xuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdFx0aWYgKGFubm90YXRpb25PYmplY3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRQcm9wZXJ0eVBhdGhcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiUHJvcGVydHlQYXRoXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRQYXRoXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIlBhdGhcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5ub3RhdGlvblBhdGhcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiQW5ub3RhdGlvblBhdGhcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFR5cGVcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiUmVjb3JkXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRJZlwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJJZlwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkT3JcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiT3JcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEVxXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkVxXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROZVwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJOZVwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTm90XCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIk5vdFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkR3RcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiR3RcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEdlXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkdlXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRMdFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJMdFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTGVcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiTGVcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEFuZFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJBbmRcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEFwcGx5XCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkFwcGx5XCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3RbMF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiUmVjb3JkXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIlN0cmluZ1wiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHJlY29yZDogQW5ub3RhdGlvblJlY29yZCA9IHtcblx0XHRcdFx0cHJvcGVydHlWYWx1ZXM6IFtdXG5cdFx0XHR9O1xuXHRcdFx0aWYgKGFubm90YXRpb25PYmplY3QuJFR5cGUpIHtcblx0XHRcdFx0Y29uc3QgdHlwZVZhbHVlID0gYW5ub3RhdGlvbk9iamVjdC4kVHlwZTtcblx0XHRcdFx0cmVjb3JkLnR5cGUgPSBgJHt0eXBlVmFsdWV9YDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWVzOiBhbnlbXSA9IFtdO1xuXHRcdFx0Zm9yIChjb25zdCBwcm9wZXJ0eUtleSBpbiBhbm5vdGF0aW9uT2JqZWN0KSB7XG5cdFx0XHRcdGlmIChwcm9wZXJ0eUtleSAhPT0gXCIkVHlwZVwiICYmICFwcm9wZXJ0eUtleS5zdGFydHNXaXRoKFwiQFwiKSkge1xuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzLnB1c2goXG5cdFx0XHRcdFx0XHRwYXJzZVByb3BlcnR5VmFsdWUoXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RbcHJvcGVydHlLZXldLFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUtleSxcblx0XHRcdFx0XHRcdFx0Y3VycmVudEFubm90YXRpb25UYXJnZXQsXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25MaXN0cyxcblx0XHRcdFx0XHRcdFx0b0NhcGFiaWxpdGllc1xuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHlLZXkuc3RhcnRzV2l0aChcIkBcIikpIHtcblx0XHRcdFx0XHQvLyBBbm5vdGF0aW9uIG9mIHJlY29yZFxuXHRcdFx0XHRcdGNyZWF0ZUFubm90YXRpb25MaXN0cyhcblx0XHRcdFx0XHRcdHsgW3Byb3BlcnR5S2V5XTogYW5ub3RhdGlvbk9iamVjdFtwcm9wZXJ0eUtleV0gfSxcblx0XHRcdFx0XHRcdGN1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0LFxuXHRcdFx0XHRcdFx0YW5ub3RhdGlvbkxpc3RzLFxuXHRcdFx0XHRcdFx0b0NhcGFiaWxpdGllc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJlY29yZC5wcm9wZXJ0eVZhbHVlcyA9IHByb3BlcnR5VmFsdWVzO1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5yZWNvcmQgPSByZWNvcmQ7XG5cdFx0fVxuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuaXNDb2xsZWN0aW9uID0gaXNDb2xsZWN0aW9uO1xuXHRcdGN1cnJlbnRPdXRBbm5vdGF0aW9uT2JqZWN0LmFubm90YXRpb25zLnB1c2gocGFyc2VkQW5ub3RhdGlvbk9iamVjdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJlcGFyZVByb3BlcnR5KHByb3BlcnR5RGVmaW5pdGlvbjogYW55LCBlbnRpdHlUeXBlT2JqZWN0OiBSYXdFbnRpdHlUeXBlIHwgUmF3Q29tcGxleFR5cGUsIHByb3BlcnR5TmFtZTogc3RyaW5nKTogUmF3UHJvcGVydHkge1xuXHRjb25zdCBwcm9wZXJ0eU9iamVjdDogUmF3UHJvcGVydHkgPSB7XG5cdFx0X3R5cGU6IFwiUHJvcGVydHlcIixcblx0XHRuYW1lOiBwcm9wZXJ0eU5hbWUsXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtlbnRpdHlUeXBlT2JqZWN0LmZ1bGx5UXVhbGlmaWVkTmFtZX0vJHtwcm9wZXJ0eU5hbWV9YCxcblx0XHR0eXBlOiBwcm9wZXJ0eURlZmluaXRpb24uJFR5cGUsXG5cdFx0bWF4TGVuZ3RoOiBwcm9wZXJ0eURlZmluaXRpb24uJE1heExlbmd0aCxcblx0XHRwcmVjaXNpb246IHByb3BlcnR5RGVmaW5pdGlvbi4kUHJlY2lzaW9uLFxuXHRcdHNjYWxlOiBwcm9wZXJ0eURlZmluaXRpb24uJFNjYWxlLFxuXHRcdG51bGxhYmxlOiBwcm9wZXJ0eURlZmluaXRpb24uJE51bGxhYmxlXG5cdH07XG5cdHJldHVybiBwcm9wZXJ0eU9iamVjdDtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0eShcblx0bmF2UHJvcGVydHlEZWZpbml0aW9uOiBhbnksXG5cdGVudGl0eVR5cGVPYmplY3Q6IFJhd0VudGl0eVR5cGUgfCBSYXdDb21wbGV4VHlwZSxcblx0bmF2UHJvcGVydHlOYW1lOiBzdHJpbmdcbik6IFJhd1Y0TmF2aWdhdGlvblByb3BlcnR5IHtcblx0bGV0IHJlZmVyZW50aWFsQ29uc3RyYWludDogUmVmZXJlbnRpYWxDb25zdHJhaW50W10gPSBbXTtcblx0aWYgKG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kUmVmZXJlbnRpYWxDb25zdHJhaW50KSB7XG5cdFx0cmVmZXJlbnRpYWxDb25zdHJhaW50ID0gT2JqZWN0LmtleXMobmF2UHJvcGVydHlEZWZpbml0aW9uLiRSZWZlcmVudGlhbENvbnN0cmFpbnQpLm1hcCgoc291cmNlUHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzb3VyY2VUeXBlTmFtZTogZW50aXR5VHlwZU9iamVjdC5uYW1lLFxuXHRcdFx0XHRzb3VyY2VQcm9wZXJ0eTogc291cmNlUHJvcGVydHlOYW1lLFxuXHRcdFx0XHR0YXJnZXRUeXBlTmFtZTogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRUeXBlLFxuXHRcdFx0XHR0YXJnZXRQcm9wZXJ0eTogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRSZWZlcmVudGlhbENvbnN0cmFpbnRbc291cmNlUHJvcGVydHlOYW1lXVxuXHRcdFx0fTtcblx0XHR9KTtcblx0fVxuXHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHk6IFJhd1Y0TmF2aWdhdGlvblByb3BlcnR5ID0ge1xuXHRcdF90eXBlOiBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiLFxuXHRcdG5hbWU6IG5hdlByb3BlcnR5TmFtZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2VudGl0eVR5cGVPYmplY3QuZnVsbHlRdWFsaWZpZWROYW1lfS8ke25hdlByb3BlcnR5TmFtZX1gLFxuXHRcdHBhcnRuZXI6IG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kUGFydG5lcixcblx0XHRpc0NvbGxlY3Rpb246IG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kaXNDb2xsZWN0aW9uID8gbmF2UHJvcGVydHlEZWZpbml0aW9uLiRpc0NvbGxlY3Rpb24gOiBmYWxzZSxcblx0XHRjb250YWluc1RhcmdldDogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRDb250YWluc1RhcmdldCxcblx0XHR0YXJnZXRUeXBlTmFtZTogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRUeXBlLFxuXHRcdHJlZmVyZW50aWFsQ29uc3RyYWludFxuXHR9O1xuXG5cdHJldHVybiBuYXZpZ2F0aW9uUHJvcGVydHk7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVFbnRpdHlTZXQoZW50aXR5U2V0RGVmaW5pdGlvbjogYW55LCBlbnRpdHlTZXROYW1lOiBzdHJpbmcsIGVudGl0eUNvbnRhaW5lck5hbWU6IHN0cmluZyk6IFJhd0VudGl0eVNldCB7XG5cdGNvbnN0IGVudGl0eVNldE9iamVjdDogUmF3RW50aXR5U2V0ID0ge1xuXHRcdF90eXBlOiBcIkVudGl0eVNldFwiLFxuXHRcdG5hbWU6IGVudGl0eVNldE5hbWUsXG5cdFx0bmF2aWdhdGlvblByb3BlcnR5QmluZGluZzoge30sXG5cdFx0ZW50aXR5VHlwZU5hbWU6IGVudGl0eVNldERlZmluaXRpb24uJFR5cGUsXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtlbnRpdHlDb250YWluZXJOYW1lfS8ke2VudGl0eVNldE5hbWV9YFxuXHR9O1xuXHRyZXR1cm4gZW50aXR5U2V0T2JqZWN0O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlU2luZ2xldG9uKHNpbmdsZXRvbkRlZmluaXRpb246IGFueSwgc2luZ2xldG9uTmFtZTogc3RyaW5nLCBlbnRpdHlDb250YWluZXJOYW1lOiBzdHJpbmcpOiBSYXdTaW5nbGV0b24ge1xuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIlNpbmdsZXRvblwiLFxuXHRcdG5hbWU6IHNpbmdsZXRvbk5hbWUsXG5cdFx0bmF2aWdhdGlvblByb3BlcnR5QmluZGluZzoge30sXG5cdFx0ZW50aXR5VHlwZU5hbWU6IHNpbmdsZXRvbkRlZmluaXRpb24uJFR5cGUsXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtlbnRpdHlDb250YWluZXJOYW1lfS8ke3NpbmdsZXRvbk5hbWV9YCxcblx0XHRudWxsYWJsZTogdHJ1ZVxuXHR9O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlVHlwZURlZmluaXRpb24odHlwZURlZmluaXRpb246IGFueSwgdHlwZU5hbWU6IHN0cmluZywgbmFtZXNwYWNlOiBzdHJpbmcpOiBSYXdUeXBlRGVmaW5pdGlvbiB7XG5cdGNvbnN0IHR5cGVPYmplY3Q6IFJhd1R5cGVEZWZpbml0aW9uID0ge1xuXHRcdF90eXBlOiBcIlR5cGVEZWZpbml0aW9uXCIsXG5cdFx0bmFtZTogdHlwZU5hbWUucmVwbGFjZShgJHtuYW1lc3BhY2V9LmAsIFwiXCIpLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogdHlwZU5hbWUsXG5cdFx0dW5kZXJseWluZ1R5cGU6IHR5cGVEZWZpbml0aW9uLiRVbmRlcmx5aW5nVHlwZVxuXHR9O1xuXHRyZXR1cm4gdHlwZU9iamVjdDtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUNvbXBsZXhUeXBlKGNvbXBsZXhUeXBlRGVmaW5pdGlvbjogYW55LCBjb21wbGV4VHlwZU5hbWU6IHN0cmluZywgbmFtZXNwYWNlOiBzdHJpbmcpOiBSYXdDb21wbGV4VHlwZSB7XG5cdGNvbnN0IGNvbXBsZXhUeXBlT2JqZWN0OiBSYXdDb21wbGV4VHlwZSA9IHtcblx0XHRfdHlwZTogXCJDb21wbGV4VHlwZVwiLFxuXHRcdG5hbWU6IGNvbXBsZXhUeXBlTmFtZS5yZXBsYWNlKGAke25hbWVzcGFjZX0uYCwgXCJcIiksXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBjb21wbGV4VHlwZU5hbWUsXG5cdFx0cHJvcGVydGllczogW10sXG5cdFx0bmF2aWdhdGlvblByb3BlcnRpZXM6IFtdXG5cdH07XG5cblx0Y29uc3QgY29tcGxleFR5cGVQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoY29tcGxleFR5cGVEZWZpbml0aW9uKVxuXHRcdC5maWx0ZXIoKHByb3BlcnR5TmFtZU9yTm90KSA9PiB7XG5cdFx0XHRpZiAocHJvcGVydHlOYW1lT3JOb3QgIT0gXCIkS2V5XCIgJiYgcHJvcGVydHlOYW1lT3JOb3QgIT0gXCIka2luZFwiKSB7XG5cdFx0XHRcdHJldHVybiBjb21wbGV4VHlwZURlZmluaXRpb25bcHJvcGVydHlOYW1lT3JOb3RdLiRraW5kID09PSBcIlByb3BlcnR5XCI7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuc29ydCgoYSwgYikgPT4gKGEgPiBiID8gMSA6IC0xKSlcblx0XHQubWFwKChwcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdHJldHVybiBwcmVwYXJlUHJvcGVydHkoY29tcGxleFR5cGVEZWZpbml0aW9uW3Byb3BlcnR5TmFtZV0sIGNvbXBsZXhUeXBlT2JqZWN0LCBwcm9wZXJ0eU5hbWUpO1xuXHRcdH0pO1xuXG5cdGNvbXBsZXhUeXBlT2JqZWN0LnByb3BlcnRpZXMgPSBjb21wbGV4VHlwZVByb3BlcnRpZXM7XG5cdGNvbnN0IGNvbXBsZXhUeXBlTmF2aWdhdGlvblByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhjb21wbGV4VHlwZURlZmluaXRpb24pXG5cdFx0LmZpbHRlcigocHJvcGVydHlOYW1lT3JOb3QpID0+IHtcblx0XHRcdGlmIChwcm9wZXJ0eU5hbWVPck5vdCAhPSBcIiRLZXlcIiAmJiBwcm9wZXJ0eU5hbWVPck5vdCAhPSBcIiRraW5kXCIpIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBsZXhUeXBlRGVmaW5pdGlvbltwcm9wZXJ0eU5hbWVPck5vdF0uJGtpbmQgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCI7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuc29ydCgoYSwgYikgPT4gKGEgPiBiID8gMSA6IC0xKSlcblx0XHQubWFwKChuYXZQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdHJldHVybiBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5KGNvbXBsZXhUeXBlRGVmaW5pdGlvbltuYXZQcm9wZXJ0eU5hbWVdLCBjb21wbGV4VHlwZU9iamVjdCwgbmF2UHJvcGVydHlOYW1lKTtcblx0XHR9KTtcblx0Y29tcGxleFR5cGVPYmplY3QubmF2aWdhdGlvblByb3BlcnRpZXMgPSBjb21wbGV4VHlwZU5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRyZXR1cm4gY29tcGxleFR5cGVPYmplY3Q7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVFbnRpdHlLZXlzKGVudGl0eVR5cGVEZWZpbml0aW9uOiBhbnksIG9NZXRhTW9kZWxEYXRhOiBhbnkpOiBhbnkge1xuXHRpZiAoIWVudGl0eVR5cGVEZWZpbml0aW9uLiRLZXkgJiYgZW50aXR5VHlwZURlZmluaXRpb24uJEJhc2VUeXBlKSB7XG5cdFx0cmV0dXJuIHByZXBhcmVFbnRpdHlLZXlzKG9NZXRhTW9kZWxEYXRhW2Ake2VudGl0eVR5cGVEZWZpbml0aW9uLiRCYXNlVHlwZX1gXSwgb01ldGFNb2RlbERhdGEpO1xuXHR9XG5cdHJldHVybiBlbnRpdHlUeXBlRGVmaW5pdGlvbi4kS2V5IHx8IFtdOyAvL2hhbmRsaW5nIG9mIGVudGl0eSB0eXBlcyB3aXRob3V0IGtleSBhcyB3ZWxsIGFzIGJhc2V0eXBlXG59XG5cbmZ1bmN0aW9uIHByZXBhcmVFbnRpdHlUeXBlKGVudGl0eVR5cGVEZWZpbml0aW9uOiBhbnksIGVudGl0eVR5cGVOYW1lOiBzdHJpbmcsIG5hbWVzcGFjZTogc3RyaW5nLCBtZXRhTW9kZWxEYXRhOiBhbnkpOiBSYXdFbnRpdHlUeXBlIHtcblx0Y29uc3QgZW50aXR5S2V5czogYW55ID0gcHJlcGFyZUVudGl0eUtleXMoZW50aXR5VHlwZURlZmluaXRpb24sIG1ldGFNb2RlbERhdGEpO1xuXG5cdGNvbnN0IGVudGl0eVR5cGVPYmplY3Q6IFJhd0VudGl0eVR5cGUgPSB7XG5cdFx0X3R5cGU6IFwiRW50aXR5VHlwZVwiLFxuXHRcdG5hbWU6IGVudGl0eVR5cGVOYW1lLnJlcGxhY2UoYCR7bmFtZXNwYWNlfS5gLCBcIlwiKSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGVudGl0eVR5cGVOYW1lLFxuXHRcdGtleXM6IFtdLFxuXHRcdGVudGl0eVByb3BlcnRpZXM6IFtdLFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBbXSxcblx0XHRhY3Rpb25zOiB7fVxuXHR9O1xuXG5cdGNvbnN0IGVudGl0eVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhlbnRpdHlUeXBlRGVmaW5pdGlvbilcblx0XHQuZmlsdGVyKChwcm9wZXJ0eU5hbWVPck5vdCkgPT4ge1xuXHRcdFx0aWYgKHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJEtleVwiICYmIHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJGtpbmRcIikge1xuXHRcdFx0XHRyZXR1cm4gZW50aXR5VHlwZURlZmluaXRpb25bcHJvcGVydHlOYW1lT3JOb3RdLiRraW5kID09PSBcIlByb3BlcnR5XCI7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQubWFwKChwcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdHJldHVybiBwcmVwYXJlUHJvcGVydHkoZW50aXR5VHlwZURlZmluaXRpb25bcHJvcGVydHlOYW1lXSwgZW50aXR5VHlwZU9iamVjdCwgcHJvcGVydHlOYW1lKTtcblx0XHR9KTtcblxuXHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGVudGl0eVR5cGVEZWZpbml0aW9uKVxuXHRcdC5maWx0ZXIoKHByb3BlcnR5TmFtZU9yTm90KSA9PiB7XG5cdFx0XHRpZiAocHJvcGVydHlOYW1lT3JOb3QgIT0gXCIkS2V5XCIgJiYgcHJvcGVydHlOYW1lT3JOb3QgIT0gXCIka2luZFwiKSB7XG5cdFx0XHRcdHJldHVybiBlbnRpdHlUeXBlRGVmaW5pdGlvbltwcm9wZXJ0eU5hbWVPck5vdF0uJGtpbmQgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCI7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQubWFwKChuYXZQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdHJldHVybiBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5KGVudGl0eVR5cGVEZWZpbml0aW9uW25hdlByb3BlcnR5TmFtZV0sIGVudGl0eVR5cGVPYmplY3QsIG5hdlByb3BlcnR5TmFtZSk7XG5cdFx0fSk7XG5cblx0ZW50aXR5VHlwZU9iamVjdC5rZXlzID0gZW50aXR5S2V5c1xuXHRcdC5tYXAoKGVudGl0eUtleTogc3RyaW5nKSA9PiBlbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5OiBSYXdQcm9wZXJ0eSkgPT4gcHJvcGVydHkubmFtZSA9PT0gZW50aXR5S2V5KSlcblx0XHQuZmlsdGVyKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHByb3BlcnR5ICE9PSB1bmRlZmluZWQpO1xuXHRlbnRpdHlUeXBlT2JqZWN0LmVudGl0eVByb3BlcnRpZXMgPSBlbnRpdHlQcm9wZXJ0aWVzO1xuXHRlbnRpdHlUeXBlT2JqZWN0Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gbmF2aWdhdGlvblByb3BlcnRpZXM7XG5cblx0cmV0dXJuIGVudGl0eVR5cGVPYmplY3Q7XG59XG5mdW5jdGlvbiBwcmVwYXJlQWN0aW9uKGFjdGlvbk5hbWU6IHN0cmluZywgYWN0aW9uUmF3RGF0YTogTWV0YU1vZGVsQWN0aW9uLCBuYW1lc3BhY2U6IHN0cmluZywgZW50aXR5Q29udGFpbmVyTmFtZTogc3RyaW5nKTogUmF3QWN0aW9uIHtcblx0bGV0IGFjdGlvbkVudGl0eVR5cGU6IHN0cmluZyA9IFwiXCI7XG5cdGxldCBhY3Rpb25GUU4gPSBgJHthY3Rpb25OYW1lfWA7XG5cdGNvbnN0IGFjdGlvblNob3J0TmFtZSA9IGFjdGlvbk5hbWUuc3Vic3RyKG5hbWVzcGFjZS5sZW5ndGggKyAxKTtcblx0aWYgKGFjdGlvblJhd0RhdGEuJElzQm91bmQpIHtcblx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyID0gYWN0aW9uUmF3RGF0YS4kUGFyYW1ldGVyWzBdO1xuXHRcdGFjdGlvbkVudGl0eVR5cGUgPSBiaW5kaW5nUGFyYW1ldGVyLiRUeXBlO1xuXHRcdGlmIChiaW5kaW5nUGFyYW1ldGVyLiRpc0NvbGxlY3Rpb24gPT09IHRydWUpIHtcblx0XHRcdGFjdGlvbkZRTiA9IGAke2FjdGlvbk5hbWV9KENvbGxlY3Rpb24oJHthY3Rpb25FbnRpdHlUeXBlfSkpYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YWN0aW9uRlFOID0gYCR7YWN0aW9uTmFtZX0oJHthY3Rpb25FbnRpdHlUeXBlfSlgO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRhY3Rpb25GUU4gPSBgJHtlbnRpdHlDb250YWluZXJOYW1lfS8ke2FjdGlvblNob3J0TmFtZX1gO1xuXHR9XG5cdGNvbnN0IHBhcmFtZXRlcnMgPSBhY3Rpb25SYXdEYXRhLiRQYXJhbWV0ZXIgfHwgW107XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiQWN0aW9uXCIsXG5cdFx0bmFtZTogYWN0aW9uU2hvcnROYW1lLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogYWN0aW9uRlFOLFxuXHRcdGlzQm91bmQ6IGFjdGlvblJhd0RhdGEuJElzQm91bmQsXG5cdFx0aXNGdW5jdGlvbjogZmFsc2UsXG5cdFx0c291cmNlVHlwZTogYWN0aW9uRW50aXR5VHlwZSxcblx0XHRyZXR1cm5UeXBlOiBhY3Rpb25SYXdEYXRhLiRSZXR1cm5UeXBlID8gYWN0aW9uUmF3RGF0YS4kUmV0dXJuVHlwZS4kVHlwZSA6IFwiXCIsXG5cdFx0cGFyYW1ldGVyczogcGFyYW1ldGVycy5tYXAoKHBhcmFtKSA9PiB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRfdHlwZTogXCJBY3Rpb25QYXJhbWV0ZXJcIixcblx0XHRcdFx0aXNFbnRpdHlTZXQ6IHBhcmFtLiRUeXBlID09PSBhY3Rpb25SYXdEYXRhLiRFbnRpdHlTZXRQYXRoLFxuXHRcdFx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2FjdGlvbkZRTn0vJHtwYXJhbS4kTmFtZX1gLFxuXHRcdFx0XHRuYW1lOiBwYXJhbS4kTmFtZSxcblx0XHRcdFx0dHlwZTogcGFyYW0uJFR5cGVcblx0XHRcdH07XG5cdFx0fSlcblx0fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlRW50aXR5VHlwZXMoXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRvQ2FwYWJpbGl0aWVzOiBFbnZpcm9ubWVudENhcGFiaWxpdGllcyA9IERlZmF1bHRFbnZpcm9ubWVudENhcGFiaWxpdGllc1xuKTogUmF3TWV0YWRhdGEge1xuXHRjb25zdCBvTWV0YU1vZGVsRGF0YSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiLyRcIik7XG5cdGNvbnN0IGFubm90YXRpb25MaXN0czogUmVjb3JkPHN0cmluZywgQW5ub3RhdGlvbkxpc3Q+ID0ge307XG5cdGNvbnN0IGVudGl0eVR5cGVzOiBSYXdFbnRpdHlUeXBlW10gPSBbXTtcblx0Y29uc3QgZW50aXR5U2V0czogUmF3RW50aXR5U2V0W10gPSBbXTtcblx0Y29uc3Qgc2luZ2xldG9uczogUmF3U2luZ2xldG9uW10gPSBbXTtcblx0Y29uc3QgY29tcGxleFR5cGVzOiBSYXdDb21wbGV4VHlwZVtdID0gW107XG5cdGNvbnN0IHR5cGVEZWZpbml0aW9uczogUmF3VHlwZURlZmluaXRpb25bXSA9IFtdO1xuXHRjb25zdCBlbnRpdHlDb250YWluZXJOYW1lID0gb01ldGFNb2RlbERhdGEuJEVudGl0eUNvbnRhaW5lcjtcblx0bGV0IG5hbWVzcGFjZSA9IFwiXCI7XG5cdGNvbnN0IHNjaGVtYUtleXMgPSBPYmplY3Qua2V5cyhvTWV0YU1vZGVsRGF0YSkuZmlsdGVyKChtZXRhbW9kZWxLZXkpID0+IG9NZXRhTW9kZWxEYXRhW21ldGFtb2RlbEtleV0uJGtpbmQgPT09IFwiU2NoZW1hXCIpO1xuXHRpZiAoc2NoZW1hS2V5cyAmJiBzY2hlbWFLZXlzLmxlbmd0aCA+IDApIHtcblx0XHRuYW1lc3BhY2UgPSBzY2hlbWFLZXlzWzBdLnN1YnN0cigwLCBzY2hlbWFLZXlzWzBdLmxlbmd0aCAtIDEpO1xuXHR9IGVsc2UgaWYgKGVudGl0eVR5cGVzICYmIGVudGl0eVR5cGVzLmxlbmd0aCkge1xuXHRcdG5hbWVzcGFjZSA9IGVudGl0eVR5cGVzWzBdLmZ1bGx5UXVhbGlmaWVkTmFtZS5yZXBsYWNlKGVudGl0eVR5cGVzWzBdLm5hbWUsIFwiXCIpO1xuXHRcdG5hbWVzcGFjZSA9IG5hbWVzcGFjZS5zdWJzdHIoMCwgbmFtZXNwYWNlLmxlbmd0aCAtIDEpO1xuXHR9XG5cdE9iamVjdC5rZXlzKG9NZXRhTW9kZWxEYXRhKS5mb3JFYWNoKChzT2JqZWN0TmFtZSkgPT4ge1xuXHRcdGlmIChzT2JqZWN0TmFtZSAhPT0gXCIka2luZFwiKSB7XG5cdFx0XHRzd2l0Y2ggKG9NZXRhTW9kZWxEYXRhW3NPYmplY3ROYW1lXS4ka2luZCkge1xuXHRcdFx0XHRjYXNlIFwiRW50aXR5VHlwZVwiOlxuXHRcdFx0XHRcdGNvbnN0IGVudGl0eVR5cGUgPSBwcmVwYXJlRW50aXR5VHlwZShvTWV0YU1vZGVsRGF0YVtzT2JqZWN0TmFtZV0sIHNPYmplY3ROYW1lLCBuYW1lc3BhY2UsIG9NZXRhTW9kZWxEYXRhKTtcblx0XHRcdFx0XHQvLyBDaGVjayBpZiB0aGVyZSBhcmUgZmlsdGVyIGZhY2V0cyBkZWZpbmVkIGZvciB0aGUgZW50aXR5VHlwZSBhbmQgaWYgeWVzLCBjaGVjayBpZiBhbGwgb2YgdGhlbSBoYXZlIGFuIElEXG5cdFx0XHRcdFx0Ly8gVGhlIElEIGlzIG9wdGlvbmFsLCBidXQgaXQgaXMgaW50ZXJuYWxseSB0YWtlbiBmb3IgZ3JvdXBpbmcgZmlsdGVyIGZpZWxkcyBhbmQgaWYgaXQncyBub3QgcHJlc2VudFxuXHRcdFx0XHRcdC8vIGEgZmFsbGJhY2sgSUQgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkIGhlcmUuXG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0b01ldGFNb2RlbERhdGEuJEFubm90YXRpb25zW2VudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lXSAmJlxuXHRcdFx0XHRcdFx0b01ldGFNb2RlbERhdGEuJEFubm90YXRpb25zW2VudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lXVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWx0ZXJGYWNldHNcIl1cblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9NZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV1bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmlsdGVyRmFjZXRzXCJdLmZvckVhY2goXG5cdFx0XHRcdFx0XHRcdChmaWx0ZXJGYWNldEFubm90YXRpb246IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGZpbHRlckZhY2V0QW5ub3RhdGlvbi5JRCA9IGZpbHRlckZhY2V0QW5ub3RhdGlvbi5JRCB8fCBnZW5lcmF0ZShbeyBGYWNldDogZmlsdGVyRmFjZXRBbm5vdGF0aW9uIH1dKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZvckVhY2goKGVudGl0eVByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIW9NZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdG9NZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdID0ge307XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdCFvTWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnNbZW50aXR5UHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lXVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGREZWZhdWx0XCJdXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0b01ldGFNb2RlbERhdGEuJEFubm90YXRpb25zW2VudGl0eVByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZV1bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdFwiXSA9XG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0JFR5cGU6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRWYWx1ZTogeyAkUGF0aDogZW50aXR5UHJvcGVydHkubmFtZSB9XG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRlbnRpdHlUeXBlcy5wdXNoKGVudGl0eVR5cGUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiQ29tcGxleFR5cGVcIjpcblx0XHRcdFx0XHRjb25zdCBjb21wbGV4VHlwZSA9IHByZXBhcmVDb21wbGV4VHlwZShvTWV0YU1vZGVsRGF0YVtzT2JqZWN0TmFtZV0sIHNPYmplY3ROYW1lLCBuYW1lc3BhY2UpO1xuXHRcdFx0XHRcdGNvbXBsZXhUeXBlcy5wdXNoKGNvbXBsZXhUeXBlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIlR5cGVEZWZpbml0aW9uXCI6XG5cdFx0XHRcdFx0Y29uc3QgdHlwZURlZmluaXRpb24gPSBwcmVwYXJlVHlwZURlZmluaXRpb24ob01ldGFNb2RlbERhdGFbc09iamVjdE5hbWVdLCBzT2JqZWN0TmFtZSwgbmFtZXNwYWNlKTtcblx0XHRcdFx0XHR0eXBlRGVmaW5pdGlvbnMucHVzaCh0eXBlRGVmaW5pdGlvbik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBvRW50aXR5Q29udGFpbmVyID0gb01ldGFNb2RlbERhdGFbZW50aXR5Q29udGFpbmVyTmFtZV07XG5cdE9iamVjdC5rZXlzKG9FbnRpdHlDb250YWluZXIpLmZvckVhY2goKHNPYmplY3ROYW1lKSA9PiB7XG5cdFx0aWYgKHNPYmplY3ROYW1lICE9PSBcIiRraW5kXCIpIHtcblx0XHRcdHN3aXRjaCAob0VudGl0eUNvbnRhaW5lcltzT2JqZWN0TmFtZV0uJGtpbmQpIHtcblx0XHRcdFx0Y2FzZSBcIkVudGl0eVNldFwiOlxuXHRcdFx0XHRcdGNvbnN0IGVudGl0eVNldCA9IHByZXBhcmVFbnRpdHlTZXQob0VudGl0eUNvbnRhaW5lcltzT2JqZWN0TmFtZV0sIHNPYmplY3ROYW1lLCBlbnRpdHlDb250YWluZXJOYW1lKTtcblx0XHRcdFx0XHRlbnRpdHlTZXRzLnB1c2goZW50aXR5U2V0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIlNpbmdsZXRvblwiOlxuXHRcdFx0XHRcdGNvbnN0IHNpbmdsZXRvbiA9IHByZXBhcmVTaW5nbGV0b24ob0VudGl0eUNvbnRhaW5lcltzT2JqZWN0TmFtZV0sIHNPYmplY3ROYW1lLCBlbnRpdHlDb250YWluZXJOYW1lKTtcblx0XHRcdFx0XHRzaW5nbGV0b25zLnB1c2goc2luZ2xldG9uKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGxldCBlbnRpdHlDb250YWluZXI6IFJhd0VudGl0eUNvbnRhaW5lciA9IHtcblx0XHRfdHlwZTogXCJFbnRpdHlDb250YWluZXJcIixcblx0XHRuYW1lOiBcIlwiLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogXCJcIlxuXHR9O1xuXHRpZiAoZW50aXR5Q29udGFpbmVyTmFtZSkge1xuXHRcdGVudGl0eUNvbnRhaW5lciA9IHtcblx0XHRcdF90eXBlOiBcIkVudGl0eUNvbnRhaW5lclwiLFxuXHRcdFx0bmFtZTogZW50aXR5Q29udGFpbmVyTmFtZS5yZXBsYWNlKGAke25hbWVzcGFjZX0uYCwgXCJcIiksXG5cdFx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGVudGl0eUNvbnRhaW5lck5hbWVcblx0XHR9O1xuXHR9XG5cdGVudGl0eVNldHMuZm9yRWFjaCgoZW50aXR5U2V0KSA9PiB7XG5cdFx0Y29uc3QgbmF2UHJvcGVydHlCaW5kaW5ncyA9IG9FbnRpdHlDb250YWluZXJbZW50aXR5U2V0Lm5hbWVdLiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nO1xuXHRcdGlmIChuYXZQcm9wZXJ0eUJpbmRpbmdzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyhuYXZQcm9wZXJ0eUJpbmRpbmdzKS5mb3JFYWNoKChuYXZQcm9wTmFtZSkgPT4ge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRFbnRpdHlTZXQgPSBlbnRpdHlTZXRzLmZpbmQoKGVudGl0eVNldE5hbWUpID0+IGVudGl0eVNldE5hbWUubmFtZSA9PT0gbmF2UHJvcGVydHlCaW5kaW5nc1tuYXZQcm9wTmFtZV0pO1xuXHRcdFx0XHRpZiAodGFyZ2V0RW50aXR5U2V0KSB7XG5cdFx0XHRcdFx0ZW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbbmF2UHJvcE5hbWVdID0gdGFyZ2V0RW50aXR5U2V0O1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IGFjdGlvbnM6IFJhd0FjdGlvbltdID0gT2JqZWN0LmtleXMob01ldGFNb2RlbERhdGEpXG5cdFx0LmZpbHRlcigoa2V5KSA9PiB7XG5cdFx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShvTWV0YU1vZGVsRGF0YVtrZXldKSAmJiBvTWV0YU1vZGVsRGF0YVtrZXldLmxlbmd0aCA+IDAgJiYgb01ldGFNb2RlbERhdGFba2V5XVswXS4ka2luZCA9PT0gXCJBY3Rpb25cIjtcblx0XHR9KVxuXHRcdC5yZWR1Y2UoKG91dEFjdGlvbnM6IFJhd0FjdGlvbltdLCBhY3Rpb25OYW1lKSA9PiB7XG5cdFx0XHRjb25zdCBpbm5lckFjdGlvbnMgPSBvTWV0YU1vZGVsRGF0YVthY3Rpb25OYW1lXTtcblx0XHRcdGlubmVyQWN0aW9ucy5mb3JFYWNoKChhY3Rpb246IE1ldGFNb2RlbEFjdGlvbikgPT4ge1xuXHRcdFx0XHRvdXRBY3Rpb25zLnB1c2gocHJlcGFyZUFjdGlvbihhY3Rpb25OYW1lLCBhY3Rpb24sIG5hbWVzcGFjZSwgZW50aXR5Q29udGFpbmVyTmFtZSkpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gb3V0QWN0aW9ucztcblx0XHR9LCBbXSk7XG5cblx0Zm9yIChjb25zdCB0YXJnZXQgaW4gb01ldGFNb2RlbERhdGEuJEFubm90YXRpb25zKSB7XG5cdFx0Y3JlYXRlQW5ub3RhdGlvbkxpc3RzKG9NZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1t0YXJnZXRdLCB0YXJnZXQsIGFubm90YXRpb25MaXN0cywgb0NhcGFiaWxpdGllcyk7XG5cdH1cblxuXHQvLyBTb3J0IGJ5IHRhcmdldCBsZW5ndGhcblx0Y29uc3Qgb3V0QW5ub3RhdGlvbkxpc3RzID0gT2JqZWN0LmtleXMoYW5ub3RhdGlvbkxpc3RzKVxuXHRcdC5zb3J0KChhLCBiKSA9PiAoYS5sZW5ndGggPj0gYi5sZW5ndGggPyAxIDogLTEpKVxuXHRcdC5tYXAoKHNBbm5vdGF0aW9uTmFtZSkgPT4gYW5ub3RhdGlvbkxpc3RzW3NBbm5vdGF0aW9uTmFtZV0pO1xuXHRjb25zdCByZWZlcmVuY2VzOiBSZWZlcmVuY2VbXSA9IFtdO1xuXHRyZXR1cm4ge1xuXHRcdGlkZW50aWZpY2F0aW9uOiBcIm1ldGFtb2RlbFJlc3VsdFwiLFxuXHRcdHZlcnNpb246IFwiNC4wXCIsXG5cdFx0c2NoZW1hOiB7XG5cdFx0XHRlbnRpdHlDb250YWluZXIsXG5cdFx0XHRlbnRpdHlTZXRzLFxuXHRcdFx0ZW50aXR5VHlwZXMsXG5cdFx0XHRjb21wbGV4VHlwZXMsXG5cdFx0XHR0eXBlRGVmaW5pdGlvbnMsXG5cdFx0XHRzaW5nbGV0b25zLFxuXHRcdFx0YXNzb2NpYXRpb25zOiBbXSxcblx0XHRcdGFzc29jaWF0aW9uU2V0czogW10sXG5cdFx0XHRhY3Rpb25zLFxuXHRcdFx0bmFtZXNwYWNlLFxuXHRcdFx0YW5ub3RhdGlvbnM6IHtcblx0XHRcdFx0XCJtZXRhbW9kZWxSZXN1bHRcIjogb3V0QW5ub3RhdGlvbkxpc3RzXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRyZWZlcmVuY2VzOiByZWZlcmVuY2VzXG5cdH07XG59XG5cbmNvbnN0IG1NZXRhTW9kZWxNYXA6IFJlY29yZDxzdHJpbmcsIENvbnZlcnRlZE1ldGFkYXRhPiA9IHt9O1xuXG4vKipcbiAqIENvbnZlcnQgdGhlIE9EYXRhTWV0YU1vZGVsIGludG8gYW5vdGhlciBmb3JtYXQgdGhhdCBhbGxvdyBmb3IgZWFzeSBtYW5pcHVsYXRpb24gb2YgdGhlIGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSBvTWV0YU1vZGVsIFRoZSBPRGF0YU1ldGFNb2RlbFxuICogQHBhcmFtIG9DYXBhYmlsaXRpZXMgVGhlIGN1cnJlbnQgY2FwYWJpbGl0aWVzXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyBvYmplY3QtbGlrZSBhbm5vdGF0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGVzKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBvQ2FwYWJpbGl0aWVzPzogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMpOiBDb252ZXJ0ZWRNZXRhZGF0YSB7XG5cdGNvbnN0IHNNZXRhTW9kZWxJZCA9IChvTWV0YU1vZGVsIGFzIGFueSkuaWQ7XG5cdGlmICghbU1ldGFNb2RlbE1hcC5oYXNPd25Qcm9wZXJ0eShzTWV0YU1vZGVsSWQpKSB7XG5cdFx0Y29uc3QgcGFyc2VkT3V0cHV0ID0gcHJlcGFyZUVudGl0eVR5cGVzKG9NZXRhTW9kZWwsIG9DYXBhYmlsaXRpZXMpO1xuXHRcdHRyeSB7XG5cdFx0XHRtTWV0YU1vZGVsTWFwW3NNZXRhTW9kZWxJZF0gPSBBbm5vdGF0aW9uQ29udmVydGVyLmNvbnZlcnQocGFyc2VkT3V0cHV0KTtcblx0XHR9IGNhdGNoIChvRXJyb3IpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihvRXJyb3IgYXMgYW55KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1NZXRhTW9kZWxNYXBbc01ldGFNb2RlbElkXSBhcyBhbnkgYXMgQ29udmVydGVkTWV0YWRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb252ZXJ0ZWRUeXBlcyhvQ29udGV4dDogQ29udGV4dCkge1xuXHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKSBhcyB1bmtub3duIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRpZiAoIW9NZXRhTW9kZWwuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTWV0YU1vZGVsXCIpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYSBPRGF0YU1ldGFNb2RlbFwiKTtcblx0fVxuXHRyZXR1cm4gY29udmVydFR5cGVzKG9NZXRhTW9kZWwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlTW9kZWxDYWNoZURhdGEob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpIHtcblx0ZGVsZXRlIG1NZXRhTW9kZWxNYXBbKG9NZXRhTW9kZWwgYXMgYW55KS5pZF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChvTWV0YU1vZGVsQ29udGV4dDogQ29udGV4dCwgYkluY2x1ZGVWaXNpdGVkT2JqZWN0czogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcblx0Y29uc3Qgb0NvbnZlcnRlZE1ldGFkYXRhID0gY29udmVydFR5cGVzKG9NZXRhTW9kZWxDb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwpO1xuXHRjb25zdCBzUGF0aCA9IG9NZXRhTW9kZWxDb250ZXh0LmdldFBhdGgoKTtcblxuXHRjb25zdCBhUGF0aFNwbGl0ID0gc1BhdGguc3BsaXQoXCIvXCIpO1xuXHRsZXQgdGFyZ2V0RW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gPSBvQ29udmVydGVkTWV0YWRhdGEuZW50aXR5U2V0cy5maW5kKFxuXHRcdChlbnRpdHlTZXQpID0+IGVudGl0eVNldC5uYW1lID09PSBhUGF0aFNwbGl0WzFdXG5cdCkgYXMgRW50aXR5U2V0O1xuXHRpZiAoIXRhcmdldEVudGl0eVNldCkge1xuXHRcdHRhcmdldEVudGl0eVNldCA9IG9Db252ZXJ0ZWRNZXRhZGF0YS5zaW5nbGV0b25zLmZpbmQoKHNpbmdsZXRvbikgPT4gc2luZ2xldG9uLm5hbWUgPT09IGFQYXRoU3BsaXRbMV0pIGFzIFNpbmdsZXRvbjtcblx0fVxuXHRsZXQgcmVsYXRpdmVQYXRoID0gYVBhdGhTcGxpdC5zbGljZSgyKS5qb2luKFwiL1wiKTtcblxuXHRjb25zdCBsb2NhbE9iamVjdHM6IGFueVtdID0gW3RhcmdldEVudGl0eVNldF07XG5cdHdoaWxlIChyZWxhdGl2ZVBhdGggJiYgcmVsYXRpdmVQYXRoLmxlbmd0aCA+IDAgJiYgcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiKSkge1xuXHRcdGxldCByZWxhdGl2ZVNwbGl0ID0gcmVsYXRpdmVQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRsZXQgaWR4ID0gMDtcblx0XHRsZXQgY3VycmVudEVudGl0eVNldCwgc05hdlByb3BUb0NoZWNrO1xuXG5cdFx0cmVsYXRpdmVTcGxpdCA9IHJlbGF0aXZlU3BsaXQuc2xpY2UoMSk7IC8vIFJlbW92aW5nIFwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIlxuXHRcdHdoaWxlICghY3VycmVudEVudGl0eVNldCAmJiByZWxhdGl2ZVNwbGl0Lmxlbmd0aCA+IGlkeCkge1xuXHRcdFx0aWYgKHJlbGF0aXZlU3BsaXRbaWR4XSAhPT0gXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiKSB7XG5cdFx0XHRcdC8vIEZpbmRpbmcgdGhlIGNvcnJlY3QgZW50aXR5U2V0IGZvciB0aGUgbmF2aWdhaXRvbiBwcm9wZXJ0eSBiaW5kaW5nIGV4YW1wbGU6IFwiU2V0L19TYWxlc09yZGVyXCJcblx0XHRcdFx0c05hdlByb3BUb0NoZWNrID0gcmVsYXRpdmVTcGxpdFxuXHRcdFx0XHRcdC5zbGljZSgwLCBpZHggKyAxKVxuXHRcdFx0XHRcdC5qb2luKFwiL1wiKVxuXHRcdFx0XHRcdC5yZXBsYWNlKFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCIsIFwiXCIpO1xuXHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gdGFyZ2V0RW50aXR5U2V0ICYmIHRhcmdldEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW3NOYXZQcm9wVG9DaGVja107XG5cdFx0XHR9XG5cdFx0XHRpZHgrKztcblx0XHR9XG5cdFx0aWYgKCFjdXJyZW50RW50aXR5U2V0KSB7XG5cdFx0XHQvLyBGYWxsIGJhY2sgdG8gU2luZ2xlIG5hdiBwcm9wIGlmIGVudGl0eVNldCBpcyBub3QgZm91bmQuXG5cdFx0XHRzTmF2UHJvcFRvQ2hlY2sgPSByZWxhdGl2ZVNwbGl0WzBdO1xuXHRcdH1cblx0XHRjb25zdCBhTmF2UHJvcHMgPSBzTmF2UHJvcFRvQ2hlY2s/LnNwbGl0KFwiL1wiKSB8fCBbXTtcblx0XHRsZXQgdGFyZ2V0RW50aXR5VHlwZSA9IHRhcmdldEVudGl0eVNldCAmJiB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0XHRmb3IgKGNvbnN0IHNOYXZQcm9wIG9mIGFOYXZQcm9wcykge1xuXHRcdFx0Ly8gUHVzaGluZyBhbGwgbmF2IHByb3BzIHRvIHRoZSB2aXNpdGVkIG9iamVjdHMuIGV4YW1wbGU6IFwiU2V0XCIsIFwiX1NhbGVzT3JkZXJcIiBmb3IgXCJTZXQvX1NhbGVzT3JkZXJcIihpbiBOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nKVxuXHRcdFx0Y29uc3QgdGFyZ2V0TmF2UHJvcCA9IHRhcmdldEVudGl0eVR5cGUgJiYgdGFyZ2V0RW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kKChuYXZQcm9wKSA9PiBuYXZQcm9wLm5hbWUgPT09IHNOYXZQcm9wKTtcblx0XHRcdGlmICh0YXJnZXROYXZQcm9wKSB7XG5cdFx0XHRcdGxvY2FsT2JqZWN0cy5wdXNoKHRhcmdldE5hdlByb3ApO1xuXHRcdFx0XHR0YXJnZXRFbnRpdHlUeXBlID0gdGFyZ2V0TmF2UHJvcC50YXJnZXRUeXBlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRhcmdldEVudGl0eVNldCA9XG5cdFx0XHQodGFyZ2V0RW50aXR5U2V0ICYmIGN1cnJlbnRFbnRpdHlTZXQpIHx8ICh0YXJnZXRFbnRpdHlTZXQgJiYgdGFyZ2V0RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbcmVsYXRpdmVTcGxpdFswXV0pO1xuXHRcdGlmICh0YXJnZXRFbnRpdHlTZXQpIHtcblx0XHRcdC8vIFB1c2hpbmcgdGhlIHRhcmdldCBlbnRpdHlTZXQgdG8gdmlzaXRlZCBvYmplY3RzXG5cdFx0XHRsb2NhbE9iamVjdHMucHVzaCh0YXJnZXRFbnRpdHlTZXQpO1xuXHRcdH1cblx0XHQvLyBSZS1jYWxjdWxhdGluZyB0aGUgcmVsYXRpdmUgcGF0aFxuXHRcdC8vIEFzIGVhY2ggbmF2aWdhdGlvbiBuYW1lIGlzIGVuY2xvc2VkIGJldHdlZW4gJyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nJyBhbmQgJyQnICh0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgZW50aXR5c2V0IGVhc2lseSBpbiB0aGUgbWV0YW1vZGVsKVxuXHRcdC8vIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBjbG9zaW5nICckJyB0byBiZSBhYmxlIHRvIHN3aXRjaCB0byB0aGUgbmV4dCBuYXZpZ2F0aW9uXG5cdFx0cmVsYXRpdmVTcGxpdCA9IHJlbGF0aXZlU3BsaXQuc2xpY2UoYU5hdlByb3BzLmxlbmd0aCB8fCAxKTtcblx0XHRpZiAocmVsYXRpdmVTcGxpdC5sZW5ndGggJiYgcmVsYXRpdmVTcGxpdFswXSA9PT0gXCIkXCIpIHtcblx0XHRcdHJlbGF0aXZlU3BsaXQuc2hpZnQoKTtcblx0XHR9XG5cdFx0cmVsYXRpdmVQYXRoID0gcmVsYXRpdmVTcGxpdC5qb2luKFwiL1wiKTtcblx0fVxuXHRpZiAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoXCIkVHlwZVwiKSkge1xuXHRcdC8vIFdlJ3JlIGFueXdheSBnb2luZyB0byBsb29rIG9uIHRoZSBlbnRpdHlUeXBlLi4uXG5cdFx0cmVsYXRpdmVQYXRoID0gYVBhdGhTcGxpdC5zbGljZSgzKS5qb2luKFwiL1wiKTtcblx0fVxuXHRpZiAodGFyZ2V0RW50aXR5U2V0ICYmIHJlbGF0aXZlUGF0aC5sZW5ndGgpIHtcblx0XHRjb25zdCBvVGFyZ2V0ID0gdGFyZ2V0RW50aXR5U2V0LmVudGl0eVR5cGUucmVzb2x2ZVBhdGgocmVsYXRpdmVQYXRoLCBiSW5jbHVkZVZpc2l0ZWRPYmplY3RzKTtcblx0XHRpZiAob1RhcmdldCkge1xuXHRcdFx0aWYgKGJJbmNsdWRlVmlzaXRlZE9iamVjdHMpIHtcblx0XHRcdFx0b1RhcmdldC52aXNpdGVkT2JqZWN0cyA9IGxvY2FsT2JqZWN0cy5jb25jYXQob1RhcmdldC52aXNpdGVkT2JqZWN0cyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZSAmJiB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZS5hY3Rpb25zKSB7XG5cdFx0XHQvLyBpZiB0YXJnZXQgaXMgYW4gYWN0aW9uIG9yIGFuIGFjdGlvbiBwYXJhbWV0ZXJcblx0XHRcdGNvbnN0IGFjdGlvbnMgPSB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZSAmJiB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZS5hY3Rpb25zO1xuXHRcdFx0Y29uc3QgcmVsYXRpdmVTcGxpdCA9IHJlbGF0aXZlUGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRpZiAoYWN0aW9uc1tyZWxhdGl2ZVNwbGl0WzBdXSkge1xuXHRcdFx0XHRjb25zdCBhY3Rpb24gPSBhY3Rpb25zW3JlbGF0aXZlU3BsaXRbMF1dO1xuXHRcdFx0XHRpZiAocmVsYXRpdmVTcGxpdFsxXSAmJiBhY3Rpb24ucGFyYW1ldGVycykge1xuXHRcdFx0XHRcdGNvbnN0IHBhcmFtZXRlck5hbWUgPSByZWxhdGl2ZVNwbGl0WzFdO1xuXHRcdFx0XHRcdHJldHVybiBhY3Rpb24ucGFyYW1ldGVycy5maW5kKChwYXJhbWV0ZXIpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBwYXJhbWV0ZXIuZnVsbHlRdWFsaWZpZWROYW1lLmVuZHNXaXRoKGAvJHtwYXJhbWV0ZXJOYW1lfWApO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJlbGF0aXZlUGF0aC5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvVGFyZ2V0O1xuXHR9IGVsc2Uge1xuXHRcdGlmIChiSW5jbHVkZVZpc2l0ZWRPYmplY3RzKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0YXJnZXQ6IHRhcmdldEVudGl0eVNldCxcblx0XHRcdFx0dmlzaXRlZE9iamVjdHM6IGxvY2FsT2JqZWN0c1xuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHRhcmdldEVudGl0eVNldDtcblx0fVxufVxuXG50eXBlIENvbnZlcnRlck9iamVjdCA9IHtcblx0X3R5cGU6IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFJlc29sdmVkVGFyZ2V0ID0ge1xuXHR0YXJnZXQ/OiBDb252ZXJ0ZXJPYmplY3Q7XG5cdHZpc2l0ZWRPYmplY3RzOiBDb252ZXJ0ZXJPYmplY3RbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob01ldGFNb2RlbENvbnRleHQ6IENvbnRleHQsIG9FbnRpdHlTZXRNZXRhTW9kZWxDb250ZXh0PzogQ29udGV4dCk6IERhdGFNb2RlbE9iamVjdFBhdGgge1xuXHRjb25zdCBvQ29udmVydGVkTWV0YWRhdGEgPSBjb252ZXJ0VHlwZXMob01ldGFNb2RlbENvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCk7XG5cdGNvbnN0IG1ldGFNb2RlbENvbnRleHQgPSBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChvTWV0YU1vZGVsQ29udGV4dCwgdHJ1ZSk7XG5cdGxldCB0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbjtcblx0aWYgKG9FbnRpdHlTZXRNZXRhTW9kZWxDb250ZXh0ICYmIG9FbnRpdHlTZXRNZXRhTW9kZWxDb250ZXh0LmdldFBhdGgoKSAhPT0gXCIvXCIpIHtcblx0XHR0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbiA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvRW50aXR5U2V0TWV0YU1vZGVsQ29udGV4dCk7XG5cdH1cblx0cmV0dXJuIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RnJvbVBhdGgobWV0YU1vZGVsQ29udGV4dCwgb0NvbnZlcnRlZE1ldGFkYXRhLCB0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdEZyb21QYXRoKFxuXHRtZXRhTW9kZWxDb250ZXh0OiBSZXNvbHZlZFRhcmdldCxcblx0Y29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLFxuXHR0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbj86IERhdGFNb2RlbE9iamVjdFBhdGhcbik6IERhdGFNb2RlbE9iamVjdFBhdGgge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RzID0gbWV0YU1vZGVsQ29udGV4dC52aXNpdGVkT2JqZWN0cy5maWx0ZXIoXG5cdFx0KHZpc2l0ZWRPYmplY3Q6IGFueSkgPT4gdmlzaXRlZE9iamVjdCAmJiB2aXNpdGVkT2JqZWN0Lmhhc093blByb3BlcnR5KFwiX3R5cGVcIikgJiYgdmlzaXRlZE9iamVjdC5fdHlwZSAhPT0gXCJFbnRpdHlUeXBlXCJcblx0KTtcblx0aWYgKG1ldGFNb2RlbENvbnRleHQudGFyZ2V0ICYmIG1ldGFNb2RlbENvbnRleHQudGFyZ2V0Lmhhc093blByb3BlcnR5KFwiX3R5cGVcIikgJiYgbWV0YU1vZGVsQ29udGV4dC50YXJnZXQuX3R5cGUgIT09IFwiRW50aXR5VHlwZVwiKSB7XG5cdFx0ZGF0YU1vZGVsT2JqZWN0cy5wdXNoKG1ldGFNb2RlbENvbnRleHQudGFyZ2V0KTtcblx0fVxuXHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydGllczogTmF2aWdhdGlvblByb3BlcnR5W10gPSBbXTtcblx0Y29uc3Qgcm9vdEVudGl0eVNldDogRW50aXR5U2V0ID0gZGF0YU1vZGVsT2JqZWN0c1swXSBhcyBFbnRpdHlTZXQ7XG5cdC8vIGN1cnJlbnRFbnRpdHlTZXQgY2FuIGJlIHVuZGVmaW5lZC5cblx0bGV0IGN1cnJlbnRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IHVuZGVmaW5lZCA9IHJvb3RFbnRpdHlTZXQ7XG5cdGxldCBjdXJyZW50RW50aXR5VHlwZTogRW50aXR5VHlwZSA9IHJvb3RFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0bGV0IGkgPSAxO1xuXHRsZXQgY3VycmVudE9iamVjdDtcblx0bGV0IG5hdmlnYXRlZFBhdGhzID0gW107XG5cdHdoaWxlIChpIDwgZGF0YU1vZGVsT2JqZWN0cy5sZW5ndGgpIHtcblx0XHRjdXJyZW50T2JqZWN0ID0gZGF0YU1vZGVsT2JqZWN0c1tpKytdO1xuXHRcdGlmIChjdXJyZW50T2JqZWN0Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKSB7XG5cdFx0XHRuYXZpZ2F0ZWRQYXRocy5wdXNoKGN1cnJlbnRPYmplY3QubmFtZSk7XG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcy5wdXNoKGN1cnJlbnRPYmplY3QgYXMgTmF2aWdhdGlvblByb3BlcnR5KTtcblx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID0gKGN1cnJlbnRPYmplY3QgYXMgTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlO1xuXHRcdFx0aWYgKGN1cnJlbnRFbnRpdHlTZXQgJiYgY3VycmVudEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLmhhc093blByb3BlcnR5KG5hdmlnYXRlZFBhdGhzLmpvaW4oXCIvXCIpKSkge1xuXHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gY3VycmVudEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW2N1cnJlbnRPYmplY3QubmFtZV0gYXMgRW50aXR5U2V0O1xuXHRcdFx0XHRuYXZpZ2F0ZWRQYXRocyA9IFtdO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3VycmVudEVudGl0eVNldCA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGN1cnJlbnRPYmplY3QuX3R5cGUgPT09IFwiRW50aXR5U2V0XCIpIHtcblx0XHRcdGN1cnJlbnRFbnRpdHlTZXQgPSBjdXJyZW50T2JqZWN0IGFzIEVudGl0eVNldDtcblx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID0gY3VycmVudEVudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRcdH1cblx0fVxuXG5cdGlmICh0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbiAmJiB0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbi5zdGFydGluZ0VudGl0eVNldCAhPT0gcm9vdEVudGl0eVNldCkge1xuXHRcdC8vIEluIGNhc2UgdGhlIGVudGl0eXNldCBpcyBub3Qgc3RhcnRpbmcgZnJvbSB0aGUgc2FtZSBsb2NhdGlvbiBpdCBtYXkgbWVhbiB0aGF0IHdlIGFyZSBkb2luZyB0b28gbXVjaCB3b3JrIGVhcmxpZXIgZm9yIHNvbWUgcmVhc29uXG5cdFx0Ly8gQXMgc3VjaCB3ZSBuZWVkIHRvIHJlZGVmaW5lIHRoZSBjb250ZXh0IHNvdXJjZSBmb3IgdGhlIHRhcmdldEVudGl0eVNldExvY2F0aW9uXG5cdFx0Y29uc3Qgc3RhcnRpbmdJbmRleCA9IGRhdGFNb2RlbE9iamVjdHMuaW5kZXhPZih0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbi5zdGFydGluZ0VudGl0eVNldCk7XG5cdFx0aWYgKHN0YXJ0aW5nSW5kZXggIT09IC0xKSB7XG5cdFx0XHQvLyBJZiBpdCdzIG5vdCBmb3VuZCBJIGRvbid0IGtub3cgd2hhdCB3ZSBjYW4gZG8gKHByb2JhYmx5IG5vdGhpbmcpXG5cdFx0XHRjb25zdCByZXF1aXJlZERhdGFNb2RlbE9iamVjdHMgPSBkYXRhTW9kZWxPYmplY3RzLnNsaWNlKDAsIHN0YXJ0aW5nSW5kZXgpO1xuXHRcdFx0dGFyZ2V0RW50aXR5U2V0TG9jYXRpb24uc3RhcnRpbmdFbnRpdHlTZXQgPSByb290RW50aXR5U2V0O1xuXHRcdFx0dGFyZ2V0RW50aXR5U2V0TG9jYXRpb24ubmF2aWdhdGlvblByb3BlcnRpZXMgPSByZXF1aXJlZERhdGFNb2RlbE9iamVjdHNcblx0XHRcdFx0LmZpbHRlcigob2JqZWN0OiBhbnkpID0+IG9iamVjdC5fdHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIilcblx0XHRcdFx0LmNvbmNhdCh0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbi5uYXZpZ2F0aW9uUHJvcGVydGllcykgYXMgTmF2aWdhdGlvblByb3BlcnR5W107XG5cdFx0fVxuXHR9XG5cdGNvbnN0IG91dERhdGFNb2RlbFBhdGggPSB7XG5cdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IHJvb3RFbnRpdHlTZXQsXG5cdFx0dGFyZ2V0RW50aXR5U2V0OiBjdXJyZW50RW50aXR5U2V0LFxuXHRcdHRhcmdldEVudGl0eVR5cGU6IGN1cnJlbnRFbnRpdHlUeXBlLFxuXHRcdHRhcmdldE9iamVjdDogbWV0YU1vZGVsQ29udGV4dC50YXJnZXQsXG5cdFx0bmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdFx0Y29udGV4dExvY2F0aW9uOiB0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbixcblx0XHRjb252ZXJ0ZWRUeXBlczogY29udmVydGVkVHlwZXNcblx0fTtcblx0aWYgKCFvdXREYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbikge1xuXHRcdG91dERhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uID0gb3V0RGF0YU1vZGVsUGF0aDtcblx0fVxuXHRyZXR1cm4gb3V0RGF0YU1vZGVsUGF0aDtcbn1cbiJdfQ==
|