@nova-ui/dashboards
Version:
Nova Dashboards is a framework designed to provide feature developers with a common solution for presenting data coming from various sources within a single view, as well as a set of predefined widget visualizations that are 100% configuration-driven and
443 lines • 61.5 kB
JavaScript
// © 2022 SolarWinds Worldwide, LLC. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
/* eslint-disable max-len */
import { DragDropModule } from "@angular/cdk/drag-drop";
import { PortalModule } from "@angular/cdk/portal";
import { ScrollingModule } from "@angular/cdk/scrolling";
import { NgModule } from "@angular/core";
import { ReactiveFormsModule } from "@angular/forms";
import { GridsterModule } from "angular-gridster2";
import { NuiBusyModule, NuiButtonModule, NuiCheckboxModule, NuiDialogModule, NuiDividerModule, NuiExpanderModule, NuiFormFieldModule, NuiIconModule, NuiImageModule, NuiMenuModule, NuiMessageModule, NuiOverlayAdditionsModule, NuiPanelModule, NuiPopupModule, NuiRadioModule, NuiRepeatModule, NuiSearchModule, NuiSelectV2Module, NuiSorterModule, NuiSpinnerModule, NuiSwitchModule, NuiTextboxModule, NuiValidationMessageModule, NuiWizardModule, } from "@nova-ui/bits";
import { NuiDashboardsCommonModule } from "../common/common.module";
import { TimeseriesChartPresetService } from "../components/timeseries-widget/timeseries-chart-preset.service";
import { TimeseriesScalesService } from "../components/timeseries-widget/timeseries-scales.service";
import { NuiPizzagnaModule } from "../pizzagna/pizzagna.module";
import { ComponentRegistryService, } from "../pizzagna/services/component-registry.service";
import { ColorPickerComponent } from "./components/color-picker/color-picker.component";
import { ConfiguratorComponent } from "./components/configurator/configurator.component";
import { DropAreaComponent } from "./components/drop-area/drop-area.component";
import { FormStackComponent } from "./components/form-stack/form-stack.component";
import { DonutContentPercentageConfigurationComponent } from "./components/formatters/donut-content-percentage-formatter/donut-content-percentage-configuration.component";
import { DonutContentPercentageFormatterComponent } from "./components/formatters/donut-content-percentage-formatter/donut-content-percentage-formatter.component";
import { DonutContentRawFormatterComponent } from "./components/formatters/donut-content-raw-formatter/donut-content-raw-formatter.component";
import { DonutContentSumFormatterComponent } from "./components/formatters/donut-content-sum-formatter/donut-content-sum-formatter.component";
import { IconFormatterComponent } from "./components/formatters/icon-formatter/icon-formatter.component";
import { LinkFormatterComponent } from "./components/formatters/link-formatter/link-formatter.component";
import { PercentageFormatterComponent } from "./components/formatters/percentage-formatter/percentage-formatter.component";
import { RawFormatterComponent } from "./components/formatters/raw-formatter/raw-formatter.component";
import { SiUnitsFormatterComponent } from "./components/formatters/si-units-formatter/si-units-formatter.component";
import { StatusWithIconFormatterComponent } from "./components/formatters/status-with-icon-formatter/status-with-icon-formatter.component";
import { ConfiguratorHeadingComponent } from "./components/heading/configurator-heading.component";
import { ItemsDynamicComponent } from "./components/items-dynamic/items-dynamic.component";
import { PreviewPlaceholderComponent } from "./components/preview-placeholder/preview-placeholder.component";
import { WidgetClonerComponent } from "./components/widget-cloner/widget-cloner.component";
import { WidgetConfiguratorSectionCoordinatorService } from "./components/widget-configurator-section/widget-configurator-section-coordinator.service";
import { WidgetConfiguratorSectionComponent } from "./components/widget-configurator-section/widget-configurator-section.component";
import { WidgetEditorComponent } from "./components/widget-editor/widget-editor.component";
import { WidgetEditorAccordionHeaderComponent } from "./components/widget-editor-accordion/widget-editor-accordion-header/widget-editor-accordion-header.component";
import { WidgetEditorAccordionComponent } from "./components/widget-editor-accordion/widget-editor-accordion.component";
import { BackgroundColorRulesConfigurationComponent } from "./components/widgets/configurator-items/background-color-rules-configuration/background-color-rules-configuration.component";
import { DataSourceConfigurationComponent } from "./components/widgets/configurator-items/data-source-configuration/data-source-configuration.component";
import { DataSourceConfigurationV2Component } from "./components/widgets/configurator-items/data-source-configuration-v2/data-source-configuration-v2.component";
import { DataSourceErrorComponent } from "./components/widgets/configurator-items/data-source-error/data-source-error.component";
import { TableDataSourceErrorComponent } from "./components/widgets/configurator-items/data-source-error/table/table-data-source-error.component";
import { EmbeddedContentConfigurationComponent } from "./components/widgets/configurator-items/embedded-content-configuration/embedded-content-configuration.component";
import { InfoMessageConfigurationComponent } from "./components/widgets/configurator-items/info-message-configuration/info-message-configuration.component";
import { KpiDescriptionConfigurationComponent } from "./components/widgets/configurator-items/kpi-description-configuration/kpi-description-configuration.component";
import { RefreshRateConfiguratorComponent } from "./components/widgets/configurator-items/refresher-configuration/refresh-rate-configurator/refresh-rate-configurator.component";
import { RefresherConfigurationComponent } from "./components/widgets/configurator-items/refresher-configuration/refresher-configuration.component";
import { RiskScoreTileDescriptionConfigurationComponent } from "./components/widgets/configurator-items/risk-score-tile-description-configuration/risk-score-tile-description-configuration.component";
import { ThresholdsConfigurationComponent } from "./components/widgets/configurator-items/thresholds-configuration/thresholds-configuration.component";
import { TimeseriesMetadataConfigurationComponent } from "./components/widgets/configurator-items/timeseries-metadata-configuration/timeseries-metadata-configuration.component";
import { TitleAndDescriptionConfigurationComponent } from "./components/widgets/configurator-items/title-and-description-configuration/title-and-description-configuration.component";
import { EntityFormattingConfigurationComponent } from "./components/widgets/drilldown/entity-formatting-configuration/entity-formatting-configuration.component";
import { GroupingConfigurationComponent } from "./components/widgets/drilldown/grouping-configuration/grouping-configuration.component";
import { KpiTilesConfigurationComponent } from "./components/widgets/kpi/kpi-tiles-configuration/kpi-tiles-configuration.component";
import { AggregatorMetricSelectorConfigurationComponent } from "./components/widgets/proportional/aggregators-configurators/aggregator-configurator/aggregator-configurator.component";
import { FieldMapperAggregatorConfiguratorComponent } from "./components/widgets/proportional/aggregators-configurators/field-mapper-aggregator-configurator/field-mapper-aggregator-configurator.component";
import { ProportionalChartOptionsEditorComponent } from "./components/widgets/proportional/chart-options-editor/proportional-chart-options-editor.component";
import { ProportionalChartOptionsEditorV2Component } from "./components/widgets/proportional/chart-options-editor-v2/proportional-chart-options-editor-v2.component";
import { DonutContentConfigurationComponent } from "./components/widgets/proportional/donut-content-configuration/donut-content-configuration.component";
import { RiskScoreTilesConfigurationComponent } from "./components/widgets/risk-score/risk-score-tiles-configuration/risk-score-tiles-configuration.component";
import { DescriptionConfigurationComponent } from "./components/widgets/table/columns-editor/column-configuration/description-configuration/description-configuration.component";
import { LinkConfiguratorComponent } from "./components/widgets/table/columns-editor/column-configuration/presentation-configuration/portals/link-configurator/link-configurator.component";
import { ValueSelectorComponent } from "./components/widgets/table/columns-editor/column-configuration/presentation-configuration/portals/value-selector/value-selector.component";
import { PresentationConfigurationComponent } from "./components/widgets/table/columns-editor/column-configuration/presentation-configuration/presentation-configuration.component";
import { TableColumnsConfigurationComponent } from "./components/widgets/table/columns-editor/table-columns-configuration.component";
import { DescriptionConfigurationV2Component } from "./components/widgets/table/columns-editor-v2/column-configuration/description-configuration/description-configuration-v2.component";
import { PresentationConfigurationV2Component } from "./components/widgets/table/columns-editor-v2/column-configuration/presentation-configuration/presentation-configuration-v2.component";
import { TableColumnConfigurationComponent } from "./components/widgets/table/columns-editor-v2/column-configuration/table-column-configuration/table-column-configuration.component";
import { TableColumnsConfigurationV2Component } from "./components/widgets/table/columns-editor-v2/table-columns-configuration-v2.component";
import { TableFiltersEditorComponent } from "./components/widgets/table/filters-editor/table-filters-editor.component";
import { TableScrollTypeEditorComponent } from "./components/widgets/table/scrollType-editor/scroll-type-editor.component";
import { ScrollTypeEditorService } from "./components/widgets/table/scrollType-editor/scroll-type-editor.service";
import { TimeseriesSeriesCollectionConfigurationComponent } from "./components/widgets/timeseries/timeseries-series-collection-configuration/timeseries-series-collection-configuration.component";
import { TimeseriesTileDescriptionConfigurationComponent } from "./components/widgets/timeseries/timeseries-tile-description-configuration/timeseries-tile-description-configuration.component";
import { TimeseriesTileIndicatorDataConfigurationComponent } from "./components/widgets/timeseries/timeseries-tile-indicator-data-configuration/timeseries-tile-indicator-data-configuration.component";
import { DashwizButtonsComponent } from "./components/wizard/dashwiz/dashwiz-buttons.component";
import { DashwizComponent } from "./components/wizard/dashwiz/dashwiz.component";
import { DashwizStepComponent } from "./components/wizard/dashwiz-step/dashwiz-step.component";
import { AddDataPipe } from "./pipe/add-data.pipe";
import { PizzagnaRootPipe } from "./pipe/pizzagna-root.pipe";
import { WidgetConfiguratorSectionHeaderPipe } from "./pipe/widget-configurator-section-header.pipe";
import { WidgetEditorAccordionFormStatePipe } from "./pipe/widget-editor-accordion-form-state.pipe";
import { FormHeaderIconPipePipe } from "./pipe/widget-editor-accordion-header-icon.pipe";
import { ConfiguratorService } from "./services/configurator.service";
import { KpiWidgetColorService } from "./services/kpi-widget-color.service";
import { ConfiguratorHeadingService } from "./services/public-api";
import { WidgetClonerService } from "./services/widget-cloner.service";
import { WidgetEditorService } from "./services/widget-editor.service";
import * as i0 from "@angular/core";
import * as i1 from "../pizzagna/services/component-registry.service";
/* eslint-enable max-len */
const entryComponents = [
ConfiguratorComponent,
FormStackComponent,
DashwizButtonsComponent,
DataSourceConfigurationComponent,
DataSourceConfigurationV2Component,
DataSourceErrorComponent,
KpiTilesConfigurationComponent,
RiskScoreTilesConfigurationComponent,
EmbeddedContentConfigurationComponent,
InfoMessageConfigurationComponent,
ProportionalChartOptionsEditorComponent,
ProportionalChartOptionsEditorV2Component,
TableFiltersEditorComponent,
TableScrollTypeEditorComponent,
TimeseriesMetadataConfigurationComponent,
TimeseriesSeriesCollectionConfigurationComponent,
TableColumnsConfigurationComponent,
TableColumnsConfigurationV2Component,
TableColumnConfigurationComponent,
TableDataSourceErrorComponent,
DonutContentPercentageFormatterComponent,
DonutContentPercentageConfigurationComponent,
DonutContentSumFormatterComponent,
DonutContentRawFormatterComponent,
IconFormatterComponent,
SiUnitsFormatterComponent,
LinkConfiguratorComponent,
ValueSelectorComponent,
LinkFormatterComponent,
PreviewPlaceholderComponent,
StatusWithIconFormatterComponent,
RawFormatterComponent,
PercentageFormatterComponent,
KpiDescriptionConfigurationComponent,
RiskScoreTileDescriptionConfigurationComponent,
ThresholdsConfigurationComponent,
TitleAndDescriptionConfigurationComponent,
WidgetConfiguratorSectionComponent,
WidgetEditorComponent,
WidgetClonerComponent,
DescriptionConfigurationComponent,
DescriptionConfigurationV2Component,
PresentationConfigurationComponent,
PresentationConfigurationV2Component,
TimeseriesTileDescriptionConfigurationComponent,
TimeseriesTileIndicatorDataConfigurationComponent,
RefresherConfigurationComponent,
BackgroundColorRulesConfigurationComponent,
GroupingConfigurationComponent,
EntityFormattingConfigurationComponent,
DonutContentConfigurationComponent,
AggregatorMetricSelectorConfigurationComponent,
FieldMapperAggregatorConfiguratorComponent,
];
const exportedDeclarations = [
...entryComponents,
DashwizComponent,
DashwizStepComponent,
WidgetEditorAccordionComponent,
WidgetEditorAccordionHeaderComponent,
ItemsDynamicComponent,
ColorPickerComponent,
ConfiguratorHeadingComponent,
RefreshRateConfiguratorComponent,
AddDataPipe,
PizzagnaRootPipe,
WidgetEditorAccordionFormStatePipe,
WidgetConfiguratorSectionHeaderPipe,
FormHeaderIconPipePipe,
DropAreaComponent,
];
export class NuiDashboardConfiguratorModule {
constructor(componentRegistry) {
for (const ec of entryComponents.filter((c) => c.lateLoadKey)) {
componentRegistry.registerByLateLoadKey(ec);
}
}
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NuiDashboardConfiguratorModule, deps: [{ token: i1.ComponentRegistryService }], target: i0.ɵɵFactoryTarget.NgModule }); }
/** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: NuiDashboardConfiguratorModule, declarations: [ConfiguratorComponent,
FormStackComponent,
DashwizButtonsComponent,
DataSourceConfigurationComponent,
DataSourceConfigurationV2Component,
DataSourceErrorComponent,
KpiTilesConfigurationComponent,
RiskScoreTilesConfigurationComponent,
EmbeddedContentConfigurationComponent,
InfoMessageConfigurationComponent,
ProportionalChartOptionsEditorComponent,
ProportionalChartOptionsEditorV2Component,
TableFiltersEditorComponent,
TableScrollTypeEditorComponent,
TimeseriesMetadataConfigurationComponent,
TimeseriesSeriesCollectionConfigurationComponent,
TableColumnsConfigurationComponent,
TableColumnsConfigurationV2Component,
TableColumnConfigurationComponent,
TableDataSourceErrorComponent,
DonutContentPercentageFormatterComponent,
DonutContentPercentageConfigurationComponent,
DonutContentSumFormatterComponent,
DonutContentRawFormatterComponent,
IconFormatterComponent,
SiUnitsFormatterComponent,
LinkConfiguratorComponent,
ValueSelectorComponent,
LinkFormatterComponent,
PreviewPlaceholderComponent,
StatusWithIconFormatterComponent,
RawFormatterComponent,
PercentageFormatterComponent,
KpiDescriptionConfigurationComponent,
RiskScoreTileDescriptionConfigurationComponent,
ThresholdsConfigurationComponent,
TitleAndDescriptionConfigurationComponent,
WidgetConfiguratorSectionComponent,
WidgetEditorComponent,
WidgetClonerComponent,
DescriptionConfigurationComponent,
DescriptionConfigurationV2Component,
PresentationConfigurationComponent,
PresentationConfigurationV2Component,
TimeseriesTileDescriptionConfigurationComponent,
TimeseriesTileIndicatorDataConfigurationComponent,
RefresherConfigurationComponent,
BackgroundColorRulesConfigurationComponent,
GroupingConfigurationComponent,
EntityFormattingConfigurationComponent,
DonutContentConfigurationComponent,
AggregatorMetricSelectorConfigurationComponent,
FieldMapperAggregatorConfiguratorComponent, DashwizComponent,
DashwizStepComponent,
WidgetEditorAccordionComponent,
WidgetEditorAccordionHeaderComponent,
ItemsDynamicComponent,
ColorPickerComponent,
ConfiguratorHeadingComponent,
RefreshRateConfiguratorComponent,
AddDataPipe,
PizzagnaRootPipe,
WidgetEditorAccordionFormStatePipe,
WidgetConfiguratorSectionHeaderPipe,
FormHeaderIconPipePipe,
DropAreaComponent], imports: [ScrollingModule,
NuiDashboardsCommonModule,
ReactiveFormsModule,
GridsterModule,
DragDropModule,
PortalModule,
NuiBusyModule,
NuiPizzagnaModule,
NuiIconModule,
NuiMenuModule,
NuiPopupModule,
NuiDialogModule,
NuiSpinnerModule,
NuiTextboxModule,
NuiFormFieldModule,
NuiButtonModule,
NuiOverlayAdditionsModule,
NuiSelectV2Module,
NuiRadioModule,
NuiCheckboxModule,
NuiValidationMessageModule,
NuiExpanderModule,
NuiPanelModule,
NuiDividerModule,
NuiSwitchModule,
NuiMessageModule,
NuiWizardModule,
NuiSorterModule,
NuiSearchModule,
NuiRepeatModule,
NuiImageModule], exports: [ConfiguratorComponent,
FormStackComponent,
DashwizButtonsComponent,
DataSourceConfigurationComponent,
DataSourceConfigurationV2Component,
DataSourceErrorComponent,
KpiTilesConfigurationComponent,
RiskScoreTilesConfigurationComponent,
EmbeddedContentConfigurationComponent,
InfoMessageConfigurationComponent,
ProportionalChartOptionsEditorComponent,
ProportionalChartOptionsEditorV2Component,
TableFiltersEditorComponent,
TableScrollTypeEditorComponent,
TimeseriesMetadataConfigurationComponent,
TimeseriesSeriesCollectionConfigurationComponent,
TableColumnsConfigurationComponent,
TableColumnsConfigurationV2Component,
TableColumnConfigurationComponent,
TableDataSourceErrorComponent,
DonutContentPercentageFormatterComponent,
DonutContentPercentageConfigurationComponent,
DonutContentSumFormatterComponent,
DonutContentRawFormatterComponent,
IconFormatterComponent,
SiUnitsFormatterComponent,
LinkConfiguratorComponent,
ValueSelectorComponent,
LinkFormatterComponent,
PreviewPlaceholderComponent,
StatusWithIconFormatterComponent,
RawFormatterComponent,
PercentageFormatterComponent,
KpiDescriptionConfigurationComponent,
RiskScoreTileDescriptionConfigurationComponent,
ThresholdsConfigurationComponent,
TitleAndDescriptionConfigurationComponent,
WidgetConfiguratorSectionComponent,
WidgetEditorComponent,
WidgetClonerComponent,
DescriptionConfigurationComponent,
DescriptionConfigurationV2Component,
PresentationConfigurationComponent,
PresentationConfigurationV2Component,
TimeseriesTileDescriptionConfigurationComponent,
TimeseriesTileIndicatorDataConfigurationComponent,
RefresherConfigurationComponent,
BackgroundColorRulesConfigurationComponent,
GroupingConfigurationComponent,
EntityFormattingConfigurationComponent,
DonutContentConfigurationComponent,
AggregatorMetricSelectorConfigurationComponent,
FieldMapperAggregatorConfiguratorComponent, DashwizComponent,
DashwizStepComponent,
WidgetEditorAccordionComponent,
WidgetEditorAccordionHeaderComponent,
ItemsDynamicComponent,
ColorPickerComponent,
ConfiguratorHeadingComponent,
RefreshRateConfiguratorComponent,
AddDataPipe,
PizzagnaRootPipe,
WidgetEditorAccordionFormStatePipe,
WidgetConfiguratorSectionHeaderPipe,
FormHeaderIconPipePipe,
DropAreaComponent] }); }
/** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NuiDashboardConfiguratorModule, providers: [
ConfiguratorService,
ConfiguratorHeadingService,
WidgetConfiguratorSectionCoordinatorService,
WidgetEditorService,
WidgetClonerService,
KpiWidgetColorService,
TimeseriesChartPresetService,
TimeseriesScalesService,
ScrollTypeEditorService,
], imports: [ScrollingModule,
NuiDashboardsCommonModule,
ReactiveFormsModule,
GridsterModule,
DragDropModule,
PortalModule,
NuiBusyModule,
NuiPizzagnaModule,
NuiIconModule,
NuiMenuModule,
NuiPopupModule,
NuiDialogModule,
NuiSpinnerModule,
NuiTextboxModule,
NuiFormFieldModule,
NuiButtonModule,
NuiOverlayAdditionsModule,
NuiSelectV2Module,
NuiRadioModule,
NuiCheckboxModule,
NuiValidationMessageModule,
NuiExpanderModule,
NuiPanelModule,
NuiDividerModule,
NuiSwitchModule,
NuiMessageModule,
NuiWizardModule,
NuiSorterModule,
NuiSearchModule,
NuiRepeatModule,
NuiImageModule] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NuiDashboardConfiguratorModule, decorators: [{
type: NgModule,
args: [{
imports: [
ScrollingModule,
NuiDashboardsCommonModule,
ReactiveFormsModule,
GridsterModule,
DragDropModule,
PortalModule,
NuiBusyModule,
NuiPizzagnaModule,
NuiIconModule,
NuiMenuModule,
NuiPopupModule,
NuiDialogModule,
NuiSpinnerModule,
NuiTextboxModule,
NuiFormFieldModule,
NuiButtonModule,
NuiOverlayAdditionsModule,
NuiSelectV2Module,
NuiRadioModule,
NuiCheckboxModule,
NuiValidationMessageModule,
NuiExpanderModule,
NuiPanelModule,
NuiDividerModule,
NuiSwitchModule,
NuiMessageModule,
NuiWizardModule,
NuiSorterModule,
NuiSearchModule,
NuiRepeatModule,
NuiImageModule,
],
declarations: [...exportedDeclarations],
providers: [
ConfiguratorService,
ConfiguratorHeadingService,
WidgetConfiguratorSectionCoordinatorService,
WidgetEditorService,
WidgetClonerService,
KpiWidgetColorService,
TimeseriesChartPresetService,
TimeseriesScalesService,
ScrollTypeEditorService,
],
exports: exportedDeclarations,
}]
}], ctorParameters: () => [{ type: i1.ComponentRegistryService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdG9yLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29uZmlndXJhdG9yL2NvbmZpZ3VyYXRvci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseURBQXlEO0FBQ3pELEVBQUU7QUFDRiwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLDREQUE0RDtBQUM1RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLHVEQUF1RDtBQUN2RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFDL0UsMEVBQTBFO0FBQzFFLGlGQUFpRjtBQUNqRiw2RUFBNkU7QUFDN0UsaUJBQWlCO0FBRWpCLDRCQUE0QjtBQUM1QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVuRCxPQUFPLEVBQ0gsYUFBYSxFQUNiLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixjQUFjLEVBQ2QsYUFBYSxFQUNiLGdCQUFnQixFQUNoQix5QkFBeUIsRUFDekIsY0FBYyxFQUNkLGNBQWMsRUFDZCxjQUFjLEVBQ2QsZUFBZSxFQUNmLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLDBCQUEwQixFQUMxQixlQUFlLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBQy9HLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFDSCx3QkFBd0IsR0FFM0IsTUFBTSxpREFBaUQsQ0FBQztBQUN6RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN4RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNsRixPQUFPLEVBQUUsNENBQTRDLEVBQUUsTUFBTSw2R0FBNkcsQ0FBQztBQUMzSyxPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSx5R0FBeUcsQ0FBQztBQUNuSyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSwyRkFBMkYsQ0FBQztBQUM5SSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSwyRkFBMkYsQ0FBQztBQUM5SSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw2RUFBNkUsQ0FBQztBQUMzSCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUN0RyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx5RkFBeUYsQ0FBQztBQUMzSSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNuRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUM3RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsMkNBQTJDLEVBQUUsTUFBTSwwRkFBMEYsQ0FBQztBQUN2SixPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQztBQUNwSSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSw4R0FBOEcsQ0FBQztBQUNwSyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUN4SCxPQUFPLEVBQUUsMENBQTBDLEVBQUUsTUFBTSw2SEFBNkgsQ0FBQztBQUN6TCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx1R0FBdUcsQ0FBQztBQUN6SixPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSw2R0FBNkcsQ0FBQztBQUNqSyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1RkFBdUYsQ0FBQztBQUNqSSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxtR0FBbUcsQ0FBQztBQUNsSixPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSxpSEFBaUgsQ0FBQztBQUN4SyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx5R0FBeUcsQ0FBQztBQUM1SixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSwrR0FBK0csQ0FBQztBQUNySyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSwrSEFBK0gsQ0FBQztBQUNqTCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtR0FBbUcsQ0FBQztBQUNwSixPQUFPLEVBQUUsOENBQThDLEVBQUUsTUFBTSx1SUFBdUksQ0FBQztBQUN2TSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxxR0FBcUcsQ0FBQztBQUN2SixPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSx1SEFBdUgsQ0FBQztBQUNqTCxPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSwySEFBMkgsQ0FBQztBQUN0TCxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSwwR0FBMEcsQ0FBQztBQUNsSyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3RkFBd0YsQ0FBQztBQUN4SSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxvRkFBb0YsQ0FBQztBQUNwSSxPQUFPLEVBQUUsOENBQThDLEVBQUUsTUFBTSx1SEFBdUgsQ0FBQztBQUN2TCxPQUFPLEVBQUUsMENBQTBDLEVBQUUsTUFBTSxpSkFBaUosQ0FBQztBQUM3TSxPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxvR0FBb0csQ0FBQztBQUM3SixPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSwwR0FBMEcsQ0FBQztBQUNySyxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxxR0FBcUcsQ0FBQztBQUN6SixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSx5R0FBeUcsQ0FBQztBQUMvSixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSw4SEFBOEgsQ0FBQztBQUNqTCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpSkFBaUosQ0FBQztBQUM1TCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwySUFBMkksQ0FBQztBQUNuTCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxnSUFBZ0ksQ0FBQztBQUNwTCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxpRkFBaUYsQ0FBQztBQUNySSxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSxvSUFBb0ksQ0FBQztBQUN6TCxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxzSUFBc0ksQ0FBQztBQUM1TCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxtSUFBbUksQ0FBQztBQUN0TCxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSx1RkFBdUYsQ0FBQztBQUM3SSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUN2SCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwyRUFBMkUsQ0FBQztBQUMzSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQztBQUNsSCxPQUFPLEVBQUUsZ0RBQWdELEVBQUUsTUFBTSxpSUFBaUksQ0FBQztBQUNuTSxPQUFPLEVBQUUsK0NBQStDLEVBQUUsTUFBTSwrSEFBK0gsQ0FBQztBQUNoTSxPQUFPLEVBQUUsaURBQWlELEVBQUUsTUFBTSxxSUFBcUksQ0FBQztBQUN4TSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNoRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUMvRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDckcsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDcEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDekYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDNUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7OztBQUN2RSwyQkFBMkI7QUFFM0IsTUFBTSxlQUFlLEdBQWdDO0lBQ2pELHFCQUFxQjtJQUNyQixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLGdDQUFnQztJQUNoQyxrQ0FBa0M7SUFDbEMsd0JBQXdCO0lBQ3hCLDhCQUE4QjtJQUM5QixvQ0FBb0M7SUFDcEMscUNBQXFDO0lBQ3JDLGlDQUFpQztJQUNqQyx1Q0FBdUM7SUFDdkMseUNBQXlDO0lBQ3pDLDJCQUEyQjtJQUMzQiw4QkFBOEI7SUFDOUIsd0NBQXdDO0lBQ3hDLGdEQUFnRDtJQUNoRCxrQ0FBa0M7SUFDbEMsb0NBQW9DO0lBQ3BDLGlDQUFpQztJQUNqQyw2QkFBNkI7SUFDN0Isd0NBQXdDO0lBQ3hDLDRDQUE0QztJQUM1QyxpQ0FBaUM7SUFDakMsaUNBQWlDO0lBQ2pDLHNCQUFzQjtJQUN0Qix5QkFBeUI7SUFDekIseUJBQXlCO0lBQ3pCLHNCQUFzQjtJQUN0QixzQkFBc0I7SUFDdEIsMkJBQTJCO0lBQzNCLGdDQUFnQztJQUNoQyxxQkFBcUI7SUFDckIsNEJBQTRCO0lBQzVCLG9DQUFvQztJQUNwQyw4Q0FBOEM7SUFDOUMsZ0NBQWdDO0lBQ2hDLHlDQUF5QztJQUN6QyxrQ0FBa0M7SUFDbEMscUJBQXFCO0lBQ3JCLHFCQUFxQjtJQUNyQixpQ0FBaUM7SUFDakMsbUNBQW1DO0lBQ25DLGtDQUFrQztJQUNsQyxvQ0FBb0M7SUFDcEMsK0NBQStDO0lBQy9DLGlEQUFpRDtJQUNqRCwrQkFBK0I7SUFDL0IsMENBQTBDO0lBQzFDLDhCQUE4QjtJQUM5QixzQ0FBc0M7SUFDdEMsa0NBQWtDO0lBQ2xDLDhDQUE4QztJQUM5QywwQ0FBMEM7Q0FDN0MsQ0FBQztBQUVGLE1BQU0sb0JBQW9CLEdBQUc7SUFDekIsR0FBRyxlQUFlO0lBQ2xCLGdCQUFnQjtJQUNoQixvQkFBb0I7SUFDcEIsOEJBQThCO0lBQzlCLG9DQUFvQztJQUNwQyxxQkFBcUI7SUFDckIsb0JBQW9CO0lBQ3BCLDRCQUE0QjtJQUM1QixnQ0FBZ0M7SUFDaEMsV0FBVztJQUNYLGdCQUFnQjtJQUNoQixrQ0FBa0M7SUFDbEMsbUNBQW1DO0lBQ25DLHNCQUFzQjtJQUN0QixpQkFBaUI7Q0FDcEIsQ0FBQztBQWtERixNQUFNLE9BQU8sOEJBQThCO0lBQ3ZDLFlBQVksaUJBQTJDO1FBQ25ELEtBQUssTUFBTSxFQUFFLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxDQUE0QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUNsRCxFQUFFO1lBQ0MsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDL0M7SUFDTCxDQUFDO2tJQVBRLDhCQUE4QjttSUFBOUIsOEJBQThCLGlCQXpIdkMscUJBQXFCO1lBQ3JCLGtCQUFrQjtZQUNsQix1QkFBdUI7WUFDdkIsZ0NBQWdDO1lBQ2hDLGtDQUFrQztZQUNsQyx3QkFBd0I7WUFDeEIsOEJBQThCO1lBQzlCLG9DQUFvQztZQUNwQyxxQ0FBcUM7WUFDckMsaUNBQWlDO1lBQ2pDLHVDQUF1QztZQUN2Qyx5Q0FBeUM7WUFDekMsMkJBQTJCO1lBQzNCLDhCQUE4QjtZQUM5Qix3Q0FBd0M7WUFDeEMsZ0RBQWdEO1lBQ2hELGtDQUFrQztZQUNsQyxvQ0FBb0M7WUFDcEMsaUNBQWlDO1lBQ2pDLDZCQUE2QjtZQUM3Qix3Q0FBd0M7WUFDeEMsNENBQTRDO1lBQzVDLGlDQUFpQztZQUNqQyxpQ0FBaUM7WUFDakMsc0JBQXNCO1lBQ3RCLHlCQUF5QjtZQUN6Qix5QkFBeUI7WUFDekIsc0JBQXNCO1lBQ3RCLHNCQUFzQjtZQUN0QiwyQkFBMkI7WUFDM0IsZ0NBQWdDO1lBQ2hDLHFCQUFxQjtZQUNyQiw0QkFBNEI7WUFDNUIsb0NBQW9DO1lBQ3BDLDhDQUE4QztZQUM5QyxnQ0FBZ0M7WUFDaEMseUNBQXlDO1lBQ3pDLGtDQUFrQztZQUNsQyxxQkFBcUI7WUFDckIscUJBQXFCO1lBQ3JCLGlDQUFpQztZQUNqQyxtQ0FBbUM7WUFDbkMsa0NBQWtDO1lBQ2xDLG9DQUFvQztZQUNwQywrQ0FBK0M7WUFDL0MsaURBQWlEO1lBQ2pELCtCQUErQjtZQUMvQiwwQ0FBMEM7WUFDMUMsOEJBQThCO1lBQzlCLHNDQUFzQztZQUN0QyxrQ0FBa0M7WUFDbEMsOENBQThDO1lBQzlDLDBDQUEwQyxFQUsxQyxnQkFBZ0I7WUFDaEIsb0JBQW9CO1lBQ3BCLDhCQUE4QjtZQUM5QixvQ0FBb0M7WUFDcEMscUJBQXFCO1lBQ3JCLG9CQUFvQjtZQUNwQiw0QkFBNEI7WUFDNUIsZ0NBQWdDO1lBQ2hDLFdBQVc7WUFDWCxnQkFBZ0I7WUFDaEIsa0NBQWtDO1lBQ2xDLG1DQUFtQztZQUNuQyxzQkFBc0I7WUFDdEIsaUJBQWlCLGFBS2IsZUFBZTtZQUNmLHlCQUF5QjtZQUN6QixtQkFBbUI7WUFDbkIsY0FBYztZQUNkLGNBQWM7WUFDZCxZQUFZO1lBQ1osYUFBYTtZQUNiLGlCQUFpQjtZQUNqQixhQUFhO1lBQ2IsYUFBYTtZQUNiLGNBQWM7WUFDZCxlQUFlO1lBQ2YsZ0JBQWdCO1lBQ2hCLGdCQUFnQjtZQUNoQixrQkFBa0I7WUFDbEIsZUFBZTtZQUNmLHlCQUF5QjtZQUN6QixpQkFBaUI7WUFDakIsY0FBYztZQUNkLGlCQUFpQjtZQUNqQiwwQkFBMEI7WUFDMUIsaUJBQWlCO1lBQ2pCLGNBQWM7WUFDZCxnQkFBZ0I7WUFDaEIsZUFBZTtZQUNmLGdCQUFnQjtZQUNoQixlQUFlO1lBQ2YsZUFBZTtZQUNmLGVBQWU7WUFDZixlQUFlO1lBQ2YsY0FBYyxhQXpHbEIscUJBQXFCO1lBQ3JCLGtCQUFrQjtZQUNsQix1QkFBdUI7WUFDdkIsZ0NBQWdDO1lBQ2hDLGtDQUFrQztZQUNsQyx3QkFBd0I7WUFDeEIsOEJBQThCO1lBQzlCLG9DQUFvQztZQUNwQyxxQ0FBcUM7WUFDckMsaUNBQWlDO1lBQ2pDLHVDQUF1QztZQUN2Qyx5Q0FBeUM7WUFDekMsMkJBQTJCO1lBQzNCLDhCQUE4QjtZQUM5Qix3Q0FBd0M7WUFDeEMsZ0RBQWdEO1lBQ2hELGtDQUFrQztZQUNsQyxvQ0FBb0M7WUFDcEMsaUNBQWlDO1lBQ2pDLDZCQUE2QjtZQUM3Qix3Q0FBd0M7WUFDeEMsNENBQTRDO1lBQzVDLGlDQUFpQztZQUNqQyxpQ0FBaUM7WUFDakMsc0JBQXNCO1lBQ3RCLHlCQUF5QjtZQUN6Qix5QkFBeUI7WUFDekIsc0JBQXNCO1lBQ3RCLHNCQUFzQjtZQUN0QiwyQkFBMkI7WUFDM0IsZ0NBQWdDO1lBQ2hDLHFCQUFxQjtZQUNyQiw0QkFBNEI7WUFDNUIsb0NBQW9DO1lBQ3BDLDhDQUE4QztZQUM5QyxnQ0FBZ0M7WUFDaEMseUNBQXlDO1lBQ3pDLGtDQUFrQztZQUNsQyxxQkFBcUI7WUFDckIscUJBQXFCO1lBQ3JCLGlDQUFpQztZQUNqQyxtQ0FBbUM7WUFDbkMsa0NBQWtDO1lBQ2xDLG9DQUFvQztZQUNwQywrQ0FBK0M7WUFDL0MsaURBQWlEO1lBQ2pELCtCQUErQjtZQUMvQiwwQ0FBMEM7WUFDMUMsOEJBQThCO1lBQzlCLHNDQUFzQztZQUN0QyxrQ0FBa0M7WUFDbEMsOENBQThDO1lBQzlDLDBDQUEwQyxFQUsxQyxnQkFBZ0I7WUFDaEIsb0JBQW9CO1lBQ3BCLDhCQUE4QjtZQUM5QixvQ0FBb0M7WUFDcEMscUJBQXFCO1lBQ3JCLG9CQUFvQjtZQUNwQiw0QkFBNEI7WUFDNUIsZ0NBQWdDO1lBQ2hDLFdBQVc7WUFDWCxnQkFBZ0I7WUFDaEIsa0NBQWtDO1lBQ2xDLG1DQUFtQztZQUNuQyxzQkFBc0I7WUFDdEIsaUJBQWlCO21JQW1EUiw4QkFBOEIsYUFiNUI7WUFDUCxtQkFBbUI7WUFDbkIsMEJBQTBCO1lBQzFCLDJDQUEyQztZQUMzQyxtQkFBbUI7WUFDbkIsbUJBQW1CO1lBQ25CLHFCQUFxQjtZQUNyQiw0QkFBNEI7WUFDNUIsdUJBQXVCO1lBQ3ZCLHVCQUF1QjtTQUMxQixZQTNDRyxlQUFlO1lBQ2YseUJBQXlCO1lBQ3pCLG1CQUFtQjtZQUNuQixjQUFjO1lBQ2QsY0FBYztZQUNkLFlBQVk7WUFDWixhQUFhO1lBQ2IsaUJBQWlCO1lBQ2pCLGFBQWE7WUFDYixhQUFhO1lBQ2IsY0FBYztZQUNkLGVBQWU7WUFDZixnQkFBZ0I7WUFDaEIsZ0JBQWdCO1lBQ2hCLGtCQUFrQjtZQUNsQixlQUFlO1lBQ2YseUJBQXlCO1lBQ3pCLGlCQUFpQjtZQUNqQixjQUFjO1lBQ2QsaUJBQWlCO1lBQ2pCLDBCQUEwQjtZQUMxQixpQkFBaUI7WUFDakIsY0FBYztZQUNkLGdCQUFnQjtZQUNoQixlQUFlO1lBQ2YsZ0JBQWdCO1lBQ2hCLGVBQWU7WUFDZixlQUFlO1lBQ2YsZUFBZTtZQUNmLGVBQWU7WUFDZixjQUFjOzs0RkFnQlQsOEJBQThCO2tCQWhEMUMsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUU7d0JBQ0wsZUFBZTt3QkFDZix5QkFBeUI7d0JBQ3pCLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixpQkFBaUI7d0JBQ2pCLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZix5QkFBeUI7d0JBQ3pCLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLDBCQUEwQjt3QkFDMUIsaUJBQWlCO3dCQUNqQixjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsY0FBYztxQkFDakI7b0JBQ0QsWUFBWSxFQUFFLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztvQkFDdkMsU0FBUyxFQUFFO3dCQUNQLG1CQUFtQjt3QkFDbkIsMEJBQTBCO3dCQUMxQiwyQ0FBMkM7d0JBQzNDLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUNuQixxQkFBcUI7d0JBQ3JCLDRCQUE0Qjt3QkFDNUIsdUJBQXVCO3dCQUN2Qix1QkFBdUI7cUJBQzFCO29CQUNELE9BQU8sRUFBRSxvQkFBb0I7aUJBQ2hDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gwqkgMjAyMiBTb2xhcldpbmRzIFdvcmxkd2lkZSwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuLy8gIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vICBUSEUgU09GVFdBUkUuXG5cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCB7IERyYWdEcm9wTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9kcmFnLWRyb3BcIjtcbmltcG9ydCB7IFBvcnRhbE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jZGsvcG9ydGFsXCI7XG5pbXBvcnQgeyBTY3JvbGxpbmdNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL3Njcm9sbGluZ1wiO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgR3JpZHN0ZXJNb2R1bGUgfSBmcm9tIFwiYW5ndWxhci1ncmlkc3RlcjJcIjtcblxuaW1wb3J0IHtcbiAgICBOdWlCdXN5TW9kdWxlLFxuICAgIE51aUJ1dHRvbk1vZHVsZSxcbiAgICBOdWlDaGVja2JveE1vZHVsZSxcbiAgICBOdWlEaWFsb2dNb2R1bGUsXG4gICAgTnVpRGl2aWRlck1vZHVsZSxcbiAgICBOdWlFeHBhbmRlck1vZHVsZSxcbiAgICBOdWlGb3JtRmllbGRNb2R1bGUsXG4gICAgTnVpSWNvbk1vZHVsZSxcbiAgICBOdWlJbWFnZU1vZHVsZSxcbiAgICBOdWlNZW51TW9kdWxlLFxuICAgIE51aU1lc3NhZ2VNb2R1bGUsXG4gICAgTnVpT3ZlcmxheUFkZGl0aW9uc01vZHVsZSxcbiAgICBOdWlQYW5lbE1vZHVsZSxcbiAgICBOdWlQb3B1cE1vZHVsZSxcbiAgICBOdWlSYWRpb01vZHVsZSxcbiAgICBOdWlSZXBlYXRNb2R1bGUsXG4gICAgTnVpU2VhcmNoTW9kdWxlLFxuICAgIE51aVNlbGVjdFYyTW9kdWxlLFxuICAgIE51aVNvcnRlck1vZHVsZSxcbiAgICBOdWlTcGlubmVyTW9kdWxlLFxuICAgIE51aVN3aXRjaE1vZHVsZSxcbiAgICBOdWlUZXh0Ym94TW9kdWxlLFxuICAgIE51aVZhbGlkYXRpb25NZXNzYWdlTW9kdWxlLFxuICAgIE51aVdpemFyZE1vZHVsZSxcbn0gZnJvbSBcIkBub3ZhLXVpL2JpdHNcIjtcblxuaW1wb3J0IHsgTnVpRGFzaGJvYXJkc0NvbW1vbk1vZHVsZSB9IGZyb20gXCIuLi9jb21tb24vY29tbW9uLm1vZHVsZVwiO1xuaW1wb3J0IHsgVGltZXNlcmllc0NoYXJ0UHJlc2V0U2VydmljZSB9IGZyb20gXCIuLi9jb21wb25lbnRzL3RpbWVzZXJpZXMtd2lkZ2V0L3RpbWVzZXJpZXMtY2hhcnQtcHJlc2V0LnNlcnZpY2VcIjtcbmltcG9ydCB7IFRpbWVzZXJpZXNTY2FsZXNTZXJ2aWNlIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvdGltZXNlcmllcy13aWRnZXQvdGltZXNlcmllcy1zY2FsZXMuc2VydmljZVwiO1xuaW1wb3J0IHsgTnVpUGl6emFnbmFNb2R1bGUgfSBmcm9tIFwiLi4vcGl6emFnbmEvcGl6emFnbmEubW9kdWxlXCI7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudFJlZ2lzdHJ5U2VydmljZSxcbiAgICBJQ29tcG9uZW50V2l0aExhdGVMb2FkS2V5LFxufSBmcm9tIFwiLi4vcGl6emFnbmEvc2VydmljZXMvY29tcG9uZW50LXJlZ2lzdHJ5LnNlcnZpY2VcIjtcbmltcG9ydCB7IENvbG9yUGlja2VyQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9jb2xvci1waWNrZXIvY29sb3ItcGlja2VyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ29uZmlndXJhdG9yQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9jb25maWd1cmF0b3IvY29uZmlndXJhdG9yLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgRHJvcEFyZWFDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2Ryb3AtYXJlYS9kcm9wLWFyZWEuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBGb3JtU3RhY2tDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2Zvcm0tc3RhY2svZm9ybS1zdGFjay5jb21wb25lbnRcIjtcbmltcG9ydCB7IERvbnV0Q29udGVudFBlcmNlbnRhZ2VDb25maWd1cmF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9mb3JtYXR0ZXJzL2RvbnV0LWNvbnRlbnQtcGVyY2VudGFnZS1mb3JtYXR0ZXIvZG9udXQtY29udGVudC1wZXJjZW50YWdlLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBEb251dENvbnRlbnRQZXJjZW50YWdlRm9ybWF0dGVyQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9mb3JtYXR0ZXJzL2RvbnV0LWNvbnRlbnQtcGVyY2VudGFnZS1mb3JtYXR0ZXIvZG9udXQtY29udGVudC1wZXJjZW50YWdlLWZvcm1hdHRlci5jb21wb25lbnRcIjtcbmltcG9ydCB7IERvbnV0Q29udGVudFJhd0Zvcm1hdHRlckNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvZm9ybWF0dGVycy9kb251dC1jb250ZW50LXJhdy1mb3JtYXR0ZXIvZG9udXQtY29udGVudC1yYXctZm9ybWF0dGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgRG9udXRDb250ZW50U3VtRm9ybWF0dGVyQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9mb3JtYXR0ZXJzL2RvbnV0LWNvbnRlbnQtc3VtLWZvcm1hdHRlci9kb251dC1jb250ZW50LXN1bS1mb3JtYXR0ZXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBJY29uRm9ybWF0dGVyQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9mb3JtYXR0ZXJzL2ljb24tZm9ybWF0dGVyL2ljb24tZm9ybWF0dGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTGlua0Zvcm1hdHRlckNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvZm9ybWF0dGVycy9saW5rLWZvcm1hdHRlci9saW5rLWZvcm1hdHRlci5jb21wb25lbnRcIjtcbmltcG9ydCB7IFBlcmNlbnRhZ2VGb3JtYXR0ZXJDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2Zvcm1hdHRlcnMvcGVyY2VudGFnZS1mb3JtYXR0ZXIvcGVyY2VudGFnZS1mb3JtYXR0ZXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBSYXdGb3JtYXR0ZXJDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2Zvcm1hdHRlcnMvcmF3LWZvcm1hdHRlci9yYXctZm9ybWF0dGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU2lVbml0c0Zvcm1hdHRlckNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvZm9ybWF0dGVycy9zaS11bml0cy1mb3JtYXR0ZXIvc2ktdW5pdHMtZm9ybWF0dGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU3RhdHVzV2l0aEljb25Gb3JtYXR0ZXJDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2Zvcm1hdHRlcnMvc3RhdHVzLXdpdGgtaWNvbi1mb3JtYXR0ZXIvc3RhdHVzLXdpdGgtaWNvbi1mb3JtYXR0ZXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBDb25maWd1cmF0b3JIZWFkaW5nQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9oZWFkaW5nL2NvbmZpZ3VyYXRvci1oZWFkaW5nLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgSXRlbXNEeW5hbWljQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9pdGVtcy1keW5hbWljL2l0ZW1zLWR5bmFtaWMuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBQcmV2aWV3UGxhY2Vob2xkZXJDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3ByZXZpZXctcGxhY2Vob2xkZXIvcHJldmlldy1wbGFjZWhvbGRlci5jb21wb25lbnRcIjtcbmltcG9ydCB7IFdpZGdldENsb25lckNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvd2lkZ2V0LWNsb25lci93aWRnZXQtY2xvbmVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgV2lkZ2V0Q29uZmlndXJhdG9yU2VjdGlvbkNvb3JkaW5hdG9yU2VydmljZSB9IGZyb20gXCIuL2NvbXBvbmVudHMvd2lkZ2V0LWNvbmZpZ3VyYXRvci1zZWN0aW9uL3dpZGdldC1jb25maWd1cmF0b3Itc2VjdGlvbi1jb29yZGluYXRvci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBXaWRnZXRDb25maWd1cmF0b3JTZWN0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy93aWRnZXQtY29uZmlndXJhdG9yLXNlY3Rpb24vd2lkZ2V0LWNvbmZpZ3VyYXRvci1zZWN0aW9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgV2lkZ2V0RWRpdG9yQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy93aWRnZXQtZWRpdG9yL3dpZGdldC1lZGl0b3IuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBXaWRnZXRFZGl0b3JBY2NvcmRpb25IZWFkZXJDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3dpZGdldC1lZGl0b3ItYWNjb3JkaW9uL3dpZGdldC1lZGl0b3ItYWNjb3JkaW9uLWhlYWRlci93aWRnZXQtZWRpdG9yLWFjY29yZGlvbi1oZWFkZXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBXaWRnZXRFZGl0b3JBY2NvcmRpb25Db21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3dpZGdldC1lZGl0b3ItYWNjb3JkaW9uL3dpZGdldC1lZGl0b3ItYWNjb3JkaW9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQmFja2dyb3VuZENvbG9yUnVsZXNDb25maWd1cmF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy93aWRnZXRzL2NvbmZpZ3VyYXRvci1pdGVtcy9iYWNrZ3JvdW5kLWNvbG9yLXJ1bGVzLWNvbmZpZ3VyYXRpb24vYmFja2dyb3VuZC1jb2xvci1ydWxlcy1jb25maWd1cmF0aW9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgRGF0YVNvdXJjZUNvbmZpZ3VyYXRpb25Db21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3dpZGdldHMvY29uZmlndXJhdG9yLWl0ZW1zL2RhdGEtc291cmNlLWNvbmZpZ3VyYXRpb24vZGF0YS1zb3VyY2UtY29uZmlndXJhdGlvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IERhdGFTb3VyY2VDb25maWd1cmF0aW9uVjJDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3dpZGdldHMvY29uZmlndXJhdG9yLWl0ZW1zL2RhdGEtc291cmNlLWNvbmZpZ3VyYXRpb24tdjIvZGF0YS1zb3VyY2UtY29uZmlndXJhdGlvbi12Mi5jb21wb25lbnRcIjtcbmltcG9ydCB7IERhdGFTb3VyY2VFcnJvckNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvd2lkZ2V0cy9jb25maWd1cmF0b3ItaXRlbXMvZGF0YS1zb3VyY2UtZXJyb3IvZGF0YS1zb3VyY2UtZXJyb3IuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBUYWJsZURhdGFTb3VyY2VFcnJvckNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvd2lkZ2V0cy9jb25maWd1cmF0b3ItaXRlbXMvZGF0YS1zb3VyY2UtZXJyb3IvdGFibGUvdGFibGUtZGF0YS1zb3VyY2UtZXJyb3IuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBFbWJlZGRlZENvbnRlbnRDb25maWd1cmF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy93aWRnZXRzL2NvbmZpZ3VyYXRvci1pdGVtcy9lbWJlZGRlZC1jb250ZW50LWNvbmZpZ3VyYXRpb24vZW1iZWRkZWQtY29udGVudC1jb25maWd1cmF0aW9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgSW5mb01lc3NhZ2VDb25maWd1cmF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy93aWRnZXRzL2NvbmZpZ3VyYXRvci1pdGVtcy9pbmZvLW1lc3NhZ2UtY29uZmlndXJhdGlvbi9pbmZvLW1lc3NhZ2UtY29uZmlndXJhdGlvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IEtwaURlc2NyaXB0aW9uQ29uZmlndXJhdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvd2lkZ2V0cy9jb25maWd1cmF0b3ItaXRlbXMva3BpLWRlc2NyaXB0aW9uLWNvbmZpZ3VyYXRpb24va3BpLWRlc2NyaXB0aW9uLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBSZWZyZXNoUmF0ZUNvbmZpZ3VyYXRvckNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvd2lkZ2V0cy9jb25maWd1cmF0b3ItaXRlbXMvcmVmcmVzaGVyLWNvbmZpZ3VyYXRpb24vcmVmcmVzaC1yYXRlLWNvbmZpZ3VyYXRvci9yZWZyZXNoLXJhdGUtY29uZmlndXJhdG9yLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUmVmcmVzaGVyQ29uZmlndXJhdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvd2lkZ2V0cy9jb25maWd1cmF0b3ItaXRlbXMvcmVmcmVzaGVyLWNvbmZpZ3VyYXRpb24vcmVmcmVzaGVyLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBSaXNrU2NvcmVUaWxlRGVzY3JpcHRpb25Db25maWd1cmF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy93aWRnZXRzL2NvbmZpZ3VyYXRvci1pdGVtcy9yaXNrLXNjb3JlLXRpbGUtZGVzY3JpcHRpb24tY29uZmlndXJhdGlvbi9yaXNrLXNjb3JlLXRpbGUtZGVzY3JpcHRpb24tY29uZmlndXJhdGlvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IFRocmVzaG9sZHNDb25maWd1cmF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy93aWRnZXRzL2NvbmZpZ3VyYXRvci1pdGVtcy90aHJlc2hvbGRzLWNvbmZpZ3VyYXRpb24vdGhyZXNob2xkcy1jb25maWd1cmF0aW9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgVGltZXNlcmllc01ldGFkYXRhQ29uZmlndXJhdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvd2lkZ2V0cy9jb25maWd1cmF0b3ItaXRlbXMvdGltZXNlcmllcy1tZXRhZGF0YS1jb25maWd1cmF0aW9uL3RpbWVzZXJpZXMtbWV0YWRhdGEtY29uZmlndXJhdGlvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IFRpdGxlQW5kRGVzY3JpcHRpb25Db25maWd1cmF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy93aWRnZXRzL2NvbmZpZ3VyYXRvci1pdGVtcy90aXRsZS1hbmQtZGVzY3JpcHRpb24tY29uZmlndXJhdGlvbi90aXRsZS1hbmQtZGVzY3JpcHRpb24tY29uZmlndXJhdGlvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IEVudGl0eUZvcm1hdHRpbmdDb25maWd1cmF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy93aWRnZXRzL2RyaWxsZG93bi9lbnRpdHktZm9ybWF0dGluZy1jb25maWd1cmF0aW9uL2VudGl0eS1mb3JtYXR0aW5nLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBHcm91cGluZ0NvbmZpZ3VyYXRpb25Db21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3dpZGdldHMvZHJpbGxkb3duL2dyb3VwaW5nLWNvbmZpZ3VyYXRpb24vZ3JvdXBpbmctY29uZmlndXJhdGlvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IEtwaVRpbGVzQ29uZmlndXJhdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvd2lkZ2V0cy9rcGkva3BpLXRpbGVzLWNvbmZpZ3VyYXRpb24va3BpLXRpbGVzLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBBZ2dyZWdhdG9yTWV0cmljU2VsZWN0b3JDb25maWd1cmF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy93aWRnZXRzL3Byb3BvcnRpb25hbC9hZ2dyZWdhdG9ycy1jb25maWd1cmF0b3JzL2FnZ3JlZ2F0b3ItY29uZmlndXJhdG9yL2FnZ3JlZ2F0b3ItY29uZmlndXJhdG9yLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgRmllbGRNYXBwZXJBZ2dyZWdhdG9yQ29uZmlndXJhdG9yQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy93aWRnZXRzL3Byb3BvcnRpb25hbC9hZ2dyZWdhdG9ycy1jb25maWd1cmF0b3JzL2ZpZWxkLW1hcHBlci1hZ2dyZWdhdG9yLWNvbmZpZ3VyYXRvci9maWVsZC1tYXBwZXItYWdncmVnYXRvci1jb25maWd1cmF0b3IuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBQcm9wb3J0aW9uYWxDaGFydE9wdGl