@sapui5/sap.fe.macros 1.141.2 → 1.143.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/macros/.library +1 -1
- package/src/sap/fe/macros/Breadcrumbs.js +4 -10
- package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
- package/src/sap/fe/macros/Chart.js +34 -23
- package/src/sap/fe/macros/Chart.tsx +25 -11
- package/src/sap/fe/macros/CollaborativeDraftHandler.js +47 -36
- package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +50 -31
- package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
- package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
- package/src/sap/fe/macros/CommonHelper.js +14 -24
- package/src/sap/fe/macros/CommonHelper.ts +18 -25
- package/src/sap/fe/macros/ConditionalSwitch.js +1 -2
- package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
- package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
- package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
- package/src/sap/fe/macros/Field.js +34 -17
- package/src/sap/fe/macros/Field.ts +64 -32
- package/src/sap/fe/macros/FooterContent.js +7 -3
- package/src/sap/fe/macros/FooterContent.tsx +8 -13
- package/src/sap/fe/macros/KPITag.js +6 -6
- package/src/sap/fe/macros/KPITag.tsx +8 -6
- package/src/sap/fe/macros/MacroAPI.js +4 -3
- package/src/sap/fe/macros/MacroAPI.ts +3 -3
- package/src/sap/fe/macros/MessageButton.js +4 -3
- package/src/sap/fe/macros/MessageButton.tsx +7 -3
- package/src/sap/fe/macros/MicroChart.js +12 -7
- package/src/sap/fe/macros/MicroChart.tsx +9 -3
- package/src/sap/fe/macros/MultiValueField.js +22 -36
- package/src/sap/fe/macros/MultiValueField.tsx +34 -66
- package/src/sap/fe/macros/RichTextEditor.js +3 -4
- package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
- package/src/sap/fe/macros/Share.js +7 -7
- package/src/sap/fe/macros/Share.tsx +9 -6
- package/src/sap/fe/macros/Status.js +39 -11
- package/src/sap/fe/macros/Status.tsx +25 -5
- package/src/sap/fe/macros/ValueHelp.js +5 -2
- package/src/sap/fe/macros/ValueHelp.tsx +5 -0
- package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
- package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
- package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
- package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
- package/src/sap/fe/macros/chart/Action.js +25 -2
- package/src/sap/fe/macros/chart/Action.ts +13 -0
- package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
- package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
- package/src/sap/fe/macros/chart/ChartDelegate.js +29 -8
- package/src/sap/fe/macros/chart/ChartDelegate.ts +46 -14
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +58 -12
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +75 -13
- package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
- package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
- package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
- package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
- package/src/sap/fe/macros/controls/FilterBar.js +39 -3
- package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
- package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
- package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
- package/src/sap/fe/macros/coreUI/CreateDialog.js +3 -3
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +2 -2
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +40 -12
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -9
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
- package/src/sap/fe/macros/field/FieldFormatOptions.js +4 -4
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +2 -2
- package/src/sap/fe/macros/field/FieldHelper.js +4 -3
- package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
- package/src/sap/fe/macros/field/FieldRuntime.js +44 -9
- package/src/sap/fe/macros/field/FieldRuntime.ts +72 -8
- package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
- package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
- package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
- package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
- package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
- package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
- package/src/sap/fe/macros/filter/FilterUtils.js +130 -40
- package/src/sap/fe/macros/filter/FilterUtils.ts +167 -45
- package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
- package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +15 -9
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +36 -17
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +21 -10
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +81 -63
- package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
- package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
- package/src/sap/fe/macros/form/Form.block.js +27 -2
- package/src/sap/fe/macros/form/Form.block.ts +31 -11
- package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
- package/src/sap/fe/macros/form/FormContainer.block.js +110 -63
- package/src/sap/fe/macros/form/FormContainer.block.ts +121 -64
- package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
- package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
- package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
- package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
- package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
- package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
- package/src/sap/fe/macros/insights/InsightsService.js +3 -2
- package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
- package/src/sap/fe/macros/internal/DataPoint.js +7 -8
- package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
- package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
- package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
- package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
- package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
- package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
- package/src/sap/fe/macros/library.js +5 -6
- package/src/sap/fe/macros/{library.ts → library.tsx} +3 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
- package/src/sap/fe/macros/messagebundle.properties +13 -5
- package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
- package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
- package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
- package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
- package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
- package/src/sap/fe/macros/messagebundle_da.properties +12 -3
- package/src/sap/fe/macros/messagebundle_de.properties +16 -7
- package/src/sap/fe/macros/messagebundle_el.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +13 -4
- package/src/sap/fe/macros/messagebundle_es.properties +12 -3
- package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
- package/src/sap/fe/macros/messagebundle_et.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
- package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
- package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
- package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
- package/src/sap/fe/macros/messagebundle_id.properties +18 -9
- package/src/sap/fe/macros/messagebundle_it.properties +12 -3
- package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
- package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
- package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
- package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
- package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
- package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
- package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
- package/src/sap/fe/macros/messagebundle_no.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
- package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
- package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
- package/src/sap/fe/macros/messagebundle_th.properties +11 -2
- package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
- package/src/sap/fe/macros/messages/MessageButton.js +21 -12
- package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
- package/src/sap/fe/macros/quickView/QuickView.js +5 -4
- package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
- package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
- package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
- package/src/sap/fe/macros/table/Action.js +21 -5
- package/src/sap/fe/macros/table/Action.ts +14 -4
- package/src/sap/fe/macros/table/ActionGroup.js +15 -2
- package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
- package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
- package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
- package/src/sap/fe/macros/table/ActionOverride.js +14 -2
- package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
- package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
- package/src/sap/fe/macros/table/Column.js +3 -2
- package/src/sap/fe/macros/table/Column.ts +1 -1
- package/src/sap/fe/macros/table/MdcTableTemplate.js +96 -18
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +136 -17
- package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
- package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
- package/src/sap/fe/macros/table/Table.block.js +74 -30
- package/src/sap/fe/macros/table/Table.block.tsx +77 -14
- package/src/sap/fe/macros/table/TableAPI.js +175 -132
- package/src/sap/fe/macros/table/TableAPI.ts +67 -30
- package/src/sap/fe/macros/table/TableDefinition.js +20 -3
- package/src/sap/fe/macros/table/TableDefinition.ts +18 -2
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -3
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +12 -9
- package/src/sap/fe/macros/table/TableHelper.js +5 -2
- package/src/sap/fe/macros/table/TableHelper.ts +5 -2
- package/src/sap/fe/macros/table/TableRuntime.js +25 -13
- package/src/sap/fe/macros/table/TableRuntime.ts +31 -17
- package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
- package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
- package/src/sap/fe/macros/table/Utils.js +9 -3
- package/src/sap/fe/macros/table/Utils.ts +14 -8
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +72 -29
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +114 -123
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +15 -6
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +14 -5
- package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
- package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +42 -14
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +49 -19
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
- package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
- package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
- package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
- package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
- package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
- package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/editFlow/editFlowConstants", "sap/fe/core/controllerextensions/editFlow/operations/ODataOperation", "sap/fe/core/controllerextensions/editFlow/operations/Operation", "sap/fe/core/controllerextensions/editFlow/operations/actionHelper", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/helpers/FPMHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/library", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/FieldControlHelper", "sap/fe/core/templating/PropertyHelper", "sap/fe/macros/field/FieldHelper", "sap/fe/macros/internal/valuehelp/ValueHelpTemplating", "sap/m/Button", "sap/m/Dialog", "sap/m/Label", "sap/m/MessageBox", "sap/m/MessageStrip", "sap/ui/core/Messaging", "sap/ui/core/Title", "sap/ui/core/message/MessageType", "sap/ui/layout/form/SimpleForm", "sap/ui/mdc/Field", "sap/ui/mdc/MultiValueField", "sap/ui/mdc/ValueHelp", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/mdc/field/MultiValueFieldItem", "sap/ui/mdc/valuehelp/Dialog", "sap/ui/mdc/valuehelp/Popover", "sap/ui/mdc/valuehelp/content/MTable", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/AnnotationHelper", "sap/ui/unified/FileUploader", "sap/ui/unified/FileUploaderHttpRequestMethod", "../internal/helpers/Upload", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/Fragment", "sap/fe/base/jsx-runtime/jsxs"], function (Log, BindingToolkit, ActionRuntime, CommonUtils, BusyLocker, UiModelConstants, ODataOperation, Operation, actionHelper, MetaModelConverter, DataField, FPMHelper, ModelHelper, ResourceModelHelper, StableIdHelper, TypeGuards, FELibrary, DataModelPathHelper, FieldControlHelper, PropertyHelper, FieldHelper, ValueHelpTemplating, Button, Dialog, Label, MessageBox, MessageStrip, Messaging, Title, MessageType, SimpleForm, Field, MultiValueField, ValueHelp, FieldEditMode, MultiValueFieldItem, VHDialog, Popover, MTable, JSONModel, AnnotationHelper, FileUploader, FileUploaderHttpRequestMethod, Upload, _jsx, _Fragment, _jsxs) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/editFlow/editFlowConstants", "sap/fe/core/controllerextensions/editFlow/operations/ODataOperation", "sap/fe/core/controllerextensions/editFlow/operations/Operation", "sap/fe/core/controllerextensions/editFlow/operations/actionHelper", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/helpers/FPMHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/library", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/FieldControlHelper", "sap/fe/core/templating/PropertyHelper", "sap/fe/macros/field/FieldHelper", "sap/fe/macros/internal/valuehelp/ValueHelpTemplating", "sap/m/Button", "sap/m/Dialog", "sap/m/Label", "sap/m/MessageBox", "sap/m/MessageStrip", "sap/ui/core/Messaging", "sap/ui/core/Title", "sap/ui/core/message/MessageType", "sap/ui/layout/form/SimpleForm", "sap/ui/mdc/Field", "sap/ui/mdc/MultiValueField", "sap/ui/mdc/ValueHelp", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/mdc/field/MultiValueFieldItem", "sap/ui/mdc/valuehelp/Dialog", "sap/ui/mdc/valuehelp/Popover", "sap/ui/mdc/valuehelp/content/MTable", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/AnnotationHelper", "sap/ui/unified/FileUploader", "sap/ui/unified/FileUploaderHttpRequestMethod", "../internal/helpers/Upload", "sap/fe/macros/field/FieldTemplating", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/Fragment", "sap/fe/base/jsx-runtime/jsxs"], function (Log, BindingToolkit, ActionRuntime, CommonUtils, BusyLocker, UiModelConstants, ODataOperation, Operation, actionHelper, MetaModelConverter, DataField, FPMHelper, ModelHelper, ResourceModelHelper, StableIdHelper, TypeGuards, FELibrary, DataModelPathHelper, FieldControlHelper, PropertyHelper, FieldHelper, ValueHelpTemplating, Button, Dialog, Label, MessageBox, MessageStrip, Messaging, Title, MessageType, SimpleForm, Field, MultiValueField, ValueHelp, FieldEditMode, MultiValueFieldItem, VHDialog, Popover, MTable, JSONModel, AnnotationHelper, FileUploader, FileUploaderHttpRequestMethod, Upload, FieldTemplating, _jsx, _Fragment, _jsxs) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
|
+
var getValueBinding = FieldTemplating.getValueBinding;
|
|
9
10
|
var showTypeMismatchDialog = Upload.showTypeMismatchDialog;
|
|
10
11
|
var showFileSizeExceedDialog = Upload.showFileSizeExceedDialog;
|
|
11
12
|
var displayMessageForFailedUpload = Upload.displayMessageForFailedUpload;
|
|
@@ -137,7 +138,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
137
138
|
width: "100%",
|
|
138
139
|
multipleLines: parameter.annotations.UI?.MultiLineText?.valueOf() === true,
|
|
139
140
|
required: compileExpression(isActionParameterRequiredExpression(parameter, this.action, convertTypes(this.metaModel))),
|
|
140
|
-
valueHelp: hasValueHelp(parameter) ? generate([this.actionName, parameter.name]) : undefined,
|
|
141
|
+
valueHelp: hasValueHelp(parameter) ? generate([this.actionName, parameter.name, "FieldValueHelp"]) : undefined,
|
|
141
142
|
change: async e => this.handleFieldChange(e, parameter),
|
|
142
143
|
visible: compileExpression(not(equal(getExpressionFromAnnotation(parameter.annotations?.UI?.Hidden), true))),
|
|
143
144
|
ariaLabelledBy: [generate(["APD_", parameter.name, "Label"])],
|
|
@@ -209,10 +210,14 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
209
210
|
_proto.createField = async function createField(parameter, parameterContext) {
|
|
210
211
|
let display = "Value";
|
|
211
212
|
let additionalValue;
|
|
213
|
+
let bindingValue;
|
|
212
214
|
try {
|
|
213
215
|
display = await FieldHelper.getAPDialogDisplayFormat(parameterContext.getObject(), {
|
|
214
216
|
context: parameterContext
|
|
215
217
|
});
|
|
218
|
+
bindingValue = await this.getAPDialogBindingValue(parameter, parameterContext, {
|
|
219
|
+
context: parameterContext
|
|
220
|
+
});
|
|
216
221
|
if (hasValueHelp(parameter)) {
|
|
217
222
|
additionalValue = await this.getAdditionalValue({
|
|
218
223
|
context: parameterContext
|
|
@@ -231,9 +236,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
231
236
|
}
|
|
232
237
|
},
|
|
233
238
|
id: generate(["APD_", parameter.name]),
|
|
234
|
-
value:
|
|
235
|
-
context: parameterContext
|
|
236
|
-
}),
|
|
239
|
+
value: bindingValue,
|
|
237
240
|
placeholder: placeHolderExpression,
|
|
238
241
|
display: display,
|
|
239
242
|
editMode: this.getParameterEditMode(parameter),
|
|
@@ -241,7 +244,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
241
244
|
multipleLines: isMultiLineText(parameter),
|
|
242
245
|
required: compileExpression(isActionParameterRequiredExpression(parameter, this.action, convertTypes(this.metaModel))),
|
|
243
246
|
change: async e => this.handleFieldChange(e, parameter),
|
|
244
|
-
valueHelp: hasValueHelp(parameter) ? generate([this.actionName, parameter.name]) : undefined,
|
|
247
|
+
valueHelp: hasValueHelp(parameter) ? generate([this.actionName, parameter.name, "FieldValueHelp"]) : undefined,
|
|
245
248
|
dependents: this.createParameterDialogValueHelp(parameter, parameterContext),
|
|
246
249
|
visible: compileExpression(ifElse(parameter.name === "ResultIsActiveEntity", false, not(equal(getExpressionFromAnnotation(parameter.annotations?.UI?.Hidden), true)))),
|
|
247
250
|
ariaLabelledBy: [generate(["APD_", parameter.name, "Label"])],
|
|
@@ -260,7 +263,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
260
263
|
return undefined;
|
|
261
264
|
}
|
|
262
265
|
return _jsx(ValueHelp, {
|
|
263
|
-
id: generate([this.actionName, parameter.name]),
|
|
266
|
+
id: generate([this.actionName, parameter.name, "FieldValueHelp"]),
|
|
264
267
|
delegate: {
|
|
265
268
|
name: "sap/fe/macros/valuehelp/ValueHelpDelegate",
|
|
266
269
|
payload: {
|
|
@@ -727,6 +730,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
727
730
|
_proto.closeDialog = function closeDialog() {
|
|
728
731
|
if (this.dialog) {
|
|
729
732
|
this.parameters.events?.onParameterDialogClosed?.();
|
|
733
|
+
// when the dialog is cancelled, messages need to be removed in case the same action should be executed again
|
|
734
|
+
for (const i in this.actionParameterInfos) {
|
|
735
|
+
this.removeMessagesForParameter(this.actionParameterInfos[i].parameter);
|
|
736
|
+
}
|
|
730
737
|
this.dialog.close();
|
|
731
738
|
}
|
|
732
739
|
this.isDialogOpen = false;
|
|
@@ -1019,10 +1026,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
1019
1026
|
* Manages the close of the dialog.
|
|
1020
1027
|
*/;
|
|
1021
1028
|
_proto.afterClose = function afterClose() {
|
|
1022
|
-
// when the dialog is cancelled, messages need to be removed in case the same action should be executed again
|
|
1023
|
-
for (const i in this.actionParameterInfos) {
|
|
1024
|
-
this.removeMessagesForParameter(this.actionParameterInfos[i].parameter);
|
|
1025
|
-
}
|
|
1026
1029
|
this.dialog?.destroy();
|
|
1027
1030
|
this.buttonLock = false; //needed here, not in the press events finally clause. In case the UI is sluggish, begin button could be pressed again.
|
|
1028
1031
|
}
|
|
@@ -1057,10 +1060,35 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
1057
1060
|
});
|
|
1058
1061
|
}
|
|
1059
1062
|
}
|
|
1063
|
+
}
|
|
1064
|
+
|
|
1065
|
+
/**
|
|
1066
|
+
* Gets the value binding for an action parameter. We add special handling for currency and unit beause they are not
|
|
1067
|
+
* part of the annotation helper format function.
|
|
1068
|
+
* @param parameter The parameter
|
|
1069
|
+
* @param parameterContext The parameter context
|
|
1070
|
+
* @param oInterface The parameter
|
|
1071
|
+
* @returns The binding for the value of the action parameter.
|
|
1072
|
+
*/;
|
|
1073
|
+
_proto.getAPDialogBindingValue = async function getAPDialogBindingValue(parameter, parameterContext, oInterface) {
|
|
1074
|
+
const oModel = oInterface.context.getModel();
|
|
1075
|
+
const sContextPath = oInterface.context.getPath();
|
|
1076
|
+
const oActionParameterAnnotations = oModel.getObject(`${sContextPath}@`);
|
|
1077
|
+
let propertyObjectPath;
|
|
1078
|
+
if (oActionParameterAnnotations["@Org.OData.Measures.V1.ISOCurrency"] || oActionParameterAnnotations["@Org.OData.Measures.V1.Unit"]) {
|
|
1079
|
+
const actionMetaPath = this.action.isBound ? `${this.metaModel.getMetaPath(this.parameters.contexts[0].getPath())}/${convertTypes(this.metaModel).namespace}.${this.action.name}` : `/${this.action.name}`;
|
|
1080
|
+
const metaContext = this.metaModel.createBindingContext(`${actionMetaPath}/${parameter.name}`);
|
|
1081
|
+
propertyObjectPath = getInvolvedDataModelObjects(metaContext);
|
|
1082
|
+
return getValueBinding(propertyObjectPath, {});
|
|
1083
|
+
} else {
|
|
1084
|
+
return AnnotationHelper.format(parameterContext.getObject(), {
|
|
1085
|
+
context: parameterContext
|
|
1086
|
+
});
|
|
1087
|
+
}
|
|
1060
1088
|
};
|
|
1061
1089
|
return ActionParameterDialog;
|
|
1062
1090
|
}();
|
|
1063
1091
|
_exports = ActionParameterDialog;
|
|
1064
1092
|
return _exports;
|
|
1065
1093
|
}, false);
|
|
1066
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJhY3Rpb24iLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyVmFsdWVzIiwiZW50aXR5U2V0TmFtZSIsIm1lc3NhZ2VIYW5kbGVyIiwiaXNEaWFsb2dPcGVuIiwiYnV0dG9uTG9jayIsImFjdGlvblBhcmFtZXRlckluZm9zIiwicGFyYW1ldGVyTW9kZWwiLCJKU09OTW9kZWwiLCIkZGlzcGxheU1vZGUiLCJhY3Rpb25OYW1lIiwiYWN0aW9uSGVscGVyIiwiZ2V0QWN0aW9uTmFtZSIsIm1ldGFNb2RlbCIsIm1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicmVzb3VyY2VNb2RlbCIsInZpZXciLCJnZXRSZXNvdXJjZU1vZGVsIiwiYXBwQ29tcG9uZW50IiwicGFyYW1ldGVyc1ZhbHVlc1Byb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlIiwicGFyYW1ldGVyc1ZhbHVlc1JlamVjdCIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0UGFyYW1ldGVyRWRpdE1vZGUiLCJwYXJhbWV0ZXIiLCJhbm5vdGF0aW9ucyIsImZpZWxkQ29udHJvbCIsIkNvbW1vbiIsIkZpZWxkQ29udHJvbCIsImltbXV0YWJsZSIsIkNvcmUiLCJJbW11dGFibGUiLCJ2YWx1ZU9mIiwiY29tcHV0ZWQiLCJDb21wdXRlZCIsImNvbnN0YW50IiwiRmllbGRFZGl0TW9kZSIsIlJlYWRPbmx5IiwiaWZFbHNlIiwiaXNSZWFkT25seUV4cHJlc3Npb24iLCJpc0Rpc2FibGVkRXhwcmVzc2lvbiIsIkRpc2FibGVkIiwiRWRpdGFibGUiLCJjcmVhdGVGb3JtRWxlbWVudCIsImFjdGlvbk1ldGFQYXRoIiwiaXNCb3VuZCIsImdldE1ldGFQYXRoIiwiY29udGV4dHMiLCJnZXRQYXRoIiwiY29udmVydFR5cGVzIiwibmFtZXNwYWNlIiwibmFtZSIsIm1ldGFDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJmaWVsZCIsImxhYmVsIiwiTGFiZWwiLCJnZXRUZXh0IiwidG9TdHJpbmciLCJzdHJlYW1QYXJhbWV0ZXIiLCJpc0NvbGxlY3Rpb24iLCJjcmVhdGVNdWx0aUZpZWxkIiwidHlwZSIsInN0YXJ0c1dpdGgiLCJnZXRTdHJlYW1Qcm9wZXJ0eSIsImNyZWF0ZUZpbGVVcGxvYWRlciIsImNyZWF0ZUZpZWxkIiwiX2pzeHMiLCJfRnJhZ21lbnQiLCJjaGlsZHJlbiIsIl9qc3giLCJpZCIsImdlbmVyYXRlIiwidGV4dCIsInBhcmFtZXRlckNvbnRleHQiLCJkaXNwbGF5IiwiRmllbGRIZWxwZXIiLCJnZXRBUERpYWxvZ0Rpc3BsYXlGb3JtYXQiLCJnZXRPYmplY3QiLCJjb250ZXh0IiwiZXJyIiwiTG9nIiwid2FybmluZyIsInBsYWNlSG9sZGVyIiwiVUkiLCJQbGFjZWhvbGRlciIsInBsYWNlSG9sZGVyRXhwcmVzc2lvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwidW5kZWZpbmVkIiwicGFyYW1ldGVyVHlwZSIsIkVETV9UWVBFX01BUFBJTkciLCJNdWx0aVZhbHVlRmllbGQiLCJwbGFjZWhvbGRlciIsIml0ZW1zIiwicGF0aCIsImRlbGVnYXRlIiwiZWRpdE1vZGUiLCJ3aWR0aCIsIm11bHRpcGxlTGluZXMiLCJNdWx0aUxpbmVUZXh0IiwicmVxdWlyZWQiLCJpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbiIsInZhbHVlSGVscCIsImhhc1ZhbHVlSGVscCIsImNoYW5nZSIsImUiLCJoYW5kbGVGaWVsZENoYW5nZSIsInZpc2libGUiLCJub3QiLCJlcXVhbCIsIkhpZGRlbiIsImFyaWFMYWJlbGxlZEJ5IiwiZGVwZW5kZW50cyIsImNyZWF0ZVBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscCIsIk11bHRpVmFsdWVGaWVsZEl0ZW0iLCJkZXNjcmlwdGlvbiIsImZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlcyIsIkFjY2VwdGFibGVNZWRpYVR5cGVzIiwiYWNjZXB0ZWRUeXBlcyIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImpvaW4iLCJoYW5kbGVUeXBlTWlzc21hdGNoIiwiZXZlbnQiLCJmaWxlVXBsb2FkZXIiLCJnZXRTb3VyY2UiLCJnaXZlblR5cGUiLCJnZXRQYXJhbWV0ZXIiLCJnZXRNaW1lVHlwZSIsInNob3dUeXBlTWlzbWF0Y2hEaWFsb2ciLCJmaWxlTWF4aW11bVNpemUiLCJjYWxjdWxhdGVNQmZyb21CeXRlIiwibWF4TGVuZ3RoIiwiaGFuZGxlRmlsZVNpemVFeGNlZWQiLCJzaG93RmlsZVNpemVFeGNlZWREaWFsb2ciLCJnZXRNYXhpbXVtRmlsZVNpemUiLCJ0b0ZpeGVkIiwib25VcGxvYWRDb21wbGV0ZSIsImRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkIiwiRmlsZVVwbG9hZGVyIiwiYnV0dG9uT25seSIsImljb25Pbmx5IiwibXVsdGlwbGUiLCJ0b29sdGlwIiwiaWNvbiIsInN0eWxlIiwic2VuZFhIUiIsInVzZU11bHRpcGFydCIsInNhbWVGaWxlbmFtZUFsbG93ZWQiLCJ1cGxvYWRPbkNoYW5nZSIsIm1pbWVUeXBlIiwidHlwZU1pc3NtYXRjaCIsIm1heGltdW1GaWxlU2l6ZSIsImZpbGVTaXplRXhjZWVkIiwiaHR0cFJlcXVlc3RNZXRob2QiLCJGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZCIsIlB1dCIsInVwbG9hZENvbXBsZXRlIiwiaGFuZGxlRmlsZVVwbG9hZGVyQ2hhbmdlIiwiYWRkaXRpb25hbFZhbHVlIiwiZ2V0QWRkaXRpb25hbFZhbHVlIiwiRmllbGQiLCJwYXlsb2FkIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsInZhbHVlIiwiQW5ub3RhdGlvbkhlbHBlciIsImZvcm1hdCIsImlzTXVsdGlMaW5lVGV4dCIsIlZhbHVlSGVscCIsInByb3BlcnR5UGF0aCIsImdldFRhcmdldE5hdmlnYXRpb25QYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJxdWFsaWZpZXJzIiwidmFsdWVIZWxwUXVhbGlmaWVyIiwidmFsaWRhdGVJbnB1dCIsInJlcXVpcmVzVmFsaWRhdGlvbiIsInR5cGVhaGVhZCIsIlBvcG92ZXIiLCJNVGFibGUiLCJjYXNlU2Vuc2l0aXZlIiwidXNlQ2FzZVNlbnNpdGl2ZUZpbHRlclJlcXVlc3RzIiwiZW50aXR5Q29udGFpbmVyIiwiQ2FwYWJpbGl0aWVzIiwiRmlsdGVyRnVuY3Rpb25zIiwiTW9kZWxIZWxwZXIiLCJpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJ1c2VBc1ZhbHVlSGVscCIsIlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyIsImRpYWxvZyIsImNyZWF0ZUZpZWxkVkhEaWFsb2ciLCJWSERpYWxvZyIsImZpZWxkUHJvbWlzZSIsInBhcmFtZXRlckluZm8iLCJmaW5kIiwiYWN0aW9uUGFyYW1ldGVySW5mbyIsInZhbGlkYXRpb25Qcm9taXNlIiwicmVtb3ZlTWVzc2FnZXNGb3JQYXJhbWV0ZXIiLCJwYXJhbWV0ZXJzVmFsdWVzIiwiaGFzRXJyb3IiLCJlcnJvciIsIkFjdGlvblJ1bnRpbWUiLCJfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlciIsIm1lc3NhZ2UiLCJmaWxlcyIsImdldEJhc2U2NEZpbGUiLCJnZXRNaW1lVHlwZVBhdGgiLCJnZXRGaWxlTmFtZVBhdGgiLCJDb250ZW50RGlzcG9zaXRpb24iLCJGaWxlbmFtZSIsIk1lZGlhVHlwZSIsInR5cGVSZWZlcmVuY2UiLCJwcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJyZWFkZXIiLCJGaWxlUmVhZGVyIiwib25sb2FkIiwicmVzdWx0Iiwic3BsaXQiLCJyZWFkQXNEYXRhVVJMIiwiaXRlbSIsIm1lc3NhZ2VzIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImNvbnRyb2xJZCIsInJlbGV2YW50TWVzc2FnZXMiLCJmaWx0ZXIiLCJtc2ciLCJnZXRDb250cm9sSWRzIiwic29tZSIsImluY2x1ZGVzIiwicmVtb3ZlTWVzc2FnZXMiLCJnZXRGb3JtRWxlbWVudHMiLCJmb3JtRWxlbWVudHMiLCJnZXREaWFsb2ciLCJjcmVhdGVEaWFsb2ciLCJkaWFsb2dDb250ZW50cyIsImRpYWxvZ0NvbnRlbnRzV2l0aFBhcmFtZXRlcnMiLCJhY3Rpb25QYXJhbWV0ZXJzIiwic2xpY2UiLCJPcGVyYXRpb25QYXJhbWV0ZXJGYWNldHMiLCJhY3Rpb25QYXJhbWV0ZXJHcm91cHMiLCJmb3JFYWNoIiwiZmFjZXQiLCJmYWNldFRpdGxlIiwiJFR5cGUiLCJoYXNGaWVsZEdyb3VwVGFyZ2V0IiwiZmllbGRHcm91cCIsIlRhcmdldCIsIiR0YXJnZXQiLCJncm91cGVkQWN0aW9uUGFyYW1ldGVycyIsIkRhdGEiLCJncm91cCIsInB1c2giLCJWYWx1ZSIsImRhdGEiLCJnZXRHcm91cEZvcm0iLCJhbGwiLCJiaW5kIiwiZm9ybURhdGEiLCJwYXJhbWV0ZXJHcm91cCIsIm9wRmFjZXRzIiwiZGlhbG9nQ29udGVudCIsIlRpdGxlIiwiZWxlbWVudCIsIm9wRmFjZXQiLCJyZWdpc3RlckFjdGlvblBhcmFtZXRlckluZm8iLCJtZXNzYWdlU3RyaXAiLCJnZXRDdXN0b21BY3Rpb25NZXNzYWdlU3RyaXBUZXh0IiwiZW5kQnV0dG9uIiwiQnV0dG9uIiwicHJlc3MiLCJvbkNhbmNlbCIsIkRpYWxvZyIsInRpdGxlIiwiZ2V0VGl0bGVUZXh0IiwiZXNjYXBlSGFuZGxlciIsImRyYWdnYWJsZSIsInJlc2l6YWJsZSIsImFmdGVyQ2xvc2UiLCJiZWZvcmVPcGVuIiwiYWZ0ZXJPcGVuIiwiaW5pdGlhbEZvY3VzIiwiYmVnaW5CdXR0b24iLCJpc0NyZWF0ZUFjdGlvbiIsImdldEJlZ2luQnV0dG9uTGFiZWwiLCJvbkFwcGx5IiwiY29udGVudCIsIk1lc3NhZ2VTdHJpcCIsInNob3dJY29uIiwiU2ltcGxlRm9ybSIsImNvbHVtbnNNIiwiZWRpdGFibGUiLCJsYWJlbFNwYW5MIiwibGFiZWxTcGFuTSIsImJpbmRpbmciLCJhY3Rpb25MYWJlbCIsImtleSIsImRlZmF1bHRLZXkiLCJnZXRPdmVycmlkZGVuVGV4dCIsImJvdW5kQWN0aW9uTmFtZSIsInBvcCIsInN1ZmZpeFJlc291cmNlS2V5IiwiY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzIiwiZ2V0T2JqZWN0QmluZGluZyIsImdldFBhcmFtZXRlckNvbnRleHQiLCJCdXN5TG9ja2VyIiwibG9jayIsInZhbGlkYXRlUHJvcGVydGllcyIsInVubG9jayIsIm5ld1ZhbHVlc0RpY3Rpb25hcnkiLCJPYmplY3QiLCJhc3NpZ24iLCJ2YWx1ZXMiLCJnZXRNb2RlbCIsImdldFByb3BlcnR5IiwicGFyYW1WYWx1ZSIsIktleSIsImlzTmV3VmFsdWUiLCJzZXRQcm9wZXJ0eSIsIlVpTW9kZWxDb25zdGFudHMiLCJEb2N1bWVudE1vZGlmaWVkIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwicmVzZXRTdGF0ZSIsInVubG9ja0RpYWxvZyIsInVwZGF0ZURpYWxvZ0JpbmRpbmdDb250ZXh0Rm9yRXJyb3IiLCJsZW5ndGgiLCJ3YXJuaW5nQ29udGV4dCIsImluZm9Db250ZXh0IiwiZXJyb25lb3VzQ3R4IiwiZ2V0TWVzc2FnZXMiLCJnZXRUeXBlIiwiTWVzc2FnZVR5cGUiLCJXYXJuaW5nIiwiSW5mb3JtYXRpb24iLCJFcnJvciIsImNvbnRleHRUb1VzZSIsInNldEJpbmRpbmdDb250ZXh0IiwiaXNMb2NrZWQiLCJGRUxpYnJhcnkiLCJDb25zdGFudHMiLCJDYW5jZWxBY3Rpb25EaWFsb2ciLCJjbG9zZURpYWxvZyIsImV2ZW50cyIsIm9uUGFyYW1ldGVyRGlhbG9nQ2xvc2VkIiwiY2xvc2UiLCJvcGVuRGlhbG9nIiwiQ29tbW9uVXRpbHMiLCJzZXRVc2VyRGVmYXVsdHMiLCJzZXRNb2RlbHMiLCJhZGREZXBlbmRlbnQiLCJzZXRPcGVyYXRpb25EZWZhdWx0VmFsdWVzIiwib3BlbiIsInNldE1vZGVsIiwiYmluZEVsZW1lbnQiLCJfZXZlbnQiLCJ3YWl0Rm9yUGFyYW1ldGVyc1ZhbHVlcyIsImlzT3BlbiIsImdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZSIsImJpbmRpbmdQYXJhbWV0ZXIiLCJvcGVyYXRpb25CaW5kaW5nIiwicGFyYW1ldGVyTW9kZWxEYXRhIiwicGFyYW1OYW1lIiwiZGVmYXVsdFZhbHVlIiwiUGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJwYXRoRm9yQ29udGV4dCIsInJlcGxhY2UiLCJyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkiLCJyZXF1ZXN0UHJvcGVydHkiLCJub1Bvc3NpYmxlVmFsdWUiLCJsYXRlUHJvcGVydHlFcnJvciIsImdldE1hbmlmZXN0RnVuY3Rpb25WYWx1ZXMiLCJiaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiRlBNSGVscGVyIiwibG9hZE1vZHVsZUFuZENhbGxNZXRob2QiLCJnZXRQcmVEZWZpbmVkVmFsdWVzIiwiYm91bmRGdW5jdGlvbk5hbWUiLCJEZWZhdWx0VmFsdWVzRnVuY3Rpb24iLCJyZXF1ZXN0Q29udGV4dE9iamVjdCIsImZ1bmN0aW9uUGFyYW1zIiwiYm91bmRGdW5jdGlvbiIsIk9wZXJhdGlvbiIsImdldE9wZXJhdGlvbkZyb21OYW1lIiwiT0RhdGFPcGVyYXRpb24iLCJlbmhhbmNlJHNlbGVjdCIsImdyb3VwSWQiLCJleGVjdXRlIiwiaXNGdWxmaWxsZWQiLCJib3VuZENvbnRleHQiLCJyZXF1ZXN0T2JqZWN0IiwiY29udGV4dFZhbHVlcyIsInByb21pc2VzIiwiZGVmYXVsdFZhbHVlcyIsImZ1bmN0aW9uVmFsdWVzIiwibWFuaWZlc3RGdW5jdGlvblZhbHVlcyIsImZpcnN0VmlzaWJsZVBhcmFtZXRlciIsImdldFZpc2libGUiLCJmaXJzdEZpZWxkIiwiZm9jdXNJbmZvIiwiZ2V0Rm9jdXNJbmZvIiwidGFyZ2V0SW5mbyIsInNpbGVudCIsImZvY3VzIiwib25QYXJhbWV0ZXJEaWFsb2dPcGVuZWQiLCJpc011bHRpVmFsdWUiLCJzZXRQYXJhbWV0ZXIiLCJpIiwicGFyYW1ldGVyTmFtZSIsInBhcmFtZXRlclByb3ZpZGVkVmFsdWUiLCJoYXNPd25Qcm9wZXJ0eSIsInNldE9mRnVuY3Rpb25WYWx1ZXMiLCJTZXQiLCJpbmRleCIsInNpemUiLCJuZXh0IiwicmVmcmVzaCIsIk1lc3NhZ2VCb3giLCJhY3Rpb25zIiwiQWN0aW9uIiwiT0siLCJlbXBoYXNpemVkQWN0aW9uIiwib25DbG9zZSIsImV4dGVuc2lvbkFQSSIsImdldENvbnRyb2xsZXIiLCJnZXRFeHRlbnNpb25BUEkiLCJjb250ZW50V2lkdGgiLCJmdW5jdGlvbkNvbnRleHQiLCJnZXRCaW5kaW5nIiwiaXNBIiwiZGVzdHJveSIsIm9JbnRlcmZhY2UiLCJ0ZXh0Q29udGV4dCIsImNvbnRleHRQYXRoIiwibG9jYWxEYXRhUHJvcGVydHkiLCIkTmFtZSIsInZhbHVlTGlzdEJ5UXVhbGlmaWVyIiwicmVxdWVzdFZhbHVlTGlzdEluZm8iLCJ2YWx1ZUxpc3RQYXJhbWV0ZXIiLCJQYXJhbWV0ZXJzIiwiTG9jYWxEYXRhUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiVmFsdWVMaXN0UHJvcGVydHkiLCJ0ZXh0UHJvcGVydHkiLCJDb2xsZWN0aW9uUGF0aCIsInByb3BBbm5vdGF0aW9ucyIsInRleHRQcm9wIiwidGV4dFBhdGgiLCIkUGF0aCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT3BlcmF0aW9uUGFyYW1ldGVyRGlhbG9nLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbXBsZXhUeXBlLCBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIFByaW1pdGl2ZVR5cGUsIFByb3BlcnR5LCBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBBY3Rpb24sIHR5cGUgQWN0aW9uUGFyYW1ldGVyIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFByb3BlcnR5QW5ub3RhdGlvbnNfQ29yZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29yZV9FZG1cIjtcbmltcG9ydCB0eXBlIHsgRGF0YUZpZWxkLCBGaWVsZEdyb3VwVHlwZSwgUmVmZXJlbmNlRmFjZXQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdEVETV9UWVBFX01BUFBJTkcsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRub3QsXG5cdHR5cGUgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25QYXJhbWV0ZXJJbmZvIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBVaU1vZGVsQ29uc3RhbnRzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9lZGl0Rmxvd0NvbnN0YW50c1wiO1xuaW1wb3J0IE9EYXRhT3BlcmF0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9vcGVyYXRpb25zL09EYXRhT3BlcmF0aW9uXCI7XG5pbXBvcnQgT3BlcmF0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9vcGVyYXRpb25zL09wZXJhdGlvblwiO1xuaW1wb3J0IGFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvb3BlcmF0aW9ucy9hY3Rpb25IZWxwZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcywgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBoYXNGaWVsZEdyb3VwVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgaXNGdWxmaWxsZWQsIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHsgZ2V0VGFyZ2V0TmF2aWdhdGlvblBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbiwgaXNEaXNhYmxlZEV4cHJlc3Npb24sIGlzUmVhZE9ubHlFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRmllbGRDb250cm9sSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNWYWx1ZUhlbHAsIGlzTXVsdGlMaW5lVGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkSGVscGVyXCI7XG5pbXBvcnQgeyByZXF1aXJlc1ZhbGlkYXRpb24sIHVzZUNhc2VTZW5zaXRpdmVGaWx0ZXJSZXF1ZXN0cyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUhlbHBUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBMaXN0UmVwb3J0RXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB0eXBlIHsgRGlhbG9nJEJlZm9yZU9wZW5FdmVudCB9IGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9tL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgVGl0bGUgZnJvbSBcInNhcC91aS9jb3JlL1RpdGxlXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IFNpbXBsZUZvcm0gZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9TaW1wbGVGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkJENoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCBGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBNdWx0aVZhbHVlRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgVmFsdWVIZWxwIGZyb20gXCJzYXAvdWkvbWRjL1ZhbHVlSGVscFwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IE11bHRpVmFsdWVGaWVsZEl0ZW0gZnJvbSBcInNhcC91aS9tZGMvZmllbGQvTXVsdGlWYWx1ZUZpZWxkSXRlbVwiO1xuaW1wb3J0IFZIRGlhbG9nIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9EaWFsb2dcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9Qb3BvdmVyXCI7XG5pbXBvcnQgTVRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L01UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUge1xuXHRGaWxlVXBsb2FkZXIkQ2hhbmdlRXZlbnQsXG5cdEZpbGVVcGxvYWRlciRGaWxlU2l6ZUV4Y2VlZEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVHlwZU1pc3NtYXRjaEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVXBsb2FkQ29tcGxldGVFdmVudFxufSBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgRmlsZVVwbG9hZGVyIGZyb20gXCJzYXAvdWkvdW5pZmllZC9GaWxlVXBsb2FkZXJcIjtcbmltcG9ydCBGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZCBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVySHR0cFJlcXVlc3RNZXRob2RcIjtcbmltcG9ydCB7IGRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkLCBzaG93RmlsZVNpemVFeGNlZWREaWFsb2csIHNob3dUeXBlTWlzbWF0Y2hEaWFsb2cgfSBmcm9tIFwiLi4vaW50ZXJuYWwvaGVscGVycy9VcGxvYWRcIjtcblxudHlwZSBQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgPSB7IHBhcmFtTmFtZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93bjsgbGF0ZVByb3BlcnR5RXJyb3I/OiBib29sZWFuOyBub1Bvc3NpYmxlVmFsdWU/OiBib29sZWFuIH07XG5cbnR5cGUgRWxlbWVudEdyb3VwID0geyBmYWNldFRpdGxlOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxzdHJpbmc+IHwgdW5kZWZpbmVkOyBkYXRhOiBBY3Rpb25QYXJhbWV0ZXJbXSB9O1xudHlwZSBFbGVtZW50R3JvdXBDb252ZXJ0ZWQgPSB7IGZhY2V0VGl0bGU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4gfCB1bmRlZmluZWQ7IGRhdGE6IERpYWxvZ0NvbnRlbnRUeXBlc1tdIH07XG5cbnR5cGUgRm9ybUVsZW1lbnRUeXBlID0gW0xhYmVsLCBGaWVsZCB8IE11bHRpVmFsdWVGaWVsZF07XG5cbnR5cGUgRGlhbG9nQ29udGVudFR5cGVzID0ge1xuXHRmb3JtRWxlbWVudHM6IEZvcm1FbGVtZW50VHlwZTtcblx0cGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXI7XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWN0aW9uUGFyYW1ldGVyRGlhbG9nIHtcblx0cHJpdmF0ZSBwYXJhbWV0ZXJzVmFsdWVzUHJvbWlzZTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPj47XG5cblx0cHJpdmF0ZSBwYXJhbWV0ZXJzVmFsdWVzUmVzb2x2ZSE6IChyZXNvbHZlVmFsdWU6IFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+KSA9PiB2b2lkO1xuXG5cdHByaXZhdGUgcGFyYW1ldGVyc1ZhbHVlc1JlamVjdCE6IChlcnJvcjogdW5rbm93bikgPT4gdm9pZDtcblxuXHQvLyB0aGUgZGlhbG9nIGlzIGNvbnNpZGVyZWQgYXMgY2xvc2VkIGFmdGVyIHRoZSBhZnRlckNsb3NlIGV2ZW50IGhhcyBiZWVuIHRyaWdnZXJlZFxuXHQvLyB0aGlzIGlzIGFzeW5jaHJvbm91cywgc28gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBkaWFsb2cgc3RhdGUgc2luY2UgdGhlIG1lc3NhZ2UgaGFuZGxpbmcgaXMgc3luY2hyb25vdXNcblx0Ly8gYW5kIHdlIG5lZWQgdG8ga25vdyBpZiB0aGUgZGlhbG9nIGlzIG9wZW4gb3IgY2xvc2VkXG5cdHByaXZhdGUgaXNEaWFsb2dPcGVuID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBkaWFsb2c6IERpYWxvZyB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFjdGlvbk5hbWU6IHN0cmluZztcblxuXHRwcml2YXRlIGJ1dHRvbkxvY2sgPSBmYWxzZTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cblx0cHJpdmF0ZSByZWFkb25seSBhY3Rpb25QYXJhbWV0ZXJJbmZvczogKEFjdGlvblBhcmFtZXRlckluZm8gJiB7IHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyIH0pW10gPSBbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IHBhcmFtZXRlck1vZGVsOiBKU09OTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHQkZGlzcGxheU1vZGU6IHt9XG5cdH0pO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbDtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IGFjdGlvbjogQWN0aW9uLFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyczoge1xuXHRcdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdFx0XHRjb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdHBhcmFtZXRlcnNWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+O1xuXHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uPzogc3RyaW5nO1xuXHRcdFx0aXNDcmVhdGVBY3Rpb24/OiBib29sZWFuO1xuXHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRtb2RlbDogT0RhdGFNb2RlbDtcblx0XHRcdHZpZXc/OiBGRVZpZXc7XG5cdFx0XHRldmVudHM/OiB7XG5cdFx0XHRcdG9uUGFyYW1ldGVyRGlhbG9nT3BlbmVkPzogKCkgPT4gdm9pZDtcblx0XHRcdFx0b25QYXJhbWV0ZXJEaWFsb2dDbG9zZWQ/OiAoKSA9PiB2b2lkO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdIHwgdW5kZWZpbmVkLFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgZW50aXR5U2V0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyXG5cdCkge1xuXHRcdHRoaXMuYWN0aW9uTmFtZSA9IGFjdGlvbkhlbHBlci5nZXRBY3Rpb25OYW1lKHRoaXMuYWN0aW9uKTtcblx0XHR0aGlzLm1ldGFNb2RlbCA9IHRoaXMucGFyYW1ldGVycy5tb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHR0aGlzLnJlc291cmNlTW9kZWwgPSB0aGlzLnBhcmFtZXRlcnMudmlldyA/IGdldFJlc291cmNlTW9kZWwodGhpcy5wYXJhbWV0ZXJzLnZpZXcpIDogZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50KTtcblx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzVmFsdWVzUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBiaW5kaW5nIGV4cHJlc3Npb24gb2YgdGhlIGVkaXQgbW9kZSBwcm9wZXJ0eSBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRQYXJhbWV0ZXJFZGl0TW9kZShwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxGaWVsZEVkaXRNb2RlPiB7XG5cdFx0Y29uc3QgYW5ub3RhdGlvbnMgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMsXG5cdFx0XHRmaWVsZENvbnRyb2wgPSBhbm5vdGF0aW9ucy5Db21tb24/LkZpZWxkQ29udHJvbCxcblx0XHRcdGltbXV0YWJsZSA9IChhbm5vdGF0aW9ucy5Db3JlIGFzIHVua25vd24gYXMgUHJvcGVydHlBbm5vdGF0aW9uc19Db3JlKT8uSW1tdXRhYmxlPy52YWx1ZU9mKCksXG5cdFx0XHRjb21wdXRlZCA9IChhbm5vdGF0aW9ucy5Db3JlIGFzIHVua25vd24gYXMgUHJvcGVydHlBbm5vdGF0aW9uc19Db3JlKT8uQ29tcHV0ZWQ/LnZhbHVlT2YoKTtcblxuXHRcdGlmIChpbW11dGFibGUgfHwgY29tcHV0ZWQpIHtcblx0XHRcdHJldHVybiBjb25zdGFudChGaWVsZEVkaXRNb2RlLlJlYWRPbmx5KTtcblx0XHR9IGVsc2UgaWYgKGZpZWxkQ29udHJvbCkge1xuXHRcdFx0cmV0dXJuIGlmRWxzZShcblx0XHRcdFx0aXNSZWFkT25seUV4cHJlc3Npb24ocGFyYW1ldGVyKSxcblx0XHRcdFx0RmllbGRFZGl0TW9kZS5SZWFkT25seSxcblx0XHRcdFx0aWZFbHNlKGlzRGlzYWJsZWRFeHByZXNzaW9uKHBhcmFtZXRlciksIEZpZWxkRWRpdE1vZGUuRGlzYWJsZWQsIEZpZWxkRWRpdE1vZGUuRWRpdGFibGUpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gY29uc3RhbnQoRmllbGRFZGl0TW9kZS5FZGl0YWJsZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgZm9ybSBlbGVtZW50IGNvbnRyb2wgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgVGhlIGZvcm0gZWxlbWVudCBjb250cm9sLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBjcmVhdGVGb3JtRWxlbWVudChwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IFByb21pc2U8Rm9ybUVsZW1lbnRUeXBlPiB7XG5cdFx0Y29uc3QgYWN0aW9uTWV0YVBhdGggPSB0aGlzLmFjdGlvbi5pc0JvdW5kXG5cdFx0XHQ/IGAke3RoaXMubWV0YU1vZGVsLmdldE1ldGFQYXRoKHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5nZXRQYXRoKCkpfS8ke2NvbnZlcnRUeXBlcyh0aGlzLm1ldGFNb2RlbCkubmFtZXNwYWNlfS4ke1xuXHRcdFx0XHRcdHRoaXMuYWN0aW9uLm5hbWVcblx0XHRcdCAgfWBcblx0XHRcdDogYC8ke3RoaXMuYWN0aW9uLm5hbWV9YDtcblx0XHRjb25zdCBtZXRhQ29udGV4dCA9IHRoaXMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke2FjdGlvbk1ldGFQYXRofS8ke3BhcmFtZXRlci5uYW1lfWApITtcblx0XHRsZXQgZmllbGQ7XG5cdFx0bGV0IGxhYmVsID0gcGFyYW1ldGVyLmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWxcblx0XHRcdD8gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQocGFyYW1ldGVyLmFubm90YXRpb25zLkNvbW1vbi5MYWJlbC50b1N0cmluZygpKVxuXHRcdFx0OiBwYXJhbWV0ZXIubmFtZTtcblx0XHRsZXQgc3RyZWFtUGFyYW1ldGVyO1xuXHRcdGlmIChwYXJhbWV0ZXIuaXNDb2xsZWN0aW9uKSB7XG5cdFx0XHRmaWVsZCA9IGF3YWl0IHRoaXMuY3JlYXRlTXVsdGlGaWVsZChwYXJhbWV0ZXIsIG1ldGFDb250ZXh0KTtcblx0XHR9IGVsc2UgaWYgKCFwYXJhbWV0ZXIudHlwZS5zdGFydHNXaXRoKFwiRWRtLlwiKSAmJiB0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcikpIHtcblx0XHRcdHN0cmVhbVBhcmFtZXRlciA9IHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKTtcblx0XHRcdC8vIGNhbGN1bGF0ZSBsYWJlbCBmcm9tIHRoZSBzdHJlYW0gcHJvcGVydHkgd2l0aGluIHRoZSBDb21wbGV4VHlwZVxuXHRcdFx0bGFiZWwgPSBzdHJlYW1QYXJhbWV0ZXI/LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWxcblx0XHRcdFx0PyB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChzdHJlYW1QYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uLkxhYmVsLnRvU3RyaW5nKCkpXG5cdFx0XHRcdDogKHN0cmVhbVBhcmFtZXRlcj8ubmFtZSBhcyBzdHJpbmcpO1xuXHRcdFx0ZmllbGQgPSB0aGlzLmNyZWF0ZUZpbGVVcGxvYWRlcihwYXJhbWV0ZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmaWVsZCA9IGF3YWl0IHRoaXMuY3JlYXRlRmllbGQocGFyYW1ldGVyLCBtZXRhQ29udGV4dCk7XG5cdFx0fVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8PlxuXHRcdFx0XHQ8TGFiZWwgaWQ9e2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWUsIHN0cmVhbVBhcmFtZXRlcj8ubmFtZSwgXCJMYWJlbFwiXSl9IHRleHQ9e2xhYmVsfSAvPlxuXHRcdFx0XHR7ZmllbGR9XG5cdFx0XHQ8Lz5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIG11bHRpIGZpZWxkIGNvbnRyb2wgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIHBhcmFtZXRlckNvbnRleHQgVGhlIHBhcmFtZXRlciBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSBtdWx0aSB2YWx1ZSBmaWVsZCBjb250cm9sLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBjcmVhdGVNdWx0aUZpZWxkKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyLCBwYXJhbWV0ZXJDb250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTxNdWx0aVZhbHVlRmllbGQ+IHtcblx0XHRsZXQgZGlzcGxheSA9IFwiVmFsdWVcIjtcblx0XHR0cnkge1xuXHRcdFx0ZGlzcGxheSA9IGF3YWl0IEZpZWxkSGVscGVyLmdldEFQRGlhbG9nRGlzcGxheUZvcm1hdChwYXJhbWV0ZXJDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IHBhcmFtZXRlckNvbnRleHQgfSk7XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRMb2cud2FybmluZyhgUGFyYW1ldGVyIGRpYWxvZyBtdWx0aWZpZWxkOiBkaXNwbGF5IGZvcm1hdCBjb3VsZG4ndCBiZSBjYWxjdWxhdGVkIGZvciBwYXJhbWV0ZXIgJyR7cGFyYW1ldGVyLm5hbWV9JzogJHtlcnJ9YCk7XG5cdFx0fVxuXHRcdGNvbnN0IHBsYWNlSG9sZGVyID0gcGFyYW1ldGVyLmFubm90YXRpb25zLlVJPy5QbGFjZWhvbGRlciBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxQcmltaXRpdmVUeXBlPiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBwbGFjZUhvbGRlckV4cHJlc3Npb24gPSBwbGFjZUhvbGRlciA/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihwbGFjZUhvbGRlcikpIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHBhcmFtZXRlclR5cGUgPSBFRE1fVFlQRV9NQVBQSU5HPy5bcGFyYW1ldGVyLnR5cGVdPy50eXBlO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TXVsdGlWYWx1ZUZpZWxkXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbXCJBUERfXCIsIHBhcmFtZXRlci5uYW1lXSl9XG5cdFx0XHRcdHBsYWNlaG9sZGVyPXtwbGFjZUhvbGRlckV4cHJlc3Npb259XG5cdFx0XHRcdGl0ZW1zPXt7IHBhdGg6IGBtdmZ2aWV3Pi8ke3BhcmFtZXRlci5uYW1lfWAgfX1cblx0XHRcdFx0ZGVsZWdhdGU9e3sgbmFtZTogXCJzYXAvZmUvY29yZS9jb250cm9scy9NdWx0aVZhbHVlUGFyYW1ldGVyRGVsZWdhdGVcIiB9fVxuXHRcdFx0XHRkaXNwbGF5PXtkaXNwbGF5fVxuXHRcdFx0XHRlZGl0TW9kZT17dGhpcy5nZXRQYXJhbWV0ZXJFZGl0TW9kZShwYXJhbWV0ZXIpfVxuXHRcdFx0XHR3aWR0aD1cIjEwMCVcIlxuXHRcdFx0XHRtdWx0aXBsZUxpbmVzPXtwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuVUk/Lk11bHRpTGluZVRleHQ/LnZhbHVlT2YoKSA9PT0gdHJ1ZX1cblx0XHRcdFx0cmVxdWlyZWQ9e2NvbXBpbGVFeHByZXNzaW9uKGlzQWN0aW9uUGFyYW1ldGVyUmVxdWlyZWRFeHByZXNzaW9uKHBhcmFtZXRlciwgdGhpcy5hY3Rpb24sIGNvbnZlcnRUeXBlcyh0aGlzLm1ldGFNb2RlbCkpKX1cblx0XHRcdFx0dmFsdWVIZWxwPXtoYXNWYWx1ZUhlbHAocGFyYW1ldGVyKSA/IGdlbmVyYXRlKFt0aGlzLmFjdGlvbk5hbWUsIHBhcmFtZXRlci5uYW1lXSkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGNoYW5nZT17YXN5bmMgKGUpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMuaGFuZGxlRmllbGRDaGFuZ2UoZSwgcGFyYW1ldGVyKX1cblx0XHRcdFx0dmlzaWJsZT17Y29tcGlsZUV4cHJlc3Npb24obm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihwYXJhbWV0ZXIuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSkpfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17W2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWUsIFwiTGFiZWxcIl0pXX1cblx0XHRcdFx0ZGVwZW5kZW50cz17dGhpcy5jcmVhdGVQYXJhbWV0ZXJEaWFsb2dWYWx1ZUhlbHAocGFyYW1ldGVyLCBwYXJhbWV0ZXJDb250ZXh0KX1cblx0XHRcdD5cblx0XHRcdFx0PE11bHRpVmFsdWVGaWVsZEl0ZW0ga2V5PXtge3BhdGg6ICdtdmZ2aWV3PktleScsIHR5cGU6JyR7cGFyYW1ldGVyVHlwZX0nfWB9IGRlc2NyaXB0aW9uPVwie212ZnZpZXc+RGVzY31cIiAvPlxuXHRcdFx0PC9NdWx0aVZhbHVlRmllbGQ+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBGaWxlVXBsb2FkZXIgY29udHJvbCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBUaGUgRmlsZVVwbG9hZGVyIGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZUZpbGVVcGxvYWRlcihwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IEZpbGVVcGxvYWRlciB7XG5cdFx0bGV0IGZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlcztcblx0XHRpZiAodGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpPy5hbm5vdGF0aW9ucy5Db3JlPy5BY2NlcHRhYmxlTWVkaWFUeXBlcykge1xuXHRcdFx0Y29uc3QgYWNjZXB0ZWRUeXBlcyA9IEFycmF5LmZyb20oXG5cdFx0XHRcdHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKT8uYW5ub3RhdGlvbnMuQ29yZT8uQWNjZXB0YWJsZU1lZGlhVHlwZXMgYXMgdW5rbm93biBhcyBzdHJpbmdbXVxuXHRcdFx0KS5tYXAoKHR5cGUpID0+IGAnJHt0eXBlfSdgKTtcblx0XHRcdGZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlcyA9IGB7PW9kYXRhLmNvbGxlY3Rpb24oWyR7YWNjZXB0ZWRUeXBlcy5qb2luKFwiLFwiKX1dKX1gO1xuXHRcdH1cblx0XHRjb25zdCBoYW5kbGVUeXBlTWlzc21hdGNoID0gZnVuY3Rpb24gKGV2ZW50OiBGaWxlVXBsb2FkZXIkVHlwZU1pc3NtYXRjaEV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBmaWxlVXBsb2FkZXIgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdGNvbnN0IGdpdmVuVHlwZSA9IGV2ZW50LmdldFBhcmFtZXRlcihcIm1pbWVUeXBlXCIpO1xuXHRcdFx0Y29uc3QgYWNjZXB0ZWRUeXBlcyA9IGZpbGVVcGxvYWRlci5nZXRNaW1lVHlwZSgpO1xuXHRcdFx0aWYgKGdpdmVuVHlwZSkge1xuXHRcdFx0XHRzaG93VHlwZU1pc21hdGNoRGlhbG9nKGZpbGVVcGxvYWRlciwgZ2l2ZW5UeXBlLCBhY2NlcHRlZFR5cGVzKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdC8vIHZlcmlmeSBjaGVjayBmb3Igc3RyZWFtXG5cdFx0Y29uc3QgZmlsZU1heGltdW1TaXplID0gRmllbGRIZWxwZXIuY2FsY3VsYXRlTUJmcm9tQnl0ZSh0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik/Lm1heExlbmd0aCk7XG5cdFx0Y29uc3QgaGFuZGxlRmlsZVNpemVFeGNlZWQgPSBmdW5jdGlvbiAoZXZlbnQ6IEZpbGVVcGxvYWRlciRGaWxlU2l6ZUV4Y2VlZEV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBmaWxlVXBsb2FkZXIgPSBldmVudD8uZ2V0U291cmNlKCk7XG5cdFx0XHRzaG93RmlsZVNpemVFeGNlZWREaWFsb2coZmlsZVVwbG9hZGVyLCBmaWxlVXBsb2FkZXIuZ2V0TWF4aW11bUZpbGVTaXplKCkudG9GaXhlZCgzKSk7XG5cdFx0fTtcblx0XHRjb25zdCBvblVwbG9hZENvbXBsZXRlID0gZnVuY3Rpb24gKGV2ZW50OiBGaWxlVXBsb2FkZXIkVXBsb2FkQ29tcGxldGVFdmVudCk6IHZvaWQge1xuXHRcdFx0aWYgKGV2ZW50LmdldFBhcmFtZXRlcihcInN0YXR1c1wiKSA9PT0gMCB8fCAoZXZlbnQuZ2V0UGFyYW1ldGVyKFwic3RhdHVzXCIpIGFzIG51bWJlcikgPj0gNDAwKSB7XG5cdFx0XHRcdGRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkKFxuXHRcdFx0XHRcdGV2ZW50LmdldFNvdXJjZSgpLFxuXHRcdFx0XHRcdChldmVudC5nZXRQYXJhbWV0ZXIoXCJyZXNwb25zZVJhd1wiKSBhcyBzdHJpbmcpIHx8IChldmVudC5nZXRQYXJhbWV0ZXIoXCJyZXNwb25zZVwiKSBhcyBzdHJpbmcpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZpbGVVcGxvYWRlclxuXHRcdFx0XHRuYW1lPVwiRkVWNEZpbGVVcGxvYWRcIlxuXHRcdFx0XHRidXR0b25Pbmx5PVwiZmFsc2VcIlxuXHRcdFx0XHRpY29uT25seT1cInRydWVcIlxuXHRcdFx0XHRtdWx0aXBsZT1cImZhbHNlXCJcblx0XHRcdFx0dG9vbHRpcD1cIntzYXAuZmUuaTE4bj5NX0ZJRUxEX0ZJTEVVUExPQURFUl9VUExPQURfQlVUVE9OX1RPT0xUSVB9XCJcblx0XHRcdFx0aWNvbj1cInNhcC1pY29uOi8vdXBsb2FkXCJcblx0XHRcdFx0c3R5bGU9XCJUcmFuc3BhcmVudFwiXG5cdFx0XHRcdHNlbmRYSFI9XCJ0cnVlXCJcblx0XHRcdFx0dXNlTXVsdGlwYXJ0PVwiZmFsc2VcIlxuXHRcdFx0XHRzYW1lRmlsZW5hbWVBbGxvd2VkPVwidHJ1ZVwiXG5cdFx0XHRcdHVwbG9hZE9uQ2hhbmdlPVwiZmFsc2VcIlxuXHRcdFx0XHRtaW1lVHlwZT17ZmlsZUFjY2VwdGFibGVNZWRpYVR5cGVzfVxuXHRcdFx0XHR0eXBlTWlzc21hdGNoPXtoYW5kbGVUeXBlTWlzc21hdGNofVxuXHRcdFx0XHRtYXhpbXVtRmlsZVNpemU9e2ZpbGVNYXhpbXVtU2l6ZX1cblx0XHRcdFx0ZmlsZVNpemVFeGNlZWQ9e2hhbmRsZUZpbGVTaXplRXhjZWVkfVxuXHRcdFx0XHRodHRwUmVxdWVzdE1ldGhvZD17RmlsZVVwbG9hZGVySHR0cFJlcXVlc3RNZXRob2QuUHV0fVxuXHRcdFx0XHR1cGxvYWRDb21wbGV0ZT17b25VcGxvYWRDb21wbGV0ZX1cblx0XHRcdFx0Y2hhbmdlPXthc3luYyAoZSk6IFByb21pc2U8dm9pZD4gPT4gdGhpcy5oYW5kbGVGaWxlVXBsb2FkZXJDaGFuZ2UoZSwgcGFyYW1ldGVyKX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBmaWVsZCBjb250cm9sIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJDb250ZXh0IFRoZSBwYXJhbWV0ZXIgY29udGV4dFxuXHQgKiBAcmV0dXJucyBUaGUgZmllbGQgY29udHJvbC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgY3JlYXRlRmllbGQocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIsIHBhcmFtZXRlckNvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPEZpZWxkPiB7XG5cdFx0bGV0IGRpc3BsYXkgPSBcIlZhbHVlXCI7XG5cdFx0bGV0IGFkZGl0aW9uYWxWYWx1ZTtcblx0XHR0cnkge1xuXHRcdFx0ZGlzcGxheSA9IGF3YWl0IEZpZWxkSGVscGVyLmdldEFQRGlhbG9nRGlzcGxheUZvcm1hdChwYXJhbWV0ZXJDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IHBhcmFtZXRlckNvbnRleHQgfSk7XG5cdFx0XHRpZiAoaGFzVmFsdWVIZWxwKHBhcmFtZXRlcikpIHtcblx0XHRcdFx0YWRkaXRpb25hbFZhbHVlID0gYXdhaXQgdGhpcy5nZXRBZGRpdGlvbmFsVmFsdWUoeyBjb250ZXh0OiBwYXJhbWV0ZXJDb250ZXh0IH0pO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0TG9nLndhcm5pbmcoYFBhcmFtZXRlciBkaWFsb2cgZmllbGQ6IGRpc3BsYXkgZm9ybWF0IGNvdWxkbid0IGJlIGNhbGN1bGF0ZWQgZm9yIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nOiAke2Vycn1gKTtcblx0XHR9XG5cdFx0Y29uc3QgcGxhY2VIb2xkZXIgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuVUk/LlBsYWNlaG9sZGVyIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFByaW1pdGl2ZVR5cGU+IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHBsYWNlSG9sZGVyRXhwcmVzc2lvbiA9IHBsYWNlSG9sZGVyID8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHBsYWNlSG9sZGVyKSkgOiB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGaWVsZFxuXHRcdFx0XHRkZWxlZ2F0ZT17eyBuYW1lOiBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRCYXNlRGVsZWdhdGVcIiwgcGF5bG9hZDogeyByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0OiB0cnVlIH0gfX1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWVdKX1cblx0XHRcdFx0dmFsdWU9e0Fubm90YXRpb25IZWxwZXIuZm9ybWF0KHBhcmFtZXRlckNvbnRleHQuZ2V0T2JqZWN0KCksIHsgY29udGV4dDogcGFyYW1ldGVyQ29udGV4dCB9KX1cblx0XHRcdFx0cGxhY2Vob2xkZXI9e3BsYWNlSG9sZGVyRXhwcmVzc2lvbn1cblx0XHRcdFx0ZGlzcGxheT17ZGlzcGxheX1cblx0XHRcdFx0ZWRpdE1vZGU9e3RoaXMuZ2V0UGFyYW1ldGVyRWRpdE1vZGUocGFyYW1ldGVyKX1cblx0XHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdFx0bXVsdGlwbGVMaW5lcz17aXNNdWx0aUxpbmVUZXh0KHBhcmFtZXRlcil9XG5cdFx0XHRcdHJlcXVpcmVkPXtjb21waWxlRXhwcmVzc2lvbihpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbihwYXJhbWV0ZXIsIHRoaXMuYWN0aW9uLCBjb252ZXJ0VHlwZXModGhpcy5tZXRhTW9kZWwpKSl9XG5cdFx0XHRcdGNoYW5nZT17YXN5bmMgKGUpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMuaGFuZGxlRmllbGRDaGFuZ2UoZSwgcGFyYW1ldGVyKX1cblx0XHRcdFx0dmFsdWVIZWxwPXtoYXNWYWx1ZUhlbHAocGFyYW1ldGVyKSA/IGdlbmVyYXRlKFt0aGlzLmFjdGlvbk5hbWUsIHBhcmFtZXRlci5uYW1lXSkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGRlcGVuZGVudHM9e3RoaXMuY3JlYXRlUGFyYW1ldGVyRGlhbG9nVmFsdWVIZWxwKHBhcmFtZXRlciwgcGFyYW1ldGVyQ29udGV4dCl9XG5cdFx0XHRcdHZpc2libGU9e2NvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdHBhcmFtZXRlci5uYW1lID09PSBcIlJlc3VsdElzQWN0aXZlRW50aXR5XCIsXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocGFyYW1ldGVyLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17W2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWUsIFwiTGFiZWxcIl0pXX1cblx0XHRcdFx0YWRkaXRpb25hbFZhbHVlPXthZGRpdGlvbmFsVmFsdWV9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgdmFsdWVIZWxwICBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyQ29udGV4dCBUaGUgcGFyYW1ldGVyIGNvbnRleHRcblx0ICogQHJldHVybnMgQSB2YWx1ZUhlbHAgaWYgdGhlIHBhcmFtZXRlciBoYXMgYSBWSCwgdW5kZWZpbmVkIG90aGVyd2lzZVxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVQYXJhbWV0ZXJEaWFsb2dWYWx1ZUhlbHAocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIsIHBhcmFtZXRlckNvbnRleHQ6IENvbnRleHQpOiBWYWx1ZUhlbHAgfCB1bmRlZmluZWQge1xuXHRcdGlmICghaGFzVmFsdWVIZWxwKHBhcmFtZXRlcikpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8VmFsdWVIZWxwXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGhpcy5hY3Rpb25OYW1lLCBwYXJhbWV0ZXIubmFtZV0pfVxuXHRcdFx0XHRkZWxlZ2F0ZT17e1xuXHRcdFx0XHRcdG5hbWU6IFwic2FwL2ZlL21hY3Jvcy92YWx1ZWhlbHAvVmFsdWVIZWxwRGVsZWdhdGVcIixcblx0XHRcdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGg6IHRoaXMuYWN0aW9uLmlzQm91bmRcblx0XHRcdFx0XHRcdFx0PyBgJHtnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aChnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8QWN0aW9uUGFyYW1ldGVyPihwYXJhbWV0ZXJDb250ZXh0KSl9LyR7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFjdGlvbk5hbWVcblx0XHRcdFx0XHRcdFx0ICB9LyR7cGFyYW1ldGVyLm5hbWV9YFxuXHRcdFx0XHRcdFx0XHQ6IGAvJHt0aGlzLmFjdGlvbi5uYW1lLnN1YnN0cmluZyh0aGlzLmFjdGlvbi5uYW1lLmxhc3RJbmRleE9mKFwiLlwiKSArIDEpfS8ke3BhcmFtZXRlci5uYW1lfWAsXG5cdFx0XHRcdFx0XHRxdWFsaWZpZXJzOiB7fSxcblx0XHRcdFx0XHRcdHZhbHVlSGVscFF1YWxpZmllcjogXCJcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fX1cblx0XHRcdFx0dmFsaWRhdGVJbnB1dD17cmVxdWlyZXNWYWxpZGF0aW9uKHBhcmFtZXRlcil9XG5cdFx0XHRcdHR5cGVhaGVhZD17XG5cdFx0XHRcdFx0PFBvcG92ZXI+XG5cdFx0XHRcdFx0XHQ8TVRhYmxlXG5cdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGhpcy5hY3Rpb25OYW1lLCBwYXJhbWV0ZXIubmFtZSwgXCJQb3BvdmVyXCIsIFwicXVhbGlmaWVyXCJdKX1cblx0XHRcdFx0XHRcdFx0Y2FzZVNlbnNpdGl2ZT17XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hY3Rpb24uaXNCb3VuZFxuXHRcdFx0XHRcdFx0XHRcdFx0PyB1c2VDYXNlU2Vuc2l0aXZlRmlsdGVyUmVxdWVzdHMoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPEFjdGlvblBhcmFtZXRlcj4ocGFyYW1ldGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGNvbnZlcnRUeXBlcyh0aGlzLm1ldGFNb2RlbCkuZW50aXR5Q29udGFpbmVyLmFubm90YXRpb25zLkNhcGFiaWxpdGllc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Py5GaWx0ZXJGdW5jdGlvbnMgYXMgdW5rbm93biBhcyBzdHJpbmdbXSkgPz8gW11cblx0XHRcdFx0XHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiBNb2RlbEhlbHBlci5pc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUodGhpcy5tZXRhTW9kZWwpXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dXNlQXNWYWx1ZUhlbHA9eyEhcGFyYW1ldGVyLmFubm90YXRpb25zLkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L1BvcG92ZXI+XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGlhbG9nPXt0aGlzLmNyZWF0ZUZpZWxkVkhEaWFsb2cocGFyYW1ldGVyKX1cblx0XHRcdD48L1ZhbHVlSGVscD5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIFZhbHVlSGVscCBkaWFsb2cgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgQSBkaWFsb2cgaWYgdGhlIHBhcmFtZXRlciBoYXMgYSBWSCwgdW5kZWZpbmVkIG90aGVyd2lzZVxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVGaWVsZFZIRGlhbG9nKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogVkhEaWFsb2cgfCB1bmRlZmluZWQge1xuXHRcdGlmIChwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uPy5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM/LnZhbHVlT2YoKSAhPT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuIDxWSERpYWxvZyAvPjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgZmllbGQgY2hhbmdlIGV2ZW50IGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSB1aTUgZXZlbnRcblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFByb21pc2UuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGhhbmRsZUZpZWxkQ2hhbmdlKGV2ZW50OiBNdWx0aVZhbHVlRmllbGQkQ2hhbmdlRXZlbnQgfCBGaWVsZCRDaGFuZ2VFdmVudCwgcGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBmaWVsZFByb21pc2UgPSAoZXZlbnQgYXMgRmllbGQkQ2hhbmdlRXZlbnQpLmdldFBhcmFtZXRlcihcInByb21pc2VcIik7XG5cdFx0Y29uc3QgZmllbGQgPSAoZXZlbnQgYXMgRmllbGQkQ2hhbmdlRXZlbnQpLmdldFNvdXJjZSgpIGFzIEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkO1xuXHRcdGNvbnN0IHBhcmFtZXRlckluZm8gPSB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLmZpbmQoKGFjdGlvblBhcmFtZXRlckluZm8pID0+IGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQgPT09IGZpZWxkKTtcblx0XHRpZiAoIXBhcmFtZXRlckluZm8pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cGFyYW1ldGVySW5mby52YWxpZGF0aW9uUHJvbWlzZSA9IGZpZWxkUHJvbWlzZTtcblx0XHQvLyBmaWVsZCB2YWx1ZSBpcyBiZWluZyBjaGFuZ2VkLCB0aHVzIGV4aXN0aW5nIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGhhdCBmaWVsZCBhcmUgbm90IHZhbGlkIGFueW1vcmVcblx0XHR0aGlzLnJlbW92ZU1lc3NhZ2VzRm9yUGFyYW1ldGVyKHBhcmFtZXRlcik7XG5cdFx0dHJ5IHtcblx0XHRcdHBhcmFtZXRlckluZm8udmFsdWUgPSBhd2FpdCBmaWVsZFByb21pc2U7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMucGFyYW1ldGVyc1ZhbHVlc1twYXJhbWV0ZXJJbmZvLnBhcmFtZXRlci5uYW1lXSA9IHBhcmFtZXRlckluZm8udmFsdWU7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLmhhc0Vycm9yID0gZmFsc2U7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGRlbGV0ZSBwYXJhbWV0ZXJJbmZvLnZhbHVlO1xuXHRcdFx0cGFyYW1ldGVySW5mby5oYXNFcnJvciA9IHRydWU7XG5cdFx0XHRBY3Rpb25SdW50aW1lLl9hZGRNZXNzYWdlRm9yQWN0aW9uUGFyYW1ldGVyKFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm86IHBhcmFtZXRlckluZm8sXG5cdFx0XHRcdFx0bWVzc2FnZTogKGVycm9yIGFzIHsgbWVzc2FnZTogc3RyaW5nIH0pLm1lc3NhZ2Vcblx0XHRcdFx0fVxuXHRcdFx0XSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIEZpbGVVcGxvYWRlciBjaGFuZ2UgZXZlbnQgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIFNBUFVJNSBldmVudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBGaWxlVXBsb2FkZXIgY2hhbmdlIGV2ZW50LlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBoYW5kbGVGaWxlVXBsb2FkZXJDaGFuZ2UoZXZlbnQ6IEZpbGVVcGxvYWRlciRDaGFuZ2VFdmVudCwgcGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBmaWxlcyA9IGV2ZW50LmdldFBhcmFtZXRlcihcImZpbGVzXCIpO1xuXHRcdGNvbnN0IGZpbGVVcGxvYWRlciA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdC8vIGNvcnJlY3Rpb24gbmVlZGVkIGZvciBtdWx0aXBsZSBmaWxlIHVwbG9hZGVyc1xuXHRcdGNvbnN0IHBhcmFtZXRlckluZm8gPSB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLmZpbmQoKGFjdGlvblBhcmFtZXRlckluZm8pID0+IGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQgPT09IGZpbGVVcGxvYWRlcik7XG5cdFx0aWYgKCFwYXJhbWV0ZXJJbmZvIHx8ICFmaWxlcykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLnJlbW92ZU1lc3NhZ2VzRm9yUGFyYW1ldGVyKHBhcmFtZXRlcik7XG5cdFx0cGFyYW1ldGVySW5mby52YWx1ZSA9IHt9O1xuXHRcdGlmICh0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcikpIHtcblx0XHRcdHBhcmFtZXRlckluZm8udmFsdWVbdGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpPy5uYW1lIGFzIGtleW9mIHR5cGVvZiBwYXJhbWV0ZXJJbmZvLnZhbHVlXSA9XG5cdFx0XHRcdGF3YWl0IHRoaXMuZ2V0QmFzZTY0RmlsZShmaWxlcyk7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLnZhbHVlWyh0aGlzLmdldE1pbWVUeXBlUGF0aChwYXJhbWV0ZXIpIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxzdHJpbmc+KS5wYXRoXSA9XG5cdFx0XHRcdChmaWxlc1swXSBhcyBGaWxlKS50eXBlIHx8IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLnZhbHVlW3RoaXMuZ2V0RmlsZU5hbWVQYXRoKHBhcmFtZXRlcikgYXMgc3RyaW5nXSA9IChmaWxlc1swXSBhcyBGaWxlKS5uYW1lO1xuXHRcdFx0cGFyYW1ldGVySW5mby5oYXNFcnJvciA9IGZhbHNlO1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLnBhcmFtZXRlcnNWYWx1ZXNbcGFyYW1ldGVySW5mby5wYXJhbWV0ZXIubmFtZV0gPSBwYXJhbWV0ZXJJbmZvLnZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgcHJvcGVydHkgbmFtZSBmb3IgdGhlIGZpbGUgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIFN0cmVhbSBwcm9wZXJ0eSBpbiB0aGUgYWN0aW9uIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgYWN0aW9uIHBhcmFtZXRlci5cblx0ICogQHJldHVybnMgUGF0aCBhcyBhIHN0cmluZy5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmlsZU5hbWVQYXRoKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKT8uYW5ub3RhdGlvbnMuQ29yZT8uQ29udGVudERpc3Bvc2l0aW9uPy5GaWxlbmFtZSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPikucGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgcHJvcGVydHkgbmFtZSBmb3IgdGhlIE1pbWUgdHlwZSB3aXRoIHRoZSBhc3NvY2lhdGVkIFN0cmVhbSBwcm9wZXJ0eSBpbiB0aGUgYWN0aW9uIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgYWN0aW9uIHBhcmFtZXRlci5cblx0ICogQHJldHVybnMgVGhlIHBhdGggZXhwcmVzc2lvbi5cblx0ICovXG5cdHByaXZhdGUgZ2V0TWltZVR5cGVQYXRoKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpPy5hbm5vdGF0aW9ucy5Db3JlPy5NZWRpYVR5cGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBTdHJlYW0gcHJvcGVydHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBDb21wbGV4IHR5cGUgYWN0aW9uIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgYWN0aW9uIHBhcmFtZXRlci5cblx0ICogQHJldHVybnMgVGhlIEVkbS5TdHJlYW0gcHJvcGVydHkuXG5cdCAqL1xuXHRwcml2YXRlIGdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogUHJvcGVydHkgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiAocGFyYW1ldGVyLnR5cGVSZWZlcmVuY2UgYXMgQ29tcGxleFR5cGUpLnByb3BlcnRpZXM/LmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS50eXBlID09PSBcIkVkbS5TdHJlYW1cIik7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUuXG5cdCAqIEBwYXJhbSBmaWxlcyBUaGUgZmlsZSBzZWxlY3RlZC5cblx0ICogQHJldHVybnMgVGhlIGZpbGUgY29udGVudC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0QmFzZTY0RmlsZShmaWxlczogb2JqZWN0W10pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0Y29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblx0XHRcdHJlYWRlci5vbmxvYWQgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmICghcmVhZGVyLnJlc3VsdCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXNvbHZlKChyZWFkZXIucmVzdWx0IGFzIHN0cmluZykuc3BsaXQoXCIsXCIpWzFdKTtcblx0XHRcdH07XG5cdFx0XHRyZWFkZXIucmVhZEFzRGF0YVVSTCgoZmlsZXMgYXMgdW5rbm93biBhcyBGaWxlTGlzdCkuaXRlbSgwKSEpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgdGhlIG1lc3NhZ2VzIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqL1xuXHRwcml2YXRlIHJlbW92ZU1lc3NhZ2VzRm9yUGFyYW1ldGVyKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogdm9pZCB7XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IGNvbnRyb2xJZCA9IGdlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWVdKTtcblx0XHQvLyBhbHNvIHJlbW92ZSBtZXNzYWdlcyBhc3NpZ25lZCB0byBpbm5lciBjb250cm9scywgYnV0IGF2b2lkIHJlbW92aW5nIG1lc3NhZ2VzIGZvciBkaWZmZXJlbnQgcGFyYW1ldGVycyAod2l0aCBuYW1lIGJlaW5nIHN1YnN0cmluZyBvZiBhbm90aGVyIHBhcmFtZXRlciBuYW1lKVxuXHRcdGNvbnN0IHJlbGV2YW50TWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoKG1zZzogTWVzc2FnZSkgPT5cblx0XHRcdG1zZy5nZXRDb250cm9sSWRzKCkuc29tZSgoaWQ6IHN0cmluZykgPT4gY29udHJvbElkLnNwbGl0KFwiLVwiKS5pbmNsdWRlcyhpZCkpXG5cdFx0KTtcblx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMocmVsZXZhbnRNZXNzYWdlcyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgRm9ybUVsZW1lbnRzIGFsb25nIHdpdGggdGhlIGFycmF5IG9mIHBhcmFtZXRlcnMuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBUaGUgcGFyYW1ldGVyIGluZm9ybWF0aW9uIGFsb25nIHdpdGggdGhlIEZvcm1FbGVtZW50cy5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0Rm9ybUVsZW1lbnRzKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogUHJvbWlzZTxEaWFsb2dDb250ZW50VHlwZXM+IHtcblx0XHRjb25zdCBmb3JtRWxlbWVudHMgPSBhd2FpdCB0aGlzLmNyZWF0ZUZvcm1FbGVtZW50KHBhcmFtZXRlcik7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGZvcm1FbGVtZW50czogZm9ybUVsZW1lbnRzLFxuXHRcdFx0cGFyYW1ldGVyOiBwYXJhbWV0ZXJcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBUaGUgZGlhbG9nIG9yIHVuZGVmaW5lZC5cblx0ICovXG5cdGdldERpYWxvZygpOiBEaWFsb2cgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmRpYWxvZztcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIGRpYWxvZy5cblx0ICovXG5cdGFzeW5jIGNyZWF0ZURpYWxvZygpOiBQcm9taXNlPERpYWxvZz4ge1xuXHRcdGxldCBkaWFsb2dDb250ZW50czogRm9ybUVsZW1lbnRUeXBlW10gPSBbXTtcblx0XHRsZXQgZGlhbG9nQ29udGVudHNXaXRoUGFyYW1ldGVyczogRGlhbG9nQ29udGVudFR5cGVzW10gPSBbXTtcblx0XHRjb25zdCBhY3Rpb25QYXJhbWV0ZXJzID0gdGhpcy5hY3Rpb24uaXNCb3VuZCA/IHRoaXMuYWN0aW9uLnBhcmFtZXRlcnMuc2xpY2UoMSkgOiB0aGlzLmFjdGlvbi5wYXJhbWV0ZXJzO1xuXG5cdFx0Ly8gSWYgT3BlcmF0aW9uYWxQYXJhbWV0ZXJGYWNldHMgaGF2ZSBiZWVuIGRlZmluZWQgZm9yIHRoaXMgYWN0aW9uLCB0aGV5IGFyZSB1c2VkIHRvIGdyb3VwIHRoZSBhY3Rpb24gcGFyYW1ldGVyc1xuXHRcdC8vIHdpdGggdGl0bGVzXG5cdFx0aWYgKHRoaXMuYWN0aW9uLmFubm90YXRpb25zPy5VST8uT3BlcmF0aW9uUGFyYW1ldGVyRmFjZXRzKSB7XG5cdFx0XHRjb25zdCBhY3Rpb25QYXJhbWV0ZXJHcm91cHM6IEVsZW1lbnRHcm91cFtdID0gW107XG5cdFx0XHR0aGlzLmFjdGlvbi5hbm5vdGF0aW9ucy5VST8uT3BlcmF0aW9uUGFyYW1ldGVyRmFjZXRzPy5mb3JFYWNoKGZ1bmN0aW9uIChmYWNldDogUmVmZXJlbmNlRmFjZXQpIHtcblx0XHRcdFx0bGV0IGZhY2V0VGl0bGU7XG5cdFx0XHRcdGlmIChmYWNldC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQpIHtcblx0XHRcdFx0XHRmYWNldFRpdGxlID0gZmFjZXQuTGFiZWw7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGhhc0ZpZWxkR3JvdXBUYXJnZXQoZmFjZXQpKSB7XG5cdFx0XHRcdFx0Y29uc3QgZmllbGRHcm91cCA9IGZhY2V0Py5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cFR5cGU7XG5cdFx0XHRcdFx0Y29uc3QgZ3JvdXBlZEFjdGlvblBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcltdID0gW107XG5cblx0XHRcdFx0XHRmaWVsZEdyb3VwLkRhdGEuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXA6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdGdyb3VwZWRBY3Rpb25QYXJhbWV0ZXJzLnB1c2goKGdyb3VwIGFzIERhdGFGaWVsZCkuVmFsdWUuJHRhcmdldCBhcyBBY3Rpb25QYXJhbWV0ZXIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckdyb3Vwcy5wdXNoKHtcblx0XHRcdFx0XHRcdGZhY2V0VGl0bGU6IGZhY2V0VGl0bGUgYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8c3RyaW5nPiB8IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdGRhdGE6IGdyb3VwZWRBY3Rpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBHZXQgdGhlIGZpZWxkcyBmb3IgZWFjaCBwYXJhbWV0ZXIgZ3JvdXBcblx0XHRcdGNvbnN0IGdldEdyb3VwRm9ybSA9IGFzeW5jIChncm91cDogRWxlbWVudEdyb3VwKTogUHJvbWlzZTxFbGVtZW50R3JvdXBDb252ZXJ0ZWQ+ID0+IHtcblx0XHRcdFx0Y29uc3QgZm9ybUVsZW1lbnRzID0gYXdhaXQgUHJvbWlzZS5hbGwoZ3JvdXAuZGF0YS5tYXAodGhpcy5nZXRGb3JtRWxlbWVudHMuYmluZCh0aGlzKSkpO1xuXHRcdFx0XHRyZXR1cm4geyBmYWNldFRpdGxlOiBncm91cC5mYWNldFRpdGxlLCBkYXRhOiBmb3JtRWxlbWVudHMgfTtcblx0XHRcdH07XG5cblx0XHRcdGNvbnN0IGZvcm1EYXRhID0gYWN0aW9uUGFyYW1ldGVyR3JvdXBzLm1hcChhc3luYyAocGFyYW1ldGVyR3JvdXApID0+IGdldEdyb3VwRm9ybShwYXJhbWV0ZXJHcm91cCkpO1xuXHRcdFx0Y29uc3Qgb3BGYWNldHMgPSBhd2FpdCBQcm9taXNlLmFsbChmb3JtRGF0YSk7XG5cblx0XHRcdC8vIEFkZCB0aGUgdGl0bGUgY29udHJvbCB0byBlYWNoIHBhcmFtZXRlciBncm91cFxuXHRcdFx0b3BGYWNldHMuZm9yRWFjaCgoZGlhbG9nQ29udGVudCkgPT4ge1xuXHRcdFx0XHRkaWFsb2dDb250ZW50cy5wdXNoKDxUaXRsZSB0ZXh0PXtkaWFsb2dDb250ZW50LmZhY2V0VGl0bGV9IC8+KTtcblx0XHRcdFx0cmV0dXJuIGRpYWxvZ0NvbnRlbnQuZGF0YS5tYXAoKGVsZW1lbnQpID0+IGRpYWxvZ0NvbnRlbnRzLnB1c2goZWxlbWVudC5mb3JtRWxlbWVudHMpKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRvcEZhY2V0cy5mb3JFYWNoKGZ1bmN0aW9uIChvcEZhY2V0KSB7XG5cdFx0XHRcdG9wRmFjZXQuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0XHRcdFx0ZGlhbG9nQ29udGVudHNXaXRoUGFyYW1ldGVycy5wdXNoKGVsZW1lbnQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBObyBPcGVyYXRpb25QYXJhbWV0ZXJGYWNldHMgaGF2ZSBiZWVuIGRlZmluZWRcblx0XHRcdGRpYWxvZ0NvbnRlbnRzV2l0aFBhcmFtZXRlcnMgPSBhd2FpdCBQcm9taXNlLmFsbChhY3Rpb25QYXJhbWV0ZXJzLm1hcCh0aGlzLmdldEZvcm1FbGVtZW50cy5iaW5kKHRoaXMpKSk7XG5cdFx0XHRkaWFsb2dDb250ZW50cyA9IGRpYWxvZ0NvbnRlbnRzV2l0aFBhcmFtZXRlcnMubWFwKChkaWFsb2dDb250ZW50KSA9PiB7XG5cdFx0XHRcdHJldHVybiBkaWFsb2dDb250ZW50LmZvcm1FbGVtZW50cztcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHRoaXMucmVnaXN0ZXJBY3Rpb25QYXJhbWV0ZXJJbmZvKGRpYWxvZ0NvbnRlbnRzV2l0aFBhcmFtZXRlcnMpO1xuXG5cdFx0Ly8gSW4gY2FzZSBvZiBkZWZlcnJlZCBjcmVhdGUgd2UgaGF2ZSBubyB2aWV3LCBzbyB3ZSBuZWVkIHRvIGdldCB0aGUgcmVzb3VyY2UgbW9kZWwgZnJvbSB0aGUgYXBwIGNvbXBvbmVudFxuXG5cdFx0Y29uc3QgbWVzc2FnZVN0cmlwID0gdGhpcy5nZXRDdXN0b21BY3Rpb25NZXNzYWdlU3RyaXBUZXh0KCk7XG5cblx0XHRjb25zdCBlbmRCdXR0b24gPSAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbXCJmZVwiLCBcIkFQRF9cIiwgdGhpcy5hY3Rpb25OYW1lLCBcIkFjdGlvblwiLCBcIkNhbmNlbFwiXSl9XG5cdFx0XHRcdHRleHQ9e3RoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfQ0FOQ0VMXCIpfVxuXHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHRoaXMub25DYW5jZWwuYmluZCh0aGlzKSgpO1xuXHRcdFx0XHR9fVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdGNvbnN0IGRpYWxvZyA9IChcblx0XHRcdDxEaWFsb2dcblx0XHRcdFx0dGl0bGU9e3RoaXMuZ2V0VGl0bGVUZXh0KHRoaXMucGFyYW1ldGVycy5sYWJlbCl9XG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbXCJmZVwiLCBcIkFQRF9cIiwgdGhpcy5hY3Rpb25OYW1lXSl9XG5cdFx0XHRcdGVzY2FwZUhhbmRsZXI9e3RoaXMub25DYW5jZWwuYmluZCh0aGlzKX1cblx0XHRcdFx0ZHJhZ2dhYmxlPXt0cnVlfVxuXHRcdFx0XHRyZXNpemFibGU9e3RydWV9XG5cdFx0XHRcdGFmdGVyQ2xvc2U9e3RoaXMuYWZ0ZXJDbG9zZS5iaW5kKHRoaXMpfVxuXHRcdFx0XHRiZWZvcmVPcGVuPXt0aGlzLmJlZm9yZU9wZW4uYmluZCh0aGlzKX1cblx0XHRcdFx0YWZ0ZXJPcGVuPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5hZnRlck9wZW4oKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0aW5pdGlhbEZvY3VzPXtlbmRCdXR0b259IC8vIFRoZSBpbml0aWFsIGZvY3VzIGlzIHNldCBwcm9ncmFtbWF0aWNhbGx5IGluIGFmdGVyT3BlbiwgdG8gYXZvaWQgb3BlbmluZyB0aGUgVkggZGlhbG9nXG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0YmVnaW5CdXR0b246IChcblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcImZlXCIsIFwiQVBEX1wiLCB0aGlzLmFjdGlvbk5hbWUsIFwiQWN0aW9uXCIsIFwiT2tcIl0pfVxuXHRcdFx0XHRcdFx0XHR0ZXh0PXtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuaXNDcmVhdGVBY3Rpb24gPT09IHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9TQVBGRV9BQ1RJT05fQ1JFQVRFX0JVVFRPTl9DT05USU5VRVwiKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmdldEJlZ2luQnV0dG9uTGFiZWwodGhpcy5wYXJhbWV0ZXJzLmxhYmVsKVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbkFwcGx5LmJpbmQodGhpcykoKTtcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0dHlwZT1cIkVtcGhhc2l6ZWRcIlxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGVuZEJ1dHRvbjogZW5kQnV0dG9uLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHRcdFx0XHRcdC8vIEB0cy1pZ25vcmUgKHVua25vd24gcHJvcGVydHkgYmluZGluZylcblx0XHRcdFx0XHRcdC8vIGNvbHVtbnNNIG9ubHkgdGFrZXMgZWZmZWN0IGlmIHRoZXJlIGFyZSB0aXRsZXMgaW4gdGhlIGNvbnRlbnQuXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHR7bWVzc2FnZVN0cmlwICYmIDxNZXNzYWdlU3RyaXAgc2hvd0ljb249XCJ0cnVlXCIgdGV4dD17bWVzc2FnZVN0cmlwfT48L01lc3NhZ2VTdHJpcD59XG5cdFx0XHRcdFx0XHRcdDxTaW1wbGVGb3JtIGNvbHVtbnNNPXtcIjJcIn0gZWRpdGFibGU9XCJ0cnVlXCIgbGFiZWxTcGFuTD17XCIxMlwifSBsYWJlbFNwYW5NPXtcIjEyXCJ9IGJpbmRpbmc9e1wiJFBhcmFtZXRlclwifT5cblx0XHRcdFx0XHRcdFx0XHR7eyBjb250ZW50OiBkaWFsb2dDb250ZW50cyB9fVxuXHRcdFx0XHRcdFx0XHQ8L1NpbXBsZUZvcm0+XG5cdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0RpYWxvZz5cblx0XHQpO1xuXHRcdHRoaXMuZGlhbG9nID0gZGlhbG9nO1xuXHRcdHJldHVybiBkaWFsb2c7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbGFiZWwgZm9yIHRoZSBiZWdpbiBidXR0b24gb2YgdGhlIGRpYWxvZy5cblx0ICogQHBhcmFtIGFjdGlvbkxhYmVsIFRoZSBsYWJlbCBvZiB0aGUgYWN0aW9uXG5cdCAqIEByZXR1cm5zIFRoZSBsYWJlbC5cblx0ICovXG5cdHByaXZhdGUgZ2V0QmVnaW5CdXR0b25MYWJlbChhY3Rpb25MYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0XHRjb25zdCBrZXkgPSBcIkFDVElPTl9QQVJBTUVURVJfRElBTE9HX0FDVElPTl9OQU1FXCI7XG5cdFx0Y29uc3QgZGVmYXVsdEtleSA9IFwiQ19DT01NT05fRElBTE9HX09LXCI7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0T3ZlcnJpZGRlblRleHQoa2V5LCBkZWZhdWx0S2V5LCBhY3Rpb25MYWJlbCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdGl0bGUgb2YgdGhlIGRpYWxvZy5cblx0ICogQHBhcmFtIGFjdGlvbkxhYmVsIFRoZSBsYWJlbCBvZiB0aGUgYWN0aW9uXG5cdCAqIEByZXR1cm5zIFRoZSB0aXRsZS5cblx0ICovXG5cdHByaXZhdGUgZ2V0VGl0bGVUZXh0KGFjdGlvbkxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGtleSA9IFwiQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfQUNUSU9OX1RJVExFXCI7XG5cdFx0Y29uc3QgZGVmYXVsdEtleSA9IFwiQ19PUEVSQVRJT05TX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX1RJVExFXCI7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0T3ZlcnJpZGRlblRleHQoa2V5LCBkZWZhdWx0S2V5LCBhY3Rpb25MYWJlbCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBhbiBvdmVycmlkZGVuIHRleHQgZm9yIG1lc3NhZ2Ugc3RyaXAuXG5cdCAqIEByZXR1cm5zIFRoZSBvdmVycmlkZGVuIHRleHQgZm9yIG1lc3NhZ2Ugc3RyaXAuXG5cdCAqL1xuXHRwcml2YXRlIGdldEN1c3RvbUFjdGlvbk1lc3NhZ2VTdHJpcFRleHQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBrZXkgPSBcIkFDVElPTl9QQVJBTUVURVJfRElBTE9HX01FU1NBR0VfVEVYVFwiO1xuXHRcdGxldCBib3VuZEFjdGlvbk5hbWUgPSB0aGlzLmFjdGlvbk5hbWU7XG5cdFx0Ym91bmRBY3Rpb25OYW1lID0gYm91bmRBY3Rpb25OYW1lLnNwbGl0KFwiLlwiKS5wb3AoKSA/PyBib3VuZEFjdGlvbk5hbWU7XG5cdFx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBib3VuZEFjdGlvbk5hbWUgJiYgdGhpcy5lbnRpdHlTZXROYW1lID8gYCR7dGhpcy5lbnRpdHlTZXROYW1lfXwke2JvdW5kQWN0aW9uTmFtZX1gIDogXCJcIjtcblx0XHRpZiAodGhpcy5yZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtrZXl9fCR7c3VmZml4UmVzb3VyY2VLZXl9YCkpIHtcblx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXksIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtrZXl9fCR7dGhpcy5lbnRpdHlTZXROYW1lfWApKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoa2V5LCB1bmRlZmluZWQsIGAke3RoaXMuZW50aXR5U2V0TmFtZX1gKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7a2V5fWApKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoa2V5KTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGFuIG92ZXJyaWRkZW4gdGV4dC5cblx0ICogQHBhcmFtIGtleSBUaGUga2V5IGZvciBhbiBvdmVycmlkZGVuIHRleHRcblx0ICogQHBhcmFtIGRlZmF1bHRLZXkgVGhlIGRlZmF1bHQga2V5IGZvciB0aGUgdGV4dFxuXHQgKiBAcGFyYW0gYWN0aW9uTGFiZWwgVGhlIGxhYmVsIG9mIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgVGhlIG92ZXJyaWRkZW4gdGV4dCBvciBsYWJlbC5cblx0ICovXG5cdHByaXZhdGUgZ2V0T3ZlcnJpZGRlblRleHQoa2V5OiBzdHJpbmcsIGRlZmF1bHRLZXk6IHN0cmluZywgYWN0aW9uTGFiZWw/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGxldCBib3VuZEFjdGlvbk5hbWUgPSB0aGlzLmFjdGlvbk5hbWU7XG5cdFx0Ym91bmRBY3Rpb25OYW1lID0gYm91bmRBY3Rpb25OYW1lLnNwbGl0KFwiLlwiKS5wb3AoKSA/PyBib3VuZEFjdGlvbk5hbWU7XG5cdFx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBib3VuZEFjdGlvbk5hbWUgJiYgdGhpcy5lbnRpdHlTZXROYW1lID8gYCR7dGhpcy5lbnRpdHlTZXROYW1lfXwke2JvdW5kQWN0aW9uTmFtZX1gIDogXCJcIjtcblx0XHRpZiAoYWN0aW9uTGFiZWwpIHtcblx0XHRcdGlmICh0aGlzLnJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke2tleX18JHtzdWZmaXhSZXNvdXJjZUtleX1gKSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoa2V5LCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtrZXl9fCR7dGhpcy5lbnRpdHlTZXROYW1lfWApKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXksIHVuZGVmaW5lZCwgYCR7dGhpcy5lbnRpdHlTZXROYW1lfWApO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke2tleX1gKSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoa2V5KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBhY3Rpb25MYWJlbDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGRlZmF1bHRLZXkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSBwcmVzcyBldmVudCBvZiB0aGUgYmVnaW4gYnV0dG9uIG9mIHRoZSBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBvbkFwcGx5KCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIHByZXZlbnQgbXVsdGlwbGUgcHJlc3MgZXZlbnRzLiBUaGUgQnVzeUxvY2tlciBpcyBub3QgZmFzdCBlbm91Z2guIChCQ1A6IDIzNzAxMzAyMTApXG5cdFx0aWYgKHRoaXMuYnV0dG9uTG9jayB8fCAhdGhpcy5kaWFsb2cpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgZGlhbG9nID0gdGhpcy5kaWFsb2c7XG5cblx0XHRjb25zdCBwYXJhbWV0ZXJDb250ZXh0ID0gKGRpYWxvZy5nZXRPYmplY3RCaW5kaW5nKCkgYXMgT0RhdGFDb250ZXh0QmluZGluZyB8IHVuZGVmaW5lZCk/LmdldFBhcmFtZXRlckNvbnRleHQoKTtcblxuXHRcdC8vIGxvY2sgdGhlIGJ1dHRvbiB0byBwcmV2ZW50IG11bHRpcGxlIHByZXNzIGV2ZW50c1xuXHRcdHRoaXMuYnV0dG9uTG9jayA9IHRydWU7XG5cdFx0QnVzeUxvY2tlci5sb2NrKGRpYWxvZyk7XG5cblx0XHQvLyB2YWxpZGF0ZSB0aGUgYWN0aW9uIHBhcmFtZXRlcnMuIEl0IGlzIGltcG9ydGFudCB0byBkbyB0aGlzIGFzIGEgZmlyc3Qgb3BlcmF0aW9uIGFzIHRoZXJlIGlzIGFcblx0XHQvLyB3YWl0IGRvbmUgZm9yIHRoZSB2YWx1ZSBjaGFuZ2VzIHRvIGNvbXBsZXRlIHVwZGF0aW5nIHRoZSBtb2RlbC4gRXZlbiBpbiBjYXNlcyB3aGVyZSB2YWxpZGF0aW9uIGlzXG5cdFx0Ly8gbm90IGNvbmZpZ3VyZWQgdGhpcyBwcm9taXNlIG5lZWRzIHRvIGJlIHJlc29sdmVkIHRvIHJlYWQgZnJvbSB0aGUgbW9kZWwgdG8gcmV0dXJuIHVzZXIgZW50ZXJlZCB2YWx1ZXMuXG5cdFx0aWYgKCEoYXdhaXQgQWN0aW9uUnVudGltZS52YWxpZGF0ZVByb3BlcnRpZXModGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcywgdGhpcy5yZXNvdXJjZU1vZGVsKSkpIHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKGRpYWxvZyk7XG5cdFx0XHR0aGlzLmJ1dHRvbkxvY2sgPSBmYWxzZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBuZXdWYWx1ZXNEaWN0aW9uYXJ5ID0gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0Li4udGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcy5tYXAoKGFjdGlvblBhcmFtZXRlckluZm9zKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlciA9IGFjdGlvblBhcmFtZXRlckluZm9zLnBhcmFtZXRlcjtcblx0XHRcdFx0bGV0IHZhbHVlO1xuXHRcdFx0XHRpZiAocGFyYW1ldGVyLmlzQ29sbGVjdGlvbikge1xuXHRcdFx0XHRcdHZhbHVlID0gT2JqZWN0LnZhbHVlcygoZGlhbG9nLmdldE1vZGVsKFwibXZmdmlld1wiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KGAvJHtwYXJhbWV0ZXIubmFtZX1gKSA/PyB7fSkubWFwKFxuXHRcdFx0XHRcdFx0KHBhcmFtVmFsdWUpID0+IChwYXJhbVZhbHVlIGFzIHsgS2V5PzogUHJpbWl0aXZlVHlwZSB9KT8uS2V5XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIGlmICghcGFyYW1ldGVyLnR5cGUuc3RhcnRzV2l0aChcIkVkbS5cIikgJiYgdGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpKSB7XG5cdFx0XHRcdFx0Ly8gRmlsZSBVcGxvYWRlclxuXHRcdFx0XHRcdHZhbHVlID0gYWN0aW9uUGFyYW1ldGVySW5mb3MudmFsdWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBwYXJhbWV0ZXJDb250ZXh0Py5nZXRQcm9wZXJ0eShwYXJhbWV0ZXIubmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHsgW3BhcmFtZXRlci5uYW1lXTogdmFsdWUgfTtcblx0XHRcdH0pXG5cdFx0KSBhcyBSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPjtcblx0XHRjb25zdCBpc05ld1ZhbHVlID0gT2JqZWN0LnZhbHVlcyhuZXdWYWx1ZXNEaWN0aW9uYXJ5KS5zb21lKCh2YWx1ZSkgPT4gISF2YWx1ZSk7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlKG5ld1ZhbHVlc0RpY3Rpb25hcnkpO1xuXG5cdFx0dGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudC5nZXRNb2RlbChcInVpXCIpLnNldFByb3BlcnR5KFVpTW9kZWxDb25zdGFudHMuRG9jdW1lbnRNb2RpZmllZCwgaXNOZXdWYWx1ZSk7XG5cdFx0Ly8gRHVlIHRvIHVzaW5nIHRoZSBzZWFyY2ggYW5kIHZhbHVlIGhlbHBzIG9uIHRoZSBhY3Rpb24gZGlhbG9nIHRyYW5zaWVudCBtZXNzYWdlcyBjb3VsZCBhcHBlYXJcblx0XHQvLyB3ZSBuZWVkIGFuIFVYIGRlc2lnbiBmb3IgdGhvc2UgdG8gc2hvdyB0aGVtIHRvIHRoZSB1c2VyIC0gZm9yIG5vdyByZW1vdmUgdGhlbSBiZWZvcmUgY29udGludWluZ1xuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVzZXQgdGhlIHN0YXRlIG9mIHRoZSBkaWFsb2cgdG8gc3RhcnQgYSBuZXcgaXRlcmF0aW9uLlxuXHQgKlxuXHQgKi9cblx0cHVibGljIHJlc2V0U3RhdGUoKTogdm9pZCB7XG5cdFx0dGhpcy51bmxvY2tEaWFsb2coKTtcblx0XHR0aGlzLmJ1dHRvbkxvY2sgPSBmYWxzZTtcblx0XHR0aGlzLnVwZGF0ZURpYWxvZ0JpbmRpbmdDb250ZXh0Rm9yRXJyb3IoKTtcblx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzVmFsdWVzUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhbmdlIHRoZSBiaW5kaW5nIGNvbnRleHQgb2YgdGhlIGRpYWxvZyB0byBvbmUgd2l0aCBwcmlvcml0eSBtZXNzYWdlLlxuXHQgKlxuXHQgKiBPbiBpbml0aWFsIGFjdGlvbiBleGVjdXRpb24sIHdlIG1pZ2h0IGhhdmUgYm91bmQgbWVzc2FnZXMgd2l0aCBhbnkgc2VsZWN0ZWQgY29udGV4dHMgYXMgdGFyZ2V0IGFwYXJ0IGZyb20gdGhlIGRpYWxvZydzIGluaXRpYWwgY29udGV4dC5cblx0ICogV2UgY2hhbmdlIHRoZSBiaW5kaW5nIGNvbnRleHQgb2YgZGlhbG9nIGZvciB0aGUgcGFyYW1ldGVyIGZpZWxkcycgdG8gZ2V0IHRoZSB2YWxpZCB2YWx1ZSBzdGF0ZSBmcm9tIHRoZSBwcmlvcml0eSBib3VuZCBtZXNzYWdlLlxuXHQgKi9cblx0dXBkYXRlRGlhbG9nQmluZGluZ0NvbnRleHRGb3JFcnJvcigpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA8IDIpIHtcblx0XHRcdC8vIFdlIHdvdWxkIG5lZWQgdG8gc3dpdGNoIHRoZSBiaW5kaW5nIGNvbnRleHQgb2YgdGhlIGRpYWxvZyBvbmx5IHdoZW4gd2UgaGF2ZSBtdWx0aXBsZSBjb250ZXh0cyBmb3IgZXhlY3V0aW5nIHRoZSBhY3Rpb24uXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IHdhcm5pbmdDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCwgaW5mb0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGVycm9uZW91c0N0eCA9IHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5maW5kKChjb250ZXh0KSA9PiB7XG5cdFx0XHRjb25zdCBtZXNzYWdlcyA9IGNvbnRleHQuZ2V0TWVzc2FnZXMoKTtcblx0XHRcdHJldHVybiBtZXNzYWdlcy5zb21lKChtc2cpID0+IHtcblx0XHRcdFx0Ly8gV2UgaG9sZCBmaXJzdCBjb250ZXh0IHdpdGggd2FybmluZyBvciBpbmZvIG1lc3NhZ2VzLlxuXHRcdFx0XHR3YXJuaW5nQ29udGV4dCA9ICF3YXJuaW5nQ29udGV4dCAmJiBtc2cuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5XYXJuaW5nID8gY29udGV4dCA6IHVuZGVmaW5lZDtcblx0XHRcdFx0aW5mb0NvbnRleHQgPSAhaW5mb0NvbnRleHQgJiYgbXNnLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuSW5mb3JtYXRpb24gPyBjb250ZXh0IDogdW5kZWZpbmVkO1xuXHRcdFx0XHQvLyBFcnJvciBpcyBmb3VuZCEhISBXZSBzaGFsbCBleGl0LlxuXHRcdFx0XHRyZXR1cm4gbXNnLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRjb25zdCBjb250ZXh0VG9Vc2UgPSBlcnJvbmVvdXNDdHggPz8gd2FybmluZ0NvbnRleHQgPz8gaW5mb0NvbnRleHQ7XG5cblx0XHRpZiAoY29udGV4dFRvVXNlKSB7XG5cdFx0XHR0aGlzLmRpYWxvZz8uc2V0QmluZGluZ0NvbnRleHQoY29udGV4dFRvVXNlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgYnVzeSBzdGF0ZSBvZiB0aGUgZGlhbG9nLlxuXHQgKi9cblx0cHJpdmF0ZSB1bmxvY2tEaWFsb2coKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZGlhbG9nICYmIEJ1c3lMb2NrZXIuaXNMb2NrZWQodGhpcy5kaWFsb2cpKSB7XG5cdFx0XHRCdXN5TG9ja2VyLnVubG9jayh0aGlzLmRpYWxvZyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgZm9yIHRoZSBjYW5jZWwgYWN0aW9uIG9mIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRwcml2YXRlIG9uQ2FuY2VsKCk6IHZvaWQge1xuXHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1JlamVjdChGRUxpYnJhcnkuQ29uc3RhbnRzLkNhbmNlbEFjdGlvbkRpYWxvZyk7XG5cdFx0dGhpcy5jbG9zZURpYWxvZygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgZGlhbG9nLlxuXHQgKi9cblx0cHVibGljIGNsb3NlRGlhbG9nKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmRpYWxvZykge1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25QYXJhbWV0ZXJEaWFsb2dDbG9zZWQ/LigpO1xuXHRcdFx0dGhpcy5kaWFsb2cuY2xvc2UoKTtcblx0XHR9XG5cdFx0dGhpcy5pc0RpYWxvZ09wZW4gPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgYWN0aW9uIHJlc3VsdC5cblx0ICovXG5cdGFzeW5jIG9wZW5EaWFsb2coKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCF0aGlzLmRpYWxvZykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiRXJyb3Igb24gb3BlbmluZyB0aGUgZGlhbG9nXCIpO1xuXHRcdH1cblx0XHRhd2FpdCBDb21tb25VdGlscy5zZXRVc2VyRGVmYXVsdHMoXG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LFxuXHRcdFx0dGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcy5tYXAoKGFjdGlvblBhcmFtZXRlckluZm8pID0+IGFjdGlvblBhcmFtZXRlckluZm8ucGFyYW1ldGVyKSxcblx0XHRcdHRoaXMucGFyYW1ldGVyTW9kZWwsXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0XHR0aGlzLnNldE1vZGVscyh0aGlzLmRpYWxvZyk7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLnZpZXc/LmFkZERlcGVuZGVudCh0aGlzLmRpYWxvZyk7XG5cdFx0YXdhaXQgdGhpcy5zZXRPcGVyYXRpb25EZWZhdWx0VmFsdWVzKHRoaXMuZGlhbG9nKTtcblx0XHR0aGlzLmRpYWxvZy5vcGVuKCk7XG5cdFx0dGhpcy5pc0RpYWxvZ09wZW4gPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIG1vZGVsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBkaWFsb2cgVGhlIG93bmVyIG9mIHRoZSBkaWFsb2dcblx0ICovXG5cdHByaXZhdGUgc2V0TW9kZWxzKGRpYWxvZzogRGlhbG9nKTogdm9pZCB7XG5cdFx0ZGlhbG9nLnNldE1vZGVsKHRoaXMucGFyYW1ldGVyTW9kZWwsIFwicGFyYW1zTW9kZWxcIik7XG5cdFx0ZGlhbG9nLmJpbmRFbGVtZW50KHtcblx0XHRcdHBhdGg6IFwiL1wiLFxuXHRcdFx0bW9kZWw6IFwicGFyYW1zTW9kZWxcIlxuXHRcdH0pO1xuXHRcdGRpYWxvZy5zZXRNb2RlbCh0aGlzLnBhcmFtZXRlcnMubW9kZWwpO1xuXHRcdGRpYWxvZy5iaW5kRWxlbWVudCh7XG5cdFx0XHRwYXRoOiBgJHt0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID8gXCJcIiA6IFwiL1wifSR7dGhpcy5hY3Rpb25OYW1lfSguLi4pYFxuXHRcdH0pO1xuXG5cdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdGRpYWxvZy5zZXRCaW5kaW5nQ29udGV4dCh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHNbMF0pOyAvLyB1c2UgY29udGV4dCBvZiBmaXJzdCBzZWxlY3RlZCBsaW5lIGl0ZW1cblx0XHR9XG5cdFx0Ly8gZW1wdHkgbW9kZWwgdG8gYWRkIGVsZW1lbnRzIGR5bmFtaWNhbGx5IGRlcGVuZGluZyBvbiBudW1iZXIgb2YgTVZGIGZpZWxkcyBkZWZpbmVkIG9uIHRoZSBkaWFsb2dcblx0XHRkaWFsb2cuc2V0TW9kZWwobmV3IEpTT05Nb2RlbCh7fSksIFwibXZmdmlld1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBtZXNzYWdlcyBiZWZvcmUgb3BlbmluZyB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gX2V2ZW50XG5cdCAqL1xuXHRwcml2YXRlIGJlZm9yZU9wZW4oX2V2ZW50OiBEaWFsb2ckQmVmb3JlT3BlbkV2ZW50KTogdm9pZCB7XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXYWl0IGZvciB0aGUgcGFyYW1ldGVyIHZhbHVlcyB0byBiZSBzZXQuXG5cdCAqIEByZXR1cm5zIFByb21pc2UgY29udGFpbmluZyB0aGUgcGFyYW1ldGVyIHZhbHVlcy5cblx0ICovXG5cdHB1YmxpYyBhc3luYyB3YWl0Rm9yUGFyYW1ldGVyc1ZhbHVlcygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+PiB7XG5cdFx0cmV0dXJuIHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Byb21pc2U7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyBpZiB0aGUgZGlhbG9nIGlzIG9wZW5lZC5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZGlhbG9nIGlzIG9wZW5lZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0cHVibGljIGlzT3BlbigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5pc0RpYWxvZ09wZW47XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIGJpbmRpbmdQYXJhbWV0ZXIgVGhlIGJpbmRpbmcgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBkaWFsb2cgVGhlIGRpYWxvZ1xuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgZGVmYXVsdCB2YWx1ZXMuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZShcblx0XHRwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcixcblx0XHRiaW5kaW5nUGFyYW1ldGVyOiBzdHJpbmcsXG5cdFx0ZGlhbG9nOiBEaWFsb2dcblx0KTogUHJvbWlzZTxQYXJhbWV0ZXJEZWZhdWx0VmFsdWU+IHtcblx0XHRjb25zdCBvcGVyYXRpb25CaW5kaW5nID0gZGlhbG9nLmdldE9iamVjdEJpbmRpbmcoKSBhcyBPRGF0YUNvbnRleHRCaW5kaW5nO1xuXHRcdGNvbnN0IHBhcmFtZXRlck1vZGVsRGF0YSA9IHRoaXMucGFyYW1ldGVyTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IHBhcmFtTmFtZSA9IHBhcmFtZXRlci5uYW1lO1xuXHRcdGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHBhcmFtZXRlci5hbm5vdGF0aW9ucy5VST8uUGFyYW1ldGVyRGVmYXVsdFZhbHVlO1xuXHRcdC8vIENhc2UgMTogVGhlcmUgaXMgYSBQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgYW5ub3RhdGlvblxuXHRcdGlmIChkZWZhdWx0VmFsdWUpIHtcblx0XHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID4gMCAmJiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihkZWZhdWx0VmFsdWUpKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgcGF0aEZvckNvbnRleHQ6IHN0cmluZyA9XG5cdFx0XHRcdFx0XHRiaW5kaW5nUGFyYW1ldGVyICYmIGRlZmF1bHRWYWx1ZS5wYXRoLnN0YXJ0c1dpdGgoYCR7YmluZGluZ1BhcmFtZXRlcn0vYClcblx0XHRcdFx0XHRcdFx0PyBkZWZhdWx0VmFsdWUucGF0aC5yZXBsYWNlKGAke2JpbmRpbmdQYXJhbWV0ZXJ9L2AsIFwiXCIpXG5cdFx0XHRcdFx0XHRcdDogZGVmYXVsdFZhbHVlLnBhdGg7XG5cdFx0XHRcdFx0bGV0IHBhcmFtVmFsdWUgPSBhd2FpdCBDb21tb25VdGlscy5yZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkoZGVmYXVsdFZhbHVlLnBhdGgsIG9wZXJhdGlvbkJpbmRpbmcuZ2V0TW9kZWwoKSk7XG5cdFx0XHRcdFx0aWYgKHBhcmFtVmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdHBhcmFtVmFsdWUgPSBhd2FpdCBvcGVyYXRpb25CaW5kaW5nLmdldFBhcmFtZXRlckNvbnRleHQoKS5yZXF1ZXN0UHJvcGVydHkoZGVmYXVsdFZhbHVlLnBhdGgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdC8vIEZvciBtdWx0aSBzZWxlY3QsIG5lZWQgdG8gbG9vcCBvdmVyIGNvbnRleHRzIChhcyBjb250ZXh0cyBjYW5ub3QgYmUgcmV0cmlldmVkIHZpYSBiaW5kaW5nIHBhcmFtZXRlciBvZiB0aGUgb3BlcmF0aW9uIGJpbmRpbmcpXG5cblx0XHRcdFx0XHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMuc29tZSgoY29udGV4dCkgPT4gY29udGV4dC5nZXRQcm9wZXJ0eShwYXRoRm9yQ29udGV4dCkgIT09IHBhcmFtVmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHRoZSB2YWx1ZXMgZnJvbSB0aGUgY29udGV4dHMgYXJlIG5vdCBhbGwgdGhlIHNhbWUsIGRvIG5vdCBwcmVmaWxsXG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0cGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0bm9Qb3NzaWJsZVZhbHVlOiB0cnVlXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB7IHBhcmFtTmFtZSwgdmFsdWU6IHBhcmFtVmFsdWUgfTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZWFkaW5nIGRlZmF1bHQgYWN0aW9uIHBhcmFtZXRlclwiLCBwYXJhbU5hbWUsIHRoaXMuYWN0aW9uLm5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRwYXJhbU5hbWUsXG5cdFx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0bGF0ZVByb3BlcnR5RXJyb3I6IHRydWVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBDYXNlIDEuMjogUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGRlZmluZXMgYSBmaXhlZCBzdHJpbmcgdmFsdWUgKGkuZS4gdlBhcmFtRGVmYXVsdFZhbHVlID0gJ3NvbWVTdHJpbmcnKVxuXHRcdFx0XHRyZXR1cm4geyBwYXJhbU5hbWUsIHZhbHVlOiBkZWZhdWx0VmFsdWUudmFsdWVPZigpIH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7IHBhcmFtTmFtZSwgdmFsdWU6IHBhcmFtZXRlck1vZGVsRGF0YVtwYXJhbU5hbWVdIH07XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbWFuaWZlc3QgdmFsdWVzLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgbWFuaWZlc3QgdmFsdWVzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRNYW5pZmVzdEZ1bmN0aW9uVmFsdWVzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHRoaXMuZGlhbG9nPy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmICghdGhpcy5wYXJhbWV0ZXJzLnZpZXcgfHwgIXRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24gfHwgIWJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fVxuXG5cdFx0cmV0dXJuIEZQTUhlbHBlci5sb2FkTW9kdWxlQW5kQ2FsbE1ldGhvZChcblx0XHRcdHRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb25cblx0XHRcdFx0LnN1YnN0cmluZygwLCB0aGlzLnBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSB8fCAtMSlcblx0XHRcdFx0LnJlcGxhY2UoL1xcLi9naSwgXCIvXCIpLFxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5zdWJzdHJpbmcoXG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24ubGFzdEluZGV4T2YoXCIuXCIpICsgMSxcblx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sZW5ndGhcblx0XHRcdCksXG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMudmlldyxcblx0XHRcdGJpbmRpbmdDb250ZXh0LFxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzXG5cdFx0KSBhcyBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcmVkZWZpbmVkIHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMuXG5cdCAqIEBwYXJhbSBiaW5kaW5nUGFyYW1ldGVyIFRoZSBiaW5kaW5nIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gZGlhbG9nIFRoZSBkaWFsb2dcblx0ICogQHJldHVybnMgVGhlIHByb21pc2UgY29udGFpbmluZyBhbGwgcHJlZGVmaW5lZCB2YWx1ZXMuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldFByZURlZmluZWRWYWx1ZXMoXG5cdFx0YmluZGluZ1BhcmFtZXRlcjogc3RyaW5nLFxuXHRcdGRpYWxvZzogRGlhbG9nXG5cdCk6IFByb21pc2U8e1xuXHRcdGNvbnRleHRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdGRlZmF1bHRWYWx1ZXM6IFBhcmFtZXRlckRlZmF1bHRWYWx1ZVtdO1xuXHRcdGZ1bmN0aW9uVmFsdWVzOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdG1hbmlmZXN0RnVuY3Rpb25WYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHR9PiB7XG5cdFx0Y29uc3QgYm91bmRGdW5jdGlvbk5hbWUgPSB0aGlzLmFjdGlvbi5hbm5vdGF0aW9ucy5Db21tb24/LkRlZmF1bHRWYWx1ZXNGdW5jdGlvbj8udmFsdWVPZigpO1xuXHRcdGxldCByZXF1ZXN0Q29udGV4dE9iamVjdDogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSBQcm9taXNlLnJlc29sdmUoe30pO1xuXHRcdGxldCBmdW5jdGlvblBhcmFtczogUHJvbWlzZTxPRGF0YVY0Q29udGV4dD5bXSA9IFtdO1xuXHRcdGlmICh0aGlzLmFjdGlvbi5pc0JvdW5kKSB7XG5cdFx0XHRpZiAodHlwZW9mIGJvdW5kRnVuY3Rpb25OYW1lID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGNvbnN0IG1vZGVsID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLmdldE1vZGVsKCk7XG5cdFx0XHRcdGNvbnN0IGJvdW5kRnVuY3Rpb24gPSBPcGVyYXRpb24uZ2V0T3BlcmF0aW9uRnJvbU5hbWUoYm91bmRGdW5jdGlvbk5hbWUsIG1vZGVsLCB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHNbMF0pO1xuXHRcdFx0XHRpZiAoYm91bmRGdW5jdGlvbikge1xuXHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLm1hcChhc3luYyAoY29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgbmV3IE9EYXRhT3BlcmF0aW9uKFxuXHRcdFx0XHRcdFx0XHRib3VuZEZ1bmN0aW9uLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRcdG1vZGVsOiBtb2RlbCxcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0czogW2NvbnRleHRdXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRlbmhhbmNlJHNlbGVjdDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0Z3JvdXBJZDogXCJmdW5jdGlvbkdyb3VwXCJcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KS5leGVjdXRlKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0LmZpbHRlcihpc0Z1bGZpbGxlZClbMF0/LnZhbHVlLmJvdW5kQ29udGV4dDtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJlcXVlc3RDb250ZXh0T2JqZWN0ID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLnJlcXVlc3RPYmplY3QoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY29udGV4dFZhbHVlcyA9IGF3YWl0IHJlcXVlc3RDb250ZXh0T2JqZWN0O1xuXG5cdFx0XHRjb25zdCBwcm9taXNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFtcblx0XHRcdFx0UHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0dGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcy5tYXAoYXN5bmMgKGFjdGlvblBhcmFtZXRlckluZm8pID0+XG5cdFx0XHRcdFx0XHR0aGlzLmdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZShhY3Rpb25QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlciwgYmluZGluZ1BhcmFtZXRlciwgZGlhbG9nKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KSxcblx0XHRcdFx0UHJvbWlzZS5hbGwoZnVuY3Rpb25QYXJhbXMpLFxuXHRcdFx0XHR0aGlzLmdldE1hbmlmZXN0RnVuY3Rpb25WYWx1ZXMoKVxuXHRcdFx0XSk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRjb250ZXh0VmFsdWVzLFxuXHRcdFx0XHRkZWZhdWx0VmFsdWVzOiBwcm9taXNlc1swXSxcblx0XHRcdFx0ZnVuY3Rpb25WYWx1ZXM6IHByb21pc2VzWzFdLFxuXHRcdFx0XHRtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzOiBwcm9taXNlc1syXVxuXHRcdFx0fTtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgcGFyYW1ldGVyXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHQvLyBSZW1vdmUgbWVzc2FnZXMgcmVsYXRpbmcgdG8gdGhlIGZ1bmN0aW9uIGZvciBkZWZhdWx0IHZhbHVlcyBhcyB0aGV5IGFyZW4ndCBoZWxwZnVsIGZvciBhIHVzZXJcblx0XHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRjb250ZXh0VmFsdWVzOiB7fSxcblx0XHRcdFx0ZGVmYXVsdFZhbHVlczogW10sXG5cdFx0XHRcdGZ1bmN0aW9uVmFsdWVzOiBbXSxcblx0XHRcdFx0bWFuaWZlc3RGdW5jdGlvblZhbHVlczoge31cblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxiYWNrIHdoZW4gdGhlIGRpYWxvZyBpcyBvcGVuZWQuIFNldHMgdGhlIGZvY3VzIG9uIHRoZSBmaXJzdCBmaWVsZCB3aXRob3V0IG9wZW5pbmcgdGhlIFZIIGRpYWxvZy5cblx0ICovXG5cdHByaXZhdGUgYWZ0ZXJPcGVuKCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0VmlzaWJsZVBhcmFtZXRlciA9IHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MuZmluZCgocGFyYW1ldGVySW5mbykgPT4gcGFyYW1ldGVySW5mby5maWVsZC5nZXRWaXNpYmxlKCkpO1xuXHRcdGlmIChmaXJzdFZpc2libGVQYXJhbWV0ZXIpIHtcblx0XHRcdGNvbnN0IGZpcnN0RmllbGQgPSBmaXJzdFZpc2libGVQYXJhbWV0ZXI/LmZpZWxkO1xuXHRcdFx0Y29uc3QgZm9jdXNJbmZvID0gZmlyc3RGaWVsZD8uZ2V0Rm9jdXNJbmZvKCkgYXMgeyB0YXJnZXRJbmZvOiBvYmplY3QgfTtcblx0XHRcdGZvY3VzSW5mby50YXJnZXRJbmZvID0geyBzaWxlbnQ6IHRydWUgfTtcblx0XHRcdGZpcnN0RmllbGQ/LmZvY3VzKGZvY3VzSW5mbyk7XG5cdFx0fVxuXHRcdHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uUGFyYW1ldGVyRGlhbG9nT3BlbmVkPy4oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgaW5mby5cblx0ICogQHBhcmFtIGRpYWxvZ0NvbnRlbnRzIFRoZSBkaWFsb2cgY29udGVudHNcblx0ICovXG5cdHByaXZhdGUgcmVnaXN0ZXJBY3Rpb25QYXJhbWV0ZXJJbmZvKGRpYWxvZ0NvbnRlbnRzOiBEaWFsb2dDb250ZW50VHlwZXNbXSk6IHZvaWQge1xuXHRcdC8vUmVnaXN0ZXIgdGhlIGZpZWxkXG5cdFx0ZGlhbG9nQ29udGVudHMuZm9yRWFjaCgoZGlhbG9nQ29udGVudCkgPT4ge1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVyID0gZGlhbG9nQ29udGVudD8ucGFyYW1ldGVyO1xuXHRcdFx0Y29uc3QgZmllbGQgPSBkaWFsb2dDb250ZW50Py5mb3JtRWxlbWVudHM/LlsxXTtcblx0XHRcdHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MucHVzaCh7XG5cdFx0XHRcdHBhcmFtZXRlcixcblx0XHRcdFx0ZmllbGQsXG5cdFx0XHRcdGlzTXVsdGlWYWx1ZTogcGFyYW1ldGVyLmlzQ29sbGVjdGlvbixcblx0XHRcdFx0aGFzRXJyb3I6IGZhbHNlXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMuXG5cdCAqIEBwYXJhbSBkaWFsb2cgVGhlIGRpYWxvZ1xuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZS5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgc2V0T3BlcmF0aW9uRGVmYXVsdFZhbHVlcyhkaWFsb2c6IERpYWxvZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGJpbmRpbmdQYXJhbWV0ZXIgPSB0aGlzLmFjdGlvbi5pc0JvdW5kID8gdGhpcy5hY3Rpb24ucGFyYW1ldGVyc1swXS5uYW1lIDogXCJcIjtcblx0XHRjb25zdCB7IGNvbnRleHRWYWx1ZXMsIGRlZmF1bHRWYWx1ZXMsIGZ1bmN0aW9uVmFsdWVzLCBtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzIH0gPSBhd2FpdCB0aGlzLmdldFByZURlZmluZWRWYWx1ZXMoXG5cdFx0XHRiaW5kaW5nUGFyYW1ldGVyLFxuXHRcdFx0ZGlhbG9nXG5cdFx0KTtcblx0XHRjb25zdCBvcGVyYXRpb25CaW5kaW5nID0gZGlhbG9nLmdldE9iamVjdEJpbmRpbmcoKSBhcyBPRGF0YUNvbnRleHRCaW5kaW5nO1xuXG5cdFx0aWYgKGJpbmRpbmdQYXJhbWV0ZXIpIHtcblx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKGJpbmRpbmdQYXJhbWV0ZXIsIGNvbnRleHRWYWx1ZXMpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgaSBpbiB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zKSB7XG5cdFx0XHRpZiAodGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvc1tpXS5wYXJhbWV0ZXIubmFtZSAhPT0gXCJSZXN1bHRJc0FjdGl2ZUVudGl0eVwiKSB7XG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlck5hbWUgPSB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zW2ldLnBhcmFtZXRlci5uYW1lO1xuXHRcdFx0XHQvLyBQYXJhbWV0ZXIgdmFsdWVzIHByb3ZpZGVkIGluIHRoZSBjYWxsIG9mIGludm9rZUFjdGlvbiBvdmVycnVsZSBvdGhlciBzb3VyY2VzXG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlclByb3ZpZGVkVmFsdWUgPSB0aGlzLnBhcmFtZXRlclZhbHVlcz8uZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5uYW1lID09PSBwYXJhbWV0ZXJOYW1lKT8udmFsdWU7XG5cdFx0XHRcdGlmIChwYXJhbWV0ZXJQcm92aWRlZFZhbHVlKSB7XG5cdFx0XHRcdFx0b3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIocGFyYW1ldGVyTmFtZSwgcGFyYW1ldGVyUHJvdmlkZWRWYWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAobWFuaWZlc3RGdW5jdGlvblZhbHVlcy5oYXNPd25Qcm9wZXJ0eShwYXJhbWV0ZXJOYW1lKSkge1xuXHRcdFx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWUsIG1hbmlmZXN0RnVuY3Rpb25WYWx1ZXNbcGFyYW1ldGVyTmFtZV0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGRlZmF1bHRWYWx1ZXNbaV0gJiYgZGVmYXVsdFZhbHVlc1tpXS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0b3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIocGFyYW1ldGVyTmFtZSwgZGVmYXVsdFZhbHVlc1tpXS52YWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5hY3Rpb24uYW5ub3RhdGlvbnMuQ29tbW9uPy5EZWZhdWx0VmFsdWVzRnVuY3Rpb24gJiYgIWRlZmF1bHRWYWx1ZXNbaV0ubm9Qb3NzaWJsZVZhbHVlKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc2V0T2ZGdW5jdGlvblZhbHVlcyA9IG5ldyBTZXQ8c3RyaW5nPihcblx0XHRcdFx0XHRcdHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5tYXAoKGNvbnRleHQsIGluZGV4KSA9PiBmdW5jdGlvblZhbHVlc1tpbmRleF0uZ2V0T2JqZWN0KHBhcmFtZXRlck5hbWUpKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKHNldE9mRnVuY3Rpb25WYWx1ZXMuc2l6ZSA9PT0gMSAmJiBzZXRPZkZ1bmN0aW9uVmFsdWVzLnZhbHVlcygpLm5leHQoKS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHQvL3BhcmFtIHZhbHVlcyBhcmUgYWxsIHRoZSBzYW1lOlxuXHRcdFx0XHRcdFx0b3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIocGFyYW1ldGVyTmFtZSwgQXJyYXkuZnJvbShzZXRPZkZ1bmN0aW9uVmFsdWVzKVswXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgYXQgbGVhc3Qgb25lIERlZmF1bHQgUHJvcGVydHkgaXMgYSBMYXRlIFByb3BlcnR5IGFuZCBhbiBlVGFnIGVycm9yIHdhcyByYWlzZWQuXG5cdFx0aWYgKGRlZmF1bHRWYWx1ZXMuc29tZSgodmFsdWUpID0+IHZhbHVlLmxhdGVQcm9wZXJ0eUVycm9yKSkge1xuXHRcdFx0Y29uc3QgcmVmcmVzaCA9IHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfUkVGUkVTSFwiKTtcblx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhnZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19MQVRFX1BST1BFUlRZXCIpLCB7XG5cdFx0XHRcdGFjdGlvbnM6IFtyZWZyZXNoLCBNZXNzYWdlQm94LkFjdGlvbi5PS10sXG5cdFx0XHRcdGVtcGhhc2l6ZWRBY3Rpb246IHJlZnJlc2gsXG5cdFx0XHRcdG9uQ2xvc2U6IChhY3Rpb246IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdGlmIChhY3Rpb24gPT09IHJlZnJlc2gpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGV4dGVuc2lvbkFQSSA9IHRoaXMucGFyYW1ldGVycy52aWV3Py5nZXRDb250cm9sbGVyKCkuZ2V0RXh0ZW5zaW9uQVBJKCk7XG5cdFx0XHRcdFx0XHQoZXh0ZW5zaW9uQVBJIGFzIExpc3RSZXBvcnRFeHRlbnNpb25BUEkgfCBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJKS5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb250ZW50V2lkdGg6IFwiMjVlbVwiXG5cdFx0XHR9IGFzIG9iamVjdCk7XG5cdFx0fVxuXG5cdFx0Ly8gZGVzdHJveSB0aGUgb2RhdGFDb250ZXh0QmluZGluZyByZWxhdGVkIHRvIHRoZSBmdW5jdGlvbiBjYWxsXG5cdFx0Zm9yIChjb25zdCBmdW5jdGlvbkNvbnRleHQgb2YgZnVuY3Rpb25WYWx1ZXMpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmcgPSBmdW5jdGlvbkNvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0aWYgKGJpbmRpbmc/LmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUNvbnRleHRCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdGJpbmRpbmcuZGVzdHJveSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSBjbG9zZSBvZiB0aGUgZGlhbG9nLlxuXHQgKi9cblx0cHJpdmF0ZSBhZnRlckNsb3NlKCk6IHZvaWQge1xuXHRcdC8vIHdoZW4gdGhlIGRpYWxvZyBpcyBjYW5jZWxsZWQsIG1lc3NhZ2VzIG5lZWQgdG8gYmUgcmVtb3ZlZCBpbiBjYXNlIHRoZSBzYW1lIGFjdGlvbiBzaG91bGQgYmUgZXhlY3V0ZWQgYWdhaW5cblx0XHRmb3IgKGNvbnN0IGkgaW4gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcykge1xuXHRcdFx0dGhpcy5yZW1vdmVNZXNzYWdlc0ZvclBhcmFtZXRlcih0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zW2ldLnBhcmFtZXRlcik7XG5cdFx0fVxuXHRcdHRoaXMuZGlhbG9nPy5kZXN0cm95KCk7XG5cdFx0dGhpcy5idXR0b25Mb2NrID0gZmFsc2U7IC8vbmVlZGVkIGhlcmUsIG5vdCBpbiB0aGUgcHJlc3MgZXZlbnRzIGZpbmFsbHkgY2xhdXNlLiBJbiBjYXNlIHRoZSBVSSBpcyBzbHVnZ2lzaCwgYmVnaW4gYnV0dG9uIGNvdWxkIGJlIHByZXNzZWQgYWdhaW4uXG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdHlwZSBvZiB0aGUgcHJvcGVydHkgdXNlZCBmb3IgdGV4dCBhbm5vdGF0aW9uIGluIHRoZSBWYWx1ZUhlbHAgZm9yIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGFuZCBwcm92aWRlcyB0aGUgZm9ybWF0dGVkIGJpbmRpbmcuXG5cdCAqIEBwYXJhbSBvSW50ZXJmYWNlIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgVGhlIGZvcm0gZWxlbWVudCBjb250cm9sLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRBZGRpdGlvbmFsVmFsdWUob0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcblx0XHRsZXQgdGV4dENvbnRleHQ7XG5cblx0XHRjb25zdCBjb250ZXh0UGF0aCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgbG9jYWxEYXRhUHJvcGVydHkgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0T2JqZWN0KCk/LiROYW1lO1xuXHRcdGNvbnN0IHZhbHVlTGlzdEJ5UXVhbGlmaWVyID0gYXdhaXQgdGhpcy5tZXRhTW9kZWwucmVxdWVzdFZhbHVlTGlzdEluZm8oY29udGV4dFBhdGgsIHRydWUpO1xuXG5cdFx0Ly8gTG9vayBmb3IgTG9jYWxEYXRhUHJvcGVydHkgaW4gVmFsdWVMaXN0UGFyYW1ldGVyT3V0IG9yIFZhbHVlTGlzdFBhcmFtZXRlckluT3V0IHdoZXJlIHRoaXMgaXMgdGhlIHBhcmFtZXRlciBuYW1lXG5cdFx0Ly8gV2Ugb25seSBjb25zaWRlciBUZXh0QW5ub3RhdGlvbnMgZm9yIHRoaXMgYWN0aW9uIHBhcmFtZXRlclxuXHRcdGNvbnN0IHZhbHVlTGlzdFBhcmFtZXRlciA9IHZhbHVlTGlzdEJ5UXVhbGlmaWVyW1wiXCJdLlBhcmFtZXRlcnMuZmluZChcblx0XHRcdChwYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdHBhcmFtZXRlci4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIiB8fFxuXHRcdFx0XHQocGFyYW1ldGVyLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXRcIiAmJlxuXHRcdFx0XHRcdHBhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aCA9PT0gbG9jYWxEYXRhUHJvcGVydHkpXG5cdFx0KTtcblxuXHRcdGlmICh2YWx1ZUxpc3RQYXJhbWV0ZXIgJiYgdmFsdWVMaXN0UGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5KSB7XG5cdFx0XHRjb25zdCB0ZXh0UHJvcGVydHkgPSB2YWx1ZUxpc3RQYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0XHQvLyBOb3cgd2UgaGF2ZSB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBpcyB0aGUgYW5ub3RhdGVkIHRleHRcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGAvJHt2YWx1ZUxpc3RCeVF1YWxpZmllcltcIlwiXS5Db2xsZWN0aW9uUGF0aH0vJHt0ZXh0UHJvcGVydHl9YDtcblx0XHRcdGNvbnN0IHByb3BBbm5vdGF0aW9ucyA9IHRoaXMubWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QGApO1xuXG5cdFx0XHRpZiAocHJvcEFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXSkge1xuXHRcdFx0XHRjb25zdCB0ZXh0UHJvcCA9IHByb3BBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXTtcblx0XHRcdFx0Y29uc3QgdGV4dFBhdGggPSBgLyR7dmFsdWVMaXN0QnlRdWFsaWZpZXJbXCJcIl0uQ29sbGVjdGlvblBhdGh9LyR7dGV4dFByb3AuJFBhdGh9YDtcblx0XHRcdFx0dGV4dENvbnRleHQgPSB0aGlzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dCh0ZXh0UGF0aCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0ZXh0Q29udGV4dCkge1xuXHRcdFx0XHRyZXR1cm4gQW5ub3RhdGlvbkhlbHBlci5mb3JtYXQodGV4dENvbnRleHQuZ2V0T2JqZWN0KCksIHsgY29udGV4dDogdGV4dENvbnRleHQgfSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQStGcUJBLHFCQUFxQjtJQTRCekMsU0FBQUEsc0JBQ2tCQyxNQUFjLEVBQ2RDLFVBYWhCLEVBQ2dCQyxlQUFzRCxFQUN0REMsYUFBaUMsRUFDakNDLGNB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
|
|
1094
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJhY3Rpb24iLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyVmFsdWVzIiwiZW50aXR5U2V0TmFtZSIsIm1lc3NhZ2VIYW5kbGVyIiwiaXNEaWFsb2dPcGVuIiwiYnV0dG9uTG9jayIsImFjdGlvblBhcmFtZXRlckluZm9zIiwicGFyYW1ldGVyTW9kZWwiLCJKU09OTW9kZWwiLCIkZGlzcGxheU1vZGUiLCJhY3Rpb25OYW1lIiwiYWN0aW9uSGVscGVyIiwiZ2V0QWN0aW9uTmFtZSIsIm1ldGFNb2RlbCIsIm1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicmVzb3VyY2VNb2RlbCIsInZpZXciLCJnZXRSZXNvdXJjZU1vZGVsIiwiYXBwQ29tcG9uZW50IiwicGFyYW1ldGVyc1ZhbHVlc1Byb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlIiwicGFyYW1ldGVyc1ZhbHVlc1JlamVjdCIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0UGFyYW1ldGVyRWRpdE1vZGUiLCJwYXJhbWV0ZXIiLCJhbm5vdGF0aW9ucyIsImZpZWxkQ29udHJvbCIsIkNvbW1vbiIsIkZpZWxkQ29udHJvbCIsImltbXV0YWJsZSIsIkNvcmUiLCJJbW11dGFibGUiLCJ2YWx1ZU9mIiwiY29tcHV0ZWQiLCJDb21wdXRlZCIsImNvbnN0YW50IiwiRmllbGRFZGl0TW9kZSIsIlJlYWRPbmx5IiwiaWZFbHNlIiwiaXNSZWFkT25seUV4cHJlc3Npb24iLCJpc0Rpc2FibGVkRXhwcmVzc2lvbiIsIkRpc2FibGVkIiwiRWRpdGFibGUiLCJjcmVhdGVGb3JtRWxlbWVudCIsImFjdGlvbk1ldGFQYXRoIiwiaXNCb3VuZCIsImdldE1ldGFQYXRoIiwiY29udGV4dHMiLCJnZXRQYXRoIiwiY29udmVydFR5cGVzIiwibmFtZXNwYWNlIiwibmFtZSIsIm1ldGFDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJmaWVsZCIsImxhYmVsIiwiTGFiZWwiLCJnZXRUZXh0IiwidG9TdHJpbmciLCJzdHJlYW1QYXJhbWV0ZXIiLCJpc0NvbGxlY3Rpb24iLCJjcmVhdGVNdWx0aUZpZWxkIiwidHlwZSIsInN0YXJ0c1dpdGgiLCJnZXRTdHJlYW1Qcm9wZXJ0eSIsImNyZWF0ZUZpbGVVcGxvYWRlciIsImNyZWF0ZUZpZWxkIiwiX2pzeHMiLCJfRnJhZ21lbnQiLCJjaGlsZHJlbiIsIl9qc3giLCJpZCIsImdlbmVyYXRlIiwidGV4dCIsInBhcmFtZXRlckNvbnRleHQiLCJkaXNwbGF5IiwiRmllbGRIZWxwZXIiLCJnZXRBUERpYWxvZ0Rpc3BsYXlGb3JtYXQiLCJnZXRPYmplY3QiLCJjb250ZXh0IiwiZXJyIiwiTG9nIiwid2FybmluZyIsInBsYWNlSG9sZGVyIiwiVUkiLCJQbGFjZWhvbGRlciIsInBsYWNlSG9sZGVyRXhwcmVzc2lvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwidW5kZWZpbmVkIiwicGFyYW1ldGVyVHlwZSIsIkVETV9UWVBFX01BUFBJTkciLCJNdWx0aVZhbHVlRmllbGQiLCJwbGFjZWhvbGRlciIsIml0ZW1zIiwicGF0aCIsImRlbGVnYXRlIiwiZWRpdE1vZGUiLCJ3aWR0aCIsIm11bHRpcGxlTGluZXMiLCJNdWx0aUxpbmVUZXh0IiwicmVxdWlyZWQiLCJpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbiIsInZhbHVlSGVscCIsImhhc1ZhbHVlSGVscCIsImNoYW5nZSIsImUiLCJoYW5kbGVGaWVsZENoYW5nZSIsInZpc2libGUiLCJub3QiLCJlcXVhbCIsIkhpZGRlbiIsImFyaWFMYWJlbGxlZEJ5IiwiZGVwZW5kZW50cyIsImNyZWF0ZVBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscCIsIk11bHRpVmFsdWVGaWVsZEl0ZW0iLCJkZXNjcmlwdGlvbiIsImZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlcyIsIkFjY2VwdGFibGVNZWRpYVR5cGVzIiwiYWNjZXB0ZWRUeXBlcyIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImpvaW4iLCJoYW5kbGVUeXBlTWlzc21hdGNoIiwiZXZlbnQiLCJmaWxlVXBsb2FkZXIiLCJnZXRTb3VyY2UiLCJnaXZlblR5cGUiLCJnZXRQYXJhbWV0ZXIiLCJnZXRNaW1lVHlwZSIsInNob3dUeXBlTWlzbWF0Y2hEaWFsb2ciLCJmaWxlTWF4aW11bVNpemUiLCJjYWxjdWxhdGVNQmZyb21CeXRlIiwibWF4TGVuZ3RoIiwiaGFuZGxlRmlsZVNpemVFeGNlZWQiLCJzaG93RmlsZVNpemVFeGNlZWREaWFsb2ciLCJnZXRNYXhpbXVtRmlsZVNpemUiLCJ0b0ZpeGVkIiwib25VcGxvYWRDb21wbGV0ZSIsImRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkIiwiRmlsZVVwbG9hZGVyIiwiYnV0dG9uT25seSIsImljb25Pbmx5IiwibXVsdGlwbGUiLCJ0b29sdGlwIiwiaWNvbiIsInN0eWxlIiwic2VuZFhIUiIsInVzZU11bHRpcGFydCIsInNhbWVGaWxlbmFtZUFsbG93ZWQiLCJ1cGxvYWRPbkNoYW5nZSIsIm1pbWVUeXBlIiwidHlwZU1pc3NtYXRjaCIsIm1heGltdW1GaWxlU2l6ZSIsImZpbGVTaXplRXhjZWVkIiwiaHR0cFJlcXVlc3RNZXRob2QiLCJGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZCIsIlB1dCIsInVwbG9hZENvbXBsZXRlIiwiaGFuZGxlRmlsZVVwbG9hZGVyQ2hhbmdlIiwiYWRkaXRpb25hbFZhbHVlIiwiYmluZGluZ1ZhbHVlIiwiZ2V0QVBEaWFsb2dCaW5kaW5nVmFsdWUiLCJnZXRBZGRpdGlvbmFsVmFsdWUiLCJGaWVsZCIsInBheWxvYWQiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwidmFsdWUiLCJpc011bHRpTGluZVRleHQiLCJWYWx1ZUhlbHAiLCJwcm9wZXJ0eVBhdGgiLCJnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwicXVhbGlmaWVycyIsInZhbHVlSGVscFF1YWxpZmllciIsInZhbGlkYXRlSW5wdXQiLCJyZXF1aXJlc1ZhbGlkYXRpb24iLCJ0eXBlYWhlYWQiLCJQb3BvdmVyIiwiTVRhYmxlIiwiY2FzZVNlbnNpdGl2ZSIsInVzZUNhc2VTZW5zaXRpdmVGaWx0ZXJSZXF1ZXN0cyIsImVudGl0eUNvbnRhaW5lciIsIkNhcGFiaWxpdGllcyIsIkZpbHRlckZ1bmN0aW9ucyIsIk1vZGVsSGVscGVyIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwidXNlQXNWYWx1ZUhlbHAiLCJWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJkaWFsb2ciLCJjcmVhdGVGaWVsZFZIRGlhbG9nIiwiVkhEaWFsb2ciLCJmaWVsZFByb21pc2UiLCJwYXJhbWV0ZXJJbmZvIiwiZmluZCIsImFjdGlvblBhcmFtZXRlckluZm8iLCJ2YWxpZGF0aW9uUHJvbWlzZSIsInJlbW92ZU1lc3NhZ2VzRm9yUGFyYW1ldGVyIiwicGFyYW1ldGVyc1ZhbHVlcyIsImhhc0Vycm9yIiwiZXJyb3IiLCJBY3Rpb25SdW50aW1lIiwiX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIiLCJtZXNzYWdlIiwiZmlsZXMiLCJnZXRCYXNlNjRGaWxlIiwiZ2V0TWltZVR5cGVQYXRoIiwiZ2V0RmlsZU5hbWVQYXRoIiwiQ29udGVudERpc3Bvc2l0aW9uIiwiRmlsZW5hbWUiLCJNZWRpYVR5cGUiLCJ0eXBlUmVmZXJlbmNlIiwicHJvcGVydGllcyIsInByb3BlcnR5IiwicmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsInJlc3VsdCIsInNwbGl0IiwicmVhZEFzRGF0YVVSTCIsIml0ZW0iLCJtZXNzYWdlcyIsIk1lc3NhZ2luZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJjb250cm9sSWQiLCJyZWxldmFudE1lc3NhZ2VzIiwiZmlsdGVyIiwibXNnIiwiZ2V0Q29udHJvbElkcyIsInNvbWUiLCJpbmNsdWRlcyIsInJlbW92ZU1lc3NhZ2VzIiwiZ2V0Rm9ybUVsZW1lbnRzIiwiZm9ybUVsZW1lbnRzIiwiZ2V0RGlhbG9nIiwiY3JlYXRlRGlhbG9nIiwiZGlhbG9nQ29udGVudHMiLCJkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzIiwiYWN0aW9uUGFyYW1ldGVycyIsInNsaWNlIiwiT3BlcmF0aW9uUGFyYW1ldGVyRmFjZXRzIiwiYWN0aW9uUGFyYW1ldGVyR3JvdXBzIiwiZm9yRWFjaCIsImZhY2V0IiwiZmFjZXRUaXRsZSIsIiRUeXBlIiwiaGFzRmllbGRHcm91cFRhcmdldCIsImZpZWxkR3JvdXAiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiZ3JvdXBlZEFjdGlvblBhcmFtZXRlcnMiLCJEYXRhIiwiZ3JvdXAiLCJwdXNoIiwiVmFsdWUiLCJkYXRhIiwiZ2V0R3JvdXBGb3JtIiwiYWxsIiwiYmluZCIsImZvcm1EYXRhIiwicGFyYW1ldGVyR3JvdXAiLCJvcEZhY2V0cyIsImRpYWxvZ0NvbnRlbnQiLCJUaXRsZSIsImVsZW1lbnQiLCJvcEZhY2V0IiwicmVnaXN0ZXJBY3Rpb25QYXJhbWV0ZXJJbmZvIiwibWVzc2FnZVN0cmlwIiwiZ2V0Q3VzdG9tQWN0aW9uTWVzc2FnZVN0cmlwVGV4dCIsImVuZEJ1dHRvbiIsIkJ1dHRvbiIsInByZXNzIiwib25DYW5jZWwiLCJEaWFsb2ciLCJ0aXRsZSIsImdldFRpdGxlVGV4dCIsImVzY2FwZUhhbmRsZXIiLCJkcmFnZ2FibGUiLCJyZXNpemFibGUiLCJhZnRlckNsb3NlIiwiYmVmb3JlT3BlbiIsImFmdGVyT3BlbiIsImluaXRpYWxGb2N1cyIsImJlZ2luQnV0dG9uIiwiaXNDcmVhdGVBY3Rpb24iLCJnZXRCZWdpbkJ1dHRvbkxhYmVsIiwib25BcHBseSIsImNvbnRlbnQiLCJNZXNzYWdlU3RyaXAiLCJzaG93SWNvbiIsIlNpbXBsZUZvcm0iLCJjb2x1bW5zTSIsImVkaXRhYmxlIiwibGFiZWxTcGFuTCIsImxhYmVsU3Bhbk0iLCJiaW5kaW5nIiwiYWN0aW9uTGFiZWwiLCJrZXkiLCJkZWZhdWx0S2V5IiwiZ2V0T3ZlcnJpZGRlblRleHQiLCJib3VuZEFjdGlvbk5hbWUiLCJwb3AiLCJzdWZmaXhSZXNvdXJjZUtleSIsImNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyIsImdldE9iamVjdEJpbmRpbmciLCJnZXRQYXJhbWV0ZXJDb250ZXh0IiwiQnVzeUxvY2tlciIsImxvY2siLCJ2YWxpZGF0ZVByb3BlcnRpZXMiLCJ1bmxvY2siLCJuZXdWYWx1ZXNEaWN0aW9uYXJ5IiwiT2JqZWN0IiwiYXNzaWduIiwidmFsdWVzIiwiZ2V0TW9kZWwiLCJnZXRQcm9wZXJ0eSIsInBhcmFtVmFsdWUiLCJLZXkiLCJpc05ld1ZhbHVlIiwic2V0UHJvcGVydHkiLCJVaU1vZGVsQ29uc3RhbnRzIiwiRG9jdW1lbnRNb2RpZmllZCIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsInJlc2V0U3RhdGUiLCJ1bmxvY2tEaWFsb2ciLCJ1cGRhdGVEaWFsb2dCaW5kaW5nQ29udGV4dEZvckVycm9yIiwibGVuZ3RoIiwid2FybmluZ0NvbnRleHQiLCJpbmZvQ29udGV4dCIsImVycm9uZW91c0N0eCIsImdldE1lc3NhZ2VzIiwiZ2V0VHlwZSIsIk1lc3NhZ2VUeXBlIiwiV2FybmluZyIsIkluZm9ybWF0aW9uIiwiRXJyb3IiLCJjb250ZXh0VG9Vc2UiLCJzZXRCaW5kaW5nQ29udGV4dCIsImlzTG9ja2VkIiwiRkVMaWJyYXJ5IiwiQ29uc3RhbnRzIiwiQ2FuY2VsQWN0aW9uRGlhbG9nIiwiY2xvc2VEaWFsb2ciLCJldmVudHMiLCJvblBhcmFtZXRlckRpYWxvZ0Nsb3NlZCIsImkiLCJjbG9zZSIsIm9wZW5EaWFsb2ciLCJDb21tb25VdGlscyIsInNldFVzZXJEZWZhdWx0cyIsInNldE1vZGVscyIsImFkZERlcGVuZGVudCIsInNldE9wZXJhdGlvbkRlZmF1bHRWYWx1ZXMiLCJvcGVuIiwic2V0TW9kZWwiLCJiaW5kRWxlbWVudCIsIl9ldmVudCIsIndhaXRGb3JQYXJhbWV0ZXJzVmFsdWVzIiwiaXNPcGVuIiwiZ2V0UGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwiYmluZGluZ1BhcmFtZXRlciIsIm9wZXJhdGlvbkJpbmRpbmciLCJwYXJhbWV0ZXJNb2RlbERhdGEiLCJwYXJhbU5hbWUiLCJkZWZhdWx0VmFsdWUiLCJQYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsInBhdGhGb3JDb250ZXh0IiwicmVwbGFjZSIsInJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eSIsInJlcXVlc3RQcm9wZXJ0eSIsIm5vUG9zc2libGVWYWx1ZSIsImxhdGVQcm9wZXJ0eUVycm9yIiwiZ2V0TWFuaWZlc3RGdW5jdGlvblZhbHVlcyIsImJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJGUE1IZWxwZXIiLCJsb2FkTW9kdWxlQW5kQ2FsbE1ldGhvZCIsImdldFByZURlZmluZWRWYWx1ZXMiLCJib3VuZEZ1bmN0aW9uTmFtZSIsIkRlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsInJlcXVlc3RDb250ZXh0T2JqZWN0IiwiZnVuY3Rpb25QYXJhbXMiLCJib3VuZEZ1bmN0aW9uIiwiT3BlcmF0aW9uIiwiZ2V0T3BlcmF0aW9uRnJvbU5hbWUiLCJPRGF0YU9wZXJhdGlvbiIsImVuaGFuY2Ukc2VsZWN0IiwiZ3JvdXBJZCIsImV4ZWN1dGUiLCJpc0Z1bGZpbGxlZCIsImJvdW5kQ29udGV4dCIsInJlcXVlc3RPYmplY3QiLCJjb250ZXh0VmFsdWVzIiwicHJvbWlzZXMiLCJkZWZhdWx0VmFsdWVzIiwiZnVuY3Rpb25WYWx1ZXMiLCJtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzIiwiZmlyc3RWaXNpYmxlUGFyYW1ldGVyIiwiZ2V0VmlzaWJsZSIsImZpcnN0RmllbGQiLCJmb2N1c0luZm8iLCJnZXRGb2N1c0luZm8iLCJ0YXJnZXRJbmZvIiwic2lsZW50IiwiZm9jdXMiLCJvblBhcmFtZXRlckRpYWxvZ09wZW5lZCIsImlzTXVsdGlWYWx1ZSIsInNldFBhcmFtZXRlciIsInBhcmFtZXRlck5hbWUiLCJwYXJhbWV0ZXJQcm92aWRlZFZhbHVlIiwiaGFzT3duUHJvcGVydHkiLCJzZXRPZkZ1bmN0aW9uVmFsdWVzIiwiU2V0IiwiaW5kZXgiLCJzaXplIiwibmV4dCIsInJlZnJlc2giLCJNZXNzYWdlQm94IiwiYWN0aW9ucyIsIkFjdGlvbiIsIk9LIiwiZW1waGFzaXplZEFjdGlvbiIsIm9uQ2xvc2UiLCJleHRlbnNpb25BUEkiLCJnZXRDb250cm9sbGVyIiwiZ2V0RXh0ZW5zaW9uQVBJIiwiY29udGVudFdpZHRoIiwiZnVuY3Rpb25Db250ZXh0IiwiZ2V0QmluZGluZyIsImlzQSIsImRlc3Ryb3kiLCJvSW50ZXJmYWNlIiwidGV4dENvbnRleHQiLCJjb250ZXh0UGF0aCIsImxvY2FsRGF0YVByb3BlcnR5IiwiJE5hbWUiLCJ2YWx1ZUxpc3RCeVF1YWxpZmllciIsInJlcXVlc3RWYWx1ZUxpc3RJbmZvIiwidmFsdWVMaXN0UGFyYW1ldGVyIiwiUGFyYW1ldGVycyIsIkxvY2FsRGF0YVByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIlZhbHVlTGlzdFByb3BlcnR5IiwidGV4dFByb3BlcnR5IiwiQ29sbGVjdGlvblBhdGgiLCJwcm9wQW5ub3RhdGlvbnMiLCJ0ZXh0UHJvcCIsInRleHRQYXRoIiwiJFBhdGgiLCJBbm5vdGF0aW9uSGVscGVyIiwiZm9ybWF0Iiwib01vZGVsIiwic0NvbnRleHRQYXRoIiwib0FjdGlvblBhcmFtZXRlckFubm90YXRpb25zIiwicHJvcGVydHlPYmplY3RQYXRoIiwiZ2V0VmFsdWVCaW5kaW5nIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPcGVyYXRpb25QYXJhbWV0ZXJEaWFsb2cudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tcGxleFR5cGUsIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJpbWl0aXZlVHlwZSwgUHJvcGVydHksIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIEFjdGlvbiwgdHlwZSBBY3Rpb25QYXJhbWV0ZXIgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgUHJvcGVydHlBbm5vdGF0aW9uc19Db3JlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db3JlX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhRmllbGQsIEZpZWxkR3JvdXBUeXBlLCBSZWZlcmVuY2VGYWNldCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdEVETV9UWVBFX01BUFBJTkcsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRub3QsXG5cdHR5cGUgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25QYXJhbWV0ZXJJbmZvIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBVaU1vZGVsQ29uc3RhbnRzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9lZGl0Rmxvd0NvbnN0YW50c1wiO1xuaW1wb3J0IE9EYXRhT3BlcmF0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9vcGVyYXRpb25zL09EYXRhT3BlcmF0aW9uXCI7XG5pbXBvcnQgT3BlcmF0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9vcGVyYXRpb25zL09wZXJhdGlvblwiO1xuaW1wb3J0IGFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvb3BlcmF0aW9ucy9hY3Rpb25IZWxwZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcywgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBoYXNGaWVsZEdyb3VwVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgaXNGdWxmaWxsZWQsIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHsgZ2V0VGFyZ2V0TmF2aWdhdGlvblBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbiwgaXNEaXNhYmxlZEV4cHJlc3Npb24sIGlzUmVhZE9ubHlFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRmllbGRDb250cm9sSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNWYWx1ZUhlbHAsIGlzTXVsdGlMaW5lVGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkSGVscGVyXCI7XG5pbXBvcnQgeyByZXF1aXJlc1ZhbGlkYXRpb24sIHVzZUNhc2VTZW5zaXRpdmVGaWx0ZXJSZXF1ZXN0cyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUhlbHBUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBMaXN0UmVwb3J0RXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB0eXBlIHsgRGlhbG9nJEJlZm9yZU9wZW5FdmVudCB9IGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9tL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgVGl0bGUgZnJvbSBcInNhcC91aS9jb3JlL1RpdGxlXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IFNpbXBsZUZvcm0gZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9TaW1wbGVGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkJENoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCBGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBNdWx0aVZhbHVlRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgVmFsdWVIZWxwIGZyb20gXCJzYXAvdWkvbWRjL1ZhbHVlSGVscFwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IE11bHRpVmFsdWVGaWVsZEl0ZW0gZnJvbSBcInNhcC91aS9tZGMvZmllbGQvTXVsdGlWYWx1ZUZpZWxkSXRlbVwiO1xuaW1wb3J0IFZIRGlhbG9nIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9EaWFsb2dcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9Qb3BvdmVyXCI7XG5pbXBvcnQgTVRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L01UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUge1xuXHRGaWxlVXBsb2FkZXIkQ2hhbmdlRXZlbnQsXG5cdEZpbGVVcGxvYWRlciRGaWxlU2l6ZUV4Y2VlZEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVHlwZU1pc3NtYXRjaEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVXBsb2FkQ29tcGxldGVFdmVudFxufSBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgRmlsZVVwbG9hZGVyIGZyb20gXCJzYXAvdWkvdW5pZmllZC9GaWxlVXBsb2FkZXJcIjtcbmltcG9ydCBGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZCBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVySHR0cFJlcXVlc3RNZXRob2RcIjtcbmltcG9ydCB7IGRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkLCBzaG93RmlsZVNpemVFeGNlZWREaWFsb2csIHNob3dUeXBlTWlzbWF0Y2hEaWFsb2cgfSBmcm9tIFwiLi4vaW50ZXJuYWwvaGVscGVycy9VcGxvYWRcIjtcblxuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0VmFsdWVCaW5kaW5nIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG50eXBlIFBhcmFtZXRlckRlZmF1bHRWYWx1ZSA9IHsgcGFyYW1OYW1lOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyBsYXRlUHJvcGVydHlFcnJvcj86IGJvb2xlYW47IG5vUG9zc2libGVWYWx1ZT86IGJvb2xlYW4gfTtcblxudHlwZSBFbGVtZW50R3JvdXAgPSB7IGZhY2V0VGl0bGU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4gfCB1bmRlZmluZWQ7IGRhdGE6IEFjdGlvblBhcmFtZXRlcltdIH07XG50eXBlIEVsZW1lbnRHcm91cENvbnZlcnRlZCA9IHsgZmFjZXRUaXRsZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8c3RyaW5nPiB8IHVuZGVmaW5lZDsgZGF0YTogRGlhbG9nQ29udGVudFR5cGVzW10gfTtcblxudHlwZSBGb3JtRWxlbWVudFR5cGUgPSBbTGFiZWwsIEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkXTtcblxudHlwZSBEaWFsb2dDb250ZW50VHlwZXMgPSB7XG5cdGZvcm1FbGVtZW50czogRm9ybUVsZW1lbnRUeXBlO1xuXHRwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcjtcbn07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY3Rpb25QYXJhbWV0ZXJEaWFsb2cge1xuXHRwcml2YXRlIHBhcmFtZXRlcnNWYWx1ZXNQcm9taXNlOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+PjtcblxuXHRwcml2YXRlIHBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlITogKHJlc29sdmVWYWx1ZTogUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT4pID0+IHZvaWQ7XG5cblx0cHJpdmF0ZSBwYXJhbWV0ZXJzVmFsdWVzUmVqZWN0ITogKGVycm9yOiB1bmtub3duKSA9PiB2b2lkO1xuXG5cdC8vIHRoZSBkaWFsb2cgaXMgY29uc2lkZXJlZCBhcyBjbG9zZWQgYWZ0ZXIgdGhlIGFmdGVyQ2xvc2UgZXZlbnQgaGFzIGJlZW4gdHJpZ2dlcmVkXG5cdC8vIHRoaXMgaXMgYXN5bmNocm9ub3VzLCBzbyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGRpYWxvZyBzdGF0ZSBzaW5jZSB0aGUgbWVzc2FnZSBoYW5kbGluZyBpcyBzeW5jaHJvbm91c1xuXHQvLyBhbmQgd2UgbmVlZCB0byBrbm93IGlmIHRoZSBkaWFsb2cgaXMgb3BlbiBvciBjbG9zZWRcblx0cHJpdmF0ZSBpc0RpYWxvZ09wZW4gPSBmYWxzZTtcblxuXHRwcml2YXRlIGRpYWxvZzogRGlhbG9nIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uTmFtZTogc3RyaW5nO1xuXG5cdHByaXZhdGUgYnV0dG9uTG9jayA9IGZhbHNlO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbDtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFjdGlvblBhcmFtZXRlckluZm9zOiAoQWN0aW9uUGFyYW1ldGVySW5mbyAmIHsgcGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIgfSlbXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyTW9kZWw6IEpTT05Nb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdCRkaXNwbGF5TW9kZToge31cblx0fSk7XG5cblx0cHJpdmF0ZSByZWFkb25seSByZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uOiBBY3Rpb24sXG5cdFx0cHJpdmF0ZSByZWFkb25seSBwYXJhbWV0ZXJzOiB7XG5cdFx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDtcblx0XHRcdGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0cGFyYW1ldGVyc1ZhbHVlczogUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT47XG5cdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG5cdFx0XHRpc0NyZWF0ZUFjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdG1vZGVsOiBPRGF0YU1vZGVsO1xuXHRcdFx0dmlldz86IEZFVmlldztcblx0XHRcdGV2ZW50cz86IHtcblx0XHRcdFx0b25QYXJhbWV0ZXJEaWFsb2dPcGVuZWQ/OiAoKSA9PiB2b2lkO1xuXHRcdFx0XHRvblBhcmFtZXRlckRpYWxvZ0Nsb3NlZD86ICgpID0+IHZvaWQ7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0cHJpdmF0ZSByZWFkb25seSBwYXJhbWV0ZXJWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gfCB1bmRlZmluZWQsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBlbnRpdHlTZXROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXJcblx0KSB7XG5cdFx0dGhpcy5hY3Rpb25OYW1lID0gYWN0aW9uSGVscGVyLmdldEFjdGlvbk5hbWUodGhpcy5hY3Rpb24pO1xuXHRcdHRoaXMubWV0YU1vZGVsID0gdGhpcy5wYXJhbWV0ZXJzLm1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdHRoaXMucmVzb3VyY2VNb2RlbCA9IHRoaXMucGFyYW1ldGVycy52aWV3ID8gZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnBhcmFtZXRlcnMudmlldykgOiBnZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpO1xuXHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1JlamVjdCA9IHJlamVjdDtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGJpbmRpbmcgZXhwcmVzc2lvbiBvZiB0aGUgZWRpdCBtb2RlIHByb3BlcnR5IGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24uXG5cdCAqL1xuXHRwcml2YXRlIGdldFBhcmFtZXRlckVkaXRNb2RlKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPEZpZWxkRWRpdE1vZGU+IHtcblx0XHRjb25zdCBhbm5vdGF0aW9ucyA9IHBhcmFtZXRlci5hbm5vdGF0aW9ucyxcblx0XHRcdGZpZWxkQ29udHJvbCA9IGFubm90YXRpb25zLkNvbW1vbj8uRmllbGRDb250cm9sLFxuXHRcdFx0aW1tdXRhYmxlID0gKGFubm90YXRpb25zLkNvcmUgYXMgdW5rbm93biBhcyBQcm9wZXJ0eUFubm90YXRpb25zX0NvcmUpPy5JbW11dGFibGU/LnZhbHVlT2YoKSxcblx0XHRcdGNvbXB1dGVkID0gKGFubm90YXRpb25zLkNvcmUgYXMgdW5rbm93biBhcyBQcm9wZXJ0eUFubm90YXRpb25zX0NvcmUpPy5Db21wdXRlZD8udmFsdWVPZigpO1xuXG5cdFx0aWYgKGltbXV0YWJsZSB8fCBjb21wdXRlZCkge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KEZpZWxkRWRpdE1vZGUuUmVhZE9ubHkpO1xuXHRcdH0gZWxzZSBpZiAoZmllbGRDb250cm9sKSB7XG5cdFx0XHRyZXR1cm4gaWZFbHNlKFxuXHRcdFx0XHRpc1JlYWRPbmx5RXhwcmVzc2lvbihwYXJhbWV0ZXIpLFxuXHRcdFx0XHRGaWVsZEVkaXRNb2RlLlJlYWRPbmx5LFxuXHRcdFx0XHRpZkVsc2UoaXNEaXNhYmxlZEV4cHJlc3Npb24ocGFyYW1ldGVyKSwgRmllbGRFZGl0TW9kZS5EaXNhYmxlZCwgRmllbGRFZGl0TW9kZS5FZGl0YWJsZSlcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBjb25zdGFudChGaWVsZEVkaXRNb2RlLkVkaXRhYmxlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBmb3JtIGVsZW1lbnQgY29udHJvbCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBUaGUgZm9ybSBlbGVtZW50IGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNyZWF0ZUZvcm1FbGVtZW50KHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogUHJvbWlzZTxGb3JtRWxlbWVudFR5cGU+IHtcblx0XHRjb25zdCBhY3Rpb25NZXRhUGF0aCA9IHRoaXMuYWN0aW9uLmlzQm91bmRcblx0XHRcdD8gYCR7dGhpcy5tZXRhTW9kZWwuZ2V0TWV0YVBhdGgodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLmdldFBhdGgoKSl9LyR7Y29udmVydFR5cGVzKHRoaXMubWV0YU1vZGVsKS5uYW1lc3BhY2V9LiR7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb24ubmFtZVxuXHRcdFx0ICB9YFxuXHRcdFx0OiBgLyR7dGhpcy5hY3Rpb24ubmFtZX1gO1xuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gdGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7YWN0aW9uTWV0YVBhdGh9LyR7cGFyYW1ldGVyLm5hbWV9YCkhO1xuXHRcdGxldCBmaWVsZDtcblx0XHRsZXQgbGFiZWwgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbFxuXHRcdFx0PyB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uLkxhYmVsLnRvU3RyaW5nKCkpXG5cdFx0XHQ6IHBhcmFtZXRlci5uYW1lO1xuXHRcdGxldCBzdHJlYW1QYXJhbWV0ZXI7XG5cdFx0aWYgKHBhcmFtZXRlci5pc0NvbGxlY3Rpb24pIHtcblx0XHRcdGZpZWxkID0gYXdhaXQgdGhpcy5jcmVhdGVNdWx0aUZpZWxkKHBhcmFtZXRlciwgbWV0YUNvbnRleHQpO1xuXHRcdH0gZWxzZSBpZiAoIXBhcmFtZXRlci50eXBlLnN0YXJ0c1dpdGgoXCJFZG0uXCIpICYmIHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKSkge1xuXHRcdFx0c3RyZWFtUGFyYW1ldGVyID0gdGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpO1xuXHRcdFx0Ly8gY2FsY3VsYXRlIGxhYmVsIGZyb20gdGhlIHN0cmVhbSBwcm9wZXJ0eSB3aXRoaW4gdGhlIENvbXBsZXhUeXBlXG5cdFx0XHRsYWJlbCA9IHN0cmVhbVBhcmFtZXRlcj8uYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbFxuXHRcdFx0XHQ/IHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KHN0cmVhbVBhcmFtZXRlci5hbm5vdGF0aW9ucy5Db21tb24uTGFiZWwudG9TdHJpbmcoKSlcblx0XHRcdFx0OiAoc3RyZWFtUGFyYW1ldGVyPy5uYW1lIGFzIHN0cmluZyk7XG5cdFx0XHRmaWVsZCA9IHRoaXMuY3JlYXRlRmlsZVVwbG9hZGVyKHBhcmFtZXRlcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZpZWxkID0gYXdhaXQgdGhpcy5jcmVhdGVGaWVsZChwYXJhbWV0ZXIsIG1ldGFDb250ZXh0KTtcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdDw+XG5cdFx0XHRcdDxMYWJlbCBpZD17Z2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIubmFtZSwgc3RyZWFtUGFyYW1ldGVyPy5uYW1lLCBcIkxhYmVsXCJdKX0gdGV4dD17bGFiZWx9IC8+XG5cdFx0XHRcdHtmaWVsZH1cblx0XHRcdDwvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgbXVsdGkgZmllbGQgY29udHJvbCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyQ29udGV4dCBUaGUgcGFyYW1ldGVyIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIG11bHRpIHZhbHVlIGZpZWxkIGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNyZWF0ZU11bHRpRmllbGQocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIsIHBhcmFtZXRlckNvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPE11bHRpVmFsdWVGaWVsZD4ge1xuXHRcdGxldCBkaXNwbGF5ID0gXCJWYWx1ZVwiO1xuXHRcdHRyeSB7XG5cdFx0XHRkaXNwbGF5ID0gYXdhaXQgRmllbGRIZWxwZXIuZ2V0QVBEaWFsb2dEaXNwbGF5Rm9ybWF0KHBhcmFtZXRlckNvbnRleHQuZ2V0T2JqZWN0KCksIHsgY29udGV4dDogcGFyYW1ldGVyQ29udGV4dCB9KTtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdExvZy53YXJuaW5nKGBQYXJhbWV0ZXIgZGlhbG9nIG11bHRpZmllbGQ6IGRpc3BsYXkgZm9ybWF0IGNvdWxkbid0IGJlIGNhbGN1bGF0ZWQgZm9yIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nOiAke2Vycn1gKTtcblx0XHR9XG5cdFx0Y29uc3QgcGxhY2VIb2xkZXIgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuVUk/LlBsYWNlaG9sZGVyIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFByaW1pdGl2ZVR5cGU+IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHBsYWNlSG9sZGVyRXhwcmVzc2lvbiA9IHBsYWNlSG9sZGVyID8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHBsYWNlSG9sZGVyKSkgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgcGFyYW1ldGVyVHlwZSA9IEVETV9UWVBFX01BUFBJTkc/LltwYXJhbWV0ZXIudHlwZV0/LnR5cGU7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNdWx0aVZhbHVlRmllbGRcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWVdKX1cblx0XHRcdFx0cGxhY2Vob2xkZXI9e3BsYWNlSG9sZGVyRXhwcmVzc2lvbn1cblx0XHRcdFx0aXRlbXM9e3sgcGF0aDogYG12ZnZpZXc+LyR7cGFyYW1ldGVyLm5hbWV9YCB9fVxuXHRcdFx0XHRkZWxlZ2F0ZT17eyBuYW1lOiBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL011bHRpVmFsdWVQYXJhbWV0ZXJEZWxlZ2F0ZVwiIH19XG5cdFx0XHRcdGRpc3BsYXk9e2Rpc3BsYXl9XG5cdFx0XHRcdGVkaXRNb2RlPXt0aGlzLmdldFBhcmFtZXRlckVkaXRNb2RlKHBhcmFtZXRlcil9XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdG11bHRpcGxlTGluZXM9e3BhcmFtZXRlci5hbm5vdGF0aW9ucy5VST8uTXVsdGlMaW5lVGV4dD8udmFsdWVPZigpID09PSB0cnVlfVxuXHRcdFx0XHRyZXF1aXJlZD17Y29tcGlsZUV4cHJlc3Npb24oaXNBY3Rpb25QYXJhbWV0ZXJSZXF1aXJlZEV4cHJlc3Npb24ocGFyYW1ldGVyLCB0aGlzLmFjdGlvbiwgY29udmVydFR5cGVzKHRoaXMubWV0YU1vZGVsKSkpfVxuXHRcdFx0XHR2YWx1ZUhlbHA9e2hhc1ZhbHVlSGVscChwYXJhbWV0ZXIpID8gZ2VuZXJhdGUoW3RoaXMuYWN0aW9uTmFtZSwgcGFyYW1ldGVyLm5hbWUsIFwiRmllbGRWYWx1ZUhlbHBcIl0pIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRjaGFuZ2U9e2FzeW5jIChlKTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLmhhbmRsZUZpZWxkQ2hhbmdlKGUsIHBhcmFtZXRlcil9XG5cdFx0XHRcdHZpc2libGU9e2NvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocGFyYW1ldGVyLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKX1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tnZW5lcmF0ZShbXCJBUERfXCIsIHBhcmFtZXRlci5uYW1lLCBcIkxhYmVsXCJdKV19XG5cdFx0XHRcdGRlcGVuZGVudHM9e3RoaXMuY3JlYXRlUGFyYW1ldGVyRGlhbG9nVmFsdWVIZWxwKHBhcmFtZXRlciwgcGFyYW1ldGVyQ29udGV4dCl9XG5cdFx0XHQ+XG5cdFx0XHRcdDxNdWx0aVZhbHVlRmllbGRJdGVtIGtleT17YHtwYXRoOiAnbXZmdmlldz5LZXknLCB0eXBlOicke3BhcmFtZXRlclR5cGV9J31gfSBkZXNjcmlwdGlvbj1cInttdmZ2aWV3PkRlc2N9XCIgLz5cblx0XHRcdDwvTXVsdGlWYWx1ZUZpZWxkPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgRmlsZVVwbG9hZGVyIGNvbnRyb2wgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgVGhlIEZpbGVVcGxvYWRlciBjb250cm9sLlxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVGaWxlVXBsb2FkZXIocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBGaWxlVXBsb2FkZXIge1xuXHRcdGxldCBmaWxlQWNjZXB0YWJsZU1lZGlhVHlwZXM7XG5cdFx0aWYgKHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKT8uYW5ub3RhdGlvbnMuQ29yZT8uQWNjZXB0YWJsZU1lZGlhVHlwZXMpIHtcblx0XHRcdGNvbnN0IGFjY2VwdGVkVHlwZXMgPSBBcnJheS5mcm9tKFxuXHRcdFx0XHR0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik/LmFubm90YXRpb25zLkNvcmU/LkFjY2VwdGFibGVNZWRpYVR5cGVzIGFzIHVua25vd24gYXMgc3RyaW5nW11cblx0XHRcdCkubWFwKCh0eXBlKSA9PiBgJyR7dHlwZX0nYCk7XG5cdFx0XHRmaWxlQWNjZXB0YWJsZU1lZGlhVHlwZXMgPSBgez1vZGF0YS5jb2xsZWN0aW9uKFske2FjY2VwdGVkVHlwZXMuam9pbihcIixcIil9XSl9YDtcblx0XHR9XG5cdFx0Y29uc3QgaGFuZGxlVHlwZU1pc3NtYXRjaCA9IGZ1bmN0aW9uIChldmVudDogRmlsZVVwbG9hZGVyJFR5cGVNaXNzbWF0Y2hFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3QgZmlsZVVwbG9hZGVyID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRjb25zdCBnaXZlblR5cGUgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJtaW1lVHlwZVwiKTtcblx0XHRcdGNvbnN0IGFjY2VwdGVkVHlwZXMgPSBmaWxlVXBsb2FkZXIuZ2V0TWltZVR5cGUoKTtcblx0XHRcdGlmIChnaXZlblR5cGUpIHtcblx0XHRcdFx0c2hvd1R5cGVNaXNtYXRjaERpYWxvZyhmaWxlVXBsb2FkZXIsIGdpdmVuVHlwZSwgYWNjZXB0ZWRUeXBlcyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHQvLyB2ZXJpZnkgY2hlY2sgZm9yIHN0cmVhbVxuXHRcdGNvbnN0IGZpbGVNYXhpbXVtU2l6ZSA9IEZpZWxkSGVscGVyLmNhbGN1bGF0ZU1CZnJvbUJ5dGUodGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpPy5tYXhMZW5ndGgpO1xuXHRcdGNvbnN0IGhhbmRsZUZpbGVTaXplRXhjZWVkID0gZnVuY3Rpb24gKGV2ZW50OiBGaWxlVXBsb2FkZXIkRmlsZVNpemVFeGNlZWRFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3QgZmlsZVVwbG9hZGVyID0gZXZlbnQ/LmdldFNvdXJjZSgpO1xuXHRcdFx0c2hvd0ZpbGVTaXplRXhjZWVkRGlhbG9nKGZpbGVVcGxvYWRlciwgZmlsZVVwbG9hZGVyLmdldE1heGltdW1GaWxlU2l6ZSgpLnRvRml4ZWQoMykpO1xuXHRcdH07XG5cdFx0Y29uc3Qgb25VcGxvYWRDb21wbGV0ZSA9IGZ1bmN0aW9uIChldmVudDogRmlsZVVwbG9hZGVyJFVwbG9hZENvbXBsZXRlRXZlbnQpOiB2b2lkIHtcblx0XHRcdGlmIChldmVudC5nZXRQYXJhbWV0ZXIoXCJzdGF0dXNcIikgPT09IDAgfHwgKGV2ZW50LmdldFBhcmFtZXRlcihcInN0YXR1c1wiKSBhcyBudW1iZXIpID49IDQwMCkge1xuXHRcdFx0XHRkaXNwbGF5TWVzc2FnZUZvckZhaWxlZFVwbG9hZChcblx0XHRcdFx0XHRldmVudC5nZXRTb3VyY2UoKSxcblx0XHRcdFx0XHQoZXZlbnQuZ2V0UGFyYW1ldGVyKFwicmVzcG9uc2VSYXdcIikgYXMgc3RyaW5nKSB8fCAoZXZlbnQuZ2V0UGFyYW1ldGVyKFwicmVzcG9uc2VcIikgYXMgc3RyaW5nKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGaWxlVXBsb2FkZXJcblx0XHRcdFx0bmFtZT1cIkZFVjRGaWxlVXBsb2FkXCJcblx0XHRcdFx0YnV0dG9uT25seT1cImZhbHNlXCJcblx0XHRcdFx0aWNvbk9ubHk9XCJ0cnVlXCJcblx0XHRcdFx0bXVsdGlwbGU9XCJmYWxzZVwiXG5cdFx0XHRcdHRvb2x0aXA9XCJ7c2FwLmZlLmkxOG4+TV9GSUVMRF9GSUxFVVBMT0FERVJfVVBMT0FEX0JVVFRPTl9UT09MVElQfVwiXG5cdFx0XHRcdGljb249XCJzYXAtaWNvbjovL3VwbG9hZFwiXG5cdFx0XHRcdHN0eWxlPVwiVHJhbnNwYXJlbnRcIlxuXHRcdFx0XHRzZW5kWEhSPVwidHJ1ZVwiXG5cdFx0XHRcdHVzZU11bHRpcGFydD1cImZhbHNlXCJcblx0XHRcdFx0c2FtZUZpbGVuYW1lQWxsb3dlZD1cInRydWVcIlxuXHRcdFx0XHR1cGxvYWRPbkNoYW5nZT1cImZhbHNlXCJcblx0XHRcdFx0bWltZVR5cGU9e2ZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlc31cblx0XHRcdFx0dHlwZU1pc3NtYXRjaD17aGFuZGxlVHlwZU1pc3NtYXRjaH1cblx0XHRcdFx0bWF4aW11bUZpbGVTaXplPXtmaWxlTWF4aW11bVNpemV9XG5cdFx0XHRcdGZpbGVTaXplRXhjZWVkPXtoYW5kbGVGaWxlU2l6ZUV4Y2VlZH1cblx0XHRcdFx0aHR0cFJlcXVlc3RNZXRob2Q9e0ZpbGVVcGxvYWRlckh0dHBSZXF1ZXN0TWV0aG9kLlB1dH1cblx0XHRcdFx0dXBsb2FkQ29tcGxldGU9e29uVXBsb2FkQ29tcGxldGV9XG5cdFx0XHRcdGNoYW5nZT17YXN5bmMgKGUpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMuaGFuZGxlRmlsZVVwbG9hZGVyQ2hhbmdlKGUsIHBhcmFtZXRlcil9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgZmllbGQgY29udHJvbCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyQ29udGV4dCBUaGUgcGFyYW1ldGVyIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIGZpZWxkIGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNyZWF0ZUZpZWxkKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyLCBwYXJhbWV0ZXJDb250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTxGaWVsZD4ge1xuXHRcdGxldCBkaXNwbGF5ID0gXCJWYWx1ZVwiO1xuXHRcdGxldCBhZGRpdGlvbmFsVmFsdWU7XG5cdFx0bGV0IGJpbmRpbmdWYWx1ZTtcblx0XHR0cnkge1xuXHRcdFx0ZGlzcGxheSA9IGF3YWl0IEZpZWxkSGVscGVyLmdldEFQRGlhbG9nRGlzcGxheUZvcm1hdChwYXJhbWV0ZXJDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IHBhcmFtZXRlckNvbnRleHQgfSk7XG5cdFx0XHRiaW5kaW5nVmFsdWUgPSBhd2FpdCB0aGlzLmdldEFQRGlhbG9nQmluZGluZ1ZhbHVlKHBhcmFtZXRlciwgcGFyYW1ldGVyQ29udGV4dCwgeyBjb250ZXh0OiBwYXJhbWV0ZXJDb250ZXh0IH0pO1xuXHRcdFx0aWYgKGhhc1ZhbHVlSGVscChwYXJhbWV0ZXIpKSB7XG5cdFx0XHRcdGFkZGl0aW9uYWxWYWx1ZSA9IGF3YWl0IHRoaXMuZ2V0QWRkaXRpb25hbFZhbHVlKHsgY29udGV4dDogcGFyYW1ldGVyQ29udGV4dCB9KTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdExvZy53YXJuaW5nKGBQYXJhbWV0ZXIgZGlhbG9nIGZpZWxkOiBkaXNwbGF5IGZvcm1hdCBjb3VsZG4ndCBiZSBjYWxjdWxhdGVkIGZvciBwYXJhbWV0ZXIgJyR7cGFyYW1ldGVyLm5hbWV9JzogJHtlcnJ9YCk7XG5cdFx0fVxuXHRcdGNvbnN0IHBsYWNlSG9sZGVyID0gcGFyYW1ldGVyLmFubm90YXRpb25zLlVJPy5QbGFjZWhvbGRlciBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxQcmltaXRpdmVUeXBlPiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBwbGFjZUhvbGRlckV4cHJlc3Npb24gPSBwbGFjZUhvbGRlciA/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihwbGFjZUhvbGRlcikpIDogdW5kZWZpbmVkO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RmllbGRcblx0XHRcdFx0ZGVsZWdhdGU9e3sgbmFtZTogXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkQmFzZURlbGVnYXRlXCIsIHBheWxvYWQ6IHsgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdDogdHJ1ZSB9IH19XG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbXCJBUERfXCIsIHBhcmFtZXRlci5uYW1lXSl9XG5cdFx0XHRcdHZhbHVlPXtiaW5kaW5nVmFsdWV9XG5cdFx0XHRcdHBsYWNlaG9sZGVyPXtwbGFjZUhvbGRlckV4cHJlc3Npb259XG5cdFx0XHRcdGRpc3BsYXk9e2Rpc3BsYXl9XG5cdFx0XHRcdGVkaXRNb2RlPXt0aGlzLmdldFBhcmFtZXRlckVkaXRNb2RlKHBhcmFtZXRlcil9XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdG11bHRpcGxlTGluZXM9e2lzTXVsdGlMaW5lVGV4dChwYXJhbWV0ZXIpfVxuXHRcdFx0XHRyZXF1aXJlZD17Y29tcGlsZUV4cHJlc3Npb24oaXNBY3Rpb25QYXJhbWV0ZXJSZXF1aXJlZEV4cHJlc3Npb24ocGFyYW1ldGVyLCB0aGlzLmFjdGlvbiwgY29udmVydFR5cGVzKHRoaXMubWV0YU1vZGVsKSkpfVxuXHRcdFx0XHRjaGFuZ2U9e2FzeW5jIChlKTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLmhhbmRsZUZpZWxkQ2hhbmdlKGUsIHBhcmFtZXRlcil9XG5cdFx0XHRcdHZhbHVlSGVscD17aGFzVmFsdWVIZWxwKHBhcmFtZXRlcikgPyBnZW5lcmF0ZShbdGhpcy5hY3Rpb25OYW1lLCBwYXJhbWV0ZXIubmFtZSwgXCJGaWVsZFZhbHVlSGVscFwiXSkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGRlcGVuZGVudHM9e3RoaXMuY3JlYXRlUGFyYW1ldGVyRGlhbG9nVmFsdWVIZWxwKHBhcmFtZXRlciwgcGFyYW1ldGVyQ29udGV4dCl9XG5cdFx0XHRcdHZpc2libGU9e2NvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdHBhcmFtZXRlci5uYW1lID09PSBcIlJlc3VsdElzQWN0aXZlRW50aXR5XCIsXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocGFyYW1ldGVyLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17W2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWUsIFwiTGFiZWxcIl0pXX1cblx0XHRcdFx0YWRkaXRpb25hbFZhbHVlPXthZGRpdGlvbmFsVmFsdWV9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgdmFsdWVIZWxwICBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyQ29udGV4dCBUaGUgcGFyYW1ldGVyIGNvbnRleHRcblx0ICogQHJldHVybnMgQSB2YWx1ZUhlbHAgaWYgdGhlIHBhcmFtZXRlciBoYXMgYSBWSCwgdW5kZWZpbmVkIG90aGVyd2lzZVxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVQYXJhbWV0ZXJEaWFsb2dWYWx1ZUhlbHAocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIsIHBhcmFtZXRlckNvbnRleHQ6IENvbnRleHQpOiBWYWx1ZUhlbHAgfCB1bmRlZmluZWQge1xuXHRcdGlmICghaGFzVmFsdWVIZWxwKHBhcmFtZXRlcikpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8VmFsdWVIZWxwXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGhpcy5hY3Rpb25OYW1lLCBwYXJhbWV0ZXIubmFtZSwgXCJGaWVsZFZhbHVlSGVscFwiXSl9XG5cdFx0XHRcdGRlbGVnYXRlPXt7XG5cdFx0XHRcdFx0bmFtZTogXCJzYXAvZmUvbWFjcm9zL3ZhbHVlaGVscC9WYWx1ZUhlbHBEZWxlZ2F0ZVwiLFxuXHRcdFx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aDogdGhpcy5hY3Rpb24uaXNCb3VuZFxuXHRcdFx0XHRcdFx0XHQ/IGAke2dldFRhcmdldE5hdmlnYXRpb25QYXRoKGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxBY3Rpb25QYXJhbWV0ZXI+KHBhcmFtZXRlckNvbnRleHQpKX0vJHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWN0aW9uTmFtZVxuXHRcdFx0XHRcdFx0XHQgIH0vJHtwYXJhbWV0ZXIubmFtZX1gXG5cdFx0XHRcdFx0XHRcdDogYC8ke3RoaXMuYWN0aW9uLm5hbWUuc3Vic3RyaW5nKHRoaXMuYWN0aW9uLm5hbWUubGFzdEluZGV4T2YoXCIuXCIpICsgMSl9LyR7cGFyYW1ldGVyLm5hbWV9YCxcblx0XHRcdFx0XHRcdHF1YWxpZmllcnM6IHt9LFxuXHRcdFx0XHRcdFx0dmFsdWVIZWxwUXVhbGlmaWVyOiBcIlwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9fVxuXHRcdFx0XHR2YWxpZGF0ZUlucHV0PXtyZXF1aXJlc1ZhbGlkYXRpb24ocGFyYW1ldGVyKX1cblx0XHRcdFx0dHlwZWFoZWFkPXtcblx0XHRcdFx0XHQ8UG9wb3Zlcj5cblx0XHRcdFx0XHRcdDxNVGFibGVcblx0XHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0aGlzLmFjdGlvbk5hbWUsIHBhcmFtZXRlci5uYW1lLCBcIlBvcG92ZXJcIiwgXCJxdWFsaWZpZXJcIl0pfVxuXHRcdFx0XHRcdFx0XHRjYXNlU2Vuc2l0aXZlPXtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFjdGlvbi5pc0JvdW5kXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IHVzZUNhc2VTZW5zaXRpdmVGaWx0ZXJSZXF1ZXN0cyhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8QWN0aW9uUGFyYW1ldGVyPihwYXJhbWV0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoY29udmVydFR5cGVzKHRoaXMubWV0YU1vZGVsKS5lbnRpdHlDb250YWluZXIuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/LkZpbHRlckZ1bmN0aW9ucyBhcyB1bmtub3duIGFzIHN0cmluZ1tdKSA/PyBbXVxuXHRcdFx0XHRcdFx0XHRcdFx0ICApXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IE1vZGVsSGVscGVyLmlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSh0aGlzLm1ldGFNb2RlbClcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR1c2VBc1ZhbHVlSGVscD17ISFwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uPy5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXN9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvUG9wb3Zlcj5cblx0XHRcdFx0fVxuXHRcdFx0XHRkaWFsb2c9e3RoaXMuY3JlYXRlRmllbGRWSERpYWxvZyhwYXJhbWV0ZXIpfVxuXHRcdFx0PjwvVmFsdWVIZWxwPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgVmFsdWVIZWxwIGRpYWxvZyBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBBIGRpYWxvZyBpZiB0aGUgcGFyYW1ldGVyIGhhcyBhIFZILCB1bmRlZmluZWQgb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZUZpZWxkVkhEaWFsb2cocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBWSERpYWxvZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHBhcmFtZXRlci5hbm5vdGF0aW9ucy5Db21tb24/LlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcz8udmFsdWVPZigpICE9PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gPFZIRGlhbG9nIC8+O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBmaWVsZCBjaGFuZ2UgZXZlbnQgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIHVpNSBldmVudFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgUHJvbWlzZS5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgaGFuZGxlRmllbGRDaGFuZ2UoZXZlbnQ6IE11bHRpVmFsdWVGaWVsZCRDaGFuZ2VFdmVudCB8IEZpZWxkJENoYW5nZUV2ZW50LCBwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGZpZWxkUHJvbWlzZSA9IChldmVudCBhcyBGaWVsZCRDaGFuZ2VFdmVudCkuZ2V0UGFyYW1ldGVyKFwicHJvbWlzZVwiKTtcblx0XHRjb25zdCBmaWVsZCA9IChldmVudCBhcyBGaWVsZCRDaGFuZ2VFdmVudCkuZ2V0U291cmNlKCkgYXMgRmllbGQgfCBNdWx0aVZhbHVlRmllbGQ7XG5cdFx0Y29uc3QgcGFyYW1ldGVySW5mbyA9IHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MuZmluZCgoYWN0aW9uUGFyYW1ldGVySW5mbykgPT4gYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZCA9PT0gZmllbGQpO1xuXHRcdGlmICghcGFyYW1ldGVySW5mbykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRwYXJhbWV0ZXJJbmZvLnZhbGlkYXRpb25Qcm9taXNlID0gZmllbGRQcm9taXNlO1xuXHRcdC8vIGZpZWxkIHZhbHVlIGlzIGJlaW5nIGNoYW5nZWQsIHRodXMgZXhpc3RpbmcgbWVzc2FnZXMgcmVsYXRlZCB0byB0aGF0IGZpZWxkIGFyZSBub3QgdmFsaWQgYW55bW9yZVxuXHRcdHRoaXMucmVtb3ZlTWVzc2FnZXNGb3JQYXJhbWV0ZXIocGFyYW1ldGVyKTtcblx0XHR0cnkge1xuXHRcdFx0cGFyYW1ldGVySW5mby52YWx1ZSA9IGF3YWl0IGZpZWxkUHJvbWlzZTtcblx0XHRcdHRoaXMucGFyYW1ldGVycy5wYXJhbWV0ZXJzVmFsdWVzW3BhcmFtZXRlckluZm8ucGFyYW1ldGVyLm5hbWVdID0gcGFyYW1ldGVySW5mby52YWx1ZTtcblx0XHRcdHBhcmFtZXRlckluZm8uaGFzRXJyb3IgPSBmYWxzZTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0ZGVsZXRlIHBhcmFtZXRlckluZm8udmFsdWU7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLmhhc0Vycm9yID0gdHJ1ZTtcblx0XHRcdEFjdGlvblJ1bnRpbWUuX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIoW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mbzogcGFyYW1ldGVySW5mbyxcblx0XHRcdFx0XHRtZXNzYWdlOiAoZXJyb3IgYXMgeyBtZXNzYWdlOiBzdHJpbmcgfSkubWVzc2FnZVxuXHRcdFx0XHR9XG5cdFx0XHRdKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgRmlsZVVwbG9hZGVyIGNoYW5nZSBldmVudCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgU0FQVUk1IGV2ZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIEZpbGVVcGxvYWRlciBjaGFuZ2UgZXZlbnQuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEByZXR1cm5zIFByb21pc2UuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGhhbmRsZUZpbGVVcGxvYWRlckNoYW5nZShldmVudDogRmlsZVVwbG9hZGVyJENoYW5nZUV2ZW50LCBwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGZpbGVzID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwiZmlsZXNcIik7XG5cdFx0Y29uc3QgZmlsZVVwbG9hZGVyID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Ly8gY29ycmVjdGlvbiBuZWVkZWQgZm9yIG11bHRpcGxlIGZpbGUgdXBsb2FkZXJzXG5cdFx0Y29uc3QgcGFyYW1ldGVySW5mbyA9IHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MuZmluZCgoYWN0aW9uUGFyYW1ldGVySW5mbykgPT4gYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZCA9PT0gZmlsZVVwbG9hZGVyKTtcblx0XHRpZiAoIXBhcmFtZXRlckluZm8gfHwgIWZpbGVzKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMucmVtb3ZlTWVzc2FnZXNGb3JQYXJhbWV0ZXIocGFyYW1ldGVyKTtcblx0XHRwYXJhbWV0ZXJJbmZvLnZhbHVlID0ge307XG5cdFx0aWYgKHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKSkge1xuXHRcdFx0cGFyYW1ldGVySW5mby52YWx1ZVt0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik/Lm5hbWUgYXMga2V5b2YgdHlwZW9mIHBhcmFtZXRlckluZm8udmFsdWVdID1cblx0XHRcdFx0YXdhaXQgdGhpcy5nZXRCYXNlNjRGaWxlKGZpbGVzKTtcblx0XHRcdHBhcmFtZXRlckluZm8udmFsdWVbKHRoaXMuZ2V0TWltZVR5cGVQYXRoKHBhcmFtZXRlcikgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPHN0cmluZz4pLnBhdGhdID1cblx0XHRcdFx0KGZpbGVzWzBdIGFzIEZpbGUpLnR5cGUgfHwgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIjtcblx0XHRcdHBhcmFtZXRlckluZm8udmFsdWVbdGhpcy5nZXRGaWxlTmFtZVBhdGgocGFyYW1ldGVyKSBhcyBzdHJpbmddID0gKGZpbGVzWzBdIGFzIEZpbGUpLm5hbWU7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLmhhc0Vycm9yID0gZmFsc2U7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMucGFyYW1ldGVyc1ZhbHVlc1twYXJhbWV0ZXJJbmZvLnBhcmFtZXRlci5uYW1lXSA9IHBhcmFtZXRlckluZm8udmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBwcm9wZXJ0eSBuYW1lIGZvciB0aGUgZmlsZSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgU3RyZWFtIHByb3BlcnR5IGluIHRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcmV0dXJucyBQYXRoIGFzIGEgc3RyaW5nLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRGaWxlTmFtZVBhdGgocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiAodGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpPy5hbm5vdGF0aW9ucy5Db3JlPy5Db250ZW50RGlzcG9zaXRpb24/LkZpbGVuYW1lIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KS5wYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBwcm9wZXJ0eSBuYW1lIGZvciB0aGUgTWltZSB0eXBlIHdpdGggdGhlIGFzc29jaWF0ZWQgU3RyZWFtIHByb3BlcnR5IGluIHRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcmV0dXJucyBUaGUgcGF0aCBleHByZXNzaW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRNaW1lVHlwZVBhdGgocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik/LmFubm90YXRpb25zLkNvcmU/Lk1lZGlhVHlwZSk7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIFN0cmVhbSBwcm9wZXJ0eSBhc3NvY2lhdGVkIHdpdGggdGhlIENvbXBsZXggdHlwZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcmV0dXJucyBUaGUgRWRtLlN0cmVhbSBwcm9wZXJ0eS5cblx0ICovXG5cdHByaXZhdGUgZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBQcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIChwYXJhbWV0ZXIudHlwZVJlZmVyZW5jZSBhcyBDb21wbGV4VHlwZSkucHJvcGVydGllcz8uZmluZCgocHJvcGVydHkpID0+IHByb3BlcnR5LnR5cGUgPT09IFwiRWRtLlN0cmVhbVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgY29udGVudCBvZiB0aGUgZmlsZS5cblx0ICogQHBhcmFtIGZpbGVzIFRoZSBmaWxlIHNlbGVjdGVkLlxuXHQgKiBAcmV0dXJucyBUaGUgZmlsZSBjb250ZW50LlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRCYXNlNjRGaWxlKGZpbGVzOiBvYmplY3RbXSk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXHRcdFx0cmVhZGVyLm9ubG9hZCA9ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKCFyZWFkZXIucmVzdWx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlc29sdmUoKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKS5zcGxpdChcIixcIilbMV0pO1xuXHRcdFx0fTtcblx0XHRcdHJlYWRlci5yZWFkQXNEYXRhVVJMKChmaWxlcyBhcyB1bmtub3duIGFzIEZpbGVMaXN0KS5pdGVtKDApISk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgbWVzc2FnZXMgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICovXG5cdHByaXZhdGUgcmVtb3ZlTWVzc2FnZXNGb3JQYXJhbWV0ZXIocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiB2b2lkIHtcblx0XHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0Y29uc3QgY29udHJvbElkID0gZ2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIubmFtZV0pO1xuXHRcdC8vIGFsc28gcmVtb3ZlIG1lc3NhZ2VzIGFzc2lnbmVkIHRvIGlubmVyIGNvbnRyb2xzLCBidXQgYXZvaWQgcmVtb3ZpbmcgbWVzc2FnZXMgZm9yIGRpZmZlcmVudCBwYXJhbWV0ZXJzICh3aXRoIG5hbWUgYmVpbmcgc3Vic3RyaW5nIG9mIGFub3RoZXIgcGFyYW1ldGVyIG5hbWUpXG5cdFx0Y29uc3QgcmVsZXZhbnRNZXNzYWdlcyA9IG1lc3NhZ2VzLmZpbHRlcigobXNnOiBNZXNzYWdlKSA9PlxuXHRcdFx0bXNnLmdldENvbnRyb2xJZHMoKS5zb21lKChpZDogc3RyaW5nKSA9PiBjb250cm9sSWQuc3BsaXQoXCItXCIpLmluY2x1ZGVzKGlkKSlcblx0XHQpO1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhyZWxldmFudE1lc3NhZ2VzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBGb3JtRWxlbWVudHMgYWxvbmcgd2l0aCB0aGUgYXJyYXkgb2YgcGFyYW1ldGVycy5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFRoZSBwYXJhbWV0ZXIgaW5mb3JtYXRpb24gYWxvbmcgd2l0aCB0aGUgRm9ybUVsZW1lbnRzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRGb3JtRWxlbWVudHMocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBQcm9taXNlPERpYWxvZ0NvbnRlbnRUeXBlcz4ge1xuXHRcdGNvbnN0IGZvcm1FbGVtZW50cyA9IGF3YWl0IHRoaXMuY3JlYXRlRm9ybUVsZW1lbnQocGFyYW1ldGVyKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Zm9ybUVsZW1lbnRzOiBmb3JtRWxlbWVudHMsXG5cdFx0XHRwYXJhbWV0ZXI6IHBhcmFtZXRlclxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIFRoZSBkaWFsb2cgb3IgdW5kZWZpbmVkLlxuXHQgKi9cblx0Z2V0RGlhbG9nKCk6IERpYWxvZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZGlhbG9nO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBUaGUgZGlhbG9nLlxuXHQgKi9cblx0YXN5bmMgY3JlYXRlRGlhbG9nKCk6IFByb21pc2U8RGlhbG9nPiB7XG5cdFx0bGV0IGRpYWxvZ0NvbnRlbnRzOiBGb3JtRWxlbWVudFR5cGVbXSA9IFtdO1xuXHRcdGxldCBkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzOiBEaWFsb2dDb250ZW50VHlwZXNbXSA9IFtdO1xuXHRcdGNvbnN0IGFjdGlvblBhcmFtZXRlcnMgPSB0aGlzLmFjdGlvbi5pc0JvdW5kID8gdGhpcy5hY3Rpb24ucGFyYW1ldGVycy5zbGljZSgxKSA6IHRoaXMuYWN0aW9uLnBhcmFtZXRlcnM7XG5cblx0XHQvLyBJZiBPcGVyYXRpb25hbFBhcmFtZXRlckZhY2V0cyBoYXZlIGJlZW4gZGVmaW5lZCBmb3IgdGhpcyBhY3Rpb24sIHRoZXkgYXJlIHVzZWQgdG8gZ3JvdXAgdGhlIGFjdGlvbiBwYXJhbWV0ZXJzXG5cdFx0Ly8gd2l0aCB0aXRsZXNcblx0XHRpZiAodGhpcy5hY3Rpb24uYW5ub3RhdGlvbnM/LlVJPy5PcGVyYXRpb25QYXJhbWV0ZXJGYWNldHMpIHtcblx0XHRcdGNvbnN0IGFjdGlvblBhcmFtZXRlckdyb3VwczogRWxlbWVudEdyb3VwW10gPSBbXTtcblx0XHRcdHRoaXMuYWN0aW9uLmFubm90YXRpb25zLlVJPy5PcGVyYXRpb25QYXJhbWV0ZXJGYWNldHM/LmZvckVhY2goZnVuY3Rpb24gKGZhY2V0OiBSZWZlcmVuY2VGYWNldCkge1xuXHRcdFx0XHRsZXQgZmFjZXRUaXRsZTtcblx0XHRcdFx0aWYgKGZhY2V0LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCkge1xuXHRcdFx0XHRcdGZhY2V0VGl0bGUgPSBmYWNldC5MYWJlbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaGFzRmllbGRHcm91cFRhcmdldChmYWNldCkpIHtcblx0XHRcdFx0XHRjb25zdCBmaWVsZEdyb3VwID0gZmFjZXQ/LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwVHlwZTtcblx0XHRcdFx0XHRjb25zdCBncm91cGVkQWN0aW9uUGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyW10gPSBbXTtcblxuXHRcdFx0XHRcdGZpZWxkR3JvdXAuRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChncm91cDogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0Z3JvdXBlZEFjdGlvblBhcmFtZXRlcnMucHVzaCgoZ3JvdXAgYXMgRGF0YUZpZWxkKS5WYWx1ZS4kdGFyZ2V0IGFzIEFjdGlvblBhcmFtZXRlcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVyR3JvdXBzLnB1c2goe1xuXHRcdFx0XHRcdFx0ZmFjZXRUaXRsZTogZmFjZXRUaXRsZSBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxzdHJpbmc+IHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0ZGF0YTogZ3JvdXBlZEFjdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEdldCB0aGUgZmllbGRzIGZvciBlYWNoIHBhcmFtZXRlciBncm91cFxuXHRcdFx0Y29uc3QgZ2V0R3JvdXBGb3JtID0gYXN5bmMgKGdyb3VwOiBFbGVtZW50R3JvdXApOiBQcm9taXNlPEVsZW1lbnRHcm91cENvbnZlcnRlZD4gPT4ge1xuXHRcdFx0XHRjb25zdCBmb3JtRWxlbWVudHMgPSBhd2FpdCBQcm9taXNlLmFsbChncm91cC5kYXRhLm1hcCh0aGlzLmdldEZvcm1FbGVtZW50cy5iaW5kKHRoaXMpKSk7XG5cdFx0XHRcdHJldHVybiB7IGZhY2V0VGl0bGU6IGdyb3VwLmZhY2V0VGl0bGUsIGRhdGE6IGZvcm1FbGVtZW50cyB9O1xuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3QgZm9ybURhdGEgPSBhY3Rpb25QYXJhbWV0ZXJHcm91cHMubWFwKGFzeW5jIChwYXJhbWV0ZXJHcm91cCkgPT4gZ2V0R3JvdXBGb3JtKHBhcmFtZXRlckdyb3VwKSk7XG5cdFx0XHRjb25zdCBvcEZhY2V0cyA9IGF3YWl0IFByb21pc2UuYWxsKGZvcm1EYXRhKTtcblxuXHRcdFx0Ly8gQWRkIHRoZSB0aXRsZSBjb250cm9sIHRvIGVhY2ggcGFyYW1ldGVyIGdyb3VwXG5cdFx0XHRvcEZhY2V0cy5mb3JFYWNoKChkaWFsb2dDb250ZW50KSA9PiB7XG5cdFx0XHRcdGRpYWxvZ0NvbnRlbnRzLnB1c2goPFRpdGxlIHRleHQ9e2RpYWxvZ0NvbnRlbnQuZmFjZXRUaXRsZX0gLz4pO1xuXHRcdFx0XHRyZXR1cm4gZGlhbG9nQ29udGVudC5kYXRhLm1hcCgoZWxlbWVudCkgPT4gZGlhbG9nQ29udGVudHMucHVzaChlbGVtZW50LmZvcm1FbGVtZW50cykpO1xuXHRcdFx0fSk7XG5cblx0XHRcdG9wRmFjZXRzLmZvckVhY2goZnVuY3Rpb24gKG9wRmFjZXQpIHtcblx0XHRcdFx0b3BGYWNldC5kYXRhLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRcdFx0XHRkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzLnB1c2goZWxlbWVudCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vIE9wZXJhdGlvblBhcmFtZXRlckZhY2V0cyBoYXZlIGJlZW4gZGVmaW5lZFxuXHRcdFx0ZGlhbG9nQ29udGVudHNXaXRoUGFyYW1ldGVycyA9IGF3YWl0IFByb21pc2UuYWxsKGFjdGlvblBhcmFtZXRlcnMubWFwKHRoaXMuZ2V0Rm9ybUVsZW1lbnRzLmJpbmQodGhpcykpKTtcblx0XHRcdGRpYWxvZ0NvbnRlbnRzID0gZGlhbG9nQ29udGVudHNXaXRoUGFyYW1ldGVycy5tYXAoKGRpYWxvZ0NvbnRlbnQpID0+IHtcblx0XHRcdFx0cmV0dXJuIGRpYWxvZ0NvbnRlbnQuZm9ybUVsZW1lbnRzO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5yZWdpc3RlckFjdGlvblBhcmFtZXRlckluZm8oZGlhbG9nQ29udGVudHNXaXRoUGFyYW1ldGVycyk7XG5cblx0XHQvLyBJbiBjYXNlIG9mIGRlZmVycmVkIGNyZWF0ZSB3ZSBoYXZlIG5vIHZpZXcsIHNvIHdlIG5lZWQgdG8gZ2V0IHRoZSByZXNvdXJjZSBtb2RlbCBmcm9tIHRoZSBhcHAgY29tcG9uZW50XG5cblx0XHRjb25zdCBtZXNzYWdlU3RyaXAgPSB0aGlzLmdldEN1c3RvbUFjdGlvbk1lc3NhZ2VTdHJpcFRleHQoKTtcblxuXHRcdGNvbnN0IGVuZEJ1dHRvbiA9IChcblx0XHRcdDxCdXR0b25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcImZlXCIsIFwiQVBEX1wiLCB0aGlzLmFjdGlvbk5hbWUsIFwiQWN0aW9uXCIsIFwiQ2FuY2VsXCJdKX1cblx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19DQU5DRUxcIil9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vbkNhbmNlbC5iaW5kKHRoaXMpKCk7XG5cdFx0XHRcdH19XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0Y29uc3QgZGlhbG9nID0gKFxuXHRcdFx0PERpYWxvZ1xuXHRcdFx0XHR0aXRsZT17dGhpcy5nZXRUaXRsZVRleHQodGhpcy5wYXJhbWV0ZXJzLmxhYmVsKX1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcImZlXCIsIFwiQVBEX1wiLCB0aGlzLmFjdGlvbk5hbWVdKX1cblx0XHRcdFx0ZXNjYXBlSGFuZGxlcj17dGhpcy5vbkNhbmNlbC5iaW5kKHRoaXMpfVxuXHRcdFx0XHRkcmFnZ2FibGU9e3RydWV9XG5cdFx0XHRcdHJlc2l6YWJsZT17dHJ1ZX1cblx0XHRcdFx0YWZ0ZXJDbG9zZT17dGhpcy5hZnRlckNsb3NlLmJpbmQodGhpcyl9XG5cdFx0XHRcdGJlZm9yZU9wZW49e3RoaXMuYmVmb3JlT3Blbi5iaW5kKHRoaXMpfVxuXHRcdFx0XHRhZnRlck9wZW49eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmFmdGVyT3BlbigpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRpbml0aWFsRm9jdXM9e2VuZEJ1dHRvbn0gLy8gVGhlIGluaXRpYWwgZm9jdXMgaXMgc2V0IHByb2dyYW1tYXRpY2FsbHkgaW4gYWZ0ZXJPcGVuLCB0byBhdm9pZCBvcGVuaW5nIHRoZSBWSCBkaWFsb2dcblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRiZWdpbkJ1dHRvbjogKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHRoaXMuYWN0aW9uTmFtZSwgXCJBY3Rpb25cIiwgXCJPa1wiXSl9XG5cdFx0XHRcdFx0XHRcdHRleHQ9e1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMucGFyYW1ldGVycy5pc0NyZWF0ZUFjdGlvbiA9PT0gdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0PyB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX1NBUEZFX0FDVElPTl9DUkVBVEVfQlVUVE9OX0NPTlRJTlVFXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZ2V0QmVnaW5CdXR0b25MYWJlbCh0aGlzLnBhcmFtZXRlcnMubGFiZWwpXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uQXBwbHkuYmluZCh0aGlzKSgpO1xuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiRW1waGFzaXplZFwiXG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0ZW5kQnV0dG9uOiBlbmRCdXR0b24sXG5cdFx0XHRcdFx0Y29udGVudDogKFxuXHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZSAodW5rbm93biBwcm9wZXJ0eSBiaW5kaW5nKVxuXHRcdFx0XHRcdFx0Ly8gY29sdW1uc00gb25seSB0YWtlcyBlZmZlY3QgaWYgdGhlcmUgYXJlIHRpdGxlcyBpbiB0aGUgY29udGVudC5cblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdHttZXNzYWdlU3RyaXAgJiYgPE1lc3NhZ2VTdHJpcCBzaG93SWNvbj1cInRydWVcIiB0ZXh0PXttZXNzYWdlU3RyaXB9PjwvTWVzc2FnZVN0cmlwPn1cblx0XHRcdFx0XHRcdFx0PFNpbXBsZUZvcm0gY29sdW1uc009e1wiMlwifSBlZGl0YWJsZT1cInRydWVcIiBsYWJlbFNwYW5MPXtcIjEyXCJ9IGxhYmVsU3Bhbk09e1wiMTJcIn0gYmluZGluZz17XCIkUGFyYW1ldGVyXCJ9PlxuXHRcdFx0XHRcdFx0XHRcdHt7IGNvbnRlbnQ6IGRpYWxvZ0NvbnRlbnRzIH19XG5cdFx0XHRcdFx0XHRcdDwvU2ltcGxlRm9ybT5cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvRGlhbG9nPlxuXHRcdCk7XG5cdFx0dGhpcy5kaWFsb2cgPSBkaWFsb2c7XG5cdFx0cmV0dXJuIGRpYWxvZztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBsYWJlbCBmb3IgdGhlIGJlZ2luIGJ1dHRvbiBvZiB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gYWN0aW9uTGFiZWwgVGhlIGxhYmVsIG9mIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgVGhlIGxhYmVsLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRCZWdpbkJ1dHRvbkxhYmVsKGFjdGlvbkxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGtleSA9IFwiQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfQUNUSU9OX05BTUVcIjtcblx0XHRjb25zdCBkZWZhdWx0S2V5ID0gXCJDX0NPTU1PTl9ESUFMT0dfT0tcIjtcblx0XHRyZXR1cm4gdGhpcy5nZXRPdmVycmlkZGVuVGV4dChrZXksIGRlZmF1bHRLZXksIGFjdGlvbkxhYmVsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB0aXRsZSBvZiB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gYWN0aW9uTGFiZWwgVGhlIGxhYmVsIG9mIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgVGhlIHRpdGxlLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRUaXRsZVRleHQoYWN0aW9uTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qga2V5ID0gXCJBQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19BQ1RJT05fVElUTEVcIjtcblx0XHRjb25zdCBkZWZhdWx0S2V5ID0gXCJDX09QRVJBVElPTlNfQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfVElUTEVcIjtcblx0XHRyZXR1cm4gdGhpcy5nZXRPdmVycmlkZGVuVGV4dChrZXksIGRlZmF1bHRLZXksIGFjdGlvbkxhYmVsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGFuIG92ZXJyaWRkZW4gdGV4dCBmb3IgbWVzc2FnZSBzdHJpcC5cblx0ICogQHJldHVybnMgVGhlIG92ZXJyaWRkZW4gdGV4dCBmb3IgbWVzc2FnZSBzdHJpcC5cblx0ICovXG5cdHByaXZhdGUgZ2V0Q3VzdG9tQWN0aW9uTWVzc2FnZVN0cmlwVGV4dCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGtleSA9IFwiQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfTUVTU0FHRV9URVhUXCI7XG5cdFx0bGV0IGJvdW5kQWN0aW9uTmFtZSA9IHRoaXMuYWN0aW9uTmFtZTtcblx0XHRib3VuZEFjdGlvbk5hbWUgPSBib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpLnBvcCgpID8/IGJvdW5kQWN0aW9uTmFtZTtcblx0XHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJvdW5kQWN0aW9uTmFtZSAmJiB0aGlzLmVudGl0eVNldE5hbWUgPyBgJHt0aGlzLmVudGl0eVNldE5hbWV9fCR7Ym91bmRBY3Rpb25OYW1lfWAgOiBcIlwiO1xuXHRcdGlmICh0aGlzLnJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke2tleX18JHtzdWZmaXhSZXNvdXJjZUtleX1gKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGtleSwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLnJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke2tleX18JHt0aGlzLmVudGl0eVNldE5hbWV9YCkpIHtcblx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXksIHVuZGVmaW5lZCwgYCR7dGhpcy5lbnRpdHlTZXROYW1lfWApO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtrZXl9YCkpIHtcblx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgYW4gb3ZlcnJpZGRlbiB0ZXh0LlxuXHQgKiBAcGFyYW0ga2V5IFRoZSBrZXkgZm9yIGFuIG92ZXJyaWRkZW4gdGV4dFxuXHQgKiBAcGFyYW0gZGVmYXVsdEtleSBUaGUgZGVmYXVsdCBrZXkgZm9yIHRoZSB0ZXh0XG5cdCAqIEBwYXJhbSBhY3Rpb25MYWJlbCBUaGUgbGFiZWwgb2YgdGhlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgb3ZlcnJpZGRlbiB0ZXh0IG9yIGxhYmVsLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRPdmVycmlkZGVuVGV4dChrZXk6IHN0cmluZywgZGVmYXVsdEtleTogc3RyaW5nLCBhY3Rpb25MYWJlbD86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0bGV0IGJvdW5kQWN0aW9uTmFtZSA9IHRoaXMuYWN0aW9uTmFtZTtcblx0XHRib3VuZEFjdGlvbk5hbWUgPSBib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpLnBvcCgpID8/IGJvdW5kQWN0aW9uTmFtZTtcblx0XHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJvdW5kQWN0aW9uTmFtZSAmJiB0aGlzLmVudGl0eVNldE5hbWUgPyBgJHt0aGlzLmVudGl0eVNldE5hbWV9fCR7Ym91bmRBY3Rpb25OYW1lfWAgOiBcIlwiO1xuXHRcdGlmIChhY3Rpb25MYWJlbCkge1xuXHRcdFx0aWYgKHRoaXMucmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7a2V5fXwke3N1ZmZpeFJlc291cmNlS2V5fWApKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXksIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke2tleX18JHt0aGlzLmVudGl0eVNldE5hbWV9YCkpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGtleSwgdW5kZWZpbmVkLCBgJHt0aGlzLmVudGl0eVNldE5hbWV9YCk7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7a2V5fWApKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGFjdGlvbkxhYmVsO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoZGVmYXVsdEtleSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIHByZXNzIGV2ZW50IG9mIHRoZSBiZWdpbiBidXR0b24gb2YgdGhlIGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2UuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIG9uQXBwbHkoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gcHJldmVudCBtdWx0aXBsZSBwcmVzcyBldmVudHMuIFRoZSBCdXN5TG9ja2VyIGlzIG5vdCBmYXN0IGVub3VnaC4gKEJDUDogMjM3MDEzMDIxMClcblx0XHRpZiAodGhpcy5idXR0b25Mb2NrIHx8ICF0aGlzLmRpYWxvZykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBkaWFsb2cgPSB0aGlzLmRpYWxvZztcblxuXHRcdGNvbnN0IHBhcmFtZXRlckNvbnRleHQgPSAoZGlhbG9nLmdldE9iamVjdEJpbmRpbmcoKSBhcyBPRGF0YUNvbnRleHRCaW5kaW5nIHwgdW5kZWZpbmVkKT8uZ2V0UGFyYW1ldGVyQ29udGV4dCgpO1xuXG5cdFx0Ly8gbG9jayB0aGUgYnV0dG9uIHRvIHByZXZlbnQgbXVsdGlwbGUgcHJlc3MgZXZlbnRzXG5cdFx0dGhpcy5idXR0b25Mb2NrID0gdHJ1ZTtcblx0XHRCdXN5TG9ja2VyLmxvY2soZGlhbG9nKTtcblxuXHRcdC8vIHZhbGlkYXRlIHRoZSBhY3Rpb24gcGFyYW1ldGVycy4gSXQgaXMgaW1wb3J0YW50IHRvIGRvIHRoaXMgYXMgYSBmaXJzdCBvcGVyYXRpb24gYXMgdGhlcmUgaXMgYVxuXHRcdC8vIHdhaXQgZG9uZSBmb3IgdGhlIHZhbHVlIGNoYW5nZXMgdG8gY29tcGxldGUgdXBkYXRpbmcgdGhlIG1vZGVsLiBFdmVuIGluIGNhc2VzIHdoZXJlIHZhbGlkYXRpb24gaXNcblx0XHQvLyBub3QgY29uZmlndXJlZCB0aGlzIHByb21pc2UgbmVlZHMgdG8gYmUgcmVzb2x2ZWQgdG8gcmVhZCBmcm9tIHRoZSBtb2RlbCB0byByZXR1cm4gdXNlciBlbnRlcmVkIHZhbHVlcy5cblx0XHRpZiAoIShhd2FpdCBBY3Rpb25SdW50aW1lLnZhbGlkYXRlUHJvcGVydGllcyh0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLCB0aGlzLnJlc291cmNlTW9kZWwpKSkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2soZGlhbG9nKTtcblx0XHRcdHRoaXMuYnV0dG9uTG9jayA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IG5ld1ZhbHVlc0RpY3Rpb25hcnkgPSBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHQuLi50aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLm1hcCgoYWN0aW9uUGFyYW1ldGVySW5mb3MpID0+IHtcblx0XHRcdFx0Y29uc3QgcGFyYW1ldGVyID0gYWN0aW9uUGFyYW1ldGVySW5mb3MucGFyYW1ldGVyO1xuXHRcdFx0XHRsZXQgdmFsdWU7XG5cdFx0XHRcdGlmIChwYXJhbWV0ZXIuaXNDb2xsZWN0aW9uKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBPYmplY3QudmFsdWVzKChkaWFsb2cuZ2V0TW9kZWwoXCJtdmZ2aWV3XCIpIGFzIEpTT05Nb2RlbCkuZ2V0UHJvcGVydHkoYC8ke3BhcmFtZXRlci5uYW1lfWApID8/IHt9KS5tYXAoXG5cdFx0XHRcdFx0XHQocGFyYW1WYWx1ZSkgPT4gKHBhcmFtVmFsdWUgYXMgeyBLZXk/OiBQcmltaXRpdmVUeXBlIH0pPy5LZXlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFwYXJhbWV0ZXIudHlwZS5zdGFydHNXaXRoKFwiRWRtLlwiKSAmJiB0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcikpIHtcblx0XHRcdFx0XHQvLyBGaWxlIFVwbG9hZGVyXG5cdFx0XHRcdFx0dmFsdWUgPSBhY3Rpb25QYXJhbWV0ZXJJbmZvcy52YWx1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHBhcmFtZXRlckNvbnRleHQ/LmdldFByb3BlcnR5KHBhcmFtZXRlci5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4geyBbcGFyYW1ldGVyLm5hbWVdOiB2YWx1ZSB9O1xuXHRcdFx0fSlcblx0XHQpIGFzIFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+O1xuXHRcdGNvbnN0IGlzTmV3VmFsdWUgPSBPYmplY3QudmFsdWVzKG5ld1ZhbHVlc0RpY3Rpb25hcnkpLnNvbWUoKHZhbHVlKSA9PiAhIXZhbHVlKTtcblxuXHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Jlc29sdmUobmV3VmFsdWVzRGljdGlvbmFyeSk7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LmdldE1vZGVsKFwidWlcIikuc2V0UHJvcGVydHkoVWlNb2RlbENvbnN0YW50cy5Eb2N1bWVudE1vZGlmaWVkLCBpc05ld1ZhbHVlKTtcblx0XHQvLyBEdWUgdG8gdXNpbmcgdGhlIHNlYXJjaCBhbmQgdmFsdWUgaGVscHMgb24gdGhlIGFjdGlvbiBkaWFsb2cgdHJhbnNpZW50IG1lc3NhZ2VzIGNvdWxkIGFwcGVhclxuXHRcdC8vIHdlIG5lZWQgYW4gVVggZGVzaWduIGZvciB0aG9zZSB0byBzaG93IHRoZW0gdG8gdGhlIHVzZXIgLSBmb3Igbm93IHJlbW92ZSB0aGVtIGJlZm9yZSBjb250aW51aW5nXG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNldCB0aGUgc3RhdGUgb2YgdGhlIGRpYWxvZyB0byBzdGFydCBhIG5ldyBpdGVyYXRpb24uXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgcmVzZXRTdGF0ZSgpOiB2b2lkIHtcblx0XHR0aGlzLnVubG9ja0RpYWxvZygpO1xuXHRcdHRoaXMuYnV0dG9uTG9jayA9IGZhbHNlO1xuXHRcdHRoaXMudXBkYXRlRGlhbG9nQmluZGluZ0NvbnRleHRGb3JFcnJvcigpO1xuXHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1JlamVjdCA9IHJlamVjdDtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFuZ2UgdGhlIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgZGlhbG9nIHRvIG9uZSB3aXRoIHByaW9yaXR5IG1lc3NhZ2UuXG5cdCAqXG5cdCAqIE9uIGluaXRpYWwgYWN0aW9uIGV4ZWN1dGlvbiwgd2UgbWlnaHQgaGF2ZSBib3VuZCBtZXNzYWdlcyB3aXRoIGFueSBzZWxlY3RlZCBjb250ZXh0cyBhcyB0YXJnZXQgYXBhcnQgZnJvbSB0aGUgZGlhbG9nJ3MgaW5pdGlhbCBjb250ZXh0LlxuXHQgKiBXZSBjaGFuZ2UgdGhlIGJpbmRpbmcgY29udGV4dCBvZiBkaWFsb2cgZm9yIHRoZSBwYXJhbWV0ZXIgZmllbGRzJyB0byBnZXQgdGhlIHZhbGlkIHZhbHVlIHN0YXRlIGZyb20gdGhlIHByaW9yaXR5IGJvdW5kIG1lc3NhZ2UuXG5cdCAqL1xuXHR1cGRhdGVEaWFsb2dCaW5kaW5nQ29udGV4dEZvckVycm9yKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoIDwgMikge1xuXHRcdFx0Ly8gV2Ugd291bGQgbmVlZCB0byBzd2l0Y2ggdGhlIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgZGlhbG9nIG9ubHkgd2hlbiB3ZSBoYXZlIG11bHRpcGxlIGNvbnRleHRzIGZvciBleGVjdXRpbmcgdGhlIGFjdGlvbi5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgd2FybmluZ0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLCBpbmZvQ29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZXJyb25lb3VzQ3R4ID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmZpbmQoKGNvbnRleHQpID0+IHtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzID0gY29udGV4dC5nZXRNZXNzYWdlcygpO1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2VzLnNvbWUoKG1zZykgPT4ge1xuXHRcdFx0XHQvLyBXZSBob2xkIGZpcnN0IGNvbnRleHQgd2l0aCB3YXJuaW5nIG9yIGluZm8gbWVzc2FnZXMuXG5cdFx0XHRcdHdhcm5pbmdDb250ZXh0ID0gIXdhcm5pbmdDb250ZXh0ICYmIG1zZy5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLldhcm5pbmcgPyBjb250ZXh0IDogdW5kZWZpbmVkO1xuXHRcdFx0XHRpbmZvQ29udGV4dCA9ICFpbmZvQ29udGV4dCAmJiBtc2cuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbiA/IGNvbnRleHQgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdC8vIEVycm9yIGlzIGZvdW5kISEhIFdlIHNoYWxsIGV4aXQuXG5cdFx0XHRcdHJldHVybiBtc2cuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdGNvbnN0IGNvbnRleHRUb1VzZSA9IGVycm9uZW91c0N0eCA/PyB3YXJuaW5nQ29udGV4dCA/PyBpbmZvQ29udGV4dDtcblxuXHRcdGlmIChjb250ZXh0VG9Vc2UpIHtcblx0XHRcdHRoaXMuZGlhbG9nPy5zZXRCaW5kaW5nQ29udGV4dChjb250ZXh0VG9Vc2UpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBidXN5IHN0YXRlIG9mIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRwcml2YXRlIHVubG9ja0RpYWxvZygpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5kaWFsb2cgJiYgQnVzeUxvY2tlci5pc0xvY2tlZCh0aGlzLmRpYWxvZykpIHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMuZGlhbG9nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgdGhlIGNhbmNlbCBhY3Rpb24gb2YgdGhlIGRpYWxvZy5cblx0ICovXG5cdHByaXZhdGUgb25DYW5jZWwoKTogdm9pZCB7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzVmFsdWVzUmVqZWN0KEZFTGlicmFyeS5Db25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKTtcblx0XHR0aGlzLmNsb3NlRGlhbG9nKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRwdWJsaWMgY2xvc2VEaWFsb2coKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZGlhbG9nKSB7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblBhcmFtZXRlckRpYWxvZ0Nsb3NlZD8uKCk7XG5cdFx0XHQvLyB3aGVuIHRoZSBkaWFsb2cgaXMgY2FuY2VsbGVkLCBtZXNzYWdlcyBuZWVkIHRvIGJlIHJlbW92ZWQgaW4gY2FzZSB0aGUgc2FtZSBhY3Rpb24gc2hvdWxkIGJlIGV4ZWN1dGVkIGFnYWluXG5cdFx0XHRmb3IgKGNvbnN0IGkgaW4gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcykge1xuXHRcdFx0XHR0aGlzLnJlbW92ZU1lc3NhZ2VzRm9yUGFyYW1ldGVyKHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3NbaV0ucGFyYW1ldGVyKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuZGlhbG9nLmNsb3NlKCk7XG5cdFx0fVxuXHRcdHRoaXMuaXNEaWFsb2dPcGVuID0gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIGFjdGlvbiByZXN1bHQuXG5cdCAqL1xuXHRhc3luYyBvcGVuRGlhbG9nKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghdGhpcy5kaWFsb2cpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkVycm9yIG9uIG9wZW5pbmcgdGhlIGRpYWxvZ1wiKTtcblx0XHR9XG5cdFx0YXdhaXQgQ29tbW9uVXRpbHMuc2V0VXNlckRlZmF1bHRzKFxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudCxcblx0XHRcdHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MubWFwKChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PiBhY3Rpb25QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlciksXG5cdFx0XHR0aGlzLnBhcmFtZXRlck1vZGVsLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdFx0dGhpcy5zZXRNb2RlbHModGhpcy5kaWFsb2cpO1xuXHRcdHRoaXMucGFyYW1ldGVycy52aWV3Py5hZGREZXBlbmRlbnQodGhpcy5kaWFsb2cpO1xuXHRcdGF3YWl0IHRoaXMuc2V0T3BlcmF0aW9uRGVmYXVsdFZhbHVlcyh0aGlzLmRpYWxvZyk7XG5cdFx0dGhpcy5kaWFsb2cub3BlbigpO1xuXHRcdHRoaXMuaXNEaWFsb2dPcGVuID0gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBtb2RlbCBjb25maWd1cmF0aW9uIGZvciB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gZGlhbG9nIFRoZSBvd25lciBvZiB0aGUgZGlhbG9nXG5cdCAqL1xuXHRwcml2YXRlIHNldE1vZGVscyhkaWFsb2c6IERpYWxvZyk6IHZvaWQge1xuXHRcdGRpYWxvZy5zZXRNb2RlbCh0aGlzLnBhcmFtZXRlck1vZGVsLCBcInBhcmFtc01vZGVsXCIpO1xuXHRcdGRpYWxvZy5iaW5kRWxlbWVudCh7XG5cdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdG1vZGVsOiBcInBhcmFtc01vZGVsXCJcblx0XHR9KTtcblx0XHRkaWFsb2cuc2V0TW9kZWwodGhpcy5wYXJhbWV0ZXJzLm1vZGVsKTtcblx0XHRkaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0cGF0aDogYCR7dGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA/IFwiXCIgOiBcIi9cIn0ke3RoaXMuYWN0aW9uTmFtZX0oLi4uKWBcblx0XHR9KTtcblxuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRkaWFsb2cuc2V0QmluZGluZ0NvbnRleHQodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdKTsgLy8gdXNlIGNvbnRleHQgb2YgZmlyc3Qgc2VsZWN0ZWQgbGluZSBpdGVtXG5cdFx0fVxuXHRcdC8vIGVtcHR5IG1vZGVsIHRvIGFkZCBlbGVtZW50cyBkeW5hbWljYWxseSBkZXBlbmRpbmcgb24gbnVtYmVyIG9mIE1WRiBmaWVsZHMgZGVmaW5lZCBvbiB0aGUgZGlhbG9nXG5cdFx0ZGlhbG9nLnNldE1vZGVsKG5ldyBKU09OTW9kZWwoe30pLCBcIm12ZnZpZXdcIik7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgbWVzc2FnZXMgYmVmb3JlIG9wZW5pbmcgdGhlIGRpYWxvZy5cblx0ICogQHBhcmFtIF9ldmVudFxuXHQgKi9cblx0cHJpdmF0ZSBiZWZvcmVPcGVuKF9ldmVudDogRGlhbG9nJEJlZm9yZU9wZW5FdmVudCk6IHZvaWQge1xuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogV2FpdCBmb3IgdGhlIHBhcmFtZXRlciB2YWx1ZXMgdG8gYmUgc2V0LlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIGNvbnRhaW5pbmcgdGhlIHBhcmFtZXRlciB2YWx1ZXMuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgd2FpdEZvclBhcmFtZXRlcnNWYWx1ZXMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPj4ge1xuXHRcdHJldHVybiB0aGlzLnBhcmFtZXRlcnNWYWx1ZXNQcm9taXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgaWYgdGhlIGRpYWxvZyBpcyBvcGVuZWQuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRpYWxvZyBpcyBvcGVuZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdHB1YmxpYyBpc09wZW4oKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaXNEaWFsb2dPcGVuO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBiaW5kaW5nUGFyYW1ldGVyIFRoZSBiaW5kaW5nIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gZGlhbG9nIFRoZSBkaWFsb2dcblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIGRlZmF1bHQgdmFsdWVzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUoXG5cdFx0cGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIsXG5cdFx0YmluZGluZ1BhcmFtZXRlcjogc3RyaW5nLFxuXHRcdGRpYWxvZzogRGlhbG9nXG5cdCk6IFByb21pc2U8UGFyYW1ldGVyRGVmYXVsdFZhbHVlPiB7XG5cdFx0Y29uc3Qgb3BlcmF0aW9uQmluZGluZyA9IGRpYWxvZy5nZXRPYmplY3RCaW5kaW5nKCkgYXMgT0RhdGFDb250ZXh0QmluZGluZztcblx0XHRjb25zdCBwYXJhbWV0ZXJNb2RlbERhdGEgPSB0aGlzLnBhcmFtZXRlck1vZGVsLmdldERhdGEoKTtcblx0XHRjb25zdCBwYXJhbU5hbWUgPSBwYXJhbWV0ZXIubmFtZTtcblx0XHRjb25zdCBkZWZhdWx0VmFsdWUgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuVUk/LlBhcmFtZXRlckRlZmF1bHRWYWx1ZTtcblx0XHQvLyBDYXNlIDE6IFRoZXJlIGlzIGEgUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGFubm90YXRpb25cblx0XHRpZiAoZGVmYXVsdFZhbHVlKSB7XG5cdFx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA+IDAgJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oZGVmYXVsdFZhbHVlKSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IHBhdGhGb3JDb250ZXh0OiBzdHJpbmcgPVxuXHRcdFx0XHRcdFx0YmluZGluZ1BhcmFtZXRlciAmJiBkZWZhdWx0VmFsdWUucGF0aC5zdGFydHNXaXRoKGAke2JpbmRpbmdQYXJhbWV0ZXJ9L2ApXG5cdFx0XHRcdFx0XHRcdD8gZGVmYXVsdFZhbHVlLnBhdGgucmVwbGFjZShgJHtiaW5kaW5nUGFyYW1ldGVyfS9gLCBcIlwiKVxuXHRcdFx0XHRcdFx0XHQ6IGRlZmF1bHRWYWx1ZS5wYXRoO1xuXHRcdFx0XHRcdGxldCBwYXJhbVZhbHVlID0gYXdhaXQgQ29tbW9uVXRpbHMucmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KGRlZmF1bHRWYWx1ZS5wYXRoLCBvcGVyYXRpb25CaW5kaW5nLmdldE1vZGVsKCkpO1xuXHRcdFx0XHRcdGlmIChwYXJhbVZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRwYXJhbVZhbHVlID0gYXdhaXQgb3BlcmF0aW9uQmluZGluZy5nZXRQYXJhbWV0ZXJDb250ZXh0KCkucmVxdWVzdFByb3BlcnR5KGRlZmF1bHRWYWx1ZS5wYXRoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHQvLyBGb3IgbXVsdGkgc2VsZWN0LCBuZWVkIHRvIGxvb3Agb3ZlciBjb250ZXh0cyAoYXMgY29udGV4dHMgY2Fubm90IGJlIHJldHJpZXZlZCB2aWEgYmluZGluZyBwYXJhbWV0ZXIgb2YgdGhlIG9wZXJhdGlvbiBiaW5kaW5nKVxuXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLnNvbWUoKGNvbnRleHQpID0+IGNvbnRleHQuZ2V0UHJvcGVydHkocGF0aEZvckNvbnRleHQpICE9PSBwYXJhbVZhbHVlKSkge1xuXHRcdFx0XHRcdFx0XHQvLyBpZiB0aGUgdmFsdWVzIGZyb20gdGhlIGNvbnRleHRzIGFyZSBub3QgYWxsIHRoZSBzYW1lLCBkbyBub3QgcHJlZmlsbFxuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHBhcmFtTmFtZSxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdG5vUG9zc2libGVWYWx1ZTogdHJ1ZVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4geyBwYXJhbU5hbWUsIHZhbHVlOiBwYXJhbVZhbHVlIH07XG5cdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVhZGluZyBkZWZhdWx0IGFjdGlvbiBwYXJhbWV0ZXJcIiwgcGFyYW1OYW1lLCB0aGlzLmFjdGlvbi5uYW1lKTtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0cGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0dmFsdWU6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdGxhdGVQcm9wZXJ0eUVycm9yOiB0cnVlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQ2FzZSAxLjI6IFBhcmFtZXRlckRlZmF1bHRWYWx1ZSBkZWZpbmVzIGEgZml4ZWQgc3RyaW5nIHZhbHVlIChpLmUuIHZQYXJhbURlZmF1bHRWYWx1ZSA9ICdzb21lU3RyaW5nJylcblx0XHRcdFx0cmV0dXJuIHsgcGFyYW1OYW1lLCB2YWx1ZTogZGVmYXVsdFZhbHVlLnZhbHVlT2YoKSB9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4geyBwYXJhbU5hbWUsIHZhbHVlOiBwYXJhbWV0ZXJNb2RlbERhdGFbcGFyYW1OYW1lXSB9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG1hbmlmZXN0IHZhbHVlcy5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG1hbmlmZXN0IHZhbHVlcy5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0TWFuaWZlc3RGdW5jdGlvblZhbHVlcygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSB0aGlzLmRpYWxvZz8uZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRpZiAoIXRoaXMucGFyYW1ldGVycy52aWV3IHx8ICF0aGlzLnBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIHx8ICFiaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH1cblxuXHRcdHJldHVybiBGUE1IZWxwZXIubG9hZE1vZHVsZUFuZENhbGxNZXRob2QoXG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uXG5cdFx0XHRcdC5zdWJzdHJpbmcoMCwgdGhpcy5wYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sYXN0SW5kZXhPZihcIi5cIikgfHwgLTEpXG5cdFx0XHRcdC5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKSxcblx0XHRcdHRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24uc3Vic3RyaW5nKFxuXHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSArIDEsXG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24ubGVuZ3RoXG5cdFx0XHQpLFxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLnZpZXcsXG5cdFx0XHRiaW5kaW5nQ29udGV4dCxcblx0XHRcdHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1xuXHRcdCkgYXMgUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJlZGVmaW5lZCB2YWx1ZXMgZm9yIHRoZSBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gYmluZGluZ1BhcmFtZXRlciBUaGUgYmluZGluZyBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIGRpYWxvZyBUaGUgZGlhbG9nXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIGNvbnRhaW5pbmcgYWxsIHByZWRlZmluZWQgdmFsdWVzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRQcmVEZWZpbmVkVmFsdWVzKFxuXHRcdGJpbmRpbmdQYXJhbWV0ZXI6IHN0cmluZyxcblx0XHRkaWFsb2c6IERpYWxvZ1xuXHQpOiBQcm9taXNlPHtcblx0XHRjb250ZXh0VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRkZWZhdWx0VmFsdWVzOiBQYXJhbWV0ZXJEZWZhdWx0VmFsdWVbXTtcblx0XHRmdW5jdGlvblZhbHVlczogT0RhdGFWNENvbnRleHRbXTtcblx0XHRtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0fT4ge1xuXHRcdGNvbnN0IGJvdW5kRnVuY3Rpb25OYW1lID0gdGhpcy5hY3Rpb24uYW5ub3RhdGlvbnMuQ29tbW9uPy5EZWZhdWx0VmFsdWVzRnVuY3Rpb24/LnZhbHVlT2YoKTtcblx0XHRsZXQgcmVxdWVzdENvbnRleHRPYmplY3Q6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0XHRsZXQgZnVuY3Rpb25QYXJhbXM6IFByb21pc2U8T0RhdGFWNENvbnRleHQ+W10gPSBbXTtcblx0XHRpZiAodGhpcy5hY3Rpb24uaXNCb3VuZCkge1xuXHRcdFx0aWYgKHR5cGVvZiBib3VuZEZ1bmN0aW9uTmFtZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRjb25zdCBtb2RlbCA9IHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5nZXRNb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBib3VuZEZ1bmN0aW9uID0gT3BlcmF0aW9uLmdldE9wZXJhdGlvbkZyb21OYW1lKGJvdW5kRnVuY3Rpb25OYW1lLCBtb2RlbCwgdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdKTtcblx0XHRcdFx0aWYgKGJvdW5kRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRmdW5jdGlvblBhcmFtcyA9IHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5tYXAoYXN5bmMgKGNvbnRleHQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IG5ldyBPRGF0YU9wZXJhdGlvbihcblx0XHRcdFx0XHRcdFx0Ym91bmRGdW5jdGlvbixcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGFwcENvbXBvbmVudDogdGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdFx0XHRtb2RlbDogbW9kZWwsXG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dHM6IFtjb250ZXh0XVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0ZW5oYW5jZSRzZWxlY3Q6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdGdyb3VwSWQ6IFwiZnVuY3Rpb25Hcm91cFwiXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCkuZXhlY3V0ZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdC5maWx0ZXIoaXNGdWxmaWxsZWQpWzBdPy52YWx1ZS5ib3VuZENvbnRleHQ7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRyZXF1ZXN0Q29udGV4dE9iamVjdCA9IHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5yZXF1ZXN0T2JqZWN0KCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGNvbnRleHRWYWx1ZXMgPSBhd2FpdCByZXF1ZXN0Q29udGV4dE9iamVjdDtcblxuXHRcdFx0Y29uc3QgcHJvbWlzZXMgPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MubWFwKGFzeW5jIChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PlxuXHRcdFx0XHRcdFx0dGhpcy5nZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUoYWN0aW9uUGFyYW1ldGVySW5mby5wYXJhbWV0ZXIsIGJpbmRpbmdQYXJhbWV0ZXIsIGRpYWxvZylcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCksXG5cdFx0XHRcdFByb21pc2UuYWxsKGZ1bmN0aW9uUGFyYW1zKSxcblx0XHRcdFx0dGhpcy5nZXRNYW5pZmVzdEZ1bmN0aW9uVmFsdWVzKClcblx0XHRcdF0pO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Y29udGV4dFZhbHVlcyxcblx0XHRcdFx0ZGVmYXVsdFZhbHVlczogcHJvbWlzZXNbMF0sXG5cdFx0XHRcdGZ1bmN0aW9uVmFsdWVzOiBwcm9taXNlc1sxXSxcblx0XHRcdFx0bWFuaWZlc3RGdW5jdGlvblZhbHVlczogcHJvbWlzZXNbMl1cblx0XHRcdH07XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHBhcmFtZXRlclwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0Ly8gUmVtb3ZlIG1lc3NhZ2VzIHJlbGF0aW5nIHRvIHRoZSBmdW5jdGlvbiBmb3IgZGVmYXVsdCB2YWx1ZXMgYXMgdGhleSBhcmVuJ3QgaGVscGZ1bCBmb3IgYSB1c2VyXG5cdFx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Y29udGV4dFZhbHVlczoge30sXG5cdFx0XHRcdGRlZmF1bHRWYWx1ZXM6IFtdLFxuXHRcdFx0XHRmdW5jdGlvblZhbHVlczogW10sXG5cdFx0XHRcdG1hbmlmZXN0RnVuY3Rpb25WYWx1ZXM6IHt9XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsYmFjayB3aGVuIHRoZSBkaWFsb2cgaXMgb3BlbmVkLiBTZXRzIHRoZSBmb2N1cyBvbiB0aGUgZmlyc3QgZmllbGQgd2l0aG91dCBvcGVuaW5nIHRoZSBWSCBkaWFsb2cuXG5cdCAqL1xuXHRwcml2YXRlIGFmdGVyT3BlbigpOiB2b2lkIHtcblx0XHRjb25zdCBmaXJzdFZpc2libGVQYXJhbWV0ZXIgPSB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLmZpbmQoKHBhcmFtZXRlckluZm8pID0+IHBhcmFtZXRlckluZm8uZmllbGQuZ2V0VmlzaWJsZSgpKTtcblx0XHRpZiAoZmlyc3RWaXNpYmxlUGFyYW1ldGVyKSB7XG5cdFx0XHRjb25zdCBmaXJzdEZpZWxkID0gZmlyc3RWaXNpYmxlUGFyYW1ldGVyPy5maWVsZDtcblx0XHRcdGNvbnN0IGZvY3VzSW5mbyA9IGZpcnN0RmllbGQ/LmdldEZvY3VzSW5mbygpIGFzIHsgdGFyZ2V0SW5mbzogb2JqZWN0IH07XG5cdFx0XHRmb2N1c0luZm8udGFyZ2V0SW5mbyA9IHsgc2lsZW50OiB0cnVlIH07XG5cdFx0XHRmaXJzdEZpZWxkPy5mb2N1cyhmb2N1c0luZm8pO1xuXHRcdH1cblx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblBhcmFtZXRlckRpYWxvZ09wZW5lZD8uKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJzIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGluZm8uXG5cdCAqIEBwYXJhbSBkaWFsb2dDb250ZW50cyBUaGUgZGlhbG9nIGNvbnRlbnRzXG5cdCAqL1xuXHRwcml2YXRlIHJlZ2lzdGVyQWN0aW9uUGFyYW1ldGVySW5mbyhkaWFsb2dDb250ZW50czogRGlhbG9nQ29udGVudFR5cGVzW10pOiB2b2lkIHtcblx0XHQvL1JlZ2lzdGVyIHRoZSBmaWVsZFxuXHRcdGRpYWxvZ0NvbnRlbnRzLmZvckVhY2goKGRpYWxvZ0NvbnRlbnQpID0+IHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlciA9IGRpYWxvZ0NvbnRlbnQ/LnBhcmFtZXRlcjtcblx0XHRcdGNvbnN0IGZpZWxkID0gZGlhbG9nQ29udGVudD8uZm9ybUVsZW1lbnRzPy5bMV07XG5cdFx0XHR0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLnB1c2goe1xuXHRcdFx0XHRwYXJhbWV0ZXIsXG5cdFx0XHRcdGZpZWxkLFxuXHRcdFx0XHRpc011bHRpVmFsdWU6IHBhcmFtZXRlci5pc0NvbGxlY3Rpb24sXG5cdFx0XHRcdGhhc0Vycm9yOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gZGlhbG9nIFRoZSBkaWFsb2dcblx0ICogQHJldHVybnMgVGhlIHByb21pc2UuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHNldE9wZXJhdGlvbkRlZmF1bHRWYWx1ZXMoZGlhbG9nOiBEaWFsb2cpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyID0gdGhpcy5hY3Rpb24uaXNCb3VuZCA/IHRoaXMuYWN0aW9uLnBhcmFtZXRlcnNbMF0ubmFtZSA6IFwiXCI7XG5cdFx0Y29uc3QgeyBjb250ZXh0VmFsdWVzLCBkZWZhdWx0VmFsdWVzLCBmdW5jdGlvblZhbHVlcywgbWFuaWZlc3RGdW5jdGlvblZhbHVlcyB9ID0gYXdhaXQgdGhpcy5nZXRQcmVEZWZpbmVkVmFsdWVzKFxuXHRcdFx0YmluZGluZ1BhcmFtZXRlcixcblx0XHRcdGRpYWxvZ1xuXHRcdCk7XG5cdFx0Y29uc3Qgb3BlcmF0aW9uQmluZGluZyA9IGRpYWxvZy5nZXRPYmplY3RCaW5kaW5nKCkgYXMgT0RhdGFDb250ZXh0QmluZGluZztcblxuXHRcdGlmIChiaW5kaW5nUGFyYW1ldGVyKSB7XG5cdFx0XHRvcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihiaW5kaW5nUGFyYW1ldGVyLCBjb250ZXh0VmFsdWVzKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGkgaW4gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcykge1xuXHRcdFx0aWYgKHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3NbaV0ucGFyYW1ldGVyLm5hbWUgIT09IFwiUmVzdWx0SXNBY3RpdmVFbnRpdHlcIikge1xuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJOYW1lID0gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvc1tpXS5wYXJhbWV0ZXIubmFtZTtcblx0XHRcdFx0Ly8gUGFyYW1ldGVyIHZhbHVlcyBwcm92aWRlZCBpbiB0aGUgY2FsbCBvZiBpbnZva2VBY3Rpb24gb3ZlcnJ1bGUgb3RoZXIgc291cmNlc1xuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJQcm92aWRlZFZhbHVlID0gdGhpcy5wYXJhbWV0ZXJWYWx1ZXM/LmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQubmFtZSA9PT0gcGFyYW1ldGVyTmFtZSk/LnZhbHVlO1xuXHRcdFx0XHRpZiAocGFyYW1ldGVyUHJvdmlkZWRWYWx1ZSkge1xuXHRcdFx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWUsIHBhcmFtZXRlclByb3ZpZGVkVmFsdWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG1hbmlmZXN0RnVuY3Rpb25WYWx1ZXMuaGFzT3duUHJvcGVydHkocGFyYW1ldGVyTmFtZSkpIHtcblx0XHRcdFx0XHRvcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihwYXJhbWV0ZXJOYW1lLCBtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzW3BhcmFtZXRlck5hbWVdKTtcblx0XHRcdFx0fSBlbHNlIGlmIChkZWZhdWx0VmFsdWVzW2ldICYmIGRlZmF1bHRWYWx1ZXNbaV0udmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWUsIGRlZmF1bHRWYWx1ZXNbaV0udmFsdWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuYWN0aW9uLmFubm90YXRpb25zLkNvbW1vbj8uRGVmYXVsdFZhbHVlc0Z1bmN0aW9uICYmICFkZWZhdWx0VmFsdWVzW2ldLm5vUG9zc2libGVWYWx1ZSkge1xuXHRcdFx0XHRcdGNvbnN0IHNldE9mRnVuY3Rpb25WYWx1ZXMgPSBuZXcgU2V0PHN0cmluZz4oXG5cdFx0XHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubWFwKChjb250ZXh0LCBpbmRleCkgPT4gZnVuY3Rpb25WYWx1ZXNbaW5kZXhdLmdldE9iamVjdChwYXJhbWV0ZXJOYW1lKSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChzZXRPZkZ1bmN0aW9uVmFsdWVzLnNpemUgPT09IDEgJiYgc2V0T2ZGdW5jdGlvblZhbHVlcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Ly9wYXJhbSB2YWx1ZXMgYXJlIGFsbCB0aGUgc2FtZTpcblx0XHRcdFx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWUsIEFycmF5LmZyb20oc2V0T2ZGdW5jdGlvblZhbHVlcylbMF0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIGF0IGxlYXN0IG9uZSBEZWZhdWx0IFByb3BlcnR5IGlzIGEgTGF0ZSBQcm9wZXJ0eSBhbmQgYW4gZVRhZyBlcnJvciB3YXMgcmFpc2VkLlxuXHRcdGlmIChkZWZhdWx0VmFsdWVzLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZS5sYXRlUHJvcGVydHlFcnJvcikpIHtcblx0XHRcdGNvbnN0IHJlZnJlc2ggPSB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX1JFRlJFU0hcIik7XG5cdFx0XHRNZXNzYWdlQm94Lndhcm5pbmcoZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50KS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfTEFURV9QUk9QRVJUWVwiKSwge1xuXHRcdFx0XHRhY3Rpb25zOiBbcmVmcmVzaCwgTWVzc2FnZUJveC5BY3Rpb24uT0tdLFxuXHRcdFx0XHRlbXBoYXNpemVkQWN0aW9uOiByZWZyZXNoLFxuXHRcdFx0XHRvbkNsb3NlOiAoYWN0aW9uOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRpZiAoYWN0aW9uID09PSByZWZyZXNoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBleHRlbnNpb25BUEkgPSB0aGlzLnBhcmFtZXRlcnMudmlldz8uZ2V0Q29udHJvbGxlcigpLmdldEV4dGVuc2lvbkFQSSgpO1xuXHRcdFx0XHRcdFx0KGV4dGVuc2lvbkFQSSBhcyBMaXN0UmVwb3J0RXh0ZW5zaW9uQVBJIHwgT2JqZWN0UGFnZUV4dGVuc2lvbkFQSSkucmVmcmVzaCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y29udGVudFdpZHRoOiBcIjI1ZW1cIlxuXHRcdFx0fSBhcyBvYmplY3QpO1xuXHRcdH1cblxuXHRcdC8vIGRlc3Ryb3kgdGhlIG9kYXRhQ29udGV4dEJpbmRpbmcgcmVsYXRlZCB0byB0aGUgZnVuY3Rpb24gY2FsbFxuXHRcdGZvciAoY29uc3QgZnVuY3Rpb25Db250ZXh0IG9mIGZ1bmN0aW9uVmFsdWVzKSB7XG5cdFx0XHRjb25zdCBiaW5kaW5nID0gZnVuY3Rpb25Db250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRcdGlmIChiaW5kaW5nPy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFDb250ZXh0QmluZGluZ1wiKSkge1xuXHRcdFx0XHRiaW5kaW5nLmRlc3Ryb3koKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgY2xvc2Ugb2YgdGhlIGRpYWxvZy5cblx0ICovXG5cdHByaXZhdGUgYWZ0ZXJDbG9zZSgpOiB2b2lkIHtcblx0XHR0aGlzLmRpYWxvZz8uZGVzdHJveSgpO1xuXHRcdHRoaXMuYnV0dG9uTG9jayA9IGZhbHNlOyAvL25lZWRlZCBoZXJlLCBub3QgaW4gdGhlIHByZXNzIGV2ZW50cyBmaW5hbGx5IGNsYXVzZS4gSW4gY2FzZSB0aGUgVUkgaXMgc2x1Z2dpc2gsIGJlZ2luIGJ1dHRvbiBjb3VsZCBiZSBwcmVzc2VkIGFnYWluLlxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHR5cGUgb2YgdGhlIHByb3BlcnR5IHVzZWQgZm9yIHRleHQgYW5ub3RhdGlvbiBpbiB0aGUgVmFsdWVIZWxwIGZvciB0aGUgYWN0aW9uIHBhcmFtZXRlciBhbmQgcHJvdmlkZXMgdGhlIGZvcm1hdHRlZCBiaW5kaW5nLlxuXHQgKiBAcGFyYW0gb0ludGVyZmFjZSBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFRoZSBmb3JtIGVsZW1lbnQgY29udHJvbC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0QWRkaXRpb25hbFZhbHVlKG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0bGV0IHRleHRDb250ZXh0O1xuXG5cdFx0Y29uc3QgY29udGV4dFBhdGggPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IGxvY2FsRGF0YVByb3BlcnR5ID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE9iamVjdCgpPy4kTmFtZTtcblx0XHRjb25zdCB2YWx1ZUxpc3RCeVF1YWxpZmllciA9IGF3YWl0IHRoaXMubWV0YU1vZGVsLnJlcXVlc3RWYWx1ZUxpc3RJbmZvKGNvbnRleHRQYXRoLCB0cnVlKTtcblxuXHRcdC8vIExvb2sgZm9yIExvY2FsRGF0YVByb3BlcnR5IGluIFZhbHVlTGlzdFBhcmFtZXRlck91dCBvciBWYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCB3aGVyZSB0aGlzIGlzIHRoZSBwYXJhbWV0ZXIgbmFtZVxuXHRcdC8vIFdlIG9ubHkgY29uc2lkZXIgVGV4dEFubm90YXRpb25zIGZvciB0aGlzIGFjdGlvbiBwYXJhbWV0ZXJcblx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbWV0ZXIgPSB2YWx1ZUxpc3RCeVF1YWxpZmllcltcIlwiXS5QYXJhbWV0ZXJzLmZpbmQoXG5cdFx0XHQocGFyYW1ldGVyOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyKSA9PlxuXHRcdFx0XHRwYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0KHBhcmFtZXRlci4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVyT3V0XCIgJiZcblx0XHRcdFx0XHRwYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGggPT09IGxvY2FsRGF0YVByb3BlcnR5KVxuXHRcdCk7XG5cblx0XHRpZiAodmFsdWVMaXN0UGFyYW1ldGVyICYmIHZhbHVlTGlzdFBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSkge1xuXHRcdFx0Y29uc3QgdGV4dFByb3BlcnR5ID0gdmFsdWVMaXN0UGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5O1xuXHRcdFx0Ly8gTm93IHdlIGhhdmUgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgaXMgdGhlIGFubm90YXRlZCB0ZXh0XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBgLyR7dmFsdWVMaXN0QnlRdWFsaWZpZXJbXCJcIl0uQ29sbGVjdGlvblBhdGh9LyR7dGV4dFByb3BlcnR5fWA7XG5cdFx0XHRjb25zdCBwcm9wQW5ub3RhdGlvbnMgPSB0aGlzLm1ldGFNb2RlbC5nZXRPYmplY3QoYCR7cHJvcGVydHlQYXRofUBgKTtcblxuXHRcdFx0aWYgKHByb3BBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl0pIHtcblx0XHRcdFx0Y29uc3QgdGV4dFByb3AgPSBwcm9wQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl07XG5cdFx0XHRcdGNvbnN0IHRleHRQYXRoID0gYC8ke3ZhbHVlTGlzdEJ5UXVhbGlmaWVyW1wiXCJdLkNvbGxlY3Rpb25QYXRofS8ke3RleHRQcm9wLiRQYXRofWA7XG5cdFx0XHRcdHRleHRDb250ZXh0ID0gdGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQodGV4dFBhdGgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGV4dENvbnRleHQpIHtcblx0XHRcdFx0cmV0dXJuIEFubm90YXRpb25IZWxwZXIuZm9ybWF0KHRleHRDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IHRleHRDb250ZXh0IH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB2YWx1ZSBiaW5kaW5nIGZvciBhbiBhY3Rpb24gcGFyYW1ldGVyLiBXZSBhZGQgc3BlY2lhbCBoYW5kbGluZyBmb3IgY3VycmVuY3kgYW5kIHVuaXQgYmVhdXNlIHRoZXkgYXJlIG5vdFxuXHQgKiBwYXJ0IG9mIHRoZSBhbm5vdGF0aW9uIGhlbHBlciBmb3JtYXQgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyQ29udGV4dCBUaGUgcGFyYW1ldGVyIGNvbnRleHRcblx0ICogQHBhcmFtIG9JbnRlcmZhY2UgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZyBmb3IgdGhlIHZhbHVlIG9mIHRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRBUERpYWxvZ0JpbmRpbmdWYWx1ZShcblx0XHRwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcixcblx0XHRwYXJhbWV0ZXJDb250ZXh0OiBDb250ZXh0LFxuXHRcdG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZVxuXHQpOiBQcm9taXNlPENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgc3RyaW5nPiB7XG5cdFx0Y29uc3Qgb01vZGVsID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRjb25zdCBvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnMgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH1AYCk7XG5cdFx0bGV0IHByb3BlcnR5T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT47XG5cblx0XHRpZiAoXG5cdFx0XHRvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLklTT0N1cnJlbmN5XCJdIHx8XG5cdFx0XHRvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLlVuaXRcIl1cblx0XHQpIHtcblx0XHRcdGNvbnN0IGFjdGlvbk1ldGFQYXRoID0gdGhpcy5hY3Rpb24uaXNCb3VuZFxuXHRcdFx0XHQ/IGAke3RoaXMubWV0YU1vZGVsLmdldE1ldGFQYXRoKHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5nZXRQYXRoKCkpfS8ke2NvbnZlcnRUeXBlcyh0aGlzLm1ldGFNb2RlbCkubmFtZXNwYWNlfS4ke1xuXHRcdFx0XHRcdFx0dGhpcy5hY3Rpb24ubmFtZVxuXHRcdFx0XHQgIH1gXG5cdFx0XHRcdDogYC8ke3RoaXMuYWN0aW9uLm5hbWV9YDtcblx0XHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gdGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7YWN0aW9uTWV0YVBhdGh9LyR7cGFyYW1ldGVyLm5hbWV9YCkhO1xuXHRcdFx0cHJvcGVydHlPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KTtcblx0XHRcdHJldHVybiBnZXRWYWx1ZUJpbmRpbmcocHJvcGVydHlPYmplY3RQYXRoLCB7fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBBbm5vdGF0aW9uSGVscGVyLmZvcm1hdChwYXJhbWV0ZXJDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IHBhcmFtZXRlckNvbnRleHQgfSk7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFpR3FCQSxxQkFBcUI7SUE0QnpDLFNBQUFBLHNCQUNrQkMsTUFBYyxFQUNkQyxVQWFoQixFQUNnQkMsZUFBc0QsRUFDdERDLGFBQWlDLEVBQ2pDQyxjQUE4QixFQUM5QztNQXhDRjtNQUNBO01BQ0E7TUFBQSxLQUNRQyxZQUFZLEdBQUcsS0FBSztNQUFBLEtBTXBCQyxVQUFVLEdBQUcsS0FBSztNQUFBLEtBSVRDLG9CQUFvQixHQUE2RCxFQUFFO01BQUEsS0FFbkZDLGNBQWMsR0FBYyxJQUFJQyxTQUFTLENBQUM7UUFDMURDLFlBQVksRUFBRSxDQUFDO01BQ2hCLENBQUMsQ0FBQztNQUFBLEtBS2dCVixNQUFjLEdBQWRBLE1BQWM7TUFBQSxLQUNkQyxVQWFoQixHQWJnQkEsVUFhaEI7TUFBQSxLQUNnQkMsZUFBc0QsR0FBdERBLGVBQXNEO01BQUEsS0FDdERDLGFBQWlDLEdBQWpDQSxhQUFpQztNQUFBLEtBQ2pDQyxjQUE4QixHQUE5QkEsY0FBOEI7TUFFL0MsSUFBSSxDQUFDTyxVQUFVLEdBQUdDLFlBQVksQ0FBQ0MsYUFBYSxDQUFDLElBQUksQ0FBQ2IsTUFBTSxDQUFDO01BQ3pELElBQUksQ0FBQ2MsU0FBUyxHQUFHLElBQUksQ0FBQ2IsVUFBVSxDQUFDYyxLQUFLLENBQUNDLFlBQVksQ0FBQyxDQUFDO01BQ3JELElBQUksQ0FBQ0MsYUFBYSxHQUFHLElBQUksQ0FBQ2hCLFVBQVUsQ0FBQ2lCLElBQUksR0FBR0MsZ0JBQWdCLENBQUMsSUFBSSxDQUFDbEIsVUFBVSxDQUFDaUIsSUFBSSxDQUFDLEdBQUdDLGdCQUFnQixDQUFDLElBQUksQ0FBQ2xCLFVBQVUsQ0FBQ21CLFlBQVksQ0FBQztNQUNuSSxJQUFJLENBQUNDLHVCQUF1QixHQUFHLElBQUlDLE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztRQUMvRCxJQUFJLENBQUNDLHVCQUF1QixHQUFHRixPQUFPO1FBQ3RDLElBQUksQ0FBQ0csc0JBQXNCLEdBQUdGLE1BQU07TUFDckMsQ0FBQyxDQUFDO0lBQ0g7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUpDRyxRQUFBLEdBQUE1QixxQkFBQTtJQUFBLElBQUE2QixNQUFBLEdBQUE3QixxQkFBQSxDQUFBOEIsU0FBQTtJQUFBRCxNQUFBLENBS1FFLG9CQUFvQixHQUE1QixTQUFRQSxvQkFBb0JBLENBQUNDLFNBQTBCLEVBQTJDO01BQ2pHLE1BQU1DLFdBQVcsR0FBR0QsU0FBUyxDQUFDQyxXQUFXO1FBQ3hDQyxZQUFZLEdBQUdELFdBQVcsQ0FBQ0UsTUFBTSxFQUFFQyxZQUFZO1FBQy9DQyxTQUFTLEdBQUlKLFdBQVcsQ0FBQ0ssSUFBSSxFQUEwQ0MsU0FBUyxFQUFFQyxPQUFPLENBQUMsQ0FBQztRQUMzRkMsUUFBUSxHQUFJUixXQUFXLENBQUNLLElBQUksRUFBMENJLFFBQVEsRUFBRUYsT0FBTyxDQUFDLENBQUM7TUFFMUYsSUFBSUgsU0FBUyxJQUFJSSxRQUFRLEVBQUU7UUFDMUIsT0FBT0UsUUFBUSxDQUFDQyxhQUFhLENBQUNDLFFBQVEsQ0FBQztNQUN4QyxDQUFDLE1BQU0sSUFBSVgsWUFBWSxFQUFFO1FBQ3hCLE9BQU9ZLE1BQU0sQ0FDWkMsb0JBQW9CLENBQUNmLFNBQVMsQ0FBQyxFQUMvQlksYUFBYSxDQUFDQyxRQUFRLEVBQ3RCQyxNQUFNLENBQUNFLG9CQUFvQixDQUFDaEIsU0FBUyxDQUFDLEVBQUVZLGFBQWEsQ0FBQ0ssUUFBUSxFQUFFTCxhQUFhLENBQUNNLFFBQVEsQ0FDdkYsQ0FBQztNQUNGO01BQ0EsT0FBT1AsUUFBUSxDQUFDQyxhQUFhLENBQUNNLFFBQVEsQ0FBQztJQUN4Qzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQXJCLE1BQUEsQ0FLY3NCLGlCQUFpQixHQUEvQixlQUFjQSxpQkFBaUJBLENBQUNuQixTQUEwQixFQUE0QjtNQUNyRixNQUFNb0IsY0FBYyxHQUFHLElBQUksQ0FBQ25ELE1BQU0sQ0FBQ29ELE9BQU8sR0FDdkMsR0FBRyxJQUFJLENBQUN0QyxTQUFTLENBQUN1QyxXQUFXLENBQUMsSUFBSSxDQUFDcEQsVUFBVSxDQUFDcUQsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUlDLFlBQVksQ0FBQyxJQUFJLENBQUMxQyxTQUFTLENBQUMsQ0FBQzJDLFNBQVMsSUFDOUcsSUFBSSxDQUFDekQsTUFBTSxDQUFDMEQsSUFBSSxFQUNkLEdBQ0YsSUFBSSxJQUFJLENBQUMxRCxNQUFNLENBQUMwRCxJQUFJLEVBQUU7TUFDekIsTUFBTUMsV0FBVyxHQUFHLElBQUksQ0FBQzdDLFNBQVMsQ0FBQzhDLG9CQUFvQixDQUFDLEdBQUdULGNBQWMsSUFBSXBCLFNBQVMsQ0FBQzJCLElBQUksRUFBRSxDQUFFO01BQy9GLElBQUlHLEtBQUs7TUFDVCxJQUFJQyxLQUFLLEdBQUcvQixTQUFTLENBQUNDLFdBQVcsQ0FBQ0UsTUFBTSxFQUFFNkIsS0FBSyxHQUM1QyxJQUFJLENBQUM5QyxhQUFhLENBQUMrQyxPQUFPLENBQUNqQyxTQUFTLENBQUNDLFdBQVcsQ0FBQ0UsTUFBTSxDQUFDNkIsS0FBSyxDQUFDRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQ3pFbEMsU0FBUyxDQUFDMkIsSUFBSTtNQUNqQixJQUFJUSxlQUFlO01BQ25CLElBQUluQyxTQUFTLENBQUNvQyxZQUFZLEVBQUU7UUFDM0JOLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQ08sZ0JBQWdCLENBQUNyQyxTQUFTLEVBQUU0QixXQUFXLENBQUM7TUFDNUQsQ0FBQyxNQUFNLElBQUksQ0FBQzVCLFNBQVMsQ0FBQ3NDLElBQUksQ0FBQ0MsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQ0MsaUJBQWlCLENBQUN4QyxTQUFTLENBQUMsRUFBRTtRQUNuRm1DLGVBQWUsR0FBRyxJQUFJLENBQUNLLGlCQUFpQixDQUFDeEMsU0FBUyxDQUFDO1FBQ25EO1FBQ0ErQixLQUFLLEdBQUdJLGVBQWUsRUFBRWxDLFdBQVcsQ0FBQ0UsTUFBTSxFQUFFNkIsS0FBSyxHQUMvQyxJQUFJLENBQUM5QyxhQUFhLENBQUMrQyxPQUFPLENBQUNFLGVBQWUsQ0FBQ2xDLFdBQVcsQ0FBQ0UsTUFBTSxDQUFDNkIsS0FBSyxDQUFDRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQzlFQyxlQUFlLEVBQUVSLElBQWU7UUFDcENHLEtBQUssR0FBRyxJQUFJLENBQUNXLGtCQUFrQixDQUFDekMsU0FBUyxDQUFDO01BQzNDLENBQUMsTUFBTTtRQUNOOEIsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDWSxXQUFXLENBQUMxQyxTQUFTLEVBQUU0QixXQUFXLENBQUM7TUFDdkQ7TUFDQSxPQUNDZSxLQUFBLENBQUFDLFNBQUE7UUFBQUMsUUFBQSxHQUNDQyxJQUFBLENBQUNkLEtBQUs7VUFBQ2UsRUFBRSxFQUFFQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUVoRCxTQUFTLENBQUMyQixJQUFJLEVBQUVRLGVBQWUsRUFBRVIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFFO1VBQUNzQixJQUFJLEVBQUVsQjtRQUFNLENBQUUsQ0FBQyxFQUM3RkQsS0FBSztNQUFBLENBQ0wsQ0FBQztJQUVMOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUFqQyxNQUFBLENBTWN3QyxnQkFBZ0IsR0FBOUIsZUFBY0EsZ0JBQWdCQSxDQUFDckMsU0FBMEIsRUFBRWtELGdCQUF5QixFQUE0QjtNQUMvRyxJQUFJQyxPQUFPLEdBQUcsT0FBTztNQUNyQixJQUFJO1FBQ0hBLE9BQU8sR0FBRyxNQUFNQyxXQUFXLENBQUNDLHdCQUF3QixDQUFDSCxnQkFBZ0IsQ0FBQ0ksU0FBUyxDQUFDLENBQUMsRUFBRTtVQUFFQyxPQUFPLEVBQUVMO1FBQWlCLENBQUMsQ0FBQztNQUNsSCxDQUFDLENBQUMsT0FBT00sR0FBWSxFQUFFO1FBQ3RCQyxHQUFHLENBQUNDLE9BQU8sQ0FBQyxxRkFBcUYxRCxTQUFTLENBQUMyQixJQUFJLE1BQU02QixHQUFHLEVBQUUsQ0FBQztNQUM1SDtNQUNBLE1BQU1HLFdBQVcsR0FBRzNELFNBQVMsQ0FBQ0MsV0FBVyxDQUFDMkQsRUFBRSxFQUFFQyxXQUFpRTtNQUMvRyxNQUFNQyxxQkFBcUIsR0FBR0gsV0FBVyxHQUFHSSxpQkFBaUIsQ0FBQ0MsMkJBQTJCLENBQUNMLFdBQVcsQ0FBQyxDQUFDLEdBQUdNLFNBQVM7TUFDbkgsTUFBTUMsYUFBYSxHQUFHQyxnQkFBZ0IsR0FBR25FLFNBQVMsQ0FBQ3NDLElBQUksQ0FBQyxFQUFFQSxJQUFJO01BQzlELE9BQ0NRLElBQUEsQ0FBQ3NCLGVBQWU7UUFDZnJCLEVBQUUsRUFBRUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFaEQsU0FBUyxDQUFDMkIsSUFBSSxDQUFDLENBQUU7UUFDdkMwQyxXQUFXLEVBQUVQLHFCQUFzQjtRQUNuQ1EsS0FBSyxFQUFFO1VBQUVDLElBQUksRUFBRSxZQUFZdkUsU0FBUyxDQUFDMkIsSUFBSTtRQUFHLENBQUU7UUFDOUM2QyxRQUFRLEVBQUU7VUFBRTdDLElBQUksRUFBRTtRQUFtRCxDQUFFO1FBQ3ZFd0IsT0FBTyxFQUFFQSxPQUFRO1FBQ2pCc0IsUUFBUSxFQUFFLElBQUksQ0FBQzFFLG9CQUFvQixDQUFDQyxTQUFTLENBQUU7UUFDL0MwRSxLQUFLLEVBQUMsTUFBTTtRQUNaQyxhQUFhLEVBQUUzRSxTQUFTLENBQUNDLFdBQVcsQ0FBQzJELEVBQUUsRUFBRWdCLGFBQWEsRUFBRXBFLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSztRQUMzRXFFLFFBQVEsRUFBRWQsaUJBQWlCLENBQUNlLG1DQUFtQyxDQUFDOUUsU0FBUyxFQUFFLElBQUksQ0FBQy9CLE1BQU0sRUFBRXdELFlBQVksQ0FBQyxJQUFJLENBQUMxQyxTQUFTLENBQUMsQ0FBQyxDQUFFO1FBQ3ZIZ0csU0FBUyxFQUFFQyxZQUFZLENBQUNoRixTQUFTLENBQUMsR0FBR2dELFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQ3BFLFVBQVUsRUFBRW9CLFNBQVMsQ0FBQzJCLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUdzQyxTQUFVO1FBQy9HZ0IsTUFBTSxFQUFFLE1BQU9DLENBQUMsSUFBb0IsSUFBSSxDQUFDQyxpQkFBaUIsQ0FBQ0QsQ0FBQyxFQUFFbEYsU0FBUyxDQUFFO1FBQ3pFb0YsT0FBTyxFQUFFckIsaUJBQWlCLENBQUNzQixHQUFHLENBQUNDLEtBQUssQ0FBQ3RCLDJCQUEyQixDQUFDaEUsU0FBUyxDQUFDQyxXQUFXLEVBQUUyRCxFQUFFLEVBQUUyQixNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFFO1FBQzdHQyxjQUFjLEVBQUUsQ0FBQ3hDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRWhELFNBQVMsQ0FBQzJCLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFFO1FBQzlEOEQsVUFBVSxFQUFFLElBQUksQ0FBQ0MsOEJBQThCLENBQUMxRixTQUFTLEVBQUVrRCxnQkFBZ0IsQ0FBRTtRQUFBTCxRQUFBLEVBRTdFQyxJQUFBLENBQUM2QyxtQkFBbUI7VUFBd0RDLFdBQVcsRUFBQztRQUFnQixHQUE5RSwrQkFBK0IxQixhQUFhLElBQW9DO01BQUMsQ0FDM0YsQ0FBQztJQUVwQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQXJFLE1BQUEsQ0FLUTRDLGtCQUFrQixHQUExQixTQUFRQSxrQkFBa0JBLENBQUN6QyxTQUEwQixFQUFnQjtNQUNwRSxJQUFJNkYsd0JBQXdCO01BQzVCLElBQUksSUFBSSxDQUFDckQsaUJBQWlCLENBQUN4QyxTQUFTLENBQUMsRUFBRUMsV0FBVyxDQUFDSyxJQUFJLEVBQUV3RixvQkFBb0IsRUFBRTtRQUM5RSxNQUFNQyxhQUFhLEdBQUdDLEtBQUssQ0FBQ0MsSUFBSSxDQUMvQixJQUFJLENBQUN6RCxpQkFBaUIsQ0FBQ3hDLFNBQVMsQ0FBQyxFQUFFQyxXQUFXLENBQUNLLElBQUksRUFBRXdGLG9CQUN0RCxDQUFDLENBQUNJLEdBQUcsQ0FBRTVELElBQUksSUFBSyxJQUFJQSxJQUFJLEdBQUcsQ0FBQztRQUM1QnVELHdCQUF3QixHQUFHLHVCQUF1QkUsYUFBYSxDQUFDSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUs7TUFDL0U7TUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxTQUFBQSxDQUFVQyxLQUFzQyxFQUFRO1FBQ25GLE1BQU1DLFlBQVksR0FBR0QsS0FBSyxDQUFDRSxTQUFTLENBQUMsQ0FBQztRQUN0QyxNQUFNQyxTQUFTLEdBQUdILEtBQUssQ0FBQ0ksWUFBWSxDQUFDLFVBQVUsQ0FBQztRQUNoRCxNQUFNVixhQUFhLEdBQUdPLFlBQVksQ0FBQ0ksV0FBVyxDQUFDLENBQUM7UUFDaEQsSUFBSUYsU0FBUyxFQUFFO1VBQ2RHLHNCQUFzQixDQUFDTCxZQUFZLEVBQUVFLFNBQVMsRUFBRVQsYUFBYSxDQUFDO1FBQy9EO01BQ0QsQ0FBQztNQUNEO01BQ0EsTUFBTWEsZUFBZSxHQUFHeEQsV0FBVyxDQUFDeUQsbUJBQW1CLENBQUMsSUFBSSxDQUFDckUsaUJBQWlCLENBQUN4QyxTQUFTLENBQUMsRUFBRThHLFNBQVMsQ0FBQztNQUNyRyxNQUFNQyxvQkFBb0IsR0FBRyxTQUFBQSxDQUFVVixLQUF1QyxFQUFRO1FBQ3JGLE1BQU1DLFlBQVksR0FBR0QsS0FBSyxFQUFFRSxTQUFTLENBQUMsQ0FBQztRQUN2Q1Msd0JBQXdCLENBQUNWLFlBQVksRUFBRUEsWUFBWSxDQUFDVyxrQkFBa0IsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNyRixDQUFDO01BQ0QsTUFBTUMsZ0JBQWdCLEdBQUcsU0FBQUEsQ0FBVWQsS0FBdUMsRUFBUTtRQUNqRixJQUFJQSxLQUFLLENBQUNJLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUtKLEtBQUssQ0FBQ0ksWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFlLEdBQUcsRUFBRTtVQUMxRlcsNkJBQTZCLENBQzVCZixLQUFLLENBQUNFLFNBQVMsQ0FBQyxDQUFDLEVBQ2hCRixLQUFLLENBQUNJLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBZ0JKLEtBQUssQ0FBQ0ksWUFBWSxDQUFDLFVBQVUsQ0FDaEYsQ0FBQztRQUNGO01BQ0QsQ0FBQztNQUNELE9BQ0MzRCxJQUFBLENBQUN1RSxZQUFZO1FBQ1oxRixJQUFJLEVBQUMsZ0JBQWdCO1FBQ3JCMkYsVUFBVSxFQUFDLE9BQU87UUFDbEJDLFFBQVEsRUFBQyxNQUFNO1FBQ2ZDLFFBQVEsRUFBQyxPQUFPO1FBQ2hCQyxPQUFPLEVBQUMsMERBQTBEO1FBQ2xFQyxJQUFJLEVBQUMsbUJBQW1CO1FBQ3hCQyxLQUFLLEVBQUMsYUFBYTtRQUNuQkMsT0FBTyxFQUFDLE1BQU07UUFDZEMsWUFBWSxFQUFDLE9BQU87UUFDcEJDLG1CQUFtQixFQUFDLE1BQU07UUFDMUJDLGNBQWMsRUFBQyxPQUFPO1FBQ3RCQyxRQUFRLEVBQUVuQyx3QkFBeUI7UUFDbkNvQyxhQUFhLEVBQUU3QixtQkFBb0I7UUFDbkM4QixlQUFlLEVBQUV0QixlQUFnQjtRQUNqQ3VCLGNBQWMsRUFBRXBCLG9CQUFxQjtRQUNyQ3FCLGlCQUFpQixFQUFFQyw2QkFBNkIsQ0FBQ0MsR0FBSTtRQUNyREMsY0FBYyxFQUFFcEIsZ0JBQWlCO1FBQ2pDbEMsTUFBTSxFQUFFLE1BQU9DLENBQUMsSUFBb0IsSUFBSSxDQUFDc0Qsd0JBQXdCLENBQUN0RCxDQUFDLEVBQUVsRixTQUFTO01BQUUsQ0FDaEYsQ0FBQztJQUVKOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUFILE1BQUEsQ0FNYzZDLFdBQVcsR0FBekIsZUFBY0EsV0FBV0EsQ0FBQzFDLFNBQTBCLEVBQUVrRCxnQkFBeUIsRUFBa0I7TUFDaEcsSUFBSUMsT0FBTyxHQUFHLE9BQU87TUFDckIsSUFBSXNGLGVBQWU7TUFDbkIsSUFBSUMsWUFBWTtNQUNoQixJQUFJO1FBQ0h2RixPQUFPLEdBQUcsTUFBTUMsV0FBVyxDQUFDQyx3QkFBd0IsQ0FBQ0gsZ0JBQWdCLENBQUNJLFNBQVMsQ0FBQyxDQUFDLEVBQUU7VUFBRUMsT0FBTyxFQUFFTDtRQUFpQixDQUFDLENBQUM7UUFDakh3RixZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUNDLHVCQUF1QixDQUFDM0ksU0FBUyxFQUFFa0QsZ0JBQWdCLEVBQUU7VUFBRUssT0FBTyxFQUFFTDtRQUFpQixDQUFDLENBQUM7UUFDN0csSUFBSThCLFlBQVksQ0FBQ2hGLFNBQVMsQ0FBQyxFQUFFO1VBQzVCeUksZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDRyxrQkFBa0IsQ0FBQztZQUFFckYsT0FBTyxFQUFFTDtVQUFpQixDQUFDLENBQUM7UUFDL0U7TUFDRCxDQUFDLENBQUMsT0FBT00sR0FBWSxFQUFFO1FBQ3RCQyxHQUFHLENBQUNDLE9BQU8sQ0FBQyxnRkFBZ0YxRCxTQUFTLENBQUMyQixJQUFJLE1BQU02QixHQUFHLEVBQUUsQ0FBQztNQUN2SDtNQUNBLE1BQU1HLFdBQVcsR0FBRzNELFNBQVMsQ0FBQ0MsV0FBVyxDQUFDMkQsRUFBRSxFQUFFQyxXQUFpRTtNQUMvRyxNQUFNQyxxQkFBcUIsR0FBR0gsV0FBVyxHQUFHSSxpQkFBaUIsQ0FBQ0MsMkJBQTJCLENBQUNMLFdBQVcsQ0FBQyxDQUFDLEdBQUdNLFNBQVM7TUFDbkgsT0FDQ25CLElBQUEsQ0FBQytGLEtBQUs7UUFDTHJFLFFBQVEsRUFBRTtVQUFFN0MsSUFBSSxFQUFFLHVDQUF1QztVQUFFbUgsT0FBTyxFQUFFO1lBQUVDLHlCQUF5QixFQUFFO1VBQUs7UUFBRSxDQUFFO1FBQzFHaEcsRUFBRSxFQUFFQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUVoRCxTQUFTLENBQUMyQixJQUFJLENBQUMsQ0FBRTtRQUN2Q3FILEtBQUssRUFBRU4sWUFBYTtRQUNwQnJFLFdBQVcsRUFBRVAscUJBQXNCO1FBQ25DWCxPQUFPLEVBQUVBLE9BQVE7UUFDakJzQixRQUFRLEVBQUUsSUFBSSxDQUFDMUUsb0JBQW9CLENBQUNDLFNBQVMsQ0FBRTtRQUMvQzBFLEtBQUssRUFBQyxNQUFNO1FBQ1pDLGFBQWEsRUFBRXNFLGVBQWUsQ0FBQ2pKLFNBQVMsQ0FBRTtRQUMxQzZFLFFBQVEsRUFBRWQsaUJBQWlCLENBQUNlLG1DQUFtQyxDQUFDOUUsU0FBUyxFQUFFLElBQUksQ0FBQy9CLE1BQU0sRUFBRXdELFlBQVksQ0FBQyxJQUFJLENBQUMxQyxTQUFTLENBQUMsQ0FBQyxDQUFFO1FBQ3ZIa0csTUFBTSxFQUFFLE1BQU9DLENBQUMsSUFBb0IsSUFBSSxDQUFDQyxpQkFBaUIsQ0FBQ0QsQ0FBQyxFQUFFbEYsU0FBUyxDQUFFO1FBQ3pFK0UsU0FBUyxFQUFFQyxZQUFZLENBQUNoRixTQUFTLENBQUMsR0FBR2dELFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQ3BFLFVBQVUsRUFBRW9CLFNBQVMsQ0FBQzJCLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUdzQyxTQUFVO1FBQy9Hd0IsVUFBVSxFQUFFLElBQUksQ0FBQ0MsOEJBQThCLENBQUMxRixTQUFTLEVBQUVrRCxnQkFBZ0IsQ0FBRTtRQUM3RWtDLE9BQU8sRUFBRXJCLGlCQUFpQixDQUN6QmpELE1BQU0sQ0FDTGQsU0FBUyxDQUFDMkIsSUFBSSxLQUFLLHNCQUFzQixFQUN6QyxLQUFLLEVBQ0wwRCxHQUFHLENBQUNDLEtBQUssQ0FBQ3RCLDJCQUEyQixDQUFDaEUsU0FBUyxDQUFDQyxXQUFXLEVBQUUyRCxFQUFFLEVBQUUyQixNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FDaEYsQ0FDRCxDQUFFO1FBQ0ZDLGNBQWMsRUFBRSxDQUFDeEMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFaEQsU0FBUyxDQUFDMkIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUU7UUFDOUQ4RyxlQUFlLEVBQUVBO01BQWdCLENBQ2pDLENBQUM7SUFFSjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBNUksTUFBQSxDQU1RNkYsOEJBQThCLEdBQXRDLFNBQVFBLDhCQUE4QkEsQ0FBQzFGLFNBQTBCLEVBQUVrRCxnQkFBeUIsRUFBeUI7TUFDcEgsSUFBSSxDQUFDOEIsWUFBWSxDQUFDaEYsU0FBUyxDQUFDLEVBQUU7UUFDN0IsT0FBT2lFLFNBQVM7TUFDakI7TUFDQSxPQUNDbkIsSUFBQSxDQUFDb0csU0FBUztRQUNUbkcsRUFBRSxFQUFFQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUNwRSxVQUFVLEVBQUVvQixTQUFTLENBQUMyQixJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBRTtRQUNsRTZDLFFBQVEsRUFBRTtVQUNUN0MsSUFBSSxFQUFFLDJDQUEyQztVQUNqRG1ILE9BQU8sRUFBRTtZQUNSSyxZQUFZLEVBQUUsSUFBSSxDQUFDbEwsTUFBTSxDQUFDb0QsT0FBTyxHQUM5QixHQUFHK0gsdUJBQXVCLENBQUNDLDJCQUEyQixDQUFrQm5HLGdCQUFnQixDQUFDLENBQUMsSUFDMUYsSUFBSSxDQUFDdEUsVUFBVSxJQUNYb0IsU0FBUyxDQUFDMkIsSUFBSSxFQUFFLEdBQ3BCLElBQUksSUFBSSxDQUFDMUQsTUFBTSxDQUFDMEQsSUFBSSxDQUFDMkgsU0FBUyxDQUFDLElBQUksQ0FBQ3JMLE1BQU0sQ0FBQzBELElBQUksQ0FBQzRILFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSXZKLFNBQVMsQ0FBQzJCLElBQUksRUFBRTtZQUM1RjZILFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDZEMsa0JBQWtCLEVBQUU7VUFDckI7UUFDRCxDQUFFO1FBQ0ZDLGFBQWEsRUFBRUMsa0JBQWtCLENBQUMzSixTQUFTLENBQUU7UUFDN0M0SixTQUFTLEVBQ1I5RyxJQUFBLENBQUMrRyxPQUFPO1VBQUFoSCxRQUFBLEVBQ1BDLElBQUEsQ0FBQ2dILE1BQU07WUFDTi9HLEVBQUUsRUFBRUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDcEUsVUFBVSxFQUFFb0IsU0FBUyxDQUFDMkIsSUFBSSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBRTtZQUN4RW9JLGFBQWEsRUFDWixJQUFJLENBQUM5TCxNQUFNLENBQUNvRCxPQUFPLEdBQ2hCMkksOEJBQThCLENBQzlCWCwyQkFBMkIsQ0FBa0JuRyxnQkFBZ0IsQ0FBQyxFQUM3RHpCLFlBQVksQ0FBQyxJQUFJLENBQUMxQyxTQUFTLENBQUMsQ0FBQ2tMLGVBQWUsQ0FBQ2hLLFdBQVcsQ0FBQ2lLLFlBQVksRUFDbkVDLGVBQWUsSUFBNEIsRUFDOUMsQ0FBQyxHQUNEQyxXQUFXLENBQUNDLHdCQUF3QixDQUFDLElBQUksQ0FBQ3RMLFNBQVMsQ0FDdEQ7WUFDRHVMLGNBQWMsRUFBRSxDQUFDLENBQUN0SyxTQUFTLENBQUNDLFdBQVcsQ0FBQ0UsTUFBTSxFQUFFb0s7VUFBeUIsQ0FDekU7UUFBQyxDQUNNLENBQ1Q7UUFDREMsTUFBTSxFQUFFLElBQUksQ0FBQ0MsbUJBQW1CLENBQUN6SyxTQUFTO01BQUUsQ0FDakMsQ0FBQztJQUVmOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBSCxNQUFBLENBS1E0SyxtQkFBbUIsR0FBM0IsU0FBUUEsbUJBQW1CQSxDQUFDekssU0FBMEIsRUFBd0I7TUFDN0UsSUFBSUEsU0FBUyxDQUFDQyxXQUFXLENBQUNFLE1BQU0sRUFBRW9LLHdCQUF3QixFQUFFL0osT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDL0UsT0FBT3NDLElBQUEsQ0FBQzRILFFBQVEsSUFBRSxDQUFDO01BQ3BCLENBQUMsTUFBTTtRQUNOLE9BQU96RyxTQUFTO01BQ2pCO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQXBFLE1BQUEsQ0FNY3NGLGlCQUFpQixHQUEvQixlQUFjQSxpQkFBaUJBLENBQUNrQixLQUFzRCxFQUFFckcsU0FBMEIsRUFBaUI7TUFDbEksTUFBTTJLLFlBQVksR0FBSXRFLEtBQUssQ0FBdUJJLFlBQVksQ0FBQyxTQUFTLENBQUM7TUFDekUsTUFBTTNFLEtBQUssR0FBSXVFLEtBQUssQ0FBdUJFLFNBQVMsQ0FBQyxDQUE0QjtNQUNqRixNQUFNcUUsYUFBYSxHQUFHLElBQUksQ0FBQ3BNLG9CQUFvQixDQUFDcU0sSUFBSSxDQUFFQyxtQkFBbUIsSUFBS0EsbUJBQW1CLENBQUNoSixLQUFLLEtBQUtBLEtBQUssQ0FBQztNQUNsSCxJQUFJLENBQUM4SSxhQUFhLEVBQUU7UUFDbkI7TUFDRDtNQUNBQSxhQUFhLENBQUNHLGlCQUFpQixHQUFHSixZQUFZO01BQzlDO01BQ0EsSUFBSSxDQUFDSywwQkFBMEIsQ0FBQ2hMLFNBQVMsQ0FBQztNQUMxQyxJQUFJO1FBQ0g0SyxhQUFhLENBQUM1QixLQUFLLEdBQUcsTUFBTTJCLFlBQVk7UUFDeEMsSUFBSSxDQUFDek0sVUFBVSxDQUFDK00sZ0JBQWdCLENBQUNMLGFBQWEsQ0FBQzVLLFNBQVMsQ0FBQzJCLElBQUksQ0FBQyxHQUFHaUosYUFBYSxDQUFDNUIsS0FBSztRQUNwRjRCLGFBQWEsQ0FBQ00sUUFBUSxHQUFHLEtBQUs7TUFDL0IsQ0FBQyxDQUFDLE9BQU9DLEtBQUssRUFBRTtRQUNmLE9BQU9QLGFBQWEsQ0FBQzVCLEtBQUs7UUFDMUI0QixhQUFhLENBQUNNLFFBQVEsR0FBRyxJQUFJO1FBQzdCRSxhQUFhLENBQUNDLDZCQUE2QixDQUFDLENBQzNDO1VBQ0NQLG1CQUFtQixFQUFFRixhQUFhO1VBQ2xDVSxPQUFPLEVBQUdILEtBQUssQ0FBeUJHO1FBQ3pDLENBQUMsQ0FDRCxDQUFDO01BQ0g7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBekwsTUFBQSxDQU1jMkksd0JBQXdCLEdBQXRDLGVBQWNBLHdCQUF3QkEsQ0FBQ25DLEtBQStCLEVBQUVyRyxTQUEwQixFQUFpQjtNQUNsSCxNQUFNdUwsS0FBSyxHQUFHbEYsS0FBSyxDQUFDSSxZQUFZLENBQUMsT0FBTyxDQUFDO01BQ3pDLE1BQU1ILFlBQVksR0FBR0QsS0FBSyxDQUFDRSxTQUFTLENBQUMsQ0FBQztNQUN0QztNQUNBLE1BQU1xRSxhQUFhLEdBQUcsSUFBSSxDQUFDcE0sb0JBQW9CLENBQUNxTSxJQUFJLENBQUVDLG1CQUFtQixJQUFLQSxtQkFBbUIsQ0FBQ2hKLEtBQUssS0FBS3dFLFlBQVksQ0FBQztNQUN6SCxJQUFJLENBQUNzRSxhQUFhLElBQUksQ0FBQ1csS0FBSyxFQUFFO1FBQzdCO01BQ0Q7TUFDQSxJQUFJLENBQUNQLDBCQUEwQixDQUFDaEwsU0FBUyxDQUFDO01BQzFDNEssYUFBYSxDQUFDNUIsS0FBSyxHQUFHLENBQUMsQ0FBQztNQUN4QixJQUFJLElBQUksQ0FBQ3hHLGlCQUFpQixDQUFDeEMsU0FBUyxDQUFDLEVBQUU7UUFDdEM0SyxhQUFhLENBQUM1QixLQUFLLENBQUMsSUFBSSxDQUFDeEcsaUJBQWlCLENBQUN4QyxTQUFTLENBQUMsRUFBRTJCLElBQUksQ0FBcUMsR0FDL0YsTUFBTSxJQUFJLENBQUM2SixhQUFhLENBQUNELEtBQUssQ0FBQztRQUNoQ1gsYUFBYSxDQUFDNUIsS0FBSyxDQUFFLElBQUksQ0FBQ3lDLGVBQWUsQ0FBQ3pMLFNBQVMsQ0FBQyxDQUFtQ3VFLElBQUksQ0FBQyxHQUMxRmdILEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBVWpKLElBQUksSUFBSSwwQkFBMEI7UUFDdERzSSxhQUFhLENBQUM1QixLQUFLLENBQUMsSUFBSSxDQUFDMEMsZUFBZSxDQUFDMUwsU0FBUyxDQUFDLENBQVcsR0FBSXVMLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBVTVKLElBQUk7UUFDeEZpSixhQUFhLENBQUNNLFFBQVEsR0FBRyxLQUFLO1FBQzlCLElBQUksQ0FBQ2hOLFVBQVUsQ0FBQytNLGdCQUFnQixDQUFDTCxhQUFhLENBQUM1SyxTQUFTLENBQUMyQixJQUFJLENBQUMsR0FBR2lKLGFBQWEsQ0FBQzVCLEtBQUs7TUFDckY7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQW5KLE1BQUEsQ0FLUTZMLGVBQWUsR0FBdkIsU0FBUUEsZUFBZUEsQ0FBQzFMLFNBQTBCLEVBQXNCO01BQ3ZFLE9BQU8sQ0FBQyxJQUFJLENBQUN3QyxpQkFBaUIsQ0FBQ3hDLFNBQVMsQ0FBQyxFQUFFQyxXQUFXLENBQUNLLElBQUksRUFBRXFMLGtCQUFrQixFQUFFQyxRQUFRLEVBQXNDckgsSUFBSTtJQUNwSTs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQTFFLE1BQUEsQ0FLUTRMLGVBQWUsR0FBdkIsU0FBUUEsZUFBZUEsQ0FBQ3pMLFNBQTBCLEVBQWdEO01BQ2pHLE9BQU9nRSwyQkFBMkIsQ0FBQyxJQUFJLENBQUN4QixpQkFBaUIsQ0FBQ3hDLFNBQVMsQ0FBQyxFQUFFQyxXQUFXLENBQUNLLElBQUksRUFBRXVMLFNBQVMsQ0FBQztJQUNuRzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQWhNLE1BQUEsQ0FLUTJDLGlCQUFpQixHQUF6QixTQUFRQSxpQkFBaUJBLENBQUN4QyxTQUEwQixFQUF3QjtNQUMzRSxPQUFRQSxTQUFTLENBQUM4TCxhQUFhLENBQWlCQyxVQUFVLEVBQUVsQixJQUFJLENBQUVtQixRQUFRLElBQUtBLFFBQVEsQ0FBQzFKLElBQUksS0FBSyxZQUFZLENBQUM7SUFDL0c7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUF6QyxNQUFBLENBS2MyTCxhQUFhLEdBQTNCLGVBQWNBLGFBQWFBLENBQUNELEtBQWUsRUFBbUI7TUFDN0QsT0FBTyxJQUFJaE0sT0FBTyxDQUFFQyxPQUFPLElBQUs7UUFDL0IsTUFBTXlNLE1BQU0sR0FBRyxJQUFJQyxVQUFVLENBQUMsQ0FBQztRQUMvQkQsTUFBTSxDQUFDRSxNQUFNLEdBQUcsTUFBWTtVQUMzQixJQUFJLENBQUNGLE1BQU0sQ0FBQ0csTUFBTSxFQUFFO1lBQ25CO1VBQ0Q7VUFDQTVNLE9BQU8sQ0FBRXlNLE1BQU0sQ0FBQ0csTUFBTSxDQUFZQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNESixNQUFNLENBQUNLLGFBQWEsQ0FBRWYsS0FBSyxDQUF5QmdCLElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQztNQUM5RCxDQUFDLENBQUM7SUFDSDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUExTSxNQUFBLENBSVFtTCwwQkFBMEIsR0FBbEMsU0FBUUEsMEJBQTBCQSxDQUFDaEwsU0FBMEIsRUFBUTtNQUNwRSxNQUFNd00sUUFBUSxHQUFHQyxTQUFTLENBQUNDLGVBQWUsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxDQUFDO01BQ3RELE1BQU1DLFNBQVMsR0FBRzVKLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRWhELFNBQVMsQ0FBQzJCLElBQUksQ0FBQyxDQUFDO01BQ3BEO01BQ0EsTUFBTWtMLGdCQUFnQixHQUFHTCxRQUFRLENBQUNNLE1BQU0sQ0FBRUMsR0FBWSxJQUNyREEsR0FBRyxDQUFDQyxhQUFhLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUVsSyxFQUFVLElBQUs2SixTQUFTLENBQUNQLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ2EsUUFBUSxDQUFDbkssRUFBRSxDQUFDLENBQzNFLENBQUM7TUFDRDBKLFNBQVMsQ0FBQ1UsY0FBYyxDQUFDTixnQkFBZ0IsQ0FBQztJQUMzQzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQWhOLE1BQUEsQ0FLY3VOLGVBQWUsR0FBN0IsZUFBY0EsZUFBZUEsQ0FBQ3BOLFNBQTBCLEVBQStCO01BQ3RGLE1BQU1xTixZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUNsTSxpQkFBaUIsQ0FBQ25CLFNBQVMsQ0FBQztNQUM1RCxPQUFPO1FBQ05xTixZQUFZLEVBQUVBLFlBQVk7UUFDMUJyTixTQUFTLEVBQUVBO01BQ1osQ0FBQztJQUNGOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQUgsTUFBQSxDQUlBeU4sU0FBUyxHQUFULFNBQUFBLFNBQVNBLENBQUEsRUFBdUI7TUFDL0IsT0FBTyxJQUFJLENBQUM5QyxNQUFNO0lBQ25COztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQTNLLE1BQUEsQ0FJTTBOLFlBQVksR0FBbEIsZUFBTUEsWUFBWUEsQ0FBQSxFQUFvQjtNQUNyQyxJQUFJQyxjQUFpQyxHQUFHLEVBQUU7TUFDMUMsSUFBSUMsNEJBQWtELEdBQUcsRUFBRTtNQUMzRCxNQUFNQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUN6UCxNQUFNLENBQUNvRCxPQUFPLEdBQUcsSUFBSSxDQUFDcEQsTUFBTSxDQUFDQyxVQUFVLENBQUN5UCxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDMVAsTUFBTSxDQUFDQyxVQUFVOztNQUV2RztNQUNBO01BQ0EsSUFBSSxJQUFJLENBQUNELE1BQU0sQ0FBQ2dDLFdBQVcsRUFBRTJELEVBQUUsRUFBRWdLLHdCQUF3QixFQUFFO1FBQzFELE1BQU1DLHFCQUFxQyxHQUFHLEVBQUU7UUFDaEQsSUFBSSxDQUFDNVAsTUFBTSxDQUFDZ0MsV0FBVyxDQUFDMkQsRUFBRSxFQUFFZ0ssd0JBQXdCLEVBQUVFLE9BQU8sQ0FBQyxVQUFVQyxLQUFxQixFQUFFO1VBQzlGLElBQUlDLFVBQVU7VUFDZCxJQUFJRCxLQUFLLENBQUNFLEtBQUssZ0RBQXFDLEVBQUU7WUFDckRELFVBQVUsR0FBR0QsS0FBSyxDQUFDL0wsS0FBSztVQUN6QjtVQUNBLElBQUlrTSxtQkFBbUIsQ0FBQ0gsS0FBSyxDQUFDLEVBQUU7WUFDL0IsTUFBTUksVUFBVSxHQUFHSixLQUFLLEVBQUVLLE1BQU0sRUFBRUMsT0FBeUI7WUFDM0QsTUFBTUMsdUJBQTBDLEdBQUcsRUFBRTtZQUVyREgsVUFBVSxDQUFDSSxJQUFJLENBQUNULE9BQU8sQ0FBQyxVQUFVVSxLQUFjLEVBQUU7Y0FDakRGLHVCQUF1QixDQUFDRyxJQUFJLENBQUVELEtBQUssQ0FBZUUsS0FBSyxDQUFDTCxPQUEwQixDQUFDO1lBQ3BGLENBQUMsQ0FBQztZQUNGUixxQkFBcUIsQ0FBQ1ksSUFBSSxDQUFDO2NBQzFCVCxVQUFVLEVBQUVBLFVBQXlEO2NBQ3JFVyxJQUFJLEVBQUVMO1lBQ1AsQ0FBQyxDQUFDO1VBQ0g7UUFDRCxDQUFDLENBQUM7O1FBRUY7UUFDQSxNQUFNTSxZQUFZLEdBQUcsTUFBT0osS0FBbUIsSUFBcUM7VUFDbkYsTUFBTW5CLFlBQVksR0FBRyxNQUFNOU4sT0FBTyxDQUFDc1AsR0FBRyxDQUFDTCxLQUFLLENBQUNHLElBQUksQ0FBQ3pJLEdBQUcsQ0FBQyxJQUFJLENBQUNrSCxlQUFlLENBQUMwQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztVQUN2RixPQUFPO1lBQUVkLFVBQVUsRUFBRVEsS0FBSyxDQUFDUixVQUFVO1lBQUVXLElBQUksRUFBRXRCO1VBQWEsQ0FBQztRQUM1RCxDQUFDO1FBRUQsTUFBTTBCLFFBQVEsR0FBR2xCLHFCQUFxQixDQUFDM0gsR0FBRyxDQUFDLE1BQU84SSxjQUFjLElBQUtKLFlBQVksQ0FBQ0ksY0FBYyxDQUFDLENBQUM7UUFDbEcsTUFBTUMsUUFBUSxHQUFHLE1BQU0xUCxPQUFPLENBQUNzUCxHQUFHLENBQUNFLFFBQVEsQ0FBQzs7UUFFNUM7UUFDQUUsUUFBUSxDQUFDbkIsT0FBTyxDQUFFb0IsYUFBYSxJQUFLO1VBQ25DMUIsY0FBYyxDQUFDaUIsSUFBSSxDQUFDM0wsSUFBQSxDQUFDcU0sS0FBSztZQUFDbE0sSUFBSSxFQUFFaU0sYUFBYSxDQUFDbEI7VUFBVyxDQUFFLENBQUMsQ0FBQztVQUM5RCxPQUFPa0IsYUFBYSxDQUFDUCxJQUFJLENBQUN6SSxHQUFHLENBQUVrSixPQUFPLElBQUs1QixjQUFjLENBQUNpQixJQUFJLENBQUNXLE9BQU8sQ0FBQy9CLFlBQVksQ0FBQyxDQUFDO1FBQ3RGLENBQUMsQ0FBQztRQUVGNEIsUUFBUSxDQUFDbkIsT0FBTyxDQUFDLFVBQVV1QixPQUFPLEVBQUU7VUFDbkNBLE9BQU8sQ0FBQ1YsSUFBSSxDQUFDYixPQUFPLENBQUMsVUFBVXNCLE9BQU8sRUFBRTtZQUN2QzNCLDRCQUE0QixDQUFDZ0IsSUFBSSxDQUFDVyxPQUFPLENBQUM7VUFDM0MsQ0FBQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDO01BQ0gsQ0FBQyxNQUFNO1FBQ047UUFDQTNCLDRCQUE0QixHQUFHLE1BQU1sTyxPQUFPLENBQUNzUCxHQUFHLENBQUNuQixnQkFBZ0IsQ0FBQ3hILEdBQUcsQ0FBQyxJQUFJLENBQUNrSCxlQUFlLENBQUMwQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN2R3RCLGNBQWMsR0FBR0MsNEJBQTRCLENBQUN2SCxHQUFHLENBQUVnSixhQUFhLElBQUs7VUFDcEUsT0FBT0EsYUFBYSxDQUFDN0IsWUFBWTtRQUNsQyxDQUFDLENBQUM7TUFDSDtNQUVBLElBQUksQ0FBQ2lDLDJCQUEyQixDQUFDN0IsNEJBQTRCLENBQUM7O01BRTlEOztNQUVBLE1BQU04QixZQUFZLEdBQUcsSUFBSSxDQUFDQywrQkFBK0IsQ0FBQyxDQUFDO01BRTNELE1BQU1DLFNBQVMsR0FDZDNNLElBQUEsQ0FBQzRNLE1BQU07UUFDTjNNLEVBQUUsRUFBRUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUNwRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFFO1FBQ2xFcUUsSUFBSSxFQUFFLElBQUksQ0FBQy9ELGFBQWEsQ0FBQytDLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBRTtRQUM1RTBOLEtBQUssRUFBRUEsQ0FBQSxLQUFZO1VBQ2xCLElBQUksQ0FBQ0MsUUFBUSxDQUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzQjtNQUFFLENBQ0YsQ0FDRDtNQUNELE1BQU10RSxNQUFNLEdBQ1gxSCxJQUFBLENBQUMrTSxNQUFNO1FBQ05DLEtBQUssRUFBRSxJQUFJLENBQUNDLFlBQVksQ0FBQyxJQUFJLENBQUM3UixVQUFVLENBQUM2RCxLQUFLLENBQUU7UUFDaERnQixFQUFFLEVBQUVDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDcEUsVUFBVSxDQUFDLENBQUU7UUFDOUNvUixhQUFhLEVBQUUsSUFBSSxDQUFDSixRQUFRLENBQUNkLElBQUksQ0FBQyxJQUFJLENBQUU7UUFDeENtQixTQUFTLEVBQUUsSUFBSztRQUNoQkMsU0FBUyxFQUFFLElBQUs7UUFDaEJDLFVBQVUsRUFBRSxJQUFJLENBQUNBLFVBQVUsQ0FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUU7UUFDdkNzQixVQUFVLEVBQUUsSUFBSSxDQUFDQSxVQUFVLENBQUN0QixJQUFJLENBQUMsSUFBSSxDQUFFO1FBQ3ZDdUIsU0FBUyxFQUFFQSxDQUFBLEtBQVk7VUFDdEIsSUFBSSxDQUFDQSxTQUFTLENBQUMsQ0FBQztRQUNqQixDQUFFO1FBQ0ZDLFlBQVksRUFBRWIsU0FBVSxDQUFDO1FBQUE7UUFBQTVNLFFBQUEsRUFFeEI7VUFDQTBOLFdBQVcsRUFDVnpOLElBQUEsQ0FBQzRNLE1BQU07WUFDTjNNLEVBQUUsRUFBRUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUNwRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFFO1lBQzlEcUUsSUFBSSxFQUNILElBQUksQ0FBQy9FLFVBQVUsQ0FBQ3NTLGNBQWMsS0FBSyxJQUFJLEdBQ3BDLElBQUksQ0FBQ3RSLGFBQWEsQ0FBQytDLE9BQU8sQ0FBQywwREFBMEQsQ0FBQyxHQUN0RixJQUFJLENBQUN3TyxtQkFBbUIsQ0FBQyxJQUFJLENBQUN2UyxVQUFVLENBQUM2RCxLQUFLLENBQ2pEO1lBQ0Q0TixLQUFLLEVBQUVBLENBQUEsS0FBWTtjQUNsQixJQUFJLENBQUNlLE9BQU8sQ0FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzFCLENBQUU7WUFDRnhNLElBQUksRUFBQztVQUFZLENBQ2pCLENBQ0Q7VUFDRG1OLFNBQVMsRUFBRUEsU0FBUztVQUNwQmtCLE9BQU87VUFDTjtVQUNBO1VBQ0E7VUFDQWhPLEtBQUEsQ0FBQUMsU0FBQTtZQUFBQyxRQUFBLEdBQ0UwTSxZQUFZLElBQUl6TSxJQUFBLENBQUM4TixZQUFZO2NBQUNDLFFBQVEsRUFBQyxNQUFNO2NBQUM1TixJQUFJLEVBQUVzTTtZQUFhLENBQWUsQ0FBQyxFQUNsRnpNLElBQUEsQ0FBQ2dPLFVBQVU7Y0FBQ0MsUUFBUSxFQUFFLEdBQUk7Y0FBQ0MsUUFBUSxFQUFDLE1BQU07Y0FBQ0MsVUFBVSxFQUFFLElBQUs7Y0FBQ0MsVUFBVSxFQUFFLElBQUs7Y0FBQ0MsT0FBTyxFQUFFLFlBQWE7Y0FBQXRPLFFBQUEsRUFDbkc7Z0JBQUU4TixPQUFPLEVBQUVuRDtjQUFlO1lBQUMsQ0FDakIsQ0FBQztVQUFBLENBQ1o7UUFFSjtNQUFDLENBQ00sQ0FDUjtNQUNELElBQUksQ0FBQ2hELE1BQU0sR0FBR0EsTUFBTTtNQUNwQixPQUFPQSxNQUFNO0lBQ2Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUEzSyxNQUFBLENBS1E0USxtQkFBbUIsR0FBM0IsU0FBUUEsbUJBQW1CQSxDQUFDVyxXQUErQixFQUFVO01BQ3BFLE1BQU1DLEdBQUcsR0FBRyxxQ0FBcUM7TUFDakQsTUFBTUMsVUFBVSxHQUFHLG9CQUFvQjtNQUN2QyxPQUFPLElBQUksQ0FBQ0MsaUJBQWlCLENBQUNGLEdBQUcsRUFBRUMsVUFBVSxFQUFFRixXQUFXLENBQUM7SUFDNUQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUF2UixNQUFBLENBS1FrUSxZQUFZLEdBQXBCLFNBQVFBLFlBQVlBLENBQUNxQixXQUErQixFQUFVO01BQzdELE1BQU1DLEdBQUcsR0FBRyxzQ0FBc0M7TUFDbEQsTUFBTUMsVUFBVSxHQUFHLDRDQUE0QztNQUMvRCxPQUFPLElBQUksQ0FBQ0MsaUJBQWlCLENBQUNGLEdBQUcsRUFBRUMsVUFBVSxFQUFFRixXQUFXLENBQUM7SUFDNUQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBdlIsTUFBQSxDQUlRMlAsK0JBQStCLEdBQXZDLFNBQVFBLCtCQUErQkEsQ0FBQSxFQUF1QjtNQUM3RCxNQUFNNkIsR0FBRyxHQUFHLHNDQUFzQztNQUNsRCxJQUFJRyxlQUFlLEdBQUcsSUFBSSxDQUFDNVMsVUFBVTtNQUNyQzRTLGVBQWUsR0FBR0EsZUFBZSxDQUFDbkYsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDb0YsR0FBRyxDQUFDLENBQUMsSUFBSUQsZUFBZTtNQUNyRSxNQUFNRSxpQkFBaUIsR0FBR0YsZUFBZSxJQUFJLElBQUksQ0FBQ3BULGFBQWEsR0FBRyxHQUFHLElBQUksQ0FBQ0EsYUFBYSxJQUFJb1QsZUFBZSxFQUFFLEdBQUcsRUFBRTtNQUNqSCxJQUFJLElBQUksQ0FBQ3RTLGFBQWEsQ0FBQ3lTLHdCQUF3QixDQUFDLEdBQUdOLEdBQUcsSUFBSUssaUJBQWlCLEVBQUUsQ0FBQyxFQUFFO1FBQy9FLE9BQU8sSUFBSSxDQUFDeFMsYUFBYSxDQUFDK0MsT0FBTyxDQUFDb1AsR0FBRyxFQUFFcE4sU0FBUyxFQUFFeU4saUJBQWlCLENBQUM7TUFDckUsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDeFMsYUFBYSxDQUFDeVMsd0JBQXdCLENBQUMsR0FBR04sR0FBRyxJQUFJLElBQUksQ0FBQ2pULGFBQWEsRUFBRSxDQUFDLEVBQUU7UUFDdkYsT0FBTyxJQUFJLENBQUNjLGFBQWEsQ0FBQytDLE9BQU8sQ0FBQ29QLEdBQUcsRUFBRXBOLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQzdGLGFBQWEsRUFBRSxDQUFDO01BQzNFLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQ2MsYUFBYSxDQUFDeVMsd0JBQXdCLENBQUMsR0FBR04sR0FBRyxFQUFFLENBQUMsRUFBRTtRQUNqRSxPQUFPLElBQUksQ0FBQ25TLGFBQWEsQ0FBQytDLE9BQU8sQ0FBQ29QLEdBQUcsQ0FBQztNQUN2QztNQUNBLE9BQU9wTixTQUFTO0lBQ2pCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTkM7SUFBQXBFLE1BQUEsQ0FPUTBSLGlCQUFpQixHQUF6QixTQUFRQSxpQkFBaUJBLENBQUNGLEdBQVcsRUFBRUMsVUFBa0IsRUFBRUYsV0FBb0IsRUFBVTtNQUN4RixJQUFJSSxlQUFlLEdBQUcsSUFBSSxDQUFDNVMsVUFBVTtNQUNyQzRTLGVBQWUsR0FBR0EsZUFBZSxDQUFDbkYsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDb0YsR0FBRyxDQUFDLENBQUMsSUFBSUQsZUFBZTtNQUNyRSxNQUFNRSxpQkFBaUIsR0FBR0YsZUFBZSxJQUFJLElBQUksQ0FBQ3BULGFBQWEsR0FBRyxHQUFHLElBQUksQ0FBQ0EsYUFBYSxJQUFJb1QsZUFBZSxFQUFFLEdBQUcsRUFBRTtNQUNqSCxJQUFJSixXQUFXLEVBQUU7UUFDaEIsSUFBSSxJQUFJLENBQUNsUyxhQUFhLENBQUN5Uyx3QkFBd0IsQ0FBQyxHQUFHTixHQUFHLElBQUlLLGlCQUFpQixFQUFFLENBQUMsRUFBRTtVQUMvRSxPQUFPLElBQUksQ0FBQ3hTLGFBQWEsQ0FBQytDLE9BQU8sQ0FBQ29QLEdBQUcsRUFBRXBOLFNBQVMsRUFBRXlOLGlCQUFpQixDQUFDO1FBQ3JFLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQ3hTLGFBQWEsQ0FBQ3lTLHdCQUF3QixDQUFDLEdBQUdOLEdBQUcsSUFBSSxJQUFJLENBQUNqVCxhQUFhLEVBQUUsQ0FBQyxFQUFFO1VBQ3ZGLE9BQU8sSUFBSSxDQUFDYyxhQUFhLENBQUMrQyxPQUFPLENBQUNvUCxHQUFHLEVBQUVwTixTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUM3RixhQUFhLEVBQUUsQ0FBQztRQUMzRSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUNjLGFBQWEsQ0FBQ3lTLHdCQUF3QixDQUFDLEdBQUdOLEdBQUcsRUFBRSxDQUFDLEVBQUU7VUFDakUsT0FBTyxJQUFJLENBQUNuUyxhQUFhLENBQUMrQyxPQUFPLENBQUNvUCxHQUFHLENBQUM7UUFDdkMsQ0FBQyxNQUFNO1VBQ04sT0FBT0QsV0FBVztRQUNuQjtNQUNELENBQUMsTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDbFMsYUFBYSxDQUFDK0MsT0FBTyxDQUFDcVAsVUFBVSxDQUFDO01BQzlDO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBelIsTUFBQSxDQUljNlEsT0FBTyxHQUFyQixlQUFjQSxPQUFPQSxDQUFBLEVBQWtCO01BQ3RDO01BQ0EsSUFBSSxJQUFJLENBQUNuUyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUNpTSxNQUFNLEVBQUU7UUFDcEM7TUFDRDtNQUNBLE1BQU1BLE1BQU0sR0FBRyxJQUFJLENBQUNBLE1BQU07TUFFMUIsTUFBTXRILGdCQUFnQixHQUFJc0gsTUFBTSxDQUFDb0gsZ0JBQWdCLENBQUMsQ0FBQyxFQUFzQ0MsbUJBQW1CLENBQUMsQ0FBQzs7TUFFOUc7TUFDQSxJQUFJLENBQUN0VCxVQUFVLEdBQUcsSUFBSTtNQUN0QnVULFVBQVUsQ0FBQ0MsSUFBSSxDQUFDdkgsTUFBTSxDQUFDOztNQUV2QjtNQUNBO01BQ0E7TUFDQSxJQUFJLEVBQUUsTUFBTVksYUFBYSxDQUFDNEcsa0JBQWtCLENBQUMsSUFBSSxDQUFDeFQsb0JBQW9CLEVBQUUsSUFBSSxDQUFDVSxhQUFhLENBQUMsQ0FBQyxFQUFFO1FBQzdGNFMsVUFBVSxDQUFDRyxNQUFNLENBQUN6SCxNQUFNLENBQUM7UUFDekIsSUFBSSxDQUFDak0sVUFBVSxHQUFHLEtBQUs7UUFDdkI7TUFDRDtNQUVBLE1BQU0yVCxtQkFBbUIsR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQ3hDLENBQUMsQ0FBQyxFQUNGLEdBQUcsSUFBSSxDQUFDNVQsb0JBQW9CLENBQUMwSCxHQUFHLENBQUUxSCxvQkFBb0IsSUFBSztRQUMxRCxNQUFNd0IsU0FBUyxHQUFHeEIsb0JBQW9CLENBQUN3QixTQUFTO1FBQ2hELElBQUlnSixLQUFLO1FBQ1QsSUFBSWhKLFNBQVMsQ0FBQ29DLFlBQVksRUFBRTtVQUMzQjRHLEtBQUssR0FBR21KLE1BQU0sQ0FBQ0UsTUFBTSxDQUFFN0gsTUFBTSxDQUFDOEgsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFlQyxXQUFXLENBQUMsSUFBSXZTLFNBQVMsQ0FBQzJCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ3VFLEdBQUcsQ0FDMUdzTSxVQUFVLElBQU1BLFVBQVUsRUFBOEJDLEdBQzFELENBQUM7UUFDRixDQUFDLE1BQU0sSUFBSSxDQUFDelMsU0FBUyxDQUFDc0MsSUFBSSxDQUFDQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDQyxpQkFBaUIsQ0FBQ3hDLFNBQVMsQ0FBQyxFQUFFO1VBQ25GO1VBQ0FnSixLQUFLLEdBQUd4SyxvQkFBb0IsQ0FBQ3dLLEtBQUs7UUFDbkMsQ0FBQyxNQUFNO1VBQ05BLEtBQUssR0FBRzlGLGdCQUFnQixFQUFFcVAsV0FBVyxDQUFDdlMsU0FBUyxDQUFDMkIsSUFBSSxDQUFDO1FBQ3REO1FBQ0EsT0FBTztVQUFFLENBQUMzQixTQUFTLENBQUMyQixJQUFJLEdBQUdxSDtRQUFNLENBQUM7TUFDbkMsQ0FBQyxDQUNGLENBQWtDO01BQ2xDLE1BQU0wSixVQUFVLEdBQUdQLE1BQU0sQ0FBQ0UsTUFBTSxDQUFDSCxtQkFBbUIsQ0FBQyxDQUFDakYsSUFBSSxDQUFFakUsS0FBSyxJQUFLLENBQUMsQ0FBQ0EsS0FBSyxDQUFDO01BRTlFLElBQUksQ0FBQ3RKLHVCQUF1QixDQUFDd1MsbUJBQW1CLENBQUM7TUFFakQsSUFBSSxDQUFDaFUsVUFBVSxDQUFDbUIsWUFBWSxDQUFDaVQsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDSyxXQUFXLENBQUNDLGdCQUFnQixDQUFDQyxnQkFBZ0IsRUFBRUgsVUFBVSxDQUFDO01BQ3RHO01BQ0E7TUFDQSxJQUFJLENBQUNyVSxjQUFjLENBQUN5VSx3QkFBd0IsQ0FBQyxDQUFDO0lBQy9DOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQWpULE1BQUEsQ0FJT2tULFVBQVUsR0FBakIsU0FBT0EsVUFBVUEsQ0FBQSxFQUFTO01BQ3pCLElBQUksQ0FBQ0MsWUFBWSxDQUFDLENBQUM7TUFDbkIsSUFBSSxDQUFDelUsVUFBVSxHQUFHLEtBQUs7TUFDdkIsSUFBSSxDQUFDMFUsa0NBQWtDLENBQUMsQ0FBQztNQUN6QyxJQUFJLENBQUMzVCx1QkFBdUIsR0FBRyxJQUFJQyxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7UUFDL0QsSUFBSSxDQUFDQyx1QkFBdUIsR0FBR0YsT0FBTztRQUN0QyxJQUFJLENBQUNHLHNCQUFzQixHQUFHRixNQUFNO01BQ3JDLENBQUMsQ0FBQztJQUNIOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUFJLE1BQUEsQ0FNQW9ULGtDQUFrQyxHQUFsQyxTQUFBQSxrQ0FBa0NBLENBQUEsRUFBUztNQUMxQyxJQUFJLElBQUksQ0FBQy9VLFVBQVUsQ0FBQ3FELFFBQVEsQ0FBQzJSLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDeEM7UUFDQTtNQUNEO01BRUEsSUFBSUMsY0FBMEMsRUFBRUMsV0FBdUM7TUFDdkYsTUFBTUMsWUFBWSxHQUFHLElBQUksQ0FBQ25WLFVBQVUsQ0FBQ3FELFFBQVEsQ0FBQ3NKLElBQUksQ0FBRXRILE9BQU8sSUFBSztRQUMvRCxNQUFNaUosUUFBUSxHQUFHakosT0FBTyxDQUFDK1AsV0FBVyxDQUFDLENBQUM7UUFDdEMsT0FBTzlHLFFBQVEsQ0FBQ1MsSUFBSSxDQUFFRixHQUFHLElBQUs7VUFDN0I7VUFDQW9HLGNBQWMsR0FBRyxDQUFDQSxjQUFjLElBQUlwRyxHQUFHLENBQUN3RyxPQUFPLENBQUMsQ0FBQyxLQUFLQyxXQUFXLENBQUNDLE9BQU8sR0FBR2xRLE9BQU8sR0FBR1UsU0FBUztVQUMvRm1QLFdBQVcsR0FBRyxDQUFDQSxXQUFXLElBQUlyRyxHQUFHLENBQUN3RyxPQUFPLENBQUMsQ0FBQyxLQUFLQyxXQUFXLENBQUNFLFdBQVcsR0FBR25RLE9BQU8sR0FBR1UsU0FBUztVQUM3RjtVQUNBLE9BQU84SSxHQUFHLENBQUN3RyxPQUFPLENBQUMsQ0FBQyxLQUFLQyxXQUFXLENBQUNHLEtBQUs7UUFDM0MsQ0FBQyxDQUFDO01BQ0gsQ0FBQyxDQUFDO01BQ0YsTUFBTUMsWUFBWSxHQUFHUCxZQUFZLElBQUlGLGNBQWMsSUFBSUMsV0FBVztNQUVsRSxJQUFJUSxZQUFZLEVBQUU7UUFDakIsSUFBSSxDQUFDcEosTUFBTSxFQUFFcUosaUJBQWlCLENBQUNELFlBQVksQ0FBQztNQUM3QztJQUNEOztJQUVBO0FBQ0Q7QUFDQSxPQUZDO0lBQUEvVCxNQUFBLENBR1FtVCxZQUFZLEdBQXBCLFNBQVFBLFlBQVlBLENBQUEsRUFBUztNQUM1QixJQUFJLElBQUksQ0FBQ3hJLE1BQU0sSUFBSXNILFVBQVUsQ0FBQ2dDLFFBQVEsQ0FBQyxJQUFJLENBQUN0SixNQUFNLENBQUMsRUFBRTtRQUNwRHNILFVBQVUsQ0FBQ0csTUFBTSxDQUFDLElBQUksQ0FBQ3pILE1BQU0sQ0FBQztNQUMvQjtJQUNEOztJQUVBO0FBQ0Q7QUFDQSxPQUZDO0lBQUEzSyxNQUFBLENBR1ErUCxRQUFRLEdBQWhCLFNBQVFBLFFBQVFBLENBQUEsRUFBUztNQUN4QixJQUFJLENBQUNqUSxzQkFBc0IsQ0FBQ29VLFNBQVMsQ0FBQ0MsU0FBUyxDQUFDQyxrQkFBa0IsQ0FBQztNQUNuRSxJQUFJLENBQUNDLFdBQVcsQ0FBQyxDQUFDO0lBQ25COztJQUVBO0FBQ0Q7QUFDQSxPQUZDO0lBQUFyVSxNQUFBLENBR09xVSxXQUFXLEdBQWxCLFNBQU9BLFdBQVdBLENBQUEsRUFBUztNQUMxQixJQUFJLElBQUksQ0FBQzFKLE1BQU0sRUFBRTtRQUNoQixJQUFJLENBQUN0TSxVQUFVLENBQUNpVyxNQUFNLEVBQUVDLHVCQUF1QixHQUFHLENBQUM7UUFDbkQ7UUFDQSxLQUFLLE1BQU1DLENBQUMsSUFBSSxJQUFJLENBQUM3VixvQkFBb0IsRUFBRTtVQUMxQyxJQUFJLENBQUN3TSwwQkFBMEIsQ0FBQyxJQUFJLENBQUN4TSxvQkFBb0IsQ0FBQzZWLENBQUMsQ0FBQyxDQUFDclUsU0FBUyxDQUFDO1FBQ3hFO1FBQ0EsSUFBSSxDQUFDd0ssTUFBTSxDQUFDOEosS0FBSyxDQUFDLENBQUM7TUFDcEI7TUFDQSxJQUFJLENBQUNoVyxZQUFZLEdBQUcsS0FBSztJQUMxQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUF1QixNQUFBLENBSU0wVSxVQUFVLEdBQWhCLGVBQU1BLFVBQVVBLENBQUEsRUFBa0I7TUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQy9KLE1BQU0sRUFBRTtRQUNqQixNQUFNLElBQUltSixLQUFLLENBQUMsNkJBQTZCLENBQUM7TUFDL0M7TUFDQSxNQUFNYSxXQUFXLENBQUNDLGVBQWUsQ0FDaEMsSUFBSSxDQUFDdlcsVUFBVSxDQUFDbUIsWUFBWSxFQUM1QixJQUFJLENBQUNiLG9CQUFvQixDQUFDMEgsR0FBRyxDQUFFNEUsbUJBQW1CLElBQUtBLG1CQUFtQixDQUFDOUssU0FBUyxDQUFDLEVBQ3JGLElBQUksQ0FBQ3ZCLGNBQWMsRUFDbkIsSUFDRCxDQUFDO01BQ0QsSUFBSSxDQUFDaVcsU0FBUyxDQUFDLElBQUksQ0FBQ2xLLE1BQU0sQ0FBQztNQUMzQixJQUFJLENBQUN0TSxVQUFVLENBQUNpQixJQUFJLEVBQUV3VixZQUFZLENBQUMsSUFBSSxDQUFDbkssTUFBTSxDQUFDO01BQy9DLE1BQU0sSUFBSSxDQUFDb0sseUJBQXlCLENBQUMsSUFBSSxDQUFDcEssTUFBTSxDQUFDO01BQ2pELElBQUksQ0FBQ0EsTUFBTSxDQUFDcUssSUFBSSxDQUFDLENBQUM7TUFDbEIsSUFBSSxDQUFDdlcsWUFBWSxHQUFHLElBQUk7SUFDekI7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBdUIsTUFBQSxDQUlRNlUsU0FBUyxHQUFqQixTQUFRQSxTQUFTQSxDQUFDbEssTUFBYyxFQUFRO01BQ3ZDQSxNQUFNLENBQUNzSyxRQUFRLENBQUMsSUFBSSxDQUFDclcsY0FBYyxFQUFFLGFBQWEsQ0FBQztNQUNuRCtMLE1BQU0sQ0FBQ3VLLFdBQVcsQ0FBQztRQUNsQnhRLElBQUksRUFBRSxHQUFHO1FBQ1R2RixLQUFLLEVBQUU7TUFDUixDQUFDLENBQUM7TUFDRndMLE1BQU0sQ0FBQ3NLLFFBQVEsQ0FBQyxJQUFJLENBQUM1VyxVQUFVLENBQUNjLEtBQUssQ0FBQztNQUN0Q3dMLE1BQU0sQ0FBQ3VLLFdBQVcsQ0FBQztRQUNsQnhRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQ3JHLFVBQVUsQ0FBQ3FELFFBQVEsQ0FBQzJSLE1BQU0sR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQ3RVLFVBQVU7TUFDdEUsQ0FBQyxDQUFDO01BRUYsSUFBSSxJQUFJLENBQUNWLFVBQVUsQ0FBQ3FELFFBQVEsQ0FBQzJSLE1BQU0sRUFBRTtRQUNwQzFJLE1BQU0sQ0FBQ3FKLGlCQUFpQixDQUFDLElBQUksQ0FBQzNWLFVBQVUsQ0FBQ3FELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDeEQ7TUFDQTtNQUNBaUosTUFBTSxDQUFDc0ssUUFBUSxDQUFDLElBQUlwVyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7SUFDOUM7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBbUIsTUFBQSxDQUlRdVEsVUFBVSxHQUFsQixTQUFRQSxVQUFVQSxDQUFDNEUsTUFBOEIsRUFBUTtNQUN4RCxJQUFJLENBQUMzVyxjQUFjLENBQUN5VSx3QkFBd0IsQ0FBQyxDQUFDO0lBQy9DOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQWpULE1BQUEsQ0FJYW9WLHVCQUF1QixHQUFwQyxlQUFhQSx1QkFBdUJBLENBQUEsRUFBMkM7TUFDOUUsT0FBTyxJQUFJLENBQUMzVix1QkFBdUI7SUFDcEM7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBTyxNQUFBLENBSU9xVixNQUFNLEdBQWIsU0FBT0EsTUFBTUEsQ0FBQSxFQUFZO01BQ3hCLE9BQU8sSUFBSSxDQUFDNVcsWUFBWTtJQUN6Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUF1QixNQUFBLENBT2NzVix3QkFBd0IsR0FBdEMsZUFBY0Esd0JBQXdCQSxDQUNyQ25WLFNBQTBCLEVBQzFCb1YsZ0JBQXdCLEVBQ3hCNUssTUFBYyxFQUNtQjtNQUNqQyxNQUFNNkssZ0JBQWdCLEdBQUc3SyxNQUFNLENBQUNvSCxnQkFBZ0IsQ0FBQyxDQUF3QjtNQUN6RSxNQUFNMEQsa0JBQWtCLEdBQUcsSUFBSSxDQUFDN1csY0FBYyxDQUFDa08sT0FBTyxDQUFDLENBQUM7TUFDeEQsTUFBTTRJLFNBQVMsR0FBR3ZWLFNBQVMsQ0FBQzJCLElBQUk7TUFDaEMsTUFBTTZULFlBQVksR0FBR3hWLFNBQVMsQ0FBQ0MsV0FBVyxDQUFDMkQsRUFBRSxFQUFFNlIscUJBQXFCO01BQ3BFO01BQ0EsSUFBSUQsWUFBWSxFQUFFO1FBQ2pCLElBQUksSUFBSSxDQUFDdFgsVUFBVSxDQUFDcUQsUUFBUSxDQUFDMlIsTUFBTSxHQUFHLENBQUMsSUFBSXdDLDBCQUEwQixDQUFDRixZQUFZLENBQUMsRUFBRTtVQUNwRixJQUFJO1lBQ0gsTUFBTUcsY0FBc0IsR0FDM0JQLGdCQUFnQixJQUFJSSxZQUFZLENBQUNqUixJQUFJLENBQUNoQyxVQUFVLENBQUMsR0FBRzZTLGdCQUFnQixHQUFHLENBQUMsR0FDckVJLFlBQVksQ0FBQ2pSLElBQUksQ0FBQ3FSLE9BQU8sQ0FBQyxHQUFHUixnQkFBZ0IsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUNyREksWUFBWSxDQUFDalIsSUFBSTtZQUNyQixJQUFJaU8sVUFBVSxHQUFHLE1BQU1nQyxXQUFXLENBQUNxQix3QkFBd0IsQ0FBQ0wsWUFBWSxDQUFDalIsSUFBSSxFQUFFOFEsZ0JBQWdCLENBQUMvQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzNHLElBQUlFLFVBQVUsS0FBSyxJQUFJLEVBQUU7Y0FDeEJBLFVBQVUsR0FBRyxNQUFNNkMsZ0JBQWdCLENBQUN4RCxtQkFBbUIsQ0FBQyxDQUFDLENBQUNpRSxlQUFlLENBQUNOLFlBQVksQ0FBQ2pSLElBQUksQ0FBQztZQUM3RjtZQUNBLElBQUksSUFBSSxDQUFDckcsVUFBVSxDQUFDcUQsUUFBUSxDQUFDMlIsTUFBTSxHQUFHLENBQUMsRUFBRTtjQUN4Qzs7Y0FFQSxJQUFJLElBQUksQ0FBQ2hWLFVBQVUsQ0FBQ3FELFFBQVEsQ0FBQzBMLElBQUksQ0FBRTFKLE9BQU8sSUFBS0EsT0FBTyxDQUFDZ1AsV0FBVyxDQUFDb0QsY0FBYyxDQUFDLEtBQUtuRCxVQUFVLENBQUMsRUFBRTtnQkFDbkc7Z0JBQ0EsT0FBTztrQkFDTitDLFNBQVM7a0JBQ1R2TSxLQUFLLEVBQUUvRSxTQUFTO2tCQUNoQjhSLGVBQWUsRUFBRTtnQkFDbEIsQ0FBQztjQUNGO1lBQ0Q7WUFDQSxPQUFPO2NBQUVSLFNBQVM7Y0FBRXZNLEtBQUssRUFBRXdKO1lBQVcsQ0FBQztVQUN4QyxDQUFDLENBQUMsT0FBT3JILEtBQUssRUFBRTtZQUNmMUgsR0FBRyxDQUFDMEgsS0FBSyxDQUFDLDhDQUE4QyxFQUFFb0ssU0FBUyxFQUFFLElBQUksQ0FBQ3RYLE1BQU0sQ0FBQzBELElBQUksQ0FBQztZQUN0RixPQUFPO2NBQ040VCxTQUFTO2NBQ1R2TSxLQUFLLEVBQUUvRSxTQUFTO2NBQ2hCK1IsaUJBQWlCLEVBQUU7WUFDcEIsQ0FBQztVQUNGO1FBQ0QsQ0FBQyxNQUFNO1VBQ047VUFDQSxPQUFPO1lBQUVULFNBQVM7WUFBRXZNLEtBQUssRUFBRXdNLFlBQVksQ0FBQ2hWLE9BQU8sQ0FBQztVQUFFLENBQUM7UUFDcEQ7TUFDRDtNQUNBLE9BQU87UUFBRStVLFNBQVM7UUFBRXZNLEtBQUssRUFBRXNNLGtCQUFrQixDQUFDQyxTQUFTO01BQUUsQ0FBQztJQUMzRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUExVixNQUFBLENBSWNvVyx5QkFBeUIsR0FBdkMsZUFBY0EseUJBQXlCQSxDQUFBLEVBQXFDO01BQzNFLE1BQU1DLGNBQWMsR0FBRyxJQUFJLENBQUMxTCxNQUFNLEVBQUUyTCxpQkFBaUIsQ0FBQyxDQUFDO01BQ3ZELElBQUksQ0FBQyxJQUFJLENBQUNqWSxVQUFVLENBQUNpQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUNqQixVQUFVLENBQUNrWSw4QkFBOEIsSUFBSSxDQUFDRixjQUFjLEVBQUU7UUFDaEcsT0FBTyxDQUFDLENBQUM7TUFDVjtNQUVBLE9BQU9HLFNBQVMsQ0FBQ0MsdUJBQXVCLENBQ3ZDLElBQUksQ0FBQ3BZLFVBQVUsQ0FBQ2tZLDhCQUE4QixDQUM1QzlNLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDcEwsVUFBVSxDQUFDa1ksOEJBQThCLENBQUM3TSxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDbkZxTSxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUN0QixJQUFJLENBQUMxWCxVQUFVLENBQUNrWSw4QkFBOEIsQ0FBQzlNLFNBQVMsQ0FDdkQsSUFBSSxDQUFDcEwsVUFBVSxDQUFDa1ksOEJBQThCLENBQUM3TSxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUNuRSxJQUFJLENBQUNyTCxVQUFVLENBQUNrWSw4QkFBOEIsQ0FBQ2xELE1BQ2hELENBQUMsRUFDRCxJQUFJLENBQUNoVixVQUFVLENBQUNpQixJQUFJLEVBQ3BCK1csY0FBYyxFQUNkLElBQUksQ0FBQ2hZLFVBQVUsQ0FBQ3FELFFBQ2pCLENBQUM7SUFDRjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBMUIsTUFBQSxDQU1jMFcsbUJBQW1CLEdBQWpDLGVBQWNBLG1CQUFtQkEsQ0FDaENuQixnQkFBd0IsRUFDeEI1SyxNQUFjLEVBTVo7TUFDRixNQUFNZ00saUJBQWlCLEdBQUcsSUFBSSxDQUFDdlksTUFBTSxDQUFDZ0MsV0FBVyxDQUFDRSxNQUFNLEVBQUVzVyxxQkFBcUIsRUFBRWpXLE9BQU8sQ0FBQyxDQUFDO01BQzFGLElBQUlrVyxvQkFBc0QsR0FBR25YLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2hGLElBQUltWCxjQUF5QyxHQUFHLEVBQUU7TUFDbEQsSUFBSSxJQUFJLENBQUMxWSxNQUFNLENBQUNvRCxPQUFPLEVBQUU7UUFDeEIsSUFBSSxPQUFPbVYsaUJBQWlCLEtBQUssUUFBUSxFQUFFO1VBQzFDLE1BQU14WCxLQUFLLEdBQUcsSUFBSSxDQUFDZCxVQUFVLENBQUNxRCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMrUSxRQUFRLENBQUMsQ0FBQztVQUNwRCxNQUFNc0UsYUFBYSxHQUFHQyxTQUFTLENBQUNDLG9CQUFvQixDQUFDTixpQkFBaUIsRUFBRXhYLEtBQUssRUFBRSxJQUFJLENBQUNkLFVBQVUsQ0FBQ3FELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUMzRyxJQUFJcVYsYUFBYSxFQUFFO1lBQ2xCRCxjQUFjLEdBQUcsSUFBSSxDQUFDelksVUFBVSxDQUFDcUQsUUFBUSxDQUFDMkUsR0FBRyxDQUFDLE1BQU8zQyxPQUFPLElBQUs7Y0FDaEUsTUFBTTZJLE1BQU0sR0FBRyxNQUFNLElBQUkySyxjQUFjLENBQ3RDSCxhQUFhLEVBQ2I7Z0JBQ0N2WCxZQUFZLEVBQUUsSUFBSSxDQUFDbkIsVUFBVSxDQUFDbUIsWUFBWTtnQkFDMUNMLEtBQUssRUFBRUEsS0FBSztnQkFDWnVDLFFBQVEsRUFBRSxDQUFDZ0MsT0FBTztjQUNuQixDQUFDLEVBQ0Q7Z0JBQ0N5VCxjQUFjLEVBQUUsS0FBSztnQkFDckJDLE9BQU8sRUFBRTtjQUNWLENBQ0QsQ0FBQyxDQUFDQyxPQUFPLENBQUMsQ0FBQztjQUNYLE9BQU85SyxNQUFNLENBQUNVLE1BQU0sQ0FBQ3FLLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFbk8sS0FBSyxDQUFDb08sWUFBWTtZQUN6RCxDQUFDLENBQUM7VUFDSDtRQUNEO1FBQ0EsSUFBSSxJQUFJLENBQUNsWixVQUFVLENBQUNxRCxRQUFRLENBQUMyUixNQUFNLEdBQUcsQ0FBQyxFQUFFO1VBQ3hDd0Qsb0JBQW9CLEdBQUcsSUFBSSxDQUFDeFksVUFBVSxDQUFDcUQsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDOFYsYUFBYSxDQUFDLENBQUM7UUFDbkU7TUFDRDtNQUVBLElBQUk7UUFDSCxNQUFNQyxhQUFhLEdBQUcsTUFBTVosb0JBQW9CO1FBRWhELE1BQU1hLFFBQVEsR0FBRyxNQUFNaFksT0FBTyxDQUFDc1AsR0FBRyxDQUFDLENBQ2xDdFAsT0FBTyxDQUFDc1AsR0FBRyxDQUNWLElBQUksQ0FBQ3JRLG9CQUFvQixDQUFDMEgsR0FBRyxDQUFDLE1BQU80RSxtQkFBbUIsSUFDdkQsSUFBSSxDQUFDcUssd0JBQXdCLENBQUNySyxtQkFBbUIsQ0FBQzlLLFNBQVMsRUFBRW9WLGdCQUFnQixFQUFFNUssTUFBTSxDQUN0RixDQUNELENBQUMsRUFDRGpMLE9BQU8sQ0FBQ3NQLEdBQUcsQ0FBQzhILGNBQWMsQ0FBQyxFQUMzQixJQUFJLENBQUNWLHlCQUF5QixDQUFDLENBQUMsQ0FDaEMsQ0FBQztRQUNGLE9BQU87VUFDTnFCLGFBQWE7VUFDYkUsYUFBYSxFQUFFRCxRQUFRLENBQUMsQ0FBQyxDQUFDO1VBQzFCRSxjQUFjLEVBQUVGLFFBQVEsQ0FBQyxDQUFDLENBQUM7VUFDM0JHLHNCQUFzQixFQUFFSCxRQUFRLENBQUMsQ0FBQztRQUNuQyxDQUFDO01BQ0YsQ0FBQyxDQUFDLE9BQU9wTSxLQUFjLEVBQUU7UUFDeEIxSCxHQUFHLENBQUMwSCxLQUFLLENBQUMsc0NBQXNDLEVBQUVBLEtBQWUsQ0FBQztRQUNsRTtRQUNBLElBQUksQ0FBQzlNLGNBQWMsQ0FBQ3lVLHdCQUF3QixDQUFDLENBQUM7UUFDOUMsT0FBTztVQUNOd0UsYUFBYSxFQUFFLENBQUMsQ0FBQztVQUNqQkUsYUFBYSxFQUFFLEVBQUU7VUFDakJDLGNBQWMsRUFBRSxFQUFFO1VBQ2xCQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzFCLENBQUM7TUFDRjtJQUNEOztJQUVBO0FBQ0Q7QUFDQSxPQUZDO0lBQUE3WCxNQUFBLENBR1F3USxTQUFTLEdBQWpCLFNBQVFBLFNBQVNBLENBQUEsRUFBUztNQUN6QixNQUFNc0gscUJBQXFCLEdBQUcsSUFBSSxDQUFDblosb0JBQW9CLENBQUNxTSxJQUFJLENBQUVELGFBQWEsSUFBS0EsYUFBYSxDQUFDOUksS0FBSyxDQUFDOFYsVUFBVSxDQUFDLENBQUMsQ0FBQztNQUNqSCxJQUFJRCxxQkFBcUIsRUFBRTtRQUMxQixNQUFNRSxVQUFVLEdBQUdGLHFCQUFxQixFQUFFN1YsS0FBSztRQUMvQyxNQUFNZ1csU0FBUyxHQUFHRCxVQUFVLEVBQUVFLFlBQVksQ0FBQyxDQUEyQjtRQUN0RUQsU0FBUyxDQUFDRSxVQUFVLEdBQUc7VUFBRUMsTUFBTSxFQUFFO1FBQUssQ0FBQztRQUN2Q0osVUFBVSxFQUFFSyxLQUFLLENBQUNKLFNBQVMsQ0FBQztNQUM3QjtNQUNBLElBQUksQ0FBQzVaLFVBQVUsQ0FBQ2lXLE1BQU0sRUFBRWdFLHVCQUF1QixHQUFHLENBQUM7SUFDcEQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBdFksTUFBQSxDQUlReVAsMkJBQTJCLEdBQW5DLFNBQVFBLDJCQUEyQkEsQ0FBQzlCLGNBQW9DLEVBQVE7TUFDL0U7TUFDQUEsY0FBYyxDQUFDTSxPQUFPLENBQUVvQixhQUFhLElBQUs7UUFDekMsTUFBTWxQLFNBQVMsR0FBR2tQLGFBQWEsRUFBRWxQLFNBQVM7UUFDMUMsTUFBTThCLEtBQUssR0FBR29OLGFBQWEsRUFBRTdCLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDN08sb0JBQW9CLENBQUNpUSxJQUFJLENBQUM7VUFDOUJ6TyxTQUFTO1VBQ1Q4QixLQUFLO1VBQ0xzVyxZQUFZLEVBQUVwWSxTQUFTLENBQUNvQyxZQUFZO1VBQ3BDOEksUUFBUSxFQUFFO1FBQ1gsQ0FBQyxDQUFDO01BQ0gsQ0FBQyxDQUFDO0lBQ0g7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFyTCxNQUFBLENBS2MrVSx5QkFBeUIsR0FBdkMsZUFBY0EseUJBQXlCQSxDQUFDcEssTUFBYyxFQUFpQjtNQUN0RSxNQUFNNEssZ0JBQWdCLEdBQUcsSUFBSSxDQUFDblgsTUFBTSxDQUFDb0QsT0FBTyxHQUFHLElBQUksQ0FBQ3BELE1BQU0sQ0FBQ0MsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDeUQsSUFBSSxHQUFHLEVBQUU7TUFDbEYsTUFBTTtRQUFFMlYsYUFBYTtRQUFFRSxhQUFhO1FBQUVDLGNBQWM7UUFBRUM7TUFBdUIsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDbkIsbUJBQW1CLENBQzlHbkIsZ0JBQWdCLEVBQ2hCNUssTUFDRCxDQUFDO01BQ0QsTUFBTTZLLGdCQUFnQixHQUFHN0ssTUFBTSxDQUFDb0gsZ0JBQWdCLENBQUMsQ0FBd0I7TUFFekUsSUFBSXdELGdCQUFnQixFQUFFO1FBQ3JCQyxnQkFBZ0IsQ0FBQ2dELFlBQVksQ0FBQ2pELGdCQUFnQixFQUFFa0MsYUFBYSxDQUFDO01BQy9EO01BRUEsS0FBSyxNQUFNakQsQ0FBQyxJQUFJLElBQUksQ0FBQzdWLG9CQUFvQixFQUFFO1FBQzFDLElBQUksSUFBSSxDQUFDQSxvQkFBb0IsQ0FBQzZWLENBQUMsQ0FBQyxDQUFDclUsU0FBUyxDQUFDMkIsSUFBSSxLQUFLLHNCQUFzQixFQUFFO1VBQzNFLE1BQU0yVyxhQUFhLEdBQUcsSUFBSSxDQUFDOVosb0JBQW9CLENBQUM2VixDQUFDLENBQUMsQ0FBQ3JVLFNBQVMsQ0FBQzJCLElBQUk7VUFDakU7VUFDQSxNQUFNNFcsc0JBQXNCLEdBQUcsSUFBSSxDQUFDcGEsZUFBZSxFQUFFME0sSUFBSSxDQUFFdUUsT0FBTyxJQUFLQSxPQUFPLENBQUN6TixJQUFJLEtBQUsyVyxhQUFhLENBQUMsRUFBRXRQLEtBQUs7VUFDN0csSUFBSXVQLHNCQUFzQixFQUFFO1lBQzNCbEQsZ0JBQWdCLENBQUNnRCxZQUFZLENBQUNDLGFBQWEsRUFBRUMsc0JBQXNCLENBQUM7VUFDckUsQ0FBQyxNQUFNLElBQUliLHNCQUFzQixDQUFDYyxjQUFjLENBQUNGLGFBQWEsQ0FBQyxFQUFFO1lBQ2hFakQsZ0JBQWdCLENBQUNnRCxZQUFZLENBQUNDLGFBQWEsRUFBRVosc0JBQXNCLENBQUNZLGFBQWEsQ0FBQyxDQUFDO1VBQ3BGLENBQUMsTUFBTSxJQUFJZCxhQUFhLENBQUNuRCxDQUFDLENBQUMsSUFBSW1ELGFBQWEsQ0FBQ25ELENBQUMsQ0FBQyxDQUFDckwsS0FBSyxLQUFLL0UsU0FBUyxFQUFFO1lBQ3BFb1IsZ0JBQWdCLENBQUNnRCxZQUFZLENBQUNDLGFBQWEsRUFBRWQsYUFBYSxDQUFDbkQsQ0FBQyxDQUFDLENBQUNyTCxLQUFLLENBQUM7VUFDckUsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDL0ssTUFBTSxDQUFDZ0MsV0FBVyxDQUFDRSxNQUFNLEVBQUVzVyxxQkFBcUIsSUFBSSxDQUFDZSxhQUFhLENBQUNuRCxDQUFDLENBQUMsQ0FBQzBCLGVBQWUsRUFBRTtZQUN0RyxNQUFNMEMsbUJBQW1CLEdBQUcsSUFBSUMsR0FBRyxDQUNsQyxJQUFJLENBQUN4YSxVQUFVLENBQUNxRCxRQUFRLENBQUMyRSxHQUFHLENBQUMsQ0FBQzNDLE9BQU8sRUFBRW9WLEtBQUssS0FBS2xCLGNBQWMsQ0FBQ2tCLEtBQUssQ0FBQyxDQUFDclYsU0FBUyxDQUFDZ1YsYUFBYSxDQUFDLENBQ2hHLENBQUM7WUFDRCxJQUFJRyxtQkFBbUIsQ0FBQ0csSUFBSSxLQUFLLENBQUMsSUFBSUgsbUJBQW1CLENBQUNwRyxNQUFNLENBQUMsQ0FBQyxDQUFDd0csSUFBSSxDQUFDLENBQUMsQ0FBQzdQLEtBQUssS0FBSy9FLFNBQVMsRUFBRTtjQUM5RjtjQUNBb1IsZ0JBQWdCLENBQUNnRCxZQUFZLENBQUNDLGFBQWEsRUFBRXRTLEtBQUssQ0FBQ0MsSUFBSSxDQUFDd1MsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRjtVQUNEO1FBQ0Q7TUFDRDs7TUFFQTtNQUNBLElBQUlqQixhQUFhLENBQUN2SyxJQUFJLENBQUVqRSxLQUFLLElBQUtBLEtBQUssQ0FBQ2dOLGlCQUFpQixDQUFDLEVBQUU7UUFDM0QsTUFBTThDLE9BQU8sR0FBRyxJQUFJLENBQUM1WixhQUFhLENBQUMrQyxPQUFPLENBQUMsd0JBQXdCLENBQUM7UUFDcEU4VyxVQUFVLENBQUNyVixPQUFPLENBQUN0RSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUNsQixVQUFVLENBQUNtQixZQUFZLENBQUMsQ0FBQzRDLE9BQU8sQ0FBQywwQ0FBMEMsQ0FBQyxFQUFFO1VBQ3RIK1csT0FBTyxFQUFFLENBQUNGLE9BQU8sRUFBRUMsVUFBVSxDQUFDRSxNQUFNLENBQUNDLEVBQUUsQ0FBQztVQUN4Q0MsZ0JBQWdCLEVBQUVMLE9BQU87VUFDekJNLE9BQU8sRUFBR25iLE1BQWMsSUFBSztZQUM1QixJQUFJQSxNQUFNLEtBQUs2YSxPQUFPLEVBQUU7Y0FDdkIsTUFBTU8sWUFBWSxHQUFHLElBQUksQ0FBQ25iLFVBQVUsQ0FBQ2lCLElBQUksRUFBRW1hLGFBQWEsQ0FBQyxDQUFDLENBQUNDLGVBQWUsQ0FBQyxDQUFDO2NBQzNFRixZQUFZLENBQXFEUCxPQUFPLENBQUMsQ0FBQztZQUM1RTtVQUNELENBQUM7VUFDRFUsWUFBWSxFQUFFO1FBQ2YsQ0FBVyxDQUFDO01BQ2I7O01BRUE7TUFDQSxLQUFLLE1BQU1DLGVBQWUsSUFBSWhDLGNBQWMsRUFBRTtRQUM3QyxNQUFNdEcsT0FBTyxHQUFHc0ksZUFBZSxDQUFDQyxVQUFVLENBQUMsQ0FBQztRQUM1QyxJQUFJdkksT0FBTyxFQUFFd0ksR0FBRyxDQUFDLDJDQUEyQyxDQUFDLEVBQUU7VUFDOUR4SSxPQUFPLENBQUN5SSxPQUFPLENBQUMsQ0FBQztRQUNsQjtNQUNEO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBLE9BRkM7SUFBQS9aLE1BQUEsQ0FHUXNRLFVBQVUsR0FBbEIsU0FBUUEsVUFBVUEsQ0FBQSxFQUFTO01BQzFCLElBQUksQ0FBQzNGLE1BQU0sRUFBRW9QLE9BQU8sQ0FBQyxDQUFDO01BQ3RCLElBQUksQ0FBQ3JiLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMxQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQXNCLE1BQUEsQ0FLYytJLGtCQUFrQixHQUFoQyxlQUFjQSxrQkFBa0JBLENBQUNpUixVQUF1QyxFQUErQjtNQUN0RyxJQUFJQyxXQUFXO01BRWYsTUFBTUMsV0FBVyxHQUFHRixVQUFVLENBQUN0VyxPQUFPLENBQUMvQixPQUFPLENBQUMsQ0FBQztNQUNoRCxNQUFNd1ksaUJBQWlCLEdBQUdILFVBQVUsQ0FBQ3RXLE9BQU8sQ0FBQ0QsU0FBUyxDQUFDLENBQUMsRUFBRTJXLEtBQUs7TUFDL0QsTUFBTUMsb0JBQW9CLEdBQUcsTUFBTSxJQUFJLENBQUNuYixTQUFTLENBQUNvYixvQkFBb0IsQ0FBQ0osV0FBVyxFQUFFLElBQUksQ0FBQzs7TUFFekY7TUFDQTtNQUNBLE1BQU1LLGtCQUFrQixHQUFHRixvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQ0csVUFBVSxDQUFDeFAsSUFBSSxDQUNqRTdLLFNBQXVDLElBQ3ZDQSxTQUFTLENBQUNpTyxLQUFLLEtBQUssd0RBQXdELElBQzNFak8sU0FBUyxDQUFDaU8sS0FBSyxLQUFLLHNEQUFzRCxJQUMxRWpPLFNBQVMsQ0FBQ3NhLGlCQUFpQixFQUFFQyxhQUFhLEtBQUtQLGlCQUNsRCxDQUFDO01BRUQsSUFBSUksa0JBQWtCLElBQUlBLGtCQUFrQixDQUFDSSxpQkFBaUIsRUFBRTtRQUMvRCxNQUFNQyxZQUFZLEdBQUdMLGtCQUFrQixDQUFDSSxpQkFBaUI7UUFDekQ7UUFDQSxNQUFNclIsWUFBWSxHQUFHLElBQUkrUSxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQ1EsY0FBYyxJQUFJRCxZQUFZLEVBQUU7UUFDbEYsTUFBTUUsZUFBZSxHQUFHLElBQUksQ0FBQzViLFNBQVMsQ0FBQ3VFLFNBQVMsQ0FBQyxHQUFHNkYsWUFBWSxHQUFHLENBQUM7UUFFcEUsSUFBSXdSLGVBQWUsQ0FBQyxpRkFBaUYsQ0FBQyxFQUFFO1VBQ3ZHLE1BQU1DLFFBQVEsR0FBR0QsZUFBZSxDQUFDLHNDQUFzQyxDQUFDO1VBQ3hFLE1BQU1FLFFBQVEsR0FBRyxJQUFJWCxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQ1EsY0FBYyxJQUFJRSxRQUFRLENBQUNFLEtBQUssRUFBRTtVQUNoRmhCLFdBQVcsR0FBRyxJQUFJLENBQUMvYSxTQUFTLENBQUM4QyxvQkFBb0IsQ0FBQ2daLFFBQVEsQ0FBQztRQUM1RDtRQUVBLElBQUlmLFdBQVcsRUFBRTtVQUNoQixPQUFPaUIsZ0JBQWdCLENBQUNDLE1BQU0sQ0FBQ2xCLFdBQVcsQ0FBQ3hXLFNBQVMsQ0FBQyxDQUFDLEVBQUU7WUFBRUMsT0FBTyxFQUFFdVc7VUFBWSxDQUFDLENBQUM7UUFDbEY7TUFDRDtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FQQztJQUFBamEsTUFBQSxDQVFjOEksdUJBQXVCLEdBQXJDLGVBQWNBLHVCQUF1QkEsQ0FDcEMzSSxTQUEwQixFQUMxQmtELGdCQUF5QixFQUN6QjJXLFVBQXVDLEVBQ2M7TUFDckQsTUFBTW9CLE1BQU0sR0FBR3BCLFVBQVUsQ0FBQ3RXLE9BQU8sQ0FBQytPLFFBQVEsQ0FBQyxDQUFtQjtNQUM5RCxNQUFNNEksWUFBWSxHQUFHckIsVUFBVSxDQUFDdFcsT0FBTyxDQUFDL0IsT0FBTyxDQUFDLENBQUM7TUFDakQsTUFBTTJaLDJCQUEyQixHQUFHRixNQUFNLENBQUMzWCxTQUFTLENBQUMsR0FBRzRYLFlBQVksR0FBRyxDQUFDO01BQ3hFLElBQUlFLGtCQUFpRDtNQUVyRCxJQUNDRCwyQkFBMkIsQ0FBQyxvQ0FBb0MsQ0FBQyxJQUNqRUEsMkJBQTJCLENBQUMsNkJBQTZCLENBQUMsRUFDekQ7UUFDRCxNQUFNL1osY0FBYyxHQUFHLElBQUksQ0FBQ25ELE1BQU0sQ0FBQ29ELE9BQU8sR0FDdkMsR0FBRyxJQUFJLENBQUN0QyxTQUFTLENBQUN1QyxXQUFXLENBQUMsSUFBSSxDQUFDcEQsVUFBVSxDQUFDcUQsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUlDLFlBQVksQ0FBQyxJQUFJLENBQUMxQyxTQUFTLENBQUMsQ0FBQzJDLFNBQVMsSUFDOUcsSUFBSSxDQUFDekQsTUFBTSxDQUFDMEQsSUFBSSxFQUNkLEdBQ0YsSUFBSSxJQUFJLENBQUMxRCxNQUFNLENBQUMwRCxJQUFJLEVBQUU7UUFDekIsTUFBTUMsV0FBVyxHQUFHLElBQUksQ0FBQzdDLFNBQVMsQ0FBQzhDLG9CQUFvQixDQUFDLEdBQUdULGNBQWMsSUFBSXBCLFNBQVMsQ0FBQzJCLElBQUksRUFBRSxDQUFFO1FBQy9GeVosa0JBQWtCLEdBQUcvUiwyQkFBMkIsQ0FBQ3pILFdBQVcsQ0FBQztRQUM3RCxPQUFPeVosZUFBZSxDQUFDRCxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUMvQyxDQUFDLE1BQU07UUFDTixPQUFPTCxnQkFBZ0IsQ0FBQ0MsTUFBTSxDQUFDOVgsZ0JBQWdCLENBQUNJLFNBQVMsQ0FBQyxDQUFDLEVBQUU7VUFBRUMsT0FBTyxFQUFFTDtRQUFpQixDQUFDLENBQUM7TUFDNUY7SUFDRCxDQUFDO0lBQUEsT0FBQWxGLHFCQUFBO0VBQUE7RUFBQTRCLFFBQUEsR0FBQTVCLHFCQUFBO0VBQUEsT0FBQTRCLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|