@sapui5/sap.fe.core 1.102.2 → 1.104.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +6 -6
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +73 -30
- package/src/sap/fe/core/AppComponent.ts +65 -43
- package/src/sap/fe/core/AppStateHandler.js +82 -70
- package/src/sap/fe/core/AppStateHandler.ts +32 -37
- package/src/sap/fe/core/BaseController.js +11 -9
- package/src/sap/fe/core/BaseController.ts +15 -13
- package/src/sap/fe/core/CommonUtils.js +227 -126
- package/src/sap/fe/core/CommonUtils.ts +240 -163
- package/src/sap/fe/core/ExtensionAPI.js +24 -27
- package/src/sap/fe/core/ExtensionAPI.ts +36 -38
- package/src/sap/fe/core/PageController.js +4 -4
- package/src/sap/fe/core/PageController.ts +4 -5
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +6 -6
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +181 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +585 -210
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +246 -96
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
- package/src/sap/fe/core/controllerextensions/EditFlow.js +379 -330
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -245
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +101 -74
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +69 -79
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +67 -67
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +85 -77
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +103 -99
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
- package/src/sap/fe/core/controllerextensions/MassEdit.js +9 -9
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
- package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
- package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
- package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
- package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
- package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +170 -139
- package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
- package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
- package/src/sap/fe/core/controllerextensions/ViewState.js +200 -131
- package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +11 -10
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +190 -141
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +258 -210
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +183 -125
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +213 -156
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +164 -140
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +180 -150
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +71 -41
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +102 -82
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +61 -71
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +56 -64
- package/src/sap/fe/core/controls/Any.js +9 -5
- package/src/sap/fe/core/controls/Any.ts +10 -4
- package/src/sap/fe/core/controls/CommandExecution.js +11 -25
- package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
- package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
- package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
- package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
- package/src/sap/fe/core/controls/FileWrapper.js +7 -2
- package/src/sap/fe/core/controls/FileWrapper.ts +15 -11
- package/src/sap/fe/core/controls/FilterBar.js +6 -2
- package/src/sap/fe/core/controls/FilterBar.ts +13 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
- package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
- package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
- package/src/sap/fe/core/converters/ConverterContext.js +26 -33
- package/src/sap/fe/core/converters/ConverterContext.ts +52 -61
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +17 -15
- package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
- package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
- package/src/sap/fe/core/converters/MetaModelConverter.js +64 -35
- package/src/sap/fe/core/converters/MetaModelConverter.ts +154 -129
- package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
- package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
- package/src/sap/fe/core/converters/annotations/DataField.js +58 -35
- package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
- package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
- package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
- package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +26 -33
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +30 -28
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +60 -61
- package/src/sap/fe/core/converters/controls/Common/Form.js +27 -28
- package/src/sap/fe/core/converters/controls/Common/Form.ts +44 -57
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
- package/src/sap/fe/core/converters/controls/Common/Table.js +181 -197
- package/src/sap/fe/core/converters/controls/Common/Table.ts +251 -280
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +65 -59
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +77 -73
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +101 -97
- package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
- package/src/sap/fe/core/converters/helpers/ID.js +48 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
- package/src/sap/fe/core/converters/helpers/Key.js +7 -7
- package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -5
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +55 -42
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +81 -66
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
- package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/StandardFormatter.js +96 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
- package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
- package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
- package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
- package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
- package/src/sap/fe/core/helpers/BindingToolkit.js +1832 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +396 -269
- package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
- package/src/sap/fe/core/helpers/ClassSupport.ts +37 -10
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -6
- package/src/sap/fe/core/helpers/EditState.ts +5 -10
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
- package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
- package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
- package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
- package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
- package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
- package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
- package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
- package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
- package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
- package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
- package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
- package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
- package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
- package/src/sap/fe/core/library.js +42 -3
- package/src/sap/fe/core/library.ts +38 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
- package/src/sap/fe/core/messagebundle.properties +39 -63
- package/src/sap/fe/core/messagebundle_ar.properties +25 -39
- package/src/sap/fe/core/messagebundle_bg.properties +25 -39
- package/src/sap/fe/core/messagebundle_ca.properties +25 -39
- package/src/sap/fe/core/messagebundle_cs.properties +25 -39
- package/src/sap/fe/core/messagebundle_cy.properties +25 -39
- package/src/sap/fe/core/messagebundle_da.properties +25 -39
- package/src/sap/fe/core/messagebundle_de.properties +25 -39
- package/src/sap/fe/core/messagebundle_el.properties +26 -40
- package/src/sap/fe/core/messagebundle_en.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_GB.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +26 -18
- package/src/sap/fe/core/messagebundle_es.properties +27 -41
- package/src/sap/fe/core/messagebundle_es_MX.properties +25 -39
- package/src/sap/fe/core/messagebundle_et.properties +25 -39
- package/src/sap/fe/core/messagebundle_fi.properties +25 -39
- package/src/sap/fe/core/messagebundle_fr.properties +26 -40
- package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -39
- package/src/sap/fe/core/messagebundle_hi.properties +25 -39
- package/src/sap/fe/core/messagebundle_hr.properties +25 -39
- package/src/sap/fe/core/messagebundle_hu.properties +25 -39
- package/src/sap/fe/core/messagebundle_id.properties +25 -39
- package/src/sap/fe/core/messagebundle_it.properties +41 -55
- package/src/sap/fe/core/messagebundle_iw.properties +25 -39
- package/src/sap/fe/core/messagebundle_ja.properties +25 -39
- package/src/sap/fe/core/messagebundle_kk.properties +25 -39
- package/src/sap/fe/core/messagebundle_ko.properties +30 -44
- package/src/sap/fe/core/messagebundle_lt.properties +25 -39
- package/src/sap/fe/core/messagebundle_lv.properties +25 -39
- package/src/sap/fe/core/messagebundle_ms.properties +25 -39
- package/src/sap/fe/core/messagebundle_nl.properties +27 -41
- package/src/sap/fe/core/messagebundle_no.properties +25 -39
- package/src/sap/fe/core/messagebundle_pl.properties +26 -40
- package/src/sap/fe/core/messagebundle_pt.properties +26 -40
- package/src/sap/fe/core/messagebundle_pt_PT.properties +25 -39
- package/src/sap/fe/core/messagebundle_ro.properties +25 -39
- package/src/sap/fe/core/messagebundle_ru.properties +25 -39
- package/src/sap/fe/core/messagebundle_sh.properties +25 -39
- package/src/sap/fe/core/messagebundle_sk.properties +25 -39
- package/src/sap/fe/core/messagebundle_sl.properties +25 -39
- package/src/sap/fe/core/messagebundle_sv.properties +25 -39
- package/src/sap/fe/core/messagebundle_th.properties +25 -39
- package/src/sap/fe/core/messagebundle_tr.properties +25 -39
- package/src/sap/fe/core/messagebundle_uk.properties +25 -39
- package/src/sap/fe/core/messagebundle_vi.properties +25 -39
- package/src/sap/fe/core/messagebundle_zh_CN.properties +25 -39
- package/src/sap/fe/core/messagebundle_zh_TW.properties +25 -39
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +97 -69
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +68 -69
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +61 -49
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
- package/src/sap/fe/core/services/ShellServicesFactory.js +92 -76
- package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +224 -198
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +138 -139
- package/src/sap/fe/core/support/CommonHelper.js +3 -2
- package/src/sap/fe/core/support/CommonHelper.ts +9 -13
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.ts +5 -5
- package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
- package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
- package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
- package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
- package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
- package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
- package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
- package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
- package/src/sap/fe/core/templating/FilterHelper.js +16 -15
- package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
- package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
- package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
- package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
- package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
- package/src/sap/fe/core/templating/UIFormatters.js +152 -95
- package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +2 -2
- package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/converters/controls/ListReport/VisualFilters", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/
|
|
5
|
+
sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/converters/controls/ListReport/VisualFilters", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/BindingToolkit", "../../ManifestSettings", "../Common/DataVisualization"], function (Table, VisualFilters, ConfigurableObject, IssueManager, Key, BindingToolkit, ManifestSettings, DataVisualization) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
9
|
var getSelectionVariant = DataVisualization.getSelectionVariant;
|
|
10
10
|
var AvailabilityType = ManifestSettings.AvailabilityType;
|
|
11
|
-
var
|
|
12
|
-
var
|
|
11
|
+
var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
|
|
12
|
+
var compileExpression = BindingToolkit.compileExpression;
|
|
13
13
|
var KeyHelper = Key.KeyHelper;
|
|
14
14
|
var IssueType = IssueManager.IssueType;
|
|
15
15
|
var IssueSeverity = IssueManager.IssueSeverity;
|
|
@@ -40,8 +40,8 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
40
40
|
/**
|
|
41
41
|
* Enter all DataFields of a given FieldGroup into the filterFacetMap.
|
|
42
42
|
*
|
|
43
|
-
* @param
|
|
44
|
-
* @returns
|
|
43
|
+
* @param fieldGroup
|
|
44
|
+
* @returns The map of facets for the given FieldGroup
|
|
45
45
|
*/
|
|
46
46
|
function getFieldGroupFilterGroups(fieldGroup) {
|
|
47
47
|
var filterFacetMap = {};
|
|
@@ -51,7 +51,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
51
51
|
|
|
52
52
|
filterFacetMap[dataField.Value.path] = {
|
|
53
53
|
group: fieldGroup.fullyQualifiedName,
|
|
54
|
-
groupLabel:
|
|
54
|
+
groupLabel: compileExpression(getExpressionFromAnnotation(fieldGroup.Label || ((_fieldGroup$annotatio = fieldGroup.annotations) === null || _fieldGroup$annotatio === void 0 ? void 0 : (_fieldGroup$annotatio2 = _fieldGroup$annotatio.Common) === null || _fieldGroup$annotatio2 === void 0 ? void 0 : _fieldGroup$annotatio2.Label) || fieldGroup.qualifier)) || fieldGroup.qualifier
|
|
55
55
|
};
|
|
56
56
|
}
|
|
57
57
|
});
|
|
@@ -68,9 +68,10 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
68
68
|
}
|
|
69
69
|
/**
|
|
70
70
|
* Check that all the tables for a dedicated entity set are configured as analytical table.
|
|
71
|
-
*
|
|
72
|
-
* @param
|
|
73
|
-
* @
|
|
71
|
+
*
|
|
72
|
+
* @param listReportTables List report tables
|
|
73
|
+
* @param contextPath
|
|
74
|
+
* @returns Is FilterBar search field hidden or not
|
|
74
75
|
*/
|
|
75
76
|
|
|
76
77
|
|
|
@@ -117,7 +118,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
117
118
|
*
|
|
118
119
|
* @param entityType The root EntityType
|
|
119
120
|
* @param propertyPath The full path to the target property
|
|
120
|
-
* @returns
|
|
121
|
+
* @returns The formatted condition path
|
|
121
122
|
*/
|
|
122
123
|
|
|
123
124
|
|
|
@@ -128,14 +129,14 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
128
129
|
|
|
129
130
|
while (parts.length) {
|
|
130
131
|
var part = parts.shift();
|
|
131
|
-
partialPath = partialPath ? partialPath
|
|
132
|
+
partialPath = partialPath ? "".concat(partialPath, "/").concat(part) : part;
|
|
132
133
|
var property = entityType.resolvePath(partialPath);
|
|
133
134
|
|
|
134
135
|
if (property._type === "NavigationProperty" && property.isCollection) {
|
|
135
136
|
part += "*";
|
|
136
137
|
}
|
|
137
138
|
|
|
138
|
-
key = key ? key
|
|
139
|
+
key = key ? "".concat(key, "/").concat(part) : part;
|
|
139
140
|
}
|
|
140
141
|
|
|
141
142
|
return key;
|
|
@@ -154,9 +155,9 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
154
155
|
annotationPath: converterContext.getAbsoluteAnnotationPath(fullPropertyPath),
|
|
155
156
|
conditionPath: _getConditionPath(entityType, fullPropertyPath),
|
|
156
157
|
availability: ((_property$annotations4 = property.annotations) === null || _property$annotations4 === void 0 ? void 0 : (_property$annotations5 = _property$annotations4.UI) === null || _property$annotations5 === void 0 ? void 0 : (_property$annotations6 = _property$annotations5.HiddenFilter) === null || _property$annotations6 === void 0 ? void 0 : _property$annotations6.valueOf()) === true ? AvailabilityType.Hidden : AvailabilityType.Adaptation,
|
|
157
|
-
label:
|
|
158
|
+
label: compileExpression(getExpressionFromAnnotation(((_property$annotations7 = property.annotations.Common) === null || _property$annotations7 === void 0 ? void 0 : (_property$annotations8 = _property$annotations7.Label) === null || _property$annotations8 === void 0 ? void 0 : _property$annotations8.valueOf()) || property.name)),
|
|
158
159
|
group: targetEntityType.name,
|
|
159
|
-
groupLabel:
|
|
160
|
+
groupLabel: compileExpression(getExpressionFromAnnotation((targetEntityType === null || targetEntityType === void 0 ? void 0 : (_targetEntityType$ann = targetEntityType.annotations) === null || _targetEntityType$ann === void 0 ? void 0 : (_targetEntityType$ann2 = _targetEntityType$ann.Common) === null || _targetEntityType$ann2 === void 0 ? void 0 : (_targetEntityType$ann3 = _targetEntityType$ann2.Label) === null || _targetEntityType$ann3 === void 0 ? void 0 : _targetEntityType$ann3.valueOf()) || targetEntityType.name))
|
|
160
161
|
};
|
|
161
162
|
}
|
|
162
163
|
|
|
@@ -230,7 +231,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
230
231
|
if (properties) {
|
|
231
232
|
properties.forEach(function (property) {
|
|
232
233
|
var propertyPath = property.name;
|
|
233
|
-
var fullPath = (navigationPath ? navigationPath
|
|
234
|
+
var fullPath = (navigationPath ? "".concat(navigationPath, "/") : "") + propertyPath;
|
|
234
235
|
|
|
235
236
|
var selectionField = _createFilterSelectionField(entityType, property, fullPath, includeHidden, converterContext);
|
|
236
237
|
|
|
@@ -313,13 +314,13 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
313
314
|
aSelectOptions === null || aSelectOptions === void 0 ? void 0 : aSelectOptions.forEach(function (selectOption) {
|
|
314
315
|
var propertyName = selectOption.PropertyName;
|
|
315
316
|
var sPropertyPath = propertyName.value;
|
|
316
|
-
var
|
|
317
|
+
var currentSelectionFields = {};
|
|
317
318
|
annotatedSelectionFields === null || annotatedSelectionFields === void 0 ? void 0 : annotatedSelectionFields.forEach(function (SelectionField) {
|
|
318
|
-
|
|
319
|
+
currentSelectionFields[SelectionField.value] = true;
|
|
319
320
|
});
|
|
320
321
|
|
|
321
322
|
if (!(sPropertyPath in excludedFilterProperties)) {
|
|
322
|
-
if (!(sPropertyPath in
|
|
323
|
+
if (!(sPropertyPath in currentSelectionFields)) {
|
|
323
324
|
var _FilterField = getFilterField(sPropertyPath, converterContext, entityType);
|
|
324
325
|
|
|
325
326
|
if (_FilterField) {
|
|
@@ -333,11 +334,11 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
333
334
|
var _property$annotations9, _property$annotations10;
|
|
334
335
|
|
|
335
336
|
var defaultFilterValue = (_property$annotations9 = property.annotations) === null || _property$annotations9 === void 0 ? void 0 : (_property$annotations10 = _property$annotations9.Common) === null || _property$annotations10 === void 0 ? void 0 : _property$annotations10.FilterDefaultValue;
|
|
336
|
-
var
|
|
337
|
+
var propertyPath = property.name;
|
|
337
338
|
|
|
338
|
-
if (!(
|
|
339
|
-
if (defaultFilterValue && !(
|
|
340
|
-
var _FilterField2 = getFilterField(
|
|
339
|
+
if (!(propertyPath in excludedFilterProperties)) {
|
|
340
|
+
if (defaultFilterValue && !(propertyPath in UISelectionFields)) {
|
|
341
|
+
var _FilterField2 = getFilterField(propertyPath, converterContext, entityType);
|
|
341
342
|
|
|
342
343
|
if (_FilterField2) {
|
|
343
344
|
selectionFields.push(_FilterField2);
|
|
@@ -351,8 +352,9 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
351
352
|
};
|
|
352
353
|
/**
|
|
353
354
|
* Get all parameter filter fields in case of a parameterized service.
|
|
354
|
-
*
|
|
355
|
-
* @
|
|
355
|
+
*
|
|
356
|
+
* @param converterContext
|
|
357
|
+
* @returns An array of parameter filterfields
|
|
356
358
|
*/
|
|
357
359
|
|
|
358
360
|
|
|
@@ -362,19 +364,18 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
362
364
|
var dataModelObjectPath = converterContext.getDataModelObjectPath();
|
|
363
365
|
var parameterEntityType = dataModelObjectPath.startingEntitySet.entityType;
|
|
364
366
|
var isParameterized = !!((_parameterEntityType$ = parameterEntityType.annotations) !== null && _parameterEntityType$ !== void 0 && (_parameterEntityType$2 = _parameterEntityType$.Common) !== null && _parameterEntityType$2 !== void 0 && _parameterEntityType$2.ResultContext) && !dataModelObjectPath.targetEntitySet;
|
|
365
|
-
var parameterConverterContext = isParameterized && converterContext.getConverterContextFor("/"
|
|
366
|
-
|
|
367
|
+
var parameterConverterContext = isParameterized && converterContext.getConverterContextFor("/".concat(dataModelObjectPath.startingEntitySet.name));
|
|
368
|
+
return parameterConverterContext ? parameterEntityType.entityProperties.map(function (property) {
|
|
367
369
|
return _getFilterField({}, property.name, parameterConverterContext, parameterEntityType);
|
|
368
370
|
}) : [];
|
|
369
|
-
return parameterFields;
|
|
370
371
|
}
|
|
371
372
|
/**
|
|
372
373
|
* Determines if the FilterBar search field is hidden or not.
|
|
373
374
|
*
|
|
374
|
-
* @param
|
|
375
|
-
* @param
|
|
376
|
-
* @param
|
|
377
|
-
* @returns
|
|
375
|
+
* @param listReportTables The list report tables
|
|
376
|
+
* @param charts The ALP charts
|
|
377
|
+
* @param converterContext The converter context
|
|
378
|
+
* @returns The information if the FilterBar search field is hidden or not
|
|
378
379
|
*/
|
|
379
380
|
|
|
380
381
|
|
|
@@ -400,7 +401,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
400
401
|
*
|
|
401
402
|
* @param entityType The current entityType
|
|
402
403
|
* @param converterContext The converter context
|
|
403
|
-
* @returns
|
|
404
|
+
* @returns The filter fields defined in the manifest
|
|
404
405
|
*/
|
|
405
406
|
|
|
406
407
|
|
|
@@ -785,10 +786,12 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
785
786
|
/**
|
|
786
787
|
* Retrieve the configuration for the selection fields that will be used within the filter bar
|
|
787
788
|
* This configuration takes into account annotation and the selection variants.
|
|
788
|
-
*
|
|
789
|
-
* @param
|
|
790
|
-
* @param
|
|
791
|
-
* @
|
|
789
|
+
*
|
|
790
|
+
* @param converterContext
|
|
791
|
+
* @param lrTables
|
|
792
|
+
* @param annotationPath
|
|
793
|
+
* @param [includeHidden]
|
|
794
|
+
* @returns An array of selection fields
|
|
792
795
|
*/
|
|
793
796
|
|
|
794
797
|
|
|
@@ -896,10 +899,11 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
896
899
|
* (1) a filter property is mandatory,
|
|
897
900
|
* (2) no search field exists (entity isn't search enabled),
|
|
898
901
|
* (3) when the data isn't loaded by default (annotation FetchValues = 2).
|
|
899
|
-
*
|
|
900
|
-
* @param
|
|
901
|
-
* @param
|
|
902
|
-
* @
|
|
902
|
+
*
|
|
903
|
+
* @param converterContext The converter context
|
|
904
|
+
* @param filterRestrictionsAnnotation The FilterRestriction annotation
|
|
905
|
+
* @param valueListAnnotation The ValueList annotation
|
|
906
|
+
* @returns The value for expandFilterFields
|
|
903
907
|
*/
|
|
904
908
|
|
|
905
909
|
|
|
@@ -921,4 +925,4 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
921
925
|
_exports.getExpandFilterFields = getExpandFilterFields;
|
|
922
926
|
return _exports;
|
|
923
927
|
}, false);
|
|
924
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZpbHRlckJhci50cyJdLCJuYW1lcyI6WyJmaWx0ZXJGaWVsZFR5cGUiLCJzRWRtU3RyaW5nIiwic1N0cmluZ0RhdGFUeXBlIiwiZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyIsImZpZWxkR3JvdXAiLCJmaWx0ZXJGYWNldE1hcCIsIkRhdGEiLCJmb3JFYWNoIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJWYWx1ZSIsInBhdGgiLCJncm91cCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdyb3VwTGFiZWwiLCJjb21waWxlQmluZGluZyIsImFubm90YXRpb25FeHByZXNzaW9uIiwiTGFiZWwiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsInF1YWxpZmllciIsImdldEV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyIsInNlbGVjdGlvblZhcmlhbnRzIiwicmVkdWNlIiwicHJldmlvdXNWYWx1ZSIsInNlbGVjdGlvblZhcmlhbnQiLCJwcm9wZXJ0eU5hbWVzIiwicHJvcGVydHlOYW1lIiwiY2hlY2tBbGxUYWJsZUZvckVudGl0eVNldEFyZUFuYWx5dGljYWwiLCJsaXN0UmVwb3J0VGFibGVzIiwiY29udGV4dFBhdGgiLCJsZW5ndGgiLCJldmVyeSIsInZpc3VhbGl6YXRpb24iLCJlbmFibGVBbmFseXRpY3MiLCJhbm5vdGF0aW9uIiwiY29sbGVjdGlvbiIsImdldFNlbGVjdGlvblZhcmlhbnRzIiwibHJUYWJsZVZpc3VhbGl6YXRpb25zIiwiY29udmVydGVyQ29udGV4dCIsInNlbGVjdGlvblZhcmlhbnRQYXRocyIsIm1hcCIsInRhYmxlRmlsdGVycyIsImNvbnRyb2wiLCJmaWx0ZXJzIiwidGFibGVTVkNvbmZpZ3MiLCJrZXkiLCJBcnJheSIsImlzQXJyYXkiLCJwYXRocyIsImFubm90YXRpb25QYXRoIiwiaW5kZXhPZiIsInB1c2giLCJzZWxlY3Rpb25WYXJpYW50Q29uZmlnIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJzdkNvbmZpZ3MiLCJjb25jYXQiLCJfZ2V0Q29uZGl0aW9uUGF0aCIsImVudGl0eVR5cGUiLCJwcm9wZXJ0eVBhdGgiLCJwYXJ0cyIsInNwbGl0IiwicGFydGlhbFBhdGgiLCJwYXJ0Iiwic2hpZnQiLCJwcm9wZXJ0eSIsInJlc29sdmVQYXRoIiwiX3R5cGUiLCJpc0NvbGxlY3Rpb24iLCJfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQiLCJmdWxsUHJvcGVydHlQYXRoIiwiaW5jbHVkZUhpZGRlbiIsInVuZGVmaW5lZCIsInRhcmdldFR5cGUiLCJVSSIsIkhpZGRlbiIsInZhbHVlT2YiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUiLCJLZXlIZWxwZXIiLCJnZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImNvbmRpdGlvblBhdGgiLCJhdmFpbGFiaWxpdHkiLCJIaWRkZW5GaWx0ZXIiLCJBdmFpbGFiaWxpdHlUeXBlIiwiQWRhcHRhdGlvbiIsImxhYmVsIiwibmFtZSIsImdldE1vZGVsVHlwZSIsInNUeXBlIiwibURlZmF1bHRUeXBlRm9yRWRtVHlwZSIsIm1vZGVsVHlwZSIsIl9nZXRTZWxlY3Rpb25GaWVsZHMiLCJuYXZpZ2F0aW9uUGF0aCIsInByb3BlcnRpZXMiLCJzZWxlY3Rpb25GaWVsZE1hcCIsImZ1bGxQYXRoIiwic2VsZWN0aW9uRmllbGQiLCJfZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoIiwicHJvcGVydHlQYXRocyIsInNlbGVjdGlvbkZpZWxkcyIsImxvY2FsU2VsZWN0aW9uRmllbGRzIiwiZW50aXR5UHJvcGVydGllcyIsImluY2x1ZGVzIiwic3BsaWNlIiwiam9pbiIsIl9nZXRGaWx0ZXJGaWVsZCIsImZpbHRlckZpZWxkcyIsImZpbHRlckZpZWxkIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkhpZ2giLCJJc3N1ZVR5cGUiLCJNSVNTSU5HX1NFTEVDVElPTkZJRUxEIiwiRGVmYXVsdCIsImlzUGFyYW1ldGVyIiwiUmVzdWx0Q29udGV4dCIsIl9nZXREZWZhdWx0RmlsdGVyRmllbGRzIiwiYVNlbGVjdE9wdGlvbnMiLCJleGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMiLCJVSVNlbGVjdGlvbkZpZWxkcyIsIlNlbGVjdGlvbkZpZWxkIiwidmFsdWUiLCJzZWxlY3RPcHRpb24iLCJQcm9wZXJ0eU5hbWUiLCJzUHJvcGVydHlQYXRoIiwiRmlsdGVyRmllbGQiLCJnZXRGaWx0ZXJGaWVsZCIsImRlZmF1bHRGaWx0ZXJWYWx1ZSIsIkZpbHRlckRlZmF1bHRWYWx1ZSIsIlByb3BlcnR5UGF0aCIsIl9nZXRQYXJhbWV0ZXJGaWVsZHMiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInBhcmFtZXRlckVudGl0eVR5cGUiLCJzdGFydGluZ0VudGl0eVNldCIsImlzUGFyYW1ldGVyaXplZCIsInRhcmdldEVudGl0eVNldCIsInBhcmFtZXRlckNvbnZlcnRlckNvbnRleHQiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yIiwicGFyYW1ldGVyRmllbGRzIiwiZ2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoIiwiY2hhcnRzIiwibm9TZWFyY2hJbkNoYXJ0cyIsImNoYXJ0IiwiYXBwbHlTdXBwb3J0ZWQiLCJlbmFibGVTZWFyY2giLCJub1NlYXJjaEluVGFibGVzIiwidGFibGUiLCJlbmFibGVBbmFseXRpY3NTZWFyY2giLCJnZXRDb250ZXh0UGF0aCIsImdldE1hbmlmZXN0RmlsdGVyRmllbGRzIiwiZmJDb25maWciLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uIiwiZGVmaW5lZEZpbHRlckZpZWxkcyIsIk9iamVjdCIsImtleXMiLCJnZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5Iiwic0tleSIsInR5cGUiLCJTbG90IiwidmlzdWFsRmlsdGVyIiwiZ2V0VmlzdWFsRmlsdGVycyIsInRlbXBsYXRlIiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsInNldHRpbmdzIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zIiwib0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24iLCJzUmVzdHJpY3Rpb24iLCJhUHJvcHMiLCJvUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwibUFsbG93ZWRFeHByZXNzaW9ucyIsIkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJQcm9wZXJ0eSIsIkFsbG93ZWRFeHByZXNzaW9ucyIsImdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbyIsImRhdGFUeXBlIiwibWF4Q29uZGl0aW9ucyIsImdldEVkaXRTdGF0ZUZpbHRlclByb3BlcnR5SW5mbyIsImhpZGRlbkZpbHRlciIsImdldFNlYXJjaFJlc3RyaWN0aW9ucyIsImdldEVudGl0eVNldCIsIkNhcGFiaWxpdGllcyIsIlNlYXJjaFJlc3RyaWN0aW9ucyIsImdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJzTmF2aWdhdGlvblBhdGgiLCJvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIk5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJhUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJSZXN0cmljdGVkUHJvcGVydGllcyIsImZpbmQiLCJvUmVzdHJpY3RlZFByb3BlcnR5IiwiTmF2aWdhdGlvblByb3BlcnR5IiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyIsIm9GaWx0ZXJGaWVsZEluZm8iLCJkaXNwbGF5IiwiY2FzZVNlbnNpdGl2ZSIsIm1lbnUiLCJnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uIiwiYUV4cHJlc3Npb25zIiwiYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5Iiwic29ydCIsImEiLCJiIiwiZGlzcGxheU1vZGUiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsIm9Db2xsZWN0aW9uQW5ub3RhdGlvbnMiLCJvVGV4dEFubm90YXRpb24iLCJUZXh0Iiwib1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbiIsIlRleHRBcnJhbmdlbWVudCIsIl9mZXRjaFByb3BlcnR5SW5mbyIsIm9UeXBlQ29uZmlnIiwib1Byb3BlcnR5SW5mbyIsInNBbm5vdGF0aW9uUGF0aCIsInRhcmdldFByb3BlcnR5T2JqZWN0IiwidGFyZ2V0T2JqZWN0Iiwib0Zvcm1hdE9wdGlvbnMiLCJmb3JtYXRPcHRpb25zIiwib0NvbnN0cmFpbnRzIiwiY29uc3RyYWludHMiLCJhc3NpZ24iLCJpc011bHRpVmFsdWUiLCJiSXNNdWx0aVZhbHVlIiwiZmlsdGVyRXhwcmVzc2lvbiIsImdldEFubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSIsImxyVGFibGVzIiwiZ2V0RW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiU2VsZWN0aW9uRmllbGRzIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsInByb3BlcnR5SW5mb0ZpZWxkcyIsImRlZmF1bHRGaWx0ZXJGaWVsZHMiLCJwcm9jZXNzU2VsZWN0aW9uRmllbGRzIiwiZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHMiLCJzZWxlY3Rpb25GaWVsZFR5cGVzIiwiYVR5cGVDb25maWciLCJfZm5UeXBlQ29uZmlnIiwiZ2V0VHlwZUNvbmZpZyIsIm51bGxhYmxlIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwicGFyYW1ldGVyRmllbGQiLCJwcm9wZXJ0eUNvbnZlcnR5Q29udGV4dCIsInByb3BlcnR5VGFyZ2V0T2JqZWN0Iiwib0ZpbHRlclJlc3RyaWN0aW9ucyIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIm9SZXQiLCJzRW50aXR5U2V0UGF0aCIsImFQYXRoUGFydHMiLCJvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyIsIlJlcXVpcmVkUHJvcGVydGllcyIsIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIiwiaXNDYXNlU2Vuc2l0aXZlIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwiYVJlcXVpcmVkUHJvcHMiLCJhTm9uRmlsdGVyYWJsZVByb3BzIiwiYUZldGNoZWRQcm9wZXJ0aWVzIiwicHJvcGVydHlJbmZvRmllbGQiLCJvQ29udmVydGVkUHJvcGVydHkiLCJyZXBsYWNlIiwicmVxdWlyZWQiLCJEcmFmdFJvb3QiLCJzZWFyY2hSZXN0cmljdGlvbnMiLCJoaWRlQmFzaWNTZWFyY2giLCJCb29sZWFuIiwiU2VhcmNoYWJsZSIsImluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldFNlbGVjdGlvbkZpZWxkcyIsIm9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEiLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJsb2NhbGVDb21wYXJlIiwic0ZldGNoUHJvcGVydGllcyIsInNQcm9wZXJ0eUluZm8iLCJwcm9wU2VsZWN0aW9uRmllbGRzIiwiZmlsdGVyRmFjZXRzIiwiRmlsdGVyRmFjZXRzIiwiYUZpZWxkR3JvdXBzIiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJpIiwiZmlsdGVyRmFjZXQiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiSUQiLCJ0b1N0cmluZyIsImFsbEZpbHRlcnMiLCJmaWx0ZXIiLCJzQ29udGV4dFBhdGgiLCJhZ2dyZWdhdGVzIiwiYWdncmVnYXRhYmxlUHJvcGVydGllcyIsImFnZ3JlZ2F0ZUtleSIsInJlbGF0aXZlUGF0aCIsImdldEV4cGFuZEZpbHRlckZpZWxkcyIsImZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24iLCJ2YWx1ZUxpc3RBbm5vdGF0aW9uIiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwidmFsdWVMaXN0IiwiZ2V0T2JqZWN0IiwiRmV0Y2hWYWx1ZXMiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01Bd0NLQSxlOzthQUFBQSxlO0FBQUFBLElBQUFBLGU7QUFBQUEsSUFBQUEsZTtLQUFBQSxlLEtBQUFBLGU7O0FBS0wsTUFBTUMsVUFBVSxHQUFHLFlBQW5CO0FBQ0EsTUFBTUMsZUFBZSxHQUFHLGdDQUF4Qjs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFTQyx5QkFBVCxDQUFtQ0MsVUFBbkMsRUFBNEc7QUFDM0csUUFBTUMsY0FBMkMsR0FBRyxFQUFwRDtBQUNBRCxJQUFBQSxVQUFVLENBQUNFLElBQVgsQ0FBZ0JDLE9BQWhCLENBQXdCLFVBQUNDLFNBQUQsRUFBdUM7QUFDOUQsVUFBSUEsU0FBUyxDQUFDQyxLQUFWLEtBQW9CLHNDQUF4QixFQUFnRTtBQUFBOztBQUMvREosUUFBQUEsY0FBYyxDQUFDRyxTQUFTLENBQUNFLEtBQVYsQ0FBZ0JDLElBQWpCLENBQWQsR0FBdUM7QUFDdENDLFVBQUFBLEtBQUssRUFBRVIsVUFBVSxDQUFDUyxrQkFEb0I7QUFFdENDLFVBQUFBLFVBQVUsRUFDVEMsY0FBYyxDQUNiQyxvQkFBb0IsQ0FBQ1osVUFBVSxDQUFDYSxLQUFYLDhCQUFvQmIsVUFBVSxDQUFDYyxXQUEvQixvRkFBb0Isc0JBQXdCQyxNQUE1QywyREFBb0IsdUJBQWdDRixLQUFwRCxLQUE2RGIsVUFBVSxDQUFDZ0IsU0FBekUsQ0FEUCxDQUFkLElBRUtoQixVQUFVLENBQUNnQjtBQUxxQixTQUF2QztBQU9BO0FBQ0QsS0FWRDtBQVdBLFdBQU9mLGNBQVA7QUFDQTs7QUFFRCxXQUFTZ0IsMkJBQVQsQ0FBcUNDLGlCQUFyQyxFQUFrSDtBQUNqSCxXQUFPQSxpQkFBaUIsQ0FBQ0MsTUFBbEIsQ0FBeUIsVUFBQ0MsYUFBRCxFQUF5Q0MsZ0JBQXpDLEVBQThEO0FBQzdGQSxNQUFBQSxnQkFBZ0IsQ0FBQ0MsYUFBakIsQ0FBK0JuQixPQUEvQixDQUF1QyxVQUFDb0IsWUFBRCxFQUFrQjtBQUN4REgsUUFBQUEsYUFBYSxDQUFDRyxZQUFELENBQWIsR0FBOEIsSUFBOUI7QUFDQSxPQUZEO0FBR0EsYUFBT0gsYUFBUDtBQUNBLEtBTE0sRUFLSixFQUxJLENBQVA7QUFNQTtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsV0FBU0ksc0NBQVQsQ0FBZ0RDLGdCQUFoRCxFQUF3RkMsV0FBeEYsRUFBeUg7QUFDeEgsUUFBSUEsV0FBVyxJQUFJRCxnQkFBZ0IsQ0FBQ0UsTUFBakIsR0FBMEIsQ0FBN0MsRUFBZ0Q7QUFDL0MsYUFBT0YsZ0JBQWdCLENBQUNHLEtBQWpCLENBQXVCLFVBQUNDLGFBQUQsRUFBbUI7QUFDaEQsZUFBT0EsYUFBYSxDQUFDQyxlQUFkLElBQWlDSixXQUFXLEtBQUtHLGFBQWEsQ0FBQ0UsVUFBZCxDQUF5QkMsVUFBakY7QUFDQSxPQUZNLENBQVA7QUFHQTs7QUFDRCxXQUFPLEtBQVA7QUFDQTs7QUFFRCxXQUFTQyxvQkFBVCxDQUNDQyxxQkFERCxFQUVDQyxnQkFGRCxFQUdtQztBQUNsQyxRQUFNQyxxQkFBK0IsR0FBRyxFQUF4QztBQUNBLFdBQU9GLHFCQUFxQixDQUMxQkcsR0FESyxDQUNELFVBQUNSLGFBQUQsRUFBbUI7QUFDdkIsVUFBTVMsWUFBWSxHQUFHVCxhQUFhLENBQUNVLE9BQWQsQ0FBc0JDLE9BQTNDO0FBQ0EsVUFBTUMsY0FBK0MsR0FBRyxFQUF4RDs7QUFDQSxXQUFLLElBQU1DLElBQVgsSUFBa0JKLFlBQWxCLEVBQWdDO0FBQy9CLFlBQUlLLEtBQUssQ0FBQ0MsT0FBTixDQUFjTixZQUFZLENBQUNJLElBQUQsQ0FBWixDQUFrQkcsS0FBaEMsQ0FBSixFQUE0QztBQUMzQyxjQUFNQSxLQUFLLEdBQUdQLFlBQVksQ0FBQ0ksSUFBRCxDQUFaLENBQWtCRyxLQUFoQztBQUNBQSxVQUFBQSxLQUFLLENBQUMxQyxPQUFOLENBQWMsVUFBQ0ksSUFBRCxFQUFVO0FBQ3ZCLGdCQUFJQSxJQUFJLElBQUlBLElBQUksQ0FBQ3VDLGNBQWIsSUFBK0JWLHFCQUFxQixDQUFDVyxPQUF0QixDQUE4QnhDLElBQUksQ0FBQ3VDLGNBQW5DLE1BQXVELENBQUMsQ0FBM0YsRUFBOEY7QUFDN0ZWLGNBQUFBLHFCQUFxQixDQUFDWSxJQUF0QixDQUEyQnpDLElBQUksQ0FBQ3VDLGNBQWhDO0FBQ0Esa0JBQU1HLHNCQUFzQixHQUFHQyxnQ0FBZ0MsQ0FBQzNDLElBQUksQ0FBQ3VDLGNBQU4sRUFBc0JYLGdCQUF0QixDQUEvRDs7QUFDQSxrQkFBSWMsc0JBQUosRUFBNEI7QUFDM0JSLGdCQUFBQSxjQUFjLENBQUNPLElBQWYsQ0FBb0JDLHNCQUFwQjtBQUNBO0FBQ0Q7QUFDRCxXQVJEO0FBU0E7QUFDRDs7QUFDRCxhQUFPUixjQUFQO0FBQ0EsS0FuQkssRUFvQkx0QixNQXBCSyxDQW9CRSxVQUFDZ0MsU0FBRCxFQUFZOUIsZ0JBQVo7QUFBQSxhQUFpQzhCLFNBQVMsQ0FBQ0MsTUFBVixDQUFpQi9CLGdCQUFqQixDQUFqQztBQUFBLEtBcEJGLEVBb0J1RSxFQXBCdkUsQ0FBUDtBQXFCQTtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLE1BQU1nQyxpQkFBaUIsR0FBRyxVQUFVQyxVQUFWLEVBQWtDQyxZQUFsQyxFQUFnRTtBQUN6RixRQUFNQyxLQUFLLEdBQUdELFlBQVksQ0FBQ0UsS0FBYixDQUFtQixHQUFuQixDQUFkO0FBQ0EsUUFBSUMsV0FBSjtBQUNBLFFBQUloQixHQUFHLEdBQUcsRUFBVjs7QUFDQSxXQUFPYyxLQUFLLENBQUM3QixNQUFiLEVBQXFCO0FBQ3BCLFVBQUlnQyxJQUFJLEdBQUdILEtBQUssQ0FBQ0ksS0FBTixFQUFYO0FBQ0FGLE1BQUFBLFdBQVcsR0FBR0EsV0FBVyxHQUFHQSxXQUFXLEdBQUcsR0FBZCxHQUFvQkMsSUFBdkIsR0FBOEJBLElBQXZEO0FBQ0EsVUFBTUUsUUFBdUMsR0FBR1AsVUFBVSxDQUFDUSxXQUFYLENBQXVCSixXQUF2QixDQUFoRDs7QUFDQSxVQUFJRyxRQUFRLENBQUNFLEtBQVQsS0FBbUIsb0JBQW5CLElBQTJDRixRQUFRLENBQUNHLFlBQXhELEVBQXNFO0FBQ3JFTCxRQUFBQSxJQUFJLElBQUksR0FBUjtBQUNBOztBQUNEakIsTUFBQUEsR0FBRyxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsR0FBRyxHQUFOLEdBQVlpQixJQUFmLEdBQXNCQSxJQUEvQjtBQUNBOztBQUNELFdBQU9qQixHQUFQO0FBQ0EsR0FkRDs7QUFnQkEsTUFBTXVCLDJCQUEyQixHQUFHLFVBQ25DWCxVQURtQyxFQUVuQ08sUUFGbUMsRUFHbkNLLGdCQUhtQyxFQUluQ0MsYUFKbUMsRUFLbkNoQyxnQkFMbUMsRUFNVDtBQUFBOztBQUMxQjtBQUNBLFFBQ0MwQixRQUFRLEtBQUtPLFNBQWIsSUFDQVAsUUFBUSxDQUFDUSxVQUFULEtBQXdCRCxTQUR4QixLQUVDRCxhQUFhLElBQUksMEJBQUFOLFFBQVEsQ0FBQy9DLFdBQVQsMEdBQXNCd0QsRUFBdEIsNEdBQTBCQyxNQUExQixrRkFBa0NDLE9BQWxDLFFBQWdELElBRmxFLENBREQsRUFJRTtBQUFBOztBQUNELFVBQU1DLGdCQUFnQixHQUFHdEMsZ0JBQWdCLENBQUN1Qyx1QkFBakIsQ0FBeUNiLFFBQXpDLENBQXpCO0FBQ0EsYUFBTztBQUNObkIsUUFBQUEsR0FBRyxFQUFFaUMsU0FBUyxDQUFDQyw0QkFBVixDQUF1Q1YsZ0JBQXZDLENBREM7QUFFTnBCLFFBQUFBLGNBQWMsRUFBRVgsZ0JBQWdCLENBQUMwQyx5QkFBakIsQ0FBMkNYLGdCQUEzQyxDQUZWO0FBR05ZLFFBQUFBLGFBQWEsRUFBRXpCLGlCQUFpQixDQUFDQyxVQUFELEVBQWFZLGdCQUFiLENBSDFCO0FBSU5hLFFBQUFBLFlBQVksRUFDWCwyQkFBQWxCLFFBQVEsQ0FBQy9DLFdBQVQsNEdBQXNCd0QsRUFBdEIsNEdBQTBCVSxZQUExQixrRkFBd0NSLE9BQXhDLFFBQXNELElBQXRELEdBQTZEUyxnQkFBZ0IsQ0FBQ1YsTUFBOUUsR0FBdUZVLGdCQUFnQixDQUFDQyxVQUxuRztBQU1OQyxRQUFBQSxLQUFLLEVBQUV4RSxjQUFjLENBQUNDLG9CQUFvQixDQUFDLDJCQUFBaUQsUUFBUSxDQUFDL0MsV0FBVCxDQUFxQkMsTUFBckIsNEdBQTZCRixLQUE3QixrRkFBb0MyRCxPQUFwQyxPQUFpRFgsUUFBUSxDQUFDdUIsSUFBM0QsQ0FBckIsQ0FOZjtBQU9ONUUsUUFBQUEsS0FBSyxFQUFFaUUsZ0JBQWdCLENBQUNXLElBUGxCO0FBUU4xRSxRQUFBQSxVQUFVLEVBQUVDLGNBQWMsQ0FDekJDLG9CQUFvQixDQUFDLENBQUE2RCxnQkFBZ0IsU0FBaEIsSUFBQUEsZ0JBQWdCLFdBQWhCLHFDQUFBQSxnQkFBZ0IsQ0FBRTNELFdBQWxCLDBHQUErQkMsTUFBL0IsNEdBQXVDRixLQUF2QyxrRkFBOEMyRCxPQUE5QyxPQUEyREMsZ0JBQWdCLENBQUNXLElBQTdFLENBREs7QUFScEIsT0FBUDtBQVlBOztBQUNELFdBQU9oQixTQUFQO0FBQ0EsR0E1QkQ7O0FBOEJPLFdBQVNpQixZQUFULENBQXNCQyxLQUF0QixFQUFrQztBQU14QyxRQUFNQyxzQkFBd0MsR0FBRztBQUNoRCxxQkFBZTtBQUNkQyxRQUFBQSxTQUFTLEVBQUU7QUFERyxPQURpQztBQUloRCxrQkFBWTtBQUNYQSxRQUFBQSxTQUFTLEVBQUU7QUFEQSxPQUpvQztBQU9oRCxrQkFBWTtBQUNYQSxRQUFBQSxTQUFTLEVBQUU7QUFEQSxPQVBvQztBQVVoRCxzQkFBZ0I7QUFDZkEsUUFBQUEsU0FBUyxFQUFFO0FBREksT0FWZ0M7QUFhaEQsNEJBQXNCO0FBQ3JCQSxRQUFBQSxTQUFTLEVBQUU7QUFEVSxPQWIwQjtBQWdCaEQscUJBQWU7QUFDZEEsUUFBQUEsU0FBUyxFQUFFO0FBREcsT0FoQmlDO0FBbUJoRCxvQkFBYztBQUNiQSxRQUFBQSxTQUFTLEVBQUU7QUFERSxPQW5Ca0M7QUFzQmhELG1CQUFhO0FBQ1pBLFFBQUFBLFNBQVMsRUFBRTtBQURDLE9BdEJtQztBQXlCaEQsa0JBQVk7QUFDWEEsUUFBQUEsU0FBUyxFQUFFO0FBREEsT0F6Qm9DO0FBNEJoRCxtQkFBYTtBQUNaQSxRQUFBQSxTQUFTLEVBQUU7QUFEQyxPQTVCbUM7QUErQmhELG1CQUFhO0FBQ1pBLFFBQUFBLFNBQVMsRUFBRTtBQURDLE9BL0JtQztBQWtDaEQsbUJBQWE7QUFDWkEsUUFBQUEsU0FBUyxFQUFFO0FBREMsT0FsQ21DO0FBcUNoRCxtQkFBYTtBQUNaQSxRQUFBQSxTQUFTLEVBQUU7QUFEQyxPQXJDbUM7QUF3Q2hELG9CQUFjO0FBQ2JBLFFBQUFBLFNBQVMsRUFBRTtBQURFLE9BeENrQztBQTJDaEQsb0JBQWM7QUFDYkEsUUFBQUEsU0FBUyxFQUFFO0FBREUsT0EzQ2tDO0FBOENoRCxrQkFBWTtBQUNYQSxRQUFBQSxTQUFTLEVBQUU7QUFEQSxPQTlDb0M7QUFpRGhELHVCQUFpQjtBQUNoQkEsUUFBQUEsU0FBUyxFQUFFO0FBREssT0FqRCtCO0FBb0RoRCxvQkFBYyxDQUNiO0FBRGE7QUFwRGtDLEtBQWpEO0FBd0RBLFdBQU9GLEtBQUssSUFBSUEsS0FBSyxJQUFJQyxzQkFBbEIsSUFBNENBLHNCQUFzQixDQUFDRCxLQUFELENBQXRCLENBQThCRSxTQUFqRjtBQUNBOzs7O0FBQ0QsTUFBTUMsbUJBQW1CLEdBQUcsVUFDM0JuQyxVQUQyQixFQUUzQm9DLGNBRjJCLEVBRzNCQyxVQUgyQixFQUkzQnhCLGFBSjJCLEVBSzNCaEMsZ0JBTDJCLEVBTUc7QUFDOUIsUUFBTXlELGlCQUE4QyxHQUFHLEVBQXZEOztBQUNBLFFBQUlELFVBQUosRUFBZ0I7QUFDZkEsTUFBQUEsVUFBVSxDQUFDeEYsT0FBWCxDQUFtQixVQUFDMEQsUUFBRCxFQUF3QjtBQUMxQyxZQUFNTixZQUFvQixHQUFHTSxRQUFRLENBQUN1QixJQUF0QztBQUNBLFlBQU1TLFFBQWdCLEdBQUcsQ0FBQ0gsY0FBYyxHQUFHQSxjQUFjLEdBQUcsR0FBcEIsR0FBMEIsRUFBekMsSUFBK0NuQyxZQUF4RTs7QUFDQSxZQUFNdUMsY0FBYyxHQUFHN0IsMkJBQTJCLENBQUNYLFVBQUQsRUFBYU8sUUFBYixFQUF1QmdDLFFBQXZCLEVBQWlDMUIsYUFBakMsRUFBZ0RoQyxnQkFBaEQsQ0FBbEQ7O0FBQ0EsWUFBSTJELGNBQUosRUFBb0I7QUFDbkJGLFVBQUFBLGlCQUFpQixDQUFDQyxRQUFELENBQWpCLEdBQThCQyxjQUE5QjtBQUNBO0FBQ0QsT0FQRDtBQVFBOztBQUNELFdBQU9GLGlCQUFQO0FBQ0EsR0FuQkQ7O0FBcUJBLE1BQU1HLHlCQUF5QixHQUFHLFVBQ2pDekMsVUFEaUMsRUFFakMwQyxhQUZpQyxFQUdqQzdCLGFBSGlDLEVBSWpDaEMsZ0JBSmlDLEVBS0g7QUFDOUIsUUFBSThELGVBQTRDLEdBQUcsRUFBbkQ7O0FBQ0EsUUFBSUQsYUFBSixFQUFtQjtBQUNsQkEsTUFBQUEsYUFBYSxDQUFDN0YsT0FBZCxDQUFzQixVQUFDb0QsWUFBRCxFQUEwQjtBQUMvQyxZQUFJMkMsb0JBQUo7QUFFQSxZQUFNckMsUUFBdUMsR0FBR1AsVUFBVSxDQUFDUSxXQUFYLENBQXVCUCxZQUF2QixDQUFoRDs7QUFDQSxZQUFJTSxRQUFRLEtBQUtPLFNBQWpCLEVBQTRCO0FBQzNCO0FBQ0E7O0FBQ0QsWUFBSVAsUUFBUSxDQUFDRSxLQUFULEtBQW1CLG9CQUF2QixFQUE2QztBQUM1QztBQUNBbUMsVUFBQUEsb0JBQW9CLEdBQUdULG1CQUFtQixDQUN6Q25DLFVBRHlDLEVBRXpDQyxZQUZ5QyxFQUd6Q00sUUFBUSxDQUFDUSxVQUFULENBQW9COEIsZ0JBSHFCLEVBSXpDaEMsYUFKeUMsRUFLekNoQyxnQkFMeUMsQ0FBMUM7QUFPQSxTQVRELE1BU08sSUFBSTBCLFFBQVEsQ0FBQ1EsVUFBVCxLQUF3QkQsU0FBeEIsSUFBcUNQLFFBQVEsQ0FBQ1EsVUFBVCxDQUFvQk4sS0FBcEIsS0FBOEIsYUFBdkUsRUFBc0Y7QUFDNUY7QUFDQW1DLFVBQUFBLG9CQUFvQixHQUFHVCxtQkFBbUIsQ0FDekNuQyxVQUR5QyxFQUV6Q0MsWUFGeUMsRUFHekNNLFFBQVEsQ0FBQ1EsVUFBVCxDQUFvQnNCLFVBSHFCLEVBSXpDeEIsYUFKeUMsRUFLekNoQyxnQkFMeUMsQ0FBMUM7QUFPQSxTQVRNLE1BU0E7QUFDTixjQUFNdUQsY0FBYyxHQUFHbkMsWUFBWSxDQUFDNkMsUUFBYixDQUFzQixHQUF0QixJQUE2QjdDLFlBQVksQ0FBQ0UsS0FBYixDQUFtQixHQUFuQixFQUF3QjRDLE1BQXhCLENBQStCLENBQS9CLEVBQWtDLENBQWxDLEVBQXFDQyxJQUFyQyxDQUEwQyxHQUExQyxDQUE3QixHQUE4RSxFQUFyRztBQUNBSixVQUFBQSxvQkFBb0IsR0FBR1QsbUJBQW1CLENBQUNuQyxVQUFELEVBQWFvQyxjQUFiLEVBQTZCLENBQUM3QixRQUFELENBQTdCLEVBQXlDTSxhQUF6QyxFQUF3RGhDLGdCQUF4RCxDQUExQztBQUNBOztBQUVEOEQsUUFBQUEsZUFBZSxtQ0FDWEEsZUFEVyxHQUVYQyxvQkFGVyxDQUFmO0FBSUEsT0FsQ0Q7QUFtQ0E7O0FBQ0QsV0FBT0QsZUFBUDtBQUNBLEdBN0NEOztBQStDQSxNQUFNTSxlQUFlLEdBQUcsVUFDdkJDLFlBRHVCLEVBRXZCakQsWUFGdUIsRUFHdkJwQixnQkFIdUIsRUFJdkJtQixVQUp1QixFQUtHO0FBQzFCLFFBQUltRCxXQUFvQyxHQUFHRCxZQUFZLENBQUNqRCxZQUFELENBQXZEO0FBQ0EsUUFBTXdCLFlBQVksR0FBRzBCLFdBQVcsSUFBSUEsV0FBVyxDQUFDMUIsWUFBaEQ7O0FBQ0EsUUFBSTBCLFdBQUosRUFBaUI7QUFDaEIsYUFBT0QsWUFBWSxDQUFDakQsWUFBRCxDQUFuQjtBQUNBLEtBRkQsTUFFTztBQUNOa0QsTUFBQUEsV0FBVyxHQUFHeEMsMkJBQTJCLENBQUNYLFVBQUQsRUFBYUEsVUFBVSxDQUFDUSxXQUFYLENBQXVCUCxZQUF2QixDQUFiLEVBQW1EQSxZQUFuRCxFQUFpRSxJQUFqRSxFQUF1RXBCLGdCQUF2RSxDQUF6QztBQUNBOztBQUNELFFBQUksQ0FBQ3NFLFdBQUwsRUFBa0I7QUFBQTs7QUFDakIsK0JBQUF0RSxnQkFBZ0IsQ0FBQ3VFLGNBQWpCLGtGQUFtQ0MsUUFBbkMsQ0FBNENDLGFBQWEsQ0FBQ0MsVUFBMUQsRUFBc0VDLGFBQWEsQ0FBQ0MsSUFBcEYsRUFBMEZDLFNBQVMsQ0FBQ0Msc0JBQXBHO0FBQ0EsS0FWeUIsQ0FXMUI7OztBQUNBLFFBQUlSLFdBQUosRUFBaUI7QUFBQTs7QUFDaEJBLE1BQUFBLFdBQVcsQ0FBQzFCLFlBQVosR0FBMkJBLFlBQVksS0FBS0UsZ0JBQWdCLENBQUNWLE1BQWxDLEdBQTJDVSxnQkFBZ0IsQ0FBQ1YsTUFBNUQsR0FBcUVVLGdCQUFnQixDQUFDaUMsT0FBakg7QUFDQVQsTUFBQUEsV0FBVyxDQUFDVSxXQUFaLEdBQTBCLENBQUMsMkJBQUM3RCxVQUFVLENBQUN4QyxXQUFaLDRFQUFDLHNCQUF3QkMsTUFBekIsbURBQUMsdUJBQWdDcUcsYUFBakMsQ0FBM0I7QUFDQTs7QUFDRCxXQUFPWCxXQUFQO0FBQ0EsR0F0QkQ7O0FBd0JBLE1BQU1ZLHVCQUF1QixHQUFHLFVBQy9CQyxjQUQrQixFQUUvQmhFLFVBRitCLEVBRy9CbkIsZ0JBSCtCLEVBSS9Cb0Ysd0JBSitCLEVBSy9CQyx3QkFMK0IsRUFNZjtBQUNoQixRQUFNdkIsZUFBOEIsR0FBRyxFQUF2QztBQUNBLFFBQU13QixpQkFBc0IsR0FBRyxFQUEvQjtBQUNBLFFBQU05QixVQUFVLEdBQUdyQyxVQUFVLENBQUM2QyxnQkFBOUIsQ0FIZ0IsQ0FJaEI7O0FBQ0FxQixJQUFBQSx3QkFBd0IsU0FBeEIsSUFBQUEsd0JBQXdCLFdBQXhCLFlBQUFBLHdCQUF3QixDQUFFckgsT0FBMUIsQ0FBa0MsVUFBQ3VILGNBQUQsRUFBb0I7QUFDckRELE1BQUFBLGlCQUFpQixDQUFDQyxjQUFjLENBQUNDLEtBQWhCLENBQWpCLEdBQTBDLElBQTFDO0FBQ0EsS0FGRDs7QUFHQSxRQUFJTCxjQUFjLElBQUlBLGNBQWMsQ0FBQzNGLE1BQWYsR0FBd0IsQ0FBOUMsRUFBaUQ7QUFDaEQyRixNQUFBQSxjQUFjLFNBQWQsSUFBQUEsY0FBYyxXQUFkLFlBQUFBLGNBQWMsQ0FBRW5ILE9BQWhCLENBQXdCLFVBQUN5SCxZQUFELEVBQW9DO0FBQzNELFlBQU1yRyxZQUFpQixHQUFHcUcsWUFBWSxDQUFDQyxZQUF2QztBQUNBLFlBQU1DLGFBQXFCLEdBQUd2RyxZQUFZLENBQUNvRyxLQUEzQztBQUNBLFlBQU1GLGlCQUFzQixHQUFHLEVBQS9CO0FBQ0FELFFBQUFBLHdCQUF3QixTQUF4QixJQUFBQSx3QkFBd0IsV0FBeEIsWUFBQUEsd0JBQXdCLENBQUVySCxPQUExQixDQUFrQyxVQUFDdUgsY0FBRCxFQUFvQjtBQUNyREQsVUFBQUEsaUJBQWlCLENBQUNDLGNBQWMsQ0FBQ0MsS0FBaEIsQ0FBakIsR0FBMEMsSUFBMUM7QUFDQSxTQUZEOztBQUdBLFlBQUksRUFBRUcsYUFBYSxJQUFJUCx3QkFBbkIsQ0FBSixFQUFrRDtBQUNqRCxjQUFJLEVBQUVPLGFBQWEsSUFBSUwsaUJBQW5CLENBQUosRUFBMkM7QUFDMUMsZ0JBQU1NLFlBQW9DLEdBQUdDLGNBQWMsQ0FBQ0YsYUFBRCxFQUFnQjNGLGdCQUFoQixFQUFrQ21CLFVBQWxDLENBQTNEOztBQUNBLGdCQUFJeUUsWUFBSixFQUFpQjtBQUNoQjlCLGNBQUFBLGVBQWUsQ0FBQ2pELElBQWhCLENBQXFCK0UsWUFBckI7QUFDQTtBQUNEO0FBQ0Q7QUFDRCxPQWZEO0FBZ0JBLEtBakJELE1BaUJPLElBQUlwQyxVQUFKLEVBQWdCO0FBQ3RCQSxNQUFBQSxVQUFVLENBQUN4RixPQUFYLENBQW1CLFVBQUMwRCxRQUFELEVBQXdCO0FBQUE7O0FBQzFDLFlBQU1vRSxrQkFBa0IsNkJBQUdwRSxRQUFRLENBQUMvQyxXQUFaLHNGQUFHLHVCQUFzQkMsTUFBekIsNERBQUcsd0JBQThCbUgsa0JBQXpEO0FBQ0EsWUFBTUMsWUFBWSxHQUFHdEUsUUFBUSxDQUFDdUIsSUFBOUI7O0FBQ0EsWUFBSSxFQUFFK0MsWUFBWSxJQUFJWix3QkFBbEIsQ0FBSixFQUFpRDtBQUNoRCxjQUFJVSxrQkFBa0IsSUFBSSxFQUFFRSxZQUFZLElBQUlWLGlCQUFsQixDQUExQixFQUFnRTtBQUMvRCxnQkFBTU0sYUFBb0MsR0FBR0MsY0FBYyxDQUFDRyxZQUFELEVBQWVoRyxnQkFBZixFQUFpQ21CLFVBQWpDLENBQTNEOztBQUNBLGdCQUFJeUUsYUFBSixFQUFpQjtBQUNoQjlCLGNBQUFBLGVBQWUsQ0FBQ2pELElBQWhCLENBQXFCK0UsYUFBckI7QUFDQTtBQUNEO0FBQ0Q7QUFDRCxPQVhEO0FBWUE7O0FBQ0QsV0FBTzlCLGVBQVA7QUFDQSxHQTlDRDtBQWdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxXQUFTbUMsbUJBQVQsQ0FBNkJqRyxnQkFBN0IsRUFBZ0Y7QUFBQTs7QUFDL0UsUUFBTWtHLG1CQUFtQixHQUFHbEcsZ0JBQWdCLENBQUNtRyxzQkFBakIsRUFBNUI7QUFDQSxRQUFNQyxtQkFBbUIsR0FBR0YsbUJBQW1CLENBQUNHLGlCQUFwQixDQUFzQ2xGLFVBQWxFO0FBQ0EsUUFBTW1GLGVBQWUsR0FBRyxDQUFDLDJCQUFDRixtQkFBbUIsQ0FBQ3pILFdBQXJCLDRFQUFDLHNCQUFpQ0MsTUFBbEMsbURBQUMsdUJBQXlDcUcsYUFBMUMsQ0FBRCxJQUE0RCxDQUFDaUIsbUJBQW1CLENBQUNLLGVBQXpHO0FBQ0EsUUFBTUMseUJBQXlCLEdBQzlCRixlQUFlLElBQUl0RyxnQkFBZ0IsQ0FBQ3lHLHNCQUFqQixDQUF3QyxNQUFNUCxtQkFBbUIsQ0FBQ0csaUJBQXBCLENBQXNDcEQsSUFBcEYsQ0FEcEI7QUFHQSxRQUFNeUQsZUFBZSxHQUNwQkYseUJBQXlCLEdBQ3RCSixtQkFBbUIsQ0FBQ3BDLGdCQUFwQixDQUFxQzlELEdBQXJDLENBQXlDLFVBQVV3QixRQUFWLEVBQW9CO0FBQzdELGFBQU8wQyxlQUFlLENBQ3JCLEVBRHFCLEVBRXJCMUMsUUFBUSxDQUFDdUIsSUFGWSxFQUdyQnVELHlCQUhxQixFQUlyQkosbUJBSnFCLENBQXRCO0FBTUMsS0FQRCxDQURzQixHQVN0QixFQVZKO0FBYUEsV0FBT00sZUFBUDtBQUNBO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sTUFBTUMsMkJBQTJCLEdBQUcsVUFDMUNySCxnQkFEMEMsRUFFMUNzSCxNQUYwQyxFQUcxQzVHLGdCQUgwQyxFQUloQztBQUNWO0FBQ0EsUUFBTTZHLGdCQUFnQixHQUFHRCxNQUFNLENBQUNwSCxNQUFQLEtBQWtCLENBQWxCLElBQXVCb0gsTUFBTSxDQUFDbkgsS0FBUCxDQUFhLFVBQUNxSCxLQUFEO0FBQUEsYUFBVyxDQUFDQSxLQUFLLENBQUNDLGNBQU4sQ0FBcUJDLFlBQWpDO0FBQUEsS0FBYixDQUFoRCxDQUZVLENBSVY7O0FBQ0EsUUFBTUMsZ0JBQWdCLEdBQ3JCM0gsZ0JBQWdCLENBQUNFLE1BQWpCLEtBQTRCLENBQTVCLElBQWlDRixnQkFBZ0IsQ0FBQ0csS0FBakIsQ0FBdUIsVUFBQ3lILEtBQUQ7QUFBQSxhQUFXQSxLQUFLLENBQUN2SCxlQUFOLElBQXlCLENBQUN1SCxLQUFLLENBQUNDLHFCQUEzQztBQUFBLEtBQXZCLENBRGxDO0FBR0EsUUFBTTVILFdBQVcsR0FBR1MsZ0JBQWdCLENBQUNvSCxjQUFqQixFQUFwQjs7QUFDQSxRQUFJN0gsV0FBVyxJQUFJc0gsZ0JBQWYsSUFBbUNJLGdCQUF2QyxFQUF5RDtBQUN4RCxhQUFPLElBQVA7QUFDQSxLQUZELE1BRU87QUFDTixhQUFPLEtBQVA7QUFDQTtBQUNELEdBbEJNO0FBb0JQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLE1BQU1JLHVCQUF1QixHQUFHLFVBQ3RDbEcsVUFEc0MsRUFFdENuQixnQkFGc0MsRUFHSztBQUMzQyxRQUFNc0gsUUFBcUMsR0FBR3RILGdCQUFnQixDQUFDdUgsa0JBQWpCLEdBQXNDQyxzQkFBdEMsRUFBOUM7QUFDQSxRQUFNQyxtQkFBcUUsR0FBRyxDQUFBSCxRQUFRLFNBQVIsSUFBQUEsUUFBUSxXQUFSLFlBQUFBLFFBQVEsQ0FBRWpELFlBQVYsS0FBMEIsRUFBeEc7O0FBQ0EsUUFBTVAsZUFBNEMsR0FBR0YseUJBQXlCLENBQzdFekMsVUFENkUsRUFFN0V1RyxNQUFNLENBQUNDLElBQVAsQ0FBWUYsbUJBQVosRUFBaUN2SCxHQUFqQyxDQUFxQyxVQUFDSyxHQUFEO0FBQUEsYUFBU2lDLFNBQVMsQ0FBQ29GLDRCQUFWLENBQXVDckgsR0FBdkMsQ0FBVDtBQUFBLEtBQXJDLENBRjZFLEVBRzdFLElBSDZFLEVBSTdFUCxnQkFKNkUsQ0FBOUU7O0FBTUEsUUFBTXFFLFlBQXNELEdBQUcsRUFBL0Q7O0FBRUEsU0FBSyxJQUFNd0QsSUFBWCxJQUFtQkosbUJBQW5CLEVBQXdDO0FBQ3ZDLFVBQU1uRCxXQUFXLEdBQUdtRCxtQkFBbUIsQ0FBQ0ksSUFBRCxDQUF2QztBQUNBLFVBQU16SSxZQUFZLEdBQUdvRCxTQUFTLENBQUNvRiw0QkFBVixDQUF1Q0MsSUFBdkMsQ0FBckI7QUFDQSxVQUFNbEUsY0FBYyxHQUFHRyxlQUFlLENBQUMxRSxZQUFELENBQXRDO0FBQ0EsVUFBTTBJLElBQUksR0FBR3hELFdBQVcsQ0FBQ3dELElBQVosS0FBcUIsTUFBckIsR0FBOEJySyxlQUFlLENBQUNzSyxJQUE5QyxHQUFxRHRLLGVBQWUsQ0FBQ3NILE9BQWxGO0FBQ0EsVUFBTWlELFlBQVksR0FDakIxRCxXQUFXLElBQUlBLFdBQUosYUFBSUEsV0FBSixlQUFJQSxXQUFXLENBQUUwRCxZQUE1QixHQUNHQyxnQkFBZ0IsQ0FBQzlHLFVBQUQsRUFBYW5CLGdCQUFiLEVBQStCNkgsSUFBL0IsRUFBcUNKLG1CQUFyQyxDQURuQixHQUVHeEYsU0FISjtBQUlBb0MsTUFBQUEsWUFBWSxDQUFDd0QsSUFBRCxDQUFaLEdBQXFCO0FBQ3BCdEgsUUFBQUEsR0FBRyxFQUFFc0gsSUFEZTtBQUVwQkMsUUFBQUEsSUFBSSxFQUFFQSxJQUZjO0FBR3BCbkgsUUFBQUEsY0FBYyxFQUFFZ0QsY0FBRixhQUFFQSxjQUFGLHVCQUFFQSxjQUFjLENBQUVoRCxjQUhaO0FBSXBCZ0MsUUFBQUEsYUFBYSxFQUFFLENBQUFnQixjQUFjLFNBQWQsSUFBQUEsY0FBYyxXQUFkLFlBQUFBLGNBQWMsQ0FBRWhCLGFBQWhCLEtBQWlDdkQsWUFKNUI7QUFLcEI4SSxRQUFBQSxRQUFRLEVBQUU1RCxXQUFXLENBQUM0RCxRQUxGO0FBTXBCbEYsUUFBQUEsS0FBSyxFQUFFc0IsV0FBVyxDQUFDdEIsS0FOQztBQU9wQm1GLFFBQUFBLFFBQVEsRUFBRTdELFdBQVcsQ0FBQzZELFFBQVosSUFBd0I7QUFBRUMsVUFBQUEsU0FBUyxFQUFFQyxTQUFTLENBQUNDO0FBQXZCLFNBUGQ7QUFRcEIxRixRQUFBQSxZQUFZLEVBQUUwQixXQUFXLENBQUMxQixZQUFaLElBQTRCRSxnQkFBZ0IsQ0FBQ2lDLE9BUnZDO0FBU3BCd0QsUUFBQUEsUUFBUSxFQUFFakUsV0FBVyxDQUFDaUUsUUFURjtBQVVwQlAsUUFBQUEsWUFBWSxFQUFFQTtBQVZNLE9BQXJCO0FBWUE7O0FBQ0QsV0FBTzNELFlBQVA7QUFDQSxHQXJDTTs7OztBQXVDQSxNQUFNd0IsY0FBYyxHQUFHLFVBQVV6RSxZQUFWLEVBQWdDcEIsZ0JBQWhDLEVBQW9FbUIsVUFBcEUsRUFBNEY7QUFDekgsV0FBT2lELGVBQWUsQ0FBQyxFQUFELEVBQUtoRCxZQUFMLEVBQW1CcEIsZ0JBQW5CLEVBQXFDbUIsVUFBckMsQ0FBdEI7QUFDQSxHQUZNOzs7O0FBSUEsTUFBTXFILHFCQUFxQixHQUFHLFVBQVVDLDZCQUFWLEVBQThDQyxZQUE5QyxFQUFpRTtBQUNyRyxRQUFJQSxZQUFZLEtBQUssb0JBQWpCLElBQXlDQSxZQUFZLEtBQUsseUJBQTlELEVBQXlGO0FBQ3hGLFVBQUlDLE1BQU0sR0FBRyxFQUFiOztBQUNBLFVBQUlGLDZCQUE2QixJQUFJQSw2QkFBNkIsQ0FBQ0MsWUFBRCxDQUFsRSxFQUFrRjtBQUNqRkMsUUFBQUEsTUFBTSxHQUFHRiw2QkFBNkIsQ0FBQ0MsWUFBRCxDQUE3QixDQUE0Q3hJLEdBQTVDLENBQWdELFVBQVUwSSxTQUFWLEVBQTBCO0FBQ2xGLGlCQUFPQSxTQUFTLENBQUNDLGFBQVYsSUFBMkJELFNBQVMsQ0FBQ3BELEtBQTVDO0FBQ0EsU0FGUSxDQUFUO0FBR0E7O0FBQ0QsYUFBT21ELE1BQVA7QUFDQSxLQVJELE1BUU8sSUFBSUQsWUFBWSxLQUFLLDBCQUFyQixFQUFpRDtBQUN2RCxVQUFNSSxtQkFBbUIsR0FBRyxFQUE1Qjs7QUFDQSxVQUFJTCw2QkFBNkIsSUFBSUEsNkJBQTZCLENBQUNNLDRCQUFuRSxFQUFpRztBQUNoR04sUUFBQUEsNkJBQTZCLENBQUNNLDRCQUE5QixDQUEyRC9LLE9BQTNELENBQW1FLFVBQVU0SyxTQUFWLEVBQTBCO0FBQzVGO0FBQ0EsY0FBSUUsbUJBQW1CLENBQUNGLFNBQVMsQ0FBQ0ksUUFBVixDQUFtQnhELEtBQXBCLENBQXZCLEVBQW1EO0FBQ2xEc0QsWUFBQUEsbUJBQW1CLENBQUNGLFNBQVMsQ0FBQ0ksUUFBVixDQUFtQnhELEtBQXBCLENBQW5CLENBQThDM0UsSUFBOUMsQ0FBbUQrSCxTQUFTLENBQUNLLGtCQUE3RDtBQUNBLFdBRkQsTUFFTztBQUNOSCxZQUFBQSxtQkFBbUIsQ0FBQ0YsU0FBUyxDQUFDSSxRQUFWLENBQW1CeEQsS0FBcEIsQ0FBbkIsR0FBZ0QsQ0FBQ29ELFNBQVMsQ0FBQ0ssa0JBQVgsQ0FBaEQ7QUFDQTtBQUNELFNBUEQ7QUFRQTs7QUFDRCxhQUFPSCxtQkFBUDtBQUNBOztBQUNELFdBQU9MLDZCQUFQO0FBQ0EsR0F4Qk07Ozs7QUEwQlAsTUFBTVMsMkJBQTJCLEdBQUcsWUFBWTtBQUMvQyxXQUFPO0FBQ05qRyxNQUFBQSxJQUFJLEVBQUUsU0FEQTtBQUVON0UsTUFBQUEsSUFBSSxFQUFFLFNBRkE7QUFHTitLLE1BQUFBLFFBQVEsRUFBRXhMLGVBSEo7QUFJTnlMLE1BQUFBLGFBQWEsRUFBRTtBQUpULEtBQVA7QUFNQSxHQVBEOztBQVNBLE1BQU1DLDhCQUE4QixHQUFHLFlBQVk7QUFDbEQsV0FBTztBQUNOcEcsTUFBQUEsSUFBSSxFQUFFLFlBREE7QUFFTjdFLE1BQUFBLElBQUksRUFBRSxZQUZBO0FBR05HLE1BQUFBLFVBQVUsRUFBRSxFQUhOO0FBSU5GLE1BQUFBLEtBQUssRUFBRSxFQUpEO0FBS044SyxNQUFBQSxRQUFRLEVBQUV4TCxlQUxKO0FBTU4yTCxNQUFBQSxZQUFZLEVBQUU7QUFOUixLQUFQO0FBUUEsR0FURDs7QUFXQSxNQUFNQyxxQkFBcUIsR0FBRyxVQUFVdkosZ0JBQVYsRUFBOEM7QUFBQTs7QUFDM0UscUNBQU9BLGdCQUFnQixDQUFDd0osWUFBakIsRUFBUCxxRkFBTyx1QkFBaUM3SyxXQUF4QyxxRkFBTyx1QkFBOEM4SyxZQUFyRCwyREFBTyx1QkFBNERDLGtCQUFuRTtBQUNBLEdBRkQ7O0FBSU8sTUFBTUMseUJBQXlCLEdBQUcsVUFBVTNKLGdCQUFWLEVBQThDNEosZUFBOUMsRUFBdUU7QUFBQTs7QUFDL0csUUFBTUMsdUJBQTRCLDZCQUFHN0osZ0JBQWdCLENBQUN3SixZQUFqQixFQUFILHFGQUFHLHVCQUFpQzdLLFdBQXBDLHFGQUFHLHVCQUE4QzhLLFlBQWpELDJEQUFHLHVCQUE0REssc0JBQWpHO0FBQ0EsUUFBTUMscUJBQXFCLEdBQUdGLHVCQUF1QixJQUFJQSx1QkFBdUIsQ0FBQ0csb0JBQWpGO0FBQ0EsV0FDQ0QscUJBQXFCLElBQ3JCQSxxQkFBcUIsQ0FBQ0UsSUFBdEIsQ0FBMkIsVUFBVUMsbUJBQVYsRUFBb0M7QUFDOUQsYUFDQ0EsbUJBQW1CLElBQ25CQSxtQkFBbUIsQ0FBQ0Msa0JBRHBCLEtBRUNELG1CQUFtQixDQUFDQyxrQkFBcEIsQ0FBdUNDLHVCQUF2QyxLQUFtRVIsZUFBbkUsSUFDQU0sbUJBQW1CLENBQUNDLGtCQUFwQixDQUF1QzNFLEtBQXZDLEtBQWlEb0UsZUFIbEQsQ0FERDtBQU1BLEtBUEQsQ0FGRDtBQVdBLEdBZE07Ozs7QUFnQlAsTUFBTVMsdUJBQXVCLEdBQUcsVUFBVUMsZ0JBQVYsRUFBaUM7QUFDaEUsV0FBTztBQUNOL0osTUFBQUEsR0FBRyxFQUFFK0osZ0JBQWdCLENBQUMvSixHQURoQjtBQUVOSSxNQUFBQSxjQUFjLEVBQUUySixnQkFBZ0IsQ0FBQzNKLGNBRjNCO0FBR05nQyxNQUFBQSxhQUFhLEVBQUUySCxnQkFBZ0IsQ0FBQzNILGFBSDFCO0FBSU5NLE1BQUFBLElBQUksRUFBRXFILGdCQUFnQixDQUFDM0gsYUFKakI7QUFLTkssTUFBQUEsS0FBSyxFQUFFc0gsZ0JBQWdCLENBQUN0SCxLQUxsQjtBQU1Oc0csTUFBQUEsWUFBWSxFQUFFZ0IsZ0JBQWdCLENBQUMxSCxZQUFqQixLQUFrQyxRQU4xQztBQU9OMkgsTUFBQUEsT0FBTyxFQUFFLE9BUEg7QUFRTnZGLE1BQUFBLFdBQVcsRUFBRXNGLGdCQUFnQixDQUFDdEYsV0FSeEI7QUFTTndGLE1BQUFBLGFBQWEsRUFBRUYsZ0JBQWdCLENBQUNFLGFBVDFCO0FBVU41SCxNQUFBQSxZQUFZLEVBQUUwSCxnQkFBZ0IsQ0FBQzFILFlBVnpCO0FBV051RixNQUFBQSxRQUFRLEVBQUVtQyxnQkFBZ0IsQ0FBQ25DLFFBWHJCO0FBWU5MLE1BQUFBLElBQUksRUFBRXdDLGdCQUFnQixDQUFDeEMsSUFaakI7QUFhTkksTUFBQUEsUUFBUSxFQUFFb0MsZ0JBQWdCLENBQUNwQyxRQWJyQjtBQWNOdUMsTUFBQUEsSUFBSSxFQUFFSCxnQkFBZ0IsQ0FBQ0c7QUFkakIsS0FBUDtBQWdCQSxHQWpCRDs7QUFtQk8sTUFBTUMsNEJBQTRCLEdBQUcsVUFBVUMsWUFBVixFQUE2QjtBQUN4RSxRQUFNQywyQkFBMkIsR0FBRyxDQUNuQyxhQURtQyxFQUVuQyxZQUZtQyxFQUduQyxhQUhtQyxFQUluQyxZQUptQyxFQUtuQyxrQkFMbUMsRUFNbkMsOEJBTm1DLENBQXBDO0FBU0FELElBQUFBLFlBQVksQ0FBQ0UsSUFBYixDQUFrQixVQUFVQyxDQUFWLEVBQWtCQyxDQUFsQixFQUEwQjtBQUMzQyxhQUFPSCwyQkFBMkIsQ0FBQ2hLLE9BQTVCLENBQW9Da0ssQ0FBcEMsSUFBeUNGLDJCQUEyQixDQUFDaEssT0FBNUIsQ0FBb0NtSyxDQUFwQyxDQUFoRDtBQUNBLEtBRkQ7QUFJQSxXQUFPSixZQUFZLENBQUMsQ0FBRCxDQUFuQjtBQUNBLEdBZk07Ozs7QUFpQkEsTUFBTUssV0FBVyxHQUFHLFVBQVVDLG9CQUFWLEVBQXFDQyxzQkFBckMsRUFBa0U7QUFBQTs7QUFDNUYsUUFBTUMsZUFBZSxHQUFHRixvQkFBSCxhQUFHQSxvQkFBSCxnREFBR0Esb0JBQW9CLENBQUVyTSxNQUF6QiwwREFBRyxzQkFBOEJ3TSxJQUF0RDtBQUFBLFFBQ0NDLHlCQUF5QixHQUN4QkYsZUFBZSxLQUNiRixvQkFBb0IsS0FBSUEsb0JBQUosYUFBSUEsb0JBQUosaURBQUlBLG9CQUFvQixDQUFFck0sTUFBMUIscUZBQUksdUJBQThCd00sSUFBbEMscUZBQUksdUJBQW9Dek0sV0FBeEMscUZBQUksdUJBQWlEd0QsRUFBckQsMkRBQUksdUJBQXFEbUosZUFBekQsQ0FBckIsSUFDQ0osc0JBQXNCLEtBQUlBLHNCQUFKLGFBQUlBLHNCQUFKLGdEQUFJQSxzQkFBc0IsQ0FBRS9JLEVBQTVCLDBEQUFJLHNCQUE0Qm1KLGVBQWhDLENBRlQsQ0FGakI7O0FBTUEsUUFBSUQseUJBQUosRUFBK0I7QUFDOUIsVUFBSUEseUJBQXlCLENBQUNoSixPQUExQixPQUF3QyxpQ0FBNUMsRUFBK0U7QUFDOUUsZUFBTyxhQUFQO0FBQ0EsT0FGRCxNQUVPLElBQUlnSix5QkFBeUIsQ0FBQ2hKLE9BQTFCLE9BQXdDLGlDQUE1QyxFQUErRTtBQUNyRixlQUFPLGtCQUFQO0FBQ0E7O0FBQ0QsYUFBTyxrQkFBUCxDQU44QixDQU1IO0FBQzNCOztBQUNELFdBQU84SSxlQUFlLEdBQUcsa0JBQUgsR0FBd0IsT0FBOUM7QUFDQSxHQWhCTTs7OztBQWtCUCxNQUFNSSxrQkFBa0IsR0FBRyxVQUFVdkwsZ0JBQVYsRUFBOENzSyxnQkFBOUMsRUFBcUVrQixXQUFyRSxFQUF1RjtBQUFBOztBQUNqSCxRQUFJQyxhQUFhLEdBQUdwQix1QkFBdUIsQ0FBQ0MsZ0JBQUQsQ0FBM0M7O0FBQ0EsUUFBTW9CLGVBQWUsR0FBR3BCLGdCQUFnQixDQUFDM0osY0FBekM7O0FBRUEsUUFBSSxDQUFDK0ssZUFBTCxFQUFzQjtBQUNyQixhQUFPRCxhQUFQO0FBQ0E7O0FBQ0QsUUFBTUUsb0JBQW9CLEdBQUczTCxnQkFBZ0IsQ0FBQ3lHLHNCQUFqQixDQUF3Q2lGLGVBQXhDLEVBQXlEdkYsc0JBQXpELEdBQWtGeUYsWUFBL0c7QUFFQSxRQUFNWCxvQkFBb0IsR0FBR1Usb0JBQUgsYUFBR0Esb0JBQUgsdUJBQUdBLG9CQUFvQixDQUFFaE4sV0FBbkQ7QUFDQSxRQUFNdU0sc0JBQXNCLEdBQUdsTCxnQkFBSCxhQUFHQSxnQkFBSCxpREFBR0EsZ0JBQWdCLENBQUVtRyxzQkFBbEIsR0FBMkN5RixZQUE5QywyREFBRyx1QkFBeURqTixXQUF4RjtBQUVBLFFBQU1rTixjQUFjLEdBQUdMLFdBQVcsQ0FBQ00sYUFBbkM7QUFDQSxRQUFNQyxZQUFZLEdBQUdQLFdBQVcsQ0FBQ1EsV0FBakM7QUFDQVAsSUFBQUEsYUFBYSxHQUFHL0QsTUFBTSxDQUFDdUUsTUFBUCxDQUFjUixhQUFkLEVBQTZCO0FBQzVDSyxNQUFBQSxhQUFhLEVBQUVELGNBRDZCO0FBRTVDRyxNQUFBQSxXQUFXLEVBQUVELFlBRitCO0FBRzVDeEIsTUFBQUEsT0FBTyxFQUFFUyxXQUFXLENBQUNDLG9CQUFELEVBQXVCQyxzQkFBdkI7QUFId0IsS0FBN0IsQ0FBaEI7QUFLQSxXQUFPTyxhQUFQO0FBQ0EsR0FwQkQ7O0FBc0JPLE1BQU1TLFlBQVksR0FBRyxVQUFVdEQsU0FBVixFQUEwQjtBQUNyRCxRQUFJdUQsYUFBYSxHQUFHLElBQXBCLENBRHFELENBRXJEOztBQUNBLFlBQVF2RCxTQUFTLENBQUN3RCxnQkFBbEI7QUFDQyxXQUFLLGtCQUFMO0FBQ0EsV0FBSyxhQUFMO0FBQ0EsV0FBSyxhQUFMO0FBQ0NELFFBQUFBLGFBQWEsR0FBRyxLQUFoQjtBQUNBOztBQUNEO0FBQ0M7QUFQRjs7QUFTQSxRQUFJdkQsU0FBUyxDQUFDZCxJQUFWLElBQWtCYyxTQUFTLENBQUNkLElBQVYsQ0FBZWxILE9BQWYsQ0FBdUIsU0FBdkIsSUFBb0MsQ0FBMUQsRUFBNkQ7QUFDNUR1TCxNQUFBQSxhQUFhLEdBQUcsS0FBaEI7QUFDQTs7QUFDRCxXQUFPQSxhQUFQO0FBQ0EsR0FoQk07Ozs7QUFrQlAsTUFBTUUsOEJBQThCLEdBQUcsVUFDdENyTSxnQkFEc0MsRUFLckM7QUFBQTs7QUFBQSxRQUhEc00sUUFHQyx1RUFIZ0MsRUFHaEM7QUFBQSxRQUZEM0wsY0FFQyx1RUFGd0IsRUFFeEI7QUFBQSxRQUREcUIsYUFDQyx1RUFEd0IsS0FDeEI7QUFDRDtBQUNBLFFBQU1qRCxpQkFBa0QsR0FBR2Usb0JBQW9CLENBQUN3TSxRQUFELEVBQVd0TSxnQkFBWCxDQUEvRSxDQUZDLENBSUQ7O0FBQ0EsUUFBTW9GLHdCQUFpRCxHQUFHdEcsMkJBQTJCLENBQUNDLGlCQUFELENBQXJGO0FBQ0EsUUFBTW9DLFVBQVUsR0FBR25CLGdCQUFnQixDQUFDdU0sYUFBakIsRUFBbkIsQ0FOQyxDQU9EOztBQUNBLFFBQU1sSCx3QkFBd0IsR0FBSzFFLGNBQWMsK0JBQUlYLGdCQUFnQixDQUFDd00sdUJBQWpCLENBQXlDN0wsY0FBekMsQ0FBSiwyREFBSSx1QkFBMERmLFVBQTlELENBQWYsK0JBQ2pDdUIsVUFBVSxDQUFDeEMsV0FEc0IscUZBQ2pDLHVCQUF3QndELEVBRFMsMkRBQ2pDLHVCQUE0QnNLLGVBREssS0FFakMsRUFGRCxDQVJDLENBWUQ7O0FBQ0EsUUFBTXBJLFlBQXlDLG1DQUUzQ2YsbUJBQW1CLENBQUNuQyxVQUFELEVBQWEsRUFBYixFQUFpQkEsVUFBVSxDQUFDNkMsZ0JBQTVCLEVBQThDaEMsYUFBOUMsRUFBNkRoQyxnQkFBN0QsQ0FGd0IsR0FJM0M0RCx5QkFBeUIsQ0FDM0J6QyxVQUQyQixFQUUzQm5CLGdCQUFnQixDQUFDdUgsa0JBQWpCLEdBQXNDQyxzQkFBdEMsR0FBK0RrRixvQkFGcEMsRUFHM0IxSyxhQUgyQixFQUkzQmhDLGdCQUoyQixDQUprQixDQUEvQzs7QUFXQSxRQUFJbUYsY0FBcUIsR0FBRyxFQUE1QjtBQUNBLFFBQU1qRyxnQkFBZ0IsR0FBR3lOLG1CQUFtQixDQUFDeEwsVUFBRCxFQUFhbkIsZ0JBQWIsQ0FBNUM7O0FBQ0EsUUFBSWQsZ0JBQUosRUFBc0I7QUFDckJpRyxNQUFBQSxjQUFjLEdBQUdqRyxnQkFBZ0IsQ0FBQzBOLGFBQWxDO0FBQ0E7O0FBRUQsUUFBTUMsa0JBQXVCLEdBQzVCLENBQUF4SCx3QkFBd0IsU0FBeEIsSUFBQUEsd0JBQXdCLFdBQXhCLFlBQUFBLHdCQUF3QixDQUFFckcsTUFBMUIsQ0FBaUMsVUFBQzhFLGVBQUQsRUFBaUNILGNBQWpDLEVBQW9EO0FBQ3BGLFVBQU12QyxZQUFZLEdBQUd1QyxjQUFjLENBQUM2QixLQUFwQzs7QUFDQSxVQUFJLEVBQUVwRSxZQUFZLElBQUlnRSx3QkFBbEIsQ0FBSixFQUFpRDtBQUNoRCxZQUFNZCxXQUFvQyxHQUFHRixlQUFlLENBQUNDLFlBQUQsRUFBZWpELFlBQWYsRUFBNkJwQixnQkFBN0IsRUFBK0NtQixVQUEvQyxDQUE1RDs7QUFDQSxZQUFJbUQsV0FBSixFQUFpQjtBQUNoQkEsVUFBQUEsV0FBVyxDQUFDakcsS0FBWixHQUFvQixFQUFwQjtBQUNBaUcsVUFBQUEsV0FBVyxDQUFDL0YsVUFBWixHQUF5QixFQUF6QjtBQUNBdUYsVUFBQUEsZUFBZSxDQUFDakQsSUFBaEIsQ0FBcUJ5RCxXQUFyQjtBQUNBO0FBQ0Q7O0FBQ0QsYUFBT1IsZUFBUDtBQUNBLEtBWEQsRUFXRyxFQVhILE1BV1UsRUFaWDs7QUFjQSxRQUFNZ0osbUJBQW1CLEdBQUc1SCx1QkFBdUIsQ0FDbERDLGNBRGtELEVBRWxEaEUsVUFGa0QsRUFHbERuQixnQkFIa0QsRUFJbERvRix3QkFKa0QsRUFLbERDLHdCQUxrRCxDQUFuRDs7QUFRQSxXQUFPO0FBQ05ELE1BQUFBLHdCQUF3QixFQUFFQSx3QkFEcEI7QUFFTmpFLE1BQUFBLFVBQVUsRUFBRUEsVUFGTjtBQUdOa0UsTUFBQUEsd0JBQXdCLEVBQUVBLHdCQUhwQjtBQUlOaEIsTUFBQUEsWUFBWSxFQUFFQSxZQUpSO0FBS053SSxNQUFBQSxrQkFBa0IsRUFBRUEsa0JBTGQ7QUFNTkMsTUFBQUEsbUJBQW1CLEVBQUVBO0FBTmYsS0FBUDtBQVFBLEdBakVEOztBQWtFTyxNQUFNQyxzQkFBc0IsR0FBRyxVQUNyQ0Ysa0JBRHFDLEVBRXJDN00sZ0JBRnFDLEVBR3JDZ04sMEJBSHFDLEVBSXBDO0FBQUE7O0FBQ0Q7QUFDQSxRQUFNQyxtQkFBd0IsR0FBRyxFQUFqQztBQUNBLFFBQU1DLFdBQWdCLEdBQUcsRUFBekI7O0FBQ0EsUUFBTUMsYUFBYSxHQUFHLFVBQVV6TCxRQUFWLEVBQThCbkIsR0FBOUIsRUFBMkM7QUFDaEUsVUFBTWlMLFdBQVcsR0FBRzRCLGFBQWEsQ0FBQzFMLFFBQUQsRUFBV0EsUUFBWCxhQUFXQSxRQUFYLHVCQUFXQSxRQUFRLENBQUVvRyxJQUFyQixDQUFqQztBQUNBbUYsTUFBQUEsbUJBQW1CLENBQUNwTSxJQUFwQixDQUF5QmEsUUFBekIsYUFBeUJBLFFBQXpCLHVCQUF5QkEsUUFBUSxDQUFFb0csSUFBbkM7O0FBQ0EsVUFDQyxDQUFBcEcsUUFBUSxTQUFSLElBQUFBLFFBQVEsV0FBUixZQUFBQSxRQUFRLENBQUVvRyxJQUFWLE1BQW1CcEssVUFBbkIsS0FDQzhOLFdBQVcsQ0FBQ1EsV0FBWixDQUF3QnFCLFFBQXhCLEtBQXFDcEwsU0FBckMsSUFBa0R1SixXQUFXLENBQUNRLFdBQVosQ0FBd0JxQixRQUF4QixLQUFxQyxJQUR4RixDQURELEVBR0U7QUFDRDdCLFFBQUFBLFdBQVcsQ0FBQ00sYUFBWixDQUEwQndCLHFCQUExQixHQUFrRCxLQUFsRDtBQUNBOztBQUNESixNQUFBQSxXQUFXLENBQUMzTSxHQUFELENBQVgsR0FBbUJpTCxXQUFuQjtBQUNBLEtBVkQ7O0FBWUEsUUFBSXdCLDBCQUFKLEVBQWdDO0FBQy9CSCxNQUFBQSxrQkFBa0IsR0FBR0Esa0JBQWtCLENBQUM1TCxNQUFuQixDQUEwQitMLDBCQUExQixDQUFyQjtBQUNBLEtBbEJBLENBbUJEOzs7QUFDQUgsSUFBQUEsa0JBQWtCLENBQUM3TyxPQUFuQixDQUEyQixVQUFVdVAsY0FBVixFQUErQjtBQUN6RCxVQUFJQSxjQUFjLENBQUM1TSxjQUFuQixFQUFtQztBQUNsQyxZQUFNNk0sdUJBQXVCLEdBQUd4TixnQkFBZ0IsQ0FBQ3lHLHNCQUFqQixDQUF3QzhHLGNBQWMsQ0FBQzVNLGNBQXZELENBQWhDO0FBQ0EsWUFBTThNLG9CQUFvQixHQUFHRCx1QkFBdUIsQ0FBQ3JILHNCQUF4QixHQUFpRHlGLFlBQTlFOztBQUNBdUIsUUFBQUEsYUFBYSxDQUFDTSxvQkFBRCxFQUF1QkYsY0FBYyxDQUFDaE4sR0FBdEMsQ0FBYjtBQUNBLE9BSkQsTUFJTztBQUNOME0sUUFBQUEsbUJBQW1CLENBQUNwTSxJQUFwQixDQUF5Qm5ELFVBQXpCO0FBQ0F3UCxRQUFBQSxXQUFXLENBQUNLLGNBQWMsQ0FBQ2hOLEdBQWhCLENBQVgsR0FBa0M7QUFBRXVILFVBQUFBLElBQUksRUFBRW5LO0FBQVIsU0FBbEM7QUFDQTtBQUNELEtBVEQsRUFwQkMsQ0ErQkQ7O0FBQ0EsUUFBTStQLG1CQUFtQiw4QkFBRzFOLGdCQUFnQixDQUFDd0osWUFBakIsRUFBSCx1RkFBRyx3QkFBaUM3SyxXQUFwQyx1RkFBRyx3QkFBOEM4SyxZQUFqRCw0REFBRyx3QkFBNERrRSxrQkFBeEY7QUFDQSxRQUFNQyxJQUFJLEdBQUcsRUFBYjtBQUNBQSxJQUFBQSxJQUFJLENBQUMsb0JBQUQsQ0FBSixHQUE2QnBGLHFCQUFxQixDQUFDa0YsbUJBQUQsRUFBc0Isb0JBQXRCLENBQXJCLElBQW9FLEVBQWpHO0FBQ0FFLElBQUFBLElBQUksQ0FBQyx5QkFBRCxDQUFKLEdBQWtDcEYscUJBQXFCLENBQUNrRixtQkFBRCxFQUFzQix5QkFBdEIsQ0FBckIsSUFBeUUsRUFBM0c7QUFDQUUsSUFBQUEsSUFBSSxDQUFDLDBCQUFELENBQUosR0FBbUNwRixxQkFBcUIsQ0FBQ2tGLG1CQUFELEVBQXNCLDBCQUF0QixDQUFyQixJQUEwRSxFQUE3RztBQUVBLFFBQU1HLGNBQWMsR0FBRzdOLGdCQUFnQixDQUFDb0gsY0FBakIsRUFBdkI7QUFDQSxRQUFNMEcsVUFBVSxHQUFHRCxjQUFjLENBQUN2TSxLQUFmLENBQXFCLEdBQXJCLENBQW5COztBQUNBLFFBQUl3TSxVQUFVLENBQUN0TyxNQUFYLEdBQW9CLENBQXhCLEVBQTJCO0FBQzFCLFVBQU1vSyxlQUFlLEdBQUdrRSxVQUFVLENBQUNBLFVBQVUsQ0FBQ3RPLE1BQVgsR0FBb0IsQ0FBckIsQ0FBbEM7QUFDQXNPLE1BQUFBLFVBQVUsQ0FBQzVKLE1BQVgsQ0FBa0IsQ0FBQyxDQUFuQixFQUFzQixDQUF0QjtBQUNBLFVBQU0yRix1QkFBdUIsR0FBR0YseUJBQXlCLENBQUMzSixnQkFBRCxFQUFtQjRKLGVBQW5CLENBQXpEO0FBQ0EsVUFBTW1FLDZCQUE2QixHQUFHbEUsdUJBQXVCLElBQUlBLHVCQUF1QixDQUFDOEQsa0JBQXpGO0FBQ0FDLE1BQUFBLElBQUksQ0FBQ0ksa0JBQUwsQ0FBd0IvTSxNQUF4QixDQUErQnVILHFCQUFxQixDQUFDdUYsNkJBQUQsRUFBZ0Msb0JBQWhDLENBQXJCLElBQThFLEVBQTdHO0FBQ0FILE1BQUFBLElBQUksQ0FBQ0ssdUJBQUwsQ0FBNkJoTixNQUE3QixDQUFvQ3VILHFCQUFxQixDQUFDdUYsNkJBQUQsRUFBZ0MseUJBQWhDLENBQXJCLElBQW1GLEVBQXZIO0FBQ0FILE1BQUFBLElBQUksQ0FBQ00sd0JBQUwsbUNBQ0sxRixxQkFBcUIsQ0FBQ3VGLDZCQUFELEVBQWdDLDBCQUFoQyxDQUFyQixJQUFvRixFQUR6RixHQUVJSCxJQUFJLENBQUNNLHdCQUZUO0FBSUE7O0FBQ0QsUUFBTUMsZUFBZSxHQUFHQyx3QkFBd0IsQ0FBQ3BPLGdCQUFELENBQWhEO0FBQ0EsUUFBTXFPLGNBQWMsR0FBR1QsSUFBSSxDQUFDSSxrQkFBNUI7QUFDQSxRQUFNTSxtQkFBbUIsR0FBR1YsSUFBSSxDQUFDSyx1QkFBakM7QUFDQSxRQUFJeEMsYUFBSjtBQUNBLFFBQU04QyxrQkFBdUIsR0FBRyxFQUFoQyxDQXhEQyxDQTBERDs7QUFDQTFCLElBQUFBLGtCQUFrQixDQUFDN08sT0FBbkIsQ0FBMkIsVUFBVXdRLGlCQUFWLEVBQWtDO0FBQzVELFVBQU1DLGtCQUFrQixHQUFHRCxpQkFBM0I7QUFDQSxVQUFJN0ksYUFBSjs7QUFDQSxVQUFJOEksa0JBQWtCLENBQUM5TCxhQUF2QixFQUFzQztBQUNyQ2dELFFBQUFBLGFBQWEsR0FBRzhJLGtCQUFrQixDQUFDOUwsYUFBbkIsQ0FBaUMrTCxPQUFqQyxDQUF5QyxRQUF6QyxFQUFtRCxFQUFuRCxDQUFoQjtBQUNBOztBQUNELFVBQUlKLG1CQUFtQixDQUFDMU4sT0FBcEIsQ0FBNEIrRSxhQUE1QixNQUErQyxDQUFDLENBQXBELEVBQXVEO0FBQ3REOEYsUUFBQUEsYUFBYSxHQUFHRixrQkFBa0IsQ0FBQ3ZMLGdCQUFELEVBQW1CeU8sa0JBQW5CLEVBQXVDdkIsV0FBVyxDQUFDc0IsaUJBQWlCLENBQUNqTyxHQUFuQixDQUFsRCxDQUFsQzs7QUFDQSxZQUFJa0wsYUFBSixFQUFtQjtBQUNsQkEsVUFBQUEsYUFBYSxHQUFHL0QsTUFBTSxDQUFDdUUsTUFBUCxDQUFjUixhQUFkLEVBQTZCO0FBQzVDckMsWUFBQUEsYUFBYSxFQUFFLENBQUNxQyxhQUFhLENBQUN6RyxXQUFmLElBQThCa0gsWUFBWSxDQUFDVCxhQUFELENBQTFDLEdBQTRELENBQUMsQ0FBN0QsR0FBaUUsQ0FEcEM7QUFFNUNrRCxZQUFBQSxRQUFRLEVBQUVsRCxhQUFhLENBQUN6RyxXQUFkLElBQTZCcUosY0FBYyxDQUFDek4sT0FBZixDQUF1QitFLGFBQXZCLEtBQXlDLENBRnBDO0FBRzVDNkUsWUFBQUEsYUFBYSxFQUFFMkQsZUFINkI7QUFJNUNoRixZQUFBQSxRQUFRLEVBQUUrRCxXQUFXLENBQUNzQixpQkFBaUIsQ0FBQ2pPLEdBQW5CLENBQVgsQ0FBbUN1SDtBQUpELFdBQTdCLENBQWhCO0FBT0F5RyxVQUFBQSxrQkFBa0IsQ0FBQzFOLElBQW5CLENBQXdCNEssYUFBeEI7QUFDQTtBQUNEO0FBQ0QsS0FuQkQsRUEzREMsQ0FnRkQ7O0FBQ0EsbUNBQUl6TCxnQkFBZ0IsQ0FBQ21HLHNCQUFqQixHQUEwQ3lGLFlBQTlDLCtFQUFJLHdCQUF3RGpOLFdBQTVELCtFQUFJLHdCQUFxRUMsTUFBekUsb0RBQUksd0JBQTZFZ1EsU0FBakYsRUFBNEY7QUFDM0ZMLE1BQUFBLGtCQUFrQixDQUFDMU4sSUFBbkIsQ0FBd0J3SSw4QkFBOEIsRUFBdEQ7QUFDQSxLQW5GQSxDQW9GRDs7O0FBQ0EsUUFBTXdGLGtCQUFrQixHQUFHdEYscUJBQXFCLENBQUN2SixnQkFBRCxDQUFoRDtBQUNBLFFBQU04TyxlQUFlLEdBQUdDLE9BQU8sQ0FBQ0Ysa0JBQWtCLElBQUksQ0FBQ0Esa0JBQWtCLENBQUNHLFVBQTNDLENBQS9COztBQUNBLFFBQUluQixjQUFjLElBQUlpQixlQUFlLEtBQUssSUFBMUMsRUFBZ0Q7QUFDL0MsVUFBSSxDQUFDRCxrQkFBRCxJQUF1QkEsa0JBQXZCLGFBQXVCQSxrQkFBdkIsZUFBdUJBLGtCQUFrQixDQUFFRyxVQUEvQyxFQUEyRDtBQUMxRFQsUUFBQUEsa0JBQWtCLENBQUMxTixJQUFuQixDQUF3QnFJLDJCQUEyQixFQUFuRDtBQUNBO0FBQ0Q7O0FBRUQsV0FBT3FGLGtCQUFQO0FBQ0EsR0FsR007Ozs7QUFvR0EsTUFBTVUsNEJBQTRCLEdBQUcsVUFDM0M1SyxZQUQyQyxFQUUzQ2xELFVBRjJDLEVBRzNDbkIsZ0JBSDJDLEVBSTFDO0FBQ0QsV0FBT2tQLG9CQUFvQixDQUFDN0ssWUFBRCxFQUFlZ0QsdUJBQXVCLENBQUNsRyxVQUFELEVBQWFuQixnQkFBYixDQUF0QyxFQUFzRTtBQUNoRyxzQkFBZ0IsV0FEZ0Y7QUFFaEdnRCxNQUFBQSxLQUFLLEVBQUUsV0FGeUY7QUFHaEc4RSxNQUFBQSxJQUFJLEVBQUUsV0FIMEY7QUFJaEdLLE1BQUFBLFFBQVEsRUFBRSxXQUpzRjtBQUtoR0QsTUFBQUEsUUFBUSxFQUFFLFdBTHNGO0FBTWhHSyxNQUFBQSxRQUFRLEVBQUUsV0FOc0Y7QUFPaEdQLE1BQUFBLFlBQVksRUFBRTtBQVBrRixLQUF0RSxDQUEzQjtBQVNBLEdBZE07QUFnQlA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxNQUFNbUgsa0JBQWtCLEdBQUcsVUFDakNuUCxnQkFEaUMsRUFLM0I7QUFBQTs7QUFBQSxRQUhOc00sUUFHTSx1RUFIMkIsRUFHM0I7QUFBQSxRQUZOM0wsY0FFTSx1RUFGbUIsRUFFbkI7QUFBQSxRQUROcUIsYUFDTTtBQUNOLFFBQU1vTiw0QkFBNEIsR0FBRy9DLDhCQUE4QixDQUFDck0sZ0JBQUQsRUFBbUJzTSxRQUFuQixFQUE2QjNMLGNBQTdCLEVBQTZDcUIsYUFBN0MsQ0FBbkU7O0FBQ0EsUUFBTTBFLGVBQWUsR0FBR1QsbUJBQW1CLENBQUNqRyxnQkFBRCxDQUEzQzs7QUFDQSxRQUFJNk0sa0JBQWlDLEdBQUd3QyxJQUFJLENBQUNDLEtBQUwsQ0FBV0QsSUFBSSxDQUFDRSxTQUFMLENBQWVILDRCQUE0QixDQUFDdkMsa0JBQTVDLENBQVgsQ0FBeEM7QUFDQSxRQUFNMUwsVUFBVSxHQUFHaU8sNEJBQTRCLENBQUNqTyxVQUFoRDtBQUVBMEwsSUFBQUEsa0JBQWtCLEdBQUduRyxlQUFlLENBQUN6RixNQUFoQixDQUF1QjRMLGtCQUF2QixDQUFyQjtBQUVBQSxJQUFBQSxrQkFBa0IsR0FBR29DLDRCQUE0QixDQUFDcEMsa0JBQUQsRUFBcUIxTCxVQUFyQixFQUFpQ25CLGdCQUFqQyxDQUFqRDtBQUVBLFFBQU11TyxrQkFBa0IsR0FBR3hCLHNCQUFzQixDQUNoREYsa0JBRGdELEVBRWhEN00sZ0JBRmdELEVBR2hEb1AsNEJBQTRCLENBQUN0QyxtQkFIbUIsQ0FBakQ7QUFLQXlCLElBQUFBLGtCQUFrQixDQUFDMUQsSUFBbkIsQ0FBd0IsVUFBVUMsQ0FBVixFQUFrQkMsQ0FBbEIsRUFBMEI7QUFDakQsVUFBSUQsQ0FBQyxDQUFDdk0sVUFBRixLQUFpQjBELFNBQWpCLElBQThCNkksQ0FBQyxDQUFDdk0sVUFBRixLQUFpQixJQUFuRCxFQUF5RDtBQUN4RCxlQUFPLENBQUMsQ0FBUjtBQUNBOztBQUNELFVBQUl3TSxDQUFDLENBQUN4TSxVQUFGLEtBQWlCMEQsU0FBakIsSUFBOEI4SSxDQUFDLENBQUN4TSxVQUFGLEtBQWlCLElBQW5ELEVBQXlEO0FBQ3hELGVBQU8sQ0FBUDtBQUNBOztBQUNELGFBQU91TSxDQUFDLENBQUN2TSxVQUFGLENBQWFpUixhQUFiLENBQTJCekUsQ0FBQyxDQUFDeE0sVUFBN0IsQ0FBUDtBQUNBLEtBUkQ7QUFVQSxRQUFJa1IsZ0JBQWdCLEdBQUdKLElBQUksQ0FBQ0UsU0FBTCxDQUFlaEIsa0JBQWYsQ0FBdkI7QUFDQWtCLElBQUFBLGdCQUFnQixHQUFHQSxnQkFBZ0IsQ0FBQ2YsT0FBakIsQ0FBeUIsS0FBekIsRUFBZ0MsS0FBaEMsQ0FBbkI7QUFDQWUsSUFBQUEsZ0JBQWdCLEdBQUdBLGdCQUFnQixDQUFDZixPQUFqQixDQUF5QixLQUF6QixFQUFnQyxLQUFoQyxDQUFuQjtBQUNBLFFBQU1nQixhQUFhLEdBQUdELGdCQUF0QixDQTVCTSxDQTZCTjtBQUVBOztBQUNBLFFBQUlFLG1CQUFrQyxHQUFHTixJQUFJLENBQUNDLEtBQUwsQ0FBV0QsSUFBSSxDQUFDRSxTQUFMLENBQWVILDRCQUE0QixDQUFDdkMsa0JBQTVDLENBQVgsQ0FBekM7QUFDQThDLElBQUFBLG1CQUFtQixHQUFHakosZUFBZSxDQUFDekYsTUFBaEIsQ0FBdUIwTyxtQkFBdkIsQ0FBdEIsQ0FqQ00sQ0FrQ047O0FBQ0EsUUFBTXZLLHdCQUFpRCxHQUFHZ0ssNEJBQTRCLENBQUNoSyx3QkFBdkY7QUFDQSxRQUFNd0ssWUFBWSxHQUFHek8sVUFBSCxhQUFHQSxVQUFILGlEQUFHQSxVQUFVLENBQUV4QyxXQUFmLHFGQUFHLHVCQUF5QndELEVBQTVCLDJEQUFHLHVCQUE2QjBOLFlBQWxEO0FBQ0EsUUFBSS9SLGNBQTJDLEdBQUcsRUFBbEQ7QUFFQSxRQUFNZ1MsWUFBWSxHQUFHOVAsZ0JBQWdCLENBQUMrUCxvQkFBakIsQ0FBc0MsSUFBdEMsMENBQXJCOztBQUVBLFFBQUlILFlBQVksS0FBSzNOLFNBQWpCLElBQThCMk4sWUFBWSxDQUFDcFEsTUFBYixHQUFzQixDQUF4RCxFQUEyRDtBQUMxRCxXQUFLLElBQU13USxDQUFYLElBQWdCRixZQUFoQixFQUE4QjtBQUM3QmhTLFFBQUFBLGNBQWMsbUNBQ1ZBLGNBRFUsR0FFVkYseUJBQXlCLENBQUNrUyxZQUFZLENBQUNFLENBQUQsQ0FBYixDQUZmLENBQWQ7QUFJQTtBQUNELEtBUEQsTUFPTztBQUNObFMsTUFBQUEsY0FBYyxHQUFHOFIsWUFBWSxDQUFDNVEsTUFBYixDQUFvQixVQUFDQyxhQUFELEVBQTZDZ1IsV0FBN0MsRUFBa0Y7QUFDdEgsYUFBSyxJQUFJRCxFQUFDLEdBQUcsQ0FBYixFQUFnQkEsRUFBQyxHQUFJQyxXQUFXLENBQUNDLE1BQVosQ0FBbUJDLE9BQXBCLENBQTJDcFMsSUFBM0MsQ0FBZ0R5QixNQUFwRSxFQUE0RXdRLEVBQUMsRUFBN0UsRUFBaUY7QUFBQTs7QUFDaEYvUSxVQUFBQSxhQUFhLENBQUdnUixXQUFXLENBQUNDLE1BQVosQ0FBbUJDLE9BQXBCLENBQTJDcFMsSUFBM0MsQ0FBZ0RpUyxFQUFoRCxDQUFELENBQXVFN1IsS0FBdkUsQ0FBNkVDLElBQTlFLENBQWIsR0FBbUc7QUFDbEdDLFlBQUFBLEtBQUssRUFBRTRSLFdBQUYsYUFBRUEsV0FBRiwwQ0FBRUEsV0FBVyxDQUFFRyxFQUFmLG9EQUFFLGdCQUFpQkMsUUFBakIsRUFEMkY7QUFFbEc5UixZQUFBQSxVQUFVLEVBQUUwUixXQUFGLGFBQUVBLFdBQUYsNkNBQUVBLFdBQVcsQ0FBRXZSLEtBQWYsdURBQUUsbUJBQW9CMlIsUUFBcEI7QUFGc0YsV0FBbkc7QUFJQTs7QUFDRCxlQUFPcFIsYUFBUDtBQUNBLE9BUmdCLEVBUWQsRUFSYyxDQUFqQjtBQVNBLEtBMURLLENBNEROOzs7QUFDQSxRQUFNb0YsWUFBeUMsR0FBRytLLDRCQUE0QixDQUFDL0ssWUFBL0UsQ0E3RE0sQ0ErRE47O0FBQ0EsUUFBSWlNLFVBQVUsR0FBR1gsbUJBQW1CLENBRW5DO0FBRm1DLEtBR2xDMU8sTUFIZSxDQUlmeUcsTUFBTSxDQUFDQyxJQUFQLENBQVl0RCxZQUFaLEVBQ0VrTSxNQURGLENBQ1MsVUFBQ25QLFlBQUQ7QUFBQSxhQUFrQixFQUFFQSxZQUFZLElBQUlnRSx3QkFBbEIsQ0FBbEI7QUFBQSxLQURULEVBRUVsRixHQUZGLENBRU0sVUFBQ2tCLFlBQUQsRUFBa0I7QUFDdEIsYUFBT3NHLE1BQU0sQ0FBQ3VFLE1BQVAsQ0FBYzVILFlBQVksQ0FBQ2pELFlBQUQsQ0FBMUIsRUFBMEN0RCxjQUFjLENBQUNzRCxZQUFELENBQXhELENBQVA7QUFDQSxLQUpGLENBSmUsQ0FBakI7QUFVQSxRQUFNb1AsWUFBWSxHQUFHeFEsZ0JBQWdCLENBQUNvSCxjQUFqQixFQUFyQixDQTFFTSxDQTRFTjs7QUFDQSxRQUFJL0gsc0NBQXNDLENBQUNpTixRQUFELEVBQVdrRSxZQUFYLENBQTFDLEVBQW9FO0FBQ25FO0FBQ0E7QUFDQTtBQUNBLFVBQU1DLFVBQVUsR0FBR25FLFFBQVEsQ0FBQyxDQUFELENBQVIsQ0FBWW1FLFVBQS9COztBQUNBLFVBQUlBLFVBQUosRUFBZ0I7QUFDZixZQUFNQyxzQkFBZ0MsR0FBR2hKLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZOEksVUFBWixFQUF3QnZRLEdBQXhCLENBQTRCLFVBQUN5USxZQUFEO0FBQUEsaUJBQWtCRixVQUFVLENBQUNFLFlBQUQsQ0FBVixDQUF5QkMsWUFBM0M7QUFBQSxTQUE1QixDQUF6QztBQUNBTixRQUFBQSxVQUFVLEdBQUdBLFVBQVUsQ0FBQ0MsTUFBWCxDQUFrQixVQUFDak0sV0FBRCxFQUFpQjtBQUMvQyxpQkFBT29NLHNCQUFzQixDQUFDOVAsT0FBdkIsQ0FBK0IwRCxXQUFXLENBQUMvRCxHQUEzQyxNQUFvRCxDQUFDLENBQTVEO0FBQ0EsU0FGWSxDQUFiO0FBR0E7QUFDRDs7QUFFRCxRQUFNdUQsZUFBZSxHQUFHbUwsNEJBQTRCLENBQUNxQixVQUFELEVBQWFuUCxVQUFiLEVBQXlCbkIsZ0JBQXpCLENBQXBELENBMUZNLENBNEZOOztBQUNBLFFBQU1tTyxlQUFlLEdBQUdDLHdCQUF3QixDQUFDcE8sZ0JBQUQsQ0FBaEQ7QUFDQThELElBQUFBLGVBQWUsQ0FBQzlGLE9BQWhCLENBQXdCLFVBQUNzRyxXQUFELEVBQWlCO0FBQ3hDQSxNQUFBQSxXQUFXLENBQUNrRyxhQUFaLEdBQTRCMkQsZUFBNUI7QUFDQSxLQUZEO0FBSUEsV0FBTztBQUFFckssTUFBQUEsZUFBZSxFQUFmQSxlQUFGO0FBQW1CNEwsTUFBQUEsYUFBYSxFQUFiQTtBQUFuQixLQUFQO0FBQ0EsR0F4R007QUEwR1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sTUFBTW1CLHFCQUFxQixHQUFHLFVBQ3BDN1EsZ0JBRG9DLEVBRXBDOFEsNEJBRm9DLEVBR3BDQyxtQkFIb0MsRUFJMUI7QUFDVixRQUFNQyxrQkFBa0IsR0FBR3hJLHFCQUFxQixDQUFDc0ksNEJBQUQsRUFBK0Isb0JBQS9CLENBQWhEO0FBQ0EsUUFBTWpDLGtCQUFrQixHQUFHdEYscUJBQXFCLENBQUN2SixnQkFBRCxDQUFoRDtBQUNBLFFBQU04TyxlQUFlLEdBQUdDLE9BQU8sQ0FBQ0Ysa0JBQWtCLElBQUksQ0FBQ0Esa0JBQWtCLENBQUNHLFVBQTNDLENBQS9CO0FBQ0EsUUFBTWlDLFNBQVMsR0FBR0YsbUJBQW1CLENBQUNHLFNBQXBCLEVBQWxCOztBQUNBLFFBQUlGLGtCQUFrQixDQUFDeFIsTUFBbkIsR0FBNEIsQ0FBNUIsSUFBaUNzUCxlQUFqQyxJQUFvRCxDQUFBbUMsU0FBUyxTQUFULElBQUFBLFNBQVMsV0FBVCxZQUFBQSxTQUFTLENBQUVFLFdBQVgsTUFBMkIsQ0FBbkYsRUFBc0Y7QUFDckYsYUFBTyxJQUFQO0FBQ0E7O0FBQ0QsV0FBTyxLQUFQO0FBQ0EsR0FiTSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5VHlwZSwgTmF2aWdhdGlvblByb3BlcnR5LCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQgeyBBbm5vdGF0aW9uVGVybSwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgRGF0YUZpZWxkVHlwZXMsIFJlZmVyZW5jZUZhY2V0VHlwZXMsIFVJQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9FZG1cIjtcbmltcG9ydCB7IEZpZWxkR3JvdXAsIEZpZWxkR3JvdXBUeXBlLCBTZWxlY3RPcHRpb25UeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvZ2VuZXJhdGVkL1VJXCI7XG5pbXBvcnQgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB7XG5cdGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uLFxuXHRnZXRUeXBlQ29uZmlnLFxuXHRpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUsXG5cdFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uLFxuXHRUYWJsZVZpc3VhbGl6YXRpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyBnZXRWaXN1YWxGaWx0ZXJzLCBWaXN1YWxGaWx0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9WaXN1YWxGaWx0ZXJzXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBDb25maWd1cmFibGVPYmplY3QsIEN1c3RvbUVsZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzLCBQbGFjZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgeyBhbm5vdGF0aW9uRXhwcmVzc2lvbiwgY29tcGlsZUJpbmRpbmcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgQXZhaWxhYmlsaXR5VHlwZSwgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24sIEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbiwgRmlsdGVyU2V0dGluZ3MgfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCIuLi9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbi8vaW1wb3J0IHsgaGFzVmFsdWVIZWxwIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcblxuZXhwb3J0IHR5cGUgRmlsdGVyRmllbGQgPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdHR5cGU/OiBzdHJpbmc7XG5cdGNvbmRpdGlvblBhdGg6IHN0cmluZztcblx0YXZhaWxhYmlsaXR5OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRzZXR0aW5ncz86IEZpbHRlclNldHRpbmdzO1xuXHRpc1BhcmFtZXRlcj86IGJvb2xlYW47XG5cdHZpc3VhbEZpbHRlcj86IFZpc3VhbEZpbHRlcnM7XG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xufTtcblxudHlwZSBGaWx0ZXJHcm91cCA9IHtcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG59O1xuXG5lbnVtIGZpbHRlckZpZWxkVHlwZSB7XG5cdERlZmF1bHQgPSBcIkRlZmF1bHRcIixcblx0U2xvdCA9IFwiU2xvdFwiXG59XG5cbmNvbnN0IHNFZG1TdHJpbmcgPSBcIkVkbS5TdHJpbmdcIjtcbmNvbnN0IHNTdHJpbmdEYXRhVHlwZSA9IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCI7XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZCA9IEN1c3RvbUVsZW1lbnQ8RmlsdGVyRmllbGQ+O1xuXG4vKipcbiAqIEVudGVyIGFsbCBEYXRhRmllbGRzIG9mIGEgZ2l2ZW4gRmllbGRHcm91cCBpbnRvIHRoZSBmaWx0ZXJGYWNldE1hcC5cbiAqXG4gKiBAcGFyYW0ge0Fubm90YXRpb25UZXJtPEZpZWxkR3JvdXBUeXBlPn0gZmllbGRHcm91cFxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPn0gVGhlIG1hcCBvZiBmYWNldHMgZm9yIHRoZSBnaXZlbiBGaWVsZEdyb3VwXG4gKi9cbmZ1bmN0aW9uIGdldEZpZWxkR3JvdXBGaWx0ZXJHcm91cHMoZmllbGRHcm91cDogQW5ub3RhdGlvblRlcm08RmllbGRHcm91cFR5cGU+KTogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+IHtcblx0Y29uc3QgZmlsdGVyRmFjZXRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiA9IHt9O1xuXHRmaWVsZEdyb3VwLkRhdGEuZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIikge1xuXHRcdFx0ZmlsdGVyRmFjZXRNYXBbZGF0YUZpZWxkLlZhbHVlLnBhdGhdID0ge1xuXHRcdFx0XHRncm91cDogZmllbGRHcm91cC5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdGdyb3VwTGFiZWw6XG5cdFx0XHRcdFx0Y29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uRXhwcmVzc2lvbihmaWVsZEdyb3VwLkxhYmVsIHx8IGZpZWxkR3JvdXAuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWwgfHwgZmllbGRHcm91cC5xdWFsaWZpZXIpXG5cdFx0XHRcdFx0KSB8fCBmaWVsZEdyb3VwLnF1YWxpZmllclxuXHRcdFx0fTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gZmlsdGVyRmFjZXRNYXA7XG59XG5cbmZ1bmN0aW9uIGdldEV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyhzZWxlY3Rpb25WYXJpYW50czogU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb25bXSk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHtcblx0cmV0dXJuIHNlbGVjdGlvblZhcmlhbnRzLnJlZHVjZSgocHJldmlvdXNWYWx1ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sIHNlbGVjdGlvblZhcmlhbnQpID0+IHtcblx0XHRzZWxlY3Rpb25WYXJpYW50LnByb3BlcnR5TmFtZXMuZm9yRWFjaCgocHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRwcmV2aW91c1ZhbHVlW3Byb3BlcnR5TmFtZV0gPSB0cnVlO1xuXHRcdH0pO1xuXHRcdHJldHVybiBwcmV2aW91c1ZhbHVlO1xuXHR9LCB7fSk7XG59XG5cbi8qKlxuICogQ2hlY2sgdGhhdCBhbGwgdGhlIHRhYmxlcyBmb3IgYSBkZWRpY2F0ZWQgZW50aXR5IHNldCBhcmUgY29uZmlndXJlZCBhcyBhbmFseXRpY2FsIHRhYmxlLlxuICogQHBhcmFtIHtUYWJsZVZpc3VhbGl6YXRpb25bXX0gbGlzdFJlcG9ydFRhYmxlcyBMaXN0IHJlcG9ydCB0YWJsZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZXh0UGF0aFxuICogQHJldHVybnMge2Jvb2xlYW59IElzIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaGlkZGVuIG9yIG5vdFxuICovXG5mdW5jdGlvbiBjaGVja0FsbFRhYmxlRm9yRW50aXR5U2V0QXJlQW5hbHl0aWNhbChsaXN0UmVwb3J0VGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSwgY29udGV4dFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRpZiAoY29udGV4dFBhdGggJiYgbGlzdFJlcG9ydFRhYmxlcy5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGxpc3RSZXBvcnRUYWJsZXMuZXZlcnkoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdHJldHVybiB2aXN1YWxpemF0aW9uLmVuYWJsZUFuYWx5dGljcyAmJiBjb250ZXh0UGF0aCA9PT0gdmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb247XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25WYXJpYW50cyhcblx0bHJUYWJsZVZpc3VhbGl6YXRpb25zOiBUYWJsZVZpc3VhbGl6YXRpb25bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb25bXSB7XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnRQYXRoczogc3RyaW5nW10gPSBbXTtcblx0cmV0dXJuIGxyVGFibGVWaXN1YWxpemF0aW9uc1xuXHRcdC5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdGNvbnN0IHRhYmxlRmlsdGVycyA9IHZpc3VhbGl6YXRpb24uY29udHJvbC5maWx0ZXJzO1xuXHRcdFx0Y29uc3QgdGFibGVTVkNvbmZpZ3M6IFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uW10gPSBbXTtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIHRhYmxlRmlsdGVycykge1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh0YWJsZUZpbHRlcnNba2V5XS5wYXRocykpIHtcblx0XHRcdFx0XHRjb25zdCBwYXRocyA9IHRhYmxlRmlsdGVyc1trZXldLnBhdGhzO1xuXHRcdFx0XHRcdHBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcblx0XHRcdFx0XHRcdGlmIChwYXRoICYmIHBhdGguYW5ub3RhdGlvblBhdGggJiYgc2VsZWN0aW9uVmFyaWFudFBhdGhzLmluZGV4T2YocGF0aC5hbm5vdGF0aW9uUGF0aCkgPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRQYXRocy5wdXNoKHBhdGguYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzZWxlY3Rpb25WYXJpYW50Q29uZmlnID0gZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24ocGF0aC5hbm5vdGF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRcdGlmIChzZWxlY3Rpb25WYXJpYW50Q29uZmlnKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGFibGVTVkNvbmZpZ3MucHVzaChzZWxlY3Rpb25WYXJpYW50Q29uZmlnKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGFibGVTVkNvbmZpZ3M7XG5cdFx0fSlcblx0XHQucmVkdWNlKChzdkNvbmZpZ3MsIHNlbGVjdGlvblZhcmlhbnQpID0+IHN2Q29uZmlncy5jb25jYXQoc2VsZWN0aW9uVmFyaWFudCksIFtdKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb25kaXRpb24gcGF0aCByZXF1aXJlZCBmb3IgdGhlIGNvbmRpdGlvbiBtb2RlbC4gSXQgbG9va3MgYXMgZm9sbG93czpcbiAqIDwxOk4tUHJvcGVydHlOYW1lPipcXC88MToxLVByb3BlcnR5TmFtZT4vPFByb3BlcnR5TmFtZT4uXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIHJvb3QgRW50aXR5VHlwZVxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgY29uZGl0aW9uIHBhdGhcbiAqL1xuY29uc3QgX2dldENvbmRpdGlvblBhdGggPSBmdW5jdGlvbiAoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBwYXJ0cyA9IHByb3BlcnR5UGF0aC5zcGxpdChcIi9cIik7XG5cdGxldCBwYXJ0aWFsUGF0aDtcblx0bGV0IGtleSA9IFwiXCI7XG5cdHdoaWxlIChwYXJ0cy5sZW5ndGgpIHtcblx0XHRsZXQgcGFydCA9IHBhcnRzLnNoaWZ0KCkgYXMgc3RyaW5nO1xuXHRcdHBhcnRpYWxQYXRoID0gcGFydGlhbFBhdGggPyBwYXJ0aWFsUGF0aCArIFwiL1wiICsgcGFydCA6IHBhcnQ7XG5cdFx0Y29uc3QgcHJvcGVydHk6IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5ID0gZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwYXJ0aWFsUGF0aCk7XG5cdFx0aWYgKHByb3BlcnR5Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiICYmIHByb3BlcnR5LmlzQ29sbGVjdGlvbikge1xuXHRcdFx0cGFydCArPSBcIipcIjtcblx0XHR9XG5cdFx0a2V5ID0ga2V5ID8ga2V5ICsgXCIvXCIgKyBwYXJ0IDogcGFydDtcblx0fVxuXHRyZXR1cm4ga2V5O1xufTtcblxuY29uc3QgX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRwcm9wZXJ0eTogUHJvcGVydHksXG5cdGZ1bGxQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHQvLyBpZ25vcmUgY29tcGxleCBwcm9wZXJ0eSB0eXBlcyBhbmQgaGlkZGVuIGFubm90YXRlZCBvbmVzXG5cdGlmIChcblx0XHRwcm9wZXJ0eSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0cHJvcGVydHkudGFyZ2V0VHlwZSA9PT0gdW5kZWZpbmVkICYmXG5cdFx0KGluY2x1ZGVIaWRkZW4gfHwgcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSAhPT0gdHJ1ZSlcblx0KSB7XG5cdFx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUocHJvcGVydHkpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRrZXk6IEtleUhlbHBlci5nZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoKGZ1bGxQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdGNvbmRpdGlvblBhdGg6IF9nZXRDb25kaXRpb25QYXRoKGVudGl0eVR5cGUsIGZ1bGxQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0YXZhaWxhYmlsaXR5OlxuXHRcdFx0XHRwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbkZpbHRlcj8udmFsdWVPZigpID09PSB0cnVlID8gQXZhaWxhYmlsaXR5VHlwZS5IaWRkZW4gOiBBdmFpbGFiaWxpdHlUeXBlLkFkYXB0YXRpb24sXG5cdFx0XHRsYWJlbDogY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5Lm5hbWUpKSxcblx0XHRcdGdyb3VwOiB0YXJnZXRFbnRpdHlUeXBlLm5hbWUsXG5cdFx0XHRncm91cExhYmVsOiBjb21waWxlQmluZGluZyhcblx0XHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24odGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnZhbHVlT2YoKSB8fCB0YXJnZXRFbnRpdHlUeXBlLm5hbWUpXG5cdFx0XHQpXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZGVsVHlwZShzVHlwZTogYW55KSB7XG5cdHR5cGUgZGVmYXVsdE1vZGVsVHlwZSA9IHtcblx0XHRba2V5OiBzdHJpbmddOiB7XG5cdFx0XHRba2V5OiBzdHJpbmddOiBzdHJpbmc7XG5cdFx0fTtcblx0fTtcblx0Y29uc3QgbURlZmF1bHRUeXBlRm9yRWRtVHlwZTogZGVmYXVsdE1vZGVsVHlwZSA9IHtcblx0XHRcIkVkbS5Cb29sZWFuXCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJCb29sXCJcblx0XHR9LFxuXHRcdFwiRWRtLkJ5dGVcIjoge1xuXHRcdFx0bW9kZWxUeXBlOiBcIkludFwiXG5cdFx0fSxcblx0XHRcIkVkbS5EYXRlXCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJEYXRlXCJcblx0XHR9LFxuXHRcdFwiRWRtLkRhdGVUaW1lXCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJEYXRlXCJcblx0XHR9LFxuXHRcdFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJEYXRlVGltZU9mZnNldFwiXG5cdFx0fSxcblx0XHRcIkVkbS5EZWNpbWFsXCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJEZWNpbWFsXCJcblx0XHR9LFxuXHRcdFwiRWRtLkRvdWJsZVwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiRmxvYXRcIlxuXHRcdH0sXG5cdFx0XCJFZG0uRmxvYXRcIjoge1xuXHRcdFx0bW9kZWxUeXBlOiBcIkZsb2F0XCJcblx0XHR9LFxuXHRcdFwiRWRtLkd1aWRcIjoge1xuXHRcdFx0bW9kZWxUeXBlOiBcIkd1aWRcIlxuXHRcdH0sXG5cdFx0XCJFZG0uSW50MTZcIjoge1xuXHRcdFx0bW9kZWxUeXBlOiBcIkludFwiXG5cdFx0fSxcblx0XHRcIkVkbS5JbnQzMlwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiSW50XCJcblx0XHR9LFxuXHRcdFwiRWRtLkludDY0XCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJJbnRcIlxuXHRcdH0sXG5cdFx0XCJFZG0uU0J5dGVcIjoge1xuXHRcdFx0bW9kZWxUeXBlOiBcIkludFwiXG5cdFx0fSxcblx0XHRcIkVkbS5TaW5nbGVcIjoge1xuXHRcdFx0bW9kZWxUeXBlOiBcIkZsb2F0XCJcblx0XHR9LFxuXHRcdFwiRWRtLlN0cmluZ1wiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiU3RyaW5nXCJcblx0XHR9LFxuXHRcdFwiRWRtLlRpbWVcIjoge1xuXHRcdFx0bW9kZWxUeXBlOiBcIlRpbWVPZkRheVwiXG5cdFx0fSxcblx0XHRcIkVkbS5UaW1lT2ZEYXlcIjoge1xuXHRcdFx0bW9kZWxUeXBlOiBcIlRpbWVPZkRheVwiXG5cdFx0fSxcblx0XHRcIkVkbS5TdHJlYW1cIjoge1xuXHRcdFx0Ly9ubyBjb3JyZXNwb25kaW5nIG1vZGVsVHlwZSAtIGlnbm9yZSBmb3IgZmlsdGVyaW5nXG5cdFx0fVxuXHR9O1xuXHRyZXR1cm4gc1R5cGUgJiYgc1R5cGUgaW4gbURlZmF1bHRUeXBlRm9yRWRtVHlwZSAmJiBtRGVmYXVsdFR5cGVGb3JFZG1UeXBlW3NUeXBlXS5tb2RlbFR5cGU7XG59XG5jb25zdCBfZ2V0U2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nLFxuXHRwcm9wZXJ0aWVzOiBBcnJheTxQcm9wZXJ0eT4gfCB1bmRlZmluZWQsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiB7XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkTWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0aWYgKHByb3BlcnRpZXMpIHtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoOiBzdHJpbmcgPSBwcm9wZXJ0eS5uYW1lO1xuXHRcdFx0Y29uc3QgZnVsbFBhdGg6IHN0cmluZyA9IChuYXZpZ2F0aW9uUGF0aCA/IG5hdmlnYXRpb25QYXRoICsgXCIvXCIgOiBcIlwiKSArIHByb3BlcnR5UGF0aDtcblx0XHRcdGNvbnN0IHNlbGVjdGlvbkZpZWxkID0gX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkKGVudGl0eVR5cGUsIHByb3BlcnR5LCBmdWxsUGF0aCwgaW5jbHVkZUhpZGRlbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRpZiAoc2VsZWN0aW9uRmllbGQpIHtcblx0XHRcdFx0c2VsZWN0aW9uRmllbGRNYXBbZnVsbFBhdGhdID0gc2VsZWN0aW9uRmllbGQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkTWFwO1xufTtcblxuY29uc3QgX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aCA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0cHJvcGVydHlQYXRoczogQXJyYXk8c3RyaW5nPiB8IHVuZGVmaW5lZCxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+IHtcblx0bGV0IHNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdGlmIChwcm9wZXJ0eVBhdGhzKSB7XG5cdFx0cHJvcGVydHlQYXRocy5mb3JFYWNoKChwcm9wZXJ0eVBhdGg6IHN0cmluZykgPT4ge1xuXHRcdFx0bGV0IGxvY2FsU2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD47XG5cblx0XHRcdGNvbnN0IHByb3BlcnR5OiBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSA9IGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocHJvcGVydHlQYXRoKTtcblx0XHRcdGlmIChwcm9wZXJ0eSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0eS5fdHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIikge1xuXHRcdFx0XHQvLyBoYW5kbGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0XHRcdGxvY2FsU2VsZWN0aW9uRmllbGRzID0gX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRwcm9wZXJ0eS50YXJnZXRUeXBlLmVudGl0eVByb3BlcnRpZXMsXG5cdFx0XHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5LnRhcmdldFR5cGUgIT09IHVuZGVmaW5lZCAmJiBwcm9wZXJ0eS50YXJnZXRUeXBlLl90eXBlID09PSBcIkNvbXBsZXhUeXBlXCIpIHtcblx0XHRcdFx0Ly8gaGFuZGxlIENvbXBsZXhUeXBlIHByb3BlcnRpZXNcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdHByb3BlcnR5LnRhcmdldFR5cGUucHJvcGVydGllcyxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25QYXRoID0gcHJvcGVydHlQYXRoLmluY2x1ZGVzKFwiL1wiKSA/IHByb3BlcnR5UGF0aC5zcGxpdChcIi9cIikuc3BsaWNlKDAsIDEpLmpvaW4oXCIvXCIpIDogXCJcIjtcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKGVudGl0eVR5cGUsIG5hdmlnYXRpb25QYXRoLCBbcHJvcGVydHldLCBpbmNsdWRlSGlkZGVuLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0aW9uRmllbGRzID0ge1xuXHRcdFx0XHQuLi5zZWxlY3Rpb25GaWVsZHMsXG5cdFx0XHRcdC4uLmxvY2FsU2VsZWN0aW9uRmllbGRzXG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG59O1xuXG5jb25zdCBfZ2V0RmlsdGVyRmllbGQgPSBmdW5jdGlvbiAoXG5cdGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+LFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHRsZXQgZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF07XG5cdGNvbnN0IGF2YWlsYWJpbGl0eSA9IGZpbHRlckZpZWxkICYmIGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eTtcblx0aWYgKGZpbHRlckZpZWxkKSB7XG5cdFx0ZGVsZXRlIGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdO1xuXHR9IGVsc2Uge1xuXHRcdGZpbHRlckZpZWxkID0gX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkKGVudGl0eVR5cGUsIGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocHJvcGVydHlQYXRoKSwgcHJvcGVydHlQYXRoLCB0cnVlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0fVxuXHRpZiAoIWZpbHRlckZpZWxkKSB7XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREaWFnbm9zdGljcygpPy5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1JU1NJTkdfU0VMRUNUSU9ORklFTEQpO1xuXHR9XG5cdC8vIGRlZmluZWQgU2VsZWN0aW9uRmllbGRzIGFyZSBhdmFpbGFibGUgYnkgZGVmYXVsdFxuXHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRmaWx0ZXJGaWVsZC5hdmFpbGFiaWxpdHkgPSBhdmFpbGFiaWxpdHkgPT09IEF2YWlsYWJpbGl0eVR5cGUuSGlkZGVuID8gQXZhaWxhYmlsaXR5VHlwZS5IaWRkZW4gOiBBdmFpbGFiaWxpdHlUeXBlLkRlZmF1bHQ7XG5cdFx0ZmlsdGVyRmllbGQuaXNQYXJhbWV0ZXIgPSAhIWVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dDtcblx0fVxuXHRyZXR1cm4gZmlsdGVyRmllbGQ7XG59O1xuXG5jb25zdCBfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0YVNlbGVjdE9wdGlvbnM6IGFueVtdLFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+LFxuXHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM6IFByb3BlcnR5UGF0aFtdXG4pOiBGaWx0ZXJGaWVsZFtdIHtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gW107XG5cdGNvbnN0IFVJU2VsZWN0aW9uRmllbGRzOiBhbnkgPSB7fTtcblx0Y29uc3QgcHJvcGVydGllcyA9IGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcztcblx0Ly8gVXNpbmcgZW50aXR5VHlwZSBpbnN0ZWFkIG9mIGVudGl0eVNldFxuXHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LmZvckVhY2goKFNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0VUlTZWxlY3Rpb25GaWVsZHNbU2VsZWN0aW9uRmllbGQudmFsdWVdID0gdHJ1ZTtcblx0fSk7XG5cdGlmIChhU2VsZWN0T3B0aW9ucyAmJiBhU2VsZWN0T3B0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0YVNlbGVjdE9wdGlvbnM/LmZvckVhY2goKHNlbGVjdE9wdGlvbjogU2VsZWN0T3B0aW9uVHlwZSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lOiBhbnkgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHlOYW1lLnZhbHVlO1xuXHRcdFx0Y29uc3QgVUlTZWxlY3Rpb25GaWVsZHM6IGFueSA9IHt9O1xuXHRcdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzPy5mb3JFYWNoKChTZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFx0XHRVSVNlbGVjdGlvbkZpZWxkc1tTZWxlY3Rpb25GaWVsZC52YWx1ZV0gPSB0cnVlO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoIShzUHJvcGVydHlQYXRoIGluIGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcykpIHtcblx0XHRcdFx0aWYgKCEoc1Byb3BlcnR5UGF0aCBpbiBVSVNlbGVjdGlvbkZpZWxkcykpIHtcblx0XHRcdFx0XHRjb25zdCBGaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBnZXRGaWx0ZXJGaWVsZChzUHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRpZiAoRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKEZpbHRlckZpZWxkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IGRlZmF1bHRGaWx0ZXJWYWx1ZSA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkZpbHRlckRlZmF1bHRWYWx1ZTtcblx0XHRcdGNvbnN0IFByb3BlcnR5UGF0aCA9IHByb3BlcnR5Lm5hbWU7XG5cdFx0XHRpZiAoIShQcm9wZXJ0eVBhdGggaW4gZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKSkge1xuXHRcdFx0XHRpZiAoZGVmYXVsdEZpbHRlclZhbHVlICYmICEoUHJvcGVydHlQYXRoIGluIFVJU2VsZWN0aW9uRmllbGRzKSkge1xuXHRcdFx0XHRcdGNvbnN0IEZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGdldEZpbHRlckZpZWxkKFByb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG5cdFx0XHRcdFx0aWYgKEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25GaWVsZHMucHVzaChGaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcbn07XG5cbi8qKlxuICogR2V0IGFsbCBwYXJhbWV0ZXIgZmlsdGVyIGZpZWxkcyBpbiBjYXNlIG9mIGEgcGFyYW1ldGVyaXplZCBzZXJ2aWNlLlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7RmlsdGVyRmllbGRbXX0gQW4gYXJyYXkgb2YgcGFyYW1ldGVyIGZpbHRlcmZpZWxkc1xuICovXG5mdW5jdGlvbiBfZ2V0UGFyYW1ldGVyRmllbGRzKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBGaWx0ZXJGaWVsZFtdIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBwYXJhbWV0ZXJFbnRpdHlUeXBlID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRjb25zdCBpc1BhcmFtZXRlcml6ZWQgPSAhIXBhcmFtZXRlckVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dCAmJiAhZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQ7XG5cdGNvbnN0IHBhcmFtZXRlckNvbnZlcnRlckNvbnRleHQgPVxuXHRcdGlzUGFyYW1ldGVyaXplZCAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXCIvXCIgKyBkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWUpO1xuXG5cdGNvbnN0IHBhcmFtZXRlckZpZWxkcyA9IChcblx0XHRwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHQ/IHBhcmFtZXRlckVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKHByb3BlcnR5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIF9nZXRGaWx0ZXJGaWVsZChcblx0XHRcdFx0XHRcdHt9IGFzIFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPixcblx0XHRcdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyRW50aXR5VHlwZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHQgIH0pXG5cdFx0XHQ6IFtdXG5cdCkgYXMgRmlsdGVyRmllbGRbXTtcblxuXHRyZXR1cm4gcGFyYW1ldGVyRmllbGRzO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaXMgaGlkZGVuIG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0ge1RhYmxlVmlzdWFsaXphdGlvbltdfSBsaXN0UmVwb3J0VGFibGVzIFRoZSBsaXN0IHJlcG9ydCB0YWJsZXNcbiAqIEBwYXJhbSB7Q2hhcnRWaXN1YWxpemF0aW9uW119IGNoYXJ0cyBUaGUgQUxQIGNoYXJ0c1xuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge2Jvb2xlYW59IFRoZSBpbmZvcm1hdGlvbiBpZiB0aGUgRmlsdGVyQmFyIHNlYXJjaCBmaWVsZCBpcyBoaWRkZW4gb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJCYXJoaWRlQmFzaWNTZWFyY2ggPSBmdW5jdGlvbiAoXG5cdGxpc3RSZXBvcnRUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdLFxuXHRjaGFydHM6IENoYXJ0VmlzdWFsaXphdGlvbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBib29sZWFuIHtcblx0Ly8gQ2hlY2sgaWYgY2hhcnRzIGFsbG93IHNlYXJjaFxuXHRjb25zdCBub1NlYXJjaEluQ2hhcnRzID0gY2hhcnRzLmxlbmd0aCA9PT0gMCB8fCBjaGFydHMuZXZlcnkoKGNoYXJ0KSA9PiAhY2hhcnQuYXBwbHlTdXBwb3J0ZWQuZW5hYmxlU2VhcmNoKTtcblxuXHQvLyBDaGVjayBpZiBhbGwgdGFibGVzIGFyZSBhbmFseXRpY2FsIGFuZCBub25lIG9mIHRoZW0gYWxsb3cgZm9yIHNlYXJjaFxuXHRjb25zdCBub1NlYXJjaEluVGFibGVzID1cblx0XHRsaXN0UmVwb3J0VGFibGVzLmxlbmd0aCA9PT0gMCB8fCBsaXN0UmVwb3J0VGFibGVzLmV2ZXJ5KCh0YWJsZSkgPT4gdGFibGUuZW5hYmxlQW5hbHl0aWNzICYmICF0YWJsZS5lbmFibGVBbmFseXRpY3NTZWFyY2gpO1xuXG5cdGNvbnN0IGNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRpZiAoY29udGV4dFBhdGggJiYgbm9TZWFyY2hJbkNoYXJ0cyAmJiBub1NlYXJjaEluVGFibGVzKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBmaWx0ZXIgZmllbGRzIGZyb20gdGhlIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eVR5cGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD59IFRoZSBmaWx0ZXIgZmllbGRzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkPiB7XG5cdGNvbnN0IGZiQ29uZmlnOiBGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEZpbHRlckNvbmZpZ3VyYXRpb24oKTtcblx0Y29uc3QgZGVmaW5lZEZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24+ID0gZmJDb25maWc/LmZpbHRlckZpZWxkcyB8fCB7fTtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSBfZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoKFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0T2JqZWN0LmtleXMoZGVmaW5lZEZpbHRlckZpZWxkcykubWFwKChrZXkpID0+IEtleUhlbHBlci5nZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5KGtleSkpLFxuXHRcdHRydWUsXG5cdFx0Y29udmVydGVyQ29udGV4dFxuXHQpO1xuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IHNLZXkgaW4gZGVmaW5lZEZpbHRlckZpZWxkcykge1xuXHRcdGNvbnN0IGZpbHRlckZpZWxkID0gZGVmaW5lZEZpbHRlckZpZWxkc1tzS2V5XTtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShzS2V5KTtcblx0XHRjb25zdCBzZWxlY3Rpb25GaWVsZCA9IHNlbGVjdGlvbkZpZWxkc1twcm9wZXJ0eU5hbWVdO1xuXHRcdGNvbnN0IHR5cGUgPSBmaWx0ZXJGaWVsZC50eXBlID09PSBcIlNsb3RcIiA/IGZpbHRlckZpZWxkVHlwZS5TbG90IDogZmlsdGVyRmllbGRUeXBlLkRlZmF1bHQ7XG5cdFx0Y29uc3QgdmlzdWFsRmlsdGVyID1cblx0XHRcdGZpbHRlckZpZWxkICYmIGZpbHRlckZpZWxkPy52aXN1YWxGaWx0ZXJcblx0XHRcdFx0PyBnZXRWaXN1YWxGaWx0ZXJzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIHNLZXksIGRlZmluZWRGaWx0ZXJGaWVsZHMpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGZpbHRlckZpZWxkc1tzS2V5XSA9IHtcblx0XHRcdGtleTogc0tleSxcblx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogc2VsZWN0aW9uRmllbGQ/LmFubm90YXRpb25QYXRoLFxuXHRcdFx0Y29uZGl0aW9uUGF0aDogc2VsZWN0aW9uRmllbGQ/LmNvbmRpdGlvblBhdGggfHwgcHJvcGVydHlOYW1lLFxuXHRcdFx0dGVtcGxhdGU6IGZpbHRlckZpZWxkLnRlbXBsYXRlLFxuXHRcdFx0bGFiZWw6IGZpbHRlckZpZWxkLmxhYmVsLFxuXHRcdFx0cG9zaXRpb246IGZpbHRlckZpZWxkLnBvc2l0aW9uIHx8IHsgcGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXIgfSxcblx0XHRcdGF2YWlsYWJpbGl0eTogZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5IHx8IEF2YWlsYWJpbGl0eVR5cGUuRGVmYXVsdCxcblx0XHRcdHNldHRpbmdzOiBmaWx0ZXJGaWVsZC5zZXR0aW5ncyxcblx0XHRcdHZpc3VhbEZpbHRlcjogdmlzdWFsRmlsdGVyXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gZmlsdGVyRmllbGRzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlckZpZWxkID0gZnVuY3Rpb24gKHByb3BlcnR5UGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKSB7XG5cdHJldHVybiBfZ2V0RmlsdGVyRmllbGQoe30sIHByb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uOiBhbnksIHNSZXN0cmljdGlvbjogYW55KSB7XG5cdGlmIChzUmVzdHJpY3Rpb24gPT09IFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIgfHwgc1Jlc3RyaWN0aW9uID09PSBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHtcblx0XHRsZXQgYVByb3BzID0gW107XG5cdFx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbl0pIHtcblx0XHRcdGFQcm9wcyA9IG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbl0ubWFwKGZ1bmN0aW9uIChvUHJvcGVydHk6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gb1Byb3BlcnR5LiRQcm9wZXJ0eVBhdGggfHwgb1Byb3BlcnR5LnZhbHVlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBhUHJvcHM7XG5cdH0gZWxzZSBpZiAoc1Jlc3RyaWN0aW9uID09PSBcIkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1wiKSB7XG5cdFx0Y29uc3QgbUFsbG93ZWRFeHByZXNzaW9ucyA9IHt9IGFzIGFueTtcblx0XHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucykge1xuXHRcdFx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHk6IGFueSkge1xuXHRcdFx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0XHRcdGlmIChtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS52YWx1ZV0pIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS52YWx1ZV0ucHVzaChvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS52YWx1ZV0gPSBbb1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9uc107XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gbUFsbG93ZWRFeHByZXNzaW9ucztcblx0fVxuXHRyZXR1cm4gb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb247XG59O1xuXG5jb25zdCBnZXRTZWFyY2hGaWx0ZXJQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoKSB7XG5cdHJldHVybiB7XG5cdFx0bmFtZTogXCIkc2VhcmNoXCIsXG5cdFx0cGF0aDogXCIkc2VhcmNoXCIsXG5cdFx0ZGF0YVR5cGU6IHNTdHJpbmdEYXRhVHlwZSxcblx0XHRtYXhDb25kaXRpb25zOiAxXG5cdH07XG59O1xuXG5jb25zdCBnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoKSB7XG5cdHJldHVybiB7XG5cdFx0bmFtZTogXCIkZWRpdFN0YXRlXCIsXG5cdFx0cGF0aDogXCIkZWRpdFN0YXRlXCIsXG5cdFx0Z3JvdXBMYWJlbDogXCJcIixcblx0XHRncm91cDogXCJcIixcblx0XHRkYXRhVHlwZTogc1N0cmluZ0RhdGFUeXBlLFxuXHRcdGhpZGRlbkZpbHRlcjogZmFsc2Vcblx0fTtcbn07XG5cbmNvbnN0IGdldFNlYXJjaFJlc3RyaWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdHJldHVybiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5TZWFyY2hSZXN0cmljdGlvbnM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCBzTmF2aWdhdGlvblBhdGg6IHN0cmluZykge1xuXHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9uczogYW55ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uTmF2aWdhdGlvblJlc3RyaWN0aW9ucztcblx0Y29uc3QgYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzID0gb05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnMuUmVzdHJpY3RlZFByb3BlcnRpZXM7XG5cdHJldHVybiAoXG5cdFx0YVJlc3RyaWN0ZWRQcm9wZXJ0aWVzICYmXG5cdFx0YVJlc3RyaWN0ZWRQcm9wZXJ0aWVzLmZpbmQoZnVuY3Rpb24gKG9SZXN0cmljdGVkUHJvcGVydHk6IGFueSkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eSAmJlxuXHRcdFx0XHQob1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPT09IHNOYXZpZ2F0aW9uUGF0aCB8fFxuXHRcdFx0XHRcdG9SZXN0cmljdGVkUHJvcGVydHkuTmF2aWdhdGlvblByb3BlcnR5LnZhbHVlID09PSBzTmF2aWdhdGlvblBhdGgpXG5cdFx0XHQpO1xuXHRcdH0pXG5cdCk7XG59O1xuXG5jb25zdCBfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChvRmlsdGVyRmllbGRJbmZvOiBhbnkpIHtcblx0cmV0dXJuIHtcblx0XHRrZXk6IG9GaWx0ZXJGaWVsZEluZm8ua2V5LFxuXHRcdGFubm90YXRpb25QYXRoOiBvRmlsdGVyRmllbGRJbmZvLmFubm90YXRpb25QYXRoLFxuXHRcdGNvbmRpdGlvblBhdGg6IG9GaWx0ZXJGaWVsZEluZm8uY29uZGl0aW9uUGF0aCxcblx0XHRuYW1lOiBvRmlsdGVyRmllbGRJbmZvLmNvbmRpdGlvblBhdGgsXG5cdFx0bGFiZWw6IG9GaWx0ZXJGaWVsZEluZm8ubGFiZWwsXG5cdFx0aGlkZGVuRmlsdGVyOiBvRmlsdGVyRmllbGRJbmZvLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIixcblx0XHRkaXNwbGF5OiBcIlZhbHVlXCIsXG5cdFx0aXNQYXJhbWV0ZXI6IG9GaWx0ZXJGaWVsZEluZm8uaXNQYXJhbWV0ZXIsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogb0ZpbHRlckZpZWxkSW5mby5jYXNlU2Vuc2l0aXZlLFxuXHRcdGF2YWlsYWJpbGl0eTogb0ZpbHRlckZpZWxkSW5mby5hdmFpbGFiaWxpdHksXG5cdFx0cG9zaXRpb246IG9GaWx0ZXJGaWVsZEluZm8ucG9zaXRpb24sXG5cdFx0dHlwZTogb0ZpbHRlckZpZWxkSW5mby50eXBlLFxuXHRcdHRlbXBsYXRlOiBvRmlsdGVyRmllbGRJbmZvLnRlbXBsYXRlLFxuXHRcdG1lbnU6IG9GaWx0ZXJGaWVsZEluZm8ubWVudVxuXHR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoYUV4cHJlc3Npb25zOiBhbnkpIHtcblx0Y29uc3QgYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5ID0gW1xuXHRcdFwiU2luZ2xlVmFsdWVcIixcblx0XHRcIk11bHRpVmFsdWVcIixcblx0XHRcIlNpbmdsZVJhbmdlXCIsXG5cdFx0XCJNdWx0aVJhbmdlXCIsXG5cdFx0XCJTZWFyY2hFeHByZXNzaW9uXCIsXG5cdFx0XCJNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXCJcblx0XTtcblxuXHRhRXhwcmVzc2lvbnMuc29ydChmdW5jdGlvbiAoYTogYW55LCBiOiBhbnkpIHtcblx0XHRyZXR1cm4gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYSkgLSBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkuaW5kZXhPZihiKTtcblx0fSk7XG5cblx0cmV0dXJuIGFFeHByZXNzaW9uc1swXTtcbn07XG5cbmV4cG9ydCBjb25zdCBkaXNwbGF5TW9kZSA9IGZ1bmN0aW9uIChvUHJvcGVydHlBbm5vdGF0aW9uczogYW55LCBvQ29sbGVjdGlvbkFubm90YXRpb25zOiBhbnkpIHtcblx0Y29uc3Qgb1RleHRBbm5vdGF0aW9uID0gb1Byb3BlcnR5QW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCxcblx0XHRvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uID1cblx0XHRcdG9UZXh0QW5ub3RhdGlvbiAmJlxuXHRcdFx0KChvUHJvcGVydHlBbm5vdGF0aW9ucyAmJiBvUHJvcGVydHlBbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0Py5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkgfHxcblx0XHRcdFx0KG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMgJiYgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkpO1xuXG5cdGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uKSB7XG5cdFx0aWYgKG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24udmFsdWVPZigpID09PSBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dE9ubHlcIikge1xuXHRcdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25cIjtcblx0XHR9IGVsc2UgaWYgKG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24udmFsdWVPZigpID09PSBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dExhc3RcIikge1xuXHRcdFx0cmV0dXJuIFwiVmFsdWVEZXNjcmlwdGlvblwiO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblZhbHVlXCI7IC8vVGV4dEZpcnN0XG5cdH1cblx0cmV0dXJuIG9UZXh0QW5ub3RhdGlvbiA/IFwiRGVzY3JpcHRpb25WYWx1ZVwiIDogXCJWYWx1ZVwiO1xufTtcblxuY29uc3QgX2ZldGNoUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIG9GaWx0ZXJGaWVsZEluZm86IGFueSwgb1R5cGVDb25maWc6IGFueSkge1xuXHRsZXQgb1Byb3BlcnR5SW5mbyA9IF9mZXRjaEJhc2ljUHJvcGVydHlJbmZvKG9GaWx0ZXJGaWVsZEluZm8pO1xuXHRjb25zdCBzQW5ub3RhdGlvblBhdGggPSBvRmlsdGVyRmllbGRJbmZvLmFubm90YXRpb25QYXRoO1xuXG5cdGlmICghc0Fubm90YXRpb25QYXRoKSB7XG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG5cdH1cblx0Y29uc3QgdGFyZ2V0UHJvcGVydHlPYmplY3QgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3Ioc0Fubm90YXRpb25QYXRoKS5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0T2JqZWN0O1xuXG5cdGNvbnN0IG9Qcm9wZXJ0eUFubm90YXRpb25zID0gdGFyZ2V0UHJvcGVydHlPYmplY3Q/LmFubm90YXRpb25zO1xuXHRjb25zdCBvQ29sbGVjdGlvbkFubm90YXRpb25zID0gY29udmVydGVyQ29udGV4dD8uZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM7XG5cblx0Y29uc3Qgb0Zvcm1hdE9wdGlvbnMgPSBvVHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zO1xuXHRjb25zdCBvQ29uc3RyYWludHMgPSBvVHlwZUNvbmZpZy5jb25zdHJhaW50cztcblx0b1Byb3BlcnR5SW5mbyA9IE9iamVjdC5hc3NpZ24ob1Byb3BlcnR5SW5mbywge1xuXHRcdGZvcm1hdE9wdGlvbnM6IG9Gb3JtYXRPcHRpb25zLFxuXHRcdGNvbnN0cmFpbnRzOiBvQ29uc3RyYWludHMsXG5cdFx0ZGlzcGxheTogZGlzcGxheU1vZGUob1Byb3BlcnR5QW5ub3RhdGlvbnMsIG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMpXG5cdH0pO1xuXHRyZXR1cm4gb1Byb3BlcnR5SW5mbztcbn07XG5cbmV4cG9ydCBjb25zdCBpc011bHRpVmFsdWUgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBhbnkpIHtcblx0bGV0IGJJc011bHRpVmFsdWUgPSB0cnVlO1xuXHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdHN3aXRjaCAob1Byb3BlcnR5LmZpbHRlckV4cHJlc3Npb24pIHtcblx0XHRjYXNlIFwiU2VhcmNoRXhwcmVzc2lvblwiOlxuXHRcdGNhc2UgXCJTaW5nbGVSYW5nZVwiOlxuXHRcdGNhc2UgXCJTaW5nbGVWYWx1ZVwiOlxuXHRcdFx0YklzTXVsdGlWYWx1ZSA9IGZhbHNlO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGJyZWFrO1xuXHR9XG5cdGlmIChvUHJvcGVydHkudHlwZSAmJiBvUHJvcGVydHkudHlwZS5pbmRleE9mKFwiQm9vbGVhblwiKSA+IDApIHtcblx0XHRiSXNNdWx0aVZhbHVlID0gZmFsc2U7XG5cdH1cblx0cmV0dXJuIGJJc011bHRpVmFsdWU7XG59O1xuXG5jb25zdCBnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGxyVGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSA9IFtdLFxuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nID0gXCJcIixcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbiA9IGZhbHNlXG4pIHtcblx0Ly8gRmV0Y2ggYWxsIHNlbGVjdGlvblZhcmlhbnRzIGRlZmluZWQgaW4gdGhlIGRpZmZlcmVudCB2aXN1YWxpemF0aW9ucyBhbmQgZGlmZmVyZW50IHZpZXdzIChtdWx0aSB0YWJsZSBtb2RlKVxuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50czogU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb25bXSA9IGdldFNlbGVjdGlvblZhcmlhbnRzKGxyVGFibGVzLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHQvLyBjcmVhdGUgYSBtYXAgb2YgcHJvcGVydGllcyB0byBiZSB1c2VkIGluIHNlbGVjdGlvbiB2YXJpYW50c1xuXHRjb25zdCBleGNsdWRlZEZpbHRlclByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0gZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKHNlbGVjdGlvblZhcmlhbnRzKTtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHQvL0ZpbHRlcnMgd2hpY2ggaGFzIHRvIGJlIGFkZGVkIHdoaWNoIGlzIHBhcnQgb2YgU1YvRGVmYXVsdCBhbm5vdGF0aW9ucyBidXQgbm90IHByZXNlbnQgaW4gdGhlIFNlbGVjdGlvbkZpZWxkc1xuXHRjb25zdCBhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMgPSAoKGFubm90YXRpb25QYXRoICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oYW5ub3RhdGlvblBhdGgpPy5hbm5vdGF0aW9uKSB8fFxuXHRcdGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHMgfHxcblx0XHRbXSkgYXMgUHJvcGVydHlQYXRoW107XG5cblx0Ly8gY3JlYXRlIGEgbWFwIG9mIGFsbCBwb3RlbnRpYWwgZmlsdGVyIGZpZWxkcyBiYXNlZCBvbi4uLlxuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHtcblx0XHQvLyAuLi5ub24gaGlkZGVuIHByb3BlcnRpZXMgb2YgdGhlIGVudGl0eVxuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHMoZW50aXR5VHlwZSwgXCJcIiwgZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLCBpbmNsdWRlSGlkZGVuLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHQvLyAuLi5hZGRpdGlvbmFsIG1hbmlmZXN0IGRlZmluZWQgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aChcblx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEZpbHRlckNvbmZpZ3VyYXRpb24oKS5uYXZpZ2F0aW9uUHJvcGVydGllcyxcblx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0KVxuXHR9O1xuXHRsZXQgYVNlbGVjdE9wdGlvbnM6IGFueVtdID0gW107XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBnZXRTZWxlY3Rpb25WYXJpYW50KGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAoc2VsZWN0aW9uVmFyaWFudCkge1xuXHRcdGFTZWxlY3RPcHRpb25zID0gc2VsZWN0aW9uVmFyaWFudC5TZWxlY3RPcHRpb25zO1xuXHR9XG5cblx0Y29uc3QgcHJvcGVydHlJbmZvRmllbGRzOiBhbnkgPVxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8ucmVkdWNlKChzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10sIHNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBzZWxlY3Rpb25GaWVsZC52YWx1ZTtcblx0XHRcdGlmICghKHByb3BlcnR5UGF0aCBpbiBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMpKSB7XG5cdFx0XHRcdGNvbnN0IGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IF9nZXRGaWx0ZXJGaWVsZChmaWx0ZXJGaWVsZHMsIHByb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG5cdFx0XHRcdGlmIChmaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdGZpbHRlckZpZWxkLmdyb3VwID0gXCJcIjtcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZC5ncm91cExhYmVsID0gXCJcIjtcblx0XHRcdFx0XHRzZWxlY3Rpb25GaWVsZHMucHVzaChmaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG5cdFx0fSwgW10pIHx8IFtdO1xuXG5cdGNvbnN0IGRlZmF1bHRGaWx0ZXJGaWVsZHMgPSBfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyhcblx0XHRhU2VsZWN0T3B0aW9ucyxcblx0XHRlbnRpdHlUeXBlLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLFxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkc1xuXHQpO1xuXG5cdHJldHVybiB7XG5cdFx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMsXG5cdFx0ZW50aXR5VHlwZTogZW50aXR5VHlwZSxcblx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM6IGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcyxcblx0XHRmaWx0ZXJGaWVsZHM6IGZpbHRlckZpZWxkcyxcblx0XHRwcm9wZXJ0eUluZm9GaWVsZHM6IHByb3BlcnR5SW5mb0ZpZWxkcyxcblx0XHRkZWZhdWx0RmlsdGVyRmllbGRzOiBkZWZhdWx0RmlsdGVyRmllbGRzXG5cdH07XG59O1xuZXhwb3J0IGNvbnN0IHByb2Nlc3NTZWxlY3Rpb25GaWVsZHMgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5SW5mb0ZpZWxkczogYW55LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRkZWZhdWx0VmFsdWVQcm9wZXJ0eUZpZWxkcz86IGFueVxuKSB7XG5cdC8vZ2V0IFR5cGVDb25maWcgZnVuY3Rpb25cblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRUeXBlczogYW55ID0gW107XG5cdGNvbnN0IGFUeXBlQ29uZmlnOiBhbnkgPSB7fTtcblx0Y29uc3QgX2ZuVHlwZUNvbmZpZyA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHksIGtleTogc3RyaW5nKSB7XG5cdFx0Y29uc3Qgb1R5cGVDb25maWcgPSBnZXRUeXBlQ29uZmlnKHByb3BlcnR5LCBwcm9wZXJ0eT8udHlwZSk7XG5cdFx0c2VsZWN0aW9uRmllbGRUeXBlcy5wdXNoKHByb3BlcnR5Py50eXBlKTtcblx0XHRpZiAoXG5cdFx0XHRwcm9wZXJ0eT8udHlwZSA9PT0gc0VkbVN0cmluZyAmJlxuXHRcdFx0KG9UeXBlQ29uZmlnLmNvbnN0cmFpbnRzLm51bGxhYmxlID09PSB1bmRlZmluZWQgfHwgb1R5cGVDb25maWcuY29uc3RyYWludHMubnVsbGFibGUgPT09IHRydWUpXG5cdFx0KSB7XG5cdFx0XHRvVHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLnBhcnNlS2VlcHNFbXB0eVN0cmluZyA9IGZhbHNlO1xuXHRcdH1cblx0XHRhVHlwZUNvbmZpZ1trZXldID0gb1R5cGVDb25maWc7XG5cdH07XG5cblx0aWYgKGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzKSB7XG5cdFx0cHJvcGVydHlJbmZvRmllbGRzID0gcHJvcGVydHlJbmZvRmllbGRzLmNvbmNhdChkZWZhdWx0VmFsdWVQcm9wZXJ0eUZpZWxkcyk7XG5cdH1cblx0Ly9hZGQgdHlwZUNvbmZpZ1xuXHRwcm9wZXJ0eUluZm9GaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAocGFyYW1ldGVyRmllbGQ6IGFueSkge1xuXHRcdGlmIChwYXJhbWV0ZXJGaWVsZC5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlDb252ZXJ0eUNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3IocGFyYW1ldGVyRmllbGQuYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlUYXJnZXRPYmplY3QgPSBwcm9wZXJ0eUNvbnZlcnR5Q29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0T2JqZWN0O1xuXHRcdFx0X2ZuVHlwZUNvbmZpZyhwcm9wZXJ0eVRhcmdldE9iamVjdCwgcGFyYW1ldGVyRmllbGQua2V5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZWN0aW9uRmllbGRUeXBlcy5wdXNoKHNFZG1TdHJpbmcpO1xuXHRcdFx0YVR5cGVDb25maWdbcGFyYW1ldGVyRmllbGQua2V5XSA9IHsgdHlwZTogc1N0cmluZ0RhdGFUeXBlIH07XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBmaWx0ZXJSZXN0cmljdGlvbnNcblx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM/LkZpbHRlclJlc3RyaWN0aW9ucztcblx0Y29uc3Qgb1JldCA9IHt9IGFzIGFueTtcblx0b1JldFtcIlJlcXVpcmVkUHJvcGVydGllc1wiXSA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXTtcblx0b1JldFtcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCJdID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW107XG5cdG9SZXRbXCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcIl0gPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9ucywgXCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcIikgfHwge307XG5cblx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGNvbnN0IGFQYXRoUGFydHMgPSBzRW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIik7XG5cdGlmIChhUGF0aFBhcnRzLmxlbmd0aCA+IDIpIHtcblx0XHRjb25zdCBzTmF2aWdhdGlvblBhdGggPSBhUGF0aFBhcnRzW2FQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cdFx0YVBhdGhQYXJ0cy5zcGxpY2UoLTEsIDEpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBzTmF2aWdhdGlvblBhdGgpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zID0gb05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnMuRmlsdGVyUmVzdHJpY3Rpb25zO1xuXHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzLmNvbmNhdChnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdKTtcblx0XHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzLmNvbmNhdChnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW10pO1xuXHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0ge1xuXHRcdFx0Li4uKGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucywgXCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcIikgfHwge30pLFxuXHRcdFx0Li4ub1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcblx0XHR9O1xuXHR9XG5cdGNvbnN0IGlzQ2FzZVNlbnNpdGl2ZSA9IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgYVJlcXVpcmVkUHJvcHMgPSBvUmV0LlJlcXVpcmVkUHJvcGVydGllcztcblx0Y29uc3QgYU5vbkZpbHRlcmFibGVQcm9wcyA9IG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXM7XG5cdGxldCBvUHJvcGVydHlJbmZvO1xuXHRjb25zdCBhRmV0Y2hlZFByb3BlcnRpZXM6IGFueSA9IFtdO1xuXG5cdC8vIHByb2Nlc3MgdGhlIGZpZWxkcyB0byBhZGQgbmVjZXNzYXJ5IHByb3BlcnRpZXNcblx0cHJvcGVydHlJbmZvRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5SW5mb0ZpZWxkOiBhbnkpIHtcblx0XHRjb25zdCBvQ29udmVydGVkUHJvcGVydHkgPSBwcm9wZXJ0eUluZm9GaWVsZDtcblx0XHRsZXQgc1Byb3BlcnR5UGF0aDtcblx0XHRpZiAob0NvbnZlcnRlZFByb3BlcnR5LmNvbmRpdGlvblBhdGgpIHtcblx0XHRcdHNQcm9wZXJ0eVBhdGggPSBvQ29udmVydGVkUHJvcGVydHkuY29uZGl0aW9uUGF0aC5yZXBsYWNlKC9cXCt8XFwqL2csIFwiXCIpO1xuXHRcdH1cblx0XHRpZiAoYU5vbkZpbHRlcmFibGVQcm9wcy5pbmRleE9mKHNQcm9wZXJ0eVBhdGgpID09PSAtMSkge1xuXHRcdFx0b1Byb3BlcnR5SW5mbyA9IF9mZXRjaFByb3BlcnR5SW5mbyhjb252ZXJ0ZXJDb250ZXh0LCBvQ29udmVydGVkUHJvcGVydHksIGFUeXBlQ29uZmlnW3Byb3BlcnR5SW5mb0ZpZWxkLmtleV0pO1xuXHRcdFx0aWYgKG9Qcm9wZXJ0eUluZm8pIHtcblx0XHRcdFx0b1Byb3BlcnR5SW5mbyA9IE9iamVjdC5hc3NpZ24ob1Byb3BlcnR5SW5mbywge1xuXHRcdFx0XHRcdG1heENvbmRpdGlvbnM6ICFvUHJvcGVydHlJbmZvLmlzUGFyYW1ldGVyICYmIGlzTXVsdGlWYWx1ZShvUHJvcGVydHlJbmZvKSA/IC0xIDogMSxcblx0XHRcdFx0XHRyZXF1aXJlZDogb1Byb3BlcnR5SW5mby5pc1BhcmFtZXRlciB8fCBhUmVxdWlyZWRQcm9wcy5pbmRleE9mKHNQcm9wZXJ0eVBhdGgpID49IDAsXG5cdFx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogaXNDYXNlU2Vuc2l0aXZlLFxuXHRcdFx0XHRcdGRhdGFUeXBlOiBhVHlwZUNvbmZpZ1twcm9wZXJ0eUluZm9GaWVsZC5rZXldLnR5cGVcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0YUZldGNoZWRQcm9wZXJ0aWVzLnB1c2gob1Byb3BlcnR5SW5mbyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHQvL2FkZCBlZGl0XG5cdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdCkge1xuXHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKGdldEVkaXRTdGF0ZUZpbHRlclByb3BlcnR5SW5mbygpKTtcblx0fVxuXHQvLyBhZGQgc2VhcmNoXG5cdGNvbnN0IHNlYXJjaFJlc3RyaWN0aW9ucyA9IGdldFNlYXJjaFJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgaGlkZUJhc2ljU2VhcmNoID0gQm9vbGVhbihzZWFyY2hSZXN0cmljdGlvbnMgJiYgIXNlYXJjaFJlc3RyaWN0aW9ucy5TZWFyY2hhYmxlKTtcblx0aWYgKHNFbnRpdHlTZXRQYXRoICYmIGhpZGVCYXNpY1NlYXJjaCAhPT0gdHJ1ZSkge1xuXHRcdGlmICghc2VhcmNoUmVzdHJpY3Rpb25zIHx8IHNlYXJjaFJlc3RyaWN0aW9ucz8uU2VhcmNoYWJsZSkge1xuXHRcdFx0YUZldGNoZWRQcm9wZXJ0aWVzLnB1c2goZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvKCkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhRmV0Y2hlZFByb3BlcnRpZXM7XG59O1xuXG5leHBvcnQgY29uc3QgaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyA9IGZ1bmN0aW9uIChcblx0ZmlsdGVyRmllbGRzOiBGaWx0ZXJGaWVsZFtdLFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pIHtcblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKGZpbHRlckZpZWxkcywgZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCksIHtcblx0XHRcImF2YWlsYWJpbGl0eVwiOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdGxhYmVsOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdHR5cGU6IFwib3ZlcndyaXRlXCIsXG5cdFx0cG9zaXRpb246IFwib3ZlcndyaXRlXCIsXG5cdFx0dGVtcGxhdGU6IFwib3ZlcndyaXRlXCIsXG5cdFx0c2V0dGluZ3M6IFwib3ZlcndyaXRlXCIsXG5cdFx0dmlzdWFsRmlsdGVyOiBcIm92ZXJ3cml0ZVwiXG5cdH0pO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlbGVjdGlvbiBmaWVsZHMgdGhhdCB3aWxsIGJlIHVzZWQgd2l0aGluIHRoZSBmaWx0ZXIgYmFyXG4gKiBUaGlzIGNvbmZpZ3VyYXRpb24gdGFrZXMgaW50byBhY2NvdW50IGFubm90YXRpb24gYW5kIHRoZSBzZWxlY3Rpb24gdmFyaWFudHMuXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB7VGFibGVWaXN1YWxpemF0aW9uW119IGxyVGFibGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gYW5ub3RhdGlvblBhdGhcbiAqIEByZXR1cm5zIHtGaWx0ZXJTZWxlY3Rpb25GaWVsZFtdfSBBbiBhcnJheSBvZiBzZWxlY3Rpb24gZmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3Rpb25GaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGxyVGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSA9IFtdLFxuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nID0gXCJcIixcblx0aW5jbHVkZUhpZGRlbj86IGJvb2xlYW5cbik6IGFueSB7XG5cdGNvbnN0IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEgPSBnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEoY29udmVydGVyQ29udGV4dCwgbHJUYWJsZXMsIGFubm90YXRpb25QYXRoLCBpbmNsdWRlSGlkZGVuKTtcblx0Y29uc3QgcGFyYW1ldGVyRmllbGRzID0gX2dldFBhcmFtZXRlckZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0bGV0IHByb3BlcnR5SW5mb0ZpZWxkczogRmlsdGVyRmllbGRbXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5wcm9wZXJ0eUluZm9GaWVsZHMpKTtcblx0Y29uc3QgZW50aXR5VHlwZSA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZW50aXR5VHlwZTtcblxuXHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBwYXJhbWV0ZXJGaWVsZHMuY29uY2F0KHByb3BlcnR5SW5mb0ZpZWxkcyk7XG5cblx0cHJvcGVydHlJbmZvRmllbGRzID0gaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyhwcm9wZXJ0eUluZm9GaWVsZHMsIGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdGNvbnN0IGFGZXRjaGVkUHJvcGVydGllcyA9IHByb2Nlc3NTZWxlY3Rpb25GaWVsZHMoXG5cdFx0cHJvcGVydHlJbmZvRmllbGRzLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0b0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5kZWZhdWx0RmlsdGVyRmllbGRzXG5cdCk7XG5cdGFGZXRjaGVkUHJvcGVydGllcy5zb3J0KGZ1bmN0aW9uIChhOiBhbnksIGI6IGFueSkge1xuXHRcdGlmIChhLmdyb3VwTGFiZWwgPT09IHVuZGVmaW5lZCB8fCBhLmdyb3VwTGFiZWwgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiAtMTtcblx0XHR9XG5cdFx0aWYgKGIuZ3JvdXBMYWJlbCA9PT0gdW5kZWZpbmVkIHx8IGIuZ3JvdXBMYWJlbCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXHRcdHJldHVybiBhLmdyb3VwTGFiZWwubG9jYWxlQ29tcGFyZShiLmdyb3VwTGFiZWwpO1xuXHR9KTtcblxuXHRsZXQgc0ZldGNoUHJvcGVydGllcyA9IEpTT04uc3RyaW5naWZ5KGFGZXRjaGVkUHJvcGVydGllcyk7XG5cdHNGZXRjaFByb3BlcnRpZXMgPSBzRmV0Y2hQcm9wZXJ0aWVzLnJlcGxhY2UoL1xcey9nLCBcIlxcXFx7XCIpO1xuXHRzRmV0Y2hQcm9wZXJ0aWVzID0gc0ZldGNoUHJvcGVydGllcy5yZXBsYWNlKC9cXH0vZywgXCJcXFxcfVwiKTtcblx0Y29uc3Qgc1Byb3BlcnR5SW5mbyA9IHNGZXRjaFByb3BlcnRpZXM7XG5cdC8vIGVuZCBvZiBwcm9wZXJ0eUZpZWxkcyBwcm9jZXNzaW5nXG5cblx0Ly8gdG8gcG9wdWxhdGUgc2VsZWN0aW9uIGZpZWxkc1xuXHRsZXQgcHJvcFNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5wcm9wZXJ0eUluZm9GaWVsZHMpKTtcblx0cHJvcFNlbGVjdGlvbkZpZWxkcyA9IHBhcmFtZXRlckZpZWxkcy5jb25jYXQocHJvcFNlbGVjdGlvbkZpZWxkcyk7XG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgaW4gc2VsZWN0aW9uIHZhcmlhbnRzXG5cdGNvbnN0IGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcztcblx0Y29uc3QgZmlsdGVyRmFjZXRzID0gZW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5GaWx0ZXJGYWNldHM7XG5cdGxldCBmaWx0ZXJGYWNldE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+ID0ge307XG5cblx0Y29uc3QgYUZpZWxkR3JvdXBzID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIlVJXCIsIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXApO1xuXG5cdGlmIChmaWx0ZXJGYWNldHMgPT09IHVuZGVmaW5lZCB8fCBmaWx0ZXJGYWNldHMubGVuZ3RoIDwgMCkge1xuXHRcdGZvciAoY29uc3QgaSBpbiBhRmllbGRHcm91cHMpIHtcblx0XHRcdGZpbHRlckZhY2V0TWFwID0ge1xuXHRcdFx0XHQuLi5maWx0ZXJGYWNldE1hcCxcblx0XHRcdFx0Li4uZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyhhRmllbGRHcm91cHNbaV0gYXMgQW5ub3RhdGlvblRlcm08RmllbGRHcm91cFR5cGU+KVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0ZmlsdGVyRmFjZXRNYXAgPSBmaWx0ZXJGYWNldHMucmVkdWNlKChwcmV2aW91c1ZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4sIGZpbHRlckZhY2V0OiBSZWZlcmVuY2VGYWNldFR5cGVzKSA9PiB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IChmaWx0ZXJGYWNldC5UYXJnZXQuJHRhcmdldCBhcyBGaWVsZEdyb3VwKS5EYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHByZXZpb3VzVmFsdWVbKChmaWx0ZXJGYWNldC5UYXJnZXQuJHRhcmdldCBhcyBGaWVsZEdyb3VwKS5EYXRhW2ldIGFzIERhdGFGaWVsZFR5cGVzKS5WYWx1ZS5wYXRoXSA9IHtcblx0XHRcdFx0XHRncm91cDogZmlsdGVyRmFjZXQ/LklEPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdGdyb3VwTGFiZWw6IGZpbHRlckZhY2V0Py5MYWJlbD8udG9TdHJpbmcoKVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByZXZpb3VzVmFsdWU7XG5cdFx0fSwge30pO1xuXHR9XG5cblx0Ly8gY3JlYXRlIGEgbWFwIG9mIGFsbCBwb3RlbnRpYWwgZmlsdGVyIGZpZWxkcyBiYXNlZCBvbi4uLlxuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZmlsdGVyRmllbGRzO1xuXG5cdC8vIGZpbmFsbHkgY3JlYXRlIGZpbmFsIGxpc3Qgb2YgZmlsdGVyIGZpZWxkcyBieSBhZGRpbmcgdGhlIFNlbGVjdGlvbkZpZWxkcyBmaXJzdCAob3JkZXIgbWF0dGVycykuLi5cblx0bGV0IGFsbEZpbHRlcnMgPSBwcm9wU2VsZWN0aW9uRmllbGRzXG5cblx0XHQvLyAuLi5hbmQgYWRkaW5nIHJlbWFpbmluZyBmaWx0ZXIgZmllbGRzLCB0aGF0IGFyZSBub3QgdXNlZCBpbiBhIFNlbGVjdGlvblZhcmlhbnQgKG9yZGVyIGRvZXNuJ3QgbWF0dGVyKVxuXHRcdC5jb25jYXQoXG5cdFx0XHRPYmplY3Qua2V5cyhmaWx0ZXJGaWVsZHMpXG5cdFx0XHRcdC5maWx0ZXIoKHByb3BlcnR5UGF0aCkgPT4gIShwcm9wZXJ0eVBhdGggaW4gZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKSlcblx0XHRcdFx0Lm1hcCgocHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF0sIGZpbHRlckZhY2V0TWFwW3Byb3BlcnR5UGF0aF0pO1xuXHRcdFx0XHR9KVxuXHRcdCk7XG5cdGNvbnN0IHNDb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblxuXHQvL2lmIGFsbCB0YWJsZXMgYXJlIGFuYWx5dGljYWwgdGFibGVzIFwiYWdncmVnYXRhYmxlXCIgcHJvcGVydGllcyBtdXN0IGJlIGV4Y2x1ZGVkXG5cdGlmIChjaGVja0FsbFRhYmxlRm9yRW50aXR5U2V0QXJlQW5hbHl0aWNhbChsclRhYmxlcywgc0NvbnRleHRQYXRoKSkge1xuXHRcdC8vIEN1cnJlbnRseSBhbGwgYWdyZWdhdGVzIGFyZSByb290IGVudGl0eSBwcm9wZXJ0aWVzIChubyBwcm9wZXJ0aWVzIGNvbWluZyBmcm9tIG5hdmlnYXRpb24pIGFuZCBhbGxcblx0XHQvLyB0YWJsZXMgd2l0aCBzYW1lIGVudGl0eVNldCBnZXRzIHNhbWUgYWdncmVhZ3RlIGNvbmZpZ3VyYXRpb24gdGhhdCdzIHdoeSB3ZSBjYW4gdXNlIGZpcnN0IHRhYmxlIGludG9cblx0XHQvLyBMUiB0byBnZXQgYWdncmVnYXRlcyAod2l0aG91dCBjdXJyZW5jeS91bml0IHByb3BlcnRpZXMgc2luY2Ugd2UgZXhwZWN0IHRvIGJlIGFibGUgdG8gZmlsdGVyIHRoZW0pLlxuXHRcdGNvbnN0IGFnZ3JlZ2F0ZXMgPSBsclRhYmxlc1swXS5hZ2dyZWdhdGVzO1xuXHRcdGlmIChhZ2dyZWdhdGVzKSB7XG5cdFx0XHRjb25zdCBhZ2dyZWdhdGFibGVQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGFnZ3JlZ2F0ZXMpLm1hcCgoYWdncmVnYXRlS2V5KSA9PiBhZ2dyZWdhdGVzW2FnZ3JlZ2F0ZUtleV0ucmVsYXRpdmVQYXRoKTtcblx0XHRcdGFsbEZpbHRlcnMgPSBhbGxGaWx0ZXJzLmZpbHRlcigoZmlsdGVyRmllbGQpID0+IHtcblx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMuaW5kZXhPZihmaWx0ZXJGaWVsZC5rZXkpID09PSAtMTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkcyA9IGluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMoYWxsRmlsdGVycywgZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0Ly8gQWRkIGNhc2VTZW5zaXRpdmUgcHJvcGVydHkgdG8gYWxsIHNlbGVjdGlvbiBmaWVsZHMuXG5cdGNvbnN0IGlzQ2FzZVNlbnNpdGl2ZSA9IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KTtcblx0c2VsZWN0aW9uRmllbGRzLmZvckVhY2goKGZpbHRlckZpZWxkKSA9PiB7XG5cdFx0ZmlsdGVyRmllbGQuY2FzZVNlbnNpdGl2ZSA9IGlzQ2FzZVNlbnNpdGl2ZTtcblx0fSk7XG5cblx0cmV0dXJuIHsgc2VsZWN0aW9uRmllbGRzLCBzUHJvcGVydHlJbmZvIH07XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgZmlsdGVyIGJhciBpbnNpZGUgYSB2YWx1ZSBoZWxwIGRpYWxvZyBzaG91bGQgYmUgZXhwYW5kZWQuIFRoaXMgaXMgdHJ1ZSBpZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb24gaG9sZHM6XG4gKiAoMSkgYSBmaWx0ZXIgcHJvcGVydHkgaXMgbWFuZGF0b3J5LFxuICogKDIpIG5vIHNlYXJjaCBmaWVsZCBleGlzdHMgKGVudGl0eSBpc24ndCBzZWFyY2ggZW5hYmxlZCksXG4gKiAoMykgd2hlbiB0aGUgZGF0YSBpc24ndCBsb2FkZWQgYnkgZGVmYXVsdCAoYW5ub3RhdGlvbiBGZXRjaFZhbHVlcyA9IDIpLlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHthbnl9IGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gVGhlIEZpbHRlclJlc3RyaWN0aW9uIGFubm90YXRpb25cbiAqIEBwYXJhbSB7YW55fSB2YWx1ZUxpc3RBbm5vdGF0aW9uIFRoZSBWYWx1ZUxpc3QgYW5ub3RhdGlvblxuICogQHJldHVybnMge2Jvb2xlYW59IFRoZSB2YWx1ZSBmb3IgZXhwYW5kRmlsdGVyRmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHBhbmRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb246IGFueSxcblx0dmFsdWVMaXN0QW5ub3RhdGlvbjogYW55XG4pOiBib29sZWFuIHtcblx0Y29uc3QgcmVxdWlyZWRQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24sIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpO1xuXHRjb25zdCBzZWFyY2hSZXN0cmljdGlvbnMgPSBnZXRTZWFyY2hSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IEJvb2xlYW4oc2VhcmNoUmVzdHJpY3Rpb25zICYmICFzZWFyY2hSZXN0cmljdGlvbnMuU2VhcmNoYWJsZSk7XG5cdGNvbnN0IHZhbHVlTGlzdCA9IHZhbHVlTGlzdEFubm90YXRpb24uZ2V0T2JqZWN0KCk7XG5cdGlmIChyZXF1aXJlZFByb3BlcnRpZXMubGVuZ3RoID4gMCB8fCBoaWRlQmFzaWNTZWFyY2ggfHwgdmFsdWVMaXN0Py5GZXRjaFZhbHVlcyA9PT0gMikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG4iXX0=
|
|
928
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZpbHRlckJhci50cyJdLCJuYW1lcyI6WyJmaWx0ZXJGaWVsZFR5cGUiLCJzRWRtU3RyaW5nIiwic1N0cmluZ0RhdGFUeXBlIiwiZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyIsImZpZWxkR3JvdXAiLCJmaWx0ZXJGYWNldE1hcCIsIkRhdGEiLCJmb3JFYWNoIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJWYWx1ZSIsInBhdGgiLCJncm91cCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdyb3VwTGFiZWwiLCJjb21waWxlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsIkxhYmVsIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJxdWFsaWZpZXIiLCJnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJzZWxlY3Rpb25WYXJpYW50cyIsInJlZHVjZSIsInByZXZpb3VzVmFsdWUiLCJzZWxlY3Rpb25WYXJpYW50IiwicHJvcGVydHlOYW1lcyIsInByb3BlcnR5TmFtZSIsImNoZWNrQWxsVGFibGVGb3JFbnRpdHlTZXRBcmVBbmFseXRpY2FsIiwibGlzdFJlcG9ydFRhYmxlcyIsImNvbnRleHRQYXRoIiwibGVuZ3RoIiwiZXZlcnkiLCJ2aXN1YWxpemF0aW9uIiwiZW5hYmxlQW5hbHl0aWNzIiwiYW5ub3RhdGlvbiIsImNvbGxlY3Rpb24iLCJnZXRTZWxlY3Rpb25WYXJpYW50cyIsImxyVGFibGVWaXN1YWxpemF0aW9ucyIsImNvbnZlcnRlckNvbnRleHQiLCJzZWxlY3Rpb25WYXJpYW50UGF0aHMiLCJtYXAiLCJ0YWJsZUZpbHRlcnMiLCJjb250cm9sIiwiZmlsdGVycyIsInRhYmxlU1ZDb25maWdzIiwia2V5IiwiQXJyYXkiLCJpc0FycmF5IiwicGF0aHMiLCJhbm5vdGF0aW9uUGF0aCIsImluZGV4T2YiLCJwdXNoIiwic2VsZWN0aW9uVmFyaWFudENvbmZpZyIsImdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIiwic3ZDb25maWdzIiwiY29uY2F0IiwiX2dldENvbmRpdGlvblBhdGgiLCJlbnRpdHlUeXBlIiwicHJvcGVydHlQYXRoIiwicGFydHMiLCJzcGxpdCIsInBhcnRpYWxQYXRoIiwicGFydCIsInNoaWZ0IiwicHJvcGVydHkiLCJyZXNvbHZlUGF0aCIsIl90eXBlIiwiaXNDb2xsZWN0aW9uIiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJ1bmRlZmluZWQiLCJ0YXJnZXRUeXBlIiwiVUkiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwidGFyZ2V0RW50aXR5VHlwZSIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiS2V5SGVscGVyIiwiZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJjb25kaXRpb25QYXRoIiwiYXZhaWxhYmlsaXR5IiwiSGlkZGVuRmlsdGVyIiwiQXZhaWxhYmlsaXR5VHlwZSIsIkFkYXB0YXRpb24iLCJsYWJlbCIsIm5hbWUiLCJnZXRNb2RlbFR5cGUiLCJzVHlwZSIsIm1EZWZhdWx0VHlwZUZvckVkbVR5cGUiLCJtb2RlbFR5cGUiLCJfZ2V0U2VsZWN0aW9uRmllbGRzIiwibmF2aWdhdGlvblBhdGgiLCJwcm9wZXJ0aWVzIiwic2VsZWN0aW9uRmllbGRNYXAiLCJmdWxsUGF0aCIsInNlbGVjdGlvbkZpZWxkIiwiX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aCIsInByb3BlcnR5UGF0aHMiLCJzZWxlY3Rpb25GaWVsZHMiLCJsb2NhbFNlbGVjdGlvbkZpZWxkcyIsImVudGl0eVByb3BlcnRpZXMiLCJpbmNsdWRlcyIsInNwbGljZSIsImpvaW4iLCJfZ2V0RmlsdGVyRmllbGQiLCJmaWx0ZXJGaWVsZHMiLCJmaWx0ZXJGaWVsZCIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJIaWdoIiwiSXNzdWVUeXBlIiwiTUlTU0lOR19TRUxFQ1RJT05GSUVMRCIsIkRlZmF1bHQiLCJpc1BhcmFtZXRlciIsIlJlc3VsdENvbnRleHQiLCJfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyIsImFTZWxlY3RPcHRpb25zIiwiZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzIiwiYW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzIiwiVUlTZWxlY3Rpb25GaWVsZHMiLCJTZWxlY3Rpb25GaWVsZCIsInZhbHVlIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwic1Byb3BlcnR5UGF0aCIsImN1cnJlbnRTZWxlY3Rpb25GaWVsZHMiLCJGaWx0ZXJGaWVsZCIsImdldEZpbHRlckZpZWxkIiwiZGVmYXVsdEZpbHRlclZhbHVlIiwiRmlsdGVyRGVmYXVsdFZhbHVlIiwiX2dldFBhcmFtZXRlckZpZWxkcyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsInN0YXJ0aW5nRW50aXR5U2V0IiwiaXNQYXJhbWV0ZXJpemVkIiwidGFyZ2V0RW50aXR5U2V0IiwicGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRGaWx0ZXJCYXJoaWRlQmFzaWNTZWFyY2giLCJjaGFydHMiLCJub1NlYXJjaEluQ2hhcnRzIiwiY2hhcnQiLCJhcHBseVN1cHBvcnRlZCIsImVuYWJsZVNlYXJjaCIsIm5vU2VhcmNoSW5UYWJsZXMiLCJ0YWJsZSIsImVuYWJsZUFuYWx5dGljc1NlYXJjaCIsImdldENvbnRleHRQYXRoIiwiZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJmYkNvbmZpZyIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJkZWZpbmVkRmlsdGVyRmllbGRzIiwiT2JqZWN0Iiwia2V5cyIsImdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkiLCJzS2V5IiwidHlwZSIsIlNsb3QiLCJ2aXN1YWxGaWx0ZXIiLCJnZXRWaXN1YWxGaWx0ZXJzIiwidGVtcGxhdGUiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwic2V0dGluZ3MiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnMiLCJvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiIsInNSZXN0cmljdGlvbiIsImFQcm9wcyIsIm9Qcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJtQWxsb3dlZEV4cHJlc3Npb25zIiwiRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyIsIlByb3BlcnR5IiwiQWxsb3dlZEV4cHJlc3Npb25zIiwiZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvIiwiZGF0YVR5cGUiLCJtYXhDb25kaXRpb25zIiwiZ2V0RWRpdFN0YXRlRmlsdGVyUHJvcGVydHlJbmZvIiwiaGlkZGVuRmlsdGVyIiwiZ2V0U2VhcmNoUmVzdHJpY3Rpb25zIiwiZ2V0RW50aXR5U2V0IiwiQ2FwYWJpbGl0aWVzIiwiU2VhcmNoUmVzdHJpY3Rpb25zIiwiZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsInNOYXZpZ2F0aW9uUGF0aCIsIm9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwiTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsImFSZXN0cmljdGVkUHJvcGVydGllcyIsIlJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwiZmluZCIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIl9mZXRjaEJhc2ljUHJvcGVydHlJbmZvIiwib0ZpbHRlckZpZWxkSW5mbyIsImRpc3BsYXkiLCJjYXNlU2Vuc2l0aXZlIiwibWVudSIsImdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24iLCJhRXhwcmVzc2lvbnMiLCJhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkiLCJzb3J0IiwiYSIsImIiLCJkaXNwbGF5TW9kZSIsIm9Qcm9wZXJ0eUFubm90YXRpb25zIiwib0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyIsIm9UZXh0QW5ub3RhdGlvbiIsIlRleHQiLCJvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uIiwiVGV4dEFycmFuZ2VtZW50IiwiX2ZldGNoUHJvcGVydHlJbmZvIiwib1R5cGVDb25maWciLCJvUHJvcGVydHlJbmZvIiwic0Fubm90YXRpb25QYXRoIiwidGFyZ2V0UHJvcGVydHlPYmplY3QiLCJ0YXJnZXRPYmplY3QiLCJvRm9ybWF0T3B0aW9ucyIsImZvcm1hdE9wdGlvbnMiLCJvQ29uc3RyYWludHMiLCJjb25zdHJhaW50cyIsImFzc2lnbiIsImlzTXVsdGlWYWx1ZSIsImJJc011bHRpVmFsdWUiLCJmaWx0ZXJFeHByZXNzaW9uIiwiZ2V0QW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhIiwibHJUYWJsZXMiLCJnZXRFbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJTZWxlY3Rpb25GaWVsZHMiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3RPcHRpb25zIiwicHJvcGVydHlJbmZvRmllbGRzIiwiZGVmYXVsdEZpbHRlckZpZWxkcyIsInByb2Nlc3NTZWxlY3Rpb25GaWVsZHMiLCJkZWZhdWx0VmFsdWVQcm9wZXJ0eUZpZWxkcyIsInNlbGVjdGlvbkZpZWxkVHlwZXMiLCJhVHlwZUNvbmZpZyIsIl9mblR5cGVDb25maWciLCJnZXRUeXBlQ29uZmlnIiwibnVsbGFibGUiLCJwYXJzZUtlZXBzRW1wdHlTdHJpbmciLCJwYXJhbWV0ZXJGaWVsZCIsInByb3BlcnR5Q29udmVydHlDb250ZXh0IiwicHJvcGVydHlUYXJnZXRPYmplY3QiLCJvRmlsdGVyUmVzdHJpY3Rpb25zIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwib1JldCIsInNFbnRpdHlTZXRQYXRoIiwiYVBhdGhQYXJ0cyIsIm9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMiLCJpc0Nhc2VTZW5zaXRpdmUiLCJpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJhUmVxdWlyZWRQcm9wcyIsImFOb25GaWx0ZXJhYmxlUHJvcHMiLCJhRmV0Y2hlZFByb3BlcnRpZXMiLCJwcm9wZXJ0eUluZm9GaWVsZCIsIm9Db252ZXJ0ZWRQcm9wZXJ0eSIsInJlcGxhY2UiLCJyZXF1aXJlZCIsIkRyYWZ0Um9vdCIsInNlYXJjaFJlc3RyaWN0aW9ucyIsImhpZGVCYXNpY1NlYXJjaCIsIkJvb2xlYW4iLCJTZWFyY2hhYmxlIiwiaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiZ2V0U2VsZWN0aW9uRmllbGRzIiwib0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSIsInBhcmFtZXRlckZpZWxkcyIsIkpTT04iLCJwYXJzZSIsInN0cmluZ2lmeSIsImxvY2FsZUNvbXBhcmUiLCJzRmV0Y2hQcm9wZXJ0aWVzIiwic1Byb3BlcnR5SW5mbyIsInByb3BTZWxlY3Rpb25GaWVsZHMiLCJmaWx0ZXJGYWNldHMiLCJGaWx0ZXJGYWNldHMiLCJhRmllbGRHcm91cHMiLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsImkiLCJmaWx0ZXJGYWNldCIsIlRhcmdldCIsIiR0YXJnZXQiLCJJRCIsInRvU3RyaW5nIiwiYWxsRmlsdGVycyIsImZpbHRlciIsInNDb250ZXh0UGF0aCIsImFnZ3JlZ2F0ZXMiLCJhZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiYWdncmVnYXRlS2V5IiwicmVsYXRpdmVQYXRoIiwiZ2V0RXhwYW5kRmlsdGVyRmllbGRzIiwiZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiIsInZhbHVlTGlzdEFubm90YXRpb24iLCJyZXF1aXJlZFByb3BlcnRpZXMiLCJ2YWx1ZUxpc3QiLCJnZXRPYmplY3QiLCJGZXRjaFZhbHVlcyJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7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YkE7QUFBbkIsS0FBUDtBQUNBLEdBeEdNO0FBMEdQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sTUFBTW1CLHFCQUFxQixHQUFHLFVBQ3BDN1EsZ0JBRG9DLEVBRXBDOFEsNEJBRm9DLEVBR3BDQyxtQkFIb0MsRUFJMUI7QUFDVixRQUFNQyxrQkFBa0IsR0FBR3pJLHFCQUFxQixDQUFDdUksNEJBQUQsRUFBK0Isb0JBQS9CLENBQWhEO0FBQ0EsUUFBTWxDLGtCQUFrQixHQUFHdEYscUJBQXFCLENBQUN0SixnQkFBRCxDQUFoRDtBQUNBLFFBQU02TyxlQUFlLEdBQUdDLE9BQU8sQ0FBQ0Ysa0JBQWtCLElBQUksQ0FBQ0Esa0JBQWtCLENBQUNHLFVBQTNDLENBQS9CO0FBQ0EsUUFBTWtDLFNBQVMsR0FBR0YsbUJBQW1CLENBQUNHLFNBQXBCLEVBQWxCOztBQUNBLFFBQUlGLGtCQUFrQixDQUFDeFIsTUFBbkIsR0FBNEIsQ0FBNUIsSUFBaUNxUCxlQUFqQyxJQUFvRCxDQUFBb0MsU0FBUyxTQUFULElBQUFBLFNBQVMsV0FBVCxZQUFBQSxTQUFTLENBQUVFLFdBQVgsTUFBMkIsQ0FBbkYsRUFBc0Y7QUFDckYsYUFBTyxJQUFQO0FBQ0E7O0FBQ0QsV0FBTyxLQUFQO0FBQ0EsR0FiTSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlUeXBlLCBOYXZpZ2F0aW9uUHJvcGVydHksIFByb3BlcnR5LCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkVHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdFNlbGVjdE9wdGlvblR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHR5cGUgeyBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiwgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiwgZ2V0VHlwZUNvbmZpZywgaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IFZpc3VhbEZpbHRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L1Zpc3VhbEZpbHRlcnNcIjtcbmltcG9ydCB7IGdldFZpc3VhbEZpbHRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L1Zpc3VhbEZpbHRlcnNcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIEN1c3RvbUVsZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgaW5zZXJ0Q3VzdG9tRWxlbWVudHMsIFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbiwgRmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uLCBGaWx0ZXJTZXR0aW5ncyB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBBdmFpbGFiaWxpdHlUeXBlIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IGdldFNlbGVjdGlvblZhcmlhbnQgfSBmcm9tIFwiLi4vQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG4vL2ltcG9ydCB7IGhhc1ZhbHVlSGVscCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5cbmV4cG9ydCB0eXBlIEZpbHRlckZpZWxkID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHR0eXBlPzogc3RyaW5nO1xuXHRjb25kaXRpb25QYXRoOiBzdHJpbmc7XG5cdGF2YWlsYWJpbGl0eTogQXZhaWxhYmlsaXR5VHlwZTtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRncm91cD86IHN0cmluZztcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcblx0c2V0dGluZ3M/OiBGaWx0ZXJTZXR0aW5ncztcblx0aXNQYXJhbWV0ZXI/OiBib29sZWFuO1xuXHR2aXN1YWxGaWx0ZXI/OiBWaXN1YWxGaWx0ZXJzO1xuXHRjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcbn07XG5cbnR5cGUgRmlsdGVyR3JvdXAgPSB7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xufTtcblxuZW51bSBmaWx0ZXJGaWVsZFR5cGUge1xuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsXG5cdFNsb3QgPSBcIlNsb3RcIlxufVxuXG5jb25zdCBzRWRtU3RyaW5nID0gXCJFZG0uU3RyaW5nXCI7XG5jb25zdCBzU3RyaW5nRGF0YVR5cGUgPSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiO1xuXG5leHBvcnQgdHlwZSBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQgPSBDdXN0b21FbGVtZW50PEZpbHRlckZpZWxkPjtcblxuLyoqXG4gKiBFbnRlciBhbGwgRGF0YUZpZWxkcyBvZiBhIGdpdmVuIEZpZWxkR3JvdXAgaW50byB0aGUgZmlsdGVyRmFjZXRNYXAuXG4gKlxuICogQHBhcmFtIGZpZWxkR3JvdXBcbiAqIEByZXR1cm5zIFRoZSBtYXAgb2YgZmFjZXRzIGZvciB0aGUgZ2l2ZW4gRmllbGRHcm91cFxuICovXG5mdW5jdGlvbiBnZXRGaWVsZEdyb3VwRmlsdGVyR3JvdXBzKGZpZWxkR3JvdXA6IEZpZWxkR3JvdXApOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4ge1xuXHRjb25zdCBmaWx0ZXJGYWNldE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+ID0ge307XG5cdGZpZWxkR3JvdXAuRGF0YS5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiKSB7XG5cdFx0XHRmaWx0ZXJGYWNldE1hcFtkYXRhRmllbGQuVmFsdWUucGF0aF0gPSB7XG5cdFx0XHRcdGdyb3VwOiBmaWVsZEdyb3VwLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0Z3JvdXBMYWJlbDpcblx0XHRcdFx0XHRjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmaWVsZEdyb3VwLkxhYmVsIHx8IGZpZWxkR3JvdXAuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWwgfHwgZmllbGRHcm91cC5xdWFsaWZpZXIpXG5cdFx0XHRcdFx0KSB8fCBmaWVsZEdyb3VwLnF1YWxpZmllclxuXHRcdFx0fTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gZmlsdGVyRmFjZXRNYXA7XG59XG5cbmZ1bmN0aW9uIGdldEV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyhzZWxlY3Rpb25WYXJpYW50czogU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb25bXSk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHtcblx0cmV0dXJuIHNlbGVjdGlvblZhcmlhbnRzLnJlZHVjZSgocHJldmlvdXNWYWx1ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sIHNlbGVjdGlvblZhcmlhbnQpID0+IHtcblx0XHRzZWxlY3Rpb25WYXJpYW50LnByb3BlcnR5TmFtZXMuZm9yRWFjaCgocHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRwcmV2aW91c1ZhbHVlW3Byb3BlcnR5TmFtZV0gPSB0cnVlO1xuXHRcdH0pO1xuXHRcdHJldHVybiBwcmV2aW91c1ZhbHVlO1xuXHR9LCB7fSk7XG59XG5cbi8qKlxuICogQ2hlY2sgdGhhdCBhbGwgdGhlIHRhYmxlcyBmb3IgYSBkZWRpY2F0ZWQgZW50aXR5IHNldCBhcmUgY29uZmlndXJlZCBhcyBhbmFseXRpY2FsIHRhYmxlLlxuICpcbiAqIEBwYXJhbSBsaXN0UmVwb3J0VGFibGVzIExpc3QgcmVwb3J0IHRhYmxlc1xuICogQHBhcmFtIGNvbnRleHRQYXRoXG4gKiBAcmV0dXJucyBJcyBGaWx0ZXJCYXIgc2VhcmNoIGZpZWxkIGhpZGRlbiBvciBub3RcbiAqL1xuZnVuY3Rpb24gY2hlY2tBbGxUYWJsZUZvckVudGl0eVNldEFyZUFuYWx5dGljYWwobGlzdFJlcG9ydFRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10sIGNvbnRleHRQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0aWYgKGNvbnRleHRQYXRoICYmIGxpc3RSZXBvcnRUYWJsZXMubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBsaXN0UmVwb3J0VGFibGVzLmV2ZXJ5KCh2aXN1YWxpemF0aW9uKSA9PiB7XG5cdFx0XHRyZXR1cm4gdmlzdWFsaXphdGlvbi5lbmFibGVBbmFseXRpY3MgJiYgY29udGV4dFBhdGggPT09IHZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uVmFyaWFudHMoXG5cdGxyVGFibGVWaXN1YWxpemF0aW9uczogVGFibGVWaXN1YWxpemF0aW9uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uW10ge1xuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50UGF0aHM6IHN0cmluZ1tdID0gW107XG5cdHJldHVybiBsclRhYmxlVmlzdWFsaXphdGlvbnNcblx0XHQubWFwKCh2aXN1YWxpemF0aW9uKSA9PiB7XG5cdFx0XHRjb25zdCB0YWJsZUZpbHRlcnMgPSB2aXN1YWxpemF0aW9uLmNvbnRyb2wuZmlsdGVycztcblx0XHRcdGNvbnN0IHRhYmxlU1ZDb25maWdzOiBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbltdID0gW107XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiB0YWJsZUZpbHRlcnMpIHtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodGFibGVGaWx0ZXJzW2tleV0ucGF0aHMpKSB7XG5cdFx0XHRcdFx0Y29uc3QgcGF0aHMgPSB0YWJsZUZpbHRlcnNba2V5XS5wYXRocztcblx0XHRcdFx0XHRwYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAocGF0aCAmJiBwYXRoLmFubm90YXRpb25QYXRoICYmIHNlbGVjdGlvblZhcmlhbnRQYXRocy5pbmRleE9mKHBhdGguYW5ub3RhdGlvblBhdGgpID09PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aHMucHVzaChwYXRoLmFubm90YXRpb25QYXRoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudENvbmZpZyA9IGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uKHBhdGguYW5ub3RhdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0XHRcdFx0XHRpZiAoc2VsZWN0aW9uVmFyaWFudENvbmZpZykge1xuXHRcdFx0XHRcdFx0XHRcdHRhYmxlU1ZDb25maWdzLnB1c2goc2VsZWN0aW9uVmFyaWFudENvbmZpZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRhYmxlU1ZDb25maWdzO1xuXHRcdH0pXG5cdFx0LnJlZHVjZSgoc3ZDb25maWdzLCBzZWxlY3Rpb25WYXJpYW50KSA9PiBzdkNvbmZpZ3MuY29uY2F0KHNlbGVjdGlvblZhcmlhbnQpLCBbXSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY29uZGl0aW9uIHBhdGggcmVxdWlyZWQgZm9yIHRoZSBjb25kaXRpb24gbW9kZWwuIEl0IGxvb2tzIGFzIGZvbGxvd3M6XG4gKiA8MTpOLVByb3BlcnR5TmFtZT4qXFwvPDE6MS1Qcm9wZXJ0eU5hbWU+LzxQcm9wZXJ0eU5hbWU+LlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSByb290IEVudGl0eVR5cGVcbiAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGNvbmRpdGlvbiBwYXRoXG4gKi9cbmNvbnN0IF9nZXRDb25kaXRpb25QYXRoID0gZnVuY3Rpb24gKGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIHByb3BlcnR5UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgcGFydHMgPSBwcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpO1xuXHRsZXQgcGFydGlhbFBhdGg7XG5cdGxldCBrZXkgPSBcIlwiO1xuXHR3aGlsZSAocGFydHMubGVuZ3RoKSB7XG5cdFx0bGV0IHBhcnQgPSBwYXJ0cy5zaGlmdCgpIGFzIHN0cmluZztcblx0XHRwYXJ0aWFsUGF0aCA9IHBhcnRpYWxQYXRoID8gYCR7cGFydGlhbFBhdGh9LyR7cGFydH1gIDogcGFydDtcblx0XHRjb25zdCBwcm9wZXJ0eTogUHJvcGVydHkgfCBOYXZpZ2F0aW9uUHJvcGVydHkgPSBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHBhcnRpYWxQYXRoKTtcblx0XHRpZiAocHJvcGVydHkuX3R5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIgJiYgcHJvcGVydHkuaXNDb2xsZWN0aW9uKSB7XG5cdFx0XHRwYXJ0ICs9IFwiKlwiO1xuXHRcdH1cblx0XHRrZXkgPSBrZXkgPyBgJHtrZXl9LyR7cGFydH1gIDogcGFydDtcblx0fVxuXHRyZXR1cm4ga2V5O1xufTtcblxuY29uc3QgX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRwcm9wZXJ0eTogUHJvcGVydHksXG5cdGZ1bGxQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHQvLyBpZ25vcmUgY29tcGxleCBwcm9wZXJ0eSB0eXBlcyBhbmQgaGlkZGVuIGFubm90YXRlZCBvbmVzXG5cdGlmIChcblx0XHRwcm9wZXJ0eSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0cHJvcGVydHkudGFyZ2V0VHlwZSA9PT0gdW5kZWZpbmVkICYmXG5cdFx0KGluY2x1ZGVIaWRkZW4gfHwgcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSAhPT0gdHJ1ZSlcblx0KSB7XG5cdFx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUocHJvcGVydHkpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRrZXk6IEtleUhlbHBlci5nZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoKGZ1bGxQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdGNvbmRpdGlvblBhdGg6IF9nZXRDb25kaXRpb25QYXRoKGVudGl0eVR5cGUsIGZ1bGxQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0YXZhaWxhYmlsaXR5OlxuXHRcdFx0XHRwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbkZpbHRlcj8udmFsdWVPZigpID09PSB0cnVlID8gQXZhaWxhYmlsaXR5VHlwZS5IaWRkZW4gOiBBdmFpbGFiaWxpdHlUeXBlLkFkYXB0YXRpb24sXG5cdFx0XHRsYWJlbDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWw/LnZhbHVlT2YoKSB8fCBwcm9wZXJ0eS5uYW1lKSksXG5cdFx0XHRncm91cDogdGFyZ2V0RW50aXR5VHlwZS5uYW1lLFxuXHRcdFx0Z3JvdXBMYWJlbDogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpIHx8IHRhcmdldEVudGl0eVR5cGUubmFtZSlcblx0XHRcdClcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kZWxUeXBlKHNUeXBlOiBhbnkpIHtcblx0dHlwZSBkZWZhdWx0TW9kZWxUeXBlID0ge1xuXHRcdFtrZXk6IHN0cmluZ106IHtcblx0XHRcdFtrZXk6IHN0cmluZ106IHN0cmluZztcblx0XHR9O1xuXHR9O1xuXHRjb25zdCBtRGVmYXVsdFR5cGVGb3JFZG1UeXBlOiBkZWZhdWx0TW9kZWxUeXBlID0ge1xuXHRcdFwiRWRtLkJvb2xlYW5cIjoge1xuXHRcdFx0bW9kZWxUeXBlOiBcIkJvb2xcIlxuXHRcdH0sXG5cdFx0XCJFZG0uQnl0ZVwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiSW50XCJcblx0XHR9LFxuXHRcdFwiRWRtLkRhdGVcIjoge1xuXHRcdFx0bW9kZWxUeXBlOiBcIkRhdGVcIlxuXHRcdH0sXG5cdFx0XCJFZG0uRGF0ZVRpbWVcIjoge1xuXHRcdFx0bW9kZWxUeXBlOiBcIkRhdGVcIlxuXHRcdH0sXG5cdFx0XCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjoge1xuXHRcdFx0bW9kZWxUeXBlOiBcIkRhdGVUaW1lT2Zmc2V0XCJcblx0XHR9LFxuXHRcdFwiRWRtLkRlY2ltYWxcIjoge1xuXHRcdFx0bW9kZWxUeXBlOiBcIkRlY2ltYWxcIlxuXHRcdH0sXG5cdFx0XCJFZG0uRG91YmxlXCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJGbG9hdFwiXG5cdFx0fSxcblx0XHRcIkVkbS5GbG9hdFwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiRmxvYXRcIlxuXHRcdH0sXG5cdFx0XCJFZG0uR3VpZFwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiR3VpZFwiXG5cdFx0fSxcblx0XHRcIkVkbS5JbnQxNlwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiSW50XCJcblx0XHR9LFxuXHRcdFwiRWRtLkludDMyXCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJJbnRcIlxuXHRcdH0sXG5cdFx0XCJFZG0uSW50NjRcIjoge1xuXHRcdFx0bW9kZWxUeXBlOiBcIkludFwiXG5cdFx0fSxcblx0XHRcIkVkbS5TQnl0ZVwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiSW50XCJcblx0XHR9LFxuXHRcdFwiRWRtLlNpbmdsZVwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiRmxvYXRcIlxuXHRcdH0sXG5cdFx0XCJFZG0uU3RyaW5nXCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJTdHJpbmdcIlxuXHRcdH0sXG5cdFx0XCJFZG0uVGltZVwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiVGltZU9mRGF5XCJcblx0XHR9LFxuXHRcdFwiRWRtLlRpbWVPZkRheVwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiVGltZU9mRGF5XCJcblx0XHR9LFxuXHRcdFwiRWRtLlN0cmVhbVwiOiB7XG5cdFx0XHQvL25vIGNvcnJlc3BvbmRpbmcgbW9kZWxUeXBlIC0gaWdub3JlIGZvciBmaWx0ZXJpbmdcblx0XHR9XG5cdH07XG5cdHJldHVybiBzVHlwZSAmJiBzVHlwZSBpbiBtRGVmYXVsdFR5cGVGb3JFZG1UeXBlICYmIG1EZWZhdWx0VHlwZUZvckVkbVR5cGVbc1R5cGVdLm1vZGVsVHlwZTtcbn1cbmNvbnN0IF9nZXRTZWxlY3Rpb25GaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdG5hdmlnYXRpb25QYXRoOiBzdHJpbmcsXG5cdHByb3BlcnRpZXM6IEFycmF5PFByb3BlcnR5PiB8IHVuZGVmaW5lZCxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+IHtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHt9O1xuXHRpZiAocHJvcGVydGllcykge1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGg6IHN0cmluZyA9IHByb3BlcnR5Lm5hbWU7XG5cdFx0XHRjb25zdCBmdWxsUGF0aDogc3RyaW5nID0gKG5hdmlnYXRpb25QYXRoID8gYCR7bmF2aWdhdGlvblBhdGh9L2AgOiBcIlwiKSArIHByb3BlcnR5UGF0aDtcblx0XHRcdGNvbnN0IHNlbGVjdGlvbkZpZWxkID0gX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkKGVudGl0eVR5cGUsIHByb3BlcnR5LCBmdWxsUGF0aCwgaW5jbHVkZUhpZGRlbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRpZiAoc2VsZWN0aW9uRmllbGQpIHtcblx0XHRcdFx0c2VsZWN0aW9uRmllbGRNYXBbZnVsbFBhdGhdID0gc2VsZWN0aW9uRmllbGQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkTWFwO1xufTtcblxuY29uc3QgX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aCA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0cHJvcGVydHlQYXRoczogQXJyYXk8c3RyaW5nPiB8IHVuZGVmaW5lZCxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+IHtcblx0bGV0IHNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdGlmIChwcm9wZXJ0eVBhdGhzKSB7XG5cdFx0cHJvcGVydHlQYXRocy5mb3JFYWNoKChwcm9wZXJ0eVBhdGg6IHN0cmluZykgPT4ge1xuXHRcdFx0bGV0IGxvY2FsU2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD47XG5cblx0XHRcdGNvbnN0IHByb3BlcnR5OiBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSA9IGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocHJvcGVydHlQYXRoKTtcblx0XHRcdGlmIChwcm9wZXJ0eSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0eS5fdHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIikge1xuXHRcdFx0XHQvLyBoYW5kbGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0XHRcdGxvY2FsU2VsZWN0aW9uRmllbGRzID0gX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRwcm9wZXJ0eS50YXJnZXRUeXBlLmVudGl0eVByb3BlcnRpZXMsXG5cdFx0XHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5LnRhcmdldFR5cGUgIT09IHVuZGVmaW5lZCAmJiBwcm9wZXJ0eS50YXJnZXRUeXBlLl90eXBlID09PSBcIkNvbXBsZXhUeXBlXCIpIHtcblx0XHRcdFx0Ly8gaGFuZGxlIENvbXBsZXhUeXBlIHByb3BlcnRpZXNcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdHByb3BlcnR5LnRhcmdldFR5cGUucHJvcGVydGllcyxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25QYXRoID0gcHJvcGVydHlQYXRoLmluY2x1ZGVzKFwiL1wiKSA/IHByb3BlcnR5UGF0aC5zcGxpdChcIi9cIikuc3BsaWNlKDAsIDEpLmpvaW4oXCIvXCIpIDogXCJcIjtcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKGVudGl0eVR5cGUsIG5hdmlnYXRpb25QYXRoLCBbcHJvcGVydHldLCBpbmNsdWRlSGlkZGVuLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0aW9uRmllbGRzID0ge1xuXHRcdFx0XHQuLi5zZWxlY3Rpb25GaWVsZHMsXG5cdFx0XHRcdC4uLmxvY2FsU2VsZWN0aW9uRmllbGRzXG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG59O1xuXG5jb25zdCBfZ2V0RmlsdGVyRmllbGQgPSBmdW5jdGlvbiAoXG5cdGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+LFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHRsZXQgZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF07XG5cdGNvbnN0IGF2YWlsYWJpbGl0eSA9IGZpbHRlckZpZWxkICYmIGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eTtcblx0aWYgKGZpbHRlckZpZWxkKSB7XG5cdFx0ZGVsZXRlIGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdO1xuXHR9IGVsc2Uge1xuXHRcdGZpbHRlckZpZWxkID0gX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkKGVudGl0eVR5cGUsIGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocHJvcGVydHlQYXRoKSwgcHJvcGVydHlQYXRoLCB0cnVlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0fVxuXHRpZiAoIWZpbHRlckZpZWxkKSB7XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREaWFnbm9zdGljcygpPy5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1JU1NJTkdfU0VMRUNUSU9ORklFTEQpO1xuXHR9XG5cdC8vIGRlZmluZWQgU2VsZWN0aW9uRmllbGRzIGFyZSBhdmFpbGFibGUgYnkgZGVmYXVsdFxuXHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRmaWx0ZXJGaWVsZC5hdmFpbGFiaWxpdHkgPSBhdmFpbGFiaWxpdHkgPT09IEF2YWlsYWJpbGl0eVR5cGUuSGlkZGVuID8gQXZhaWxhYmlsaXR5VHlwZS5IaWRkZW4gOiBBdmFpbGFiaWxpdHlUeXBlLkRlZmF1bHQ7XG5cdFx0ZmlsdGVyRmllbGQuaXNQYXJhbWV0ZXIgPSAhIWVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dDtcblx0fVxuXHRyZXR1cm4gZmlsdGVyRmllbGQ7XG59O1xuXG5jb25zdCBfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0YVNlbGVjdE9wdGlvbnM6IGFueVtdLFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+LFxuXHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM6IFByb3BlcnR5UGF0aFtdXG4pOiBGaWx0ZXJGaWVsZFtdIHtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gW107XG5cdGNvbnN0IFVJU2VsZWN0aW9uRmllbGRzOiBhbnkgPSB7fTtcblx0Y29uc3QgcHJvcGVydGllcyA9IGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcztcblx0Ly8gVXNpbmcgZW50aXR5VHlwZSBpbnN0ZWFkIG9mIGVudGl0eVNldFxuXHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LmZvckVhY2goKFNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0VUlTZWxlY3Rpb25GaWVsZHNbU2VsZWN0aW9uRmllbGQudmFsdWVdID0gdHJ1ZTtcblx0fSk7XG5cdGlmIChhU2VsZWN0T3B0aW9ucyAmJiBhU2VsZWN0T3B0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0YVNlbGVjdE9wdGlvbnM/LmZvckVhY2goKHNlbGVjdE9wdGlvbjogU2VsZWN0T3B0aW9uVHlwZSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lOiBhbnkgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHlOYW1lLnZhbHVlO1xuXHRcdFx0Y29uc3QgY3VycmVudFNlbGVjdGlvbkZpZWxkczogYW55ID0ge307XG5cdFx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LmZvckVhY2goKFNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0XHRcdGN1cnJlbnRTZWxlY3Rpb25GaWVsZHNbU2VsZWN0aW9uRmllbGQudmFsdWVdID0gdHJ1ZTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKCEoc1Byb3BlcnR5UGF0aCBpbiBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMpKSB7XG5cdFx0XHRcdGlmICghKHNQcm9wZXJ0eVBhdGggaW4gY3VycmVudFNlbGVjdGlvbkZpZWxkcykpIHtcblx0XHRcdFx0XHRjb25zdCBGaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBnZXRGaWx0ZXJGaWVsZChzUHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRpZiAoRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKEZpbHRlckZpZWxkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IGRlZmF1bHRGaWx0ZXJWYWx1ZSA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkZpbHRlckRlZmF1bHRWYWx1ZTtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IHByb3BlcnR5Lm5hbWU7XG5cdFx0XHRpZiAoIShwcm9wZXJ0eVBhdGggaW4gZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKSkge1xuXHRcdFx0XHRpZiAoZGVmYXVsdEZpbHRlclZhbHVlICYmICEocHJvcGVydHlQYXRoIGluIFVJU2VsZWN0aW9uRmllbGRzKSkge1xuXHRcdFx0XHRcdGNvbnN0IEZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGdldEZpbHRlckZpZWxkKHByb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG5cdFx0XHRcdFx0aWYgKEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25GaWVsZHMucHVzaChGaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcbn07XG5cbi8qKlxuICogR2V0IGFsbCBwYXJhbWV0ZXIgZmlsdGVyIGZpZWxkcyBpbiBjYXNlIG9mIGEgcGFyYW1ldGVyaXplZCBzZXJ2aWNlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBwYXJhbWV0ZXIgZmlsdGVyZmllbGRzXG4gKi9cbmZ1bmN0aW9uIF9nZXRQYXJhbWV0ZXJGaWVsZHMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IHBhcmFtZXRlckVudGl0eVR5cGUgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LmVudGl0eVR5cGU7XG5cdGNvbnN0IGlzUGFyYW1ldGVyaXplZCA9ICEhcGFyYW1ldGVyRW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5SZXN1bHRDb250ZXh0ICYmICFkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldDtcblx0Y29uc3QgcGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCA9XG5cdFx0aXNQYXJhbWV0ZXJpemVkICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihgLyR7ZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lfWApO1xuXG5cdHJldHVybiAoXG5cdFx0cGFyYW1ldGVyQ29udmVydGVyQ29udGV4dFxuXHRcdFx0PyBwYXJhbWV0ZXJFbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMubWFwKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuXHRcdFx0XHRcdHJldHVybiBfZ2V0RmlsdGVyRmllbGQoXG5cdFx0XHRcdFx0XHR7fSBhcyBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4sXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdHBhcmFtZXRlckVudGl0eVR5cGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0ICB9KVxuXHRcdFx0OiBbXVxuXHQpIGFzIEZpbHRlckZpZWxkW107XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgRmlsdGVyQmFyIHNlYXJjaCBmaWVsZCBpcyBoaWRkZW4gb3Igbm90LlxuICpcbiAqIEBwYXJhbSBsaXN0UmVwb3J0VGFibGVzIFRoZSBsaXN0IHJlcG9ydCB0YWJsZXNcbiAqIEBwYXJhbSBjaGFydHMgVGhlIEFMUCBjaGFydHNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGluZm9ybWF0aW9uIGlmIHRoZSBGaWx0ZXJCYXIgc2VhcmNoIGZpZWxkIGlzIGhpZGRlbiBvciBub3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZpbHRlckJhcmhpZGVCYXNpY1NlYXJjaCA9IGZ1bmN0aW9uIChcblx0bGlzdFJlcG9ydFRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10sXG5cdGNoYXJ0czogQ2hhcnRWaXN1YWxpemF0aW9uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IGJvb2xlYW4ge1xuXHQvLyBDaGVjayBpZiBjaGFydHMgYWxsb3cgc2VhcmNoXG5cdGNvbnN0IG5vU2VhcmNoSW5DaGFydHMgPSBjaGFydHMubGVuZ3RoID09PSAwIHx8IGNoYXJ0cy5ldmVyeSgoY2hhcnQpID0+ICFjaGFydC5hcHBseVN1cHBvcnRlZC5lbmFibGVTZWFyY2gpO1xuXG5cdC8vIENoZWNrIGlmIGFsbCB0YWJsZXMgYXJlIGFuYWx5dGljYWwgYW5kIG5vbmUgb2YgdGhlbSBhbGxvdyBmb3Igc2VhcmNoXG5cdGNvbnN0IG5vU2VhcmNoSW5UYWJsZXMgPVxuXHRcdGxpc3RSZXBvcnRUYWJsZXMubGVuZ3RoID09PSAwIHx8IGxpc3RSZXBvcnRUYWJsZXMuZXZlcnkoKHRhYmxlKSA9PiB0YWJsZS5lbmFibGVBbmFseXRpY3MgJiYgIXRhYmxlLmVuYWJsZUFuYWx5dGljc1NlYXJjaCk7XG5cblx0Y29uc3QgY29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGlmIChjb250ZXh0UGF0aCAmJiBub1NlYXJjaEluQ2hhcnRzICYmIG5vU2VhcmNoSW5UYWJsZXMpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG5cbi8qKlxuICogUmV0cmlldmVzIGZpbHRlciBmaWVsZHMgZnJvbSB0aGUgbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGN1cnJlbnQgZW50aXR5VHlwZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgZmlsdGVyIGZpZWxkcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICovXG5leHBvcnQgY29uc3QgZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4ge1xuXHRjb25zdCBmYkNvbmZpZzogRmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCk7XG5cdGNvbnN0IGRlZmluZWRGaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uPiA9IGZiQ29uZmlnPy5maWx0ZXJGaWVsZHMgfHwge307XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0gX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aChcblx0XHRlbnRpdHlUeXBlLFxuXHRcdE9iamVjdC5rZXlzKGRlZmluZWRGaWx0ZXJGaWVsZHMpLm1hcCgoa2V5KSA9PiBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShrZXkpKSxcblx0XHR0cnVlLFxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0KTtcblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+ID0ge307XG5cblx0Zm9yIChjb25zdCBzS2V5IGluIGRlZmluZWRGaWx0ZXJGaWVsZHMpIHtcblx0XHRjb25zdCBmaWx0ZXJGaWVsZCA9IGRlZmluZWRGaWx0ZXJGaWVsZHNbc0tleV07XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gS2V5SGVscGVyLmdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkoc0tleSk7XG5cdFx0Y29uc3Qgc2VsZWN0aW9uRmllbGQgPSBzZWxlY3Rpb25GaWVsZHNbcHJvcGVydHlOYW1lXTtcblx0XHRjb25zdCB0eXBlID0gZmlsdGVyRmllbGQudHlwZSA9PT0gXCJTbG90XCIgPyBmaWx0ZXJGaWVsZFR5cGUuU2xvdCA6IGZpbHRlckZpZWxkVHlwZS5EZWZhdWx0O1xuXHRcdGNvbnN0IHZpc3VhbEZpbHRlciA9XG5cdFx0XHRmaWx0ZXJGaWVsZCAmJiBmaWx0ZXJGaWVsZD8udmlzdWFsRmlsdGVyXG5cdFx0XHRcdD8gZ2V0VmlzdWFsRmlsdGVycyhlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBzS2V5LCBkZWZpbmVkRmlsdGVyRmllbGRzKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRmaWx0ZXJGaWVsZHNbc0tleV0gPSB7XG5cdFx0XHRrZXk6IHNLZXksXG5cdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IHNlbGVjdGlvbkZpZWxkPy5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdGNvbmRpdGlvblBhdGg6IHNlbGVjdGlvbkZpZWxkPy5jb25kaXRpb25QYXRoIHx8IHByb3BlcnR5TmFtZSxcblx0XHRcdHRlbXBsYXRlOiBmaWx0ZXJGaWVsZC50ZW1wbGF0ZSxcblx0XHRcdGxhYmVsOiBmaWx0ZXJGaWVsZC5sYWJlbCxcblx0XHRcdHBvc2l0aW9uOiBmaWx0ZXJGaWVsZC5wb3NpdGlvbiB8fCB7IHBsYWNlbWVudDogUGxhY2VtZW50LkFmdGVyIH0sXG5cdFx0XHRhdmFpbGFiaWxpdHk6IGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSB8fCBBdmFpbGFiaWxpdHlUeXBlLkRlZmF1bHQsXG5cdFx0XHRzZXR0aW5nczogZmlsdGVyRmllbGQuc2V0dGluZ3MsXG5cdFx0XHR2aXN1YWxGaWx0ZXI6IHZpc3VhbEZpbHRlclxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGZpbHRlckZpZWxkcztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJGaWVsZCA9IGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGg6IHN0cmluZywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZTogRW50aXR5VHlwZSkge1xuXHRyZXR1cm4gX2dldEZpbHRlckZpZWxkKHt9LCBwcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlclJlc3RyaWN0aW9ucyA9IGZ1bmN0aW9uIChvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjogYW55LCBzUmVzdHJpY3Rpb246IGFueSkge1xuXHRpZiAoc1Jlc3RyaWN0aW9uID09PSBcIlJlcXVpcmVkUHJvcGVydGllc1wiIHx8IHNSZXN0cmljdGlvbiA9PT0gXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB7XG5cdFx0bGV0IGFQcm9wcyA9IFtdO1xuXHRcdGlmIChvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbltzUmVzdHJpY3Rpb25dKSB7XG5cdFx0XHRhUHJvcHMgPSBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbltzUmVzdHJpY3Rpb25dLm1hcChmdW5jdGlvbiAob1Byb3BlcnR5OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoIHx8IG9Qcm9wZXJ0eS52YWx1ZTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYVByb3BzO1xuXHR9IGVsc2UgaWYgKHNSZXN0cmljdGlvbiA9PT0gXCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcIikge1xuXHRcdGNvbnN0IG1BbGxvd2VkRXhwcmVzc2lvbnMgPSB7fSBhcyBhbnk7XG5cdFx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMpIHtcblx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob1Byb3BlcnR5OiBhbnkpIHtcblx0XHRcdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdFx0XHRpZiAobUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHkudmFsdWVdKSB7XG5cdFx0XHRcdFx0bUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHkudmFsdWVdLnB1c2gob1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHkudmFsdWVdID0gW29Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnNdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG1BbGxvd2VkRXhwcmVzc2lvbnM7XG5cdH1cblx0cmV0dXJuIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uO1xufTtcblxuY29uc3QgZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4ge1xuXHRcdG5hbWU6IFwiJHNlYXJjaFwiLFxuXHRcdHBhdGg6IFwiJHNlYXJjaFwiLFxuXHRcdGRhdGFUeXBlOiBzU3RyaW5nRGF0YVR5cGUsXG5cdFx0bWF4Q29uZGl0aW9uczogMVxuXHR9O1xufTtcblxuY29uc3QgZ2V0RWRpdFN0YXRlRmlsdGVyUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4ge1xuXHRcdG5hbWU6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdHBhdGg6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdGdyb3VwTGFiZWw6IFwiXCIsXG5cdFx0Z3JvdXA6IFwiXCIsXG5cdFx0ZGF0YVR5cGU6IHNTdHJpbmdEYXRhVHlwZSxcblx0XHRoaWRkZW5GaWx0ZXI6IGZhbHNlXG5cdH07XG59O1xuXG5jb25zdCBnZXRTZWFyY2hSZXN0cmljdGlvbnMgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCkge1xuXHRyZXR1cm4gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uU2VhcmNoUmVzdHJpY3Rpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgc05hdmlnYXRpb25QYXRoOiBzdHJpbmcpIHtcblx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnM6IGFueSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM/Lk5hdmlnYXRpb25SZXN0cmljdGlvbnM7XG5cdGNvbnN0IGFSZXN0cmljdGVkUHJvcGVydGllcyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLlJlc3RyaWN0ZWRQcm9wZXJ0aWVzO1xuXHRyZXR1cm4gKFxuXHRcdGFSZXN0cmljdGVkUHJvcGVydGllcyAmJlxuXHRcdGFSZXN0cmljdGVkUHJvcGVydGllcy5maW5kKGZ1bmN0aW9uIChvUmVzdHJpY3RlZFByb3BlcnR5OiBhbnkpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG9SZXN0cmljdGVkUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkgJiZcblx0XHRcdFx0KG9SZXN0cmljdGVkUHJvcGVydHkuTmF2aWdhdGlvblByb3BlcnR5LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoID09PSBzTmF2aWdhdGlvblBhdGggfHxcblx0XHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eS52YWx1ZSA9PT0gc05hdmlnYXRpb25QYXRoKVxuXHRcdFx0KTtcblx0XHR9KVxuXHQpO1xufTtcblxuY29uc3QgX2ZldGNoQmFzaWNQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAob0ZpbHRlckZpZWxkSW5mbzogYW55KSB7XG5cdHJldHVybiB7XG5cdFx0a2V5OiBvRmlsdGVyRmllbGRJbmZvLmtleSxcblx0XHRhbm5vdGF0aW9uUGF0aDogb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aCxcblx0XHRjb25kaXRpb25QYXRoOiBvRmlsdGVyRmllbGRJbmZvLmNvbmRpdGlvblBhdGgsXG5cdFx0bmFtZTogb0ZpbHRlckZpZWxkSW5mby5jb25kaXRpb25QYXRoLFxuXHRcdGxhYmVsOiBvRmlsdGVyRmllbGRJbmZvLmxhYmVsLFxuXHRcdGhpZGRlbkZpbHRlcjogb0ZpbHRlckZpZWxkSW5mby5hdmFpbGFiaWxpdHkgPT09IFwiSGlkZGVuXCIsXG5cdFx0ZGlzcGxheTogXCJWYWx1ZVwiLFxuXHRcdGlzUGFyYW1ldGVyOiBvRmlsdGVyRmllbGRJbmZvLmlzUGFyYW1ldGVyLFxuXHRcdGNhc2VTZW5zaXRpdmU6IG9GaWx0ZXJGaWVsZEluZm8uY2FzZVNlbnNpdGl2ZSxcblx0XHRhdmFpbGFiaWxpdHk6IG9GaWx0ZXJGaWVsZEluZm8uYXZhaWxhYmlsaXR5LFxuXHRcdHBvc2l0aW9uOiBvRmlsdGVyRmllbGRJbmZvLnBvc2l0aW9uLFxuXHRcdHR5cGU6IG9GaWx0ZXJGaWVsZEluZm8udHlwZSxcblx0XHR0ZW1wbGF0ZTogb0ZpbHRlckZpZWxkSW5mby50ZW1wbGF0ZSxcblx0XHRtZW51OiBvRmlsdGVyRmllbGRJbmZvLm1lbnVcblx0fTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uID0gZnVuY3Rpb24gKGFFeHByZXNzaW9uczogYW55KSB7XG5cdGNvbnN0IGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eSA9IFtcblx0XHRcIlNpbmdsZVZhbHVlXCIsXG5cdFx0XCJNdWx0aVZhbHVlXCIsXG5cdFx0XCJTaW5nbGVSYW5nZVwiLFxuXHRcdFwiTXVsdGlSYW5nZVwiLFxuXHRcdFwiU2VhcmNoRXhwcmVzc2lvblwiLFxuXHRcdFwiTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblwiXG5cdF07XG5cblx0YUV4cHJlc3Npb25zLnNvcnQoZnVuY3Rpb24gKGE6IGFueSwgYjogYW55KSB7XG5cdFx0cmV0dXJuIGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eS5pbmRleE9mKGEpIC0gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYik7XG5cdH0pO1xuXG5cdHJldHVybiBhRXhwcmVzc2lvbnNbMF07XG59O1xuXG5leHBvcnQgY29uc3QgZGlzcGxheU1vZGUgPSBmdW5jdGlvbiAob1Byb3BlcnR5QW5ub3RhdGlvbnM6IGFueSwgb0NvbGxlY3Rpb25Bbm5vdGF0aW9uczogYW55KSB7XG5cdGNvbnN0IG9UZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eUFubm90YXRpb25zPy5Db21tb24/LlRleHQsXG5cdFx0b1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbiA9XG5cdFx0XHRvVGV4dEFubm90YXRpb24gJiZcblx0XHRcdCgob1Byb3BlcnR5QW5ub3RhdGlvbnMgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dD8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpIHx8XG5cdFx0XHRcdChvQ29sbGVjdGlvbkFubm90YXRpb25zICYmIG9Db2xsZWN0aW9uQW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpKTtcblxuXHRpZiAob1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbikge1xuXHRcdGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uLnZhbHVlT2YoKSA9PT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCIpIHtcblx0XHRcdHJldHVybiBcIkRlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uLnZhbHVlT2YoKSA9PT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRMYXN0XCIpIHtcblx0XHRcdHJldHVybiBcIlZhbHVlRGVzY3JpcHRpb25cIjtcblx0XHR9XG5cdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25WYWx1ZVwiOyAvL1RleHRGaXJzdFxuXHR9XG5cdHJldHVybiBvVGV4dEFubm90YXRpb24gPyBcIkRlc2NyaXB0aW9uVmFsdWVcIiA6IFwiVmFsdWVcIjtcbn07XG5cbmNvbnN0IF9mZXRjaFByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCBvRmlsdGVyRmllbGRJbmZvOiBhbnksIG9UeXBlQ29uZmlnOiBhbnkpIHtcblx0bGV0IG9Qcm9wZXJ0eUluZm8gPSBfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyhvRmlsdGVyRmllbGRJbmZvKTtcblx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aDtcblxuXHRpZiAoIXNBbm5vdGF0aW9uUGF0aCkge1xuXHRcdHJldHVybiBvUHJvcGVydHlJbmZvO1xuXHR9XG5cdGNvbnN0IHRhcmdldFByb3BlcnR5T2JqZWN0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKHNBbm5vdGF0aW9uUGF0aCkuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblxuXHRjb25zdCBvUHJvcGVydHlBbm5vdGF0aW9ucyA9IHRhcmdldFByb3BlcnR5T2JqZWN0Py5hbm5vdGF0aW9ucztcblx0Y29uc3Qgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQ/LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zO1xuXG5cdGNvbnN0IG9Gb3JtYXRPcHRpb25zID0gb1R5cGVDb25maWcuZm9ybWF0T3B0aW9ucztcblx0Y29uc3Qgb0NvbnN0cmFpbnRzID0gb1R5cGVDb25maWcuY29uc3RyYWludHM7XG5cdG9Qcm9wZXJ0eUluZm8gPSBPYmplY3QuYXNzaWduKG9Qcm9wZXJ0eUluZm8sIHtcblx0XHRmb3JtYXRPcHRpb25zOiBvRm9ybWF0T3B0aW9ucyxcblx0XHRjb25zdHJhaW50czogb0NvbnN0cmFpbnRzLFxuXHRcdGRpc3BsYXk6IGRpc3BsYXlNb2RlKG9Qcm9wZXJ0eUFubm90YXRpb25zLCBvQ29sbGVjdGlvbkFubm90YXRpb25zKVxuXHR9KTtcblx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG59O1xuXG5leHBvcnQgY29uc3QgaXNNdWx0aVZhbHVlID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogYW55KSB7XG5cdGxldCBiSXNNdWx0aVZhbHVlID0gdHJ1ZTtcblx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRzd2l0Y2ggKG9Qcm9wZXJ0eS5maWx0ZXJFeHByZXNzaW9uKSB7XG5cdFx0Y2FzZSBcIlNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRjYXNlIFwiU2luZ2xlUmFuZ2VcIjpcblx0XHRjYXNlIFwiU2luZ2xlVmFsdWVcIjpcblx0XHRcdGJJc011bHRpVmFsdWUgPSBmYWxzZTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXHRpZiAob1Byb3BlcnR5LnR5cGUgJiYgb1Byb3BlcnR5LnR5cGUuaW5kZXhPZihcIkJvb2xlYW5cIikgPiAwKSB7XG5cdFx0YklzTXVsdGlWYWx1ZSA9IGZhbHNlO1xuXHR9XG5cdHJldHVybiBiSXNNdWx0aVZhbHVlO1xufTtcblxuY29uc3QgZ2V0QW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRsclRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSBbXSxcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZyA9IFwiXCIsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4gPSBmYWxzZVxuKSB7XG5cdC8vIEZldGNoIGFsbCBzZWxlY3Rpb25WYXJpYW50cyBkZWZpbmVkIGluIHRoZSBkaWZmZXJlbnQgdmlzdWFsaXphdGlvbnMgYW5kIGRpZmZlcmVudCB2aWV3cyAobXVsdGkgdGFibGUgbW9kZSlcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudHM6IFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uW10gPSBnZXRTZWxlY3Rpb25WYXJpYW50cyhsclRhYmxlcywgY29udmVydGVyQ29udGV4dCk7XG5cblx0Ly8gY3JlYXRlIGEgbWFwIG9mIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBpbiBzZWxlY3Rpb24gdmFyaWFudHNcblx0Y29uc3QgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IGdldEV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyhzZWxlY3Rpb25WYXJpYW50cyk7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Ly9GaWx0ZXJzIHdoaWNoIGhhcyB0byBiZSBhZGRlZCB3aGljaCBpcyBwYXJ0IG9mIFNWL0RlZmF1bHQgYW5ub3RhdGlvbnMgYnV0IG5vdCBwcmVzZW50IGluIHRoZSBTZWxlY3Rpb25GaWVsZHNcblx0Y29uc3QgYW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzID0gKChhbm5vdGF0aW9uUGF0aCAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKGFubm90YXRpb25QYXRoKT8uYW5ub3RhdGlvbikgfHxcblx0XHRlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uU2VsZWN0aW9uRmllbGRzIHx8XG5cdFx0W10pIGFzIFByb3BlcnR5UGF0aFtdO1xuXG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBhbGwgcG90ZW50aWFsIGZpbHRlciBmaWVsZHMgYmFzZWQgb24uLi5cblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7XG5cdFx0Ly8gLi4ubm9uIGhpZGRlbiBwcm9wZXJ0aWVzIG9mIHRoZSBlbnRpdHlcblx0XHQuLi5fZ2V0U2VsZWN0aW9uRmllbGRzKGVudGl0eVR5cGUsIFwiXCIsIGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcywgaW5jbHVkZUhpZGRlbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Ly8gLi4uYWRkaXRpb25hbCBtYW5pZmVzdCBkZWZpbmVkIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoXG5cdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCkubmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdClcblx0fTtcblx0bGV0IGFTZWxlY3RPcHRpb25zOiBhbnlbXSA9IFtdO1xuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50ID0gZ2V0U2VsZWN0aW9uVmFyaWFudChlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0aWYgKHNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRhU2VsZWN0T3B0aW9ucyA9IHNlbGVjdGlvblZhcmlhbnQuU2VsZWN0T3B0aW9ucztcblx0fVxuXG5cdGNvbnN0IHByb3BlcnR5SW5mb0ZpZWxkczogYW55ID1cblx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LnJlZHVjZSgoc2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdLCBzZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gc2VsZWN0aW9uRmllbGQudmFsdWU7XG5cdFx0XHRpZiAoIShwcm9wZXJ0eVBhdGggaW4gZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKSkge1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBfZ2V0RmlsdGVyRmllbGQoZmlsdGVyRmllbGRzLCBwcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZC5ncm91cCA9IFwiXCI7XG5cdFx0XHRcdFx0ZmlsdGVyRmllbGQuZ3JvdXBMYWJlbCA9IFwiXCI7XG5cdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goZmlsdGVyRmllbGQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xuXHRcdH0sIFtdKSB8fCBbXTtcblxuXHRjb25zdCBkZWZhdWx0RmlsdGVyRmllbGRzID0gX2dldERlZmF1bHRGaWx0ZXJGaWVsZHMoXG5cdFx0YVNlbGVjdE9wdGlvbnMsXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyxcblx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHNcblx0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLFxuXHRcdGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXG5cdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMsXG5cdFx0ZmlsdGVyRmllbGRzOiBmaWx0ZXJGaWVsZHMsXG5cdFx0cHJvcGVydHlJbmZvRmllbGRzOiBwcm9wZXJ0eUluZm9GaWVsZHMsXG5cdFx0ZGVmYXVsdEZpbHRlckZpZWxkczogZGVmYXVsdEZpbHRlckZpZWxkc1xuXHR9O1xufTtcbmV4cG9ydCBjb25zdCBwcm9jZXNzU2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eUluZm9GaWVsZHM6IGFueSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHM/OiBhbnlcbikge1xuXHQvL2dldCBUeXBlQ29uZmlnIGZ1bmN0aW9uXG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkVHlwZXM6IGFueSA9IFtdO1xuXHRjb25zdCBhVHlwZUNvbmZpZzogYW55ID0ge307XG5cdGNvbnN0IF9mblR5cGVDb25maWcgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5LCBrZXk6IHN0cmluZykge1xuXHRcdGNvbnN0IG9UeXBlQ29uZmlnID0gZ2V0VHlwZUNvbmZpZyhwcm9wZXJ0eSwgcHJvcGVydHk/LnR5cGUpO1xuXHRcdHNlbGVjdGlvbkZpZWxkVHlwZXMucHVzaChwcm9wZXJ0eT8udHlwZSk7XG5cdFx0aWYgKFxuXHRcdFx0cHJvcGVydHk/LnR5cGUgPT09IHNFZG1TdHJpbmcgJiZcblx0XHRcdChvVHlwZUNvbmZpZy5jb25zdHJhaW50cy5udWxsYWJsZSA9PT0gdW5kZWZpbmVkIHx8IG9UeXBlQ29uZmlnLmNvbnN0cmFpbnRzLm51bGxhYmxlID09PSB0cnVlKVxuXHRcdCkge1xuXHRcdFx0b1R5cGVDb25maWcuZm9ybWF0T3B0aW9ucy5wYXJzZUtlZXBzRW1wdHlTdHJpbmcgPSBmYWxzZTtcblx0XHR9XG5cdFx0YVR5cGVDb25maWdba2V5XSA9IG9UeXBlQ29uZmlnO1xuXHR9O1xuXG5cdGlmIChkZWZhdWx0VmFsdWVQcm9wZXJ0eUZpZWxkcykge1xuXHRcdHByb3BlcnR5SW5mb0ZpZWxkcyA9IHByb3BlcnR5SW5mb0ZpZWxkcy5jb25jYXQoZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHMpO1xuXHR9XG5cdC8vYWRkIHR5cGVDb25maWdcblx0cHJvcGVydHlJbmZvRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtZXRlckZpZWxkOiBhbnkpIHtcblx0XHRpZiAocGFyYW1ldGVyRmllbGQuYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5Q29udmVydHlDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKHBhcmFtZXRlckZpZWxkLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0T2JqZWN0ID0gcHJvcGVydHlDb252ZXJ0eUNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblx0XHRcdF9mblR5cGVDb25maWcocHJvcGVydHlUYXJnZXRPYmplY3QsIHBhcmFtZXRlckZpZWxkLmtleSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGVjdGlvbkZpZWxkVHlwZXMucHVzaChzRWRtU3RyaW5nKTtcblx0XHRcdGFUeXBlQ29uZmlnW3BhcmFtZXRlckZpZWxkLmtleV0gPSB7IHR5cGU6IHNTdHJpbmdEYXRhVHlwZSB9O1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gZmlsdGVyUmVzdHJpY3Rpb25zXG5cdGNvbnN0IG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5GaWx0ZXJSZXN0cmljdGlvbnM7XG5cdGNvbnN0IG9SZXQgPSB7fSBhcyBhbnk7XG5cdG9SZXRbXCJSZXF1aXJlZFByb3BlcnRpZXNcIl0gPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9ucywgXCJSZXF1aXJlZFByb3BlcnRpZXNcIikgfHwgW107XG5cdG9SZXRbXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiXSA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRvUmV0W1wiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXCJdID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXCIpIHx8IHt9O1xuXG5cdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBhUGF0aFBhcnRzID0gc0VudGl0eVNldFBhdGguc3BsaXQoXCIvXCIpO1xuXHRpZiAoYVBhdGhQYXJ0cy5sZW5ndGggPiAyKSB7XG5cdFx0Y29uc3Qgc05hdmlnYXRpb25QYXRoID0gYVBhdGhQYXJ0c1thUGF0aFBhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdGFQYXRoUGFydHMuc3BsaWNlKC0xLCAxKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCwgc05hdmlnYXRpb25QYXRoKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLkZpbHRlclJlc3RyaWN0aW9ucztcblx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcy5jb25jYXQoZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXSk7XG5cdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcy5jb25jYXQoZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdKTtcblx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IHtcblx0XHRcdC4uLihnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIFwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXCIpIHx8IHt9KSxcblx0XHRcdC4uLm9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXG5cdFx0fTtcblx0fVxuXHRjb25zdCBpc0Nhc2VTZW5zaXRpdmUgPSBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGFSZXF1aXJlZFByb3BzID0gb1JldC5SZXF1aXJlZFByb3BlcnRpZXM7XG5cdGNvbnN0IGFOb25GaWx0ZXJhYmxlUHJvcHMgPSBvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzO1xuXHRsZXQgb1Byb3BlcnR5SW5mbztcblx0Y29uc3QgYUZldGNoZWRQcm9wZXJ0aWVzOiBhbnkgPSBbXTtcblxuXHQvLyBwcm9jZXNzIHRoZSBmaWVsZHMgdG8gYWRkIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG5cdHByb3BlcnR5SW5mb0ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eUluZm9GaWVsZDogYW55KSB7XG5cdFx0Y29uc3Qgb0NvbnZlcnRlZFByb3BlcnR5ID0gcHJvcGVydHlJbmZvRmllbGQ7XG5cdFx0bGV0IHNQcm9wZXJ0eVBhdGg7XG5cdFx0aWYgKG9Db252ZXJ0ZWRQcm9wZXJ0eS5jb25kaXRpb25QYXRoKSB7XG5cdFx0XHRzUHJvcGVydHlQYXRoID0gb0NvbnZlcnRlZFByb3BlcnR5LmNvbmRpdGlvblBhdGgucmVwbGFjZSgvXFwrfFxcKi9nLCBcIlwiKTtcblx0XHR9XG5cdFx0aWYgKGFOb25GaWx0ZXJhYmxlUHJvcHMuaW5kZXhPZihzUHJvcGVydHlQYXRoKSA9PT0gLTEpIHtcblx0XHRcdG9Qcm9wZXJ0eUluZm8gPSBfZmV0Y2hQcm9wZXJ0eUluZm8oY29udmVydGVyQ29udGV4dCwgb0NvbnZlcnRlZFByb3BlcnR5LCBhVHlwZUNvbmZpZ1twcm9wZXJ0eUluZm9GaWVsZC5rZXldKTtcblx0XHRcdGlmIChvUHJvcGVydHlJbmZvKSB7XG5cdFx0XHRcdG9Qcm9wZXJ0eUluZm8gPSBPYmplY3QuYXNzaWduKG9Qcm9wZXJ0eUluZm8sIHtcblx0XHRcdFx0XHRtYXhDb25kaXRpb25zOiAhb1Byb3BlcnR5SW5mby5pc1BhcmFtZXRlciAmJiBpc011bHRpVmFsdWUob1Byb3BlcnR5SW5mbykgPyAtMSA6IDEsXG5cdFx0XHRcdFx0cmVxdWlyZWQ6IG9Qcm9wZXJ0eUluZm8uaXNQYXJhbWV0ZXIgfHwgYVJlcXVpcmVkUHJvcHMuaW5kZXhPZihzUHJvcGVydHlQYXRoKSA+PSAwLFxuXHRcdFx0XHRcdGNhc2VTZW5zaXRpdmU6IGlzQ2FzZVNlbnNpdGl2ZSxcblx0XHRcdFx0XHRkYXRhVHlwZTogYVR5cGVDb25maWdbcHJvcGVydHlJbmZvRmllbGQua2V5XS50eXBlXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKG9Qcm9wZXJ0eUluZm8pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0Ly9hZGQgZWRpdFxuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QpIHtcblx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8oKSk7XG5cdH1cblx0Ly8gYWRkIHNlYXJjaFxuXHRjb25zdCBzZWFyY2hSZXN0cmljdGlvbnMgPSBnZXRTZWFyY2hSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IEJvb2xlYW4oc2VhcmNoUmVzdHJpY3Rpb25zICYmICFzZWFyY2hSZXN0cmljdGlvbnMuU2VhcmNoYWJsZSk7XG5cdGlmIChzRW50aXR5U2V0UGF0aCAmJiBoaWRlQmFzaWNTZWFyY2ggIT09IHRydWUpIHtcblx0XHRpZiAoIXNlYXJjaFJlc3RyaWN0aW9ucyB8fCBzZWFyY2hSZXN0cmljdGlvbnM/LlNlYXJjaGFibGUpIHtcblx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKGdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbygpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYUZldGNoZWRQcm9wZXJ0aWVzO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMgPSBmdW5jdGlvbiAoXG5cdGZpbHRlckZpZWxkczogRmlsdGVyRmllbGRbXSxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKSB7XG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhmaWx0ZXJGaWVsZHMsIGdldE1hbmlmZXN0RmlsdGVyRmllbGRzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpLCB7XG5cdFx0XCJhdmFpbGFiaWxpdHlcIjogXCJvdmVyd3JpdGVcIixcblx0XHRsYWJlbDogXCJvdmVyd3JpdGVcIixcblx0XHR0eXBlOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdHBvc2l0aW9uOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdHRlbXBsYXRlOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdHNldHRpbmdzOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdHZpc3VhbEZpbHRlcjogXCJvdmVyd3JpdGVcIlxuXHR9KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZWxlY3Rpb24gZmllbGRzIHRoYXQgd2lsbCBiZSB1c2VkIHdpdGhpbiB0aGUgZmlsdGVyIGJhclxuICogVGhpcyBjb25maWd1cmF0aW9uIHRha2VzIGludG8gYWNjb3VudCBhbm5vdGF0aW9uIGFuZCB0aGUgc2VsZWN0aW9uIHZhcmlhbnRzLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbHJUYWJsZXNcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aFxuICogQHBhcmFtIFtpbmNsdWRlSGlkZGVuXVxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc2VsZWN0aW9uIGZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRsclRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSBbXSxcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZyA9IFwiXCIsXG5cdGluY2x1ZGVIaWRkZW4/OiBib29sZWFuXG4pOiBhbnkge1xuXHRjb25zdCBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhID0gZ2V0QW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhKGNvbnZlcnRlckNvbnRleHQsIGxyVGFibGVzLCBhbm5vdGF0aW9uUGF0aCwgaW5jbHVkZUhpZGRlbik7XG5cdGNvbnN0IHBhcmFtZXRlckZpZWxkcyA9IF9nZXRQYXJhbWV0ZXJGaWVsZHMoY29udmVydGVyQ29udGV4dCk7XG5cdGxldCBwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEucHJvcGVydHlJbmZvRmllbGRzKSk7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmVudGl0eVR5cGU7XG5cblx0cHJvcGVydHlJbmZvRmllbGRzID0gcGFyYW1ldGVyRmllbGRzLmNvbmNhdChwcm9wZXJ0eUluZm9GaWVsZHMpO1xuXG5cdHByb3BlcnR5SW5mb0ZpZWxkcyA9IGluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMocHJvcGVydHlJbmZvRmllbGRzLCBlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRjb25zdCBhRmV0Y2hlZFByb3BlcnRpZXMgPSBwcm9jZXNzU2VsZWN0aW9uRmllbGRzKFxuXHRcdHByb3BlcnR5SW5mb0ZpZWxkcyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZGVmYXVsdEZpbHRlckZpZWxkc1xuXHQpO1xuXHRhRmV0Y2hlZFByb3BlcnRpZXMuc29ydChmdW5jdGlvbiAoYTogYW55LCBiOiBhbnkpIHtcblx0XHRpZiAoYS5ncm91cExhYmVsID09PSB1bmRlZmluZWQgfHwgYS5ncm91cExhYmVsID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gLTE7XG5cdFx0fVxuXHRcdGlmIChiLmdyb3VwTGFiZWwgPT09IHVuZGVmaW5lZCB8fCBiLmdyb3VwTGFiZWwgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblx0XHRyZXR1cm4gYS5ncm91cExhYmVsLmxvY2FsZUNvbXBhcmUoYi5ncm91cExhYmVsKTtcblx0fSk7XG5cblx0bGV0IHNGZXRjaFByb3BlcnRpZXMgPSBKU09OLnN0cmluZ2lmeShhRmV0Y2hlZFByb3BlcnRpZXMpO1xuXHRzRmV0Y2hQcm9wZXJ0aWVzID0gc0ZldGNoUHJvcGVydGllcy5yZXBsYWNlKC9cXHsvZywgXCJcXFxce1wiKTtcblx0c0ZldGNoUHJvcGVydGllcyA9IHNGZXRjaFByb3BlcnRpZXMucmVwbGFjZSgvXFx9L2csIFwiXFxcXH1cIik7XG5cdGNvbnN0IHNQcm9wZXJ0eUluZm8gPSBzRmV0Y2hQcm9wZXJ0aWVzO1xuXHQvLyBlbmQgb2YgcHJvcGVydHlGaWVsZHMgcHJvY2Vzc2luZ1xuXG5cdC8vIHRvIHBvcHVsYXRlIHNlbGVjdGlvbiBmaWVsZHNcblx0bGV0IHByb3BTZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEucHJvcGVydHlJbmZvRmllbGRzKSk7XG5cdHByb3BTZWxlY3Rpb25GaWVsZHMgPSBwYXJhbWV0ZXJGaWVsZHMuY29uY2F0KHByb3BTZWxlY3Rpb25GaWVsZHMpO1xuXHQvLyBjcmVhdGUgYSBtYXAgb2YgcHJvcGVydGllcyB0byBiZSB1c2VkIGluIHNlbGVjdGlvbiB2YXJpYW50c1xuXHRjb25zdCBleGNsdWRlZEZpbHRlclByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5leGNsdWRlZEZpbHRlclByb3BlcnRpZXM7XG5cdGNvbnN0IGZpbHRlckZhY2V0cyA9IGVudGl0eVR5cGU/LmFubm90YXRpb25zPy5VST8uRmlsdGVyRmFjZXRzO1xuXHRsZXQgZmlsdGVyRmFjZXRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiA9IHt9O1xuXG5cdGNvbnN0IGFGaWVsZEdyb3VwcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJVSVwiLCBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwKTtcblxuXHRpZiAoZmlsdGVyRmFjZXRzID09PSB1bmRlZmluZWQgfHwgZmlsdGVyRmFjZXRzLmxlbmd0aCA8IDApIHtcblx0XHRmb3IgKGNvbnN0IGkgaW4gYUZpZWxkR3JvdXBzKSB7XG5cdFx0XHRmaWx0ZXJGYWNldE1hcCA9IHtcblx0XHRcdFx0Li4uZmlsdGVyRmFjZXRNYXAsXG5cdFx0XHRcdC4uLmdldEZpZWxkR3JvdXBGaWx0ZXJHcm91cHMoYUZpZWxkR3JvdXBzW2ldKVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0ZmlsdGVyRmFjZXRNYXAgPSBmaWx0ZXJGYWNldHMucmVkdWNlKChwcmV2aW91c1ZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4sIGZpbHRlckZhY2V0OiBSZWZlcmVuY2VGYWNldFR5cGVzKSA9PiB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IChmaWx0ZXJGYWNldC5UYXJnZXQuJHRhcmdldCBhcyBGaWVsZEdyb3VwKS5EYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHByZXZpb3VzVmFsdWVbKChmaWx0ZXJGYWNldC5UYXJnZXQuJHRhcmdldCBhcyBGaWVsZEdyb3VwKS5EYXRhW2ldIGFzIERhdGFGaWVsZFR5cGVzKS5WYWx1ZS5wYXRoXSA9IHtcblx0XHRcdFx0XHRncm91cDogZmlsdGVyRmFjZXQ/LklEPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdGdyb3VwTGFiZWw6IGZpbHRlckZhY2V0Py5MYWJlbD8udG9TdHJpbmcoKVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByZXZpb3VzVmFsdWU7XG5cdFx0fSwge30pO1xuXHR9XG5cblx0Ly8gY3JlYXRlIGEgbWFwIG9mIGFsbCBwb3RlbnRpYWwgZmlsdGVyIGZpZWxkcyBiYXNlZCBvbi4uLlxuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZmlsdGVyRmllbGRzO1xuXG5cdC8vIGZpbmFsbHkgY3JlYXRlIGZpbmFsIGxpc3Qgb2YgZmlsdGVyIGZpZWxkcyBieSBhZGRpbmcgdGhlIFNlbGVjdGlvbkZpZWxkcyBmaXJzdCAob3JkZXIgbWF0dGVycykuLi5cblx0bGV0IGFsbEZpbHRlcnMgPSBwcm9wU2VsZWN0aW9uRmllbGRzXG5cblx0XHQvLyAuLi5hbmQgYWRkaW5nIHJlbWFpbmluZyBmaWx0ZXIgZmllbGRzLCB0aGF0IGFyZSBub3QgdXNlZCBpbiBhIFNlbGVjdGlvblZhcmlhbnQgKG9yZGVyIGRvZXNuJ3QgbWF0dGVyKVxuXHRcdC5jb25jYXQoXG5cdFx0XHRPYmplY3Qua2V5cyhmaWx0ZXJGaWVsZHMpXG5cdFx0XHRcdC5maWx0ZXIoKHByb3BlcnR5UGF0aCkgPT4gIShwcm9wZXJ0eVBhdGggaW4gZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKSlcblx0XHRcdFx0Lm1hcCgocHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF0sIGZpbHRlckZhY2V0TWFwW3Byb3BlcnR5UGF0aF0pO1xuXHRcdFx0XHR9KVxuXHRcdCk7XG5cdGNvbnN0IHNDb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblxuXHQvL2lmIGFsbCB0YWJsZXMgYXJlIGFuYWx5dGljYWwgdGFibGVzIFwiYWdncmVnYXRhYmxlXCIgcHJvcGVydGllcyBtdXN0IGJlIGV4Y2x1ZGVkXG5cdGlmIChjaGVja0FsbFRhYmxlRm9yRW50aXR5U2V0QXJlQW5hbHl0aWNhbChsclRhYmxlcywgc0NvbnRleHRQYXRoKSkge1xuXHRcdC8vIEN1cnJlbnRseSBhbGwgYWdyZWdhdGVzIGFyZSByb290IGVudGl0eSBwcm9wZXJ0aWVzIChubyBwcm9wZXJ0aWVzIGNvbWluZyBmcm9tIG5hdmlnYXRpb24pIGFuZCBhbGxcblx0XHQvLyB0YWJsZXMgd2l0aCBzYW1lIGVudGl0eVNldCBnZXRzIHNhbWUgYWdncmVhZ3RlIGNvbmZpZ3VyYXRpb24gdGhhdCdzIHdoeSB3ZSBjYW4gdXNlIGZpcnN0IHRhYmxlIGludG9cblx0XHQvLyBMUiB0byBnZXQgYWdncmVnYXRlcyAod2l0aG91dCBjdXJyZW5jeS91bml0IHByb3BlcnRpZXMgc2luY2Ugd2UgZXhwZWN0IHRvIGJlIGFibGUgdG8gZmlsdGVyIHRoZW0pLlxuXHRcdGNvbnN0IGFnZ3JlZ2F0ZXMgPSBsclRhYmxlc1swXS5hZ2dyZWdhdGVzO1xuXHRcdGlmIChhZ2dyZWdhdGVzKSB7XG5cdFx0XHRjb25zdCBhZ2dyZWdhdGFibGVQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGFnZ3JlZ2F0ZXMpLm1hcCgoYWdncmVnYXRlS2V5KSA9PiBhZ2dyZWdhdGVzW2FnZ3JlZ2F0ZUtleV0ucmVsYXRpdmVQYXRoKTtcblx0XHRcdGFsbEZpbHRlcnMgPSBhbGxGaWx0ZXJzLmZpbHRlcigoZmlsdGVyRmllbGQpID0+IHtcblx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMuaW5kZXhPZihmaWx0ZXJGaWVsZC5rZXkpID09PSAtMTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkcyA9IGluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMoYWxsRmlsdGVycywgZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0Ly8gQWRkIGNhc2VTZW5zaXRpdmUgcHJvcGVydHkgdG8gYWxsIHNlbGVjdGlvbiBmaWVsZHMuXG5cdGNvbnN0IGlzQ2FzZVNlbnNpdGl2ZSA9IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KTtcblx0c2VsZWN0aW9uRmllbGRzLmZvckVhY2goKGZpbHRlckZpZWxkKSA9PiB7XG5cdFx0ZmlsdGVyRmllbGQuY2FzZVNlbnNpdGl2ZSA9IGlzQ2FzZVNlbnNpdGl2ZTtcblx0fSk7XG5cblx0cmV0dXJuIHsgc2VsZWN0aW9uRmllbGRzLCBzUHJvcGVydHlJbmZvIH07XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgZmlsdGVyIGJhciBpbnNpZGUgYSB2YWx1ZSBoZWxwIGRpYWxvZyBzaG91bGQgYmUgZXhwYW5kZWQuIFRoaXMgaXMgdHJ1ZSBpZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb24gaG9sZHM6XG4gKiAoMSkgYSBmaWx0ZXIgcHJvcGVydHkgaXMgbWFuZGF0b3J5LFxuICogKDIpIG5vIHNlYXJjaCBmaWVsZCBleGlzdHMgKGVudGl0eSBpc24ndCBzZWFyY2ggZW5hYmxlZCksXG4gKiAoMykgd2hlbiB0aGUgZGF0YSBpc24ndCBsb2FkZWQgYnkgZGVmYXVsdCAoYW5ub3RhdGlvbiBGZXRjaFZhbHVlcyA9IDIpLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gVGhlIEZpbHRlclJlc3RyaWN0aW9uIGFubm90YXRpb25cbiAqIEBwYXJhbSB2YWx1ZUxpc3RBbm5vdGF0aW9uIFRoZSBWYWx1ZUxpc3QgYW5ub3RhdGlvblxuICogQHJldHVybnMgVGhlIHZhbHVlIGZvciBleHBhbmRGaWx0ZXJGaWVsZHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cGFuZEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjogYW55LFxuXHR2YWx1ZUxpc3RBbm5vdGF0aW9uOiBhbnlcbik6IGJvb2xlYW4ge1xuXHRjb25zdCByZXF1aXJlZFByb3BlcnRpZXMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMoZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiwgXCJSZXF1aXJlZFByb3BlcnRpZXNcIik7XG5cdGNvbnN0IHNlYXJjaFJlc3RyaWN0aW9ucyA9IGdldFNlYXJjaFJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgaGlkZUJhc2ljU2VhcmNoID0gQm9vbGVhbihzZWFyY2hSZXN0cmljdGlvbnMgJiYgIXNlYXJjaFJlc3RyaWN0aW9ucy5TZWFyY2hhYmxlKTtcblx0Y29uc3QgdmFsdWVMaXN0ID0gdmFsdWVMaXN0QW5ub3RhdGlvbi5nZXRPYmplY3QoKTtcblx0aWYgKHJlcXVpcmVkUHJvcGVydGllcy5sZW5ndGggPiAwIHx8IGhpZGVCYXNpY1NlYXJjaCB8fCB2YWx1ZUxpc3Q/LkZldGNoVmFsdWVzID09PSAyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcbiJdfQ==
|